@dep-dio/dio-designsystem 0.2.0 → 0.3.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.
- package/README.md +151 -1
- package/designsystemet.config.json +56 -0
- package/dist/assets/icons/floppydisk.svg +3 -0
- package/dist/assets/icons/menu-hamburger.svg +3 -0
- package/dist/assets/icons/pencil.svg +3 -0
- package/dist/assets/icons/social-facebook.svg +3 -0
- package/dist/assets/icons/social-flickr.svg +3 -0
- package/dist/assets/icons/social-instagram.svg +3 -0
- package/dist/assets/icons/social-linkedin.svg +3 -0
- package/dist/assets/icons/social-x.svg +3 -0
- package/dist/assets/icons/upload.svg +3 -0
- package/dist/{newsletter-subscribe/NewsletterSubscribe.d.ts → news-alert-subscribe/NewsAlertSubscribe.d.ts} +1 -1
- package/dist/styles/main.css +644 -4370
- package/dist/styles/scss-utils.scss +153 -0
- package/dist/styles.d.ts +1 -0
- package/dist/types.d.ts +18 -0
- package/dist/vite-icons-plugin.d.ts +1 -1
- package/dist/vite-icons-plugin.js.map +2 -2
- package/dist/web.d.ts +2 -2
- package/dist/web.js +14 -14
- package/dist/web.js.map +3 -3
- package/package.json +83 -70
- package/dist/styles/_mixins.scss +0 -48
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
$bp-xxsmall: 320px;
|
|
2
|
+
$bp-xsmall: 399px;
|
|
3
|
+
$bp-small: 499px;
|
|
4
|
+
$bp-small-upper: 500px;
|
|
5
|
+
$bp-medium: 899px;
|
|
6
|
+
$bp-medium-upper: 900px;
|
|
7
|
+
$bp-large: 1024px;
|
|
8
|
+
$bp-xlarge: 1100px;
|
|
9
|
+
$bp-pageheader: 768px;
|
|
10
|
+
$bp-pageheader-up: 769px;
|
|
11
|
+
$bp-content: 699px;
|
|
12
|
+
$bp-content-up: 700px;
|
|
13
|
+
|
|
14
|
+
@mixin xxsmall {
|
|
15
|
+
@media (max-width: $bp-xxsmall) {
|
|
16
|
+
@content;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@mixin xsmall {
|
|
21
|
+
@media (max-width: $bp-xsmall) {
|
|
22
|
+
@content;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@mixin small {
|
|
27
|
+
@media (max-width: $bp-small) {
|
|
28
|
+
@content;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@mixin medium {
|
|
33
|
+
@media (max-width: $bp-medium) {
|
|
34
|
+
@content;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@mixin medium_only {
|
|
39
|
+
@media (min-width: $bp-small-upper) and (max-width: $bp-medium) {
|
|
40
|
+
@content;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@mixin medium_up {
|
|
45
|
+
@media (min-width: $bp-medium-upper) {
|
|
46
|
+
@content;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@mixin large {
|
|
51
|
+
@media (max-width: $bp-large) {
|
|
52
|
+
@content;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@mixin large_up {
|
|
57
|
+
@media (min-width: $bp-medium-upper) {
|
|
58
|
+
@content;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@mixin xlarge_up {
|
|
63
|
+
@media (min-width: $bp-xlarge) {
|
|
64
|
+
@content;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@mixin pageheader {
|
|
69
|
+
@media (max-width: $bp-pageheader) {
|
|
70
|
+
@content;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@mixin pageheader_up {
|
|
75
|
+
@media (min-width: $bp-pageheader-up) {
|
|
76
|
+
@content;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@mixin content {
|
|
81
|
+
@media (max-width: $bp-content) {
|
|
82
|
+
@content;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
@mixin content_up {
|
|
87
|
+
@media (min-width: $bp-content-up) {
|
|
88
|
+
@content;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
@mixin dio-text-heading-1 {
|
|
93
|
+
font-weight: var(--ds-heading-lg-font-weight);
|
|
94
|
+
line-height: var(--ds-heading-lg-line-height);
|
|
95
|
+
font-size: var(--ds-heading-lg-font-size);
|
|
96
|
+
letter-spacing: var(--ds-heading-lg-letter-spacing);
|
|
97
|
+
|
|
98
|
+
@include medium {
|
|
99
|
+
font-size: var(--ds-heading-md-font-size);
|
|
100
|
+
font-weight: var(--ds-heading-md-font-weight);
|
|
101
|
+
letter-spacing: var(--ds-heading-md-letter-spacing);
|
|
102
|
+
line-height: var(--ds-heading-md-line-height);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@mixin dio-text-heading-2 {
|
|
107
|
+
font-size: var(--ds-heading-sm-font-size);
|
|
108
|
+
font-weight: var(--ds-heading-sm-font-weight);
|
|
109
|
+
letter-spacing: var(--ds-heading-sm-letter-spacing);
|
|
110
|
+
line-height: var(--ds-heading-sm-line-height);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
@mixin dio-text-heading-3 {
|
|
114
|
+
font-weight: var(--ds-heading-xs-font-weight);
|
|
115
|
+
line-height: var(--ds-heading-xs-line-height);
|
|
116
|
+
font-size: var(--ds-heading-xs-font-size);
|
|
117
|
+
letter-spacing: var(--ds-heading-xs-letter-spacing);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
@mixin dio-text-heading-4 {
|
|
121
|
+
font-size: var(--ds-heading-2xs-font-size);
|
|
122
|
+
font-weight: var(--ds-heading-2xs-font-weight);
|
|
123
|
+
letter-spacing: var(--ds-heading-2xs-letter-spacing);
|
|
124
|
+
line-height: var(--ds-heading-2xs-line-height);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@mixin dio-text-large {
|
|
128
|
+
font-weight: var(--ds-body-xl-font-weight);
|
|
129
|
+
line-height: var(--ds-body-xl-line-height);
|
|
130
|
+
font-size: var(--ds-body-xl-font-size);
|
|
131
|
+
letter-spacing: var(--ds-body-xl-letter-spacing);
|
|
132
|
+
|
|
133
|
+
@include medium {
|
|
134
|
+
font-size: var(--ds-body-lg-font-size);
|
|
135
|
+
font-weight: var(--ds-body-lg-font-weight);
|
|
136
|
+
letter-spacing: var(--ds-body-lg-letter-spacing);
|
|
137
|
+
line-height: var(--ds-body-lg-line-height);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
@mixin dio-text-base {
|
|
142
|
+
font-weight: var(--ds-body-md-font-weight);
|
|
143
|
+
line-height: var(--ds-body-md-line-height);
|
|
144
|
+
font-size: var(--ds-body-md-font-size);
|
|
145
|
+
letter-spacing: var(--ds-body-md-letter-spacing);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
@mixin dio-text-small {
|
|
149
|
+
font-weight: var(--ds-body-sm-font-weight);
|
|
150
|
+
line-height: var(--ds-body-sm-line-height);
|
|
151
|
+
font-size: var(--ds-body-sm-font-size);
|
|
152
|
+
letter-spacing: var(--ds-body-sm-letter-spacing);
|
|
153
|
+
}
|
package/dist/styles.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
declare module '@dep-dio/dio-designsystem/styles' {}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/* build: v1.18.0 */
|
|
2
|
+
import type {} from '@digdir/designsystemet-types';
|
|
3
|
+
|
|
4
|
+
// Augment types based on theme
|
|
5
|
+
declare module '@digdir/designsystemet-types' {
|
|
6
|
+
export interface ColorDefinitions {
|
|
7
|
+
primary: never;
|
|
8
|
+
accent1: never;
|
|
9
|
+
regjeringsbla: never;
|
|
10
|
+
neutral: never;
|
|
11
|
+
}
|
|
12
|
+
export interface SeverityColorDefinitions {
|
|
13
|
+
info: never;
|
|
14
|
+
success: never;
|
|
15
|
+
warning: never;
|
|
16
|
+
danger: never;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function createDioSvgIconsPlugin():
|
|
1
|
+
export declare function createDioSvgIconsPlugin(): { name: string }
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/vite-icons-plugin.ts"],
|
|
4
|
-
"sourcesContent": ["import { existsSync } from \"node:fs\"\nimport path from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\n\nimport { createSvgIconsPlugin } from \"vite-plugin-svg-icons\"\n\nfunction resolveIconsDir() {\n const moduleDir = path.dirname(fileURLToPath(import.meta.url))\n const packageRoot = path.resolve(moduleDir, \"..\")\n const distIcons = path.join(packageRoot, \"dist/assets/icons\")\n const srcIcons = path.join(packageRoot, \"src/assets/icons\")\n\n if (existsSync(distIcons)) {\n return distIcons\n }\n\n if (existsSync(srcIcons)) {\n return srcIcons\n }\n\n return path.join(moduleDir, \"assets/icons\")\n}\n\nexport function createDioSvgIconsPlugin() {\n return createSvgIconsPlugin({\n iconDirs: [resolveIconsDir()],\n symbolId: \"dio-[name]\",\n })\n}\n"],
|
|
5
|
-
"mappings": ";AAAA,SAAS,kBAAkB;AAC3B,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAE9B,SAAS,4BAA4B;AAErC,SAAS,kBAAkB;AACvB,QAAM,YAAY,KAAK,QAAQ,cAAc,YAAY,GAAG,CAAC;AAC7D,QAAM,cAAc,KAAK,QAAQ,WAAW,IAAI;AAChD,QAAM,YAAY,KAAK,KAAK,aAAa,mBAAmB;AAC5D,QAAM,WAAW,KAAK,KAAK,aAAa,kBAAkB;AAE1D,MAAI,WAAW,SAAS,GAAG;AACvB,WAAO;AAAA,EACX;AAEA,MAAI,WAAW,QAAQ,GAAG;AACtB,WAAO;AAAA,EACX;AAEA,SAAO,KAAK,KAAK,WAAW,cAAc;AAC9C;AAEO,SAAS,
|
|
4
|
+
"sourcesContent": ["import { existsSync } from \"node:fs\"\nimport path from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\n\nimport { createSvgIconsPlugin } from \"vite-plugin-svg-icons\"\n\nfunction resolveIconsDir() {\n const moduleDir = path.dirname(fileURLToPath(import.meta.url))\n const packageRoot = path.resolve(moduleDir, \"..\")\n const distIcons = path.join(packageRoot, \"dist/assets/icons\")\n const srcIcons = path.join(packageRoot, \"src/assets/icons\")\n\n if (existsSync(distIcons)) {\n return distIcons\n }\n\n if (existsSync(srcIcons)) {\n return srcIcons\n }\n\n return path.join(moduleDir, \"assets/icons\")\n}\n\nexport function createDioSvgIconsPlugin(): { name: string } {\n return createSvgIconsPlugin({\n iconDirs: [resolveIconsDir()],\n symbolId: \"dio-[name]\",\n }) as { name: string }\n}\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,kBAAkB;AAC3B,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAE9B,SAAS,4BAA4B;AAErC,SAAS,kBAAkB;AACvB,QAAM,YAAY,KAAK,QAAQ,cAAc,YAAY,GAAG,CAAC;AAC7D,QAAM,cAAc,KAAK,QAAQ,WAAW,IAAI;AAChD,QAAM,YAAY,KAAK,KAAK,aAAa,mBAAmB;AAC5D,QAAM,WAAW,KAAK,KAAK,aAAa,kBAAkB;AAE1D,MAAI,WAAW,SAAS,GAAG;AACvB,WAAO;AAAA,EACX;AAEA,MAAI,WAAW,QAAQ,GAAG;AACtB,WAAO;AAAA,EACX;AAEA,SAAO,KAAK,KAAK,WAAW,cAAc;AAC9C;AAEO,SAAS,0BAA4C;AACxD,SAAO,qBAAqB;AAAA,IACxB,UAAU,CAAC,gBAAgB,CAAC;AAAA,IAC5B,UAAU;AAAA,EACd,CAAC;AACL;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/web.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { DioCarousel } from "./carousel/Carousel";
|
|
2
2
|
import { DioFeedbackBanner } from "./feedback-banner/FeedbackBanner";
|
|
3
|
-
import {
|
|
3
|
+
import { DioNewsAlertSubscribe } from "./news-alert-subscribe/NewsAlertSubscribe";
|
|
4
4
|
import { DioSearchAutocomplete } from "./search-autocomplete/SearchAutocomplete";
|
|
5
5
|
import { DioTimeline } from "./timeline/Timeline";
|
|
6
6
|
import { DioToTopOfPage } from "./to-top-of-page/ToTopOfPage";
|
|
7
7
|
import "@digdir/designsystemet-web";
|
|
8
|
-
export { DioCarousel, DioFeedbackBanner,
|
|
8
|
+
export { DioCarousel, DioFeedbackBanner, DioNewsAlertSubscribe, DioSearchAutocomplete, DioTimeline, DioToTopOfPage, };
|
package/dist/web.js
CHANGED
|
@@ -39,10 +39,10 @@ var DioFeedbackBanner = class extends HTMLElement {
|
|
|
39
39
|
}
|
|
40
40
|
};
|
|
41
41
|
|
|
42
|
-
// src/
|
|
42
|
+
// src/news-alert-subscribe/NewsAlertSubscribe.ts
|
|
43
43
|
var emailRegex = /^(?!.*(?:''|\.\.))[A-Z0-9._!#$%&'*+\-/=?^`{|}~]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i;
|
|
44
44
|
var validateEmail = (value) => emailRegex.test(value);
|
|
45
|
-
var
|
|
45
|
+
var DioNewsAlertSubscribe = class extends HTMLElement {
|
|
46
46
|
#abort = null;
|
|
47
47
|
connectedCallback() {
|
|
48
48
|
if (document.readyState !== "loading") {
|
|
@@ -140,8 +140,8 @@ var DioNewsletterSubscribe = class extends HTMLElement {
|
|
|
140
140
|
this.#abort = null;
|
|
141
141
|
}
|
|
142
142
|
#getSubscribeUrl() {
|
|
143
|
-
const endpoint = this.dataset.
|
|
144
|
-
const subscribeId = this.dataset.
|
|
143
|
+
const endpoint = this.dataset.newsAlertEndpoint;
|
|
144
|
+
const subscribeId = this.dataset.newsAlertSubscribeId;
|
|
145
145
|
if (!endpoint || !subscribeId) return null;
|
|
146
146
|
return `${endpoint.replace(/\/$/, "")}/${encodeURIComponent(subscribeId)}`;
|
|
147
147
|
}
|
|
@@ -267,11 +267,8 @@ var DioSearchAutocomplete = class extends HTMLElement {
|
|
|
267
267
|
// src/timeline/Timeline.ts
|
|
268
268
|
var DioTimeline = class extends HTMLElement {
|
|
269
269
|
connectedCallback() {
|
|
270
|
-
const list = this.matches(".dio-timeline") ? this : this.querySelector(".dio-timeline");
|
|
271
270
|
const reverseBtn = this.querySelector("[data-toggle-reverse-timeline]");
|
|
272
271
|
const expandBtn = this.querySelector("[data-toggle-all-years]");
|
|
273
|
-
const eventLists = () => this.querySelectorAll(".dio-timeline__events");
|
|
274
|
-
const events = () => this.querySelectorAll(".dio-timeline__event");
|
|
275
272
|
reverseBtn?.addEventListener("click", () => {
|
|
276
273
|
const reversed = reverseBtn.getAttribute("data-reversed") === "true";
|
|
277
274
|
const nextReversed = !reversed;
|
|
@@ -280,10 +277,13 @@ var DioTimeline = class extends HTMLElement {
|
|
|
280
277
|
if (label) {
|
|
281
278
|
label.textContent = nextReversed ? reverseBtn.getAttribute("data-reversed-text") ?? "" : reverseBtn.getAttribute("data-initial-text") ?? "";
|
|
282
279
|
}
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
280
|
+
this.querySelectorAll("[data-timeline-event-list]").forEach(
|
|
281
|
+
(eventList) => {
|
|
282
|
+
const fragment = document.createDocumentFragment();
|
|
283
|
+
[...eventList.children].reverse().forEach((child) => fragment.appendChild(child));
|
|
284
|
+
eventList.appendChild(fragment);
|
|
285
|
+
}
|
|
286
|
+
);
|
|
287
287
|
});
|
|
288
288
|
expandBtn?.addEventListener("click", () => {
|
|
289
289
|
const expanded = expandBtn.getAttribute("data-expanded") === "true";
|
|
@@ -292,7 +292,7 @@ var DioTimeline = class extends HTMLElement {
|
|
|
292
292
|
if (label) {
|
|
293
293
|
label.textContent = expanded ? expandBtn.getAttribute("data-initial-text") ?? "" : expandBtn.getAttribute("data-active-text") ?? "";
|
|
294
294
|
}
|
|
295
|
-
|
|
295
|
+
this.querySelectorAll("[data-timeline-event]").forEach((event) => {
|
|
296
296
|
event.open = !expanded;
|
|
297
297
|
});
|
|
298
298
|
});
|
|
@@ -317,14 +317,14 @@ var define = (name, ctor) => {
|
|
|
317
317
|
};
|
|
318
318
|
define("dio-carousel", DioCarousel);
|
|
319
319
|
define("dio-feedback-banner", DioFeedbackBanner);
|
|
320
|
-
define("dio-
|
|
320
|
+
define("dio-news-alert-subscribe", DioNewsAlertSubscribe);
|
|
321
321
|
define("dio-search-autocomplete", DioSearchAutocomplete);
|
|
322
322
|
define("dio-timeline", DioTimeline);
|
|
323
323
|
define("dio-to-top-of-page", DioToTopOfPage);
|
|
324
324
|
export {
|
|
325
325
|
DioCarousel,
|
|
326
326
|
DioFeedbackBanner,
|
|
327
|
-
|
|
327
|
+
DioNewsAlertSubscribe,
|
|
328
328
|
DioSearchAutocomplete,
|
|
329
329
|
DioTimeline,
|
|
330
330
|
DioToTopOfPage
|
package/dist/web.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/carousel/Carousel.ts", "../src/feedback-banner/FeedbackBanner.ts", "../src/
|
|
4
|
-
"sourcesContent": ["export class DioCarousel extends HTMLElement {\n private current = 0\n\n connectedCallback() {\n const items = [...this.querySelectorAll<HTMLElement>(\"[data-carousel-item]\")]\n const prev = this.querySelector<HTMLButtonElement>(\"[data-carousel-prev]\")\n const next = this.querySelector<HTMLButtonElement>(\"[data-carousel-next]\")\n const info = this.querySelector<HTMLElement>(\"[data-carousel-info-content]\")\n\n if (!items.length) return\n\n const show = (index: number) => {\n this.current = (index + items.length) % items.length\n items.forEach((item, i) => {\n item.hidden = i !== this.current\n })\n if (info) {\n const active = items[this.current]\n const title = active.querySelector(\".dio-carousel__title\")?.textContent ?? \"\"\n info.textContent = title\n }\n prev?.toggleAttribute(\"disabled\", items.length <= 1)\n next?.toggleAttribute(\"disabled\", items.length <= 1)\n }\n\n prev?.addEventListener(\"click\", () => show(this.current - 1))\n next?.addEventListener(\"click\", () => show(this.current + 1))\n show(0)\n }\n}\n", "export class DioFeedbackBanner extends HTMLElement {\n connectedCallback() {\n const close = this.querySelector<HTMLButtonElement>(\"[data-hide-banner]\")\n close?.addEventListener(\"click\", () => {\n this.hidden = true\n })\n }\n}\n", "const emailRegex = /^(?!.*(?:''|\\.\\.))[A-Z0-9._!#$%&'*+\\-/=?^`{|}~]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i\n\nconst validateEmail = (value: string): boolean => emailRegex.test(value)\n\ntype NewsletterUi = {\n initialView: HTMLElement | null\n actionView: HTMLElement\n openButton: HTMLElement\n cancelButton: HTMLElement | null\n okButton: HTMLElement | null\n submitButton: HTMLElement\n emailInput: HTMLInputElement\n errorMessage: HTMLElement | null\n feedbackView: HTMLElement\n responseMessage: HTMLElement\n}\n\nexport class DioNewsletterSubscribe extends HTMLElement {\n #abort: AbortController | null = null\n\n connectedCallback() {\n if (document.readyState !== \"loading\") {\n this.init()\n return\n }\n document.addEventListener(\"DOMContentLoaded\", () => this.init(), { once: true })\n }\n\n init(): void {\n if (this.hasAttribute(\"data-initialized\")) return\n\n this.#abort?.abort()\n const ac = new AbortController()\n this.#abort = ac\n const opts: AddEventListenerOptions = { signal: ac.signal }\n\n const ui = this.#getUi()\n const subscribeUrl = this.#getSubscribeUrl()\n\n if (!ui || !subscribeUrl) return\n\n const setErrorVisible = (visible: boolean): void => {\n ui.errorMessage?.classList.toggle(\"hidden\", !visible)\n if (visible) {\n ui.errorMessage?.setAttribute(\"data-field\", \"validation\")\n } else {\n ui.errorMessage?.removeAttribute(\"data-field\")\n }\n }\n\n const showInitial = (): void => {\n ui.initialView?.classList.remove(\"hidden\")\n ui.actionView.classList.add(\"hidden\")\n ui.feedbackView.classList.add(\"hidden\")\n ui.emailInput.value = \"\"\n ui.responseMessage.textContent = \"\"\n setErrorVisible(false)\n }\n\n const showAction = (): void => {\n ui.initialView?.classList.add(\"hidden\")\n ui.actionView.classList.remove(\"hidden\")\n ui.feedbackView.classList.add(\"hidden\")\n setErrorVisible(false)\n }\n\n const showFeedback = (message: string): void => {\n ui.actionView.classList.add(\"hidden\")\n ui.responseMessage.textContent = message\n ui.feedbackView.classList.remove(\"hidden\")\n }\n\n ui.openButton.addEventListener(\n \"click\",\n () => {\n showAction()\n ui.emailInput.focus()\n },\n opts,\n )\n\n ui.cancelButton?.addEventListener(\n \"click\",\n () => {\n showInitial()\n ui.openButton.focus()\n },\n opts,\n )\n\n ui.okButton?.addEventListener(\"click\", showInitial, opts)\n\n ui.emailInput.addEventListener(\n \"keydown\",\n (e: KeyboardEvent) => {\n setErrorVisible(false)\n if (e.key === \"Enter\") {\n e.preventDefault()\n ui.submitButton.click()\n }\n },\n opts,\n )\n\n ui.submitButton.addEventListener(\n \"click\",\n async () => {\n if (!validateEmail(ui.emailInput.value)) {\n setErrorVisible(true)\n return\n }\n const url = `${subscribeUrl}?email=${encodeURIComponent(ui.emailInput.value)}`\n try {\n const res = await fetch(url, { method: \"POST\", signal: ac.signal })\n const text = await res.text()\n showFeedback(res.ok ? text : \"\")\n } catch {\n if (!ac.signal.aborted) showFeedback(\"\")\n }\n },\n opts,\n )\n\n this.setAttribute(\"data-initialized\", \"true\")\n }\n\n disconnectedCallback(): void {\n this.#abort?.abort()\n this.#abort = null\n }\n\n #getSubscribeUrl(): string | null {\n const endpoint = this.dataset.newsletterEndpoint\n const subscribeId = this.dataset.newsletterSubscribeId\n if (!endpoint || !subscribeId) return null\n return `${endpoint.replace(/\\/$/, \"\")}/${encodeURIComponent(subscribeId)}`\n }\n\n #getUi(): NewsletterUi | null {\n const actionView = this.querySelector<HTMLElement>(\"[data-action]\")\n const openButton = this.querySelector<HTMLElement>(\"[data-open]\")\n const submitButton = this.querySelector<HTMLButtonElement>(\"[data-submit]\")\n const emailInput = this.querySelector<HTMLInputElement>(\"[data-email]\")\n const feedbackView = this.querySelector<HTMLElement>(\"[data-feedback]\")\n const responseMessage = feedbackView?.querySelector<HTMLElement>(\"[data-response]\")\n\n if (\n !actionView ||\n !openButton ||\n !submitButton ||\n !emailInput ||\n !feedbackView ||\n !responseMessage\n ) {\n return null\n }\n\n return {\n initialView: this.querySelector<HTMLElement>(\"[data-initial]\"),\n actionView,\n openButton,\n cancelButton: this.querySelector<HTMLElement>(\"[data-cancel]\"),\n okButton: this.querySelector<HTMLElement>(\"[data-ok]\"),\n submitButton,\n emailInput,\n errorMessage: this.querySelector<HTMLElement>(\"[data-error]\"),\n feedbackView,\n responseMessage,\n }\n }\n}\n", "type SuggestItem = {\n Name: string\n Url: string\n FormattedMetadata: string\n}\n\nexport class DioSearchAutocomplete extends HTMLElement {\n #abort?: AbortController\n #debounce?: ReturnType<typeof setTimeout>\n\n connectedCallback() {\n const input = this.querySelector<HTMLInputElement>(\"[data-search-input]\")\n const list = this.querySelector<HTMLUListElement>(\"[data-search-suggest-list]\")\n const panel = this.querySelector<HTMLElement>(\"[data-search-suggest]\")\n if (!input || !list || !panel) return\n\n const source = this.getAttribute(\"data-autocomplete-source\") ?? \"\"\n const mockAttr = this.getAttribute(\"data-mock-suggestions\")\n let mocks: SuggestItem[] = []\n if (mockAttr) {\n try {\n const parsed = JSON.parse(mockAttr) as unknown\n if (Array.isArray(parsed)) mocks = parsed as SuggestItem[]\n } catch {\n mocks = []\n }\n }\n let currentTerm = \"\"\n\n const reset = () => {\n list.innerHTML = \"\"\n panel.hidden = true\n input.setAttribute(\"aria-expanded\", \"false\")\n }\n\n const render = (items: SuggestItem[]) => {\n list.replaceChildren(\n ...items.map((item) => {\n const li = document.createElement(\"li\")\n li.className = \"dio-search-autocomplete__suggest-item\"\n\n const a = document.createElement(\"a\")\n const href = item.Url.trim()\n a.setAttribute(\"href\", /^(?:javascript|data):/i.test(href) ? \"#\" : href)\n\n const title = document.createElement(\"span\")\n title.className = \"dio-search-autocomplete__suggest-title\"\n title.textContent = item.Name\n\n const meta = document.createElement(\"span\")\n meta.className = \"dio-search-autocomplete__suggest-meta\"\n meta.textContent = item.FormattedMetadata\n\n a.append(title, meta)\n li.append(a)\n return li\n }),\n )\n panel.hidden = items.length === 0\n input.setAttribute(\"aria-expanded\", String(items.length > 0))\n }\n\n const search = async (term: string) => {\n if (term.length < 2) {\n reset()\n return\n }\n if (term === currentTerm) return\n currentTerm = term\n\n if (mocks.length) {\n render(mocks.filter((m) => m.Name.toLowerCase().includes(term.toLowerCase())))\n return\n }\n\n this.#abort?.abort()\n this.#abort = new AbortController()\n try {\n const res = await fetch(`${source}${encodeURIComponent(term)}`, {\n signal: this.#abort.signal,\n })\n const data = (await res.json()) as SuggestItem[]\n render(Array.isArray(data) ? data : [])\n } catch {\n if (!this.#abort.signal.aborted) reset()\n }\n }\n\n input.addEventListener(\"input\", () => {\n clearTimeout(this.#debounce)\n this.#debounce = setTimeout(() => search(input.value), 350)\n })\n\n input.addEventListener(\"keydown\", (e) => {\n if (e.key === \"Escape\") reset()\n })\n\n const self = this as unknown as { __dioDocClick?: (e: MouseEvent) => void }\n if (self.__dioDocClick) document.removeEventListener(\"click\", self.__dioDocClick)\n self.__dioDocClick = (e) => {\n if (!this.contains(e.target as Node)) reset()\n }\n document.addEventListener(\"click\", self.__dioDocClick)\n }\n\n disconnectedCallback() {\n const self = this as unknown as { __dioDocClick?: (e: MouseEvent) => void }\n if (self.__dioDocClick) document.removeEventListener(\"click\", self.__dioDocClick)\n self.__dioDocClick = undefined\n clearTimeout(this.#debounce)\n this.#abort?.abort()\n }\n}\n", "export class DioTimeline extends HTMLElement {\n connectedCallback() {\n const list = this.matches(\".dio-timeline\")\n ? this\n : this.querySelector<HTMLElement>(\".dio-timeline\")\n const reverseBtn = this.querySelector<HTMLButtonElement>(\"[data-toggle-reverse-timeline]\")\n const expandBtn = this.querySelector<HTMLButtonElement>(\"[data-toggle-all-years]\")\n const eventLists = () => this.querySelectorAll<HTMLElement>(\".dio-timeline__events\")\n const events = () => this.querySelectorAll<HTMLDetailsElement>(\".dio-timeline__event\")\n\n reverseBtn?.addEventListener(\"click\", () => {\n const reversed = reverseBtn.getAttribute(\"data-reversed\") === \"true\"\n const nextReversed = !reversed\n reverseBtn.setAttribute(\"data-reversed\", String(nextReversed))\n const label = reverseBtn.querySelector(\"span\")\n if (label) {\n label.textContent = nextReversed\n ? (reverseBtn.getAttribute(\"data-reversed-text\") ?? \"\")\n : (reverseBtn.getAttribute(\"data-initial-text\") ?? \"\")\n }\n if (list) list.style.flexDirection = nextReversed ? \"column-reverse\" : \"\"\n eventLists().forEach((eventList) => {\n eventList.style.flexDirection = nextReversed ? \"column-reverse\" : \"\"\n })\n })\n\n expandBtn?.addEventListener(\"click\", () => {\n const expanded = expandBtn.getAttribute(\"data-expanded\") === \"true\"\n expandBtn.setAttribute(\"data-expanded\", String(!expanded))\n const label = expandBtn.querySelector(\"span\")\n if (label) {\n label.textContent = expanded\n ? (expandBtn.getAttribute(\"data-initial-text\") ?? \"\")\n : (expandBtn.getAttribute(\"data-active-text\") ?? \"\")\n }\n events().forEach((event) => {\n event.open = !expanded\n })\n })\n }\n}\n", "export class DioToTopOfPage extends HTMLElement {\n connectedCallback() {\n const link = this.querySelector<HTMLAnchorElement>(\"[data-to-top-of-page]\")\n link?.addEventListener(\"click\", (event) => {\n event.preventDefault()\n window.scrollTo({ top: 0, behavior: \"smooth\" })\n })\n }\n}\n", "import { DioCarousel } from \"./carousel/Carousel\"\nimport { DioFeedbackBanner } from \"./feedback-banner/FeedbackBanner\"\nimport { DioNewsletterSubscribe } from \"./newsletter-subscribe/NewsletterSubscribe\"\nimport { DioSearchAutocomplete } from \"./search-autocomplete/SearchAutocomplete\"\nimport { DioTimeline } from \"./timeline/Timeline\"\nimport { DioToTopOfPage } from \"./to-top-of-page/ToTopOfPage\"\nimport \"@digdir/designsystemet-web\"\n\nexport {\n DioCarousel,\n DioFeedbackBanner,\n DioNewsletterSubscribe,\n DioSearchAutocomplete,\n DioTimeline,\n DioToTopOfPage,\n}\n\nconst define = (name: string, ctor: CustomElementConstructor) => {\n if (!customElements.get(name)) customElements.define(name, ctor)\n}\n\ndefine(\"dio-carousel\", DioCarousel)\ndefine(\"dio-feedback-banner\", DioFeedbackBanner)\ndefine(\"dio-newsletter-subscribe\", DioNewsletterSubscribe)\ndefine(\"dio-search-autocomplete\", DioSearchAutocomplete)\ndefine(\"dio-timeline\", DioTimeline)\ndefine(\"dio-to-top-of-page\", DioToTopOfPage)\n"],
|
|
5
|
-
"mappings": ";AAAO,IAAM,cAAN,cAA0B,YAAY;AAAA,EAAtC;AAAA;AACH,SAAQ,UAAU;AAAA;AAAA,EAElB,oBAAoB;AAChB,UAAM,QAAQ,CAAC,GAAG,KAAK,iBAA8B,sBAAsB,CAAC;AAC5E,UAAM,OAAO,KAAK,cAAiC,sBAAsB;AACzE,UAAM,OAAO,KAAK,cAAiC,sBAAsB;AACzE,UAAM,OAAO,KAAK,cAA2B,8BAA8B;AAE3E,QAAI,CAAC,MAAM,OAAQ;AAEnB,UAAM,OAAO,CAAC,UAAkB;AAC5B,WAAK,WAAW,QAAQ,MAAM,UAAU,MAAM;AAC9C,YAAM,QAAQ,CAAC,MAAM,MAAM;AACvB,aAAK,SAAS,MAAM,KAAK;AAAA,MAC7B,CAAC;AACD,UAAI,MAAM;AACN,cAAM,SAAS,MAAM,KAAK,OAAO;AACjC,cAAM,QAAQ,OAAO,cAAc,sBAAsB,GAAG,eAAe;AAC3E,aAAK,cAAc;AAAA,MACvB;AACA,YAAM,gBAAgB,YAAY,MAAM,UAAU,CAAC;AACnD,YAAM,gBAAgB,YAAY,MAAM,UAAU,CAAC;AAAA,IACvD;AAEA,UAAM,iBAAiB,SAAS,MAAM,KAAK,KAAK,UAAU,CAAC,CAAC;AAC5D,UAAM,iBAAiB,SAAS,MAAM,KAAK,KAAK,UAAU,CAAC,CAAC;AAC5D,SAAK,CAAC;AAAA,EACV;AACJ;;;AC7BO,IAAM,oBAAN,cAAgC,YAAY;AAAA,EAC/C,oBAAoB;AAChB,UAAM,QAAQ,KAAK,cAAiC,oBAAoB;AACxE,WAAO,iBAAiB,SAAS,MAAM;AACnC,WAAK,SAAS;AAAA,IAClB,CAAC;AAAA,EACL;AACJ;;;ACPA,IAAM,aAAa;AAEnB,IAAM,gBAAgB,CAAC,UAA2B,WAAW,KAAK,KAAK;AAehE,IAAM,
|
|
3
|
+
"sources": ["../src/carousel/Carousel.ts", "../src/feedback-banner/FeedbackBanner.ts", "../src/news-alert-subscribe/NewsAlertSubscribe.ts", "../src/search-autocomplete/SearchAutocomplete.ts", "../src/timeline/Timeline.ts", "../src/to-top-of-page/ToTopOfPage.ts", "../src/web.ts"],
|
|
4
|
+
"sourcesContent": ["export class DioCarousel extends HTMLElement {\n private current = 0\n\n connectedCallback() {\n const items = [...this.querySelectorAll<HTMLElement>(\"[data-carousel-item]\")]\n const prev = this.querySelector<HTMLButtonElement>(\"[data-carousel-prev]\")\n const next = this.querySelector<HTMLButtonElement>(\"[data-carousel-next]\")\n const info = this.querySelector<HTMLElement>(\"[data-carousel-info-content]\")\n\n if (!items.length) return\n\n const show = (index: number) => {\n this.current = (index + items.length) % items.length\n items.forEach((item, i) => {\n item.hidden = i !== this.current\n })\n if (info) {\n const active = items[this.current]\n const title = active.querySelector(\".dio-carousel__title\")?.textContent ?? \"\"\n info.textContent = title\n }\n prev?.toggleAttribute(\"disabled\", items.length <= 1)\n next?.toggleAttribute(\"disabled\", items.length <= 1)\n }\n\n prev?.addEventListener(\"click\", () => show(this.current - 1))\n next?.addEventListener(\"click\", () => show(this.current + 1))\n show(0)\n }\n}\n", "export class DioFeedbackBanner extends HTMLElement {\n connectedCallback() {\n const close = this.querySelector<HTMLButtonElement>(\"[data-hide-banner]\")\n close?.addEventListener(\"click\", () => {\n this.hidden = true\n })\n }\n}\n", "const emailRegex = /^(?!.*(?:''|\\.\\.))[A-Z0-9._!#$%&'*+\\-/=?^`{|}~]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i\n\nconst validateEmail = (value: string): boolean => emailRegex.test(value)\n\ntype NewsAlertUi = {\n initialView: HTMLElement | null\n actionView: HTMLElement\n openButton: HTMLElement\n cancelButton: HTMLElement | null\n okButton: HTMLElement | null\n submitButton: HTMLElement\n emailInput: HTMLInputElement\n errorMessage: HTMLElement | null\n feedbackView: HTMLElement\n responseMessage: HTMLElement\n}\n\nexport class DioNewsAlertSubscribe extends HTMLElement {\n #abort: AbortController | null = null\n\n connectedCallback() {\n if (document.readyState !== \"loading\") {\n this.init()\n return\n }\n document.addEventListener(\"DOMContentLoaded\", () => this.init(), { once: true })\n }\n\n init(): void {\n if (this.hasAttribute(\"data-initialized\")) return\n\n this.#abort?.abort()\n const ac = new AbortController()\n this.#abort = ac\n const opts: AddEventListenerOptions = { signal: ac.signal }\n\n const ui = this.#getUi()\n const subscribeUrl = this.#getSubscribeUrl()\n\n if (!ui || !subscribeUrl) return\n\n const setErrorVisible = (visible: boolean): void => {\n ui.errorMessage?.classList.toggle(\"hidden\", !visible)\n if (visible) {\n ui.errorMessage?.setAttribute(\"data-field\", \"validation\")\n } else {\n ui.errorMessage?.removeAttribute(\"data-field\")\n }\n }\n\n const showInitial = (): void => {\n ui.initialView?.classList.remove(\"hidden\")\n ui.actionView.classList.add(\"hidden\")\n ui.feedbackView.classList.add(\"hidden\")\n ui.emailInput.value = \"\"\n ui.responseMessage.textContent = \"\"\n setErrorVisible(false)\n }\n\n const showAction = (): void => {\n ui.initialView?.classList.add(\"hidden\")\n ui.actionView.classList.remove(\"hidden\")\n ui.feedbackView.classList.add(\"hidden\")\n setErrorVisible(false)\n }\n\n const showFeedback = (message: string): void => {\n ui.actionView.classList.add(\"hidden\")\n ui.responseMessage.textContent = message\n ui.feedbackView.classList.remove(\"hidden\")\n }\n\n ui.openButton.addEventListener(\n \"click\",\n () => {\n showAction()\n ui.emailInput.focus()\n },\n opts,\n )\n\n ui.cancelButton?.addEventListener(\n \"click\",\n () => {\n showInitial()\n ui.openButton.focus()\n },\n opts,\n )\n\n ui.okButton?.addEventListener(\"click\", showInitial, opts)\n\n ui.emailInput.addEventListener(\n \"keydown\",\n (e: KeyboardEvent) => {\n setErrorVisible(false)\n if (e.key === \"Enter\") {\n e.preventDefault()\n ui.submitButton.click()\n }\n },\n opts,\n )\n\n ui.submitButton.addEventListener(\n \"click\",\n async () => {\n if (!validateEmail(ui.emailInput.value)) {\n setErrorVisible(true)\n return\n }\n const url = `${subscribeUrl}?email=${encodeURIComponent(ui.emailInput.value)}`\n try {\n const res = await fetch(url, { method: \"POST\", signal: ac.signal })\n const text = await res.text()\n showFeedback(res.ok ? text : \"\")\n } catch {\n if (!ac.signal.aborted) showFeedback(\"\")\n }\n },\n opts,\n )\n\n this.setAttribute(\"data-initialized\", \"true\")\n }\n\n disconnectedCallback(): void {\n this.#abort?.abort()\n this.#abort = null\n }\n\n #getSubscribeUrl(): string | null {\n const endpoint = this.dataset.newsAlertEndpoint\n const subscribeId = this.dataset.newsAlertSubscribeId\n if (!endpoint || !subscribeId) return null\n return `${endpoint.replace(/\\/$/, \"\")}/${encodeURIComponent(subscribeId)}`\n }\n\n #getUi(): NewsAlertUi | null {\n const actionView = this.querySelector<HTMLElement>(\"[data-action]\")\n const openButton = this.querySelector<HTMLElement>(\"[data-open]\")\n const submitButton = this.querySelector<HTMLButtonElement>(\"[data-submit]\")\n const emailInput = this.querySelector<HTMLInputElement>(\"[data-email]\")\n const feedbackView = this.querySelector<HTMLElement>(\"[data-feedback]\")\n const responseMessage = feedbackView?.querySelector<HTMLElement>(\"[data-response]\")\n\n if (\n !actionView ||\n !openButton ||\n !submitButton ||\n !emailInput ||\n !feedbackView ||\n !responseMessage\n ) {\n return null\n }\n\n return {\n initialView: this.querySelector<HTMLElement>(\"[data-initial]\"),\n actionView,\n openButton,\n cancelButton: this.querySelector<HTMLElement>(\"[data-cancel]\"),\n okButton: this.querySelector<HTMLElement>(\"[data-ok]\"),\n submitButton,\n emailInput,\n errorMessage: this.querySelector<HTMLElement>(\"[data-error]\"),\n feedbackView,\n responseMessage,\n }\n }\n}\n", "type SuggestItem = {\n Name: string\n Url: string\n FormattedMetadata: string\n}\n\nexport class DioSearchAutocomplete extends HTMLElement {\n #abort?: AbortController\n #debounce?: ReturnType<typeof setTimeout>\n\n connectedCallback() {\n const input = this.querySelector<HTMLInputElement>(\"[data-search-input]\")\n const list = this.querySelector<HTMLUListElement>(\"[data-search-suggest-list]\")\n const panel = this.querySelector<HTMLElement>(\"[data-search-suggest]\")\n if (!input || !list || !panel) return\n\n const source = this.getAttribute(\"data-autocomplete-source\") ?? \"\"\n const mockAttr = this.getAttribute(\"data-mock-suggestions\")\n let mocks: SuggestItem[] = []\n if (mockAttr) {\n try {\n const parsed = JSON.parse(mockAttr) as unknown\n if (Array.isArray(parsed)) mocks = parsed as SuggestItem[]\n } catch {\n mocks = []\n }\n }\n let currentTerm = \"\"\n\n const reset = () => {\n list.innerHTML = \"\"\n panel.hidden = true\n input.setAttribute(\"aria-expanded\", \"false\")\n }\n\n const render = (items: SuggestItem[]) => {\n list.replaceChildren(\n ...items.map((item) => {\n const li = document.createElement(\"li\")\n li.className = \"dio-search-autocomplete__suggest-item\"\n\n const a = document.createElement(\"a\")\n const href = item.Url.trim()\n a.setAttribute(\"href\", /^(?:javascript|data):/i.test(href) ? \"#\" : href)\n\n const title = document.createElement(\"span\")\n title.className = \"dio-search-autocomplete__suggest-title\"\n title.textContent = item.Name\n\n const meta = document.createElement(\"span\")\n meta.className = \"dio-search-autocomplete__suggest-meta\"\n meta.textContent = item.FormattedMetadata\n\n a.append(title, meta)\n li.append(a)\n return li\n }),\n )\n panel.hidden = items.length === 0\n input.setAttribute(\"aria-expanded\", String(items.length > 0))\n }\n\n const search = async (term: string) => {\n if (term.length < 2) {\n reset()\n return\n }\n if (term === currentTerm) return\n currentTerm = term\n\n if (mocks.length) {\n render(mocks.filter((m) => m.Name.toLowerCase().includes(term.toLowerCase())))\n return\n }\n\n this.#abort?.abort()\n this.#abort = new AbortController()\n try {\n const res = await fetch(`${source}${encodeURIComponent(term)}`, {\n signal: this.#abort.signal,\n })\n const data = (await res.json()) as SuggestItem[]\n render(Array.isArray(data) ? data : [])\n } catch {\n if (!this.#abort.signal.aborted) reset()\n }\n }\n\n input.addEventListener(\"input\", () => {\n clearTimeout(this.#debounce)\n this.#debounce = setTimeout(() => search(input.value), 350)\n })\n\n input.addEventListener(\"keydown\", (e) => {\n if (e.key === \"Escape\") reset()\n })\n\n const self = this as unknown as { __dioDocClick?: (e: MouseEvent) => void }\n if (self.__dioDocClick) document.removeEventListener(\"click\", self.__dioDocClick)\n self.__dioDocClick = (e) => {\n if (!this.contains(e.target as Node)) reset()\n }\n document.addEventListener(\"click\", self.__dioDocClick)\n }\n\n disconnectedCallback() {\n const self = this as unknown as { __dioDocClick?: (e: MouseEvent) => void }\n if (self.__dioDocClick) document.removeEventListener(\"click\", self.__dioDocClick)\n self.__dioDocClick = undefined\n clearTimeout(this.#debounce)\n this.#abort?.abort()\n }\n}\n", "export class DioTimeline extends HTMLElement {\n connectedCallback() {\n const reverseBtn = this.querySelector<HTMLButtonElement>(\"[data-toggle-reverse-timeline]\")\n const expandBtn = this.querySelector<HTMLButtonElement>(\"[data-toggle-all-years]\")\n\n reverseBtn?.addEventListener(\"click\", () => {\n const reversed = reverseBtn.getAttribute(\"data-reversed\") === \"true\"\n const nextReversed = !reversed\n reverseBtn.setAttribute(\"data-reversed\", String(nextReversed))\n const label = reverseBtn.querySelector(\"span\")\n if (label) {\n label.textContent = nextReversed\n ? (reverseBtn.getAttribute(\"data-reversed-text\") ?? \"\")\n : (reverseBtn.getAttribute(\"data-initial-text\") ?? \"\")\n }\n this.querySelectorAll<HTMLElement>(\"[data-timeline-event-list]\").forEach(\n (eventList) => {\n const fragment = document.createDocumentFragment()\n ;[...eventList.children]\n .reverse()\n .forEach((child) => fragment.appendChild(child))\n eventList.appendChild(fragment)\n },\n )\n })\n\n expandBtn?.addEventListener(\"click\", () => {\n const expanded = expandBtn.getAttribute(\"data-expanded\") === \"true\"\n expandBtn.setAttribute(\"data-expanded\", String(!expanded))\n const label = expandBtn.querySelector(\"span\")\n if (label) {\n label.textContent = expanded\n ? (expandBtn.getAttribute(\"data-initial-text\") ?? \"\")\n : (expandBtn.getAttribute(\"data-active-text\") ?? \"\")\n }\n this.querySelectorAll<HTMLDetailsElement>(\"[data-timeline-event]\").forEach((event) => {\n event.open = !expanded\n })\n })\n }\n}\n", "export class DioToTopOfPage extends HTMLElement {\n connectedCallback() {\n const link = this.querySelector<HTMLAnchorElement>(\"[data-to-top-of-page]\")\n link?.addEventListener(\"click\", (event) => {\n event.preventDefault()\n window.scrollTo({ top: 0, behavior: \"smooth\" })\n })\n }\n}\n", "import { DioCarousel } from \"./carousel/Carousel\"\nimport { DioFeedbackBanner } from \"./feedback-banner/FeedbackBanner\"\nimport { DioNewsAlertSubscribe } from \"./news-alert-subscribe/NewsAlertSubscribe\"\nimport { DioSearchAutocomplete } from \"./search-autocomplete/SearchAutocomplete\"\nimport { DioTimeline } from \"./timeline/Timeline\"\nimport { DioToTopOfPage } from \"./to-top-of-page/ToTopOfPage\"\nimport \"@digdir/designsystemet-web\"\n\nexport {\n DioCarousel,\n DioFeedbackBanner,\n DioNewsAlertSubscribe,\n DioSearchAutocomplete,\n DioTimeline,\n DioToTopOfPage,\n}\n\nconst define = (name: string, ctor: CustomElementConstructor) => {\n if (!customElements.get(name)) customElements.define(name, ctor)\n}\n\ndefine(\"dio-carousel\", DioCarousel)\ndefine(\"dio-feedback-banner\", DioFeedbackBanner)\ndefine(\"dio-news-alert-subscribe\", DioNewsAlertSubscribe)\ndefine(\"dio-search-autocomplete\", DioSearchAutocomplete)\ndefine(\"dio-timeline\", DioTimeline)\ndefine(\"dio-to-top-of-page\", DioToTopOfPage)\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,77 +1,90 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
},
|
|
11
|
-
"files": [
|
|
12
|
-
"dist"
|
|
13
|
-
],
|
|
14
|
-
"type": "module",
|
|
15
|
-
"sideEffects": [
|
|
16
|
-
"**/*.css",
|
|
17
|
-
"**/*.scss",
|
|
18
|
-
"./dist/web.js",
|
|
19
|
-
"./dist/svg-icons-register.js"
|
|
20
|
-
],
|
|
21
|
-
"exports": {
|
|
22
|
-
"./icons": {
|
|
23
|
-
"types": "./dist/icons.d.ts",
|
|
24
|
-
"import": "./dist/icons.js"
|
|
2
|
+
"name": "@dep-dio/dio-designsystem",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "DIO design system built on Designsystemet",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/dss-web/dio-designsystemet.git",
|
|
9
|
+
"directory": "packages/dio-designsystem"
|
|
25
10
|
},
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"designsystemet.config.json"
|
|
14
|
+
],
|
|
15
|
+
"type": "module",
|
|
16
|
+
"sideEffects": [
|
|
17
|
+
"**/*.css",
|
|
18
|
+
"**/*.scss",
|
|
19
|
+
"./dist/web.js",
|
|
20
|
+
"./dist/svg-icons-register.js"
|
|
21
|
+
],
|
|
22
|
+
"exports": {
|
|
23
|
+
"./icons": {
|
|
24
|
+
"types": "./dist/icons.d.ts",
|
|
25
|
+
"import": "./dist/icons.js"
|
|
26
|
+
},
|
|
27
|
+
"./web": {
|
|
28
|
+
"types": "./dist/web.d.ts",
|
|
29
|
+
"import": "./dist/web.js"
|
|
30
|
+
},
|
|
31
|
+
"./svg-icons-register": {
|
|
32
|
+
"types": "./dist/svg-icons-register.d.ts",
|
|
33
|
+
"import": "./dist/svg-icons-register.js"
|
|
34
|
+
},
|
|
35
|
+
"./vite-icons-plugin": {
|
|
36
|
+
"types": "./dist/vite-icons-plugin.d.ts",
|
|
37
|
+
"import": "./dist/vite-icons-plugin.js"
|
|
38
|
+
},
|
|
39
|
+
"./styles": {
|
|
40
|
+
"types": "./dist/styles.d.ts",
|
|
41
|
+
"default": "./dist/styles/main.css"
|
|
42
|
+
},
|
|
43
|
+
"./styles.css": "./dist/styles/main.css",
|
|
44
|
+
"./scss-utils": "./dist/styles/scss-utils.scss",
|
|
45
|
+
"./designsystemet.config.json": "./designsystemet.config.json",
|
|
46
|
+
"./types": {
|
|
47
|
+
"types": "./dist/types.d.ts"
|
|
48
|
+
}
|
|
29
49
|
},
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
"import": "./dist/svg-icons-register.js"
|
|
50
|
+
"publishConfig": {
|
|
51
|
+
"access": "public"
|
|
33
52
|
},
|
|
34
|
-
"
|
|
35
|
-
|
|
36
|
-
|
|
53
|
+
"scripts": {
|
|
54
|
+
"build": "npm run tokens && npm run prepare-dist && npm run build:js",
|
|
55
|
+
"build:js": "node scripts/build-js.mjs && tsc -p tsconfig.build.json",
|
|
56
|
+
"prepare-dist": "node scripts/prepare-dist.mjs",
|
|
57
|
+
"prepublishOnly": "npm run build",
|
|
58
|
+
"tokens": "npm run tokens:create && npm run tokens:patch && npm run tokens:build",
|
|
59
|
+
"tokens:build": "designsystemet tokens build --config designsystemet.config.json",
|
|
60
|
+
"tokens:create": "designsystemet tokens create --config designsystemet.config.json",
|
|
61
|
+
"tokens:patch": "node scripts/patch-tokens.mjs"
|
|
37
62
|
},
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
},
|
|
44
|
-
"dependencies": {
|
|
45
|
-
"@digdir/designsystemet-css": "^1.17.0",
|
|
46
|
-
"@digdir/designsystemet-web": "^1.17.0",
|
|
47
|
-
"@navikt/aksel-icons": "^8.13.1"
|
|
48
|
-
},
|
|
49
|
-
"devDependencies": {
|
|
50
|
-
"@digdir/designsystemet": "^1.17.0",
|
|
51
|
-
"esbuild": "^0.28.1",
|
|
52
|
-
"fast-glob": "^3.3.3",
|
|
53
|
-
"sass": "^1.101.0",
|
|
54
|
-
"typescript": "~6.0.3",
|
|
55
|
-
"vite": "^8.1.0",
|
|
56
|
-
"vite-plugin-svg-icons": "^2.0.1"
|
|
57
|
-
},
|
|
58
|
-
"peerDependencies": {
|
|
59
|
-
"vite": "^6.0.0 || ^7.0.0 || ^8.0.0",
|
|
60
|
-
"vite-plugin-svg-icons": "^2.0.0"
|
|
61
|
-
},
|
|
62
|
-
"peerDependenciesMeta": {
|
|
63
|
-
"vite": {
|
|
64
|
-
"optional": true
|
|
63
|
+
"dependencies": {
|
|
64
|
+
"@digdir/designsystemet-css": "^1.18.0",
|
|
65
|
+
"@digdir/designsystemet-types": "^1.18.0",
|
|
66
|
+
"@digdir/designsystemet-web": "^1.18.0",
|
|
67
|
+
"@navikt/aksel-icons": "^8.16.1"
|
|
65
68
|
},
|
|
66
|
-
"
|
|
67
|
-
|
|
69
|
+
"devDependencies": {
|
|
70
|
+
"@digdir/designsystemet": "^1.18.0",
|
|
71
|
+
"esbuild": "^0.28.1",
|
|
72
|
+
"fast-glob": "^3.3.3",
|
|
73
|
+
"sass": "^1.102.0",
|
|
74
|
+
"typescript": "~7.0.2",
|
|
75
|
+
"vite": "^8.1.5",
|
|
76
|
+
"vite-plugin-svg-icons": "^2.0.1"
|
|
77
|
+
},
|
|
78
|
+
"peerDependencies": {
|
|
79
|
+
"vite": "^6.0.0 || ^7.0.0 || ^8.0.0",
|
|
80
|
+
"vite-plugin-svg-icons": "^2.0.0"
|
|
81
|
+
},
|
|
82
|
+
"peerDependenciesMeta": {
|
|
83
|
+
"vite": {
|
|
84
|
+
"optional": true
|
|
85
|
+
},
|
|
86
|
+
"vite-plugin-svg-icons": {
|
|
87
|
+
"optional": true
|
|
88
|
+
}
|
|
68
89
|
}
|
|
69
|
-
|
|
70
|
-
"scripts": {
|
|
71
|
-
"build-tokens": "designsystemet tokens build --config designsystemet.config.json",
|
|
72
|
-
"create-tokens": "designsystemet tokens create --config designsystemet.config.json",
|
|
73
|
-
"prepare-dist": "node scripts/prepare-dist.mjs",
|
|
74
|
-
"build:js": "node scripts/build-js.mjs && tsc -p tsconfig.build.json",
|
|
75
|
-
"build": "pnpm create-tokens && pnpm build-tokens && pnpm prepare-dist && pnpm build:js"
|
|
76
|
-
}
|
|
77
|
-
}
|
|
90
|
+
}
|
package/dist/styles/_mixins.scss
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
@mixin dio-text-heading-1 {
|
|
2
|
-
font-weight: var(--ds-heading-xl-font-weight);
|
|
3
|
-
line-height: var(--ds-heading-xl-line-height);
|
|
4
|
-
font-size: var(--ds-heading-xl-font-size);
|
|
5
|
-
letter-spacing: var(--ds-heading-xl-letter-spacing);
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
@mixin dio-text-heading-2 {
|
|
9
|
-
font-size: var(--ds-heading-lg-font-size);
|
|
10
|
-
font-weight: var(--ds-heading-lg-font-weight);
|
|
11
|
-
letter-spacing: var(--ds-heading-lg-letter-spacing);
|
|
12
|
-
line-height: var(--ds-heading-lg-line-height);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
@mixin dio-text-heading-3 {
|
|
16
|
-
font-weight: var(--ds-heading-sm-font-weight);
|
|
17
|
-
line-height: var(--ds-heading-sm-line-height);
|
|
18
|
-
font-size: var(--ds-heading-sm-font-size);
|
|
19
|
-
letter-spacing: var(--ds-heading-sm-letter-spacing);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
@mixin dio-text-heading-4 {
|
|
23
|
-
font-size: var(--ds-heading-xs-font-size);
|
|
24
|
-
font-weight: var(--ds-heading-xs-font-weight);
|
|
25
|
-
letter-spacing: var(--ds-heading-xs-letter-spacing);
|
|
26
|
-
line-height: var(--ds-heading-xs-line-height);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
@mixin dio-text-large {
|
|
30
|
-
font-weight: var(--ds-body-xl-font-weight);
|
|
31
|
-
line-height: var(--ds-body-xl-line-height);
|
|
32
|
-
font-size: var(--ds-body-xl-font-size);
|
|
33
|
-
letter-spacing: var(--ds-body-xl-letter-spacing);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
@mixin dio-text-base {
|
|
37
|
-
font-weight: var(--ds-body-md-font-weight);
|
|
38
|
-
line-height: var(--ds-body-md-line-height);
|
|
39
|
-
font-size: var(--ds-body-md-font-size);
|
|
40
|
-
letter-spacing: var(--ds-body-md-letter-spacing);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
@mixin dio-text-small {
|
|
44
|
-
font-weight: var(--ds-body-sm-font-weight);
|
|
45
|
-
line-height: var(--ds-body-sm-line-height);
|
|
46
|
-
font-size: var(--ds-body-sm-font-size);
|
|
47
|
-
letter-spacing: var(--ds-body-sm-letter-spacing);
|
|
48
|
-
}
|