@politiet/sheriff-web-components 2.6.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/custom-elements.json +1284 -829
  2. package/dist/frameworks/preact.d.ts +4 -1
  3. package/dist/frameworks/preact.d.ts.map +1 -1
  4. package/dist/frameworks/react.d.ts +13 -10
  5. package/dist/frameworks/react.d.ts.map +1 -1
  6. package/dist/frameworks/solidjs.d.ts +1 -0
  7. package/dist/frameworks/solidjs.d.ts.map +1 -1
  8. package/dist/frameworks/svelte.d.ts +1 -0
  9. package/dist/frameworks/svelte.d.ts.map +1 -1
  10. package/dist/frameworks/vue.d.ts +1 -0
  11. package/dist/frameworks/vue.d.ts.map +1 -1
  12. package/dist/index.d.ts +4 -2
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +1 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/mixins/index.d.ts +3 -0
  17. package/dist/mixins/index.d.ts.map +1 -1
  18. package/dist/mixins/index.js +3 -0
  19. package/dist/mixins/index.js.map +1 -1
  20. package/dist/mixins/sds-dialog-target-mixin.d.ts +11 -0
  21. package/dist/mixins/sds-dialog-target-mixin.d.ts.map +1 -0
  22. package/dist/mixins/sds-dialog-target-mixin.js +95 -0
  23. package/dist/mixins/sds-dialog-target-mixin.js.map +1 -0
  24. package/dist/mixins/sds-form-control-mixin.d.ts +19 -0
  25. package/dist/mixins/sds-form-control-mixin.d.ts.map +1 -0
  26. package/dist/mixins/sds-form-control-mixin.js +40 -0
  27. package/dist/mixins/sds-form-control-mixin.js.map +1 -0
  28. package/dist/react-wrappers/SDSDetailsGroupWrapper.d.ts +3 -0
  29. package/dist/react-wrappers/SDSDetailsGroupWrapper.d.ts.map +1 -0
  30. package/dist/react-wrappers/SDSDetailsGroupWrapper.js +9 -0
  31. package/dist/react-wrappers/SDSDetailsGroupWrapper.js.map +1 -0
  32. package/dist/react-wrappers/SDSDetailsWrapper.d.ts.map +1 -1
  33. package/dist/react-wrappers/SDSDetailsWrapper.js +1 -1
  34. package/dist/react-wrappers/SDSDetailsWrapper.js.map +1 -1
  35. package/dist/react-wrappers/index.d.ts +1 -0
  36. package/dist/react-wrappers/index.d.ts.map +1 -1
  37. package/dist/react-wrappers/index.js +1 -0
  38. package/dist/react-wrappers/index.js.map +1 -1
  39. package/dist/sds-alert/sds-alert.component.js +1 -1
  40. package/dist/sds-alert/sds-alert.component.js.map +1 -1
  41. package/dist/sds-button/sds-button.component.d.ts +4 -1
  42. package/dist/sds-button/sds-button.component.d.ts.map +1 -1
  43. package/dist/sds-button/sds-button.component.js +18 -3
  44. package/dist/sds-button/sds-button.component.js.map +1 -1
  45. package/dist/sds-button/sds-button.spec.js +1 -1
  46. package/dist/sds-button/sds-button.spec.js.map +1 -1
  47. package/dist/sds-card/sds-card.js +1 -1
  48. package/dist/sds-card/sds-card.js.map +1 -1
  49. package/dist/sds-card/sds-card.styles.d.ts.map +1 -1
  50. package/dist/sds-card/sds-card.styles.js +24 -21
  51. package/dist/sds-card/sds-card.styles.js.map +1 -1
  52. package/dist/sds-checkbox/sds-checkbox.d.ts +8 -16
  53. package/dist/sds-checkbox/sds-checkbox.d.ts.map +1 -1
  54. package/dist/sds-checkbox/sds-checkbox.js +43 -53
  55. package/dist/sds-checkbox/sds-checkbox.js.map +1 -1
  56. package/dist/sds-checkbox/sds-checkbox.styles.d.ts.map +1 -1
  57. package/dist/sds-checkbox/sds-checkbox.styles.js +1 -0
  58. package/dist/sds-checkbox/sds-checkbox.styles.js.map +1 -1
  59. package/dist/sds-checkbox-group/sds-checkbox-group.d.ts.map +1 -1
  60. package/dist/sds-checkbox-group/sds-checkbox-group.js +5 -3
  61. package/dist/sds-checkbox-group/sds-checkbox-group.js.map +1 -1
  62. package/dist/sds-chip/sds-chip.d.ts +8 -14
  63. package/dist/sds-chip/sds-chip.d.ts.map +1 -1
  64. package/dist/sds-chip/sds-chip.js +45 -45
  65. package/dist/sds-chip/sds-chip.js.map +1 -1
  66. package/dist/sds-chip/sds-chip.styles.js +1 -1
  67. package/dist/sds-chip/sds-chip.styles.js.map +1 -1
  68. package/dist/sds-details/sds-details.d.ts +3 -2
  69. package/dist/sds-details/sds-details.d.ts.map +1 -1
  70. package/dist/sds-details/sds-details.js +11 -2
  71. package/dist/sds-details/sds-details.js.map +1 -1
  72. package/dist/sds-details/sds-details.styles.d.ts.map +1 -1
  73. package/dist/sds-details/sds-details.styles.js +10 -5
  74. package/dist/sds-details/sds-details.styles.js.map +1 -1
  75. package/dist/sds-details-group/sds-details-group.d.ts +24 -0
  76. package/dist/sds-details-group/sds-details-group.d.ts.map +1 -0
  77. package/dist/sds-details-group/sds-details-group.js +73 -0
  78. package/dist/sds-details-group/sds-details-group.js.map +1 -0
  79. package/dist/sds-details-group/sds-details-group.styles.d.ts +2 -0
  80. package/dist/sds-details-group/sds-details-group.styles.d.ts.map +1 -0
  81. package/dist/sds-details-group/sds-details-group.styles.js +30 -0
  82. package/dist/sds-details-group/sds-details-group.styles.js.map +1 -0
  83. package/dist/sds-dialog/sds-dialog.component.d.ts +56 -0
  84. package/dist/sds-dialog/sds-dialog.component.d.ts.map +1 -0
  85. package/dist/sds-dialog/sds-dialog.component.js +181 -0
  86. package/dist/sds-dialog/sds-dialog.component.js.map +1 -0
  87. package/dist/sds-dialog/sds-dialog.d.ts +2 -52
  88. package/dist/sds-dialog/sds-dialog.d.ts.map +1 -1
  89. package/dist/sds-dialog/sds-dialog.js +2 -163
  90. package/dist/sds-dialog/sds-dialog.js.map +1 -1
  91. package/dist/sds-dialog/sds-dialog.spec.d.ts +2 -0
  92. package/dist/sds-dialog/sds-dialog.spec.d.ts.map +1 -0
  93. package/dist/sds-dialog/sds-dialog.spec.js +50 -0
  94. package/dist/sds-dialog/sds-dialog.spec.js.map +1 -0
  95. package/dist/sds-dialog/sds-dialog.styles.d.ts.map +1 -1
  96. package/dist/sds-dialog/sds-dialog.styles.js +1 -3
  97. package/dist/sds-dialog/sds-dialog.styles.js.map +1 -1
  98. package/dist/sds-heading/sds-heading.styles.d.ts.map +1 -1
  99. package/dist/sds-heading/sds-heading.styles.js +8 -2
  100. package/dist/sds-heading/sds-heading.styles.js.map +1 -1
  101. package/dist/sds-process-step/sds-process-step.styles.d.ts.map +1 -1
  102. package/dist/sds-process-step/sds-process-step.styles.js +6 -2
  103. package/dist/sds-process-step/sds-process-step.styles.js.map +1 -1
  104. package/dist/sds-radio/sds-radio.d.ts +14 -17
  105. package/dist/sds-radio/sds-radio.d.ts.map +1 -1
  106. package/dist/sds-radio/sds-radio.js +48 -61
  107. package/dist/sds-radio/sds-radio.js.map +1 -1
  108. package/dist/sds-radio-group/sds-radio-group.d.ts.map +1 -1
  109. package/dist/sds-radio-group/sds-radio-group.js +5 -3
  110. package/dist/sds-radio-group/sds-radio-group.js.map +1 -1
  111. package/dist/sds-select/sds-select.component.d.ts +54 -0
  112. package/dist/sds-select/sds-select.component.d.ts.map +1 -0
  113. package/dist/sds-select/sds-select.component.js +292 -0
  114. package/dist/sds-select/sds-select.component.js.map +1 -0
  115. package/dist/sds-select/sds-select.d.ts +2 -61
  116. package/dist/sds-select/sds-select.d.ts.map +1 -1
  117. package/dist/sds-select/sds-select.js +2 -298
  118. package/dist/sds-select/sds-select.js.map +1 -1
  119. package/dist/sds-select/sds-select.styles.js +1 -1
  120. package/dist/sds-select/sds-select.styles.js.map +1 -1
  121. package/dist/sds-stepper/sds-stepper.d.ts +0 -1
  122. package/dist/sds-stepper/sds-stepper.d.ts.map +1 -1
  123. package/dist/sds-stepper/sds-stepper.js +2 -3
  124. package/dist/sds-stepper/sds-stepper.js.map +1 -1
  125. package/dist/sds-stepper/sds-stepper.styles.d.ts.map +1 -1
  126. package/dist/sds-stepper/sds-stepper.styles.js +2 -1
  127. package/dist/sds-stepper/sds-stepper.styles.js.map +1 -1
  128. package/dist/sds-stepper-step/sds-stepper-step.styles.d.ts.map +1 -1
  129. package/dist/sds-stepper-step/sds-stepper-step.styles.js +7 -5
  130. package/dist/sds-stepper-step/sds-stepper-step.styles.js.map +1 -1
  131. package/dist/sds-switch/sds-switch.d.ts +5 -14
  132. package/dist/sds-switch/sds-switch.d.ts.map +1 -1
  133. package/dist/sds-switch/sds-switch.js +13 -26
  134. package/dist/sds-switch/sds-switch.js.map +1 -1
  135. package/dist/sds-switch/sds-switch.styles.js +1 -1
  136. package/dist/sds-switch/sds-switch.styles.js.map +1 -1
  137. package/dist/sds-text/sds-text.styles.d.ts.map +1 -1
  138. package/dist/sds-text/sds-text.styles.js +193 -54
  139. package/dist/sds-text/sds-text.styles.js.map +1 -1
  140. package/dist/sds-textarea/sds-textarea.d.ts +12 -21
  141. package/dist/sds-textarea/sds-textarea.d.ts.map +1 -1
  142. package/dist/sds-textarea/sds-textarea.js +10 -23
  143. package/dist/sds-textarea/sds-textarea.js.map +1 -1
  144. package/dist/sds-textarea/sds-textarea.styles.d.ts.map +1 -1
  145. package/dist/sds-textarea/sds-textarea.styles.js +8 -5
  146. package/dist/sds-textarea/sds-textarea.styles.js.map +1 -1
  147. package/dist/sds-textfield/sds-textfield.d.ts +11 -20
  148. package/dist/sds-textfield/sds-textfield.d.ts.map +1 -1
  149. package/dist/sds-textfield/sds-textfield.js +9 -23
  150. package/dist/sds-textfield/sds-textfield.js.map +1 -1
  151. package/dist/sds-textfield/sds-textfield.styles.d.ts.map +1 -1
  152. package/dist/sds-textfield/sds-textfield.styles.js +5 -1
  153. package/dist/sds-textfield/sds-textfield.styles.js.map +1 -1
  154. package/dist/sheriff-web-components.js +409 -204
  155. package/package.json +6 -2
  156. package/web-types.json +1173 -830
