@flanksource/clicky-ui 0.2.15 → 0.2.16
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/dist/components/Combobox.cjs +15 -7
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.ts +8 -0
- package/dist/components/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox.js +15 -7
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/DateTimePicker.cjs +3 -0
- package/dist/components/DateTimePicker.cjs.map +1 -1
- package/dist/components/DateTimePicker.d.ts +6 -2
- package/dist/components/DateTimePicker.d.ts.map +1 -1
- package/dist/components/DateTimePicker.js +3 -0
- package/dist/components/DateTimePicker.js.map +1 -1
- package/dist/components/Field.cjs +33 -0
- package/dist/components/Field.cjs.map +1 -0
- package/dist/components/Field.d.ts +27 -0
- package/dist/components/Field.d.ts.map +1 -0
- package/dist/components/Field.js +33 -0
- package/dist/components/Field.js.map +1 -0
- package/dist/components/FilterBar.cjs +41 -14
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +2 -0
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +43 -16
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/MultiSelect.cjs +2 -1
- package/dist/components/MultiSelect.cjs.map +1 -1
- package/dist/components/MultiSelect.d.ts +5 -1
- package/dist/components/MultiSelect.d.ts.map +1 -1
- package/dist/components/MultiSelect.js +2 -1
- package/dist/components/MultiSelect.js.map +1 -1
- package/dist/components/json-schema-form-fields.cjs +15 -8
- package/dist/components/json-schema-form-fields.cjs.map +1 -1
- package/dist/components/json-schema-form-fields.d.ts.map +1 -1
- package/dist/components/json-schema-form-fields.js +15 -8
- package/dist/components/json-schema-form-fields.js.map +1 -1
- package/dist/components/json-schema-form-types.d.ts +1 -0
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/loading.cjs +4 -4
- package/dist/components/loading.cjs.map +1 -1
- package/dist/components/loading.d.ts +6 -4
- package/dist/components/loading.d.ts.map +1 -1
- package/dist/components/loading.js +4 -4
- package/dist/components/loading.js.map +1 -1
- package/dist/components/use-form.cjs +27 -0
- package/dist/components/use-form.cjs.map +1 -0
- package/dist/components/use-form.d.ts +30 -0
- package/dist/components/use-form.d.ts.map +1 -0
- package/dist/components/use-form.js +27 -0
- package/dist/components/use-form.js.map +1 -0
- package/dist/components.cjs +7 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +4 -1
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +8 -1
- package/dist/components.js.map +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/index.cjs +7 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/overlay/Modal.cjs +27 -23
- package/dist/overlay/Modal.cjs.map +1 -1
- package/dist/overlay/Modal.d.ts +7 -1
- package/dist/overlay/Modal.d.ts.map +1 -1
- package/dist/overlay/Modal.js +27 -23
- package/dist/overlay/Modal.js.map +1 -1
- package/dist/rpc/FilterForm.cjs +4 -4
- package/dist/rpc/FilterForm.cjs.map +1 -1
- package/dist/rpc/FilterForm.js +4 -4
- package/dist/rpc/FilterForm.js.map +1 -1
- package/dist/rpc/OperationCatalog.cjs +17 -21
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts +3 -3
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +18 -22
- package/dist/rpc/OperationCatalog.js.map +1 -1
- package/dist/rpc/formMetadata.cjs +5 -3
- package/dist/rpc/formMetadata.cjs.map +1 -1
- package/dist/rpc/formMetadata.d.ts.map +1 -1
- package/dist/rpc/formMetadata.js +5 -3
- package/dist/rpc/formMetadata.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loading.cjs","sources":["../../src/components/loading.tsx"],"sourcesContent":["import {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n type SVGProps,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport type LoadingSize = \"sm\" | \"md\" | \"lg\" | \"responsive\";\nexport type LoadingVariant = \"inline\" | \"centered\";\n\nexport interface LoadingProps extends HTMLAttributes<HTMLDivElement> {\n /** Fixed size, or `responsive` (default) to scale with the container. */\n size?: LoadingSize;\n /** `inline` for a small in-flow loader, `centered` for a section/page loader. */\n variant?: LoadingVariant;\n /** Optional caption rendered beside (inline) or beneath (centered) the dots. */\n label?: ReactNode;\n}\n\nconst FIXED_DOT_SIZE: Record<Exclude<LoadingSize, \"responsive\">, string> = {\n sm: \"size-4\",\n md: \"size-6\",\n lg: \"size-10\",\n};\n\n// Scales with the
|
|
1
|
+
{"version":3,"file":"loading.cjs","sources":["../../src/components/loading.tsx"],"sourcesContent":["import {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n type SVGProps,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport type LoadingSize = \"sm\" | \"md\" | \"lg\" | \"responsive\";\nexport type LoadingVariant = \"inline\" | \"centered\";\n\nexport interface LoadingProps extends HTMLAttributes<HTMLDivElement> {\n /** Fixed size, or `responsive` (default) to scale with the container. */\n size?: LoadingSize;\n /** `inline` for a small in-flow loader, `centered` for a section/page loader. */\n variant?: LoadingVariant;\n /** Optional caption rendered beside (inline) or beneath (centered) the dots. */\n label?: ReactNode;\n}\n\nconst FIXED_DOT_SIZE: Record<Exclude<LoadingSize, \"responsive\">, string> = {\n sm: \"size-4\",\n md: \"size-6\",\n lg: \"size-10\",\n};\n\n// Scales with the SMALLER of the container's two dimensions (`cqmin`, enabled by\n// `container-type: size` on the centered wrapper). Using `cqmin` rather than the\n// width alone means a wide-but-short panel reads as small — only a genuinely\n// large area (a full-page load) grows the dots. Floors at 1.25rem (20px) in\n// tight panels, climbs to 2.5rem (40px) on big loads. Pure CSS — no\n// ResizeObserver, SSR-safe.\nconst RESPONSIVE_DOT_SIZE = \"size-[clamp(1.25rem,18cqmin,2.5rem)]\";\nconst RESPONSIVE_LABEL_SIZE = \"text-[clamp(0.72rem,4.5cqmin,0.9rem)]\";\n\n/**\n * Three bouncing dots. `fill=\"currentColor\"` so the dots inherit the surrounding\n * theme text color (works in light and dark). Size is driven entirely by the\n * className (width + height); the viewBox keeps the 1:1 aspect.\n */\nexport const LoadingDots = forwardRef<SVGSVGElement, SVGProps<SVGSVGElement>>(\n ({ className, ...props }, ref) => (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n className={cn(\"shrink-0\", className)}\n {...props}\n >\n <circle cx=\"4\" cy=\"12\" r=\"3\">\n <animate\n id=\"clickyLoadDotA\"\n fill=\"freeze\"\n attributeName=\"opacity\"\n begin=\"0;clickyLoadDotC.end-0.25s\"\n dur=\"0.75s\"\n values=\"1;0.2\"\n />\n </circle>\n <circle cx=\"12\" cy=\"12\" r=\"3\" opacity=\"0.4\">\n <animate\n fill=\"freeze\"\n attributeName=\"opacity\"\n begin=\"clickyLoadDotA.begin+0.15s\"\n dur=\"0.75s\"\n values=\"1;0.2\"\n />\n </circle>\n <circle cx=\"20\" cy=\"12\" r=\"3\" opacity=\"0.3\">\n <animate\n id=\"clickyLoadDotC\"\n fill=\"freeze\"\n attributeName=\"opacity\"\n begin=\"clickyLoadDotA.begin+0.3s\"\n dur=\"0.75s\"\n values=\"1;0.2\"\n />\n </circle>\n </svg>\n ),\n);\nLoadingDots.displayName = \"LoadingDots\";\n\n/**\n * Loading indicator built on the shared 3-dot animation.\n *\n * `centered` fills the space it is given (`h-full` within a `min-h-32` floor) and\n * establishes a size container (`container-type: size`) so the default\n * `responsive` size scales the dots to that space via `cqmin` — small inside a\n * narrow/short panel, large on a full-page route shell that stretches it tall.\n * The `inline` variant is not a container, so a `responsive` request there\n * renders at `sm`.\n */\nexport const Loading = forwardRef<HTMLDivElement, LoadingProps>(\n ({ size = \"responsive\", variant = \"inline\", label, className, ...props }, ref) => {\n const effectiveSize =\n variant === \"inline\" && size === \"responsive\" ? \"sm\" : size;\n const isResponsive = effectiveSize === \"responsive\";\n const dotClass = isResponsive\n ? RESPONSIVE_DOT_SIZE\n : FIXED_DOT_SIZE[effectiveSize];\n\n if (variant === \"centered\") {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\n \"flex h-full min-h-32 w-full flex-col items-center justify-center gap-3 text-muted-foreground\",\n \"[container-type:size]\",\n className,\n )}\n {...props}\n >\n <LoadingDots className={dotClass} />\n {label != null && (\n <span className={cn(isResponsive ? RESPONSIVE_LABEL_SIZE : \"text-sm\")}>\n {label}\n </span>\n )}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\n \"inline-flex items-center gap-2 text-muted-foreground\",\n className,\n )}\n {...props}\n >\n <LoadingDots className={dotClass} />\n {label != null && <span className=\"text-sm\">{label}</span>}\n </div>\n );\n },\n);\nLoading.displayName = \"Loading\";\n"],"names":["forwardRef","jsxs","cn","jsx"],"mappings":";;;;;AAoBA,MAAM,iBAAqE;AAAA,EACzE,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAQA,MAAM,sBAAsB;AAC5B,MAAM,wBAAwB;AAOvB,MAAM,cAAcA,MAAAA;AAAAA,EACzB,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QACxBC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,OAAM;AAAA,MACN,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAY;AAAA,MACZ,WAAWC,MAAAA,GAAG,YAAY,SAAS;AAAA,MAClC,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAAC,+BAAC,YAAO,IAAG,KAAI,IAAG,MAAK,GAAE,KACvB,UAAAA,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAK;AAAA,YACL,eAAc;AAAA,YACd,OAAM;AAAA,YACN,KAAI;AAAA,YACJ,QAAO;AAAA,UAAA;AAAA,QAAA,GAEX;AAAA,QACAA,2BAAAA,IAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,SAAQ,OACpC,UAAAA,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,eAAc;AAAA,YACd,OAAM;AAAA,YACN,KAAI;AAAA,YACJ,QAAO;AAAA,UAAA;AAAA,QAAA,GAEX;AAAA,QACAA,2BAAAA,IAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,SAAQ,OACpC,UAAAA,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAK;AAAA,YACL,eAAc;AAAA,YACd,OAAM;AAAA,YACN,KAAI;AAAA,YACJ,QAAO;AAAA,UAAA;AAAA,QAAA,EACT,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AACA,YAAY,cAAc;AAYnB,MAAM,UAAUH,MAAAA;AAAAA,EACrB,CAAC,EAAE,OAAO,cAAc,UAAU,UAAU,OAAO,WAAW,GAAG,MAAA,GAAS,QAAQ;AAChF,UAAM,gBACJ,YAAY,YAAY,SAAS,eAAe,OAAO;AACzD,UAAM,eAAe,kBAAkB;AACvC,UAAM,WAAW,eACb,sBACA,eAAe,aAAa;AAEhC,QAAI,YAAY,YAAY;AAC1B,aACEC,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,MAAK;AAAA,UACL,cAAW;AAAA,UACX,WAAWC,MAAAA;AAAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,UAED,GAAG;AAAA,UAEJ,UAAA;AAAA,YAAAC,2BAAAA,IAAC,aAAA,EAAY,WAAW,SAAA,CAAU;AAAA,YACjC,SAAS,QACRA,+BAAC,QAAA,EAAK,WAAWD,SAAG,eAAe,wBAAwB,SAAS,GACjE,UAAA,MAAA,CACH;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAIR;AAEA,WACED,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,cAAW;AAAA,QACX,WAAWC,MAAAA;AAAAA,UACT;AAAA,UACA;AAAA,QAAA;AAAA,QAED,GAAG;AAAA,QAEJ,UAAA;AAAA,UAAAC,2BAAAA,IAAC,aAAA,EAAY,WAAW,SAAA,CAAU;AAAA,UACjC,SAAS,QAAQA,2BAAAA,IAAC,QAAA,EAAK,WAAU,WAAW,UAAA,MAAA,CAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGzD;AACF;AACA,QAAQ,cAAc;;;"}
|
|
@@ -18,10 +18,12 @@ export declare const LoadingDots: import('react').ForwardRefExoticComponent<Omit
|
|
|
18
18
|
/**
|
|
19
19
|
* Loading indicator built on the shared 3-dot animation.
|
|
20
20
|
*
|
|
21
|
-
* `centered`
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
21
|
+
* `centered` fills the space it is given (`h-full` within a `min-h-32` floor) and
|
|
22
|
+
* establishes a size container (`container-type: size`) so the default
|
|
23
|
+
* `responsive` size scales the dots to that space via `cqmin` — small inside a
|
|
24
|
+
* narrow/short panel, large on a full-page route shell that stretches it tall.
|
|
25
|
+
* The `inline` variant is not a container, so a `responsive` request there
|
|
26
|
+
* renders at `sm`.
|
|
25
27
|
*/
|
|
26
28
|
export declare const Loading: import('react').ForwardRefExoticComponent<LoadingProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
27
29
|
//# sourceMappingURL=loading.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loading.d.ts","sourceRoot":"","sources":["../../src/components/loading.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,QAAQ,EACd,MAAM,OAAO,CAAC;AAGf,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,YAAY,CAAC;AAC5D,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEnD,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,cAAc,CAAC;IAClE,yEAAyE;IACzE,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,iFAAiF;IACjF,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,gFAAgF;IAChF,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"loading.d.ts","sourceRoot":"","sources":["../../src/components/loading.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,QAAQ,EACd,MAAM,OAAO,CAAC;AAGf,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,YAAY,CAAC;AAC5D,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEnD,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,cAAc,CAAC;IAClE,yEAAyE;IACzE,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,iFAAiF;IACjF,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,gFAAgF;IAChF,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAiBD;;;;GAIG;AACH,eAAO,MAAM,WAAW,gIA0CvB,CAAC;AAGF;;;;;;;;;GASG;AACH,eAAO,MAAM,OAAO,yGAgDnB,CAAC"}
|
|
@@ -6,8 +6,8 @@ const FIXED_DOT_SIZE = {
|
|
|
6
6
|
md: "size-6",
|
|
7
7
|
lg: "size-10"
|
|
8
8
|
};
|
|
9
|
-
const RESPONSIVE_DOT_SIZE = "size-[clamp(1.
|
|
10
|
-
const RESPONSIVE_LABEL_SIZE = "text-[clamp(0.
|
|
9
|
+
const RESPONSIVE_DOT_SIZE = "size-[clamp(1.25rem,18cqmin,2.5rem)]";
|
|
10
|
+
const RESPONSIVE_LABEL_SIZE = "text-[clamp(0.72rem,4.5cqmin,0.9rem)]";
|
|
11
11
|
const LoadingDots = forwardRef(
|
|
12
12
|
({ className, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
13
13
|
"svg",
|
|
@@ -70,8 +70,8 @@ const Loading = forwardRef(
|
|
|
70
70
|
role: "status",
|
|
71
71
|
"aria-label": "Loading",
|
|
72
72
|
className: cn(
|
|
73
|
-
"flex min-h-32 w-full flex-col items-center justify-center gap-3 text-muted-foreground",
|
|
74
|
-
"[container-type:
|
|
73
|
+
"flex h-full min-h-32 w-full flex-col items-center justify-center gap-3 text-muted-foreground",
|
|
74
|
+
"[container-type:size]",
|
|
75
75
|
className
|
|
76
76
|
),
|
|
77
77
|
...props,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loading.js","sources":["../../src/components/loading.tsx"],"sourcesContent":["import {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n type SVGProps,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport type LoadingSize = \"sm\" | \"md\" | \"lg\" | \"responsive\";\nexport type LoadingVariant = \"inline\" | \"centered\";\n\nexport interface LoadingProps extends HTMLAttributes<HTMLDivElement> {\n /** Fixed size, or `responsive` (default) to scale with the container. */\n size?: LoadingSize;\n /** `inline` for a small in-flow loader, `centered` for a section/page loader. */\n variant?: LoadingVariant;\n /** Optional caption rendered beside (inline) or beneath (centered) the dots. */\n label?: ReactNode;\n}\n\nconst FIXED_DOT_SIZE: Record<Exclude<LoadingSize, \"responsive\">, string> = {\n sm: \"size-4\",\n md: \"size-6\",\n lg: \"size-10\",\n};\n\n// Scales with the
|
|
1
|
+
{"version":3,"file":"loading.js","sources":["../../src/components/loading.tsx"],"sourcesContent":["import {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n type SVGProps,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport type LoadingSize = \"sm\" | \"md\" | \"lg\" | \"responsive\";\nexport type LoadingVariant = \"inline\" | \"centered\";\n\nexport interface LoadingProps extends HTMLAttributes<HTMLDivElement> {\n /** Fixed size, or `responsive` (default) to scale with the container. */\n size?: LoadingSize;\n /** `inline` for a small in-flow loader, `centered` for a section/page loader. */\n variant?: LoadingVariant;\n /** Optional caption rendered beside (inline) or beneath (centered) the dots. */\n label?: ReactNode;\n}\n\nconst FIXED_DOT_SIZE: Record<Exclude<LoadingSize, \"responsive\">, string> = {\n sm: \"size-4\",\n md: \"size-6\",\n lg: \"size-10\",\n};\n\n// Scales with the SMALLER of the container's two dimensions (`cqmin`, enabled by\n// `container-type: size` on the centered wrapper). Using `cqmin` rather than the\n// width alone means a wide-but-short panel reads as small — only a genuinely\n// large area (a full-page load) grows the dots. Floors at 1.25rem (20px) in\n// tight panels, climbs to 2.5rem (40px) on big loads. Pure CSS — no\n// ResizeObserver, SSR-safe.\nconst RESPONSIVE_DOT_SIZE = \"size-[clamp(1.25rem,18cqmin,2.5rem)]\";\nconst RESPONSIVE_LABEL_SIZE = \"text-[clamp(0.72rem,4.5cqmin,0.9rem)]\";\n\n/**\n * Three bouncing dots. `fill=\"currentColor\"` so the dots inherit the surrounding\n * theme text color (works in light and dark). Size is driven entirely by the\n * className (width + height); the viewBox keeps the 1:1 aspect.\n */\nexport const LoadingDots = forwardRef<SVGSVGElement, SVGProps<SVGSVGElement>>(\n ({ className, ...props }, ref) => (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n className={cn(\"shrink-0\", className)}\n {...props}\n >\n <circle cx=\"4\" cy=\"12\" r=\"3\">\n <animate\n id=\"clickyLoadDotA\"\n fill=\"freeze\"\n attributeName=\"opacity\"\n begin=\"0;clickyLoadDotC.end-0.25s\"\n dur=\"0.75s\"\n values=\"1;0.2\"\n />\n </circle>\n <circle cx=\"12\" cy=\"12\" r=\"3\" opacity=\"0.4\">\n <animate\n fill=\"freeze\"\n attributeName=\"opacity\"\n begin=\"clickyLoadDotA.begin+0.15s\"\n dur=\"0.75s\"\n values=\"1;0.2\"\n />\n </circle>\n <circle cx=\"20\" cy=\"12\" r=\"3\" opacity=\"0.3\">\n <animate\n id=\"clickyLoadDotC\"\n fill=\"freeze\"\n attributeName=\"opacity\"\n begin=\"clickyLoadDotA.begin+0.3s\"\n dur=\"0.75s\"\n values=\"1;0.2\"\n />\n </circle>\n </svg>\n ),\n);\nLoadingDots.displayName = \"LoadingDots\";\n\n/**\n * Loading indicator built on the shared 3-dot animation.\n *\n * `centered` fills the space it is given (`h-full` within a `min-h-32` floor) and\n * establishes a size container (`container-type: size`) so the default\n * `responsive` size scales the dots to that space via `cqmin` — small inside a\n * narrow/short panel, large on a full-page route shell that stretches it tall.\n * The `inline` variant is not a container, so a `responsive` request there\n * renders at `sm`.\n */\nexport const Loading = forwardRef<HTMLDivElement, LoadingProps>(\n ({ size = \"responsive\", variant = \"inline\", label, className, ...props }, ref) => {\n const effectiveSize =\n variant === \"inline\" && size === \"responsive\" ? \"sm\" : size;\n const isResponsive = effectiveSize === \"responsive\";\n const dotClass = isResponsive\n ? RESPONSIVE_DOT_SIZE\n : FIXED_DOT_SIZE[effectiveSize];\n\n if (variant === \"centered\") {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\n \"flex h-full min-h-32 w-full flex-col items-center justify-center gap-3 text-muted-foreground\",\n \"[container-type:size]\",\n className,\n )}\n {...props}\n >\n <LoadingDots className={dotClass} />\n {label != null && (\n <span className={cn(isResponsive ? RESPONSIVE_LABEL_SIZE : \"text-sm\")}>\n {label}\n </span>\n )}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\n \"inline-flex items-center gap-2 text-muted-foreground\",\n className,\n )}\n {...props}\n >\n <LoadingDots className={dotClass} />\n {label != null && <span className=\"text-sm\">{label}</span>}\n </div>\n );\n },\n);\nLoading.displayName = \"Loading\";\n"],"names":[],"mappings":";;;AAoBA,MAAM,iBAAqE;AAAA,EACzE,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAQA,MAAM,sBAAsB;AAC5B,MAAM,wBAAwB;AAOvB,MAAM,cAAc;AAAA,EACzB,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QACxB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,OAAM;AAAA,MACN,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAY;AAAA,MACZ,WAAW,GAAG,YAAY,SAAS;AAAA,MAClC,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAA,oBAAC,YAAO,IAAG,KAAI,IAAG,MAAK,GAAE,KACvB,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAK;AAAA,YACL,eAAc;AAAA,YACd,OAAM;AAAA,YACN,KAAI;AAAA,YACJ,QAAO;AAAA,UAAA;AAAA,QAAA,GAEX;AAAA,QACA,oBAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,SAAQ,OACpC,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,eAAc;AAAA,YACd,OAAM;AAAA,YACN,KAAI;AAAA,YACJ,QAAO;AAAA,UAAA;AAAA,QAAA,GAEX;AAAA,QACA,oBAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,SAAQ,OACpC,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAK;AAAA,YACL,eAAc;AAAA,YACd,OAAM;AAAA,YACN,KAAI;AAAA,YACJ,QAAO;AAAA,UAAA;AAAA,QAAA,EACT,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AACA,YAAY,cAAc;AAYnB,MAAM,UAAU;AAAA,EACrB,CAAC,EAAE,OAAO,cAAc,UAAU,UAAU,OAAO,WAAW,GAAG,MAAA,GAAS,QAAQ;AAChF,UAAM,gBACJ,YAAY,YAAY,SAAS,eAAe,OAAO;AACzD,UAAM,eAAe,kBAAkB;AACvC,UAAM,WAAW,eACb,sBACA,eAAe,aAAa;AAEhC,QAAI,YAAY,YAAY;AAC1B,aACE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,MAAK;AAAA,UACL,cAAW;AAAA,UACX,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,UAED,GAAG;AAAA,UAEJ,UAAA;AAAA,YAAA,oBAAC,aAAA,EAAY,WAAW,SAAA,CAAU;AAAA,YACjC,SAAS,QACR,oBAAC,QAAA,EAAK,WAAW,GAAG,eAAe,wBAAwB,SAAS,GACjE,UAAA,MAAA,CACH;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAIR;AAEA,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,cAAW;AAAA,QACX,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QAAA;AAAA,QAED,GAAG;AAAA,QAEJ,UAAA;AAAA,UAAA,oBAAC,aAAA,EAAY,WAAW,SAAA,CAAU;AAAA,UACjC,SAAS,QAAQ,oBAAC,QAAA,EAAK,WAAU,WAAW,UAAA,MAAA,CAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGzD;AACF;AACA,QAAQ,cAAc;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const react = require("react");
|
|
4
|
+
function useForm({ values, validate, onSubmit }) {
|
|
5
|
+
const [touched, setTouched] = react.useState({});
|
|
6
|
+
const [submitted, setSubmitted] = react.useState(false);
|
|
7
|
+
const errors = react.useMemo(() => validate(values), [validate, values]);
|
|
8
|
+
const isValid = react.useMemo(() => !Object.values(errors).some(Boolean), [errors]);
|
|
9
|
+
const fieldError = react.useCallback(
|
|
10
|
+
(key) => submitted || touched[key] ? errors[key] : void 0,
|
|
11
|
+
[submitted, touched, errors]
|
|
12
|
+
);
|
|
13
|
+
const markTouched = react.useCallback((key) => {
|
|
14
|
+
setTouched((prev) => prev[key] ? prev : { ...prev, [key]: true });
|
|
15
|
+
}, []);
|
|
16
|
+
const submit = react.useCallback(() => {
|
|
17
|
+
setSubmitted(true);
|
|
18
|
+
if (isValid) onSubmit == null ? void 0 : onSubmit(values);
|
|
19
|
+
}, [isValid, onSubmit, values]);
|
|
20
|
+
const reset = react.useCallback(() => {
|
|
21
|
+
setTouched({});
|
|
22
|
+
setSubmitted(false);
|
|
23
|
+
}, []);
|
|
24
|
+
return { errors, isValid, submitted, fieldError, markTouched, submit, reset };
|
|
25
|
+
}
|
|
26
|
+
exports.useForm = useForm;
|
|
27
|
+
//# sourceMappingURL=use-form.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-form.cjs","sources":["../../src/components/use-form.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\n\n// FieldErrors maps a field key to its current validation message (or undefined\n// when the field is valid). validate() returns the full map every call so a form\n// can show every problem at once, not just the first.\nexport type FieldErrors = Record<string, string | undefined>;\n\nexport interface UseFormOptions<V> {\n /** The current form values (owned by the caller). */\n values: V;\n /** Pure validator returning all field errors for the given values. */\n validate: (values: V) => FieldErrors;\n /** Called by submit() only when the form is valid. */\n onSubmit?: (values: V) => void;\n}\n\nexport interface UseFormResult {\n /** Every field's error (independent of touched/submitted). */\n errors: FieldErrors;\n /** True when no field has an error. */\n isValid: boolean;\n /** True once submit() has been called (reveals all errors). */\n submitted: boolean;\n /**\n * The error to display for a field: present only once the field has been\n * touched (blurred) or submit() has run, so a pristine form isn't all red.\n */\n fieldError: (key: string) => string | undefined;\n /** Mark a field touched — wire to a field's onBlur. */\n markTouched: (key: string) => void;\n /** Reveal all errors; run onSubmit only when valid. */\n submit: () => void;\n /** Clear touched + submitted state (e.g. when a dialog reopens). */\n reset: () => void;\n}\n\n// useForm centralizes the touched/submitted/error bookkeeping a hand-built form\n// needs: it computes per-field errors from the caller's validate(), and gates\n// their display so each error surfaces on blur or on submit. The form values\n// stay owned by the caller (this hook does not store them), so it composes with\n// conditional fields and bespoke layouts.\nexport function useForm<V>({ values, validate, onSubmit }: UseFormOptions<V>): UseFormResult {\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n const [submitted, setSubmitted] = useState(false);\n\n const errors = useMemo(() => validate(values), [validate, values]);\n const isValid = useMemo(() => !Object.values(errors).some(Boolean), [errors]);\n\n const fieldError = useCallback(\n (key: string) => (submitted || touched[key] ? errors[key] : undefined),\n [submitted, touched, errors],\n );\n\n const markTouched = useCallback((key: string) => {\n setTouched((prev) => (prev[key] ? prev : { ...prev, [key]: true }));\n }, []);\n\n const submit = useCallback(() => {\n setSubmitted(true);\n if (isValid) onSubmit?.(values);\n }, [isValid, onSubmit, values]);\n\n const reset = useCallback(() => {\n setTouched({});\n setSubmitted(false);\n }, []);\n\n return { errors, isValid, submitted, fieldError, markTouched, submit, reset };\n}\n"],"names":["useState","useMemo","useCallback"],"mappings":";;;AAyCO,SAAS,QAAW,EAAE,QAAQ,UAAU,YAA8C;AAC3F,QAAM,CAAC,SAAS,UAAU,IAAIA,MAAAA,SAAkC,CAAA,CAAE;AAClE,QAAM,CAAC,WAAW,YAAY,IAAIA,MAAAA,SAAS,KAAK;AAEhD,QAAM,SAASC,MAAAA,QAAQ,MAAM,SAAS,MAAM,GAAG,CAAC,UAAU,MAAM,CAAC;AACjE,QAAM,UAAUA,MAAAA,QAAQ,MAAM,CAAC,OAAO,OAAO,MAAM,EAAE,KAAK,OAAO,GAAG,CAAC,MAAM,CAAC;AAE5E,QAAM,aAAaC,MAAAA;AAAAA,IACjB,CAAC,QAAiB,aAAa,QAAQ,GAAG,IAAI,OAAO,GAAG,IAAI;AAAA,IAC5D,CAAC,WAAW,SAAS,MAAM;AAAA,EAAA;AAG7B,QAAM,cAAcA,kBAAY,CAAC,QAAgB;AAC/C,eAAW,CAAC,SAAU,KAAK,GAAG,IAAI,OAAO,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,MAAO;AAAA,EACpE,GAAG,CAAA,CAAE;AAEL,QAAM,SAASA,MAAAA,YAAY,MAAM;AAC/B,iBAAa,IAAI;AACjB,QAAI,8CAAoB;AAAA,EAC1B,GAAG,CAAC,SAAS,UAAU,MAAM,CAAC;AAE9B,QAAM,QAAQA,MAAAA,YAAY,MAAM;AAC9B,eAAW,CAAA,CAAE;AACb,iBAAa,KAAK;AAAA,EACpB,GAAG,CAAA,CAAE;AAEL,SAAO,EAAE,QAAQ,SAAS,WAAW,YAAY,aAAa,QAAQ,MAAA;AACxE;;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type FieldErrors = Record<string, string | undefined>;
|
|
2
|
+
export interface UseFormOptions<V> {
|
|
3
|
+
/** The current form values (owned by the caller). */
|
|
4
|
+
values: V;
|
|
5
|
+
/** Pure validator returning all field errors for the given values. */
|
|
6
|
+
validate: (values: V) => FieldErrors;
|
|
7
|
+
/** Called by submit() only when the form is valid. */
|
|
8
|
+
onSubmit?: (values: V) => void;
|
|
9
|
+
}
|
|
10
|
+
export interface UseFormResult {
|
|
11
|
+
/** Every field's error (independent of touched/submitted). */
|
|
12
|
+
errors: FieldErrors;
|
|
13
|
+
/** True when no field has an error. */
|
|
14
|
+
isValid: boolean;
|
|
15
|
+
/** True once submit() has been called (reveals all errors). */
|
|
16
|
+
submitted: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* The error to display for a field: present only once the field has been
|
|
19
|
+
* touched (blurred) or submit() has run, so a pristine form isn't all red.
|
|
20
|
+
*/
|
|
21
|
+
fieldError: (key: string) => string | undefined;
|
|
22
|
+
/** Mark a field touched — wire to a field's onBlur. */
|
|
23
|
+
markTouched: (key: string) => void;
|
|
24
|
+
/** Reveal all errors; run onSubmit only when valid. */
|
|
25
|
+
submit: () => void;
|
|
26
|
+
/** Clear touched + submitted state (e.g. when a dialog reopens). */
|
|
27
|
+
reset: () => void;
|
|
28
|
+
}
|
|
29
|
+
export declare function useForm<V>({ values, validate, onSubmit }: UseFormOptions<V>): UseFormResult;
|
|
30
|
+
//# sourceMappingURL=use-form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-form.d.ts","sourceRoot":"","sources":["../../src/components/use-form.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAE7D,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,qDAAqD;IACrD,MAAM,EAAE,CAAC,CAAC;IACV,sEAAsE;IACtE,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,WAAW,CAAC;IACrC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,MAAM,EAAE,WAAW,CAAC;IACpB,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,SAAS,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAChD,uDAAuD;IACvD,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,uDAAuD;IACvD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,oEAAoE;IACpE,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAOD,wBAAgB,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,CA2B3F"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useState, useMemo, useCallback } from "react";
|
|
2
|
+
function useForm({ values, validate, onSubmit }) {
|
|
3
|
+
const [touched, setTouched] = useState({});
|
|
4
|
+
const [submitted, setSubmitted] = useState(false);
|
|
5
|
+
const errors = useMemo(() => validate(values), [validate, values]);
|
|
6
|
+
const isValid = useMemo(() => !Object.values(errors).some(Boolean), [errors]);
|
|
7
|
+
const fieldError = useCallback(
|
|
8
|
+
(key) => submitted || touched[key] ? errors[key] : void 0,
|
|
9
|
+
[submitted, touched, errors]
|
|
10
|
+
);
|
|
11
|
+
const markTouched = useCallback((key) => {
|
|
12
|
+
setTouched((prev) => prev[key] ? prev : { ...prev, [key]: true });
|
|
13
|
+
}, []);
|
|
14
|
+
const submit = useCallback(() => {
|
|
15
|
+
setSubmitted(true);
|
|
16
|
+
if (isValid) onSubmit == null ? void 0 : onSubmit(values);
|
|
17
|
+
}, [isValid, onSubmit, values]);
|
|
18
|
+
const reset = useCallback(() => {
|
|
19
|
+
setTouched({});
|
|
20
|
+
setSubmitted(false);
|
|
21
|
+
}, []);
|
|
22
|
+
return { errors, isValid, submitted, fieldError, markTouched, submit, reset };
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
useForm
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=use-form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-form.js","sources":["../../src/components/use-form.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\n\n// FieldErrors maps a field key to its current validation message (or undefined\n// when the field is valid). validate() returns the full map every call so a form\n// can show every problem at once, not just the first.\nexport type FieldErrors = Record<string, string | undefined>;\n\nexport interface UseFormOptions<V> {\n /** The current form values (owned by the caller). */\n values: V;\n /** Pure validator returning all field errors for the given values. */\n validate: (values: V) => FieldErrors;\n /** Called by submit() only when the form is valid. */\n onSubmit?: (values: V) => void;\n}\n\nexport interface UseFormResult {\n /** Every field's error (independent of touched/submitted). */\n errors: FieldErrors;\n /** True when no field has an error. */\n isValid: boolean;\n /** True once submit() has been called (reveals all errors). */\n submitted: boolean;\n /**\n * The error to display for a field: present only once the field has been\n * touched (blurred) or submit() has run, so a pristine form isn't all red.\n */\n fieldError: (key: string) => string | undefined;\n /** Mark a field touched — wire to a field's onBlur. */\n markTouched: (key: string) => void;\n /** Reveal all errors; run onSubmit only when valid. */\n submit: () => void;\n /** Clear touched + submitted state (e.g. when a dialog reopens). */\n reset: () => void;\n}\n\n// useForm centralizes the touched/submitted/error bookkeeping a hand-built form\n// needs: it computes per-field errors from the caller's validate(), and gates\n// their display so each error surfaces on blur or on submit. The form values\n// stay owned by the caller (this hook does not store them), so it composes with\n// conditional fields and bespoke layouts.\nexport function useForm<V>({ values, validate, onSubmit }: UseFormOptions<V>): UseFormResult {\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n const [submitted, setSubmitted] = useState(false);\n\n const errors = useMemo(() => validate(values), [validate, values]);\n const isValid = useMemo(() => !Object.values(errors).some(Boolean), [errors]);\n\n const fieldError = useCallback(\n (key: string) => (submitted || touched[key] ? errors[key] : undefined),\n [submitted, touched, errors],\n );\n\n const markTouched = useCallback((key: string) => {\n setTouched((prev) => (prev[key] ? prev : { ...prev, [key]: true }));\n }, []);\n\n const submit = useCallback(() => {\n setSubmitted(true);\n if (isValid) onSubmit?.(values);\n }, [isValid, onSubmit, values]);\n\n const reset = useCallback(() => {\n setTouched({});\n setSubmitted(false);\n }, []);\n\n return { errors, isValid, submitted, fieldError, markTouched, submit, reset };\n}\n"],"names":[],"mappings":";AAyCO,SAAS,QAAW,EAAE,QAAQ,UAAU,YAA8C;AAC3F,QAAM,CAAC,SAAS,UAAU,IAAI,SAAkC,CAAA,CAAE;AAClE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAEhD,QAAM,SAAS,QAAQ,MAAM,SAAS,MAAM,GAAG,CAAC,UAAU,MAAM,CAAC;AACjE,QAAM,UAAU,QAAQ,MAAM,CAAC,OAAO,OAAO,MAAM,EAAE,KAAK,OAAO,GAAG,CAAC,MAAM,CAAC;AAE5E,QAAM,aAAa;AAAA,IACjB,CAAC,QAAiB,aAAa,QAAQ,GAAG,IAAI,OAAO,GAAG,IAAI;AAAA,IAC5D,CAAC,WAAW,SAAS,MAAM;AAAA,EAAA;AAG7B,QAAM,cAAc,YAAY,CAAC,QAAgB;AAC/C,eAAW,CAAC,SAAU,KAAK,GAAG,IAAI,OAAO,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,MAAO;AAAA,EACpE,GAAG,CAAA,CAAE;AAEL,QAAM,SAAS,YAAY,MAAM;AAC/B,iBAAa,IAAI;AACjB,QAAI,8CAAoB;AAAA,EAC1B,GAAG,CAAC,SAAS,UAAU,MAAM,CAAC;AAE9B,QAAM,QAAQ,YAAY,MAAM;AAC9B,eAAW,CAAA,CAAE;AACb,iBAAa,KAAK;AAAA,EACpB,GAAG,CAAA,CAAE;AAEL,SAAO,EAAE,QAAQ,SAAS,WAAW,YAAY,aAAa,QAAQ,MAAA;AACxE;"}
|
package/dist/components.cjs
CHANGED
|
@@ -16,6 +16,8 @@ const FilterBar = require("./components/FilterBar.cjs");
|
|
|
16
16
|
const MultiSelect = require("./components/MultiSelect.cjs");
|
|
17
17
|
const select = require("./components/select.cjs");
|
|
18
18
|
const Combobox = require("./components/Combobox.cjs");
|
|
19
|
+
const Field = require("./components/Field.cjs");
|
|
20
|
+
const useForm = require("./components/use-form.cjs");
|
|
19
21
|
const TreePickerField = require("./components/TreePickerField.cjs");
|
|
20
22
|
const WorkloadPicker = require("./components/WorkloadPicker.cjs");
|
|
21
23
|
const workloadPickerUtils = require("./components/workload-picker-utils.cjs");
|
|
@@ -32,6 +34,7 @@ const Section = require("./layout/Section.cjs");
|
|
|
32
34
|
const DropdownMenu = require("./overlay/DropdownMenu.cjs");
|
|
33
35
|
const HoverCard = require("./overlay/HoverCard.cjs");
|
|
34
36
|
const Modal = require("./overlay/Modal.cjs");
|
|
37
|
+
const modalStack = require("./overlay/modalStack.cjs");
|
|
35
38
|
exports.Button = button.Button;
|
|
36
39
|
exports.Loading = loading.Loading;
|
|
37
40
|
exports.LoadingDots = loading.LoadingDots;
|
|
@@ -46,9 +49,12 @@ exports.DateTimePicker = DateTimePicker.DateTimePicker;
|
|
|
46
49
|
exports.TimeRange = TimeRange.TimeRange;
|
|
47
50
|
exports.RangeSlider = RangeSlider.RangeSlider;
|
|
48
51
|
exports.FilterBar = FilterBar.FilterBar;
|
|
52
|
+
exports.applyFilterExtensions = FilterBar.applyFilterExtensions;
|
|
49
53
|
exports.MultiSelect = MultiSelect.MultiSelect;
|
|
50
54
|
exports.Select = select.Select;
|
|
51
55
|
exports.Combobox = Combobox.Combobox;
|
|
56
|
+
exports.Field = Field.Field;
|
|
57
|
+
exports.useForm = useForm.useForm;
|
|
52
58
|
exports.TreePickerField = TreePickerField.TreePickerField;
|
|
53
59
|
exports.WorkloadPicker = WorkloadPicker.WorkloadPicker;
|
|
54
60
|
exports.kindForValue = workloadPickerUtils.kindForValue;
|
|
@@ -74,4 +80,5 @@ exports.Section = Section.Section;
|
|
|
74
80
|
exports.DropdownMenu = DropdownMenu.DropdownMenu;
|
|
75
81
|
exports.HoverCard = HoverCard.HoverCard;
|
|
76
82
|
exports.Modal = Modal.Modal;
|
|
83
|
+
exports.useModalStack = modalStack.useModalStack;
|
|
77
84
|
//# sourceMappingURL=components.cjs.map
|
package/dist/components.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"components.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/components.d.ts
CHANGED
|
@@ -10,10 +10,12 @@ export { DatePicker, type DatePickerProps } from './components/DatePicker';
|
|
|
10
10
|
export { DateTimePicker, type DateTimePickerProps } from './components/DateTimePicker';
|
|
11
11
|
export { TimeRange, type TimeRangeKind, type TimeRangePreset, type TimeRangePresetGroup, type TimeRangeProps, } from './components/TimeRange';
|
|
12
12
|
export { RangeSlider, type RangeSliderProps, type RangeSliderValue, } from './components/RangeSlider';
|
|
13
|
-
export { FilterBar, type FilterBarBooleanFilter, type FilterBarEnumFilter, type FilterBarFilter, type FilterBarLookupFilter, type FilterBarLookupInputType, type FilterBarLookupMultiFilter, type FilterBarLookupOption, type FilterBarMultiFilter, type FilterBarMultiFilterMode, type FilterBarNestedMultiFilter, type FilterBarNestedMultiGroup, type FilterBarNumberFilter, type FilterBarNumberValue, type FilterBarProps, type FilterBarRangePreset, type FilterBarRangeProps, type FilterBarSearchProps, type FilterBarSelectMultiFilter, type FilterBarTextFilter, } from './components/FilterBar';
|
|
13
|
+
export { FilterBar, applyFilterExtensions, type FilterExtension, type FilterBarBooleanFilter, type FilterBarEnumFilter, type FilterBarFilter, type FilterBarLookupFilter, type FilterBarLookupInputType, type FilterBarLookupMultiFilter, type FilterBarLookupOption, type FilterBarMultiFilter, type FilterBarMultiFilterMode, type FilterBarNestedMultiFilter, type FilterBarNestedMultiGroup, type FilterBarNumberFilter, type FilterBarNumberValue, type FilterBarProps, type FilterBarRangePreset, type FilterBarRangeProps, type FilterBarSearchProps, type FilterBarSelectMultiFilter, type FilterBarTextFilter, } from './components/FilterBar';
|
|
14
14
|
export { MultiSelect, type MultiSelectOption, type MultiSelectProps, } from './components/MultiSelect';
|
|
15
15
|
export { Select, type SelectProps, type SelectOption } from './components/select';
|
|
16
16
|
export { Combobox, type ComboboxProps, type ComboboxOption, type ComboboxSingleProps, type ComboboxMultiProps, } from './components/Combobox';
|
|
17
|
+
export { Field, type FieldProps } from './components/Field';
|
|
18
|
+
export { useForm, type UseFormOptions, type UseFormResult, type FieldErrors, } from './components/use-form';
|
|
17
19
|
export { TreePickerField, type TreePickerFieldProps } from './components/TreePickerField';
|
|
18
20
|
export { WorkloadPicker, type WorkloadPickerProps } from './components/WorkloadPicker';
|
|
19
21
|
export { workloadKey, parseWorkloadKey, kindForValue, loadedWorkloads, type WorkloadKind, type WorkloadResource, type ParsedWorkloadKey, } from './components/workload-picker-utils';
|
|
@@ -33,4 +35,5 @@ export { Section, DetailEmptyState, type SectionProps, type DetailEmptyStateProp
|
|
|
33
35
|
export { DropdownMenu, type DropdownMenuProps, type DropdownMenuItem, } from './overlay/DropdownMenu';
|
|
34
36
|
export { HoverCard, type HoverCardProps, type HoverCardPlacement } from './overlay/HoverCard';
|
|
35
37
|
export { Modal, type ModalProps, type ModalSize } from './overlay/Modal';
|
|
38
|
+
export { useModalStack, type ModalStackPosition } from './overlay/modalStack';
|
|
36
39
|
//# sourceMappingURL=components.d.ts.map
|
package/dist/components.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":"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"}
|
package/dist/components.js
CHANGED
|
@@ -10,10 +10,12 @@ import { DatePicker } from "./components/DatePicker.js";
|
|
|
10
10
|
import { DateTimePicker } from "./components/DateTimePicker.js";
|
|
11
11
|
import { TimeRange } from "./components/TimeRange.js";
|
|
12
12
|
import { RangeSlider } from "./components/RangeSlider.js";
|
|
13
|
-
import { FilterBar } from "./components/FilterBar.js";
|
|
13
|
+
import { FilterBar, applyFilterExtensions } from "./components/FilterBar.js";
|
|
14
14
|
import { MultiSelect } from "./components/MultiSelect.js";
|
|
15
15
|
import { Select } from "./components/select.js";
|
|
16
16
|
import { Combobox } from "./components/Combobox.js";
|
|
17
|
+
import { Field } from "./components/Field.js";
|
|
18
|
+
import { useForm } from "./components/use-form.js";
|
|
17
19
|
import { TreePickerField } from "./components/TreePickerField.js";
|
|
18
20
|
import { WorkloadPicker } from "./components/WorkloadPicker.js";
|
|
19
21
|
import { kindForValue, loadedWorkloads, parseWorkloadKey, workloadKey } from "./components/workload-picker-utils.js";
|
|
@@ -30,6 +32,7 @@ import { DetailEmptyState, Section } from "./layout/Section.js";
|
|
|
30
32
|
import { DropdownMenu } from "./overlay/DropdownMenu.js";
|
|
31
33
|
import { HoverCard } from "./overlay/HoverCard.js";
|
|
32
34
|
import { Modal } from "./overlay/Modal.js";
|
|
35
|
+
import { useModalStack } from "./overlay/modalStack.js";
|
|
33
36
|
export {
|
|
34
37
|
Button,
|
|
35
38
|
CLICKY_FORMAT_OPTIONS,
|
|
@@ -42,6 +45,7 @@ export {
|
|
|
42
45
|
DensitySwitcher,
|
|
43
46
|
DetailEmptyState,
|
|
44
47
|
DropdownMenu,
|
|
48
|
+
Field,
|
|
45
49
|
FilterBar,
|
|
46
50
|
FormatOptionsDropdown,
|
|
47
51
|
HoverCard,
|
|
@@ -62,6 +66,7 @@ export {
|
|
|
62
66
|
TimeRange,
|
|
63
67
|
TreePickerField,
|
|
64
68
|
WorkloadPicker,
|
|
69
|
+
applyFilterExtensions,
|
|
65
70
|
buttonVariants,
|
|
66
71
|
effectiveProperties,
|
|
67
72
|
isOpenStringMap,
|
|
@@ -71,6 +76,8 @@ export {
|
|
|
71
76
|
parseWorkloadKey,
|
|
72
77
|
readPreferences,
|
|
73
78
|
resolveControl,
|
|
79
|
+
useForm,
|
|
80
|
+
useModalStack,
|
|
74
81
|
workloadKey,
|
|
75
82
|
writePreferences
|
|
76
83
|
};
|
package/dist/components.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"components.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -15,9 +15,9 @@ function detectMode() {
|
|
|
15
15
|
}
|
|
16
16
|
function getVersionInfo() {
|
|
17
17
|
return {
|
|
18
|
-
commit: read(() => "
|
|
19
|
-
tag: read(() => "clicky-ui@0.2.
|
|
20
|
-
date: read(() => "2026-06-
|
|
18
|
+
commit: read(() => "815fc3b", ""),
|
|
19
|
+
tag: read(() => "clicky-ui@0.2.15", ""),
|
|
20
|
+
date: read(() => "2026-06-11T10:01:07.060Z", ""),
|
|
21
21
|
dirty: read(() => true, false),
|
|
22
22
|
mode: detectMode()
|
|
23
23
|
};
|
|
@@ -13,9 +13,9 @@ function detectMode() {
|
|
|
13
13
|
}
|
|
14
14
|
function getVersionInfo() {
|
|
15
15
|
return {
|
|
16
|
-
commit: read(() => "
|
|
17
|
-
tag: read(() => "clicky-ui@0.2.
|
|
18
|
-
date: read(() => "2026-06-
|
|
16
|
+
commit: read(() => "815fc3b", ""),
|
|
17
|
+
tag: read(() => "clicky-ui@0.2.15", ""),
|
|
18
|
+
date: read(() => "2026-06-11T10:00:55.956Z", ""),
|
|
19
19
|
dirty: read(() => true, false),
|
|
20
20
|
mode: detectMode()
|
|
21
21
|
};
|
package/dist/index.cjs
CHANGED
|
@@ -27,6 +27,8 @@ const FilterBar = require("./components/FilterBar.cjs");
|
|
|
27
27
|
const MultiSelect = require("./components/MultiSelect.cjs");
|
|
28
28
|
const select = require("./components/select.cjs");
|
|
29
29
|
const Combobox = require("./components/Combobox.cjs");
|
|
30
|
+
const Field = require("./components/Field.cjs");
|
|
31
|
+
const useForm = require("./components/use-form.cjs");
|
|
30
32
|
const TreePickerField = require("./components/TreePickerField.cjs");
|
|
31
33
|
const WorkloadPicker = require("./components/WorkloadPicker.cjs");
|
|
32
34
|
const workloadPickerUtils = require("./components/workload-picker-utils.cjs");
|
|
@@ -43,6 +45,7 @@ const Section = require("./layout/Section.cjs");
|
|
|
43
45
|
const DropdownMenu = require("./overlay/DropdownMenu.cjs");
|
|
44
46
|
const HoverCard = require("./overlay/HoverCard.cjs");
|
|
45
47
|
const Modal = require("./overlay/Modal.cjs");
|
|
48
|
+
const modalStack = require("./overlay/modalStack.cjs");
|
|
46
49
|
const AnsiHtml = require("./data/AnsiHtml.cjs");
|
|
47
50
|
const Avatar = require("./data/Avatar.cjs");
|
|
48
51
|
const AvatarBadge = require("./data/AvatarBadge.cjs");
|
|
@@ -433,9 +436,12 @@ exports.DateTimePicker = DateTimePicker.DateTimePicker;
|
|
|
433
436
|
exports.TimeRange = TimeRange.TimeRange;
|
|
434
437
|
exports.RangeSlider = RangeSlider.RangeSlider;
|
|
435
438
|
exports.FilterBar = FilterBar.FilterBar;
|
|
439
|
+
exports.applyFilterExtensions = FilterBar.applyFilterExtensions;
|
|
436
440
|
exports.MultiSelect = MultiSelect.MultiSelect;
|
|
437
441
|
exports.Select = select.Select;
|
|
438
442
|
exports.Combobox = Combobox.Combobox;
|
|
443
|
+
exports.Field = Field.Field;
|
|
444
|
+
exports.useForm = useForm.useForm;
|
|
439
445
|
exports.TreePickerField = TreePickerField.TreePickerField;
|
|
440
446
|
exports.WorkloadPicker = WorkloadPicker.WorkloadPicker;
|
|
441
447
|
exports.kindForValue = workloadPickerUtils.kindForValue;
|
|
@@ -461,6 +467,7 @@ exports.Section = Section.Section;
|
|
|
461
467
|
exports.DropdownMenu = DropdownMenu.DropdownMenu;
|
|
462
468
|
exports.HoverCard = HoverCard.HoverCard;
|
|
463
469
|
exports.Modal = Modal.Modal;
|
|
470
|
+
exports.useModalStack = modalStack.useModalStack;
|
|
464
471
|
exports.AnsiHtml = AnsiHtml.AnsiHtml;
|
|
465
472
|
exports.Avatar = Avatar.Avatar;
|
|
466
473
|
exports.AvatarBadge = AvatarBadge.AvatarBadge;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.js
CHANGED
|
@@ -21,10 +21,12 @@ import { DatePicker } from "./components/DatePicker.js";
|
|
|
21
21
|
import { DateTimePicker } from "./components/DateTimePicker.js";
|
|
22
22
|
import { TimeRange } from "./components/TimeRange.js";
|
|
23
23
|
import { RangeSlider } from "./components/RangeSlider.js";
|
|
24
|
-
import { FilterBar } from "./components/FilterBar.js";
|
|
24
|
+
import { FilterBar, applyFilterExtensions } from "./components/FilterBar.js";
|
|
25
25
|
import { MultiSelect } from "./components/MultiSelect.js";
|
|
26
26
|
import { Select } from "./components/select.js";
|
|
27
27
|
import { Combobox } from "./components/Combobox.js";
|
|
28
|
+
import { Field } from "./components/Field.js";
|
|
29
|
+
import { useForm } from "./components/use-form.js";
|
|
28
30
|
import { TreePickerField } from "./components/TreePickerField.js";
|
|
29
31
|
import { WorkloadPicker } from "./components/WorkloadPicker.js";
|
|
30
32
|
import { kindForValue, loadedWorkloads, parseWorkloadKey, workloadKey } from "./components/workload-picker-utils.js";
|
|
@@ -41,6 +43,7 @@ import { DetailEmptyState, Section } from "./layout/Section.js";
|
|
|
41
43
|
import { DropdownMenu } from "./overlay/DropdownMenu.js";
|
|
42
44
|
import { HoverCard } from "./overlay/HoverCard.js";
|
|
43
45
|
import { Modal } from "./overlay/Modal.js";
|
|
46
|
+
import { useModalStack } from "./overlay/modalStack.js";
|
|
44
47
|
import { AnsiHtml } from "./data/AnsiHtml.js";
|
|
45
48
|
import { Avatar } from "./data/Avatar.js";
|
|
46
49
|
import { AvatarBadge } from "./data/AvatarBadge.js";
|
|
@@ -435,6 +438,7 @@ export {
|
|
|
435
438
|
EndpointList,
|
|
436
439
|
EntityExplorerApp,
|
|
437
440
|
ErrorDetails,
|
|
441
|
+
Field,
|
|
438
442
|
FilterBar,
|
|
439
443
|
FilterForm,
|
|
440
444
|
FilterPill,
|
|
@@ -1006,6 +1010,7 @@ export {
|
|
|
1006
1010
|
Version,
|
|
1007
1011
|
WorkloadPicker,
|
|
1008
1012
|
allGroupsTerminal,
|
|
1013
|
+
applyFilterExtensions,
|
|
1009
1014
|
badgeVariants,
|
|
1010
1015
|
bucketTasks,
|
|
1011
1016
|
buttonVariants,
|
|
@@ -1108,7 +1113,9 @@ export {
|
|
|
1108
1113
|
totalDuration,
|
|
1109
1114
|
useDensity,
|
|
1110
1115
|
useDensityValue,
|
|
1116
|
+
useForm,
|
|
1111
1117
|
useHistoryRoute,
|
|
1118
|
+
useModalStack,
|
|
1112
1119
|
useOpenAPI,
|
|
1113
1120
|
useOperationById,
|
|
1114
1121
|
useOperations,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/overlay/Modal.cjs
CHANGED
|
@@ -26,6 +26,7 @@ function Modal({
|
|
|
26
26
|
onClose,
|
|
27
27
|
confirmClose = false,
|
|
28
28
|
title,
|
|
29
|
+
subtitle,
|
|
29
30
|
size = "md",
|
|
30
31
|
closeOnBackdrop = false,
|
|
31
32
|
closeOnEsc = true,
|
|
@@ -100,29 +101,32 @@ function Modal({
|
|
|
100
101
|
),
|
|
101
102
|
onClick: (e) => e.stopPropagation(),
|
|
102
103
|
children: [
|
|
103
|
-
(title || headerSlot || expandable || !hideClose) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
104
|
+
(title || subtitle || headerSlot || expandable || !hideClose) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-density-4 py-density-3 border-b border-border", children: [
|
|
105
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-density-2", children: [
|
|
106
|
+
title ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-sm font-semibold flex-1", children: title }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1" }),
|
|
107
|
+
headerSlot,
|
|
108
|
+
expandable && /* @__PURE__ */ jsxRuntime.jsx(
|
|
109
|
+
"button",
|
|
110
|
+
{
|
|
111
|
+
type: "button",
|
|
112
|
+
onClick: () => setExpanded((v) => !v),
|
|
113
|
+
"aria-label": expanded ? "Restore size" : "Expand to fullscreen",
|
|
114
|
+
className: "text-muted-foreground hover:text-foreground",
|
|
115
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: expanded ? UiFullscreen.UiFullscreenFilled : UiFullscreen.UiFullscreen })
|
|
116
|
+
}
|
|
117
|
+
),
|
|
118
|
+
!hideClose && /* @__PURE__ */ jsxRuntime.jsx(
|
|
119
|
+
"button",
|
|
120
|
+
{
|
|
121
|
+
type: "button",
|
|
122
|
+
onClick: requestClose,
|
|
123
|
+
"aria-label": "Close",
|
|
124
|
+
className: "text-muted-foreground hover:text-foreground",
|
|
125
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiClose.UiClose })
|
|
126
|
+
}
|
|
127
|
+
)
|
|
128
|
+
] }),
|
|
129
|
+
subtitle ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-density-2", children: subtitle }) : null
|
|
126
130
|
] }),
|
|
127
131
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-auto px-density-4 py-density-3", children }),
|
|
128
132
|
footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-density-4 py-density-3 border-t border-border", children: footer }),
|