@lablup/ui-common 0.1.0-alpha.2 → 0.1.0-alpha.21
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/README.md +1 -1
- package/dist/assets/components/BaseCard/BaseCard.css +1 -1
- package/dist/assets/components/Button/Button.css +1 -1
- package/dist/assets/components/DataTable/DataTable.css +1 -1
- package/dist/assets/components/Drawer/Drawer.css +1 -1
- package/dist/assets/components/EmptyState/EmptyState.css +1 -1
- package/dist/assets/components/ErrorState/ErrorState.css +1 -1
- package/dist/assets/components/PageHeader/PageHeader.css +1 -1
- package/dist/assets/components/Select/Select.css +1 -0
- package/dist/assets/components/StatCard/StatCard.css +1 -1
- package/dist/assets/components/Tabs/Tabs.css +1 -1
- package/dist/assets/components/Tooltip/Tooltip.css +1 -1
- package/dist/components/DataTable/DataTable.d.ts +50 -6
- package/dist/components/DataTable/DataTable2.js +205 -133
- package/dist/components/DataTable/DataTable2.js.map +1 -1
- package/dist/components/Drawer/Drawer.d.ts +12 -1
- package/dist/components/Drawer/Drawer2.js +69 -51
- package/dist/components/Drawer/Drawer2.js.map +1 -1
- package/dist/components/EmptyState/EmptyState.d.ts +10 -3
- package/dist/components/EmptyState/EmptyState2.js +31 -48
- package/dist/components/EmptyState/EmptyState2.js.map +1 -1
- package/dist/components/EmptyState/index.d.ts +6 -1
- package/dist/components/ErrorState/ErrorState.d.ts +17 -4
- package/dist/components/ErrorState/ErrorState2.js +20 -23
- package/dist/components/ErrorState/ErrorState2.js.map +1 -1
- package/dist/components/ErrorState/index.d.ts +1 -1
- package/dist/components/PageHeader/PageHeader.d.ts +14 -1
- package/dist/components/PageHeader/PageHeader2.js +40 -24
- package/dist/components/PageHeader/PageHeader2.js.map +1 -1
- package/dist/components/Select/Select.d.ts +38 -0
- package/dist/components/Select/Select2.js +313 -0
- package/dist/components/Select/Select2.js.map +1 -0
- package/dist/components/Select/index.d.ts +2 -0
- package/dist/components/Select/index.js +2 -0
- package/dist/components/Skeleton/Skeleton.d.ts +11 -1
- package/dist/components/Skeleton/Skeleton2.js +8 -6
- package/dist/components/Skeleton/Skeleton2.js.map +1 -1
- package/dist/components/Skeleton/SkeletonCard.d.ts +3 -1
- package/dist/components/Skeleton/SkeletonCard2.js +13 -3
- package/dist/components/Skeleton/SkeletonCard2.js.map +1 -1
- package/dist/components/Skeleton/SkeletonChart2.js +5 -0
- package/dist/components/Skeleton/SkeletonChart2.js.map +1 -1
- package/dist/components/Skeleton/SkeletonRow.d.ts +3 -1
- package/dist/components/Skeleton/SkeletonRow2.js +9 -3
- package/dist/components/Skeleton/SkeletonRow2.js.map +1 -1
- package/dist/components/Skeleton/SkeletonText.d.ts +3 -1
- package/dist/components/Skeleton/SkeletonText2.js +7 -5
- package/dist/components/Skeleton/SkeletonText2.js.map +1 -1
- package/dist/components/StatCard/StatCard.d.ts +10 -1
- package/dist/components/StatCard/StatCard2.js +30 -30
- package/dist/components/StatCard/StatCard2.js.map +1 -1
- package/dist/components/Tabs/Tabs.d.ts +10 -23
- package/dist/components/Tabs/Tabs2.js +127 -146
- package/dist/components/Tabs/Tabs2.js.map +1 -1
- package/dist/components/Tabs/index.d.ts +2 -2
- package/dist/components/Tabs/index.js +2 -3
- package/dist/components/Tooltip/Tooltip.d.ts +15 -1
- package/dist/components/Tooltip/Tooltip2.js +77 -47
- package/dist/components/Tooltip/Tooltip2.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +6 -6
- package/dist/styles/base.css +101 -10
- package/dist/styles/themes/orange-dark.css +3 -0
- package/dist/styles/themes/orange-light.css +6 -1
- package/package.json +1 -1
- package/dist/components/EmptyState/illustrations.d.ts +0 -51
- package/dist/components/EmptyState/illustrations.js +0 -571
- package/dist/components/EmptyState/illustrations.js.map +0 -1
- package/dist/components/Tabs/tabTags.d.ts +0 -9
- package/dist/components/Tabs/tabTags.js +0 -11
- package/dist/components/Tabs/tabTags.js.map +0 -1
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* EmptyState Component - Barrel Export
|
|
3
|
+
*
|
|
4
|
+
* The ten illustrations that used to ship here were one product's information
|
|
5
|
+
* architecture: chat, models, creations, benchmark, logs, statistics,
|
|
6
|
+
* schedule. No other consumer has a "creations" screen to draw for. A consumer
|
|
7
|
+
* passes its own artwork through `illustration` and keeps its own vocabulary.
|
|
3
8
|
*/
|
|
4
9
|
export { EmptyState } from './EmptyState';
|
|
5
|
-
export type { EmptyStateProps, EmptyStateAction, EmptyStateSecondaryAction,
|
|
10
|
+
export type { EmptyStateProps, EmptyStateAction, EmptyStateSecondaryAction, } from './EmptyState';
|
|
@@ -1,11 +1,24 @@
|
|
|
1
|
-
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* How the error reads, not what it is about.
|
|
4
|
+
*
|
|
5
|
+
* This prop used to be a union of five names: network, configuration, model,
|
|
6
|
+
* permission, generic. Two of those, and "model" in particular, are one
|
|
7
|
+
* product's categories rather than anything a shared component can reason
|
|
8
|
+
* about, and all five resolved to three colours anyway: network and permission
|
|
9
|
+
* were the same amber, model and generic the same red. A consumer decides
|
|
10
|
+
* which of its own error categories reads as which tone.
|
|
11
|
+
*/
|
|
12
|
+
export type ErrorTone = "danger" | "warning" | "accent";
|
|
2
13
|
export interface ErrorAction {
|
|
3
14
|
label: string;
|
|
4
15
|
onClick: () => void;
|
|
5
16
|
}
|
|
6
17
|
export interface ErrorStateProps {
|
|
7
|
-
/**
|
|
8
|
-
|
|
18
|
+
/** How the error reads. Defaults to `danger`. */
|
|
19
|
+
tone?: ErrorTone;
|
|
20
|
+
/** Replaces the default alert icon. */
|
|
21
|
+
icon?: ReactNode;
|
|
9
22
|
/** Error title - main heading */
|
|
10
23
|
title: string;
|
|
11
24
|
/** Detailed error message */
|
|
@@ -22,4 +35,4 @@ export interface ErrorStateProps {
|
|
|
22
35
|
/**
|
|
23
36
|
* ErrorState Component
|
|
24
37
|
*/
|
|
25
|
-
export declare function ErrorState({
|
|
38
|
+
export declare function ErrorState({ tone, icon, title, message, primaryAction, secondaryAction, className, showIcon, }: ErrorStateProps): import("react").JSX.Element;
|
|
@@ -4,56 +4,53 @@ import { AlertCircleIcon as t } from "../../icons/AlertCircleIcon.js";
|
|
|
4
4
|
import { useCallback as n } from "react";
|
|
5
5
|
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
6
6
|
//#region src/components/ErrorState/ErrorState.tsx
|
|
7
|
-
function a(
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
function o({ type: t = "generic", title: o, message: s, primaryAction: c, secondaryAction: l, className: u = "", showIcon: d = !0 }) {
|
|
11
|
-
let f = n(() => {
|
|
12
|
-
c?.onClick();
|
|
13
|
-
}, [c]), p = n(() => {
|
|
7
|
+
function a({ tone: a = "danger", icon: o, title: s, message: c, primaryAction: l, secondaryAction: u, className: d = "", showIcon: f = !0 }) {
|
|
8
|
+
let p = n(() => {
|
|
14
9
|
l?.onClick();
|
|
15
|
-
}, [l]), m =
|
|
10
|
+
}, [l]), m = n(() => {
|
|
11
|
+
u?.onClick();
|
|
12
|
+
}, [u]), h = [
|
|
16
13
|
"error-state",
|
|
17
|
-
`error-state--${
|
|
18
|
-
|
|
14
|
+
`error-state--${a}`,
|
|
15
|
+
d
|
|
19
16
|
].filter(Boolean).join(" ");
|
|
20
17
|
return /* @__PURE__ */ i("div", {
|
|
21
|
-
className:
|
|
18
|
+
className: h,
|
|
22
19
|
role: "alert",
|
|
23
20
|
"aria-live": "polite",
|
|
24
21
|
children: [
|
|
25
|
-
|
|
22
|
+
f && /* @__PURE__ */ r("div", {
|
|
26
23
|
className: "error-state__icon",
|
|
27
24
|
"aria-hidden": "true",
|
|
28
|
-
children:
|
|
25
|
+
children: o ?? /* @__PURE__ */ r(t, { size: 48 })
|
|
29
26
|
}),
|
|
30
27
|
/* @__PURE__ */ r("h2", {
|
|
31
28
|
className: "error-state__title",
|
|
32
|
-
children:
|
|
29
|
+
children: s
|
|
33
30
|
}),
|
|
34
31
|
/* @__PURE__ */ r("p", {
|
|
35
32
|
className: "error-state__message",
|
|
36
|
-
children:
|
|
33
|
+
children: c
|
|
37
34
|
}),
|
|
38
|
-
(
|
|
35
|
+
(l || u) && /* @__PURE__ */ i("div", {
|
|
39
36
|
className: "error-state__actions",
|
|
40
|
-
children: [
|
|
37
|
+
children: [l && /* @__PURE__ */ r(e, {
|
|
41
38
|
variant: "primary",
|
|
42
|
-
onClick:
|
|
39
|
+
onClick: p,
|
|
43
40
|
className: "error-state__action-btn error-state__action-btn--primary",
|
|
44
|
-
children:
|
|
45
|
-
}),
|
|
41
|
+
children: l.label
|
|
42
|
+
}), u && /* @__PURE__ */ r(e, {
|
|
46
43
|
variant: "secondary",
|
|
47
|
-
onClick:
|
|
44
|
+
onClick: m,
|
|
48
45
|
className: "error-state__action-btn error-state__action-btn--secondary",
|
|
49
|
-
children:
|
|
46
|
+
children: u.label
|
|
50
47
|
})]
|
|
51
48
|
})
|
|
52
49
|
]
|
|
53
50
|
});
|
|
54
51
|
}
|
|
55
52
|
//#endregion
|
|
56
|
-
export {
|
|
53
|
+
export { a as ErrorState };
|
|
57
54
|
|
|
58
55
|
//# sourceMappingURL=ErrorState2.js.map
|
|
59
56
|
import "../../assets/components/ErrorState/ErrorState.css";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorState2.js","names":[],"sources":["../../../src/components/ErrorState/ErrorState.tsx"],"sourcesContent":["/**\n * ErrorState Component\n *\n * Unified error state component with recovery actions.\n * Provides consistent error presentation across all pages with actionable buttons.\n *\n * Features:\n * -
|
|
1
|
+
{"version":3,"file":"ErrorState2.js","names":[],"sources":["../../../src/components/ErrorState/ErrorState.tsx"],"sourcesContent":["/**\n * ErrorState Component\n *\n * Unified error state component with recovery actions.\n * Provides consistent error presentation across all pages with actionable buttons.\n *\n * Features:\n * - Three visual tones\n * - Primary and secondary action buttons\n * - Accessible (ARIA attributes, focus management)\n * - Dark/light theme support\n */\n\nimport type { ReactNode } from \"react\";\nimport { useCallback } from \"react\";\nimport { AlertCircleIcon } from \"../../icons/AlertCircleIcon\";\nimport { Button } from \"../Button\";\nimport \"./ErrorState.css\";\n\n/**\n * How the error reads, not what it is about.\n *\n * This prop used to be a union of five names: network, configuration, model,\n * permission, generic. Two of those, and \"model\" in particular, are one\n * product's categories rather than anything a shared component can reason\n * about, and all five resolved to three colours anyway: network and permission\n * were the same amber, model and generic the same red. A consumer decides\n * which of its own error categories reads as which tone.\n */\nexport type ErrorTone = \"danger\" | \"warning\" | \"accent\";\n\nexport interface ErrorAction {\n label: string;\n onClick: () => void;\n}\n\nexport interface ErrorStateProps {\n /** How the error reads. Defaults to `danger`. */\n tone?: ErrorTone;\n /** Replaces the default alert icon. */\n icon?: ReactNode;\n /** Error title - main heading */\n title: string;\n /** Detailed error message */\n message: string;\n /** Primary action button (e.g., Retry, Go to Settings) */\n primaryAction?: ErrorAction;\n /** Secondary action button (e.g., View Logs, Report Issue) */\n secondaryAction?: ErrorAction;\n /** Additional CSS classes */\n className?: string;\n /** Whether to show error icon */\n showIcon?: boolean;\n}\n\n/**\n * ErrorState Component\n */\nexport function ErrorState({\n tone = \"danger\",\n icon,\n title,\n message,\n primaryAction,\n secondaryAction,\n className = \"\",\n showIcon = true,\n}: ErrorStateProps) {\n const handlePrimaryAction = useCallback(() => {\n primaryAction?.onClick();\n }, [primaryAction]);\n\n const handleSecondaryAction = useCallback(() => {\n secondaryAction?.onClick();\n }, [secondaryAction]);\n\n const containerClass = [\"error-state\", `error-state--${tone}`, className]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div className={containerClass} role=\"alert\" aria-live=\"polite\">\n {showIcon && (\n <div className=\"error-state__icon\" aria-hidden=\"true\">\n {icon ?? <AlertCircleIcon size={48} />}\n </div>\n )}\n\n <h2 className=\"error-state__title\">{title}</h2>\n\n <p className=\"error-state__message\">{message}</p>\n\n {(primaryAction || secondaryAction) && (\n <div className=\"error-state__actions\">\n {primaryAction && (\n <Button\n variant=\"primary\"\n onClick={handlePrimaryAction}\n className=\"error-state__action-btn error-state__action-btn--primary\"\n >\n {primaryAction.label}\n </Button>\n )}\n\n {secondaryAction && (\n <Button\n variant=\"secondary\"\n onClick={handleSecondaryAction}\n className=\"error-state__action-btn error-state__action-btn--secondary\"\n >\n {secondaryAction.label}\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;AA0DA,SAAgB,EAAW,EACzB,UAAO,UACP,SACA,UACA,YACA,kBACA,oBACA,eAAY,IACZ,cAAW,MACO;CAClB,IAAM,IAAsB,QAAkB;EAC5C,GAAe,QAAQ;CACzB,GAAG,CAAC,CAAa,CAAC,GAEZ,IAAwB,QAAkB;EAC9C,GAAiB,QAAQ;CAC3B,GAAG,CAAC,CAAe,CAAC,GAEd,IAAiB;EAAC;EAAe,gBAAgB;EAAQ;CAAS,CAAC,CACtE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,OACE,kBAAC,OAAD;EAAK,WAAW;EAAgB,MAAK;EAAQ,aAAU;EAAvD,UAAA;GACG,KACC,kBAAC,OAAD;IAAK,WAAU;IAAoB,eAAY;IAC5C,UAAA,KAAQ,kBAAC,GAAD,EAAiB,MAAM,GAAK,CAAA;GAClC,CAAA;GAGP,kBAAC,MAAD;IAAI,WAAU;IAAsB,UAAA;GAAU,CAAA;GAE9C,kBAAC,KAAD;IAAG,WAAU;IAAwB,UAAA;GAAW,CAAA;IAE9C,KAAiB,MACjB,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACG,KACC,kBAAC,GAAD;KACE,SAAQ;KACR,SAAS;KACT,WAAU;KAET,UAAA,EAAc;IACT,CAAA,GAGT,KACC,kBAAC,GAAD;KACE,SAAQ;KACR,SAAS;KACT,WAAU;KAET,UAAA,EAAgB;IACX,CAAA,CAEP;;EAEJ;;AAET"}
|
|
@@ -8,6 +8,19 @@ export interface PageHeaderProps {
|
|
|
8
8
|
actions?: ReactNode;
|
|
9
9
|
/** Error message to display below the header */
|
|
10
10
|
error?: string | null;
|
|
11
|
+
/**
|
|
12
|
+
* Secondary line under the message, for the raw detail a server returned.
|
|
13
|
+
* Kept separate so the message stays readable when the detail is long.
|
|
14
|
+
*/
|
|
15
|
+
errorDetail?: string | null;
|
|
16
|
+
/**
|
|
17
|
+
* Callback for the Retry button, rendered before the dismiss control when
|
|
18
|
+
* set. Dismissal is a pure dismissal and must not retry, which is why these
|
|
19
|
+
* are two props rather than one.
|
|
20
|
+
*/
|
|
21
|
+
onRetry?: () => void;
|
|
22
|
+
/** Label for the Retry button. Default: "Retry" */
|
|
23
|
+
retryLabel?: string;
|
|
11
24
|
/** Callback when error is dismissed */
|
|
12
25
|
onErrorDismiss?: () => void;
|
|
13
26
|
/** Additional CSS class names */
|
|
@@ -15,4 +28,4 @@ export interface PageHeaderProps {
|
|
|
15
28
|
/** Accessible label for the error-dismiss button. Default: "Dismiss error" */
|
|
16
29
|
dismissErrorLabel?: string;
|
|
17
30
|
}
|
|
18
|
-
export declare function PageHeader({ title, description, actions, error, onErrorDismiss, className, dismissErrorLabel, }: PageHeaderProps): import("react").JSX.Element;
|
|
31
|
+
export declare function PageHeader({ title, description, actions, error, onErrorDismiss, className, errorDetail, onRetry, retryLabel, dismissErrorLabel, }: PageHeaderProps): import("react").JSX.Element;
|
|
@@ -1,43 +1,59 @@
|
|
|
1
|
+
import { Button as e } from "../Button/Button2.js";
|
|
1
2
|
/* empty css */
|
|
2
|
-
import { jsx as
|
|
3
|
+
import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
3
4
|
//#region src/components/PageHeader/PageHeader.tsx
|
|
4
|
-
function
|
|
5
|
-
let
|
|
6
|
-
return /* @__PURE__ */
|
|
7
|
-
className:
|
|
8
|
-
children: [/* @__PURE__ */
|
|
5
|
+
function r({ title: r, description: i, actions: a, error: o, onErrorDismiss: s, className: c = "", errorDetail: l, onRetry: u, retryLabel: d = "Retry", dismissErrorLabel: f = "Dismiss error" }) {
|
|
6
|
+
let p = ["page-header", c].filter(Boolean).join(" ");
|
|
7
|
+
return /* @__PURE__ */ n("header", {
|
|
8
|
+
className: p,
|
|
9
|
+
children: [/* @__PURE__ */ n("div", {
|
|
9
10
|
className: "page-header__content",
|
|
10
|
-
children: [/* @__PURE__ */
|
|
11
|
+
children: [/* @__PURE__ */ n("div", {
|
|
11
12
|
className: "page-header__text",
|
|
12
|
-
children: [/* @__PURE__ */
|
|
13
|
+
children: [/* @__PURE__ */ t("h1", {
|
|
13
14
|
className: "page-header__title",
|
|
14
|
-
children: n
|
|
15
|
-
}), r && /* @__PURE__ */ e("p", {
|
|
16
|
-
className: "page-header__description",
|
|
17
15
|
children: r
|
|
16
|
+
}), i && /* @__PURE__ */ t("p", {
|
|
17
|
+
className: "page-header__description",
|
|
18
|
+
children: i
|
|
18
19
|
})]
|
|
19
|
-
}),
|
|
20
|
+
}), a && /* @__PURE__ */ t("div", {
|
|
20
21
|
className: "page-header__actions",
|
|
21
|
-
children:
|
|
22
|
+
children: a
|
|
22
23
|
})]
|
|
23
|
-
}),
|
|
24
|
+
}), o && /* @__PURE__ */ n("div", {
|
|
24
25
|
className: "page-header__error",
|
|
25
26
|
role: "alert",
|
|
26
|
-
children: [/* @__PURE__ */
|
|
27
|
-
className: "page-header__error-
|
|
28
|
-
children:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
children: [/* @__PURE__ */ n("div", {
|
|
28
|
+
className: "page-header__error-body",
|
|
29
|
+
children: [/* @__PURE__ */ t("span", {
|
|
30
|
+
className: "page-header__error-text",
|
|
31
|
+
children: o
|
|
32
|
+
}), l && /* @__PURE__ */ t("span", {
|
|
33
|
+
className: "page-header__error-detail",
|
|
34
|
+
children: l
|
|
35
|
+
})]
|
|
36
|
+
}), (u || s) && /* @__PURE__ */ n("div", {
|
|
37
|
+
className: "page-header__error-actions",
|
|
38
|
+
children: [u && /* @__PURE__ */ t(e, {
|
|
39
|
+
variant: "secondary",
|
|
40
|
+
size: "small",
|
|
41
|
+
className: "page-header__error-retry",
|
|
42
|
+
onClick: u,
|
|
43
|
+
children: d
|
|
44
|
+
}), s && /* @__PURE__ */ t("button", {
|
|
45
|
+
type: "button",
|
|
46
|
+
className: "page-header__error-dismiss",
|
|
47
|
+
onClick: s,
|
|
48
|
+
"aria-label": f,
|
|
49
|
+
children: "×"
|
|
50
|
+
})]
|
|
35
51
|
})]
|
|
36
52
|
})]
|
|
37
53
|
});
|
|
38
54
|
}
|
|
39
55
|
//#endregion
|
|
40
|
-
export {
|
|
56
|
+
export { r as PageHeader };
|
|
41
57
|
|
|
42
58
|
//# sourceMappingURL=PageHeader2.js.map
|
|
43
59
|
import "../../assets/components/PageHeader/PageHeader.css";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageHeader2.js","names":[],"sources":["../../../src/components/PageHeader/PageHeader.tsx"],"sourcesContent":["/**\n * PageHeader Component\n *\n * Standardized page header with title, description, and optional action buttons.\n * Provides consistent styling and layout across all pages.\n *\n * @example\n * // Basic usage\n * <PageHeader\n * title=\"Models\"\n * description=\"Manage and browse your local models\"\n * />\n *\n * @example\n * // With action buttons\n * <PageHeader\n * title=\"Settings\"\n * description=\"Configure application settings\"\n * actions={\n * <>\n * <Button variant=\"secondary\">Import</Button>\n * <Button variant=\"primary\">Save</Button>\n * </>\n * }\n * />\n *\n * @example\n * // With error display\n * <PageHeader\n * title=\"Engines\"\n * description=\"Manage runtime engines\"\n * error={error}\n * onErrorDismiss={() => clearError()}\n * />\n */\n\nimport type { ReactNode } from \"react\";\nimport \"./PageHeader.css\";\n\nexport interface PageHeaderProps {\n /** Page title - displayed as h1 */\n title: string;\n /** Page description - displayed below title */\n description?: string;\n /** Optional action buttons or elements on the right side */\n actions?: ReactNode;\n /** Error message to display below the header */\n error?: string | null;\n /** Callback when error is dismissed */\n onErrorDismiss?: () => void;\n /** Additional CSS class names */\n className?: string;\n /** Accessible label for the error-dismiss button. Default: \"Dismiss error\" */\n dismissErrorLabel?: string;\n}\n\nexport function PageHeader({\n title,\n description,\n actions,\n error,\n onErrorDismiss,\n className = \"\",\n dismissErrorLabel = \"Dismiss error\",\n}: PageHeaderProps) {\n const classes = [\"page-header\", className].filter(Boolean).join(\" \");\n\n return (\n <header className={classes}>\n <div className=\"page-header__content\">\n <div className=\"page-header__text\">\n <h1 className=\"page-header__title\">{title}</h1>\n {description && <p className=\"page-header__description\">{description}</p>}\n </div>\n {actions && <div className=\"page-header__actions\">{actions}</div>}\n </div>\n {error && (\n <div className=\"page-header__error\" role=\"alert\">\n <span className=\"page-header__error-text\">{error}</span>\n {onErrorDismiss && (\n <button\n
|
|
1
|
+
{"version":3,"file":"PageHeader2.js","names":[],"sources":["../../../src/components/PageHeader/PageHeader.tsx"],"sourcesContent":["/**\n * PageHeader Component\n *\n * Standardized page header with title, description, and optional action buttons.\n * Provides consistent styling and layout across all pages.\n *\n * @example\n * // Basic usage\n * <PageHeader\n * title=\"Models\"\n * description=\"Manage and browse your local models\"\n * />\n *\n * @example\n * // With action buttons\n * <PageHeader\n * title=\"Settings\"\n * description=\"Configure application settings\"\n * actions={\n * <>\n * <Button variant=\"secondary\">Import</Button>\n * <Button variant=\"primary\">Save</Button>\n * </>\n * }\n * />\n *\n * @example\n * // With error display\n * <PageHeader\n * title=\"Engines\"\n * description=\"Manage runtime engines\"\n * error={error}\n * onErrorDismiss={() => clearError()}\n * />\n */\n\nimport type { ReactNode } from \"react\";\nimport { Button } from \"../Button\";\nimport \"./PageHeader.css\";\n\nexport interface PageHeaderProps {\n /** Page title - displayed as h1 */\n title: string;\n /** Page description - displayed below title */\n description?: string;\n /** Optional action buttons or elements on the right side */\n actions?: ReactNode;\n /** Error message to display below the header */\n error?: string | null;\n /**\n * Secondary line under the message, for the raw detail a server returned.\n * Kept separate so the message stays readable when the detail is long.\n */\n errorDetail?: string | null;\n /**\n * Callback for the Retry button, rendered before the dismiss control when\n * set. Dismissal is a pure dismissal and must not retry, which is why these\n * are two props rather than one.\n */\n onRetry?: () => void;\n /** Label for the Retry button. Default: \"Retry\" */\n retryLabel?: string;\n /** Callback when error is dismissed */\n onErrorDismiss?: () => void;\n /** Additional CSS class names */\n className?: string;\n /** Accessible label for the error-dismiss button. Default: \"Dismiss error\" */\n dismissErrorLabel?: string;\n}\n\nexport function PageHeader({\n title,\n description,\n actions,\n error,\n onErrorDismiss,\n className = \"\",\n errorDetail,\n onRetry,\n retryLabel = \"Retry\",\n dismissErrorLabel = \"Dismiss error\",\n}: PageHeaderProps) {\n const classes = [\"page-header\", className].filter(Boolean).join(\" \");\n\n return (\n <header className={classes}>\n <div className=\"page-header__content\">\n <div className=\"page-header__text\">\n <h1 className=\"page-header__title\">{title}</h1>\n {description && <p className=\"page-header__description\">{description}</p>}\n </div>\n {actions && <div className=\"page-header__actions\">{actions}</div>}\n </div>\n {error && (\n <div className=\"page-header__error\" role=\"alert\">\n <div className=\"page-header__error-body\">\n <span className=\"page-header__error-text\">{error}</span>\n {errorDetail && (\n <span className=\"page-header__error-detail\">{errorDetail}</span>\n )}\n </div>\n {(onRetry || onErrorDismiss) && (\n <div className=\"page-header__error-actions\">\n {onRetry && (\n <Button\n variant=\"secondary\"\n size=\"small\"\n className=\"page-header__error-retry\"\n onClick={onRetry}\n >\n {retryLabel}\n </Button>\n )}\n {onErrorDismiss && (\n <button\n type=\"button\"\n className=\"page-header__error-dismiss\"\n onClick={onErrorDismiss}\n aria-label={dismissErrorLabel}\n >\n ×\n </button>\n )}\n </div>\n )}\n </div>\n )}\n </header>\n );\n}\n"],"mappings":";;;;AAsEA,SAAgB,EAAW,EACzB,UACA,gBACA,YACA,UACA,mBACA,eAAY,IACZ,gBACA,YACA,gBAAa,SACb,uBAAoB,mBACF;CAClB,IAAM,IAAU,CAAC,eAAe,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;CAEnE,OACE,kBAAC,UAAD;EAAQ,WAAW;EAAnB,UAAA,CACE,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;KAAsB,UAAA;IAAU,CAAA,GAC7C,KAAe,kBAAC,KAAD;KAAG,WAAU;KAA4B,UAAA;IAAe,CAAA,CACrE;GACJ,CAAA,GAAA,KAAW,kBAAC,OAAD;IAAK,WAAU;IAAwB,UAAA;GAAa,CAAA,CAC7D;EACJ,CAAA,GAAA,KACC,kBAAC,OAAD;GAAK,WAAU;GAAqB,MAAK;GAAzC,UAAA,CACE,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,kBAAC,QAAD;KAAM,WAAU;KAA2B,UAAA;IAAY,CAAA,GACtD,KACC,kBAAC,QAAD;KAAM,WAAU;KAA6B,UAAA;IAAkB,CAAA,CAE9D;GACH,CAAA,IAAA,KAAW,MACX,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACG,KACC,kBAAC,GAAD;KACE,SAAQ;KACR,MAAK;KACL,WAAU;KACV,SAAS;KAER,UAAA;IACK,CAAA,GAET,KACC,kBAAC,UAAD;KACE,MAAK;KACL,WAAU;KACV,SAAS;KACT,cAAY;KACb,UAAA;IAEO,CAAA,CAEP;GAEJ,CAAA,CAAA;EAED,CAAA,CAAA;;AAEZ"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface SelectOption<T extends string = string> {
|
|
3
|
+
value: T;
|
|
4
|
+
label: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
icon?: ReactNode;
|
|
7
|
+
/** Keep an unavailable choice visible while preventing its selection. */
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface SelectProps<T extends string = string> {
|
|
11
|
+
value: T;
|
|
12
|
+
onChange: (value: T) => void;
|
|
13
|
+
onBlur?: () => void;
|
|
14
|
+
options: SelectOption<T>[];
|
|
15
|
+
/**
|
|
16
|
+
* Field label rendered above the trigger, the way `TextInput` renders its
|
|
17
|
+
* own. Names the trigger and the listbox through `aria-labelledby`, so a
|
|
18
|
+
* caller that supplies it does not also need `aria-label`.
|
|
19
|
+
*/
|
|
20
|
+
label?: ReactNode;
|
|
21
|
+
placeholder?: string;
|
|
22
|
+
disabled?: boolean;
|
|
23
|
+
size?: "small" | "default" | "medium" | "large";
|
|
24
|
+
fullWidth?: boolean;
|
|
25
|
+
className?: string;
|
|
26
|
+
searchable?: boolean;
|
|
27
|
+
searchPlaceholder?: string;
|
|
28
|
+
"aria-label"?: string;
|
|
29
|
+
"aria-describedby"?: string;
|
|
30
|
+
invalid?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Shown in place of the list when a search matches nothing. English default,
|
|
33
|
+
* because this package cannot resolve a consumer's locale key: a product that
|
|
34
|
+
* localises passes its own words.
|
|
35
|
+
*/
|
|
36
|
+
noOptionsLabel?: string;
|
|
37
|
+
}
|
|
38
|
+
export declare function Select<T extends string = string>({ value, onChange, onBlur, options, label, placeholder, disabled, size, fullWidth, className, searchable, searchPlaceholder, "aria-label": ariaLabel, "aria-describedby": ariaDescribedBy, invalid, noOptionsLabel, }: SelectProps<T>): import("react").JSX.Element;
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
/* empty css */
|
|
2
|
+
import { useCallback as e, useEffect as t, useId as n, useMemo as r, useRef as i, useState as a } from "react";
|
|
3
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
4
|
+
import { createPortal as c } from "react-dom";
|
|
5
|
+
//#region src/components/Select/Select.tsx
|
|
6
|
+
function l({ value: l, onChange: u, onBlur: d, options: f, label: p, placeholder: ee = "Select...", disabled: m = !1, size: h = "default", fullWidth: g = !1, className: _ = "", searchable: v = !1, searchPlaceholder: y, "aria-label": b, "aria-describedby": x, invalid: S = !1, noOptionsLabel: C = "No options" }) {
|
|
7
|
+
let [w, T] = a(!1), [E, D] = a(-1), [O, k] = a(""), [A, te] = a({
|
|
8
|
+
top: 0,
|
|
9
|
+
left: 0,
|
|
10
|
+
width: 0
|
|
11
|
+
}), j = i(null), M = i(null), N = i(null), P = i(null), F = i([]), I = n(), L = n(), R = n(), z = p != null && p !== !1, B = f.find((e) => e.value === l), V = r(() => {
|
|
12
|
+
let e = O.trim().toLowerCase();
|
|
13
|
+
return !v || e.length === 0 ? f : f.filter((t) => [
|
|
14
|
+
t.label,
|
|
15
|
+
t.value,
|
|
16
|
+
t.description ?? ""
|
|
17
|
+
].some((t) => t.toLowerCase().includes(e)));
|
|
18
|
+
}, [
|
|
19
|
+
f,
|
|
20
|
+
O,
|
|
21
|
+
v
|
|
22
|
+
]), H = e((e, t) => {
|
|
23
|
+
for (let n = e; n >= 0 && n < V.length; n += t) {
|
|
24
|
+
let e = V[n];
|
|
25
|
+
if (e && !e.disabled) return n;
|
|
26
|
+
}
|
|
27
|
+
return -1;
|
|
28
|
+
}, [V]), U = (e) => `${L}-option-${String(e)}`, W = E >= 0 ? U(E) : void 0, G = e(() => {
|
|
29
|
+
if (!M.current) return;
|
|
30
|
+
let e = M.current.getBoundingClientRect();
|
|
31
|
+
te({
|
|
32
|
+
top: e.bottom + 4,
|
|
33
|
+
left: e.left,
|
|
34
|
+
width: e.width
|
|
35
|
+
});
|
|
36
|
+
}, []), K = e(() => {
|
|
37
|
+
if (m) return;
|
|
38
|
+
G(), T(!0);
|
|
39
|
+
let e = V.findIndex((e) => e.value === l && !e.disabled);
|
|
40
|
+
D(e === -1 ? H(0, 1) : e);
|
|
41
|
+
}, [
|
|
42
|
+
m,
|
|
43
|
+
V,
|
|
44
|
+
l,
|
|
45
|
+
G,
|
|
46
|
+
H
|
|
47
|
+
]), q = e(() => {
|
|
48
|
+
T(!1), D(-1), k(""), M.current?.focus();
|
|
49
|
+
}, []), J = e((e, t) => {
|
|
50
|
+
t && (t.stopPropagation(), t.preventDefault()), !e.disabled && (u(e.value), q());
|
|
51
|
+
}, [u, q]);
|
|
52
|
+
t(() => {
|
|
53
|
+
let e = (e) => {
|
|
54
|
+
if (!w) return;
|
|
55
|
+
let t = e.target, n = j.current && !j.current.contains(t), r = N.current && !N.current.contains(t);
|
|
56
|
+
n && r && q();
|
|
57
|
+
}, t = (e) => {
|
|
58
|
+
e.key === "Escape" && w && q();
|
|
59
|
+
};
|
|
60
|
+
return w && (document.addEventListener("mousedown", e), document.addEventListener("keydown", t)), () => {
|
|
61
|
+
document.removeEventListener("mousedown", e), document.removeEventListener("keydown", t);
|
|
62
|
+
};
|
|
63
|
+
}, [w, q]), t(() => {
|
|
64
|
+
if (!w) return;
|
|
65
|
+
let e = () => {
|
|
66
|
+
G();
|
|
67
|
+
};
|
|
68
|
+
return window.addEventListener("resize", e), window.addEventListener("scroll", e, !0), () => {
|
|
69
|
+
window.removeEventListener("resize", e), window.removeEventListener("scroll", e, !0);
|
|
70
|
+
};
|
|
71
|
+
}, [w, G]), t(() => {
|
|
72
|
+
w && v && P.current?.focus();
|
|
73
|
+
}, [w, v]), t(() => {
|
|
74
|
+
if (!w || !v) return;
|
|
75
|
+
F.current = [];
|
|
76
|
+
let e = V.findIndex((e) => e.value === l && !e.disabled);
|
|
77
|
+
D(e >= 0 ? e : H(0, 1));
|
|
78
|
+
}, [
|
|
79
|
+
w,
|
|
80
|
+
O,
|
|
81
|
+
v,
|
|
82
|
+
l,
|
|
83
|
+
V,
|
|
84
|
+
H
|
|
85
|
+
]);
|
|
86
|
+
let Y = e((e) => {
|
|
87
|
+
if (!m) switch (e.key) {
|
|
88
|
+
case "Enter":
|
|
89
|
+
case " ":
|
|
90
|
+
if (e.preventDefault(), w) {
|
|
91
|
+
let e = V[E];
|
|
92
|
+
e && J(e);
|
|
93
|
+
} else K();
|
|
94
|
+
break;
|
|
95
|
+
case "Escape":
|
|
96
|
+
e.preventDefault(), w && q();
|
|
97
|
+
break;
|
|
98
|
+
case "ArrowDown":
|
|
99
|
+
if (e.preventDefault(), !w) K();
|
|
100
|
+
else {
|
|
101
|
+
let e = H(E + 1, 1);
|
|
102
|
+
e >= 0 && D(e);
|
|
103
|
+
}
|
|
104
|
+
break;
|
|
105
|
+
case "ArrowUp":
|
|
106
|
+
if (e.preventDefault(), w) {
|
|
107
|
+
let e = H(E - 1, -1);
|
|
108
|
+
e >= 0 && D(e);
|
|
109
|
+
}
|
|
110
|
+
break;
|
|
111
|
+
case "Tab": w && q();
|
|
112
|
+
}
|
|
113
|
+
}, [
|
|
114
|
+
m,
|
|
115
|
+
w,
|
|
116
|
+
E,
|
|
117
|
+
V,
|
|
118
|
+
H,
|
|
119
|
+
K,
|
|
120
|
+
q,
|
|
121
|
+
J
|
|
122
|
+
]), X = e((e) => {
|
|
123
|
+
switch (e.key) {
|
|
124
|
+
case "Enter": {
|
|
125
|
+
e.preventDefault();
|
|
126
|
+
let t = V[E];
|
|
127
|
+
t && J(t);
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
case "Escape":
|
|
131
|
+
e.preventDefault(), e.stopPropagation(), q();
|
|
132
|
+
break;
|
|
133
|
+
case "ArrowDown":
|
|
134
|
+
e.preventDefault(), D((e) => {
|
|
135
|
+
let t = H(e + 1, 1);
|
|
136
|
+
return t >= 0 ? t : e;
|
|
137
|
+
});
|
|
138
|
+
break;
|
|
139
|
+
case "ArrowUp":
|
|
140
|
+
e.preventDefault(), D((e) => {
|
|
141
|
+
let t = H(e - 1, -1);
|
|
142
|
+
return t >= 0 ? t : e;
|
|
143
|
+
});
|
|
144
|
+
break;
|
|
145
|
+
case "Tab": q();
|
|
146
|
+
}
|
|
147
|
+
}, [
|
|
148
|
+
q,
|
|
149
|
+
E,
|
|
150
|
+
J,
|
|
151
|
+
V,
|
|
152
|
+
H
|
|
153
|
+
]);
|
|
154
|
+
t(() => {
|
|
155
|
+
let e = F.current[E];
|
|
156
|
+
w && E >= 0 && e && e.scrollIntoView({
|
|
157
|
+
block: "nearest",
|
|
158
|
+
behavior: "smooth"
|
|
159
|
+
});
|
|
160
|
+
}, [w, E]);
|
|
161
|
+
let Z = h === "default" ? "" : `select--${h}`, ne = g ? "select--full-width" : "", re = z ? "select--labelled" : "", Q = z ? R : void 0, $ = y ?? b;
|
|
162
|
+
return /* @__PURE__ */ s("div", {
|
|
163
|
+
ref: j,
|
|
164
|
+
className: `select ${Z} ${ne} ${re} ${w ? "select--open" : ""} ${m ? "select--disabled" : ""} ${_}`,
|
|
165
|
+
children: [
|
|
166
|
+
z && /* @__PURE__ */ o("span", {
|
|
167
|
+
className: "select__label",
|
|
168
|
+
id: R,
|
|
169
|
+
children: p
|
|
170
|
+
}),
|
|
171
|
+
/* @__PURE__ */ s("button", {
|
|
172
|
+
ref: M,
|
|
173
|
+
type: "button",
|
|
174
|
+
className: "select__trigger",
|
|
175
|
+
onClick: () => {
|
|
176
|
+
w ? q() : K();
|
|
177
|
+
},
|
|
178
|
+
onKeyDown: Y,
|
|
179
|
+
onBlur: d,
|
|
180
|
+
disabled: m,
|
|
181
|
+
"aria-haspopup": "listbox",
|
|
182
|
+
"aria-expanded": w,
|
|
183
|
+
"aria-controls": w ? I : void 0,
|
|
184
|
+
"aria-activedescendant": w ? W : void 0,
|
|
185
|
+
"aria-label": b,
|
|
186
|
+
"aria-labelledby": Q,
|
|
187
|
+
"aria-describedby": x,
|
|
188
|
+
"aria-invalid": S || void 0,
|
|
189
|
+
children: [B ? /* @__PURE__ */ s("span", {
|
|
190
|
+
className: "select__value",
|
|
191
|
+
children: [B.icon && /* @__PURE__ */ o("span", {
|
|
192
|
+
className: "select__value-icon",
|
|
193
|
+
children: B.icon
|
|
194
|
+
}), /* @__PURE__ */ o("span", {
|
|
195
|
+
className: "select__value-label",
|
|
196
|
+
children: B.label
|
|
197
|
+
})]
|
|
198
|
+
}) : /* @__PURE__ */ o("span", {
|
|
199
|
+
className: "select__placeholder",
|
|
200
|
+
children: ee
|
|
201
|
+
}), /* @__PURE__ */ o("span", {
|
|
202
|
+
className: `select__chevron ${w ? "select__chevron--open" : ""}`,
|
|
203
|
+
children: /* @__PURE__ */ o("svg", {
|
|
204
|
+
width: "10",
|
|
205
|
+
height: "6",
|
|
206
|
+
viewBox: "0 0 10 6",
|
|
207
|
+
fill: "none",
|
|
208
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
209
|
+
children: /* @__PURE__ */ o("path", {
|
|
210
|
+
d: "M1 1L5 5L9 1",
|
|
211
|
+
stroke: "currentColor",
|
|
212
|
+
strokeWidth: "1.5",
|
|
213
|
+
strokeLinecap: "round",
|
|
214
|
+
strokeLinejoin: "round"
|
|
215
|
+
})
|
|
216
|
+
})
|
|
217
|
+
})]
|
|
218
|
+
}),
|
|
219
|
+
w && c(/* @__PURE__ */ s("div", {
|
|
220
|
+
ref: N,
|
|
221
|
+
className: "select__dropdown select__dropdown--portal",
|
|
222
|
+
style: {
|
|
223
|
+
position: "fixed",
|
|
224
|
+
top: `${String(A.top)}px`,
|
|
225
|
+
left: `${String(A.left)}px`,
|
|
226
|
+
width: `${String(A.width)}px`
|
|
227
|
+
},
|
|
228
|
+
children: [v && /* @__PURE__ */ o("div", {
|
|
229
|
+
className: "select__search",
|
|
230
|
+
children: /* @__PURE__ */ o("input", {
|
|
231
|
+
ref: P,
|
|
232
|
+
className: "select__search-input",
|
|
233
|
+
type: "search",
|
|
234
|
+
value: O,
|
|
235
|
+
onChange: (e) => k(e.currentTarget.value),
|
|
236
|
+
onKeyDown: X,
|
|
237
|
+
placeholder: y,
|
|
238
|
+
"aria-label": $,
|
|
239
|
+
"aria-labelledby": $ ? void 0 : Q,
|
|
240
|
+
"aria-controls": I,
|
|
241
|
+
"aria-activedescendant": W,
|
|
242
|
+
autoComplete: "off",
|
|
243
|
+
spellCheck: !1
|
|
244
|
+
})
|
|
245
|
+
}), /* @__PURE__ */ o("div", {
|
|
246
|
+
className: "select__options",
|
|
247
|
+
role: "listbox",
|
|
248
|
+
id: I,
|
|
249
|
+
"aria-label": b,
|
|
250
|
+
"aria-labelledby": Q,
|
|
251
|
+
children: V.length === 0 ? /* @__PURE__ */ o("div", {
|
|
252
|
+
className: "select__empty",
|
|
253
|
+
children: C
|
|
254
|
+
}) : V.map((e, t) => /* @__PURE__ */ s("div", {
|
|
255
|
+
id: U(t),
|
|
256
|
+
ref: (e) => {
|
|
257
|
+
F.current[t] = e;
|
|
258
|
+
},
|
|
259
|
+
className: `select__option ${e.value === l ? "select__option--selected" : ""} ${t === E ? "select__option--focused" : ""} ${e.disabled ? "select__option--disabled" : ""}`,
|
|
260
|
+
role: "option",
|
|
261
|
+
"aria-selected": e.value === l,
|
|
262
|
+
"aria-disabled": e.disabled || void 0,
|
|
263
|
+
"aria-label": e.description ? e.label + ". " + e.description : void 0,
|
|
264
|
+
onClick: (t) => {
|
|
265
|
+
J(e, t);
|
|
266
|
+
},
|
|
267
|
+
onMouseEnter: () => {
|
|
268
|
+
e.disabled || D(t);
|
|
269
|
+
},
|
|
270
|
+
children: [
|
|
271
|
+
e.icon && /* @__PURE__ */ o("span", {
|
|
272
|
+
className: "select__option-icon",
|
|
273
|
+
children: e.icon
|
|
274
|
+
}),
|
|
275
|
+
/* @__PURE__ */ s("div", {
|
|
276
|
+
className: "select__option-content",
|
|
277
|
+
children: [/* @__PURE__ */ o("span", {
|
|
278
|
+
className: "select__option-label",
|
|
279
|
+
children: e.label
|
|
280
|
+
}), e.description && /* @__PURE__ */ o("span", {
|
|
281
|
+
className: "select__option-description",
|
|
282
|
+
children: e.description
|
|
283
|
+
})]
|
|
284
|
+
}),
|
|
285
|
+
e.value === l && /* @__PURE__ */ o("span", {
|
|
286
|
+
className: "select__option-check",
|
|
287
|
+
children: /* @__PURE__ */ o("svg", {
|
|
288
|
+
width: "14",
|
|
289
|
+
height: "10",
|
|
290
|
+
viewBox: "0 0 14 10",
|
|
291
|
+
fill: "none",
|
|
292
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
293
|
+
children: /* @__PURE__ */ o("path", {
|
|
294
|
+
d: "M1 5L5 9L13 1",
|
|
295
|
+
stroke: "currentColor",
|
|
296
|
+
strokeWidth: "2",
|
|
297
|
+
strokeLinecap: "round",
|
|
298
|
+
strokeLinejoin: "round"
|
|
299
|
+
})
|
|
300
|
+
})
|
|
301
|
+
})
|
|
302
|
+
]
|
|
303
|
+
}, e.value))
|
|
304
|
+
})]
|
|
305
|
+
}), document.body)
|
|
306
|
+
]
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
//#endregion
|
|
310
|
+
export { l as Select };
|
|
311
|
+
|
|
312
|
+
//# sourceMappingURL=Select2.js.map
|
|
313
|
+
import "../../assets/components/Select/Select.css";
|