@@ -0,0 +1,181 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { LitElement, html, nothing } from 'lit';
8
+ import { property, query, state } from 'lit/decorators.js';
9
+ import { styles } from './sds-dialog.styles';
10
+ import { SDSEventDispatcherMixin } from '../mixins/sds-event-dispatcher-mixin';
11
+ export class SDSDialogComponent extends SDSEventDispatcherMixin(LitElement) {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.open = false;
15
+ this.modal = false;
16
+ this.closedby = 'closerequest';
17
+ this.closeButtonLabel = 'Lukk dialogvindu';
18
+ this._isHeaderSlotEmpty = true;
19
+ // Safari closedBy=any polyfill state
20
+ this._pointerDownInside = false;
21
+ this._handleClose = () => {
22
+ this.open = false;
23
+ this.dispatchSheriffEvent('sds-close');
24
+ };
25
+ this._handleClick = (event) => {
26
+ const target = event.target;
27
+ if (target?.closest('[data-command="close"],[command="close"]')) {
28
+ this._closeDialog();
29
+ }
30
+ };
31
+ // Safari closedBy="any" polyfill
32
+ // Calculate whether the user's pointer down event is outside or inside dialog
33
+ // If outside, close the dialog
34
+ this._handlePointerDown = (event) => {
35
+ const rect = this._dialog.getBoundingClientRect();
36
+ const { clientX: x, clientY: y } = event;
37
+ this._pointerDownInside = rect.top <= y && y <= rect.bottom && rect.left <= x && x <= rect.right;
38
+ };
39
+ this._handlePointerUp = (event) => {
40
+ const wasDownInside = this._pointerDownInside;
41
+ this._pointerDownInside = false;
42
+ if (this.closedby !== 'any' || wasDownInside) {
43
+ return;
44
+ }
45
+ // Clicking the backdrop will have the dialog as the target in Safari/Chrome.
46
+ // Firefox does not fire this callback when ::backdrop is clicked.
47
+ if (event.target !== this._dialog) {
48
+ return;
49
+ }
50
+ // Use requestAnimationFrame to let the browser handle native closedBy first.
51
+ // This avoids checking for the closedBy property, which Safari 26.2 exposes
52
+ // without implementing.
53
+ requestAnimationFrame(() => {
54
+ if (this._dialog && this._dialog.open) {
55
+ this._closeDialog();
56
+ }
57
+ });
58
+ };
59
+ this._handleCancel = (event) => {
60
+ if (this.closedby === 'none') {
61
+ event.preventDefault();
62
+ }
63
+ };
64
+ this._handleHeaderSlotChange = (event) => {
65
+ const slot = event.target;
66
+ this._isHeaderSlotEmpty = slot.assignedElements().length === 0;
67
+ };
68
+ this._handleAutoFocus = () => {
69
+ // slot:not([name]) finds the default nameless slot
70
+ const contentSlotElements = this.shadowRoot?.querySelector('slot:not([name])')?.assignedElements({ flatten: true });
71
+ if (!contentSlotElements || contentSlotElements.length === 0) {
72
+ return;
73
+ }
74
+ const elementToFocus = contentSlotElements.find((element) => {
75
+ return element.getAttribute('autofocus') != null;
76
+ });
77
+ if (!(elementToFocus instanceof HTMLElement)) {
78
+ return;
79
+ }
80
+ if (document.activeElement !== elementToFocus) {
81
+ elementToFocus.focus();
82
+ }
83
+ };
84
+ }
85
+ firstUpdated() {
86
+ this._setupEventListeners();
87
+ if (this.open) {
88
+ this._openDialog();
89
+ }
90
+ }
91
+ updated(changedProperties) {
92
+ if (!changedProperties.has('open')) {
93
+ return;
94
+ }
95
+ if (this.open) {
96
+ this._openDialog();
97
+ }
98
+ else {
99
+ this._closeDialog();
100
+ }
101
+ }
102
+ _setupEventListeners() {
103
+ this._dialog.addEventListener('close', this._handleClose);
104
+ this._dialog.addEventListener('cancel', this._handleCancel);
105
+ this._dialog.addEventListener('click', this._handleClick);
106
+ this._dialog.addEventListener('pointerdown', this._handlePointerDown);
107
+ this._dialog.addEventListener('pointerup', this._handlePointerUp);
108
+ this._dialog.addEventListener('animationend', this._handleAutoFocus);
109
+ }
110
+ _openDialog() {
111
+ if (!this._dialog) {
112
+ return;
113
+ }
114
+ if (this.modal) {
115
+ this._dialog.showModal();
116
+ }
117
+ else {
118
+ this._dialog.show();
119
+ }
120
+ }
121
+ _closeDialog() {
122
+ if (!this._dialog) {
123
+ return;
124
+ }
125
+ this._dialog.close();
126
+ }
127
+ show() {
128
+ this.open = true;
129
+ }
130
+ showModal() {
131
+ this.modal = true;
132
+ this.open = true;
133
+ }
134
+ close() {
135
+ this.open = false;
136
+ }
137
+ requestClose() {
138
+ if (!this._dialog) {
139
+ return;
140
+ }
141
+ this._dialog.requestClose();
142
+ }
143
+ render() {
144
+ return html `
145
+ <dialog .closedBy="${this.closedby}" class=${this._isHeaderSlotEmpty ? 'sds-dialog__empty-header' : ''}>
146
+ <div class="sds-dialog__header">
147
+ <slot name="header" @slotchange=${this._handleHeaderSlotChange}></slot>
148
+ ${this.closeButtonLabel
149
+ ? html `
150
+ <sds-button class="sds-dialog__close-button" icon variant="tertiary" size="md" data-command="close" label="${this.closeButtonLabel}">
151
+ <sds-icon name="close-material-outlined" size="md"></sds-icon>
152
+ </sds-button>
153
+ `
154
+ : nothing}
155
+ </div>
156
+ <slot></slot>
157
+ <slot name="footer"></slot>
158
+ </dialog>
159
+ `;
160
+ }
161
+ }
162
+ SDSDialogComponent.styles = [styles];
163
+ __decorate([
164
+ property({ type: Boolean, reflect: true })
165
+ ], SDSDialogComponent.prototype, "open", void 0);
166
+ __decorate([
167
+ property({ type: Boolean, reflect: true })
168
+ ], SDSDialogComponent.prototype, "modal", void 0);
169
+ __decorate([
170
+ property({ type: String, reflect: true })
171
+ ], SDSDialogComponent.prototype, "closedby", void 0);
172
+ __decorate([
173
+ property({ type: String, attribute: 'close-button-label' })
174
+ ], SDSDialogComponent.prototype, "closeButtonLabel", void 0);
175
+ __decorate([
176
+ query('dialog')
177
+ ], SDSDialogComponent.prototype, "_dialog", void 0);
178
+ __decorate([
179
+ state()
180
+ ], SDSDialogComponent.prototype, "_isHeaderSlotEmpty", void 0);
181
+ //# sourceMappingURL=sds-dialog.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sds-dialog.component.js","sourceRoot":"","sources":["../../src/sds-dialog/sds-dialog.component.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAuB,MAAM,KAAK,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AA6B/E,MAAM,OAAO,kBAAmB,SAAQ,uBAAuB,CAAC,UAAU,CAAC;IAA3E;;QAG6C,SAAI,GAAY,KAAK,CAAC;QACtB,UAAK,GAAY,KAAK,CAAC;QACxB,aAAQ,GAAa,cAAc,CAAC;QAClB,qBAAgB,GAAW,kBAAkB,CAAC;QAI1F,uBAAkB,GAAY,IAAI,CAAC;QAEpD,qCAAqC;QAC7B,uBAAkB,GAAG,KAAK,CAAC;QAiDlB,iBAAY,GAAG,GAAS,EAAE;YAC1C,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACxC,CAAC,CAAC;QAEe,iBAAY,GAAG,CAAC,KAAiB,EAAQ,EAAE;YAC3D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAwB,CAAC;YAE9C,IAAI,MAAM,EAAE,OAAO,CAAC,0CAA0C,CAAC,EAAE,CAAC;gBACjE,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,CAAC;QACF,CAAC,CAAC;QAEF,iCAAiC;QACjC,8EAA8E;QAC9E,+BAA+B;QACd,uBAAkB,GAAG,CAAC,KAAmB,EAAQ,EAAE;YACnE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAClD,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;YACzC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC;QAClG,CAAC,CAAC;QAEe,qBAAgB,GAAG,CAAC,KAAmB,EAAQ,EAAE;YACjE,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAC9C,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAEhC,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,IAAI,aAAa,EAAE,CAAC;gBAC9C,OAAO;YACR,CAAC;YAED,6EAA6E;YAC7E,kEAAkE;YAClE,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnC,OAAO;YACR,CAAC;YAED,6EAA6E;YAC7E,4EAA4E;YAC5E,wBAAwB;YACxB,qBAAqB,CAAC,GAAG,EAAE;gBAC1B,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBACvC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACrB,CAAC;YACF,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC;QAEe,kBAAa,GAAG,CAAC,KAAY,EAAQ,EAAE;YACvD,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAC9B,KAAK,CAAC,cAAc,EAAE,CAAC;YACxB,CAAC;QACF,CAAC,CAAC;QAEe,4BAAuB,GAAG,CAAC,KAAY,EAAQ,EAAE;YACjE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAyB,CAAC;YAC7C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;QAChE,CAAC,CAAC;QAEe,qBAAgB,GAAG,GAAS,EAAE;YAC9C,mDAAmD;YACnD,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAkB,kBAAkB,CAAC,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACrI,IAAI,CAAC,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9D,OAAO;YACR,CAAC;YAED,MAAM,cAAc,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3D,OAAO,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC;YAClD,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,CAAC,cAAc,YAAY,WAAW,CAAC,EAAE,CAAC;gBAC9C,OAAO;YACR,CAAC;YAED,IAAI,QAAQ,CAAC,aAAa,KAAK,cAAc,EAAE,CAAC;gBAC/C,cAAc,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;QACF,CAAC,CAAC;IAyCH,CAAC;IAnKS,YAAY;QACpB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,EAAE,CAAC;QACpB,CAAC;IACF,CAAC;IAEQ,OAAO,CAAC,iBAAiC;QACjD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,OAAO;QACR,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,EAAE,CAAC;QACpB,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,YAAY,EAAE,CAAC;QACrB,CAAC;IACF,CAAC;IAEO,oBAAoB;QAC3B,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACtE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtE,CAAC;IAEO,WAAW;QAClB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO;QACR,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC1B,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,CAAC;IACF,CAAC;IAEO,YAAY;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IA+EM,IAAI;QACV,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IAEM,SAAS;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IAEM,KAAK;QACX,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;IACnB,CAAC;IAEM,YAAY;QAClB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO;QACR,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAEQ,MAAM;QACd,OAAO,IAAI,CAAA;wBACW,IAAI,CAAC,QAAQ,WAAW,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE;;uCAElE,IAAI,CAAC,uBAAuB;OAC5D,IAAI,CAAC,gBAAgB;YACtB,CAAC,CAAC,IAAI,CAAA;qHACyG,IAAI,CAAC,gBAAgB;;;QAGlI;YACF,CAAC,CAAC,OAAO;;;;;GAKZ,CAAC;IACH,CAAC;;AAhLe,yBAAM,GAAG,CAAC,MAAM,CAAC,AAAX,CAAY;AAEU;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gDAAuB;AACtB;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iDAAwB;AACxB;IAA1C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oDAAqC;AAClB;IAA5D,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC;4DAA+C;AAElF;IAAxB,KAAK,CAAC,QAAQ,CAAC;mDAAqC;AAEpC;IAAhB,KAAK,EAAE;8DAA4C","sourcesContent":["import { LitElement, html, nothing, type PropertyValues } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { styles } from './sds-dialog.styles';\nimport { SDSEventDispatcherMixin } from '../mixins/sds-event-dispatcher-mixin';\n\ntype ClosedBy = 'none' | 'closerequest' | 'any';\n\nexport interface SDSDialogProps {\n\topen?: boolean;\n\t/**\n\t * Set if dialog opens as a modal or not\n\t *\n\t * If non-modal, the user is allowed to interact with content outside of the dialog.\n\t * If modal, the dialog is placed in the top layer with a ::backdrop pseudo-element.\n\t *\n\t * Docs:\n\t * - https://developer.mozilla.org/en-US/docs/Web/API/HTMLDialogElement/show\n\t * - https://developer.mozilla.org/en-US/docs/Web/API/HTMLDialogElement/showModal\n\t */\n\tmodal?: boolean;\n\t/**\n\t * Set what type of dismiss behavior closes the dialog\n\t * - 'none': Dialog can only be closed programmatically\n\t * - 'closerequest': Dialog closes on ESC key (default)\n\t * - 'any': Dialog closes on ESC key or clicking outside\n\t *\n\t * Docs: https://developer.mozilla.org/en-US/docs/Web/API/HTMLDialogElement/closedBy\n\t */\n\tclosedby?: ClosedBy;\n\t'close-button-label'?: string;\n}\n\nexport class SDSDialogComponent extends SDSEventDispatcherMixin(LitElement) {\n\tstatic override styles = [styles];\n\n\t@property({ type: Boolean, reflect: true }) open: boolean = false;\n\t@property({ type: Boolean, reflect: true }) modal: boolean = false;\n\t@property({ type: String, reflect: true }) closedby: ClosedBy = 'closerequest';\n\t@property({ type: String, attribute: 'close-button-label' }) closeButtonLabel: string = 'Lukk dialogvindu';\n\n\t@query('dialog') private _dialog!: HTMLDialogElement;\n\n\t@state() private _isHeaderSlotEmpty: boolean = true;\n\n\t// Safari closedBy=any polyfill state\n\tprivate _pointerDownInside = false;\n\n\toverride firstUpdated(): void {\n\t\tthis._setupEventListeners();\n\t\tif (this.open) {\n\t\t\tthis._openDialog();\n\t\t}\n\t}\n\n\toverride updated(changedProperties: PropertyValues): void {\n\t\tif (!changedProperties.has('open')) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.open) {\n\t\t\tthis._openDialog();\n\t\t} else {\n\t\t\tthis._closeDialog();\n\t\t}\n\t}\n\n\tprivate _setupEventListeners(): void {\n\t\tthis._dialog.addEventListener('close', this._handleClose);\n\t\tthis._dialog.addEventListener('cancel', this._handleCancel);\n\t\tthis._dialog.addEventListener('click', this._handleClick);\n\t\tthis._dialog.addEventListener('pointerdown', this._handlePointerDown);\n\t\tthis._dialog.addEventListener('pointerup', this._handlePointerUp);\n\t\tthis._dialog.addEventListener('animationend', this._handleAutoFocus);\n\t}\n\n\tprivate _openDialog(): void {\n\t\tif (!this._dialog) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.modal) {\n\t\t\tthis._dialog.showModal();\n\t\t} else {\n\t\t\tthis._dialog.show();\n\t\t}\n\t}\n\n\tprivate _closeDialog(): void {\n\t\tif (!this._dialog) {\n\t\t\treturn;\n\t\t}\n\t\tthis._dialog.close();\n\t}\n\n\tprivate readonly _handleClose = (): void => {\n\t\tthis.open = false;\n\t\tthis.dispatchSheriffEvent('sds-close');\n\t};\n\n\tprivate readonly _handleClick = (event: MouseEvent): void => {\n\t\tconst target = event.target as Element | null;\n\n\t\tif (target?.closest('[data-command=\"close\"],[command=\"close\"]')) {\n\t\t\tthis._closeDialog();\n\t\t}\n\t};\n\n\t// Safari closedBy=\"any\" polyfill\n\t// Calculate whether the user's pointer down event is outside or inside dialog\n\t// If outside, close the dialog\n\tprivate readonly _handlePointerDown = (event: PointerEvent): void => {\n\t\tconst rect = this._dialog.getBoundingClientRect();\n\t\tconst { clientX: x, clientY: y } = event;\n\t\tthis._pointerDownInside = rect.top <= y && y <= rect.bottom && rect.left <= x && x <= rect.right;\n\t};\n\n\tprivate readonly _handlePointerUp = (event: PointerEvent): void => {\n\t\tconst wasDownInside = this._pointerDownInside;\n\t\tthis._pointerDownInside = false;\n\n\t\tif (this.closedby !== 'any' || wasDownInside) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clicking the backdrop will have the dialog as the target in Safari/Chrome.\n\t\t// Firefox does not fire this callback when ::backdrop is clicked.\n\t\tif (event.target !== this._dialog) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Use requestAnimationFrame to let the browser handle native closedBy first.\n\t\t// This avoids checking for the closedBy property, which Safari 26.2 exposes\n\t\t// without implementing.\n\t\trequestAnimationFrame(() => {\n\t\t\tif (this._dialog && this._dialog.open) {\n\t\t\t\tthis._closeDialog();\n\t\t\t}\n\t\t});\n\t};\n\n\tprivate readonly _handleCancel = (event: Event): void => {\n\t\tif (this.closedby === 'none') {\n\t\t\tevent.preventDefault();\n\t\t}\n\t};\n\n\tprivate readonly _handleHeaderSlotChange = (event: Event): void => {\n\t\tconst slot = event.target as HTMLSlotElement;\n\t\tthis._isHeaderSlotEmpty = slot.assignedElements().length === 0;\n\t};\n\n\tprivate readonly _handleAutoFocus = (): void => {\n\t\t// slot:not([name]) finds the default nameless slot\n\t\tconst contentSlotElements = this.shadowRoot?.querySelector<HTMLSlotElement>('slot:not([name])')?.assignedElements({ flatten: true });\n\t\tif (!contentSlotElements || contentSlotElements.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst elementToFocus = contentSlotElements.find((element) => {\n\t\t\treturn element.getAttribute('autofocus') != null;\n\t\t});\n\n\t\tif (!(elementToFocus instanceof HTMLElement)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (document.activeElement !== elementToFocus) {\n\t\t\telementToFocus.focus();\n\t\t}\n\t};\n\n\tpublic show(): void {\n\t\tthis.open = true;\n\t}\n\n\tpublic showModal(): void {\n\t\tthis.modal = true;\n\t\tthis.open = true;\n\t}\n\n\tpublic close(): void {\n\t\tthis.open = false;\n\t}\n\n\tpublic requestClose(): void {\n\t\tif (!this._dialog) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._dialog.requestClose();\n\t}\n\n\toverride render() {\n\t\treturn html`\n\t\t\t<dialog .closedBy=\"${this.closedby}\" class=${this._isHeaderSlotEmpty ? 'sds-dialog__empty-header' : ''}>\n\t\t\t\t<div class=\"sds-dialog__header\">\n\t\t\t\t\t<slot name=\"header\" @slotchange=${this._handleHeaderSlotChange}></slot>\n\t\t\t\t\t${this.closeButtonLabel\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<sds-button class=\"sds-dialog__close-button\" icon variant=\"tertiary\" size=\"md\" data-command=\"close\" label=\"${this.closeButtonLabel}\">\n\t\t\t\t\t\t\t\t\t<sds-icon name=\"close-material-outlined\" size=\"md\"></sds-icon>\n\t\t\t\t\t\t\t\t</sds-button>\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t: nothing}\n\t\t\t\t</div>\n\t\t\t\t<slot></slot>\n\t\t\t\t<slot name=\"footer\"></slot>\n\t\t\t</dialog>\n\t\t`;\n\t}\n}\n"]}
@@ -1,57 +1,8 @@
1
- import { LitElement, type PropertyValues } from 'lit';
2
1
  import { SheriffEvent } from '../types';
