@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.
Files changed (174) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +76 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +30 -0
  4. package/dist/components/Breadcrumbs/Breadcrumbs.cjs +129 -0
  5. package/dist/components/Breadcrumbs/Breadcrumbs.d.cts +61 -0
  6. package/dist/components/Breadcrumbs/Breadcrumbs.d.mts +61 -0
  7. package/dist/components/Breadcrumbs/Breadcrumbs.mjs +126 -0
  8. package/dist/components/Button/Button.cjs +80 -0
  9. package/dist/components/Button/Button.d.cts +68 -0
  10. package/dist/components/Button/Button.d.mts +68 -0
  11. package/dist/components/Button/Button.mjs +79 -0
  12. package/dist/components/Checkbox/Checkbox.cjs +183 -0
  13. package/dist/components/Checkbox/Checkbox.d.cts +45 -0
  14. package/dist/components/Checkbox/Checkbox.d.mts +45 -0
  15. package/dist/components/Checkbox/Checkbox.mjs +182 -0
  16. package/dist/components/CheckboxGroup/CheckboxGroup.cjs +97 -0
  17. package/dist/components/CheckboxGroup/CheckboxGroup.d.cts +56 -0
  18. package/dist/components/CheckboxGroup/CheckboxGroup.d.mts +56 -0
  19. package/dist/components/CheckboxGroup/CheckboxGroup.mjs +96 -0
  20. package/dist/components/FileTrigger/FileTrigger.cjs +51 -0
  21. package/dist/components/FileTrigger/FileTrigger.d.cts +52 -0
  22. package/dist/components/FileTrigger/FileTrigger.d.mts +52 -0
  23. package/dist/components/FileTrigger/FileTrigger.mjs +50 -0
  24. package/dist/components/GridList/GridList.cjs +220 -0
  25. package/dist/components/GridList/GridList.d.cts +72 -0
  26. package/dist/components/GridList/GridList.d.mts +72 -0
  27. package/dist/components/GridList/GridList.mjs +217 -0
  28. package/dist/components/Group/Group.cjs +77 -0
  29. package/dist/components/Group/Group.d.cts +61 -0
  30. package/dist/components/Group/Group.d.mts +61 -0
  31. package/dist/components/Group/Group.mjs +74 -0
  32. package/dist/components/Icon/Icon.cjs +52 -0
  33. package/dist/components/Icon/Icon.mjs +52 -0
  34. package/dist/components/Icon/glyphs.cjs +72 -0
  35. package/dist/components/Icon/glyphs.mjs +63 -0
  36. package/dist/components/Link/Link.cjs +62 -0
  37. package/dist/components/Link/Link.d.cts +38 -0
  38. package/dist/components/Link/Link.d.mts +38 -0
  39. package/dist/components/Link/Link.mjs +61 -0
  40. package/dist/components/ListBox/ListBox.cjs +126 -0
  41. package/dist/components/ListBox/ListBox.d.cts +63 -0
  42. package/dist/components/ListBox/ListBox.d.mts +63 -0
  43. package/dist/components/ListBox/ListBox.mjs +123 -0
  44. package/dist/components/Meter/Meter.cjs +126 -0
  45. package/dist/components/Meter/Meter.d.cts +63 -0
  46. package/dist/components/Meter/Meter.d.mts +63 -0
  47. package/dist/components/Meter/Meter.mjs +125 -0
  48. package/dist/components/NumberField/NumberField.cjs +221 -0
  49. package/dist/components/NumberField/NumberField.d.cts +68 -0
  50. package/dist/components/NumberField/NumberField.d.mts +68 -0
  51. package/dist/components/NumberField/NumberField.mjs +220 -0
  52. package/dist/components/ProgressBar/ProgressBar.cjs +132 -0
  53. package/dist/components/ProgressBar/ProgressBar.d.cts +56 -0
  54. package/dist/components/ProgressBar/ProgressBar.d.mts +56 -0
  55. package/dist/components/ProgressBar/ProgressBar.mjs +129 -0
  56. package/dist/components/RadioGroup/RadioGroup.cjs +218 -0
  57. package/dist/components/RadioGroup/RadioGroup.d.cts +82 -0
  58. package/dist/components/RadioGroup/RadioGroup.d.mts +82 -0
  59. package/dist/components/RadioGroup/RadioGroup.mjs +215 -0
  60. package/dist/components/Select/Select.cjs +253 -0
  61. package/dist/components/Select/Select.d.cts +86 -0
  62. package/dist/components/Select/Select.d.mts +86 -0
  63. package/dist/components/Select/Select.mjs +250 -0
  64. package/dist/components/Separator/Separator.cjs +64 -0
  65. package/dist/components/Separator/Separator.d.cts +44 -0
  66. package/dist/components/Separator/Separator.d.mts +44 -0
  67. package/dist/components/Separator/Separator.mjs +63 -0
  68. package/dist/components/Slider/Slider.cjs +160 -0
  69. package/dist/components/Slider/Slider.d.cts +45 -0
  70. package/dist/components/Slider/Slider.d.mts +45 -0
  71. package/dist/components/Slider/Slider.mjs +159 -0
  72. package/dist/components/Switch/Switch.cjs +176 -0
  73. package/dist/components/Switch/Switch.d.cts +43 -0
  74. package/dist/components/Switch/Switch.d.mts +43 -0
  75. package/dist/components/Switch/Switch.mjs +175 -0
  76. package/dist/components/Tabs/Tabs.cjs +180 -0
  77. package/dist/components/Tabs/Tabs.d.cts +85 -0
  78. package/dist/components/Tabs/Tabs.d.mts +85 -0
  79. package/dist/components/Tabs/Tabs.mjs +173 -0
  80. package/dist/components/Toast/Toast.cjs +218 -0
  81. package/dist/components/Toast/Toast.d.cts +96 -0
  82. package/dist/components/Toast/Toast.d.mts +96 -0
  83. package/dist/components/Toast/Toast.mjs +214 -0
  84. package/dist/components/ToggleButton/ToggleButton.cjs +125 -0
  85. package/dist/components/ToggleButton/ToggleButton.d.cts +43 -0
  86. package/dist/components/ToggleButton/ToggleButton.d.mts +43 -0
  87. package/dist/components/ToggleButton/ToggleButton.mjs +124 -0
  88. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.cjs +48 -0
  89. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.d.cts +41 -0
  90. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.d.mts +41 -0
  91. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.mjs +47 -0
  92. package/dist/components/Toolbar/Toolbar.cjs +67 -0
  93. package/dist/components/Toolbar/Toolbar.d.cts +60 -0
  94. package/dist/components/Toolbar/Toolbar.d.mts +60 -0
  95. package/dist/components/Toolbar/Toolbar.mjs +66 -0
  96. package/dist/composites/Accordion/Accordion.cjs +279 -0
  97. package/dist/composites/Accordion/Accordion.d.cts +176 -0
  98. package/dist/composites/Accordion/Accordion.d.mts +176 -0
  99. package/dist/composites/Accordion/Accordion.mjs +270 -0
  100. package/dist/composites/ConfirmationDialog/ConfirmationDialog.cjs +206 -0
  101. package/dist/composites/ConfirmationDialog/ConfirmationDialog.d.cts +166 -0
  102. package/dist/composites/ConfirmationDialog/ConfirmationDialog.d.mts +166 -0
  103. package/dist/composites/ConfirmationDialog/ConfirmationDialog.mjs +203 -0
  104. package/dist/composites/Dialog/Dialog.cjs +372 -0
  105. package/dist/composites/Dialog/Dialog.d.cts +234 -0
  106. package/dist/composites/Dialog/Dialog.d.mts +234 -0
  107. package/dist/composites/Dialog/Dialog.mjs +360 -0
  108. package/dist/composites/Disclosure/Disclosure.cjs +214 -0
  109. package/dist/composites/Disclosure/Disclosure.d.cts +118 -0
  110. package/dist/composites/Disclosure/Disclosure.d.mts +118 -0
  111. package/dist/composites/Disclosure/Disclosure.mjs +207 -0
  112. package/dist/composites/Form/Form.cjs +161 -0
  113. package/dist/composites/Form/Form.d.cts +176 -0
  114. package/dist/composites/Form/Form.d.mts +176 -0
  115. package/dist/composites/Form/Form.mjs +156 -0
  116. package/dist/composites/Menu/Menu.cjs +190 -0
  117. package/dist/composites/Menu/Menu.d.cts +158 -0
  118. package/dist/composites/Menu/Menu.d.mts +158 -0
  119. package/dist/composites/Menu/Menu.mjs +186 -0
  120. package/dist/composites/Popover/Popover.cjs +80 -0
  121. package/dist/composites/Popover/Popover.d.cts +56 -0
  122. package/dist/composites/Popover/Popover.d.mts +56 -0
  123. package/dist/composites/Popover/Popover.mjs +78 -0
  124. package/dist/composites/SearchField/SearchField.cjs +194 -0
  125. package/dist/composites/SearchField/SearchField.d.cts +81 -0
  126. package/dist/composites/SearchField/SearchField.d.mts +81 -0
  127. package/dist/composites/SearchField/SearchField.mjs +189 -0
  128. package/dist/composites/TagGroup/TagGroup.cjs +212 -0
  129. package/dist/composites/TagGroup/TagGroup.d.cts +84 -0
  130. package/dist/composites/TagGroup/TagGroup.d.mts +84 -0
  131. package/dist/composites/TagGroup/TagGroup.mjs +209 -0
  132. package/dist/composites/TextArea/TextArea.cjs +190 -0
  133. package/dist/composites/TextArea/TextArea.d.cts +95 -0
  134. package/dist/composites/TextArea/TextArea.d.mts +95 -0
  135. package/dist/composites/TextArea/TextArea.mjs +181 -0
  136. package/dist/composites/TextField/TextField.cjs +200 -0
  137. package/dist/composites/TextField/TextField.d.cts +111 -0
  138. package/dist/composites/TextField/TextField.d.mts +111 -0
  139. package/dist/composites/TextField/TextField.mjs +191 -0
  140. package/dist/composites/Tooltip/Tooltip.cjs +79 -0
  141. package/dist/composites/Tooltip/Tooltip.d.cts +53 -0
  142. package/dist/composites/Tooltip/Tooltip.d.mts +53 -0
  143. package/dist/composites/Tooltip/Tooltip.mjs +77 -0
  144. package/dist/composites/Wizard/Wizard.cjs +333 -0
  145. package/dist/composites/Wizard/Wizard.d.cts +206 -0
  146. package/dist/composites/Wizard/Wizard.d.mts +206 -0
  147. package/dist/composites/Wizard/Wizard.mjs +324 -0
  148. package/dist/composites/scope.cjs +124 -0
  149. package/dist/composites/scope.mjs +121 -0
  150. package/dist/index.cjs +186 -0
  151. package/dist/index.d.cts +37 -0
  152. package/dist/index.d.mts +37 -0
  153. package/dist/index.mjs +39 -0
  154. package/dist/semantics/componentMeta.d.cts +37 -0
  155. package/dist/semantics/componentMeta.d.mts +37 -0
  156. package/dist/semantics/index.cjs +16 -0
  157. package/dist/semantics/index.d.cts +4 -0
  158. package/dist/semantics/index.d.mts +4 -0
  159. package/dist/semantics/index.mjs +3 -0
  160. package/dist/semantics/taxonomy.cjs +150 -0
  161. package/dist/semantics/taxonomy.d.cts +153 -0
  162. package/dist/semantics/taxonomy.d.mts +153 -0
  163. package/dist/semantics/taxonomy.mjs +140 -0
  164. package/dist/tokens/escapeHatch.cjs +13 -0
  165. package/dist/tokens/escapeHatch.mjs +13 -0
  166. package/dist/tokens/focusRing.cjs +28 -0
  167. package/dist/tokens/focusRing.mjs +28 -0
  168. package/dist/tokens/keyframes.cjs +76 -0
  169. package/dist/tokens/keyframes.mjs +75 -0
  170. package/dist/tokens/resolveInteractiveStyle.cjs +41 -0
  171. package/dist/tokens/resolveInteractiveStyle.mjs +41 -0
  172. package/llms.txt +142 -0
  173. package/package.json +70 -0
  174. 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 };