@nuxt/ui 4.2.1 → 4.3.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/.nuxt/ui.css +2 -0
- package/README.md +2 -1
- package/dist/module.json +1 -1
- package/dist/module.mjs +2 -2
- package/dist/runtime/components/Accordion.d.vue.ts +3 -3
- package/dist/runtime/components/Accordion.vue.d.ts +3 -3
- package/dist/runtime/components/Alert.d.vue.ts +3 -5
- package/dist/runtime/components/Alert.vue.d.ts +3 -5
- package/dist/runtime/components/App.d.vue.ts +3 -1
- package/dist/runtime/components/App.vue.d.ts +3 -1
- package/dist/runtime/components/AuthForm.d.vue.ts +8 -46
- package/dist/runtime/components/AuthForm.vue.d.ts +8 -46
- package/dist/runtime/components/Badge.d.vue.ts +1 -3
- package/dist/runtime/components/Badge.vue.d.ts +1 -3
- package/dist/runtime/components/Banner.d.vue.ts +2 -2
- package/dist/runtime/components/Banner.vue.d.ts +2 -2
- package/dist/runtime/components/BlogPost.d.vue.ts +1 -4
- package/dist/runtime/components/BlogPost.vue +0 -1
- package/dist/runtime/components/BlogPost.vue.d.ts +1 -4
- package/dist/runtime/components/BlogPosts.d.vue.ts +3 -1
- package/dist/runtime/components/BlogPosts.vue.d.ts +3 -1
- package/dist/runtime/components/Breadcrumb.d.vue.ts +3 -1
- package/dist/runtime/components/Breadcrumb.vue.d.ts +3 -1
- package/dist/runtime/components/Calendar.d.vue.ts +8 -11
- package/dist/runtime/components/Calendar.vue.d.ts +8 -11
- package/dist/runtime/components/Carousel.d.vue.ts +6 -6
- package/dist/runtime/components/Carousel.vue +22 -0
- package/dist/runtime/components/Carousel.vue.d.ts +6 -6
- package/dist/runtime/components/ChangelogVersion.d.vue.ts +1 -4
- package/dist/runtime/components/ChangelogVersion.vue +0 -1
- package/dist/runtime/components/ChangelogVersion.vue.d.ts +1 -4
- package/dist/runtime/components/ChangelogVersions.d.vue.ts +3 -1
- package/dist/runtime/components/ChangelogVersions.vue.d.ts +3 -1
- package/dist/runtime/components/ChatMessage.d.vue.ts +1 -3
- package/dist/runtime/components/ChatMessage.vue.d.ts +1 -3
- package/dist/runtime/components/ChatMessages.d.vue.ts +3 -8
- package/dist/runtime/components/ChatMessages.vue.d.ts +3 -8
- package/dist/runtime/components/ChatPrompt.d.vue.ts +2 -7
- package/dist/runtime/components/ChatPrompt.vue.d.ts +2 -7
- package/dist/runtime/components/ChatPromptSubmit.d.vue.ts +3 -11
- package/dist/runtime/components/ChatPromptSubmit.vue +1 -20
- package/dist/runtime/components/ChatPromptSubmit.vue.d.ts +3 -11
- package/dist/runtime/components/CheckboxGroup.d.vue.ts +3 -4
- package/dist/runtime/components/CheckboxGroup.vue.d.ts +3 -4
- package/dist/runtime/components/Chip.d.vue.ts +1 -4
- package/dist/runtime/components/Chip.vue.d.ts +1 -4
- package/dist/runtime/components/Collapsible.d.vue.ts +1 -3
- package/dist/runtime/components/Collapsible.vue.d.ts +1 -3
- package/dist/runtime/components/ColorPicker.d.vue.ts +1 -5
- package/dist/runtime/components/ColorPicker.vue.d.ts +1 -5
- package/dist/runtime/components/CommandPalette.d.vue.ts +9 -14
- package/dist/runtime/components/CommandPalette.vue.d.ts +9 -14
- package/dist/runtime/components/ContextMenu.d.vue.ts +9 -5
- package/dist/runtime/components/ContextMenu.vue.d.ts +9 -5
- package/dist/runtime/components/ContextMenuContent.d.vue.ts +3 -7
- package/dist/runtime/components/ContextMenuContent.vue +2 -2
- package/dist/runtime/components/ContextMenuContent.vue.d.ts +3 -7
- package/dist/runtime/components/DashboardGroup.d.vue.ts +1 -6
- package/dist/runtime/components/DashboardGroup.vue.d.ts +1 -6
- package/dist/runtime/components/DashboardNavbar.d.vue.ts +3 -6
- package/dist/runtime/components/DashboardNavbar.vue.d.ts +3 -6
- package/dist/runtime/components/DashboardPanel.d.vue.ts +1 -4
- package/dist/runtime/components/DashboardPanel.vue.d.ts +1 -4
- package/dist/runtime/components/DashboardSearch.d.vue.ts +4 -9
- package/dist/runtime/components/DashboardSearch.vue.d.ts +4 -9
- package/dist/runtime/components/DashboardSearchButton.d.vue.ts +3 -8
- package/dist/runtime/components/DashboardSearchButton.vue +1 -20
- package/dist/runtime/components/DashboardSearchButton.vue.d.ts +3 -8
- package/dist/runtime/components/DashboardSidebar.d.vue.ts +5 -6
- package/dist/runtime/components/DashboardSidebar.vue.d.ts +5 -6
- package/dist/runtime/components/DashboardSidebarCollapse.d.vue.ts +3 -7
- package/dist/runtime/components/DashboardSidebarCollapse.vue +1 -20
- package/dist/runtime/components/DashboardSidebarCollapse.vue.d.ts +3 -7
- package/dist/runtime/components/DashboardSidebarToggle.d.vue.ts +3 -7
- package/dist/runtime/components/DashboardSidebarToggle.vue +1 -20
- package/dist/runtime/components/DashboardSidebarToggle.vue.d.ts +3 -7
- package/dist/runtime/components/Drawer.d.vue.ts +1 -8
- package/dist/runtime/components/Drawer.vue.d.ts +1 -8
- package/dist/runtime/components/DropdownMenu.d.vue.ts +9 -5
- package/dist/runtime/components/DropdownMenu.vue.d.ts +9 -5
- package/dist/runtime/components/DropdownMenuContent.d.vue.ts +3 -7
- package/dist/runtime/components/DropdownMenuContent.vue +2 -2
- package/dist/runtime/components/DropdownMenuContent.vue.d.ts +3 -7
- package/dist/runtime/components/Editor.d.vue.ts +87 -0
- package/dist/runtime/components/Editor.vue +185 -0
- package/dist/runtime/components/Editor.vue.d.ts +87 -0
- package/dist/runtime/components/EditorDragHandle.d.vue.ts +64 -0
- package/dist/runtime/components/EditorDragHandle.vue +127 -0
- package/dist/runtime/components/EditorDragHandle.vue.d.ts +64 -0
- package/dist/runtime/components/EditorEmojiMenu.d.vue.ts +35 -0
- package/dist/runtime/components/EditorEmojiMenu.vue +70 -0
- package/dist/runtime/components/EditorEmojiMenu.vue.d.ts +35 -0
- package/dist/runtime/components/EditorMentionMenu.d.vue.ts +39 -0
- package/dist/runtime/components/EditorMentionMenu.vue +72 -0
- package/dist/runtime/components/EditorMentionMenu.vue.d.ts +39 -0
- package/dist/runtime/components/EditorSuggestionMenu.d.vue.ts +52 -0
- package/dist/runtime/components/EditorSuggestionMenu.vue +80 -0
- package/dist/runtime/components/EditorSuggestionMenu.vue.d.ts +52 -0
- package/dist/runtime/components/EditorToolbar.d.vue.ts +90 -0
- package/dist/runtime/components/EditorToolbar.vue +242 -0
- package/dist/runtime/components/EditorToolbar.vue.d.ts +90 -0
- package/dist/runtime/components/Error.d.vue.ts +2 -5
- package/dist/runtime/components/Error.vue.d.ts +2 -5
- package/dist/runtime/components/FieldGroup.d.vue.ts +1 -3
- package/dist/runtime/components/FieldGroup.vue.d.ts +1 -3
- package/dist/runtime/components/FileUpload.d.vue.ts +5 -6
- package/dist/runtime/components/FileUpload.vue.d.ts +5 -6
- package/dist/runtime/components/Footer.d.vue.ts +1 -3
- package/dist/runtime/components/Footer.vue.d.ts +1 -3
- package/dist/runtime/components/FooterColumns.d.vue.ts +3 -1
- package/dist/runtime/components/FooterColumns.vue.d.ts +3 -1
- package/dist/runtime/components/Form.d.vue.ts +3 -4
- package/dist/runtime/components/Form.vue.d.ts +3 -4
- package/dist/runtime/components/FormField.d.vue.ts +5 -0
- package/dist/runtime/components/FormField.vue +6 -5
- package/dist/runtime/components/FormField.vue.d.ts +5 -0
- package/dist/runtime/components/Header.d.vue.ts +5 -5
- package/dist/runtime/components/Header.vue.d.ts +5 -5
- package/dist/runtime/components/Input.d.vue.ts +5 -7
- package/dist/runtime/components/Input.vue.d.ts +5 -7
- package/dist/runtime/components/InputDate.d.vue.ts +4 -8
- package/dist/runtime/components/InputDate.vue.d.ts +4 -8
- package/dist/runtime/components/InputMenu.d.vue.ts +9 -15
- package/dist/runtime/components/InputMenu.vue +14 -1
- package/dist/runtime/components/InputMenu.vue.d.ts +9 -15
- package/dist/runtime/components/InputNumber.d.vue.ts +7 -9
- package/dist/runtime/components/InputNumber.vue.d.ts +7 -9
- package/dist/runtime/components/InputTags.d.vue.ts +4 -10
- package/dist/runtime/components/InputTags.vue.d.ts +4 -10
- package/dist/runtime/components/InputTime.d.vue.ts +3 -5
- package/dist/runtime/components/InputTime.vue.d.ts +3 -5
- package/dist/runtime/components/Kbd.d.vue.ts +1 -3
- package/dist/runtime/components/Kbd.vue.d.ts +1 -3
- package/dist/runtime/components/Link.d.vue.ts +6 -6
- package/dist/runtime/components/Link.vue.d.ts +6 -6
- package/dist/runtime/components/LinkBase.d.vue.ts +1 -4
- package/dist/runtime/components/LinkBase.vue.d.ts +1 -4
- package/dist/runtime/components/Marquee.d.vue.ts +1 -5
- package/dist/runtime/components/Marquee.vue.d.ts +1 -5
- package/dist/runtime/components/Modal.d.vue.ts +3 -10
- package/dist/runtime/components/Modal.vue.d.ts +3 -10
- package/dist/runtime/components/NavigationMenu.d.vue.ts +3 -3
- package/dist/runtime/components/NavigationMenu.vue.d.ts +3 -3
- package/dist/runtime/components/PageAnchors.d.vue.ts +3 -1
- package/dist/runtime/components/PageAnchors.vue.d.ts +3 -1
- package/dist/runtime/components/PageAside.d.vue.ts +1 -3
- package/dist/runtime/components/PageAside.vue.d.ts +1 -3
- package/dist/runtime/components/PageCTA.d.vue.ts +1 -4
- package/dist/runtime/components/PageCTA.vue.d.ts +1 -4
- package/dist/runtime/components/PageCard.d.vue.ts +1 -3
- package/dist/runtime/components/PageCard.vue.d.ts +1 -3
- package/dist/runtime/components/PageFeature.d.vue.ts +1 -3
- package/dist/runtime/components/PageFeature.vue +2 -2
- package/dist/runtime/components/PageFeature.vue.d.ts +1 -3
- package/dist/runtime/components/PageHero.d.vue.ts +1 -3
- package/dist/runtime/components/PageHero.vue.d.ts +1 -3
- package/dist/runtime/components/PageLinks.d.vue.ts +3 -1
- package/dist/runtime/components/PageLinks.vue.d.ts +3 -1
- package/dist/runtime/components/PageList.d.vue.ts +1 -3
- package/dist/runtime/components/PageList.vue.d.ts +1 -3
- package/dist/runtime/components/PageLogos.d.vue.ts +1 -3
- package/dist/runtime/components/PageLogos.vue.d.ts +1 -3
- package/dist/runtime/components/PageSection.d.vue.ts +1 -4
- package/dist/runtime/components/PageSection.vue.d.ts +1 -4
- package/dist/runtime/components/Pagination.d.vue.ts +1 -12
- package/dist/runtime/components/Pagination.vue.d.ts +1 -12
- package/dist/runtime/components/PinInput.d.vue.ts +4 -7
- package/dist/runtime/components/PinInput.vue +1 -1
- package/dist/runtime/components/PinInput.vue.d.ts +4 -7
- package/dist/runtime/components/Popover.d.vue.ts +3 -4
- package/dist/runtime/components/Popover.vue.d.ts +3 -4
- package/dist/runtime/components/PricingPlan.d.vue.ts +1 -3
- package/dist/runtime/components/PricingPlan.vue.d.ts +1 -3
- package/dist/runtime/components/PricingPlans.d.vue.ts +3 -1
- package/dist/runtime/components/PricingPlans.vue.d.ts +3 -1
- package/dist/runtime/components/PricingTable.d.vue.ts +3 -1
- package/dist/runtime/components/PricingTable.vue.d.ts +3 -1
- package/dist/runtime/components/Progress.d.vue.ts +1 -5
- package/dist/runtime/components/Progress.vue.d.ts +1 -5
- package/dist/runtime/components/RadioGroup.d.vue.ts +3 -4
- package/dist/runtime/components/RadioGroup.vue.d.ts +3 -4
- package/dist/runtime/components/ScrollArea.d.vue.ts +81 -0
- package/dist/runtime/components/ScrollArea.vue +187 -0
- package/dist/runtime/components/ScrollArea.vue.d.ts +81 -0
- package/dist/runtime/components/Select.d.vue.ts +6 -8
- package/dist/runtime/components/Select.vue +14 -1
- package/dist/runtime/components/Select.vue.d.ts +6 -8
- package/dist/runtime/components/SelectMenu.d.vue.ts +9 -14
- package/dist/runtime/components/SelectMenu.vue +14 -1
- package/dist/runtime/components/SelectMenu.vue.d.ts +9 -14
- package/dist/runtime/components/Separator.d.vue.ts +1 -3
- package/dist/runtime/components/Separator.vue.d.ts +1 -3
- package/dist/runtime/components/Slideover.d.vue.ts +8 -11
- package/dist/runtime/components/Slideover.vue +3 -1
- package/dist/runtime/components/Slideover.vue.d.ts +8 -11
- package/dist/runtime/components/Slider.d.vue.ts +3 -4
- package/dist/runtime/components/Slider.vue +2 -2
- package/dist/runtime/components/Slider.vue.d.ts +3 -4
- package/dist/runtime/components/Stepper.d.vue.ts +3 -5
- package/dist/runtime/components/Stepper.vue.d.ts +3 -5
- package/dist/runtime/components/Table.d.vue.ts +5 -16
- package/dist/runtime/components/Table.vue +55 -33
- package/dist/runtime/components/Table.vue.d.ts +5 -16
- package/dist/runtime/components/Tabs.d.vue.ts +3 -3
- package/dist/runtime/components/Tabs.vue.d.ts +3 -3
- package/dist/runtime/components/Textarea.d.vue.ts +5 -7
- package/dist/runtime/components/Textarea.vue.d.ts +5 -7
- package/dist/runtime/components/Timeline.d.vue.ts +3 -3
- package/dist/runtime/components/Timeline.vue.d.ts +3 -3
- package/dist/runtime/components/Toast.d.vue.ts +3 -7
- package/dist/runtime/components/Toast.vue.d.ts +3 -7
- package/dist/runtime/components/Toaster.d.vue.ts +1 -7
- package/dist/runtime/components/Toaster.vue.d.ts +1 -7
- package/dist/runtime/components/Tooltip.d.vue.ts +1 -3
- package/dist/runtime/components/Tooltip.vue.d.ts +1 -3
- package/dist/runtime/components/Tree.d.vue.ts +3 -4
- package/dist/runtime/components/Tree.vue.d.ts +3 -4
- package/dist/runtime/components/User.d.vue.ts +1 -3
- package/dist/runtime/components/User.vue +0 -1
- package/dist/runtime/components/User.vue.d.ts +1 -3
- package/dist/runtime/components/color-mode/ColorModeButton.d.vue.ts +3 -6
- package/dist/runtime/components/color-mode/ColorModeButton.vue +3 -22
- package/dist/runtime/components/color-mode/ColorModeButton.vue.d.ts +3 -6
- package/dist/runtime/components/color-mode/ColorModeSelect.d.vue.ts +1 -3
- package/dist/runtime/components/color-mode/ColorModeSelect.vue +1 -0
- package/dist/runtime/components/color-mode/ColorModeSelect.vue.d.ts +1 -3
- package/dist/runtime/components/content/ContentNavigation.d.vue.ts +3 -3
- package/dist/runtime/components/content/ContentNavigation.vue.d.ts +3 -3
- package/dist/runtime/components/content/ContentSearch.d.vue.ts +6 -6
- package/dist/runtime/components/content/ContentSearch.vue.d.ts +6 -6
- package/dist/runtime/components/content/ContentSearchButton.d.vue.ts +3 -8
- package/dist/runtime/components/content/ContentSearchButton.vue +1 -20
- package/dist/runtime/components/content/ContentSearchButton.vue.d.ts +3 -8
- package/dist/runtime/components/content/ContentSurround.d.vue.ts +3 -1
- package/dist/runtime/components/content/ContentSurround.vue.d.ts +3 -1
- package/dist/runtime/components/content/ContentToc.d.vue.ts +3 -4
- package/dist/runtime/components/content/ContentToc.vue.d.ts +3 -4
- package/dist/runtime/components/locale/LocaleSelect.d.vue.ts +1 -5
- package/dist/runtime/components/locale/LocaleSelect.vue +10 -3
- package/dist/runtime/components/locale/LocaleSelect.vue.d.ts +1 -5
- package/dist/runtime/components/prose/Accordion.d.vue.ts +1 -3
- package/dist/runtime/components/prose/Accordion.vue.d.ts +1 -3
- package/dist/runtime/components/prose/Callout.vue +0 -1
- package/dist/runtime/components/prose/Card.vue +0 -1
- package/dist/runtime/components/prose/CodeGroup.d.vue.ts +1 -3
- package/dist/runtime/components/prose/CodeGroup.vue.d.ts +1 -3
- package/dist/runtime/components/prose/CodeTree.d.vue.ts +20 -1
- package/dist/runtime/components/prose/CodeTree.vue +32 -8
- package/dist/runtime/components/prose/CodeTree.vue.d.ts +20 -1
- package/dist/runtime/components/prose/Img.d.vue.ts +1 -3
- package/dist/runtime/components/prose/Img.vue.d.ts +1 -3
- package/dist/runtime/components/prose/Tabs.d.vue.ts +1 -3
- package/dist/runtime/components/prose/Tabs.vue.d.ts +1 -3
- package/dist/runtime/components/prose/callout/Caution.d.vue.ts +2 -2
- package/dist/runtime/components/prose/callout/Caution.vue.d.ts +2 -2
- package/dist/runtime/components/prose/callout/Note.d.vue.ts +2 -2
- package/dist/runtime/components/prose/callout/Note.vue.d.ts +2 -2
- package/dist/runtime/components/prose/callout/Tip.d.vue.ts +2 -2
- package/dist/runtime/components/prose/callout/Tip.vue.d.ts +2 -2
- package/dist/runtime/components/prose/callout/Warning.d.vue.ts +2 -2
- package/dist/runtime/components/prose/callout/Warning.vue.d.ts +2 -2
- package/dist/runtime/composables/defineShortcuts.d.ts +2 -1
- package/dist/runtime/composables/defineShortcuts.js +62 -15
- package/dist/runtime/composables/useEditorMenu.d.ts +64 -0
- package/dist/runtime/composables/useEditorMenu.js +448 -0
- package/dist/runtime/composables/useFileUpload.d.ts +1 -2
- package/dist/runtime/locale/en_gb.d.ts +3 -0
- package/dist/runtime/locale/en_gb.js +7 -0
- package/dist/runtime/locale/eu.d.ts +3 -0
- package/dist/runtime/locale/eu.js +129 -0
- package/dist/runtime/locale/index.d.ts +3 -0
- package/dist/runtime/locale/index.js +3 -0
- package/dist/runtime/locale/lo.d.ts +3 -0
- package/dist/runtime/locale/lo.js +129 -0
- package/dist/runtime/types/editor.d.ts +69 -0
- package/dist/runtime/types/editor.js +0 -0
- package/dist/runtime/types/index.d.ts +8 -0
- package/dist/runtime/types/index.js +8 -0
- package/dist/runtime/utils/content.d.ts +2 -2
- package/dist/runtime/utils/editor.d.ts +69 -0
- package/dist/runtime/utils/editor.js +364 -0
- package/dist/runtime/utils/locale.d.ts +1 -2
- package/dist/runtime/vue/components/color-mode/ColorModeSelect.d.vue.ts +1 -3
- package/dist/runtime/vue/components/color-mode/ColorModeSelect.vue +1 -0
- package/dist/runtime/vue/components/color-mode/ColorModeSelect.vue.d.ts +1 -3
- package/dist/runtime/{inertia/components → vue/overrides/inertia}/Link.d.vue.ts +2 -7
- package/dist/runtime/{inertia/components → vue/overrides/inertia}/Link.vue +3 -3
- package/dist/runtime/{inertia/components → vue/overrides/inertia}/Link.vue.d.ts +2 -7
- package/dist/runtime/{inertia/components → vue/overrides/inertia}/LinkBase.d.vue.ts +2 -5
- package/dist/runtime/{inertia/components → vue/overrides/inertia}/LinkBase.vue.d.ts +2 -5
- package/dist/runtime/vue/overrides/none/Link.d.vue.ts +71 -0
- package/dist/runtime/vue/overrides/none/Link.vue +122 -0
- package/dist/runtime/vue/overrides/none/Link.vue.d.ts +71 -0
- package/dist/runtime/vue/{components → overrides/vue-router}/Link.d.vue.ts +2 -7
- package/dist/runtime/vue/{components → overrides/vue-router}/Link.vue +4 -4
- package/dist/runtime/vue/{components → overrides/vue-router}/Link.vue.d.ts +2 -7
- package/dist/runtime/vue/{stubs.d.ts → stubs/base.d.ts} +4 -5
- package/dist/runtime/vue/{stubs.js → stubs/base.js} +4 -5
- package/dist/runtime/vue/stubs/inertia.d.ts +5 -0
- package/dist/runtime/vue/stubs/inertia.js +10 -0
- package/dist/runtime/vue/stubs/none.d.ts +56 -0
- package/dist/runtime/vue/stubs/none.js +48 -0
- package/dist/runtime/vue/stubs/vue-router.d.ts +2 -0
- package/dist/runtime/vue/stubs/vue-router.js +2 -0
- package/dist/shared/{ui.B77q-Dvh.mjs → ui.DegC4tw1.mjs} +282 -60
- package/dist/unplugin.d.mts +14 -0
- package/dist/unplugin.mjs +73 -48
- package/dist/vite.mjs +1 -1
- package/package.json +45 -31
- package/dist/runtime/inertia/stubs.d.ts +0 -44
- package/dist/runtime/inertia/stubs.js +0 -84
- /package/dist/runtime/{inertia/components → vue/overrides/inertia}/LinkBase.vue +0 -0
|
@@ -37,27 +37,8 @@ const props = defineProps({
|
|
|
37
37
|
as: { type: null, required: false },
|
|
38
38
|
type: { type: null, required: false },
|
|
39
39
|
disabled: { type: Boolean, required: false },
|
|
40
|
-
active: { type: Boolean, required: false },
|
|
41
|
-
exact: { type: Boolean, required: false },
|
|
42
|
-
exactQuery: { type: [Boolean, String], required: false },
|
|
43
|
-
exactHash: { type: Boolean, required: false },
|
|
44
|
-
inactiveClass: { type: String, required: false },
|
|
45
|
-
to: { type: null, required: false },
|
|
46
|
-
href: { type: null, required: false },
|
|
47
|
-
external: { type: Boolean, required: false },
|
|
48
|
-
target: { type: [String, Object, null], required: false },
|
|
49
|
-
rel: { type: [String, Object, null], required: false },
|
|
50
|
-
noRel: { type: Boolean, required: false },
|
|
51
|
-
prefetchedClass: { type: String, required: false },
|
|
52
|
-
prefetch: { type: Boolean, required: false },
|
|
53
|
-
prefetchOn: { type: [String, Object], required: false },
|
|
54
|
-
noPrefetch: { type: Boolean, required: false },
|
|
55
|
-
trailingSlash: { type: String, required: false },
|
|
56
|
-
activeClass: { type: String, required: false },
|
|
57
40
|
exactActiveClass: { type: String, required: false },
|
|
58
|
-
|
|
59
|
-
viewTransition: { type: Boolean, required: false },
|
|
60
|
-
replace: { type: Boolean, required: false }
|
|
41
|
+
viewTransition: { type: Boolean, required: false }
|
|
61
42
|
});
|
|
62
43
|
const buttonProps = useForwardProps(reactiveOmit(props, "icon", "side", "class"));
|
|
63
44
|
const { t } = useLocale();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ButtonProps } from '../types';
|
|
2
|
-
export interface DashboardSidebarToggleProps extends Omit<ButtonProps, 'color' | 'variant'> {
|
|
1
|
+
import type { ButtonProps, LinkPropsKeys } from '../types';
|
|
2
|
+
export interface DashboardSidebarToggleProps extends Omit<ButtonProps, LinkPropsKeys | 'color' | 'variant'> {
|
|
3
3
|
/**
|
|
4
4
|
* @defaultValue 'neutral'
|
|
5
5
|
*/
|
|
@@ -14,10 +14,6 @@ export interface DashboardSidebarToggleProps extends Omit<ButtonProps, 'color' |
|
|
|
14
14
|
*/
|
|
15
15
|
side?: 'left' | 'right';
|
|
16
16
|
}
|
|
17
|
-
declare const __VLS_export: import("vue").DefineComponent<DashboardSidebarToggleProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<DashboardSidebarToggleProps> & Readonly<{}>, {
|
|
18
|
-
color: "error" | "info" | "primary" | "secondary" | "success" | "warning" | "neutral";
|
|
19
|
-
variant: "link" | "solid" | "outline" | "soft" | "subtle" | "ghost";
|
|
20
|
-
side: "left" | "right";
|
|
21
|
-
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
17
|
+
declare const __VLS_export: import("vue").DefineComponent<DashboardSidebarToggleProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<DashboardSidebarToggleProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
22
18
|
declare const _default: typeof __VLS_export;
|
|
23
19
|
export default _default;
|
|
@@ -71,14 +71,7 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<Drawer
|
|
|
71
71
|
onRelease?: ((open: boolean) => any) | undefined;
|
|
72
72
|
"onUpdate:activeSnapPoint"?: ((val: string | number) => any) | undefined;
|
|
73
73
|
onAnimationEnd?: ((open: boolean) => any) | undefined;
|
|
74
|
-
}>, {
|
|
75
|
-
overlay: boolean;
|
|
76
|
-
modal: boolean;
|
|
77
|
-
portal: boolean | string | HTMLElement;
|
|
78
|
-
direction: import("vaul-vue").DrawerDirection;
|
|
79
|
-
handle: boolean;
|
|
80
|
-
dismissible: boolean;
|
|
81
|
-
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, DrawerSlots>;
|
|
74
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, DrawerSlots>;
|
|
82
75
|
declare const _default: typeof __VLS_export;
|
|
83
76
|
export default _default;
|
|
84
77
|
type __VLS_WithSlots<T, S> = T & {
|
|
@@ -71,14 +71,7 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<Drawer
|
|
|
71
71
|
onRelease?: ((open: boolean) => any) | undefined;
|
|
72
72
|
"onUpdate:activeSnapPoint"?: ((val: string | number) => any) | undefined;
|
|
73
73
|
onAnimationEnd?: ((open: boolean) => any) | undefined;
|
|
74
|
-
}>, {
|
|
75
|
-
overlay: boolean;
|
|
76
|
-
modal: boolean;
|
|
77
|
-
portal: boolean | string | HTMLElement;
|
|
78
|
-
direction: import("vaul-vue").DrawerDirection;
|
|
79
|
-
handle: boolean;
|
|
80
|
-
dismissible: boolean;
|
|
81
|
-
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, DrawerSlots>;
|
|
74
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, DrawerSlots>;
|
|
82
75
|
declare const _default: typeof __VLS_export;
|
|
83
76
|
export default _default;
|
|
84
77
|
type __VLS_WithSlots<T, S> = T & {
|
|
@@ -115,8 +115,12 @@ export type DropdownMenuSlots<A extends ArrayOrNested<DropdownMenuItem> = ArrayO
|
|
|
115
115
|
index: number;
|
|
116
116
|
}) => any;
|
|
117
117
|
'item-trailing': SlotProps<T>;
|
|
118
|
-
'content-top': (props
|
|
119
|
-
|
|
118
|
+
'content-top': (props: {
|
|
119
|
+
sub: boolean;
|
|
120
|
+
}) => any;
|
|
121
|
+
'content-bottom': (props: {
|
|
122
|
+
sub: boolean;
|
|
123
|
+
}) => any;
|
|
120
124
|
} & DynamicSlots<MergeTypes<T>, 'label' | 'description', {
|
|
121
125
|
active?: boolean;
|
|
122
126
|
index: number;
|
|
@@ -126,9 +130,9 @@ export type DropdownMenuSlots<A extends ArrayOrNested<DropdownMenuItem> = ArrayO
|
|
|
126
130
|
ui: DropdownMenu['ui'];
|
|
127
131
|
}>;
|
|
128
132
|
declare const __VLS_export: <T extends ArrayOrNested<DropdownMenuItem>>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
129
|
-
props: __VLS_PrettifyLocal<DropdownMenuProps<T> & {
|
|
130
|
-
|
|
131
|
-
}
|
|
133
|
+
props: __VLS_PrettifyLocal<DropdownMenuProps<T> & __VLS_EmitsToProps<__VLS_NormalizeEmits<(evt: "update:open", payload: boolean) => void>>> & import("vue").PublicProps & (typeof globalThis extends {
|
|
134
|
+
__VLS_PROPS_FALLBACK: infer P;
|
|
135
|
+
} ? P : {});
|
|
132
136
|
expose: (exposed: {}) => void;
|
|
133
137
|
attrs: any;
|
|
134
138
|
slots: DropdownMenuSlots<T, NestedItem<T>>;
|
|
@@ -115,8 +115,12 @@ export type DropdownMenuSlots<A extends ArrayOrNested<DropdownMenuItem> = ArrayO
|
|
|
115
115
|
index: number;
|
|
116
116
|
}) => any;
|
|
117
117
|
'item-trailing': SlotProps<T>;
|
|
118
|
-
'content-top': (props
|
|
119
|
-
|
|
118
|
+
'content-top': (props: {
|
|
119
|
+
sub: boolean;
|
|
120
|
+
}) => any;
|
|
121
|
+
'content-bottom': (props: {
|
|
122
|
+
sub: boolean;
|
|
123
|
+
}) => any;
|
|
120
124
|
} & DynamicSlots<MergeTypes<T>, 'label' | 'description', {
|
|
121
125
|
active?: boolean;
|
|
122
126
|
index: number;
|
|
@@ -126,9 +130,9 @@ export type DropdownMenuSlots<A extends ArrayOrNested<DropdownMenuItem> = ArrayO
|
|
|
126
130
|
ui: DropdownMenu['ui'];
|
|
127
131
|
}>;
|
|
128
132
|
declare const __VLS_export: <T extends ArrayOrNested<DropdownMenuItem>>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
129
|
-
props: __VLS_PrettifyLocal<DropdownMenuProps<T> & {
|
|
130
|
-
|
|
131
|
-
}
|
|
133
|
+
props: __VLS_PrettifyLocal<DropdownMenuProps<T> & __VLS_EmitsToProps<__VLS_NormalizeEmits<(evt: "update:open", payload: boolean) => void>>> & import("vue").PublicProps & (typeof globalThis extends {
|
|
134
|
+
__VLS_PROPS_FALLBACK: infer P;
|
|
135
|
+
} ? P : {});
|
|
132
136
|
expose: (exposed: {}) => void;
|
|
133
137
|
attrs: any;
|
|
134
138
|
slots: DropdownMenuSlots<T, NestedItem<T>>;
|
|
@@ -39,13 +39,9 @@ type DropdownMenuContentSlots<A extends ArrayOrNested<DropdownMenuItem> = ArrayO
|
|
|
39
39
|
ui: DropdownMenu['ui'];
|
|
40
40
|
}>;
|
|
41
41
|
declare const __VLS_export: <T extends ArrayOrNested<DropdownMenuItem>>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
42
|
-
props: __VLS_PrettifyLocal<DropdownMenuContentProps<T> & {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
onFocusOutside?: ((event: import("reka-ui").FocusOutsideEvent) => any) | undefined;
|
|
46
|
-
onInteractOutside?: ((event: import("reka-ui").PointerDownOutsideEvent | import("reka-ui").FocusOutsideEvent) => any) | undefined;
|
|
47
|
-
onCloseAutoFocus?: ((event: Event) => any) | undefined;
|
|
48
|
-
}> & import("vue").PublicProps;
|
|
42
|
+
props: __VLS_PrettifyLocal<DropdownMenuContentProps<T> & __VLS_EmitsToProps<__VLS_NormalizeEmits<((evt: "escapeKeyDown", event: KeyboardEvent) => void) & ((evt: "pointerDownOutside", event: import("reka-ui").PointerDownOutsideEvent) => void) & ((evt: "focusOutside", event: import("reka-ui").FocusOutsideEvent) => void) & ((evt: "interactOutside", event: import("reka-ui").PointerDownOutsideEvent | import("reka-ui").FocusOutsideEvent) => void) & ((evt: "closeAutoFocus", event: Event) => void)>>> & import("vue").PublicProps & (typeof globalThis extends {
|
|
43
|
+
__VLS_PROPS_FALLBACK: infer P;
|
|
44
|
+
} ? P : {});
|
|
49
45
|
expose: (exposed: {}) => void;
|
|
50
46
|
attrs: any;
|
|
51
47
|
slots: DropdownMenuContentSlots<T, NestedItem<T>>;
|
|
@@ -105,7 +105,7 @@ const groups = computed(
|
|
|
105
105
|
|
|
106
106
|
<DropdownMenu.Portal v-bind="portalProps">
|
|
107
107
|
<component :is="sub ? DropdownMenu.SubContent : DropdownMenu.Content" data-slot="content" :class="ui.content({ class: [uiOverride?.content, props.class] })" v-bind="contentProps">
|
|
108
|
-
<slot name="content-top" />
|
|
108
|
+
<slot name="content-top" :sub="sub ?? false" />
|
|
109
109
|
|
|
110
110
|
<div role="presentation" data-slot="viewport" :class="ui.viewport({ class: uiOverride?.viewport })">
|
|
111
111
|
<DropdownMenu.Group v-for="(group, groupIndex) in groups" :key="`group-${groupIndex}`" data-slot="group" :class="ui.group({ class: uiOverride?.group })">
|
|
@@ -179,7 +179,7 @@ const groups = computed(
|
|
|
179
179
|
|
|
180
180
|
<slot />
|
|
181
181
|
|
|
182
|
-
<slot name="content-bottom" />
|
|
182
|
+
<slot name="content-bottom" :sub="sub ?? false" />
|
|
183
183
|
</component>
|
|
184
184
|
</DropdownMenu.Portal>
|
|
185
185
|
</template>
|
|
@@ -39,13 +39,9 @@ type DropdownMenuContentSlots<A extends ArrayOrNested<DropdownMenuItem> = ArrayO
|
|
|
39
39
|
ui: DropdownMenu['ui'];
|
|
40
40
|
}>;
|
|
41
41
|
declare const __VLS_export: <T extends ArrayOrNested<DropdownMenuItem>>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
42
|
-
props: __VLS_PrettifyLocal<DropdownMenuContentProps<T> & {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
onFocusOutside?: ((event: import("reka-ui").FocusOutsideEvent) => any) | undefined;
|
|
46
|
-
onInteractOutside?: ((event: import("reka-ui").PointerDownOutsideEvent | import("reka-ui").FocusOutsideEvent) => any) | undefined;
|
|
47
|
-
onCloseAutoFocus?: ((event: Event) => any) | undefined;
|
|
48
|
-
}> & import("vue").PublicProps;
|
|
42
|
+
props: __VLS_PrettifyLocal<DropdownMenuContentProps<T> & __VLS_EmitsToProps<__VLS_NormalizeEmits<((evt: "escapeKeyDown", event: KeyboardEvent) => void) & ((evt: "pointerDownOutside", event: import("reka-ui").PointerDownOutsideEvent) => void) & ((evt: "focusOutside", event: import("reka-ui").FocusOutsideEvent) => void) & ((evt: "interactOutside", event: import("reka-ui").PointerDownOutsideEvent | import("reka-ui").FocusOutsideEvent) => void) & ((evt: "closeAutoFocus", event: Event) => void)>>> & import("vue").PublicProps & (typeof globalThis extends {
|
|
43
|
+
__VLS_PROPS_FALLBACK: infer P;
|
|
44
|
+
} ? P : {});
|
|
49
45
|
expose: (exposed: {}) => void;
|
|
50
46
|
attrs: any;
|
|
51
47
|
slots: DropdownMenuContentSlots<T, NestedItem<T>>;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { AppConfig } from '@nuxt/schema';
|
|
2
|
+
import type { Editor as TiptapEditor, EditorOptions, Content } from '@tiptap/vue-3';
|
|
3
|
+
import type { StarterKitOptions } from '@tiptap/starter-kit';
|
|
4
|
+
import type { PlaceholderOptions } from '@tiptap/extension-placeholder';
|
|
5
|
+
import type { MarkdownExtensionOptions } from '@tiptap/markdown';
|
|
6
|
+
import type { ImageOptions } from '@tiptap/extension-image';
|
|
7
|
+
import type { MentionOptions } from '@tiptap/extension-mention';
|
|
8
|
+
import theme from '#build/ui/editor';
|
|
9
|
+
import type { EditorHandlers, EditorCustomHandlers } from '../types/editor';
|
|
10
|
+
import type { ComponentConfig } from '../types/tv';
|
|
11
|
+
type Editor = ComponentConfig<typeof theme, AppConfig, 'editor'>;
|
|
12
|
+
export type EditorContentType = 'json' | 'html' | 'markdown';
|
|
13
|
+
export interface EditorProps<T extends Content = Content, H extends EditorCustomHandlers = EditorCustomHandlers> extends Omit<Partial<EditorOptions>, 'content' | 'element'> {
|
|
14
|
+
/**
|
|
15
|
+
* The element or component this component should render as.
|
|
16
|
+
* @defaultValue 'div'
|
|
17
|
+
*/
|
|
18
|
+
as?: any;
|
|
19
|
+
modelValue?: T;
|
|
20
|
+
/**
|
|
21
|
+
* The content type the content is provided as.
|
|
22
|
+
* When not specified, it's automatically inferred: strings are treated as 'html', objects as 'json'.
|
|
23
|
+
*/
|
|
24
|
+
contentType?: EditorContentType;
|
|
25
|
+
/**
|
|
26
|
+
* The starter kit options to configure the editor.
|
|
27
|
+
* @defaultValue { headings: { levels: [1, 2, 3, 4] }, link: { openOnClick: false }, dropcursor: { color: 'var(--ui-primary)', width: 2 } }
|
|
28
|
+
* @see https://tiptap.dev/docs/editor/extensions/functionality/starterkit
|
|
29
|
+
*/
|
|
30
|
+
starterKit?: Partial<StarterKitOptions>;
|
|
31
|
+
/**
|
|
32
|
+
* The placeholder text to show in empty paragraphs.
|
|
33
|
+
* `{ showOnlyWhenEditable: false, showOnlyCurrent: true }`{lang="ts-type"}
|
|
34
|
+
* Can be a string or PlaceholderOptions from `@tiptap/extension-placeholder`.
|
|
35
|
+
* @see https://tiptap.dev/docs/editor/extensions/functionality/placeholder
|
|
36
|
+
*/
|
|
37
|
+
placeholder?: string | Partial<PlaceholderOptions>;
|
|
38
|
+
/**
|
|
39
|
+
* The markdown extension options to configure markdown parsing and serialization.
|
|
40
|
+
* @see https://tiptap.dev/docs/editor/extensions/functionality/markdown
|
|
41
|
+
*/
|
|
42
|
+
markdown?: Partial<MarkdownExtensionOptions>;
|
|
43
|
+
/**
|
|
44
|
+
* The image extension options to configure image handling.
|
|
45
|
+
* @see https://tiptap.dev/docs/editor/extensions/nodes/image
|
|
46
|
+
*/
|
|
47
|
+
image?: Partial<ImageOptions>;
|
|
48
|
+
/**
|
|
49
|
+
* The mention extension options to configure mention handling.
|
|
50
|
+
* @see https://tiptap.dev/docs/editor/extensions/nodes/mention
|
|
51
|
+
*/
|
|
52
|
+
mention?: Partial<MentionOptions>;
|
|
53
|
+
/**
|
|
54
|
+
* Custom item handlers to override or extend the default handlers.
|
|
55
|
+
* These handlers are provided to all child components (toolbar, suggestion menu, etc.).
|
|
56
|
+
*/
|
|
57
|
+
handlers?: H;
|
|
58
|
+
class?: any;
|
|
59
|
+
ui?: Editor['slots'];
|
|
60
|
+
}
|
|
61
|
+
export interface EditorEmits<T extends Content = Content> {
|
|
62
|
+
'update:modelValue': [value: T];
|
|
63
|
+
}
|
|
64
|
+
export interface EditorSlots<H extends EditorCustomHandlers = EditorCustomHandlers> {
|
|
65
|
+
default(props: {
|
|
66
|
+
editor: TiptapEditor;
|
|
67
|
+
handlers: EditorHandlers<H>;
|
|
68
|
+
}): any;
|
|
69
|
+
}
|
|
70
|
+
declare const __VLS_export: <T extends Content, H extends EditorCustomHandlers>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
71
|
+
props: __VLS_PrettifyLocal<EditorProps<T, H> & __VLS_EmitsToProps<__VLS_NormalizeEmits<(evt: "update:modelValue", value: T) => void>>> & import("vue").PublicProps & (typeof globalThis extends {
|
|
72
|
+
__VLS_PROPS_FALLBACK: infer P;
|
|
73
|
+
} ? P : {});
|
|
74
|
+
expose: (exposed: import("vue").ShallowUnwrapRef<{
|
|
75
|
+
editor: import("vue").ShallowRef<TiptapEditor | undefined, TiptapEditor | undefined>;
|
|
76
|
+
}>) => void;
|
|
77
|
+
attrs: any;
|
|
78
|
+
slots: EditorSlots<H>;
|
|
79
|
+
emit: (evt: "update:modelValue", value: T) => void;
|
|
80
|
+
}>) => import("vue").VNode & {
|
|
81
|
+
__ctx?: Awaited<typeof __VLS_setup>;
|
|
82
|
+
};
|
|
83
|
+
declare const _default: typeof __VLS_export;
|
|
84
|
+
export default _default;
|
|
85
|
+
type __VLS_PrettifyLocal<T> = {
|
|
86
|
+
[K in keyof T as K]: T[K];
|
|
87
|
+
} & {};
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import theme from "#build/ui/editor";
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<script setup>
|
|
6
|
+
import { computed, provide, useAttrs, watch } from "vue";
|
|
7
|
+
import { defu } from "defu";
|
|
8
|
+
import { Primitive, useForwardProps } from "reka-ui";
|
|
9
|
+
import { mergeAttributes } from "@tiptap/core";
|
|
10
|
+
import HorizontalRule from "@tiptap/extension-horizontal-rule";
|
|
11
|
+
import Image from "@tiptap/extension-image";
|
|
12
|
+
import Mention from "@tiptap/extension-mention";
|
|
13
|
+
import Placeholder from "@tiptap/extension-placeholder";
|
|
14
|
+
import { Markdown } from "@tiptap/markdown";
|
|
15
|
+
import StarterKit from "@tiptap/starter-kit";
|
|
16
|
+
import { useEditor, EditorContent } from "@tiptap/vue-3";
|
|
17
|
+
import { reactiveOmit } from "@vueuse/core";
|
|
18
|
+
import { useAppConfig } from "#imports";
|
|
19
|
+
import { createHandlers } from "../utils/editor";
|
|
20
|
+
import { tv } from "../utils/tv";
|
|
21
|
+
defineOptions({ inheritAttrs: false });
|
|
22
|
+
const props = defineProps({
|
|
23
|
+
as: { type: null, required: false },
|
|
24
|
+
modelValue: { type: null, required: false },
|
|
25
|
+
contentType: { type: String, required: false },
|
|
26
|
+
starterKit: { type: Object, required: false },
|
|
27
|
+
placeholder: { type: [String, Object], required: false },
|
|
28
|
+
markdown: { type: Object, required: false },
|
|
29
|
+
image: { type: Object, required: false },
|
|
30
|
+
mention: { type: Object, required: false },
|
|
31
|
+
handlers: { type: null, required: false },
|
|
32
|
+
class: { type: null, required: false },
|
|
33
|
+
ui: { type: null, required: false },
|
|
34
|
+
extensions: { type: Array, required: false },
|
|
35
|
+
injectCSS: { type: Boolean, required: false },
|
|
36
|
+
injectNonce: { type: null, required: false },
|
|
37
|
+
autofocus: { type: [String, Number, Boolean, null], required: false },
|
|
38
|
+
editable: { type: Boolean, required: false },
|
|
39
|
+
textDirection: { type: String, required: false },
|
|
40
|
+
editorProps: { type: Object, required: false },
|
|
41
|
+
parseOptions: { type: Object, required: false },
|
|
42
|
+
coreExtensionOptions: { type: Object, required: false },
|
|
43
|
+
enableInputRules: { type: [Array, Boolean], required: false },
|
|
44
|
+
enablePasteRules: { type: [Array, Boolean], required: false },
|
|
45
|
+
enableCoreExtensions: { type: [Boolean, Object], required: false },
|
|
46
|
+
enableContentCheck: { type: Boolean, required: false },
|
|
47
|
+
emitContentError: { type: Boolean, required: false },
|
|
48
|
+
onBeforeCreate: { type: Function, required: false },
|
|
49
|
+
onCreate: { type: Function, required: false },
|
|
50
|
+
onMount: { type: Function, required: false },
|
|
51
|
+
onUnmount: { type: Function, required: false },
|
|
52
|
+
onContentError: { type: Function, required: false },
|
|
53
|
+
onUpdate: { type: Function, required: false },
|
|
54
|
+
onSelectionUpdate: { type: Function, required: false },
|
|
55
|
+
onTransaction: { type: Function, required: false },
|
|
56
|
+
onFocus: { type: Function, required: false },
|
|
57
|
+
onBlur: { type: Function, required: false },
|
|
58
|
+
onDestroy: { type: Function, required: false },
|
|
59
|
+
onPaste: { type: Function, required: false },
|
|
60
|
+
onDrop: { type: Function, required: false },
|
|
61
|
+
onDelete: { type: Function, required: false }
|
|
62
|
+
});
|
|
63
|
+
const emits = defineEmits(["update:modelValue"]);
|
|
64
|
+
defineSlots();
|
|
65
|
+
const attrs = useAttrs();
|
|
66
|
+
const appConfig = useAppConfig();
|
|
67
|
+
const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.editor || {} })());
|
|
68
|
+
const rootProps = useForwardProps(reactiveOmit(props, "starterKit", "extensions", "editorProps", "contentType", "class", "placeholder", "markdown", "image", "mention", "handlers"));
|
|
69
|
+
const editorProps = computed(() => defu(props.editorProps, {
|
|
70
|
+
attributes: {
|
|
71
|
+
autocomplete: "off",
|
|
72
|
+
autocorrect: "off",
|
|
73
|
+
autocapitalize: "off",
|
|
74
|
+
...attrs,
|
|
75
|
+
class: ui.value.base({ class: props.ui?.base })
|
|
76
|
+
}
|
|
77
|
+
}));
|
|
78
|
+
const contentType = computed(() => props.contentType || (typeof props.modelValue === "string" ? "html" : "json"));
|
|
79
|
+
const starterKit = computed(() => defu(props.starterKit, {
|
|
80
|
+
horizontalRule: false,
|
|
81
|
+
headings: {
|
|
82
|
+
levels: [1, 2, 3, 4]
|
|
83
|
+
},
|
|
84
|
+
dropcursor: {
|
|
85
|
+
color: "var(--ui-primary)",
|
|
86
|
+
width: 2
|
|
87
|
+
},
|
|
88
|
+
link: {
|
|
89
|
+
openOnClick: false
|
|
90
|
+
}
|
|
91
|
+
}));
|
|
92
|
+
const placeholder = computed(() => defu(typeof props.placeholder === "string" ? { placeholder: props.placeholder } : props.placeholder, {
|
|
93
|
+
showOnlyWhenEditable: false,
|
|
94
|
+
showOnlyCurrent: true
|
|
95
|
+
}));
|
|
96
|
+
const markdown = computed(() => defu(props.markdown, {
|
|
97
|
+
markedOptions: {
|
|
98
|
+
gfm: true
|
|
99
|
+
}
|
|
100
|
+
}));
|
|
101
|
+
const image = computed(() => defu(props.image, {}));
|
|
102
|
+
const mention = computed(() => defu(props.mention, {
|
|
103
|
+
HTMLAttributes: {
|
|
104
|
+
class: "mention"
|
|
105
|
+
}
|
|
106
|
+
}));
|
|
107
|
+
const extensions = computed(() => [
|
|
108
|
+
contentType.value === "markdown" && Markdown.configure(markdown.value),
|
|
109
|
+
StarterKit.configure(starterKit.value),
|
|
110
|
+
HorizontalRule.extend({
|
|
111
|
+
renderHTML() {
|
|
112
|
+
return [
|
|
113
|
+
"div",
|
|
114
|
+
mergeAttributes(this.options.HTMLAttributes, { "data-type": this.name }),
|
|
115
|
+
["hr"]
|
|
116
|
+
];
|
|
117
|
+
}
|
|
118
|
+
}),
|
|
119
|
+
Image.configure(image.value),
|
|
120
|
+
props.placeholder && Placeholder.configure(placeholder.value),
|
|
121
|
+
Mention.configure(mention.value),
|
|
122
|
+
...props.extensions || []
|
|
123
|
+
].filter((extension) => !!extension));
|
|
124
|
+
const editor = useEditor({
|
|
125
|
+
...rootProps.value,
|
|
126
|
+
content: props.modelValue,
|
|
127
|
+
contentType: contentType.value,
|
|
128
|
+
extensions: extensions.value,
|
|
129
|
+
editorProps: editorProps.value,
|
|
130
|
+
onUpdate: ({ editor: editor2 }) => {
|
|
131
|
+
let value;
|
|
132
|
+
try {
|
|
133
|
+
if (contentType.value === "html") {
|
|
134
|
+
value = editor2.getHTML();
|
|
135
|
+
} else if (contentType.value === "json") {
|
|
136
|
+
value = editor2.getJSON();
|
|
137
|
+
} else if (contentType.value === "markdown") {
|
|
138
|
+
value = editor2.getMarkdown();
|
|
139
|
+
}
|
|
140
|
+
} catch (error) {
|
|
141
|
+
value = editor2.getText();
|
|
142
|
+
}
|
|
143
|
+
emits("update:modelValue", value);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
watch(() => props.modelValue, (newVal) => {
|
|
147
|
+
if (!editor.value || newVal == null) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const currentContent = contentType.value === "html" ? editor.value.getHTML() : contentType.value === "json" ? JSON.stringify(editor.value.getJSON()) : contentType.value === "markdown" ? editor.value.getMarkdown() : editor.value.getText();
|
|
151
|
+
const newContent = contentType.value === "json" && typeof newVal === "object" ? JSON.stringify(newVal) : String(newVal);
|
|
152
|
+
if (currentContent !== newContent) {
|
|
153
|
+
const currentSelection = editor.value.state.selection;
|
|
154
|
+
const currentPos = currentSelection.from;
|
|
155
|
+
editor.value.commands.setContent(newVal);
|
|
156
|
+
const newDoc = editor.value.state.doc;
|
|
157
|
+
if (currentPos <= newDoc.content.size) {
|
|
158
|
+
editor.value.commands.setTextSelection(currentPos);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
const handlers = computed(() => ({
|
|
163
|
+
...createHandlers(),
|
|
164
|
+
...props.handlers
|
|
165
|
+
}));
|
|
166
|
+
provide("editorHandlers", handlers);
|
|
167
|
+
defineExpose({
|
|
168
|
+
editor
|
|
169
|
+
});
|
|
170
|
+
</script>
|
|
171
|
+
|
|
172
|
+
<template>
|
|
173
|
+
<Primitive :as="as" data-slot="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
|
|
174
|
+
<template v-if="editor">
|
|
175
|
+
<slot :editor="editor" :handlers="handlers" />
|
|
176
|
+
|
|
177
|
+
<EditorContent
|
|
178
|
+
role="presentation"
|
|
179
|
+
:editor="editor"
|
|
180
|
+
data-slot="content"
|
|
181
|
+
:class="ui.content({ class: props.ui?.content })"
|
|
182
|
+
/>
|
|
183
|
+
</template>
|
|
184
|
+
</Primitive>
|
|
185
|
+
</template>
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { AppConfig } from '@nuxt/schema';
|
|
2
|
+
import type { Editor as TiptapEditor, EditorOptions, Content } from '@tiptap/vue-3';
|
|
3
|
+
import type { StarterKitOptions } from '@tiptap/starter-kit';
|
|
4
|
+
import type { PlaceholderOptions } from '@tiptap/extension-placeholder';
|
|
5
|
+
import type { MarkdownExtensionOptions } from '@tiptap/markdown';
|
|
6
|
+
import type { ImageOptions } from '@tiptap/extension-image';
|
|
7
|
+
import type { MentionOptions } from '@tiptap/extension-mention';
|
|
8
|
+
import theme from '#build/ui/editor';
|
|
9
|
+
import type { EditorHandlers, EditorCustomHandlers } from '../types/editor';
|
|
10
|
+
import type { ComponentConfig } from '../types/tv';
|
|
11
|
+
type Editor = ComponentConfig<typeof theme, AppConfig, 'editor'>;
|
|
12
|
+
export type EditorContentType = 'json' | 'html' | 'markdown';
|
|
13
|
+
export interface EditorProps<T extends Content = Content, H extends EditorCustomHandlers = EditorCustomHandlers> extends Omit<Partial<EditorOptions>, 'content' | 'element'> {
|
|
14
|
+
/**
|
|
15
|
+
* The element or component this component should render as.
|
|
16
|
+
* @defaultValue 'div'
|
|
17
|
+
*/
|
|
18
|
+
as?: any;
|
|
19
|
+
modelValue?: T;
|
|
20
|
+
/**
|
|
21
|
+
* The content type the content is provided as.
|
|
22
|
+
* When not specified, it's automatically inferred: strings are treated as 'html', objects as 'json'.
|
|
23
|
+
*/
|
|
24
|
+
contentType?: EditorContentType;
|
|
25
|
+
/**
|
|
26
|
+
* The starter kit options to configure the editor.
|
|
27
|
+
* @defaultValue { headings: { levels: [1, 2, 3, 4] }, link: { openOnClick: false }, dropcursor: { color: 'var(--ui-primary)', width: 2 } }
|
|
28
|
+
* @see https://tiptap.dev/docs/editor/extensions/functionality/starterkit
|
|
29
|
+
*/
|
|
30
|
+
starterKit?: Partial<StarterKitOptions>;
|
|
31
|
+
/**
|
|
32
|
+
* The placeholder text to show in empty paragraphs.
|
|
33
|
+
* `{ showOnlyWhenEditable: false, showOnlyCurrent: true }`{lang="ts-type"}
|
|
34
|
+
* Can be a string or PlaceholderOptions from `@tiptap/extension-placeholder`.
|
|
35
|
+
* @see https://tiptap.dev/docs/editor/extensions/functionality/placeholder
|
|
36
|
+
*/
|
|
37
|
+
placeholder?: string | Partial<PlaceholderOptions>;
|
|
38
|
+
/**
|
|
39
|
+
* The markdown extension options to configure markdown parsing and serialization.
|
|
40
|
+
* @see https://tiptap.dev/docs/editor/extensions/functionality/markdown
|
|
41
|
+
*/
|
|
42
|
+
markdown?: Partial<MarkdownExtensionOptions>;
|
|
43
|
+
/**
|
|
44
|
+
* The image extension options to configure image handling.
|
|
45
|
+
* @see https://tiptap.dev/docs/editor/extensions/nodes/image
|
|
46
|
+
*/
|
|
47
|
+
image?: Partial<ImageOptions>;
|
|
48
|
+
/**
|
|
49
|
+
* The mention extension options to configure mention handling.
|
|
50
|
+
* @see https://tiptap.dev/docs/editor/extensions/nodes/mention
|
|
51
|
+
*/
|
|
52
|
+
mention?: Partial<MentionOptions>;
|
|
53
|
+
/**
|
|
54
|
+
* Custom item handlers to override or extend the default handlers.
|
|
55
|
+
* These handlers are provided to all child components (toolbar, suggestion menu, etc.).
|
|
56
|
+
*/
|
|
57
|
+
handlers?: H;
|
|
58
|
+
class?: any;
|
|
59
|
+
ui?: Editor['slots'];
|
|
60
|
+
}
|
|
61
|
+
export interface EditorEmits<T extends Content = Content> {
|
|
62
|
+
'update:modelValue': [value: T];
|
|
63
|
+
}
|
|
64
|
+
export interface EditorSlots<H extends EditorCustomHandlers = EditorCustomHandlers> {
|
|
65
|
+
default(props: {
|
|
66
|
+
editor: TiptapEditor;
|
|
67
|
+
handlers: EditorHandlers<H>;
|
|
68
|
+
}): any;
|
|
69
|
+
}
|
|
70
|
+
declare const __VLS_export: <T extends Content, H extends EditorCustomHandlers>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
71
|
+
props: __VLS_PrettifyLocal<EditorProps<T, H> & __VLS_EmitsToProps<__VLS_NormalizeEmits<(evt: "update:modelValue", value: T) => void>>> & import("vue").PublicProps & (typeof globalThis extends {
|
|
72
|
+
__VLS_PROPS_FALLBACK: infer P;
|
|
73
|
+
} ? P : {});
|
|
74
|
+
expose: (exposed: import("vue").ShallowUnwrapRef<{
|
|
75
|
+
editor: import("vue").ShallowRef<TiptapEditor | undefined, TiptapEditor | undefined>;
|
|
76
|
+
}>) => void;
|
|
77
|
+
attrs: any;
|
|
78
|
+
slots: EditorSlots<H>;
|
|
79
|
+
emit: (evt: "update:modelValue", value: T) => void;
|
|
80
|
+
}>) => import("vue").VNode & {
|
|
81
|
+
__ctx?: Awaited<typeof __VLS_setup>;
|
|
82
|
+
};
|
|
83
|
+
declare const _default: typeof __VLS_export;
|
|
84
|
+
export default _default;
|
|
85
|
+
type __VLS_PrettifyLocal<T> = {
|
|
86
|
+
[K in keyof T as K]: T[K];
|
|
87
|
+
} & {};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { AppConfig } from '@nuxt/schema';
|
|
2
|
+
import type { Editor, JSONContent } from '@tiptap/vue-3';
|
|
3
|
+
import type { DragHandleProps } from '@tiptap/extension-drag-handle-vue-3';
|
|
4
|
+
import theme from '#build/ui/editor-drag-handle';
|
|
5
|
+
import type { ButtonProps, IconProps, LinkPropsKeys } from '../types';
|
|
6
|
+
import type { FloatingUIOptions } from '../types/editor';
|
|
7
|
+
import type { ComponentConfig } from '../types/tv';
|
|
8
|
+
type EditorDragHandle = ComponentConfig<typeof theme, AppConfig, 'editorDragHandle'>;
|
|
9
|
+
export interface EditorDragHandleProps extends Omit<DragHandleProps, 'editor' | 'element' | 'onNodeChange' | 'computePositionConfig' | 'class'>, Omit<ButtonProps, LinkPropsKeys | 'icon' | 'color' | 'variant'> {
|
|
10
|
+
/**
|
|
11
|
+
* @defaultValue appConfig.ui.icons.drag
|
|
12
|
+
* @IconifyIcon
|
|
13
|
+
*/
|
|
14
|
+
icon?: IconProps['name'];
|
|
15
|
+
/**
|
|
16
|
+
* @defaultValue 'neutral'
|
|
17
|
+
*/
|
|
18
|
+
color?: ButtonProps['color'];
|
|
19
|
+
/**
|
|
20
|
+
* @defaultValue 'ghost'
|
|
21
|
+
*/
|
|
22
|
+
variant?: ButtonProps['variant'];
|
|
23
|
+
/**
|
|
24
|
+
* The options for positioning the drag handle. Those are passed to Floating UI and include options for the placement, offset, flip, shift, size, autoPlacement, hide, and inline middleware.
|
|
25
|
+
* @defaultValue { strategy: 'absolute', placement: 'left-start' }
|
|
26
|
+
* @see https://floating-ui.com/docs/computePosition#options
|
|
27
|
+
*/
|
|
28
|
+
options?: FloatingUIOptions;
|
|
29
|
+
editor: Editor;
|
|
30
|
+
ui?: EditorDragHandle['slots'] & ButtonProps['ui'];
|
|
31
|
+
}
|
|
32
|
+
export interface EditorDragHandleSlots {
|
|
33
|
+
default(props: {
|
|
34
|
+
ui: EditorDragHandle['ui'];
|
|
35
|
+
onClick: () => {
|
|
36
|
+
node: JSONContent;
|
|
37
|
+
pos: number;
|
|
38
|
+
} | undefined;
|
|
39
|
+
}): any;
|
|
40
|
+
}
|
|
41
|
+
export interface EditorDragHandleEmits {
|
|
42
|
+
nodeChange: [{
|
|
43
|
+
node: JSONContent;
|
|
44
|
+
pos: number;
|
|
45
|
+
}];
|
|
46
|
+
}
|
|
47
|
+
declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<EditorDragHandleProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
48
|
+
nodeChange: (args_0: {
|
|
49
|
+
node: JSONContent;
|
|
50
|
+
pos: number;
|
|
51
|
+
}) => any;
|
|
52
|
+
}, string, import("vue").PublicProps, Readonly<EditorDragHandleProps> & Readonly<{
|
|
53
|
+
onNodeChange?: ((args_0: {
|
|
54
|
+
node: JSONContent;
|
|
55
|
+
pos: number;
|
|
56
|
+
}) => any) | undefined;
|
|
57
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, EditorDragHandleSlots>;
|
|
58
|
+
declare const _default: typeof __VLS_export;
|
|
59
|
+
export default _default;
|
|
60
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
61
|
+
new (): {
|
|
62
|
+
$slots: S;
|
|
63
|
+
};
|
|
64
|
+
};
|