@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
@@ -1,33 +1,100 @@
1
- import { html, LitElement } from "lit";
2
1
  import { computeFieldAttributes } from "./field-core.js";
3
2
  export const FS_FIELD_TAG = "fs-field";
4
3
  function uniqueId(prefix) {
5
4
  return `${prefix}-${Math.random().toString(36).slice(2, 9)}`;
6
5
  }
7
- export class FsField extends LitElement {
8
- constructor() {
9
- super(...arguments);
10
- this.invalid = false;
11
- this.disabled = false;
12
- this.optional = false;
13
- this.requiredMarker = "none";
14
- this.handleSlotChange = () => {
15
- this.syncA11y();
16
- };
17
- }
18
- createRenderRoot() {
19
- return this;
20
- }
21
- render() {
22
- return html `<slot @slotchange=${this.handleSlotChange}></slot>`;
23
- }
24
- firstUpdated() {
25
- this.syncA11y();
26
- }
27
- updated() {
28
- this.syncA11y();
29
- }
30
- syncA11y() {
6
+ function setOrRemove(element, name, value) {
7
+ if (value === undefined) {
8
+ element.removeAttribute(name);
9
+ }
10
+ else if (element.getAttribute(name) !== value) {
11
+ element.setAttribute(name, value);
12
+ }
13
+ }
14
+ /**
15
+ * Kobler ledetekst, kontroll, hjelpetekst og feilmelding i vanlig DOM.
16
+ *
17
+ * Komponenten er for markup som blir til uten JavaScript: en Go-mal, en
18
+ * PHP-fil, en Razor-visning eller håndskrevet HTML. Lages markupen med
19
+ * JavaScript, uansett hvor koden kjører, skal `fs.field()` skrive
20
+ * attributtene i stedet, og da trengs ikke dette elementet.
21
+ *
22
+ * Komponenten rendrer ingenting. Den satte tidligere et `<slot>`-element inn i
23
+ * vanlig DOM, og siden serveren ikke visste om det, fjernet Datastars morfing
24
+ * det ved hver patch. Se `FIELD_PRESERVED_ATTRIBUTES` for hva serveren må
25
+ * skrive for at koblingen skal overleve en morfing.
26
+ */
27
+ export class FsField extends HTMLElement {
28
+ /**
29
+ * Egenskapene speiler attributtene.
30
+ *
31
+ * Tilstanden bor i attributtet og ikke i et felt på klassen, slik at det
32
+ * serveren sendte og det komponenten mener alltid er det samme. En egen
33
+ * `invalid`-variabel ville kunne si noe annet enn markupen etter en morfing.
34
+ */
35
+ get invalid() {
36
+ return this.hasAttribute("invalid");
37
+ }
38
+ set invalid(value) {
39
+ this.toggleAttribute("invalid", value);
40
+ }
41
+ get disabled() {
42
+ return this.hasAttribute("disabled");
43
+ }
44
+ set disabled(value) {
45
+ this.toggleAttribute("disabled", value);
46
+ }
47
+ get optional() {
48
+ return this.hasAttribute("optional");
49
+ }
50
+ set optional(value) {
51
+ this.toggleAttribute("optional", value);
52
+ }
53
+ get requiredMarker() {
54
+ const value = this.getAttribute("required-marker");
55
+ return value === "symbol" || value === "text" ? value : "none";
56
+ }
57
+ set requiredMarker(value) {
58
+ if (value === "none")
59
+ this.removeAttribute("required-marker");
60
+ else
61
+ this.setAttribute("required-marker", value);
62
+ }
63
+ get controlId() {
64
+ return this.getAttribute("control-id") ?? undefined;
65
+ }
66
+ set controlId(value) {
67
+ if (value === undefined)
68
+ this.removeAttribute("control-id");
69
+ else
70
+ this.setAttribute("control-id", value);
71
+ }
72
+ get describedBy() {
73
+ return this.getAttribute("described-by") ?? undefined;
74
+ }
75
+ set describedBy(value) {
76
+ if (value === undefined)
77
+ this.removeAttribute("described-by");
78
+ else
79
+ this.setAttribute("described-by", value);
80
+ }
81
+ connectedCallback() {
82
+ // `slotchange` melder ikke fra i vanlig DOM, og innholdet byttes ut mens
83
+ // brukeren fyller ut skjemaet. Bare childList: å sette et attributt på et
84
+ // barn utløser da ingen ny runde, så observatøren kan ikke gå i ring.
85
+ this.observer = new MutationObserver(() => this.sync());
86
+ this.observer.observe(this, { childList: true, subtree: true });
87
+ this.sync();
88
+ }
89
+ disconnectedCallback() {
90
+ this.observer?.disconnect();
91
+ this.observer = undefined;
92
+ }
93
+ attributeChangedCallback() {
94
+ if (this.isConnected)
95
+ this.sync();
96
+ }
97
+ sync() {
31
98
  const label = this.querySelector("label");
32
99
  const control = this.querySelector("input:not([type='hidden']), textarea, select");
33
100
  const help = this.querySelector(".fs-help-text, [data-role='help']");
@@ -38,24 +105,37 @@ export class FsField extends LitElement {
38
105
  help.id = uniqueId("fs-field-help");
39
106
  if (error && !error.id)
40
107
  error.id = uniqueId("fs-field-error");
41
- // Selve kontrakten regnes ut av den delte kjernen, som fs.field() også
42
- // bruker. Denne komponenten gjør bare én ting utover det: å sette
43
- // resultatet elementer som allerede står i DOM-en.
108
+ // Markeringene leses også fra markupen. Skrev serveren dem med
109
+ // `fs.field()`, står de ledeteksten, og en komponent som bare så på
110
+ // sine egne attributter ville fjernet dem igjen. I React ga det en
111
+ // hydreringsfeil: serveren sendte `data-required="symbol"`, komponenten
112
+ // tok det bort, og så mente React at HTML-en ikke stemte.
113
+ const marker = this.getAttribute("required-marker") ??
114
+ label?.getAttribute("data-required") ??
115
+ null;
116
+ const disabled = this.hasAttribute("disabled") || control.hasAttribute("disabled");
117
+ // Tilstanden leses fra markupen, ikke bare fra et attributt på verten.
118
+ // Skrev serveren feltet med `fs.field()`, står svaret allerede på
119
+ // kontrollen, og en komponent som regnet ut sitt eget ville fjernet det
120
+ // igjen. Da kranglet de to halvdelene av API-et med hverandre.
121
+ const invalid = this.hasAttribute("invalid") ||
122
+ control.getAttribute("aria-invalid") === "true";
44
123
  const computed = computeFieldAttributes({
45
- id: this.controlId || control.id || uniqueId("fs-field-control"),
124
+ id: this.getAttribute("control-id") ||
125
+ control.id ||
126
+ uniqueId("fs-field-control"),
46
127
  help: Boolean(help),
47
128
  error: Boolean(error),
48
129
  helpId: help?.id,
49
130
  errorId: error?.id,
50
- required: this.requiredMarker === "symbol" || this.requiredMarker === "text"
51
- ? this.requiredMarker
52
- : undefined,
53
- optional: this.optional,
54
- invalid: this.invalid,
55
- disabled: this.disabled,
131
+ required: marker === "symbol" || marker === "text" ? marker : undefined,
132
+ optional: this.hasAttribute("optional") ||
133
+ label?.hasAttribute("data-optional") === true,
134
+ invalid,
135
+ disabled,
56
136
  describedBy: [
57
137
  control.getAttribute("aria-describedby") ?? "",
58
- this.describedBy ?? "",
138
+ this.getAttribute("described-by") ?? "",
59
139
  ].filter(Boolean),
60
140
  });
61
141
  control.id = computed.control.id;
@@ -68,12 +148,14 @@ export class FsField extends LitElement {
68
148
  setOrRemove(label, "aria-disabled", computed.label["aria-disabled"]);
69
149
  }
70
150
  if (error) {
151
+ // Bare `hidden`. Et skjult element er allerede ute av
152
+ // tilgjengelighetstreet, så `aria-hidden` var overflødig, og ga en
153
+ // hydreringsfeil i React fordi serveren ikke skriver det.
71
154
  error.hidden = Boolean(computed.error.hidden);
72
- error.setAttribute("aria-hidden", String(Boolean(computed.error.hidden)));
73
155
  }
74
156
  setOrRemove(control, "aria-describedby", computed.control["aria-describedby"]);
75
157
  setOrRemove(control, "aria-invalid", computed.control["aria-invalid"]);
76
- if (this.disabled) {
158
+ if (disabled) {
77
159
  control.setAttribute("disabled", "");
78
160
  control.setAttribute("aria-disabled", "true");
79
161
  }
@@ -94,22 +176,14 @@ export class FsField extends LitElement {
94
176
  }
95
177
  }
96
178
  }
97
- FsField.properties = {
98
- invalid: { type: Boolean, reflect: true },
99
- disabled: { type: Boolean, reflect: true },
100
- optional: { type: Boolean, reflect: true },
101
- requiredMarker: { type: String, attribute: "required-marker" },
102
- controlId: { type: String, attribute: "control-id" },
103
- describedBy: { type: String, attribute: "described-by" },
104
- };
105
- function setOrRemove(element, name, value) {
106
- if (value === undefined) {
107
- element.removeAttribute(name);
108
- }
109
- else {
110
- element.setAttribute(name, value);
111
- }
112
- }
179
+ FsField.observedAttributes = [
180
+ "invalid",
181
+ "disabled",
182
+ "optional",
183
+ "required-marker",
184
+ "control-id",
185
+ "described-by",
186
+ ];
113
187
  export function defineFsField(tagName = FS_FIELD_TAG) {
114
188
  if (!customElements.get(tagName)) {
115
189
  customElements.define(tagName, FsField);
@@ -1 +1 @@
1
- {"version":3,"file":"fs-field.js","sourceRoot":"","sources":["../../../../src/components/ramme/field/fs-field.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fs-field.js","sourceRoot":"","sources":["../../../../src/components/ramme/field/fs-field.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,4 @@
1
- import { LitElement } from "lit";
2
1
  export declare const FS_POPOVER_TAG: "fs-popover";
3
- export declare const POPOVER_CLASS: "fs-popover";
4
2
  type Placement = "bottom-start" | "bottom-end" | "top-start" | "top-end";
5
3
  /**
6
4
  * Et panel som henger under en knapp, og som lukker seg selv.
@@ -9,48 +7,43 @@ type Placement = "bottom-start" | "bottom-end" | "top-start" | "top-end";
9
7
  * løser tre ting som ellers krever kode: panelet legger seg over alt annet
10
8
  * uten `z-index`, Escape lukker det, og et klikk utenfor lukker det.
11
9
  *
12
- * Det topplaget gjør ikke er å plassere panelet. `position-anchor` finnes
13
- * ennå ikke i alle nettlesere, så posisjonen regnes ut her, mot knappens
14
- * plass på skjermen.
10
+ * Det topplaget ikke gjør er å plassere panelet. `position-anchor` finnes
11
+ * ennå ikke i alle nettlesere, så posisjonen regnes ut her.
15
12
  *
16
- * Du skriver knappen og innholdet selv, og komponenten kobler dem sammen:
13
+ * Serveren skriver koblingen med `fs.popover()`: `aria-controls` knappen,
14
+ * klassen og `popover` på panelet. Komponenten setter bare `aria-expanded`,
15
+ * som endrer seg når brukeren klikker, og posisjonen. Begge står i
16
+ * `data-preserve-attr` fra byggeren, ellers river morfingen dem bort.
17
17
  *
18
18
  * ```html
19
19
  * <fs-popover placement="bottom-end">
20
- * <button slot="trigger" class="fs-button">Handlinger</button>
21
- * <ul class="fs-list" data-variant="plain">…</ul>
20
+ * <button slot="trigger" class="fs-button" aria-controls="meny" aria-expanded="false"
21
+ * data-preserve-attr="aria-expanded">Handlinger</button>
22
+ * <ul id="meny" class="fs-popover" popover="manual" data-preserve-attr="style">…</ul>
22
23
  * </fs-popover>
23
24
  * ```
24
25
  */
25
- export declare class FsPopover extends LitElement {
26
- static properties: {
27
- open: {
28
- type: BooleanConstructor;
29
- reflect: boolean;
30
- };
31
- placement: {
32
- type: StringConstructor;
33
- };
34
- };
35
- /** Om panelet er åpent. Speiles, så CSS kan treffe tilstanden. */
36
- open: boolean;
37
- /** Hvilken kant panelet henger fra. Standard: `bottom-start`. */
38
- placement: Placement;
26
+ export declare class FsPopover extends HTMLElement {
27
+ static observedAttributes: string[];
39
28
  private panel?;
40
29
  private triggerElement?;
41
- createRenderRoot(): this;
42
- render(): import("lit").TemplateResult<1>;
30
+ private observer?;
31
+ /** Om panelet er åpent. Speiles, så CSS kan treffe tilstanden. */
32
+ get open(): boolean;
33
+ set open(value: boolean);
34
+ /** Hvilken kant panelet henger fra. Standard: `bottom-start`. */
35
+ get placement(): Placement;
36
+ set placement(value: Placement);
43
37
  connectedCallback(): void;
44
38
  disconnectedCallback(): void;
45
- firstUpdated(): void;
46
- updated(): void;
47
- private handleSlotChange;
39
+ attributeChangedCallback(): void;
48
40
  private sync;
49
41
  private handleTriggerClick;
50
42
  private handleOutsideClick;
51
43
  private handleKeydown;
52
44
  /** Regner ut hvor panelet skal stå, mot knappens plass på skjermen. */
53
45
  private reposition;
46
+ private emit;
54
47
  /** Åpner panelet. */
55
48
  show(): void;
56
49
  /** Lukker panelet. */
@@ -1 +1 @@
1
- {"version":3,"file":"fs-popover.d.ts","sourceRoot":"","sources":["../../../../src/components/ramme/popover/fs-popover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAA;AAEtC,eAAO,MAAM,cAAc,EAAG,YAAqB,CAAA;AAEnD,eAAO,MAAM,aAAa,EAAG,YAAqB,CAAA;AAElD,KAAK,SAAS,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAA;AAExE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,SAAU,SAAQ,UAAU;IACvC,MAAM,CAAC,UAAU;;;;;;;;MAGhB;IAED,kEAAkE;IAClE,IAAI,UAAQ;IACZ,iEAAiE;IACjE,SAAS,EAAE,SAAS,CAAiB;IAErC,OAAO,CAAC,KAAK,CAAC,CAAa;IAC3B,OAAO,CAAC,cAAc,CAAC,CAAa;IAEpC,gBAAgB;IAIhB,MAAM;IAIN,iBAAiB;IAMjB,oBAAoB;IAMpB,YAAY;IAIZ,OAAO;IAIP,OAAO,CAAC,gBAAgB,CAEvB;IAED,OAAO,CAAC,IAAI;IAyCZ,OAAO,CAAC,kBAAkB,CAEzB;IAED,OAAO,CAAC,kBAAkB,CAIzB;IAED,OAAO,CAAC,aAAa,CAMpB;IAED,uEAAuE;IACvE,OAAO,CAAC,UAAU,CAyBjB;IAED,qBAAqB;IACrB,IAAI;IAYJ,sBAAsB;IACtB,IAAI;IAYJ,0BAA0B;IAC1B,MAAM;CAIP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,YAAY,EAAE,SAAS,CAAA;KACxB;CACF;AAED,wBAAgB,eAAe,CAAC,OAAO,eAAiB,GAAG,IAAI,CAI9D"}
1
+ {"version":3,"file":"fs-popover.d.ts","sourceRoot":"","sources":["../../../../src/components/ramme/popover/fs-popover.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,EAAG,YAAqB,CAAA;AAEnD,KAAK,SAAS,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAA;AASxE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,SAAU,SAAQ,WAAW;IACxC,MAAM,CAAC,kBAAkB,WAAwB;IAEjD,OAAO,CAAC,KAAK,CAAC,CAAa;IAC3B,OAAO,CAAC,cAAc,CAAC,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,CAAkB;IAEnC,kEAAkE;IAClE,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAGtB;IAED,iEAAiE;IACjE,IAAI,SAAS,IAAI,SAAS,CAGzB;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,SAAS,EAE7B;IAED,iBAAiB,IAAI,IAAI;IAQzB,oBAAoB,IAAI,IAAI;IAe5B,wBAAwB,IAAI,IAAI;IAIhC,OAAO,CAAC,IAAI;IAmCZ,OAAO,CAAC,kBAAkB,CAEzB;IAED,OAAO,CAAC,kBAAkB,CAIzB;IAED,OAAO,CAAC,aAAa,CAMpB;IAED,uEAAuE;IACvE,OAAO,CAAC,UAAU,CAyBjB;IAED,OAAO,CAAC,IAAI;IAUZ,qBAAqB;IACrB,IAAI,IAAI,IAAI;IAMZ,sBAAsB;IACtB,IAAI,IAAI,IAAI;IAMZ,0BAA0B;IAC1B,MAAM,IAAI,IAAI;CAIf;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,YAAY,EAAE,SAAS,CAAA;KACxB;CACF;AAED,wBAAgB,eAAe,CAAC,OAAO,eAAiB,GAAG,IAAI,CAI9D"}
@@ -1,6 +1,10 @@
1
- import { html, LitElement } from "lit";
2
1
  export const FS_POPOVER_TAG = "fs-popover";
3
- export const POPOVER_CLASS = "fs-popover";
2
+ const PLACEMENTS = [
3
+ "bottom-start",
4
+ "bottom-end",
5
+ "top-start",
6
+ "top-end",
7
+ ];
4
8
  /**
5
9
  * Et panel som henger under en knapp, og som lukker seg selv.
6
10
  *
@@ -8,29 +12,25 @@ export const POPOVER_CLASS = "fs-popover";
8
12
  * løser tre ting som ellers krever kode: panelet legger seg over alt annet
9
13
  * uten `z-index`, Escape lukker det, og et klikk utenfor lukker det.
10
14
  *
11
- * Det topplaget gjør ikke er å plassere panelet. `position-anchor` finnes
12
- * ennå ikke i alle nettlesere, så posisjonen regnes ut her, mot knappens
13
- * plass på skjermen.
15
+ * Det topplaget ikke gjør er å plassere panelet. `position-anchor` finnes
16
+ * ennå ikke i alle nettlesere, så posisjonen regnes ut her.
14
17
  *
15
- * Du skriver knappen og innholdet selv, og komponenten kobler dem sammen:
18
+ * Serveren skriver koblingen med `fs.popover()`: `aria-controls` knappen,
19
+ * klassen og `popover` på panelet. Komponenten setter bare `aria-expanded`,
20
+ * som endrer seg når brukeren klikker, og posisjonen. Begge står i
21
+ * `data-preserve-attr` fra byggeren, ellers river morfingen dem bort.
16
22
  *
17
23
  * ```html
18
24
  * <fs-popover placement="bottom-end">
19
- * <button slot="trigger" class="fs-button">Handlinger</button>
20
- * <ul class="fs-list" data-variant="plain">…</ul>
25
+ * <button slot="trigger" class="fs-button" aria-controls="meny" aria-expanded="false"
26
+ * data-preserve-attr="aria-expanded">Handlinger</button>
27
+ * <ul id="meny" class="fs-popover" popover="manual" data-preserve-attr="style">…</ul>
21
28
  * </fs-popover>
22
29
  * ```
23
30
  */
24
- export class FsPopover extends LitElement {
31
+ export class FsPopover extends HTMLElement {
25
32
  constructor() {
26
33
  super(...arguments);
27
- /** Om panelet er åpent. Speiles, så CSS kan treffe tilstanden. */
28
- this.open = false;
29
- /** Hvilken kant panelet henger fra. Standard: `bottom-start`. */
30
- this.placement = "bottom-start";
31
- this.handleSlotChange = () => {
32
- this.sync();
33
- };
34
34
  this.handleTriggerClick = () => {
35
35
  this.toggle();
36
36
  };
@@ -69,48 +69,66 @@ export class FsPopover extends LitElement {
69
69
  this.panel.style.setProperty("--fs-popover-left", `${Math.round(left)}px`);
70
70
  };
71
71
  }
72
- createRenderRoot() {
73
- return this;
72
+ /** Om panelet er åpent. Speiles, så CSS kan treffe tilstanden. */
73
+ get open() {
74
+ return this.hasAttribute("open");
74
75
  }
75
- render() {
76
- return html `<slot @slotchange=${this.handleSlotChange}></slot>`;
76
+ set open(value) {
77
+ if (value)
78
+ this.setAttribute("open", "");
79
+ else
80
+ this.removeAttribute("open");
81
+ }
82
+ /** Hvilken kant panelet henger fra. Standard: `bottom-start`. */
83
+ get placement() {
84
+ const value = this.getAttribute("placement");
85
+ return value && PLACEMENTS.includes(value) ? value : "bottom-start";
86
+ }
87
+ set placement(value) {
88
+ this.setAttribute("placement", value);
77
89
  }
78
90
  connectedCallback() {
79
- super.connectedCallback();
80
91
  window.addEventListener("resize", this.reposition);
81
92
  window.addEventListener("scroll", this.reposition, true);
93
+ this.observer = new MutationObserver(() => this.sync());
94
+ this.observer.observe(this, { childList: true });
95
+ this.sync();
82
96
  }
83
97
  disconnectedCallback() {
84
98
  window.removeEventListener("resize", this.reposition);
85
99
  window.removeEventListener("scroll", this.reposition, true);
86
- super.disconnectedCallback();
100
+ document.removeEventListener("click", this.handleOutsideClick, true);
101
+ document.removeEventListener("keydown", this.handleKeydown);
102
+ this.observer?.disconnect();
103
+ this.observer = undefined;
104
+ this.triggerElement?.removeEventListener("click", this.handleTriggerClick);
105
+ // Referansen må nullstilles, ellers ser `sync()` at knappen er den samme
106
+ // når elementet settes inn igjen, og hopper over å feste lytteren på
107
+ // nytt. Da lar panelet seg ikke åpne lenger.
108
+ this.triggerElement = undefined;
109
+ this.panel = undefined;
87
110
  }
88
- firstUpdated() {
89
- this.sync();
90
- }
91
- updated() {
92
- this.sync();
111
+ attributeChangedCallback() {
112
+ if (this.isConnected)
113
+ this.sync();
93
114
  }
94
115
  sync() {
95
116
  const trigger = this.querySelector("[slot='trigger']");
96
117
  const panel = [...this.children].find((child) => child instanceof HTMLElement &&
97
- child.getAttribute("slot") !== "trigger" &&
98
- child.tagName !== "SLOT");
118
+ child.getAttribute("slot") !== "trigger");
99
119
  if (!trigger || !panel)
100
120
  return;
101
- this.triggerElement = trigger;
121
+ if (this.triggerElement !== trigger) {
122
+ this.triggerElement?.removeEventListener("click", this.handleTriggerClick);
123
+ trigger.addEventListener("click", this.handleTriggerClick);
124
+ this.triggerElement = trigger;
125
+ }
102
126
  this.panel = panel;
103
- if (!panel.id) {
104
- panel.id = `fs-popover-${Math.random().toString(36).slice(2, 9)}`;
127
+ // Eneste attributtet komponenten eier. Resten skrev serveren.
128
+ const expanded = String(this.open);
129
+ if (trigger.getAttribute("aria-expanded") !== expanded) {
130
+ trigger.setAttribute("aria-expanded", expanded);
105
131
  }
106
- panel.classList.add(POPOVER_CLASS);
107
- // `manual` og ikke `auto`: vi lukker selv, slik at knappen kan brukes til
108
- // å lukke igjen uten at nettleseren rekker å lukke først.
109
- panel.setAttribute("popover", "manual");
110
- trigger.setAttribute("aria-expanded", String(this.open));
111
- trigger.setAttribute("aria-controls", panel.id);
112
- trigger.removeEventListener("click", this.handleTriggerClick);
113
- trigger.addEventListener("click", this.handleTriggerClick);
114
132
  if (this.open) {
115
133
  if (!panel.matches(":popover-open"))
116
134
  panel.showPopover();
@@ -125,27 +143,26 @@ export class FsPopover extends LitElement {
125
143
  document.removeEventListener("keydown", this.handleKeydown);
126
144
  }
127
145
  }
146
+ emit(open) {
147
+ this.dispatchEvent(new CustomEvent("popover-toggle", {
148
+ detail: { open },
149
+ bubbles: true,
150
+ composed: true,
151
+ }));
152
+ }
128
153
  /** Åpner panelet. */
129
154
  show() {
130
155
  if (this.open)
131
156
  return;
132
157
  this.open = true;
133
- this.dispatchEvent(new CustomEvent("popover-toggle", {
134
- detail: { open: true },
135
- bubbles: true,
136
- composed: true,
137
- }));
158
+ this.emit(true);
138
159
  }
139
160
  /** Lukker panelet. */
140
161
  hide() {
141
162
  if (!this.open)
142
163
  return;
143
164
  this.open = false;
144
- this.dispatchEvent(new CustomEvent("popover-toggle", {
145
- detail: { open: false },
146
- bubbles: true,
147
- composed: true,
148
- }));
165
+ this.emit(false);
149
166
  }
150
167
  /** Åpner eller lukker. */
151
168
  toggle() {
@@ -155,10 +172,7 @@ export class FsPopover extends LitElement {
155
172
  this.show();
156
173
  }
157
174
  }
158
- FsPopover.properties = {
159
- open: { type: Boolean, reflect: true },
160
- placement: { type: String },
161
- };
175
+ FsPopover.observedAttributes = ["open", "placement"];
162
176
  export function defineFsPopover(tagName = FS_POPOVER_TAG) {
163
177
  if (!customElements.get(tagName)) {
164
178
  customElements.define(tagName, FsPopover);
@@ -1 +1 @@
1
- {"version":3,"file":"fs-popover.js","sourceRoot":"","sources":["../../../../src/components/ramme/popover/fs-popover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fs-popover.js","sourceRoot":"","sources":["../../../../src/components/ramme/popover/fs-popover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ export declare const POPOVER_CLASS: "fs-popover";
2
+ export type PopoverOptions = {
3
+ /** Id på panelet. Kobler knappen til panelet med `aria-controls`. */
4
+ id: string;
5
+ /** Panelet er åpent. Standard: lukket. */
6
+ open?: boolean;
7
+ };
8
+ export type PopoverAttributes = {
9
+ host: {
10
+ open?: "";
11
+ "data-preserve-attr": "open";
12
+ };
13
+ trigger: {
14
+ slot: "trigger";
15
+ "aria-expanded": "true" | "false";
16
+ "aria-controls": string;
17
+ "data-preserve-attr": "aria-expanded";
18
+ };
19
+ panel: {
20
+ class: typeof POPOVER_CLASS;
21
+ id: string;
22
+ popover: "manual";
23
+ "data-preserve-attr": "style";
24
+ };
25
+ };
26
+ /**
27
+ * Attributtene for et sprettoppvindu.
28
+ *
29
+ * Serveren skriver både knappen og panelet med koblingen mellom dem.
30
+ * `<fs-popover>` regner ut posisjonen og lukker ved klikk utenfor.
31
+ *
32
+ * ```ts
33
+ * const boks = fs.popover({ id: "hjelp" })
34
+ * ```
35
+ * ```html
36
+ * <fs-popover>
37
+ * <button {...boks.trigger}>Hva betyr dette?</button>
38
+ * <div {...boks.panel}>Vi bruker fødselsdatoen til å finne riktig sats.</div>
39
+ * </fs-popover>
40
+ * ```
41
+ */
42
+ export declare const popover: ({ id, open, }: PopoverOptions) => PopoverAttributes;
43
+ //# sourceMappingURL=popover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../../../src/components/ramme/popover/popover.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,EAAG,YAAqB,CAAA;AAElD,MAAM,MAAM,cAAc,GAAG;IAC3B,qEAAqE;IACrE,EAAE,EAAE,MAAM,CAAA;IACV,0CAA0C;IAC1C,IAAI,CAAC,EAAE,OAAO,CAAA;CACf,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE;QACJ,IAAI,CAAC,EAAE,EAAE,CAAA;QACT,oBAAoB,EAAE,MAAM,CAAA;KAC7B,CAAA;IACD,OAAO,EAAE;QACP,IAAI,EAAE,SAAS,CAAA;QACf,eAAe,EAAE,MAAM,GAAG,OAAO,CAAA;QACjC,eAAe,EAAE,MAAM,CAAA;QACvB,oBAAoB,EAAE,eAAe,CAAA;KACtC,CAAA;IACD,KAAK,EAAE;QACL,KAAK,EAAE,OAAO,aAAa,CAAA;QAC3B,EAAE,EAAE,MAAM,CAAA;QACV,OAAO,EAAE,QAAQ,CAAA;QACjB,oBAAoB,EAAE,OAAO,CAAA;KAC9B,CAAA;CACF,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,OAAO,GAAI,eAGrB,cAAc,KAAG,iBA6BlB,CAAA"}