@mattilsynet/design 3.2.7 → 3.2.9
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.
- package/mtds/analytics/analytics.js +44 -44
- package/mtds/analytics/analytics.js.map +1 -1
- package/mtds/atlas/atlas-element.js +1 -1
- package/mtds/breadcrumbs/breadcrumbs.d.ts +1 -1
- package/mtds/breadcrumbs/breadcrumbs.js.map +1 -1
- package/mtds/deprecations.js +6 -5
- package/mtds/deprecations.js.map +1 -1
- package/mtds/errorsummary/errorsummary.d.ts +1 -1
- package/mtds/errorsummary/errorsummary.js.map +1 -1
- package/mtds/field/field.d.ts +1 -1
- package/mtds/field/field.js.map +1 -1
- package/mtds/illustrations/flagg-uk.svg +1 -0
- package/mtds/illustrations/index.json +4 -0
- package/mtds/index.d.ts +1 -2
- package/mtds/index.iife.js +19 -23
- package/mtds/index.js +32 -37
- package/mtds/index.js.map +1 -1
- package/mtds/package.json.js +1 -1
- package/mtds/pagination/pagination.d.ts +1 -1
- package/mtds/pagination/pagination.js +9 -8
- package/mtds/pagination/pagination.js.map +1 -1
- package/mtds/print/print.stories.d.ts +1 -0
- package/mtds/styles.css +1 -1
- package/mtds/styles.json +23 -23
- package/mtds/styles.module.css.js +33 -33
- package/mtds/tabs/tabs.d.ts +1 -1
- package/mtds/tabs/tabs.js.map +1 -1
- package/mtds/tailwind.css +0 -1
- package/mtds/tooltip/tooltip-element.js +7 -6
- package/mtds/tooltip/tooltip-element.js.map +1 -1
- package/package.json +14 -14
- package/mtds/external/@u-elements/u-datalist/dist/u-datalist.js +0 -238
- package/mtds/external/@u-elements/u-datalist/dist/u-datalist.js.map +0 -1
- package/mtds/external/@u-elements/u-details/dist/u-details.js +0 -101
- package/mtds/external/@u-elements/u-details/dist/u-details.js.map +0 -1
- package/mtds/external/@u-elements/u-tabs/dist/u-tabs.js +0 -235
- package/mtds/external/@u-elements/u-tabs/dist/u-tabs.js.map +0 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import d from "../styles.module.css.js";
|
|
2
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",
|
|
4
|
-
function
|
|
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", A = "https://www.mattilsynet.no/om-mattilsynet/personvernerklaering/informasjonskapsler";
|
|
4
|
+
function q(t, a = {}) {
|
|
5
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" })),
|
|
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") {
|
|
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:
|
|
13
|
-
if (n && window._paq.push(["setSiteId", n]),
|
|
12
|
+
const { consent: e, enabled: o, matomoId: n, matomoTagManagerId: r } = window._mtdsTracking;
|
|
13
|
+
if (n && window._paq.push(["setSiteId", n]), o) {
|
|
14
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 }));
|
|
@@ -18,26 +18,26 @@ function A(o, a = {}) {
|
|
|
18
18
|
}
|
|
19
19
|
if (window._mtdsTracking?.enabled !== !1) {
|
|
20
20
|
if (window._mtdsTracking?.enabled === "debug")
|
|
21
|
-
return console.info(`analytics ${
|
|
22
|
-
if (
|
|
23
|
-
const { url: e, title:
|
|
24
|
-
window._paq.push(["setCustomUrl", e || location.href]), window._paq.push(["setDocumentTitle",
|
|
25
|
-
} else if (
|
|
26
|
-
const { category: e, action:
|
|
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];
|
|
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 (
|
|
33
|
+
} else if (t === "search") {
|
|
34
34
|
const {
|
|
35
35
|
query: e,
|
|
36
|
-
category:
|
|
36
|
+
category: o = !1,
|
|
37
37
|
results: n = !1
|
|
38
38
|
} = a;
|
|
39
|
-
window._paq.push(["trackSiteSearch", e,
|
|
40
|
-
} else if (
|
|
39
|
+
window._paq.push(["trackSiteSearch", e, o, n]);
|
|
40
|
+
} else if (t === "matomo") {
|
|
41
41
|
const e = a;
|
|
42
42
|
$.includes(e?.[0]) && typeof e[1] != "string" && (e[1] = `${e[1] ?? ""}`), window._paq.push(e);
|
|
43
43
|
}
|
|
@@ -56,70 +56,70 @@ function E() {
|
|
|
56
56
|
#${i} button:active { background: #054449; scale: .9 }
|
|
57
57
|
#${i} p { margin: 0 .25em }
|
|
58
58
|
</style>
|
|
59
|
-
<p>Vi bruker <a href="${
|
|
59
|
+
<p>Vi bruker <a href="${A}" target="_blank">informasjonskapsler</a> for å forbedre brukeropplevelsen.</p>
|
|
60
60
|
<form method="dialog" data-analytics="ignore"><button type="submit" aria-label="OK">×</button></form>
|
|
61
61
|
</dialog>`
|
|
62
62
|
);
|
|
63
63
|
const a = document.getElementById(i), e = () => window.localStorage.setItem(i, "seen");
|
|
64
64
|
a.addEventListener("close", e, { once: !0 }), a.show();
|
|
65
65
|
}
|
|
66
|
-
function I(
|
|
67
|
-
window._mtdsTracking?.enabled && setTimeout(M, 0,
|
|
66
|
+
function I(t) {
|
|
67
|
+
window._mtdsTracking?.enabled && setTimeout(M, 0, t);
|
|
68
68
|
}
|
|
69
|
-
function M({ type:
|
|
70
|
-
const e =
|
|
69
|
+
function M({ type: t, target: a }) {
|
|
70
|
+
const e = t === "click" ? a?.closest?.(x) : a;
|
|
71
71
|
if (!(e instanceof Element) || e.closest('[data-analytics="ignore"]'))
|
|
72
72
|
return;
|
|
73
|
-
let
|
|
74
|
-
if (
|
|
75
|
-
n = "Form",
|
|
76
|
-
else if (
|
|
73
|
+
let o = "click", n = "Button", r = f(e) || R(e) || s(e, "data-tooltip") || "";
|
|
74
|
+
if (t === "submit")
|
|
75
|
+
n = "Form", o = "submit", r = r || document.title;
|
|
76
|
+
else if (t === "toggle") {
|
|
77
77
|
if (!e.matches("dialog:modal")) return;
|
|
78
|
-
n = "Dialog",
|
|
79
|
-
} else if (
|
|
78
|
+
n = "Dialog", o = "open";
|
|
79
|
+
} else if (t === "change") {
|
|
80
80
|
const l = s(e, "type"), c = l === "checkbox" || l === "radio" ? e.closest("fieldset") : null;
|
|
81
|
-
n = e.closest(u) ? "Chip" : "Form",
|
|
81
|
+
n = e.closest(u) ? "Chip" : "Form", o = "change", r = f(c || e) || m(c?.querySelector("legend")) || m(e?.labels?.[0]);
|
|
82
82
|
} else if (s(e, "role") === "tab")
|
|
83
|
-
n = "Tab",
|
|
83
|
+
n = "Tab", o = "navigate";
|
|
84
84
|
else if (s(e, "popovertarget")) {
|
|
85
85
|
if (!B(e)?.matches(":popover-open")) return;
|
|
86
|
-
n = e.closest(v) ? "HelpText" : "Popover",
|
|
86
|
+
n = e.closest(v) ? "HelpText" : "Popover", o = "open";
|
|
87
87
|
} else if (e.nodeName.endsWith("SUMMARY")) {
|
|
88
88
|
if (!e.parentElement.open) return;
|
|
89
|
-
n = "Details",
|
|
89
|
+
n = "Details", o = "open";
|
|
90
90
|
} else if (e.matches(S)) {
|
|
91
91
|
const l = L(e, "--mtds-tooltip-position") === "none";
|
|
92
|
-
n = "Sidebar",
|
|
92
|
+
n = "Sidebar", o = l ? "expand" : "minimize", r = l && s(e, "data-tooltip") || m(e);
|
|
93
93
|
} else if (e.closest(k))
|
|
94
|
-
n = "Breadcrumbs",
|
|
94
|
+
n = "Breadcrumbs", o = "navigate";
|
|
95
95
|
else if (e.closest(C))
|
|
96
|
-
n = "Pagination",
|
|
96
|
+
n = "Pagination", o = "navigate";
|
|
97
97
|
else if (e.closest(T))
|
|
98
|
-
n = "Card",
|
|
98
|
+
n = "Card", o = e instanceof HTMLAnchorElement ? "navigate" : "click";
|
|
99
99
|
else if (e.closest(u))
|
|
100
|
-
n = "Chip",
|
|
100
|
+
n = "Chip", o = e.hasAttribute("data-removable") ? "remove" : "click";
|
|
101
101
|
else if (e.closest("th[aria-sort]"))
|
|
102
|
-
n = "Table",
|
|
102
|
+
n = "Table", o = "sort";
|
|
103
103
|
else if (e instanceof HTMLAnchorElement)
|
|
104
|
-
n = "Link",
|
|
104
|
+
n = "Link", o = e.protocol === "mailto:" ? "email" : "navigate", e.hasAttribute("download") ? o = "download" : e.hash && e.href.startsWith(location.href.split("#")[0]) && (o = "anchor");
|
|
105
105
|
else if (e.hasAttribute("aria-expanded")) {
|
|
106
106
|
if (s(e, "aria-expanded") !== "true") return;
|
|
107
|
-
n = "Expand",
|
|
108
|
-
} else e.nodeName.startsWith("MTDS-ATLAS-") && (n = "Map Marker",
|
|
109
|
-
|
|
107
|
+
n = "Expand", o = "open";
|
|
108
|
+
} else e.nodeName.startsWith("MTDS-ATLAS-") && (n = "Map Marker", o = "open");
|
|
109
|
+
(t === "change" || t === "submit") && (n = e.closest("form")?.getAttribute("data-analytics-category") || n), q("event", {
|
|
110
110
|
category: s(e, "data-analytics-category") ?? n,
|
|
111
|
-
action: s(e, "data-analytics-action") ??
|
|
111
|
+
action: s(e, "data-analytics-action") ?? o,
|
|
112
112
|
name: s(e, "data-analytics-name") ?? r
|
|
113
113
|
});
|
|
114
114
|
}
|
|
115
|
-
const m = (
|
|
116
|
-
const a = m(
|
|
115
|
+
const m = (t) => t?.textContent?.trim() || "", f = (t) => t && s(t, "aria-label") || "", B = (t) => document.getElementById(s(t, "popovertarget") || ""), L = (t, a) => window.getComputedStyle(t).getPropertyValue(a)?.trim(), R = (t) => {
|
|
116
|
+
const a = m(t), e = m(t.querySelector("h1,h2,h3,h4,h5,h6"));
|
|
117
117
|
return a.startsWith(e) && e || a.slice(0, 100).trim();
|
|
118
118
|
};
|
|
119
119
|
w("analytics", () => [
|
|
120
120
|
y(document, "click toggle submit change", I, _)
|
|
121
121
|
]);
|
|
122
122
|
export {
|
|
123
|
-
|
|
123
|
+
q as analytics
|
|
124
124
|
};
|
|
125
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, 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\">×</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
|
+
{"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\">×</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// If event is form event, inherit form category\n\tif (type === \"change\" || type === \"submit\")\n\t\tcategory =\n\t\t\tel.closest(\"form\")?.getAttribute(\"data-analytics-category\") || category;\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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"}
|
|
@@ -19,7 +19,7 @@ class r extends g {
|
|
|
19
19
|
}
|
|
20
20
|
constructor() {
|
|
21
21
|
super(), this.attachShadow({ mode: "open" }).append(m("figure")), C(this, `@layer leaflet{${h}}
|
|
22
|
-
@layer mt.v3-2-
|
|
22
|
+
@layer mt.v3-2-9design{${b}`);
|
|
23
23
|
}
|
|
24
24
|
connectedCallback() {
|
|
25
25
|
const t = this.shadowRoot?.lastElementChild, e = a(this, "data-cluster") ?? "false", o = new i.TileLayer(k, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"breadcrumbs.js","sources":["../../designsystem/breadcrumbs/breadcrumbs.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"breadcrumbs.js","sources":["../../designsystem/breadcrumbs/breadcrumbs.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { DSBreadcrumbsElement } from \"..\";\nimport type { CustomReactElementProps } from \"../react-types\";\nimport styles from \"../styles.module.css\";\nimport { toCustomElementProps } from \"../utils\";\n\nexport type BreadcrumbsProps = CustomReactElementProps<DSBreadcrumbsElement> & {\n\t/**\n\t * @deprecated `as` prop is no longer supported.\n\t */\n\tas?: never; // Remove `as` prop support\n};\n\nexport const Breadcrumbs = forwardRef<DSBreadcrumbsElement, BreadcrumbsProps>(\n\tfunction Breadcrumbs(rest, ref) {\n\t\treturn (\n\t\t\t<ds-breadcrumbs\n\t\t\t\tref={ref}\n\t\t\t\t{...toCustomElementProps(rest, styles.breadcrumbs)}\n\t\t\t/>\n\t\t);\n\t},\n);\n"],"names":["Breadcrumbs","forwardRef","rest","ref","jsx","toCustomElementProps","styles"],"mappings":";;;;AAaO,MAAMA,IAAcC;AAAA,EAC1B,SAAqBC,GAAMC,GAAK;AAC/B,WACC,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,KAAAD;AAAA,QACC,GAAGE,EAAqBH,GAAMI,EAAO,WAAW;AAAA,MAAA;AAAA,IAAA;AAAA,EAGpD;AACD;"}
|
package/mtds/deprecations.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import "./index.js";
|
|
2
2
|
import l from "./styles.module.css.js";
|
|
3
3
|
import { getByCSSModule as n, isBrowser as d, onHotReload as y, on as u, QUICK_EVENT as S, onMutation as E, attr as s, debounce as D } from "./utils.js";
|
|
4
|
+
import { DSFieldElement as g } from "@digdir/designsystemet-web";
|
|
4
5
|
const f = /* @__PURE__ */ new WeakSet(), a = (t) => !f.has(t) && f.add(t), o = (t, e, r) => window.dsWarnings === !1 || console.warn(
|
|
5
6
|
`\x1B[1m@mattilsynet/design:\x1B[m ${t} is deprecated, please use ${e}:`,
|
|
6
7
|
r
|
|
7
|
-
), A = n("togglegroup"),
|
|
8
|
+
), A = n("togglegroup"), p = l.button.split(" "), L = () => {
|
|
8
9
|
for (const t of A) {
|
|
9
10
|
a(t) && !t.hasAttribute("data-toggle-group") && (s(t, "data-toggle-group", "Valgknapper"), o(
|
|
10
11
|
'Only setting class="styles.togglegroup"',
|
|
@@ -12,7 +13,7 @@ const f = /* @__PURE__ */ new WeakSet(), a = (t) => !f.has(t) && f.add(t), o = (
|
|
|
12
13
|
t
|
|
13
14
|
));
|
|
14
15
|
for (const e of t.getElementsByTagName("label"))
|
|
15
|
-
a(e) && !e.classList.contains(
|
|
16
|
+
a(e) && !e.classList.contains(p[0]) && (e.classList.add(...p), o(
|
|
16
17
|
'Only setting class="styles.button"',
|
|
17
18
|
'<label class="styles.button">',
|
|
18
19
|
e
|
|
@@ -99,10 +100,10 @@ const f = /* @__PURE__ */ new WeakSet(), a = (t) => !f.has(t) && f.add(t), o = (
|
|
|
99
100
|
'Only setting class="styles.field"',
|
|
100
101
|
'<ds-field class="styles.field">',
|
|
101
102
|
t
|
|
102
|
-
), !c.has(t) && c.add(t) &&
|
|
103
|
+
), !c.has(t) && c.add(t) && g.prototype.connectedCallback.call(t));
|
|
103
104
|
}, G = () => {
|
|
104
105
|
for (const t of c)
|
|
105
|
-
|
|
106
|
+
g.prototype.disconnectedCallback.call(t), c.delete(t);
|
|
106
107
|
}, x = `[data-description], .${l.field.split(" ")[0]} label + p`, q = () => {
|
|
107
108
|
for (const t of document.querySelectorAll(x))
|
|
108
109
|
a(t) && t.getAttribute("data-field") !== "description" && (s(t, "data-field", "description"), o(
|
package/mtds/deprecations.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deprecations.js","sources":["../designsystem/deprecations.ts"],"sourcesContent":["import { DSFieldElement } from \"@digdir/designsystemet-web\";\nimport styles from \"./styles.module.css\";\nimport {\n\tattr,\n\tdebounce,\n\tgetByCSSModule,\n\tisBrowser,\n\ton,\n\tonHotReload,\n\tonMutation,\n\tQUICK_EVENT,\n} from \"./utils\";\n\nconst DEPRECATIONS = new WeakSet<Element>();\nconst deprecate = (el: Element) =>\n\t!DEPRECATIONS.has(el) && DEPRECATIONS.add(el);\n\nconst warn = (from: string, to: string, el: Element) =>\n\twindow.dsWarnings === false ||\n\tconsole.warn(\n\t\t`\\x1B[1m@mattilsynet/design:\\x1B[m ${from} is deprecated, please use ${to}:`,\n\t\tel,\n\t);\n\n// Deprecate togglegroup without data-toggle-group attribute\nconst TOGGLEGROUPS = getByCSSModule(\"togglegroup\");\nconst CSS_BUTTON = styles.button.split(\" \");\nconst deprecateToggleGroup = () => {\n\tfor (const el of TOGGLEGROUPS) {\n\t\tif (deprecate(el) && !el.hasAttribute(\"data-toggle-group\")) {\n\t\t\tattr(el, \"data-toggle-group\", \"Valgknapper\");\n\t\t\twarn(\n\t\t\t\t'Only setting class=\"styles.togglegroup\"',\n\t\t\t\t'data-toggle-group=\"LABEL-HERE\" attribute also for better accessibility',\n\t\t\t\tel,\n\t\t\t);\n\t\t}\n\t\tfor (const label of el.getElementsByTagName(\"label\")) {\n\t\t\tif (deprecate(label) && !label.classList.contains(CSS_BUTTON[0])) {\n\t\t\t\tlabel.classList.add(...CSS_BUTTON);\n\t\t\t\twarn(\n\t\t\t\t\t'Only setting class=\"styles.button\"',\n\t\t\t\t\t`<label class=\"styles.button\">`,\n\t\t\t\t\tlabel,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Deprecate errorsummary without ds-error-summary element\nconst BREADCRUMBS = getByCSSModule(\"breadcrumbs\");\nconst deprecateBreadcrumbs = () => {\n\tfor (const el of BREADCRUMBS)\n\t\tif (deprecate(el) && el.nodeName !== \"DS-BREADCRUMBS\") {\n\t\t\tel.classList.add(...styles.breadcrumbs.split(\" \"));\n\t\t\twarn(\n\t\t\t\t'Only setting class=\"styles.breadcrumbs\"',\n\t\t\t\t'<ds-breadcrumbs class=\"styles.breadcrumbs\">',\n\t\t\t\tel,\n\t\t\t);\n\t\t}\n};\n\n// Deprecate errorsummary without ds-error-summary element\nconst ERRORSUMMARYS = getByCSSModule(\"errorsummary\");\nconst deprecateErrorSummary = () => {\n\tfor (const el of ERRORSUMMARYS)\n\t\tif (deprecate(el) && el.nodeName !== \"DS-ERROR-SUMMARY\") {\n\t\t\twarn(\n\t\t\t\t'Only setting class=\"styles.errorsummary\"',\n\t\t\t\t'<ds-error-summary class=\"styles.errorsummary\">',\n\t\t\t\tel,\n\t\t\t);\n\t\t}\n};\n\n// Deprecate data-variant and data-modal and data-closedby on dialogs\nconst DIALOGS = getByCSSModule(\"dialog\") as HTMLCollectionOf<HTMLDialogElement>;\nconst deprecateDialog = () => {\n\tfor (const el of DIALOGS) {\n\t\tif (deprecate(el)) {\n\t\t\tconst closedby = attr(el, \"data-closedby\");\n\t\t\tif (closedby) {\n\t\t\t\tattr(el, \"closedby\", closedby);\n\t\t\t\twarn(\n\t\t\t\t\t`<dialog data-closedby=\"${closedby}\">`,\n\t\t\t\t\t`<dialog closedby=\"${closedby}\">`,\n\t\t\t\t\tel,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (el.hasAttribute(\"data-variant\")) {\n\t\t\t\twarn(\n\t\t\t\t\t'<dialog data-variant=\"drawer\">',\n\t\t\t\t\t'<dialog data-placement=\"center|left|right|top|bottom\">',\n\t\t\t\t\tel,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (el.isConnected && el.showModal && el.close) {\n\t\t\tif (\n\t\t\t\tel.matches('[open][data-modal]:not([data-modal=\"false\"]):not(:modal)')\n\t\t\t) {\n\t\t\t\twarn(\n\t\t\t\t\t'<dialog data-modal=\"true\">',\n\t\t\t\t\t'.showModal() or <button command=\"show-modal\" commandfor=\"DIALOG-ID\"></button>',\n\t\t\t\t\tel,\n\t\t\t\t);\n\t\t\t\tattr(el, \"open\", null); // Using attribute instead of .close to avoid `close` event\n\t\t\t\tel.showModal();\n\t\t\t} else if (el.matches(\":modal:not([open])\")) {\n\t\t\t\tattr(el, \"open\", \"\"); // Set as open\n\t\t\t\tel.close(); // So we correctly can call .close, removing <dialog> from #top-layer\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Deprecate data-count in favor of data-limit\nconst deprecateCounter = () => {\n\tfor (const el of document.querySelectorAll(\"[data-count]\"))\n\t\tif (deprecate(el)) {\n\t\t\tconst count = attr(el, \"data-count\");\n\t\t\tel.classList.add(...styles.validation.split(\" \"));\n\t\t\tattr(el, \"data-limit\", count);\n\t\t\twarn(\n\t\t\t\t`data-count=\"${count}\"`,\n\t\t\t\t`class=\"styles.validation\" data-field=\"counter\" data-limit=\"${count}\"`,\n\t\t\t\tel,\n\t\t\t);\n\t\t}\n};\n\n// Deprecate data-command on buttons and other elements\nconst deprecateDataCommand = () => {\n\tfor (const el of document.querySelectorAll(\"[data-command]\"))\n\t\tif (deprecate(el)) {\n\t\t\tconst command = attr(el, \"data-command\");\n\n\t\t\tif (command === \"row\")\n\t\t\t\twarn(\n\t\t\t\t\t`<${el.nodeName.toLowerCase()} data-command=\"${command}\">`,\n\t\t\t\t\t`<tr data-clickdelegatefor=\"${el.nodeName}-ID\">`,\n\t\t\t\t\tel,\n\t\t\t\t);\n\t\t\telse\n\t\t\t\twarn(\n\t\t\t\t\t`<button data-command=\"${command}\">`,\n\t\t\t\t\t`<button command=\"${command?.replace(\"toggle-app-expanded\", \"show-modal\")}\" commandfor=\"TARGET-ID\">`,\n\t\t\t\t\tel,\n\t\t\t\t);\n\t\t}\n};\n\n// Deprecate u-tabs\nconst TABS = isBrowser() ? document.getElementsByTagName(\"u-tabs\") : [];\nconst deprecateUTabs = () => {\n\tfor (const el of TABS) if (deprecate(el)) warn(\"u-tabs\", \"ds-tabs\", el);\n};\n\n// Deprecate u-combobox and add class to ds-suggestion\nconst CSS_SUGGESTION = styles.suggestion.split(\" \");\nconst OLD = isBrowser() ? document.getElementsByTagName(\"u-combobox\") : [];\nconst NEW = isBrowser() ? document.getElementsByTagName(\"ds-suggestion\") : [];\nconst deprecateUCombobox = () => {\n\tfor (const el of OLD)\n\t\tif (deprecate(el)) {\n\t\t\tel.classList.add(...CSS_SUGGESTION);\n\t\t\twarn(\"<u-combobox>\", `<ds-suggestion class=\"styles.suggestion\">`, el);\n\t\t}\n\tfor (const el of NEW)\n\t\tif (deprecate(el) && !el.classList.contains(CSS_SUGGESTION[0])) {\n\t\t\tel.classList.add(...CSS_SUGGESTION);\n\t\t\twarn(\n\t\t\t\t\"Only using <ds-suggestion>\",\n\t\t\t\t`<ds-suggestion class=\"styles.suggestion\">`,\n\t\t\t\tel,\n\t\t\t);\n\t\t}\n};\n\nconst handleCommandClick = ({ target: el }: Event) => {\n\tif (el instanceof Element === false) return;\n\tconst row = el?.closest(\"tr\")?.querySelector('[data-command=\"row\"]');\n\tconst click =\n\t\trow && !el?.closest('a,button,label,input,select,textarea,[role=\"button\"]');\n\tif (click) (row as HTMLElement).click(); // Forward click to data-command=\"row\" element\n\n\tconst dialog = el?.closest(\"dialog\");\n\tconst close = dialog && el?.closest('[data-command=\"close\"]');\n\tif (close) dialog.close();\n};\n\n// Deprecate fields without ds-field element\nconst FIELDS = getByCSSModule(\"field\");\nconst FIELD_UNBIND = new Set<Element>();\nconst deprecateField = () => {\n\tfor (const el of FIELDS)\n\t\tif (el.nodeName !== \"DS-FIELD\") {\n\t\t\tif (!deprecate(el))\n\t\t\t\twarn(\n\t\t\t\t\t'Only setting class=\"styles.field\"',\n\t\t\t\t\t'<ds-field class=\"styles.field\">',\n\t\t\t\t\tel,\n\t\t\t\t);\n\t\t\tif (!FIELD_UNBIND.has(el) && FIELD_UNBIND.add(el)) {\n\t\t\t\tDSFieldElement.prototype.connectedCallback.call(el as DSFieldElement);\n\t\t\t}\n\t\t}\n};\nconst unbindFields = () => {\n\tfor (const el of FIELD_UNBIND) {\n\t\tDSFieldElement.prototype.disconnectedCallback.call(el as DSFieldElement);\n\t\tFIELD_UNBIND.delete(el);\n\t}\n};\n\n// Deprecate validation without data-field=\"validation\"\nconst CSS_DESCRIPTIONS = `[data-description], .${styles.field.split(\" \")[0]} label + p`;\nconst deprecateFeildDescription = () => {\n\tfor (const el of document.querySelectorAll(CSS_DESCRIPTIONS))\n\t\tif (deprecate(el) && el.getAttribute(\"data-field\") !== \"description\") {\n\t\t\tattr(el, \"data-field\", \"description\");\n\t\t\twarn(\n\t\t\t\t\"Descriptions created by data-description of <p> only\",\n\t\t\t\t'data-field=\"data-description\"',\n\t\t\t\tel,\n\t\t\t);\n\t\t}\n};\n\n// Deprecate validation without data-field=\"validation\"\nconst VALIDATIONS = getByCSSModule(\"validation\");\nconst deprecateFieldValidation = () => {\n\tfor (const el of VALIDATIONS)\n\t\tif (deprecate(el) && !el.hasAttribute(\"data-field\")) {\n\t\t\tattr(el, \"data-field\", \"validation\");\n\t\t\twarn(\n\t\t\t\t'Only setting class=\"styles.validation\"',\n\t\t\t\t'class=\"styles.validation\" data-field=\"validation\"',\n\t\t\t\tel,\n\t\t\t);\n\t\t}\n};\n\nconst deprecatePopoverPosition = () => {\n\tfor (const el of document.querySelectorAll(\"[popover][data-position]\"))\n\t\tif (deprecate(el)) {\n\t\t\tattr(el, \"data-placement\", attr(el, \"data-position\"));\n\t\t\twarn(\"data-position\", \"data-placement\", el);\n\t\t}\n};\n\nconst handleDeprecations = debounce(() => {\n\tif (!isBrowser()) return; // Check if document is still available, since this can run in test environments after document is destroyed\n\tdeprecateCounter();\n\tdeprecateDataCommand();\n\tdeprecateBreadcrumbs();\n\tdeprecateDialog();\n\tdeprecateErrorSummary();\n\tdeprecateFeildDescription();\n\tdeprecateFieldValidation();\n\tdeprecatePopoverPosition();\n\tdeprecateField(); // Should run after other field deprecations to access correct data-attributes\n\tdeprecateToggleGroup();\n\tdeprecateUCombobox();\n\tdeprecateUTabs();\n}, 200);\n\nonHotReload(\"deprecations\", () => [\n\tunbindFields, // Return as cleanup function\n\ton(document, \"click\", handleCommandClick, QUICK_EVENT),\n\ton(document, \"toggle\", deprecateDialog, true),\n\tonMutation(document, handleDeprecations, {\n\t\tattributeFilter: [\n\t\t\t\"class\",\n\t\t\t\"data-command\",\n\t\t\t\"data-count\",\n\t\t\t\"data-description\",\n\t\t\t\"data-variant\",\n\t\t\t\"open\",\n\t\t],\n\t\tattributes: true,\n\t\tchildList: true,\n\t\tsubtree: true,\n\t}),\n]);\n"],"names":["DEPRECATIONS","deprecate","el","warn","from","to","TOGGLEGROUPS","getByCSSModule","CSS_BUTTON","styles","deprecateToggleGroup","attr","label","BREADCRUMBS","deprecateBreadcrumbs","ERRORSUMMARYS","deprecateErrorSummary","DIALOGS","deprecateDialog","closedby","deprecateCounter","count","deprecateDataCommand","command","TABS","isBrowser","deprecateUTabs","CSS_SUGGESTION","OLD","NEW","deprecateUCombobox","handleCommandClick","row","dialog","FIELDS","FIELD_UNBIND","deprecateField","DSFieldElement","unbindFields","CSS_DESCRIPTIONS","deprecateFeildDescription","VALIDATIONS","deprecateFieldValidation","deprecatePopoverPosition","handleDeprecations","debounce","onHotReload","on","QUICK_EVENT","onMutation"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"deprecations.js","sources":["../designsystem/deprecations.ts"],"sourcesContent":["import { DSFieldElement } from \".\";\nimport styles from \"./styles.module.css\";\nimport {\n\tattr,\n\tdebounce,\n\tgetByCSSModule,\n\tisBrowser,\n\ton,\n\tonHotReload,\n\tonMutation,\n\tQUICK_EVENT,\n} from \"./utils\";\n\nconst DEPRECATIONS = new WeakSet<Element>();\nconst deprecate = (el: Element) =>\n\t!DEPRECATIONS.has(el) && DEPRECATIONS.add(el);\n\nconst warn = (from: string, to: string, el: Element) =>\n\twindow.dsWarnings === false ||\n\tconsole.warn(\n\t\t`\\x1B[1m@mattilsynet/design:\\x1B[m ${from} is deprecated, please use ${to}:`,\n\t\tel,\n\t);\n\n// Deprecate togglegroup without data-toggle-group attribute\nconst TOGGLEGROUPS = getByCSSModule(\"togglegroup\");\nconst CSS_BUTTON = styles.button.split(\" \");\nconst deprecateToggleGroup = () => {\n\tfor (const el of TOGGLEGROUPS) {\n\t\tif (deprecate(el) && !el.hasAttribute(\"data-toggle-group\")) {\n\t\t\tattr(el, \"data-toggle-group\", \"Valgknapper\");\n\t\t\twarn(\n\t\t\t\t'Only setting class=\"styles.togglegroup\"',\n\t\t\t\t'data-toggle-group=\"LABEL-HERE\" attribute also for better accessibility',\n\t\t\t\tel,\n\t\t\t);\n\t\t}\n\t\tfor (const label of el.getElementsByTagName(\"label\")) {\n\t\t\tif (deprecate(label) && !label.classList.contains(CSS_BUTTON[0])) {\n\t\t\t\tlabel.classList.add(...CSS_BUTTON);\n\t\t\t\twarn(\n\t\t\t\t\t'Only setting class=\"styles.button\"',\n\t\t\t\t\t`<label class=\"styles.button\">`,\n\t\t\t\t\tlabel,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Deprecate errorsummary without ds-error-summary element\nconst BREADCRUMBS = getByCSSModule(\"breadcrumbs\");\nconst deprecateBreadcrumbs = () => {\n\tfor (const el of BREADCRUMBS)\n\t\tif (deprecate(el) && el.nodeName !== \"DS-BREADCRUMBS\") {\n\t\t\tel.classList.add(...styles.breadcrumbs.split(\" \"));\n\t\t\twarn(\n\t\t\t\t'Only setting class=\"styles.breadcrumbs\"',\n\t\t\t\t'<ds-breadcrumbs class=\"styles.breadcrumbs\">',\n\t\t\t\tel,\n\t\t\t);\n\t\t}\n};\n\n// Deprecate errorsummary without ds-error-summary element\nconst ERRORSUMMARYS = getByCSSModule(\"errorsummary\");\nconst deprecateErrorSummary = () => {\n\tfor (const el of ERRORSUMMARYS)\n\t\tif (deprecate(el) && el.nodeName !== \"DS-ERROR-SUMMARY\") {\n\t\t\twarn(\n\t\t\t\t'Only setting class=\"styles.errorsummary\"',\n\t\t\t\t'<ds-error-summary class=\"styles.errorsummary\">',\n\t\t\t\tel,\n\t\t\t);\n\t\t}\n};\n\n// Deprecate data-variant and data-modal and data-closedby on dialogs\nconst DIALOGS = getByCSSModule(\"dialog\") as HTMLCollectionOf<HTMLDialogElement>;\nconst deprecateDialog = () => {\n\tfor (const el of DIALOGS) {\n\t\tif (deprecate(el)) {\n\t\t\tconst closedby = attr(el, \"data-closedby\");\n\t\t\tif (closedby) {\n\t\t\t\tattr(el, \"closedby\", closedby);\n\t\t\t\twarn(\n\t\t\t\t\t`<dialog data-closedby=\"${closedby}\">`,\n\t\t\t\t\t`<dialog closedby=\"${closedby}\">`,\n\t\t\t\t\tel,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (el.hasAttribute(\"data-variant\")) {\n\t\t\t\twarn(\n\t\t\t\t\t'<dialog data-variant=\"drawer\">',\n\t\t\t\t\t'<dialog data-placement=\"center|left|right|top|bottom\">',\n\t\t\t\t\tel,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (el.isConnected && el.showModal && el.close) {\n\t\t\tif (\n\t\t\t\tel.matches('[open][data-modal]:not([data-modal=\"false\"]):not(:modal)')\n\t\t\t) {\n\t\t\t\twarn(\n\t\t\t\t\t'<dialog data-modal=\"true\">',\n\t\t\t\t\t'.showModal() or <button command=\"show-modal\" commandfor=\"DIALOG-ID\"></button>',\n\t\t\t\t\tel,\n\t\t\t\t);\n\t\t\t\tattr(el, \"open\", null); // Using attribute instead of .close to avoid `close` event\n\t\t\t\tel.showModal();\n\t\t\t} else if (el.matches(\":modal:not([open])\")) {\n\t\t\t\tattr(el, \"open\", \"\"); // Set as open\n\t\t\t\tel.close(); // So we correctly can call .close, removing <dialog> from #top-layer\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Deprecate data-count in favor of data-limit\nconst deprecateCounter = () => {\n\tfor (const el of document.querySelectorAll(\"[data-count]\"))\n\t\tif (deprecate(el)) {\n\t\t\tconst count = attr(el, \"data-count\");\n\t\t\tel.classList.add(...styles.validation.split(\" \"));\n\t\t\tattr(el, \"data-limit\", count);\n\t\t\twarn(\n\t\t\t\t`data-count=\"${count}\"`,\n\t\t\t\t`class=\"styles.validation\" data-field=\"counter\" data-limit=\"${count}\"`,\n\t\t\t\tel,\n\t\t\t);\n\t\t}\n};\n\n// Deprecate data-command on buttons and other elements\nconst deprecateDataCommand = () => {\n\tfor (const el of document.querySelectorAll(\"[data-command]\"))\n\t\tif (deprecate(el)) {\n\t\t\tconst command = attr(el, \"data-command\");\n\n\t\t\tif (command === \"row\")\n\t\t\t\twarn(\n\t\t\t\t\t`<${el.nodeName.toLowerCase()} data-command=\"${command}\">`,\n\t\t\t\t\t`<tr data-clickdelegatefor=\"${el.nodeName}-ID\">`,\n\t\t\t\t\tel,\n\t\t\t\t);\n\t\t\telse\n\t\t\t\twarn(\n\t\t\t\t\t`<button data-command=\"${command}\">`,\n\t\t\t\t\t`<button command=\"${command?.replace(\"toggle-app-expanded\", \"show-modal\")}\" commandfor=\"TARGET-ID\">`,\n\t\t\t\t\tel,\n\t\t\t\t);\n\t\t}\n};\n\n// Deprecate u-tabs\nconst TABS = isBrowser() ? document.getElementsByTagName(\"u-tabs\") : [];\nconst deprecateUTabs = () => {\n\tfor (const el of TABS) if (deprecate(el)) warn(\"u-tabs\", \"ds-tabs\", el);\n};\n\n// Deprecate u-combobox and add class to ds-suggestion\nconst CSS_SUGGESTION = styles.suggestion.split(\" \");\nconst OLD = isBrowser() ? document.getElementsByTagName(\"u-combobox\") : [];\nconst NEW = isBrowser() ? document.getElementsByTagName(\"ds-suggestion\") : [];\nconst deprecateUCombobox = () => {\n\tfor (const el of OLD)\n\t\tif (deprecate(el)) {\n\t\t\tel.classList.add(...CSS_SUGGESTION);\n\t\t\twarn(\"<u-combobox>\", `<ds-suggestion class=\"styles.suggestion\">`, el);\n\t\t}\n\tfor (const el of NEW)\n\t\tif (deprecate(el) && !el.classList.contains(CSS_SUGGESTION[0])) {\n\t\t\tel.classList.add(...CSS_SUGGESTION);\n\t\t\twarn(\n\t\t\t\t\"Only using <ds-suggestion>\",\n\t\t\t\t`<ds-suggestion class=\"styles.suggestion\">`,\n\t\t\t\tel,\n\t\t\t);\n\t\t}\n};\n\nconst handleCommandClick = ({ target: el }: Event) => {\n\tif (el instanceof Element === false) return;\n\tconst row = el?.closest(\"tr\")?.querySelector('[data-command=\"row\"]');\n\tconst click =\n\t\trow && !el?.closest('a,button,label,input,select,textarea,[role=\"button\"]');\n\tif (click) (row as HTMLElement).click(); // Forward click to data-command=\"row\" element\n\n\tconst dialog = el?.closest(\"dialog\");\n\tconst close = dialog && el?.closest('[data-command=\"close\"]');\n\tif (close) dialog.close();\n};\n\n// Deprecate fields without ds-field element\nconst FIELDS = getByCSSModule(\"field\");\nconst FIELD_UNBIND = new Set<Element>();\nconst deprecateField = () => {\n\tfor (const el of FIELDS)\n\t\tif (el.nodeName !== \"DS-FIELD\") {\n\t\t\tif (!deprecate(el))\n\t\t\t\twarn(\n\t\t\t\t\t'Only setting class=\"styles.field\"',\n\t\t\t\t\t'<ds-field class=\"styles.field\">',\n\t\t\t\t\tel,\n\t\t\t\t);\n\t\t\tif (!FIELD_UNBIND.has(el) && FIELD_UNBIND.add(el)) {\n\t\t\t\tDSFieldElement.prototype.connectedCallback.call(el as DSFieldElement);\n\t\t\t}\n\t\t}\n};\nconst unbindFields = () => {\n\tfor (const el of FIELD_UNBIND) {\n\t\tDSFieldElement.prototype.disconnectedCallback.call(el as DSFieldElement);\n\t\tFIELD_UNBIND.delete(el);\n\t}\n};\n\n// Deprecate validation without data-field=\"validation\"\nconst CSS_DESCRIPTIONS = `[data-description], .${styles.field.split(\" \")[0]} label + p`;\nconst deprecateFeildDescription = () => {\n\tfor (const el of document.querySelectorAll(CSS_DESCRIPTIONS))\n\t\tif (deprecate(el) && el.getAttribute(\"data-field\") !== \"description\") {\n\t\t\tattr(el, \"data-field\", \"description\");\n\t\t\twarn(\n\t\t\t\t\"Descriptions created by data-description of <p> only\",\n\t\t\t\t'data-field=\"data-description\"',\n\t\t\t\tel,\n\t\t\t);\n\t\t}\n};\n\n// Deprecate validation without data-field=\"validation\"\nconst VALIDATIONS = getByCSSModule(\"validation\");\nconst deprecateFieldValidation = () => {\n\tfor (const el of VALIDATIONS)\n\t\tif (deprecate(el) && !el.hasAttribute(\"data-field\")) {\n\t\t\tattr(el, \"data-field\", \"validation\");\n\t\t\twarn(\n\t\t\t\t'Only setting class=\"styles.validation\"',\n\t\t\t\t'class=\"styles.validation\" data-field=\"validation\"',\n\t\t\t\tel,\n\t\t\t);\n\t\t}\n};\n\nconst deprecatePopoverPosition = () => {\n\tfor (const el of document.querySelectorAll(\"[popover][data-position]\"))\n\t\tif (deprecate(el)) {\n\t\t\tattr(el, \"data-placement\", attr(el, \"data-position\"));\n\t\t\twarn(\"data-position\", \"data-placement\", el);\n\t\t}\n};\n\nconst handleDeprecations = debounce(() => {\n\tif (!isBrowser()) return; // Check if document is still available, since this can run in test environments after document is destroyed\n\tdeprecateCounter();\n\tdeprecateDataCommand();\n\tdeprecateBreadcrumbs();\n\tdeprecateDialog();\n\tdeprecateErrorSummary();\n\tdeprecateFeildDescription();\n\tdeprecateFieldValidation();\n\tdeprecatePopoverPosition();\n\tdeprecateField(); // Should run after other field deprecations to access correct data-attributes\n\tdeprecateToggleGroup();\n\tdeprecateUCombobox();\n\tdeprecateUTabs();\n}, 200);\n\nonHotReload(\"deprecations\", () => [\n\tunbindFields, // Return as cleanup function\n\ton(document, \"click\", handleCommandClick, QUICK_EVENT),\n\ton(document, \"toggle\", deprecateDialog, true),\n\tonMutation(document, handleDeprecations, {\n\t\tattributeFilter: [\n\t\t\t\"class\",\n\t\t\t\"data-command\",\n\t\t\t\"data-count\",\n\t\t\t\"data-description\",\n\t\t\t\"data-variant\",\n\t\t\t\"open\",\n\t\t],\n\t\tattributes: true,\n\t\tchildList: true,\n\t\tsubtree: true,\n\t}),\n]);\n"],"names":["DEPRECATIONS","deprecate","el","warn","from","to","TOGGLEGROUPS","getByCSSModule","CSS_BUTTON","styles","deprecateToggleGroup","attr","label","BREADCRUMBS","deprecateBreadcrumbs","ERRORSUMMARYS","deprecateErrorSummary","DIALOGS","deprecateDialog","closedby","deprecateCounter","count","deprecateDataCommand","command","TABS","isBrowser","deprecateUTabs","CSS_SUGGESTION","OLD","NEW","deprecateUCombobox","handleCommandClick","row","dialog","FIELDS","FIELD_UNBIND","deprecateField","DSFieldElement","unbindFields","CSS_DESCRIPTIONS","deprecateFeildDescription","VALIDATIONS","deprecateFieldValidation","deprecatePopoverPosition","handleDeprecations","debounce","onHotReload","on","QUICK_EVENT","onMutation"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DSErrorSummaryElement } from '
|
|
1
|
+
import { DSErrorSummaryElement } from '../';
|
|
2
2
|
import { CustomReactElementProps } from '../react-types';
|
|
3
3
|
export type ErrorsummaryProps = CustomReactElementProps<DSErrorSummaryElement>;
|
|
4
4
|
export declare const Errorsummary: import('react').ForwardRefExoticComponent<Omit<ErrorsummaryProps, "ref"> & import('react').RefAttributes<DSErrorSummaryElement>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorsummary.js","sources":["../../designsystem/errorsummary/errorsummary.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"errorsummary.js","sources":["../../designsystem/errorsummary/errorsummary.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { DSErrorSummaryElement } from \"../\";\nimport type { CustomReactElementProps } from \"../react-types\";\nimport styles from \"../styles.module.css\";\nimport { toCustomElementProps } from \"../utils\";\n\nexport type ErrorsummaryProps = CustomReactElementProps<DSErrorSummaryElement>;\n\nexport const Errorsummary = forwardRef<\n\tDSErrorSummaryElement,\n\tErrorsummaryProps\n>(function Errorsummary(rest, ref) {\n\treturn (\n\t\t<ds-error-summary\n\t\t\tref={ref}\n\t\t\t{...toCustomElementProps(rest, styles.errorsummary)}\n\t\t/>\n\t);\n});\n"],"names":["Errorsummary","forwardRef","rest","ref","jsx","toCustomElementProps","styles"],"mappings":";;;;AAQO,MAAMA,IAAeC,EAG1B,SAAsBC,GAAMC,GAAK;AAClC,SACC,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,KAAAD;AAAA,MACC,GAAGE,EAAqBH,GAAMI,EAAO,YAAY;AAAA,IAAA;AAAA,EAAA;AAGrD,CAAC;"}
|
package/mtds/field/field.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { DSSuggestionElement } from '@digdir/designsystemet-web';
|
|
2
1
|
import { Placement } from '@floating-ui/dom';
|
|
3
2
|
import { JSX } from 'react';
|
|
3
|
+
import { DSSuggestionElement } from '..';
|
|
4
4
|
import { InputProps } from '../input/input';
|
|
5
5
|
import { CustomReactElementProps, PolymorphicComponentPropWithRef } from '../react-types';
|
|
6
6
|
type FieldBaseProps = {
|
package/mtds/field/field.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field.js","sources":["../../designsystem/field/field.tsx"],"sourcesContent":["\"use client\";\nimport type { DSSuggestionElement } from \"@digdir/designsystemet-web\";\nimport type { Placement } from \"@floating-ui/dom\";\nimport clsx from \"clsx\";\nimport type { JSX } from \"react\";\nimport { forwardRef, useEffect, useImperativeHandle, useRef } from \"react\";\nimport { HelpText } from \"../helptext/helptext\";\nimport { Input, type InputProps } from \"../input/input\";\nimport type {\n\tCustomReactElementProps,\n\tPolymorphicComponentPropWithRef,\n\tPolymorphicRef,\n} from \"../react-types\";\nimport styles from \"../styles.module.css\";\nimport { toCustomElementProps } from \"../utils\";\nimport { Validation } from \"../validation/validation\";\n\ntype FieldBaseProps = {\n\t\"data-required\"?: \"hidden\";\n\tcount?: number;\n\tdescription?: React.ReactNode;\n\terror?: React.ReactNode; // Kept for backwards compatibility\n\thelpText?: React.ReactNode;\n\thelpTextLabel?: string;\n\tlabel?: React.ReactNode;\n\toptions?: string[] | FieldSuggestionSelected;\n\tprefix?: string;\n\treadOnly?: boolean; // Allow readoOnly also on <select>\n\tsuffix?: string;\n\tvalidation?: React.ReactNode;\n};\n\nexport type FieldProps<As extends React.ElementType = \"div\"> =\n\tPolymorphicComponentPropWithRef<As, FieldBaseProps>;\n\ntype FieldComponent = <As extends React.ElementType = \"div\">(\n\tprops: FieldProps<As>,\n) => JSX.Element;\n\nconst toOption = (\n\to: FieldSuggestionSelected[number] | string,\n): FieldSuggestionSelected[number] =>\n\ttypeof o === \"string\" ? { label: o, value: o } : o;\n\nexport const FieldComp: FieldComponent = forwardRef<null>(function Field<\n\tAs extends React.ElementType = \"div\",\n>(\n\t{\n\t\t\"data-size\": size,\n\t\t\"data-required\": dataRequired,\n\t\tas,\n\t\tclassName,\n\t\tcount,\n\t\tdescription,\n\t\terror,\n\t\thelpText,\n\t\thelpTextLabel,\n\t\tlabel,\n\t\tprefix,\n\t\tstyle,\n\t\tsuffix,\n\t\tvalidation: validationContent,\n\t\t...rest\n\t}: FieldProps<As>,\n\tref?: PolymorphicRef<As>,\n) {\n\tconst Tag = as || \"ds-field\";\n\tconst affixes = !!suffix || !!prefix;\n\tconst validation = validationContent || error; // error kept for backwards compatibility\n\tconst shared = {\n\t\t\"data-size\": size,\n\t\t\"data-required\": dataRequired,\n\t\tclass: clsx(styles.field, className),\n\t\tsuppressHydrationWarning: true,\n\t\tstyle,\n\t};\n\n\t// Render options if select\n\tif (as === \"select\" && !rest.children)\n\t\tObject.assign(rest, {\n\t\t\toptions: undefined, // Ensure options is not passed to DOM\n\t\t\tchildren: (\n\t\t\t\t<>\n\t\t\t\t\t{(rest.options as FieldBaseProps[\"options\"])\n\t\t\t\t\t\t?.map(toOption)\n\t\t\t\t\t\t.map(({ label, value }) => (\n\t\t\t\t\t\t\t<option key={value} value={value}>\n\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t))}\n\t\t\t\t</>\n\t\t\t),\n\t\t});\n\n\t// Using suppressHydrationWarning to avoid Next.js vs field-observer.ts hydration conflict\n\treturn as ? (\n\t\t<ds-field {...shared}>\n\t\t\t{!!label && <FieldLabel>{label}</FieldLabel>}\n\t\t\t{!!helpText && <HelpText aria-label={helpTextLabel}>{helpText}</HelpText>}\n\t\t\t{!!description && <FieldDescription>{description}</FieldDescription>}\n\t\t\t{affixes ? (\n\t\t\t\t<FieldAffixes>\n\t\t\t\t\t{!!prefix && <span>{prefix}</span>}\n\t\t\t\t\t<Tag\n\t\t\t\t\t\tclassName={typeof as === \"string\" ? styles.input : undefined}\n\t\t\t\t\t\tsuppressHydrationWarning\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t{...rest}\n\t\t\t\t\t/>\n\t\t\t\t\t{!!suffix && <span>{suffix}</span>}\n\t\t\t\t</FieldAffixes>\n\t\t\t) : (\n\t\t\t\t<Tag\n\t\t\t\t\tclassName={typeof as === \"string\" ? styles.input : undefined}\n\t\t\t\t\tsuppressHydrationWarning\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...rest}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{!!validation && <Validation>{validation}</Validation>}\n\t\t\t{!!count && <FieldCount data-limit={count} />}\n\t\t</ds-field>\n\t) : (\n\t\t<ds-field ref={ref} {...shared} {...rest} />\n\t);\n}) as FieldComponent; // Needed to tell Typescript this does not return ReactNode but acutally JSX.Element\n\nexport type FieldAffixProps = React.ComponentPropsWithoutRef<\"div\">;\nconst FieldAffixes = forwardRef<HTMLDivElement, FieldAffixProps>(\n\tfunction FieldAffixes({ className, ...rest }, ref) {\n\t\treturn (\n\t\t\t<div className={clsx(styles.affixes, className)} ref={ref} {...rest} />\n\t\t);\n\t},\n);\n\nexport type FieldDatalistProps = React.ComponentPropsWithoutRef<\"datalist\"> & {\n\t\"data-nofilter\"?: boolean;\n\t/**\n\t * @deprecated Use `data-placement` instead.\n\t */\n\t\"data-position\"?: Placement;\n\t\"data-placement\"?: Placement;\n};\n\nconst FieldDatalist = forwardRef<HTMLDataListElement, FieldDatalistProps>(\n\tfunction FieldDatalist(\n\t\t{ \"data-position\": placement, \"data-nofilter\": filter, ...rest },\n\t\tref,\n\t) {\n\t\treturn (\n\t\t\t<u-datalist\n\t\t\t\tdata-placement={placement} // Backward compatibility\n\t\t\t\tdata-nofilter={!!filter || undefined} // Ensure data-nofilter is set correctly\n\t\t\t\tref={ref}\n\t\t\t\t{...toCustomElementProps(rest)}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nexport type FieldOptionProps = React.ComponentPropsWithoutRef<\"option\">;\nconst FieldOption = forwardRef<HTMLOptionElement, FieldOptionProps>(\n\tfunction FieldOption(props, ref) {\n\t\treturn <u-option ref={ref} {...toCustomElementProps(props)} />;\n\t},\n);\n\nexport type FieldComboboxSelected = FieldSuggestionSelected; // Backwards compatibility\nexport type FieldComboboxProps = FieldSuggestionProps; // Backwards compatibility\n\nexport type FieldSuggestionSelected = {\n\tlabel: string;\n\tvalue: string;\n\tchildren?: React.ReactNode;\n}[];\nexport type FieldSuggestionProps = Omit<\n\tCustomReactElementProps<DSSuggestionElement>,\n\t\"onChange\" | \"onInput\"\n> & {\n\t\"data-creatable\"?: boolean;\n\t\"data-multiple\"?: boolean;\n\t\"data-variant\"?: \"inside\";\n\tonAfterChange?: (e: CustomEvent<HTMLDataElement>) => void; // Backwards compatibility\n\tonAfterSelect?: (e: CustomEvent<HTMLDataElement>) => void; // Custom event to handle before change\n\tonBeforeChange?: (e: CustomEvent<HTMLDataElement>) => void; // Backwards compatibility\n\tonBeforeMatch?: (e: CustomEvent<HTMLOptionElement>) => void; // Custom event to handle before change\n\tonBeforeSelect?: (e: CustomEvent<HTMLDataElement>) => void; // Custom event to handle before change\n\tonSelectedChange?: (selected: FieldSuggestionSelected) => void; // Allow onChange to be a function that returns void\n\toptions?: FieldSuggestionSelected;\n\tselected?: FieldSuggestionSelected; // Allow value to be a string or an array of strings for multiple select\n} & Pick<\n\t\tInputProps,\n\t\t| \"disabled\"\n\t\t| \"name\"\n\t\t| \"onChange\"\n\t\t| \"onInput\"\n\t\t| \"placeholder\"\n\t\t| \"readOnly\"\n\t\t| \"type\"\n\t\t| \"value\"\n\t> & // Allow input props to be passed down\n\tPick<\n\t\tFieldDatalistProps,\n\t\t\"data-position\" | \"data-placement\" | \"data-nofilter\"\n\t>; // Allow datalist props to be passed down\n\nconst FieldSuggestion = forwardRef<DSSuggestionElement, FieldSuggestionProps>(\n\tfunction FieldSuggestion(\n\t\t{\n\t\t\t\"aria-required\": required,\n\t\t\t\"data-position\": position,\n\t\t\t\"data-placement\": placement,\n\t\t\t\"data-nofilter\": nofilter,\n\t\t\t\"data-multiple\": multiple,\n\t\t\tonAfterChange, // Backwards compatibility\n\t\t\tonAfterSelect,\n\t\t\tonBeforeChange, // Backwards compatibility\n\t\t\tonBeforeMatch,\n\t\t\tonBeforeSelect,\n\t\t\tonSelectedChange,\n\t\t\tonInput,\n\t\t\tonChange,\n\t\t\tchildren,\n\t\t\tdisabled,\n\t\t\tname,\n\t\t\toptions,\n\t\t\tplaceholder,\n\t\t\treadOnly,\n\t\t\tselected,\n\t\t\ttype,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) {\n\t\tconst innerRef = useRef<DSSuggestionElement>(null);\n\t\tconst onSelected = useRef(onSelectedChange);\n\t\tonSelected.current = onSelectedChange; // Sync the latest onSelectedChange function\n\n\t\t// Deprecated props\n\t\tif (onAfterChange) {\n\t\t\tonAfterSelect = onAfterChange;\n\t\t\twindow.dsWarnings === false ||\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`\\x1B[1m@mattilsynet/design - deprecation warning:\\x1B[m onAfterChange is deprecated, please use onAfterSelect instead`,\n\t\t\t\t);\n\t\t}\n\n\t\tif (onBeforeChange) {\n\t\t\tonBeforeSelect = onBeforeChange;\n\t\t\twindow.dsWarnings === false ||\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`\\x1B[1m@mattilsynet/design - deprecation warning:\\x1B[m onBeforeChange is deprecated, please use onBeforeSelect instead`,\n\t\t\t\t);\n\t\t}\n\n\t\t// Using useEffect for React 18 and lower compatibility\n\t\tuseImperativeHandle(ref, () => innerRef.current as DSSuggestionElement); // Forward innerRef\n\t\tuseEffect(() => {\n\t\t\tconst self = innerRef.current;\n\t\t\tconst handleChange = (event: CustomEvent<HTMLDataElement>) => {\n\t\t\t\tconst handleSelected = onSelected.current;\n\t\t\t\tif (!onSelected) return; // No onSelectedChange function provided, let ds-suggestion handle it\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst { isConnected: remove, textContent, value } = event.detail;\n\t\t\t\tconst label = textContent?.trim() || \"\";\n\t\t\t\tconst prev = selected || [];\n\n\t\t\t\tif (remove) handleSelected?.(prev.filter((i) => i.value !== value));\n\t\t\t\telse if (multiple) handleSelected?.([...prev, { value, label }]);\n\t\t\t\telse handleSelected?.([{ value, label }]);\n\t\t\t};\n\n\t\t\tself?.addEventListener(\"comboboxbeforeselect\", handleChange);\n\t\t\treturn () =>\n\t\t\t\tself?.removeEventListener(\"comboboxbeforeselect\", handleChange);\n\t\t}, [multiple, selected]);\n\n\t\treturn (\n\t\t\t<ds-suggestion\n\t\t\t\tdata-multiple={multiple || undefined}\n\t\t\t\t{...toCustomElementProps(\n\t\t\t\t\t{\n\t\t\t\t\t\toncomboboxbeforeselect: onBeforeSelect,\n\t\t\t\t\t\toncomboboxbeforematch: onBeforeMatch,\n\t\t\t\t\t\toncomboboxafterselect: onAfterSelect,\n\t\t\t\t\t\tref: innerRef,\n\t\t\t\t\t\t...props,\n\t\t\t\t\t},\n\t\t\t\t\tstyles.suggestion,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{selected?.map(({ children, label, value }) => (\n\t\t\t\t\t<data key={value} value={value} suppressHydrationWarning>\n\t\t\t\t\t\t{children ?? label}\n\t\t\t\t\t</data>\n\t\t\t\t))}\n\t\t\t\t{children || (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\taria-required={required}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tonInput={onInput}\n\t\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t\ttype={type}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<del aria-label=\"Fjern tekst\" suppressHydrationWarning />\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t\t{!!options && (\n\t\t\t\t\t<FieldDatalist\n\t\t\t\t\t\tdata-nofilter={nofilter}\n\t\t\t\t\t\tdata-placement={placement || position}\n\t\t\t\t\t>\n\t\t\t\t\t\t{options.map(toOption).map(({ children, label, value }) => (\n\t\t\t\t\t\t\t<FieldOption key={value} value={value} label={label}>\n\t\t\t\t\t\t\t\t{children ?? label}\n\t\t\t\t\t\t\t</FieldOption>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</FieldDatalist>\n\t\t\t\t)}\n\t\t\t</ds-suggestion>\n\t\t);\n\t},\n);\n\nexport type FieldLabelProps = React.ComponentPropsWithoutRef<\"label\">;\nconst FieldLabel = forwardRef<HTMLLabelElement, FieldLabelProps>(\n\tfunction FieldLabel(rest, ref) {\n\t\treturn <label suppressHydrationWarning ref={ref} {...rest} />;\n\t},\n);\n\nexport type FieldDescriptionProps = React.ComponentPropsWithoutRef<\"p\">;\nconst FieldDescription = forwardRef<\n\tHTMLParagraphElement,\n\tFieldDescriptionProps\n>(function FieldDescription(rest, ref) {\n\treturn (\n\t\t<div\n\t\t\tsuppressHydrationWarning\n\t\t\tdata-field=\"description\"\n\t\t\tref={ref}\n\t\t\t{...rest}\n\t\t/>\n\t);\n});\n\nexport type FieldCountProps = React.ComponentPropsWithoutRef<\"p\"> & {\n\t/**\n\t * @deprecated Use \"data-limit\" instead\n\t */\n\t\"data-count\"?: number;\n\t\"data-limit\": number;\n};\nconst FieldCount = forwardRef<HTMLParagraphElement, FieldCountProps>(\n\tfunction FieldCount(\n\t\t{ \"data-count\": count, \"data-limit\": limit, ...rest },\n\t\tref,\n\t) {\n\t\treturn (\n\t\t\t<Validation\n\t\t\t\tdata-field=\"counter\"\n\t\t\t\tdata-limit={limit || count}\n\t\t\t\tref={ref}\n\t\t\t\t{...rest}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nexport const Field = Object.assign(FieldComp, {\n\tAffixes: FieldAffixes,\n\t/**\n\t * @deprecated Use Field.Suggestion instead\n\t */\n\tCombobox: FieldSuggestion, // Backwards compatibility\n\tSuggestion: FieldSuggestion,\n\tDatalist: FieldDatalist,\n\tOption: FieldOption,\n\tDescription: FieldDescription,\n\tLabel: FieldLabel,\n\tCount: FieldCount,\n});\n"],"names":["toOption","o","FieldComp","forwardRef","size","dataRequired","as","className","count","description","error","helpText","helpTextLabel","label","prefix","style","suffix","validationContent","rest","ref","Tag","affixes","validation","shared","clsx","styles","value","jsx","jsxs","FieldLabel","HelpText","FieldDescription","FieldAffixes","Validation","FieldCount","FieldDatalist","placement","filter","toCustomElementProps","FieldOption","props","FieldSuggestion","required","position","nofilter","multiple","onAfterChange","onAfterSelect","onBeforeChange","onBeforeMatch","onBeforeSelect","onSelectedChange","onInput","onChange","children","disabled","name","options","placeholder","readOnly","selected","type","innerRef","useRef","onSelected","useImperativeHandle","useEffect","self","handleChange","event","handleSelected","remove","textContent","prev","i","Fragment","Input","limit","Field"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"field.js","sources":["../../designsystem/field/field.tsx"],"sourcesContent":["\"use client\";\nimport type { Placement } from \"@floating-ui/dom\";\nimport clsx from \"clsx\";\nimport type { JSX } from \"react\";\nimport { forwardRef, useEffect, useImperativeHandle, useRef } from \"react\";\nimport type { DSSuggestionElement } from \"..\";\nimport { HelpText } from \"../helptext/helptext\";\nimport { Input, type InputProps } from \"../input/input\";\nimport type {\n\tCustomReactElementProps,\n\tPolymorphicComponentPropWithRef,\n\tPolymorphicRef,\n} from \"../react-types\";\nimport styles from \"../styles.module.css\";\nimport { toCustomElementProps } from \"../utils\";\nimport { Validation } from \"../validation/validation\";\n\ntype FieldBaseProps = {\n\t\"data-required\"?: \"hidden\";\n\tcount?: number;\n\tdescription?: React.ReactNode;\n\terror?: React.ReactNode; // Kept for backwards compatibility\n\thelpText?: React.ReactNode;\n\thelpTextLabel?: string;\n\tlabel?: React.ReactNode;\n\toptions?: string[] | FieldSuggestionSelected;\n\tprefix?: string;\n\treadOnly?: boolean; // Allow readoOnly also on <select>\n\tsuffix?: string;\n\tvalidation?: React.ReactNode;\n};\n\nexport type FieldProps<As extends React.ElementType = \"div\"> =\n\tPolymorphicComponentPropWithRef<As, FieldBaseProps>;\n\ntype FieldComponent = <As extends React.ElementType = \"div\">(\n\tprops: FieldProps<As>,\n) => JSX.Element;\n\nconst toOption = (\n\to: FieldSuggestionSelected[number] | string,\n): FieldSuggestionSelected[number] =>\n\ttypeof o === \"string\" ? { label: o, value: o } : o;\n\nexport const FieldComp: FieldComponent = forwardRef<null>(function Field<\n\tAs extends React.ElementType = \"div\",\n>(\n\t{\n\t\t\"data-size\": size,\n\t\t\"data-required\": dataRequired,\n\t\tas,\n\t\tclassName,\n\t\tcount,\n\t\tdescription,\n\t\terror,\n\t\thelpText,\n\t\thelpTextLabel,\n\t\tlabel,\n\t\tprefix,\n\t\tstyle,\n\t\tsuffix,\n\t\tvalidation: validationContent,\n\t\t...rest\n\t}: FieldProps<As>,\n\tref?: PolymorphicRef<As>,\n) {\n\tconst Tag = as || \"ds-field\";\n\tconst affixes = !!suffix || !!prefix;\n\tconst validation = validationContent || error; // error kept for backwards compatibility\n\tconst shared = {\n\t\t\"data-size\": size,\n\t\t\"data-required\": dataRequired,\n\t\tclass: clsx(styles.field, className),\n\t\tsuppressHydrationWarning: true,\n\t\tstyle,\n\t};\n\n\t// Render options if select\n\tif (as === \"select\" && !rest.children)\n\t\tObject.assign(rest, {\n\t\t\toptions: undefined, // Ensure options is not passed to DOM\n\t\t\tchildren: (\n\t\t\t\t<>\n\t\t\t\t\t{(rest.options as FieldBaseProps[\"options\"])\n\t\t\t\t\t\t?.map(toOption)\n\t\t\t\t\t\t.map(({ label, value }) => (\n\t\t\t\t\t\t\t<option key={value} value={value}>\n\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t))}\n\t\t\t\t</>\n\t\t\t),\n\t\t});\n\n\t// Using suppressHydrationWarning to avoid Next.js vs field-observer.ts hydration conflict\n\treturn as ? (\n\t\t<ds-field {...shared}>\n\t\t\t{!!label && <FieldLabel>{label}</FieldLabel>}\n\t\t\t{!!helpText && <HelpText aria-label={helpTextLabel}>{helpText}</HelpText>}\n\t\t\t{!!description && <FieldDescription>{description}</FieldDescription>}\n\t\t\t{affixes ? (\n\t\t\t\t<FieldAffixes>\n\t\t\t\t\t{!!prefix && <span>{prefix}</span>}\n\t\t\t\t\t<Tag\n\t\t\t\t\t\tclassName={typeof as === \"string\" ? styles.input : undefined}\n\t\t\t\t\t\tsuppressHydrationWarning\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t{...rest}\n\t\t\t\t\t/>\n\t\t\t\t\t{!!suffix && <span>{suffix}</span>}\n\t\t\t\t</FieldAffixes>\n\t\t\t) : (\n\t\t\t\t<Tag\n\t\t\t\t\tclassName={typeof as === \"string\" ? styles.input : undefined}\n\t\t\t\t\tsuppressHydrationWarning\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...rest}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{!!validation && <Validation>{validation}</Validation>}\n\t\t\t{!!count && <FieldCount data-limit={count} />}\n\t\t</ds-field>\n\t) : (\n\t\t<ds-field ref={ref} {...shared} {...rest} />\n\t);\n}) as FieldComponent; // Needed to tell Typescript this does not return ReactNode but acutally JSX.Element\n\nexport type FieldAffixProps = React.ComponentPropsWithoutRef<\"div\">;\nconst FieldAffixes = forwardRef<HTMLDivElement, FieldAffixProps>(\n\tfunction FieldAffixes({ className, ...rest }, ref) {\n\t\treturn (\n\t\t\t<div className={clsx(styles.affixes, className)} ref={ref} {...rest} />\n\t\t);\n\t},\n);\n\nexport type FieldDatalistProps = React.ComponentPropsWithoutRef<\"datalist\"> & {\n\t\"data-nofilter\"?: boolean;\n\t/**\n\t * @deprecated Use `data-placement` instead.\n\t */\n\t\"data-position\"?: Placement;\n\t\"data-placement\"?: Placement;\n};\n\nconst FieldDatalist = forwardRef<HTMLDataListElement, FieldDatalistProps>(\n\tfunction FieldDatalist(\n\t\t{ \"data-position\": placement, \"data-nofilter\": filter, ...rest },\n\t\tref,\n\t) {\n\t\treturn (\n\t\t\t<u-datalist\n\t\t\t\tdata-placement={placement} // Backward compatibility\n\t\t\t\tdata-nofilter={!!filter || undefined} // Ensure data-nofilter is set correctly\n\t\t\t\tref={ref}\n\t\t\t\t{...toCustomElementProps(rest)}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nexport type FieldOptionProps = React.ComponentPropsWithoutRef<\"option\">;\nconst FieldOption = forwardRef<HTMLOptionElement, FieldOptionProps>(\n\tfunction FieldOption(props, ref) {\n\t\treturn <u-option ref={ref} {...toCustomElementProps(props)} />;\n\t},\n);\n\nexport type FieldComboboxSelected = FieldSuggestionSelected; // Backwards compatibility\nexport type FieldComboboxProps = FieldSuggestionProps; // Backwards compatibility\n\nexport type FieldSuggestionSelected = {\n\tlabel: string;\n\tvalue: string;\n\tchildren?: React.ReactNode;\n}[];\nexport type FieldSuggestionProps = Omit<\n\tCustomReactElementProps<DSSuggestionElement>,\n\t\"onChange\" | \"onInput\"\n> & {\n\t\"data-creatable\"?: boolean;\n\t\"data-multiple\"?: boolean;\n\t\"data-variant\"?: \"inside\";\n\tonAfterChange?: (e: CustomEvent<HTMLDataElement>) => void; // Backwards compatibility\n\tonAfterSelect?: (e: CustomEvent<HTMLDataElement>) => void; // Custom event to handle before change\n\tonBeforeChange?: (e: CustomEvent<HTMLDataElement>) => void; // Backwards compatibility\n\tonBeforeMatch?: (e: CustomEvent<HTMLOptionElement>) => void; // Custom event to handle before change\n\tonBeforeSelect?: (e: CustomEvent<HTMLDataElement>) => void; // Custom event to handle before change\n\tonSelectedChange?: (selected: FieldSuggestionSelected) => void; // Allow onChange to be a function that returns void\n\toptions?: FieldSuggestionSelected;\n\tselected?: FieldSuggestionSelected; // Allow value to be a string or an array of strings for multiple select\n} & Pick<\n\t\tInputProps,\n\t\t| \"disabled\"\n\t\t| \"name\"\n\t\t| \"onChange\"\n\t\t| \"onInput\"\n\t\t| \"placeholder\"\n\t\t| \"readOnly\"\n\t\t| \"type\"\n\t\t| \"value\"\n\t> & // Allow input props to be passed down\n\tPick<\n\t\tFieldDatalistProps,\n\t\t\"data-position\" | \"data-placement\" | \"data-nofilter\"\n\t>; // Allow datalist props to be passed down\n\nconst FieldSuggestion = forwardRef<DSSuggestionElement, FieldSuggestionProps>(\n\tfunction FieldSuggestion(\n\t\t{\n\t\t\t\"aria-required\": required,\n\t\t\t\"data-position\": position,\n\t\t\t\"data-placement\": placement,\n\t\t\t\"data-nofilter\": nofilter,\n\t\t\t\"data-multiple\": multiple,\n\t\t\tonAfterChange, // Backwards compatibility\n\t\t\tonAfterSelect,\n\t\t\tonBeforeChange, // Backwards compatibility\n\t\t\tonBeforeMatch,\n\t\t\tonBeforeSelect,\n\t\t\tonSelectedChange,\n\t\t\tonInput,\n\t\t\tonChange,\n\t\t\tchildren,\n\t\t\tdisabled,\n\t\t\tname,\n\t\t\toptions,\n\t\t\tplaceholder,\n\t\t\treadOnly,\n\t\t\tselected,\n\t\t\ttype,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) {\n\t\tconst innerRef = useRef<DSSuggestionElement>(null);\n\t\tconst onSelected = useRef(onSelectedChange);\n\t\tonSelected.current = onSelectedChange; // Sync the latest onSelectedChange function\n\n\t\t// Deprecated props\n\t\tif (onAfterChange) {\n\t\t\tonAfterSelect = onAfterChange;\n\t\t\twindow.dsWarnings === false ||\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`\\x1B[1m@mattilsynet/design - deprecation warning:\\x1B[m onAfterChange is deprecated, please use onAfterSelect instead`,\n\t\t\t\t);\n\t\t}\n\n\t\tif (onBeforeChange) {\n\t\t\tonBeforeSelect = onBeforeChange;\n\t\t\twindow.dsWarnings === false ||\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`\\x1B[1m@mattilsynet/design - deprecation warning:\\x1B[m onBeforeChange is deprecated, please use onBeforeSelect instead`,\n\t\t\t\t);\n\t\t}\n\n\t\t// Using useEffect for React 18 and lower compatibility\n\t\tuseImperativeHandle(ref, () => innerRef.current as DSSuggestionElement); // Forward innerRef\n\t\tuseEffect(() => {\n\t\t\tconst self = innerRef.current;\n\t\t\tconst handleChange = (event: CustomEvent<HTMLDataElement>) => {\n\t\t\t\tconst handleSelected = onSelected.current;\n\t\t\t\tif (!onSelected) return; // No onSelectedChange function provided, let ds-suggestion handle it\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst { isConnected: remove, textContent, value } = event.detail;\n\t\t\t\tconst label = textContent?.trim() || \"\";\n\t\t\t\tconst prev = selected || [];\n\n\t\t\t\tif (remove) handleSelected?.(prev.filter((i) => i.value !== value));\n\t\t\t\telse if (multiple) handleSelected?.([...prev, { value, label }]);\n\t\t\t\telse handleSelected?.([{ value, label }]);\n\t\t\t};\n\n\t\t\tself?.addEventListener(\"comboboxbeforeselect\", handleChange);\n\t\t\treturn () =>\n\t\t\t\tself?.removeEventListener(\"comboboxbeforeselect\", handleChange);\n\t\t}, [multiple, selected]);\n\n\t\treturn (\n\t\t\t<ds-suggestion\n\t\t\t\tdata-multiple={multiple || undefined}\n\t\t\t\t{...toCustomElementProps(\n\t\t\t\t\t{\n\t\t\t\t\t\toncomboboxbeforeselect: onBeforeSelect,\n\t\t\t\t\t\toncomboboxbeforematch: onBeforeMatch,\n\t\t\t\t\t\toncomboboxafterselect: onAfterSelect,\n\t\t\t\t\t\tref: innerRef,\n\t\t\t\t\t\t...props,\n\t\t\t\t\t},\n\t\t\t\t\tstyles.suggestion,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{selected?.map(({ children, label, value }) => (\n\t\t\t\t\t<data key={value} value={value} suppressHydrationWarning>\n\t\t\t\t\t\t{children ?? label}\n\t\t\t\t\t</data>\n\t\t\t\t))}\n\t\t\t\t{children || (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\taria-required={required}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tonInput={onInput}\n\t\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t\ttype={type}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<del aria-label=\"Fjern tekst\" suppressHydrationWarning />\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t\t{!!options && (\n\t\t\t\t\t<FieldDatalist\n\t\t\t\t\t\tdata-nofilter={nofilter}\n\t\t\t\t\t\tdata-placement={placement || position}\n\t\t\t\t\t>\n\t\t\t\t\t\t{options.map(toOption).map(({ children, label, value }) => (\n\t\t\t\t\t\t\t<FieldOption key={value} value={value} label={label}>\n\t\t\t\t\t\t\t\t{children ?? label}\n\t\t\t\t\t\t\t</FieldOption>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</FieldDatalist>\n\t\t\t\t)}\n\t\t\t</ds-suggestion>\n\t\t);\n\t},\n);\n\nexport type FieldLabelProps = React.ComponentPropsWithoutRef<\"label\">;\nconst FieldLabel = forwardRef<HTMLLabelElement, FieldLabelProps>(\n\tfunction FieldLabel(rest, ref) {\n\t\treturn <label suppressHydrationWarning ref={ref} {...rest} />;\n\t},\n);\n\nexport type FieldDescriptionProps = React.ComponentPropsWithoutRef<\"p\">;\nconst FieldDescription = forwardRef<\n\tHTMLParagraphElement,\n\tFieldDescriptionProps\n>(function FieldDescription(rest, ref) {\n\treturn (\n\t\t<div\n\t\t\tsuppressHydrationWarning\n\t\t\tdata-field=\"description\"\n\t\t\tref={ref}\n\t\t\t{...rest}\n\t\t/>\n\t);\n});\n\nexport type FieldCountProps = React.ComponentPropsWithoutRef<\"p\"> & {\n\t/**\n\t * @deprecated Use \"data-limit\" instead\n\t */\n\t\"data-count\"?: number;\n\t\"data-limit\": number;\n};\nconst FieldCount = forwardRef<HTMLParagraphElement, FieldCountProps>(\n\tfunction FieldCount(\n\t\t{ \"data-count\": count, \"data-limit\": limit, ...rest },\n\t\tref,\n\t) {\n\t\treturn (\n\t\t\t<Validation\n\t\t\t\tdata-field=\"counter\"\n\t\t\t\tdata-limit={limit || count}\n\t\t\t\tref={ref}\n\t\t\t\t{...rest}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nexport const Field = Object.assign(FieldComp, {\n\tAffixes: FieldAffixes,\n\t/**\n\t * @deprecated Use Field.Suggestion instead\n\t */\n\tCombobox: FieldSuggestion, // Backwards compatibility\n\tSuggestion: FieldSuggestion,\n\tDatalist: FieldDatalist,\n\tOption: FieldOption,\n\tDescription: FieldDescription,\n\tLabel: FieldLabel,\n\tCount: FieldCount,\n});\n"],"names":["toOption","o","FieldComp","forwardRef","size","dataRequired","as","className","count","description","error","helpText","helpTextLabel","label","prefix","style","suffix","validationContent","rest","ref","Tag","affixes","validation","shared","clsx","styles","value","jsx","jsxs","FieldLabel","HelpText","FieldDescription","FieldAffixes","Validation","FieldCount","FieldDatalist","placement","filter","toCustomElementProps","FieldOption","props","FieldSuggestion","required","position","nofilter","multiple","onAfterChange","onAfterSelect","onBeforeChange","onBeforeMatch","onBeforeSelect","onSelectedChange","onInput","onChange","children","disabled","name","options","placeholder","readOnly","selected","type","innerRef","useRef","onSelected","useImperativeHandle","useEffect","self","handleChange","event","handleSelected","remove","textContent","prev","i","Fragment","Input","limit","Field"],"mappings":";;;;;;;;AAuCA,MAAMA,IAAW,CAChBC,MAEA,OAAOA,KAAM,WAAW,EAAE,OAAOA,GAAG,OAAOA,EAAA,IAAMA,GAErCC,KAA4BC,EAAiB,SAGzD;AAAA,EACC,aAAaC;AAAA,EACb,iBAAiBC;AAAA,EACjB,IAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,eAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAYC;AAAA,EACZ,GAAGC;AACJ,GACAC,GACC;AACD,QAAMC,IAAMd,KAAM,YACZe,IAAU,CAAC,CAACL,KAAU,CAAC,CAACF,GACxBQ,IAAaL,KAAqBP,GAClCa,IAAS;AAAA,IACd,aAAanB;AAAA,IACb,iBAAiBC;AAAA,IACjB,OAAOmB,EAAKC,EAAO,OAAOlB,CAAS;AAAA,IACnC,0BAA0B;AAAA,IAC1B,OAAAQ;AAAA,EAAA;AAID,SAAIT,MAAO,YAAY,CAACY,EAAK,YAC5B,OAAO,OAAOA,GAAM;AAAA,IACnB,SAAS;AAAA;AAAA,IACT,iCAEI,UAAAA,EAAK,SACJ,IAAIlB,CAAQ,EACb,IAAI,CAAC,EAAE,OAAAa,GAAO,OAAAa,EAAA,MACd,gBAAAC,EAAC,UAAA,EAAmB,OAAAD,GAClB,UAAAb,EAAAA,GADWa,CAEb,CACA,EAAA,CACH;AAAA,EAAA,CAED,GAGKpB,IACN,gBAAAsB,EAAC,YAAA,EAAU,GAAGL,GACZ,UAAA;AAAA,IAAA,CAAC,CAACV,KAAS,gBAAAc,EAACE,GAAA,EAAY,UAAAhB,GAAM;AAAA,IAC9B,CAAC,CAACF,uBAAamB,IAAA,EAAS,cAAYlB,GAAgB,UAAAD,GAAS;AAAA,IAC7D,CAAC,CAACF,KAAe,gBAAAkB,EAACI,KAAkB,UAAAtB,GAAY;AAAA,IAChDY,sBACCW,GAAA,EACC,UAAA;AAAA,MAAA,CAAC,CAAClB,KAAU,gBAAAa,EAAC,QAAA,EAAM,UAAAb,GAAO;AAAA,MAC3B,gBAAAa;AAAA,QAACP;AAAA,QAAA;AAAA,UACA,WAAW,OAAOd,KAAO,WAAWmB,EAAO,QAAQ;AAAA,UACnD,0BAAwB;AAAA,UACxB,KAAAN;AAAA,UACC,GAAGD;AAAA,QAAA;AAAA,MAAA;AAAA,MAEJ,CAAC,CAACF,KAAU,gBAAAW,EAAC,UAAM,UAAAX,EAAA,CAAO;AAAA,IAAA,EAAA,CAC5B,IAEA,gBAAAW;AAAA,MAACP;AAAA,MAAA;AAAA,QACA,WAAW,OAAOd,KAAO,WAAWmB,EAAO,QAAQ;AAAA,QACnD,0BAAwB;AAAA,QACxB,KAAAN;AAAA,QACC,GAAGD;AAAA,MAAA;AAAA,IAAA;AAAA,IAGL,CAAC,CAACI,KAAc,gBAAAK,EAACM,KAAY,UAAAX,GAAW;AAAA,IACxC,CAAC,CAACd,KAAS,gBAAAmB,EAACO,GAAA,EAAW,cAAY1B,EAAA,CAAO;AAAA,EAAA,GAC5C,IAEA,gBAAAmB,EAAC,YAAA,EAAS,KAAAR,GAAW,GAAGI,GAAS,GAAGL,GAAM;AAE5C,CAAC,GAGKc,IAAe7B;AAAA,EACpB,SAAsB,EAAE,WAAAI,GAAW,GAAGW,EAAA,GAAQC,GAAK;AAClD,WACC,gBAAAQ,EAAC,OAAA,EAAI,WAAWH,EAAKC,EAAO,SAASlB,CAAS,GAAG,KAAAY,GAAW,GAAGD,EAAA,CAAM;AAAA,EAEvE;AACD,GAWMiB,IAAgBhC;AAAA,EACrB,SACC,EAAE,iBAAiBiC,GAAW,iBAAiBC,GAAQ,GAAGnB,EAAA,GAC1DC,GACC;AACD,WACC,gBAAAQ;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,kBAAgBS;AAAA,QAChB,iBAAe,CAAC,CAACC,KAAU;AAAA,QAC3B,KAAAlB;AAAA,QACC,GAAGmB,EAAqBpB,CAAI;AAAA,MAAA;AAAA,IAAA;AAAA,EAGhC;AACD,GAGMqB,IAAcpC;AAAA,EACnB,SAAqBqC,GAAOrB,GAAK;AAChC,6BAAQ,YAAA,EAAS,KAAAA,GAAW,GAAGmB,EAAqBE,CAAK,GAAG;AAAA,EAC7D;AACD,GAyCMC,IAAkBtC;AAAA,EACvB,SACC;AAAA,IACC,iBAAiBuC;AAAA,IACjB,iBAAiBC;AAAA,IACjB,kBAAkBP;AAAA,IAClB,iBAAiBQ;AAAA,IACjB,iBAAiBC;AAAA,IACjB,eAAAC;AAAA;AAAA,IACA,eAAAC;AAAA,IACA,gBAAAC;AAAA;AAAA,IACA,eAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,MAAAC;AAAA,IACA,SAAAC;AAAA,IACA,aAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,MAAAC;AAAA,IACA,GAAGrB;AAAA,EAAA,GAEJrB,GACC;AACD,UAAM2C,IAAWC,EAA4B,IAAI,GAC3CC,IAAaD,EAAOZ,CAAgB;AAC1C,WAAAa,EAAW,UAAUb,GAGjBL,MACHC,IAAgBD,GAChB,OAAO,eAAe,MACrB,QAAQ;AAAA,MACP;AAAA,IAAA,IAICE,MACHE,IAAiBF,GACjB,OAAO,eAAe,MACrB,QAAQ;AAAA,MACP;AAAA,IAAA,IAKHiB,EAAoB9C,GAAK,MAAM2C,EAAS,OAA8B,GACtEI,GAAU,MAAM;AACf,YAAMC,IAAOL,EAAS,SAChBM,IAAe,CAACC,MAAwC;AAC7D,cAAMC,IAAiBN,EAAW;AAClC,YAAI,CAACA,EAAY;AACjB,QAAAK,EAAM,eAAA;AACN,cAAM,EAAE,aAAaE,GAAQ,aAAAC,GAAa,OAAA9C,EAAA,IAAU2C,EAAM,QACpDxD,IAAQ2D,GAAa,KAAA,KAAU,IAC/BC,IAAOb,KAAY,CAAA;AAEzB,YAAIW,IAAyBE,EAAK,OAAO,CAACC,MAAMA,EAAE,UAAUhD,CAAK,IACxDmB,IAA2B,CAAC,GAAG4B,GAAM,EAAE,OAAA/C,GAAO,OAAAb,EAAA,CAAO,IACxC,CAAC,EAAE,OAAAa,GAAO,OAAAb,EAAA,CAAO,CAF2B;AAAA,MAGnE;AAEA,aAAAsD,GAAM,iBAAiB,wBAAwBC,CAAY,GACpD,MACND,GAAM,oBAAoB,wBAAwBC,CAAY;AAAA,IAChE,GAAG,CAACvB,GAAUe,CAAQ,CAAC,GAGtB,gBAAAhC;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,iBAAeiB,KAAY;AAAA,QAC1B,GAAGP;AAAA,UACH;AAAA,YACC,wBAAwBY;AAAA,YACxB,uBAAuBD;AAAA,YACvB,uBAAuBF;AAAA,YACvB,KAAKe;AAAA,YACL,GAAGtB;AAAA,UAAA;AAAA,UAEJf,EAAO;AAAA,QAAA;AAAA,QAGP,UAAA;AAAA,UAAAmC,GAAU,IAAI,CAAC,EAAE,UAAAN,GAAU,OAAAzC,GAAO,OAAAa,EAAA,MAClC,gBAAAC,EAAC,QAAA,EAAiB,OAAAD,GAAc,0BAAwB,IACtD,UAAA4B,KAAYzC,EAAA,GADHa,CAEX,CACA;AAAA,UACA4B,KACA,gBAAA1B,EAAA+C,GAAA,EACC,UAAA;AAAA,YAAA,gBAAAhD;AAAA,cAACiD;AAAA,cAAA;AAAA,gBACA,iBAAelC;AAAA,gBACf,UAAAa;AAAA,gBACA,MAAAC;AAAA,gBACA,SAAAJ;AAAA,gBACA,UAAAC;AAAA,gBACA,aAAAK;AAAA,gBACA,UAAAC;AAAA,gBACA,MAAAE;AAAA,cAAA;AAAA,YAAA;AAAA,YAED,gBAAAlC,EAAC,OAAA,EAAI,cAAW,eAAc,0BAAwB,GAAA,CAAC;AAAA,UAAA,GACxD;AAAA,UAEA,CAAC,CAAC8B,KACF,gBAAA9B;AAAA,YAACQ;AAAA,YAAA;AAAA,cACA,iBAAeS;AAAA,cACf,kBAAgBR,KAAaO;AAAA,cAE5B,UAAAc,EAAQ,IAAIzD,CAAQ,EAAE,IAAI,CAAC,EAAE,UAAAsD,GAAU,OAAAzC,GAAO,OAAAa,QAC9C,gBAAAC,EAACY,KAAwB,OAAAb,GAAc,OAAAb,GACrC,UAAAyC,KAAYzC,EAAA,GADIa,CAElB,CACA;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAIJ;AACD,GAGMG,IAAa1B;AAAA,EAClB,SAAoBe,GAAMC,GAAK;AAC9B,6BAAQ,SAAA,EAAM,0BAAwB,IAAC,KAAAA,GAAW,GAAGD,GAAM;AAAA,EAC5D;AACD,GAGMa,IAAmB5B,EAGvB,SAA0Be,GAAMC,GAAK;AACtC,SACC,gBAAAQ;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,0BAAwB;AAAA,MACxB,cAAW;AAAA,MACX,KAAAR;AAAA,MACC,GAAGD;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC,GASKgB,IAAa/B;AAAA,EAClB,SACC,EAAE,cAAcK,GAAO,cAAcqE,GAAO,GAAG3D,EAAA,GAC/CC,GACC;AACD,WACC,gBAAAQ;AAAA,MAACM;AAAA,MAAA;AAAA,QACA,cAAW;AAAA,QACX,cAAY4C,KAASrE;AAAA,QACrB,KAAAW;AAAA,QACC,GAAGD;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACD,GAEa4D,KAAQ,OAAO,OAAO5E,IAAW;AAAA,EAC7C,SAAS8B;AAAA;AAAA;AAAA;AAAA,EAIT,UAAUS;AAAA;AAAA,EACV,YAAYA;AAAA,EACZ,UAAUN;AAAA,EACV,QAAQI;AAAA,EACR,aAAaR;AAAA,EACb,OAAOF;AAAA,EACP,OAAOK;AACR,CAAC;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="290" height="290" fill="none" viewBox="0 0 290 290"><path fill="#fff" d="M145 0c80.08 0 145 64.92 145 145s-64.92 145-145 145S0 225.08 0 145 64.92 0 145 0"/><path fill="#c8102e" d="M145 0c9.93 0 19.63 1 29 2.9V116h113.1A146 146 0 0 1 290 145c0 9.93-1 19.62-2.9 28.99H174v113.1q-13.34 2.73-27.44 2.9h-3.12q-14.1-.17-27.44-2.9V174H2.9C1 164.62 0 154.93 0 145s1-19.64 2.9-29.01H116V2.9C125.37 1 135.07 0 145 0m48.32 193.34c10.73.04 21.47-.08 32.2.06a9101 9101 0 0 1 43.83 26.22 145 145 0 0 1-11.07 15.9l-64.96-38.98zm-166.45.07c12.51-.17 25.05-.03 37.57-.07l-43.8 26.27a145 145 0 0 1-8.85-17.24q7.5-4.54 15.07-8.97zm4.84-138.92A33624 33624 0 0 0 96.6 93.35c.07 1.1.12 2.21.07 3.32-10.73-.04-21.47.08-32.19-.06a13105 13105 0 0 1-43.83-26.22 145 145 0 0 1 11.07-15.9m237.64 15.9a145 145 0 0 1 8.85 17.24q-7.5 4.51-15.06 8.96c-12.52.17-25.05.03-37.58.07z"/><path fill="#012169" d="M251.9 242.97a145 145 0 0 1-58.57 38.78v-73.93zM96.66 281.75a145 145 0 0 1-58.56-38.78l58.56-35.13zm96.67-273.5c22.63 8 42.68 21.45 58.57 38.79l-58.57 35.14zM96.66 82.16 38.1 47.03A145 145 0 0 1 96.66 8.25z"/></svg>
|
|
@@ -744,6 +744,10 @@
|
|
|
744
744
|
"categories": ["Flagg"],
|
|
745
745
|
"tags": ["flagg", "Sverige"]
|
|
746
746
|
},
|
|
747
|
+
"flagg-uk.svg": {
|
|
748
|
+
"categories": ["Flagg"],
|
|
749
|
+
"tags": ["flagg", "England", "Storbritannia", "UK", "Engelsk"]
|
|
750
|
+
},
|
|
747
751
|
"forstorrelsesglass.svg": {
|
|
748
752
|
"categories": ["Utstyr"],
|
|
749
753
|
"tags": ["forstørrelsesglass", "lupe"]
|
package/mtds/index.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
export * from '@u-elements/u-combobox';
|
|
2
|
-
export * from '@u-elements/u-tabs';
|
|
3
1
|
export * from '@digdir/designsystemet-web';
|
|
2
|
+
export * from '@u-elements/u-combobox';
|
|
4
3
|
export { version } from '../package.json';
|
|
5
4
|
export * from './analytics/analytics';
|
|
6
5
|
export * from './app/app-observer';
|