@aortl/admin-react 0.16.2 → 0.18.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/CHANGELOG.md +37 -1
- package/dist/Alert.d.ts +14 -2
- package/dist/Alert.d.ts.map +1 -1
- package/dist/Avatar.d.ts +26 -0
- package/dist/Avatar.d.ts.map +1 -0
- package/dist/Badge.d.ts +8 -2
- package/dist/Badge.d.ts.map +1 -1
- package/dist/BrandTile.d.ts +16 -3
- package/dist/BrandTile.d.ts.map +1 -1
- package/dist/Card.d.ts +12 -2
- package/dist/Card.d.ts.map +1 -1
- package/dist/Dialog.d.ts +4 -1
- package/dist/Dialog.d.ts.map +1 -1
- package/dist/Drawer.d.ts +51 -0
- package/dist/Drawer.d.ts.map +1 -0
- package/dist/Field.d.ts +4 -1
- package/dist/Field.d.ts.map +1 -1
- package/dist/Indicator.d.ts +3 -1
- package/dist/Indicator.d.ts.map +1 -1
- package/dist/Input.d.ts +24 -2
- package/dist/Input.d.ts.map +1 -1
- package/dist/Item.d.ts +55 -0
- package/dist/Item.d.ts.map +1 -0
- package/dist/Menu.d.ts +7 -5
- package/dist/Menu.d.ts.map +1 -1
- package/dist/NumberInput.d.ts +28 -0
- package/dist/NumberInput.d.ts.map +1 -0
- package/dist/Pagination.d.ts +4 -1
- package/dist/Pagination.d.ts.map +1 -1
- package/dist/PropertyList.d.ts +10 -3
- package/dist/PropertyList.d.ts.map +1 -1
- package/dist/Separator.d.ts +11 -0
- package/dist/Separator.d.ts.map +1 -0
- package/dist/Sidebar.d.ts +16 -5
- package/dist/Sidebar.d.ts.map +1 -1
- package/dist/StatCard.d.ts +16 -1
- package/dist/StatCard.d.ts.map +1 -1
- package/dist/Table.d.ts +15 -1
- package/dist/Table.d.ts.map +1 -1
- package/dist/Timeline.d.ts +29 -0
- package/dist/Timeline.d.ts.map +1 -0
- package/dist/Tooltip.d.ts +4 -1
- package/dist/Tooltip.d.ts.map +1 -1
- package/dist/admin.scoped.css +1072 -127
- package/dist/cn.d.ts +7 -0
- package/dist/cn.d.ts.map +1 -1
- package/dist/dialog-internal.d.ts +17 -0
- package/dist/dialog-internal.d.ts.map +1 -0
- package/dist/index.cjs +758 -103
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +12 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +750 -104
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -2,8 +2,10 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
let clsx = require("clsx");
|
|
3
3
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
4
|
let react = require("react");
|
|
5
|
+
let _base_ui_react_avatar = require("@base-ui/react/avatar");
|
|
5
6
|
let _base_ui_react_button = require("@base-ui/react/button");
|
|
6
7
|
let _base_ui_react_input = require("@base-ui/react/input");
|
|
8
|
+
let _base_ui_react_number_field = require("@base-ui/react/number-field");
|
|
7
9
|
let _base_ui_react_field = require("@base-ui/react/field");
|
|
8
10
|
let _base_ui_react_checkbox = require("@base-ui/react/checkbox");
|
|
9
11
|
let _base_ui_react_radio = require("@base-ui/react/radio");
|
|
@@ -114,16 +116,47 @@ function renderIcon(icon, size = "1em") {
|
|
|
114
116
|
}
|
|
115
117
|
//#endregion
|
|
116
118
|
//#region src/Alert.tsx
|
|
117
|
-
function
|
|
119
|
+
function DismissIcon() {
|
|
120
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
121
|
+
width: "1em",
|
|
122
|
+
height: "1em",
|
|
123
|
+
viewBox: "0 0 24 24",
|
|
124
|
+
fill: "none",
|
|
125
|
+
stroke: "currentColor",
|
|
126
|
+
strokeWidth: "2",
|
|
127
|
+
strokeLinecap: "round",
|
|
128
|
+
strokeLinejoin: "round",
|
|
129
|
+
"aria-hidden": "true",
|
|
130
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M18 6 6 18" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "m6 6 12 12" })]
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
function AlertRoot({ variant, icon, title, description, action, onDismiss, dismissLabel = "Dismiss", classNames, className, role, children, ...rest }) {
|
|
118
134
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
119
135
|
role: role ?? (variant === "danger" || variant === "warning" ? "alert" : "status"),
|
|
120
136
|
className: cn(["alert", `alert-${variant}`], className),
|
|
121
137
|
...rest,
|
|
122
138
|
children: [
|
|
123
139
|
renderIcon(icon),
|
|
124
|
-
title !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AlertTitle, {
|
|
125
|
-
|
|
126
|
-
|
|
140
|
+
title !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AlertTitle, {
|
|
141
|
+
className: classNames?.title,
|
|
142
|
+
children: title
|
|
143
|
+
}) : null,
|
|
144
|
+
description !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AlertDescription, {
|
|
145
|
+
className: classNames?.description,
|
|
146
|
+
children: description
|
|
147
|
+
}) : null,
|
|
148
|
+
children,
|
|
149
|
+
action !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AlertAction, {
|
|
150
|
+
className: classNames?.action,
|
|
151
|
+
children: action
|
|
152
|
+
}) : null,
|
|
153
|
+
onDismiss ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
154
|
+
type: "button",
|
|
155
|
+
className: cn("alert-dismiss", classNames?.dismiss),
|
|
156
|
+
"aria-label": dismissLabel,
|
|
157
|
+
onClick: onDismiss,
|
|
158
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DismissIcon, {})
|
|
159
|
+
}) : null
|
|
127
160
|
]
|
|
128
161
|
});
|
|
129
162
|
}
|
|
@@ -139,9 +172,16 @@ function AlertDescription({ className, ...rest }) {
|
|
|
139
172
|
...rest
|
|
140
173
|
});
|
|
141
174
|
}
|
|
175
|
+
function AlertAction({ className, ...rest }) {
|
|
176
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
177
|
+
className: cn("alert-action", className),
|
|
178
|
+
...rest
|
|
179
|
+
});
|
|
180
|
+
}
|
|
142
181
|
var Alert = Object.assign(AlertRoot, {
|
|
143
182
|
Title: AlertTitle,
|
|
144
|
-
Description: AlertDescription
|
|
183
|
+
Description: AlertDescription,
|
|
184
|
+
Action: AlertAction
|
|
145
185
|
});
|
|
146
186
|
//#endregion
|
|
147
187
|
//#region src/AppShell.tsx
|
|
@@ -189,25 +229,109 @@ function AppShellMain({ className, ...rest }) {
|
|
|
189
229
|
var AppShell = Object.assign(AppShellRoot, { Main: AppShellMain });
|
|
190
230
|
//#endregion
|
|
191
231
|
//#region src/Badge.tsx
|
|
192
|
-
function
|
|
232
|
+
function RemoveIcon() {
|
|
233
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
234
|
+
width: "1em",
|
|
235
|
+
height: "1em",
|
|
236
|
+
viewBox: "0 0 24 24",
|
|
237
|
+
fill: "none",
|
|
238
|
+
stroke: "currentColor",
|
|
239
|
+
strokeWidth: "2",
|
|
240
|
+
strokeLinecap: "round",
|
|
241
|
+
strokeLinejoin: "round",
|
|
242
|
+
"aria-hidden": "true",
|
|
243
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M18 6 6 18" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "m6 6 12 12" })]
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
function Badge({ variant = "neutral", size = "md", icon, soft = false, onRemove, removeLabel = "Remove", className, children, ...rest }) {
|
|
193
247
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
194
248
|
className: cn([
|
|
195
249
|
"badge",
|
|
196
250
|
variant !== "neutral" && `badge-${variant}`,
|
|
197
|
-
size !== "md" && `badge-${size}
|
|
251
|
+
size !== "md" && `badge-${size}`,
|
|
252
|
+
soft && "badge-soft"
|
|
198
253
|
], className),
|
|
199
254
|
...rest,
|
|
200
|
-
children: [
|
|
255
|
+
children: [
|
|
256
|
+
renderIcon(icon),
|
|
257
|
+
children,
|
|
258
|
+
onRemove ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
259
|
+
type: "button",
|
|
260
|
+
className: cn("badge-remove", void 0),
|
|
261
|
+
"aria-label": removeLabel,
|
|
262
|
+
onClick: onRemove,
|
|
263
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RemoveIcon, {})
|
|
264
|
+
}) : null
|
|
265
|
+
]
|
|
201
266
|
});
|
|
202
267
|
}
|
|
203
268
|
//#endregion
|
|
204
269
|
//#region src/BrandTile.tsx
|
|
205
|
-
|
|
270
|
+
/**
|
|
271
|
+
* Brand/system mark for the navbar — monogram, icon, or shop logo. Precedence
|
|
272
|
+
* is `src` > `icon` > `monogram`. Monogram/icon tiles are `aria-hidden`; image
|
|
273
|
+
* tiles expose `alt` to assistive tech instead.
|
|
274
|
+
*/
|
|
275
|
+
function BrandTile({ variant = "solid", size = "md", monogram, icon, src, alt = "", className, children, ...rest }) {
|
|
276
|
+
const classes = cn([
|
|
277
|
+
"brand-tile",
|
|
278
|
+
variant !== "solid" && `brand-tile-${variant}`,
|
|
279
|
+
size === "lg" && "brand-tile-lg"
|
|
280
|
+
], className);
|
|
281
|
+
if (src) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
282
|
+
className: classes,
|
|
283
|
+
...rest,
|
|
284
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
|
|
285
|
+
src,
|
|
286
|
+
alt
|
|
287
|
+
})
|
|
288
|
+
});
|
|
206
289
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
207
|
-
className:
|
|
290
|
+
className: classes,
|
|
208
291
|
"aria-hidden": true,
|
|
209
292
|
...rest,
|
|
210
|
-
children: icon ? renderIcon(icon
|
|
293
|
+
children: icon ? renderIcon(icon) : children ?? monogram
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
//#endregion
|
|
297
|
+
//#region src/Avatar.tsx
|
|
298
|
+
/**
|
|
299
|
+
* Image avatar with an initials fallback. Initials show until the image loads
|
|
300
|
+
* (and again, React-only, if it errors); the vanilla CSS layers the `<img>`
|
|
301
|
+
* over the initials instead.
|
|
302
|
+
*/
|
|
303
|
+
function Avatar({ src, alt, initials, size = "md", shape = "circle", className, children, ...rest }) {
|
|
304
|
+
const fallback = children ?? initials;
|
|
305
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_base_ui_react_avatar.Avatar.Root, {
|
|
306
|
+
className: cn([
|
|
307
|
+
"avatar",
|
|
308
|
+
size !== "md" && `avatar-${size}`,
|
|
309
|
+
shape === "square" && "avatar-square"
|
|
310
|
+
], className),
|
|
311
|
+
...rest,
|
|
312
|
+
children: [fallback !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_avatar.Avatar.Fallback, { children: fallback }) : null, src !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_avatar.Avatar.Image, {
|
|
313
|
+
src,
|
|
314
|
+
alt
|
|
315
|
+
}) : null]
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
/** Overlapping stack of avatars; later children paint on top. `max` caps the visible count. */
|
|
319
|
+
function AvatarGroup({ max, size = "md", className, children, ...rest }) {
|
|
320
|
+
const items = react.Children.toArray(children);
|
|
321
|
+
const overflow = max !== void 0 && items.length > max ? items.length - max : 0;
|
|
322
|
+
const visible = overflow > 0 ? items.slice(0, max) : items;
|
|
323
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
324
|
+
className: cn("avatar-group", className),
|
|
325
|
+
...rest,
|
|
326
|
+
children: [visible, overflow > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
327
|
+
className: cn([
|
|
328
|
+
"avatar",
|
|
329
|
+
size !== "md" && `avatar-${size}`,
|
|
330
|
+
"avatar-more"
|
|
331
|
+
], void 0),
|
|
332
|
+
"aria-label": `+${overflow} more`,
|
|
333
|
+
children: ["+", overflow]
|
|
334
|
+
}) : null]
|
|
211
335
|
});
|
|
212
336
|
}
|
|
213
337
|
//#endregion
|
|
@@ -535,9 +659,52 @@ var Breadcrumbs = Object.assign(BreadcrumbsRoot, {
|
|
|
535
659
|
});
|
|
536
660
|
//#endregion
|
|
537
661
|
//#region src/Input.tsx
|
|
538
|
-
function
|
|
539
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.
|
|
662
|
+
function ClearIcon() {
|
|
663
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
664
|
+
width: "1em",
|
|
665
|
+
height: "1em",
|
|
666
|
+
viewBox: "0 0 24 24",
|
|
667
|
+
fill: "none",
|
|
668
|
+
stroke: "currentColor",
|
|
669
|
+
strokeWidth: "2",
|
|
670
|
+
strokeLinecap: "round",
|
|
671
|
+
strokeLinejoin: "round",
|
|
672
|
+
"aria-hidden": "true",
|
|
673
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M18 6 6 18" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "m6 6 12 12" })]
|
|
674
|
+
});
|
|
675
|
+
}
|
|
676
|
+
function Input({ variant = "bordered", inputSize = "md", icon, iconTrailing, clearable = false, clearLabel = "Clear", onClear, action, className, classNames, type = "text", value, defaultValue, onChange, disabled, readOnly, ref: consumerRef, ...rest }) {
|
|
677
|
+
const innerRef = (0, react.useRef)(null);
|
|
678
|
+
const isControlled = value !== void 0;
|
|
679
|
+
const [uncontrolledHasValue, setUncontrolledHasValue] = (0, react.useState)(() => defaultValue != null && String(defaultValue).length > 0);
|
|
680
|
+
const hasValue = isControlled ? value != null && String(value).length > 0 : uncontrolledHasValue;
|
|
681
|
+
const setRef = (0, react.useCallback)((node) => {
|
|
682
|
+
innerRef.current = node;
|
|
683
|
+
if (typeof consumerRef === "function") consumerRef(node);
|
|
684
|
+
else if (consumerRef) consumerRef.current = node;
|
|
685
|
+
}, [consumerRef]);
|
|
686
|
+
function handleChange(event) {
|
|
687
|
+
if (!isControlled) setUncontrolledHasValue(event.target.value.length > 0);
|
|
688
|
+
onChange?.(event);
|
|
689
|
+
}
|
|
690
|
+
function handleClear() {
|
|
691
|
+
const input = innerRef.current;
|
|
692
|
+
if (!input) return;
|
|
693
|
+
(Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value")?.set)?.call(input, "");
|
|
694
|
+
input.dispatchEvent(new Event("input", { bubbles: true }));
|
|
695
|
+
input.focus();
|
|
696
|
+
if (!isControlled) setUncontrolledHasValue(false);
|
|
697
|
+
onClear?.();
|
|
698
|
+
}
|
|
699
|
+
const showClear = clearable && hasValue && !disabled && !readOnly;
|
|
700
|
+
const inputEl = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_input.Input, {
|
|
701
|
+
ref: setRef,
|
|
540
702
|
type,
|
|
703
|
+
value,
|
|
704
|
+
defaultValue,
|
|
705
|
+
onChange: handleChange,
|
|
706
|
+
disabled,
|
|
707
|
+
readOnly,
|
|
541
708
|
className: cn([
|
|
542
709
|
"input",
|
|
543
710
|
variant !== "bordered" && `input-${variant}`,
|
|
@@ -545,6 +712,71 @@ function Input({ variant = "bordered", inputSize = "md", className, type = "text
|
|
|
545
712
|
], className),
|
|
546
713
|
...rest
|
|
547
714
|
});
|
|
715
|
+
if (!(icon != null || iconTrailing != null || action != null || clearable)) return inputEl;
|
|
716
|
+
const trailing = showClear ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
717
|
+
type: "button",
|
|
718
|
+
className: cn("input-action", classNames?.action),
|
|
719
|
+
"aria-label": clearLabel,
|
|
720
|
+
onClick: handleClear,
|
|
721
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ClearIcon, {})
|
|
722
|
+
}) : action ?? renderIcon(iconTrailing);
|
|
723
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
724
|
+
className: cn("input-icon", classNames?.wrapper),
|
|
725
|
+
children: [
|
|
726
|
+
renderIcon(icon),
|
|
727
|
+
inputEl,
|
|
728
|
+
trailing
|
|
729
|
+
]
|
|
730
|
+
});
|
|
731
|
+
}
|
|
732
|
+
function EyeIcon() {
|
|
733
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
734
|
+
width: "1em",
|
|
735
|
+
height: "1em",
|
|
736
|
+
viewBox: "0 0 24 24",
|
|
737
|
+
fill: "none",
|
|
738
|
+
stroke: "currentColor",
|
|
739
|
+
strokeWidth: "2",
|
|
740
|
+
strokeLinecap: "round",
|
|
741
|
+
strokeLinejoin: "round",
|
|
742
|
+
"aria-hidden": "true",
|
|
743
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6" })]
|
|
744
|
+
});
|
|
745
|
+
}
|
|
746
|
+
function EyeOffIcon() {
|
|
747
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
748
|
+
width: "1em",
|
|
749
|
+
height: "1em",
|
|
750
|
+
viewBox: "0 0 24 24",
|
|
751
|
+
fill: "none",
|
|
752
|
+
stroke: "currentColor",
|
|
753
|
+
strokeWidth: "2",
|
|
754
|
+
strokeLinecap: "round",
|
|
755
|
+
strokeLinejoin: "round",
|
|
756
|
+
"aria-hidden": "true",
|
|
757
|
+
children: [
|
|
758
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M10.585 10.587a2 2 0 0 0 2.829 2.828" }),
|
|
759
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M16.681 16.673a8.717 8.717 0 0 1 -4.681 1.327c-3.6 0 -6.6 -2 -9 -6c1.272 -2.12 2.712 -3.678 4.32 -4.674m2.86 -1.146a9.055 9.055 0 0 1 1.82 -.18c3.6 0 6.6 2 9 6c-.666 1.11 -1.379 2.067 -2.138 2.87" }),
|
|
760
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M3 3l18 18" })
|
|
761
|
+
]
|
|
762
|
+
});
|
|
763
|
+
}
|
|
764
|
+
/** Password field with a trailing reveal toggle. Emits the same `.input` / `.input-action` classes. */
|
|
765
|
+
function PasswordInput({ revealLabel = "Show password", classNames, ...rest }) {
|
|
766
|
+
const [revealed, setRevealed] = (0, react.useState)(false);
|
|
767
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Input, {
|
|
768
|
+
type: revealed ? "text" : "password",
|
|
769
|
+
action: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
770
|
+
type: "button",
|
|
771
|
+
className: cn("input-action", classNames?.action),
|
|
772
|
+
"aria-label": revealLabel,
|
|
773
|
+
"aria-pressed": revealed,
|
|
774
|
+
onClick: () => setRevealed((v) => !v),
|
|
775
|
+
children: revealed ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EyeOffIcon, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EyeIcon, {})
|
|
776
|
+
}),
|
|
777
|
+
classNames,
|
|
778
|
+
...rest
|
|
779
|
+
});
|
|
548
780
|
}
|
|
549
781
|
//#endregion
|
|
550
782
|
//#region src/FileInput.tsx
|
|
@@ -575,8 +807,69 @@ function InputGroupAddon({ className, ...rest }) {
|
|
|
575
807
|
}
|
|
576
808
|
var InputGroup = Object.assign(InputGroupRoot, { Addon: InputGroupAddon });
|
|
577
809
|
//#endregion
|
|
810
|
+
//#region src/NumberInput.tsx
|
|
811
|
+
function MinusIcon() {
|
|
812
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
813
|
+
width: "1em",
|
|
814
|
+
height: "1em",
|
|
815
|
+
viewBox: "0 0 24 24",
|
|
816
|
+
fill: "none",
|
|
817
|
+
stroke: "currentColor",
|
|
818
|
+
strokeWidth: "2",
|
|
819
|
+
strokeLinecap: "round",
|
|
820
|
+
strokeLinejoin: "round",
|
|
821
|
+
"aria-hidden": "true",
|
|
822
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M5 12h14" })
|
|
823
|
+
});
|
|
824
|
+
}
|
|
825
|
+
function PlusIcon() {
|
|
826
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
827
|
+
width: "1em",
|
|
828
|
+
height: "1em",
|
|
829
|
+
viewBox: "0 0 24 24",
|
|
830
|
+
fill: "none",
|
|
831
|
+
stroke: "currentColor",
|
|
832
|
+
strokeWidth: "2",
|
|
833
|
+
strokeLinecap: "round",
|
|
834
|
+
strokeLinejoin: "round",
|
|
835
|
+
"aria-hidden": "true",
|
|
836
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M12 5v14M5 12h14" })
|
|
837
|
+
});
|
|
838
|
+
}
|
|
839
|
+
/**
|
|
840
|
+
* Numeric field with stepper buttons over Base UI NumberField (clamp-on-blur,
|
|
841
|
+
* step, `Intl` formatting via `format`). The vanilla bundle styles a native
|
|
842
|
+
* `<input type="number">` and steps with `stepUp()` / `stepDown()`.
|
|
843
|
+
*/
|
|
844
|
+
function NumberInput({ size = "md", classNames, placeholder, inputAriaLabel, decrementLabel = "Decrease", incrementLabel = "Increase", decrementIcon, incrementIcon, className, ...rootProps }) {
|
|
845
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_number_field.NumberField.Root, {
|
|
846
|
+
className: cn("number-input-root", className),
|
|
847
|
+
...rootProps,
|
|
848
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_base_ui_react_number_field.NumberField.Group, {
|
|
849
|
+
className: cn(["number-input", size !== "md" && `number-input-${size}`], classNames?.group),
|
|
850
|
+
children: [
|
|
851
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_number_field.NumberField.Decrement, {
|
|
852
|
+
className: cn("number-input-step", classNames?.decrement),
|
|
853
|
+
"aria-label": decrementLabel,
|
|
854
|
+
children: decrementIcon ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MinusIcon, {})
|
|
855
|
+
}),
|
|
856
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_number_field.NumberField.Input, {
|
|
857
|
+
className: cn("number-input-field", classNames?.input),
|
|
858
|
+
placeholder,
|
|
859
|
+
"aria-label": inputAriaLabel
|
|
860
|
+
}),
|
|
861
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_number_field.NumberField.Increment, {
|
|
862
|
+
className: cn("number-input-step", classNames?.increment),
|
|
863
|
+
"aria-label": incrementLabel,
|
|
864
|
+
children: incrementIcon ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PlusIcon, {})
|
|
865
|
+
})
|
|
866
|
+
]
|
|
867
|
+
})
|
|
868
|
+
});
|
|
869
|
+
}
|
|
870
|
+
//#endregion
|
|
578
871
|
//#region src/Indicator.tsx
|
|
579
|
-
function Indicator({ label, variant = "neutral", size = "sm", icon, placement = "top-end", offset, className, "aria-label": ariaLabel, style: styleProp, children, ...rest }) {
|
|
872
|
+
function Indicator({ label, variant = "neutral", size = "sm", icon, placement = "top-end", offset, max, className, "aria-label": ariaLabel, style: styleProp, children, ...rest }) {
|
|
580
873
|
const [vertical, horizontal] = placement.split("-");
|
|
581
874
|
const placementClasses = [
|
|
582
875
|
"indicator-item",
|
|
@@ -584,6 +877,7 @@ function Indicator({ label, variant = "neutral", size = "sm", icon, placement =
|
|
|
584
877
|
horizontal !== "end" && `indicator-${horizontal}`
|
|
585
878
|
];
|
|
586
879
|
const hasContent = label !== void 0 || icon !== void 0;
|
|
880
|
+
const displayLabel = typeof label === "number" && max !== void 0 && label > max ? `${max}+` : label;
|
|
587
881
|
const style = offset !== void 0 ? {
|
|
588
882
|
...styleProp,
|
|
589
883
|
"--indicator-offset": `${offset}px`
|
|
@@ -598,7 +892,7 @@ function Indicator({ label, variant = "neutral", size = "sm", icon, placement =
|
|
|
598
892
|
size,
|
|
599
893
|
icon,
|
|
600
894
|
"aria-label": ariaLabel,
|
|
601
|
-
children:
|
|
895
|
+
children: displayLabel
|
|
602
896
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
603
897
|
className: cn([
|
|
604
898
|
...placementClasses,
|
|
@@ -627,6 +921,20 @@ function Link({ external, icon, iconTrailing, className, target, rel, children,
|
|
|
627
921
|
});
|
|
628
922
|
}
|
|
629
923
|
//#endregion
|
|
924
|
+
//#region src/Separator.tsx
|
|
925
|
+
/**
|
|
926
|
+
* A styled `<hr>` (implicit `role="separator"`). Margins are zeroed — spacing
|
|
927
|
+
* comes from the parent's gap or margin utilities.
|
|
928
|
+
*/
|
|
929
|
+
function Separator({ orientation = "horizontal", className, ...rest }) {
|
|
930
|
+
const vertical = orientation === "vertical";
|
|
931
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("hr", {
|
|
932
|
+
className: cn(["separator", vertical && "separator-vertical"], className),
|
|
933
|
+
"aria-orientation": vertical ? "vertical" : void 0,
|
|
934
|
+
...rest
|
|
935
|
+
});
|
|
936
|
+
}
|
|
937
|
+
//#endregion
|
|
630
938
|
//#region src/Pagination.tsx
|
|
631
939
|
/** Pure (safe during render): previous, numbers/ellipses (`boundaryCount` at each end, `siblingCount` around `page`), next. */
|
|
632
940
|
function getPaginationItems({ page, total, siblingCount = 1, boundaryCount = 1 }) {
|
|
@@ -690,7 +998,7 @@ function range(start, end) {
|
|
|
690
998
|
for (let i = start; i <= end; i++) out.push(i);
|
|
691
999
|
return out;
|
|
692
1000
|
}
|
|
693
|
-
function Pagination({ page, total, onPageChange, siblingCount = 1, boundaryCount = 1, previousIcon, nextIcon, renderItem, className, "aria-label": ariaLabel = "Pagination", ...rest }) {
|
|
1001
|
+
function Pagination({ page, total, onPageChange, siblingCount = 1, boundaryCount = 1, previousIcon, nextIcon, renderItem, className, classNames, "aria-label": ariaLabel = "Pagination", ...rest }) {
|
|
694
1002
|
const items = getPaginationItems({
|
|
695
1003
|
page,
|
|
696
1004
|
total,
|
|
@@ -704,8 +1012,8 @@ function Pagination({ page, total, onPageChange, siblingCount = 1, boundaryCount
|
|
|
704
1012
|
className: cn("pagination", className),
|
|
705
1013
|
...rest,
|
|
706
1014
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", { children: items.map((item, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", {
|
|
707
|
-
className: cn("page-item",
|
|
708
|
-
children: renderItem ? renderItem(item) : defaultRender(item, onPageChange, prev, next)
|
|
1015
|
+
className: cn("page-item", classNames?.item),
|
|
1016
|
+
children: renderItem ? renderItem(item) : defaultRender(item, onPageChange, prev, next, classNames)
|
|
709
1017
|
}, paginationItemKey(item, i))) })
|
|
710
1018
|
});
|
|
711
1019
|
}
|
|
@@ -746,11 +1054,11 @@ function paginationItemKey(item, index) {
|
|
|
746
1054
|
default: return `${index}`;
|
|
747
1055
|
}
|
|
748
1056
|
}
|
|
749
|
-
function defaultRender(item, onPageChange, prev, next) {
|
|
1057
|
+
function defaultRender(item, onPageChange, prev, next, classNames) {
|
|
750
1058
|
switch (item.type) {
|
|
751
1059
|
case "previous": return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
752
1060
|
type: "button",
|
|
753
|
-
className: cn("page-link",
|
|
1061
|
+
className: cn("page-link", classNames?.link),
|
|
754
1062
|
"aria-label": "Previous page",
|
|
755
1063
|
"aria-disabled": item.disabled || void 0,
|
|
756
1064
|
disabled: item.disabled,
|
|
@@ -759,7 +1067,7 @@ function defaultRender(item, onPageChange, prev, next) {
|
|
|
759
1067
|
});
|
|
760
1068
|
case "next": return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
761
1069
|
type: "button",
|
|
762
|
-
className: cn("page-link",
|
|
1070
|
+
className: cn("page-link", classNames?.link),
|
|
763
1071
|
"aria-label": "Next page",
|
|
764
1072
|
"aria-disabled": item.disabled || void 0,
|
|
765
1073
|
disabled: item.disabled,
|
|
@@ -767,13 +1075,13 @@ function defaultRender(item, onPageChange, prev, next) {
|
|
|
767
1075
|
children: next
|
|
768
1076
|
});
|
|
769
1077
|
case "ellipsis": return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
770
|
-
className: cn("page-ellipsis",
|
|
1078
|
+
className: cn("page-ellipsis", classNames?.ellipsis),
|
|
771
1079
|
"aria-hidden": "true",
|
|
772
1080
|
children: "…"
|
|
773
1081
|
});
|
|
774
1082
|
case "page": return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
775
1083
|
type: "button",
|
|
776
|
-
className: cn(["page-link", item.selected && "active"],
|
|
1084
|
+
className: cn(["page-link", item.selected && "active"], classNames?.link),
|
|
777
1085
|
"aria-current": item.selected ? "page" : void 0,
|
|
778
1086
|
"aria-label": `Page ${item.page}`,
|
|
779
1087
|
onClick: () => onPageChange(item.page),
|
|
@@ -806,7 +1114,7 @@ function CheckboxRoot({ className, children, ...rest }) {
|
|
|
806
1114
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_checkbox.Checkbox.Root, {
|
|
807
1115
|
className: cn("checkbox", className),
|
|
808
1116
|
...rest,
|
|
809
|
-
children: children ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CheckboxIndicator, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CheckIcon$
|
|
1117
|
+
children: children ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CheckboxIndicator, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CheckIcon$2, {}) })
|
|
810
1118
|
});
|
|
811
1119
|
}
|
|
812
1120
|
function CheckboxIndicator({ className, ...rest }) {
|
|
@@ -815,7 +1123,7 @@ function CheckboxIndicator({ className, ...rest }) {
|
|
|
815
1123
|
...rest
|
|
816
1124
|
});
|
|
817
1125
|
}
|
|
818
|
-
function CheckIcon$
|
|
1126
|
+
function CheckIcon$2() {
|
|
819
1127
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
820
1128
|
viewBox: "0 0 24 24",
|
|
821
1129
|
fill: "none",
|
|
@@ -944,7 +1252,7 @@ function SelectItemIndicator({ className, children, ...rest }) {
|
|
|
944
1252
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_select.Select.ItemIndicator, {
|
|
945
1253
|
className: cn("select-item-indicator", className),
|
|
946
1254
|
...rest,
|
|
947
|
-
children: children ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CheckIcon, {})
|
|
1255
|
+
children: children ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CheckIcon$1, {})
|
|
948
1256
|
});
|
|
949
1257
|
}
|
|
950
1258
|
function SelectGroup(props) {
|
|
@@ -956,7 +1264,7 @@ function SelectGroupLabel({ className, ...rest }) {
|
|
|
956
1264
|
...rest
|
|
957
1265
|
});
|
|
958
1266
|
}
|
|
959
|
-
function CheckIcon() {
|
|
1267
|
+
function CheckIcon$1() {
|
|
960
1268
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
961
1269
|
viewBox: "0 0 24 24",
|
|
962
1270
|
fill: "none",
|
|
@@ -1018,13 +1326,14 @@ function Container({ size = "md", compact, className, ...rest }) {
|
|
|
1018
1326
|
* The bare `.card` container — no body, no title. Use this when you need to
|
|
1019
1327
|
* compose the internals yourself (e.g. a media block above the body).
|
|
1020
1328
|
*/
|
|
1021
|
-
function CardContainer({ variant = "default", bordered, compact, className, ...rest }) {
|
|
1329
|
+
function CardContainer({ variant = "default", bordered, compact, scroll, className, ...rest }) {
|
|
1022
1330
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1023
1331
|
className: cn([
|
|
1024
1332
|
"card",
|
|
1025
1333
|
variant !== "default" && `card-${variant}`,
|
|
1026
1334
|
bordered && "card-bordered",
|
|
1027
|
-
compact && "card-compact"
|
|
1335
|
+
compact && "card-compact",
|
|
1336
|
+
scroll && "card-scroll"
|
|
1028
1337
|
], className),
|
|
1029
1338
|
...rest
|
|
1030
1339
|
});
|
|
@@ -1034,23 +1343,48 @@ function CardContainer({ variant = "default", bordered, compact, className, ...r
|
|
|
1034
1343
|
* an optional title (with icon), description, children, and actions. For
|
|
1035
1344
|
* anything outside that shape, use `<Card.Container>` and compose by hand.
|
|
1036
1345
|
*/
|
|
1037
|
-
function CardRoot({ variant, bordered, compact, icon, title, description, toolbar, actions, className, children, ...rest }) {
|
|
1346
|
+
function CardRoot({ variant, bordered, compact, media, icon, title, description, toolbar, actions, className, classNames, children, ...rest }) {
|
|
1038
1347
|
const titleEl = icon !== void 0 || title !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CardTitle, {
|
|
1039
1348
|
icon,
|
|
1349
|
+
className: classNames?.title,
|
|
1040
1350
|
children: title
|
|
1041
1351
|
}) : null;
|
|
1042
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.
|
|
1352
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(CardContainer, {
|
|
1043
1353
|
variant,
|
|
1044
1354
|
bordered,
|
|
1045
1355
|
compact,
|
|
1046
1356
|
className,
|
|
1047
1357
|
...rest,
|
|
1048
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1358
|
+
children: [media !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CardMedia, {
|
|
1359
|
+
className: classNames?.media,
|
|
1360
|
+
children: media
|
|
1361
|
+
}) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(CardBody, {
|
|
1362
|
+
className: classNames?.body,
|
|
1363
|
+
children: [
|
|
1364
|
+
toolbar !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(CardHeader, {
|
|
1365
|
+
className: classNames?.header,
|
|
1366
|
+
children: [titleEl, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CardToolbar, {
|
|
1367
|
+
className: classNames?.toolbar,
|
|
1368
|
+
children: toolbar
|
|
1369
|
+
})]
|
|
1370
|
+
}) : titleEl,
|
|
1371
|
+
description !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CardDescription, {
|
|
1372
|
+
className: classNames?.description,
|
|
1373
|
+
children: description
|
|
1374
|
+
}) : null,
|
|
1375
|
+
children,
|
|
1376
|
+
actions !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CardActions, {
|
|
1377
|
+
className: classNames?.actions,
|
|
1378
|
+
children: actions
|
|
1379
|
+
}) : null
|
|
1380
|
+
]
|
|
1381
|
+
})]
|
|
1382
|
+
});
|
|
1383
|
+
}
|
|
1384
|
+
function CardMedia({ className, ...rest }) {
|
|
1385
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1386
|
+
className: cn("card-media", className),
|
|
1387
|
+
...rest
|
|
1054
1388
|
});
|
|
1055
1389
|
}
|
|
1056
1390
|
function CardBody({ className, ...rest }) {
|
|
@@ -1092,6 +1426,7 @@ function CardActions({ className, ...rest }) {
|
|
|
1092
1426
|
}
|
|
1093
1427
|
var Card = Object.assign(CardRoot, {
|
|
1094
1428
|
Container: CardContainer,
|
|
1429
|
+
Media: CardMedia,
|
|
1095
1430
|
Body: CardBody,
|
|
1096
1431
|
Header: CardHeader,
|
|
1097
1432
|
Toolbar: CardToolbar,
|
|
@@ -1101,12 +1436,17 @@ var Card = Object.assign(CardRoot, {
|
|
|
1101
1436
|
});
|
|
1102
1437
|
//#endregion
|
|
1103
1438
|
//#region src/StatCard.tsx
|
|
1439
|
+
function trendIntent(direction) {
|
|
1440
|
+
if (direction === "down") return "negative";
|
|
1441
|
+
if (direction === "flat") return "neutral";
|
|
1442
|
+
return "positive";
|
|
1443
|
+
}
|
|
1104
1444
|
/**
|
|
1105
1445
|
* Compact KPI tile (label / value / detail) on a `.card` shell, so it shares
|
|
1106
1446
|
* every card modifier — `compact`/`bordered` map to `.card-compact`/`.card-bordered`.
|
|
1107
1447
|
* Free-form tiles: `<Card>`; label/value tables: `<PropertyList>`.
|
|
1108
1448
|
*/
|
|
1109
|
-
function StatCard({ variant = "default", label, value, detail, icon, compact, bordered, className, children, ...rest }) {
|
|
1449
|
+
function StatCard({ variant = "default", label, value, detail, trend, icon, compact, bordered, className, classNames, children, ...rest }) {
|
|
1110
1450
|
const hasLabel = label !== void 0;
|
|
1111
1451
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1112
1452
|
className: cn([
|
|
@@ -1119,15 +1459,21 @@ function StatCard({ variant = "default", label, value, detail, icon, compact, bo
|
|
|
1119
1459
|
...rest,
|
|
1120
1460
|
children: [
|
|
1121
1461
|
hasLabel ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
|
|
1122
|
-
className: cn("stat-card-label",
|
|
1462
|
+
className: cn("stat-card-label", classNames?.label),
|
|
1123
1463
|
children: [renderIcon(icon), label]
|
|
1124
1464
|
}) : null,
|
|
1125
1465
|
value !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
1126
|
-
className: cn("stat-card-value",
|
|
1466
|
+
className: cn("stat-card-value", classNames?.value),
|
|
1127
1467
|
children: value
|
|
1128
1468
|
}) : null,
|
|
1469
|
+
trend !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
1470
|
+
className: cn("stat-card-trend", classNames?.trend),
|
|
1471
|
+
"data-trend": trend.direction ?? "up",
|
|
1472
|
+
"data-intent": trend.intent ?? trendIntent(trend.direction ?? "up"),
|
|
1473
|
+
children: trend.value
|
|
1474
|
+
}) : null,
|
|
1129
1475
|
detail !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
1130
|
-
className: cn("stat-card-detail",
|
|
1476
|
+
className: cn("stat-card-detail", classNames?.detail),
|
|
1131
1477
|
children: detail
|
|
1132
1478
|
}) : null,
|
|
1133
1479
|
children
|
|
@@ -1135,6 +1481,137 @@ function StatCard({ variant = "default", label, value, detail, icon, compact, bo
|
|
|
1135
1481
|
});
|
|
1136
1482
|
}
|
|
1137
1483
|
//#endregion
|
|
1484
|
+
//#region src/Timeline.tsx
|
|
1485
|
+
function TimelineRoot({ numbered, className, ...rest }) {
|
|
1486
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ol", {
|
|
1487
|
+
className: cn(["timeline", numbered && "timeline-numbered"], className),
|
|
1488
|
+
...rest
|
|
1489
|
+
});
|
|
1490
|
+
}
|
|
1491
|
+
function TimelineItem({ status = "default", icon, marker, title, time, description, className, classNames, children, ...rest }) {
|
|
1492
|
+
let indicator;
|
|
1493
|
+
if (marker !== void 0) indicator = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1494
|
+
className: cn("timeline-marker", classNames?.marker),
|
|
1495
|
+
children: marker
|
|
1496
|
+
});
|
|
1497
|
+
else if (icon != null) indicator = renderIcon(icon);
|
|
1498
|
+
else indicator = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: cn("timeline-dot", classNames?.dot) });
|
|
1499
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
|
|
1500
|
+
className: cn(["timeline-item", status !== "default" && `timeline-item-${status}`], className),
|
|
1501
|
+
...rest,
|
|
1502
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1503
|
+
className: cn("timeline-indicator", classNames?.indicator),
|
|
1504
|
+
children: indicator
|
|
1505
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1506
|
+
className: cn("timeline-content", classNames?.content),
|
|
1507
|
+
children: [
|
|
1508
|
+
title !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1509
|
+
className: cn("timeline-title", classNames?.title),
|
|
1510
|
+
children: title
|
|
1511
|
+
}) : null,
|
|
1512
|
+
time !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1513
|
+
className: cn("timeline-time", classNames?.time),
|
|
1514
|
+
children: time
|
|
1515
|
+
}) : null,
|
|
1516
|
+
description !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1517
|
+
className: cn("timeline-description", classNames?.description),
|
|
1518
|
+
children: description
|
|
1519
|
+
}) : null,
|
|
1520
|
+
children
|
|
1521
|
+
]
|
|
1522
|
+
})]
|
|
1523
|
+
});
|
|
1524
|
+
}
|
|
1525
|
+
var Timeline = Object.assign(TimelineRoot, { Item: TimelineItem });
|
|
1526
|
+
//#endregion
|
|
1527
|
+
//#region src/Item.tsx
|
|
1528
|
+
/** The bare row primitive — just the `.item` shell, for layouts the default `<Item>` doesn't fit. */
|
|
1529
|
+
function ItemContainer({ variant = "default", size = "md", asLink, className, ...rest }) {
|
|
1530
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1531
|
+
className: cn([
|
|
1532
|
+
"item",
|
|
1533
|
+
variant !== "default" && `item-${variant}`,
|
|
1534
|
+
size !== "md" && `item-${size}`,
|
|
1535
|
+
asLink && "item-link"
|
|
1536
|
+
], className),
|
|
1537
|
+
...rest
|
|
1538
|
+
});
|
|
1539
|
+
}
|
|
1540
|
+
function ItemMedia({ className, ...rest }) {
|
|
1541
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1542
|
+
className: cn("item-media", className),
|
|
1543
|
+
...rest
|
|
1544
|
+
});
|
|
1545
|
+
}
|
|
1546
|
+
function ItemContent({ className, ...rest }) {
|
|
1547
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1548
|
+
className: cn("item-content", className),
|
|
1549
|
+
...rest
|
|
1550
|
+
});
|
|
1551
|
+
}
|
|
1552
|
+
function ItemTitle({ className, ...rest }) {
|
|
1553
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1554
|
+
className: cn("item-title", className),
|
|
1555
|
+
...rest
|
|
1556
|
+
});
|
|
1557
|
+
}
|
|
1558
|
+
function ItemDescription({ className, ...rest }) {
|
|
1559
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1560
|
+
className: cn("item-description", className),
|
|
1561
|
+
...rest
|
|
1562
|
+
});
|
|
1563
|
+
}
|
|
1564
|
+
function ItemActions({ className, ...rest }) {
|
|
1565
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1566
|
+
className: cn("item-actions", className),
|
|
1567
|
+
...rest
|
|
1568
|
+
});
|
|
1569
|
+
}
|
|
1570
|
+
/** Opinionated row with media / title+description / actions shorthand. For other shapes, compose `<Item.Container>`. */
|
|
1571
|
+
function ItemRoot({ media, icon, title, description, actions, classNames, children, ...rest }) {
|
|
1572
|
+
const leading = media ?? renderIcon(icon);
|
|
1573
|
+
const hasContent = title !== void 0 || description !== void 0;
|
|
1574
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(ItemContainer, {
|
|
1575
|
+
...rest,
|
|
1576
|
+
children: [
|
|
1577
|
+
leading != null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ItemMedia, {
|
|
1578
|
+
className: classNames?.media,
|
|
1579
|
+
children: leading
|
|
1580
|
+
}) : null,
|
|
1581
|
+
hasContent ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(ItemContent, {
|
|
1582
|
+
className: classNames?.content,
|
|
1583
|
+
children: [title !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ItemTitle, {
|
|
1584
|
+
className: classNames?.title,
|
|
1585
|
+
children: title
|
|
1586
|
+
}) : null, description !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ItemDescription, {
|
|
1587
|
+
className: classNames?.description,
|
|
1588
|
+
children: description
|
|
1589
|
+
}) : null]
|
|
1590
|
+
}) : null,
|
|
1591
|
+
children,
|
|
1592
|
+
actions !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ItemActions, {
|
|
1593
|
+
className: classNames?.actions,
|
|
1594
|
+
children: actions
|
|
1595
|
+
}) : null
|
|
1596
|
+
]
|
|
1597
|
+
});
|
|
1598
|
+
}
|
|
1599
|
+
/** Divided vertical stack of items. */
|
|
1600
|
+
function ItemGroup({ bordered, className, ...rest }) {
|
|
1601
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1602
|
+
className: cn(["item-group", bordered && "item-group-bordered"], className),
|
|
1603
|
+
...rest
|
|
1604
|
+
});
|
|
1605
|
+
}
|
|
1606
|
+
var Item = Object.assign(ItemRoot, {
|
|
1607
|
+
Container: ItemContainer,
|
|
1608
|
+
Media: ItemMedia,
|
|
1609
|
+
Content: ItemContent,
|
|
1610
|
+
Title: ItemTitle,
|
|
1611
|
+
Description: ItemDescription,
|
|
1612
|
+
Actions: ItemActions
|
|
1613
|
+
});
|
|
1614
|
+
//#endregion
|
|
1138
1615
|
//#region src/chart-internal.ts
|
|
1139
1616
|
/**
|
|
1140
1617
|
* Multi-series palette of existing Flexoki tokens, not a new token layer. The
|
|
@@ -1378,24 +1855,15 @@ var StackedBar = Object.assign(StackedBarRoot, {
|
|
|
1378
1855
|
Legend: ChartLegend
|
|
1379
1856
|
});
|
|
1380
1857
|
//#endregion
|
|
1381
|
-
//#region src/
|
|
1858
|
+
//#region src/dialog-internal.ts
|
|
1382
1859
|
var DialogContext = (0, react.createContext)(null);
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
strokeWidth: "2",
|
|
1391
|
-
strokeLinecap: "round",
|
|
1392
|
-
strokeLinejoin: "round",
|
|
1393
|
-
"aria-hidden": "true",
|
|
1394
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M18 6 6 18" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "m6 6 12 12" })]
|
|
1395
|
-
});
|
|
1396
|
-
}
|
|
1397
|
-
/** The bare `<dialog>` primitive — for layouts the default `<Dialog>` doesn't fit. */
|
|
1398
|
-
function DialogContainer({ open, onOpenChange, size = "md", closedby = "any", className, children, ref: consumerRef, ...rest }) {
|
|
1860
|
+
/**
|
|
1861
|
+
* Drives a native `<dialog>` from a controlled `open` prop, shared by `<Dialog>`
|
|
1862
|
+
* and `<Drawer>`: merges the consumer ref, calls `showModal()` / `close()` on
|
|
1863
|
+
* change, and reports closes (Esc, backdrop, form submit) via `onOpenChange`.
|
|
1864
|
+
* Returns `ref` for the portal container context.
|
|
1865
|
+
*/
|
|
1866
|
+
function useDialogElement(open, onOpenChange, consumerRef) {
|
|
1399
1867
|
const ref = (0, react.useRef)(null);
|
|
1400
1868
|
const onOpenChangeRef = (0, react.useRef)(onOpenChange);
|
|
1401
1869
|
onOpenChangeRef.current = onOpenChange;
|
|
@@ -1417,8 +1885,33 @@ function DialogContainer({ open, onOpenChange, size = "md", closedby = "any", cl
|
|
|
1417
1885
|
el.addEventListener("close", handleClose);
|
|
1418
1886
|
return () => el.removeEventListener("close", handleClose);
|
|
1419
1887
|
}, []);
|
|
1888
|
+
return {
|
|
1889
|
+
setRef,
|
|
1890
|
+
ctx: { close: () => ref.current?.close() },
|
|
1891
|
+
ref
|
|
1892
|
+
};
|
|
1893
|
+
}
|
|
1894
|
+
//#endregion
|
|
1895
|
+
//#region src/Dialog.tsx
|
|
1896
|
+
function DefaultCloseIcon() {
|
|
1897
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
1898
|
+
width: "16",
|
|
1899
|
+
height: "16",
|
|
1900
|
+
viewBox: "0 0 24 24",
|
|
1901
|
+
fill: "none",
|
|
1902
|
+
stroke: "currentColor",
|
|
1903
|
+
strokeWidth: "2",
|
|
1904
|
+
strokeLinecap: "round",
|
|
1905
|
+
strokeLinejoin: "round",
|
|
1906
|
+
"aria-hidden": "true",
|
|
1907
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M18 6 6 18" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "m6 6 12 12" })]
|
|
1908
|
+
});
|
|
1909
|
+
}
|
|
1910
|
+
/** The bare `<dialog>` primitive — for layouts the default `<Dialog>` doesn't fit. */
|
|
1911
|
+
function DialogContainer({ open, onOpenChange, size = "md", closedby = "any", className, children, ref: consumerRef, ...rest }) {
|
|
1912
|
+
const { setRef, ctx, ref } = useDialogElement(open, onOpenChange, consumerRef);
|
|
1420
1913
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogContext.Provider, {
|
|
1421
|
-
value:
|
|
1914
|
+
value: ctx,
|
|
1422
1915
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PortalContainerContext.Provider, {
|
|
1423
1916
|
value: ref,
|
|
1424
1917
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("dialog", {
|
|
@@ -1477,19 +1970,35 @@ function DialogCloseButton({ icon, className, children, onClick, type = "button"
|
|
|
1477
1970
|
});
|
|
1478
1971
|
}
|
|
1479
1972
|
/** Standard modal with shorthand-driven header/body/footer. For other shapes, compose `<Dialog.Container>` by hand. */
|
|
1480
|
-
function DialogRoot({ icon, title, description, actions, dismissible = true, closeLabel = "Close", children, ...containerProps }) {
|
|
1973
|
+
function DialogRoot({ icon, title, description, actions, dismissible = true, closeLabel = "Close", classNames, children, ...containerProps }) {
|
|
1481
1974
|
const hasTitle = title !== void 0 || icon !== void 0;
|
|
1482
1975
|
const showHeader = hasTitle || dismissible;
|
|
1483
1976
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DialogContainer, {
|
|
1484
1977
|
...containerProps,
|
|
1485
1978
|
children: [
|
|
1486
|
-
showHeader ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DialogHeader, {
|
|
1487
|
-
|
|
1488
|
-
children:
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1979
|
+
showHeader ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DialogHeader, {
|
|
1980
|
+
className: classNames?.header,
|
|
1981
|
+
children: [hasTitle ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogTitle, {
|
|
1982
|
+
icon,
|
|
1983
|
+
className: classNames?.title,
|
|
1984
|
+
children: title
|
|
1985
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: cn("flex-1", void 0) }), dismissible ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogCloseButton, {
|
|
1986
|
+
"aria-label": closeLabel,
|
|
1987
|
+
className: classNames?.close
|
|
1988
|
+
}) : null]
|
|
1989
|
+
}) : null,
|
|
1990
|
+
description !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogDescription, {
|
|
1991
|
+
className: classNames?.description,
|
|
1992
|
+
children: description
|
|
1993
|
+
}) : null,
|
|
1994
|
+
children !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogBody, {
|
|
1995
|
+
className: classNames?.body,
|
|
1996
|
+
children
|
|
1997
|
+
}) : null,
|
|
1998
|
+
actions !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogFooter, {
|
|
1999
|
+
className: classNames?.footer,
|
|
2000
|
+
children: actions
|
|
2001
|
+
}) : null
|
|
1493
2002
|
]
|
|
1494
2003
|
});
|
|
1495
2004
|
}
|
|
@@ -1503,6 +2012,73 @@ var Dialog = Object.assign(DialogRoot, {
|
|
|
1503
2012
|
CloseButton: DialogCloseButton
|
|
1504
2013
|
});
|
|
1505
2014
|
//#endregion
|
|
2015
|
+
//#region src/Drawer.tsx
|
|
2016
|
+
/** The bare edge-anchored `<dialog>` primitive — for layouts the default `<Drawer>` doesn't fit. */
|
|
2017
|
+
function DrawerContainer({ open, onOpenChange, side = "end", size = "md", closedby = "any", className, children, ref: consumerRef, ...rest }) {
|
|
2018
|
+
const { setRef, ctx, ref } = useDialogElement(open, onOpenChange, consumerRef);
|
|
2019
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogContext.Provider, {
|
|
2020
|
+
value: ctx,
|
|
2021
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PortalContainerContext.Provider, {
|
|
2022
|
+
value: ref,
|
|
2023
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("dialog", {
|
|
2024
|
+
ref: setRef,
|
|
2025
|
+
className: cn([
|
|
2026
|
+
"dialog",
|
|
2027
|
+
"drawer",
|
|
2028
|
+
side !== "end" && `drawer-${side}`,
|
|
2029
|
+
size !== "md" && `drawer-${size}`
|
|
2030
|
+
], className),
|
|
2031
|
+
closedby,
|
|
2032
|
+
...rest,
|
|
2033
|
+
children
|
|
2034
|
+
})
|
|
2035
|
+
})
|
|
2036
|
+
});
|
|
2037
|
+
}
|
|
2038
|
+
/** Edge-anchored panel with shorthand-driven header/body/footer. For other shapes, compose `<Drawer.Container>`. */
|
|
2039
|
+
function DrawerRoot({ icon, title, description, actions, dismissible = true, closeLabel = "Close", classNames, children, ...containerProps }) {
|
|
2040
|
+
const hasTitle = title !== void 0 || icon !== void 0;
|
|
2041
|
+
const showHeader = hasTitle || dismissible;
|
|
2042
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DrawerContainer, {
|
|
2043
|
+
...containerProps,
|
|
2044
|
+
children: [
|
|
2045
|
+
showHeader ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Dialog.Header, {
|
|
2046
|
+
className: classNames?.header,
|
|
2047
|
+
children: [hasTitle ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Dialog.Title, {
|
|
2048
|
+
icon,
|
|
2049
|
+
className: classNames?.title,
|
|
2050
|
+
children: title
|
|
2051
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: cn("flex-1", void 0) }), dismissible ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Dialog.CloseButton, {
|
|
2052
|
+
"aria-label": closeLabel,
|
|
2053
|
+
className: classNames?.close
|
|
2054
|
+
}) : null]
|
|
2055
|
+
}) : null,
|
|
2056
|
+
description !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Dialog.Description, {
|
|
2057
|
+
className: classNames?.description,
|
|
2058
|
+
children: description
|
|
2059
|
+
}) : null,
|
|
2060
|
+
children !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Dialog.Body, {
|
|
2061
|
+
className: classNames?.body,
|
|
2062
|
+
children
|
|
2063
|
+
}) : null,
|
|
2064
|
+
actions !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Dialog.Footer, {
|
|
2065
|
+
className: classNames?.footer,
|
|
2066
|
+
children: actions
|
|
2067
|
+
}) : null
|
|
2068
|
+
]
|
|
2069
|
+
});
|
|
2070
|
+
}
|
|
2071
|
+
/** Shares the Dialog header/body/footer subparts; only the container differs. */
|
|
2072
|
+
var Drawer = Object.assign(DrawerRoot, {
|
|
2073
|
+
Container: DrawerContainer,
|
|
2074
|
+
Header: Dialog.Header,
|
|
2075
|
+
Title: Dialog.Title,
|
|
2076
|
+
Description: Dialog.Description,
|
|
2077
|
+
Body: Dialog.Body,
|
|
2078
|
+
Footer: Dialog.Footer,
|
|
2079
|
+
CloseButton: Dialog.CloseButton
|
|
2080
|
+
});
|
|
2081
|
+
//#endregion
|
|
1506
2082
|
//#region src/Field.tsx
|
|
1507
2083
|
/** The bare `.field` container — for layouts the default `<Field>` doesn't fit. */
|
|
1508
2084
|
function FieldContainer({ className, ...rest }) {
|
|
@@ -1512,14 +2088,19 @@ function FieldContainer({ className, ...rest }) {
|
|
|
1512
2088
|
});
|
|
1513
2089
|
}
|
|
1514
2090
|
/** Standard field — label, control (`children`), description, error. For other shapes, compose `<Field.Container>` by hand. */
|
|
1515
|
-
function FieldRoot({ label, description, error, required, inline, className, children, ...rest }) {
|
|
2091
|
+
function FieldRoot({ label, description, error, required, inline, className, classNames, children, ...rest }) {
|
|
1516
2092
|
const labelEl = label !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FieldLabel, {
|
|
1517
2093
|
required,
|
|
2094
|
+
className: classNames?.label,
|
|
1518
2095
|
children: label
|
|
1519
2096
|
}) : null;
|
|
1520
|
-
const descriptionEl = description !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FieldDescription, {
|
|
2097
|
+
const descriptionEl = description !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FieldDescription, {
|
|
2098
|
+
className: classNames?.description,
|
|
2099
|
+
children: description
|
|
2100
|
+
}) : null;
|
|
1521
2101
|
const errorEl = error !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FieldError, {
|
|
1522
2102
|
match: true,
|
|
2103
|
+
className: classNames?.error,
|
|
1523
2104
|
children: error
|
|
1524
2105
|
}) : null;
|
|
1525
2106
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(FieldContainer, {
|
|
@@ -1610,17 +2191,41 @@ function MenuPopup({ className, role = "menu", ...rest }) {
|
|
|
1610
2191
|
...rest
|
|
1611
2192
|
});
|
|
1612
2193
|
}
|
|
2194
|
+
function CheckIcon() {
|
|
2195
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
2196
|
+
width: "1em",
|
|
2197
|
+
height: "1em",
|
|
2198
|
+
viewBox: "0 0 24 24",
|
|
2199
|
+
fill: "none",
|
|
2200
|
+
stroke: "currentColor",
|
|
2201
|
+
strokeWidth: "2",
|
|
2202
|
+
strokeLinecap: "round",
|
|
2203
|
+
strokeLinejoin: "round",
|
|
2204
|
+
"aria-hidden": "true",
|
|
2205
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M5 12l5 5l10 -10" })
|
|
2206
|
+
});
|
|
2207
|
+
}
|
|
2208
|
+
function MenuItemIndicator() {
|
|
2209
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2210
|
+
className: cn("menu-item-indicator", void 0),
|
|
2211
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CheckIcon, {})
|
|
2212
|
+
});
|
|
2213
|
+
}
|
|
1613
2214
|
function MenuItem(props) {
|
|
1614
2215
|
const ref = (0, react.useRef)(null);
|
|
1615
2216
|
const hotkey = props.hotkey;
|
|
2217
|
+
const checked = props.checked;
|
|
1616
2218
|
const ariaDisabled = props["aria-disabled"];
|
|
1617
2219
|
const isDisabled = "disabled" in props && props.disabled === true || ariaDisabled === true || ariaDisabled === "true";
|
|
1618
2220
|
const { ariaKeyShortcuts, primaryChord } = useHotkey(hotkey, () => ref.current?.click(), { enabled: !isDisabled });
|
|
2221
|
+
const leading = checked !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MenuItemIndicator, {}) : renderIcon(props.icon);
|
|
2222
|
+
const defaultRole = checked !== void 0 ? "menuitemcheckbox" : "menuitem";
|
|
1619
2223
|
if (props.href !== void 0) {
|
|
1620
|
-
const { className, role
|
|
2224
|
+
const { className, role, icon: _icon, checked: _checked, children, hotkey: _hk, onClick, ...rest } = props;
|
|
1621
2225
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
|
|
1622
2226
|
ref,
|
|
1623
|
-
role,
|
|
2227
|
+
role: role ?? defaultRole,
|
|
2228
|
+
"aria-checked": checked,
|
|
1624
2229
|
"aria-keyshortcuts": ariaKeyShortcuts,
|
|
1625
2230
|
className: cn("menu-item", className),
|
|
1626
2231
|
onClick: (event) => {
|
|
@@ -1632,22 +2237,23 @@ function MenuItem(props) {
|
|
|
1632
2237
|
},
|
|
1633
2238
|
...rest,
|
|
1634
2239
|
children: [
|
|
1635
|
-
|
|
2240
|
+
leading,
|
|
1636
2241
|
children,
|
|
1637
2242
|
primaryChord !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Kbd, { keys: primaryChord }) : null
|
|
1638
2243
|
]
|
|
1639
2244
|
});
|
|
1640
2245
|
}
|
|
1641
|
-
const { className, type = "button", role
|
|
2246
|
+
const { className, type = "button", role, icon: _icon, checked: _checked, children, hotkey: _hk, ...rest } = props;
|
|
1642
2247
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
1643
2248
|
ref,
|
|
1644
2249
|
type,
|
|
1645
|
-
role,
|
|
2250
|
+
role: role ?? defaultRole,
|
|
2251
|
+
"aria-checked": checked,
|
|
1646
2252
|
"aria-keyshortcuts": ariaKeyShortcuts,
|
|
1647
2253
|
className: cn("menu-item", className),
|
|
1648
2254
|
...rest,
|
|
1649
2255
|
children: [
|
|
1650
|
-
|
|
2256
|
+
leading,
|
|
1651
2257
|
children,
|
|
1652
2258
|
primaryChord !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Kbd, { keys: primaryChord }) : null
|
|
1653
2259
|
]
|
|
@@ -1834,7 +2440,7 @@ function TooltipPopup({ size = "md", side = "top", align = "center", sideOffset
|
|
|
1834
2440
|
})
|
|
1835
2441
|
});
|
|
1836
2442
|
}
|
|
1837
|
-
function TooltipShorthand({ content, side, align, sideOffset, size, children, ...rootProps }) {
|
|
2443
|
+
function TooltipShorthand({ content, side, align, sideOffset, size, classNames, children, ...rootProps }) {
|
|
1838
2444
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(TooltipRoot, {
|
|
1839
2445
|
...rootProps,
|
|
1840
2446
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_tooltip.Tooltip.Trigger, { render: children }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TooltipPopup, {
|
|
@@ -1842,6 +2448,7 @@ function TooltipShorthand({ content, side, align, sideOffset, size, children, ..
|
|
|
1842
2448
|
align,
|
|
1843
2449
|
sideOffset,
|
|
1844
2450
|
size,
|
|
2451
|
+
className: classNames?.popup,
|
|
1845
2452
|
children: content
|
|
1846
2453
|
})]
|
|
1847
2454
|
});
|
|
@@ -1886,7 +2493,7 @@ function CheckGlyph({ className }) {
|
|
|
1886
2493
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M5 12l5 5l10 -10" })
|
|
1887
2494
|
});
|
|
1888
2495
|
}
|
|
1889
|
-
function PropertyListRoot({ striped, compact, hideIfAllEmpty, title, className, children, ...rest }) {
|
|
2496
|
+
function PropertyListRoot({ striped, compact, hideIfAllEmpty, title, className, classNames, children, ...rest }) {
|
|
1890
2497
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
1891
2498
|
className: cn([
|
|
1892
2499
|
"property-list",
|
|
@@ -1896,10 +2503,10 @@ function PropertyListRoot({ striped, compact, hideIfAllEmpty, title, className,
|
|
|
1896
2503
|
], className),
|
|
1897
2504
|
...rest,
|
|
1898
2505
|
children: [title !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
|
|
1899
|
-
className: cn("property-list-title",
|
|
2506
|
+
className: cn("property-list-title", classNames?.title),
|
|
1900
2507
|
children: title
|
|
1901
2508
|
}) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("dl", {
|
|
1902
|
-
className: cn("property-list-items",
|
|
2509
|
+
className: cn("property-list-items", classNames?.items),
|
|
1903
2510
|
children
|
|
1904
2511
|
})]
|
|
1905
2512
|
});
|
|
@@ -1909,14 +2516,18 @@ function isEmptyValue(value) {
|
|
|
1909
2516
|
if (typeof value === "string") return value.trim() === "";
|
|
1910
2517
|
return false;
|
|
1911
2518
|
}
|
|
1912
|
-
function PropertyListItem({ label, value, numeric, copyable, copyValue, children, ...rest }) {
|
|
2519
|
+
function PropertyListItem({ label, value, numeric, copyable, copyValue, classNames, children, ...rest }) {
|
|
1913
2520
|
if (children !== void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children });
|
|
1914
2521
|
const empty = isEmptyValue(value);
|
|
1915
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(PropertyListLabel, {
|
|
2522
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(PropertyListLabel, {
|
|
2523
|
+
className: classNames?.label,
|
|
2524
|
+
children: label
|
|
2525
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PropertyListValue, {
|
|
1916
2526
|
numeric,
|
|
1917
2527
|
copyable,
|
|
1918
2528
|
empty,
|
|
1919
2529
|
copyValue: copyValue ?? (typeof value === "string" ? value : void 0),
|
|
2530
|
+
classNames: classNames?.copy ? { copy: classNames.copy } : void 0,
|
|
1920
2531
|
...rest,
|
|
1921
2532
|
children: empty ? "—" : value
|
|
1922
2533
|
})] });
|
|
@@ -1927,7 +2538,7 @@ function PropertyListLabel({ className, ...rest }) {
|
|
|
1927
2538
|
...rest
|
|
1928
2539
|
});
|
|
1929
2540
|
}
|
|
1930
|
-
function PropertyListValue({ numeric, copyable, empty, copyValue, className, children, ...rest }) {
|
|
2541
|
+
function PropertyListValue({ numeric, copyable, empty, copyValue, className, classNames, children, ...rest }) {
|
|
1931
2542
|
const ddRef = (0, react.useRef)(null);
|
|
1932
2543
|
const [copied, setCopied] = (0, react.useState)(false);
|
|
1933
2544
|
async function handleCopy() {
|
|
@@ -1951,7 +2562,7 @@ function PropertyListValue({ numeric, copyable, empty, copyValue, className, chi
|
|
|
1951
2562
|
children: [children, /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
1952
2563
|
type: "button",
|
|
1953
2564
|
"aria-label": "Copy",
|
|
1954
|
-
className: cn("property-list-copy",
|
|
2565
|
+
className: cn("property-list-copy", classNames?.copy),
|
|
1955
2566
|
onClick: handleCopy,
|
|
1956
2567
|
"data-copied": copied ? "true" : void 0,
|
|
1957
2568
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(CopyGlyph, { className: cn("property-list-copy-icon", void 0) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CheckGlyph, { className: cn("property-list-copy-icon-copied", void 0) })]
|
|
@@ -1965,14 +2576,17 @@ var PropertyList = Object.assign(PropertyListRoot, {
|
|
|
1965
2576
|
});
|
|
1966
2577
|
//#endregion
|
|
1967
2578
|
//#region src/Table.tsx
|
|
1968
|
-
function TableRoot({ striped, bordered, relaxed, sticky, className, ...rest }) {
|
|
2579
|
+
function TableRoot({ striped, bordered, density, relaxed, sticky, pinCol, className, ...rest }) {
|
|
2580
|
+
const resolvedDensity = density ?? (relaxed ? "relaxed" : "default");
|
|
1969
2581
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("table", {
|
|
1970
2582
|
className: cn([
|
|
1971
2583
|
"table",
|
|
1972
2584
|
striped && "table-striped",
|
|
1973
2585
|
bordered && "table-bordered",
|
|
1974
|
-
|
|
1975
|
-
|
|
2586
|
+
resolvedDensity === "compact" && "table-compact",
|
|
2587
|
+
resolvedDensity === "relaxed" && "table-relaxed",
|
|
2588
|
+
sticky && "table-sticky",
|
|
2589
|
+
pinCol && "table-pin-col"
|
|
1976
2590
|
], className),
|
|
1977
2591
|
...rest
|
|
1978
2592
|
});
|
|
@@ -1989,6 +2603,7 @@ function TableBody({ className, ...rest }) {
|
|
|
1989
2603
|
...rest
|
|
1990
2604
|
});
|
|
1991
2605
|
}
|
|
2606
|
+
/** Footer rows are semibold by default; the first row gets a strong top divider against the body. */
|
|
1992
2607
|
function TableFoot({ className, ...rest }) {
|
|
1993
2608
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("tfoot", {
|
|
1994
2609
|
className,
|
|
@@ -2021,18 +2636,28 @@ function TableCell({ align, gutter, numeric, className, ...rest }) {
|
|
|
2021
2636
|
...rest
|
|
2022
2637
|
});
|
|
2023
2638
|
}
|
|
2639
|
+
/** A centered "no results" row; renders its own `<tr>`, so drop it inside `<Table.Body>`. */
|
|
2640
|
+
function TableEmpty({ colSpan, className, children, ...rest }) {
|
|
2641
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("tr", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
|
|
2642
|
+
className: cn("table-empty", className),
|
|
2643
|
+
colSpan,
|
|
2644
|
+
...rest,
|
|
2645
|
+
children
|
|
2646
|
+
}) });
|
|
2647
|
+
}
|
|
2024
2648
|
var Table = Object.assign(TableRoot, {
|
|
2025
2649
|
Head: TableHead,
|
|
2026
2650
|
Body: TableBody,
|
|
2027
2651
|
Foot: TableFoot,
|
|
2028
2652
|
Row: TableRow,
|
|
2029
2653
|
HeaderCell: TableHeaderCell,
|
|
2030
|
-
Cell: TableCell
|
|
2654
|
+
Cell: TableCell,
|
|
2655
|
+
Empty: TableEmpty
|
|
2031
2656
|
});
|
|
2032
2657
|
//#endregion
|
|
2033
2658
|
//#region src/Sidebar.tsx
|
|
2034
2659
|
var SidebarContext = (0, react.createContext)(null);
|
|
2035
|
-
function SidebarRoot({ collapsed, defaultCollapsed, onCollapsedChange, drawerLabel = "Navigation", className, children, ...rest }) {
|
|
2660
|
+
function SidebarRoot({ collapsed, defaultCollapsed, onCollapsedChange, drawerLabel = "Navigation", className, classNames, children, ...rest }) {
|
|
2036
2661
|
const shell = useAppShell();
|
|
2037
2662
|
const drawerOpen = shell?.mobileDrawerOpen ?? false;
|
|
2038
2663
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(SidebarContext.Provider, {
|
|
@@ -2048,8 +2673,8 @@ function SidebarRoot({ collapsed, defaultCollapsed, onCollapsedChange, drawerLab
|
|
|
2048
2673
|
}), shell ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_dialog.Dialog.Root, {
|
|
2049
2674
|
open: drawerOpen,
|
|
2050
2675
|
onOpenChange: (open) => shell.setMobileDrawerOpen(open),
|
|
2051
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_base_ui_react_dialog.Dialog.Portal, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_dialog.Dialog.Backdrop, { className: cn("sidebar-drawer-backdrop",
|
|
2052
|
-
className: cn("sidebar-drawer",
|
|
2676
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_base_ui_react_dialog.Dialog.Portal, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_dialog.Dialog.Backdrop, { className: cn("sidebar-drawer-backdrop", classNames?.drawerBackdrop) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_dialog.Dialog.Popup, {
|
|
2677
|
+
className: cn("sidebar-drawer", classNames?.drawer),
|
|
2053
2678
|
"aria-label": drawerLabel,
|
|
2054
2679
|
onClick: (event) => {
|
|
2055
2680
|
if (event.target.closest("a, [data-drawer-close]")) shell.setMobileDrawerOpen(false);
|
|
@@ -2083,15 +2708,24 @@ function SidebarGroupLabel({ className, ...rest }) {
|
|
|
2083
2708
|
...rest
|
|
2084
2709
|
});
|
|
2085
2710
|
}
|
|
2086
|
-
function SidebarItem({ active, icon, badge, className, children, ...rest }) {
|
|
2711
|
+
function SidebarItem({ active, icon, badge, className, classNames, children, ...rest }) {
|
|
2087
2712
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
|
|
2088
2713
|
className: cn("sidebar-item", className),
|
|
2089
2714
|
"aria-current": active ? "page" : void 0,
|
|
2090
2715
|
...rest,
|
|
2091
2716
|
children: [
|
|
2092
|
-
icon != null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SidebarIcon, {
|
|
2093
|
-
|
|
2094
|
-
|
|
2717
|
+
icon != null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SidebarIcon, {
|
|
2718
|
+
className: classNames?.icon,
|
|
2719
|
+
children: renderIcon(icon)
|
|
2720
|
+
}) : null,
|
|
2721
|
+
children !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SidebarLabel, {
|
|
2722
|
+
className: classNames?.label,
|
|
2723
|
+
children
|
|
2724
|
+
}) : null,
|
|
2725
|
+
badge !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SidebarBadge, {
|
|
2726
|
+
className: classNames?.badge,
|
|
2727
|
+
children: badge
|
|
2728
|
+
}) : null
|
|
2095
2729
|
]
|
|
2096
2730
|
});
|
|
2097
2731
|
}
|
|
@@ -2114,11 +2748,17 @@ function SidebarBadge({ className, ...rest }) {
|
|
|
2114
2748
|
...rest
|
|
2115
2749
|
});
|
|
2116
2750
|
}
|
|
2117
|
-
function SidebarCollapsible({ icon, label, trigger, children, className, open, defaultOpen, onOpenChange, ...rest }) {
|
|
2751
|
+
function SidebarCollapsible({ icon, label, trigger, children, className, classNames, open, defaultOpen, onOpenChange, ...rest }) {
|
|
2118
2752
|
const isControlled = open !== void 0;
|
|
2119
2753
|
const [internalOpen, setInternalOpen] = (0, react.useState)(defaultOpen ?? false);
|
|
2120
2754
|
const isOpen = isControlled ? open : internalOpen;
|
|
2121
|
-
const triggerContent = trigger ?? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [icon != null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SidebarIcon, {
|
|
2755
|
+
const triggerContent = trigger ?? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [icon != null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SidebarIcon, {
|
|
2756
|
+
className: classNames?.icon,
|
|
2757
|
+
children: renderIcon(icon)
|
|
2758
|
+
}) : null, label !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SidebarLabel, {
|
|
2759
|
+
className: classNames?.label,
|
|
2760
|
+
children: label
|
|
2761
|
+
}) : null] });
|
|
2122
2762
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
|
|
2123
2763
|
className: cn("sidebar-collapsible", className),
|
|
2124
2764
|
open: isOpen,
|
|
@@ -2129,23 +2769,29 @@ function SidebarCollapsible({ icon, label, trigger, children, className, open, d
|
|
|
2129
2769
|
},
|
|
2130
2770
|
...rest,
|
|
2131
2771
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("summary", {
|
|
2132
|
-
className: cn("sidebar-collapsible-trigger",
|
|
2772
|
+
className: cn("sidebar-collapsible-trigger", classNames?.trigger),
|
|
2133
2773
|
children: triggerContent
|
|
2134
2774
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2135
|
-
className: cn("sidebar-collapsible-panel",
|
|
2775
|
+
className: cn("sidebar-collapsible-panel", classNames?.panel),
|
|
2136
2776
|
children
|
|
2137
2777
|
})]
|
|
2138
2778
|
});
|
|
2139
2779
|
}
|
|
2140
|
-
function SidebarSubItem({ active, icon, badge, className, children, ...rest }) {
|
|
2780
|
+
function SidebarSubItem({ active, icon, badge, className, classNames, children, ...rest }) {
|
|
2141
2781
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
|
|
2142
2782
|
className: cn("sidebar-subitem", className),
|
|
2143
2783
|
"aria-current": active ? "page" : void 0,
|
|
2144
2784
|
...rest,
|
|
2145
2785
|
children: [
|
|
2146
|
-
icon != null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SidebarIcon, {
|
|
2786
|
+
icon != null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SidebarIcon, {
|
|
2787
|
+
className: classNames?.icon,
|
|
2788
|
+
children: renderIcon(icon)
|
|
2789
|
+
}) : null,
|
|
2147
2790
|
children,
|
|
2148
|
-
badge !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SidebarBadge, {
|
|
2791
|
+
badge !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SidebarBadge, {
|
|
2792
|
+
className: classNames?.badge,
|
|
2793
|
+
children: badge
|
|
2794
|
+
}) : null
|
|
2149
2795
|
]
|
|
2150
2796
|
});
|
|
2151
2797
|
}
|
|
@@ -2155,7 +2801,7 @@ function SidebarFooter({ className, ...rest }) {
|
|
|
2155
2801
|
...rest
|
|
2156
2802
|
});
|
|
2157
2803
|
}
|
|
2158
|
-
function SidebarCollapseToggle({ label = "Toggle sidebar", className, children, ...rest }) {
|
|
2804
|
+
function SidebarCollapseToggle({ label = "Toggle sidebar", className, classNames, children, ...rest }) {
|
|
2159
2805
|
const ctx = (0, react.useContext)(SidebarContext);
|
|
2160
2806
|
const controlledChecked = ctx?.collapsed;
|
|
2161
2807
|
const isControlled = controlledChecked !== void 0;
|
|
@@ -2165,7 +2811,7 @@ function SidebarCollapseToggle({ label = "Toggle sidebar", className, children,
|
|
|
2165
2811
|
children: [
|
|
2166
2812
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
2167
2813
|
type: "checkbox",
|
|
2168
|
-
className: cn("sidebar-toggle",
|
|
2814
|
+
className: cn("sidebar-toggle", classNames?.input),
|
|
2169
2815
|
"aria-label": label,
|
|
2170
2816
|
...isControlled ? { checked: controlledChecked } : { defaultChecked: ctx?.defaultCollapsed },
|
|
2171
2817
|
onChange: (event) => ctx?.onCollapsedChange?.(event.currentTarget.checked)
|
|
@@ -2197,6 +2843,8 @@ exports.Accordion = Accordion;
|
|
|
2197
2843
|
exports.AdminRoot = AdminRoot;
|
|
2198
2844
|
exports.Alert = Alert;
|
|
2199
2845
|
exports.AppShell = AppShell;
|
|
2846
|
+
exports.Avatar = Avatar;
|
|
2847
|
+
exports.AvatarGroup = AvatarGroup;
|
|
2200
2848
|
exports.Badge = Badge;
|
|
2201
2849
|
exports.BarChart = BarChart;
|
|
2202
2850
|
exports.BrandTile = BrandTile;
|
|
@@ -2210,17 +2858,22 @@ exports.CodeBlock = CodeBlock;
|
|
|
2210
2858
|
exports.Container = Container;
|
|
2211
2859
|
exports.Dialog = Dialog;
|
|
2212
2860
|
exports.Donut = Donut;
|
|
2861
|
+
exports.Drawer = Drawer;
|
|
2213
2862
|
exports.Field = Field;
|
|
2214
2863
|
exports.FileInput = FileInput;
|
|
2215
2864
|
exports.Footer = Footer;
|
|
2216
2865
|
exports.Indicator = Indicator;
|
|
2217
2866
|
exports.Input = Input;
|
|
2218
2867
|
exports.InputGroup = InputGroup;
|
|
2868
|
+
exports.Item = Item;
|
|
2869
|
+
exports.ItemGroup = ItemGroup;
|
|
2219
2870
|
exports.Kbd = Kbd;
|
|
2220
2871
|
exports.Link = Link;
|
|
2221
2872
|
exports.Menu = Menu;
|
|
2222
2873
|
exports.Navbar = Navbar;
|
|
2874
|
+
exports.NumberInput = NumberInput;
|
|
2223
2875
|
exports.Pagination = Pagination;
|
|
2876
|
+
exports.PasswordInput = PasswordInput;
|
|
2224
2877
|
exports.Progress = Progress;
|
|
2225
2878
|
exports.PropertyList = PropertyList;
|
|
2226
2879
|
exports.Prose = Prose;
|
|
@@ -2228,6 +2881,7 @@ exports.Radio = Radio;
|
|
|
2228
2881
|
exports.RadioGroup = RadioGroup;
|
|
2229
2882
|
exports.SERIES = SERIES;
|
|
2230
2883
|
exports.Select = Select;
|
|
2884
|
+
exports.Separator = Separator;
|
|
2231
2885
|
exports.Sidebar = Sidebar;
|
|
2232
2886
|
exports.Spinner = Spinner;
|
|
2233
2887
|
exports.StackedBar = StackedBar;
|
|
@@ -2236,6 +2890,7 @@ exports.Switch = Switch;
|
|
|
2236
2890
|
exports.Table = Table;
|
|
2237
2891
|
exports.Tabs = Tabs;
|
|
2238
2892
|
exports.Textarea = Textarea;
|
|
2893
|
+
exports.Timeline = Timeline;
|
|
2239
2894
|
exports.Tooltip = Tooltip;
|
|
2240
2895
|
exports.getPaginationItems = getPaginationItems;
|
|
2241
2896
|
exports.useAppShell = useAppShell;
|