@revikornmann/muka-ui 0.18.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 (118) 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/Combobox/Combobox.css +116 -132
  10. package/dist/cjs/components/Combobox/Combobox.js +175 -52
  11. package/dist/cjs/components/Combobox/Combobox.js.map +1 -1
  12. package/dist/cjs/components/Combobox/index.js.map +1 -1
  13. package/dist/cjs/components/DropdownSelect/DropdownSelect.css +225 -0
  14. package/dist/cjs/components/DropdownSelect/DropdownSelect.js +106 -0
  15. package/dist/cjs/components/DropdownSelect/DropdownSelect.js.map +1 -0
  16. package/dist/cjs/components/DropdownSelect/index.js +6 -0
  17. package/dist/cjs/components/DropdownSelect/index.js.map +1 -0
  18. package/dist/cjs/components/Icon/custom/ArrowReturnIcon.js +11 -0
  19. package/dist/cjs/components/Icon/custom/ArrowReturnIcon.js.map +1 -0
  20. package/dist/cjs/components/Icon/iconRegistry.js +5 -0
  21. package/dist/cjs/components/Icon/iconRegistry.js.map +1 -1
  22. package/dist/cjs/components/Input/Input.css +45 -8
  23. package/dist/cjs/components/Input/Input.js +14 -3
  24. package/dist/cjs/components/Input/Input.js.map +1 -1
  25. package/dist/cjs/components/Menu/Menu.css +123 -37
  26. package/dist/cjs/components/Menu/Menu.js +283 -25
  27. package/dist/cjs/components/Menu/Menu.js.map +1 -1
  28. package/dist/cjs/components/ProgressTracker/ProgressTracker.css +273 -22
  29. package/dist/cjs/components/ProgressTracker/ProgressTracker.js +109 -9
  30. package/dist/cjs/components/ProgressTracker/ProgressTracker.js.map +1 -1
  31. package/dist/cjs/components/Scrollbar/Scrollbar.css +7 -6
  32. package/dist/cjs/components/index.js +5 -3
  33. package/dist/cjs/components/index.js.map +1 -1
  34. package/dist/esm/components/Combobox/Combobox.css +116 -132
  35. package/dist/esm/components/Combobox/Combobox.js +177 -54
  36. package/dist/esm/components/Combobox/Combobox.js.map +1 -1
  37. package/dist/esm/components/Combobox/index.js +1 -1
  38. package/dist/esm/components/Combobox/index.js.map +1 -1
  39. package/dist/esm/components/DropdownSelect/DropdownSelect.css +225 -0
  40. package/dist/esm/components/DropdownSelect/DropdownSelect.js +102 -0
  41. package/dist/esm/components/DropdownSelect/DropdownSelect.js.map +1 -0
  42. package/dist/esm/components/DropdownSelect/index.js +2 -0
  43. package/dist/esm/components/DropdownSelect/index.js.map +1 -0
  44. package/dist/esm/components/Icon/custom/ArrowReturnIcon.js +7 -0
  45. package/dist/esm/components/Icon/custom/ArrowReturnIcon.js.map +1 -0
  46. package/dist/esm/components/Icon/iconRegistry.js +5 -0
  47. package/dist/esm/components/Icon/iconRegistry.js.map +1 -1
  48. package/dist/esm/components/Input/Input.css +45 -8
  49. package/dist/esm/components/Input/Input.js +14 -3
  50. package/dist/esm/components/Input/Input.js.map +1 -1
  51. package/dist/esm/components/Menu/Menu.css +123 -37
  52. package/dist/esm/components/Menu/Menu.js +284 -26
  53. package/dist/esm/components/Menu/Menu.js.map +1 -1
  54. package/dist/esm/components/ProgressTracker/ProgressTracker.css +273 -22
  55. package/dist/esm/components/ProgressTracker/ProgressTracker.js +110 -10
  56. package/dist/esm/components/ProgressTracker/ProgressTracker.js.map +1 -1
  57. package/dist/esm/components/Scrollbar/Scrollbar.css +7 -6
  58. package/dist/esm/components/index.js +1 -0
  59. package/dist/esm/components/index.js.map +1 -1
  60. package/dist/styles/components/Combobox.css +116 -132
  61. package/dist/styles/components/DropdownSelect.css +225 -0
  62. package/dist/styles/components/Input.css +45 -8
  63. package/dist/styles/components/Menu.css +123 -37
  64. package/dist/styles/components/ProgressTracker.css +273 -22
  65. package/dist/styles/components/Scrollbar.css +7 -6
  66. package/dist/styles/components/Typography.css +89 -0
  67. package/dist/styles/index.css +1285 -605
  68. package/dist/styles/muka-dark.css +1285 -605
  69. package/dist/styles/muka-light.css +1285 -605
  70. package/dist/styles/tokens-bouwplan-dark.css +5 -4
  71. package/dist/styles/tokens-bouwplan-light.css +5 -4
  72. package/dist/styles/tokens-fscl-dark.css +25 -24
  73. package/dist/styles/tokens-fscl-light.css +25 -24
  74. package/dist/styles/tokens-grip-dark.css +4 -3
  75. package/dist/styles/tokens-grip-light.css +4 -3
  76. package/dist/styles/tokens-muka-dark.css +4 -3
  77. package/dist/styles/tokens-muka-light.css +4 -3
  78. package/dist/styles/tokens-wireframe-dark.css +49 -48
  79. package/dist/styles/tokens-wireframe-light.css +49 -48
  80. package/dist/styles/wireframe-dark.css +1330 -650
  81. package/dist/styles/wireframe-light.css +1330 -650
  82. package/dist/types/components/Combobox/Combobox.d.ts +38 -38
  83. package/dist/types/components/Combobox/Combobox.d.ts.map +1 -1
  84. package/dist/types/components/Combobox/index.d.ts +1 -1
  85. package/dist/types/components/Combobox/index.d.ts.map +1 -1
  86. package/dist/types/components/DropdownSelect/DropdownSelect.d.ts +71 -0
  87. package/dist/types/components/DropdownSelect/DropdownSelect.d.ts.map +1 -0
  88. package/dist/types/components/DropdownSelect/index.d.ts +2 -0
  89. package/dist/types/components/DropdownSelect/index.d.ts.map +1 -0
  90. package/dist/types/components/Icon/custom/ArrowReturnIcon.d.ts +9 -0
  91. package/dist/types/components/Icon/custom/ArrowReturnIcon.d.ts.map +1 -0
  92. package/dist/types/components/Icon/iconRegistry.d.ts.map +1 -1
  93. package/dist/types/components/Input/Input.d.ts +5 -0
  94. package/dist/types/components/Input/Input.d.ts.map +1 -1
  95. package/dist/types/components/Menu/Menu.d.ts +42 -2
  96. package/dist/types/components/Menu/Menu.d.ts.map +1 -1
  97. package/dist/types/components/ProgressTracker/ProgressTracker.d.ts +29 -8
  98. package/dist/types/components/ProgressTracker/ProgressTracker.d.ts.map +1 -1
  99. package/dist/types/components/index.d.ts +1 -0
  100. package/dist/types/components/index.d.ts.map +1 -1
  101. package/docs/consumers/README.md +116 -37
  102. package/docs/consumers/brand.md +261 -0
  103. package/docs/consumers/figma-console-mcp.md +116 -0
  104. package/docs/consumers/setup-instructions.md +98 -12
  105. package/docs/consumers/skills.md +79 -0
  106. package/package.json +4 -6
  107. package/scripts/postinstall-nudge.js +8 -4
  108. package/skills/add-brand/SKILL.md +204 -0
  109. package/skills/add-brand/reference.md +160 -0
  110. package/skills/figma-to-code/SKILL.md +127 -0
  111. package/skills/pull-from-figma/SKILL.md +123 -0
  112. package/skills/push-to-figma/SKILL.md +172 -0
  113. package/skills/setup-muka/SKILL.md +73 -13
  114. package/tokens/README.md +39 -17
  115. package/tokens/t2-alias/brand/bouwplan/fonts.json +1 -1
  116. package/tokens/t2-alias/brand/fscl/fonts.json +3 -3
  117. package/tokens/t2-alias/brand/wireframe/fonts.json +2 -2
  118. package/tokens/t4-components/menu.json +8 -3
