@ttoss/fsl-ui 0.2.4 → 0.2.6

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 (134) hide show
  1. package/README.md +1 -1
  2. package/dist/components/AppShell/AppShell.cjs +124 -0
  3. package/dist/components/AppShell/AppShell.d.cts +74 -0
  4. package/dist/components/AppShell/AppShell.d.mts +74 -0
  5. package/dist/components/AppShell/AppShell.mjs +123 -0
  6. package/dist/components/Badge/Badge.cjs +61 -0
  7. package/dist/components/Badge/Badge.d.cts +56 -0
  8. package/dist/components/Badge/Badge.d.mts +56 -0
  9. package/dist/components/Badge/Badge.mjs +60 -0
  10. package/dist/components/Box/Box.cjs +114 -0
  11. package/dist/components/Box/Box.d.cts +115 -0
  12. package/dist/components/Box/Box.d.mts +115 -0
  13. package/dist/components/Box/Box.mjs +113 -0
  14. package/dist/components/Breadcrumbs/Breadcrumbs.cjs +1 -1
  15. package/dist/components/Breadcrumbs/Breadcrumbs.mjs +1 -1
  16. package/dist/components/Button/Button.cjs +2 -2
  17. package/dist/components/Button/Button.d.cts +2 -1
  18. package/dist/components/Button/Button.d.mts +2 -1
  19. package/dist/components/Button/Button.mjs +2 -2
  20. package/dist/components/Checkbox/Checkbox.cjs +2 -2
  21. package/dist/components/Checkbox/Checkbox.mjs +2 -2
  22. package/dist/components/CheckboxGroup/CheckboxGroup.cjs +1 -1
  23. package/dist/components/CheckboxGroup/CheckboxGroup.mjs +1 -1
  24. package/dist/components/Code/Code.cjs +69 -0
  25. package/dist/components/Code/Code.d.cts +53 -0
  26. package/dist/components/Code/Code.d.mts +53 -0
  27. package/dist/components/Code/Code.mjs +68 -0
  28. package/dist/components/Container/Container.cjs +65 -0
  29. package/dist/components/Container/Container.d.cts +61 -0
  30. package/dist/components/Container/Container.d.mts +61 -0
  31. package/dist/components/Container/Container.mjs +64 -0
  32. package/dist/components/FileTrigger/FileTrigger.cjs +1 -1
  33. package/dist/components/FileTrigger/FileTrigger.mjs +1 -1
  34. package/dist/components/Grid/Grid.cjs +88 -0
  35. package/dist/components/Grid/Grid.d.cts +87 -0
  36. package/dist/components/Grid/Grid.d.mts +87 -0
  37. package/dist/components/Grid/Grid.mjs +87 -0
  38. package/dist/components/GridList/GridList.cjs +2 -2
  39. package/dist/components/GridList/GridList.mjs +2 -2
  40. package/dist/components/Group/Group.cjs +1 -1
  41. package/dist/components/Group/Group.mjs +1 -1
  42. package/dist/components/Heading/Heading.cjs +78 -0
  43. package/dist/components/Heading/Heading.d.cts +63 -0
  44. package/dist/components/Heading/Heading.d.mts +63 -0
  45. package/dist/components/Heading/Heading.mjs +77 -0
  46. package/dist/components/Icon/Icon.cjs +2 -1
  47. package/dist/components/Icon/Icon.d.cts +59 -0
  48. package/dist/components/Icon/Icon.d.mts +59 -0
  49. package/dist/components/Icon/Icon.mjs +1 -1
  50. package/dist/components/Icon/glyphs.cjs +37 -10
  51. package/dist/components/Icon/glyphs.mjs +34 -10
  52. package/dist/components/Icon/intents.cjs +32 -0
  53. package/dist/components/Icon/intents.d.cts +33 -0
  54. package/dist/components/Icon/intents.d.mts +33 -0
  55. package/dist/components/Icon/intents.mjs +32 -0
  56. package/dist/components/Link/Link.cjs +1 -1
  57. package/dist/components/Link/Link.mjs +1 -1
  58. package/dist/components/ListBox/ListBox.cjs +1 -1
  59. package/dist/components/ListBox/ListBox.mjs +1 -1
  60. package/dist/components/Meter/Meter.cjs +11 -1
  61. package/dist/components/Meter/Meter.mjs +11 -1
  62. package/dist/components/NumberField/NumberField.cjs +2 -2
  63. package/dist/components/NumberField/NumberField.mjs +2 -2
  64. package/dist/components/ProgressBar/ProgressBar.cjs +1 -1
  65. package/dist/components/ProgressBar/ProgressBar.mjs +1 -1
  66. package/dist/components/RadioGroup/RadioGroup.cjs +2 -2
  67. package/dist/components/RadioGroup/RadioGroup.mjs +2 -2
  68. package/dist/components/Select/Select.cjs +2 -2
  69. package/dist/components/Select/Select.mjs +2 -2
  70. package/dist/components/Separator/Separator.cjs +1 -1
  71. package/dist/components/Separator/Separator.mjs +1 -1
  72. package/dist/components/Slider/Slider.cjs +1 -1
  73. package/dist/components/Slider/Slider.mjs +1 -1
  74. package/dist/components/Stack/Stack.cjs +89 -0
  75. package/dist/components/Stack/Stack.d.cts +75 -0
  76. package/dist/components/Stack/Stack.d.mts +75 -0
  77. package/dist/components/Stack/Stack.mjs +88 -0
  78. package/dist/components/Surface/Surface.cjs +84 -0
  79. package/dist/components/Surface/Surface.d.cts +72 -0
  80. package/dist/components/Surface/Surface.d.mts +72 -0
  81. package/dist/components/Surface/Surface.mjs +83 -0
  82. package/dist/components/Switch/Switch.cjs +3 -3
  83. package/dist/components/Switch/Switch.d.cts +1 -1
  84. package/dist/components/Switch/Switch.d.mts +1 -1
  85. package/dist/components/Switch/Switch.mjs +3 -3
  86. package/dist/components/Table/Table.cjs +248 -0
  87. package/dist/components/Table/Table.d.cts +128 -0
  88. package/dist/components/Table/Table.d.mts +128 -0
  89. package/dist/components/Table/Table.mjs +239 -0
  90. package/dist/components/Tabs/Tabs.cjs +71 -28
  91. package/dist/components/Tabs/Tabs.d.cts +0 -17
  92. package/dist/components/Tabs/Tabs.d.mts +0 -17
  93. package/dist/components/Tabs/Tabs.mjs +69 -28
  94. package/dist/components/Text/Text.cjs +70 -0
  95. package/dist/components/Text/Text.d.cts +89 -0
  96. package/dist/components/Text/Text.d.mts +89 -0
  97. package/dist/components/Text/Text.mjs +69 -0
  98. package/dist/components/Toast/Toast.cjs +1 -1
  99. package/dist/components/Toast/Toast.mjs +1 -1
  100. package/dist/components/ToggleButton/ToggleButton.cjs +2 -2
  101. package/dist/components/ToggleButton/ToggleButton.mjs +2 -2
  102. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.cjs +1 -1
  103. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.mjs +1 -1
  104. package/dist/components/Toolbar/Toolbar.cjs +1 -1
  105. package/dist/components/Toolbar/Toolbar.mjs +1 -1
  106. package/dist/composites/Accordion/Accordion.cjs +14 -9
  107. package/dist/composites/Accordion/Accordion.mjs +14 -9
  108. package/dist/composites/Dialog/Dialog.cjs +1 -1
  109. package/dist/composites/Dialog/Dialog.mjs +1 -1
  110. package/dist/composites/Disclosure/Disclosure.cjs +14 -9
  111. package/dist/composites/Disclosure/Disclosure.mjs +14 -9
  112. package/dist/composites/Form/Form.cjs +1 -1
  113. package/dist/composites/Form/Form.mjs +1 -1
  114. package/dist/composites/Menu/Menu.cjs +2 -2
  115. package/dist/composites/Menu/Menu.mjs +2 -2
  116. package/dist/composites/Popover/Popover.cjs +1 -1
  117. package/dist/composites/Popover/Popover.mjs +1 -1
  118. package/dist/composites/SearchField/SearchField.cjs +2 -2
  119. package/dist/composites/SearchField/SearchField.mjs +2 -2
  120. package/dist/composites/TagGroup/TagGroup.cjs +2 -2
  121. package/dist/composites/TagGroup/TagGroup.mjs +2 -2
  122. package/dist/composites/TextArea/TextArea.cjs +2 -2
  123. package/dist/composites/TextArea/TextArea.mjs +2 -2
  124. package/dist/composites/TextField/TextField.cjs +2 -2
  125. package/dist/composites/TextField/TextField.mjs +2 -2
  126. package/dist/composites/Tooltip/Tooltip.cjs +1 -1
  127. package/dist/composites/Tooltip/Tooltip.mjs +1 -1
  128. package/dist/index.cjs +46 -0
  129. package/dist/index.d.cts +14 -1
  130. package/dist/index.d.mts +14 -1
  131. package/dist/index.mjs +14 -1
  132. package/llms.txt +51 -8
  133. package/package.json +4 -4
  134. package/src/tokens/CONTRACT.md +28 -10
