@mattilsynet/design 2.11.0-canary → 3.0.1

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 (270) hide show
  1. package/mtds/analytics/analytics.d.ts +1 -1
  2. package/mtds/analytics/analytics.js +72 -67
  3. package/mtds/analytics/analytics.js.map +1 -1
  4. package/mtds/app/app-observer.js +27 -26
  5. package/mtds/app/app-observer.js.map +1 -1
  6. package/mtds/app/app-toggle.js +10 -26
  7. package/mtds/app/app-toggle.js.map +1 -1
  8. package/mtds/app/app-toggle2.js +26 -10
  9. package/mtds/app/app-toggle2.js.map +1 -1
  10. package/mtds/app/app.d.ts +5 -5
  11. package/mtds/app/app.js +39 -29
  12. package/mtds/app/app.js.map +1 -1
  13. package/mtds/app/app.stories.d.ts +1 -0
  14. package/mtds/atlas/atlas-element.d.ts +50 -0
  15. package/mtds/atlas/atlas-element.js +103 -0
  16. package/mtds/atlas/atlas-element.js.map +1 -0
  17. package/mtds/atlas/atlas-marker.d.ts +20 -0
  18. package/mtds/atlas/atlas-marker.js +53 -0
  19. package/mtds/atlas/atlas-marker.js.map +1 -0
  20. package/mtds/atlas/atlas-matgeo.d.ts +32 -0
  21. package/mtds/atlas/atlas-matgeo.js +63 -0
  22. package/mtds/atlas/atlas-matgeo.js.map +1 -0
  23. package/mtds/atlas/atlas-wms.d.ts +17 -0
  24. package/mtds/atlas/atlas-wms.js +29 -0
  25. package/mtds/atlas/atlas-wms.js.map +1 -0
  26. package/mtds/atlas/atlas.css.js +138 -0
  27. package/mtds/atlas/atlas.css.js.map +1 -0
  28. package/mtds/atlas/atlas.d.ts +51 -0
  29. package/mtds/atlas/atlas.js +38 -0
  30. package/mtds/atlas/atlas.js.map +1 -0
  31. package/mtds/atlas/atlas.stories.d.ts +26 -0
  32. package/mtds/atlas/cluster.js +1149 -0
  33. package/mtds/atlas/cluster.js.map +1 -0
  34. package/mtds/atlas.d.ts +1 -0
  35. package/mtds/atlas.iife.js +737 -0
  36. package/mtds/atlas.js +14 -0
  37. package/mtds/atlas.js.map +1 -0
  38. package/mtds/badge/badge.d.ts +2 -2
  39. package/mtds/breadcrumbs/breadcrumbs.d.ts +9 -8
  40. package/mtds/breadcrumbs/breadcrumbs.js +8 -10
  41. package/mtds/breadcrumbs/breadcrumbs.js.map +1 -1
  42. package/mtds/button/button.d.ts +7 -0
  43. package/mtds/button/button.js +9 -8
  44. package/mtds/button/button.js.map +1 -1
  45. package/mtds/button/button.stories.d.ts +1 -0
  46. package/mtds/card/card.stories.d.ts +1 -0
  47. package/mtds/chart/chart-element.d.ts +6 -2
  48. package/mtds/chart/chart-element.js +45 -45
  49. package/mtds/chart/chart-element.js.map +1 -1
  50. package/mtds/chart/chart.css.js +60 -260
  51. package/mtds/chart/chart.css.js.map +1 -1
  52. package/mtds/chart/chart.d.ts +7 -13
  53. package/mtds/chart/chart.js +46 -11
  54. package/mtds/chart/chart.js.map +1 -1
  55. package/mtds/chart/chart.stories.d.ts +2 -0
  56. package/mtds/chip/chip.stories.d.ts +1 -0
  57. package/mtds/deprecations.js +135 -0
  58. package/mtds/deprecations.js.map +1 -0
  59. package/mtds/details/details.d.ts +3 -3
  60. package/mtds/details/details.js +18 -11
  61. package/mtds/details/details.js.map +1 -1
  62. package/mtds/dialog/dialog.d.ts +22 -2
  63. package/mtds/dialog/dialog.js +9 -8
  64. package/mtds/dialog/dialog.js.map +1 -1
  65. package/mtds/dialog/dialog.stories.d.ts +1 -0
  66. package/mtds/divider/divider.d.ts +2 -2
  67. package/mtds/errorsummary/errorsummary.d.ts +4 -2
  68. package/mtds/errorsummary/errorsummary.js +14 -18
  69. package/mtds/errorsummary/errorsummary.js.map +1 -1
  70. package/mtds/external/@turf/boolean-point-in-polygon/dist/esm/index.js +27 -0
  71. package/mtds/external/@turf/boolean-point-in-polygon/dist/esm/index.js.map +1 -0
  72. package/mtds/external/@turf/helpers/dist/esm/index.js +27 -0
  73. package/mtds/external/@turf/helpers/dist/esm/index.js.map +1 -0
  74. package/mtds/external/@turf/invariant/dist/esm/index.js +21 -0
  75. package/mtds/external/@turf/invariant/dist/esm/index.js.map +1 -0
  76. package/mtds/external/@u-elements/u-combobox/dist/u-combobox.js +284 -0
  77. package/mtds/external/@u-elements/u-combobox/dist/u-combobox.js.map +1 -0
  78. package/mtds/external/@u-elements/u-tabs/dist/u-tabs.js +201 -0
  79. package/mtds/external/@u-elements/u-tabs/dist/u-tabs.js.map +1 -0
  80. package/mtds/external/leaflet/dist/leaflet-src.js +6265 -0
  81. package/mtds/external/leaflet/dist/leaflet-src.js.map +1 -0
  82. package/mtds/external/leaflet/dist/leaflet.css.js +607 -0
  83. package/mtds/external/leaflet/dist/leaflet.css.js.map +1 -0
  84. package/mtds/external/point-in-polygon-hao/dist/esm/index.js +26 -0
  85. package/mtds/external/point-in-polygon-hao/dist/esm/index.js.map +1 -0
  86. package/mtds/external/robust-predicates/esm/orient2d.js +24 -0
  87. package/mtds/external/robust-predicates/esm/orient2d.js.map +1 -0
  88. package/mtds/external/robust-predicates/esm/util.js +31 -0
  89. package/mtds/external/robust-predicates/esm/util.js.map +1 -0
  90. package/mtds/field/field.d.ts +45 -15
  91. package/mtds/field/field.js +167 -124
  92. package/mtds/field/field.js.map +1 -1
  93. package/mtds/field/field.stories.d.ts +11 -9
  94. package/mtds/fieldset/fieldset.d.ts +7 -1
  95. package/mtds/fieldset/fieldset.js +23 -12
  96. package/mtds/fieldset/fieldset.js.map +1 -1
  97. package/mtds/fieldset/fieldset.stories.d.ts +2 -0
  98. package/mtds/fileupload/fileupload.d.ts +6 -0
  99. package/mtds/fileupload/fileupload.js +13 -0
  100. package/mtds/fileupload/fileupload.js.map +1 -0
  101. package/mtds/{lawpicker/lawpicker.stories.d.ts → fileupload/fileupload.stories.d.ts} +2 -0
  102. package/mtds/helptext/helptext.d.ts +1 -1
  103. package/mtds/icons/cosmetics.svg +1 -1
  104. package/mtds/icons/megaphone.svg +3 -0
  105. package/mtds/illustrations/byggning-1-gronn.svg +1 -0
  106. package/mtds/illustrations/byggning-1-mattilsynet.svg +1 -0
  107. package/mtds/illustrations/byggning-2-gronn.svg +1 -0
  108. package/mtds/illustrations/byggning-3-gronn.svg +1 -0
  109. package/mtds/illustrations/byggning-4-gronn.svg +1 -0
  110. package/mtds/illustrations/byggning-5-gronn.svg +1 -0
  111. package/mtds/illustrations/byggning-6-blaa.svg +1 -0
  112. package/mtds/illustrations/byggning-7-blaa.svg +1 -0
  113. package/mtds/illustrations/byggning-8-blaa.svg +1 -0
  114. package/mtds/illustrations/byggningsrekke-1-gronn.svg +1 -0
  115. package/mtds/illustrations/byggningsrekke-1-mattilsynet.svg +1 -0
  116. package/mtds/illustrations/byggningsrekke-2-gronn.svg +1 -0
  117. package/mtds/illustrations/byggningsrekke-3-blaa.svg +1 -0
  118. package/mtds/illustrations/car-logo.svg +1 -0
  119. package/mtds/illustrations/car.svg +1 -0
  120. package/mtds/illustrations/cheese.svg +1 -0
  121. package/mtds/illustrations/cloud-1.svg +1 -0
  122. package/mtds/illustrations/cloud-2.svg +1 -0
  123. package/mtds/illustrations/cloud-sun.svg +1 -0
  124. package/mtds/illustrations/cloud-sunshine.svg +1 -0
  125. package/mtds/illustrations/debatt.svg +1 -0
  126. package/mtds/illustrations/egg-boat.svg +1 -0
  127. package/mtds/illustrations/egg-half.svg +1 -0
  128. package/mtds/illustrations/egg.svg +1 -0
  129. package/mtds/illustrations/flagg-aaland.svg +1 -0
  130. package/mtds/illustrations/flagg-danmark.svg +1 -0
  131. package/mtds/illustrations/flagg-faeroyene.svg +1 -0
  132. package/mtds/illustrations/flagg-finland.svg +1 -0
  133. package/mtds/illustrations/flagg-gronland.svg +1 -0
  134. package/mtds/illustrations/flagg-island.svg +1 -0
  135. package/mtds/illustrations/flagg-norge.svg +1 -0
  136. package/mtds/illustrations/flagg-sapmi.svg +1 -0
  137. package/mtds/illustrations/flagg-sverige.svg +1 -0
  138. package/mtds/illustrations/foodtruck-logo.svg +1 -0
  139. package/mtds/illustrations/foodtruck.svg +1 -0
  140. package/mtds/illustrations/forstorrelsesglass.svg +1 -0
  141. package/mtds/illustrations/hengelas.svg +1 -0
  142. package/mtds/illustrations/house.svg +1 -0
  143. package/mtds/illustrations/index.json +242 -10
  144. package/mtds/illustrations/kompass.svg +1 -0
  145. package/mtds/illustrations/paragraph.svg +1 -0
  146. package/mtds/illustrations/person-child-puppy.svg +1 -0
  147. package/mtds/illustrations/person-family-house.svg +1 -0
  148. package/mtds/illustrations/person-family.svg +1 -0
  149. package/mtds/illustrations/person-paragraph.svg +1 -0
  150. package/mtds/illustrations/plane-solo.svg +1 -0
  151. package/mtds/illustrations/skinke.svg +1 -0
  152. package/mtds/illustrations/sunshine.svg +1 -0
  153. package/mtds/illustrations/system-stotte.svg +1 -0
  154. package/mtds/illustrations/system.svg +1 -0
  155. package/mtds/illustrations/tractor.svg +1 -0
  156. package/mtds/illustrations/tre-1.svg +1 -0
  157. package/mtds/illustrations/tre-2.svg +1 -0
  158. package/mtds/illustrations/tre-3.svg +1 -0
  159. package/mtds/illustrations/wind.svg +1 -0
  160. package/mtds/index.d.ts +8 -3
  161. package/mtds/index.iife.js +235 -283
  162. package/mtds/index.js +42 -28
  163. package/mtds/index.js.map +1 -1
  164. package/mtds/input/input.d.ts +3 -3
  165. package/mtds/input/input.js +40 -18
  166. package/mtds/input/input.js.map +1 -1
  167. package/mtds/law/law-helper.d.ts +42 -0
  168. package/mtds/law/law-helper.js +94 -0
  169. package/mtds/law/law-helper.js.map +1 -0
  170. package/mtds/law/law.d.ts +6 -0
  171. package/mtds/law/law.js +10 -0
  172. package/mtds/law/law.js.map +1 -0
  173. package/mtds/law/law.stories.d.ts +17 -0
  174. package/mtds/law/vinforskriften-new.d.ts +1 -0
  175. package/mtds/law/vinforskriften-old.d.ts +1 -0
  176. package/mtds/logo/logo-observer.js +13 -14
  177. package/mtds/logo/logo-observer.js.map +1 -1
  178. package/mtds/package.json.js +2 -2
  179. package/mtds/pagination/pagination.d.ts +19 -2
  180. package/mtds/pagination/pagination.js +19 -21
  181. package/mtds/pagination/pagination.js.map +1 -1
  182. package/mtds/popover/popover.d.ts +4 -0
  183. package/mtds/popover/popover.js +9 -7
  184. package/mtds/popover/popover.js.map +1 -1
  185. package/mtds/print/print.css.js +155 -0
  186. package/mtds/print/print.css.js.map +1 -0
  187. package/mtds/print/print.stories.d.ts +15 -0
  188. package/mtds/progress/progress.d.ts +1 -1
  189. package/mtds/react-atlas.d.ts +1 -0
  190. package/mtds/react-atlas.js +16 -0
  191. package/mtds/react-atlas.js.map +1 -0
  192. package/mtds/react-types.d.ts +9 -1
  193. package/mtds/react.d.ts +2 -0
  194. package/mtds/react.js +57 -52
  195. package/mtds/react.js.map +1 -1
  196. package/mtds/spinner/spinner.d.ts +2 -2
  197. package/mtds/steps/steps.d.ts +2 -2
  198. package/mtds/styles.css +1 -1
  199. package/mtds/styles.json +44 -41
  200. package/mtds/styles.module.css.js +96 -92
  201. package/mtds/styles.module.css.js.map +1 -1
  202. package/mtds/table/table-observer.js +18 -20
  203. package/mtds/table/table-observer.js.map +1 -1
  204. package/mtds/table/table.d.ts +11 -4
  205. package/mtds/table/table.js +41 -14
  206. package/mtds/table/table.js.map +1 -1
  207. package/mtds/table/table.stories.d.ts +1 -0
  208. package/mtds/tabs/tabs.d.ts +10 -9
  209. package/mtds/tabs/tabs.js +8 -8
  210. package/mtds/tabs/tabs.js.map +1 -1
  211. package/mtds/tabs/tabs.stories.d.ts +1 -0
  212. package/mtds/tailwind.css +0 -2
  213. package/mtds/toast/toast-helper.js +13 -13
  214. package/mtds/toast/toast-helper.js.map +1 -1
  215. package/mtds/toast/toast-observer.js +10 -9
  216. package/mtds/toast/toast-observer.js.map +1 -1
  217. package/mtds/toast/toast.js +32 -28
  218. package/mtds/toast/toast.js.map +1 -1
  219. package/mtds/togglegroup/togglegroup.d.ts +8 -9
  220. package/mtds/togglegroup/togglegroup.js +26 -15
  221. package/mtds/togglegroup/togglegroup.js.map +1 -1
  222. package/mtds/tooltip/tooltip-element.js +8 -0
  223. package/mtds/tooltip/tooltip-element.js.map +1 -0
  224. package/mtds/utils.d.ts +30 -30
  225. package/mtds/utils.js +59 -96
  226. package/mtds/utils.js.map +1 -1
  227. package/mtds/validation/validation-observer.js +36 -0
  228. package/mtds/validation/validation-observer.js.map +1 -0
  229. package/mtds/validation/validation.d.ts +1 -1
  230. package/mtds/validation/validation.js +6 -5
  231. package/mtds/validation/validation.js.map +1 -1
  232. package/package.json +42 -37
  233. package/mtds/breadcrumbs/breadcrumbs-observer.js +0 -17
  234. package/mtds/breadcrumbs/breadcrumbs-observer.js.map +0 -1
  235. package/mtds/dialog/dialog-observer.js +0 -32
  236. package/mtds/dialog/dialog-observer.js.map +0 -1
  237. package/mtds/errorsummary/errorsummary-observer.js +0 -11
  238. package/mtds/errorsummary/errorsummary-observer.js.map +0 -1
  239. package/mtds/field/field-observer.d.ts +0 -1
  240. package/mtds/field/field-observer.js +0 -73
  241. package/mtds/field/field-observer.js.map +0 -1
  242. package/mtds/fieldset/fieldset-observer.d.ts +0 -1
  243. package/mtds/fieldset/fieldset-observer.js +0 -22
  244. package/mtds/fieldset/fieldset-observer.js.map +0 -1
  245. package/mtds/lawpicker/lawpicker-element.d.ts +0 -18
  246. package/mtds/map/map-element.d.ts +0 -47
  247. package/mtds/map/map-element.js +0 -76
  248. package/mtds/map/map-element.js.map +0 -1
  249. package/mtds/map/map.css.js +0 -46
  250. package/mtds/map/map.css.js.map +0 -1
  251. package/mtds/map/map.stories.d.ts +0 -10
  252. package/mtds/map.d.ts +0 -1
  253. package/mtds/map.iife.js +0 -722
  254. package/mtds/map.js +0 -8
  255. package/mtds/map.js.map +0 -1
  256. package/mtds/pagination/pagination-helper.d.ts +0 -13
  257. package/mtds/pagination/pagination-helper.js +0 -16
  258. package/mtds/pagination/pagination-helper.js.map +0 -1
  259. package/mtds/popover/popover-observer.d.ts +0 -1
  260. package/mtds/popover/popover-observer.js +0 -34
  261. package/mtds/popover/popover-observer.js.map +0 -1
  262. package/mtds/togglegroup/togglegroup-observer.d.ts +0 -1
  263. package/mtds/togglegroup/togglegroup-observer.js +0 -13
  264. package/mtds/togglegroup/togglegroup-observer.js.map +0 -1
  265. package/mtds/tooltip/tooltip-observer.d.ts +0 -1
  266. package/mtds/tooltip/tooltip-observer.js +0 -35
  267. package/mtds/tooltip/tooltip-observer.js.map +0 -1
  268. /package/mtds/{breadcrumbs/breadcrumbs-observer.d.ts → deprecations.d.ts} +0 -0
  269. /package/mtds/{dialog/dialog-observer.d.ts → tooltip/tooltip-element.d.ts} +0 -0
  270. /package/mtds/{errorsummary/errorsummary-observer.d.ts → validation/validation-observer.d.ts} +0 -0
