updated the readme

This commit is contained in:
2025-07-30 10:15:44 +02:00
parent b0a186a324
commit 108ca37468
13 changed files with 119 additions and 743 deletions

1
.gitignore vendored
View File

@@ -4,6 +4,7 @@
/public/hot /public/hot
/public/storage /public/storage
/storage/*.key /storage/*.key
/storage/framework
/vendor /vendor
.env .env
.env.backup .env.backup

View File

@@ -1,66 +1,49 @@
<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400" alt="Laravel Logo"></a></p> # AI StyleGallery
<p align="center"> ## Overview
<a href="https://github.com/laravel/framework/actions"><img src="https://github.com/laravel/framework/workflows/tests/badge.svg" alt="Build Status"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/dt/laravel/framework" alt="Total Downloads"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
</p>
## About Laravel AI StyleGallery is a web application that allows users to transform their images by applying various AI-generated styles. Users can select an image from a gallery, choose a desired style, and have the image processed by an external AI web service. The styled image is then returned to the user, who can decide to keep it (adding it to their gallery) or discard it.
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: ## Features
- [Simple, fast routing engine](https://laravel.com/docs/routing). ### User-Facing Frontend:
- [Powerful dependency injection container](https://laravel.com/docs/container).
- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage.
- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent).
- Database agnostic [schema migrations](https://laravel.com/docs/migrations).
- [Robust background job processing](https://laravel.com/docs/queues).
- [Real-time event broadcasting](https://laravel.com/docs/broadcasting).
Laravel is accessible, powerful, and provides tools required for large, robust applications. * **Image Gallery:** Browse and select images from a paginated grid.
* **Context Menu:** Access options for selected images, including printing and changing style.
* **Style Selection:** Choose from a curated list of AI-generated styles to apply to an image.
* **Image Styling:** Send images to a configured web service for AI style application.
* **Styled Image Review:** After processing, view the newly styled image in a prominent overlay with options to "Keep" (save to gallery) or "Delete" (discard).
* **Intuitive Navigation:** Swipe gestures for seamless navigation between pages on touch-enabled devices (swipe left for next, swipe right for previous).
## Learning Laravel ### Admin Panel (Filament):
Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. * **Style Management:** Create, edit, and manage AI styles, including their titles, prompts, descriptions, preview images, parameters, and associated AI models. Styles can be enabled/disabled, and duplicated.
* **AI Model Management:** Configure AI models, linking them to multiple API providers.
* **API Provider Management:** Manage API endpoints for AI services, including their names, URLs, credentials (username, password, token), and associated plugins. API providers can be enabled/disabled.
* **User and Role Management:** Standard user and role management functionalities.
* **Plugin Management:**
* **Install Plugins:** Upload new AI API provider plugins (PHP files) directly through the admin interface.
* **List and Manage Plugins:** View all installed plugins, including their names, identifiers, and file paths. Plugins can be enabled/disabled and deleted directly from the admin panel.
You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch. ## Plugins
If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 2000 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. The application supports an extensible plugin system for integrating various AI API providers. Plugins are PHP files located in the `app/Api/Plugins/` directory. Each plugin must implement the `ApiPluginInterface` to provide details like its identifier, name, and methods for enabling/disabling, and interacting with the external AI service (e.g., `upload`, `styleChangeRequest`, `getStatus`, `getProgress`).
## Laravel Sponsors ## Technology Stack
We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell). * **Backend:**
* **Laravel (PHP Framework):** Provides the core application logic, routing, and API endpoints.
### Premium Partners * **Filament:** Used for building the powerful and intuitive admin panel.
* **Laravel Sanctum:** Handles API authentication.
- **[Vehikl](https://vehikl.com/)** * **Eloquent ORM:** For database interactions.
- **[Tighten Co.](https://tighten.co)** * **Frontend:**
- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** * **Vue.js:** Reactive JavaScript framework for building the user interface.
- **[64 Robots](https://64robots.com)** * **Inertia.js:** Connects the Laravel backend with the Vue.js frontend, allowing for single-page application (SPA) like experiences with server-side routing.
- **[Cubet Techno Labs](https://cubettech.com)** * **Axios:** Promise-based HTTP client for making API requests.
- **[Cyber-Duck](https://cyber-duck.co.uk)** * **Tailwind CSS:** A utility-first CSS framework for rapid UI development.
- **[Many](https://www.many.co.uk)** * **Database:**
- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)** * **MySQL:** The primary relational database used for storing application data.
- **[DevSquad](https://devsquad.com)** * **Other:**
- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** * **Composer:** PHP dependency manager.
- **[OP.GG](https://op.gg)** * **NPM/Yarn:** JavaScript package managers.
- **[WebReinvent](https://webreinvent.com/?utm_source=laravel&utm_medium=github&utm_campaign=patreon-sponsors)** * **Vite:** Frontend tooling for fast development and optimized builds.
- **[Lendio](https://lendio.com)**
## Contributing
Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).
## Code of Conduct
In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct).
## Security Vulnerabilities
If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed.
## License
The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).

View File

@@ -0,0 +1,39 @@
<template>
<div class="fixed inset-0 bg-black bg-opacity-75 flex items-center justify-center z-50">
<div class="bg-white p-4 rounded-lg shadow-lg max-w-3xl w-full text-center">
<h2 class="text-xl font-bold mb-4">{{ __('styled_image_display.title') }}</h2>
<img :src="image.path" alt="Styled Image" class="max-w-full h-auto mx-auto mb-4 rounded-md" />
<div class="flex justify-center space-x-4">
<button
@click="$emit('keep', image)"
class="px-6 py-2 bg-green-500 text-white rounded-md hover:bg-green-600 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-opacity-50"
>
{{ __('styled_image_display.keep_button') }}
</button>
<button
@click="$emit('delete', image)"
class="px-6 py-2 bg-red-500 text-white rounded-md hover:bg-red-600 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-opacity-50"
>
{{ __('styled_image_display.delete_button') }}
</button>
</div>
</div>
</div>
</template>
<script setup>
import { defineProps, defineEmits } from 'vue';
const props = defineProps({
image: {
type: Object,
required: true,
},
});
const emits = defineEmits(['keep', 'delete']);
</script>
<style scoped>
/* Add any specific styles for the modal here if needed */
</style>

