@revikornmann/muka-ui 0.18.0 → 0.20.0

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 (195) hide show
  1. package/README.md +81 -60
  2. package/cli/bin/muka-ui.js +12 -5
  3. package/cli/commands/brand.js +33 -14
  4. package/cli/commands/init.js +21 -17
  5. package/cli/commands/install-skill.js +84 -26
  6. package/cli/templates/AGENTS.md +128 -0
  7. package/cli/templates/CLAUDE.md +8 -88
  8. package/cli/templates/muka-ui-guidelines.md +50 -14
  9. package/dist/cjs/components/ActionSheet/ActionSheet.css +4 -4
  10. package/dist/cjs/components/BottomBar/BottomBar.css +0 -3
  11. package/dist/cjs/components/Breadcrumb/Breadcrumb.css +26 -2
  12. package/dist/cjs/components/Combobox/Combobox.css +116 -132
  13. package/dist/cjs/components/Combobox/Combobox.js +175 -52
  14. package/dist/cjs/components/Combobox/Combobox.js.map +1 -1
  15. package/dist/cjs/components/Combobox/index.js.map +1 -1
  16. package/dist/cjs/components/ContextSelect/ContextSelect.css +4 -4
  17. package/dist/cjs/components/DocumentViewer/DocumentViewer.css +2 -2
  18. package/dist/cjs/components/DropdownSelect/DropdownSelect.css +225 -0
  19. package/dist/cjs/components/DropdownSelect/DropdownSelect.js +106 -0
  20. package/dist/cjs/components/DropdownSelect/DropdownSelect.js.map +1 -0
  21. package/dist/cjs/components/DropdownSelect/index.js +6 -0
  22. package/dist/cjs/components/DropdownSelect/index.js.map +1 -0
  23. package/dist/cjs/components/EmptyState/EmptyState.css +8 -8
  24. package/dist/cjs/components/FAB/FAB.css +1 -1
  25. package/dist/cjs/components/FileUpload/FileUpload.css +10 -10
  26. package/dist/cjs/components/Icon/custom/ArrowReturnIcon.js +11 -0
  27. package/dist/cjs/components/Icon/custom/ArrowReturnIcon.js.map +1 -0
  28. package/dist/cjs/components/Icon/iconRegistry.js +14 -1
  29. package/dist/cjs/components/Icon/iconRegistry.js.map +1 -1
  30. package/dist/cjs/components/Input/Input.css +47 -10
  31. package/dist/cjs/components/Input/Input.js +14 -3
  32. package/dist/cjs/components/Input/Input.js.map +1 -1
  33. package/dist/cjs/components/Label/Label.css +1 -1
  34. package/dist/cjs/components/LicensePlateInput/LicensePlateInput.css +1 -1
  35. package/dist/cjs/components/Menu/Menu.css +124 -38
  36. package/dist/cjs/components/Menu/Menu.js +283 -25
  37. package/dist/cjs/components/Menu/Menu.js.map +1 -1
  38. package/dist/cjs/components/Pagination/Pagination.css +15 -15
  39. package/dist/cjs/components/PhotoUploader/PhotoUploader.css +4 -4
  40. package/dist/cjs/components/ProgressAccordeon/ProgressAccordeon.css +10 -6
  41. package/dist/cjs/components/ProgressAccordeon/ProgressAccordeon.js +27 -16
  42. package/dist/cjs/components/ProgressAccordeon/ProgressAccordeon.js.map +1 -1
  43. package/dist/cjs/components/ProgressTracker/ProgressTracker.css +273 -22
  44. package/dist/cjs/components/ProgressTracker/ProgressTracker.js +109 -9
  45. package/dist/cjs/components/ProgressTracker/ProgressTracker.js.map +1 -1
  46. package/dist/cjs/components/Scrollbar/Scrollbar.css +7 -6
  47. package/dist/cjs/components/SearchInput/SearchInput.css +4 -4
  48. package/dist/cjs/components/Select/Select.css +2 -2
  49. package/dist/cjs/components/SmsOtpField/SmsOtpField.css +2 -2
  50. package/dist/cjs/components/SpecList/SpecList.css +8 -8
  51. package/dist/cjs/components/Spinner/Spinner.css +1 -1
  52. package/dist/cjs/components/SwipeActions/SwipeActions.css +6 -6
  53. package/dist/cjs/components/Table/Table.css +3 -3
  54. package/dist/cjs/components/Table/TablePagination.css +1 -1
  55. package/dist/cjs/components/Tabs/Tabs.css +6 -6
  56. package/dist/cjs/components/Textarea/Textarea.css +2 -2
  57. package/dist/cjs/components/Waveform/Waveform.css +1 -1
  58. package/dist/cjs/components/index.js +5 -3
  59. package/dist/cjs/components/index.js.map +1 -1
  60. package/dist/esm/components/ActionSheet/ActionSheet.css +4 -4
  61. package/dist/esm/components/BottomBar/BottomBar.css +0 -3
  62. package/dist/esm/components/Breadcrumb/Breadcrumb.css +26 -2
  63. package/dist/esm/components/Combobox/Combobox.css +116 -132
  64. package/dist/esm/components/Combobox/Combobox.js +177 -54
  65. package/dist/esm/components/Combobox/Combobox.js.map +1 -1
  66. package/dist/esm/components/Combobox/index.js +1 -1
  67. package/dist/esm/components/Combobox/index.js.map +1 -1
  68. package/dist/esm/components/ContextSelect/ContextSelect.css +4 -4
  69. package/dist/esm/components/DocumentViewer/DocumentViewer.css +2 -2
  70. package/dist/esm/components/DropdownSelect/DropdownSelect.css +225 -0
  71. package/dist/esm/components/DropdownSelect/DropdownSelect.js +102 -0
  72. package/dist/esm/components/DropdownSelect/DropdownSelect.js.map +1 -0
  73. package/dist/esm/components/DropdownSelect/index.js +2 -0
  74. package/dist/esm/components/DropdownSelect/index.js.map +1 -0
  75. package/dist/esm/components/EmptyState/EmptyState.css +8 -8
  76. package/dist/esm/components/FAB/FAB.css +1 -1
  77. package/dist/esm/components/FileUpload/FileUpload.css +10 -10
  78. package/dist/esm/components/Icon/custom/ArrowReturnIcon.js +7 -0
  79. package/dist/esm/components/Icon/custom/ArrowReturnIcon.js.map +1 -0
  80. package/dist/esm/components/Icon/iconRegistry.js +14 -1
  81. package/dist/esm/components/Icon/iconRegistry.js.map +1 -1
  82. package/dist/esm/components/Input/Input.css +47 -10
  83. package/dist/esm/components/Input/Input.js +14 -3
  84. package/dist/esm/components/Input/Input.js.map +1 -1
  85. package/dist/esm/components/Label/Label.css +1 -1
  86. package/dist/esm/components/LicensePlateInput/LicensePlateInput.css +1 -1
  87. package/dist/esm/components/Menu/Menu.css +124 -38
  88. package/dist/esm/components/Menu/Menu.js +284 -26
  89. package/dist/esm/components/Menu/Menu.js.map +1 -1
  90. package/dist/esm/components/Pagination/Pagination.css +15 -15
  91. package/dist/esm/components/PhotoUploader/PhotoUploader.css +4 -4
  92. package/dist/esm/components/ProgressAccordeon/ProgressAccordeon.css +10 -6
  93. package/dist/esm/components/ProgressAccordeon/ProgressAccordeon.js +27 -16
  94. package/dist/esm/components/ProgressAccordeon/ProgressAccordeon.js.map +1 -1
  95. package/dist/esm/components/ProgressTracker/ProgressTracker.css +273 -22
  96. package/dist/esm/components/ProgressTracker/ProgressTracker.js +110 -10
  97. package/dist/esm/components/ProgressTracker/ProgressTracker.js.map +1 -1
  98. package/dist/esm/components/Scrollbar/Scrollbar.css +7 -6
  99. package/dist/esm/components/SearchInput/SearchInput.css +4 -4
  100. package/dist/esm/components/Select/Select.css +2 -2
  101. package/dist/esm/components/SmsOtpField/SmsOtpField.css +2 -2
  102. package/dist/esm/components/SpecList/SpecList.css +8 -8
  103. package/dist/esm/components/Spinner/Spinner.css +1 -1
  104. package/dist/esm/components/SwipeActions/SwipeActions.css +6 -6
  105. package/dist/esm/components/Table/Table.css +3 -3
  106. package/dist/esm/components/Table/TablePagination.css +1 -1
  107. package/dist/esm/components/Tabs/Tabs.css +6 -6
  108. package/dist/esm/components/Textarea/Textarea.css +2 -2
  109. package/dist/esm/components/Waveform/Waveform.css +1 -1
  110. package/dist/esm/components/index.js +1 -0
  111. package/dist/esm/components/index.js.map +1 -1
  112. package/dist/styles/components/ActionSheet.css +4 -4
  113. package/dist/styles/components/BottomBar.css +0 -3
  114. package/dist/styles/components/Breadcrumb.css +26 -2
  115. package/dist/styles/components/Combobox.css +116 -132
  116. package/dist/styles/components/ContextSelect.css +4 -4
  117. package/dist/styles/components/DocumentViewer.css +2 -2
  118. package/dist/styles/components/DropdownSelect.css +225 -0
  119. package/dist/styles/components/EmptyState.css +8 -8
  120. package/dist/styles/components/FAB.css +1 -1
  121. package/dist/styles/components/FileUpload.css +10 -10
  122. package/dist/styles/components/Input.css +47 -10
  123. package/dist/styles/components/Label.css +1 -1
  124. package/dist/styles/components/LicensePlateInput.css +1 -1
  125. package/dist/styles/components/Menu.css +124 -38
  126. package/dist/styles/components/Pagination.css +15 -15
  127. package/dist/styles/components/PhotoUploader.css +4 -4
  128. package/dist/styles/components/ProgressAccordeon.css +10 -6
  129. package/dist/styles/components/ProgressTracker.css +273 -22
  130. package/dist/styles/components/Scrollbar.css +7 -6
  131. package/dist/styles/components/SearchInput.css +4 -4
  132. package/dist/styles/components/Select.css +2 -2
  133. package/dist/styles/components/SmsOtpField.css +2 -2
  134. package/dist/styles/components/SpecList.css +8 -8
  135. package/dist/styles/components/Spinner.css +1 -1
  136. package/dist/styles/components/SwipeActions.css +6 -6
  137. package/dist/styles/components/Table.css +3 -3
  138. package/dist/styles/components/Tabs.css +6 -6
  139. package/dist/styles/components/Textarea.css +2 -2
  140. package/dist/styles/components/Typography.css +89 -0
  141. package/dist/styles/components/Waveform.css +1 -1
  142. package/dist/styles/index.css +1167 -462
  143. package/dist/styles/muka-dark.css +1167 -462
  144. package/dist/styles/muka-light.css +1167 -462
  145. package/dist/styles/tokens-bouwplan-dark.css +5 -4
  146. package/dist/styles/tokens-bouwplan-light.css +5 -4
  147. package/dist/styles/tokens-fscl-dark.css +25 -24
  148. package/dist/styles/tokens-fscl-light.css +25 -24
  149. package/dist/styles/tokens-grip-dark.css +4 -3
  150. package/dist/styles/tokens-grip-light.css +4 -3
  151. package/dist/styles/tokens-muka-dark.css +4 -3
  152. package/dist/styles/tokens-muka-light.css +4 -3
  153. package/dist/styles/tokens-wireframe-dark.css +49 -48
  154. package/dist/styles/tokens-wireframe-light.css +49 -48
  155. package/dist/styles/wireframe-dark.css +1212 -507
  156. package/dist/styles/wireframe-light.css +1212 -507
  157. package/dist/types/components/Combobox/Combobox.d.ts +38 -38
  158. package/dist/types/components/Combobox/Combobox.d.ts.map +1 -1
  159. package/dist/types/components/Combobox/index.d.ts +1 -1
  160. package/dist/types/components/Combobox/index.d.ts.map +1 -1
  161. package/dist/types/components/DropdownSelect/DropdownSelect.d.ts +71 -0
  162. package/dist/types/components/DropdownSelect/DropdownSelect.d.ts.map +1 -0
  163. package/dist/types/components/DropdownSelect/index.d.ts +2 -0
  164. package/dist/types/components/DropdownSelect/index.d.ts.map +1 -0
  165. package/dist/types/components/Icon/custom/ArrowReturnIcon.d.ts +9 -0
  166. package/dist/types/components/Icon/custom/ArrowReturnIcon.d.ts.map +1 -0
  167. package/dist/types/components/Icon/iconRegistry.d.ts.map +1 -1
  168. package/dist/types/components/Input/Input.d.ts +5 -0
  169. package/dist/types/components/Input/Input.d.ts.map +1 -1
  170. package/dist/types/components/Menu/Menu.d.ts +42 -2
  171. package/dist/types/components/Menu/Menu.d.ts.map +1 -1
  172. package/dist/types/components/ProgressAccordeon/ProgressAccordeon.d.ts +17 -12
  173. package/dist/types/components/ProgressAccordeon/ProgressAccordeon.d.ts.map +1 -1
  174. package/dist/types/components/ProgressTracker/ProgressTracker.d.ts +29 -8
  175. package/dist/types/components/ProgressTracker/ProgressTracker.d.ts.map +1 -1
  176. package/dist/types/components/index.d.ts +1 -0
  177. package/dist/types/components/index.d.ts.map +1 -1
  178. package/docs/consumers/README.md +116 -37
  179. package/docs/consumers/brand.md +261 -0
  180. package/docs/consumers/figma-console-mcp.md +116 -0
  181. package/docs/consumers/setup-instructions.md +98 -12
  182. package/docs/consumers/skills.md +79 -0
  183. package/package.json +5 -6
  184. package/scripts/postinstall-nudge.js +8 -4
  185. package/skills/add-brand/SKILL.md +204 -0
  186. package/skills/add-brand/reference.md +160 -0
  187. package/skills/figma-to-code/SKILL.md +127 -0
  188. package/skills/pull-from-figma/SKILL.md +123 -0
  189. package/skills/push-to-figma/SKILL.md +172 -0
  190. package/skills/setup-muka/SKILL.md +73 -13
  191. package/tokens/README.md +39 -17
  192. package/tokens/t2-alias/brand/bouwplan/fonts.json +1 -1
  193. package/tokens/t2-alias/brand/fscl/fonts.json +3 -3
  194. package/tokens/t2-alias/brand/wireframe/fonts.json +2 -2
  195. package/tokens/t4-components/menu.json +8 -3
