@antadesign/anta 0.3.33 → 0.3.35

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 (205) hide show
  1. package/LICENSE.md +14 -1
  2. package/README.md +9 -0
  3. package/dist/anta_helpers.d.ts +46 -30
  4. package/dist/anta_helpers.js +66 -25
  5. package/dist/bundle.css +1 -1
  6. package/dist/bundle.js +2 -1353
  7. package/dist/components/Banner.d.ts +25 -40
  8. package/dist/components/Banner.js +15 -17
  9. package/dist/components/Breadcrumbs.d.ts +0 -1
  10. package/dist/components/Breadcrumbs.js +0 -1
  11. package/dist/components/Button.d.ts +2 -3
  12. package/dist/components/Button.js +1 -0
  13. package/dist/components/ButtonCopy.js +3 -2
  14. package/dist/components/Calendar.js +13 -13
  15. package/dist/components/Card.d.ts +9 -17
  16. package/dist/components/Card.js +50 -46
  17. package/dist/components/Dialog.d.ts +1 -0
  18. package/dist/components/Dialog.js +16 -10
  19. package/dist/components/Expander.d.ts +6 -21
  20. package/dist/components/Expander.js +24 -23
  21. package/dist/components/Icon.d.ts +8 -14
  22. package/dist/components/Input.d.ts +77 -96
  23. package/dist/components/Input.js +23 -27
  24. package/dist/components/InputAutocomplete.d.ts +29 -10
  25. package/dist/components/InputAutocomplete.js +25 -8
  26. package/dist/components/InputDate.d.ts +0 -1
  27. package/dist/components/InputDate.js +2 -3
  28. package/dist/components/InputTime.d.ts +10 -4
  29. package/dist/components/InputTime.js +20 -16
  30. package/dist/components/Loader.d.ts +2 -2
  31. package/dist/components/Menu.d.ts +5 -4
  32. package/dist/components/Menu.js +13 -8
  33. package/dist/components/MenuItem.js +1 -14
  34. package/dist/components/MenuItemCopy.js +2 -2
  35. package/dist/components/Panel.d.ts +3 -1
  36. package/dist/components/Panel.js +17 -11
  37. package/dist/components/Progress.d.ts +21 -23
  38. package/dist/components/Progress.js +13 -9
  39. package/dist/components/RadioGroup.js +6 -8
  40. package/dist/components/{select-parts.css → Select.css} +1 -1
  41. package/dist/components/Select.d.ts +53 -36
  42. package/dist/components/Select.js +53 -98
  43. package/dist/components/SelectFaceted.d.ts +7 -4
  44. package/dist/components/SelectFaceted.js +21 -10
  45. package/dist/components/Slider.d.ts +28 -11
  46. package/dist/components/Slider.js +20 -20
  47. package/dist/components/Steps.css +1 -1
  48. package/dist/components/Steps.d.ts +0 -1
  49. package/dist/components/Steps.js +1 -12
  50. package/dist/components/Tabs.d.ts +17 -20
  51. package/dist/components/Tabs.js +7 -9
  52. package/dist/components/Text.d.ts +55 -36
  53. package/dist/components/Text.js +35 -22
  54. package/dist/components/Title.d.ts +19 -27
  55. package/dist/components/Title.js +2 -1
  56. package/dist/components/Toaster.js +9 -2
  57. package/dist/components/Tooltip.d.ts +10 -15
  58. package/dist/components/copy-props.d.ts +14 -3
  59. package/dist/components/copy-props.js +14 -3
  60. package/dist/components/select-tree.d.ts +24 -0
  61. package/dist/components/select-tree.js +35 -0
  62. package/dist/element-base.d.ts +10 -0
  63. package/dist/element-base.js +15 -0
  64. package/dist/elements/a-avatar.css +1 -1
  65. package/dist/elements/a-avatar.js +2 -28
  66. package/dist/elements/a-banner.css +1 -1
  67. package/dist/elements/a-banner.d.ts +4 -1
  68. package/dist/elements/a-banner.js +22 -112
  69. package/dist/elements/a-breadcrumbs.d.ts +1 -0
  70. package/dist/elements/a-breadcrumbs.js +1 -0
  71. package/dist/elements/a-button.css +1 -1
  72. package/dist/elements/a-button.d.ts +10 -7
  73. package/dist/elements/a-button.js +18 -1
  74. package/dist/elements/a-calendar.d.ts +14 -13
  75. package/dist/elements/a-calendar.js +29 -24
  76. package/dist/elements/a-card.css +1 -1
  77. package/dist/elements/a-card.d.ts +0 -9
  78. package/dist/elements/a-card.js +0 -184
  79. package/dist/elements/a-checkbox.css +1 -1
  80. package/dist/elements/a-copy.css +1 -1
  81. package/dist/elements/a-copy.d.ts +1 -5
  82. package/dist/elements/a-copy.js +129 -108
  83. package/dist/elements/a-dialog.css +1 -1
  84. package/dist/elements/a-dialog.d.ts +1 -1
  85. package/dist/elements/a-dialog.js +68 -194
  86. package/dist/elements/a-expander.css +1 -1
  87. package/dist/elements/a-expander.d.ts +4 -30
  88. package/dist/elements/a-expander.js +85 -344
  89. package/dist/elements/a-icon.d.ts +5 -23
  90. package/dist/elements/a-icon.js +1 -2
  91. package/dist/elements/a-input-date.d.ts +1 -0
  92. package/dist/elements/a-input-date.js +1 -0
  93. package/dist/elements/a-input-time.css +1 -1
  94. package/dist/elements/a-input-time.d.ts +2 -1
  95. package/dist/elements/a-input-time.js +101 -168
  96. package/dist/elements/a-input.css +1 -1
  97. package/dist/elements/a-input.d.ts +10 -8
  98. package/dist/elements/a-input.js +155 -230
  99. package/dist/elements/a-loader.d.ts +5 -8
  100. package/dist/elements/a-loader.js +1 -2
  101. package/dist/elements/a-menu-item.css +1 -1
  102. package/dist/elements/a-menu-item.d.ts +5 -3
  103. package/dist/elements/a-menu-item.js +5 -1
  104. package/dist/elements/a-menu.css +1 -1
  105. package/dist/elements/a-menu.d.ts +5 -7
  106. package/dist/elements/a-menu.js +383 -299
  107. package/dist/elements/a-panel.css +1 -1
  108. package/dist/elements/a-panel.js +19 -37
  109. package/dist/elements/a-progress.css +1 -1
  110. package/dist/elements/a-progress.d.ts +0 -22
  111. package/dist/elements/a-progress.js +0 -100
  112. package/dist/elements/a-radio-group.d.ts +1 -1
  113. package/dist/elements/a-radio-group.js +6 -4
  114. package/dist/elements/a-select-faceted.d.ts +1 -0
  115. package/dist/elements/a-select-faceted.js +1 -0
  116. package/dist/elements/a-select.d.ts +1 -0
  117. package/dist/elements/a-select.js +1 -0
  118. package/dist/elements/a-slider.css +1 -1
  119. package/dist/elements/a-slider.d.ts +11 -3
  120. package/dist/elements/a-slider.js +244 -242
  121. package/dist/elements/a-steps.d.ts +1 -0
  122. package/dist/elements/a-steps.js +1 -0
  123. package/dist/elements/a-switch.css +1 -1
  124. package/dist/elements/a-tab.css +1 -1
  125. package/dist/elements/a-tabpanel.d.ts +2 -2
  126. package/dist/elements/a-tabpanel.js +13 -3
  127. package/dist/elements/a-tabs.css +1 -1
  128. package/dist/elements/a-tabs.d.ts +1 -1
  129. package/dist/elements/a-tabs.js +6 -4
  130. package/dist/elements/a-tag.css +1 -1
  131. package/dist/elements/a-tag.d.ts +1 -0
  132. package/dist/elements/a-tag.js +1 -0
  133. package/dist/elements/a-text.css +1 -1
  134. package/dist/elements/a-text.d.ts +6 -43
  135. package/dist/elements/a-text.js +110 -193
  136. package/dist/elements/a-title.css +1 -1
  137. package/dist/elements/a-title.d.ts +1 -0
  138. package/dist/elements/a-title.js +1 -0
  139. package/dist/elements/a-toast.css +1 -1
  140. package/dist/elements/a-toast.d.ts +10 -45
  141. package/dist/elements/a-toast.js +80 -66
  142. package/dist/elements/a-toaster.css +1 -1
  143. package/dist/elements/a-toaster.js +9 -44
  144. package/dist/elements/a-tooltip.css +1 -1
  145. package/dist/elements/a-tooltip.d.ts +1 -1
  146. package/dist/elements/a-tooltip.js +142 -136
  147. package/dist/elements/copy-behavior.d.ts +1 -1
  148. package/dist/elements/copy-behavior.js +21 -21
  149. package/dist/elements/index.d.ts +9 -3
  150. package/dist/elements/index.js +6 -6
  151. package/dist/elements/input-focus-modality.d.ts +15 -0
  152. package/dist/elements/input-focus-modality.js +44 -0
  153. package/dist/elements/input-trailing-actions.d.ts +5 -0
  154. package/dist/elements/input-trailing-actions.js +38 -0
  155. package/dist/elements/shadow-aria.d.ts +2 -0
  156. package/dist/elements/shadow-aria.js +2 -1
  157. package/dist/elements/value-input.d.ts +3 -0
  158. package/dist/elements/value-input.js +12 -0
  159. package/dist/general_types.d.ts +103 -96
  160. package/dist/index.d.ts +1 -1
  161. package/dist/input-events.d.ts +4 -0
  162. package/dist/input-events.js +15 -0
  163. package/dist/jsx-runtime.d.ts +70 -23
  164. package/dist/jsx-runtime.js +26 -19
  165. package/dist/native-event-props.d.ts +2 -0
  166. package/dist/native-event-props.js +10 -0
  167. package/dist/reset.css +1 -1
  168. package/dist/theme-antithesis.css +10 -1
  169. package/dist/theme-antune.css +1 -1
  170. package/docs/accessibility.md +17 -3
  171. package/docs/changelog.md +384 -2
  172. package/docs/comparison.md +2 -2
  173. package/docs/components/avatar.md +5 -0
  174. package/docs/components/banner.md +117 -187
  175. package/docs/components/breadcrumbs.md +9 -6
  176. package/docs/components/button.md +22 -0
  177. package/docs/components/card.md +74 -28
  178. package/docs/components/checkbox.md +9 -10
  179. package/docs/components/dialog.md +83 -32
  180. package/docs/components/expander.md +198 -435
  181. package/docs/components/icon.md +11 -17
  182. package/docs/components/input-autocomplete.md +152 -52
  183. package/docs/components/input-date.md +175 -148
  184. package/docs/components/input-time.md +81 -38
  185. package/docs/components/input.md +343 -349
  186. package/docs/components/loader.md +2 -1
  187. package/docs/components/menu.md +35 -6
  188. package/docs/components/panel.md +18 -0
  189. package/docs/components/progress.md +83 -49
  190. package/docs/components/radio.md +39 -43
  191. package/docs/components/select-faceted.md +54 -7
  192. package/docs/components/select.md +390 -386
  193. package/docs/components/slider.md +136 -19
  194. package/docs/components/steps.md +6 -3
  195. package/docs/components/switch.md +8 -9
  196. package/docs/components/tabs.md +110 -104
  197. package/docs/components/text.md +110 -86
  198. package/docs/components/title.md +47 -33
  199. package/docs/components/toaster.md +242 -84
  200. package/docs/components/tooltip.md +204 -113
  201. package/docs/install-config.md +461 -96
  202. package/docs/packages/plot.md +228 -143
  203. package/docs/theming.md +29 -13
  204. package/package.json +43 -4
  205. package/theme-antithesis-license.md +66 -0
