@eunomia/elements 1.0.0-beta.9 → 1.0.0

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 (322) hide show
  1. package/README.md +28 -6
  2. package/dist/angular/forms.d.ts +80 -0
  3. package/dist/angular/forms.js +267 -0
  4. package/dist/cdn/components/chunks/chunk-2XPIGFBD.js +1 -0
  5. package/dist/cdn/components/chunks/chunk-5IUNSTM3.js +1 -0
  6. package/dist/cdn/components/chunks/chunk-7HXPLZ7C.js +1 -0
  7. package/dist/cdn/components/chunks/{chunk-J3SZBXM6.js → chunk-A2NO4RSF.js} +7 -7
  8. package/dist/cdn/components/chunks/{chunk-Q34EQ5HZ.js → chunk-A623JJXJ.js} +1 -1
  9. package/dist/cdn/components/chunks/{chunk-Y3HOIL64.js → chunk-AW7PU43S.js} +2 -2
  10. package/dist/cdn/components/chunks/{chunk-FF3I7C3C.js → chunk-DWTNRFWW.js} +1 -3
  11. package/dist/cdn/components/chunks/chunk-FPNWPMHA.js +1 -0
  12. package/dist/cdn/components/chunks/chunk-GMWUHGNI.js +319 -0
  13. package/dist/cdn/components/chunks/{chunk-FQUWHNQT.js → chunk-GXOEPXDW.js} +1 -1
  14. package/dist/cdn/components/chunks/chunk-HXESKTK2.js +1 -0
  15. package/dist/cdn/components/chunks/chunk-JDUWKPHW.js +46 -0
  16. package/dist/cdn/components/chunks/{chunk-D3JJBHXN.js → chunk-JLKCBPD2.js} +2 -2
  17. package/dist/cdn/components/chunks/chunk-M6ZJHL4Q.js +1 -0
  18. package/dist/cdn/components/chunks/{chunk-TN3HGHQO.js → chunk-MDSUMP3O.js} +4 -4
  19. package/dist/cdn/components/chunks/chunk-MSQWOKBB.js +1 -0
  20. package/dist/cdn/components/chunks/{chunk-3UUZM7X2.js → chunk-NPXRQHUN.js} +3 -3
  21. package/dist/cdn/components/chunks/chunk-OB7DEGNX.js +1 -0
  22. package/dist/cdn/components/chunks/{chunk-JANNHW4Q.js → chunk-PADHCLBG.js} +4 -4
  23. package/dist/cdn/components/chunks/chunk-QMXE3KLT.js +1 -0
  24. package/dist/cdn/components/chunks/chunk-QNWKRPOW.js +1 -0
  25. package/dist/cdn/components/chunks/{chunk-KQUUMZ7U.js → chunk-RZF7QQDX.js} +7 -7
  26. package/dist/cdn/components/chunks/chunk-SCAP7J35.js +1 -0
  27. package/dist/cdn/components/chunks/chunk-TISMX7UL.js +1 -0
  28. package/dist/cdn/components/chunks/chunk-TWLI2ZOT.js +1 -0
  29. package/dist/cdn/components/chunks/chunk-W4VCWRY7.js +210 -0
  30. package/dist/cdn/components/chunks/{chunk-SZZRMJ65.js → chunk-WEG3KO6T.js} +3 -3
  31. package/dist/cdn/components/chunks/chunk-WP6ZYBAC.js +1 -0
  32. package/dist/cdn/components/chunks/{chunk-HGX6GPHM.js → chunk-XCBQ4CKH.js} +1 -1
  33. package/dist/cdn/components/chunks/{chunk-3UW2LJ7T.js → chunk-XZ3LFOQP.js} +2 -2
  34. package/dist/cdn/components/eun-alert.js +1 -1
  35. package/dist/cdn/components/eun-animate.js +92 -180
  36. package/dist/cdn/components/eun-breadcrumb.js +4 -4
  37. package/dist/cdn/components/eun-button.js +1 -1
  38. package/dist/cdn/components/eun-calendar.js +188 -115
  39. package/dist/cdn/components/eun-card.js +1 -1
  40. package/dist/cdn/components/eun-carousel.js +36 -28
  41. package/dist/cdn/components/eun-check-card.js +3 -3
  42. package/dist/cdn/components/eun-checkbox-list.js +2 -2
  43. package/dist/cdn/components/eun-checkbox.js +1 -1
  44. package/dist/cdn/components/eun-chip.js +11 -15
  45. package/dist/cdn/components/eun-collapse.js +21 -10
  46. package/dist/cdn/components/eun-color-picker.js +32 -32
  47. package/dist/cdn/components/eun-counter.js +8 -8
  48. package/dist/cdn/components/eun-date-picker.js +83 -79
  49. package/dist/cdn/components/eun-description-list.js +1 -1
  50. package/dist/cdn/components/eun-divider.js +9 -8
  51. package/dist/cdn/components/eun-drawer.js +8 -6
  52. package/dist/cdn/components/eun-dropdown-button.js +1 -1
  53. package/dist/cdn/components/eun-dropdown-item.js +4 -4
  54. package/dist/cdn/components/eun-fab.js +1 -1
  55. package/dist/cdn/components/eun-image-card.js +2 -2
  56. package/dist/cdn/components/eun-image-carousel.js +55 -29
  57. package/dist/cdn/components/eun-infinite-list.js +2 -2
  58. package/dist/cdn/components/eun-input-file.js +3 -3
  59. package/dist/cdn/components/eun-input-phone.js +6 -6
  60. package/dist/cdn/components/eun-input.js +1 -1
  61. package/dist/cdn/components/eun-label.js +1 -1
  62. package/dist/cdn/components/eun-link.js +18 -329
  63. package/dist/cdn/components/eun-loader.js +1 -1
  64. package/dist/cdn/components/eun-modal.js +9 -7
  65. package/dist/cdn/components/eun-nav-menu.js +363 -0
  66. package/dist/cdn/components/eun-pagination.js +4 -4
  67. package/dist/cdn/components/eun-password-strength.js +2 -2
  68. package/dist/cdn/components/eun-progress-bar.js +1 -1
  69. package/dist/cdn/components/eun-radio-card.js +4 -4
  70. package/dist/cdn/components/eun-radio-list.js +1 -1
  71. package/dist/cdn/components/eun-radio.js +1 -1
  72. package/dist/cdn/components/eun-rating.js +9 -9
  73. package/dist/cdn/components/eun-scheduler-event-editor.js +113 -77
  74. package/dist/cdn/components/eun-scheduler-event.js +1 -1
  75. package/dist/cdn/components/eun-scheduler.js +137 -79
  76. package/dist/cdn/components/eun-search.js +6 -6
  77. package/dist/cdn/components/eun-select.js +1 -1
  78. package/dist/cdn/components/eun-sidebar.js +23 -14
  79. package/dist/cdn/components/eun-slider.js +2 -2
  80. package/dist/cdn/components/eun-sliding-card.js +1 -1
  81. package/dist/cdn/components/eun-step.js +2 -2
  82. package/dist/cdn/components/eun-stepper.js +11 -12
  83. package/dist/cdn/components/eun-switch.js +2 -2
  84. package/dist/cdn/components/eun-tab-group.js +1 -1
  85. package/dist/cdn/components/eun-tab-panel.js +1 -1
  86. package/dist/cdn/components/eun-table-action-bar.js +1 -1
  87. package/dist/cdn/components/eun-table.js +13 -10
  88. package/dist/cdn/components/eun-tag.js +1 -1
  89. package/dist/cdn/components/eun-textarea.js +4 -4
  90. package/dist/cdn/components/eun-time-picker.js +28 -25
  91. package/dist/cdn/components/eun-toast.js +8 -8
  92. package/dist/cdn/components/eun-toggle-group.js +8 -2
  93. package/dist/cdn/components/eun-toggle-item.js +8 -2
  94. package/dist/cdn/components/eun-toggle.js +4 -1
  95. package/dist/cdn/components/eun-toolbar.js +114 -36
  96. package/dist/cdn/components/eun-tooltip.js +1 -1
  97. package/dist/cdn/styles/eunomia-themes.css +1 -1
  98. package/dist/cdn/styles/themes/eunomia-theme.css +1 -1
  99. package/dist/cdn/styles/themes/mixins/eunomia-neutrals.mixin.scss +2 -2
  100. package/dist/cdn/styles/themes/prebuilt-themes/eunomia/eunomia.theme.css +1 -1
  101. package/dist/cdn/styles/themes/prebuilt-themes/fire/eunomia-fire.theme.css +1 -1
  102. package/dist/cdn/styles/themes/prebuilt-themes/forest/eunomia-forest.theme.css +1 -1
  103. package/dist/cdn/styles/themes/prebuilt-themes/gold/eunomia-gold.theme.css +1 -1
  104. package/dist/cdn/styles/themes/prebuilt-themes/ocean/eunomia-ocean.theme.css +1 -1
  105. package/dist/cdn/styles/themes/prebuilt-themes/salmon/eunomia-salmon.theme.css +1 -1
  106. package/dist/cdn/styles/themes/prebuilt-themes/violet/eunomia-violet.theme.css +1 -1
  107. package/dist/cdn/styles/tools/mixins/layout/eunomia-grid.mixin.scss +116 -8
  108. package/dist/components/action/button/button.styles.js +2 -2
  109. package/dist/components/action/dropdown-button/dropdown-button.d.ts +4 -0
  110. package/dist/components/action/dropdown-button/dropdown-button.js +1 -0
  111. package/dist/components/action/dropdown-button/dropdown-button.styles.js +5 -4
  112. package/dist/components/action/dropdown-button/dropdown-item.d.ts +1 -0
  113. package/dist/components/action/dropdown-button/dropdown-item.js +1 -0
  114. package/dist/components/action/dropdown-button/dropdown-item.styles.js +4 -4
  115. package/dist/components/action/link/link.d.ts +2 -1
  116. package/dist/components/action/link/link.js +2 -1
  117. package/dist/components/action/link/link.styles.d.ts +40 -1
  118. package/dist/components/action/link/link.styles.js +83 -60
  119. package/dist/components/action/shared-styles/button-palette.styles.js +1 -1
  120. package/dist/components/action/toggle/toggle-group.d.ts +1 -0
  121. package/dist/components/action/toggle/toggle-group.js +1 -0
  122. package/dist/components/action/toggle/toggle-group.styles.d.ts +1 -0
  123. package/dist/components/action/toggle/toggle-group.styles.js +9 -2
  124. package/dist/components/action/toggle/toggle-item.styles.js +8 -2
  125. package/dist/components/action/toggle/toggle.d.ts +1 -0
  126. package/dist/components/action/toggle/toggle.js +1 -0
  127. package/dist/components/action/toggle/toggle.styles.d.ts +1 -0
  128. package/dist/components/action/toggle/toggle.styles.js +5 -1
  129. package/dist/components/alert/drawer/drawer.d.ts +14 -13
  130. package/dist/components/alert/drawer/drawer.js +20 -28
  131. package/dist/components/alert/modal/modal.d.ts +14 -13
  132. package/dist/components/alert/modal/modal.js +20 -28
  133. package/dist/components/alert/modal/modal.styles.js +1 -1
  134. package/dist/components/alert/toast/toast.d.ts +5 -5
  135. package/dist/components/alert/toast/toast.js +9 -10
  136. package/dist/components/alert/toast/toast.styles.js +3 -3
  137. package/dist/components/content/card/image-card.styles.js +1 -1
  138. package/dist/components/content/chip/chip.d.ts +7 -9
  139. package/dist/components/content/chip/chip.js +11 -14
  140. package/dist/components/content/chip/chip.styles.js +1 -5
  141. package/dist/components/content/collapse/collapse.d.ts +5 -0
  142. package/dist/components/content/collapse/collapse.js +7 -0
  143. package/dist/components/content/collapse/collapse.styles.d.ts +3 -0
  144. package/dist/components/content/collapse/collapse.styles.js +13 -1
  145. package/dist/components/content/description-list/description-list.styles.js +1 -1
  146. package/dist/components/content/image-carousel/image-carousel.d.ts +60 -13
  147. package/dist/components/content/image-carousel/image-carousel.js +100 -22
  148. package/dist/components/content/image-carousel/image-carousel.styles.js +32 -6
  149. package/dist/components/content/password-strength/password-strength.styles.js +1 -1
  150. package/dist/components/content/progress-bar/progress-bar.styles.js +1 -1
  151. package/dist/components/content/shared-styles/card-link.styles.js +1 -1
  152. package/dist/components/content/shared-styles/tone-surface.styles.js +1 -3
  153. package/dist/components/form/checkbox/check-card.styles.js +2 -2
  154. package/dist/components/form/checkbox/checkbox-list.d.ts +3 -1
  155. package/dist/components/form/checkbox/checkbox-list.js +3 -1
  156. package/dist/components/form/checkbox/checkbox.styles.js +1 -1
  157. package/dist/components/form/color-picker/color-picker.d.ts +28 -3
  158. package/dist/components/form/color-picker/color-picker.js +53 -7
  159. package/dist/components/form/counter/counter.js +1 -1
  160. package/dist/components/form/counter/counter.styles.js +2 -2
  161. package/dist/components/form/date-picker/date-picker-day-grid.styles.js +1 -1
  162. package/dist/components/form/date-picker/date-picker-month-grid.js +1 -1
  163. package/dist/components/form/date-picker/date-picker.d.ts +50 -13
  164. package/dist/components/form/date-picker/date-picker.js +178 -43
  165. package/dist/components/form/input/input.js +1 -4
  166. package/dist/components/form/input-file/input-file.styles.js +2 -2
  167. package/dist/components/form/input-phone/input-phone.js +4 -3
  168. package/dist/components/form/label/label.styles.js +1 -1
  169. package/dist/components/form/radio/radio-card.styles.js +2 -2
  170. package/dist/components/form/radio/radio.styles.js +1 -1
  171. package/dist/components/form/rating/rating.js +3 -5
  172. package/dist/components/form/rating/rating.styles.js +2 -2
  173. package/dist/components/form/search/search.d.ts +1 -7
  174. package/dist/components/form/search/search.js +2 -12
  175. package/dist/components/form/shared-styles/field.styles.js +2 -2
  176. package/dist/components/form/slider/slider.styles.js +1 -1
  177. package/dist/components/form/switch/switch.styles.js +1 -1
  178. package/dist/components/form/textarea/textarea.js +1 -5
  179. package/dist/components/form/textarea/textarea.styles.js +2 -2
  180. package/dist/components/form/time-picker/time-picker-columns.d.ts +4 -1
  181. package/dist/components/form/time-picker/time-picker-columns.js +64 -15
  182. package/dist/components/form/time-picker/time-picker-columns.styles.js +5 -1
  183. package/dist/components/form/time-picker/time-picker-list.d.ts +4 -1
  184. package/dist/components/form/time-picker/time-picker-list.js +15 -8
  185. package/dist/components/form/time-picker/time-picker.d.ts +11 -2
  186. package/dist/components/form/time-picker/time-picker.js +22 -8
  187. package/dist/components/layout/animate/animate.d.ts +35 -17
  188. package/dist/components/layout/animate/animate.js +27 -14
  189. package/dist/components/layout/animate/animate.styles.d.ts +2 -1
  190. package/dist/components/layout/animate/animate.styles.js +107 -179
  191. package/dist/components/layout/divider/divider.d.ts +1 -0
  192. package/dist/components/layout/divider/divider.js +2 -1
  193. package/dist/components/layout/divider/divider.styles.js +7 -6
  194. package/dist/components/layout/infinite-list/infinite-list.styles.js +1 -1
  195. package/dist/components/navigation/breadcrumb/breadcrumb.styles.js +3 -3
  196. package/dist/components/navigation/carousel/carousel.d.ts +23 -14
  197. package/dist/components/navigation/carousel/carousel.js +39 -27
  198. package/dist/components/navigation/carousel/carousel.styles.js +16 -8
  199. package/dist/components/navigation/nav-menu/nav-menu.d.ts +201 -0
  200. package/dist/components/navigation/nav-menu/nav-menu.js +673 -0
  201. package/dist/components/navigation/nav-menu/nav-menu.styles.d.ts +1 -0
  202. package/dist/components/navigation/nav-menu/nav-menu.styles.js +352 -0
  203. package/dist/components/navigation/pagination/pagination.d.ts +3 -0
  204. package/dist/components/navigation/pagination/pagination.styles.js +2 -2
  205. package/dist/components/navigation/sidebar/sidebar.d.ts +8 -10
  206. package/dist/components/navigation/sidebar/sidebar.js +12 -15
  207. package/dist/components/navigation/sidebar/sidebar.styles.js +13 -4
  208. package/dist/components/navigation/stepper/step.styles.js +2 -2
  209. package/dist/components/navigation/stepper/stepper.d.ts +24 -13
  210. package/dist/components/navigation/stepper/stepper.js +36 -23
  211. package/dist/components/navigation/stepper/stepper.styles.js +2 -2
  212. package/dist/components/navigation/tabs/tab-group/tab-group.js +1 -1
  213. package/dist/components/navigation/tabs/tab-panel/tab-panel.styles.js +1 -1
  214. package/dist/components/navigation/toolbar/toolbar.d.ts +121 -20
  215. package/dist/components/navigation/toolbar/toolbar.js +176 -45
  216. package/dist/components/navigation/toolbar/toolbar.styles.js +113 -28
  217. package/dist/events/editor-state-change.event.d.ts +28 -0
  218. package/dist/events/editor-state-change.event.js +22 -0
  219. package/dist/events/event-cancel.event.d.ts +20 -0
  220. package/dist/events/event-cancel.event.js +17 -0
  221. package/dist/events/period-change.event.d.ts +14 -6
  222. package/dist/events/period-change.event.js +9 -6
  223. package/dist/features/scheduler/calendar/calendar.d.ts +52 -20
  224. package/dist/features/scheduler/calendar/calendar.js +84 -36
  225. package/dist/features/scheduler/calendar/calendar.styles.js +5 -2
  226. package/dist/features/scheduler/scheduler/scheduler.d.ts +69 -4
  227. package/dist/features/scheduler/scheduler/scheduler.js +172 -47
  228. package/dist/features/scheduler/scheduler/scheduler.styles.js +6 -0
  229. package/dist/features/scheduler/scheduler-event/scheduler-event.d.ts +18 -20
  230. package/dist/features/scheduler/scheduler-event/scheduler-event.js +29 -38
  231. package/dist/features/scheduler/scheduler-event/scheduler-event.styles.js +2 -2
  232. package/dist/features/scheduler/scheduler-event-editor/scheduler-event-editor.d.ts +102 -18
  233. package/dist/features/scheduler/scheduler-event-editor/scheduler-event-editor.js +249 -112
  234. package/dist/features/scheduler/scheduler-event-editor/scheduler-event-editor.styles.js +11 -1
  235. package/dist/features/scheduler/shared/scheduler-event-popover.d.ts +9 -1
  236. package/dist/features/scheduler/shared/scheduler-event-popover.js +77 -42
  237. package/dist/features/scheduler/shared/scheduler-event-popover.styles.js +14 -3
  238. package/dist/features/scheduler/shared/scheduler-hour-grid.d.ts +3 -2
  239. package/dist/features/scheduler/shared/scheduler-hour-grid.js +53 -46
  240. package/dist/features/scheduler/shared/scheduler-hour-grid.styles.js +13 -7
  241. package/dist/features/scheduler/shared/scheduler-month-view.js +1 -1
  242. package/dist/features/scheduler/shared/scheduler-month-view.styles.js +13 -7
  243. package/dist/features/scheduler/shared/scheduler-year-view.d.ts +6 -5
  244. package/dist/features/scheduler/shared/scheduler-year-view.js +11 -7
  245. package/dist/features/scheduler/shared/scheduler-year-view.styles.js +57 -3
  246. package/dist/features/scheduler/shared/scheduler.types.d.ts +5 -9
  247. package/dist/features/scheduler/shared/scheduler.utils.d.ts +61 -0
  248. package/dist/features/scheduler/shared/scheduler.utils.js +78 -4
  249. package/dist/features/table/table/table-native.styles.js +8 -4
  250. package/dist/features/table/table/table.d.ts +2 -1
  251. package/dist/features/table/table/table.js +2 -1
  252. package/dist/features/table/table/table.styles.js +6 -4
  253. package/dist/i18n/en.d.ts +17 -0
  254. package/dist/i18n/en.js +17 -0
  255. package/dist/i18n/fr.js +17 -0
  256. package/dist/index.d.ts +6 -0
  257. package/dist/index.js +4 -0
  258. package/dist/jsx.d.ts +48 -6
  259. package/dist/mixins/anchor-position.mixin.d.ts +17 -0
  260. package/dist/mixins/anchor-position.mixin.js +45 -7
  261. package/dist/mixins/button.mixin.js +2 -1
  262. package/dist/mixins/check.mixin.js +14 -5
  263. package/dist/mixins/dialog-surface.mixin.d.ts +1 -1
  264. package/dist/mixins/dialog-surface.mixin.js +5 -5
  265. package/dist/mixins/form.mixin.js +33 -13
  266. package/dist/mixins/localizable.mixin.d.ts +1 -0
  267. package/dist/mixins/localizable.mixin.js +9 -2
  268. package/dist/mixins/radio.mixin.js +14 -5
  269. package/dist/mixins/validators.mixin.js +4 -3
  270. package/dist/react.d.ts +59 -0
  271. package/dist/react.js +42 -0
  272. package/dist/ssr/animate-ssr.css +35 -0
  273. package/dist/ssr/breadcrumb-ssr.css +3 -3
  274. package/dist/ssr/button-ssr.css +8 -2
  275. package/dist/ssr/card-ssr.css +1 -1
  276. package/dist/ssr/carousel-ssr.css +15 -4
  277. package/dist/ssr/chip-ssr.css +3 -3
  278. package/dist/ssr/collapse-ssr.css +2 -2
  279. package/dist/ssr/description-list-ssr.css +1 -1
  280. package/dist/ssr/divider-ssr.css +23 -0
  281. package/dist/ssr/field-ssr.css +245 -42
  282. package/dist/ssr/image-carousel-ssr.css +2 -4
  283. package/dist/ssr/links-ssr.css +17 -3
  284. package/dist/ssr/nav-menu-ssr.css +82 -0
  285. package/dist/ssr/overlay-ssr.css +4 -0
  286. package/dist/ssr/scheduler-ssr.css +182 -0
  287. package/dist/ssr/stepper-ssr.css +136 -0
  288. package/dist/ssr/table-ssr.css +7 -4
  289. package/dist/ssr/tag-ssr.css +1 -1
  290. package/dist/ssr/toolbar-ssr.css +7 -5
  291. package/dist/utils/css-length.utils.d.ts +14 -0
  292. package/dist/utils/css-length.utils.js +32 -0
  293. package/dist/utils/form-validation.utils.d.ts +36 -0
  294. package/dist/utils/form-validation.utils.js +113 -0
  295. package/dist/utils/implicit-submission.utils.js +2 -14
  296. package/dist/utils/interactive-content.utils.d.ts +10 -0
  297. package/dist/utils/interactive-content.utils.js +43 -0
  298. package/dist/utils/popover.utils.js +3 -2
  299. package/dist/utils/scroll-lock.utils.d.ts +9 -1
  300. package/dist/utils/scroll-lock.utils.js +21 -2
  301. package/dist/utils/theme-generator.utils.d.ts +1 -0
  302. package/dist/utils/theme-generator.utils.js +23 -10
  303. package/dist/utils/validity.utils.d.ts +18 -4
  304. package/dist/utils/validity.utils.js +74 -4
  305. package/package.json +34 -3
  306. package/styles/themes/mixins/eunomia-neutrals.mixin.scss +2 -2
  307. package/styles/tools/mixins/layout/eunomia-grid.mixin.scss +116 -8
  308. package/dist/cdn/components/chunks/chunk-4DRU3IYJ.js +0 -1
  309. package/dist/cdn/components/chunks/chunk-647ISUF4.js +0 -1
  310. package/dist/cdn/components/chunks/chunk-6TIEBY34.js +0 -1
  311. package/dist/cdn/components/chunks/chunk-E6UOI36Q.js +0 -1
  312. package/dist/cdn/components/chunks/chunk-GNAUNTS5.js +0 -1
  313. package/dist/cdn/components/chunks/chunk-IJJ67C66.js +0 -1
  314. package/dist/cdn/components/chunks/chunk-J7ETIRSK.js +0 -1
  315. package/dist/cdn/components/chunks/chunk-JGV7LHEI.js +0 -1
  316. package/dist/cdn/components/chunks/chunk-L74LXUGL.js +0 -1
  317. package/dist/cdn/components/chunks/chunk-MY6ORZJR.js +0 -46
  318. package/dist/cdn/components/chunks/chunk-QWTFP56P.js +0 -1
  319. package/dist/cdn/components/chunks/chunk-SFX2LQ4K.js +0 -205
  320. package/dist/cdn/components/chunks/chunk-WW4BTWMH.js +0 -1
  321. package/dist/utils/boolean.utils.d.ts +0 -14
  322. package/dist/utils/boolean.utils.js +0 -20