@@ -22,11 +22,14 @@ require("./ProgressAccordeon.css");
22
22
  * - **past** — dark check indicator, heading, edit + chevron controls; the
23
23
  * content slot collapses/expands via `collapsed` + `onToggle`
24
24
  * - **current** — accent numbered indicator, heading, content slot, actions
25
- * - **upcoming** — muted numbered indicator, heading only
25
+ * - **upcoming** — muted numbered indicator, heading; optional collapsible
26
+ * content slot (same `collapsed` + `onToggle` as past) for empty-state
27
+ * instructions or picking up a step out of order
26
28
  *
27
29
  * Content is passed as `children` (an optional slot) and rendered as-is — supply
28
- * your own `Card` when you want a card surface. Composes the Button, Icon and
29
- * Divider primitives and is fully themed through the Muka design token system.
30
+ * your own `Card` or `EmptyState` when you want those surfaces. Composes the
31
+ * Button, Icon and Divider primitives and is fully themed through the Muka
32
+ * design token system.
30
33
  *
31
34
  * Tokens used:
32
35
  * - alias.color.accent.{default|contrast} — step indicator fills
@@ -45,18 +48,25 @@ require("./ProgressAccordeon.css");
45
48
  const ProgressAccordeon = ({ state, stepNumber, heading, description, children, divider = true, collapsed = false, onToggle, editLabel = 'Edit', onEdit, primaryAction, secondaryAction, className = '', }) => {
46
49
  const isPast = state === 'past';
47
50
  const isCurrent = state === 'current';
48
- const isExpanded = isPast && !collapsed;
49
- const showToggle = isPast && Boolean(onToggle);
50
- const showEdit = isExpanded && Boolean(onEdit);
51
- const showDescription = Boolean(description) && !collapsed;
52
- // Past steps keep their content mounted regardless of `collapsed` so the
53
- // collapse/expand can be CSS-animated (you can't animate an unmounted node).
54
- const hasSlot = (isPast || isCurrent) && Boolean(children);
51
+ const isUpcoming = state === 'upcoming';
52
+ // Past and upcoming share the collapsible slot pattern so consumers can show
53
+ // empty-state instructions on future steps and pick steps up independently.
54
+ const isCollapsible = isPast || isUpcoming;
55
+ const showToggle = isCollapsible && Boolean(onToggle);
56
+ const showEdit = isPast && !collapsed && Boolean(onEdit);
57
+ const showDescription = Boolean(description) && !(isCollapsible && collapsed);
58
+ // Collapsible steps keep their content mounted regardless of `collapsed` so
59
+ // the collapse/expand can be CSS-animated (you can't animate an unmounted node).
60
+ const hasSlot = (isCollapsible || isCurrent) && Boolean(children);
55
61
  const hasActions = isCurrent && Boolean(primaryAction || secondaryAction);
62
+ // Collapse modifiers only when the step can actually collapse — keeps
63
+ // header-only upcoming spacing on the base `--upcoming` gap rule.
64
+ const showCollapseModifiers = isPast || (isUpcoming && (Boolean(children) || Boolean(onToggle)));
56
65
  const rootClasses = [
57
66
  'muka-progress-accordeon',
58
67
  `muka-progress-accordeon--${state}`,
59
- isPast && `muka-progress-accordeon--${collapsed ? 'collapsed' : 'expanded'}`,
68
+ showCollapseModifiers &&
69
+ `muka-progress-accordeon--${collapsed ? 'collapsed' : 'expanded'}`,
60
70
  className,
61
71
  ].filter(Boolean).join(' ');
62
72
  const indicatorClasses = [
@@ -65,9 +75,10 @@ const ProgressAccordeon = ({ state, stepNumber, heading, description, children,
65
75
  ].join(' ');
66
76
  const header = ((0, jsx_runtime_1.jsxs)("div", { className: "muka-progress-accordeon__header", children: [(0, jsx_runtime_1.jsxs)("div", { className: "muka-progress-accordeon__header-row", children: [(0, jsx_runtime_1.jsxs)("div", { className: "muka-progress-accordeon__heading-group", children: [(0, jsx_runtime_1.jsx)("div", { className: indicatorClasses, "aria-hidden": "true", children: isPast ? ((0, jsx_runtime_1.jsx)(Icon_1.Icon, { name: "check", variant: "fill", size: "sm", className: "muka-progress-accordeon__check-icon" })) : ((0, jsx_runtime_1.jsx)("span", { className: "muka-progress-accordeon__number", children: stepNumber })) }), (0, jsx_runtime_1.jsx)("h3", { className: "muka-progress-accordeon__heading", children: heading })] }), (showEdit || showToggle) && ((0, jsx_runtime_1.jsxs)("div", { className: "muka-progress-accordeon__controls", children: [showEdit && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Button_1.Button, { variant: "tertiary", size: "md", onClick: onEdit, iconLeft: (0, jsx_runtime_1.jsx)(Icon_1.Icon, { name: "pencil", variant: "line", size: "md" }), className: "muka-progress-accordeon__edit muka-progress-accordeon__edit--wide", children: editLabel }), (0, jsx_runtime_1.jsx)(Button_1.Button, { variant: "tertiary", size: "md", iconOnly: true, onClick: onEdit, className: "muka-progress-accordeon__edit muka-progress-accordeon__edit--narrow", "aria-label": editLabel, children: (0, jsx_runtime_1.jsx)(Icon_1.Icon, { name: "pencil", variant: "line", size: "md" }) })] })), showToggle && ((0, jsx_runtime_1.jsx)(Button_1.Button, { variant: "tertiary", size: "md", iconOnly: true, onClick: onToggle, className: "muka-progress-accordeon__toggle", "aria-label": collapsed ? 'Expand' : 'Collapse', "aria-expanded": !collapsed, children: (0, jsx_runtime_1.jsx)(Icon_1.Icon, { name: collapsed ? 'arrow-down-s' : 'arrow-up-s', variant: "line", size: "md" }) }))] }))] }), showDescription && ((0, jsx_runtime_1.jsx)("div", { className: "muka-progress-accordeon__description", children: description }))] }));