@@ -15,7 +15,7 @@ export type AnalyticsActions = {
15
15
  matomoId: number | string;
16
16
  matomoTagManagerId?: never;
17
17
  } | {
18
- matomoId?: never;
18
+ matomoId?: number | string;
19
19
  matomoTagManagerId: string;
20
20
  });
21
21
  pageview: {
@@ -1,120 +1,125 @@
1
- import m from "../styles.module.css.js";
2
- import { onLoaded as w, IS_BROWSER as g, tag as b, on as y, QUICK_EVENT as _, attr as i } from "../utils.js";
3
- const k = `.${m.breadcrumbs.split(" ")[0]}`, S = `.${m.card.split(" ")[0]}`, u = `.${m.chip.split(" ")[0]}`, v = `.${m.helptext.split(" ")[0]}`, T = `.${m.pagination.split(" ")[0]}`, x = 'summary,u-summary,a,button,[role="tab"],[role="button"]', C = "click,toggle,submit,change", p = "mattilsynet.matomo.cloud", s = "mtds-analytics-banner", E = "https://www.mattilsynet.no/om-mattilsynet/personvernerklaering/informasjonskapsler";
4
- function q(t, a = {}) {
5
- if (g) {
6
- if (window._paq || (window._paq = [], window._paq.push(["HeatmapSessionRecording::disable"]), window._paq.push(["enableLinkTracking"]), window._paq.push(["setTrackerUrl", `https://${p}/matomo.php`])), window._mtm || (window._mtm = window._mtm || [], window._mtm.push({ "mtm.startTime": Date.now(), event: "mtm.Start" })), t === "init") {
1
+ import d from "../styles.module.css.js";
2
+ import { onHotReload as w, isBrowser as g, tag as b, on as y, QUICK_EVENT as _, attr as s } from "../utils.js";
3
+ const S = `[data-command="toggle-app-expanded"],.${d.app.split(" ")[0]} > [command="show-modal"]`, k = `.${d.breadcrumbs.split(" ")[0]}`, T = `.${d.card.split(" ")[0]}`, u = `.${d.chip.split(" ")[0]}`, v = `.${d.helptext.split(" ")[0]}`, C = `.${d.pagination.split(" ")[0]}`, x = 'summary,u-summary,a,button,[role="tab"],[role="button"]', p = "mattilsynet.matomo.cloud", $ = ["setCustomUrl", "setDocumentTitle", "setReferrerUrl"], i = "mtds-analytics-banner", q = "https://www.mattilsynet.no/om-mattilsynet/personvernerklaering/informasjonskapsler";
4
+ function A(o, a = {}) {
5
+ if (g()) {
6
+ if (window._paq || (window._paq = [], window._paq.push(["HeatmapSessionRecording::disable"]), window._paq.push(["enableLinkTracking"]), window._paq.push(["setTrackerUrl", `https://${p}/matomo.php`])), window._mtm || (window._mtm = window._mtm || [], window._mtm.push({ "mtm.startTime": Date.now(), event: "mtm.Start" })), o === "init") {
7
7
  window._mtdsTracking = {
8
8
  enabled: window.location.hostname !== "localhost",
9
9
  ...window._mtdsTracking,
10
10
  ...a
11
11
  };
12
- const { consent: e, enabled: o, matomoId: n, matomoTagManagerId: r } = window._mtdsTracking;
13
- if (n && window._paq.push(["setSiteId", n]), o) {
14
- e !== "custom" && $();
12
+ const { consent: e, enabled: t, matomoId: n, matomoTagManagerId: r } = window._mtdsTracking;
13
+ if (n && window._paq.push(["setSiteId", n]), t) {
14
+ e !== "custom" && E();
15
15
  const l = r ? `https://cdn.matomo.cloud/${p}/container_${r}.js` : `https://cdn.matomo.cloud/${p}/matomo.js`;
16
16
  document.querySelector(`script[src="${l}"]`) || document.head.append(b("script", { async: "", src: l }));
17
17
  }
18
18
  }
19
19
  if (window._mtdsTracking?.enabled !== !1) {
20
20
  if (window._mtdsTracking?.enabled === "debug")
21
- return console.info(`analytics("${t}", `, a, ")");
22
- if (t === "pageview") {
23
- const { url: e, title: o } = a;
24
- window._paq.push(["setCustomUrl", e || location.href]), window._paq.push(["setDocumentTitle", o || document.title]), window._paq.push(["trackPageView"]);
25
- } else if (t === "event") {
26
- const { category: e, action: o, name: n, value: r } = a, l = ["trackEvent", e, o, n, r];
21
+ return console.info(`analytics ${o}:`, a);
22
+ if (o === "pageview") {
23
+ const { url: e, title: t } = a;
24
+ window._paq.push(["setCustomUrl", e || location.href]), window._paq.push(["setDocumentTitle", t || document.title]), window._paq.push(["trackPageView"]);
25
+ } else if (o === "event") {
26
+ const { category: e, action: t, name: n, value: r } = a, l = ["trackEvent", e, t, n, r];
27
27
  let c = location.href;
28
28
  window._paq.push([
29
29
  function() {
30
30
  c = this.getCurrentUrl();
31
31
  }
32
32
  ]), window._paq.push(["setCustomUrl", c.split("#")[0]]), window._paq.push(l.filter((h) => h !== void 0)), window._paq.push(["setCustomUrl", c]);
33
- } else if (t === "search") {
33
+ } else if (o === "search") {
34
34
  const {
35
35
  query: e,
36
- category: o = !1,
36
+ category: t = !1,
37
37
  results: n = !1
38
38
  } = a;
39
- window._paq.push(["trackSiteSearch", e, o, n]);
40
- } else t === "matomo" && window._paq.push(a);
39
+ window._paq.push(["trackSiteSearch", e, t, n]);
40
+ } else if (o === "matomo") {
41
+ const e = a;
42
+ $.includes(e?.[0]) && typeof e[1] != "string" && (e[1] = `${e[1] ?? ""}`), window._paq.push(e);
43
+ }
41
44
  }
42
45
  }
43
46
  }
44
- function $() {
45
- if (document.getElementById(s) || window.localStorage.getItem(s)) return;
47
+ function E() {
48
+ if (document.getElementById(i) || window.localStorage.getItem(i)) return;
46
49
  document.body.insertAdjacentHTML(
47
50
  "afterbegin",
48
- `<dialog id="${s}" data-analytics="ignore"><style>
49
- #${s}[open] { box-sizing: border-box; display: flex; align-items: center; background: #116e6b; border-radius: .5em; border: 0; box-shadow: 0 .25em .5em rgba(0,0,0,.3); color: #fff; font-size: .875em; inset: auto auto 1em 1em; max-width: calc(100vw - 2em); outline: 0; padding: .5em; position: fixed; z-index: 99999 }
50
- #${s} button { all: unset; box-sizing: border-box; cursor: pointer; display: flex; width: 1.5em; height: 1.5em; font: 300 1.5em/1.35 sans-serif; border-radius: .25em; place-content: center; transition: .2s; transition-property: background, scale }
51
- #${s} button:focus-visible { outline: 2px solid }
52
- #${s} button:hover { background: #0a4e4f }
53
- #${s} button:active { background: #054449; scale: .9 }
54
- #${s} p { margin: 0 .25em }
51
+ `<dialog id="${i}" data-analytics="ignore"><style>
52
+ #${i}[open] { box-sizing: border-box; display: flex; align-items: center; background: #116e6b; border-radius: .5em; border: 0; box-shadow: 0 .25em .5em rgba(0,0,0,.3); color: #fff; font-size: .875em; inset: auto auto 1em 1em; max-width: calc(100vw - 2em); outline: 0; padding: .5em; position: fixed; z-index: 99999 }
53
+ #${i} button { all: unset; box-sizing: border-box; cursor: pointer; display: flex; width: 1.5em; height: 1.5em; font: 300 1.5em/1.35 sans-serif; border-radius: .25em; place-content: center; transition: .2s; transition-property: background, scale }
54
+ #${i} button:focus-visible { outline: 2px solid }
55
+ #${i} button:hover { background: #0a4e4f }
56
+ #${i} button:active { background: #054449; scale: .9 }
57
+ #${i} p { margin: 0 .25em }
55
58
  </style>
56
- <p>Vi bruker <a href="${E}" target="_blank">informasjonskapsler</a> for å forbedre brukeropplevelsen.</p>
59
+ <p>Vi bruker <a href="${q}" target="_blank">informasjonskapsler</a> for å forbedre brukeropplevelsen.</p>
57
60
  <form method="dialog" data-analytics="ignore"><button type="submit" aria-label="OK">&times;</button></form>
58
61
  </dialog>`
59
62
  );
60
- const a = document.getElementById(s), e = () => window.localStorage.setItem(s, "seen");
63
+ const a = document.getElementById(i), e = () => window.localStorage.setItem(i, "seen");
61
64
  a.addEventListener("close", e, { once: !0 }), a.show();
62
65
  }
63
- function A(t) {
64
- window._mtdsTracking?.enabled && setTimeout(I, 0, t);
66
+ function I(o) {
67
+ window._mtdsTracking?.enabled && setTimeout(M, 0, o);
65
68
  }
66
- function I({ type: t, target: a }) {
67
- const e = t === "click" ? a?.closest?.(x) : a;
69
+ function M({ type: o, target: a }) {
70
+ const e = o === "click" ? a?.closest?.(x) : a;
68
71
  if (!(e instanceof Element) || e.closest('[data-analytics="ignore"]'))
69
72
  return;
70
- let o = "click", n = "Button", r = f(e) || R(e) || i(e, "data-tooltip") || "";
71
- if (t === "submit")
72
- n = "Form", o = "submit", r = r || document.title;
73
- else if (t === "toggle") {
73
+ let t = "click", n = "Button", r = f(e) || R(e) || s(e, "data-tooltip") || "";
74
+ if (o === "submit")
75
+ n = "Form", t = "submit", r = r || document.title;
76
+ else if (o === "toggle") {
74
77
  if (!e.matches("dialog:modal")) return;
75
- n = "Dialog", o = "open";
76
- } else if (t === "change") {
77
- const l = i(e, "type"), c = l === "checkbox" || l === "radio" ? e.closest("fieldset") : null;
78
- n = e.closest(u) ? "Chip" : "Form", o = "change", r = f(c || e) || d(c?.querySelector("legend")) || d(e?.labels?.[0]);
79
- } else if (i(e, "role") === "tab")
80
- n = "Tab", o = "navigate";
81
- else if (i(e, "popovertarget")) {
78
+ n = "Dialog", t = "open";
79
+ } else if (o === "change") {
80
+ const l = s(e, "type"), c = l === "checkbox" || l === "radio" ? e.closest("fieldset") : null;
81
+ n = e.closest(u) ? "Chip" : "Form", t = "change", r = f(c || e) || m(c?.querySelector("legend")) || m(e?.labels?.[0]);
82
+ } else if (s(e, "role") === "tab")
83
+ n = "Tab", t = "navigate";
84
+ else if (s(e, "popovertarget")) {
82
85
  if (!B(e)?.matches(":popover-open")) return;
83
- n = e.closest(v) ? "HelpText" : "Popover", o = "open";
86
+ n = e.closest(v) ? "HelpText" : "Popover", t = "open";
84
87
  } else if (e.nodeName.endsWith("SUMMARY")) {
85
88
  if (!e.parentElement.open) return;
86
- n = "Details", o = "open";
87
- } else if (i(e, "data-command") === "toggle-app-expanded") {
89
+ n = "Details", t = "open";
90
+ } else if (e.matches(S)) {
88
91
  const l = L(e, "--mtds-tooltip-position") === "none";
89
- n = "Sidebar", o = l ? "expand" : "minimize", r = l && i(e, "data-tooltip") || d(e);
92
+ n = "Sidebar", t = l ? "expand" : "minimize", r = l && s(e, "data-tooltip") || m(e);
90
93
  } else if (e.closest(k))
91
- n = "Breadcrumbs", o = "navigate";
94
+ n = "Breadcrumbs", t = "navigate";
95
+ else if (e.closest(C))
96
+ n = "Pagination", t = "navigate";
92
97
  else if (e.closest(T))
93
- n = "Pagintation", o = "navigate";
94
- else if (e.closest(S))
95
- n = "Card", o = e instanceof HTMLAnchorElement ? "navigate" : "click";
98
+ n = "Card", t = e instanceof HTMLAnchorElement ? "navigate" : "click";
96
99
  else if (e.closest(u))
97
- n = "Chip", o = e.hasAttribute("data-removable") ? "remove" : "click";
100
+ n = "Chip", t = e.hasAttribute("data-removable") ? "remove" : "click";
98
101
  else if (e.closest("th[aria-sort]"))
99
- n = "Table", o = "sort";
102
+ n = "Table", t = "sort";
100
103
  else if (e instanceof HTMLAnchorElement)
101
- n = "Link", o = e.protocol === "mailto:" ? "email" : "navigate", e.hasAttribute("download") ? o = "download" : e.hash && e.href.startsWith(location.href.split("#")[0]) && (o = "anchor");
104
+ n = "Link", t = e.protocol === "mailto:" ? "email" : "navigate", e.hasAttribute("download") ? t = "download" : e.hash && e.href.startsWith(location.href.split("#")[0]) && (t = "anchor");
102
105
  else if (e.hasAttribute("aria-expanded")) {
103
- if (i(e, "aria-expanded") !== "true") return;
104
- n = "Expand", o = "open";
105
- }
106
- q("event", {
107
- category: i(e, "data-analytics-category") ?? n,
108
- action: i(e, "data-analytics-action") ?? o,
109
- name: i(e, "data-analytics-name") ?? r
106
+ if (s(e, "aria-expanded") !== "true") return;
107
+ n = "Expand", t = "open";
108
+ } else e.nodeName.startsWith("MTDS-ATLAS-") && (n = "Map Marker", t = "open");
109
+ A("event", {
110
+ category: s(e, "data-analytics-category") ?? n,
111
+ action: s(e, "data-analytics-action") ?? t,
112
+ name: s(e, "data-analytics-name") ?? r
110
113
  });
111
114
  }
112
- const d = (t) => t?.textContent?.trim() || "", f = (t) => t && i(t, "aria-label") || "", B = (t) => document.getElementById(i(t, "popovertarget") || ""), L = (t, a) => window.getComputedStyle(t).getPropertyValue(a)?.trim(), R = (t) => {
113
- const a = d(t), e = d(t.querySelector("h1,h2,h3,h4,h5,h6"));
115
+ const m = (o) => o?.textContent?.trim() || "", f = (o) => o && s(o, "aria-label") || "", B = (o) => document.getElementById(s(o, "popovertarget") || ""), L = (o, a) => window.getComputedStyle(o).getPropertyValue(a)?.trim(), R = (o) => {
116
+ const a = m(o), e = m(o.querySelector("h1,h2,h3,h4,h5,h6"));
114
117
  return a.startsWith(e) && e || a.slice(0, 100).trim();
115
118
  };
116
- w(() => y(document, C, A, _));
119
+ w("analytics", () => [
120
+ y(document, "click toggle submit change", I, _)
121
+ ]);
117
122
  export {
118
- q as analytics
123
+ A as analytics
119
124
  };
120
125
  //# sourceMappingURL=analytics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.js","sources":["../../designsystem/analytics/analytics.ts"],"sourcesContent":["import styles from \"../styles.module.css\";\nimport { attr, IS_BROWSER, on, onLoaded, QUICK_EVENT, tag } from \"../utils\";\n\nconst CSS_BREADCRUMBS = `.${styles.breadcrumbs.split(\" \")[0]}`;\nconst CSS_CARD = `.${styles.card.split(\" \")[0]}`;\nconst CSS_CHIP = `.${styles.chip.split(\" \")[0]}`;\nconst CSS_HELPTEXT = `.${styles.helptext.split(\" \")[0]}`;\nconst CSS_PAGINATION = `.${styles.pagination.split(\" \")[0]}`;\nconst CLICKS = `summary,u-summary,a,button,[role=\"tab\"],[role=\"button\"]`;\nconst EVENTS = \"click,toggle,submit,change\";\nconst MATOMO = \"mattilsynet.matomo.cloud\";\nconst BANNER = \"mtds-analytics-banner\"; // Dialog to show Matomo script loading\nconst BANNER_URL =\n\t\"https://www.mattilsynet.no/om-mattilsynet/personvernerklaering/informasjonskapsler\";\n\ntype Matomo = (\n\t| string\n\t| number\n\t| boolean\n\t| Document\n\t| Element\n\t| ((this: Record<string, <T>() => T>) => void)\n)[];\ndeclare global {\n\tinterface Window {\n\t\t_paq?: Matomo[];\n\t\t_mtm?: Record<string, string | number>[];\n\t\t_mtdsTracking?: AnalyticsActions[\"init\"];\n\t\t_mtdsUntrack?: () => void;\n\t}\n}\n\nexport type AnalyticsActions = {\n\tinit: {\n\t\tenabled?: boolean | \"debug\";\n\t\tconsent?: \"custom\" | true;\n\t} & (\n\t\t| {\n\t\t\t\tmatomoId: number | string;\n\t\t\t\tmatomoTagManagerId?: never;\n\t\t }\n\t\t| {\n\t\t\t\tmatomoId?: never;\n\t\t\t\tmatomoTagManagerId: string;\n\t\t }\n\t);\n\tpageview: {\n\t\turl?: string;\n\t\ttitle?: string;\n\t};\n\tevent: {\n\t\tcategory: string;\n\t\taction: string;\n\t\tname?: string;\n\t\tvalue?: number;\n\t};\n\tsearch: {\n\t\tquery: string;\n\t\tcategory?: string;\n\t\tresults?: number;\n\t};\n\tmatomo: Matomo;\n};\n\nexport function analytics<Action extends keyof AnalyticsActions>(\n\taction: Action,\n\targs = {} as AnalyticsActions[Action],\n) {\n\tif (!IS_BROWSER) return;\n\tif (!window._paq) {\n\t\twindow._paq = [];\n\t\twindow._paq.push([\"HeatmapSessionRecording::disable\"]); // Disable heatmaps by default as this require cookies\n\t\twindow._paq.push([\"enableLinkTracking\"]);\n\t\twindow._paq.push([\"setTrackerUrl\", `https://${MATOMO}/matomo.php`]);\n\t}\n\tif (!window._mtm) {\n\t\twindow._mtm = window._mtm || []; // Prepare Matomo Tag Manager\n\t\twindow._mtm.push({ \"mtm.startTime\": Date.now(), event: \"mtm.Start\" });\n\t}\n\n\tif (action === \"init\") {\n\t\twindow._mtdsTracking = {\n\t\t\tenabled: window.location.hostname !== \"localhost\",\n\t\t\t...window._mtdsTracking,\n\t\t\t...args,\n\t\t} as AnalyticsActions[\"init\"];\n\t\tconst { consent, enabled, matomoId, matomoTagManagerId } =\n\t\t\twindow._mtdsTracking;\n\n\t\tif (matomoId) window._paq.push([\"setSiteId\", matomoId]);\n\t\tif (enabled) {\n\t\t\tif (consent !== \"custom\") renderBanner();\n\t\t\tconst src = matomoTagManagerId\n\t\t\t\t? `https://cdn.matomo.cloud/${MATOMO}/container_${matomoTagManagerId}.js`\n\t\t\t\t: `https://cdn.matomo.cloud/${MATOMO}/matomo.js`;\n\n\t\t\tdocument.querySelector(`script[src=\"${src}\"]`) ||\n\t\t\t\tdocument.head.append(tag(\"script\", { async: \"\", src }));\n\t\t}\n\t}\n\n\tif (window._mtdsTracking?.enabled === false) return;\n\tif (window._mtdsTracking?.enabled === \"debug\")\n\t\treturn console.info(`analytics(\"${action}\", `, args, \")\");\n\n\tif (action === \"pageview\") {\n\t\tconst { url, title } = args as AnalyticsActions[\"pageview\"];\n\t\twindow._paq.push([\"setCustomUrl\", url || location.href]);\n\t\twindow._paq.push([\"setDocumentTitle\", title || document.title]);\n\t\twindow._paq.push([\"trackPageView\"]);\n\t} else if (action === \"event\") {\n\t\tconst { category, action, name, value } = args as AnalyticsActions[\"event\"];\n\t\tconst event = [\"trackEvent\", category, action, name, value];\n\n\t\t// We do not want to track events with hash in URL as this causes hard-to-read data,\n\t\t// so temporarily remove the hash part, and add it back after the event is pushed\n\t\tlet url = location.href;\n\t\twindow._paq.push([\n\t\t\tfunction () {\n\t\t\t\turl = this.getCurrentUrl<string>();\n\t\t\t},\n\t\t]);\n\t\twindow._paq.push([\"setCustomUrl\", url.split(\"#\")[0]]); // Skip hash part of URL\n\t\twindow._paq.push(event.filter((v) => v !== undefined)); // Push event\n\t\twindow._paq.push([\"setCustomUrl\", url]); // Reverrt to original URL with hash\n\t} else if (action === \"search\") {\n\t\tconst {\n\t\t\tquery,\n\t\t\tcategory = false,\n\t\t\tresults = false,\n\t\t} = args as AnalyticsActions[\"search\"];\n\t\twindow._paq.push([\"trackSiteSearch\", query, category, results]);\n\t} else if (action === \"matomo\") {\n\t\twindow._paq.push(args as AnalyticsActions[\"matomo\"]);\n\t}\n}\n\nfunction renderBanner() {\n\tconst hasSeenBanner =\n\t\tdocument.getElementById(BANNER) || window.localStorage.getItem(BANNER);\n\n\tif (hasSeenBanner) return;\n\n\tdocument.body.insertAdjacentHTML(\n\t\t\"afterbegin\",\n\t\t`<dialog id=\"${BANNER}\" data-analytics=\"ignore\"><style>\n\t\t\t\t#${BANNER}[open] { box-sizing: border-box; display: flex; align-items: center; background: #116e6b; border-radius: .5em; border: 0; box-shadow: 0 .25em .5em rgba(0,0,0,.3); color: #fff; font-size: .875em; inset: auto auto 1em 1em; max-width: calc(100vw - 2em); outline: 0; padding: .5em; position: fixed; z-index: 99999 }\n\t\t\t\t#${BANNER} button { all: unset; box-sizing: border-box; cursor: pointer; display: flex; width: 1.5em; height: 1.5em; font: 300 1.5em/1.35 sans-serif; border-radius: .25em; place-content: center; transition: .2s; transition-property: background, scale }\n\t\t\t\t#${BANNER} button:focus-visible { outline: 2px solid }\n\t\t\t\t#${BANNER} button:hover { background: #0a4e4f }\n\t\t\t\t#${BANNER} button:active { background: #054449; scale: .9 }\n\t\t\t\t#${BANNER} p { margin: 0 .25em }\n\t\t\t</style>\n\t\t\t<p>Vi bruker <a href=\"${BANNER_URL}\" target=\"_blank\">informasjonskapsler</a> for å forbedre brukeropplevelsen.</p>\n\t\t\t<form method=\"dialog\" data-analytics=\"ignore\"><button type=\"submit\" aria-label=\"OK\">&times;</button></form>\n\t\t</dialog>`,\n\t);\n\tconst banner = document.getElementById(BANNER) as HTMLDialogElement;\n\tconst onClose = () => window.localStorage.setItem(BANNER, \"seen\");\n\tbanner.addEventListener(\"close\", onClose, { once: true });\n\tbanner.show();\n}\n\nfunction handleTrack(event: Event) {\n\tif (window._mtdsTracking?.enabled) setTimeout(processTrack, 0, event); // Let other events process first\n}\n\nfunction processTrack({ type, target }: Event) {\n\tconst el = type === \"click\" ? (target as Element)?.closest?.(CLICKS) : target;\n\tif (!(el instanceof Element) || el.closest('[data-analytics=\"ignore\"]'))\n\t\treturn;\n\n\tlet action = \"click\";\n\tlet category = \"Button\";\n\tlet name = label(el) || heading(el) || attr(el, \"data-tooltip\") || \"\";\n\n\tif (type === \"submit\") {\n\t\tcategory = \"Form\";\n\t\taction = \"submit\";\n\t\tname = name || document.title;\n\t} else if (type === \"toggle\") {\n\t\tif (!el.matches(\"dialog:modal\")) return; // Skip non-modal dialogs\n\t\tcategory = \"Dialog\";\n\t\taction = \"open\";\n\t} else if (type === \"change\") {\n\t\tconst type = attr(el, \"type\");\n\t\tconst group =\n\t\t\ttype === \"checkbox\" || type === \"radio\" ? el.closest(\"fieldset\") : null;\n\n\t\tcategory = el.closest(CSS_CHIP) ? \"Chip\" : \"Form\";\n\t\taction = \"change\";\n\t\tname =\n\t\t\tlabel(group || el) ||\n\t\t\ttext(group?.querySelector(\"legend\")) ||\n\t\t\ttext((el as HTMLInputElement)?.labels?.[0]);\n\t} else if (attr(el, \"role\") === \"tab\") {\n\t\tcategory = \"Tab\";\n\t\taction = \"navigate\";\n\t} else if (attr(el, \"popovertarget\")) {\n\t\tif (!popover(el)?.matches(\":popover-open\")) return; // Skip if not open\n\t\tcategory = el.closest(CSS_HELPTEXT) ? \"HelpText\" : \"Popover\";\n\t\taction = \"open\";\n\t} else if (el.nodeName.endsWith(\"SUMMARY\")) {\n\t\tif (!(el.parentElement as HTMLDetailsElement).open) return; // Skip if not open\n\t\tcategory = \"Details\";\n\t\taction = \"open\";\n\t} else if (attr(el, \"data-command\") === \"toggle-app-expanded\") {\n\t\tconst open = style(el, \"--mtds-tooltip-position\") === \"none\";\n\t\tcategory = \"Sidebar\";\n\t\taction = open ? \"expand\" : \"minimize\";\n\t\tname = (open && attr(el, \"data-tooltip\")) || text(el);\n\t} else if (el.closest(CSS_BREADCRUMBS)) {\n\t\tcategory = \"Breadcrumbs\";\n\t\taction = \"navigate\";\n\t} else if (el.closest(CSS_PAGINATION)) {\n\t\tcategory = \"Pagintation\";\n\t\taction = \"navigate\";\n\t} else if (el.closest(CSS_CARD)) {\n\t\tcategory = \"Card\";\n\t\taction = el instanceof HTMLAnchorElement ? \"navigate\" : \"click\";\n\t} else if (el.closest(CSS_CHIP)) {\n\t\tcategory = \"Chip\";\n\t\taction = el.hasAttribute(\"data-removable\") ? \"remove\" : \"click\";\n\t} else if (el.closest(\"th[aria-sort]\")) {\n\t\tcategory = \"Table\";\n\t\taction = \"sort\";\n\t} else if (el instanceof HTMLAnchorElement) {\n\t\tcategory = \"Link\";\n\t\taction = el.protocol === \"mailto:\" ? \"email\" : \"navigate\";\n\t\tif (el.hasAttribute(\"download\")) action = \"download\";\n\t\telse if (el.hash && el.href.startsWith(location.href.split(\"#\")[0]))\n\t\t\taction = \"anchor\"; // Only track as anchor if same page\n\t} else if (el.hasAttribute(\"aria-expanded\")) {\n\t\tif (attr(el, \"aria-expanded\") !== \"true\") return; // Skip if not open\n\t\tcategory = \"Expand\";\n\t\taction = \"open\";\n\t}\n\n\t// Respect attributes and send\n\tanalytics(\"event\", {\n\t\tcategory: attr(el, \"data-analytics-category\") ?? category,\n\t\taction: attr(el, \"data-analytics-action\") ?? action,\n\t\tname: attr(el, \"data-analytics-name\") ?? name,\n\t});\n}\n\n// Utilities\nconst text = (el?: Element | null) => el?.textContent?.trim() || \"\";\nconst label = (el?: Element | null) => (el && attr(el, \"aria-label\")) || \"\";\nconst popover = (el: Element) =>\n\tdocument.getElementById(attr(el, \"popovertarget\") || \"\");\nconst style = (el: Element, key: string) =>\n\twindow.getComputedStyle(el).getPropertyValue(key)?.trim();\nconst heading = (el: Element) => {\n\tconst body = text(el);\n\tconst head = text(el.querySelector(\"h1,h2,h3,h4,h5,h6\")); // Note: head might be empty string ''\n\treturn (body.startsWith(head) && head) || body.slice(0, 100).trim(); // Limit to 100 characters\n};\n\nonLoaded(() => on(document, EVENTS, handleTrack, QUICK_EVENT));\n"],"names":["CSS_BREADCRUMBS","styles","CSS_CARD","CSS_CHIP","CSS_HELPTEXT","CSS_PAGINATION","CLICKS","EVENTS","MATOMO","BANNER","BANNER_URL","analytics","action","args","IS_BROWSER","consent","enabled","matomoId","matomoTagManagerId","renderBanner","src","tag","url","title","category","name","value","event","v","query","results","banner","onClose","handleTrack","processTrack","type","target","el","label","heading","attr","group","text","popover","open","style","key","body","head","onLoaded","on","QUICK_EVENT"],"mappings":"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"}
1
+ {"version":3,"file":"analytics.js","sources":["../../designsystem/analytics/analytics.ts"],"sourcesContent":["import styles from \"../styles.module.css\";\nimport { attr, isBrowser, on, onHotReload, QUICK_EVENT, tag } from \"../utils\";\n\n/*\n * IMPORTANT: [data-command=\"toggle-app-expanded\"] is deprecated but kept for backward compatibility.\n * Please use [command=\"show-modal\"] instead.\n */\nconst CSS_APP_TOGGLE = `[data-command=\"toggle-app-expanded\"],.${styles.app.split(\" \")[0]} > [command=\"show-modal\"]`;\nconst CSS_BREADCRUMBS = `.${styles.breadcrumbs.split(\" \")[0]}`;\nconst CSS_CARD = `.${styles.card.split(\" \")[0]}`;\nconst CSS_CHIP = `.${styles.chip.split(\" \")[0]}`;\nconst CSS_HELPTEXT = `.${styles.helptext.split(\" \")[0]}`;\nconst CSS_PAGINATION = `.${styles.pagination.split(\" \")[0]}`;\nconst CLICKS = `summary,u-summary,a,button,[role=\"tab\"],[role=\"button\"]`;\nconst MATOMO = \"mattilsynet.matomo.cloud\";\nconst MATOMO_STRINGS = [\"setCustomUrl\", \"setDocumentTitle\", \"setReferrerUrl\"];\nconst BANNER = \"mtds-analytics-banner\"; // Dialog to show Matomo script loading\nconst BANNER_URL =\n\t\"https://www.mattilsynet.no/om-mattilsynet/personvernerklaering/informasjonskapsler\";\n\ntype Matomo = (\n\t| string\n\t| number\n\t| boolean\n\t| Document\n\t| Element\n\t| ((this: Record<string, <T>() => T>) => void)\n)[];\ndeclare global {\n\tinterface Window {\n\t\t_paq?: Matomo[];\n\t\t_mtm?: Record<string, string | number>[];\n\t\t_mtdsTracking?: AnalyticsActions[\"init\"];\n\t\t_mtdsUntrack?: () => void;\n\t}\n}\n\nexport type AnalyticsActions = {\n\tinit: {\n\t\tenabled?: boolean | \"debug\";\n\t\tconsent?: \"custom\" | true;\n\t} & (\n\t\t| {\n\t\t\t\tmatomoId: number | string;\n\t\t\t\tmatomoTagManagerId?: never;\n\t\t }\n\t\t| {\n\t\t\t\tmatomoId?: number | string;\n\t\t\t\tmatomoTagManagerId: string;\n\t\t }\n\t);\n\tpageview: {\n\t\turl?: string;\n\t\ttitle?: string;\n\t};\n\tevent: {\n\t\tcategory: string;\n\t\taction: string;\n\t\tname?: string;\n\t\tvalue?: number;\n\t};\n\tsearch: {\n\t\tquery: string;\n\t\tcategory?: string;\n\t\tresults?: number;\n\t};\n\tmatomo: Matomo;\n};\n\nexport function analytics<Action extends keyof AnalyticsActions>(\n\taction: Action,\n\targs = {} as AnalyticsActions[Action],\n) {\n\tif (!isBrowser()) return;\n\tif (!window._paq) {\n\t\twindow._paq = [];\n\t\twindow._paq.push([\"HeatmapSessionRecording::disable\"]); // Disable heatmaps by default as this require cookies\n\t\twindow._paq.push([\"enableLinkTracking\"]);\n\t\twindow._paq.push([\"setTrackerUrl\", `https://${MATOMO}/matomo.php`]);\n\t}\n\tif (!window._mtm) {\n\t\twindow._mtm = window._mtm || []; // Prepare Matomo Tag Manager\n\t\twindow._mtm.push({ \"mtm.startTime\": Date.now(), event: \"mtm.Start\" });\n\t}\n\n\tif (action === \"init\") {\n\t\twindow._mtdsTracking = {\n\t\t\tenabled: window.location.hostname !== \"localhost\",\n\t\t\t...window._mtdsTracking,\n\t\t\t...args,\n\t\t} as AnalyticsActions[\"init\"];\n\t\tconst { consent, enabled, matomoId, matomoTagManagerId } =\n\t\t\twindow._mtdsTracking;\n\n\t\tif (matomoId) window._paq.push([\"setSiteId\", matomoId]);\n\t\tif (enabled) {\n\t\t\tif (consent !== \"custom\") renderBanner();\n\t\t\tconst src = matomoTagManagerId\n\t\t\t\t? `https://cdn.matomo.cloud/${MATOMO}/container_${matomoTagManagerId}.js`\n\t\t\t\t: `https://cdn.matomo.cloud/${MATOMO}/matomo.js`;\n\n\t\t\tdocument.querySelector(`script[src=\"${src}\"]`) ||\n\t\t\t\tdocument.head.append(tag(\"script\", { async: \"\", src }));\n\t\t}\n\t}\n\n\tif (window._mtdsTracking?.enabled === false) return;\n\tif (window._mtdsTracking?.enabled === \"debug\")\n\t\treturn console.info(`analytics ${action}:`, args);\n\n\tif (action === \"pageview\") {\n\t\tconst { url, title } = args as AnalyticsActions[\"pageview\"];\n\t\twindow._paq.push([\"setCustomUrl\", url || location.href]);\n\t\twindow._paq.push([\"setDocumentTitle\", title || document.title]);\n\t\twindow._paq.push([\"trackPageView\"]);\n\t} else if (action === \"event\") {\n\t\tconst { category, action, name, value } = args as AnalyticsActions[\"event\"];\n\t\tconst event = [\"trackEvent\", category, action, name, value];\n\n\t\t// We do not want to track events with hash in URL as this causes hard-to-read data,\n\t\t// so temporarily remove the hash part, and add it back after the event is pushed\n\t\tlet url = location.href;\n\t\twindow._paq.push([\n\t\t\tfunction () {\n\t\t\t\turl = this.getCurrentUrl<string>();\n\t\t\t},\n\t\t]);\n\t\twindow._paq.push([\"setCustomUrl\", url.split(\"#\")[0]]); // Skip hash part of URL\n\t\twindow._paq.push(event.filter((v) => v !== undefined)); // Push event\n\t\twindow._paq.push([\"setCustomUrl\", url]); // Reverrt to original URL with hash\n\t} else if (action === \"search\") {\n\t\tconst {\n\t\t\tquery,\n\t\t\tcategory = false,\n\t\t\tresults = false,\n\t\t} = args as AnalyticsActions[\"search\"];\n\t\twindow._paq.push([\"trackSiteSearch\", query, category, results]);\n\t} else if (action === \"matomo\") {\n\t\tconst props = args as AnalyticsActions[\"matomo\"];\n\t\tconst needStr = MATOMO_STRINGS.includes(props?.[0] as string);\n\t\tif (needStr && typeof props[1] !== \"string\") props[1] = `${props[1] ?? \"\"}`; // Matomo dies if not string\n\t\twindow._paq.push(props);\n\t}\n}\n\nfunction renderBanner() {\n\tconst hasSeenBanner =\n\t\tdocument.getElementById(BANNER) || window.localStorage.getItem(BANNER);\n\n\tif (hasSeenBanner) return;\n\n\tdocument.body.insertAdjacentHTML(\n\t\t\"afterbegin\",\n\t\t`<dialog id=\"${BANNER}\" data-analytics=\"ignore\"><style>\n\t\t\t\t#${BANNER}[open] { box-sizing: border-box; display: flex; align-items: center; background: #116e6b; border-radius: .5em; border: 0; box-shadow: 0 .25em .5em rgba(0,0,0,.3); color: #fff; font-size: .875em; inset: auto auto 1em 1em; max-width: calc(100vw - 2em); outline: 0; padding: .5em; position: fixed; z-index: 99999 }\n\t\t\t\t#${BANNER} button { all: unset; box-sizing: border-box; cursor: pointer; display: flex; width: 1.5em; height: 1.5em; font: 300 1.5em/1.35 sans-serif; border-radius: .25em; place-content: center; transition: .2s; transition-property: background, scale }\n\t\t\t\t#${BANNER} button:focus-visible { outline: 2px solid }\n\t\t\t\t#${BANNER} button:hover { background: #0a4e4f }\n\t\t\t\t#${BANNER} button:active { background: #054449; scale: .9 }\n\t\t\t\t#${BANNER} p { margin: 0 .25em }\n\t\t\t</style>\n\t\t\t<p>Vi bruker <a href=\"${BANNER_URL}\" target=\"_blank\">informasjonskapsler</a> for å forbedre brukeropplevelsen.</p>\n\t\t\t<form method=\"dialog\" data-analytics=\"ignore\"><button type=\"submit\" aria-label=\"OK\">&times;</button></form>\n\t\t</dialog>`,\n\t);\n\tconst banner = document.getElementById(BANNER) as HTMLDialogElement;\n\tconst onClose = () => window.localStorage.setItem(BANNER, \"seen\");\n\tbanner.addEventListener(\"close\", onClose, { once: true });\n\tbanner.show();\n}\n\nfunction handleAnalyticsTrack(event: Event) {\n\tif (window._mtdsTracking?.enabled) setTimeout(processTrack, 0, event); // Let other events process first\n}\n\nfunction processTrack({ type, target }: Event) {\n\tconst el = type === \"click\" ? (target as Element)?.closest?.(CLICKS) : target;\n\tif (!(el instanceof Element) || el.closest('[data-analytics=\"ignore\"]'))\n\t\treturn;\n\n\tlet action = \"click\";\n\tlet category = \"Button\";\n\tlet name = label(el) || heading(el) || attr(el, \"data-tooltip\") || \"\";\n\n\tif (type === \"submit\") {\n\t\tcategory = \"Form\";\n\t\taction = \"submit\";\n\t\tname = name || document.title;\n\t} else if (type === \"toggle\") {\n\t\tif (!el.matches(\"dialog:modal\")) return; // Skip non-modal dialogs\n\t\tcategory = \"Dialog\";\n\t\taction = \"open\";\n\t} else if (type === \"change\") {\n\t\tconst type = attr(el, \"type\");\n\t\tconst group =\n\t\t\ttype === \"checkbox\" || type === \"radio\" ? el.closest(\"fieldset\") : null;\n\n\t\tcategory = el.closest(CSS_CHIP) ? \"Chip\" : \"Form\";\n\t\taction = \"change\";\n\t\tname =\n\t\t\tlabel(group || el) ||\n\t\t\ttext(group?.querySelector(\"legend\")) ||\n\t\t\ttext((el as HTMLInputElement)?.labels?.[0]);\n\t} else if (attr(el, \"role\") === \"tab\") {\n\t\tcategory = \"Tab\";\n\t\taction = \"navigate\";\n\t} else if (attr(el, \"popovertarget\")) {\n\t\tif (!popover(el)?.matches(\":popover-open\")) return; // Skip if not open\n\t\tcategory = el.closest(CSS_HELPTEXT) ? \"HelpText\" : \"Popover\";\n\t\taction = \"open\";\n\t} else if (el.nodeName.endsWith(\"SUMMARY\")) {\n\t\tif (!(el.parentElement as HTMLDetailsElement).open) return; // Skip if not open\n\t\tcategory = \"Details\";\n\t\taction = \"open\";\n\t} else if (el.matches(CSS_APP_TOGGLE)) {\n\t\tconst open = style(el, \"--mtds-tooltip-position\") === \"none\";\n\t\tcategory = \"Sidebar\";\n\t\taction = open ? \"expand\" : \"minimize\";\n\t\tname = (open && attr(el, \"data-tooltip\")) || text(el);\n\t} else if (el.closest(CSS_BREADCRUMBS)) {\n\t\tcategory = \"Breadcrumbs\";\n\t\taction = \"navigate\";\n\t} else if (el.closest(CSS_PAGINATION)) {\n\t\tcategory = \"Pagination\";\n\t\taction = \"navigate\";\n\t} else if (el.closest(CSS_CARD)) {\n\t\tcategory = \"Card\";\n\t\taction = el instanceof HTMLAnchorElement ? \"navigate\" : \"click\";\n\t} else if (el.closest(CSS_CHIP)) {\n\t\tcategory = \"Chip\";\n\t\taction = el.hasAttribute(\"data-removable\") ? \"remove\" : \"click\";\n\t} else if (el.closest(\"th[aria-sort]\")) {\n\t\tcategory = \"Table\";\n\t\taction = \"sort\";\n\t} else if (el instanceof HTMLAnchorElement) {\n\t\tcategory = \"Link\";\n\t\taction = el.protocol === \"mailto:\" ? \"email\" : \"navigate\";\n\t\tif (el.hasAttribute(\"download\")) action = \"download\";\n\t\telse if (el.hash && el.href.startsWith(location.href.split(\"#\")[0]))\n\t\t\taction = \"anchor\"; // Only track as anchor if same page\n\t} else if (el.hasAttribute(\"aria-expanded\")) {\n\t\tif (attr(el, \"aria-expanded\") !== \"true\") return; // Skip if not open\n\t\tcategory = \"Expand\";\n\t\taction = \"open\";\n\t} else if (el.nodeName.startsWith(\"MTDS-ATLAS-\")) {\n\t\tcategory = \"Map Marker\";\n\t\taction = \"open\";\n\t}\n\n\t// Respect attributes and send\n\tanalytics(\"event\", {\n\t\tcategory: attr(el, \"data-analytics-category\") ?? category,\n\t\taction: attr(el, \"data-analytics-action\") ?? action,\n\t\tname: attr(el, \"data-analytics-name\") ?? name,\n\t});\n}\n\n// Utilities\nconst text = (el?: Element | null) => el?.textContent?.trim() || \"\";\nconst label = (el?: Element | null) => (el && attr(el, \"aria-label\")) || \"\";\nconst popover = (el: Element) =>\n\tdocument.getElementById(attr(el, \"popovertarget\") || \"\");\nconst style = (el: Element, key: string) =>\n\twindow.getComputedStyle(el).getPropertyValue(key)?.trim();\nconst heading = (el: Element) => {\n\tconst body = text(el);\n\tconst head = text(el.querySelector(\"h1,h2,h3,h4,h5,h6\")); // Note: head might be empty string ''\n\treturn (body.startsWith(head) && head) || body.slice(0, 100).trim(); // Limit to 100 characters\n};\n\nonHotReload(\"analytics\", () => [\n\ton(document, \"click toggle submit change\", handleAnalyticsTrack, QUICK_EVENT),\n]);\n"],"names":["CSS_APP_TOGGLE","styles","CSS_BREADCRUMBS","CSS_CARD","CSS_CHIP","CSS_HELPTEXT","CSS_PAGINATION","CLICKS","MATOMO","MATOMO_STRINGS","BANNER","BANNER_URL","analytics","action","args","isBrowser","consent","enabled","matomoId","matomoTagManagerId","renderBanner","src","tag","url","title","category","name","value","event","v","query","results","props","banner","onClose","handleAnalyticsTrack","processTrack","type","target","el","label","heading","attr","group","text","popover","open","style","key","body","head","onHotReload","on","QUICK_EVENT"],"mappings":"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"}
@@ -1,38 +1,39 @@
1
- import S from "../styles.module.css.js";
2
- import { onLoaded as _, onMutation as P, on as r, QUICK_EVENT as p, debounce as E } from "../utils.js";
3
- import "./app-toggle2.js";
4
- const g = S.app.split(" ")[0], h = S.sticky.split(" ")[0], I = '[data-command="toggle-app-expanded"]', y = `.${g} > dialog,.${g} dialog ~ main`, C = (t) => {
1
+ import P from "../styles.module.css.js";
2
+ import { getByCSSModule as _, onHotReload as h, on as r, QUICK_EVENT as m, debounce as E } from "../utils.js";
3
+ import "./app-toggle.js";
4
+ const y = P.app.split(" ")[0], I = `[data-command="toggle-app-expanded"],.${y} > [command="show-modal"]`, u = `.${y} > dialog,.${y} dialog ~ main`, S = _("sticky"), w = (t) => {
5
5
  document.startViewTransition ? document.startViewTransition(t) : t();
6
6
  }, x = (t) => (
7
7
  // @ts-expect-error window.mtdsAppToggle comes from app-toggle.js
8
- C(() => window.mtdsToggleAppExpanded?.(t))
8
+ w(() => window.mtdsToggleAppExpanded?.(t))
9
9
  );
10
- function k({ target: t, defaultPrevented: i }) {
11
- const f = t?.closest?.("a");
12
- if (f?.closest("dialog") && f?.closest(y))
13
- return T();
14
- if (i || !(t instanceof HTMLButtonElement) || !t.matches(I))
10
+ function H(t) {
11
+ const { target: o, defaultPrevented: l } = t, f = o?.closest?.("a");
12
+ if (f?.closest("dialog") && f?.closest(u))
13
+ return C();
14
+ if (l || !(o instanceof HTMLButtonElement) || !o.matches(I))
15
15
  return;
16
- getComputedStyle(t).position === "sticky" ? x() : C(() => {
17
- const m = document.querySelector(y);
18
- m?.setAttribute("data-closedby", "any"), m?.showModal();
16
+ const T = getComputedStyle(o).position === "sticky";
17
+ t.preventDefault(), T ? x() : w(() => {
18
+ const g = document.querySelector(u);
19
+ g?.setAttribute("closedby", "any"), g?.showModal();
19
20
  });
20
21
  }
21
- function T() {
22
- document.querySelector(y)?.close();
22
+ function C() {
23
+ document.querySelector(u)?.close();
23
24
  }
24
- let c = 0, s, o = 0, e, d = 0, l = 0, a = !1, u = 0, n = 0;
25
- function A([t]) {
26
- e = t, w();
25
+ let p = 0, n, e = 0, c = 0, i = 0, d = !1, a = 0, s = 0;
26
+ function k() {
27
+ if (!S?.length) return;
28
+ const t = S[0], o = window.scrollY, l = o < s;
29
+ s = o, l !== n && (p = (t.parentElement?.getBoundingClientRect().top || 0) + s, n = l, c = t.offsetHeight, i = t.getBoundingClientRect().top + s, d = t.offsetHeight <= window.innerHeight, a = window.innerHeight), !(e === -1 && d) && (e !== -1 && (d || n && s <= i) ? (t.style.setProperty("--pos", "sticky"), t.style.setProperty("--top", "0px"), e = -1) : e === -1 && !n ? (t.style.setProperty("--pos", "relative"), t.style.setProperty("--top", `${Math.max(0, s - p)}px`), e = 0) : e !== 1 && !n && s + a >= i + c ? (t.style.setProperty("--pos", "sticky"), t.style.setProperty("--top", `${a - c}px`), e = 1) : e === 1 && n && (t.style.setProperty("--pos", "relative"), t.style.setProperty("--top", `${i - p}px`), e = 0));
27
30
  }
28
- function w() {
29
- if (!e?.isConnected) return;
30
- const t = window.scrollY, i = t < n;
31
- n = t, i !== s && (c = (e.parentElement?.getBoundingClientRect().top || 0) + n, s = i, d = e.offsetHeight, l = e.getBoundingClientRect().top + n, a = e.offsetHeight <= window.innerHeight, u = window.innerHeight), !(o === -1 && a) && (o !== -1 && (a || s && n <= l) ? (e.style.setProperty("--pos", "sticky"), e.style.setProperty("--top", "0px"), o = -1) : o === -1 && !s ? (e.style.setProperty("--pos", "relative"), e.style.setProperty("--top", `${Math.max(0, n - c)}px`), o = 0) : o !== 1 && !s && n + u >= l + d ? (e.style.setProperty("--pos", "sticky"), e.style.setProperty("--top", `${u - d}px`), o = 1) : o === 1 && s && (e.style.setProperty("--pos", "relative"), e.style.setProperty("--top", `${l - c}px`), o = 0));
32
- }
33
- _(() => {
34
- P(document.documentElement, h, A), r(document, "click", k, p), r(window, "resize", E(T, 100), p), r(window, "scroll", w, p);
35
- });
31
+ h("app", () => [
32
+ r(document, "click", H, !0),
33
+ // Use capture to run before other click handlers
34
+ r(window, "resize", E(C, 100), m),
35
+ r(window, "scroll", k, m)
36
+ ]);
36
37
  export {
37
38
  x as toggleAppExpanded
38
39
  };
@@ -1 +1 @@
1
- {"version":3,"file":"app-observer.js","sources":["../../designsystem/app/app-observer.ts"],"sourcesContent":["import styles from \"../styles.module.css\";\nimport { debounce, on, onLoaded, onMutation, QUICK_EVENT } from \"../utils\";\nimport \"./app-toggle\";\n\nconst CSS_APP = styles.app.split(\" \")[0];\nconst CSS_STICKY = styles.sticky.split(\" \")[0];\nconst CSS_TOGGLE = '[data-command=\"toggle-app-expanded\"]';\nconst CSS_SIDEBAR = `.${CSS_APP} > dialog,.${CSS_APP} dialog ~ main`;\n\nconst useTransition = (callback: () => void) => {\n\tif (!document.startViewTransition) callback();\n\telse document.startViewTransition(callback);\n};\n\nexport const toggleAppExpanded = (force?: boolean) =>\n\t// @ts-expect-error window.mtdsAppToggle comes from app-toggle.js\n\tuseTransition(() => window.mtdsToggleAppExpanded?.(force));\n\nfunction handleAppToggleClick({ target: el, defaultPrevented: stop }: Event) {\n\tconst link = (el as Element)?.closest?.(\"a\");\n\tif (link?.closest(\"dialog\") && link?.closest(CSS_SIDEBAR))\n\t\treturn closeSidebar(); // Close sidebar if link is clicked inside sidebar\n\n\tif (stop || !(el instanceof HTMLButtonElement) || !el.matches(CSS_TOGGLE))\n\t\treturn;\n\tconst isDesktop = getComputedStyle(el).position === \"sticky\";\n\n\tif (isDesktop) toggleAppExpanded();\n\telse\n\t\tuseTransition(() => {\n\t\t\tconst sidebar = document.querySelector<HTMLDialogElement>(CSS_SIDEBAR);\n\t\t\tsidebar?.setAttribute(\"data-closedby\", \"any\"); // Allow closing by clicking outside\n\t\t\tsidebar?.showModal();\n\t\t});\n}\n\nfunction closeSidebar() {\n\tdocument.querySelector<HTMLDialogElement>(CSS_SIDEBAR)?.close();\n}\n\n// Scroll state\nlet MIN_Y = 0; // Offset to avoid scroll jump when sticky is set to relative\nlet SCROLL_UP: boolean;\nlet STICK = 0; // -1 = stick top, 0 = relative, 1 = stick bottom\nlet STICK_EL: HTMLElement;\nlet STICK_H = 0;\nlet STICK_Y = 0;\nlet STUCK = false; // Used to figure if nav is larger than viewport\nlet WIN_H = 0;\nlet WIN_Y = 0;\n\nfunction handleMutation([sticky]: HTMLCollectionOf<HTMLElement>) {\n\tSTICK_EL = sticky;\n\thandleAppScroll(); // Run on connect\n}\n\nfunction handleAppScroll() {\n\tif (!STICK_EL?.isConnected) return;\n\tconst NEXT_Y = window.scrollY;\n\tconst NEXT_UP = NEXT_Y < WIN_Y;\n\tWIN_Y = NEXT_Y;\n\n\t// Only calculate if scroll direction has changed\n\tif (NEXT_UP !== SCROLL_UP) {\n\t\tMIN_Y = (STICK_EL.parentElement?.getBoundingClientRect().top || 0) + WIN_Y;\n\t\tSCROLL_UP = NEXT_UP;\n\t\tSTICK_H = STICK_EL.offsetHeight;\n\t\tSTICK_Y = STICK_EL.getBoundingClientRect().top + WIN_Y;\n\t\tSTUCK = STICK_EL.offsetHeight <= window.innerHeight;\n\t\tWIN_H = window.innerHeight;\n\t}\n\n\tif (STICK === -1 && STUCK) return; // Allways sticky when sidebar is smaller than viewport\n\tif (STICK !== -1 && (STUCK || (SCROLL_UP && WIN_Y <= STICK_Y))) {\n\t\tSTICK_EL.style.setProperty(\"--pos\", \"sticky\");\n\t\tSTICK_EL.style.setProperty(\"--top\", \"0px\");\n\t\tSTICK = -1; // Not sticking to top and sidebar is smaller than viewport or scrolling up\n\t} else if (STICK === -1 && !SCROLL_UP) {\n\t\tSTICK_EL.style.setProperty(\"--pos\", \"relative\");\n\t\tSTICK_EL.style.setProperty(\"--top\", `${Math.max(0, WIN_Y - MIN_Y)}px`);\n\t\tSTICK = 0; // Sticking to top and scrolling down\n\t} else if (STICK !== 1 && !SCROLL_UP && WIN_Y + WIN_H >= STICK_Y + STICK_H) {\n\t\tSTICK_EL.style.setProperty(\"--pos\", \"sticky\");\n\t\tSTICK_EL.style.setProperty(\"--top\", `${WIN_H - STICK_H}px`);\n\t\tSTICK = 1; // Not sticking to bottom and scrolling down\n\t} else if (STICK === 1 && SCROLL_UP) {\n\t\tSTICK_EL.style.setProperty(\"--pos\", \"relative\");\n\t\tSTICK_EL.style.setProperty(\"--top\", `${STICK_Y - MIN_Y}px`);\n\t\tSTICK = 0; // Sticking to bottom and scrolling up\n\t}\n}\n\nonLoaded(() => {\n\tonMutation(document.documentElement, CSS_STICKY, handleMutation);\n\ton(document, \"click\", handleAppToggleClick, QUICK_EVENT);\n\ton(window, \"resize\", debounce(closeSidebar, 100), QUICK_EVENT);\n\ton(window, \"scroll\", handleAppScroll, QUICK_EVENT);\n});\n"],"names":["CSS_APP","styles","CSS_STICKY","CSS_TOGGLE","CSS_SIDEBAR","useTransition","callback","toggleAppExpanded","force","handleAppToggleClick","el","stop","link","closeSidebar","sidebar","MIN_Y","SCROLL_UP","STICK","STICK_EL","STICK_H","STICK_Y","STUCK","WIN_H","WIN_Y","handleMutation","sticky","handleAppScroll","NEXT_Y","NEXT_UP","onLoaded","onMutation","on","QUICK_EVENT","debounce"],"mappings":";;;AAIA,MAAMA,IAAUC,EAAO,IAAI,MAAM,GAAG,EAAE,CAAC,GACjCC,IAAaD,EAAO,OAAO,MAAM,GAAG,EAAE,CAAC,GACvCE,IAAa,wCACbC,IAAc,IAAIJ,CAAO,cAAcA,CAAO,kBAE9CK,IAAgB,CAACC,MAAyB;AAC/C,EAAK,SAAS,sBACT,SAAS,oBAAoBA,CAAQ,IADPA,EAAA;AAEpC,GAEaC,IAAoB,CAACC;AAAA;AAAA,EAEjCH,EAAc,MAAM,OAAO,wBAAwBG,CAAK,CAAC;AAAA;AAE1D,SAASC,EAAqB,EAAE,QAAQC,GAAI,kBAAkBC,KAAe;AAC5E,QAAMC,IAAQF,GAAgB,UAAU,GAAG;AAC3C,MAAIE,GAAM,QAAQ,QAAQ,KAAKA,GAAM,QAAQR,CAAW;AACvD,WAAOS,EAAA;AAER,MAAIF,KAAQ,EAAED,aAAc,sBAAsB,CAACA,EAAG,QAAQP,CAAU;AACvE;AAGD,EAFkB,iBAAiBO,CAAE,EAAE,aAAa,WAErCH,EAAA,IAEdF,EAAc,MAAM;AACnB,UAAMS,IAAU,SAAS,cAAiCV,CAAW;AACrE,IAAAU,GAAS,aAAa,iBAAiB,KAAK,GAC5CA,GAAS,UAAA;AAAA,EACV,CAAC;AACH;AAEA,SAASD,IAAe;AACvB,WAAS,cAAiCT,CAAW,GAAG,MAAA;AACzD;AAGA,IAAIW,IAAQ,GACRC,GACAC,IAAQ,GACRC,GACAC,IAAU,GACVC,IAAU,GACVC,IAAQ,IACRC,IAAQ,GACRC,IAAQ;AAEZ,SAASC,EAAe,CAACC,CAAM,GAAkC;AAChE,EAAAP,IAAWO,GACXC,EAAA;AACD;AAEA,SAASA,IAAkB;AAC1B,MAAI,CAACR,GAAU,YAAa;AAC5B,QAAMS,IAAS,OAAO,SAChBC,IAAUD,IAASJ;AAazB,EAZAA,IAAQI,GAGJC,MAAYZ,MACfD,KAASG,EAAS,eAAe,sBAAA,EAAwB,OAAO,KAAKK,GACrEP,IAAYY,GACZT,IAAUD,EAAS,cACnBE,IAAUF,EAAS,sBAAA,EAAwB,MAAMK,GACjDF,IAAQH,EAAS,gBAAgB,OAAO,aACxCI,IAAQ,OAAO,cAGZ,EAAAL,MAAU,MAAMI,OAChBJ,MAAU,OAAOI,KAAUL,KAAaO,KAASH,MACpDF,EAAS,MAAM,YAAY,SAAS,QAAQ,GAC5CA,EAAS,MAAM,YAAY,SAAS,KAAK,GACzCD,IAAQ,MACEA,MAAU,MAAM,CAACD,KAC3BE,EAAS,MAAM,YAAY,SAAS,UAAU,GAC9CA,EAAS,MAAM,YAAY,SAAS,GAAG,KAAK,IAAI,GAAGK,IAAQR,CAAK,CAAC,IAAI,GACrEE,IAAQ,KACEA,MAAU,KAAK,CAACD,KAAaO,IAAQD,KAASF,IAAUD,KAClED,EAAS,MAAM,YAAY,SAAS,QAAQ,GAC5CA,EAAS,MAAM,YAAY,SAAS,GAAGI,IAAQH,CAAO,IAAI,GAC1DF,IAAQ,KACEA,MAAU,KAAKD,MACzBE,EAAS,MAAM,YAAY,SAAS,UAAU,GAC9CA,EAAS,MAAM,YAAY,SAAS,GAAGE,IAAUL,CAAK,IAAI,GAC1DE,IAAQ;AAEV;AAEAY,EAAS,MAAM;AACd,EAAAC,EAAW,SAAS,iBAAiB5B,GAAYsB,CAAc,GAC/DO,EAAG,UAAU,SAAStB,GAAsBuB,CAAW,GACvDD,EAAG,QAAQ,UAAUE,EAASpB,GAAc,GAAG,GAAGmB,CAAW,GAC7DD,EAAG,QAAQ,UAAUL,GAAiBM,CAAW;AAClD,CAAC;"}
1
+ {"version":3,"file":"app-observer.js","sources":["../../designsystem/app/app-observer.ts"],"sourcesContent":["import styles from \"../styles.module.css\";\nimport {\n\tdebounce,\n\tgetByCSSModule,\n\ton,\n\tonHotReload,\n\tQUICK_EVENT,\n} from \"../utils\";\nimport \"./app-toggle\";\n\nconst CSS_APP = styles.app.split(\" \")[0];\nconst CSS_TOGGLE = `[data-command=\"toggle-app-expanded\"],.${CSS_APP} > [command=\"show-modal\"]`;\nconst CSS_SIDEBAR = `.${CSS_APP} > dialog,.${CSS_APP} dialog ~ main`;\nconst STICKIES = getByCSSModule(\"sticky\");\n\nconst useTransition = (callback: () => void) => {\n\tif (!document.startViewTransition) callback();\n\telse document.startViewTransition(callback);\n};\n\nexport const toggleAppExpanded = (force?: boolean) =>\n\t// @ts-expect-error window.mtdsAppToggle comes from app-toggle.js\n\tuseTransition(() => window.mtdsToggleAppExpanded?.(force));\n\nfunction handleAppToggleClick(event: Event) {\n\tconst { target: el, defaultPrevented: stop } = event;\n\tconst link = (el as Element)?.closest?.(\"a\");\n\tif (link?.closest(\"dialog\") && link?.closest(CSS_SIDEBAR))\n\t\treturn closeSidebar(); // Close sidebar if link is clicked inside sidebar\n\n\tif (stop || !(el instanceof HTMLButtonElement) || !el.matches(CSS_TOGGLE))\n\t\treturn;\n\tconst isDesktop = getComputedStyle(el).position === \"sticky\";\n\tevent.preventDefault(); // Prevent default Invoker Command action so we can animate\n\n\tif (isDesktop) toggleAppExpanded();\n\telse\n\t\tuseTransition(() => {\n\t\t\tconst sidebar = document.querySelector<HTMLDialogElement>(CSS_SIDEBAR);\n\t\t\tsidebar?.setAttribute(\"closedby\", \"any\"); // Allow closing by clicking outside\n\t\t\tsidebar?.showModal();\n\t\t});\n}\n\nfunction closeSidebar() {\n\tdocument.querySelector<HTMLDialogElement>(CSS_SIDEBAR)?.close();\n}\n\n// Scroll state\nlet MIN_Y = 0; // Offset to avoid scroll jump when sticky is set to relative\nlet SCROLL_UP: boolean;\nlet STICK = 0; // -1 = stick top, 0 = relative, 1 = stick bottom\nlet STICK_H = 0;\nlet STICK_Y = 0;\nlet STUCK = false; // Used to figure if nav is larger than viewport\nlet WIN_H = 0;\nlet WIN_Y = 0;\n\nfunction handleAppScroll() {\n\tif (!STICKIES?.length) return;\n\tconst el = STICKIES[0] as HTMLElement;\n\tconst NEXT_Y = window.scrollY;\n\tconst NEXT_UP = NEXT_Y < WIN_Y;\n\tWIN_Y = NEXT_Y;\n\n\t// Only calculate if scroll direction has changed\n\tif (NEXT_UP !== SCROLL_UP) {\n\t\tMIN_Y = (el.parentElement?.getBoundingClientRect().top || 0) + WIN_Y;\n\t\tSCROLL_UP = NEXT_UP;\n\t\tSTICK_H = el.offsetHeight;\n\t\tSTICK_Y = el.getBoundingClientRect().top + WIN_Y;\n\t\tSTUCK = el.offsetHeight <= window.innerHeight;\n\t\tWIN_H = window.innerHeight;\n\t}\n\n\tif (STICK === -1 && STUCK) return; // Allways sticky when sidebar is smaller than viewport\n\tif (STICK !== -1 && (STUCK || (SCROLL_UP && WIN_Y <= STICK_Y))) {\n\t\tel.style.setProperty(\"--pos\", \"sticky\");\n\t\tel.style.setProperty(\"--top\", \"0px\");\n\t\tSTICK = -1; // Not sticking to top and sidebar is smaller than viewport or scrolling up\n\t} else if (STICK === -1 && !SCROLL_UP) {\n\t\tel.style.setProperty(\"--pos\", \"relative\");\n\t\tel.style.setProperty(\"--top\", `${Math.max(0, WIN_Y - MIN_Y)}px`);\n\t\tSTICK = 0; // Sticking to top and scrolling down\n\t} else if (STICK !== 1 && !SCROLL_UP && WIN_Y + WIN_H >= STICK_Y + STICK_H) {\n\t\tel.style.setProperty(\"--pos\", \"sticky\");\n\t\tel.style.setProperty(\"--top\", `${WIN_H - STICK_H}px`);\n\t\tSTICK = 1; // Not sticking to bottom and scrolling down\n\t} else if (STICK === 1 && SCROLL_UP) {\n\t\tel.style.setProperty(\"--pos\", \"relative\");\n\t\tel.style.setProperty(\"--top\", `${STICK_Y - MIN_Y}px`);\n\t\tSTICK = 0; // Sticking to bottom and scrolling up\n\t}\n}\n\nonHotReload(\"app\", () => [\n\ton(document, \"click\", handleAppToggleClick, true), // Use capture to run before other click handlers\n\ton(window, \"resize\", debounce(closeSidebar, 100), QUICK_EVENT),\n\ton(window, \"scroll\", handleAppScroll, QUICK_EVENT),\n]);\n"],"names":["CSS_APP","styles","CSS_TOGGLE","CSS_SIDEBAR","STICKIES","getByCSSModule","useTransition","callback","toggleAppExpanded","force","handleAppToggleClick","event","el","stop","link","closeSidebar","isDesktop","sidebar","MIN_Y","SCROLL_UP","STICK","STICK_H","STICK_Y","STUCK","WIN_H","WIN_Y","handleAppScroll","NEXT_Y","NEXT_UP","onHotReload","on","debounce","QUICK_EVENT"],"mappings":";;;AAUA,MAAMA,IAAUC,EAAO,IAAI,MAAM,GAAG,EAAE,CAAC,GACjCC,IAAa,yCAAyCF,CAAO,6BAC7DG,IAAc,IAAIH,CAAO,cAAcA,CAAO,kBAC9CI,IAAWC,EAAe,QAAQ,GAElCC,IAAgB,CAACC,MAAyB;AAC/C,EAAK,SAAS,sBACT,SAAS,oBAAoBA,CAAQ,IADPA,EAAA;AAEpC,GAEaC,IAAoB,CAACC;AAAA;AAAA,EAEjCH,EAAc,MAAM,OAAO,wBAAwBG,CAAK,CAAC;AAAA;AAE1D,SAASC,EAAqBC,GAAc;AAC3C,QAAM,EAAE,QAAQC,GAAI,kBAAkBC,MAASF,GACzCG,IAAQF,GAAgB,UAAU,GAAG;AAC3C,MAAIE,GAAM,QAAQ,QAAQ,KAAKA,GAAM,QAAQX,CAAW;AACvD,WAAOY,EAAA;AAER,MAAIF,KAAQ,EAAED,aAAc,sBAAsB,CAACA,EAAG,QAAQV,CAAU;AACvE;AACD,QAAMc,IAAY,iBAAiBJ,CAAE,EAAE,aAAa;AACpD,EAAAD,EAAM,eAAA,GAEFK,IAAWR,EAAA,IAEdF,EAAc,MAAM;AACnB,UAAMW,IAAU,SAAS,cAAiCd,CAAW;AACrE,IAAAc,GAAS,aAAa,YAAY,KAAK,GACvCA,GAAS,UAAA;AAAA,EACV,CAAC;AACH;AAEA,SAASF,IAAe;AACvB,WAAS,cAAiCZ,CAAW,GAAG,MAAA;AACzD;AAGA,IAAIe,IAAQ,GACRC,GACAC,IAAQ,GACRC,IAAU,GACVC,IAAU,GACVC,IAAQ,IACRC,IAAQ,GACRC,IAAQ;AAEZ,SAASC,IAAkB;AAC1B,MAAI,CAACtB,GAAU,OAAQ;AACvB,QAAMQ,IAAKR,EAAS,CAAC,GACfuB,IAAS,OAAO,SAChBC,IAAUD,IAASF;AAazB,EAZAA,IAAQE,GAGJC,MAAYT,MACfD,KAASN,EAAG,eAAe,sBAAA,EAAwB,OAAO,KAAKa,GAC/DN,IAAYS,GACZP,IAAUT,EAAG,cACbU,IAAUV,EAAG,sBAAA,EAAwB,MAAMa,GAC3CF,IAAQX,EAAG,gBAAgB,OAAO,aAClCY,IAAQ,OAAO,cAGZ,EAAAJ,MAAU,MAAMG,OAChBH,MAAU,OAAOG,KAAUJ,KAAaM,KAASH,MACpDV,EAAG,MAAM,YAAY,SAAS,QAAQ,GACtCA,EAAG,MAAM,YAAY,SAAS,KAAK,GACnCQ,IAAQ,MACEA,MAAU,MAAM,CAACD,KAC3BP,EAAG,MAAM,YAAY,SAAS,UAAU,GACxCA,EAAG,MAAM,YAAY,SAAS,GAAG,KAAK,IAAI,GAAGa,IAAQP,CAAK,CAAC,IAAI,GAC/DE,IAAQ,KACEA,MAAU,KAAK,CAACD,KAAaM,IAAQD,KAASF,IAAUD,KAClET,EAAG,MAAM,YAAY,SAAS,QAAQ,GACtCA,EAAG,MAAM,YAAY,SAAS,GAAGY,IAAQH,CAAO,IAAI,GACpDD,IAAQ,KACEA,MAAU,KAAKD,MACzBP,EAAG,MAAM,YAAY,SAAS,UAAU,GACxCA,EAAG,MAAM,YAAY,SAAS,GAAGU,IAAUJ,CAAK,IAAI,GACpDE,IAAQ;AAEV;AAEAS,EAAY,OAAO,MAAM;AAAA,EACxBC,EAAG,UAAU,SAASpB,GAAsB,EAAI;AAAA;AAAA,EAChDoB,EAAG,QAAQ,UAAUC,EAAShB,GAAc,GAAG,GAAGiB,CAAW;AAAA,EAC7DF,EAAG,QAAQ,UAAUJ,GAAiBM,CAAW;AAClD,CAAC;"}
@@ -1,27 +1,11 @@
1
- const t = `if (
2
- typeof window !== "undefined" &&
3
- window.CSSStyleSheet &&
4
- document.adoptedStyleSheets
5
- )
6
- (() => {
7
- const key = "--mtds-app-expanded";
8
- const sheet = new CSSStyleSheet();
9
- const prev = () => !window.localStorage.getItem(key)?.includes("false");
10
-
11
- document.adoptedStyleSheets.push(sheet);
12
- window.mtdsToggleAppExpanded = (force) => {
13
- try {
14
- const next = force ?? !prev();
15
- sheet.replaceSync?.(\`:root { \${key}: var(\${key}--\${next})}\`);
16
- window.localStorage.setItem(key, next);
17
- } catch (_err) {} // localStorage is full or replaceSync is not supported
18
- };
19
-
20
- // Set and store initial state
21
- window.mtdsToggleAppExpanded(prev());
22
- })();
23
- `;
24
- export {
25
- t as default
26
- };
1
+ typeof window < "u" && window.CSSStyleSheet && document.adoptedStyleSheets && (() => {
2
+ const e = "--mtds-app-expanded", d = new CSSStyleSheet(), o = () => !window.localStorage.getItem(e)?.includes("false");
3
+ document.adoptedStyleSheets.push(d), window.mtdsToggleAppExpanded = (n) => {
4
+ try {
5
+ const t = n ?? !o();
6
+ d.replaceSync?.(`:root { ${e}: var(${e}--${t})}`), window.localStorage.setItem(e, t);
7
+ } catch {
8
+ }
9
+ }, window.mtdsToggleAppExpanded(o());
10
+ })();
27
11
  //# sourceMappingURL=app-toggle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-toggle.js","sources":["../../designsystem/app/app-toggle.js?raw"],"sourcesContent":["export default \"if (\\n\\ttypeof window !== \\\"undefined\\\" &&\\n\\twindow.CSSStyleSheet &&\\n\\tdocument.adoptedStyleSheets\\n)\\n\\t(() => {\\n\\t\\tconst key = \\\"--mtds-app-expanded\\\";\\n\\t\\tconst sheet = new CSSStyleSheet();\\n\\t\\tconst prev = () => !window.localStorage.getItem(key)?.includes(\\\"false\\\");\\n\\n\\t\\tdocument.adoptedStyleSheets.push(sheet);\\n\\t\\twindow.mtdsToggleAppExpanded = (force) => {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tconst next = force ?? !prev();\\n\\t\\t\\t\\tsheet.replaceSync?.(`:root { ${key}: var(${key}--${next})}`);\\n\\t\\t\\t\\twindow.localStorage.setItem(key, next);\\n\\t\\t\\t} catch (_err) {} // localStorage is full or replaceSync is not supported\\n\\t\\t};\\n\\n\\t\\t// Set and store initial state\\n\\t\\twindow.mtdsToggleAppExpanded(prev());\\n\\t})();\\n\""],"names":["script"],"mappings":"AAAA,MAAAA,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
1
+ {"version":3,"file":"app-toggle.js","sources":["../../designsystem/app/app-toggle.js"],"sourcesContent":["if (\n\ttypeof window !== \"undefined\" &&\n\twindow.CSSStyleSheet &&\n\tdocument.adoptedStyleSheets\n)\n\t(() => {\n\t\tconst key = \"--mtds-app-expanded\";\n\t\tconst sheet = new CSSStyleSheet();\n\t\tconst prev = () => !window.localStorage.getItem(key)?.includes(\"false\");\n\n\t\tdocument.adoptedStyleSheets.push(sheet);\n\t\twindow.mtdsToggleAppExpanded = (force) => {\n\t\t\ttry {\n\t\t\t\tconst next = force ?? !prev();\n\t\t\t\tsheet.replaceSync?.(`:root { ${key}: var(${key}--${next})}`);\n\t\t\t\twindow.localStorage.setItem(key, next);\n\t\t\t} catch (_err) {} // localStorage is full or replaceSync is not supported\n\t\t};\n\n\t\t// Set and store initial state\n\t\twindow.mtdsToggleAppExpanded(prev());\n\t})();\n"],"names":["key","sheet","prev","force","next"],"mappings":"AACC,OAAO,SAAW,OAClB,OAAO,iBACP,SAAS,uBAER,MAAM;AACN,QAAMA,IAAM,uBACNC,IAAQ,IAAI,cAAa,GACzBC,IAAO,MAAM,CAAC,OAAO,aAAa,QAAQF,CAAG,GAAG,SAAS,OAAO;AAEtE,WAAS,mBAAmB,KAAKC,CAAK,GACtC,OAAO,wBAAwB,CAACE,MAAU;AACzC,QAAI;AACH,YAAMC,IAAOD,KAAS,CAACD,EAAI;AAC3B,MAAAD,EAAM,cAAc,WAAWD,CAAG,SAASA,CAAG,KAAKI,CAAI,IAAI,GAC3D,OAAO,aAAa,QAAQJ,GAAKI,CAAI;AAAA,IACtC,QAAe;AAAA,IAAC;AAAA,EACjB,GAGA,OAAO,sBAAsBF,GAAM;AACpC,GAAC;"}
@@ -1,11 +1,27 @@
1
- typeof window < "u" && window.CSSStyleSheet && document.adoptedStyleSheets && (() => {
2
- const e = "--mtds-app-expanded", d = new CSSStyleSheet(), o = () => !window.localStorage.getItem(e)?.includes("false");
3
- document.adoptedStyleSheets.push(d), window.mtdsToggleAppExpanded = (n) => {
4
- try {
5
- const t = n ?? !o();
6
- d.replaceSync?.(`:root { ${e}: var(${e}--${t})}`), window.localStorage.setItem(e, t);
7
- } catch {
8
- }
9
- }, window.mtdsToggleAppExpanded(o());
10
- })();
1
+ const t = `if (
2
+ typeof window !== "undefined" &&
3
+ window.CSSStyleSheet &&
4
+ document.adoptedStyleSheets
5
+ )
6
+ (() => {
7
+ const key = "--mtds-app-expanded";
8
+ const sheet = new CSSStyleSheet();
9
+ const prev = () => !window.localStorage.getItem(key)?.includes("false");
10
+
11
+ document.adoptedStyleSheets.push(sheet);
12
+ window.mtdsToggleAppExpanded = (force) => {
13
+ try {
14
+ const next = force ?? !prev();
15
+ sheet.replaceSync?.(\`:root { \${key}: var(\${key}--\${next})}\`);
16
+ window.localStorage.setItem(key, next);
17
+ } catch (_err) {} // localStorage is full or replaceSync is not supported
18
+ };
19
+
20
+ // Set and store initial state
21
+ window.mtdsToggleAppExpanded(prev());
22
+ })();
23
+ `;
24
+ export {
25
+ t as default
26
+ };
11
27
  //# sourceMappingURL=app-toggle2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-toggle2.js","sources":["../../designsystem/app/app-toggle.js"],"sourcesContent":["if (\n\ttypeof window !== \"undefined\" &&\n\twindow.CSSStyleSheet &&\n\tdocument.adoptedStyleSheets\n)\n\t(() => {\n\t\tconst key = \"--mtds-app-expanded\";\n\t\tconst sheet = new CSSStyleSheet();\n\t\tconst prev = () => !window.localStorage.getItem(key)?.includes(\"false\");\n\n\t\tdocument.adoptedStyleSheets.push(sheet);\n\t\twindow.mtdsToggleAppExpanded = (force) => {\n\t\t\ttry {\n\t\t\t\tconst next = force ?? !prev();\n\t\t\t\tsheet.replaceSync?.(`:root { ${key}: var(${key}--${next})}`);\n\t\t\t\twindow.localStorage.setItem(key, next);\n\t\t\t} catch (_err) {} // localStorage is full or replaceSync is not supported\n\t\t};\n\n\t\t// Set and store initial state\n\t\twindow.mtdsToggleAppExpanded(prev());\n\t})();\n"],"names":["key","sheet","prev","force","next"],"mappings":"AACC,OAAO,SAAW,OAClB,OAAO,iBACP,SAAS,uBAER,MAAM;AACN,QAAMA,IAAM,uBACNC,IAAQ,IAAI,cAAa,GACzBC,IAAO,MAAM,CAAC,OAAO,aAAa,QAAQF,CAAG,GAAG,SAAS,OAAO;AAEtE,WAAS,mBAAmB,KAAKC,CAAK,GACtC,OAAO,wBAAwB,CAACE,MAAU;AACzC,QAAI;AACH,YAAMC,IAAOD,KAAS,CAACD,EAAI;AAC3B,MAAAD,EAAM,cAAc,WAAWD,CAAG,SAASA,CAAG,KAAKI,CAAI,IAAI,GAC3D,OAAO,aAAa,QAAQJ,GAAKI,CAAI;AAAA,IACtC,QAAe;AAAA,IAAC;AAAA,EACjB,GAGA,OAAO,sBAAsBF,GAAM;AACpC,GAAC;"}
1
+ {"version":3,"file":"app-toggle2.js","sources":["../../designsystem/app/app-toggle.js?raw"],"sourcesContent":["export default \"if (\\n\\ttypeof window !== \\\"undefined\\\" &&\\n\\twindow.CSSStyleSheet &&\\n\\tdocument.adoptedStyleSheets\\n)\\n\\t(() => {\\n\\t\\tconst key = \\\"--mtds-app-expanded\\\";\\n\\t\\tconst sheet = new CSSStyleSheet();\\n\\t\\tconst prev = () => !window.localStorage.getItem(key)?.includes(\\\"false\\\");\\n\\n\\t\\tdocument.adoptedStyleSheets.push(sheet);\\n\\t\\twindow.mtdsToggleAppExpanded = (force) => {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tconst next = force ?? !prev();\\n\\t\\t\\t\\tsheet.replaceSync?.(`:root { ${key}: var(${key}--${next})}`);\\n\\t\\t\\t\\twindow.localStorage.setItem(key, next);\\n\\t\\t\\t} catch (_err) {} // localStorage is full or replaceSync is not supported\\n\\t\\t};\\n\\n\\t\\t// Set and store initial state\\n\\t\\twindow.mtdsToggleAppExpanded(prev());\\n\\t})();\\n\""],"names":["script"],"mappings":"AAAA,MAAAA,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
package/mtds/app/app.d.ts CHANGED
@@ -9,12 +9,12 @@ export type AppFooterProps = React.ComponentPropsWithoutRef<"footer">;
9
9
  export type AppProps<As extends React.ElementType = "div"> = PolymorphicComponentPropWithRef<As>;
10
10
  type AppComponent = <As extends React.ElementType = "div">(props: AppProps<As>) => JSX.Element;
11
11
  export declare const App: AppComponent & {
12
- Header: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & React.RefAttributes<HTMLElement>>;
13
- Sidebar: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.DialogHTMLAttributes<HTMLDialogElement>, HTMLDialogElement>, "ref"> & React.RefAttributes<HTMLDialogElement>>;
12
+ Header: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & import('react').RefAttributes<HTMLElement>>;
13
+ Sidebar: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').DialogHTMLAttributes<HTMLDialogElement>, HTMLDialogElement>, "ref"> & import('react').RefAttributes<HTMLDialogElement>>;
14
14
  Sticky: AppComponent;
15
- Toggle: React.ForwardRefExoticComponent<Omit<ButtonProps<"button">, "ref"> & React.RefAttributes<HTMLButtonElement>>;
16
- Main: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & React.RefAttributes<HTMLElement>>;
17
- Footer: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & React.RefAttributes<HTMLElement>>;
15
+ Toggle: import('react').ForwardRefExoticComponent<Omit<ButtonProps<"button">, "ref"> & import('react').RefAttributes<HTMLButtonElement>>;
16
+ Main: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & import('react').RefAttributes<HTMLElement>>;
17
+ Footer: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & import('react').RefAttributes<HTMLElement>>;
18
18
  Script: () => import("react/jsx-runtime").JSX.Element;
19
19
  };
20
20
  export {};