@odx/foundation 1.0.0-beta.21 → 1.0.0-beta.211

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 (309) hide show
  1. package/README.md +51 -9
  2. package/dist/_virtual_class-decorator-runtime.js +13 -0
  3. package/dist/components/accordion/accordion.d.ts +11 -6
  4. package/dist/components/accordion-item/accordion-item.d.ts +25 -0
  5. package/dist/components/{accordion → accordion-panel}/accordion-panel.d.ts +4 -3
  6. package/dist/components/action-button/action-button.d.ts +28 -0
  7. package/dist/components/action-group/action-group.d.ts +6 -13
  8. package/dist/components/anchor-navigation/anchor-navigation.d.ts +8 -6
  9. package/dist/components/anchor-navigation/index.d.ts +0 -1
  10. package/dist/components/area-footer/area-footer.d.ts +29 -0
  11. package/dist/components/area-header/area-header.d.ts +20 -4
  12. package/dist/components/autocomplete/autocomplete.d.ts +27 -0
  13. package/dist/components/avatar/avatar.d.ts +34 -5
  14. package/dist/components/badge/badge.d.ts +32 -5
  15. package/dist/components/breadcrumbs/breadcrumbs.d.ts +3 -7
  16. package/dist/components/button/button.d.ts +33 -23
  17. package/dist/components/button-group/button-group.d.ts +10 -5
  18. package/dist/components/card/card.d.ts +14 -3
  19. package/dist/components/checkbox/checkbox.d.ts +6 -6
  20. package/dist/components/checkbox-group/checkbox-group.d.ts +10 -5
  21. package/dist/components/chip/chip.d.ts +14 -5
  22. package/dist/components/drawer/drawer.d.ts +17 -0
  23. package/dist/components/dropdown/dropdown.d.ts +25 -13
  24. package/dist/components/empty-state/empty-state.d.ts +42 -0
  25. package/dist/components/form-field/form-field.d.ts +3 -4
  26. package/dist/components/format/base-format.d.ts +2 -2
  27. package/dist/components/format/format-bytes.d.ts +1 -1
  28. package/dist/components/format/format-number.d.ts +1 -1
  29. package/dist/components/format/relative-time.d.ts +2 -2
  30. package/dist/components/gradient-overlay/gradient-overlay.d.ts +23 -0
  31. package/dist/components/header/header.d.ts +12 -2
  32. package/dist/components/header/index.d.ts +0 -1
  33. package/dist/components/highlight/highlight.d.ts +27 -7
  34. package/dist/components/icon-button/icon-button.d.ts +15 -16
  35. package/dist/components/image/image.d.ts +5 -5
  36. package/dist/components/inline-message/inline-message.d.ts +17 -6
  37. package/dist/components/input/input.d.ts +15 -10
  38. package/dist/components/key-value/key-value.d.ts +49 -0
  39. package/dist/components/key-value-list/key-value-list.d.ts +15 -0
  40. package/dist/components/label/label.d.ts +11 -0
  41. package/dist/components/line-clamp/line-clamp.d.ts +3 -3
  42. package/dist/components/link/link.d.ts +14 -4
  43. package/dist/components/list/list.d.ts +10 -2
  44. package/dist/components/list-item/list-item.d.ts +24 -0
  45. package/dist/components/loader.d.ts +2 -0
  46. package/dist/components/loading-overlay/loading-overlay.d.ts +3 -5
  47. package/dist/components/loading-spinner/loading-spinner.d.ts +9 -3
  48. package/dist/components/logo/logo.d.ts +12 -3
  49. package/dist/components/main-menu/index.d.ts +1 -4
  50. package/dist/components/main-menu/main-menu-button.d.ts +3 -2
  51. package/dist/components/main-menu/main-menu.d.ts +1 -7
  52. package/dist/components/main.d.ts +75 -58
  53. package/dist/components/menu/menu.d.ts +7 -5
  54. package/dist/components/menu-item/menu-item.d.ts +27 -4
  55. package/dist/components/modal/modal.d.ts +10 -27
  56. package/dist/components/navigation/navigation.d.ts +18 -0
  57. package/dist/components/navigation-item/navigation-item.d.ts +11 -7
  58. package/dist/components/navigation-item-group/navigation-item-group.d.ts +20 -0
  59. package/dist/components/option/option.d.ts +6 -3
  60. package/dist/components/page/page.d.ts +20 -6
  61. package/dist/components/page-layout/page-layout.d.ts +9 -1
  62. package/dist/components/pagination/pagination.d.ts +3 -2
  63. package/dist/components/popover/compute-popover-placement.d.ts +13 -0
  64. package/dist/components/popover/popover-host.d.ts +43 -0
  65. package/dist/components/popover/popover-observer.d.ts +10 -0
  66. package/dist/{cdk → components}/popover/popover.d.ts +3 -2
  67. package/dist/components/progress-bar/base-progress.d.ts +23 -0
  68. package/dist/components/progress-bar/progress-bar.d.ts +3 -14
  69. package/dist/components/progress-ring/progress-ring.d.ts +33 -0
  70. package/dist/components/radio-button/radio-button.d.ts +5 -3
  71. package/dist/components/radio-group/radio-group.d.ts +12 -4
  72. package/dist/components/rail-navigation/rail-navigation.d.ts +5 -7
  73. package/dist/components/scroll-container/scroll-container.d.ts +36 -0
  74. package/dist/components/search-bar/search-bar.d.ts +19 -5
  75. package/dist/components/select/select.d.ts +11 -10
  76. package/dist/components/separator/separator.d.ts +10 -4
  77. package/dist/components/sidebar/sidebar.d.ts +30 -0
  78. package/dist/components/skeleton/skeleton.d.ts +13 -6
  79. package/dist/components/slider/index.d.ts +2 -2
  80. package/dist/components/slider/slider-handle.d.ts +6 -6
  81. package/dist/components/slider/slider-marks.d.ts +2 -2
  82. package/dist/components/slider/slider.d.ts +2 -3
  83. package/dist/components/slider/slider.models.d.ts +4 -3
  84. package/dist/components/spinbox/spinbox.d.ts +14 -10
  85. package/dist/components/status/status.d.ts +24 -0
  86. package/dist/components/switch/switch.d.ts +12 -2
  87. package/dist/components/tab-bar/tab-bar.d.ts +36 -0
  88. package/dist/components/table/index.d.ts +3 -3
  89. package/dist/components/table/table-body.d.ts +1 -3
  90. package/dist/components/table/table-cell.d.ts +1 -3
  91. package/dist/components/table/table-checkbox-cell.d.ts +2 -2
  92. package/dist/components/table/table-header-cell.d.ts +1 -1
  93. package/dist/components/table/table-header.d.ts +5 -3
  94. package/dist/components/table/table-row.d.ts +3 -3
  95. package/dist/components/table/table.d.ts +1 -1
  96. package/dist/components/text/text.d.ts +23 -3
  97. package/dist/components/textarea/textarea.d.ts +21 -0
  98. package/dist/components/tile/tile.d.ts +33 -0
  99. package/dist/components/title/title.d.ts +19 -5
  100. package/dist/components/toast/toast.d.ts +15 -3
  101. package/dist/components/toggle-button/toggle-button.d.ts +32 -6
  102. package/dist/components/toggle-button-group/toggle-button-group.d.ts +20 -0
  103. package/dist/components/toggle-content/toggle-content.d.ts +4 -4
  104. package/dist/components/toolbar/toolbar.d.ts +14 -0
  105. package/dist/components/tooltip/tooltip.d.ts +50 -3
  106. package/dist/components/translate/translate.d.ts +2 -2
  107. package/dist/components-loader.js +3 -0
  108. package/dist/components.js +3851 -4248
  109. package/dist/en.js +6 -0
  110. package/dist/i18n/{lib/is-localized.d.ts → is-localized.d.ts} +3 -2
  111. package/dist/i18n/{lib/localization.d.ts → localization.d.ts} +0 -1
  112. package/dist/i18n/main.d.ts +7 -6
  113. package/dist/i18n/translate.d.ts +6 -0
  114. package/dist/i18n/translations/en.json.d.ts +19 -0
  115. package/dist/i18n/types.d.ts +30 -0
  116. package/dist/i18n.js +52 -58
  117. package/dist/lib/behaviors/can-be-collapsed.d.ts +10 -0
  118. package/dist/lib/behaviors/can-be-disabled.d.ts +9 -0
  119. package/dist/lib/behaviors/can-be-expanded.d.ts +11 -0
  120. package/dist/lib/behaviors/checkbox-control-group.d.ts +21 -0
  121. package/dist/lib/behaviors/checkbox-control.d.ts +15 -0
  122. package/dist/lib/behaviors/form-associated.d.ts +22 -0
  123. package/dist/lib/behaviors/is-draggable.d.ts +23 -0
  124. package/dist/lib/behaviors/listbox-control.d.ts +26 -0
  125. package/dist/lib/behaviors/number-form-control.d.ts +11 -0
  126. package/dist/lib/behaviors/option-control.d.ts +18 -0
  127. package/dist/lib/behaviors/radio-group-control.d.ts +12 -0
  128. package/dist/lib/control-element.d.ts +40 -0
  129. package/dist/lib/controllers/active-descendants-controller.d.ts +29 -0
  130. package/dist/lib/controllers/drag.controller.d.ts +18 -0
  131. package/dist/lib/controllers/expandable-controller.d.ts +6 -10
  132. package/dist/lib/custom-element.d.ts +8 -5
  133. package/dist/lib/dialog-element.d.ts +183 -0
  134. package/dist/lib/interactive-control-element.d.ts +19 -0
  135. package/dist/lib/link-control-element.d.ts +19 -0
  136. package/dist/lib/models/appearance.d.ts +8 -0
  137. package/dist/lib/models/layout.d.ts +46 -0
  138. package/dist/lib/models/shape.d.ts +7 -0
  139. package/dist/lib/models/size.d.ts +11 -0
  140. package/dist/lib/models/variant.d.ts +12 -0
  141. package/dist/main.d.ts +25 -0
  142. package/dist/main.js +1144 -727
  143. package/dist/styles-native.css +1 -0
  144. package/dist/styles.css +1 -1
  145. package/dist/utils/attribute-directive.d.ts +20 -0
  146. package/dist/utils/command-directive.d.ts +22 -0
  147. package/dist/utils/dom-events.d.ts +49 -0
  148. package/dist/{lib/types/a11y.d.ts → utils/dom-types.d.ts} +1 -17
  149. package/dist/utils/dom.d.ts +17 -0
  150. package/dist/utils/lit.d.ts +4 -0
  151. package/dist/utils/main.d.ts +11 -0
  152. package/dist/utils/shared-event-listener.d.ts +3 -0
  153. package/dist/utils/shared-resize-observer.d.ts +7 -0
  154. package/dist/utils/types.d.ts +5 -0
  155. package/dist/utils/unique-id.d.ts +20 -0
  156. package/dist/utils.js +299 -0
  157. package/dist/vendor.js +1968 -0
  158. package/package.json +55 -32
  159. package/dist/cdk/control/checkbox-form-control.d.ts +0 -15
  160. package/dist/cdk/control/checkbox-group-form-control.d.ts +0 -21
  161. package/dist/cdk/control/listbox-form-control.d.ts +0 -22
  162. package/dist/cdk/control/option-control.d.ts +0 -24
  163. package/dist/cdk/control/radio-group-form-control.d.ts +0 -22
  164. package/dist/cdk/drag-drop/drag-events.d.ts +0 -9
  165. package/dist/cdk/drag-drop/drag.controller.d.ts +0 -18
  166. package/dist/cdk/drag-drop/is-draggable.d.ts +0 -18
  167. package/dist/cdk/interactive/interactive-element.d.ts +0 -28
  168. package/dist/cdk/interactive/interactive-link.d.ts +0 -15
  169. package/dist/cdk/main.d.ts +0 -14
  170. package/dist/cdk/popover/popover-host.d.ts +0 -25
  171. package/dist/cdk/popover/popover.models.d.ts +0 -34
  172. package/dist/cdk/popover/popover.utils.d.ts +0 -5
  173. package/dist/cdk.js +0 -950
  174. package/dist/components/accordion/accordion-header.d.ts +0 -17
  175. package/dist/components/accordion/index.d.ts +0 -4
  176. package/dist/components/action-group/index.d.ts +0 -2
  177. package/dist/components/anchor-navigation/anchor-observer.d.ts +0 -11
  178. package/dist/components/area-header/area-header.models.d.ts +0 -12
  179. package/dist/components/area-header/index.d.ts +0 -3
  180. package/dist/components/avatar/avatar.models.d.ts +0 -18
  181. package/dist/components/avatar/index.d.ts +0 -3
  182. package/dist/components/avatar-group/avatar-group.d.ts +0 -15
  183. package/dist/components/avatar-group/index.d.ts +0 -2
  184. package/dist/components/badge/badge.models.d.ts +0 -14
  185. package/dist/components/badge/index.d.ts +0 -3
  186. package/dist/components/breadcrumbs/breadcrumbs-item.d.ts +0 -17
  187. package/dist/components/breadcrumbs/index.d.ts +0 -3
  188. package/dist/components/button/button.models.d.ts +0 -27
  189. package/dist/components/button/index.d.ts +0 -3
  190. package/dist/components/button-group/index.d.ts +0 -2
  191. package/dist/components/card/index.d.ts +0 -2
  192. package/dist/components/checkbox/index.d.ts +0 -2
  193. package/dist/components/checkbox-group/checkbox-group.models.d.ts +0 -6
  194. package/dist/components/checkbox-group/index.d.ts +0 -3
  195. package/dist/components/chip/chip.models.d.ts +0 -10
  196. package/dist/components/chip/index.d.ts +0 -3
  197. package/dist/components/circular-progress-bar/circular-progress-bar.d.ts +0 -42
  198. package/dist/components/circular-progress-bar/circular-progress-bar.models.d.ts +0 -7
  199. package/dist/components/circular-progress-bar/index.d.ts +0 -3
  200. package/dist/components/combobox/combobox.d.ts +0 -20
  201. package/dist/components/combobox/index.d.ts +0 -2
  202. package/dist/components/content-box/content-box.d.ts +0 -11
  203. package/dist/components/content-box/content-box.models.d.ts +0 -2
  204. package/dist/components/content-box/index.d.ts +0 -2
  205. package/dist/components/dropdown/dropdown.models.d.ts +0 -6
  206. package/dist/components/dropdown/index.d.ts +0 -3
  207. package/dist/components/form-field/index.d.ts +0 -2
  208. package/dist/components/header/header-actions.d.ts +0 -10
  209. package/dist/components/headline/headline.d.ts +0 -13
  210. package/dist/components/headline/headline.models.d.ts +0 -8
  211. package/dist/components/headline/index.d.ts +0 -3
  212. package/dist/components/highlight/index.d.ts +0 -2
  213. package/dist/components/icon-button/index.d.ts +0 -2
  214. package/dist/components/image/index.d.ts +0 -2
  215. package/dist/components/inline-message/index.d.ts +0 -3
  216. package/dist/components/inline-message/inline-message.models.d.ts +0 -12
  217. package/dist/components/input/index.d.ts +0 -3
  218. package/dist/components/input/input.models.d.ts +0 -7
  219. package/dist/components/line-clamp/index.d.ts +0 -2
  220. package/dist/components/link/base-link.d.ts +0 -15
  221. package/dist/components/link/index.d.ts +0 -3
  222. package/dist/components/list/index.d.ts +0 -3
  223. package/dist/components/list/list-item.d.ts +0 -27
  224. package/dist/components/loading-overlay/index.d.ts +0 -2
  225. package/dist/components/loading-spinner/index.d.ts +0 -2
  226. package/dist/components/logo/index.d.ts +0 -3
  227. package/dist/components/logo/logo.models.d.ts +0 -9
  228. package/dist/components/main-menu/main-menu-link.d.ts +0 -9
  229. package/dist/components/main-menu/main-menu-subtitle.d.ts +0 -12
  230. package/dist/components/main-menu/main-menu-title.d.ts +0 -12
  231. package/dist/components/menu/index.d.ts +0 -3
  232. package/dist/components/menu/menu-label.d.ts +0 -9
  233. package/dist/components/menu-item/index.d.ts +0 -2
  234. package/dist/components/modal/index.d.ts +0 -3
  235. package/dist/components/modal/modal.models.d.ts +0 -5
  236. package/dist/components/navigation-item/index.d.ts +0 -3
  237. package/dist/components/navigation-item/navigation-item.models.d.ts +0 -6
  238. package/dist/components/option/index.d.ts +0 -2
  239. package/dist/components/page/index.d.ts +0 -3
  240. package/dist/components/page/page.models.d.ts +0 -10
  241. package/dist/components/page-layout/index.d.ts +0 -2
  242. package/dist/components/pagination/index.d.ts +0 -2
  243. package/dist/components/progress-bar/index.d.ts +0 -3
  244. package/dist/components/progress-bar/progress-bar.models.d.ts +0 -7
  245. package/dist/components/radio-button/index.d.ts +0 -2
  246. package/dist/components/radio-group/index.d.ts +0 -3
  247. package/dist/components/radio-group/radio-group.models.d.ts +0 -6
  248. package/dist/components/rail-navigation/index.d.ts +0 -2
  249. package/dist/components/search-bar/index.d.ts +0 -4
  250. package/dist/components/search-bar/search-bar.events.d.ts +0 -7
  251. package/dist/components/search-bar/search-bar.models.d.ts +0 -6
  252. package/dist/components/select/index.d.ts +0 -2
  253. package/dist/components/separator/index.d.ts +0 -3
  254. package/dist/components/separator/separator.models.d.ts +0 -6
  255. package/dist/components/skeleton/index.d.ts +0 -3
  256. package/dist/components/skeleton/skeleton.models.d.ts +0 -13
  257. package/dist/components/spacer/index.d.ts +0 -2
  258. package/dist/components/spacer/spacer.d.ts +0 -13
  259. package/dist/components/spacer/spacer.models.d.ts +0 -7
  260. package/dist/components/spinbox/index.d.ts +0 -2
  261. package/dist/components/stack/index.d.ts +0 -3
  262. package/dist/components/stack/stack.d.ts +0 -17
  263. package/dist/components/stack/stack.models.d.ts +0 -25
  264. package/dist/components/switch/index.d.ts +0 -2
  265. package/dist/components/text/index.d.ts +0 -3
  266. package/dist/components/text/text.models.d.ts +0 -14
  267. package/dist/components/title/index.d.ts +0 -3
  268. package/dist/components/title/title.models.d.ts +0 -10
  269. package/dist/components/toast/index.d.ts +0 -3
  270. package/dist/components/toast/toast.models.d.ts +0 -5
  271. package/dist/components/toggle-button/index.d.ts +0 -2
  272. package/dist/components/toggle-content/index.d.ts +0 -2
  273. package/dist/components/tooltip/index.d.ts +0 -3
  274. package/dist/components/tooltip/tooltip.models.d.ts +0 -8
  275. package/dist/components/translate/index.d.ts +0 -2
  276. package/dist/components/visually-hidden/index.d.ts +0 -2
  277. package/dist/components/visually-hidden/visually-hidden.d.ts +0 -11
  278. package/dist/i18n/lib/translate.d.ts +0 -11
  279. package/dist/lib/controllers/active-desendants-controller.d.ts +0 -25
  280. package/dist/lib/controllers/focus-trap.controller.d.ts +0 -14
  281. package/dist/lib/main.d.ts +0 -31
  282. package/dist/lib/mixins/can-be-disabled.d.ts +0 -15
  283. package/dist/lib/mixins/can-be-expanded.d.ts +0 -10
  284. package/dist/lib/mixins/can-be-highlighted.d.ts +0 -8
  285. package/dist/lib/mixins/can-be-readonly.d.ts +0 -7
  286. package/dist/lib/mixins/can-be-required.d.ts +0 -7
  287. package/dist/lib/mixins/can-be-selected.d.ts +0 -9
  288. package/dist/lib/mixins/can-be-validated.d.ts +0 -12
  289. package/dist/lib/mixins/form-control.d.ts +0 -17
  290. package/dist/lib/mixins/number-control.d.ts +0 -12
  291. package/dist/lib/mixins/with-loading-state.d.ts +0 -8
  292. package/dist/lib/utils/date.d.ts +0 -2
  293. package/dist/lib/utils/dedupe-mixin.d.ts +0 -3
  294. package/dist/lib/utils/dom.d.ts +0 -15
  295. package/dist/lib/utils/empty-slot-fallback-fix.d.ts +0 -8
  296. package/dist/lib/utils/get-unique-id.d.ts +0 -36
  297. package/dist/lib/utils/keyboard-events.d.ts +0 -43
  298. package/dist/lib/utils/lit.d.ts +0 -5
  299. package/dist/lib/utils/query-assigned-element.d.ts +0 -16
  300. package/dist/lib/utils/search-text-content.d.ts +0 -8
  301. package/dist/lib/utils/shared-intersection-observer.d.ts +0 -18
  302. package/dist/lib/utils/shared-resize-observer.d.ts +0 -18
  303. package/dist/lib/utils/transformers.d.ts +0 -5
  304. package/dist/loader/main.d.ts +0 -2
  305. package/dist/loader.js +0 -12
  306. package/dist/vendor-dJxQG085.js +0 -138
  307. /package/dist/i18n/{lib/config.d.ts → config.d.ts} +0 -0
  308. /package/dist/i18n/{lib/format.d.ts → format.d.ts} +0 -0
  309. /package/dist/i18n/{lib/models.d.ts → models.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ @layer base{table{--cell-size:var(--odx-size-300);box-sizing:border-box;border-collapse:collapse;background-color:#0000;width:100%;max-width:100%;& thead{background-color:inherit}& tr{transition:var(--odx-transition-reduced);background-color:var(--odx-color-background-transparent);transition-property:background-color,color}& tr:has(td):hover{background-color:var(--odx-color-background-transparent-hover)}& th,td{padding:var(--odx-control-spacing-md)var(--odx-control-spacing-inline-md);min-height:var(--odx-size-250);text-align:start;font-size:inherit}& td{height:var(--cell-size);vertical-align:middle}& th,tr:not(:last-child) td{border-bottom:var(--odx-border-width-thin)solid var(--odx-color-stroke-neutral-subtle)}& th{cursor:default;vertical-align:top;font-weight:var(--odx-typography-font-weight-medium);-webkit-user-select:none;user-select:none;border-bottom-color:#0000}& th :is(odx-input,odx-select){margin-inline:var(--odx-spacing-negative-50)}}}
package/dist/styles.css CHANGED
@@ -1 +1 @@
1
- @layer reset,base,variant,state,theme;@layer reset{:is(*){box-sizing:border-box;scrollbar-width:thin}:not(:defined){display:none}:before,:after{box-sizing:border-box}[popover]{border:none;outline:none}img,picture,video,canvas,svg{display:block;max-width:100%;margin:0}input,button,textarea,select{font:inherit;margin:0}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word;margin:0}p{text-wrap:pretty}h1,h2,h3,h4,h5,h6{text-wrap:balance}#root,#__next{isolation:isolate;margin:0}}@layer base{odx-stack{display:block}.odx-stack{&.odx-stack-horizontal{flex-flow:row}&.odx-stack-wrap{flex-flow:column wrap}&.odx-stack-horizontal.odx-stack-wrap{flex-flow:row wrap}--flow: column;display:flex;flex-flow:var(--flow);max-inline-size:100%;align-items:stretch;justify-content:flex-start;gap:var(--odx-size-75);text-align:start}}@layer base{.odx-align-start{align-items:flex-start}.odx-align-center{align-items:center}.odx-align-end{align-items:end}.odx-justify-start{justify-content:flex-start}.odx-justify-end{justify-content:flex-end}.odx-justify-center{justify-content:center}.odx-justify-space-between{justify-content:space-between}.odx-justify-space-around{justify-content:space-around}.odx-justify-space-evenly{justify-content:space-evenly}}@layer base{.odx-gap-none{gap:0}.odx-gap-xs{gap:var(--odx-size-25)}.odx-gap-sm{gap:var(--odx-size-50)}.odx-gap-md{gap:var(--odx-size-75)}.odx-gap-lg{gap:var(--odx-size-150)}.odx-gap-xl{gap:var(--odx-size-225)}}@layer base{h1,h2,h3,h4,h5,h6{display:block;font-family:var(--odx-typography-font-family-brand);font-size:var(--_font-size);font-weight:var(--odx-typography-font-weight-semibold);line-height:var(--_line-height)}h6{--_font-size: var(--odx-breakpoint-font-size-heading-6);--_line-height: var(--odx-breakpoint-line-height-heading-6)}h5{--_font-size: var(--odx-breakpoint-font-size-heading-5);--_line-height: var(--odx-breakpoint-line-height-heading-5)}h4{--_font-size: var(--odx-breakpoint-font-size-heading-4);--_line-height: var(--odx-breakpoint-line-height-heading-4)}h3{--_font-size: var(--odx-breakpoint-font-size-heading-3);--_line-height: var(--odx-breakpoint-line-height-heading-3)}h2{--_font-size: var(--odx-breakpoint-font-size-heading-2);--_line-height: var(--odx-breakpoint-line-height-heading-2)}h1{--_font-size: var(--odx-breakpoint-font-size-heading-1);--_line-height: var(--odx-breakpoint-line-height-heading-1)}odx-icon{--rotate: 0deg;transition:var(--odx-transition-default);transition-property:transform;transform:rotate(var(--rotate))}[odxPreventTextOverflow]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}odx-list-item:has(:is(odx-button,odx-icon-button,odx-list-item::part(control)):not([aria-disabled=true]):active){--_color-background-pressed: var(--_color-background-hover)}odx-button:has(odx-icon:only-child),odx-button:has(odx-avatar){--_min-inline-size: 0}odx-accordion[control-position=start] odx-accordion-header::part(expand-control){--icon-rotation: -90deg;order:-1}odx-accordion[control-position=start] odx-accordion-header[expanded]::part(expand-control){--icon-rotation: 0}odx-input:has([slot=suffix])::part(base){padding-inline-end:var(--odx-size-px)}}@layer base{:root{--odx-transition-default: all var(--odx-motion-duration-default) var(--odx-motion-easing-default);--odx-transition-slow: all var(--odx-motion-duration-slow) var(--odx-motion-easing-default);--odx-transition-reduced: all var(--odx-motion-duration-fast) var(--odx-motion-easing-reduced);--odx-page-max-inline-size: 1600px;--odx-page-max-inline-size-narrow: 1200px;--odx-page-max-inline-size-wide: 2400px;scrollbar-color:var(--odx-color-primary-rest) var(--odx-palette-transparent)}html,body{margin:0;padding:0}html{scroll-behavior:smooth}body{color:var(--odx-color-foreground-base);background-color:var(--odx-color-background-cool);font-family:var(--odx-typography-font-family-base),"Noto Sans","Kanit",sans-serif;font-size:var(--odx-typography-font-size-base);line-height:var(--odx-typography-line-height-base)}}
1
+ @layer reset{:where(*){scrollbar-width:thin;box-sizing:border-box}:where(body,div,span,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,code,img,svg,small,strike,strong,sub,sup,b,u,i,ol,ul,li,form,label,table,caption,tbody,tfoot,thead,tr,th,td,main,article,aside,canvas,footer,header,nav,section,time,button,video,textarea,input){appearance:none;box-sizing:border-box;border:0;margin:0;padding:0}:where(img,picture,video,canvas){max-width:100%;display:block}:where(input,button,textarea,select){appearance:none;font-feature-settings:inherit;font-family:inherit;font-size:inherit}:where(a){color:var(--odx-color-foreground-accent-rest);text-decoration:underline}:where(p,h1,h2,h3,h4,h5,h6){overflow-wrap:break-word}:where(p){text-wrap:pretty}:where(h1,h2,h3,h4,h5,h6){text-wrap:balance}:where([popover]){border:none;outline:none}@media (prefers-reduced-motion:reduce){:where(*){scroll-behavior:auto!important;transition-duration:0s!important;animation-duration:0s!important;animation-iteration-count:1!important}}:where(*):not(:defined){display:none}}@layer base{.odx-content-box>a,.odx-content>a,.odx-link{gap:var(--odx-spacing-25);transition:var(--odx-transition-reduced);margin-inline:var(--odx-spacing-negative-12);border-radius:var(--odx-control-border-radius);cursor:pointer;padding-inline:var(--odx-spacing-12);-webkit-text-decoration:inherit;text-decoration:inherit;line-height:inherit;color:var(--odx-color-foreground-accent-rest);outline:none;align-items:center;transition-property:color;display:inline-flex;&:focus-visible{outline:var(--odx-focus-ring-outer);outline-offset:var(--odx-focus-ring-offset-sm)}&:hover:not([disabled]){color:var(--odx-color-foreground-accent-hover);text-decoration:underline}&[disabled]{cursor:not-allowed;color:var(--odx-color-foreground-rest-subtle);-webkit-user-select:none;user-select:none;pointer-events:none}>:is(odx-icon,.odx-icon){vertical-align:middle}}odx-title,[class*=odx-title],:where(h1,h2,h3,h4,h5,h6){font-family:var(--odx-typography-font-family-brand);font-weight:var(--odx-typography-font-weight-semibold);display:block}[class*=odx-title-display-]{font-weight:var(--odx-typography-font-weight-medium)}odx-title,.odx-title{line-height:inherit;font-size:inherit}odx-title[size=xs],.odx-title-xs,:where(h6){line-height:var(--odx-typography-line-height-heading-xs);font-size:var(--odx-typography-font-size-heading-xs)}odx-title[size=sm],.odx-title-sm,:where(h5){line-height:var(--odx-typography-line-height-heading-sm);font-size:var(--odx-typography-font-size-heading-sm)}odx-title[size=md],.odx-title-md,:where(h4){line-height:var(--odx-typography-line-height-heading-md);font-size:var(--odx-typography-font-size-heading-md)}odx-title[size=lg],.odx-title-lg,:where(h3){line-height:var(--odx-typography-line-height-heading-lg);font-size:var(--odx-typography-font-size-heading-lg)}odx-title[size=xl],.odx-title-xl,:where(h2){line-height:var(--odx-typography-line-height-heading-xl);font-size:var(--odx-typography-font-size-heading-xl)}odx-title[size=xxl],.odx-title-xxl,:where(h1){line-height:var(--odx-typography-line-height-heading-xxl);font-size:var(--odx-typography-font-size-heading-xxl)}odx-title[size=display-sm],.odx-title-display-sm{line-height:var(--odx-typography-line-height-display-sm);font-size:var(--odx-typography-font-size-display-sm)}odx-title[size=display-md],.odx-title-display-md{line-height:var(--odx-typography-line-height-display-md);font-size:var(--odx-typography-font-size-display-md)}odx-title[size=display-lg],.odx-title-display-lg{line-height:var(--odx-typography-line-height-display-lg);font-size:var(--odx-typography-font-size-display-lg)}odx-title[size=display-xl],.odx-title-display-xl{line-height:var(--odx-typography-line-height-display-xl);font-size:var(--odx-typography-font-size-display-xl)}odx-text,.odx-text{display:block}odx-text[inline],.odx-text-inline{display:inline-block}odx-text[strong],.odx-text-strong{font-weight:var(--odx-typography-font-weight-medium)}:where(:is(.odx-content,.odx-content-box)>:is(p,odx-text,.odx-text)),odx-text[size=md],.odx-text-md{line-height:var(--odx-typography-line-height-text-md);font-size:var(--odx-typography-font-size-text-md)}odx-text[size=xs],.odx-text-xs{line-height:var(--odx-typography-line-height-text-xs);font-size:var(--odx-typography-font-size-text-xs)}odx-text[size=sm],.odx-text-sm{line-height:var(--odx-typography-line-height-text-sm);font-size:var(--odx-typography-font-size-text-sm)}odx-text[size=lg],.odx-text-lg{line-height:var(--odx-typography-line-height-text-lg);font-size:var(--odx-typography-font-size-text-lg)}:where(.odx-typeset,.odx-content){line-height:var(--odx-typography-line-height-text-md);>:where(odx-title,[class*=odx-title]),:where(h1,h2,h3,h4,h5,h6){margin-block:0 var(--odx-layout-spacing-sm);margin-inline:0}>:where(.odx-text,odx-text),:where(p,li,dt,dd,blockquote,figcaption,small,pre,code,cite){margin:var(--odx-layout-spacing-md)0}:where(h2,h3,h4,h5,h6){margin-block-start:var(--odx-layout-spacing-lg)}:where(ul,ol,dl,blockquote){margin-block:var(--odx-layout-spacing-sm);margin-inline:0;padding-inline-start:var(--odx-spacing-200)}:where(blockquote){padding-inline-end:var(--odx-spacing-200)}:where(dt){font-weight:var(--odx-typography-font-weight-medium)}:where(small){font-size:var(--odx-typography-font-size-text-sm)}}:where(.odx-typeset-sm){line-height:var(--odx-typography-line-height-text-sm);font-size:var(--odx-typography-font-size-text-sm);:where(ul,ol,dl,blockquote){padding-inline-start:var(--odx-spacing-150)}:where(blockquote){padding-inline-end:var(--odx-spacing-150)}:where(h2,h3,h4,h5,h6){margin-block-start:var(--odx-layout-spacing-md)}>:where(.odx-text,odx-text),:where(p,li,dt,dd,blockquote,figcaption,small,pre,code,cite){margin-block:var(--odx-layout-spacing-sm)}}.odx-content-box{background-color:var(--odx-color-background-level-1);padding:var(--odx-layout-spacing-md)}.odx-cluster,.odx-flank,.odx-stack{gap:var(--odx-layout-spacing-md);max-width:100%;text-align:inherit;flex-direction:column;justify-content:flex-start;align-items:center;display:flex}.odx-cluster{flex-flow:wrap;align-items:center}.odx-flank{flex-direction:row}.odx-stack{align-items:stretch}.odx-flank:not(.odx-justify-end)>:not(:first-child),.odx-flank.odx-justify-end>:not(:last-child),.odx-fill{flex:1}.odx-align-baseline,.odx-align-start{align-items:flex-start}.odx-align-center{align-items:center}.odx-align-end{align-items:end}.odx-justify-start{justify-content:flex-start}.odx-justify-end{justify-content:flex-end}.odx-justify-center{justify-content:center}.odx-justify-space-between{justify-content:space-between}.odx-justify-space-around{justify-content:space-around}.odx-justify-space-evenly{justify-content:space-evenly}.odx-nowrap{flex-wrap:nowrap}[class*=odx-auto-grid]{--max-columns:6;--min-column-size:250px;--gap:var(--odx-layout-spacing-md);--_max-column-size:calc((100% - var(--gap)*(var(--max-columns) + 1))/var(--max-columns));--_min-column-size:min(100%,max(var(--min-column-size),var(--_max-column-size)));--_column-size:minmax(var(--_min-column-size),1fr);grid-template-columns:repeat(auto-fit,var(--_column-size));gap:var(--gap);place-content:center;display:grid}.odx-auto-grid-fill{grid-template-columns:repeat(auto-fill,var(--_column-size))}:root{scrollbar-color:var(--odx-color-background-brand)transparent}.odx-dark-mode{color-scheme:dark}.odx-light-mode{color-scheme:light}html{scroll-behavior:smooth}body{background-color:var(--odx-color-background-base);line-height:var(--odx-typography-line-height-base);color:var(--odx-color-foreground-rest);font-family:var(--odx-typography-font-family-base),"Noto Sans",Kanit,sans-serif;font-size:var(--odx-typography-font-size-base)}:where(.odx-content),.odx-content-box{>odx-area-header:first-of-type{margin-block-start:calc(-1*var(--odx-layout-spacing-md))}>odx-key-value-list,>odx-list{margin-block:var(--odx-layout-spacing-md)}}odx-card>odx-area-header[slot=header]:first-child{margin-block-start:calc(-1*var(--odx-layout-spacing-md))}odx-page-layout [id]{scroll-margin-top:calc(var(--page-offset-top))}odx-icon{transition:var(--odx-transition-default);transition-property:transform,color,opacity}input[type=time]::-webkit-calendar-picker-indicator{display:none}[odx-control]:has([odx-control]:not([disabled]):active){--_color-background-pressed:var(--_color-background-hover)}[odx-button]:has(odx-icon:only-child){--_min-width:var(--_height)}odx-rail-navigation :is(odx-navigation-item,odx-navigation-item-group)::part(label){transition:var(--odx-transition-reduced);transition-delay:var(--odx-motion-duration-fast);transition-property:opacity}odx-rail-navigation[collapsed] :is(odx-navigation-item,odx-navigation-item-group)::part(label){opacity:0;white-space:nowrap}}@layer variant,state,theme;@layer utils{.odx-m-auto{margin:auto}.odx-mx-auto{margin-inline:auto}.odx-ml-auto{margin-inline-start:auto}.odx-mr-auto{margin-inline-end:auto}.odx-my-auto{margin-block:auto}.odx-mt-auto{margin-block-start:auto}.odx-mb-auto{margin-block-end:auto}.odx-g-0{--gap:0px;gap:0}.odx-gx-0{column-gap:0}.odx-gy-0{row-gap:0}.odx-p-0{padding:0}.odx-px-0{padding-inline:0}.odx-pl-0{padding-inline-start:0}.odx-pr-0{padding-inline-end:0}.odx-py-0{padding-block:0}.odx-pt-0{padding-block-start:0}.odx-pb-0{padding-block-end:0}.odx-m-0{margin:0}.odx-mx-0{margin-inline:0}.odx-ml-0{margin-inline-start:0}.odx-mr-0{margin-inline-end:0}.odx-my-0{margin-block:0}.odx-mt-0{margin-block-start:0}.odx-mb-0{margin-block-end:0}.odx-g-12{--gap:var(--odx-spacing-12);gap:var(--odx-spacing-12)}.odx-gx-12{column-gap:var(--odx-spacing-12)}.odx-gy-12{row-gap:var(--odx-spacing-12)}.odx-p-12{padding:var(--odx-spacing-12)}.odx-px-12{padding-inline:var(--odx-spacing-12)}.odx-pl-12{padding-inline-start:var(--odx-spacing-12)}.odx-pr-12{padding-inline-end:var(--odx-spacing-12)}.odx-py-12{padding-block:var(--odx-spacing-12)}.odx-pt-12{padding-block-start:var(--odx-spacing-12)}.odx-pb-12{padding-block-end:var(--odx-spacing-12)}.odx-m-12{margin:var(--odx-spacing-12)}.odx-mx-12{margin-inline:var(--odx-spacing-12)}.odx-ml-12{margin-inline-start:var(--odx-spacing-12)}.odx-mr-12{margin-inline-end:var(--odx-spacing-12)}.odx-my-12{margin-block:var(--odx-spacing-12)}.odx-mt-12{margin-block-start:var(--odx-spacing-12)}.odx-mb-12{margin-block-end:var(--odx-spacing-12)}.odx-g-25{--gap:var(--odx-spacing-25);gap:var(--odx-spacing-25)}.odx-gx-25{column-gap:var(--odx-spacing-25)}.odx-gy-25{row-gap:var(--odx-spacing-25)}.odx-p-25{padding:var(--odx-spacing-25)}.odx-px-25{padding-inline:var(--odx-spacing-25)}.odx-pl-25{padding-inline-start:var(--odx-spacing-25)}.odx-pr-25{padding-inline-end:var(--odx-spacing-25)}.odx-py-25{padding-block:var(--odx-spacing-25)}.odx-pt-25{padding-block-start:var(--odx-spacing-25)}.odx-pb-25{padding-block-end:var(--odx-spacing-25)}.odx-m-25{margin:var(--odx-spacing-25)}.odx-mx-25{margin-inline:var(--odx-spacing-25)}.odx-ml-25{margin-inline-start:var(--odx-spacing-25)}.odx-mr-25{margin-inline-end:var(--odx-spacing-25)}.odx-my-25{margin-block:var(--odx-spacing-25)}.odx-mt-25{margin-block-start:var(--odx-spacing-25)}.odx-mb-25{margin-block-end:var(--odx-spacing-25)}.odx-g-37{--gap:var(--odx-spacing-37);gap:var(--odx-spacing-37)}.odx-gx-37{column-gap:var(--odx-spacing-37)}.odx-gy-37{row-gap:var(--odx-spacing-37)}.odx-p-37{padding:var(--odx-spacing-37)}.odx-px-37{padding-inline:var(--odx-spacing-37)}.odx-pl-37{padding-inline-start:var(--odx-spacing-37)}.odx-pr-37{padding-inline-end:var(--odx-spacing-37)}.odx-py-37{padding-block:var(--odx-spacing-37)}.odx-pt-37{padding-block-start:var(--odx-spacing-37)}.odx-pb-37{padding-block-end:var(--odx-spacing-37)}.odx-m-37{margin:var(--odx-spacing-37)}.odx-mx-37{margin-inline:var(--odx-spacing-37)}.odx-ml-37{margin-inline-start:var(--odx-spacing-37)}.odx-mr-37{margin-inline-end:var(--odx-spacing-37)}.odx-my-37{margin-block:var(--odx-spacing-37)}.odx-mt-37{margin-block-start:var(--odx-spacing-37)}.odx-mb-37{margin-block-end:var(--odx-spacing-37)}.odx-g-50{--gap:var(--odx-spacing-50);gap:var(--odx-spacing-50)}.odx-gx-50{column-gap:var(--odx-spacing-50)}.odx-gy-50{row-gap:var(--odx-spacing-50)}.odx-p-50{padding:var(--odx-spacing-50)}.odx-px-50{padding-inline:var(--odx-spacing-50)}.odx-pl-50{padding-inline-start:var(--odx-spacing-50)}.odx-pr-50{padding-inline-end:var(--odx-spacing-50)}.odx-py-50{padding-block:var(--odx-spacing-50)}.odx-pt-50{padding-block-start:var(--odx-spacing-50)}.odx-pb-50{padding-block-end:var(--odx-spacing-50)}.odx-m-50{margin:var(--odx-spacing-50)}.odx-mx-50{margin-inline:var(--odx-spacing-50)}.odx-ml-50{margin-inline-start:var(--odx-spacing-50)}.odx-mr-50{margin-inline-end:var(--odx-spacing-50)}.odx-my-50{margin-block:var(--odx-spacing-50)}.odx-mt-50{margin-block-start:var(--odx-spacing-50)}.odx-mb-50{margin-block-end:var(--odx-spacing-50)}.odx-g-75{--gap:var(--odx-spacing-75);gap:var(--odx-spacing-75)}.odx-gx-75{column-gap:var(--odx-spacing-75)}.odx-gy-75{row-gap:var(--odx-spacing-75)}.odx-p-75{padding:var(--odx-spacing-75)}.odx-px-75{padding-inline:var(--odx-spacing-75)}.odx-pl-75{padding-inline-start:var(--odx-spacing-75)}.odx-pr-75{padding-inline-end:var(--odx-spacing-75)}.odx-py-75{padding-block:var(--odx-spacing-75)}.odx-pt-75{padding-block-start:var(--odx-spacing-75)}.odx-pb-75{padding-block-end:var(--odx-spacing-75)}.odx-m-75{margin:var(--odx-spacing-75)}.odx-mx-75{margin-inline:var(--odx-spacing-75)}.odx-ml-75{margin-inline-start:var(--odx-spacing-75)}.odx-mr-75{margin-inline-end:var(--odx-spacing-75)}.odx-my-75{margin-block:var(--odx-spacing-75)}.odx-mt-75{margin-block-start:var(--odx-spacing-75)}.odx-mb-75{margin-block-end:var(--odx-spacing-75)}.odx-g-100{--gap:var(--odx-spacing-100);gap:var(--odx-spacing-100)}.odx-gx-100{column-gap:var(--odx-spacing-100)}.odx-gy-100{row-gap:var(--odx-spacing-100)}.odx-p-100{padding:var(--odx-spacing-100)}.odx-px-100{padding-inline:var(--odx-spacing-100)}.odx-pl-100{padding-inline-start:var(--odx-spacing-100)}.odx-pr-100{padding-inline-end:var(--odx-spacing-100)}.odx-py-100{padding-block:var(--odx-spacing-100)}.odx-pt-100{padding-block-start:var(--odx-spacing-100)}.odx-pb-100{padding-block-end:var(--odx-spacing-100)}.odx-m-100{margin:var(--odx-spacing-100)}.odx-mx-100{margin-inline:var(--odx-spacing-100)}.odx-ml-100{margin-inline-start:var(--odx-spacing-100)}.odx-mr-100{margin-inline-end:var(--odx-spacing-100)}.odx-my-100{margin-block:var(--odx-spacing-100)}.odx-mt-100{margin-block-start:var(--odx-spacing-100)}.odx-mb-100{margin-block-end:var(--odx-spacing-100)}.odx-g-150{--gap:var(--odx-spacing-150);gap:var(--odx-spacing-150)}.odx-gx-150{column-gap:var(--odx-spacing-150)}.odx-gy-150{row-gap:var(--odx-spacing-150)}.odx-p-150{padding:var(--odx-spacing-150)}.odx-px-150{padding-inline:var(--odx-spacing-150)}.odx-pl-150{padding-inline-start:var(--odx-spacing-150)}.odx-pr-150{padding-inline-end:var(--odx-spacing-150)}.odx-py-150{padding-block:var(--odx-spacing-150)}.odx-pt-150{padding-block-start:var(--odx-spacing-150)}.odx-pb-150{padding-block-end:var(--odx-spacing-150)}.odx-m-150{margin:var(--odx-spacing-150)}.odx-mx-150{margin-inline:var(--odx-spacing-150)}.odx-ml-150{margin-inline-start:var(--odx-spacing-150)}.odx-mr-150{margin-inline-end:var(--odx-spacing-150)}.odx-my-150{margin-block:var(--odx-spacing-150)}.odx-mt-150{margin-block-start:var(--odx-spacing-150)}.odx-mb-150{margin-block-end:var(--odx-spacing-150)}.odx-g-sm{--gap:var(--odx-layout-spacing-sm);gap:var(--odx-layout-spacing-sm)}.odx-gx-sm{column-gap:var(--odx-layout-spacing-sm)}.odx-gy-sm{row-gap:var(--odx-layout-spacing-sm)}.odx-p-sm{padding:var(--odx-layout-spacing-sm)}.odx-px-sm{padding-inline:var(--odx-layout-spacing-sm)}.odx-pl-sm{padding-inline-start:var(--odx-layout-spacing-sm)}.odx-pr-sm{padding-inline-end:var(--odx-layout-spacing-sm)}.odx-py-sm{padding-block:var(--odx-layout-spacing-sm)}.odx-pt-sm{padding-block-start:var(--odx-layout-spacing-sm)}.odx-pb-sm{padding-block-end:var(--odx-layout-spacing-sm)}.odx-m-sm{margin:var(--odx-layout-spacing-sm)}.odx-mx-sm{margin-inline:var(--odx-layout-spacing-sm)}.odx-ml-sm{margin-inline-start:var(--odx-layout-spacing-sm)}.odx-mr-sm{margin-inline-end:var(--odx-layout-spacing-sm)}.odx-my-sm{margin-block:var(--odx-layout-spacing-sm)}.odx-mt-sm{margin-block-start:var(--odx-layout-spacing-sm)}.odx-mb-sm{margin-block-end:var(--odx-layout-spacing-sm)}.odx-g-md{--gap:var(--odx-layout-spacing-md);gap:var(--odx-layout-spacing-md)}.odx-gx-md{column-gap:var(--odx-layout-spacing-md)}.odx-gy-md{row-gap:var(--odx-layout-spacing-md)}.odx-p-md{padding:var(--odx-layout-spacing-md)}.odx-px-md{padding-inline:var(--odx-layout-spacing-md)}.odx-pl-md{padding-inline-start:var(--odx-layout-spacing-md)}.odx-pr-md{padding-inline-end:var(--odx-layout-spacing-md)}.odx-py-md{padding-block:var(--odx-layout-spacing-md)}.odx-pt-md{padding-block-start:var(--odx-layout-spacing-md)}.odx-pb-md{padding-block-end:var(--odx-layout-spacing-md)}.odx-m-md{margin:var(--odx-layout-spacing-md)}.odx-mx-md{margin-inline:var(--odx-layout-spacing-md)}.odx-ml-md{margin-inline-start:var(--odx-layout-spacing-md)}.odx-mr-md{margin-inline-end:var(--odx-layout-spacing-md)}.odx-my-md{margin-block:var(--odx-layout-spacing-md)}.odx-mt-md{margin-block-start:var(--odx-layout-spacing-md)}.odx-mb-md{margin-block-end:var(--odx-layout-spacing-md)}.odx-g-lg{--gap:var(--odx-layout-spacing-lg);gap:var(--odx-layout-spacing-lg)}.odx-gx-lg{column-gap:var(--odx-layout-spacing-lg)}.odx-gy-lg{row-gap:var(--odx-layout-spacing-lg)}.odx-p-lg{padding:var(--odx-layout-spacing-lg)}.odx-px-lg{padding-inline:var(--odx-layout-spacing-lg)}.odx-pl-lg{padding-inline-start:var(--odx-layout-spacing-lg)}.odx-pr-lg{padding-inline-end:var(--odx-layout-spacing-lg)}.odx-py-lg{padding-block:var(--odx-layout-spacing-lg)}.odx-pt-lg{padding-block-start:var(--odx-layout-spacing-lg)}.odx-pb-lg{padding-block-end:var(--odx-layout-spacing-lg)}.odx-m-lg{margin:var(--odx-layout-spacing-lg)}.odx-mx-lg{margin-inline:var(--odx-layout-spacing-lg)}.odx-ml-lg{margin-inline-start:var(--odx-layout-spacing-lg)}.odx-mr-lg{margin-inline-end:var(--odx-layout-spacing-lg)}.odx-my-lg{margin-block:var(--odx-layout-spacing-lg)}.odx-mt-lg{margin-block-start:var(--odx-layout-spacing-lg)}.odx-mb-lg{margin-block-end:var(--odx-layout-spacing-lg)}.odx-no-interaction{-webkit-user-select:none;user-select:none;pointer-events:none}.odx-no-overflow{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.odx-visually-hidden:not(:focus-within),.odx-visually-hidden-force{white-space:nowrap!important;width:1px!important;height:1px!important;clip-path:rect(0 0 0 0)!important;border:none!important;padding:0!important;position:absolute!important;overflow:hidden!important}}:root{--odx-transition-default:all var(--odx-motion-duration-default)var(--odx-motion-easing-default);--odx-transition-slow:all var(--odx-motion-duration-slow)var(--odx-motion-easing-default);--odx-transition-reduced:all var(--odx-motion-duration-fast)var(--odx-motion-easing-reduced);--odx-motion-delay-reduced:50ms;--odx-focus-ring-outer:var(--odx-border-width-thick)solid var(--odx-color-stroke-focus-outer);--odx-focus-ring-inner:0 0 0 calc(-1*var(--odx-focus-ring-offset))var(--odx-color-stroke-focus-inner)inset;--odx-focus-ring-offset:calc(-1*var(--odx-border-width-thick));--odx-focus-ring-offset-sm:calc(-1*var(--odx-border-width-thin));--odx-z-level-background:-1;--odx-z-level-base:0;--odx-z-level-foreground:1;--odx-z-level-interactive:5;--odx-z-level-sticky:10;--odx-z-level-sticky-foreground:15;--odx-z-level-overlay:100;--odx-z-level-topmost:9999}
@@ -0,0 +1,20 @@
1
+ export interface AttributeDirectiveOptions<T extends string, R> {
2
+ name: T;
3
+ getValue: (host: HTMLElement) => R;
4
+ }
5
+ export interface AttributeDirective<T extends string, R> {
6
+ selector: `[${T}]`;
7
+ attribute: T;
8
+ applied<E extends HTMLElement = HTMLElement>(element?: HTMLElement | null): element is E;
9
+ value: (element: HTMLElement) => R;
10
+ }
11
+ export type BooleanAttributeDirectiveOptions<T extends string> = Omit<AttributeDirectiveOptions<T, boolean>, 'getValue'> & {
12
+ onUpdate?(element: HTMLElement, value: boolean): void;
13
+ };
14
+ export type BooleanAttributeDirective<T extends string> = AttributeDirective<T, boolean> & {
15
+ toggle(element: HTMLElement, state?: boolean): void;
16
+ };
17
+ export declare function booleanAttributeDirective<const T extends string>(options: BooleanAttributeDirectiveOptions<T>): BooleanAttributeDirective<T>;
18
+ export type StringAttributeDirective<T extends string> = AttributeDirective<T, string | null>;
19
+ export declare function stringAttributeDirective<const T extends string>(name: T): StringAttributeDirective<T>;
20
+ //# sourceMappingURL=attribute-directive.d.ts.map
@@ -0,0 +1,22 @@
1
+ import { StringAttributeDirective } from './attribute-directive.js';
2
+ export declare class InvokerCommandEvent extends CustomEvent<{
3
+ source: HTMLElement;
4
+ command: string;
5
+ }> {
6
+ static readonly type = "odx-invoker-command";
7
+ constructor(detail: InvokerCommandEvent['detail'] & {
8
+ bubbles?: boolean;
9
+ });
10
+ }
11
+ export interface CommandDirectiveOptions<T extends string> {
12
+ name: T;
13
+ command: string | ((source: HTMLElement) => string | null);
14
+ }
15
+ export interface CommandDirective<T extends string> extends StringAttributeDirective<T> {
16
+ connect: () => void;
17
+ disconnect: () => void;
18
+ subscribe: (target: HTMLElement, handler: (event: InvokerCommandEvent) => void) => () => void;
19
+ invoke: (source: HTMLElement, command: string, targetOrId?: HTMLElement | string | null) => boolean;
20
+ }
21
+ export declare function commandDirective<const T extends string>(options: CommandDirectiveOptions<T>): CommandDirective<T>;
22
+ //# sourceMappingURL=command-directive.d.ts.map
@@ -0,0 +1,49 @@
1
+ export declare function createCustomEvent<Payload = never, const T extends string = string>(name: T, options?: CustomEventInit<Payload>): {
2
+ new (eventInit?: CustomEventInit<Payload>): {
3
+ readonly detail: Payload;
4
+ initCustomEvent(type: string, bubbles?: boolean, cancelable?: boolean, detail?: Payload | undefined): void;
5
+ readonly bubbles: boolean;
6
+ cancelBubble: boolean;
7
+ readonly cancelable: boolean;
8
+ readonly composed: boolean;
9
+ readonly currentTarget: EventTarget | null;
10
+ readonly defaultPrevented: boolean;
11
+ readonly eventPhase: number;
12
+ readonly isTrusted: boolean;
13
+ returnValue: boolean;
14
+ readonly srcElement: EventTarget | null;
15
+ readonly target: EventTarget | null;
16
+ readonly timeStamp: DOMHighResTimeStamp;
17
+ readonly type: string;
18
+ composedPath(): EventTarget[];
19
+ initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void;
20
+ preventDefault(): void;
21
+ stopImmediatePropagation(): void;
22
+ stopPropagation(): void;
23
+ readonly NONE: 0;
24
+ readonly CAPTURING_PHASE: 1;
25
+ readonly AT_TARGET: 2;
26
+ readonly BUBBLING_PHASE: 3;
27
+ };
28
+ readonly type: T;
29
+ dispatch(target: HTMLElement, eventInit?: CustomEventInit<Payload>): boolean;
30
+ };
31
+ export declare function createToggleEvent(oldState: boolean, newState: boolean, eventInit?: EventInit): ToggleEvent;
32
+ export declare function isToggleOpen(event: ToggleEvent): boolean;
33
+ export declare function clickedOutside(event: Event, element?: Element | null, allowSelf?: boolean): boolean;
34
+ export declare function forwardEvent(target: HTMLElement, eventInit?: EventInit): EventListener;
35
+ export declare function getElementFromEvent<T = HTMLElement>(event: Event, filterFn: (node: HTMLElement) => boolean): T | undefined;
36
+ export declare function getKeyInfo(event: KeyboardEvent): {
37
+ up: boolean;
38
+ right: boolean;
39
+ down: boolean;
40
+ left: boolean;
41
+ enter: boolean;
42
+ escape: boolean;
43
+ space: boolean;
44
+ backTab: boolean;
45
+ tab: boolean;
46
+ start: boolean;
47
+ end: boolean;
48
+ };
49
+ //# sourceMappingURL=dom-events.d.ts.map
@@ -1,20 +1,4 @@
1
1
  export type ARIARole = 'alert' | 'alertdialog' | 'button' | 'checkbox' | 'dialog' | 'gridcell' | 'link' | 'log' | 'marquee' | 'menuitem' | 'menuitemcheckbox' | 'menuitemradio' | 'option' | 'progressbar' | 'radio' | 'scrollbar' | 'searchbox' | 'slider' | 'spinbutton' | 'status' | 'switch' | 'tab' | 'tabpanel' | 'textbox' | 'timer' | 'tooltip' | 'treeitem' | 'combobox' | 'grid' | 'listbox' | 'menu' | 'menubar' | 'radiogroup' | 'tablist' | 'tree' | 'treegrid' | 'application' | 'article' | 'cell' | 'columnheader' | 'definition' | 'directory' | 'document' | 'feed' | 'figure' | 'group' | 'heading' | 'img' | 'list' | 'listitem' | 'math' | 'none' | 'note' | 'presentation' | 'region' | 'row' | 'rowgroup' | 'rowheader' | 'separator' | 'table' | 'term' | 'text' | 'toolbar' | 'banner' | 'complementary' | 'contentinfo' | 'form' | 'main' | 'navigation' | 'region' | 'search' | 'doc-abstract' | 'doc-acknowledgments' | 'doc-afterword' | 'doc-appendix' | 'doc-backlink' | 'doc-biblioentry' | 'doc-bibliography' | 'doc-biblioref' | 'doc-chapter' | 'doc-colophon' | 'doc-conclusion' | 'doc-cover' | 'doc-credit' | 'doc-credits' | 'doc-dedication' | 'doc-endnote' | 'doc-endnotes' | 'doc-epigraph' | 'doc-epilogue' | 'doc-errata' | 'doc-example' | 'doc-footnote' | 'doc-foreword' | 'doc-glossary' | 'doc-glossref' | 'doc-index' | 'doc-introduction' | 'doc-noteref' | 'doc-notice' | 'doc-pagebreak' | 'doc-pagelist' | 'doc-part' | 'doc-preface' | 'doc-prologue' | 'doc-pullquote' | 'doc-qna' | 'doc-subtitle' | 'doc-tip' | 'doc-toc';
2
- /**
3
- * An extension of `ARIAMixin` that enforces strict value types for aria
4
- * properties.
5
- *
6
- * This is needed for correct typing in render functions with lit analyzer.
7
- *
8
- * @example
9
- * render() {
10
- * const {ariaLabel} = this as ARIAMixinStrict;
11
- * return html`
12
- * <button aria-label=${ariaLabel || nothing}>
13
- * <slot></slot>
14
- * </button>
15
- * `;
16
- * }
17
- */
18
2
  export interface ARIAMixinStrict extends ARIAMixin {
19
3
  ariaAtomic: 'true' | 'false' | null;
20
4
  ariaAutoComplete: 'none' | 'inline' | 'list' | 'both' | null;
@@ -55,4 +39,4 @@ export interface ARIAMixinStrict extends ARIAMixin {
55
39
  ariaValueText: string | null;
56
40
  role: ARIARole | null;
57
41
  }
58
- //# sourceMappingURL=a11y.d.ts.map
42
+ //# sourceMappingURL=dom-types.d.ts.map
@@ -0,0 +1,17 @@
1
+ export declare function supportsHover(): boolean;
2
+ export declare function parseDate(value: number | string | Date): Date | null;
3
+ export declare function findClosestDocument(node: Node): Document | ShadowRoot;
4
+ export declare function toAriaBooleanAttribute(value: boolean, removeOnFalse?: false | undefined): 'true' | 'false';
5
+ export declare function toAriaBooleanAttribute(value: boolean, removeOnFalse?: true): null;
6
+ export declare function toPx(value?: number | null): string | null;
7
+ export declare function querySlotSelector<S extends string | string[], R = S extends string[] ? HTMLSlotElement[] : HTMLSlotElement | null>(root: DocumentFragment | HTMLElement, slot?: S): R;
8
+ export interface GetAssignedElementOptions<T extends HTMLElement = HTMLElement> {
9
+ slot?: string | string[];
10
+ selector?: ((element: T) => boolean) | string;
11
+ flatten?: boolean;
12
+ }
13
+ export declare function getAssignedElements<T extends HTMLElement = HTMLElement>(root: DocumentFragment | HTMLElement, options?: GetAssignedElementOptions<T>): T[];
14
+ export declare function setFocusable(target: HTMLElement, interactive: boolean): void;
15
+ export declare function waitForAnimations(element?: Element | null, subtree?: boolean): Promise<Animation[]>;
16
+ export declare function interactionResponse(): Promise<unknown>;
17
+ //# sourceMappingURL=dom.d.ts.map
@@ -0,0 +1,4 @@
1
+ import { nothing, ReactiveElement, TemplateResult } from 'lit';
2
+ export declare function optionalAttr<T>(value: T): NonNullable<T>;
3
+ export declare function optionalSlot(host: ReactiveElement, slotName: string, classNames?: string): TemplateResult | typeof nothing;
4
+ //# sourceMappingURL=lit.d.ts.map
@@ -0,0 +1,11 @@
1
+ export * from './attribute-directive.js';
2
+ export * from './command-directive.js';
3
+ export * from './dom.js';
4
+ export * from './dom-events.js';
5
+ export * from './dom-types.js';
6
+ export * from './lit.js';
7
+ export * from './shared-event-listener.js';
8
+ export * from './shared-resize-observer.js';
9
+ export * from './types.js';
10
+ export * from './unique-id.js';
11
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1,3 @@
1
+ export declare function addGlobalEventListener(type: string, listener: EventListener, options?: boolean | AddEventListenerOptions): () => void;
2
+ export declare function removeGlobalEventListener(type: string, listener: EventListener): void;
3
+ //# sourceMappingURL=shared-event-listener.d.ts.map
@@ -0,0 +1,7 @@
1
+ export interface ObserveElementResizeOptions {
2
+ edges?: Array<'leading' | 'trailing'>;
3
+ fpsLimit?: number;
4
+ }
5
+ export declare function observeElementResize(target: Element, handler: ResizeObserverCallback, options?: ObserveElementResizeOptions): () => void;
6
+ export declare function unobserveElementResize(target: Element): void;
7
+ //# sourceMappingURL=shared-resize-observer.d.ts.map
@@ -0,0 +1,5 @@
1
+ export declare type Constructor<T> = new (...args: any[]) => T;
2
+ export type Loose<T extends string> = T | (string & {});
3
+ export type ExpandUnion<T> = T extends unknown ? T : never;
4
+ export type ValuesOf<T extends object> = T[keyof T];
5
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Generates a unique identifier for a given key. If the prefix has previously been used,
3
+ * the function increments a counter associated with that prefix to ensure uniqueness.
4
+ * The generated ID is in the format of `${prefix}-${counter}`.
5
+ *
6
+ * @param {string} key - The prefix for which to generate a unique identifier.
7
+ * @returns {string} A unique identifier string based on the provided prefix.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const id1 = getUniqueId('component');
12
+ * console.log(id1); // Outputs: "component-1"
13
+ *
14
+ * const id2 = getUniqueId('component');
15
+ * console.log(id2); // Outputs: "component-2"
16
+ * ```
17
+ */
18
+ export declare function getUniqueId(key: string): string;
19
+ export declare function resetUniqueId(key?: string): void;
20
+ //# sourceMappingURL=unique-id.d.ts.map
package/dist/utils.js ADDED
@@ -0,0 +1,299 @@
1
+ import { r as round, t as throttle } from './vendor.js';
2
+ import { nothing, html } from 'lit';
3
+
4
+ function attributeDirective({ name, getValue }) {
5
+ return {
6
+ selector: `[${name}]`,
7
+ attribute: name,
8
+ applied(element) {
9
+ return Boolean(element?.hasAttribute(name));
10
+ },
11
+ value(element) {
12
+ return this.applied(element) ? getValue(element) : null;
13
+ }
14
+ };
15
+ }
16
+ function booleanAttributeDirective(options) {
17
+ return {
18
+ ...attributeDirective({ ...options, getValue: (element) => element.getAttribute(options.name) !== "false" }),
19
+ toggle(element, state) {
20
+ if (state === element.hasAttribute(options.name)) return;
21
+ element.toggleAttribute(options.name, state);
22
+ options.onUpdate?.(element, element.hasAttribute(options.name));
23
+ }
24
+ };
25
+ }
26
+ function stringAttributeDirective(name) {
27
+ return attributeDirective({ name, getValue: (element) => element.getAttribute(name) });
28
+ }
29
+
30
+ function supportsHover() {
31
+ return "matchMedia" in globalThis && globalThis.matchMedia("(hover: hover)").matches;
32
+ }
33
+ const createDate = (value) => Number.isNaN(value) ? null : new Date(value);
34
+ function parseDate(value) {
35
+ if (value instanceof Date) {
36
+ return createDate(value.getTime());
37
+ }
38
+ const date = new Date(value);
39
+ if (Number.isNaN(date.getTime()) && typeof value === "string") {
40
+ return createDate(Number(value));
41
+ }
42
+ return createDate(date.getTime());
43
+ }
44
+ function findClosestDocument(node) {
45
+ let parent = node.parentNode;
46
+ while (parent && parent.nodeType !== Node.DOCUMENT_FRAGMENT_NODE && parent.nodeType !== Node.DOCUMENT_NODE) {
47
+ parent = parent.parentNode;
48
+ }
49
+ return parent ?? document;
50
+ }
51
+ function toAriaBooleanAttribute(value, removeOnFalse = true) {
52
+ if (removeOnFalse && !value) return null;
53
+ return String(value);
54
+ }
55
+ function toPx(value) {
56
+ if (value == null || Number.isNaN(value)) return null;
57
+ return `${round(value, 2)}px`;
58
+ }
59
+ function querySlotSelector(root, slot) {
60
+ if (Array.isArray(slot)) {
61
+ if (slot.length === 0) return [];
62
+ const slotSelector = slot.map((s) => `slot[name="${s}"]`).join(", ");
63
+ return Array.from(root.querySelectorAll(slotSelector));
64
+ } else {
65
+ const slotSelector = slot ? `slot[name="${slot}"]` : "slot:not([name])";
66
+ return root.querySelector(slotSelector);
67
+ }
68
+ }
69
+ function getAssignedElements(root, options) {
70
+ const { flatten = true, selector, slot } = options ?? {};
71
+ let elements;
72
+ const slotElement = querySlotSelector(root, slot);
73
+ if (Array.isArray(slotElement)) {
74
+ elements = slotElement.flatMap((slotElement2) => slotElement2.assignedElements({ flatten }));
75
+ } else {
76
+ elements = slotElement?.assignedElements({ flatten }) ?? [];
77
+ }
78
+ if (!selector) {
79
+ return elements;
80
+ }
81
+ const selectorFn = typeof selector === "string" ? (element) => element.matches(selector) : selector;
82
+ return elements.filter(selectorFn);
83
+ }
84
+ function setFocusable(target, interactive) {
85
+ if (interactive) {
86
+ target.tabIndex = target.hasAttribute("tabindex") ? target.tabIndex : 0;
87
+ } else {
88
+ target.removeAttribute("tabindex");
89
+ }
90
+ }
91
+ async function waitForAnimations(element, subtree = false) {
92
+ if (!element) return [];
93
+ try {
94
+ const animations = element.getAnimations({ subtree });
95
+ if (animations.length === 0) return [];
96
+ await Promise.all(animations.map((animation) => animation.finished));
97
+ return animations;
98
+ } catch {
99
+ return [];
100
+ }
101
+ }
102
+ function interactionResponse() {
103
+ return new Promise((resolve) => {
104
+ setTimeout(resolve, 100);
105
+ requestAnimationFrame(() => {
106
+ setTimeout(resolve, 0);
107
+ });
108
+ });
109
+ }
110
+
111
+ function createCustomEvent(name, options) {
112
+ const defaultOptions = { bubbles: false, composed: false, cancelable: true, ...options };
113
+ class CustomEventClass extends CustomEvent {
114
+ static {
115
+ this.type = name;
116
+ }
117
+ constructor(eventInit) {
118
+ super(name, Object.assign({}, defaultOptions, eventInit));
119
+ }
120
+ static dispatch(target, eventInit) {
121
+ return target.dispatchEvent(new CustomEventClass(eventInit));
122
+ }
123
+ }
124
+ return CustomEventClass;
125
+ }
126
+ function createToggleEvent(oldState, newState, eventInit) {
127
+ return new ToggleEvent("toggle", {
128
+ ...eventInit,
129
+ oldState: oldState ? "open" : "closed",
130
+ newState: newState ? "open" : "closed"
131
+ });
132
+ }
133
+ function isToggleOpen(event) {
134
+ return event.newState === "open";
135
+ }
136
+ function clickedOutside(event, element, allowSelf = false) {
137
+ if (!element?.isConnected) return true;
138
+ return !getElementFromEvent(event, (node) => node === element) && (allowSelf || event.target !== element);
139
+ }
140
+ function forwardEvent(target, eventInit) {
141
+ return (event) => {
142
+ event.stopPropagation();
143
+ const shouldPreventDefault = target.dispatchEvent(
144
+ new Event(event.type, {
145
+ bubbles: event.bubbles,
146
+ composed: event.composed,
147
+ cancelable: event.cancelable,
148
+ ...eventInit
149
+ })
150
+ );
151
+ if (shouldPreventDefault) return;
152
+ event.preventDefault();
153
+ };
154
+ }
155
+ function getElementFromEvent(event, filterFn) {
156
+ return event.composedPath().find((node) => node instanceof HTMLElement && filterFn(node));
157
+ }
158
+ function getKeyInfo(event) {
159
+ const { code, shiftKey } = event;
160
+ return {
161
+ up: code === "ArrowUp",
162
+ right: code === "ArrowRight",
163
+ down: code === "ArrowDown",
164
+ left: code === "ArrowLeft",
165
+ enter: code === "Enter",
166
+ escape: code === "Escape",
167
+ space: code === "Space",
168
+ backTab: code === "Tab" && shiftKey,
169
+ tab: code === "Tab" && !shiftKey,
170
+ start: code === "Home",
171
+ end: code === "End"
172
+ };
173
+ }
174
+
175
+ const globalListeners = /* @__PURE__ */ new Map();
176
+ const eventListenerRegistry = /* @__PURE__ */ new Map();
177
+ function handleGlobalEvent(event) {
178
+ const listeners = eventListenerRegistry.get(event.type);
179
+ if (!listeners?.size) return;
180
+ for (const listener of Array.from(listeners).toReversed()) {
181
+ if (event.defaultPrevented) return;
182
+ listener(event);
183
+ }
184
+ }
185
+ function addGlobalEventListener(type, listener, options) {
186
+ const listeners = eventListenerRegistry.get(type) ?? /* @__PURE__ */ new Set();
187
+ listeners.add(listener);
188
+ eventListenerRegistry.set(type, listeners);
189
+ if (!globalListeners.get(type)) {
190
+ globalListeners.set(type, handleGlobalEvent);
191
+ globalThis.addEventListener(type, handleGlobalEvent, options);
192
+ }
193
+ return () => removeGlobalEventListener(type, listener);
194
+ }
195
+ function removeGlobalEventListener(type, listener) {
196
+ const listeners = eventListenerRegistry.get(type);
197
+ if (!listeners?.delete(listener)) return;
198
+ if (listeners.size > 0) return;
199
+ globalListeners.delete(type);
200
+ globalThis.removeEventListener(type, handleGlobalEvent);
201
+ }
202
+
203
+ class InvokerCommandEvent extends CustomEvent {
204
+ static {
205
+ this.type = "odx-invoker-command";
206
+ }
207
+ constructor(detail) {
208
+ super(InvokerCommandEvent.type, { detail, bubbles: detail.bubbles });
209
+ }
210
+ }
211
+ function commandDirective(options) {
212
+ const isCommandSource = (node) => directive.applied(node);
213
+ const isCommandFunction = typeof options.command === "function";
214
+ function handleGlobalEvent(event) {
215
+ const source = getElementFromEvent(event, isCommandSource);
216
+ if (!source) return;
217
+ const command = isCommandFunction ? options.command(source) : options.command;
218
+ if (!command) return;
219
+ directive.invoke(source, command, directive.value(source));
220
+ }
221
+ const directive = {
222
+ ...stringAttributeDirective(options.name),
223
+ connect() {
224
+ removeGlobalEventListener("click", handleGlobalEvent);
225
+ addGlobalEventListener("click", handleGlobalEvent);
226
+ },
227
+ disconnect() {
228
+ removeGlobalEventListener("click", handleGlobalEvent);
229
+ },
230
+ subscribe(target, handler) {
231
+ const handleCommand = ((event) => {
232
+ if (!this.applied(event.detail.source)) return;
233
+ handler(event);
234
+ });
235
+ target.addEventListener(InvokerCommandEvent.type, handleCommand);
236
+ return () => target.removeEventListener(InvokerCommandEvent.type, handleCommand);
237
+ },
238
+ invoke(source, command, targetOrId) {
239
+ const root = findClosestDocument(source);
240
+ const target = typeof targetOrId === "string" ? root.getElementById(targetOrId) : targetOrId;
241
+ if (target) {
242
+ return !target.dispatchEvent(new InvokerCommandEvent({ source, command }));
243
+ }
244
+ return !source.dispatchEvent(new InvokerCommandEvent({ source, command, bubbles: true }));
245
+ }
246
+ };
247
+ return directive;
248
+ }
249
+
250
+ function optionalAttr(value) {
251
+ return value == null || value === "" ? nothing : value;
252
+ }
253
+ function handleOptionalSlotChange(host) {
254
+ let showSlot;
255
+ return (event) => {
256
+ const hasContent = event.target.assignedElements().length > 0;
257
+ if (showSlot === hasContent) return;
258
+ showSlot = hasContent;
259
+ host.requestUpdate();
260
+ };
261
+ }
262
+ function optionalSlot(host, slotName, classNames) {
263
+ if (!host.querySelector(`& > [slot="${slotName}"]`)) return nothing;
264
+ return html`<div class="${classNames ? `${slotName} ${classNames}` : slotName}"><slot name="${slotName}" @slotchange="${handleOptionalSlotChange(host)}"></slot></div>`;
265
+ }
266
+
267
+ const callbackRegistry = /* @__PURE__ */ new WeakMap();
268
+ let resizeObserver;
269
+ function observeElementResize(target, handler, options) {
270
+ resizeObserver?.unobserve(target);
271
+ callbackRegistry.set(target, throttle(handler, 1e3 / (options?.fpsLimit ?? 30), options));
272
+ resizeObserver ??= new ResizeObserver((entries, observer) => {
273
+ for (const entry of entries) {
274
+ callbackRegistry.get(entry.target)?.(entries, observer);
275
+ }
276
+ });
277
+ resizeObserver.observe(target);
278
+ return () => unobserveElementResize(target);
279
+ }
280
+ function unobserveElementResize(target) {
281
+ callbackRegistry.delete(target);
282
+ resizeObserver?.unobserve(target);
283
+ }
284
+
285
+ const uniqueIdCounter = /* @__PURE__ */ new Map();
286
+ function getUniqueId(key) {
287
+ const count = (uniqueIdCounter.get(key) ?? 0) + 1;
288
+ uniqueIdCounter.set(key, count);
289
+ return `${key}-${count}`;
290
+ }
291
+ function resetUniqueId(key) {
292
+ if (key) {
293
+ uniqueIdCounter.delete(key);
294
+ } else {
295
+ uniqueIdCounter.clear();
296
+ }
297
+ }
298
+
299
+ export { InvokerCommandEvent, addGlobalEventListener, booleanAttributeDirective, clickedOutside, commandDirective, createCustomEvent, createToggleEvent, findClosestDocument, forwardEvent, getAssignedElements, getElementFromEvent, getKeyInfo, getUniqueId, interactionResponse, isToggleOpen, observeElementResize, optionalAttr, optionalSlot, parseDate, querySlotSelector, removeGlobalEventListener, resetUniqueId, setFocusable, stringAttributeDirective, supportsHover, toAriaBooleanAttribute, toPx, unobserveElementResize, waitForAnimations };