@revikornmann/muka-ui 0.17.0 → 0.19.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 (182) 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.js +1 -1
  10. package/dist/cjs/components/Breadcrumb/Breadcrumb.css +11 -3
  11. package/dist/cjs/components/Breadcrumb/Breadcrumb.js +19 -1
  12. package/dist/cjs/components/Breadcrumb/Breadcrumb.js.map +1 -1
  13. package/dist/cjs/components/Combobox/Combobox.css +116 -132
  14. package/dist/cjs/components/Combobox/Combobox.js +175 -52
  15. package/dist/cjs/components/Combobox/Combobox.js.map +1 -1
  16. package/dist/cjs/components/Combobox/index.js.map +1 -1
  17. package/dist/cjs/components/ContextSelect/ContextSelect.css +117 -0
  18. package/dist/cjs/components/ContextSelect/ContextSelect.js +49 -0
  19. package/dist/cjs/components/ContextSelect/ContextSelect.js.map +1 -0
  20. package/dist/cjs/components/ContextSelect/index.js +11 -0
  21. package/dist/cjs/components/ContextSelect/index.js.map +1 -0
  22. package/dist/cjs/components/DropdownSelect/DropdownSelect.css +225 -0
  23. package/dist/cjs/components/DropdownSelect/DropdownSelect.js +106 -0
  24. package/dist/cjs/components/DropdownSelect/DropdownSelect.js.map +1 -0
  25. package/dist/cjs/components/DropdownSelect/index.js +6 -0
  26. package/dist/cjs/components/DropdownSelect/index.js.map +1 -0
  27. package/dist/cjs/components/Icon/custom/ArrowDropUpDownIcon.js +11 -0
  28. package/dist/cjs/components/Icon/custom/ArrowDropUpDownIcon.js.map +1 -0
  29. package/dist/cjs/components/Icon/custom/ArrowReturnIcon.js +11 -0
  30. package/dist/cjs/components/Icon/custom/ArrowReturnIcon.js.map +1 -0
  31. package/dist/cjs/components/Icon/iconRegistry.js +11 -0
  32. package/dist/cjs/components/Icon/iconRegistry.js.map +1 -1
  33. package/dist/cjs/components/Input/Input.css +45 -8
  34. package/dist/cjs/components/Input/Input.js +14 -3
  35. package/dist/cjs/components/Input/Input.js.map +1 -1
  36. package/dist/cjs/components/Menu/Menu.css +213 -17
  37. package/dist/cjs/components/Menu/Menu.js +429 -39
  38. package/dist/cjs/components/Menu/Menu.js.map +1 -1
  39. package/dist/cjs/components/Menu/index.js +5 -1
  40. package/dist/cjs/components/Menu/index.js.map +1 -1
  41. package/dist/cjs/components/ProgressTracker/ProgressTracker.css +273 -22
  42. package/dist/cjs/components/ProgressTracker/ProgressTracker.js +109 -9
  43. package/dist/cjs/components/ProgressTracker/ProgressTracker.js.map +1 -1
  44. package/dist/cjs/components/Scrollbar/Scrollbar.css +124 -0
  45. package/dist/cjs/components/Scrollbar/Scrollbar.js +118 -0
  46. package/dist/cjs/components/Scrollbar/Scrollbar.js.map +1 -0
  47. package/dist/cjs/components/Scrollbar/index.js +11 -0
  48. package/dist/cjs/components/Scrollbar/index.js.map +1 -0
  49. package/dist/cjs/components/index.js +13 -16
  50. package/dist/cjs/components/index.js.map +1 -1
  51. package/dist/esm/components/ActionSheet/ActionSheet.js +1 -1
  52. package/dist/esm/components/Breadcrumb/Breadcrumb.css +11 -3
  53. package/dist/esm/components/Breadcrumb/Breadcrumb.js +19 -1
  54. package/dist/esm/components/Breadcrumb/Breadcrumb.js.map +1 -1
  55. package/dist/esm/components/Combobox/Combobox.css +116 -132
  56. package/dist/esm/components/Combobox/Combobox.js +177 -54
  57. package/dist/esm/components/Combobox/Combobox.js.map +1 -1
  58. package/dist/esm/components/Combobox/index.js +1 -1
  59. package/dist/esm/components/Combobox/index.js.map +1 -1
  60. package/dist/esm/components/ContextSelect/ContextSelect.css +117 -0
  61. package/dist/esm/components/ContextSelect/ContextSelect.js +45 -0
  62. package/dist/esm/components/ContextSelect/ContextSelect.js.map +1 -0
  63. package/dist/esm/components/ContextSelect/index.js +3 -0
  64. package/dist/esm/components/ContextSelect/index.js.map +1 -0
  65. package/dist/esm/components/DropdownSelect/DropdownSelect.css +225 -0
  66. package/dist/esm/components/DropdownSelect/DropdownSelect.js +102 -0
  67. package/dist/esm/components/DropdownSelect/DropdownSelect.js.map +1 -0
  68. package/dist/esm/components/DropdownSelect/index.js +2 -0
  69. package/dist/esm/components/DropdownSelect/index.js.map +1 -0
  70. package/dist/esm/components/Icon/custom/ArrowDropUpDownIcon.js +7 -0
  71. package/dist/esm/components/Icon/custom/ArrowDropUpDownIcon.js.map +1 -0
  72. package/dist/esm/components/Icon/custom/ArrowReturnIcon.js +7 -0
  73. package/dist/esm/components/Icon/custom/ArrowReturnIcon.js.map +1 -0
  74. package/dist/esm/components/Icon/iconRegistry.js +11 -0
  75. package/dist/esm/components/Icon/iconRegistry.js.map +1 -1
  76. package/dist/esm/components/Input/Input.css +45 -8
  77. package/dist/esm/components/Input/Input.js +14 -3
  78. package/dist/esm/components/Input/Input.js.map +1 -1
  79. package/dist/esm/components/Menu/Menu.css +213 -17
  80. package/dist/esm/components/Menu/Menu.js +428 -40
  81. package/dist/esm/components/Menu/Menu.js.map +1 -1
  82. package/dist/esm/components/Menu/index.js +1 -1
  83. package/dist/esm/components/Menu/index.js.map +1 -1
  84. package/dist/esm/components/ProgressTracker/ProgressTracker.css +273 -22
  85. package/dist/esm/components/ProgressTracker/ProgressTracker.js +110 -10
  86. package/dist/esm/components/ProgressTracker/ProgressTracker.js.map +1 -1
  87. package/dist/esm/components/Scrollbar/Scrollbar.css +124 -0
  88. package/dist/esm/components/Scrollbar/Scrollbar.js +114 -0
  89. package/dist/esm/components/Scrollbar/Scrollbar.js.map +1 -0
  90. package/dist/esm/components/Scrollbar/index.js +3 -0
  91. package/dist/esm/components/Scrollbar/index.js.map +1 -0
  92. package/dist/esm/components/index.js +4 -2
  93. package/dist/esm/components/index.js.map +1 -1
  94. package/dist/styles/components/Breadcrumb.css +11 -3
  95. package/dist/styles/components/Combobox.css +116 -132
  96. package/dist/styles/components/ContextSelect.css +117 -0
  97. package/dist/styles/components/DropdownSelect.css +225 -0
  98. package/dist/styles/components/Input.css +45 -8
  99. package/dist/styles/components/Menu.css +213 -17
  100. package/dist/styles/components/ProgressTracker.css +273 -22
  101. package/dist/styles/components/Scrollbar.css +124 -0
  102. package/dist/styles/components/Typography.css +89 -0
  103. package/dist/styles/index.css +1526 -480
  104. package/dist/styles/muka-dark.css +1526 -480
  105. package/dist/styles/muka-light.css +1526 -480
  106. package/dist/styles/tokens-bouwplan-dark.css +9 -6
  107. package/dist/styles/tokens-bouwplan-light.css +9 -6
  108. package/dist/styles/tokens-fscl-dark.css +29 -26
  109. package/dist/styles/tokens-fscl-light.css +29 -26
  110. package/dist/styles/tokens-grip-dark.css +8 -5
  111. package/dist/styles/tokens-grip-light.css +8 -5
  112. package/dist/styles/tokens-muka-dark.css +8 -5
  113. package/dist/styles/tokens-muka-light.css +8 -5
  114. package/dist/styles/tokens-wireframe-dark.css +53 -50
  115. package/dist/styles/tokens-wireframe-light.css +53 -50
  116. package/dist/styles/wireframe-dark.css +1571 -525
  117. package/dist/styles/wireframe-light.css +1571 -525
  118. package/dist/types/components/ActionSheet/ActionSheet.d.ts +1 -1
  119. package/dist/types/components/Breadcrumb/Breadcrumb.d.ts +27 -3
  120. package/dist/types/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  121. package/dist/types/components/Combobox/Combobox.d.ts +38 -38
  122. package/dist/types/components/Combobox/Combobox.d.ts.map +1 -1
  123. package/dist/types/components/Combobox/index.d.ts +1 -1
  124. package/dist/types/components/Combobox/index.d.ts.map +1 -1
  125. package/dist/types/components/ContextSelect/ContextSelect.d.ts +62 -0
  126. package/dist/types/components/ContextSelect/ContextSelect.d.ts.map +1 -0
  127. package/dist/types/components/ContextSelect/index.d.ts +3 -0
  128. package/dist/types/components/ContextSelect/index.d.ts.map +1 -0
  129. package/dist/types/components/DataTable/DataTable.d.ts +1 -1
  130. package/dist/types/components/DropdownSelect/DropdownSelect.d.ts +71 -0
  131. package/dist/types/components/DropdownSelect/DropdownSelect.d.ts.map +1 -0
  132. package/dist/types/components/DropdownSelect/index.d.ts +2 -0
  133. package/dist/types/components/DropdownSelect/index.d.ts.map +1 -0
  134. package/dist/types/components/Icon/custom/ArrowDropUpDownIcon.d.ts +9 -0
  135. package/dist/types/components/Icon/custom/ArrowDropUpDownIcon.d.ts.map +1 -0
  136. package/dist/types/components/Icon/custom/ArrowReturnIcon.d.ts +9 -0
  137. package/dist/types/components/Icon/custom/ArrowReturnIcon.d.ts.map +1 -0
  138. package/dist/types/components/Icon/iconRegistry.d.ts.map +1 -1
  139. package/dist/types/components/Input/Input.d.ts +5 -0
  140. package/dist/types/components/Input/Input.d.ts.map +1 -1
  141. package/dist/types/components/Menu/Menu.d.ts +99 -29
  142. package/dist/types/components/Menu/Menu.d.ts.map +1 -1
  143. package/dist/types/components/Menu/index.d.ts +2 -2
  144. package/dist/types/components/Menu/index.d.ts.map +1 -1
  145. package/dist/types/components/ProgressTracker/ProgressTracker.d.ts +29 -8
  146. package/dist/types/components/ProgressTracker/ProgressTracker.d.ts.map +1 -1
  147. package/dist/types/components/Scrollbar/Scrollbar.d.ts +19 -0
  148. package/dist/types/components/Scrollbar/Scrollbar.d.ts.map +1 -0
  149. package/dist/types/components/Scrollbar/index.d.ts +3 -0
  150. package/dist/types/components/Scrollbar/index.d.ts.map +1 -0
  151. package/dist/types/components/index.d.ts +5 -4
  152. package/dist/types/components/index.d.ts.map +1 -1
  153. package/docs/consumers/README.md +116 -37
  154. package/docs/consumers/brand.md +261 -0
  155. package/docs/consumers/figma-console-mcp.md +116 -0
  156. package/docs/consumers/setup-instructions.md +98 -12
  157. package/docs/consumers/skills.md +79 -0
  158. package/package.json +4 -6
  159. package/scripts/postinstall-nudge.js +8 -4
  160. package/skills/add-brand/SKILL.md +204 -0
  161. package/skills/add-brand/reference.md +160 -0
  162. package/skills/figma-to-code/SKILL.md +127 -0
  163. package/skills/pull-from-figma/SKILL.md +123 -0
  164. package/skills/push-to-figma/SKILL.md +172 -0
  165. package/skills/setup-muka/SKILL.md +73 -13
  166. package/tokens/README.md +40 -18
  167. package/tokens/t2-alias/brand/bouwplan/fonts.json +1 -1
  168. package/tokens/t2-alias/brand/fscl/fonts.json +3 -3
  169. package/tokens/t2-alias/brand/wireframe/fonts.json +2 -2
  170. package/tokens/t4-components/menu.json +20 -5
  171. package/dist/cjs/components/ContextMenu/ContextMenu.js +0 -186
  172. package/dist/cjs/components/ContextMenu/ContextMenu.js.map +0 -1
  173. package/dist/cjs/components/ContextMenu/index.js +0 -17
  174. package/dist/cjs/components/ContextMenu/index.js.map +0 -1
  175. package/dist/esm/components/ContextMenu/ContextMenu.js +0 -145
  176. package/dist/esm/components/ContextMenu/ContextMenu.js.map +0 -1
  177. package/dist/esm/components/ContextMenu/index.js +0 -2
  178. package/dist/esm/components/ContextMenu/index.js.map +0 -1
  179. package/dist/types/components/ContextMenu/ContextMenu.d.ts +0 -188
  180. package/dist/types/components/ContextMenu/ContextMenu.d.ts.map +0 -1
  181. package/dist/types/components/ContextMenu/index.d.ts +0 -3
  182. package/dist/types/components/ContextMenu/index.d.ts.map +0 -1
