@revikornmann/muka-ui 0.6.0 → 0.8.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 (100) hide show
  1. package/dist/cjs/components/Alert/Alert.css +7 -0
  2. package/dist/cjs/components/DataPieChart/DataPieChart.css +29 -0
  3. package/dist/cjs/components/DataPieChart/DataPieChart.js +20 -3
  4. package/dist/cjs/components/DataPieChart/DataPieChart.js.map +1 -1
  5. package/dist/cjs/components/Dialog/Dialog.js +64 -7
  6. package/dist/cjs/components/Dialog/Dialog.js.map +1 -1
  7. package/dist/cjs/components/NavigationTransition/NavigationTransition.js +25 -8
  8. package/dist/cjs/components/NavigationTransition/NavigationTransition.js.map +1 -1
  9. package/dist/cjs/components/PhotoUploader/PhotoUploader.css +125 -0
  10. package/dist/cjs/components/PhotoUploader/PhotoUploader.js +257 -0
  11. package/dist/cjs/components/PhotoUploader/PhotoUploader.js.map +1 -0
  12. package/dist/cjs/components/PhotoUploader/index.js +6 -0
  13. package/dist/cjs/components/PhotoUploader/index.js.map +1 -0
  14. package/dist/cjs/components/ProgressAccordeon/ProgressAccordeon.css +32 -2
  15. package/dist/cjs/components/ProgressAccordeon/ProgressAccordeon.js +13 -2
  16. package/dist/cjs/components/ProgressAccordeon/ProgressAccordeon.js.map +1 -1
  17. package/dist/cjs/components/SpecList/SpecList.css +34 -21
  18. package/dist/cjs/components/SpecList/SpecList.js +9 -3
  19. package/dist/cjs/components/SpecList/SpecList.js.map +1 -1
  20. package/dist/cjs/components/Thumbnail/Thumbnail.css +171 -0
  21. package/dist/cjs/components/Thumbnail/Thumbnail.js +55 -0
  22. package/dist/cjs/components/Thumbnail/Thumbnail.js.map +1 -0
  23. package/dist/cjs/components/Thumbnail/index.js +6 -0
  24. package/dist/cjs/components/Thumbnail/index.js.map +1 -0
  25. package/dist/cjs/components/index.js +5 -1
  26. package/dist/cjs/components/index.js.map +1 -1
  27. package/dist/esm/components/Alert/Alert.css +7 -0
  28. package/dist/esm/components/DataPieChart/DataPieChart.css +29 -0
  29. package/dist/esm/components/DataPieChart/DataPieChart.js +20 -3
  30. package/dist/esm/components/DataPieChart/DataPieChart.js.map +1 -1
  31. package/dist/esm/components/Dialog/Dialog.js +31 -7
  32. package/dist/esm/components/Dialog/Dialog.js.map +1 -1
  33. package/dist/esm/components/NavigationTransition/NavigationTransition.js +25 -8
  34. package/dist/esm/components/NavigationTransition/NavigationTransition.js.map +1 -1
  35. package/dist/esm/components/PhotoUploader/PhotoUploader.css +125 -0
  36. package/dist/esm/components/PhotoUploader/PhotoUploader.js +254 -0
  37. package/dist/esm/components/PhotoUploader/PhotoUploader.js.map +1 -0
  38. package/dist/esm/components/PhotoUploader/index.js +2 -0
  39. package/dist/esm/components/PhotoUploader/index.js.map +1 -0
  40. package/dist/esm/components/ProgressAccordeon/ProgressAccordeon.css +32 -2
  41. package/dist/esm/components/ProgressAccordeon/ProgressAccordeon.js +13 -2
  42. package/dist/esm/components/ProgressAccordeon/ProgressAccordeon.js.map +1 -1
  43. package/dist/esm/components/SpecList/SpecList.css +34 -21
  44. package/dist/esm/components/SpecList/SpecList.js +9 -3
  45. package/dist/esm/components/SpecList/SpecList.js.map +1 -1
  46. package/dist/esm/components/Thumbnail/Thumbnail.css +171 -0
  47. package/dist/esm/components/Thumbnail/Thumbnail.js +52 -0
  48. package/dist/esm/components/Thumbnail/Thumbnail.js.map +1 -0
  49. package/dist/esm/components/Thumbnail/index.js +2 -0
  50. package/dist/esm/components/Thumbnail/index.js.map +1 -0
  51. package/dist/esm/components/index.js +2 -0
  52. package/dist/esm/components/index.js.map +1 -1
  53. package/dist/styles/components/Alert.css +7 -0
  54. package/dist/styles/components/DataPieChart.css +29 -0
  55. package/dist/styles/components/PhotoUploader.css +125 -0
  56. package/dist/styles/components/ProgressAccordeon.css +32 -2
  57. package/dist/styles/components/SpecList.css +34 -21
  58. package/dist/styles/components/Thumbnail.css +171 -0
  59. package/dist/styles/index.css +867 -449
  60. package/dist/styles/muka-dark.css +867 -449
  61. package/dist/styles/muka-light.css +867 -449
  62. package/dist/styles/tokens-bouwplan-dark.css +37 -0
  63. package/dist/styles/tokens-bouwplan-light.css +37 -0
  64. package/dist/styles/tokens-fscl-dark.css +37 -0
  65. package/dist/styles/tokens-fscl-light.css +37 -0
  66. package/dist/styles/tokens-grip-dark.css +37 -0
  67. package/dist/styles/tokens-grip-light.css +37 -0
  68. package/dist/styles/tokens-muka-dark.css +37 -0
  69. package/dist/styles/tokens-muka-light.css +37 -0
  70. package/dist/styles/tokens-wireframe-dark.css +37 -0
  71. package/dist/styles/tokens-wireframe-light.css +37 -0
  72. package/dist/styles/wireframe-dark.css +867 -449
  73. package/dist/styles/wireframe-light.css +867 -449
  74. package/dist/types/components/DataPieChart/DataPieChart.d.ts +7 -0
  75. package/dist/types/components/DataPieChart/DataPieChart.d.ts.map +1 -1
  76. package/dist/types/components/Dialog/Dialog.d.ts.map +1 -1
  77. package/dist/types/components/FileUpload/FileUpload.d.ts +1 -1
  78. package/dist/types/components/FileUpload/FileUpload.d.ts.map +1 -1
  79. package/dist/types/components/FileUpload/FileUploadItem.d.ts +1 -1
  80. package/dist/types/components/FileUpload/FileUploadItem.d.ts.map +1 -1
  81. package/dist/types/components/NavigationTransition/NavigationTransition.d.ts +3 -1
  82. package/dist/types/components/NavigationTransition/NavigationTransition.d.ts.map +1 -1
  83. package/dist/types/components/PhotoUploader/PhotoUploader.d.ts +71 -0
  84. package/dist/types/components/PhotoUploader/PhotoUploader.d.ts.map +1 -0
  85. package/dist/types/components/PhotoUploader/index.d.ts +2 -0
  86. package/dist/types/components/PhotoUploader/index.d.ts.map +1 -0
  87. package/dist/types/components/ProgressAccordeon/ProgressAccordeon.d.ts.map +1 -1
  88. package/dist/types/components/SpecList/SpecList.d.ts +13 -5
  89. package/dist/types/components/SpecList/SpecList.d.ts.map +1 -1
  90. package/dist/types/components/Thumbnail/Thumbnail.d.ts +77 -0
  91. package/dist/types/components/Thumbnail/Thumbnail.d.ts.map +1 -0
  92. package/dist/types/components/Thumbnail/index.d.ts +2 -0
  93. package/dist/types/components/Thumbnail/index.d.ts.map +1 -0
  94. package/dist/types/components/index.d.ts +2 -0
  95. package/dist/types/components/index.d.ts.map +1 -1
  96. package/package.json +1 -1
  97. package/scripts/build-tokens.js +12 -1
  98. package/tokens/t1-primitives/motion.json +21 -0
  99. package/tokens/t2-alias/base.json +17 -0
  100. package/tokens/t3-semantics/ui.json +12 -0