@@ -11,7 +11,7 @@ import { DialogSurfaceMixin } from "../../../mixins/dialog-surface.mixin.js";
11
11
  import { EUNOMIA_BREAKPOINTS } from "../../../breakpoints.js";
12
12
  import { toolbarStyles } from "./toolbar.styles.js";
13
13
  import { LocalizableMixin } from "../../../mixins/localizable.mixin.js";
14
- import { defaultTrueConverter } from "../../../utils/boolean.utils.js";
14
+ import { isScrollLocked } from "../../../utils/scroll-lock.utils.js";
15
15
  /**
16
16
  * Tag name of the toolbar component.
17
17
  */
@@ -55,6 +55,7 @@ export const EunomiaToolbarTagName = "eun-toolbar";
55
55
  * everything behind it, including the logo and any other bar content;
56
56
  * the burger is the only thing that stays visible in front of it.
57
57
  *
58
+ * @slot [burger-icon] - Replaces both burger icons with a single piece of content, kept in place while the panel opens and closes, so it can animate between the two states itself, styled from the host's own open attribute (eun-toolbar[open]). Takes priority over menu-icon and close-icon
58
59
  * @slot [menu-icon] - Replaces the burger's default open icon (an `eun-icon name="menu"`) with any content, shown while the panel is closed. Useful wherever `eun-icon`'s own dynamic SVG resolution doesn't fit, e.g. some bundler setups
