@xleddyl/nuxt-cms 0.1.11 → 0.1.14
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/dist/module.json +1 -1
- package/dist/module.mjs +6 -27
- package/dist/runtime/app/components/cms/Alert.d.vue.ts +18 -0
- package/dist/runtime/app/components/cms/Alert.vue +14 -0
- package/dist/runtime/app/components/cms/Alert.vue.d.ts +18 -0
- package/dist/runtime/app/components/cms/BlocksField.vue +23 -26
- package/dist/runtime/app/components/cms/Button.d.vue.ts +25 -0
- package/dist/runtime/app/components/cms/Button.vue +33 -0
- package/dist/runtime/app/components/cms/Button.vue.d.ts +25 -0
- package/dist/runtime/app/components/cms/ConfirmModal.d.vue.ts +1 -18
- package/dist/runtime/app/components/cms/ConfirmModal.vue +21 -22
- package/dist/runtime/app/components/cms/ConfirmModal.vue.d.ts +1 -18
- package/dist/runtime/app/components/cms/DropdownMenu.d.vue.ts +29 -0
- package/dist/runtime/app/components/cms/DropdownMenu.vue +57 -0
- package/dist/runtime/app/components/cms/DropdownMenu.vue.d.ts +29 -0
- package/dist/runtime/app/components/cms/EmptyState.vue +3 -3
- package/dist/runtime/app/components/cms/EntryForm.vue +9 -22
- package/dist/runtime/app/components/cms/FieldInput.vue +23 -15
- package/dist/runtime/app/components/cms/Form.d.vue.ts +35 -0
- package/dist/runtime/app/components/cms/Form.vue +42 -0
- package/dist/runtime/app/components/cms/Form.vue.d.ts +35 -0
- package/dist/runtime/app/components/cms/FormField.d.vue.ts +21 -0
- package/dist/runtime/app/components/cms/FormField.vue +22 -0
- package/dist/runtime/app/components/cms/FormField.vue.d.ts +21 -0
- package/dist/runtime/app/components/cms/Icon.d.vue.ts +6 -0
- package/dist/runtime/app/components/cms/Icon.vue +18 -0
- package/dist/runtime/app/components/cms/Icon.vue.d.ts +6 -0
- package/dist/runtime/app/components/cms/Input.d.vue.ts +28 -0
- package/dist/runtime/app/components/cms/Input.vue +43 -0
- package/dist/runtime/app/components/cms/Input.vue.d.ts +28 -0
- package/dist/runtime/app/components/cms/JsonField.vue +3 -6
- package/dist/runtime/app/components/cms/MediaField.vue +15 -16
- package/dist/runtime/app/components/cms/MediaGallery.vue +57 -54
- package/dist/runtime/app/components/cms/MediaUpload.vue +10 -9
- package/dist/runtime/app/components/cms/Modal.d.vue.ts +34 -0
- package/dist/runtime/app/components/cms/Modal.vue +54 -0
- package/dist/runtime/app/components/cms/Modal.vue.d.ts +34 -0
- package/dist/runtime/app/components/cms/PageHeader.vue +1 -1
- package/dist/runtime/app/components/cms/Pagination.d.vue.ts +15 -0
- package/dist/runtime/app/components/cms/Pagination.vue +51 -0
- package/dist/runtime/app/components/cms/Pagination.vue.d.ts +15 -0
- package/dist/runtime/app/components/cms/Popover.d.vue.ts +22 -0
- package/dist/runtime/app/components/cms/Popover.vue +27 -0
- package/dist/runtime/app/components/cms/Popover.vue.d.ts +22 -0
- package/dist/runtime/app/components/cms/RelationField.vue +6 -6
- package/dist/runtime/app/components/cms/RichTextField.vue +38 -39
- package/dist/runtime/app/components/cms/SelectMenu.d.vue.ts +26 -0
- package/dist/runtime/app/components/cms/SelectMenu.vue +139 -0
- package/dist/runtime/app/components/cms/SelectMenu.vue.d.ts +26 -0
- package/dist/runtime/app/components/cms/SlugField.vue +4 -4
- package/dist/runtime/app/components/cms/Switch.d.vue.ts +10 -0
- package/dist/runtime/app/components/cms/Switch.vue +14 -0
- package/dist/runtime/app/components/cms/Switch.vue.d.ts +10 -0
- package/dist/runtime/app/components/cms/Table.d.vue.ts +48 -0
- package/dist/runtime/app/components/cms/Table.vue +47 -0
- package/dist/runtime/app/components/cms/Table.vue.d.ts +48 -0
- package/dist/runtime/app/components/cms/Textarea.d.vue.ts +16 -0
- package/dist/runtime/app/components/cms/Textarea.vue +17 -0
- package/dist/runtime/app/components/cms/Textarea.vue.d.ts +16 -0
- package/dist/runtime/app/components/cms/Toaster.d.vue.ts +3 -0
- package/dist/runtime/app/components/cms/Toaster.vue +42 -0
- package/dist/runtime/app/components/cms/Toaster.vue.d.ts +3 -0
- package/dist/runtime/app/components/cms/TranslatableField.vue +5 -5
- package/dist/runtime/app/composables/cms-confirm.d.ts +8 -0
- package/dist/runtime/app/composables/cms-confirm.js +14 -5
- package/dist/runtime/app/composables/cms-toast.d.ts +13 -0
- package/dist/runtime/app/composables/cms-toast.js +18 -0
- package/dist/runtime/app/layouts/cms-admin.vue +21 -21
- package/dist/runtime/app/middleware/cms-auth.d.ts +1 -1
- package/dist/runtime/app/pages/admin-collection.vue +40 -53
- package/dist/runtime/app/pages/admin-entry.vue +15 -19
- package/dist/runtime/app/pages/admin-login.vue +16 -24
- package/dist/runtime/app/pages/admin-media.vue +2 -3
- package/dist/runtime/app/utils/ui.d.ts +4 -0
- package/dist/runtime/app/utils/ui.js +3 -2
- package/dist/runtime/assets/main.css +1 -1
- package/dist/runtime/assets/svg/academic-cap.svg +3 -0
- package/dist/runtime/assets/svg/adjustments-horizontal.svg +3 -0
- package/dist/runtime/assets/svg/adjustments-vertical.svg +3 -0
- package/dist/runtime/assets/svg/archive-box-arrow-down.svg +3 -0
- package/dist/runtime/assets/svg/archive-box-x-mark.svg +3 -0
- package/dist/runtime/assets/svg/archive-box.svg +3 -0
- package/dist/runtime/assets/svg/arrow-down-circle.svg +3 -0
- package/dist/runtime/assets/svg/arrow-down-left.svg +3 -0
- package/dist/runtime/assets/svg/arrow-down-on-square-stack.svg +3 -0
- package/dist/runtime/assets/svg/arrow-down-on-square.svg +3 -0
- package/dist/runtime/assets/svg/arrow-down-right.svg +3 -0
- package/dist/runtime/assets/svg/arrow-down-tray.svg +3 -0
- package/dist/runtime/assets/svg/arrow-down.svg +3 -0
- package/dist/runtime/assets/svg/arrow-left-circle.svg +3 -0
- package/dist/runtime/assets/svg/arrow-left-end-on-rectangle.svg +3 -0
- package/dist/runtime/assets/svg/arrow-left-on-rectangle.svg +3 -0
- package/dist/runtime/assets/svg/arrow-left-start-on-rectangle.svg +3 -0
- package/dist/runtime/assets/svg/arrow-left.svg +3 -0
- package/dist/runtime/assets/svg/arrow-long-down.svg +3 -0
- package/dist/runtime/assets/svg/arrow-long-left.svg +3 -0
- package/dist/runtime/assets/svg/arrow-long-right.svg +3 -0
- package/dist/runtime/assets/svg/arrow-long-up.svg +3 -0
- package/dist/runtime/assets/svg/arrow-path-rounded-square.svg +3 -0
- package/dist/runtime/assets/svg/arrow-path.svg +3 -0
- package/dist/runtime/assets/svg/arrow-right-circle.svg +3 -0
- package/dist/runtime/assets/svg/arrow-right-end-on-rectangle.svg +3 -0
- package/dist/runtime/assets/svg/arrow-right-on-rectangle.svg +3 -0
- package/dist/runtime/assets/svg/arrow-right-start-on-rectangle.svg +3 -0
- package/dist/runtime/assets/svg/arrow-right.svg +3 -0
- package/dist/runtime/assets/svg/arrow-small-down.svg +3 -0
- package/dist/runtime/assets/svg/arrow-small-left.svg +3 -0
- package/dist/runtime/assets/svg/arrow-small-right.svg +3 -0
- package/dist/runtime/assets/svg/arrow-small-up.svg +3 -0
- package/dist/runtime/assets/svg/arrow-top-right-on-square.svg +3 -0
- package/dist/runtime/assets/svg/arrow-trending-down.svg +3 -0
- package/dist/runtime/assets/svg/arrow-trending-up.svg +3 -0
- package/dist/runtime/assets/svg/arrow-turn-down-left.svg +3 -0
- package/dist/runtime/assets/svg/arrow-turn-down-right.svg +3 -0
- package/dist/runtime/assets/svg/arrow-turn-left-down.svg +3 -0
- package/dist/runtime/assets/svg/arrow-turn-left-up.svg +3 -0
- package/dist/runtime/assets/svg/arrow-turn-right-down.svg +3 -0
- package/dist/runtime/assets/svg/arrow-turn-right-up.svg +3 -0
- package/dist/runtime/assets/svg/arrow-turn-up-left.svg +3 -0
- package/dist/runtime/assets/svg/arrow-turn-up-right.svg +3 -0
- package/dist/runtime/assets/svg/arrow-up-circle.svg +3 -0
- package/dist/runtime/assets/svg/arrow-up-left.svg +3 -0
- package/dist/runtime/assets/svg/arrow-up-on-square-stack.svg +3 -0
- package/dist/runtime/assets/svg/arrow-up-on-square.svg +3 -0
- package/dist/runtime/assets/svg/arrow-up-right.svg +3 -0
- package/dist/runtime/assets/svg/arrow-up-tray.svg +3 -0
- package/dist/runtime/assets/svg/arrow-up.svg +3 -0
- package/dist/runtime/assets/svg/arrow-uturn-down.svg +3 -0
- package/dist/runtime/assets/svg/arrow-uturn-left.svg +3 -0
- package/dist/runtime/assets/svg/arrow-uturn-right.svg +3 -0
- package/dist/runtime/assets/svg/arrow-uturn-up.svg +3 -0
- package/dist/runtime/assets/svg/arrows-pointing-in.svg +3 -0
- package/dist/runtime/assets/svg/arrows-pointing-out.svg +3 -0
- package/dist/runtime/assets/svg/arrows-right-left.svg +3 -0
- package/dist/runtime/assets/svg/arrows-up-down.svg +3 -0
- package/dist/runtime/assets/svg/at-symbol.svg +3 -0
- package/dist/runtime/assets/svg/backspace.svg +3 -0
- package/dist/runtime/assets/svg/backward.svg +3 -0
- package/dist/runtime/assets/svg/banknotes.svg +3 -0
- package/dist/runtime/assets/svg/bars-2.svg +3 -0
- package/dist/runtime/assets/svg/bars-3-bottom-left.svg +3 -0
- package/dist/runtime/assets/svg/bars-3-bottom-right.svg +3 -0
- package/dist/runtime/assets/svg/bars-3-center-left.svg +3 -0
- package/dist/runtime/assets/svg/bars-3.svg +3 -0
- package/dist/runtime/assets/svg/bars-4.svg +3 -0
- package/dist/runtime/assets/svg/bars-arrow-down.svg +3 -0
- package/dist/runtime/assets/svg/bars-arrow-up.svg +3 -0
- package/dist/runtime/assets/svg/battery-0.svg +3 -0
- package/dist/runtime/assets/svg/battery-100.svg +3 -0
- package/dist/runtime/assets/svg/battery-50.svg +3 -0
- package/dist/runtime/assets/svg/beaker.svg +3 -0
- package/dist/runtime/assets/svg/bell-alert.svg +3 -0
- package/dist/runtime/assets/svg/bell-slash.svg +3 -0
- package/dist/runtime/assets/svg/bell-snooze.svg +3 -0
- package/dist/runtime/assets/svg/bell.svg +3 -0
- package/dist/runtime/assets/svg/bold.svg +3 -0
- package/dist/runtime/assets/svg/bolt-slash.svg +3 -0
- package/dist/runtime/assets/svg/bolt.svg +3 -0
- package/dist/runtime/assets/svg/book-open.svg +3 -0
- package/dist/runtime/assets/svg/bookmark-slash.svg +3 -0
- package/dist/runtime/assets/svg/bookmark-square.svg +3 -0
- package/dist/runtime/assets/svg/bookmark.svg +3 -0
- package/dist/runtime/assets/svg/briefcase.svg +3 -0
- package/dist/runtime/assets/svg/bug-ant.svg +3 -0
- package/dist/runtime/assets/svg/building-library.svg +3 -0
- package/dist/runtime/assets/svg/building-office-2.svg +3 -0
- package/dist/runtime/assets/svg/building-office.svg +3 -0
- package/dist/runtime/assets/svg/building-storefront.svg +3 -0
- package/dist/runtime/assets/svg/cake.svg +3 -0
- package/dist/runtime/assets/svg/calculator.svg +3 -0
- package/dist/runtime/assets/svg/calendar-date-range.svg +3 -0
- package/dist/runtime/assets/svg/calendar-days.svg +3 -0
- package/dist/runtime/assets/svg/calendar.svg +3 -0
- package/dist/runtime/assets/svg/camera.svg +4 -0
- package/dist/runtime/assets/svg/chart-bar-square.svg +3 -0
- package/dist/runtime/assets/svg/chart-bar.svg +3 -0
- package/dist/runtime/assets/svg/chart-pie.svg +4 -0
- package/dist/runtime/assets/svg/chat-bubble-bottom-center-text.svg +3 -0
- package/dist/runtime/assets/svg/chat-bubble-bottom-center.svg +3 -0
- package/dist/runtime/assets/svg/chat-bubble-left-ellipsis.svg +3 -0
- package/dist/runtime/assets/svg/chat-bubble-left-right.svg +3 -0
- package/dist/runtime/assets/svg/chat-bubble-left.svg +3 -0
- package/dist/runtime/assets/svg/chat-bubble-oval-left-ellipsis.svg +3 -0
- package/dist/runtime/assets/svg/chat-bubble-oval-left.svg +3 -0
- package/dist/runtime/assets/svg/check-badge.svg +3 -0
- package/dist/runtime/assets/svg/check-circle.svg +3 -0
- package/dist/runtime/assets/svg/check.svg +3 -0
- package/dist/runtime/assets/svg/chevron-double-down.svg +3 -0
- package/dist/runtime/assets/svg/chevron-double-left.svg +3 -0
- package/dist/runtime/assets/svg/chevron-double-right.svg +3 -0
- package/dist/runtime/assets/svg/chevron-double-up.svg +4 -0
- package/dist/runtime/assets/svg/chevron-down.svg +3 -0
- package/dist/runtime/assets/svg/chevron-left.svg +3 -0
- package/dist/runtime/assets/svg/chevron-right.svg +3 -0
- package/dist/runtime/assets/svg/chevron-up-down.svg +3 -0
- package/dist/runtime/assets/svg/chevron-up.svg +3 -0
- package/dist/runtime/assets/svg/circle-stack.svg +3 -0
- package/dist/runtime/assets/svg/clipboard-document-check.svg +3 -0
- package/dist/runtime/assets/svg/clipboard-document-list.svg +3 -0
- package/dist/runtime/assets/svg/clipboard-document.svg +3 -0
- package/dist/runtime/assets/svg/clipboard.svg +3 -0
- package/dist/runtime/assets/svg/clock.svg +3 -0
- package/dist/runtime/assets/svg/cloud-arrow-down.svg +3 -0
- package/dist/runtime/assets/svg/cloud-arrow-up.svg +3 -0
- package/dist/runtime/assets/svg/cloud.svg +3 -0
- package/dist/runtime/assets/svg/code-bracket-square.svg +3 -0
- package/dist/runtime/assets/svg/code-bracket.svg +3 -0
- package/dist/runtime/assets/svg/cog-6-tooth.svg +4 -0
- package/dist/runtime/assets/svg/cog-8-tooth.svg +4 -0
- package/dist/runtime/assets/svg/cog.svg +3 -0
- package/dist/runtime/assets/svg/command-line.svg +3 -0
- package/dist/runtime/assets/svg/computer-desktop.svg +3 -0
- package/dist/runtime/assets/svg/cpu-chip.svg +3 -0
- package/dist/runtime/assets/svg/credit-card.svg +3 -0
- package/dist/runtime/assets/svg/cube-transparent.svg +3 -0
- package/dist/runtime/assets/svg/cube.svg +3 -0
- package/dist/runtime/assets/svg/currency-bangladeshi.svg +3 -0
- package/dist/runtime/assets/svg/currency-dollar.svg +3 -0
- package/dist/runtime/assets/svg/currency-euro.svg +3 -0
- package/dist/runtime/assets/svg/currency-pound.svg +3 -0
- package/dist/runtime/assets/svg/currency-rupee.svg +3 -0
- package/dist/runtime/assets/svg/currency-yen.svg +3 -0
- package/dist/runtime/assets/svg/cursor-arrow-rays.svg +3 -0
- package/dist/runtime/assets/svg/cursor-arrow-ripple.svg +3 -0
- package/dist/runtime/assets/svg/device-phone-mobile.svg +3 -0
- package/dist/runtime/assets/svg/device-tablet.svg +3 -0
- package/dist/runtime/assets/svg/divide.svg +3 -0
- package/dist/runtime/assets/svg/document-arrow-down.svg +3 -0
- package/dist/runtime/assets/svg/document-arrow-up.svg +3 -0
- package/dist/runtime/assets/svg/document-chart-bar.svg +3 -0
- package/dist/runtime/assets/svg/document-check.svg +3 -0
- package/dist/runtime/assets/svg/document-currency-bangladeshi.svg +3 -0
- package/dist/runtime/assets/svg/document-currency-dollar.svg +3 -0
- package/dist/runtime/assets/svg/document-currency-euro.svg +3 -0
- package/dist/runtime/assets/svg/document-currency-pound.svg +3 -0
- package/dist/runtime/assets/svg/document-currency-rupee.svg +3 -0
- package/dist/runtime/assets/svg/document-currency-yen.svg +3 -0
- package/dist/runtime/assets/svg/document-duplicate.svg +3 -0
- package/dist/runtime/assets/svg/document-magnifying-glass.svg +3 -0
- package/dist/runtime/assets/svg/document-minus.svg +3 -0
- package/dist/runtime/assets/svg/document-plus.svg +3 -0
- package/dist/runtime/assets/svg/document-text.svg +3 -0
- package/dist/runtime/assets/svg/document.svg +3 -0
- package/dist/runtime/assets/svg/ellipsis-horizontal-circle.svg +3 -0
- package/dist/runtime/assets/svg/ellipsis-horizontal.svg +3 -0
- package/dist/runtime/assets/svg/ellipsis-vertical.svg +3 -0
- package/dist/runtime/assets/svg/envelope-open.svg +3 -0
- package/dist/runtime/assets/svg/envelope.svg +3 -0
- package/dist/runtime/assets/svg/equals.svg +3 -0
- package/dist/runtime/assets/svg/exclamation-circle.svg +3 -0
- package/dist/runtime/assets/svg/exclamation-triangle.svg +3 -0
- package/dist/runtime/assets/svg/eye-dropper.svg +3 -0
- package/dist/runtime/assets/svg/eye-slash.svg +3 -0
- package/dist/runtime/assets/svg/eye.svg +4 -0
- package/dist/runtime/assets/svg/face-frown.svg +3 -0
- package/dist/runtime/assets/svg/face-smile.svg +3 -0
- package/dist/runtime/assets/svg/film.svg +3 -0
- package/dist/runtime/assets/svg/finger-print.svg +3 -0
- package/dist/runtime/assets/svg/fire.svg +4 -0
- package/dist/runtime/assets/svg/flag.svg +3 -0
- package/dist/runtime/assets/svg/folder-arrow-down.svg +3 -0
- package/dist/runtime/assets/svg/folder-minus.svg +3 -0
- package/dist/runtime/assets/svg/folder-open.svg +3 -0
- package/dist/runtime/assets/svg/folder-plus.svg +3 -0
- package/dist/runtime/assets/svg/folder.svg +3 -0
- package/dist/runtime/assets/svg/forward.svg +3 -0
- package/dist/runtime/assets/svg/funnel.svg +3 -0
- package/dist/runtime/assets/svg/gif.svg +3 -0
- package/dist/runtime/assets/svg/gift-top.svg +3 -0
- package/dist/runtime/assets/svg/gift.svg +3 -0
- package/dist/runtime/assets/svg/globe-alt.svg +3 -0
- package/dist/runtime/assets/svg/globe-americas.svg +3 -0
- package/dist/runtime/assets/svg/globe-asia-australia.svg +3 -0
- package/dist/runtime/assets/svg/globe-europe-africa.svg +3 -0
- package/dist/runtime/assets/svg/h1.svg +3 -0
- package/dist/runtime/assets/svg/h2.svg +3 -0
- package/dist/runtime/assets/svg/h3.svg +3 -0
- package/dist/runtime/assets/svg/hand-raised.svg +3 -0
- package/dist/runtime/assets/svg/hand-thumb-down.svg +3 -0
- package/dist/runtime/assets/svg/hand-thumb-up.svg +3 -0
- package/dist/runtime/assets/svg/hashtag.svg +3 -0
- package/dist/runtime/assets/svg/heart.svg +3 -0
- package/dist/runtime/assets/svg/home-modern.svg +3 -0
- package/dist/runtime/assets/svg/home.svg +3 -0
- package/dist/runtime/assets/svg/identification.svg +3 -0
- package/dist/runtime/assets/svg/inbox-arrow-down.svg +3 -0
- package/dist/runtime/assets/svg/inbox-stack.svg +3 -0
- package/dist/runtime/assets/svg/inbox.svg +3 -0
- package/dist/runtime/assets/svg/information-circle.svg +3 -0
- package/dist/runtime/assets/svg/italic.svg +3 -0
- package/dist/runtime/assets/svg/key.svg +3 -0
- package/dist/runtime/assets/svg/language.svg +3 -0
- package/dist/runtime/assets/svg/lifebuoy.svg +3 -0
- package/dist/runtime/assets/svg/light-bulb.svg +3 -0
- package/dist/runtime/assets/svg/link-slash.svg +3 -0
- package/dist/runtime/assets/svg/link.svg +3 -0
- package/dist/runtime/assets/svg/list-bullet.svg +3 -0
- package/dist/runtime/assets/svg/lock-closed.svg +3 -0
- package/dist/runtime/assets/svg/lock-open.svg +3 -0
- package/dist/runtime/assets/svg/magnifying-glass-circle.svg +3 -0
- package/dist/runtime/assets/svg/magnifying-glass-minus.svg +3 -0
- package/dist/runtime/assets/svg/magnifying-glass-plus.svg +3 -0
- package/dist/runtime/assets/svg/magnifying-glass.svg +3 -0
- package/dist/runtime/assets/svg/map-pin.svg +4 -0
- package/dist/runtime/assets/svg/map.svg +3 -0
- package/dist/runtime/assets/svg/megaphone.svg +3 -0
- package/dist/runtime/assets/svg/microphone.svg +3 -0
- package/dist/runtime/assets/svg/minus-circle.svg +3 -0
- package/dist/runtime/assets/svg/minus-small.svg +3 -0
- package/dist/runtime/assets/svg/minus.svg +3 -0
- package/dist/runtime/assets/svg/moon.svg +3 -0
- package/dist/runtime/assets/svg/musical-note.svg +3 -0
- package/dist/runtime/assets/svg/newspaper.svg +3 -0
- package/dist/runtime/assets/svg/no-symbol.svg +3 -0
- package/dist/runtime/assets/svg/numbered-list.svg +3 -0
- package/dist/runtime/assets/svg/paint-brush.svg +3 -0
- package/dist/runtime/assets/svg/paper-airplane.svg +3 -0
- package/dist/runtime/assets/svg/paper-clip.svg +3 -0
- package/dist/runtime/assets/svg/pause-circle.svg +3 -0
- package/dist/runtime/assets/svg/pause.svg +3 -0
- package/dist/runtime/assets/svg/pencil-square.svg +3 -0
- package/dist/runtime/assets/svg/pencil.svg +3 -0
- package/dist/runtime/assets/svg/percent-badge.svg +3 -0
- package/dist/runtime/assets/svg/phone-arrow-down-left.svg +3 -0
- package/dist/runtime/assets/svg/phone-arrow-up-right.svg +3 -0
- package/dist/runtime/assets/svg/phone-x-mark.svg +3 -0
- package/dist/runtime/assets/svg/phone.svg +3 -0
- package/dist/runtime/assets/svg/photo.svg +3 -0
- package/dist/runtime/assets/svg/play-circle.svg +4 -0
- package/dist/runtime/assets/svg/play-pause.svg +3 -0
- package/dist/runtime/assets/svg/play.svg +3 -0
- package/dist/runtime/assets/svg/plus-circle.svg +3 -0
- package/dist/runtime/assets/svg/plus-small.svg +3 -0
- package/dist/runtime/assets/svg/plus.svg +3 -0
- package/dist/runtime/assets/svg/power.svg +3 -0
- package/dist/runtime/assets/svg/presentation-chart-bar.svg +3 -0
- package/dist/runtime/assets/svg/presentation-chart-line.svg +3 -0
- package/dist/runtime/assets/svg/printer.svg +3 -0
- package/dist/runtime/assets/svg/puzzle-piece.svg +3 -0
- package/dist/runtime/assets/svg/qr-code.svg +4 -0
- package/dist/runtime/assets/svg/question-mark-circle.svg +3 -0
- package/dist/runtime/assets/svg/queue-list.svg +3 -0
- package/dist/runtime/assets/svg/radio.svg +3 -0
- package/dist/runtime/assets/svg/receipt-percent.svg +3 -0
- package/dist/runtime/assets/svg/receipt-refund.svg +3 -0
- package/dist/runtime/assets/svg/rectangle-group.svg +3 -0
- package/dist/runtime/assets/svg/rectangle-stack.svg +3 -0
- package/dist/runtime/assets/svg/rocket-launch.svg +3 -0
- package/dist/runtime/assets/svg/rss.svg +3 -0
- package/dist/runtime/assets/svg/scale.svg +3 -0
- package/dist/runtime/assets/svg/scissors.svg +3 -0
- package/dist/runtime/assets/svg/server-stack.svg +3 -0
- package/dist/runtime/assets/svg/server.svg +3 -0
- package/dist/runtime/assets/svg/share.svg +3 -0
- package/dist/runtime/assets/svg/shield-check.svg +3 -0
- package/dist/runtime/assets/svg/shield-exclamation.svg +3 -0
- package/dist/runtime/assets/svg/shopping-bag.svg +3 -0
- package/dist/runtime/assets/svg/shopping-cart.svg +3 -0
- package/dist/runtime/assets/svg/signal-slash.svg +3 -0
- package/dist/runtime/assets/svg/signal.svg +3 -0
- package/dist/runtime/assets/svg/slash.svg +3 -0
- package/dist/runtime/assets/svg/sparkles.svg +3 -0
- package/dist/runtime/assets/svg/speaker-wave.svg +3 -0
- package/dist/runtime/assets/svg/speaker-x-mark.svg +3 -0
- package/dist/runtime/assets/svg/square-2-stack.svg +3 -0
- package/dist/runtime/assets/svg/square-3-stack-3d.svg +3 -0
- package/dist/runtime/assets/svg/squares-2x2.svg +3 -0
- package/dist/runtime/assets/svg/squares-plus.svg +3 -0
- package/dist/runtime/assets/svg/star.svg +3 -0
- package/dist/runtime/assets/svg/stop-circle.svg +4 -0
- package/dist/runtime/assets/svg/stop.svg +3 -0
- package/dist/runtime/assets/svg/strikethrough.svg +3 -0
- package/dist/runtime/assets/svg/sun.svg +3 -0
- package/dist/runtime/assets/svg/swatch.svg +3 -0
- package/dist/runtime/assets/svg/table-cells.svg +3 -0
- package/dist/runtime/assets/svg/tag.svg +4 -0
- package/dist/runtime/assets/svg/ticket.svg +3 -0
- package/dist/runtime/assets/svg/trash.svg +3 -0
- package/dist/runtime/assets/svg/trophy.svg +3 -0
- package/dist/runtime/assets/svg/truck.svg +3 -0
- package/dist/runtime/assets/svg/tv.svg +3 -0
- package/dist/runtime/assets/svg/underline.svg +3 -0
- package/dist/runtime/assets/svg/user-circle.svg +3 -0
- package/dist/runtime/assets/svg/user-group.svg +3 -0
- package/dist/runtime/assets/svg/user-minus.svg +3 -0
- package/dist/runtime/assets/svg/user-plus.svg +3 -0
- package/dist/runtime/assets/svg/user.svg +3 -0
- package/dist/runtime/assets/svg/users.svg +3 -0
- package/dist/runtime/assets/svg/variable.svg +3 -0
- package/dist/runtime/assets/svg/video-camera-slash.svg +3 -0
- package/dist/runtime/assets/svg/video-camera.svg +3 -0
- package/dist/runtime/assets/svg/view-columns.svg +3 -0
- package/dist/runtime/assets/svg/viewfinder-circle.svg +3 -0
- package/dist/runtime/assets/svg/wallet.svg +3 -0
- package/dist/runtime/assets/svg/wifi.svg +3 -0
- package/dist/runtime/assets/svg/window.svg +3 -0
- package/dist/runtime/assets/svg/wrench-screwdriver.svg +3 -0
- package/dist/runtime/assets/svg/wrench.svg +4 -0
- package/dist/runtime/assets/svg/x-circle.svg +3 -0
- package/dist/runtime/assets/svg/x-mark.svg +3 -0
- package/dist/runtime/shared/index.js +1 -1
- package/package.json +4 -3
- package/dist/runtime/app/i18n/en.json +0 -123
- package/dist/runtime/app/i18n/it.json +0 -123
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<CmsEmptyState
|
|
3
3
|
v-if="notConfigured"
|
|
4
|
-
icon="
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
icon="bolt"
|
|
5
|
+
title="Media storage not configured"
|
|
6
|
+
body="Set cms.media in nuxt.config to enable uploads."
|
|
7
7
|
/>
|
|
8
8
|
|
|
9
9
|
<div v-else class="flex flex-col gap-5">
|
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
:class="{ 'is-active': filter === f }"
|
|
25
25
|
@click="filter = f"
|
|
26
26
|
>
|
|
27
|
-
{{
|
|
27
|
+
{{ filterLabels[f] }}
|
|
28
28
|
</button>
|
|
29
29
|
<template v-if="folders.length">
|
|
30
|
-
<span class="
|
|
30
|
+
<span class="mx-1 h-4 w-px bg-(--cms-line)" />
|
|
31
31
|
<button
|
|
32
32
|
v-for="f in folders"
|
|
33
33
|
:key="f"
|
|
@@ -36,13 +36,13 @@
|
|
|
36
36
|
:class="{ 'is-active': folder === f }"
|
|
37
37
|
@click="folder = folder === f ? null : f"
|
|
38
38
|
>
|
|
39
|
-
<
|
|
39
|
+
<CmsIcon name="folder" class="mr-1 size-3" />{{ f }}
|
|
40
40
|
</button>
|
|
41
41
|
</template>
|
|
42
42
|
</div>
|
|
43
43
|
|
|
44
44
|
<div v-if="loading" class="flex justify-center py-10">
|
|
45
|
-
<
|
|
45
|
+
<CmsIcon name="arrow-path" class="size-6 animate-spin text-(--ui-text-dimmed)" />
|
|
46
46
|
</div>
|
|
47
47
|
|
|
48
48
|
<div
|
|
@@ -59,11 +59,11 @@
|
|
|
59
59
|
:type="selectable ? 'button' : void 0"
|
|
60
60
|
class="cms-card group overflow-hidden text-left"
|
|
61
61
|
:class="{
|
|
62
|
-
'hover:border-(--cms-
|
|
62
|
+
'hover:border-(--cms-line-strong)': selectable
|
|
63
63
|
}"
|
|
64
64
|
@click="selectable && emit('select', { key: item.key, url: item.url })"
|
|
65
65
|
>
|
|
66
|
-
<div class="
|
|
66
|
+
<div class="relative flex aspect-square items-center justify-center bg-(--cms-field)">
|
|
67
67
|
<img
|
|
68
68
|
v-if="item.type === 'image' && item.url"
|
|
69
69
|
:src="item.url"
|
|
@@ -79,46 +79,46 @@
|
|
|
79
79
|
playsinline
|
|
80
80
|
class="absolute inset-0 size-full object-cover"
|
|
81
81
|
/>
|
|
82
|
-
<
|
|
82
|
+
<CmsIcon
|
|
83
83
|
v-else
|
|
84
84
|
:name="mediaIconFor(item.type)"
|
|
85
|
-
class="text-(--ui-text-dimmed)
|
|
85
|
+
class="size-8 text-(--ui-text-dimmed)"
|
|
86
86
|
/>
|
|
87
87
|
<div
|
|
88
88
|
v-if="!selectable"
|
|
89
|
-
class="absolute
|
|
89
|
+
class="absolute top-2 right-2 flex gap-1 opacity-0 transition-opacity group-hover:opacity-100 focus-within:opacity-100"
|
|
90
90
|
>
|
|
91
|
-
<
|
|
92
|
-
icon="
|
|
91
|
+
<CmsButton
|
|
92
|
+
icon="pencil-square"
|
|
93
93
|
size="xs"
|
|
94
94
|
color="neutral"
|
|
95
95
|
variant="solid"
|
|
96
|
-
class="rounded-full
|
|
97
|
-
|
|
96
|
+
class="rounded-full"
|
|
97
|
+
aria-label="Edit details"
|
|
98
98
|
@click="openEdit(item)"
|
|
99
99
|
/>
|
|
100
|
-
<
|
|
101
|
-
icon="
|
|
100
|
+
<CmsButton
|
|
101
|
+
icon="document-duplicate"
|
|
102
102
|
size="xs"
|
|
103
103
|
color="neutral"
|
|
104
104
|
variant="solid"
|
|
105
|
-
class="rounded-full
|
|
106
|
-
|
|
105
|
+
class="rounded-full"
|
|
106
|
+
aria-label="Copy URL"
|
|
107
107
|
@click="copy(item)"
|
|
108
108
|
/>
|
|
109
|
-
<
|
|
110
|
-
icon="
|
|
109
|
+
<CmsButton
|
|
110
|
+
icon="trash"
|
|
111
111
|
size="xs"
|
|
112
112
|
color="error"
|
|
113
113
|
variant="solid"
|
|
114
|
-
class="rounded-full
|
|
115
|
-
|
|
114
|
+
class="rounded-full"
|
|
115
|
+
aria-label="Delete"
|
|
116
116
|
@click="remove(item)"
|
|
117
117
|
/>
|
|
118
118
|
</div>
|
|
119
119
|
</div>
|
|
120
120
|
<div class="flex flex-col gap-1 px-3.5 py-2.5">
|
|
121
|
-
<div class="truncate text-
|
|
121
|
+
<div class="truncate text-sm font-medium" :title="item.key">
|
|
122
122
|
{{ mediaFilename(item.key) }}
|
|
123
123
|
</div>
|
|
124
124
|
<div class="cms-kicker">
|
|
@@ -131,14 +131,10 @@
|
|
|
131
131
|
</component>
|
|
132
132
|
</div>
|
|
133
133
|
|
|
134
|
-
<CmsEmptyState
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
>
|
|
139
|
-
<UButton
|
|
140
|
-
:label="t('cms.media.retry')"
|
|
141
|
-
icon="i-lucide-refresh-cw"
|
|
134
|
+
<CmsEmptyState v-else-if="loadError" icon="exclamation-triangle" title="Could not load media">
|
|
135
|
+
<CmsButton
|
|
136
|
+
label="Retry"
|
|
137
|
+
icon="arrow-path"
|
|
142
138
|
variant="subtle"
|
|
143
139
|
class="mt-3 rounded-full px-4"
|
|
144
140
|
@click="reload"
|
|
@@ -147,12 +143,12 @@
|
|
|
147
143
|
|
|
148
144
|
<CmsEmptyState
|
|
149
145
|
v-else
|
|
150
|
-
icon="
|
|
151
|
-
|
|
152
|
-
|
|
146
|
+
icon="photo"
|
|
147
|
+
title="No media yet"
|
|
148
|
+
body="Files you upload will show up here."
|
|
153
149
|
/>
|
|
154
150
|
|
|
155
|
-
<
|
|
151
|
+
<CmsModal
|
|
156
152
|
:open="!!editing"
|
|
157
153
|
:title="editing ? mediaFilename(editing.key) : ''"
|
|
158
154
|
:ui="CMS_MODAL_UI"
|
|
@@ -164,15 +160,15 @@
|
|
|
164
160
|
>
|
|
165
161
|
<template #body>
|
|
166
162
|
<div class="flex flex-col gap-4">
|
|
167
|
-
<
|
|
168
|
-
<
|
|
169
|
-
</
|
|
170
|
-
<
|
|
171
|
-
<
|
|
172
|
-
</
|
|
163
|
+
<CmsFormField label="Alt text">
|
|
164
|
+
<CmsInput v-model="editAlt" size="lg" class="w-full" />
|
|
165
|
+
</CmsFormField>
|
|
166
|
+
<CmsFormField label="Folder">
|
|
167
|
+
<CmsInput v-model="editFolder" size="lg" class="w-full" />
|
|
168
|
+
</CmsFormField>
|
|
173
169
|
<div class="flex justify-end">
|
|
174
|
-
<
|
|
175
|
-
|
|
170
|
+
<CmsButton
|
|
171
|
+
label="Save"
|
|
176
172
|
:loading="editSaving"
|
|
177
173
|
class="rounded-full px-6"
|
|
178
174
|
@click="saveEdit"
|
|
@@ -180,23 +176,29 @@
|
|
|
180
176
|
</div>
|
|
181
177
|
</div>
|
|
182
178
|
</template>
|
|
183
|
-
</
|
|
179
|
+
</CmsModal>
|
|
184
180
|
</div>
|
|
185
181
|
</template>
|
|
186
182
|
|
|
187
183
|
<script setup>
|
|
188
|
-
import { computed, onMounted, ref
|
|
184
|
+
import { computed, onMounted, ref } from "#imports";
|
|
189
185
|
import { MEDIA_TYPES, mediaFilename, mediaIconFor } from "#nuxt-cms";
|
|
190
186
|
import { useCmsConfirm } from "../../composables/cms-confirm";
|
|
187
|
+
import { useCmsToast } from "../../composables/cms-toast";
|
|
191
188
|
import { CMS_MODAL_UI, errorMessage } from "../../utils/ui";
|
|
189
|
+
const filterLabels = {
|
|
190
|
+
all: "All",
|
|
191
|
+
image: "Images",
|
|
192
|
+
video: "Videos",
|
|
193
|
+
file: "Files"
|
|
194
|
+
};
|
|
192
195
|
const props = defineProps({
|
|
193
196
|
selectable: { type: Boolean, required: false },
|
|
194
197
|
mediaType: { type: null, required: false },
|
|
195
198
|
accept: { type: Array, required: false }
|
|
196
199
|
});
|
|
197
200
|
const emit = defineEmits(["select"]);
|
|
198
|
-
const
|
|
199
|
-
const toast = useToast();
|
|
201
|
+
const toast = useCmsToast();
|
|
200
202
|
const endpoint = "/api/cms/admin/media";
|
|
201
203
|
const items = ref([]);
|
|
202
204
|
const loading = ref(true);
|
|
@@ -264,7 +266,7 @@ async function saveEdit() {
|
|
|
264
266
|
await reload();
|
|
265
267
|
} catch (err) {
|
|
266
268
|
toast.add({
|
|
267
|
-
title:
|
|
269
|
+
title: "Save failed",
|
|
268
270
|
description: errorMessage(err),
|
|
269
271
|
color: "error"
|
|
270
272
|
});
|
|
@@ -289,23 +291,24 @@ function formatSize(bytes) {
|
|
|
289
291
|
async function copy(item) {
|
|
290
292
|
try {
|
|
291
293
|
await navigator.clipboard.writeText(item.url ?? item.key);
|
|
292
|
-
toast.add({ title:
|
|
294
|
+
toast.add({ title: "Copied", color: "success" });
|
|
293
295
|
} catch {
|
|
294
|
-
toast.add({ title:
|
|
296
|
+
toast.add({ title: "Copy failed", color: "error" });
|
|
295
297
|
}
|
|
296
298
|
}
|
|
297
299
|
const confirmAction = useCmsConfirm();
|
|
298
300
|
const removing = ref(false);
|
|
299
301
|
async function remove(item) {
|
|
300
302
|
if (removing.value) return;
|
|
301
|
-
if (!await confirmAction(
|
|
303
|
+
if (!await confirmAction("Delete this file? Entries referencing it will keep a broken link."))
|
|
304
|
+
return;
|
|
302
305
|
removing.value = true;
|
|
303
306
|
try {
|
|
304
307
|
await $fetch(endpoint, { method: "DELETE", query: { key: item.key } });
|
|
305
308
|
await reload();
|
|
306
309
|
} catch (err) {
|
|
307
310
|
toast.add({
|
|
308
|
-
title:
|
|
311
|
+
title: "Delete failed",
|
|
309
312
|
description: errorMessage(err),
|
|
310
313
|
color: "error"
|
|
311
314
|
});
|
|
@@ -18,21 +18,22 @@
|
|
|
18
18
|
@change="onChange"
|
|
19
19
|
@click.stop
|
|
20
20
|
/>
|
|
21
|
-
<
|
|
22
|
-
:name="uploading ? '
|
|
21
|
+
<CmsIcon
|
|
22
|
+
:name="uploading ? 'arrow-path' : 'cloud-arrow-up'"
|
|
23
23
|
class="size-5 shrink-0"
|
|
24
24
|
:class="{ 'animate-spin': uploading }"
|
|
25
25
|
/>
|
|
26
|
-
<span class="text-
|
|
26
|
+
<span class="text-sm font-medium">
|
|
27
27
|
{{
|
|
28
|
-
uploading ?
|
|
28
|
+
uploading ? `Uploading ${Math.min(done + 1, total)} of ${total}\u2026` : multiple ? "Drop files here or click to browse" : "Drop a file here or click to browse"
|
|
29
29
|
}}
|
|
30
30
|
</span>
|
|
31
31
|
</button>
|
|
32
32
|
</template>
|
|
33
33
|
|
|
34
34
|
<script setup>
|
|
35
|
-
import { computed, ref
|
|
35
|
+
import { computed, ref } from "#imports";
|
|
36
|
+
import { useCmsToast } from "../../composables/cms-toast";
|
|
36
37
|
const props = defineProps({
|
|
37
38
|
multiple: { type: Boolean, required: false },
|
|
38
39
|
mediaType: { type: null, required: false, default: "file" },
|
|
@@ -40,8 +41,7 @@ const props = defineProps({
|
|
|
40
41
|
dense: { type: Boolean, required: false }
|
|
41
42
|
});
|
|
42
43
|
const emit = defineEmits(["uploaded"]);
|
|
43
|
-
const
|
|
44
|
-
const toast = useToast();
|
|
44
|
+
const toast = useCmsToast();
|
|
45
45
|
async function imageDimensions(file) {
|
|
46
46
|
if (!file.type.startsWith("image/")) return {};
|
|
47
47
|
try {
|
|
@@ -102,7 +102,7 @@ async function handleFiles(list) {
|
|
|
102
102
|
let files = Array.from(list).filter(matchesAccept);
|
|
103
103
|
const tooLarge = files.filter((file) => file.size > MAX_FILE_SIZE);
|
|
104
104
|
for (const file of tooLarge) {
|
|
105
|
-
toast.add({ title:
|
|
105
|
+
toast.add({ title: `File too large (max 10 MB): ${file.name}`, color: "error" });
|
|
106
106
|
}
|
|
107
107
|
files = files.filter((file) => file.size <= MAX_FILE_SIZE);
|
|
108
108
|
if (!props.multiple) files = files.slice(0, 1);
|
|
@@ -114,7 +114,8 @@ async function handleFiles(list) {
|
|
|
114
114
|
const results = await Promise.allSettled(files.map(uploadOne));
|
|
115
115
|
const ok = results.filter((r) => r.status === "fulfilled").map((r) => r.value);
|
|
116
116
|
const failed = results.length - ok.length;
|
|
117
|
-
if (failed)
|
|
117
|
+
if (failed)
|
|
118
|
+
toast.add({ title: `${failed} upload${failed > 1 ? "s" : ""} failed`, color: "error" });
|
|
118
119
|
if (ok.length) emit("uploaded", ok);
|
|
119
120
|
} finally {
|
|
120
121
|
uploading.value = false;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
title?: string;
|
|
3
|
+
ui?: {
|
|
4
|
+
content?: string;
|
|
5
|
+
title?: string;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
type __VLS_ModelProps = {
|
|
9
|
+
'open'?: boolean;
|
|
10
|
+
};
|
|
11
|
+
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
12
|
+
declare var __VLS_7: {}, __VLS_9: {}, __VLS_11: {};
|
|
13
|
+
type __VLS_Slots = {} & {
|
|
14
|
+
header?: (props: typeof __VLS_7) => any;
|
|
15
|
+
} & {
|
|
16
|
+
body?: (props: typeof __VLS_9) => any;
|
|
17
|
+
} & {
|
|
18
|
+
default?: (props: typeof __VLS_11) => any;
|
|
19
|
+
};
|
|
20
|
+
declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
21
|
+
"after:leave": () => any;
|
|
22
|
+
"update:open": (value: boolean) => any;
|
|
23
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
24
|
+
"onAfter:leave"?: (() => any) | undefined;
|
|
25
|
+
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
26
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
27
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
28
|
+
declare const _default: typeof __VLS_export;
|
|
29
|
+
export default _default;
|
|
30
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
31
|
+
new (): {
|
|
32
|
+
$slots: S;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<Teleport to="body">
|
|
3
|
+
<!-- Wrapped in .cms-scope so the vendored Tailwind utilities still apply
|
|
4
|
+
once teleported outside the admin layout root. -->
|
|
5
|
+
<div v-if="open" class="cms-scope">
|
|
6
|
+
<div class="cms-overlay" @click.self="close">
|
|
7
|
+
<div class="cms-modal cms-rise" :class="ui?.content" role="dialog" aria-modal="true">
|
|
8
|
+
<div v-if="title || $slots.header" class="cms-modal-header">
|
|
9
|
+
<slot name="header">
|
|
10
|
+
<h2
|
|
11
|
+
:class="
|
|
12
|
+
ui?.title ?? 'cms-display text-xl font-medium text-(--ui-text-highlighted)'
|
|
13
|
+
"
|
|
14
|
+
>
|
|
15
|
+
{{ title }}
|
|
16
|
+
</h2>
|
|
17
|
+
</slot>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="cms-modal-body">
|
|
20
|
+
<slot name="body"><slot /></slot>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
</Teleport>
|
|
26
|
+
</template>
|
|
27
|
+
|
|
28
|
+
<script setup>
|
|
29
|
+
import { onBeforeUnmount, watch } from "#imports";
|
|
30
|
+
defineProps({
|
|
31
|
+
title: { type: String, required: false },
|
|
32
|
+
ui: { type: Object, required: false }
|
|
33
|
+
});
|
|
34
|
+
const open = defineModel("open", { type: Boolean, ...{ default: false } });
|
|
35
|
+
const emit = defineEmits(["after:leave"]);
|
|
36
|
+
function close() {
|
|
37
|
+
open.value = false;
|
|
38
|
+
}
|
|
39
|
+
function onKeydown(event) {
|
|
40
|
+
if (event.key === "Escape") close();
|
|
41
|
+
}
|
|
42
|
+
watch(open, (value, previous) => {
|
|
43
|
+
if (import.meta.server) return;
|
|
44
|
+
if (value) {
|
|
45
|
+
document.addEventListener("keydown", onKeydown);
|
|
46
|
+
} else {
|
|
47
|
+
document.removeEventListener("keydown", onKeydown);
|
|
48
|
+
if (previous) emit("after:leave");
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
onBeforeUnmount(() => {
|
|
52
|
+
if (import.meta.client) document.removeEventListener("keydown", onKeydown);
|
|
53
|
+
});
|
|
54
|
+
</script>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
title?: string;
|
|
3
|
+
ui?: {
|
|
4
|
+
content?: string;
|
|
5
|
+
title?: string;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
type __VLS_ModelProps = {
|
|
9
|
+
'open'?: boolean;
|
|
10
|
+
};
|
|
11
|
+
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
12
|
+
declare var __VLS_7: {}, __VLS_9: {}, __VLS_11: {};
|
|
13
|
+
type __VLS_Slots = {} & {
|
|
14
|
+
header?: (props: typeof __VLS_7) => any;
|
|
15
|
+
} & {
|
|
16
|
+
body?: (props: typeof __VLS_9) => any;
|
|
17
|
+
} & {
|
|
18
|
+
default?: (props: typeof __VLS_11) => any;
|
|
19
|
+
};
|
|
20
|
+
declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
21
|
+
"after:leave": () => any;
|
|
22
|
+
"update:open": (value: boolean) => any;
|
|
23
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
24
|
+
"onAfter:leave"?: (() => any) | undefined;
|
|
25
|
+
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
26
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
27
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
28
|
+
declare const _default: typeof __VLS_export;
|
|
29
|
+
export default _default;
|
|
30
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
31
|
+
new (): {
|
|
32
|
+
$slots: S;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
{{ kicker }}
|
|
6
6
|
</div>
|
|
7
7
|
<div class="flex items-center gap-3">
|
|
8
|
-
<h1 class="cms-display text-
|
|
8
|
+
<h1 class="cms-display text-[32px]/none font-medium text-(--ui-text-highlighted)">
|
|
9
9
|
{{ title }}
|
|
10
10
|
</h1>
|
|
11
11
|
<slot name="badge" />
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
total: number;
|
|
3
|
+
itemsPerPage: number;
|
|
4
|
+
};
|
|
5
|
+
type __VLS_ModelProps = {
|
|
6
|
+
'page'?: number;
|
|
7
|
+
};
|
|
8
|
+
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
9
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
10
|
+
"update:page": (value: number) => any;
|
|
11
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
12
|
+
"onUpdate:page"?: ((value: number) => any) | undefined;
|
|
13
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
14
|
+
declare const _default: typeof __VLS_export;
|
|
15
|
+
export default _default;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="cms-pagination">
|
|
3
|
+
<button
|
|
4
|
+
type="button"
|
|
5
|
+
class="cms-page-btn"
|
|
6
|
+
:disabled="page <= 1"
|
|
7
|
+
aria-label="Previous page"
|
|
8
|
+
@click="go(page - 1)"
|
|
9
|
+
>
|
|
10
|
+
<CmsIcon name="chevron-left" class="size-4" />
|
|
11
|
+
</button>
|
|
12
|
+
<button
|
|
13
|
+
v-for="p in pages"
|
|
14
|
+
:key="p"
|
|
15
|
+
type="button"
|
|
16
|
+
class="cms-page-btn"
|
|
17
|
+
:class="{ 'is-active': p === page }"
|
|
18
|
+
@click="go(p)"
|
|
19
|
+
>
|
|
20
|
+
{{ p }}
|
|
21
|
+
</button>
|
|
22
|
+
<button
|
|
23
|
+
type="button"
|
|
24
|
+
class="cms-page-btn"
|
|
25
|
+
:disabled="page >= pageCount"
|
|
26
|
+
aria-label="Next page"
|
|
27
|
+
@click="go(page + 1)"
|
|
28
|
+
>
|
|
29
|
+
<CmsIcon name="chevron-right" class="size-4" />
|
|
30
|
+
</button>
|
|
31
|
+
</div>
|
|
32
|
+
</template>
|
|
33
|
+
|
|
34
|
+
<script setup>
|
|
35
|
+
import { computed } from "#imports";
|
|
36
|
+
const props = defineProps({
|
|
37
|
+
total: { type: Number, required: true },
|
|
38
|
+
itemsPerPage: { type: Number, required: true }
|
|
39
|
+
});
|
|
40
|
+
const page = defineModel("page", { type: Number, ...{ default: 1 } });
|
|
41
|
+
const pageCount = computed(() => Math.max(1, Math.ceil(props.total / props.itemsPerPage)));
|
|
42
|
+
const pages = computed(() => {
|
|
43
|
+
const count = pageCount.value;
|
|
44
|
+
if (count <= 7) return Array.from({ length: count }, (_, index) => index + 1);
|
|
45
|
+
const start = Math.min(Math.max(page.value - 3, 1), count - 6);
|
|
46
|
+
return Array.from({ length: 7 }, (_, index) => start + index);
|
|
47
|
+
});
|
|
48
|
+
function go(target) {
|
|
49
|
+
if (target >= 1 && target <= pageCount.value) page.value = target;
|
|
50
|
+
}
|
|
51
|
+
</script>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
total: number;
|
|
3
|
+
itemsPerPage: number;
|
|
4
|
+
};
|
|
5
|
+
type __VLS_ModelProps = {
|
|
6
|
+
'page'?: number;
|
|
7
|
+
};
|
|
8
|
+
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
9
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
10
|
+
"update:page": (value: number) => any;
|
|
11
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
12
|
+
"onUpdate:page"?: ((value: number) => any) | undefined;
|
|
13
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
14
|
+
declare const _default: typeof __VLS_export;
|
|
15
|
+
export default _default;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
type __VLS_ModelProps = {
|
|
2
|
+
'open'?: boolean;
|
|
3
|
+
};
|
|
4
|
+
declare var __VLS_1: {}, __VLS_3: {};
|
|
5
|
+
type __VLS_Slots = {} & {
|
|
6
|
+
default?: (props: typeof __VLS_1) => any;
|
|
7
|
+
} & {
|
|
8
|
+
content?: (props: typeof __VLS_3) => any;
|
|
9
|
+
};
|
|
10
|
+
declare const __VLS_base: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
11
|
+
"update:open": (value: boolean) => any;
|
|
12
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
13
|
+
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
14
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
15
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
16
|
+
declare const _default: typeof __VLS_export;
|
|
17
|
+
export default _default;
|
|
18
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
19
|
+
new (): {
|
|
20
|
+
$slots: S;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div ref="root" class="relative inline-flex">
|
|
3
|
+
<div class="contents" @click="open = !open">
|
|
4
|
+
<slot />
|
|
5
|
+
</div>
|
|
6
|
+
<div v-if="open" class="cms-popover">
|
|
7
|
+
<slot name="content" />
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
10
|
+
</template>
|
|
11
|
+
|
|
12
|
+
<script setup>
|
|
13
|
+
import { onBeforeUnmount, ref, watch } from "#imports";
|
|
14
|
+
const open = defineModel("open", { type: Boolean, ...{ default: false } });
|
|
15
|
+
const root = ref(null);
|
|
16
|
+
function onOutside(event) {
|
|
17
|
+
if (root.value && !root.value.contains(event.target)) open.value = false;
|
|
18
|
+
}
|
|
19
|
+
watch(open, (value) => {
|
|
20
|
+
if (import.meta.server) return;
|
|
21
|
+
if (value) document.addEventListener("click", onOutside, true);
|
|
22
|
+
else document.removeEventListener("click", onOutside, true);
|
|
23
|
+
});
|
|
24
|
+
onBeforeUnmount(() => {
|
|
25
|
+
if (import.meta.client) document.removeEventListener("click", onOutside, true);
|
|
26
|
+
});
|
|
27
|
+
</script>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
type __VLS_ModelProps = {
|
|
2
|
+
'open'?: boolean;
|
|
3
|
+
};
|
|
4
|
+
declare var __VLS_1: {}, __VLS_3: {};
|
|
5
|
+
type __VLS_Slots = {} & {
|
|
6
|
+
default?: (props: typeof __VLS_1) => any;
|
|
7
|
+
} & {
|
|
8
|
+
content?: (props: typeof __VLS_3) => any;
|
|
9
|
+
};
|
|
10
|
+
declare const __VLS_base: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
11
|
+
"update:open": (value: boolean) => any;
|
|
12
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
13
|
+
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
14
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
15
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
16
|
+
declare const _default: typeof __VLS_export;
|
|
17
|
+
export default _default;
|
|
18
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
19
|
+
new (): {
|
|
20
|
+
$slots: S;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
2
|
+
<CmsSelectMenu
|
|
3
3
|
v-if="multiple"
|
|
4
4
|
v-model="many"
|
|
5
5
|
v-model:search-term="searchTerm"
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
size="lg"
|
|
12
12
|
class="w-full"
|
|
13
13
|
/>
|
|
14
|
-
<
|
|
14
|
+
<CmsSelectMenu
|
|
15
15
|
v-else
|
|
16
16
|
v-model="single"
|
|
17
17
|
v-model:search-term="searchTerm"
|
|
@@ -26,9 +26,10 @@
|
|
|
26
26
|
|
|
27
27
|
<script setup>
|
|
28
28
|
import { isTranslatableField } from "#nuxt-cms";
|
|
29
|
-
import { computed, onMounted, ref,
|
|
29
|
+
import { computed, onMounted, ref, watch } from "#imports";
|
|
30
30
|
import cmsConfig from "#cms-config";
|
|
31
31
|
import { useCmsRuntime } from "../../composables/cms-runtime";
|
|
32
|
+
import { useCmsToast } from "../../composables/cms-toast";
|
|
32
33
|
import { errorMessage } from "../../utils/ui";
|
|
33
34
|
const props = defineProps({
|
|
34
35
|
to: { type: String, required: true },
|
|
@@ -36,8 +37,7 @@ const props = defineProps({
|
|
|
36
37
|
multiple: { type: Boolean, required: false }
|
|
37
38
|
});
|
|
38
39
|
const model = defineModel({ type: [String, Array, null], ...{ required: true } });
|
|
39
|
-
const
|
|
40
|
-
const toast = useToast();
|
|
40
|
+
const toast = useCmsToast();
|
|
41
41
|
const target = cmsConfig[props.to];
|
|
42
42
|
const endpoint = `/api/cms/admin/${props.to}`;
|
|
43
43
|
const fetched = ref([]);
|
|
@@ -54,7 +54,7 @@ async function fetchOptions() {
|
|
|
54
54
|
fetched.value = page.items;
|
|
55
55
|
} catch (err) {
|
|
56
56
|
toast.add({
|
|
57
|
-
title:
|
|
57
|
+
title: "Loading failed",
|
|
58
58
|
description: errorMessage(err),
|
|
59
59
|
color: "error"
|
|
60
60
|
});
|