@@ -3,14 +3,16 @@
3
3
  /* ─── Content Container ──────────────────────────────────────────────────── */
4
4
 
5
5
  .muka-menu__content {
6
+ display: flex;
7
+ flex-direction: column;
6
8
  min-width: var(--menu-content-min-width);
7
9
  max-height: var(--menu-content-max-height);
8
- overflow-y: auto;
10
+ overflow: hidden;
9
11
  background-color: var(--menu-content-color-background);
10
12
  border: var(--menu-content-border-width) solid var(--menu-content-color-border);
11
13
  border-radius: var(--menu-content-border-radius);
12
14
  box-shadow: var(--menu-content-shadow);
13
- padding: var(--menu-content-padding);
15
+ padding: 0;
14
16
  z-index: 50;
15
17
 
16
18
  /* Animation */
@@ -18,6 +20,132 @@
18
20
  animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
19
21
  }
20
22
 
23
+ .muka-menu__body {
24
+ display: flex;
25
+ flex: 1 1 auto;
26
+ min-height: 0;
27
+ align-items: stretch;
28
+ width: 100%;
29
+ }
30
+
31
+ .muka-menu__viewport {
32
+ flex: 1 1 auto;
33
+ min-width: 0;
34
+ min-height: 0;
35
+ overflow-y: auto;
36
+ padding: var(--menu-content-padding);
37
+ }
38
+
39
+ .muka-menu__content--scrollbar .muka-menu__viewport {
40
+ /* Custom scrollbar owns the chrome; hide native track */
41
+ scrollbar-width: none;
42
+ }
43
+
44
+ .muka-menu__content--scrollbar .muka-menu__viewport::-webkit-scrollbar {
45
+ display: none;
46
+ }
47
+
48
+ /* ─── Search header ──────────────────────────────────────────────────────── */
49
+
50
+ .muka-menu__search {
51
+ display: flex;
52
+ align-items: center;
53
+ flex-shrink: 0;
54
+ /* Figma dropdown filter header: 48px, 8px inset, 32px icon slots. */
55
+ height: var(--input-field-height-lg, 3rem);
56
+ padding: 0 var(--spacing-2);
57
+ border-bottom: var(--border-width-regular) solid var(--color-border-default);
58
+ }
59
+
60
+ .muka-menu__search--sm {
61
+ height: calc(var(--size-xl, 1.5rem) + var(--spacing-2) * 2);
62
+ }
63
+
64
+ .muka-menu__search-icon,
65
+ .muka-menu__search-clear {
66
+ display: flex;
67
+ align-items: center;
68
+ justify-content: center;
69
+ flex-shrink: 0;
70
+ width: var(--size-2xl, 2rem);
71
+ height: var(--size-2xl, 2rem);
72
+ color: var(--color-text-subtle-default);
73
+ }
74
+
75
+ .muka-menu__search-icon .muka-icon,
76
+ .muka-menu__search-clear .muka-icon,
77
+ .muka-menu__search-clear:hover,
78
+ .muka-menu__search-clear:hover .muka-icon {
79
+ color: var(--color-text-subtle-default);
80
+ }
81
+
82
+ .muka-menu__search--sm .muka-menu__search-icon,
83
+ .muka-menu__search--sm .muka-menu__search-clear {
84
+ width: var(--size-xl, 1.5rem);
85
+ height: var(--size-xl, 1.5rem);
86
+ }
87
+
88
+ .muka-menu__search-input {
89
+ flex: 1 1 auto;
90
+ min-width: 0;
91
+ border: none;
92
+ outline: none;
93
+ background: transparent;
94
+ padding: 0 var(--spacing-1);
95
+ font-family: var(--text-input-md-fontFamily);
96
+ font-size: var(--text-input-md-fontSize);
97
+ font-weight: var(--text-input-md-fontWeight);
98
+ line-height: var(--text-input-md-lineHeight);
99
+ color: var(--color-text-default-default);
100
+ }
101
+
102
+ .muka-menu__search--sm .muka-menu__search-input {
103
+ font-family: var(--text-input-sm-fontFamily);
104
+ font-size: var(--text-input-sm-fontSize);
105
+ font-weight: var(--text-input-sm-fontWeight);
106
+ line-height: var(--text-input-sm-lineHeight);
107
+ }
108
+
109
+ .muka-menu__search-input::placeholder {
110
+ color: var(--color-text-subtle-default);
111
+ }
112
+
113
+ .muka-menu__search-input::-webkit-search-cancel-button,
114
+ .muka-menu__search-input::-webkit-search-decoration {
115
+ -webkit-appearance: none;
116
+ appearance: none;
117
+ }
118
+
119
+ .muka-menu__empty {
120
+ display: flex;
121
+ align-items: center;
122
+ min-height: var(--menu-item-height);
123
+ padding: var(--menu-item-padding-y) var(--menu-item-padding-x);
124
+ color: var(--color-text-subtle-default);
125
+ font-family: var(--text-input-md-fontFamily);
126
+ font-size: var(--text-input-md-fontSize);
127
+ font-weight: var(--text-input-md-fontWeight);
128
+ line-height: var(--text-input-md-lineHeight);
129
+ pointer-events: none;
130
+ user-select: none;
131
+ }
132
+
133
+ .muka-menu__search-clear {
134
+ padding: 0;
135
+ border: none;
136
+ background: transparent;
137
+ cursor: pointer;
138
+ }
139
+
140
+ .muka-menu__match {
141
+ font-weight: var(--font-weight-bold, 700);
142
+ }
143
+
144
+ .muka-menu__content--scrollbar {
145
+ height: var(--menu-content-scroll-height, 20.625rem);
146
+ max-height: var(--menu-content-scroll-height, 20.625rem);
147
+ }
148
+
21
149
  .muka-menu__content[data-state='open'] {
22
150
  animation-name: muka-menu-fade-in;
23
151
  }