59
60
  * @slot [close-icon] - Replaces the burger's default close icon (an `eun-icon name="close"`) with any content, shown while the panel is open. See `menu-icon` above
60
61
  * @slot start - Left-side content, such as the logo, as a link of your own wrapping an image
@@ -63,6 +64,7 @@ export const EunomiaToolbarTagName = "eun-toolbar";
63
64
  * @slot [default] - The mobile slide-in panel's content, opened by the burger button below the mobile breakpoint. Entirely up to the consumer ; never rendered anywhere else
64
65
  * @slot skip-links - Custom skip to X links, such as skip to navigation, main content, or footer, replacing the single default skip link built from skipLinkTarget and skipLinkLabel. Accepts plain `a` elements or `eun-link`, styled the same either way, separated by a thin divider drawn between them rather than on either link itself, so it never ends up inside either one's own focus ring. Hidden as a group, revealed as a small panel opening from the top-start corner as soon as focus lands on any of them, staying open while Tab cycles between them. Clicking any of them, default or slotted, also focuses its `href` target directly, on top of the native anchor jump, since that native jump alone doesn't reliably move focus across browsers
65
66
  * @prop {'sticky' | 'fixed' | 'static'} [position='sticky'] - How the toolbar is positioned relative to the page
67
+ * @prop {'centered' | 'between'} [layout='centered'] - How start, center, and end share the bar. centered keeps center truly centered on the bar whatever the widths of start and end, while between spaces the three out evenly, like a flexbox space-between
66
68
  * @prop {number} [mobileBreakpoint=768] - The viewport width in pixels below which the burger button and its sliding panel become available
