@sekiui/elements 0.1.6 → 0.1.7

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 (213) hide show
  1. package/dist/cjs/accordion-ids-Cjq6aIVd.js +42 -0
  2. package/dist/cjs/direction-Dt-r6_ec.js +14 -0
  3. package/dist/cjs/host-id-C3XieWsk.js +32 -0
  4. package/dist/cjs/layout-DR0fTNAb.js +109 -0
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/seki-accordion-content.cjs.entry.js +27 -25
  7. package/dist/cjs/seki-accordion-item.cjs.entry.js +13 -29
  8. package/dist/cjs/seki-accordion-trigger.cjs.entry.js +36 -28
  9. package/dist/cjs/seki-accordion.cjs.entry.js +18 -12
  10. package/dist/cjs/seki-carousel-dots.cjs.entry.js +15 -7
  11. package/dist/cjs/seki-carousel-next.cjs.entry.js +1 -1
  12. package/dist/cjs/seki-carousel-previous.cjs.entry.js +1 -1
  13. package/dist/cjs/seki-carousel.cjs.entry.js +51 -6
  14. package/dist/cjs/seki-combobox.cjs.entry.js +80 -1
  15. package/dist/cjs/seki-context-menu-content.cjs.entry.js +13 -16
  16. package/dist/cjs/seki-context-menu.cjs.entry.js +14 -9
  17. package/dist/cjs/seki-dropdown-menu-content.cjs.entry.js +13 -16
  18. package/dist/cjs/seki-dropdown-menu-trigger.cjs.entry.js +7 -15
  19. package/dist/cjs/seki-dropdown-menu.cjs.entry.js +14 -9
  20. package/dist/cjs/seki-hover-card-content.cjs.entry.js +27 -33
  21. package/dist/cjs/seki-hover-card-trigger.cjs.entry.js +10 -25
  22. package/dist/cjs/seki-hover-card.cjs.entry.js +7 -6
  23. package/dist/cjs/seki-radio-group-item.cjs.entry.js +18 -1
  24. package/dist/cjs/seki-radio-group.cjs.entry.js +8 -1
  25. package/dist/cjs/seki-resizable-handle.cjs.entry.js +72 -15
  26. package/dist/cjs/seki-resizable-panel-group.cjs.entry.js +11 -107
  27. package/dist/cjs/seki-resizable-panel.cjs.entry.js +5 -3
  28. package/dist/cjs/seki-tabs-content.cjs.entry.js +21 -19
  29. package/dist/cjs/seki-tabs-list.cjs.entry.js +8 -24
  30. package/dist/cjs/seki-tabs-trigger.cjs.entry.js +23 -31
  31. package/dist/cjs/seki-tabs.cjs.entry.js +15 -18
  32. package/dist/cjs/sekiui.cjs.js +1 -1
  33. package/dist/cjs/{tab-ids-BzpIZnUS.js → tab-ids-BOdn1Fu2.js} +14 -0
  34. package/dist/collection/collection-manifest.json +2 -2
  35. package/dist/collection/components/accordion/accordion-ids.js +36 -0
  36. package/dist/collection/components/accordion/seki-accordion-content.js +27 -25
  37. package/dist/collection/components/accordion/seki-accordion-item.js +12 -29
  38. package/dist/collection/components/accordion/seki-accordion-trigger.css +6 -2
  39. package/dist/collection/components/accordion/seki-accordion-trigger.js +37 -28
  40. package/dist/collection/components/accordion/seki-accordion.js +40 -11
  41. package/dist/collection/components/carousel/seki-carousel-dots.js +15 -7
  42. package/dist/collection/components/carousel/seki-carousel-navigation.css +9 -4
  43. package/dist/collection/components/carousel/seki-carousel.js +51 -6
  44. package/dist/collection/components/combobox/seki-combobox.js +103 -1
  45. package/dist/collection/components/context-menu/seki-context-menu-content.js +13 -16
  46. package/dist/collection/components/context-menu/seki-context-menu.js +31 -9
  47. package/dist/collection/components/dropdown-menu/seki-dropdown-menu-content.js +13 -16
  48. package/dist/collection/components/dropdown-menu/seki-dropdown-menu-trigger.js +7 -15
  49. package/dist/collection/components/dropdown-menu/seki-dropdown-menu.js +31 -9
  50. package/dist/collection/components/hover-card/seki-hover-card-content.js +27 -33
  51. package/dist/collection/components/hover-card/seki-hover-card-trigger.js +10 -25
  52. package/dist/collection/components/hover-card/seki-hover-card.js +24 -6
  53. package/dist/collection/components/radio-group/seki-radio-group-item.js +18 -1
  54. package/dist/collection/components/radio-group/seki-radio-group.js +25 -1
  55. package/dist/collection/components/resizable/layout.js +2 -0
  56. package/dist/collection/components/resizable/seki-resizable-handle.css +6 -2
  57. package/dist/collection/components/resizable/seki-resizable-handle.js +71 -14
  58. package/dist/collection/components/resizable/seki-resizable-panel-group.js +5 -2
  59. package/dist/collection/components/resizable/seki-resizable-panel.js +5 -3
  60. package/dist/collection/components/tabs/seki-tabs-content.js +24 -19
  61. package/dist/collection/components/tabs/seki-tabs-list.js +8 -24
  62. package/dist/collection/components/tabs/seki-tabs-trigger.js +24 -19
  63. package/dist/collection/components/tabs/seki-tabs.js +34 -18
  64. package/dist/collection/components/tabs/tab-ids.js +13 -0
  65. package/dist/collection/utils/host-id.js +27 -0
  66. package/dist/components/p-BD28aG2U.js +12 -0
  67. package/dist/components/p-BuvZJ6_r.js +39 -0
  68. package/dist/components/p-DmN32Mrm.js +103 -0
  69. package/dist/components/{p-CmuSriLz.js → p-bxPJJ6k4.js} +14 -1
  70. package/dist/components/p-ppXRAghy.js +29 -0
  71. package/dist/components/seki-accordion-content.js +27 -25
  72. package/dist/components/seki-accordion-item.js +12 -29
  73. package/dist/components/seki-accordion-trigger.js +38 -29
  74. package/dist/components/seki-accordion.js +22 -13
  75. package/dist/components/seki-carousel-dots.js +15 -7
  76. package/dist/components/seki-carousel-next.js +1 -1
  77. package/dist/components/seki-carousel-previous.js +1 -1
  78. package/dist/components/seki-carousel.js +51 -6
  79. package/dist/components/seki-combobox.js +81 -2
  80. package/dist/components/seki-context-menu-content.js +13 -16
  81. package/dist/components/seki-context-menu.js +14 -9
  82. package/dist/components/seki-dropdown-menu-content.js +13 -16
  83. package/dist/components/seki-dropdown-menu-trigger.js +7 -15
  84. package/dist/components/seki-dropdown-menu.js +14 -9
  85. package/dist/components/seki-hover-card-content.js +27 -33
  86. package/dist/components/seki-hover-card-trigger.js +10 -25
  87. package/dist/components/seki-hover-card.js +7 -6
  88. package/dist/components/seki-radio-group-item.js +18 -1
  89. package/dist/components/seki-radio-group.js +8 -1
  90. package/dist/components/seki-resizable-handle.js +72 -15
  91. package/dist/components/seki-resizable-panel-group.js +6 -102
  92. package/dist/components/seki-resizable-panel.js +5 -3
  93. package/dist/components/seki-tabs-content.js +23 -19
  94. package/dist/components/seki-tabs-list.js +8 -24
  95. package/dist/components/seki-tabs-trigger.js +25 -31
  96. package/dist/components/seki-tabs.js +16 -18
  97. package/dist/esm/accordion-ids-D58tRFZv.js +39 -0
  98. package/dist/esm/direction-BD28aG2U.js +12 -0
  99. package/dist/esm/host-id-ppXRAghy.js +29 -0
  100. package/dist/esm/layout-DmN32Mrm.js +103 -0
  101. package/dist/esm/loader.js +1 -1
  102. package/dist/esm/seki-accordion-content.entry.js +27 -25
  103. package/dist/esm/seki-accordion-item.entry.js +13 -29
  104. package/dist/esm/seki-accordion-trigger.entry.js +36 -28
  105. package/dist/esm/seki-accordion.entry.js +18 -12
  106. package/dist/esm/seki-carousel-dots.entry.js +15 -7
  107. package/dist/esm/seki-carousel-next.entry.js +1 -1
  108. package/dist/esm/seki-carousel-previous.entry.js +1 -1
  109. package/dist/esm/seki-carousel.entry.js +51 -6
  110. package/dist/esm/seki-combobox.entry.js +80 -1
  111. package/dist/esm/seki-context-menu-content.entry.js +13 -16
  112. package/dist/esm/seki-context-menu.entry.js +14 -9
  113. package/dist/esm/seki-dropdown-menu-content.entry.js +13 -16
  114. package/dist/esm/seki-dropdown-menu-trigger.entry.js +7 -15
  115. package/dist/esm/seki-dropdown-menu.entry.js +14 -9
  116. package/dist/esm/seki-hover-card-content.entry.js +27 -33
  117. package/dist/esm/seki-hover-card-trigger.entry.js +10 -25
  118. package/dist/esm/seki-hover-card.entry.js +7 -6
  119. package/dist/esm/seki-radio-group-item.entry.js +18 -1
  120. package/dist/esm/seki-radio-group.entry.js +8 -1
  121. package/dist/esm/seki-resizable-handle.entry.js +72 -15
  122. package/dist/esm/seki-resizable-panel-group.entry.js +6 -102
  123. package/dist/esm/seki-resizable-panel.entry.js +5 -3
  124. package/dist/esm/seki-tabs-content.entry.js +21 -19
  125. package/dist/esm/seki-tabs-list.entry.js +8 -24
  126. package/dist/esm/seki-tabs-trigger.entry.js +22 -30
  127. package/dist/esm/seki-tabs.entry.js +15 -18
  128. package/dist/esm/sekiui.js +1 -1
  129. package/dist/esm/{tab-ids-CmuSriLz.js → tab-ids-bxPJJ6k4.js} +14 -1
  130. package/dist/sekiui/p-05646b3d.entry.js +1 -0
  131. package/dist/sekiui/p-06307251.entry.js +1 -0
  132. package/dist/sekiui/p-13206751.entry.js +1 -0
  133. package/dist/sekiui/p-2681547f.entry.js +1 -0
  134. package/dist/sekiui/p-34880473.entry.js +1 -0
  135. package/dist/sekiui/{p-3a950a93.entry.js → p-44c4e0ca.entry.js} +1 -1
  136. package/dist/sekiui/p-45d3e21b.entry.js +1 -0
  137. package/dist/sekiui/p-5a222bfa.entry.js +1 -0
  138. package/dist/sekiui/p-68d2ef55.entry.js +1 -0
  139. package/dist/sekiui/p-78df4dc1.entry.js +1 -0
  140. package/dist/sekiui/p-81e180e1.entry.js +1 -0
  141. package/dist/sekiui/{p-5cb2a9fc.entry.js → p-99aba093.entry.js} +1 -1
  142. package/dist/sekiui/p-BD28aG2U.js +1 -0
  143. package/dist/sekiui/p-BuvZJ6_r.js +1 -0
  144. package/dist/sekiui/p-DmN32Mrm.js +1 -0
  145. package/dist/sekiui/p-ad26ccd9.entry.js +1 -0
  146. package/dist/sekiui/p-b3260d62.entry.js +1 -0
  147. package/dist/sekiui/p-bxPJJ6k4.js +1 -0
  148. package/dist/sekiui/{p-d26b63d0.entry.js → p-c906ad1e.entry.js} +1 -1
  149. package/dist/sekiui/p-cb621f86.entry.js +1 -0
  150. package/dist/sekiui/p-d4863b02.entry.js +1 -0
  151. package/dist/sekiui/p-d81d442f.entry.js +1 -0
  152. package/dist/sekiui/p-d9a625f4.entry.js +1 -0
  153. package/dist/sekiui/p-db922f6f.entry.js +1 -0
  154. package/dist/sekiui/p-e1fbadc1.entry.js +1 -0
  155. package/dist/sekiui/p-e3dc7f49.entry.js +1 -0
  156. package/dist/sekiui/{p-8a96f54c.entry.js → p-ea8654dc.entry.js} +1 -1
  157. package/dist/sekiui/p-eb76021c.entry.js +1 -0
  158. package/dist/sekiui/p-f049f47a.entry.js +1 -0
  159. package/dist/sekiui/p-f0650660.entry.js +1 -0
  160. package/dist/sekiui/p-ppXRAghy.js +1 -0
  161. package/dist/sekiui/sekiui.esm.js +1 -1
  162. package/dist/types/components/accordion/accordion-ids.d.ts +17 -0
  163. package/dist/types/components/accordion/seki-accordion-content.d.ts +3 -3
  164. package/dist/types/components/accordion/seki-accordion-item.d.ts +2 -9
  165. package/dist/types/components/accordion/seki-accordion-trigger.d.ts +4 -4
  166. package/dist/types/components/accordion/seki-accordion.d.ts +7 -2
  167. package/dist/types/components/carousel/seki-carousel.d.ts +10 -0
  168. package/dist/types/components/combobox/seki-combobox.d.ts +13 -0
  169. package/dist/types/components/context-menu/seki-context-menu-content.d.ts +3 -3
  170. package/dist/types/components/context-menu/seki-context-menu.d.ts +6 -0
  171. package/dist/types/components/dropdown-menu/seki-dropdown-menu-content.d.ts +3 -3
  172. package/dist/types/components/dropdown-menu/seki-dropdown-menu-trigger.d.ts +2 -4
  173. package/dist/types/components/dropdown-menu/seki-dropdown-menu.d.ts +6 -0
  174. package/dist/types/components/hover-card/seki-hover-card-content.d.ts +3 -1
  175. package/dist/types/components/hover-card/seki-hover-card-trigger.d.ts +2 -2
  176. package/dist/types/components/hover-card/seki-hover-card.d.ts +5 -1
  177. package/dist/types/components/radio-group/seki-radio-group-item.d.ts +3 -0
  178. package/dist/types/components/radio-group/seki-radio-group.d.ts +14 -0
  179. package/dist/types/components/resizable/layout.d.ts +2 -0
  180. package/dist/types/components/resizable/seki-resizable-handle.d.ts +13 -0
  181. package/dist/types/components/resizable/seki-resizable-panel-group.d.ts +1 -0
  182. package/dist/types/components/resizable/types.d.ts +2 -0
  183. package/dist/types/components/tabs/seki-tabs-content.d.ts +3 -4
  184. package/dist/types/components/tabs/seki-tabs-list.d.ts +2 -5
  185. package/dist/types/components/tabs/seki-tabs-trigger.d.ts +3 -4
  186. package/dist/types/components/tabs/seki-tabs.d.ts +8 -2
  187. package/dist/types/components/tabs/tab-ids.d.ts +5 -0
  188. package/dist/types/components.d.ts +14 -0
  189. package/dist/types/utils/host-id.d.ts +7 -0
  190. package/package.json +1 -1
  191. package/dist/sekiui/p-00ed0a52.entry.js +0 -1
  192. package/dist/sekiui/p-02fe58f7.entry.js +0 -1
  193. package/dist/sekiui/p-044e875d.entry.js +0 -1
  194. package/dist/sekiui/p-1971d77d.entry.js +0 -1
  195. package/dist/sekiui/p-233a4393.entry.js +0 -1
  196. package/dist/sekiui/p-2622ca4c.entry.js +0 -1
  197. package/dist/sekiui/p-28c64e07.entry.js +0 -1
  198. package/dist/sekiui/p-2bd22398.entry.js +0 -1
  199. package/dist/sekiui/p-368d2d15.entry.js +0 -1
  200. package/dist/sekiui/p-49742de9.entry.js +0 -1
  201. package/dist/sekiui/p-5bfb96fd.entry.js +0 -1
  202. package/dist/sekiui/p-5e596590.entry.js +0 -1
  203. package/dist/sekiui/p-78c8c4bf.entry.js +0 -1
  204. package/dist/sekiui/p-88ba7051.entry.js +0 -1
  205. package/dist/sekiui/p-90387022.entry.js +0 -1
  206. package/dist/sekiui/p-CmuSriLz.js +0 -1
  207. package/dist/sekiui/p-af71afe5.entry.js +0 -1
  208. package/dist/sekiui/p-b26b3102.entry.js +0 -1
  209. package/dist/sekiui/p-b43f6733.entry.js +0 -1
  210. package/dist/sekiui/p-bf687983.entry.js +0 -1
  211. package/dist/sekiui/p-eafe8a84.entry.js +0 -1
  212. package/dist/sekiui/p-ec0d8978.entry.js +0 -1
  213. package/dist/sekiui/p-f418ba3a.entry.js +0 -1
