@mattilsynet/design 3.1.14 → 3.1.16

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.
@@ -1,7 +1,7 @@
1
1
  import g from "../styles.module.css.js";
2
- import { isBrowser as v, onHotReload as I, on as a, QUICK_EVENT as h, debounce as b, onMutation as A, attr as n } from "../utils.js";
3
- const f = `.${g.field.split(" ")[0]}`, p = `${f} :is(input,textarea,select)`, C = "ds-suggestion,u-combobox", V = g.validation.split(" ")[0], d = (t) => t instanceof HTMLFormElement && n(t, "data-validation") === "form", u = (t) => t.closest(f), c = (t) => t?.querySelectorAll(p) || [], r = (t) => t?.getElementsByClassName(V) || [], m = (t) => {
4
- const e = !t.clientHeight || t.disabled || n(t, "aria-disabled") === "true", o = t.closest(C)?.items, s = n(t, "aria-required") !== "true" || !!o?.length;
2
+ import { isBrowser as v, onHotReload as I, on as a, QUICK_EVENT as h, debounce as b, onMutation as y, attr as n } from "../utils.js";
3
+ const f = `.${g.field.split(" ")[0]}`, A = `${f} :is(input,textarea,select)`, C = "ds-suggestion,u-combobox", V = g.validation.split(" ")[0], d = (t) => t instanceof HTMLFormElement && n(t, "data-validation") === "form", u = (t) => t.closest(f), c = (t) => t?.querySelectorAll(A) || [], r = (t) => t?.getElementsByClassName(V) || [], m = (t) => {
4
+ const e = !t.clientHeight || t.disabled || t.readOnly || n(t, "aria-readonly") === "true" || n(t, "aria-disabled") === "true", o = t.closest(C)?.items, s = n(t, "aria-required") !== "true" || !!o?.length;
5
5
  return o && t.setCustomValidity(e || s ? "" : "Required"), e ? !1 : t.matches(":user-invalid");
6
6
  }, S = (t) => {
7
7
  const e = t.target?.form || t.target;
@@ -20,28 +20,28 @@ const f = `.${g.field.split(" ")[0]}`, p = `${f} :is(input,textarea,select)`, C
20
20
  }
21
21
  o && (t.preventDefault(), o.focus());
22
22
  }
23
- }, y = ({ target: t }) => {
23
+ }, E = ({ target: t }) => {
24
24
  const e = t;
25
25
  if (!d(e.form))
26
26
  for (const o of r(e.closest("fieldset") || u(e)))
27
27
  n(o, "hidden", "");
28
- }, E = (t) => d(t.target.form) && t?.preventDefault(), N = v() ? r(document) : [], T = () => {
29
- for (const t of N)
28
+ }, N = (t) => d(t.target.form) && t?.preventDefault(), T = v() ? r(document) : [], p = () => {
29
+ for (const t of T)
30
30
  if (!t.hasAttribute("data-validation")) {
31
31
  const e = c(u(t))[0];
32
32
  n(t, "data-validation", "form"), d(e?.form) && n(t, "hidden", "");
33
33
  }
34
34
  };