67
69
  * @attr {number} [mobile-breakpoint=768] - The viewport width in pixels below which the burger button and its sliding panel become available
68
70
  * @prop {boolean} [open=false] - Whether the mobile menu panel is open
@@ -72,8 +74,8 @@ export const EunomiaToolbarTagName = "eun-toolbar";
72
74
  * @attr {string} panel-size - A custom open size for the mobile panel
73
75
  * @prop {string} mobileHide - The bar slots hidden below the mobile breakpoint, as a space-separated list of start, center and end, such as "center end" when their content is repeated in the panel. Applied by toolbar-ssr.css before the upgrade too
74
76
  * @attr {string} mobile-hide - The bar slots hidden below the mobile breakpoint, as a space-separated list of start, center and end
75
- * @prop {boolean} [closeOnBackdrop=true] - Whether clicking outside the mobile panel closes it
76
- * @attr {boolean} [close-on-backdrop=true] - Whether clicking outside the mobile panel closes it
77
+ * @prop {boolean} [closeOnBackdrop=false] - Whether clicking outside the mobile panel closes it
78
+ * @attr {boolean} [close-on-backdrop=false] - Whether clicking outside the mobile panel closes it
77
79
  * @prop {string} [menuOpenLabel] - The accessible label of the burger button while the panel is closed. Defaults to the localized string for the current locale (English: "Open menu")