@@ -0,0 +1,39 @@
1
+ import { e as effectiveHostId } from './p-ppXRAghy.js';
2
+
3
+ let itemIdCounter = 0;
4
+ const itemIds = new WeakMap();
5
+ /**
6
+ * Generated ids for an accordion item's trigger and content hosts. Derived from
7
+ * one per-`seki-accordion-item` id, so both hosts agree no matter which renders
8
+ * first. The ids live on the light-DOM hosts (siblings in the same root)
9
+ * because IDREFs cannot cross shadow roots.
10
+ */
11
+ function getAccordionIds(itemEl) {
12
+ let base = itemEl ? itemIds.get(itemEl) : undefined;
13
+ if (itemEl && !base) {
14
+ base = `seki-accordion-item-${++itemIdCounter}`;
15
+ itemIds.set(itemEl, base);
16
+ }
17
+ base = base !== null && base !== void 0 ? base : 'seki-accordion-item-0';
18
+ return { triggerId: `${base}-trigger`, contentId: `${base}-content` };
19
+ }
20
+ /** The trigger/content host that belongs directly to `itemEl` (not a nested item). */
21
+ function findItemPeer(itemEl, tag) {
22
+ if (!itemEl)
23
+ return null;
24
+ for (const el of Array.from(itemEl.querySelectorAll(tag))) {
25
+ if (el.closest('seki-accordion-item') === itemEl)
26
+ return el;
27
+ }
28
+ return null;
29
+ }
30
+ /** Ids the two hosts should reference, honouring author-set host ids. */
31
+ function resolveAccordionIds(itemEl) {
32
+ const gen = getAccordionIds(itemEl);
33
+ return {
34
+ triggerId: effectiveHostId(findItemPeer(itemEl, 'seki-accordion-trigger'), gen.triggerId),
35
+ contentId: effectiveHostId(findItemPeer(itemEl, 'seki-accordion-content'), gen.contentId),
36
+ };
37
+ }
38
+
39
+ export { getAccordionIds as g, resolveAccordionIds as r };
@@ -0,0 +1,103 @@
1
+ function clamp(value, min, max) {
2
+ return Math.min(Math.max(value, min), max);
3
+ }
4
+ const EPSILON = 1e-6;
5
+ /**
6
+ * Scale `sizes` proportionally so they add up to `target`, keeping each one
7
+ * inside its [min, max]. Space that a clamped panel cannot take is handed to
8
+ * the panels that still have room. Pure so it can be unit tested.
9
+ */
10
+ function fitSizesToTotal(items, target) {
11
+ if (items.length === 0)
12
+ return [];
13
+ const sum = items.reduce((acc, item) => acc + item.size, 0);
14
+ let sizes = items.map((item) => (sum > EPSILON ? (item.size * target) / sum : target / items.length));
15
+ sizes = sizes.map((size, i) => clamp(size, items[i].min, items[i].max));
16
+ for (let pass = 0; pass < items.length + 1; pass++) {
17
+ const residual = target - sizes.reduce((acc, size) => acc + size, 0);
18
+ if (Math.abs(residual) < EPSILON)
19
+ break;
20
+ const room = sizes.map((size, i) => (residual > 0 ? items[i].max - size : size - items[i].min));
21
+ const totalRoom = room.reduce((acc, r) => acc + r, 0);
22
+ if (totalRoom < EPSILON)
23
+ break;
24
+ sizes = sizes.map((size, i) => size + (residual * room[i]) / totalRoom);
25
+ sizes = sizes.map((size, i) => clamp(size, items[i].min, items[i].max));
26
+ }
27
+ return sizes;
28
+ }
29
+ /** Size a panel can reach on its shrinking side (collapsible panels may reach collapsedSize). */
30
+ function lowerBound(panel) {
31
+ return panel.constraints.collapsible ? panel.constraints.collapsedSize : panel.constraints.minSize;
32
+ }
33
+ /**
34
+ * Where a panel ends up when it is asked to be `desired` big. Never leaves
35
+ * [minSize, maxSize] unless it snaps to its collapsed size.
36
+ */
37
+ function resolveTarget(panel, desired, allowSnap) {
38
+ const { minSize, maxSize, collapsible, collapsedSize } = panel.constraints;
39
+ if (panel.isCollapsed) {
40
+ // Growing out of the collapsed state jumps to minSize; shrinking is a no-op.
41
+ return desired > panel.size ? { size: minSize, isCollapsed: false } : { size: panel.size, isCollapsed: true };
42
+ }
43
+ if (allowSnap && collapsible && desired < minSize && desired < panel.size) {
44
+ return { size: collapsedSize, isCollapsed: true };
45
+ }
46
+ return { size: clamp(desired, minSize, maxSize), isCollapsed: false };
47
+ }
48
+ /**
49
+ * Pure arithmetic for moving the handle between `before` and `after` by
50
+ * `delta` percent (positive grows `before`). Both panels' limits are
51
+ * honoured: the handle stops when either neighbour hits its min or max, and
52
+ * the two sizes always change by the same amount so the total is preserved.
53
+ * Returns null when nothing can move.
54
+ */
55
+ function computeResize(before, after, delta) {
56
+ const growing = delta > 0 ? before : after;
57
+ const shrinking = delta > 0 ? after : before;
58
+ const amount = Math.abs(delta);
59
+ // How much the growing side wants to take (more than `amount` when it
60
+ // leaves the collapsed state, less when it is held back by maxSize).
61
+ let grow = resolveTarget(growing, growing.size + amount, false);
62
+ const need = grow.size - growing.size;
63
+ if (need <= EPSILON)
64
+ return null;
65
+ let shrink = resolveTarget(shrinking, shrinking.size - need, true);
66
+ let shrunk = shrinking.size - shrink.size;
67
+ if (shrink.isCollapsed && !shrinking.isCollapsed) {
68
+ // Collapsing frees more than `need`; the growing side must absorb all of it.
69
+ grow = resolveTarget(growing, growing.size + shrunk, false);
70
+ if (grow.size - growing.size < shrunk - EPSILON) {
71
+ shrink = resolveTarget(shrinking, shrinking.size - need, false);
72
+ shrunk = shrinking.size - shrink.size;
73
+ grow = resolveTarget(growing, growing.size + need, false);
74
+ }
75
+ }
76
+ const grown = grow.size - growing.size;
77
+ if (grown <= EPSILON || shrunk <= EPSILON)
78
+ return null;
79
+ if (Math.abs(grown - shrunk) > EPSILON) {
80
+ if (grown < shrunk) {
81
+ shrink = { size: shrinking.size - grown, isCollapsed: false };
82
+ }
83
+ else if (growing.isCollapsed) {
84
+ // Cannot leave the collapsed state without enough room for minSize.
85
+ return null;
86
+ }
87
+ else {
88
+ grow = { size: growing.size + shrunk, isCollapsed: false };
89
+ }
90
+ }
91
+ return delta > 0 ? { before: grow, after: shrink } : { before: shrink, after: grow };
92
+ }
93
+ /** Feasible [min, max] for the `before` panel's size, given its neighbour. */
94
+ function computeHandleRange(before, after) {
95
+ const total = before.size + after.size;
96
+ const min = Math.max(lowerBound(before), total - after.constraints.maxSize);
97
+ const max = Math.min(before.constraints.maxSize, total - lowerBound(after));
98
+ return { now: before.size, min: Math.min(min, before.size), max: Math.max(max, before.size) };
99
+ }
100
+ /** Generated host id for a panel; the handle derives the same id for `aria-controls`. */
101
+ const panelHostId = (panelId) => `seki-resizable-${panelId}`;
102
+
103
+ export { clamp as a, computeResize as b, computeHandleRange as c, fitSizesToTotal as f, panelHostId as p };
@@ -20,5 +20,18 @@ function getTabIds(tabsEl, value) {
20
20
  const v = sanitize(value !== null && value !== void 0 ? value : '');
21
21
  return { triggerId: `${base}-trigger-${v}`, panelId: `${base}-panel-${v}` };
22
22
  }
