@nuxt/ui 4.0.0-alpha.1 → 4.0.0-alpha.2
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/content/content-navigation.ts +2 -1
- package/.nuxt/ui/marquee.ts +1 -1
- package/.nuxt/ui/progress.ts +3 -3
- package/.nuxt/ui/prose/code-tree.ts +1 -1
- package/.nuxt/ui/tree.ts +1 -1
- package/README.md +13 -1
- package/dist/module.d.mts +6 -6
- package/dist/module.json +2 -2
- package/dist/module.mjs +8 -6
- package/dist/runtime/components/Accordion.d.vue.ts +79 -0
- package/dist/runtime/components/Accordion.vue +3 -3
- package/dist/runtime/components/Accordion.vue.d.ts +2 -2
- package/dist/runtime/components/Alert.d.vue.ts +81 -0
- package/dist/runtime/components/App.d.vue.ts +25 -0
- package/dist/runtime/components/AuthForm.d.vue.ts +128 -0
- package/dist/runtime/components/AuthForm.vue.d.ts +39 -1
- package/dist/runtime/components/Avatar.d.vue.ts +41 -0
- package/dist/runtime/components/AvatarGroup.d.vue.ts +31 -0
- package/dist/runtime/components/Badge.d.vue.ts +43 -0
- package/dist/runtime/components/Banner.d.vue.ts +72 -0
- package/dist/runtime/components/Banner.vue +1 -1
- package/dist/runtime/components/BlogPost.d.vue.ts +60 -0
- package/dist/runtime/components/BlogPosts.d.vue.ts +31 -0
- package/dist/runtime/components/Breadcrumb.d.vue.ts +67 -0
- package/dist/runtime/components/Breadcrumb.vue +1 -1
- package/dist/runtime/components/Breadcrumb.vue.d.ts +2 -2
- package/dist/runtime/components/Button.d.vue.ts +44 -0
- package/dist/runtime/components/Calendar.d.vue.ts +112 -0
- package/dist/runtime/components/Card.d.vue.ts +29 -0
- package/dist/runtime/components/Carousel.d.vue.ts +127 -0
- package/dist/runtime/components/Carousel.vue.d.ts +10 -10
- package/dist/runtime/components/ChangelogVersion.d.vue.ts +59 -0
- package/dist/runtime/components/ChangelogVersions.d.vue.ts +78 -0
- package/dist/runtime/components/ChangelogVersions.vue +2 -2
- package/dist/runtime/components/ChatMessage.d.vue.ts +67 -0
- package/dist/runtime/components/ChatMessages.d.vue.ts +83 -0
- package/dist/runtime/components/ChatMessages.vue +2 -2
- package/dist/runtime/components/ChatPalette.d.vue.ts +24 -0
- package/dist/runtime/components/ChatPrompt.d.vue.ts +61 -0
- package/dist/runtime/components/ChatPrompt.vue +2 -2
- package/dist/runtime/components/ChatPromptSubmit.d.vue.ts +100 -0
- package/dist/runtime/components/Checkbox.d.vue.ts +74 -0
- package/dist/runtime/components/CheckboxGroup.d.vue.ts +89 -0
- package/dist/runtime/components/CheckboxGroup.vue +8 -8
- package/dist/runtime/components/CheckboxGroup.vue.d.ts +17 -13
- package/dist/runtime/components/Chip.d.vue.ts +57 -0
- package/dist/runtime/components/Collapsible.d.vue.ts +35 -0
- package/dist/runtime/components/ColorPicker.d.vue.ts +48 -0
- package/dist/runtime/components/CommandPalette.d.vue.ts +193 -0
- package/dist/runtime/components/CommandPalette.vue +5 -4
- package/dist/runtime/components/CommandPalette.vue.d.ts +2 -1
- package/dist/runtime/components/Container.d.vue.ts +18 -0
- package/dist/runtime/components/ContextMenu.d.vue.ts +110 -0
- package/dist/runtime/components/ContextMenu.vue +2 -2
- package/dist/runtime/components/ContextMenu.vue.d.ts +2 -2
- package/dist/runtime/components/ContextMenuContent.d.vue.ts +50 -0
- package/dist/runtime/components/ContextMenuContent.vue +2 -2
- package/dist/runtime/components/ContextMenuContent.vue.d.ts +2 -2
- package/dist/runtime/components/DashboardGroup.d.vue.ts +24 -0
- package/dist/runtime/components/DashboardNavbar.d.vue.ts +52 -0
- package/dist/runtime/components/DashboardPanel.d.vue.ts +30 -0
- package/dist/runtime/components/DashboardResizeHandle.d.vue.ts +18 -0
- package/dist/runtime/components/DashboardSearch.d.vue.ts +91 -0
- package/dist/runtime/components/DashboardSearch.vue +2 -2
- package/dist/runtime/components/DashboardSearchButton.d.vue.ts +59 -0
- package/dist/runtime/components/DashboardSearchButton.vue +2 -2
- package/dist/runtime/components/DashboardSidebar.d.vue.ts +75 -0
- package/dist/runtime/components/DashboardSidebarCollapse.d.vue.ts +19 -0
- package/dist/runtime/components/DashboardSidebarToggle.d.vue.ts +19 -0
- package/dist/runtime/components/DashboardToolbar.d.vue.ts +25 -0
- package/dist/runtime/components/Drawer.d.vue.ts +84 -0
- package/dist/runtime/components/DropdownMenu.d.vue.ts +120 -0
- package/dist/runtime/components/DropdownMenu.vue +2 -2
- package/dist/runtime/components/DropdownMenu.vue.d.ts +2 -2
- package/dist/runtime/components/DropdownMenuContent.d.vue.ts +56 -0
- package/dist/runtime/components/DropdownMenuContent.vue +2 -2
- package/dist/runtime/components/DropdownMenuContent.vue.d.ts +2 -2
- package/dist/runtime/components/Error.d.vue.ts +47 -0
- package/dist/runtime/components/FieldGroup.d.vue.ts +34 -0
- package/dist/runtime/components/FileUpload.d.vue.ts +166 -0
- package/dist/runtime/components/FileUpload.vue +1 -0
- package/dist/runtime/components/Footer.d.vue.ts +29 -0
- package/dist/runtime/components/FooterColumns.d.vue.ts +57 -0
- package/dist/runtime/components/Form.d.vue.ts +114 -0
- package/dist/runtime/components/Form.vue +111 -52
- package/dist/runtime/components/Form.vue.d.ts +54 -11
- package/dist/runtime/components/FormField.d.vue.ts +61 -0
- package/dist/runtime/components/Header.d.vue.ts +68 -0
- package/dist/runtime/components/Icon.d.vue.ts +8 -0
- package/dist/runtime/components/Input.d.vue.ts +74 -0
- package/dist/runtime/components/Input.vue.d.ts +4 -3
- package/dist/runtime/components/InputMenu.d.vue.ts +330 -0
- package/dist/runtime/components/InputMenu.vue +1 -1
- package/dist/runtime/components/InputMenu.vue.d.ts +4 -4
- package/dist/runtime/components/InputNumber.d.vue.ts +188 -0
- package/dist/runtime/components/InputNumber.vue +2 -2
- package/dist/runtime/components/InputNumber.vue.d.ts +0 -2
- package/dist/runtime/components/InputTags.d.vue.ts +186 -0
- package/dist/runtime/components/Kbd.d.vue.ts +38 -0
- package/dist/runtime/components/Link.d.vue.ts +91 -0
- package/dist/runtime/components/LinkBase.d.vue.ts +25 -0
- package/dist/runtime/components/Main.d.vue.ts +20 -0
- package/dist/runtime/components/Marquee.d.vue.ts +32 -0
- package/dist/runtime/components/Marquee.vue +1 -1
- package/dist/runtime/components/Modal.d.vue.ts +107 -0
- package/dist/runtime/components/NavigationMenu.d.vue.ts +171 -0
- package/dist/runtime/components/NavigationMenu.vue.d.ts +2 -2
- package/dist/runtime/components/OverlayProvider.d.vue.ts +2 -0
- package/dist/runtime/components/Page.d.vue.ts +25 -0
- package/dist/runtime/components/PageAnchors.d.vue.ts +47 -0
- package/dist/runtime/components/PageAside.d.vue.ts +27 -0
- package/dist/runtime/components/PageBody.d.vue.ts +18 -0
- package/dist/runtime/components/PageCTA.d.vue.ts +56 -0
- package/dist/runtime/components/PageCard.d.vue.ts +72 -0
- package/dist/runtime/components/PageColumns.d.vue.ts +18 -0
- package/dist/runtime/components/PageFeature.d.vue.ts +44 -0
- package/dist/runtime/components/PageGrid.d.vue.ts +18 -0
- package/dist/runtime/components/PageHeader.d.vue.ts +36 -0
- package/dist/runtime/components/PageHero.d.vue.ts +53 -0
- package/dist/runtime/components/PageLinks.d.vue.ts +49 -0
- package/dist/runtime/components/PageList.d.vue.ts +21 -0
- package/dist/runtime/components/PageLogos.d.vue.ts +33 -0
- package/dist/runtime/components/PageSection.d.vue.ts +68 -0
- package/dist/runtime/components/Pagination.d.vue.ts +118 -0
- package/dist/runtime/components/PinInput.d.vue.ts +60 -0
- package/dist/runtime/components/Popover.d.vue.ts +71 -0
- package/dist/runtime/components/PricingPlan.d.vue.ts +112 -0
- package/dist/runtime/components/PricingPlans.d.vue.ts +44 -0
- package/dist/runtime/components/PricingTable.d.vue.ts +105 -0
- package/dist/runtime/components/Progress.d.vue.ts +66 -0
- package/dist/runtime/components/Progress.vue +2 -3
- package/dist/runtime/components/RadioGroup.d.vue.ts +99 -0
- package/dist/runtime/components/RadioGroup.vue +13 -11
- package/dist/runtime/components/RadioGroup.vue.d.ts +17 -13
- package/dist/runtime/components/Select.d.vue.ts +254 -0
- package/dist/runtime/components/Select.vue +3 -3
- package/dist/runtime/components/Select.vue.d.ts +5 -5
- package/dist/runtime/components/SelectMenu.d.vue.ts +303 -0
- package/dist/runtime/components/SelectMenu.vue.d.ts +4 -4
- package/dist/runtime/components/Separator.d.vue.ts +54 -0
- package/dist/runtime/components/Skeleton.d.vue.ts +17 -0
- package/dist/runtime/components/Slideover.d.vue.ts +108 -0
- package/dist/runtime/components/Slider.d.vue.ts +57 -0
- package/dist/runtime/components/Stepper.d.vue.ts +87 -0
- package/dist/runtime/components/Switch.d.vue.ts +71 -0
- package/dist/runtime/components/Table.d.vue.ts +201 -0
- package/dist/runtime/components/Table.vue.d.ts +26 -26
- package/dist/runtime/components/Tabs.d.vue.ts +99 -0
- package/dist/runtime/components/Tabs.vue +10 -3
- package/dist/runtime/components/Tabs.vue.d.ts +2 -2
- package/dist/runtime/components/Textarea.d.vue.ts +74 -0
- package/dist/runtime/components/Timeline.d.vue.ts +71 -0
- package/dist/runtime/components/Toast.d.vue.ts +165 -0
- package/dist/runtime/components/Toaster.d.vue.ts +44 -0
- package/dist/runtime/components/Tooltip.d.vue.ts +57 -0
- package/dist/runtime/components/Tree.d.vue.ts +116 -0
- package/dist/runtime/components/Tree.vue +68 -40
- package/dist/runtime/components/Tree.vue.d.ts +1 -1
- package/dist/runtime/components/User.d.vue.ts +47 -0
- package/dist/runtime/components/color-mode/ColorModeAvatar.d.vue.ts +7 -0
- package/dist/runtime/components/color-mode/ColorModeButton.d.vue.ts +23 -0
- package/dist/runtime/components/color-mode/ColorModeImage.d.vue.ts +6 -0
- package/dist/runtime/components/color-mode/ColorModeSelect.d.vue.ts +5 -0
- package/dist/runtime/components/color-mode/ColorModeSwitch.d.vue.ts +5 -0
- package/dist/runtime/components/content/ContentNavigation.d.vue.ts +102 -0
- package/dist/runtime/components/content/ContentNavigation.vue +5 -4
- package/dist/runtime/components/content/ContentNavigation.vue.d.ts +2 -2
- package/dist/runtime/components/content/ContentSearch.d.vue.ts +114 -0
- package/dist/runtime/components/content/ContentSearch.vue +2 -2
- package/dist/runtime/components/content/ContentSearchButton.d.vue.ts +59 -0
- package/dist/runtime/components/content/ContentSearchButton.vue +2 -2
- package/dist/runtime/components/content/ContentSurround.d.vue.ts +59 -0
- package/dist/runtime/components/content/ContentToc.d.vue.ts +88 -0
- package/dist/runtime/components/locale/LocaleSelect.d.vue.ts +15 -0
- package/dist/runtime/components/prose/A.d.vue.ts +15 -0
- package/dist/runtime/components/prose/Accordion.d.vue.ts +16 -0
- package/dist/runtime/components/prose/AccordionItem.d.vue.ts +15 -0
- package/dist/runtime/components/prose/Badge.d.vue.ts +13 -0
- package/dist/runtime/components/prose/Blockquote.d.vue.ts +13 -0
- package/dist/runtime/components/prose/Callout.d.vue.ts +26 -0
- package/dist/runtime/components/prose/Card.d.vue.ts +29 -0
- package/dist/runtime/components/prose/CardGroup.d.vue.ts +13 -0
- package/dist/runtime/components/prose/Code.d.vue.ts +22 -0
- package/dist/runtime/components/prose/CodeCollapse.d.vue.ts +47 -0
- package/dist/runtime/components/prose/CodeGroup.d.vue.ts +37 -0
- package/dist/runtime/components/prose/CodeIcon.d.vue.ts +7 -0
- package/dist/runtime/components/prose/CodePreview.d.vue.ts +19 -0
- package/dist/runtime/components/prose/CodeTree.d.vue.ts +28 -0
- package/dist/runtime/components/prose/CodeTree.vue +38 -31
- package/dist/runtime/components/prose/Collapsible.d.vue.ts +39 -0
- package/dist/runtime/components/prose/Em.d.vue.ts +13 -0
- package/dist/runtime/components/prose/Field.d.vue.ts +39 -0
- package/dist/runtime/components/prose/FieldGroup.d.vue.ts +18 -0
- package/dist/runtime/components/prose/H1.d.vue.ts +19 -0
- package/dist/runtime/components/prose/H2.d.vue.ts +19 -0
- package/dist/runtime/components/prose/H3.d.vue.ts +19 -0
- package/dist/runtime/components/prose/H4.d.vue.ts +19 -0
- package/dist/runtime/components/prose/Hr.d.vue.ts +5 -0
- package/dist/runtime/components/prose/Icon.d.vue.ts +6 -0
- package/dist/runtime/components/prose/Img.d.vue.ts +21 -0
- package/dist/runtime/components/prose/Kbd.d.vue.ts +6 -0
- package/dist/runtime/components/prose/Li.d.vue.ts +13 -0
- package/dist/runtime/components/prose/Ol.d.vue.ts +13 -0
- package/dist/runtime/components/prose/P.d.vue.ts +13 -0
- package/dist/runtime/components/prose/Pre.d.vue.ts +26 -0
- package/dist/runtime/components/prose/Script.d.vue.ts +5 -0
- package/dist/runtime/components/prose/Steps.d.vue.ts +22 -0
- package/dist/runtime/components/prose/Strong.d.vue.ts +13 -0
- package/dist/runtime/components/prose/Table.d.vue.ts +18 -0
- package/dist/runtime/components/prose/Tabs.d.vue.ts +36 -0
- package/dist/runtime/components/prose/TabsItem.d.vue.ts +15 -0
- package/dist/runtime/components/prose/Tbody.d.vue.ts +13 -0
- package/dist/runtime/components/prose/Td.d.vue.ts +13 -0
- package/dist/runtime/components/prose/Th.d.vue.ts +13 -0
- package/dist/runtime/components/prose/Thead.d.vue.ts +13 -0
- package/dist/runtime/components/prose/Tr.d.vue.ts +13 -0
- package/dist/runtime/components/prose/Ul.d.vue.ts +13 -0
- package/dist/runtime/components/prose/callout/Caution.d.vue.ts +14 -0
- package/dist/runtime/components/prose/callout/Note.d.vue.ts +14 -0
- package/dist/runtime/components/prose/callout/Tip.d.vue.ts +14 -0
- package/dist/runtime/components/prose/callout/Warning.d.vue.ts +14 -0
- package/dist/runtime/composables/useFormField.d.ts +1 -0
- package/dist/runtime/composables/useFormField.js +1 -0
- package/dist/runtime/inertia/components/Link.d.vue.ts +63 -0
- package/dist/runtime/inertia/components/LinkBase.d.vue.ts +25 -0
- package/dist/runtime/locale/de_ch.d.ts +3 -0
- package/dist/runtime/locale/de_ch.js +129 -0
- package/dist/runtime/locale/id.js +1 -1
- package/dist/runtime/locale/index.d.ts +2 -0
- package/dist/runtime/locale/index.js +2 -0
- package/dist/runtime/locale/ka.d.ts +3 -0
- package/dist/runtime/locale/ka.js +132 -0
- package/dist/runtime/types/form.d.ts +9 -8
- package/dist/runtime/types/form.js +1 -3
- package/dist/runtime/types/index.d.ts +1 -0
- package/dist/runtime/types/index.js +1 -0
- package/dist/runtime/types/utils.d.ts +7 -3
- package/dist/runtime/utils/form.d.ts +2 -0
- package/dist/runtime/utils/form.js +28 -0
- package/dist/runtime/utils/fuse.d.ts +2 -1
- package/dist/runtime/utils/index.d.ts +3 -3
- package/dist/runtime/utils/index.js +6 -3
- package/dist/runtime/vue/components/Icon.d.vue.ts +6 -0
- package/dist/runtime/vue/components/Link.d.vue.ts +93 -0
- package/dist/runtime/vue/components/color-mode/ColorModeButton.d.vue.ts +16 -0
- package/dist/runtime/vue/components/color-mode/ColorModeSelect.d.vue.ts +5 -0
- package/dist/runtime/vue/components/color-mode/ColorModeSwitch.d.vue.ts +5 -0
- package/dist/shared/{ui.BEZXPd3d.mjs → ui.Bs5uUhtm.mjs} +17 -12
- package/dist/unplugin.mjs +1 -1
- package/dist/vite.mjs +1 -1
- package/package.json +21 -34
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { TreeRootProps, TreeRootEmits } from 'reka-ui';
|
|
2
|
+
import type { AppConfig } from '@nuxt/schema';
|
|
3
|
+
import theme from '#build/ui/tree';
|
|
4
|
+
import type { IconProps } from '../types';
|
|
5
|
+
import type { DynamicSlots, GetItemKeys, GetModelValue, GetModelValueEmits, NestedItem } from '../types/utils';
|
|
6
|
+
import type { ComponentConfig } from '../types/tv';
|
|
7
|
+
type Tree = ComponentConfig<typeof theme, AppConfig, 'tree'>;
|
|
8
|
+
export type TreeItem = {
|
|
9
|
+
/**
|
|
10
|
+
* @IconifyIcon
|
|
11
|
+
*/
|
|
12
|
+
icon?: IconProps['name'];
|
|
13
|
+
label?: string;
|
|
14
|
+
/**
|
|
15
|
+
* @IconifyIcon
|
|
16
|
+
*/
|
|
17
|
+
trailingIcon?: IconProps['name'];
|
|
18
|
+
defaultExpanded?: boolean;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
value?: string;
|
|
21
|
+
slot?: string;
|
|
22
|
+
children?: TreeItem[];
|
|
23
|
+
onToggle?(e: Event): void;
|
|
24
|
+
onSelect?(e?: Event): void;
|
|
25
|
+
class?: any;
|
|
26
|
+
ui?: Pick<Tree['slots'], 'item' | 'itemWithChildren' | 'link' | 'linkLeadingIcon' | 'linkLabel' | 'linkTrailing' | 'linkTrailingIcon' | 'listWithChildren'>;
|
|
27
|
+
[key: string]: any;
|
|
28
|
+
};
|
|
29
|
+
export interface TreeProps<T extends TreeItem[] = TreeItem[], VK extends GetItemKeys<T> = 'value', M extends boolean = false> extends Pick<TreeRootProps<T>, 'expanded' | 'defaultExpanded' | 'selectionBehavior' | 'propagateSelect' | 'disabled' | 'bubbleSelect'> {
|
|
30
|
+
/**
|
|
31
|
+
* The element or component this component should render as.
|
|
32
|
+
* @defaultValue 'ul'
|
|
33
|
+
*/
|
|
34
|
+
as?: any;
|
|
35
|
+
/**
|
|
36
|
+
* @defaultValue 'primary'
|
|
37
|
+
*/
|
|
38
|
+
color?: Tree['variants']['color'];
|
|
39
|
+
/**
|
|
40
|
+
* @defaultValue 'md'
|
|
41
|
+
*/
|
|
42
|
+
size?: Tree['variants']['size'];
|
|
43
|
+
/**
|
|
44
|
+
* The key used to get the value from the item.
|
|
45
|
+
* @defaultValue 'value'
|
|
46
|
+
*/
|
|
47
|
+
valueKey?: VK;
|
|
48
|
+
/**
|
|
49
|
+
* The key used to get the label from the item.
|
|
50
|
+
* @defaultValue 'label'
|
|
51
|
+
*/
|
|
52
|
+
labelKey?: GetItemKeys<T>;
|
|
53
|
+
/**
|
|
54
|
+
* The icon displayed on the right side of a parent node.
|
|
55
|
+
* @defaultValue appConfig.ui.icons.chevronDown
|
|
56
|
+
* @IconifyIcon
|
|
57
|
+
*/
|
|
58
|
+
trailingIcon?: IconProps['name'];
|
|
59
|
+
/**
|
|
60
|
+
* The icon displayed when a parent node is expanded.
|
|
61
|
+
* @defaultValue appConfig.ui.icons.folderOpen
|
|
62
|
+
* @IconifyIcon
|
|
63
|
+
*/
|
|
64
|
+
expandedIcon?: IconProps['name'];
|
|
65
|
+
/**
|
|
66
|
+
* The icon displayed when a parent node is collapsed.
|
|
67
|
+
* @defaultValue appConfig.ui.icons.folder
|
|
68
|
+
* @IconifyIcon
|
|
69
|
+
*/
|
|
70
|
+
collapsedIcon?: IconProps['name'];
|
|
71
|
+
items?: T;
|
|
72
|
+
/** The controlled value of the Tree. Can be bind as `v-model`. */
|
|
73
|
+
modelValue?: GetModelValue<T, VK, M>;
|
|
74
|
+
/** The value of the Tree when initially rendered. Use when you do not need to control the state of the Tree. */
|
|
75
|
+
defaultValue?: GetModelValue<T, VK, M>;
|
|
76
|
+
/** Whether multiple options can be selected or not. */
|
|
77
|
+
multiple?: M & boolean;
|
|
78
|
+
class?: any;
|
|
79
|
+
ui?: Tree['slots'];
|
|
80
|
+
}
|
|
81
|
+
export type TreeEmits<A extends TreeItem[], VK extends GetItemKeys<A> | undefined, M extends boolean> = Omit<TreeRootEmits, 'update:modelValue'> & GetModelValueEmits<A, VK, M>;
|
|
82
|
+
type SlotProps<T extends TreeItem> = (props: {
|
|
83
|
+
item: T;
|
|
84
|
+
index: number;
|
|
85
|
+
level: number;
|
|
86
|
+
expanded: boolean;
|
|
87
|
+
selected: boolean;
|
|
88
|
+
}) => any;
|
|
89
|
+
export type TreeSlots<A extends TreeItem[] = TreeItem[], T extends NestedItem<A> = NestedItem<A>> = {
|
|
90
|
+
'item-wrapper': SlotProps<T>;
|
|
91
|
+
'item': SlotProps<T>;
|
|
92
|
+
'item-leading': SlotProps<T>;
|
|
93
|
+
'item-label': SlotProps<T>;
|
|
94
|
+
'item-trailing': SlotProps<T>;
|
|
95
|
+
} & DynamicSlots<T, undefined, {
|
|
96
|
+
index: number;
|
|
97
|
+
level: number;
|
|
98
|
+
expanded: boolean;
|
|
99
|
+
selected: boolean;
|
|
100
|
+
}>;
|
|
101
|
+
declare const _default: <T extends TreeItem[], VK extends GetItemKeys<T> = "value", M extends boolean = false>(__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<{
|
|
102
|
+
props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
|
|
103
|
+
readonly "onUpdate:modelValue"?: ((value: GetModelValue<T, VK, M>) => any) | undefined;
|
|
104
|
+
readonly "onUpdate:expanded"?: ((val: string[]) => any) | undefined;
|
|
105
|
+
} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onUpdate:modelValue" | "onUpdate:expanded"> & TreeProps<T, VK, M> & {}> & import("vue").PublicProps;
|
|
106
|
+
expose(exposed: import("vue").ShallowUnwrapRef<{}>): void;
|
|
107
|
+
attrs: any;
|
|
108
|
+
slots: TreeSlots<T, NestedItem<T>>;
|
|
109
|
+
emit: ((evt: "update:modelValue", value: GetModelValue<T, VK, M>) => void) & ((evt: "update:expanded", val: string[]) => void);
|
|
110
|
+
}>) => import("vue").VNode & {
|
|
111
|
+
__ctx?: Awaited<typeof __VLS_setup>;
|
|
112
|
+
};
|
|
113
|
+
export default _default;
|
|
114
|
+
type __VLS_PrettifyLocal<T> = {
|
|
115
|
+
[K in keyof T as K]: T[K];
|
|
116
|
+
} & {};
|
|
@@ -60,56 +60,84 @@ const defaultExpanded = computed(
|
|
|
60
60
|
|
|
61
61
|
<template>
|
|
62
62
|
<DefineTreeTemplate v-slot="{ items, level }">
|
|
63
|
-
<
|
|
63
|
+
<TreeItem
|
|
64
64
|
v-for="(item, index) in items"
|
|
65
65
|
:key="`${level}-${index}`"
|
|
66
|
-
|
|
66
|
+
v-slot="{ isExpanded, isSelected }"
|
|
67
|
+
:level="level"
|
|
68
|
+
:value="item"
|
|
69
|
+
:class="level > 1 ? ui.itemWithChildren({ class: [props.ui?.itemWithChildren, item.ui?.itemWithChildren] }) : ui.item({ class: [props.ui?.item, item.ui?.item] })"
|
|
70
|
+
@toggle="item.onToggle"
|
|
71
|
+
@select="item.onSelect"
|
|
67
72
|
>
|
|
68
|
-
<
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
:level="level"
|
|
72
|
-
:value="item"
|
|
73
|
-
@toggle="item.onToggle"
|
|
74
|
-
@select="item.onSelect"
|
|
73
|
+
<slot
|
|
74
|
+
:name="item.slot ? `${item.slot}-wrapper` : 'item-wrapper'"
|
|
75
|
+
v-bind="{ item, index, level, expanded: isExpanded, selected: isSelected }"
|
|
75
76
|
>
|
|
76
|
-
<
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
<button
|
|
78
|
+
type="button"
|
|
79
|
+
:disabled="item.disabled || disabled"
|
|
80
|
+
:data-expanded="isExpanded"
|
|
81
|
+
:class="ui.link({ class: [props.ui?.link, item.ui?.link, item.class], selected: isSelected, disabled: item.disabled || disabled })"
|
|
82
|
+
>
|
|
83
|
+
<slot :name="item.slot || 'item'" v-bind="{ index, level, expanded: isExpanded, selected: isSelected }" :item="item">
|
|
84
|
+
<slot :name="item.slot ? `${item.slot}-leading` : 'item-leading'" v-bind="{ index, level, expanded: isExpanded, selected: isSelected }" :item="item">
|
|
85
|
+
<UIcon
|
|
86
|
+
v-if="item.icon"
|
|
87
|
+
:name="item.icon"
|
|
88
|
+
:class="ui.linkLeadingIcon({ class: [props.ui?.linkLeadingIcon, item.ui?.linkLeadingIcon] })"
|
|
89
|
+
/>
|
|
90
|
+
<UIcon
|
|
91
|
+
v-else-if="item.children?.length"
|
|
92
|
+
:name="isExpanded ? expandedIcon ?? appConfig.ui.icons.folderOpen : collapsedIcon ?? appConfig.ui.icons.folder"
|
|
93
|
+
:class="ui.linkLeadingIcon({ class: [props.ui?.linkLeadingIcon, item.ui?.linkLeadingIcon] })"
|
|
94
|
+
/>
|
|
95
|
+
</slot>
|
|
96
|
+
|
|
97
|
+
<span
|
|
98
|
+
v-if="getItemLabel(item) || !!slots[item.slot ? `${item.slot}-label` : 'item-label']"
|
|
99
|
+
:class="ui.linkLabel({ class: [props.ui?.linkLabel, item.ui?.linkLabel] })"
|
|
100
|
+
>
|
|
101
|
+
<slot
|
|
102
|
+
:name="item.slot ? `${item.slot}-label` : 'item-label'"
|
|
103
|
+
v-bind="{ item, index, level, expanded: isExpanded, selected: isSelected }"
|
|
104
|
+
>
|
|
105
|
+
{{ getItemLabel(item) }}
|
|
106
|
+
</slot>
|
|
107
|
+
</span>
|
|
108
|
+
|
|
109
|
+
<span
|
|
110
|
+
v-if="item.trailingIcon || item.children?.length || !!slots[item.slot ? `${item.slot}-trailing` : 'item-trailing']"
|
|
111
|
+
:class="ui.linkTrailing({ class: [props.ui?.linkTrailing, item.ui?.linkTrailing] })"
|
|
112
|
+
>
|
|
113
|
+
<slot
|
|
114
|
+
:name="item.slot ? `${item.slot}-trailing` : 'item-trailing'"
|
|
115
|
+
v-bind="{ item, index, level, expanded: isExpanded, selected: isSelected }"
|
|
116
|
+
>
|
|
80
117
|
<UIcon
|
|
81
|
-
v-if="item.
|
|
82
|
-
:name="item.
|
|
83
|
-
:class="ui.
|
|
118
|
+
v-if="item.trailingIcon"
|
|
119
|
+
:name="item.trailingIcon"
|
|
120
|
+
:class="ui.linkTrailingIcon({ class: [props.ui?.linkTrailingIcon, item.ui?.linkTrailingIcon] })"
|
|
84
121
|
/>
|
|
85
122
|
<UIcon
|
|
86
123
|
v-else-if="item.children?.length"
|
|
87
|
-
:name="
|
|
88
|
-
:class="ui.
|
|
124
|
+
:name="trailingIcon ?? appConfig.ui.icons.chevronDown"
|
|
125
|
+
:class="ui.linkTrailingIcon({ class: [props.ui?.linkTrailingIcon, item.ui?.linkTrailingIcon] })"
|
|
89
126
|
/>
|
|
90
127
|
</slot>
|
|
128
|
+
</span>
|
|
129
|
+
</slot>
|
|
130
|
+
</button>
|
|
131
|
+
</slot>
|
|
91
132
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
<UIcon v-if="item.trailingIcon" :name="item.trailingIcon" :class="ui.linkTrailingIcon({ class: [props.ui?.linkTrailingIcon, item.ui?.linkTrailingIcon] })" />
|
|
101
|
-
<UIcon v-else-if="item.children?.length" :name="trailingIcon ?? appConfig.ui.icons.chevronDown" :class="ui.linkTrailingIcon({ class: [props.ui?.linkTrailingIcon, item.ui?.linkTrailingIcon] })" />
|
|
102
|
-
</slot>
|
|
103
|
-
</span>
|
|
104
|
-
</slot>
|
|
105
|
-
</button>
|
|
106
|
-
</slot>
|
|
107
|
-
|
|
108
|
-
<ul v-if="item.children?.length && isExpanded" :class="ui.listWithChildren({ class: [props.ui?.listWithChildren, item.ui?.listWithChildren] })">
|
|
109
|
-
<ReuseTreeTemplate :items="item.children" :level="level + 1" />
|
|
110
|
-
</ul>
|
|
111
|
-
</TreeItem>
|
|
112
|
-
</li>
|
|
133
|
+
<ul
|
|
134
|
+
v-if="item.children?.length && isExpanded"
|
|
135
|
+
role="group"
|
|
136
|
+
:class="ui.listWithChildren({ class: [props.ui?.listWithChildren, item.ui?.listWithChildren] })"
|
|
137
|
+
>
|
|
138
|
+
<ReuseTreeTemplate :items="item.children" :level="level + 1" />
|
|
139
|
+
</ul>
|
|
140
|
+
</TreeItem>
|
|
113
141
|
</DefineTreeTemplate>
|
|
114
142
|
|
|
115
143
|
<TreeRoot
|
|
@@ -119,6 +147,6 @@ const defaultExpanded = computed(
|
|
|
119
147
|
:default-expanded="defaultExpanded"
|
|
120
148
|
:selection-behavior="selectionBehavior"
|
|
121
149
|
>
|
|
122
|
-
<ReuseTreeTemplate :items="items" :level="
|
|
150
|
+
<ReuseTreeTemplate :items="items" :level="1" />
|
|
123
151
|
</TreeRoot>
|
|
124
152
|
</template>
|
|
@@ -49,7 +49,7 @@ export interface TreeProps<T extends TreeItem[] = TreeItem[], VK extends GetItem
|
|
|
49
49
|
* The key used to get the label from the item.
|
|
50
50
|
* @defaultValue 'label'
|
|
51
51
|
*/
|
|
52
|
-
labelKey?:
|
|
52
|
+
labelKey?: GetItemKeys<T>;
|
|
53
53
|
/**
|
|
54
54
|
* The icon displayed on the right side of a parent node.
|
|
55
55
|
* @defaultValue appConfig.ui.icons.chevronDown
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { AppConfig } from '@nuxt/schema';
|
|
2
|
+
import theme from '#build/ui/user';
|
|
3
|
+
import type { AvatarProps, ChipProps, LinkProps } from '../types';
|
|
4
|
+
import type { ComponentConfig } from '../types/tv';
|
|
5
|
+
type User = ComponentConfig<typeof theme, AppConfig, 'user'>;
|
|
6
|
+
export interface UserProps {
|
|
7
|
+
/**
|
|
8
|
+
* The element or component this component should render as.
|
|
9
|
+
* @defaultValue 'div'
|
|
10
|
+
*/
|
|
11
|
+
as?: any;
|
|
12
|
+
name?: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
avatar?: Omit<AvatarProps, 'size'> & {
|
|
15
|
+
[key: string]: any;
|
|
16
|
+
};
|
|
17
|
+
chip?: boolean | Omit<ChipProps, 'size' | 'inset'>;
|
|
18
|
+
/**
|
|
19
|
+
* @defaultValue 'md'
|
|
20
|
+
*/
|
|
21
|
+
size?: User['variants']['size'];
|
|
22
|
+
/**
|
|
23
|
+
* The orientation of the user.
|
|
24
|
+
* @defaultValue 'horizontal'
|
|
25
|
+
*/
|
|
26
|
+
orientation?: User['variants']['orientation'];
|
|
27
|
+
to?: LinkProps['to'];
|
|
28
|
+
target?: LinkProps['target'];
|
|
29
|
+
onClick?: (event: MouseEvent) => void | Promise<void>;
|
|
30
|
+
class?: any;
|
|
31
|
+
ui?: User['slots'];
|
|
32
|
+
}
|
|
33
|
+
export interface UserSlots {
|
|
34
|
+
avatar(props?: {}): any;
|
|
35
|
+
name(props?: {}): any;
|
|
36
|
+
description(props?: {}): any;
|
|
37
|
+
default(props?: {}): any;
|
|
38
|
+
}
|
|
39
|
+
declare const _default: __VLS_WithSlots<import("vue").DefineComponent<UserProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<UserProps> & Readonly<{}>, {
|
|
40
|
+
orientation: User["variants"]["orientation"];
|
|
41
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, UserSlots>;
|
|
42
|
+
export default _default;
|
|
43
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
44
|
+
new (): {
|
|
45
|
+
$slots: S;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AvatarProps } from '@nuxt/ui';
|
|
2
|
+
export interface ColorModeAvatarProps extends /** @vue-ignore */ Omit<AvatarProps, 'src'> {
|
|
3
|
+
light: string;
|
|
4
|
+
dark: string;
|
|
5
|
+
}
|
|
6
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ButtonProps } from '@nuxt/ui';
|
|
2
|
+
export interface ColorModeButtonProps extends /** @vue-ignore */ Pick<ButtonProps, 'as' | 'size' | 'disabled' | 'ui'> {
|
|
3
|
+
/**
|
|
4
|
+
* @defaultValue 'neutral'
|
|
5
|
+
*/
|
|
6
|
+
color?: ButtonProps['color'];
|
|
7
|
+
/**
|
|
8
|
+
* @defaultValue 'ghost'
|
|
9
|
+
*/
|
|
10
|
+
variant?: ButtonProps['variant'];
|
|
11
|
+
}
|
|
12
|
+
declare const _default: __VLS_WithSlots<import("vue").DefineComponent<ColorModeButtonProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ColorModeButtonProps> & Readonly<{}>, {
|
|
13
|
+
color: ButtonProps["color"];
|
|
14
|
+
variant: ButtonProps["variant"];
|
|
15
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
|
|
16
|
+
fallback(props?: {}): any;
|
|
17
|
+
}>;
|
|
18
|
+
export default _default;
|
|
19
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
20
|
+
new (): {
|
|
21
|
+
$slots: S;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
dark: string;
|
|
3
|
+
light: string;
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
6
|
+
export default _default;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { SelectMenuProps } from '@nuxt/ui';
|
|
2
|
+
export interface ColorModeSelectProps extends /** @vue-ignore */ Pick<SelectMenuProps<any>, 'color' | 'variant' | 'size' | 'trailingIcon' | 'selectedIcon' | 'content' | 'arrow' | 'portal' | 'disabled' | 'ui'> {
|
|
3
|
+
}
|
|
4
|
+
declare const _default: import("vue").DefineComponent<ColorModeSelectProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ColorModeSelectProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
5
|
+
export default _default;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { SwitchProps } from '@nuxt/ui';
|
|
2
|
+
export interface ColorModeSwitchProps extends /** @vue-ignore */ Pick<SwitchProps, 'as' | 'color' | 'size' | 'disabled' | 'ui'> {
|
|
3
|
+
}
|
|
4
|
+
declare const _default: import("vue").DefineComponent<ColorModeSwitchProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ColorModeSwitchProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
5
|
+
export default _default;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { AccordionRootProps, AccordionRootEmits } from 'reka-ui';
|
|
2
|
+
import type { AppConfig } from '@nuxt/schema';
|
|
3
|
+
import type { ContentNavigationItem } from '@nuxt/content';
|
|
4
|
+
import theme from '#build/ui/content/content-navigation';
|
|
5
|
+
import type { BadgeProps, IconProps, LinkProps } from '../../types';
|
|
6
|
+
import type { ComponentConfig } from '../../types/tv';
|
|
7
|
+
type ContentNavigation = ComponentConfig<typeof theme, AppConfig, 'contentNavigation'>;
|
|
8
|
+
export interface ContentNavigationLink extends ContentNavigationItem {
|
|
9
|
+
/**
|
|
10
|
+
* @IconifyIcon
|
|
11
|
+
*/
|
|
12
|
+
icon?: IconProps['name'];
|
|
13
|
+
/**
|
|
14
|
+
* Display a badge on the link.
|
|
15
|
+
* `{ color: 'neutral', variant: 'outline', size: 'sm' }`{lang="ts-type"}
|
|
16
|
+
*/
|
|
17
|
+
badge?: string | number | BadgeProps;
|
|
18
|
+
target?: LinkProps['target'];
|
|
19
|
+
/**
|
|
20
|
+
* @IconifyIcon
|
|
21
|
+
*/
|
|
22
|
+
trailingIcon?: IconProps['name'];
|
|
23
|
+
disabled?: boolean;
|
|
24
|
+
children?: ContentNavigationLink[];
|
|
25
|
+
defaultOpen?: boolean;
|
|
26
|
+
active?: boolean;
|
|
27
|
+
class?: any;
|
|
28
|
+
ui?: Pick<ContentNavigation['slots'], 'link' | 'linkLeadingIcon' | 'linkTitle' | 'linkTrailing' | 'linkTrailingIcon' | 'linkTrailingBadge' | 'linkTrailingBadgeSize' | 'linkTrailingIcon' | 'linkTitleExternalIcon' | 'trigger' | 'content' | 'item' | 'itemWithChildren'>;
|
|
29
|
+
}
|
|
30
|
+
export interface ContentNavigationProps<T extends ContentNavigationLink = ContentNavigationLink> extends Pick<AccordionRootProps, 'disabled' | 'type' | 'unmountOnHide'> {
|
|
31
|
+
/**
|
|
32
|
+
* The element or component this component should render as.
|
|
33
|
+
* @defaultValue 'nav'
|
|
34
|
+
*/
|
|
35
|
+
as?: any;
|
|
36
|
+
/**
|
|
37
|
+
* When `true`, the tree will be opened based on the current route.
|
|
38
|
+
* When `false`, the tree will be closed.
|
|
39
|
+
* When `undefined` (default), the first item will be opened with `type="single"` and the first level will be opened with `type="multiple"`.
|
|
40
|
+
*/
|
|
41
|
+
defaultOpen?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* The icon displayed to toggle the accordion.
|
|
44
|
+
* @defaultValue appConfig.ui.icons.chevronDown
|
|
45
|
+
* @IconifyIcon
|
|
46
|
+
*/
|
|
47
|
+
trailingIcon?: IconProps['name'];
|
|
48
|
+
/**
|
|
49
|
+
* @defaultValue 'primary'
|
|
50
|
+
*/
|
|
51
|
+
color?: ContentNavigation['variants']['color'];
|
|
52
|
+
/**
|
|
53
|
+
* @defaultValue 'pill'
|
|
54
|
+
*/
|
|
55
|
+
variant?: ContentNavigation['variants']['variant'];
|
|
56
|
+
/**
|
|
57
|
+
* Display a line next to the active link.
|
|
58
|
+
* @defaultValue false
|
|
59
|
+
*/
|
|
60
|
+
highlight?: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* @defaultValue 'primary'
|
|
63
|
+
*/
|
|
64
|
+
highlightColor?: ContentNavigation['variants']['highlightColor'];
|
|
65
|
+
/**
|
|
66
|
+
* When type is "single", prevents closing the open item when clicking its trigger.
|
|
67
|
+
* When type is "multiple", disables the collapsible behavior.
|
|
68
|
+
* @defaultValue true
|
|
69
|
+
*/
|
|
70
|
+
collapsible?: boolean;
|
|
71
|
+
level?: number;
|
|
72
|
+
navigation?: T[];
|
|
73
|
+
class?: any;
|
|
74
|
+
ui?: ContentNavigation['slots'];
|
|
75
|
+
}
|
|
76
|
+
export interface ContentNavigationEmits extends AccordionRootEmits {
|
|
77
|
+
}
|
|
78
|
+
type SlotProps<T> = (props: {
|
|
79
|
+
link: T;
|
|
80
|
+
active?: boolean;
|
|
81
|
+
}) => any;
|
|
82
|
+
export interface ContentNavigationSlots<T extends ContentNavigationLink = ContentNavigationLink> {
|
|
83
|
+
'link': SlotProps<T>;
|
|
84
|
+
'link-leading': SlotProps<T>;
|
|
85
|
+
'link-title': SlotProps<T>;
|
|
86
|
+
'link-trailing': SlotProps<T>;
|
|
87
|
+
}
|
|
88
|
+
declare const _default: <T extends ContentNavigationLink>(__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<{
|
|
89
|
+
props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
|
|
90
|
+
readonly "onUpdate:modelValue"?: ((value: string | string[] | undefined) => any) | undefined;
|
|
91
|
+
} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onUpdate:modelValue"> & ContentNavigationProps<T> & {}> & import("vue").PublicProps;
|
|
92
|
+
expose(exposed: import("vue").ShallowUnwrapRef<{}>): void;
|
|
93
|
+
attrs: any;
|
|
94
|
+
slots: ContentNavigationSlots<T>;
|
|
95
|
+
emit: (evt: "update:modelValue", value: string | string[] | undefined) => void;
|
|
96
|
+
}>) => import("vue").VNode & {
|
|
97
|
+
__ctx?: Awaited<typeof __VLS_setup>;
|
|
98
|
+
};
|
|
99
|
+
export default _default;
|
|
100
|
+
type __VLS_PrettifyLocal<T> = {
|
|
101
|
+
[K in keyof T as K]: T[K];
|
|
102
|
+
} & {};
|
|
@@ -35,7 +35,7 @@ const props = defineProps({
|
|
|
35
35
|
});
|
|
36
36
|
const emits = defineEmits(["update:modelValue"]);
|
|
37
37
|
const slots = defineSlots();
|
|
38
|
-
const rootProps = useForwardPropsEmits(reactivePick(props, "collapsible", "
|
|
38
|
+
const rootProps = useForwardPropsEmits(reactivePick(props, "collapsible", "type", "unmountOnHide"), emits);
|
|
39
39
|
const route = useRoute();
|
|
40
40
|
const appConfig = useAppConfig();
|
|
41
41
|
const [DefineLinkTemplate, ReuseLinkTemplate] = createReusableTemplate();
|
|
@@ -45,6 +45,7 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.contentNaviga
|
|
|
45
45
|
highlight: props.highlight,
|
|
46
46
|
highlightColor: props.highlightColor || props.color
|
|
47
47
|
}));
|
|
48
|
+
const disabled = computed(() => props.disabled || props.type === "multiple" && props.collapsible === false);
|
|
48
49
|
const defaultValue = computed(() => {
|
|
49
50
|
if (props.defaultOpen === false) {
|
|
50
51
|
return void 0;
|
|
@@ -91,14 +92,14 @@ const defaultValue = computed(() => {
|
|
|
91
92
|
</DefineLinkTemplate>
|
|
92
93
|
|
|
93
94
|
<Primitive :as="as" v-bind="$attrs" :as-child="level > 0" :class="ui.root({ class: [props.ui?.root, props.class] })">
|
|
94
|
-
<AccordionRoot as="ul" v-bind="rootProps" :default-value="defaultValue" :class="level > 0 ? ui.listWithChildren({ class: props.ui?.listWithChildren }) : ui.list({ class: props.ui?.list })">
|
|
95
|
+
<AccordionRoot as="ul" :disabled="disabled" v-bind="rootProps" :default-value="defaultValue" :class="level > 0 ? ui.listWithChildren({ class: props.ui?.listWithChildren }) : ui.list({ class: props.ui?.list })">
|
|
95
96
|
<template v-for="(link, index) in navigation" :key="index">
|
|
96
97
|
<AccordionItem v-if="link.children?.length" as="li" :class="ui.itemWithChildren({ class: [props.ui?.itemWithChildren, link.ui?.itemWithChildren], level: level > 0 })" :value="String(index)">
|
|
97
98
|
<AccordionTrigger
|
|
98
99
|
as="button"
|
|
99
100
|
:class="[
|
|
100
|
-
ui.link({ class: [props.ui?.link, link.ui?.link, link.class], active: link.active, disabled: !!link.disabled }),
|
|
101
|
-
ui.trigger({ class: [props.ui?.trigger, link.ui?.trigger] })
|
|
101
|
+
ui.link({ class: [props.ui?.link, link.ui?.link, link.class], active: link.active, disabled: !!link.disabled || disabled }),
|
|
102
|
+
ui.trigger({ class: [props.ui?.trigger, link.ui?.trigger], disabled })
|
|
102
103
|
]"
|
|
103
104
|
>
|
|
104
105
|
<ReuseLinkTemplate :link="link" :active="link.active" />
|
|
@@ -63,8 +63,8 @@ export interface ContentNavigationProps<T extends ContentNavigationLink = Conten
|
|
|
63
63
|
*/
|
|
64
64
|
highlightColor?: ContentNavigation['variants']['highlightColor'];
|
|
65
65
|
/**
|
|
66
|
-
* When type is "single",
|
|
67
|
-
* When type is "multiple",
|
|
66
|
+
* When type is "single", prevents closing the open item when clicking its trigger.
|
|
67
|
+
* When type is "multiple", disables the collapsible behavior.
|
|
68
68
|
* @defaultValue true
|
|
69
69
|
*/
|
|
70
70
|
collapsible?: boolean;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { ContentNavigationItem } from '@nuxt/content';
|
|
2
|
+
import type { AppConfig } from '@nuxt/schema';
|
|
3
|
+
import type { UseFuseOptions } from '@vueuse/integrations/useFuse';
|
|
4
|
+
import theme from '#build/ui/content/content-search';
|
|
5
|
+
import type { ButtonProps, InputProps, LinkProps, ModalProps, CommandPaletteProps, CommandPaletteSlots, CommandPaletteGroup, CommandPaletteItem, IconProps } from '../../types';
|
|
6
|
+
import type { ComponentConfig } from '../../types/tv';
|
|
7
|
+
type ContentSearch = ComponentConfig<typeof theme, AppConfig, 'contentSearch'>;
|
|
8
|
+
export interface ContentSearchLink extends Omit<LinkProps, 'custom'> {
|
|
9
|
+
label?: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
/**
|
|
12
|
+
* @IconifyIcon
|
|
13
|
+
*/
|
|
14
|
+
icon?: IconProps['name'];
|
|
15
|
+
children?: ContentSearchLink[];
|
|
16
|
+
}
|
|
17
|
+
export interface ContentSearchFile {
|
|
18
|
+
id: string;
|
|
19
|
+
title: string;
|
|
20
|
+
titles: string[];
|
|
21
|
+
level: number;
|
|
22
|
+
content: string;
|
|
23
|
+
}
|
|
24
|
+
export interface ContentSearchItem extends Omit<LinkProps, 'custom'>, CommandPaletteItem {
|
|
25
|
+
level?: number;
|
|
26
|
+
/**
|
|
27
|
+
* @IconifyIcon
|
|
28
|
+
*/
|
|
29
|
+
icon?: IconProps['name'];
|
|
30
|
+
}
|
|
31
|
+
export interface ContentSearchProps<T extends ContentSearchLink = ContentSearchLink> extends /* @vue-ignore */ Pick<ModalProps, 'title' | 'description' | 'overlay' | 'transition' | 'content' | 'dismissible' | 'fullscreen' | 'modal' | 'portal'> {
|
|
32
|
+
/**
|
|
33
|
+
* The icon displayed in the input.
|
|
34
|
+
* @defaultValue appConfig.ui.icons.search
|
|
35
|
+
* @IconifyIcon
|
|
36
|
+
*/
|
|
37
|
+
icon?: IconProps['name'];
|
|
38
|
+
/**
|
|
39
|
+
* The placeholder text for the input.
|
|
40
|
+
* @defaultValue t('commandPalette.placeholder')
|
|
41
|
+
*/
|
|
42
|
+
placeholder?: InputProps['placeholder'];
|
|
43
|
+
/**
|
|
44
|
+
* Automatically focus the input when component is mounted.
|
|
45
|
+
* @defaultValue true
|
|
46
|
+
*/
|
|
47
|
+
autofocus?: boolean;
|
|
48
|
+
/** When `true`, the loading icon will be displayed. */
|
|
49
|
+
loading?: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* The icon when the `loading` prop is `true`.
|
|
52
|
+
* @defaultValue appConfig.ui.icons.loading
|
|
53
|
+
* @IconifyIcon
|
|
54
|
+
*/
|
|
55
|
+
loadingIcon?: IconProps['name'];
|
|
56
|
+
/**
|
|
57
|
+
* Display a close button in the input (useful when inside a Modal for example).
|
|
58
|
+
* `{ size: 'md', color: 'neutral', variant: 'ghost' }`{lang="ts-type"}
|
|
59
|
+
* @emits 'update:open'
|
|
60
|
+
* @defaultValue true
|
|
61
|
+
*/
|
|
62
|
+
close?: boolean | Partial<ButtonProps>;
|
|
63
|
+
/**
|
|
64
|
+
* The icon displayed in the close button.
|
|
65
|
+
* @defaultValue appConfig.ui.icons.close
|
|
66
|
+
* @IconifyIcon
|
|
67
|
+
*/
|
|
68
|
+
closeIcon?: IconProps['name'];
|
|
69
|
+
/**
|
|
70
|
+
* Keyboard shortcut to open the search (used by [`defineShortcuts`](https://ui.nuxt.com/docs/composables/define-shortcuts))
|
|
71
|
+
* @defaultValue 'meta_k'
|
|
72
|
+
*/
|
|
73
|
+
shortcut?: string;
|
|
74
|
+
/** Links group displayed as the first group in the command palette. */
|
|
75
|
+
links?: T[];
|
|
76
|
+
navigation?: ContentNavigationItem[];
|
|
77
|
+
/** Custom groups displayed between navigation and color mode group. */
|
|
78
|
+
groups?: CommandPaletteGroup<ContentSearchItem>[];
|
|
79
|
+
files?: ContentSearchFile[];
|
|
80
|
+
/**
|
|
81
|
+
* Options for [useFuse](https://vueuse.org/integrations/useFuse) passed to the [CommandPalette](https://ui.nuxt.com/docs/components/command-palette).
|
|
82
|
+
* @defaultValue { fuseOptions: { includeMatches: true } }
|
|
83
|
+
*/
|
|
84
|
+
fuse?: UseFuseOptions<T>;
|
|
85
|
+
/**
|
|
86
|
+
* When `true`, the theme command will be added to the groups.
|
|
87
|
+
* @defaultValue true
|
|
88
|
+
*/
|
|
89
|
+
colorMode?: boolean;
|
|
90
|
+
class?: any;
|
|
91
|
+
ui?: ContentSearch['slots'] & CommandPaletteProps<CommandPaletteGroup<ContentSearchItem>, ContentSearchItem>['ui'];
|
|
92
|
+
}
|
|
93
|
+
export type ContentSearchSlots = CommandPaletteSlots<CommandPaletteGroup<ContentSearchItem>, ContentSearchItem> & {
|
|
94
|
+
content(props?: {}): any;
|
|
95
|
+
};
|
|
96
|
+
declare const _default: <T extends ContentSearchLink>(__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<{
|
|
97
|
+
props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
|
|
98
|
+
readonly "onUpdate:searchTerm"?: ((value: string) => any) | undefined;
|
|
99
|
+
} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onUpdate:searchTerm"> & (ContentSearchProps<T> & {
|
|
100
|
+
searchTerm?: string;
|
|
101
|
+
}) & {}> & import("vue").PublicProps;
|
|
102
|
+
expose(exposed: import("vue").ShallowUnwrapRef<{
|
|
103
|
+
commandPaletteRef: Readonly<import("vue").ShallowRef<import("vue").ShallowUnwrapRef<{}> | null>>;
|
|
104
|
+
}>): void;
|
|
105
|
+
attrs: any;
|
|
106
|
+
slots: ContentSearchSlots;
|
|
107
|
+
emit: (evt: "update:searchTerm", value: string) => void;
|
|
108
|
+
}>) => import("vue").VNode & {
|
|
109
|
+
__ctx?: Awaited<typeof __VLS_setup>;
|
|
110
|
+
};
|
|
111
|
+
export default _default;
|
|
112
|
+
type __VLS_PrettifyLocal<T> = {
|
|
113
|
+
[K in keyof T as K]: T[K];
|
|
114
|
+
} & {};
|
|
@@ -39,7 +39,7 @@ const { open } = useContentSearch();
|
|
|
39
39
|
const colorMode = useColorMode();
|
|
40
40
|
const appConfig = useAppConfig();
|
|
41
41
|
const commandPaletteProps = useForwardProps(reactivePick(props, "icon", "placeholder", "autofocus", "loading", "loadingIcon", "close", "closeIcon"));
|
|
42
|
-
const
|
|
42
|
+
const getProxySlots = () => omit(slots, ["content"]);
|
|
43
43
|
const fuse = computed(() => defu({}, props.fuse, {
|
|
44
44
|
fuseOptions: {
|
|
45
45
|
includeMatches: true
|
|
@@ -164,7 +164,7 @@ defineExpose({
|
|
|
164
164
|
@update:model-value="onSelect"
|
|
165
165
|
@update:open="open = $event"
|
|
166
166
|
>
|
|
167
|
-
<template v-for="(_, name) in
|
|
167
|
+
<template v-for="(_, name) in getProxySlots()" #[name]="slotData">
|
|
168
168
|
<slot :name="name" v-bind="slotData" />
|
|
169
169
|
</template>
|
|
170
170
|
</UCommandPalette>
|