@revikornmann/muka-ui 0.7.0 → 0.9.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 (172) hide show
  1. package/build/manifest.json +4 -1
  2. package/dist/cjs/components/Alert/Alert.css +7 -0
  3. package/dist/cjs/components/Button/Button.css +29 -0
  4. package/dist/cjs/components/Button/Button.js +1 -1
  5. package/dist/cjs/components/Checkbox/Checkbox.js +44 -5
  6. package/dist/cjs/components/Checkbox/Checkbox.js.map +1 -1
  7. package/dist/cjs/components/DataPieChart/DataPieChart.css +29 -0
  8. package/dist/cjs/components/DataPieChart/DataPieChart.js +20 -3
  9. package/dist/cjs/components/DataPieChart/DataPieChart.js.map +1 -1
  10. package/dist/cjs/components/DatePicker/DatePicker.js +51 -6
  11. package/dist/cjs/components/DatePicker/DatePicker.js.map +1 -1
  12. package/dist/cjs/components/Dialog/Dialog.js +64 -7
  13. package/dist/cjs/components/Dialog/Dialog.js.map +1 -1
  14. package/dist/cjs/components/Form/Form.css +17 -0
  15. package/dist/cjs/components/Form/Form.js +31 -0
  16. package/dist/cjs/components/Form/Form.js.map +1 -0
  17. package/dist/cjs/components/Form/index.js +13 -0
  18. package/dist/cjs/components/Form/index.js.map +1 -0
  19. package/dist/cjs/components/Form/useForm.js +95 -0
  20. package/dist/cjs/components/Form/useForm.js.map +1 -0
  21. package/dist/cjs/components/Input/Input.js +52 -5
  22. package/dist/cjs/components/Input/Input.js.map +1 -1
  23. package/dist/cjs/components/LicensePlateInput/LicensePlateInput.js +50 -5
  24. package/dist/cjs/components/LicensePlateInput/LicensePlateInput.js.map +1 -1
  25. package/dist/cjs/components/NumberInput/NumberInput.js +51 -6
  26. package/dist/cjs/components/NumberInput/NumberInput.js.map +1 -1
  27. package/dist/cjs/components/PhotoUploader/PhotoUploader.css +125 -0
  28. package/dist/cjs/components/PhotoUploader/PhotoUploader.js +257 -0
  29. package/dist/cjs/components/PhotoUploader/PhotoUploader.js.map +1 -0
  30. package/dist/cjs/components/PhotoUploader/index.js +6 -0
  31. package/dist/cjs/components/PhotoUploader/index.js.map +1 -0
  32. package/dist/cjs/components/ProgressAccordeon/ProgressAccordeon.css +32 -2
  33. package/dist/cjs/components/ProgressAccordeon/ProgressAccordeon.js +13 -2
  34. package/dist/cjs/components/ProgressAccordeon/ProgressAccordeon.js.map +1 -1
  35. package/dist/cjs/components/Radio/Radio.js +37 -5
  36. package/dist/cjs/components/Radio/Radio.js.map +1 -1
  37. package/dist/cjs/components/RangeSlider/RangeSlider.js +37 -5
  38. package/dist/cjs/components/RangeSlider/RangeSlider.js.map +1 -1
  39. package/dist/cjs/components/Select/Select.js +53 -7
  40. package/dist/cjs/components/Select/Select.js.map +1 -1
  41. package/dist/cjs/components/Textarea/Textarea.js +43 -5
  42. package/dist/cjs/components/Textarea/Textarea.js.map +1 -1
  43. package/dist/cjs/components/Thumbnail/Thumbnail.css +171 -0
  44. package/dist/cjs/components/Thumbnail/Thumbnail.js +55 -0
  45. package/dist/cjs/components/Thumbnail/Thumbnail.js.map +1 -0
  46. package/dist/cjs/components/Thumbnail/index.js +6 -0
  47. package/dist/cjs/components/Thumbnail/index.js.map +1 -0
  48. package/dist/cjs/components/Toggle/Toggle.js +37 -5
  49. package/dist/cjs/components/Toggle/Toggle.js.map +1 -1
  50. package/dist/cjs/components/index.js +10 -3
  51. package/dist/cjs/components/index.js.map +1 -1
  52. package/dist/esm/components/Alert/Alert.css +7 -0
  53. package/dist/esm/components/Button/Button.css +29 -0
  54. package/dist/esm/components/Button/Button.js +1 -1
  55. package/dist/esm/components/Checkbox/Checkbox.js +11 -4
  56. package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
  57. package/dist/esm/components/DataPieChart/DataPieChart.css +29 -0
  58. package/dist/esm/components/DataPieChart/DataPieChart.js +20 -3
  59. package/dist/esm/components/DataPieChart/DataPieChart.js.map +1 -1
  60. package/dist/esm/components/DatePicker/DatePicker.js +18 -5
  61. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  62. package/dist/esm/components/Dialog/Dialog.js +31 -7
  63. package/dist/esm/components/Dialog/Dialog.js.map +1 -1
  64. package/dist/esm/components/Form/Form.css +17 -0
  65. package/dist/esm/components/Form/Form.js +27 -0
  66. package/dist/esm/components/Form/Form.js.map +1 -0
  67. package/dist/esm/components/Form/index.js +4 -0
  68. package/dist/esm/components/Form/index.js.map +1 -0
  69. package/dist/esm/components/Form/useForm.js +92 -0
  70. package/dist/esm/components/Form/useForm.js.map +1 -0
  71. package/dist/esm/components/Input/Input.js +19 -4
  72. package/dist/esm/components/Input/Input.js.map +1 -1
  73. package/dist/esm/components/LicensePlateInput/LicensePlateInput.js +17 -4
  74. package/dist/esm/components/LicensePlateInput/LicensePlateInput.js.map +1 -1
  75. package/dist/esm/components/NumberInput/NumberInput.js +18 -5
  76. package/dist/esm/components/NumberInput/NumberInput.js.map +1 -1
  77. package/dist/esm/components/PhotoUploader/PhotoUploader.css +125 -0
  78. package/dist/esm/components/PhotoUploader/PhotoUploader.js +254 -0
  79. package/dist/esm/components/PhotoUploader/PhotoUploader.js.map +1 -0
  80. package/dist/esm/components/PhotoUploader/index.js +2 -0
  81. package/dist/esm/components/PhotoUploader/index.js.map +1 -0
  82. package/dist/esm/components/ProgressAccordeon/ProgressAccordeon.css +32 -2
  83. package/dist/esm/components/ProgressAccordeon/ProgressAccordeon.js +13 -2
  84. package/dist/esm/components/ProgressAccordeon/ProgressAccordeon.js.map +1 -1
  85. package/dist/esm/components/Radio/Radio.js +4 -4
  86. package/dist/esm/components/Radio/Radio.js.map +1 -1
  87. package/dist/esm/components/RangeSlider/RangeSlider.js +4 -4
  88. package/dist/esm/components/RangeSlider/RangeSlider.js.map +1 -1
  89. package/dist/esm/components/Select/Select.js +18 -5
  90. package/dist/esm/components/Select/Select.js.map +1 -1
  91. package/dist/esm/components/Textarea/Textarea.js +10 -4
  92. package/dist/esm/components/Textarea/Textarea.js.map +1 -1
  93. package/dist/esm/components/Thumbnail/Thumbnail.css +171 -0
  94. package/dist/esm/components/Thumbnail/Thumbnail.js +52 -0
  95. package/dist/esm/components/Thumbnail/Thumbnail.js.map +1 -0
  96. package/dist/esm/components/Thumbnail/index.js +2 -0
  97. package/dist/esm/components/Thumbnail/index.js.map +1 -0
  98. package/dist/esm/components/Toggle/Toggle.js +4 -4
  99. package/dist/esm/components/Toggle/Toggle.js.map +1 -1
  100. package/dist/esm/components/index.js +3 -0
  101. package/dist/esm/components/index.js.map +1 -1
  102. package/dist/styles/components/Alert.css +7 -0
  103. package/dist/styles/components/Button.css +29 -0
  104. package/dist/styles/components/DataPieChart.css +29 -0
  105. package/dist/styles/components/Form.css +17 -0
  106. package/dist/styles/components/PhotoUploader.css +125 -0
  107. package/dist/styles/components/ProgressAccordeon.css +32 -2
  108. package/dist/styles/components/Thumbnail.css +171 -0
  109. package/dist/styles/index.css +2554 -2099
  110. package/dist/styles/muka-dark.css +2554 -2099
  111. package/dist/styles/muka-light.css +2554 -2099
  112. package/dist/styles/tokens-bouwplan-dark.css +38 -0
  113. package/dist/styles/tokens-bouwplan-light.css +38 -0
  114. package/dist/styles/tokens-fscl-dark.css +38 -0
  115. package/dist/styles/tokens-fscl-light.css +38 -0
  116. package/dist/styles/tokens-grip-dark.css +38 -0
  117. package/dist/styles/tokens-grip-light.css +38 -0
  118. package/dist/styles/tokens-muka-dark.css +38 -0
  119. package/dist/styles/tokens-muka-light.css +38 -0
  120. package/dist/styles/tokens-wireframe-dark.css +80 -42
  121. package/dist/styles/tokens-wireframe-light.css +80 -42
  122. package/dist/styles/wireframe-dark.css +2596 -2141
  123. package/dist/styles/wireframe-light.css +2596 -2141
  124. package/dist/types/components/Button/Button.d.ts +2 -2
  125. package/dist/types/components/Button/Button.d.ts.map +1 -1
  126. package/dist/types/components/Checkbox/Checkbox.d.ts +1 -1
  127. package/dist/types/components/Checkbox/Checkbox.d.ts.map +1 -1
  128. package/dist/types/components/DataPieChart/DataPieChart.d.ts +7 -0
  129. package/dist/types/components/DataPieChart/DataPieChart.d.ts.map +1 -1
  130. package/dist/types/components/DatePicker/DatePicker.d.ts +5 -1
  131. package/dist/types/components/DatePicker/DatePicker.d.ts.map +1 -1
  132. package/dist/types/components/Dialog/Dialog.d.ts.map +1 -1
  133. package/dist/types/components/FileUpload/FileUpload.d.ts +1 -1
  134. package/dist/types/components/FileUpload/FileUpload.d.ts.map +1 -1
  135. package/dist/types/components/FileUpload/FileUploadItem.d.ts +1 -1
  136. package/dist/types/components/FileUpload/FileUploadItem.d.ts.map +1 -1
  137. package/dist/types/components/Form/Form.d.ts +34 -0
  138. package/dist/types/components/Form/Form.d.ts.map +1 -0
  139. package/dist/types/components/Form/index.d.ts +4 -0
  140. package/dist/types/components/Form/index.d.ts.map +1 -0
  141. package/dist/types/components/Form/useForm.d.ts +74 -0
  142. package/dist/types/components/Form/useForm.d.ts.map +1 -0
  143. package/dist/types/components/Input/Input.d.ts +5 -1
  144. package/dist/types/components/Input/Input.d.ts.map +1 -1
  145. package/dist/types/components/LicensePlateInput/LicensePlateInput.d.ts +5 -1
  146. package/dist/types/components/LicensePlateInput/LicensePlateInput.d.ts.map +1 -1
  147. package/dist/types/components/NumberInput/NumberInput.d.ts +5 -1
  148. package/dist/types/components/NumberInput/NumberInput.d.ts.map +1 -1
  149. package/dist/types/components/PhotoUploader/PhotoUploader.d.ts +71 -0
  150. package/dist/types/components/PhotoUploader/PhotoUploader.d.ts.map +1 -0
  151. package/dist/types/components/PhotoUploader/index.d.ts +2 -0
  152. package/dist/types/components/PhotoUploader/index.d.ts.map +1 -0
  153. package/dist/types/components/ProgressAccordeon/ProgressAccordeon.d.ts.map +1 -1
  154. package/dist/types/components/Radio/Radio.d.ts +1 -1
  155. package/dist/types/components/Radio/Radio.d.ts.map +1 -1
  156. package/dist/types/components/RangeSlider/RangeSlider.d.ts +1 -1
  157. package/dist/types/components/RangeSlider/RangeSlider.d.ts.map +1 -1
  158. package/dist/types/components/Select/Select.d.ts +7 -1
  159. package/dist/types/components/Select/Select.d.ts.map +1 -1
  160. package/dist/types/components/Textarea/Textarea.d.ts +5 -1
  161. package/dist/types/components/Textarea/Textarea.d.ts.map +1 -1
  162. package/dist/types/components/Thumbnail/Thumbnail.d.ts +77 -0
  163. package/dist/types/components/Thumbnail/Thumbnail.d.ts.map +1 -0
  164. package/dist/types/components/Thumbnail/index.d.ts +2 -0
  165. package/dist/types/components/Thumbnail/index.d.ts.map +1 -0
  166. package/dist/types/components/Toggle/Toggle.d.ts +1 -1
  167. package/dist/types/components/Toggle/Toggle.d.ts.map +1 -1
  168. package/dist/types/components/index.d.ts +3 -0
  169. package/dist/types/components/index.d.ts.map +1 -1
  170. package/package.json +1 -1
  171. package/tokens/t2-alias/brand/wireframe/radius.json +34 -0
  172. package/tokens/t4-components/button.json +56 -0
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useId } from 'react';
3
+ import React, { useId } from 'react';
4
4
  import './Radio.css';