23
+ /**
24
+ * The trigger/panel host with the given `value` that belongs to `tabsEl` (not
25
+ * to a nested `seki-tabs`), or null when the tree has no such peer.
26
+ */
27
+ function findTabPeer(tabsEl, tag, value) {
28
+ if (!tabsEl)
29
+ return null;
30
+ for (const el of Array.from(tabsEl.querySelectorAll(tag))) {
31
+ if (el.closest('seki-tabs') === tabsEl && el.getAttribute('value') === value)
32
+ return el;
33
+ }
34
+ return null;
35
+ }
23
36
 
24
- export { getTabIds as g };
37
+ export { findTabPeer as f, getTabIds as g };
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Host ids for cross-shadow ARIA wiring (trigger host <-> content host).
3
+ *
4
+ * IDREFs cannot cross shadow roots, so components put their ids on the
5
+ * light-DOM hosts. An id the author wrote on the host must never be
6
+ * overwritten: `effectiveHostId` returns it when present and falls back to the
7
+ * generated id otherwise. We remember which id we generated per element so a
8
+ * generated id that changes later (e.g. the tab `value` changes) is replaced,
9
+ * while an author id (anything else on the element) is kept.
10
+ */
11
+ const generated = new WeakMap();
12
+ /** The id `el` actually has (author id, else `fallback`). Does not mutate. */
13
+ function effectiveHostId(el, fallback) {
14
+ if (el && el.id && el.id !== generated.get(el))
15
+ return el.id;
16
+ return fallback;
17
+ }
18
+ /**
19
+ * Resolve the id to render on `el`: keeps an author-set id, otherwise records
20
+ * and returns `fallback`.
21
+ */
22
+ function claimHostId(el, fallback) {
23
+ const id = effectiveHostId(el, fallback);
24
+ if (id === fallback)
25
+ generated.set(el, fallback);
26
+ return id;
27
+ }
28
+
29
+ export { claimHostId as c, effectiveHostId as e };
@@ -1,4 +1,7 @@
1
1
  import { p as proxyCustomElement, H, h, e as Host } from './p-CBBntrZT.js';
2
+ import { g as getAccordionIds, r as resolveAccordionIds } from './p-BuvZJ6_r.js';
3
+ import { c as claimHostId } from './p-ppXRAghy.js';
4
+ import { C as ContextConsumer } from './p-B4SOpX_A.js';
2
5
 