@@ -1,8 +1,14 @@
1
1
  /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
2
  const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
3
3
  let _iconify_icon_react = require("@iconify-icon/react");
4
+ let _iconify_icons_lucide_arrow_down_wide_narrow_js = require("@iconify/icons-lucide/arrow-down-wide-narrow.js");
5
+ _iconify_icons_lucide_arrow_down_wide_narrow_js = require_runtime.__toESM(_iconify_icons_lucide_arrow_down_wide_narrow_js, 1);
6
+ let _iconify_icons_lucide_arrow_up_narrow_wide_js = require("@iconify/icons-lucide/arrow-up-narrow-wide.js");
7
+ _iconify_icons_lucide_arrow_up_narrow_wide_js = require_runtime.__toESM(_iconify_icons_lucide_arrow_up_narrow_wide_js, 1);
4
8
  let _iconify_icons_lucide_check_js = require("@iconify/icons-lucide/check.js");
5
9
  _iconify_icons_lucide_check_js = require_runtime.__toESM(_iconify_icons_lucide_check_js, 1);
10
+ let _iconify_icons_lucide_check_circle_2_js = require("@iconify/icons-lucide/check-circle-2.js");
11
+ _iconify_icons_lucide_check_circle_2_js = require_runtime.__toESM(_iconify_icons_lucide_check_circle_2_js, 1);
6
12
  let _iconify_icons_lucide_chevron_down_js = require("@iconify/icons-lucide/chevron-down.js");
7
13
  _iconify_icons_lucide_chevron_down_js = require_runtime.__toESM(_iconify_icons_lucide_chevron_down_js, 1);
8
14
  let _iconify_icons_lucide_chevron_right_js = require("@iconify/icons-lucide/chevron-right.js");