@@ -50,32 +50,62 @@
50
50
  .muka-menu__search {
51
51
  display: flex;
52
52
  align-items: center;
53
- gap: var(--spacing-2);
54
53
  flex-shrink: 0;
55
- height: var(--size-3xl, 48px);
56
- padding: 0 var(--spacing-4);
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
57
  border-bottom: var(--border-width-regular) solid var(--color-border-default);
58
58
  }
59
59
 
60
- .muka-menu__search-icon {
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 {
61
66
  display: flex;
67
+ align-items: center;
68
+ justify-content: center;
62
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 {
63
79
  color: var(--color-text-subtle-default);
64
80
  }
65
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
+
66
88
  .muka-menu__search-input {
67
89
  flex: 1 1 auto;
68
90
  min-width: 0;
69
91
  border: none;
70
92
  outline: none;
71
93
  background: transparent;
72
- font-family: var(--text-label-md-regular-font-family);
73
- font-size: var(--text-label-md-regular-font-size);
74
- font-weight: var(--text-label-md-regular-font-weight);
75
- line-height: var(--text-label-md-regular-line-height);
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);
76
99
  color: var(--color-text-default-default);
77
100
  }
78
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
+
79
109
  .muka-menu__search-input::placeholder {
80
110
  color: var(--color-text-subtle-default);
81
111
  }
@@ -86,22 +116,27 @@
86
116
  appearance: none;
87
117
  }