78
80
  * @attr {string} [menu-open-label] - The accessible label of the burger button while the panel is closed. Defaults to the localized string for the current locale (English: "Open menu")
79
81
  * @prop {string} [menuCloseLabel] - The accessible label of the burger button while the panel is open. Defaults to the localized string for the current locale (English: "Close menu")
@@ -94,8 +96,10 @@ export const EunomiaToolbarTagName = "eun-toolbar";
94
96
  * @attr {string} scroll-target - A CSS selector for a custom scroll container to track instead of the page
95
97
  * @prop {boolean} [adaptiveTheme=false] - Enables automatic theme switching driven by marked page sections scrolling underneath the bar
96
98
  * @attr {boolean} [adaptive-theme=false] - Enables automatic theme switching driven by marked page sections
97
- * @prop {string} [adaptiveThemeSelector='[data-toolbar-theme]'] - A selector for the marker elements adaptiveTheme observes. Each should carry a dark or light marker attribute
98
- * @attr {string} [adaptive-theme-selector='[data-toolbar-theme]'] - A selector for the marker elements adaptive-theme observes
99
+ * @prop {string} [adaptiveThemeAttribute='data-toolbar-theme'] - The marker attribute adaptiveTheme reads dark or light from, for a page that already marks its sections with an attribute of its own
100
+ * @attr {string} [adaptive-theme-attribute='data-toolbar-theme'] - The marker attribute adaptive-theme reads dark or light from
101
+ * @prop {string} adaptiveThemeSelector - A selector for the marker elements adaptiveTheme observes, defaulting to every element carrying adaptiveThemeAttribute. Each should carry that attribute set to dark or light
102
+ * @attr {string} adaptive-theme-selector - A selector for the marker elements adaptive-theme observes, defaulting to every element carrying adaptive-theme-attribute
99
103
  * @prop {'light' | 'dark'} [theme='light'] - The toolbar's current color scheme. A plain manual switch when adaptiveTheme is off, and driven by the marker observer, though still settable to seed the initial value, when it's on
100
104
  * @prop {'light' | 'dark'} [defaultTheme='light'] - The fallback theme used while adaptiveTheme is on and no marked section currently intersects the bar
101
105
  * @attr {'light' | 'dark'} [default-theme='light'] - The fallback theme used while adaptive-theme is on and no marked section currently intersects the bar
@@ -103,7 +107,7 @@ export const EunomiaToolbarTagName = "eun-toolbar";
103
107
  * @attr {string} skip-link-target - The id of the page's main-content landmark
104
108
  * @prop {string} [skipLinkLabel] - The text of the default skip link built from skipLinkTarget. Defaults to the localized string for the current locale (English: "Skip to main content")
105
109
  * @attr {string} [skip-link-label] - The text of the default skip link built from skip-link-target. Defaults to the localized string for the current locale (English: "Skip to main content")
106
- * @fires {ChangeEvent} eunchange - Fired whenever open, collapsed, or, under adaptiveTheme, theme changes
110
+ * @fires {ChangeEvent} eunchange - Fired once whenever open, collapsed, or, under adaptiveTheme, theme changes. Its value holds the property that changed and the current open, collapsed, and theme. On close, it fires once the panel has finished closing and page scroll is released
107
111
  * @cssprop [--toolbar-height] - Sets the expanded height of the bar
108
112
  * @cssprop [--toolbar-height-collapsed] - Sets the collapsed height of the bar, for collapseOnScroll only
109
113
  * @cssprop [--toolbar-padding] - Sets the padding of the bar
@@ -113,7 +117,10 @@ export const EunomiaToolbarTagName = "eun-toolbar";
113
117
  * @cssprop [--toolbar-gap-start] - Sets the gap between items inside the start slot, falling back to --toolbar-gap
114
118
  * @cssprop [--toolbar-gap-center] - Sets the gap between items inside the center slot, falling back to --toolbar-gap
115
119
  * @cssprop [--toolbar-gap-end] - Sets the gap between items inside the end slot, falling back to --toolbar-gap
120
+ * @cssprop [--toolbar-columns] - Sets the grid columns of start, center, and end, overriding the ones set by layout
116
121
  * @cssprop [--toolbar-background] - Sets the background color, overriding both light and dark variants below
122
+ * @cssprop [--toolbar-background-at-top] - Sets the background of the bar while transparent-at-top applies, transparent by default
123
+ * @cssprop [--toolbar-backdrop-blur] - Sets a backdrop blur radius for the bar itself, for a frosted glass effect behind a translucent background
117
124
  * @cssprop [--toolbar-color] - Sets the text color, overriding both light and dark variants below