67
77
  const slot = hasSlot ? ((0, jsx_runtime_1.jsx)("div", { className: "muka-progress-accordeon__slot", children: children })) : null;
68
- // Past steps wrap the (always-mounted) slot in a grid animation container that
69
- // collapses its height to zero. Marked inert + aria-hidden while collapsed so
70
- // the still-mounted content is skipped by keyboard focus and assistive tech.
78
+ // Collapsible steps wrap the (always-mounted) slot in a grid animation
79
+ // container that collapses its height to zero. Marked inert + aria-hidden while
80
+ // collapsed so the still-mounted content is skipped by keyboard focus and
81
+ // assistive tech.
71
82
  // `inert` is set imperatively on the DOM node rather than via a React prop:
72
83
  // React 18 drops a boolean `inert` prop, while React 19 warns on the string
73
84
  // form — toggling the attribute directly works correctly under both.
@@ -83,8 +94,8 @@ const ProgressAccordeon = ({ state, stepNumber, heading, description, children,
83
94
  node.removeAttribute('inert');
84
95
  }
85
96
  }, [collapsed]);
86
- const pastSlot = hasSlot ? ((0, jsx_runtime_1.jsx)("div", { ref: slotWrapperRef, className: `muka-progress-accordeon__slot-wrapper${collapsed ? ' muka-progress-accordeon__slot-wrapper--collapsed' : ''}`, "aria-hidden": collapsed || undefined, children: (0, jsx_runtime_1.jsx)("div", { className: "muka-progress-accordeon__slot-clip", children: slot }) })) : null;
87
- return ((0, jsx_runtime_1.jsxs)("div", { className: rootClasses, role: "group", "aria-label": `Step ${stepNumber}: ${heading}`, "aria-current": isCurrent ? 'step' : undefined, children: [isPast ? ((0, jsx_runtime_1.jsxs)("div", { className: "muka-progress-accordeon__body", children: [header, pastSlot] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [header, slot] })), hasActions && ((0, jsx_runtime_1.jsxs)("div", { className: "muka-progress-accordeon__actions", children: [secondaryAction && ((0, jsx_runtime_1.jsx)(Button_1.Button, { variant: "secondary", size: "md", onClick: secondaryAction.onClick, disabled: secondaryAction.disabled, className: "muka-progress-accordeon__action", children: secondaryAction.label })), primaryAction && ((0, jsx_runtime_1.jsx)(Button_1.Button, { variant: "primary", size: "md", onClick: primaryAction.onClick, disabled: primaryAction.disabled, className: "muka-progress-accordeon__action", children: primaryAction.label }))] })), divider && (0, jsx_runtime_1.jsx)(Divider_1.Divider, { className: "muka-progress-accordeon__divider" })] }));
97
+ const collapsibleSlot = hasSlot ? ((0, jsx_runtime_1.jsx)("div", { ref: slotWrapperRef, className: `muka-progress-accordeon__slot-wrapper${collapsed ? ' muka-progress-accordeon__slot-wrapper--collapsed' : ''}`, "aria-hidden": collapsed || undefined, children: (0, jsx_runtime_1.jsx)("div", { className: "muka-progress-accordeon__slot-clip", children: slot }) })) : null;
98
+ return ((0, jsx_runtime_1.jsxs)("div", { className: rootClasses, role: "group", "aria-label": `Step ${stepNumber}: ${heading}`, "aria-current": isCurrent ? 'step' : undefined, children: [isCollapsible ? ((0, jsx_runtime_1.jsxs)("div", { className: "muka-progress-accordeon__body", children: [header, collapsibleSlot] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [header, slot] })), hasActions && ((0, jsx_runtime_1.jsxs)("div", { className: "muka-progress-accordeon__actions", children: [secondaryAction && ((0, jsx_runtime_1.jsx)(Button_1.Button, { variant: "secondary", size: "md", onClick: secondaryAction.onClick, disabled: secondaryAction.disabled, className: "muka-progress-accordeon__action", children: secondaryAction.label })), primaryAction && ((0, jsx_runtime_1.jsx)(Button_1.Button, { variant: "primary", size: "md", onClick: primaryAction.onClick, disabled: primaryAction.disabled, className: "muka-progress-accordeon__action", children: primaryAction.label }))] })), divider && (0, jsx_runtime_1.jsx)(Divider_1.Divider, { className: "muka-progress-accordeon__divider" })] }));
88
99
  };