3
6
  const sekiAccordionContentCss = ":host{--seki-neutral-50:hsl(0, 0%, 98%);--seki-neutral-100:hsl(0, 0%, 96.1%);--seki-neutral-200:hsl(0, 0%, 89.8%);--seki-neutral-300:hsl(0, 0%, 83.1%);--seki-neutral-400:hsl(0, 0%, 63.9%);--seki-neutral-500:hsl(0, 0%, 45.1%);--seki-neutral-600:hsl(0, 0%, 32.2%);--seki-neutral-700:hsl(0, 0%, 25.1%);--seki-neutral-800:hsl(0, 0%, 14.9%);--seki-neutral-900:hsl(0, 0%, 9%);--seki-neutral-950:hsl(0, 0%, 3.9%);--seki-primary-50:hsl(210, 100%, 97%);--seki-primary-100:hsl(210, 95%, 93%);--seki-primary-200:hsl(210, 95%, 85%);--seki-primary-300:hsl(210, 90%, 73%);--seki-primary-400:hsl(210, 85%, 58%);--seki-primary-500:hsl(210, 80%, 48%);--seki-primary-600:hsl(210, 75%, 40%);--seki-primary-700:hsl(210, 70%, 32%);--seki-primary-800:hsl(210, 65%, 25%);--seki-primary-900:hsl(210, 60%, 18%);--seki-primary-950:hsl(210, 55%, 10%);--seki-success-500:hsl(142, 71%, 45%);--seki-success-600:hsl(142, 71%, 35%);--seki-warning-500:hsl(38, 92%, 50%);--seki-warning-600:hsl(38, 92%, 40%);--seki-destructive-500:hsl(0, 84.2%, 60.2%);--seki-destructive-600:hsl(0, 72%, 41%);--seki-chart-1:hsl(12, 76%, 61%);--seki-chart-2:hsl(173, 58%, 39%);--seki-chart-3:hsl(197, 37%, 24%);--seki-chart-4:hsl(43, 74%, 66%);--seki-chart-5:hsl(27, 87%, 67%)}:host([data-theme='dark']){color-scheme:dark}:host([data-theme='light']){color-scheme:light}:host{--seki-background:light-dark(hsl(0, 0%, 100%), hsl(0, 0%, 3.9%));--seki-foreground:light-dark(hsl(0, 0%, 3.9%), hsl(0, 0%, 98%));--seki-muted:light-dark(hsl(0, 0%, 96.1%), hsl(0, 0%, 14.9%));--seki-muted-foreground:light-dark(hsl(0, 0%, 42%), hsl(0, 0%, 63.9%));--seki-card:light-dark(hsl(0, 0%, 100%), hsl(0, 0%, 3.9%));--seki-card-foreground:light-dark(hsl(0, 0%, 3.9%), hsl(0, 0%, 98%));--seki-popover:light-dark(hsl(0, 0%, 100%), hsl(0, 0%, 3.9%));--seki-popover-foreground:light-dark(hsl(0, 0%, 3.9%), hsl(0, 0%, 98%));--seki-border:light-dark(hsl(0, 0%, 89.8%), hsl(0, 0%, 14.9%));--seki-input:light-dark(hsl(0, 0%, 89.8%), hsl(0, 0%, 14.9%));--seki-primary:light-dark(hsl(0, 0%, 9%), hsl(0, 0%, 98%));--seki-primary-foreground:light-dark(hsl(0, 0%, 98%), hsl(0, 0%, 9%));--seki-primary-tint:light-dark(hsl(0, 0%, 9%, 0.06), hsl(0, 0%, 98%, 0.1));--seki-primary-tint-foreground:var(--seki-foreground);--seki-secondary:light-dark(hsl(0, 0%, 96.1%), hsl(0, 0%, 14.9%));--seki-secondary-foreground:light-dark(hsl(0, 0%, 9%), hsl(0, 0%, 98%));--seki-accent:light-dark(hsl(0, 0%, 96.1%), hsl(0, 0%, 14.9%));--seki-accent-foreground:light-dark(hsl(0, 0%, 9%), hsl(0, 0%, 98%));--seki-destructive:light-dark(hsl(0, 84.2%, 60.2%), hsl(0, 62.8%, 30.6%));--seki-destructive-foreground:hsl(0, 0%, 98%);--seki-destructive-bg:light-dark(hsl(0, 86%, 97%), rgba(239, 68, 68, 0.1));--seki-destructive-soft-foreground:light-dark(hsl(0, 63%, 31%), hsl(0, 91%, 71%));--seki-success:light-dark(hsl(142, 71%, 45%), hsl(142, 69%, 58%));--seki-success-foreground:light-dark(hsl(142, 64%, 24%), hsl(142, 69%, 58%));--seki-success-bg:light-dark(hsl(142, 76%, 97%), rgba(34, 197, 94, 0.1));--seki-warning:light-dark(hsl(38, 92%, 50%), hsl(43, 96%, 56%));--seki-warning-foreground:light-dark(hsl(21, 77%, 27%), hsl(43, 96%, 56%));--seki-warning-bg:light-dark(hsl(48, 96%, 96%), rgba(245, 158, 11, 0.1));--seki-info:light-dark(hsl(217, 91%, 60%), hsl(217, 92%, 68%));--seki-info-foreground:light-dark(hsl(224, 64%, 33%), hsl(217, 92%, 68%));--seki-info-bg:light-dark(hsl(214, 100%, 97%), rgba(59, 130, 246, 0.1));--seki-ring:light-dark(hsl(0, 0%, 3.9%), hsl(0, 0%, 83.1%));--seki-ring-shadow:hsl(0, 0%, 3.9%, 0.1);--seki-bg-primary:var(--seki-background);--seki-bg-secondary:var(--seki-muted);--seki-bg-tertiary:var(--seki-accent);--seki-text-primary:var(--seki-foreground);--seki-text-secondary:var(--seki-muted-foreground);--seki-text-tertiary:light-dark(var(--seki-neutral-400), var(--seki-neutral-600));--seki-border-default:var(--seki-border);--seki-border-emphasis:light-dark(var(--seki-neutral-300), var(--seki-neutral-700))}:host{--seki-button-primary-bg:var(--seki-primary);--seki-button-primary-text:var(--seki-primary-foreground);--seki-button-primary-border:transparent;--seki-button-primary-hover-bg:light-dark(hsl(0, 0%, 9%, 0.9), hsl(0, 0%, 98%, 0.9));--seki-button-primary-hover-text:var(--seki-primary-foreground);--seki-button-primary-hover-border:transparent;--seki-button-secondary-bg:var(--seki-secondary);--seki-button-secondary-text:var(--seki-secondary-foreground);--seki-button-secondary-border:transparent;--seki-button-secondary-hover-bg:light-dark(hsl(0, 0%, 96.1%, 0.8), hsl(0, 0%, 14.9%, 0.8));--seki-button-secondary-hover-text:var(--seki-secondary-foreground);--seki-button-secondary-hover-border:transparent;--seki-button-outline-bg:transparent;--seki-button-outline-text:var(--seki-foreground);--seki-button-outline-border:var(--seki-input);--seki-button-outline-hover-bg:var(--seki-accent);--seki-button-outline-hover-text:var(--seki-accent-foreground);--seki-button-outline-hover-border:var(--seki-input);--seki-button-ghost-bg:transparent;--seki-button-ghost-text:var(--seki-foreground);--seki-button-ghost-border:transparent;--seki-button-ghost-hover-bg:var(--seki-accent);--seki-button-ghost-hover-text:var(--seki-accent-foreground);--seki-button-ghost-hover-border:transparent;--seki-button-destructive-bg:var(--seki-destructive);--seki-button-destructive-text:var(--seki-destructive-foreground);--seki-button-destructive-border:transparent;--seki-button-destructive-hover-bg:hsl(0, 84.2%, 60.2%, 0.9);--seki-button-destructive-hover-border:transparent;--seki-button-sm-padding-x:var(--seki-spacing-3, 0.75rem);--seki-button-sm-padding-y:0.375rem;--seki-button-sm-font-size:var(--seki-text-sm, 0.875rem);--seki-button-sm-height:2.25rem;--seki-button-md-padding-x:var(--seki-spacing-4, 1rem);--seki-button-md-padding-y:var(--seki-spacing-2, 0.5rem);--seki-button-md-font-size:var(--seki-text-base, 1rem);--seki-button-md-height:2.5rem;--seki-button-lg-padding-x:2rem;--seki-button-lg-padding-y:0.5rem;--seki-button-lg-font-size:1rem;--seki-button-lg-height:2.75rem;--seki-button-icon-sm-size:2rem;--seki-button-icon-size:2.5rem;--seki-button-icon-lg-size:3rem;--seki-button-icon-gap:0.5rem;--seki-button-link-bg:transparent;--seki-button-link-text:var(--seki-primary);--seki-button-link-border:transparent;--seki-button-link-hover-bg:transparent;--seki-button-link-hover-text:var(--seki-primary);--seki-button-link-hover-border:transparent;--seki-button-radius:var(--seki-radius-md, 0.375rem);--seki-button-font-weight:var(--seki-font-medium, 500);--seki-button-transition-duration:150ms;--seki-button-transition-timing:ease-in-out;--seki-button-shadow:var(--seki-shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05));--seki-button-shadow-hover:var(--seki-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1));--seki-button-disabled-opacity:0.5;--seki-input-bg:var(--seki-background);--seki-input-border:var(--seki-border);--seki-input-text:var(--seki-foreground);--seki-input-placeholder:var(--seki-muted-foreground);--seki-input-ring:var(--seki-ring);--seki-input-invalid-border:var(--seki-destructive);--seki-input-invalid-ring:var(--seki-destructive);--seki-input-disabled-opacity:0.5;--seki-input-radius:var(--seki-radius-md);--seki-input-ring-offset:2px;--seki-select-trigger-bg:var(--seki-background);--seki-select-trigger-border:1px solid var(--seki-border);--seki-select-trigger-bg-hover:var(--seki-muted);--seki-select-trigger-radius:var(--seki-radius-md);--seki-select-trigger-min-height:2.5rem;--seki-select-trigger-padding:0.5rem 0.75rem;--seki-select-trigger-gap:0.5rem;--seki-select-content-bg:var(--seki-popover);--seki-select-content-border:1px solid var(--seki-border);--seki-select-content-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1);--seki-select-content-radius:var(--seki-radius-md);--seki-select-content-padding:0.5rem 0;--seki-select-option-padding:0.5rem 0.75rem;--seki-select-option-gap:0.5rem;--seki-select-option-radius:var(--seki-radius-sm);--seki-select-option-bg-hover:var(--seki-muted);--seki-select-option-bg-selected:var(--seki-muted);--seki-select-group-label-padding:0.5rem 0.75rem;--seki-select-group-label-font-size:var(--seki-font-size-xs);--seki-select-group-label-font-weight:var(--seki-font-semibold);--seki-select-group-label-color:var(--seki-muted-foreground);--seki-select-group-separator:1px solid var(--seki-border)}:host{--seki-spacing-0:0;--seki-spacing-0-5:0.125rem;--seki-spacing-1:0.25rem;--seki-spacing-1-5:0.375rem;--seki-spacing-2:0.5rem;--seki-spacing-2-5:0.625rem;--seki-spacing-3:0.75rem;--seki-spacing-3-5:0.875rem;--seki-spacing-4:1rem;--seki-spacing-5:1.25rem;--seki-spacing-6:1.5rem;--seki-spacing-8:2rem;--seki-spacing-10:2.5rem;--seki-spacing-12:3rem;--seki-spacing-16:4rem;--seki-spacing-20:5rem;--seki-spacing-24:6rem;--seki-input-height-sm:2rem;--seki-input-height-md:2.5rem;--seki-input-height-lg:3rem;--seki-input-padding-x:0.75rem;--seki-input-padding-y:0.5rem;--seki-input-font-size:0.875rem;--seki-input-ring-offset:2px}:host{--seki-shadow-sm:0 1px 2px 0 rgb(0 0 0 / 0.05);--seki-shadow-md:0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);--seki-shadow-lg:0 10px 15px -3px rgb(0 0 0 / 0.15), 0 4px 6px -4px rgb(0 0 0 / 0.1);--seki-shadow-xl:0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)}:host{--seki-shadow-xs-plus:0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);--seki-shadow-card:0 1px 3px 0 rgb(0 0 0 / 0.1);--seki-shadow-card-hover:0 4px 6px 0 rgb(0 0 0 / 0.1);--seki-shadow-thumb-hover:0 2px 6px 0 rgb(0 0 0 / 0.15);--seki-shadow-floating:0 4px 12px 0 rgb(0 0 0 / 0.15);--seki-shadow-floating-sm:0 2px 8px 0 rgb(0 0 0 / 0.1);--seki-shadow-overlay:0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);--seki-shadow-overlay-top:0 -10px 15px -3px rgb(0 0 0 / 0.1), 0 -4px 6px -4px rgb(0 0 0 / 0.1);--seki-drop-shadow-up:0 -2px 2px rgb(0 0 0 / 0.05);--seki-overlay:light-dark(rgb(0 0 0 / 0.5), rgb(0 0 0 / 0.7));--seki-overlay-strong:rgb(0 0 0 / 0.8)}:host{--seki-font-sans:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue',\n Arial, sans-serif;--seki-font-mono:ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;--seki-text-xs:0.75rem;--seki-text-sm:0.875rem;--seki-text-base:1rem;--seki-text-lg:1.125rem;--seki-text-xl:1.25rem;--seki-text-2xl:1.5rem;--seki-text-3xl:1.875rem;--seki-text-4xl:2.25rem;--seki-font-normal:400;--seki-font-medium:500;--seki-font-semibold:600;--seki-font-bold:700;--seki-leading-none:1;--seki-leading-tight:1.25;--seki-leading-normal:1.5;--seki-leading-relaxed:1.75}:host{--seki-radius-sm:0.25rem;--seki-radius-md:0.375rem;--seki-radius-lg:0.5rem;--seki-radius-xl:1rem;--seki-radius-full:9999px;}:host{--seki-sidebar-width:16rem;--seki-sidebar-width-icon:3rem;--seki-sidebar-width-mobile:18rem;--seki-sidebar-background:light-dark(hsl(0, 0%, 98%), hsl(240, 5.9%, 10%));--seki-sidebar-foreground:light-dark(hsl(240, 5.3%, 26.1%), hsl(240, 4.8%, 95.9%));--seki-sidebar-primary:light-dark(hsl(240, 5.9%, 10%), hsl(0, 0%, 98%));--seki-sidebar-primary-foreground:light-dark(hsl(0, 0%, 98%), hsl(240, 5.9%, 10%));--seki-sidebar-accent:light-dark(hsl(240, 4.8%, 95.9%), hsl(240, 3.7%, 15.9%));--seki-sidebar-accent-foreground:light-dark(hsl(240, 5.9%, 10%), hsl(240, 4.8%, 95.9%));--seki-sidebar-border:light-dark(hsl(220, 13%, 91%), hsl(240, 3.7%, 15.9%));--seki-sidebar-ring:hsl(217.2, 91.2%, 59.8%);--seki-sidebar-muted-foreground:light-dark(hsl(240, 3.8%, 46.1%), hsl(240, 5%, 64.9%));--seki-sidebar-menu-button-height:2rem;--seki-sidebar-menu-button-height-lg:3rem;--seki-sidebar-menu-button-padding:0.5rem;--seki-sidebar-menu-button-gap:0.5rem;--seki-sidebar-menu-button-radius:var(--seki-radius-md, 0.375rem);--seki-sidebar-menu-sub-padding-left:1.75rem;--seki-sidebar-menu-sub-border-width:1px;--seki-sidebar-group-padding:0.5rem;--seki-sidebar-group-label-height:2rem;--seki-sidebar-group-label-padding:0.5rem;--seki-sidebar-header-height:auto;--seki-sidebar-footer-height:auto;--seki-sidebar-header-padding:0.5rem;--seki-sidebar-footer-padding:0.5rem;--seki-sidebar-content-padding:0.5rem;--seki-sidebar-rail-width:1rem;--seki-sidebar-transition-duration:200ms;--seki-sidebar-transition-timing:ease-in-out;--seki-sidebar-mobile-breakpoint:768px;--seki-sidebar-overlay-bg:hsla(0, 0%, 0%, 0.8)}:host{--seki-animation-fast:150ms;--seki-animation-normal:200ms;--seki-animation-slow:300ms;--seki-ease-in:cubic-bezier(0.4, 0, 1, 1);--seki-ease-out:cubic-bezier(0, 0, 0.2, 1);--seki-ease-in-out:cubic-bezier(0.4, 0, 0.2, 1);--seki-accordion-content-height:auto}@keyframes seki-fade-in{from{opacity:0}to{opacity:1}}@keyframes seki-fade-out{from{opacity:1}to{opacity:0}}@keyframes seki-scale-in{from{opacity:0;transform:scale(0.95)}to{opacity:1;transform:scale(1)}}@keyframes seki-scale-out{from{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(0.95)}}@keyframes seki-slide-in-from-top{from{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes seki-slide-out-to-top{from{transform:translateY(0)}to{transform:translateY(-100%)}}@keyframes seki-slide-in-from-bottom{from{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes seki-slide-out-to-bottom{from{transform:translateY(0)}to{transform:translateY(100%)}}@keyframes seki-slide-in-from-left{from{transform:translateX(-100%)}to{transform:translateX(0)}}@keyframes seki-slide-out-to-left{from{transform:translateX(0)}to{transform:translateX(-100%)}}@keyframes seki-slide-in-from-right{from{transform:translateX(100%)}to{transform:translateX(0)}}@keyframes seki-slide-out-to-right{from{transform:translateX(0)}to{transform:translateX(100%)}}@keyframes seki-accordion-down{from{height:0;opacity:0}to{height:var(--seki-accordion-content-height);opacity:1}}@keyframes seki-accordion-up{from{height:var(--seki-accordion-content-height);opacity:1}to{height:0;opacity:0}}@keyframes seki-zoom-in{from{opacity:0;transform:scale(0.96)}to{opacity:1;transform:scale(1)}}@keyframes seki-zoom-out{from{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(0.96)}}@keyframes seki-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}@keyframes seki-pulse{0%,100%{opacity:1}50%{opacity:0.5}}@keyframes seki-bounce{0%,100%{transform:translateY(-25%);animation-timing-function:cubic-bezier(0.8, 0, 1, 1)}50%{transform:translateY(0);animation-timing-function:cubic-bezier(0, 0, 0.2, 1)}}@keyframes seki-collapsible-open{from{height:0;overflow:hidden}to{height:var(--seki-collapsible-content-height, auto)}}@keyframes seki-collapsible-close{from{height:var(--seki-collapsible-content-height, auto)}to{height:0;overflow:hidden}}@keyframes seki-toast-slide-in-right{from{transform:translateX(calc(100% + 1rem))}to{transform:translateX(0)}}@keyframes seki-toast-slide-out-right{from{transform:translateX(0)}to{transform:translateX(calc(100% + 1rem))}}@keyframes seki-toast-swipe-out{from{transform:translateX(var(--seki-toast-swipe-end-x, 0))}to{transform:translateX(calc(100% + 1rem))}}.seki-animate-fade-in{animation:seki-fade-in var(--seki-animation-normal) var(--seki-ease-out)}.seki-animate-fade-out{animation:seki-fade-out var(--seki-animation-normal) var(--seki-ease-in)}.seki-animate-scale-in{animation:seki-scale-in var(--seki-animation-normal) var(--seki-ease-out)}.seki-animate-scale-out{animation:seki-scale-out var(--seki-animation-normal) var(--seki-ease-in)}.seki-animate-spin{animation:seki-spin 1s linear infinite}.seki-animate-pulse{animation:seki-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite}.seki-animate-bounce{animation:seki-bounce 1s infinite}@media (prefers-reduced-motion: reduce){*,*::before,*::after{animation-duration:0.01ms !important;animation-iteration-count:1 !important;transition-duration:0.01ms !important}}[data-theme='dark']{color-scheme:dark}[data-theme='light']{color-scheme:light}:host{display:block;font-family:var(--seki-font-sans, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif)}.accordion-content{overflow:hidden}.accordion-content--animating{transition:height var(--seki-animation-normal, 200ms) var(--seki-ease-in-out, cubic-bezier(0.4, 0, 0.2, 1))}.accordion-content:not(.accordion-content--open):not(.accordion-content--animating){display:none}.accordion-content-inner{padding-bottom:1rem;font-size:var(--seki-font-size-sm, 0.875rem);line-height:var(--seki-line-height-relaxed, 1.75);color:var(--seki-muted-foreground, hsl(240 3.8% 46.1%))}@media (prefers-reduced-motion: reduce){.accordion-content--animating{transition:none}}";
