@felleslosninger/minid-elements 0.0.140 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +69 -4
  2. package/dist/components/alert.component.d.ts +6 -4
  3. package/dist/components/alert.component.d.ts.map +1 -1
  4. package/dist/components/alert.js +33 -61
  5. package/dist/components/alert.js.map +1 -1
  6. package/dist/components/button.component.d.ts +1 -1
  7. package/dist/components/checkbox.component.d.ts +1 -2
  8. package/dist/components/checkbox.component.d.ts.map +1 -1
  9. package/dist/components/checkbox.js +25 -55
  10. package/dist/components/checkbox.js.map +1 -1
  11. package/dist/components/code-input-old.component.d.ts +1 -1
  12. package/dist/components/code-input-old.js +1 -1
  13. package/dist/components/code-input.component.d.ts +1 -1
  14. package/dist/components/code-input.component.d.ts.map +1 -1
  15. package/dist/components/code-input.js +232 -94
  16. package/dist/components/code-input.js.map +1 -1
  17. package/dist/components/combobox.component.d.ts +1 -1
  18. package/dist/components/countdown.component.d.ts +1 -1
  19. package/dist/components/dialog.component.d.ts +1 -1
  20. package/dist/components/dropdown.component.d.ts +1 -1
  21. package/dist/components/heading.component.d.ts +1 -1
  22. package/dist/components/heading.component.d.ts.map +1 -1
  23. package/dist/components/heading.js +1 -11
  24. package/dist/components/heading.js.map +1 -1
  25. package/dist/components/helptext.component.d.ts +1 -1
  26. package/dist/components/label.component.d.ts +1 -1
  27. package/dist/components/label.component.d.ts.map +1 -1
  28. package/dist/components/label.js +3 -12
  29. package/dist/components/label.js.map +1 -1
  30. package/dist/components/link.component.d.ts +1 -1
  31. package/dist/components/link.js +1 -1
  32. package/dist/components/link.js.map +1 -1
  33. package/dist/components/menu-item.component.d.ts +1 -1
  34. package/dist/components/menu.component.d.ts +1 -1
  35. package/dist/components/paragraph.component.d.ts +1 -1
  36. package/dist/components/paragraph.component.d.ts.map +1 -1
  37. package/dist/components/paragraph.js +2 -8
  38. package/dist/components/paragraph.js.map +1 -1
  39. package/dist/components/phone-input.component.d.ts +15 -3
  40. package/dist/components/phone-input.component.d.ts.map +1 -1
  41. package/dist/components/phone-input.js +37 -6
  42. package/dist/components/phone-input.js.map +1 -1
  43. package/dist/components/popup.component.d.ts +1 -1
  44. package/dist/components/qr-code.component.d.ts +1 -1
  45. package/dist/components/radio-button.component.d.ts +1 -1
  46. package/dist/components/radio-group.component.d.ts +1 -1
  47. package/dist/components/radio.component.d.ts +1 -1
  48. package/dist/components/radio.component.d.ts.map +1 -1
  49. package/dist/components/radio.js +12 -16
  50. package/dist/components/radio.js.map +1 -1
  51. package/dist/components/search.component.d.ts +11 -4
  52. package/dist/components/search.component.d.ts.map +1 -1
  53. package/dist/components/search.js +75 -31
  54. package/dist/components/search.js.map +1 -1
  55. package/dist/components/spinner.component.d.ts +1 -1
  56. package/dist/components/step-indicator.component.d.ts +1 -1
  57. package/dist/components/textfield.component.d.ts +2 -2
  58. package/dist/components/textfield.component.d.ts.map +1 -1
  59. package/dist/components/textfield.js +66 -82
  60. package/dist/components/textfield.js.map +1 -1
  61. package/dist/components/tooltip.component.d.ts +1 -1
  62. package/dist/components/validation-message.component.d.ts +1 -1
  63. package/dist/controllers/lang.controller.d.ts +14 -0
  64. package/dist/controllers/lang.controller.d.ts.map +1 -0
  65. package/dist/designsystemet-tailwind.css +355 -297
  66. package/dist/index.d.ts +2 -0
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +4 -1
  69. package/dist/index.js.map +1 -1
  70. package/dist/lang.controller-P4W-9ipy.js +32 -0
  71. package/dist/lang.controller-P4W-9ipy.js.map +1 -0
  72. package/dist/styles.css +5 -0
  73. package/dist/theme.css +1155 -0
  74. package/dist/utilities/lang.d.ts +6 -0
  75. package/dist/utilities/lang.d.ts.map +1 -0
  76. package/dist/utilities/lang.js +18 -0
  77. package/dist/utilities/lang.js.map +1 -0
  78. package/dist/utilities/translations.d.ts +42 -0
  79. package/dist/utilities/translations.d.ts.map +1 -0
  80. package/dist/utilities/translations.js +45 -0
  81. package/dist/utilities/translations.js.map +1 -0
  82. package/package.json +34 -16
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Gets the effective language for a given element by walking up the DOM tree,
3
+ * traversing shadow DOM host boundaries along the way.
4
+ */
5
+ export declare function getLang(element: HTMLElement): string;
6
+ //# sourceMappingURL=lang.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lang.d.ts","sourceRoot":"","sources":["../../src/utilities/lang.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAgBpD"}
@@ -0,0 +1,18 @@
1
+ function getLang(element) {
2
+ let current = element;
3
+ while (current) {
4
+ if (current instanceof Element && current.hasAttribute("lang")) {
5
+ return current.getAttribute("lang");
6
+ }
7
+ if (current instanceof ShadowRoot) {
8
+ current = current.host;
9
+ } else {
10
+ current = current.parentNode;
11
+ }
12
+ }
13
+ return document.documentElement.lang || "nb";
14
+ }
15
+ export {
16
+ getLang
17
+ };
18
+ //# sourceMappingURL=lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lang.js","sources":["../../src/utilities/lang.ts"],"sourcesContent":["/**\n * Gets the effective language for a given element by walking up the DOM tree,\n * traversing shadow DOM host boundaries along the way.\n */\nexport function getLang(element: HTMLElement): string {\n let current: Node | null = element;\n\n while (current) {\n if (current instanceof Element && current.hasAttribute('lang')) {\n return current.getAttribute('lang')!;\n }\n // Cross shadow-DOM host boundary\n if (current instanceof ShadowRoot) {\n current = (current as ShadowRoot).host;\n } else {\n current = current.parentNode;\n }\n }\n\n return document.documentElement.lang || 'nb';\n}"],"names":[],"mappings":"AAIO,SAAS,QAAQ,SAA8B;AACpD,MAAI,UAAuB;AAE3B,SAAO,SAAS;AACd,QAAI,mBAAmB,WAAW,QAAQ,aAAa,MAAM,GAAG;AAC9D,aAAO,QAAQ,aAAa,MAAM;AAAA,IACpC;AAEA,QAAI,mBAAmB,YAAY;AACjC,gBAAW,QAAuB;AAAA,IACpC,OAAO;AACL,gBAAU,QAAQ;AAAA,IACpB;AAAA,EACF;AAEA,SAAO,SAAS,gBAAgB,QAAQ;AAC1C;"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * All UI strings that components render themselves (e.g. aria-labels on
3
+ * icon-only buttons). Every supported language must provide all keys.
4
+ */
5
+ export interface ComponentTranslations {
6
+ clear: string;
7
+ showPassword: string;
8
+ hidePassword: string;
9
+ openCountrySelector: string;
10
+ }
11
+ /**
12
+ * Override or extend translations for a given BCP-47 language tag.
13
+ * Merges the provided strings with the existing entry for that tag, so you
14
+ * only need to supply the keys you want to change.
15
+ *
16
+ * Call this once at app startup, before any components render.
17
+ *
18
+ * @example Override a single string for Norwegian Bokmål
19
+ * ```ts
20
+ * setTranslations('nb', { clear: 'Slett' });
21
+ * ```
22
+ *
23
+ * @example Register a completely new language
24
+ * ```ts
25
+ * setTranslations('fr', {
26
+ * clear: 'Effacer',
27
+ * showPassword: 'Afficher le mot de passe',
28
+ * hidePassword: 'Masquer le mot de passe',
29
+ * });
30
+ * ```
31
+ */
32
+ export declare function setTranslations(lang: string, translations: Partial<ComponentTranslations>): void;
33
+ /**
34
+ * Returns the translations for the given BCP-47 language tag.
35
+ *
36
+ * Resolution order:
37
+ * 1. Exact tag match (e.g. `'nb-NO'`)
38
+ * 2. Base language match (e.g. `'nb'` from `'nb-NO'`)
39
+ * 3. Norwegian Bokmål as final fallback
40
+ */
41
+ export declare function getTranslations(lang: string): ComponentTranslations;
42
+ //# sourceMappingURL=translations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../src/utilities/translations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAkCD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAC3C,IAAI,CAIN;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAMnE"}
@@ -0,0 +1,45 @@
1
+ const builtins = {
2
+ nb: {
3
+ clear: "Tøm",
4
+ showPassword: "Vis passord",
5
+ hidePassword: "Skjul passord",
6
+ openCountrySelector: "Åpne landsvelger"
7
+ },
8
+ nn: {
9
+ clear: "Tøm",
10
+ showPassword: "Vis passord",
11
+ hidePassword: "Gøym passord",
12
+ openCountrySelector: "Opna landsveljar"
13
+ },
14
+ se: {
15
+ clear: "Sihko",
16
+ showPassword: "Čájet sátnesuodji",
17
+ hidePassword: "Čiehka sátnesuodji",
18
+ openCountrySelector: "Rahpat riikkaválljenjoavkku"
19
+ },
20
+ en: {
21
+ clear: "Clear",
22
+ showPassword: "Show password",
23
+ hidePassword: "Hide password",
24
+ openCountrySelector: "Open country selector"
25
+ }
26
+ };
27
+ const registry = new Map(
28
+ Object.entries(builtins)
29
+ );
30
+ function setTranslations(lang, translations) {
31
+ const base = resolveBaseLang(lang);
32
+ const existing = registry.get(lang) ?? registry.get(base) ?? builtins.nb;
33
+ registry.set(lang, { ...existing, ...translations });
34
+ }
35
+ function getTranslations(lang) {
36
+ return registry.get(lang) ?? registry.get(resolveBaseLang(lang)) ?? builtins.nb;
37
+ }
38
+ function resolveBaseLang(lang) {
39
+ return lang.toLowerCase().split("-")[0];
40
+ }
41
+ export {
42
+ getTranslations,
43
+ setTranslations
44
+ };
45
+ //# sourceMappingURL=translations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translations.js","sources":["../../src/utilities/translations.ts"],"sourcesContent":["/**\n * All UI strings that components render themselves (e.g. aria-labels on\n * icon-only buttons). Every supported language must provide all keys.\n */\nexport interface ComponentTranslations {\n clear: string;\n showPassword: string;\n hidePassword: string;\n openCountrySelector: string;\n}\n\n\nconst builtins: Record<string, ComponentTranslations> = {\n nb: {\n clear: 'Tøm',\n showPassword: 'Vis passord',\n hidePassword: 'Skjul passord',\n openCountrySelector: 'Åpne landsvelger',\n },\n nn: {\n clear: 'Tøm',\n showPassword: 'Vis passord',\n hidePassword: 'Gøym passord',\n openCountrySelector: 'Opna landsveljar',\n },\n se: {\n clear: 'Sihko',\n showPassword: 'Čájet sátnesuodji',\n hidePassword: 'Čiehka sátnesuodji',\n openCountrySelector: 'Rahpat riikkaválljenjoavkku',\n },\n en: {\n clear: 'Clear',\n showPassword: 'Show password',\n hidePassword: 'Hide password',\n openCountrySelector: 'Open country selector',\n },\n};\n\nconst registry = new Map<string, ComponentTranslations>(\n Object.entries(builtins)\n);\n\n/**\n * Override or extend translations for a given BCP-47 language tag.\n * Merges the provided strings with the existing entry for that tag, so you\n * only need to supply the keys you want to change.\n *\n * Call this once at app startup, before any components render.\n *\n * @example Override a single string for Norwegian Bokmål\n * ```ts\n * setTranslations('nb', { clear: 'Slett' });\n * ```\n *\n * @example Register a completely new language\n * ```ts\n * setTranslations('fr', {\n * clear: 'Effacer',\n * showPassword: 'Afficher le mot de passe',\n * hidePassword: 'Masquer le mot de passe',\n * });\n * ```\n */\nexport function setTranslations(\n lang: string,\n translations: Partial<ComponentTranslations>\n): void {\n const base = resolveBaseLang(lang);\n const existing = registry.get(lang) ?? registry.get(base) ?? builtins.nb;\n registry.set(lang, { ...existing, ...translations });\n}\n\n/**\n * Returns the translations for the given BCP-47 language tag.\n *\n * Resolution order:\n * 1. Exact tag match (e.g. `'nb-NO'`)\n * 2. Base language match (e.g. `'nb'` from `'nb-NO'`)\n * 3. Norwegian Bokmål as final fallback\n */\nexport function getTranslations(lang: string): ComponentTranslations {\n return (\n registry.get(lang) ??\n registry.get(resolveBaseLang(lang)) ??\n builtins.nb\n );\n}\n\nfunction resolveBaseLang(lang: string): string {\n return lang.toLowerCase().split('-')[0];\n}"],"names":[],"mappings":"AAYA,MAAM,WAAkD;AAAA,EACtD,IAAI;AAAA,IACF,OAAO;AAAA,IACP,cAAc;AAAA,IACd,cAAc;AAAA,IACd,qBAAqB;AAAA,EAAA;AAAA,EAEvB,IAAI;AAAA,IACF,OAAO;AAAA,IACP,cAAc;AAAA,IACd,cAAc;AAAA,IACd,qBAAqB;AAAA,EAAA;AAAA,EAEvB,IAAI;AAAA,IACF,OAAO;AAAA,IACP,cAAc;AAAA,IACd,cAAc;AAAA,IACd,qBAAqB;AAAA,EAAA;AAAA,EAEvB,IAAI;AAAA,IACF,OAAO;AAAA,IACP,cAAc;AAAA,IACd,cAAc;AAAA,IACd,qBAAqB;AAAA,EAAA;AAEzB;AAEA,MAAM,WAAW,IAAI;AAAA,EACnB,OAAO,QAAQ,QAAQ;AACzB;AAuBO,SAAS,gBACd,MACA,cACM;AACN,QAAM,OAAO,gBAAgB,IAAI;AACjC,QAAM,WAAW,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;AACtE,WAAS,IAAI,MAAM,EAAE,GAAG,UAAU,GAAG,cAAc;AACrD;AAUO,SAAS,gBAAgB,MAAqC;AACnE,SACE,SAAS,IAAI,IAAI,KACjB,SAAS,IAAI,gBAAgB,IAAI,CAAC,KAClC,SAAS;AAEb;AAEA,SAAS,gBAAgB,MAAsB;AAC7C,SAAO,KAAK,YAAA,EAAc,MAAM,GAAG,EAAE,CAAC;AACxC;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@felleslosninger/minid-elements",
3
- "version": "0.0.140",
3
+ "version": "0.1.0",
4
4
  "description": "MinID Web Components",
