@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.
- package/LICENSE +21 -0
- package/dist/admin.cjs +1869 -0
- package/dist/admin.cjs.map +1 -0
- package/dist/admin.d.cts +376 -0
- package/dist/admin.d.ts +376 -0
- package/dist/admin.js +10 -0
- package/dist/admin.js.map +1 -0
- package/dist/async.cjs +76 -0
- package/dist/async.cjs.map +1 -0
- package/dist/async.d.cts +59 -0
- package/dist/async.d.ts +59 -0
- package/dist/async.js +3 -0
- package/dist/async.js.map +1 -0
- package/dist/behaviors.cjs +659 -0
- package/dist/behaviors.cjs.map +1 -0
- package/dist/behaviors.d.cts +441 -0
- package/dist/behaviors.d.ts +441 -0
- package/dist/behaviors.js +3 -0
- package/dist/behaviors.js.map +1 -0
- package/dist/chunk-3FJUCHCC.js +146 -0
- package/dist/chunk-3FJUCHCC.js.map +1 -0
- package/dist/chunk-3R3QDLJC.js +172 -0
- package/dist/chunk-3R3QDLJC.js.map +1 -0
- package/dist/chunk-4FLIW67H.js +137 -0
- package/dist/chunk-4FLIW67H.js.map +1 -0
- package/dist/chunk-4FQ7XF52.js +3 -0
- package/dist/chunk-4FQ7XF52.js.map +1 -0
- package/dist/chunk-72PZMU6R.js +99 -0
- package/dist/chunk-72PZMU6R.js.map +1 -0
- package/dist/chunk-75GSYEJS.js +17 -0
- package/dist/chunk-75GSYEJS.js.map +1 -0
- package/dist/chunk-7IOJADZC.js +38 -0
- package/dist/chunk-7IOJADZC.js.map +1 -0
- package/dist/chunk-CIZGSGXN.js +651 -0
- package/dist/chunk-CIZGSGXN.js.map +1 -0
- package/dist/chunk-F77KIPOH.js +103 -0
- package/dist/chunk-F77KIPOH.js.map +1 -0
- package/dist/chunk-FJBYAIL4.js +1318 -0
- package/dist/chunk-FJBYAIL4.js.map +1 -0
- package/dist/chunk-H7HVVPYR.js +66 -0
- package/dist/chunk-H7HVVPYR.js.map +1 -0
- package/dist/chunk-I6D5VXQK.js +167 -0
- package/dist/chunk-I6D5VXQK.js.map +1 -0
- package/dist/chunk-PPYNXNGZ.js +73 -0
- package/dist/chunk-PPYNXNGZ.js.map +1 -0
- package/dist/chunk-QLUIKEMJ.js +1197 -0
- package/dist/chunk-QLUIKEMJ.js.map +1 -0
- package/dist/chunk-ROJV6RON.js +3 -0
- package/dist/chunk-ROJV6RON.js.map +1 -0
- package/dist/chunk-S43IHHBU.js +82 -0
- package/dist/chunk-S43IHHBU.js.map +1 -0
- package/dist/chunk-TCAXRWT6.js +108 -0
- package/dist/chunk-TCAXRWT6.js.map +1 -0
- package/dist/chunk-TQB5LVOH.js +17 -0
- package/dist/chunk-TQB5LVOH.js.map +1 -0
- package/dist/chunk-VM2CXEUA.js +46 -0
- package/dist/chunk-VM2CXEUA.js.map +1 -0
- package/dist/chunk-W2JVHGFR.js +103 -0
- package/dist/chunk-W2JVHGFR.js.map +1 -0
- package/dist/chunk-WL67XCH5.js +59 -0
- package/dist/chunk-WL67XCH5.js.map +1 -0
- package/dist/chunk-XCNCIG2I.js +165 -0
- package/dist/chunk-XCNCIG2I.js.map +1 -0
- package/dist/chunk-XSLBANUV.js +16 -0
- package/dist/chunk-XSLBANUV.js.map +1 -0
- package/dist/chunk-ZY4NLITM.js +73 -0
- package/dist/chunk-ZY4NLITM.js.map +1 -0
- package/dist/data.cjs +59 -0
- package/dist/data.cjs.map +1 -0
- package/dist/data.d.cts +46 -0
- package/dist/data.d.ts +46 -0
- package/dist/data.js +4 -0
- package/dist/data.js.map +1 -0
- package/dist/error-boundary.cjs +115 -0
- package/dist/error-boundary.cjs.map +1 -0
- package/dist/error-boundary.d.cts +60 -0
- package/dist/error-boundary.d.ts +60 -0
- package/dist/error-boundary.js +4 -0
- package/dist/error-boundary.js.map +1 -0
- package/dist/floating.cjs +149 -0
- package/dist/floating.cjs.map +1 -0
- package/dist/floating.d.cts +106 -0
- package/dist/floating.d.ts +106 -0
- package/dist/floating.js +4 -0
- package/dist/floating.js.map +1 -0
- package/dist/form.cjs +144 -0
- package/dist/form.cjs.map +1 -0
- package/dist/form.d.cts +128 -0
- package/dist/form.d.ts +128 -0
- package/dist/form.js +3 -0
- package/dist/form.js.map +1 -0
- package/dist/i18n.cjs +112 -0
- package/dist/i18n.cjs.map +1 -0
- package/dist/i18n.d.cts +99 -0
- package/dist/i18n.d.ts +99 -0
- package/dist/i18n.js +3 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.cjs +18673 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +8087 -0
- package/dist/index.d.ts +8087 -0
- package/dist/index.js +13525 -0
- package/dist/index.js.map +1 -0
- package/dist/layouts.cjs +392 -0
- package/dist/layouts.cjs.map +1 -0
- package/dist/layouts.d.cts +406 -0
- package/dist/layouts.d.ts +406 -0
- package/dist/layouts.js +5 -0
- package/dist/layouts.js.map +1 -0
- package/dist/machine.cjs +19 -0
- package/dist/machine.cjs.map +1 -0
- package/dist/machine.d.cts +18 -0
- package/dist/machine.d.ts +18 -0
- package/dist/machine.js +4 -0
- package/dist/machine.js.map +1 -0
- package/dist/modal-utils.cjs +170 -0
- package/dist/modal-utils.cjs.map +1 -0
- package/dist/modal-utils.d.cts +43 -0
- package/dist/modal-utils.d.ts +43 -0
- package/dist/modal-utils.js +3 -0
- package/dist/modal-utils.js.map +1 -0
- package/dist/motion.cjs +88 -0
- package/dist/motion.cjs.map +1 -0
- package/dist/motion.d.cts +43 -0
- package/dist/motion.d.ts +43 -0
- package/dist/motion.js +3 -0
- package/dist/motion.js.map +1 -0
- package/dist/provider.cjs +272 -0
- package/dist/provider.cjs.map +1 -0
- package/dist/provider.d.cts +130 -0
- package/dist/provider.d.ts +130 -0
- package/dist/provider.js +6 -0
- package/dist/provider.js.map +1 -0
- package/dist/resource.cjs +25 -0
- package/dist/resource.cjs.map +1 -0
- package/dist/resource.d.cts +17 -0
- package/dist/resource.d.ts +17 -0
- package/dist/resource.js +3 -0
- package/dist/resource.js.map +1 -0
- package/dist/skeletons.cjs +1659 -0
- package/dist/skeletons.cjs.map +1 -0
- package/dist/skeletons.d.cts +179 -0
- package/dist/skeletons.d.ts +179 -0
- package/dist/skeletons.js +7 -0
- package/dist/skeletons.js.map +1 -0
- package/dist/skins.cjs +138 -0
- package/dist/skins.cjs.map +1 -0
- package/dist/skins.d.cts +67 -0
- package/dist/skins.d.ts +67 -0
- package/dist/skins.js +3 -0
- package/dist/skins.js.map +1 -0
- package/dist/theme.cjs +106 -0
- package/dist/theme.cjs.map +1 -0
- package/dist/theme.d.cts +103 -0
- package/dist/theme.d.ts +103 -0
- package/dist/theme.js +3 -0
- package/dist/theme.js.map +1 -0
- package/dist/undo.cjs +51 -0
- package/dist/undo.cjs.map +1 -0
- package/dist/undo.d.cts +48 -0
- package/dist/undo.d.ts +48 -0
- package/dist/undo.js +3 -0
- package/dist/undo.js.map +1 -0
- package/package.json +59 -0
package/dist/admin.d.ts
ADDED
|
@@ -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 };
|
package/dist/admin.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { IrisAdminBreadcrumb, IrisAdminLayout, IrisAdminTabs, IrisNavMenu, createTabsNav, findNavNode, findNavPath, firstLeaf, flattenNav, isBranch, isClosable, useAdminShell, useTabsNav, visibleNav } from './chunk-FJBYAIL4.js';
|
|
2
|
+
import './chunk-3FJUCHCC.js';
|
|
3
|
+
import './chunk-TQB5LVOH.js';
|
|
4
|
+
import './chunk-F77KIPOH.js';
|
|
5
|
+
import './chunk-I6D5VXQK.js';
|
|
6
|
+
import './chunk-72PZMU6R.js';
|
|
7
|
+
import './chunk-75GSYEJS.js';
|
|
8
|
+
import './chunk-TCAXRWT6.js';
|
|
9
|
+
//# sourceMappingURL=admin.js.map
|
|
10
|
+
//# sourceMappingURL=admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"admin.js"}
|
package/dist/async.cjs
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vue = require('vue');
|
|
4
|
+
var core = require('@iris-ui-kit/core');
|
|
5
|
+
|
|
6
|
+
// src/async/useAsyncResource.ts
|
|
7
|
+
function useAsyncResource(fetcher, options = {}) {
|
|
8
|
+
const config = "initialData" in options ? { initialData: options.initialData } : {};
|
|
9
|
+
const resource = core.createAsyncResource(fetcher, config);
|
|
10
|
+
const state = vue.ref(resource.getState());
|
|
11
|
+
const unsubscribe = resource.subscribe((next) => {
|
|
12
|
+
state.value = next;
|
|
13
|
+
});
|
|
14
|
+
vue.onBeforeUnmount(() => {
|
|
15
|
+
unsubscribe();
|
|
16
|
+
resource.cancel();
|
|
17
|
+
});
|
|
18
|
+
if (options.immediate) {
|
|
19
|
+
vue.onMounted(() => {
|
|
20
|
+
void resource.load(...[]);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
status: vue.computed(() => state.value.status),
|
|
25
|
+
data: vue.computed(() => state.value.data),
|
|
26
|
+
error: vue.computed(() => state.value.error),
|
|
27
|
+
isLoading: vue.computed(() => state.value.status === "loading"),
|
|
28
|
+
isError: vue.computed(() => state.value.status === "error"),
|
|
29
|
+
load: resource.load,
|
|
30
|
+
reload: resource.reload,
|
|
31
|
+
mutate: resource.mutate,
|
|
32
|
+
cancel: resource.cancel,
|
|
33
|
+
reset: resource.reset
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function usePaginatedResource(fetcher, options = {}) {
|
|
37
|
+
const resource = core.createPaginatedResource(fetcher, {
|
|
38
|
+
pageSize: options.pageSize,
|
|
39
|
+
mode: options.mode
|
|
40
|
+
});
|
|
41
|
+
const state = vue.ref(resource.getState());
|
|
42
|
+
const unsubscribe = resource.subscribe((next) => {
|
|
43
|
+
state.value = next;
|
|
44
|
+
});
|
|
45
|
+
vue.onBeforeUnmount(unsubscribe);
|
|
46
|
+
if (options.immediate) {
|
|
47
|
+
vue.onMounted(() => {
|
|
48
|
+
void (options.mode === "infinite" ? resource.loadMore() : resource.goToPage(1));
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
status: vue.computed(() => state.value.status),
|
|
53
|
+
items: vue.computed(() => state.value.items),
|
|
54
|
+
page: vue.computed(() => state.value.page),
|
|
55
|
+
pageSize: vue.computed(() => state.value.pageSize),
|
|
56
|
+
total: vue.computed(() => state.value.total),
|
|
57
|
+
error: vue.computed(() => state.value.error),
|
|
58
|
+
isLoading: vue.computed(() => state.value.status === "loading"),
|
|
59
|
+
isError: vue.computed(() => state.value.status === "error"),
|
|
60
|
+
// Touch state so this recomputes on every store change; hasMore() then
|
|
61
|
+
// reads the resource's fresh internal batch state.
|
|
62
|
+
hasMore: vue.computed(() => {
|
|
63
|
+
void state.value;
|
|
64
|
+
return resource.hasMore();
|
|
65
|
+
}),
|
|
66
|
+
goToPage: resource.goToPage,
|
|
67
|
+
loadMore: resource.loadMore,
|
|
68
|
+
refresh: resource.refresh,
|
|
69
|
+
setPageSize: resource.setPageSize
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
exports.useAsyncResource = useAsyncResource;
|
|
74
|
+
exports.usePaginatedResource = usePaginatedResource;
|
|
75
|
+
//# sourceMappingURL=async.cjs.map
|
|
76
|
+
//# sourceMappingURL=async.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/async/useAsyncResource.ts","../src/async/usePaginatedResource.ts"],"names":["createAsyncResource","ref","onBeforeUnmount","onMounted","computed","createPaginatedResource"],"mappings":";;;;;;AAqCO,SAAS,gBAAA,CACd,OAAA,EACA,OAAA,GAAsC,EAAC,EACT;AAC9B,EAAA,MAAM,MAAA,GACJ,iBAAiB,OAAA,GAAU,EAAE,aAAa,OAAA,CAAQ,WAAA,KAAgB,EAAC;AACrE,EAAA,MAAM,QAAA,GAAWA,wBAAA,CAA0B,OAAA,EAAS,MAAM,CAAA;AAE1D,EAAA,MAAM,KAAA,GAAQC,OAAA,CAAI,QAAA,CAAS,QAAA,EAAU,CAAA;AACrC,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,SAAA,CAAU,CAAC,IAAA,KAAS;AAC/C,IAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AAAA,EAChB,CAAC,CAAA;AACD,EAAAC,mBAAA,CAAgB,MAAM;AACpB,IAAA,WAAA,EAAY;AAIZ,IAAA,QAAA,CAAS,MAAA,EAAO;AAAA,EAClB,CAAC,CAAA;AAED,EAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,IAAAC,aAAA,CAAU,MAAM;AACd,MAAA,KAAK,QAAA,CAAS,IAAA,CAAK,GAAI,EAAmB,CAAA;AAAA,IAC5C,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQC,YAAA,CAAS,MAAM,KAAA,CAAM,MAAM,MAAM,CAAA;AAAA,IACzC,IAAA,EAAMA,YAAA,CAAS,MAAM,KAAA,CAAM,MAAM,IAAI,CAAA;AAAA,IACrC,KAAA,EAAOA,YAAA,CAAS,MAAM,KAAA,CAAM,MAAM,KAAK,CAAA;AAAA,IACvC,WAAWA,YAAA,CAAS,MAAM,KAAA,CAAM,KAAA,CAAM,WAAW,SAAS,CAAA;AAAA,IAC1D,SAASA,YAAA,CAAS,MAAM,KAAA,CAAM,KAAA,CAAM,WAAW,OAAO,CAAA;AAAA,IACtD,MAAM,QAAA,CAAS,IAAA;AAAA,IACf,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,OAAO,QAAA,CAAS;AAAA,GAClB;AACF;ACtCO,SAAS,oBAAA,CACd,OAAA,EACA,OAAA,GAAuC,EAAC,EACT;AAC/B,EAAA,MAAM,QAAA,GAAWC,6BAA2B,OAAA,EAAS;AAAA,IACnD,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,MAAM,OAAA,CAAQ;AAAA,GACf,CAAA;AAED,EAAA,MAAM,KAAA,GAAQJ,OAAAA,CAAI,QAAA,CAAS,QAAA,EAAU,CAAA;AACrC,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,SAAA,CAAU,CAAC,IAAA,KAAS;AAC/C,IAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AAAA,EAChB,CAAC,CAAA;AACD,EAAAC,oBAAgB,WAAW,CAAA;AAE3B,EAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,IAAAC,cAAU,MAAM;AACd,MAAA,MAAM,OAAA,CAAQ,SAAS,UAAA,GAAa,QAAA,CAAS,UAAS,GAAI,QAAA,CAAS,SAAS,CAAC,CAAA,CAAA;AAAA,IAC/E,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQC,YAAAA,CAAS,MAAM,KAAA,CAAM,MAAM,MAAM,CAAA;AAAA,IACzC,KAAA,EAAOA,YAAAA,CAAS,MAAM,KAAA,CAAM,MAAM,KAAK,CAAA;AAAA,IACvC,IAAA,EAAMA,YAAAA,CAAS,MAAM,KAAA,CAAM,MAAM,IAAI,CAAA;AAAA,IACrC,QAAA,EAAUA,YAAAA,CAAS,MAAM,KAAA,CAAM,MAAM,QAAQ,CAAA;AAAA,IAC7C,KAAA,EAAOA,YAAAA,CAAS,MAAM,KAAA,CAAM,MAAM,KAAK,CAAA;AAAA,IACvC,KAAA,EAAOA,YAAAA,CAAS,MAAM,KAAA,CAAM,MAAM,KAAK,CAAA;AAAA,IACvC,WAAWA,YAAAA,CAAS,MAAM,KAAA,CAAM,KAAA,CAAM,WAAW,SAAS,CAAA;AAAA,IAC1D,SAASA,YAAAA,CAAS,MAAM,KAAA,CAAM,KAAA,CAAM,WAAW,OAAO,CAAA;AAAA;AAAA;AAAA,IAGtD,OAAA,EAASA,aAAS,MAAM;AACtB,MAAA,KAAK,KAAA,CAAM,KAAA;AACX,MAAA,OAAO,SAAS,OAAA,EAAQ;AAAA,IAC1B,CAAC,CAAA;AAAA,IACD,UAAU,QAAA,CAAS,QAAA;AAAA,IACnB,UAAU,QAAA,CAAS,QAAA;AAAA,IACnB,SAAS,QAAA,CAAS,OAAA;AAAA,IAClB,aAAa,QAAA,CAAS;AAAA,GACxB;AACF","file":"async.cjs","sourcesContent":["import { computed, onBeforeUnmount, onMounted, ref, type ComputedRef, type Ref } from 'vue'\nimport {\n createAsyncResource,\n type AsyncResource,\n type AsyncResourceConfig,\n type AsyncState,\n type AsyncStatus,\n} from '@iris-ui-kit/core'\n\nexport interface UseAsyncResourceOptions<T> extends AsyncResourceConfig<T> {\n /** Run `load()` (no params) once on mount. Default `false`. */\n immediate?: boolean\n}\n\nexport interface UseAsyncResourceReturn<T, P extends unknown[]> {\n status: ComputedRef<AsyncStatus>\n data: ComputedRef<T | undefined>\n error: ComputedRef<unknown>\n isLoading: ComputedRef<boolean>\n isError: ComputedRef<boolean>\n load: AsyncResource<T, P>['load']\n reload: AsyncResource<T, P>['reload']\n mutate: AsyncResource<T, P>['mutate']\n cancel: AsyncResource<T, P>['cancel']\n reset: AsyncResource<T, P>['reset']\n}\n\n/**\n * Vue binding for the framework-agnostic async resource. Creates the resource\n * in `setup()` (runs once, so the fetcher closure stays live) and bridges its\n * state into computed refs.\n *\n * ```ts\n * const users = useAsyncResource(() => api.listUsers(), { immediate: true })\n * // <IrisTable :data=\"users.data.value ?? []\" :loading=\"users.isLoading.value\" />\n * ```\n */\nexport function useAsyncResource<T, P extends unknown[] = []>(\n fetcher: (...params: P) => Promise<T>,\n options: UseAsyncResourceOptions<T> = {},\n): UseAsyncResourceReturn<T, P> {\n const config: AsyncResourceConfig<T> =\n 'initialData' in options ? { initialData: options.initialData } : {}\n const resource = createAsyncResource<T, P>(fetcher, config)\n\n const state = ref(resource.getState()) as Ref<AsyncState<T>>\n const unsubscribe = resource.subscribe((next) => {\n state.value = next\n })\n onBeforeUnmount(() => {\n unsubscribe()\n // Abort any in-flight request on unmount so it can't write back into an\n // unmounted component (and cancels the underlying request when the fetcher\n // honors `signal`). Idempotent and safe with no in-flight load.\n resource.cancel()\n })\n\n if (options.immediate) {\n onMounted(() => {\n void resource.load(...([] as unknown as P))\n })\n }\n\n return {\n status: computed(() => state.value.status),\n data: computed(() => state.value.data),\n error: computed(() => state.value.error),\n isLoading: computed(() => state.value.status === 'loading'),\n isError: computed(() => state.value.status === 'error'),\n load: resource.load,\n reload: resource.reload,\n mutate: resource.mutate,\n cancel: resource.cancel,\n reset: resource.reset,\n }\n}\n","import { computed, onBeforeUnmount, onMounted, ref, type ComputedRef, type Ref } from 'vue'\nimport {\n createPaginatedResource,\n type PageQuery,\n type PageResult,\n type PaginatedResource,\n type PaginatedState,\n type PaginationMode,\n} from '@iris-ui-kit/core'\n\nexport interface UsePaginatedResourceOptions {\n pageSize?: number\n mode?: PaginationMode\n /** Load the first page on mount (page 1, or `loadMore` in infinite mode). */\n immediate?: boolean\n}\n\nexport interface UsePaginatedResourceReturn<T> {\n status: ComputedRef<PaginatedState<T>['status']>\n items: ComputedRef<T[]>\n page: ComputedRef<number>\n pageSize: ComputedRef<number>\n total: ComputedRef<number | undefined>\n error: ComputedRef<unknown>\n isLoading: ComputedRef<boolean>\n isError: ComputedRef<boolean>\n hasMore: ComputedRef<boolean>\n goToPage: PaginatedResource<T>['goToPage']\n loadMore: PaginatedResource<T>['loadMore']\n refresh: PaginatedResource<T>['refresh']\n setPageSize: PaginatedResource<T>['setPageSize']\n}\n\n/**\n * Vue binding for the server-side pagination resource. Created in `setup()`\n * (fetcher closure stays live) and bridged to computed refs.\n */\nexport function usePaginatedResource<T>(\n fetcher: (query: PageQuery) => Promise<PageResult<T>>,\n options: UsePaginatedResourceOptions = {},\n): UsePaginatedResourceReturn<T> {\n const resource = createPaginatedResource<T>(fetcher, {\n pageSize: options.pageSize,\n mode: options.mode,\n })\n\n const state = ref(resource.getState()) as Ref<PaginatedState<T>>\n const unsubscribe = resource.subscribe((next) => {\n state.value = next\n })\n onBeforeUnmount(unsubscribe)\n\n if (options.immediate) {\n onMounted(() => {\n void (options.mode === 'infinite' ? resource.loadMore() : resource.goToPage(1))\n })\n }\n\n return {\n status: computed(() => state.value.status),\n items: computed(() => state.value.items),\n page: computed(() => state.value.page),\n pageSize: computed(() => state.value.pageSize),\n total: computed(() => state.value.total),\n error: computed(() => state.value.error),\n isLoading: computed(() => state.value.status === 'loading'),\n isError: computed(() => state.value.status === 'error'),\n // Touch state so this recomputes on every store change; hasMore() then\n // reads the resource's fresh internal batch state.\n hasMore: computed(() => {\n void state.value\n return resource.hasMore()\n }),\n goToPage: resource.goToPage,\n loadMore: resource.loadMore,\n refresh: resource.refresh,\n setPageSize: resource.setPageSize,\n }\n}\n"]}
|
package/dist/async.d.cts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ComputedRef } from 'vue';
|
|
2
|
+
import { AsyncResourceConfig, AsyncStatus, AsyncResource, PaginationMode, PaginatedState, PaginatedResource, PageQuery, PageResult } from '@iris-ui-kit/core';
|
|
3
|
+
|
|
4
|
+
interface UseAsyncResourceOptions<T> extends AsyncResourceConfig<T> {
|
|
5
|
+
/** Run `load()` (no params) once on mount. Default `false`. */
|
|
6
|
+
immediate?: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface UseAsyncResourceReturn<T, P extends unknown[]> {
|
|
9
|
+
status: ComputedRef<AsyncStatus>;
|
|
10
|
+
data: ComputedRef<T | undefined>;
|
|
11
|
+
error: ComputedRef<unknown>;
|
|
12
|
+
isLoading: ComputedRef<boolean>;
|
|
13
|
+
isError: ComputedRef<boolean>;
|
|
14
|
+
load: AsyncResource<T, P>['load'];
|
|
15
|
+
reload: AsyncResource<T, P>['reload'];
|
|
16
|
+
mutate: AsyncResource<T, P>['mutate'];
|
|
17
|
+
cancel: AsyncResource<T, P>['cancel'];
|
|
18
|
+
reset: AsyncResource<T, P>['reset'];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Vue binding for the framework-agnostic async resource. Creates the resource
|
|
22
|
+
* in `setup()` (runs once, so the fetcher closure stays live) and bridges its
|
|
23
|
+
* state into computed refs.
|
|
24
|
+
*
|
|
25
|
+
* ```ts
|
|
26
|
+
* const users = useAsyncResource(() => api.listUsers(), { immediate: true })
|
|
27
|
+
* // <IrisTable :data="users.data.value ?? []" :loading="users.isLoading.value" />
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
declare function useAsyncResource<T, P extends unknown[] = []>(fetcher: (...params: P) => Promise<T>, options?: UseAsyncResourceOptions<T>): UseAsyncResourceReturn<T, P>;
|
|
31
|
+
|
|
32
|
+
interface UsePaginatedResourceOptions {
|
|
33
|
+
pageSize?: number;
|
|
34
|
+
mode?: PaginationMode;
|
|
35
|
+
/** Load the first page on mount (page 1, or `loadMore` in infinite mode). */
|
|
36
|
+
immediate?: boolean;
|
|
37
|
+
}
|
|
38
|
+
interface UsePaginatedResourceReturn<T> {
|
|
39
|
+
status: ComputedRef<PaginatedState<T>['status']>;
|
|
40
|
+
items: ComputedRef<T[]>;
|
|
41
|
+
page: ComputedRef<number>;
|
|
42
|
+
pageSize: ComputedRef<number>;
|
|
43
|
+
total: ComputedRef<number | undefined>;
|
|
44
|
+
error: ComputedRef<unknown>;
|
|
45
|
+
isLoading: ComputedRef<boolean>;
|
|
46
|
+
isError: ComputedRef<boolean>;
|
|
47
|
+
hasMore: ComputedRef<boolean>;
|
|
48
|
+
goToPage: PaginatedResource<T>['goToPage'];
|
|
49
|
+
loadMore: PaginatedResource<T>['loadMore'];
|
|
50
|
+
refresh: PaginatedResource<T>['refresh'];
|
|
51
|
+
setPageSize: PaginatedResource<T>['setPageSize'];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Vue binding for the server-side pagination resource. Created in `setup()`
|
|
55
|
+
* (fetcher closure stays live) and bridged to computed refs.
|
|
56
|
+
*/
|
|
57
|
+
declare function usePaginatedResource<T>(fetcher: (query: PageQuery) => Promise<PageResult<T>>, options?: UsePaginatedResourceOptions): UsePaginatedResourceReturn<T>;
|
|
58
|
+
|
|
59
|
+
export { type UseAsyncResourceOptions, type UseAsyncResourceReturn, type UsePaginatedResourceOptions, type UsePaginatedResourceReturn, useAsyncResource, usePaginatedResource };
|
package/dist/async.d.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ComputedRef } from 'vue';
|
|
2
|
+
import { AsyncResourceConfig, AsyncStatus, AsyncResource, PaginationMode, PaginatedState, PaginatedResource, PageQuery, PageResult } from '@iris-ui-kit/core';
|
|
3
|
+
|
|
4
|
+
interface UseAsyncResourceOptions<T> extends AsyncResourceConfig<T> {
|
|
5
|
+
/** Run `load()` (no params) once on mount. Default `false`. */
|
|
6
|
+
immediate?: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface UseAsyncResourceReturn<T, P extends unknown[]> {
|
|
9
|
+
status: ComputedRef<AsyncStatus>;
|
|
10
|
+
data: ComputedRef<T | undefined>;
|
|
11
|
+
error: ComputedRef<unknown>;
|
|
12
|
+
isLoading: ComputedRef<boolean>;
|
|
13
|
+
isError: ComputedRef<boolean>;
|
|
14
|
+
load: AsyncResource<T, P>['load'];
|
|
15
|
+
reload: AsyncResource<T, P>['reload'];
|
|
16
|
+
mutate: AsyncResource<T, P>['mutate'];
|
|
17
|
+
cancel: AsyncResource<T, P>['cancel'];
|
|
18
|
+
reset: AsyncResource<T, P>['reset'];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Vue binding for the framework-agnostic async resource. Creates the resource
|
|
22
|
+
* in `setup()` (runs once, so the fetcher closure stays live) and bridges its
|
|
23
|
+
* state into computed refs.
|
|
24
|
+
*
|
|
25
|
+
* ```ts
|
|
26
|
+
* const users = useAsyncResource(() => api.listUsers(), { immediate: true })
|
|
27
|
+
* // <IrisTable :data="users.data.value ?? []" :loading="users.isLoading.value" />
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
declare function useAsyncResource<T, P extends unknown[] = []>(fetcher: (...params: P) => Promise<T>, options?: UseAsyncResourceOptions<T>): UseAsyncResourceReturn<T, P>;
|
|
31
|
+
|
|
32
|
+
interface UsePaginatedResourceOptions {
|
|
33
|
+
pageSize?: number;
|
|
34
|
+
mode?: PaginationMode;
|
|
35
|
+
/** Load the first page on mount (page 1, or `loadMore` in infinite mode). */
|
|
36
|
+
immediate?: boolean;
|
|
37
|
+
}
|
|
38
|
+
interface UsePaginatedResourceReturn<T> {
|
|
39
|
+
status: ComputedRef<PaginatedState<T>['status']>;
|
|
40
|
+
items: ComputedRef<T[]>;
|
|
41
|
+
page: ComputedRef<number>;
|
|
42
|
+
pageSize: ComputedRef<number>;
|
|
43
|
+
total: ComputedRef<number | undefined>;
|
|
44
|
+
error: ComputedRef<unknown>;
|
|
45
|
+
isLoading: ComputedRef<boolean>;
|
|
46
|
+
isError: ComputedRef<boolean>;
|
|
47
|
+
hasMore: ComputedRef<boolean>;
|
|
48
|
+
goToPage: PaginatedResource<T>['goToPage'];
|
|
49
|
+
loadMore: PaginatedResource<T>['loadMore'];
|
|
50
|
+
refresh: PaginatedResource<T>['refresh'];
|
|
51
|
+
setPageSize: PaginatedResource<T>['setPageSize'];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Vue binding for the server-side pagination resource. Created in `setup()`
|
|
55
|
+
* (fetcher closure stays live) and bridged to computed refs.
|
|
56
|
+
*/
|
|
57
|
+
declare function usePaginatedResource<T>(fetcher: (query: PageQuery) => Promise<PageResult<T>>, options?: UsePaginatedResourceOptions): UsePaginatedResourceReturn<T>;
|
|
58
|
+
|
|
59
|
+
export { type UseAsyncResourceOptions, type UseAsyncResourceReturn, type UsePaginatedResourceOptions, type UsePaginatedResourceReturn, useAsyncResource, usePaginatedResource };
|
package/dist/async.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"async.js"}
|