@@ -45,22 +173,26 @@
45
173
  /* ─── Menu Item ──────────────────────────────────────────────────────────── */
46
174
 
47
175
  .muka-menu__item {
176
+ position: relative;
48
177
  display: flex;
49
178
  align-items: center;
50
179
  gap: var(--menu-item-gap);
51
180
  min-height: var(--menu-item-height);
52
- padding: var(--menu-item-padding-y) var(--menu-item-padding-x);
181
+ /* Right gutter always reserved for floating trailers (enter / check). */
182
+ padding: var(--menu-item-padding-y) var(--menu-item-padding-right) var(--menu-item-padding-y)
183
+ var(--menu-item-padding-x);
53
184
  border-radius: var(--menu-item-border-radius);
54
185
  cursor: pointer;
55
186
  user-select: none;
56
187
  outline: none;
57
- font-family: var(--text-label-md-regular-font-family);
58
- font-size: var(--text-label-md-regular-font-size);
59
- font-weight: var(--text-label-md-regular-font-weight);
60
- line-height: var(--text-label-md-regular-line-height);
188
+ font-family: var(--text-label-md-regular-fontFamily);
189
+ font-size: var(--text-label-md-regular-fontSize);
190
+ font-weight: var(--text-label-md-regular-fontWeight);
191
+ line-height: var(--text-label-md-regular-lineHeight);
61
192
  color: var(--menu-item-color-default-foreground);
62
193
  background-color: var(--menu-item-color-default-background);
63
194
  transition: background-color 100ms ease, color 100ms ease;
195
+ white-space: nowrap;
64
196
  }
