@abraca/nuxt 1.8.0 → 1.9.1

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.
Files changed (54) hide show
  1. package/README.md +27 -2
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +42 -4
  4. package/dist/runtime/components/docs/ADocsNavigation.d.vue.ts +155 -0
  5. package/dist/runtime/components/docs/ADocsNavigation.vue +154 -0
  6. package/dist/runtime/components/docs/ADocsNavigation.vue.d.ts +155 -0
  7. package/dist/runtime/components/docs/ADocsSearch.d.vue.ts +249 -0
  8. package/dist/runtime/components/docs/ADocsSearch.vue +187 -0
  9. package/dist/runtime/components/docs/ADocsSearch.vue.d.ts +249 -0
  10. package/dist/runtime/components/docs/ADocsSearchButton.d.vue.ts +253 -0
  11. package/dist/runtime/components/docs/ADocsSearchButton.vue +99 -0
  12. package/dist/runtime/components/docs/ADocsSearchButton.vue.d.ts +253 -0
  13. package/dist/runtime/components/docs/ADocsSurround.d.vue.ts +56 -0
  14. package/dist/runtime/components/docs/ADocsSurround.vue +68 -0
  15. package/dist/runtime/components/docs/ADocsSurround.vue.d.ts +56 -0
  16. package/dist/runtime/components/docs/ADocsToc.d.vue.ts +117 -0
  17. package/dist/runtime/components/docs/ADocsToc.vue +194 -0
  18. package/dist/runtime/components/docs/ADocsToc.vue.d.ts +117 -0
  19. package/dist/runtime/components/editor/ADocLinkPopover.vue +1 -5
  20. package/dist/runtime/components/renderers/AMediaRenderer.vue +1 -1
  21. package/dist/runtime/components/shell/ADocPanelSettings.d.vue.ts +32 -2
  22. package/dist/runtime/components/shell/ADocPanelSettings.vue +289 -2
  23. package/dist/runtime/components/shell/ADocPanelSettings.vue.d.ts +32 -2
  24. package/dist/runtime/composables/useDocsSearch.d.ts +24 -0
  25. package/dist/runtime/composables/useDocsSearch.js +34 -0
  26. package/dist/runtime/extensions/doc-embed.js +2 -1
  27. package/dist/runtime/extensions/doc-link-drop.js +4 -4
  28. package/dist/runtime/extensions/doc-link.d.ts +12 -0
  29. package/dist/runtime/extensions/doc-link.js +60 -0
  30. package/dist/runtime/extensions/views/DocEmbedView.vue +18 -3
  31. package/dist/runtime/extensions/views/DocLinkView.d.vue.ts +4 -0
  32. package/dist/runtime/extensions/views/DocLinkView.vue +71 -0
  33. package/dist/runtime/extensions/views/DocLinkView.vue.d.ts +4 -0
  34. package/dist/runtime/plugin-abracadabra.client.js +18 -2
  35. package/dist/runtime/plugins/core.plugin.js +3 -0
  36. package/dist/runtime/server/plugins/abracadabra-service.js +3 -1
  37. package/dist/runtime/theme/content/_shared.d.ts +6 -0
  38. package/dist/runtime/theme/content/_shared.js +6 -0
  39. package/dist/runtime/theme/content/content-navigation.d.ts +120 -0
  40. package/dist/runtime/theme/content/content-navigation.js +155 -0
  41. package/dist/runtime/theme/content/content-search-button.d.ts +16 -0
  42. package/dist/runtime/theme/content/content-search-button.js +15 -0
  43. package/dist/runtime/theme/content/content-search.d.ts +24 -0
  44. package/dist/runtime/theme/content/content-search.js +23 -0
  45. package/dist/runtime/theme/content/content-surround.d.ts +22 -0
  46. package/dist/runtime/theme/content/content-surround.js +23 -0
  47. package/dist/runtime/theme/content/content-toc.d.ts +84 -0
  48. package/dist/runtime/theme/content/content-toc.js +94 -0
  49. package/dist/runtime/theme/content/index.d.ts +5 -0
  50. package/dist/runtime/theme/content/index.js +5 -0
  51. package/dist/runtime/utils/content.d.ts +19 -0
  52. package/dist/runtime/utils/content.js +23 -0
  53. package/dist/runtime/utils/docReferenceEdges.js +1 -1
  54. package/package.json +20 -13
