@iris-ui-kit/vue 0.1.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.
Files changed (164) hide show
  1. package/LICENSE +21 -0
  2. package/dist/admin.cjs +1869 -0
  3. package/dist/admin.cjs.map +1 -0
  4. package/dist/admin.d.cts +376 -0
  5. package/dist/admin.d.ts +376 -0
  6. package/dist/admin.js +10 -0
  7. package/dist/admin.js.map +1 -0
  8. package/dist/async.cjs +76 -0
  9. package/dist/async.cjs.map +1 -0
  10. package/dist/async.d.cts +59 -0
  11. package/dist/async.d.ts +59 -0
  12. package/dist/async.js +3 -0
  13. package/dist/async.js.map +1 -0
  14. package/dist/behaviors.cjs +659 -0
  15. package/dist/behaviors.cjs.map +1 -0
  16. package/dist/behaviors.d.cts +441 -0
  17. package/dist/behaviors.d.ts +441 -0
  18. package/dist/behaviors.js +3 -0
  19. package/dist/behaviors.js.map +1 -0
  20. package/dist/chunk-3FJUCHCC.js +146 -0
  21. package/dist/chunk-3FJUCHCC.js.map +1 -0
  22. package/dist/chunk-3R3QDLJC.js +172 -0
  23. package/dist/chunk-3R3QDLJC.js.map +1 -0
  24. package/dist/chunk-4FLIW67H.js +137 -0
  25. package/dist/chunk-4FLIW67H.js.map +1 -0
  26. package/dist/chunk-4FQ7XF52.js +3 -0
  27. package/dist/chunk-4FQ7XF52.js.map +1 -0
  28. package/dist/chunk-72PZMU6R.js +99 -0
  29. package/dist/chunk-72PZMU6R.js.map +1 -0
  30. package/dist/chunk-75GSYEJS.js +17 -0
  31. package/dist/chunk-75GSYEJS.js.map +1 -0
  32. package/dist/chunk-7IOJADZC.js +38 -0
  33. package/dist/chunk-7IOJADZC.js.map +1 -0
  34. package/dist/chunk-CIZGSGXN.js +651 -0
  35. package/dist/chunk-CIZGSGXN.js.map +1 -0
  36. package/dist/chunk-F77KIPOH.js +103 -0
  37. package/dist/chunk-F77KIPOH.js.map +1 -0
  38. package/dist/chunk-FJBYAIL4.js +1318 -0
  39. package/dist/chunk-FJBYAIL4.js.map +1 -0
  40. package/dist/chunk-H7HVVPYR.js +66 -0
  41. package/dist/chunk-H7HVVPYR.js.map +1 -0
  42. package/dist/chunk-I6D5VXQK.js +167 -0
  43. package/dist/chunk-I6D5VXQK.js.map +1 -0
  44. package/dist/chunk-PPYNXNGZ.js +73 -0
  45. package/dist/chunk-PPYNXNGZ.js.map +1 -0
  46. package/dist/chunk-QLUIKEMJ.js +1197 -0
  47. package/dist/chunk-QLUIKEMJ.js.map +1 -0
  48. package/dist/chunk-ROJV6RON.js +3 -0
  49. package/dist/chunk-ROJV6RON.js.map +1 -0
  50. package/dist/chunk-S43IHHBU.js +82 -0
  51. package/dist/chunk-S43IHHBU.js.map +1 -0
  52. package/dist/chunk-TCAXRWT6.js +108 -0
  53. package/dist/chunk-TCAXRWT6.js.map +1 -0
  54. package/dist/chunk-TQB5LVOH.js +17 -0
  55. package/dist/chunk-TQB5LVOH.js.map +1 -0
  56. package/dist/chunk-VM2CXEUA.js +46 -0
  57. package/dist/chunk-VM2CXEUA.js.map +1 -0
  58. package/dist/chunk-W2JVHGFR.js +103 -0
  59. package/dist/chunk-W2JVHGFR.js.map +1 -0
  60. package/dist/chunk-WL67XCH5.js +59 -0
  61. package/dist/chunk-WL67XCH5.js.map +1 -0
  62. package/dist/chunk-XCNCIG2I.js +165 -0
  63. package/dist/chunk-XCNCIG2I.js.map +1 -0
  64. package/dist/chunk-XSLBANUV.js +16 -0
  65. package/dist/chunk-XSLBANUV.js.map +1 -0
  66. package/dist/chunk-ZY4NLITM.js +73 -0
  67. package/dist/chunk-ZY4NLITM.js.map +1 -0
  68. package/dist/data.cjs +59 -0
  69. package/dist/data.cjs.map +1 -0
  70. package/dist/data.d.cts +46 -0
  71. package/dist/data.d.ts +46 -0
  72. package/dist/data.js +4 -0
  73. package/dist/data.js.map +1 -0
  74. package/dist/error-boundary.cjs +115 -0
  75. package/dist/error-boundary.cjs.map +1 -0
  76. package/dist/error-boundary.d.cts +60 -0
  77. package/dist/error-boundary.d.ts +60 -0
  78. package/dist/error-boundary.js +4 -0
  79. package/dist/error-boundary.js.map +1 -0
  80. package/dist/floating.cjs +149 -0
  81. package/dist/floating.cjs.map +1 -0
  82. package/dist/floating.d.cts +106 -0
  83. package/dist/floating.d.ts +106 -0
  84. package/dist/floating.js +4 -0
  85. package/dist/floating.js.map +1 -0
  86. package/dist/form.cjs +144 -0
  87. package/dist/form.cjs.map +1 -0
  88. package/dist/form.d.cts +128 -0
  89. package/dist/form.d.ts +128 -0
  90. package/dist/form.js +3 -0
  91. package/dist/form.js.map +1 -0
  92. package/dist/i18n.cjs +112 -0
  93. package/dist/i18n.cjs.map +1 -0
  94. package/dist/i18n.d.cts +99 -0
  95. package/dist/i18n.d.ts +99 -0
  96. package/dist/i18n.js +3 -0
  97. package/dist/i18n.js.map +1 -0
  98. package/dist/index.cjs +18673 -0
  99. package/dist/index.cjs.map +1 -0
  100. package/dist/index.d.cts +8087 -0
  101. package/dist/index.d.ts +8087 -0
  102. package/dist/index.js +13525 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/layouts.cjs +392 -0
  105. package/dist/layouts.cjs.map +1 -0
  106. package/dist/layouts.d.cts +406 -0
  107. package/dist/layouts.d.ts +406 -0
  108. package/dist/layouts.js +5 -0
  109. package/dist/layouts.js.map +1 -0
  110. package/dist/machine.cjs +19 -0
  111. package/dist/machine.cjs.map +1 -0
  112. package/dist/machine.d.cts +18 -0
  113. package/dist/machine.d.ts +18 -0
  114. package/dist/machine.js +4 -0
  115. package/dist/machine.js.map +1 -0
  116. package/dist/modal-utils.cjs +170 -0
  117. package/dist/modal-utils.cjs.map +1 -0
  118. package/dist/modal-utils.d.cts +43 -0
  119. package/dist/modal-utils.d.ts +43 -0
  120. package/dist/modal-utils.js +3 -0
  121. package/dist/modal-utils.js.map +1 -0
  122. package/dist/motion.cjs +88 -0
  123. package/dist/motion.cjs.map +1 -0
  124. package/dist/motion.d.cts +43 -0
  125. package/dist/motion.d.ts +43 -0
  126. package/dist/motion.js +3 -0
  127. package/dist/motion.js.map +1 -0
  128. package/dist/provider.cjs +272 -0
  129. package/dist/provider.cjs.map +1 -0
  130. package/dist/provider.d.cts +130 -0
  131. package/dist/provider.d.ts +130 -0
  132. package/dist/provider.js +6 -0
  133. package/dist/provider.js.map +1 -0
  134. package/dist/resource.cjs +25 -0
  135. package/dist/resource.cjs.map +1 -0
  136. package/dist/resource.d.cts +17 -0
  137. package/dist/resource.d.ts +17 -0
  138. package/dist/resource.js +3 -0
  139. package/dist/resource.js.map +1 -0
  140. package/dist/skeletons.cjs +1659 -0
  141. package/dist/skeletons.cjs.map +1 -0
  142. package/dist/skeletons.d.cts +179 -0
  143. package/dist/skeletons.d.ts +179 -0
  144. package/dist/skeletons.js +7 -0
  145. package/dist/skeletons.js.map +1 -0
  146. package/dist/skins.cjs +138 -0
  147. package/dist/skins.cjs.map +1 -0
  148. package/dist/skins.d.cts +67 -0
  149. package/dist/skins.d.ts +67 -0
  150. package/dist/skins.js +3 -0
  151. package/dist/skins.js.map +1 -0
  152. package/dist/theme.cjs +106 -0
  153. package/dist/theme.cjs.map +1 -0
  154. package/dist/theme.d.cts +103 -0
  155. package/dist/theme.d.ts +103 -0
  156. package/dist/theme.js +3 -0
  157. package/dist/theme.js.map +1 -0
  158. package/dist/undo.cjs +51 -0
  159. package/dist/undo.cjs.map +1 -0
  160. package/dist/undo.d.cts +48 -0
  161. package/dist/undo.d.ts +48 -0
  162. package/dist/undo.js +3 -0
  163. package/dist/undo.js.map +1 -0
  164. package/package.json +59 -0