@@ -33,18 +39,34 @@ _iconify_icons_lucide_x_js = require_runtime.__toESM(_iconify_icons_lucide_x_js,
33
39
  * @see ../../../CONTRIBUTING.md ADR-005
34
40
  */
35
41
  /**
42
+ * The per-icon lucide modules are CommonJS (`exports.default = data` with
43
+ * `__esModule`). Bundlers disagree on default-import interop: Babel/Jest
44
+ * respect `__esModule` (import = the data), while Node-mode interop
45
+ * (Vite/Rolldown, Node ESM) makes the import the whole `module.exports` —
46
+ * `{ __esModule, default: data }`. Normalize both shapes; without this,
47
+ * `addIcon` receives an invalid payload and rejects it *silently*, every
48
+ * icon falls back to an Iconify API fetch, and no glyph renders in
49
+ * production builds (friction F-012).
50
+ */
51
+ var unwrapGlyph = mod => {
52
+ return "body" in mod ? mod : mod.default;
53
+ };
54
+ /**
36
55
  * The default (Lucide) glyph for every intent. `satisfies Record<…>` makes a
37
56
  * missing intent a compile error — the completeness rule from icon-system.md.
38
57
  */
39
58
  var INTENT_GLYPHS = {
40
- "disclosure.expand": _iconify_icons_lucide_chevron_down_js.default,
41
- "disclosure.collapse": _iconify_icons_lucide_chevron_right_js.default,
42
- "selection.checked": _iconify_icons_lucide_check_js.default,
43
- "selection.indeterminate": _iconify_icons_lucide_minus_js.default,
44
- "action.close": _iconify_icons_lucide_x_js.default,
45
- "action.search": _iconify_icons_lucide_search_js.default,
46
- "action.increment": _iconify_icons_lucide_plus_js.default,
47
- "action.decrement": _iconify_icons_lucide_minus_js.default
59
+ "disclosure.expand": unwrapGlyph(_iconify_icons_lucide_chevron_down_js.default),
60
+ "disclosure.collapse": unwrapGlyph(_iconify_icons_lucide_chevron_right_js.default),
61
+ "selection.checked": unwrapGlyph(_iconify_icons_lucide_check_js.default),
62
+ "selection.indeterminate": unwrapGlyph(_iconify_icons_lucide_minus_js.default),
63
+ "action.close": unwrapGlyph(_iconify_icons_lucide_x_js.default),
64
+ "action.search": unwrapGlyph(_iconify_icons_lucide_search_js.default),
65
+ "action.increment": unwrapGlyph(_iconify_icons_lucide_plus_js.default),
66
+ "action.decrement": unwrapGlyph(_iconify_icons_lucide_minus_js.default),
67
+ "action.sortAscending": unwrapGlyph(_iconify_icons_lucide_arrow_up_narrow_wide_js.default),
68
+ "action.sortDescending": unwrapGlyph(_iconify_icons_lucide_arrow_down_wide_narrow_js.default),
69
+ "status.success": unwrapGlyph(_iconify_icons_lucide_check_circle_2_js.default)
48
70
  };
49
71
  /**
50
72
  * The Iconify registry name for an intent — `fsl-ui:{family}-{intent}`. The
@@ -52,7 +74,9 @@ var INTENT_GLYPHS = {
52
74
  * clobbered by) icons an application registers under bare names.
53
75
  */
54
76
  var iconifyName = intent => {
55
- return `fsl-ui:${intent.replace(".", "-")}`;
77
+ return `fsl-ui:${intent.replace(".", "-").replace(/[A-Z]/g, letter => {
78
+ return `-${letter.toLowerCase()}`;
79
+ })}`;
56
80
  };
57
81
  var registered = false;
58
82
  /**
@@ -63,7 +87,10 @@ var registered = false;
63
87
  */
64
88
  var ensureIconGlyphs = () => {
65
89
  if (registered) return;
66
- for (const [intent, glyph] of Object.entries(INTENT_GLYPHS)) (0, _iconify_icon_react.addIcon)(iconifyName(intent), glyph);
90
+ for (const [intent, glyph] of Object.entries(INTENT_GLYPHS)) {
91
+ const name = iconifyName(intent);
92
+ if (!(0, _iconify_icon_react.addIcon)(name, glyph)) throw new Error(`fsl-ui Icon: failed to register glyph "${name}" for intent "${intent}" — invalid Iconify name or data.`);
93
+ }
67
94
  registered = true;
68
95
  };
69
96
 
@@ -1,6 +1,9 @@
1
1
  /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
2
  import { addIcon } from "@iconify-icon/react";
3
+ import arrowDownWideNarrowGlyph from "@iconify/icons-lucide/arrow-down-wide-narrow.js";
4
+ import arrowUpNarrowWideGlyph from "@iconify/icons-lucide/arrow-up-narrow-wide.js";
3
5
  import checkGlyph from "@iconify/icons-lucide/check.js";
6
+ import checkCircleGlyph from "@iconify/icons-lucide/check-circle-2.js";
4
7
  import chevronDownGlyph from "@iconify/icons-lucide/chevron-down.js";
5
8
  import chevronRightGlyph from "@iconify/icons-lucide/chevron-right.js";
6
9
  import minusGlyph from "@iconify/icons-lucide/minus.js";
@@ -25,18 +28,34 @@ import xGlyph from "@iconify/icons-lucide/x.js";
25
28
  * @see ../../../CONTRIBUTING.md ADR-005
26
29
  */
27
30
  /**
31
+ * The per-icon lucide modules are CommonJS (`exports.default = data` with
32
+ * `__esModule`). Bundlers disagree on default-import interop: Babel/Jest
33
+ * respect `__esModule` (import = the data), while Node-mode interop
34
+ * (Vite/Rolldown, Node ESM) makes the import the whole `module.exports` —
35
+ * `{ __esModule, default: data }`. Normalize both shapes; without this,
36
+ * `addIcon` receives an invalid payload and rejects it *silently*, every
37
+ * icon falls back to an Iconify API fetch, and no glyph renders in
38
+ * production builds (friction F-012).
39
+ */
40
+ var unwrapGlyph = mod => {
41
+ return "body" in mod ? mod : mod.default;
42
+ };
43
+ /**
28
44
  * The default (Lucide) glyph for every intent. `satisfies Record<…>` makes a
29
45
  * missing intent a compile error — the completeness rule from icon-system.md.
30
46
  */
31
47
  var INTENT_GLYPHS = {
32
- "disclosure.expand": chevronDownGlyph,
33
- "disclosure.collapse": chevronRightGlyph,
34
- "selection.checked": checkGlyph,
35
- "selection.indeterminate": minusGlyph,
36
- "action.close": xGlyph,
37
- "action.search": searchGlyph,
38
- "action.increment": plusGlyph,
39
- "action.decrement": minusGlyph
48
+ "disclosure.expand": unwrapGlyph(chevronDownGlyph),
49
+ "disclosure.collapse": unwrapGlyph(chevronRightGlyph),
50
+ "selection.checked": unwrapGlyph(checkGlyph),
51
+ "selection.indeterminate": unwrapGlyph(minusGlyph),
52
+ "action.close": unwrapGlyph(xGlyph),
53
+ "action.search": unwrapGlyph(searchGlyph),
54
+ "action.increment": unwrapGlyph(plusGlyph),
55
+ "action.decrement": unwrapGlyph(minusGlyph),
56
+ "action.sortAscending": unwrapGlyph(arrowUpNarrowWideGlyph),
57
+ "action.sortDescending": unwrapGlyph(arrowDownWideNarrowGlyph),
58
+ "status.success": unwrapGlyph(checkCircleGlyph)
40
59
  };
41
60
  /**
42
61
  * The Iconify registry name for an intent — `fsl-ui:{family}-{intent}`. The
@@ -44,7 +63,9 @@ var INTENT_GLYPHS = {
44
63
  * clobbered by) icons an application registers under bare names.
45
64
  */
46
65
  var iconifyName = intent => {
47
- return `fsl-ui:${intent.replace(".", "-")}`;
66
+ return `fsl-ui:${intent.replace(".", "-").replace(/[A-Z]/g, letter => {
67
+ return `-${letter.toLowerCase()}`;
68
+ })}`;
48
69
  };
49
70
  var registered = false;
50
71
  /**
@@ -55,7 +76,10 @@ var registered = false;
55
76
  */
56
77
  var ensureIconGlyphs = () => {
57
78
  if (registered) return;
58
- for (const [intent, glyph] of Object.entries(INTENT_GLYPHS)) addIcon(iconifyName(intent), glyph);
79
+ for (const [intent, glyph] of Object.entries(INTENT_GLYPHS)) {
80
+ const name = iconifyName(intent);
81
+ if (!addIcon(name, glyph)) throw new Error(`fsl-ui Icon: failed to register glyph "${name}" for intent "${intent}" — invalid Iconify name or data.`);
82
+ }
59
83
  registered = true;
60
84
  };
61
85
 
@@ -0,0 +1,32 @@
1
+ /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
+ //#region src/components/Icon/intents.ts
3
+ /**
4
+ * Icon semantic layer — the intent vocabulary.
5
+ *
6
+ * This is the provider-agnostic contract described by
7
+ * `docs/design/design-system/components/icon-system.md`: an Icon is named by
8
+ * **what it means** (`icon.{family}.{intent}`), never by which glyph or which
9
+ * icon library renders it. The theme (here: the default Lucide mapping in
10
+ * `glyphs.ts`) decides the glyph; this file decides the meanings.
11
+ *
12
+ * Scope (ROADMAP B1): this is intentionally a **subset** of the canonical
13
+ * registry — only the intents that shipped components actually consume today.
14
+ * The registry "grows slowly and shrinks never" (icon-system.md § Change
15
+ * Rules): add an intent here (and its glyph in `glyphs.ts`) when a new
16
+ * component needs one, never speculatively.
17
+ *
18
+ * This module is the seed of the future standalone `@ttoss/fsl-icon` package;
19
+ * it stays free of React and token imports so it can be lifted out whole.
20
+ *
21
+ * @see ../../../CONTRIBUTING.md ADR-005 — Iconify provider + internal intent layer
22
+ * @see docs/design/design-system/components/icon-system.md — full contract
23
+ */
24
+ /**
25
+ * The intents currently backed by a glyph, grouped by family. Values are the
26
+ * canonical `{family}.{intent}` identifiers. Adding a member here is a
27
+ * type-level requirement to add its glyph in `INTENT_GLYPHS` (`glyphs.ts`).
28
+ */
29
+ var ICON_INTENTS = ["disclosure.expand", "disclosure.collapse", "selection.checked", "selection.indeterminate", "action.close", "action.search", "action.increment", "action.decrement", "action.sortAscending", "action.sortDescending", "status.success"];
30
+
31
+ //#endregion
32
+ exports.ICON_INTENTS = ICON_INTENTS;
@@ -0,0 +1,33 @@
1
+
2
+ //#region src/components/Icon/intents.d.ts
3
+ /**
4
+ * Icon semantic layer — the intent vocabulary.
5
+ *
6
+ * This is the provider-agnostic contract described by
7
+ * `docs/design/design-system/components/icon-system.md`: an Icon is named by
8
+ * **what it means** (`icon.{family}.{intent}`), never by which glyph or which
9
+ * icon library renders it. The theme (here: the default Lucide mapping in
10
+ * `glyphs.ts`) decides the glyph; this file decides the meanings.
11
+ *
12
+ * Scope (ROADMAP B1): this is intentionally a **subset** of the canonical
13
+ * registry — only the intents that shipped components actually consume today.
14
+ * The registry "grows slowly and shrinks never" (icon-system.md § Change
15
+ * Rules): add an intent here (and its glyph in `glyphs.ts`) when a new
16
+ * component needs one, never speculatively.
17
+ *
18
+ * This module is the seed of the future standalone `@ttoss/fsl-icon` package;
19
+ * it stays free of React and token imports so it can be lifted out whole.
20
+ *
21
+ * @see ../../../CONTRIBUTING.md ADR-005 — Iconify provider + internal intent layer
22
+ * @see docs/design/design-system/components/icon-system.md — full contract
23
+ */
24
+ /**
25
+ * The intents currently backed by a glyph, grouped by family. Values are the
26
+ * canonical `{family}.{intent}` identifiers. Adding a member here is a
27
+ * type-level requirement to add its glyph in `INTENT_GLYPHS` (`glyphs.ts`).
28
+ */
29
+ declare const ICON_INTENTS: readonly ["disclosure.expand", "disclosure.collapse", "selection.checked", "selection.indeterminate", "action.close", "action.search", "action.increment", "action.decrement", "action.sortAscending", "action.sortDescending", "status.success"];
30
+ /** A semantic icon intent — the public "name" of an icon. */
31
+ type IconIntent = (typeof ICON_INTENTS)[number];
32
+ //#endregion
33
+ export { ICON_INTENTS, IconIntent };
@@ -0,0 +1,33 @@
1
+
2
+ //#region src/components/Icon/intents.d.ts
3
+ /**
4
+ * Icon semantic layer — the intent vocabulary.
5
+ *
6
+ * This is the provider-agnostic contract described by
7
+ * `docs/design/design-system/components/icon-system.md`: an Icon is named by
8
+ * **what it means** (`icon.{family}.{intent}`), never by which glyph or which
9
+ * icon library renders it. The theme (here: the default Lucide mapping in
10
+ * `glyphs.ts`) decides the glyph; this file decides the meanings.
11
+ *
12
+ * Scope (ROADMAP B1): this is intentionally a **subset** of the canonical
13
+ * registry — only the intents that shipped components actually consume today.
14
+ * The registry "grows slowly and shrinks never" (icon-system.md § Change
15
+ * Rules): add an intent here (and its glyph in `glyphs.ts`) when a new
16
+ * component needs one, never speculatively.
17
+ *
18
+ * This module is the seed of the future standalone `@ttoss/fsl-icon` package;
19
+ * it stays free of React and token imports so it can be lifted out whole.
20
+ *
21
+ * @see ../../../CONTRIBUTING.md ADR-005 — Iconify provider + internal intent layer
22
+ * @see docs/design/design-system/components/icon-system.md — full contract
23
+ */
24
+ /**
25
+ * The intents currently backed by a glyph, grouped by family. Values are the
26
+ * canonical `{family}.{intent}` identifiers. Adding a member here is a
27
+ * type-level requirement to add its glyph in `INTENT_GLYPHS` (`glyphs.ts`).
28
+ */
29
+ declare const ICON_INTENTS: readonly ["disclosure.expand", "disclosure.collapse", "selection.checked", "selection.indeterminate", "action.close", "action.search", "action.increment", "action.decrement", "action.sortAscending", "action.sortDescending", "status.success"];
30
+ /** A semantic icon intent — the public "name" of an icon. */
31
+ type IconIntent = (typeof ICON_INTENTS)[number];
32
+ //#endregion
33
+ export { ICON_INTENTS, IconIntent };
@@ -0,0 +1,32 @@
1
+ /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
+ //#region src/components/Icon/intents.ts
3
+ /**
4
+ * Icon semantic layer — the intent vocabulary.
5
+ *
6
+ * This is the provider-agnostic contract described by
7
+ * `docs/design/design-system/components/icon-system.md`: an Icon is named by
8
+ * **what it means** (`icon.{family}.{intent}`), never by which glyph or which
9
+ * icon library renders it. The theme (here: the default Lucide mapping in
10
+ * `glyphs.ts`) decides the glyph; this file decides the meanings.
11
+ *
12
+ * Scope (ROADMAP B1): this is intentionally a **subset** of the canonical
13
+ * registry — only the intents that shipped components actually consume today.
14
+ * The registry "grows slowly and shrinks never" (icon-system.md § Change
15
+ * Rules): add an intent here (and its glyph in `glyphs.ts`) when a new
16
+ * component needs one, never speculatively.
17
+ *
18
+ * This module is the seed of the future standalone `@ttoss/fsl-icon` package;
19
+ * it stays free of React and token imports so it can be lifted out whole.
20
+ *
21
+ * @see ../../../CONTRIBUTING.md ADR-005 — Iconify provider + internal intent layer
22
+ * @see docs/design/design-system/components/icon-system.md — full contract
23
+ */
24
+ /**
25
+ * The intents currently backed by a glyph, grouped by family. Values are the
26
+ * canonical `{family}.{intent}` identifiers. Adding a member here is a
27
+ * type-level requirement to add its glyph in `INTENT_GLYPHS` (`glyphs.ts`).
28
+ */
29
+ var ICON_INTENTS = ["disclosure.expand", "disclosure.collapse", "selection.checked", "selection.indeterminate", "action.close", "action.search", "action.increment", "action.decrement", "action.sortAscending", "action.sortDescending", "status.success"];
30
+
31
+ //#endregion
32
+ export { ICON_INTENTS };
@@ -2,8 +2,8 @@
2
2
  const require_focusRing = require('../../tokens/focusRing.cjs');
3
3
  const require_resolveInteractiveStyle = require('../../tokens/resolveInteractiveStyle.cjs');
4
4
  let _ttoss_fsl_theme_vars = require("@ttoss/fsl-theme/vars");
5
- let react_aria_components = require("react-aria-components");
6
5
  let react_jsx_runtime = require("react/jsx-runtime");
6
+ let react_aria_components = require("react-aria-components");
7
7
 
8
8
  //#region src/components/Link/Link.tsx
9
9
  /**
@@ -2,8 +2,8 @@
2
2
  import { focusRingOutline } from "../../tokens/focusRing.mjs";
3
3
  import { resolveInteractiveStyle } from "../../tokens/resolveInteractiveStyle.mjs";
4
4
  import { vars } from "@ttoss/fsl-theme/vars";
5
- import { Link } from "react-aria-components";
6
5
  import { jsx } from "react/jsx-runtime";
6
+ import { Link } from "react-aria-components";
7
7
 
8
8
  //#region src/components/Link/Link.tsx
9
9
  /**
@@ -2,8 +2,8 @@
2
2
  const require_focusRing = require('../../tokens/focusRing.cjs');
3
3
  const require_resolveInteractiveStyle = require('../../tokens/resolveInteractiveStyle.cjs');
4
4
  let _ttoss_fsl_theme_vars = require("@ttoss/fsl-theme/vars");
5
- let react_aria_components = require("react-aria-components");
6
5
  let react_jsx_runtime = require("react/jsx-runtime");
6
+ let react_aria_components = require("react-aria-components");
7
7
 
8
8
  //#region src/components/ListBox/ListBox.tsx
9
9
  /** Formal semantic identity — ListBox root (Collection entity, surface). */
@@ -2,8 +2,8 @@
2
2
  import { focusRingOutline } from "../../tokens/focusRing.mjs";
3
3
  import { resolveInteractiveStyle } from "../../tokens/resolveInteractiveStyle.mjs";
4
4
  import { vars } from "@ttoss/fsl-theme/vars";
5
- import { ListBox, ListBoxItem } from "react-aria-components";
6
5
  import { jsx } from "react/jsx-runtime";
6
+ import { ListBox, ListBoxItem } from "react-aria-components";
7
7
 
8
8
  //#region src/components/ListBox/ListBox.tsx
9
9
  /** Formal semantic identity — ListBox root (Collection entity, surface). */
@@ -1,7 +1,7 @@
1
1
  /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
2
  let _ttoss_fsl_theme_vars = require("@ttoss/fsl-theme/vars");
3
- let react_aria_components = require("react-aria-components");
4
3
  let react_jsx_runtime = require("react/jsx-runtime");
4
+ let react_aria_components = require("react-aria-components");
5
5
 
6
6
  //#region src/components/Meter/Meter.tsx
7
7
  /** Formal semantic identity — Meter root (Feedback entity). */
@@ -89,17 +89,27 @@ var Meter = ({
89
89
  display: "flex",
90
90
  justifyContent: "space-between",
91
91
  alignItems: "baseline",
92
+ gap: _ttoss_fsl_theme_vars.vars.spacing.gap.inline.sm,
92
93
  color: c?.text?.default,
93
94
  ..._ttoss_fsl_theme_vars.vars.text.label.md
94
95
  },
95
96
  children: [/* @__PURE__ */(0, react_jsx_runtime.jsx)("span", {
96
97
  "data-scope": "meter",
97
98
  "data-part": "title",
99
+ style: {
100
+ minInlineSize: 0,
101
+ overflow: "hidden",
102
+ textOverflow: "ellipsis",
103
+ whiteSpace: "nowrap"
104
+ },
98
105
  children: label
99
106
  }), showValueLabel && /* @__PURE__ */(0, react_jsx_runtime.jsx)("span", {
100
107
  "data-scope": "meter",
101
108
  "data-part": "status",
102
109
  "aria-hidden": true,
110
+ style: {
111
+ flex: "none"
112
+ },
103
113
  children: valueText ?? `${Math.round(percentage)}%`
104
114
  })]
105
115
  }), /* @__PURE__ */(0, react_jsx_runtime.jsx)("div", {
@@ -1,7 +1,7 @@
1
1
  /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
2
  import { vars } from "@ttoss/fsl-theme/vars";
3
- import { Meter } from "react-aria-components";
4
3
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
+ import { Meter } from "react-aria-components";
5
5
 
6
6
  //#region src/components/Meter/Meter.tsx
7
7
  /** Formal semantic identity — Meter root (Feedback entity). */
@@ -89,17 +89,27 @@ var Meter$1 = ({
89
89
  display: "flex",
90
90
  justifyContent: "space-between",
91
91
  alignItems: "baseline",
92
+ gap: vars.spacing.gap.inline.sm,
92
93
  color: c?.text?.default,
93
94
  ...vars.text.label.md
94
95
  },
95
96
  children: [/* @__PURE__ */jsx("span", {
96
97
  "data-scope": "meter",
97
98
  "data-part": "title",
99
+ style: {
100
+ minInlineSize: 0,
101
+ overflow: "hidden",
102
+ textOverflow: "ellipsis",
103
+ whiteSpace: "nowrap"
104
+ },
98
105
  children: label
99
106
  }), showValueLabel && /* @__PURE__ */jsx("span", {
100
107
  "data-scope": "meter",
101
108
  "data-part": "status",
102
109
  "aria-hidden": true,
110
+ style: {
111
+ flex: "none"
112
+ },
103
113
  children: valueText ?? `${Math.round(percentage)}%`
104
114
  })]
105
115
  }), /* @__PURE__ */jsx("div", {
@@ -3,8 +3,8 @@ const require_focusRing = require('../../tokens/focusRing.cjs');
3
3
  const require_resolveInteractiveStyle = require('../../tokens/resolveInteractiveStyle.cjs');
4
4
  const require_Icon = require('../Icon/Icon.cjs');
5
5
  let _ttoss_fsl_theme_vars = require("@ttoss/fsl-theme/vars");
6
- let react_aria_components = require("react-aria-components");
7
6
  let react_jsx_runtime = require("react/jsx-runtime");
7
+ let react_aria_components = require("react-aria-components");
8
8
 
9
9
  //#region src/components/NumberField/NumberField.tsx
10
10
  /** Formal semantic identity — NumberField root (Input entity). */
@@ -24,7 +24,7 @@ var buildControlBoxStyle = ({
24
24
  boxSizing: "border-box",
25
25
  display: "inline-flex",
26
26
  alignItems: "center",
27
- minHeight: _ttoss_fsl_theme_vars.vars.sizing.hit.base,
27
+ minHeight: _ttoss_fsl_theme_vars.vars.sizing.hit,
28
28
  borderRadius: _ttoss_fsl_theme_vars.vars.radii.control,
29
29
  borderWidth: _ttoss_fsl_theme_vars.vars.border.outline.control.width,
30
30
  borderStyle: _ttoss_fsl_theme_vars.vars.border.outline.control.style,
@@ -3,8 +3,8 @@ import { focusRingOutline } from "../../tokens/focusRing.mjs";
3
3
  import { resolveInteractiveStyle } from "../../tokens/resolveInteractiveStyle.mjs";
4
4
  import { Icon } from "../Icon/Icon.mjs";
5
5
  import { vars } from "@ttoss/fsl-theme/vars";
6
- import { Button, FieldError, Group, Input, Label, NumberField, Text } from "react-aria-components";
7
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { Button, FieldError, Group, Input, Label, NumberField, Text } from "react-aria-components";
8
8
 
9
9
  //#region src/components/NumberField/NumberField.tsx
10
10
  /** Formal semantic identity — NumberField root (Input entity). */
@@ -24,7 +24,7 @@ var buildControlBoxStyle = ({
24
24
  boxSizing: "border-box",
25
25
  display: "inline-flex",
26
26
  alignItems: "center",
27
- minHeight: vars.sizing.hit.base,
27
+ minHeight: vars.sizing.hit,
28
28
  borderRadius: vars.radii.control,
29
29
  borderWidth: vars.border.outline.control.width,
30
30
  borderStyle: vars.border.outline.control.style,
@@ -2,8 +2,8 @@
2
2
  const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
3
3
  const require_keyframes = require('../../tokens/keyframes.cjs');
4
4
  let _ttoss_fsl_theme_vars = require("@ttoss/fsl-theme/vars");
5
- let react_aria_components = require("react-aria-components");
6
5
  let react_jsx_runtime = require("react/jsx-runtime");
6
+ let react_aria_components = require("react-aria-components");
7
7
  let react = require("react");
8
8
  react = require_runtime.__toESM(react);
9
9
 
@@ -1,8 +1,8 @@
1
1
  /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
2
  import { ANIMATION_NAMES, ensureKeyframes } from "../../tokens/keyframes.mjs";
3
3
  import { vars } from "@ttoss/fsl-theme/vars";
4
- import { ProgressBar } from "react-aria-components";
5
4
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
+ import { ProgressBar } from "react-aria-components";
6
6
  import * as React from "react";
7
7
 
8
8
  //#region src/components/ProgressBar/ProgressBar.tsx
@@ -2,8 +2,8 @@
2
2
  const require_focusRing = require('../../tokens/focusRing.cjs');
3
3
  const require_resolveInteractiveStyle = require('../../tokens/resolveInteractiveStyle.cjs');
4
4
  let _ttoss_fsl_theme_vars = require("@ttoss/fsl-theme/vars");
5
- let react_aria_components = require("react-aria-components");
6
5
  let react_jsx_runtime = require("react/jsx-runtime");
6
+ let react_aria_components = require("react-aria-components");
7
7
 
8
8
  //#region src/components/RadioGroup/RadioGroup.tsx
9
9
  /** Formal semantic identity — RadioGroup root (Selection entity, single-choice). */
@@ -151,7 +151,7 @@ var Radio = ({
151
151
  display: "inline-flex",
152
152
  alignItems: "center",
153
153
  gap: _ttoss_fsl_theme_vars.vars.spacing.gap.inline.sm,
154
- minHeight: _ttoss_fsl_theme_vars.vars.sizing.hit.base,
154
+ minHeight: _ttoss_fsl_theme_vars.vars.sizing.hit,
155
155
  cursor: isDisabled ? "not-allowed" : "pointer",
156
156
  opacity: isDisabled ? _ttoss_fsl_theme_vars.vars.opacity.disabled : void 0,
157
157
  ..._ttoss_fsl_theme_vars.vars.text.label.md,
@@ -2,8 +2,8 @@
2
2
  import { focusRingOutline } from "../../tokens/focusRing.mjs";
3
3
  import { resolveInteractiveStyle } from "../../tokens/resolveInteractiveStyle.mjs";
4
4
  import { vars } from "@ttoss/fsl-theme/vars";
5
- import { Label, Radio, RadioGroup } from "react-aria-components";
6
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ import { Label, Radio, RadioGroup } from "react-aria-components";
7
7
 
8
8
  //#region src/components/RadioGroup/RadioGroup.tsx
9
9
  /** Formal semantic identity — RadioGroup root (Selection entity, single-choice). */
@@ -151,7 +151,7 @@ var Radio$1 = ({
151
151
  display: "inline-flex",
152
152
  alignItems: "center",
153
153
  gap: vars.spacing.gap.inline.sm,
154
- minHeight: vars.sizing.hit.base,
154
+ minHeight: vars.sizing.hit,
155
155
  cursor: isDisabled ? "not-allowed" : "pointer",
156
156
  opacity: isDisabled ? vars.opacity.disabled : void 0,
157
157
  ...vars.text.label.md,
@@ -3,8 +3,8 @@ const require_focusRing = require('../../tokens/focusRing.cjs');
3
3
  const require_resolveInteractiveStyle = require('../../tokens/resolveInteractiveStyle.cjs');
4
4
  const require_Icon = require('../Icon/Icon.cjs');
5
5
  let _ttoss_fsl_theme_vars = require("@ttoss/fsl-theme/vars");
6
- let react_aria_components = require("react-aria-components");
7
6
  let react_jsx_runtime = require("react/jsx-runtime");
7
+ let react_aria_components = require("react-aria-components");
8
8
 
9
9
  //#region src/components/Select/Select.tsx
10
10
  var selectMeta = {
@@ -104,7 +104,7 @@ var Select = ({
104
104
  alignItems: "center",
105
105
  justifyContent: "space-between",
106
106
  gap: _ttoss_fsl_theme_vars.vars.spacing.gap.inline.sm,
107
- minHeight: _ttoss_fsl_theme_vars.vars.sizing.hit.base,
107
+ minHeight: _ttoss_fsl_theme_vars.vars.sizing.hit,
108
108
  paddingBlock: _ttoss_fsl_theme_vars.vars.spacing.inset.control.md,
109
109
  paddingInline: _ttoss_fsl_theme_vars.vars.spacing.inset.control.md,
110
110
  borderRadius: _ttoss_fsl_theme_vars.vars.radii.control,
@@ -3,8 +3,8 @@ import { focusRingOutline } from "../../tokens/focusRing.mjs";
3
3
  import { resolveInteractiveStyle } from "../../tokens/resolveInteractiveStyle.mjs";
4
4
  import { Icon } from "../Icon/Icon.mjs";
5
5
  import { vars } from "@ttoss/fsl-theme/vars";
6
- import { Button, Label, ListBox, ListBoxItem, Popover, Select, SelectValue } from "react-aria-components";
7
6
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
+ import { Button, Label, ListBox, ListBoxItem, Popover, Select, SelectValue } from "react-aria-components";
8
8
 
9
9
  //#region src/components/Select/Select.tsx
10
10
  var selectMeta = {
@@ -104,7 +104,7 @@ var Select$1 = ({
104
104
  alignItems: "center",
105
105
  justifyContent: "space-between",
106
106
  gap: vars.spacing.gap.inline.sm,
107
- minHeight: vars.sizing.hit.base,
107
+ minHeight: vars.sizing.hit,
108
108
  paddingBlock: vars.spacing.inset.control.md,
109
109
  paddingInline: vars.spacing.inset.control.md,
110
110
  borderRadius: vars.radii.control,
@@ -1,7 +1,7 @@
1
1
  /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
2
  let _ttoss_fsl_theme_vars = require("@ttoss/fsl-theme/vars");
3
- let react_aria_components = require("react-aria-components");
4
3
  let react_jsx_runtime = require("react/jsx-runtime");
4
+ let react_aria_components = require("react-aria-components");
5
5
 
6
6
  //#region src/components/Separator/Separator.tsx
7
7
  /** Formal semantic identity — Separator root (Structure entity, divider). */
@@ -1,7 +1,7 @@
1
1
  /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
2
  import { vars } from "@ttoss/fsl-theme/vars";
3
- import { Separator } from "react-aria-components";
4
3
  import { jsx } from "react/jsx-runtime";
4
+ import { Separator } from "react-aria-components";
5
5
 
6
6
  //#region src/components/Separator/Separator.tsx
7
7
  /** Formal semantic identity — Separator root (Structure entity, divider). */
@@ -1,8 +1,8 @@
1
1
  /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
2
  const require_focusRing = require('../../tokens/focusRing.cjs');
3
3
  let _ttoss_fsl_theme_vars = require("@ttoss/fsl-theme/vars");
4
- let react_aria_components = require("react-aria-components");
5
4
  let react_jsx_runtime = require("react/jsx-runtime");
5
+ let react_aria_components = require("react-aria-components");
6
6
 
7
7
  //#region src/components/Slider/Slider.tsx
8
8
  /** Formal semantic identity — Slider root (Input entity). */
@@ -1,8 +1,8 @@
1
1
  /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
2
  import { focusRingOutline } from "../../tokens/focusRing.mjs";
3
3
  import { vars } from "@ttoss/fsl-theme/vars";
4
- import { Label, Slider, SliderOutput, SliderThumb, SliderTrack } from "react-aria-components";
5
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { Label, Slider, SliderOutput, SliderThumb, SliderTrack } from "react-aria-components";
6
6
 
7
7
  //#region src/components/Slider/Slider.tsx
8
8
  /** Formal semantic identity — Slider root (Input entity). */