65
197
 
66
198
  .muka-menu__item:hover,
@@ -126,25 +258,55 @@
126
258
  }
127
259
 
128
260
  .muka-menu__item-label {
129
- flex: 1;
261
+ flex: 1 1 auto;
130
262
  min-width: 0;
263
+ white-space: nowrap;
264
+ }
265
+
266
+ /* Shortcut trailers replace icons and sit with an 8px right inset. */
267
+ .muka-menu__item--has-shortcut {
268
+ padding-right: var(--spacing-2);
131
269
  }
132
270
 
133
271
  .muka-menu__item-shortcut {
134
272
  flex-shrink: 0;
135
273
  margin-left: auto;
136
274
  padding-left: var(--menu-item-gap);
137
- font-size: var(--text-label-sm-regular-font-size);
138
- color: var(--menu-shortcut-color);
139
- opacity: 0.7;
275
+ font-family: var(--text-label-sm-regular-fontFamily);
276
+ font-size: var(--text-label-sm-regular-fontSize);
277
+ font-weight: var(--text-label-sm-regular-fontWeight);
278
+ line-height: var(--text-label-sm-regular-lineHeight);
279
+ color: var(--color-text-muted-default);
280
+ white-space: nowrap;
281
+ }
282
+
283
+ .muka-menu__item-hint {
284
+ /* Figma: trailer sits with 8px margin top / right / bottom; 24px glyph centered inside. */
285
+ position: absolute;
286
+ top: var(--spacing-2);
287
+ right: var(--spacing-2);
288
+ bottom: var(--spacing-2);
289
+ display: none;
290
+ align-items: center;
291
+ justify-content: center;
292
+ width: var(--icon-size-default, 1.5rem);
293
+ color: var(--color-text-muted-default);
294
+ pointer-events: none;
295
+ }
296
+
297
+ .muka-menu__item--hint-enter[data-highlighted] .muka-menu__item-hint {
298
+ display: flex;
140
299
  }