5
5
  /**
6
6
  * Radio Component
@@ -17,7 +17,7 @@ import './Radio.css';
17
17
  * - radio.dot.size.{size}
18
18
  * - radio.color.{state}.{background|border|dot}
19
19
  */
20
- export const Radio = ({ checked, defaultChecked, onChange, label, disabled = false, name, value, size = 'md', className = '', id, ...props }) => {
20
+ export const Radio = React.forwardRef(function Radio({ checked, defaultChecked, onChange, label, disabled = false, name, value, size = 'md', className = '', id, ...props }, forwardedRef) {
21
21
  const generatedId = useId();
22
22
  const inputId = id || generatedId;
23
23
  const wrapperClasses = [
@@ -26,7 +26,7 @@ export const Radio = ({ checked, defaultChecked, onChange, label, disabled = fal
26
26
  disabled && 'muka-radio--disabled',
27
27
  className
28
28
  ].filter(Boolean).join(' ');
29
- return (_jsxs("label", { className: wrapperClasses, htmlFor: inputId, children: [_jsxs("span", { className: "muka-radio__control", children: [_jsx("input", { type: "radio", id: inputId, className: "muka-radio__input", checked: checked, defaultChecked: defaultChecked, onChange: onChange, disabled: disabled, name: name, value: value, ...props }), _jsx("span", { className: "muka-radio__indicator", children: _jsx("span", { className: "muka-radio__dot" }) })] }), label && _jsx("span", { className: "muka-radio__label", children: label })] }));
30
- };
29
+ return (_jsxs("label", { className: wrapperClasses, htmlFor: inputId, children: [_jsxs("span", { className: "muka-radio__control", children: [_jsx("input", { ref: forwardedRef, type: "radio", id: inputId, className: "muka-radio__input", checked: checked, defaultChecked: defaultChecked, onChange: onChange, disabled: disabled, name: name, value: value, ...props }), _jsx("span", { className: "muka-radio__indicator", children: _jsx("span", { className: "muka-radio__dot" }) })] }), label && _jsx("span", { className: "muka-radio__label", children: label })] }));
30
+ });
31
31
  export default Radio;
32
32
  //# sourceMappingURL=Radio.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Radio.js","sourceRoot":"","sources":["../../../../components/Radio/Radio.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAc,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,aAAa,CAAC;AAkCrB;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,KAAK,GAAyB,CAAC,EAC1C,OAAO,EACP,cAAc,EACd,QAAQ,EACR,KAAK,EACL,QAAQ,GAAG,KAAK,EAChB,IAAI,EACJ,KAAK,EACL,IAAI,GAAG,IAAI,EACX,SAAS,GAAG,EAAE,EACd,EAAE,EACF,GAAG,KAAK,EACT,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,KAAK,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,EAAE,IAAI,WAAW,CAAC;IAElC,MAAM,cAAc,GAAG;QACrB,YAAY;QACZ,eAAe,IAAI,EAAE;QACrB,QAAQ,IAAI,sBAAsB;QAClC,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,CACL,iBAAO,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,aAChD,gBAAM,SAAS,EAAC,qBAAqB,aACnC,gBACE,IAAI,EAAC,OAAO,EACZ,EAAE,EAAE,OAAO,EACX,SAAS,EAAC,mBAAmB,EAC7B,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,KACR,KAAK,GACT,EACF,eAAM,SAAS,EAAC,uBAAuB,YACrC,eAAM,SAAS,EAAC,iBAAiB,GAAG,GAC/B,IACF,EACN,KAAK,IAAI,eAAM,SAAS,EAAC,mBAAmB,YAAE,KAAK,GAAQ,IACtD,CACT,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Radio.js","sourceRoot":"","sources":["../../../../components/Radio/Radio.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,aAAa,CAAC;AAkCrB;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAA+B,SAAS,KAAK,CAChF,EACE,OAAO,EACP,cAAc,EACd,QAAQ,EACR,KAAK,EACL,QAAQ,GAAG,KAAK,EAChB,IAAI,EACJ,KAAK,EACL,IAAI,GAAG,IAAI,EACX,SAAS,GAAG,EAAE,EACd,EAAE,EACF,GAAG,KAAK,EACT,EACD,YAAY;IAEZ,MAAM,WAAW,GAAG,KAAK,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,EAAE,IAAI,WAAW,CAAC;IAElC,MAAM,cAAc,GAAG;QACrB,YAAY;QACZ,eAAe,IAAI,EAAE;QACrB,QAAQ,IAAI,sBAAsB;QAClC,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,CACL,iBAAO,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,aAChD,gBAAM,SAAS,EAAC,qBAAqB,aACnC,gBACE,GAAG,EAAE,YAAY,EACjB,IAAI,EAAC,OAAO,EACZ,EAAE,EAAE,OAAO,EACX,SAAS,EAAC,mBAAmB,EAC7B,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,KACR,KAAK,GACT,EACF,eAAM,SAAS,EAAC,uBAAuB,YACrC,eAAM,SAAS,EAAC,iBAAiB,GAAG,GAC/B,IACF,EACN,KAAK,IAAI,eAAM,SAAS,EAAC,mBAAmB,YAAE,KAAK,GAAQ,IACtD,CACT,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,eAAe,KAAK,CAAC"}
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useId } from 'react';
3
+ import React, { useId } from 'react';
4
4
  import { Icon } from '../Icon';
5
5
  import './RangeSlider.css';
6
6
  /**
@@ -19,7 +19,7 @@ import './RangeSlider.css';
19
19
  * - Wraps a native <input type="range">, so keyboard and screen-reader support
20
20
  * come for free. Provide a visible `label` or an `aria-label`.
21
21
  */
22
- export const RangeSlider = ({ value, onChange, min, max, step = 1, label, tooltip, optional = false, showValue = true, formatValue, helperText, size = 'md', disabled = false, id, className = '', 'aria-label': ariaLabel, }) => {
22
+ export const RangeSlider = React.forwardRef(function RangeSlider({ value, onChange, min, max, step = 1, label, tooltip, optional = false, showValue = true, formatValue, helperText, size = 'md', disabled = false, id, className = '', 'aria-label': ariaLabel, }, forwardedRef) {
23
23
  const generatedId = useId();
24
24
  const inputId = id ?? generatedId;
25
25
  const helperId = helperText ? `${inputId}-helper` : undefined;
@@ -35,7 +35,7 @@ export const RangeSlider = ({ value, onChange, min, max, step = 1, label, toolti
35
35
  disabled ? 'muka-range-slider--disabled' : '',
36
36
  className,
37
37
  ].filter(Boolean).join(' ');
38
- return (_jsxs("div", { className: rootClasses, children: [showHeader && (_jsxs("div", { className: "muka-range-slider__header", children: [_jsxs("span", { className: "muka-range-slider__label-group", children: [label && (_jsx("label", { htmlFor: inputId, className: "muka-range-slider__label", children: label })), tooltip && (_jsx(Icon, { name: "information", variant: "line", size: "sm", colorVariant: "subtle", label: tooltip, className: "muka-range-slider__info" })), optional && (_jsx("span", { className: "muka-range-slider__optional", children: "Optional" }))] }), showValue && (_jsx("span", { className: "muka-range-slider__value", children: formatValue ? formatValue(value) : value }))] })), _jsx("div", { className: "muka-range-slider__bar", children: _jsx("input", { id: inputId, type: "range", className: "muka-range-slider__input", value: value, min: min, max: max, step: step, disabled: disabled, "aria-label": label ? undefined : ariaLabel, "aria-describedby": helperId, style: { ['--muka-range-fill']: `${fillPct}%` }, onChange: (e) => onChange(Number(e.target.value)) }) }), helperText && (_jsx("p", { id: helperId, className: "muka-range-slider__helper", children: helperText }))] }));
39
- };
38
+ return (_jsxs("div", { className: rootClasses, children: [showHeader && (_jsxs("div", { className: "muka-range-slider__header", children: [_jsxs("span", { className: "muka-range-slider__label-group", children: [label && (_jsx("label", { htmlFor: inputId, className: "muka-range-slider__label", children: label })), tooltip && (_jsx(Icon, { name: "information", variant: "line", size: "sm", colorVariant: "subtle", label: tooltip, className: "muka-range-slider__info" })), optional && (_jsx("span", { className: "muka-range-slider__optional", children: "Optional" }))] }), showValue && (_jsx("span", { className: "muka-range-slider__value", children: formatValue ? formatValue(value) : value }))] })), _jsx("div", { className: "muka-range-slider__bar", children: _jsx("input", { ref: forwardedRef, id: inputId, type: "range", className: "muka-range-slider__input", value: value, min: min, max: max, step: step, disabled: disabled, "aria-label": label ? undefined : ariaLabel, "aria-describedby": helperId, style: { ['--muka-range-fill']: `${fillPct}%` }, onChange: (e) => onChange(Number(e.target.value)) }) }), helperText && (_jsx("p", { id: helperId, className: "muka-range-slider__helper", children: helperText }))] }));
39
+ });
40
40
  export default RangeSlider;
41
41
  //# sourceMappingURL=RangeSlider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RangeSlider.js","sourceRoot":"","sources":["../../../../components/RangeSlider/RangeSlider.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RangeSlider.js","sourceRoot":"","sources":["../../../../components/RangeSlider/RangeSlider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,mBAAmB,CAAC;AAoD3B;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAqC,SAAS,WAAW,CAClG,EACE,KAAK,EACL,QAAQ,EACR,GAAG,EACH,GAAG,EACH,IAAI,GAAG,CAAC,EACR,KAAK,EACL,OAAO,EACP,QAAQ,GAAG,KAAK,EAChB,SAAS,GAAG,IAAI,EAChB,WAAW,EACX,UAAU,EACV,IAAI,GAAG,IAAI,EACX,QAAQ,GAAG,KAAK,EAChB,EAAE,EACF,SAAS,GAAG,EAAE,EACd,YAAY,EAAE,SAAS,GACxB,EACD,YAAY;IAEZ,MAAM,WAAW,GAAG,KAAK,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,EAAE,IAAI,WAAW,CAAC;IAClC,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9D,wEAAwE;IACxE,2CAA2C;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;IACxB,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhE,MAAM,UAAU,GAAG,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC;IAEtD,MAAM,WAAW,GAAG;QAClB,mBAAmB;QACnB,sBAAsB,IAAI,EAAE;QAC5B,QAAQ,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE;QAC7C,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,CACL,eAAK,SAAS,EAAE,WAAW,aACxB,UAAU,IAAI,CACb,eAAK,SAAS,EAAC,2BAA2B,aACxC,gBAAM,SAAS,EAAC,gCAAgC,aAC7C,KAAK,IAAI,CACR,gBAAO,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,0BAA0B,YAC1D,KAAK,GACA,CACT,EACA,OAAO,IAAI,CACV,KAAC,IAAI,IACH,IAAI,EAAC,aAAa,EAClB,OAAO,EAAC,MAAM,EACd,IAAI,EAAC,IAAI,EACT,YAAY,EAAC,QAAQ,EACrB,KAAK,EAAE,OAAO,EACd,SAAS,EAAC,yBAAyB,GACnC,CACH,EACA,QAAQ,IAAI,CACX,eAAM,SAAS,EAAC,6BAA6B,yBAAgB,CAC9D,IACI,EACN,SAAS,IAAI,CACZ,eAAM,SAAS,EAAC,0BAA0B,YACvC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GACpC,CACR,IACG,CACP,EACD,cAAK,SAAS,EAAC,wBAAwB,YACrC,gBACE,GAAG,EAAE,YAAY,EACjB,EAAE,EAAE,OAAO,EACX,IAAI,EAAC,OAAO,EACZ,SAAS,EAAC,0BAA0B,EACpC,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,gBACN,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,sBACvB,QAAQ,EAC1B,KAAK,EAAE,EAAE,CAAC,mBAA6B,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,EACzD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GACjD,GACE,EACL,UAAU,IAAI,CACb,YAAG,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAC,2BAA2B,YACnD,UAAU,GACT,CACL,IACG,CACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,eAAe,WAAW,CAAC"}
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState, useId, useRef } from 'react';
3
+ import React, { useState, useId, useRef } from 'react';
4
4
  import './Select.css';
5
5
  import { Icon } from '../Icon';
6
6
  /**
@@ -17,7 +17,7 @@ import { Icon } from '../Icon';
17
17
  * - text.input.{size}
18
18
  * - text.label.{size}.semibold
19
19
  */
20
- export function Select({ options, value, onChange, onValueChange, placeholder, label, helperText, error = false, errorMessage, disabled = false, size = 'md', fullWidth = false, required = false, name, className = '', ...props }) {
20
+ export const Select = React.forwardRef(function Select({ options, value, onChange, onValueChange, placeholder, label, helperText, error = false, errorMessage, disabled = false, size = 'md', fullWidth = false, required = false, name, className = '', onBlur, onFocus, ...props }, forwardedRef) {
21
21
  const [isFocused, setIsFocused] = useState(false);
22
22
  const selectRef = useRef(null);
23
23
  const generatedId = useId();
@@ -45,10 +45,23 @@ export function Select({ options, value, onChange, onValueChange, placeholder, l
45
45
  e.preventDefault();
46
46
  selectRef.current?.focus();
47
47
  }
48
- }, children: [_jsxs("select", { ref: selectRef, id: selectId, className: "muka-select__native", value: value, onChange: (e) => {
48
+ }, children: [_jsxs("select", { ref: (node) => {
49
+ selectRef.current = node;
50
+ if (typeof forwardedRef === 'function')
51
+ forwardedRef(node);
52
+ else if (forwardedRef)
53
+ forwardedRef.current =
54
+ node;
55
+ }, id: selectId, className: "muka-select__native", value: value, onChange: (e) => {
49
56
  onChange?.(e);
50
57
  onValueChange?.(e.target.value);
51
- }, disabled: disabled, name: name, required: required, "aria-invalid": error || undefined, "aria-describedby": describedBy, onFocus: () => setIsFocused(true), onBlur: () => setIsFocused(false), ...props, children: [placeholder && (_jsx("option", { value: "", disabled: true, children: placeholder })), options.map((option) => (_jsx("option", { value: option.value, disabled: option.disabled, children: option.label }, option.value)))] }), _jsx("span", { className: "muka-select__chevron", "aria-hidden": "true", children: _jsx(Icon, { name: "arrow-down-s", variant: "line", size: "sm" }) })] }), showError && (_jsx("p", { className: "muka-select__error", id: errorMessageId, role: "alert", children: errorMessage })), !showError && helperText && (_jsx("p", { className: "muka-select__helper", id: helperTextId, children: helperText }))] }));
52
- }
58
+ }, disabled: disabled, name: name, required: required, "aria-invalid": error || undefined, "aria-describedby": describedBy, onFocus: (e) => {
59
+ setIsFocused(true);
60
+ onFocus?.(e);
61
+ }, onBlur: (e) => {
62
+ setIsFocused(false);
63
+ onBlur?.(e);
64
+ }, ...props, children: [placeholder && (_jsx("option", { value: "", disabled: true, children: placeholder })), options.map((option) => (_jsx("option", { value: option.value, disabled: option.disabled, children: option.label }, option.value)))] }), _jsx("span", { className: "muka-select__chevron", "aria-hidden": "true", children: _jsx(Icon, { name: "arrow-down-s", variant: "line", size: "sm" }) })] }), showError && (_jsx("p", { className: "muka-select__error", id: errorMessageId, role: "alert", children: errorMessage })), !showError && helperText && (_jsx("p", { className: "muka-select__helper", id: helperTextId, children: helperText }))] }));
65
+ });
53
66
  export default Select;
