@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,28 +1,43 @@
1
- import m from "clsx";
2
- import l from "../styles.module.css.js";
3
- import { tag as f, attr as s } from "../utils.js";
4
- function r(e, o = {}) {
5
- const n = document.getElementById(o.id || "") || f("dialog");
6
- return s(n, "aria-busy", o.busy ? "true" : null), s(n, "class", m(l.toast, o.className)), s(n, "data-closedby", o.closedby || null), s(n, "data-color", o.color || null), s(n, "data-icon", `${o.icon ?? ""}` || null), s(n, "data-timeout", `${o.timeout ?? ""}` || null), s(n, "id", o.id || `${Date.now()}`), s(n, "open", o.open === !1 ? null : ""), n.innerHTML = e, n.addEventListener("animationend", y, { once: !0 }), document.body.appendChild(n), n.id;
1
+ import clsx from "clsx";
2
+ import styles from "../styles.module.css.js";
3
+ import { tag, attr } from "../utils.js";
4
+ function toast(content, opt = {}) {
5
+ const dialog = document.getElementById(opt.id || "") || tag("dialog");
6
+ attr(dialog, "aria-busy", opt.busy ? "true" : null);
7
+ attr(dialog, "class", clsx(styles.toast, opt.className));
8
+ attr(dialog, "data-closedby", opt.closedby || null);
9
+ attr(dialog, "data-color", opt.color || null);
10
+ attr(dialog, "data-icon", `${opt.icon ?? ""}` || null);
11
+ attr(dialog, "data-timeout", `${opt.timeout ?? ""}` || null);
12
+ attr(dialog, "id", opt.id || `${Date.now()}`);
13
+ attr(dialog, "open", opt.open === false ? null : "");
14
+ dialog.innerHTML = content;
15
+ dialog.addEventListener("animationend", handleToastClose, { once: true });
16
+ document.body.appendChild(dialog);
17
+ return dialog.id;
7
18
  }
8
- function y({ animationName: e, target: o }) {
9
- e === l._toastClose && o.remove();
19
+ function handleToastClose({ animationName, target }) {
20
+ if (animationName === styles._toastClose)
21
+ target.remove();
10
22
  }
11
- r.success = (e, o) => r(e, { color: "success", ...o });
12
- r.danger = (e, o) => r(e, { color: "danger", ...o });
13
- r.info = (e, o) => r(e, { color: "info", ...o });
14
- r.warning = (e, o) => r(e, { color: "warning", ...o });
15
- r.neutral = (e, o) => r(e, { color: "neutral", ...o });
16
- r.promise = async function(o, n) {
17
- const { loading: c, success: i, error: u, ...d } = n, a = r(c, { busy: !0, ...d });
23
+ toast.success = (content, opt) => toast(content, { color: "success", ...opt });
24
+ toast.danger = (content, opt) => toast(content, { color: "danger", ...opt });
25
+ toast.info = (content, opt) => toast(content, { color: "info", ...opt });
26
+ toast.warning = (content, opt) => toast(content, { color: "warning", ...opt });
27
+ toast.neutral = (content, opt) => toast(content, { color: "neutral", ...opt });
28
+ toast.promise = async function promise(action, props) {
29
+ const { loading, success, error, ...opt } = props;
30
+ const id = toast(loading, { busy: true, ...opt });
18
31
  try {
19
- const t = await o();
20
- return r.success(i, { id: a, busy: !1 }), t;
21
- } catch (t) {
22
- throw r.danger(u, { id: a, busy: !1 }), t;
32
+ const result = await action();
33
+ toast.success(success, { id, busy: false });
34
+ return result;
35
+ } catch (_error) {
36
+ toast.danger(error, { id, busy: false });
37
+ throw _error;
23
38
  }
24
39
  };
25
40
  export {
26
- r as toast
41
+ toast
27
42
  };
28
43
  //# sourceMappingURL=toast-helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toast-helper.js","sources":["../../designsystem/toast/toast-helper.ts"],"sourcesContent":["import clsx from \"clsx\";\nimport styles from \"../styles.module.css\";\nimport { attr, tag } from \"../utils\";\n\nexport type ToastOptions = {\n\tclassName?: string;\n\tclosedby?: \"none\";\n\tcolor?: \"main\" | \"neutral\" | \"success\" | \"danger\" | \"info\" | \"warning\";\n\ticon?: boolean | \"none\";\n\ttimeout?: number | false;\n\tbusy?: boolean;\n\topen?: boolean;\n\tid?: string;\n};\n\nexport function toast(content: string, opt: ToastOptions = {}) {\n\tconst dialog = document.getElementById(opt.id || \"\") || tag(\"dialog\");\n\n\tattr(dialog, \"aria-busy\", opt.busy ? \"true\" : null);\n\tattr(dialog, \"class\", clsx(styles.toast, opt.className));\n\tattr(dialog, \"data-closedby\", opt.closedby || null);\n\tattr(dialog, \"data-color\", opt.color || null);\n\tattr(dialog, \"data-icon\", `${opt.icon ?? \"\"}` || null);\n\tattr(dialog, \"data-timeout\", `${opt.timeout ?? \"\"}` || null);\n\tattr(dialog, \"id\", opt.id || `${Date.now()}`);\n\tattr(dialog, \"open\", opt.open === false ? null : \"\");\n\n\tdialog.innerHTML = content;\n\tdialog.addEventListener(\"animationend\", handleToastClose, { once: true });\n\tdocument.body.appendChild(dialog);\n\treturn dialog.id;\n}\n\nfunction handleToastClose({ animationName, target }: Partial<AnimationEvent>) {\n\tif (animationName === styles._toastClose)\n\t\t(target as HTMLDialogElement).remove();\n}\n\n// Expose toast.danger, toast.info, toast.success etc.\ntoast.success = (content: string, opt?: ToastOptions) =>\n\ttoast(content, { color: \"success\", ...opt });\ntoast.danger = (content: string, opt?: ToastOptions) =>\n\ttoast(content, { color: \"danger\", ...opt });\ntoast.info = (content: string, opt: ToastOptions) =>\n\ttoast(content, { color: \"info\", ...opt });\ntoast.warning = (content: string, opt?: ToastOptions) =>\n\ttoast(content, { color: \"warning\", ...opt });\ntoast.neutral = (content: string, opt?: ToastOptions) =>\n\ttoast(content, { color: \"neutral\", ...opt });\ntoast.promise = async function promise<T>(\n\taction: () => Promise<T>,\n\tprops: ToastOptions & {\n\t\tloading: string;\n\t\tsuccess: string;\n\t\terror: string;\n\t},\n): Promise<T> {\n\tconst { loading, success, error, ...opt } = props;\n\tconst id = toast(loading, { busy: true, ...opt });\n\ttry {\n\t\tconst result = await action();\n\t\ttoast.success(success, { id, busy: false });\n\t\treturn result;\n\t} catch (_error) {\n\t\ttoast.danger(error, { id, busy: false });\n\t\tthrow _error;\n\t}\n};\n"],"names":["toast","content","opt","dialog","tag","attr","clsx","styles","handleToastClose","animationName","target","action","props","loading","success","error","id","result","_error"],"mappings":";;;AAeO,SAASA,EAAMC,GAAiBC,IAAoB,IAAI;AAC9D,QAAMC,IAAS,SAAS,eAAeD,EAAI,MAAM,EAAE,KAAKE,EAAI,QAAQ;AAEpE,SAAAC,EAAKF,GAAQ,aAAaD,EAAI,OAAO,SAAS,IAAI,GAClDG,EAAKF,GAAQ,SAASG,EAAKC,EAAO,OAAOL,EAAI,SAAS,CAAC,GACvDG,EAAKF,GAAQ,iBAAiBD,EAAI,YAAY,IAAI,GAClDG,EAAKF,GAAQ,cAAcD,EAAI,SAAS,IAAI,GAC5CG,EAAKF,GAAQ,aAAa,GAAGD,EAAI,QAAQ,EAAE,MAAM,IAAI,GACrDG,EAAKF,GAAQ,gBAAgB,GAAGD,EAAI,WAAW,EAAE,MAAM,IAAI,GAC3DG,EAAKF,GAAQ,MAAMD,EAAI,MAAM,GAAG,KAAK,IAAA,CAAK,EAAE,GAC5CG,EAAKF,GAAQ,QAAQD,EAAI,SAAS,KAAQ,OAAO,EAAE,GAEnDC,EAAO,YAAYF,GACnBE,EAAO,iBAAiB,gBAAgBK,GAAkB,EAAE,MAAM,IAAM,GACxE,SAAS,KAAK,YAAYL,CAAM,GACzBA,EAAO;AACf;AAEA,SAASK,EAAiB,EAAE,eAAAC,GAAe,QAAAC,KAAmC;AAC7E,EAAID,MAAkBF,EAAO,eAC3BG,EAA6B,OAAA;AAChC;AAGAV,EAAM,UAAU,CAACC,GAAiBC,MACjCF,EAAMC,GAAS,EAAE,OAAO,WAAW,GAAGC,GAAK;AAC5CF,EAAM,SAAS,CAACC,GAAiBC,MAChCF,EAAMC,GAAS,EAAE,OAAO,UAAU,GAAGC,GAAK;AAC3CF,EAAM,OAAO,CAACC,GAAiBC,MAC9BF,EAAMC,GAAS,EAAE,OAAO,QAAQ,GAAGC,GAAK;AACzCF,EAAM,UAAU,CAACC,GAAiBC,MACjCF,EAAMC,GAAS,EAAE,OAAO,WAAW,GAAGC,GAAK;AAC5CF,EAAM,UAAU,CAACC,GAAiBC,MACjCF,EAAMC,GAAS,EAAE,OAAO,WAAW,GAAGC,GAAK;AAC5CF,EAAM,UAAU,eACfW,GACAC,GAKa;AACb,QAAM,EAAE,SAAAC,GAAS,SAAAC,GAAS,OAAAC,GAAO,GAAGb,MAAQU,GACtCI,IAAKhB,EAAMa,GAAS,EAAE,MAAM,IAAM,GAAGX,GAAK;AAChD,MAAI;AACH,UAAMe,IAAS,MAAMN,EAAA;AACrB,WAAAX,EAAM,QAAQc,GAAS,EAAE,IAAAE,GAAI,MAAM,IAAO,GACnCC;AAAA,EACR,SAASC,GAAQ;AAChB,UAAAlB,EAAM,OAAOe,GAAO,EAAE,IAAAC,GAAI,MAAM,IAAO,GACjCE;AAAA,EACP;AACD;"}
1
+ {"version":3,"file":"toast-helper.js","sources":["../../designsystem/toast/toast-helper.ts"],"sourcesContent":["import clsx from \"clsx\";\nimport styles from \"../styles.module.css\";\nimport { attr, tag } from \"../utils\";\n\nexport type ToastOptions = {\n\tclassName?: string;\n\tclosedby?: \"none\";\n\tcolor?: \"main\" | \"neutral\" | \"success\" | \"danger\" | \"info\" | \"warning\";\n\ticon?: boolean | \"none\";\n\ttimeout?: number | false;\n\tbusy?: boolean;\n\topen?: boolean;\n\tid?: string;\n};\n\nexport function toast(content: string, opt: ToastOptions = {}) {\n\tconst dialog = document.getElementById(opt.id || \"\") || tag(\"dialog\");\n\n\tattr(dialog, \"aria-busy\", opt.busy ? \"true\" : null);\n\tattr(dialog, \"class\", clsx(styles.toast, opt.className));\n\tattr(dialog, \"data-closedby\", opt.closedby || null);\n\tattr(dialog, \"data-color\", opt.color || null);\n\tattr(dialog, \"data-icon\", `${opt.icon ?? \"\"}` || null);\n\tattr(dialog, \"data-timeout\", `${opt.timeout ?? \"\"}` || null);\n\tattr(dialog, \"id\", opt.id || `${Date.now()}`);\n\tattr(dialog, \"open\", opt.open === false ? null : \"\");\n\n\tdialog.innerHTML = content;\n\tdialog.addEventListener(\"animationend\", handleToastClose, { once: true });\n\tdocument.body.appendChild(dialog);\n\treturn dialog.id;\n}\n\nfunction handleToastClose({ animationName, target }: Partial<AnimationEvent>) {\n\tif (animationName === styles._toastClose)\n\t\t(target as HTMLDialogElement).remove();\n}\n\n// Expose toast.danger, toast.info, toast.success etc.\ntoast.success = (content: string, opt?: ToastOptions) =>\n\ttoast(content, { color: \"success\", ...opt });\ntoast.danger = (content: string, opt?: ToastOptions) =>\n\ttoast(content, { color: \"danger\", ...opt });\ntoast.info = (content: string, opt: ToastOptions) =>\n\ttoast(content, { color: \"info\", ...opt });\ntoast.warning = (content: string, opt?: ToastOptions) =>\n\ttoast(content, { color: \"warning\", ...opt });\ntoast.neutral = (content: string, opt?: ToastOptions) =>\n\ttoast(content, { color: \"neutral\", ...opt });\ntoast.promise = async function promise<T>(\n\taction: () => Promise<T>,\n\tprops: ToastOptions & {\n\t\tloading: string;\n\t\tsuccess: string;\n\t\terror: string;\n\t},\n): Promise<T> {\n\tconst { loading, success, error, ...opt } = props;\n\tconst id = toast(loading, { busy: true, ...opt });\n\ttry {\n\t\tconst result = await action();\n\t\ttoast.success(success, { id, busy: false });\n\t\treturn result;\n\t} catch (_error) {\n\t\ttoast.danger(error, { id, busy: false });\n\t\tthrow _error;\n\t}\n};\n"],"names":[],"mappings":";;;AAeO,SAAS,MAAM,SAAiB,MAAoB,IAAI;AAC9D,QAAM,SAAS,SAAS,eAAe,IAAI,MAAM,EAAE,KAAK,IAAI,QAAQ;AAEpE,OAAK,QAAQ,aAAa,IAAI,OAAO,SAAS,IAAI;AAClD,OAAK,QAAQ,SAAS,KAAK,OAAO,OAAO,IAAI,SAAS,CAAC;AACvD,OAAK,QAAQ,iBAAiB,IAAI,YAAY,IAAI;AAClD,OAAK,QAAQ,cAAc,IAAI,SAAS,IAAI;AAC5C,OAAK,QAAQ,aAAa,GAAG,IAAI,QAAQ,EAAE,MAAM,IAAI;AACrD,OAAK,QAAQ,gBAAgB,GAAG,IAAI,WAAW,EAAE,MAAM,IAAI;AAC3D,OAAK,QAAQ,MAAM,IAAI,MAAM,GAAG,KAAK,IAAA,CAAK,EAAE;AAC5C,OAAK,QAAQ,QAAQ,IAAI,SAAS,QAAQ,OAAO,EAAE;AAEnD,SAAO,YAAY;AACnB,SAAO,iBAAiB,gBAAgB,kBAAkB,EAAE,MAAM,MAAM;AACxE,WAAS,KAAK,YAAY,MAAM;AAChC,SAAO,OAAO;AACf;AAEA,SAAS,iBAAiB,EAAE,eAAe,UAAmC;AAC7E,MAAI,kBAAkB,OAAO;AAC3B,WAA6B,OAAA;AAChC;AAGA,MAAM,UAAU,CAAC,SAAiB,QACjC,MAAM,SAAS,EAAE,OAAO,WAAW,GAAG,KAAK;AAC5C,MAAM,SAAS,CAAC,SAAiB,QAChC,MAAM,SAAS,EAAE,OAAO,UAAU,GAAG,KAAK;AAC3C,MAAM,OAAO,CAAC,SAAiB,QAC9B,MAAM,SAAS,EAAE,OAAO,QAAQ,GAAG,KAAK;AACzC,MAAM,UAAU,CAAC,SAAiB,QACjC,MAAM,SAAS,EAAE,OAAO,WAAW,GAAG,KAAK;AAC5C,MAAM,UAAU,CAAC,SAAiB,QACjC,MAAM,SAAS,EAAE,OAAO,WAAW,GAAG,KAAK;AAC5C,MAAM,UAAU,eAAe,QAC9B,QACA,OAKa;AACb,QAAM,EAAE,SAAS,SAAS,OAAO,GAAG,QAAQ;AAC5C,QAAM,KAAK,MAAM,SAAS,EAAE,MAAM,MAAM,GAAG,KAAK;AAChD,MAAI;AACH,UAAM,SAAS,MAAM,OAAA;AACrB,UAAM,QAAQ,SAAS,EAAE,IAAI,MAAM,OAAO;AAC1C,WAAO;AAAA,EACR,SAAS,QAAQ;AAChB,UAAM,OAAO,OAAO,EAAE,IAAI,MAAM,OAAO;AACvC,UAAM;AAAA,EACP;AACD;"}
@@ -1,20 +1,35 @@
1
- import r from "../styles.module.css.js";
2
- import { onLoaded as b, on as u, attr as s } from "../utils.js";
3
- const m = r.toast.split(" ")[0], l = "data-sort";
4
- function h({ animationName: t, target: i }) {
5
- const o = i;
6
- if (t === r._toastTimeout && o.close(), t !== r._toastOpen) return;
7
- const c = Number(s(o, "data-timeout"));
8
- o.style.setProperty("--mtdsc-toast-timeout", c ? `${c}ms` : null), o.hasAttribute(l) || s(o, l, `${Date.now()}`), s(o, "tabindex", "0"), [...document.querySelectorAll(`.${m}[open]`)].sort((n, e) => Number(s(e, l)) - Number(s(n, l))).reduce((n, e) => (e.style.translate = `0 ${e === i ? 0 : n}px`, n + e.offsetHeight + 5), 0);
1
+ import styles from "../styles.module.css.js";
2
+ import { onLoaded, on, attr } from "../utils.js";
3
+ const CSS_TOAST = styles.toast.split(" ")[0];
4
+ const ATTR_SORT = "data-sort";
5
+ function handleToastState({ animationName, target }) {
6
+ const dialog = target;
7
+ if (animationName === styles._toastTimeout) dialog.close();
8
+ if (animationName !== styles._toastOpen) return;
9
+ const ms = Number(attr(dialog, "data-timeout"));
10
+ dialog.style.setProperty("--mtdsc-toast-timeout", ms ? `${ms}ms` : null);
11
+ dialog.hasAttribute(ATTR_SORT) || attr(dialog, ATTR_SORT, `${Date.now()}`);
12
+ attr(dialog, "tabindex", "0");
13
+ [...document.querySelectorAll(`.${CSS_TOAST}[open]`)].sort((a, b) => Number(attr(b, ATTR_SORT)) - Number(attr(a, ATTR_SORT))).reduce((top, toast) => {
14
+ toast.style.translate = `0 ${toast === target ? 0 : top}px`;
15
+ return top + toast.offsetHeight + 5;
16
+ }, 0);
9
17
  }
10
- function T({ target: t, clientX: i, clientY: o }) {
11
- if (t instanceof HTMLDialogElement && t.classList.contains(m) && s(t, "data-closedby") !== "none") {
12
- const c = t.getBoundingClientRect(), n = window.getComputedStyle(t), e = window.getComputedStyle(t, "::after"), a = c.top + Number.parseInt(n.paddingTop, 10), p = a + Number.parseInt(e.height, 10), d = c.right - Number.parseInt(n.paddingRight, 10), f = d - Number.parseInt(e.width, 10);
13
- a <= o && o <= p && f <= i && i <= d && t.close();
18
+ function handleToastClick({ target, clientX: x, clientY: y }) {
19
+ if (target instanceof HTMLDialogElement && target.classList.contains(CSS_TOAST) && attr(target, "data-closedby") !== "none") {
20
+ const rect = target.getBoundingClientRect();
21
+ const toast = window.getComputedStyle(target);
22
+ const close = window.getComputedStyle(target, "::after");
23
+ const top = rect.top + Number.parseInt(toast.paddingTop, 10);
24
+ const bottom = top + Number.parseInt(close.height, 10);
25
+ const right = rect.right - Number.parseInt(toast.paddingRight, 10);
26
+ const left = right - Number.parseInt(close.width, 10);
27
+ const isClose = top <= y && y <= bottom && left <= x && x <= right;
28
+ if (isClose) target.close();
14
29
  }
15
30
  }
16
- b(() => [
17
- u(document, "animationstart", h),
18
- u(document, "click", T)
31
+ onLoaded(() => [
32
+ on(document, "animationstart", handleToastState),
33
+ on(document, "click", handleToastClick)
19
34
  ]);
20
35
  //# sourceMappingURL=toast-observer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toast-observer.js","sources":["../../designsystem/toast/toast-observer.ts"],"sourcesContent":["import styles from \"../styles.module.css\";\nimport { attr, on, onLoaded } from \"../utils\";\n\nconst CSS_TOAST = styles.toast.split(\" \")[0];\nconst ATTR_SORT = \"data-sort\";\n\nfunction handleToastState({ animationName, target }: Partial<AnimationEvent>) {\n\tconst dialog = target as HTMLDialogElement;\n\tif (animationName === styles._toastTimeout) dialog.close();\n\tif (animationName !== styles._toastOpen) return;\n\n\tconst ms = Number(attr(dialog, \"data-timeout\"));\n\tdialog.style.setProperty(\"--mtdsc-toast-timeout\", ms ? `${ms}ms` : null);\n\tdialog.hasAttribute(ATTR_SORT) || attr(dialog, ATTR_SORT, `${Date.now()}`);\n\tattr(dialog, \"tabindex\", \"0\"); // Make focusable\n\n\t// Setup layout\n\t[...document.querySelectorAll<HTMLDialogElement>(`.${CSS_TOAST}[open]`)]\n\t\t.sort((a, b) => Number(attr(b, ATTR_SORT)) - Number(attr(a, ATTR_SORT)))\n\t\t.reduce((top, toast) => {\n\t\t\ttoast.style.translate = `0 ${toast === target ? 0 : top}px`;\n\t\t\treturn top + toast.offsetHeight + 5;\n\t\t}, 0);\n}\n\nfunction handleToastClick({ target, clientX: x, clientY: y }: MouseEvent) {\n\tif (\n\t\ttarget instanceof HTMLDialogElement &&\n\t\ttarget.classList.contains(CSS_TOAST) &&\n\t\tattr(target, \"data-closedby\") !== \"none\"\n\t) {\n\t\tconst rect = target.getBoundingClientRect();\n\t\tconst toast = window.getComputedStyle(target);\n\t\tconst close = window.getComputedStyle(target, \"::after\");\n\t\tconst top = rect.top + Number.parseInt(toast.paddingTop, 10);\n\t\tconst bottom = top + Number.parseInt(close.height, 10);\n\t\tconst right = rect.right - Number.parseInt(toast.paddingRight, 10);\n\t\tconst left = right - Number.parseInt(close.width, 10);\n\t\tconst isClose = top <= y && y <= bottom && left <= x && x <= right;\n\n\t\tif (isClose) target.close(); // Click is on ::after element\n\t}\n}\n\nonLoaded(() => [\n\ton(document, \"animationstart\", handleToastState),\n\ton(document, \"click\", handleToastClick as EventListener),\n]);\n"],"names":["CSS_TOAST","styles","ATTR_SORT","handleToastState","animationName","target","dialog","ms","attr","a","b","top","toast","handleToastClick","x","y","rect","close","bottom","right","left","onLoaded","on"],"mappings":";;AAGA,MAAMA,IAAYC,EAAO,MAAM,MAAM,GAAG,EAAE,CAAC,GACrCC,IAAY;AAElB,SAASC,EAAiB,EAAE,eAAAC,GAAe,QAAAC,KAAmC;AAC7E,QAAMC,IAASD;AAEf,MADID,MAAkBH,EAAO,iBAAeK,EAAO,MAAA,GAC/CF,MAAkBH,EAAO,WAAY;AAEzC,QAAMM,IAAK,OAAOC,EAAKF,GAAQ,cAAc,CAAC;AAC9C,EAAAA,EAAO,MAAM,YAAY,yBAAyBC,IAAK,GAAGA,CAAE,OAAO,IAAI,GACvED,EAAO,aAAaJ,CAAS,KAAKM,EAAKF,GAAQJ,GAAW,GAAG,KAAK,IAAA,CAAK,EAAE,GACzEM,EAAKF,GAAQ,YAAY,GAAG,GAG5B,CAAC,GAAG,SAAS,iBAAoC,IAAIN,CAAS,QAAQ,CAAC,EACrE,KAAK,CAACS,GAAGC,MAAM,OAAOF,EAAKE,GAAGR,CAAS,CAAC,IAAI,OAAOM,EAAKC,GAAGP,CAAS,CAAC,CAAC,EACtE,OAAO,CAACS,GAAKC,OACbA,EAAM,MAAM,YAAY,KAAKA,MAAUP,IAAS,IAAIM,CAAG,MAChDA,IAAMC,EAAM,eAAe,IAChC,CAAC;AACN;AAEA,SAASC,EAAiB,EAAE,QAAAR,GAAQ,SAASS,GAAG,SAASC,KAAiB;AACzE,MACCV,aAAkB,qBAClBA,EAAO,UAAU,SAASL,CAAS,KACnCQ,EAAKH,GAAQ,eAAe,MAAM,QACjC;AACD,UAAMW,IAAOX,EAAO,sBAAA,GACdO,IAAQ,OAAO,iBAAiBP,CAAM,GACtCY,IAAQ,OAAO,iBAAiBZ,GAAQ,SAAS,GACjDM,IAAMK,EAAK,MAAM,OAAO,SAASJ,EAAM,YAAY,EAAE,GACrDM,IAASP,IAAM,OAAO,SAASM,EAAM,QAAQ,EAAE,GAC/CE,IAAQH,EAAK,QAAQ,OAAO,SAASJ,EAAM,cAAc,EAAE,GAC3DQ,IAAOD,IAAQ,OAAO,SAASF,EAAM,OAAO,EAAE;AAGpD,IAFgBN,KAAOI,KAAKA,KAAKG,KAAUE,KAAQN,KAAKA,KAAKK,OAEzC,MAAA;AAAA,EACrB;AACD;AAEAE,EAAS,MAAM;AAAA,EACdC,EAAG,UAAU,kBAAkBnB,CAAgB;AAAA,EAC/CmB,EAAG,UAAU,SAAST,CAAiC;AACxD,CAAC;"}
1
+ {"version":3,"file":"toast-observer.js","sources":["../../designsystem/toast/toast-observer.ts"],"sourcesContent":["import styles from \"../styles.module.css\";\nimport { attr, on, onLoaded } from \"../utils\";\n\nconst CSS_TOAST = styles.toast.split(\" \")[0];\nconst ATTR_SORT = \"data-sort\";\n\nfunction handleToastState({ animationName, target }: Partial<AnimationEvent>) {\n\tconst dialog = target as HTMLDialogElement;\n\tif (animationName === styles._toastTimeout) dialog.close();\n\tif (animationName !== styles._toastOpen) return;\n\n\tconst ms = Number(attr(dialog, \"data-timeout\"));\n\tdialog.style.setProperty(\"--mtdsc-toast-timeout\", ms ? `${ms}ms` : null);\n\tdialog.hasAttribute(ATTR_SORT) || attr(dialog, ATTR_SORT, `${Date.now()}`);\n\tattr(dialog, \"tabindex\", \"0\"); // Make focusable\n\n\t// Setup layout\n\t[...document.querySelectorAll<HTMLDialogElement>(`.${CSS_TOAST}[open]`)]\n\t\t.sort((a, b) => Number(attr(b, ATTR_SORT)) - Number(attr(a, ATTR_SORT)))\n\t\t.reduce((top, toast) => {\n\t\t\ttoast.style.translate = `0 ${toast === target ? 0 : top}px`;\n\t\t\treturn top + toast.offsetHeight + 5;\n\t\t}, 0);\n}\n\nfunction handleToastClick({ target, clientX: x, clientY: y }: MouseEvent) {\n\tif (\n\t\ttarget instanceof HTMLDialogElement &&\n\t\ttarget.classList.contains(CSS_TOAST) &&\n\t\tattr(target, \"data-closedby\") !== \"none\"\n\t) {\n\t\tconst rect = target.getBoundingClientRect();\n\t\tconst toast = window.getComputedStyle(target);\n\t\tconst close = window.getComputedStyle(target, \"::after\");\n\t\tconst top = rect.top + Number.parseInt(toast.paddingTop, 10);\n\t\tconst bottom = top + Number.parseInt(close.height, 10);\n\t\tconst right = rect.right - Number.parseInt(toast.paddingRight, 10);\n\t\tconst left = right - Number.parseInt(close.width, 10);\n\t\tconst isClose = top <= y && y <= bottom && left <= x && x <= right;\n\n\t\tif (isClose) target.close(); // Click is on ::after element\n\t}\n}\n\nonLoaded(() => [\n\ton(document, \"animationstart\", handleToastState),\n\ton(document, \"click\", handleToastClick as EventListener),\n]);\n"],"names":[],"mappings":";;AAGA,MAAM,YAAY,OAAO,MAAM,MAAM,GAAG,EAAE,CAAC;AAC3C,MAAM,YAAY;AAElB,SAAS,iBAAiB,EAAE,eAAe,UAAmC;AAC7E,QAAM,SAAS;AACf,MAAI,kBAAkB,OAAO,cAAe,QAAO,MAAA;AACnD,MAAI,kBAAkB,OAAO,WAAY;AAEzC,QAAM,KAAK,OAAO,KAAK,QAAQ,cAAc,CAAC;AAC9C,SAAO,MAAM,YAAY,yBAAyB,KAAK,GAAG,EAAE,OAAO,IAAI;AACvE,SAAO,aAAa,SAAS,KAAK,KAAK,QAAQ,WAAW,GAAG,KAAK,IAAA,CAAK,EAAE;AACzE,OAAK,QAAQ,YAAY,GAAG;AAG5B,GAAC,GAAG,SAAS,iBAAoC,IAAI,SAAS,QAAQ,CAAC,EACrE,KAAK,CAAC,GAAG,MAAM,OAAO,KAAK,GAAG,SAAS,CAAC,IAAI,OAAO,KAAK,GAAG,SAAS,CAAC,CAAC,EACtE,OAAO,CAAC,KAAK,UAAU;AACvB,UAAM,MAAM,YAAY,KAAK,UAAU,SAAS,IAAI,GAAG;AACvD,WAAO,MAAM,MAAM,eAAe;AAAA,EACnC,GAAG,CAAC;AACN;AAEA,SAAS,iBAAiB,EAAE,QAAQ,SAAS,GAAG,SAAS,KAAiB;AACzE,MACC,kBAAkB,qBAClB,OAAO,UAAU,SAAS,SAAS,KACnC,KAAK,QAAQ,eAAe,MAAM,QACjC;AACD,UAAM,OAAO,OAAO,sBAAA;AACpB,UAAM,QAAQ,OAAO,iBAAiB,MAAM;AAC5C,UAAM,QAAQ,OAAO,iBAAiB,QAAQ,SAAS;AACvD,UAAM,MAAM,KAAK,MAAM,OAAO,SAAS,MAAM,YAAY,EAAE;AAC3D,UAAM,SAAS,MAAM,OAAO,SAAS,MAAM,QAAQ,EAAE;AACrD,UAAM,QAAQ,KAAK,QAAQ,OAAO,SAAS,MAAM,cAAc,EAAE;AACjE,UAAM,OAAO,QAAQ,OAAO,SAAS,MAAM,OAAO,EAAE;AACpD,UAAM,UAAU,OAAO,KAAK,KAAK,UAAU,QAAQ,KAAK,KAAK;AAE7D,QAAI,gBAAgB,MAAA;AAAA,EACrB;AACD;AAEA,SAAS,MAAM;AAAA,EACd,GAAG,UAAU,kBAAkB,gBAAgB;AAAA,EAC/C,GAAG,UAAU,SAAS,gBAAiC;AACxD,CAAC;"}
@@ -1,54 +1,62 @@
1
1
  'use client';
2
- import { jsx as m } from "react/jsx-runtime";
3
- import u from "clsx";
4
- import { createRoot as f } from "react-dom/client";
5
- import d from "../styles.module.css.js";
6
- import { IS_BROWSER as w, tag as y } from "../utils.js";
7
- if (w && !window._mtdsReactToasts) {
8
- const t = f(document.body.appendChild(y("div"))), o = /* @__PURE__ */ new Map(), e = () => t.render(Array.from(o.values() || []));
2
+ import { jsx } from "react/jsx-runtime";
3
+ import clsx from "clsx";
4
+ import { createRoot } from "react-dom/client";
5
+ import styles from "../styles.module.css.js";
6
+ import { isBrowser, tag } from "../utils.js";
7
+ if (isBrowser() && !window._mtdsReactToasts) {
8
+ const root = createRoot(document.body.appendChild(tag("div")));
9
+ const toasts = /* @__PURE__ */ new Map();
10
+ const render = () => root.render(Array.from(toasts.values() || []));
9
11
  window._mtdsReactToasts = {
10
- set: (r, a) => o.set(r, a) && e(),
11
- delete: ({ animationName: r, currentTarget: a }) => {
12
- r === d._toastClose && (o.delete(a.id), e());
12
+ set: (id, jsx2) => toasts.set(id, jsx2) && render(),
13
+ delete: ({ animationName, currentTarget }) => {
14
+ if (animationName !== styles._toastClose) return;
15
+ toasts.delete(currentTarget.id);
16
+ render();
13
17
  }
14
18
  };
15
19
  }
16
- function s(t, o = {}) {
17
- const e = o.id || `${Date.now()}`;
18
- return window._mtdsReactToasts?.set(
19
- e,
20
- /* @__PURE__ */ m(
20
+ function toast(content, opt = {}) {
21
+ const id = opt.id || `${Date.now()}`;
22
+ window._mtdsReactToasts?.set(
23
+ id,
24
+ /* @__PURE__ */ jsx(
21
25
  "dialog",
22
26
  {
23
- "aria-busy": o.busy,
24
- className: u(d.toast, o.className),
25
- "data-closedby": o.closedby,
26
- "data-color": o.color,
27
- "data-timeout": o.timeout,
28
- id: e,
27
+ "aria-busy": opt.busy,
28
+ className: clsx(styles.toast, opt.className),
29
+ "data-closedby": opt.closedby,
30
+ "data-color": opt.color,
31
+ "data-timeout": opt.timeout,
32
+ id,
29
33
  onAnimationEnd: window._mtdsReactToasts.delete,
30
- open: o.open ?? !0,
31
- children: t
34
+ open: opt.open ?? true,
35
+ children: content
32
36
  },
33
- e
37
+ id
34
38
  )
35
- ), e;
39
+ );
40
+ return id;
36
41
  }
37
- s.success = (t, o) => s(t, { color: "success", ...o });
38
- s.danger = (t, o) => s(t, { color: "danger", ...o });
39
- s.info = (t, o) => s(t, { color: "info", ...o });
40
- s.warning = (t, o) => s(t, { color: "warning", ...o });
41
- s.neutral = (t, o) => s(t, { color: "neutral", ...o });
42
- s.promise = async function(o, e) {
43
- const { loading: r, success: a, error: i, ...l } = e, c = s(r, { busy: !0, ...l });
42
+ toast.success = (content, opt) => toast(content, { color: "success", ...opt });
43
+ toast.danger = (content, opt) => toast(content, { color: "danger", ...opt });
44
+ toast.info = (content, opt) => toast(content, { color: "info", ...opt });
45
+ toast.warning = (content, opt) => toast(content, { color: "warning", ...opt });
46
+ toast.neutral = (content, opt) => toast(content, { color: "neutral", ...opt });
47
+ toast.promise = async function promise(action, props) {
48
+ const { loading, success, error, ...opt } = props;
49
+ const id = toast(loading, { busy: true, ...opt });
44
50
  try {
45
- const n = await o();
46
- return s.success(a, { id: c, busy: !1 }), n;
47
- } catch (n) {
48
- throw s.danger(i, { id: c, busy: !1 }), n;
51
+ const result = await action();
52
+ toast.success(success, { id, busy: false });
53
+ return result;
54
+ } catch (_error) {
55
+ toast.danger(error, { id, busy: false });
56
+ throw _error;
49
57
  }
50
58
  };
51
59
  export {
52
- s as toast
60
+ toast
53
61
  };
54
62
  //# sourceMappingURL=toast.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toast.js","sources":["../../designsystem/toast/toast.tsx"],"sourcesContent":["\"use client\";\nimport clsx from \"clsx\";\nimport { createRoot } from \"react-dom/client\";\nimport styles from \"../styles.module.css\";\nimport { IS_BROWSER, tag } from \"../utils\";\nimport type { ToastOptions } from \"./toast-helper\";\n\ndeclare global {\n\tinterface Window {\n\t\t_mtdsReactToasts?: {\n\t\t\tset: (id: string, jsx: React.ReactNode) => void;\n\t\t\tdelete: (event: React.AnimationEvent<HTMLDialogElement>) => void;\n\t\t};\n\t}\n}\n\n// Ensure only a single toast master is created\nif (IS_BROWSER && !window._mtdsReactToasts) {\n\tconst root = createRoot(document.body.appendChild(tag(\"div\")));\n\tconst toasts = new Map<string, React.ReactNode>();\n\tconst render = () => root.render(Array.from(toasts.values() || []));\n\n\t// Expose methods to add/remove toasts from the root container\n\twindow._mtdsReactToasts = {\n\t\tset: (id, jsx) => toasts.set(id, jsx) && render(),\n\t\tdelete: ({ animationName, currentTarget }) => {\n\t\t\tif (animationName !== styles._toastClose) return;\n\t\t\ttoasts.delete(currentTarget.id);\n\t\t\trender();\n\t\t},\n\t};\n}\n\nexport function toast(content: React.ReactNode, opt: ToastOptions = {}) {\n\tconst id = opt.id || `${Date.now()}`;\n\twindow._mtdsReactToasts?.set(\n\t\tid,\n\t\t<dialog\n\t\t\taria-busy={opt.busy}\n\t\t\tclassName={clsx(styles.toast, opt.className)}\n\t\t\tdata-closedby={opt.closedby}\n\t\t\tdata-color={opt.color}\n\t\t\tdata-timeout={opt.timeout}\n\t\t\tid={id}\n\t\t\tkey={id}\n\t\t\tonAnimationEnd={window._mtdsReactToasts.delete}\n\t\t\topen={opt.open ?? true}\n\t\t>\n\t\t\t{content}\n\t\t</dialog>,\n\t);\n\n\treturn id;\n}\n\n// Expose toast.danger, toast.info, toast.success etc.\ntoast.success = (content: React.ReactNode, opt?: ToastOptions) =>\n\ttoast(content, { color: \"success\", ...opt });\ntoast.danger = (content: React.ReactNode, opt?: ToastOptions) =>\n\ttoast(content, { color: \"danger\", ...opt });\ntoast.info = (content: React.ReactNode, opt?: ToastOptions) =>\n\ttoast(content, { color: \"info\", ...opt });\ntoast.warning = (content: React.ReactNode, opt?: ToastOptions) =>\n\ttoast(content, { color: \"warning\", ...opt });\ntoast.neutral = (content: React.ReactNode, opt?: ToastOptions) =>\n\ttoast(content, { color: \"neutral\", ...opt });\ntoast.promise = async function promise<T>(\n\taction: () => Promise<T>,\n\tprops: ToastOptions & {\n\t\tloading: React.ReactNode;\n\t\tsuccess: React.ReactNode;\n\t\terror: React.ReactNode;\n\t},\n): Promise<T> {\n\tconst { loading, success, error, ...opt } = props;\n\tconst id = toast(loading, { busy: true, ...opt });\n\ttry {\n\t\tconst result = await action();\n\t\ttoast.success(success, { id, busy: false });\n\t\treturn result;\n\t} catch (_error) {\n\t\ttoast.danger(error, { id, busy: false });\n\t\tthrow _error;\n\t}\n};\n"],"names":["IS_BROWSER","root","createRoot","tag","toasts","render","id","jsx","animationName","currentTarget","styles","toast","content","opt","clsx","action","props","loading","success","error","result","_error"],"mappings":";;;;;AAiBA,IAAIA,KAAc,CAAC,OAAO,kBAAkB;AAC3C,QAAMC,IAAOC,EAAW,SAAS,KAAK,YAAYC,EAAI,KAAK,CAAC,CAAC,GACvDC,wBAAa,IAAA,GACbC,IAAS,MAAMJ,EAAK,OAAO,MAAM,KAAKG,EAAO,YAAY,CAAA,CAAE,CAAC;AAGlE,SAAO,mBAAmB;AAAA,IACzB,KAAK,CAACE,GAAIC,MAAQH,EAAO,IAAIE,GAAIC,CAAG,KAAKF,EAAA;AAAA,IACzC,QAAQ,CAAC,EAAE,eAAAG,GAAe,eAAAC,QAAoB;AAC7C,MAAID,MAAkBE,EAAO,gBAC7BN,EAAO,OAAOK,EAAc,EAAE,GAC9BJ,EAAA;AAAA,IACD;AAAA,EAAA;AAEF;AAEO,SAASM,EAAMC,GAA0BC,IAAoB,IAAI;AACvE,QAAMP,IAAKO,EAAI,MAAM,GAAG,KAAK,KAAK;AAClC,gBAAO,kBAAkB;AAAA,IACxBP;AAAA,IACA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,aAAWM,EAAI;AAAA,QACf,WAAWC,EAAKJ,EAAO,OAAOG,EAAI,SAAS;AAAA,QAC3C,iBAAeA,EAAI;AAAA,QACnB,cAAYA,EAAI;AAAA,QAChB,gBAAcA,EAAI;AAAA,QAClB,IAAAP;AAAA,QAEA,gBAAgB,OAAO,iBAAiB;AAAA,QACxC,MAAMO,EAAI,QAAQ;AAAA,QAEjB,UAAAD;AAAA,MAAA;AAAA,MAJIN;AAAA,IAAA;AAAA,EAKN,GAGMA;AACR;AAGAK,EAAM,UAAU,CAACC,GAA0BC,MAC1CF,EAAMC,GAAS,EAAE,OAAO,WAAW,GAAGC,GAAK;AAC5CF,EAAM,SAAS,CAACC,GAA0BC,MACzCF,EAAMC,GAAS,EAAE,OAAO,UAAU,GAAGC,GAAK;AAC3CF,EAAM,OAAO,CAACC,GAA0BC,MACvCF,EAAMC,GAAS,EAAE,OAAO,QAAQ,GAAGC,GAAK;AACzCF,EAAM,UAAU,CAACC,GAA0BC,MAC1CF,EAAMC,GAAS,EAAE,OAAO,WAAW,GAAGC,GAAK;AAC5CF,EAAM,UAAU,CAACC,GAA0BC,MAC1CF,EAAMC,GAAS,EAAE,OAAO,WAAW,GAAGC,GAAK;AAC5CF,EAAM,UAAU,eACfI,GACAC,GAKa;AACb,QAAM,EAAE,SAAAC,GAAS,SAAAC,GAAS,OAAAC,GAAO,GAAGN,MAAQG,GACtCV,IAAKK,EAAMM,GAAS,EAAE,MAAM,IAAM,GAAGJ,GAAK;AAChD,MAAI;AACH,UAAMO,IAAS,MAAML,EAAA;AACrB,WAAAJ,EAAM,QAAQO,GAAS,EAAE,IAAAZ,GAAI,MAAM,IAAO,GACnCc;AAAA,EACR,SAASC,GAAQ;AAChB,UAAAV,EAAM,OAAOQ,GAAO,EAAE,IAAAb,GAAI,MAAM,IAAO,GACjCe;AAAA,EACP;AACD;"}
1
+ {"version":3,"file":"toast.js","sources":["../../designsystem/toast/toast.tsx"],"sourcesContent":["\"use client\";\nimport clsx from \"clsx\";\nimport { createRoot } from \"react-dom/client\";\nimport styles from \"../styles.module.css\";\nimport { isBrowser, tag } from \"../utils\";\nimport type { ToastOptions } from \"./toast-helper\";\n\ndeclare global {\n\tinterface Window {\n\t\t_mtdsReactToasts?: {\n\t\t\tset: (id: string, jsx: React.ReactNode) => void;\n\t\t\tdelete: (event: React.AnimationEvent<HTMLDialogElement>) => void;\n\t\t};\n\t}\n}\n\n// Ensure only a single toast master is created\nif (isBrowser() && !window._mtdsReactToasts) {\n\tconst root = createRoot(document.body.appendChild(tag(\"div\")));\n\tconst toasts = new Map<string, React.ReactNode>();\n\tconst render = () => root.render(Array.from(toasts.values() || []));\n\n\t// Expose methods to add/remove toasts from the root container\n\twindow._mtdsReactToasts = {\n\t\tset: (id, jsx) => toasts.set(id, jsx) && render(),\n\t\tdelete: ({ animationName, currentTarget }) => {\n\t\t\tif (animationName !== styles._toastClose) return;\n\t\t\ttoasts.delete(currentTarget.id);\n\t\t\trender();\n\t\t},\n\t};\n}\n\nexport function toast(content: React.ReactNode, opt: ToastOptions = {}) {\n\tconst id = opt.id || `${Date.now()}`;\n\twindow._mtdsReactToasts?.set(\n\t\tid,\n\t\t<dialog\n\t\t\taria-busy={opt.busy}\n\t\t\tclassName={clsx(styles.toast, opt.className)}\n\t\t\tdata-closedby={opt.closedby}\n\t\t\tdata-color={opt.color}\n\t\t\tdata-timeout={opt.timeout}\n\t\t\tid={id}\n\t\t\tkey={id}\n\t\t\tonAnimationEnd={window._mtdsReactToasts.delete}\n\t\t\topen={opt.open ?? true}\n\t\t>\n\t\t\t{content}\n\t\t</dialog>,\n\t);\n\n\treturn id;\n}\n\n// Expose toast.danger, toast.info, toast.success etc.\ntoast.success = (content: React.ReactNode, opt?: ToastOptions) =>\n\ttoast(content, { color: \"success\", ...opt });\ntoast.danger = (content: React.ReactNode, opt?: ToastOptions) =>\n\ttoast(content, { color: \"danger\", ...opt });\ntoast.info = (content: React.ReactNode, opt?: ToastOptions) =>\n\ttoast(content, { color: \"info\", ...opt });\ntoast.warning = (content: React.ReactNode, opt?: ToastOptions) =>\n\ttoast(content, { color: \"warning\", ...opt });\ntoast.neutral = (content: React.ReactNode, opt?: ToastOptions) =>\n\ttoast(content, { color: \"neutral\", ...opt });\ntoast.promise = async function promise<T>(\n\taction: () => Promise<T>,\n\tprops: ToastOptions & {\n\t\tloading: React.ReactNode;\n\t\tsuccess: React.ReactNode;\n\t\terror: React.ReactNode;\n\t},\n): Promise<T> {\n\tconst { loading, success, error, ...opt } = props;\n\tconst id = toast(loading, { busy: true, ...opt });\n\ttry {\n\t\tconst result = await action();\n\t\ttoast.success(success, { id, busy: false });\n\t\treturn result;\n\t} catch (_error) {\n\t\ttoast.danger(error, { id, busy: false });\n\t\tthrow _error;\n\t}\n};\n"],"names":["jsx"],"mappings":";;;;;AAiBA,IAAI,UAAA,KAAe,CAAC,OAAO,kBAAkB;AAC5C,QAAM,OAAO,WAAW,SAAS,KAAK,YAAY,IAAI,KAAK,CAAC,CAAC;AAC7D,QAAM,6BAAa,IAAA;AACnB,QAAM,SAAS,MAAM,KAAK,OAAO,MAAM,KAAK,OAAO,YAAY,CAAA,CAAE,CAAC;AAGlE,SAAO,mBAAmB;AAAA,IACzB,KAAK,CAAC,IAAIA,SAAQ,OAAO,IAAI,IAAIA,IAAG,KAAK,OAAA;AAAA,IACzC,QAAQ,CAAC,EAAE,eAAe,oBAAoB;AAC7C,UAAI,kBAAkB,OAAO,YAAa;AAC1C,aAAO,OAAO,cAAc,EAAE;AAC9B,aAAA;AAAA,IACD;AAAA,EAAA;AAEF;AAEO,SAAS,MAAM,SAA0B,MAAoB,IAAI;AACvE,QAAM,KAAK,IAAI,MAAM,GAAG,KAAK,KAAK;AAClC,SAAO,kBAAkB;AAAA,IACxB;AAAA,IACA;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,aAAW,IAAI;AAAA,QACf,WAAW,KAAK,OAAO,OAAO,IAAI,SAAS;AAAA,QAC3C,iBAAe,IAAI;AAAA,QACnB,cAAY,IAAI;AAAA,QAChB,gBAAc,IAAI;AAAA,QAClB;AAAA,QAEA,gBAAgB,OAAO,iBAAiB;AAAA,QACxC,MAAM,IAAI,QAAQ;AAAA,QAEjB,UAAA;AAAA,MAAA;AAAA,MAJI;AAAA,IAAA;AAAA,EAKN;AAGD,SAAO;AACR;AAGA,MAAM,UAAU,CAAC,SAA0B,QAC1C,MAAM,SAAS,EAAE,OAAO,WAAW,GAAG,KAAK;AAC5C,MAAM,SAAS,CAAC,SAA0B,QACzC,MAAM,SAAS,EAAE,OAAO,UAAU,GAAG,KAAK;AAC3C,MAAM,OAAO,CAAC,SAA0B,QACvC,MAAM,SAAS,EAAE,OAAO,QAAQ,GAAG,KAAK;AACzC,MAAM,UAAU,CAAC,SAA0B,QAC1C,MAAM,SAAS,EAAE,OAAO,WAAW,GAAG,KAAK;AAC5C,MAAM,UAAU,CAAC,SAA0B,QAC1C,MAAM,SAAS,EAAE,OAAO,WAAW,GAAG,KAAK;AAC5C,MAAM,UAAU,eAAe,QAC9B,QACA,OAKa;AACb,QAAM,EAAE,SAAS,SAAS,OAAO,GAAG,QAAQ;AAC5C,QAAM,KAAK,MAAM,SAAS,EAAE,MAAM,MAAM,GAAG,KAAK;AAChD,MAAI;AACH,UAAM,SAAS,MAAM,OAAA;AACrB,UAAM,QAAQ,SAAS,EAAE,IAAI,MAAM,OAAO;AAC1C,WAAO;AAAA,EACR,SAAS,QAAQ;AAChB,UAAM,OAAO,OAAO,EAAE,IAAI,MAAM,OAAO;AACvC,UAAM;AAAA,EACP;AACD;"}
@@ -1,13 +1,18 @@
1
- import c from "../styles.module.css.js";
2
- import { onLoaded as g, on as l } from "../utils.js";
3
- const u = `.${c.togglegroup.split(" ")[0]}`;
4
- function f(e) {
5
- const { key: n, target: t } = e, r = t instanceof HTMLInputElement && t.closest(u);
6
- if (r && (n === "Enter" && t.click(), n?.startsWith("Arrow"))) {
7
- e.preventDefault();
8
- const o = r.getElementsByTagName("input"), s = [...o].indexOf(t), i = n.match(/Arrow(Right|Down)/) ? 1 : -1;
9
- o[(o.length + s + i) % o.length]?.focus();
1
+ import styles from "../styles.module.css.js";
2
+ import { onLoaded, on } from "../utils.js";
3
+ const CSS_TOGGLEGROUP = `.${styles.togglegroup.split(" ")[0]}`;
4
+ function handleTogglegroupKeydown(event) {
5
+ const { key, target: el } = event;
6
+ const group = el instanceof HTMLInputElement && el.closest(CSS_TOGGLEGROUP);
7
+ if (!group) return;
8
+ if (key === "Enter") el.click();
9
+ if (key?.startsWith("Arrow")) {
10
+ event.preventDefault();
11
+ const inputs = group.getElementsByTagName("input");
12
+ const index = [...inputs].indexOf(el);
13
+ const move = key.match(/Arrow(Right|Down)/) ? 1 : -1;
14
+ inputs[(inputs.length + index + move) % inputs.length]?.focus();
10
15
  }
11
16
  }
12
- g(() => [l(document, "keydown", f)]);
17
+ onLoaded(() => [on(document, "keydown", handleTogglegroupKeydown)]);
13
18
  //# sourceMappingURL=togglegroup-observer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"togglegroup-observer.js","sources":["../../designsystem/togglegroup/togglegroup-observer.ts"],"sourcesContent":["import styles from \"../styles.module.css\";\nimport { on, onLoaded } from \"../utils\";\n\nconst CSS_TOGGLEGROUP = `.${styles.togglegroup.split(\" \")[0]}`;\n\n// Prevent browsers from showing default validation bubbles\nfunction handleTogglegroupKeydown(event: Event & Partial<KeyboardEvent>) {\n\tconst { key, target: el } = event;\n\tconst group = el instanceof HTMLInputElement && el.closest(CSS_TOGGLEGROUP);\n\n\tif (!group) return;\n\tif (key === \"Enter\") el.click();\n\tif (key?.startsWith(\"Arrow\")) {\n\t\tevent.preventDefault();\n\t\tconst inputs = group.getElementsByTagName(\"input\");\n\t\tconst index = [...inputs].indexOf(el);\n\t\tconst move = key.match(/Arrow(Right|Down)/) ? 1 : -1;\n\t\tinputs[(inputs.length + index + move) % inputs.length]?.focus();\n\t}\n}\n\nonLoaded(() => [on(document, \"keydown\", handleTogglegroupKeydown)]);\n"],"names":["CSS_TOGGLEGROUP","styles","handleTogglegroupKeydown","event","key","el","group","inputs","index","move","onLoaded","on"],"mappings":";;AAGA,MAAMA,IAAkB,IAAIC,EAAO,YAAY,MAAM,GAAG,EAAE,CAAC,CAAC;AAG5D,SAASC,EAAyBC,GAAuC;AACxE,QAAM,EAAE,KAAAC,GAAK,QAAQC,EAAA,IAAOF,GACtBG,IAAQD,aAAc,oBAAoBA,EAAG,QAAQL,CAAe;AAE1E,MAAKM,MACDF,MAAQ,WAASC,EAAG,MAAA,GACpBD,GAAK,WAAW,OAAO,IAAG;AAC7B,IAAAD,EAAM,eAAA;AACN,UAAMI,IAASD,EAAM,qBAAqB,OAAO,GAC3CE,IAAQ,CAAC,GAAGD,CAAM,EAAE,QAAQF,CAAE,GAC9BI,IAAOL,EAAI,MAAM,mBAAmB,IAAI,IAAI;AAClD,IAAAG,GAAQA,EAAO,SAASC,IAAQC,KAAQF,EAAO,MAAM,GAAG,MAAA;AAAA,EACzD;AACD;AAEAG,EAAS,MAAM,CAACC,EAAG,UAAU,WAAWT,CAAwB,CAAC,CAAC;"}
1
+ {"version":3,"file":"togglegroup-observer.js","sources":["../../designsystem/togglegroup/togglegroup-observer.ts"],"sourcesContent":["import styles from \"../styles.module.css\";\nimport { on, onLoaded } from \"../utils\";\n\nconst CSS_TOGGLEGROUP = `.${styles.togglegroup.split(\" \")[0]}`;\n\n// Prevent browsers from showing default validation bubbles\nfunction handleTogglegroupKeydown(event: Event & Partial<KeyboardEvent>) {\n\tconst { key, target: el } = event;\n\tconst group = el instanceof HTMLInputElement && el.closest(CSS_TOGGLEGROUP);\n\n\tif (!group) return;\n\tif (key === \"Enter\") el.click();\n\tif (key?.startsWith(\"Arrow\")) {\n\t\tevent.preventDefault();\n\t\tconst inputs = group.getElementsByTagName(\"input\");\n\t\tconst index = [...inputs].indexOf(el);\n\t\tconst move = key.match(/Arrow(Right|Down)/) ? 1 : -1;\n\t\tinputs[(inputs.length + index + move) % inputs.length]?.focus();\n\t}\n}\n\nonLoaded(() => [on(document, \"keydown\", handleTogglegroupKeydown)]);\n"],"names":[],"mappings":";;AAGA,MAAM,kBAAkB,IAAI,OAAO,YAAY,MAAM,GAAG,EAAE,CAAC,CAAC;AAG5D,SAAS,yBAAyB,OAAuC;AACxE,QAAM,EAAE,KAAK,QAAQ,GAAA,IAAO;AAC5B,QAAM,QAAQ,cAAc,oBAAoB,GAAG,QAAQ,eAAe;AAE1E,MAAI,CAAC,MAAO;AACZ,MAAI,QAAQ,QAAS,IAAG,MAAA;AACxB,MAAI,KAAK,WAAW,OAAO,GAAG;AAC7B,UAAM,eAAA;AACN,UAAM,SAAS,MAAM,qBAAqB,OAAO;AACjD,UAAM,QAAQ,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE;AACpC,UAAM,OAAO,IAAI,MAAM,mBAAmB,IAAI,IAAI;AAClD,YAAQ,OAAO,SAAS,QAAQ,QAAQ,OAAO,MAAM,GAAG,MAAA;AAAA,EACzD;AACD;AAEA,SAAS,MAAM,CAAC,GAAG,UAAU,WAAW,wBAAwB,CAAC,CAAC;"}
@@ -3,9 +3,9 @@ export type TogglegroupItemProps = Omit<React.ComponentPropsWithoutRef<"label">,
3
3
  name: string;
4
4
  value: string;
5
5
  };
6
- export declare const Togglegroup: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement>, "ref"> & React.RefAttributes<HTMLFieldSetElement>> & {
7
- Item: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>, "ref">, "onChange"> & Pick<Omit<React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref">, "defaultChecked" | "onChange" | "checked"> & {
6
+ export declare const Togglegroup: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement>, "ref"> & import('react').RefAttributes<HTMLFieldSetElement>> & {
7
+ Item: import('react').ForwardRefExoticComponent<Omit<Omit<import('react').DetailedHTMLProps<import('react').LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>, "ref">, "onChange"> & Pick<Omit<import('react').DetailedHTMLProps<import('react').InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref">, "defaultChecked" | "onChange" | "checked"> & {
8
8
  name: string;
9
9
  value: string;
10
- } & React.RefAttributes<HTMLLabelElement>>;
10
+ } & import('react').RefAttributes<HTMLLabelElement>>;
11
11
  };
@@ -1,29 +1,31 @@
1
- import { jsx as t, jsxs as i } from "react/jsx-runtime";
2
- import u from "clsx";
3
- import { forwardRef as g } from "react";
4
- import c from "../styles.module.css.js";
5
- const f = g(
6
- function({ className: o, ...r }, e) {
7
- return /* @__PURE__ */ t(
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import clsx from "clsx";
3
+ import { forwardRef } from "react";
4
+ import styles from "../styles.module.css.js";
5
+ const TogglegroupComp = forwardRef(
6
+ function Togglegroup2({ className, ...rest }, ref) {
7
+ return /* @__PURE__ */ jsx(
8
8
  "fieldset",
9
9
  {
10
- className: u(c.togglegroup, o),
11
- ref: e,
12
- ...r
10
+ className: clsx(styles.togglegroup, className),
11
+ ref,
12
+ ...rest
13
13
  }
14
14
  );
15
15
  }
16
- ), a = g(
17
- function({ children: o, checked: r, defaultChecked: e, name: s, onChange: l, ...m }, n) {
18
- return /* @__PURE__ */ i("label", { ref: n, ...m, children: [
19
- /* @__PURE__ */ t("input", { type: "radio", checked: r, defaultChecked: e, name: s, onChange: l }),
20
- o
16
+ );
17
+ const TogglegroupItem = forwardRef(
18
+ function TogglegroupItem2({ children, checked, defaultChecked, name, onChange, ...rest }, ref) {
19
+ return /* @__PURE__ */ jsxs("label", { ref, ...rest, children: [
20
+ /* @__PURE__ */ jsx("input", { type: "radio", ...{ checked, defaultChecked, name, onChange } }),
21
+ children
21
22
  ] });
22
23
  }
23
- ), I = Object.assign(f, {
24
- Item: a
24
+ );
25
+ const Togglegroup = Object.assign(TogglegroupComp, {
26
+ Item: TogglegroupItem
25
27
  });
26
28
  export {
27
- I as Togglegroup
29
+ Togglegroup
28
30
  };
29
31
  //# sourceMappingURL=togglegroup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"togglegroup.js","sources":["../../designsystem/togglegroup/togglegroup.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { forwardRef } from \"react\";\nimport styles from \"../styles.module.css\";\n\nexport type TogglegroupProps = React.ComponentPropsWithoutRef<\"fieldset\">;\nexport type TogglegroupItemProps = Omit<\n\tReact.ComponentPropsWithoutRef<\"label\">,\n\t\"onChange\"\n> &\n\tPick<\n\t\tReact.ComponentPropsWithoutRef<\"input\">,\n\t\t\"defaultChecked\" | \"checked\" | \"onChange\"\n\t> & { name: string; value: string }; // Make name and value required\n\nconst TogglegroupComp = forwardRef<HTMLFieldSetElement, TogglegroupProps>(\n\tfunction Togglegroup({ className, ...rest }, ref) {\n\t\treturn (\n\t\t\t<fieldset\n\t\t\t\tclassName={clsx(styles.togglegroup, className)}\n\t\t\t\tref={ref}\n\t\t\t\t{...rest}\n\t\t\t/>\n\t\t);\n\t},\n);\nconst TogglegroupItem = forwardRef<HTMLLabelElement, TogglegroupItemProps>(\n\tfunction TogglegroupItem(\n\t\t{ children, checked, defaultChecked, name, onChange, ...rest },\n\t\tref,\n\t) {\n\t\treturn (\n\t\t\t<label ref={ref} {...rest}>\n\t\t\t\t<input type=\"radio\" {...{ checked, defaultChecked, name, onChange }} />\n\t\t\t\t{children}\n\t\t\t</label>\n\t\t);\n\t},\n);\n\nexport const Togglegroup = Object.assign(TogglegroupComp, {\n\tItem: TogglegroupItem,\n});\n"],"names":["TogglegroupComp","forwardRef","className","rest","ref","jsx","clsx","styles","TogglegroupItem","children","checked","defaultChecked","name","onChange","jsxs","Togglegroup"],"mappings":";;;;AAcA,MAAMA,IAAkBC;AAAA,EACvB,SAAqB,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAAQC,GAAK;AACjD,WACC,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,WAAWC,EAAKC,EAAO,aAAaL,CAAS;AAAA,QAC7C,KAAAE;AAAA,QACC,GAAGD;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACD,GACMK,IAAkBP;AAAA,EACvB,SACC,EAAE,UAAAQ,GAAU,SAAAC,GAAS,gBAAAC,GAAgB,MAAAC,GAAM,UAAAC,GAAU,GAAGV,EAAA,GACxDC,GACC;AACD,WACC,gBAAAU,EAAC,SAAA,EAAM,KAAAV,GAAW,GAAGD,GACpB,UAAA;AAAA,MAAA,gBAAAE,EAAC,SAAA,EAAM,MAAK,SAAc,SAAAK,GAAS,gBAAAC,GAAgB,MAAAC,GAAM,UAAAC,GAAY;AAAA,MACpEJ;AAAA,IAAA,GACF;AAAA,EAEF;AACD,GAEaM,IAAc,OAAO,OAAOf,GAAiB;AAAA,EACzD,MAAMQ;AACP,CAAC;"}
1
+ {"version":3,"file":"togglegroup.js","sources":["../../designsystem/togglegroup/togglegroup.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { forwardRef } from \"react\";\nimport styles from \"../styles.module.css\";\n\nexport type TogglegroupProps = React.ComponentPropsWithoutRef<\"fieldset\">;\nexport type TogglegroupItemProps = Omit<\n\tReact.ComponentPropsWithoutRef<\"label\">,\n\t\"onChange\"\n> &\n\tPick<\n\t\tReact.ComponentPropsWithoutRef<\"input\">,\n\t\t\"defaultChecked\" | \"checked\" | \"onChange\"\n\t> & { name: string; value: string }; // Make name and value required\n\nconst TogglegroupComp = forwardRef<HTMLFieldSetElement, TogglegroupProps>(\n\tfunction Togglegroup({ className, ...rest }, ref) {\n\t\treturn (\n\t\t\t<fieldset\n\t\t\t\tclassName={clsx(styles.togglegroup, className)}\n\t\t\t\tref={ref}\n\t\t\t\t{...rest}\n\t\t\t/>\n\t\t);\n\t},\n);\nconst TogglegroupItem = forwardRef<HTMLLabelElement, TogglegroupItemProps>(\n\tfunction TogglegroupItem(\n\t\t{ children, checked, defaultChecked, name, onChange, ...rest },\n\t\tref,\n\t) {\n\t\treturn (\n\t\t\t<label ref={ref} {...rest}>\n\t\t\t\t<input type=\"radio\" {...{ checked, defaultChecked, name, onChange }} />\n\t\t\t\t{children}\n\t\t\t</label>\n\t\t);\n\t},\n);\n\nexport const Togglegroup = Object.assign(TogglegroupComp, {\n\tItem: TogglegroupItem,\n});\n"],"names":["Togglegroup","TogglegroupItem"],"mappings":";;;;AAcA,MAAM,kBAAkB;AAAA,EACvB,SAASA,aAAY,EAAE,WAAW,GAAG,KAAA,GAAQ,KAAK;AACjD,WACC;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,WAAW,KAAK,OAAO,aAAa,SAAS;AAAA,QAC7C;AAAA,QACC,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACD;AACA,MAAM,kBAAkB;AAAA,EACvB,SAASC,iBACR,EAAE,UAAU,SAAS,gBAAgB,MAAM,UAAU,GAAG,KAAA,GACxD,KACC;AACD,WACC,qBAAC,SAAA,EAAM,KAAW,GAAG,MACpB,UAAA;AAAA,MAAA,oBAAC,SAAA,EAAM,MAAK,SAAS,GAAG,EAAE,SAAS,gBAAgB,MAAM,SAAA,GAAY;AAAA,MACpE;AAAA,IAAA,GACF;AAAA,EAEF;AACD;AAEO,MAAM,cAAc,OAAO,OAAO,iBAAiB;AAAA,EACzD,MAAM;AACP,CAAC;"}
@@ -1,43 +1,59 @@
1
- import { flip as T, shift as w } from "@floating-ui/dom";
2
- import E from "../styles.module.css.js";
3
- import { IS_BROWSER as h, tag as y, onLoaded as I, on as a, onMutation as L, QUICK_EVENT as d, attr as l, anchorPosition as r } from "../utils.js";
4
- const p = "Escape", g = 300, u = "mtds-tooltip", e = h ? document.getElementById(u) || y("div", {
5
- class: E._tooltip,
6
- id: u,
1
+ import { flip, shift } from "@floating-ui/dom";
2
+ import styles from "../styles.module.css.js";
3
+ import { isBrowser, tag, onLoaded, on, onMutation, QUICK_EVENT, attr, anchorPosition } from "../utils.js";
4
+ const ESC = "Escape";
5
+ const THROTTLE_DELAY = 300;
6
+ const TOOLTIP_ID = "mtds-tooltip";
7
+ const TOOLTIP = isBrowser() ? document.getElementById(TOOLTIP_ID) || tag("div", {
8
+ class: styles._tooltip,
9
+ id: TOOLTIP_ID,
7
10
  popover: "manual"
8
11
  }) : null;
9
- let c = null, f = Number.NEGATIVE_INFINITY, m = 0;
10
- function s({ target: n, type: t, key: o }) {
11
- if (t === "keydown" && o !== p) return;
12
- const i = f + g - Date.now();
13
- clearTimeout(m), m = setTimeout(
14
- C,
15
- Math.max(i, 0),
16
- o === p ? null : n
12
+ let ANCHOR = null;
13
+ let LAST_CALL = Number.NEGATIVE_INFINITY;
14
+ let THROTTLE = 0;
15
+ function handleTipToggle({ target, type, key }) {
16
+ if (type === "keydown" && key !== ESC) return;
17
+ const wait = LAST_CALL + THROTTLE_DELAY - Date.now();
18
+ clearTimeout(THROTTLE);
19
+ THROTTLE = setTimeout(
20
+ handleMoveThrottled,
21
+ Math.max(wait, 0),
22
+ key === ESC ? null : target
17
23
  );
18
24
  }
19
- function C(n) {
20
- if (f = Date.now(), !e || n === e) return;
21
- e?.isConnected || document.body.append(e);
22
- let t = n?.closest?.("[data-tooltip]") || null;
23
- if (t === c) return;
24
- const o = t && l(t, "data-tooltip") || "", i = t && l(t, "data-tooltip-position") || window.getComputedStyle(t || document.body).getPropertyValue("--mtds-tooltip-position")?.trim() || "top";
25
- (!o || o === "false" || o === "true" || i === "none") && (t = null), t && (e.textContent = o), r(e, !1), c = t, e.hidePopover(), e.togglePopover(!!t), r(e, t || !1, {
25
+ function handleMoveThrottled(target) {
26
+ LAST_CALL = Date.now();
27
+ if (!TOOLTIP || target === TOOLTIP) return;
28
+ if (!TOOLTIP?.isConnected) document.body.append(TOOLTIP);
29
+ let anchor = target?.closest?.("[data-tooltip]") || null;
30
+ if (anchor === ANCHOR) return;
31
+ const text = anchor && attr(anchor, "data-tooltip") || "";
32
+ const position = anchor && attr(anchor, "data-tooltip-position") || window.getComputedStyle(anchor || document.body).getPropertyValue("--mtds-tooltip-position")?.trim() || "top";
33
+ const isHidden = !text || text === "false" || text === "true" || position === "none";
34
+ if (isHidden) anchor = null;
35
+ if (anchor) TOOLTIP.textContent = text;
36
+ anchorPosition(TOOLTIP, false);
37
+ ANCHOR = anchor;
38
+ TOOLTIP.hidePopover();
39
+ TOOLTIP.togglePopover(!!anchor);
40
+ anchorPosition(TOOLTIP, anchor || false, {
26
41
  strategy: "fixed",
27
- placement: i,
28
- middleware: [T(), w({ padding: 10 })]
42
+ placement: position,
43
+ middleware: [flip(), shift({ padding: 10 })]
29
44
  });
30
45
  }
31
- function O() {
32
- document.querySelectorAll("[data-tooltip]").forEach((n) => {
33
- const t = !n?.textContent?.trim(), o = l(n, "data-tooltip");
34
- l(n, `aria-${t ? "label" : "description"}`, o);
46
+ function handleTipLabels() {
47
+ document.querySelectorAll("[data-tooltip]").forEach((el) => {
48
+ const empty = !el?.textContent?.trim();
49
+ const text = attr(el, "data-tooltip");
50
+ attr(el, `aria-${empty ? "label" : "description"}`, text);
35
51
  });
36
52
  }
37
- I(() => [
38
- a(document, "blur,focus,mouseout,mouseover", s, d),
39
- a(window, "keydown", s, d),
40
- a(window, "blur", s, d),
41
- L(O, "data-tooltip")
53
+ onLoaded(() => [
54
+ on(document, "blur,focus,mouseout,mouseover", handleTipToggle, QUICK_EVENT),
55
+ on(window, "keydown", handleTipToggle, QUICK_EVENT),
56
+ on(window, "blur", handleTipToggle, QUICK_EVENT),
57
+ onMutation(handleTipLabels, "data-tooltip")
42
58
  ]);
43
59
  //# sourceMappingURL=tooltip-observer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip-observer.js","sources":["../../designsystem/tooltip/tooltip-observer.ts"],"sourcesContent":["import { flip, type Placement, shift } from \"@floating-ui/dom\";\nimport styles from \"../styles.module.css\";\nimport {\n\tanchorPosition,\n\tattr,\n\tIS_BROWSER,\n\ton,\n\tonLoaded,\n\tonMutation,\n\tQUICK_EVENT,\n\ttag,\n} from \"../utils\";\n\nconst ESC = \"Escape\";\nconst THROTTLE_DELAY = 300;\nconst TOOLTIP_ID = \"mtds-tooltip\";\nconst TOOLTIP = IS_BROWSER\n\t? document.getElementById(TOOLTIP_ID) ||\n\t\ttag(\"div\", {\n\t\t\tclass: styles._tooltip,\n\t\t\tid: TOOLTIP_ID,\n\t\t\tpopover: \"manual\",\n\t\t})\n\t: null;\n\nlet ANCHOR: Element | null = null;\nlet LAST_CALL = Number.NEGATIVE_INFINITY;\nlet THROTTLE: number | ReturnType<typeof setTimeout> = 0;\n\nfunction handleTipToggle({ target, type, key }: Event & { key?: string }) {\n\tif (type === \"keydown\" && key !== ESC) return; // Allow ESC dismiss to follow https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/\n\tconst wait = LAST_CALL + THROTTLE_DELAY - Date.now();\n\tclearTimeout(THROTTLE);\n\tTHROTTLE = setTimeout(\n\t\thandleMoveThrottled,\n\t\tMath.max(wait, 0),\n\t\tkey === ESC ? null : target,\n\t);\n}\n\n// Using a throttled function to avoid performance issues\nfunction handleMoveThrottled(target: Element | null) {\n\tLAST_CALL = Date.now();\n\n\t// Build and append tooltip if not existing\n\tif (!TOOLTIP || target === TOOLTIP) return; // Allow tooltip to be hovered, following https://www.w3.org/TR/WCAG21/#content-on-hover-or-focus\n\tif (!TOOLTIP?.isConnected) document.body.append(TOOLTIP); // Ensure connected\n\tlet anchor = target?.closest?.<Element>(\"[data-tooltip]\") || null;\n\n\t// No need to update\n\tif (anchor === ANCHOR) return;\n\n\tconst text = (anchor && attr(anchor, \"data-tooltip\")) || \"\";\n\tconst position =\n\t\t(anchor && attr(anchor, \"data-tooltip-position\")) ||\n\t\twindow\n\t\t\t.getComputedStyle(anchor || document.body)\n\t\t\t.getPropertyValue(\"--mtds-tooltip-position\")\n\t\t\t?.trim() ||\n\t\t\"top\"; // Position can both be set by attribute or CSS custom property\n\n\tconst isHidden =\n\t\t!text || text === \"false\" || text === \"true\" || position === \"none\";\n\n\tif (isHidden) anchor = null; // Do not show tooltip if boolish value\n\tif (anchor) TOOLTIP.textContent = text; // Only update content if new anchor\n\n\tanchorPosition(TOOLTIP, false); // Reset anchor position\n\n\tANCHOR = anchor; // Store new anchor - might be null if no new anchor\n\tTOOLTIP.hidePopover(); // Hide tooltip so it can be placed on top-layer on next show\n\tTOOLTIP.togglePopover(!!anchor);\n\tanchorPosition(TOOLTIP, anchor || false, {\n\t\tstrategy: \"fixed\",\n\t\tplacement: position as Placement,\n\t\tmiddleware: [flip(), shift({ padding: 10 })],\n\t});\n}\n\nfunction handleTipLabels() {\n\tdocument.querySelectorAll(\"[data-tooltip]\").forEach((el) => {\n\t\tconst empty = !el?.textContent?.trim();\n\t\tconst text = attr(el, \"data-tooltip\");\n\t\tattr(el, `aria-${empty ? \"label\" : \"description\"}`, text);\n\t});\n}\n\nonLoaded(() => [\n\ton(document, \"blur,focus,mouseout,mouseover\", handleTipToggle, QUICK_EVENT),\n\ton(window, \"keydown\", handleTipToggle, QUICK_EVENT),\n\ton(window, \"blur\", handleTipToggle, QUICK_EVENT),\n\tonMutation(handleTipLabels, \"data-tooltip\"),\n]);\n"],"names":["ESC","THROTTLE_DELAY","TOOLTIP_ID","TOOLTIP","IS_BROWSER","tag","styles","ANCHOR","LAST_CALL","THROTTLE","handleTipToggle","target","type","key","wait","handleMoveThrottled","anchor","text","attr","position","anchorPosition","flip","shift","handleTipLabels","el","empty","onLoaded","on","QUICK_EVENT","onMutation"],"mappings":";;;AAaA,MAAMA,IAAM,UACNC,IAAiB,KACjBC,IAAa,gBACbC,IAAUC,IACb,SAAS,eAAeF,CAAU,KACnCG,EAAI,OAAO;AAAA,EACV,OAAOC,EAAO;AAAA,EACd,IAAIJ;AAAA,EACJ,SAAS;AACV,CAAC,IACA;AAEH,IAAIK,IAAyB,MACzBC,IAAY,OAAO,mBACnBC,IAAmD;AAEvD,SAASC,EAAgB,EAAE,QAAAC,GAAQ,MAAAC,GAAM,KAAAC,KAAiC;AACzE,MAAID,MAAS,aAAaC,MAAQb,EAAK;AACvC,QAAMc,IAAON,IAAYP,IAAiB,KAAK,IAAA;AAC/C,eAAaQ,CAAQ,GACrBA,IAAW;AAAA,IACVM;AAAA,IACA,KAAK,IAAID,GAAM,CAAC;AAAA,IAChBD,MAAQb,IAAM,OAAOW;AAAA,EAAA;AAEvB;AAGA,SAASI,EAAoBJ,GAAwB;AAIpD,MAHAH,IAAY,KAAK,IAAA,GAGb,CAACL,KAAWQ,MAAWR,EAAS;AACpC,EAAKA,GAAS,eAAa,SAAS,KAAK,OAAOA,CAAO;AACvD,MAAIa,IAASL,GAAQ,UAAmB,gBAAgB,KAAK;AAG7D,MAAIK,MAAWT,EAAQ;AAEvB,QAAMU,IAAQD,KAAUE,EAAKF,GAAQ,cAAc,KAAM,IACnDG,IACJH,KAAUE,EAAKF,GAAQ,uBAAuB,KAC/C,OACE,iBAAiBA,KAAU,SAAS,IAAI,EACxC,iBAAiB,yBAAyB,GACzC,UACH;AAKD,GAFC,CAACC,KAAQA,MAAS,WAAWA,MAAS,UAAUE,MAAa,YAEhDH,IAAS,OACnBA,QAAgB,cAAcC,IAElCG,EAAejB,GAAS,EAAK,GAE7BI,IAASS,GACTb,EAAQ,YAAA,GACRA,EAAQ,cAAc,CAAC,CAACa,CAAM,GAC9BI,EAAejB,GAASa,KAAU,IAAO;AAAA,IACxC,UAAU;AAAA,IACV,WAAWG;AAAA,IACX,YAAY,CAACE,EAAA,GAAQC,EAAM,EAAE,SAAS,IAAI,CAAC;AAAA,EAAA,CAC3C;AACF;AAEA,SAASC,IAAkB;AAC1B,WAAS,iBAAiB,gBAAgB,EAAE,QAAQ,CAACC,MAAO;AAC3D,UAAMC,IAAQ,CAACD,GAAI,aAAa,KAAA,GAC1BP,IAAOC,EAAKM,GAAI,cAAc;AACpC,IAAAN,EAAKM,GAAI,QAAQC,IAAQ,UAAU,aAAa,IAAIR,CAAI;AAAA,EACzD,CAAC;AACF;AAEAS,EAAS,MAAM;AAAA,EACdC,EAAG,UAAU,iCAAiCjB,GAAiBkB,CAAW;AAAA,EAC1ED,EAAG,QAAQ,WAAWjB,GAAiBkB,CAAW;AAAA,EAClDD,EAAG,QAAQ,QAAQjB,GAAiBkB,CAAW;AAAA,EAC/CC,EAAWN,GAAiB,cAAc;AAC3C,CAAC;"}
1
+ {"version":3,"file":"tooltip-observer.js","sources":["../../designsystem/tooltip/tooltip-observer.ts"],"sourcesContent":["import { flip, type Placement, shift } from \"@floating-ui/dom\";\nimport styles from \"../styles.module.css\";\nimport {\n\tanchorPosition,\n\tattr,\n\tisBrowser,\n\ton,\n\tonLoaded,\n\tonMutation,\n\tQUICK_EVENT,\n\ttag,\n} from \"../utils\";\n\nconst ESC = \"Escape\";\nconst THROTTLE_DELAY = 300;\nconst TOOLTIP_ID = \"mtds-tooltip\";\nconst TOOLTIP = isBrowser()\n\t? document.getElementById(TOOLTIP_ID) ||\n\t\ttag(\"div\", {\n\t\t\tclass: styles._tooltip,\n\t\t\tid: TOOLTIP_ID,\n\t\t\tpopover: \"manual\",\n\t\t})\n\t: null;\n\nlet ANCHOR: Element | null = null;\nlet LAST_CALL = Number.NEGATIVE_INFINITY;\nlet THROTTLE: number | ReturnType<typeof setTimeout> = 0;\n\nfunction handleTipToggle({ target, type, key }: Event & { key?: string }) {\n\tif (type === \"keydown\" && key !== ESC) return; // Allow ESC dismiss to follow https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/\n\tconst wait = LAST_CALL + THROTTLE_DELAY - Date.now();\n\tclearTimeout(THROTTLE);\n\tTHROTTLE = setTimeout(\n\t\thandleMoveThrottled,\n\t\tMath.max(wait, 0),\n\t\tkey === ESC ? null : target,\n\t);\n}\n\n// Using a throttled function to avoid performance issues\nfunction handleMoveThrottled(target: Element | null) {\n\tLAST_CALL = Date.now();\n\n\t// Build and append tooltip if not existing\n\tif (!TOOLTIP || target === TOOLTIP) return; // Allow tooltip to be hovered, following https://www.w3.org/TR/WCAG21/#content-on-hover-or-focus\n\tif (!TOOLTIP?.isConnected) document.body.append(TOOLTIP); // Ensure connected\n\tlet anchor = target?.closest?.<Element>(\"[data-tooltip]\") || null;\n\n\t// No need to update\n\tif (anchor === ANCHOR) return;\n\n\tconst text = (anchor && attr(anchor, \"data-tooltip\")) || \"\";\n\tconst position =\n\t\t(anchor && attr(anchor, \"data-tooltip-position\")) ||\n\t\twindow\n\t\t\t.getComputedStyle(anchor || document.body)\n\t\t\t.getPropertyValue(\"--mtds-tooltip-position\")\n\t\t\t?.trim() ||\n\t\t\"top\"; // Position can both be set by attribute or CSS custom property\n\n\tconst isHidden =\n\t\t!text || text === \"false\" || text === \"true\" || position === \"none\";\n\n\tif (isHidden) anchor = null; // Do not show tooltip if boolish value\n\tif (anchor) TOOLTIP.textContent = text; // Only update content if new anchor\n\n\tanchorPosition(TOOLTIP, false); // Reset anchor position\n\n\tANCHOR = anchor; // Store new anchor - might be null if no new anchor\n\tTOOLTIP.hidePopover(); // Hide tooltip so it can be placed on top-layer on next show\n\tTOOLTIP.togglePopover(!!anchor);\n\tanchorPosition(TOOLTIP, anchor || false, {\n\t\tstrategy: \"fixed\",\n\t\tplacement: position as Placement,\n\t\tmiddleware: [flip(), shift({ padding: 10 })],\n\t});\n}\n\nfunction handleTipLabels() {\n\tdocument.querySelectorAll(\"[data-tooltip]\").forEach((el) => {\n\t\tconst empty = !el?.textContent?.trim();\n\t\tconst text = attr(el, \"data-tooltip\");\n\t\tattr(el, `aria-${empty ? \"label\" : \"description\"}`, text);\n\t});\n}\n\nonLoaded(() => [\n\ton(document, \"blur,focus,mouseout,mouseover\", handleTipToggle, QUICK_EVENT),\n\ton(window, \"keydown\", handleTipToggle, QUICK_EVENT),\n\ton(window, \"blur\", handleTipToggle, QUICK_EVENT),\n\tonMutation(handleTipLabels, \"data-tooltip\"),\n]);\n"],"names":[],"mappings":";;;AAaA,MAAM,MAAM;AACZ,MAAM,iBAAiB;AACvB,MAAM,aAAa;AACnB,MAAM,UAAU,cACb,SAAS,eAAe,UAAU,KACnC,IAAI,OAAO;AAAA,EACV,OAAO,OAAO;AAAA,EACd,IAAI;AAAA,EACJ,SAAS;AACV,CAAC,IACA;AAEH,IAAI,SAAyB;AAC7B,IAAI,YAAY,OAAO;AACvB,IAAI,WAAmD;AAEvD,SAAS,gBAAgB,EAAE,QAAQ,MAAM,OAAiC;AACzE,MAAI,SAAS,aAAa,QAAQ,IAAK;AACvC,QAAM,OAAO,YAAY,iBAAiB,KAAK,IAAA;AAC/C,eAAa,QAAQ;AACrB,aAAW;AAAA,IACV;AAAA,IACA,KAAK,IAAI,MAAM,CAAC;AAAA,IAChB,QAAQ,MAAM,OAAO;AAAA,EAAA;AAEvB;AAGA,SAAS,oBAAoB,QAAwB;AACpD,cAAY,KAAK,IAAA;AAGjB,MAAI,CAAC,WAAW,WAAW,QAAS;AACpC,MAAI,CAAC,SAAS,YAAa,UAAS,KAAK,OAAO,OAAO;AACvD,MAAI,SAAS,QAAQ,UAAmB,gBAAgB,KAAK;AAG7D,MAAI,WAAW,OAAQ;AAEvB,QAAM,OAAQ,UAAU,KAAK,QAAQ,cAAc,KAAM;AACzD,QAAM,WACJ,UAAU,KAAK,QAAQ,uBAAuB,KAC/C,OACE,iBAAiB,UAAU,SAAS,IAAI,EACxC,iBAAiB,yBAAyB,GACzC,UACH;AAED,QAAM,WACL,CAAC,QAAQ,SAAS,WAAW,SAAS,UAAU,aAAa;AAE9D,MAAI,SAAU,UAAS;AACvB,MAAI,gBAAgB,cAAc;AAElC,iBAAe,SAAS,KAAK;AAE7B,WAAS;AACT,UAAQ,YAAA;AACR,UAAQ,cAAc,CAAC,CAAC,MAAM;AAC9B,iBAAe,SAAS,UAAU,OAAO;AAAA,IACxC,UAAU;AAAA,IACV,WAAW;AAAA,IACX,YAAY,CAAC,KAAA,GAAQ,MAAM,EAAE,SAAS,IAAI,CAAC;AAAA,EAAA,CAC3C;AACF;AAEA,SAAS,kBAAkB;AAC1B,WAAS,iBAAiB,gBAAgB,EAAE,QAAQ,CAAC,OAAO;AAC3D,UAAM,QAAQ,CAAC,IAAI,aAAa,KAAA;AAChC,UAAM,OAAO,KAAK,IAAI,cAAc;AACpC,SAAK,IAAI,QAAQ,QAAQ,UAAU,aAAa,IAAI,IAAI;AAAA,EACzD,CAAC;AACF;AAEA,SAAS,MAAM;AAAA,EACd,GAAG,UAAU,iCAAiC,iBAAiB,WAAW;AAAA,EAC1E,GAAG,QAAQ,WAAW,iBAAiB,WAAW;AAAA,EAClD,GAAG,QAAQ,QAAQ,iBAAiB,WAAW;AAAA,EAC/C,WAAW,iBAAiB,cAAc;AAC3C,CAAC;"}