@editora/ui-core 0.1.21 → 0.1.22

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 (274) hide show
  1. package/dist/accordion.cjs.js +3 -3
  2. package/dist/accordion.esm.js +3 -3
  3. package/dist/alert-dialog.cjs.js +32 -32
  4. package/dist/alert-dialog.esm.js +95 -75
  5. package/dist/alert.cjs.js +6 -6
  6. package/dist/alert.esm.js +6 -6
  7. package/dist/animated-list.cjs.js +4 -4
  8. package/dist/animated-list.esm.js +4 -4
  9. package/dist/animated-text.cjs.js +4 -4
  10. package/dist/animated-text.esm.js +4 -4
  11. package/dist/app-header.cjs.js +3 -3
  12. package/dist/app-header.esm.js +3 -3
  13. package/dist/aspect-ratio.cjs.js +3 -3
  14. package/dist/aspect-ratio.esm.js +3 -3
  15. package/dist/avatar.cjs.js +14 -14
  16. package/dist/avatar.esm.js +31 -29
  17. package/dist/badge.cjs.js +4 -4
  18. package/dist/badge.esm.js +4 -4
  19. package/dist/block-controls.cjs.js +4 -4
  20. package/dist/block-controls.esm.js +4 -4
  21. package/dist/box.cjs.js +2 -2
  22. package/dist/box.esm.js +2 -2
  23. package/dist/breadcrumb.cjs.js +5 -5
  24. package/dist/breadcrumb.esm.js +5 -5
  25. package/dist/button.cjs.js +1 -1
  26. package/dist/button.esm.js +1 -1
  27. package/dist/{calendar-DLY4acgn.mjs → calendar-DbxYRdlv.mjs} +227 -183
  28. package/dist/{calendar-Dkof-FTK.js → calendar-Qa-cFOp3.js} +74 -35
  29. package/dist/calendar.cjs.js +1 -1
  30. package/dist/calendar.esm.js +1 -1
  31. package/dist/card.cjs.js +8 -8
  32. package/dist/card.esm.js +63 -20
  33. package/dist/chart.cjs.js +4 -4
  34. package/dist/chart.esm.js +6 -6
  35. package/dist/checkbox.cjs.js +2 -2
  36. package/dist/checkbox.esm.js +2 -2
  37. package/dist/collapsible.cjs.js +7 -7
  38. package/dist/collapsible.esm.js +7 -7
  39. package/dist/color-picker.cjs.js +30 -10
  40. package/dist/color-picker.esm.js +82 -60
  41. package/dist/combobox.cjs.js +29 -27
  42. package/dist/combobox.esm.js +51 -45
  43. package/dist/command.cjs.js +2 -2
  44. package/dist/command.esm.js +2 -2
  45. package/dist/components/ui-alert-dialog.d.ts +1 -0
  46. package/dist/components/ui-alert-dialog.d.ts.map +1 -1
  47. package/dist/components/ui-avatar.d.ts +1 -0
  48. package/dist/components/ui-avatar.d.ts.map +1 -1
  49. package/dist/components/ui-button.d.ts +1 -0
  50. package/dist/components/ui-button.d.ts.map +1 -1
  51. package/dist/components/ui-calendar.d.ts.map +1 -1
  52. package/dist/components/ui-card.d.ts +3 -0
  53. package/dist/components/ui-card.d.ts.map +1 -1
  54. package/dist/components/ui-checkbox.d.ts.map +1 -1
  55. package/dist/components/ui-color-picker.d.ts.map +1 -1
  56. package/dist/components/ui-combobox.d.ts.map +1 -1
  57. package/dist/components/ui-data-table.d.ts.map +1 -1
  58. package/dist/components/ui-date-field.d.ts.map +1 -1
  59. package/dist/components/ui-date-picker.d.ts.map +1 -1
  60. package/dist/components/ui-date-range-picker.d.ts.map +1 -1
  61. package/dist/components/ui-date-range-time-picker.d.ts.map +1 -1
  62. package/dist/components/ui-date-time-picker.d.ts.map +1 -1
  63. package/dist/components/ui-dock.d.ts +1 -0
  64. package/dist/components/ui-dock.d.ts.map +1 -1
  65. package/dist/components/ui-drawer.d.ts.map +1 -1
  66. package/dist/components/ui-dropdown.d.ts.map +1 -1
  67. package/dist/components/ui-field.d.ts.map +1 -1
  68. package/dist/components/ui-file-upload.d.ts.map +1 -1
  69. package/dist/components/ui-gantt.d.ts.map +1 -1
  70. package/dist/components/ui-input.d.ts.map +1 -1
  71. package/dist/components/ui-menu.d.ts.map +1 -1
  72. package/dist/components/ui-multi-select.d.ts.map +1 -1
  73. package/dist/components/ui-number-field.d.ts.map +1 -1
  74. package/dist/components/ui-password-field.d.ts.map +1 -1
  75. package/dist/components/ui-pin-input.d.ts +1 -0
  76. package/dist/components/ui-pin-input.d.ts.map +1 -1
  77. package/dist/components/ui-placement-grid.d.ts.map +1 -1
  78. package/dist/components/ui-progress.d.ts.map +1 -1
  79. package/dist/components/ui-radio.d.ts.map +1 -1
  80. package/dist/components/ui-rating.d.ts +1 -0
  81. package/dist/components/ui-rating.d.ts.map +1 -1
  82. package/dist/components/ui-select.d.ts.map +1 -1
  83. package/dist/components/ui-sortable.d.ts.map +1 -1
  84. package/dist/components/ui-switch.d.ts.map +1 -1
  85. package/dist/components/ui-table.d.ts.map +1 -1
  86. package/dist/components/ui-tabs.d.ts +1 -0
  87. package/dist/components/ui-tabs.d.ts.map +1 -1
  88. package/dist/components/ui-tags-input.d.ts +1 -0
  89. package/dist/components/ui-tags-input.d.ts.map +1 -1
  90. package/dist/components/ui-textarea.d.ts.map +1 -1
  91. package/dist/components/ui-time-field.d.ts.map +1 -1
  92. package/dist/components/ui-toggle-group.d.ts.map +1 -1
  93. package/dist/components/ui-toggle.d.ts.map +1 -1
  94. package/dist/components/ui-tree.d.ts.map +1 -1
  95. package/dist/components/ui-wizard.d.ts.map +1 -1
  96. package/dist/context-menu.cjs.js +3 -3
  97. package/dist/context-menu.esm.js +4 -4
  98. package/dist/control-name-BmoI1m3a.js +1 -0
  99. package/dist/control-name-Bpj7F34X.mjs +48 -0
  100. package/dist/data-table.cjs.js +5 -2
  101. package/dist/data-table.esm.js +145 -142
  102. package/dist/date-field.cjs.js +5 -5
  103. package/dist/date-field.esm.js +34 -31
  104. package/dist/date-picker.cjs.js +16 -16
  105. package/dist/date-picker.esm.js +48 -44
  106. package/dist/date-range-picker.cjs.js +5 -5
  107. package/dist/date-range-picker.esm.js +120 -118
  108. package/dist/date-range-time-picker.cjs.js +22 -22
  109. package/dist/date-range-time-picker.esm.js +88 -84
  110. package/dist/date-time-picker.cjs.js +23 -23
  111. package/dist/date-time-picker.esm.js +102 -98
  112. package/dist/{date-time-utils-Dmost5Ee.js → date-time-utils-BzfTpeU-.js} +1 -1
  113. package/dist/{date-time-utils-y1N2gvG2.mjs → date-time-utils-Cps2aSu2.mjs} +1 -1
  114. package/dist/description.cjs.js +3 -3
  115. package/dist/description.esm.js +3 -3
  116. package/dist/dialog.cjs.js +2 -2
  117. package/dist/dialog.esm.js +2 -2
  118. package/dist/dock.cjs.js +12 -12
  119. package/dist/dock.esm.js +72 -74
  120. package/dist/drawer.cjs.js +19 -19
  121. package/dist/drawer.esm.js +58 -58
  122. package/dist/dropdown.cjs.js +13 -13
  123. package/dist/dropdown.esm.js +49 -48
  124. package/dist/empty-state.cjs.js +3 -3
  125. package/dist/empty-state.esm.js +3 -3
  126. package/dist/field-error.cjs.js +1 -1
  127. package/dist/field-error.esm.js +1 -1
  128. package/dist/field.cjs.js +12 -12
  129. package/dist/field.esm.js +84 -75
  130. package/dist/fieldset.cjs.js +4 -4
  131. package/dist/fieldset.esm.js +4 -4
  132. package/dist/file-upload.cjs.js +3 -3
  133. package/dist/file-upload.esm.js +5 -3
  134. package/dist/floating-toolbar.cjs.js +8 -8
  135. package/dist/floating-toolbar.esm.js +9 -9
  136. package/dist/form.cjs.js +11 -11
  137. package/dist/form.esm.js +11 -11
  138. package/dist/gantt.cjs.js +43 -32
  139. package/dist/gantt.esm.js +99 -88
  140. package/dist/icon-cloud.cjs.js +3 -3
  141. package/dist/icon-cloud.esm.js +3 -3
  142. package/dist/icon.cjs.js +1 -1
  143. package/dist/icon.esm.js +1 -1
  144. package/dist/index.cjs.js +1 -1
  145. package/dist/index.esm.js +121 -118
  146. package/dist/inline-edit.cjs.js +1 -1
  147. package/dist/inline-edit.esm.js +1 -1
  148. package/dist/input.cjs.js +14 -14
  149. package/dist/input.esm.js +39 -32
  150. package/dist/label.cjs.js +3 -3
  151. package/dist/label.esm.js +3 -3
  152. package/dist/{listbox-B6QgECax.js → listbox-CTpRpuF7.js} +1 -1
  153. package/dist/{listbox-DJamVeFj.mjs → listbox-hMVOhKHC.mjs} +1 -1
  154. package/dist/listbox.cjs.js +1 -1
  155. package/dist/listbox.esm.js +1 -1
  156. package/dist/marquee.cjs.js +3 -3
  157. package/dist/marquee.esm.js +3 -3
  158. package/dist/{menu-item-styles-CbNUEwP2.js → menu-item-styles-B4onAr4C.js} +3 -3
  159. package/dist/{menu-item-styles-CZiPwPwl.mjs → menu-item-styles-IGSFLAHu.mjs} +3 -3
  160. package/dist/menu.cjs.js +7 -7
  161. package/dist/menu.esm.js +29 -28
  162. package/dist/menubar.cjs.js +1 -1
  163. package/dist/menubar.esm.js +2 -2
  164. package/dist/meter.cjs.js +1 -1
  165. package/dist/meter.esm.js +1 -1
  166. package/dist/multi-select.cjs.js +17 -17
  167. package/dist/multi-select.esm.js +51 -43
  168. package/dist/navigation-menu.cjs.js +1 -1
  169. package/dist/navigation-menu.esm.js +1 -1
  170. package/dist/number-field.cjs.js +11 -13
  171. package/dist/number-field.esm.js +29 -27
  172. package/dist/number-ticker.cjs.js +4 -4
  173. package/dist/number-ticker.esm.js +4 -4
  174. package/dist/odometer.cjs.js +2 -2
  175. package/dist/odometer.esm.js +2 -2
  176. package/dist/orbiter.cjs.js +3 -3
  177. package/dist/orbiter.esm.js +3 -3
  178. package/dist/pagination.cjs.js +1 -1
  179. package/dist/pagination.esm.js +1 -1
  180. package/dist/password-field.cjs.js +23 -23
  181. package/dist/password-field.esm.js +48 -47
  182. package/dist/pin-input.cjs.js +8 -6
  183. package/dist/pin-input.esm.js +21 -15
  184. package/dist/placement-grid.cjs.js +4 -4
  185. package/dist/placement-grid.esm.js +58 -58
  186. package/dist/plugin-panel.cjs.js +1 -1
  187. package/dist/plugin-panel.esm.js +1 -1
  188. package/dist/popover.cjs.js +5 -5
  189. package/dist/popover.esm.js +4 -4
  190. package/dist/primitives/control-name.d.ts +30 -0
  191. package/dist/primitives/control-name.d.ts.map +1 -0
  192. package/dist/primitives/trigger.d.ts +2 -0
  193. package/dist/primitives/trigger.d.ts.map +1 -0
  194. package/dist/progress.cjs.js +4 -4
  195. package/dist/progress.esm.js +20 -18
  196. package/dist/quick-actions.cjs.js +3 -3
  197. package/dist/quick-actions.esm.js +3 -3
  198. package/dist/radio-group.cjs.js +1 -1
  199. package/dist/radio-group.esm.js +1 -1
  200. package/dist/radio.cjs.js +2 -2
  201. package/dist/radio.esm.js +2 -2
  202. package/dist/rating.cjs.js +17 -16
  203. package/dist/rating.esm.js +91 -92
  204. package/dist/{runtime-D1gFh1fS.mjs → runtime-CFnK53iC.mjs} +133 -94
  205. package/dist/runtime-DwE-tizc.js +1 -0
  206. package/dist/runtime.cjs.js +1 -1
  207. package/dist/runtime.d.ts +1 -1
  208. package/dist/runtime.d.ts.map +1 -1
  209. package/dist/runtime.esm.js +29 -26
  210. package/dist/select.cjs.js +20 -19
  211. package/dist/select.esm.js +36 -32
  212. package/dist/selection-popup.cjs.js +2 -2
  213. package/dist/selection-popup.esm.js +2 -2
  214. package/dist/separator.cjs.js +7 -7
  215. package/dist/separator.esm.js +7 -7
  216. package/dist/sidebar.cjs.js +7 -7
  217. package/dist/sidebar.esm.js +7 -7
  218. package/dist/skeleton.cjs.js +7 -7
  219. package/dist/skeleton.esm.js +7 -7
  220. package/dist/slider.cjs.js +3 -3
  221. package/dist/slider.esm.js +3 -3
  222. package/dist/slot.cjs.js +3 -3
  223. package/dist/slot.esm.js +3 -3
  224. package/dist/sortable.cjs.js +41 -42
  225. package/dist/sortable.esm.js +98 -99
  226. package/dist/spinning-text.cjs.js +3 -3
  227. package/dist/spinning-text.esm.js +3 -3
  228. package/dist/split-button.cjs.js +1 -1
  229. package/dist/split-button.esm.js +1 -1
  230. package/dist/stepper.cjs.js +1 -1
  231. package/dist/stepper.esm.js +1 -1
  232. package/dist/switch.cjs.js +10 -12
  233. package/dist/switch.esm.js +10 -12
  234. package/dist/table.cjs.js +9 -6
  235. package/dist/table.esm.js +46 -43
  236. package/dist/tabs.cjs.js +20 -21
  237. package/dist/tabs.esm.js +70 -66
  238. package/dist/tags-input.cjs.js +9 -9
  239. package/dist/tags-input.esm.js +32 -25
  240. package/dist/textarea.cjs.js +10 -10
  241. package/dist/textarea.esm.js +30 -21
  242. package/dist/theme.d.ts +18 -0
  243. package/dist/theme.d.ts.map +1 -1
  244. package/dist/time-field.cjs.js +5 -5
  245. package/dist/time-field.esm.js +21 -18
  246. package/dist/time-picker.cjs.js +4 -4
  247. package/dist/time-picker.esm.js +5 -5
  248. package/dist/timeline.cjs.js +2 -2
  249. package/dist/timeline.esm.js +4 -4
  250. package/dist/toast.cjs.js +6 -6
  251. package/dist/toast.esm.js +13 -13
  252. package/dist/toggle-group.cjs.js +5 -6
  253. package/dist/toggle-group.esm.js +63 -60
  254. package/dist/toggle.cjs.js +18 -18
  255. package/dist/toggle.esm.js +32 -31
  256. package/dist/tooltip.cjs.js +4 -4
  257. package/dist/tooltip.esm.js +4 -4
  258. package/dist/transfer-list.cjs.js +3 -3
  259. package/dist/transfer-list.esm.js +3 -3
  260. package/dist/tree-7qbVnpGp.js +39 -0
  261. package/dist/{tree-B3kE8ESs.mjs → tree-Deoft-kO.mjs} +34 -33
  262. package/dist/tree.cjs.js +1 -1
  263. package/dist/tree.esm.js +1 -1
  264. package/dist/trigger-BjnxLCeQ.mjs +9 -0
  265. package/dist/trigger-DkPsKxsP.js +1 -0
  266. package/dist/{ui-button-rXQOS9QJ.js → ui-button-BInsgSbr.js} +27 -26
  267. package/dist/{ui-button-Q0GNNWKC.mjs → ui-button-rfiuUnUD.mjs} +65 -48
  268. package/dist/{ui-icon-YI6lyuqU.mjs → ui-icon-BSi_GtqO.mjs} +2 -2
  269. package/dist/{ui-icon-BzVNC_lr.js → ui-icon-Bvt9oIIR.js} +5 -5
  270. package/dist/wizard.cjs.js +12 -13
  271. package/dist/wizard.esm.js +17 -15
  272. package/package.json +1 -1
  273. package/dist/runtime-CTaOSmBj.js +0 -1
  274. package/dist/tree-Dx_kv_ih.js +0 -39
