@sekiui/elements 0.0.82 → 0.0.83

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 (471) hide show
  1. package/dist/cdn/p-BgtjDG0h.js +45 -0
  2. package/dist/cdn/{p-BgpxFAwm.js → p-BuBiWSGh.js} +18 -3
  3. package/dist/cdn/{p-o_nleCju.js → p-Cs0DgQw5.js} +25 -8
  4. package/dist/cdn/p-D50kwTtW.js +160 -0
  5. package/dist/cdn/p-DuJp0Kp6.js +63 -0
  6. package/dist/cdn/seki-accordion-content.js +10 -8
  7. package/dist/cdn/seki-accordion-item.js +12 -10
  8. package/dist/cdn/seki-accordion-trigger.js +12 -10
  9. package/dist/cdn/seki-alert-dialog-action.js +1 -1
  10. package/dist/cdn/seki-alert-dialog-cancel.js +1 -1
  11. package/dist/cdn/seki-alert-dialog-content.js +23 -21
  12. package/dist/cdn/seki-alert-dialog.js +1 -1
  13. package/dist/cdn/seki-button.js +1 -1
  14. package/dist/cdn/seki-calendar.js +1 -1
  15. package/dist/cdn/seki-carousel-dots.js +3 -3
  16. package/dist/cdn/seki-carousel-next.js +3 -3
  17. package/dist/cdn/seki-carousel-previous.js +3 -3
  18. package/dist/cdn/seki-carousel.js +22 -4
  19. package/dist/cdn/seki-collapsible-content.js +9 -5
  20. package/dist/cdn/seki-combobox-item.js +9 -2
  21. package/dist/cdn/seki-command-group.js +9 -7
  22. package/dist/cdn/seki-context-menu-content.js +17 -15
  23. package/dist/cdn/seki-context-menu.js +11 -2
  24. package/dist/cdn/seki-data-table.js +19 -16
  25. package/dist/cdn/seki-date-picker.js +1 -1
  26. package/dist/cdn/seki-dialog-content.js +23 -21
  27. package/dist/cdn/seki-dialog-overlay.js +10 -8
  28. package/dist/cdn/seki-dialog.js +1 -1
  29. package/dist/cdn/seki-dropdown-menu-content.js +23 -68
  30. package/dist/cdn/seki-dropdown-menu-radio.js +11 -9
  31. package/dist/cdn/seki-dropdown-menu-trigger.js +11 -9
  32. package/dist/cdn/seki-dropdown-menu.js +11 -2
  33. package/dist/cdn/seki-menubar-content.js +24 -42
  34. package/dist/cdn/seki-menubar-radio.js +11 -9
  35. package/dist/cdn/seki-menubar-trigger.js +12 -10
  36. package/dist/cdn/seki-menubar.js +11 -2
  37. package/dist/cdn/seki-navigation-menu-content.js +8 -3
  38. package/dist/cdn/seki-navigation-menu-item.js +2 -2
  39. package/dist/cdn/seki-navigation-menu-link.js +8 -3
  40. package/dist/cdn/seki-navigation-menu-list.js +7 -2
  41. package/dist/cdn/seki-navigation-menu-trigger.js +3 -3
  42. package/dist/cdn/seki-navigation-menu.js +5 -5
  43. package/dist/cdn/seki-popover-content.js +20 -65
  44. package/dist/cdn/seki-popover.js +13 -3
  45. package/dist/cdn/seki-scroll-bar.js +6 -2
  46. package/dist/cdn/seki-select-option.js +29 -13
  47. package/dist/cdn/seki-select.js +79 -33
  48. package/dist/cdn/seki-sidebar-menu-sub.js +17 -16
  49. package/dist/cdn/seki-sidebar-provider.js +13 -4
  50. package/dist/cdn/seki-sidebar-rail.js +7 -2
  51. package/dist/cdn/seki-slider.js +36 -4
  52. package/dist/cdn/seki-spinner.js +2 -2
  53. package/dist/cdn/seki-table-body.js +1 -1
  54. package/dist/cdn/seki-table-caption.js +1 -1
  55. package/dist/cdn/seki-table-footer.js +1 -1
  56. package/dist/cdn/seki-table-header.js +1 -1
  57. package/dist/cdn/seki-table-row.js +2 -2
  58. package/dist/cdn/seki-table.js +1 -1
  59. package/dist/cdn/seki-tabs-content.js +12 -10
  60. package/dist/cdn/seki-tabs-list.js +2 -2
  61. package/dist/cdn/seki-tabs-trigger.js +12 -10
  62. package/dist/cdn/seki-tabs.js +2 -2
  63. package/dist/cdn/seki-textarea.js +1 -1
  64. package/dist/cdn/seki-toggle-group.js +1 -1
  65. package/dist/cdn/seki-toggle.js +1 -1
  66. package/dist/cdn/seki-tooltip.js +16 -3
  67. package/dist/cjs/ancestor-attrs-CnUfqtWw.js +47 -0
  68. package/dist/cjs/focus-trap-CFl79SjZ.js +165 -0
  69. package/dist/cjs/loader.cjs.js +1 -1
  70. package/dist/cjs/positioning-LQZBWMS6.js +65 -0
  71. package/dist/cjs/seki-accordion-content.cjs.entry.js +10 -8
  72. package/dist/cjs/seki-accordion-item.cjs.entry.js +12 -10
  73. package/dist/cjs/seki-accordion-trigger.cjs.entry.js +12 -10
  74. package/dist/cjs/seki-alert-dialog-action.cjs.entry.js +1 -1
  75. package/dist/cjs/seki-alert-dialog-cancel.cjs.entry.js +1 -1
  76. package/dist/cjs/seki-alert-dialog-content.cjs.entry.js +23 -21
  77. package/dist/cjs/seki-button.cjs.entry.js +1 -1
  78. package/dist/cjs/seki-calendar.cjs.entry.js +25 -8
  79. package/dist/cjs/seki-carousel-dots.cjs.entry.js +3 -3
  80. package/dist/cjs/seki-carousel-next.cjs.entry.js +3 -3
  81. package/dist/cjs/seki-carousel-previous.cjs.entry.js +3 -3
  82. package/dist/cjs/seki-carousel.cjs.entry.js +22 -4
  83. package/dist/cjs/seki-collapsible-content.cjs.entry.js +9 -5
  84. package/dist/cjs/seki-combobox-item.cjs.entry.js +9 -2
  85. package/dist/cjs/seki-command-group.cjs.entry.js +9 -7
  86. package/dist/cjs/seki-context-menu-content.cjs.entry.js +17 -15
  87. package/dist/cjs/seki-context-menu.cjs.entry.js +11 -2
  88. package/dist/cjs/seki-data-table.cjs.entry.js +19 -16
  89. package/dist/cjs/seki-dialog-content.cjs.entry.js +23 -21
  90. package/dist/cjs/seki-dialog-overlay.cjs.entry.js +10 -8
  91. package/dist/cjs/seki-dialog.cjs.entry.js +15 -2
  92. package/dist/cjs/seki-dropdown-menu-content.cjs.entry.js +23 -68
  93. package/dist/cjs/seki-dropdown-menu-radio.cjs.entry.js +11 -9
  94. package/dist/cjs/seki-dropdown-menu-trigger.cjs.entry.js +11 -9
  95. package/dist/cjs/seki-dropdown-menu.cjs.entry.js +11 -2
  96. package/dist/cjs/seki-menubar-content.cjs.entry.js +24 -42
  97. package/dist/cjs/seki-menubar-radio.cjs.entry.js +11 -9
  98. package/dist/cjs/seki-menubar-trigger.cjs.entry.js +12 -10
  99. package/dist/cjs/seki-menubar.cjs.entry.js +11 -2
  100. package/dist/cjs/seki-navigation-menu-content.cjs.entry.js +8 -3
  101. package/dist/cjs/seki-navigation-menu-item.cjs.entry.js +2 -2
  102. package/dist/cjs/seki-navigation-menu-link.cjs.entry.js +8 -3
  103. package/dist/cjs/seki-navigation-menu-list.cjs.entry.js +7 -2
  104. package/dist/cjs/seki-navigation-menu-trigger.cjs.entry.js +3 -3
  105. package/dist/cjs/seki-navigation-menu.cjs.entry.js +5 -5
  106. package/dist/cjs/seki-popover-content.cjs.entry.js +20 -65
  107. package/dist/cjs/seki-popover.cjs.entry.js +13 -3
  108. package/dist/cjs/seki-scroll-bar.cjs.entry.js +6 -2
  109. package/dist/cjs/seki-select-option.cjs.entry.js +29 -13
  110. package/dist/cjs/seki-select.cjs.entry.js +81 -30
  111. package/dist/cjs/seki-sidebar-menu-sub.cjs.entry.js +17 -16
  112. package/dist/cjs/seki-sidebar-provider.cjs.entry.js +13 -4
  113. package/dist/cjs/seki-sidebar-rail.cjs.entry.js +7 -2
  114. package/dist/cjs/seki-slider.cjs.entry.js +36 -1
  115. package/dist/cjs/seki-spinner.cjs.entry.js +2 -2
  116. package/dist/cjs/seki-table-body.cjs.entry.js +1 -1
  117. package/dist/cjs/seki-table-caption.cjs.entry.js +1 -1
  118. package/dist/cjs/seki-table-footer.cjs.entry.js +1 -1
  119. package/dist/cjs/seki-table-header.cjs.entry.js +1 -1
  120. package/dist/cjs/seki-table-row.cjs.entry.js +2 -2
  121. package/dist/cjs/seki-table.cjs.entry.js +1 -1
  122. package/dist/cjs/seki-tabs-content.cjs.entry.js +12 -10
  123. package/dist/cjs/seki-tabs-list.cjs.entry.js +2 -2
  124. package/dist/cjs/seki-tabs-trigger.cjs.entry.js +12 -10
  125. package/dist/cjs/seki-tabs.cjs.entry.js +2 -2
  126. package/dist/cjs/seki-textarea.cjs.entry.js +1 -1
  127. package/dist/cjs/seki-toggle-group.cjs.entry.js +1 -1
  128. package/dist/cjs/seki-toggle.cjs.entry.js +1 -1
  129. package/dist/cjs/seki-tooltip.cjs.entry.js +16 -3
  130. package/dist/cjs/sekiui.cjs.js +1 -1
  131. package/dist/collection/components/accordion/seki-accordion-content.js +10 -8
  132. package/dist/collection/components/accordion/seki-accordion-item.js +12 -10
  133. package/dist/collection/components/accordion/seki-accordion-trigger.js +12 -10
  134. package/dist/collection/components/alert-dialog/seki-alert-dialog-action.css +5 -5
  135. package/dist/collection/components/alert-dialog/seki-alert-dialog-cancel.css +4 -4
  136. package/dist/collection/components/alert-dialog/seki-alert-dialog-content.js +22 -20
  137. package/dist/collection/components/button/seki-button.css +9 -9
  138. package/dist/collection/components/calendar/seki-calendar.js +14 -5
  139. package/dist/collection/components/carousel/seki-carousel-dots.js +3 -3
  140. package/dist/collection/components/carousel/seki-carousel-next.js +3 -3
  141. package/dist/collection/components/carousel/seki-carousel-previous.js +3 -3
  142. package/dist/collection/components/carousel/seki-carousel.js +22 -4
  143. package/dist/collection/components/collapsible/seki-collapsible-content.js +9 -5
  144. package/dist/collection/components/combobox-item/seki-combobox-item.js +9 -2
  145. package/dist/collection/components/command/seki-command-group.js +9 -7
  146. package/dist/collection/components/context-menu/seki-context-menu-content.js +17 -15
  147. package/dist/collection/components/context-menu/seki-context-menu.js +11 -2
  148. package/dist/collection/components/data-table/seki-data-table.css +5 -5
  149. package/dist/collection/components/data-table/seki-data-table.js +18 -15
  150. package/dist/collection/components/dialog/seki-dialog-content.js +22 -20
  151. package/dist/collection/components/dialog/seki-dialog-overlay.js +10 -8
  152. package/dist/collection/components/dialog/seki-dialog.js +17 -1
  153. package/dist/collection/components/dropdown-menu/seki-dropdown-menu-content.js +23 -68
  154. package/dist/collection/components/dropdown-menu/seki-dropdown-menu-radio.js +11 -9
  155. package/dist/collection/components/dropdown-menu/seki-dropdown-menu-trigger.js +11 -9
  156. package/dist/collection/components/dropdown-menu/seki-dropdown-menu.js +11 -2
  157. package/dist/collection/components/menubar/seki-menubar-content.js +24 -42
  158. package/dist/collection/components/menubar/seki-menubar-radio.js +11 -9
  159. package/dist/collection/components/menubar/seki-menubar-trigger.js +12 -10
  160. package/dist/collection/components/menubar/seki-menubar.js +11 -2
  161. package/dist/collection/components/navigation-menu/seki-navigation-menu-content.css +1 -1
  162. package/dist/collection/components/navigation-menu/seki-navigation-menu-content.js +7 -2
  163. package/dist/collection/components/navigation-menu/seki-navigation-menu-item.js +2 -2
  164. package/dist/collection/components/navigation-menu/seki-navigation-menu-link.css +1 -1
  165. package/dist/collection/components/navigation-menu/seki-navigation-menu-link.js +7 -2
  166. package/dist/collection/components/navigation-menu/seki-navigation-menu-list.css +1 -1
  167. package/dist/collection/components/navigation-menu/seki-navigation-menu-list.js +6 -1
  168. package/dist/collection/components/navigation-menu/seki-navigation-menu-trigger.js +3 -3
  169. package/dist/collection/components/navigation-menu/seki-navigation-menu.js +5 -5
  170. package/dist/collection/components/popover/seki-popover-content.js +20 -65
  171. package/dist/collection/components/popover/seki-popover.js +13 -3
  172. package/dist/collection/components/scroll-area/seki-scroll-bar.css +5 -5
  173. package/dist/collection/components/scroll-area/seki-scroll-bar.js +5 -1
  174. package/dist/collection/components/select/seki-select.js +77 -30
  175. package/dist/collection/components/select-option/seki-select-option.js +29 -13
  176. package/dist/collection/components/sidebar/seki-sidebar-menu-sub.js +17 -16
  177. package/dist/collection/components/sidebar/seki-sidebar-provider.js +13 -4
  178. package/dist/collection/components/sidebar/seki-sidebar-rail.css +6 -6
  179. package/dist/collection/components/sidebar/seki-sidebar-rail.js +6 -1
  180. package/dist/collection/components/slider/seki-slider.js +36 -2
  181. package/dist/collection/components/spinner/seki-spinner.js +2 -2
  182. package/dist/collection/components/table/seki-table-body.js +1 -1
  183. package/dist/collection/components/table/seki-table-caption.js +1 -1
  184. package/dist/collection/components/table/seki-table-footer.js +1 -1
  185. package/dist/collection/components/table/seki-table-header.js +1 -1
  186. package/dist/collection/components/table/seki-table-row.js +2 -2
  187. package/dist/collection/components/table/seki-table.js +1 -1
  188. package/dist/collection/components/tabs/seki-tabs-content.js +12 -10
  189. package/dist/collection/components/tabs/seki-tabs-list.js +2 -2
  190. package/dist/collection/components/tabs/seki-tabs-trigger.js +12 -10
  191. package/dist/collection/components/tabs/seki-tabs.js +2 -2
  192. package/dist/collection/components/textarea/seki-textarea.js +1 -1
  193. package/dist/collection/components/toggle/seki-toggle.js +1 -1
  194. package/dist/collection/components/toggle-group/seki-toggle-group.js +1 -1
  195. package/dist/collection/components/tooltip/seki-tooltip.js +16 -3
  196. package/dist/collection/utils/ancestor-attrs.js +43 -0
  197. package/dist/collection/utils/calendar/date-utils.js +12 -4
  198. package/dist/collection/utils/dialog/focus-trap.js +110 -21
  199. package/dist/collection/utils/positioning.js +61 -0
  200. package/dist/components/p-BgtjDG0h.js +45 -0
  201. package/dist/components/{p-tgCyk_Am.js → p-C87BOunl.js} +18 -3
  202. package/dist/components/p-D50kwTtW.js +160 -0
  203. package/dist/components/{p-DKbSEP4m.js → p-DFfIiiRa.js} +25 -8
  204. package/dist/components/p-DuJp0Kp6.js +63 -0
  205. package/dist/components/seki-accordion-content.js +10 -8
  206. package/dist/components/seki-accordion-item.js +12 -10
  207. package/dist/components/seki-accordion-trigger.js +12 -10
  208. package/dist/components/seki-alert-dialog-action.js +1 -1
  209. package/dist/components/seki-alert-dialog-cancel.js +1 -1
  210. package/dist/components/seki-alert-dialog-content.js +23 -21
  211. package/dist/components/seki-alert-dialog.js +1 -1
  212. package/dist/components/seki-button.js +1 -1
  213. package/dist/components/seki-calendar.js +1 -1
  214. package/dist/components/seki-carousel-dots.js +3 -3
  215. package/dist/components/seki-carousel-next.js +3 -3
  216. package/dist/components/seki-carousel-previous.js +3 -3
  217. package/dist/components/seki-carousel.js +22 -4
  218. package/dist/components/seki-collapsible-content.js +9 -5
  219. package/dist/components/seki-combobox-item.js +9 -2
  220. package/dist/components/seki-command-group.js +9 -7
  221. package/dist/components/seki-context-menu-content.js +17 -15
  222. package/dist/components/seki-context-menu.js +11 -2
  223. package/dist/components/seki-data-table.js +19 -16
  224. package/dist/components/seki-date-picker.js +1 -1
  225. package/dist/components/seki-dialog-content.js +23 -21
  226. package/dist/components/seki-dialog-overlay.js +10 -8
  227. package/dist/components/seki-dialog.js +1 -1
  228. package/dist/components/seki-dropdown-menu-content.js +23 -68
  229. package/dist/components/seki-dropdown-menu-radio.js +11 -9
  230. package/dist/components/seki-dropdown-menu-trigger.js +11 -9
  231. package/dist/components/seki-dropdown-menu.js +11 -2
  232. package/dist/components/seki-menubar-content.js +24 -42
  233. package/dist/components/seki-menubar-radio.js +11 -9
  234. package/dist/components/seki-menubar-trigger.js +12 -10
  235. package/dist/components/seki-menubar.js +11 -2
  236. package/dist/components/seki-navigation-menu-content.js +8 -3
  237. package/dist/components/seki-navigation-menu-item.js +2 -2
  238. package/dist/components/seki-navigation-menu-link.js +8 -3
  239. package/dist/components/seki-navigation-menu-list.js +7 -2
  240. package/dist/components/seki-navigation-menu-trigger.js +3 -3
  241. package/dist/components/seki-navigation-menu.js +5 -5
  242. package/dist/components/seki-popover-content.js +20 -65
  243. package/dist/components/seki-popover.js +13 -3
  244. package/dist/components/seki-scroll-bar.js +6 -2
  245. package/dist/components/seki-select-option.js +29 -13
  246. package/dist/components/seki-select.js +79 -33
  247. package/dist/components/seki-sidebar-menu-sub.js +17 -16
  248. package/dist/components/seki-sidebar-provider.js +13 -4
  249. package/dist/components/seki-sidebar-rail.js +7 -2
  250. package/dist/components/seki-slider.js +36 -4
  251. package/dist/components/seki-spinner.js +2 -2
  252. package/dist/components/seki-table-body.js +1 -1
  253. package/dist/components/seki-table-caption.js +1 -1
  254. package/dist/components/seki-table-footer.js +1 -1
  255. package/dist/components/seki-table-header.js +1 -1
  256. package/dist/components/seki-table-row.js +2 -2
  257. package/dist/components/seki-table.js +1 -1
  258. package/dist/components/seki-tabs-content.js +12 -10
  259. package/dist/components/seki-tabs-list.js +2 -2
  260. package/dist/components/seki-tabs-trigger.js +12 -10
  261. package/dist/components/seki-tabs.js +2 -2
  262. package/dist/components/seki-textarea.js +1 -1
  263. package/dist/components/seki-toggle-group.js +1 -1
  264. package/dist/components/seki-toggle.js +1 -1
  265. package/dist/components/seki-tooltip.js +16 -3
  266. package/dist/esm/ancestor-attrs-BgtjDG0h.js +45 -0
  267. package/dist/esm/focus-trap-D50kwTtW.js +160 -0
  268. package/dist/esm/loader.js +1 -1
  269. package/dist/esm/positioning-DuJp0Kp6.js +63 -0
  270. package/dist/esm/seki-accordion-content.entry.js +10 -8
  271. package/dist/esm/seki-accordion-item.entry.js +12 -10
  272. package/dist/esm/seki-accordion-trigger.entry.js +12 -10
  273. package/dist/esm/seki-alert-dialog-action.entry.js +1 -1
  274. package/dist/esm/seki-alert-dialog-cancel.entry.js +1 -1
  275. package/dist/esm/seki-alert-dialog-content.entry.js +23 -21
  276. package/dist/esm/seki-button.entry.js +1 -1
  277. package/dist/esm/seki-calendar.entry.js +25 -8
  278. package/dist/esm/seki-carousel-dots.entry.js +3 -3
  279. package/dist/esm/seki-carousel-next.entry.js +3 -3
  280. package/dist/esm/seki-carousel-previous.entry.js +3 -3
  281. package/dist/esm/seki-carousel.entry.js +22 -4
  282. package/dist/esm/seki-collapsible-content.entry.js +9 -5
  283. package/dist/esm/seki-combobox-item.entry.js +9 -2
  284. package/dist/esm/seki-command-group.entry.js +9 -7
  285. package/dist/esm/seki-context-menu-content.entry.js +17 -15
  286. package/dist/esm/seki-context-menu.entry.js +11 -2
  287. package/dist/esm/seki-data-table.entry.js +19 -16
  288. package/dist/esm/seki-dialog-content.entry.js +23 -21
  289. package/dist/esm/seki-dialog-overlay.entry.js +10 -8
  290. package/dist/esm/seki-dialog.entry.js +15 -2
  291. package/dist/esm/seki-dropdown-menu-content.entry.js +23 -68
  292. package/dist/esm/seki-dropdown-menu-radio.entry.js +11 -9
  293. package/dist/esm/seki-dropdown-menu-trigger.entry.js +11 -9
  294. package/dist/esm/seki-dropdown-menu.entry.js +11 -2
  295. package/dist/esm/seki-menubar-content.entry.js +24 -42
  296. package/dist/esm/seki-menubar-radio.entry.js +11 -9
  297. package/dist/esm/seki-menubar-trigger.entry.js +12 -10
  298. package/dist/esm/seki-menubar.entry.js +11 -2
  299. package/dist/esm/seki-navigation-menu-content.entry.js +8 -3
  300. package/dist/esm/seki-navigation-menu-item.entry.js +2 -2
  301. package/dist/esm/seki-navigation-menu-link.entry.js +8 -3
  302. package/dist/esm/seki-navigation-menu-list.entry.js +7 -2
  303. package/dist/esm/seki-navigation-menu-trigger.entry.js +3 -3
  304. package/dist/esm/seki-navigation-menu.entry.js +5 -5
  305. package/dist/esm/seki-popover-content.entry.js +20 -65
  306. package/dist/esm/seki-popover.entry.js +13 -3
  307. package/dist/esm/seki-scroll-bar.entry.js +6 -2
  308. package/dist/esm/seki-select-option.entry.js +29 -13
  309. package/dist/esm/seki-select.entry.js +81 -30
  310. package/dist/esm/seki-sidebar-menu-sub.entry.js +17 -16
  311. package/dist/esm/seki-sidebar-provider.entry.js +13 -4
  312. package/dist/esm/seki-sidebar-rail.entry.js +7 -2
  313. package/dist/esm/seki-slider.entry.js +36 -1
  314. package/dist/esm/seki-spinner.entry.js +2 -2
  315. package/dist/esm/seki-table-body.entry.js +1 -1
  316. package/dist/esm/seki-table-caption.entry.js +1 -1
  317. package/dist/esm/seki-table-footer.entry.js +1 -1
  318. package/dist/esm/seki-table-header.entry.js +1 -1
  319. package/dist/esm/seki-table-row.entry.js +2 -2
  320. package/dist/esm/seki-table.entry.js +1 -1
  321. package/dist/esm/seki-tabs-content.entry.js +12 -10
  322. package/dist/esm/seki-tabs-list.entry.js +2 -2
  323. package/dist/esm/seki-tabs-trigger.entry.js +12 -10
  324. package/dist/esm/seki-tabs.entry.js +2 -2
  325. package/dist/esm/seki-textarea.entry.js +1 -1
  326. package/dist/esm/seki-toggle-group.entry.js +1 -1
  327. package/dist/esm/seki-toggle.entry.js +1 -1
  328. package/dist/esm/seki-tooltip.entry.js +16 -3
  329. package/dist/esm/sekiui.js +1 -1
  330. package/dist/sekiui/{p-40458a33.entry.js → p-01420aec.entry.js} +1 -1
  331. package/dist/sekiui/{p-9643e1d8.entry.js → p-021cb880.entry.js} +1 -1
  332. package/dist/sekiui/p-0ab43c7f.entry.js +1 -0
  333. package/dist/sekiui/p-14b6774a.entry.js +1 -0
  334. package/dist/sekiui/{p-d02efcf2.entry.js → p-1b8d2288.entry.js} +1 -1
  335. package/dist/sekiui/{p-67fffcd0.entry.js → p-1eb709fb.entry.js} +1 -1
  336. package/dist/sekiui/{p-24ea0d3d.entry.js → p-2de73747.entry.js} +1 -1
  337. package/dist/sekiui/p-32569d7d.entry.js +1 -0
  338. package/dist/sekiui/p-367d9a7f.entry.js +1 -0
  339. package/dist/sekiui/p-40c40d4f.entry.js +1 -0
  340. package/dist/sekiui/p-4572d290.entry.js +1 -0
  341. package/dist/sekiui/p-49024e9e.entry.js +1 -0
  342. package/dist/sekiui/{p-0c2344d1.entry.js → p-4bf8c2fa.entry.js} +1 -1
  343. package/dist/sekiui/p-4e60d2d0.entry.js +1 -0
  344. package/dist/sekiui/{p-5a853b23.entry.js → p-51b11242.entry.js} +1 -1
  345. package/dist/sekiui/{p-541f1dbb.entry.js → p-57e7685a.entry.js} +1 -1
  346. package/dist/sekiui/p-677a1751.entry.js +1 -0
  347. package/dist/sekiui/{p-66b1c2ac.entry.js → p-695a4986.entry.js} +1 -1
  348. package/dist/sekiui/p-71f6da8b.entry.js +1 -0
  349. package/dist/sekiui/{p-96073eae.entry.js → p-75d46bc7.entry.js} +1 -1
  350. package/dist/sekiui/p-7cd76bbb.entry.js +1 -0
  351. package/dist/sekiui/p-80b79cc0.entry.js +1 -0
  352. package/dist/sekiui/p-835f723b.entry.js +1 -0
  353. package/dist/sekiui/p-851d1c50.entry.js +1 -0
  354. package/dist/sekiui/{p-b664489e.entry.js → p-887b559d.entry.js} +1 -1
  355. package/dist/sekiui/{p-7bf379c4.entry.js → p-8c369957.entry.js} +1 -1
  356. package/dist/sekiui/{p-41f5488e.entry.js → p-8c57364a.entry.js} +1 -1
  357. package/dist/sekiui/p-8d888e3d.entry.js +1 -0
  358. package/dist/sekiui/{p-4c1b29de.entry.js → p-92b0241d.entry.js} +1 -1
  359. package/dist/sekiui/{p-fc6d6133.entry.js → p-966b2358.entry.js} +1 -1
  360. package/dist/sekiui/p-9a00c59c.entry.js +1 -0
  361. package/dist/sekiui/{p-b14ba603.entry.js → p-9af630c4.entry.js} +1 -1
  362. package/dist/sekiui/p-BgtjDG0h.js +1 -0
  363. package/dist/sekiui/p-D50kwTtW.js +1 -0
  364. package/dist/sekiui/p-DuJp0Kp6.js +1 -0
  365. package/dist/sekiui/p-a29160bc.entry.js +1 -0
  366. package/dist/sekiui/p-a6ae5c4b.entry.js +1 -0
  367. package/dist/sekiui/{p-c1bf976b.entry.js → p-b0d1e077.entry.js} +1 -1
  368. package/dist/sekiui/{p-73cbd067.entry.js → p-b2a60e91.entry.js} +1 -1
  369. package/dist/sekiui/{p-a5edaf79.entry.js → p-b43f9720.entry.js} +1 -1
  370. package/dist/sekiui/p-b5c242a0.entry.js +1 -0
  371. package/dist/sekiui/{p-d5b616c5.entry.js → p-bac67676.entry.js} +1 -1
  372. package/dist/sekiui/p-bc611a3d.entry.js +1 -0
  373. package/dist/sekiui/p-c004f467.entry.js +1 -0
  374. package/dist/sekiui/{p-41fae140.entry.js → p-cb657adb.entry.js} +1 -1
  375. package/dist/sekiui/{p-fa9a68be.entry.js → p-cfac56e7.entry.js} +1 -1
  376. package/dist/sekiui/{p-bf52433b.entry.js → p-d1a06cbc.entry.js} +1 -1
  377. package/dist/sekiui/p-d1f6efac.entry.js +1 -0
  378. package/dist/sekiui/{p-67aaf0f1.entry.js → p-d4ed816d.entry.js} +1 -1
  379. package/dist/sekiui/p-eaf626e5.entry.js +1 -0
  380. package/dist/sekiui/p-ed9034e4.entry.js +1 -0
  381. package/dist/sekiui/p-edd02332.entry.js +1 -0
  382. package/dist/sekiui/{p-bd9d106a.entry.js → p-ee40575b.entry.js} +1 -1
  383. package/dist/sekiui/{p-8344563b.entry.js → p-ef3679b0.entry.js} +1 -1
  384. package/dist/sekiui/p-f07b430e.entry.js +1 -0
  385. package/dist/sekiui/p-f3c69359.entry.js +1 -0
  386. package/dist/sekiui/p-f53b37e2.entry.js +1 -0
  387. package/dist/sekiui/p-f587cd57.entry.js +1 -0
  388. package/dist/sekiui/p-f7e1fdf0.entry.js +1 -0
  389. package/dist/sekiui/p-fb1370a9.entry.js +1 -0
  390. package/dist/sekiui/p-fde2877f.entry.js +1 -0
  391. package/dist/sekiui/p-fed3a547.entry.js +1 -0
  392. package/dist/sekiui/sekiui.esm.js +1 -1
  393. package/dist/types/components/accordion/seki-accordion-content.d.ts +2 -0
  394. package/dist/types/components/accordion/seki-accordion-item.d.ts +2 -0
  395. package/dist/types/components/accordion/seki-accordion-trigger.d.ts +2 -0
  396. package/dist/types/components/alert-dialog/seki-alert-dialog-content.d.ts +2 -0
  397. package/dist/types/components/carousel/seki-carousel.d.ts +3 -0
  398. package/dist/types/components/collapsible/seki-collapsible-content.d.ts +2 -0
  399. package/dist/types/components/combobox-item/seki-combobox-item.d.ts +1 -0
  400. package/dist/types/components/command/seki-command-group.d.ts +2 -0
  401. package/dist/types/components/context-menu/seki-context-menu-content.d.ts +2 -0
  402. package/dist/types/components/context-menu/seki-context-menu.d.ts +1 -0
  403. package/dist/types/components/dialog/seki-dialog-content.d.ts +2 -0
  404. package/dist/types/components/dialog/seki-dialog-overlay.d.ts +2 -0
  405. package/dist/types/components/dialog/seki-dialog.d.ts +1 -0
  406. package/dist/types/components/dropdown-menu/seki-dropdown-menu-content.d.ts +2 -0
  407. package/dist/types/components/dropdown-menu/seki-dropdown-menu-radio.d.ts +2 -0
  408. package/dist/types/components/dropdown-menu/seki-dropdown-menu-trigger.d.ts +2 -0
  409. package/dist/types/components/dropdown-menu/seki-dropdown-menu.d.ts +1 -0
  410. package/dist/types/components/menubar/seki-menubar-content.d.ts +2 -0
  411. package/dist/types/components/menubar/seki-menubar-radio.d.ts +2 -0
  412. package/dist/types/components/menubar/seki-menubar-trigger.d.ts +2 -0
  413. package/dist/types/components/menubar/seki-menubar.d.ts +1 -0
  414. package/dist/types/components/navigation-menu/seki-navigation-menu-content.d.ts +1 -0
  415. package/dist/types/components/navigation-menu/seki-navigation-menu-link.d.ts +1 -0
  416. package/dist/types/components/navigation-menu/seki-navigation-menu-list.d.ts +1 -0
  417. package/dist/types/components/popover/seki-popover-content.d.ts +2 -0
  418. package/dist/types/components/popover/seki-popover.d.ts +1 -0
  419. package/dist/types/components/scroll-area/seki-scroll-bar.d.ts +1 -0
  420. package/dist/types/components/select/seki-select.d.ts +8 -1
  421. package/dist/types/components/select-option/seki-select-option.d.ts +3 -1
  422. package/dist/types/components/sidebar/seki-sidebar-menu-sub.d.ts +2 -0
  423. package/dist/types/components/sidebar/seki-sidebar-rail.d.ts +1 -0
  424. package/dist/types/components/slider/seki-slider.d.ts +9 -0
  425. package/dist/types/components/tabs/seki-tabs-content.d.ts +2 -0
  426. package/dist/types/components/tabs/seki-tabs-trigger.d.ts +2 -0
  427. package/dist/types/components/tooltip/seki-tooltip.d.ts +1 -0
  428. package/dist/types/components.d.ts +32 -32
  429. package/dist/types/utils/ancestor-attrs.d.ts +18 -0
  430. package/dist/types/utils/calendar/date-utils.d.ts +9 -0
  431. package/dist/types/utils/dialog/focus-trap.d.ts +18 -7
  432. package/dist/types/utils/positioning.d.ts +34 -0
  433. package/package.json +25 -2
  434. package/dist/cdn/p-CP7ZtKCE.js +0 -71
  435. package/dist/cjs/focus-trap-C7ukllRZ.js +0 -76
  436. package/dist/components/p-CP7ZtKCE.js +0 -71
  437. package/dist/esm/focus-trap-CP7ZtKCE.js +0 -71
  438. package/dist/sekiui/p-107bdce6.entry.js +0 -1
  439. package/dist/sekiui/p-2548d7c3.entry.js +0 -1
  440. package/dist/sekiui/p-307a0de3.entry.js +0 -1
  441. package/dist/sekiui/p-397fb20e.entry.js +0 -1
  442. package/dist/sekiui/p-3e01b3c9.entry.js +0 -1
  443. package/dist/sekiui/p-4617d9c5.entry.js +0 -1
  444. package/dist/sekiui/p-4896a497.entry.js +0 -1
  445. package/dist/sekiui/p-4a47ea19.entry.js +0 -1
  446. package/dist/sekiui/p-4b0ee9e5.entry.js +0 -1
  447. package/dist/sekiui/p-598f9c5b.entry.js +0 -1
  448. package/dist/sekiui/p-635ca5ab.entry.js +0 -1
  449. package/dist/sekiui/p-63b3a53c.entry.js +0 -1
  450. package/dist/sekiui/p-63ffc38a.entry.js +0 -1
  451. package/dist/sekiui/p-6416552b.entry.js +0 -1
  452. package/dist/sekiui/p-66b59a4c.entry.js +0 -1
  453. package/dist/sekiui/p-70f149c3.entry.js +0 -1
  454. package/dist/sekiui/p-79062829.entry.js +0 -1
  455. package/dist/sekiui/p-7bf7ee5f.entry.js +0 -1
  456. package/dist/sekiui/p-8067a8f3.entry.js +0 -1
  457. package/dist/sekiui/p-884bde18.entry.js +0 -1
  458. package/dist/sekiui/p-91d532fa.entry.js +0 -1
  459. package/dist/sekiui/p-95749f03.entry.js +0 -1
  460. package/dist/sekiui/p-9d5b807f.entry.js +0 -1
  461. package/dist/sekiui/p-CP7ZtKCE.js +0 -1
  462. package/dist/sekiui/p-ac321aeb.entry.js +0 -1
  463. package/dist/sekiui/p-adc3cfff.entry.js +0 -1
  464. package/dist/sekiui/p-b945fc54.entry.js +0 -1
  465. package/dist/sekiui/p-bdb2d304.entry.js +0 -1
  466. package/dist/sekiui/p-c0ce45c3.entry.js +0 -1
  467. package/dist/sekiui/p-d2951ab4.entry.js +0 -1
  468. package/dist/sekiui/p-db37e4d2.entry.js +0 -1
  469. package/dist/sekiui/p-e51d76de.entry.js +0 -1
  470. package/dist/sekiui/p-f0bb516d.entry.js +0 -1
  471. package/dist/sekiui/p-f82ead84.entry.js +0 -1