118
125
  * @cssprop [--toolbar-background-light] - Sets the background color for the light theme
119
126
  * @cssprop [--toolbar-color-light] - Sets the text color for the light theme
@@ -123,6 +130,8 @@ export const EunomiaToolbarTagName = "eun-toolbar";
123
130
  * @cssprop [--toolbar-shadow] - Sets the shadow of the bar
124
131
  * @cssprop [--toolbar-z-index] - Sets the stacking order of the bar
125
132
  * @cssprop [--toolbar-transition-duration] - Sets the duration of the collapse, transparency, theme, and panel transitions
133
+ * @cssprop [--toolbar-color-transition-duration] - Sets the duration of the background, text color, border, and shadow transitions of the bar, falling back to --toolbar-transition-duration
134
+ * @cssprop [--toolbar-transition-easing] - Sets the timing function of every transition of the toolbar
126
135
  * @cssprop [--toolbar-panel-size] - Sets a custom open size for the mobile panel, also settable through the panel-size attribute
127
136
  * @cssprop [--toolbar-panel-background] - Sets the background of the mobile panel, defaulting to a translucent mix of the bar's own background
128
137
  * @cssprop [--toolbar-panel-color] - Sets the text color of the mobile panel
@@ -134,13 +143,24 @@ export const EunomiaToolbarTagName = "eun-toolbar";
134
143
  * @cssprop [--toolbar-burger-padding] - Sets the padding around the burger button, defaulting to 0 on the block axis and --toolbar-panel-padding on the inline axis
135
144
  * @cssprop [--toolbar-burger-padding-block] - Sets the vertical padding, as one length applied to both sides. Ignored when --toolbar-burger-padding is set
136
145
  * @cssprop [--toolbar-burger-padding-inline] - Sets the horizontal padding, as one length applied to both sides. Ignored when --toolbar-burger-padding is set
146
+ * @cssprop [--toolbar-burger-color] - Sets the color of the burger button, defaulting to the bar's text color, or the panel's once open
147
+ * @cssprop [--toolbar-burger-background-hover] - Sets the background of the burger button on hover, defaulting to a light mix of its own color
148
+ * @cssprop [--toolbar-burger-background-active] - Sets the background of the burger button while pressed, defaulting to a light mix of its own color
137
149
  * @cssprop [--toolbar-panel-gap] - Sets the gap inside the mobile panel
138
150
  * @cssprop [--toolbar-panel-backdrop-blur] - Sets a backdrop blur radius for the mobile panel
139
151
  * @cssprop [--toolbar-skip-links-height] - Sets the height of the skip-links bar
140
152
  * @cssprop [--toolbar-skip-links-background] - Sets the background of the skip-links bar, defaulting to a darker mix of the bar's background, or of primary-600 in the light theme without --toolbar-background
141
153
  * @cssprop [--toolbar-skip-links-color] - Sets the text color of the skip-links bar
154
+ * @cssprop [--toolbar-skip-links-focus-outline-color] - Sets the keyboard focus outline color of the skip links, defaulting to their text color
155
+ * @cssprop [--toolbar-skip-links-background-focus] - Sets the background color of a skip link on keyboard focus
142
156
  * @cssprop [--toolbar-skip-links-separator-color] - Sets the color of the divider drawn between skip links
157
+ * @cssprop [--toolbar-skip-links-separator] - Replaces the thin divider drawn between skip links with a glyph, as a CSS content string such as "/"
143
158
  * @cssprop [--toolbar-skip-links-gap] - Sets the gap between skip links, with the divider centered in it
159
+ * @cssprop [--toolbar-skip-links-padding-inline] - Sets the horizontal padding of the skip-links bar
160
+ * @cssprop [--toolbar-skip-links-font-size] - Sets the font size of the skip links
161
+ * @cssprop [--toolbar-skip-link-padding] - Sets the padding of each skip link
162
+ * @cssprop [--toolbar-focus-outline-color] - Sets the keyboard focus outline color of the links in the bar
163
+ * @cssprop [--toolbar-link-background-focus] - Sets the background color of an eun-link in the bar on keyboard focus
144
164
  * @element eun-toolbar
145
165
  */
