@fristil/designsystem 0.4.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/CHANGELOG.md +136 -0
  2. package/README.md +22 -7
  3. package/dist/components/frittstaende/connection-status/connection-status.d.ts +28 -0
  4. package/dist/components/frittstaende/connection-status/connection-status.d.ts.map +1 -0
  5. package/dist/components/frittstaende/connection-status/connection-status.js +22 -0
  6. package/dist/components/frittstaende/connection-status/connection-status.js.map +1 -0
  7. package/dist/components/frittstaende/connection-status/fs-connection-status.d.ts +54 -0
  8. package/dist/components/frittstaende/connection-status/fs-connection-status.d.ts.map +1 -0
  9. package/dist/components/frittstaende/connection-status/fs-connection-status.js +123 -0
  10. package/dist/components/frittstaende/connection-status/fs-connection-status.js.map +1 -0
  11. package/dist/components/frittstaende/session-timeout/fs-session-timeout.d.ts +56 -0
  12. package/dist/components/frittstaende/session-timeout/fs-session-timeout.d.ts.map +1 -0
  13. package/dist/components/frittstaende/session-timeout/fs-session-timeout.js +183 -0
  14. package/dist/components/frittstaende/session-timeout/fs-session-timeout.js.map +1 -0
  15. package/dist/components/frittstaende/session-timeout/session-timeout.d.ts +28 -0
  16. package/dist/components/frittstaende/session-timeout/session-timeout.d.ts.map +1 -0
  17. package/dist/components/frittstaende/session-timeout/session-timeout.js +22 -0
  18. package/dist/components/frittstaende/session-timeout/session-timeout.js.map +1 -0
  19. package/dist/components/frittstaende/toast/fs-toast.d.ts +16 -22
  20. package/dist/components/frittstaende/toast/fs-toast.d.ts.map +1 -1
  21. package/dist/components/frittstaende/toast/fs-toast.js +38 -27
  22. package/dist/components/frittstaende/toast/fs-toast.js.map +1 -1
  23. package/dist/components/frittstaende/toast/toast.d.ts +34 -0
  24. package/dist/components/frittstaende/toast/toast.d.ts.map +1 -0
  25. package/dist/components/frittstaende/toast/toast.js +26 -0
  26. package/dist/components/frittstaende/toast/toast.js.map +1 -0
  27. package/dist/components/ramme/error-summary/error-summary.d.ts +39 -0
  28. package/dist/components/ramme/error-summary/error-summary.d.ts.map +1 -0
  29. package/dist/components/ramme/error-summary/error-summary.js +31 -0
  30. package/dist/components/ramme/error-summary/error-summary.js.map +1 -0
  31. package/dist/components/ramme/error-summary/fs-error-summary.d.ts +16 -42
  32. package/dist/components/ramme/error-summary/fs-error-summary.d.ts.map +1 -1
  33. package/dist/components/ramme/error-summary/fs-error-summary.js +57 -92
  34. package/dist/components/ramme/error-summary/fs-error-summary.js.map +1 -1
  35. package/dist/components/ramme/field/field-core.d.ts +37 -0
  36. package/dist/components/ramme/field/field-core.d.ts.map +1 -1
  37. package/dist/components/ramme/field/field-core.js +37 -0
  38. package/dist/components/ramme/field/field-core.js.map +1 -1
  39. package/dist/components/ramme/field/fs-field.d.ts +39 -40
  40. package/dist/components/ramme/field/fs-field.d.ts.map +1 -1
  41. package/dist/components/ramme/field/fs-field.js +128 -54
  42. package/dist/components/ramme/field/fs-field.js.map +1 -1
  43. package/dist/components/ramme/popover/fs-popover.d.ts +20 -27
  44. package/dist/components/ramme/popover/fs-popover.d.ts.map +1 -1
  45. package/dist/components/ramme/popover/fs-popover.js +68 -54
  46. package/dist/components/ramme/popover/fs-popover.js.map +1 -1
  47. package/dist/components/ramme/popover/popover.d.ts +43 -0
  48. package/dist/components/ramme/popover/popover.d.ts.map +1 -0
  49. package/dist/components/ramme/popover/popover.js +49 -0
  50. package/dist/components/ramme/popover/popover.js.map +1 -0
  51. package/dist/components/ramme/suggestion/fs-suggestion.d.ts +75 -0
  52. package/dist/components/ramme/suggestion/fs-suggestion.d.ts.map +1 -0
  53. package/dist/components/ramme/suggestion/fs-suggestion.js +232 -0
  54. package/dist/components/ramme/suggestion/fs-suggestion.js.map +1 -0
  55. package/dist/components/ramme/suggestion/suggestion.d.ts +97 -0
  56. package/dist/components/ramme/suggestion/suggestion.d.ts.map +1 -0
  57. package/dist/components/ramme/suggestion/suggestion.js +79 -0
  58. package/dist/components/ramme/suggestion/suggestion.js.map +1 -0
  59. package/dist/components/ramme/tabs/fs-tabs.d.ts +31 -36
  60. package/dist/components/ramme/tabs/fs-tabs.d.ts.map +1 -1
  61. package/dist/components/ramme/tabs/fs-tabs.js +62 -84
  62. package/dist/components/ramme/tabs/fs-tabs.js.map +1 -1
  63. package/dist/components/ramme/tabs/tabs.d.ts +50 -0
  64. package/dist/components/ramme/tabs/tabs.d.ts.map +1 -0
  65. package/dist/components/ramme/tabs/tabs.js +54 -0
  66. package/dist/components/ramme/tabs/tabs.js.map +1 -0
  67. package/dist/fs.d.ts +94 -0
  68. package/dist/fs.d.ts.map +1 -1
  69. package/dist/fs.js +42 -0
  70. package/dist/fs.js.map +1 -1
  71. package/dist/index.d.ts +10 -3
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +10 -3
  74. package/dist/index.js.map +1 -1
  75. package/dist/jsx/react.d.ts +35 -50
  76. package/dist/jsx/react.d.ts.map +1 -1
  77. package/dist/react.d.ts +142 -1
  78. package/dist/react.d.ts.map +1 -1
  79. package/dist/react.js +77 -2
  80. package/dist/react.js.map +1 -1
  81. package/package.json +15 -18
  82. package/src/components/frittstaende/connection-status/connection-status.css +33 -0
  83. package/src/components/frittstaende/connection-status/connection-status.ts +41 -0
  84. package/src/components/frittstaende/connection-status/fs-connection-status.ts +144 -0
  85. package/src/components/frittstaende/session-timeout/fs-session-timeout.ts +216 -0
  86. package/src/components/frittstaende/session-timeout/session-timeout.css +43 -0
  87. package/src/components/frittstaende/session-timeout/session-timeout.ts +42 -0
  88. package/src/components/frittstaende/toast/fs-toast.ts +39 -30
  89. package/src/components/frittstaende/toast/toast.ts +45 -0
  90. package/src/components/ramme/error-summary/error-summary.ts +55 -0
  91. package/src/components/ramme/error-summary/fs-error-summary.ts +62 -119
  92. package/src/components/ramme/field/field-core.ts +38 -0
  93. package/src/components/ramme/field/fs-field.ts +145 -61
  94. package/src/components/ramme/popover/fs-popover.ts +78 -72
  95. package/src/components/ramme/popover/popover.ts +79 -0
  96. package/src/components/ramme/suggestion/fs-suggestion.ts +265 -0
  97. package/src/components/ramme/suggestion/suggestion.ts +105 -0
  98. package/src/components/ramme/tabs/fs-tabs.ts +67 -98
  99. package/src/components/ramme/tabs/tabs.ts +104 -0
  100. package/dist/components/frittstaende/calendar/fs-calendar.d.ts +0 -52
  101. package/dist/components/frittstaende/calendar/fs-calendar.d.ts.map +0 -1
  102. package/dist/components/frittstaende/calendar/fs-calendar.js +0 -462
  103. package/dist/components/frittstaende/calendar/fs-calendar.js.map +0 -1
  104. package/dist/components/frittstaende/date-field/fs-date-field.d.ts +0 -110
  105. package/dist/components/frittstaende/date-field/fs-date-field.d.ts.map +0 -1
  106. package/dist/components/frittstaende/date-field/fs-date-field.js +0 -264
  107. package/dist/components/frittstaende/date-field/fs-date-field.js.map +0 -1
  108. package/dist/components/frittstaende/suggestion/fs-suggestion.d.ts +0 -133
  109. package/dist/components/frittstaende/suggestion/fs-suggestion.d.ts.map +0 -1
  110. package/dist/components/frittstaende/suggestion/fs-suggestion.js +0 -280
  111. package/dist/components/frittstaende/suggestion/fs-suggestion.js.map +0 -1
  112. package/src/components/frittstaende/calendar/fs-calendar.ts +0 -525
  113. package/src/components/frittstaende/date-field/date-field.css +0 -54
  114. package/src/components/frittstaende/date-field/fs-date-field.ts +0 -309
  115. package/src/components/frittstaende/suggestion/fs-suggestion.ts +0 -333
  116. /package/src/components/{frittstaende → ramme}/suggestion/suggestion.css +0 -0
