@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,132 @@
1
+ /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
+ const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
3
+ const require_keyframes = require('../../tokens/keyframes.cjs');
4
+ let _ttoss_fsl_theme_vars = require("@ttoss/fsl-theme/vars");
5
+ let react_aria_components = require("react-aria-components");
6
+ let react_jsx_runtime = require("react/jsx-runtime");
7
+ let react = require("react");
8
+ react = require_runtime.__toESM(react);
9
+
10
+ //#region src/components/ProgressBar/ProgressBar.tsx
11
+ /** Formal semantic identity — ProgressBar root (Feedback entity). */
12
+ var progressBarMeta = {
13
+ displayName: "ProgressBar",
14
+ entity: "Feedback",
15
+ structure: "root"
16
+ };
17
+ var INDETERMINATE_FILL_WIDTH = "40%";
18
+ var INDETERMINATE_CYCLE_DURATION = "1.2s";
19
+ /** Track (body) style — the empty rail the fill animates across. */
20
+ var buildTrackStyle = c => {
21
+ return {
22
+ position: "relative",
23
+ overflow: "hidden",
24
+ width: "100%",
25
+ height: _ttoss_fsl_theme_vars.vars.spacing.gap.stack.sm,
26
+ backgroundColor: c?.background?.default,
27
+ borderRadius: _ttoss_fsl_theme_vars.vars.radii.control,
28
+ borderWidth: _ttoss_fsl_theme_vars.vars.border.outline.surface.width,
29
+ borderStyle: _ttoss_fsl_theme_vars.vars.border.outline.surface.style,
30
+ borderColor: c?.border?.default
31
+ };
32
+ };
33
+ /** Fill (content) style — width tracks percentage; indeterminate animates. */
34
+ var buildFillStyle = ({
35
+ c,
36
+ percentage,
37
+ isIndeterminate
38
+ }) => {
39
+ return {
40
+ height: "100%",
41
+ width: isIndeterminate ? INDETERMINATE_FILL_WIDTH : `${percentage ?? 0}%`,
42
+ backgroundColor: c?.border?.default,
43
+ borderRadius: "inherit",
44
+ transitionProperty: "width",
45
+ transitionDuration: _ttoss_fsl_theme_vars.vars.motion.transition.enter.duration,
46
+ transitionTimingFunction: _ttoss_fsl_theme_vars.vars.motion.transition.enter.easing,
47
+ animation: isIndeterminate ? `${require_keyframes.ANIMATION_NAMES.progressBarIndeterminate} ${INDETERMINATE_CYCLE_DURATION} linear infinite` : void 0
48
+ };
49
+ };
50
+ /**
51
+ * A semantic progress bar built on React Aria's `ProgressBar`.
52
+ *
53
+ * Reads from `vars.colors.feedback.{primary|positive|caution|negative}` and
54
+ * uses `vars.radii.control` for the track. Supports both determinate
55
+ * (0–100%) and indeterminate modes — pass `isIndeterminate`.
56
+ *
57
+ * @example
58
+ * ```tsx
59
+ * <ProgressBar label="Uploading" value={42} />
60
+ * <ProgressBar label="Saving" isIndeterminate evaluation="positive" />
61
+ * ```
62
+ */
63
+ var ProgressBar = ({
64
+ evaluation = "primary",
65
+ label,
66
+ showValueLabel = true,
67
+ ...props
68
+ }) => {
69
+ const c = _ttoss_fsl_theme_vars.vars.colors.feedback[evaluation];
70
+ react.useInsertionEffect(() => {
71
+ require_keyframes.ensureKeyframes();
72
+ }, []);
73
+ return /* @__PURE__ */(0, react_jsx_runtime.jsx)(react_aria_components.ProgressBar, {
74
+ ...props,
75
+ "data-scope": "progress-bar",
76
+ "data-part": "root",
77
+ "data-evaluation": evaluation,
78
+ style: {
79
+ boxSizing: "border-box",
80
+ display: "flex",
81
+ flexDirection: "column",
82
+ gap: _ttoss_fsl_theme_vars.vars.spacing.gap.stack.xs
83
+ },
84
+ children: ({
85
+ percentage,
86
+ valueText,
87
+ isIndeterminate
88
+ }) => {
89
+ return /* @__PURE__ */(0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, {
90
+ children: [(label || showValueLabel) && /* @__PURE__ */(0, react_jsx_runtime.jsxs)("div", {
91
+ "data-scope": "progress-bar",
92
+ "data-part": "labelRow",
93
+ style: {
94
+ display: "flex",
95
+ justifyContent: "space-between",
96
+ alignItems: "baseline",
97
+ color: c?.text?.default,
98
+ ..._ttoss_fsl_theme_vars.vars.text.label.md
99
+ },
100
+ children: [/* @__PURE__ */(0, react_jsx_runtime.jsx)("span", {
101
+ "data-scope": "progress-bar",
102
+ "data-part": "title",
103
+ children: label
104
+ }), showValueLabel && !isIndeterminate && /* @__PURE__ */(0, react_jsx_runtime.jsx)("span", {
105
+ "data-scope": "progress-bar",
106
+ "data-part": "status",
107
+ "aria-hidden": true,
108
+ children: valueText ?? `${Math.round(percentage ?? 0)}%`
109
+ })]
110
+ }), /* @__PURE__ */(0, react_jsx_runtime.jsx)("div", {
111
+ "data-scope": "progress-bar",
112
+ "data-part": "body",
113
+ style: buildTrackStyle(c),
114
+ children: /* @__PURE__ */(0, react_jsx_runtime.jsx)("div", {
115
+ "data-scope": "progress-bar",
116
+ "data-part": "content",
117
+ style: buildFillStyle({
118
+ c,
119
+ percentage,
120
+ isIndeterminate
121
+ })
122
+ })
123
+ })]
124
+ });
125
+ }
126
+ });
127
+ };
128
+ ProgressBar.displayName = progressBarMeta.displayName;
129
+
130
+ //#endregion
131
+ exports.ProgressBar = ProgressBar;
132
+ exports.progressBarMeta = progressBarMeta;
@@ -0,0 +1,56 @@
1
+
2
+ import { EvaluationsFor } from "../../semantics/taxonomy.cjs";
3
+ import * as React from "react";
4
+ import { ProgressBarProps } from "react-aria-components";
5
+
6
+ //#region src/components/ProgressBar/ProgressBar.d.ts
7
+ /** Formal semantic identity — ProgressBar root (Feedback entity). */
8
+ declare const progressBarMeta: {
9
+ readonly displayName: "ProgressBar";
10
+ readonly entity: "Feedback";
11
+ readonly structure: "root";
12
+ };
13
+ /**
14
+ * Props for the ProgressBar component.
15
+ */
16
+ interface ProgressBarProps$1 extends Omit<ProgressBarProps, 'style' | 'className' | 'children'> {
17
+ /**
18
+ * Authorial emphasis. Choose the evaluation that matches the *meaning* of
19
+ * the progress: `positive` for completing a desirable task, `caution` for
20
+ * an approaching limit, `negative` for a failing operation. `primary` is
21
+ * the default neutral chrome.
22
+ * @default 'primary'
23
+ */
24
+ evaluation?: EvaluationsFor<'Feedback'>;
25
+ /** Visible label shown above the bar. */
26
+ label?: React.ReactNode;
27
+ /**
28
+ * Whether to render the `valueText`/percentage alongside the label.
29
+ * @default true
30
+ */
31
+ showValueLabel?: boolean;
32
+ }
33
+ /**
34
+ * A semantic progress bar built on React Aria's `ProgressBar`.
35
+ *
36
+ * Reads from `vars.colors.feedback.{primary|positive|caution|negative}` and
37
+ * uses `vars.radii.control` for the track. Supports both determinate
38
+ * (0–100%) and indeterminate modes — pass `isIndeterminate`.
39
+ *
40
+ * @example
41
+ * ```tsx
42
+ * <ProgressBar label="Uploading" value={42} />
43
+ * <ProgressBar label="Saving" isIndeterminate evaluation="positive" />
44
+ * ```
45
+ */
46
+ declare const ProgressBar: {
47
+ ({
48
+ evaluation,
49
+ label,
50
+ showValueLabel,
51
+ ...props
52
+ }: ProgressBarProps$1): import("react/jsx-runtime").JSX.Element;
53
+ displayName: "ProgressBar";
54
+ };
55
+ //#endregion
56
+ export { ProgressBar, ProgressBarProps$1 as ProgressBarProps, progressBarMeta };
@@ -0,0 +1,56 @@
1
+
2
+ import { EvaluationsFor } from "../../semantics/taxonomy.mjs";
3
+ import { ProgressBarProps } from "react-aria-components";
4
+ import * as React from "react";
5
+
6
+ //#region src/components/ProgressBar/ProgressBar.d.ts
7
+ /** Formal semantic identity — ProgressBar root (Feedback entity). */
8
+ declare const progressBarMeta: {
9
+ readonly displayName: "ProgressBar";
10
+ readonly entity: "Feedback";
11
+ readonly structure: "root";
12
+ };
13
+ /**
14
+ * Props for the ProgressBar component.
15
+ */
16
+ interface ProgressBarProps$1 extends Omit<ProgressBarProps, 'style' | 'className' | 'children'> {
17
+ /**
18
+ * Authorial emphasis. Choose the evaluation that matches the *meaning* of
19
+ * the progress: `positive` for completing a desirable task, `caution` for
20
+ * an approaching limit, `negative` for a failing operation. `primary` is
21
+ * the default neutral chrome.
22
+ * @default 'primary'
23
+ */
24
+ evaluation?: EvaluationsFor<'Feedback'>;
25
+ /** Visible label shown above the bar. */
26
+ label?: React.ReactNode;
27
+ /**
28
+ * Whether to render the `valueText`/percentage alongside the label.
29
+ * @default true
30
+ */
31
+ showValueLabel?: boolean;
32
+ }
33
+ /**
34
+ * A semantic progress bar built on React Aria's `ProgressBar`.
35
+ *
36
+ * Reads from `vars.colors.feedback.{primary|positive|caution|negative}` and
37
+ * uses `vars.radii.control` for the track. Supports both determinate
38
+ * (0–100%) and indeterminate modes — pass `isIndeterminate`.
39
+ *
40
+ * @example
41
+ * ```tsx
42
+ * <ProgressBar label="Uploading" value={42} />
43
+ * <ProgressBar label="Saving" isIndeterminate evaluation="positive" />
44
+ * ```
45
+ */
46
+ declare const ProgressBar$1: {
47
+ ({
48
+ evaluation,
49
+ label,
50
+ showValueLabel,
51
+ ...props
52
+ }: ProgressBarProps$1): import("react/jsx-runtime").JSX.Element;
53
+ displayName: "ProgressBar";
54
+ };
55
+ //#endregion
56
+ export { ProgressBar$1 as ProgressBar, ProgressBarProps$1 as ProgressBarProps, progressBarMeta };
@@ -0,0 +1,129 @@
1
+ /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
+ import { ANIMATION_NAMES, ensureKeyframes } from "../../tokens/keyframes.mjs";
3
+ import { vars } from "@ttoss/fsl-theme/vars";
4
+ import { ProgressBar } from "react-aria-components";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ import * as React from "react";
7
+
8
+ //#region src/components/ProgressBar/ProgressBar.tsx
9
+ /** Formal semantic identity — ProgressBar root (Feedback entity). */
10
+ var progressBarMeta = {
11
+ displayName: "ProgressBar",
12
+ entity: "Feedback",
13
+ structure: "root"
14
+ };
15
+ var INDETERMINATE_FILL_WIDTH = "40%";
16
+ var INDETERMINATE_CYCLE_DURATION = "1.2s";
17
+ /** Track (body) style — the empty rail the fill animates across. */
18
+ var buildTrackStyle = c => {
19
+ return {
20
+ position: "relative",
21
+ overflow: "hidden",
22
+ width: "100%",
23
+ height: vars.spacing.gap.stack.sm,
24
+ backgroundColor: c?.background?.default,
25
+ borderRadius: vars.radii.control,
26
+ borderWidth: vars.border.outline.surface.width,
27
+ borderStyle: vars.border.outline.surface.style,
28
+ borderColor: c?.border?.default
29
+ };
30
+ };
31
+ /** Fill (content) style — width tracks percentage; indeterminate animates. */
32
+ var buildFillStyle = ({
33
+ c,
34
+ percentage,
35
+ isIndeterminate
36
+ }) => {
37
+ return {
38
+ height: "100%",
39
+ width: isIndeterminate ? INDETERMINATE_FILL_WIDTH : `${percentage ?? 0}%`,
40
+ backgroundColor: c?.border?.default,
41
+ borderRadius: "inherit",
42
+ transitionProperty: "width",
43
+ transitionDuration: vars.motion.transition.enter.duration,
44
+ transitionTimingFunction: vars.motion.transition.enter.easing,
45
+ animation: isIndeterminate ? `${ANIMATION_NAMES.progressBarIndeterminate} ${INDETERMINATE_CYCLE_DURATION} linear infinite` : void 0
46
+ };
47
+ };
48
+ /**
49
+ * A semantic progress bar built on React Aria's `ProgressBar`.
50
+ *
51
+ * Reads from `vars.colors.feedback.{primary|positive|caution|negative}` and
52
+ * uses `vars.radii.control` for the track. Supports both determinate
53
+ * (0–100%) and indeterminate modes — pass `isIndeterminate`.
54
+ *
55
+ * @example
56
+ * ```tsx
57
+ * <ProgressBar label="Uploading" value={42} />
58
+ * <ProgressBar label="Saving" isIndeterminate evaluation="positive" />
59
+ * ```
60
+ */
61
+ var ProgressBar$1 = ({
62
+ evaluation = "primary",
63
+ label,
64
+ showValueLabel = true,
65
+ ...props
66
+ }) => {
67
+ const c = vars.colors.feedback[evaluation];
68
+ React.useInsertionEffect(() => {
69
+ ensureKeyframes();
70
+ }, []);
71
+ return /* @__PURE__ */jsx(ProgressBar, {
72
+ ...props,
73
+ "data-scope": "progress-bar",
74
+ "data-part": "root",
75
+ "data-evaluation": evaluation,
76
+ style: {
77
+ boxSizing: "border-box",
78
+ display: "flex",
79
+ flexDirection: "column",
80
+ gap: vars.spacing.gap.stack.xs
81
+ },
82
+ children: ({
83
+ percentage,
84
+ valueText,
85
+ isIndeterminate
86
+ }) => {
87
+ return /* @__PURE__ */jsxs(Fragment, {
88
+ children: [(label || showValueLabel) && /* @__PURE__ */jsxs("div", {
89
+ "data-scope": "progress-bar",
90
+ "data-part": "labelRow",
91
+ style: {
92
+ display: "flex",
93
+ justifyContent: "space-between",
94
+ alignItems: "baseline",
95
+ color: c?.text?.default,
96
+ ...vars.text.label.md
97
+ },
98
+ children: [/* @__PURE__ */jsx("span", {
99
+ "data-scope": "progress-bar",
100
+ "data-part": "title",
101
+ children: label
102
+ }), showValueLabel && !isIndeterminate && /* @__PURE__ */jsx("span", {
103
+ "data-scope": "progress-bar",
104
+ "data-part": "status",
105
+ "aria-hidden": true,
106
+ children: valueText ?? `${Math.round(percentage ?? 0)}%`
107
+ })]
108
+ }), /* @__PURE__ */jsx("div", {
109
+ "data-scope": "progress-bar",
110
+ "data-part": "body",
111
+ style: buildTrackStyle(c),
112
+ children: /* @__PURE__ */jsx("div", {
113
+ "data-scope": "progress-bar",
114
+ "data-part": "content",
115
+ style: buildFillStyle({
116
+ c,
117
+ percentage,
118
+ isIndeterminate
119
+ })
120
+ })
121
+ })]
122
+ });
123
+ }
124
+ });
125
+ };
126
+ ProgressBar$1.displayName = progressBarMeta.displayName;
127
+
128
+ //#endregion
129
+ export { ProgressBar$1 as ProgressBar, progressBarMeta };
@@ -0,0 +1,218 @@
1
+ /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
+ const require_focusRing = require('../../tokens/focusRing.cjs');
3
+ const require_resolveInteractiveStyle = require('../../tokens/resolveInteractiveStyle.cjs');
4
+ let _ttoss_fsl_theme_vars = require("@ttoss/fsl-theme/vars");
5
+ let react_aria_components = require("react-aria-components");
6
+ let react_jsx_runtime = require("react/jsx-runtime");
7
+
8
+ //#region src/components/RadioGroup/RadioGroup.tsx
9
+ /** Formal semantic identity — RadioGroup root (Selection entity, single-choice). */
10
+ var radioGroupMeta = {
11
+ displayName: "RadioGroup",
12
+ entity: "Selection",
13
+ structure: "root"
14
+ };
15
+ /** Formal semantic identity — Radio item (Selection entity, selectionControl + label). */
16
+ var radioMeta = {
17
+ displayName: "Radio",
18
+ entity: "Selection",
19
+ structure: "selectionControl",
20
+ composition: "selection"
21
+ };
22
+ /**
23
+ * A semantic radio group built on React Aria.
24
+ *
25
+ * Orchestrates a set of mutually exclusive `Radio` options. Validation
26
+ * feedback flows from `isInvalid` (or React Aria's `validate` callback) and
27
+ * surfaces on each Radio via the `invalid` State.
28
+ *
29
+ * Entity = Selection, interaction = `select.single`.
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * <RadioGroup label="Size" defaultValue="md">
34
+ * <Radio value="sm">Small</Radio>
35
+ * <Radio value="md">Medium</Radio>
36
+ * <Radio value="lg">Large</Radio>
37
+ * </RadioGroup>
38
+ * ```
39
+ */
40
+ var RadioGroup = ({
41
+ label,
42
+ children,
43
+ ...props
44
+ }) => {
45
+ const c = _ttoss_fsl_theme_vars.vars.colors.input.primary;
46
+ return /* @__PURE__ */(0, react_jsx_runtime.jsxs)(react_aria_components.RadioGroup, {
47
+ ...props,
48
+ "data-scope": "radio-group",
49
+ "data-part": "root",
50
+ style: {
51
+ boxSizing: "border-box",
52
+ display: "flex",
53
+ flexDirection: "column",
54
+ gap: _ttoss_fsl_theme_vars.vars.spacing.gap.stack.sm
55
+ },
56
+ children: [label && /* @__PURE__ */(0, react_jsx_runtime.jsx)(react_aria_components.Label, {
57
+ "data-scope": "radio-group",
58
+ "data-part": "label",
59
+ style: {
60
+ ..._ttoss_fsl_theme_vars.vars.text.label.md,
61
+ color: c?.text?.default
62
+ },
63
+ children: label
64
+ }), children]
65
+ });
66
+ };
67
+ RadioGroup.displayName = radioGroupMeta.displayName;
68
+ var RADIO_BOX_STATIC = {
69
+ boxSizing: "border-box",
70
+ flexShrink: 0,
71
+ position: "relative",
72
+ display: "inline-flex",
73
+ alignItems: "center",
74
+ justifyContent: "center",
75
+ width: "1.125rem",
76
+ height: "1.125rem",
77
+ borderRadius: _ttoss_fsl_theme_vars.vars.radii.round,
78
+ borderStyle: _ttoss_fsl_theme_vars.vars.border.outline.control.style,
79
+ transitionProperty: "background-color, border-color, border-width",
80
+ transitionDuration: _ttoss_fsl_theme_vars.vars.motion.feedback.duration,
81
+ transitionTimingFunction: _ttoss_fsl_theme_vars.vars.motion.feedback.easing,
82
+ outlineOffset: "2px"
83
+ };
84
+ /** Circular radio-indicator style (state-dependent chrome + focus ring). */
85
+ var buildRadioBoxStyle = ({
86
+ c,
87
+ isSelected,
88
+ isInvalid,
89
+ isDisabled,
90
+ isHovered,
91
+ isPressed,
92
+ isFocusVisible
93
+ }) => {
94
+ return {
95
+ ...RADIO_BOX_STATIC,
96
+ borderWidth: isSelected ? _ttoss_fsl_theme_vars.vars.border.outline.selected.width : _ttoss_fsl_theme_vars.vars.border.outline.control.width,
97
+ backgroundColor: require_resolveInteractiveStyle.resolveInteractiveStyle(c?.background, {
98
+ isDisabled,
99
+ isInvalid,
100
+ isSelected,
101
+ isHovered,
102
+ isPressed
103
+ }),
104
+ borderColor: require_resolveInteractiveStyle.resolveInteractiveStyle(c?.border, {
105
+ isDisabled,
106
+ isInvalid,
107
+ isSelected,
108
+ isFocusVisible
109
+ }),
110
+ outline: require_focusRing.focusRingOutline(isFocusVisible)
111
+ };
112
+ };
113
+ /** Label color — invalid dominates disabled dominates default. */
114
+ var resolveRadioLabelColor = ({
115
+ c,
116
+ isInvalid,
117
+ isDisabled
118
+ }) => {
119
+ const text = c?.text;
120
+ if (isInvalid) return text?.invalid;
121
+ if (isDisabled) return text?.disabled;
122
+ return text?.default;
123
+ };
124
+ /**
125
+ * A single radio option — must be used inside a `RadioGroup`.
126
+ *
127
+ * Renders a circular indicator (`data-part="selectionControl"`) with an
128
+ * inner dot (`data-part="indicator"`) when selected. Reads the parent
129
+ * group's `isInvalid` from React Aria's render props and surfaces the
130
+ * `invalid` State on the control.
131
+ *
132
+ * @example
133
+ * ```tsx
134
+ * <Radio value="sm">Small</Radio>
135
+ * ```
136
+ */
137
+ var Radio = ({
138
+ children,
139
+ ...props
140
+ }) => {
141
+ const c = _ttoss_fsl_theme_vars.vars.colors.input.primary;
142
+ return /* @__PURE__ */(0, react_jsx_runtime.jsx)(react_aria_components.Radio, {
143
+ ...props,
144
+ "data-scope": "radio",
145
+ "data-part": "root",
146
+ style: ({
147
+ isDisabled
148
+ }) => {
149
+ return {
150
+ boxSizing: "border-box",
151
+ display: "inline-flex",
152
+ alignItems: "center",
153
+ gap: _ttoss_fsl_theme_vars.vars.spacing.gap.inline.sm,
154
+ minHeight: _ttoss_fsl_theme_vars.vars.sizing.hit.base,
155
+ cursor: isDisabled ? "not-allowed" : "pointer",
156
+ opacity: isDisabled ? _ttoss_fsl_theme_vars.vars.opacity.disabled : void 0,
157
+ ..._ttoss_fsl_theme_vars.vars.text.label.md,
158
+ color: isDisabled ? c?.text?.disabled : c?.text?.default
159
+ };
160
+ },
161
+ children: ({
162
+ isHovered,
163
+ isPressed,
164
+ isDisabled,
165
+ isFocusVisible,
166
+ isSelected,
167
+ isInvalid
168
+ }) => {
169
+ const text = c?.text;
170
+ return /* @__PURE__ */(0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, {
171
+ children: [/* @__PURE__ */(0, react_jsx_runtime.jsx)("span", {
172
+ "data-scope": "radio",
173
+ "data-part": "selectionControl",
174
+ "aria-hidden": true,
175
+ style: buildRadioBoxStyle({
176
+ c,
177
+ isSelected,
178
+ isInvalid,
179
+ isDisabled,
180
+ isHovered,
181
+ isPressed,
182
+ isFocusVisible
183
+ }),
184
+ children: isSelected && /* @__PURE__ */(0, react_jsx_runtime.jsx)("span", {
185
+ "data-scope": "radio",
186
+ "data-part": "indicator",
187
+ "aria-hidden": true,
188
+ style: {
189
+ width: "0.4375rem",
190
+ height: "0.4375rem",
191
+ borderRadius: _ttoss_fsl_theme_vars.vars.radii.round,
192
+ backgroundColor: text?.checked ?? text?.default,
193
+ flexShrink: 0
194
+ }
195
+ })
196
+ }), children != null && /* @__PURE__ */(0, react_jsx_runtime.jsx)("span", {
197
+ "data-scope": "radio",
198
+ "data-part": "label",
199
+ style: {
200
+ color: resolveRadioLabelColor({
201
+ c,
202
+ isInvalid,
203
+ isDisabled
204
+ })
205
+ },
206
+ children
207
+ })]
208
+ });
209
+ }
210
+ });
211
+ };
212
+ Radio.displayName = radioMeta.displayName;
213
+
214
+ //#endregion
215
+ exports.Radio = Radio;
216
+ exports.RadioGroup = RadioGroup;
217
+ exports.radioGroupMeta = radioGroupMeta;
218
+ exports.radioMeta = radioMeta;
@@ -0,0 +1,82 @@
1
+
2
+ import * as React from "react";
3
+ import { RadioGroupProps, RadioProps } from "react-aria-components";
4
+
5
+ //#region src/components/RadioGroup/RadioGroup.d.ts
6
+ /** Formal semantic identity — RadioGroup root (Selection entity, single-choice). */
7
+ declare const radioGroupMeta: {
8
+ readonly displayName: "RadioGroup";
9
+ readonly entity: "Selection";
10
+ readonly structure: "root";
11
+ };
12
+ /** Formal semantic identity — Radio item (Selection entity, selectionControl + label). */
13
+ declare const radioMeta: {
14
+ readonly displayName: "Radio";
15
+ readonly entity: "Selection";
16
+ readonly structure: "selectionControl";
17
+ readonly composition: "selection";
18
+ };
19
+ /**
20
+ * Props for the RadioGroup component.
21
+ */
22
+ interface RadioGroupProps$1 extends Omit<RadioGroupProps, 'style' | 'children'> {
23
+ /** Group label displayed above the radio options. */
24
+ label?: React.ReactNode;
25
+ /** Radio option children — must be `Radio` components. */
26
+ children?: React.ReactNode;
27
+ }
28
+ /**
29
+ * A semantic radio group built on React Aria.
30
+ *
31
+ * Orchestrates a set of mutually exclusive `Radio` options. Validation
32
+ * feedback flows from `isInvalid` (or React Aria's `validate` callback) and
33
+ * surfaces on each Radio via the `invalid` State.
34
+ *
35
+ * Entity = Selection, interaction = `select.single`.
36
+ *
37
+ * @example
38
+ * ```tsx
39
+ * <RadioGroup label="Size" defaultValue="md">
40
+ * <Radio value="sm">Small</Radio>
41
+ * <Radio value="md">Medium</Radio>
42
+ * <Radio value="lg">Large</Radio>
43
+ * </RadioGroup>
44
+ * ```
45
+ */
46
+ declare const RadioGroup: {
47
+ ({
48
+ label,
49
+ children,
50
+ ...props
51
+ }: RadioGroupProps$1): import("react/jsx-runtime").JSX.Element;
52
+ displayName: "RadioGroup";
53
+ };
54
+ /**
55
+ * Props for the Radio component.
56
+ */
57
+ interface RadioProps$1 extends Omit<RadioProps, 'style' | 'children'> {
58
+ /** Label content displayed next to the radio indicator. */
59
+ children?: React.ReactNode;
60
+ }
61
+ /**
62
+ * A single radio option — must be used inside a `RadioGroup`.
63
+ *
64
+ * Renders a circular indicator (`data-part="selectionControl"`) with an
65
+ * inner dot (`data-part="indicator"`) when selected. Reads the parent
66
+ * group's `isInvalid` from React Aria's render props and surfaces the
67
+ * `invalid` State on the control.
68
+ *
69
+ * @example
70
+ * ```tsx
71
+ * <Radio value="sm">Small</Radio>
72
+ * ```
73
+ */
74
+ declare const Radio: {
75
+ ({
76
+ children,
77
+ ...props
78
+ }: RadioProps$1): import("react/jsx-runtime").JSX.Element;
79
+ displayName: "Radio";
80
+ };
81
+ //#endregion
82
+ export { Radio, RadioGroup, RadioGroupProps$1 as RadioGroupProps, RadioProps$1 as RadioProps, radioGroupMeta, radioMeta };