146
166
  let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(LocalizableMixin(LitElement)) {
@@ -151,6 +171,13 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
151
171
  * @default sticky
152
172
  */
153
173
  this.position = "sticky";
174
+ /**
175
+ * How start, center, and end share the bar. Reflected, since the layout
176
+ * is pure CSS on the attribute, also matched by `toolbar-ssr.css` before
177
+ * upgrade.
178
+ * @default centered
179
+ */
180
+ this.layout = "centered";
154
181
  /**
155
182
  * Viewport width (px) below which the burger button and its sliding
156
183
  * panel become available.
@@ -169,9 +196,9 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
169
196
  this.panelDirection = "top";
170
197
  /**
171
198
  * Whether clicking outside the mobile panel closes it.
172
- * @default true
199
+ * @default false
173
200
  */
174
- this.closeOnBackdrop = true;
201
+ this.closeOnBackdrop = false;
175
202
  /**
176
203
  * Enables the scroll-triggered collapse mode.
177
204
  * @default false
@@ -207,11 +234,10 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
207
234
  */
208
235
  this.adaptiveTheme = false;
209
236
  /**
210
- * Selector for the marker elements `adaptiveTheme` observes ; each should
211
- * carry a `data-toolbar-theme="dark"` or `"light"` attribute.
212
- * @default [data-toolbar-theme]
237
+ * The marker attribute `adaptiveTheme` reads `"dark"` or `"light"` from.
238
+ * @default data-toolbar-theme
213
239
  */
214
- this.adaptiveThemeSelector = "[data-toolbar-theme]";
240
+ this.adaptiveThemeAttribute = "data-toolbar-theme";
215
241
  /**
216
242
  * The toolbar's current color scheme. A plain manual switch when
217
243
  * `adaptiveTheme` is off ; driven by the marker observer (still settable
@@ -260,6 +286,11 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
260
286
  * @internal
261
287
  */
262
288
  this.intersectingThemeEls = new Set();
289
+ /**
290
+ * Marker elements the adaptive-theme observer currently observes.
291
+ * @internal
292
+ */
293
+ this.observedThemeEls = new Set();
263
294
  /**
264
295
  * Reacts to the viewport crossing `mobileBreakpoint`. Force-closes the
265
296
  * panel when leaving mobile while it's open — the panel itself is about
@@ -288,6 +319,20 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
288
319
  this.updateScrollState();
289
320
  });
290
321
  };
322
+ /**
323
+ * Coalesces document mutations into one marker sync per frame, since a
324
+ * client-side navigation swaps many nodes at once.
325
+ * @private
326
+ */
327
+ this.handleThemeMutation = () => {
328
+ if (this.themeMarkerRafId !== undefined) {
329
+ return;
330
+ }
331
+ this.themeMarkerRafId = requestAnimationFrame(() => {
332
+ this.themeMarkerRafId = undefined;
333
+ this.syncThemeMarkers();
334
+ });
335
+ };
291
336
  /**
292
337
  * Tracks which marker elements currently cross the trigger line and
293
338
  * resolves `theme` from them.
@@ -330,12 +375,12 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
330
375
  }
331
376
  },
332
377
  });
333
- this.dispatchEvent(new ChangeEvent());
378
+ this.dispatchChange("open");
334
379
  void this.updateComplete.then(() => this.focusInitialElement());
335
380
  return;
336
381
  }
337
382
  this.closeDialogSurface(this.burgerEl);
338
- this.dispatchEvent(new ChangeEvent());
383
+ this.dispatchChange("open");
339
384
  };
340
385
  /**
341
386
  * Explicitly focuses a skip link's target on click, on top of (not
@@ -385,7 +430,7 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
385
430
  this.mediaQueryList?.removeEventListener("change", this.handleMediaChange);
386
431
  this.detachScrollListener();
387
432
  this.teardownAdaptiveThemeObserver();
388
- this.teardownDialogSurface(this.open);
433
+ this.teardownDialogSurface();
389
434
  super.disconnectedCallback();
390
435
  }
391
436
  /**
@@ -440,8 +485,9 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
440
485
  * The `updated()` slice handling `adaptiveTheme` : sets up or tears down
441
486
  * the marker observer when the mode itself toggles, and re-anchors it
442
487
  * when anything its setup depends on changes while already on
443
- * (`adaptiveThemeSelector`, `collapsed` — the bar height the trigger
444
- * line is measured from — or `scrollTarget` — the observer's root).
488
+ * (`adaptiveThemeSelector`, `adaptiveThemeAttribute`, `collapsed` — the
489
+ * bar height the trigger line is measured from — or `scrollTarget` — the
490
+ * observer's root).
445
491
  *
446
492
  * @param changed the changed properties.
447
493
  * @private
@@ -462,6 +508,7 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
462
508
  }
463
509
  if (this.adaptiveTheme &&
464
510
  (changed.has("adaptiveThemeSelector") ||
511
+ changed.has("adaptiveThemeAttribute") ||
465
512
  changed.has("collapsed") ||
466
513
  changed.has("scrollTarget"))) {
467
514
  this.setupAdaptiveThemeObserver();
@@ -486,21 +533,23 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
486
533
  this.open = !this.open;
487
534
  }
488
535
  /**
489
- * Re-queries `adaptiveThemeSelector` and re-observes every match — for
490
- * pages that inject newly-marked sections after the toolbar has already
491
- * connected (e.g. client-side-rendered content), which the observer has
492
- * no other way of discovering on its own.
536
+ * Re-queries `adaptiveThemeSelector` and syncs the observed markers with
537
+ * the current matches. Marker sections added, removed, or re-marked
538
+ * through their `adaptiveThemeAttribute` are already picked up on their
539
+ * own ; this is left for a change the document watch can't see, such as
540
+ * an element starting to match a custom `adaptiveThemeSelector` through
541
+ * a class.
493
542
  */
494
543
  refreshAdaptiveTheme() {
495
- if (!this.themeObserver) {
496
- return;
497
- }
498
- this.themeObserver.disconnect();
499
- this.intersectingThemeEls.clear();
500
- document
501
- .querySelectorAll(this.adaptiveThemeSelector)
502
- .forEach((el) => this.themeObserver?.observe(el));
503
- this.resolveAdaptiveTheme();
544
+ this.syncThemeMarkers();
545
+ }
546
+ /**
547
+ * The selector matching the marker elements, `adaptiveThemeSelector`
548
+ * when set, every element carrying `adaptiveThemeAttribute` otherwise.
549
+ * @private
550
+ */
551
+ get themeMarkerSelector() {
552
+ return this.adaptiveThemeSelector ?? `[${this.adaptiveThemeAttribute}]`;
504
553
  }
505
554
  /**
506
555
  * (Re)builds the `mobile` matchMedia listener for the current
@@ -603,10 +652,17 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
603
652
  }
604
653
  /**
605
654
  * Recomputes `collapsed`/`atTop` from the current scroll position,
606
- * dispatching `eunchange` for a genuine `collapsed` transition.
655
+ * dispatching `eunchange` for a genuine `collapsed` transition. Skipped
656
+ * while page scroll is locked (the mobile panel, or any other overlay, is
657
+ * open) : the pinned `<body>` makes `window.scrollY` read `0`, which would
658
+ * otherwise expand the bar and fire `eunchange` for a scroll that never
659
+ * happened. The real position comes back with the unlock.
607
660
  * @private
608
661
  */
609
662
  updateScrollState() {
663
+ if (this.scrollTargetEl === window && isScrollLocked()) {
664
+ return;
665
+ }
610
666
  const scrollY = this.currentScrollY();
611
667
  if (this.collapseOnScroll) {
612
668
  this.setCollapsed(scrollY > this.collapseThreshold);
@@ -627,7 +683,7 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
627
683
  return;
628
684
  }
629
685
  this.collapsed = collapsed;
630
- this.dispatchEvent(new ChangeEvent());
686
+ this.dispatchChange("collapsed");
631
687
  }
632
688
  /**
633
689
  * Sets `theme`, dispatching `eunchange` only for a genuine transition.
@@ -640,7 +696,22 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
640
696
  return;
641
697
  }
642
698
  this.theme = theme;
643
- this.dispatchEvent(new ChangeEvent());
699
+ this.dispatchChange("theme");
700
+ }
701
+ /**
702
+ * Dispatches `eunchange` for `property`, with the toolbar's current state
703
+ * as its value.
704
+ *
705
+ * @param property the property that just changed.
706
+ * @private
707
+ */
708
+ dispatchChange(property) {
709
+ this.dispatchEvent(new ChangeEvent({
710
+ property,
711
+ open: this.open,
712
+ collapsed: this.collapsed,
713
+ theme: this.theme,
714
+ }));
644
715
  }
645
716
  /**
646
717
  * The bar's current live height, used to anchor the adaptive-theme
@@ -669,20 +740,67 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
669
740
  root: this.resolveIntersectionRoot(),
670
741
  rootMargin: `-${barHeight}px 0px -85% 0px`,
671
742
  });
672
- document
673
- .querySelectorAll(this.adaptiveThemeSelector)
674
- .forEach((el) => this.themeObserver?.observe(el));
743
+ document.querySelectorAll(this.themeMarkerSelector).forEach((el) => {
744
+ this.themeObserver?.observe(el);
745
+ this.observedThemeEls.add(el);
746
+ });
747
+ this.themeMarkerObserver = new MutationObserver(this.handleThemeMutation);
748
+ this.themeMarkerObserver.observe(document.documentElement, {
749
+ childList: true,
750
+ subtree: true,
751
+ attributes: true,
752
+ attributeFilter: [this.adaptiveThemeAttribute],
753
+ });
675
754
  this.resolveAdaptiveTheme();
676
755
  }
677
756
  /**
678
- * Disconnects and clears the adaptive-theme observer, if any.
757
+ * Disconnects and clears the adaptive-theme observers, if any.
679
758
  * @private
680
759
  */
681
760
  teardownAdaptiveThemeObserver() {
682
761
  this.themeObserver?.disconnect();
683
762
  this.themeObserver = undefined;
763
+ this.themeMarkerObserver?.disconnect();
764
+ this.themeMarkerObserver = undefined;
765
+ if (this.themeMarkerRafId !== undefined) {
766
+ cancelAnimationFrame(this.themeMarkerRafId);
767
+ this.themeMarkerRafId = undefined;
768
+ }
769
+ this.observedThemeEls.clear();
684
770
  this.intersectingThemeEls.clear();
685
771
  }
772
+ /**
773
+ * Observes markers that newly match `adaptiveThemeSelector` and drops
774
+ * the ones gone from the document, then resolves `theme`. Resolving waits
775
+ * for the observer when new markers were just observed : it reports each
776
+ * of them once, and resolving before that would briefly fall back to
777
+ * `defaultTheme` while the new page's section is already under the bar.
778
+ * @private
779
+ */
780
+ syncThemeMarkers() {
781
+ if (!this.themeObserver) {
782
+ return;
783
+ }
784
+ const matches = new Set(document.querySelectorAll(this.themeMarkerSelector));
785
+ for (const el of this.observedThemeEls) {
786
+ if (!matches.has(el)) {
787
+ this.themeObserver.unobserve(el);
788
+ this.observedThemeEls.delete(el);
789
+ this.intersectingThemeEls.delete(el);
790
+ }
791
+ }
792
+ let observedNew = false;
793
+ for (const el of matches) {
794
+ if (!this.observedThemeEls.has(el)) {
795
+ this.themeObserver.observe(el);
796
+ this.observedThemeEls.add(el);
797
+ observedNew = true;
798
+ }
799
+ }
800
+ if (!observedNew) {
801
+ this.resolveAdaptiveTheme();
802
+ }
803
+ }
686
804
  /**
687
805
  * Resolves `theme` from whichever marked section currently intersects the
688
806
  * trigger line — the last one in document order among current matches,
@@ -695,10 +813,10 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
695
813
  this.setTheme(this.defaultTheme);
696
814
  return;
697
815
  }
698
- const all = document.querySelectorAll(this.adaptiveThemeSelector);
816
+ const all = document.querySelectorAll(this.themeMarkerSelector);
699
817
  for (let i = all.length - 1; i >= 0; i -= 1) {
700
818
  if (this.intersectingThemeEls.has(all[i])) {
701
- this.setTheme(all[i].getAttribute("data-toolbar-theme") === "dark"
819
+ this.setTheme(all[i].getAttribute(this.adaptiveThemeAttribute) === "dark"
702
820
  ? "dark"
703
821
  : "light");
704
822
  return;
@@ -707,8 +825,10 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
707
825
  this.setTheme(this.defaultTheme);
708
826
  }
709
827
  /**
710
- * Focuses the `[autofocus]` slotted element if present, otherwise the
711
- * panel surface itself — same fallback `eun-drawer` uses on open.
828
+ * Focuses the `[autofocus]` slotted element if present, otherwise keeps
829
+ * it on the burger button, which lives inside the panel : the button just
830
+ * activated keeps its visible focus ring, and since the panel header
831
+ * comes first in the DOM, the next `Tab` lands on the panel's first item.
712
832
  * @private
713
833
  */
714
834
  focusInitialElement() {
@@ -717,7 +837,7 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
717
837
  autofocusTarget.focus();
718
838
  return;
719
839
  }
720
- this.panelEl?.focus();
840
+ this.burgerEl?.focus();
721
841
  }