2
+ import { SDSDialogComponent } from './sds-dialog.component';
3
3
  import '../sds-icon/sds-icon';
4
4
  import '../sds-button/sds-button';
5
- type ClosedBy = 'none' | 'closerequest' | 'any';
6
- export interface SDSDialogProps {
7
- open?: boolean;
8
- /**
9
- * Set if dialog opens as a modal or not
10
- *
11
- * If non-modal, the user is allowed to interact with content outside of the dialog.
12
- * If modal, the dialog is placed in the top layer with a ::backdrop pseudo-element.
13
- *
14
- * Docs:
15
- * - https://developer.mozilla.org/en-US/docs/Web/API/HTMLDialogElement/show
16
- * - https://developer.mozilla.org/en-US/docs/Web/API/HTMLDialogElement/showModal
17
- */
18
- modal?: boolean;
19
- /**
20
- * Set what type of dismiss behavior closes the dialog
21
- * - 'none': Dialog can only be closed programmatically
22
- * - 'closerequest': Dialog closes on ESC key (default)
23
- * - 'any': Dialog closes on ESC key or clicking outside
24
- *
25
- * Docs: https://developer.mozilla.org/en-US/docs/Web/API/HTMLDialogElement/closedBy
26
- */
27
- closedby?: ClosedBy;
28
- 'close-button-label'?: string;
29
- }
30
- declare const SDSDialog_base: import("../mixins/types").Constructable<import("../mixins/sds-event-dispatcher-mixin").SDSEventDispatcherMixinInterface> & typeof LitElement;
31
- export declare class SDSDialog extends SDSDialog_base {
32
- static styles: import("lit").CSSResult[];
33
- open: boolean;
34
- modal: boolean;
35
- closedby: ClosedBy;
36
- closeButtonLabel: string;
37
- private _dialog;
38
- private headerSlotElements;
39
- private _pointerDownInside;
40
- firstUpdated(): void;
41
- updated(changedProperties: PropertyValues): void;
42
- private _setupEventListeners;
43
- private _openDialog;
44
- private _closeDialog;
45
- private readonly _handleClose;
46
- private readonly _handleClick;
47
- private readonly _handlePointerDown;
48
- private readonly _handlePointerUp;
49
- private readonly _handleCancel;
50
- private readonly _handleAutoFocus;
51
- show(): void;
52
- showModal(): void;
53
- close(): void;
54
- render(): import("lit-html").TemplateResult<1>;
5
+ export declare class SDSDialog extends SDSDialogComponent {
55
6
  }
56
7
  declare global {
57
8
  interface HTMLElementTagNameMap {
@@ -61,5 +12,4 @@ declare global {
61
12
  'sds-close': SheriffEvent;
62
13
  }
63
14
  }
64
- export {};
65
15
  //# sourceMappingURL=sds-dialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sds-dialog.d.ts","sourceRoot":"","sources":["../../src/sds-dialog/sds-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAIrE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxC,OAAO,sBAAsB,CAAC;AAC9B,OAAO,0BAA0B,CAAC;AAElC,KAAK,QAAQ,GAAG,MAAM,GAAG,cAAc,GAAG,KAAK,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC9B;;AAED,qBACa,SAAU,SAAQ,cAAmC;IACjE,OAAgB,MAAM,4BAAY;IAEU,IAAI,EAAE,OAAO,CAAS;IACtB,KAAK,EAAE,OAAO,CAAS;IACxB,QAAQ,EAAE,QAAQ,CAAkB;IAClB,gBAAgB,EAAE,MAAM,CAAsB;IAE1F,OAAO,CAAC,OAAO,CAAqB;IAEM,OAAO,CAAC,kBAAkB,CAAa;IAGlG,OAAO,CAAC,kBAAkB,CAAS;IAE1B,YAAY,IAAI,IAAI;IAOpB,OAAO,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI;IAYzD,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAG3B;IAEF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAM3B;IAKF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAIjC;IAEF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAsB/B;IAEF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAI5B;IAEF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAkB/B;IAEK,IAAI,IAAI,IAAI;IAIZ,SAAS,IAAI,IAAI;IAKjB,KAAK,IAAI,IAAI;IAIX,MAAM;CAmBf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,YAAY,EAAE,SAAS,CAAC;KACxB;IACD,UAAU,2BAA2B;QACpC,WAAW,EAAE,YAAY,CAAC;KAC1B;CACD"}
1
+ {"version":3,"file":"sds-dialog.d.ts","sourceRoot":"","sources":["../../src/sds-dialog/sds-dialog.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,sBAAsB,CAAC;AAC9B,OAAO,0BAA0B,CAAC;AAElC,qBACa,SAAU,SAAQ,kBAAkB;CAAG;AAEpD,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,YAAY,EAAE,SAAS,CAAC;KACxB;IACD,UAAU,2BAA2B;QACpC,WAAW,EAAE,YAAY,CAAC;KAC1B;CACD"}
@@ -4,173 +4,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { LitElement, html, nothing } from 'lit';
8
- import { property, query, queryAssignedElements } from 'lit/decorators.js';
9
7
  import { guardedCustomElement } from '../utils/guarded-custom-element';
10
- import { styles } from './sds-dialog.styles';
11
- import { SDSEventDispatcherMixin } from '../mixins/sds-event-dispatcher-mixin';
8
+ import { SDSDialogComponent } from './sds-dialog.component';
12
9
  import '../sds-icon/sds-icon';
13
10
  import '../sds-button/sds-button';
14
- let SDSDialog = class SDSDialog extends SDSEventDispatcherMixin(LitElement) {
15
- constructor() {
16
- super(...arguments);
17
- this.open = false;
18
- this.modal = false;
19
- this.closedby = 'closerequest';
20
- this.closeButtonLabel = 'Lukk dialogvindu';
21
- // Safari closedBy=any polyfill state
22
- this._pointerDownInside = false;
23
- this._handleClose = () => {
24
- this.open = false;
25
- this.dispatchSheriffEvent('sds-close');
26
- };
27
- this._handleClick = (event) => {
28
- const target = event.target;
29
- if (target?.closest('[data-command="close"]')) {
30
- this._closeDialog();
31
- }
32
- };
33
- // Safari closedBy="any" polyfill
34
- // Calculate whether the user's pointer down event is outside or inside dialog
35
- // If outside, close the dialog
36
- this._handlePointerDown = (event) => {
37
- const rect = this._dialog.getBoundingClientRect();
38
- const { clientX: x, clientY: y } = event;
39
- this._pointerDownInside = rect.top <= y && y <= rect.bottom && rect.left <= x && x <= rect.right;
40
- };
41
- this._handlePointerUp = (event) => {
42
- const wasDownInside = this._pointerDownInside;
43
- this._pointerDownInside = false;
44
- if (this.closedby !== 'any' || wasDownInside) {
45
- return;
46
- }
47
- // Clicking the backdrop will have the dialog as the target in Safari/Chrome.
48
- // Firefox does not fire this callback when ::backdrop is clicked.
49
- if (event.target !== this._dialog) {
50
- return;
51
- }
52
- // Use requestAnimationFrame to let the browser handle native closedBy first.
53
- // This avoids checking for the closedBy property, which Safari 26.2 exposes
54
- // without implementing.
55
- requestAnimationFrame(() => {
56
- if (this._dialog && this._dialog.open) {
57
- this._closeDialog();
58
- }
59
- });
60
- };
61
- this._handleCancel = (event) => {
62
- if (this.closedby === 'none') {
63
- event.preventDefault();
64
- }
65
- };
66
- this._handleAutoFocus = () => {
67
- // slot:not([name]) finds the default nameless slot
68
- const contentSlotElements = this.shadowRoot?.querySelector('slot:not([name])')?.assignedElements({ flatten: true });
69
- if (!contentSlotElements || contentSlotElements.length === 0) {
70
- return;
71
- }
72
- const elementToFocus = contentSlotElements.find((element) => {
73
- return element.getAttribute('autofocus') != null;
74
- });
75
- if (!(elementToFocus instanceof HTMLElement)) {
76
- return;
77
- }
78
- if (document.activeElement !== elementToFocus) {
79
- elementToFocus.focus();
80
- }
81
- };
82
- }
83
- firstUpdated() {
84
- this._setupEventListeners();
85
- if (this.open) {
86
- this._openDialog();
87
- }
88
- }
89
- updated(changedProperties) {
90
- if (!changedProperties.has('open')) {
91
- return;
92
- }
93
- if (this.open) {
94
- this._openDialog();
95
- }
96
- else {
97
- this._closeDialog();
98
- }
99
- }
100
- _setupEventListeners() {
101
- this._dialog.addEventListener('close', this._handleClose);
102
- this._dialog.addEventListener('cancel', this._handleCancel);
103
- this._dialog.addEventListener('click', this._handleClick);
104
- this._dialog.addEventListener('pointerdown', this._handlePointerDown);
105
- this._dialog.addEventListener('pointerup', this._handlePointerUp);
106
- this._dialog.addEventListener('animationend', this._handleAutoFocus);
107
- }
108
- _openDialog() {
109
- if (!this._dialog) {
110
- return;
111
- }
112
- if (this.modal) {
113
- this._dialog.showModal();
114
- }
115
- else {
116
- this._dialog.show();
117
- }
118
- }
119
- _closeDialog() {
120
- if (!this._dialog) {
121
- return;
122
- }
123
- this._dialog.close();
124
- }
125
- show() {
126
- this.open = true;
127
- }
128
- showModal() {
129
- this.modal = true;
130
- this.open = true;
131
- }
132
- close() {
133
- this.open = false;
134
- }
135
- render() {
136
- const headerIsEmpty = this.headerSlotElements.length === 0;
137
- return html `
138
- <dialog .closedBy="${this.closedby}" class=${headerIsEmpty ? 'sds-dialog__empty-header' : ''}>
139
- <div class="sds-dialog__header">
140
- <slot name="header"></slot>
141
- ${this.closeButtonLabel
142
- ? html `
143
- <sds-button class="sds-dialog__close-button" icon variant="tertiary" size="md" data-command="close" aria-label="${this.closeButtonLabel}">
144
- <sds-icon name="close-material-outlined" size="md"></sds-icon>
145
- </sds-button>
146
- `
147
- : nothing}
148
- </div>
149
- <slot></slot>
150
- <slot name="footer"></slot>
151
- </dialog>
152
- `;
153
- }
11
+ let SDSDialog = class SDSDialog extends SDSDialogComponent {
154
12
  };
155
- SDSDialog.styles = [styles];
156
- __decorate([
157
- property({ type: Boolean, reflect: true })
158
- ], SDSDialog.prototype, "open", void 0);
159
- __decorate([
160
- property({ type: Boolean, reflect: true })
161
- ], SDSDialog.prototype, "modal", void 0);
162
- __decorate([
163
- property({ type: String, reflect: true })
164
- ], SDSDialog.prototype, "closedby", void 0);
165
- __decorate([
166
- property({ type: String, attribute: 'close-button-label' })
167
- ], SDSDialog.prototype, "closeButtonLabel", void 0);
168
- __decorate([
169
- query('dialog')
170
- ], SDSDialog.prototype, "_dialog", void 0);
171
- __decorate([
172
- queryAssignedElements({ slot: 'header', flatten: false })
173
- ], SDSDialog.prototype, "headerSlotElements", void 0);
174
13
  SDSDialog = __decorate([
175
14
  guardedCustomElement('sds-dialog')
176
15
  ], SDSDialog);
@@ -1 +1 @@
1
- {"version":3,"file":"sds-dialog.js","sourceRoot":"","sources":["../../src/sds-dialog/sds-dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, nothing, type PropertyValues } from 'lit';\nimport { property, query, queryAssignedElements } from 'lit/decorators.js';\nimport { guardedCustomElement } from '../utils/guarded-custom-element';\nimport { styles } from './sds-dialog.styles';\nimport { SheriffEvent } from '../types';\nimport { SDSEventDispatcherMixin } from '../mixins/sds-event-dispatcher-mixin';\n\nimport '../sds-icon/sds-icon';\nimport '../sds-button/sds-button';\n\ntype ClosedBy = 'none' | 'closerequest' | 'any';\n\nexport interface SDSDialogProps {\n\topen?: boolean;\n\t/**\n\t * Set if dialog opens as a modal or not\n\t *\n\t * If non-modal, the user is allowed to interact with content outside of the dialog.\n\t * If modal, the dialog is placed in the top layer with a ::backdrop pseudo-element.\n\t *\n\t * Docs:\n\t * - https://developer.mozilla.org/en-US/docs/Web/API/HTMLDialogElement/show\n\t * - https://developer.mozilla.org/en-US/docs/Web/API/HTMLDialogElement/showModal\n\t */\n\tmodal?: boolean;\n\t/**\n\t * Set what type of dismiss behavior closes the dialog\n\t * - 'none': Dialog can only be closed programmatically\n\t * - 'closerequest': Dialog closes on ESC key (default)\n\t * - 'any': Dialog closes on ESC key or clicking outside\n\t *\n\t * Docs: https://developer.mozilla.org/en-US/docs/Web/API/HTMLDialogElement/closedBy\n\t */\n\tclosedby?: ClosedBy;\n\t'close-button-label'?: string;\n}\n\n@guardedCustomElement('sds-dialog')\nexport class SDSDialog extends SDSEventDispatcherMixin(LitElement) {\n\tstatic override styles = [styles];\n\n\t@property({ type: Boolean, reflect: true }) open: boolean = false;\n\t@property({ type: Boolean, reflect: true }) modal: boolean = false;\n\t@property({ type: String, reflect: true }) closedby: ClosedBy = 'closerequest';\n\t@property({ type: String, attribute: 'close-button-label' }) closeButtonLabel: string = 'Lukk dialogvindu';\n\n\t@query('dialog') private _dialog!: HTMLDialogElement;\n\n\t@queryAssignedElements({ slot: 'header', flatten: false }) private headerSlotElements!: Element[];\n\n\t// Safari closedBy=any polyfill state\n\tprivate _pointerDownInside = false;\n\n\toverride firstUpdated(): void {\n\t\tthis._setupEventListeners();\n\t\tif (this.open) {\n\t\t\tthis._openDialog();\n\t\t}\n\t}\n\n\toverride updated(changedProperties: PropertyValues): void {\n\t\tif (!changedProperties.has('open')) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.open) {\n\t\t\tthis._openDialog();\n\t\t} else {\n\t\t\tthis._closeDialog();\n\t\t}\n\t}\n\n\tprivate _setupEventListeners(): void {\n\t\tthis._dialog.addEventListener('close', this._handleClose);\n\t\tthis._dialog.addEventListener('cancel', this._handleCancel);\n\t\tthis._dialog.addEventListener('click', this._handleClick);\n\t\tthis._dialog.addEventListener('pointerdown', this._handlePointerDown);\n\t\tthis._dialog.addEventListener('pointerup', this._handlePointerUp);\n\t\tthis._dialog.addEventListener('animationend', this._handleAutoFocus);\n\t}\n\n\tprivate _openDialog(): void {\n\t\tif (!this._dialog) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.modal) {\n\t\t\tthis._dialog.showModal();\n\t\t} else {\n\t\t\tthis._dialog.show();\n\t\t}\n\t}\n\n\tprivate _closeDialog(): void {\n\t\tif (!this._dialog) {\n\t\t\treturn;\n\t\t}\n\t\tthis._dialog.close();\n\t}\n\n\tprivate readonly _handleClose = (): void => {\n\t\tthis.open = false;\n\t\tthis.dispatchSheriffEvent('sds-close');\n\t};\n\n\tprivate readonly _handleClick = (event: MouseEvent): void => {\n\t\tconst target = event.target as Element | null;\n\n\t\tif (target?.closest('[data-command=\"close\"]')) {\n\t\t\tthis._closeDialog();\n\t\t}\n\t};\n\n\t// Safari closedBy=\"any\" polyfill\n\t// Calculate whether the user's pointer down event is outside or inside dialog\n\t// If outside, close the dialog\n\tprivate readonly _handlePointerDown = (event: PointerEvent): void => {\n\t\tconst rect = this._dialog.getBoundingClientRect();\n\t\tconst { clientX: x, clientY: y } = event;\n\t\tthis._pointerDownInside = rect.top <= y && y <= rect.bottom && rect.left <= x && x <= rect.right;\n\t};\n\n\tprivate readonly _handlePointerUp = (event: PointerEvent): void => {\n\t\tconst wasDownInside = this._pointerDownInside;\n\t\tthis._pointerDownInside = false;\n\n\t\tif (this.closedby !== 'any' || wasDownInside) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clicking the backdrop will have the dialog as the target in Safari/Chrome.\n\t\t// Firefox does not fire this callback when ::backdrop is clicked.\n\t\tif (event.target !== this._dialog) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Use requestAnimationFrame to let the browser handle native closedBy first.\n\t\t// This avoids checking for the closedBy property, which Safari 26.2 exposes\n\t\t// without implementing.\n\t\trequestAnimationFrame(() => {\n\t\t\tif (this._dialog && this._dialog.open) {\n\t\t\t\tthis._closeDialog();\n\t\t\t}\n\t\t});\n\t};\n\n\tprivate readonly _handleCancel = (event: Event): void => {\n\t\tif (this.closedby === 'none') {\n\t\t\tevent.preventDefault();\n\t\t}\n\t};\n\n\tprivate readonly _handleAutoFocus = (): void => {\n\t\t// slot:not([name]) finds the default nameless slot\n\t\tconst contentSlotElements = this.shadowRoot?.querySelector<HTMLSlotElement>('slot:not([name])')?.assignedElements({ flatten: true });\n\t\tif (!contentSlotElements || contentSlotElements.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst elementToFocus = contentSlotElements.find((element) => {\n\t\t\treturn element.getAttribute('autofocus') != null;\n\t\t});\n\n\t\tif (!(elementToFocus instanceof HTMLElement)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (document.activeElement !== elementToFocus) {\n\t\t\telementToFocus.focus();\n\t\t}\n\t};\n\n\tpublic show(): void {\n\t\tthis.open = true;\n\t}\n\n\tpublic showModal(): void {\n\t\tthis.modal = true;\n\t\tthis.open = true;\n\t}\n\n\tpublic close(): void {\n\t\tthis.open = false;\n\t}\n\n\toverride render() {\n\t\tconst headerIsEmpty = this.headerSlotElements.length === 0;\n\t\treturn html`\n\t\t\t<dialog .closedBy=\"${this.closedby}\" class=${headerIsEmpty ? 'sds-dialog__empty-header' : ''}>\n\t\t\t\t<div class=\"sds-dialog__header\">\n\t\t\t\t\t<slot name=\"header\"></slot>\n\t\t\t\t\t${this.closeButtonLabel\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<sds-button class=\"sds-dialog__close-button\" icon variant=\"tertiary\" size=\"md\" data-command=\"close\" aria-label=\"${this.closeButtonLabel}\">\n\t\t\t\t\t\t\t\t\t<sds-icon name=\"close-material-outlined\" size=\"md\"></sds-icon>\n\t\t\t\t\t\t\t\t</sds-button>\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t: nothing}\n\t\t\t\t</div>\n\t\t\t\t<slot></slot>\n\t\t\t\t<slot name=\"footer\"></slot>\n\t\t\t</dialog>\n\t\t`;\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'sds-dialog': SDSDialog;\n\t}\n\tinterface GlobalEventHandlersEventMap {\n\t\t'sds-close': SheriffEvent;\n\t}\n}\n"]}
1
+ {"version":3,"file":"sds-dialog.js","sourceRoot":"","sources":["../../src/sds-dialog/sds-dialog.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,sBAAsB,CAAC;AAC9B,OAAO,0BAA0B,CAAC;AAG3B,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,kBAAkB;CAAG,CAAA;AAAvC,SAAS;IADrB,oBAAoB,CAAC,YAAY,CAAC;GACtB,SAAS,CAA8B","sourcesContent":["import { guardedCustomElement } from '../utils/guarded-custom-element';\nimport { SheriffEvent } from '../types';\nimport { SDSDialogComponent } from './sds-dialog.component';\n\nimport '../sds-icon/sds-icon';\nimport '../sds-button/sds-button';\n\n@guardedCustomElement('sds-dialog')\nexport class SDSDialog extends SDSDialogComponent {}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'sds-dialog': SDSDialog;\n\t}\n\tinterface GlobalEventHandlersEventMap {\n\t\t'sds-close': SheriffEvent;\n\t}\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sds-dialog.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sds-dialog.spec.d.ts","sourceRoot":"","sources":["../../src/sds-dialog/sds-dialog.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,50 @@
1
+ import { test, expect } from '@playwright/test';
2
+ test.describe('dialog-component', () => {
3
+ test.describe('commandfor', () => {
4
+ test.beforeEach(async ({ page }) => {
5
+ await page.goto('iframe.html?id=komponenter-dialog--dialog');
6
+ });
7
+ test('sets aria-haspopup on the trigger button', async ({ page }) => {
8
+ const innerButton = page.locator('sds-button[commandfor="dialog-example"][command="show-modal"]').locator('button');
9
+ await expect(innerButton).toHaveAttribute('aria-haspopup', 'dialog');
10
+ });
11
+ test('sets aria-controls on the trigger button', async ({ page }) => {
12
+ const innerButton = page.locator('sds-button[commandfor="dialog-example"][command="show-modal"]').locator('button');
13
+ await expect(innerButton).toHaveAttribute('aria-controls', 'dialog-example');
14
+ });
15
+ test('aria-expanded is false before opening', async ({ page }) => {
16
+ const innerButton = page.locator('sds-button[commandfor="dialog-example"][command="show-modal"]').locator('button');
17
+ await expect(innerButton).toHaveAttribute('aria-expanded', 'false');
18
+ });
19
+ test('clicking the trigger opens the dialog', async ({ page }) => {
20
+ const trigger = page.locator('sds-button[commandfor="dialog-example"][command="show-modal"]');
21
+ const dialog = page.locator('sds-dialog#dialog-example');
22
+ await trigger.click();
23
+ await expect(dialog).toHaveAttribute('open');
24
+ });
25
+ test('aria-expanded is true when dialog is open', async ({ page }) => {
26
+ const trigger = page.locator('sds-button[commandfor="dialog-example"][command="show-modal"]');
27
+ const innerButton = trigger.locator('button');
28
+ await trigger.click();
29
+ await expect(innerButton).toHaveAttribute('aria-expanded', 'true');
30
+ });
31
+ test('closing via command="close" resets aria-expanded', async ({ page }) => {
32
+ const trigger = page.locator('sds-button[commandfor="dialog-example"][command="show-modal"]');
33
+ const innerButton = trigger.locator('button');
34
+ await trigger.click();
35
+ await expect(innerButton).toHaveAttribute('aria-expanded', 'true');
36
+ const closeButton = page.locator('sds-dialog#dialog-example sds-button[slot="footer"][command="close"]');
37
+ await closeButton.click();
38
+ await expect(innerButton).toHaveAttribute('aria-expanded', 'false');
39
+ });
40
+ test('closing via ESC resets aria-expanded', async ({ page }) => {
41
+ const trigger = page.locator('sds-button[commandfor="dialog-example"][command="show-modal"]');
42
+ const innerButton = trigger.locator('button');
43
+ await trigger.click();
44
+ await expect(innerButton).toHaveAttribute('aria-expanded', 'true');
45
+ await page.keyboard.press('Escape');
46
+ await expect(innerButton).toHaveAttribute('aria-expanded', 'false');
47
+ });
48
+ });
49
+ });
50
+ //# sourceMappingURL=sds-dialog.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sds-dialog.spec.js","sourceRoot":"","sources":["../../src/sds-dialog/sds-dialog.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { test, expect } from '@playwright/test';\n\ntest.describe('dialog-component', () => {\n\ttest.describe('commandfor', () => {\n\t\ttest.beforeEach(async ({ page }) => {\n\t\t\tawait page.goto('iframe.html?id=komponenter-dialog--dialog');\n\t\t});\n\n\t\ttest('sets aria-haspopup on the trigger button', async ({ page }) => {\n\t\t\tconst innerButton = page.locator('sds-button[commandfor=\"dialog-example\"][command=\"show-modal\"]').locator('button');\n\t\t\tawait expect(innerButton).toHaveAttribute('aria-haspopup', 'dialog');\n\t\t});\n\n\t\ttest('sets aria-controls on the trigger button', async ({ page }) => {\n\t\t\tconst innerButton = page.locator('sds-button[commandfor=\"dialog-example\"][command=\"show-modal\"]').locator('button');\n\t\t\tawait expect(innerButton).toHaveAttribute('aria-controls', 'dialog-example');\n\t\t});\n\n\t\ttest('aria-expanded is false before opening', async ({ page }) => {\n\t\t\tconst innerButton = page.locator('sds-button[commandfor=\"dialog-example\"][command=\"show-modal\"]').locator('button');\n\t\t\tawait expect(innerButton).toHaveAttribute('aria-expanded', 'false');\n\t\t});\n\n\t\ttest('clicking the trigger opens the dialog', async ({ page }) => {\n\t\t\tconst trigger = page.locator('sds-button[commandfor=\"dialog-example\"][command=\"show-modal\"]');\n\t\t\tconst dialog = page.locator('sds-dialog#dialog-example');\n\n\t\t\tawait trigger.click();\n\n\t\t\tawait expect(dialog).toHaveAttribute('open');\n\t\t});\n\n\t\ttest('aria-expanded is true when dialog is open', async ({ page }) => {\n\t\t\tconst trigger = page.locator('sds-button[commandfor=\"dialog-example\"][command=\"show-modal\"]');\n\t\t\tconst innerButton = trigger.locator('button');\n\n\t\t\tawait trigger.click();\n\n\t\t\tawait expect(innerButton).toHaveAttribute('aria-expanded', 'true');\n\t\t});\n\n\t\ttest('closing via command=\"close\" resets aria-expanded', async ({ page }) => {\n\t\t\tconst trigger = page.locator('sds-button[commandfor=\"dialog-example\"][command=\"show-modal\"]');\n\t\t\tconst innerButton = trigger.locator('button');\n\n\t\t\tawait trigger.click();\n\t\t\tawait expect(innerButton).toHaveAttribute('aria-expanded', 'true');\n\n\t\t\tconst closeButton = page.locator('sds-dialog#dialog-example sds-button[slot=\"footer\"][command=\"close\"]');\n\t\t\tawait closeButton.click();\n\n\t\t\tawait expect(innerButton).toHaveAttribute('aria-expanded', 'false');\n\t\t});\n\n\t\ttest('closing via ESC resets aria-expanded', async ({ page }) => {\n\t\t\tconst trigger = page.locator('sds-button[commandfor=\"dialog-example\"][command=\"show-modal\"]');\n\t\t\tconst innerButton = trigger.locator('button');\n\n\t\t\tawait trigger.click();\n\t\t\tawait expect(innerButton).toHaveAttribute('aria-expanded', 'true');\n\n\t\t\tawait page.keyboard.press('Escape');\n\n\t\t\tawait expect(innerButton).toHaveAttribute('aria-expanded', 'false');\n\t\t});\n\t});\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sds-dialog.styles.d.ts","sourceRoot":"","sources":["../../src/sds-dialog/sds-dialog.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM,yBAkHlB,CAAC"}
1
+ {"version":3,"file":"sds-dialog.styles.d.ts","sourceRoot":"","sources":["../../src/sds-dialog/sds-dialog.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM,yBAgHlB,CAAC"}
@@ -61,9 +61,7 @@ export const styles = css `
61
61
  gap: var(--_sds-dialog-gap);
62
62
  }
63
63
 
64
- &.sds-dialog__empty-header {
65
- /* Set gap to 0 to collapse empty header */
66
- --_sds-dialog-gap: var(--sds-dialog-gap, var(--sds-spacing-zero));
64
+ &.sds-dialog__empty-header:has(.sds-dialog__close-button) {
67
65
  /* Set padding right to avoid overflowing the close button */
68
66
  padding-right: var(--sds-dialog-padding-right, var(--sds-spacing-lg));
69
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sds-dialog.styles.js","sourceRoot":"","sources":["../../src/sds-dialog/sds-dialog.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkHxB,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const styles = css`\n\t:host {\n\t\t--_sds-dialog-background-color: var(--sds-dialog-background-color, var(--sds-color-surface-default, var(--sds-color-main-surface-default)));\n\t\t--_sds-dialog-backdrop-color: var(--sds-dialog-backdrop-color, rgba(0, 0, 0, 0.5));\n\n\t\t--_sds-dialog-border-color: var(--sds-dialog-border-color, var(--sds-color-border-subtle, var(--sds-color-main-border-subtle)));\n\t\t--_sds-dialog-border-radius: var(--sds-dialog-border-radius, var(--sds-radius-md));\n\t\t--_sds-dialog-border-width: var(--sds-dialog-border-width, var(--sds-border-sm));\n\n\t\t--_sds-dialog-max-width: var(--sds-dialog-max-width, min(60ch, 100vw));\n\t\t--_sds-dialog-max-height: var(--sds-dialog-max-height, calc(100dvh - var(--sds-spacing-lg)));\n\n\t\t--_sds-dialog-margin: var(--sds-dialog-margin, auto);\n\t\t--_sds-dialog-padding-block: var(--sds-dialog-padding-block, var(--sds-spacing-sm));\n\t\t--_sds-dialog-padding-inline: var(--sds-dialog-padding-inline, var(--sds-spacing-sm));\n\t\t--_sds-dialog-gap: var(--sds-dialog-gap, var(--sds-spacing-xs));\n\n\t\t--_sds-dialog-font-family: var(--sds-dialog-font-family, var(--sds-typography-font-family-roboto));\n\t\t--_sds-dialog-text-color: var(--sds-dialog-text-color, var(--sds-color-text-default, var(--sds-color-main-text-default)));\n\n\t\t--_sds-dialog-box-shadow: var(--sds-dialog-box-shadow, 0 4px 6px -1px rgba(0, 0, 0, 0.1));\n\n\t\t--_sds-dialog-animation-duration: var(--sds-dialog-animation-duration, 200ms);\n\t\t--_sds-dialog-close-button-offset: var(--sds-dialog-close-button-offset, var(--sds-spacing-3xs));\n\n\t\tdisplay: contents;\n\t}\n\n\tdialog {\n\t\tcolor: var(--_sds-dialog-text-color);\n\t\tbackground-color: var(--_sds-dialog-background-color);\n\t\tbox-shadow: var(--_sds-dialog-box-shadow);\n\n\t\tborder: var(--_sds-dialog-border-width) solid var(--_sds-dialog-border-color);\n\t\tborder-radius: var(--_sds-dialog-border-radius);\n\n\t\tfont-family: var(--_sds-dialog-font-family);\n\n\t\tmax-width: var(--_sds-dialog-max-width);\n\t\tmax-height: var(--_sds-dialog-max-height);\n\n\t\toverflow: auto;\n\t\tpadding: 0;\n\n\t\topacity: 0;\n\t\ttransform: translateY(-1rem);\n\t\tanimation: sds-dialog-fade-in var(--_sds-dialog-animation-duration) ease-out forwards;\n\n\t\t&:focus-visible {\n\t\t\toutline: 3px solid var(--sds-color-states-focus-outer);\n\t\t\toutline-offset: 3px;\n\t\t}\n\n\t\t&[open] {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tmargin: var(--_sds-dialog-margin);\n\t\t\tpadding-block: var(--_sds-dialog-padding-block);\n\t\t\tpadding-inline: var(--_sds-dialog-padding-inline);\n\t\t\tgap: var(--_sds-dialog-gap);\n\t\t}\n\n\t\t&.sds-dialog__empty-header {\n\t\t\t/* Set gap to 0 to collapse empty header */\n\t\t\t--_sds-dialog-gap: var(--sds-dialog-gap, var(--sds-spacing-zero));\n\t\t\t/* Set padding right to avoid overflowing the close button */\n\t\t\tpadding-right: var(--sds-dialog-padding-right, var(--sds-spacing-lg));\n\t\t}\n\n\t\t&::backdrop {\n\t\t\tbackground-color: var(--_sds-dialog-backdrop-color);\n\t\t\t/* @keyframes does not work for ::backdrop in Firefox, so use transition instead */\n\t\t\ttransition: opacity var(--_sds-dialog-animation-duration) ease-out;\n\t\t\topacity: 0;\n\t\t}\n\n\t\t&[open]::backdrop {\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t@keyframes sds-dialog-fade-in {\n\t\tto {\n\t\t\topacity: 1;\n\t\t\ttransform: translateY(0);\n\t\t}\n\t}\n\n\t.sds-dialog__close-button {\n\t\t--sds-button-text-color: var(--sds-dialog-close-button-color, var(--sds-color-text-subtle, var(--sds-color-main-text-subtle)));\n\t\t--sds-button-padding-inline: 0;\n\n\t\tposition: absolute;\n\t\ttop: var(--_sds-dialog-close-button-offset);\n\t\tright: var(--_sds-dialog-close-button-offset);\n\t\tz-index: 1;\n\t}\n\n\t.sds-dialog__header {\n\t\tmargin-right: var(--sds-spacing-lg);\n\t}\n\n\t@media (max-width: 640px) {\n\t\t:host {\n\t\t\t--_sds-dialog-max-width: var(--sds-dialog-max-width, 100%);\n\t\t\t--_sds-dialog-margin: var(--sds-dialog-margin, var(--sds-spacing-xs));\n\t\t}\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host {\n\t\t\t--_sds-dialog-animation-duration: 0ms;\n\t\t}\n\t}\n`;\n"]}
1
+ {"version":3,"file":"sds-dialog.styles.js","sourceRoot":"","sources":["../../src/sds-dialog/sds-dialog.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgHxB,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const styles = css`\n\t:host {\n\t\t--_sds-dialog-background-color: var(--sds-dialog-background-color, var(--sds-color-surface-default, var(--sds-color-main-surface-default)));\n\t\t--_sds-dialog-backdrop-color: var(--sds-dialog-backdrop-color, rgba(0, 0, 0, 0.5));\n\n\t\t--_sds-dialog-border-color: var(--sds-dialog-border-color, var(--sds-color-border-subtle, var(--sds-color-main-border-subtle)));\n\t\t--_sds-dialog-border-radius: var(--sds-dialog-border-radius, var(--sds-radius-md));\n\t\t--_sds-dialog-border-width: var(--sds-dialog-border-width, var(--sds-border-sm));\n\n\t\t--_sds-dialog-max-width: var(--sds-dialog-max-width, min(60ch, 100vw));\n\t\t--_sds-dialog-max-height: var(--sds-dialog-max-height, calc(100dvh - var(--sds-spacing-lg)));\n\n\t\t--_sds-dialog-margin: var(--sds-dialog-margin, auto);\n\t\t--_sds-dialog-padding-block: var(--sds-dialog-padding-block, var(--sds-spacing-sm));\n\t\t--_sds-dialog-padding-inline: var(--sds-dialog-padding-inline, var(--sds-spacing-sm));\n\t\t--_sds-dialog-gap: var(--sds-dialog-gap, var(--sds-spacing-xs));\n\n\t\t--_sds-dialog-font-family: var(--sds-dialog-font-family, var(--sds-typography-font-family-roboto));\n\t\t--_sds-dialog-text-color: var(--sds-dialog-text-color, var(--sds-color-text-default, var(--sds-color-main-text-default)));\n\n\t\t--_sds-dialog-box-shadow: var(--sds-dialog-box-shadow, 0 4px 6px -1px rgba(0, 0, 0, 0.1));\n\n\t\t--_sds-dialog-animation-duration: var(--sds-dialog-animation-duration, 200ms);\n\t\t--_sds-dialog-close-button-offset: var(--sds-dialog-close-button-offset, var(--sds-spacing-3xs));\n\n\t\tdisplay: contents;\n\t}\n\n\tdialog {\n\t\tcolor: var(--_sds-dialog-text-color);\n\t\tbackground-color: var(--_sds-dialog-background-color);\n\t\tbox-shadow: var(--_sds-dialog-box-shadow);\n\n\t\tborder: var(--_sds-dialog-border-width) solid var(--_sds-dialog-border-color);\n\t\tborder-radius: var(--_sds-dialog-border-radius);\n\n\t\tfont-family: var(--_sds-dialog-font-family);\n\n\t\tmax-width: var(--_sds-dialog-max-width);\n\t\tmax-height: var(--_sds-dialog-max-height);\n\n\t\toverflow: auto;\n\t\tpadding: 0;\n\n\t\topacity: 0;\n\t\ttransform: translateY(-1rem);\n\t\tanimation: sds-dialog-fade-in var(--_sds-dialog-animation-duration) ease-out forwards;\n\n\t\t&:focus-visible {\n\t\t\toutline: 3px solid var(--sds-color-states-focus-outer);\n\t\t\toutline-offset: 3px;\n\t\t}\n\n\t\t&[open] {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tmargin: var(--_sds-dialog-margin);\n\t\t\tpadding-block: var(--_sds-dialog-padding-block);\n\t\t\tpadding-inline: var(--_sds-dialog-padding-inline);\n\t\t\tgap: var(--_sds-dialog-gap);\n\t\t}\n\n\t\t&.sds-dialog__empty-header:has(.sds-dialog__close-button) {\n\t\t\t/* Set padding right to avoid overflowing the close button */\n\t\t\tpadding-right: var(--sds-dialog-padding-right, var(--sds-spacing-lg));\n\t\t}\n\n\t\t&::backdrop {\n\t\t\tbackground-color: var(--_sds-dialog-backdrop-color);\n\t\t\t/* @keyframes does not work for ::backdrop in Firefox, so use transition instead */\n\t\t\ttransition: opacity var(--_sds-dialog-animation-duration) ease-out;\n\t\t\topacity: 0;\n\t\t}\n\n\t\t&[open]::backdrop {\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t@keyframes sds-dialog-fade-in {\n\t\tto {\n\t\t\topacity: 1;\n\t\t\ttransform: translateY(0);\n\t\t}\n\t}\n\n\t.sds-dialog__close-button {\n\t\t--sds-button-text-color: var(--sds-dialog-close-button-color, var(--sds-color-text-subtle, var(--sds-color-main-text-subtle)));\n\t\t--sds-button-padding-inline: 0;\n\n\t\tposition: absolute;\n\t\ttop: var(--_sds-dialog-close-button-offset);\n\t\tright: var(--_sds-dialog-close-button-offset);\n\t\tz-index: 1;\n\t}\n\n\t.sds-dialog__header {\n\t\tmargin-right: var(--sds-spacing-lg);\n\t}\n\n\t@media (max-width: 640px) {\n\t\t:host {\n\t\t\t--_sds-dialog-max-width: var(--sds-dialog-max-width, 100%);\n\t\t\t--_sds-dialog-margin: var(--sds-dialog-margin, var(--sds-spacing-xs));\n\t\t}\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host {\n\t\t\t--_sds-dialog-animation-duration: 0ms;\n\t\t}\n\t}\n`;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sds-heading.styles.d.ts","sourceRoot":"","sources":["../../src/sds-heading/sds-heading.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM,yBAyJlB,CAAC"}
1
+ {"version":3,"file":"sds-heading.styles.d.ts","sourceRoot":"","sources":["../../src/sds-heading/sds-heading.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM,yBA+JlB,CAAC"}
@@ -7,12 +7,15 @@ export const styles = css `
7
7
  --_sds-heading-margin: var(--sds-heading-margin, 0);
8
8
  --_sds-heading-padding: var(--sds-heading-padding, 0);
9
9
  --_sds-heading-text-align: var(--sds-heading-text-align, left);
10
+ --_sds-heading-text-decoration: var(--sds-heading-text-decoration, inherit);
11
+ --_sds-heading-text-decoration-thickness: var(--sds-heading-text-decoration-thickness, var(--sds-typography-link-text-decoration-thickness));
12
+ --_sds-heading-text-underline-offset: var(--sds-heading-text-underline-offset, var(--sds-typography-link-text-underline-offset));
10
13
 
11
14
  --_sds-heading-font-size: var(--sds-heading-font-size, var(--sds-typography-heading-xl-mobile-font-size));
12
15
  --_sds-heading-font-weight: var(--sds-heading-font-weight, var(--sds-typography-font-weight-bold));
13
16
  --_sds-heading-line-height: var(--sds-heading-line-height, var(--sds-typography-heading-xl-mobile-line-height));
14
17
 
15
- display: inline-block;
18
+ display: block;
16
19
  }
17
20
 
18
21
  :host([data-palette]) {
@@ -27,7 +30,7 @@ export const styles = css `
27
30
  h6,
28
31
  .sds-heading {
29
32
  color: var(--_sds-heading-text-color);
30
- display: inline-block;
33
+ display: inherit;
31
34
  font-family: var(--_sds-heading-font-family);
32
35
  font-size: var(--_sds-heading-font-size);
33
36
  font-weight: var(--_sds-heading-font-weight);
@@ -36,6 +39,9 @@ export const styles = css `
36
39
  max-width: var(--_sds-heading-max-line-width);
37
40
  padding: var(--_sds-heading-padding);
38
41
  text-align: var(--_sds-heading-text-align);
42
+ text-decoration: var(--_sds-heading-text-decoration);
43
+ text-decoration-thickness: var(--_sds-heading-text-decoration-thickness);
44
+ text-underline-offset: var(--_sds-heading-text-underline-offset);
39
45
  }
40
46
 
41
47
  h1,