@@ -1,169 +1,12 @@
1
1
  import { HTMLElementBase, parseOpenState } from "../anta_helpers";
2
2
  import "./a-dialog.css";
3
3
  const CLOSE_TRIGGER = "closerequest";
4
- const ANIM_MS = 200;
5
- const SHADOW_STYLE = `
6
- :host { display: contents; }
7
-
8
- dialog {
9
- --_dur: ${ANIM_MS}ms;
10
- --_r: var(--dialog-round, var(--dialog-radius, 10px));
11
-
12
- position: fixed;
13
- box-sizing: border-box;
14
- padding: 0;
15
- border: var(--dialog-outline, none);
16
- max-width: calc(100vw - 2 * var(--dialog-margin, 32px));
17
- max-height: calc(100dvh - 2 * var(--dialog-margin, 32px));
18
- width: var(--dialog-width, 480px);
19
- height: var(--dialog-height, fit-content);
20
- overflow: visible;
21
- color: var(--dialog-text, inherit);
22
- background: var(--dialog-bg, #fff);
23
- border-radius: var(--_r);
24
- box-shadow: var(--dialog-shadow, inset 0 0 0 1px color-mix(in oklch, black 8%, transparent), 0 10px 38px color-mix(in oklch, black 28%, transparent));
25
-
26
- flex-direction: column;
27
- }
28
-
29
- dialog[open] {
30
- display: flex;
31
- }
32
-
33
- dialog:focus, dialog:focus-visible { outline: none; }
34
-
35
- dialog::backdrop {
36
- background: var(--dialog-overlay, color-mix(in oklch, black 40%, transparent));
37
- }
38
-
39
- :host { --_enter-from: scale(0.97); }
40
- :host([position="left"]) { --_enter-from: translateX(-100%); }
41
- :host([position="right"]) { --_enter-from: translateX(100%); }
42
- :host([position="top"]) { --_enter-from: translateY(-100%); }
43
- :host([position="bottom"]) { --_enter-from: translateY(100%); }
44
-
45
- @media (prefers-reduced-motion: no-preference) {
46
- dialog {
47
- opacity: 0;
48
- transform: var(--_enter-from);
49
- transition:
50
- opacity var(--_dur) ease,
51
- transform var(--_dur) ease,
52
- overlay var(--_dur) ease allow-discrete,
53
- display var(--_dur) ease allow-discrete;
54
- }
55
- dialog[open] {
56
- opacity: 1;
57
- transform: none;
58
- }
59
- @starting-style {
60
- dialog[open] { opacity: 0; transform: var(--_enter-from); }
61
- }
62
-
63
- dialog::backdrop {
64
- background: transparent;
65
- transition:
66
- background var(--_dur) ease,
67
- overlay var(--_dur) ease allow-discrete,
68
- display var(--_dur) ease allow-discrete;
69
- }
70
- dialog[open]::backdrop { background: var(--dialog-overlay, color-mix(in oklch, black 40%, transparent)); }
71
- @starting-style {
72
- dialog[open]::backdrop { background: transparent; }
73
- }
74
- }
75
-
76
- :host([position="left"]) dialog,
77
- :host([position="right"]) dialog {
78
- width: var(--dialog-width, 380px);
79
- max-width: calc(100vw - var(--dialog-margin, 32px));
80
- height: 100dvh;
81
- max-height: 100dvh;
82
- border-radius: 0;
83
- }
84
- :host([position="left"]) dialog { margin: 0 auto 0 0; }
85
- :host([position="right"]) dialog { margin: 0 0 0 auto; }
86
-
87
- :host([position="top"]) dialog,
88
- :host([position="bottom"]) dialog {
89
- width: 100vw;
90
- max-width: 100vw;
91
- height: var(--dialog-height, fit-content);
92
- max-height: calc(100dvh - var(--dialog-margin, 32px));
93
- border-radius: 0;
94
- }
95
- :host([position="top"]) dialog { margin: 0 auto auto auto; }
96
- :host([position="bottom"]) dialog { margin: auto auto 0 auto; }
97
-
98
- :host([position="fullscreen"]) dialog {
99
- width: 100vw;
100
- max-width: 100vw;
101
- height: 100dvh;
102
- max-height: 100dvh;
103
- margin: 0;
104
- border-radius: 0;
105
- }
106
-
107
- :host([round]) dialog { border-radius: var(--_r); }
108
- :host([round="top"]) dialog { border-radius: var(--_r) var(--_r) 0 0; }
109
- :host([round="bottom"]) dialog { border-radius: 0 0 var(--_r) var(--_r); }
110
- :host([round="left"]) dialog { border-radius: var(--_r) 0 0 var(--_r); }
111
- :host([round="right"]) dialog { border-radius: 0 var(--_r) var(--_r) 0; }
112
-
113
- slot[name="header"] {
114
- display: none;
115
- flex: 0 0 auto;
116
- padding: var(--dialog-header-padding, 18px 20px 8px);
117
- overflow: clip;
118
- overflow-wrap: anywhere;
119
- font-size: 17px;
120
- font-weight: 560;
121
- line-height: 24px;
122
- }
123
- slot[name="header"].has-content { display: block; }
124
- dialog.has-close slot[name="header"] { padding-inline-end: 52px; }
125
-
126
- slot[part="body"] {
127
- display: block;
128
- flex: 1 1 auto;
129
- min-height: 0;
130
- overflow: auto;
131
- padding: var(--dialog-body-padding, 8px 20px 12px);
132
- }
133
- /* With a close button but no header, the body is the top zone, so it takes the
134
- \u2715 clearance instead of the header (which is display:none when empty). */
135
- dialog.has-close slot[name="header"]:not(.has-content) ~ slot[part="body"] {
136
- padding-inline-end: 52px;
137
- }
138
-
139
- slot[name="footer"] {
140
- display: none;
141
- flex: 0 0 auto;
142
- padding: var(--dialog-footer-padding, 8px 20px 18px);
143
- }
144
- slot[name="footer"].has-content {
145
- display: flex;
146
- gap: 8px;
147
- justify-content: flex-end;
148
- align-items: center;
149
- flex-wrap: wrap;
150
- }
151
-
152
- slot[name="close"] { display: none; }
153
- slot[name="close"].has-content {
154
- display: block;
155
- position: absolute;
156
- inset-block-start: 10px;
157
- inset-inline-end: 10px;
158
- z-index: 1;
159
- }
160
- `;
161
4
  class ADialogElement extends HTMLElementBase {
162
5
  static observedAttributes = ["state", "name"];
163
6
  dialog;
164
7
  headerSlot;
8
+ bodySlot;
165
9
  footerSlot;
166
- closeSlot;
167
10
  // Counts `dialog.close()` calls WE initiate whose async `close` event is still
168
11
  // pending, and is decremented as each arrives. The native `close` event fires
169
12
  // from a queued task, so a synchronous guard can't span it, and a boolean
@@ -191,35 +34,31 @@ class ADialogElement extends HTMLElementBase {
191
34
  // The document click listener wired for the `name`-trigger convenience, kept so
192
35
  // it can be torn down (and re-wired when `name` / controlled-ness changes).
193
36
  #triggerListener;
37
+ #triggerDocument;
38
+ #internals;
39
+ #headerObserver;
194
40
  constructor() {
195
41
  super();
42
+ this.#internals = this.attachInternals();
196
43
  const shadow = this.attachShadow({ mode: "open" });
197
- const style = document.createElement("style");
198
- style.textContent = SHADOW_STYLE;
199
- this.dialog = document.createElement("dialog");
44
+ this.dialog = this.doc.createElement("dialog");
200
45
  this.dialog.setAttribute("part", "dialog");
201
46
  this.dialog.tabIndex = -1;
202
- this.closeSlot = document.createElement("slot");
203
- this.closeSlot.name = "close";
204
- this.closeSlot.setAttribute("part", "close");
205
- this.headerSlot = document.createElement("slot");
47
+ const closeSlot = this.doc.createElement("slot");
48
+ closeSlot.name = "close";
49
+ closeSlot.setAttribute("part", "close");
50
+ this.headerSlot = this.doc.createElement("slot");
206
51
  this.headerSlot.name = "header";
207
52
  this.headerSlot.setAttribute("part", "header");
208
- const bodySlot = document.createElement("slot");
209
- bodySlot.setAttribute("part", "body");
210
- this.footerSlot = document.createElement("slot");
53
+ this.bodySlot = this.doc.createElement("slot");
54
+ this.bodySlot.setAttribute("part", "body");
55
+ this.footerSlot = this.doc.createElement("slot");
211
56
  this.footerSlot.name = "footer";
212
57
  this.footerSlot.setAttribute("part", "footer");
213
- for (const slot of [this.headerSlot, this.footerSlot, this.closeSlot]) {
214
- slot.addEventListener("slotchange", () => {
215
- const has = slot.assignedNodes().length > 0;
216
- slot.classList.toggle("has-content", has);
217
- if (slot === this.closeSlot) this.dialog.classList.toggle("has-close", has);
218
- });
219
- }
220
- this.headerSlot.addEventListener("slotchange", () => this.#syncAccessibleName());
221
- this.dialog.append(this.headerSlot, bodySlot, this.footerSlot, this.closeSlot);
222
- shadow.append(style, this.dialog);
58
+ this.headerSlot.addEventListener("slotchange", () => this.#syncHeader());
59
+ this.footerSlot.addEventListener("slotchange", () => this.#syncRegions());
60
+ this.dialog.append(this.headerSlot, this.bodySlot, this.footerSlot, closeSlot);
61
+ shadow.append(this.dialog);
223
62
  this.dialog.addEventListener("cancel", (e) => {
224
63
  e.preventDefault();
225
64
  if (!this.#persistent) this.requestClose();
@@ -227,21 +66,29 @@ class ADialogElement extends HTMLElementBase {
227
66
  this.dialog.addEventListener("pointerdown", (e) => {
228
67
  this.#pressedBackdrop = e.target === this.dialog;
229
68
  });
69
+ this.dialog.addEventListener("pointercancel", () => {
70
+ this.#pressedBackdrop = false;
71
+ });
230
72
  this.dialog.addEventListener("click", (e) => {
231
- if (this.#persistent) return;
232
- if (this.#pressedBackdrop && e.target === this.dialog) this.requestClose();
73
+ const pressed = this.#pressedBackdrop;
74
+ this.#pressedBackdrop = false;
75
+ if (!this.#persistent && pressed && e.target === this.dialog) this.requestClose();
233
76
  });
234
77
  this.dialog.addEventListener("close", () => {
235
78
  if (this.#programmaticCloses > 0) {
236
79
  this.#programmaticCloses--;
237
80
  return;
238
81
  }
82
+ this.#pressedBackdrop = false;
239
83
  if (this.#controlled) this.#reflect(parseOpenState(this.getAttribute("state")));
240
84
  else this.#wantOpen = false;
241
85
  });
242
- this.addEventListener(CLOSE_TRIGGER, () => this.requestClose());
86
+ this.addEventListener(CLOSE_TRIGGER, (event) => {
87
+ if (event.composedPath().find((node) => node.localName === "a-dialog") === this) this.requestClose();
88
+ });
243
89
  }
244
90
  connectedCallback() {
91
+ this.#syncHeader();
245
92
  if (this.#controlled) {
246
93
  this.#reflect(parseOpenState(this.getAttribute("state")));
247
94
  } else {
@@ -252,10 +99,12 @@ class ADialogElement extends HTMLElementBase {
252
99
  if (this.#wantOpen) this.#open();
253
100
  }
254
101
  this.#syncTriggerListener();
255
- this.#syncAccessibleName();
256
102
  }
257
103
  disconnectedCallback() {
258
104
  this.#teardownTriggerListener();
105
+ this.#headerObserver?.disconnect();
106
+ this.#headerObserver = void 0;
107
+ this.#pressedBackdrop = false;
259
108
  if (this.dialog.open) {
260
109
  this.#programmaticCloses++;
261
110
  this.dialog.close();
@@ -314,7 +163,7 @@ class ADialogElement extends HTMLElementBase {
314
163
  * false if a handler vetoed it. */
315
164
  #announce(next) {
316
165
  return this.dispatchEvent(
317
- new CustomEvent("statechange", {
166
+ new this.view.CustomEvent("statechange", {
318
167
  cancelable: true,
319
168
  detail: { next, prev: this.#current }
320
169
  })
@@ -333,7 +182,7 @@ class ADialogElement extends HTMLElementBase {
333
182
  this.#wantOpen = true;
334
183
  if (this.dialog.open || !this.isConnected) return;
335
184
  this.dialog.showModal();
336
- const autofocus = this.querySelector("[autofocus]");
185
+ const autofocus = Array.from(this.querySelectorAll("[autofocus]")).find((node) => node.closest("a-dialog") === this);
337
186
  if (autofocus) autofocus.focus({ preventScroll: true });
338
187
  else this.dialog.focus();
339
188
  }
@@ -341,21 +190,43 @@ class ADialogElement extends HTMLElementBase {
341
190
  * ours so the listener doesn't reconcile it. (The disconnect teardown closes
342
191
  * the native dialog directly, NOT through here, to preserve `#wantOpen`.) */
343
192
  #close() {
193
+ this.#pressedBackdrop = false;
344
194
  this.#wantOpen = false;
345
195
  if (!this.dialog.open) return;
346
196
  this.#programmaticCloses++;
347
197
  this.dialog.close();
348
198
  }
349
- /** Publish the header text as the shadow dialog's accessible name (a-input's
350
- * label-mirror pattern). Shadow-internal — not a host / light-DOM write. */
351
- #syncAccessibleName() {
352
- const text = this.headerSlot.assignedNodes().map((n) => n.textContent ?? "").join(" ").trim();
199
+ #syncRegions(header = this.headerSlot.assignedNodes().length > 0) {
200
+ for (const [state, present] of [
201
+ ["has-header", header],
202
+ ["has-footer", this.footerSlot.assignedNodes().length > 0]
203
+ ]) {
204
+ if (present) this.#internals.states.add(state);
205
+ else this.#internals.states.delete(state);
206
+ }
207
+ }
208
+ #syncHeader() {
209
+ if (!this.isConnected) return;
210
+ const nodes = this.headerSlot.assignedNodes();
211
+ this.#syncRegions(nodes.length > 0);
212
+ this.#syncAccessibleName(nodes);
213
+ this.#headerObserver?.disconnect();
214
+ this.#headerObserver = void 0;
215
+ if (!nodes.length) return;
216
+ this.#headerObserver = new this.view.MutationObserver(() => this.#syncAccessibleName(nodes));
217
+ for (const node of nodes) {
218
+ this.#headerObserver.observe(node, { childList: true, characterData: true, subtree: true });
219
+ }
220
+ }
221
+ /** Keep the header-derived name on the owned native dialog. */
222
+ #syncAccessibleName(nodes) {
223
+ const text = nodes.map((n) => n.textContent ?? "").join(" ").trim();
353
224
  if (text) this.dialog.setAttribute("aria-label", text);
354
225
  else this.dialog.removeAttribute("aria-label");
355
226
  }
356
227
  // --- `name`-trigger convenience (uncontrolled only) ---
357
228
  #syncTriggerListener() {
358
- const wanted = !this.#controlled && !!this.getAttribute("name");
229
+ const wanted = this.isConnected && !this.#controlled && !!this.getAttribute("name");
359
230
  if (wanted && !this.#triggerListener) this.#wireTriggerListener();
360
231
  else if (!wanted && this.#triggerListener) this.#teardownTriggerListener();
361
232
  }
@@ -364,15 +235,18 @@ class ADialogElement extends HTMLElementBase {
364
235
  const name = this.getAttribute("name");
365
236
  if (!name) return;
366
237
  const t = e.target;
367
- if (!(t instanceof Element)) return;
368
- if (t.closest(`[data-dialog-open="${CSS.escape(name)}"]`)) this.requestOpen();
369
- else if (t.closest(`[data-dialog-close="${CSS.escape(name)}"]`)) this.requestClose();
238
+ if (!t || t.nodeType !== 1) return;
239
+ const target = t;
240
+ if (target.closest(`[data-dialog-open="${this.view.CSS.escape(name)}"]`)) this.requestOpen();
241
+ else if (target.closest(`[data-dialog-close="${this.view.CSS.escape(name)}"]`)) this.requestClose();
370
242
  };
371
- this.doc.addEventListener("click", this.#triggerListener);
243
+ this.#triggerDocument = this.doc;
244
+ this.#triggerDocument.addEventListener("click", this.#triggerListener);
372
245
  }
373
246
  #teardownTriggerListener() {
374
247
  if (this.#triggerListener) {
375
- this.doc.removeEventListener("click", this.#triggerListener);
248
+ this.#triggerDocument?.removeEventListener("click", this.#triggerListener);
249
+ this.#triggerDocument = void 0;
376
250
  this.#triggerListener = void 0;
377
251
  }
378
252
  }
@@ -1 +1 @@
1
- @layer base,anta,components,utilities;@layer anta.reset,anta.components,anta.theme;@layer anta.components{a-expander,details[data-anta]{--_expander-chevron: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24'%3e%3cpath stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m9 18 6-6-6-6'/%3e%3c/svg%3e")}a-expander{--expander-text: var(--text-2);--expander-text-hover: var(--text-1);--expander-bg-secondary: var(--bg-2);--expander-border-secondary: var(--border-5);--expander-bg-primary: var(--bg-4);--expander-border-primary: var(--border-4);--expander-bg: var(--expander-bg-secondary);--expander-border: var(--expander-border-secondary);--expander-bg-hover-lift: .01;--expander-bg-hover: oklch(from var(--expander-bg) calc(l + var(--expander-bg-hover-lift)) c h);--expander-gutter: 24px;--_expander-indicator-size: 16px;--_expander-indicator-edge: 6px;--_expander-indicator-gap: 2px;--_expander-indicator-stroke: 2px;--_expander-indicator-track: calc(var(--_expander-indicator-edge) + var(--_expander-indicator-size) + var(--_expander-indicator-gap));--_expander-indicator-start: calc(var(--expander-gutter) - var(--_expander-indicator-size) - var(--_expander-indicator-gap));--_expander-indicator-mask: var(--_expander-chevron);--_expander-skeleton-indicator-start: var(--_expander-indicator-start);--_expander-skeleton-indicator-end: auto;--_expander-skeleton-indicator-top: 50%;--_expander-skeleton-indicator-transform: translateY(-50%);--_expander-header-padding-block: 6px;--_expander-header-padding-end: 4px;--_expander-actions-gap: 2px;--_expander-actions-start: 8px;--_expander-actions-end: 4px;display:block;width:100%;box-sizing:border-box;border:1px solid var(--expander-border);border-radius:4px;color:var(--expander-text);background:var(--expander-bg);transition:background-color .1s ease}a-expander[indicator-placement=end]{--expander-gutter: 12px;--_expander-skeleton-indicator-start: auto;--_expander-skeleton-indicator-end: var(--_expander-indicator-edge);--_expander-skeleton-indicator-top: 8px;--_expander-skeleton-indicator-transform: rotate(90deg);--_expander-actions-end: var(--_expander-actions-gap)}a-expander[indicator=triangle]{--_expander-indicator-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M5 2.5 12 8l-7 5.5z'/%3E%3C/svg%3E")}a-expander[indicator=plus]{--_expander-indicator-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M7 2h2v12H7zM2 7h12v2H2z'/%3E%3C/svg%3E")}a-expander:not(:defined):has(>[slot=indicator]){--_expander-skeleton-indicator-display: none}a-expander[round]{border-radius:var(--expander-round, var(--_expander-round-radius, 999px));@supports (border-radius: attr(probe type(<length>),1px)){--expander-round: attr(round type(<length>))}}a-expander>span[slot=actions]{display:contents}a-expander:not(:defined) a-expander-details{display:none}a-expander:not(:defined)[state=open] a-expander-details,a-expander:not(:defined)[default-state=open] a-expander-details{display:block}a-expander:not(:defined) a-expander-summary{position:relative;padding:var(--_expander-header-padding-block) var(--_expander-header-padding-end) var(--_expander-header-padding-block) var(--expander-gutter)}a-expander:not(:defined) a-expander-summary:before{content:"";display:var(--_expander-skeleton-indicator-display, block);position:absolute;inset-inline-start:var(--_expander-skeleton-indicator-start);inset-inline-end:var(--_expander-skeleton-indicator-end);top:var(--_expander-skeleton-indicator-top);width:var(--_expander-indicator-size);height:var(--_expander-indicator-size);transform:var(--_expander-skeleton-indicator-transform);background-color:currentColor;-webkit-mask:var(--_expander-indicator-mask) center / contain no-repeat;mask:var(--_expander-indicator-mask) center / contain no-repeat;opacity:.6;pointer-events:none}a-expander:not(:defined)[indicator-placement=end] a-expander-summary{position:static;grid-column:1;padding-inline-start:var(--expander-gutter);padding-inline-end:var(--_expander-header-padding-end)}a-expander:not(:defined)>[slot=indicator]{display:grid;place-items:center;position:absolute;inset-inline-start:var(--_expander-indicator-start);top:8px;width:var(--_expander-indicator-size);height:var(--_expander-indicator-size);pointer-events:none}a-expander:not(:defined)[indicator-placement=end]>[slot=indicator]{inset-inline-start:auto;inset-inline-end:var(--_expander-indicator-edge)}a-expander:not(:defined)>[slot=indicator][data-when=open]{display:none}a-expander:not(:defined):is([state=open],[default-state=open])>[slot=indicator][data-when=open]{display:grid}a-expander:not(:defined):is([state=open],[default-state=open])>[slot=indicator][data-when=closed]{display:none}a-expander:not(:defined):is([state=open],[default-state=open])>[slot=indicator]:not([data-when]){transform:rotate(90deg)}a-expander:not(:defined)[indicator-placement=end]:is([state=open],[default-state=open])>[slot=indicator]:not([data-when]){transform:rotate(180deg)}a-expander:not(:defined)[indicator-placement=end]{grid-template-columns:minmax(0,1fr) auto var(--_expander-indicator-track)}a-expander:not(:defined){display:grid;position:relative;grid-template-columns:minmax(0,1fr) auto;align-items:center}a-expander:not(:defined) a-expander-summary{grid-column:1}a-expander:not(:defined)>[slot=actions]{grid-column:2;display:flex;align-items:center;gap:var(--_expander-actions-gap);flex-shrink:0;margin-inline-start:var(--_expander-actions-start);margin-inline-end:var(--_expander-actions-end)}a-expander:not(:defined) a-expander-details{grid-column:1 / -1}a-expander-summary{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:15px;line-height:20px;font-weight:584.62;letter-spacing:0;text-decoration-line:var(--_summary-underline, none);text-decoration-style:dotted;text-decoration-color:color-mix(in oklch,currentColor 75%,transparent);text-decoration-thickness:1px;text-underline-offset:3px;transition:color .15s ease}a-expander[level="1"] a-expander-summary{font-size:28px;line-height:32px}a-expander[level="2"] a-expander-summary{font-size:24px;line-height:28px}a-expander[level="3"] a-expander-summary{font-size:20px;line-height:24px}a-expander[level="4"] a-expander-summary{font-size:17px;line-height:20px}a-expander[level="6"] a-expander-summary{font-size:13px;line-height:16px}a-expander-details{display:block;padding:2px 4px 6px var(--expander-gutter);line-height:20px;overflow:auto}a-expander[indicator-placement=end] a-expander-details{padding-inline-start:var(--expander-gutter)}a-expander[priority=tertiary][outdent] a-expander-details{padding-inline-start:4px;margin-inline-start:-4px}a-expander[priority=primary]{--expander-bg: var(--expander-bg-primary);--expander-border: var(--expander-border-primary)}a-expander[priority=tertiary]{--expander-bg: transparent;--expander-border: transparent}a-expander:not([disabled]):not(:state(open)):hover{background:var(--expander-bg-hover)}a-expander:not([disabled]):not(:state(open)):active{background:var(--expander-bg)}a-expander[priority=tertiary][outdent]{--expander-gutter: 0px}a-expander[tone=brand]{--expander-text: var(--text-2-brand);--expander-text-hover: var(--text-1-brand);--expander-bg-secondary: var(--bg-2-brand);--expander-border-secondary: var(--border-5-brand);--expander-bg-primary: var(--bg-4-brand);--expander-border-primary: var(--border-4-brand)}a-expander[tone=info]{--expander-text: var(--text-2-info);--expander-text-hover: var(--text-1-info);--expander-bg-secondary: var(--bg-2-info);--expander-border-secondary: var(--border-5-info);--expander-bg-primary: var(--bg-4-info);--expander-border-primary: var(--border-4-info)}a-expander[tone=success]{--expander-text: var(--text-2-success);--expander-text-hover: var(--text-1-success);--expander-bg-secondary: var(--bg-2-success);--expander-border-secondary: var(--border-5-success);--expander-bg-primary: var(--bg-4-success);--expander-border-primary: var(--border-4-success)}a-expander[tone=warning]{--expander-text: var(--text-2-warning);--expander-text-hover: var(--text-1-warning);--expander-bg-secondary: var(--bg-2-warning);--expander-border-secondary: var(--border-5-warning);--expander-bg-primary: var(--bg-4-warning);--expander-border-primary: var(--border-4-warning)}a-expander[tone=critical]{--expander-text: var(--text-2-critical);--expander-text-hover: var(--text-1-critical);--expander-bg-secondary: var(--bg-2-critical);--expander-border-secondary: var(--border-5-critical);--expander-bg-primary: var(--bg-4-critical);--expander-border-primary: var(--border-4-critical)}a-expander[tone]:not([tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]){--expander-tone-source: currentColor;--expander-text: light-dark(oklch(from var(--expander-tone-source) .5 .125 h), oklch(from var(--expander-tone-source) .77 .11 h));--expander-text-hover: light-dark(oklch(from var(--expander-tone-source) .4 .11 h), oklch(from var(--expander-tone-source) .85 .1 h));--expander-bg-secondary: light-dark(oklch(from var(--expander-tone-source) .99 .004 h), oklch(from var(--expander-tone-source) .13 .02 h));--expander-border-secondary: light-dark(oklch(from var(--expander-tone-source) .935 .028 h), oklch(from var(--expander-tone-source) .21 .045 h));--expander-bg-primary: light-dark(oklch(from var(--expander-tone-source) .955 .02 h), oklch(from var(--expander-tone-source) .185 .05 h));--expander-border-primary: light-dark(oklch(from var(--expander-tone-source) .9 .04 h), oklch(from var(--expander-tone-source) .26 .06 h));@supports (color: attr(probe type(<color>),red)){--expander-tone-source: attr(tone type(<color>), currentColor)}}a-expander[disabled],a-expander[disabled][tone]{--expander-text: light-dark(#afa9b1, #635b65)}details[data-anta]{--native-expander-gutter: 24px;--native-expander-summary-padding-block: 6px;--native-expander-summary-font-size: 15px;--native-expander-summary-line-height: 20px;--native-expander-chevron-size: 16px;--native-expander-text: var(--text-2);--native-expander-text-hover: var(--text-1);--native-expander-bg-secondary: var(--bg-2);--native-expander-border-secondary: var(--border-5);--native-expander-bg-primary: var(--bg-4);--native-expander-border-primary: var(--border-4);--native-expander-round-size: 16px;--native-expander-round: 4px;--native-expander-bg: transparent;--native-expander-border: transparent;display:block;inline-size:100%;box-sizing:border-box;border:0 solid var(--native-expander-border);border-radius:var(--native-expander-round);color:var(--native-expander-text);background:var(--native-expander-bg);font-family:var(--sans-serif);font-size:15px;line-height:var(--native-expander-summary-line-height);transition:background-color .1s ease}details[data-anta][priority=secondary]{--native-expander-bg: var(--native-expander-bg-secondary);--native-expander-border: var(--native-expander-border-secondary);border-width:1px}details[data-anta][priority=primary]{--native-expander-bg: var(--native-expander-bg-primary);--native-expander-border: var(--native-expander-border-primary);border-width:1px}details[data-anta][level="1"]{--native-expander-summary-font-size: 28px;--native-expander-summary-line-height: 32px;--native-expander-round-size: 22px}details[data-anta][level="2"]{--native-expander-summary-font-size: 24px;--native-expander-summary-line-height: 28px;--native-expander-round-size: 20px}details[data-anta][level="3"]{--native-expander-summary-font-size: 20px;--native-expander-summary-line-height: 24px;--native-expander-round-size: 18px}details[data-anta][level="4"]{--native-expander-summary-font-size: 17px;--native-expander-summary-line-height: 20px}details[data-anta][level="6"]{--native-expander-summary-font-size: 13px;--native-expander-summary-line-height: 16px;--native-expander-round-size: 14px}details[data-anta][round]{--native-expander-round: var(--native-expander-round-size)}details[data-anta][round]:not([round=""]){--native-expander-round: var(--native-expander-round-size);@supports (border-radius: attr(probe type(<length>),1px)){--native-expander-round: attr(round type(<length>), var(--native-expander-round-size))}}details[data-anta][priority=tertiary][outdent]{--native-expander-gutter: 0px}details[data-anta][tone=brand]{--native-expander-text: var(--text-2-brand);--native-expander-text-hover: var(--text-1-brand);--native-expander-bg-secondary: var(--bg-2-brand);--native-expander-border-secondary: var(--border-5-brand);--native-expander-bg-primary: var(--bg-4-brand);--native-expander-border-primary: var(--border-4-brand)}details[data-anta][tone=info]{--native-expander-text: var(--text-2-info);--native-expander-text-hover: var(--text-1-info);--native-expander-bg-secondary: var(--bg-2-info);--native-expander-border-secondary: var(--border-5-info);--native-expander-bg-primary: var(--bg-4-info);--native-expander-border-primary: var(--border-4-info)}details[data-anta][tone=success]{--native-expander-text: var(--text-2-success);--native-expander-text-hover: var(--text-1-success);--native-expander-bg-secondary: var(--bg-2-success);--native-expander-border-secondary: var(--border-5-success);--native-expander-bg-primary: var(--bg-4-success);--native-expander-border-primary: var(--border-4-success)}details[data-anta][tone=warning]{--native-expander-text: var(--text-2-warning);--native-expander-text-hover: var(--text-1-warning);--native-expander-bg-secondary: var(--bg-2-warning);--native-expander-border-secondary: var(--border-5-warning);--native-expander-bg-primary: var(--bg-4-warning);--native-expander-border-primary: var(--border-4-warning)}details[data-anta][tone=critical]{--native-expander-text: var(--text-2-critical);--native-expander-text-hover: var(--text-1-critical);--native-expander-bg-secondary: var(--bg-2-critical);--native-expander-border-secondary: var(--border-5-critical);--native-expander-bg-primary: var(--bg-4-critical);--native-expander-border-primary: var(--border-4-critical)}details[data-anta][tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]){--native-expander-tone-source: currentColor;--native-expander-text: light-dark(oklch(from var(--native-expander-tone-source) .5 .125 h), oklch(from var(--native-expander-tone-source) .77 .11 h));--native-expander-text-hover: light-dark(oklch(from var(--native-expander-tone-source) .4 .11 h), oklch(from var(--native-expander-tone-source) .85 .1 h));--native-expander-bg-secondary: light-dark(oklch(from var(--native-expander-tone-source) .99 .004 h), oklch(from var(--native-expander-tone-source) .13 .02 h));--native-expander-border-secondary: light-dark(oklch(from var(--native-expander-tone-source) .935 .028 h), oklch(from var(--native-expander-tone-source) .21 .045 h));--native-expander-bg-primary: light-dark(oklch(from var(--native-expander-tone-source) .955 .02 h), oklch(from var(--native-expander-tone-source) .185 .05 h));--native-expander-border-primary: light-dark(oklch(from var(--native-expander-tone-source) .9 .04 h), oklch(from var(--native-expander-tone-source) .26 .06 h));@supports (color: attr(probe type(<color>),red)){--native-expander-tone-source: attr(tone type(<color>), currentColor)}}details[data-anta]>summary{position:relative;box-sizing:border-box;display:block;min-width:0;padding:var(--native-expander-summary-padding-block) 4px var(--native-expander-summary-padding-block) var(--native-expander-gutter);color:inherit;cursor:pointer;font:inherit;font-variation-settings:inherit;font-size:var(--native-expander-summary-font-size);line-height:var(--native-expander-summary-line-height);font-weight:584.62;letter-spacing:0;list-style:none;text-decoration-line:none;transition:color .15s ease}details[data-anta]>summary::-webkit-details-marker{display:none}details[data-anta]>summary::marker{content:""}details[data-anta]>summary:before{content:"";position:absolute;left:calc(var(--native-expander-gutter) - var(--native-expander-chevron-size) - 2px);top:var(--native-expander-summary-padding-block);width:var(--native-expander-chevron-size);height:var(--native-expander-summary-line-height);background-color:currentColor;-webkit-mask:var(--_expander-chevron) center / var(--native-expander-chevron-size) no-repeat;mask:var(--_expander-chevron) center / var(--native-expander-chevron-size) no-repeat;opacity:.6;transform:rotate(0);transition:transform .15s ease,opacity .15s ease,background-color .15s ease}details[data-anta][open]>summary:before{opacity:1;transform:rotate(90deg)}details[data-anta]:is([priority=primary],[priority=secondary]):not([open]):hover{background:oklch(from var(--native-expander-bg) calc(l + .01) c h)}details[data-anta]:is([priority=primary],[priority=secondary]):not([open]):active{background:var(--native-expander-bg)}details[data-anta]>summary:hover{color:var(--native-expander-text-hover);text-decoration-line:underline;text-decoration-style:dotted;text-decoration-color:color-mix(in oklch,currentColor 75%,transparent);text-decoration-thickness:1px;text-underline-offset:3px}details[data-anta]>summary:hover:before{opacity:1}details[data-anta]>summary:active{color:var(--native-expander-text)}details[data-anta]>summary:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}details[data-anta]>:not(summary){display:block;padding:2px 4px 6px var(--native-expander-gutter);line-height:20px}@media(forced-colors:active){:is(a-expander,details[data-anta]){border-color:CanvasText}:is(a-expander,details[data-anta]):not([priority=primary],[priority=tertiary]){border-style:dashed}:is(a-expander,details[data-anta])[priority=tertiary]{border-color:Canvas}a-expander::part(indicator){forced-color-adjust:none;color:CanvasText}a-expander[disabled]::part(indicator){color:GrayText}a-expander:not(:defined) a-expander-summary:before,details[data-anta]>summary:before{forced-color-adjust:none;background-color:CanvasText}a-expander:not(:defined)[disabled] a-expander-summary:before{background-color:GrayText}}}a-expander-details>p:last-child,a-expander-details>:not([slot])>p:last-child,details[data-anta]>p:last-child,details[data-anta]>:not(summary)>p:last-child{margin-block-end:0}
1
+ @layer base,anta,components,utilities;@layer anta.reset,anta.components,anta.theme;@layer anta.components{a-expander::part(header){display:flex;align-items:stretch}a-expander:has(>:is(a-expander-summary,a-expander-title)~a-expander-indicator)::part(header){display:grid;grid-template-columns:minmax(0,1fr) auto var(--_expander-indicator-track)}a-expander::part(actions){display:none}a-expander:has(>a-expander-actions:not(:empty))::part(actions){display:flex;align-items:center;gap:var(--_expander-actions-gap);flex-shrink:0;margin-inline:var(--_expander-actions-start) var(--_expander-actions-end)}a-expander:has(>:is(a-expander-summary,a-expander-title)~a-expander-indicator)::part(actions){grid-column:2;grid-row:1;z-index:1}a-expander::part(summary){appearance:none;background:none;border:none;margin:0;position:relative;padding:var(--_expander-header-padding-block) var(--_expander-header-padding-end) var(--_expander-header-padding-block) var(--expander-gutter);flex:1;min-width:0;font:inherit;font-variation-settings:inherit;color:inherit;text-align:left;display:flex;align-items:center;gap:0;cursor:pointer;user-select:text;border-radius:2px;outline:none}a-expander:has(>:is(a-expander-summary,a-expander-title)~a-expander-indicator)::part(summary){grid-column:1 / -1;grid-row:1;display:grid;grid-template-columns:subgrid;padding:var(--_expander-header-padding-block) 0}a-expander:has(>:is(a-expander-summary,a-expander-title)~a-expander-indicator)::part(title){grid-column:1;display:block;min-width:0;margin-inline-start:var(--expander-gutter)}a-expander::part(summary):focus-visible{outline:1px solid var(--focus-ring);outline-offset:0}a-expander::part(summary):enabled:hover{color:var(--expander-text-hover);--_expander-indicator-opacity: 1}a-expander[priority=tertiary]::part(summary):enabled:hover{--_summary-underline: underline}a-expander::part(summary):enabled:active{color:var(--expander-text)}a-expander::part(summary):disabled{cursor:default}a-expander:not(:state(open))::part(summary):enabled:active{--_expander-indicator-opacity: .6}a-expander::part(indicator){position:absolute;inset-inline-start:var(--_expander-indicator-start);top:50%;width:var(--_expander-indicator-size);height:var(--_expander-indicator-size);pointer-events:none;opacity:var(--_expander-indicator-opacity, .6);transform:translateY(-50%) rotate(var(--_expander-indicator-angle));transition:transform .15s ease,opacity .15s ease}a-expander::part(indicator-content){display:grid;place-items:center;width:100%;height:100%}a-expander:has(>:is(a-expander-summary,a-expander-title)~a-expander-indicator)::part(indicator){position:static;grid-column:3;grid-row:1;justify-self:end;align-self:center;margin-inline-end:var(--_expander-indicator-edge);transform:rotate(var(--_expander-indicator-angle))}a-expander::part(region){display:grid;grid-template-rows:0fr;grid-template-columns:minmax(0,1fr)}a-expander:state(open)::part(region){grid-template-rows:1fr}a-expander[priority=tertiary][outdent]::part(header),a-expander[priority=tertiary][outdent]::part(region){margin-inline-start:-1px}a-expander:not(:defined)[priority=tertiary][outdent]>:is(a-expander-summary,a-expander-title){margin-inline-start:-1px}a-expander:not(:defined)[priority=tertiary][outdent]>a-expander-details{margin-inline-start:-5px}a-expander::part(content){display:block;min-height:0;overflow:var(--_expander-content-overflow)}@keyframes anta-expander-unclip{0%{--_expander-content-overflow: clip}to{--_expander-content-overflow: visible}}@media(prefers-reduced-motion:no-preference){a-expander::part(region){transition:grid-template-rows .2s ease}a-expander:state(open){animation:anta-expander-unclip .2s step-end}}a-expander,details[data-anta]{--_expander-chevron: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24'%3e%3cpath stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m9 18 6-6-6-6'/%3e%3c/svg%3e")}a-expander{--_expander-content-overflow: clip;--_expander-indicator-opacity: .6;--_summary-underline: none;--expander-text: var(--text-2);--expander-text-hover: var(--text-1);--expander-bg-secondary: var(--bg-2);--expander-border-secondary: var(--border-5);--expander-bg-primary: var(--bg-4);--expander-border-primary: var(--border-4);--expander-bg: var(--expander-bg-secondary);--expander-border: var(--expander-border-secondary);--expander-bg-hover-lift: .01;--expander-bg-hover: oklch(from var(--expander-bg) calc(l + var(--expander-bg-hover-lift)) c h);--expander-gutter: 24px;--_expander-indicator-size: 16px;--_expander-indicator-edge: 6px;--_expander-indicator-gap: 2px;--_expander-indicator-stroke: 2px;--_expander-indicator-track: calc(var(--_expander-indicator-edge) + var(--_expander-indicator-size) + var(--_expander-indicator-gap));--_expander-indicator-start: calc(var(--expander-gutter) - var(--_expander-indicator-size) - var(--_expander-indicator-gap));--_expander-open: 0;--_expander-indicator-closed-angle: 0deg;--_expander-indicator-open-angle: 90deg;--_expander-indicator-angle: calc(var(--_expander-indicator-closed-angle) + (var(--_expander-indicator-open-angle) - var(--_expander-indicator-closed-angle)) * var(--_expander-open));--_expander-header-padding-block: 6px;--_expander-header-padding-end: 4px;--_expander-actions-gap: 2px;--_expander-actions-start: 8px;--_expander-actions-end: 4px;display:block;width:100%;box-sizing:border-box;border:1px solid var(--expander-border);border-radius:4px;color:var(--expander-text);background:var(--expander-bg);transition:background-color .1s ease}a-expander:has(>:is(a-expander-summary,a-expander-title)~a-expander-indicator){--expander-gutter: 12px;--_expander-actions-end: var(--_expander-actions-gap);--_expander-indicator-open-angle: 180deg}a-expander:has(>:is(a-expander-summary,a-expander-title)~a-expander-indicator:is([shape=chevron],[shape=triangle])){--_expander-indicator-closed-angle: 90deg;--_expander-indicator-open-angle: 270deg}a-expander:has(>a-expander-indicator:is([shape=plus],[data-when])){--_expander-indicator-closed-angle: 0deg;--_expander-indicator-open-angle: 0deg}a-expander:is(:state(open),:not(:defined)[state=open],:not(:defined):not([state])[default-state=open]){--_expander-content-overflow: visible;--_expander-open: 1;--_expander-indicator-opacity: 1}a-expander[round]{border-radius:var(--expander-round, 1rem);@supports (border-radius: attr(probe type(<length>),1px)){--expander-round: attr(round type(<length>))}}a-expander>a-expander-actions,a-expander>a-expander-title{display:contents}a-expander>a-expander-indicator{display:grid;place-items:center;position:relative;width:var(--_expander-indicator-size);height:var(--_expander-indicator-size);pointer-events:none}a-expander>a-expander-indicator[shape]:before{content:"";position:absolute;inset:0;background:currentColor;mask:var(--_expander-chevron) center / contain no-repeat}a-expander>a-expander-indicator[shape=triangle]:before{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M5 2.5 12 8l-7 5.5z'/%3E%3C/svg%3E")}a-expander>a-expander-indicator[shape=plus]:before,a-expander>a-expander-indicator[shape=plus]:after{content:"";position:absolute;inset:auto;background:currentColor;mask:none;border-radius:calc(var(--_expander-indicator-stroke) / 2)}a-expander>a-expander-indicator[shape=plus]:before{width:calc(var(--_expander-indicator-size) - 2 * var(--_expander-indicator-stroke));height:var(--_expander-indicator-stroke);left:var(--_expander-indicator-stroke);top:calc((var(--_expander-indicator-size) - var(--_expander-indicator-stroke)) / 2)}a-expander>a-expander-indicator[shape=plus]:after{width:var(--_expander-indicator-stroke);height:calc(var(--_expander-indicator-size) - 2 * var(--_expander-indicator-stroke));left:calc((var(--_expander-indicator-size) - var(--_expander-indicator-stroke)) / 2);top:var(--_expander-indicator-stroke);transform:scaleY(calc(1 - var(--_expander-open)));transition:transform .15s ease}@media(prefers-reduced-motion:reduce){a-expander::part(indicator),a-expander>a-expander-indicator[shape=plus]:after{transition:none}}a-expander:not(:defined){display:grid;position:relative;grid-template-columns:minmax(0,1fr) auto;align-items:stretch}a-expander:not(:defined):has(>:is(a-expander-summary,a-expander-title)~a-expander-indicator){grid-template-columns:minmax(0,1fr) auto var(--_expander-indicator-track)}a-expander:not(:defined)>:is(a-expander-summary,a-expander-title){position:relative;display:block;grid-column:1;grid-row:1;align-self:center;padding:var(--_expander-header-padding-block) var(--_expander-header-padding-end) var(--_expander-header-padding-block) var(--expander-gutter)}a-expander:not(:defined):has(>:is(a-expander-summary,a-expander-title)~a-expander-indicator)>:is(a-expander-summary,a-expander-title){padding-inline:var(--expander-gutter) 0;text-align:left}a-expander:not(:defined)>a-expander-actions{grid-column:2;grid-row:1;display:flex;align-items:center;gap:var(--_expander-actions-gap);margin-inline:var(--_expander-actions-start) var(--_expander-actions-end)}a-expander:not(:defined)>a-expander-actions:empty{display:none}a-expander:not(:defined)>a-expander-indicator{grid-column:1;grid-row:1;align-self:center;justify-self:start;margin-inline-start:var(--_expander-indicator-start);width:var(--_expander-indicator-size);height:var(--_expander-indicator-size);transform:rotate(var(--_expander-indicator-angle));opacity:var(--_expander-indicator-opacity)}a-expander:not(:defined):has(>:is(a-expander-summary,a-expander-title)~a-expander-indicator)>a-expander-indicator{grid-column:3;justify-self:end;margin-inline:0 var(--_expander-indicator-edge)}a-expander:not(:defined)>a-expander-details{grid-column:1 / -1;display:none}a-expander:not(:defined)[state=open]>a-expander-details,a-expander:not(:defined):not([state])[default-state=open]>a-expander-details{display:block}a-expander>a-expander-indicator[data-when=open]{display:none}a-expander:is(:state(open),:not(:defined)[state=open],:not(:defined):not([state])[default-state=open])>a-expander-indicator[data-when=open]{display:grid}a-expander:is(:state(open),:not(:defined)[state=open],:not(:defined):not([state])[default-state=open])>a-expander-indicator[data-when=closed]{display:none}a-expander-summary{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:15px;line-height:20px;font-weight:584.62;letter-spacing:0;text-decoration-line:var(--_summary-underline, none);text-decoration-style:dotted;text-decoration-color:color-mix(in oklch,currentColor 75%,transparent);text-decoration-thickness:1px;text-underline-offset:3px;transition:color .15s ease}a-expander-summary[level="1"]{font-size:28px;line-height:32px}a-expander-summary[level="2"]{font-size:24px;line-height:28px}a-expander-summary[level="3"]{font-size:20px;line-height:24px}a-expander-summary[level="4"]{font-size:17px;line-height:22px}a-expander-summary[level="6"]{font-size:13px;line-height:16px}a-expander-details{display:block;padding:2px 4px 6px var(--expander-gutter);line-height:20px;overflow:auto}a-expander:has(>:is(a-expander-summary,a-expander-title)~a-expander-indicator)>a-expander-details{padding-inline-start:var(--expander-gutter)}a-expander[priority=tertiary][outdent]>a-expander-details{padding-inline-start:4px;margin-inline-start:-4px}a-expander[priority=primary]{--expander-bg: var(--expander-bg-primary);--expander-border: var(--expander-border-primary)}a-expander[priority=tertiary]{--expander-bg: transparent;--expander-border: transparent}a-expander:not([disabled]):not(:state(open)):hover{background:var(--expander-bg-hover)}a-expander:not([disabled]):not(:state(open)):active{background:var(--expander-bg)}a-expander[priority=tertiary][outdent]{--expander-gutter: 0px}a-expander[tone=brand]{--expander-text: var(--text-2-brand);--expander-text-hover: var(--text-1-brand);--expander-bg-secondary: var(--bg-2-brand);--expander-border-secondary: var(--border-5-brand);--expander-bg-primary: var(--bg-4-brand);--expander-border-primary: var(--border-4-brand)}a-expander[tone=info]{--expander-text: var(--text-2-info);--expander-text-hover: var(--text-1-info);--expander-bg-secondary: var(--bg-2-info);--expander-border-secondary: var(--border-5-info);--expander-bg-primary: var(--bg-4-info);--expander-border-primary: var(--border-4-info)}a-expander[tone=success]{--expander-text: var(--text-2-success);--expander-text-hover: var(--text-1-success);--expander-bg-secondary: var(--bg-2-success);--expander-border-secondary: var(--border-5-success);--expander-bg-primary: var(--bg-4-success);--expander-border-primary: var(--border-4-success)}a-expander[tone=warning]{--expander-text: var(--text-2-warning);--expander-text-hover: var(--text-1-warning);--expander-bg-secondary: var(--bg-2-warning);--expander-border-secondary: var(--border-5-warning);--expander-bg-primary: var(--bg-4-warning);--expander-border-primary: var(--border-4-warning)}a-expander[tone=critical]{--expander-text: var(--text-2-critical);--expander-text-hover: var(--text-1-critical);--expander-bg-secondary: var(--bg-2-critical);--expander-border-secondary: var(--border-5-critical);--expander-bg-primary: var(--bg-4-critical);--expander-border-primary: var(--border-4-critical)}a-expander[tone]:not([tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]){--expander-tone-source: currentColor;--expander-text: light-dark(oklch(from var(--expander-tone-source) .5 .125 h), oklch(from var(--expander-tone-source) .77 .11 h));--expander-text-hover: light-dark(oklch(from var(--expander-tone-source) .4 .11 h), oklch(from var(--expander-tone-source) .85 .1 h));--expander-bg-secondary: light-dark(oklch(from var(--expander-tone-source) .99 .004 h), oklch(from var(--expander-tone-source) .13 .02 h));--expander-border-secondary: light-dark(oklch(from var(--expander-tone-source) .935 .028 h), oklch(from var(--expander-tone-source) .21 .045 h));--expander-bg-primary: light-dark(oklch(from var(--expander-tone-source) .955 .02 h), oklch(from var(--expander-tone-source) .185 .05 h));--expander-border-primary: light-dark(oklch(from var(--expander-tone-source) .9 .04 h), oklch(from var(--expander-tone-source) .26 .06 h));@supports (color: attr(probe type(<color>),red)){--expander-tone-source: attr(tone type(<color>), currentColor)}}a-expander[disabled],a-expander[disabled][tone]{--expander-text: light-dark(#afa9b1, #635b65)}details[data-anta]{--native-expander-gutter: 24px;--native-expander-summary-padding-block: 6px;--native-expander-summary-font-size: 15px;--native-expander-summary-line-height: 20px;--native-expander-chevron-size: 16px;--native-expander-text: var(--text-2);--native-expander-text-hover: var(--text-1);--native-expander-bg-secondary: var(--bg-2);--native-expander-border-secondary: var(--border-5);--native-expander-bg-primary: var(--bg-4);--native-expander-border-primary: var(--border-4);--native-expander-round-size: 1rem;--native-expander-round: 4px;--native-expander-bg: transparent;--native-expander-border: transparent;display:block;inline-size:100%;box-sizing:border-box;border:0 solid var(--native-expander-border);border-radius:var(--native-expander-round);color:var(--native-expander-text);background:var(--native-expander-bg);font-family:var(--sans-serif);font-size:15px;line-height:var(--native-expander-summary-line-height);transition:background-color .1s ease}details[data-anta][priority=secondary]{--native-expander-bg: var(--native-expander-bg-secondary);--native-expander-border: var(--native-expander-border-secondary);border-width:1px}details[data-anta][priority=primary]{--native-expander-bg: var(--native-expander-bg-primary);--native-expander-border: var(--native-expander-border-primary);border-width:1px}details[data-anta][level="1"]{--native-expander-summary-font-size: 28px;--native-expander-summary-line-height: 32px}details[data-anta][level="2"]{--native-expander-summary-font-size: 24px;--native-expander-summary-line-height: 28px}details[data-anta][level="3"]{--native-expander-summary-font-size: 20px;--native-expander-summary-line-height: 24px}details[data-anta][level="4"]{--native-expander-summary-font-size: 17px;--native-expander-summary-line-height: 20px}details[data-anta][level="6"]{--native-expander-summary-font-size: 13px;--native-expander-summary-line-height: 16px}details[data-anta][round]{--native-expander-round: var(--native-expander-round-size)}details[data-anta][round]:not([round=""]){--native-expander-round: var(--native-expander-round-size);@supports (border-radius: attr(probe type(<length>),1px)){--native-expander-round: attr(round type(<length>), var(--native-expander-round-size))}}details[data-anta][priority=tertiary][outdent]{--native-expander-gutter: 0px}details[data-anta][tone=brand]{--native-expander-text: var(--text-2-brand);--native-expander-text-hover: var(--text-1-brand);--native-expander-bg-secondary: var(--bg-2-brand);--native-expander-border-secondary: var(--border-5-brand);--native-expander-bg-primary: var(--bg-4-brand);--native-expander-border-primary: var(--border-4-brand)}details[data-anta][tone=info]{--native-expander-text: var(--text-2-info);--native-expander-text-hover: var(--text-1-info);--native-expander-bg-secondary: var(--bg-2-info);--native-expander-border-secondary: var(--border-5-info);--native-expander-bg-primary: var(--bg-4-info);--native-expander-border-primary: var(--border-4-info)}details[data-anta][tone=success]{--native-expander-text: var(--text-2-success);--native-expander-text-hover: var(--text-1-success);--native-expander-bg-secondary: var(--bg-2-success);--native-expander-border-secondary: var(--border-5-success);--native-expander-bg-primary: var(--bg-4-success);--native-expander-border-primary: var(--border-4-success)}details[data-anta][tone=warning]{--native-expander-text: var(--text-2-warning);--native-expander-text-hover: var(--text-1-warning);--native-expander-bg-secondary: var(--bg-2-warning);--native-expander-border-secondary: var(--border-5-warning);--native-expander-bg-primary: var(--bg-4-warning);--native-expander-border-primary: var(--border-4-warning)}details[data-anta][tone=critical]{--native-expander-text: var(--text-2-critical);--native-expander-text-hover: var(--text-1-critical);--native-expander-bg-secondary: var(--bg-2-critical);--native-expander-border-secondary: var(--border-5-critical);--native-expander-bg-primary: var(--bg-4-critical);--native-expander-border-primary: var(--border-4-critical)}details[data-anta][tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]){--native-expander-tone-source: currentColor;--native-expander-text: light-dark(oklch(from var(--native-expander-tone-source) .5 .125 h), oklch(from var(--native-expander-tone-source) .77 .11 h));--native-expander-text-hover: light-dark(oklch(from var(--native-expander-tone-source) .4 .11 h), oklch(from var(--native-expander-tone-source) .85 .1 h));--native-expander-bg-secondary: light-dark(oklch(from var(--native-expander-tone-source) .99 .004 h), oklch(from var(--native-expander-tone-source) .13 .02 h));--native-expander-border-secondary: light-dark(oklch(from var(--native-expander-tone-source) .935 .028 h), oklch(from var(--native-expander-tone-source) .21 .045 h));--native-expander-bg-primary: light-dark(oklch(from var(--native-expander-tone-source) .955 .02 h), oklch(from var(--native-expander-tone-source) .185 .05 h));--native-expander-border-primary: light-dark(oklch(from var(--native-expander-tone-source) .9 .04 h), oklch(from var(--native-expander-tone-source) .26 .06 h));@supports (color: attr(probe type(<color>),red)){--native-expander-tone-source: attr(tone type(<color>), currentColor)}}details[data-anta]>summary{position:relative;box-sizing:border-box;display:block;min-width:0;padding:var(--native-expander-summary-padding-block) 4px var(--native-expander-summary-padding-block) var(--native-expander-gutter);color:inherit;cursor:pointer;font:inherit;font-variation-settings:inherit;font-size:var(--native-expander-summary-font-size);line-height:var(--native-expander-summary-line-height);font-weight:584.62;letter-spacing:0;list-style:none;text-decoration-line:none;transition:color .15s ease}details[data-anta]>summary::-webkit-details-marker{display:none}details[data-anta]>summary::marker{content:""}details[data-anta]>summary:before{content:"";position:absolute;left:calc(var(--native-expander-gutter) - var(--native-expander-chevron-size) - 2px);top:var(--native-expander-summary-padding-block);width:var(--native-expander-chevron-size);height:var(--native-expander-summary-line-height);background-color:currentColor;-webkit-mask:var(--_expander-chevron) center / var(--native-expander-chevron-size) no-repeat;mask:var(--_expander-chevron) center / var(--native-expander-chevron-size) no-repeat;opacity:.6;transform:rotate(0);transition:transform .15s ease,opacity .15s ease,background-color .15s ease}details[data-anta][open]>summary:before{opacity:1;transform:rotate(90deg)}details[data-anta]:is([priority=primary],[priority=secondary]):not([open]):hover{background:oklch(from var(--native-expander-bg) calc(l + .01) c h)}details[data-anta]:is([priority=primary],[priority=secondary]):not([open]):active{background:var(--native-expander-bg)}details[data-anta]>summary:hover{color:var(--native-expander-text-hover);text-decoration-line:underline;text-decoration-style:dotted;text-decoration-color:color-mix(in oklch,currentColor 75%,transparent);text-decoration-thickness:1px;text-underline-offset:3px}details[data-anta]>summary:hover:before{opacity:1}details[data-anta]>summary:active{color:var(--native-expander-text)}details[data-anta]>summary:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}details[data-anta]>:not(summary){display:block;padding:2px 4px 6px var(--native-expander-gutter);line-height:20px}@media(forced-colors:active){:is(a-expander,details[data-anta]){border-color:CanvasText}:is(a-expander,details[data-anta]):not([priority=primary],[priority=tertiary]){border-style:dashed}:is(a-expander,details[data-anta])[priority=tertiary]{border-color:Canvas}a-expander::part(indicator){forced-color-adjust:none;color:CanvasText}a-expander[disabled]::part(indicator){color:GrayText}a-expander>a-expander-indicator{forced-color-adjust:none;color:CanvasText}details[data-anta]>summary:before{forced-color-adjust:none;background-color:CanvasText}a-expander[disabled]>a-expander-indicator{color:GrayText}}}a-expander-details>p:last-child,a-expander-details>*>p:last-child,details[data-anta]>p:last-child,details[data-anta]>:not(summary)>p:last-child{margin-block-end:0}
@@ -1,40 +1,14 @@
1
1
  import { HTMLElementBase } from '../anta_helpers';
2
2
  import './a-expander.css';
3
+ /** Disclosure with authored regions and an owned native button and inert body.
4
+ * Manual projection changes neither authored attributes nor children. All
5
+ * default styling is external; state requests remain cancelable. */
3
6
  export declare class AExpanderElement extends HTMLElementBase {
4
7
  #private;
5
8
  static observedAttributes: string[];
6
- private summary;
7
- private titleSlot;
8
- private region;
9
- private header;
10
- private roundStyle;
11
- private roundObserver?;
12
- private internals?;
13
9
  constructor();
14
- /** Publish HALF the folded (header + host borders) height as
15
- * `--_expander-round-radius` on `:host`, for `a-expander[round]` to consume.
16
- * Reads layout only; writes only the shadow sheet — no host mutation. */
17
- /** A `round` attribute carrying a length (`round="12px"`) is a fixed radius —
18
- * the CSS uses it directly and the measured pill is unused, so skip measuring.
19
- * (The wrapper's `round={12}` path sets an inline var + a bare `round=""`, so
20
- * it isn't caught here; the measurement runs but its var is simply overridden.) */
21
- private hasFixedRound;
22
- private measureRoundRadius;
23
- private startRoundObserver;
24
- private stopRoundObserver;
25
10
  connectedCallback(): void;
26
11
  disconnectedCallback(): void;
27
- attributeChangedCallback(name: string): void;
28
- private syncDisabled;
29
- /** Apply state to the shadow internals (idempotent; reads the host, writes
30
- * only the shadow). `aria-expanded` is both the a11y signal and the CSS
31
- * state hook; `inert` keeps collapsed content out of the tab order and the
32
- * accessibility tree. */
33
- private applyState;
34
- /** Compute the requested next state, announce it (cancelable, *before*
35
- * applying), then — uncontrolled only, and only if not vetoed — apply it.
36
- * Controlled: never self-apply; the consumer answers via the `state`
37
- * attribute. See STATEFUL-COMPONENTS.md. */
38
- private onSummaryClick;
12
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
39
13
  }
40
14
  export declare function register_a_expander(): void;