@@ -0,0 +1,171 @@
1
+ /* Thumbnail Component Styles - Using Muka Design Tokens */
2
+
3
+ .muka-thumbnail {
4
+ position: relative;
5
+ flex-shrink: 0;
6
+ }
7
+
8
+ /* The frame carries the border, background and shape clip. Keeping it separate
9
+ from the root lets the remove (×) button sit outside the clip (needed for the
10
+ circular/ellipse shape, whose corners would otherwise clip the button). */
11
+ .muka-thumbnail__frame {
12
+ position: absolute;
13
+ inset: 0;
14
+ overflow: hidden;
15
+ border: var(--border-width-regular, 1px) solid var(--color-black-alpha-3);
16
+ border-radius: var(--border-radius-lg);
17
+ background-color: var(--color-surface-level1);
18
+ }
19
+
20
+ /* ─── Shapes ──────────────────────────────────────────── */
21
+ .muka-thumbnail--4-3 {
22
+ width: 160px;
23
+ height: 120px;
24
+ }
25
+
26
+ .muka-thumbnail--1-1 {
27
+ width: 120px;
28
+ height: 120px;
29
+ }
30
+
31
+ .muka-thumbnail--ellipse {
32
+ width: 120px;
33
+ height: 120px;
34
+ }
35
+
36
+ .muka-thumbnail--ellipse .muka-thumbnail__frame {
37
+ border-radius: var(--border-radius-full);
38
+ }
39
+
40
+ /* Image fills the frame, cropped to cover. Sits at scale(1) by default so the
41
+ interactive hover zoom has a clean origin. */
42
+ .muka-thumbnail__image {
43
+ position: absolute;
44
+ inset: 0;
45
+ width: 100%;
46
+ height: 100%;
47
+ object-fit: cover;
48
+ display: block;
49
+ transform-origin: center;
50
+ /* Micro-interaction: hover zoom eases out over the "micro" duration. */
51
+ transition: transform var(--motion-duration-micro) var(--motion-easing-enter);
52
+ }
53
+
54
+ /* ─── Interactive (click-to-enlarge) ──────────────────── */
55
+ .muka-thumbnail__trigger {
56
+ position: absolute;
57
+ inset: 0;
58
+ padding: 0;
59
+ border: 0;
60
+ background: none;
61
+ cursor: pointer;
62
+ overflow: hidden;
63
+ }
64
+
65
+ .muka-thumbnail__trigger:focus-visible {
66
+ outline: 2px solid var(--color-border-focus);
67
+ outline-offset: -2px;
68
+ }
69
+
70
+ /* On hover the image scales up ~8px (160px → 168px) with an ease-out feel. */
71
+ .muka-thumbnail--interactive:hover .muka-thumbnail__image {
72
+ transform: scale(1.05);
73
+ }
74
+
75
+ /* ─── Loading overlay + progress donut ────────────────── */
76
+ .muka-thumbnail__overlay {
77
+ position: absolute;
78
+ inset: 0;
79
+ display: flex;
80
+ align-items: center;
81
+ justify-content: center;
82
+ background-color: var(--dialog-color-backdrop);
83
+ }
84
+
85
+ .muka-thumbnail__progress {
86
+ width: 40px;
87
+ height: 40px;
88
+ }
89
+
90
+ /* ─── Error / corrupt state ───────────────────────────── */
91
+ .muka-thumbnail--error .muka-thumbnail__frame {
92
+ background-color: var(--alias-color-state-error-muted);
93
+ border-color: var(--alias-color-state-error-default);
94
+ }
95
+
96
+ .muka-thumbnail__error {
97
+ position: absolute;
98
+ inset: 0;
99
+ display: flex;
100
+ flex-direction: column;
101
+ align-items: center;
102
+ justify-content: center;
103
+ gap: var(--spacing-2);
104
+ padding: var(--spacing-3);
105
+ text-align: center;
106
+ }
107
+
108
+ .muka-thumbnail__error-icon {
109
+ color: var(--alert-color-error-accent);
110
+ }
111
+
112
+ .muka-thumbnail__caption {
113
+ max-width: 100%;
114
+ overflow: hidden;
115
+ text-overflow: ellipsis;
116
+ white-space: nowrap;
117
+ color: var(--alert-color-error-accent);
118
+ font-family: var(--text-body-sm-regular-fontFamily);
119
+ font-size: var(--text-body-sm-regular-fontSize);
120
+ font-weight: var(--text-body-sm-regular-fontWeight);
121
+ line-height: var(--text-body-sm-regular-lineHeight);
122
+ }
123
+
124
+ /* ─── Remove (×) button ───────────────────────────────── */
125
+ .muka-thumbnail__remove {
126
+ position: absolute;
127
+ top: var(--spacing-2);
128
+ right: var(--spacing-2);
129
+ display: flex;
130
+ align-items: center;
131
+ justify-content: center;
132
+ width: var(--size-2xl);
133
+ height: var(--size-2xl);
134
+ padding: 0;
135
+ color: var(--button-color-tertiary-foreground-default);
136
+ background-color: var(--button-color-tertiary-background-default);
137
+ border: var(--border-width-regular, 1px) solid var(--button-color-tertiary-border-default);
138
+ border-radius: var(--border-radius-lg);
139
+ cursor: pointer;
140
+ transition: background-color var(--motion-duration-micro) var(--motion-easing-enter),
141
+ border-color var(--motion-duration-micro) var(--motion-easing-enter);
142
+ }
143
+
144
+ .muka-thumbnail__remove:hover {
145
+ color: var(--button-color-tertiary-foreground-hover);
146
+ background-color: var(--button-color-tertiary-background-hover);
147
+ border-color: var(--button-color-tertiary-border-hover);
148
+ }
149
+
150
+ .muka-thumbnail__remove:active {
151
+ color: var(--button-color-tertiary-foreground-pressed);
152
+ background-color: var(--button-color-tertiary-background-pressed);
153
+ border-color: var(--button-color-tertiary-border-pressed);
154
+ }
155
+
156
+ .muka-thumbnail__remove:focus-visible {
157
+ outline: 2px solid var(--color-border-focus);
158
+ outline-offset: 2px;
159
+ }
160
+
161
+ /* ─── Reduced motion ──────────────────────────────────── */
162
+ @media (prefers-reduced-motion: reduce) {
163
+ .muka-thumbnail__image,
164
+ .muka-thumbnail__remove {
165
+ transition: none;
166
+ }
167
+
168
+ .muka-thumbnail--interactive:hover .muka-thumbnail__image {
169
+ transform: none;
170
+ }
171
+ }
@@ -0,0 +1,52 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { forwardRef } from 'react';
4
+ import { DataPieChart } from '../DataPieChart';
5
+ import { Icon } from '../Icon';
6
+ import './Thumbnail.css';
7
+ /**
8
+ * Thumbnail Component
9
+ *
10
+ * A single uploaded-photo tile used by `PhotoUploader`. Shows an image cropped
11
+ * to fill a fixed frame, with several behaviours driven by props:
12
+ *
13
+ * - **processing** — a dark overlay with an indeterminate (spinning) donut for
14
+ * pre-upload work (e.g. HEIC conversion / compression).
15
+ * - **loading** — a dark overlay with a `DataPieChart` progress donut; swaps
16
+ * seamlessly from `processing` (same ring).
17
+ * - **error** — a red tile with an error icon + caption (filename); the × stays.
18
+ * - **loaded, interactive** — hovering scales the image up ~8px (motion tokens)
19
+ * and clicking activates `onClick` (e.g. to enlarge in a dialog).
20
+ * - **removable** — a tertiary × button in the top-right corner calls
21
+ * `onRemove` to delete the photo.
22
+ *
23
+ * Tokens used: border-radius-lg, color-black-alpha-3, dialog-color-backdrop,
24
+ * button-color-tertiary-*, alias-color-state-error-*, alert-color-error-accent,
25
+ * motion-duration-micro, motion-easing-enter.
26
+ */
27
+ export const Thumbnail = forwardRef(({ src, alt = '', shape = '4:3', loading = false, progress = 0, processing = false, error = false, caption, errorReason, onRemove, onClick, removeLabel = 'Remove photo', viewLabel = 'View photo', className = '', ...props }, ref) => {
28
+ const isBusy = loading || processing;
29
+ const isInteractive = !isBusy && !error && Boolean(onClick);
30
+ const showRemove = !isBusy && Boolean(onRemove);
31
+ const classes = [
32
+ 'muka-thumbnail',
33
+ // '4:3' → '--4-3', '1:1' → '--1-1', 'ellipse' → '--ellipse'
34
+ `muka-thumbnail--${shape.replace(':', '-')}`,
35
+ loading && 'muka-thumbnail--loading',
36
+ processing && 'muka-thumbnail--processing',
37
+ error && 'muka-thumbnail--error',
38
+ isInteractive && 'muka-thumbnail--interactive',
39
+ className,
40
+ ]
41
+ .filter(Boolean)
42
+ .join(' ');
43
+ const image = _jsx("img", { className: "muka-thumbnail__image", src: src, alt: alt });
44
+ const removeButton = showRemove ? (_jsx("button", { type: "button", className: "muka-thumbnail__remove", onClick: onRemove, "aria-label": removeLabel, children: _jsx(Icon, { name: "close", variant: "line", size: "xs" }) })) : null;
45
+ // The frame owns the shape's clip (border-radius + overflow), so the remove
46
+ // button — a sibling of the frame — is never clipped, even for the circle.
47
+ const frameContent = error ? (_jsxs("div", { className: "muka-thumbnail__error", children: [_jsx(Icon, { className: "muka-thumbnail__error-icon", name: "error-warning", variant: "fill", size: "lg", label: errorReason ?? 'Upload failed' }), caption && _jsx("span", { className: "muka-thumbnail__caption", children: caption })] })) : (_jsxs(_Fragment, { children: [isInteractive ? (_jsx("button", { type: "button", className: "muka-thumbnail__trigger", onClick: onClick, "aria-label": viewLabel, children: image })) : (image), isBusy && (_jsx("div", { className: "muka-thumbnail__overlay", children: _jsx(DataPieChart, { className: "muka-thumbnail__progress", value: progress, indeterminate: processing, size: 40, variant: "donut", "aria-label": processing ? 'Processing' : `Uploading, ${Math.round(progress)}%` }) }))] }));
48
+ return (_jsxs("div", { ref: ref, className: classes, title: error ? errorReason : undefined, ...props, children: [_jsx("div", { className: "muka-thumbnail__frame", children: frameContent }), removeButton] }));
49
+ });
50
+ Thumbnail.displayName = 'Thumbnail';
51
+ export default Thumbnail;
52
+ //# sourceMappingURL=Thumbnail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Thumbnail.js","sourceRoot":"","sources":["../../../../components/Thumbnail/Thumbnail.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { Thumbnail } from './Thumbnail';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../components/Thumbnail/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAuB,MAAM,aAAa,CAAC"}
@@ -71,4 +71,6 @@ export { Combobox, } from './Combobox';
71
71
  export { SwipeActions, } from './SwipeActions';
