@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
@@ -1,5 +1,5 @@
1
1
  import { html, nothing } from "lit";
2
- import { GUEST_STATUS_ICON, isMultiDay, PRIORITY_SEMANTIC_STATE, } from "./scheduler.utils.js";
2
+ import { GUEST_STATUS_ICON, isMultiDay, PRIORITY_SEMANTIC_STATE, resolveEventColor, } from "./scheduler.utils.js";
3
3
  /**
4
4
  * Renders the read-only event detail popover (consultation mode) : the
5
5
  * default result of clicking an event chip — full details (title,
@@ -7,7 +7,9 @@ import { GUEST_STATUS_ICON, isMultiDay, PRIORITY_SEMANTIC_STATE, } from "./sched
7
7
  * shared guests, each with a status icon — check/hourglass/cross for
8
8
  * confirmed/pending/declined), plus
9
9
  * Edit/Delete actions to actually enter the editor and a close (✕) button
10
- * to dismiss it without acting on the event at all. Deliberately not
10
+ * to dismiss it without acting on the event at all. Delete asks for a
11
+ * confirmation in place first, swapping the actions for a question and a
12
+ * Cancel/Delete pair. Deliberately not
11
13
  * `eun-tooltip` : that component is non-interactive (`role="tooltip"`,
12
14
  * closes on blur) by ARIA convention, the wrong fit for a panel that needs
13
15
  * to hold focusable buttons — this is a small popover instead, positioned
@@ -19,11 +21,11 @@ import { GUEST_STATUS_ICON, isMultiDay, PRIORITY_SEMANTIC_STATE, } from "./sched
19
21
  * @returns the rendered template.
20
22
  */