722
842
  /**
723
843
  * Whether anything should render in the skip-links area at all — either
@@ -810,10 +930,15 @@ let EunomiaToolbar = class EunomiaToolbar extends DialogSurfaceMixin(Localizable
810
930
  : (this.menuOpenLabel ?? this.dictionary.toolbar.menuOpen)}
811
931
  @click=${() => this.toggle()}
812
932
  >
813
- <slot name=${slotName} @slotchange=${this.handleIconSlotChange}>
814
- ${hasSlotted
933
+ <!-- burger-icon holds the per-state slots as its fallback, so a
934
+ single element slotted into it stays put across both states, free
935
+ to animate between them, and wins over menu-icon/close-icon. -->
936
+ <slot name="burger-icon">
937
+ <slot name=${slotName} @slotchange=${this.handleIconSlotChange}>
938
+ ${hasSlotted
815
939
  ? nothing
816
940
  : html `<eun-icon name=${iconName} size="20"></eun-icon>`}
941
+ </slot>
817
942
  </slot>
818
943
  </eun-button>
819
944
  `;
@@ -886,6 +1011,9 @@ EunomiaToolbar.styles = toolbarStyles;
886
1011
  __decorate([
887
1012
  property({ reflect: true, useDefault: true })
888
1013
  ], EunomiaToolbar.prototype, "position", void 0);
1014
+ __decorate([
1015
+ property({ reflect: true, useDefault: true })
1016
+ ], EunomiaToolbar.prototype, "layout", void 0);
889
1017
  __decorate([
890
1018
  property({ type: Number, attribute: "mobile-breakpoint" })
891
1019
  ], EunomiaToolbar.prototype, "mobileBreakpoint", void 0);
@@ -902,7 +1030,7 @@ __decorate([
902
1030
  property({ reflect: true, attribute: "mobile-hide" })
903
1031
  ], EunomiaToolbar.prototype, "mobileHide", void 0);
904
1032
  __decorate([
905
- property({ converter: defaultTrueConverter, attribute: "close-on-backdrop" })
1033
+ property({ type: Boolean, attribute: "close-on-backdrop" })
906
1034
  ], EunomiaToolbar.prototype, "closeOnBackdrop", void 0);
907
1035
  __decorate([
908
1036
  property({ attribute: "menu-open-label" })
@@ -934,6 +1062,9 @@ __decorate([
934
1062
  __decorate([
935
1063
  property({ type: Boolean, attribute: "adaptive-theme" })
936
1064
  ], EunomiaToolbar.prototype, "adaptiveTheme", void 0);
1065
+ __decorate([
1066
+ property({ attribute: "adaptive-theme-attribute" })
1067
+ ], EunomiaToolbar.prototype, "adaptiveThemeAttribute", void 0);
937
1068
  __decorate([
938
1069
  property({ attribute: "adaptive-theme-selector" })
939
1070
  ], EunomiaToolbar.prototype, "adaptiveThemeSelector", void 0);