@mattilsynet/design 2.2.23 → 2.2.25

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 (183) hide show
  1. package/mtds/alert/alert.js +9 -8
  2. package/mtds/alert/alert.js.map +1 -1
  3. package/mtds/analytics/analytics.d.ts +1 -1
  4. package/mtds/analytics/analytics.js +163 -101
  5. package/mtds/analytics/analytics.js.map +1 -1
  6. package/mtds/app/app-observer.js +73 -27
  7. package/mtds/app/app-observer.js.map +1 -1
  8. package/mtds/app/app-toggle.js +2 -24
  9. package/mtds/app/app-toggle.js.map +1 -1
  10. package/mtds/app/app-toggle2.js +16 -10
  11. package/mtds/app/app-toggle2.js.map +1 -1
  12. package/mtds/app/app.d.ts +5 -5
  13. package/mtds/app/app.js +36 -32
  14. package/mtds/app/app.js.map +1 -1
  15. package/mtds/atlas/atlas-element.d.ts +8 -14
  16. package/mtds/atlas/atlas-element.js +90 -76
  17. package/mtds/atlas/atlas-element.js.map +1 -1
  18. package/mtds/atlas/atlas-marker.d.ts +20 -0
  19. package/mtds/atlas/atlas-marker.js +69 -0
  20. package/mtds/atlas/atlas-marker.js.map +1 -0
  21. package/mtds/atlas/atlas-matgeo.d.ts +29 -0
  22. package/mtds/atlas/atlas-matgeo.js +71 -0
  23. package/mtds/atlas/atlas-matgeo.js.map +1 -0
  24. package/mtds/atlas/atlas.css.js +76 -96
  25. package/mtds/atlas/atlas.css.js.map +1 -1
  26. package/mtds/atlas/atlas.d.ts +42 -0
  27. package/mtds/atlas/atlas.js +33 -0
  28. package/mtds/atlas/atlas.js.map +1 -0
  29. package/mtds/atlas/atlas.stories.d.ts +5 -1
  30. package/mtds/atlas/cluster.js +1576 -697
  31. package/mtds/atlas/cluster.js.map +1 -1
  32. package/mtds/atlas.iife.js +80 -100
  33. package/mtds/atlas.js +8 -4
  34. package/mtds/atlas.js.map +1 -1
  35. package/mtds/avatar/avatar.js +8 -8
  36. package/mtds/avatar/avatar.js.map +1 -1
  37. package/mtds/badge/badge.d.ts +2 -2
  38. package/mtds/badge/badge.js +7 -7
  39. package/mtds/badge/badge.js.map +1 -1
  40. package/mtds/breadcrumbs/breadcrumbs-observer.js +10 -9
  41. package/mtds/breadcrumbs/breadcrumbs-observer.js.map +1 -1
  42. package/mtds/breadcrumbs/breadcrumbs.js +14 -13
  43. package/mtds/breadcrumbs/breadcrumbs.js.map +1 -1
  44. package/mtds/button/button.js +16 -14
  45. package/mtds/button/button.js.map +1 -1
  46. package/mtds/card/card.js +14 -12
  47. package/mtds/card/card.js.map +1 -1
  48. package/mtds/chart/chart-axis.js +27 -15
  49. package/mtds/chart/chart-axis.js.map +1 -1
  50. package/mtds/chart/chart-bars.js +15 -13
  51. package/mtds/chart/chart-bars.js.map +1 -1
  52. package/mtds/chart/chart-element.d.ts +5 -0
  53. package/mtds/chart/chart-element.js +83 -48
  54. package/mtds/chart/chart-element.js.map +1 -1
  55. package/mtds/chart/chart-lines.js +54 -32
  56. package/mtds/chart/chart-lines.js.map +1 -1
  57. package/mtds/chart/chart-pies.js +34 -14
  58. package/mtds/chart/chart-pies.js.map +1 -1
  59. package/mtds/chart/chart.css.js +2 -2
  60. package/mtds/chart/chart.css.js.map +1 -1
  61. package/mtds/chart/chart.d.ts +3 -4
  62. package/mtds/chart/chart.js +12 -12
  63. package/mtds/chart/chart.js.map +1 -1
  64. package/mtds/chip/chip.js +8 -8
  65. package/mtds/chip/chip.js.map +1 -1
  66. package/mtds/details/details.d.ts +3 -3
  67. package/mtds/details/details.js +14 -12
  68. package/mtds/details/details.js.map +1 -1
  69. package/mtds/dialog/dialog-observer.js +35 -22
  70. package/mtds/dialog/dialog-observer.js.map +1 -1
  71. package/mtds/dialog/dialog.d.ts +2 -2
  72. package/mtds/dialog/dialog.js +12 -12
  73. package/mtds/dialog/dialog.js.map +1 -1
  74. package/mtds/divider/divider.d.ts +2 -2
  75. package/mtds/divider/divider.js +10 -10
  76. package/mtds/divider/divider.js.map +1 -1
  77. package/mtds/errorsummary/errorsummary-observer.js +11 -8
  78. package/mtds/errorsummary/errorsummary-observer.js.map +1 -1
  79. package/mtds/errorsummary/errorsummary.d.ts +1 -1
  80. package/mtds/errorsummary/errorsummary.js +11 -11
  81. package/mtds/errorsummary/errorsummary.js.map +1 -1
  82. package/mtds/external/leaflet/dist/leaflet-src.js +6006 -3098
  83. package/mtds/external/leaflet/dist/leaflet-src.js.map +1 -1
  84. package/mtds/external/leaflet/dist/leaflet.css.js +2 -2
  85. package/mtds/external/leaflet/dist/leaflet.css.js.map +1 -1
  86. package/mtds/field/field-observer.js +114 -62
  87. package/mtds/field/field-observer.js.map +1 -1
  88. package/mtds/field/field.d.ts +6 -6
  89. package/mtds/field/field.js +166 -133
  90. package/mtds/field/field.js.map +1 -1
  91. package/mtds/field/field.stories.d.ts +2 -0
  92. package/mtds/fieldset/fieldset-observer.js +24 -14
  93. package/mtds/fieldset/fieldset-observer.js.map +1 -1
  94. package/mtds/fieldset/fieldset.d.ts +1 -1
  95. package/mtds/fieldset/fieldset.js +11 -11
  96. package/mtds/fieldset/fieldset.js.map +1 -1
  97. package/mtds/fileupload/fileupload.js +9 -8
  98. package/mtds/fileupload/fileupload.js.map +1 -1
  99. package/mtds/helptext/helptext.d.ts +1 -1
  100. package/mtds/helptext/helptext.js +15 -15
  101. package/mtds/helptext/helptext.js.map +1 -1
  102. package/mtds/index.iife.js +9 -9
  103. package/mtds/index.js +26 -24
  104. package/mtds/input/input.d.ts +3 -3
  105. package/mtds/input/input.js +22 -20
  106. package/mtds/input/input.js.map +1 -1
  107. package/mtds/law/law-helper.d.ts +6 -2
  108. package/mtds/law/law-helper.js +145 -63
  109. package/mtds/law/law-helper.js.map +1 -1
  110. package/mtds/law/law.d.ts +6 -2
  111. package/mtds/law/law.js +6 -6
  112. package/mtds/law/law.js.map +1 -1
  113. package/mtds/law/law.stories.d.ts +1 -0
  114. package/mtds/layout/layout.js +13 -10
  115. package/mtds/layout/layout.js.map +1 -1
  116. package/mtds/link/link.js +8 -7
  117. package/mtds/link/link.js.map +1 -1
  118. package/mtds/logo/logo-observer.js +18 -12
  119. package/mtds/logo/logo-observer.js.map +1 -1
  120. package/mtds/logo/logo.js +8 -8
  121. package/mtds/logo/logo.js.map +1 -1
  122. package/mtds/package.json.js +2 -2
  123. package/mtds/pagination/pagination-helper.js +17 -11
  124. package/mtds/pagination/pagination-helper.js.map +1 -1
  125. package/mtds/pagination/pagination.d.ts +1 -1
  126. package/mtds/pagination/pagination.js +30 -30
  127. package/mtds/pagination/pagination.js.map +1 -1
  128. package/mtds/popover/popover-observer.js +37 -28
  129. package/mtds/popover/popover-observer.js.map +1 -1
  130. package/mtds/popover/popover.js +13 -11
  131. package/mtds/popover/popover.js.map +1 -1
  132. package/mtds/progress/progress.d.ts +1 -1
  133. package/mtds/progress/progress.js +8 -8
  134. package/mtds/progress/progress.js.map +1 -1
  135. package/mtds/react-atlas.d.ts +1 -0
  136. package/mtds/react-atlas.js +13 -0
  137. package/mtds/react-atlas.js.map +1 -0
  138. package/mtds/react-types.d.ts +3 -0
  139. package/mtds/react.js +79 -79
  140. package/mtds/skeleton/skeleton.js +8 -8
  141. package/mtds/skeleton/skeleton.js.map +1 -1
  142. package/mtds/spinner/spinner.d.ts +2 -2
  143. package/mtds/spinner/spinner.js +8 -8
  144. package/mtds/spinner/spinner.js.map +1 -1
  145. package/mtds/steps/steps.d.ts +2 -2
  146. package/mtds/steps/steps.js +7 -7
  147. package/mtds/steps/steps.js.map +1 -1
  148. package/mtds/styles.css +4586 -1
  149. package/mtds/styles.module.css.js +167 -112
  150. package/mtds/styles.module.css.js.map +1 -1
  151. package/mtds/table/table-observer.js +22 -19
  152. package/mtds/table/table-observer.js.map +1 -1
  153. package/mtds/table/table.d.ts +4 -4
  154. package/mtds/table/table.js +18 -16
  155. package/mtds/table/table.js.map +1 -1
  156. package/mtds/tabs/tabs.d.ts +4 -4
  157. package/mtds/tabs/tabs.js +25 -21
  158. package/mtds/tabs/tabs.js.map +1 -1
  159. package/mtds/tag/tag.js +8 -8
  160. package/mtds/tag/tag.js.map +1 -1
  161. package/mtds/tailwind.css +24 -6
  162. package/mtds/toast/toast-helper.js +35 -20
  163. package/mtds/toast/toast-helper.js.map +1 -1
  164. package/mtds/toast/toast-observer.js +30 -15
  165. package/mtds/toast/toast-observer.js.map +1 -1
  166. package/mtds/toast/toast.js +45 -37
  167. package/mtds/toast/toast.js.map +1 -1
  168. package/mtds/togglegroup/togglegroup-observer.js +15 -10
  169. package/mtds/togglegroup/togglegroup-observer.js.map +1 -1
  170. package/mtds/togglegroup/togglegroup.d.ts +3 -3
  171. package/mtds/togglegroup/togglegroup.js +20 -18
  172. package/mtds/togglegroup/togglegroup.js.map +1 -1
  173. package/mtds/tooltip/tooltip-observer.js +48 -32
  174. package/mtds/tooltip/tooltip-observer.js.map +1 -1
  175. package/mtds/typography/typography.js +28 -19
  176. package/mtds/typography/typography.js.map +1 -1
  177. package/mtds/utils.d.ts +12 -3
  178. package/mtds/utils.js +133 -81
  179. package/mtds/utils.js.map +1 -1
  180. package/mtds/validation/validation.d.ts +1 -1
  181. package/mtds/validation/validation.js +12 -12
  182. package/mtds/validation/validation.js.map +1 -1
  183. package/package.json +14 -10