54
67
  //# sourceMappingURL=Select.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../../components/Select/Select.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../../components/Select/Select.tsx"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState, useId } from 'react';
3
+ import React, { useState, useId } from 'react';
4
4
  import './Textarea.css';
5
- export const Textarea = ({ value, onChange, placeholder, label, helperText, error = false, errorMessage, disabled = false, readOnly = false, size = 'md', rows, resize = 'vertical', showCount = false, maxLength, className = '', name, id, required = false, }) => {
5
+ export const Textarea = React.forwardRef(function Textarea({ value, onChange, placeholder, label, helperText, error = false, errorMessage, disabled = false, readOnly = false, size = 'md', rows, resize = 'vertical', showCount = false, maxLength, className = '', name, id, required = false, onBlur, onFocus, }, forwardedRef) {
6
6
  const [isFocused, setIsFocused] = useState(false);
7
7
  const generatedId = useId();
8
8
  const textareaId = id || name || generatedId;
@@ -22,7 +22,13 @@ export const Textarea = ({ value, onChange, placeholder, label, helperText, erro
22
22
  error && 'muka-textarea__field--error',
23
23
  disabled && 'muka-textarea__field--disabled',
24
24
  ].filter(Boolean).join(' ');
25
- return (_jsxs("div", { className: wrapperClasses, children: [label && (_jsxs("label", { className: `muka-textarea__label muka-textarea__label--${size}`, htmlFor: textareaId, children: [label, required && _jsx("span", { className: "muka-textarea__required", "aria-hidden": "true", children: " *" })] })), _jsx("div", { className: fieldClasses, children: _jsx("textarea", { id: textareaId, className: "muka-textarea__native", value: value, onChange: onChange, placeholder: placeholder, disabled: disabled, readOnly: readOnly, name: name, required: required, rows: rows, maxLength: maxLength, "aria-invalid": error || undefined, "aria-describedby": describedBy, onFocus: () => setIsFocused(true), onBlur: () => setIsFocused(false), style: { resize } }) }), _jsxs("div", { className: "muka-textarea__footer", children: [showError && (_jsx("p", { className: "muka-textarea__error", id: errorMessageId, role: "alert", children: errorMessage })), !showError && helperText && (_jsx("p", { className: "muka-textarea__helper", id: helperTextId, children: helperText })), showCount && (_jsxs("span", { className: "muka-textarea__count", children: [charCount, maxLength ? `/${maxLength}` : ''] }))] })] }));
26
- };
25
+ return (_jsxs("div", { className: wrapperClasses, children: [label && (_jsxs("label", { className: `muka-textarea__label muka-textarea__label--${size}`, htmlFor: textareaId, children: [label, required && _jsx("span", { className: "muka-textarea__required", "aria-hidden": "true", children: " *" })] })), _jsx("div", { className: fieldClasses, children: _jsx("textarea", { ref: forwardedRef, id: textareaId, className: "muka-textarea__native", value: value, onChange: onChange, placeholder: placeholder, disabled: disabled, readOnly: readOnly, name: name, required: required, rows: rows, maxLength: maxLength, "aria-invalid": error || undefined, "aria-describedby": describedBy, onFocus: (e) => {
26
+ setIsFocused(true);
27
+ onFocus?.(e);
28
+ }, onBlur: (e) => {
29
+ setIsFocused(false);
30
+ onBlur?.(e);
31
+ }, style: { resize } }) }), _jsxs("div", { className: "muka-textarea__footer", children: [showError && (_jsx("p", { className: "muka-textarea__error", id: errorMessageId, role: "alert", children: errorMessage })), !showError && helperText && (_jsx("p", { className: "muka-textarea__helper", id: helperTextId, children: helperText })), showCount && (_jsxs("span", { className: "muka-textarea__count", children: [charCount, maxLength ? `/${maxLength}` : ''] }))] })] }));
32
+ });
27
33
  export default Textarea;
28
34
  //# sourceMappingURL=Textarea.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.js","sourceRoot":"","sources":["../../../../components/Textarea/Textarea.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Textarea.js","sourceRoot":"","sources":["../../../../components/Textarea/Textarea.tsx"],"names":[],"mappings":"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"}
@@ -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"}
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useId } from 'react';
3
+ import React, { useId } from 'react';
4
4
  import './Toggle.css';