141
300
 
142
301
  .muka-menu__item-chevron {
302
+ position: absolute;
303
+ top: var(--spacing-2);
304
+ right: var(--spacing-2);
305
+ bottom: var(--spacing-2);
143
306
  display: flex;
144
307
  align-items: center;
145
308
  justify-content: center;
146
- flex-shrink: 0;
147
- margin-left: auto;
309
+ width: var(--icon-size-default, 1.5rem);
148
310
  color: var(--menu-shortcut-color);
149
311
  }
150
312
 
@@ -165,6 +327,40 @@
165
327
  padding-left: var(--menu-item-padding-x);
166
328
  }
167
329
 
330
+ .muka-menu__item--checkbox-trailing,
331
+ .muka-menu__item--radio-check {
332
+ /* Same reserved right gutter as default items — trailing indicator floats. */
333
+ padding-right: var(--menu-item-padding-right);
334
+ }
335
+
336
+ .muka-menu__item--radio-check[data-state='checked'] {
337
+ background-color: var(--menu-item-color-selected-background);
338
+ }
339
+
340
+ .muka-menu__item-indicator--trailing {
341
+ /* Match enter-hint trailer: 8px inset, 24px box (override leading indicator size). */
342
+ position: absolute;
343
+ top: var(--spacing-2);
344
+ right: var(--spacing-2);
345
+ bottom: var(--spacing-2);
346
+ display: flex;
347
+ align-items: center;
348
+ justify-content: center;
349
+ width: var(--icon-size-default, 1.5rem);
350
+ height: auto;
351
+ max-height: none;
352
+ transform: none;
353
+ color: var(--color-text-subtle-default);
354
+ }
355
+
356
+ .muka-menu__item-indicator--trailing > [data-state] {
357
+ display: flex;
358
+ align-items: center;
359
+ justify-content: center;
360
+ width: 100%;
361
+ height: 100%;
362
+ }
363
+
168
364
  .muka-menu__radio-dot {
169
365
  width: 8px;
170
366
  height: 8px;
@@ -188,10 +384,10 @@
188
384
 
189
385
  .muka-menu__group-label {
190
386
  padding: var(--menu-group-label-padding-y) var(--menu-group-label-padding-x);
191
- font-family: var(--text-label-sm-semibold-font-family);
192
- font-size: var(--text-label-sm-semibold-font-size);
193
- font-weight: var(--text-label-sm-semibold-font-weight);
194
- line-height: var(--text-label-sm-semibold-line-height);
387
+ font-family: var(--text-label-sm-semibold-fontFamily);
388
+ font-size: var(--text-label-sm-semibold-fontSize);
389
+ font-weight: var(--text-label-sm-semibold-fontWeight);
390
+ line-height: var(--text-label-sm-semibold-lineHeight);
195
391
  color: var(--menu-group-label-color);
196
392
  text-transform: uppercase;
197
393
  letter-spacing: 0.05em;
@@ -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
+ }