@@ -1,5 +1,6 @@
1
1
  import { h, Host } from "@stencil/core";
2
2
  import { registerThemeSync, unregisterThemeSync } from "../../utils/theme-sync";
3
+ import { mirrorAncestorAttributes } from "../../utils/ancestor-attrs";
3
4
  export class SekiNavigationMenuLink {
4
5
  constructor() {
5
6
  // =========================================================================
@@ -68,19 +69,23 @@ export class SekiNavigationMenuLink {
68
69
  }
69
70
  connectedCallback() {
70
71
  registerThemeSync(this.el);
72
+ this.attrMirror = mirrorAncestorAttributes(this.el, 'seki-navigation-menu-content', ['data-mobile']);
71
73
  }
72
74
  disconnectedCallback() {
75
+ var _a;
73
76
  unregisterThemeSync(this.el);
77
+ (_a = this.attrMirror) === null || _a === void 0 ? void 0 : _a.disconnect();
78
+ this.attrMirror = undefined;
74
79
  }
75
80
  render() {
76
81
  const hasDescription = Boolean(this.description);
77
- return (h(Host, { key: '502ddacfbfbf646b1e59e14c61aeafdb6f88abfc', class: {
82
+ return (h(Host, { key: 'c42e571d96251b3d61a834145f9d6eb38e1cfef8', class: {
78
83
  'navigation-menu-link': true,
79
84
  'navigation-menu-link--active': this.active,
80
85
  'navigation-menu-link--disabled': this.disabled,
81
86
  'navigation-menu-link--in-content': this.isInContent,
82
87
  'navigation-menu-link--with-description': hasDescription,
83
- } }, h("a", { key: 'b51e731ebc66a823e3e3a4f8d5cab5b65f97f087', class: "navigation-menu-link__anchor", href: this.disabled ? undefined : this.href, target: this.target || undefined, rel: this.target === '_blank' ? 'noopener noreferrer' : undefined, role: this.isInContent ? 'menuitem' : undefined, "aria-current": this.active ? 'page' : undefined, "aria-disabled": this.disabled ? 'true' : undefined, tabindex: this.disabled ? -1 : 0, onClick: this.handleClick, onKeyDown: this.handleKeyDown }, hasDescription ? (h("div", { class: "navigation-menu-link__content" }, h("span", { class: "navigation-menu-link__title" }, h("slot", null)), h("span", { class: "navigation-menu-link__description" }, this.description))) : (h("slot", null)))));
88
+ } }, h("a", { key: '2e7e4e32d5daaa7c1825a55c760574d2310c455f', class: "navigation-menu-link__anchor", href: this.disabled ? undefined : this.href, target: this.target || undefined, rel: this.target === '_blank' ? 'noopener noreferrer' : undefined, role: this.isInContent ? 'menuitem' : undefined, "aria-current": this.active ? 'page' : undefined, "aria-disabled": this.disabled ? 'true' : undefined, tabindex: this.disabled ? -1 : 0, onClick: this.handleClick, onKeyDown: this.handleKeyDown }, hasDescription ? (h("div", { class: "navigation-menu-link__content" }, h("span", { class: "navigation-menu-link__title" }, h("slot", null)), h("span", { class: "navigation-menu-link__description" }, this.description))) : (h("slot", null)))));
84
89
  }
85
90
  static get is() { return "seki-navigation-menu-link"; }
86
91
  static get encapsulation() { return "shadow"; }
@@ -12,7 +12,7 @@
12
12
  }
13
13
 
14
14
  /* Mobile mode - vertical stack */
15
- :host-context(seki-navigation-menu.navigation-menu--mobile) .navigation-menu-list {
15
+ :host([data-mobile]) .navigation-menu-list {
16
16
  flex-direction: column;
17
17
  align-items: stretch;
18
18
  gap: var(--seki-spacing-1, 0.25rem);
@@ -1,5 +1,6 @@
1
1
  import { h, Host } from "@stencil/core";
2
2
  import { registerThemeSync, unregisterThemeSync } from "../../utils/theme-sync";
3
+ import { mirrorAncestorAttributes } from "../../utils/ancestor-attrs";
3
4
  export class SekiNavigationMenuList {
4
5
  constructor() {
5
6
  /** Whether in mobile mode */
@@ -35,10 +36,14 @@ export class SekiNavigationMenuList {
35
36
  }
36
37
  connectedCallback() {
37
38
  registerThemeSync(this.el);
39
+ this.attrMirror = mirrorAncestorAttributes(this.el, 'seki-navigation-menu', ['data-mobile']);
38
40
  }
39
41
  disconnectedCallback() {
42
+ var _a;
40
43
  unregisterThemeSync(this.el);
41
44
  this.cleanupKeyboardNavigation();
45
+ (_a = this.attrMirror) === null || _a === void 0 ? void 0 : _a.disconnect();
46
+ this.attrMirror = undefined;
42
47
  }
43
48
  setupKeyboardNavigation() {
44
49
  this.el.addEventListener('keydown', this.handleKeyDown);
@@ -101,7 +106,7 @@ export class SekiNavigationMenuList {
101
106
  this.focusedIndex = index;
102
107
  }
103
108
  render() {
104
- return (h(Host, { key: '38071b4039c5dfadab5c58be53d02684825cdce2' }, h("ul", { key: '44553ecd9d84dcb380414da8cf3251213a7abdc1', class: "navigation-menu-list", role: "menubar" }, h("slot", { key: 'e664d20108a1fa84918b4b14670c4f6c4c7fdaf4' }))));
109
+ return (h(Host, { key: '2a520ed90768d5a0c6bcb6b52932a0b116c3b7c2' }, h("ul", { key: '3cd848f8b7244d7a8d8666568e25c3c429006216', class: "navigation-menu-list", role: "menubar" }, h("slot", { key: '656955f05da5ba10935bb1bc184959d70a80bbd7' }))));
105
110
  }
106
111
  static get is() { return "seki-navigation-menu-list"; }
107
112
  static get encapsulation() { return "shadow"; }
@@ -181,12 +181,12 @@ export class SekiNavigationMenuTrigger {
181
181
  }
182
182
  render() {
183
183
  const itemId = this.getItemId();
184
- return (h(Host, { key: '9361deb1ef34c980f4ccff32037ffb53e972cf91', class: {
184
+ return (h(Host, { key: '789d1b9750888bff1da2b016c1493bf042b1f15a', class: {
185
185
  'navigation-menu-trigger': true,
186
186
  'navigation-menu-trigger--open': this.isOpen,
187
187
  'navigation-menu-trigger--disabled': this.disabled,
188
188
  'navigation-menu-trigger--mobile': this.isMobile,
189
- } }, h("button", { key: '5736fd94663ff3b16d2770917a965538ef55cda1', ref: el => (this.buttonRef = el), type: "button", class: "navigation-menu-trigger__button", role: "menuitem", "aria-haspopup": "true", "aria-expanded": String(this.isOpen), "aria-controls": `content-${itemId}`, disabled: this.disabled, tabindex: this.isOpen ? '0' : '-1', onClick: this.handleClick, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, onKeyDown: this.handleKeyDown }, h("span", { key: 'fa626a6050e2ec49596d6c35ae2e7d211f6f41a2', class: "navigation-menu-trigger__label" }, h("slot", { key: '301f87d67ba40a52803bdabd8b92387f0303b44b' })), h("svg", { key: '9b4c4f91c5d3580e14b1ff1ac3f7fb6ea20cb4f5', class: "navigation-menu-trigger__chevron", width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }, h("polyline", { key: '9ca5be90f35f5757eeb7ea706505e83f59b221a9', points: "2 4 6 8 10 4" })))));
189
+ } }, h("button", { key: '2fa5384effaadc1e51612973155ddaa421d792f3', ref: el => (this.buttonRef = el), type: "button", class: "navigation-menu-trigger__button", role: "menuitem", "aria-haspopup": "true", "aria-expanded": String(this.isOpen), "aria-controls": `content-${itemId}`, disabled: this.disabled, tabindex: this.isOpen ? '0' : '-1', onClick: this.handleClick, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, onKeyDown: this.handleKeyDown }, h("span", { key: '9cc2a103012ef542c8f1563699ac77b34d53f773', class: "navigation-menu-trigger__label" }, h("slot", { key: 'b9f4157e7f304d93981ccfe5f09bc56d10301d81' })), h("svg", { key: '95691c157b5962295c01fed6f9735dbc7fbb5c74', class: "navigation-menu-trigger__chevron", width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }, h("polyline", { key: '7a60c1c69b70ab54ce9b2ad991bb0aea8a1c3c58', points: "2 4 6 8 10 4" })))));
190
190
  }
191
191
  static get is() { return "seki-navigation-menu-trigger"; }
192
192
  static get encapsulation() { return "shadow"; }
@@ -233,7 +233,7 @@ export class SekiNavigationMenuTrigger {
233
233
  static get events() {
234
234
  return [{
235
235
  "method": "triggerActivate",
236
- "name": "seki-trigger-activate",
236
+ "name": "sekiTriggerActivate",
237
237
  "bubbles": true,
238
238
  "cancelable": true,
239
239
  "composed": true,
@@ -200,10 +200,10 @@ export class SekiNavigationMenu {
200
200
  // Render
201
201
  // =========================================================================
202
202
  render() {
203
- return (h(Host, { key: '92a88df19e0f9b8ca9f3e61d4ee2069ca4de88e6', class: {
203
+ return (h(Host, { key: '53d2661dfd58fa7309d2a0defc307b17dd55dbf3', class: {
204
204
  'navigation-menu': true,
205
205
  'navigation-menu--mobile': this.isMobile,
206
- } }, h("nav", { key: '27723ddaff49efe3255ff27643bfaf773bb6587d', class: "navigation-menu__nav", role: "navigation", "aria-label": this.ariaLabel }, this.isMobile ? this.renderMobileNav() : this.renderDesktopNav())));
206
+ }, "data-mobile": this.isMobile ? '' : undefined }, h("nav", { key: 'da9466f28b733cec9d795716bfb7b19cd3d24e3c', class: "navigation-menu__nav", role: "navigation", "aria-label": this.ariaLabel }, this.isMobile ? this.renderMobileNav() : this.renderDesktopNav())));
207
207
  }
208
208
  renderDesktopNav() {
209
209
  return [
@@ -309,7 +309,7 @@ export class SekiNavigationMenu {
309
309
  static get events() {
310
310
  return [{
311
311
  "method": "menuOpen",
312
- "name": "seki-menu-open",
312
+ "name": "sekiMenuOpen",
313
313
  "bubbles": true,
314
314
  "cancelable": true,
315
315
  "composed": true,
@@ -324,7 +324,7 @@ export class SekiNavigationMenu {
324
324
  }
325
325
  }, {
326
326
  "method": "menuClose",
327
- "name": "seki-menu-close",
327
+ "name": "sekiMenuClose",
328
328
  "bubbles": true,
329
329
  "cancelable": true,
330
330
  "composed": true,
@@ -339,7 +339,7 @@ export class SekiNavigationMenu {
339
339
  }
340
340
  }, {
341
341
  "method": "mobileToggle",
342
- "name": "seki-mobile-toggle",
342
+ "name": "sekiMobileToggle",
343
343
  "bubbles": true,
344
344
  "cancelable": true,
345
345
  "composed": true,
@@ -1,5 +1,6 @@
1
1
  import { h, Host } from "@stencil/core";
2
2
  import { registerThemeSync, unregisterThemeSync } from "../../utils/theme-sync";
3
+ import { computeAnchoredPosition } from "../../utils/positioning";
3
4
  /**
4
5
  * Popover content panel with positioning
5
6
  *
@@ -9,6 +10,14 @@ import { registerThemeSync, unregisterThemeSync } from "../../utils/theme-sync";
9
10
  */
10
11
  export class SekiPopoverContent {
11
12
  constructor() {
13
+ this.onPopoverOpenChange = () => {
14
+ var _a;
15
+ const context = this.getContext();
16
+ this._isOpen = (_a = context === null || context === void 0 ? void 0 : context.isOpen) !== null && _a !== void 0 ? _a : false;
17
+ if (this._isOpen) {
18
+ requestAnimationFrame(() => this.updatePosition());
19
+ }
20
+ };
12
21
  /**
13
22
  * Offset from trigger
14
23
  */
@@ -32,18 +41,10 @@ export class SekiPopoverContent {
32
41
  this._isOpen = (_a = context === null || context === void 0 ? void 0 : context.isOpen) !== null && _a !== void 0 ? _a : false;
33
42
  }
34
43
  componentDidLoad() {
44
+ var _a, _b;
35
45
  // Listen for open changes
36
- const popover = this.el.closest('seki-popover');
37
- if (popover) {
38
- popover.addEventListener('sekiOpenChange', () => {
39
- var _a;
40
- const context = this.getContext();
41
- this._isOpen = (_a = context === null || context === void 0 ? void 0 : context.isOpen) !== null && _a !== void 0 ? _a : false;
42
- if (this._isOpen) {
43
- requestAnimationFrame(() => this.updatePosition());
44
- }
45
- });
46
- }
46
+ this.popoverEl = (_a = this.el.closest('seki-popover')) !== null && _a !== void 0 ? _a : undefined;
47
+ (_b = this.popoverEl) === null || _b === void 0 ? void 0 : _b.addEventListener('sekiOpenChange', this.onPopoverOpenChange);
47
48
  }
48
49
  componentDidRender() {
49
50
  if (this._isOpen) {
@@ -58,63 +59,15 @@ export class SekiPopoverContent {
58
59
  return;
59
60
  const triggerRect = trigger.getBoundingClientRect();
60
61
  const contentRect = this.contentRef.getBoundingClientRect();
61
- const viewport = {
62
- width: window.innerWidth,
63
- height: window.innerHeight,
64
- };
65
62
  const context = this.getContext();
66
63
  const side = (_b = (_a = this.side) !== null && _a !== void 0 ? _a : context === null || context === void 0 ? void 0 : context.side) !== null && _b !== void 0 ? _b : 'bottom';
67
64
  const align = (_d = (_c = this.align) !== null && _c !== void 0 ? _c : context === null || context === void 0 ? void 0 : context.align) !== null && _d !== void 0 ? _d : 'center';
68
- const offset = this.sideOffset;
69
- // Calculate base position
70
- let top = 0;
71
- let left = 0;
72
- // Side positioning
73
- switch (side) {
74
- case 'top':
75
- top = triggerRect.top - contentRect.height - offset;
76
- break;
77
- case 'bottom':
78
- top = triggerRect.bottom + offset;
79
- break;
80
- case 'left':
81
- left = triggerRect.left - contentRect.width - offset;
82
- break;
83
- case 'right':
84
- left = triggerRect.right + offset;
85
- break;
86
- }
87
- // Align positioning
88
- if (side === 'top' || side === 'bottom') {
89
- switch (align) {
90
- case 'start':
91
- left = triggerRect.left + this.alignOffset;
92
- break;
93
- case 'center':
94
- left = triggerRect.left + (triggerRect.width - contentRect.width) / 2 + this.alignOffset;
95
- break;
96
- case 'end':
97
- left = triggerRect.right - contentRect.width + this.alignOffset;
98
- break;
99
- }
100
- }
101
- else {
102
- switch (align) {
103
- case 'start':
104
- top = triggerRect.top + this.alignOffset;
105
- break;
106
- case 'center':
107
- top = triggerRect.top + (triggerRect.height - contentRect.height) / 2 + this.alignOffset;
108
- break;
109
- case 'end':
110
- top = triggerRect.bottom - contentRect.height + this.alignOffset;
111
- break;
112
- }
113
- }
114
- // Viewport clamping
115
- const margin = 8;
116
- left = Math.max(margin, Math.min(left, viewport.width - contentRect.width - margin));
117
- top = Math.max(margin, Math.min(top, viewport.height - contentRect.height - margin));
65
+ const { top, left } = computeAnchoredPosition(triggerRect, contentRect, {
66
+ side,
67
+ align,
68
+ sideOffset: this.sideOffset,
69
+ alignOffset: this.alignOffset,
70
+ });
118
71
  this._position = { top: `${top}px`, left: `${left}px` };
119
72
  this._actualSide = side;
120
73
  }
@@ -122,7 +75,9 @@ export class SekiPopoverContent {
122
75
  registerThemeSync(this.el);
123
76
  }
124
77
  disconnectedCallback() {
78
+ var _a;
125
79
  unregisterThemeSync(this.el);
80
+ (_a = this.popoverEl) === null || _a === void 0 ? void 0 : _a.removeEventListener('sekiOpenChange', this.onPopoverOpenChange);
126
81
  }
127
82
  render() {
128
83
  if (!this._isOpen) {
@@ -106,8 +106,13 @@ export class SekiPopover {
106
106
  setupClickOutside() {
107
107
  if (!this.closeOnOutsideClick)
108
108
  return;
109
- // Use setTimeout to avoid immediate close from the same click that opened it
110
- setTimeout(() => {
109
+ // Clear any pending timeout/handler first so a rapid open→close→open cannot
110
+ // leave a leaked listener or double-schedule.
111
+ this.removeClickOutside();
112
+ // Defer registration so the same click that opened the popover doesn't
113
+ // immediately close it.
114
+ this.clickOutsideTimeout = setTimeout(() => {
115
+ this.clickOutsideTimeout = undefined;
111
116
  this.clickOutsideHandler = (e) => {
112
117
  const path = e.composedPath();
113
118
  if (!path.includes(this.el)) {
@@ -118,6 +123,11 @@ export class SekiPopover {
118
123
  }, 0);
119
124
  }
120
125
  removeClickOutside() {
126
+ // Cancel a still-pending registration so it can't fire after close/disconnect.
127
+ if (this.clickOutsideTimeout !== undefined) {
128
+ clearTimeout(this.clickOutsideTimeout);
129
+ this.clickOutsideTimeout = undefined;
130
+ }
121
131
  if (this.clickOutsideHandler) {
122
132
  document.removeEventListener('click', this.clickOutsideHandler, { capture: true });
123
133
  this.clickOutsideHandler = undefined;
@@ -152,7 +162,7 @@ export class SekiPopover {
152
162
  this.removeClickOutside();
153
163
  }
154
164
  render() {
155
- return (h(Host, { key: '7b968558f37aa4a7afae25a7d4dccf819157884b', "data-state": this._isOpen ? 'open' : 'closed' }, h("div", { key: 'b92504499e50da2607d298f295c6cbe48f582577', part: "popover", class: "popover" }, h("slot", { key: 'a130d9a553ce561c9dc64a3be26d890ed8f8271b' }))));
165
+ return (h(Host, { key: '31974618c7383783980511b55823a55bfe2dae1e', "data-state": this._isOpen ? 'open' : 'closed' }, h("div", { key: 'f6bc040f29ba0ae30783407550928d3733ec1113', part: "popover", class: "popover" }, h("slot", { key: 'ffbb6edae291c99b941642f81ff8c7862d59525a' }))));
156
166
  }
157
167
  static get is() { return "seki-popover"; }
158
168
  static get encapsulation() { return "shadow"; }
@@ -787,11 +787,11 @@
787
787
  }
788
788
 
789
789
  /* Reduce size when both scrollbars present */
790
- :host-context([data-has-vertical-overflow][data-has-horizontal-overflow]):host([orientation="vertical"]) {
790
+ :host([data-has-vertical-overflow][data-has-horizontal-overflow][orientation="vertical"]) {
791
791
  height: calc(100% - 12px);
792
792
  }
793
793
 
794
- :host-context([data-has-vertical-overflow][data-has-horizontal-overflow]):host([orientation="horizontal"]) {
794
+ :host([data-has-vertical-overflow][data-has-horizontal-overflow][orientation="horizontal"]) {
795
795
  width: calc(100% - 12px);
796
796
  }
797
797
 
@@ -878,20 +878,20 @@
878
878
  }
879
879
 
880
880
  /* Visibility controlled by parent data-state */
881
- :host-context([data-state="hidden"]) {
881
+ :host([data-state="hidden"]) {
882
882
  opacity: 0;
883
883
  pointer-events: none;
884
884
  transition: opacity 200ms ease-out;
885
885
  }
886
886
 
887
- :host-context([data-state="visible"]) {
887
+ :host([data-state="visible"]) {
888
888
  opacity: 1;
889
889
  pointer-events: auto;
890
890
  transition: opacity 150ms ease-in;
891
891
  }
892
892
 
893
893
  /* Always show on hover regardless of state */
894
- :host-context(:hover) {
894
+ :host([data-parent-hover]) {
895
895
  opacity: 1;
896
896
  pointer-events: auto;
897
897
  }
@@ -1,5 +1,6 @@
1
1
  import { h, Host } from "@stencil/core";
2
2
  import { registerThemeSync, unregisterThemeSync } from "../../utils/theme-sync";
3
+ import { mirrorAncestorAttributes } from "../../utils/ancestor-attrs";
3
4
  /**
4
5
  * Scroll Bar Component
5
6
  *
@@ -105,9 +106,10 @@ export class SekiScrollBar {
105
106
  }
106
107
  connectedCallback() {
107
108
  registerThemeSync(this.el);
109
+ this.attrMirror = mirrorAncestorAttributes(this.el, 'seki-scroll-area', ['data-state', 'data-has-vertical-overflow', 'data-has-horizontal-overflow'], { trackHover: true });
108
110
  }
109
111
  disconnectedCallback() {
110
- var _a, _b;
112
+ var _a, _b, _c;
111
113
  unregisterThemeSync(this.el);
112
114
  document.removeEventListener('mousemove', this.handleMouseMove);
113
115
  document.removeEventListener('mouseup', this.handleMouseUp);
@@ -115,6 +117,8 @@ export class SekiScrollBar {
115
117
  document.removeEventListener('touchend', this.handleTouchEnd);
116
118
  (_a = this.scrollAreaRef) === null || _a === void 0 ? void 0 : _a.removeEventListener('sekiScroll', this.scrollHandler);
117
119
  (_b = this.resizeObserver) === null || _b === void 0 ? void 0 : _b.disconnect();
120
+ (_c = this.attrMirror) === null || _c === void 0 ? void 0 : _c.disconnect();
121
+ this.attrMirror = undefined;
118
122
  }
119
123
  updateFromContext() {
120
124
  const context = this.getContext();
@@ -123,7 +123,17 @@ export class SekiSelect {
123
123
  return this.registeredOptions.filter(opt => opt.value === this.internalValue);
124
124
  };
125
125
  this.registerOption = (option) => {
126
- this.registeredOptions = [...this.registeredOptions, option];
126
+ // Idempotent: replace in place if this value already exists (e.g. an option
127
+ // re-registering after a DOM move) so reconnects can't create duplicates.
128
+ const existingIndex = this.registeredOptions.findIndex(opt => opt.value === option.value);
129
+ if (existingIndex >= 0) {
130
+ const next = [...this.registeredOptions];
131
+ next[existingIndex] = option;
132
+ this.registeredOptions = next;
133
+ }
134
+ else {
135
+ this.registeredOptions = [...this.registeredOptions, option];
136
+ }
127
137
  };
128
138
  this.unregisterOption = (value) => {
129
139
  this.registeredOptions = this.registeredOptions.filter(opt => opt.value !== value);
@@ -163,6 +173,8 @@ export class SekiSelect {
163
173
  }
164
174
  // Expose context on the element for child components
165
175
  this.el.selectContext = this.selectContext;
176
+ // Seed the form value so an unchanged select still submits its initial value.
177
+ this.syncFormValue();
166
178
  }
167
179
  componentDidLoad() {
168
180
  // Expose context on the element for child components
@@ -202,10 +214,45 @@ export class SekiSelect {
202
214
  }
203
215
  handleInternalValueChange() {
204
216
  this.updateContextOnElement();
217
+ this.syncFormValue();
218
+ }
219
+ handleDisabledChange() {
220
+ this.syncFormValue();
205
221
  }
206
222
  updateContextOnElement() {
207
223
  this.el.selectContext = this.selectContext;
208
224
  }
225
+ /**
226
+ * Mirror the current selection into the associated form via ElementInternals.
227
+ * Replaces the previous hidden native control, which lived inside the shadow
228
+ * root and therefore never participated in form submission.
229
+ */
230
+ syncFormValue() {
231
+ if (!this.internals || typeof this.internals.setFormValue !== 'function') {
232
+ return;
233
+ }
234
+ // Disabled controls do not contribute a value to the form.
235
+ if (this.disabled) {
236
+ this.internals.setFormValue(null);
237
+ return;
238
+ }
239
+ if (this.multiple) {
240
+ const values = Array.isArray(this.internalValue) ? this.internalValue : [];
241
+ if (!this.name || values.length === 0) {
242
+ this.internals.setFormValue(null);
243
+ return;
244
+ }
245
+ const formData = new FormData();
246
+ for (const val of values) {
247
+ formData.append(this.name, String(val));
248
+ }
249
+ this.internals.setFormValue(formData);
250
+ }
251
+ else {
252
+ const value = this.internalValue;
253
+ this.internals.setFormValue(value === '' || value === undefined || value === null ? null : String(value));
254
+ }
255
+ }
209
256
  // ===========================
210
257
  // Methods
211
258
  // ===========================
@@ -268,29 +315,33 @@ export class SekiSelect {
268
315
  }
269
316
  }
270
317
  focusNextOption() {
271
- if (this.registeredOptions.length === 0)
318
+ const options = this.registeredOptions;
319
+ if (options.length === 0)
272
320
  return;
273
- let nextIndex = 0;
274
- if (this.focusedOptionValue !== null) {
275
- const currentIndex = this.registeredOptions.findIndex(opt => opt.value === this.focusedOptionValue);
276
- nextIndex = currentIndex >= 0 ? Math.min(currentIndex + 1, this.registeredOptions.length - 1) : 0;
277
- }
278
- const nextOption = this.registeredOptions[nextIndex];
279
- if (nextOption && !nextOption.disabled) {
280
- this.handleOptionFocus(nextOption.value);
321
+ const currentIndex = this.focusedOptionValue !== null
322
+ ? options.findIndex(opt => opt.value === this.focusedOptionValue)
323
+ : -1;
324
+ // Walk forward to the next enabled option, skipping disabled ones.
325
+ for (let i = currentIndex + 1; i < options.length; i++) {
326
+ if (!options[i].disabled) {
327
+ this.handleOptionFocus(options[i].value);
328
+ return;
329
+ }
281
330
  }
282
331
  }
283
332
  focusPreviousOption() {
284
- if (this.registeredOptions.length === 0)
333
+ const options = this.registeredOptions;
334
+ if (options.length === 0)
285
335
  return;
286
- let prevIndex = this.registeredOptions.length - 1;
287
- if (this.focusedOptionValue !== null) {
288
- const currentIndex = this.registeredOptions.findIndex(opt => opt.value === this.focusedOptionValue);
289
- prevIndex = currentIndex > 0 ? currentIndex - 1 : this.registeredOptions.length - 1;
290
- }
291
- const prevOption = this.registeredOptions[prevIndex];
292
- if (prevOption && !prevOption.disabled) {
293
- this.handleOptionFocus(prevOption.value);
336
+ const currentIndex = this.focusedOptionValue !== null
337
+ ? options.findIndex(opt => opt.value === this.focusedOptionValue)
338
+ : options.length;
339
+ // Walk backward to the previous enabled option, skipping disabled ones.
340
+ for (let i = currentIndex - 1; i >= 0; i--) {
341
+ if (!options[i].disabled) {
342
+ this.handleOptionFocus(options[i].value);
343
+ return;
344
+ }
294
345
  }
295
346
  }
296
347
  addToSearchBuffer(char) {
@@ -339,19 +390,11 @@ export class SekiSelect {
339
390
  // Render
340
391
  // ===========================
341
392
  render() {
342
- return (h(Host, { key: '5a1333b70dd0f6cb4e02c42643cd21b89f896ceb' }, h("slot", { key: 'd67d8ebd047bb146f42a5ce73871324868235137' }), this.name && this.renderHiddenNativeElement()));
343
- }
344
- renderHiddenNativeElement() {
345
- if (this.multiple) {
346
- return (h("select", { class: "select-native", name: this.name, multiple: true, required: this.required, disabled: this.disabled, "aria-hidden": "true", tabindex: -1 }, Array.isArray(this.internalValue) &&
347
- this.internalValue.map(val => (h("option", { value: val, selected: true }, val)))));
348
- }
349
- else {
350
- return (h("input", { type: "hidden", class: "select-native", name: this.name, value: this.internalValue, required: this.required, disabled: this.disabled }));
351
- }
393
+ return (h(Host, { key: '414bca44c784b5a965a1c1cd3fb92942cfdd9259' }, h("slot", { key: '8c623a8161b8140bedde29ea61845055d77ce44d' })));
352
394
  }
353
395
  static get is() { return "seki-select"; }
354
396
  static get encapsulation() { return "shadow"; }
397
+ static get formAssociated() { return true; }
355
398
  static get originalStyleUrls() {
356
399
  return {
357
400
  "$": ["seki-select.css"]
@@ -549,7 +592,7 @@ export class SekiSelect {
549
592
  },
550
593
  "getter": false,
551
594
  "setter": false,
552
- "reflect": false,
595
+ "reflect": true,
553
596
  "attribute": "name"
554
597
  },
555
598
  "maxVisiblePills": {
@@ -865,6 +908,10 @@ export class SekiSelect {
865
908
  }, {
866
909
  "propName": "internalValue",
867
910
  "methodName": "handleInternalValueChange"
911
+ }, {
912
+ "propName": "disabled",
913
+ "methodName": "handleDisabledChange"
868
914
  }];
869
915
  }
916
+ static get attachInternalsMemberName() { return "internals"; }
870
917
  }
@@ -9,9 +9,9 @@ export class SekiSelectOption {
9
9
  /** Whether the option is disabled */
10
10
  this.disabled = false;
11
11
  // ===========================
12
- // State
12
+ // Lifecycle
13
13
  // ===========================
14
- this.optionId = `option-${Math.random().toString(36).substr(2, 9)}`;
14
+ this.hasRegistered = false;
15
15
  // ===========================
16
16
  // Event Handlers
17
17
  // ===========================
@@ -44,21 +44,26 @@ export class SekiSelectOption {
44
44
  };
45
45
  }
46
46
  // ===========================
47
- // Lifecycle
47
+ // State
48
48
  // ===========================
49
+ // Deterministic id so it matches the `option-${value}` reference that
50
+ // seki-select-trigger emits as aria-activedescendant. (Note: full
51
+ // cross-shadow IDREF resolution still requires the trigger and options to
52
+ // share a tree scope — see seki-select-trigger for the known limitation.)
53
+ get optionId() {
54
+ return `option-${this.value}`;
55
+ }
49
56
  componentDidLoad() {
50
- var _a;
51
- // Register this option with parent select
52
- const selectContext = this.getSelectContext();
53
- const displayLabel = this.label || ((_a = this.el.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || '';
54
- selectContext === null || selectContext === void 0 ? void 0 : selectContext.registerOption({
55
- value: this.value,
56
- label: displayLabel,
57
- disabled: this.disabled,
58
- });
57
+ this.registerWithParent();
59
58
  }
60
59
  connectedCallback() {
61
60
  registerThemeSync(this.el);
61
+ // Re-register on reconnect (after a DOM move). componentDidLoad fires only
62
+ // once, so without this the option would stay unregistered after being moved.
63
+ // Parent registration is idempotent, so this never duplicates.
64
+ if (this.hasRegistered) {
65
+ this.registerWithParent();
66
+ }
62
67
  }
63
68
  disconnectedCallback() {
64
69
  unregisterThemeSync(this.el);
@@ -66,6 +71,17 @@ export class SekiSelectOption {
66
71
  const selectContext = this.getSelectContext();
67
72
  selectContext === null || selectContext === void 0 ? void 0 : selectContext.unregisterOption(this.value);
68
73
  }
74
+ registerWithParent() {
75
+ var _a;
76
+ const selectContext = this.getSelectContext();
77
+ const displayLabel = this.label || ((_a = this.el.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || '';
78
+ selectContext === null || selectContext === void 0 ? void 0 : selectContext.registerOption({
79
+ value: this.value,
80
+ label: displayLabel,
81
+ disabled: this.disabled,
82
+ });
83
+ this.hasRegistered = true;
84
+ }
69
85
  // ===========================
70
86
  // Helpers
71
87
  // ===========================
@@ -80,7 +96,7 @@ export class SekiSelectOption {
80
96
  const selectContext = this.getSelectContext();
81
97
  const isSelected = (selectContext === null || selectContext === void 0 ? void 0 : selectContext.isValueSelected(this.value)) || false;
82
98
  const isFocused = (selectContext === null || selectContext === void 0 ? void 0 : selectContext.focusedOptionValue) === this.value;
83
- return (h(Host, { key: '8ba7a9bd8c4423bdc87237421bfed49ed485de7f' }, h("div", { key: 'cdeedf3061b3de0a12a56faccd56121fbcd4c7e3', class: "option", role: "option", id: this.optionId, onClick: this.handleOptionClick, onFocus: this.handleOptionFocus, onKeyDown: this.handleOptionKeyDown, "aria-selected": isSelected ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : undefined, "data-selected": isSelected ? 'true' : undefined, "data-focused": isFocused ? 'true' : undefined, "data-disabled": this.disabled ? 'true' : undefined, tabindex: -1 }, h("span", { key: '902d9c4caa962efa60eeb697a0595764ca82d822', class: "option-label" }, h("slot", { key: 'd15a6dfa001e33df302e17847aeb4b63ef2ca9fa' })), isSelected && (h("span", { key: '708d5a9eaea23837e6a75df3ae86ae484367b477', class: "option-indicator", "aria-hidden": "true" }, h("slot", { key: 'c170f9b1a743ce16aeee0ced9b3b67836c4e2677', name: "selected-indicator" }, h("svg", { key: '230c202c463fbf5912ab900595135e5df69fd6ee', width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, h("path", { key: 'cad9198c5e438617c840b1e8e97db69e1b5a5a85', d: "M10 3L4.5 8.5L2 6", stroke: "currentColor", "stroke-width": "1.5", "stroke-linecap": "round", "stroke-linejoin": "round" }))))))));
99
+ return (h(Host, { key: 'd44cc7dd5f3cef1f9bf5d9395e70f6a4ae4488f1' }, h("div", { key: 'b2b69aa14e1c5863b29addf8e6a51350e09418f5', class: "option", role: "option", id: this.optionId, onClick: this.handleOptionClick, onFocus: this.handleOptionFocus, onKeyDown: this.handleOptionKeyDown, "aria-selected": isSelected ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : undefined, "data-selected": isSelected ? 'true' : undefined, "data-focused": isFocused ? 'true' : undefined, "data-disabled": this.disabled ? 'true' : undefined, tabindex: -1 }, h("span", { key: '7bfb98702689ab1f7ca8933dbb45860de693e7c9', class: "option-label" }, h("slot", { key: '9cd5d99e31ddaae4aa672e59ac61e02961ab06d1' })), isSelected && (h("span", { key: '4e219961f27c4cf4c3cc674beac34f52f19e6836', class: "option-indicator", "aria-hidden": "true" }, h("slot", { key: '9c2b4a5dc2b6ba6e115da3c311685bf1318fdb4b', name: "selected-indicator" }, h("svg", { key: '3b11d7c72d8bc5d24903c29e9f666df39809a518', width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, h("path", { key: 'b482689f6e1c606d5ea2559cbf1befbcb552d9dc', d: "M10 3L4.5 8.5L2 6", stroke: "currentColor", "stroke-width": "1.5", "stroke-linecap": "round", "stroke-linejoin": "round" }))))))));
84
100
  }
85
101
  static get is() { return "seki-select-option"; }
86
102
  static get encapsulation() { return "shadow"; }