View File

@@ -29,6 +29,13 @@
@back="goBackToContextMenu" @back="goBackToContextMenu"
@close="currentOverlayComponent = null" @close="currentOverlayComponent = null"
/> />
<StyledImageDisplay
v-if="currentOverlayComponent === 'styledImageDisplay'"
:image="styledImage"
@keep="keepStyledImage"
@delete="deleteStyledImage"
/>
</div> </div>
</template> </template>
@@ -37,15 +44,17 @@ import Navigation from '../Components/Navigation.vue';
import GalleryGrid from '../Components/GalleryGrid.vue'; import GalleryGrid from '../Components/GalleryGrid.vue';
import ImageContextMenu from '../Components/ImageContextMenu.vue'; import ImageContextMenu from '../Components/ImageContextMenu.vue';
import StyleSelector from '../Components/StyleSelector.vue'; import StyleSelector from '../Components/StyleSelector.vue';
import StyledImageDisplay from '../Components/StyledImageDisplay.vue'; // Import the new component
import axios from 'axios'; import axios from 'axios';
import { ref, computed, onMounted, onUnmounted } from 'vue'; import { ref, computed, onMounted, onUnmounted } from 'vue';
const images = ref([]); const images = ref([]);
const imagesPerPage = 12; const imagesPerPage = 12;
const currentPage = ref(1); const currentPage = ref(1);
const currentOverlayComponent = ref(null); // null, 'contextMenu', 'styleSelector' const currentOverlayComponent = ref(null); // null, 'contextMenu', 'styleSelector', 'styledImageDisplay'
const contextMenuPosition = ref({ x: 0, y: 0 }); const contextMenuPosition = ref({ x: 0, y: 0 });
const selectedImage = ref(null); const selectedImage = ref(null);
const styledImage = ref(null); // To store the newly styled image
let fetchInterval = null; let fetchInterval = null;
const totalPages = computed(() => { const totalPages = computed(() => {
@@ -89,17 +98,37 @@ const goBackToContextMenu = () => {
const applyStyle = (style) => { const applyStyle = (style) => {
console.log('Applying style:', style.title, 'to image:', selectedImage.value); console.log('Applying style:', style.title, 'to image:', selectedImage.value);
currentOverlayComponent.value = null; // Close style selector immediately
// You might want to show a loading indicator here
axios.post('/api/images/style-change', { axios.post('/api/images/style-change', {
image_id: selectedImage.value.id, image_id: selectedImage.value.id,
style_id: style.id, style_id: style.id,
}) })
.then(response => { .then(response => {
console.log('Style change request successful:', response.data); console.log('Style change request successful:', response.data);
// Assuming the response contains the new styled image data
styledImage.value = response.data.styled_image; // Adjust based on your API response structure
currentOverlayComponent.value = 'styledImageDisplay'; // Show the new component
}) })
.catch(error => { .catch(error => {
console.error('Error applying style:', error); console.error('Error applying style:', error);
// Handle error, maybe show a notification
}); });
currentOverlayComponent.value = null; };
const keepStyledImage = (imageToKeep) => {
console.log('Keeping styled image:', imageToKeep);
// Implement API call to mark image as kept/permanent if needed
// For now, just refresh the image list to show the new image
fetchImages();
currentOverlayComponent.value = null; // Close the display
};
const deleteStyledImage = (imageToDelete) => {
console.log('Deleting styled image:', imageToDelete);
// Implement API call to delete the temporary styled image
currentOverlayComponent.value = null; // Close the display
}; };
const prevPage = () => { const prevPage = () => {

View File

@@ -94,6 +94,11 @@ return [
'delete' => 'Löschen', 'delete' => 'Löschen',
], ],
], ],
'styled_image_display' => [
'title' => 'Neu gestyltes Bild',
'keep_button' => 'Behalten',
'delete_button' => 'Löschen',
],
'user' => [ 'user' => [
'navigation' => [ 'navigation' => [
'group' => 'Benutzerverwaltung', 'group' => 'Benutzerverwaltung',

View File

@@ -93,6 +93,11 @@ return [
'delete' => 'Delete', 'delete' => 'Delete',
], ],
], ],
'styled_image_display' => [
'title' => 'Newly Styled Image',
'keep_button' => 'Keep',
'delete_button' => 'Delete',
],
'user' => [ 'user' => [
'navigation' => [ 'navigation' => [
'group' => 'User Management', 'group' => 'User Management',

View File

@@ -1,8 +0,0 @@
<p
<?php echo e($attributes->class(['fi-ta-empty-state-description text-sm text-gray-500 dark:text-gray-400'])); ?>
>
<?php echo e($slot); ?>
</p>
<?php /**PATH C:\wwwroot\stylegallery\backend\vendor\filament\tables\resources\views/components/empty-state/description.blade.php ENDPATH**/ ?>

View File

@@ -1,47 +0,0 @@
<?php if (isset($component)) { $__componentOriginal166a02a7c5ef5a9331faf66fa665c256 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal166a02a7c5ef5a9331faf66fa665c256 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-panels::components.page.index','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?>
<?php $component->withName('filament-panels::page'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag && $constructor = (new ReflectionClass(Illuminate\View\AnonymousComponent::class))->getConstructor()): ?>
<?php $attributes = $attributes->except(collect($constructor->getParameters())->map->getName()->all()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<form wire:submit="submit" class="space-y-6">
<?php echo e($this->form); ?>
<?php if (isset($component)) { $__componentOriginal6330f08526bbb3ce2a0da37da512a11f = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal6330f08526bbb3ce2a0da37da512a11f = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.button.index','data' => ['type' => 'submit']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?>
<?php $component->withName('filament::button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag && $constructor = (new ReflectionClass(Illuminate\View\AnonymousComponent::class))->getConstructor()): ?>
<?php $attributes = $attributes->except(collect($constructor->getParameters())->map->getName()->all()); ?>
<?php endif; ?>
<?php $component->withAttributes(['type' => 'submit']); ?>
Install Plugin
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal6330f08526bbb3ce2a0da37da512a11f)): ?>
<?php $attributes = $__attributesOriginal6330f08526bbb3ce2a0da37da512a11f; ?>
<?php unset($__attributesOriginal6330f08526bbb3ce2a0da37da512a11f); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal6330f08526bbb3ce2a0da37da512a11f)): ?>
<?php $component = $__componentOriginal6330f08526bbb3ce2a0da37da512a11f; ?>
<?php unset($__componentOriginal6330f08526bbb3ce2a0da37da512a11f); ?>
<?php endif; ?>
</form>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal166a02a7c5ef5a9331faf66fa665c256)): ?>
<?php $attributes = $__attributesOriginal166a02a7c5ef5a9331faf66fa665c256; ?>
<?php unset($__attributesOriginal166a02a7c5ef5a9331faf66fa665c256); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal166a02a7c5ef5a9331faf66fa665c256)): ?>
<?php $component = $__componentOriginal166a02a7c5ef5a9331faf66fa665c256; ?>
<?php unset($__componentOriginal166a02a7c5ef5a9331faf66fa665c256); ?>
<?php endif; ?>
<?php /**PATH C:\wwwroot\stylegallery\backend\resources\views/filament/pages/install-plugin-page.blade.php ENDPATH**/ ?>

View File

@@ -1,37 +0,0 @@
<?php extract(collect($attributes->getAttributes())->mapWithKeys(function ($value, $key) { return [Illuminate\Support\Str::camel(str_replace([':', '.'], ' ', $key)) => $value]; })->all(), EXTR_SKIP); ?>
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag; ?>
<?php foreach($attributes->onlyProps(['field','labelSrOnly']) as $__key => $__value) {
$$__key = $$__key ?? $__value;
} ?>
<?php $attributes = $attributes->exceptProps(['field','labelSrOnly']); ?>
<?php foreach (array_filter((['field','labelSrOnly']), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
} ?>
<?php $__defined_vars = get_defined_vars(); ?>
<?php foreach ($attributes as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
} ?>
<?php unset($__defined_vars); ?>
<?php if (isset($component)) { $__componentOriginala86dcd7e3fb4428c61bb5e13aa161d28 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginala86dcd7e3fb4428c61bb5e13aa161d28 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-forms::components.field-wrapper.index','data' => ['field' => $field,'labelSrOnly' => $labelSrOnly]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?>
<?php $component->withName('filament-forms::field-wrapper'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag && $constructor = (new ReflectionClass(Illuminate\View\AnonymousComponent::class))->getConstructor()): ?>
<?php $attributes = $attributes->except(collect($constructor->getParameters())->map->getName()->all()); ?>
<?php endif; ?>
<?php $component->withAttributes(['field' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($field),'label-sr-only' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($labelSrOnly)]); ?>
<?php echo e($slot ?? ""); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginala86dcd7e3fb4428c61bb5e13aa161d28)): ?>
<?php $attributes = $__attributesOriginala86dcd7e3fb4428c61bb5e13aa161d28; ?>
<?php unset($__attributesOriginala86dcd7e3fb4428c61bb5e13aa161d28); ?>
<?php endif; ?>
<?php if (isset($__componentOriginala86dcd7e3fb4428c61bb5e13aa161d28)): ?>
<?php $component = $__componentOriginala86dcd7e3fb4428c61bb5e13aa161d28; ?>
<?php unset($__componentOriginala86dcd7e3fb4428c61bb5e13aa161d28); ?>
<?php endif; ?><?php /**PATH C:\wwwroot\stylegallery\backend\storage\framework\views/bb2a00dce2af7923758c4a15eaed50fb.blade.php ENDPATH**/ ?>

View File

@@ -1,442 +0,0 @@
<?php
use Filament\Support\Enums\Alignment;
?>
<?php if (isset($component)) { $__componentOriginal511d4862ff04963c3c16115c05a86a9d = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal511d4862ff04963c3c16115c05a86a9d = $attributes; } ?>
<?php $component = Illuminate\View\DynamicComponent::resolve(['component' => $getFieldWrapperView()] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?>
<?php $component->withName('dynamic-component'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag && $constructor = (new ReflectionClass(Illuminate\View\DynamicComponent::class))->getConstructor()): ?>
<?php $attributes = $attributes->except(collect($constructor->getParameters())->map->getName()->all()); ?>
<?php endif; ?>
<?php $component->withAttributes(['field' => $field,'label-sr-only' => $isLabelHidden()]); ?>
<?php
$imageCropAspectRatio = $getImageCropAspectRatio();
$imageResizeTargetHeight = $getImageResizeTargetHeight();
$imageResizeTargetWidth = $getImageResizeTargetWidth();
$isAvatar = $isAvatar();
$statePath = $getStatePath();
$isDisabled = $isDisabled();
$hasImageEditor = $hasImageEditor();
?>
<div
ax-load
ax-load-src="<?php echo e(\Filament\Support\Facades\FilamentAsset::getAlpineComponentSrc('file-upload', 'filament/forms')); ?>"
x-data="fileUploadFormComponent({
acceptedFileTypes: <?php echo \Illuminate\Support\Js::from($getAcceptedFileTypes())->toHtml() ?>,
imageEditorEmptyFillColor: <?php echo \Illuminate\Support\Js::from($getImageEditorEmptyFillColor())->toHtml() ?>,
imageEditorMode: <?php echo \Illuminate\Support\Js::from($getImageEditorMode())->toHtml() ?>,
imageEditorViewportHeight: <?php echo \Illuminate\Support\Js::from($getImageEditorViewportHeight())->toHtml() ?>,
imageEditorViewportWidth: <?php echo \Illuminate\Support\Js::from($getImageEditorViewportWidth())->toHtml() ?>,
deleteUploadedFileUsing: async (fileKey) => {
return await $wire.deleteUploadedFile(<?php echo \Illuminate\Support\Js::from($statePath)->toHtml() ?>, fileKey)
},
getUploadedFilesUsing: async () => {
return await $wire.getFormUploadedFiles(<?php echo \Illuminate\Support\Js::from($statePath)->toHtml() ?>)
},
hasImageEditor: <?php echo \Illuminate\Support\Js::from($hasImageEditor)->toHtml() ?>,
imageCropAspectRatio: <?php echo \Illuminate\Support\Js::from($imageCropAspectRatio)->toHtml() ?>,
imagePreviewHeight: <?php echo \Illuminate\Support\Js::from($getImagePreviewHeight())->toHtml() ?>,
imageResizeMode: <?php echo \Illuminate\Support\Js::from($getImageResizeMode())->toHtml() ?>,
imageResizeTargetHeight: <?php echo \Illuminate\Support\Js::from($imageResizeTargetHeight)->toHtml() ?>,
imageResizeTargetWidth: <?php echo \Illuminate\Support\Js::from($imageResizeTargetWidth)->toHtml() ?>,
imageResizeUpscale: <?php echo \Illuminate\Support\Js::from($getImageResizeUpscale())->toHtml() ?>,
isAvatar: <?php echo \Illuminate\Support\Js::from($isAvatar)->toHtml() ?>,
isDisabled: <?php echo \Illuminate\Support\Js::from($isDisabled)->toHtml() ?>,
isDownloadable: <?php echo \Illuminate\Support\Js::from($isDownloadable())->toHtml() ?>,
isOpenable: <?php echo \Illuminate\Support\Js::from($isOpenable())->toHtml() ?>,
isPreviewable: <?php echo \Illuminate\Support\Js::from($isPreviewable())->toHtml() ?>,
isReorderable: <?php echo \Illuminate\Support\Js::from($isReorderable())->toHtml() ?>,
loadingIndicatorPosition: <?php echo \Illuminate\Support\Js::from($getLoadingIndicatorPosition())->toHtml() ?>,
locale: <?php echo \Illuminate\Support\Js::from(app()->getLocale())->toHtml() ?>,
panelAspectRatio: <?php echo \Illuminate\Support\Js::from($getPanelAspectRatio())->toHtml() ?>,
panelLayout: <?php echo \Illuminate\Support\Js::from($getPanelLayout())->toHtml() ?>,
placeholder: <?php echo \Illuminate\Support\Js::from($getPlaceholder())->toHtml() ?>,
maxSize: <?php echo \Illuminate\Support\Js::from(($size = $getMaxSize()) ? "'{$size} KB'" : null)->toHtml() ?>,
minSize: <?php echo \Illuminate\Support\Js::from(($size = $getMinSize()) ? "'{$size} KB'" : null)->toHtml() ?>,
removeUploadedFileUsing: async (fileKey) => {
return await $wire.removeFormUploadedFile(<?php echo \Illuminate\Support\Js::from($statePath)->toHtml() ?>, fileKey)
},
removeUploadedFileButtonPosition: <?php echo \Illuminate\Support\Js::from($getRemoveUploadedFileButtonPosition())->toHtml() ?>,
reorderUploadedFilesUsing: async (files) => {
return await $wire.reorderFormUploadedFiles(<?php echo \Illuminate\Support\Js::from($statePath)->toHtml() ?>, files)
},
shouldAppendFiles: <?php echo \Illuminate\Support\Js::from($shouldAppendFiles())->toHtml() ?>,
shouldOrientImageFromExif: <?php echo \Illuminate\Support\Js::from($shouldOrientImagesFromExif())->toHtml() ?>,
shouldTransformImage: <?php echo \Illuminate\Support\Js::from($imageCropAspectRatio || $imageResizeTargetHeight || $imageResizeTargetWidth)->toHtml() ?>,
state: $wire.<?php echo e($applyStateBindingModifiers("entangle('{$statePath}')")); ?>,
uploadButtonPosition: <?php echo \Illuminate\Support\Js::from($getUploadButtonPosition())->toHtml() ?>,
uploadProgressIndicatorPosition: <?php echo \Illuminate\Support\Js::from($getUploadProgressIndicatorPosition())->toHtml() ?>,
uploadUsing: (fileKey, file, success, error, progress) => {
$wire.upload(
`<?php echo e($statePath); ?>.${fileKey}`,
file,
() => {
success(fileKey)
},
error,
progress,
)
},
})"
wire:ignore
x-ignore
<?php echo e($attributes
->merge([
'id' => $getId(),
], escape: false)
->merge($getExtraAttributes(), escape: false)
->merge($getExtraAlpineAttributes(), escape: false)
->class([
'fi-fo-file-upload flex',
match ($getAlignment()) {
Alignment::Center, 'center' => 'justify-center',
Alignment::End, 'end' => 'justify-end',
Alignment::Left, 'left' => 'justify-left',
Alignment::Right, 'right' => 'justify-right',
Alignment::Start, 'start', null => 'justify-start',
},
])); ?>
>
<div
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
'h-full',
'w-32' => $isAvatar,
'w-full' => ! $isAvatar,
]); ?>"
>
<input
x-ref="input"
<?php echo e($getExtraInputAttributeBag()
->merge([
'disabled' => $isDisabled,
'multiple' => $isMultiple(),
'type' => 'file',
], escape: false)); ?>
/>
</div>
<?php if($hasImageEditor && (! $isDisabled)): ?>
<div
x-show="isEditorOpen"
x-cloak
x-on:click.stop
x-trap.noscroll="isEditorOpen"
x-on:keydown.escape.window="closeEditor"
class="fixed inset-0 isolate z-50 h-screen w-screen p-2 sm:p-10 md:p-20"
>
<div
aria-hidden="true"
class="fixed inset-0 h-full w-full cursor-pointer bg-black/50"
style="will-change: transform"
></div>
<div
class="isolate z-10 flex h-full w-full items-center justify-center"
>
<div
class="mx-auto flex h-full w-full flex-col overflow-hidden rounded-xl bg-white ring-1 ring-gray-900/10 dark:bg-gray-800 dark:ring-gray-50/10 lg:flex-row"
>
<div class="w-full flex-1 overflow-auto p-4 lg:h-full">
<div class="h-full w-full">
<img x-ref="editor" class="h-full w-auto" />
</div>
</div>
<div
class="shadow-top z-[1] flex h-96 w-full flex-col overflow-auto bg-gray-50 dark:bg-gray-900/30 lg:h-full lg:max-w-xs lg:shadow-none"
>
<div class="flex-1 overflow-hidden">
<div
class="flex h-full flex-col overflow-y-auto"
>
<div class="flex-1 overflow-auto">
<div class="space-y-6 p-4">
<div class="w-full space-y-3">
<?php $__currentLoopData = [
[
'label' => __('filament-forms::components.file_upload.editor.fields.x_position.label'),
'ref' => 'xPositionInput',
'unit' => __('filament-forms::components.file_upload.editor.fields.x_position.unit'),
'alpineSaveHandler' => 'editor.setData({...editor.getData(true), x: +$el.value})',
],
[
'label' => __('filament-forms::components.file_upload.editor.fields.y_position.label'),
'ref' => 'yPositionInput',
'unit' => __('filament-forms::components.file_upload.editor.fields.y_position.unit'),
'alpineSaveHandler' => 'editor.setData({...editor.getData(true), y: +$el.value})',
],
[
'label' => __('filament-forms::components.file_upload.editor.fields.width.label'),
'ref' => 'widthInput',
'unit' => __('filament-forms::components.file_upload.editor.fields.width.unit'),
'alpineSaveHandler' => 'editor.setData({...editor.getData(true), width: +$el.value})',
],
[
'label' => __('filament-forms::components.file_upload.editor.fields.height.label'),
'ref' => 'heightInput',
'unit' => __('filament-forms::components.file_upload.editor.fields.height.unit'),
'alpineSaveHandler' => 'editor.setData({...editor.getData(true), height: +$el.value})',
],
[
'label' => __('filament-forms::components.file_upload.editor.fields.rotation.label'),
'ref' => 'rotationInput',
'unit' => __('filament-forms::components.file_upload.editor.fields.rotation.unit'),
'alpineSaveHandler' => 'editor.rotateTo(+$el.value)',
],
]; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $input): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<label
class="flex w-full items-center rounded-lg border border-gray-300 bg-gray-100 text-sm shadow-sm dark:border-gray-700 dark:bg-gray-800"
>
<span
class="flex w-20 flex-shrink-0 items-center justify-center self-stretch border-e border-gray-300 px-2 dark:border-gray-700"
>
<?php echo e($input['label']); ?>
</span>
<input
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
'block w-full border-none text-sm transition duration-75 focus:border-primary-500 focus:ring-1 focus:ring-inset focus:ring-primary-500 disabled:opacity-70 dark:bg-gray-700 dark:text-white dark:focus:border-primary-500',
]); ?>"
x-on:keyup.enter.stop.prevent="<?php echo e($input['alpineSaveHandler']); ?>"
x-on:blur="<?php echo e($input['alpineSaveHandler']); ?>"
x-ref="<?php echo e($input['ref']); ?>"
x-on:keydown.enter.prevent
type="text"
/>
<span
class="flex w-16 items-center justify-center self-stretch border-s border-gray-300 px-2 dark:border-gray-700"
>
<?php echo e($input['unit']); ?>
</span>
</label>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
</div>
<div class="space-y-3">
<?php $__currentLoopData = $getImageEditorActions(iconSizeClasses: 'h-5 w-5 mx-auto'); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $groupedActions): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php if (isset($component)) { $__componentOriginalfdab887de9877b48a57ef00a75a2effb = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalfdab887de9877b48a57ef00a75a2effb = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.button.group','data' => ['class' => 'w-full']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?>
<?php $component->withName('filament::button.group'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag && $constructor = (new ReflectionClass(Illuminate\View\AnonymousComponent::class))->getConstructor()): ?>
<?php $attributes = $attributes->except(collect($constructor->getParameters())->map->getName()->all()); ?>
<?php endif; ?>
<?php $component->withAttributes(['class' => 'w-full']); ?>
<?php $__currentLoopData = $groupedActions; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $action): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php if (isset($component)) { $__componentOriginal6330f08526bbb3ce2a0da37da512a11f = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal6330f08526bbb3ce2a0da37da512a11f = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.button.index','data' => ['xTooltip' => '{
content: @js($action[\'label\']),
theme: $store.theme,
}','xOn:click.stop.prevent' => ''.e($action['alpineClickHandler']).'','color' => 'gray','grouped' => true]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?>
<?php $component->withName('filament::button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag && $constructor = (new ReflectionClass(Illuminate\View\AnonymousComponent::class))->getConstructor()): ?>
<?php $attributes = $attributes->except(collect($constructor->getParameters())->map->getName()->all()); ?>
<?php endif; ?>
<?php $component->withAttributes(['x-tooltip' => '{
content: @js($action[\'label\']),
theme: $store.theme,
}','x-on:click.stop.prevent' => ''.e($action['alpineClickHandler']).'','color' => 'gray','grouped' => true]); ?>
<?php echo $action['iconHtml']; ?>
<span
class="sr-only"
>
<?php echo e($action['label']); ?>
</span>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal6330f08526bbb3ce2a0da37da512a11f)): ?>
<?php $attributes = $__attributesOriginal6330f08526bbb3ce2a0da37da512a11f; ?>
<?php unset($__attributesOriginal6330f08526bbb3ce2a0da37da512a11f); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal6330f08526bbb3ce2a0da37da512a11f)): ?>
<?php $component = $__componentOriginal6330f08526bbb3ce2a0da37da512a11f; ?>
<?php unset($__componentOriginal6330f08526bbb3ce2a0da37da512a11f); ?>
<?php endif; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalfdab887de9877b48a57ef00a75a2effb)): ?>
<?php $attributes = $__attributesOriginalfdab887de9877b48a57ef00a75a2effb; ?>
<?php unset($__attributesOriginalfdab887de9877b48a57ef00a75a2effb); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalfdab887de9877b48a57ef00a75a2effb)): ?>
<?php $component = $__componentOriginalfdab887de9877b48a57ef00a75a2effb; ?>
<?php unset($__componentOriginalfdab887de9877b48a57ef00a75a2effb); ?>
<?php endif; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
</div>
<?php if(count($aspectRatios = $getImageEditorAspectRatiosForJs())): ?>
<div class="space-y-3">
<div
class="text-xs text-gray-950 dark:text-white"
>
<?php echo e(__('filament-forms::components.file_upload.editor.aspect_ratios.label')); ?>
</div>
<?php $__currentLoopData = collect($aspectRatios)->chunk(5); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $ratiosChunk): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php if (isset($component)) { $__componentOriginalfdab887de9877b48a57ef00a75a2effb = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalfdab887de9877b48a57ef00a75a2effb = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.button.group','data' => ['class' => 'w-full']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?>
<?php $component->withName('filament::button.group'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag && $constructor = (new ReflectionClass(Illuminate\View\AnonymousComponent::class))->getConstructor()): ?>
<?php $attributes = $attributes->except(collect($constructor->getParameters())->map->getName()->all()); ?>
<?php endif; ?>
<?php $component->withAttributes(['class' => 'w-full']); ?>
<?php $__currentLoopData = $ratiosChunk; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $label => $ratio): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php if (isset($component)) { $__componentOriginal6330f08526bbb3ce2a0da37da512a11f = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal6330f08526bbb3ce2a0da37da512a11f = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.button.index','data' => ['xTooltip' => '{
content: @js(__(\'filament-forms::components.file_upload.editor.actions.set_aspect_ratio.label\', [\'ratio\' => $label])),
theme: $store.theme,
}','xOn:click.stop.prevent' => 'currentRatio = \''.e($label).'\'; editor.setAspectRatio('.e($ratio).')','color' => 'gray','xBind:class' => '{\'!bg-gray-50 dark:!bg-gray-700\': currentRatio === \''.e($label).'\'}','grouped' => true]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?>
<?php $component->withName('filament::button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag && $constructor = (new ReflectionClass(Illuminate\View\AnonymousComponent::class))->getConstructor()): ?>
<?php $attributes = $attributes->except(collect($constructor->getParameters())->map->getName()->all()); ?>
<?php endif; ?>
<?php $component->withAttributes(['x-tooltip' => '{
content: @js(__(\'filament-forms::components.file_upload.editor.actions.set_aspect_ratio.label\', [\'ratio\' => $label])),
theme: $store.theme,
}','x-on:click.stop.prevent' => 'currentRatio = \''.e($label).'\'; editor.setAspectRatio('.e($ratio).')','color' => 'gray','x-bind:class' => '{\'!bg-gray-50 dark:!bg-gray-700\': currentRatio === \''.e($label).'\'}','grouped' => true]); ?>
<?php echo e($label); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal6330f08526bbb3ce2a0da37da512a11f)): ?>
<?php $attributes = $__attributesOriginal6330f08526bbb3ce2a0da37da512a11f; ?>
<?php unset($__attributesOriginal6330f08526bbb3ce2a0da37da512a11f); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal6330f08526bbb3ce2a0da37da512a11f)): ?>
<?php $component = $__componentOriginal6330f08526bbb3ce2a0da37da512a11f; ?>
<?php unset($__componentOriginal6330f08526bbb3ce2a0da37da512a11f); ?>
<?php endif; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalfdab887de9877b48a57ef00a75a2effb)): ?>
<?php $attributes = $__attributesOriginalfdab887de9877b48a57ef00a75a2effb; ?>
<?php unset($__attributesOriginalfdab887de9877b48a57ef00a75a2effb); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalfdab887de9877b48a57ef00a75a2effb)): ?>
<?php $component = $__componentOriginalfdab887de9877b48a57ef00a75a2effb; ?>
<?php unset($__componentOriginalfdab887de9877b48a57ef00a75a2effb); ?>
<?php endif; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
</div>
<?php endif; ?>
</div>
</div>
<div
class="flex items-center gap-3 px-4 py-3"
>
<?php if (isset($component)) { $__componentOriginal6330f08526bbb3ce2a0da37da512a11f = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal6330f08526bbb3ce2a0da37da512a11f = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.button.index','data' => ['color' => 'gray','xOn:click.prevent' => 'pond.imageEditEditor.oncancel']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?>
<?php $component->withName('filament::button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag && $constructor = (new ReflectionClass(Illuminate\View\AnonymousComponent::class))->getConstructor()): ?>
<?php $attributes = $attributes->except(collect($constructor->getParameters())->map->getName()->all()); ?>
<?php endif; ?>
<?php $component->withAttributes(['color' => 'gray','x-on:click.prevent' => 'pond.imageEditEditor.oncancel']); ?>
<?php echo e(__('filament-forms::components.file_upload.editor.actions.cancel.label')); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal6330f08526bbb3ce2a0da37da512a11f)): ?>
<?php $attributes = $__attributesOriginal6330f08526bbb3ce2a0da37da512a11f; ?>
<?php unset($__attributesOriginal6330f08526bbb3ce2a0da37da512a11f); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal6330f08526bbb3ce2a0da37da512a11f)): ?>
<?php $component = $__componentOriginal6330f08526bbb3ce2a0da37da512a11f; ?>
<?php unset($__componentOriginal6330f08526bbb3ce2a0da37da512a11f); ?>
<?php endif; ?>
<?php if (isset($component)) { $__componentOriginal6330f08526bbb3ce2a0da37da512a11f = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal6330f08526bbb3ce2a0da37da512a11f = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.button.index','data' => ['color' => 'warning','xOn:click.stop.prevent' => 'editor.reset()','class' => 'ml-auto']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?>
<?php $component->withName('filament::button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag && $constructor = (new ReflectionClass(Illuminate\View\AnonymousComponent::class))->getConstructor()): ?>
<?php $attributes = $attributes->except(collect($constructor->getParameters())->map->getName()->all()); ?>
<?php endif; ?>
<?php $component->withAttributes(['color' => 'warning','x-on:click.stop.prevent' => 'editor.reset()','class' => 'ml-auto']); ?>
<?php echo e(__('filament-forms::components.file_upload.editor.actions.reset.label')); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal6330f08526bbb3ce2a0da37da512a11f)): ?>
<?php $attributes = $__attributesOriginal6330f08526bbb3ce2a0da37da512a11f; ?>
<?php unset($__attributesOriginal6330f08526bbb3ce2a0da37da512a11f); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal6330f08526bbb3ce2a0da37da512a11f)): ?>
<?php $component = $__componentOriginal6330f08526bbb3ce2a0da37da512a11f; ?>
<?php unset($__componentOriginal6330f08526bbb3ce2a0da37da512a11f); ?>
<?php endif; ?>
<?php if (isset($component)) { $__componentOriginal6330f08526bbb3ce2a0da37da512a11f = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal6330f08526bbb3ce2a0da37da512a11f = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.button.index','data' => ['color' => 'success','xOn:click.prevent' => 'saveEditor']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?>
<?php $component->withName('filament::button'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag && $constructor = (new ReflectionClass(Illuminate\View\AnonymousComponent::class))->getConstructor()): ?>
<?php $attributes = $attributes->except(collect($constructor->getParameters())->map->getName()->all()); ?>
<?php endif; ?>
<?php $component->withAttributes(['color' => 'success','x-on:click.prevent' => 'saveEditor']); ?>
<?php echo e(__('filament-forms::components.file_upload.editor.actions.save.label')); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal6330f08526bbb3ce2a0da37da512a11f)): ?>
<?php $attributes = $__attributesOriginal6330f08526bbb3ce2a0da37da512a11f; ?>
<?php unset($__attributesOriginal6330f08526bbb3ce2a0da37da512a11f); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal6330f08526bbb3ce2a0da37da512a11f)): ?>
<?php $component = $__componentOriginal6330f08526bbb3ce2a0da37da512a11f; ?>
<?php unset($__componentOriginal6330f08526bbb3ce2a0da37da512a11f); ?>
<?php endif; ?>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<?php endif; ?>
</div>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal511d4862ff04963c3c16115c05a86a9d)): ?>
<?php $attributes = $__attributesOriginal511d4862ff04963c3c16115c05a86a9d; ?>
<?php unset($__attributesOriginal511d4862ff04963c3c16115c05a86a9d); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal511d4862ff04963c3c16115c05a86a9d)): ?>
<?php $component = $__componentOriginal511d4862ff04963c3c16115c05a86a9d; ?>
<?php unset($__componentOriginal511d4862ff04963c3c16115c05a86a9d); ?>
<?php endif; ?>
<?php /**PATH C:\wwwroot\stylegallery\backend\vendor\filament\forms\resources\views/components/file-upload.blade.php ENDPATH**/ ?>