@@ -1,167 +1,200 @@
1
1
  'use client';
2
- import { jsx as e, Fragment as I, jsxs as D } from "react/jsx-runtime";
3
- import k from "clsx";
4
- import { forwardRef as p, useRef as z, useImperativeHandle as M, useEffect as Q } from "react";
5
- import { HelpText as T } from "../helptext/helptext.js";
6
- import { Input as U } from "../input/input.js";
7
- import j from "../styles.module.css.js";
8
- import { toCustomElementProps as E } from "../utils.js";
9
- import { Validation as X } from "../validation/validation.js";
10
- const P = (o) => typeof o == "string" ? { label: o, value: o } : o, Y = p(function({
11
- "data-size": t,
12
- "data-validation": n,
13
- as: i,
14
- className: m,
15
- count: u,
16
- description: f,
17
- error: g,
18
- helpText: y,
19
- helpTextLabel: C,
20
- label: b,
21
- prefix: h,
22
- style: L,
23
- suffix: v,
24
- validation: H,
25
- ...r
26
- }, x) {
27
- const d = i || "div", N = !!v || !!h, W = H || g, O = {
28
- "data-size": t,
29
- "data-validation": n,
30
- className: k(j.field, m),
31
- style: L
2
+ import { jsx, Fragment, jsxs } from "react/jsx-runtime";
3
+ import clsx from "clsx";
4
+ import { forwardRef, useRef, useImperativeHandle, useEffect } from "react";
5
+ import { HelpText } from "../helptext/helptext.js";
6
+ import { Input } from "../input/input.js";
7
+ import styles from "../styles.module.css.js";
8
+ import { toCustomElementProps } from "../utils.js";
9
+ import { Validation } from "../validation/validation.js";
10
+ const toOption = (o) => typeof o === "string" ? { label: o, value: o } : o;
11
+ const FieldComp = forwardRef(function Field2({
12
+ "data-size": size,
13
+ "data-validation": validationType,
14
+ as,
15
+ className,
16
+ count,
17
+ description,
18
+ error,
19
+ helpText,
20
+ helpTextLabel,
21
+ label,
22
+ prefix,
23
+ style,
24
+ suffix,
25
+ validation: validationContent,
26
+ ...rest
27
+ }, ref) {
28
+ const Tag = as || "div";
29
+ const affixes = !!suffix || !!prefix;
30
+ const validation = validationContent || error;
31
+ const shared = {
32
+ "data-size": size,
33
+ "data-validation": validationType,
34
+ className: clsx(styles.field, className),
35
+ style
32
36
  };
33
- return i === "select" && !r.children && Object.assign(r, {
34
- options: void 0,
35
- // Ensure options is not passed to DOM
36
- children: /* @__PURE__ */ e(I, { children: r.options?.map(P).map(({ label: F, value: l }) => /* @__PURE__ */ e("option", { value: l, children: F }, l)) })
37
- }), i ? /* @__PURE__ */ D("div", { ...O, children: [
38
- !!b && /* @__PURE__ */ e("label", { suppressHydrationWarning: !0, children: b }),
39
- !!y && /* @__PURE__ */ e(T, { "aria-label": C, children: y }),
40
- !!f && /* @__PURE__ */ e("p", { suppressHydrationWarning: !0, children: f }),
41
- N ? /* @__PURE__ */ D(S, { children: [
42
- !!h && /* @__PURE__ */ e("span", { children: h }),
43
- /* @__PURE__ */ e(
44
- d,
37
+ if (as === "select" && !rest.children)
38
+ Object.assign(rest, {
39
+ options: void 0,
40
+ // Ensure options is not passed to DOM
41
+ children: /* @__PURE__ */ jsx(Fragment, { children: rest.options?.map(toOption).map(({ label: label2, value }) => /* @__PURE__ */ jsx("option", { value, children: label2 }, value)) })
42
+ });
43
+ return as ? /* @__PURE__ */ jsxs("div", { ...shared, children: [
44
+ !!label && /* @__PURE__ */ jsx("label", { suppressHydrationWarning: true, children: label }),
45
+ !!helpText && /* @__PURE__ */ jsx(HelpText, { "aria-label": helpTextLabel, children: helpText }),
46
+ !!description && /* @__PURE__ */ jsx("p", { suppressHydrationWarning: true, children: description }),
47
+ affixes ? /* @__PURE__ */ jsxs(FieldAffixes, { children: [
48
+ !!prefix && /* @__PURE__ */ jsx("span", { children: prefix }),
49
+ /* @__PURE__ */ jsx(
50
+ Tag,
45
51
  {
46
- className: j.input,
47
- suppressHydrationWarning: !0,
48
- ref: x,
49
- ...r
52
+ className: styles.input,
53
+ suppressHydrationWarning: true,
54
+ ref,
55
+ ...rest
50
56
  }
51
57
  ),
52
- !!v && /* @__PURE__ */ e("span", { children: v })
53
- ] }) : /* @__PURE__ */ e(
54
- d,
58
+ !!suffix && /* @__PURE__ */ jsx("span", { children: suffix })
59
+ ] }) : /* @__PURE__ */ jsx(
60
+ Tag,
55
61
  {
56
- className: typeof i == "string" ? j.input : void 0,
57
- suppressHydrationWarning: !0,
58
- ref: x,
59
- ...r
62
+ className: typeof as === "string" ? styles.input : void 0,
63
+ suppressHydrationWarning: true,
64
+ ref,
65
+ ...rest
60
66
  }
61
67
  ),
62
- !!W && /* @__PURE__ */ e(X, { hidden: n === "form", children: W }),
63
- !!u && /* @__PURE__ */ e("p", { suppressHydrationWarning: !0, "data-count": u })
64
- ] }) : /* @__PURE__ */ e("div", { ref: x, ...O, ...r });
65
- }), S = p(
66
- function({ className: t, ...n }, i) {
67
- return /* @__PURE__ */ e("div", { className: k(j.affixes, t), ref: i, ...n });
68
+ !!validation && /* @__PURE__ */ jsx(Validation, { hidden: validationType === "form", children: validation }),
69
+ !!count && /* @__PURE__ */ jsx("p", { suppressHydrationWarning: true, "data-count": count })
70
+ ] }) : /* @__PURE__ */ jsx("div", { ref, ...shared, ...rest });
71
+ });
72
+ const FieldAffixes = forwardRef(
73
+ function FieldAffixes2({ className, ...rest }, ref) {
74
+ return /* @__PURE__ */ jsx("div", { className: clsx(styles.affixes, className), ref, ...rest });
68
75
  }
69
- ), V = p(
70
- function({ "data-nofilter": t, ...n }, i) {
71
- return /* @__PURE__ */ e(
76
+ );
77
+ const FieldDatalist = forwardRef(
78
+ function FieldDatalist2({ "data-nofilter": filter, ...rest }, ref) {
79
+ return /* @__PURE__ */ jsx(
72
80
  "u-datalist",
73
81
  {
74
- "data-nofilter": !!t || void 0,
75
- ref: i,
76
- ...E(n)
82
+ "data-nofilter": !!filter || void 0,
83
+ ref,
84
+ ...toCustomElementProps(rest)
77
85
  }
78
86
  );
79
87
  }
80
- ), B = p(
81
- function(t, n) {
82
- return /* @__PURE__ */ e("u-option", { ref: n, ...E(t) });
88
+ );
89
+ const FieldOption = forwardRef(
90
+ function FieldOption2(props, ref) {
91
+ return /* @__PURE__ */ jsx("u-option", { ref, ...toCustomElementProps(props) });
83
92
  }
84
- ), Z = p(
85
- function({
86
- "aria-required": t,
87
- "data-position": n,
88
- "data-nofilter": i,
89
- "data-multiple": m,
90
- onAfterChange: u,
91
- onAfterSelect: f,
92
- onBeforeChange: g,
93
- onBeforeMatch: y,
94
- onBeforeSelect: C,
95
- onSelectedChange: b,
96
- children: h,
97
- disabled: L,
98
- name: v,
99
- options: H,
100
- placeholder: r,
101
- readOnly: x,
102
- selected: d,
103
- type: N,
104
- ...W
105
- }, O) {
106
- const F = z(null), l = z(b);
107
- return l.current = b, u && (f = u, console.warn(
108
- "Combobox onAfterChange is deprecated, use onAfterSelect instead."
109
- )), g && (C = g, console.warn(
110
- "Combobox onBeforeChange is deprecated, use onBeforeSelect instead."
111
- )), M(O, () => F.current), Q(() => {
112
- const c = F.current, s = (a) => {
113
- const w = l.current;
114
- if (!l) return;
115
- a.preventDefault();
116
- const { isConnected: G, textContent: J, value: A } = a.detail, R = J?.trim() || "", q = d || [];
117
- w?.(G ? q.filter((K) => K.value !== A) : m ? [...q, { value: A, label: R }] : [{ value: A, label: R }]);
93
+ );
94
+ const FieldCombobox = forwardRef(
95
+ function FieldCombobox2({
96
+ "aria-required": required,
97
+ "data-position": position,
98
+ "data-nofilter": nofilter,
99
+ "data-multiple": multiple,
100
+ onAfterChange,
101
+ onAfterSelect,
102
+ onBeforeChange,
103
+ onBeforeMatch,
104
+ onBeforeSelect,
105
+ onSelectedChange,
106
+ onInput,
107
+ onChange,
108
+ children,
109
+ disabled,
110
+ name,
111
+ options,
112
+ placeholder,
113
+ readOnly,
114
+ selected,
115
+ type,
116
+ ...props
117
+ }, ref) {
118
+ const innerRef = useRef(null);
119
+ const onSelected = useRef(onSelectedChange);
120
+ onSelected.current = onSelectedChange;
121
+ if (onAfterChange) {
122
+ onAfterSelect = onAfterChange;
123
+ console.warn(
124
+ `Combobox onAfterChange is deprecated, use onAfterSelect instead.`
125
+ );
126
+ }
127
+ if (onBeforeChange) {
128
+ onBeforeSelect = onBeforeChange;
129
+ console.warn(
130
+ `Combobox onBeforeChange is deprecated, use onBeforeSelect instead.`
131
+ );
132
+ }
133
+ useImperativeHandle(ref, () => innerRef.current);
134
+ useEffect(() => {
135
+ const self = innerRef.current;
136
+ const handleChange = (event) => {
137
+ const handleSelected = onSelected.current;
138
+ if (!onSelected) return;
139
+ event.preventDefault();
140
+ const { isConnected: remove, textContent, value } = event.detail;
141
+ const label = textContent?.trim() || "";
142
+ const prev = selected || [];
143
+ if (remove) handleSelected?.(prev.filter((i) => i.value !== value));
144
+ else if (multiple) handleSelected?.([...prev, { value, label }]);
145
+ else handleSelected?.([{ value, label }]);
118
146
  };
119
- return c?.addEventListener("comboboxbeforeselect", s), () => c?.removeEventListener("comboboxbeforeselect", s);
120
- }, [m, d]), /* @__PURE__ */ D(
147
+ self?.addEventListener("comboboxbeforeselect", handleChange);
148
+ return () => self?.removeEventListener("comboboxbeforeselect", handleChange);
149
+ }, [multiple, selected]);
150
+ return /* @__PURE__ */ jsxs(
121
151
  "u-combobox",
122
152
  {
123
- "data-multiple": m || void 0,
124
- ...E({
125
- oncomboboxbeforeselect: C,
126
- oncomboboxbeforematch: y,
127
- oncomboboxafterselect: f,
128
- ref: F,
129
- ...W
153
+ "data-multiple": multiple || void 0,
154
+ ...toCustomElementProps({
155
+ oncomboboxbeforeselect: onBeforeSelect,
156
+ oncomboboxbeforematch: onBeforeMatch,
157
+ oncomboboxafterselect: onAfterSelect,
158
+ ref: innerRef,
159
+ ...props
130
160
  }),
131
161
  children: [
132
- d?.map(({ children: c, label: s, value: a }) => /* @__PURE__ */ e("data", { value: a, suppressHydrationWarning: !0, children: c ?? s }, a)),
133
- h || /* @__PURE__ */ D(I, { children: [
134
- /* @__PURE__ */ e(
135
- U,
162
+ selected?.map(({ children: children2, label, value }) => /* @__PURE__ */ jsx("data", { value, suppressHydrationWarning: true, children: children2 ?? label }, value)),
163
+ children || /* @__PURE__ */ jsxs(Fragment, { children: [
164
+ /* @__PURE__ */ jsx(
165
+ Input,
136
166
  {
137
- "aria-required": t,
138
- disabled: L,
139
- name: v,
140
- placeholder: r,
141
- readOnly: x,
142
- type: N
167
+ "aria-required": required,
168
+ disabled,
169
+ name,
170
+ onInput,
171
+ onChange,
172
+ placeholder,
173
+ readOnly,
174
+ type
143
175
  }
144
176
  ),
145
- /* @__PURE__ */ e("del", { ...E({ "aria-label": "Fjern tekst" }) })
177
+ /* @__PURE__ */ jsx("del", { ...toCustomElementProps({ "aria-label": "Fjern tekst" }) })
146
178
  ] }),
147
- !!H && /* @__PURE__ */ e(V, { "data-nofilter": i, "data-position": n, children: H.map(P).map(({ children: c, label: s, value: a }) => /* @__PURE__ */ e(B, { value: a, label: s, children: c ?? s }, a)) })
179
+ !!options && /* @__PURE__ */ jsx(FieldDatalist, { "data-nofilter": nofilter, "data-position": position, children: options.map(toOption).map(({ children: children2, label, value }) => /* @__PURE__ */ jsx(FieldOption, { value, label, children: children2 ?? label }, value)) })
148
180
  ]
149
181
  }
150
182
  );
151
183
  }
152
- ), ae = Object.assign(Y, {
153
- Affixes: S,
154
- Combobox: Z,
155
- Datalist: V,
156
- Option: B,
157
- Label: p(
158
- function(t, n) {
159
- return /* @__PURE__ */ e("label", { suppressHydrationWarning: !0, ref: n, ...t });
184
+ );
185
+ const Field = Object.assign(FieldComp, {
186
+ Affixes: FieldAffixes,
187
+ Combobox: FieldCombobox,
188
+ Datalist: FieldDatalist,
189
+ Option: FieldOption,
190
+ Label: forwardRef(
191
+ function FieldLabel(rest, ref) {
192
+ return /* @__PURE__ */ jsx("label", { suppressHydrationWarning: true, ref, ...rest });
160
193
  }
161
194
  )
162
195
  });
163
196
  export {
164
- ae as Field,
165
- Y as FieldComp
197
+ Field,
198
+ FieldComp
166
199
  };
167
200
  //# sourceMappingURL=field.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"field.js","sources":["../../designsystem/field/field.tsx"],"sourcesContent":["\"use client\";\nimport type { Placement } from \"@floating-ui/dom\";\nimport type {\n\tReactUcombobox,\n\tUHTMLComboboxElement,\n} from \"@u-elements/u-combobox\";\nimport clsx from \"clsx\";\nimport type { JSX } from \"react\";\nimport { forwardRef, useEffect, useImperativeHandle, useRef } from \"react\";\nimport { HelpText } from \"../helptext/helptext\";\nimport { Input, type InputProps } from \"../input/input\";\nimport type {\n\tPolymorphicComponentPropWithRef,\n\tPolymorphicRef,\n} from \"../react-types\";\nimport styles from \"../styles.module.css\";\nimport { toCustomElementProps } from \"../utils\";\nimport { Validation } from \"../validation/validation\";\n\ntype FieldBaseProps = {\n\t\"data-validation\"?: \"form\" | \"false\" | false;\n\tcount?: number;\n\tdescription?: React.ReactNode;\n\terror?: React.ReactNode; // Kept for backwards compatibility\n\thelpText?: React.ReactNode;\n\thelpTextLabel?: string;\n\tlabel?: React.ReactNode;\n\toptions?: string[] | FieldComboboxSelected;\n\tprefix?: string;\n\treadOnly?: boolean; // Allow readoOnly also on <select>\n\tsuffix?: string;\n\tvalidation?: React.ReactNode;\n};\n\nexport type FieldProps<As extends React.ElementType = \"div\"> =\n\tPolymorphicComponentPropWithRef<As, FieldBaseProps>;\n\ntype FieldComponent = <As extends React.ElementType = \"div\">(\n\tprops: FieldProps<As>,\n) => JSX.Element;\n\nconst toOption = (\n\to: FieldComboboxSelected[number] | string,\n): FieldComboboxSelected[number] =>\n\ttypeof o === \"string\" ? { label: o, value: o } : o;\n\nexport const FieldComp: FieldComponent = forwardRef<null>(function Field<\n\tAs extends React.ElementType = \"div\",\n>(\n\t{\n\t\t\"data-size\": size,\n\t\t\"data-validation\": validationType,\n\t\tas,\n\t\tclassName,\n\t\tcount,\n\t\tdescription,\n\t\terror,\n\t\thelpText,\n\t\thelpTextLabel,\n\t\tlabel,\n\t\tprefix,\n\t\tstyle,\n\t\tsuffix,\n\t\tvalidation: validationContent,\n\t\t...rest\n\t}: FieldProps<As>,\n\tref?: PolymorphicRef<As>,\n) {\n\tconst Tag = as || \"div\";\n\tconst affixes = !!suffix || !!prefix;\n\tconst validation = validationContent || error; // error kept for backwards compatibility\n\tconst shared = {\n\t\t\"data-size\": size,\n\t\t\"data-validation\": validationType,\n\t\tclassName: clsx(styles.field, className),\n\t\tstyle,\n\t};\n\n\t// Render options if select\n\tif (as === \"select\" && !rest.children)\n\t\tObject.assign(rest, {\n\t\t\toptions: undefined, // Ensure options is not passed to DOM\n\t\t\tchildren: (\n\t\t\t\t<>\n\t\t\t\t\t{(rest.options as FieldBaseProps[\"options\"])\n\t\t\t\t\t\t?.map(toOption)\n\t\t\t\t\t\t.map(({ label, value }) => (\n\t\t\t\t\t\t\t<option key={value} value={value}>\n\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t))}\n\t\t\t\t</>\n\t\t\t),\n\t\t});\n\n\t// Using suppressHydrationWarning to avoid Next.js vs field-observer.ts hydration conflict\n\treturn as ? (\n\t\t<div {...shared}>\n\t\t\t{!!label && <label suppressHydrationWarning>{label}</label>}\n\t\t\t{!!helpText && <HelpText aria-label={helpTextLabel}>{helpText}</HelpText>}\n\t\t\t{!!description && <p suppressHydrationWarning>{description}</p>}\n\t\t\t{affixes ? (\n\t\t\t\t<FieldAffixes>\n\t\t\t\t\t{!!prefix && <span>{prefix}</span>}\n\t\t\t\t\t<Tag\n\t\t\t\t\t\tclassName={styles.input}\n\t\t\t\t\t\tsuppressHydrationWarning\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t{...rest}\n\t\t\t\t\t/>\n\t\t\t\t\t{!!suffix && <span>{suffix}</span>}\n\t\t\t\t</FieldAffixes>\n\t\t\t) : (\n\t\t\t\t<Tag\n\t\t\t\t\tclassName={typeof as === \"string\" ? styles.input : undefined}\n\t\t\t\t\tsuppressHydrationWarning\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...rest}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{!!validation && (\n\t\t\t\t<Validation hidden={validationType === \"form\"}>{validation}</Validation>\n\t\t\t)}\n\t\t\t{!!count && <p suppressHydrationWarning data-count={count} />}\n\t\t</div>\n\t) : (\n\t\t<div ref={ref} {...shared} {...rest} />\n\t);\n}) as FieldComponent; // Needed to tell Typescript this does not return ReactNode but acutally JSX.Element\n\nexport type FieldAffixProps = React.ComponentPropsWithoutRef<\"div\">;\nconst FieldAffixes = forwardRef<HTMLDivElement, FieldAffixProps>(\n\tfunction FieldAffixes({ className, ...rest }, ref) {\n\t\treturn (\n\t\t\t<div className={clsx(styles.affixes, className)} ref={ref} {...rest} />\n\t\t);\n\t},\n);\n\nexport type FieldDatalistProps = React.ComponentPropsWithoutRef<\"datalist\"> & {\n\t\"data-nofilter\"?: boolean;\n\t\"data-position\"?: Placement;\n};\n\nconst FieldDatalist = forwardRef<HTMLDataListElement, FieldDatalistProps>(\n\tfunction FieldDatalist({ \"data-nofilter\": filter, ...rest }, ref) {\n\t\treturn (\n\t\t\t<u-datalist\n\t\t\t\tdata-nofilter={!!filter || undefined} // Ensure data-nofilter is set correctly\n\t\t\t\tref={ref}\n\t\t\t\t{...toCustomElementProps(rest)}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nexport type FieldOptionProps = React.ComponentPropsWithoutRef<\"option\">;\nconst FieldOption = forwardRef<HTMLOptionElement, FieldOptionProps>(\n\tfunction FieldOption(props, ref) {\n\t\treturn <u-option ref={ref} {...toCustomElementProps(props)} />;\n\t},\n);\n\nexport type FieldComboboxSelected = {\n\tlabel: string;\n\tvalue: string;\n\tchildren?: React.ReactNode;\n}[];\nexport type FieldComboboxProps = Omit<\n\tReactUcombobox,\n\t\"onChange\" | \"onInput\"\n> & {\n\t\"data-creatable\"?: boolean;\n\t\"data-multiple\"?: boolean;\n\tonAfterChange?: (e: CustomEvent<HTMLDataElement>) => void; // deprecated\n\tonAfterSelect?: (e: CustomEvent<HTMLDataElement>) => void; // Custom event to handle before change\n\tonBeforeChange?: (e: CustomEvent<HTMLDataElement>) => void; // deprecated\n\tonBeforeMatch?: (e: CustomEvent<HTMLOptionElement>) => void; // Custom event to handle before change\n\tonBeforeSelect?: (e: CustomEvent<HTMLDataElement>) => void; // Custom event to handle before change\n\tonSelectedChange?: (selected: FieldComboboxSelected) => void; // Allow onChange to be a function that returns void\n\toptions?: FieldComboboxSelected;\n\tselected?: FieldComboboxSelected; // Allow value to be a string or an array of strings for multiple select\n} & Pick<\n\t\tInputProps,\n\t\t| \"disabled\"\n\t\t| \"name\"\n\t\t| \"onChange\"\n\t\t| \"onInput\"\n\t\t| \"placeholder\"\n\t\t| \"readOnly\"\n\t\t| \"type\"\n\t\t| \"value\"\n\t> & // Allow input props to be passed down\n\tPick<FieldDatalistProps, \"data-position\" | \"data-nofilter\">; // Allow datalist props to be passed down\n\nconst FieldCombobox = forwardRef<UHTMLComboboxElement, FieldComboboxProps>(\n\tfunction FieldCombobox(\n\t\t{\n\t\t\t\"aria-required\": required,\n\t\t\t\"data-position\": position,\n\t\t\t\"data-nofilter\": nofilter,\n\t\t\t\"data-multiple\": multiple,\n\t\t\tonAfterChange,\n\t\t\tonAfterSelect,\n\t\t\tonBeforeChange,\n\t\t\tonBeforeMatch,\n\t\t\tonBeforeSelect,\n\t\t\tonSelectedChange,\n\t\t\tchildren,\n\t\t\tdisabled,\n\t\t\tname,\n\t\t\toptions,\n\t\t\tplaceholder,\n\t\t\treadOnly,\n\t\t\tselected,\n\t\t\ttype,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) {\n\t\tconst innerRef = useRef<UHTMLComboboxElement>(null);\n\t\tconst onSelected = useRef(onSelectedChange);\n\t\tonSelected.current = onSelectedChange; // Sync the latest onSelectedChange function\n\n\t\t// Deprecated props\n\t\tif (onAfterChange) {\n\t\t\tonAfterSelect = onAfterChange;\n\t\t\tconsole.warn(\n\t\t\t\t`Combobox onAfterChange is deprecated, use onAfterSelect instead.`,\n\t\t\t);\n\t\t}\n\t\tif (onBeforeChange) {\n\t\t\tonBeforeSelect = onBeforeChange;\n\t\t\tconsole.warn(\n\t\t\t\t`Combobox onBeforeChange is deprecated, use onBeforeSelect instead.`,\n\t\t\t);\n\t\t}\n\n\t\t// Using useEffect for React 18 and lower compatibility\n\t\tuseImperativeHandle(ref, () => innerRef.current as UHTMLComboboxElement); // Forward innerRef\n\t\tuseEffect(() => {\n\t\t\tconst self = innerRef.current;\n\t\t\tconst handleChange = (event: CustomEvent<HTMLDataElement>) => {\n\t\t\t\tconst handleSelected = onSelected.current;\n\t\t\t\tif (!onSelected) return; // No onSelectedChange function provided, let u-combobox handle it\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst { isConnected: remove, textContent, value } = event.detail;\n\t\t\t\tconst label = textContent?.trim() || \"\";\n\t\t\t\tconst prev = selected || [];\n\n\t\t\t\tif (remove) handleSelected?.(prev.filter((i) => i.value !== value));\n\t\t\t\telse if (multiple) handleSelected?.([...prev, { value, label }]);\n\t\t\t\telse handleSelected?.([{ value, label }]);\n\t\t\t};\n\n\t\t\tself?.addEventListener(\"comboboxbeforeselect\", handleChange);\n\t\t\treturn () =>\n\t\t\t\tself?.removeEventListener(\"comboboxbeforeselect\", handleChange);\n\t\t}, [multiple, selected]);\n\n\t\treturn (\n\t\t\t<u-combobox\n\t\t\t\tdata-multiple={multiple || undefined}\n\t\t\t\t{...toCustomElementProps({\n\t\t\t\t\toncomboboxbeforeselect: onBeforeSelect,\n\t\t\t\t\toncomboboxbeforematch: onBeforeMatch,\n\t\t\t\t\toncomboboxafterselect: onAfterSelect,\n\t\t\t\t\tref: innerRef,\n\t\t\t\t\t...props,\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t{selected?.map(({ children, label, value }) => (\n\t\t\t\t\t<data key={value} value={value} suppressHydrationWarning>\n\t\t\t\t\t\t{children ?? label}\n\t\t\t\t\t</data>\n\t\t\t\t))}\n\t\t\t\t{children || (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\taria-required={required}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t\ttype={type}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<del {...toCustomElementProps({ \"aria-label\": \"Fjern tekst\" })} />\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t\t{!!options && (\n\t\t\t\t\t<FieldDatalist data-nofilter={nofilter} data-position={position}>\n\t\t\t\t\t\t{options.map(toOption).map(({ children, label, value }) => (\n\t\t\t\t\t\t\t<FieldOption key={value} value={value} label={label}>\n\t\t\t\t\t\t\t\t{children ?? label}\n\t\t\t\t\t\t\t</FieldOption>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</FieldDatalist>\n\t\t\t\t)}\n\t\t\t</u-combobox>\n\t\t);\n\t},\n);\n\nexport type FieldLabelProps = React.ComponentPropsWithoutRef<\"label\">;\nexport const Field = Object.assign(FieldComp, {\n\tAffixes: FieldAffixes,\n\tCombobox: FieldCombobox,\n\tDatalist: FieldDatalist,\n\tOption: FieldOption,\n\tLabel: forwardRef<HTMLLabelElement, FieldLabelProps>(\n\t\tfunction FieldLabel(rest, ref) {\n\t\t\treturn <label suppressHydrationWarning ref={ref} {...rest} />;\n\t\t},\n\t),\n});\n"],"names":["toOption","FieldComp","forwardRef","size","validationType","as","className","count","description","error","helpText","helpTextLabel","label","prefix","style","suffix","validationContent","rest","ref","Tag","affixes","validation","shared","clsx","styles","value","jsx","jsxs","HelpText","FieldAffixes","Validation","FieldDatalist","filter","toCustomElementProps","FieldOption","props","FieldCombobox","required","position","nofilter","multiple","onAfterChange","onAfterSelect","onBeforeChange","onBeforeMatch","onBeforeSelect","onSelectedChange","children","disabled","name","options","placeholder","readOnly","selected","type","innerRef","useRef","onSelected","useImperativeHandle","useEffect","self","handleChange","event","handleSelected","remove","textContent","prev","i","Fragment","Input","Field"],"mappings":"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"}
1
+ {"version":3,"file":"field.js","sources":["../../designsystem/field/field.tsx"],"sourcesContent":["\"use client\";\nimport type { Placement } from \"@floating-ui/dom\";\nimport type {\n\tReactUcombobox,\n\tUHTMLComboboxElement,\n} from \"@u-elements/u-combobox\";\nimport clsx from \"clsx\";\nimport type { JSX } from \"react\";\nimport { forwardRef, useEffect, useImperativeHandle, useRef } from \"react\";\nimport { HelpText } from \"../helptext/helptext\";\nimport { Input, type InputProps } from \"../input/input\";\nimport type {\n\tPolymorphicComponentPropWithRef,\n\tPolymorphicRef,\n} from \"../react-types\";\nimport styles from \"../styles.module.css\";\nimport { toCustomElementProps } from \"../utils\";\nimport { Validation } from \"../validation/validation\";\n\ntype FieldBaseProps = {\n\t\"data-validation\"?: \"form\" | \"false\" | false;\n\tcount?: number;\n\tdescription?: React.ReactNode;\n\terror?: React.ReactNode; // Kept for backwards compatibility\n\thelpText?: React.ReactNode;\n\thelpTextLabel?: string;\n\tlabel?: React.ReactNode;\n\toptions?: string[] | FieldComboboxSelected;\n\tprefix?: string;\n\treadOnly?: boolean; // Allow readoOnly also on <select>\n\tsuffix?: string;\n\tvalidation?: React.ReactNode;\n};\n\nexport type FieldProps<As extends React.ElementType = \"div\"> =\n\tPolymorphicComponentPropWithRef<As, FieldBaseProps>;\n\ntype FieldComponent = <As extends React.ElementType = \"div\">(\n\tprops: FieldProps<As>,\n) => JSX.Element;\n\nconst toOption = (\n\to: FieldComboboxSelected[number] | string,\n): FieldComboboxSelected[number] =>\n\ttypeof o === \"string\" ? { label: o, value: o } : o;\n\nexport const FieldComp: FieldComponent = forwardRef<null>(function Field<\n\tAs extends React.ElementType = \"div\",\n>(\n\t{\n\t\t\"data-size\": size,\n\t\t\"data-validation\": validationType,\n\t\tas,\n\t\tclassName,\n\t\tcount,\n\t\tdescription,\n\t\terror,\n\t\thelpText,\n\t\thelpTextLabel,\n\t\tlabel,\n\t\tprefix,\n\t\tstyle,\n\t\tsuffix,\n\t\tvalidation: validationContent,\n\t\t...rest\n\t}: FieldProps<As>,\n\tref?: PolymorphicRef<As>,\n) {\n\tconst Tag = as || \"div\";\n\tconst affixes = !!suffix || !!prefix;\n\tconst validation = validationContent || error; // error kept for backwards compatibility\n\tconst shared = {\n\t\t\"data-size\": size,\n\t\t\"data-validation\": validationType,\n\t\tclassName: clsx(styles.field, className),\n\t\tstyle,\n\t};\n\n\t// Render options if select\n\tif (as === \"select\" && !rest.children)\n\t\tObject.assign(rest, {\n\t\t\toptions: undefined, // Ensure options is not passed to DOM\n\t\t\tchildren: (\n\t\t\t\t<>\n\t\t\t\t\t{(rest.options as FieldBaseProps[\"options\"])\n\t\t\t\t\t\t?.map(toOption)\n\t\t\t\t\t\t.map(({ label, value }) => (\n\t\t\t\t\t\t\t<option key={value} value={value}>\n\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t))}\n\t\t\t\t</>\n\t\t\t),\n\t\t});\n\n\t// Using suppressHydrationWarning to avoid Next.js vs field-observer.ts hydration conflict\n\treturn as ? (\n\t\t<div {...shared}>\n\t\t\t{!!label && <label suppressHydrationWarning>{label}</label>}\n\t\t\t{!!helpText && <HelpText aria-label={helpTextLabel}>{helpText}</HelpText>}\n\t\t\t{!!description && <p suppressHydrationWarning>{description}</p>}\n\t\t\t{affixes ? (\n\t\t\t\t<FieldAffixes>\n\t\t\t\t\t{!!prefix && <span>{prefix}</span>}\n\t\t\t\t\t<Tag\n\t\t\t\t\t\tclassName={styles.input}\n\t\t\t\t\t\tsuppressHydrationWarning\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t{...rest}\n\t\t\t\t\t/>\n\t\t\t\t\t{!!suffix && <span>{suffix}</span>}\n\t\t\t\t</FieldAffixes>\n\t\t\t) : (\n\t\t\t\t<Tag\n\t\t\t\t\tclassName={typeof as === \"string\" ? styles.input : undefined}\n\t\t\t\t\tsuppressHydrationWarning\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...rest}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{!!validation && (\n\t\t\t\t<Validation hidden={validationType === \"form\"}>{validation}</Validation>\n\t\t\t)}\n\t\t\t{!!count && <p suppressHydrationWarning data-count={count} />}\n\t\t</div>\n\t) : (\n\t\t<div ref={ref} {...shared} {...rest} />\n\t);\n}) as FieldComponent; // Needed to tell Typescript this does not return ReactNode but acutally JSX.Element\n\nexport type FieldAffixProps = React.ComponentPropsWithoutRef<\"div\">;\nconst FieldAffixes = forwardRef<HTMLDivElement, FieldAffixProps>(\n\tfunction FieldAffixes({ className, ...rest }, ref) {\n\t\treturn (\n\t\t\t<div className={clsx(styles.affixes, className)} ref={ref} {...rest} />\n\t\t);\n\t},\n);\n\nexport type FieldDatalistProps = React.ComponentPropsWithoutRef<\"datalist\"> & {\n\t\"data-nofilter\"?: boolean;\n\t\"data-position\"?: Placement;\n};\n\nconst FieldDatalist = forwardRef<HTMLDataListElement, FieldDatalistProps>(\n\tfunction FieldDatalist({ \"data-nofilter\": filter, ...rest }, ref) {\n\t\treturn (\n\t\t\t<u-datalist\n\t\t\t\tdata-nofilter={!!filter || undefined} // Ensure data-nofilter is set correctly\n\t\t\t\tref={ref}\n\t\t\t\t{...toCustomElementProps(rest)}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nexport type FieldOptionProps = React.ComponentPropsWithoutRef<\"option\">;\nconst FieldOption = forwardRef<HTMLOptionElement, FieldOptionProps>(\n\tfunction FieldOption(props, ref) {\n\t\treturn <u-option ref={ref} {...toCustomElementProps(props)} />;\n\t},\n);\n\nexport type FieldComboboxSelected = {\n\tlabel: string;\n\tvalue: string;\n\tchildren?: React.ReactNode;\n}[];\nexport type FieldComboboxProps = Omit<\n\tReactUcombobox,\n\t\"onChange\" | \"onInput\"\n> & {\n\t\"data-creatable\"?: boolean;\n\t\"data-multiple\"?: boolean;\n\tonAfterChange?: (e: CustomEvent<HTMLDataElement>) => void; // deprecated\n\tonAfterSelect?: (e: CustomEvent<HTMLDataElement>) => void; // Custom event to handle before change\n\tonBeforeChange?: (e: CustomEvent<HTMLDataElement>) => void; // deprecated\n\tonBeforeMatch?: (e: CustomEvent<HTMLOptionElement>) => void; // Custom event to handle before change\n\tonBeforeSelect?: (e: CustomEvent<HTMLDataElement>) => void; // Custom event to handle before change\n\tonSelectedChange?: (selected: FieldComboboxSelected) => void; // Allow onChange to be a function that returns void\n\toptions?: FieldComboboxSelected;\n\tselected?: FieldComboboxSelected; // Allow value to be a string or an array of strings for multiple select\n} & Pick<\n\t\tInputProps,\n\t\t| \"disabled\"\n\t\t| \"name\"\n\t\t| \"onChange\"\n\t\t| \"onInput\"\n\t\t| \"placeholder\"\n\t\t| \"readOnly\"\n\t\t| \"type\"\n\t\t| \"value\"\n\t> & // Allow input props to be passed down\n\tPick<FieldDatalistProps, \"data-position\" | \"data-nofilter\">; // Allow datalist props to be passed down\n\nconst FieldCombobox = forwardRef<UHTMLComboboxElement, FieldComboboxProps>(\n\tfunction FieldCombobox(\n\t\t{\n\t\t\t\"aria-required\": required,\n\t\t\t\"data-position\": position,\n\t\t\t\"data-nofilter\": nofilter,\n\t\t\t\"data-multiple\": multiple,\n\t\t\tonAfterChange,\n\t\t\tonAfterSelect,\n\t\t\tonBeforeChange,\n\t\t\tonBeforeMatch,\n\t\t\tonBeforeSelect,\n\t\t\tonSelectedChange,\n\t\t\tonInput,\n\t\t\tonChange,\n\t\t\tchildren,\n\t\t\tdisabled,\n\t\t\tname,\n\t\t\toptions,\n\t\t\tplaceholder,\n\t\t\treadOnly,\n\t\t\tselected,\n\t\t\ttype,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) {\n\t\tconst innerRef = useRef<UHTMLComboboxElement>(null);\n\t\tconst onSelected = useRef(onSelectedChange);\n\t\tonSelected.current = onSelectedChange; // Sync the latest onSelectedChange function\n\n\t\t// Deprecated props\n\t\tif (onAfterChange) {\n\t\t\tonAfterSelect = onAfterChange;\n\t\t\tconsole.warn(\n\t\t\t\t`Combobox onAfterChange is deprecated, use onAfterSelect instead.`,\n\t\t\t);\n\t\t}\n\t\tif (onBeforeChange) {\n\t\t\tonBeforeSelect = onBeforeChange;\n\t\t\tconsole.warn(\n\t\t\t\t`Combobox onBeforeChange is deprecated, use onBeforeSelect instead.`,\n\t\t\t);\n\t\t}\n\n\t\t// Using useEffect for React 18 and lower compatibility\n\t\tuseImperativeHandle(ref, () => innerRef.current as UHTMLComboboxElement); // Forward innerRef\n\t\tuseEffect(() => {\n\t\t\tconst self = innerRef.current;\n\t\t\tconst handleChange = (event: CustomEvent<HTMLDataElement>) => {\n\t\t\t\tconst handleSelected = onSelected.current;\n\t\t\t\tif (!onSelected) return; // No onSelectedChange function provided, let u-combobox handle it\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst { isConnected: remove, textContent, value } = event.detail;\n\t\t\t\tconst label = textContent?.trim() || \"\";\n\t\t\t\tconst prev = selected || [];\n\n\t\t\t\tif (remove) handleSelected?.(prev.filter((i) => i.value !== value));\n\t\t\t\telse if (multiple) handleSelected?.([...prev, { value, label }]);\n\t\t\t\telse handleSelected?.([{ value, label }]);\n\t\t\t};\n\n\t\t\tself?.addEventListener(\"comboboxbeforeselect\", handleChange);\n\t\t\treturn () =>\n\t\t\t\tself?.removeEventListener(\"comboboxbeforeselect\", handleChange);\n\t\t}, [multiple, selected]);\n\n\t\treturn (\n\t\t\t<u-combobox\n\t\t\t\tdata-multiple={multiple || undefined}\n\t\t\t\t{...toCustomElementProps({\n\t\t\t\t\toncomboboxbeforeselect: onBeforeSelect,\n\t\t\t\t\toncomboboxbeforematch: onBeforeMatch,\n\t\t\t\t\toncomboboxafterselect: onAfterSelect,\n\t\t\t\t\tref: innerRef,\n\t\t\t\t\t...props,\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t{selected?.map(({ children, label, value }) => (\n\t\t\t\t\t<data key={value} value={value} suppressHydrationWarning>\n\t\t\t\t\t\t{children ?? label}\n\t\t\t\t\t</data>\n\t\t\t\t))}\n\t\t\t\t{children || (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\taria-required={required}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tonInput={onInput}\n\t\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t\ttype={type}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<del {...toCustomElementProps({ \"aria-label\": \"Fjern tekst\" })} />\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t\t{!!options && (\n\t\t\t\t\t<FieldDatalist data-nofilter={nofilter} data-position={position}>\n\t\t\t\t\t\t{options.map(toOption).map(({ children, label, value }) => (\n\t\t\t\t\t\t\t<FieldOption key={value} value={value} label={label}>\n\t\t\t\t\t\t\t\t{children ?? label}\n\t\t\t\t\t\t\t</FieldOption>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</FieldDatalist>\n\t\t\t\t)}\n\t\t\t</u-combobox>\n\t\t);\n\t},\n);\n\nexport type FieldLabelProps = React.ComponentPropsWithoutRef<\"label\">;\nexport const Field = Object.assign(FieldComp, {\n\tAffixes: FieldAffixes,\n\tCombobox: FieldCombobox,\n\tDatalist: FieldDatalist,\n\tOption: FieldOption,\n\tLabel: forwardRef<HTMLLabelElement, FieldLabelProps>(\n\t\tfunction FieldLabel(rest, ref) {\n\t\t\treturn <label suppressHydrationWarning ref={ref} {...rest} />;\n\t\t},\n\t),\n});\n"],"names":["Field","label","FieldAffixes","FieldDatalist","FieldOption","FieldCombobox","children"],"mappings":"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"}
@@ -152,10 +152,12 @@ export declare const WithCharacterCount: Story;
152
152
  export declare const WithCustomDescriptionTag: Story;
153
153
  export declare const WithCombobox: Story;
154
154
  export declare const WithComboboxMultiple: Story;
155
+ export declare const WithComboboxCreatable: Story;
155
156
  export declare const WithComboboxAPI: Story;
156
157
  export declare const WithComboboxCustomFilter: Story;
157
158
  export declare const ReactWithCombobox: Story;
158
159
  export declare const ReactWithComboboxWithChildren: Story;
159
160
  export declare const ReactWithComboboxMultiple: Story;
161
+ export declare const ReactWithComboboxCreatable: Story;
160
162
  export declare const ReactWithComboboxLong: Story;
161
163
  export declare const ReactWithCombobxCustomFilter: Story;
@@ -1,20 +1,30 @@
1
- import a from "../styles.module.css.js";
2
- import { IS_BROWSER as d, onLoaded as r, onMutation as f, attr as s, useId as u, isInputLike as I } from "../utils.js";
3
- const m = a.fieldset.split(" ")[0], S = a.validation.split(" ")[0], l = "aria-describedby", p = "aria-invalid", E = d ? document.getElementsByClassName(m) : [];
4
- function A() {
1
+ import styles from "../styles.module.css.js";
2
+ import { isBrowser, onLoaded, onMutation, attr, useId, isInputLike } from "../utils.js";
3
+ const CSS_FIELDSET = styles.fieldset.split(" ")[0];
4
+ const CSS_VALIDATION = styles.validation.split(" ")[0];
5
+ const ARIA_DESC = "aria-describedby";
6
+ const ARIA_INVALID = "aria-invalid";
7
+ const FIELDSETS = isBrowser() ? document.getElementsByClassName(CSS_FIELDSET) : [];
8
+ function handleFieldsetMutation() {
5
9
  setTimeout(() => {
6
- for (const i of E)
7
- if (i.isConnected) {
8
- const o = [];
9
- let e = null, n = !0;
10
- for (const t of i.getElementsByTagName("*"))
11
- t.classList.contains(S) ? (n = s(t, "data-color") === "success" || !t.clientHeight, e = u(t)) : I(t) && o.push(t);
12
- for (const t of o) {
13
- const c = s(t, l)?.replace(e || "#", "");
14
- s(t, l, `${e || ""} ${c || ""}`.trim()), s(t, p, `${!n}`);
10
+ for (const fieldset of FIELDSETS)
11
+ if (fieldset.isConnected) {
12
+ const inputs = [];
13
+ let validId = null;
14
+ let valid = true;
15
+ for (const el of fieldset.getElementsByTagName("*")) {
16
+ if (el.classList.contains(CSS_VALIDATION)) {
17
+ valid = attr(el, "data-color") === "success" || !el.clientHeight;
18
+ validId = useId(el);
19
+ } else if (isInputLike(el)) inputs.push(el);
20
+ }
21
+ for (const input of inputs) {
22
+ const desc = attr(input, ARIA_DESC)?.replace(validId || "#", "");
23
+ attr(input, ARIA_DESC, `${validId || ""} ${desc || ""}`.trim());
24
+ attr(input, ARIA_INVALID, `${!valid}`);
15
25
  }
16
26
  }
17
27
  });
18
28
  }
19
- r(() => [f(A, "class")]);
29
+ onLoaded(() => [onMutation(handleFieldsetMutation, "class")]);
20
30
  //# sourceMappingURL=fieldset-observer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fieldset-observer.js","sources":["../../designsystem/fieldset/fieldset-observer.ts"],"sourcesContent":["import styles from \"../styles.module.css\";\nimport {\n\tattr,\n\tIS_BROWSER,\n\tisInputLike,\n\tonLoaded,\n\tonMutation,\n\tuseId,\n} from \"../utils\";\n\nconst CSS_FIELDSET = styles.fieldset.split(\" \")[0];\nconst CSS_VALIDATION = styles.validation.split(\" \")[0];\nconst ARIA_DESC = \"aria-describedby\";\nconst ARIA_INVALID = \"aria-invalid\";\nconst FIELDSETS = IS_BROWSER\n\t? document.getElementsByClassName(CSS_FIELDSET)\n\t: [];\n\n// Using setTimeout to ensure it runs after field-observer\nfunction handleFieldsetMutation() {\n\tsetTimeout(() => {\n\t\tfor (const fieldset of FIELDSETS)\n\t\t\tif (fieldset.isConnected) {\n\t\t\t\tconst inputs: HTMLInputElement[] = [];\n\t\t\t\tlet validId: string | null = null;\n\t\t\t\tlet valid = true;\n\n\t\t\t\tfor (const el of fieldset.getElementsByTagName(\"*\")) {\n\t\t\t\t\tif (el.classList.contains(CSS_VALIDATION)) {\n\t\t\t\t\t\tvalid = attr(el, \"data-color\") === \"success\" || !el.clientHeight; // Only set invalid if Validation is visible\n\t\t\t\t\t\tvalidId = useId(el);\n\t\t\t\t\t} else if (isInputLike(el)) inputs.push(el);\n\t\t\t\t}\n\n\t\t\t\tfor (const input of inputs) {\n\t\t\t\t\tconst desc = attr(input, ARIA_DESC)?.replace(validId || \"#\", \"\");\n\n\t\t\t\t\tattr(input, ARIA_DESC, `${validId || \"\"} ${desc || \"\"}`.trim());\n\t\t\t\t\tattr(input, ARIA_INVALID, `${!valid}`);\n\t\t\t\t}\n\t\t\t}\n\t});\n}\n\nonLoaded(() => [onMutation(handleFieldsetMutation, \"class\")]);\n"],"names":["CSS_FIELDSET","styles","CSS_VALIDATION","ARIA_DESC","ARIA_INVALID","FIELDSETS","IS_BROWSER","handleFieldsetMutation","fieldset","inputs","validId","valid","el","attr","useId","isInputLike","input","desc","onLoaded","onMutation"],"mappings":";;AAUA,MAAMA,IAAeC,EAAO,SAAS,MAAM,GAAG,EAAE,CAAC,GAC3CC,IAAiBD,EAAO,WAAW,MAAM,GAAG,EAAE,CAAC,GAC/CE,IAAY,oBACZC,IAAe,gBACfC,IAAYC,IACf,SAAS,uBAAuBN,CAAY,IAC5C,CAAA;AAGH,SAASO,IAAyB;AACjC,aAAW,MAAM;AAChB,eAAWC,KAAYH;AACtB,UAAIG,EAAS,aAAa;AACzB,cAAMC,IAA6B,CAAA;AACnC,YAAIC,IAAyB,MACzBC,IAAQ;AAEZ,mBAAWC,KAAMJ,EAAS,qBAAqB,GAAG;AACjD,UAAII,EAAG,UAAU,SAASV,CAAc,KACvCS,IAAQE,EAAKD,GAAI,YAAY,MAAM,aAAa,CAACA,EAAG,cACpDF,IAAUI,EAAMF,CAAE,KACRG,EAAYH,CAAE,KAAGH,EAAO,KAAKG,CAAE;AAG3C,mBAAWI,KAASP,GAAQ;AAC3B,gBAAMQ,IAAOJ,EAAKG,GAAOb,CAAS,GAAG,QAAQO,KAAW,KAAK,EAAE;AAE/D,UAAAG,EAAKG,GAAOb,GAAW,GAAGO,KAAW,EAAE,IAAIO,KAAQ,EAAE,GAAG,KAAA,CAAM,GAC9DJ,EAAKG,GAAOZ,GAAc,GAAG,CAACO,CAAK,EAAE;AAAA,QACtC;AAAA,MACD;AAAA,EACF,CAAC;AACF;AAEAO,EAAS,MAAM,CAACC,EAAWZ,GAAwB,OAAO,CAAC,CAAC;"}
1
+ {"version":3,"file":"fieldset-observer.js","sources":["../../designsystem/fieldset/fieldset-observer.ts"],"sourcesContent":["import styles from \"../styles.module.css\";\nimport {\n\tattr,\n\tisBrowser,\n\tisInputLike,\n\tonLoaded,\n\tonMutation,\n\tuseId,\n} from \"../utils\";\n\nconst CSS_FIELDSET = styles.fieldset.split(\" \")[0];\nconst CSS_VALIDATION = styles.validation.split(\" \")[0];\nconst ARIA_DESC = \"aria-describedby\";\nconst ARIA_INVALID = \"aria-invalid\";\nconst FIELDSETS = isBrowser()\n\t? document.getElementsByClassName(CSS_FIELDSET)\n\t: [];\n\n// Using setTimeout to ensure it runs after field-observer\nfunction handleFieldsetMutation() {\n\tsetTimeout(() => {\n\t\tfor (const fieldset of FIELDSETS)\n\t\t\tif (fieldset.isConnected) {\n\t\t\t\tconst inputs: HTMLInputElement[] = [];\n\t\t\t\tlet validId: string | null = null;\n\t\t\t\tlet valid = true;\n\n\t\t\t\tfor (const el of fieldset.getElementsByTagName(\"*\")) {\n\t\t\t\t\tif (el.classList.contains(CSS_VALIDATION)) {\n\t\t\t\t\t\tvalid = attr(el, \"data-color\") === \"success\" || !el.clientHeight; // Only set invalid if Validation is visible\n\t\t\t\t\t\tvalidId = useId(el);\n\t\t\t\t\t} else if (isInputLike(el)) inputs.push(el);\n\t\t\t\t}\n\n\t\t\t\tfor (const input of inputs) {\n\t\t\t\t\tconst desc = attr(input, ARIA_DESC)?.replace(validId || \"#\", \"\");\n\n\t\t\t\t\tattr(input, ARIA_DESC, `${validId || \"\"} ${desc || \"\"}`.trim());\n\t\t\t\t\tattr(input, ARIA_INVALID, `${!valid}`);\n\t\t\t\t}\n\t\t\t}\n\t});\n}\n\nonLoaded(() => [onMutation(handleFieldsetMutation, \"class\")]);\n"],"names":[],"mappings":";;AAUA,MAAM,eAAe,OAAO,SAAS,MAAM,GAAG,EAAE,CAAC;AACjD,MAAM,iBAAiB,OAAO,WAAW,MAAM,GAAG,EAAE,CAAC;AACrD,MAAM,YAAY;AAClB,MAAM,eAAe;AACrB,MAAM,YAAY,UAAA,IACf,SAAS,uBAAuB,YAAY,IAC5C,CAAA;AAGH,SAAS,yBAAyB;AACjC,aAAW,MAAM;AAChB,eAAW,YAAY;AACtB,UAAI,SAAS,aAAa;AACzB,cAAM,SAA6B,CAAA;AACnC,YAAI,UAAyB;AAC7B,YAAI,QAAQ;AAEZ,mBAAW,MAAM,SAAS,qBAAqB,GAAG,GAAG;AACpD,cAAI,GAAG,UAAU,SAAS,cAAc,GAAG;AAC1C,oBAAQ,KAAK,IAAI,YAAY,MAAM,aAAa,CAAC,GAAG;AACpD,sBAAU,MAAM,EAAE;AAAA,UACnB,WAAW,YAAY,EAAE,EAAG,QAAO,KAAK,EAAE;AAAA,QAC3C;AAEA,mBAAW,SAAS,QAAQ;AAC3B,gBAAM,OAAO,KAAK,OAAO,SAAS,GAAG,QAAQ,WAAW,KAAK,EAAE;AAE/D,eAAK,OAAO,WAAW,GAAG,WAAW,EAAE,IAAI,QAAQ,EAAE,GAAG,KAAA,CAAM;AAC9D,eAAK,OAAO,cAAc,GAAG,CAAC,KAAK,EAAE;AAAA,QACtC;AAAA,MACD;AAAA,EACF,CAAC;AACF;AAEA,SAAS,MAAM,CAAC,WAAW,wBAAwB,OAAO,CAAC,CAAC;"}
@@ -1,2 +1,2 @@
1
1
  export type FieldsetProps = React.ComponentPropsWithoutRef<"fieldset">;
2
- export declare const Fieldset: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement>, "ref"> & React.RefAttributes<HTMLFieldSetElement>>;
2
+ export declare const Fieldset: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement>, "ref"> & import('react').RefAttributes<HTMLFieldSetElement>>;
@@ -1,20 +1,20 @@
1
- import { jsx as o } from "react/jsx-runtime";
2
- import s from "clsx";
3
- import { forwardRef as f } from "react";
4
- import i from "../styles.module.css.js";
5
- const n = f(
6
- function({ className: e, ...r }, t) {
7
- return /* @__PURE__ */ o(
1
+ import { jsx } from "react/jsx-runtime";
2
+ import clsx from "clsx";
3
+ import { forwardRef } from "react";
4
+ import styles from "../styles.module.css.js";
5
+ const Fieldset = forwardRef(
6
+ function Fieldset2({ className, ...rest }, ref) {
7
+ return /* @__PURE__ */ jsx(
8
8
  "fieldset",
9
9
  {
10
- className: s(i.fieldset, e),
11
- ref: t,
12
- ...r
10
+ className: clsx(styles.fieldset, className),
11
+ ref,
12
+ ...rest
13
13
  }
14
14
  );
15
15
  }
16
16
  );
17
17
  export {
18
- n as Fieldset
18
+ Fieldset
19
19
  };
20
20
  //# sourceMappingURL=fieldset.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fieldset.js","sources":["../../designsystem/fieldset/fieldset.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { forwardRef } from \"react\";\nimport styles from \"../styles.module.css\";\n\nexport type FieldsetProps = React.ComponentPropsWithoutRef<\"fieldset\">;\n\nexport const Fieldset = forwardRef<HTMLFieldSetElement, FieldsetProps>(\n\tfunction Fieldset({ className, ...rest }, ref) {\n\t\treturn (\n\t\t\t<fieldset\n\t\t\t\tclassName={clsx(styles.fieldset, className)}\n\t\t\t\tref={ref}\n\t\t\t\t{...rest}\n\t\t\t/>\n\t\t);\n\t},\n);\n"],"names":["Fieldset","forwardRef","className","rest","ref","jsx","clsx","styles"],"mappings":";;;;AAMO,MAAMA,IAAWC;AAAA,EACvB,SAAkB,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAAQC,GAAK;AAC9C,WACC,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,WAAWC,EAAKC,EAAO,UAAUL,CAAS;AAAA,QAC1C,KAAAE;AAAA,QACC,GAAGD;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACD;"}
1
+ {"version":3,"file":"fieldset.js","sources":["../../designsystem/fieldset/fieldset.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { forwardRef } from \"react\";\nimport styles from \"../styles.module.css\";\n\nexport type FieldsetProps = React.ComponentPropsWithoutRef<\"fieldset\">;\n\nexport const Fieldset = forwardRef<HTMLFieldSetElement, FieldsetProps>(\n\tfunction Fieldset({ className, ...rest }, ref) {\n\t\treturn (\n\t\t\t<fieldset\n\t\t\t\tclassName={clsx(styles.fieldset, className)}\n\t\t\t\tref={ref}\n\t\t\t\t{...rest}\n\t\t\t/>\n\t\t);\n\t},\n);\n"],"names":["Fieldset"],"mappings":";;;;AAMO,MAAM,WAAW;AAAA,EACvB,SAASA,UAAS,EAAE,WAAW,GAAG,KAAA,GAAQ,KAAK;AAC9C,WACC;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,WAAW,KAAK,OAAO,UAAU,SAAS;AAAA,QAC1C;AAAA,QACC,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACD;"}
@@ -1,13 +1,14 @@
1
- import { jsx as a } from "react/jsx-runtime";
2
- import e from "clsx";
3
- import { forwardRef as m } from "react";
4
- import f from "../styles.module.css.js";
5
- const d = m(
6
- function({ as: o, className: r, ...l }, t) {
7
- return /* @__PURE__ */ a(o || "label", { className: e(f.fileupload, r), ref: t, ...l });
1
+ import { jsx } from "react/jsx-runtime";
2
+ import clsx from "clsx";
3
+ import { forwardRef } from "react";
4
+ import styles from "../styles.module.css.js";
5
+ const Fileupload = forwardRef(
6
+ function Fileupload2({ as, className, ...rest }, ref) {
7
+ const Tag = as || "label";
8
+ return /* @__PURE__ */ jsx(Tag, { className: clsx(styles.fileupload, className), ref, ...rest });
8
9
  }
9
10
  );
10
11
  export {
11
- d as Fileupload
12
+ Fileupload
12
13
  };
13
14
  //# sourceMappingURL=fileupload.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fileupload.js","sources":["../../designsystem/fileupload/fileupload.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { forwardRef, type JSX } from \"react\";\nimport type {\n\tPolymorphicComponentPropWithRef,\n\tPolymorphicRef,\n} from \"../react-types\";\nimport styles from \"../styles.module.css\";\n\nexport type FileuploadProps<As extends React.ElementType = \"label\"> =\n\tPolymorphicComponentPropWithRef<As>;\n\ntype FileuploadComponent = <As extends React.ElementType = \"label\">(\n\tprops: FileuploadProps<As>,\n) => JSX.Element;\n\nexport const Fileupload: FileuploadComponent = forwardRef<null>(\n\tfunction Fileupload<As extends React.ElementType = \"label\">(\n\t\t{ as, className, ...rest }: FileuploadProps<As>,\n\t\tref?: PolymorphicRef<As>,\n\t) {\n\t\tconst Tag = as || \"label\";\n\n\t\treturn (\n\t\t\t<Tag className={clsx(styles.fileupload, className)} ref={ref} {...rest} />\n\t\t);\n\t},\n) as FileuploadComponent; // Needed to tell Typescript this does not return ReactNode but acutally JSX.Element\n"],"names":["Fileupload","forwardRef","as","className","rest","ref","jsx","clsx","styles"],"mappings":";;;;AAeO,MAAMA,IAAkCC;AAAA,EAC9C,SACC,EAAE,IAAAC,GAAI,WAAAC,GAAW,GAAGC,EAAA,GACpBC,GACC;AAGD,WACC,gBAAAC,EAHWJ,KAAM,SAGhB,EAAI,WAAWK,EAAKC,EAAO,YAAYL,CAAS,GAAG,KAAAE,GAAW,GAAGD,EAAA,CAAM;AAAA,EAE1E;AACD;"}
1
+ {"version":3,"file":"fileupload.js","sources":["../../designsystem/fileupload/fileupload.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { forwardRef, type JSX } from \"react\";\nimport type {\n\tPolymorphicComponentPropWithRef,\n\tPolymorphicRef,\n} from \"../react-types\";\nimport styles from \"../styles.module.css\";\n\nexport type FileuploadProps<As extends React.ElementType = \"label\"> =\n\tPolymorphicComponentPropWithRef<As>;\n\ntype FileuploadComponent = <As extends React.ElementType = \"label\">(\n\tprops: FileuploadProps<As>,\n) => JSX.Element;\n\nexport const Fileupload: FileuploadComponent = forwardRef<null>(\n\tfunction Fileupload<As extends React.ElementType = \"label\">(\n\t\t{ as, className, ...rest }: FileuploadProps<As>,\n\t\tref?: PolymorphicRef<As>,\n\t) {\n\t\tconst Tag = as || \"label\";\n\n\t\treturn (\n\t\t\t<Tag className={clsx(styles.fileupload, className)} ref={ref} {...rest} />\n\t\t);\n\t},\n) as FileuploadComponent; // Needed to tell Typescript this does not return ReactNode but acutally JSX.Element\n"],"names":["Fileupload"],"mappings":";;;;AAeO,MAAM,aAAkC;AAAA,EAC9C,SAASA,YACR,EAAE,IAAI,WAAW,GAAG,KAAA,GACpB,KACC;AACD,UAAM,MAAM,MAAM;AAElB,WACC,oBAAC,KAAA,EAAI,WAAW,KAAK,OAAO,YAAY,SAAS,GAAG,KAAW,GAAG,KAAA,CAAM;AAAA,EAE1E;AACD;"}
@@ -1,2 +1,2 @@
1
1
  export type HelpTextProps = React.ComponentPropsWithoutRef<"button">;
2
- export declare const HelpText: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
2
+ export declare const HelpText: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & import('react').RefAttributes<HTMLButtonElement>>;