@@ -7,15 +7,15 @@ const w = `
7
7
  --ui-switch-radius: 999px;
8
8
  --ui-switch-gap: 12px;
9
9
  --ui-switch-track-bg: var(--ui-color-surface-alt, #e2e8f0);
10
- --ui-switch-track-hover: color-mix(in srgb, var(--ui-switch-track-bg) 84%, var(--ui-color-muted, #64748b));
10
+ --ui-switch-track-hover: color-mix(in srgb, var(--ui-switch-track-bg) 84%, var(--ui-color-muted, #526175));
11
11
  --ui-switch-track-border: var(--ui-color-border, #cbd5e1);
12
12
  --ui-switch-thumb-bg: var(--ui-color-surface, #ffffff);
13
- --ui-switch-thumb-color: var(--ui-color-muted, #64748b);
13
+ --ui-switch-thumb-color: var(--ui-color-muted, #526175);
14
14
  --ui-switch-label: var(--ui-color-text, #0f172a);
15
- --ui-switch-description: var(--ui-color-muted, #64748b);
15
+ --ui-switch-description: var(--ui-color-muted, #526175);
16
16
  --ui-switch-accent: var(--ui-switch-checked-bg, var(--ui-color-primary, #2563eb));
17
17
  --ui-switch-accent-hover: color-mix(in srgb, var(--ui-switch-accent) 86%, #0f172a);
18
- --ui-switch-accent-contrast: var(--ui-color-primary-foreground, #ffffff);
18
+ --ui-switch-accent-contrast: var(--ui-color-primary-foreground, var(--ui-color-foreground-on-primary, #ffffff));
19
19
  --ui-switch-focus: var(--ui-color-focus-ring, #2563eb);
20
20
  --ui-switch-shadow: none;
21
21
  --ui-switch-thumb-shadow: none;
@@ -307,11 +307,11 @@ const w = `
307
307
  }
308
308
 