@@ -0,0 +1,183 @@
1
+ import { SESSION_TIMEOUT_CLASS, SESSION_TIMEOUT_DIALOG_CLASS, } from "./session-timeout.js";
2
+ export const FS_SESSION_TIMEOUT_TAG = "fs-session-timeout";
3
+ /** Sekundene som skal leses opp. Hvert sekund ville vært uutholdelig. */
4
+ const ANNONSER_VED = new Set([120, 60, 30, 10]);
5
+ function klokke(sekunder) {
6
+ const m = Math.floor(sekunder / 60);
7
+ const s = sekunder % 60;
8
+ return `${m}:${String(s).padStart(2, "0")}`;
9
+ }
10
+ function ord(sekunder) {
11
+ if (sekunder >= 60) {
12
+ const m = Math.round(sekunder / 60);
13
+ return m === 1 ? "ett minutt" : `${m} minutter`;
14
+ }
15
+ return sekunder === 1 ? "ett sekund" : `${sekunder} sekunder`;
16
+ }
17
+ /**
18
+ * Varsler før en innlogget økt går ut.
19
+ *
20
+ * Dette er tingen hver store organisasjon bygger selv og gjør feil. Enten
21
+ * kommer det ingen advarsel, og brukeren mister et halvutfylt søknadsskjema,
22
+ * eller så stjeler dialogen fokus midt i en setning, eller så leser
23
+ * skjermleseren nedtellingen hvert sekund.
24
+ *
25
+ * Komponenten er frittstående fordi nedtellingen er klientens klokke. Tallet
26
+ * endrer seg ut fra når brukeren sist rørte tastaturet, og det er ingenting
27
+ * en server kan sende. Den bærer heller ingen verdi inn i en innsending.
28
+ *
29
+ * Dialogen er en ekte `<dialog>` med `showModal()`, så fokusfellen, Escape og
30
+ * topplaget kommer fra nettleseren. Fokus går tilbake dit brukeren var.
31
+ *
32
+ * ```html
33
+ * <fs-session-timeout class="fs-session-timeout" warn-at="1500" expires-at="1800"
34
+ * data-ignore-morph></fs-session-timeout>
35
+ * ```
36
+ *
37
+ * ```ts
38
+ * document.querySelector("fs-session-timeout")
39
+ * .addEventListener("session-extend", () => fetch("/forleng", { method: "POST" }))
40
+ * ```
41
+ */
42
+ export class FsSessionTimeout extends HTMLElement {
43
+ constructor() {
44
+ super(...arguments);
45
+ this.lastActivity = Date.now();
46
+ this.forrigeFokus = null;
47
+ this.registerActivity = () => {
48
+ if (this.dialog?.open)
49
+ return;
50
+ this.lastActivity = Date.now();
51
+ };
52
+ }
53
+ /** Sekunder uten aktivitet før varselet kommer. */
54
+ get warnAt() {
55
+ return Number(this.getAttribute("warn-at")) || 25 * 60;
56
+ }
57
+ /** Sekunder uten aktivitet før økten er ute. */
58
+ get expiresAt() {
59
+ return Number(this.getAttribute("expires-at")) || 30 * 60;
60
+ }
61
+ connectedCallback() {
62
+ this.classList.add(SESSION_TIMEOUT_CLASS);
63
+ // Dialogen bygges først når den skal vises, ikke her. Lagde vi den med
64
+ // én gang, sto den i DOM-en før React rakk å hydrere, og React fant et
65
+ // element den ikke hadde rendret. `<fs-toast>` og
66
+ // `<fs-connection-status>` gjør det på samme måte.
67
+ for (const navn of ["pointerdown", "keydown", "scroll"]) {
68
+ document.addEventListener(navn, this.registerActivity, { passive: true });
69
+ }
70
+ this.ticker = window.setInterval(() => this.tick(), 1000);
71
+ }
72
+ disconnectedCallback() {
73
+ for (const navn of ["pointerdown", "keydown", "scroll"]) {
74
+ document.removeEventListener(navn, this.registerActivity);
75
+ }
76
+ if (this.ticker)
77
+ window.clearInterval(this.ticker);
78
+ this.ticker = undefined;
79
+ }
80
+ build() {
81
+ if (this.dialog)
82
+ return;
83
+ const dialog = document.createElement("dialog");
84
+ dialog.className = SESSION_TIMEOUT_DIALOG_CLASS;
85
+ // alertdialog og ikke dialog: dette er en avbrytelse brukeren ikke ba om,
86
+ // og da skal skjermleseren lese hele innholdet når den åpnes.
87
+ dialog.setAttribute("aria-labelledby", "fs-session-timeout-title");
88
+ dialog.setAttribute("role", "alertdialog");
89
+ const tittel = document.createElement("h2");
90
+ tittel.className = "fs-session-timeout__title";
91
+ tittel.id = "fs-session-timeout-title";
92
+ tittel.textContent = "Du blir snart logget ut";
93
+ const tekst = document.createElement("p");
94
+ tekst.className = "fs-session-timeout__text";
95
+ tekst.append("Vi logger deg ut om ");
96
+ const count = document.createElement("span");
97
+ count.className = "fs-session-timeout__count";
98
+ // Tallet oppdateres hvert sekund. Leses det opp hver gang, blir dialogen
99
+ // ubrukelig med skjermleser, så opplesningen skjer i live-området under.
100
+ count.setAttribute("aria-hidden", "true");
101
+ tekst.append(count, " for å beskytte opplysningene dine.");
102
+ const live = document.createElement("span");
103
+ live.className = "fs-sr-only";
104
+ live.setAttribute("role", "status");
105
+ live.setAttribute("aria-live", "polite");
106
+ const knapper = document.createElement("div");
107
+ knapper.className = "fs-session-timeout__actions";
108
+ const fortsett = document.createElement("button");
109
+ fortsett.type = "button";
110
+ fortsett.className = "fs-button";
111
+ fortsett.textContent = "Fortsett å være innlogget";
112
+ fortsett.addEventListener("click", () => this.extend());
113
+ const loggUt = document.createElement("button");
114
+ loggUt.type = "button";
115
+ loggUt.className = "fs-button";
116
+ loggUt.dataset.variant = "secondary";
117
+ loggUt.textContent = "Logg ut nå";
118
+ loggUt.addEventListener("click", () => {
119
+ this.close();
120
+ this.emit("session-logout");
121
+ });
122
+ knapper.append(fortsett, loggUt);
123
+ dialog.append(tittel, tekst, live, knapper);
124
+ this.append(dialog);
125
+ this.dialog = dialog;
126
+ this.countElement = count;
127
+ this.liveElement = live;
128
+ }
129
+ tick() {
130
+ const gått = Math.floor((Date.now() - this.lastActivity) / 1000);
131
+ const igjen = this.expiresAt - gått;
132
+ if (igjen <= 0) {
133
+ this.close();
134
+ this.emit("session-expired");
135
+ this.lastActivity = Date.now();
136
+ return;
137
+ }
138
+ if (gått < this.warnAt)
139
+ return;
140
+ if (!this.dialog?.open)
141
+ this.open();
142
+ if (this.countElement)
143
+ this.countElement.textContent = klokke(igjen);
144
+ if (this.liveElement && ANNONSER_VED.has(igjen)) {
145
+ this.liveElement.textContent = `Du blir logget ut om ${ord(igjen)}.`;
146
+ }
147
+ }
148
+ open() {
149
+ this.build();
150
+ if (!this.dialog || this.dialog.open)
151
+ return;
152
+ // Fokus skal tilbake dit brukeren var. Uten dette starter neste
153
+ // tastetrykk på toppen av siden, midt i et skjema.
154
+ this.forrigeFokus = document.activeElement;
155
+ this.dialog.showModal();
156
+ this.emit("session-warn");
157
+ }
158
+ close() {
159
+ if (!this.dialog?.open)
160
+ return;
161
+ this.dialog.close();
162
+ if (this.liveElement)
163
+ this.liveElement.textContent = "";
164
+ this.forrigeFokus?.focus();
165
+ this.forrigeFokus = null;
166
+ }
167
+ emit(navn) {
168
+ this.dispatchEvent(new CustomEvent(navn, { bubbles: true, composed: true }));
169
+ }
170
+ /** Forlenger økten og lukker varselet. Kall den når serveren har svart. */
171
+ extend() {
172
+ this.lastActivity = Date.now();
173
+ this.close();
174
+ this.emit("session-extend");
175
+ }
176
+ }
177
+ FsSessionTimeout.observedAttributes = ["warn-at", "expires-at"];
178
+ export function defineFsSessionTimeout(tagName = FS_SESSION_TIMEOUT_TAG) {
179
+ if (!customElements.get(tagName)) {
180
+ customElements.define(tagName, FsSessionTimeout);
181
+ }
182
+ }
183
+ //# sourceMappingURL=fs-session-timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-session-timeout.js","sourceRoot":"","sources":["../../../../src/components/frittstaende/session-timeout/fs-session-timeout.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,sBAAsB,CAAA;AAE7B,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAA6B,CAAA;AAEnE,yEAAyE;AACzE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;AAE/C,SAAS,MAAM,CAAC,QAAgB;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAA;IACnC,MAAM,CAAC,GAAG,QAAQ,GAAG,EAAE,CAAA;IACvB,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;AAC7C,CAAC;AAED,SAAS,GAAG,CAAC,QAAgB;IAC3B,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAA;QACnC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAA;IACjD,CAAC;IACD,OAAO,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,QAAQ,WAAW,CAAA;AAC/D,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IAAjD;;QAOU,iBAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACzB,iBAAY,GAAuB,IAAI,CAAA;QA4FvC,qBAAgB,GAAG,GAAS,EAAE;YACpC,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI;gBAAE,OAAM;YAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAChC,CAAC,CAAA;IAmDH,CAAC;IAhJC,mDAAmD;IACnD,IAAI,MAAM;QACR,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAA;IACxD,CAAC;IAED,gDAAgD;IAChD,IAAI,SAAS;QACX,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAA;IAC3D,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;QAEzC,uEAAuE;QACvE,uEAAuE;QACvE,kDAAkD;QAClD,mDAAmD;QACnD,KAAK,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAU,EAAE,CAAC;YACjE,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3E,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;IAC3D,CAAC;IAED,oBAAoB;QAClB,KAAK,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAU,EAAE,CAAC;YACjE,QAAQ,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAC3D,CAAC;QACD,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAClD,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;IACzB,CAAC;IAEO,KAAK;QACX,IAAI,IAAI,CAAC,MAAM;YAAE,OAAM;QAEvB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC/C,MAAM,CAAC,SAAS,GAAG,4BAA4B,CAAA;QAC/C,0EAA0E;QAC1E,8DAA8D;QAC9D,MAAM,CAAC,YAAY,CAAC,iBAAiB,EAAE,0BAA0B,CAAC,CAAA;QAClE,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;QAE1C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QAC3C,MAAM,CAAC,SAAS,GAAG,2BAA2B,CAAA;QAC9C,MAAM,CAAC,EAAE,GAAG,0BAA0B,CAAA;QACtC,MAAM,CAAC,WAAW,GAAG,yBAAyB,CAAA;QAE9C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QACzC,KAAK,CAAC,SAAS,GAAG,0BAA0B,CAAA;QAC5C,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAA;QAEpC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC5C,KAAK,CAAC,SAAS,GAAG,2BAA2B,CAAA;QAC7C,yEAAyE;QACzE,yEAAyE;QACzE,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;QACzC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,qCAAqC,CAAC,CAAA;QAE1D,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC3C,IAAI,CAAC,SAAS,GAAG,YAAY,CAAA;QAC7B,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QACnC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;QAExC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QAC7C,OAAO,CAAC,SAAS,GAAG,6BAA6B,CAAA;QAEjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QACjD,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAA;QACxB,QAAQ,CAAC,SAAS,GAAG,WAAW,CAAA;QAChC,QAAQ,CAAC,WAAW,GAAG,2BAA2B,CAAA;QAClD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QAEvD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC/C,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAA;QACtB,MAAM,CAAC,SAAS,GAAG,WAAW,CAAA;QAC9B,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,WAAW,CAAA;QACpC,MAAM,CAAC,WAAW,GAAG,YAAY,CAAA;QACjC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACpC,IAAI,CAAC,KAAK,EAAE,CAAA;YACZ,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAChC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QAC3C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAEnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;IACzB,CAAC;IAOO,IAAI;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAA;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QAEnC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,EAAE,CAAA;YACZ,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;YAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC9B,OAAM;QACR,CAAC;QAED,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM;YAAE,OAAM;QAE9B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI;YAAE,IAAI,CAAC,IAAI,EAAE,CAAA;QAEnC,IAAI,IAAI,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QACpE,IAAI,IAAI,CAAC,WAAW,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,wBAAwB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAA;QACtE,CAAC;IACH,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,OAAM;QAC5C,gEAAgE;QAChE,mDAAmD;QACnD,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAmC,CAAA;QAChE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA;QACvB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC3B,CAAC;IAEO,KAAK;QACX,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI;YAAE,OAAM;QAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;QACnB,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAA;QACvD,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,CAAA;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IAC1B,CAAC;IAEO,IAAI,CAAC,IAAY;QACvB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAC9E,CAAC;IAED,2EAA2E;IAC3E,MAAM;QACJ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC9B,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAC7B,CAAC;;AAxJM,mCAAkB,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,AAA5B,CAA4B;AAiKvD,MAAM,UAAU,sBAAsB,CAAC,OAAO,GAAG,sBAAsB;IACrE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAA;IAClD,CAAC;AACH,CAAC"}
@@ -0,0 +1,28 @@
1
+ export declare const SESSION_TIMEOUT_CLASS: "fs-session-timeout";
2
+ export declare const SESSION_TIMEOUT_DIALOG_CLASS: "fs-session-timeout__dialog";
3
+ export type SessionTimeoutOptions = {
4
+ /** Sekunder uten aktivitet før varselet kommer. Standard: 25 minutter. */
5
+ warnAt?: number;
6
+ /** Sekunder uten aktivitet før økten er ute. Standard: 30 minutter. */
7
+ expiresAt?: number;
8
+ };
9
+ export type SessionTimeoutAttributes = {
10
+ class: typeof SESSION_TIMEOUT_CLASS;
11
+ "warn-at"?: string;
12
+ "expires-at"?: string;
13
+ "data-ignore-morph": "";
14
+ };
15
+ /**
16
+ * Attributtene for varselet om at innlogget økt går ut.
17
+ *
18
+ * Nedtellingen er klientens klokke, og endrer seg hvert sekund ut fra når
19
+ * brukeren sist rørte tastaturet. Det er en tilstand ingen server kan sende,
20
+ * og derfor eier komponenten alt inni seg. `data-ignore-morph` er ikke
21
+ * valgfri: uten den river Datastars morfing dialogen bort mens den står åpen.
22
+ *
23
+ * ```ts
24
+ * <fs-session-timeout {...fs.sessionTimeout({ warnAt: 1500, expiresAt: 1800 })} />
25
+ * ```
26
+ */
27
+ export declare const sessionTimeout: ({ warnAt, expiresAt, }?: SessionTimeoutOptions) => SessionTimeoutAttributes;
28
+ //# sourceMappingURL=session-timeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-timeout.d.ts","sourceRoot":"","sources":["../../../../src/components/frittstaende/session-timeout/session-timeout.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,EAAG,oBAA6B,CAAA;AAClE,eAAO,MAAM,4BAA4B,EACvC,4BAAqC,CAAA;AAEvC,MAAM,MAAM,qBAAqB,GAAG;IAClC,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,OAAO,qBAAqB,CAAA;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,mBAAmB,EAAE,EAAE,CAAA;CACxB,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,cAAc,GAAI,yBAG5B,qBAA0B,KAAG,wBAM5B,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { attributes } from "../../css/shared.js";
2
+ export const SESSION_TIMEOUT_CLASS = "fs-session-timeout";
3
+ export const SESSION_TIMEOUT_DIALOG_CLASS = "fs-session-timeout__dialog";
4
+ /**
5
+ * Attributtene for varselet om at innlogget økt går ut.
6
+ *
7
+ * Nedtellingen er klientens klokke, og endrer seg hvert sekund ut fra når
8
+ * brukeren sist rørte tastaturet. Det er en tilstand ingen server kan sende,
9
+ * og derfor eier komponenten alt inni seg. `data-ignore-morph` er ikke
10
+ * valgfri: uten den river Datastars morfing dialogen bort mens den står åpen.
11
+ *
12
+ * ```ts
13
+ * <fs-session-timeout {...fs.sessionTimeout({ warnAt: 1500, expiresAt: 1800 })} />
14
+ * ```
15
+ */
16
+ export const sessionTimeout = ({ warnAt = 25 * 60, expiresAt = 30 * 60, } = {}) => attributes({
17
+ class: SESSION_TIMEOUT_CLASS,
18
+ "warn-at": warnAt === 25 * 60 ? undefined : String(warnAt),
19
+ "expires-at": expiresAt === 30 * 60 ? undefined : String(expiresAt),
20
+ "data-ignore-morph": "",
21
+ });
22
+ //# sourceMappingURL=session-timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-timeout.js","sourceRoot":"","sources":["../../../../src/components/frittstaende/session-timeout/session-timeout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD,MAAM,CAAC,MAAM,qBAAqB,GAAG,oBAA6B,CAAA;AAClE,MAAM,CAAC,MAAM,4BAA4B,GACvC,4BAAqC,CAAA;AAgBvC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC7B,MAAM,GAAG,EAAE,GAAG,EAAE,EAChB,SAAS,GAAG,EAAE,GAAG,EAAE,MACM,EAAE,EAA4B,EAAE,CACzD,UAAU,CAAC;IACT,KAAK,EAAE,qBAAqB;IAC5B,SAAS,EAAE,MAAM,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IAC1D,YAAY,EAAE,SAAS,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;IACnE,mBAAmB,EAAE,EAAW;CACjC,CAAC,CAAA"}
@@ -1,10 +1,7 @@
1
- import { LitElement } from "lit";
2
1
  export declare const FS_TOAST_TAG: "fs-toast";