89
100
  exports.ProgressAccordeon = ProgressAccordeon;
90
101
  exports.default = exports.ProgressAccordeon;
@@ -1 +1 @@
1
- {"version":3,"file":"ProgressAccordeon.js","sourceRoot":"","sources":["../../../../components/ProgressAccordeon/ProgressAccordeon.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProgressAccordeon.js","sourceRoot":"","sources":["../../../../components/ProgressAccordeon/ProgressAccordeon.tsx"],"names":[],"mappings":"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"}
@@ -3,19 +3,22 @@
3
3
  /* ─── Root ──────────────────────────────────────────────── */
4
4
  .muka-progress-tracker {
5
5
  width: 100%;
6
+ }
7
+
8
+ .muka-progress-tracker--horizontal {
6
9
  padding-bottom: var(--spacing-7);
7
10
  }
8
11
 
9
12
  /* ─── Track (layered container) ─────────────────────────── */
10
- .muka-progress-tracker__track {
13
+ .muka-progress-tracker--horizontal .muka-progress-tracker__track {
11
14
  position: relative;
12
15
  /* Vertical padding = (indicator size - connector height) / 2 = (32 - 4) / 2 = 14px */
13
16
  padding-top: 14px;
14
17
  padding-bottom: 14px;
15
18
  }
16
19
 
17
- /* ─── Steps layer (on top) ──────────────────────────────── */
18
- .muka-progress-tracker__steps {
20
+ /* ─── Steps layer (on top) — horizontal ─────────────────── */
21
+ .muka-progress-tracker--horizontal .muka-progress-tracker__steps {
19
22
  position: absolute;
20
23
  inset: 0;
21
24
  display: flex;
@@ -24,13 +27,16 @@
24
27
  z-index: 2;
25
28
  }
26
29
 
27
- /* ─── Individual step ───────────────────────────────────── */
28
- .muka-progress-tracker__step {
30
+ /* ─── Individual step — horizontal ──────────────────────── */
31
+ .muka-progress-tracker--horizontal .muka-progress-tracker__step {
29
32
  display: flex;
30
33
  flex-direction: column;
31
34
  align-items: center;
32
- gap: 7px;
33
35
  position: relative;
36
+ /* Labels are absolutely positioned so the step stays 32px and
37
+ circle centers line up with the connector padding. */
38
+ width: 32px;
39
+ flex: 0 0 32px;
34
40
  }
35
41
 
36
42
  /* ─── Step indicator (circle) ───────────────────────────── */
@@ -43,20 +49,24 @@
43
49
  justify-content: center;
44
50
  flex-shrink: 0;
45
51
  position: relative;
52
+ z-index: 1;
46
53
  }
47
54
 
48
55
  /* Past: dark accent contrast circle with white checkmark */
49
56
  .muka-progress-tracker__indicator--past {
50
57
  background-color: var(--alias-color-accent-contrast);
51
58
  color: var(--color-text-default-inverse);
59
+ }
60
+
61
+ .muka-progress-tracker--horizontal .muka-progress-tracker__indicator--past {
52
62
  cursor: pointer;
53
63
  }
54
64
 
55
- .muka-progress-tracker__indicator--past:hover {
65
+ .muka-progress-tracker--horizontal .muka-progress-tracker__indicator--past:hover {
56
66
  background-color: var(--alias-color-accent-pressed);
57
67
  }
58
68
 
59
- .muka-progress-tracker__indicator--past:focus-visible {
69
+ .muka-progress-tracker--horizontal .muka-progress-tracker__indicator--past:focus-visible {
60
70
  outline: 2px solid var(--color-border-focus);
61
71
  outline-offset: 2px;
62
72
  }
@@ -83,6 +93,18 @@
83
93
  user-select: none;
84
94
  }
85
95
 
96
+ .muka-progress-tracker--horizontal .muka-progress-tracker__indicator--upcoming .muka-progress-tracker__number {
97
+ font-family: var(--text-label-md-bold-fontFamily);
98
+ font-weight: var(--text-label-md-bold-fontWeight);
99
+ }
100
+
101
+ .muka-progress-tracker--vertical .muka-progress-tracker__indicator--upcoming .muka-progress-tracker__number {
102
+ font-family: var(--text-label-md-semibold-fontFamily);
103
+ font-weight: var(--text-label-md-semibold-fontWeight);
104
+ font-size: var(--text-label-md-semibold-fontSize);
105
+ line-height: var(--text-label-md-semibold-lineHeight);
106
+ }
107
+
86
108
  /* ─── Checkmark icon ────────────────────────────────────── */
87
109
  .muka-progress-tracker__check-icon {
88
110
  width: 20px;
@@ -95,8 +117,12 @@
95
117
  color: var(--color-text-default-inverse);
96
118
  }
97
119
 
98
- /* ─── Step label ────────────────────────────────────────── */
99
- .muka-progress-tracker__label {
120
+ /* ─── Step label — horizontal ───────────────────────────── */
121
+ .muka-progress-tracker--horizontal .muka-progress-tracker__label {
122
+ position: absolute;
123
+ top: 39px;
124
+ left: 50%;
125
+ transform: translateX(-50%);
100
126
  font-family: var(--text-label-sm-regular-fontFamily);
101
127
  font-weight: var(--text-label-sm-regular-fontWeight);
102
128
  font-size: var(--text-label-sm-regular-fontSize);
@@ -109,14 +135,14 @@
109
135
  text-overflow: ellipsis;
110
136
  }
111
137
 
112
- /* Current step label is bold */
113
- .muka-progress-tracker__label--current {
138
+ /* Current step label is bold (horizontal only) */
139
+ .muka-progress-tracker--horizontal .muka-progress-tracker__label--current {
114
140
  font-family: var(--text-label-sm-bold-fontFamily);
115
141
  font-weight: var(--text-label-sm-bold-fontWeight);
116
142
  }
117
143
 
118
- /* ─── Connectors layer (behind indicators) ──────────────── */
119
- .muka-progress-tracker__connectors {
144
+ /* ─── Connectors layer (behind indicators) — horizontal ─── */
145
+ .muka-progress-tracker--horizontal .muka-progress-tracker__connectors {
120
146
  display: flex;
121
147
  align-items: center;
122
148
  /* Horizontal padding = indicator radius (32/2 = 16px) so lines meet circle centers */
@@ -126,20 +152,31 @@
126
152
  z-index: 1;
127
153
  }
128
154
 
129
- /* ─── Individual connector line ─────────────────────────── */
130
- .muka-progress-tracker__connector {
155
+ /* Rounder, bar, rounder in a row. Chromium treats a negative gap as invalid,
156
+ so the overlap is margins: the bar runs 2px under each circle. */
157
+ .muka-progress-tracker--horizontal .muka-progress-tracker__connector {
158
+ display: flex;
159
+ flex-direction: row;
160
+ align-items: center;
131
161
  flex: 1 0 0;
132
162
  height: 4px;
133
163
  min-width: 1px;
164
+ position: relative;
165
+ overflow: visible;
166
+ background: none;
134
167
  }
135
168
 
136
- /* Past: solid dark line */
137
- .muka-progress-tracker__connector--past {
169
+ .muka-progress-tracker--horizontal .muka-progress-tracker__connector-line {
170
+ flex: 1 1 auto;
171
+ height: 4px;
172
+ min-width: 1px;
173
+ }
174
+
175
+ .muka-progress-tracker--horizontal .muka-progress-tracker__connector--past .muka-progress-tracker__connector-line {
138
176
  background-color: var(--alias-color-accent-contrast);
139
177
  }
140
178
 
141
- /* Current: gradient from past (dark) toward current step */
142
- .muka-progress-tracker__connector--current {
179
+ .muka-progress-tracker--horizontal .muka-progress-tracker__connector--current .muka-progress-tracker__connector-line {
143
180
  background: linear-gradient(
144
181
  to right,
145
182
  var(--alias-color-accent-contrast) 0%,
@@ -147,8 +184,7 @@
147
184
  );
148
185
  }
149
186
 
150
- /* Current-right: gradient fading from current step into upcoming */
151
- .muka-progress-tracker__connector--current-right {
187
+ .muka-progress-tracker--horizontal .muka-progress-tracker__connector--current-right .muka-progress-tracker__connector-line {
152
188
  background: linear-gradient(
153
189
  to right,
154
190
  var(--alias-color-accent-default) 0%,
@@ -157,7 +193,222 @@
157
193
  );
158
194
  }
159
195
 
196
+ .muka-progress-tracker--horizontal .muka-progress-tracker__connector--upcoming .muka-progress-tracker__connector-line {
197
+ background-color: var(--color-surface-sunken);
198
+ }
199
+
200
+ /* Past: solid dark line (vertical; horizontal uses the inner line) */
201
+ .muka-progress-tracker__connector--past {
202
+ background-color: var(--alias-color-accent-contrast);
203
+ }
204
+
160
205
  /* Upcoming: solid gray line */
161
206
  .muka-progress-tracker__connector--upcoming {
162
207
  background-color: var(--color-surface-sunken);
163
208
  }
209
+
210
+ /* ═══════════════════════════════════════════════════════════
211
+ Vertical orientation
212
+ ═══════════════════════════════════════════════════════════ */
213
+
214
+ .muka-progress-tracker--vertical .muka-progress-tracker__track {
215
+ display: flex;
216
+ flex-direction: column;
217
+ align-items: stretch;
218
+ gap: var(--spacing-6);
219
+ width: 100%;
220
+ }
221
+
222
+ .muka-progress-tracker--vertical .muka-progress-tracker__step {
223
+ display: flex;
224
+ flex-direction: row;
225
+ align-items: flex-start;
226
+ gap: var(--spacing-3);
227
+ padding-right: var(--spacing-1);
228
+ position: relative;
229
+ width: 100%;
230
+ min-height: 32px;
231
+ }
232
+
233
+ .muka-progress-tracker--vertical .muka-progress-tracker__step--interactive {
234
+ cursor: pointer;
235
+ }
236
+
237
+ .muka-progress-tracker--vertical .muka-progress-tracker__step--interactive:focus-visible {
238
+ outline: 2px solid var(--color-border-focus);
239
+ outline-offset: 4px;
240
+ border-radius: 20px;
241
+ }
242
+
243
+ /* Indicator column: circle only; connector is absolutely positioned on the step */
244
+ .muka-progress-tracker--vertical .muka-progress-tracker__indicator-col {
245
+ display: flex;
246
+ flex-direction: column;
247
+ align-items: center;
248
+ flex-shrink: 0;
249
+ position: relative;
250
+ width: 32px;
251
+ z-index: 1;
252
+ }
253
+
254
+ /* Vertical connector: from mid-indicator through gap to next mid-indicator */
255
+ .muka-progress-tracker--vertical .muka-progress-tracker__connector {
256
+ position: absolute;
257
+ left: 14px; /* (32px indicator - 4px line) / 2 */
258
+ top: 16px;
259
+ /* Through track gap (spacing-6) into the next indicator's top half */
260
+ bottom: calc(-1 * var(--spacing-6) - 16px);
261
+ width: 4px;
262
+ z-index: 0;
263
+ overflow: visible;
264
+ }
265
+
266
+ /* Divider rounders: circle bleeds into the connector (Figma Divider Rounder) */
267
+ .muka-progress-tracker__rounder {
268
+ position: absolute;
269
+ display: block;
270
+ pointer-events: none;
271
+ overflow: visible;
272
+ }
273
+
274
+ .muka-progress-tracker__rounder--past {
275
+ color: var(--alias-color-accent-contrast);
276
+ }
277
+
278
+ .muka-progress-tracker__rounder--current {
279
+ color: var(--alias-color-accent-default);
280
+ }
281
+
282
+ .muka-progress-tracker__rounder--upcoming {
283
+ color: var(--color-surface-sunken);
284
+ }
285
+
286
+ .muka-progress-tracker--horizontal .muka-progress-tracker__rounder {
287
+ position: relative;
288
+ z-index: 1;
289
+ flex-shrink: 0;
290
+ top: auto;
291
+ right: auto;
292
+ bottom: auto;
293
+ left: auto;
294
+ transform: none;
295
+ }
296
+
297
+ .muka-progress-tracker--horizontal .muka-progress-tracker__rounder--start {
298
+ margin-left: 14px;
299
+ /* Rounder overhangs the circle by 3px; -5px tucks the bar 2px under the circle. */
300
+ margin-right: -5px;
301
+ }
302
+
303
+ .muka-progress-tracker--horizontal .muka-progress-tracker__rounder--end {
304
+ margin-left: -5px;
305
+ margin-right: 14px;
306
+ }
307
+
308
+ .muka-progress-tracker--vertical .muka-progress-tracker__rounder--start {
309
+ left: 50%;
310
+ top: 14px;
311
+ transform: translateX(-50%);
312
+ }
313
+
314
+ .muka-progress-tracker--vertical .muka-progress-tracker__rounder--end {
315
+ left: 50%;
316
+ bottom: 14px;
317
+ transform: translateX(-50%);
318
+ }
319
+
320
+ .muka-progress-tracker--vertical .muka-progress-tracker__connector--current {
321
+ background: linear-gradient(
322
+ to bottom,
323
+ var(--alias-color-accent-contrast) 0%,
324
+ var(--alias-color-accent-default) 100%
325
+ );
326
+ }
327
+
328
+ .muka-progress-tracker--vertical .muka-progress-tracker__connector--current-right {
329
+ background: linear-gradient(
330
+ to bottom,
331
+ var(--alias-color-accent-default) 0%,
332
+ var(--alias-color-accent-default) 15%,
333
+ var(--color-surface-sunken) 50%
334
+ );
335
+ }
336
+
337
+ /* Vertical label: body/base/regular, wraps, not bold for current */
338
+ .muka-progress-tracker--vertical .muka-progress-tracker__label {
339
+ font-family: var(--text-body-base-regular-fontFamily);
340
+ font-weight: var(--text-body-base-regular-fontWeight);
341
+ font-size: var(--text-body-base-regular-fontSize);
342
+ line-height: var(--text-body-base-regular-lineHeight);
343
+ color: var(--color-text-default-default);
344
+ text-align: left;
345
+ flex: 1 0 0;
346
+ min-width: 0;
347
+ padding-top: var(--spacing-1);
348
+ padding-bottom: var(--spacing-1);
349
+ word-break: break-word;
350
+ }
351
+
352
+ /* Current label stays regular weight in vertical layout */
353
+ .muka-progress-tracker--vertical .muka-progress-tracker__label--current {
354
+ font-family: var(--text-body-base-regular-fontFamily);
355
+ font-weight: var(--text-body-base-regular-fontWeight);
356
+ }
357
+
358
+ /* Ensure step content paints above hover/selected backgrounds */
359
+ .muka-progress-tracker--vertical .muka-progress-tracker__indicator-col,
360
+ .muka-progress-tracker--vertical .muka-progress-tracker__label {
361
+ position: relative;
362
+ z-index: 1;
363
+ }
364
+
365
+ /* ─── Hover halo (vertical interactive only) ────────────── */
366
+ .muka-progress-tracker--vertical .muka-progress-tracker__step--interactive:hover::before,
367
+ .muka-progress-tracker--vertical .muka-progress-tracker__step--interactive:active::before,
368
+ .muka-progress-tracker--vertical .muka-progress-tracker__step[data-selected='true']::before {
369
+ content: '';
370
+ position: absolute;
371
+ background-color: var(--color-surface-level1);
372
+ pointer-events: none;
373
+ z-index: 0;
374
+ }
375
+
376
+ /* Hover: 40px circle behind indicator only */
377
+ .muka-progress-tracker--vertical .muka-progress-tracker__step--interactive:hover::before {
378
+ left: -4px;
379
+ top: -4px;
380
+ width: 40px;
381
+ height: 40px;
382
+ border-radius: 20px;
383
+ }
384
+
385
+ /* Selected / :active: pill behind full step row — wins over hover */
386
+ .muka-progress-tracker--vertical .muka-progress-tracker__step--interactive:active::before,
387
+ .muka-progress-tracker--vertical .muka-progress-tracker__step[data-selected='true']::before {
388
+ left: -4px;
389
+ right: -8px;
390
+ top: -4px;
391
+ bottom: -4px;
392
+ width: auto;
393
+ height: auto;
394
+ border-radius: 20px;
395
+ }
396
+
397
+ /* Selected steps without interactive class still show the pill */
398
+ .muka-progress-tracker--vertical .muka-progress-tracker__step[data-selected='true']:not(.muka-progress-tracker__step--interactive)::before {
399
+ content: '';
400
+ position: absolute;
401
+ left: -4px;
402
+ right: -8px;
403
+ top: -4px;
404
+ bottom: -4px;
405
+ background-color: var(--color-surface-level1);
406
+ border-radius: 20px;
407
+ pointer-events: none;
408
+ z-index: 0;
409
+ }
410
+
411
+ /* Connector stays behind indicators (indicator-col is z-index 1) */
412
+ .muka-progress-tracker--vertical .muka-progress-tracker__connector {
413
+ z-index: 0;
414
+ }
@@ -4,6 +4,44 @@ exports.ProgressTracker = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  require("./ProgressTracker.css");
6
6
  const Icon_1 = require("../Icon");
7
+ /** Figma Divider Rounder paths — circle bleeds into the 4px connector. */
8
+ const DIVIDER_ROUNDERS = {
9
+ horizontal: {
10
+ start: {
11
+ width: 5,
12
+ height: 15.4893,
13
+ viewBox: '0 0 5 15.4893',
14
+ d: 'M0 0C0.549963 0.992174 1.00009 2.04813 1.33105 3.15527C1.7646 4.60497 3.01126 5.74512 4.52441 5.74512H5V9.74512H4.52441C3.01126 9.74512 1.7646 10.8853 1.33105 12.335C1.00017 13.4418 0.549773 14.4973 0 15.4893V0Z',
15
+ },
16
+ end: {
17
+ width: 5,
18
+ height: 15.4893,
19
+ viewBox: '0 0 5 15.4893',
20
+ d: 'M5 0C4.45004 0.992174 3.99991 2.04813 3.66895 3.15527C3.2354 4.60497 1.98874 5.74512 0.475586 5.74512H0V9.74512H0.475586C1.98874 9.74512 3.2354 10.8853 3.66895 12.335C3.99983 13.4418 4.45023 14.4973 5 15.4893V0Z',
21
+ },
22
+ },
23
+ vertical: {
24
+ start: {
25
+ width: 16,
26
+ height: 5,
27
+ viewBox: '0 0 16 5',
28
+ d: 'M16 0C14.9751 0.549963 13.8843 1.00009 12.7407 1.33105C11.2432 1.7646 10 3.01126 10 4.52441V5H6V4.52441C6 3.01126 4.75581 1.7646 3.25831 1.33105C2.11494 1.00017 1.02467 0.549773 0 0H16Z',
29
+ },
30
+ end: {
31
+ width: 16,
32
+ height: 5,
33
+ viewBox: '0 0 16 5',
34
+ d: 'M16 5C14.9751 4.45004 13.8843 3.99991 12.7407 3.66895C11.2432 3.2354 10 1.98874 10 0.475586V0H6V0.475586C6 1.98874 4.75581 3.2354 3.25831 3.66895C2.11494 3.99983 1.02467 4.45023 0 5H16Z',
35
+ },
36
+ },
37
+ };
38
+ function DividerRounder({ orientation, edge, status, }) {
39
+ const spec = DIVIDER_ROUNDERS[orientation][edge];
40
+ return ((0, jsx_runtime_1.jsx)("svg", { className: `muka-progress-tracker__rounder muka-progress-tracker__rounder--${edge} muka-progress-tracker__rounder--${status}`, width: spec.width, height: spec.height, viewBox: spec.viewBox, fill: "none", "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)("path", { d: spec.d, fill: "currentColor" }) }));
41
+ }
42
+ function DividerRounders({ orientation, startStatus, endStatus, }) {
43
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(DividerRounder, { orientation: orientation, edge: "start", status: startStatus }), (0, jsx_runtime_1.jsx)(DividerRounder, { orientation: orientation, edge: "end", status: endStatus })] }));
44
+ }
7
45
  function getStepStatus(stepIndex, currentStep, totalSteps) {
8
46
  if (currentStep <= 0)
9
47
  return 'upcoming';
@@ -34,12 +72,15 @@ function getConnectorStatus(connectorIndex, currentStep, totalSteps) {
34
72
  /**
35
73
  * ProgressTracker Component
36
74
  *
37
- * A horizontal stepper/progress indicator for multi-step forms.
75
+ * A stepper/progress indicator for multi-step forms.
76
+ * Supports horizontal (default) and vertical orientations.
38
77
  * Shows numbered step indicators connected by progress lines.
39
- * Supports 2–5 steps with past, current, and upcoming states.
78
+ * Supports 2–10 steps with past, current, and upcoming states.
79
+ *
80
+ * Vertical orientation also supports hover and selected interaction states.
40
81
  *
41
82
  * Built using the Muka design token system with support for:
42
- * - Dynamic step counts (2–5)
83
+ * - Dynamic step counts (2–10)
43
84
  * - Step states: past (checkmark), current (number), upcoming (number)
44
85
  * - Animated connector lines showing progress
45
86
  * - Multi-brand theming through design tokens
@@ -47,14 +88,73 @@ function getConnectorStatus(connectorIndex, currentStep, totalSteps) {
47
88
  * Tokens used:
48
89
  * - alias.color.accent.{default|contrast|pressed} — step indicator backgrounds
49
90
  * - color.surface.sunken — upcoming indicator/connector background
91
+ * - color.surface.level1 — vertical hover/selected backgrounds
50
92
  * - color.text.default.{default|inverse} — indicator/label text
51
- * - text.label.{sm|md}.{regular|bold} — typography
52
- * - spacing.4, spacing.7 — layout spacing
93
+ * - text.label.{sm|md}.{regular|bold|semibold} — horizontal typography
94
+ * - text.body.base.regular — vertical label typography
95
+ * - spacing.1, spacing.3, spacing.4, spacing.6, spacing.7 — layout spacing
53
96
  * - border.radius.full — circular indicators
54
97
  */
55
- const ProgressTracker = ({ steps, currentStep, onStepClick, className = '', }) => {
98
+ const ProgressTracker = ({ steps, currentStep, orientation = 'horizontal', selectedStep, onStepClick, className = '', }) => {
56
99
  const totalSteps = steps.length;
57
- const rootClasses = ['muka-progress-tracker', className].filter(Boolean).join(' ');
100
+ const isVertical = orientation === 'vertical';
101
+ const rootClasses = [
102
+ 'muka-progress-tracker',
103
+ `muka-progress-tracker--${orientation}`,
104
+ className,
105
+ ].filter(Boolean).join(' ');
106
+ const renderIndicatorContent = (status, stepNumber) => {
107
+ if (status === 'past') {
108
+ return ((0, jsx_runtime_1.jsx)(Icon_1.Icon, { name: "check", variant: "fill", size: "sm", className: "muka-progress-tracker__check-icon" }));
109
+ }
110
+ return (0, jsx_runtime_1.jsx)("span", { className: "muka-progress-tracker__number", children: stepNumber });
111
+ };
112
+ if (isVertical) {
113
+ return ((0, jsx_runtime_1.jsx)("div", { className: rootClasses, role: "group", "aria-label": "Form progress", children: (0, jsx_runtime_1.jsx)("div", { className: "muka-progress-tracker__track", children: steps.map((step, index) => {
114
+ const status = getStepStatus(index, currentStep, totalSteps);
115
+ const stepNumber = index + 1;
116
+ const isPast = status === 'past';
117
+ const isCurrent = status === 'current';
118
+ const isLast = index === totalSteps - 1;
119
+ const isSelected = selectedStep === stepNumber;
120
+ const isInteractive = Boolean(onStepClick);
121
+ const stepClasses = [
122
+ 'muka-progress-tracker__step',
123
+ `muka-progress-tracker__step--${status}`,
124
+ isInteractive && 'muka-progress-tracker__step--interactive',
125
+ ].filter(Boolean).join(' ');
126
+ const indicatorClasses = [
127
+ 'muka-progress-tracker__indicator',
128
+ `muka-progress-tracker__indicator--${status}`,
129
+ ].join(' ');
130
+ const labelClasses = [
131
+ 'muka-progress-tracker__label',
132
+ isCurrent && 'muka-progress-tracker__label--current',
133
+ ].filter(Boolean).join(' ');
134
+ const handleClick = isInteractive
135
+ ? () => onStepClick(index)
136
+ : undefined;
137
+ const connectorStatus = !isLast
138
+ ? getConnectorStatus(index, currentStep, totalSteps)
139
+ : null;
140
+ return ((0, jsx_runtime_1.jsxs)("div", { className: stepClasses, "data-selected": isSelected ? 'true' : undefined, "aria-current": isCurrent ? 'step' : undefined, onClick: handleClick, role: handleClick ? 'button' : undefined, tabIndex: handleClick ? 0 : undefined, onKeyDown: handleClick
141
+ ? (e) => {
142
+ if (e.key === 'Enter' || e.key === ' ') {
143
+ e.preventDefault();
144
+ handleClick();
145
+ }
146
+ }
147
+ : undefined, "aria-label": isPast
148
+ ? `Step ${stepNumber}: ${step.label} (completed)`
149
+ : isCurrent
150
+ ? `Step ${stepNumber}: ${step.label} (current)`
151
+ : `Step ${stepNumber}: ${step.label}`, children: [connectorStatus && ((0, jsx_runtime_1.jsx)("div", { className: [
152
+ 'muka-progress-tracker__connector',
153
+ `muka-progress-tracker__connector--${connectorStatus}`,
154
+ ].join(' '), "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)(DividerRounders, { orientation: "vertical", startStatus: status, endStatus: getStepStatus(index + 1, currentStep, totalSteps) }) })), (0, jsx_runtime_1.jsx)("div", { className: "muka-progress-tracker__indicator-col", children: (0, jsx_runtime_1.jsx)("div", { className: indicatorClasses, children: renderIndicatorContent(status, stepNumber) }) }), (0, jsx_runtime_1.jsx)("span", { className: labelClasses, children: step.label })] }, index));
155
+ }) }) }));
156
+ }
157
+ // Horizontal layout (default)
58
158
  return ((0, jsx_runtime_1.jsx)("div", { className: rootClasses, role: "group", "aria-label": "Form progress", children: (0, jsx_runtime_1.jsxs)("div", { className: "muka-progress-tracker__track", children: [(0, jsx_runtime_1.jsx)("div", { className: "muka-progress-tracker__steps", children: steps.map((step, index) => {
59
159
  const status = getStepStatus(index, currentStep, totalSteps);
60
160
  const stepNumber = index + 1;
@@ -86,14 +186,14 @@ const ProgressTracker = ({ steps, currentStep, onStepClick, className = '', }) =
86
186
  ? `Step ${stepNumber}: ${step.label} (completed)`
87
187
  : isCurrent
88
188
  ? `Step ${stepNumber}: ${step.label} (current)`
89
- : `Step ${stepNumber}: ${step.label}`, children: isPast ? ((0, jsx_runtime_1.jsx)(Icon_1.Icon, { name: "check", variant: "fill", size: "sm", className: "muka-progress-tracker__check-icon" })) : ((0, jsx_runtime_1.jsx)("span", { className: "muka-progress-tracker__number", children: stepNumber })) }), (0, jsx_runtime_1.jsx)("span", { className: labelClasses, children: step.label })] }, index));
189
+ : `Step ${stepNumber}: ${step.label}`, children: renderIndicatorContent(status, stepNumber) }), (0, jsx_runtime_1.jsx)("span", { className: labelClasses, children: step.label })] }, index));
90
190
  }) }), (0, jsx_runtime_1.jsx)("div", { className: "muka-progress-tracker__connectors", children: Array.from({ length: totalSteps - 1 }, (_, index) => {
91
191
  const status = getConnectorStatus(index, currentStep, totalSteps);
92
192
  const connectorClasses = [
93
193
  'muka-progress-tracker__connector',
94
194
  `muka-progress-tracker__connector--${status}`,
95
195
  ].join(' ');
96
- return (0, jsx_runtime_1.jsx)("div", { className: connectorClasses, "aria-hidden": "true" }, index);
196
+ return ((0, jsx_runtime_1.jsxs)("div", { className: connectorClasses, "aria-hidden": "true", children: [(0, jsx_runtime_1.jsx)(DividerRounder, { orientation: "horizontal", edge: "start", status: getStepStatus(index, currentStep, totalSteps) }), (0, jsx_runtime_1.jsx)("span", { className: "muka-progress-tracker__connector-line" }), (0, jsx_runtime_1.jsx)(DividerRounder, { orientation: "horizontal", edge: "end", status: getStepStatus(index + 1, currentStep, totalSteps) })] }, index));
97
197
  }) })] }) }));
98
198
  };
99
199
  exports.ProgressTracker = ProgressTracker;