From 02224eb580e019be8b011e161eb0e60167f5b4b9 Mon Sep 17 00:00:00 2001 From: lexx Date: Mon, 25 Mar 2024 21:26:21 +0200 Subject: [PATCH] refactor edit and edges --- composer.json | 4 +- composer.lock | 1638 ++++++++++++++++- front/js/svelte/common/OffCanvas.svelte | 32 + front/js/svelte/content/Grid.svelte | 23 +- front/js/svelte/content/Table.svelte | 6 +- front/js/svelte/edges/sortEdges.js | 8 +- front/js/svelte/libs/Sortable.svelte | 4 +- front/js/svelte/newPreview/Preview.svelte | 102 +- .../js/svelte/newPreview/includes/File.svelte | 60 + .../newPreview/preview/PreviewEdge.svelte | 30 - .../newPreview/preview/PreviewRecord.svelte | 55 - front/js/svelte/records/ContentTabs.svelte | 22 +- front/js/svelte/records/Edit.svelte | 190 +- front/js/svelte/records/EditHeader.svelte | 48 +- front/js/svelte/records/FormField.svelte | 46 +- front/js/svelte/records/InlineEdit.svelte | 2 +- front/js/svelte/records/Preview.js | 23 +- front/js/svelte/records/PreviewCard.svelte | 90 +- front/js/svelte/records/StatusSelect.svelte | 57 - .../svelte/records/block/elements/File.svelte | 4 +- .../records/block/elements/Reference.svelte | 2 +- front/js/svelte/records/deepEquality.js | 34 + front/js/svelte/records/elements/File.svelte | 122 -- .../svelte/records/elements/Reference.svelte | 4 +- .../records/elements/ReferenceInline.svelte | 2 +- .../elements/ReferenceInlineButtons.svelte | 2 +- .../records/elements/ReferenceTable.svelte | 4 +- front/js/svelte/records/elements/Url.svelte | 30 - front/js/svelte/records/elements/reference.js | 24 - .../{elements => form}/FieldHeader.svelte | 0 front/js/svelte/records/form/Form.svelte | 122 ++ front/js/svelte/records/form/FormField.svelte | 50 + .../svelte/records/form/ReferenceField.svelte | 17 + .../js/svelte/records/form/SaveButtons.svelte | 47 + .../svelte/records/form/StatusSelect.svelte | 47 + .../{elements => form/fields}/Checkbox.svelte | 2 +- .../{elements => form/fields}/Color.svelte | 2 +- .../{elements => form/fields}/Datalist.svelte | 2 +- .../{elements => form/fields}/Date.svelte | 4 +- .../{elements => form/fields}/Datetime.svelte | 4 +- .../{elements => form/fields}/JSON.svelte | 4 +- .../{elements => form/fields}/Markdown.svelte | 4 +- .../{elements => form/fields}/Number.svelte | 2 +- .../fields}/RichEditor.svelte | 4 +- .../fields}/Selectlist.svelte | 0 .../{elements => form/fields}/Slug.svelte | 2 +- .../{elements => form/fields}/Text.svelte | 2 +- .../{elements => form/fields}/Textarea.svelte | 2 +- .../{elements => form/fields}/UUID.svelte | 4 +- .../errorMessage.js => form/form.js} | 0 .../references}/BrowseModal.svelte | 2 +- .../records/form/references/EdgeData.svelte | 36 + .../records/form/references/Reference.svelte | 98 + .../references}/ReferenceTags.svelte | 16 +- .../records/form/references/reference.js | 23 + front/package-lock.json | 11 +- front/package.json | 3 +- front/sass/_record-status-bar.scss | 12 +- src/Account/UserRepo.php | 2 +- src/Channel/ChannelService.php | 2 +- src/Edge/EdgeRepo.php | 13 +- src/Edge/EdgeService.php | 4 +- src/Http/Controller/RecordController.php | 62 +- src/Query/Graph.php | 2 +- src/Record/Contracts/EditorTree.php | 22 + src/Record/Contracts/NewDocumentData.php | 27 + src/Record/Contracts/RecordEdgeData.php | 34 + src/Record/Contracts/UpdateRecordData.php | 28 + src/Record/QueryRecord.php | 2 +- src/Record/RecordService.php | 84 +- src/Revision/Revision.php | 8 +- src/Revision/RevisionService.php | 4 +- src/Schema/Sidebar/SidebarService.php | 2 +- src/Schema/Validator/Validator.php | 2 +- src/Support/Data.php | 27 + src/Support/Option/LazyOption.php | 158 ++ src/Support/Option/None.php | 119 ++ src/Support/Option/Option.php | 424 +++++ src/Support/Option/Some.php | 152 ++ src/Support/Result/Error.php | 6 +- src/Support/Result/Result.php | 2 +- src/Support/Result/Success.php | 6 +- src/macros.php | 5 +- 83 files changed, 3569 insertions(+), 818 deletions(-) create mode 100644 front/js/svelte/common/OffCanvas.svelte create mode 100644 front/js/svelte/newPreview/includes/File.svelte delete mode 100644 front/js/svelte/newPreview/preview/PreviewEdge.svelte delete mode 100644 front/js/svelte/newPreview/preview/PreviewRecord.svelte delete mode 100644 front/js/svelte/records/StatusSelect.svelte create mode 100644 front/js/svelte/records/deepEquality.js delete mode 100644 front/js/svelte/records/elements/File.svelte delete mode 100644 front/js/svelte/records/elements/Url.svelte delete mode 100644 front/js/svelte/records/elements/reference.js rename front/js/svelte/records/{elements => form}/FieldHeader.svelte (100%) create mode 100644 front/js/svelte/records/form/Form.svelte create mode 100644 front/js/svelte/records/form/FormField.svelte create mode 100644 front/js/svelte/records/form/ReferenceField.svelte create mode 100644 front/js/svelte/records/form/SaveButtons.svelte create mode 100644 front/js/svelte/records/form/StatusSelect.svelte rename front/js/svelte/records/{elements => form/fields}/Checkbox.svelte (96%) rename front/js/svelte/records/{elements => form/fields}/Color.svelte (94%) rename front/js/svelte/records/{elements => form/fields}/Datalist.svelte (97%) rename front/js/svelte/records/{elements => form/fields}/Date.svelte (96%) rename front/js/svelte/records/{elements => form/fields}/Datetime.svelte (97%) rename front/js/svelte/records/{elements => form/fields}/JSON.svelte (79%) rename front/js/svelte/records/{elements => form/fields}/Markdown.svelte (78%) rename front/js/svelte/records/{elements => form/fields}/Number.svelte (98%) rename front/js/svelte/records/{elements => form/fields}/RichEditor.svelte (82%) rename front/js/svelte/records/{elements => form/fields}/Selectlist.svelte (100%) rename front/js/svelte/records/{elements => form/fields}/Slug.svelte (92%) rename front/js/svelte/records/{elements => form/fields}/Text.svelte (98%) rename front/js/svelte/records/{elements => form/fields}/Textarea.svelte (95%) rename front/js/svelte/records/{elements => form/fields}/UUID.svelte (91%) rename front/js/svelte/records/{elements/errorMessage.js => form/form.js} (100%) rename front/js/svelte/records/{elements => form/references}/BrowseModal.svelte (98%) create mode 100644 front/js/svelte/records/form/references/EdgeData.svelte create mode 100644 front/js/svelte/records/form/references/Reference.svelte rename front/js/svelte/records/{elements => form/references}/ReferenceTags.svelte (89%) create mode 100644 front/js/svelte/records/form/references/reference.js create mode 100644 src/Record/Contracts/EditorTree.php create mode 100644 src/Record/Contracts/NewDocumentData.php create mode 100644 src/Record/Contracts/RecordEdgeData.php create mode 100644 src/Record/Contracts/UpdateRecordData.php create mode 100644 src/Support/Data.php create mode 100644 src/Support/Option/LazyOption.php create mode 100644 src/Support/Option/None.php create mode 100644 src/Support/Option/Option.php create mode 100644 src/Support/Option/Some.php diff --git a/composer.json b/composer.json index cffec40..9a6d919 100644 --- a/composer.json +++ b/composer.json @@ -11,12 +11,12 @@ "php": "^8.2", "guzzlehttp/guzzle": "^7.2", "intervention/image": "^2.7", - "phpoption/phpoption": "^1.9", "spatie/image-optimizer": "^1.6", "staudenmeir/laravel-cte": "^1.0", "ext-pdo": "*", "opis/json-schema": "^2.3", - "symfony/yaml": "^7.0" + "symfony/yaml": "^7.0", + "spatie/laravel-data": "^4.4" }, "require-dev": { "phpstan/phpstan": "^1.8", diff --git a/composer.lock b/composer.lock index f5bac9a..78ec0c7 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,867 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "03b2131de37843943a3930960cfc26cb", + "content-hash": "ae65ee0a63f2e4982c36de3d0f4cd65b", "packages": [ + { + "name": "amphp/amp", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/amphp/amp.git", + "reference": "aaf0ec1d5a2c20b523258995a10e80c1fb765871" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/amp/zipball/aaf0ec1d5a2c20b523258995a10e80c1fb765871", + "reference": "aaf0ec1d5a2c20b523258995a10e80c1fb765871", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "phpunit/phpunit": "^9", + "psalm/phar": "^4.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php", + "src/Future/functions.php", + "src/Internal/functions.php" + ], + "psr-4": { + "Amp\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + }, + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" + } + ], + "description": "A non-blocking concurrency framework for PHP applications.", + "homepage": "https://amphp.org/amp", + "keywords": [ + "async", + "asynchronous", + "awaitable", + "concurrency", + "event", + "event-loop", + "future", + "non-blocking", + "promise" + ], + "support": { + "issues": "https://github.com/amphp/amp/issues", + "source": "https://github.com/amphp/amp/tree/v3.0.0" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2022-12-18T16:52:44+00:00" + }, + { + "name": "amphp/byte-stream", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/amphp/byte-stream.git", + "reference": "daa00f2efdbd71565bf64ffefa89e37542addf93" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/daa00f2efdbd71565bf64ffefa89e37542addf93", + "reference": "daa00f2efdbd71565bf64ffefa89e37542addf93", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/parser": "^1.1", + "amphp/pipeline": "^1", + "amphp/serialization": "^1", + "amphp/sync": "^2", + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2.3" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "5.22.1" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php", + "src/Internal/functions.php" + ], + "psr-4": { + "Amp\\ByteStream\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A stream abstraction to make working with non-blocking I/O simple.", + "homepage": "https://amphp.org/byte-stream", + "keywords": [ + "amp", + "amphp", + "async", + "io", + "non-blocking", + "stream" + ], + "support": { + "issues": "https://github.com/amphp/byte-stream/issues", + "source": "https://github.com/amphp/byte-stream/tree/v2.1.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-02-17T04:49:38+00:00" + }, + { + "name": "amphp/cache", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/amphp/cache.git", + "reference": "218bb3888d380eb9dd926cd06f803573c84391d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/cache/zipball/218bb3888d380eb9dd926cd06f803573c84391d3", + "reference": "218bb3888d380eb9dd926cd06f803573c84391d3", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/serialization": "^1", + "amphp/sync": "^2", + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Amp\\Cache\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" + } + ], + "description": "A fiber-aware cache API based on Amp and Revolt.", + "homepage": "https://amphp.org/cache", + "support": { + "issues": "https://github.com/amphp/cache/issues", + "source": "https://github.com/amphp/cache/tree/v2.0.0" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2023-01-09T21:04:12+00:00" + }, + { + "name": "amphp/dns", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/amphp/dns.git", + "reference": "3e3f413fbbaacd9632b1612941b363fa26a72e52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/dns/zipball/3e3f413fbbaacd9632b1612941b363fa26a72e52", + "reference": "3e3f413fbbaacd9632b1612941b363fa26a72e52", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/byte-stream": "^2", + "amphp/cache": "^2", + "amphp/parser": "^1", + "amphp/windows-registry": "^1.0.1", + "daverandom/libdns": "^2.0.2", + "ext-filter": "*", + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "5.20" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Amp\\Dns\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Wright", + "email": "addr@daverandom.com" + }, + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" + }, + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + } + ], + "description": "Async DNS resolution for Amp.", + "homepage": "https://github.com/amphp/dns", + "keywords": [ + "amp", + "amphp", + "async", + "client", + "dns", + "resolve" + ], + "support": { + "issues": "https://github.com/amphp/dns/issues", + "source": "https://github.com/amphp/dns/tree/v2.1.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-01-30T23:25:30+00:00" + }, + { + "name": "amphp/parallel", + "version": "v2.2.9", + "source": { + "type": "git", + "url": "https://github.com/amphp/parallel.git", + "reference": "73d293f1fc4df1bebc3c4fce1432e82dd7032238" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/parallel/zipball/73d293f1fc4df1bebc3c4fce1432e82dd7032238", + "reference": "73d293f1fc4df1bebc3c4fce1432e82dd7032238", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/byte-stream": "^2", + "amphp/cache": "^2", + "amphp/parser": "^1", + "amphp/pipeline": "^1", + "amphp/process": "^2", + "amphp/serialization": "^1", + "amphp/socket": "^2", + "amphp/sync": "^2", + "php": ">=8.1", + "revolt/event-loop": "^1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.18" + }, + "type": "library", + "autoload": { + "files": [ + "src/Context/functions.php", + "src/Context/Internal/functions.php", + "src/Ipc/functions.php", + "src/Worker/functions.php" + ], + "psr-4": { + "Amp\\Parallel\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + }, + { + "name": "Stephen Coakley", + "email": "me@stephencoakley.com" + } + ], + "description": "Parallel processing component for Amp.", + "homepage": "https://github.com/amphp/parallel", + "keywords": [ + "async", + "asynchronous", + "concurrent", + "multi-processing", + "multi-threading" + ], + "support": { + "issues": "https://github.com/amphp/parallel/issues", + "source": "https://github.com/amphp/parallel/tree/v2.2.9" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-03-24T18:27:44+00:00" + }, + { + "name": "amphp/parser", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/amphp/parser.git", + "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/parser/zipball/3cf1f8b32a0171d4b1bed93d25617637a77cded7", + "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7", + "shasum": "" + }, + "require": { + "php": ">=7.4" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Amp\\Parser\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A generator parser to make streaming parsers simple.", + "homepage": "https://github.com/amphp/parser", + "keywords": [ + "async", + "non-blocking", + "parser", + "stream" + ], + "support": { + "issues": "https://github.com/amphp/parser/issues", + "source": "https://github.com/amphp/parser/tree/v1.1.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-03-21T19:16:53+00:00" + }, + { + "name": "amphp/pipeline", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/amphp/pipeline.git", + "reference": "f1c2ce35d27ae86ead018adb803eccca7421dd9b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/pipeline/zipball/f1c2ce35d27ae86ead018adb803eccca7421dd9b", + "reference": "f1c2ce35d27ae86ead018adb803eccca7421dd9b", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "php": ">=8.1", + "revolt/event-loop": "^1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.18" + }, + "type": "library", + "autoload": { + "psr-4": { + "Amp\\Pipeline\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Asynchronous iterators and operators.", + "homepage": "https://amphp.org/pipeline", + "keywords": [ + "amp", + "amphp", + "async", + "io", + "iterator", + "non-blocking" + ], + "support": { + "issues": "https://github.com/amphp/pipeline/issues", + "source": "https://github.com/amphp/pipeline/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-03-10T14:48:16+00:00" + }, + { + "name": "amphp/process", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/amphp/process.git", + "reference": "a79dc87100be857db2c4bbfd5369585a6d1e658c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/process/zipball/a79dc87100be857db2c4bbfd5369585a6d1e658c", + "reference": "a79dc87100be857db2c4bbfd5369585a6d1e658c", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/byte-stream": "^2", + "amphp/sync": "^2", + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.4" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Amp\\Process\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A fiber-aware process manager based on Amp and Revolt.", + "homepage": "https://amphp.org/process", + "support": { + "issues": "https://github.com/amphp/process/issues", + "source": "https://github.com/amphp/process/tree/v2.0.2" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-02-13T20:38:21+00:00" + }, + { + "name": "amphp/serialization", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/amphp/serialization.git", + "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/serialization/zipball/693e77b2fb0b266c3c7d622317f881de44ae94a1", + "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "phpunit/phpunit": "^9 || ^8 || ^7" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Amp\\Serialization\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Serialization tools for IPC and data storage in PHP.", + "homepage": "https://github.com/amphp/serialization", + "keywords": [ + "async", + "asynchronous", + "serialization", + "serialize" + ], + "support": { + "issues": "https://github.com/amphp/serialization/issues", + "source": "https://github.com/amphp/serialization/tree/master" + }, + "time": "2020-03-25T21:39:07+00:00" + }, + { + "name": "amphp/socket", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/amphp/socket.git", + "reference": "acc0a2f65ab498025ba5641f7cce499c4b1ed4b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/socket/zipball/acc0a2f65ab498025ba5641f7cce499c4b1ed4b5", + "reference": "acc0a2f65ab498025ba5641f7cce499c4b1ed4b5", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/byte-stream": "^2", + "amphp/dns": "^2", + "ext-openssl": "*", + "kelunik/certificate": "^1.1", + "league/uri": "^6.5 | ^7", + "league/uri-interfaces": "^2.3 | ^7", + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "amphp/process": "^2", + "phpunit/phpunit": "^9", + "psalm/phar": "5.20" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php", + "src/Internal/functions.php", + "src/SocketAddress/functions.php" + ], + "psr-4": { + "Amp\\Socket\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Lowrey", + "email": "rdlowrey@gmail.com" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Non-blocking socket connection / server implementations based on Amp and Revolt.", + "homepage": "https://github.com/amphp/socket", + "keywords": [ + "amp", + "async", + "encryption", + "non-blocking", + "sockets", + "tcp", + "tls" + ], + "support": { + "issues": "https://github.com/amphp/socket/issues", + "source": "https://github.com/amphp/socket/tree/v2.3.0" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-03-19T20:01:53+00:00" + }, + { + "name": "amphp/sync", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/amphp/sync.git", + "reference": "375ef5b54a0d12c38e12728dde05a55e30f2fbec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/sync/zipball/375ef5b54a0d12c38e12728dde05a55e30f2fbec", + "reference": "375ef5b54a0d12c38e12728dde05a55e30f2fbec", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/pipeline": "^1", + "amphp/serialization": "^1", + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "5.23" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Amp\\Sync\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + }, + { + "name": "Stephen Coakley", + "email": "me@stephencoakley.com" + } + ], + "description": "Non-blocking synchronization primitives for PHP based on Amp and Revolt.", + "homepage": "https://github.com/amphp/sync", + "keywords": [ + "async", + "asynchronous", + "mutex", + "semaphore", + "synchronization" + ], + "support": { + "issues": "https://github.com/amphp/sync/issues", + "source": "https://github.com/amphp/sync/tree/v2.2.0" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-03-12T01:00:01+00:00" + }, + { + "name": "amphp/windows-registry", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/amphp/windows-registry.git", + "reference": "0d569e8f256cca974e3842b6e78b4e434bf98306" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/windows-registry/zipball/0d569e8f256cca974e3842b6e78b4e434bf98306", + "reference": "0d569e8f256cca974e3842b6e78b4e434bf98306", + "shasum": "" + }, + "require": { + "amphp/byte-stream": "^2", + "amphp/process": "^2", + "php": ">=8.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "psalm/phar": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Amp\\WindowsRegistry\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Windows Registry Reader.", + "support": { + "issues": "https://github.com/amphp/windows-registry/issues", + "source": "https://github.com/amphp/windows-registry/tree/v1.0.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-01-30T23:01:51+00:00" + }, { "name": "brick/math", "version": "0.11.0", @@ -130,6 +989,50 @@ ], "time": "2023-12-11T17:09:12+00:00" }, + { + "name": "daverandom/libdns", + "version": "v2.0.3", + "source": { + "type": "git", + "url": "https://github.com/DaveRandom/LibDNS.git", + "reference": "42c2d700d1178c9f9e78664793463f7f1aea248c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DaveRandom/LibDNS/zipball/42c2d700d1178c9f9e78664793463f7f1aea248c", + "reference": "42c2d700d1178c9f9e78664793463f7f1aea248c", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": ">=7.0" + }, + "suggest": { + "ext-intl": "Required for IDN support" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "LibDNS\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "DNS protocol implementation written in pure PHP", + "keywords": [ + "dns" + ], + "support": { + "issues": "https://github.com/DaveRandom/LibDNS/issues", + "source": "https://github.com/DaveRandom/LibDNS/tree/v2.0.3" + }, + "time": "2022-09-20T18:15:38+00:00" + }, { "name": "dflydev/dot-access-data", "version": "v3.0.2", @@ -205,6 +1108,53 @@ }, "time": "2022-10-27T11:44:00+00:00" }, + { + "name": "doctrine/deprecations", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + }, + "time": "2024-01-30T19:34:25+00:00" + }, { "name": "doctrine/inflector", "version": "2.0.10", @@ -1129,6 +2079,64 @@ ], "time": "2022-05-21T17:30:32+00:00" }, + { + "name": "kelunik/certificate", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/kelunik/certificate.git", + "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kelunik/certificate/zipball/7e00d498c264d5eb4f78c69f41c8bd6719c0199e", + "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "php": ">=7.0" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "phpunit/phpunit": "^6 | 7 | ^8 | ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Kelunik\\Certificate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Access certificate details and transform between different formats.", + "keywords": [ + "DER", + "certificate", + "certificates", + "openssl", + "pem", + "x509" + ], + "support": { + "issues": "https://github.com/kelunik/certificate/issues", + "source": "https://github.com/kelunik/certificate/tree/v1.1.3" + }, + "time": "2023-02-03T21:26:53+00:00" + }, { "name": "laravel/framework", "version": "v10.48.4", @@ -1846,6 +2854,180 @@ ], "time": "2024-01-28T23:22:08+00:00" }, + { + "name": "league/uri", + "version": "7.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/bedb6e55eff0c933668addaa7efa1e1f2c417cc4", + "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.3", + "php": "^8.1" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", + "league/uri-components": "Needed to easily manipulate URI objects components", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri/tree/7.4.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-03-23T07:42:40+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "8d43ef5c841032c87e2de015972c06f3865ef718" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/8d43ef5c841032c87e2de015972c06f3865ef718", + "reference": "8d43ef5c841032c87e2de015972c06f3865ef718", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1", + "psr/http-factory": "^1", + "psr/http-message": "^1.1 || ^2.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common interfaces and classes for URI representation and interaction", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-03-23T07:42:40+00:00" + }, { "name": "monolog/monolog", "version": "3.5.0", @@ -2478,6 +3660,117 @@ }, "time": "2021-05-22T15:57:08+00:00" }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "153ae662783729388a584b4361f2545e4d841e3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", + "reference": "153ae662783729388a584b4361f2545e4d841e3c", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.13" + }, + "require-dev": { + "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" + }, + "time": "2024-02-23T11:10:43+00:00" + }, { "name": "phpoption/phpoption", "version": "1.9.2", @@ -2553,6 +3846,53 @@ ], "time": "2023-11-12T21:59:55+00:00" }, + { + "name": "phpstan/phpdoc-parser", + "version": "1.27.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "86e4d5a4b036f8f0be1464522f4c6b584c452757" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/86e4d5a4b036f8f0be1464522f4c6b584c452757", + "reference": "86e4d5a4b036f8f0be1464522f4c6b584c452757", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^4.15", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.27.0" + }, + "time": "2024-03-21T13:14:53+00:00" + }, { "name": "psr/clock", "version": "1.0.0", @@ -3190,6 +4530,78 @@ ], "time": "2023-11-08T05:53:05+00:00" }, + { + "name": "revolt/event-loop", + "version": "v1.0.6", + "source": { + "type": "git", + "url": "https://github.com/revoltphp/event-loop.git", + "reference": "25de49af7223ba039f64da4ae9a28ec2d10d0254" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/25de49af7223ba039f64da4ae9a28ec2d10d0254", + "reference": "25de49af7223ba039f64da4ae9a28ec2d10d0254", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "ext-json": "*", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.15" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Revolt\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "ceesjank@gmail.com" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Rock-solid event loop for concurrent PHP applications.", + "keywords": [ + "async", + "asynchronous", + "concurrency", + "event", + "event-loop", + "non-blocking", + "scheduler" + ], + "support": { + "issues": "https://github.com/revoltphp/event-loop/issues", + "source": "https://github.com/revoltphp/event-loop/tree/v1.0.6" + }, + "time": "2023-11-30T05:34:44+00:00" + }, { "name": "spatie/image-optimizer", "version": "1.7.2", @@ -3245,6 +4657,230 @@ }, "time": "2023-11-03T10:08:02+00:00" }, + { + "name": "spatie/laravel-data", + "version": "4.4.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-data.git", + "reference": "3d2cc18cd54c347654329a9bdcf823d9849c27fd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-data/zipball/3d2cc18cd54c347654329a9bdcf823d9849c27fd", + "reference": "3d2cc18cd54c347654329a9bdcf823d9849c27fd", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^10.0|^11.0", + "php": "^8.1", + "phpdocumentor/type-resolver": "^1.5", + "spatie/laravel-package-tools": "^1.9.0", + "spatie/php-structure-discoverer": "^2.0" + }, + "require-dev": { + "fakerphp/faker": "^1.14", + "friendsofphp/php-cs-fixer": "^3.0", + "inertiajs/inertia-laravel": "dev-master#4508fd1", + "livewire/livewire": "^3.0", + "mockery/mockery": "^1.6", + "nesbot/carbon": "^2.63", + "nunomaduro/larastan": "^2.0", + "orchestra/testbench": "^8.0|^9.0", + "pestphp/pest": "^2.31", + "pestphp/pest-plugin-laravel": "^2.0", + "pestphp/pest-plugin-livewire": "^2.1", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpunit/phpunit": "^10.0", + "spatie/invade": "^1.0", + "spatie/laravel-typescript-transformer": "^2.3", + "spatie/pest-plugin-snapshots": "^2.1", + "spatie/test-time": "^1.2" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\LaravelData\\LaravelDataServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Spatie\\LaravelData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ruben Van Assche", + "email": "ruben@spatie.be", + "role": "Developer" + } + ], + "description": "Create unified resources and data transfer objects", + "homepage": "https://github.com/spatie/laravel-data", + "keywords": [ + "laravel", + "laravel-data", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-data/issues", + "source": "https://github.com/spatie/laravel-data/tree/4.4.1" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-03-20T08:34:26+00:00" + }, + { + "name": "spatie/laravel-package-tools", + "version": "1.16.4", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-package-tools.git", + "reference": "ddf678e78d7f8b17e5cdd99c0c3413a4a6592e53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/ddf678e78d7f8b17e5cdd99c0c3413a4a6592e53", + "reference": "ddf678e78d7f8b17e5cdd99c0c3413a4a6592e53", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^9.28|^10.0|^11.0", + "php": "^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "orchestra/testbench": "^7.7|^8.0", + "pestphp/pest": "^1.22", + "phpunit/phpunit": "^9.5.24", + "spatie/pest-plugin-test-time": "^1.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\LaravelPackageTools\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "role": "Developer" + } + ], + "description": "Tools for creating Laravel packages", + "homepage": "https://github.com/spatie/laravel-package-tools", + "keywords": [ + "laravel-package-tools", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-package-tools/issues", + "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.4" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-03-20T07:29:11+00:00" + }, + { + "name": "spatie/php-structure-discoverer", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/php-structure-discoverer.git", + "reference": "24f5221641560ec0f7dce23dd814e7d555b0098b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/php-structure-discoverer/zipball/24f5221641560ec0f7dce23dd814e7d555b0098b", + "reference": "24f5221641560ec0f7dce23dd814e7d555b0098b", + "shasum": "" + }, + "require": { + "amphp/amp": "^v3.0", + "amphp/parallel": "^2.2", + "illuminate/collections": "^10.0|^11.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.4.3", + "symfony/finder": "^6.0|^7.0" + }, + "require-dev": { + "illuminate/console": "^10.0|^11.0", + "laravel/pint": "^1.0", + "nunomaduro/collision": "^7.0|^8.0", + "nunomaduro/larastan": "^2.0.1", + "orchestra/testbench": "^7.0|^8.0|^9.0", + "pestphp/pest": "^2.0", + "pestphp/pest-plugin-laravel": "^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.5|^10.0", + "spatie/laravel-ray": "^1.26" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\StructureDiscoverer\\StructureDiscovererServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Spatie\\StructureDiscoverer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ruben Van Assche", + "email": "ruben@spatie.be", + "role": "Developer" + } + ], + "description": "Automatically discover structures within your PHP application", + "homepage": "https://github.com/spatie/php-structure-discoverer", + "keywords": [ + "discover", + "laravel", + "php", + "php-structure-discoverer" + ], + "support": { + "issues": "https://github.com/spatie/php-structure-discoverer/issues", + "source": "https://github.com/spatie/php-structure-discoverer/tree/2.1.1" + }, + "funding": [ + { + "url": "https://github.com/LaravelAutoDiscoverer", + "type": "github" + } + ], + "time": "2024-03-13T16:08:30+00:00" + }, { "name": "staudenmeir/laravel-cte", "version": "v1.10", diff --git a/front/js/svelte/common/OffCanvas.svelte b/front/js/svelte/common/OffCanvas.svelte new file mode 100644 index 0000000..7ed610b --- /dev/null +++ b/front/js/svelte/common/OffCanvas.svelte @@ -0,0 +1,32 @@ + + +
+
+
{title}
+ +
+
+ +
+
\ No newline at end of file diff --git a/front/js/svelte/content/Grid.svelte b/front/js/svelte/content/Grid.svelte index 0a68759..795e1d9 100644 --- a/front/js/svelte/content/Grid.svelte +++ b/front/js/svelte/content/Grid.svelte @@ -1,11 +1,10 @@
- {#each records as record (record.id)} + {#each records as queryRecord (queryRecord.record.id)}
{#if isWritable}
select(record)} + on:change={() => select(queryRecord.record)} class="form-check-input " type="checkbox" checked={selected.find( - (r) => r.id === record.id + (r) => r.id === queryRecord.record.id )} - value={record} + value={queryRecord} />
{/if}
- +
{record._file.path}{queryRecord.record._file.path} {record._file.mime}{queryRecord.record._file.mime}
diff --git a/front/js/svelte/content/Table.svelte b/front/js/svelte/content/Table.svelte index 347d9bd..0963acc 100644 --- a/front/js/svelte/content/Table.svelte +++ b/front/js/svelte/content/Table.svelte @@ -73,7 +73,7 @@ {#if isWritable}
select(queryRecord)} + on:change={() => select(queryRecord.record)} class="form-check-input " type="checkbox" checked={selected.find( @@ -89,11 +89,11 @@ class="me-2 text-decoration-none text-dark fs-6" href="{channel.lucentUrl}/records/{queryRecord.record.id}" target={inModal ? "_blank" : "_self"} - title={previewTitle(queryRecord)} + title={previewTitle(queryRecord.record)} data-bs-toggle="tooltip" data-bs-placement="left" > - {previewTitle(queryRecord)} + {previewTitle(queryRecord.record)}
diff --git a/front/js/svelte/edges/sortEdges.js b/front/js/svelte/edges/sortEdges.js index 282ec62..856eef1 100644 --- a/front/js/svelte/edges/sortEdges.js +++ b/front/js/svelte/edges/sortEdges.js @@ -1,9 +1,9 @@ -export function sortByField(from, to, edges, fieldName) { +export function sortByField(from, to, queryRecords, fieldName) { if (from === to) { - return edges; + return queryRecords; } - let edgesTosort = edges?.filter((ed) => ed.field === fieldName && ed.depth === 1 ) ?? []; - let remainingEdge = edges?.filter((ed) => !(ed.field === fieldName && ed.depth === 1)) ?? []; + let edgesTosort = queryRecords?.filter((qr) => qr.edge.field === fieldName && qr.edge.depth === 1 ) ?? []; + let remainingEdge = queryRecords?.filter((qr) => !(qr.edge.field === fieldName && qr.edge.depth === 1)) ?? []; edgesTosort = array_move(edgesTosort,from, to); return [...remainingEdge, ...edgesTosort]; diff --git a/front/js/svelte/libs/Sortable.svelte b/front/js/svelte/libs/Sortable.svelte index d3ef4fa..06168af 100644 --- a/front/js/svelte/libs/Sortable.svelte +++ b/front/js/svelte/libs/Sortable.svelte @@ -4,7 +4,7 @@ export let sortableClass = ""; // export let handle; export let isTable = false; - export let sortableInstance; + export let sortableInstance = null; const dispatch = createEventDispatcher(); let sortableContainer; @@ -18,7 +18,7 @@ easing: "cubic-bezier(1, 0, 0, 1)", onUpdate: function (/**Event*/ evt) { // reorder(evt.oldIndex,evt.newIndex); - console.log(evt) + // console.log(evt) dispatch("update", { source: evt.oldIndex, target: evt.newIndex, diff --git a/front/js/svelte/newPreview/Preview.svelte b/front/js/svelte/newPreview/Preview.svelte index 00ddd49..ec55a7e 100644 --- a/front/js/svelte/newPreview/Preview.svelte +++ b/front/js/svelte/newPreview/Preview.svelte @@ -1,61 +1,65 @@ - - - -
-
- {#if field.data} - - {:else} - - {/if} - -
- - {#if hasDelete} -
- -
+
+ {#if edge?.data} +
Edge Data
{/if} +
+ {#if record._file} +
+ +
+ {/if} +
+ {previewTitle(record)} + + {#if record.status === "draft"} + + {/if} + {schema.label} + +
+
- \ No newline at end of file + + + + + + + + + + diff --git a/front/js/svelte/newPreview/includes/File.svelte b/front/js/svelte/newPreview/includes/File.svelte new file mode 100644 index 0000000..64b049a --- /dev/null +++ b/front/js/svelte/newPreview/includes/File.svelte @@ -0,0 +1,60 @@ + + +{#if record} + {#if record._file.mime.startsWith("image")} + + + {record._file.path} + + {:else} + + + .{record._file.path.split(".").pop()} + + {/if} +{/if} diff --git a/front/js/svelte/newPreview/preview/PreviewEdge.svelte b/front/js/svelte/newPreview/preview/PreviewEdge.svelte deleted file mode 100644 index c409ba3..0000000 --- a/front/js/svelte/newPreview/preview/PreviewEdge.svelte +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/front/js/svelte/newPreview/preview/PreviewRecord.svelte b/front/js/svelte/newPreview/preview/PreviewRecord.svelte deleted file mode 100644 index 193b767..0000000 --- a/front/js/svelte/newPreview/preview/PreviewRecord.svelte +++ /dev/null @@ -1,55 +0,0 @@ - -
-
- {#if schema.type === "files"} -
- -
- {/if} -
- - {cardTitle} - - - {schema.label} - - - {#if record.status === "draft"} - - {/if} - -
-
-
- - - diff --git a/front/js/svelte/records/ContentTabs.svelte b/front/js/svelte/records/ContentTabs.svelte index 7197ae5..81ec122 100644 --- a/front/js/svelte/records/ContentTabs.svelte +++ b/front/js/svelte/records/ContentTabs.svelte @@ -1,7 +1,5 @@ diff --git a/front/js/svelte/records/Edit.svelte b/front/js/svelte/records/Edit.svelte index a236d32..6fe0a73 100644 --- a/front/js/svelte/records/Edit.svelte +++ b/front/js/svelte/records/Edit.svelte @@ -1,112 +1,43 @@ -
- - {#if !["_graph", "_info"].includes(activeContentTab) && isWritable} -
-
- - {#if isCreateMode} - - {:else if hasUnsavedData} - - {/if} -
-
- {/if} - - +
- - {#if !["_graph", "_info"].includes(activeContentTab)} - - - {#each activeFields as field (field.name)} - {#if activeContentTab === field.group} - - {/if} - {/each} - - {:else if activeContentTab === "_graph"} - - {:else if activeContentTab === "_info"} - - {/if} +
+ +
diff --git a/front/js/svelte/records/EditHeader.svelte b/front/js/svelte/records/EditHeader.svelte index 44bd3ca..e06f2a9 100644 --- a/front/js/svelte/records/EditHeader.svelte +++ b/front/js/svelte/records/EditHeader.svelte @@ -2,18 +2,18 @@ import {getContext} from "svelte"; import Icon from "../common/Icon.svelte"; import {previewTitle} from "./Preview"; + import axios from "axios"; const channel = getContext("channel"); export let schema; - export let graph; export let record; + export let title; export let isCreateMode; - export let activeContentTab; function clone(e) { e.preventDefault(); axios.post(channel.lucentUrl + "/records/clone/" + record.id).then(response => { - window.location = channel.lucentUrl + "/records/" + response.data.id; + window.location.href = channel.lucentUrl + "/records/" + response.data.id; }).catch(error => { }); @@ -22,25 +22,29 @@

{schema.label.toUpperCase()} {#if !isCreateMode} - {previewTitle( record, graph)} + {#if record} + {previewTitle(record)} + {:else} + { title} + {/if} {:else} New Record {/if} - {#if !isCreateMode} + {#if !isCreateMode && !!record}

{/if} diff --git a/front/js/svelte/records/FormField.svelte b/front/js/svelte/records/FormField.svelte index a43eb31..c9f8d74 100644 --- a/front/js/svelte/records/FormField.svelte +++ b/front/js/svelte/records/FormField.svelte @@ -1,24 +1,23 @@
- + {#if field.info.name === "reference" && field.layout === "inline"} - {:else if field.info.name === "reference"} - - {:else if field.info.name === "file"} - + {:else if ["reference","file"].includes(field.info.name)} + {:else if field.info.name === "block"} aSchema.name === record.record?.schema); + let schema = channel.schemas.find((aSchema) => aSchema.name === record?.schema); if (!schema?.titleTemplate) { - return noTemplate(schema, record.record); + return noTemplate(schema, record); } - let recordData = record.record.data; let template = Mustache.parse(schema.titleTemplate); - let referencePreviews = template - .filter(segment => segment[0] === "name") // keep only template tags - .map((segment) => segment[1]) // map to fieldNames - .filter(fieldName => { // keep only references - let schemaField = schema.fields.find(f => f.name === fieldName) - return schemaField?.info.name === "reference"; - }).reduce((carry, fieldName) => { // map to records - let child = record._children[fieldName].find(c => c.record.id === record.record.id); - carry[field] = previewTitle(child); - return carry; - }, {}); - recordData = {...recordData, ...referencePreviews} - - let render = Mustache.render(schema.titleTemplate, recordData); + let render = Mustache.render(schema.titleTemplate, record.data); if (!render || render === "") { - return noTemplate(schema, record.record); + return noTemplate(schema, record); } return stripHtml(render.slice(0, 300)); @@ -42,7 +28,6 @@ function noTemplate(schema, record) { let title = stripHtml( record?.data[schema.fields.filter((f) => f.info.name === "text")[0]?.name] ).slice(0, 300); - if (title === "") { return "Untitled"; } diff --git a/front/js/svelte/records/PreviewCard.svelte b/front/js/svelte/records/PreviewCard.svelte index bba8c45..d6b95bc 100644 --- a/front/js/svelte/records/PreviewCard.svelte +++ b/front/js/svelte/records/PreviewCard.svelte @@ -1,62 +1,84 @@
-
- {#if schema.type === "files"} -
- -
+
+ + {#if editable} + {/if} -
- - {cardTitle} - - - {schema.label} - - - {#if record.status === "draft"} - - {/if} - -
+ + + + + + + + + + + + + + + + +
{#if hasDelete} -
+
+ {#if editable} + + {/if} +
{/if}
@@ -66,9 +88,11 @@ .card .trash-button { display: none; } + .card:hover .trash-button { display: block; } + .title-link { overflow: hidden; white-space: nowrap; diff --git a/front/js/svelte/records/StatusSelect.svelte b/front/js/svelte/records/StatusSelect.svelte deleted file mode 100644 index 72bff6b..0000000 --- a/front/js/svelte/records/StatusSelect.svelte +++ /dev/null @@ -1,57 +0,0 @@ - - - -
-
- - - - - -
- {#if channel.previewTarget} - - Preview - - {/if} -
diff --git a/front/js/svelte/records/block/elements/File.svelte b/front/js/svelte/records/block/elements/File.svelte index 2ede75a..b271baf 100644 --- a/front/js/svelte/records/block/elements/File.svelte +++ b/front/js/svelte/records/block/elements/File.svelte @@ -4,8 +4,8 @@ import {sortByField} from "../../../edges/sortEdges"; import ReferenceInlineButtons from "../../elements/ReferenceInlineButtons.svelte" import Sortable from "../../../libs/Sortable.svelte"; - import {insertEdges} from "../../elements/reference"; - import BrowseModal from "../../elements/BrowseModal.svelte"; + import {insertEdges} from "../../form/references/reference.js"; + import BrowseModal from "../../form/references/BrowseModal.svelte"; const channel = getContext("channel"); diff --git a/front/js/svelte/records/block/elements/Reference.svelte b/front/js/svelte/records/block/elements/Reference.svelte index 7937f22..78e4711 100644 --- a/front/js/svelte/records/block/elements/Reference.svelte +++ b/front/js/svelte/records/block/elements/Reference.svelte @@ -4,7 +4,7 @@ import {sortByField} from "../../../edges/sortEdges"; import ReferenceInlineButtons from "../../elements/ReferenceInlineButtons.svelte" import Sortable from "../../../libs/Sortable.svelte"; - import {insertEdges} from "../../elements/reference"; + import {insertEdges} from "../../form/references/reference.js"; const channel = getContext("channel"); diff --git a/front/js/svelte/records/deepEquality.js b/front/js/svelte/records/deepEquality.js new file mode 100644 index 0000000..1668761 --- /dev/null +++ b/front/js/svelte/records/deepEquality.js @@ -0,0 +1,34 @@ +import { deepEqual } from 'fast-equals'; +export function isEqual(obj1, obj2) { + return deepEqual(obj1, obj2); + // if (obj1 === obj2) return true; + // + // if (Array.isArray(obj1) && Array.isArray(obj2)) { + // + // if(obj1.length !== obj2.length) return false; + // + // return obj1.every((elem, index) => { + // return isEqual(elem, obj2[index]); + // }) + // + // + // } + // + // if(typeof obj1 === "object" && typeof obj2 === "object" && obj1 !== null && obj2 !== null) { + // if(Array.isArray(obj1) || Array.isArray(obj2)) return false; + // + // const keys1 = Object.keys(obj1) + // const keys2 = Object.keys(obj2) + // + // if(keys1.length !== keys2.length || !keys1.every(key => keys2.includes(key))) return false; + // + // for(let key in obj1) { + // if (!isEqual(obj1[key], obj2[key])) { return false; } + // } + // + // return true; + // + // } + // + // return false; +} \ No newline at end of file diff --git a/front/js/svelte/records/elements/File.svelte b/front/js/svelte/records/elements/File.svelte deleted file mode 100644 index 298faf3..0000000 --- a/front/js/svelte/records/elements/File.svelte +++ /dev/null @@ -1,122 +0,0 @@ - - -
- {#if field.collections.length === 1} - - {:else} - - {/if} -
-{#if currentReferences.length > 0} - - {#each currentReferences as reference (reference.record.id)} -
- - - - - - - - - -
- {/each} -
-{/if} - diff --git a/front/js/svelte/records/elements/Reference.svelte b/front/js/svelte/records/elements/Reference.svelte index bfa1000..3e6ada8 100644 --- a/front/js/svelte/records/elements/Reference.svelte +++ b/front/js/svelte/records/elements/Reference.svelte @@ -1,8 +1,8 @@ - -
-
- - {field.name} -
- - {#if field.help} - {field.help} - {/if} -
diff --git a/front/js/svelte/records/elements/reference.js b/front/js/svelte/records/elements/reference.js deleted file mode 100644 index f6e0274..0000000 --- a/front/js/svelte/records/elements/reference.js +++ /dev/null @@ -1,24 +0,0 @@ -import {uniqBy} from "lodash"; - -export function insertEdges(graph, sourceRecord, targetRecords, fieldName, action = "") { - let newEdges = targetRecords.map((r) => { - return { - target: r.id, - source: sourceRecord.id, - sourceSchema: sourceRecord.schema, - targetSchema: r.schema, - field: fieldName, - depth: 1, - rank: "" - }; - }); - - let replacedEdges = graph.edges; - if (action === "replace") { - replacedEdges = replacedEdges.filter((edge) => edge.field !== field.name); - } - - graph.records = uniqBy([...graph.records, ...targetRecords], (r) => r.id); - graph.edges = uniqBy([...replacedEdges, ...newEdges], (edge) => edge.source + edge.target + edge.field + edge.depth); - return graph; -} diff --git a/front/js/svelte/records/elements/FieldHeader.svelte b/front/js/svelte/records/form/FieldHeader.svelte similarity index 100% rename from front/js/svelte/records/elements/FieldHeader.svelte rename to front/js/svelte/records/form/FieldHeader.svelte diff --git a/front/js/svelte/records/form/Form.svelte b/front/js/svelte/records/form/Form.svelte new file mode 100644 index 0000000..8c48c2e --- /dev/null +++ b/front/js/svelte/records/form/Form.svelte @@ -0,0 +1,122 @@ + + + + +
+ + +
+ + + + + + {#each schema.fields as field (field.name)} + {#if activeContentTab === field.group} + {#if ["reference", "file"].includes(field.info.name)} + + {:else} + + {/if} + {/if} + {/each} + + +
+
diff --git a/front/js/svelte/records/form/FormField.svelte b/front/js/svelte/records/form/FormField.svelte new file mode 100644 index 0000000..e2f1e85 --- /dev/null +++ b/front/js/svelte/records/form/FormField.svelte @@ -0,0 +1,50 @@ + + +
+ + + +
diff --git a/front/js/svelte/records/form/ReferenceField.svelte b/front/js/svelte/records/form/ReferenceField.svelte new file mode 100644 index 0000000..f1003d0 --- /dev/null +++ b/front/js/svelte/records/form/ReferenceField.svelte @@ -0,0 +1,17 @@ + + +
+ + +
diff --git a/front/js/svelte/records/form/SaveButtons.svelte b/front/js/svelte/records/form/SaveButtons.svelte new file mode 100644 index 0000000..f1844b4 --- /dev/null +++ b/front/js/svelte/records/form/SaveButtons.svelte @@ -0,0 +1,47 @@ + + +
+
+ + + {#if isCreateMode} + + {:else if hasUnsavedData} + + {/if} +
+
\ No newline at end of file diff --git a/front/js/svelte/records/form/StatusSelect.svelte b/front/js/svelte/records/form/StatusSelect.svelte new file mode 100644 index 0000000..ba3a3ec --- /dev/null +++ b/front/js/svelte/records/form/StatusSelect.svelte @@ -0,0 +1,47 @@ + +{#if status} + +
+
+ + + +
+
+{/if} \ No newline at end of file diff --git a/front/js/svelte/records/elements/Checkbox.svelte b/front/js/svelte/records/form/fields/Checkbox.svelte similarity index 96% rename from front/js/svelte/records/elements/Checkbox.svelte rename to front/js/svelte/records/form/fields/Checkbox.svelte index 28b3aa6..14afc80 100644 --- a/front/js/svelte/records/elements/Checkbox.svelte +++ b/front/js/svelte/records/form/fields/Checkbox.svelte @@ -1,5 +1,5 @@ + + + + + diff --git a/front/js/svelte/records/form/references/Reference.svelte b/front/js/svelte/records/form/references/Reference.svelte new file mode 100644 index 0000000..90b4f47 --- /dev/null +++ b/front/js/svelte/records/form/references/Reference.svelte @@ -0,0 +1,98 @@ + + +
+ {#if field.collections.length === 1} + + {:else} + + {/if} +
+{#if currentReferences.length > 0} + + {#each currentReferences as reference (reference.record.id)} +
+ +
+ {/each} +
+{/if} + diff --git a/front/js/svelte/records/elements/ReferenceTags.svelte b/front/js/svelte/records/form/references/ReferenceTags.svelte similarity index 89% rename from front/js/svelte/records/elements/ReferenceTags.svelte rename to front/js/svelte/records/form/references/ReferenceTags.svelte index 8ff4a6e..96d1647 100644 --- a/front/js/svelte/records/elements/ReferenceTags.svelte +++ b/front/js/svelte/records/form/references/ReferenceTags.svelte @@ -1,14 +1,14 @@