@@ -0,0 +1,376 @@
1
+ import * as vue from 'vue';
2
+ import { PropType, VNode, ComputedRef, MaybeRefOrGetter } from 'vue';
3
+ import { NavNode, TabsNav, TabItem } from '@iris-ui-kit/core';
4
+ export { NavNode, TabItem, TabsNav, TabsNavConfig, TabsNavState, createTabsNav, findNavNode, findNavPath, firstLeaf, flattenNav, isBranch, isClosable, visibleNav } from '@iris-ui-kit/core';
5
+
6
+ type IrisAdminLayoutMode = 'sidebar' | 'full-content';
7
+ /**
8
+ * The CMS / admin shell — a Vben-style, router-agnostic, data-driven layout that
9
+ * composes IrisSidebarLayout + IrisHeaderLayout with the admin nav pieces. One
10
+ * `menus` tree drives the collapsible sidebar nav, the header breadcrumb, and
11
+ * (when a `tabs` store is passed) the multi-tab bar; `activeKey` is the current
12
+ * page (v-model). The host owns routing: react to `@select` / `update:activeKey`
13
+ * and render the page in the default slot (wrap it in `<KeepAlive>` keyed by
14
+ * `tabs.cacheKey` for Vben-style tab caching).
15
+ *
16
+ * Slots: `logo({ collapsed })`, `toolbar` (header end), default `({ activeKey })`,
17
+ * `footer`. Modes: `sidebar` (default) and `full-content` (chrome hidden).
18
+ */
19
+ declare const IrisAdminLayout: vue.DefineComponent<vue.ExtractPropTypes<{
20
+ /** Normalized nav tree driving menu + breadcrumb. */
21
+ menus: {
22
+ type: PropType<NavNode[]>;
23
+ required: true;
24
+ };
25
+ /** Active page key (v-model:activeKey). */
26
+ activeKey: {
27
+ type: StringConstructor;
28
+ default: undefined;
29
+ };
30
+ /** Sidebar collapsed (v-model:collapsed); undefined = uncontrolled. */
31
+ collapsed: {
32
+ type: PropType<boolean | undefined>;
33
+ default: undefined;
34
+ };
35
+ defaultCollapsed: {
36
+ type: BooleanConstructor;
37
+ default: boolean;
38
+ };
39
+ mode: {
40
+ type: PropType<IrisAdminLayoutMode>;
41
+ default: string;
42
+ };
43
+ /** Brand text shown next to the logo when expanded. */
44
+ appTitle: {
45
+ type: StringConstructor;
46
+ default: string;
47
+ };
48
+ /** Optional shared tabs store; when present the tab bar is rendered. */
49
+ tabs: {
50
+ type: PropType<TabsNav>;
51
+ default: undefined;
52
+ };
53
+ showBreadcrumb: {
54
+ type: BooleanConstructor;
55
+ default: boolean;
56
+ };
57
+ sidebarWidth: {
58
+ type: PropType<number | string>;
59
+ default: number;
60
+ };
61
+ collapsedWidth: {
62
+ type: PropType<number | string>;
63
+ default: number;
64
+ };
65
+ }>, () => VNode<vue.RendererNode, vue.RendererElement, {
66
+ [key: string]: any;
67
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
68
+ 'update:activeKey': (_key: string) => true;
69
+ 'update:collapsed': (_value: boolean) => true;
70
+ select: (_key: string, _node: NavNode) => true;
71
+ }, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
72
+ /** Normalized nav tree driving menu + breadcrumb. */
73
+ menus: {
74
+ type: PropType<NavNode[]>;
75
+ required: true;
76
+ };
77
+ /** Active page key (v-model:activeKey). */
78
+ activeKey: {
79
+ type: StringConstructor;
80
+ default: undefined;
81
+ };
82
+ /** Sidebar collapsed (v-model:collapsed); undefined = uncontrolled. */
83
+ collapsed: {
84
+ type: PropType<boolean | undefined>;
85
+ default: undefined;
86
+ };
87
+ defaultCollapsed: {
88
+ type: BooleanConstructor;
89
+ default: boolean;
90
+ };
91
+ mode: {
92
+ type: PropType<IrisAdminLayoutMode>;
93
+ default: string;
94
+ };
95
+ /** Brand text shown next to the logo when expanded. */
96
+ appTitle: {
97
+ type: StringConstructor;
98
+ default: string;
99
+ };
100
+ /** Optional shared tabs store; when present the tab bar is rendered. */
101
+ tabs: {
102
+ type: PropType<TabsNav>;
103
+ default: undefined;
104
+ };
105
+ showBreadcrumb: {
106
+ type: BooleanConstructor;
107
+ default: boolean;
108
+ };
109
+ sidebarWidth: {
110
+ type: PropType<number | string>;
111
+ default: number;
112
+ };
113
+ collapsedWidth: {
114
+ type: PropType<number | string>;
115
+ default: number;
116
+ };
117
+ }>> & Readonly<{
118
+ onSelect?: ((_key: string, _node: NavNode) => any) | undefined;
119
+ "onUpdate:collapsed"?: ((_value: boolean) => any) | undefined;
120
+ "onUpdate:activeKey"?: ((_key: string) => any) | undefined;
121
+ }>, {
122
+ mode: IrisAdminLayoutMode;
123
+ collapsed: boolean | undefined;
124
+ defaultCollapsed: boolean;
125
+ collapsedWidth: string | number;
126
+ activeKey: string;
127
+ tabs: TabsNav;
128
+ appTitle: string;
129
+ showBreadcrumb: boolean;
130
+ sidebarWidth: string | number;
131
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
132
+
133
+ /**
134
+ * Data-driven nested navigation menu — the sidebar nav of the admin shell.
135
+ * Renders a normalized `NavNode[]` tree as an accordion of expandable branches
136
+ * and selectable leaves; the active leaf and its ancestor branches are
137
+ * highlighted, and the active branch trail auto-expands. Router-agnostic: it
138
+ * takes `activeKey` + emits `select(key, node)`; the host owns navigation.
139
+ *
140
+ * `collapsed` switches to an icon-only rail (top-level items only); a branch
141
+ * click then jumps to its first leaf.
142
+ */
143
+ declare const IrisNavMenu: vue.DefineComponent<vue.ExtractPropTypes<{
144
+ /** Normalized nav tree. */
145
+ items: {
146
+ type: PropType<NavNode[]>;
147
+ required: true;
148
+ };
149
+ /** Key of the active leaf. */
150
+ activeKey: {
151
+ type: StringConstructor;
152
+ default: undefined;
153
+ };
154
+ /** Controlled expanded branch keys (v-model:expandedKeys). */
155
+ expandedKeys: {
156
+ type: PropType<string[]>;
157
+ default: undefined;
158
+ };
159
+ /** Initial expanded keys when uncontrolled (else the active trail expands). */
160
+ defaultExpandedKeys: {
161
+ type: PropType<string[]>;
162
+ default: undefined;
163
+ };
164
+ /** Icon-only rail (top-level items only). */
165
+ collapsed: {
166
+ type: BooleanConstructor;
167
+ default: boolean;
168
+ };
169
+ ariaLabel: {
170
+ type: StringConstructor;
171
+ default: undefined;
172
+ };
173
+ }>, () => VNode<vue.RendererNode, vue.RendererElement, {
174
+ [key: string]: any;
175
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
176
+ select: (_key: string, _node: NavNode) => true;
177
+ 'update:expandedKeys': (_keys: string[]) => true;
178
+ }, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
179
+ /** Normalized nav tree. */
180
+ items: {
181
+ type: PropType<NavNode[]>;
182
+ required: true;
183
+ };
184
+ /** Key of the active leaf. */
185
+ activeKey: {
186
+ type: StringConstructor;
187
+ default: undefined;
188
+ };
189
+ /** Controlled expanded branch keys (v-model:expandedKeys). */
190
+ expandedKeys: {
191
+ type: PropType<string[]>;
192
+ default: undefined;
193
+ };
194
+ /** Initial expanded keys when uncontrolled (else the active trail expands). */
195
+ defaultExpandedKeys: {
196
+ type: PropType<string[]>;
197
+ default: undefined;
198
+ };
199
+ /** Icon-only rail (top-level items only). */
200
+ collapsed: {
201
+ type: BooleanConstructor;
202
+ default: boolean;
203
+ };
204
+ ariaLabel: {
205
+ type: StringConstructor;
206
+ default: undefined;
207
+ };
208
+ }>> & Readonly<{
209
+ onSelect?: ((_key: string, _node: NavNode) => any) | undefined;
210
+ "onUpdate:expandedKeys"?: ((_keys: string[]) => any) | undefined;
211
+ }>, {
212
+ collapsed: boolean;
213
+ activeKey: string;
214
+ expandedKeys: string[];
215
+ defaultExpandedKeys: string[];
216
+ ariaLabel: string;
217
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
218
+
219
+ /**
220
+ * Breadcrumb trail for the admin header, driven by a `NavNode[]` ancestor chain
221
+ * (typically `findNavPath(menus, activeKey)`). The last crumb is the current
222
+ * page (auto-marked `aria-current` by IrisBreadcrumb); earlier crumbs are
223
+ * clickable and emit `select(key, node)` so the host can navigate.
224
+ */
225
+ declare const IrisAdminBreadcrumb: vue.DefineComponent<vue.ExtractPropTypes<{
226
+ /** Root→current ancestor chain. */
227
+ trail: {
228
+ type: PropType<NavNode[]>;
229
+ required: true;
230
+ };
231
+ /** Show each node's icon before its title. */
232
+ showIcon: {
233
+ type: BooleanConstructor;
234
+ default: boolean;
235
+ };
236
+ /** Hide the breadcrumb when the trail has a single crumb. */
237
+ hideSingle: {
238
+ type: BooleanConstructor;
239
+ default: boolean;
240
+ };
241
+ separator: {
242
+ type: StringConstructor;
243
+ default: string;
244
+ };
245
+ }>, () => VNode<vue.RendererNode, vue.RendererElement, {
246
+ [key: string]: any;
247
+ }> | null, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
248
+ select: (_key: string, _node: NavNode) => true;
249
+ }, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
250
+ /** Root→current ancestor chain. */
251
+ trail: {
252
+ type: PropType<NavNode[]>;
253
+ required: true;
254
+ };
255
+ /** Show each node's icon before its title. */
256
+ showIcon: {
257
+ type: BooleanConstructor;
258
+ default: boolean;
259
+ };
260
+ /** Hide the breadcrumb when the trail has a single crumb. */
261
+ hideSingle: {
262
+ type: BooleanConstructor;
263
+ default: boolean;
264
+ };
265
+ separator: {
266
+ type: StringConstructor;
267
+ default: string;
268
+ };
269
+ }>> & Readonly<{
270
+ onSelect?: ((_key: string, _node: NavNode) => any) | undefined;
271
+ }>, {
272
+ separator: string;
273
+ showIcon: boolean;
274
+ hideSingle: boolean;
275
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
276
+
277
+ /**
278
+ * Vben-style multi-tab bar over a shared {@link TabsNav} store. Each open page
279
+ * is a closable chip; clicking activates (`@change`), the × closes, and a
280
+ * trailing actions dropdown runs Refresh / Close / Close-others / Close-all on
281
+ * the active tab. The store owns the tab list + active key; the host watches it
282
+ * to sync routing + keep-alive.
283
+ *
284
+ * Keyboard (WAI-ARIA tablist, automatic activation): ←/→ move + activate the
285
+ * adjacent tab, Home/End jump to the first/last, Delete/Backspace closes the
286
+ * focused tab. Roving tabindex keeps a single tab stop.
287
+ */
288
+ declare const IrisAdminTabs: vue.DefineComponent<vue.ExtractPropTypes<{
289
+ /** Shared tabs store (from `createTabsNav`). */
290
+ nav: {
291
+ type: PropType<TabsNav>;
292
+ required: true;
293
+ };
294
+ }>, () => VNode<vue.RendererNode, vue.RendererElement, {
295
+ [key: string]: any;
296
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
297
+ change: (_key: string) => true;
298
+ close: (_key: string) => true;
299
+ refresh: (_key: string) => true;
300
+ }, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
301
+ /** Shared tabs store (from `createTabsNav`). */
302
+ nav: {
303
+ type: PropType<TabsNav>;
304
+ required: true;
305
+ };
306
+ }>> & Readonly<{
307
+ onChange?: ((_key: string) => any) | undefined;
308
+ onClose?: ((_key: string) => any) | undefined;
309
+ onRefresh?: ((_key: string) => any) | undefined;
310
+ }>, {}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
311
+
312
+ interface UseTabsNavReturn {
313
+ tabs: ComputedRef<TabItem[]>;
314
+ activeKey: ComputedRef<string | undefined>;
315
+ /** Keep-alive include-set (composite cache keys of all open tabs). */
316
+ cacheKeys: ComputedRef<string[]>;
317
+ open: TabsNav['open'];
318
+ activate: TabsNav['activate'];
319
+ close: TabsNav['close'];
320
+ closeOthers: TabsNav['closeOthers'];
321
+ closeAll: TabsNav['closeAll'];
322
+ closeLeft: TabsNav['closeLeft'];
323
+ closeRight: TabsNav['closeRight'];
324
+ refresh: TabsNav['refresh'];
325
+ setPinned: TabsNav['setPinned'];
326
+ cacheKey: TabsNav['cacheKey'];
327
+ }
328
+ /**
329
+ * Vue binding for a framework-agnostic {@link TabsNav} store. Pass a shared
330
+ * `createTabsNav()` instance (the host owns it so the tab bar and the keep-alive
331
+ * content can read the same state) and get reactive `tabs` / `activeKey` /
332
+ * `cacheKeys` plus the store's mutators.
333
+ *
334
+ * ```ts
335
+ * const nav = createTabsNav({ tabs: [{ key: 'home', title: 'Home', pinned: true }] })
336
+ * const { tabs, activeKey, open, close } = useTabsNav(nav)
337
+ * ```
338
+ */
339
+ declare function useTabsNav(nav: TabsNav): UseTabsNavReturn;
340
+
341
+ interface UseAdminShellConfig {
342
+ /** Normalized nav tree driving menu + breadcrumb. */
343
+ menus: MaybeRefOrGetter<NavNode[]>;
344
+ /** Active page key (controlled); undefined = uncontrolled. */
345
+ activeKey?: MaybeRefOrGetter<string | undefined>;
346
+ defaultActiveKey?: string;
347
+ onActiveKeyChange?: (key: string) => void;
348
+ /** Fired whenever a nav node / tab becomes active, with the resolved leaf node. */
349
+ onSelect?: (key: string, node: NavNode) => void;
350
+ /** Optional shared tabs store; the shell opens/reconciles tabs through it. */
351
+ tabs?: TabsNav;
352
+ }
353
+ interface UseAdminShellReturn {
354
+ /** Current active leaf key ('' when none). */
355
+ activeKey: ComputedRef<string>;
356
+ /** Select a nav node: a branch redirects to its first leaf, opens its tab. */
357
+ navigate: (node: NavNode) => void;
358
+ /** Reconcile when the active TAB changed (e.g. a close picked a neighbor). */
359
+ syncFromTab: (key: string) => void;
360
+ /** Ancestor→node breadcrumb trail of the active key. */
361
+ breadcrumb: ComputedRef<NavNode[]>;
362
+ }
363
+ /**
364
+ * Vue binding for the framework-agnostic {@link createAdminShell} controller —
365
+ * the menu→tab→active-key wiring that every AdminLayout used to re-implement
366
+ * byte-for-byte. The composable owns the controlled/uncontrolled `activeKey`
367
+ * reconciliation (idiomatic to Vue) and delegates navigate / syncFromTab /
368
+ * branch-resolution / breadcrumb to the shared core shell.
369
+ *
370
+ * Controlled mode renders from the prop directly (no flicker); a watcher keeps
371
+ * the shell's guard-base synced to the prop so the active-change callback fires
372
+ * with the same semantics as before.
373
+ */
374
+ declare function useAdminShell(config: UseAdminShellConfig): UseAdminShellReturn;
375
+
376
+ export { IrisAdminBreadcrumb, IrisAdminLayout, type IrisAdminLayoutMode, IrisAdminTabs, IrisNavMenu, type UseAdminShellConfig, type UseAdminShellReturn, type UseTabsNavReturn, useAdminShell, useTabsNav };