package/README.md CHANGED
@@ -216,7 +216,7 @@ pnpm install
216
216
  # Generate type stubs
217
217
  pnpm dev:prepare
218
218
 
219
- # Develop with the playground
219
+ # Develop with the playground (one route per module feature)
220
220
  pnpm dev
221
221
 
222
222
  # Build
@@ -225,11 +225,36 @@ pnpm prepack
225
225
  # Lint
226
226
  pnpm lint
227
227
 
228
- # Test
228
+ # Unit + integration tests (requires a running abracadabra-rs at $ABRACADABRA_URL for integration)
229
229
  pnpm test
230
230
  pnpm test:watch
231
+ pnpm test:integration
232
+
233
+ # Browser E2E (Playwright against a real spawned abracadabra-rs + abracadabra-aperio)
234
+ pnpm test:e2e # headless
235
+ pnpm test:e2e:headed # headed debug
236
+ pnpm test:e2e:ui # Playwright UI mode
237
+ ```
238
+
239
+ ### E2E setup
240
+
241
+ `pnpm test:e2e` drives Chromium against a freshly-spawned `abracadabra-rs`
242
+ (release binary) and `abracadabra-aperio` (Nuxt dev) — no mocks. The sibling
243
+ repos must be checked out next to this one:
244
+
245
+ ```
246
+ Abracadabra/
247
+ ├── abracadabra-nuxt/ (this repo)
248
+ ├── abracadabra-rs/ # build: cargo build --release -p abracadabra-server
249
+ └── abracadabra-aperio/ # consumer app under test
231
250
  ```
232
251
 
252
+ The test harness listens on port **3300** for aperio. Keep that free. Set
253
+ `E2E_VERBOSE=1` to stream rs + aperio logs alongside test output — useful
254
+ when a test is surprising you.
255
+
256
+ The `playground/` directory is a focused, multi-page sandbox — one route per module feature — used to develop and visually verify the module in isolation. For a full reference application that exercises the entire module surface (auth, spaces, chat, file transfer, settings, etc.), see [`abracadabra-aperio`](../abracadabra-aperio), the open-source dashboard built on top of `@abraca/nuxt`.
257
+
233
258
  <!-- Badges -->
234
259
  [npm-version-src]: https://img.shields.io/npm/v/@abraca/nuxt/latest.svg?style=flat&colorA=020420&colorB=00DC82
235
260
  [npm-version-href]: https://npmjs.com/package/@abraca/nuxt
package/dist/module.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "compatibility": {
5
5
  "nuxt": ">=4.0.0"
6
6
  },
7
- "version": "1.8.0",
7
+ "version": "1.9.1",
8
8
  "builder": {
9
9
  "@nuxt/module-builder": "1.0.2",
10
10
  "unbuild": "3.6.1"
package/dist/module.mjs CHANGED
@@ -1,3 +1,4 @@
1
+ import { createRequire } from 'node:module';
1
2
  import { defineNuxtModule, createResolver, addPlugin, addImportsDir, addImports, addComponentsDir, addServerHandler, addRouteMiddleware, addServerPlugin, addServerImportsDir } from '@nuxt/kit';
2
3
  import { defu } from 'defu';
3
4
  export { buildSlugMap, isUUID, slugify } from '../dist/runtime/utils/slugify.js';
@@ -118,6 +119,9 @@ const module$1 = defineNuxtModule({
118
119
  "prosemirror-dropcursor",
119
120
  "prosemirror-commands",
120
121
  "prosemirror-tables",
122
+ // y-prosemirror is transitive via @tiptap/extension-collaboration — dedupe
123
+ // is still valuable (prevents two copies if the app happens to install it
124
+ // directly), and Vite dedupe silently skips entries it can't resolve.
121
125
  "y-prosemirror",
122
126
  "yjs",
123
127
  "y-protocols",
@@ -162,7 +166,8 @@ const module$1 = defineNuxtModule({
162
166
  }
163
167
  nuxt.options.vite.optimizeDeps = defu(nuxt.options.vite.optimizeDeps, { include: [] });
164
168
  const includeList = nuxt.options.vite.optimizeDeps.include ?? [];
165
- const prosemirrorDeps = [
169
+ const prebundleDeps = [
170
+ // ProseMirror core (re-exported by @tiptap/pm)
166
171
  "prosemirror-view",
167
172
  "prosemirror-state",
168
173
  "prosemirror-model",
@@ -175,17 +180,44 @@ const module$1 = defineNuxtModule({
175
180
  "prosemirror-inputrules",
176
181
  "prosemirror-history",
177
182
  "prosemirror-schema-list",
178
- "y-prosemirror",
183
+ // TipTap core + Vue binding (shared globals plugin)
184
+ "@tiptap/core",
185
+ "@tiptap/vue-3",
186
+ "@tiptap/starter-kit",
187
+ // TipTap extensions used by core.plugin.ts
179
188
  "@tiptap/extension-table",
180
189
  "@tiptap/extension-table-row",
181
190
  "@tiptap/extension-table-header",
182
191
  "@tiptap/extension-table-cell",
183
192
  "@tiptap/extension-collaboration",
184
193
  "@tiptap/extension-collaboration-caret",
194
+ "@tiptap/extension-task-list",
195
+ "@tiptap/extension-task-item",
196
+ "@tiptap/extension-character-count",
197
+ "@tiptap/extension-text-align",
198
+ "@tiptap/extension-highlight",
199
+ "@tiptap/extension-color",
200
+ "@tiptap/extension-text-style",
201
+ "@tiptap/extension-superscript",
202
+ "@tiptap/extension-subscript",
203
+ "@tiptap/extension-code-block-lowlight",
204
+ "lowlight",
205
+ // Yjs + provider deps (shared globals + client plugin)
206
+ "yjs",
207
+ "@abraca/dabra",
208
+ "@noble/ed25519",
209
+ "@noble/hashes/sha512",
210
+ // Composable + util deps
211
+ "@vueuse/core",
185
212
  "nanoevents"
186
213
  ];
214
+ try {
215
+ createRequire(`${nuxt.options.rootDir}/`).resolve("jszip");
216
+ prebundleDeps.push("jszip");
217
+ } catch {
218
+ }
187
219
  nuxt.options.vite.optimizeDeps.include = [
188
- .../* @__PURE__ */ new Set([...includeList, ...prosemirrorDeps])
220
+ .../* @__PURE__ */ new Set([...includeList, ...prebundleDeps])
189
221
  ];
190
222
  if (options.features?.editor !== false) {
191
223
  nuxt.options.css.push(resolver.resolve("./runtime/assets/editor.css"));
@@ -273,6 +305,11 @@ const module$1 = defineNuxtModule({
273
305
  prefix: options.prefix ?? "",
274
306
  pathPrefix: false
275
307
  });
308
+ addComponentsDir({
309
+ path: resolver.resolve("./runtime/components/docs"),
310
+ prefix: options.prefix ?? "",
311
+ pathPrefix: false
312
+ });
276
313
  if (options.features?.chat) {
277
314
  addComponentsDir({
278
315
  path: resolver.resolve("./runtime/components/chat"),
@@ -282,7 +319,8 @@ const module$1 = defineNuxtModule({
282
319
  }
283
320
  addComponentsDir({
284
321
  path: resolver.resolve("./runtime/components"),
285
- prefix: options.prefix ?? ""
322
+ prefix: options.prefix ?? "",
323
+ ignore: ["**/docs/**"]
286
324
  });
287
325
  if (options.server?.render !== false) {
288
326
  addServerHandler({
@@ -0,0 +1,155 @@
1
+ declare const _default: typeof __VLS_export;
2
+ export default _default;
3
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
+ as: {
5
+ type: null;
6
+ required: false;
7
+ default: string;
8
+ };
9
+ defaultOpen: {
10
+ type: BooleanConstructor;
11
+ required: false;
12
+ default: undefined;
13
+ };
14
+ trailingIcon: {
15
+ type: null;
16
+ required: false;
17
+ };
18
+ color: {
19
+ type: null;
20
+ required: false;
21
+ };
22
+ variant: {
23
+ type: null;
24
+ required: false;
25
+ };
26
+ highlight: {
27
+ type: BooleanConstructor;
28
+ required: false;
29
+ default: boolean;
30
+ };
31
+ highlightColor: {
32
+ type: null;
33
+ required: false;
34
+ };
35
+ collapsible: {
36
+ type: BooleanConstructor;
37
+ required: false;
38
+ default: boolean;
39
+ };
40
+ level: {
41
+ type: NumberConstructor;
42
+ required: false;
43
+ default: number;
44
+ };
45
+ navigation: {
46
+ type: ArrayConstructor;
47
+ required: false;
48
+ };
49
+ class: {
50
+ type: null;
51
+ required: false;
52
+ };
53
+ ui: {
54
+ type: ObjectConstructor;
55
+ required: false;
56
+ };
57
+ disabled: {
58
+ type: BooleanConstructor;
59
+ required: false;
60
+ };
61
+ type: {
62
+ type: StringConstructor;
63
+ required: false;
64
+ default: string;
65
+ };
66
+ unmountOnHide: {
67
+ type: BooleanConstructor;
68
+ required: false;
69
+ default: boolean;
70
+ };
71
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
72
+ "update:modelValue": (...args: any[]) => void;
73
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
74
+ as: {
75
+ type: null;
76
+ required: false;
77
+ default: string;
78
+ };
79
+ defaultOpen: {
80
+ type: BooleanConstructor;
81
+ required: false;
82
+ default: undefined;
83
+ };
84
+ trailingIcon: {
85
+ type: null;
86
+ required: false;
87
+ };
88
+ color: {
89
+ type: null;
90
+ required: false;
91
+ };
92
+ variant: {
93
+ type: null;
94
+ required: false;
95
+ };
96
+ highlight: {
97
+ type: BooleanConstructor;
98
+ required: false;
99
+ default: boolean;
100
+ };
101
+ highlightColor: {
102
+ type: null;
103
+ required: false;
104
+ };
105
+ collapsible: {
106
+ type: BooleanConstructor;
107
+ required: false;
108
+ default: boolean;
109
+ };
110
+ level: {
111
+ type: NumberConstructor;
112
+ required: false;
113
+ default: number;
114
+ };
115
+ navigation: {
116
+ type: ArrayConstructor;
117
+ required: false;
118
+ };
119
+ class: {
120
+ type: null;
121
+ required: false;
122
+ };
123
+ ui: {
124
+ type: ObjectConstructor;
125
+ required: false;
126
+ };
127
+ disabled: {
128
+ type: BooleanConstructor;
129
+ required: false;
130
+ };
131
+ type: {
132
+ type: StringConstructor;
133
+ required: false;
134
+ default: string;
135
+ };
136
+ unmountOnHide: {
137
+ type: BooleanConstructor;
138
+ required: false;
139
+ default: boolean;
140
+ };
141
+ }>> & Readonly<{
142
+ "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
143
+ }>, {
144
+ type: string;
145
+ disabled: boolean;
146
+ level: number;
147
+ as: any;
148
+ collapsible: boolean;
149
+ highlight: boolean;
150
+ defaultOpen: boolean;
151
+ unmountOnHide: boolean;
152
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>, __VLS_Slots>;
153
+ type __VLS_WithSlots<T, S> = T & (new () => {
154
+ $slots: S;
155
+ });
@@ -0,0 +1,154 @@
1
+ <script>
2
+ import theme from "../../theme/content/content-navigation";
3
+ </script>
4
+
5
+ <script setup>
6
+ import { computed } from "vue";
7
+ import { Primitive, AccordionRoot, AccordionItem, AccordionTrigger, AccordionContent, useForwardPropsEmits } from "reka-ui";
8
+ import { reactivePick, createReusableTemplate } from "@vueuse/core";
9
+ import { useRoute, useAppConfig } from "#imports";
10
+ import { useComponentUI } from "@nuxt/ui/composables/useComponentUI";
11
+ import { pickLinkProps } from "@nuxt/ui/utils/link";
12
+ import { tv } from "@nuxt/ui/utils/tv";
13
+ import { mapContentNavigationItem } from "../../utils/content";
14
+ import ADocsNavigation from "./ADocsNavigation.vue";
15
+ defineOptions({ inheritAttrs: false });
16
+ const props = defineProps({
17
+ as: { type: null, required: false, default: "nav" },
18
+ defaultOpen: { type: Boolean, required: false, default: void 0 },
19
+ trailingIcon: { type: null, required: false },
20
+ color: { type: null, required: false },
21
+ variant: { type: null, required: false },
22
+ highlight: { type: Boolean, required: false, default: false },
23
+ highlightColor: { type: null, required: false },
24
+ collapsible: { type: Boolean, required: false, default: true },
25
+ level: { type: Number, required: false, default: 0 },
26
+ navigation: { type: Array, required: false },
27
+ class: { type: null, required: false },
28
+ ui: { type: Object, required: false },
29
+ disabled: { type: Boolean, required: false },
30
+ type: { type: String, required: false, default: "multiple" },
31
+ unmountOnHide: { type: Boolean, required: false, default: true }
32
+ });
33
+ const emits = defineEmits(["update:modelValue"]);
34
+ const slots = defineSlots();
35
+ const rootProps = useForwardPropsEmits(reactivePick(props, "collapsible", "type", "unmountOnHide"), emits);
36
+ const route = useRoute();
37
+ const appConfig = useAppConfig();
38
+ const uiProp = useComponentUI("contentNavigation", props);
39
+ const [DefineLinkTemplate, ReuseLinkTemplate] = createReusableTemplate();
40
+ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.contentNavigation || {} })({
41
+ color: props.color,
42
+ variant: props.variant,
43
+ highlight: props.highlight,
44
+ highlightColor: props.highlightColor || props.color
45
+ }));
46
+ const disabled = computed(() => props.disabled || props.type === "multiple" && props.collapsible === false);
47
+ function isRouteInTree(link, routePath) {
48
+ if (link.children?.length) {
49
+ return link.children.some((child) => isRouteInTree(child, routePath));
50
+ }
51
+ return routePath === link.path;
52
+ }
53
+ const defaultValue = computed(() => {
54
+ if (props.defaultOpen === false) {
55
+ return void 0;
56
+ }
57
+ if (props.defaultOpen === void 0) {
58
+ return props.type === "single" ? "0" : props.navigation?.map((link, index) => link.defaultOpen !== false && String(index)).filter(Boolean);
59
+ }
60
+ const indices = props.navigation?.reduce((acc, link, index) => {
61
+ if (isRouteInTree(link, route.path)) {
62
+ acc.push(String(index));
63
+ }
64
+ return acc;
65
+ }, []) || [];
66
+ return props.type === "multiple" ? indices : indices[0];
67
+ });
68
+ </script>
69
+
70
+ <template>
71
+ <DefineLinkTemplate v-slot="{ link, active }">
72
+ <slot name="link" :link="link" :active="active" :ui="ui">
73
+ <slot name="link-leading" :link="link" :active="active" :ui="ui">
74
+ <UIcon v-if="link.icon" :name="link.icon" data-slot="linkLeadingIcon" :class="ui.linkLeadingIcon({ class: [uiProp?.linkLeadingIcon, link.ui?.linkLeadingIcon], active })" />
75
+ </slot>
76
+
77
+ <span v-if="link.title || !!slots['link-title']" data-slot="linkTitle" :class="ui.linkTitle({ class: [uiProp?.linkTitle, link.ui?.linkTitle], active })">
78
+ <slot name="link-title" :link="link" :active="active" :ui="ui">
79
+ {{ link.title }}
80
+ </slot>
81
+
82
+ <UIcon v-if="link.target === '_blank'" :name="appConfig.ui.icons.external" data-slot="linkTitleExternalIcon" :class="ui.linkTitleExternalIcon({ class: [uiProp?.linkTitleExternalIcon, link.ui?.linkTitleExternalIcon], active })" />
83
+ </span>
84
+
85
+ <span v-if="link.badge || link.badge === 0 || link.children?.length && !disabled || link.trailingIcon || !!slots['link-trailing']" data-slot="linkTrailing" :class="ui.linkTrailing({ class: [uiProp?.linkTrailing, link.ui?.linkTrailing] })">
86
+ <slot name="link-trailing" :link="link" :active="active" :ui="ui">
87
+ <UBadge
88
+ v-if="link.badge || link.badge === 0"
89
+ color="neutral"
90
+ variant="outline"
91
+ :size="uiProp?.linkTrailingBadgeSize || ui.linkTrailingBadgeSize()"
92
+ v-bind="typeof link.badge === 'string' || typeof link.badge === 'number' ? { label: link.badge } : link.badge"
93
+ data-slot="linkTrailingBadge"
94
+ :class="ui.linkTrailingBadge({ class: uiProp?.linkTrailingBadge })"
95
+ />
96
+ <UIcon v-if="link.children?.length && !disabled" :name="link.trailingIcon || trailingIcon || appConfig.ui.icons.chevronDown" data-slot="linkTrailingIcon" :class="ui.linkTrailingIcon({ class: [uiProp?.linkTrailingIcon, link.ui?.linkTrailingIcon] })" />
97
+ <UIcon v-else-if="link.trailingIcon" :name="link.trailingIcon" data-slot="linkTrailingIcon" :class="ui.linkTrailingIcon({ class: [uiProp?.linkTrailingIcon, link.ui?.linkTrailingIcon] })" />
98
+ </slot>
99
+ </span>
100
+ </slot>
101
+ </DefineLinkTemplate>
102
+
103
+ <Primitive :as="as" v-bind="$attrs" :as-child="level > 0" data-slot="root" :class="ui.root({ class: [uiProp?.root, props.class] })">
104
+ <AccordionRoot as="ul" :disabled="disabled" v-bind="rootProps" :default-value="defaultValue" :class="level > 0 ? ui.listWithChildren({ class: uiProp?.listWithChildren }) : ui.list({ class: uiProp?.list })">
105
+ <template v-for="(link, index) in navigation" :key="index">
106
+ <AccordionItem
107
+ v-if="link.children?.length"
108
+ as="li"
109
+ :disabled="!!link.disabled"
110
+ data-slot="itemWithChildren"
111
+ :class="ui.itemWithChildren({ class: [uiProp?.itemWithChildren, link.ui?.itemWithChildren], level: level > 0 })"
112
+ :value="String(index)"
113
+ >
114
+ <AccordionTrigger
115
+ as="button"
116
+ :class="[
117
+ ui.link({ class: [uiProp?.link, link.ui?.link, link.class], active: link.active, disabled: !!link.disabled || disabled }),
118
+ ui.trigger({ class: [uiProp?.trigger, link.ui?.trigger], disabled: !!link.disabled || disabled })
119
+ ]"
120
+ >
121
+ <ReuseLinkTemplate :link="link" :active="link.active || false" />
122
+ </AccordionTrigger>
123
+
124
+ <AccordionContent data-slot="content" :class="ui.content({ class: [uiProp?.content, link.ui?.content] })">
125
+ <ADocsNavigation
126
+ v-bind="rootProps"
127
+ :navigation="link.children"
128
+ :default-open="defaultOpen"
129
+ :level="level + 1"
130
+ :trailing-icon="trailingIcon"
131
+ :color="color"
132
+ :variant="variant"
133
+ :highlight="highlight"
134
+ :highlight-color="highlightColor"
135
+ :ui="uiProp"
136
+ >
137
+ <template v-for="(_, name) in slots" #[name]="slotData">
138
+ <slot :name="name" v-bind="{ ...slotData, link: slotData.link }" />
139
+ </template>
140
+ </ADocsNavigation>
141
+ </AccordionContent>
142
+ </AccordionItem>
143
+
144
+ <li v-else data-slot="item" :class="ui.item({ class: [uiProp?.item, link.ui?.item], level: level > 0 })">
145
+ <ULink v-slot="{ active, ...slotProps }" v-bind="pickLinkProps(mapContentNavigationItem(link))" custom>
146
+ <ULinkBase v-bind="slotProps" data-slot="link" :class="ui.link({ class: [uiProp?.link, link.ui?.link, link.class], active, disabled: !!link.disabled, level: level > 0 })">
147
+ <ReuseLinkTemplate :link="link" :active="active" />
148
+ </ULinkBase>
149
+ </ULink>
150
+ </li>
151
+ </template>
152
+ </AccordionRoot>
153
+ </Primitive>
154
+ </template>
@@ -0,0 +1,155 @@
1
+ declare const _default: typeof __VLS_export;
2
+ export default _default;
3
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
+ as: {
5
+ type: null;
6
+ required: false;
7
+ default: string;
8
+ };
9
+ defaultOpen: {
10
+ type: BooleanConstructor;
11
+ required: false;
12
+ default: undefined;
13
+ };
14
+ trailingIcon: {
15
+ type: null;
16
+ required: false;
17
+ };
18
+ color: {
19
+ type: null;
20
+ required: false;
21
+ };
22
+ variant: {
23
+ type: null;
24
+ required: false;
25
+ };
26
+ highlight: {
27
+ type: BooleanConstructor;
28
+ required: false;
29
+ default: boolean;
30
+ };
31
+ highlightColor: {
32
+ type: null;
33
+ required: false;
34
+ };
35
+ collapsible: {
36
+ type: BooleanConstructor;
37
+ required: false;
38
+ default: boolean;
39
+ };
40
+ level: {
41
+ type: NumberConstructor;
42
+ required: false;
43
+ default: number;
44
+ };
45
+ navigation: {
46
+ type: ArrayConstructor;
47
+ required: false;
48
+ };
49
+ class: {
50
+ type: null;
51
+ required: false;
52
+ };
53
+ ui: {
54
+ type: ObjectConstructor;
55
+ required: false;
56
+ };
57
+ disabled: {
58
+ type: BooleanConstructor;
59
+ required: false;
60
+ };
61
+ type: {
62
+ type: StringConstructor;
63
+ required: false;
64
+ default: string;
65
+ };
66
+ unmountOnHide: {
67
+ type: BooleanConstructor;
68
+ required: false;
69
+ default: boolean;
70
+ };
71
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
72
+ "update:modelValue": (...args: any[]) => void;
73
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
74
+ as: {
75
+ type: null;
76
+ required: false;
77
+ default: string;
78
+ };
79
+ defaultOpen: {
80
+ type: BooleanConstructor;
81
+ required: false;
82
+ default: undefined;
83
+ };
84
+ trailingIcon: {
85
+ type: null;
86
+ required: false;
87
+ };
88
+ color: {
89
+ type: null;
90
+ required: false;
91
+ };
92
+ variant: {
93
+ type: null;
94
+ required: false;
95
+ };
96
+ highlight: {
97
+ type: BooleanConstructor;
98
+ required: false;
99
+ default: boolean;
100
+ };
101
+ highlightColor: {
102
+ type: null;
103
+ required: false;
104
+ };
105
+ collapsible: {
106
+ type: BooleanConstructor;
107
+ required: false;
108
+ default: boolean;
109
+ };
110
+ level: {
111
+ type: NumberConstructor;
112
+ required: false;
113
+ default: number;
114
+ };
115
+ navigation: {
116
+ type: ArrayConstructor;
117
+ required: false;
118
+ };
119
+ class: {
120
+ type: null;
121
+ required: false;
122
+ };
123
+ ui: {
124
+ type: ObjectConstructor;
125
+ required: false;
126
+ };
127
+ disabled: {
128
+ type: BooleanConstructor;
129
+ required: false;
130
+ };
131
+ type: {
132
+ type: StringConstructor;
133
+ required: false;
134
+ default: string;
135
+ };
136
+ unmountOnHide: {
137
+ type: BooleanConstructor;
138
+ required: false;
139
+ default: boolean;
140
+ };
141
+ }>> & Readonly<{
142
+ "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
143
+ }>, {
144
+ type: string;
145
+ disabled: boolean;
146
+ level: number;
147
+ as: any;
148
+ collapsible: boolean;
149
+ highlight: boolean;
150
+ defaultOpen: boolean;
151
+ unmountOnHide: boolean;
152
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>, __VLS_Slots>;
153
+ type __VLS_WithSlots<T, S> = T & (new () => {
154
+ $slots: S;
155
+ });