72
72
  export { PullToRefresh } from './PullToRefresh';
73
73
  export { LicensePlateInput, } from './LicensePlateInput';
74
+ export { Thumbnail } from './Thumbnail';
75
+ export { PhotoUploader, } from './PhotoUploader';
74
76
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../components/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../components/index.ts"],"names":[],"mappings":"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"}
@@ -109,6 +109,13 @@
109
109
  height: 100%;
110
110
  }
111
111
 
112
+ /* The leading icon and the dismiss (×) icon inherit the variant accent set on
113
+ their container, overriding the Icon component's default color. */
114
+ .muka-alert__icon .muka-icon,
115
+ .muka-alert__dismiss .muka-icon {
116
+ color: inherit;
117
+ }
118
+
112
119
  /* Content */
113
120
  .muka-alert__content {
114
121
  flex: 1;
@@ -27,6 +27,35 @@
27
27
  transition: stroke-dasharray 0.3s ease;
28
28
  }
29
29
 
30
+ /* ─── Indeterminate (spinner) ─────────────────────────── */
31
+ /* A masked ring filled with an angular (conic) gradient that rotates. The mask
32
+ band matches the donut geometry (r=40, strokeWidth=16 → 64%–96% of radius) so
33
+ it swaps seamlessly with the value-based progress donut. */
34
+ .muka-data-pie-chart__spinner-track,
35
+ .muka-data-pie-chart__spinner {
36
+ position: absolute;
37
+ inset: 0;
38
+ border-radius: 50%;
39
+ -webkit-mask: radial-gradient(farthest-side, transparent 63%, #000 65%, #000 95%, transparent 97%);
40
+ mask: radial-gradient(farthest-side, transparent 63%, #000 65%, #000 95%, transparent 97%);
41
+ }
42
+
43
+ .muka-data-pie-chart__spinner {
44
+ animation: muka-data-pie-chart-spin 0.9s linear infinite;
45
+ }
46
+
47
+ @keyframes muka-data-pie-chart-spin {
48
+ to {
49
+ transform: rotate(360deg);
50
+ }
51
+ }
52
+
53
+ @media (prefers-reduced-motion: reduce) {
54
+ .muka-data-pie-chart__spinner {
55
+ animation-duration: 2.5s;
56
+ }
57
+ }
58
+
30
59
  .muka-data-pie-chart__value {
31
60
  position: absolute;
32
61
  inset: 0;
@@ -0,0 +1,125 @@
1
+ /* PhotoUploader Component Styles - Using Muka Design Tokens */
2
+
3
+ .muka-photo-uploader {
4
+ display: flex;
5
+ flex-direction: column;
6
+ align-items: flex-start;
7
+ gap: var(--spacing-4);
8
+ width: 100%;
9
+ }
10
+
11
+ /* Visually-hidden native file input */
12
+ .muka-photo-uploader__input {
13
+ position: absolute;
14
+ width: 1px;
15
+ height: 1px;
16
+ padding: 0;
17
+ margin: -1px;
18
+ overflow: hidden;
19
+ clip: rect(0, 0, 0, 0);
20
+ white-space: nowrap;
21
+ border: 0;
22
+ }
23
+
24
+ /* ─── Error feedback alert ────────────────────────────── */
25
+ .muka-photo-uploader__alert {
26
+ width: 100%;
27
+ }
28
+
29
+ /* ─── Thumbnail grid ──────────────────────────────────── */
30
+ .muka-photo-uploader__grid {
31
+ display: flex;
32
+ flex-wrap: wrap;
33
+ gap: var(--spacing-3);
34
+ width: 100%;
35
+ margin: 0;
36
+ padding: 0;
37
+ list-style: none;
38
+ }
39
+
40
+ .muka-photo-uploader__grid-item {
41
+ margin: 0;
42
+ padding: 0;
43
+ }
44
+
45
+ /* ─── Drop zone card ──────────────────────────────────── */
46
+ .muka-photo-uploader__dropzone {
47
+ display: flex;
48
+ flex-direction: column;
49
+ align-items: center;
50
+ justify-content: center;
51
+ gap: var(--spacing-4);
52
+ width: 100%;
53
+ padding: var(--card-padding-lg);
54
+ background-color: var(--card-color-default-background);
55
+ border: var(--border-width-regular, 1px) solid var(--card-color-default-border);
56
+ border-radius: var(--border-radius-lg);
57
+ cursor: pointer;
58
+ text-align: center;
59
+ transition: background-color var(--motion-duration-micro) var(--motion-easing-enter),
60
+ border-color var(--motion-duration-micro) var(--motion-easing-enter);
61
+ }
62
+
63
+ .muka-photo-uploader__dropzone:hover,
64
+ .muka-photo-uploader__dropzone--active {
65
+ border-color: var(--color-border-focus);
66
+ background-color: var(--color-surface-level1);
67
+ }
68
+
69
+ .muka-photo-uploader__dropzone:focus-visible {
70
+ outline: 2px solid var(--color-border-focus);
71
+ outline-offset: 2px;
72
+ }
73
+
74
+ .muka-photo-uploader__dropzone-icon {
75
+ display: flex;
76
+ align-items: center;
77
+ justify-content: center;
78
+ color: var(--color-icon-subtle-default);
79
+ }
80
+
81
+ .muka-photo-uploader__dropzone-text {
82
+ font-family: var(--text-body-md-regular-fontFamily);
83
+ font-size: var(--text-body-md-regular-fontSize);
84
+ font-weight: var(--text-body-md-regular-fontWeight);
85
+ line-height: var(--text-body-md-regular-lineHeight);
86
+ color: var(--color-text-subtle-default);
87
+ }
88
+
89
+ /* ─── Disabled ────────────────────────────────────────── */
90
+ .muka-photo-uploader--disabled .muka-photo-uploader__dropzone {
91
+ cursor: not-allowed;
92
+ opacity: 0.6;
93
+ }
94
+
95
+ .muka-photo-uploader--disabled .muka-photo-uploader__dropzone:hover {
96
+ border-color: var(--card-color-default-border);
97
+ background-color: var(--card-color-default-background);
98
+ }
99
+
100
+ /* ─── Enlarged photo dialog ───────────────────────────── */
101
+ .muka-photo-uploader__preview {
102
+ display: flex;
103
+ align-items: center;
104
+ justify-content: center;
105
+ width: 100%;
106
+ height: 100%;
107
+ }
108
+
109
+ /* Fits the dialog while preserving the photo's original aspect ratio. */
110
+ .muka-photo-uploader__preview-image {
111
+ display: block;
112
+ max-width: 100%;
113
+ max-height: 100%;
114
+ width: auto;
115
+ height: auto;
116
+ object-fit: contain;
117
+ border-radius: var(--border-radius-lg);
118
+ }
119
+
120
+ /* ─── Reduced motion ──────────────────────────────────── */
121
+ @media (prefers-reduced-motion: reduce) {
122
+ .muka-photo-uploader__dropzone {
123
+ transition: none;
124
+ }
125
+ }
@@ -22,11 +22,13 @@
22
22
  gap: var(--spacing-8);
23
23
  }
24
24
 
25
- /* Past-expanded groups header + slot with a tighter internal gap */
25
+ /* Past steps group header + slot. The header↔content gap lives inside the
26
+ collapsing slot (as padding-top) so it collapses with the content, so the
27
+ body gap itself is 0. */
26
28
  .muka-progress-accordeon__body {
27
29
  display: flex;
28
30
  flex-direction: column;
29
- gap: var(--spacing-4);
31
+ gap: 0;
30
32
  width: 100%;
31
33
  }
32
34
 
@@ -159,6 +161,34 @@
159
161
  width: 100%;
160
162
  }
161
163
 
164
+ /* ─── Collapse/expand animation (past steps) ─────────────────
165
+ The grid-template-rows 1fr → 0fr technique animates the content to/from its
166
+ intrinsic (auto) height with no magic max-height. Under prefers-reduced-motion
167
+ --motion-duration-view resolves to 0ms, so the toggle stays instant. */
168
+ .muka-progress-accordeon__slot-wrapper {
169
+ display: grid;
170
+ grid-template-rows: 1fr;
171
+ transition: grid-template-rows var(--motion-duration-view) var(--motion-easing-enter);
172
+ }
173
+
174
+ .muka-progress-accordeon__slot-wrapper--collapsed {
175
+ grid-template-rows: 0fr;
176
+ }
177
+
178
+ /* The direct grid child clips and must have NO padding/border of its own —
179
+ min-height:0 lets it shrink, and with no padding the 0fr track reaches a true
180
+ 0 height (padding on the item would leave a residual gap when collapsed). */
181
+ .muka-progress-accordeon__slot-clip {
182
+ overflow: hidden;
183
+ min-height: 0;
184
+ }
185
+
186
+ /* The header↔content spacing lives on the inner slot (inside the clip region)
187
+ so it collapses together with the content. */
188
+ .muka-progress-accordeon__slot-wrapper .muka-progress-accordeon__slot {
189
+ padding-top: var(--spacing-4);
190
+ }
191
+
162
192
  /* ─── Action buttons (current state) ─────────────────────── */
163
193
  .muka-progress-accordeon__actions {
164
194
  display: flex;
@@ -3,55 +3,48 @@
3
3
  .muka-spec-list {
4
4
  margin: 0;
5
5
  padding: 0;
6
- background-color: var(--color-surface-level1);
7
- border-radius: var(--radius-md);
8
- overflow: hidden;
9
6
  }
10
7
 
11
8
  /* ─── Row ─────────────────────────────────────────────── */
12
9
 
13
10
  .muka-spec-row {
14
11
  display: flex;
15
- align-items: baseline;
12
+ align-items: flex-start;
16
13
  gap: var(--spacing-3);
17
- padding: var(--spacing-3) var(--spacing-4);
18
- border-top: var(--border-width-regular) solid var(--color-border-default);
19
- }
20
-
21
- .muka-spec-row:first-child {
22
- border-top: none;
14
+ padding-bottom: var(--spacing-3);
23
15
  }
24
16
 
25
17
  /* ─── Label ───────────────────────────────────────────── */
26
18
 
27
19
  .muka-spec-row__label {
28
20
  flex: 0 0 auto;
29
- min-width: 40%;
30
21
  margin: 0;
31
22
  color: var(--color-text-subtle-default);
32
23
  font-family: var(--text-body-md-regular-fontFamily);
33
24
  font-weight: var(--text-body-md-regular-fontWeight);
34
25
  font-size: var(--text-body-md-regular-fontSize);
35
26
  line-height: var(--text-body-md-regular-lineHeight);
27
+ overflow: hidden;
28
+ text-overflow: ellipsis;
29
+ white-space: nowrap;
36
30
  }
37
31
 
38
32
  /* ─── Value ───────────────────────────────────────────── */
39
33
 
40
34
  .muka-spec-row__value {
41
- flex: 1 1 auto;
35
+ flex: 1 1 0;
36
+ min-width: 0;
42
37
  margin: 0;
43
38
  display: flex;
44
39
  flex-direction: column;
45
- align-items: flex-end;
46
- text-align: right;
47
40
  color: var(--color-text-default-default);
48
41
  }
49
42
 
50
43
  .muka-spec-row__value-text {
51
- font-family: var(--text-body-md-medium-fontFamily);
52
- font-weight: var(--text-body-md-medium-fontWeight);
53
- font-size: var(--text-body-md-medium-fontSize);
54
- line-height: var(--text-body-md-medium-lineHeight);
44
+ font-family: var(--text-body-md-regular-fontFamily);
45
+ font-weight: var(--text-body-md-regular-fontWeight);
46
+ font-size: var(--text-body-md-regular-fontSize);
47
+ line-height: var(--text-body-md-regular-lineHeight);
55
48
  }
56
49
 
57
50
  .muka-spec-row__hint {
@@ -62,8 +55,28 @@
62
55
  line-height: var(--text-body-sm-regular-lineHeight);
63
56
  }
64
57
 
65
- /* ─── Compact density ─────────────────────────────────── */
58
+ /* ─── Label width (horizontal stacking) ───────────────── */
59
+
60
+ .muka-spec-list--label-small .muka-spec-row__label {
61
+ width: 80px;
62
+ }
63
+
64
+ .muka-spec-list--label-medium .muka-spec-row__label {
65
+ width: 120px;
66
+ }
67
+
68
+ .muka-spec-list--label-large .muka-spec-row__label {
69
+ width: 160px;
70
+ }
71
+
72
+ /* ─── Vertical stacking ───────────────────────────────── */
73
+
74
+ .muka-spec-list--vertical .muka-spec-row {
75
+ flex-direction: column;
76
+ gap: var(--spacing-1);
77
+ }
66
78
 
67
- .muka-spec-list--compact .muka-spec-row {
68
- padding: var(--spacing-2) var(--spacing-4);
79
+ .muka-spec-list--vertical .muka-spec-row__label {
80
+ width: 100%;
81
+ white-space: normal;
69
82
  }