5
5
  "author": "Digitaliseringsdirektoratet",
6
6
  "license": "MIT",
@@ -21,10 +21,20 @@
21
21
  "types": "./dist/index.d.ts"
22
22
  },
23
23
  "./styles": {
24
- "import": "./dist/index.css"
24
+ "import": "./dist/styles.css",
25
+ "default": "./dist/styles.css"
26
+ },
27
+ "./theme": {
28
+ "import": "./dist/theme.css",
29
+ "default": "./dist/theme.css"
30
+ },
31
+ "./globals": {
32
+ "import": "./dist/index.css",
33
+ "default": "./dist/index.css"
25
34
  },
26
35
  "./designsystemet-tailwind": {
27
- "import": "./dist/designsystemet-tailwind.css"
36
+ "import": "./dist/designsystemet-tailwind.css",
37
+ "default": "./dist/designsystemet-tailwind.css"
28
38
  },
29
39
  "./alert": {
30
40
  "import": "./dist/components/alert.js",
@@ -140,18 +150,12 @@
140
150
  "url": "git+https://github.com/felleslosninger/minid-web-components.git"
141
151
  },
142
152
  "customElements": "custom-elements.json",
143
- "scripts": {
144
- "make-icons": "node ./scripts/make-icons.js",
145
- "make-tailwind": "node ./scripts/make-tailwind-theme.js",
146
- "build": "rimraf dist && tsc && npm run analyze && vite build",
147
- "build:cdn": "rimraf dist-cdn && tsc && vite build --config vite.cdn.config.js && npx @tailwindcss/cli -i ./src/styles/component-tailwind.css -o ./dist-cdn/index.css ",
148
- "dev:cdn": "node cdn-dev-server.js",
149
- "storybook": "storybook dev -p 6006",
150
- "storybook:dev": "concurrently --kill-others \"npm run analyze -- --watch\" \"npx @tailwindcss/cli -i ./src/styles/tailwind.css -o ./.storybook/public/tailwind.css --watch\" \"npm run storybook\"",
151
- "storybook:build": "npm run build && rimraf storybook-static && npm run analyze && npx @tailwindcss/cli -i ./src/styles/tailwind.css -o ./.storybook/public/tailwind.css && storybook build",
152
- "analyze": "custom-elements-manifest analyze"
153
+ "engines": {
154
+ "node": ">=24.14.1"
153
155
  },
154
156
  "dependencies": {
157
+ "@digdir/designsystemet-css": "^1.13.2",
158
+ "@digdir/designsystemet-web": "^1.13.2",
155
159
  "@floating-ui/dom": "^1.6.10",
156
160
  "@floating-ui/utils": "^0.2.9",
157
161
  "composed-offset-position": "^0.0.6",
@@ -163,8 +167,9 @@
163
167
  "qrcode": "^1.5.4"
164
168
  },
165
169
  "devDependencies": {
170
+ "@changesets/cli": "^2.30.0",
166
171
  "@custom-elements-manifest/analyzer": "^0.10.3",
167
- "@digdir/designsystemet-theme": "^1.0.3",
172
+ "@digdir/designsystemet": "^1.13.2",
168
173
  "@floating-ui/dom": "^1.6.10",
169
174
  "@navikt/aksel-icons": "^7.1.2",
170
175
  "@storybook/addon-a11y": "^9.0.12",
@@ -189,10 +194,10 @@
189
194
  "@vitest/coverage-istanbul": "^3.2.4",
190
195
  "@vitest/coverage-v8": "^3.2.4",
191
196
  "axe-playwright": "^2.1.0",
192
- "composed-offset-position": "^0.0.6",
193
197
  "concurrently": "^9.0.1",
194
198
  "eslint": "^9.25.1",
195
199
  "eslint-plugin-storybook": "^9.0.12",
200
+ "glob": "^13.0.6",
196
201
  "jsdom": "^26.1.0",
197
202
  "playwright": "^1.53.0",
198
203
  "postcss": "^8.5.1",
@@ -212,5 +217,18 @@
212
217
  "vite-plugin-externalize-deps": "^0.8.0",
213
218
  "vite-plugin-web-components-hmr": "^0.1.3",
214
219
  "vitest": "^3.2.4"
220
+ },
221
+ "scripts": {
222
+ "make-icons": "node ./scripts/make-icons.js",
223
+ "make-tailwind": "node ./scripts/make-tailwind-theme.js",
224
+ "build": "rimraf dist && designsystemet tokens create --config designsystemet.config.json && designsystemet tokens build --config designsystemet.config.json --experimental-tailwind && node ./scripts/make-tailwind-theme.js && tsc && custom-elements-manifest analyze && vite build",
225
+ "build:cdn": "rimraf dist-cdn && tsc && vite build --config vite.cdn.config.js && npx @tailwindcss/cli -i ./src/styles/component-tailwind.css -o ./dist-cdn/index.css ",
226
+ "dev:cdn": "node cdn-dev-server.js",
227
+ "storybook": "storybook dev -p 6006",
228
+ "storybook:dev": "concurrently --kill-others \"pnpm run analyze -- --watch\" \"npx @tailwindcss/cli -i ./src/styles/tailwind.css -o ./.storybook/public/tailwind.css --watch\" \"pnpm run storybook\"",
229
+ "storybook:build": "pnpm run build && rimraf storybook-static && pnpm run analyze && npx @tailwindcss/cli -i ./src/styles/tailwind.css -o ./.storybook/public/tailwind.css && pnpm exec storybook build",
230
+ "analyze": "custom-elements-manifest analyze",
231
+ "build:theme": "pnpm exec designsystemet tokens create --config designsystemet.config.json && pnpm exec designsystemet tokens build --config designsystemet.config.json --experimental-tailwind",
232
+ "release": "pnpm build && pnpm exec changeset publish"
215
233
  }
216
- }
234
+ }