5
5
  /**
6
6
  * Toggle Component
@@ -20,7 +20,7 @@ import './Toggle.css';
20
20
  * - text.label.lg.* (for label)
21
21
  * - text.body.base.regular (for caption)
22
22
  */
23
- export const Toggle = ({ checked, defaultChecked, onChange, label, caption, showDivider = false, icon, disabled = false, name, className = '', id, ...props }) => {
23
+ export const Toggle = React.forwardRef(function Toggle({ checked, defaultChecked, onChange, label, caption, showDivider = false, icon, disabled = false, name, className = '', id, ...props }, forwardedRef) {
24
24
  const generatedId = useId();
25
25
  const inputId = id || generatedId;
26
26
  const wrapperClasses = [
@@ -30,7 +30,7 @@ export const Toggle = ({ checked, defaultChecked, onChange, label, caption, show
30
30
  caption && 'muka-toggle--with-caption',
31
31
  className
32
32
  ].filter(Boolean).join(' ');
33
- return (_jsxs("div", { className: wrapperClasses, children: [icon && _jsx("span", { className: "muka-toggle__icon", "aria-hidden": "true", children: icon }), _jsxs("div", { className: "muka-toggle__content", children: [label && (_jsx("label", { className: "muka-toggle__label", htmlFor: inputId, children: label })), caption && (_jsx("span", { className: "muka-toggle__caption", children: caption }))] }), _jsxs("label", { className: "muka-toggle__switch", htmlFor: inputId, children: [_jsx("input", { type: "checkbox", role: "switch", id: inputId, className: "muka-toggle__input", checked: checked, defaultChecked: defaultChecked, onChange: onChange, disabled: disabled, name: name, "aria-checked": checked, ...props }), _jsx("span", { className: "muka-toggle__track", children: _jsx("span", { className: "muka-toggle__knob" }) })] }), showDivider && _jsx("div", { className: "muka-toggle__divider" })] }));
34
- };
33
+ return (_jsxs("div", { className: wrapperClasses, children: [icon && _jsx("span", { className: "muka-toggle__icon", "aria-hidden": "true", children: icon }), _jsxs("div", { className: "muka-toggle__content", children: [label && (_jsx("label", { className: "muka-toggle__label", htmlFor: inputId, children: label })), caption && (_jsx("span", { className: "muka-toggle__caption", children: caption }))] }), _jsxs("label", { className: "muka-toggle__switch", htmlFor: inputId, children: [_jsx("input", { ref: forwardedRef, type: "checkbox", role: "switch", id: inputId, className: "muka-toggle__input", checked: checked, defaultChecked: defaultChecked, onChange: onChange, disabled: disabled, name: name, "aria-checked": checked, ...props }), _jsx("span", { className: "muka-toggle__track", children: _jsx("span", { className: "muka-toggle__knob" }) })] }), showDivider && _jsx("div", { className: "muka-toggle__divider" })] }));
34
+ });
35
35
  export default Toggle;
36
36
  //# sourceMappingURL=Toggle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toggle.js","sourceRoot":"","sources":["../../../../components/Toggle/Toggle.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAc,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,cAAc,CAAC;AAqCtB;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,MAAM,GAA0B,CAAC,EAC5C,OAAO,EACP,cAAc,EACd,QAAQ,EACR,KAAK,EACL,OAAO,EACP,WAAW,GAAG,KAAK,EACnB,IAAI,EACJ,QAAQ,GAAG,KAAK,EAChB,IAAI,EACJ,SAAS,GAAG,EAAE,EACd,EAAE,EACF,GAAG,KAAK,EACT,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,KAAK,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,EAAE,IAAI,WAAW,CAAC;IAElC,MAAM,cAAc,GAAG;QACrB,aAAa;QACb,QAAQ,IAAI,uBAAuB;QACnC,WAAW,IAAI,2BAA2B;QAC1C,OAAO,IAAI,2BAA2B;QACtC,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,CACL,eAAK,SAAS,EAAE,cAAc,aAC3B,IAAI,IAAI,eAAM,SAAS,EAAC,mBAAmB,iBAAa,MAAM,YAAE,IAAI,GAAQ,EAE7E,eAAK,SAAS,EAAC,sBAAsB,aAClC,KAAK,IAAI,CACR,gBAAO,SAAS,EAAC,oBAAoB,EAAC,OAAO,EAAE,OAAO,YACnD,KAAK,GACA,CACT,EACA,OAAO,IAAI,CACV,eAAM,SAAS,EAAC,sBAAsB,YAAE,OAAO,GAAQ,CACxD,IACG,EAEN,iBAAO,SAAS,EAAC,qBAAqB,EAAC,OAAO,EAAE,OAAO,aACrD,gBACE,IAAI,EAAC,UAAU,EACf,IAAI,EAAC,QAAQ,EACb,EAAE,EAAE,OAAO,EACX,SAAS,EAAC,oBAAoB,EAC9B,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,kBACI,OAAO,KACjB,KAAK,GACT,EACF,eAAM,SAAS,EAAC,oBAAoB,YAClC,eAAM,SAAS,EAAC,mBAAmB,GAAG,GACjC,IACD,EAEP,WAAW,IAAI,cAAK,SAAS,EAAC,sBAAsB,GAAG,IACpD,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Toggle.js","sourceRoot":"","sources":["../../../../components/Toggle/Toggle.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,cAAc,CAAC;AAqCtB;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAgC,SAAS,MAAM,CACnF,EACE,OAAO,EACP,cAAc,EACd,QAAQ,EACR,KAAK,EACL,OAAO,EACP,WAAW,GAAG,KAAK,EACnB,IAAI,EACJ,QAAQ,GAAG,KAAK,EAChB,IAAI,EACJ,SAAS,GAAG,EAAE,EACd,EAAE,EACF,GAAG,KAAK,EACT,EACD,YAAY;IAEZ,MAAM,WAAW,GAAG,KAAK,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,EAAE,IAAI,WAAW,CAAC;IAElC,MAAM,cAAc,GAAG;QACrB,aAAa;QACb,QAAQ,IAAI,uBAAuB;QACnC,WAAW,IAAI,2BAA2B;QAC1C,OAAO,IAAI,2BAA2B;QACtC,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,CACL,eAAK,SAAS,EAAE,cAAc,aAC3B,IAAI,IAAI,eAAM,SAAS,EAAC,mBAAmB,iBAAa,MAAM,YAAE,IAAI,GAAQ,EAE7E,eAAK,SAAS,EAAC,sBAAsB,aAClC,KAAK,IAAI,CACR,gBAAO,SAAS,EAAC,oBAAoB,EAAC,OAAO,EAAE,OAAO,YACnD,KAAK,GACA,CACT,EACA,OAAO,IAAI,CACV,eAAM,SAAS,EAAC,sBAAsB,YAAE,OAAO,GAAQ,CACxD,IACG,EAEN,iBAAO,SAAS,EAAC,qBAAqB,EAAC,OAAO,EAAE,OAAO,aACrD,gBACE,GAAG,EAAE,YAAY,EACjB,IAAI,EAAC,UAAU,EACf,IAAI,EAAC,QAAQ,EACb,EAAE,EAAE,OAAO,EACX,SAAS,EAAC,oBAAoB,EAC9B,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,kBACI,OAAO,KACjB,KAAK,GACT,EACF,eAAM,SAAS,EAAC,oBAAoB,YAClC,eAAM,SAAS,EAAC,mBAAmB,GAAG,GACjC,IACD,EAEP,WAAW,IAAI,cAAK,SAAS,EAAC,sBAAsB,GAAG,IACpD,CACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -2,6 +2,7 @@
2
2
  export { Button } from './Button';
3
3
  export { ListItem } from './ListItem';
4
4
  export { Input } from './Input';
5
+ export { Form, useForm, } from './Form';
5
6
  export { NumberInput } from './NumberInput';
6
7
  export { Card } from './Card';
7
8
  export { Label } from './Label';
@@ -71,4 +72,6 @@ export { Combobox, } from './Combobox';
71
72
  export { SwipeActions, } from './SwipeActions';
72
73
  export { PullToRefresh } from './PullToRefresh';
73
74
  export { LicensePlateInput, } from './LicensePlateInput';
75
+ export { Thumbnail } from './Thumbnail';
76
+ export { PhotoUploader, } from './PhotoUploader';
74
77
  //# 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;
@@ -200,6 +200,35 @@
200
200
  opacity: 1;
201
201
  }
202
202
 
203
+ /* Muted variant - same as ghost but resting foreground is subtle, darkens on interaction */
204
+ .muka-button--muted {
205
+ background-color: var(--button-color-muted-background-default);
206
+ color: var(--button-color-muted-foreground-default);
207
+ border: 1px solid var(--button-color-muted-border-default);
208
+ }
209
+
210
+ .muka-button--muted:hover:not(:disabled) {
211
+ background-color: var(--button-color-muted-background-hover);
212
+ color: var(--button-color-muted-foreground-hover);
213
+ border-color: var(--button-color-muted-border-hover);
214
+ }
215
+
216
+ .muka-button--muted:active:not(:disabled),
217
+ .muka-button--muted.muka-button--pressed:not(:disabled),
218
+ .muka-button--muted[data-state="open"]:not(:disabled) {
219
+ background-color: var(--button-color-muted-background-pressed);
220
+ color: var(--button-color-muted-foreground-pressed);
221
+ border-color: var(--button-color-muted-border-pressed);
222
+ }
223
+
224
+ .muka-button--muted:disabled {
225
+ background-color: var(--button-color-muted-background-disabled);
226
+ color: var(--button-color-muted-foreground-disabled);
227
+ border-color: var(--button-color-muted-border-disabled);
228
+ cursor: not-allowed;
229
+ opacity: 1;
230
+ }
231
+
203
232
  /* General disabled state - fallback */
204
233
  .muka-button:disabled {
205
234
  cursor: not-allowed;
@@ -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,17 @@
1
+ .muka-form {
2
+ display: flex;
3
+ flex-direction: column;
4
+ width: 100%;
5
+ }
6
+
7
+ .muka-form--gap-sm {
8
+ gap: var(--size-sm);
9
+ }
10
+
11
+ .muka-form--gap-md {
12
+ gap: var(--size-md);
13
+ }
14
+
15
+ .muka-form--gap-lg {
16
+ gap: var(--size-lg);
17
+ }