@mattilsynet/design 2.2.24 → 2.2.26

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 (198) 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 +165 -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 +9 -14
  16. package/mtds/atlas/atlas-element.js +98 -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 +73 -0
  20. package/mtds/atlas/atlas-marker.js.map +1 -0
  21. package/mtds/atlas/atlas-matgeo.d.ts +37 -0
  22. package/mtds/atlas/atlas-matgeo.js +93 -0
  23. package/mtds/atlas/atlas-matgeo.js.map +1 -0
  24. package/mtds/atlas/atlas-wms.d.ts +17 -0
  25. package/mtds/atlas/atlas-wms.js +39 -0
  26. package/mtds/atlas/atlas-wms.js.map +1 -0
  27. package/mtds/atlas/atlas.css.js +80 -94
  28. package/mtds/atlas/atlas.css.js.map +1 -1
  29. package/mtds/atlas/atlas.d.ts +51 -0
  30. package/mtds/atlas/atlas.js +38 -0
  31. package/mtds/atlas/atlas.js.map +1 -0
  32. package/mtds/atlas/atlas.stories.d.ts +6 -1
  33. package/mtds/atlas/cluster.js +1576 -697
  34. package/mtds/atlas/cluster.js.map +1 -1
  35. package/mtds/atlas.iife.js +84 -98
  36. package/mtds/atlas.js +10 -4
  37. package/mtds/atlas.js.map +1 -1
  38. package/mtds/avatar/avatar.js +8 -8
  39. package/mtds/avatar/avatar.js.map +1 -1
  40. package/mtds/badge/badge.d.ts +2 -2
  41. package/mtds/badge/badge.js +7 -7
  42. package/mtds/badge/badge.js.map +1 -1
  43. package/mtds/breadcrumbs/breadcrumbs-observer.js +10 -9
  44. package/mtds/breadcrumbs/breadcrumbs-observer.js.map +1 -1
  45. package/mtds/breadcrumbs/breadcrumbs.js +14 -13
  46. package/mtds/breadcrumbs/breadcrumbs.js.map +1 -1
  47. package/mtds/button/button.js +16 -14
  48. package/mtds/button/button.js.map +1 -1
  49. package/mtds/card/card.js +14 -12
  50. package/mtds/card/card.js.map +1 -1
  51. package/mtds/chart/chart-axis.js +27 -15
  52. package/mtds/chart/chart-axis.js.map +1 -1
  53. package/mtds/chart/chart-bars.js +15 -13
  54. package/mtds/chart/chart-bars.js.map +1 -1
  55. package/mtds/chart/chart-element.d.ts +5 -0
  56. package/mtds/chart/chart-element.js +83 -48
  57. package/mtds/chart/chart-element.js.map +1 -1
  58. package/mtds/chart/chart-lines.js +54 -32
  59. package/mtds/chart/chart-lines.js.map +1 -1
  60. package/mtds/chart/chart-pies.js +34 -14
  61. package/mtds/chart/chart-pies.js.map +1 -1
  62. package/mtds/chart/chart.css.js +2 -2
  63. package/mtds/chart/chart.css.js.map +1 -1
  64. package/mtds/chart/chart.d.ts +3 -4
  65. package/mtds/chart/chart.js +12 -12
  66. package/mtds/chart/chart.js.map +1 -1
  67. package/mtds/chip/chip.js +8 -8
  68. package/mtds/chip/chip.js.map +1 -1
  69. package/mtds/details/details.d.ts +3 -3
  70. package/mtds/details/details.js +14 -12
  71. package/mtds/details/details.js.map +1 -1
  72. package/mtds/dialog/dialog-observer.js +35 -22
  73. package/mtds/dialog/dialog-observer.js.map +1 -1
  74. package/mtds/dialog/dialog.d.ts +2 -2
  75. package/mtds/dialog/dialog.js +12 -12
  76. package/mtds/dialog/dialog.js.map +1 -1
  77. package/mtds/divider/divider.d.ts +2 -2
  78. package/mtds/divider/divider.js +10 -10
  79. package/mtds/divider/divider.js.map +1 -1
  80. package/mtds/errorsummary/errorsummary-observer.js +11 -8
  81. package/mtds/errorsummary/errorsummary-observer.js.map +1 -1
  82. package/mtds/errorsummary/errorsummary.d.ts +1 -1
  83. package/mtds/errorsummary/errorsummary.js +11 -11
  84. package/mtds/errorsummary/errorsummary.js.map +1 -1
  85. package/mtds/external/@turf/boolean-point-in-polygon/dist/esm/index.js +35 -0
  86. package/mtds/external/@turf/boolean-point-in-polygon/dist/esm/index.js.map +1 -0
  87. package/mtds/external/@turf/helpers/dist/esm/index.js +40 -0
  88. package/mtds/external/@turf/helpers/dist/esm/index.js.map +1 -0
  89. package/mtds/external/@turf/invariant/dist/esm/index.js +28 -0
  90. package/mtds/external/@turf/invariant/dist/esm/index.js.map +1 -0
  91. package/mtds/external/leaflet/dist/leaflet-src.js +6006 -3098
  92. package/mtds/external/leaflet/dist/leaflet-src.js.map +1 -1
  93. package/mtds/external/leaflet/dist/leaflet.css.js +2 -2
  94. package/mtds/external/leaflet/dist/leaflet.css.js.map +1 -1
  95. package/mtds/external/point-in-polygon-hao/dist/esm/index.js +56 -0
  96. package/mtds/external/point-in-polygon-hao/dist/esm/index.js.map +1 -0
  97. package/mtds/external/robust-predicates/esm/orient2d.js +168 -0
  98. package/mtds/external/robust-predicates/esm/orient2d.js.map +1 -0
  99. package/mtds/external/robust-predicates/esm/util.js +91 -0
  100. package/mtds/external/robust-predicates/esm/util.js.map +1 -0
  101. package/mtds/field/field-observer.js +114 -62
  102. package/mtds/field/field-observer.js.map +1 -1
  103. package/mtds/field/field.d.ts +6 -6
  104. package/mtds/field/field.js +166 -133
  105. package/mtds/field/field.js.map +1 -1
  106. package/mtds/field/field.stories.d.ts +2 -0
  107. package/mtds/fieldset/fieldset-observer.js +24 -14
  108. package/mtds/fieldset/fieldset-observer.js.map +1 -1
  109. package/mtds/fieldset/fieldset.d.ts +1 -1
  110. package/mtds/fieldset/fieldset.js +11 -11
  111. package/mtds/fieldset/fieldset.js.map +1 -1
  112. package/mtds/fileupload/fileupload.js +9 -8
  113. package/mtds/fileupload/fileupload.js.map +1 -1
  114. package/mtds/helptext/helptext.d.ts +1 -1
  115. package/mtds/helptext/helptext.js +15 -15
  116. package/mtds/helptext/helptext.js.map +1 -1
  117. package/mtds/index.iife.js +9 -9
  118. package/mtds/index.js +26 -24
  119. package/mtds/input/input.d.ts +3 -3
  120. package/mtds/input/input.js +22 -20
  121. package/mtds/input/input.js.map +1 -1
  122. package/mtds/law/law-helper.d.ts +6 -2
  123. package/mtds/law/law-helper.js +145 -63
  124. package/mtds/law/law-helper.js.map +1 -1
  125. package/mtds/law/law.d.ts +6 -2
  126. package/mtds/law/law.js +6 -6
  127. package/mtds/law/law.js.map +1 -1
  128. package/mtds/law/law.stories.d.ts +1 -0
  129. package/mtds/layout/layout.js +13 -10
  130. package/mtds/layout/layout.js.map +1 -1
  131. package/mtds/link/link.js +8 -7
  132. package/mtds/link/link.js.map +1 -1
  133. package/mtds/logo/logo-observer.js +18 -12
  134. package/mtds/logo/logo-observer.js.map +1 -1
  135. package/mtds/logo/logo.js +8 -8
  136. package/mtds/logo/logo.js.map +1 -1
  137. package/mtds/package.json.js +2 -2
  138. package/mtds/pagination/pagination-helper.js +17 -11
  139. package/mtds/pagination/pagination-helper.js.map +1 -1
  140. package/mtds/pagination/pagination.d.ts +1 -1
  141. package/mtds/pagination/pagination.js +30 -30
  142. package/mtds/pagination/pagination.js.map +1 -1
  143. package/mtds/popover/popover-observer.js +47 -28
  144. package/mtds/popover/popover-observer.js.map +1 -1
  145. package/mtds/popover/popover.js +13 -11
  146. package/mtds/popover/popover.js.map +1 -1
  147. package/mtds/progress/progress.d.ts +1 -1
  148. package/mtds/progress/progress.js +8 -8
  149. package/mtds/progress/progress.js.map +1 -1
  150. package/mtds/react-atlas.d.ts +1 -0
  151. package/mtds/react-atlas.js +15 -0
  152. package/mtds/react-atlas.js.map +1 -0
  153. package/mtds/react-types.d.ts +3 -0
  154. package/mtds/react.js +79 -79
  155. package/mtds/skeleton/skeleton.js +8 -8
  156. package/mtds/skeleton/skeleton.js.map +1 -1
  157. package/mtds/spinner/spinner.d.ts +2 -2
  158. package/mtds/spinner/spinner.js +8 -8
  159. package/mtds/spinner/spinner.js.map +1 -1
  160. package/mtds/steps/steps.d.ts +2 -2
  161. package/mtds/steps/steps.js +7 -7
  162. package/mtds/steps/steps.js.map +1 -1
  163. package/mtds/styles.css +4586 -1
  164. package/mtds/styles.module.css.js +167 -112
  165. package/mtds/styles.module.css.js.map +1 -1
  166. package/mtds/table/table-observer.js +22 -19
  167. package/mtds/table/table-observer.js.map +1 -1
  168. package/mtds/table/table.d.ts +4 -4
  169. package/mtds/table/table.js +18 -16
  170. package/mtds/table/table.js.map +1 -1
  171. package/mtds/tabs/tabs.d.ts +4 -4
  172. package/mtds/tabs/tabs.js +25 -21
  173. package/mtds/tabs/tabs.js.map +1 -1
  174. package/mtds/tag/tag.js +8 -8
  175. package/mtds/tag/tag.js.map +1 -1
  176. package/mtds/tailwind.css +24 -6
  177. package/mtds/toast/toast-helper.js +35 -20
  178. package/mtds/toast/toast-helper.js.map +1 -1
  179. package/mtds/toast/toast-observer.js +30 -15
  180. package/mtds/toast/toast-observer.js.map +1 -1
  181. package/mtds/toast/toast.js +45 -37
  182. package/mtds/toast/toast.js.map +1 -1
  183. package/mtds/togglegroup/togglegroup-observer.js +15 -10
  184. package/mtds/togglegroup/togglegroup-observer.js.map +1 -1
  185. package/mtds/togglegroup/togglegroup.d.ts +3 -3
  186. package/mtds/togglegroup/togglegroup.js +20 -18
  187. package/mtds/togglegroup/togglegroup.js.map +1 -1
  188. package/mtds/tooltip/tooltip-observer.js +48 -32
  189. package/mtds/tooltip/tooltip-observer.js.map +1 -1
  190. package/mtds/typography/typography.js +28 -19
  191. package/mtds/typography/typography.js.map +1 -1
  192. package/mtds/utils.d.ts +12 -3
  193. package/mtds/utils.js +133 -81
  194. package/mtds/utils.js.map +1 -1
  195. package/mtds/validation/validation.d.ts +1 -1
  196. package/mtds/validation/validation.js +12 -12
  197. package/mtds/validation/validation.js.map +1 -1
  198. package/package.json +16 -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;"}