From 108ca37468fa77fb4f82896339be3e4d2bae88fe Mon Sep 17 00:00:00 2001 From: SEB Fotografie - soeren Date: Wed, 30 Jul 2025 10:15:44 +0200 Subject: [PATCH] updated the readme --- .gitignore | 1 + README.md | 93 ++-- .../js/Components/StyledImageDisplay.vue | 39 ++ resources/js/Pages/Home.vue | 33 +- resources/lang/de/filament.php | 5 + resources/lang/en/filament.php | 5 + .../0f6637ca16dff377761c6b83f366322e.php | 8 - .../15c285d030ad724b1f43abe85b80ee98.php | 47 -- .../1939fd3a701c14d9c9e0d5b3e2b3f71c.php | 37 -- .../2d3b3044d8c5f10135288d142d246f58.php | 442 ------------------ .../65c26a97f28f6f59ac579f52976ddf9d.php | 8 - .../9ed36358292885a90aa5b8c6467bcd04.php | 138 ------ ...bb2a00dce2af7923758c4a15eaed50fb.blade.php | 6 - 13 files changed, 119 insertions(+), 743 deletions(-) create mode 100644 resources/js/Components/StyledImageDisplay.vue delete mode 100644 storage/framework/views/0f6637ca16dff377761c6b83f366322e.php delete mode 100644 storage/framework/views/15c285d030ad724b1f43abe85b80ee98.php delete mode 100644 storage/framework/views/1939fd3a701c14d9c9e0d5b3e2b3f71c.php delete mode 100644 storage/framework/views/2d3b3044d8c5f10135288d142d246f58.php delete mode 100644 storage/framework/views/65c26a97f28f6f59ac579f52976ddf9d.php delete mode 100644 storage/framework/views/9ed36358292885a90aa5b8c6467bcd04.php delete mode 100644 storage/framework/views/bb2a00dce2af7923758c4a15eaed50fb.blade.php diff --git a/.gitignore b/.gitignore index e6bbd7a..4293c67 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ /public/hot /public/storage /storage/*.key +/storage/framework /vendor .env .env.backup diff --git a/README.md b/README.md index 3ed385a..e833f55 100644 --- a/README.md +++ b/README.md @@ -1,66 +1,49 @@ -

Laravel Logo

+# AI StyleGallery -

-Build Status -Total Downloads -Latest Stable Version -License -

+## Overview -## 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). -- [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). +### User-Facing Frontend: -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). - -### Premium Partners - -- **[Vehikl](https://vehikl.com/)** -- **[Tighten Co.](https://tighten.co)** -- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** -- **[64 Robots](https://64robots.com)** -- **[Cubet Techno Labs](https://cubettech.com)** -- **[Cyber-Duck](https://cyber-duck.co.uk)** -- **[Many](https://www.many.co.uk)** -- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)** -- **[DevSquad](https://devsquad.com)** -- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** -- **[OP.GG](https://op.gg)** -- **[WebReinvent](https://webreinvent.com/?utm_source=laravel&utm_medium=github&utm_campaign=patreon-sponsors)** -- **[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). +* **Backend:** + * **Laravel (PHP Framework):** Provides the core application logic, routing, and API endpoints. + * **Filament:** Used for building the powerful and intuitive admin panel. + * **Laravel Sanctum:** Handles API authentication. + * **Eloquent ORM:** For database interactions. +* **Frontend:** + * **Vue.js:** Reactive JavaScript framework for building the user interface. + * **Inertia.js:** Connects the Laravel backend with the Vue.js frontend, allowing for single-page application (SPA) like experiences with server-side routing. + * **Axios:** Promise-based HTTP client for making API requests. + * **Tailwind CSS:** A utility-first CSS framework for rapid UI development. +* **Database:** + * **MySQL:** The primary relational database used for storing application data. +* **Other:** + * **Composer:** PHP dependency manager. + * **NPM/Yarn:** JavaScript package managers. + * **Vite:** Frontend tooling for fast development and optimized builds. \ No newline at end of file diff --git a/resources/js/Components/StyledImageDisplay.vue b/resources/js/Components/StyledImageDisplay.vue new file mode 100644 index 0000000..1698f41 --- /dev/null +++ b/resources/js/Components/StyledImageDisplay.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/resources/js/Pages/Home.vue b/resources/js/Pages/Home.vue index 9a2134d..a93fbea 100644 --- a/resources/js/Pages/Home.vue +++ b/resources/js/Pages/Home.vue @@ -29,6 +29,13 @@ @back="goBackToContextMenu" @close="currentOverlayComponent = null" /> + + @@ -37,15 +44,17 @@ import Navigation from '../Components/Navigation.vue'; import GalleryGrid from '../Components/GalleryGrid.vue'; import ImageContextMenu from '../Components/ImageContextMenu.vue'; import StyleSelector from '../Components/StyleSelector.vue'; +import StyledImageDisplay from '../Components/StyledImageDisplay.vue'; // Import the new component import axios from 'axios'; import { ref, computed, onMounted, onUnmounted } from 'vue'; const images = ref([]); const imagesPerPage = 12; 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 selectedImage = ref(null); +const styledImage = ref(null); // To store the newly styled image let fetchInterval = null; const totalPages = computed(() => { @@ -89,17 +98,37 @@ const goBackToContextMenu = () => { const applyStyle = (style) => { 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', { image_id: selectedImage.value.id, style_id: style.id, }) .then(response => { 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 => { 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 = () => { diff --git a/resources/lang/de/filament.php b/resources/lang/de/filament.php index 76521d5..4f85c1b 100644 --- a/resources/lang/de/filament.php +++ b/resources/lang/de/filament.php @@ -94,6 +94,11 @@ return [ 'delete' => 'Löschen', ], ], + 'styled_image_display' => [ + 'title' => 'Neu gestyltes Bild', + 'keep_button' => 'Behalten', + 'delete_button' => 'Löschen', + ], 'user' => [ 'navigation' => [ 'group' => 'Benutzerverwaltung', diff --git a/resources/lang/en/filament.php b/resources/lang/en/filament.php index 3a4466f..3d64032 100644 --- a/resources/lang/en/filament.php +++ b/resources/lang/en/filament.php @@ -93,6 +93,11 @@ return [ 'delete' => 'Delete', ], ], + 'styled_image_display' => [ + 'title' => 'Newly Styled Image', + 'keep_button' => 'Keep', + 'delete_button' => 'Delete', + ], 'user' => [ 'navigation' => [ 'group' => 'User Management', diff --git a/storage/framework/views/0f6637ca16dff377761c6b83f366322e.php b/storage/framework/views/0f6637ca16dff377761c6b83f366322e.php deleted file mode 100644 index d2a2d3f..0000000 --- a/storage/framework/views/0f6637ca16dff377761c6b83f366322e.php +++ /dev/null @@ -1,8 +0,0 @@ -

class(['fi-ta-empty-state-description text-sm text-gray-500 dark:text-gray-400'])); ?> - -> - - -

- \ No newline at end of file diff --git a/storage/framework/views/15c285d030ad724b1f43abe85b80ee98.php b/storage/framework/views/15c285d030ad724b1f43abe85b80ee98.php deleted file mode 100644 index 1ce1d9c..0000000 --- a/storage/framework/views/15c285d030ad724b1f43abe85b80ee98.php +++ /dev/null @@ -1,47 +0,0 @@ - - - 'filament-panels::components.page.index','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?> -withName('filament-panels::page'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> -getConstructor()): ?> -except(collect($constructor->getParameters())->map->getName()->all()); ?> - -withAttributes([]); ?> -
- form); ?> - - - - - 'filament::components.button.index','data' => ['type' => 'submit']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?> -withName('filament::button'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> -getConstructor()): ?> -except(collect($constructor->getParameters())->map->getName()->all()); ?> - -withAttributes(['type' => 'submit']); ?> - Install Plugin - renderComponent(); ?> - - - - - - - - - -
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/1939fd3a701c14d9c9e0d5b3e2b3f71c.php b/storage/framework/views/1939fd3a701c14d9c9e0d5b3e2b3f71c.php deleted file mode 100644 index 11cbbf8..0000000 --- a/storage/framework/views/1939fd3a701c14d9c9e0d5b3e2b3f71c.php +++ /dev/null @@ -1,37 +0,0 @@ -getAttributes())->mapWithKeys(function ($value, $key) { return [Illuminate\Support\Str::camel(str_replace([':', '.'], ' ', $key)) => $value]; })->all(), EXTR_SKIP); ?> - -onlyProps(['field','labelSrOnly']) as $__key => $__value) { - $$__key = $$__key ?? $__value; -} ?> -exceptProps(['field','labelSrOnly']); ?> - $__value) { - $$__key = $$__key ?? $__value; -} ?> - - $__value) { - if (array_key_exists($__key, $__defined_vars)) unset($$__key); -} ?> - - - - 'filament-forms::components.field-wrapper.index','data' => ['field' => $field,'labelSrOnly' => $labelSrOnly]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?> -withName('filament-forms::field-wrapper'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> -getConstructor()): ?> -except(collect($constructor->getParameters())->map->getName()->all()); ?> - -withAttributes(['field' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($field),'label-sr-only' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($labelSrOnly)]); ?> - - - - renderComponent(); ?> - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/2d3b3044d8c5f10135288d142d246f58.php b/storage/framework/views/2d3b3044d8c5f10135288d142d246f58.php deleted file mode 100644 index 9bd36aa..0000000 --- a/storage/framework/views/2d3b3044d8c5f10135288d142d246f58.php +++ /dev/null @@ -1,442 +0,0 @@ - - - - - $getFieldWrapperView()] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?> -withName('dynamic-component'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> -getConstructor()): ?> -except(collect($constructor->getParameters())->map->getName()->all()); ?> - -withAttributes(['field' => $field,'label-sr-only' => $isLabelHidden()]); ?> - - -
toHtml() ?>, - minSize: toHtml() ?>, - removeUploadedFileUsing: async (fileKey) => { - return await $wire.removeFormUploadedFile(toHtml() ?>, fileKey) - }, - removeUploadedFileButtonPosition: toHtml() ?>, - reorderUploadedFilesUsing: async (files) => { - return await $wire.reorderFormUploadedFiles(toHtml() ?>, files) - }, - shouldAppendFiles: toHtml() ?>, - shouldOrientImageFromExif: toHtml() ?>, - shouldTransformImage: toHtml() ?>, - state: $wire., - uploadButtonPosition: toHtml() ?>, - uploadProgressIndicatorPosition: toHtml() ?>, - uploadUsing: (fileKey, file, success, error, progress) => { - $wire.upload( - `.${fileKey}`, - file, - () => { - success(fileKey) - }, - error, - progress, - ) - }, - })" - wire:ignore - x-ignore - 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', - }, - ])); ?> - - > -
- merge([ - 'disabled' => $isDisabled, - 'multiple' => $isMultiple(), - 'type' => 'file', - ], escape: false)); ?> - - /> -
- - -
- - -
-
-
-
- -
-
- -
-
-
-
-
-
- __('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(); ?> - - popLoop(); $loop = $__env->getLastLoop(); ?> -
- -
- addLoop($__currentLoopData); foreach($__currentLoopData as $groupedActions): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - - - 'filament::components.button.group','data' => ['class' => 'w-full']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?> -withName('filament::button.group'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> -getConstructor()): ?> -except(collect($constructor->getParameters())->map->getName()->all()); ?> - -withAttributes(['class' => 'w-full']); ?> - addLoop($__currentLoopData); foreach($__currentLoopData as $action): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - - - '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() : [])); ?> -withName('filament::button'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> -getConstructor()): ?> -except(collect($constructor->getParameters())->map->getName()->all()); ?> - -withAttributes(['x-tooltip' => '{ - content: @js($action[\'label\']), - theme: $store.theme, - }','x-on:click.stop.prevent' => ''.e($action['alpineClickHandler']).'','color' => 'gray','grouped' => true]); ?> - - - - - - - - renderComponent(); ?> - - - - - - - - - - popLoop(); $loop = $__env->getLastLoop(); ?> - renderComponent(); ?> - - - - - - - - - - popLoop(); $loop = $__env->getLastLoop(); ?> -
- - -
-
- - -
- - chunk(5); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $ratiosChunk): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - - - 'filament::components.button.group','data' => ['class' => 'w-full']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?> -withName('filament::button.group'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> -getConstructor()): ?> -except(collect($constructor->getParameters())->map->getName()->all()); ?> - -withAttributes(['class' => 'w-full']); ?> - addLoop($__currentLoopData); foreach($__currentLoopData as $label => $ratio): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - - - '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() : [])); ?> -withName('filament::button'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> -getConstructor()): ?> -except(collect($constructor->getParameters())->map->getName()->all()); ?> - -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]); ?> - - - renderComponent(); ?> - - - - - - - - - - popLoop(); $loop = $__env->getLastLoop(); ?> - renderComponent(); ?> - - - - - - - - - - popLoop(); $loop = $__env->getLastLoop(); ?> -
- -
-
- -
- - - 'filament::components.button.index','data' => ['color' => 'gray','xOn:click.prevent' => 'pond.imageEditEditor.oncancel']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?> -withName('filament::button'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> -getConstructor()): ?> -except(collect($constructor->getParameters())->map->getName()->all()); ?> - -withAttributes(['color' => 'gray','x-on:click.prevent' => 'pond.imageEditEditor.oncancel']); ?> - - - renderComponent(); ?> - - - - - - - - - - - - - '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() : [])); ?> -withName('filament::button'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> -getConstructor()): ?> -except(collect($constructor->getParameters())->map->getName()->all()); ?> - -withAttributes(['color' => 'warning','x-on:click.stop.prevent' => 'editor.reset()','class' => 'ml-auto']); ?> - - - renderComponent(); ?> - - - - - - - - - - - - - 'filament::components.button.index','data' => ['color' => 'success','xOn:click.prevent' => 'saveEditor']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?> -withName('filament::button'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> -getConstructor()): ?> -except(collect($constructor->getParameters())->map->getName()->all()); ?> - -withAttributes(['color' => 'success','x-on:click.prevent' => 'saveEditor']); ?> - - - renderComponent(); ?> - - - - - - - - - -
-
-
-
-
-
-
- -
- renderComponent(); ?> - - - - - - - - - - \ No newline at end of file diff --git a/storage/framework/views/65c26a97f28f6f59ac579f52976ddf9d.php b/storage/framework/views/65c26a97f28f6f59ac579f52976ddf9d.php deleted file mode 100644 index 3ba33c2..0000000 --- a/storage/framework/views/65c26a97f28f6f59ac579f52976ddf9d.php +++ /dev/null @@ -1,8 +0,0 @@ -

class(['fi-ta-empty-state-heading text-base font-semibold leading-6 text-gray-950 dark:text-white'])); ?> - -> - - -

- \ No newline at end of file diff --git a/storage/framework/views/9ed36358292885a90aa5b8c6467bcd04.php b/storage/framework/views/9ed36358292885a90aa5b8c6467bcd04.php deleted file mode 100644 index 4108e21..0000000 --- a/storage/framework/views/9ed36358292885a90aa5b8c6467bcd04.php +++ /dev/null @@ -1,138 +0,0 @@ - - - -onlyProps([ - 'actions' => [], - 'description' => null, - 'heading', - 'icon', -]) as $__key => $__value) { - $$__key = $$__key ?? $__value; -} ?> -exceptProps([ - 'actions' => [], - 'description' => null, - 'heading', - 'icon', -]); ?> - [], - 'description' => null, - 'heading', - 'icon', -]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) { - $$__key = $$__key ?? $__value; -} ?> - - $__value) { - if (array_key_exists($__key, $__defined_vars)) unset($$__key); -} ?> - - -
class(['fi-ta-empty-state px-6 py-12'])); ?> - -> -
-
- - - '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() : [])); ?> -withName('filament::icon'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> -getConstructor()): ?> -except(collect($constructor->getParameters())->map->getName()->all()); ?> - -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']); ?> -renderComponent(); ?> - - - - - - - - - -
- - - - 'filament-tables::components.empty-state.heading','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?> -withName('filament-tables::empty-state.heading'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> -getConstructor()): ?> -except(collect($constructor->getParameters())->map->getName()->all()); ?> - -withAttributes([]); ?> - - - renderComponent(); ?> - - - - - - - - - - - - - - 'filament-tables::components.empty-state.description','data' => ['class' => 'mt-1']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? (array) $attributes->getIterator() : [])); ?> -withName('filament-tables::empty-state.description'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> -getConstructor()): ?> -except(collect($constructor->getParameters())->map->getName()->all()); ?> - -withAttributes(['class' => 'mt-1']); ?> - - - renderComponent(); ?> - - - - - - - - - - - - - - - '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() : [])); ?> -withName('filament-tables::actions'); ?> -shouldRender()): ?> -startComponent($component->resolveView(), $component->data()); ?> -getConstructor()): ?> -except(collect($constructor->getParameters())->map->getName()->all()); ?> - -withAttributes(['actions' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($actions),'alignment' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(Alignment::Center),'wrap' => true,'class' => 'mt-6']); ?> -renderComponent(); ?> - - - - - - - - - - -
-
- \ No newline at end of file diff --git a/storage/framework/views/bb2a00dce2af7923758c4a15eaed50fb.blade.php b/storage/framework/views/bb2a00dce2af7923758c4a15eaed50fb.blade.php deleted file mode 100644 index d025e18..0000000 --- a/storage/framework/views/bb2a00dce2af7923758c4a15eaed50fb.blade.php +++ /dev/null @@ -1,6 +0,0 @@ -getAttributes())->mapWithKeys(function ($value, $key) { return [Illuminate\Support\Str::camel(str_replace([':', '.'], ' ', $key)) => $value]; })->all(), EXTR_SKIP); ?> -@props(['field','labelSrOnly']) - - -{{ $slot ?? "" }} - \ No newline at end of file