@starci/grammar 0.9.4 → 0.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +1 -1
- package/dist/.build-stamp.json +4 -4
- package/dist/common/components-forms.css +45 -0
- package/dist/common/components-navigation.css +267 -0
- package/dist/common/components-overlays.css +9 -0
- package/dist/common/registry.d.ts +17 -16
- package/dist/common/registry.d.ts.map +1 -1
- package/dist/common/renderers-forms.d.ts +7 -7
- package/dist/common/renderers-navigation.d.ts +7 -5
- package/dist/common/renderers-navigation.d.ts.map +1 -1
- package/dist/common/renderers-navigation.js +3 -1
- package/dist/common/renderers-navigation.js.map +1 -1
- package/dist/common/renderers-overlays.d.ts +1 -1
- package/dist/common/renderers.d.ts +1 -1
- package/dist/common/renderers.d.ts.map +1 -1
- package/dist/common/renderers.js +1 -1
- package/dist/common/renderers.js.map +1 -1
- package/dist/common/styles.css +20 -0
- package/dist/core/branch/DataTable/index.d.ts +7 -2
- package/dist/core/branch/DataTable/index.d.ts.map +1 -1
- package/dist/core/branch/DataTable/index.js +9 -4
- package/dist/core/branch/DataTable/index.js.map +1 -1
- package/dist/core/branch/FlowGraph/index.d.ts +34 -0
- package/dist/core/branch/FlowGraph/index.d.ts.map +1 -0
- package/dist/core/branch/FlowGraph/index.js +83 -0
- package/dist/core/branch/FlowGraph/index.js.map +1 -0
- package/dist/core/branch/FlowGraph/layout.d.ts +17 -0
- package/dist/core/branch/FlowGraph/layout.d.ts.map +1 -0
- package/dist/core/branch/FlowGraph/layout.js +51 -0
- package/dist/core/branch/FlowGraph/layout.js.map +1 -0
- package/dist/core/branch/FlowGraph/types.d.ts +28 -0
- package/dist/core/branch/FlowGraph/types.d.ts.map +1 -0
- package/dist/core/branch/FlowGraph/types.js +2 -0
- package/dist/core/branch/FlowGraph/types.js.map +1 -0
- package/dist/core/branch/ListBox/index.d.ts +9 -1
- package/dist/core/branch/ListBox/index.d.ts.map +1 -1
- package/dist/core/branch/ListBox/index.js +8 -2
- package/dist/core/branch/ListBox/index.js.map +1 -1
- package/dist/core/branch/Select/index.d.ts +6 -1
- package/dist/core/branch/Select/index.d.ts.map +1 -1
- package/dist/core/branch/Select/index.js +5 -2
- package/dist/core/branch/Select/index.js.map +1 -1
- package/dist/core/branch/SurfaceListCard/index.d.ts +6 -0
- package/dist/core/branch/SurfaceListCard/index.d.ts.map +1 -1
- package/dist/core/branch/SurfaceListCard/index.js +10 -3
- package/dist/core/branch/SurfaceListCard/index.js.map +1 -1
- package/dist/core/composite/Breadcrumbs/index.d.ts +5 -0
- package/dist/core/composite/Breadcrumbs/index.d.ts.map +1 -1
- package/dist/core/composite/Breadcrumbs/index.js +3 -2
- package/dist/core/composite/Breadcrumbs/index.js.map +1 -1
- package/dist/core/composite/ChatBubble/index.d.ts +21 -3
- package/dist/core/composite/ChatBubble/index.d.ts.map +1 -1
- package/dist/core/composite/ChatBubble/index.js +10 -1
- package/dist/core/composite/ChatBubble/index.js.map +1 -1
- package/dist/core/composite/CheckboxGroup/index.d.ts +6 -1
- package/dist/core/composite/CheckboxGroup/index.d.ts.map +1 -1
- package/dist/core/composite/CheckboxGroup/index.js +2 -2
- package/dist/core/composite/CheckboxGroup/index.js.map +1 -1
- package/dist/core/composite/DescriptionList/index.d.ts +5 -0
- package/dist/core/composite/DescriptionList/index.d.ts.map +1 -1
- package/dist/core/composite/DescriptionList/index.js +6 -4
- package/dist/core/composite/DescriptionList/index.js.map +1 -1
- package/dist/core/composite/ListRow/index.d.ts +8 -1
- package/dist/core/composite/ListRow/index.d.ts.map +1 -1
- package/dist/core/composite/ListRow/index.js +5 -1
- package/dist/core/composite/ListRow/index.js.map +1 -1
- package/dist/core/composite/SegmentedControl/index.d.ts +6 -1
- package/dist/core/composite/SegmentedControl/index.d.ts.map +1 -1
- package/dist/core/composite/SegmentedControl/index.js +5 -2
- package/dist/core/composite/SegmentedControl/index.js.map +1 -1
- package/dist/core/composite/Stepper/index.d.ts +7 -1
- package/dist/core/composite/Stepper/index.d.ts.map +1 -1
- package/dist/core/composite/Stepper/index.js +2 -1
- package/dist/core/composite/Stepper/index.js.map +1 -1
- package/dist/core/composite/Timeline/index.d.ts +8 -1
- package/dist/core/composite/Timeline/index.d.ts.map +1 -1
- package/dist/core/composite/Timeline/index.js +2 -1
- package/dist/core/composite/Timeline/index.js.map +1 -1
- package/dist/core/primitive/Avatar/index.d.ts +6 -1
- package/dist/core/primitive/Avatar/index.d.ts.map +1 -1
- package/dist/core/primitive/Avatar/index.js +2 -1
- package/dist/core/primitive/Avatar/index.js.map +1 -1
- package/dist/core/primitive/Field/index.d.ts +24 -0
- package/dist/core/primitive/Field/index.d.ts.map +1 -1
- package/dist/core/primitive/Field/index.js +15 -1
- package/dist/core/primitive/Field/index.js.map +1 -1
- package/dist/core/primitive/Meter/index.d.ts +7 -1
- package/dist/core/primitive/Meter/index.d.ts.map +1 -1
- package/dist/core/primitive/Meter/index.js +5 -1
- package/dist/core/primitive/Meter/index.js.map +1 -1
- package/dist/core/primitive/NumberField/index.d.ts +6 -1
- package/dist/core/primitive/NumberField/index.d.ts.map +1 -1
- package/dist/core/primitive/NumberField/index.js +2 -2
- package/dist/core/primitive/NumberField/index.js.map +1 -1
- package/dist/core/primitive/SearchField/index.d.ts +6 -1
- package/dist/core/primitive/SearchField/index.d.ts.map +1 -1
- package/dist/core/primitive/SearchField/index.js +2 -2
- package/dist/core/primitive/SearchField/index.js.map +1 -1
- package/dist/core/primitive/SectionHeader/index.d.ts +8 -1
- package/dist/core/primitive/SectionHeader/index.d.ts.map +1 -1
- package/dist/core/primitive/SectionHeader/index.js +2 -1
- package/dist/core/primitive/SectionHeader/index.js.map +1 -1
- package/dist/core/primitive/Switch/index.d.ts +6 -1
- package/dist/core/primitive/Switch/index.d.ts.map +1 -1
- package/dist/core/primitive/Switch/index.js +2 -2
- package/dist/core/primitive/Switch/index.js.map +1 -1
- package/dist/core/primitive/Textarea/index.d.ts +6 -1
- package/dist/core/primitive/Textarea/index.d.ts.map +1 -1
- package/dist/core/primitive/Textarea/index.js +5 -2
- package/dist/core/primitive/Textarea/index.js.map +1 -1
- package/dist/offset-pop/components-forms.css +17 -0
- package/dist/offset-pop/components-navigation.css +21 -0
- package/package.json +6 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/branch/FlowGraph/types.ts"],"names":[],"mappings":""}
|
|
@@ -18,6 +18,14 @@ export type ListBoxProps = {
|
|
|
18
18
|
readonly onSelectionChange?: (ids: ReadonlyArray<string>) => void;
|
|
19
19
|
readonly onAction?: (id: string) => void;
|
|
20
20
|
readonly emptyContent?: ReactNode;
|
|
21
|
+
/**
|
|
22
|
+
* The options are loading (knowledge STATE-8). With no `items` it draws `loadingRows` skeleton options (a label line and a
|
|
23
|
+
* description line, `aria-hidden`) inside the same named list, which is `aria-busy`; real `items` win, and loading beats
|
|
24
|
+
* `emptyContent`.
|
|
25
|
+
*/
|
|
26
|
+
readonly isLoading?: boolean;
|
|
27
|
+
/** How many skeleton options a loading list draws (default 3, 1 to 12). */
|
|
28
|
+
readonly loadingRows?: number;
|
|
21
29
|
readonly className?: string;
|
|
22
30
|
};
|
|
23
31
|
/**
|
|
@@ -26,5 +34,5 @@ export type ListBoxProps = {
|
|
|
26
34
|
* vendor `aria-selected`; long labels truncate and descriptions wrap at narrow widths.
|
|
27
35
|
* Contract: list FOCUS-2 CONTROL-STATE-3, empty STATE-3, leading glyph ICON-6.
|
|
28
36
|
*/
|
|
29
|
-
export declare const ListBox: ({ label, items, selectionMode, selectedIds, defaultSelectedIds, onSelectionChange, onAction, emptyContent, className, }: ListBoxProps) => import("react").JSX.Element;
|
|
37
|
+
export declare const ListBox: ({ label, items, selectionMode, selectedIds, defaultSelectedIds, onSelectionChange, onAction, emptyContent, isLoading, loadingRows, className, }: ListBoxProps) => import("react").JSX.Element;
|
|
30
38
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/ListBox/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/ListBox/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAyB,SAAS,EAAE,MAAM,OAAO,CAAA;AAI7D,MAAM,MAAM,WAAW,GAAG;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAA;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAID,MAAM,MAAM,YAAY,GAAG;IACvB,sCAAsC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,CAAA;IAC1C,wFAAwF;IACxF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAA;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC5C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACnD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;IACjE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAA;IACjC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,2EAA2E;IAC3E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,iJAYrB,YAAY,gCAyDd,CAAA"}
|
|
@@ -2,13 +2,19 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { ListBox as HeroListBox } from "@heroui/react";
|
|
4
4
|
import { navigationClassName } from "../../navigationClassNames.js";
|
|
5
|
+
import { Skeleton } from "../../primitive/Skeleton/index.js";
|
|
6
|
+
const clampRows = (rows) => Math.min(12, Math.max(1, Math.floor(Number.isFinite(rows) ? rows : 3)));
|
|
5
7
|
/**
|
|
6
8
|
* A list of selectable or actionable rows (`role="listbox"`). Arrow keys, Home/End and typeahead
|
|
7
9
|
* move between rows; Space/Enter select. Each row exposes `data-grammar-selected` and the
|
|
8
10
|
* vendor `aria-selected`; long labels truncate and descriptions wrap at narrow widths.
|
|
9
11
|
* Contract: list FOCUS-2 CONTROL-STATE-3, empty STATE-3, leading glyph ICON-6.
|
|
10
12
|
*/
|
|
11
|
-
export const ListBox = ({ label, items, selectionMode = "single", selectedIds, defaultSelectedIds, onSelectionChange, onAction, emptyContent, className, }) => (_jsx(HeroListBox, { "aria-label": label, className: navigationClassName("starci-core-list-box", className), "data-component": "ListBox", "data-contract": "FOCUS-2 CONTROL-STATE-3", "data-tier": "branch", "data-grammar-list-selection": selectionMode, selectionMode: selectionMode, ...(selectedIds === undefined ? {} : { selectedKeys: new Set(selectedIds) }), ...(defaultSelectedIds === undefined ? {} : { defaultSelectedKeys: new Set(defaultSelectedIds) }), ...(onSelectionChange === undefined ? {} : {
|
|
13
|
+
export const ListBox = ({ label, items, selectionMode = "single", selectedIds, defaultSelectedIds, onSelectionChange, onAction, emptyContent, isLoading = false, loadingRows = 3, className, }) => (_jsx(HeroListBox, { "aria-label": label, className: navigationClassName("starci-core-list-box", className), "data-component": "ListBox", "data-contract": "FOCUS-2 CONTROL-STATE-3", "data-tier": "branch", "data-loading": String(isLoading), ...(isLoading ? { render: (domProps) => _jsx("div", { ...domProps, "aria-busy": "true" }) } : {}), "data-grammar-list-selection": selectionMode, selectionMode: selectionMode, ...(selectedIds === undefined ? {} : { selectedKeys: new Set(selectedIds) }), ...(defaultSelectedIds === undefined ? {} : { defaultSelectedKeys: new Set(defaultSelectedIds) }), ...(onSelectionChange === undefined ? {} : {
|
|
12
14
|
onSelectionChange: (selection) => onSelectionChange(selection === "all" ? items.map((item) => item.id) : [...selection].map(String)),
|
|
13
|
-
}), ...(onAction === undefined ? {} : { onAction: (key) => onAction(String(key)) }), ...(
|
|
15
|
+
}), ...(onAction === undefined ? {} : { onAction: (key) => onAction(String(key)) }), ...(isLoading
|
|
16
|
+
? {
|
|
17
|
+
renderEmptyState: () => (_jsx("div", { className: "starci-core-list-box-skeleton", "data-grammar-list-skeleton": "true", children: Array.from({ length: clampRows(loadingRows) }, (_, index) => (_jsx("div", { "aria-hidden": "true", className: "starci-core-list-box-item starci-core-list-box-skeleton-option", "data-grammar-skeleton": "true", children: _jsxs("span", { className: "starci-core-list-box-copy", children: [_jsx("span", { className: "starci-core-list-box-label", children: _jsx(Skeleton, { shape: "text" }) }), _jsx("span", { className: "starci-core-list-box-description", children: _jsx(Skeleton, { shape: "text" }) })] }) }, index))) })),
|
|
18
|
+
}
|
|
19
|
+
: emptyContent === undefined ? {} : { renderEmptyState: () => _jsx("div", { className: "starci-core-list-box-empty", "data-contract": "STATE-3", "data-grammar-list-empty": "true", children: emptyContent }) }), children: items.map((item) => (_jsx(HeroListBox.Item, { id: item.id, className: "starci-core-list-box-item", "data-grammar-list-item": "true", textValue: item.label, ...(item.isDisabled === undefined ? {} : { isDisabled: item.isDisabled }), children: ({ isSelected }) => (_jsxs("span", { className: "starci-core-list-box-row", "data-grammar-selected": isSelected ? "true" : "false", children: [item.leading === undefined ? null : _jsx("span", { "aria-hidden": "true", className: "starci-core-list-box-leading", "data-contract": "ICON-6", children: item.leading }), _jsxs("span", { className: "starci-core-list-box-copy", children: [_jsx("span", { className: "starci-core-list-box-label", children: item.label }), item.description === undefined ? null : _jsx("span", { className: "starci-core-list-box-description", children: item.description })] }), item.trailing === undefined ? null : _jsx("span", { className: "starci-core-list-box-trailing", children: item.trailing }), selectionMode === "none" ? null : _jsx(HeroListBox.ItemIndicator, { className: "starci-core-list-box-indicator" })] })) }, item.id))) }));
|
|
14
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/ListBox/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,OAAO,IAAI,WAAW,EAAkB,MAAM,eAAe,CAAA;AAEtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/ListBox/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,11 @@ export type SelectProps = FieldControlProps & {
|
|
|
15
15
|
readonly onValueChange?: (value: string | null) => void;
|
|
16
16
|
/** Options are still arriving. The trigger stays named and focusable, announces pending, and does not open. */
|
|
17
17
|
readonly isPending?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Initial unresolved content (knowledge STATE-8): the label stays real and the trigger becomes a Skeleton field of the
|
|
20
|
+
* same height, `aria-hidden` and not focusable; the root is `aria-busy`. Unlike `isPending` it does not announce a value.
|
|
21
|
+
*/
|
|
22
|
+
readonly isSkeleton?: boolean;
|
|
18
23
|
/** Layer variant: `secondary` when the control sits on a surface (ANATOMY-2 case-1). */
|
|
19
24
|
readonly variant?: "primary" | "secondary";
|
|
20
25
|
};
|
|
@@ -29,5 +34,5 @@ export declare const ListOptions: ({ options }: {
|
|
|
29
34
|
* trigger focusable and announced but holds the value and never opens the list; the vendor select
|
|
30
35
|
* has no read-only mode of its own.
|
|
31
36
|
*/
|
|
32
|
-
export declare const Select: ({ options, placeholder, value, defaultValue, onValueChange, isPending, variant, ...field }: SelectProps) => import("react").JSX.Element;
|
|
37
|
+
export declare const Select: ({ options, placeholder, value, defaultValue, onValueChange, isPending, isSkeleton, variant, ...field }: SelectProps) => import("react").JSX.Element;
|
|
33
38
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/Select/index.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAChD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/Select/index.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAChD,OAAO,EAQH,KAAK,iBAAiB,EACzB,MAAM,gCAAgC,CAAA;AAEvC,yGAAyG;AACzG,MAAM,MAAM,UAAU,GAAG;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAA;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG;IAC1C,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IACvD,+GAA+G;IAC/G,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,wFAAwF;IACxF,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,CAAA;CAC7C,CAAA;AAID,sFAAsF;AACtF,eAAO,MAAM,WAAW,GAAI,aAAa;IAAE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CAAE,gCAqBvF,CAAA;AAeD;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,GAAI,wGAUpB,WAAW,gCAkDb,CAAA"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { ListBox as HeroListBox, Select as HeroSelect, Spinner as HeroSpinner, } from "@heroui/react";
|
|
4
4
|
import { useState } from "react";
|
|
5
|
-
import { FieldDescription, FieldErrorText, FieldLabel, fieldVariantAttributes, useGrammarPortal, vendorFieldProps, } from "../../primitive/Field/index.js";
|
|
5
|
+
import { FieldDescription, FieldErrorText, FieldLabel, FieldSkeleton, fieldVariantAttributes, useGrammarPortal, vendorFieldProps, } from "../../primitive/Field/index.js";
|
|
6
6
|
const toValue = (key) => (key === null ? null : String(key));
|
|
7
7
|
/** Renders the options as vendor list-box items with the selected-state indicator. */
|
|
8
8
|
export const ListOptions = ({ options }) => (_jsx(_Fragment, { children: options.map((option) => (_jsxs(HeroListBox.Item, { id: option.id, textValue: option.label, isDisabled: option.isDisabled === true, className: "starci-core-list-option", "data-grammar-option": "true", children: [_jsxs("span", { className: "starci-core-list-option-copy", children: [_jsx("span", { className: "starci-core-list-option-label", children: option.label }), option.description == null ? null : (_jsx("span", { className: "starci-core-list-option-description", children: option.description }))] }), _jsx(HeroListBox.ItemIndicator, {})] }, option.id))) }));
|
|
@@ -24,13 +24,16 @@ export const ListOptions = ({ options }) => (_jsx(_Fragment, { children: options
|
|
|
24
24
|
* trigger focusable and announced but holds the value and never opens the list; the vendor select
|
|
25
25
|
* has no read-only mode of its own.
|
|
26
26
|
*/
|
|
27
|
-
export const Select = ({ options, placeholder, value, defaultValue, onValueChange, isPending = false, variant = "primary", ...field }) => {
|
|
27
|
+
export const Select = ({ options, placeholder, value, defaultValue, onValueChange, isPending = false, isSkeleton = false, variant = "primary", ...field }) => {
|
|
28
28
|
const [heldValue] = useState(value ?? defaultValue ?? null);
|
|
29
29
|
const { anchor, portalProps } = useGrammarPortal();
|
|
30
30
|
const readOnly = field.isReadOnly === true;
|
|
31
31
|
const selection = readOnly
|
|
32
32
|
? { value: value === undefined ? heldValue : value }
|
|
33
33
|
: value === undefined ? defaultValue === undefined ? {} : { defaultValue } : { value };
|
|
34
|
+
if (isSkeleton) {
|
|
35
|
+
return _jsx(FieldSkeleton, { component: "Select", tier: "branch", label: field.label, isLabelHidden: field.isLabelHidden, isRequired: field.isRequired, variant: variant, kind: "select", className: "starci-core-select" });
|
|
36
|
+
}
|
|
34
37
|
return (_jsxs(HeroSelect, { "data-tier": "branch", "data-component": "Select", "data-contract": "A11Y-1 FIELD-3 STATE-6 CONTROL-STATE-2", className: "starci-core-field starci-core-select", fullWidth: true, variant: variant, ...fieldVariantAttributes(variant), ...vendorFieldProps({ ...field, isPending }), ...(placeholder === undefined ? {} : { placeholder }), ...selection, ...(readOnly ? { isOpen: false } : {}), onChange: (key) => {
|
|
35
38
|
if (!readOnly)
|
|
36
39
|
onValueChange?.(toValue(key));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/Select/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EACH,OAAO,IAAI,WAAW,EACtB,MAAM,IAAI,UAAU,EACpB,OAAO,IAAI,WAAW,GAEzB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AAChD,OAAO,EACH,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,GAEnB,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/Select/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EACH,OAAO,IAAI,WAAW,EACtB,MAAM,IAAI,UAAU,EACpB,OAAO,IAAI,WAAW,GAEzB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AAChD,OAAO,EACH,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,GAEnB,MAAM,gCAAgC,CAAA;AA2BvC,MAAM,OAAO,GAAG,CAAC,GAAe,EAAiB,EAAE,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AAEvF,sFAAsF;AACtF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAE,OAAO,EAAmD,EAAE,EAAE,CAAC,CACzF,4BACK,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACrB,MAAC,WAAW,CAAC,IAAI,IAEb,EAAE,EAAE,MAAM,CAAC,EAAE,EACb,SAAS,EAAE,MAAM,CAAC,KAAK,EACvB,UAAU,EAAE,MAAM,CAAC,UAAU,KAAK,IAAI,EACtC,SAAS,EAAC,yBAAyB,yBACf,MAAM,aAE1B,gBAAM,SAAS,EAAC,8BAA8B,aAC1C,eAAM,SAAS,EAAC,+BAA+B,YAAE,MAAM,CAAC,KAAK,GAAQ,EACpE,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACjC,eAAM,SAAS,EAAC,qCAAqC,YAAE,MAAM,CAAC,WAAW,GAAQ,CACpF,IACE,EACP,KAAC,WAAW,CAAC,aAAa,KAAG,KAbxB,MAAM,CAAC,EAAE,CAcC,CACtB,CAAC,GACH,CACN,CAAA;AAED;;;;GAIG;AAEH;;;;;GAKG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EACnB,OAAO,EACP,WAAW,EACX,KAAK,EACL,YAAY,EACZ,aAAa,EACb,SAAS,GAAG,KAAK,EACjB,UAAU,GAAG,KAAK,EAClB,OAAO,GAAG,SAAS,EACnB,GAAG,KAAK,EACE,EAAE,EAAE;IACd,MAAM,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAgB,KAAK,IAAI,YAAY,IAAI,IAAI,CAAC,CAAA;IAC1E,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,gBAAgB,EAAE,CAAA;IAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,KAAK,IAAI,CAAA;IAC1C,MAAM,SAAS,GAAG,QAAQ;QACtB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE;QACpD,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAA;IAE1F,IAAI,UAAU,EAAE,CAAC;QACb,OAAO,KAAC,aAAa,IAAC,SAAS,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,oBAAoB,GAAG,CAAA;IAClN,CAAC;IAED,OAAO,CACH,MAAC,UAAU,iBACG,QAAQ,oBACH,QAAQ,mBACT,wCAAwC,EACtD,SAAS,EAAC,sCAAsC,EAChD,SAAS,QACT,OAAO,EAAE,OAAO,KACZ,sBAAsB,CAAC,OAAO,CAAC,KAC/B,gBAAgB,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,CAAC,KACzC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,KAClD,SAAS,KACT,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACvC,QAAQ,EAAE,CAAC,GAAe,EAAE,EAAE;YAC1B,IAAI,CAAC,QAAQ;gBAAE,aAAa,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;QAChD,CAAC,aAEA,MAAM,EACP,KAAC,UAAU,IAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,YAAG,KAAK,CAAC,KAAK,GAAc,EACnG,MAAC,UAAU,CAAC,OAAO,IACf,SAAS,EAAC,4BAA4B,gCACX,MAAM,EACjC,SAAS,EAAE,SAAS,aAEpB,KAAC,UAAU,CAAC,KAAK,IAAC,SAAS,EAAC,0BAA0B,GAAG,EACxD,SAAS;wBACN,CAAC,CAAC,KAAC,WAAW,IAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,SAAS,iBAAa,MAAM,EAAC,SAAS,EAAC,2BAA2B,GAAG;wBACpG,CAAC,CAAC,KAAC,UAAU,CAAC,SAAS,IAAC,SAAS,EAAC,8BAA8B,GAAG,IACtD,EACrB,KAAC,gBAAgB,cAAE,KAAK,CAAC,WAAW,GAAoB,EACxD,KAAC,cAAc,cAAE,KAAK,CAAC,YAAY,GAAkB,EACrD,KAAC,UAAU,CAAC,OAAO,IAAC,SAAS,EAAC,0BAA0B,0BAAsB,QAAQ,mBAAe,UAAU,KAAK,WAAW,YAC3H,KAAC,WAAW,IAAC,SAAS,EAAC,kBAAkB,YACrC,KAAC,WAAW,IAAC,OAAO,EAAE,OAAO,GAAI,GACvB,GACG,IACZ,CAChB,CAAA;AACL,CAAC,CAAA"}
|
|
@@ -20,7 +20,13 @@ type SurfaceListFrameProps = (LabelledSurfaceList | SelfNamedSurfaceList) & {
|
|
|
20
20
|
* above this surface so the page never skips a level.
|
|
21
21
|
*/
|
|
22
22
|
readonly headingLevel?: SurfaceHeadingLevel;
|
|
23
|
+
/**
|
|
24
|
+
* The collection is loading (knowledge STATE-8). With no `children` it draws `loadingRows` skeleton rows (ListRow
|
|
25
|
+
* anatomy, `aria-hidden`) and is `aria-busy`; real `children` win over the skeleton rows.
|
|
26
|
+
*/
|
|
23
27
|
readonly isLoading?: boolean;
|
|
28
|
+
/** How many skeleton rows a loading card draws (default 3, 1 to 12). */
|
|
29
|
+
readonly loadingRows?: number;
|
|
24
30
|
/**
|
|
25
31
|
* The collection reports outcomes: it squares its corners and paints each row's verdict edge.
|
|
26
32
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/SurfaceListCard/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/branch/SurfaceListCard/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAA;AAEzE,OAAO,EAAwC,KAAK,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AAG/G,KAAK,mBAAmB,GAAG;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,KAAK,oBAAoB,GAAG;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC7B,CAAA;AAED,KAAK,qBAAqB,GAAG,CAAC,mBAAmB,GAAG,oBAAoB,CAAC,GAAG;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;IACjC;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAA;IAC3C;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,wEAAwE;IACxE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAClC,CAAA;AAED,sEAAsE;AACtE,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAA;AAE9C,MAAM,MAAM,oBAAoB,GAAG,qBAAqB,GAAG;IACvD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;IAC7B;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CAC7B,CAAA;AAKD,eAAO,MAAM,eAAe,GAAI,OAAO,oBAAoB,gCAuF1D,CAAA"}
|
|
@@ -1,19 +1,26 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { Children, useId } from "react";
|
|
4
|
+
import { ListRow } from "../../composite/ListRow/index.js";
|
|
4
5
|
import { VerticalScrollRegion } from "../../composite/VerticalScrollRegion/index.js";
|
|
5
6
|
import { DEFAULT_SURFACE_HEADING_LEVEL, Label } from "../../primitive/Label/index.js";
|
|
6
7
|
import { collectionClassName, listShellClassName, surfaceFactClassName, surfaceFooterClassName, surfaceLabelClassName, surfaceListClassName } from "./classNames.js";
|
|
8
|
+
const DEFAULT_LOADING_ROWS = 3;
|
|
9
|
+
const clampRows = (rows) => Math.min(12, Math.max(1, Math.floor(Number.isFinite(rows) ? rows : DEFAULT_LOADING_ROWS)));
|
|
7
10
|
export const SurfaceListCard = (props) => {
|
|
8
|
-
const { label, ariaLabel, children, empty, fact, labelEnd, labelHidden = false, footer, depth = "top", headingLevel = DEFAULT_SURFACE_HEADING_LEVEL, isLoading = false, isVerdict = false, isScrollable = false, } = props;
|
|
11
|
+
const { label, ariaLabel, children, empty, fact, labelEnd, labelHidden = false, footer, depth = "top", headingLevel = DEFAULT_SURFACE_HEADING_LEVEL, isLoading = false, loadingRows = DEFAULT_LOADING_ROWS, isVerdict = false, isScrollable = false, } = props;
|
|
9
12
|
const headingId = useId();
|
|
10
13
|
const accessibleName = ariaLabel ?? label;
|
|
11
|
-
const
|
|
14
|
+
const hasRows = Children.toArray(children).length > 0;
|
|
15
|
+
const isSkeleton = isLoading && !hasRows;
|
|
16
|
+
const isEmpty = !isSkeleton && empty !== undefined && !hasRows;
|
|
12
17
|
const collectionSemantics = isEmpty
|
|
13
18
|
? {}
|
|
14
19
|
: isScrollable
|
|
15
20
|
? { role: "list", ...(!labelHidden && label !== undefined ? { "aria-labelledby": headingId } : accessibleName === undefined ? {} : { "aria-label": accessibleName }) }
|
|
16
21
|
: { as: "ul", role: "list" };
|
|
17
|
-
return (_jsxs("section", { className: surfaceListClassName, "data-grammar-label-visibility": labelHidden ? "hidden" : "visible", "data-grammar-surface-list": "true", "data-component": "SurfaceListCard", "data-tier": "branch", "data-grammar-surface-depth": depth, children: [label === undefined || labelHidden ? null : (_jsxs("div", { className: surfaceLabelClassName, "data-contract": "GAP-2", "data-grammar-surface-label": "true", "data-grammar-label-end": labelEnd === undefined ? "false" : "true", children: [_jsx(Label, { as: `h${headingLevel}`, id: headingId, depth: depth, children: label }), fact === undefined ? null : (_jsx("span", { className: surfaceFactClassName, "data-grammar-surface-depth": depth, "data-contract": `TONE-2 ${depth === "nested" ? "FONT-1" : "FONT-2"}`, children: fact })), labelEnd === undefined ? null : _jsx("span", { className: "starci-core-surface-label-end", children: labelEnd })] })), _jsx("div", { "aria-label": labelHidden || label === undefined ? accessibleName : undefined, "aria-labelledby": !labelHidden && label !== undefined ? headingId : undefined, className: listShellClassName, "data-contract": "SURFACE-2 PADDING-0 OVERFLOW-2", "data-grammar-surface": "true", "data-grammar-scroll": isScrollable ? "contained" : "page", "data-grammar-surface-depth": depth, "data-surface-context": depth === "nested" ? "nested" : "page", "data-verdict": String(isVerdict), children: _jsx(VerticalScrollRegion, { ...collectionSemantics, className: collectionClassName, "data-grammar-collection": isVerdict ? "verdict" : "list", "data-grammar-list": "true", "data-loading": String(isLoading),
|
|
22
|
+
return (_jsxs("section", { className: surfaceListClassName, "data-grammar-label-visibility": labelHidden ? "hidden" : "visible", "data-grammar-surface-list": "true", "data-component": "SurfaceListCard", "data-tier": "branch", "data-grammar-surface-depth": depth, children: [label === undefined || labelHidden ? null : (_jsxs("div", { className: surfaceLabelClassName, "data-contract": "GAP-2", "data-grammar-surface-label": "true", "data-grammar-label-end": labelEnd === undefined ? "false" : "true", children: [_jsx(Label, { as: `h${headingLevel}`, id: headingId, depth: depth, children: label }), fact === undefined ? null : (_jsx("span", { className: surfaceFactClassName, "data-grammar-surface-depth": depth, "data-contract": `TONE-2 ${depth === "nested" ? "FONT-1" : "FONT-2"}`, children: fact })), labelEnd === undefined ? null : _jsx("span", { className: "starci-core-surface-label-end", children: labelEnd })] })), _jsx("div", { "aria-label": labelHidden || label === undefined ? accessibleName : undefined, "aria-labelledby": !labelHidden && label !== undefined ? headingId : undefined, className: listShellClassName, "data-contract": "SURFACE-2 PADDING-0 OVERFLOW-2", "data-grammar-surface": "true", "data-grammar-scroll": isScrollable ? "contained" : "page", "data-grammar-surface-depth": depth, "data-surface-context": depth === "nested" ? "nested" : "page", "data-verdict": String(isVerdict), children: _jsx(VerticalScrollRegion, { ...collectionSemantics, className: collectionClassName, "data-grammar-collection": isVerdict ? "verdict" : "list", "data-grammar-list": "true", "data-loading": String(isLoading), ...(isLoading ? { "aria-busy": true } : {}), isScrollable: isScrollable, children: isSkeleton
|
|
23
|
+
? Array.from({ length: clampRows(loadingRows) }, (_, index) => _jsx(ListRow, { isSkeleton: true, title: "", description: "", leading: "", actions: "" }, index))
|
|
24
|
+
: isEmpty ? empty : children }) }), footer === undefined ? null : (_jsx("div", { className: surfaceFooterClassName, "data-grammar-surface-footer": "true", children: footer }))] }));
|
|
18
25
|
};
|
|
19
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/SurfaceListCard/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAkB,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/branch/SurfaceListCard/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,11 @@ export type BreadcrumbItem = {
|
|
|
5
5
|
/** Ancestors carry a destination; the last item is the current page and needs none. */
|
|
6
6
|
readonly href?: string;
|
|
7
7
|
readonly leading?: ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* A data-driven crumb (usually the current page) whose label is not known yet (knowledge STATE-8): it draws a short
|
|
10
|
+
* Skeleton text line in place of `label` and `leading`, `aria-hidden`, and carries no link. The other crumbs stay real.
|
|
11
|
+
*/
|
|
12
|
+
readonly isSkeleton?: true;
|
|
8
13
|
};
|
|
9
14
|
export type BreadcrumbsProps = {
|
|
10
15
|
/** Names the trail landmark, e.g. "Breadcrumb". */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/Breadcrumbs/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/Breadcrumbs/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC,MAAM,MAAM,cAAc,GAAG;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,uFAAuF;IACvF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAA;IAC5B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAC7C,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;IAC9B,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GAAI,kDAAkD,gBAAgB,gCA0C7F,CAAA"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { Breadcrumbs as HeroBreadcrumbs } from "@heroui/react";
|
|
4
4
|
import { navigationClassName } from "../../navigationClassNames.js";
|
|
5
|
+
import { Skeleton } from "../../primitive/Skeleton/index.js";
|
|
5
6
|
/**
|
|
6
7
|
* The hierarchical trail to the current page.
|
|
7
8
|
*
|
|
@@ -11,6 +12,6 @@ import { navigationClassName } from "../../navigationClassNames.js";
|
|
|
11
12
|
*/
|
|
12
13
|
export const Breadcrumbs = ({ label, items, separator, onAction, className }) => (_jsx("nav", { "aria-label": label, className: navigationClassName("starci-core-breadcrumbs", className), "data-component": "Breadcrumbs", "data-contract": "LAYOUT-3 OVERFLOW-3", "data-tier": "composite", children: _jsx(HeroBreadcrumbs, { className: "starci-core-breadcrumbs-list", ...(separator === undefined ? {} : { separator }), ...(onAction === undefined ? {} : { onAction: (key) => onAction(String(key)) }), children: items.map((item, index) => {
|
|
13
14
|
const isCurrent = index === items.length - 1;
|
|
14
|
-
return (_jsx(HeroBreadcrumbs.Item, { id: item.id, className: "starci-core-breadcrumb", "data-contract": "ACTION-3", ...(item.href === undefined || isCurrent ? {} : { href: item.href }), children:
|
|
15
|
+
return (_jsx(HeroBreadcrumbs.Item, { id: item.id, className: "starci-core-breadcrumb", "data-contract": "ACTION-3", ...(item.href === undefined || isCurrent || item.isSkeleton === true ? {} : { href: item.href }), children: _jsx("span", { className: "starci-core-breadcrumb-label", "data-grammar-breadcrumb": "true", "data-grammar-current": isCurrent ? "true" : "false", children: item.isSkeleton === true ? (_jsx("span", { "aria-hidden": "true", className: "starci-core-breadcrumb-skeleton", "data-grammar-skeleton": "true", children: _jsx(Skeleton, { shape: "text" }) })) : (_jsxs(_Fragment, { children: [item.leading === undefined ? null : _jsx("span", { "aria-hidden": "true", className: "starci-core-breadcrumb-leading", "data-contract": "ICON-6", children: item.leading }), item.label] })) }) }, item.id));
|
|
15
16
|
}) }) }));
|
|
16
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/Breadcrumbs/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,eAAe,CAAA;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/Breadcrumbs/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,eAAe,CAAA;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAA;AA0B5D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAoB,EAAE,EAAE,CAAC,CAC/F,4BACgB,KAAK,EACjB,SAAS,EAAE,mBAAmB,CAAC,yBAAyB,EAAE,SAAS,CAAC,oBACrD,aAAa,mBACd,qBAAqB,eACzB,WAAW,YAErB,KAAC,eAAe,IACZ,SAAS,EAAC,8BAA8B,KACpC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,KAC9C,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAoB,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,YAEhG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACvB,MAAM,SAAS,GAAG,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;YAC5C,OAAO,CACH,KAAC,eAAe,CAAC,IAAI,IAEjB,EAAE,EAAE,IAAI,CAAC,EAAE,EACX,SAAS,EAAC,wBAAwB,mBACpB,UAAU,KACpB,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,YAEjG,eACI,SAAS,EAAC,8BAA8B,6BAChB,MAAM,0BACR,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,YAEjD,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,CACxB,8BAAkB,MAAM,EAAC,SAAS,EAAC,iCAAiC,2BAAuB,MAAM,YAAC,KAAC,QAAQ,IAAC,KAAK,EAAC,MAAM,GAAG,GAAO,CACrI,CAAC,CAAC,CAAC,CACA,8BACK,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,8BAAkB,MAAM,EAAC,SAAS,EAAC,gCAAgC,mBAAe,QAAQ,YAAE,IAAI,CAAC,OAAO,GAAQ,EACpJ,IAAI,CAAC,KAAK,IACZ,CACN,GACE,IAnBF,IAAI,CAAC,EAAE,CAoBO,CAC1B,CAAA;QACL,CAAC,CAAC,GACY,GAChB,CACT,CAAA"}
|
|
@@ -2,8 +2,8 @@ import type { ReactNode } from "react";
|
|
|
2
2
|
/** `incoming`: someone else wrote it (start side, recessed face). `outgoing`: the reader's own message (end side, accent-soft face). */
|
|
3
3
|
export type ChatBubbleSide = "incoming" | "outgoing";
|
|
4
4
|
export type ChatBubbleProps = {
|
|
5
|
-
/** The message body. Plain text keeps its line breaks. */
|
|
6
|
-
readonly children
|
|
5
|
+
/** The message body. Plain text keeps its line breaks. Ignored (and optional) while `isSkeleton`. */
|
|
6
|
+
readonly children?: ReactNode;
|
|
7
7
|
readonly side?: ChatBubbleSide;
|
|
8
8
|
/** Who wrote it, shown above the body. Omit on consecutive messages from the same author. */
|
|
9
9
|
readonly author?: ReactNode;
|
|
@@ -21,6 +21,13 @@ export type ChatBubbleProps = {
|
|
|
21
21
|
readonly isHighlight?: boolean;
|
|
22
22
|
/** Anchor for links that jump to this message. */
|
|
23
23
|
readonly id?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Draw the message as inert geometry while it is unresolved (knowledge STATE-8): the bubble face on its `side`, with two
|
|
26
|
+
* Skeleton text lines in the body and, only if `avatar` is passed, a Skeleton circle in its column. No author, meta, status,
|
|
27
|
+
* actions or footer are drawn, so no control exists. The bubble is `aria-hidden`; the conversation owns `aria-busy`
|
|
28
|
+
* (`ChatBubbleSkeletons` draws a whole loading thread).
|
|
29
|
+
*/
|
|
30
|
+
readonly isSkeleton?: boolean;
|
|
24
31
|
};
|
|
25
32
|
/**
|
|
26
33
|
* One chat message. The app owns the thread (order, grouping, day dividers with `Divider label`, scroll with
|
|
@@ -28,5 +35,16 @@ export type ChatBubbleProps = {
|
|
|
28
35
|
* actions. Faces follow SURFACE-3 (incoming, recessed) and SURFACE-4 (outgoing, the raised accent-soft pair); the corner on
|
|
29
36
|
* the author's side tightens to point at the avatar (RADIUS-6).
|
|
30
37
|
*/
|
|
31
|
-
export declare const ChatBubble: ({ children, side, author, avatar, meta, status, actions, footer, isHighlight, id, }: ChatBubbleProps) => import("react").JSX.Element;
|
|
38
|
+
export declare const ChatBubble: ({ children, side, author, avatar, meta, status, actions, footer, isHighlight, id, isSkeleton, }: ChatBubbleProps) => import("react").JSX.Element;
|
|
39
|
+
export type ChatBubbleSkeletonsProps = {
|
|
40
|
+
/** How many bubbles (default 3, 1 to 12). They alternate sides, starting with `incoming`. */
|
|
41
|
+
readonly count?: number;
|
|
42
|
+
/** Gives every bubble a Skeleton avatar circle in its column. */
|
|
43
|
+
readonly hasAvatar?: boolean;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* A loading conversation: `count` skeleton bubbles that alternate incoming and outgoing, inside one `aria-busy` thread.
|
|
47
|
+
* Place it as the conversation content of a `ChatWorkspace` (or any scroll owner) while the messages are unresolved.
|
|
48
|
+
*/
|
|
49
|
+
export declare const ChatBubbleSkeletons: ({ count, hasAvatar }: ChatBubbleSkeletonsProps) => import("react").JSX.Element;
|
|
32
50
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/ChatBubble/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/ChatBubble/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,wIAAwI;AACxI,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,UAAU,CAAA;AAEpD,MAAM,MAAM,eAAe,GAAG;IAC1B,qGAAqG;IACrG,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,CAAA;IAC9B,6FAA6F;IAC7F,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;IAC3B,mHAAmH;IACnH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAA;IACzB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;IAC3B,2GAA2G;IAC3G,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAA;IAC5B,oHAAoH;IACpH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;IAC3B,sFAAsF;IACtF,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,kDAAkD;IAClD,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,iGAYxB,eAAe,gCAgDjB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACnC,6FAA6F;IAC7F,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAC/B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,sBAAkC,wBAAwB,gCAM7F,CAAA"}
|
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Skeleton } from "../../primitive/Skeleton/index.js";
|
|
2
3
|
/**
|
|
3
4
|
* One chat message. The app owns the thread (order, grouping, day dividers with `Divider label`, scroll with
|
|
4
5
|
* `VerticalScrollRegion`); this owns the anatomy of a single message: avatar column, author line, the bubble face and its
|
|
5
6
|
* actions. Faces follow SURFACE-3 (incoming, recessed) and SURFACE-4 (outgoing, the raised accent-soft pair); the corner on
|
|
6
7
|
* the author's side tightens to point at the avatar (RADIUS-6).
|
|
7
8
|
*/
|
|
8
|
-
export const ChatBubble = ({ children, side = "incoming", author, avatar, meta, status, actions, footer, isHighlight = false, id, }) => {
|
|
9
|
+
export const ChatBubble = ({ children, side = "incoming", author, avatar, meta, status, actions, footer, isHighlight = false, id, isSkeleton = false, }) => {
|
|
10
|
+
if (isSkeleton) {
|
|
11
|
+
return (_jsxs("div", { "aria-hidden": "true", className: "starci-core-chat-bubble", "data-component": "ChatBubble", "data-tier": "composite", "data-contract": "SURFACE-3 SURFACE-4 RADIUS-6 STATE-8", "data-grammar-bubble-side": side, "data-grammar-bubble-highlight": "false", "data-grammar-bubble-footer": "false", "data-grammar-skeleton": "true", children: [avatar == null ? null : _jsx("div", { className: "starci-core-chat-bubble-avatar", children: _jsx(Skeleton, { shape: "circle", size: "sm" }) }), _jsx("div", { className: "starci-core-chat-bubble-stack", children: _jsx("div", { className: "starci-core-chat-bubble-body starci-core-chat-bubble-skeleton-body", children: _jsx(Skeleton, { shape: "text", lines: 2 }) }) })] }));
|
|
12
|
+
}
|
|
9
13
|
const hasHead = author != null || meta != null || status != null;
|
|
10
14
|
return (_jsxs("div", { ...(id === undefined ? {} : { id }), className: "starci-core-chat-bubble", "data-component": "ChatBubble", "data-tier": "composite", "data-contract": "SURFACE-3 SURFACE-4 RADIUS-6", "data-grammar-bubble-side": side, "data-grammar-bubble-highlight": isHighlight ? "true" : "false", "data-grammar-bubble-footer": footer == null ? "false" : "true", children: [avatar == null ? null : _jsx("div", { className: "starci-core-chat-bubble-avatar", children: avatar }), _jsxs("div", { className: "starci-core-chat-bubble-stack", children: [hasHead ? (_jsxs("div", { className: "starci-core-chat-bubble-head", children: [author == null ? null : _jsx("span", { className: "starci-core-chat-bubble-author", children: author }), status, meta == null ? null : _jsx("span", { className: "starci-core-chat-bubble-meta", children: meta })] })) : null, _jsx("div", { className: "starci-core-chat-bubble-body", children: children }), footer == null ? null : _jsx("div", { className: "starci-core-chat-bubble-footer", children: footer }), actions == null ? null : _jsx("div", { className: "starci-core-chat-bubble-actions", children: actions })] })] }));
|
|
11
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* A loading conversation: `count` skeleton bubbles that alternate incoming and outgoing, inside one `aria-busy` thread.
|
|
18
|
+
* Place it as the conversation content of a `ChatWorkspace` (or any scroll owner) while the messages are unresolved.
|
|
19
|
+
*/
|
|
20
|
+
export const ChatBubbleSkeletons = ({ count = 3, hasAvatar = false }) => (_jsx("div", { className: "starci-core-chat-bubble-thread", "data-grammar-chat-skeleton-thread": "true", "data-loading": "true", "aria-busy": "true", children: Array.from({ length: Math.min(12, Math.max(1, Math.floor(Number.isFinite(count) ? count : 3))) }, (_, index) => (_jsx(ChatBubble, { isSkeleton: true, side: index % 2 === 0 ? "incoming" : "outgoing", avatar: hasAvatar && index % 2 === 0 ? _jsx("span", {}) : undefined }, index))) }));
|
|
12
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/ChatBubble/index.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/ChatBubble/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -16,10 +16,15 @@ export type CheckboxGroupProps = FieldControlProps & {
|
|
|
16
16
|
readonly orientation?: ChoiceOrientation;
|
|
17
17
|
/** Layer variant: `secondary` when the control sits on a surface (ANATOMY-2 case-1). */
|
|
18
18
|
readonly variant?: "primary" | "secondary";
|
|
19
|
+
/**
|
|
20
|
+
* Initial unresolved content (knowledge STATE-8): the group label and each option label stay real text, each checkbox becomes a
|
|
21
|
+
* Skeleton box of the same size (descriptions are not drawn); `aria-hidden` geometry, nothing focusable, root `aria-busy`.
|
|
22
|
+
*/
|
|
23
|
+
readonly isSkeleton?: boolean;
|
|
19
24
|
};
|
|
20
25
|
/**
|
|
21
26
|
* Several independent choices under one group name (`role="group"`, labelled by the group label).
|
|
22
27
|
* Required means "at least one", validated by the vendor; the group owns the one error slot.
|
|
23
28
|
*/
|
|
24
|
-
export declare const CheckboxGroup: ({ options, value, defaultValue, onValueChange, orientation, variant, ...field }: CheckboxGroupProps) => import("react").JSX.Element;
|
|
29
|
+
export declare const CheckboxGroup: ({ options, value, defaultValue, onValueChange, orientation, variant, isSkeleton, ...field }: CheckboxGroupProps) => import("react").JSX.Element;
|
|
25
30
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/CheckboxGroup/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/CheckboxGroup/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAOH,KAAK,iBAAiB,EACzB,MAAM,gCAAgC,CAAA;AAGvC,oCAAoC;AACpC,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAA;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,YAAY,CAAA;AAEzD,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG;IACjD,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;IAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC7C,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAA;IACxC,wFAAwF;IACxF,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,CAAA;IAC1C;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAcD;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,6FAS3B,kBAAkB,gCAkCpB,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { Checkbox as HeroCheckbox, CheckboxGroup as HeroCheckboxGroup } from "@heroui/react";
|
|
4
|
-
import { FieldDescription, FieldErrorText, FieldLabel, fieldVariantAttributes, vendorFieldProps, } from "../../primitive/Field/index.js";
|
|
4
|
+
import { FieldDescription, FieldErrorText, FieldLabel, FieldSkeleton, fieldVariantAttributes, vendorFieldProps, } from "../../primitive/Field/index.js";
|
|
5
5
|
import { CheckboxItem } from "../../primitive/Checkbox/index.js";
|
|
6
6
|
/*
|
|
7
7
|
* Consumer hook: `starci-core-choice-group` names this control's root for a consumer or family
|
|
@@ -17,5 +17,5 @@ import { CheckboxItem } from "../../primitive/Checkbox/index.js";
|
|
|
17
17
|
* Several independent choices under one group name (`role="group"`, labelled by the group label).
|
|
18
18
|
* Required means "at least one", validated by the vendor; the group owns the one error slot.
|
|
19
19
|
*/
|
|
20
|
-
export const CheckboxGroup = ({ options, value, defaultValue, onValueChange, orientation = "vertical", variant = "primary", ...field }) => (_jsxs(HeroCheckboxGroup, { "data-tier": "composite", "data-component": "CheckboxGroup", "data-contract": "A11Y-1 FIELD-1 FIELD-2 CONTROL-STATE-3", "data-grammar-orientation": orientation, className: "starci-core-field starci-core-choice-group", variant: variant, ...fieldVariantAttributes(variant), ...vendorFieldProps(field), isReadOnly: field.isReadOnly === true, ...(value === undefined ? defaultValue === undefined ? {} : { defaultValue: [...defaultValue] } : { value: [...value] }), ...(onValueChange === undefined ? {} : { onChange: onValueChange }), children: [_jsx(FieldLabel, { isHidden: field.isLabelHidden, isRequired: field.isRequired, children: field.label }), _jsx(FieldDescription, { children: field.description }), _jsx("div", { className: "starci-core-choice-group-options", "data-grammar-field-control": "true", children: options.map((option) => (_jsx(HeroCheckbox, { value: option.value, isDisabled: option.isDisabled === true, className: "starci-core-choice starci-core-checkbox", variant: variant, "data-grammar-option": "true", children: _jsx(CheckboxItem, { label: option.label, description: option.description, isStandalone: false }) }, option.value))) }), _jsx(FieldErrorText, { children: field.errorMessage })] }));
|
|
20
|
+
export const CheckboxGroup = ({ options, value, defaultValue, onValueChange, orientation = "vertical", variant = "primary", isSkeleton = false, ...field }) => isSkeleton ? (_jsx(FieldSkeleton, { component: "CheckboxGroup", tier: "composite", label: field.label, isLabelHidden: field.isLabelHidden, isRequired: field.isRequired, variant: variant, kind: "choices", choiceLabels: options.map((option) => option.label), orientation: orientation, className: "starci-core-choice-group" })) : (_jsxs(HeroCheckboxGroup, { "data-tier": "composite", "data-component": "CheckboxGroup", "data-contract": "A11Y-1 FIELD-1 FIELD-2 CONTROL-STATE-3", "data-grammar-orientation": orientation, className: "starci-core-field starci-core-choice-group", variant: variant, ...fieldVariantAttributes(variant), ...vendorFieldProps(field), isReadOnly: field.isReadOnly === true, ...(value === undefined ? defaultValue === undefined ? {} : { defaultValue: [...defaultValue] } : { value: [...value] }), ...(onValueChange === undefined ? {} : { onChange: onValueChange }), children: [_jsx(FieldLabel, { isHidden: field.isLabelHidden, isRequired: field.isRequired, children: field.label }), _jsx(FieldDescription, { children: field.description }), _jsx("div", { className: "starci-core-choice-group-options", "data-grammar-field-control": "true", children: options.map((option) => (_jsx(HeroCheckbox, { value: option.value, isDisabled: option.isDisabled === true, className: "starci-core-choice starci-core-checkbox", variant: variant, "data-grammar-option": "true", children: _jsx(CheckboxItem, { label: option.label, description: option.description, isStandalone: false }) }, option.value))) }), _jsx(FieldErrorText, { children: field.errorMessage })] }));
|
|
21
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/CheckboxGroup/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAE5F,OAAO,EACH,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,sBAAsB,EACtB,gBAAgB,GAEnB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/CheckboxGroup/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAE5F,OAAO,EACH,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,gBAAgB,GAEnB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AA2BhE;;;;GAIG;AAEH;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAC1B,OAAO,EACP,KAAK,EACL,YAAY,EACZ,aAAa,EACb,WAAW,GAAG,UAAU,EACxB,OAAO,GAAG,SAAS,EACnB,UAAU,GAAG,KAAK,EAClB,GAAG,KAAK,EACS,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CACnC,KAAC,aAAa,IAAC,SAAS,EAAC,eAAe,EAAC,IAAI,EAAC,WAAW,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,SAAS,EAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAC,0BAA0B,GAAG,CAC1S,CAAC,CAAC,CAAC,CACA,MAAC,iBAAiB,iBACJ,WAAW,oBACN,eAAe,mBAChB,wCAAwC,8BAC5B,WAAW,EACrC,SAAS,EAAC,4CAA4C,EACtD,OAAO,EAAE,OAAO,KACZ,sBAAsB,CAAC,OAAO,CAAC,KAC/B,gBAAgB,CAAC,KAAK,CAAC,EAC3B,UAAU,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,KACjC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,KACrH,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,aAEpE,KAAC,UAAU,IAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,YAAG,KAAK,CAAC,KAAK,GAAc,EACnG,KAAC,gBAAgB,cAAE,KAAK,CAAC,WAAW,GAAoB,EACxD,cAAK,SAAS,EAAC,kCAAkC,gCAA4B,MAAM,YAC9E,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACrB,KAAC,YAAY,IAET,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,UAAU,EAAE,MAAM,CAAC,UAAU,KAAK,IAAI,EACtC,SAAS,EAAC,yCAAyC,EACnD,OAAO,EAAE,OAAO,yBACI,MAAM,YAE1B,KAAC,YAAY,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,GAAI,IAPtF,MAAM,CAAC,KAAK,CAQN,CAClB,CAAC,GACA,EACN,KAAC,cAAc,cAAE,KAAK,CAAC,YAAY,GAAkB,IACrC,CACvB,CAAA"}
|
|
@@ -35,6 +35,11 @@ type StatStripLayout = {
|
|
|
35
35
|
export type DescriptionListProps = (PairLayout | StatStripLayout) & {
|
|
36
36
|
/** Draw a separator between pairs (between cells, for `stat-strip`). */
|
|
37
37
|
readonly isDivided?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Unresolved values (knowledge STATE-8): every `term` stays real text, each `description` (and a stat item meta)
|
|
40
|
+
* becomes a Skeleton text line so the cells keep their size, a stat `unit` is dropped, and the list is `aria-busy`.
|
|
41
|
+
*/
|
|
42
|
+
readonly isLoading?: boolean;
|
|
38
43
|
readonly className?: string;
|
|
39
44
|
};
|
|
40
45
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/DescriptionList/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/DescriptionList/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAI/D,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAA;CAClC,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,mBAAmB,GAAG;IACxD,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAA;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,CAAA;AAExE,KAAK,UAAU,GAAG;IACd;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAA;CACrD,CAAA;AAED,KAAK,eAAe,GAAG;IACnB;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAA;CACzD,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,UAAU,GAAG,eAAe,CAAC,GAAG;IAChE,wEAAwE;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,oBAAoB,gCAsC1D,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { navigationClassName } from "../../navigationClassNames.js";
|
|
3
|
+
import { Skeleton } from "../../primitive/Skeleton/index.js";
|
|
3
4
|
import { IconTile } from "../../primitive/IconTile/index.js";
|
|
4
5
|
/**
|
|
5
6
|
* Term/value pairs (details, metadata, settings summaries) as a real `<dl>`.
|
|
@@ -8,10 +9,11 @@ import { IconTile } from "../../primitive/IconTile/index.js";
|
|
|
8
9
|
* second `<dd>` of the same term.
|
|
9
10
|
*/
|
|
10
11
|
export const DescriptionList = (props) => {
|
|
11
|
-
const { isDivided = true, className } = props;
|
|
12
|
+
const { isDivided = true, isLoading = false, className } = props;
|
|
13
|
+
const pending = _jsx(Skeleton, { shape: "text" });
|
|
12
14
|
const layout = props.layout ?? "columns";
|
|
13
|
-
return (_jsx("dl", { className: navigationClassName("starci-core-description-list", className), "data-component": "DescriptionList", "data-contract": "HIERARCHY-3 TRUTH-1", "data-tier": "composite", "data-grammar-description-layout": layout, "data-grammar-description-divided": isDivided ? "true" : "false", children: props.layout === "stat-strip"
|
|
14
|
-
? props.items.map((item) => (_jsxs("div", { className: "starci-core-description-pair", "data-grammar-description-pair": "true", children: [_jsxs("dt", { className: "starci-core-description-term starci-core-description-stat-term", children: [item.icon === undefined ? null : _jsx(IconTile, { source: item.icon, size: "sm", tone: "neutral" }), _jsx("span", { children: item.term })] }), _jsxs("dd", { className: "starci-core-description-value starci-core-description-figure", "data-contract": "FONT-5", children: [_jsx("span", { className: "starci-core-description-figure-value", children: item.description }), item.unit === undefined ? null : _jsx("span", { className: "starci-core-description-unit", children: item.unit })] }), item.meta === undefined ? null : (_jsx("dd", { className: "starci-core-description-meta", "data-contract": "FONT-2", children: item.meta }))] }, item.id)))
|
|
15
|
-
: props.items.map((item) => (_jsxs("div", { className: "starci-core-description-pair", "data-grammar-description-pair": "true", children: [_jsx("dt", { className: "starci-core-description-term", children: item.term }), _jsx("dd", { className: "starci-core-description-value", children: item.description })] }, item.id))) }));
|
|
15
|
+
return (_jsx("dl", { className: navigationClassName("starci-core-description-list", className), "data-component": "DescriptionList", "data-contract": "HIERARCHY-3 TRUTH-1", "data-tier": "composite", ...(isLoading ? { "aria-busy": true, "data-loading": "true" } : {}), "data-grammar-description-layout": layout, "data-grammar-description-divided": isDivided ? "true" : "false", children: props.layout === "stat-strip"
|
|
16
|
+
? props.items.map((item) => (_jsxs("div", { className: "starci-core-description-pair", "data-grammar-description-pair": "true", children: [_jsxs("dt", { className: "starci-core-description-term starci-core-description-stat-term", children: [item.icon === undefined ? null : _jsx(IconTile, { source: item.icon, size: "sm", tone: "neutral" }), _jsx("span", { children: item.term })] }), _jsxs("dd", { className: "starci-core-description-value starci-core-description-figure", "data-contract": "FONT-5", children: [_jsx("span", { className: "starci-core-description-figure-value", children: isLoading ? pending : item.description }), item.unit === undefined || isLoading ? null : _jsx("span", { className: "starci-core-description-unit", children: item.unit })] }), item.meta === undefined ? null : (_jsx("dd", { className: "starci-core-description-meta", "data-contract": "FONT-2", children: isLoading ? pending : item.meta }))] }, item.id)))
|
|
17
|
+
: props.items.map((item) => (_jsxs("div", { className: "starci-core-description-pair", "data-grammar-description-pair": "true", children: [_jsx("dt", { className: "starci-core-description-term", children: item.term }), _jsx("dd", { className: "starci-core-description-value", children: isLoading ? pending : item.description })] }, item.id))) }));
|
|
16
18
|
};
|
|
17
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/DescriptionList/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/composite/DescriptionList/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAA;AAkD5D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAA2B,EAAE,EAAE;IAC3D,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,SAAS,GAAG,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAChE,MAAM,OAAO,GAAG,KAAC,QAAQ,IAAC,KAAK,EAAC,MAAM,GAAG,CAAA;IACzC,MAAM,MAAM,GAA0B,KAAK,CAAC,MAAM,IAAI,SAAS,CAAA;IAC/D,OAAO,CACH,aACI,SAAS,EAAE,mBAAmB,CAAC,8BAA8B,EAAE,SAAS,CAAC,oBAC1D,iBAAiB,mBAClB,qBAAqB,eACzB,WAAW,KACjB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,qCACnC,MAAM,sCACL,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,YAE7D,KAAK,CAAC,MAAM,KAAK,YAAY;YAC1B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACxB,eAAmB,SAAS,EAAC,8BAA8B,mCAA+B,MAAM,aAC5F,cAAI,SAAS,EAAC,gEAAgE,aACzE,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,QAAQ,IAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,GAAG,EAC1F,yBAAO,IAAI,CAAC,IAAI,GAAQ,IACvB,EACL,cAAI,SAAS,EAAC,8DAA8D,mBAAe,QAAQ,aAC/F,eAAM,SAAS,EAAC,sCAAsC,YAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,GAAQ,EACrG,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,8BAA8B,YAAE,IAAI,CAAC,IAAI,GAAQ,IAC/G,EACJ,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC9B,aAAI,SAAS,EAAC,8BAA8B,mBAAe,QAAQ,YAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAM,CAC7G,KAXK,IAAI,CAAC,EAAE,CAYX,CACT,CAAC;YACF,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACxB,eAAmB,SAAS,EAAC,8BAA8B,mCAA+B,MAAM,aAC5F,aAAI,SAAS,EAAC,8BAA8B,YAAE,IAAI,CAAC,IAAI,GAAM,EAC7D,aAAI,SAAS,EAAC,+BAA+B,YAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,GAAM,KAFrF,IAAI,CAAC,EAAE,CAGX,CACT,CAAC,GACL,CACR,CAAA;AACL,CAAC,CAAA"}
|
|
@@ -18,6 +18,13 @@ export type ListRowProps = {
|
|
|
18
18
|
readonly state?: PresentationState;
|
|
19
19
|
/** In a verdict collection, the outcome this row reports (the collection's leading edge). */
|
|
20
20
|
readonly verdict?: RowVerdict;
|
|
21
|
+
/**
|
|
22
|
+
* Draw the row as inert geometry while its content is unresolved (knowledge STATE-8): `title` becomes a Skeleton
|
|
23
|
+
* text line, `description` a second line, `leading` a Skeleton circle and `actions` a small Skeleton footprint,
|
|
24
|
+
* each only if it is passed, so the loading row has the size of the loaded one. The row is `aria-hidden` and
|
|
25
|
+
* renders no interactive child, `badges` and `children` included; the collection owns `aria-busy`.
|
|
26
|
+
*/
|
|
27
|
+
readonly isSkeleton?: boolean;
|
|
21
28
|
};
|
|
22
29
|
/**
|
|
23
30
|
* One interactive row in a `SurfaceListCard` (or an app-owned `<ul>`): leading mark, title with its badges,
|
|
@@ -27,5 +34,5 @@ export type ListRowProps = {
|
|
|
27
34
|
* between consecutive rows - so static and interactive rows mix in one collection. It is an `<li>`: render it
|
|
28
35
|
* inside a list, never loose. The actions keep their own semantics; the row itself is not a target.
|
|
29
36
|
*/
|
|
30
|
-
export declare const ListRow: ({ title, description, leading, badges, actions, children, state, verdict }: ListRowProps) => import("react").JSX.Element;
|
|
37
|
+
export declare const ListRow: ({ title, description, leading, badges, actions, children, state, verdict, isSkeleton }: ListRowProps) => import("react").JSX.Element;
|
|
31
38
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/ListRow/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/composite/ListRow/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAE5D,MAAM,MAAM,YAAY,GAAG;IACvB,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,gFAAgF;IAChF,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAA;IAChC,wIAAwI;IACxI,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAA;IAC5B,sGAAsG;IACtG,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;IAC3B,uGAAuG;IACvG,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAA;IAC5B,6GAA6G;IAC7G,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;IAC7B,oGAAoG;IACpG,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAA;IAClC,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAA;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,GAAI,wFAA4G,YAAY,gCAmD/I,CAAA"}
|