88
118
 
89
- .muka-menu__search-clear {
119
+ .muka-menu__empty {
90
120
  display: flex;
91
121
  align-items: center;
92
- justify-content: center;
93
- flex-shrink: 0;
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 {
94
134
  padding: 0;
95
135
  border: none;
96
136
  background: transparent;
97
- color: var(--color-text-subtle-default);
98
137
  cursor: pointer;
99
138
  }
100
139
 
101
- .muka-menu__search-clear:hover {
102
- color: var(--color-text-default-default);
103
- }
104
-
105
140
  .muka-menu__match {
106
141
  font-weight: var(--font-weight-bold, 700);
107
142
  }
@@ -138,22 +173,26 @@
138
173
  /* ─── Menu Item ──────────────────────────────────────────────────────────── */
139
174
 
140
175
  .muka-menu__item {
176
+ position: relative;
141
177
  display: flex;
142
178
  align-items: center;
143
179
  gap: var(--menu-item-gap);
144
180
  min-height: var(--menu-item-height);
145
- 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);
146
184
  border-radius: var(--menu-item-border-radius);
147
185
  cursor: pointer;
148
186
  user-select: none;
149
187
  outline: none;
150
- font-family: var(--text-label-md-regular-font-family);
151
- font-size: var(--text-label-md-regular-font-size);
152
- font-weight: var(--text-label-md-regular-font-weight);
153
- 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);
154
192
  color: var(--menu-item-color-default-foreground);
155
193
  background-color: var(--menu-item-color-default-background);
156
194
  transition: background-color 100ms ease, color 100ms ease;
195
+ white-space: nowrap;
157
196
  }
158
197
 
159
198
  .muka-menu__item:hover,
@@ -219,25 +258,55 @@
219
258
  }
220
259
 
221
260
  .muka-menu__item-label {
222
- flex: 1;
261
+ flex: 1 1 auto;
223
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);
224
269
  }
225
270
 
226
271
  .muka-menu__item-shortcut {
227
272
  flex-shrink: 0;
228
273
  margin-left: auto;
229
274
  padding-left: var(--menu-item-gap);
230
- font-size: var(--text-label-sm-regular-font-size);
231
- color: var(--menu-shortcut-color);
232
- 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;
233
299
  }
234
300
 
235
301
  .muka-menu__item-chevron {
302
+ position: absolute;
303
+ top: var(--spacing-2);
304
+ right: var(--spacing-2);
305
+ bottom: var(--spacing-2);
236
306
  display: flex;
237
307
  align-items: center;
238
308
  justify-content: center;
239
- flex-shrink: 0;
240
- margin-left: auto;
309
+ width: var(--icon-size-default, 1.5rem);
241
310
  color: var(--menu-shortcut-color);
242
311
  }
243
312
 
@@ -258,9 +327,10 @@
258
327
  padding-left: var(--menu-item-padding-x);
259
328
  }
260
329
 
330
+ .muka-menu__item--checkbox-trailing,
261
331
  .muka-menu__item--radio-check {
262
- position: relative;
263
- padding-right: calc(var(--menu-item-padding-x) + var(--menu-checkbox-indicator-size) + var(--menu-item-gap));
332
+ /* Same reserved right gutter as default items — trailing indicator floats. */
333
+ padding-right: var(--menu-item-padding-right);
264
334
  }
265
335
 
266
336
  .muka-menu__item--radio-check[data-state='checked'] {
@@ -268,11 +338,27 @@
268
338
  }
269
339
 
270
340
  .muka-menu__item-indicator--trailing {
341
+ /* Match enter-hint trailer: 8px inset, 24px box (override leading indicator size). */
271
342
  position: absolute;
272
- right: var(--menu-item-padding-x);
273
- top: 50%;
274
- transform: translateY(-50%);
275
- color: var(--menu-checkbox-indicator-color);
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%;
276
362
  }
277
363
 
278
364
  .muka-menu__radio-dot {
@@ -298,10 +384,10 @@
298
384
 
299
385
  .muka-menu__group-label {
300
386
  padding: var(--menu-group-label-padding-y) var(--menu-group-label-padding-x);
301
- font-family: var(--text-label-sm-semibold-font-family);
302
- font-size: var(--text-label-sm-semibold-font-size);
303
- font-weight: var(--text-label-sm-semibold-font-weight);
304
- 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);
305
391
  color: var(--menu-group-label-color);
306
392
  text-transform: uppercase;
307
393
  letter-spacing: 0.05em;