309
309
  :host([tone="success"]) {
310
- --ui-switch-accent: var(--ui-color-success, #16a34a);
310
+ --ui-switch-accent: var(--ui-color-success, #15803d);
311
311
  }
312
312
 
313
313
  :host([tone="warning"]) {
314
- --ui-switch-accent: var(--ui-color-warning, #d97706);
314
+ --ui-switch-accent: var(--ui-color-warning, #b45309);
315
315
  }
316
316
 
317
317
  :host([tone="danger"]) {
@@ -461,7 +461,7 @@ class f extends p {
461
461
  const t = this.checked, i = this.disabled, e = this.hasAttribute("loading"), r = u(this.getAttribute("required"));
462
462
  this.setAttribute("role", "switch"), this.setAttribute("aria-checked", t ? "true" : "false"), this.setAttribute("aria-disabled", i ? "true" : "false"), this.setAttribute("aria-busy", e ? "true" : "false"), r ? this.setAttribute("aria-required", "true") : this.removeAttribute("aria-required");
463
463
  const o = this.getAttribute("data-ui-switch-tabindex");
464
- i ? (o == null && this.setAttribute("data-ui-switch-tabindex", this.getAttribute("tabindex") || ""), this.getAttribute("tabindex") !== "-1" && this.setAttribute("tabindex", "-1")) : o != null ? (o ? this.setAttribute("tabindex", o) : this.removeAttribute("tabindex"), this.removeAttribute("data-ui-switch-tabindex")) : this.hasAttribute("tabindex") || this.setAttribute("tabindex", "0"), this._control && (this._control.disabled = i);
464
+ i ? (o == null && this.setAttribute("data-ui-switch-tabindex", this.getAttribute("tabindex") || ""), this.getAttribute("tabindex") !== "-1" && this.setAttribute("tabindex", "-1")) : o != null ? (o ? this.setAttribute("tabindex", o) : this.removeAttribute("tabindex"), this.removeAttribute("data-ui-switch-tabindex")) : this.hasAttribute("tabindex") || this.setAttribute("tabindex", "0"), this._control && this._control.toggleAttribute("data-disabled", i);
465
465
  }
466
466
  _onClick(t) {
467
467
  if (this.disabled) return;
@@ -504,20 +504,18 @@ class f extends p {
504
504
  this.setContent(`
505
505
  <style>${w}</style>
506
506
  <span class="shell" part="shell">
507
- <button
508
- type="button"
507
+ <span
509
508
  class="control"
510
509
  part="control"
511
510
  aria-hidden="true"
512
- tabindex="-1"
513
- ${i ? "disabled" : ""}
511
+ ${i ? "data-disabled" : ""}
514
512
  >
515
513
  <span class="thumb" part="thumb">
516
514
  <span class="spinner" aria-hidden="true"></span>
517
515
  <span class="thumb-icon icon-on" aria-hidden="true">✓</span>
518
516
  <span class="thumb-icon icon-off" aria-hidden="true">•</span>
519
517
  </span>
520
- </button>
518
+ </span>
521
519
  <span class="label-wrap" part="label-wrap" ${b ? "" : "hidden"}>
522
520
  <span class="label" part="label" ${c ? "" : "hidden"}><slot>${d(e)}</slot></span>
523
521
  <span class="description" part="description" ${h ? "" : "hidden"}><slot name="description">${d(r)}</slot></span>
package/dist/table.cjs.js CHANGED
@@ -1,12 +1,15 @@
1
1
  "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const p=require("./ElementBase-EV6mVBUV.js"),y=`
2
2
  :host {
3
3
  display: block;
4
+ /* A wide table scrolls inside its own frame. Without this a grid or flex parent grows to the table's width. */
5
+ min-inline-size: 0;
6
+ max-inline-size: 100%;
4
7
  color-scheme: light dark;
5
8
  --ui-table-radius: 14px;
6
9
  --ui-table-border: 1px solid color-mix(in srgb, var(--ui-color-border, #cbd5e1) 70%, transparent);
7
10
  --ui-table-bg: color-mix(in srgb, var(--ui-color-surface, #ffffff) 95%, transparent);
8
11
  --ui-table-text: var(--ui-color-text, #0f172a);
9
- --ui-table-muted: var(--ui-color-muted, #64748b);
12
+ --ui-table-muted: var(--ui-color-muted, #526175);
10
13
  --ui-table-accent: var(--ui-color-primary, #2563eb);
11
14
  --ui-table-shadow: none;
12
15
  --ui-table-empty-color: var(--ui-table-muted);
@@ -83,7 +86,7 @@
83
86
  ui-table:not([headless]) > table thead th {
84
87
  text-align: left;
85
88
  padding: 12px 14px;
86
- color: var(--ui-table-muted, var(--ui-color-muted, #64748b));
89
+ color: var(--ui-table-muted, var(--ui-color-muted, #526175));
87
90
  font-weight: 600;
88
91
  letter-spacing: 0.01em;
89
92
  background: linear-gradient(
@@ -152,7 +155,7 @@
152
155
  font-size: 12px;
153
156
  line-height: 1;
154
157
  font-weight: 700;
155
- color: color-mix(in srgb, var(--ui-table-muted, var(--ui-color-muted, #64748b)) 76%, transparent);
158
+ color: color-mix(in srgb, var(--ui-table-muted, var(--ui-color-muted, #526175)) 76%, transparent);
156
159
  letter-spacing: 0;
157
160
  }
158
161
 
@@ -177,7 +180,7 @@
177
180
  }
178
181
 
179
182
  ui-table[loading]:not([headless]) > table tbody {
180
- opacity: 0.55;
183
+ opacity: 0.65;
181
184
  pointer-events: none;
182
185
  }
183
186
 
@@ -203,10 +206,10 @@
203
206
  border-color: Highlight;
204
207
  }
205
208
  }
206
- `;function f(){if(typeof document>"u")return;const i="ui-table-light-dom-style",t=document.getElementById(i);if(t){t.textContent!==h&&(t.textContent=h);return}const s=document.createElement("style");s.id=i,s.textContent=h,document.head.appendChild(s)}typeof document<"u"&&f();function d(i){return i?(i.textContent||"").replace(/\s+/g," ").trim():""}function _(i){const t=i.replace(/,/g,"");if(/^-?\d+(\.\d+)?$/.test(t))return Number(t);const s=Date.parse(i);return!Number.isNaN(s)&&/[-/]/.test(i)?s:i.toLowerCase()}class m extends p.ElementBase{constructor(){super(),this._table=null,this._observer=null,this._sortColumnIndex=-1,this._sortDirection="asc",this._selectedRows=new Set,this._isSyncing=!1,this._syncRaf=0,this._onClick=this._onClick.bind(this),this._onKeyDown=this._onKeyDown.bind(this)}static get observedAttributes(){return["headless","empty-text","sortable","selectable","multi-select"]}connectedCallback(){super.connectedCallback(),f(),this.addEventListener("click",this._onClick),this.addEventListener("keydown",this._onKeyDown),this._observer=new MutationObserver(()=>{this._isSyncing||this._queueSyncStructure()}),this._observer.observe(this,{childList:!0,subtree:!0,characterData:!0})}disconnectedCallback(){this.removeEventListener("click",this._onClick),this.removeEventListener("keydown",this._onKeyDown),this._syncRaf&&(cancelAnimationFrame(this._syncRaf),this._syncRaf=0),this._observer&&(this._observer.disconnect(),this._observer=null),super.disconnectedCallback()}attributeChangedCallback(t,s,e){if(s!==e){if(t==="headless"){this.requestRender();return}if(t==="empty-text"){this._syncEmptyText();return}this.isConnected&&this._queueSyncStructure()}}render(){if(this.hasAttribute("headless")){this.setContent("<slot></slot>"),this._syncStructure();return}const t=this.getAttribute("empty-text")||"No table data available.";this.setContent(`
209
+ `;function f(){if(typeof document>"u")return;const i="ui-table-light-dom-style",t=document.getElementById(i);if(t){t.textContent!==h&&(t.textContent=h);return}const s=document.createElement("style");s.id=i,s.textContent=h,document.head.appendChild(s)}typeof document<"u"&&f();function c(i){return i?(i.textContent||"").replace(/\s+/g," ").trim():""}function _(i){const t=i.replace(/,/g,"");if(/^-?\d+(\.\d+)?$/.test(t))return Number(t);const s=Date.parse(i);return!Number.isNaN(s)&&/[-/]/.test(i)?s:i.toLowerCase()}class m extends p.ElementBase{constructor(){super(),this._table=null,this._observer=null,this._sortColumnIndex=-1,this._sortDirection="asc",this._selectedRows=new Set,this._isSyncing=!1,this._syncRaf=0,this._onClick=this._onClick.bind(this),this._onKeyDown=this._onKeyDown.bind(this)}static get observedAttributes(){return["headless","empty-text","sortable","selectable","multi-select"]}connectedCallback(){super.connectedCallback(),f(),this.addEventListener("click",this._onClick),this.addEventListener("keydown",this._onKeyDown),this._observer=new MutationObserver(()=>{this._isSyncing||this._queueSyncStructure()}),this._observer.observe(this,{childList:!0,subtree:!0,characterData:!0})}disconnectedCallback(){this.removeEventListener("click",this._onClick),this.removeEventListener("keydown",this._onKeyDown),this._syncRaf&&(cancelAnimationFrame(this._syncRaf),this._syncRaf=0),this._observer&&(this._observer.disconnect(),this._observer=null),super.disconnectedCallback()}attributeChangedCallback(t,s,e){if(s!==e){if(t==="headless"){this.requestRender();return}if(t==="empty-text"){this._syncEmptyText();return}this.isConnected&&this._queueSyncStructure()}}render(){if(this.hasAttribute("headless")){this.setContent("<slot></slot>"),this._syncStructure();return}const t=this.getAttribute("empty-text")||"No table data available.";this.setContent(`
207
210
  <style>${y}</style>
208
211
  <div class="frame" part="frame">
209
212
  <slot></slot>
210
213
  <div class="empty" part="empty" hidden>${t}</div>
211
214
  </div>
212
- `),this._syncStructure()}_findTable(){return this.querySelector("table")}_queueSyncStructure(){this.isConnected&&(this._syncRaf||(this._syncRaf=requestAnimationFrame(()=>{this._syncRaf=0,this._syncStructure()})))}_syncStructure(){if(!this._isSyncing){this._isSyncing=!0;try{this._table=this._findTable();const t=this.root.querySelector(".empty");if(this._syncEmptyText(),!this._table){t&&t.removeAttribute("hidden"),this._selectedRows.clear();return}t&&t.setAttribute("hidden",""),this._table.hasAttribute("data-ui-table")||this._table.setAttribute("data-ui-table","true"),this._table.hasAttribute("role")||this._table.setAttribute("role","table"),this._syncHeaderState(),this._syncRowSelectionState()}finally{this._isSyncing=!1}}}_syncEmptyText(){const t=this.root.querySelector(".empty");t&&(t.textContent=this.getAttribute("empty-text")||"No table data available.")}_headerCells(){if(!this._table)return[];const t=this._table.tHead?.rows[0];if(t)return Array.from(t.cells).filter(e=>e.tagName.toLowerCase()==="th");const s=this._table.querySelectorAll("th");return Array.from(s)}_syncHeaderState(){const t=this.hasAttribute("sortable");this._headerCells().forEach((e,r)=>{t?(e.setAttribute("data-sortable","true"),e.hasAttribute("tabindex")||e.setAttribute("tabindex","0")):(e.removeAttribute("data-sortable"),e.getAttribute("tabindex")==="0"&&e.removeAttribute("tabindex")),r===this._sortColumnIndex&&t?e.setAttribute("aria-sort",this._sortDirection==="asc"?"ascending":"descending"):t?e.setAttribute("aria-sort","none"):e.removeAttribute("aria-sort")})}_syncRowSelectionState(){const t=this.hasAttribute("selectable"),s=this._bodyRows();for(const e of Array.from(this._selectedRows))s.includes(e)||this._selectedRows.delete(e);s.forEach(e=>{t?(e.setAttribute("aria-selected",this._selectedRows.has(e)?"true":"false"),e.hasAttribute("tabindex")||e.setAttribute("tabindex","0"),this._selectedRows.has(e)?e.setAttribute("data-selected","true"):e.removeAttribute("data-selected")):(e.removeAttribute("aria-selected"),e.removeAttribute("data-selected"),e.getAttribute("tabindex")==="0"&&e.removeAttribute("tabindex"))})}_bodyRows(){if(!this._table)return[];const t=this._table.tBodies[0];return t?Array.from(t.rows):[]}_sortByColumn(t,s){if(!this._table)return;const e=this._table.tBodies[0];if(!e)return;this._sortColumnIndex===t?this._sortDirection=this._sortDirection==="asc"?"desc":"asc":(this._sortColumnIndex=t,this._sortDirection="asc"),Array.from(e.rows).map((a,l)=>({row:a,rowIndex:l,value:_(d(a.cells[t]))})).sort((a,l)=>{const b=a.value,u=l.value;let c=0;return typeof b=="number"&&typeof u=="number"?c=b-u:c=String(b).localeCompare(String(u),void 0,{numeric:!0,sensitivity:"base"}),c===0&&(c=a.rowIndex-l.rowIndex),this._sortDirection==="asc"?c:-c}).map(a=>a.row).forEach(a=>e.appendChild(a)),this._syncHeaderState(),this._syncRowSelectionState();const o=s.getAttribute("data-key")||d(s)||`column-${t+1}`;this.dispatchEvent(new CustomEvent("sort-change",{detail:{columnIndex:t,key:o,direction:this._sortDirection},bubbles:!0}))}_rowValues(t){const s=this._headerCells(),e=Array.from(t.cells),r={};return e.forEach((n,o)=>{const a=s[o],l=(a?.getAttribute("data-key")||d(a||void 0)||`col_${o+1}`).toLowerCase().replace(/[^a-z0-9_]+/g,"_").replace(/^_+|_+$/g,"");r[l||`col_${o+1}`]=d(n)}),r}_toggleRowSelection(t){const s=this.hasAttribute("multi-select"),e=this._selectedRows.has(t);s||this._selectedRows.clear(),e&&s?this._selectedRows.delete(t):this._selectedRows.add(t),this._syncRowSelectionState();const r=this._bodyRows(),n=r.flatMap((a,l)=>this._selectedRows.has(a)?[l]:[]),o=r.filter(a=>this._selectedRows.has(a)).map(a=>this._rowValues(a));this.dispatchEvent(new CustomEvent("row-select",{detail:{index:r.indexOf(t),selected:this._selectedRows.has(t),indices:n,rows:o},bubbles:!0}))}_onClick(t){if(!this._table)return;const s=t.target;if(this.hasAttribute("sortable")){const e=s.closest("th");if(e&&this._table.contains(e)){const n=this._headerCells().indexOf(e);if(n>=0){this._sortByColumn(n,e);return}}}if(this.hasAttribute("selectable")){const e=s.closest("tbody tr");e&&this._table.contains(e)&&this._toggleRowSelection(e)}}_onKeyDown(t){if(!this._table)return;const s=t.key;if(s!=="Enter"&&s!==" ")return;const e=t.target;if(this.hasAttribute("sortable")){const r=e.closest("th");if(r&&this._table.contains(r)){const o=this._headerCells().indexOf(r);if(o>=0){t.preventDefault(),this._sortByColumn(o,r);return}}}if(this.hasAttribute("selectable")){const r=e.closest("tbody tr");r&&this._table.contains(r)&&(t.preventDefault(),this._toggleRowSelection(r))}}shouldRenderOnAttributeChange(t,s,e){return!1}}typeof customElements<"u"&&!customElements.get("ui-table")&&customElements.define("ui-table",m);exports.UITable=m;
215
+ `),this._syncStructure()}_findTable(){return this.querySelector("table")}_queueSyncStructure(){this.isConnected&&(this._syncRaf||(this._syncRaf=requestAnimationFrame(()=>{this._syncRaf=0,this._syncStructure()})))}_syncStructure(){if(!this._isSyncing){this._isSyncing=!0;try{this._table=this._findTable();const t=this.root.querySelector(".empty");if(this._syncEmptyText(),!this._table){t&&t.removeAttribute("hidden"),this._selectedRows.clear();return}t&&t.setAttribute("hidden",""),this._table.hasAttribute("data-ui-table")||this._table.setAttribute("data-ui-table","true"),this._table.hasAttribute("role")||this._table.setAttribute("role","table"),this._syncHeaderState(),this._syncRowSelectionState()}finally{this._isSyncing=!1}}}_syncEmptyText(){const t=this.root.querySelector(".empty");t&&(t.textContent=this.getAttribute("empty-text")||"No table data available.")}_headerCells(){if(!this._table)return[];const t=this._table.tHead?.rows[0];if(t)return Array.from(t.cells).filter(e=>e.tagName.toLowerCase()==="th");const s=this._table.querySelectorAll("th");return Array.from(s)}_syncHeaderState(){const t=this.hasAttribute("sortable");this._headerCells().forEach((e,r)=>{t?(e.setAttribute("data-sortable","true"),e.hasAttribute("tabindex")||e.setAttribute("tabindex","0")):(e.removeAttribute("data-sortable"),e.getAttribute("tabindex")==="0"&&e.removeAttribute("tabindex")),r===this._sortColumnIndex&&t?e.setAttribute("aria-sort",this._sortDirection==="asc"?"ascending":"descending"):t?e.setAttribute("aria-sort","none"):e.removeAttribute("aria-sort")})}_syncRowSelectionState(){const t=this.hasAttribute("selectable"),s=this._bodyRows();for(const e of Array.from(this._selectedRows))s.includes(e)||this._selectedRows.delete(e);s.forEach(e=>{t?(e.setAttribute("aria-selected",this._selectedRows.has(e)?"true":"false"),e.hasAttribute("tabindex")||e.setAttribute("tabindex","0"),this._selectedRows.has(e)?e.setAttribute("data-selected","true"):e.removeAttribute("data-selected")):(e.removeAttribute("aria-selected"),e.removeAttribute("data-selected"),e.getAttribute("tabindex")==="0"&&e.removeAttribute("tabindex"))})}_bodyRows(){if(!this._table)return[];const t=this._table.tBodies[0];return t?Array.from(t.rows):[]}_sortByColumn(t,s){if(!this._table)return;const e=this._table.tBodies[0];if(!e)return;this._sortColumnIndex===t?this._sortDirection=this._sortDirection==="asc"?"desc":"asc":(this._sortColumnIndex=t,this._sortDirection="asc"),Array.from(e.rows).map((a,l)=>({row:a,rowIndex:l,value:_(c(a.cells[t]))})).sort((a,l)=>{const b=a.value,u=l.value;let d=0;return typeof b=="number"&&typeof u=="number"?d=b-u:d=String(b).localeCompare(String(u),void 0,{numeric:!0,sensitivity:"base"}),d===0&&(d=a.rowIndex-l.rowIndex),this._sortDirection==="asc"?d:-d}).map(a=>a.row).forEach(a=>e.appendChild(a)),this._syncHeaderState(),this._syncRowSelectionState();const o=s.getAttribute("data-key")||c(s)||`column-${t+1}`;this.dispatchEvent(new CustomEvent("sort-change",{detail:{columnIndex:t,key:o,direction:this._sortDirection},bubbles:!0}))}_rowValues(t){const s=this._headerCells(),e=Array.from(t.cells),r={};return e.forEach((n,o)=>{const a=s[o],l=(a?.getAttribute("data-key")||c(a||void 0)||`col_${o+1}`).toLowerCase().replace(/[^a-z0-9_]+/g,"_").replace(/^_+|_+$/g,"");r[l||`col_${o+1}`]=c(n)}),r}_toggleRowSelection(t){const s=this.hasAttribute("multi-select"),e=this._selectedRows.has(t);s||this._selectedRows.clear(),e&&s?this._selectedRows.delete(t):this._selectedRows.add(t),this._syncRowSelectionState();const r=this._bodyRows(),n=r.flatMap((a,l)=>this._selectedRows.has(a)?[l]:[]),o=r.filter(a=>this._selectedRows.has(a)).map(a=>this._rowValues(a));this.dispatchEvent(new CustomEvent("row-select",{detail:{index:r.indexOf(t),selected:this._selectedRows.has(t),indices:n,rows:o},bubbles:!0}))}_onClick(t){if(!this._table)return;const s=t.target;if(this.hasAttribute("sortable")){const e=s.closest("th");if(e&&this._table.contains(e)){const n=this._headerCells().indexOf(e);if(n>=0){this._sortByColumn(n,e);return}}}if(this.hasAttribute("selectable")){const e=s.closest("tbody tr");e&&this._table.contains(e)&&this._toggleRowSelection(e)}}_onKeyDown(t){if(!this._table)return;const s=t.key;if(s!=="Enter"&&s!==" ")return;const e=t.target;if(this.hasAttribute("sortable")){const r=e.closest("th");if(r&&this._table.contains(r)){const o=this._headerCells().indexOf(r);if(o>=0){t.preventDefault(),this._sortByColumn(o,r);return}}}if(this.hasAttribute("selectable")){const r=e.closest("tbody tr");r&&this._table.contains(r)&&(t.preventDefault(),this._toggleRowSelection(r))}}shouldRenderOnAttributeChange(t,s,e){return!1}}typeof customElements<"u"&&!customElements.get("ui-table")&&customElements.define("ui-table",m);exports.UITable=m;
package/dist/table.esm.js CHANGED
@@ -2,12 +2,15 @@ import { E as m } from "./ElementBase-YlTLMsGk.mjs";
2
2
  const p = `
3
3
  :host {
4
4
  display: block;
5
+ /* A wide table scrolls inside its own frame. Without this a grid or flex parent grows to the table's width. */
6
+ min-inline-size: 0;
7
+ max-inline-size: 100%;
5
8
  color-scheme: light dark;
6
9
  --ui-table-radius: 14px;
7
10
  --ui-table-border: 1px solid color-mix(in srgb, var(--ui-color-border, #cbd5e1) 70%, transparent);
8
11
  --ui-table-bg: color-mix(in srgb, var(--ui-color-surface, #ffffff) 95%, transparent);
9
12
  --ui-table-text: var(--ui-color-text, #0f172a);
10
- --ui-table-muted: var(--ui-color-muted, #64748b);
13
+ --ui-table-muted: var(--ui-color-muted, #526175);
11
14
  --ui-table-accent: var(--ui-color-primary, #2563eb);
12
15
  --ui-table-shadow: none;
13
16
  --ui-table-empty-color: var(--ui-table-muted);
@@ -84,7 +87,7 @@ const p = `
84
87
  ui-table:not([headless]) > table thead th {
85
88
  text-align: left;
86
89
  padding: 12px 14px;
87
- color: var(--ui-table-muted, var(--ui-color-muted, #64748b));
90
+ color: var(--ui-table-muted, var(--ui-color-muted, #526175));
88
91
  font-weight: 600;
89
92
  letter-spacing: 0.01em;
90
93
  background: linear-gradient(
@@ -153,7 +156,7 @@ const p = `
153
156
  font-size: 12px;
154
157
  line-height: 1;
155
158
  font-weight: 700;
156
- color: color-mix(in srgb, var(--ui-table-muted, var(--ui-color-muted, #64748b)) 76%, transparent);
159
+ color: color-mix(in srgb, var(--ui-table-muted, var(--ui-color-muted, #526175)) 76%, transparent);
157
160
  letter-spacing: 0;
158
161
  }
159
162
 
@@ -178,7 +181,7 @@ const p = `
178
181
  }
179
182
 
180
183
  ui-table[loading]:not([headless]) > table tbody {
181
- opacity: 0.55;
184
+ opacity: 0.65;
182
185
  pointer-events: none;
183
186
  }
184
187
 
@@ -212,18 +215,18 @@ function f() {
212
215
  t.textContent !== h && (t.textContent = h);
213
216
  return;
214
217
  }
215
- const r = document.createElement("style");
216
- r.id = i, r.textContent = h, document.head.appendChild(r);
218
+ const s = document.createElement("style");
219
+ s.id = i, s.textContent = h, document.head.appendChild(s);
217
220
  }
218
221
  typeof document < "u" && f();
219
- function d(i) {
222
+ function c(i) {
220
223
  return i ? (i.textContent || "").replace(/\s+/g, " ").trim() : "";
221
224
  }
222
225
  function y(i) {
223
226
  const t = i.replace(/,/g, "");
224
227
  if (/^-?\d+(\.\d+)?$/.test(t)) return Number(t);
225
- const r = Date.parse(i);
226
- return !Number.isNaN(r) && /[-/]/.test(i) ? r : i.toLowerCase();
228
+ const s = Date.parse(i);
229
+ return !Number.isNaN(s) && /[-/]/.test(i) ? s : i.toLowerCase();
227
230
  }
228
231
  class _ extends m {
229
232
  constructor() {
@@ -244,8 +247,8 @@ class _ extends m {
244
247
  disconnectedCallback() {
245
248
  this.removeEventListener("click", this._onClick), this.removeEventListener("keydown", this._onKeyDown), this._syncRaf && (cancelAnimationFrame(this._syncRaf), this._syncRaf = 0), this._observer && (this._observer.disconnect(), this._observer = null), super.disconnectedCallback();
246
249
  }
247
- attributeChangedCallback(t, r, e) {
248
- if (r !== e) {
250
+ attributeChangedCallback(t, s, e) {
251
+ if (s !== e) {
249
252
  if (t === "headless") {
250
253
  this.requestRender();
251
254
  return;
@@ -304,20 +307,20 @@ class _ extends m {
304
307
  const t = this._table.tHead?.rows[0];
305
308
  if (t)
306
309
  return Array.from(t.cells).filter((e) => e.tagName.toLowerCase() === "th");
307
- const r = this._table.querySelectorAll("th");
308
- return Array.from(r);
310
+ const s = this._table.querySelectorAll("th");
311
+ return Array.from(s);
309
312
  }
310
313
  _syncHeaderState() {
311
314
  const t = this.hasAttribute("sortable");
312
- this._headerCells().forEach((e, s) => {
313
- t ? (e.setAttribute("data-sortable", "true"), e.hasAttribute("tabindex") || e.setAttribute("tabindex", "0")) : (e.removeAttribute("data-sortable"), e.getAttribute("tabindex") === "0" && e.removeAttribute("tabindex")), s === this._sortColumnIndex && t ? e.setAttribute("aria-sort", this._sortDirection === "asc" ? "ascending" : "descending") : t ? e.setAttribute("aria-sort", "none") : e.removeAttribute("aria-sort");
315
+ this._headerCells().forEach((e, r) => {
316
+ t ? (e.setAttribute("data-sortable", "true"), e.hasAttribute("tabindex") || e.setAttribute("tabindex", "0")) : (e.removeAttribute("data-sortable"), e.getAttribute("tabindex") === "0" && e.removeAttribute("tabindex")), r === this._sortColumnIndex && t ? e.setAttribute("aria-sort", this._sortDirection === "asc" ? "ascending" : "descending") : t ? e.setAttribute("aria-sort", "none") : e.removeAttribute("aria-sort");
314
317
  });
315
318
  }
316
319
  _syncRowSelectionState() {
317
- const t = this.hasAttribute("selectable"), r = this._bodyRows();
320
+ const t = this.hasAttribute("selectable"), s = this._bodyRows();
318
321
  for (const e of Array.from(this._selectedRows))
319
- r.includes(e) || this._selectedRows.delete(e);
320
- r.forEach((e) => {
322
+ s.includes(e) || this._selectedRows.delete(e);
323
+ s.forEach((e) => {
321
324
  t ? (e.setAttribute("aria-selected", this._selectedRows.has(e) ? "true" : "false"), e.hasAttribute("tabindex") || e.setAttribute("tabindex", "0"), this._selectedRows.has(e) ? e.setAttribute("data-selected", "true") : e.removeAttribute("data-selected")) : (e.removeAttribute("aria-selected"), e.removeAttribute("data-selected"), e.getAttribute("tabindex") === "0" && e.removeAttribute("tabindex"));
322
325
  });
323
326
  }
@@ -326,20 +329,20 @@ class _ extends m {
326
329
  const t = this._table.tBodies[0];
327
330
  return t ? Array.from(t.rows) : [];
328
331
  }
329
- _sortByColumn(t, r) {
332
+ _sortByColumn(t, s) {
330
333
  if (!this._table) return;
331
334
  const e = this._table.tBodies[0];
332
335
  if (!e) return;
333
336
  this._sortColumnIndex === t ? this._sortDirection = this._sortDirection === "asc" ? "desc" : "asc" : (this._sortColumnIndex = t, this._sortDirection = "asc"), Array.from(e.rows).map((a, l) => ({
334
337
  row: a,
335
338
  rowIndex: l,
336
- value: y(d(a.cells[t]))
339
+ value: y(c(a.cells[t]))
337
340
  })).sort((a, l) => {
338
341
  const b = a.value, u = l.value;
339
- let c = 0;
340
- return typeof b == "number" && typeof u == "number" ? c = b - u : c = String(b).localeCompare(String(u), void 0, { numeric: !0, sensitivity: "base" }), c === 0 && (c = a.rowIndex - l.rowIndex), this._sortDirection === "asc" ? c : -c;
342
+ let d = 0;
343
+ return typeof b == "number" && typeof u == "number" ? d = b - u : d = String(b).localeCompare(String(u), void 0, { numeric: !0, sensitivity: "base" }), d === 0 && (d = a.rowIndex - l.rowIndex), this._sortDirection === "asc" ? d : -d;
341
344
  }).map((a) => a.row).forEach((a) => e.appendChild(a)), this._syncHeaderState(), this._syncRowSelectionState();
342
- const o = r.getAttribute("data-key") || d(r) || `column-${t + 1}`;
345
+ const o = s.getAttribute("data-key") || c(s) || `column-${t + 1}`;
343
346
  this.dispatchEvent(
344
347
  new CustomEvent("sort-change", {
345
348
  detail: {
@@ -352,20 +355,20 @@ class _ extends m {
352
355
  );
353
356
  }
354
357
  _rowValues(t) {
355
- const r = this._headerCells(), e = Array.from(t.cells), s = {};
358
+ const s = this._headerCells(), e = Array.from(t.cells), r = {};
356
359
  return e.forEach((n, o) => {
357
- const a = r[o], l = (a?.getAttribute("data-key") || d(a || void 0) || `col_${o + 1}`).toLowerCase().replace(/[^a-z0-9_]+/g, "_").replace(/^_+|_+$/g, "");
358
- s[l || `col_${o + 1}`] = d(n);
359
- }), s;
360
+ const a = s[o], l = (a?.getAttribute("data-key") || c(a || void 0) || `col_${o + 1}`).toLowerCase().replace(/[^a-z0-9_]+/g, "_").replace(/^_+|_+$/g, "");
361
+ r[l || `col_${o + 1}`] = c(n);
362
+ }), r;
360
363
  }
361
364
  _toggleRowSelection(t) {
362
- const r = this.hasAttribute("multi-select"), e = this._selectedRows.has(t);
363
- r || this._selectedRows.clear(), e && r ? this._selectedRows.delete(t) : this._selectedRows.add(t), this._syncRowSelectionState();
364
- const s = this._bodyRows(), n = s.flatMap((a, l) => this._selectedRows.has(a) ? [l] : []), o = s.filter((a) => this._selectedRows.has(a)).map((a) => this._rowValues(a));
365
+ const s = this.hasAttribute("multi-select"), e = this._selectedRows.has(t);
366
+ s || this._selectedRows.clear(), e && s ? this._selectedRows.delete(t) : this._selectedRows.add(t), this._syncRowSelectionState();
367
+ const r = this._bodyRows(), n = r.flatMap((a, l) => this._selectedRows.has(a) ? [l] : []), o = r.filter((a) => this._selectedRows.has(a)).map((a) => this._rowValues(a));
365
368
  this.dispatchEvent(
366
369
  new CustomEvent("row-select", {
367
370
  detail: {
368
- index: s.indexOf(t),
371
+ index: r.indexOf(t),
369
372
  selected: this._selectedRows.has(t),
370
373
  indices: n,
371
374
  rows: o
@@ -376,9 +379,9 @@ class _ extends m {
376
379
  }
377
380
  _onClick(t) {
378
381
  if (!this._table) return;
379
- const r = t.target;
382
+ const s = t.target;
380
383
  if (this.hasAttribute("sortable")) {
381
- const e = r.closest("th");
384
+ const e = s.closest("th");
382
385
  if (e && this._table.contains(e)) {
383
386
  const n = this._headerCells().indexOf(e);
384
387
  if (n >= 0) {
@@ -388,31 +391,31 @@ class _ extends m {
388
391
  }
389
392
  }
390
393
  if (this.hasAttribute("selectable")) {
391
- const e = r.closest("tbody tr");
394
+ const e = s.closest("tbody tr");
392
395
  e && this._table.contains(e) && this._toggleRowSelection(e);
393
396
  }
394
397
  }
395
398
  _onKeyDown(t) {
396
399
  if (!this._table) return;
397
- const r = t.key;
398
- if (r !== "Enter" && r !== " ") return;
400
+ const s = t.key;
401
+ if (s !== "Enter" && s !== " ") return;
399
402
  const e = t.target;
400
403
  if (this.hasAttribute("sortable")) {
401
- const s = e.closest("th");
402
- if (s && this._table.contains(s)) {
403
- const o = this._headerCells().indexOf(s);
404
+ const r = e.closest("th");
405
+ if (r && this._table.contains(r)) {
406
+ const o = this._headerCells().indexOf(r);
404
407
  if (o >= 0) {
405
- t.preventDefault(), this._sortByColumn(o, s);
408
+ t.preventDefault(), this._sortByColumn(o, r);
406
409
  return;
407
410
  }
408
411
  }
409
412
  }
410
413
  if (this.hasAttribute("selectable")) {
411
- const s = e.closest("tbody tr");
412
- s && this._table.contains(s) && (t.preventDefault(), this._toggleRowSelection(s));
414
+ const r = e.closest("tbody tr");
415
+ r && this._table.contains(r) && (t.preventDefault(), this._toggleRowSelection(r));
413
416
  }
414
417
  }
415
- shouldRenderOnAttributeChange(t, r, e) {
418
+ shouldRenderOnAttributeChange(t, s, e) {
416
419
  return !1;
417
420
  }
418
421
  }
package/dist/tabs.cjs.js CHANGED
@@ -4,7 +4,7 @@
4
4
  --ui-tabs-panel-bg: var(--ui-color-surface, #ffffff);
5
5
  --ui-tabs-border: var(--ui-color-border, #cbd5e1);
6
6
  --ui-tabs-text: var(--ui-color-text, #0f172a);
7
- --ui-tabs-muted: var(--ui-color-muted, #64748b);
7
+ --ui-tabs-muted: var(--ui-color-muted, #526175);
8
8
  --ui-tabs-accent: var(--ui-tabs-active-bg, var(--ui-color-primary, #2563eb));
9
9
  --ui-tabs-active-text: color-mix(in srgb, var(--ui-tabs-accent) 82%, #0f172a 18%);
10
10
  --ui-tabs-focus: var(--ui-color-focus-ring, #2563eb);
@@ -298,18 +298,18 @@
298
298
  --ui-tabs-nav-bg: var(--ui-tabs-accent);
299
299
  --ui-tabs-panel-bg: var(--ui-color-surface, #ffffff);
300
300
  --ui-tabs-border: color-mix(in srgb, var(--ui-tabs-accent) 76%, #0f172a 24%);
301
- --ui-tabs-muted: color-mix(in srgb, var(--ui-color-primary-foreground, #ffffff) 80%, transparent);
301
+ --ui-tabs-muted: color-mix(in srgb, var(--ui-color-primary-foreground, var(--ui-color-foreground-on-primary, #ffffff)) 94%, transparent);
302
302
  --ui-tabs-active-text: color-mix(in srgb, var(--ui-tabs-accent) 78%, #0f172a 22%);
303
- --ui-tabs-focus: color-mix(in srgb, var(--ui-color-primary-foreground, #ffffff) 72%, var(--ui-tabs-accent));
303
+ --ui-tabs-focus: color-mix(in srgb, var(--ui-color-primary-foreground, var(--ui-color-foreground-on-primary, #ffffff)) 72%, var(--ui-tabs-accent));
304
304
  }
305
305
 
306
306
  :host([variant="solid"]) .tab:hover {
307
- background: color-mix(in srgb, var(--ui-color-primary-foreground, #ffffff) 14%, transparent);
308
- color: var(--ui-color-primary-foreground, #ffffff);
307
+ background: color-mix(in srgb, var(--ui-color-primary-foreground, var(--ui-color-foreground-on-primary, #ffffff)) 14%, transparent);
308
+ color: var(--ui-color-primary-foreground, var(--ui-color-foreground-on-primary, #ffffff));
309
309
  }
310
310
 
311
311
  :host([variant="solid"]) .tab[aria-selected="true"] {
312
- background: var(--ui-color-primary-foreground, #ffffff);
312
+ background: var(--ui-color-primary-foreground, var(--ui-color-foreground-on-primary, #ffffff));
313
313
  border-color: color-mix(in srgb, var(--ui-tabs-accent) 44%, var(--ui-tabs-border));
314
314
  color: var(--ui-tabs-active-text);
315
315
  }
@@ -433,11 +433,11 @@
433
433
  }
434
434
 
435
435
  :host([tone="success"]) {
436
- --ui-tabs-accent: var(--ui-color-success, #16a34a);
436
+ --ui-tabs-accent: var(--ui-color-success, #15803d);
437
437
  }
438
438
 
439
439
  :host([tone="warning"]) {
440
- --ui-tabs-accent: var(--ui-color-warning, #d97706);
440
+ --ui-tabs-accent: var(--ui-color-warning, #b45309);
441
441
  }
442
442
 
443
443
  :host([tone="danger"]) {
@@ -483,33 +483,32 @@
483
483
  border-color: Highlight;
484
484
  }
485
485
  }
486
- `,p="data-ui-tabs-auto-label";function f(h){return String(h).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function g(h){if(h==null)return!1;const t=String(h).toLowerCase();return t!=="false"&&t!=="0"&&t!=="off"}const w=new Set(["orientation","activation","headless","variant","size","density","tone","stretched","shape","elevation","bare"]);class x extends y.ElementBase{constructor(){super(),this._uid=`ui-tabs-${Math.random().toString(36).slice(2,9)}`,this._observer=null,this._resizeObserver=null,this._isSyncing=!1,this._isSyncingSelectionAttributes=!1,this._focusIndex=-1,this._onClick=this._onClick.bind(this),this._onKeyDown=this._onKeyDown.bind(this),this._onWindowResize=this._onWindowResize.bind(this)}static get observedAttributes(){return["selected","value","orientation","activation","headless","variant","size","density","tone","stretched","shape","elevation","loop","bare"]}connectedCallback(){super.connectedCallback(),this.root.addEventListener("click",this._onClick),this.root.addEventListener("keydown",this._onKeyDown),this._observer=new MutationObserver(()=>{this._isSyncing||this.requestRender()}),this._observer.observe(this,{childList:!0,subtree:!0,characterData:!0,attributes:!0,attributeFilter:["slot","data-label","data-value","data-icon","data-disabled","disabled","data-active"]}),typeof ResizeObserver<"u"?(this._resizeObserver=new ResizeObserver(()=>this._syncSelectionUi()),this._resizeObserver.observe(this)):window.addEventListener("resize",this._onWindowResize),this._syncSelectionUi()}disconnectedCallback(){this.root.removeEventListener("click",this._onClick),this.root.removeEventListener("keydown",this._onKeyDown),this._observer&&(this._observer.disconnect(),this._observer=null),this._resizeObserver?(this._resizeObserver.disconnect(),this._resizeObserver=null):window.removeEventListener("resize",this._onWindowResize),super.disconnectedCallback()}attributeChangedCallback(t,e,r){if(e!==r){if(t==="selected"||t==="value"){this._isSyncingSelectionAttributes||this._syncSelectionUi();return}w.has(t)&&this.isConnected&&this.requestRender()}}get selected(){return this.getAttribute("selected")||"0"}set selected(t){const e=String(t);e?this.setAttribute("selected",e):this.removeAttribute("selected")}_sourceTabs(){return Array.from(this.querySelectorAll('[slot="tab"]'))}_sourcePanels(){return Array.from(this.querySelectorAll('[slot="panel"]'))}_tabsModel(){return this._sourceTabs().map((t,e)=>{const r=t.getAttribute("data-value")||t.getAttribute("value")||String(e),a=t.getAttribute("data-label")||t.textContent?.trim()||`Tab ${e+1}`,i=t.getAttribute("data-icon")||"",s=t.hasAttribute("disabled")||g(t.getAttribute("data-disabled")),n=`${this._uid}-tab-${e}`,o=`${this._uid}-panel-${e}`;return{index:e,value:r,label:a,icon:i,disabled:s,tabId:n,panelId:o}})}_resolveSelectedIndex(t){if(!t.length)return-1;const e=this.getAttribute("selected"),r=this.getAttribute("value"),a=this._sourceTabs();let i=-1;if(e!=null&&e!==""){const s=Number(e);Number.isFinite(s)?i=Math.trunc(s):i=t.findIndex(n=>n.value===e)}return i<0&&r&&(i=t.findIndex(s=>s.value===r)),i<0&&(i=t.findIndex((s,n)=>!!a[n]?.hasAttribute("data-active")&&!s.disabled)),(i<0||!t[i]||t[i].disabled)&&(i=t.findIndex(s=>!s.disabled)),i}_syncSelectedAttributes(t,e){const r=t[e];this._isSyncingSelectionAttributes=!0;try{if(!r){this.removeAttribute("selected"),this.removeAttribute("value");return}this.getAttribute("selected")!==String(e)&&this.setAttribute("selected",String(e)),this.getAttribute("value")!==r.value&&this.setAttribute("value",r.value)}finally{this._isSyncingSelectionAttributes=!1}}_emit(t,e,r){const a=e[r];if(!a)return;const i={selected:r,index:r,value:a.value,label:a.label,tabId:a.tabId,panelId:a.panelId};this.dispatchEvent(new CustomEvent(t,{detail:i,bubbles:!0,composed:!0}))}_setSelectedByIndex(t,e,r){const a=t[e];if(!a||a.disabled)return;if(this._resolveSelectedIndex(t)===e){this._focusTab(e);return}this._focusIndex=e,this.setAttribute("selected",String(e)),this.setAttribute("value",a.value),r&&(this._emit("change",t,e),this._emit("select",t,e))}_syncSelectionUi(){if(!this.isConnected)return;if(!this.root.querySelector(".nav")){this.requestRender();return}const t=this._tabsModel();if(!t.length)return;const e=this._resolveSelectedIndex(t),r=this._resolveFocusIndex(t,e);this._syncSelectedAttributes(t,e);const a=Array.from(this.root.querySelectorAll(".tab"));a.forEach((s,n)=>{const o=t[n];if(!o)return;const l=n===e;s.setAttribute("aria-selected",l?"true":"false"),s.setAttribute("aria-controls",o.panelId),s.setAttribute("aria-disabled",o.disabled?"true":"false"),o.disabled?s.setAttribute("disabled",""):s.removeAttribute("disabled")}),d.syncRovingTabStops(a,a[r]||null,{activeAttribute:null});const i=t[e];this._syncIndicator(e),i?(this.setAttribute("aria-activedescendant",i.tabId),this.setAttribute("aria-controls",i.panelId),this._scrollSelectedTabIntoView(e)):(this.removeAttribute("aria-activedescendant"),this.removeAttribute("aria-controls")),this._syncPanels(t,e)}_syncIndicator(t){const e=this.root.querySelector(".nav");if(!e)return;const r=this.getAttribute("variant")||"default",a=r==="indicator";if(!a&&!(r==="indicator-line")){e.removeAttribute("data-indicator-ready"),e.style.removeProperty("--ui-tabs-indicator-x"),e.style.removeProperty("--ui-tabs-indicator-y"),e.style.removeProperty("--ui-tabs-indicator-w"),e.style.removeProperty("--ui-tabs-indicator-h");return}const s=this.root.querySelector(`.tab[data-index="${t}"]`);if(!s){e.removeAttribute("data-indicator-ready");return}const n=this.getAttribute("orientation")==="vertical"?"vertical":"horizontal",o=getComputedStyle(this).direction==="rtl";let l=s.offsetLeft,u=s.offsetTop,c=s.offsetWidth,b=s.offsetHeight;a?(l+=2,u+=2,c=Math.max(0,c-4),b=Math.max(0,b-4)):n==="vertical"?(u+=5,b=Math.max(8,b-10),c=3,l+=o?s.offsetWidth-3-2:2):(l+=8,c=Math.max(12,c-16),b=2,u+=s.offsetHeight-2-2),e.style.setProperty("--ui-tabs-indicator-x",`${l}px`),e.style.setProperty("--ui-tabs-indicator-y",`${u}px`),e.style.setProperty("--ui-tabs-indicator-w",`${c}px`),e.style.setProperty("--ui-tabs-indicator-h",`${b}px`),e.setAttribute("data-indicator-ready","true")}_syncPanels(t,e){const r=this._sourcePanels(),a=this.root.querySelector(".panel-wrap");a&&(r.length?a.removeAttribute("hidden"):a.setAttribute("hidden","")),this._isSyncing=!0;try{r.forEach((i,s)=>{const n=t[s],o=s===e;i.id=n?.panelId||`${this._uid}-panel-${s}`,i.setAttribute("role","tabpanel"),i.setAttribute("tabindex",o?"0":"-1"),i.setAttribute("aria-hidden",o?"false":"true"),n&&(i.getAttribute("aria-labelledby")===n.tabId&&i.removeAttribute("aria-labelledby"),i.hasAttribute("aria-labelledby")||i.hasAttribute("aria-label")&&!i.hasAttribute(p)||(i.setAttribute("aria-label",n.label),i.setAttribute(p,""))),o?i.removeAttribute("hidden"):i.setAttribute("hidden","")})}finally{this._isSyncing=!1}}_enabledIndices(t){return t.filter(e=>!e.disabled).map(e=>e.index)}_resolveFocusIndex(t,e){const r=d.resolveRovingFocusIndex(t,{activeIndex:this._focusIndex,selectedIndex:e,getDisabled:a=>a.disabled});return this._focusIndex=r,r}_onWindowResize(){this._syncSelectionUi()}_focusTab(t){this._focusIndex=t;const e=this.root.querySelector(`.tab[data-index="${t}"]`),r=Array.from(this.root.querySelectorAll(".tab"));d.syncRovingTabStops(r,e,{activeAttribute:null}),d.focusRovingItem(e)}_scrollSelectedTabIntoView(t){const e=this.root.querySelector(".nav"),r=this.root.querySelector(`.tab[data-index="${t}"]`);if(!e||!r)return;const a=this.getAttribute("orientation")!=="vertical",i=typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches;typeof r.scrollIntoView=="function"&&r.scrollIntoView({behavior:i?"auto":"smooth",block:"nearest",inline:a?"center":"nearest"})}_onClick(t){const r=t.target?.closest(".tab");if(!r||r.disabled)return;const a=Number(r.getAttribute("data-index"));if(!Number.isFinite(a))return;const i=this._tabsModel();this._setSelectedByIndex(i,a,!0)}_onKeyDown(t){const r=t.target?.closest(".tab");if(!r)return;const a=this._tabsModel();if(!a.length)return;const i=this.getAttribute("orientation")==="vertical"?"vertical":"horizontal",s=this.getAttribute("activation")==="manual"?"manual":"auto",n=!this.hasAttribute("loop")||g(this.getAttribute("loop")),o=getComputedStyle(this).direction==="rtl",l=Number(r.getAttribute("data-index"));if(!Number.isFinite(l))return;const u=c=>{const b=d.moveRovingFocusIndex(a,l,c,{wrap:n,fallbackIndex:this._resolveFocusIndex(a,this._resolveSelectedIndex(a)),getDisabled:v=>v.disabled});b!=null&&(this._focusTab(b),s==="auto"?this._setSelectedByIndex(a,b,!0):this._emit("focus",a,b))};if(i==="horizontal"&&(t.key==="ArrowRight"&&!o||t.key==="ArrowLeft"&&o)||i==="vertical"&&t.key==="ArrowDown"){t.preventDefault(),u(1);return}if(i==="horizontal"&&(t.key==="ArrowLeft"&&!o||t.key==="ArrowRight"&&o)||i==="vertical"&&t.key==="ArrowUp"){t.preventDefault(),u(-1);return}if(t.key==="Home"){t.preventDefault();const c=d.getRovingFocusBoundaryIndex(a,"first",b=>b.disabled);if(c<0)return;this._focusTab(c),s==="auto"?this._setSelectedByIndex(a,c,!0):this._emit("focus",a,c);return}if(t.key==="End"){t.preventDefault();const c=d.getRovingFocusBoundaryIndex(a,"last",b=>b.disabled);if(c<0)return;this._focusTab(c),s==="auto"?this._setSelectedByIndex(a,c,!0):this._emit("focus",a,c);return}(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),this._setSelectedByIndex(a,l,!0))}render(){const t=this._tabsModel(),e=this._resolveSelectedIndex(t),r=this._resolveFocusIndex(t,e);this._syncSelectedAttributes(t,e);const a=this.getAttribute("orientation")==="vertical"?"vertical":"horizontal",i=t.map(n=>{const o=n.index===e,l=n.icon?`<span class="tab-icon" aria-hidden="true">${f(n.icon)}</span>`:"";return`
486
+ `,f="data-ui-tabs-auto-label";function p(h){return String(h).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function g(h){if(h==null)return!1;const t=String(h).toLowerCase();return t!=="false"&&t!=="0"&&t!=="off"}const w=new Set(["aria-label","aria-labelledby","orientation","activation","headless","variant","size","density","tone","stretched","shape","elevation","bare"]);class x extends y.ElementBase{constructor(){super(),this._uid=`ui-tabs-${Math.random().toString(36).slice(2,9)}`,this._observer=null,this._resizeObserver=null,this._isSyncing=!1,this._isSyncingSelectionAttributes=!1,this._focusIndex=-1,this._onClick=this._onClick.bind(this),this._onKeyDown=this._onKeyDown.bind(this),this._onWindowResize=this._onWindowResize.bind(this)}static get observedAttributes(){return["selected","value","orientation","activation","headless","variant","size","density","tone","stretched","shape","elevation","loop","bare","aria-label","aria-labelledby"]}connectedCallback(){super.connectedCallback(),this.root.addEventListener("click",this._onClick),this.root.addEventListener("keydown",this._onKeyDown),this._observer=new MutationObserver(()=>{this._isSyncing||this.requestRender()}),this._observer.observe(this,{childList:!0,subtree:!0,characterData:!0,attributes:!0,attributeFilter:["slot","data-label","data-value","data-icon","data-disabled","disabled","data-active"]}),typeof ResizeObserver<"u"?(this._resizeObserver=new ResizeObserver(()=>this._syncSelectionUi()),this._resizeObserver.observe(this)):window.addEventListener("resize",this._onWindowResize),this._syncSelectionUi()}disconnectedCallback(){this.root.removeEventListener("click",this._onClick),this.root.removeEventListener("keydown",this._onKeyDown),this._observer&&(this._observer.disconnect(),this._observer=null),this._resizeObserver?(this._resizeObserver.disconnect(),this._resizeObserver=null):window.removeEventListener("resize",this._onWindowResize),super.disconnectedCallback()}attributeChangedCallback(t,e,r){if(e!==r){if(t==="selected"||t==="value"){this._isSyncingSelectionAttributes||this._syncSelectionUi();return}w.has(t)&&this.isConnected&&this.requestRender()}}get selected(){return this.getAttribute("selected")||"0"}set selected(t){const e=String(t);e?this.setAttribute("selected",e):this.removeAttribute("selected")}_sourceTabs(){return Array.from(this.querySelectorAll('[slot="tab"]'))}_sourcePanels(){return Array.from(this.querySelectorAll('[slot="panel"]'))}_tabsModel(){return this._sourceTabs().map((t,e)=>{const r=t.getAttribute("data-value")||t.getAttribute("value")||String(e),a=t.getAttribute("data-label")||t.textContent?.trim()||`Tab ${e+1}`,i=t.getAttribute("data-icon")||"",s=t.hasAttribute("disabled")||g(t.getAttribute("data-disabled")),c=`${this._uid}-tab-${e}`,b=`${this._uid}-panel-${e}`;return{index:e,value:r,label:a,icon:i,disabled:s,tabId:c,panelId:b}})}_resolveSelectedIndex(t){if(!t.length)return-1;const e=this.getAttribute("selected"),r=this.getAttribute("value"),a=this._sourceTabs();let i=-1;if(e!=null&&e!==""){const s=Number(e);Number.isFinite(s)?i=Math.trunc(s):i=t.findIndex(c=>c.value===e)}return i<0&&r&&(i=t.findIndex(s=>s.value===r)),i<0&&(i=t.findIndex((s,c)=>!!a[c]?.hasAttribute("data-active")&&!s.disabled)),(i<0||!t[i]||t[i].disabled)&&(i=t.findIndex(s=>!s.disabled)),i}_syncSelectedAttributes(t,e){const r=t[e];this._isSyncingSelectionAttributes=!0;try{if(!r){this.removeAttribute("selected"),this.removeAttribute("value");return}this.getAttribute("selected")!==String(e)&&this.setAttribute("selected",String(e)),this.getAttribute("value")!==r.value&&this.setAttribute("value",r.value)}finally{this._isSyncingSelectionAttributes=!1}}_emit(t,e,r){const a=e[r];if(!a)return;const i={selected:r,index:r,value:a.value,label:a.label,tabId:a.tabId,panelId:a.panelId};this.dispatchEvent(new CustomEvent(t,{detail:i,bubbles:!0,composed:!0}))}_setSelectedByIndex(t,e,r){const a=t[e];if(!a||a.disabled)return;if(this._resolveSelectedIndex(t)===e){this._focusTab(e);return}this._focusIndex=e,this.setAttribute("selected",String(e)),this.setAttribute("value",a.value),r&&(this._emit("change",t,e),this._emit("select",t,e))}_syncSelectionUi(){if(!this.isConnected)return;if(!this.root.querySelector(".nav")){this.requestRender();return}const t=this._tabsModel();if(!t.length)return;const e=this._resolveSelectedIndex(t),r=this._resolveFocusIndex(t,e);this._syncSelectedAttributes(t,e);const a=Array.from(this.root.querySelectorAll(".tab"));a.forEach((s,c)=>{const b=t[c];if(!b)return;const o=c===e;s.setAttribute("aria-selected",o?"true":"false"),s.setAttribute("aria-disabled",b.disabled?"true":"false"),b.disabled?s.setAttribute("disabled",""):s.removeAttribute("disabled")}),d.syncRovingTabStops(a,a[r]||null,{activeAttribute:null});const i=t[e];this._syncIndicator(e),this._clearCrossRootReferences(),i&&this._scrollSelectedTabIntoView(e),this._syncPanels(t,e)}_syncIndicator(t){const e=this.root.querySelector(".nav");if(!e)return;const r=this.getAttribute("variant")||"default",a=r==="indicator";if(!a&&!(r==="indicator-line")){e.removeAttribute("data-indicator-ready"),e.style.removeProperty("--ui-tabs-indicator-x"),e.style.removeProperty("--ui-tabs-indicator-y"),e.style.removeProperty("--ui-tabs-indicator-w"),e.style.removeProperty("--ui-tabs-indicator-h");return}const s=this.root.querySelector(`.tab[data-index="${t}"]`);if(!s){e.removeAttribute("data-indicator-ready");return}const c=this.getAttribute("orientation")==="vertical"?"vertical":"horizontal",b=getComputedStyle(this).direction==="rtl";let o=s.offsetLeft,u=s.offsetTop,n=s.offsetWidth,l=s.offsetHeight;a?(o+=2,u+=2,n=Math.max(0,n-4),l=Math.max(0,l-4)):c==="vertical"?(u+=5,l=Math.max(8,l-10),n=3,o+=b?s.offsetWidth-3-2:2):(o+=8,n=Math.max(12,n-16),l=2,u+=s.offsetHeight-2-2),e.style.setProperty("--ui-tabs-indicator-x",`${o}px`),e.style.setProperty("--ui-tabs-indicator-y",`${u}px`),e.style.setProperty("--ui-tabs-indicator-w",`${n}px`),e.style.setProperty("--ui-tabs-indicator-h",`${l}px`),e.setAttribute("data-indicator-ready","true")}_clearCrossRootReferences(){this.removeAttribute("aria-activedescendant"),this.removeAttribute("aria-controls")}_syncPanels(t,e){const r=this._sourcePanels(),a=this.root.querySelector(".panel-wrap");a&&(r.length?a.removeAttribute("hidden"):a.setAttribute("hidden","")),this._isSyncing=!0;try{r.forEach((i,s)=>{const c=t[s],b=s===e;i.id=c?.panelId||`${this._uid}-panel-${s}`,i.setAttribute("role","tabpanel"),i.setAttribute("tabindex",b?"0":"-1"),i.setAttribute("aria-hidden",b?"false":"true"),c&&(i.getAttribute("aria-labelledby")===c.tabId&&i.removeAttribute("aria-labelledby"),i.hasAttribute("aria-labelledby")||i.hasAttribute("aria-label")&&!i.hasAttribute(f)||(i.setAttribute("aria-label",c.label),i.setAttribute(f,""))),b?i.removeAttribute("hidden"):i.setAttribute("hidden","")})}finally{this._isSyncing=!1}}_enabledIndices(t){return t.filter(e=>!e.disabled).map(e=>e.index)}_resolveFocusIndex(t,e){const r=d.resolveRovingFocusIndex(t,{activeIndex:this._focusIndex,selectedIndex:e,getDisabled:a=>a.disabled});return this._focusIndex=r,r}_onWindowResize(){this._syncSelectionUi()}_focusTab(t){this._focusIndex=t;const e=this.root.querySelector(`.tab[data-index="${t}"]`),r=Array.from(this.root.querySelectorAll(".tab"));d.syncRovingTabStops(r,e,{activeAttribute:null}),d.focusRovingItem(e)}_scrollSelectedTabIntoView(t){const e=this.root.querySelector(".nav"),r=this.root.querySelector(`.tab[data-index="${t}"]`);if(!e||!r)return;const a=this.getAttribute("orientation")!=="vertical",i=typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches;typeof r.scrollIntoView=="function"&&r.scrollIntoView({behavior:i?"auto":"smooth",block:"nearest",inline:a?"center":"nearest"})}_onClick(t){const r=t.target?.closest(".tab");if(!r||r.disabled)return;const a=Number(r.getAttribute("data-index"));if(!Number.isFinite(a))return;const i=this._tabsModel();this._setSelectedByIndex(i,a,!0)}_onKeyDown(t){const r=t.target?.closest(".tab");if(!r)return;const a=this._tabsModel();if(!a.length)return;const i=this.getAttribute("orientation")==="vertical"?"vertical":"horizontal",s=this.getAttribute("activation")==="manual"?"manual":"auto",c=!this.hasAttribute("loop")||g(this.getAttribute("loop")),b=getComputedStyle(this).direction==="rtl",o=Number(r.getAttribute("data-index"));if(!Number.isFinite(o))return;const u=n=>{const l=d.moveRovingFocusIndex(a,o,n,{wrap:c,fallbackIndex:this._resolveFocusIndex(a,this._resolveSelectedIndex(a)),getDisabled:v=>v.disabled});l!=null&&(this._focusTab(l),s==="auto"?this._setSelectedByIndex(a,l,!0):this._emit("focus",a,l))};if(i==="horizontal"&&(t.key==="ArrowRight"&&!b||t.key==="ArrowLeft"&&b)||i==="vertical"&&t.key==="ArrowDown"){t.preventDefault(),u(1);return}if(i==="horizontal"&&(t.key==="ArrowLeft"&&!b||t.key==="ArrowRight"&&b)||i==="vertical"&&t.key==="ArrowUp"){t.preventDefault(),u(-1);return}if(t.key==="Home"){t.preventDefault();const n=d.getRovingFocusBoundaryIndex(a,"first",l=>l.disabled);if(n<0)return;this._focusTab(n),s==="auto"?this._setSelectedByIndex(a,n,!0):this._emit("focus",a,n);return}if(t.key==="End"){t.preventDefault();const n=d.getRovingFocusBoundaryIndex(a,"last",l=>l.disabled);if(n<0)return;this._focusTab(n),s==="auto"?this._setSelectedByIndex(a,n,!0):this._emit("focus",a,n);return}(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),this._setSelectedByIndex(a,o,!0))}render(){const t=this._tabsModel(),e=this._resolveSelectedIndex(t),r=this._resolveFocusIndex(t,e);this._syncSelectedAttributes(t,e);const a=this.getAttribute("orientation")==="vertical"?"vertical":"horizontal",i=(this.getAttribute("aria-label")||"").trim(),s=(this.getAttribute("aria-labelledby")||"").trim(),c=(i?` aria-label="${p(i)}"`:"")+(s?` aria-labelledby="${p(s)}"`:""),b=t.map(o=>{const u=o.index===e,n=o.icon?`<span class="tab-icon" aria-hidden="true">${p(o.icon)}</span>`:"";return`
487
487
  <button
488
488
  type="button"
489
489
  class="tab"
490
490
  part="tab"
491
- id="${n.tabId}"
491
+ id="${o.tabId}"
492
492
  role="tab"
493
- data-index="${n.index}"
494
- aria-selected="${o?"true":"false"}"
495
- aria-controls="${n.panelId}"
496
- aria-disabled="${n.disabled?"true":"false"}"
497
- tabindex="${n.index===r&&!n.disabled?"0":"-1"}"
498
- ${n.disabled?"disabled":""}
493
+ data-index="${o.index}"
494
+ aria-selected="${u?"true":"false"}"
495
+ aria-disabled="${o.disabled?"true":"false"}"
496
+ tabindex="${o.index===r&&!o.disabled?"0":"-1"}"
497
+ ${o.disabled?"disabled":""}
499
498
  >
500
- ${l}
501
- <span class="tab-label">${f(n.label)}</span>
499
+ ${n}
500
+ <span class="tab-label">${p(o.label)}</span>
502
501
  </button>
503
502
  `}).join("");this.setContent(`
504
503
  <style>${_}</style>
505
504
  <section class="shell" part="shell">
506
- <div class="nav" role="tablist" aria-orientation="${a}" part="nav">
505
+ <div class="nav" role="tablist" aria-orientation="${a}"${c} part="nav">
507
506
  <span class="indicator" part="indicator" aria-hidden="true"></span>
508
- ${i}
507
+ ${b}
509
508
  </div>
510
509
  <div class="panel-wrap" part="panel-wrap" aria-live="polite">
511
510
  <slot name="panel"></slot>
512
511
  </div>
513
512
  </section>
514
513
  <slot class="source-tabs" name="tab"></slot>
515
- `);const s=t[e];s?(this.setAttribute("aria-activedescendant",s.tabId),this.setAttribute("aria-controls",s.panelId)):(this.removeAttribute("aria-activedescendant"),this.removeAttribute("aria-controls")),this._syncIndicator(e),this._syncPanels(t,e)}}typeof customElements<"u"&&!customElements.get("ui-tabs")&&customElements.define("ui-tabs",x);exports.UITabs=x;
514
+ `),this._clearCrossRootReferences(),this._syncIndicator(e),this._syncPanels(t,e)}}typeof customElements<"u"&&!customElements.get("ui-tabs")&&customElements.define("ui-tabs",x);exports.UITabs=x;