3
- export declare const TOAST_CLASS: "fs-toast";
4
- export declare const TOAST_CLOSE_CLASS: "fs-toast__close";
5
2
  export declare const toastColors: readonly ["neutral", "success", "warning", "danger"];
6
3
  export type ToastColor = (typeof toastColors)[number];
7
- export type ToastOptions = {
4
+ export type ShowOptions = {
8
5
  /** Hva meldingen betyr. Standard: `neutral`. */
9
6
  color?: ToastColor;
10
7
  /** Millisekunder før meldingen forsvinner. `0` lar den bli stående. */
@@ -15,8 +12,15 @@ export type ToastOptions = {
15
12
  /**
16
13
  * Køen av korte meldinger i hjørnet av skjermen.
17
14
  *
18
- * Elementet er beholderen, ikke meldingen. Du legger det inn én gang i
19
- * appen og kaller `show()` når noe skal meldes.
15
+ * Dette er den eneste frittstående komponenten, og den eneste delen av pakken
16
+ * du kaller i stedet for å skrive. Elementet er beholderen, ikke meldingen:
17
+ * du legger det inn én gang i appen og kaller `show()` når noe skal meldes.
18
+ * Meldingene finnes ikke før en hendelse på klienten skaper dem, så det er
19
+ * ingenting for serveren å rendre.
20
+ *
21
+ * Serveren skriver beholderen med `fs.toast()`, og den setter
22
+ * `data-ignore-morph`. Uten det river Datastars morfing meldingene bort ved
23
+ * neste patch, fordi serverens utgave av regionen er tom.
20
24
  *
21
25
  * Beholderen er en `role="status"`-region, ikke `role="alert"`. En melding
22
26
  * som dukker opp i hjørnet skal ikke avbryte det skjermleseren holder på med;
@@ -34,25 +38,15 @@ export type ToastOptions = {
34
38
  * })
35
39
  * ```
36
40
  */
37
- export declare class FsToast extends LitElement {
38
- static properties: {
39
- duration: {
40
- type: NumberConstructor;
41
- };
42
- label: {
43
- type: StringConstructor;
44
- };
45
- };
41
+ export declare class FsToast extends HTMLElement {
42
+ static observedAttributes: string[];
46
43
  /** Standard levetid i millisekunder. `0` lar meldingene bli stående. */
47
- duration: number;
48
- /** Tekst som sier hva regionen er. Blir `aria-label`. */
49
- label: string;
50
- createRenderRoot(): this;
51
- render(): import("lit").TemplateResult<1>;
44
+ get duration(): number;
45
+ set duration(value: number);
52
46
  connectedCallback(): void;
53
- updated(): void;
47
+ attributeChangedCallback(navn: string, _gammel: string, ny: string): void;
54
48
  /** Viser en melding, og returnerer elementet den ble lagt i. */
55
- show(message: string, options?: ToastOptions): HTMLElement;
49
+ show(message: string, options?: ShowOptions): HTMLElement;
56
50
  /** Fjerner en melding. */
57
51
  dismiss(toast: HTMLElement): void;
58
52
  /** Fjerner alle meldingene. */
@@ -1 +1 @@
1
- {"version":3,"file":"fs-toast.d.ts","sourceRoot":"","sources":["../../../../src/components/frittstaende/toast/fs-toast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAA;AAEtC,eAAO,MAAM,YAAY,EAAG,UAAmB,CAAA;AAE/C,eAAO,MAAM,WAAW,EAAG,UAAmB,CAAA;AAC9C,eAAO,MAAM,iBAAiB,EAAG,iBAA0B,CAAA;AAE3D,eAAO,MAAM,WAAW,sDAAuD,CAAA;AAC/E,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAErD,MAAM,MAAM,YAAY,GAAG;IACzB,gDAAgD;IAChD,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,OAAQ,SAAQ,UAAU;IACrC,MAAM,CAAC,UAAU;;;;;;;MAGhB;IAED,wEAAwE;IACxE,QAAQ,SAAO;IACf,yDAAyD;IACzD,KAAK,SAAc;IAEnB,gBAAgB;IAIhB,MAAM;IAIN,iBAAiB;IAOjB,OAAO;IAMP,gEAAgE;IAChE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW;IA2C9D,0BAA0B;IAC1B,OAAO,CAAC,KAAK,EAAE,WAAW;IAS1B,+BAA+B;IAC/B,KAAK;CAKN;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,OAAO,CAAA;KACpB;CACF;AAED,wBAAgB,aAAa,CAAC,OAAO,aAAe,GAAG,IAAI,CAI1D"}
1
+ {"version":3,"file":"fs-toast.d.ts","sourceRoot":"","sources":["../../../../src/components/frittstaende/toast/fs-toast.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,EAAG,UAAmB,CAAA;AAE/C,eAAO,MAAM,WAAW,sDAAuD,CAAA;AAC/E,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAErD,MAAM,MAAM,WAAW,GAAG;IACxB,gDAAgD;IAChD,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,OAAQ,SAAQ,WAAW;IACtC,MAAM,CAAC,kBAAkB,WAAwB;IAEjD,wEAAwE;IACxE,IAAI,QAAQ,IAAI,MAAM,CAQrB;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAEzB;IAED,iBAAiB,IAAI,IAAI;IAazB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAMzE,gEAAgE;IAChE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,WAAW;IA2C7D,0BAA0B;IAC1B,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IASjC,+BAA+B;IAC/B,KAAK,IAAI,IAAI;CAKd;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,OAAO,CAAA;KACpB;CACF;AAED,wBAAgB,aAAa,CAAC,OAAO,aAAe,GAAG,IAAI,CAI1D"}
@@ -1,13 +1,18 @@
1
- import { html, LitElement } from "lit";
1
+ import { TOAST_CLASS, TOAST_CLOSE_CLASS } from "./toast.js";
2
2
  export const FS_TOAST_TAG = "fs-toast";
3
- export const TOAST_CLASS = "fs-toast";
4
- export const TOAST_CLOSE_CLASS = "fs-toast__close";
5
3
  export const toastColors = ["neutral", "success", "warning", "danger"];
6
4
  /**
7
5
  * Køen av korte meldinger i hjørnet av skjermen.
8
6
  *
9
- * Elementet er beholderen, ikke meldingen. Du legger det inn én gang i
10
- * appen og kaller `show()` når noe skal meldes.
7
+ * Dette er den eneste frittstående komponenten, og den eneste delen av pakken
8
+ * du kaller i stedet for å skrive. Elementet er beholderen, ikke meldingen:
9
+ * du legger det inn én gang i appen og kaller `show()` når noe skal meldes.
10
+ * Meldingene finnes ikke før en hendelse på klienten skaper dem, så det er
11
+ * ingenting for serveren å rendre.
12
+ *
13
+ * Serveren skriver beholderen med `fs.toast()`, og den setter
14
+ * `data-ignore-morph`. Uten det river Datastars morfing meldingene bort ved
15
+ * neste patch, fordi serverens utgave av regionen er tom.
11
16
  *
12
17
  * Beholderen er en `role="status"`-region, ikke `role="alert"`. En melding
13
18
  * som dukker opp i hjørnet skal ikke avbryte det skjermleseren holder på med;
@@ -25,30 +30,39 @@ export const toastColors = ["neutral", "success", "warning", "danger"];
25
30
  * })
26
31
  * ```
27
32
  */
28
- export class FsToast extends LitElement {
29
- constructor() {
30
- super(...arguments);
31
- /** Standard levetid i millisekunder. `0` lar meldingene bli stående. */
32
- this.duration = 6000;
33
- /** Tekst som sier hva regionen er. Blir `aria-label`. */
34
- this.label = "Meldinger";
35
- }
36
- createRenderRoot() {
37
- return this;
33
+ export class FsToast extends HTMLElement {
34
+ /** Standard levetid i millisekunder. `0` lar meldingene bli stående. */
35
+ get duration() {
36
+ // `0` er en gyldig verdi og betyr at meldingene blir stående. Uten
37
+ // sjekken mot null her forsvant de likevel etter seks sekunder, og bare
38
+ // `show(..., { duration: 0 })` virket.
39
+ const = this.getAttribute("duration");
40
+ if (rå === null)
41
+ return 6000;
42
+ const value = Number(rå);
43
+ return Number.isFinite(value) && value >= 0 ? value : 6000;
38
44
  }
39
- render() {
40
- return html `<slot></slot>`;
45
+ set duration(value) {
46
+ this.setAttribute("duration", String(value));
41
47
  }
42
48
  connectedCallback() {
43
- super.connectedCallback();
44
- this.setAttribute("role", "status");
45
- this.setAttribute("aria-live", "polite");
46
- this.setAttribute("aria-label", this.label);
49
+ // Skrev serveren regionen med fs.toast(), står alt dette allerede. Her
50
+ // settes det bare når det mangler, så en ren HTML-side uten bygger også
51
+ // får en region skjermleseren forstår.
52
+ if (!this.hasAttribute("role"))
53
+ this.setAttribute("role", "status");
54
+ if (!this.hasAttribute("aria-live")) {
55
+ this.setAttribute("aria-live", "polite");
56
+ }
57
+ if (!this.hasAttribute("aria-label")) {
58
+ this.setAttribute("aria-label", this.getAttribute("label") ?? "Meldinger");
59
+ }
47
60
  }
48
- updated() {
61
+ attributeChangedCallback(navn, _gammel, ny) {
49
62
  // `label` kan settes etter at elementet står i DOM-en, for eksempel av et
50
63
  // rammeverk som fyller inn attributtene i et senere steg.
51
- this.setAttribute("aria-label", this.label);
64
+ if (navn === "label" && ny)
65
+ this.setAttribute("aria-label", ny);
52
66
  }
53
67
  /** Viser en melding, og returnerer elementet den ble lagt i. */
54
68
  show(message, options = {}) {
@@ -96,10 +110,7 @@ export class FsToast extends LitElement {
96
110
  }
97
111
  }
98
112
  }
99
- FsToast.properties = {
100
- duration: { type: Number },
101
- label: { type: String },
102
- };
113
+ FsToast.observedAttributes = ["duration", "label"];
103
114
  export function defineFsToast(tagName = FS_TOAST_TAG) {
104
115
  if (!customElements.get(tagName)) {
105
116
  customElements.define(tagName, FsToast);
@@ -1 +1 @@
1
- {"version":3,"file":"fs-toast.js","sourceRoot":"","sources":["../../../../src/components/frittstaende/toast/fs-toast.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fs-toast.js","sourceRoot":"","sources":["../../../../src/components/frittstaende/toast/fs-toast.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export declare const TOAST_CLASS: "fs-toast";
2
+ export declare const TOAST_CLOSE_CLASS: "fs-toast__close";
3
+ export type ToastOptions = {
4
+ /** Tekst som sier hva regionen er. Blir `aria-label`. */
5
+ label?: string;
6
+ };
7
+ export type ToastAttributes = {
8
+ region: {
9
+ role: "status";
10
+ "aria-live": "polite";
11
+ "aria-label": string;
12
+ "data-ignore-morph": "";
13
+ };
14
+ toast: {
15
+ class: typeof TOAST_CLASS;
16
+ };
17
+ close: {
18
+ class: typeof TOAST_CLOSE_CLASS;
19
+ };
20
+ };
21
+ /**
22
+ * Attributtene for varselregionen.
23
+ *
24
+ * Regionen er `role="status"` og ikke `role="alert"`. En melding som kommer
25
+ * fordi noe gikk bra skal ikke avbryte det skjermleseren holder på med.
26
+ *
27
+ * `data-ignore-morph` er ikke valgfri. `<fs-toast>` lager og fjerner sine egne
28
+ * elementer inni regionen, og uten attributtet river Datastars morfing dem bort
29
+ * ved neste patch, fordi serverens utgave av regionen er tom. Attributtet må
30
+ * stå i HTML-en serveren sender: komponenten kan ikke sette det på seg selv,
31
+ * siden morfingen leser det fra serverens node.
32
+ */
33
+ export declare const toast: ({ label, }?: ToastOptions) => ToastAttributes;
34
+ //# sourceMappingURL=toast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../../../../src/components/frittstaende/toast/toast.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,EAAG,UAAmB,CAAA;AAC9C,eAAO,MAAM,iBAAiB,EAAG,iBAA0B,CAAA;AAE3D,MAAM,MAAM,YAAY,GAAG;IACzB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ,CAAA;QACd,WAAW,EAAE,QAAQ,CAAA;QACrB,YAAY,EAAE,MAAM,CAAA;QACpB,mBAAmB,EAAE,EAAE,CAAA;KACxB,CAAA;IACD,KAAK,EAAE;QAAE,KAAK,EAAE,OAAO,WAAW,CAAA;KAAE,CAAA;IACpC,KAAK,EAAE;QAAE,KAAK,EAAE,OAAO,iBAAiB,CAAA;KAAE,CAAA;CAC3C,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,KAAK,GAAI,aAEnB,YAAiB,KAAG,eASrB,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { attributes } from "../../css/shared.js";
2
+ export const TOAST_CLASS = "fs-toast";
3
+ export const TOAST_CLOSE_CLASS = "fs-toast__close";
4
+ /**
5
+ * Attributtene for varselregionen.
6
+ *
7
+ * Regionen er `role="status"` og ikke `role="alert"`. En melding som kommer
8
+ * fordi noe gikk bra skal ikke avbryte det skjermleseren holder på med.
9
+ *
10
+ * `data-ignore-morph` er ikke valgfri. `<fs-toast>` lager og fjerner sine egne
11
+ * elementer inni regionen, og uten attributtet river Datastars morfing dem bort
12
+ * ved neste patch, fordi serverens utgave av regionen er tom. Attributtet må
13
+ * stå i HTML-en serveren sender: komponenten kan ikke sette det på seg selv,
14
+ * siden morfingen leser det fra serverens node.
15
+ */
16
+ export const toast = ({ label = "Varsler", } = {}) => ({
17
+ region: attributes({
18
+ role: "status",
19
+ "aria-live": "polite",
20
+ "aria-label": label,
21
+ "data-ignore-morph": "",
22
+ }),
23
+ toast: { class: TOAST_CLASS },
24
+ close: { class: TOAST_CLOSE_CLASS },
25
+ });
26
+ //# sourceMappingURL=toast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast.js","sourceRoot":"","sources":["../../../../src/components/frittstaende/toast/toast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD,MAAM,CAAC,MAAM,WAAW,GAAG,UAAmB,CAAA;AAC9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAA0B,CAAA;AAkB3D;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EACpB,KAAK,GAAG,SAAS,MACD,EAAE,EAAmB,EAAE,CAAC,CAAC;IACzC,MAAM,EAAE,UAAU,CAAC;QACjB,IAAI,EAAE,QAAiB;QACvB,WAAW,EAAE,QAAiB;QAC9B,YAAY,EAAE,KAAK;QACnB,mBAAmB,EAAE,EAAW;KACjC,CAAC;IACF,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;IAC7B,KAAK,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE;CACpC,CAAC,CAAA"}
@@ -0,0 +1,39 @@
1
+ export declare const ERROR_SUMMARY_CLASS: "fs-error-summary";
2
+ export declare const ERROR_SUMMARY_TITLE_CLASS: "fs-error-summary__title";
3
+ export type ErrorSummaryOptions = {
4
+ /** Antall feil serveren fant. Er det null, skjules boksen. */
5
+ count?: number;
6
+ /** Id på boksen, slik at skjemaet kan flytte fokus hit etter innsending. */
7
+ id?: string;
8
+ };
9
+ export type ErrorSummaryAttributes = {
10
+ container: {
11
+ class: typeof ERROR_SUMMARY_CLASS;
12
+ role: "alert";
13
+ tabindex: "-1";
14
+ id?: string;
15
+ hidden?: true;
16
+ };
17
+ title: {
18
+ class: typeof ERROR_SUMMARY_TITLE_CLASS;
19
+ };
20
+ };
21
+ /**
22
+ * Attributtene for en feiloppsummering.
23
+ *
24
+ * Serveren skriver hele boksen, også overskriften og lista. `<fs-error-summary>`
25
+ * flytter bare fokus og håndterer klikk på lenkene. Tidligere lagde komponenten
26
+ * overskriften selv, og da forsvant den ved hver morfing i Datastar.
27
+ *
28
+ * ```ts
29
+ * const feil = fs.errorSummary({ count: errors.length, id: "feil" })
30
+ * ```
31
+ * ```html
32
+ * <fs-error-summary {...feil.container}>
33
+ * <h2 {...feil.title}>Du må rette 2 feil</h2>
34
+ * <ul><li><a href="#epost">E-posten mangler @</a></li></ul>
35
+ * </fs-error-summary>
36
+ * ```
37
+ */
38
+ export declare const errorSummary: ({ count, id, }?: ErrorSummaryOptions) => ErrorSummaryAttributes;
39
+ //# sourceMappingURL=error-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-summary.d.ts","sourceRoot":"","sources":["../../../../src/components/ramme/error-summary/error-summary.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,EAAG,kBAA2B,CAAA;AAC9D,eAAO,MAAM,yBAAyB,EAAG,yBAAkC,CAAA;AAE3E,MAAM,MAAM,mBAAmB,GAAG;IAChC,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4EAA4E;IAC5E,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE;QACT,KAAK,EAAE,OAAO,mBAAmB,CAAA;QACjC,IAAI,EAAE,OAAO,CAAA;QACb,QAAQ,EAAE,IAAI,CAAA;QACd,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,MAAM,CAAC,EAAE,IAAI,CAAA;KACd,CAAA;IACD,KAAK,EAAE;QACL,KAAK,EAAE,OAAO,yBAAyB,CAAA;KACxC,CAAA;CACF,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,YAAY,GAAI,iBAG1B,mBAAwB,KAAG,sBAS5B,CAAA"}
@@ -0,0 +1,31 @@
1
+ import { attributes } from "../../css/shared.js";
2
+ export const ERROR_SUMMARY_CLASS = "fs-error-summary";
3
+ export const ERROR_SUMMARY_TITLE_CLASS = "fs-error-summary__title";
4
+ /**
5
+ * Attributtene for en feiloppsummering.
6
+ *
7
+ * Serveren skriver hele boksen, også overskriften og lista. `<fs-error-summary>`
8
+ * flytter bare fokus og håndterer klikk på lenkene. Tidligere lagde komponenten
9
+ * overskriften selv, og da forsvant den ved hver morfing i Datastar.
10
+ *
11
+ * ```ts
12
+ * const feil = fs.errorSummary({ count: errors.length, id: "feil" })
13
+ * ```
14
+ * ```html
15
+ * <fs-error-summary {...feil.container}>
16
+ * <h2 {...feil.title}>Du må rette 2 feil</h2>
17
+ * <ul><li><a href="#epost">E-posten mangler @</a></li></ul>
18
+ * </fs-error-summary>
19
+ * ```
20
+ */
21
+ export const errorSummary = ({ count = 0, id, } = {}) => ({
22
+ container: attributes({
23
+ class: ERROR_SUMMARY_CLASS,
24
+ role: "alert",
25
+ tabindex: "-1",
26
+ id,
27
+ hidden: count === 0 ? true : undefined,
28
+ }),
29
+ title: { class: ERROR_SUMMARY_TITLE_CLASS },
30
+ });
31
+ //# sourceMappingURL=error-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-summary.js","sourceRoot":"","sources":["../../../../src/components/ramme/error-summary/error-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAA2B,CAAA;AAC9D,MAAM,CAAC,MAAM,yBAAyB,GAAG,yBAAkC,CAAA;AAsB3E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAC3B,KAAK,GAAG,CAAC,EACT,EAAE,MACqB,EAAE,EAA0B,EAAE,CAAC,CAAC;IACvD,SAAS,EAAE,UAAU,CAAC;QACpB,KAAK,EAAE,mBAAmB;QAC1B,IAAI,EAAE,OAAgB;QACtB,QAAQ,EAAE,IAAa;QACvB,EAAE;QACF,MAAM,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAE,IAAc,CAAC,CAAC,CAAC,SAAS;KAClD,CAAC;IACF,KAAK,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE;CAC5C,CAAC,CAAA"}