4
7
 
@@ -9,43 +12,41 @@ const SekiAccordionContent$1 = /*@__PURE__*/ proxyCustomElement(class SekiAccord
9
12
  this.__registerHost();
10
13
  }
11
14
  this.__attachShadow();
12
- this.onAccordionValueChange = () => {
15
+ this.hasLoaded = false;
16
+ this.accordion = new ContextConsumer('seki-accordion', '_accordionContext', () => {
17
+ if (!this.hasLoaded) {
18
+ // Before the first render there is nothing to animate from.
19
+ this._isOpen = this.isItemOpen();
20
+ return;
21
+ }
13
22
  this.syncWithContext();
14
- };
23
+ });
15
24
  this._isOpen = false;
16
25
  this._isAnimating = false;
17
26
  this._contentHeight = 0;
18
27
  }
19
- getItemContext() {
20
- const item = this.el.closest('seki-accordion-item');
21
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
- return item ? item._accordionItemContext : null;
23
- }
24
28
  // Get isOpen directly from accordion to avoid stale item context
25
29
  isItemOpen() {
26
- var _a;
27
30
  const item = this.el.closest('seki-accordion-item');
28
- const accordion = this.el.closest('seki-accordion');
29
31
  const value = item === null || item === void 0 ? void 0 : item.getAttribute('value');
30
- if (accordion && value) {
31
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
- const ctx = accordion._accordionContext;
33
- return (_a = ctx === null || ctx === void 0 ? void 0 : ctx.isItemOpen(value)) !== null && _a !== void 0 ? _a : false;
32
+ const ctx = this.accordion.context;
33
+ if (ctx && value) {
34
+ return ctx.isItemOpen(value);
34
35
  }
35
36
  return false;
36
37
  }
38
+ connectedCallback() {
39
+ this.accordion.connect(this.el);
40
+ }
37
41
  componentWillLoad() {
38
42
  this._isOpen = this.isItemOpen();
39
43
  }
40
44
  componentDidLoad() {
41
- var _a, _b;
42
45
  // Initial height measurement
43
46
  if (this.contentRef && this._isOpen) {
44
47
  this._contentHeight = this.contentRef.scrollHeight;
45
48
  }
46
- // Listen for value changes from parent accordion
47
- this.accordionEl = (_a = this.el.closest('seki-accordion')) !== null && _a !== void 0 ? _a : undefined;
48
- (_b = this.accordionEl) === null || _b === void 0 ? void 0 : _b.addEventListener('sekiValueChange', this.onAccordionValueChange);
49
+ this.hasLoaded = true;
49
50
  }
50
51
  syncWithContext() {
51
52
  const wasOpen = this._isOpen;
@@ -65,15 +66,16 @@ const SekiAccordionContent$1 = /*@__PURE__*/ proxyCustomElement(class SekiAccord
65
66
  }
66
67
  }
67
68
  disconnectedCallback() {
68
- var _a;
69
69
  clearTimeout(this.animationTimer);
70
- (_a = this.accordionEl) === null || _a === void 0 ? void 0 : _a.removeEventListener('sekiValueChange', this.onAccordionValueChange);
70
+ this.accordion.disconnect();
71
71
  }
72
72
  render() {
73
- var _a, _b;
74
- const context = this.getItemContext();
75
- const contentId = (_a = context === null || context === void 0 ? void 0 : context.contentId) !== null && _a !== void 0 ? _a : '';
76
- const triggerId = (_b = context === null || context === void 0 ? void 0 : context.triggerId) !== null && _b !== void 0 ? _b : '';
73
+ // IDREFs cannot cross shadow roots, so the id / role / aria-labelledby live
74
+ // on this light-DOM host and point at the trigger host. An author id on
75
+ // either host is kept.
76
+ const item = this.el.closest('seki-accordion-item');
77
+ const hostId = claimHostId(this.el, getAccordionIds(item).contentId);
78
+ const { triggerId } = resolveAccordionIds(item);
77
79
  // Calculate styles for animation
78
80
  const contentStyle = {};
79
81
  if (this._isAnimating) {
@@ -85,11 +87,11 @@ const SekiAccordionContent$1 = /*@__PURE__*/ proxyCustomElement(class SekiAccord
85
87
  else {
86
88
  contentStyle.height = '0';
87
89
  }
88
- return (h(Host, { key: 'ea3a71c78711334460516a3ac4c3caf75088921e', "data-state": this._isOpen ? 'open' : 'closed' }, h("div", { key: 'be7338cc4927a28c0392309928c74793bd31bd32', ref: (el) => (this.contentRef = el), part: "content", id: contentId, role: "region", "aria-labelledby": triggerId, "aria-hidden": !this._isOpen, class: {
90
+ return (h(Host, { key: '357d9251d75b163d40c5e205c84ca0ec696a9f5c', id: hostId, "data-state": this._isOpen ? 'open' : 'closed', role: "region", "aria-labelledby": triggerId, "aria-hidden": !this._isOpen ? 'true' : undefined }, h("div", { key: 'b9082621ddd047cd87de74423ca4ce1d07216ddd', ref: (el) => (this.contentRef = el), part: "content", class: {
89
91
  'accordion-content': true,
90
92
  'accordion-content--open': this._isOpen,
91
93
  'accordion-content--animating': this._isAnimating,
92
- }, style: contentStyle }, h("div", { key: '2966e47bc4bc67427e03d694ae75bf31ff760b92', class: "accordion-content-inner" }, h("slot", { key: '68e8a9b6ba98e50bf0c49de50742e2036b188887' })))));
94
+ }, style: contentStyle }, h("div", { key: '01f0978683b8635c7e72203540d687c29e9670a8', class: "accordion-content-inner" }, h("slot", { key: 'dd1aef85264e79d95ca6c70b5fc432eeff1f860e' })))));
93
95
  }
94
96
  get el() { return this; }
95
97
  static get style() { return sekiAccordionContentCss; }
@@ -1,4 +1,6 @@
1
1
  import { p as proxyCustomElement, H, h, e as Host } from './p-CBBntrZT.js';
2
+ import { r as resolveAccordionIds } from './p-BuvZJ6_r.js';
3
+ import { C as ContextConsumer } from './p-B4SOpX_A.js';
2
4
 
3
5
  const sekiAccordionItemCss = ":host{--seki-neutral-50:hsl(0, 0%, 98%);--seki-neutral-100:hsl(0, 0%, 96.1%);--seki-neutral-200:hsl(0, 0%, 89.8%);--seki-neutral-300:hsl(0, 0%, 83.1%);--seki-neutral-400:hsl(0, 0%, 63.9%);--seki-neutral-500:hsl(0, 0%, 45.1%);--seki-neutral-600:hsl(0, 0%, 32.2%);--seki-neutral-700:hsl(0, 0%, 25.1%);--seki-neutral-800:hsl(0, 0%, 14.9%);--seki-neutral-900:hsl(0, 0%, 9%);--seki-neutral-950:hsl(0, 0%, 3.9%);--seki-primary-50:hsl(210, 100%, 97%);--seki-primary-100:hsl(210, 95%, 93%);--seki-primary-200:hsl(210, 95%, 85%);--seki-primary-300:hsl(210, 90%, 73%);--seki-primary-400:hsl(210, 85%, 58%);--seki-primary-500:hsl(210, 80%, 48%);--seki-primary-600:hsl(210, 75%, 40%);--seki-primary-700:hsl(210, 70%, 32%);--seki-primary-800:hsl(210, 65%, 25%);--seki-primary-900:hsl(210, 60%, 18%);--seki-primary-950:hsl(210, 55%, 10%);--seki-success-500:hsl(142, 71%, 45%);--seki-success-600:hsl(142, 71%, 35%);--seki-warning-500:hsl(38, 92%, 50%);--seki-warning-600:hsl(38, 92%, 40%);--seki-destructive-500:hsl(0, 84.2%, 60.2%);--seki-destructive-600:hsl(0, 72%, 41%);--seki-chart-1:hsl(12, 76%, 61%);--seki-chart-2:hsl(173, 58%, 39%);--seki-chart-3:hsl(197, 37%, 24%);--seki-chart-4:hsl(43, 74%, 66%);--seki-chart-5:hsl(27, 87%, 67%)}:host([data-theme='dark']){color-scheme:dark}:host([data-theme='light']){color-scheme:light}:host{--seki-background:light-dark(hsl(0, 0%, 100%), hsl(0, 0%, 3.9%));--seki-foreground:light-dark(hsl(0, 0%, 3.9%), hsl(0, 0%, 98%));--seki-muted:light-dark(hsl(0, 0%, 96.1%), hsl(0, 0%, 14.9%));--seki-muted-foreground:light-dark(hsl(0, 0%, 42%), hsl(0, 0%, 63.9%));--seki-card:light-dark(hsl(0, 0%, 100%), hsl(0, 0%, 3.9%));--seki-card-foreground:light-dark(hsl(0, 0%, 3.9%), hsl(0, 0%, 98%));--seki-popover:light-dark(hsl(0, 0%, 100%), hsl(0, 0%, 3.9%));--seki-popover-foreground:light-dark(hsl(0, 0%, 3.9%), hsl(0, 0%, 98%));--seki-border:light-dark(hsl(0, 0%, 89.8%), hsl(0, 0%, 14.9%));--seki-input:light-dark(hsl(0, 0%, 89.8%), hsl(0, 0%, 14.9%));--seki-primary:light-dark(hsl(0, 0%, 9%), hsl(0, 0%, 98%));--seki-primary-foreground:light-dark(hsl(0, 0%, 98%), hsl(0, 0%, 9%));--seki-primary-tint:light-dark(hsl(0, 0%, 9%, 0.06), hsl(0, 0%, 98%, 0.1));--seki-primary-tint-foreground:var(--seki-foreground);--seki-secondary:light-dark(hsl(0, 0%, 96.1%), hsl(0, 0%, 14.9%));--seki-secondary-foreground:light-dark(hsl(0, 0%, 9%), hsl(0, 0%, 98%));--seki-accent:light-dark(hsl(0, 0%, 96.1%), hsl(0, 0%, 14.9%));--seki-accent-foreground:light-dark(hsl(0, 0%, 9%), hsl(0, 0%, 98%));--seki-destructive:light-dark(hsl(0, 84.2%, 60.2%), hsl(0, 62.8%, 30.6%));--seki-destructive-foreground:hsl(0, 0%, 98%);--seki-destructive-bg:light-dark(hsl(0, 86%, 97%), rgba(239, 68, 68, 0.1));--seki-destructive-soft-foreground:light-dark(hsl(0, 63%, 31%), hsl(0, 91%, 71%));--seki-success:light-dark(hsl(142, 71%, 45%), hsl(142, 69%, 58%));--seki-success-foreground:light-dark(hsl(142, 64%, 24%), hsl(142, 69%, 58%));--seki-success-bg:light-dark(hsl(142, 76%, 97%), rgba(34, 197, 94, 0.1));--seki-warning:light-dark(hsl(38, 92%, 50%), hsl(43, 96%, 56%));--seki-warning-foreground:light-dark(hsl(21, 77%, 27%), hsl(43, 96%, 56%));--seki-warning-bg:light-dark(hsl(48, 96%, 96%), rgba(245, 158, 11, 0.1));--seki-info:light-dark(hsl(217, 91%, 60%), hsl(217, 92%, 68%));--seki-info-foreground:light-dark(hsl(224, 64%, 33%), hsl(217, 92%, 68%));--seki-info-bg:light-dark(hsl(214, 100%, 97%), rgba(59, 130, 246, 0.1));--seki-ring:light-dark(hsl(0, 0%, 3.9%), hsl(0, 0%, 83.1%));--seki-ring-shadow:hsl(0, 0%, 3.9%, 0.1);--seki-bg-primary:var(--seki-background);--seki-bg-secondary:var(--seki-muted);--seki-bg-tertiary:var(--seki-accent);--seki-text-primary:var(--seki-foreground);--seki-text-secondary:var(--seki-muted-foreground);--seki-text-tertiary:light-dark(var(--seki-neutral-400), var(--seki-neutral-600));--seki-border-default:var(--seki-border);--seki-border-emphasis:light-dark(var(--seki-neutral-300), var(--seki-neutral-700))}:host{--seki-button-primary-bg:var(--seki-primary);--seki-button-primary-text:var(--seki-primary-foreground);--seki-button-primary-border:transparent;--seki-button-primary-hover-bg:light-dark(hsl(0, 0%, 9%, 0.9), hsl(0, 0%, 98%, 0.9));--seki-button-primary-hover-text:var(--seki-primary-foreground);--seki-button-primary-hover-border:transparent;--seki-button-secondary-bg:var(--seki-secondary);--seki-button-secondary-text:var(--seki-secondary-foreground);--seki-button-secondary-border:transparent;--seki-button-secondary-hover-bg:light-dark(hsl(0, 0%, 96.1%, 0.8), hsl(0, 0%, 14.9%, 0.8));--seki-button-secondary-hover-text:var(--seki-secondary-foreground);--seki-button-secondary-hover-border:transparent;--seki-button-outline-bg:transparent;--seki-button-outline-text:var(--seki-foreground);--seki-button-outline-border:var(--seki-input);--seki-button-outline-hover-bg:var(--seki-accent);--seki-button-outline-hover-text:var(--seki-accent-foreground);--seki-button-outline-hover-border:var(--seki-input);--seki-button-ghost-bg:transparent;--seki-button-ghost-text:var(--seki-foreground);--seki-button-ghost-border:transparent;--seki-button-ghost-hover-bg:var(--seki-accent);--seki-button-ghost-hover-text:var(--seki-accent-foreground);--seki-button-ghost-hover-border:transparent;--seki-button-destructive-bg:var(--seki-destructive);--seki-button-destructive-text:var(--seki-destructive-foreground);--seki-button-destructive-border:transparent;--seki-button-destructive-hover-bg:hsl(0, 84.2%, 60.2%, 0.9);--seki-button-destructive-hover-border:transparent;--seki-button-sm-padding-x:var(--seki-spacing-3, 0.75rem);--seki-button-sm-padding-y:0.375rem;--seki-button-sm-font-size:var(--seki-text-sm, 0.875rem);--seki-button-sm-height:2.25rem;--seki-button-md-padding-x:var(--seki-spacing-4, 1rem);--seki-button-md-padding-y:var(--seki-spacing-2, 0.5rem);--seki-button-md-font-size:var(--seki-text-base, 1rem);--seki-button-md-height:2.5rem;--seki-button-lg-padding-x:2rem;--seki-button-lg-padding-y:0.5rem;--seki-button-lg-font-size:1rem;--seki-button-lg-height:2.75rem;--seki-button-icon-sm-size:2rem;--seki-button-icon-size:2.5rem;--seki-button-icon-lg-size:3rem;--seki-button-icon-gap:0.5rem;--seki-button-link-bg:transparent;--seki-button-link-text:var(--seki-primary);--seki-button-link-border:transparent;--seki-button-link-hover-bg:transparent;--seki-button-link-hover-text:var(--seki-primary);--seki-button-link-hover-border:transparent;--seki-button-radius:var(--seki-radius-md, 0.375rem);--seki-button-font-weight:var(--seki-font-medium, 500);--seki-button-transition-duration:150ms;--seki-button-transition-timing:ease-in-out;--seki-button-shadow:var(--seki-shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05));--seki-button-shadow-hover:var(--seki-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1));--seki-button-disabled-opacity:0.5;--seki-input-bg:var(--seki-background);--seki-input-border:var(--seki-border);--seki-input-text:var(--seki-foreground);--seki-input-placeholder:var(--seki-muted-foreground);--seki-input-ring:var(--seki-ring);--seki-input-invalid-border:var(--seki-destructive);--seki-input-invalid-ring:var(--seki-destructive);--seki-input-disabled-opacity:0.5;--seki-input-radius:var(--seki-radius-md);--seki-input-ring-offset:2px;--seki-select-trigger-bg:var(--seki-background);--seki-select-trigger-border:1px solid var(--seki-border);--seki-select-trigger-bg-hover:var(--seki-muted);--seki-select-trigger-radius:var(--seki-radius-md);--seki-select-trigger-min-height:2.5rem;--seki-select-trigger-padding:0.5rem 0.75rem;--seki-select-trigger-gap:0.5rem;--seki-select-content-bg:var(--seki-popover);--seki-select-content-border:1px solid var(--seki-border);--seki-select-content-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1);--seki-select-content-radius:var(--seki-radius-md);--seki-select-content-padding:0.5rem 0;--seki-select-option-padding:0.5rem 0.75rem;--seki-select-option-gap:0.5rem;--seki-select-option-radius:var(--seki-radius-sm);--seki-select-option-bg-hover:var(--seki-muted);--seki-select-option-bg-selected:var(--seki-muted);--seki-select-group-label-padding:0.5rem 0.75rem;--seki-select-group-label-font-size:var(--seki-font-size-xs);--seki-select-group-label-font-weight:var(--seki-font-semibold);--seki-select-group-label-color:var(--seki-muted-foreground);--seki-select-group-separator:1px solid var(--seki-border)}:host{--seki-spacing-0:0;--seki-spacing-0-5:0.125rem;--seki-spacing-1:0.25rem;--seki-spacing-1-5:0.375rem;--seki-spacing-2:0.5rem;--seki-spacing-2-5:0.625rem;--seki-spacing-3:0.75rem;--seki-spacing-3-5:0.875rem;--seki-spacing-4:1rem;--seki-spacing-5:1.25rem;--seki-spacing-6:1.5rem;--seki-spacing-8:2rem;--seki-spacing-10:2.5rem;--seki-spacing-12:3rem;--seki-spacing-16:4rem;--seki-spacing-20:5rem;--seki-spacing-24:6rem;--seki-input-height-sm:2rem;--seki-input-height-md:2.5rem;--seki-input-height-lg:3rem;--seki-input-padding-x:0.75rem;--seki-input-padding-y:0.5rem;--seki-input-font-size:0.875rem;--seki-input-ring-offset:2px}:host{--seki-shadow-sm:0 1px 2px 0 rgb(0 0 0 / 0.05);--seki-shadow-md:0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);--seki-shadow-lg:0 10px 15px -3px rgb(0 0 0 / 0.15), 0 4px 6px -4px rgb(0 0 0 / 0.1);--seki-shadow-xl:0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)}:host{--seki-shadow-xs-plus:0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);--seki-shadow-card:0 1px 3px 0 rgb(0 0 0 / 0.1);--seki-shadow-card-hover:0 4px 6px 0 rgb(0 0 0 / 0.1);--seki-shadow-thumb-hover:0 2px 6px 0 rgb(0 0 0 / 0.15);--seki-shadow-floating:0 4px 12px 0 rgb(0 0 0 / 0.15);--seki-shadow-floating-sm:0 2px 8px 0 rgb(0 0 0 / 0.1);--seki-shadow-overlay:0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);--seki-shadow-overlay-top:0 -10px 15px -3px rgb(0 0 0 / 0.1), 0 -4px 6px -4px rgb(0 0 0 / 0.1);--seki-drop-shadow-up:0 -2px 2px rgb(0 0 0 / 0.05);--seki-overlay:light-dark(rgb(0 0 0 / 0.5), rgb(0 0 0 / 0.7));--seki-overlay-strong:rgb(0 0 0 / 0.8)}:host{--seki-font-sans:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue',\n Arial, sans-serif;--seki-font-mono:ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;--seki-text-xs:0.75rem;--seki-text-sm:0.875rem;--seki-text-base:1rem;--seki-text-lg:1.125rem;--seki-text-xl:1.25rem;--seki-text-2xl:1.5rem;--seki-text-3xl:1.875rem;--seki-text-4xl:2.25rem;--seki-font-normal:400;--seki-font-medium:500;--seki-font-semibold:600;--seki-font-bold:700;--seki-leading-none:1;--seki-leading-tight:1.25;--seki-leading-normal:1.5;--seki-leading-relaxed:1.75}:host{--seki-radius-sm:0.25rem;--seki-radius-md:0.375rem;--seki-radius-lg:0.5rem;--seki-radius-xl:1rem;--seki-radius-full:9999px;}:host{--seki-sidebar-width:16rem;--seki-sidebar-width-icon:3rem;--seki-sidebar-width-mobile:18rem;--seki-sidebar-background:light-dark(hsl(0, 0%, 98%), hsl(240, 5.9%, 10%));--seki-sidebar-foreground:light-dark(hsl(240, 5.3%, 26.1%), hsl(240, 4.8%, 95.9%));--seki-sidebar-primary:light-dark(hsl(240, 5.9%, 10%), hsl(0, 0%, 98%));--seki-sidebar-primary-foreground:light-dark(hsl(0, 0%, 98%), hsl(240, 5.9%, 10%));--seki-sidebar-accent:light-dark(hsl(240, 4.8%, 95.9%), hsl(240, 3.7%, 15.9%));--seki-sidebar-accent-foreground:light-dark(hsl(240, 5.9%, 10%), hsl(240, 4.8%, 95.9%));--seki-sidebar-border:light-dark(hsl(220, 13%, 91%), hsl(240, 3.7%, 15.9%));--seki-sidebar-ring:hsl(217.2, 91.2%, 59.8%);--seki-sidebar-muted-foreground:light-dark(hsl(240, 3.8%, 46.1%), hsl(240, 5%, 64.9%));--seki-sidebar-menu-button-height:2rem;--seki-sidebar-menu-button-height-lg:3rem;--seki-sidebar-menu-button-padding:0.5rem;--seki-sidebar-menu-button-gap:0.5rem;--seki-sidebar-menu-button-radius:var(--seki-radius-md, 0.375rem);--seki-sidebar-menu-sub-padding-left:1.75rem;--seki-sidebar-menu-sub-border-width:1px;--seki-sidebar-group-padding:0.5rem;--seki-sidebar-group-label-height:2rem;--seki-sidebar-group-label-padding:0.5rem;--seki-sidebar-header-height:auto;--seki-sidebar-footer-height:auto;--seki-sidebar-header-padding:0.5rem;--seki-sidebar-footer-padding:0.5rem;--seki-sidebar-content-padding:0.5rem;--seki-sidebar-rail-width:1rem;--seki-sidebar-transition-duration:200ms;--seki-sidebar-transition-timing:ease-in-out;--seki-sidebar-mobile-breakpoint:768px;--seki-sidebar-overlay-bg:hsla(0, 0%, 0%, 0.8)}:host{--seki-animation-fast:150ms;--seki-animation-normal:200ms;--seki-animation-slow:300ms;--seki-ease-in:cubic-bezier(0.4, 0, 1, 1);--seki-ease-out:cubic-bezier(0, 0, 0.2, 1);--seki-ease-in-out:cubic-bezier(0.4, 0, 0.2, 1);--seki-accordion-content-height:auto}@keyframes seki-fade-in{from{opacity:0}to{opacity:1}}@keyframes seki-fade-out{from{opacity:1}to{opacity:0}}@keyframes seki-scale-in{from{opacity:0;transform:scale(0.95)}to{opacity:1;transform:scale(1)}}@keyframes seki-scale-out{from{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(0.95)}}@keyframes seki-slide-in-from-top{from{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes seki-slide-out-to-top{from{transform:translateY(0)}to{transform:translateY(-100%)}}@keyframes seki-slide-in-from-bottom{from{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes seki-slide-out-to-bottom{from{transform:translateY(0)}to{transform:translateY(100%)}}@keyframes seki-slide-in-from-left{from{transform:translateX(-100%)}to{transform:translateX(0)}}@keyframes seki-slide-out-to-left{from{transform:translateX(0)}to{transform:translateX(-100%)}}@keyframes seki-slide-in-from-right{from{transform:translateX(100%)}to{transform:translateX(0)}}@keyframes seki-slide-out-to-right{from{transform:translateX(0)}to{transform:translateX(100%)}}@keyframes seki-accordion-down{from{height:0;opacity:0}to{height:var(--seki-accordion-content-height);opacity:1}}@keyframes seki-accordion-up{from{height:var(--seki-accordion-content-height);opacity:1}to{height:0;opacity:0}}@keyframes seki-zoom-in{from{opacity:0;transform:scale(0.96)}to{opacity:1;transform:scale(1)}}@keyframes seki-zoom-out{from{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(0.96)}}@keyframes seki-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}@keyframes seki-pulse{0%,100%{opacity:1}50%{opacity:0.5}}@keyframes seki-bounce{0%,100%{transform:translateY(-25%);animation-timing-function:cubic-bezier(0.8, 0, 1, 1)}50%{transform:translateY(0);animation-timing-function:cubic-bezier(0, 0, 0.2, 1)}}@keyframes seki-collapsible-open{from{height:0;overflow:hidden}to{height:var(--seki-collapsible-content-height, auto)}}@keyframes seki-collapsible-close{from{height:var(--seki-collapsible-content-height, auto)}to{height:0;overflow:hidden}}@keyframes seki-toast-slide-in-right{from{transform:translateX(calc(100% + 1rem))}to{transform:translateX(0)}}@keyframes seki-toast-slide-out-right{from{transform:translateX(0)}to{transform:translateX(calc(100% + 1rem))}}@keyframes seki-toast-swipe-out{from{transform:translateX(var(--seki-toast-swipe-end-x, 0))}to{transform:translateX(calc(100% + 1rem))}}.seki-animate-fade-in{animation:seki-fade-in var(--seki-animation-normal) var(--seki-ease-out)}.seki-animate-fade-out{animation:seki-fade-out var(--seki-animation-normal) var(--seki-ease-in)}.seki-animate-scale-in{animation:seki-scale-in var(--seki-animation-normal) var(--seki-ease-out)}.seki-animate-scale-out{animation:seki-scale-out var(--seki-animation-normal) var(--seki-ease-in)}.seki-animate-spin{animation:seki-spin 1s linear infinite}.seki-animate-pulse{animation:seki-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite}.seki-animate-bounce{animation:seki-bounce 1s infinite}@media (prefers-reduced-motion: reduce){*,*::before,*::after{animation-duration:0.01ms !important;animation-iteration-count:1 !important;transition-duration:0.01ms !important}}[data-theme='dark']{color-scheme:dark}[data-theme='light']{color-scheme:light}:host{display:block;border-bottom:1px solid var(--seki-border, hsl(240 5.9% 90%))}:host(:last-child){border-bottom:none}:host([data-disabled]){pointer-events:none;opacity:0.5}.accordion-item{display:flex;flex-direction:column}";
4
6
 
@@ -14,35 +16,27 @@ const SekiAccordionItem$1 = /*@__PURE__*/ proxyCustomElement(class SekiAccordion
14
16
  */
15
17
  this.disabled = false;
16
18
  this._isOpen = false;
17
- this.onAccordionValueChange = () => {
19
+ this.accordion = new ContextConsumer('seki-accordion', '_accordionContext', () => {
18
20
  var _a, _b;
19
21
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
22
  this.el._accordionItemContext = this.getItemContext();
21
23
  this._isOpen = (_b = (_a = this.getAccordionContext()) === null || _a === void 0 ? void 0 : _a.isItemOpen(this.value)) !== null && _b !== void 0 ? _b : false;
22
- };
23
- this.instanceId = ++SekiAccordionItem.instanceCount;
24
+ });
24
25
  }
25
26
  getAccordionContext() {
26
- const accordion = this.el.closest('seki-accordion');
27
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
- return accordion ? accordion._accordionContext : null;
29
- }
30
- get contentId() {
31
- return `seki-accordion-content-${this.instanceId}`;
32
- }
33
- get triggerId() {
34
- return `seki-accordion-trigger-${this.instanceId}`;
27
+ return this.accordion.context;
35
28
  }
36
29
  getItemContext() {
37
30
  var _a, _b;
38
31
  const accordionContext = this.getAccordionContext();
39
32
  const isOpen = (_a = accordionContext === null || accordionContext === void 0 ? void 0 : accordionContext.isItemOpen(this.value)) !== null && _a !== void 0 ? _a : false;
33
+ const { contentId, triggerId } = resolveAccordionIds(this.el);
40
34
  return {
41
35
  value: this.value,
42
36
  isOpen,
43
37
  disabled: this.disabled || ((_b = accordionContext === null || accordionContext === void 0 ? void 0 : accordionContext.disabled) !== null && _b !== void 0 ? _b : false),
44
- contentId: this.contentId,
45
- triggerId: this.triggerId,
38
+ contentId,
39
+ triggerId,
46
40
  // Look up context dynamically instead of capturing it in closure
47
41
  toggle: () => {
48
42
  const ctx = this.getAccordionContext();
@@ -50,27 +44,17 @@ const SekiAccordionItem$1 = /*@__PURE__*/ proxyCustomElement(class SekiAccordion
50
44
  },
51
45
  };
52
46
  }
53
- componentDidLoad() {
54
- var _a, _b;
55
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
56
- this.el._accordionItemContext = this.getItemContext();
57
- // Listen for value changes from parent
58
- this.accordionEl = (_a = this.el.closest('seki-accordion')) !== null && _a !== void 0 ? _a : undefined;
59
- (_b = this.accordionEl) === null || _b === void 0 ? void 0 : _b.addEventListener('sekiValueChange', this.onAccordionValueChange);
60
- }
61
- componentWillRender() {
62
- var _a, _b;
63
- this._isOpen = (_b = (_a = this.getAccordionContext()) === null || _a === void 0 ? void 0 : _a.isItemOpen(this.value)) !== null && _b !== void 0 ? _b : false;
47
+ connectedCallback() {
48
+ this.accordion.connect(this.el);
64
49
  }
65
50
  disconnectedCallback() {
66
- var _a;
67
- (_a = this.accordionEl) === null || _a === void 0 ? void 0 : _a.removeEventListener('sekiValueChange', this.onAccordionValueChange);
51
+ this.accordion.disconnect();
68
52
  }
69
53
  render() {
70
54
  var _a, _b, _c, _d;
71
55
  const isOpen = (_b = (_a = this.getAccordionContext()) === null || _a === void 0 ? void 0 : _a.isItemOpen(this.value)) !== null && _b !== void 0 ? _b : false;
72
56
  const isDisabled = this.disabled || ((_d = (_c = this.getAccordionContext()) === null || _c === void 0 ? void 0 : _c.disabled) !== null && _d !== void 0 ? _d : false);
73
- return (h(Host, { key: 'f008b7dd03106f3056915a89bd050880261f21b5', "data-state": isOpen ? 'open' : 'closed', "data-disabled": isDisabled ? '' : undefined }, h("div", { key: 'b8f2c46b507fade2e23320e2f9552672fdf1aa9b', part: "item", class: "accordion-item" }, h("slot", { key: 'e70a0832e8e96c625b416071ef2ce8419740df2d' }))));
57
+ return (h(Host, { key: '05505c45910786a9bedb858d85bd637b2bce69bd', "data-state": isOpen ? 'open' : 'closed', "data-disabled": isDisabled ? '' : undefined }, h("div", { key: '7c55061db0bbe207102cf174b3ee684243f19e14', part: "item", class: "accordion-item" }, h("slot", { key: 'c1707d3a945af4cad1ca000739acf189b5e5cf37' }))));
74
58
  }
75
59
  get el() { return this; }
76
60
  static get style() { return sekiAccordionItemCss; }
@@ -79,7 +63,6 @@ const SekiAccordionItem$1 = /*@__PURE__*/ proxyCustomElement(class SekiAccordion
79
63
  "disabled": [516],
80
64
  "_isOpen": [32]
81
65
  }]);
82
- SekiAccordionItem$1.instanceCount = 0;
83
66
  function defineCustomElement$1() {
84
67
  if (typeof customElements === "undefined") {
85
68
  return;