21
23
  export function renderEventPopover(props) {
22
- const { event, locale, editLabel, deleteLabel, closeLabel, priorityLabels, readonly, onEdit, onDelete, onClose, } = props;
24
+ const { event, locale, closeLabel, allDayLabel, priorityLabels, onClose } = props;
23
25
  return html `
24
26
  <div
25
27
  class="event-popover-bar"
26
- style="--_accent: var(--eun-color-${event.color}-600);"
28
+ style=${`--_accent: ${resolveEventColor(event.color)?.accent ?? "var(--eun-color-blue-600)"};`}
27
29
  ></div>
28
30
  <eun-button
29
31
  id="event-popover-close"
@@ -39,7 +41,7 @@ export function renderEventPopover(props) {
39
41
  <h3 class="event-popover-title">${event.title}</h3>
40
42
  <div class="event-popover-row">
41
43
  <eun-icon name="schedule" size="16"></eun-icon>
42
- <span>${formatEventPopoverDate(event, locale)}</span>
44
+ <span>${formatEventPopoverDate(event, allDayLabel, locale)}</span>
43
45
  </div>
44
46
  ${event.location
45
47
  ? html `
@@ -99,54 +101,87 @@ export function renderEventPopover(props) {
99
101
  `
100
102
  : nothing}
101
103
  </div>
102
- ${readonly
103
- ? nothing
104
- : html `
105
- <div class="event-popover-actions">
106
- <eun-button
107
- color="critical"
108
- size="s"
109
- appearance="outline"
110
- rounded
111
- @click=${onDelete}
112
- >${deleteLabel}</eun-button
113
- >
114
- <eun-button color="primary" size="s" rounded @click=${onEdit}
115
- >${editLabel}</eun-button
116
- >
117
- </div>
118
- `}
104
+ ${renderEventPopoverActions(props)}
105
+ `;
106
+ }
107
+ /**
108
+ * Renders the popover's Delete/Edit actions, or the delete confirmation
109
+ * that replaces them once Delete was pressed. Nothing in readonly mode.
110
+ * @private
111
+ */
112
+ function renderEventPopoverActions(props) {
113
+ if (props.readonly) {
114
+ return nothing;
115
+ }
116
+ if (props.confirmingDelete) {
117
+ return html `
118
+ <div
119
+ class="event-popover-actions event-popover-confirm"
120
+ role="group"
121
+ aria-labelledby="event-popover-confirm-text"
122
+ >
123
+ <span id="event-popover-confirm-text">${props.deleteConfirmLabel}</span>
124
+ <eun-button
125
+ id="event-popover-confirm-cancel"
126
+ appearance="ghost"
127
+ rounded
128
+ @click=${props.onCancelDelete}
129
+ >${props.cancelLabel}</eun-button
130
+ >
131
+ <eun-button
132
+ id="event-popover-confirm-delete"
133
+ color="critical"
134
+ rounded
135
+ @click=${props.onConfirmDelete}
136
+ >${props.deleteLabel}</eun-button
137
+ >
138
+ </div>
139
+ `;
140
+ }
141
+ return html `
142
+ <div class="event-popover-actions">
143
+ <eun-button
144
+ id="event-popover-delete"
145
+ color="critical"
146
+ appearance="outline"
147
+ rounded
148
+ @click=${props.onDelete}
149
+ >${props.deleteLabel}</eun-button
150
+ >
151
+ <eun-button color="primary" rounded @click=${props.onEdit}
152
+ >${props.editLabel}</eun-button
153
+ >
154
+ </div>
119
155
  `;
120
156
  }
121
157
  /**
122
158
  * Formats an event's date/time for the popover's detail line : an
123
- * `"All day · "`-prefixed date (or date range, if it spans multiple days)
124
- * for an {@link EunomiaSchedulerEvent.allDay} event, a plain date range for
125
- * a multi-day *timed* one (no prefix — {@link isMultiDay} is also true
126
- * here, but nothing in `event` itself claims "all day"), or a full date +
127
- * start–end time range otherwise.
159
+ * `allDayLabel`-prefixed date (or date range, if it spans multiple days)
160
+ * for an {@link EunomiaSchedulerEvent.allDay} event, each end's own date
161
+ * and time for a multi-day *timed* one, or a full date + start–end time
162
+ * range otherwise.
128
163
  * @private
129
164
  */
130
- function formatEventPopoverDate(event, locale) {
165
+ function formatEventPopoverDate(event, allDayLabel, locale) {
131
166
  const dateOptions = {
132
167
  weekday: "long",
133
168
  day: "numeric",
134
169
  month: "long",
135
170
  };
136
- if (isMultiDay(event)) {
137
- const startLabel = event.start.toLocaleDateString(locale, dateOptions);
138
- const endLabel = event.end.toLocaleDateString(locale, dateOptions);
139
- const range = startLabel === endLabel ? startLabel : `${startLabel} – ${endLabel}`;
140
- return event.allDay ? `All day · ${range}` : range;
141
- }
142
- const dayLabel = event.start.toLocaleDateString(locale, dateOptions);
143
- const startTime = event.start.toLocaleTimeString(locale, {
144
- hour: "numeric",
145
- minute: "2-digit",
146
- });
147
- const endTime = event.end.toLocaleTimeString(locale, {
171
+ const timeOptions = {
148
172
  hour: "numeric",
149
173
  minute: "2-digit",
150
- });
151
- return `${dayLabel} · ${startTime} – ${endTime}`;
174
+ };
175
+ const startDate = event.start.toLocaleDateString(locale, dateOptions);
176
+ const endDate = event.end.toLocaleDateString(locale, dateOptions);
177
+ if (event.allDay) {
178
+ const range = startDate === endDate ? startDate : `${startDate} – ${endDate}`;
179
+ return `${allDayLabel} · ${range}`;
180
+ }
181
+ const startTime = event.start.toLocaleTimeString(locale, timeOptions);
182
+ const endTime = event.end.toLocaleTimeString(locale, timeOptions);
183
+ if (isMultiDay(event)) {
184
+ return `${startDate} · ${startTime} – ${endDate} · ${endTime}`;
185
+ }
186
+ return `${startDate} · ${startTime} – ${endTime}`;
152
187
  }
@@ -83,13 +83,13 @@ const base = css `
83
83
  align-items: flex-start;
84
84
  gap: var(--eun-space-s, 8px);
85
85
  font-size: 13px;
86
- color: var(--eun-text-secondary, #484e61);
86
+ color: var(--eun-text-secondary, #666e8a);
87
87
  }
88
88
 
89
89
  .event-popover-row eun-icon {
90
90
  flex: 0 0 auto;
91
91
  margin-top: 1px;
92
- color: var(--eun-text-secondary, #484e61);
92
+ color: var(--eun-text-secondary, #666e8a);
93
93
  }
94
94
 
95
95
  .event-popover-guests {
@@ -110,7 +110,7 @@ const base = css `
110
110
  .event-popover-guest eun-icon {
111
111
  flex: 0 0 auto;
112
112
  margin-top: 0;
113
- color: var(--_guestStatusColor, var(--eun-text-secondary, #484e61));
113
+ color: var(--_guestStatusColor, var(--eun-text-secondary, #666e8a));
114
114
  }
115
115
 
116
116
  .event-popover-guest[data-status="confirmed"] {
@@ -129,5 +129,16 @@ const base = css `
129
129
  gap: var(--eun-space-s, 8px);
130
130
  padding: 0 var(--eun-space-m, 16px) var(--eun-space-m, 16px);
131
131
  }
132
+
133
+ .event-popover-confirm {
134
+ flex-wrap: wrap;
135
+ align-items: center;
136
+ }
137
+
138
+ #event-popover-confirm-text {
139
+ flex: 1 1 100%;
140
+ font-size: var(--eun-font-size-s, 14px);
141
+ font-weight: 600;
142
+ }
132
143
  `;
133
144
  export const schedulerEventPopoverStyles = base;
@@ -16,11 +16,12 @@ export interface HourGridProps {
16
16
  onSlotClick: (start: Date) => void;
17
17
  onEventClick: (event: EunomiaSchedulerEvent, domEvent: MouseEvent) => void;
18
18
  draggingEventId?: string | null;
19
+ hideDayHeader?: boolean;
19
20
  onEventDragStart?: (event: EunomiaSchedulerEvent, domEvent: PointerEvent) => void;
20
21
  }
21
22
  /**
22
- * Renders the day/week/work-week grid : a sticky day-header row, an
23
- * optional all-day/multi-day event row beneath it (via
23
+ * Renders the day/week/work-week grid : a sticky day-header row and an
24
+ * optional all-day/multi-day event row beneath it, pinned together (via
24
25
  * `layoutAllDayEvents`), and the scrollable timed hour grid below that —
25
26
  * one shared horizontal+vertical scroll container, with the header row and
26
27
  * the hour gutter each independently `position: sticky` (top and left
@@ -19,8 +19,8 @@ const CONDENSED_HEIGHT_THRESHOLD = 34;
19
19
  */
20
20
  const ALL_DAY_BAR_HEIGHT = 22;
21
21
  /**
22
- * Renders the day/week/work-week grid : a sticky day-header row, an
23
- * optional all-day/multi-day event row beneath it (via
22
+ * Renders the day/week/work-week grid : a sticky day-header row and an
23
+ * optional all-day/multi-day event row beneath it, pinned together (via
24
24
  * `layoutAllDayEvents`), and the scrollable timed hour grid below that —
25
25
  * one shared horizontal+vertical scroll container, with the header row and
26
26
  * the hour gutter each independently `position: sticky` (top and left
@@ -56,63 +56,67 @@ export function renderHourGrid(props) {
56
56
  const allDayRowCount = allDaySlots.reduce((max, slot) => Math.max(max, slot.row + 1), 0);
57
57
  return html `
58
58
  <div id="hour-grid-scroll">
59
- <div class="hour-grid-header">
60
- <div class="hour-grid-gutter-spacer"></div>
61
- ${days.map((day) => html `
62
- <div
63
- class=${classMap({
64
- "hour-grid-day-header": true,
65
- today: isToday(day),
66
- })}
67
- >
68
- ${day.toLocaleDateString(locale, { weekday: "short" })}
69
- <br />
70
- ${day.toLocaleDateString(locale, {
71
- day: "numeric",
72
- month: "short",
73
- })}
74
- </div>
75
- `)}
76
- </div>
77
- ${allDayRowCount > 0
59
+ <div class="hour-grid-top">
60
+ ${props.hideDayHeader
61
+ ? null
62
+ : html `<div class="hour-grid-header">
63
+ <div class="hour-grid-gutter-spacer"></div>
64
+ ${days.map((day) => html `
65
+ <div
66
+ class=${classMap({
67
+ "hour-grid-day-header": true,
68
+ today: isToday(day),
69
+ })}
70
+ >
71
+ ${day.toLocaleDateString(locale, { weekday: "short" })}
72
+ <br />
73
+ ${day.toLocaleDateString(locale, {
74
+ day: "numeric",
75
+ month: "short",
76
+ })}
77
+ </div>
78
+ `)}
79
+ </div>`}
80
+ ${allDayRowCount > 0
78
81
  ? html `
79
- <div
80
- class="hour-grid-allday-row"
81
- style=${styleMap({
82
+ <div
83
+ class="hour-grid-allday-row"
84
+ style=${styleMap({
82
85
  height: `${allDayRowCount * ALL_DAY_BAR_HEIGHT}px`,
83
86
  })}
84
- >
85
- <div class="hour-grid-gutter-spacer"></div>
86
- <div class="hour-grid-allday-days">
87
- ${allDaySlots.map((slot) => {
87
+ >
88
+ <div class="hour-grid-gutter-spacer"></div>
89
+ <div class="hour-grid-allday-days">
90
+ ${allDaySlots.map((slot) => {
88
91
  const span = slot.endIndex - slot.startIndex + 1;
89
92
  const left = (slot.startIndex / days.length) * 100;
90
93
  const width = (span / days.length) * 100;
91
94
  return html `
92
- <div
93
- class="hour-grid-allday-event"
94
- style=${styleMap({
95
+ <div
96
+ class="hour-grid-allday-event"
97
+ style=${styleMap({
95
98
  top: `${slot.row * ALL_DAY_BAR_HEIGHT}px`,
96
99
  left: `${left}%`,
97
100
  width: `${width}%`,
98
101
  })}
99
- >
100
- <eun-scheduler-event
101
- .label=${slot.event.title}
102
- .start=${slot.event.start}
103
- .end=${slot.event.end}
104
- color=${slot.event.color}
105
- appearance=${props.eventAppearance}
106
- hide-time
107
- @click=${(domEvent) => props.onEventClick(slot.event, domEvent)}
108
- ></eun-scheduler-event>
109
- </div>
110
- `;
102
+ >
103
+ <eun-scheduler-event
104
+ .label=${slot.event.title}
105
+ .start=${slot.event.start}
106
+ .end=${slot.event.end}
107
+ color=${slot.event.color}
108
+ appearance=${props.eventAppearance}
109
+ hide-time
110
+ @click=${(domEvent) => props.onEventClick(slot.event, domEvent)}
111
+ ></eun-scheduler-event>
112
+ </div>
113
+ `;
111
114
  })}
115
+ </div>
112
116
  </div>
113
- </div>
114
- `
117
+ `
115
118
  : null}
119
+ </div>
116
120
  <div
117
121
  class="hour-grid-body"
118
122
  style=${styleMap({ "--_slotsPerHour": String(slotsPerHour) })}
@@ -184,7 +188,10 @@ function renderDayColumn(day, props, now, hourCount) {
184
188
  : null}
185
189
  ${slots.map((slot) => {
186
190
  const startMinutes = Math.max(slot.event.start.getHours() * 60 + slot.event.start.getMinutes(), gridStartMinutes);
187
- const endMinutes = Math.min(slot.event.end.getHours() * 60 + slot.event.end.getMinutes(), gridEndMinutes);
191
+ // A same-day event can still end at the next midnight, read as 24:00.
192
+ const endMinutes = Math.min(isSameDay(slot.event.start, slot.event.end)
193
+ ? slot.event.end.getHours() * 60 + slot.event.end.getMinutes()
194
+ : 24 * 60, gridEndMinutes);
188
195
  if (endMinutes <= gridStartMinutes || startMinutes >= gridEndMinutes) {
189
196
  return null;
190
197
  }
@@ -14,9 +14,10 @@ import { cssBelow } from "../../../utils/media.styles.js";
14
14
  * One shared scroll container (`#hour-grid-scroll`) holds the header, the
15
15
  * optional all-day row, and the timed body — scrolling both horizontally
16
16
  * (so narrow viewports keep every day column at a legible minimum width
17
- * instead of squeezing them illegibly) and vertically. The header row and
18
- * the hour gutter are each independently `position: sticky` (top / left
19
- * respectively), so both stay in view while scrolling in either direction.
17
+ * instead of squeezing them illegibly) and vertically. The header and
18
+ * all-day rows (`.hour-grid-top`) and the hour gutter are each
19
+ * independently `position: sticky` (top / left respectively), so both stay
20
+ * in view while scrolling in either direction.
20
21
  *
21
22
  * `#hour-grid-scroll` reacts to `:host`'s own rendered width via
22
23
  * `@container`, not `@media`, since a scheduler embedded in a narrow
@@ -42,12 +43,17 @@ const base = css `
42
43
  touch-action: pan-y;
43
44
  }
44
45
 
45
- .hour-grid-header {
46
- display: flex;
46
+ .hour-grid-top {
47
47
  position: sticky;
48
48
  top: 0;
49
49
  z-index: 3;
50
+ width: max-content;
51
+ min-width: 100%;
50
52
  background: var(--eun-surface-color, #ffffff);
53
+ }
54
+
55
+ .hour-grid-header {
56
+ display: flex;
51
57
  border-bottom: 1px solid var(--eun-border-color, #dee0e7);
52
58
  }
53
59
 
@@ -68,7 +74,7 @@ const base = css `
68
74
  border-left: 1px solid var(--eun-divider-color, #dee0e7);
69
75
  text-align: center;
70
76
  font-size: 12px;
71
- color: var(--eun-text-secondary, #484e61);
77
+ color: var(--eun-text-secondary, #666e8a);
72
78
  }
73
79
 
74
80
  .hour-grid-day-header.today {
@@ -119,7 +125,7 @@ const base = css `
119
125
  padding-right: var(--eun-space-xs, 4px);
120
126
  text-align: center;
121
127
  font-size: 11px;
122
- color: var(--eun-text-secondary, #484e61);
128
+ color: var(--eun-text-secondary, #666e8a);
123
129
  transform: translateY(-0.5em);
124
130
  border-top: none;
125
131
  }
@@ -122,7 +122,7 @@ function renderMonthWeek(week, props) {
122
122
  color=${slot.event.color}
123
123
  appearance=${isMultiDay(slot.event) ? "default" : "ghost"}
124
124
  direction=${desktop ? "row" : "column"}
125
- ?hide-time=${!desktop || !!slot.event.allDay}
125
+ ?hide-time=${!desktop || isMultiDay(slot.event)}
126
126
  @click=${(domEvent) => onEventClick(slot.event, domEvent)}
127
127
  ></eun-scheduler-event>
128
128
  `)}
@@ -2,7 +2,7 @@ import { css } from "lit";
2
2
  import { cssBelow } from "../../../utils/media.styles.js";
3
3
  const base = css `
4
4
  .month-scroll {
5
- max-height: var(--scheduler-body-max-height, 640px);
5
+ max-height: var(--scheduler-body-max-height, none);
6
6
  overflow-y: auto;
7
7
  }
8
8
 
@@ -28,7 +28,7 @@ const base = css `
28
28
  padding: var(--eun-space-xs, 4px) var(--eun-space-s, 8px);
29
29
  text-align: center;
30
30
  font-size: 12px;
31
- color: var(--eun-text-secondary, #484e61);
31
+ color: var(--eun-text-secondary, #666e8a);
32
32
  }
33
33
 
34
34
  .month-week {
@@ -51,7 +51,7 @@ const base = css `
51
51
  .month-cell.outside {
52
52
  background: color-mix(
53
53
  in srgb,
54
- var(--eun-text-secondary, #484e61) 4%,
54
+ var(--eun-text-secondary, #666e8a) 4%,
55
55
  transparent
56
56
  );
57
57
  }
@@ -70,7 +70,7 @@ const base = css `
70
70
  }
71
71
 
72
72
  .month-cell.outside .month-cell-day {
73
- color: var(--eun-text-secondary, #484e61);
73
+ color: var(--eun-text-secondary, #666e8a);
74
74
  }
75
75
 
76
76
  .month-cell-day.today {
@@ -87,7 +87,10 @@ const base = css `
87
87
 
88
88
  .month-cell-day:focus-visible {
89
89
  outline: 2px solid
90
- var(--scheduler-accent-color, var(--eun-color-primary-500, #3d6fff));
90
+ var(
91
+ --scheduler-focus-outline-color,
92
+ var(--scheduler-accent-color, var(--eun-color-primary-500, #3d6fff))
93
+ );
91
94
  outline-offset: 2px;
92
95
  }
93
96
 
@@ -108,7 +111,7 @@ const base = css `
108
111
  padding: 1px 4px;
109
112
  cursor: pointer;
110
113
  font-size: 11px;
111
- color: var(--eun-text-secondary, #484e61);
114
+ color: var(--eun-text-secondary, #666e8a);
112
115
  z-index: 1;
113
116
  }
114
117
 
@@ -119,7 +122,10 @@ const base = css `
119
122
 
120
123
  .month-week-more:focus-visible {
121
124
  outline: 2px solid
122
- var(--scheduler-accent-color, var(--eun-color-primary-500, #3d6fff));
125
+ var(
126
+ --scheduler-focus-outline-color,
127
+ var(--scheduler-accent-color, var(--eun-color-primary-500, #3d6fff))
128
+ );
123
129
  outline-offset: -2px;
124
130
  }
125
131
  `;
@@ -13,11 +13,12 @@ export interface YearViewProps {
13
13
  onMonthLabelClick: (month: Date) => void;
14
14
  }
15
15
  /**
16
- * Renders the `year` view : the 12 months of the year stacked in a single
17
- * scrollable column — one full-width 7-column grid per month, so
18
- * scrolling down moves from month to month — with a single weekday-label
19
- * header (`position: sticky`, shared across every month rather than
20
- * repeated 12 times) pinned at the top of that same scroll. Each day is
16
+ * Renders the `year` view : the 12 months of the year as mini-month grids,
17
+ * several per row from the `tablet` container width, each with its own
18
+ * weekday labels. Narrower, they stack in a single scrollable column of
19
+ * full-width grids, with a single weekday-label header (`position:
20
+ * sticky`, shared across every month rather than repeated 12 times)
21
+ * pinned at the top of that same scroll. Each day is
21
22
  * marked with a plain dot when it has ≥1 event (not color-coded —
22
23
  * illegible at this scale, unlike the month view's own real chips).
23
24
  * Clicking a day switches to `day` view for that date ; clicking a month
@@ -3,11 +3,12 @@ import { classMap } from "lit/directives/class-map.js";
3
3
  import { addDays, getCalendarMonthMatrix, isSameMonth, isToday, } from "../../../utils/date.utils.js";
4
4
  import { eventsOnDay } from "./scheduler.utils.js";
5
5
  /**
6
- * Renders the `year` view : the 12 months of the year stacked in a single
7
- * scrollable column — one full-width 7-column grid per month, so
8
- * scrolling down moves from month to month — with a single weekday-label
9
- * header (`position: sticky`, shared across every month rather than
10
- * repeated 12 times) pinned at the top of that same scroll. Each day is
6
+ * Renders the `year` view : the 12 months of the year as mini-month grids,
7
+ * several per row from the `tablet` container width, each with its own
8
+ * weekday labels. Narrower, they stack in a single scrollable column of
9
+ * full-width grids, with a single weekday-label header (`position:
10
+ * sticky`, shared across every month rather than repeated 12 times)
11
+ * pinned at the top of that same scroll. Each day is
11
12
  * marked with a plain dot when it has ≥1 event (not color-coded —
12
13
  * illegible at this scale, unlike the month view's own real chips).
13
14
  * Clicking a day switches to `day` view for that date ; clicking a month
@@ -26,12 +27,12 @@ export function renderSchedulerYearView(props) {
26
27
  <div class="year-weekday-header" role="row">
27
28
  ${weekdayLabels.map((label) => html `<span role="columnheader">${label}</span>`)}
28
29
  </div>
29
- ${months.map((month) => renderYearMonth(month, weekStartsOn, locale, props))}
30
+ ${months.map((month) => renderYearMonth(month, weekStartsOn, weekdayLabels, locale, props))}
30
31
  </div>
31
32
  `;
32
33
  }
33
34
  /** @private */
34
- function renderYearMonth(month, weekStartsOn, locale, props) {
35
+ function renderYearMonth(month, weekStartsOn, weekdayLabels, locale, props) {
35
36
  const weeks = getCalendarMonthMatrix(month, weekStartsOn);
36
37
  return html `
37
38
  <div class="year-month-section">
@@ -43,6 +44,9 @@ function renderYearMonth(month, weekStartsOn, locale, props) {
43
44
  ${month.toLocaleDateString(locale, { month: "long", year: "numeric" })}
44
45
  </button>
45
46
  <div class="year-month-grid" role="grid">
47
+ <div class="year-month-weekdays" role="row">
48
+ ${weekdayLabels.map((label) => html `<span role="columnheader">${label}</span>`)}
49
+ </div>
46
50
  ${weeks.map((week) => html `
47
51
  <div class="year-month-row" role="row">
48
52
  ${week.map((day) => renderYearDay(day, month, locale, props))}
@@ -1,5 +1,5 @@
1
1
  import { css } from "lit";
2
- import { cssBelow } from "../../../utils/media.styles.js";
2
+ import { cssBelow, cssFrom } from "../../../utils/media.styles.js";
3
3
  const base = css `
4
4
  .year-scroll {
5
5
  max-height: var(--scheduler-body-max-height, 640px);
@@ -31,7 +31,7 @@ const base = css `
31
31
  padding: var(--eun-space-xs, 4px) var(--eun-space-s, 8px);
32
32
  text-align: center;
33
33
  font-size: 12px;
34
- color: var(--eun-text-secondary, #484e61);
34
+ color: var(--eun-text-secondary, #666e8a);
35
35
  }
36
36
 
37
37
  .year-month-section {
@@ -72,6 +72,18 @@ const base = css `
72
72
  grid-template-columns: repeat(7, 1fr);
73
73
  }
74
74
 
75
+ .year-month-weekdays {
76
+ display: none;
77
+ grid-template-columns: repeat(7, 1fr);
78
+ }
79
+
80
+ .year-month-weekdays span {
81
+ padding: var(--eun-space-xs, 4px) 0;
82
+ text-align: center;
83
+ font-size: 11px;
84
+ color: var(--eun-text-secondary, #666e8a);
85
+ }
86
+
75
87
  .year-day {
76
88
  all: unset;
77
89
  box-sizing: border-box;
@@ -111,7 +123,10 @@ const base = css `
111
123
 
112
124
  .year-day:focus-visible {
113
125
  outline: 2px solid
114
- var(--scheduler-accent-color, var(--eun-color-primary-500, #3d6fff));
126
+ var(
127
+ --scheduler-focus-outline-color,
128
+ var(--scheduler-accent-color, var(--eun-color-primary-500, #3d6fff))
129
+ );
115
130
  outline-offset: 1px;
116
131
  }
117
132
 
@@ -122,5 +137,44 @@ const base = css `
122
137
  border-radius: 999px;
123
138
  background: currentColor;
124
139
  }
140
+
141
+ @container ${cssFrom("tablet")} {
142
+ .year-scroll {
143
+ display: grid;
144
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
145
+ align-content: start;
146
+ gap: var(--eun-space-m, 16px) var(--eun-space-l, 24px);
147
+ padding: var(--eun-space-m, 16px);
148
+ }
149
+
150
+ .year-weekday-header {
151
+ display: none;
152
+ }
153
+
154
+ .year-month-section {
155
+ padding-bottom: 0;
156
+ border-bottom: none;
157
+ }
158
+
159
+ .year-month-label {
160
+ position: static;
161
+ margin: 0 0 var(--eun-space-xs, 4px);
162
+ padding: var(--eun-space-xs, 4px) var(--eun-space-s, 8px);
163
+ }
164
+
165
+ .year-month-weekdays {
166
+ display: grid;
167
+ }
168
+
169
+ .year-day {
170
+ aspect-ratio: auto;
171
+ height: 32px;
172
+ font-size: 12px;
173
+ }
174
+
175
+ .year-day-number {
176
+ width: 26px;
177
+ }
178
+ }
125
179
  `;
126
180
  export const schedulerYearViewStyles = base;
@@ -3,15 +3,11 @@
3
3
  */
4
4
  export type EunomiaSchedulerView = "day" | "week" | "work-week" | "month" | "year";
5
5
  /**
6
- * An event's accent color, as a `#rrggbb` hex string picked through
7
- * `eun-color-picker` in the editor. `scheduler-event.styles.ts` still gives
8
- * its own six preset names (red/purple/yellow/blue/green/pink — the
9
- * library's decorative token scale, see
10
- * `src/foundations/color/decorative.md`) byte-identical, tuned two-tone
11
- * CSS whenever `color` matches one of their hex values exactly, so existing
12
- * events keep rendering pixel-identically ; any other hex drives both the
13
- * accent and tint shades from that single value instead (see
14
- * `EunomiaSchedulerEvent`'s own doc comment).
6
+ * An event's accent color, as a `#rrggbb` hex string, which is what the
7
+ * editor saves. The six preset hex values (see `EVENT_COLOR_PRESETS` in
8
+ * `scheduler.utils.ts`) keep their own tuned two-tone shades, and their
9
+ * names (red/purple/yellow/blue/green/pink) are accepted as aliases. Any
10
+ * other hex drives both shades from that single value.
15
11
  */
16
12
  export type EunomiaSchedulerEventColor = string;
17
13
  /**