35
35
  I("validations", () => [
36
- a(document, "input comboboxbeforeselect", y, !0),
36
+ a(document, "input comboboxbeforeselect", E, !0),
37
37
  // Hide validation when typing
38
- a(document, "invalid", E, !0),
38
+ a(document, "invalid", N, !0),
39
39
  // Prevent default browser invalid popup
40
40
  a(document, "invalid", b(S, 10), h),
41
41
  // Debounced to group invalid events
42
42
  a(document, "submit", S, !0),
43
43
  // Use capture as submit does not bubble
44
- A(document, T, {
44
+ y(document, p, {
45
45
  childList: !0,
46
46
  subtree: !0
47
47
  })
@@ -1 +1 @@
1
- {"version":3,"file":"validation-observer.js","sources":["../../designsystem/validation/validation-observer.ts"],"sourcesContent":["import styles from \"../styles.module.css\";\nimport {\n\tattr,\n\tdebounce,\n\tisBrowser,\n\ton,\n\tonHotReload,\n\tonMutation,\n\tQUICK_EVENT,\n} from \"../utils\";\n\nconst CSS_FIELD = `.${styles.field.split(\" \")[0]}`;\nconst CSS_INPUTS = `${CSS_FIELD} :is(input,textarea,select)` as \"input\";\nconst CSS_SUGGESTION = \"ds-suggestion,u-combobox\" as \"ds-suggestion\"; // u-combobox kept for backward compatibility\nconst CSS_VALIDATION = styles.validation.split(\" \")[0];\n\nconst isValidationForm = (form: unknown): form is HTMLFormElement =>\n\tform instanceof HTMLFormElement && attr(form, \"data-validation\") === \"form\";\n\nconst getField = (el: Element) => el.closest(CSS_FIELD);\nconst getInputs = (el?: Element | Document | null) =>\n\tel?.querySelectorAll(CSS_INPUTS) || [];\n\nconst getValidations = (el?: Element | Document | null) =>\n\tel?.getElementsByClassName(CSS_VALIDATION) || [];\n\nconst getInvalid = (input: HTMLInputElement) => {\n\tconst skip =\n\t\t!input.clientHeight ||\n\t\tinput.disabled ||\n\t\tattr(input, \"aria-disabled\") === \"true\";\n\tconst suggestion = input.closest(CSS_SUGGESTION)?.items;\n\tconst ok = attr(input, \"aria-required\") !== \"true\" || !!suggestion?.length;\n\tif (suggestion) input.setCustomValidity(skip || ok ? \"\" : \"Required\"); // \"Fake\" native validity for suggestions\n\treturn skip ? false : input.matches(\":user-invalid\");\n};\n\n// Hide or show validations on submit or invalid event\nconst handleValidations = (event: Event) => {\n\tconst form = (event.target as HTMLInputElement)?.form || event.target;\n\tlet invalid: HTMLInputElement | undefined;\n\tif (!isValidationForm(form)) return;\n\n\t// Toggle validitiy of fields\n\tfor (const field of form.querySelectorAll(CSS_FIELD)) {\n\t\tconst isInvalid = [...getInputs(field)].find(getInvalid);\n\n\t\tif (!invalid && isInvalid) invalid = isInvalid;\n\t\tfor (const el of getValidations(field))\n\t\t\tattr(el, \"hidden\", isInvalid ? null : \"\");\n\t}\n\n\t// Toggle validitiy of fieldset\n\tfor (const fieldset of form.querySelectorAll(\"fieldset\")) {\n\t\tconst isInvalid = [...getInputs(fieldset)].some(getInvalid);\n\t\tfor (const el of getValidations(fieldset))\n\t\t\tif (!getField(el)) attr(el, \"hidden\", isInvalid ? null : \"\"); // Only toggle fieldset validations if they are not also in a field\n\t}\n\n\tif (!invalid) return;\n\tevent.preventDefault(); // Prevent submit if focusable invalid element found\n\tinvalid.focus(); // Only move focus to first invalid field if validate was true\n};\n\n// Hide related validations adain when typing\nconst handleInput = ({ target }: Event) => {\n\tconst input = target as HTMLInputElement;\n\tif (isValidationForm(input.form)) return;\n\tfor (const el of getValidations(input.closest(\"fieldset\") || getField(input)))\n\t\tattr(el, \"hidden\", \"\");\n};\n\n// Hide native browser validation popup\nconst handleInvalid = (e: Event) =>\n\tisValidationForm((e.target as HTMLInputElement).form) && e?.preventDefault();\n\n// Hide validations when added to the DOM\nconst VALIDATIONS = isBrowser() ? getValidations(document) : [];\nconst handleMutation = () => {\n\tfor (const valid of VALIDATIONS)\n\t\tif (!valid.hasAttribute(\"data-validation\")) {\n\t\t\tconst input = getInputs(getField(valid))[0];\n\t\t\tattr(valid, \"data-validation\", \"form\"); // Mark as handled to avoid hiding again if moved in the DOM\n\t\t\tif (isValidationForm(input?.form)) attr(valid, \"hidden\", \"\");\n\t\t}\n};\n\nonHotReload(\"validations\", () => [\n\ton(document, \"input comboboxbeforeselect\", handleInput, true), // Hide validation when typing\n\ton(document, \"invalid\", handleInvalid, true), // Prevent default browser invalid popup\n\ton(document, \"invalid\", debounce(handleValidations, 10), QUICK_EVENT), // Debounced to group invalid events\n\ton(document, \"submit\", handleValidations, true), // Use capture as submit does not bubble\n\tonMutation(document, handleMutation, {\n\t\tchildList: true,\n\t\tsubtree: true,\n\t}),\n]);\n"],"names":["CSS_FIELD","styles","CSS_INPUTS","CSS_SUGGESTION","CSS_VALIDATION","isValidationForm","form","attr","getField","el","getInputs","getValidations","getInvalid","input","skip","suggestion","ok","handleValidations","event","invalid","field","isInvalid","fieldset","handleInput","target","handleInvalid","e","VALIDATIONS","isBrowser","handleMutation","valid","onHotReload","on","debounce","QUICK_EVENT","onMutation"],"mappings":"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"}
1
+ {"version":3,"file":"validation-observer.js","sources":["../../designsystem/validation/validation-observer.ts"],"sourcesContent":["import styles from \"../styles.module.css\";\nimport {\n\tattr,\n\tdebounce,\n\tisBrowser,\n\ton,\n\tonHotReload,\n\tonMutation,\n\tQUICK_EVENT,\n} from \"../utils\";\n\nconst CSS_FIELD = `.${styles.field.split(\" \")[0]}`;\nconst CSS_INPUTS = `${CSS_FIELD} :is(input,textarea,select)` as \"input\";\nconst CSS_SUGGESTION = \"ds-suggestion,u-combobox\" as \"ds-suggestion\"; // u-combobox kept for backward compatibility\nconst CSS_VALIDATION = styles.validation.split(\" \")[0];\n\nconst isValidationForm = (form: unknown): form is HTMLFormElement =>\n\tform instanceof HTMLFormElement && attr(form, \"data-validation\") === \"form\";\n\nconst getField = (el: Element) => el.closest(CSS_FIELD);\nconst getInputs = (el?: Element | Document | null) =>\n\tel?.querySelectorAll(CSS_INPUTS) || [];\n\nconst getValidations = (el?: Element | Document | null) =>\n\tel?.getElementsByClassName(CSS_VALIDATION) || [];\n\nconst getInvalid = (input: HTMLInputElement) => {\n\tconst skip =\n\t\t!input.clientHeight ||\n\t\tinput.disabled ||\n\t\tinput.readOnly ||\n\t\tattr(input, \"aria-readonly\") === \"true\" ||\n\t\tattr(input, \"aria-disabled\") === \"true\";\n\tconst suggestion = input.closest(CSS_SUGGESTION)?.items;\n\tconst ok = attr(input, \"aria-required\") !== \"true\" || !!suggestion?.length;\n\tif (suggestion) input.setCustomValidity(skip || ok ? \"\" : \"Required\"); // \"Fake\" native validity for suggestions\n\treturn skip ? false : input.matches(\":user-invalid\");\n};\n\n// Hide or show validations on submit or invalid event\nconst handleValidations = (event: Event) => {\n\tconst form = (event.target as HTMLInputElement)?.form || event.target;\n\tlet invalid: HTMLInputElement | undefined;\n\tif (!isValidationForm(form)) return;\n\n\t// Toggle validitiy of fields\n\tfor (const field of form.querySelectorAll(CSS_FIELD)) {\n\t\tconst isInvalid = [...getInputs(field)].find(getInvalid);\n\n\t\tif (!invalid && isInvalid) invalid = isInvalid;\n\t\tfor (const el of getValidations(field))\n\t\t\tattr(el, \"hidden\", isInvalid ? null : \"\");\n\t}\n\n\t// Toggle validitiy of fieldset\n\tfor (const fieldset of form.querySelectorAll(\"fieldset\")) {\n\t\tconst isInvalid = [...getInputs(fieldset)].some(getInvalid);\n\t\tfor (const el of getValidations(fieldset))\n\t\t\tif (!getField(el)) attr(el, \"hidden\", isInvalid ? null : \"\"); // Only toggle fieldset validations if they are not also in a field\n\t}\n\n\tif (!invalid) return;\n\tevent.preventDefault(); // Prevent submit if focusable invalid element found\n\tinvalid.focus(); // Only move focus to first invalid field if validate was true\n};\n\n// Hide related validations adain when typing\nconst handleInput = ({ target }: Event) => {\n\tconst input = target as HTMLInputElement;\n\tif (isValidationForm(input.form)) return;\n\tfor (const el of getValidations(input.closest(\"fieldset\") || getField(input)))\n\t\tattr(el, \"hidden\", \"\");\n};\n\n// Hide native browser validation popup\nconst handleInvalid = (e: Event) =>\n\tisValidationForm((e.target as HTMLInputElement).form) && e?.preventDefault();\n\n// Hide validations when added to the DOM\nconst VALIDATIONS = isBrowser() ? getValidations(document) : [];\nconst handleMutation = () => {\n\tfor (const valid of VALIDATIONS)\n\t\tif (!valid.hasAttribute(\"data-validation\")) {\n\t\t\tconst input = getInputs(getField(valid))[0];\n\t\t\tattr(valid, \"data-validation\", \"form\"); // Mark as handled to avoid hiding again if moved in the DOM\n\t\t\tif (isValidationForm(input?.form)) attr(valid, \"hidden\", \"\");\n\t\t}\n};\n\nonHotReload(\"validations\", () => [\n\ton(document, \"input comboboxbeforeselect\", handleInput, true), // Hide validation when typing\n\ton(document, \"invalid\", handleInvalid, true), // Prevent default browser invalid popup\n\ton(document, \"invalid\", debounce(handleValidations, 10), QUICK_EVENT), // Debounced to group invalid events\n\ton(document, \"submit\", handleValidations, true), // Use capture as submit does not bubble\n\tonMutation(document, handleMutation, {\n\t\tchildList: true,\n\t\tsubtree: true,\n\t}),\n]);\n"],"names":["CSS_FIELD","styles","CSS_INPUTS","CSS_SUGGESTION","CSS_VALIDATION","isValidationForm","form","attr","getField","el","getInputs","getValidations","getInvalid","input","skip","suggestion","ok","handleValidations","event","invalid","field","isInvalid","fieldset","handleInput","target","handleInvalid","e","VALIDATIONS","isBrowser","handleMutation","valid","onHotReload","on","debounce","QUICK_EVENT","onMutation"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mattilsynet/design",
3
- "version": "3.1.14",
3
+ "version": "3.1.16",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
@@ -60,9 +60,9 @@
60
60
  "@handsontable/react-wrapper": "^16.2.0",
61
61
  "@phosphor-icons/core": "^2.1.1",
62
62
  "@phosphor-icons/react": "^2.1.10",
63
- "@storybook/addon-docs": "^10.2.14",
64
- "@storybook/addon-themes": "^10.2.14",
65
- "@storybook/react-vite": "^10.2.14",
63
+ "@storybook/addon-docs": "^10.2.15",
64
+ "@storybook/addon-themes": "^10.2.15",
65
+ "@storybook/react-vite": "^10.2.15",
66
66
  "@tanstack/react-table": "^8.21.3",
67
67
  "@turf/boolean-point-in-polygon": "^7.3.4",
68
68
  "@turf/helpers": "^7.3.4",
@@ -80,7 +80,7 @@
80
80
  "react": "^19.2.4",
81
81
  "react-dom": "^19.2.4",
82
82
  "react-moveable": "^0.56.0",
83
- "storybook": "^10.2.14",
83
+ "storybook": "^10.2.15",
84
84
  "typescript": "^5.9.3",
85
85
  "vite": "^7.3.1",
86
86
  "vite-plugin-dts": "^4.5.4"