@xleddyl/nuxt-cms 0.4.3 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/module.json +1 -1
- package/dist/module.mjs +22 -7
- package/dist/runtime/app/components/cms/BlockOutline.vue +56 -67
- package/dist/runtime/app/components/cms/BlockPalette.vue +3 -1
- package/dist/runtime/app/components/cms/BlocksField.vue +155 -149
- package/dist/runtime/app/components/cms/BrandMark.d.vue.ts +3 -1
- package/dist/runtime/app/components/cms/BrandMark.vue +24 -25
- package/dist/runtime/app/components/cms/BrandMark.vue.d.ts +3 -1
- package/dist/runtime/app/components/cms/{Checkbox.d.vue.ts → ConfirmGroups.d.vue.ts} +4 -4
- package/dist/runtime/app/components/cms/ConfirmGroups.vue +22 -0
- package/dist/runtime/app/components/cms/{Checkbox.vue.d.ts → ConfirmGroups.vue.d.ts} +4 -4
- package/dist/runtime/app/components/cms/EntryDrawer.d.vue.ts +2 -2
- package/dist/runtime/app/components/cms/EntryDrawer.vue +62 -47
- package/dist/runtime/app/components/cms/EntryDrawer.vue.d.ts +2 -2
- package/dist/runtime/app/components/cms/EntryForm.vue +100 -95
- package/dist/runtime/app/components/cms/FieldInput.vue +56 -32
- package/dist/runtime/app/components/cms/ImportModal.d.vue.ts +2 -2
- package/dist/runtime/app/components/cms/ImportModal.vue +80 -79
- package/dist/runtime/app/components/cms/ImportModal.vue.d.ts +2 -2
- package/dist/runtime/app/components/cms/JsonField.vue +17 -8
- package/dist/runtime/app/components/cms/ListFilters.vue +54 -63
- package/dist/runtime/app/components/cms/LocaleSwitch.vue +21 -18
- package/dist/runtime/app/components/cms/MediaDetail.vue +110 -72
- package/dist/runtime/app/components/cms/MediaField.vue +37 -29
- package/dist/runtime/app/components/cms/MediaFolderPicker.d.vue.ts +1 -0
- package/dist/runtime/app/components/cms/MediaFolderPicker.vue +77 -49
- package/dist/runtime/app/components/cms/MediaFolderPicker.vue.d.ts +1 -0
- package/dist/runtime/app/components/cms/MediaGallery.vue +300 -323
- package/dist/runtime/app/components/cms/MediaThumb.vue +7 -2
- package/dist/runtime/app/components/cms/MediaUpload.vue +37 -70
- package/dist/runtime/app/components/cms/RelationField.vue +23 -71
- package/dist/runtime/app/components/cms/RichTextField.vue +23 -177
- package/dist/runtime/app/components/cms/SettingsAccount.vue +96 -104
- package/dist/runtime/app/components/cms/SettingsColumns.vue +7 -6
- package/dist/runtime/app/components/cms/SettingsEntry.d.vue.ts +10 -1
- package/dist/runtime/app/components/cms/SettingsEntry.vue +35 -52
- package/dist/runtime/app/components/cms/SettingsEntry.vue.d.ts +10 -1
- package/dist/runtime/app/components/cms/SettingsLayout.vue +7 -4
- package/dist/runtime/app/components/cms/SettingsModal.d.vue.ts +0 -4
- package/dist/runtime/app/components/cms/SettingsModal.vue +102 -151
- package/dist/runtime/app/components/cms/SettingsModal.vue.d.ts +0 -4
- package/dist/runtime/app/components/cms/SettingsUsers.d.vue.ts +8 -1
- package/dist/runtime/app/components/cms/SettingsUsers.vue +182 -189
- package/dist/runtime/app/components/cms/SettingsUsers.vue.d.ts +8 -1
- package/dist/runtime/app/components/cms/SlugField.vue +9 -6
- package/dist/runtime/app/components/cms/StatusBadge.vue +7 -6
- package/dist/runtime/app/components/cms/TranslatableField.vue +11 -6
- package/dist/runtime/app/components/cms/VisualEditor.vue +243 -282
- package/dist/runtime/app/components/cms/WelcomeModal.vue +49 -41
- package/dist/runtime/app/composables/cms-confirm.d.ts +0 -6
- package/dist/runtime/app/composables/cms-confirm.js +13 -13
- package/dist/runtime/app/composables/cms-media-uploader.d.ts +4 -0
- package/dist/runtime/app/composables/cms-media-uploader.js +12 -40
- package/dist/runtime/app/composables/cms-theme.d.ts +3 -9
- package/dist/runtime/app/composables/cms-theme.js +1 -19
- package/dist/runtime/app/composables/cms-toast.d.ts +3 -4
- package/dist/runtime/app/composables/cms-toast.js +6 -13
- package/dist/runtime/app/layouts/cms-admin.d.vue.ts +2 -2
- package/dist/runtime/app/layouts/cms-admin.vue +184 -113
- package/dist/runtime/app/layouts/cms-admin.vue.d.ts +2 -2
- package/dist/runtime/app/layouts/cms-editor.d.vue.ts +2 -2
- package/dist/runtime/app/layouts/cms-editor.vue +9 -4
- package/dist/runtime/app/layouts/cms-editor.vue.d.ts +2 -2
- package/dist/runtime/app/pages/admin-collection.vue +178 -143
- package/dist/runtime/app/pages/admin-content.vue +35 -30
- package/dist/runtime/app/pages/admin-entry.vue +14 -9
- package/dist/runtime/app/pages/admin-login.vue +57 -54
- package/dist/runtime/app/pages/admin-media.vue +6 -4
- package/dist/runtime/app/pages/admin-preview.vue +3 -2
- package/dist/runtime/app/preview/PreviewOverlay.vue +9 -7
- package/dist/runtime/app/utils/ui.d.ts +1 -3
- package/dist/runtime/app/utils/ui.js +4 -2
- package/dist/runtime/assets/editor.css +1 -0
- package/dist/runtime/assets/main.css +1 -1
- package/dist/runtime/assets/media.css +1 -0
- package/dist/runtime/assets/shell.css +1 -0
- package/package.json +9 -8
- package/dist/runtime/app/components/cms/Alert.d.vue.ts +0 -17
- package/dist/runtime/app/components/cms/Alert.vue +0 -13
- package/dist/runtime/app/components/cms/Alert.vue.d.ts +0 -17
- package/dist/runtime/app/components/cms/Button.d.vue.ts +0 -26
- package/dist/runtime/app/components/cms/Button.vue +0 -48
- package/dist/runtime/app/components/cms/Button.vue.d.ts +0 -26
- package/dist/runtime/app/components/cms/Checkbox.vue +0 -21
- package/dist/runtime/app/components/cms/ConfirmModal.d.vue.ts +0 -3
- package/dist/runtime/app/components/cms/ConfirmModal.vue +0 -46
- package/dist/runtime/app/components/cms/ConfirmModal.vue.d.ts +0 -3
- package/dist/runtime/app/components/cms/Drawer.d.vue.ts +0 -30
- package/dist/runtime/app/components/cms/Drawer.vue +0 -61
- package/dist/runtime/app/components/cms/Drawer.vue.d.ts +0 -30
- package/dist/runtime/app/components/cms/DropdownMenu.d.vue.ts +0 -26
- package/dist/runtime/app/components/cms/DropdownMenu.vue +0 -48
- package/dist/runtime/app/components/cms/DropdownMenu.vue.d.ts +0 -26
- package/dist/runtime/app/components/cms/EmptyState.d.vue.ts +0 -19
- package/dist/runtime/app/components/cms/EmptyState.vue +0 -21
- package/dist/runtime/app/components/cms/EmptyState.vue.d.ts +0 -19
- package/dist/runtime/app/components/cms/Form.d.vue.ts +0 -37
- package/dist/runtime/app/components/cms/Form.vue +0 -63
- package/dist/runtime/app/components/cms/Form.vue.d.ts +0 -37
- package/dist/runtime/app/components/cms/FormField.d.vue.ts +0 -22
- package/dist/runtime/app/components/cms/FormField.vue +0 -35
- package/dist/runtime/app/components/cms/FormField.vue.d.ts +0 -22
- package/dist/runtime/app/components/cms/Icon.d.vue.ts +0 -6
- package/dist/runtime/app/components/cms/Icon.vue +0 -23
- package/dist/runtime/app/components/cms/Icon.vue.d.ts +0 -6
- package/dist/runtime/app/components/cms/Input.d.vue.ts +0 -27
- package/dist/runtime/app/components/cms/Input.vue +0 -46
- package/dist/runtime/app/components/cms/Input.vue.d.ts +0 -27
- package/dist/runtime/app/components/cms/Modal.d.vue.ts +0 -31
- package/dist/runtime/app/components/cms/Modal.vue +0 -49
- package/dist/runtime/app/components/cms/Modal.vue.d.ts +0 -31
- package/dist/runtime/app/components/cms/PageHeader.d.vue.ts +0 -25
- package/dist/runtime/app/components/cms/PageHeader.vue +0 -36
- package/dist/runtime/app/components/cms/PageHeader.vue.d.ts +0 -25
- package/dist/runtime/app/components/cms/Pagination.d.vue.ts +0 -15
- package/dist/runtime/app/components/cms/Pagination.vue +0 -51
- package/dist/runtime/app/components/cms/Pagination.vue.d.ts +0 -15
- package/dist/runtime/app/components/cms/PasswordInput.d.vue.ts +0 -17
- package/dist/runtime/app/components/cms/PasswordInput.vue +0 -81
- package/dist/runtime/app/components/cms/PasswordInput.vue.d.ts +0 -17
- package/dist/runtime/app/components/cms/Popover.d.vue.ts +0 -22
- package/dist/runtime/app/components/cms/Popover.vue +0 -27
- package/dist/runtime/app/components/cms/Popover.vue.d.ts +0 -22
- package/dist/runtime/app/components/cms/Search.d.vue.ts +0 -7
- package/dist/runtime/app/components/cms/Search.vue +0 -347
- package/dist/runtime/app/components/cms/Search.vue.d.ts +0 -7
- package/dist/runtime/app/components/cms/SelectMenu.d.vue.ts +0 -25
- package/dist/runtime/app/components/cms/SelectMenu.vue +0 -152
- package/dist/runtime/app/components/cms/SelectMenu.vue.d.ts +0 -25
- package/dist/runtime/app/components/cms/Spinner.d.vue.ts +0 -3
- package/dist/runtime/app/components/cms/Spinner.vue +0 -5
- package/dist/runtime/app/components/cms/Spinner.vue.d.ts +0 -3
- package/dist/runtime/app/components/cms/Switch.d.vue.ts +0 -10
- package/dist/runtime/app/components/cms/Switch.vue +0 -14
- package/dist/runtime/app/components/cms/Switch.vue.d.ts +0 -10
- package/dist/runtime/app/components/cms/Table.d.vue.ts +0 -51
- package/dist/runtime/app/components/cms/Table.vue +0 -115
- package/dist/runtime/app/components/cms/Table.vue.d.ts +0 -51
- package/dist/runtime/app/components/cms/Textarea.d.vue.ts +0 -15
- package/dist/runtime/app/components/cms/Textarea.vue +0 -16
- package/dist/runtime/app/components/cms/Textarea.vue.d.ts +0 -15
- package/dist/runtime/app/components/cms/Toaster.d.vue.ts +0 -3
- package/dist/runtime/app/components/cms/Toaster.vue +0 -48
- package/dist/runtime/app/components/cms/Toaster.vue.d.ts +0 -3
- package/dist/runtime/app/composables/cms-overlay.d.ts +0 -4
- package/dist/runtime/app/composables/cms-overlay.js +0 -23
- package/dist/runtime/assets/svg/academic-cap.svg +0 -3
- package/dist/runtime/assets/svg/adjustments-horizontal.svg +0 -3
- package/dist/runtime/assets/svg/adjustments-vertical.svg +0 -3
- package/dist/runtime/assets/svg/archive-box-arrow-down.svg +0 -3
- package/dist/runtime/assets/svg/archive-box-x-mark.svg +0 -3
- package/dist/runtime/assets/svg/archive-box.svg +0 -3
- package/dist/runtime/assets/svg/arrow-down-circle.svg +0 -3
- package/dist/runtime/assets/svg/arrow-down-left.svg +0 -3
- package/dist/runtime/assets/svg/arrow-down-on-square-stack.svg +0 -3
- package/dist/runtime/assets/svg/arrow-down-on-square.svg +0 -3
- package/dist/runtime/assets/svg/arrow-down-right.svg +0 -3
- package/dist/runtime/assets/svg/arrow-down-tray.svg +0 -3
- package/dist/runtime/assets/svg/arrow-down.svg +0 -3
- package/dist/runtime/assets/svg/arrow-left-circle.svg +0 -3
- package/dist/runtime/assets/svg/arrow-left-end-on-rectangle.svg +0 -3
- package/dist/runtime/assets/svg/arrow-left-on-rectangle.svg +0 -3
- package/dist/runtime/assets/svg/arrow-left-start-on-rectangle.svg +0 -3
- package/dist/runtime/assets/svg/arrow-left.svg +0 -3
- package/dist/runtime/assets/svg/arrow-long-down.svg +0 -3
- package/dist/runtime/assets/svg/arrow-long-left.svg +0 -3
- package/dist/runtime/assets/svg/arrow-long-right.svg +0 -3
- package/dist/runtime/assets/svg/arrow-long-up.svg +0 -3
- package/dist/runtime/assets/svg/arrow-path-rounded-square.svg +0 -3
- package/dist/runtime/assets/svg/arrow-path.svg +0 -3
- package/dist/runtime/assets/svg/arrow-right-circle.svg +0 -3
- package/dist/runtime/assets/svg/arrow-right-end-on-rectangle.svg +0 -3
- package/dist/runtime/assets/svg/arrow-right-on-rectangle.svg +0 -3
- package/dist/runtime/assets/svg/arrow-right-start-on-rectangle.svg +0 -3
- package/dist/runtime/assets/svg/arrow-right.svg +0 -3
- package/dist/runtime/assets/svg/arrow-small-down.svg +0 -3
- package/dist/runtime/assets/svg/arrow-small-left.svg +0 -3
- package/dist/runtime/assets/svg/arrow-small-right.svg +0 -3
- package/dist/runtime/assets/svg/arrow-small-up.svg +0 -3
- package/dist/runtime/assets/svg/arrow-top-right-on-square.svg +0 -3
- package/dist/runtime/assets/svg/arrow-trending-down.svg +0 -3
- package/dist/runtime/assets/svg/arrow-trending-up.svg +0 -3
- package/dist/runtime/assets/svg/arrow-turn-down-left.svg +0 -3
- package/dist/runtime/assets/svg/arrow-turn-down-right.svg +0 -3
- package/dist/runtime/assets/svg/arrow-turn-left-down.svg +0 -3
- package/dist/runtime/assets/svg/arrow-turn-left-up.svg +0 -3
- package/dist/runtime/assets/svg/arrow-turn-right-down.svg +0 -3
- package/dist/runtime/assets/svg/arrow-turn-right-up.svg +0 -3
- package/dist/runtime/assets/svg/arrow-turn-up-left.svg +0 -3
- package/dist/runtime/assets/svg/arrow-turn-up-right.svg +0 -3
- package/dist/runtime/assets/svg/arrow-up-circle.svg +0 -3
- package/dist/runtime/assets/svg/arrow-up-left.svg +0 -3
- package/dist/runtime/assets/svg/arrow-up-on-square-stack.svg +0 -3
- package/dist/runtime/assets/svg/arrow-up-on-square.svg +0 -3
- package/dist/runtime/assets/svg/arrow-up-right.svg +0 -3
- package/dist/runtime/assets/svg/arrow-up-tray.svg +0 -3
- package/dist/runtime/assets/svg/arrow-up.svg +0 -3
- package/dist/runtime/assets/svg/arrow-uturn-down.svg +0 -3
- package/dist/runtime/assets/svg/arrow-uturn-left.svg +0 -3
- package/dist/runtime/assets/svg/arrow-uturn-right.svg +0 -3
- package/dist/runtime/assets/svg/arrow-uturn-up.svg +0 -3
- package/dist/runtime/assets/svg/arrows-pointing-in.svg +0 -3
- package/dist/runtime/assets/svg/arrows-pointing-out.svg +0 -3
- package/dist/runtime/assets/svg/arrows-right-left.svg +0 -3
- package/dist/runtime/assets/svg/arrows-up-down.svg +0 -3
- package/dist/runtime/assets/svg/at-symbol.svg +0 -3
- package/dist/runtime/assets/svg/backspace.svg +0 -3
- package/dist/runtime/assets/svg/backward.svg +0 -3
- package/dist/runtime/assets/svg/banknotes.svg +0 -3
- package/dist/runtime/assets/svg/bars-2.svg +0 -3
- package/dist/runtime/assets/svg/bars-3-bottom-left.svg +0 -3
- package/dist/runtime/assets/svg/bars-3-bottom-right.svg +0 -3
- package/dist/runtime/assets/svg/bars-3-center-left.svg +0 -3
- package/dist/runtime/assets/svg/bars-3.svg +0 -3
- package/dist/runtime/assets/svg/bars-4.svg +0 -3
- package/dist/runtime/assets/svg/bars-arrow-down.svg +0 -3
- package/dist/runtime/assets/svg/bars-arrow-up.svg +0 -3
- package/dist/runtime/assets/svg/battery-0.svg +0 -3
- package/dist/runtime/assets/svg/battery-100.svg +0 -3
- package/dist/runtime/assets/svg/battery-50.svg +0 -3
- package/dist/runtime/assets/svg/beaker.svg +0 -3
- package/dist/runtime/assets/svg/bell-alert.svg +0 -3
- package/dist/runtime/assets/svg/bell-slash.svg +0 -3
- package/dist/runtime/assets/svg/bell-snooze.svg +0 -3
- package/dist/runtime/assets/svg/bell.svg +0 -3
- package/dist/runtime/assets/svg/bold.svg +0 -3
- package/dist/runtime/assets/svg/bolt-slash.svg +0 -3
- package/dist/runtime/assets/svg/bolt.svg +0 -3
- package/dist/runtime/assets/svg/book-open.svg +0 -3
- package/dist/runtime/assets/svg/bookmark-slash.svg +0 -3
- package/dist/runtime/assets/svg/bookmark-square.svg +0 -3
- package/dist/runtime/assets/svg/bookmark.svg +0 -3
- package/dist/runtime/assets/svg/briefcase.svg +0 -3
- package/dist/runtime/assets/svg/bug-ant.svg +0 -3
- package/dist/runtime/assets/svg/building-library.svg +0 -3
- package/dist/runtime/assets/svg/building-office-2.svg +0 -3
- package/dist/runtime/assets/svg/building-office.svg +0 -3
- package/dist/runtime/assets/svg/building-storefront.svg +0 -3
- package/dist/runtime/assets/svg/cake.svg +0 -3
- package/dist/runtime/assets/svg/calculator.svg +0 -3
- package/dist/runtime/assets/svg/calendar-date-range.svg +0 -3
- package/dist/runtime/assets/svg/calendar-days.svg +0 -3
- package/dist/runtime/assets/svg/calendar.svg +0 -3
- package/dist/runtime/assets/svg/camera.svg +0 -4
- package/dist/runtime/assets/svg/chart-bar-square.svg +0 -3
- package/dist/runtime/assets/svg/chart-bar.svg +0 -3
- package/dist/runtime/assets/svg/chart-pie.svg +0 -4
- package/dist/runtime/assets/svg/chat-bubble-bottom-center-text.svg +0 -3
- package/dist/runtime/assets/svg/chat-bubble-bottom-center.svg +0 -3
- package/dist/runtime/assets/svg/chat-bubble-left-ellipsis.svg +0 -3
- package/dist/runtime/assets/svg/chat-bubble-left-right.svg +0 -3
- package/dist/runtime/assets/svg/chat-bubble-left.svg +0 -3
- package/dist/runtime/assets/svg/chat-bubble-oval-left-ellipsis.svg +0 -3
- package/dist/runtime/assets/svg/chat-bubble-oval-left.svg +0 -3
- package/dist/runtime/assets/svg/check-badge.svg +0 -3
- package/dist/runtime/assets/svg/check-circle.svg +0 -3
- package/dist/runtime/assets/svg/check.svg +0 -3
- package/dist/runtime/assets/svg/chevron-double-down.svg +0 -3
- package/dist/runtime/assets/svg/chevron-double-left.svg +0 -3
- package/dist/runtime/assets/svg/chevron-double-right.svg +0 -3
- package/dist/runtime/assets/svg/chevron-double-up.svg +0 -4
- package/dist/runtime/assets/svg/chevron-down.svg +0 -3
- package/dist/runtime/assets/svg/chevron-left.svg +0 -3
- package/dist/runtime/assets/svg/chevron-right.svg +0 -3
- package/dist/runtime/assets/svg/chevron-up-down.svg +0 -3
- package/dist/runtime/assets/svg/chevron-up.svg +0 -3
- package/dist/runtime/assets/svg/circle-stack.svg +0 -3
- package/dist/runtime/assets/svg/clipboard-document-check.svg +0 -3
- package/dist/runtime/assets/svg/clipboard-document-list.svg +0 -3
- package/dist/runtime/assets/svg/clipboard-document.svg +0 -3
- package/dist/runtime/assets/svg/clipboard.svg +0 -3
- package/dist/runtime/assets/svg/clock.svg +0 -3
- package/dist/runtime/assets/svg/cloud-arrow-down.svg +0 -3
- package/dist/runtime/assets/svg/cloud-arrow-up.svg +0 -3
- package/dist/runtime/assets/svg/cloud.svg +0 -3
- package/dist/runtime/assets/svg/code-bracket-square.svg +0 -3
- package/dist/runtime/assets/svg/code-bracket.svg +0 -3
- package/dist/runtime/assets/svg/cog-6-tooth.svg +0 -4
- package/dist/runtime/assets/svg/cog-8-tooth.svg +0 -4
- package/dist/runtime/assets/svg/cog.svg +0 -3
- package/dist/runtime/assets/svg/command-line.svg +0 -3
- package/dist/runtime/assets/svg/computer-desktop.svg +0 -3
- package/dist/runtime/assets/svg/cpu-chip.svg +0 -3
- package/dist/runtime/assets/svg/credit-card.svg +0 -3
- package/dist/runtime/assets/svg/cube-transparent.svg +0 -3
- package/dist/runtime/assets/svg/cube.svg +0 -3
- package/dist/runtime/assets/svg/currency-bangladeshi.svg +0 -3
- package/dist/runtime/assets/svg/currency-dollar.svg +0 -3
- package/dist/runtime/assets/svg/currency-euro.svg +0 -3
- package/dist/runtime/assets/svg/currency-pound.svg +0 -3
- package/dist/runtime/assets/svg/currency-rupee.svg +0 -3
- package/dist/runtime/assets/svg/currency-yen.svg +0 -3
- package/dist/runtime/assets/svg/cursor-arrow-rays.svg +0 -3
- package/dist/runtime/assets/svg/cursor-arrow-ripple.svg +0 -3
- package/dist/runtime/assets/svg/device-phone-mobile.svg +0 -3
- package/dist/runtime/assets/svg/device-tablet.svg +0 -3
- package/dist/runtime/assets/svg/divide.svg +0 -3
- package/dist/runtime/assets/svg/document-arrow-down.svg +0 -3
- package/dist/runtime/assets/svg/document-arrow-up.svg +0 -3
- package/dist/runtime/assets/svg/document-chart-bar.svg +0 -3
- package/dist/runtime/assets/svg/document-check.svg +0 -3
- package/dist/runtime/assets/svg/document-currency-bangladeshi.svg +0 -3
- package/dist/runtime/assets/svg/document-currency-dollar.svg +0 -3
- package/dist/runtime/assets/svg/document-currency-euro.svg +0 -3
- package/dist/runtime/assets/svg/document-currency-pound.svg +0 -3
- package/dist/runtime/assets/svg/document-currency-rupee.svg +0 -3
- package/dist/runtime/assets/svg/document-currency-yen.svg +0 -3
- package/dist/runtime/assets/svg/document-duplicate.svg +0 -3
- package/dist/runtime/assets/svg/document-magnifying-glass.svg +0 -3
- package/dist/runtime/assets/svg/document-minus.svg +0 -3
- package/dist/runtime/assets/svg/document-plus.svg +0 -3
- package/dist/runtime/assets/svg/document-text.svg +0 -3
- package/dist/runtime/assets/svg/document.svg +0 -3
- package/dist/runtime/assets/svg/ellipsis-horizontal-circle.svg +0 -3
- package/dist/runtime/assets/svg/ellipsis-horizontal.svg +0 -3
- package/dist/runtime/assets/svg/ellipsis-vertical.svg +0 -3
- package/dist/runtime/assets/svg/envelope-open.svg +0 -3
- package/dist/runtime/assets/svg/envelope.svg +0 -3
- package/dist/runtime/assets/svg/equals.svg +0 -3
- package/dist/runtime/assets/svg/exclamation-circle.svg +0 -3
- package/dist/runtime/assets/svg/exclamation-triangle.svg +0 -3
- package/dist/runtime/assets/svg/eye-dropper.svg +0 -3
- package/dist/runtime/assets/svg/eye-slash.svg +0 -3
- package/dist/runtime/assets/svg/eye.svg +0 -4
- package/dist/runtime/assets/svg/face-frown.svg +0 -3
- package/dist/runtime/assets/svg/face-smile.svg +0 -3
- package/dist/runtime/assets/svg/film.svg +0 -3
- package/dist/runtime/assets/svg/finger-print.svg +0 -3
- package/dist/runtime/assets/svg/fire.svg +0 -4
- package/dist/runtime/assets/svg/flag.svg +0 -3
- package/dist/runtime/assets/svg/folder-arrow-down.svg +0 -3
- package/dist/runtime/assets/svg/folder-minus.svg +0 -3
- package/dist/runtime/assets/svg/folder-open.svg +0 -3
- package/dist/runtime/assets/svg/folder-plus.svg +0 -3
- package/dist/runtime/assets/svg/folder.svg +0 -3
- package/dist/runtime/assets/svg/forward.svg +0 -3
- package/dist/runtime/assets/svg/funnel.svg +0 -3
- package/dist/runtime/assets/svg/gif.svg +0 -3
- package/dist/runtime/assets/svg/gift-top.svg +0 -3
- package/dist/runtime/assets/svg/gift.svg +0 -3
- package/dist/runtime/assets/svg/globe-alt.svg +0 -3
- package/dist/runtime/assets/svg/globe-americas.svg +0 -3
- package/dist/runtime/assets/svg/globe-asia-australia.svg +0 -3
- package/dist/runtime/assets/svg/globe-europe-africa.svg +0 -3
- package/dist/runtime/assets/svg/h1.svg +0 -3
- package/dist/runtime/assets/svg/h2.svg +0 -3
- package/dist/runtime/assets/svg/h3.svg +0 -3
- package/dist/runtime/assets/svg/hand-raised.svg +0 -3
- package/dist/runtime/assets/svg/hand-thumb-down.svg +0 -3
- package/dist/runtime/assets/svg/hand-thumb-up.svg +0 -3
- package/dist/runtime/assets/svg/hashtag.svg +0 -3
- package/dist/runtime/assets/svg/heart.svg +0 -3
- package/dist/runtime/assets/svg/home-modern.svg +0 -3
- package/dist/runtime/assets/svg/home.svg +0 -3
- package/dist/runtime/assets/svg/identification.svg +0 -3
- package/dist/runtime/assets/svg/inbox-arrow-down.svg +0 -3
- package/dist/runtime/assets/svg/inbox-stack.svg +0 -3
- package/dist/runtime/assets/svg/inbox.svg +0 -3
- package/dist/runtime/assets/svg/information-circle.svg +0 -3
- package/dist/runtime/assets/svg/italic.svg +0 -3
- package/dist/runtime/assets/svg/key.svg +0 -3
- package/dist/runtime/assets/svg/language.svg +0 -3
- package/dist/runtime/assets/svg/lifebuoy.svg +0 -3
- package/dist/runtime/assets/svg/light-bulb.svg +0 -3
- package/dist/runtime/assets/svg/link-slash.svg +0 -3
- package/dist/runtime/assets/svg/link.svg +0 -3
- package/dist/runtime/assets/svg/list-bullet.svg +0 -3
- package/dist/runtime/assets/svg/lock-closed.svg +0 -3
- package/dist/runtime/assets/svg/lock-open.svg +0 -3
- package/dist/runtime/assets/svg/magnifying-glass-circle.svg +0 -3
- package/dist/runtime/assets/svg/magnifying-glass-minus.svg +0 -3
- package/dist/runtime/assets/svg/magnifying-glass-plus.svg +0 -3
- package/dist/runtime/assets/svg/magnifying-glass.svg +0 -3
- package/dist/runtime/assets/svg/map-pin.svg +0 -4
- package/dist/runtime/assets/svg/map.svg +0 -3
- package/dist/runtime/assets/svg/megaphone.svg +0 -3
- package/dist/runtime/assets/svg/microphone.svg +0 -3
- package/dist/runtime/assets/svg/minus-circle.svg +0 -3
- package/dist/runtime/assets/svg/minus-small.svg +0 -3
- package/dist/runtime/assets/svg/minus.svg +0 -3
- package/dist/runtime/assets/svg/moon.svg +0 -3
- package/dist/runtime/assets/svg/musical-note.svg +0 -3
- package/dist/runtime/assets/svg/newspaper.svg +0 -3
- package/dist/runtime/assets/svg/no-symbol.svg +0 -3
- package/dist/runtime/assets/svg/numbered-list.svg +0 -3
- package/dist/runtime/assets/svg/paint-brush.svg +0 -3
- package/dist/runtime/assets/svg/paper-airplane.svg +0 -3
- package/dist/runtime/assets/svg/paper-clip.svg +0 -3
- package/dist/runtime/assets/svg/pause-circle.svg +0 -3
- package/dist/runtime/assets/svg/pause.svg +0 -3
- package/dist/runtime/assets/svg/pencil-square.svg +0 -3
- package/dist/runtime/assets/svg/pencil.svg +0 -3
- package/dist/runtime/assets/svg/percent-badge.svg +0 -3
- package/dist/runtime/assets/svg/phone-arrow-down-left.svg +0 -3
- package/dist/runtime/assets/svg/phone-arrow-up-right.svg +0 -3
- package/dist/runtime/assets/svg/phone-x-mark.svg +0 -3
- package/dist/runtime/assets/svg/phone.svg +0 -3
- package/dist/runtime/assets/svg/photo.svg +0 -3
- package/dist/runtime/assets/svg/play-circle.svg +0 -4
- package/dist/runtime/assets/svg/play-pause.svg +0 -3
- package/dist/runtime/assets/svg/play.svg +0 -3
- package/dist/runtime/assets/svg/plus-circle.svg +0 -3
- package/dist/runtime/assets/svg/plus-small.svg +0 -3
- package/dist/runtime/assets/svg/plus.svg +0 -3
- package/dist/runtime/assets/svg/power.svg +0 -3
- package/dist/runtime/assets/svg/presentation-chart-bar.svg +0 -3
- package/dist/runtime/assets/svg/presentation-chart-line.svg +0 -3
- package/dist/runtime/assets/svg/printer.svg +0 -3
- package/dist/runtime/assets/svg/puzzle-piece.svg +0 -3
- package/dist/runtime/assets/svg/qr-code.svg +0 -4
- package/dist/runtime/assets/svg/question-mark-circle.svg +0 -3
- package/dist/runtime/assets/svg/queue-list.svg +0 -3
- package/dist/runtime/assets/svg/radio.svg +0 -3
- package/dist/runtime/assets/svg/receipt-percent.svg +0 -3
- package/dist/runtime/assets/svg/receipt-refund.svg +0 -3
- package/dist/runtime/assets/svg/rectangle-group.svg +0 -3
- package/dist/runtime/assets/svg/rectangle-stack.svg +0 -3
- package/dist/runtime/assets/svg/rocket-launch.svg +0 -3
- package/dist/runtime/assets/svg/rss.svg +0 -3
- package/dist/runtime/assets/svg/scale.svg +0 -3
- package/dist/runtime/assets/svg/scissors.svg +0 -3
- package/dist/runtime/assets/svg/server-stack.svg +0 -3
- package/dist/runtime/assets/svg/server.svg +0 -3
- package/dist/runtime/assets/svg/share.svg +0 -3
- package/dist/runtime/assets/svg/shield-check.svg +0 -3
- package/dist/runtime/assets/svg/shield-exclamation.svg +0 -3
- package/dist/runtime/assets/svg/shopping-bag.svg +0 -3
- package/dist/runtime/assets/svg/shopping-cart.svg +0 -3
- package/dist/runtime/assets/svg/signal-slash.svg +0 -3
- package/dist/runtime/assets/svg/signal.svg +0 -3
- package/dist/runtime/assets/svg/slash.svg +0 -3
- package/dist/runtime/assets/svg/sparkles.svg +0 -3
- package/dist/runtime/assets/svg/speaker-wave.svg +0 -3
- package/dist/runtime/assets/svg/speaker-x-mark.svg +0 -3
- package/dist/runtime/assets/svg/square-2-stack.svg +0 -3
- package/dist/runtime/assets/svg/square-3-stack-3d.svg +0 -3
- package/dist/runtime/assets/svg/squares-2x2.svg +0 -3
- package/dist/runtime/assets/svg/squares-plus.svg +0 -3
- package/dist/runtime/assets/svg/star.svg +0 -3
- package/dist/runtime/assets/svg/stop-circle.svg +0 -4
- package/dist/runtime/assets/svg/stop.svg +0 -3
- package/dist/runtime/assets/svg/strikethrough.svg +0 -3
- package/dist/runtime/assets/svg/sun.svg +0 -3
- package/dist/runtime/assets/svg/swatch.svg +0 -3
- package/dist/runtime/assets/svg/table-cells.svg +0 -3
- package/dist/runtime/assets/svg/tag.svg +0 -4
- package/dist/runtime/assets/svg/ticket.svg +0 -3
- package/dist/runtime/assets/svg/trash.svg +0 -3
- package/dist/runtime/assets/svg/trophy.svg +0 -3
- package/dist/runtime/assets/svg/truck.svg +0 -3
- package/dist/runtime/assets/svg/tv.svg +0 -3
- package/dist/runtime/assets/svg/underline.svg +0 -3
- package/dist/runtime/assets/svg/user-circle.svg +0 -3
- package/dist/runtime/assets/svg/user-group.svg +0 -3
- package/dist/runtime/assets/svg/user-minus.svg +0 -3
- package/dist/runtime/assets/svg/user-plus.svg +0 -3
- package/dist/runtime/assets/svg/user.svg +0 -3
- package/dist/runtime/assets/svg/users.svg +0 -3
- package/dist/runtime/assets/svg/variable.svg +0 -3
- package/dist/runtime/assets/svg/video-camera-slash.svg +0 -3
- package/dist/runtime/assets/svg/video-camera.svg +0 -3
- package/dist/runtime/assets/svg/view-columns.svg +0 -3
- package/dist/runtime/assets/svg/viewfinder-circle.svg +0 -3
- package/dist/runtime/assets/svg/wallet.svg +0 -3
- package/dist/runtime/assets/svg/wifi.svg +0 -3
- package/dist/runtime/assets/svg/window.svg +0 -3
- package/dist/runtime/assets/svg/wrench-screwdriver.svg +0 -3
- package/dist/runtime/assets/svg/wrench.svg +0 -4
- package/dist/runtime/assets/svg/x-circle.svg +0 -3
- package/dist/runtime/assets/svg/x-mark.svg +0 -3
|
@@ -1,73 +1,94 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
|
|
2
|
+
<KDrawer
|
|
3
|
+
:open="!!item"
|
|
4
|
+
:title="shown ? mediaFilename(shown.key) : ''"
|
|
5
|
+
size="lg"
|
|
6
|
+
@update:open="(value) => !value && emit('close')"
|
|
7
|
+
>
|
|
8
|
+
<div v-if="shown" class="cms-media-detail">
|
|
4
9
|
<div class="cms-media-detail-preview">
|
|
5
|
-
<img
|
|
10
|
+
<img
|
|
11
|
+
v-if="shown.type === 'image' && shown.url"
|
|
12
|
+
:src="shown.url"
|
|
13
|
+
:alt="shown.alt ?? ''"
|
|
14
|
+
/>
|
|
6
15
|
<video
|
|
7
|
-
v-else-if="
|
|
8
|
-
:src="
|
|
16
|
+
v-else-if="shown.type === 'video' && shown.url"
|
|
17
|
+
:src="shown.url"
|
|
9
18
|
controls
|
|
10
19
|
preload="metadata"
|
|
11
20
|
playsinline
|
|
12
21
|
/>
|
|
13
|
-
<
|
|
22
|
+
<KIcon v-else :name="cmsIcon(mediaIconFor(shown.type))" />
|
|
14
23
|
</div>
|
|
15
24
|
|
|
16
|
-
<
|
|
17
|
-
<template v-if="
|
|
18
|
-
<
|
|
19
|
-
:
|
|
20
|
-
|
|
25
|
+
<KStack direction="row" gap="sm" align="center" wrap>
|
|
26
|
+
<template v-if="absoluteUrl">
|
|
27
|
+
<KCopyButton
|
|
28
|
+
:value="absoluteUrl"
|
|
29
|
+
label="Copy URL"
|
|
30
|
+
copied-label="Copied"
|
|
31
|
+
show-label
|
|
21
32
|
variant="soft"
|
|
22
|
-
|
|
33
|
+
tone="neutral"
|
|
23
34
|
size="sm"
|
|
24
|
-
@click="copyUrl"
|
|
25
35
|
/>
|
|
26
|
-
<
|
|
27
|
-
:href="
|
|
36
|
+
<KButton
|
|
37
|
+
:href="shown.url ?? void 0"
|
|
28
38
|
target="_blank"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
39
|
+
label="Open"
|
|
40
|
+
:icon="cmsIcon('arrow-top-right-on-square')"
|
|
41
|
+
variant="ghost"
|
|
42
|
+
tone="neutral"
|
|
43
|
+
size="sm"
|
|
44
|
+
/>
|
|
34
45
|
</template>
|
|
35
|
-
<
|
|
46
|
+
<KButton
|
|
36
47
|
:href="downloadHref"
|
|
37
48
|
download
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
49
|
+
label="Download"
|
|
50
|
+
:icon="cmsIcon('arrow-down-tray')"
|
|
51
|
+
variant="ghost"
|
|
52
|
+
tone="neutral"
|
|
53
|
+
size="sm"
|
|
54
|
+
/>
|
|
55
|
+
</KStack>
|
|
43
56
|
|
|
44
|
-
<
|
|
45
|
-
<
|
|
46
|
-
<
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
57
|
+
<div class="cms-media-detail-facts">
|
|
58
|
+
<KDescriptionList :items="facts">
|
|
59
|
+
<template #value="{ item: fact }">
|
|
60
|
+
<span
|
|
61
|
+
class="cms-media-detail-fact"
|
|
62
|
+
:class="{ 'k-mono': fact.key === 'key' }"
|
|
63
|
+
:title="fact.value == null ? void 0 : String(fact.value)"
|
|
64
|
+
>{{ fact.value }}</span
|
|
65
|
+
>
|
|
66
|
+
</template>
|
|
67
|
+
</KDescriptionList>
|
|
68
|
+
</div>
|
|
50
69
|
|
|
51
|
-
<
|
|
52
|
-
<
|
|
53
|
-
<
|
|
70
|
+
<KStack gap="md">
|
|
71
|
+
<KFormField label="Alt text">
|
|
72
|
+
<KInput
|
|
54
73
|
v-model="alt"
|
|
55
74
|
placeholder="Describe the image for screen readers"
|
|
56
75
|
@keydown.enter.prevent="save"
|
|
57
76
|
/>
|
|
58
|
-
</
|
|
59
|
-
<
|
|
77
|
+
</KFormField>
|
|
78
|
+
<KFormField v-if="!readOnly" label="Folder">
|
|
60
79
|
<CmsMediaFolderPicker v-model="folder" :folders="folders" />
|
|
61
|
-
</
|
|
62
|
-
</
|
|
80
|
+
</KFormField>
|
|
81
|
+
</KStack>
|
|
63
82
|
|
|
64
83
|
<section class="cms-media-detail-usage">
|
|
65
84
|
<h3 class="cms-media-section-title">Used in</h3>
|
|
66
|
-
<
|
|
67
|
-
|
|
85
|
+
<div v-if="usageLoading" class="cms-media-loading">
|
|
86
|
+
<KSpinner size="sm" />
|
|
87
|
+
</div>
|
|
88
|
+
<p v-else-if="usageList === null" class="cms-media-hint">
|
|
68
89
|
Could not check where this file is used.
|
|
69
90
|
</p>
|
|
70
|
-
<p v-else-if="!usageList.length" class="cms-
|
|
91
|
+
<p v-else-if="!usageList.length" class="cms-media-hint">Not used in any entry.</p>
|
|
71
92
|
<ul v-else class="cms-media-usage-list">
|
|
72
93
|
<li v-for="(entry, index) in usageList" :key="index">
|
|
73
94
|
<NuxtLink
|
|
@@ -84,27 +105,39 @@
|
|
|
84
105
|
</div>
|
|
85
106
|
|
|
86
107
|
<template #footer>
|
|
87
|
-
<
|
|
108
|
+
<KButton
|
|
88
109
|
v-if="!readOnly"
|
|
89
110
|
label="Delete"
|
|
90
|
-
icon="trash"
|
|
111
|
+
:icon="cmsIcon('trash')"
|
|
91
112
|
variant="ghost"
|
|
92
|
-
|
|
113
|
+
tone="danger"
|
|
93
114
|
@click="item && emit('delete', item)"
|
|
94
115
|
/>
|
|
95
116
|
<span v-else />
|
|
96
|
-
<
|
|
97
|
-
<
|
|
98
|
-
<
|
|
99
|
-
</
|
|
117
|
+
<KStack direction="row" gap="sm" align="center">
|
|
118
|
+
<KButton label="Close" variant="ghost" tone="neutral" @click="emit('close')" />
|
|
119
|
+
<KButton label="Save" :loading="saving" :disabled="!dirty" @click="save" />
|
|
120
|
+
</KStack>
|
|
100
121
|
</template>
|
|
101
|
-
</
|
|
122
|
+
</KDrawer>
|
|
102
123
|
</template>
|
|
103
124
|
|
|
104
125
|
<script setup>
|
|
105
|
-
import { computed, ref, watch } from "#imports";
|
|
126
|
+
import { computed, ref, useRequestURL, watch } from "#imports";
|
|
127
|
+
import {
|
|
128
|
+
Button as KButton,
|
|
129
|
+
CopyButton as KCopyButton,
|
|
130
|
+
DescriptionList as KDescriptionList,
|
|
131
|
+
Drawer as KDrawer,
|
|
132
|
+
FormField as KFormField,
|
|
133
|
+
Icon as KIcon,
|
|
134
|
+
Input as KInput,
|
|
135
|
+
Spinner as KSpinner,
|
|
136
|
+
Stack as KStack
|
|
137
|
+
} from "@xleddyl/443-components-vue";
|
|
106
138
|
import { formatFileSize, mediaFilename, mediaIconFor } from "#nuxt-cms";
|
|
107
139
|
import { usageLink } from "../../composables/cms-media-library";
|
|
140
|
+
import { cmsIcon } from "../../utils/ui";
|
|
108
141
|
const props = defineProps({
|
|
109
142
|
item: { type: [Object, null], required: true },
|
|
110
143
|
library: { type: null, required: true },
|
|
@@ -115,16 +148,23 @@ const folders = computed(() => props.library.folders.value);
|
|
|
115
148
|
const alt = ref("");
|
|
116
149
|
const folder = ref(null);
|
|
117
150
|
const saving = ref(false);
|
|
118
|
-
const copied = ref(false);
|
|
119
151
|
const usageList = ref([]);
|
|
120
152
|
const usageLoading = ref(false);
|
|
153
|
+
const requestUrl = useRequestURL();
|
|
154
|
+
const lastItem = ref(props.item);
|
|
155
|
+
watch(
|
|
156
|
+
() => props.item,
|
|
157
|
+
(value) => {
|
|
158
|
+
if (value) lastItem.value = value;
|
|
159
|
+
}
|
|
160
|
+
);
|
|
161
|
+
const shown = computed(() => props.item ?? lastItem.value);
|
|
121
162
|
watch(
|
|
122
163
|
() => props.item?.key,
|
|
123
164
|
async (key) => {
|
|
124
165
|
if (!props.item || !key) return;
|
|
125
166
|
alt.value = props.item.alt ?? "";
|
|
126
167
|
folder.value = props.item.folder ?? null;
|
|
127
|
-
copied.value = false;
|
|
128
168
|
usageLoading.value = true;
|
|
129
169
|
const usage = await props.library.usage([key]);
|
|
130
170
|
if (props.item?.key !== key) return;
|
|
@@ -138,36 +178,34 @@ const dirty = computed(() => {
|
|
|
138
178
|
return (alt.value.trim() || null) !== (props.item.alt ?? null) || !props.readOnly && folder.value !== (props.item.folder ?? null);
|
|
139
179
|
});
|
|
140
180
|
const downloadHref = computed(
|
|
141
|
-
() =>
|
|
181
|
+
() => shown.value ? `/api/cms/admin/media/download?key=${encodeURIComponent(shown.value.key)}` : ""
|
|
182
|
+
);
|
|
183
|
+
const absoluteUrl = computed(
|
|
184
|
+
() => shown.value?.url ? new URL(shown.value.url, requestUrl.origin).toString() : null
|
|
142
185
|
);
|
|
143
186
|
const facts = computed(() => {
|
|
144
|
-
const item =
|
|
187
|
+
const item = shown.value;
|
|
145
188
|
if (!item) return [];
|
|
146
189
|
const list = [
|
|
147
|
-
{ label: "Folder", value: item.folder ?? "Library root" },
|
|
148
|
-
{ label: "Type", value: item.mime ?? item.type }
|
|
190
|
+
{ key: "folder", label: "Folder", value: item.folder ?? "Library root" },
|
|
191
|
+
{ key: "type", label: "Type", value: item.mime ?? item.type }
|
|
149
192
|
];
|
|
150
|
-
if (item.size != null)
|
|
193
|
+
if (item.size != null) {
|
|
194
|
+
list.push({ key: "size", label: "Size", value: formatFileSize(item.size) });
|
|
195
|
+
}
|
|
151
196
|
if (item.width && item.height) {
|
|
152
|
-
list.push({ label: "Dimensions", value: `${item.width} \xD7 ${item.height}` });
|
|
197
|
+
list.push({ key: "dimensions", label: "Dimensions", value: `${item.width} \xD7 ${item.height}` });
|
|
153
198
|
}
|
|
154
199
|
if (item.createdAt) {
|
|
155
|
-
list.push({
|
|
200
|
+
list.push({
|
|
201
|
+
key: "uploaded",
|
|
202
|
+
label: "Uploaded",
|
|
203
|
+
value: new Date(item.createdAt).toLocaleString()
|
|
204
|
+
});
|
|
156
205
|
}
|
|
157
|
-
list.push({ label: "Key", value: item.key
|
|
206
|
+
list.push({ key: "key", label: "Key", value: item.key });
|
|
158
207
|
return list;
|
|
159
208
|
});
|
|
160
|
-
async function copyUrl() {
|
|
161
|
-
if (!props.item?.url) return;
|
|
162
|
-
const url = new URL(props.item.url, window.location.origin).toString();
|
|
163
|
-
try {
|
|
164
|
-
await navigator.clipboard.writeText(url);
|
|
165
|
-
copied.value = true;
|
|
166
|
-
setTimeout(() => copied.value = false, 1500);
|
|
167
|
-
} catch {
|
|
168
|
-
copied.value = false;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
209
|
async function save() {
|
|
172
210
|
if (!props.item || !dirty.value || saving.value) return;
|
|
173
211
|
saving.value = true;
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
2
|
+
<KCard
|
|
3
3
|
v-if="model"
|
|
4
|
-
|
|
4
|
+
variant="outline"
|
|
5
|
+
padding="none"
|
|
6
|
+
class="cms-media-single"
|
|
5
7
|
:class="{ 'is-missing': missing }"
|
|
6
8
|
>
|
|
7
9
|
<button
|
|
8
10
|
type="button"
|
|
9
|
-
class="cms-
|
|
11
|
+
class="cms-media-single-preview"
|
|
10
12
|
aria-label="Replace media"
|
|
11
13
|
@click="openGallery"
|
|
12
14
|
>
|
|
@@ -18,59 +20,65 @@
|
|
|
18
20
|
muted
|
|
19
21
|
playsinline
|
|
20
22
|
/>
|
|
21
|
-
<
|
|
23
|
+
<KIcon v-else :name="cmsIcon(icon)" />
|
|
22
24
|
</button>
|
|
23
|
-
<div class="cms-
|
|
24
|
-
<span class="cms-
|
|
25
|
-
<
|
|
26
|
-
<
|
|
27
|
-
icon="arrow-path"
|
|
25
|
+
<div class="cms-media-single-bar">
|
|
26
|
+
<span class="cms-media-single-name" :title="model">{{ mediaFilename(model) }}</span>
|
|
27
|
+
<KStack direction="row" gap="none" align="center">
|
|
28
|
+
<KButton
|
|
29
|
+
:icon="cmsIcon('arrow-path')"
|
|
28
30
|
size="xs"
|
|
29
31
|
variant="ghost"
|
|
30
|
-
|
|
32
|
+
tone="neutral"
|
|
31
33
|
aria-label="Replace"
|
|
32
34
|
@click="openGallery"
|
|
33
35
|
/>
|
|
34
|
-
<
|
|
35
|
-
icon="trash"
|
|
36
|
+
<KButton
|
|
37
|
+
:icon="cmsIcon('trash')"
|
|
36
38
|
size="xs"
|
|
37
39
|
variant="ghost"
|
|
38
|
-
|
|
40
|
+
tone="danger"
|
|
39
41
|
aria-label="Remove"
|
|
40
42
|
@click="clear"
|
|
41
43
|
/>
|
|
42
|
-
</
|
|
44
|
+
</KStack>
|
|
43
45
|
</div>
|
|
44
|
-
</
|
|
46
|
+
</KCard>
|
|
45
47
|
|
|
46
|
-
<button v-else type="button" class="cms-
|
|
47
|
-
<
|
|
48
|
+
<button v-else type="button" class="cms-media-single-add" @click="openGallery">
|
|
49
|
+
<KIcon :name="cmsIcon('photo')" />
|
|
48
50
|
<span>Choose</span>
|
|
49
51
|
</button>
|
|
50
52
|
|
|
51
53
|
<p v-if="missing" class="cms-media-missing">
|
|
52
|
-
<
|
|
54
|
+
<KIcon :name="cmsIcon('exclamation-triangle')" />
|
|
53
55
|
<span>Not found in the media library</span>
|
|
54
56
|
</p>
|
|
55
57
|
|
|
56
|
-
<
|
|
57
|
-
<
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
</template>
|
|
66
|
-
</CmsModal>
|
|
58
|
+
<KModal v-model:open="galleryOpen" title="Media" size="lg">
|
|
59
|
+
<CmsMediaGallery
|
|
60
|
+
v-model:folder="pickerFolder"
|
|
61
|
+
selectable
|
|
62
|
+
:media-type="mediaType"
|
|
63
|
+
:accept="accept"
|
|
64
|
+
@select="onSelect"
|
|
65
|
+
/>
|
|
66
|
+
</KModal>
|
|
67
67
|
</template>
|
|
68
68
|
|
|
69
69
|
<script setup>
|
|
70
70
|
import { computed, ref, useState } from "#imports";
|
|
71
|
+
import {
|
|
72
|
+
Button as KButton,
|
|
73
|
+
Card as KCard,
|
|
74
|
+
Icon as KIcon,
|
|
75
|
+
Modal as KModal,
|
|
76
|
+
Stack as KStack
|
|
77
|
+
} from "@xleddyl/443-components-vue";
|
|
71
78
|
import { mediaFilename, mediaIconFor, mediaPublicUrl, mediaTypeForKey } from "#nuxt-cms";
|
|
72
79
|
import { useCmsMediaKeys } from "../../composables/cms-media-keys";
|
|
73
80
|
import { useCmsRuntime } from "../../composables/cms-runtime";
|
|
81
|
+
import { cmsIcon } from "../../utils/ui";
|
|
74
82
|
defineProps({
|
|
75
83
|
mediaType: { type: null, required: false },
|
|
76
84
|
accept: { type: Array, required: false }
|
|
@@ -1,64 +1,92 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="cms-folder-picker">
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
:
|
|
17
|
-
:
|
|
18
|
-
:
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
</button>
|
|
25
|
-
<button
|
|
26
|
-
v-for="folder in visible"
|
|
27
|
-
:key="folder"
|
|
28
|
-
type="button"
|
|
29
|
-
role="option"
|
|
30
|
-
class="cms-folder-picker-row"
|
|
31
|
-
:class="{ 'is-active': model === folder }"
|
|
32
|
-
:style="
|
|
33
|
-
query ? void 0 : { paddingLeft: `${0.625 + mediaFolderDepth(folder) * 1}rem` }
|
|
34
|
-
"
|
|
35
|
-
:aria-selected="model === folder"
|
|
36
|
-
:disabled="isDisabled(folder)"
|
|
37
|
-
@click="model = folder"
|
|
38
|
-
>
|
|
39
|
-
<CmsIcon :name="model === folder ? 'folder-open' : 'folder'" class="size-4" />
|
|
40
|
-
<span class="truncate">{{ query ? folder : mediaFolderName(folder) }}</span>
|
|
41
|
-
<CmsIcon v-if="model === folder" name="check" class="cms-folder-picker-check size-4" />
|
|
42
|
-
</button>
|
|
43
|
-
<p v-if="query && !visible.length" class="cms-folder-picker-empty">No matching folders</p>
|
|
2
|
+
<div class="cms-media-folder-picker">
|
|
3
|
+
<KFieldBoundary v-if="folders.length > 8" auxiliary>
|
|
4
|
+
<KInput
|
|
5
|
+
v-model="query"
|
|
6
|
+
size="sm"
|
|
7
|
+
:icon="cmsIcon('magnifying-glass')"
|
|
8
|
+
placeholder="Find a folder…"
|
|
9
|
+
aria-label="Find a folder"
|
|
10
|
+
clearable
|
|
11
|
+
/>
|
|
12
|
+
</KFieldBoundary>
|
|
13
|
+
<div class="cms-media-folder-picker-list">
|
|
14
|
+
<KTree
|
|
15
|
+
v-model:selected="selected"
|
|
16
|
+
v-model:expanded="expanded"
|
|
17
|
+
:nodes="nodes"
|
|
18
|
+
:bordered="false"
|
|
19
|
+
:label="label"
|
|
20
|
+
size="sm"
|
|
21
|
+
checkmark
|
|
22
|
+
empty-text="No matching folders"
|
|
23
|
+
/>
|
|
44
24
|
</div>
|
|
45
25
|
</div>
|
|
46
26
|
</template>
|
|
47
27
|
|
|
48
28
|
<script setup>
|
|
49
29
|
import { computed, ref } from "#imports";
|
|
50
|
-
import {
|
|
30
|
+
import {
|
|
31
|
+
FieldBoundary as KFieldBoundary,
|
|
32
|
+
Input as KInput,
|
|
33
|
+
Tree as KTree
|
|
34
|
+
} from "@xleddyl/443-components-vue";
|
|
35
|
+
import { isWithinMediaFolder, mediaFolderName, mediaFolderParent } from "#nuxt-cms";
|
|
36
|
+
import { cmsIcon } from "../../utils/ui";
|
|
37
|
+
const ROOT_ID = ":root";
|
|
51
38
|
const props = defineProps({
|
|
52
39
|
folders: { type: Array, required: true },
|
|
53
|
-
exclude: { type: [String, null], required: false }
|
|
40
|
+
exclude: { type: [String, null], required: false },
|
|
41
|
+
label: { type: String, required: false }
|
|
54
42
|
});
|
|
55
43
|
const model = defineModel({ type: [String, null], ...{ default: null } });
|
|
56
44
|
const query = ref("");
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
45
|
+
const term = computed(() => query.value.trim().toLowerCase());
|
|
46
|
+
const visible = computed(
|
|
47
|
+
() => term.value ? props.folders.filter((folder) => folder.includes(term.value)) : props.folders
|
|
48
|
+
);
|
|
61
49
|
function isDisabled(folder) {
|
|
62
|
-
return !!props.exclude &&
|
|
50
|
+
return !!props.exclude && isWithinMediaFolder(folder, props.exclude);
|
|
51
|
+
}
|
|
52
|
+
function folderNode(folder, label, children) {
|
|
53
|
+
return {
|
|
54
|
+
id: folder,
|
|
55
|
+
label,
|
|
56
|
+
icon: cmsIcon(model.value === folder ? "folder-open" : "folder"),
|
|
57
|
+
disabled: isDisabled(folder),
|
|
58
|
+
children: children?.length ? children : void 0
|
|
59
|
+
};
|
|
63
60
|
}
|
|
61
|
+
const nodes = computed(() => {
|
|
62
|
+
if (term.value) return visible.value.map((folder) => folderNode(folder, folder));
|
|
63
|
+
const build = (parent) => props.folders.filter((folder) => mediaFolderParent(folder) === parent).map((folder) => folderNode(folder, mediaFolderName(folder), build(folder)));
|
|
64
|
+
return [{ id: ROOT_ID, label: "Library root", icon: cmsIcon("home"), children: build(null) }];
|
|
65
|
+
});
|
|
66
|
+
const parentIds = computed(() => {
|
|
67
|
+
const ids = [];
|
|
68
|
+
const walk = (list) => {
|
|
69
|
+
for (const node of list) {
|
|
70
|
+
if (!node.children) continue;
|
|
71
|
+
ids.push(node.id);
|
|
72
|
+
walk(node.children);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
walk(nodes.value);
|
|
76
|
+
return ids;
|
|
77
|
+
});
|
|
78
|
+
const collapsed = ref([]);
|
|
79
|
+
const expanded = computed({
|
|
80
|
+
get: () => parentIds.value.filter((id) => !collapsed.value.includes(id)),
|
|
81
|
+
set: (ids) => {
|
|
82
|
+
collapsed.value = parentIds.value.filter((id) => !ids.includes(id));
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
const selected = computed({
|
|
86
|
+
get: () => model.value === null ? ROOT_ID : model.value,
|
|
87
|
+
set: (id) => {
|
|
88
|
+
if (id === null) return;
|
|
89
|
+
model.value = id === ROOT_ID ? null : String(id);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
64
92
|
</script>
|