@ttoss/fsl-ui 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +76 -0
- package/dist/_virtual/_rolldown/runtime.cjs +30 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.cjs +129 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.d.cts +61 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.d.mts +61 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.mjs +126 -0
- package/dist/components/Button/Button.cjs +80 -0
- package/dist/components/Button/Button.d.cts +68 -0
- package/dist/components/Button/Button.d.mts +68 -0
- package/dist/components/Button/Button.mjs +79 -0
- package/dist/components/Checkbox/Checkbox.cjs +183 -0
- package/dist/components/Checkbox/Checkbox.d.cts +45 -0
- package/dist/components/Checkbox/Checkbox.d.mts +45 -0
- package/dist/components/Checkbox/Checkbox.mjs +182 -0
- package/dist/components/CheckboxGroup/CheckboxGroup.cjs +97 -0
- package/dist/components/CheckboxGroup/CheckboxGroup.d.cts +56 -0
- package/dist/components/CheckboxGroup/CheckboxGroup.d.mts +56 -0
- package/dist/components/CheckboxGroup/CheckboxGroup.mjs +96 -0
- package/dist/components/FileTrigger/FileTrigger.cjs +51 -0
- package/dist/components/FileTrigger/FileTrigger.d.cts +52 -0
- package/dist/components/FileTrigger/FileTrigger.d.mts +52 -0
- package/dist/components/FileTrigger/FileTrigger.mjs +50 -0
- package/dist/components/GridList/GridList.cjs +220 -0
- package/dist/components/GridList/GridList.d.cts +72 -0
- package/dist/components/GridList/GridList.d.mts +72 -0
- package/dist/components/GridList/GridList.mjs +217 -0
- package/dist/components/Group/Group.cjs +77 -0
- package/dist/components/Group/Group.d.cts +61 -0
- package/dist/components/Group/Group.d.mts +61 -0
- package/dist/components/Group/Group.mjs +74 -0
- package/dist/components/Icon/Icon.cjs +52 -0
- package/dist/components/Icon/Icon.mjs +52 -0
- package/dist/components/Icon/glyphs.cjs +72 -0
- package/dist/components/Icon/glyphs.mjs +63 -0
- package/dist/components/Link/Link.cjs +62 -0
- package/dist/components/Link/Link.d.cts +38 -0
- package/dist/components/Link/Link.d.mts +38 -0
- package/dist/components/Link/Link.mjs +61 -0
- package/dist/components/ListBox/ListBox.cjs +126 -0
- package/dist/components/ListBox/ListBox.d.cts +63 -0
- package/dist/components/ListBox/ListBox.d.mts +63 -0
- package/dist/components/ListBox/ListBox.mjs +123 -0
- package/dist/components/Meter/Meter.cjs +126 -0
- package/dist/components/Meter/Meter.d.cts +63 -0
- package/dist/components/Meter/Meter.d.mts +63 -0
- package/dist/components/Meter/Meter.mjs +125 -0
- package/dist/components/NumberField/NumberField.cjs +221 -0
- package/dist/components/NumberField/NumberField.d.cts +68 -0
- package/dist/components/NumberField/NumberField.d.mts +68 -0
- package/dist/components/NumberField/NumberField.mjs +220 -0
- package/dist/components/ProgressBar/ProgressBar.cjs +132 -0
- package/dist/components/ProgressBar/ProgressBar.d.cts +56 -0
- package/dist/components/ProgressBar/ProgressBar.d.mts +56 -0
- package/dist/components/ProgressBar/ProgressBar.mjs +129 -0
- package/dist/components/RadioGroup/RadioGroup.cjs +218 -0
- package/dist/components/RadioGroup/RadioGroup.d.cts +82 -0
- package/dist/components/RadioGroup/RadioGroup.d.mts +82 -0
- package/dist/components/RadioGroup/RadioGroup.mjs +215 -0
- package/dist/components/Select/Select.cjs +253 -0
- package/dist/components/Select/Select.d.cts +86 -0
- package/dist/components/Select/Select.d.mts +86 -0
- package/dist/components/Select/Select.mjs +250 -0
- package/dist/components/Separator/Separator.cjs +64 -0
- package/dist/components/Separator/Separator.d.cts +44 -0
- package/dist/components/Separator/Separator.d.mts +44 -0
- package/dist/components/Separator/Separator.mjs +63 -0
- package/dist/components/Slider/Slider.cjs +160 -0
- package/dist/components/Slider/Slider.d.cts +45 -0
- package/dist/components/Slider/Slider.d.mts +45 -0
- package/dist/components/Slider/Slider.mjs +159 -0
- package/dist/components/Switch/Switch.cjs +176 -0
- package/dist/components/Switch/Switch.d.cts +43 -0
- package/dist/components/Switch/Switch.d.mts +43 -0
- package/dist/components/Switch/Switch.mjs +175 -0
- package/dist/components/Tabs/Tabs.cjs +180 -0
- package/dist/components/Tabs/Tabs.d.cts +85 -0
- package/dist/components/Tabs/Tabs.d.mts +85 -0
- package/dist/components/Tabs/Tabs.mjs +173 -0
- package/dist/components/Toast/Toast.cjs +218 -0
- package/dist/components/Toast/Toast.d.cts +96 -0
- package/dist/components/Toast/Toast.d.mts +96 -0
- package/dist/components/Toast/Toast.mjs +214 -0
- package/dist/components/ToggleButton/ToggleButton.cjs +125 -0
- package/dist/components/ToggleButton/ToggleButton.d.cts +43 -0
- package/dist/components/ToggleButton/ToggleButton.d.mts +43 -0
- package/dist/components/ToggleButton/ToggleButton.mjs +124 -0
- package/dist/components/ToggleButtonGroup/ToggleButtonGroup.cjs +48 -0
- package/dist/components/ToggleButtonGroup/ToggleButtonGroup.d.cts +41 -0
- package/dist/components/ToggleButtonGroup/ToggleButtonGroup.d.mts +41 -0
- package/dist/components/ToggleButtonGroup/ToggleButtonGroup.mjs +47 -0
- package/dist/components/Toolbar/Toolbar.cjs +67 -0
- package/dist/components/Toolbar/Toolbar.d.cts +60 -0
- package/dist/components/Toolbar/Toolbar.d.mts +60 -0
- package/dist/components/Toolbar/Toolbar.mjs +66 -0
- package/dist/composites/Accordion/Accordion.cjs +279 -0
- package/dist/composites/Accordion/Accordion.d.cts +176 -0
- package/dist/composites/Accordion/Accordion.d.mts +176 -0
- package/dist/composites/Accordion/Accordion.mjs +270 -0
- package/dist/composites/ConfirmationDialog/ConfirmationDialog.cjs +206 -0
- package/dist/composites/ConfirmationDialog/ConfirmationDialog.d.cts +166 -0
- package/dist/composites/ConfirmationDialog/ConfirmationDialog.d.mts +166 -0
- package/dist/composites/ConfirmationDialog/ConfirmationDialog.mjs +203 -0
- package/dist/composites/Dialog/Dialog.cjs +372 -0
- package/dist/composites/Dialog/Dialog.d.cts +234 -0
- package/dist/composites/Dialog/Dialog.d.mts +234 -0
- package/dist/composites/Dialog/Dialog.mjs +360 -0
- package/dist/composites/Disclosure/Disclosure.cjs +214 -0
- package/dist/composites/Disclosure/Disclosure.d.cts +118 -0
- package/dist/composites/Disclosure/Disclosure.d.mts +118 -0
- package/dist/composites/Disclosure/Disclosure.mjs +207 -0
- package/dist/composites/Form/Form.cjs +161 -0
- package/dist/composites/Form/Form.d.cts +176 -0
- package/dist/composites/Form/Form.d.mts +176 -0
- package/dist/composites/Form/Form.mjs +156 -0
- package/dist/composites/Menu/Menu.cjs +190 -0
- package/dist/composites/Menu/Menu.d.cts +158 -0
- package/dist/composites/Menu/Menu.d.mts +158 -0
- package/dist/composites/Menu/Menu.mjs +186 -0
- package/dist/composites/Popover/Popover.cjs +80 -0
- package/dist/composites/Popover/Popover.d.cts +56 -0
- package/dist/composites/Popover/Popover.d.mts +56 -0
- package/dist/composites/Popover/Popover.mjs +78 -0
- package/dist/composites/SearchField/SearchField.cjs +194 -0
- package/dist/composites/SearchField/SearchField.d.cts +81 -0
- package/dist/composites/SearchField/SearchField.d.mts +81 -0
- package/dist/composites/SearchField/SearchField.mjs +189 -0
- package/dist/composites/TagGroup/TagGroup.cjs +212 -0
- package/dist/composites/TagGroup/TagGroup.d.cts +84 -0
- package/dist/composites/TagGroup/TagGroup.d.mts +84 -0
- package/dist/composites/TagGroup/TagGroup.mjs +209 -0
- package/dist/composites/TextArea/TextArea.cjs +190 -0
- package/dist/composites/TextArea/TextArea.d.cts +95 -0
- package/dist/composites/TextArea/TextArea.d.mts +95 -0
- package/dist/composites/TextArea/TextArea.mjs +181 -0
- package/dist/composites/TextField/TextField.cjs +200 -0
- package/dist/composites/TextField/TextField.d.cts +111 -0
- package/dist/composites/TextField/TextField.d.mts +111 -0
- package/dist/composites/TextField/TextField.mjs +191 -0
- package/dist/composites/Tooltip/Tooltip.cjs +79 -0
- package/dist/composites/Tooltip/Tooltip.d.cts +53 -0
- package/dist/composites/Tooltip/Tooltip.d.mts +53 -0
- package/dist/composites/Tooltip/Tooltip.mjs +77 -0
- package/dist/composites/Wizard/Wizard.cjs +333 -0
- package/dist/composites/Wizard/Wizard.d.cts +206 -0
- package/dist/composites/Wizard/Wizard.d.mts +206 -0
- package/dist/composites/Wizard/Wizard.mjs +324 -0
- package/dist/composites/scope.cjs +124 -0
- package/dist/composites/scope.mjs +121 -0
- package/dist/index.cjs +186 -0
- package/dist/index.d.cts +37 -0
- package/dist/index.d.mts +37 -0
- package/dist/index.mjs +39 -0
- package/dist/semantics/componentMeta.d.cts +37 -0
- package/dist/semantics/componentMeta.d.mts +37 -0
- package/dist/semantics/index.cjs +16 -0
- package/dist/semantics/index.d.cts +4 -0
- package/dist/semantics/index.d.mts +4 -0
- package/dist/semantics/index.mjs +3 -0
- package/dist/semantics/taxonomy.cjs +150 -0
- package/dist/semantics/taxonomy.d.cts +153 -0
- package/dist/semantics/taxonomy.d.mts +153 -0
- package/dist/semantics/taxonomy.mjs +140 -0
- package/dist/tokens/escapeHatch.cjs +13 -0
- package/dist/tokens/escapeHatch.mjs +13 -0
- package/dist/tokens/focusRing.cjs +28 -0
- package/dist/tokens/focusRing.mjs +28 -0
- package/dist/tokens/keyframes.cjs +76 -0
- package/dist/tokens/keyframes.mjs +75 -0
- package/dist/tokens/resolveInteractiveStyle.cjs +41 -0
- package/dist/tokens/resolveInteractiveStyle.mjs +41 -0
- package/llms.txt +142 -0
- package/package.json +70 -0
- package/src/tokens/CONTRACT.md +505 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
|
|
2
|
+
import { EvaluationsFor } from "../../semantics/taxonomy.mjs";
|
|
3
|
+
import { ToolbarProps } from "react-aria-components";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
|
|
6
|
+
//#region src/components/Toolbar/Toolbar.d.ts
|
|
7
|
+
/** Formal semantic identity — Toolbar root (Structure entity, actions bar). */
|
|
8
|
+
declare const toolbarMeta: {
|
|
9
|
+
readonly displayName: "Toolbar";
|
|
10
|
+
readonly entity: "Structure";
|
|
11
|
+
readonly structure: "root";
|
|
12
|
+
};
|
|
13
|
+
/** Props for the Toolbar component. */
|
|
14
|
+
interface ToolbarProps$1 extends Omit<ToolbarProps, 'style' | 'className' | 'children'> {
|
|
15
|
+
/**
|
|
16
|
+
* Layout + roving-focus axis. `horizontal` uses Left/Right arrows;
|
|
17
|
+
* `vertical` uses Up/Down.
|
|
18
|
+
* @default 'horizontal'
|
|
19
|
+
*/
|
|
20
|
+
orientation?: ToolbarProps['orientation'];
|
|
21
|
+
/**
|
|
22
|
+
* Authorial emphasis of the bar surface. `primary` is the standard toolbar
|
|
23
|
+
* chrome; `muted` is a subdued variant for dense or secondary bars.
|
|
24
|
+
* @default 'primary'
|
|
25
|
+
*/
|
|
26
|
+
evaluation?: EvaluationsFor<(typeof toolbarMeta)['entity']>;
|
|
27
|
+
/** The interactive controls to lay out in the bar. */
|
|
28
|
+
children?: React.ReactNode;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A semantic toolbar built on React Aria's `Toolbar` (`role="toolbar"`).
|
|
32
|
+
*
|
|
33
|
+
* Entity = Structure → reads `vars.colors.informational.{primary|muted}` for
|
|
34
|
+
* the bar surface and border, `vars.radii.surface` for the corner, and
|
|
35
|
+
* `vars.spacing.inset.surface` for padding. Groups related actions (a text
|
|
36
|
+
* formatting bar, a view-mode switch, a set of table controls) under one
|
|
37
|
+
* region with arrow-key navigation. Non-interactive itself — hover/press
|
|
38
|
+
* chrome belongs to the `Button` / `ToggleButton` children.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```tsx
|
|
42
|
+
* <Toolbar aria-label="Text formatting">
|
|
43
|
+
* <ToggleButton aria-label="Bold">B</ToggleButton>
|
|
44
|
+
* <ToggleButton aria-label="Italic">I</ToggleButton>
|
|
45
|
+
* <Separator orientation="vertical" />
|
|
46
|
+
* <Button aria-label="Link">Link</Button>
|
|
47
|
+
* </Toolbar>
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
declare const Toolbar$1: {
|
|
51
|
+
({
|
|
52
|
+
orientation,
|
|
53
|
+
evaluation,
|
|
54
|
+
children,
|
|
55
|
+
...props
|
|
56
|
+
}: ToolbarProps$1): import("react/jsx-runtime").JSX.Element;
|
|
57
|
+
displayName: "Toolbar";
|
|
58
|
+
};
|
|
59
|
+
//#endregion
|
|
60
|
+
export { Toolbar$1 as Toolbar, ToolbarProps$1 as ToolbarProps, toolbarMeta };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
|
|
2
|
+
import { vars } from "@ttoss/fsl-theme/vars";
|
|
3
|
+
import { Toolbar } from "react-aria-components";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
|
|
6
|
+
//#region src/components/Toolbar/Toolbar.tsx
|
|
7
|
+
/** Formal semantic identity — Toolbar root (Structure entity, actions bar). */
|
|
8
|
+
var toolbarMeta = {
|
|
9
|
+
displayName: "Toolbar",
|
|
10
|
+
entity: "Structure",
|
|
11
|
+
structure: "root"
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* A semantic toolbar built on React Aria's `Toolbar` (`role="toolbar"`).
|
|
15
|
+
*
|
|
16
|
+
* Entity = Structure → reads `vars.colors.informational.{primary|muted}` for
|
|
17
|
+
* the bar surface and border, `vars.radii.surface` for the corner, and
|
|
18
|
+
* `vars.spacing.inset.surface` for padding. Groups related actions (a text
|
|
19
|
+
* formatting bar, a view-mode switch, a set of table controls) under one
|
|
20
|
+
* region with arrow-key navigation. Non-interactive itself — hover/press
|
|
21
|
+
* chrome belongs to the `Button` / `ToggleButton` children.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```tsx
|
|
25
|
+
* <Toolbar aria-label="Text formatting">
|
|
26
|
+
* <ToggleButton aria-label="Bold">B</ToggleButton>
|
|
27
|
+
* <ToggleButton aria-label="Italic">I</ToggleButton>
|
|
28
|
+
* <Separator orientation="vertical" />
|
|
29
|
+
* <Button aria-label="Link">Link</Button>
|
|
30
|
+
* </Toolbar>
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
var Toolbar$1 = ({
|
|
34
|
+
orientation = "horizontal",
|
|
35
|
+
evaluation = "primary",
|
|
36
|
+
children,
|
|
37
|
+
...props
|
|
38
|
+
}) => {
|
|
39
|
+
const c = vars.colors.informational[evaluation];
|
|
40
|
+
const isVertical = orientation === "vertical";
|
|
41
|
+
return /* @__PURE__ */jsx(Toolbar, {
|
|
42
|
+
...props,
|
|
43
|
+
orientation,
|
|
44
|
+
"data-scope": "toolbar",
|
|
45
|
+
"data-part": "root",
|
|
46
|
+
"data-evaluation": evaluation,
|
|
47
|
+
style: {
|
|
48
|
+
boxSizing: "border-box",
|
|
49
|
+
display: "inline-flex",
|
|
50
|
+
flexDirection: isVertical ? "column" : "row",
|
|
51
|
+
alignItems: "center",
|
|
52
|
+
gap: vars.spacing.gap.inline.sm,
|
|
53
|
+
padding: vars.spacing.inset.surface.sm,
|
|
54
|
+
borderRadius: vars.radii.surface,
|
|
55
|
+
borderWidth: vars.border.outline.surface.width,
|
|
56
|
+
borderStyle: vars.border.outline.surface.style,
|
|
57
|
+
borderColor: c?.border?.default ?? "transparent",
|
|
58
|
+
backgroundColor: c?.background?.default
|
|
59
|
+
},
|
|
60
|
+
children
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
Toolbar$1.displayName = toolbarMeta.displayName;
|
|
64
|
+
|
|
65
|
+
//#endregion
|
|
66
|
+
export { Toolbar$1 as Toolbar, toolbarMeta };
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
/** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
|
|
2
|
+
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
const require_focusRing = require('../../tokens/focusRing.cjs');
|
|
4
|
+
const require_resolveInteractiveStyle = require('../../tokens/resolveInteractiveStyle.cjs');
|
|
5
|
+
const require_Icon = require('../../components/Icon/Icon.cjs');
|
|
6
|
+
const require_scope = require('../scope.cjs');
|
|
7
|
+
let _ttoss_fsl_theme_vars = require("@ttoss/fsl-theme/vars");
|
|
8
|
+
let react_aria_components = require("react-aria-components");
|
|
9
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
10
|
+
let react = require("react");
|
|
11
|
+
react = require_runtime.__toESM(react);
|
|
12
|
+
|
|
13
|
+
//#region src/composites/Accordion/Accordion.tsx
|
|
14
|
+
var accordionScope = require_scope.createCompositeScope("Accordion");
|
|
15
|
+
/** Formal semantic identity — Accordion root (Disclosure entity, group host). */
|
|
16
|
+
var accordionMeta = {
|
|
17
|
+
displayName: "Accordion",
|
|
18
|
+
entity: "Disclosure",
|
|
19
|
+
structure: "root"
|
|
20
|
+
};
|
|
21
|
+
/** Formal semantic identity — AccordionItem (Disclosure entity, single item).
|
|
22
|
+
*
|
|
23
|
+
* Intentionally has no `composition` field. Per the §2.3 evidence rule,
|
|
24
|
+
* `composition` is declared only when a runtime dispatches on it (DOM
|
|
25
|
+
* reorder, behavior selection, or coloring). The Accordion host does not
|
|
26
|
+
* dispatch on composition — items are not reordered, selected, or styled
|
|
27
|
+
* by it — so attaching a value here would be dead weight. The disclosure's
|
|
28
|
+
* interactive `'control'` is the trigger button, not the item container,
|
|
29
|
+
* and even on `accordionTriggerMeta` the value would be unused today; if
|
|
30
|
+
* a future runtime starts dispatching on it, declare it then.
|
|
31
|
+
*/
|
|
32
|
+
var accordionItemMeta = {
|
|
33
|
+
displayName: "AccordionItem",
|
|
34
|
+
entity: "Disclosure",
|
|
35
|
+
structure: "root"
|
|
36
|
+
};
|
|
37
|
+
/** Formal semantic identity — AccordionTrigger (header button). */
|
|
38
|
+
var accordionTriggerMeta = {
|
|
39
|
+
displayName: "AccordionTrigger",
|
|
40
|
+
entity: "Disclosure",
|
|
41
|
+
structure: "trigger"
|
|
42
|
+
};
|
|
43
|
+
/** Formal semantic identity — AccordionPanel (collapsible content region). */
|
|
44
|
+
var accordionPanelMeta = {
|
|
45
|
+
displayName: "AccordionPanel",
|
|
46
|
+
entity: "Disclosure",
|
|
47
|
+
structure: "content"
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* A semantic accordion built on React Aria's `DisclosureGroup`.
|
|
51
|
+
*
|
|
52
|
+
* Entity = Disclosure, interaction = `disclose.toggle`. Reads from
|
|
53
|
+
* `vars.colors.navigation.{primary|muted}` and animates with
|
|
54
|
+
* `vars.motion.transition.{enter,exit}` — never with `vars.motion.feedback`,
|
|
55
|
+
* which is reserved for micro-interactions on Action and Input controls.
|
|
56
|
+
*
|
|
57
|
+
* Supports single-expand (default) or `allowsMultipleExpanded` for multiple
|
|
58
|
+
* concurrently open panels.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```tsx
|
|
62
|
+
* <Accordion>
|
|
63
|
+
* <AccordionItem id="terms">
|
|
64
|
+
* <AccordionTrigger>Terms of service</AccordionTrigger>
|
|
65
|
+
* <AccordionPanel>You agree not to misuse the service.</AccordionPanel>
|
|
66
|
+
* </AccordionItem>
|
|
67
|
+
* <AccordionItem id="privacy">
|
|
68
|
+
* <AccordionTrigger>Privacy policy</AccordionTrigger>
|
|
69
|
+
* <AccordionPanel>We collect minimal personal data.</AccordionPanel>
|
|
70
|
+
* </AccordionItem>
|
|
71
|
+
* </Accordion>
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
var Accordion = ({
|
|
75
|
+
evaluation = "primary",
|
|
76
|
+
children,
|
|
77
|
+
...props
|
|
78
|
+
}) => {
|
|
79
|
+
return /* @__PURE__ */(0, react_jsx_runtime.jsx)(accordionScope.Provider, {
|
|
80
|
+
value: {
|
|
81
|
+
evaluation
|
|
82
|
+
},
|
|
83
|
+
children: /* @__PURE__ */(0, react_jsx_runtime.jsx)(react_aria_components.DisclosureGroup, {
|
|
84
|
+
...props,
|
|
85
|
+
"data-scope": "accordion",
|
|
86
|
+
"data-part": "root",
|
|
87
|
+
"data-evaluation": evaluation,
|
|
88
|
+
style: {
|
|
89
|
+
boxSizing: "border-box",
|
|
90
|
+
display: "flex",
|
|
91
|
+
flexDirection: "column",
|
|
92
|
+
borderWidth: _ttoss_fsl_theme_vars.vars.border.outline.control.width,
|
|
93
|
+
borderStyle: _ttoss_fsl_theme_vars.vars.border.outline.control.style,
|
|
94
|
+
borderColor: _ttoss_fsl_theme_vars.vars.colors.navigation[evaluation]?.border?.default ?? "transparent",
|
|
95
|
+
borderRadius: _ttoss_fsl_theme_vars.vars.radii.surface,
|
|
96
|
+
overflow: "hidden"
|
|
97
|
+
},
|
|
98
|
+
children
|
|
99
|
+
})
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
Accordion.displayName = accordionMeta.displayName;
|
|
103
|
+
/**
|
|
104
|
+
* A single collapsible item — must be used inside an `Accordion`.
|
|
105
|
+
*
|
|
106
|
+
* Wraps React Aria's `Disclosure`. Adjacent items are separated by a divider
|
|
107
|
+
* border; the last item's bottom border is suppressed by the parent `overflow:
|
|
108
|
+
* hidden` + the rounded surface radius.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```tsx
|
|
112
|
+
* <AccordionItem id="terms">
|
|
113
|
+
* <AccordionTrigger>Terms of service</AccordionTrigger>
|
|
114
|
+
* <AccordionPanel>You agree not to misuse the service.</AccordionPanel>
|
|
115
|
+
* </AccordionItem>
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
var AccordionItem = ({
|
|
119
|
+
children,
|
|
120
|
+
...props
|
|
121
|
+
}) => {
|
|
122
|
+
const {
|
|
123
|
+
evaluation
|
|
124
|
+
} = accordionScope.use(accordionItemMeta.displayName);
|
|
125
|
+
return /* @__PURE__ */(0, react_jsx_runtime.jsx)(react_aria_components.Disclosure, {
|
|
126
|
+
...props,
|
|
127
|
+
"data-scope": "accordion",
|
|
128
|
+
"data-part": "item",
|
|
129
|
+
style: {
|
|
130
|
+
boxSizing: "border-box",
|
|
131
|
+
borderBlockStartWidth: _ttoss_fsl_theme_vars.vars.border.divider.width,
|
|
132
|
+
borderBlockStartStyle: _ttoss_fsl_theme_vars.vars.border.divider.style,
|
|
133
|
+
borderBlockStartColor: _ttoss_fsl_theme_vars.vars.colors.navigation[evaluation]?.border?.default ?? "transparent"
|
|
134
|
+
},
|
|
135
|
+
children
|
|
136
|
+
});
|
|
137
|
+
};
|
|
138
|
+
AccordionItem.displayName = accordionItemMeta.displayName;
|
|
139
|
+
/**
|
|
140
|
+
* The clickable header of an `AccordionItem`. Renders inside a heading
|
|
141
|
+
* element (level via `headingLevel`, default `<h3>` per RAC's recommended
|
|
142
|
+
* structure) and exposes `aria-expanded` / a controlled chevron icon.
|
|
143
|
+
*
|
|
144
|
+
* Reads `isExpanded`, `isHovered`, `isFocusVisible`, `isDisabled` from RAC's
|
|
145
|
+
* `Button` render-props and resolves them through the canonical state
|
|
146
|
+
* cascade in [`resolveInteractiveStyle`](../../tokens/resolveInteractiveStyle.ts).
|
|
147
|
+
*/
|
|
148
|
+
var AccordionTrigger = ({
|
|
149
|
+
headingLevel = 3,
|
|
150
|
+
children,
|
|
151
|
+
...props
|
|
152
|
+
}) => {
|
|
153
|
+
const {
|
|
154
|
+
evaluation
|
|
155
|
+
} = accordionScope.use(accordionTriggerMeta.displayName);
|
|
156
|
+
const c = _ttoss_fsl_theme_vars.vars.colors.navigation[evaluation];
|
|
157
|
+
const isExpanded = react.useContext(react_aria_components.DisclosureStateContext)?.isExpanded ?? false;
|
|
158
|
+
return /* @__PURE__ */(0, react_jsx_runtime.jsx)(react_aria_components.Heading, {
|
|
159
|
+
level: headingLevel,
|
|
160
|
+
"data-scope": "accordion",
|
|
161
|
+
"data-part": "header",
|
|
162
|
+
style: {
|
|
163
|
+
margin: 0
|
|
164
|
+
},
|
|
165
|
+
children: /* @__PURE__ */(0, react_jsx_runtime.jsxs)(react_aria_components.Button, {
|
|
166
|
+
...props,
|
|
167
|
+
slot: "trigger",
|
|
168
|
+
"data-scope": "accordion",
|
|
169
|
+
"data-part": "trigger",
|
|
170
|
+
style: ({
|
|
171
|
+
isHovered,
|
|
172
|
+
isPressed,
|
|
173
|
+
isDisabled,
|
|
174
|
+
isFocusVisible
|
|
175
|
+
}) => {
|
|
176
|
+
const flags = {
|
|
177
|
+
isHovered,
|
|
178
|
+
isPressed,
|
|
179
|
+
isDisabled,
|
|
180
|
+
isFocusVisible,
|
|
181
|
+
isExpanded
|
|
182
|
+
};
|
|
183
|
+
return {
|
|
184
|
+
boxSizing: "border-box",
|
|
185
|
+
width: "100%",
|
|
186
|
+
display: "inline-flex",
|
|
187
|
+
alignItems: "center",
|
|
188
|
+
justifyContent: "space-between",
|
|
189
|
+
gap: _ttoss_fsl_theme_vars.vars.spacing.gap.inline.sm,
|
|
190
|
+
minHeight: _ttoss_fsl_theme_vars.vars.sizing.hit.base,
|
|
191
|
+
paddingBlock: _ttoss_fsl_theme_vars.vars.spacing.inset.control.md,
|
|
192
|
+
paddingInline: _ttoss_fsl_theme_vars.vars.spacing.inset.control.md,
|
|
193
|
+
border: "none",
|
|
194
|
+
background: "none",
|
|
195
|
+
backgroundColor: require_resolveInteractiveStyle.resolveInteractiveStyle(c?.background, flags),
|
|
196
|
+
color: require_resolveInteractiveStyle.resolveInteractiveStyle(c?.text, flags) ?? c?.text?.default,
|
|
197
|
+
cursor: isDisabled ? "not-allowed" : "pointer",
|
|
198
|
+
opacity: isDisabled ? _ttoss_fsl_theme_vars.vars.opacity.disabled : void 0,
|
|
199
|
+
..._ttoss_fsl_theme_vars.vars.text.label.md,
|
|
200
|
+
textAlign: "start",
|
|
201
|
+
transitionProperty: "background-color, color",
|
|
202
|
+
transitionDuration: _ttoss_fsl_theme_vars.vars.motion.transition.enter.duration,
|
|
203
|
+
transitionTimingFunction: _ttoss_fsl_theme_vars.vars.motion.transition.enter.easing,
|
|
204
|
+
outline: require_focusRing.focusRingOutline(isFocusVisible),
|
|
205
|
+
outlineOffset: "-2px"
|
|
206
|
+
};
|
|
207
|
+
},
|
|
208
|
+
children: [/* @__PURE__ */(0, react_jsx_runtime.jsx)("span", {
|
|
209
|
+
"data-scope": "accordion",
|
|
210
|
+
"data-part": "label",
|
|
211
|
+
style: {
|
|
212
|
+
flex: 1
|
|
213
|
+
},
|
|
214
|
+
children
|
|
215
|
+
}), /* @__PURE__ */(0, react_jsx_runtime.jsx)("span", {
|
|
216
|
+
"data-scope": "accordion",
|
|
217
|
+
"data-part": "indicator",
|
|
218
|
+
"aria-hidden": true,
|
|
219
|
+
style: {
|
|
220
|
+
flexShrink: 0,
|
|
221
|
+
display: "inline-block",
|
|
222
|
+
transform: isExpanded ? "rotate(90deg)" : "rotate(0deg)",
|
|
223
|
+
transitionProperty: "transform",
|
|
224
|
+
transitionDuration: isExpanded ? _ttoss_fsl_theme_vars.vars.motion.transition.enter.duration : _ttoss_fsl_theme_vars.vars.motion.transition.exit.duration,
|
|
225
|
+
transitionTimingFunction: isExpanded ? _ttoss_fsl_theme_vars.vars.motion.transition.enter.easing : _ttoss_fsl_theme_vars.vars.motion.transition.exit.easing
|
|
226
|
+
},
|
|
227
|
+
children: /* @__PURE__ */(0, react_jsx_runtime.jsx)(require_Icon.Icon, {
|
|
228
|
+
intent: "disclosure.collapse"
|
|
229
|
+
})
|
|
230
|
+
})]
|
|
231
|
+
})
|
|
232
|
+
});
|
|
233
|
+
};
|
|
234
|
+
AccordionTrigger.displayName = accordionTriggerMeta.displayName;
|
|
235
|
+
/**
|
|
236
|
+
* The collapsible content region of an `AccordionItem`. RAC handles the
|
|
237
|
+
* show/hide via the parent Disclosure state; we apply the
|
|
238
|
+
* `vars.motion.transition.{enter,exit}` semantics for the chrome's
|
|
239
|
+
* appearance change.
|
|
240
|
+
*
|
|
241
|
+
* @example
|
|
242
|
+
* ```tsx
|
|
243
|
+
* <AccordionPanel>You agree not to misuse the service.</AccordionPanel>
|
|
244
|
+
* ```
|
|
245
|
+
*/
|
|
246
|
+
var AccordionPanel = ({
|
|
247
|
+
children,
|
|
248
|
+
...props
|
|
249
|
+
}) => {
|
|
250
|
+
const {
|
|
251
|
+
evaluation
|
|
252
|
+
} = accordionScope.use(accordionPanelMeta.displayName);
|
|
253
|
+
const c = _ttoss_fsl_theme_vars.vars.colors.navigation[evaluation];
|
|
254
|
+
return /* @__PURE__ */(0, react_jsx_runtime.jsx)(react_aria_components.DisclosurePanel, {
|
|
255
|
+
...props,
|
|
256
|
+
"data-scope": "accordion",
|
|
257
|
+
"data-part": "content",
|
|
258
|
+
style: {
|
|
259
|
+
boxSizing: "border-box",
|
|
260
|
+
paddingBlock: _ttoss_fsl_theme_vars.vars.spacing.inset.control.md,
|
|
261
|
+
paddingInline: _ttoss_fsl_theme_vars.vars.spacing.inset.control.md,
|
|
262
|
+
backgroundColor: c?.background?.default,
|
|
263
|
+
color: c?.text?.default,
|
|
264
|
+
..._ttoss_fsl_theme_vars.vars.text.body.md
|
|
265
|
+
},
|
|
266
|
+
children
|
|
267
|
+
});
|
|
268
|
+
};
|
|
269
|
+
AccordionPanel.displayName = accordionPanelMeta.displayName;
|
|
270
|
+
|
|
271
|
+
//#endregion
|
|
272
|
+
exports.Accordion = Accordion;
|
|
273
|
+
exports.AccordionItem = AccordionItem;
|
|
274
|
+
exports.AccordionPanel = AccordionPanel;
|
|
275
|
+
exports.AccordionTrigger = AccordionTrigger;
|
|
276
|
+
exports.accordionItemMeta = accordionItemMeta;
|
|
277
|
+
exports.accordionMeta = accordionMeta;
|
|
278
|
+
exports.accordionPanelMeta = accordionPanelMeta;
|
|
279
|
+
exports.accordionTriggerMeta = accordionTriggerMeta;
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
|
|
2
|
+
import { EvaluationsFor } from "../../semantics/taxonomy.cjs";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { ButtonProps, DisclosureGroupProps, DisclosurePanelProps, DisclosureProps } from "react-aria-components";
|
|
5
|
+
|
|
6
|
+
//#region src/composites/Accordion/Accordion.d.ts
|
|
7
|
+
/** Formal semantic identity — Accordion root (Disclosure entity, group host). */
|
|
8
|
+
declare const accordionMeta: {
|
|
9
|
+
readonly displayName: "Accordion";
|
|
10
|
+
readonly entity: "Disclosure";
|
|
11
|
+
readonly structure: "root";
|
|
12
|
+
};
|
|
13
|
+
/** Formal semantic identity — AccordionItem (Disclosure entity, single item).
|
|
14
|
+
*
|
|
15
|
+
* Intentionally has no `composition` field. Per the §2.3 evidence rule,
|
|
16
|
+
* `composition` is declared only when a runtime dispatches on it (DOM
|
|
17
|
+
* reorder, behavior selection, or coloring). The Accordion host does not
|
|
18
|
+
* dispatch on composition — items are not reordered, selected, or styled
|
|
19
|
+
* by it — so attaching a value here would be dead weight. The disclosure's
|
|
20
|
+
* interactive `'control'` is the trigger button, not the item container,
|
|
21
|
+
* and even on `accordionTriggerMeta` the value would be unused today; if
|
|
22
|
+
* a future runtime starts dispatching on it, declare it then.
|
|
23
|
+
*/
|
|
24
|
+
declare const accordionItemMeta: {
|
|
25
|
+
readonly displayName: "AccordionItem";
|
|
26
|
+
readonly entity: "Disclosure";
|
|
27
|
+
readonly structure: "root";
|
|
28
|
+
};
|
|
29
|
+
/** Formal semantic identity — AccordionTrigger (header button). */
|
|
30
|
+
declare const accordionTriggerMeta: {
|
|
31
|
+
readonly displayName: "AccordionTrigger";
|
|
32
|
+
readonly entity: "Disclosure";
|
|
33
|
+
readonly structure: "trigger";
|
|
34
|
+
};
|
|
35
|
+
/** Formal semantic identity — AccordionPanel (collapsible content region). */
|
|
36
|
+
declare const accordionPanelMeta: {
|
|
37
|
+
readonly displayName: "AccordionPanel";
|
|
38
|
+
readonly entity: "Disclosure";
|
|
39
|
+
readonly structure: "content";
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Props for the Accordion component.
|
|
43
|
+
*
|
|
44
|
+
* The composite owns its layout; pass `style`/`className` on a wrapping
|
|
45
|
+
* element rather than on the composite root. See CONTRIBUTING §4.
|
|
46
|
+
*/
|
|
47
|
+
interface AccordionProps extends Omit<DisclosureGroupProps, 'style' | 'children' | 'className'> {
|
|
48
|
+
/**
|
|
49
|
+
* Authorial emphasis. `primary` is the standard accordion chrome;
|
|
50
|
+
* `muted` is a subdued variant for sidebars and dense lists.
|
|
51
|
+
* @default 'primary'
|
|
52
|
+
*/
|
|
53
|
+
evaluation?: EvaluationsFor<'Disclosure'>;
|
|
54
|
+
/** `AccordionItem` children. */
|
|
55
|
+
children?: React.ReactNode;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* A semantic accordion built on React Aria's `DisclosureGroup`.
|
|
59
|
+
*
|
|
60
|
+
* Entity = Disclosure, interaction = `disclose.toggle`. Reads from
|
|
61
|
+
* `vars.colors.navigation.{primary|muted}` and animates with
|
|
62
|
+
* `vars.motion.transition.{enter,exit}` — never with `vars.motion.feedback`,
|
|
63
|
+
* which is reserved for micro-interactions on Action and Input controls.
|
|
64
|
+
*
|
|
65
|
+
* Supports single-expand (default) or `allowsMultipleExpanded` for multiple
|
|
66
|
+
* concurrently open panels.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```tsx
|
|
70
|
+
* <Accordion>
|
|
71
|
+
* <AccordionItem id="terms">
|
|
72
|
+
* <AccordionTrigger>Terms of service</AccordionTrigger>
|
|
73
|
+
* <AccordionPanel>You agree not to misuse the service.</AccordionPanel>
|
|
74
|
+
* </AccordionItem>
|
|
75
|
+
* <AccordionItem id="privacy">
|
|
76
|
+
* <AccordionTrigger>Privacy policy</AccordionTrigger>
|
|
77
|
+
* <AccordionPanel>We collect minimal personal data.</AccordionPanel>
|
|
78
|
+
* </AccordionItem>
|
|
79
|
+
* </Accordion>
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
declare const Accordion: {
|
|
83
|
+
({
|
|
84
|
+
evaluation,
|
|
85
|
+
children,
|
|
86
|
+
...props
|
|
87
|
+
}: AccordionProps): import("react/jsx-runtime").JSX.Element;
|
|
88
|
+
displayName: "Accordion";
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Props for the AccordionItem component.
|
|
92
|
+
*/
|
|
93
|
+
interface AccordionItemProps extends Omit<DisclosureProps, 'style' | 'children' | 'className'> {
|
|
94
|
+
/** `AccordionTrigger` and `AccordionPanel` children, in that order. */
|
|
95
|
+
children?: React.ReactNode;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* A single collapsible item — must be used inside an `Accordion`.
|
|
99
|
+
*
|
|
100
|
+
* Wraps React Aria's `Disclosure`. Adjacent items are separated by a divider
|
|
101
|
+
* border; the last item's bottom border is suppressed by the parent `overflow:
|
|
102
|
+
* hidden` + the rounded surface radius.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```tsx
|
|
106
|
+
* <AccordionItem id="terms">
|
|
107
|
+
* <AccordionTrigger>Terms of service</AccordionTrigger>
|
|
108
|
+
* <AccordionPanel>You agree not to misuse the service.</AccordionPanel>
|
|
109
|
+
* </AccordionItem>
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
declare const AccordionItem: {
|
|
113
|
+
({
|
|
114
|
+
children,
|
|
115
|
+
...props
|
|
116
|
+
}: AccordionItemProps): import("react/jsx-runtime").JSX.Element;
|
|
117
|
+
displayName: "AccordionItem";
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Props for the AccordionTrigger component.
|
|
121
|
+
*
|
|
122
|
+
* Extends the full React Aria `Button` API (minus `style`/`className` and
|
|
123
|
+
* the reserved `slot`) so behavior props — `isDisabled`, `onPress`, `id`,
|
|
124
|
+
* `aria-*` — flow through to the underlying trigger button.
|
|
125
|
+
*/
|
|
126
|
+
interface AccordionTriggerProps extends Omit<ButtonProps, 'style' | 'className' | 'children' | 'slot'> {
|
|
127
|
+
/**
|
|
128
|
+
* HTML heading level of the wrapping heading element. Pick the level
|
|
129
|
+
* that fits the host page's document outline.
|
|
130
|
+
* @default 3
|
|
131
|
+
*/
|
|
132
|
+
headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
133
|
+
/** Visible label content of the trigger row. */
|
|
134
|
+
children?: React.ReactNode;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* The clickable header of an `AccordionItem`. Renders inside a heading
|
|
138
|
+
* element (level via `headingLevel`, default `<h3>` per RAC's recommended
|
|
139
|
+
* structure) and exposes `aria-expanded` / a controlled chevron icon.
|
|
140
|
+
*
|
|
141
|
+
* Reads `isExpanded`, `isHovered`, `isFocusVisible`, `isDisabled` from RAC's
|
|
142
|
+
* `Button` render-props and resolves them through the canonical state
|
|
143
|
+
* cascade in [`resolveInteractiveStyle`](../../tokens/resolveInteractiveStyle.ts).
|
|
144
|
+
*/
|
|
145
|
+
declare const AccordionTrigger: {
|
|
146
|
+
({
|
|
147
|
+
headingLevel,
|
|
148
|
+
children,
|
|
149
|
+
...props
|
|
150
|
+
}: AccordionTriggerProps): import("react/jsx-runtime").JSX.Element;
|
|
151
|
+
displayName: "AccordionTrigger";
|
|
152
|
+
};
|
|
153
|
+
/**
|
|
154
|
+
* Props for the AccordionPanel component.
|
|
155
|
+
*/
|
|
156
|
+
type AccordionPanelProps = Omit<DisclosurePanelProps, 'style' | 'className'>;
|
|
157
|
+
/**
|
|
158
|
+
* The collapsible content region of an `AccordionItem`. RAC handles the
|
|
159
|
+
* show/hide via the parent Disclosure state; we apply the
|
|
160
|
+
* `vars.motion.transition.{enter,exit}` semantics for the chrome's
|
|
161
|
+
* appearance change.
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* ```tsx
|
|
165
|
+
* <AccordionPanel>You agree not to misuse the service.</AccordionPanel>
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
declare const AccordionPanel: {
|
|
169
|
+
({
|
|
170
|
+
children,
|
|
171
|
+
...props
|
|
172
|
+
}: AccordionPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
173
|
+
displayName: "AccordionPanel";
|
|
174
|
+
};
|
|
175
|
+
//#endregion
|
|
176
|
+
export { Accordion, AccordionItem, AccordionItemProps, AccordionPanel, AccordionPanelProps, AccordionProps, AccordionTrigger, AccordionTriggerProps, accordionItemMeta, accordionMeta, accordionPanelMeta, accordionTriggerMeta };
|