View File

@@ -1,8 +0,0 @@
<h4
<?php echo e($attributes->class(['fi-ta-empty-state-heading text-base font-semibold leading-6 text-gray-950 dark:text-white'])); ?>
>
<?php echo e($slot); ?>
</h4>
<?php /**PATH C:\wwwroot\stylegallery\backend\vendor\filament\tables\resources\views/components/empty-state/heading.blade.php ENDPATH**/ ?>

View File

@@ -1,138 +0,0 @@
<?php
use Filament\Support\Enums\Alignment;
?>
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag; ?>
<?php foreach($attributes->onlyProps([
'actions' => [],
'description' => null,
'heading',
'icon',
]) as $__key => $__value) {
$$__key = $$__key ?? $__value;
} ?>
<?php $attributes = $attributes->exceptProps([
'actions' => [],
'description' => null,
'heading',
'icon',
]); ?>
<?php foreach (array_filter(([
'actions' => [],
'description' => null,
'heading',
'icon',
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
$$__key = $$__key ?? $__value;
} ?>
<?php $__defined_vars = get_defined_vars(); ?>
<?php foreach ($attributes as $__key => $__value) {
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
} ?>
<?php unset($__defined_vars); ?>
<div
<?php echo e($attributes->class(['fi-ta-empty-state px-6 py-12'])); ?>
>
<div
class="fi-ta-empty-state-content mx-auto grid max-w-lg justify-items-center text-center"
>
<div
class="fi-ta-empty-state-icon-ctn mb-4 rounded-full bg-gray-100 p-3 dark:bg-gray-500/20"
>
<?php if (isset($component)) { $__componentOriginalbfc641e0710ce04e5fe02876ffc6f950 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalbfc641e0710ce04e5fe02876ffc6f950 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament::components.icon','data' => ['icon' => $icon,'class' => 'fi-ta-empty-state-icon h-6 w-6 text-gray-500 dark:text-gray-400']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?>
<?php $component->withName('filament::icon'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag && $constructor = (new ReflectionClass(Illuminate\View\AnonymousComponent::class))->getConstructor()): ?>
<?php $attributes = $attributes->except(collect($constructor->getParameters())->map->getName()->all()); ?>
<?php endif; ?>
<?php $component->withAttributes(['icon' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($icon),'class' => 'fi-ta-empty-state-icon h-6 w-6 text-gray-500 dark:text-gray-400']); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalbfc641e0710ce04e5fe02876ffc6f950)): ?>
<?php $attributes = $__attributesOriginalbfc641e0710ce04e5fe02876ffc6f950; ?>
<?php unset($__attributesOriginalbfc641e0710ce04e5fe02876ffc6f950); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalbfc641e0710ce04e5fe02876ffc6f950)): ?>
<?php $component = $__componentOriginalbfc641e0710ce04e5fe02876ffc6f950; ?>
<?php unset($__componentOriginalbfc641e0710ce04e5fe02876ffc6f950); ?>
<?php endif; ?>
</div>
<?php if (isset($component)) { $__componentOriginal130fd53052f7fb96516142d5e36c3545 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal130fd53052f7fb96516142d5e36c3545 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-tables::components.empty-state.heading','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?>
<?php $component->withName('filament-tables::empty-state.heading'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag && $constructor = (new ReflectionClass(Illuminate\View\AnonymousComponent::class))->getConstructor()): ?>
<?php $attributes = $attributes->except(collect($constructor->getParameters())->map->getName()->all()); ?>
<?php endif; ?>
<?php $component->withAttributes([]); ?>
<?php echo e($heading); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal130fd53052f7fb96516142d5e36c3545)): ?>
<?php $attributes = $__attributesOriginal130fd53052f7fb96516142d5e36c3545; ?>
<?php unset($__attributesOriginal130fd53052f7fb96516142d5e36c3545); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal130fd53052f7fb96516142d5e36c3545)): ?>
<?php $component = $__componentOriginal130fd53052f7fb96516142d5e36c3545; ?>
<?php unset($__componentOriginal130fd53052f7fb96516142d5e36c3545); ?>
<?php endif; ?>
<?php if($description): ?>
<?php if (isset($component)) { $__componentOriginalc142a3e962e03b45ea4d798cbb1a12b4 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginalc142a3e962e03b45ea4d798cbb1a12b4 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-tables::components.empty-state.description','data' => ['class' => 'mt-1']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?>
<?php $component->withName('filament-tables::empty-state.description'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag && $constructor = (new ReflectionClass(Illuminate\View\AnonymousComponent::class))->getConstructor()): ?>
<?php $attributes = $attributes->except(collect($constructor->getParameters())->map->getName()->all()); ?>
<?php endif; ?>
<?php $component->withAttributes(['class' => 'mt-1']); ?>
<?php echo e($description); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginalc142a3e962e03b45ea4d798cbb1a12b4)): ?>
<?php $attributes = $__attributesOriginalc142a3e962e03b45ea4d798cbb1a12b4; ?>
<?php unset($__attributesOriginalc142a3e962e03b45ea4d798cbb1a12b4); ?>
<?php endif; ?>
<?php if (isset($__componentOriginalc142a3e962e03b45ea4d798cbb1a12b4)): ?>
<?php $component = $__componentOriginalc142a3e962e03b45ea4d798cbb1a12b4; ?>
<?php unset($__componentOriginalc142a3e962e03b45ea4d798cbb1a12b4); ?>
<?php endif; ?>
<?php endif; ?>
<?php if($actions): ?>
<?php if (isset($component)) { $__componentOriginal32a2358b99de73a2a27625c392d6fe38 = $component; } ?>
<?php if (isset($attributes)) { $__attributesOriginal32a2358b99de73a2a27625c392d6fe38 = $attributes; } ?>
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'filament-tables::components.actions','data' => ['actions' => $actions,'alignment' => Alignment::Center,'wrap' => true,'class' => 'mt-6']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?>
<?php $component->withName('filament-tables::actions'); ?>
<?php if ($component->shouldRender()): ?>
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag && $constructor = (new ReflectionClass(Illuminate\View\AnonymousComponent::class))->getConstructor()): ?>
<?php $attributes = $attributes->except(collect($constructor->getParameters())->map->getName()->all()); ?>
<?php endif; ?>
<?php $component->withAttributes(['actions' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($actions),'alignment' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(Alignment::Center),'wrap' => true,'class' => 'mt-6']); ?>
<?php echo $__env->renderComponent(); ?>
<?php endif; ?>
<?php if (isset($__attributesOriginal32a2358b99de73a2a27625c392d6fe38)): ?>
<?php $attributes = $__attributesOriginal32a2358b99de73a2a27625c392d6fe38; ?>
<?php unset($__attributesOriginal32a2358b99de73a2a27625c392d6fe38); ?>
<?php endif; ?>
<?php if (isset($__componentOriginal32a2358b99de73a2a27625c392d6fe38)): ?>
<?php $component = $__componentOriginal32a2358b99de73a2a27625c392d6fe38; ?>
<?php unset($__componentOriginal32a2358b99de73a2a27625c392d6fe38); ?>
<?php endif; ?>
<?php endif; ?>
</div>
</div>
<?php /**PATH C:\wwwroot\stylegallery\backend\vendor\filament\tables\resources\views/components/empty-state/index.blade.php ENDPATH**/ ?>

View File

@@ -1,6 +0,0 @@
<?php extract(collect($attributes->getAttributes())->mapWithKeys(function ($value, $key) { return [Illuminate\Support\Str::camel(str_replace([':', '.'], ' ', $key)) => $value]; })->all(), EXTR_SKIP); ?>
@props(['field','labelSrOnly'])
<x-filament-forms::field-wrapper :field="$field" :label-sr-only="$labelSrOnly" >
{{ $slot ?? "" }}
</x-filament-forms::field-wrapper>