@slotted/angular 0.0.0-stage → 0.1.0-beta.1

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 (793) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +51 -2
  3. package/docs/AGENTS.snippet.md +10 -0
  4. package/docs/accordion.json +345 -0
  5. package/docs/accordion.md +207 -0
  6. package/docs/action-bar.json +421 -0
  7. package/docs/action-bar.md +364 -0
  8. package/docs/action-sheet.json +210 -0
  9. package/docs/action-sheet.md +19 -0
  10. package/docs/alert.json +407 -0
  11. package/docs/alert.md +239 -0
  12. package/docs/app-shell.examples.md +349 -0
  13. package/docs/app-shell.json +835 -0
  14. package/docs/app-shell.md +214 -0
  15. package/docs/aspect-ratio.json +159 -0
  16. package/docs/aspect-ratio.md +134 -0
  17. package/docs/attachment.json +486 -0
  18. package/docs/attachment.md +253 -0
  19. package/docs/avatar-group.json +208 -0
  20. package/docs/avatar-group.md +130 -0
  21. package/docs/avatar.json +342 -0
  22. package/docs/avatar.md +142 -0
  23. package/docs/badge.json +334 -0
  24. package/docs/badge.md +138 -0
  25. package/docs/breadcrumb.json +368 -0
  26. package/docs/breadcrumb.md +237 -0
  27. package/docs/button-group.json +158 -0
  28. package/docs/button-group.md +72 -0
  29. package/docs/button.examples.md +621 -0
  30. package/docs/button.json +977 -0
  31. package/docs/button.md +200 -0
  32. package/docs/calendar.json +592 -0
  33. package/docs/calendar.md +242 -0
  34. package/docs/card.json +283 -0
  35. package/docs/card.md +130 -0
  36. package/docs/carousel.json +560 -0
  37. package/docs/carousel.md +357 -0
  38. package/docs/cascader.json +933 -0
  39. package/docs/cascader.md +379 -0
  40. package/docs/chart.examples.md +582 -0
  41. package/docs/chart.json +1359 -0
  42. package/docs/chart.md +187 -0
  43. package/docs/checkbox-group.examples.md +612 -0
  44. package/docs/checkbox-group.json +395 -0
  45. package/docs/checkbox-group.md +106 -0
  46. package/docs/checkbox.examples.md +546 -0
  47. package/docs/checkbox.json +506 -0
  48. package/docs/checkbox.md +104 -0
  49. package/docs/code-block.json +616 -0
  50. package/docs/code-block.md +303 -0
  51. package/docs/collapsible.json +456 -0
  52. package/docs/collapsible.md +261 -0
  53. package/docs/color-picker.json +523 -0
  54. package/docs/color-picker.md +201 -0
  55. package/docs/column-manager.json +486 -0
  56. package/docs/column-manager.md +277 -0
  57. package/docs/combobox.examples.md +1732 -0
  58. package/docs/combobox.json +1250 -0
  59. package/docs/combobox.md +209 -0
  60. package/docs/command-palette.json +800 -0
  61. package/docs/command-palette.md +419 -0
  62. package/docs/container.json +156 -0
  63. package/docs/container.md +92 -0
  64. package/docs/context-menu.json +231 -0
  65. package/docs/context-menu.md +176 -0
  66. package/docs/currency-field.examples.md +321 -0
  67. package/docs/currency-field.json +649 -0
  68. package/docs/currency-field.md +128 -0
  69. package/docs/dashboard-grid.json +680 -0
  70. package/docs/dashboard-grid.md +265 -0
  71. package/docs/data-grid.examples.md +3064 -0
  72. package/docs/data-grid.json +1577 -0
  73. package/docs/data-grid.md +237 -0
  74. package/docs/data-grid.props.md +81 -0
  75. package/docs/data-list.json +685 -0
  76. package/docs/data-list.md +327 -0
  77. package/docs/date-field.json +490 -0
  78. package/docs/date-field.md +235 -0
  79. package/docs/date-picker.examples.md +1226 -0
  80. package/docs/date-picker.json +696 -0
  81. package/docs/date-picker.md +121 -0
  82. package/docs/date-range-picker.examples.md +1300 -0
  83. package/docs/date-range-picker.json +903 -0
  84. package/docs/date-range-picker.md +142 -0
  85. package/docs/datetime-field.json +665 -0
  86. package/docs/datetime-field.md +337 -0
  87. package/docs/datetime-picker.examples.md +1269 -0
  88. package/docs/datetime-picker.json +928 -0
  89. package/docs/datetime-picker.md +150 -0
  90. package/docs/datetime-range-picker.examples.md +225 -0
  91. package/docs/datetime-range-picker.json +1015 -0
  92. package/docs/datetime-range-picker.md +162 -0
  93. package/docs/description-list.json +471 -0
  94. package/docs/description-list.md +268 -0
  95. package/docs/detail-panel.json +530 -0
  96. package/docs/detail-panel.md +361 -0
  97. package/docs/dialog.examples.md +2467 -0
  98. package/docs/dialog.json +1141 -0
  99. package/docs/dialog.md +217 -0
  100. package/docs/dialog.props.md +63 -0
  101. package/docs/divider.json +148 -0
  102. package/docs/divider.md +83 -0
  103. package/docs/drawer.examples.md +1929 -0
  104. package/docs/drawer.json +753 -0
  105. package/docs/drawer.md +199 -0
  106. package/docs/entity-picker.json +946 -0
  107. package/docs/entity-picker.md +365 -0
  108. package/docs/event-calendar.examples.md +308 -0
  109. package/docs/event-calendar.json +1202 -0
  110. package/docs/event-calendar.md +201 -0
  111. package/docs/field-group.json +333 -0
  112. package/docs/field-group.md +181 -0
  113. package/docs/field.examples.md +676 -0
  114. package/docs/field.json +528 -0
  115. package/docs/field.md +127 -0
  116. package/docs/filter-bar.json +817 -0
  117. package/docs/filter-bar.md +380 -0
  118. package/docs/form.json +378 -0
  119. package/docs/form.md +235 -0
  120. package/docs/fullscreen.json +395 -0
  121. package/docs/fullscreen.md +225 -0
  122. package/docs/grid.json +176 -0
  123. package/docs/grid.md +74 -0
  124. package/docs/highlight.json +279 -0
  125. package/docs/highlight.md +210 -0
  126. package/docs/hover-card.json +254 -0
  127. package/docs/hover-card.md +213 -0
  128. package/docs/icon.json +173 -0
  129. package/docs/icon.md +101 -0
  130. package/docs/image.json +476 -0
  131. package/docs/image.md +254 -0
  132. package/docs/import-export-center.json +836 -0
  133. package/docs/import-export-center.md +345 -0
  134. package/docs/index.md +141 -0
  135. package/docs/inline-message.json +312 -0
  136. package/docs/inline-message.md +191 -0
  137. package/docs/inline.json +149 -0
  138. package/docs/inline.md +72 -0
  139. package/docs/kbd.json +350 -0
  140. package/docs/kbd.md +210 -0
  141. package/docs/link.json +264 -0
  142. package/docs/link.md +167 -0
  143. package/docs/list-item.json +463 -0
  144. package/docs/list-item.md +236 -0
  145. package/docs/list.json +321 -0
  146. package/docs/list.md +185 -0
  147. package/docs/listbox.json +807 -0
  148. package/docs/listbox.md +413 -0
  149. package/docs/loading-overlay.json +440 -0
  150. package/docs/loading-overlay.md +248 -0
  151. package/docs/markdown.json +461 -0
  152. package/docs/markdown.md +266 -0
  153. package/docs/menu.examples.md +1651 -0
  154. package/docs/menu.json +922 -0
  155. package/docs/menu.md +155 -0
  156. package/docs/menubar.json +292 -0
  157. package/docs/menubar.md +173 -0
  158. package/docs/message-scroller.json +401 -0
  159. package/docs/message-scroller.md +212 -0
  160. package/docs/message.json +862 -0
  161. package/docs/message.md +473 -0
  162. package/docs/multi-select.examples.md +1922 -0
  163. package/docs/multi-select.json +1314 -0
  164. package/docs/multi-select.md +213 -0
  165. package/docs/navigation-menu.json +529 -0
  166. package/docs/navigation-menu.md +329 -0
  167. package/docs/notification-center.json +664 -0
  168. package/docs/notification-center.md +372 -0
  169. package/docs/number-field.examples.md +1078 -0
  170. package/docs/number-field.json +668 -0
  171. package/docs/number-field.md +137 -0
  172. package/docs/otp-input.json +479 -0
  173. package/docs/otp-input.md +291 -0
  174. package/docs/page-header.json +574 -0
  175. package/docs/page-header.md +338 -0
  176. package/docs/page.json +332 -0
  177. package/docs/page.md +184 -0
  178. package/docs/pagination.json +434 -0
  179. package/docs/pagination.md +238 -0
  180. package/docs/popover.examples.md +1235 -0
  181. package/docs/popover.json +656 -0
  182. package/docs/popover.md +199 -0
  183. package/docs/progress-indicator.json +501 -0
  184. package/docs/progress-indicator.md +329 -0
  185. package/docs/prompt-composer.json +498 -0
  186. package/docs/prompt-composer.md +278 -0
  187. package/docs/prose.json +357 -0
  188. package/docs/prose.md +226 -0
  189. package/docs/radio-group.examples.md +626 -0
  190. package/docs/radio-group.json +541 -0
  191. package/docs/radio-group.md +112 -0
  192. package/docs/rating.json +1053 -0
  193. package/docs/rating.md +435 -0
  194. package/docs/result-state.json +376 -0
  195. package/docs/result-state.md +286 -0
  196. package/docs/saved-views.json +384 -0
  197. package/docs/saved-views.md +242 -0
  198. package/docs/scroll-area.json +120 -0
  199. package/docs/scroll-area.md +8 -0
  200. package/docs/section.json +344 -0
  201. package/docs/section.md +208 -0
  202. package/docs/segmented-control.json +429 -0
  203. package/docs/segmented-control.md +240 -0
  204. package/docs/select.examples.md +1214 -0
  205. package/docs/select.json +1147 -0
  206. package/docs/select.md +199 -0
  207. package/docs/side-navigation.json +632 -0
  208. package/docs/side-navigation.md +430 -0
  209. package/docs/skeleton.json +358 -0
  210. package/docs/skeleton.md +223 -0
  211. package/docs/slider.json +522 -0
  212. package/docs/slider.md +261 -0
  213. package/docs/sparkline.json +426 -0
  214. package/docs/sparkline.md +206 -0
  215. package/docs/split-button.json +361 -0
  216. package/docs/split-button.md +275 -0
  217. package/docs/splitter.json +142 -0
  218. package/docs/splitter.md +14 -0
  219. package/docs/stack.json +135 -0
  220. package/docs/stack.md +74 -0
  221. package/docs/stat-card.json +529 -0
  222. package/docs/stat-card.md +270 -0
  223. package/docs/status-indicator.json +314 -0
  224. package/docs/status-indicator.md +197 -0
  225. package/docs/stepper.json +451 -0
  226. package/docs/stepper.md +250 -0
  227. package/docs/switch.json +451 -0
  228. package/docs/switch.md +508 -0
  229. package/docs/table-of-contents.json +553 -0
  230. package/docs/table-of-contents.md +289 -0
  231. package/docs/table.examples.md +1981 -0
  232. package/docs/table.json +1059 -0
  233. package/docs/table.md +290 -0
  234. package/docs/tabs.examples.md +1370 -0
  235. package/docs/tabs.json +661 -0
  236. package/docs/tabs.md +211 -0
  237. package/docs/tag.json +813 -0
  238. package/docs/tag.md +241 -0
  239. package/docs/tags-input.json +771 -0
  240. package/docs/tags-input.md +361 -0
  241. package/docs/text-field.examples.md +821 -0
  242. package/docs/text-field.json +604 -0
  243. package/docs/text-field.md +125 -0
  244. package/docs/textarea.examples.md +612 -0
  245. package/docs/textarea.json +440 -0
  246. package/docs/textarea.md +98 -0
  247. package/docs/time-field.json +584 -0
  248. package/docs/time-field.md +291 -0
  249. package/docs/time-picker.json +679 -0
  250. package/docs/time-picker.md +315 -0
  251. package/docs/time-range-picker.examples.md +191 -0
  252. package/docs/time-range-picker.json +924 -0
  253. package/docs/time-range-picker.md +152 -0
  254. package/docs/timeline.json +839 -0
  255. package/docs/timeline.md +401 -0
  256. package/docs/toast.json +642 -0
  257. package/docs/toast.md +311 -0
  258. package/docs/toggle-group.json +417 -0
  259. package/docs/toggle-group.md +255 -0
  260. package/docs/toggle.json +326 -0
  261. package/docs/toggle.md +222 -0
  262. package/docs/toolbar.json +380 -0
  263. package/docs/toolbar.md +240 -0
  264. package/docs/tooltip.examples.md +664 -0
  265. package/docs/tooltip.json +604 -0
  266. package/docs/tooltip.md +146 -0
  267. package/docs/top-navigation.examples.md +287 -0
  268. package/docs/top-navigation.json +648 -0
  269. package/docs/top-navigation.md +138 -0
  270. package/docs/tour.json +759 -0
  271. package/docs/tour.md +337 -0
  272. package/docs/transfer.json +746 -0
  273. package/docs/transfer.md +273 -0
  274. package/docs/tree.json +918 -0
  275. package/docs/tree.md +397 -0
  276. package/docs/typography.json +317 -0
  277. package/docs/typography.md +107 -0
  278. package/docs/upload.examples.md +358 -0
  279. package/docs/upload.json +1103 -0
  280. package/docs/upload.md +166 -0
  281. package/docs/visually-hidden.json +71 -0
  282. package/docs/visually-hidden.md +42 -0
  283. package/docs/wizard.json +724 -0
  284. package/docs/wizard.md +295 -0
  285. package/fesm2022/slotted-angular-accordion.mjs +247 -0
  286. package/fesm2022/slotted-angular-accordion.mjs.map +1 -0
  287. package/fesm2022/slotted-angular-action-bar.mjs +639 -0
  288. package/fesm2022/slotted-angular-action-bar.mjs.map +1 -0
  289. package/fesm2022/slotted-angular-action-sheet.mjs +749 -0
  290. package/fesm2022/slotted-angular-action-sheet.mjs.map +1 -0
  291. package/fesm2022/slotted-angular-alert.mjs +427 -0
  292. package/fesm2022/slotted-angular-alert.mjs.map +1 -0
  293. package/fesm2022/slotted-angular-app-shell.mjs +1334 -0
  294. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -0
  295. package/fesm2022/slotted-angular-aspect-ratio.mjs +63 -0
  296. package/fesm2022/slotted-angular-aspect-ratio.mjs.map +1 -0
  297. package/fesm2022/slotted-angular-attachment.mjs +595 -0
  298. package/fesm2022/slotted-angular-attachment.mjs.map +1 -0
  299. package/fesm2022/slotted-angular-avatar-group.mjs +230 -0
  300. package/fesm2022/slotted-angular-avatar-group.mjs.map +1 -0
  301. package/fesm2022/slotted-angular-avatar.mjs +330 -0
  302. package/fesm2022/slotted-angular-avatar.mjs.map +1 -0
  303. package/fesm2022/slotted-angular-badge.mjs +255 -0
  304. package/fesm2022/slotted-angular-badge.mjs.map +1 -0
  305. package/fesm2022/slotted-angular-breadcrumb.mjs +544 -0
  306. package/fesm2022/slotted-angular-breadcrumb.mjs.map +1 -0
  307. package/fesm2022/slotted-angular-button-group.mjs +146 -0
  308. package/fesm2022/slotted-angular-button-group.mjs.map +1 -0
  309. package/fesm2022/slotted-angular-button.mjs +692 -0
  310. package/fesm2022/slotted-angular-button.mjs.map +1 -0
  311. package/fesm2022/slotted-angular-calendar.mjs +916 -0
  312. package/fesm2022/slotted-angular-calendar.mjs.map +1 -0
  313. package/fesm2022/slotted-angular-card.mjs +225 -0
  314. package/fesm2022/slotted-angular-card.mjs.map +1 -0
  315. package/fesm2022/slotted-angular-carousel.mjs +840 -0
  316. package/fesm2022/slotted-angular-carousel.mjs.map +1 -0
  317. package/fesm2022/slotted-angular-cascader.mjs +1839 -0
  318. package/fesm2022/slotted-angular-cascader.mjs.map +1 -0
  319. package/fesm2022/slotted-angular-chart.mjs +974 -0
  320. package/fesm2022/slotted-angular-chart.mjs.map +1 -0
  321. package/fesm2022/slotted-angular-checkbox-group.mjs +283 -0
  322. package/fesm2022/slotted-angular-checkbox-group.mjs.map +1 -0
  323. package/fesm2022/slotted-angular-checkbox.mjs +468 -0
  324. package/fesm2022/slotted-angular-checkbox.mjs.map +1 -0
  325. package/fesm2022/slotted-angular-code-block.mjs +476 -0
  326. package/fesm2022/slotted-angular-code-block.mjs.map +1 -0
  327. package/fesm2022/slotted-angular-collapsible.mjs +479 -0
  328. package/fesm2022/slotted-angular-collapsible.mjs.map +1 -0
  329. package/fesm2022/slotted-angular-color-picker.mjs +910 -0
  330. package/fesm2022/slotted-angular-color-picker.mjs.map +1 -0
  331. package/fesm2022/slotted-angular-column-manager.mjs +1037 -0
  332. package/fesm2022/slotted-angular-column-manager.mjs.map +1 -0
  333. package/fesm2022/slotted-angular-combobox.mjs +1480 -0
  334. package/fesm2022/slotted-angular-combobox.mjs.map +1 -0
  335. package/fesm2022/slotted-angular-command-palette.mjs +1283 -0
  336. package/fesm2022/slotted-angular-command-palette.mjs.map +1 -0
  337. package/fesm2022/slotted-angular-container.mjs +105 -0
  338. package/fesm2022/slotted-angular-container.mjs.map +1 -0
  339. package/fesm2022/slotted-angular-context-menu.mjs +221 -0
  340. package/fesm2022/slotted-angular-context-menu.mjs.map +1 -0
  341. package/fesm2022/slotted-angular-currency-field.mjs +1131 -0
  342. package/fesm2022/slotted-angular-currency-field.mjs.map +1 -0
  343. package/fesm2022/slotted-angular-dashboard-grid.mjs +1928 -0
  344. package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -0
  345. package/fesm2022/slotted-angular-data-grid.mjs +6697 -0
  346. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -0
  347. package/fesm2022/slotted-angular-data-list.mjs +1418 -0
  348. package/fesm2022/slotted-angular-data-list.mjs.map +1 -0
  349. package/fesm2022/slotted-angular-date-field.mjs +772 -0
  350. package/fesm2022/slotted-angular-date-field.mjs.map +1 -0
  351. package/fesm2022/slotted-angular-date-picker.mjs +690 -0
  352. package/fesm2022/slotted-angular-date-picker.mjs.map +1 -0
  353. package/fesm2022/slotted-angular-date-range-picker.mjs +1150 -0
  354. package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -0
  355. package/fesm2022/slotted-angular-datetime-field.mjs +1058 -0
  356. package/fesm2022/slotted-angular-datetime-field.mjs.map +1 -0
  357. package/fesm2022/slotted-angular-datetime-picker.mjs +1362 -0
  358. package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -0
  359. package/fesm2022/slotted-angular-datetime-range-picker.mjs +1872 -0
  360. package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -0
  361. package/fesm2022/slotted-angular-description-list.mjs +545 -0
  362. package/fesm2022/slotted-angular-description-list.mjs.map +1 -0
  363. package/fesm2022/slotted-angular-detail-panel.mjs +754 -0
  364. package/fesm2022/slotted-angular-detail-panel.mjs.map +1 -0
  365. package/fesm2022/slotted-angular-dialog.mjs +980 -0
  366. package/fesm2022/slotted-angular-dialog.mjs.map +1 -0
  367. package/fesm2022/slotted-angular-divider.mjs +76 -0
  368. package/fesm2022/slotted-angular-divider.mjs.map +1 -0
  369. package/fesm2022/slotted-angular-drawer.mjs +1397 -0
  370. package/fesm2022/slotted-angular-drawer.mjs.map +1 -0
  371. package/fesm2022/slotted-angular-entity-picker.mjs +1987 -0
  372. package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -0
  373. package/fesm2022/slotted-angular-event-calendar.mjs +2934 -0
  374. package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -0
  375. package/fesm2022/slotted-angular-field-group.mjs +301 -0
  376. package/fesm2022/slotted-angular-field-group.mjs.map +1 -0
  377. package/fesm2022/slotted-angular-field.mjs +928 -0
  378. package/fesm2022/slotted-angular-field.mjs.map +1 -0
  379. package/fesm2022/slotted-angular-filter-bar.mjs +3107 -0
  380. package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -0
  381. package/fesm2022/slotted-angular-form.mjs +592 -0
  382. package/fesm2022/slotted-angular-form.mjs.map +1 -0
  383. package/fesm2022/slotted-angular-fullscreen.mjs +314 -0
  384. package/fesm2022/slotted-angular-fullscreen.mjs.map +1 -0
  385. package/fesm2022/slotted-angular-grid.mjs +58 -0
  386. package/fesm2022/slotted-angular-grid.mjs.map +1 -0
  387. package/fesm2022/slotted-angular-highlight.mjs +123 -0
  388. package/fesm2022/slotted-angular-highlight.mjs.map +1 -0
  389. package/fesm2022/slotted-angular-hover-card.mjs +326 -0
  390. package/fesm2022/slotted-angular-hover-card.mjs.map +1 -0
  391. package/fesm2022/slotted-angular-i18n.mjs +75 -0
  392. package/fesm2022/slotted-angular-i18n.mjs.map +1 -0
  393. package/fesm2022/slotted-angular-icon.mjs +232 -0
  394. package/fesm2022/slotted-angular-icon.mjs.map +1 -0
  395. package/fesm2022/slotted-angular-image.mjs +442 -0
  396. package/fesm2022/slotted-angular-image.mjs.map +1 -0
  397. package/fesm2022/slotted-angular-import-export-center.mjs +1792 -0
  398. package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -0
  399. package/fesm2022/slotted-angular-inline-message.mjs +280 -0
  400. package/fesm2022/slotted-angular-inline-message.mjs.map +1 -0
  401. package/fesm2022/slotted-angular-inline.mjs +52 -0
  402. package/fesm2022/slotted-angular-inline.mjs.map +1 -0
  403. package/fesm2022/slotted-angular-kbd.mjs +284 -0
  404. package/fesm2022/slotted-angular-kbd.mjs.map +1 -0
  405. package/fesm2022/slotted-angular-link.mjs +182 -0
  406. package/fesm2022/slotted-angular-link.mjs.map +1 -0
  407. package/fesm2022/slotted-angular-list-item.mjs +367 -0
  408. package/fesm2022/slotted-angular-list-item.mjs.map +1 -0
  409. package/fesm2022/slotted-angular-list.mjs +256 -0
  410. package/fesm2022/slotted-angular-list.mjs.map +1 -0
  411. package/fesm2022/slotted-angular-listbox.mjs +1274 -0
  412. package/fesm2022/slotted-angular-listbox.mjs.map +1 -0
  413. package/fesm2022/slotted-angular-loading-overlay.mjs +451 -0
  414. package/fesm2022/slotted-angular-loading-overlay.mjs.map +1 -0
  415. package/fesm2022/slotted-angular-markdown.mjs +914 -0
  416. package/fesm2022/slotted-angular-markdown.mjs.map +1 -0
  417. package/fesm2022/slotted-angular-menu.mjs +1211 -0
  418. package/fesm2022/slotted-angular-menu.mjs.map +1 -0
  419. package/fesm2022/slotted-angular-menubar.mjs +230 -0
  420. package/fesm2022/slotted-angular-menubar.mjs.map +1 -0
  421. package/fesm2022/slotted-angular-message-scroller.mjs +378 -0
  422. package/fesm2022/slotted-angular-message-scroller.mjs.map +1 -0
  423. package/fesm2022/slotted-angular-message.mjs +866 -0
  424. package/fesm2022/slotted-angular-message.mjs.map +1 -0
  425. package/fesm2022/slotted-angular-multi-select.mjs +1939 -0
  426. package/fesm2022/slotted-angular-multi-select.mjs.map +1 -0
  427. package/fesm2022/slotted-angular-navigation-menu.mjs +770 -0
  428. package/fesm2022/slotted-angular-navigation-menu.mjs.map +1 -0
  429. package/fesm2022/slotted-angular-notification-center.mjs +1172 -0
  430. package/fesm2022/slotted-angular-notification-center.mjs.map +1 -0
  431. package/fesm2022/slotted-angular-number-field.mjs +966 -0
  432. package/fesm2022/slotted-angular-number-field.mjs.map +1 -0
  433. package/fesm2022/slotted-angular-otp-input.mjs +629 -0
  434. package/fesm2022/slotted-angular-otp-input.mjs.map +1 -0
  435. package/fesm2022/slotted-angular-page-header.mjs +788 -0
  436. package/fesm2022/slotted-angular-page-header.mjs.map +1 -0
  437. package/fesm2022/slotted-angular-page.mjs +255 -0
  438. package/fesm2022/slotted-angular-page.mjs.map +1 -0
  439. package/fesm2022/slotted-angular-pagination.mjs +562 -0
  440. package/fesm2022/slotted-angular-pagination.mjs.map +1 -0
  441. package/fesm2022/slotted-angular-popover.mjs +799 -0
  442. package/fesm2022/slotted-angular-popover.mjs.map +1 -0
  443. package/fesm2022/slotted-angular-progress-indicator.mjs +572 -0
  444. package/fesm2022/slotted-angular-progress-indicator.mjs.map +1 -0
  445. package/fesm2022/slotted-angular-prompt-composer.mjs +596 -0
  446. package/fesm2022/slotted-angular-prompt-composer.mjs.map +1 -0
  447. package/fesm2022/slotted-angular-prose.mjs +314 -0
  448. package/fesm2022/slotted-angular-prose.mjs.map +1 -0
  449. package/fesm2022/slotted-angular-radio-group.mjs +469 -0
  450. package/fesm2022/slotted-angular-radio-group.mjs.map +1 -0
  451. package/fesm2022/slotted-angular-rating.mjs +1174 -0
  452. package/fesm2022/slotted-angular-rating.mjs.map +1 -0
  453. package/fesm2022/slotted-angular-result-state.mjs +330 -0
  454. package/fesm2022/slotted-angular-result-state.mjs.map +1 -0
  455. package/fesm2022/slotted-angular-saved-views.mjs +877 -0
  456. package/fesm2022/slotted-angular-saved-views.mjs.map +1 -0
  457. package/fesm2022/slotted-angular-scroll-area.mjs +294 -0
  458. package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -0
  459. package/fesm2022/slotted-angular-section.mjs +266 -0
  460. package/fesm2022/slotted-angular-section.mjs.map +1 -0
  461. package/fesm2022/slotted-angular-segmented-control.mjs +454 -0
  462. package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -0
  463. package/fesm2022/slotted-angular-select.mjs +1899 -0
  464. package/fesm2022/slotted-angular-select.mjs.map +1 -0
  465. package/fesm2022/slotted-angular-side-navigation.mjs +1042 -0
  466. package/fesm2022/slotted-angular-side-navigation.mjs.map +1 -0
  467. package/fesm2022/slotted-angular-skeleton.mjs +316 -0
  468. package/fesm2022/slotted-angular-skeleton.mjs.map +1 -0
  469. package/fesm2022/slotted-angular-slider.mjs +586 -0
  470. package/fesm2022/slotted-angular-slider.mjs.map +1 -0
  471. package/fesm2022/slotted-angular-sparkline.mjs +235 -0
  472. package/fesm2022/slotted-angular-sparkline.mjs.map +1 -0
  473. package/fesm2022/slotted-angular-split-button.mjs +331 -0
  474. package/fesm2022/slotted-angular-split-button.mjs.map +1 -0
  475. package/fesm2022/slotted-angular-splitter.mjs +516 -0
  476. package/fesm2022/slotted-angular-splitter.mjs.map +1 -0
  477. package/fesm2022/slotted-angular-stack.mjs +48 -0
  478. package/fesm2022/slotted-angular-stack.mjs.map +1 -0
  479. package/fesm2022/slotted-angular-stat-card.mjs +478 -0
  480. package/fesm2022/slotted-angular-stat-card.mjs.map +1 -0
  481. package/fesm2022/slotted-angular-status-indicator.mjs +155 -0
  482. package/fesm2022/slotted-angular-status-indicator.mjs.map +1 -0
  483. package/fesm2022/slotted-angular-stepper.mjs +536 -0
  484. package/fesm2022/slotted-angular-stepper.mjs.map +1 -0
  485. package/fesm2022/slotted-angular-switch.mjs +447 -0
  486. package/fesm2022/slotted-angular-switch.mjs.map +1 -0
  487. package/fesm2022/slotted-angular-table-of-contents.mjs +750 -0
  488. package/fesm2022/slotted-angular-table-of-contents.mjs.map +1 -0
  489. package/fesm2022/slotted-angular-table.mjs +2518 -0
  490. package/fesm2022/slotted-angular-table.mjs.map +1 -0
  491. package/fesm2022/slotted-angular-tabs.mjs +829 -0
  492. package/fesm2022/slotted-angular-tabs.mjs.map +1 -0
  493. package/fesm2022/slotted-angular-tag.mjs +595 -0
  494. package/fesm2022/slotted-angular-tag.mjs.map +1 -0
  495. package/fesm2022/slotted-angular-tags-input.mjs +1211 -0
  496. package/fesm2022/slotted-angular-tags-input.mjs.map +1 -0
  497. package/fesm2022/slotted-angular-text-field.mjs +674 -0
  498. package/fesm2022/slotted-angular-text-field.mjs.map +1 -0
  499. package/fesm2022/slotted-angular-textarea.mjs +275 -0
  500. package/fesm2022/slotted-angular-textarea.mjs.map +1 -0
  501. package/fesm2022/slotted-angular-theme.mjs +45 -0
  502. package/fesm2022/slotted-angular-theme.mjs.map +1 -0
  503. package/fesm2022/slotted-angular-time-field.mjs +895 -0
  504. package/fesm2022/slotted-angular-time-field.mjs.map +1 -0
  505. package/fesm2022/slotted-angular-time-picker.mjs +856 -0
  506. package/fesm2022/slotted-angular-time-picker.mjs.map +1 -0
  507. package/fesm2022/slotted-angular-time-range-picker.mjs +1534 -0
  508. package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -0
  509. package/fesm2022/slotted-angular-timeline.mjs +928 -0
  510. package/fesm2022/slotted-angular-timeline.mjs.map +1 -0
  511. package/fesm2022/slotted-angular-toast.mjs +917 -0
  512. package/fesm2022/slotted-angular-toast.mjs.map +1 -0
  513. package/fesm2022/slotted-angular-toggle-group.mjs +311 -0
  514. package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -0
  515. package/fesm2022/slotted-angular-toggle.mjs +162 -0
  516. package/fesm2022/slotted-angular-toggle.mjs.map +1 -0
  517. package/fesm2022/slotted-angular-toolbar.mjs +536 -0
  518. package/fesm2022/slotted-angular-toolbar.mjs.map +1 -0
  519. package/fesm2022/slotted-angular-tooltip.mjs +798 -0
  520. package/fesm2022/slotted-angular-tooltip.mjs.map +1 -0
  521. package/fesm2022/slotted-angular-top-navigation.mjs +1308 -0
  522. package/fesm2022/slotted-angular-top-navigation.mjs.map +1 -0
  523. package/fesm2022/slotted-angular-tour.mjs +1330 -0
  524. package/fesm2022/slotted-angular-tour.mjs.map +1 -0
  525. package/fesm2022/slotted-angular-transfer.mjs +1406 -0
  526. package/fesm2022/slotted-angular-transfer.mjs.map +1 -0
  527. package/fesm2022/slotted-angular-tree.mjs +1448 -0
  528. package/fesm2022/slotted-angular-tree.mjs.map +1 -0
  529. package/fesm2022/slotted-angular-typography.mjs +184 -0
  530. package/fesm2022/slotted-angular-typography.mjs.map +1 -0
  531. package/fesm2022/slotted-angular-upload.mjs +1523 -0
  532. package/fesm2022/slotted-angular-upload.mjs.map +1 -0
  533. package/fesm2022/slotted-angular-visually-hidden.mjs +32 -0
  534. package/fesm2022/slotted-angular-visually-hidden.mjs.map +1 -0
  535. package/fesm2022/slotted-angular-wizard.mjs +1715 -0
  536. package/fesm2022/slotted-angular-wizard.mjs.map +1 -0
  537. package/fesm2022/slotted-angular.mjs +4 -0
  538. package/fesm2022/slotted-angular.mjs.map +1 -0
  539. package/package.json +537 -3
  540. package/types/slotted-angular-accordion.d.ts +156 -0
  541. package/types/slotted-angular-accordion.d.ts.map +1 -0
  542. package/types/slotted-angular-action-bar.d.ts +291 -0
  543. package/types/slotted-angular-action-bar.d.ts.map +1 -0
  544. package/types/slotted-angular-action-sheet.d.ts +294 -0
  545. package/types/slotted-angular-action-sheet.d.ts.map +1 -0
  546. package/types/slotted-angular-alert.d.ts +214 -0
  547. package/types/slotted-angular-alert.d.ts.map +1 -0
  548. package/types/slotted-angular-app-shell.d.ts +549 -0
  549. package/types/slotted-angular-app-shell.d.ts.map +1 -0
  550. package/types/slotted-angular-aspect-ratio.d.ts +57 -0
  551. package/types/slotted-angular-aspect-ratio.d.ts.map +1 -0
  552. package/types/slotted-angular-attachment.d.ts +294 -0
  553. package/types/slotted-angular-attachment.d.ts.map +1 -0
  554. package/types/slotted-angular-avatar-group.d.ts +119 -0
  555. package/types/slotted-angular-avatar-group.d.ts.map +1 -0
  556. package/types/slotted-angular-avatar.d.ts +202 -0
  557. package/types/slotted-angular-avatar.d.ts.map +1 -0
  558. package/types/slotted-angular-badge.d.ts +166 -0
  559. package/types/slotted-angular-badge.d.ts.map +1 -0
  560. package/types/slotted-angular-breadcrumb.d.ts +251 -0
  561. package/types/slotted-angular-breadcrumb.d.ts.map +1 -0
  562. package/types/slotted-angular-button-group.d.ts +89 -0
  563. package/types/slotted-angular-button-group.d.ts.map +1 -0
  564. package/types/slotted-angular-button.d.ts +390 -0
  565. package/types/slotted-angular-button.d.ts.map +1 -0
  566. package/types/slotted-angular-calendar.d.ts +280 -0
  567. package/types/slotted-angular-calendar.d.ts.map +1 -0
  568. package/types/slotted-angular-card.d.ts +140 -0
  569. package/types/slotted-angular-card.d.ts.map +1 -0
  570. package/types/slotted-angular-carousel.d.ts +288 -0
  571. package/types/slotted-angular-carousel.d.ts.map +1 -0
  572. package/types/slotted-angular-cascader.d.ts +351 -0
  573. package/types/slotted-angular-cascader.d.ts.map +1 -0
  574. package/types/slotted-angular-chart.d.ts +319 -0
  575. package/types/slotted-angular-chart.d.ts.map +1 -0
  576. package/types/slotted-angular-checkbox-group.d.ts +156 -0
  577. package/types/slotted-angular-checkbox-group.d.ts.map +1 -0
  578. package/types/slotted-angular-checkbox.d.ts +197 -0
  579. package/types/slotted-angular-checkbox.d.ts.map +1 -0
  580. package/types/slotted-angular-code-block.d.ts +158 -0
  581. package/types/slotted-angular-code-block.d.ts.map +1 -0
  582. package/types/slotted-angular-collapsible.d.ts +272 -0
  583. package/types/slotted-angular-collapsible.d.ts.map +1 -0
  584. package/types/slotted-angular-color-picker.d.ts +181 -0
  585. package/types/slotted-angular-color-picker.d.ts.map +1 -0
  586. package/types/slotted-angular-column-manager.d.ts +200 -0
  587. package/types/slotted-angular-column-manager.d.ts.map +1 -0
  588. package/types/slotted-angular-combobox.d.ts +449 -0
  589. package/types/slotted-angular-combobox.d.ts.map +1 -0
  590. package/types/slotted-angular-command-palette.d.ts +256 -0
  591. package/types/slotted-angular-command-palette.d.ts.map +1 -0
  592. package/types/slotted-angular-container.d.ts +84 -0
  593. package/types/slotted-angular-container.d.ts.map +1 -0
  594. package/types/slotted-angular-context-menu.d.ts +84 -0
  595. package/types/slotted-angular-context-menu.d.ts.map +1 -0
  596. package/types/slotted-angular-currency-field.d.ts +480 -0
  597. package/types/slotted-angular-currency-field.d.ts.map +1 -0
  598. package/types/slotted-angular-dashboard-grid.d.ts +341 -0
  599. package/types/slotted-angular-dashboard-grid.d.ts.map +1 -0
  600. package/types/slotted-angular-data-grid.d.ts +1077 -0
  601. package/types/slotted-angular-data-grid.d.ts.map +1 -0
  602. package/types/slotted-angular-data-list.d.ts +272 -0
  603. package/types/slotted-angular-data-list.d.ts.map +1 -0
  604. package/types/slotted-angular-date-field.d.ts +320 -0
  605. package/types/slotted-angular-date-field.d.ts.map +1 -0
  606. package/types/slotted-angular-date-picker.d.ts +224 -0
  607. package/types/slotted-angular-date-picker.d.ts.map +1 -0
  608. package/types/slotted-angular-date-range-picker.d.ts +310 -0
  609. package/types/slotted-angular-date-range-picker.d.ts.map +1 -0
  610. package/types/slotted-angular-datetime-field.d.ts +362 -0
  611. package/types/slotted-angular-datetime-field.d.ts.map +1 -0
  612. package/types/slotted-angular-datetime-picker.d.ts +370 -0
  613. package/types/slotted-angular-datetime-picker.d.ts.map +1 -0
  614. package/types/slotted-angular-datetime-range-picker.d.ts +459 -0
  615. package/types/slotted-angular-datetime-range-picker.d.ts.map +1 -0
  616. package/types/slotted-angular-description-list.d.ts +281 -0
  617. package/types/slotted-angular-description-list.d.ts.map +1 -0
  618. package/types/slotted-angular-detail-panel.d.ts +240 -0
  619. package/types/slotted-angular-detail-panel.d.ts.map +1 -0
  620. package/types/slotted-angular-dialog.d.ts +497 -0
  621. package/types/slotted-angular-dialog.d.ts.map +1 -0
  622. package/types/slotted-angular-divider.d.ts +40 -0
  623. package/types/slotted-angular-divider.d.ts.map +1 -0
  624. package/types/slotted-angular-drawer.d.ts +532 -0
  625. package/types/slotted-angular-drawer.d.ts.map +1 -0
  626. package/types/slotted-angular-entity-picker.d.ts +338 -0
  627. package/types/slotted-angular-entity-picker.d.ts.map +1 -0
  628. package/types/slotted-angular-event-calendar.d.ts +574 -0
  629. package/types/slotted-angular-event-calendar.d.ts.map +1 -0
  630. package/types/slotted-angular-field-group.d.ts +152 -0
  631. package/types/slotted-angular-field-group.d.ts.map +1 -0
  632. package/types/slotted-angular-field.d.ts +535 -0
  633. package/types/slotted-angular-field.d.ts.map +1 -0
  634. package/types/slotted-angular-filter-bar.d.ts +573 -0
  635. package/types/slotted-angular-filter-bar.d.ts.map +1 -0
  636. package/types/slotted-angular-form.d.ts +298 -0
  637. package/types/slotted-angular-form.d.ts.map +1 -0
  638. package/types/slotted-angular-fullscreen.d.ts +145 -0
  639. package/types/slotted-angular-fullscreen.d.ts.map +1 -0
  640. package/types/slotted-angular-grid.d.ts +50 -0
  641. package/types/slotted-angular-grid.d.ts.map +1 -0
  642. package/types/slotted-angular-highlight.d.ts +93 -0
  643. package/types/slotted-angular-highlight.d.ts.map +1 -0
  644. package/types/slotted-angular-hover-card.d.ts +140 -0
  645. package/types/slotted-angular-hover-card.d.ts.map +1 -0
  646. package/types/slotted-angular-i18n.d.ts +46 -0
  647. package/types/slotted-angular-i18n.d.ts.map +1 -0
  648. package/types/slotted-angular-icon.d.ts +94 -0
  649. package/types/slotted-angular-icon.d.ts.map +1 -0
  650. package/types/slotted-angular-image.d.ts +251 -0
  651. package/types/slotted-angular-image.d.ts.map +1 -0
  652. package/types/slotted-angular-import-export-center.d.ts +351 -0
  653. package/types/slotted-angular-import-export-center.d.ts.map +1 -0
  654. package/types/slotted-angular-inline-message.d.ts +195 -0
  655. package/types/slotted-angular-inline-message.d.ts.map +1 -0
  656. package/types/slotted-angular-inline.d.ts +41 -0
  657. package/types/slotted-angular-inline.d.ts.map +1 -0
  658. package/types/slotted-angular-kbd.d.ts +174 -0
  659. package/types/slotted-angular-kbd.d.ts.map +1 -0
  660. package/types/slotted-angular-link.d.ts +94 -0
  661. package/types/slotted-angular-link.d.ts.map +1 -0
  662. package/types/slotted-angular-list-item.d.ts +210 -0
  663. package/types/slotted-angular-list-item.d.ts.map +1 -0
  664. package/types/slotted-angular-list.d.ts +176 -0
  665. package/types/slotted-angular-list.d.ts.map +1 -0
  666. package/types/slotted-angular-listbox.d.ts +470 -0
  667. package/types/slotted-angular-listbox.d.ts.map +1 -0
  668. package/types/slotted-angular-loading-overlay.d.ts +219 -0
  669. package/types/slotted-angular-loading-overlay.d.ts.map +1 -0
  670. package/types/slotted-angular-markdown.d.ts +172 -0
  671. package/types/slotted-angular-markdown.d.ts.map +1 -0
  672. package/types/slotted-angular-menu.d.ts +448 -0
  673. package/types/slotted-angular-menu.d.ts.map +1 -0
  674. package/types/slotted-angular-menubar.d.ts +90 -0
  675. package/types/slotted-angular-menubar.d.ts.map +1 -0
  676. package/types/slotted-angular-message-scroller.d.ts +151 -0
  677. package/types/slotted-angular-message-scroller.d.ts.map +1 -0
  678. package/types/slotted-angular-message.d.ts +348 -0
  679. package/types/slotted-angular-message.d.ts.map +1 -0
  680. package/types/slotted-angular-multi-select.d.ts +462 -0
  681. package/types/slotted-angular-multi-select.d.ts.map +1 -0
  682. package/types/slotted-angular-navigation-menu.d.ts +309 -0
  683. package/types/slotted-angular-navigation-menu.d.ts.map +1 -0
  684. package/types/slotted-angular-notification-center.d.ts +318 -0
  685. package/types/slotted-angular-notification-center.d.ts.map +1 -0
  686. package/types/slotted-angular-number-field.d.ts +402 -0
  687. package/types/slotted-angular-number-field.d.ts.map +1 -0
  688. package/types/slotted-angular-otp-input.d.ts +286 -0
  689. package/types/slotted-angular-otp-input.d.ts.map +1 -0
  690. package/types/slotted-angular-page-header.d.ts +334 -0
  691. package/types/slotted-angular-page-header.d.ts.map +1 -0
  692. package/types/slotted-angular-page.d.ts +141 -0
  693. package/types/slotted-angular-page.d.ts.map +1 -0
  694. package/types/slotted-angular-pagination.d.ts +213 -0
  695. package/types/slotted-angular-pagination.d.ts.map +1 -0
  696. package/types/slotted-angular-popover.d.ts +366 -0
  697. package/types/slotted-angular-popover.d.ts.map +1 -0
  698. package/types/slotted-angular-progress-indicator.d.ts +312 -0
  699. package/types/slotted-angular-progress-indicator.d.ts.map +1 -0
  700. package/types/slotted-angular-prompt-composer.d.ts +242 -0
  701. package/types/slotted-angular-prompt-composer.d.ts.map +1 -0
  702. package/types/slotted-angular-prose.d.ts +171 -0
  703. package/types/slotted-angular-prose.d.ts.map +1 -0
  704. package/types/slotted-angular-radio-group.d.ts +268 -0
  705. package/types/slotted-angular-radio-group.d.ts.map +1 -0
  706. package/types/slotted-angular-rating.d.ts +374 -0
  707. package/types/slotted-angular-rating.d.ts.map +1 -0
  708. package/types/slotted-angular-result-state.d.ts +217 -0
  709. package/types/slotted-angular-result-state.d.ts.map +1 -0
  710. package/types/slotted-angular-saved-views.d.ts +198 -0
  711. package/types/slotted-angular-saved-views.d.ts.map +1 -0
  712. package/types/slotted-angular-scroll-area.d.ts +186 -0
  713. package/types/slotted-angular-scroll-area.d.ts.map +1 -0
  714. package/types/slotted-angular-section.d.ts +143 -0
  715. package/types/slotted-angular-section.d.ts.map +1 -0
  716. package/types/slotted-angular-segmented-control.d.ts +251 -0
  717. package/types/slotted-angular-segmented-control.d.ts.map +1 -0
  718. package/types/slotted-angular-select.d.ts +507 -0
  719. package/types/slotted-angular-select.d.ts.map +1 -0
  720. package/types/slotted-angular-side-navigation.d.ts +373 -0
  721. package/types/slotted-angular-side-navigation.d.ts.map +1 -0
  722. package/types/slotted-angular-skeleton.d.ts +198 -0
  723. package/types/slotted-angular-skeleton.d.ts.map +1 -0
  724. package/types/slotted-angular-slider.d.ts +216 -0
  725. package/types/slotted-angular-slider.d.ts.map +1 -0
  726. package/types/slotted-angular-sparkline.d.ts +106 -0
  727. package/types/slotted-angular-sparkline.d.ts.map +1 -0
  728. package/types/slotted-angular-split-button.d.ts +180 -0
  729. package/types/slotted-angular-split-button.d.ts.map +1 -0
  730. package/types/slotted-angular-splitter.d.ts +206 -0
  731. package/types/slotted-angular-splitter.d.ts.map +1 -0
  732. package/types/slotted-angular-stack.d.ts +38 -0
  733. package/types/slotted-angular-stack.d.ts.map +1 -0
  734. package/types/slotted-angular-stat-card.d.ts +232 -0
  735. package/types/slotted-angular-stat-card.d.ts.map +1 -0
  736. package/types/slotted-angular-status-indicator.d.ts +106 -0
  737. package/types/slotted-angular-status-indicator.d.ts.map +1 -0
  738. package/types/slotted-angular-stepper.d.ts +198 -0
  739. package/types/slotted-angular-stepper.d.ts.map +1 -0
  740. package/types/slotted-angular-switch.d.ts +243 -0
  741. package/types/slotted-angular-switch.d.ts.map +1 -0
  742. package/types/slotted-angular-table-of-contents.d.ts +210 -0
  743. package/types/slotted-angular-table-of-contents.d.ts.map +1 -0
  744. package/types/slotted-angular-table.d.ts +888 -0
  745. package/types/slotted-angular-table.d.ts.map +1 -0
  746. package/types/slotted-angular-tabs.d.ts +340 -0
  747. package/types/slotted-angular-tabs.d.ts.map +1 -0
  748. package/types/slotted-angular-tag.d.ts +279 -0
  749. package/types/slotted-angular-tag.d.ts.map +1 -0
  750. package/types/slotted-angular-tags-input.d.ts +302 -0
  751. package/types/slotted-angular-tags-input.d.ts.map +1 -0
  752. package/types/slotted-angular-text-field.d.ts +334 -0
  753. package/types/slotted-angular-text-field.d.ts.map +1 -0
  754. package/types/slotted-angular-textarea.d.ts +150 -0
  755. package/types/slotted-angular-textarea.d.ts.map +1 -0
  756. package/types/slotted-angular-theme.d.ts +26 -0
  757. package/types/slotted-angular-theme.d.ts.map +1 -0
  758. package/types/slotted-angular-time-field.d.ts +300 -0
  759. package/types/slotted-angular-time-field.d.ts.map +1 -0
  760. package/types/slotted-angular-time-picker.d.ts +260 -0
  761. package/types/slotted-angular-time-picker.d.ts.map +1 -0
  762. package/types/slotted-angular-time-range-picker.d.ts +401 -0
  763. package/types/slotted-angular-time-range-picker.d.ts.map +1 -0
  764. package/types/slotted-angular-timeline.d.ts +329 -0
  765. package/types/slotted-angular-timeline.d.ts.map +1 -0
  766. package/types/slotted-angular-toast.d.ts +340 -0
  767. package/types/slotted-angular-toast.d.ts.map +1 -0
  768. package/types/slotted-angular-toggle-group.d.ts +167 -0
  769. package/types/slotted-angular-toggle-group.d.ts.map +1 -0
  770. package/types/slotted-angular-toggle.d.ts +106 -0
  771. package/types/slotted-angular-toggle.d.ts.map +1 -0
  772. package/types/slotted-angular-toolbar.d.ts +252 -0
  773. package/types/slotted-angular-toolbar.d.ts.map +1 -0
  774. package/types/slotted-angular-tooltip.d.ts +388 -0
  775. package/types/slotted-angular-tooltip.d.ts.map +1 -0
  776. package/types/slotted-angular-top-navigation.d.ts +442 -0
  777. package/types/slotted-angular-top-navigation.d.ts.map +1 -0
  778. package/types/slotted-angular-tour.d.ts +440 -0
  779. package/types/slotted-angular-tour.d.ts.map +1 -0
  780. package/types/slotted-angular-transfer.d.ts +296 -0
  781. package/types/slotted-angular-transfer.d.ts.map +1 -0
  782. package/types/slotted-angular-tree.d.ts +499 -0
  783. package/types/slotted-angular-tree.d.ts.map +1 -0
  784. package/types/slotted-angular-typography.d.ts +89 -0
  785. package/types/slotted-angular-typography.d.ts.map +1 -0
  786. package/types/slotted-angular-upload.d.ts +365 -0
  787. package/types/slotted-angular-upload.d.ts.map +1 -0
  788. package/types/slotted-angular-visually-hidden.d.ts +19 -0
  789. package/types/slotted-angular-visually-hidden.d.ts.map +1 -0
  790. package/types/slotted-angular-wizard.d.ts +441 -0
  791. package/types/slotted-angular-wizard.d.ts.map +1 -0
  792. package/types/slotted-angular.d.ts +3 -0
  793. package/types/slotted-angular.d.ts.map +1 -0
@@ -0,0 +1,2934 @@
1
+ import { NgTemplateOutlet } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { InjectionToken, inject, TemplateRef, Directive, input, model, booleanAttribute, numberAttribute, output, contentChild, viewChild, ElementRef, Injector, HostAttributeToken, computed, signal, DestroyRef, afterNextRender, effect, untracked, afterRenderEffect, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
4
+ import { secondsOfDay, compareDateTime, isPlainDateTime, compareDate, isSameDate, toISODate, isoWeekNumber, plainDateTime, addDays, timeOfSeconds, createDateFormat, todayIn, nowDateTimeIn, daysBetween } from '@slotted/core/date';
5
+ import { occurrenceTimes, formatTimeRange, formatTime, formatOccurrence, calendarColor, layoutRow, overflowByDay, isMultiDay, isWorkingDay, occurrencesOn, layoutColumn, offsetChangeOn, offHoursOn, formatHour, zoneLabel, listDays, listDayParts, slotMinutes, viewRange, occurrencesIn, withPlacement, viewTitle, placeOccurrence, placementOf, occurrenceWhen, stepView, contextSlot, movePlacement, resizePlacement, nextAllowedPlacement, moveDate } from '@slotted/core/event-calendar';
6
+ import { eventCalendarMessages } from '@slotted/core/i18n';
7
+ import { getLiveAnnouncer } from '@slotted/core/live-announcer';
8
+ import { createWidthGate, COMPACT_BELOW } from '@slotted/core/measure';
9
+ import { SlDrawer, SlDrawerBody, SlDrawerClose, SlDrawerDescription, SlDrawerHeader, SlDrawerResizer, SlDrawerTitle } from '@slotted/angular/drawer';
10
+ import { injectLocale, injectMessages } from '@slotted/angular/i18n';
11
+ import { SlGlyph, SlIcon } from '@slotted/angular/icon';
12
+ import { SlContextMenuTrigger } from '@slotted/angular/context-menu';
13
+ import { SlMenu, SlMenuItem, SlMenuTrigger } from '@slotted/angular/menu';
14
+ import { SlPopover, SlPopoverBody, SlPopoverClose, SlPopoverContent, SlPopoverDescription, SlPopoverHeader, SlPopoverLayer, SlPopoverTitle } from '@slotted/angular/popover';
15
+ import { SlProgressBar } from '@slotted/angular/progress-indicator';
16
+ import { SlSegment, SlSegmentedControl } from '@slotted/angular/segmented-control';
17
+
18
+ const EVENT_CALENDAR_FALLBACK = {
19
+ compact: 'list',
20
+ dayHours: [0, 24],
21
+ firstDayOfWeek: undefined,
22
+ fixedWeeks: false,
23
+ hourCycle: undefined,
24
+ listRange: 'week',
25
+ loadingDelay: 200,
26
+ loadingMinDuration: 400,
27
+ maxColumns: 6,
28
+ maxEvents: 3,
29
+ scrollTime: { hour: 7, minute: 0, second: 0 },
30
+ slotDuration: 30,
31
+ timeZone: undefined,
32
+ weekends: 'shown',
33
+ weekNumbers: false,
34
+ };
35
+ const EVENT_CALENDAR_DEFAULTS = new InjectionToken('slotted event calendar defaults', { providedIn: 'root', factory: () => EVENT_CALENDAR_FALLBACK });
36
+ /**
37
+ * An application decides once which zone answers "today", when its working
38
+ * day starts and how tall an hour is. The locale and the words come from the
39
+ * language in force (`provideSlotted`).
40
+ */
41
+ function provideEventCalendarDefaults(defaults) {
42
+ return {
43
+ provide: EVENT_CALENDAR_DEFAULTS,
44
+ useFactory: () => ({ ...EVENT_CALENDAR_FALLBACK, ...defaults }),
45
+ };
46
+ }
47
+ function injectEventCalendarDefaults() {
48
+ return inject(EVENT_CALENDAR_DEFAULTS);
49
+ }
50
+
51
+ /**
52
+ * The content of every event, in all four places it is drawn. The family keeps
53
+ * the element — a link or a button — its name, its focus and its geometry;
54
+ * the template writes what is inside it.
55
+ */
56
+ class SlEventCalendarEvent {
57
+ template = inject(TemplateRef);
58
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlEventCalendarEvent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
59
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlEventCalendarEvent, isStandalone: true, selector: "ng-template[slEventCalendarEvent]", ngImport: i0 });
60
+ }
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlEventCalendarEvent, decorators: [{
62
+ type: Directive,
63
+ args: [{ selector: 'ng-template[slEventCalendarEvent]', standalone: true }]
64
+ }] });
65
+ /** Given, the family opens its own popover with this content, anchored to the event. */
66
+ class SlEventCalendarDetail {
67
+ template = inject(TemplateRef);
68
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlEventCalendarDetail, deps: [], target: i0.ɵɵFactoryTarget.Directive });
69
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlEventCalendarDetail, isStandalone: true, selector: "ng-template[slEventCalendarDetail]", ngImport: i0 });
70
+ }
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlEventCalendarDetail, decorators: [{
72
+ type: Directive,
73
+ args: [{ selector: 'ng-template[slEventCalendarDetail]', standalone: true }]
74
+ }] });
75
+ /** The consumer's content for a day: a price, a count of free slots, a holiday. */
76
+ /**
77
+ * The items of the menu a secondary click, a long press or `Shift+F10` opens on
78
+ * the grid — `slMenuItem`, `sl-menu-separator`, a nested menu — for the
79
+ * target. `slEventCalendarContextMenuFor` narrows the targets that have a
80
+ * menu; the others keep the browser's own.
81
+ */
82
+ class SlEventCalendarContextMenu {
83
+ template = inject(TemplateRef);
84
+ for = input(() => true, { ...(ngDevMode ? { debugName: "for" } : /* istanbul ignore next */ {}), alias: 'slEventCalendarContextMenuFor' });
85
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlEventCalendarContextMenu, deps: [], target: i0.ɵɵFactoryTarget.Directive });
86
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlEventCalendarContextMenu, isStandalone: true, selector: "ng-template[slEventCalendarContextMenu]", inputs: { for: { classPropertyName: "for", publicName: "slEventCalendarContextMenuFor", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
87
+ }
88
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlEventCalendarContextMenu, decorators: [{
89
+ type: Directive,
90
+ args: [{ selector: 'ng-template[slEventCalendarContextMenu]', standalone: true }]
91
+ }], propDecorators: { for: [{ type: i0.Input, args: [{ isSignal: true, alias: "slEventCalendarContextMenuFor", required: false }] }] } });
92
+ class SlEventCalendarDayContent {
93
+ template = inject(TemplateRef);
94
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlEventCalendarDayContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
95
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlEventCalendarDayContent, isStandalone: true, selector: "ng-template[slEventCalendarDayContent]", ngImport: i0 });
96
+ }
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlEventCalendarDayContent, decorators: [{
98
+ type: Directive,
99
+ args: [{ selector: 'ng-template[slEventCalendarDayContent]', standalone: true }]
100
+ }] });
101
+ /** The consumer's controls, at the end of the header. */
102
+ class SlEventCalendarActions {
103
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlEventCalendarActions, deps: [], target: i0.ɵɵFactoryTarget.Directive });
104
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlEventCalendarActions, isStandalone: true, selector: "[slEventCalendarActions]", ngImport: i0 });
105
+ }
106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlEventCalendarActions, decorators: [{
107
+ type: Directive,
108
+ args: [{ selector: '[slEventCalendarActions]', standalone: true }]
109
+ }] });
110
+ /** The action under the list's empty sentence — the one that creates an event. */
111
+ class SlEventCalendarEmpty {
112
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlEventCalendarEmpty, deps: [], target: i0.ɵɵFactoryTarget.Directive });
113
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlEventCalendarEmpty, isStandalone: true, selector: "[slEventCalendarEmpty]", ngImport: i0 });
114
+ }
115
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlEventCalendarEmpty, decorators: [{
116
+ type: Directive,
117
+ args: [{ selector: '[slEventCalendarEmpty]', standalone: true }]
118
+ }] });
119
+ /** A message and a retry, above the grid. The grid stays usable. */
120
+ class SlEventCalendarError {
121
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlEventCalendarError, deps: [], target: i0.ɵɵFactoryTarget.Directive });
122
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlEventCalendarError, isStandalone: true, selector: "[slEventCalendarError]", ngImport: i0 });
123
+ }
124
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlEventCalendarError, decorators: [{
125
+ type: Directive,
126
+ args: [{ selector: '[slEventCalendarError]', standalone: true }]
127
+ }] });
128
+
129
+ /** A block shorter than this puts its time beside its title, on one line. */
130
+ const SHORT_MINUTES = 45;
131
+ /** The shortest block drawn, in minutes, which decides whether two short events touch. */
132
+ const MIN_BLOCK_MINUTES = 20;
133
+ const fullDate = (locale, date) => new Intl.DateTimeFormat(locale, {
134
+ timeZone: 'UTC',
135
+ weekday: 'long',
136
+ month: 'long',
137
+ day: 'numeric',
138
+ }).format(new Date(Date.UTC(date.year, date.month - 1, date.day)));
139
+ const weekday = (locale, date, style) => new Intl.DateTimeFormat(locale, { timeZone: 'UTC', weekday: style }).format(new Date(Date.UTC(date.year, date.month - 1, date.day)));
140
+ const minutesOf = (value) => secondsOfDay(value.time) / 60;
141
+ /** The time an occurrence shows on one day. */
142
+ function timeLabel(input, occurrence, date) {
143
+ if (occurrence.allDay)
144
+ return input.t('allDay');
145
+ const options = { locale: input.locale, hourCycle: input.hourCycle };
146
+ const { start, end } = occurrenceTimes(occurrence, date);
147
+ if (start !== null && end !== null)
148
+ return formatTimeRange(start, end, options);
149
+ if (start !== null)
150
+ return input.t('from', { time: formatTime(start, options) });
151
+ if (end !== null)
152
+ return input.t('until', { time: formatTime(end, options) });
153
+ return input.t('allDay');
154
+ }
155
+ function metaText(input, occurrence, continued) {
156
+ const parts = [
157
+ formatOccurrence(occurrence, { locale: input.locale, hourCycle: input.hourCycle }),
158
+ occurrence.allDay ? input.t('allDay') : undefined,
159
+ input.calendars.find((entry) => entry.key === occurrence.event.calendar)?.label,
160
+ occurrence.event.status === 'tentative' ? input.t('tentative') : undefined,
161
+ occurrence.event.status === 'cancelled' ? input.t('cancelled') : undefined,
162
+ occurrence.recurring ? input.t('recurring') : undefined,
163
+ continued ? input.t('continues') : undefined,
164
+ ].filter((part) => part !== undefined && part !== '');
165
+ /* A list of descriptors, written the way the locale in force lists them. */
166
+ return `, ${new Intl.ListFormat(input.locale, { type: 'unit' }).format(parts)}`;
167
+ }
168
+ function eventView(input, occurrence, date, layout, flags = {}) {
169
+ const { event } = occurrence;
170
+ const color = calendarColor(event.calendar, input.calendars);
171
+ const bar = layout === 'bar';
172
+ const options = { locale: input.locale, hourCycle: input.hourCycle };
173
+ const time = bar && occurrence.allDay
174
+ ? null
175
+ : layout === 'lane' || bar
176
+ ? formatTime(occurrence.start.time, options)
177
+ : timeLabel(input, occurrence, date);
178
+ const editable = layout !== 'list' && input.canEdit(occurrence);
179
+ const resizable = editable &&
180
+ (layout === 'block'
181
+ ? flags.clippedEnd !== true && flags.continuesAfter !== true
182
+ : bar && flags.continuesAfter !== true);
183
+ return {
184
+ key: occurrence.key,
185
+ occurrence,
186
+ layout,
187
+ date,
188
+ href: event.href ?? null,
189
+ color: color === null ? null : String(color),
190
+ status: event.status === undefined || event.status === 'confirmed' ? null : event.status,
191
+ allDay: occurrence.allDay,
192
+ bar,
193
+ open: input.openKey === occurrence.key,
194
+ continuesBefore: flags.continuesBefore === true,
195
+ continuesAfter: flags.continuesAfter === true,
196
+ clippedStart: flags.clippedStart === true,
197
+ clippedEnd: flags.clippedEnd === true,
198
+ short: flags.short === true,
199
+ past: input.now !== null && compareDateTime(occurrence.end, input.now) <= 0,
200
+ editable,
201
+ dragging: input.draggingKey === occurrence.key,
202
+ dropInvalid: input.draggingKey === occurrence.key && input.dropInvalid,
203
+ context: input.contextKey === occurrence.key,
204
+ resizable,
205
+ time,
206
+ title: event.title,
207
+ location: flags.withLocation === true ? (event.location ?? null) : null,
208
+ meta: metaText(input, occurrence, flags.continuesBefore === true),
209
+ style: flags.style ?? {},
210
+ };
211
+ }
212
+ function holdsDay(selection, date) {
213
+ if (selection === null || isPlainDateTime(selection.start))
214
+ return false;
215
+ const { start, end } = selection;
216
+ return compareDate(date, start) >= 0 && compareDate(date, end) <= 0;
217
+ }
218
+ function drawMonth(input, weeks, occurrences) {
219
+ const first = weeks[0] ?? [];
220
+ return {
221
+ weekdays: first.map((date) => ({
222
+ key: toISODate(date),
223
+ short: weekday(input.locale, date, 'short'),
224
+ long: weekday(input.locale, date, 'long'),
225
+ })),
226
+ rows: weeks.map((week) => {
227
+ const { segments } = layoutRow(occurrences, week, {});
228
+ const hidden = overflowByDay(segments, week.length, input.maxEvents);
229
+ return {
230
+ key: toISODate(week[0]),
231
+ weekNumber: isoWeekNumber(week[0]),
232
+ cells: week.map((date, index) => {
233
+ const shown = segments.filter((segment) => segment.start === index && segment.lane < input.maxEvents);
234
+ const continuing = segments.filter((segment) => segment.start < index &&
235
+ segment.start + segment.span > index &&
236
+ segment.lane < input.maxEvents);
237
+ const more = hidden[index] ?? 0;
238
+ return {
239
+ iso: toISODate(date),
240
+ date,
241
+ label: fullDate(input.locale, date),
242
+ count: input.t('events', { count: occurrencesOn(occurrences, date).length }),
243
+ tabIndex: isSameDate(date, input.date) ? 0 : -1,
244
+ today: input.today !== null && isSameDate(date, input.today),
245
+ outside: date.month !== input.date.month,
246
+ nonWorking: !isWorkingDay(date, input.workingHours),
247
+ selected: holdsDay(input.selection, date),
248
+ events: shown.map((segment) => {
249
+ const bar = segment.occurrence.allDay || isMultiDay(segment.occurrence);
250
+ return eventView(input, segment.occurrence, date, bar ? 'bar' : 'lane', {
251
+ continuesBefore: segment.continuesBefore,
252
+ continuesAfter: segment.continuesAfter,
253
+ style: bar
254
+ ? {
255
+ '--slotted-event-lane': segment.lane + 1,
256
+ '--slotted-event-span': segment.span,
257
+ }
258
+ : { '--slotted-event-lane': segment.lane + 1 },
259
+ });
260
+ }),
261
+ continuations: continuing.map((segment) => input.t('titleContinues', { title: segment.occurrence.event.title })),
262
+ more,
263
+ moreLabel: input.t('moreEvents', { count: more }),
264
+ };
265
+ }),
266
+ };
267
+ }),
268
+ };
269
+ }
270
+ function drawTimeGrid(input, days, occurrences) {
271
+ const [startHour, endHour] = input.dayHours;
272
+ const options = { locale: input.locale, hourCycle: input.hourCycle };
273
+ const { segments, lanes } = layoutRow(occurrences, days, { allDayOnly: true });
274
+ const isToday = (date) => input.today !== null && isSameDate(date, input.today);
275
+ const tabDay = (date) => isSameDate(date, input.date);
276
+ const selection = input.selection;
277
+ return {
278
+ days: days.length,
279
+ zone: zoneLabel(days[0], input.timeZone, input.locale),
280
+ lanes: Math.max(1, lanes),
281
+ hours: Array.from({ length: Math.max(0, endHour - startHour) }, (_, index) => ({
282
+ hour: startHour + index,
283
+ label: formatHour(startHour + index, options),
284
+ })),
285
+ headers: days.map((date) => {
286
+ const change = offsetChangeOn(date, input.timeZone);
287
+ const slots = change === null
288
+ ? null
289
+ : {
290
+ direction: change.minutes > 0 ? 'forward' : 'back',
291
+ hours: Math.abs(change.minutes) / 60,
292
+ at: formatTime(change.at, options),
293
+ };
294
+ return {
295
+ iso: toISODate(date),
296
+ date,
297
+ weekday: weekday(input.locale, date, 'short'),
298
+ label: fullDate(input.locale, date),
299
+ tabIndex: input.row === 'header' && tabDay(date) ? 0 : -1,
300
+ today: isToday(date),
301
+ offsetShort: slots === null ? null : input.t('offsetChangeShort', slots),
302
+ offsetLong: slots === null ? null : input.t('offsetChange', slots),
303
+ };
304
+ }),
305
+ allDay: days.map((date, index) => ({
306
+ iso: toISODate(date),
307
+ date,
308
+ tabIndex: input.row === 'all-day' && tabDay(date) ? 0 : -1,
309
+ today: isToday(date),
310
+ nonWorking: !isWorkingDay(date, input.workingHours),
311
+ selected: holdsDay(selection, date),
312
+ events: segments
313
+ .filter((segment) => segment.start === index)
314
+ .map((segment) => eventView(input, segment.occurrence, date, 'bar', {
315
+ continuesBefore: segment.continuesBefore,
316
+ continuesAfter: segment.continuesAfter,
317
+ style: {
318
+ '--slotted-event-lane': segment.lane + 1,
319
+ '--slotted-event-span': segment.span,
320
+ },
321
+ })),
322
+ continuations: segments
323
+ .filter((segment) => segment.start < index && segment.start + segment.span > index)
324
+ .map((segment) => input.t('titleContinues', { title: segment.occurrence.event.title })),
325
+ })),
326
+ columns: days.map((date) => {
327
+ const { items, more } = layoutColumn(occurrences, date, {
328
+ startHour,
329
+ endHour,
330
+ maxColumns: input.maxColumns,
331
+ minLength: MIN_BLOCK_MINUTES,
332
+ });
333
+ const change = offsetChangeOn(date, input.timeZone);
334
+ const now = input.now !== null && isSameDate(input.now.date, date) ? minutesOf(input.now) : null;
335
+ const timed = selection !== null &&
336
+ isPlainDateTime(selection.start) &&
337
+ isSameDate(selection.start.date, date)
338
+ ? selection
339
+ : null;
340
+ return {
341
+ iso: toISODate(date),
342
+ date,
343
+ tabIndex: input.row === 'timed' && tabDay(date) ? 0 : -1,
344
+ today: isToday(date),
345
+ nonWorking: !isWorkingDay(date, input.workingHours),
346
+ offHours: offHoursOn(date, input.workingHours, { startHour, endHour }).map((entry) => ({
347
+ '--slotted-event-start': entry.start,
348
+ '--slotted-event-length': entry.length,
349
+ })),
350
+ offsetLine: change === null
351
+ ? null
352
+ : { '--slotted-event-start': change.at.hour * 60 + change.at.minute - startHour * 60 },
353
+ selection: timed === null
354
+ ? null
355
+ : {
356
+ style: {
357
+ '--slotted-event-start': minutesOf(timed.start) - startHour * 60,
358
+ '--slotted-event-length': (isSameDate(timed.end.date, date) ? minutesOf(timed.end) : 1440) -
359
+ minutesOf(timed.start),
360
+ },
361
+ text: formatTimeRange(timed.start.time, timed.end.time, options),
362
+ },
363
+ items: items.map((item) => eventView(input, item.occurrence, date, 'block', {
364
+ continuesBefore: item.continuesBefore,
365
+ continuesAfter: item.continuesAfter,
366
+ clippedStart: item.clippedStart,
367
+ clippedEnd: item.clippedEnd,
368
+ short: item.length < SHORT_MINUTES,
369
+ withLocation: item.length >= SHORT_MINUTES,
370
+ style: {
371
+ '--slotted-event-start': item.start,
372
+ '--slotted-event-length': item.length,
373
+ '--slotted-event-column': item.column,
374
+ '--slotted-event-columns': item.columns,
375
+ '--slotted-event-span': item.span,
376
+ },
377
+ })),
378
+ more: more.map((entry) => ({
379
+ count: entry.occurrences.length,
380
+ overlay: entry.overlay,
381
+ label: input.t('moreEvents', { count: entry.occurrences.length }),
382
+ style: {
383
+ '--slotted-event-start': entry.start,
384
+ '--slotted-event-length': entry.length,
385
+ '--slotted-event-column': entry.column,
386
+ '--slotted-event-columns': entry.columns,
387
+ '--slotted-event-span': 1,
388
+ },
389
+ })),
390
+ now: now === null || now < startHour * 60 || now > endHour * 60
391
+ ? null
392
+ : { '--slotted-event-start': now - startHour * 60 },
393
+ };
394
+ }),
395
+ };
396
+ }
397
+ function drawList(input, days, occurrences) {
398
+ return listDays(occurrences, days).map((day) => ({
399
+ iso: toISODate(day.date),
400
+ headingId: `${input.id}-list-${toISODate(day.date)}`,
401
+ heading: listDayParts(day.date, input.locale),
402
+ today: input.today !== null && isSameDate(day.date, input.today),
403
+ events: day.occurrences.map((occurrence) => eventView(input, occurrence, day.date, 'list', { withLocation: true })),
404
+ }));
405
+ }
406
+
407
+ const ALL_VIEWS = ['month', 'week', 'day', 'list'];
408
+ const WIDGETS = "[data-part='day-number'], [data-part='event'], [data-part='more']";
409
+ let sequence = 0;
410
+ const sameKeys = (a, b) => a.length === b.length && a.every((key, index) => key === b[index]);
411
+ function sameSelection(a, b) {
412
+ if (a === null || b === null)
413
+ return a === b;
414
+ if (isPlainDateTime(a.start) !== isPlainDateTime(b.start))
415
+ return false;
416
+ if (isPlainDateTime(a.start)) {
417
+ return (compareDateTime(a.start, b.start) === 0 &&
418
+ compareDateTime(a.end, b.end) === 0);
419
+ }
420
+ return (compareDate(a.start, b.start) === 0 &&
421
+ compareDate(a.end, b.end) === 0);
422
+ }
423
+ const orderedDays = (a, b) => compareDate(a, b) <= 0 ? { start: a, end: b } : { start: b, end: a };
424
+ /** A minute of `date`; 1440 is 00:00 of the day after, where an exclusive end lands. */
425
+ const atMinutes = (date, minutes) => minutes >= 1440
426
+ ? plainDateTime(addDays(date, 1), timeOfSeconds(0))
427
+ : plainDateTime(date, timeOfSeconds(Math.max(0, minutes) * 60));
428
+ /**
429
+ * The day under a point, in one row of the grid, found by the cells' boxes.
430
+ * The day of the cell that holds an event is not it: a bar lives in its first
431
+ * day's cell, so a bar picked up by its middle measured every move from its
432
+ * start and travelled the days in between twice. Columns and the all-day row
433
+ * are vertical strips and answer by the horizontal position alone, so a hand
434
+ * that drifts off the row keeps its day; a month cell answers by both.
435
+ */
436
+ function dayUnder(root, row, x, y) {
437
+ for (const cell of root.querySelectorAll(`[data-row='${row}'][data-date]`)) {
438
+ const box = cell.getBoundingClientRect();
439
+ const across = x >= box.left && x < box.right;
440
+ if (across && (row !== 'day' || (y >= box.top && y < box.bottom))) {
441
+ return parseIso(cell.dataset['date'] ?? '');
442
+ }
443
+ }
444
+ return null;
445
+ }
446
+ const sameChange = (a, b) => JSON.stringify([a.start, a.end]) === JSON.stringify([b.start, b.end]);
447
+ const parseIso = (iso) => {
448
+ const [year, month, day] = iso.split('-').map(Number);
449
+ return { year, month, day };
450
+ };
451
+ /** One request: value, previous, reason, source, cancellable, not emitted for an equal value. */
452
+ function ask(current, next, equals, reason, source, emit) {
453
+ if (equals(current, next))
454
+ return false;
455
+ let cancelled = false;
456
+ emit({
457
+ value: next,
458
+ previous: current,
459
+ reason,
460
+ source,
461
+ get cancelled() {
462
+ return cancelled;
463
+ },
464
+ cancel() {
465
+ cancelled = true;
466
+ },
467
+ });
468
+ return !cancelled;
469
+ }
470
+ const pressReason = (event) => (event.detail === 0 ? 'keyboard' : 'pointer');
471
+ /**
472
+ * A calendar of events: month, week, day and list, over wall-clock values.
473
+ *
474
+ * **The events are the consumer's.** The family expands their recurrence, lays
475
+ * them out and asks, with a reason, to move the date, the view, the calendars
476
+ * in view, the chosen stretch of time and the open event. Each is a `model()`
477
+ * with a `…Request` output carrying the `ChangeRequest`, which the consumer can
478
+ * cancel before anything commits.
479
+ *
480
+ * **The grid is a layout grid from the APG with the day as its cell.** One cell
481
+ * holds the tab stop; arrows move the day; Enter goes into the day's events and
482
+ * Escape comes back out. The list is not a grid: every event is in the tab
483
+ * order, under a heading per day.
484
+ *
485
+ * **Below the compact size class the month and the week are a list** of the
486
+ * same days, without the view changing.
487
+ *
488
+ * It is not a form control: nothing it holds is a submitted value, so it
489
+ * implements no `ControlValueAccessor`.
490
+ */
491
+ class SlEventCalendar {
492
+ events = input([], /* @ts-ignore */
493
+ ...(ngDevMode ? [{ debugName: "events" }] : /* istanbul ignore next */ []));
494
+ calendars = input([], /* @ts-ignore */
495
+ ...(ngDevMode ? [{ debugName: "calendars" }] : /* istanbul ignore next */ []));
496
+ /** The views the switcher offers, in order. */
497
+ views = input(ALL_VIEWS, /* @ts-ignore */
498
+ ...(ngDevMode ? [{ debugName: "views" }] : /* istanbul ignore next */ []));
499
+ /** The day the calendar is on. Two-way. */
500
+ date = model(undefined, /* @ts-ignore */
501
+ ...(ngDevMode ? [{ debugName: "date" }] : /* istanbul ignore next */ []));
502
+ defaultDate = input(undefined, /* @ts-ignore */
503
+ ...(ngDevMode ? [{ debugName: "defaultDate" }] : /* istanbul ignore next */ []));
504
+ view = model(undefined, /* @ts-ignore */
505
+ ...(ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []));
506
+ defaultView = input(undefined, /* @ts-ignore */
507
+ ...(ngDevMode ? [{ debugName: "defaultView" }] : /* istanbul ignore next */ []));
508
+ /** Keys of the calendars drawn. Unbound starts with all of them. */
509
+ visibleCalendars = model(undefined, /* @ts-ignore */
510
+ ...(ngDevMode ? [{ debugName: "visibleCalendars" }] : /* istanbul ignore next */ []));
511
+ defaultVisibleCalendars = input(undefined, /* @ts-ignore */
512
+ ...(ngDevMode ? [{ debugName: "defaultVisibleCalendars" }] : /* istanbul ignore next */ []));
513
+ selectionMode = input('none', /* @ts-ignore */
514
+ ...(ngDevMode ? [{ debugName: "selectionMode" }] : /* istanbul ignore next */ []));
515
+ selection = model(undefined, /* @ts-ignore */
516
+ ...(ngDevMode ? [{ debugName: "selection" }] : /* istanbul ignore next */ []));
517
+ defaultSelection = input(undefined, /* @ts-ignore */
518
+ ...(ngDevMode ? [{ debugName: "defaultSelection" }] : /* istanbul ignore next */ []));
519
+ /** The key of the occurrence whose detail is open. */
520
+ openEvent = model(undefined, /* @ts-ignore */
521
+ ...(ngDevMode ? [{ debugName: "openEvent" }] : /* istanbul ignore next */ []));
522
+ defaultOpenEvent = input(undefined, /* @ts-ignore */
523
+ ...(ngDevMode ? [{ debugName: "defaultOpenEvent" }] : /* istanbul ignore next */ []));
524
+ /** Keeps an occurrence when it returns true — a search, a `filter-bar` predicate. */
525
+ filter = input(undefined, /* @ts-ignore */
526
+ ...(ngDevMode ? [{ debugName: "filter" }] : /* istanbul ignore next */ []));
527
+ /** Events move and resize, by dragging or by Alt and the arrows; a predicate decides per occurrence. */
528
+ editable = input(false, { ...(ngDevMode ? { debugName: "editable" } : /* istanbul ignore next */ {}), transform: (value) => typeof value === 'function'
529
+ ? value
530
+ : booleanAttribute(value) });
531
+ workingHours = input([], /* @ts-ignore */
532
+ ...(ngDevMode ? [{ debugName: "workingHours" }] : /* istanbul ignore next */ []));
533
+ header = input(true, { ...(ngDevMode ? { debugName: "header" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
534
+ loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
535
+ level = input(2, { ...(ngDevMode ? { debugName: "level" } : /* istanbul ignore next */ {}), transform: numberAttribute });
536
+ compact = input(undefined, /* @ts-ignore */
537
+ ...(ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []));
538
+ dayHours = input(undefined, /* @ts-ignore */
539
+ ...(ngDevMode ? [{ debugName: "dayHours" }] : /* istanbul ignore next */ []));
540
+ firstDayOfWeek = input(undefined, { ...(ngDevMode ? { debugName: "firstDayOfWeek" } : /* istanbul ignore next */ {}), transform: (value) => value === undefined || value === null ? undefined : numberAttribute(value) });
541
+ fixedWeeks = input(undefined, { ...(ngDevMode ? { debugName: "fixedWeeks" } : /* istanbul ignore next */ {}), transform: (value) => (value === undefined ? undefined : booleanAttribute(value)) });
542
+ hourCycle = input(undefined, /* @ts-ignore */
543
+ ...(ngDevMode ? [{ debugName: "hourCycle" }] : /* istanbul ignore next */ []));
544
+ listRange = input(undefined, /* @ts-ignore */
545
+ ...(ngDevMode ? [{ debugName: "listRange" }] : /* istanbul ignore next */ []));
546
+ loadingDelay = input(undefined, /* @ts-ignore */
547
+ ...(ngDevMode ? [{ debugName: "loadingDelay" }] : /* istanbul ignore next */ []));
548
+ loadingMinDuration = input(undefined, /* @ts-ignore */
549
+ ...(ngDevMode ? [{ debugName: "loadingMinDuration" }] : /* istanbul ignore next */ []));
550
+ /** BCP 47. Unset, the language in force (`provideSlotted`) decides. */
551
+ locale = input(undefined, /* @ts-ignore */
552
+ ...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
553
+ /**
554
+ * Words laid over the catalog of the language in force, key by key: the
555
+ * toolbar, the views, the empty and loading states, the counts and the
556
+ * sentences said aloud.
557
+ */
558
+ messages = input(undefined, /* @ts-ignore */
559
+ ...(ngDevMode ? [{ debugName: "messages" }] : /* istanbul ignore next */ []));
560
+ maxColumns = input(undefined, /* @ts-ignore */
561
+ ...(ngDevMode ? [{ debugName: "maxColumns" }] : /* istanbul ignore next */ []));
562
+ maxEvents = input(undefined, /* @ts-ignore */
563
+ ...(ngDevMode ? [{ debugName: "maxEvents" }] : /* istanbul ignore next */ []));
564
+ scrollTime = input(undefined, /* @ts-ignore */
565
+ ...(ngDevMode ? [{ debugName: "scrollTime" }] : /* istanbul ignore next */ []));
566
+ /** Minutes, 5 to 120: the lighter rules and the step of a selection or a drag. */
567
+ slotDuration = input(undefined, { ...(ngDevMode ? { debugName: "slotDuration" } : /* istanbul ignore next */ {}), transform: (value) => value === undefined || value === null ? undefined : numberAttribute(value) });
568
+ timeZone = input(undefined, /* @ts-ignore */
569
+ ...(ngDevMode ? [{ debugName: "timeZone" }] : /* istanbul ignore next */ []));
570
+ weekends = input(undefined, /* @ts-ignore */
571
+ ...(ngDevMode ? [{ debugName: "weekends" }] : /* istanbul ignore next */ []));
572
+ weekNumbers = input(undefined, { ...(ngDevMode ? { debugName: "weekNumbers" } : /* istanbul ignore next */ {}), transform: (value) => (value === undefined ? undefined : booleanAttribute(value)) });
573
+ dateRequest = output();
574
+ viewRequest = output();
575
+ visibleCalendarsRequest = output();
576
+ selectionRequest = output();
577
+ openEventRequest = output();
578
+ /**
579
+ * Before an event moves or its end does. Not a model: the family holds no
580
+ * event, and the application answers by changing `events`.
581
+ */
582
+ eventChangeRequest = output();
583
+ /**
584
+ * Whether an event may land where it is being moved, asked with the change
585
+ * `eventChangeRequest` would carry: at every step of a drag, and at every
586
+ * step Alt and an arrow try. A refused destination is drawn as refused, and
587
+ * letting go there puts the event back and asks for nothing.
588
+ */
589
+ canDrop = input(undefined, /* @ts-ignore */
590
+ ...(ngDevMode ? [{ debugName: "canDrop" }] : /* istanbul ignore next */ []));
591
+ /** A fact, after the period in view changes: fetch it. */
592
+ rangeChange = output();
593
+ eventContentTemplate = contentChild(SlEventCalendarEvent, /* @ts-ignore */
594
+ ...(ngDevMode ? [{ debugName: "eventContentTemplate" }] : /* istanbul ignore next */ []));
595
+ detail = contentChild(SlEventCalendarDetail, /* @ts-ignore */
596
+ ...(ngDevMode ? [{ debugName: "detail" }] : /* istanbul ignore next */ []));
597
+ dayContent = contentChild(SlEventCalendarDayContent, /* @ts-ignore */
598
+ ...(ngDevMode ? [{ debugName: "dayContent" }] : /* istanbul ignore next */ []));
599
+ actions = contentChild(SlEventCalendarActions, /* @ts-ignore */
600
+ ...(ngDevMode ? [{ debugName: "actions" }] : /* istanbul ignore next */ []));
601
+ empty = contentChild(SlEventCalendarEmpty, /* @ts-ignore */
602
+ ...(ngDevMode ? [{ debugName: "empty" }] : /* istanbul ignore next */ []));
603
+ errorContent = contentChild(SlEventCalendarError, /* @ts-ignore */
604
+ ...(ngDevMode ? [{ debugName: "errorContent" }] : /* istanbul ignore next */ []));
605
+ /* Read as the element: with a context menu the trigger component stands on it. */
606
+ body = viewChild('body', { ...(ngDevMode ? { debugName: "body" } : /* istanbul ignore next */ {}), read: ElementRef });
607
+ scroller = viewChild('scroller', /* @ts-ignore */
608
+ ...(ngDevMode ? [{ debugName: "scroller" }] : /* istanbul ignore next */ []));
609
+ filterButton = viewChild('filterButton', /* @ts-ignore */
610
+ ...(ngDevMode ? [{ debugName: "filterButton" }] : /* istanbul ignore next */ []));
611
+ morePopover = viewChild('morePopover', /* @ts-ignore */
612
+ ...(ngDevMode ? [{ debugName: "morePopover" }] : /* istanbul ignore next */ []));
613
+ detailPopover = viewChild('detailPopover', /* @ts-ignore */
614
+ ...(ngDevMode ? [{ debugName: "detailPopover" }] : /* istanbul ignore next */ []));
615
+ defaults = injectEventCalendarDefaults();
616
+ host = inject(ElementRef).nativeElement;
617
+ injector = inject(Injector);
618
+ writtenLabel = inject(new HostAttributeToken('aria-label'), { optional: true });
619
+ id = `sl-event-calendar-${String((sequence += 1))}`;
620
+ titleId = `${this.id}-title`;
621
+ /* ── Resolved options ──────────────────────────────────────────────── */
622
+ appLocale = injectLocale();
623
+ /** The family's words in the language in force, with this calendar's `messages` laid over them. */
624
+ t = injectMessages(eventCalendarMessages, this.messages);
625
+ localeValue = computed(() => this.locale() ?? this.appLocale(), /* @ts-ignore */
626
+ ...(ngDevMode ? [{ debugName: "localeValue" }] : /* istanbul ignore next */ []));
627
+ zoneValue = computed(() => this.timeZone() ?? this.defaults.timeZone, /* @ts-ignore */
628
+ ...(ngDevMode ? [{ debugName: "zoneValue" }] : /* istanbul ignore next */ []));
629
+ cycleValue = computed(() => this.hourCycle() ?? this.defaults.hourCycle, /* @ts-ignore */
630
+ ...(ngDevMode ? [{ debugName: "cycleValue" }] : /* istanbul ignore next */ []));
631
+ hoursValue = computed(() => this.dayHours() ?? this.defaults.dayHours, /* @ts-ignore */
632
+ ...(ngDevMode ? [{ debugName: "hoursValue" }] : /* istanbul ignore next */ []));
633
+ slotDurationValue = computed(() => slotMinutes(this.slotDuration() ?? this.defaults.slotDuration), /* @ts-ignore */
634
+ ...(ngDevMode ? [{ debugName: "slotDurationValue" }] : /* istanbul ignore next */ []));
635
+ scrollValue = computed(() => this.scrollTime() ?? this.defaults.scrollTime, /* @ts-ignore */
636
+ ...(ngDevMode ? [{ debugName: "scrollValue" }] : /* istanbul ignore next */ []));
637
+ maxEventsValue = computed(() => Math.max(1, this.maxEvents() ?? this.defaults.maxEvents), /* @ts-ignore */
638
+ ...(ngDevMode ? [{ debugName: "maxEventsValue" }] : /* istanbul ignore next */ []));
639
+ maxColumnsValue = computed(() => Math.max(2, this.maxColumns() ?? this.defaults.maxColumns), /* @ts-ignore */
640
+ ...(ngDevMode ? [{ debugName: "maxColumnsValue" }] : /* istanbul ignore next */ []));
641
+ /**
642
+ * As many columns as blocks of 64 pixels — a word of a wrapped title and its
643
+ * padding — fit in a day's column, never more than `maxColumns`; with one,
644
+ * the first column's events are drawn whole and the rest is a count laid
645
+ * over them. The event's container query has already hidden the time at
646
+ * this width.
647
+ */
648
+ columnsThatFit = computed(() => {
649
+ const width = this.columnWidth();
650
+ const most = this.maxColumnsValue();
651
+ return width === null ? most : Math.max(1, Math.min(most, Math.floor(width / 64)));
652
+ }, /* @ts-ignore */
653
+ ...(ngDevMode ? [{ debugName: "columnsThatFit" }] : /* istanbul ignore next */ []));
654
+ weekNumbersValue = computed(() => this.weekNumbers() ?? this.defaults.weekNumbers, /* @ts-ignore */
655
+ ...(ngDevMode ? [{ debugName: "weekNumbersValue" }] : /* istanbul ignore next */ []));
656
+ loadingDelayValue = computed(() => this.loadingDelay() ?? this.defaults.loadingDelay, /* @ts-ignore */
657
+ ...(ngDevMode ? [{ debugName: "loadingDelayValue" }] : /* istanbul ignore next */ []));
658
+ loadingMinDurationValue = computed(() => this.loadingMinDuration() ?? this.defaults.loadingMinDuration, /* @ts-ignore */
659
+ ...(ngDevMode ? [{ debugName: "loadingMinDurationValue" }] : /* istanbul ignore next */ []));
660
+ viewOptions = computed(() => ({
661
+ firstDayOfWeek: createDateFormat({
662
+ locale: this.localeValue(),
663
+ firstDayOfWeek: this.firstDayOfWeek() ?? this.defaults.firstDayOfWeek,
664
+ }).firstDayOfWeek,
665
+ weekends: this.weekends() ?? this.defaults.weekends,
666
+ fixedWeeks: this.fixedWeeks() ?? this.defaults.fixedWeeks,
667
+ listRange: this.listRange() ?? this.defaults.listRange,
668
+ }), /* @ts-ignore */
669
+ ...(ngDevMode ? [{ debugName: "viewOptions" }] : /* istanbul ignore next */ []));
670
+ /* ── The five models ───────────────────────────────────────────────── */
671
+ firstDate = signal(null, /* @ts-ignore */
672
+ ...(ngDevMode ? [{ debugName: "firstDate" }] : /* istanbul ignore next */ []));
673
+ currentDate = computed(() => this.date() ?? this.firstDate() ?? todayIn(this.zoneValue()), /* @ts-ignore */
674
+ ...(ngDevMode ? [{ debugName: "currentDate" }] : /* istanbul ignore next */ []));
675
+ /** Which view is showing. Public, so a template reaches it through `exportAs`. */
676
+ currentView = computed(() => this.view() ?? this.defaultView() ?? this.views()[0] ?? 'month', /* @ts-ignore */
677
+ ...(ngDevMode ? [{ debugName: "currentView" }] : /* istanbul ignore next */ []));
678
+ shown = computed(() => this.visibleCalendars() ??
679
+ this.defaultVisibleCalendars() ??
680
+ this.calendars().map((entry) => entry.key), /* @ts-ignore */
681
+ ...(ngDevMode ? [{ debugName: "shown" }] : /* istanbul ignore next */ []));
682
+ currentSelection = computed(() => {
683
+ const held = this.selection();
684
+ return held === undefined ? (this.defaultSelection() ?? null) : held;
685
+ }, /* @ts-ignore */
686
+ ...(ngDevMode ? [{ debugName: "currentSelection" }] : /* istanbul ignore next */ []));
687
+ currentOpen = computed(() => {
688
+ const held = this.openEvent();
689
+ return held === undefined ? (this.defaultOpenEvent() ?? null) : held;
690
+ }, /* @ts-ignore */
691
+ ...(ngDevMode ? [{ debugName: "currentOpen" }] : /* istanbul ignore next */ []));
692
+ /* ── Time ──────────────────────────────────────────────────────────── */
693
+ now = signal(null, /* @ts-ignore */
694
+ ...(ngDevMode ? [{ debugName: "now" }] : /* istanbul ignore next */ []));
695
+ today = computed(() => this.now()?.date ?? null, /* @ts-ignore */
696
+ ...(ngDevMode ? [{ debugName: "today" }] : /* istanbul ignore next */ []));
697
+ narrow = signal(false, /* @ts-ignore */
698
+ ...(ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []));
699
+ row = signal('timed', /* @ts-ignore */
700
+ ...(ngDevMode ? [{ debugName: "row" }] : /* istanbul ignore next */ []));
701
+ pending = signal(null, /* @ts-ignore */
702
+ ...(ngDevMode ? [{ debugName: "pending" }] : /* istanbul ignore next */ []));
703
+ moreDate = signal(null, /* @ts-ignore */
704
+ ...(ngDevMode ? [{ debugName: "moreDate" }] : /* istanbul ignore next */ []));
705
+ moreIso = computed(() => {
706
+ const date = this.moreDate();
707
+ return date === null ? null : toISODate(date);
708
+ }, /* @ts-ignore */
709
+ ...(ngDevMode ? [{ debugName: "moreIso" }] : /* istanbul ignore next */ []));
710
+ detailAnchor = signal(null, /* @ts-ignore */
711
+ ...(ngDevMode ? [{ debugName: "detailAnchor" }] : /* istanbul ignore next */ []));
712
+ /** The "+N" or the day number a day's sheet returns focus to. */
713
+ moreAnchor = signal(null, /* @ts-ignore */
714
+ ...(ngDevMode ? [{ debugName: "moreAnchor" }] : /* istanbul ignore next */ []));
715
+ layout = computed(() => {
716
+ const view = this.currentView();
717
+ const compact = this.compact() ?? this.defaults.compact;
718
+ return view === 'list' ||
719
+ (this.narrow() && compact === 'list' && (view === 'month' || view === 'week'))
720
+ ? 'list'
721
+ : 'grid';
722
+ }, /* @ts-ignore */
723
+ ...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
724
+ range = computed(() => {
725
+ const view = this.currentView();
726
+ const date = this.currentDate();
727
+ const options = this.viewOptions();
728
+ return this.layout() === 'list' && view !== 'list'
729
+ ? viewRange('list', date, { ...options, listRange: view === 'month' ? 'month' : 'week' })
730
+ : viewRange(view, date, options);
731
+ }, /* @ts-ignore */
732
+ ...(ngDevMode ? [{ debugName: "range" }] : /* istanbul ignore next */ []));
733
+ collator = computed(() => new Intl.Collator(this.localeValue()), /* @ts-ignore */
734
+ ...(ngDevMode ? [{ debugName: "collator" }] : /* istanbul ignore next */ []));
735
+ occurrences = computed(() => {
736
+ const range = this.range();
737
+ const keys = this.calendars().map((entry) => entry.key);
738
+ const shown = this.shown();
739
+ const filter = this.filter();
740
+ return occurrencesIn(this.events(), range.start, range.end, {
741
+ collator: this.collator(),
742
+ }).filter((occurrence) => (occurrence.event.calendar === undefined ||
743
+ !keys.includes(occurrence.event.calendar) ||
744
+ shown.includes(occurrence.event.calendar)) &&
745
+ (filter === undefined || filter(occurrence)));
746
+ }, /* @ts-ignore */
747
+ ...(ngDevMode ? [{ debugName: "occurrences" }] : /* istanbul ignore next */ []));
748
+ canEdit = computed(() => {
749
+ const editable = this.editable();
750
+ return typeof editable === 'function' ? editable : () => editable;
751
+ }, /* @ts-ignore */
752
+ ...(ngDevMode ? [{ debugName: "canEdit" }] : /* istanbul ignore next */ []));
753
+ /**
754
+ * The occurrence a pointer is moving, drawn where it would land: the views
755
+ * lay the proposal out like any other placement, so a moved block takes its
756
+ * columns and pushes its neighbours as it will once the application agrees.
757
+ */
758
+ editing = signal(null, /* @ts-ignore */
759
+ ...(ngDevMode ? [{ debugName: "editing" }] : /* istanbul ignore next */ []));
760
+ laidOut = computed(() => {
761
+ const editing = this.editing();
762
+ const occurrences = this.occurrences();
763
+ return editing === null
764
+ ? occurrences
765
+ : withPlacement(occurrences, editing.key, editing.placement);
766
+ }, /* @ts-ignore */
767
+ ...(ngDevMode ? [{ debugName: "laidOut" }] : /* istanbul ignore next */ []));
768
+ title = computed(() => viewTitle(this.currentView(), this.range(), this.currentDate(), {
769
+ locale: this.localeValue(),
770
+ listRange: this.currentView() === 'list' ? this.viewOptions().listRange : undefined,
771
+ }), /* @ts-ignore */
772
+ ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
773
+ drawingInput = computed(() => ({
774
+ id: this.id,
775
+ t: this.t,
776
+ locale: this.localeValue(),
777
+ hourCycle: this.cycleValue(),
778
+ timeZone: this.zoneValue(),
779
+ view: this.currentView(),
780
+ date: this.currentDate(),
781
+ today: this.today(),
782
+ now: this.now(),
783
+ calendars: this.calendars(),
784
+ openKey: this.currentOpen(),
785
+ selection: this.pending() ?? this.contextSlot() ?? this.currentSelection(),
786
+ narrow: this.narrow(),
787
+ maxEvents: this.maxEventsValue(),
788
+ maxColumns: this.columnsThatFit(),
789
+ dayHours: this.hoursValue(),
790
+ workingHours: this.workingHours(),
791
+ row: this.row(),
792
+ canEdit: this.canEdit(),
793
+ draggingKey: this.editing()?.key ?? null,
794
+ dropInvalid: this.editing()?.invalid ?? false,
795
+ contextKey: this.contextKey(),
796
+ }), /* @ts-ignore */
797
+ ...(ngDevMode ? [{ debugName: "drawingInput" }] : /* istanbul ignore next */ []));
798
+ monthDrawing = computed(() => drawMonth(this.drawingInput(), this.range().weeks, this.laidOut()), /* @ts-ignore */
799
+ ...(ngDevMode ? [{ debugName: "monthDrawing" }] : /* istanbul ignore next */ []));
800
+ timeDrawing = computed(() => drawTimeGrid(this.drawingInput(), this.range().days, this.laidOut()), /* @ts-ignore */
801
+ ...(ngDevMode ? [{ debugName: "timeDrawing" }] : /* istanbul ignore next */ []));
802
+ listDrawing = computed(() => drawList(this.drawingInput(), this.range().days, this.laidOut()), /* @ts-ignore */
803
+ ...(ngDevMode ? [{ debugName: "listDrawing" }] : /* istanbul ignore next */ []));
804
+ moreViews = computed(() => {
805
+ const date = this.moreDate();
806
+ if (date === null)
807
+ return [];
808
+ return (drawList(this.drawingInput(), [date], occurrencesOn(this.occurrences(), date))[0]?.events ??
809
+ []);
810
+ }, /* @ts-ignore */
811
+ ...(ngDevMode ? [{ debugName: "moreViews" }] : /* istanbul ignore next */ []));
812
+ openOccurrence = computed(() => {
813
+ const key = this.currentOpen();
814
+ return key === null ? null : (this.occurrences().find((entry) => entry.key === key) ?? null);
815
+ }, /* @ts-ignore */
816
+ ...(ngDevMode ? [{ debugName: "openOccurrence" }] : /* istanbul ignore next */ []));
817
+ hostsDetail = computed(() => this.detail() !== undefined, /* @ts-ignore */
818
+ ...(ngDevMode ? [{ debugName: "hostsDetail" }] : /* istanbul ignore next */ []));
819
+ emptyKey = computed(() => this.currentView() === 'month' ? 'month' : this.currentView() === 'day' ? 'day' : 'week', /* @ts-ignore */
820
+ ...(ngDevMode ? [{ debugName: "emptyKey" }] : /* istanbul ignore next */ []));
821
+ /** The empty state's sentence for the period in view. */
822
+ emptyText = computed(() => this.t(`empty.${this.emptyKey()}`), /* @ts-ignore */
823
+ ...(ngDevMode ? [{ debugName: "emptyText" }] : /* istanbul ignore next */ []));
824
+ /** The names of the two steps, which say how far each one moves. */
825
+ previousLabel = computed(() => this.t(`previous.${this.currentView()}`), /* @ts-ignore */
826
+ ...(ngDevMode ? [{ debugName: "previousLabel" }] : /* istanbul ignore next */ []));
827
+ nextLabel = computed(() => this.t(`next.${this.currentView()}`), /* @ts-ignore */
828
+ ...(ngDevMode ? [{ debugName: "nextLabel" }] : /* istanbul ignore next */ []));
829
+ /** A view's name in the switcher. */
830
+ viewLabel(view) {
831
+ return this.t(`view.${view}`);
832
+ }
833
+ /**
834
+ * The indicator exists while there is a wait, and a little after: through
835
+ * the delay it may still be withheld in, and the hold it keeps once shown.
836
+ * Mounted with nothing to report it was an element that is only `hidden`,
837
+ * and a `hidden` progress bar is still painted in its linear shape.
838
+ */
839
+ loaderMounted = signal(false, /* @ts-ignore */
840
+ ...(ngDevMode ? [{ debugName: "loaderMounted" }] : /* istanbul ignore next */ []));
841
+ /** One day's column, measured: a cluster never draws blocks too narrow for a word. */
842
+ columnWidth = signal(null, /* @ts-ignore */
843
+ ...(ngDevMode ? [{ debugName: "columnWidth" }] : /* istanbul ignore next */ []));
844
+ selectionAnchor = null;
845
+ drag = null;
846
+ edit = null;
847
+ /** A drag ends in a click on the event it moved; that click opens nothing. */
848
+ swallowClick = false;
849
+ closeDetail = () => this.requestOpen(null, 'programmatic');
850
+ /* ── Context menu ──────────────────────────────────────────────────── */
851
+ contextMenu = contentChild(SlEventCalendarContextMenu, /* @ts-ignore */
852
+ ...(ngDevMode ? [{ debugName: "contextMenu" }] : /* istanbul ignore next */ []));
853
+ contextMenuRef = viewChild('contextMenuRef', /* @ts-ignore */
854
+ ...(ngDevMode ? [{ debugName: "contextMenuRef" }] : /* istanbul ignore next */ []));
855
+ /* The items are the application's template, declared outside the menu: an
856
+ embedded view injects from where it was declared, so the menu is given
857
+ to them. */
858
+ contextInjector = computed(() => {
859
+ const menu = this.contextMenuRef();
860
+ return menu === undefined
861
+ ? null
862
+ : Injector.create({
863
+ providers: [{ provide: SlMenu, useValue: menu }],
864
+ parent: this.injector,
865
+ });
866
+ }, /* @ts-ignore */
867
+ ...(ngDevMode ? [{ debugName: "contextInjector" }] : /* istanbul ignore next */ []));
868
+ /**
869
+ * The target of the menu that shows, and the element it stands on. Its event
870
+ * carries `data-context`; its stretch is drawn as the selection being made,
871
+ * so the reader sees what "New event" will cover before choosing it.
872
+ */
873
+ contextOn = signal(null, /* @ts-ignore */
874
+ ...(ngDevMode ? [{ debugName: "contextOn" }] : /* istanbul ignore next */ []));
875
+ /* What the press that is opening the menu pointed at, resolved before the
876
+ family asks to open; the request is refused when it pointed at nothing. */
877
+ aimed = null;
878
+ contextKey = computed(() => {
879
+ const on = this.contextOn();
880
+ return on?.target.kind === 'event' ? on.target.occurrence.key : null;
881
+ }, /* @ts-ignore */
882
+ ...(ngDevMode ? [{ debugName: "contextKey" }] : /* istanbul ignore next */ []));
883
+ contextSlot = computed(() => {
884
+ const on = this.contextOn();
885
+ return on?.target.kind === 'slot' ? on.target.slot : null;
886
+ }, /* @ts-ignore */
887
+ ...(ngDevMode ? [{ debugName: "contextSlot" }] : /* istanbul ignore next */ []));
888
+ contextLabel = computed(() => {
889
+ const on = this.contextOn();
890
+ if (on === null)
891
+ return undefined;
892
+ return on.target.kind === 'event'
893
+ ? on.target.occurrence.event.title
894
+ : this.stretchWords(on.target.slot);
895
+ }, /* @ts-ignore */
896
+ ...(ngDevMode ? [{ debugName: "contextLabel" }] : /* istanbul ignore next */ []));
897
+ constructor() {
898
+ const destroyRef = inject(DestroyRef);
899
+ /* Now, ticked on the minute after the first paint. */
900
+ afterNextRender(() => {
901
+ let timer;
902
+ const tick = () => {
903
+ this.now.set(nowDateTimeIn(this.zoneValue()));
904
+ timer = setTimeout(tick, 60_000 - (Date.now() % 60_000));
905
+ };
906
+ tick();
907
+ const gate = createWidthGate(this.host, {
908
+ at: COMPACT_BELOW,
909
+ onChange: (narrow) => this.narrow.set(narrow),
910
+ });
911
+ this.narrow.set(gate.narrow());
912
+ destroyRef.onDestroy(() => {
913
+ clearTimeout(timer);
914
+ gate.destroy();
915
+ });
916
+ });
917
+ /* The period in view, reported after it changes. */
918
+ let reported = null;
919
+ effect(() => {
920
+ const range = this.range();
921
+ const view = this.currentView();
922
+ const key = `${toISODate(range.start)}/${toISODate(range.end)}/${view}`;
923
+ if (key === reported)
924
+ return;
925
+ reported = key;
926
+ untracked(() => this.rangeChange.emit({ start: range.start, end: range.end, view }));
927
+ });
928
+ /* `slMenuTriggerFor` binds `data-part` to null on its own element, which
929
+ erases the part this family wrote; the expression is a constant, so the
930
+ part written back after the first render stays. */
931
+ afterRenderEffect(() => {
932
+ const button = this.filterButton()?.nativeElement;
933
+ if (button !== undefined && button.getAttribute('data-part') !== 'filter') {
934
+ button.setAttribute('data-part', 'filter');
935
+ }
936
+ });
937
+ /* The detail stands on the event that opened it, or on the "+N" it came from. */
938
+ afterRenderEffect(() => {
939
+ const popover = this.detailPopover();
940
+ const key = this.currentOpen();
941
+ if (popover === undefined || key === null)
942
+ return;
943
+ const drawn = this.eventElement(key);
944
+ popover.anchorNode.set(drawn ?? this.detailAnchor());
945
+ });
946
+ /* Entering the hours scrolls to the working morning; paging keeps the place. */
947
+ let enteredHours = false;
948
+ afterRenderEffect(() => {
949
+ const inHours = this.layout() === 'grid' && (this.currentView() === 'week' || this.currentView() === 'day');
950
+ if (inHours && !enteredHours)
951
+ untracked(() => this.scrollToTime(this.scrollValue()));
952
+ enteredHours = inHours;
953
+ });
954
+ effect((onCleanup) => {
955
+ if (this.loading()) {
956
+ this.loaderMounted.set(true);
957
+ return;
958
+ }
959
+ const timer = setTimeout(() => this.loaderMounted.set(false), untracked(() => this.loadingDelayValue() + this.loadingMinDurationValue()));
960
+ onCleanup(() => clearTimeout(timer));
961
+ });
962
+ let observer = null;
963
+ let observed = null;
964
+ afterRenderEffect(() => {
965
+ this.currentView();
966
+ const column = this.scroller()?.nativeElement.querySelector("[data-part='column']") ?? null;
967
+ if (column === observed)
968
+ return;
969
+ observer?.disconnect();
970
+ observed = column;
971
+ if (column === null || typeof ResizeObserver === 'undefined') {
972
+ untracked(() => this.columnWidth.set(null));
973
+ return;
974
+ }
975
+ const measure = () => this.columnWidth.set(column.getBoundingClientRect().width || null);
976
+ observer = new ResizeObserver(measure);
977
+ observer.observe(column);
978
+ untracked(measure);
979
+ });
980
+ destroyRef.onDestroy(() => observer?.disconnect());
981
+ /* A template binds no capture phase; the click a drag ends in is stopped here. */
982
+ this.host.addEventListener('click', this.onClickCapture, true);
983
+ this.host.addEventListener('contextmenu', this.onContextCapture, true);
984
+ this.host.addEventListener('keydown', this.onContextKeyCapture, true);
985
+ this.host.addEventListener('pointerdown', this.onPressCapture, true);
986
+ destroyRef.onDestroy(() => {
987
+ this.host.removeEventListener('click', this.onClickCapture, true);
988
+ this.host.removeEventListener('contextmenu', this.onContextCapture, true);
989
+ this.host.removeEventListener('keydown', this.onContextKeyCapture, true);
990
+ this.host.removeEventListener('pointerdown', this.onPressCapture, true);
991
+ });
992
+ /* One polite announcement per wait, after the delay the indicator waits. */
993
+ effect((onCleanup) => {
994
+ if (!this.loading())
995
+ return;
996
+ const words = untracked(() => this.t('loading'));
997
+ const timer = setTimeout(() => getLiveAnnouncer().announce(words), untracked(() => this.loadingDelayValue()));
998
+ onCleanup(() => clearTimeout(timer));
999
+ });
1000
+ }
1001
+ ngOnInit() {
1002
+ this.firstDate.set(this.defaultDate() ?? todayIn(this.zoneValue()));
1003
+ if (this.writtenLabel !== null)
1004
+ this.host.setAttribute('aria-label', this.writtenLabel);
1005
+ }
1006
+ /* ── Requests ──────────────────────────────────────────────────────── */
1007
+ requestDate(next, reason, source) {
1008
+ const accepted = ask(this.currentDate(), next, isSameDate, reason, source, (request) => this.dateRequest.emit(request));
1009
+ if (accepted)
1010
+ this.date.set(next);
1011
+ return accepted;
1012
+ }
1013
+ requestView(next, reason, source) {
1014
+ const accepted = ask(this.currentView(), next, Object.is, reason, source, (request) => this.viewRequest.emit(request));
1015
+ if (accepted)
1016
+ this.view.set(next);
1017
+ return accepted;
1018
+ }
1019
+ requestVisible(next, reason, source) {
1020
+ const accepted = ask(this.shown(), next, sameKeys, reason, source, (request) => this.visibleCalendarsRequest.emit(request));
1021
+ if (accepted)
1022
+ this.visibleCalendars.set(next);
1023
+ return accepted;
1024
+ }
1025
+ requestSelection(next, reason, source) {
1026
+ const accepted = ask(this.currentSelection(), next, sameSelection, reason, source, (request) => this.selectionRequest.emit(request));
1027
+ if (accepted)
1028
+ this.selection.set(next);
1029
+ return accepted;
1030
+ }
1031
+ requestOpen(next, reason, source) {
1032
+ const accepted = ask(this.currentOpen(), next, Object.is, reason, source, (request) => this.openEventRequest.emit(request));
1033
+ if (accepted)
1034
+ this.openEvent.set(next);
1035
+ return accepted;
1036
+ }
1037
+ /** The change the family would ask for: `canDrop` and `eventChangeRequest` read the same one. */
1038
+ changeFor(occurrence, placement, kind) {
1039
+ return {
1040
+ key: occurrence.key,
1041
+ event: occurrence.event,
1042
+ occurrence: occurrence.start.date,
1043
+ recurring: occurrence.recurring,
1044
+ kind,
1045
+ ...placeOccurrence(placement),
1046
+ };
1047
+ }
1048
+ allows(occurrence, placement, kind) {
1049
+ const canDrop = this.canDrop();
1050
+ return canDrop === undefined || canDrop(this.changeFor(occurrence, placement, kind));
1051
+ }
1052
+ /** Asks the application to put an occurrence somewhere else; the family holds no event. */
1053
+ requestEventChange(occurrence, placement, kind, reason, source) {
1054
+ const change = (value) => this.changeFor(occurrence, value, kind);
1055
+ const accepted = ask(change(placementOf(occurrence)), change(placement), sameChange, reason, source, (request) => this.eventChangeRequest.emit(request));
1056
+ if (accepted) {
1057
+ getLiveAnnouncer().announce(`${occurrence.event.title}, ${formatOccurrence({ ...occurrence, start: placement.start, end: placement.end }, { locale: this.localeValue(), hourCycle: this.cycleValue() })}`);
1058
+ }
1059
+ return accepted;
1060
+ }
1061
+ /* ── The imperative actions ────────────────────────────────────────── */
1062
+ /** Puts focus on the cell holding the grid's tab stop, or the first event of a list. */
1063
+ focus() {
1064
+ const body = this.body()?.nativeElement;
1065
+ (body?.querySelector("[data-row][tabindex='0']") ??
1066
+ body?.querySelector("[data-part='event']"))?.focus();
1067
+ }
1068
+ /** Moves the calendar to a date and focuses its cell. */
1069
+ focusDate(next) {
1070
+ const row = this.currentView() === 'month' ? 'day' : this.row();
1071
+ this.requestDate(next, 'programmatic');
1072
+ this.focusCell(next, row);
1073
+ }
1074
+ /** Focuses an occurrence that is drawn, by key; returns whether one was. */
1075
+ focusEvent(key) {
1076
+ const element = this.eventElement(key);
1077
+ element?.focus();
1078
+ return element !== null;
1079
+ }
1080
+ /** Scrolls the hours so `time` is at the top. */
1081
+ scrollToTime(time) {
1082
+ const scroller = this.scroller()?.nativeElement;
1083
+ const column = scroller?.querySelector("[data-part='column']");
1084
+ if (scroller === undefined || column === null || column === undefined)
1085
+ return;
1086
+ const [startHour, endHour] = this.hoursValue();
1087
+ const hourSize = column.getBoundingClientRect().height / Math.max(1, endHour - startHour);
1088
+ /* Half a label above the hour: the label is centred on its rule, and a
1089
+ scroll that stopped on the rule cut the first visible one in half. */
1090
+ /* Half a line of the label's own type: its box is the whole hour. */
1091
+ const label = scroller.querySelector("[data-part='hour']");
1092
+ const lead = label === null ? 0 : parseFloat(getComputedStyle(label).lineHeight) / 2 || 0;
1093
+ scroller.scrollTop = Math.max(0, (secondsOfDay(time) / 3600 - startHour) * hourSize - lead);
1094
+ }
1095
+ /* ── Template handlers ─────────────────────────────────────────────── */
1096
+ swatch(key) {
1097
+ const color = calendarColor(key, this.calendars());
1098
+ return color === null ? 'currentColor' : `var(--slotted-data-${color})`;
1099
+ }
1100
+ /** When the open occurrence happens, as the two parts the detail writes. */
1101
+ whenOf(occurrence) {
1102
+ return occurrenceWhen(occurrence, { locale: this.localeValue(), hourCycle: this.cycleValue() });
1103
+ }
1104
+ dateLabel(date) {
1105
+ return fullDate(this.localeValue(), date);
1106
+ }
1107
+ step(direction, event) {
1108
+ this.requestDate(stepView(this.currentView(), this.currentDate(), direction, this.viewOptions()), pressReason(event), event);
1109
+ }
1110
+ goToday(event) {
1111
+ this.requestDate(this.today() ?? todayIn(this.zoneValue()), pressReason(event), event);
1112
+ }
1113
+ onViewRequest(request) {
1114
+ if (request.value === undefined)
1115
+ return;
1116
+ if (!this.requestView(request.value, request.reason, request.source)) {
1117
+ request.cancel();
1118
+ }
1119
+ }
1120
+ onCalendarRequest(key, request) {
1121
+ const shown = this.shown();
1122
+ const next = request.value
1123
+ ? this.calendars()
1124
+ .map((entry) => entry.key)
1125
+ .filter((candidate) => candidate === key || shown.includes(candidate))
1126
+ : shown.filter((candidate) => candidate !== key);
1127
+ if (!this.requestVisible(next, request.reason, request.source))
1128
+ request.cancel();
1129
+ }
1130
+ drill(date, event) {
1131
+ /* A month of marks on a phone opens the day's events where the finger is,
1132
+ as a sheet; the day view there is a list of one day. */
1133
+ if (this.narrow() && this.currentView() === 'month' && this.layout() === 'grid') {
1134
+ this.openMore(date, event);
1135
+ return;
1136
+ }
1137
+ const reason = pressReason(event);
1138
+ this.requestView('day', reason, event);
1139
+ this.requestDate(date, reason, event);
1140
+ }
1141
+ activate(view, event) {
1142
+ this.detailAnchor.set(event.currentTarget);
1143
+ this.moreDate.set(null);
1144
+ this.requestOpen(this.currentOpen() === view.key ? null : view.key, pressReason(event), event);
1145
+ }
1146
+ openMore(date, event) {
1147
+ const held = this.moreDate();
1148
+ if (held !== null && isSameDate(held, date)) {
1149
+ this.moreDate.set(null);
1150
+ return;
1151
+ }
1152
+ this.moreAnchor.set(event.currentTarget);
1153
+ this.morePopover()?.anchorNode.set(event.currentTarget);
1154
+ this.moreDate.set(date);
1155
+ }
1156
+ onMoreOpen(open) {
1157
+ if (!open)
1158
+ this.moreDate.set(null);
1159
+ }
1160
+ onDetailRequest(request) {
1161
+ if (request.value)
1162
+ return;
1163
+ if (!this.requestOpen(null, request.reason, request.source))
1164
+ request.cancel();
1165
+ }
1166
+ eventElement(key) {
1167
+ return this.host.querySelector(`[data-part='event'][data-key='${CSS.escape(key)}']`);
1168
+ }
1169
+ focusCell(date, row) {
1170
+ afterNextRender(() => {
1171
+ this.body()
1172
+ ?.nativeElement.querySelector(`[data-row='${row}'][data-date='${toISODate(date)}']`)
1173
+ ?.focus();
1174
+ }, { injector: this.injector });
1175
+ }
1176
+ /** A stretch in words: the day, its hours, or the first and the last day. */
1177
+ stretchWords(next) {
1178
+ const locale = this.localeValue();
1179
+ return isPlainDateTime(next.start)
1180
+ ? `${fullDate(locale, next.start.date)}, ${formatTimeRange(next.start.time, next.end.time, { locale, hourCycle: this.cycleValue() })}`
1181
+ : isSameDate(next.start, next.end)
1182
+ ? fullDate(locale, next.start)
1183
+ : `${fullDate(locale, next.start)} – ${fullDate(locale, next.end)}`;
1184
+ }
1185
+ announce(next) {
1186
+ getLiveAnnouncer().announce(this.t('selected', { text: this.stretchWords(next) }));
1187
+ }
1188
+ /* ── Selection by pointer ──────────────────────────────────────────── */
1189
+ minuteAt(column, clientY) {
1190
+ const [startHour, endHour] = this.hoursValue();
1191
+ const slot = this.slotDurationValue();
1192
+ const rect = column.getBoundingClientRect();
1193
+ const raw = startHour * 60 +
1194
+ ((clientY - rect.top) / Math.max(1, rect.height)) * (endHour - startHour) * 60;
1195
+ return Math.min(endHour * 60, Math.max(startHour * 60, Math.floor(raw / slot) * slot));
1196
+ }
1197
+ /**
1198
+ * The press is aimed before the `context-menu` family sees it — at an event,
1199
+ * or at the stretch under the pointer. A press at nothing, or at a target
1200
+ * the application gives no menu, is stopped here, so the family never
1201
+ * prevents it and the browser's own menu opens.
1202
+ */
1203
+ aimAt(target, clientY) {
1204
+ this.aimed = null;
1205
+ const items = this.contextMenu();
1206
+ const body = this.body()?.nativeElement;
1207
+ /* Containment rather than `instanceof`: the node may carry another
1208
+ window's constructors. */
1209
+ if (items === undefined || body === undefined || target === null)
1210
+ return null;
1211
+ if (!body.contains(target))
1212
+ return null;
1213
+ const from = target;
1214
+ const drawn = from.closest("[data-part='event'][data-key]");
1215
+ const occurrence = drawn === null
1216
+ ? undefined
1217
+ : this.occurrences().find((entry) => entry.key === drawn.dataset['key']);
1218
+ let found;
1219
+ if (drawn !== null && occurrence !== undefined) {
1220
+ found = { target: { kind: 'event', occurrence }, element: drawn };
1221
+ }
1222
+ else {
1223
+ const cell = from.closest('[data-date]');
1224
+ const iso = cell?.dataset['date'];
1225
+ if (cell === null || cell === undefined || iso === undefined)
1226
+ return null;
1227
+ const [year, month, day] = iso.split('-').map(Number);
1228
+ const timed = cell.dataset['row'] === 'timed';
1229
+ const slot = contextSlot({
1230
+ date: { year, month, day },
1231
+ minute: timed && clientY !== null ? this.minuteAt(cell, clientY) : null,
1232
+ timed,
1233
+ held: this.pending() ?? this.currentSelection(),
1234
+ slot: this.slotDurationValue(),
1235
+ endMinute: this.hoursValue()[1] * 60,
1236
+ });
1237
+ /* From the keyboard a column is the height of the day: the menu hangs
1238
+ from the selection drawn in it, or from the day's header. */
1239
+ const element = timed && clientY === null
1240
+ ? (cell.querySelector("[data-part='selection']") ??
1241
+ body.querySelector(`[data-part='column-header'][data-date='${iso}']`) ??
1242
+ cell)
1243
+ : cell;
1244
+ found = { target: { kind: 'slot', slot }, element };
1245
+ }
1246
+ if (!items.for()(found.target))
1247
+ return null;
1248
+ this.aimed = found;
1249
+ return found;
1250
+ }
1251
+ onContextCapture = (event) => {
1252
+ if (this.contextMenu() === undefined)
1253
+ return;
1254
+ if (this.aimAt(event.target, event.clientY) === null)
1255
+ event.stopPropagation();
1256
+ };
1257
+ onContextKeyCapture = (event) => {
1258
+ if (this.contextMenu() === undefined)
1259
+ return;
1260
+ if (event.key !== 'ContextMenu' && !(event.key === 'F10' && event.shiftKey))
1261
+ return;
1262
+ if (this.aimAt(event.target, null) === null)
1263
+ event.stopPropagation();
1264
+ };
1265
+ onPressCapture = (event) => {
1266
+ if (this.contextMenu() === undefined || event.pointerType === 'mouse')
1267
+ return;
1268
+ this.aimAt(event.target, event.clientY);
1269
+ };
1270
+ onContextRequest(request) {
1271
+ if (!request.value) {
1272
+ this.contextOn.set(null);
1273
+ return;
1274
+ }
1275
+ const found = this.aimed;
1276
+ if (found === null) {
1277
+ request.cancel();
1278
+ return;
1279
+ }
1280
+ this.contextOn.set(found);
1281
+ /* From the keyboard the menu hangs from what it acts on, not the grid. */
1282
+ if (request.reason === 'keyboard')
1283
+ this.contextMenuRef()?.anchor.set(found.element);
1284
+ }
1285
+ onClickCapture = (event) => {
1286
+ if (!this.swallowClick)
1287
+ return;
1288
+ this.swallowClick = false;
1289
+ event.preventDefault();
1290
+ event.stopPropagation();
1291
+ };
1292
+ /**
1293
+ * A press on an editable event picks it up once it travels four pixels;
1294
+ * short of that it is a click. The resize handle moves the end only.
1295
+ */
1296
+ startEdit(event) {
1297
+ const target = event.target;
1298
+ const element = target.closest("[data-part='event'][data-editable]");
1299
+ const cell = element?.closest('[data-row]');
1300
+ const key = element?.dataset['key'];
1301
+ const iso = cell?.dataset['date'];
1302
+ if (element === null || element === undefined || cell === null || cell === undefined)
1303
+ return false;
1304
+ const occurrence = this.occurrences().find((entry) => entry.key === key);
1305
+ if (occurrence === undefined || iso === undefined)
1306
+ return false;
1307
+ const [startHour, endHour] = this.hoursValue();
1308
+ const slot = this.slotDurationValue();
1309
+ this.edit = {
1310
+ occurrence,
1311
+ kind: target.closest("[data-part='resize-handle']") ? 'resize' : 'move',
1312
+ row: cell.dataset['row'] ?? '',
1313
+ date: dayUnder(this.host, cell.dataset['row'] ?? '', event.clientX, event.clientY) ??
1314
+ parseIso(iso),
1315
+ x: event.clientX,
1316
+ y: event.clientY,
1317
+ started: false,
1318
+ placement: placementOf(occurrence),
1319
+ invalid: false,
1320
+ };
1321
+ const hourSize = () => Math.max(1, cell.getBoundingClientRect().height / Math.max(1, endHour - startHour));
1322
+ const move = (moved) => {
1323
+ const state = this.edit;
1324
+ if (state === null)
1325
+ return;
1326
+ if (!state.started && Math.hypot(moved.clientX - state.x, moved.clientY - state.y) < 4)
1327
+ return;
1328
+ state.started = true;
1329
+ const over = dayUnder(this.host, state.row, moved.clientX, moved.clientY);
1330
+ const shift = {
1331
+ days: over === null ? 0 : daysBetween(state.date, over),
1332
+ minutes: state.row === 'timed'
1333
+ ? Math.round(((moved.clientY - state.y) / hourSize()) * (60 / slot)) * slot
1334
+ : 0,
1335
+ };
1336
+ state.placement =
1337
+ state.kind === 'move'
1338
+ ? movePlacement(placementOf(state.occurrence), shift)
1339
+ : resizePlacement(placementOf(state.occurrence), shift, slot);
1340
+ state.invalid = !this.allows(state.occurrence, state.placement, state.kind);
1341
+ this.editing.set({
1342
+ key: state.occurrence.key,
1343
+ placement: state.placement,
1344
+ invalid: state.invalid,
1345
+ });
1346
+ };
1347
+ const finish = (ended, commit) => {
1348
+ const state = this.edit;
1349
+ this.edit = null;
1350
+ document.removeEventListener('pointermove', move);
1351
+ document.removeEventListener('pointerup', up);
1352
+ document.removeEventListener('keydown', cancel, true);
1353
+ this.editing.set(null);
1354
+ if (state === null || !state.started)
1355
+ return;
1356
+ this.swallowClick = true;
1357
+ /* Let go over a refused destination: the event goes back, and nothing is asked. */
1358
+ if (commit && !state.invalid) {
1359
+ this.requestEventChange(state.occurrence, state.placement, state.kind, 'pointer', ended);
1360
+ }
1361
+ };
1362
+ const up = (ended) => finish(ended, true);
1363
+ const cancel = (pressed) => {
1364
+ if (pressed.key !== 'Escape' || this.edit?.started !== true)
1365
+ return;
1366
+ pressed.stopPropagation();
1367
+ finish(pressed, false);
1368
+ };
1369
+ document.addEventListener('pointermove', move);
1370
+ document.addEventListener('pointerup', up);
1371
+ document.addEventListener('keydown', cancel, true);
1372
+ return true;
1373
+ }
1374
+ onPointerDown(event) {
1375
+ if (event.button !== 0)
1376
+ return;
1377
+ if (this.startEdit(event))
1378
+ return;
1379
+ if (this.selectionMode() !== 'range')
1380
+ return;
1381
+ const target = event.target;
1382
+ if (target.closest('button, a, input'))
1383
+ return;
1384
+ const cell = target.closest('[data-row]');
1385
+ const iso = cell?.dataset['date'];
1386
+ if (cell === null || cell === undefined || iso === undefined)
1387
+ return;
1388
+ const date = parseIso(iso);
1389
+ const slot = this.slotDurationValue();
1390
+ const endHour = this.hoursValue()[1];
1391
+ if (cell.dataset['row'] === 'timed') {
1392
+ const anchor = this.minuteAt(cell, event.clientY);
1393
+ this.drag = { kind: 'hours', date, anchor, column: cell };
1394
+ this.pending.set({
1395
+ start: atMinutes(date, anchor),
1396
+ end: atMinutes(date, Math.min(anchor + slot, endHour * 60)),
1397
+ });
1398
+ }
1399
+ else if (cell.dataset['row'] === 'day' || cell.dataset['row'] === 'all-day') {
1400
+ this.drag = { kind: 'days', anchor: date };
1401
+ this.pending.set({ start: date, end: date });
1402
+ }
1403
+ else
1404
+ return;
1405
+ event.preventDefault();
1406
+ const move = (moved) => {
1407
+ const state = this.drag;
1408
+ if (state === null)
1409
+ return;
1410
+ if (state.kind === 'hours') {
1411
+ const here = this.minuteAt(state.column, moved.clientY);
1412
+ this.pending.set({
1413
+ start: atMinutes(state.date, Math.min(state.anchor, here)),
1414
+ end: atMinutes(state.date, Math.min(Math.max(state.anchor, here) + slot, endHour * 60)),
1415
+ });
1416
+ return;
1417
+ }
1418
+ const over = dayUnder(this.host, 'day', moved.clientX, moved.clientY) ??
1419
+ dayUnder(this.host, 'all-day', moved.clientX, moved.clientY);
1420
+ if (over !== null)
1421
+ this.pending.set(orderedDays(state.anchor, over));
1422
+ };
1423
+ const finish = (ended, commit) => {
1424
+ const chosen = this.pending();
1425
+ this.drag = null;
1426
+ this.pending.set(null);
1427
+ document.removeEventListener('pointermove', move);
1428
+ document.removeEventListener('pointerup', up);
1429
+ document.removeEventListener('keydown', cancel, true);
1430
+ if (commit && chosen !== null && this.requestSelection(chosen, 'pointer', ended)) {
1431
+ this.announce(chosen);
1432
+ }
1433
+ };
1434
+ const up = (ended) => finish(ended, true);
1435
+ const cancel = (pressed) => {
1436
+ if (pressed.key === 'Escape')
1437
+ finish(pressed, false);
1438
+ };
1439
+ document.addEventListener('pointermove', move);
1440
+ document.addEventListener('pointerup', up);
1441
+ document.addEventListener('keydown', cancel, true);
1442
+ }
1443
+ /* ── Keyboard ──────────────────────────────────────────────────────── */
1444
+ /** Alt and an arrow move the event a slot or a day; with Shift, its end. */
1445
+ editByKey(event, element, cell, row) {
1446
+ const occurrence = this.occurrences().find((entry) => entry.key === element.dataset['key']);
1447
+ if (occurrence === undefined)
1448
+ return;
1449
+ event.preventDefault();
1450
+ const rtl = getComputedStyle(cell).direction === 'rtl';
1451
+ const slot = this.slotDurationValue();
1452
+ const sideways = event.key === 'ArrowLeft' || event.key === 'ArrowRight';
1453
+ const forward = event.key === 'ArrowRight'
1454
+ ? !rtl
1455
+ : event.key === 'ArrowLeft'
1456
+ ? rtl
1457
+ : event.key === 'ArrowDown';
1458
+ const step = forward ? 1 : -1;
1459
+ const shift = sideways
1460
+ ? { days: step, minutes: 0 }
1461
+ : row === 'timed'
1462
+ ? { days: 0, minutes: step * slot }
1463
+ : { days: row === 'day' ? step * 7 : 0, minutes: 0 };
1464
+ if (shift.days === 0 && shift.minutes === 0)
1465
+ return;
1466
+ const kind = event.shiftKey ? 'resize' : 'move';
1467
+ /* A refused destination is passed over for the next one allowed; with
1468
+ none in reach the event stays, and the reader is told why. */
1469
+ const placement = nextAllowedPlacement(placementOf(occurrence), shift, kind, {
1470
+ slot,
1471
+ hours: this.hoursValue(),
1472
+ allowed: (candidate) => this.allows(occurrence, candidate, kind),
1473
+ });
1474
+ if (placement === null) {
1475
+ getLiveAnnouncer().announce(this.t('dropInvalid', { title: occurrence.event.title }));
1476
+ return;
1477
+ }
1478
+ if (!this.requestEventChange(occurrence, placement, kind, 'keyboard', event))
1479
+ return;
1480
+ /* Focus stays on the event where it lands, once the application has moved it. */
1481
+ afterNextRender(() => this.eventElement(occurrence.key)?.focus(), {
1482
+ injector: this.injector,
1483
+ });
1484
+ }
1485
+ onKeyDown(event) {
1486
+ const target = event.target;
1487
+ const cell = target.closest('[data-row]');
1488
+ const row = cell?.dataset['row'];
1489
+ if (cell === null || cell === undefined || row === undefined)
1490
+ return;
1491
+ if (target !== cell) {
1492
+ const element = target.closest("[data-part='event'][data-editable]");
1493
+ if (element !== null && event.altKey && event.key.startsWith('Arrow')) {
1494
+ this.editByKey(event, element, cell, row);
1495
+ return;
1496
+ }
1497
+ if (event.key === 'Escape' || event.key === 'F2') {
1498
+ event.preventDefault();
1499
+ cell.focus();
1500
+ return;
1501
+ }
1502
+ if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
1503
+ const widgets = [...cell.querySelectorAll(WIDGETS)];
1504
+ const index = widgets.indexOf(target.closest(WIDGETS) ?? target);
1505
+ event.preventDefault();
1506
+ widgets[index + (event.key === 'ArrowDown' ? 1 : -1)]?.focus();
1507
+ }
1508
+ return;
1509
+ }
1510
+ const date = this.currentDate();
1511
+ const view = this.currentView();
1512
+ const options = this.viewOptions();
1513
+ const rtl = getComputedStyle(cell).direction === 'rtl';
1514
+ const month = row === 'day';
1515
+ const range = this.selectionMode() === 'range';
1516
+ const slot = this.slotDurationValue();
1517
+ const [startHour, endHour] = this.hoursValue();
1518
+ if (row === 'timed' &&
1519
+ event.shiftKey &&
1520
+ range &&
1521
+ (event.key === 'ArrowDown' || event.key === 'ArrowUp')) {
1522
+ event.preventDefault();
1523
+ const held = this.currentSelection();
1524
+ if (held === null || !isPlainDateTime(held.start) || !isSameDate(held.start.date, date))
1525
+ return;
1526
+ const from = secondsOfDay(held.start.time) / 60;
1527
+ const endValue = held.end;
1528
+ const to = isSameDate(endValue.date, date) ? secondsOfDay(endValue.time) / 60 : 1440;
1529
+ const nextEnd = Math.min(endHour * 60, Math.max(from + slot, to + (event.key === 'ArrowDown' ? slot : -slot)));
1530
+ const next = { start: held.start, end: atMinutes(date, nextEnd) };
1531
+ if (this.requestSelection(next, 'keyboard', event))
1532
+ this.announce(next);
1533
+ return;
1534
+ }
1535
+ if (!month && (event.key === 'ArrowUp' || event.key === 'ArrowDown')) {
1536
+ event.preventDefault();
1537
+ const order = ['header', 'all-day', 'timed'];
1538
+ const nextRow = order[order.indexOf(row) + (event.key === 'ArrowDown' ? 1 : -1)];
1539
+ if (nextRow === undefined)
1540
+ return;
1541
+ this.row.set(nextRow);
1542
+ this.focusCell(date, nextRow);
1543
+ return;
1544
+ }
1545
+ const moves = {
1546
+ ArrowLeft: rtl ? 'next' : 'previous',
1547
+ ArrowRight: rtl ? 'previous' : 'next',
1548
+ Home: event.ctrlKey || event.metaKey ? 'periodStart' : 'rowStart',
1549
+ End: event.ctrlKey || event.metaKey ? 'periodEnd' : 'rowEnd',
1550
+ PageUp: event.shiftKey && month ? 'yearBack' : 'pageBack',
1551
+ PageDown: event.shiftKey && month ? 'yearForward' : 'pageForward',
1552
+ ArrowUp: month ? 'up' : undefined,
1553
+ ArrowDown: month ? 'down' : undefined,
1554
+ };
1555
+ const move = moves[event.key];
1556
+ if (move !== undefined) {
1557
+ event.preventDefault();
1558
+ const next = moveDate(view, date, move, options);
1559
+ if (event.shiftKey && range && event.key.startsWith('Arrow') && row !== 'timed') {
1560
+ const anchor = this.selectionAnchor ?? date;
1561
+ this.selectionAnchor = anchor;
1562
+ const chosen = orderedDays(anchor, next);
1563
+ if (this.requestSelection(chosen, 'keyboard', event))
1564
+ this.announce(chosen);
1565
+ }
1566
+ else if (!event.shiftKey) {
1567
+ this.selectionAnchor = null;
1568
+ }
1569
+ if (!isSameDate(next, date))
1570
+ this.requestDate(next, 'keyboard', event);
1571
+ this.focusCell(next, row);
1572
+ return;
1573
+ }
1574
+ if (event.key === 'Enter' || event.key === 'F2') {
1575
+ const first = cell.querySelector(WIDGETS);
1576
+ if (first === null)
1577
+ return;
1578
+ event.preventDefault();
1579
+ first.focus();
1580
+ return;
1581
+ }
1582
+ if (event.key === ' ' && range) {
1583
+ event.preventDefault();
1584
+ this.selectionAnchor = date;
1585
+ const next = row === 'timed'
1586
+ ? (() => {
1587
+ const from = Math.min(Math.max(secondsOfDay(this.scrollValue()) / 60, startHour * 60), endHour * 60 - slot);
1588
+ return { start: atMinutes(date, from), end: atMinutes(date, from + slot) };
1589
+ })()
1590
+ : { start: date, end: date };
1591
+ if (this.requestSelection(next, 'keyboard', event))
1592
+ this.announce(next);
1593
+ return;
1594
+ }
1595
+ if (event.key === 'Escape' && this.currentSelection() !== null) {
1596
+ event.preventDefault();
1597
+ this.requestSelection(null, 'escape', event);
1598
+ }
1599
+ }
1600
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlEventCalendar, deps: [], target: i0.ɵɵFactoryTarget.Component });
1601
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlEventCalendar, isStandalone: true, selector: "[slEventCalendar]", inputs: { events: { classPropertyName: "events", publicName: "events", isSignal: true, isRequired: false, transformFunction: null }, calendars: { classPropertyName: "calendars", publicName: "calendars", isSignal: true, isRequired: false, transformFunction: null }, views: { classPropertyName: "views", publicName: "views", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: false, transformFunction: null }, defaultDate: { classPropertyName: "defaultDate", publicName: "defaultDate", isSignal: true, isRequired: false, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: true, isRequired: false, transformFunction: null }, defaultView: { classPropertyName: "defaultView", publicName: "defaultView", isSignal: true, isRequired: false, transformFunction: null }, visibleCalendars: { classPropertyName: "visibleCalendars", publicName: "visibleCalendars", isSignal: true, isRequired: false, transformFunction: null }, defaultVisibleCalendars: { classPropertyName: "defaultVisibleCalendars", publicName: "defaultVisibleCalendars", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, selection: { classPropertyName: "selection", publicName: "selection", isSignal: true, isRequired: false, transformFunction: null }, defaultSelection: { classPropertyName: "defaultSelection", publicName: "defaultSelection", isSignal: true, isRequired: false, transformFunction: null }, openEvent: { classPropertyName: "openEvent", publicName: "openEvent", isSignal: true, isRequired: false, transformFunction: null }, defaultOpenEvent: { classPropertyName: "defaultOpenEvent", publicName: "defaultOpenEvent", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, workingHours: { classPropertyName: "workingHours", publicName: "workingHours", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, level: { classPropertyName: "level", publicName: "level", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, dayHours: { classPropertyName: "dayHours", publicName: "dayHours", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, fixedWeeks: { classPropertyName: "fixedWeeks", publicName: "fixedWeeks", isSignal: true, isRequired: false, transformFunction: null }, hourCycle: { classPropertyName: "hourCycle", publicName: "hourCycle", isSignal: true, isRequired: false, transformFunction: null }, listRange: { classPropertyName: "listRange", publicName: "listRange", isSignal: true, isRequired: false, transformFunction: null }, loadingDelay: { classPropertyName: "loadingDelay", publicName: "loadingDelay", isSignal: true, isRequired: false, transformFunction: null }, loadingMinDuration: { classPropertyName: "loadingMinDuration", publicName: "loadingMinDuration", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null }, maxColumns: { classPropertyName: "maxColumns", publicName: "maxColumns", isSignal: true, isRequired: false, transformFunction: null }, maxEvents: { classPropertyName: "maxEvents", publicName: "maxEvents", isSignal: true, isRequired: false, transformFunction: null }, scrollTime: { classPropertyName: "scrollTime", publicName: "scrollTime", isSignal: true, isRequired: false, transformFunction: null }, slotDuration: { classPropertyName: "slotDuration", publicName: "slotDuration", isSignal: true, isRequired: false, transformFunction: null }, timeZone: { classPropertyName: "timeZone", publicName: "timeZone", isSignal: true, isRequired: false, transformFunction: null }, weekends: { classPropertyName: "weekends", publicName: "weekends", isSignal: true, isRequired: false, transformFunction: null }, weekNumbers: { classPropertyName: "weekNumbers", publicName: "weekNumbers", isSignal: true, isRequired: false, transformFunction: null }, canDrop: { classPropertyName: "canDrop", publicName: "canDrop", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { date: "dateChange", view: "viewChange", visibleCalendars: "visibleCalendarsChange", selection: "selectionChange", openEvent: "openEventChange", dateRequest: "dateRequest", viewRequest: "viewRequest", visibleCalendarsRequest: "visibleCalendarsRequest", selectionRequest: "selectionRequest", openEventRequest: "openEventRequest", eventChangeRequest: "eventChangeRequest", rangeChange: "rangeChange" }, host: { attributes: { "data-ui": "event-calendar", "data-part": "root" }, properties: { "attr.data-view": "currentView()", "attr.data-layout": "layout()", "attr.data-loading": "loading() ? '' : null", "attr.data-slot-duration": "slotDurationValue()" } }, queries: [{ propertyName: "eventContentTemplate", first: true, predicate: SlEventCalendarEvent, descendants: true, isSignal: true }, { propertyName: "detail", first: true, predicate: SlEventCalendarDetail, descendants: true, isSignal: true }, { propertyName: "dayContent", first: true, predicate: SlEventCalendarDayContent, descendants: true, isSignal: true }, { propertyName: "actions", first: true, predicate: SlEventCalendarActions, descendants: true, isSignal: true }, { propertyName: "empty", first: true, predicate: SlEventCalendarEmpty, descendants: true, isSignal: true }, { propertyName: "errorContent", first: true, predicate: SlEventCalendarError, descendants: true, isSignal: true }, { propertyName: "contextMenu", first: true, predicate: SlEventCalendarContextMenu, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "body", first: true, predicate: ["body"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "scroller", first: true, predicate: ["scroller"], descendants: true, isSignal: true }, { propertyName: "filterButton", first: true, predicate: ["filterButton"], descendants: true, isSignal: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true, isSignal: true }, { propertyName: "detailPopover", first: true, predicate: ["detailPopover"], descendants: true, isSignal: true }, { propertyName: "contextMenuRef", first: true, predicate: ["contextMenuRef"], descendants: true, isSignal: true }], exportAs: ["slEventCalendar"], ngImport: i0, template: `
1602
+ @if (header()) {
1603
+ <div data-part="header">
1604
+ <div
1605
+ data-part="title"
1606
+ role="heading"
1607
+ aria-live="polite"
1608
+ [attr.aria-level]="level()"
1609
+ [attr.id]="titleId"
1610
+ >
1611
+ {{ title() }}
1612
+ </div>
1613
+ <div data-part="navigation" role="group" [attr.aria-label]="t('navigation')">
1614
+ <button
1615
+ data-part="previous"
1616
+ type="button"
1617
+ [attr.aria-label]="previousLabel()"
1618
+ (click)="step(-1, $event)"
1619
+ >
1620
+ <span slIcon><svg slGlyph name="chevron-right"></svg></span>
1621
+ </button>
1622
+ <button data-part="today" type="button" (click)="goToday($event)">
1623
+ {{ t('today') }}
1624
+ </button>
1625
+ <button
1626
+ data-part="next"
1627
+ type="button"
1628
+ [attr.aria-label]="nextLabel()"
1629
+ (click)="step(1, $event)"
1630
+ >
1631
+ <span slIcon><svg slGlyph name="chevron-right"></svg></span>
1632
+ </button>
1633
+ </div>
1634
+ @if (views().length > 1) {
1635
+ <div data-part="views">
1636
+ <div
1637
+ slSegmentedControl
1638
+ fullWidth
1639
+ [attr.aria-label]="t('views')"
1640
+ [value]="currentView()"
1641
+ (valueChange)="onViewRequest($event)"
1642
+ >
1643
+ @for (name of views(); track name) {
1644
+ <label slSegment [value]="name">{{ viewLabel(name) }}</label>
1645
+ }
1646
+ </div>
1647
+ </div>
1648
+ }
1649
+ @if (calendars().length > 1) {
1650
+ <button #filterButton data-part="filter" type="button" [slMenuTriggerFor]="filterMenu">
1651
+ <span slIcon><svg slGlyph name="funnel"></svg></span>
1652
+ <span>{{ t('calendars') }}</span>
1653
+ <span slIcon><svg slGlyph name="chevron-down"></svg></span>
1654
+ </button>
1655
+ <sl-menu #filterMenu>
1656
+ @for (entry of calendars(); track entry.key) {
1657
+ <button
1658
+ slMenuCheckboxItem
1659
+ [checked]="shown().includes(entry.key)"
1660
+ (checkedChangeRequest)="onCalendarRequest(entry.key, $event)"
1661
+ >
1662
+ <!-- The calendar's colour opens the label; the column before it is the
1663
+ check's, and a dot there drew the check over itself. -->
1664
+ <svg aria-hidden="true" width="14" height="10" viewBox="0 0 14 10">
1665
+ <circle cx="5" cy="5" r="4" [style.fill]="swatch(entry.key)" />
1666
+ </svg>
1667
+ {{ entry.label }}
1668
+ </button>
1669
+ }
1670
+ </sl-menu>
1671
+ }
1672
+ @if (actions()) {
1673
+ <div data-part="actions"><ng-content select="[slEventCalendarActions]" /></div>
1674
+ }
1675
+ </div>
1676
+ }
1677
+
1678
+ <!-- With a context menu the body is that family's target: one region for
1679
+ every day, hour and event. -->
1680
+ @if (contextMenu(); as items) {
1681
+ <div
1682
+ #body
1683
+ data-part="body"
1684
+ [slContextMenuTriggerFor]="contextMenuRef"
1685
+ [attr.aria-busy]="loading() ? true : null"
1686
+ (keydown)="onKeyDown($event)"
1687
+ (pointerdown)="onPointerDown($event)"
1688
+ >
1689
+ <ng-container *ngTemplateOutlet="bodyContent" />
1690
+ </div>
1691
+ <sl-menu
1692
+ #contextMenuRef
1693
+ [aria-label]="contextLabel()"
1694
+ (openChangeRequest)="onContextRequest($event)"
1695
+ >
1696
+ @if (contextOn(); as on) {
1697
+ <ng-container
1698
+ *ngTemplateOutlet="
1699
+ items.template;
1700
+ context: { $implicit: on.target };
1701
+ injector: contextInjector()
1702
+ "
1703
+ />
1704
+ }
1705
+ </sl-menu>
1706
+ } @else {
1707
+ <div
1708
+ #body
1709
+ data-part="body"
1710
+ [attr.aria-busy]="loading() ? true : null"
1711
+ (keydown)="onKeyDown($event)"
1712
+ (pointerdown)="onPointerDown($event)"
1713
+ >
1714
+ <ng-container *ngTemplateOutlet="bodyContent" />
1715
+ </div>
1716
+ }
1717
+
1718
+ <ng-template #bodyContent>
1719
+ <div data-part="loader">
1720
+ @if (loaderMounted()) {
1721
+ <div
1722
+ slProgressBar
1723
+ hideLabel
1724
+ size="sm"
1725
+ [loading]="loading()"
1726
+ [label]="t('loading')"
1727
+ [delay]="loadingDelayValue()"
1728
+ [minDuration]="loadingMinDurationValue()"
1729
+ ></div>
1730
+ }
1731
+ </div>
1732
+ @if (errorContent()) {
1733
+ <div data-part="error"><ng-content select="[slEventCalendarError]" /></div>
1734
+ }
1735
+
1736
+ @if (layout() === 'list') {
1737
+ <div data-part="list">
1738
+ @for (day of listDrawing(); track day.iso) {
1739
+ <section
1740
+ data-part="list-day"
1741
+ [attr.aria-labelledby]="day.headingId"
1742
+ [attr.data-date]="day.iso"
1743
+ [attr.data-today]="day.today ? '' : null"
1744
+ >
1745
+ <div
1746
+ data-part="list-day-heading"
1747
+ role="heading"
1748
+ [attr.aria-level]="level() + 1"
1749
+ [attr.id]="day.headingId"
1750
+ [attr.aria-label]="day.heading.label"
1751
+ >
1752
+ <span data-part="list-weekday">{{ day.heading.weekday }}</span>
1753
+ <span data-part="list-date">{{ day.heading.date }}</span>
1754
+ </div>
1755
+ <ul data-part="list-events" role="list">
1756
+ @for (view of day.events; track view.key) {
1757
+ <li>
1758
+ <ng-container
1759
+ *ngTemplateOutlet="eventTemplate; context: { $implicit: view, inGrid: false }"
1760
+ />
1761
+ </li>
1762
+ }
1763
+ </ul>
1764
+ </section>
1765
+ } @empty {
1766
+ <div data-part="empty">
1767
+ <p>{{ emptyText() }}</p>
1768
+ <ng-content select="[slEventCalendarEmpty]" />
1769
+ </div>
1770
+ }
1771
+ </div>
1772
+ } @else if (currentView() === 'month') {
1773
+ <table data-part="month" role="grid" [attr.aria-labelledby]="titleId">
1774
+ <thead>
1775
+ <tr data-part="weekdays">
1776
+ @if (weekNumbersValue()) {
1777
+ <th data-part="week-number-header" scope="col">
1778
+ <span data-ui="visually-hidden">{{ t('weekNumber') }}</span>
1779
+ </th>
1780
+ }
1781
+ @for (name of monthDrawing().weekdays; track name.key) {
1782
+ <th data-part="weekday" scope="col" [attr.abbr]="name.long">{{ name.short }}</th>
1783
+ }
1784
+ </tr>
1785
+ </thead>
1786
+ <tbody>
1787
+ @for (row of monthDrawing().rows; track row.key) {
1788
+ <tr data-part="week" [style.--slotted-event-calendar-lanes]="maxEventsValue()">
1789
+ @if (weekNumbersValue()) {
1790
+ <th data-part="week-number" scope="row">{{ row.weekNumber }}</th>
1791
+ }
1792
+ @for (cell of row.cells; track cell.iso) {
1793
+ <td
1794
+ data-part="day"
1795
+ data-row="day"
1796
+ role="gridcell"
1797
+ [attr.data-date]="cell.iso"
1798
+ [attr.tabindex]="cell.tabIndex"
1799
+ [attr.aria-labelledby]="
1800
+ id + '-day-' + cell.iso + ' ' + id + '-day-' + cell.iso + '-count'
1801
+ "
1802
+ [attr.aria-selected]="selectionMode() === 'range' ? cell.selected : null"
1803
+ [attr.data-today]="cell.today ? '' : null"
1804
+ [attr.data-outside-month]="cell.outside ? '' : null"
1805
+ [attr.data-non-working]="cell.nonWorking ? '' : null"
1806
+ [attr.data-selected]="cell.selected ? '' : null"
1807
+ >
1808
+ <div data-part="day-header">
1809
+ <button
1810
+ data-part="day-number"
1811
+ type="button"
1812
+ tabindex="-1"
1813
+ [attr.id]="id + '-day-' + cell.iso"
1814
+ [attr.aria-label]="cell.label"
1815
+ [attr.aria-haspopup]="narrow() ? 'dialog' : null"
1816
+ (click)="drill(cell.date, $event)"
1817
+ >
1818
+ {{ cell.date.day }}
1819
+ </button>
1820
+ @if (dayContent(); as content) {
1821
+ <div data-part="day-content">
1822
+ <ng-container
1823
+ *ngTemplateOutlet="
1824
+ content.template;
1825
+ context: { $implicit: cell.date, view: currentView() }
1826
+ "
1827
+ />
1828
+ </div>
1829
+ }
1830
+ <span
1831
+ data-ui="visually-hidden"
1832
+ [attr.id]="id + '-day-' + cell.iso + '-count'"
1833
+ >{{ cell.count }}</span
1834
+ >
1835
+ </div>
1836
+ <div data-part="day-events">
1837
+ @for (view of cell.events; track view.key) {
1838
+ <ng-container
1839
+ *ngTemplateOutlet="
1840
+ eventTemplate;
1841
+ context: { $implicit: view, inGrid: true }
1842
+ "
1843
+ />
1844
+ }
1845
+ @for (text of cell.continuations; track $index) {
1846
+ <span data-part="continuation">{{ text }}</span>
1847
+ }
1848
+ @if (cell.more > 0) {
1849
+ <button
1850
+ data-part="more"
1851
+ type="button"
1852
+ tabindex="-1"
1853
+ aria-haspopup="dialog"
1854
+ [attr.aria-expanded]="moreIso() === cell.iso"
1855
+ [attr.aria-label]="cell.moreLabel"
1856
+ (click)="openMore(cell.date, $event)"
1857
+ >
1858
+ +{{ cell.more }}<span>{{ t('more') }}</span>
1859
+ </button>
1860
+ }
1861
+ </div>
1862
+ </td>
1863
+ }
1864
+ </tr>
1865
+ }
1866
+ </tbody>
1867
+ </table>
1868
+ } @else {
1869
+ <div
1870
+ data-part="time-grid"
1871
+ role="grid"
1872
+ [attr.aria-labelledby]="titleId"
1873
+ [style.--slotted-event-calendar-days]="timeDrawing().days"
1874
+ [style.--slotted-event-calendar-slot]="slotDurationValue()"
1875
+ >
1876
+ <div data-part="time-head" role="rowgroup">
1877
+ <div data-part="columns" role="row">
1878
+ <div data-part="zone" role="columnheader">{{ timeDrawing().zone }}</div>
1879
+ @for (column of timeDrawing().headers; track column.iso) {
1880
+ <div
1881
+ data-part="column-header"
1882
+ data-row="header"
1883
+ role="columnheader"
1884
+ [attr.data-date]="column.iso"
1885
+ [attr.tabindex]="column.tabIndex"
1886
+ [attr.data-today]="column.today ? '' : null"
1887
+ [attr.data-offset-change]="column.offsetShort === null ? null : ''"
1888
+ >
1889
+ <span data-part="weekday" aria-hidden="true">{{ column.weekday }}</span>
1890
+ <button
1891
+ data-part="day-number"
1892
+ type="button"
1893
+ tabindex="-1"
1894
+ [attr.aria-label]="column.label"
1895
+ (click)="drill(column.date, $event)"
1896
+ >
1897
+ {{ column.date.day }}
1898
+ </button>
1899
+ @if (dayContent(); as content) {
1900
+ <div data-part="day-content">
1901
+ <ng-container
1902
+ *ngTemplateOutlet="
1903
+ content.template;
1904
+ context: { $implicit: column.date, view: currentView() }
1905
+ "
1906
+ />
1907
+ </div>
1908
+ }
1909
+ @if (column.offsetShort !== null) {
1910
+ <span
1911
+ data-part="offset-change"
1912
+ role="note"
1913
+ [attr.aria-label]="column.offsetLong"
1914
+ >{{ column.offsetShort }}</span
1915
+ >
1916
+ }
1917
+ </div>
1918
+ }
1919
+ </div>
1920
+ <div
1921
+ data-part="all-day-row"
1922
+ role="row"
1923
+ [style.--slotted-event-calendar-lanes]="timeDrawing().lanes"
1924
+ >
1925
+ <div data-part="all-day-label" role="rowheader">{{ t('allDay') }}</div>
1926
+ @for (cell of timeDrawing().allDay; track cell.iso) {
1927
+ <div
1928
+ data-part="all-day-cell"
1929
+ data-row="all-day"
1930
+ role="gridcell"
1931
+ [attr.data-date]="cell.iso"
1932
+ [attr.tabindex]="cell.tabIndex"
1933
+ [attr.aria-selected]="selectionMode() === 'range' ? cell.selected : null"
1934
+ [attr.data-today]="cell.today ? '' : null"
1935
+ [attr.data-non-working]="cell.nonWorking ? '' : null"
1936
+ [attr.data-selected]="cell.selected ? '' : null"
1937
+ >
1938
+ @for (view of cell.events; track view.key) {
1939
+ <ng-container
1940
+ *ngTemplateOutlet="eventTemplate; context: { $implicit: view, inGrid: true }"
1941
+ />
1942
+ }
1943
+ @for (text of cell.continuations; track $index) {
1944
+ <span data-part="continuation">{{ text }}</span>
1945
+ }
1946
+ </div>
1947
+ }
1948
+ </div>
1949
+ </div>
1950
+ <div #scroller data-part="scroller" role="rowgroup">
1951
+ <div data-part="time-row" role="row">
1952
+ <div data-part="gutter" role="rowheader">
1953
+ <span data-ui="visually-hidden">{{ t('timed') }}</span>
1954
+ @for (hour of timeDrawing().hours; track hour.hour) {
1955
+ <span data-part="hour" aria-hidden="true">{{ hour.label }}</span>
1956
+ }
1957
+ </div>
1958
+ @for (column of timeDrawing().columns; track column.iso) {
1959
+ <div
1960
+ data-part="column"
1961
+ data-row="timed"
1962
+ role="gridcell"
1963
+ [attr.data-date]="column.iso"
1964
+ [attr.tabindex]="column.tabIndex"
1965
+ [attr.data-today]="column.today ? '' : null"
1966
+ [attr.data-non-working]="column.nonWorking ? '' : null"
1967
+ >
1968
+ @for (off of column.offHours; track $index) {
1969
+ <div data-part="off-hours" aria-hidden="true" [style]="off"></div>
1970
+ }
1971
+ @if (column.offsetLine; as line) {
1972
+ <div data-part="offset-line" aria-hidden="true" [style]="line"></div>
1973
+ }
1974
+ @if (column.selection; as chosen) {
1975
+ <div data-part="selection" aria-hidden="true" [style]="chosen.style">
1976
+ {{ chosen.text }}
1977
+ </div>
1978
+ }
1979
+ @for (view of column.items; track view.key) {
1980
+ <ng-container
1981
+ *ngTemplateOutlet="eventTemplate; context: { $implicit: view, inGrid: true }"
1982
+ />
1983
+ }
1984
+ @for (entry of column.more; track $index) {
1985
+ <button
1986
+ data-part="more"
1987
+ type="button"
1988
+ tabindex="-1"
1989
+ aria-haspopup="dialog"
1990
+ [attr.aria-expanded]="moreIso() === column.iso"
1991
+ [attr.aria-label]="entry.label"
1992
+ [attr.data-overlay]="entry.overlay ? '' : null"
1993
+ [style]="entry.style"
1994
+ (click)="openMore(column.date, $event)"
1995
+ >
1996
+ +{{ entry.count }}<span>{{ t('more') }}</span>
1997
+ </button>
1998
+ }
1999
+ @if (column.now; as now) {
2000
+ <div data-part="now" aria-hidden="true" [style]="now"></div>
2001
+ }
2002
+ </div>
2003
+ }
2004
+ </div>
2005
+ </div>
2006
+ </div>
2007
+ }
2008
+ </ng-template>
2009
+
2010
+ <!-- Below the compact size class the "+N" panel and the detail are sheets
2011
+ from the bottom edge, inside the root: a region that contains its fixed
2012
+ layers (a phone frame, a pane) keeps them. -->
2013
+ @if (narrow()) {
2014
+ <sl-drawer
2015
+ side="bottom"
2016
+ [container]="host"
2017
+ [finalFocus]="moreAnchor() ?? undefined"
2018
+ [open]="moreIso() !== null"
2019
+ (openChange)="onMoreOpen($event)"
2020
+ >
2021
+ @if (moreDate(); as date) {
2022
+ <div slDrawerResizer></div>
2023
+ <div slDrawerHeader>
2024
+ <h2 slDrawerTitle>{{ dateLabel(date) }}</h2>
2025
+ <button slDrawerClose></button>
2026
+ </div>
2027
+ <div slDrawerBody>
2028
+ <ul
2029
+ data-part="list-events"
2030
+ data-layout="stacked"
2031
+ role="list"
2032
+ [attr.aria-label]="t('dayEvents', { day: dateLabel(date) })"
2033
+ >
2034
+ @for (view of moreViews(); track view.key) {
2035
+ <li>
2036
+ <ng-container
2037
+ *ngTemplateOutlet="eventTemplate; context: { $implicit: view, inGrid: false }"
2038
+ />
2039
+ </li>
2040
+ }
2041
+ </ul>
2042
+ </div>
2043
+ }
2044
+ </sl-drawer>
2045
+ @if (detail(); as template) {
2046
+ <sl-drawer
2047
+ side="bottom"
2048
+ [container]="host"
2049
+ [finalFocus]="detailAnchor() ?? undefined"
2050
+ [open]="openOccurrence() !== null"
2051
+ (openChangeRequest)="onDetailRequest($event)"
2052
+ >
2053
+ @if (openOccurrence(); as occurrence) {
2054
+ <div slDrawerResizer></div>
2055
+ <div slDrawerHeader>
2056
+ <h2 slDrawerTitle>{{ occurrence.event.title }}</h2>
2057
+ <p slDrawerDescription>
2058
+ @if (whenOf(occurrence); as when) {
2059
+ @if (when.day !== null) {
2060
+ <span data-part="detail-day">{{ when.day }},</span>{{ ' ' }}
2061
+ }
2062
+ <span data-part="detail-range">{{ when.range }}</span>
2063
+ }
2064
+ </p>
2065
+ <button slDrawerClose></button>
2066
+ </div>
2067
+ <div slDrawerBody>
2068
+ <ng-container
2069
+ *ngTemplateOutlet="
2070
+ template.template;
2071
+ context: { $implicit: occurrence, close: closeDetail }
2072
+ "
2073
+ />
2074
+ </div>
2075
+ }
2076
+ </sl-drawer>
2077
+ }
2078
+ } @else {
2079
+ <ng-container
2080
+ slPopover
2081
+ #morePopover="slPopover"
2082
+ [portal]="false"
2083
+ [open]="moreIso() !== null"
2084
+ (openChange)="onMoreOpen($event)"
2085
+ >
2086
+ <ng-template slPopoverLayer>
2087
+ <div slPopoverContent>
2088
+ @if (moreDate(); as date) {
2089
+ <div slPopoverHeader>
2090
+ <div slPopoverTitle>{{ dateLabel(date) }}</div>
2091
+ <button slPopoverClose></button>
2092
+ </div>
2093
+ <div slPopoverBody>
2094
+ <ul
2095
+ data-part="list-events"
2096
+ data-layout="stacked"
2097
+ role="list"
2098
+ [attr.aria-label]="t('dayEvents', { day: dateLabel(date) })"
2099
+ >
2100
+ @for (view of moreViews(); track view.key) {
2101
+ <li>
2102
+ <ng-container
2103
+ *ngTemplateOutlet="
2104
+ eventTemplate;
2105
+ context: { $implicit: view, inGrid: false }
2106
+ "
2107
+ />
2108
+ </li>
2109
+ }
2110
+ </ul>
2111
+ </div>
2112
+ }
2113
+ </div>
2114
+ </ng-template>
2115
+ </ng-container>
2116
+
2117
+ @if (detail(); as template) {
2118
+ <ng-container
2119
+ slPopover
2120
+ #detailPopover="slPopover"
2121
+ size="lg"
2122
+ [portal]="false"
2123
+ [open]="openOccurrence() !== null"
2124
+ (openChangeRequest)="onDetailRequest($event)"
2125
+ >
2126
+ <ng-template slPopoverLayer>
2127
+ <div slPopoverContent>
2128
+ @if (openOccurrence(); as occurrence) {
2129
+ <div slPopoverHeader>
2130
+ <div slPopoverTitle>{{ occurrence.event.title }}</div>
2131
+ <div slPopoverDescription>
2132
+ @if (whenOf(occurrence); as when) {
2133
+ @if (when.day !== null) {
2134
+ <span data-part="detail-day">{{ when.day }},</span>{{ ' ' }}
2135
+ }
2136
+ <span data-part="detail-range">{{ when.range }}</span>
2137
+ }
2138
+ </div>
2139
+ <button slPopoverClose></button>
2140
+ </div>
2141
+ <div slPopoverBody>
2142
+ <ng-container
2143
+ *ngTemplateOutlet="
2144
+ template.template;
2145
+ context: { $implicit: occurrence, close: closeDetail }
2146
+ "
2147
+ />
2148
+ </div>
2149
+ }
2150
+ </div>
2151
+ </ng-template>
2152
+ </ng-container>
2153
+ }
2154
+ }
2155
+
2156
+ <ng-template #eventTemplate let-view let-inGrid="inGrid">
2157
+ @if (view.href !== null) {
2158
+ <a
2159
+ data-part="event"
2160
+ [attr.href]="view.href"
2161
+ [attr.tabindex]="inGrid ? -1 : null"
2162
+ [attr.data-key]="view.key"
2163
+ [attr.data-all-day]="view.allDay ? '' : null"
2164
+ [attr.data-bar]="view.bar ? '' : null"
2165
+ [attr.data-color]="view.color"
2166
+ [attr.data-status]="view.status"
2167
+ [attr.data-open]="view.open ? '' : null"
2168
+ [attr.data-continues-before]="view.continuesBefore ? '' : null"
2169
+ [attr.data-continues-after]="view.continuesAfter ? '' : null"
2170
+ [attr.data-clipped-start]="view.clippedStart ? '' : null"
2171
+ [attr.data-clipped-end]="view.clippedEnd ? '' : null"
2172
+ [attr.data-short]="view.short ? '' : null"
2173
+ [attr.data-editable]="view.editable ? '' : null"
2174
+ [attr.data-past]="view.past ? '' : null"
2175
+ [attr.data-dragging]="view.dragging ? '' : null"
2176
+ [attr.data-drop-invalid]="view.dropInvalid ? '' : null"
2177
+ [attr.data-context]="view.context ? '' : null"
2178
+ [style]="view.style"
2179
+ ><ng-container *ngTemplateOutlet="eventContent; context: { $implicit: view }"
2180
+ /></a>
2181
+ } @else {
2182
+ <button
2183
+ data-part="event"
2184
+ type="button"
2185
+ [attr.tabindex]="inGrid ? -1 : null"
2186
+ [attr.data-key]="view.key"
2187
+ [attr.data-all-day]="view.allDay ? '' : null"
2188
+ [attr.data-bar]="view.bar ? '' : null"
2189
+ [attr.data-color]="view.color"
2190
+ [attr.data-status]="view.status"
2191
+ [attr.data-open]="view.open ? '' : null"
2192
+ [attr.data-continues-before]="view.continuesBefore ? '' : null"
2193
+ [attr.data-continues-after]="view.continuesAfter ? '' : null"
2194
+ [attr.data-clipped-start]="view.clippedStart ? '' : null"
2195
+ [attr.data-clipped-end]="view.clippedEnd ? '' : null"
2196
+ [attr.data-short]="view.short ? '' : null"
2197
+ [attr.data-editable]="view.editable ? '' : null"
2198
+ [attr.data-past]="view.past ? '' : null"
2199
+ [attr.data-dragging]="view.dragging ? '' : null"
2200
+ [attr.data-drop-invalid]="view.dropInvalid ? '' : null"
2201
+ [attr.data-context]="view.context ? '' : null"
2202
+ [attr.aria-expanded]="hostsDetail() || currentOpen() !== null ? view.open : null"
2203
+ [attr.aria-haspopup]="hostsDetail() ? 'dialog' : null"
2204
+ [style]="view.style"
2205
+ (click)="activate(view, $event)"
2206
+ >
2207
+ <ng-container *ngTemplateOutlet="eventContent; context: { $implicit: view }" />
2208
+ </button>
2209
+ }
2210
+ </ng-template>
2211
+
2212
+ <ng-template #eventContent let-view>
2213
+ @if (view.bar && view.continuesBefore) {
2214
+ <span slIcon size="sm" data-edge="start"><svg slGlyph name="chevron-right"></svg></span>
2215
+ }
2216
+ @if (eventContentTemplate(); as custom) {
2217
+ <ng-container
2218
+ *ngTemplateOutlet="
2219
+ custom.template;
2220
+ context: {
2221
+ $implicit: view.occurrence,
2222
+ layout: view.layout,
2223
+ date: view.date,
2224
+ time: view.time,
2225
+ }
2226
+ "
2227
+ />
2228
+ } @else {
2229
+ @if (view.time !== null) {
2230
+ <span data-part="event-time">{{ view.time }}</span>
2231
+ }
2232
+ <span data-part="event-title">{{ view.title }}</span>
2233
+ @if (view.location) {
2234
+ <span data-part="event-location">{{ view.location }}</span>
2235
+ }
2236
+ }
2237
+ <span data-part="event-meta">{{ view.meta }}</span>
2238
+ @if (view.bar && view.continuesAfter) {
2239
+ <span slIcon size="sm" data-edge="end"><svg slGlyph name="chevron-right"></svg></span>
2240
+ }
2241
+ @if (view.resizable) {
2242
+ <span aria-hidden="true" data-part="resize-handle"></span>
2243
+ }
2244
+ </ng-template>
2245
+ `, isInline: true, styles: ["@layer slotted.components{[data-ui=event-calendar][data-part=root]{container:slotted-event-calendar / inline-size;--_rule: var(--slotted-event-calendar-rule-color, var(--slotted-border-subtle, #d8dee6));--_rule-width: var(--slotted-border-width-thin, 1px);--_air: var(--slotted-space-2, .25rem);--_hour: var( --slotted-event-calendar-hour-size, calc(var(--slotted-control-height-sm, 30px) * 2) );--_event-size: max( var(--slotted-control-inner-size-sm, 22px), calc(var(--slotted-target-min, 24px) - var(--_air)) );--_event-font-size: var(--slotted-control-font-size-sm, 12px);--_event-radius: var(--slotted-event-calendar-event-radius, var(--slotted-radius-sm, 4px));--_tint: 14%;--_tint-hover: 21%;--_tint-active: 27%;--_edge: 34%;--_edge-hover: 50%;--_tint-dark: 24%;--_tint-hover-dark: 32%;--_tint-active-dark: 38%;--_edge-dark: 44%;--_edge-hover-dark: 60%;--_ink-mix: 58%;--_hue: var(--slotted-text-muted, #5b6b7f);--_off: color-mix(in oklab, var(--slotted-text-muted, #5b6b7f) 7%, transparent);--_gutter: calc(var(--slotted-space-11, 3rem) + var(--slotted-space-4, .5rem));--_gap: var(--slotted-control-gap-md, 8px);--_line-xs: round(nearest, calc(1em * var(--slotted-line-height-xs, 1.4)), 1px);--_line-sm: round(nearest, calc(1em * var(--slotted-line-height-sm, 1.45)), 1px);--_base: var(--slotted-event-calendar-background, var(--slotted-surface, #ffffff));background-color:var(--slotted-event-calendar-background, transparent);box-sizing:border-box;color:var(--slotted-text, #0f172a);display:flex;flex-direction:column;font-family:var(--slotted-control-font-family, system-ui, sans-serif);font-size:var(--slotted-control-font-size-md, 13px);gap:var(--slotted-space-5, .75rem);min-block-size:0;min-inline-size:0}[data-ui=event-calendar] *,[data-ui=event-calendar] *:before,[data-ui=event-calendar] *:after{box-sizing:border-box}[data-ui=event-calendar]>[data-part=header]{align-items:center;display:grid;grid-template-areas:\"title navigation views filter actions\";grid-template-columns:minmax(0,1fr) auto auto auto auto;row-gap:var(--slotted-space-4, .5rem)}[data-ui=event-calendar]>[data-part=header]>[data-part=title]{font-family:var( --slotted-font-family-heading, var(--slotted-font-family-sans, ui-sans-serif, system-ui, sans-serif) );font-size:var(--slotted-font-size-lg, 1rem);font-weight:var(--slotted-font-weight-semibold, 600);grid-area:title;line-height:var(--slotted-line-height-lg, 1.5);margin:0;min-inline-size:0;overflow-wrap:anywhere}[data-ui=event-calendar] [data-part=navigation]{align-items:center;display:inline-flex;gap:var(--slotted-space-2, .25rem);grid-area:navigation;margin-inline-start:var(--slotted-space-6, 1rem)}[data-ui=event-calendar] [data-part=views]{display:flex;grid-area:views;margin-inline-start:var(--slotted-space-5, .75rem);min-inline-size:0}[data-ui=event-calendar] [data-part=filter]{grid-area:filter;margin-inline-start:var(--_gap)}[data-ui=event-calendar]>[data-part=header]>[data-part=actions]{align-items:center;display:inline-flex;gap:var(--_gap);grid-area:actions;margin-inline-start:var(--_gap)}[data-ui=event-calendar] [data-part=today],[data-ui=event-calendar] [data-part=filter],[data-ui=event-calendar] [data-part=previous],[data-ui=event-calendar] [data-part=next]{align-items:center;appearance:none;background-color:var(--slotted-control-surface, #ffffff);block-size:var(--slotted-control-height-md, 34px);border:var(--slotted-border-width-thin, 1px) solid var(--slotted-control-border-color, #bfc7d1);border-radius:var(--slotted-control-radius, 4px);box-shadow:var(--slotted-control-shadow, none);color:var(--slotted-text, #0f172a);cursor:pointer;display:inline-flex;font:inherit;font-weight:var(--slotted-font-weight-medium, 500);gap:var(--slotted-control-gap-md, 8px);justify-content:center;padding-block:0;padding-inline:var(--slotted-control-padding-inline-md, 13px);touch-action:manipulation;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);white-space:nowrap;-webkit-tap-highlight-color:transparent}[data-ui=event-calendar] [data-part=previous],[data-ui=event-calendar] [data-part=next]{inline-size:var(--slotted-control-height-md, 34px);padding-inline:0}[data-ui=event-calendar] [data-part=today]:hover:not([data-disabled]),[data-ui=event-calendar] [data-part=filter]:hover:not([data-disabled]),[data-ui=event-calendar] [data-part=previous]:hover:not([data-disabled]),[data-ui=event-calendar] [data-part=next]:hover:not([data-disabled]){background-color:var(--slotted-tone-secondary-subtle-hover, #eef1f5)}[data-ui=event-calendar] [data-part=today]:active:not([data-disabled]),[data-ui=event-calendar] [data-part=filter]:active:not([data-disabled]),[data-ui=event-calendar] [data-part=previous]:active:not([data-disabled]),[data-ui=event-calendar] [data-part=next]:active:not([data-disabled]),[data-ui=event-calendar] [data-part=filter][aria-expanded=true]{background-color:var(--slotted-tone-secondary-subtle-active, #e2e8f0);transition-duration:var(--slotted-duration-instant)}[data-ui=event-calendar] [data-part=previous]>[data-ui=icon],[data-ui=event-calendar] [data-part=next]>[data-ui=icon],[data-ui=event-calendar] [data-part=filter]>[data-ui=icon]{--slotted-icon-size: var(--slotted-control-icon-size-md, 16px)}[data-ui=event-calendar] [data-part=previous]>[data-ui=icon]{rotate:180deg}[data-ui=event-calendar]:dir(rtl) [data-part=previous]>[data-ui=icon]{rotate:0deg}[data-ui=event-calendar]:dir(rtl) [data-part=next]>[data-ui=icon]{rotate:180deg}[data-ui=event-calendar] [data-part=filter]>[data-ui=icon]{color:var(--slotted-text-muted, #5b6b7f)}[data-ui=event-calendar] [data-part=today]:focus-visible,[data-ui=event-calendar] [data-part=filter]:focus-visible,[data-ui=event-calendar] [data-part=previous]:focus-visible,[data-ui=event-calendar] [data-part=next]:focus-visible,[data-ui=event-calendar] [data-part=day-number]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=event-calendar] [data-part=day]:focus-visible,[data-ui=event-calendar] [data-part=column-header]:focus-visible,[data-ui=event-calendar] [data-part=all-day-cell]:focus-visible,[data-ui=event-calendar] [data-part=column]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:calc(var(--slotted-focus-ring-width, 2px) * -1)}[data-ui=event-calendar] [data-part=event]:focus-visible,[data-ui=event-calendar] [data-part=more]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:1px;z-index:3}[data-ui=event-calendar]>[data-part=body]{display:flex;flex:1 1 auto;flex-direction:column;min-block-size:0;position:relative}[data-ui=event-calendar]>[data-part=body][data-ui=context-menu]{--slotted-context-menu-mark-width: 0px}[data-ui=event-calendar][data-layout=list]>[data-part=body]{overflow-y:auto;overscroll-behavior:contain}[data-ui=event-calendar]>[data-part=body]>[data-part=loader]{inset-block-start:0;inset-inline:0;pointer-events:none;position:absolute;z-index:4}[data-ui=event-calendar]>[data-part=body]>[data-part=error]{margin-block-end:var(--slotted-space-5, .75rem)}[data-ui=event-calendar]>[data-part=body][aria-busy=true] [data-part=event]{opacity:.6}[data-ui=event-calendar] [data-part=month]{flex:1 0 auto;border-block-start:var(--_rule-width) solid var(--_rule);border-collapse:separate;border-inline-start:var(--_rule-width) solid var(--_rule);border-spacing:0;inline-size:100%;table-layout:fixed}[data-ui=event-calendar] [data-part=weekday],[data-ui=event-calendar] [data-part=week-number-header]{color:var(--slotted-text-muted, #5b6b7f);font-size:var(--slotted-font-size-xs, .75rem);font-weight:var(--slotted-font-weight-medium, 500);line-height:var(--_line-xs);overflow:hidden;padding-block:var(--slotted-space-3, .375rem);padding-inline:var(--slotted-space-3, .375rem);text-align:start;text-overflow:ellipsis;white-space:nowrap}[data-ui=event-calendar] [data-part=month] [data-part=weekday],[data-ui=event-calendar] [data-part=month] [data-part=week-number-header]{border-block-end:var(--_rule-width) solid var(--_rule);border-inline-end:var(--_rule-width) solid var(--_rule)}[data-ui=event-calendar] [data-part=week-number-header],[data-ui=event-calendar] [data-part=week-number]{inline-size:calc(var(--slotted-space-9, 2rem) + var(--slotted-space-2, .25rem))}[data-ui=event-calendar] [data-part=week-number]{border-block-end:var(--_rule-width) solid var(--_rule);border-inline-end:var(--_rule-width) solid var(--_rule);color:var(--slotted-text-muted, #5b6b7f);font-size:var(--slotted-font-size-xs, .75rem);font-variant-numeric:tabular-nums;font-weight:var(--slotted-font-weight-regular, 400);padding-block-start:var(--slotted-space-4, .5rem);text-align:center;vertical-align:top}[data-ui=event-calendar] [data-part=day]{--_pad: var(--_air);border-block-end:var(--_rule-width) solid var(--_rule);border-inline-end:var(--_rule-width) solid var(--_rule);padding:var(--_pad);position:relative;vertical-align:top}[data-ui=event-calendar] [data-part=day][data-non-working],[data-ui=event-calendar] [data-part=column][data-non-working],[data-ui=event-calendar] [data-part=all-day-cell][data-non-working]{background-color:var(--slotted-event-calendar-off-background, var(--_off))}[data-ui=event-calendar] [data-part=day][data-selected],[data-ui=event-calendar] [data-part=all-day-cell][data-selected]{--_run-edge: var(--slotted-border-width-thin, 1px);--_run-color: var( --slotted-event-calendar-selection-border-color, var(--slotted-tone-accent-border, #2563eb) );--_run-start: 0px;--_run-end: 0px;--_run-direction: 1;background-color:var( --slotted-event-calendar-selection-background, var(--slotted-tone-accent-surface, #eff6ff) );box-shadow:inset 0 var(--_run-edge) 0 0 var(--_run-color),inset 0 calc(var(--_run-edge) * -1) 0 0 var(--_run-color),inset calc(var(--_run-start) * var(--_run-direction)) 0 0 0 var(--_run-color),inset calc(var(--_run-end) * var(--_run-direction) * -1) 0 0 0 var(--_run-color)}[data-ui=event-calendar]:dir(rtl) [data-part=day][data-selected],[data-ui=event-calendar]:dir(rtl) [data-part=all-day-cell][data-selected]{--_run-direction: -1}[data-ui=event-calendar] [data-part=day][data-selected]:not([data-selected]+*),[data-ui=event-calendar] [data-part=all-day-cell][data-selected]:not([data-selected]+*){--_run-start: var(--_run-edge)}[data-ui=event-calendar] [data-part=day][data-selected]:not(:has(+[data-selected])),[data-ui=event-calendar] [data-part=all-day-cell][data-selected]:not(:has(+[data-selected])){--_run-end: var(--_run-edge)}[data-ui=event-calendar] [data-part=day-header]{align-items:center;display:flex;gap:var(--slotted-space-2, .25rem);justify-content:space-between;margin-block-end:var(--_air);min-inline-size:0}[data-ui=event-calendar] [data-part=day-content]{color:var(--slotted-text-muted, #5b6b7f);font-size:var(--slotted-font-size-xs, .75rem);line-height:var(--_line-xs);min-inline-size:0;overflow:hidden;text-overflow:ellipsis;unicode-bidi:plaintext;white-space:nowrap}[data-ui=event-calendar] [data-part=day-number]{align-items:center;appearance:none;background-color:transparent;block-size:var(--_event-size);border:0;border-radius:var(--slotted-radius-full, 9999px);color:inherit;cursor:pointer;display:inline-flex;flex:0 0 auto;font:inherit;font-size:var(--_event-font-size);font-variant-numeric:tabular-nums;justify-content:center;min-inline-size:var(--_event-size);padding-block:0;padding-inline:var(--slotted-space-2, .25rem);transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}[data-ui=event-calendar] [data-part=day-number]:hover:not([data-disabled]){background-color:var(--slotted-tone-secondary-subtle-hover, #eef1f5)}[data-ui=event-calendar] [data-part=day-number]:active:not([data-disabled]){background-color:var(--slotted-tone-secondary-subtle-active, #e2e8f0);transition-duration:var(--slotted-duration-instant)}[data-ui=event-calendar] [data-part=day][data-outside-month] [data-part=day-number]{color:var(--slotted-text-muted, #5b6b7f)}[data-ui=event-calendar] [data-today]>[data-part=day-header] [data-part=day-number],[data-ui=event-calendar] [data-part=column-header][data-today] [data-part=day-number]{background-color:var( --slotted-event-calendar-today-background, var(--slotted-tone-accent-solid, #2563eb) );color:var(--slotted-event-calendar-today-color, var(--slotted-tone-accent-on-solid, #ffffff));font-weight:var(--slotted-font-weight-semibold, 600)}[data-ui=event-calendar] [data-part=day-events],[data-ui=event-calendar] [data-part=all-day-cell]{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:repeat(var(--slotted-event-calendar-lanes, 3),var(--_event-size));row-gap:var(--_air)}[data-ui=event-calendar] [data-part=day-events]{container:slotted-event-calendar-day / inline-size;grid-template-rows:repeat(var(--slotted-event-calendar-lanes, 3),var(--_event-size)) var(--_event-size);position:relative}[data-ui=event-calendar] [data-part=day-events]>[data-part=event],[data-ui=event-calendar] [data-part=all-day-cell]>[data-part=event]{grid-column:1;grid-row:var(--slotted-event-lane, 1);justify-self:start}[data-ui=event-calendar] [data-part=day-events]>[data-part=more]{grid-column:1;grid-row:-2 / -1;justify-self:start}[data-ui=event-calendar] [data-part=event]{align-items:center;appearance:none;background-color:transparent;border:var(--slotted-border-width-thin, 1px) solid transparent;border-radius:var(--_event-radius);color:var(--slotted-text, #0f172a);cursor:pointer;display:flex;font:inherit;font-size:var(--_event-font-size);gap:var(--slotted-space-2, .25rem);line-height:var(--_line-xs);margin:0;min-inline-size:0;overflow:hidden;padding-block:0;padding-inline:var(--slotted-space-3, .375rem);text-align:start;text-decoration:none;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);-webkit-tap-highlight-color:transparent}[data-ui=event-calendar] [data-part=event][data-color=\"1\"]{--_hue: var(--slotted-data-1, #2563eb)}[data-ui=event-calendar] [data-part=event][data-color=\"2\"]{--_hue: var(--slotted-data-2, #ea580c)}[data-ui=event-calendar] [data-part=event][data-color=\"3\"]{--_hue: var(--slotted-data-3, #0891b2)}[data-ui=event-calendar] [data-part=event][data-color=\"4\"]{--_hue: var(--slotted-data-4, #dc2626)}[data-ui=event-calendar] [data-part=event][data-color=\"5\"]{--_hue: var(--slotted-data-5, #7c3aed)}[data-ui=event-calendar] [data-part=event][data-color=\"6\"]{--_hue: var(--slotted-data-6, #a16207)}[data-ui=event-calendar] [data-part=event][data-color=\"7\"]{--_hue: var(--slotted-data-7, #c026d3)}[data-ui=event-calendar] [data-part=event][data-color=\"8\"]{--_hue: var(--slotted-data-8, #16a34a)}[data-ui=event-calendar] [data-part=event-time],[data-ui=event-calendar] [data-part=event-title],[data-ui=event-calendar] [data-part=event-location],[data-ui=event-calendar] [data-part=more],[data-ui=event-calendar] [data-part=hour],[data-ui=event-calendar] [data-part=zone],[data-ui=event-calendar] [data-part=selection],[data-ui=event-calendar] [data-part=offset-change]{unicode-bidi:plaintext}[data-ui=event-calendar] [data-part=event-time]{color:var(--slotted-text-muted, #5b6b7f);flex:0 0 auto;font-variant-numeric:tabular-nums;white-space:nowrap}[data-ui=event-calendar] [data-part=event-title]{flex:0 1 auto;font-weight:var(--slotted-font-weight-medium, 500);min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-ui=event-calendar] [data-part=event-location]{color:var(--slotted-text-muted, #5b6b7f);min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-ui=event-calendar] [data-part=event-meta],[data-ui=event-calendar] [data-part=continuation]{block-size:1px;clip-path:inset(50%);inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}[data-ui=event-calendar] [data-part=day-events]>[data-part=event]:not([data-bar]){position:relative;block-size:var(--_event-size);inline-size:100%;padding-inline:var(--slotted-space-2, .25rem)}[data-ui=event-calendar] [data-part=day-events]>[data-part=event]:not([data-bar]):before,[data-ui=event-calendar] [data-part=list-events] [data-part=event]:before{background-color:var(--_hue);block-size:var(--slotted-space-4, .5rem);border-radius:var(--slotted-radius-full, 9999px);content:\"\";flex:0 0 auto;inline-size:var(--slotted-space-4, .5rem)}[data-ui=event-calendar] [data-part=day-events]>[data-part=event]:not([data-bar]):hover:not([data-disabled]){background-color:var(--slotted-tone-secondary-subtle-hover, #eef1f5)}[data-ui=event-calendar] [data-part=day-events]>[data-part=event]:not([data-bar]):active:not([data-disabled],[data-open]){background-color:var(--slotted-tone-secondary-subtle-active, #e2e8f0);transition-duration:var(--slotted-duration-instant)}[data-ui=event-calendar] [data-part=day-events]>[data-part=event]:not([data-bar])[data-open]{background-color:light-dark(color-mix(in oklab,var(--_hue) var(--_tint),var(--_base)),color-mix(in oklab,var(--_hue) var(--_tint-dark),var(--_base)))}[data-ui=event-calendar] [data-part=event][data-bar],[data-ui=event-calendar] [data-part=column]>[data-part=event]{--_ground: light-dark( color-mix(in oklab, var(--_hue) var(--_tint), var(--_base)), color-mix(in oklab, var(--_hue) var(--_tint-dark), var(--_base)) );--_ink: color-mix(in oklab, var(--_hue) var(--_ink-mix), var(--slotted-text, #0f172a));background-color:var(--_ground);border-color:light-dark(color-mix(in oklab,var(--_hue) var(--_edge),var(--_base)),color-mix(in oklab,var(--_hue) var(--_edge-dark),var(--_base)));color:var(--_ink)}[data-ui=event-calendar] [data-part=event][data-bar] [data-part=event-time],[data-ui=event-calendar] [data-part=event][data-bar] [data-part=event-location],[data-ui=event-calendar] [data-part=column]>[data-part=event]>[data-part=event-time],[data-ui=event-calendar] [data-part=column]>[data-part=event]>[data-part=event-location]{color:color-mix(in oklab,var(--_ink) 72%,var(--_ground))}[data-ui=event-calendar] [data-part=event][data-bar]:hover:not([data-disabled],[data-open],[data-dragging],[data-context]),[data-ui=event-calendar] [data-part=column]>[data-part=event]:hover:not([data-disabled],[data-open],[data-dragging],[data-context]){--_ground: light-dark( color-mix(in oklab, var(--_hue) var(--_tint-hover), var(--_base)), color-mix(in oklab, var(--_hue) var(--_tint-hover-dark), var(--_base)) );border-color:light-dark(color-mix(in oklab,var(--_hue) var(--_edge-hover),var(--_base)),color-mix(in oklab,var(--_hue) var(--_edge-hover-dark),var(--_base)))}[data-ui=event-calendar] [data-part=event][data-bar]:active:not([data-disabled],[data-open],[data-dragging],[data-context]),[data-ui=event-calendar] [data-part=column]>[data-part=event]:active:not([data-disabled],[data-open],[data-dragging],[data-context]){--_ground: light-dark( color-mix(in oklab, var(--_hue) var(--_tint-active), var(--_base)), color-mix(in oklab, var(--_hue) var(--_tint-active-dark), var(--_base)) );transition-duration:var(--slotted-duration-instant)}[data-ui=event-calendar] [data-part=event][data-bar][data-open],[data-ui=event-calendar] [data-part=column]>[data-part=event][data-open],[data-ui=event-calendar] [data-part=event][data-bar][data-context],[data-ui=event-calendar] [data-part=column]>[data-part=event][data-context],[data-ui=event-calendar] [data-part=event][data-bar][data-dragging],[data-ui=event-calendar] [data-part=column]>[data-part=event][data-dragging]{--_ground: color-mix(in oklab, var(--_hue) 80%, #000000);--_ink: #ffffff;border-color:var(--_ground)}[data-ui=event-calendar] [data-part=event][data-bar][data-dragging][data-drop-invalid],[data-ui=event-calendar] [data-part=column]>[data-part=event][data-dragging][data-drop-invalid]{--_ground: light-dark( color-mix(in oklab, var(--_hue) var(--_tint), var(--_base)), color-mix(in oklab, var(--_hue) var(--_tint-dark), var(--_base)) );--_ink: color-mix(in oklab, var(--_hue) var(--_ink-mix), var(--slotted-text, #0f172a));border-color:var(--slotted-tone-danger-border, #dc2626);border-style:dashed}[data-ui=event-calendar]:has([data-part=event][data-drop-invalid]),[data-ui=event-calendar]:has([data-part=event][data-drop-invalid]) *{cursor:not-allowed}[data-ui=event-calendar] [data-part=event][data-bar][data-open]:hover:not([data-disabled]),[data-ui=event-calendar] [data-part=column]>[data-part=event][data-open]:hover:not([data-disabled]){--_ground: color-mix(in oklab, var(--_hue) 70%, #000000)}[data-ui=event-calendar] [data-part=event][data-bar][data-open]:active:not([data-disabled]),[data-ui=event-calendar] [data-part=column]>[data-part=event][data-open]:active:not([data-disabled]){--_ground: color-mix(in oklab, var(--_hue) 60%, #000000);transition-duration:var(--slotted-duration-instant)}[data-ui=event-calendar] [data-part=column]>[data-part=event]:not([data-short]):after{background-image:linear-gradient(to bottom,transparent,var(--_ground));block-size:min(var(--slotted-space-6, 1rem),45%);border-end-end-radius:inherit;border-end-start-radius:inherit;content:\"\";inset-block-end:0;inset-inline:0;pointer-events:none;position:absolute}[data-ui=event-calendar] [data-part=event][data-past]:not([data-open],[data-dragging]){--_tint: 7%;--_tint-hover: 13%;--_edge: 20%;--_tint-dark: 12%;--_tint-hover-dark: 19%;--_edge-dark: 26%;--_ink-mix: 30%}[data-ui=event-calendar] [data-part=day-events]>[data-part=event][data-past]:not([data-bar]):before{opacity:.55}[data-ui=event-calendar] [data-part=day-events]>[data-part=event][data-past]:not([data-bar]){color:var(--slotted-text-muted, #5b6b7f)}[data-ui=event-calendar] [data-part=list-events] [data-part=event][data-past]:before{opacity:.55}[data-ui=event-calendar] [data-part=list-events] [data-part=event][data-past]{color:var(--slotted-text-muted, #5b6b7f)}[data-ui=event-calendar] [data-part=event][data-bar]{block-size:var(--_event-size);inline-size:calc(var(--slotted-event-span, 1) * (100% + 2 * var(--_pad, 0px) + var(--_rule-width)) - 2 * var(--_pad, 0px) - var(--_rule-width));inset-block-start:0;inset-inline-start:0;position:absolute;z-index:1}[data-ui=event-calendar] [data-part=event][data-bar][data-continues-before]{border-end-start-radius:0;border-start-start-radius:0;padding-inline-start:var(--slotted-space-1, .125rem)}[data-ui=event-calendar] [data-part=event][data-bar][data-continues-after]{border-end-end-radius:0;border-start-end-radius:0;padding-inline-end:var(--slotted-space-1, .125rem)}[data-ui=event-calendar] [data-part=event][data-bar]>[data-ui=icon][data-edge]{color:color-mix(in oklab,var(--_hue) 70%,var(--slotted-text, #0f172a))}[data-ui=event-calendar] [data-part=event][data-bar]>[data-ui=icon][data-edge=start]{rotate:180deg}[data-ui=event-calendar] [data-part=event][data-bar]>[data-ui=icon][data-edge=end]{margin-inline-start:auto}[data-ui=event-calendar]:dir(rtl) [data-part=event][data-bar]>[data-ui=icon][data-edge=start]{rotate:0deg}[data-ui=event-calendar]:dir(rtl) [data-part=event][data-bar]>[data-ui=icon][data-edge=end]{rotate:180deg}[data-ui=event-calendar] [data-part=event][data-status=tentative][data-bar]:not([data-open],[data-dragging]),[data-ui=event-calendar] [data-part=column]>[data-part=event][data-status=tentative]:not([data-open],[data-dragging]){--_tint: 0%;--_tint-hover: 7%;--_tint-active: 12%;--_tint-dark: 0%;--_tint-hover-dark: 12%;--_tint-active-dark: 18%;border-color:var(--_hue);border-style:dashed}[data-ui=event-calendar] [data-part=event][data-status=cancelled]{color:var(--slotted-text-muted, #5b6b7f)}[data-ui=event-calendar] [data-part=event][data-status=cancelled] [data-part=event-title]{text-decoration:line-through}[data-ui=event-calendar] [data-part=event][data-editable]{cursor:grab;touch-action:none}[data-ui=event-calendar] [data-part=event][data-dragging]{box-shadow:var(--slotted-shadow-md, none);cursor:grabbing;pointer-events:none;z-index:5}[data-ui=event-calendar] [data-part=resize-handle]{display:flex;inset-block-end:0;inset-inline:0;align-items:center;block-size:var(--slotted-space-4, .5rem);cursor:ns-resize;justify-content:center;position:absolute;touch-action:none;z-index:1}[data-ui=event-calendar] [data-part=event][data-bar]>[data-part=resize-handle]{block-size:auto;cursor:ew-resize;inline-size:var(--slotted-space-4, .5rem);inset-block:0;inset-inline:auto 0}[data-ui=event-calendar] [data-part=resize-handle]:before{background-color:var(--_ink, var(--_hue));block-size:var(--slotted-border-width-thick, 2px);border-radius:var(--slotted-radius-full, 9999px);content:\"\";inline-size:var(--slotted-space-6, 1rem);opacity:0;transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit)}[data-ui=event-calendar] [data-part=event][data-bar]>[data-part=resize-handle]:before{block-size:var(--slotted-space-4, .5rem);inline-size:var(--slotted-border-width-thick, 2px)}[data-ui=event-calendar] [data-part=event]:hover:not([data-disabled])>[data-part=resize-handle]:before,[data-ui=event-calendar] [data-part=event]:focus-visible>[data-part=resize-handle]:before,[data-ui=event-calendar] [data-part=event][data-dragging]>[data-part=resize-handle]:before{opacity:1;transition-timing-function:var(--slotted-easing-enter)}[data-ui=event-calendar] [data-part=more]{align-items:center;appearance:none;background-color:transparent;block-size:var(--_event-size);border:var(--slotted-border-width-thin, 1px) solid transparent;border-radius:var(--_event-radius);color:var(--slotted-text-muted, #5b6b7f);cursor:pointer;display:inline-flex;font:inherit;font-size:var(--_event-font-size);font-weight:var(--slotted-font-weight-medium, 500);gap:.3em;max-inline-size:100%;overflow:hidden;padding-block:0;padding-inline:var(--slotted-space-2, .25rem);transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);white-space:nowrap}[data-ui=event-calendar] [data-part=more]:hover:not([data-disabled]),[data-ui=event-calendar] [data-part=more][aria-expanded=true]{background-color:var(--slotted-tone-secondary-subtle-hover, #eef1f5);color:var(--slotted-text, #0f172a)}[data-ui=event-calendar] [data-part=more]:active:not([data-disabled]){background-color:var(--slotted-tone-secondary-subtle-active, #e2e8f0);transition-duration:var(--slotted-duration-instant)}@container slotted-event-calendar-day (max-width: 7.5rem){[data-ui=event-calendar] [data-part=day-events]>[data-part=event]:not([data-bar])>[data-part=event-time]{display:none}}@container slotted-event-calendar-event (max-width: 4.5rem){[data-ui=event-calendar] [data-part=column]>[data-part=event]>[data-part=event-time],[data-ui=event-calendar] [data-part=column]>[data-part=event]>[data-part=event-location]{display:none}[data-ui=event-calendar] [data-part=column]>[data-part=event]{padding-inline:var(--slotted-space-2, .25rem)}}@container slotted-event-calendar-event (max-width: 2rem){[data-ui=event-calendar] [data-part=column]>[data-part=event]>[data-part=event-title]{block-size:1px;clip-path:inset(50%);inline-size:1px;overflow:hidden;position:absolute;white-space:nowrap}}@container slotted-event-calendar-event (max-width: 4.5rem){[data-ui=event-calendar] [data-part=column]>[data-part=more]>span{display:none}}[data-ui=event-calendar] [data-part=time-grid]{border-block-start:var(--_rule-width) solid var(--_rule);display:flex;flex:1 1 auto;flex-direction:column;min-block-size:0}[data-ui=event-calendar] [data-part=time-head]{border-block-end:var(--_rule-width) solid var(--_rule);overflow:hidden;scrollbar-gutter:stable}[data-ui=event-calendar] [data-part=columns],[data-ui=event-calendar] [data-part=all-day-row],[data-ui=event-calendar] [data-part=time-row]{display:grid;grid-template-columns:var(--_gutter) repeat(var(--slotted-event-calendar-days, 7),minmax(0,1fr))}[data-ui=event-calendar] [data-part=columns]{border-block-end:var(--_rule-width) solid var(--_rule)}[data-ui=event-calendar] [data-part=zone]{align-self:end;color:var(--slotted-text-muted, #5b6b7f);font-size:var(--slotted-font-size-xs, .75rem);font-variant-numeric:tabular-nums;line-height:var(--_line-xs);overflow:hidden;padding-block:var(--slotted-space-3, .375rem);padding-inline:var(--slotted-space-2, .25rem) var(--slotted-space-3, .375rem);text-align:end;text-overflow:ellipsis;white-space:nowrap}[data-ui=event-calendar] [data-part=column-header]{align-items:center;border-inline-start:var(--_rule-width) solid var(--_rule);display:flex;flex-direction:column;gap:var(--slotted-space-1, .125rem);min-inline-size:0;padding-block:var(--slotted-space-3, .375rem);padding-inline:var(--_air)}[data-ui=event-calendar] [data-part=column-header] [data-part=weekday]{max-inline-size:100%;padding:0}[data-ui=event-calendar] [data-part=column-header][data-today] [data-part=weekday]{color:var(--slotted-tone-accent-text, #1d4ed8)}[data-ui=event-calendar] [data-part=column-header] [data-part=day-number]{block-size:var(--slotted-control-inner-size-lg, 28px);font-size:var(--slotted-font-size-lg, 1rem);font-weight:var(--slotted-font-weight-medium, 500);min-inline-size:var(--slotted-control-inner-size-lg, 28px)}[data-ui=event-calendar] [data-part=column-header] [data-part=day-content],[data-ui=event-calendar] [data-part=offset-change]{color:var(--slotted-text-muted, #5b6b7f);font-size:var(--slotted-font-size-xs, .75rem);line-height:var(--_line-xs);max-inline-size:100%;overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap}[data-ui=event-calendar] [data-part=all-day-label]{color:var(--slotted-text-muted, #5b6b7f);font-size:var(--slotted-font-size-xs, .75rem);hyphens:auto;line-height:var(--_line-xs);overflow-wrap:break-word;padding-block:calc(var(--_air) + (var(--_event-size) - 1lh) / 2);padding-inline:var(--slotted-space-2, .25rem) var(--slotted-space-3, .375rem);text-align:end}[data-ui=event-calendar] [data-part=all-day-cell]{--_pad: var(--_air);border-inline-start:var(--_rule-width) solid var(--_rule);min-inline-size:0;padding:var(--_pad);position:relative}[data-ui=event-calendar] [data-part=scroller]{flex:1 1 40rem;max-block-size:max-content;min-block-size:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable}[data-ui=event-calendar] [data-part=gutter]{display:flex;flex-direction:column;min-inline-size:0}[data-ui=event-calendar] [data-part=hour]{block-size:var(--_hour);color:var(--slotted-text-muted, #5b6b7f);flex:0 0 auto;font-size:var(--slotted-font-size-xs, .75rem);font-variant-numeric:tabular-nums;line-height:var(--_line-xs);overflow:hidden;padding-inline-end:var(--slotted-space-3, .375rem);text-align:end;text-overflow:ellipsis;translate:0 calc(var(--_line-xs) / -2);white-space:nowrap}[data-ui=event-calendar] [data-part=hour]:nth-child(1 of[data-part=hour]){visibility:hidden}[data-ui=event-calendar] [data-part=column]{background-image:linear-gradient(to bottom,var(--_rule) var(--_rule-width),transparent var(--_rule-width)),linear-gradient(to bottom,color-mix(in oklab,var(--_rule) 45%,transparent) var(--_rule-width),transparent var(--_rule-width));background-size:100% var(--_hour),100% calc(var(--_hour) * var(--slotted-event-calendar-slot, 30) / 60);border-inline-start:var(--_rule-width) solid var(--_rule);min-inline-size:0;position:relative}[data-ui=event-calendar] [data-part=column][data-today]{background-color:color-mix(in oklab,var(--slotted-tone-accent-surface, #eff6ff) 50%,transparent)}[data-ui=event-calendar] [data-part=column]>[data-part=event],[data-ui=event-calendar] [data-part=column]>[data-part=more],[data-ui=event-calendar] [data-part=column]>[data-part=selection]{--_room: calc(100% - var(--slotted-space-5, .75rem));--_share: calc(var(--_room) / var(--slotted-event-columns, 1));block-size:max(calc(var(--slotted-event-length, 30) * var(--_hour) / 60 - var(--_air)),var(--_event-size));inline-size:calc(var(--_share) * var(--slotted-event-span, 1) - var(--_air));inset-block-start:calc(var(--slotted-event-start, 0) * var(--_hour) / 60 + var(--_air) / 2);inset-inline-start:calc(var(--_share) * var(--slotted-event-column, 0) + var(--_air));position:absolute}[data-ui=event-calendar] [data-part=column]>[data-part=event]{align-content:start;align-items:start;container:slotted-event-calendar-event / inline-size;flex-direction:column;gap:0;padding-block:var(--slotted-space-1, .125rem);z-index:1}[data-ui=event-calendar] [data-part=column]>[data-part=event]>*{flex-shrink:0}[data-ui=event-calendar] [data-part=column]>[data-part=event]>[data-part=event-title]{max-inline-size:100%;order:-1}[data-ui=event-calendar] [data-part=column]>[data-part=event]:not([data-short])>[data-part=event-title]{-webkit-box-orient:vertical;display:-webkit-box;hyphens:auto;-webkit-line-clamp:3;line-clamp:3;overflow-wrap:break-word;white-space:normal}[data-ui=event-calendar] [data-part=column]>[data-part=event]>[data-part=event-location],[data-ui=event-calendar] [data-part=column]>[data-part=event]>[data-part=event-time]{max-inline-size:100%;overflow:hidden;text-overflow:ellipsis}[data-ui=event-calendar] [data-part=column]>[data-part=event][data-short]{align-items:center;flex-direction:row;gap:var(--slotted-space-2, .25rem);padding-block:0}[data-ui=event-calendar] [data-part=column]>[data-part=event][data-short]>[data-part=event-title]{flex:0 0 auto;max-inline-size:100%}[data-ui=event-calendar] [data-part=column]>[data-part=event][data-short]>[data-part=event-time]{flex:1 1 0;min-inline-size:0}[data-ui=event-calendar] [data-part=column]>[data-part=event][data-clipped-start],[data-ui=event-calendar] [data-part=column]>[data-part=event][data-continues-before]{border-block-start-style:dashed;border-start-end-radius:0;border-start-start-radius:0}[data-ui=event-calendar] [data-part=column]>[data-part=event][data-clipped-end],[data-ui=event-calendar] [data-part=column]>[data-part=event][data-continues-after]{border-block-end-style:dashed;border-end-end-radius:0;border-end-start-radius:0}[data-ui=event-calendar] [data-part=column]>[data-part=more]{align-items:start;container:slotted-event-calendar-event / inline-size;background-color:color-mix(in oklab,var(--slotted-text-muted, #5b6b7f) 9%,var(--_base));border-color:color-mix(in oklab,var(--slotted-text-muted, #5b6b7f) 24%,var(--_base));padding-block:var(--slotted-space-1, .125rem);z-index:1}[data-ui=event-calendar] [data-part=column]>[data-part=more]:hover:not([data-disabled]),[data-ui=event-calendar] [data-part=column]>[data-part=more][aria-expanded=true]{background-color:color-mix(in oklab,var(--slotted-text-muted, #5b6b7f) 15%,var(--_base))}[data-ui=event-calendar] [data-part=column]>[data-part=more]:active:not([data-disabled]){background-color:color-mix(in oklab,var(--slotted-text-muted, #5b6b7f) 21%,var(--_base))}[data-ui=event-calendar] [data-part=column]>[data-part=more][data-overlay]{align-items:center;background-color:var(--_base);block-size:auto;border-radius:var(--slotted-radius-full, 9999px);box-shadow:var(--slotted-shadow-sm, none);container-type:normal;inline-size:auto;inset-block-start:calc((var(--slotted-event-start, 0) + var(--slotted-event-length, 30)) * var(--_hour) / 60 - var(--_air));inset-inline:auto var(--slotted-space-4, .5rem);line-height:var(--_line-xs);translate:0 -100%;padding-block:0;padding-inline:var(--slotted-space-3, .375rem);z-index:3}[data-ui=event-calendar] [data-part=column]>[data-part=more][data-overlay]>span{display:none}[data-ui=event-calendar] [data-part=column]>[data-part=selection]{background-color:var( --slotted-event-calendar-selection-background, var(--slotted-tone-accent-surface, #eff6ff) );border:var(--slotted-border-width-thin, 1px) solid var( --slotted-event-calendar-selection-border-color, var(--slotted-tone-accent-border, #2563eb) );border-radius:var(--_event-radius);color:var(--slotted-tone-accent-text, #1d4ed8);font-size:var(--_event-font-size);font-variant-numeric:tabular-nums;font-weight:var(--slotted-font-weight-medium, 500);inline-size:calc(var(--_room) - var(--_air));inset-inline-start:var(--_air);line-height:var(--_line-xs);overflow:hidden;padding-block:var(--slotted-space-1, .125rem);padding-inline:var(--slotted-space-3, .375rem);pointer-events:none;text-overflow:ellipsis;white-space:nowrap;z-index:2}[data-ui=event-calendar] [data-part=off-hours]{background-color:var(--slotted-event-calendar-off-background, var(--_off));block-size:calc(var(--slotted-event-length, 0) * var(--_hour) / 60);inset-block-start:calc(var(--slotted-event-start, 0) * var(--_hour) / 60);inset-inline:0;pointer-events:none;position:absolute}[data-ui=event-calendar] [data-part=now],[data-ui=event-calendar] [data-part=offset-line]{inset-block-start:calc(var(--slotted-event-start, 0) * var(--_hour) / 60);inset-inline:0;pointer-events:none;position:absolute}[data-ui=event-calendar] [data-part=now]{border-block-start:var(--slotted-border-width-thick, 2px) solid var(--slotted-event-calendar-now-color, var(--slotted-tone-accent-solid, #2563eb));translate:0 -50%;z-index:2}[data-ui=event-calendar] [data-part=now]:before{background-color:var( --slotted-event-calendar-now-color, var(--slotted-tone-accent-solid, #2563eb) );block-size:var(--slotted-space-4, .5rem);border-radius:var(--slotted-radius-full, 9999px);content:\"\";inline-size:var(--slotted-space-4, .5rem);inset-block-start:calc(var(--slotted-space-4, .5rem) / -2 - var(--slotted-border-width-thick, 2px) / 2);inset-inline-start:calc(var(--slotted-space-4, .5rem) / -2);position:absolute}[data-ui=event-calendar] [data-part=offset-line]{border-block-start:var(--slotted-border-width-thin, 1px) dashed var(--slotted-border-strong, #78899c);z-index:1}[data-ui=event-calendar]>[data-part=body]>[data-part=list]{border-block-start:var(--_rule-width) solid var(--_rule);display:flex;flex-direction:column}[data-ui=event-calendar] [data-part=list-day]{border-block-end:var(--_rule-width) solid var(--_rule);column-gap:var(--slotted-space-6, 1rem);display:grid;grid-template-columns:calc(var(--slotted-space-12, 4rem) * 2) minmax(0,1fr);padding-block:var(--slotted-space-4, .5rem)}[data-ui=event-calendar] [data-part=list-day-heading]{display:flex;flex-direction:column;margin:0;padding-block:var(--slotted-space-3, .375rem)}[data-ui=event-calendar] [data-part=list-weekday]{color:var(--slotted-text-muted, #5b6b7f);font-size:var(--slotted-font-size-xs, .75rem);font-weight:var(--slotted-font-weight-medium, 500);line-height:var(--_line-xs)}[data-ui=event-calendar] [data-part=list-date]{font-size:var(--slotted-font-size-sm, .8125rem);font-weight:var(--slotted-font-weight-semibold, 600);line-height:var(--_line-sm)}[data-ui=event-calendar] [data-part=list-day][data-today] [data-part=list-day-heading],[data-ui=event-calendar] [data-part=list-day][data-today] [data-part=list-weekday]{color:var(--slotted-tone-accent-text, #1d4ed8)}[data-ui=event-calendar] [data-part=list-events]{display:flex;flex-direction:column;gap:var(--slotted-space-1, .125rem);list-style:none;margin:0;padding:0}[data-ui=event-calendar] [data-part=list-events] [data-part=event]{align-items:start;column-gap:var(--slotted-space-4, .5rem);display:grid;font-size:var(--slotted-font-size-sm, .8125rem);grid-template-columns:calc(var(--slotted-space-12, 4rem) * 2.5) auto minmax(0,1fr);inline-size:100%;line-height:var(--_line-sm);min-block-size:var(--slotted-control-height-md, 34px);padding-block:var(--slotted-space-3, .375rem);padding-inline:var(--slotted-space-3, .375rem)}[data-ui=event-calendar] [data-part=list-events] [data-part=event]:before{grid-column:2;grid-row:1;margin-block-start:calc((1lh - var(--slotted-space-4, .5rem)) / 2)}[data-ui=event-calendar] [data-part=list-events] [data-part=event-time]{grid-column:1;grid-row:1;white-space:normal}[data-ui=event-calendar] [data-part=list-events] [data-part=event-title]{grid-column:3;grid-row:1;overflow-wrap:break-word;white-space:normal}[data-ui=event-calendar] [data-part=list-events] [data-part=event-location]{font-size:var(--slotted-font-size-xs, .75rem);grid-column:3;line-height:var(--_line-xs);grid-row:2;overflow-wrap:break-word;white-space:normal}[data-ui=event-calendar] [data-part=list-events] [data-part=event]:hover:not([data-disabled]){background-color:var(--slotted-tone-secondary-subtle-hover, #eef1f5)}[data-ui=event-calendar] [data-part=list-events] [data-part=event]:active:not([data-disabled],[data-open],[data-context]){background-color:var(--slotted-tone-secondary-subtle-active, #e2e8f0);transition-duration:var(--slotted-duration-instant)}[data-ui=event-calendar] [data-part=list-events] [data-part=event][data-open],[data-ui=event-calendar] [data-part=list-events] [data-part=event][data-context]{background-color:light-dark(color-mix(in oklab,var(--_hue) var(--_tint),var(--_base)),color-mix(in oklab,var(--_hue) var(--_tint-dark),var(--_base)))}[data-ui=event-calendar] [data-part=list-events] [data-part=event][data-status=tentative]:before{background-color:transparent;border:var(--slotted-border-width-medium, 1.5px) solid var(--_hue)}[data-ui=event-calendar] [data-part=detail-day],[data-ui=event-calendar] [data-part=detail-range]{display:inline-block}[data-ui=event-calendar] [data-ui=popover]>[data-part=content]>[data-part=body],[data-ui=event-calendar] [data-ui=drawer] [data-part=panel]>[data-part=body]{display:grid;gap:var(--slotted-space-5, .75rem)}[data-ui=event-calendar] [data-part=list-events][data-layout=stacked] [data-part=event]{grid-template-columns:auto minmax(0,1fr)}[data-ui=event-calendar] [data-part=list-events][data-layout=stacked] [data-part=event]:before{grid-column:1}[data-ui=event-calendar] [data-part=list-events][data-layout=stacked] [data-part=event-title]{grid-column:2;grid-row:1}[data-ui=event-calendar] [data-part=list-events][data-layout=stacked] [data-part=event-time]{font-size:var(--slotted-font-size-xs, .75rem);grid-column:2;grid-row:2;line-height:var(--_line-xs)}[data-ui=event-calendar] [data-part=list-events][data-layout=stacked] [data-part=event-location]{grid-column:2;grid-row:3}[data-ui=event-calendar] [data-part=empty]{align-items:center;color:var(--slotted-text-muted, #5b6b7f);display:flex;flex-direction:column;gap:var(--slotted-space-5, .75rem);padding-block:var(--slotted-space-10, 2.5rem);padding-inline:var(--slotted-space-6, 1rem);text-align:center}@container slotted-event-calendar (max-width: 959px){[data-ui=event-calendar]>[data-part=header]{grid-template-areas:\"title title navigation navigation\" \"views . filter actions\";grid-template-columns:auto minmax(0,1fr) auto auto}[data-ui=event-calendar] [data-part=navigation]{justify-self:end}[data-ui=event-calendar] [data-part=views]{margin-inline-start:0}}@container slotted-event-calendar (max-width: 599px){[data-ui=event-calendar][data-part=root]{--_gutter: calc(var(--slotted-space-10, 2.5rem) + var(--slotted-space-2, .25rem))}[data-ui=event-calendar] [data-part=list-day]{grid-template-columns:minmax(0,1fr);row-gap:var(--slotted-space-1, .125rem)}[data-ui=event-calendar] [data-part=list-day-heading]{align-items:baseline;column-gap:var(--slotted-space-3, .375rem);flex-direction:row;flex-wrap:wrap}[data-ui=event-calendar] [data-part=list-events] [data-part=event]{grid-template-columns:auto minmax(0,1fr)}[data-ui=event-calendar] [data-part=list-events] [data-part=event]:before{grid-column:1}[data-ui=event-calendar] [data-part=list-events] [data-part=event-title]{grid-column:2;grid-row:1}[data-ui=event-calendar] [data-part=list-events] [data-part=event-time]{font-size:var(--slotted-font-size-xs, .75rem);grid-column:2;grid-row:2;line-height:var(--_line-xs)}[data-ui=event-calendar] [data-part=list-events] [data-part=event-location]{grid-column:2;grid-row:3}[data-ui=event-calendar] [data-part=month] [data-part=day]{--_event-size: var(--slotted-space-3, .375rem);--_air: var(--slotted-space-1, .125rem)}[data-ui=event-calendar] [data-part=month] [data-part=day-header]{margin-block-end:var(--slotted-space-2, .25rem)}[data-ui=event-calendar] [data-part=month] [data-part=day-number]{block-size:var(--slotted-control-inner-size-sm, 22px);min-inline-size:var(--slotted-control-inner-size-sm, 22px)}[data-ui=event-calendar] [data-part=month] [data-part=day-number]:after{content:\"\";inset:0;position:absolute}[data-ui=event-calendar] [data-part=month] [data-part=event]{padding:0;pointer-events:none}[data-ui=event-calendar] [data-part=column]>[data-part=event]{background-color:light-dark(color-mix(in oklab,var(--_hue) var(--_tint-active),var(--_base)),color-mix(in oklab,var(--_hue) var(--_tint-active-dark),var(--_base)));border-color:var(--_hue);padding:0}[data-ui=event-calendar] [data-part=column]>[data-part=more]{justify-content:center;padding-inline:0}[data-ui=event-calendar] [data-part=month] [data-part=event][data-bar]{background-color:var(--_hue);border-color:var(--_hue);border-radius:var(--slotted-radius-full, 9999px)}[data-ui=event-calendar] [data-part=month] [data-part=event]:not([data-bar]){inline-size:var(--slotted-space-4, .5rem)}[data-ui=event-calendar] [data-part=month] [data-part=event]:before{block-size:var(--slotted-space-3, .375rem);inline-size:var(--slotted-space-3, .375rem)}[data-ui=event-calendar] [data-part=month] [data-part=event][data-bar]:before,[data-ui=event-calendar] [data-part=month] [data-part=event][data-bar]:after{display:none}[data-ui=event-calendar] [data-part=month] [data-part=event]>*,[data-ui=event-calendar] [data-part=column]>[data-part=event]>*,[data-ui=event-calendar] [data-part=month] [data-part=day-content],[data-ui=event-calendar] [data-part=month] [data-part=more]>*,[data-ui=event-calendar] [data-part=column-header] [data-part=day-content],[data-ui=event-calendar] [data-part=offset-change]{block-size:1px;clip-path:inset(50%);inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}[data-ui=event-calendar] [data-part=month] [data-part=more]{block-size:auto;font-size:var(--slotted-font-size-xs, .75rem);line-height:var(--_line-xs);padding:0;pointer-events:none}[data-ui=event-calendar] [data-part=month] [data-part=day-events]{grid-template-rows:repeat(var(--slotted-event-calendar-lanes, 3),var(--_event-size)) auto}[data-ui=event-calendar] [data-part=column-header] [data-part=day-number]{block-size:var(--slotted-control-inner-size-md, 24px);font-size:var(--slotted-font-size-md, .875rem);min-inline-size:var(--slotted-control-inner-size-md, 24px)}[data-ui=event-calendar] [data-part=column]>[data-part=event],[data-ui=event-calendar] [data-part=column]>[data-part=more]{--_room: 100%}}@container slotted-event-calendar (max-width: 479px){[data-ui=event-calendar]>[data-part=header]{grid-template-areas:\"title title title title\" \"navigation . filter actions\" \"views views views views\";grid-template-columns:auto minmax(0,1fr) auto auto}[data-ui=event-calendar] [data-part=navigation]{justify-self:start;margin-inline-start:0}[data-ui=event-calendar] [data-part=views]>*{flex:1 1 auto;min-inline-size:0}[data-ui=event-calendar] [data-part=filter]{inline-size:var(--slotted-control-height-md, 34px);padding-inline:0}[data-ui=event-calendar] [data-part=filter]>[data-ui=icon]:last-child{display:none}[data-ui=event-calendar] [data-part=filter]>:not([data-ui=icon]){block-size:1px;clip-path:inset(50%);inline-size:1px;margin:-1px;overflow:hidden;position:absolute;white-space:nowrap}}@media(forced-colors:active){[data-ui=event-calendar] [data-part=event]:before,[data-ui=event-calendar] [data-part=now]:before{forced-color-adjust:none}[data-ui=event-calendar] [data-part=event][data-bar],[data-ui=event-calendar] [data-part=column]>[data-part=event]{border-color:currentcolor}[data-ui=event-calendar] [data-part=day-events]>[data-part=event]:not([data-bar]),[data-ui=event-calendar] [data-part=list-events] [data-part=event]{border-color:Canvas}[data-ui=event-calendar] [data-today]>[data-part=day-header] [data-part=day-number],[data-ui=event-calendar] [data-part=column-header][data-today] [data-part=day-number]{background-color:Highlight;color:HighlightText;forced-color-adjust:none}}}\n", "@layer slotted.components{[data-ui=visually-hidden]:not([data-focusable]:focus-within){block-size:1px;border:0;clip-path:inset(50%);inline-size:1px;inset-block-start:0;inset-inline-start:0;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SlContextMenuTrigger, selector: "[slContextMenuTriggerFor]", inputs: ["slContextMenuTriggerFor", "longPress", "longPressDelay"], exportAs: ["slContextMenuTrigger"] }, { kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }, { kind: "component", type: SlMenu, selector: "sl-menu", inputs: ["value", "aria-label", "aria-describedby", "open", "align", "side", "size", "mount", "strategy", "sideOffset", "alignOffset", "collisionPadding", "submenuOpenDelay", "submenuCloseDelay", "typeaheadTimeout", "disabled", "loop", "typeahead", "openOnHover", "closeOnSelect", "closeOnEscape", "closeOnOutsidePress", "flip", "shift", "hideWhenDetached", "portal", "loading"], outputs: ["openChange", "openChangeRequest"], exportAs: ["slMenu"] }, { kind: "component", type: SlMenuItem, selector: "button[slMenuItem], a[slMenuItem], button[slMenuCheckboxItem], button[slMenuRadioItem]", inputs: ["disabled", "textValue", "tone", "shortcut", "closeOnSelect", "value", "checked"], outputs: ["checkedChange", "checkedChangeRequest", "select"], exportAs: ["slMenuItem"] }, { kind: "directive", type: SlMenuTrigger, selector: "[slMenuTriggerFor]", inputs: ["slMenuTriggerFor"], exportAs: ["slMenuTrigger"] }, { kind: "component", type: SlDrawer, selector: "sl-drawer", inputs: ["open", "extent", "mode", "side", "size", "mount", "escape", "outsidePress", "back", "modal", "loading", "messages", "drag", "scrimFrom", "minExtent", "maxExtent", "snapPoints", "container", "initialFocus", "finalFocus"], outputs: ["openChange", "extentChange", "openChangeRequest", "extentChangeRequest", "closed"], exportAs: ["slDrawer"] }, { kind: "directive", type: SlDrawerBody, selector: "[slDrawerBody]", inputs: ["inset"], exportAs: ["slDrawerBody"] }, { kind: "component", type: SlDrawerClose, selector: "[slDrawerClose]", inputs: ["value"], exportAs: ["slDrawerClose"] }, { kind: "directive", type: SlDrawerDescription, selector: "[slDrawerDescription]", exportAs: ["slDrawerDescription"] }, { kind: "directive", type: SlDrawerHeader, selector: "[slDrawerHeader]", exportAs: ["slDrawerHeader"] }, { kind: "component", type: SlDrawerResizer, selector: "[slDrawerResizer]", inputs: ["step", "largeStep"], exportAs: ["slDrawerResizer"] }, { kind: "directive", type: SlDrawerTitle, selector: "[slDrawerTitle]", exportAs: ["slDrawerTitle"] }, { kind: "directive", type: SlPopover, selector: "[slPopover]", inputs: ["open", "defaultOpen", "disabled", "size", "width", "side", "align", "mount", "strategy", "messages", "initialFocus", "finalFocus", "arrow", "autoFocus", "closeOnEscape", "closeOnOutsidePress", "flip", "shift", "hideWhenDetached", "portal", "sideOffset", "alignOffset", "collisionPadding", "arrowPadding"], outputs: ["openChange", "openChangeRequest"], exportAs: ["slPopover"] }, { kind: "directive", type: SlPopoverBody, selector: "[slPopoverBody]", exportAs: ["slPopoverBody"] }, { kind: "component", type: SlPopoverClose, selector: "button[slPopoverClose]", exportAs: ["slPopoverClose"] }, { kind: "component", type: SlPopoverContent, selector: "[slPopoverContent]", exportAs: ["slPopoverContent"] }, { kind: "directive", type: SlPopoverDescription, selector: "[slPopoverDescription]", exportAs: ["slPopoverDescription"] }, { kind: "directive", type: SlPopoverHeader, selector: "[slPopoverHeader]", exportAs: ["slPopoverHeader"] }, { kind: "directive", type: SlPopoverLayer, selector: "ng-template[slPopoverLayer]", exportAs: ["slPopoverLayer"] }, { kind: "directive", type: SlPopoverTitle, selector: "[slPopoverTitle]", exportAs: ["slPopoverTitle"] }, { kind: "component", type: SlProgressBar, selector: "[slProgressBar]", inputs: ["value", "min", "max", "buffer", "showValue", "valueText", "format", "locale", "wave", "placement"], exportAs: ["slProgressBar"] }, { kind: "component", type: SlSegment, selector: "[slSegment]", inputs: ["value", "disabled"], exportAs: ["slSegment"] }, { kind: "component", type: SlSegmentedControl, selector: "[slSegmentedControl]", inputs: ["value", "defaultValue", "name", "size", "orientation", "condense", "fullWidth", "disabled", "readOnly", "invalid", "required"], outputs: ["valueChange"], exportAs: ["slSegmentedControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2246
+ }
2247
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlEventCalendar, decorators: [{
2248
+ type: Component,
2249
+ args: [{ selector: '[slEventCalendar]', standalone: true, exportAs: 'slEventCalendar', imports: [
2250
+ NgTemplateOutlet,
2251
+ SlContextMenuTrigger,
2252
+ SlGlyph,
2253
+ SlIcon,
2254
+ SlMenu,
2255
+ SlMenuItem,
2256
+ SlMenuTrigger,
2257
+ SlDrawer,
2258
+ SlDrawerBody,
2259
+ SlDrawerClose,
2260
+ SlDrawerDescription,
2261
+ SlDrawerHeader,
2262
+ SlDrawerResizer,
2263
+ SlDrawerTitle,
2264
+ SlPopover,
2265
+ SlPopoverBody,
2266
+ SlPopoverClose,
2267
+ SlPopoverContent,
2268
+ SlPopoverDescription,
2269
+ SlPopoverHeader,
2270
+ SlPopoverLayer,
2271
+ SlPopoverTitle,
2272
+ SlProgressBar,
2273
+ SlSegment,
2274
+ SlSegmentedControl,
2275
+ ], template: `
2276
+ @if (header()) {
2277
+ <div data-part="header">
2278
+ <div
2279
+ data-part="title"
2280
+ role="heading"
2281
+ aria-live="polite"
2282
+ [attr.aria-level]="level()"
2283
+ [attr.id]="titleId"
2284
+ >
2285
+ {{ title() }}
2286
+ </div>
2287
+ <div data-part="navigation" role="group" [attr.aria-label]="t('navigation')">
2288
+ <button
2289
+ data-part="previous"
2290
+ type="button"
2291
+ [attr.aria-label]="previousLabel()"
2292
+ (click)="step(-1, $event)"
2293
+ >
2294
+ <span slIcon><svg slGlyph name="chevron-right"></svg></span>
2295
+ </button>
2296
+ <button data-part="today" type="button" (click)="goToday($event)">
2297
+ {{ t('today') }}
2298
+ </button>
2299
+ <button
2300
+ data-part="next"
2301
+ type="button"
2302
+ [attr.aria-label]="nextLabel()"
2303
+ (click)="step(1, $event)"
2304
+ >
2305
+ <span slIcon><svg slGlyph name="chevron-right"></svg></span>
2306
+ </button>
2307
+ </div>
2308
+ @if (views().length > 1) {
2309
+ <div data-part="views">
2310
+ <div
2311
+ slSegmentedControl
2312
+ fullWidth
2313
+ [attr.aria-label]="t('views')"
2314
+ [value]="currentView()"
2315
+ (valueChange)="onViewRequest($event)"
2316
+ >
2317
+ @for (name of views(); track name) {
2318
+ <label slSegment [value]="name">{{ viewLabel(name) }}</label>
2319
+ }
2320
+ </div>
2321
+ </div>
2322
+ }
2323
+ @if (calendars().length > 1) {
2324
+ <button #filterButton data-part="filter" type="button" [slMenuTriggerFor]="filterMenu">
2325
+ <span slIcon><svg slGlyph name="funnel"></svg></span>
2326
+ <span>{{ t('calendars') }}</span>
2327
+ <span slIcon><svg slGlyph name="chevron-down"></svg></span>
2328
+ </button>
2329
+ <sl-menu #filterMenu>
2330
+ @for (entry of calendars(); track entry.key) {
2331
+ <button
2332
+ slMenuCheckboxItem
2333
+ [checked]="shown().includes(entry.key)"
2334
+ (checkedChangeRequest)="onCalendarRequest(entry.key, $event)"
2335
+ >
2336
+ <!-- The calendar's colour opens the label; the column before it is the
2337
+ check's, and a dot there drew the check over itself. -->
2338
+ <svg aria-hidden="true" width="14" height="10" viewBox="0 0 14 10">
2339
+ <circle cx="5" cy="5" r="4" [style.fill]="swatch(entry.key)" />
2340
+ </svg>
2341
+ {{ entry.label }}
2342
+ </button>
2343
+ }
2344
+ </sl-menu>
2345
+ }
2346
+ @if (actions()) {
2347
+ <div data-part="actions"><ng-content select="[slEventCalendarActions]" /></div>
2348
+ }
2349
+ </div>
2350
+ }
2351
+
2352
+ <!-- With a context menu the body is that family's target: one region for
2353
+ every day, hour and event. -->
2354
+ @if (contextMenu(); as items) {
2355
+ <div
2356
+ #body
2357
+ data-part="body"
2358
+ [slContextMenuTriggerFor]="contextMenuRef"
2359
+ [attr.aria-busy]="loading() ? true : null"
2360
+ (keydown)="onKeyDown($event)"
2361
+ (pointerdown)="onPointerDown($event)"
2362
+ >
2363
+ <ng-container *ngTemplateOutlet="bodyContent" />
2364
+ </div>
2365
+ <sl-menu
2366
+ #contextMenuRef
2367
+ [aria-label]="contextLabel()"
2368
+ (openChangeRequest)="onContextRequest($event)"
2369
+ >
2370
+ @if (contextOn(); as on) {
2371
+ <ng-container
2372
+ *ngTemplateOutlet="
2373
+ items.template;
2374
+ context: { $implicit: on.target };
2375
+ injector: contextInjector()
2376
+ "
2377
+ />
2378
+ }
2379
+ </sl-menu>
2380
+ } @else {
2381
+ <div
2382
+ #body
2383
+ data-part="body"
2384
+ [attr.aria-busy]="loading() ? true : null"
2385
+ (keydown)="onKeyDown($event)"
2386
+ (pointerdown)="onPointerDown($event)"
2387
+ >
2388
+ <ng-container *ngTemplateOutlet="bodyContent" />
2389
+ </div>
2390
+ }
2391
+
2392
+ <ng-template #bodyContent>
2393
+ <div data-part="loader">
2394
+ @if (loaderMounted()) {
2395
+ <div
2396
+ slProgressBar
2397
+ hideLabel
2398
+ size="sm"
2399
+ [loading]="loading()"
2400
+ [label]="t('loading')"
2401
+ [delay]="loadingDelayValue()"
2402
+ [minDuration]="loadingMinDurationValue()"
2403
+ ></div>
2404
+ }
2405
+ </div>
2406
+ @if (errorContent()) {
2407
+ <div data-part="error"><ng-content select="[slEventCalendarError]" /></div>
2408
+ }
2409
+
2410
+ @if (layout() === 'list') {
2411
+ <div data-part="list">
2412
+ @for (day of listDrawing(); track day.iso) {
2413
+ <section
2414
+ data-part="list-day"
2415
+ [attr.aria-labelledby]="day.headingId"
2416
+ [attr.data-date]="day.iso"
2417
+ [attr.data-today]="day.today ? '' : null"
2418
+ >
2419
+ <div
2420
+ data-part="list-day-heading"
2421
+ role="heading"
2422
+ [attr.aria-level]="level() + 1"
2423
+ [attr.id]="day.headingId"
2424
+ [attr.aria-label]="day.heading.label"
2425
+ >
2426
+ <span data-part="list-weekday">{{ day.heading.weekday }}</span>
2427
+ <span data-part="list-date">{{ day.heading.date }}</span>
2428
+ </div>
2429
+ <ul data-part="list-events" role="list">
2430
+ @for (view of day.events; track view.key) {
2431
+ <li>
2432
+ <ng-container
2433
+ *ngTemplateOutlet="eventTemplate; context: { $implicit: view, inGrid: false }"
2434
+ />
2435
+ </li>
2436
+ }
2437
+ </ul>
2438
+ </section>
2439
+ } @empty {
2440
+ <div data-part="empty">
2441
+ <p>{{ emptyText() }}</p>
2442
+ <ng-content select="[slEventCalendarEmpty]" />
2443
+ </div>
2444
+ }
2445
+ </div>
2446
+ } @else if (currentView() === 'month') {
2447
+ <table data-part="month" role="grid" [attr.aria-labelledby]="titleId">
2448
+ <thead>
2449
+ <tr data-part="weekdays">
2450
+ @if (weekNumbersValue()) {
2451
+ <th data-part="week-number-header" scope="col">
2452
+ <span data-ui="visually-hidden">{{ t('weekNumber') }}</span>
2453
+ </th>
2454
+ }
2455
+ @for (name of monthDrawing().weekdays; track name.key) {
2456
+ <th data-part="weekday" scope="col" [attr.abbr]="name.long">{{ name.short }}</th>
2457
+ }
2458
+ </tr>
2459
+ </thead>
2460
+ <tbody>
2461
+ @for (row of monthDrawing().rows; track row.key) {
2462
+ <tr data-part="week" [style.--slotted-event-calendar-lanes]="maxEventsValue()">
2463
+ @if (weekNumbersValue()) {
2464
+ <th data-part="week-number" scope="row">{{ row.weekNumber }}</th>
2465
+ }
2466
+ @for (cell of row.cells; track cell.iso) {
2467
+ <td
2468
+ data-part="day"
2469
+ data-row="day"
2470
+ role="gridcell"
2471
+ [attr.data-date]="cell.iso"
2472
+ [attr.tabindex]="cell.tabIndex"
2473
+ [attr.aria-labelledby]="
2474
+ id + '-day-' + cell.iso + ' ' + id + '-day-' + cell.iso + '-count'
2475
+ "
2476
+ [attr.aria-selected]="selectionMode() === 'range' ? cell.selected : null"
2477
+ [attr.data-today]="cell.today ? '' : null"
2478
+ [attr.data-outside-month]="cell.outside ? '' : null"
2479
+ [attr.data-non-working]="cell.nonWorking ? '' : null"
2480
+ [attr.data-selected]="cell.selected ? '' : null"
2481
+ >
2482
+ <div data-part="day-header">
2483
+ <button
2484
+ data-part="day-number"
2485
+ type="button"
2486
+ tabindex="-1"
2487
+ [attr.id]="id + '-day-' + cell.iso"
2488
+ [attr.aria-label]="cell.label"
2489
+ [attr.aria-haspopup]="narrow() ? 'dialog' : null"
2490
+ (click)="drill(cell.date, $event)"
2491
+ >
2492
+ {{ cell.date.day }}
2493
+ </button>
2494
+ @if (dayContent(); as content) {
2495
+ <div data-part="day-content">
2496
+ <ng-container
2497
+ *ngTemplateOutlet="
2498
+ content.template;
2499
+ context: { $implicit: cell.date, view: currentView() }
2500
+ "
2501
+ />
2502
+ </div>
2503
+ }
2504
+ <span
2505
+ data-ui="visually-hidden"
2506
+ [attr.id]="id + '-day-' + cell.iso + '-count'"
2507
+ >{{ cell.count }}</span
2508
+ >
2509
+ </div>
2510
+ <div data-part="day-events">
2511
+ @for (view of cell.events; track view.key) {
2512
+ <ng-container
2513
+ *ngTemplateOutlet="
2514
+ eventTemplate;
2515
+ context: { $implicit: view, inGrid: true }
2516
+ "
2517
+ />
2518
+ }
2519
+ @for (text of cell.continuations; track $index) {
2520
+ <span data-part="continuation">{{ text }}</span>
2521
+ }
2522
+ @if (cell.more > 0) {
2523
+ <button
2524
+ data-part="more"
2525
+ type="button"
2526
+ tabindex="-1"
2527
+ aria-haspopup="dialog"
2528
+ [attr.aria-expanded]="moreIso() === cell.iso"
2529
+ [attr.aria-label]="cell.moreLabel"
2530
+ (click)="openMore(cell.date, $event)"
2531
+ >
2532
+ +{{ cell.more }}<span>{{ t('more') }}</span>
2533
+ </button>
2534
+ }
2535
+ </div>
2536
+ </td>
2537
+ }
2538
+ </tr>
2539
+ }
2540
+ </tbody>
2541
+ </table>
2542
+ } @else {
2543
+ <div
2544
+ data-part="time-grid"
2545
+ role="grid"
2546
+ [attr.aria-labelledby]="titleId"
2547
+ [style.--slotted-event-calendar-days]="timeDrawing().days"
2548
+ [style.--slotted-event-calendar-slot]="slotDurationValue()"
2549
+ >
2550
+ <div data-part="time-head" role="rowgroup">
2551
+ <div data-part="columns" role="row">
2552
+ <div data-part="zone" role="columnheader">{{ timeDrawing().zone }}</div>
2553
+ @for (column of timeDrawing().headers; track column.iso) {
2554
+ <div
2555
+ data-part="column-header"
2556
+ data-row="header"
2557
+ role="columnheader"
2558
+ [attr.data-date]="column.iso"
2559
+ [attr.tabindex]="column.tabIndex"
2560
+ [attr.data-today]="column.today ? '' : null"
2561
+ [attr.data-offset-change]="column.offsetShort === null ? null : ''"
2562
+ >
2563
+ <span data-part="weekday" aria-hidden="true">{{ column.weekday }}</span>
2564
+ <button
2565
+ data-part="day-number"
2566
+ type="button"
2567
+ tabindex="-1"
2568
+ [attr.aria-label]="column.label"
2569
+ (click)="drill(column.date, $event)"
2570
+ >
2571
+ {{ column.date.day }}
2572
+ </button>
2573
+ @if (dayContent(); as content) {
2574
+ <div data-part="day-content">
2575
+ <ng-container
2576
+ *ngTemplateOutlet="
2577
+ content.template;
2578
+ context: { $implicit: column.date, view: currentView() }
2579
+ "
2580
+ />
2581
+ </div>
2582
+ }
2583
+ @if (column.offsetShort !== null) {
2584
+ <span
2585
+ data-part="offset-change"
2586
+ role="note"
2587
+ [attr.aria-label]="column.offsetLong"
2588
+ >{{ column.offsetShort }}</span
2589
+ >
2590
+ }
2591
+ </div>
2592
+ }
2593
+ </div>
2594
+ <div
2595
+ data-part="all-day-row"
2596
+ role="row"
2597
+ [style.--slotted-event-calendar-lanes]="timeDrawing().lanes"
2598
+ >
2599
+ <div data-part="all-day-label" role="rowheader">{{ t('allDay') }}</div>
2600
+ @for (cell of timeDrawing().allDay; track cell.iso) {
2601
+ <div
2602
+ data-part="all-day-cell"
2603
+ data-row="all-day"
2604
+ role="gridcell"
2605
+ [attr.data-date]="cell.iso"
2606
+ [attr.tabindex]="cell.tabIndex"
2607
+ [attr.aria-selected]="selectionMode() === 'range' ? cell.selected : null"
2608
+ [attr.data-today]="cell.today ? '' : null"
2609
+ [attr.data-non-working]="cell.nonWorking ? '' : null"
2610
+ [attr.data-selected]="cell.selected ? '' : null"
2611
+ >
2612
+ @for (view of cell.events; track view.key) {
2613
+ <ng-container
2614
+ *ngTemplateOutlet="eventTemplate; context: { $implicit: view, inGrid: true }"
2615
+ />
2616
+ }
2617
+ @for (text of cell.continuations; track $index) {
2618
+ <span data-part="continuation">{{ text }}</span>
2619
+ }
2620
+ </div>
2621
+ }
2622
+ </div>
2623
+ </div>
2624
+ <div #scroller data-part="scroller" role="rowgroup">
2625
+ <div data-part="time-row" role="row">
2626
+ <div data-part="gutter" role="rowheader">
2627
+ <span data-ui="visually-hidden">{{ t('timed') }}</span>
2628
+ @for (hour of timeDrawing().hours; track hour.hour) {
2629
+ <span data-part="hour" aria-hidden="true">{{ hour.label }}</span>
2630
+ }
2631
+ </div>
2632
+ @for (column of timeDrawing().columns; track column.iso) {
2633
+ <div
2634
+ data-part="column"
2635
+ data-row="timed"
2636
+ role="gridcell"
2637
+ [attr.data-date]="column.iso"
2638
+ [attr.tabindex]="column.tabIndex"
2639
+ [attr.data-today]="column.today ? '' : null"
2640
+ [attr.data-non-working]="column.nonWorking ? '' : null"
2641
+ >
2642
+ @for (off of column.offHours; track $index) {
2643
+ <div data-part="off-hours" aria-hidden="true" [style]="off"></div>
2644
+ }
2645
+ @if (column.offsetLine; as line) {
2646
+ <div data-part="offset-line" aria-hidden="true" [style]="line"></div>
2647
+ }
2648
+ @if (column.selection; as chosen) {
2649
+ <div data-part="selection" aria-hidden="true" [style]="chosen.style">
2650
+ {{ chosen.text }}
2651
+ </div>
2652
+ }
2653
+ @for (view of column.items; track view.key) {
2654
+ <ng-container
2655
+ *ngTemplateOutlet="eventTemplate; context: { $implicit: view, inGrid: true }"
2656
+ />
2657
+ }
2658
+ @for (entry of column.more; track $index) {
2659
+ <button
2660
+ data-part="more"
2661
+ type="button"
2662
+ tabindex="-1"
2663
+ aria-haspopup="dialog"
2664
+ [attr.aria-expanded]="moreIso() === column.iso"
2665
+ [attr.aria-label]="entry.label"
2666
+ [attr.data-overlay]="entry.overlay ? '' : null"
2667
+ [style]="entry.style"
2668
+ (click)="openMore(column.date, $event)"
2669
+ >
2670
+ +{{ entry.count }}<span>{{ t('more') }}</span>
2671
+ </button>
2672
+ }
2673
+ @if (column.now; as now) {
2674
+ <div data-part="now" aria-hidden="true" [style]="now"></div>
2675
+ }
2676
+ </div>
2677
+ }
2678
+ </div>
2679
+ </div>
2680
+ </div>
2681
+ }
2682
+ </ng-template>
2683
+
2684
+ <!-- Below the compact size class the "+N" panel and the detail are sheets
2685
+ from the bottom edge, inside the root: a region that contains its fixed
2686
+ layers (a phone frame, a pane) keeps them. -->
2687
+ @if (narrow()) {
2688
+ <sl-drawer
2689
+ side="bottom"
2690
+ [container]="host"
2691
+ [finalFocus]="moreAnchor() ?? undefined"
2692
+ [open]="moreIso() !== null"
2693
+ (openChange)="onMoreOpen($event)"
2694
+ >
2695
+ @if (moreDate(); as date) {
2696
+ <div slDrawerResizer></div>
2697
+ <div slDrawerHeader>
2698
+ <h2 slDrawerTitle>{{ dateLabel(date) }}</h2>
2699
+ <button slDrawerClose></button>
2700
+ </div>
2701
+ <div slDrawerBody>
2702
+ <ul
2703
+ data-part="list-events"
2704
+ data-layout="stacked"
2705
+ role="list"
2706
+ [attr.aria-label]="t('dayEvents', { day: dateLabel(date) })"
2707
+ >
2708
+ @for (view of moreViews(); track view.key) {
2709
+ <li>
2710
+ <ng-container
2711
+ *ngTemplateOutlet="eventTemplate; context: { $implicit: view, inGrid: false }"
2712
+ />
2713
+ </li>
2714
+ }
2715
+ </ul>
2716
+ </div>
2717
+ }
2718
+ </sl-drawer>
2719
+ @if (detail(); as template) {
2720
+ <sl-drawer
2721
+ side="bottom"
2722
+ [container]="host"
2723
+ [finalFocus]="detailAnchor() ?? undefined"
2724
+ [open]="openOccurrence() !== null"
2725
+ (openChangeRequest)="onDetailRequest($event)"
2726
+ >
2727
+ @if (openOccurrence(); as occurrence) {
2728
+ <div slDrawerResizer></div>
2729
+ <div slDrawerHeader>
2730
+ <h2 slDrawerTitle>{{ occurrence.event.title }}</h2>
2731
+ <p slDrawerDescription>
2732
+ @if (whenOf(occurrence); as when) {
2733
+ @if (when.day !== null) {
2734
+ <span data-part="detail-day">{{ when.day }},</span>{{ ' ' }}
2735
+ }
2736
+ <span data-part="detail-range">{{ when.range }}</span>
2737
+ }
2738
+ </p>
2739
+ <button slDrawerClose></button>
2740
+ </div>
2741
+ <div slDrawerBody>
2742
+ <ng-container
2743
+ *ngTemplateOutlet="
2744
+ template.template;
2745
+ context: { $implicit: occurrence, close: closeDetail }
2746
+ "
2747
+ />
2748
+ </div>
2749
+ }
2750
+ </sl-drawer>
2751
+ }
2752
+ } @else {
2753
+ <ng-container
2754
+ slPopover
2755
+ #morePopover="slPopover"
2756
+ [portal]="false"
2757
+ [open]="moreIso() !== null"
2758
+ (openChange)="onMoreOpen($event)"
2759
+ >
2760
+ <ng-template slPopoverLayer>
2761
+ <div slPopoverContent>
2762
+ @if (moreDate(); as date) {
2763
+ <div slPopoverHeader>
2764
+ <div slPopoverTitle>{{ dateLabel(date) }}</div>
2765
+ <button slPopoverClose></button>
2766
+ </div>
2767
+ <div slPopoverBody>
2768
+ <ul
2769
+ data-part="list-events"
2770
+ data-layout="stacked"
2771
+ role="list"
2772
+ [attr.aria-label]="t('dayEvents', { day: dateLabel(date) })"
2773
+ >
2774
+ @for (view of moreViews(); track view.key) {
2775
+ <li>
2776
+ <ng-container
2777
+ *ngTemplateOutlet="
2778
+ eventTemplate;
2779
+ context: { $implicit: view, inGrid: false }
2780
+ "
2781
+ />
2782
+ </li>
2783
+ }
2784
+ </ul>
2785
+ </div>
2786
+ }
2787
+ </div>
2788
+ </ng-template>
2789
+ </ng-container>
2790
+
2791
+ @if (detail(); as template) {
2792
+ <ng-container
2793
+ slPopover
2794
+ #detailPopover="slPopover"
2795
+ size="lg"
2796
+ [portal]="false"
2797
+ [open]="openOccurrence() !== null"
2798
+ (openChangeRequest)="onDetailRequest($event)"
2799
+ >
2800
+ <ng-template slPopoverLayer>
2801
+ <div slPopoverContent>
2802
+ @if (openOccurrence(); as occurrence) {
2803
+ <div slPopoverHeader>
2804
+ <div slPopoverTitle>{{ occurrence.event.title }}</div>
2805
+ <div slPopoverDescription>
2806
+ @if (whenOf(occurrence); as when) {
2807
+ @if (when.day !== null) {
2808
+ <span data-part="detail-day">{{ when.day }},</span>{{ ' ' }}
2809
+ }
2810
+ <span data-part="detail-range">{{ when.range }}</span>
2811
+ }
2812
+ </div>
2813
+ <button slPopoverClose></button>
2814
+ </div>
2815
+ <div slPopoverBody>
2816
+ <ng-container
2817
+ *ngTemplateOutlet="
2818
+ template.template;
2819
+ context: { $implicit: occurrence, close: closeDetail }
2820
+ "
2821
+ />
2822
+ </div>
2823
+ }
2824
+ </div>
2825
+ </ng-template>
2826
+ </ng-container>
2827
+ }
2828
+ }
2829
+
2830
+ <ng-template #eventTemplate let-view let-inGrid="inGrid">
2831
+ @if (view.href !== null) {
2832
+ <a
2833
+ data-part="event"
2834
+ [attr.href]="view.href"
2835
+ [attr.tabindex]="inGrid ? -1 : null"
2836
+ [attr.data-key]="view.key"
2837
+ [attr.data-all-day]="view.allDay ? '' : null"
2838
+ [attr.data-bar]="view.bar ? '' : null"
2839
+ [attr.data-color]="view.color"
2840
+ [attr.data-status]="view.status"
2841
+ [attr.data-open]="view.open ? '' : null"
2842
+ [attr.data-continues-before]="view.continuesBefore ? '' : null"
2843
+ [attr.data-continues-after]="view.continuesAfter ? '' : null"
2844
+ [attr.data-clipped-start]="view.clippedStart ? '' : null"
2845
+ [attr.data-clipped-end]="view.clippedEnd ? '' : null"
2846
+ [attr.data-short]="view.short ? '' : null"
2847
+ [attr.data-editable]="view.editable ? '' : null"
2848
+ [attr.data-past]="view.past ? '' : null"
2849
+ [attr.data-dragging]="view.dragging ? '' : null"
2850
+ [attr.data-drop-invalid]="view.dropInvalid ? '' : null"
2851
+ [attr.data-context]="view.context ? '' : null"
2852
+ [style]="view.style"
2853
+ ><ng-container *ngTemplateOutlet="eventContent; context: { $implicit: view }"
2854
+ /></a>
2855
+ } @else {
2856
+ <button
2857
+ data-part="event"
2858
+ type="button"
2859
+ [attr.tabindex]="inGrid ? -1 : null"
2860
+ [attr.data-key]="view.key"
2861
+ [attr.data-all-day]="view.allDay ? '' : null"
2862
+ [attr.data-bar]="view.bar ? '' : null"
2863
+ [attr.data-color]="view.color"
2864
+ [attr.data-status]="view.status"
2865
+ [attr.data-open]="view.open ? '' : null"
2866
+ [attr.data-continues-before]="view.continuesBefore ? '' : null"
2867
+ [attr.data-continues-after]="view.continuesAfter ? '' : null"
2868
+ [attr.data-clipped-start]="view.clippedStart ? '' : null"
2869
+ [attr.data-clipped-end]="view.clippedEnd ? '' : null"
2870
+ [attr.data-short]="view.short ? '' : null"
2871
+ [attr.data-editable]="view.editable ? '' : null"
2872
+ [attr.data-past]="view.past ? '' : null"
2873
+ [attr.data-dragging]="view.dragging ? '' : null"
2874
+ [attr.data-drop-invalid]="view.dropInvalid ? '' : null"
2875
+ [attr.data-context]="view.context ? '' : null"
2876
+ [attr.aria-expanded]="hostsDetail() || currentOpen() !== null ? view.open : null"
2877
+ [attr.aria-haspopup]="hostsDetail() ? 'dialog' : null"
2878
+ [style]="view.style"
2879
+ (click)="activate(view, $event)"
2880
+ >
2881
+ <ng-container *ngTemplateOutlet="eventContent; context: { $implicit: view }" />
2882
+ </button>
2883
+ }
2884
+ </ng-template>
2885
+
2886
+ <ng-template #eventContent let-view>
2887
+ @if (view.bar && view.continuesBefore) {
2888
+ <span slIcon size="sm" data-edge="start"><svg slGlyph name="chevron-right"></svg></span>
2889
+ }
2890
+ @if (eventContentTemplate(); as custom) {
2891
+ <ng-container
2892
+ *ngTemplateOutlet="
2893
+ custom.template;
2894
+ context: {
2895
+ $implicit: view.occurrence,
2896
+ layout: view.layout,
2897
+ date: view.date,
2898
+ time: view.time,
2899
+ }
2900
+ "
2901
+ />
2902
+ } @else {
2903
+ @if (view.time !== null) {
2904
+ <span data-part="event-time">{{ view.time }}</span>
2905
+ }
2906
+ <span data-part="event-title">{{ view.title }}</span>
2907
+ @if (view.location) {
2908
+ <span data-part="event-location">{{ view.location }}</span>
2909
+ }
2910
+ }
2911
+ <span data-part="event-meta">{{ view.meta }}</span>
2912
+ @if (view.bar && view.continuesAfter) {
2913
+ <span slIcon size="sm" data-edge="end"><svg slGlyph name="chevron-right"></svg></span>
2914
+ }
2915
+ @if (view.resizable) {
2916
+ <span aria-hidden="true" data-part="resize-handle"></span>
2917
+ }
2918
+ </ng-template>
2919
+ `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
2920
+ 'data-ui': 'event-calendar',
2921
+ 'data-part': 'root',
2922
+ '[attr.data-view]': 'currentView()',
2923
+ '[attr.data-layout]': 'layout()',
2924
+ '[attr.data-loading]': "loading() ? '' : null",
2925
+ '[attr.data-slot-duration]': 'slotDurationValue()',
2926
+ }, styles: ["@layer slotted.components{[data-ui=event-calendar][data-part=root]{container:slotted-event-calendar / inline-size;--_rule: var(--slotted-event-calendar-rule-color, var(--slotted-border-subtle, #d8dee6));--_rule-width: var(--slotted-border-width-thin, 1px);--_air: var(--slotted-space-2, .25rem);--_hour: var( --slotted-event-calendar-hour-size, calc(var(--slotted-control-height-sm, 30px) * 2) );--_event-size: max( var(--slotted-control-inner-size-sm, 22px), calc(var(--slotted-target-min, 24px) - var(--_air)) );--_event-font-size: var(--slotted-control-font-size-sm, 12px);--_event-radius: var(--slotted-event-calendar-event-radius, var(--slotted-radius-sm, 4px));--_tint: 14%;--_tint-hover: 21%;--_tint-active: 27%;--_edge: 34%;--_edge-hover: 50%;--_tint-dark: 24%;--_tint-hover-dark: 32%;--_tint-active-dark: 38%;--_edge-dark: 44%;--_edge-hover-dark: 60%;--_ink-mix: 58%;--_hue: var(--slotted-text-muted, #5b6b7f);--_off: color-mix(in oklab, var(--slotted-text-muted, #5b6b7f) 7%, transparent);--_gutter: calc(var(--slotted-space-11, 3rem) + var(--slotted-space-4, .5rem));--_gap: var(--slotted-control-gap-md, 8px);--_line-xs: round(nearest, calc(1em * var(--slotted-line-height-xs, 1.4)), 1px);--_line-sm: round(nearest, calc(1em * var(--slotted-line-height-sm, 1.45)), 1px);--_base: var(--slotted-event-calendar-background, var(--slotted-surface, #ffffff));background-color:var(--slotted-event-calendar-background, transparent);box-sizing:border-box;color:var(--slotted-text, #0f172a);display:flex;flex-direction:column;font-family:var(--slotted-control-font-family, system-ui, sans-serif);font-size:var(--slotted-control-font-size-md, 13px);gap:var(--slotted-space-5, .75rem);min-block-size:0;min-inline-size:0}[data-ui=event-calendar] *,[data-ui=event-calendar] *:before,[data-ui=event-calendar] *:after{box-sizing:border-box}[data-ui=event-calendar]>[data-part=header]{align-items:center;display:grid;grid-template-areas:\"title navigation views filter actions\";grid-template-columns:minmax(0,1fr) auto auto auto auto;row-gap:var(--slotted-space-4, .5rem)}[data-ui=event-calendar]>[data-part=header]>[data-part=title]{font-family:var( --slotted-font-family-heading, var(--slotted-font-family-sans, ui-sans-serif, system-ui, sans-serif) );font-size:var(--slotted-font-size-lg, 1rem);font-weight:var(--slotted-font-weight-semibold, 600);grid-area:title;line-height:var(--slotted-line-height-lg, 1.5);margin:0;min-inline-size:0;overflow-wrap:anywhere}[data-ui=event-calendar] [data-part=navigation]{align-items:center;display:inline-flex;gap:var(--slotted-space-2, .25rem);grid-area:navigation;margin-inline-start:var(--slotted-space-6, 1rem)}[data-ui=event-calendar] [data-part=views]{display:flex;grid-area:views;margin-inline-start:var(--slotted-space-5, .75rem);min-inline-size:0}[data-ui=event-calendar] [data-part=filter]{grid-area:filter;margin-inline-start:var(--_gap)}[data-ui=event-calendar]>[data-part=header]>[data-part=actions]{align-items:center;display:inline-flex;gap:var(--_gap);grid-area:actions;margin-inline-start:var(--_gap)}[data-ui=event-calendar] [data-part=today],[data-ui=event-calendar] [data-part=filter],[data-ui=event-calendar] [data-part=previous],[data-ui=event-calendar] [data-part=next]{align-items:center;appearance:none;background-color:var(--slotted-control-surface, #ffffff);block-size:var(--slotted-control-height-md, 34px);border:var(--slotted-border-width-thin, 1px) solid var(--slotted-control-border-color, #bfc7d1);border-radius:var(--slotted-control-radius, 4px);box-shadow:var(--slotted-control-shadow, none);color:var(--slotted-text, #0f172a);cursor:pointer;display:inline-flex;font:inherit;font-weight:var(--slotted-font-weight-medium, 500);gap:var(--slotted-control-gap-md, 8px);justify-content:center;padding-block:0;padding-inline:var(--slotted-control-padding-inline-md, 13px);touch-action:manipulation;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);white-space:nowrap;-webkit-tap-highlight-color:transparent}[data-ui=event-calendar] [data-part=previous],[data-ui=event-calendar] [data-part=next]{inline-size:var(--slotted-control-height-md, 34px);padding-inline:0}[data-ui=event-calendar] [data-part=today]:hover:not([data-disabled]),[data-ui=event-calendar] [data-part=filter]:hover:not([data-disabled]),[data-ui=event-calendar] [data-part=previous]:hover:not([data-disabled]),[data-ui=event-calendar] [data-part=next]:hover:not([data-disabled]){background-color:var(--slotted-tone-secondary-subtle-hover, #eef1f5)}[data-ui=event-calendar] [data-part=today]:active:not([data-disabled]),[data-ui=event-calendar] [data-part=filter]:active:not([data-disabled]),[data-ui=event-calendar] [data-part=previous]:active:not([data-disabled]),[data-ui=event-calendar] [data-part=next]:active:not([data-disabled]),[data-ui=event-calendar] [data-part=filter][aria-expanded=true]{background-color:var(--slotted-tone-secondary-subtle-active, #e2e8f0);transition-duration:var(--slotted-duration-instant)}[data-ui=event-calendar] [data-part=previous]>[data-ui=icon],[data-ui=event-calendar] [data-part=next]>[data-ui=icon],[data-ui=event-calendar] [data-part=filter]>[data-ui=icon]{--slotted-icon-size: var(--slotted-control-icon-size-md, 16px)}[data-ui=event-calendar] [data-part=previous]>[data-ui=icon]{rotate:180deg}[data-ui=event-calendar]:dir(rtl) [data-part=previous]>[data-ui=icon]{rotate:0deg}[data-ui=event-calendar]:dir(rtl) [data-part=next]>[data-ui=icon]{rotate:180deg}[data-ui=event-calendar] [data-part=filter]>[data-ui=icon]{color:var(--slotted-text-muted, #5b6b7f)}[data-ui=event-calendar] [data-part=today]:focus-visible,[data-ui=event-calendar] [data-part=filter]:focus-visible,[data-ui=event-calendar] [data-part=previous]:focus-visible,[data-ui=event-calendar] [data-part=next]:focus-visible,[data-ui=event-calendar] [data-part=day-number]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=event-calendar] [data-part=day]:focus-visible,[data-ui=event-calendar] [data-part=column-header]:focus-visible,[data-ui=event-calendar] [data-part=all-day-cell]:focus-visible,[data-ui=event-calendar] [data-part=column]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:calc(var(--slotted-focus-ring-width, 2px) * -1)}[data-ui=event-calendar] [data-part=event]:focus-visible,[data-ui=event-calendar] [data-part=more]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:1px;z-index:3}[data-ui=event-calendar]>[data-part=body]{display:flex;flex:1 1 auto;flex-direction:column;min-block-size:0;position:relative}[data-ui=event-calendar]>[data-part=body][data-ui=context-menu]{--slotted-context-menu-mark-width: 0px}[data-ui=event-calendar][data-layout=list]>[data-part=body]{overflow-y:auto;overscroll-behavior:contain}[data-ui=event-calendar]>[data-part=body]>[data-part=loader]{inset-block-start:0;inset-inline:0;pointer-events:none;position:absolute;z-index:4}[data-ui=event-calendar]>[data-part=body]>[data-part=error]{margin-block-end:var(--slotted-space-5, .75rem)}[data-ui=event-calendar]>[data-part=body][aria-busy=true] [data-part=event]{opacity:.6}[data-ui=event-calendar] [data-part=month]{flex:1 0 auto;border-block-start:var(--_rule-width) solid var(--_rule);border-collapse:separate;border-inline-start:var(--_rule-width) solid var(--_rule);border-spacing:0;inline-size:100%;table-layout:fixed}[data-ui=event-calendar] [data-part=weekday],[data-ui=event-calendar] [data-part=week-number-header]{color:var(--slotted-text-muted, #5b6b7f);font-size:var(--slotted-font-size-xs, .75rem);font-weight:var(--slotted-font-weight-medium, 500);line-height:var(--_line-xs);overflow:hidden;padding-block:var(--slotted-space-3, .375rem);padding-inline:var(--slotted-space-3, .375rem);text-align:start;text-overflow:ellipsis;white-space:nowrap}[data-ui=event-calendar] [data-part=month] [data-part=weekday],[data-ui=event-calendar] [data-part=month] [data-part=week-number-header]{border-block-end:var(--_rule-width) solid var(--_rule);border-inline-end:var(--_rule-width) solid var(--_rule)}[data-ui=event-calendar] [data-part=week-number-header],[data-ui=event-calendar] [data-part=week-number]{inline-size:calc(var(--slotted-space-9, 2rem) + var(--slotted-space-2, .25rem))}[data-ui=event-calendar] [data-part=week-number]{border-block-end:var(--_rule-width) solid var(--_rule);border-inline-end:var(--_rule-width) solid var(--_rule);color:var(--slotted-text-muted, #5b6b7f);font-size:var(--slotted-font-size-xs, .75rem);font-variant-numeric:tabular-nums;font-weight:var(--slotted-font-weight-regular, 400);padding-block-start:var(--slotted-space-4, .5rem);text-align:center;vertical-align:top}[data-ui=event-calendar] [data-part=day]{--_pad: var(--_air);border-block-end:var(--_rule-width) solid var(--_rule);border-inline-end:var(--_rule-width) solid var(--_rule);padding:var(--_pad);position:relative;vertical-align:top}[data-ui=event-calendar] [data-part=day][data-non-working],[data-ui=event-calendar] [data-part=column][data-non-working],[data-ui=event-calendar] [data-part=all-day-cell][data-non-working]{background-color:var(--slotted-event-calendar-off-background, var(--_off))}[data-ui=event-calendar] [data-part=day][data-selected],[data-ui=event-calendar] [data-part=all-day-cell][data-selected]{--_run-edge: var(--slotted-border-width-thin, 1px);--_run-color: var( --slotted-event-calendar-selection-border-color, var(--slotted-tone-accent-border, #2563eb) );--_run-start: 0px;--_run-end: 0px;--_run-direction: 1;background-color:var( --slotted-event-calendar-selection-background, var(--slotted-tone-accent-surface, #eff6ff) );box-shadow:inset 0 var(--_run-edge) 0 0 var(--_run-color),inset 0 calc(var(--_run-edge) * -1) 0 0 var(--_run-color),inset calc(var(--_run-start) * var(--_run-direction)) 0 0 0 var(--_run-color),inset calc(var(--_run-end) * var(--_run-direction) * -1) 0 0 0 var(--_run-color)}[data-ui=event-calendar]:dir(rtl) [data-part=day][data-selected],[data-ui=event-calendar]:dir(rtl) [data-part=all-day-cell][data-selected]{--_run-direction: -1}[data-ui=event-calendar] [data-part=day][data-selected]:not([data-selected]+*),[data-ui=event-calendar] [data-part=all-day-cell][data-selected]:not([data-selected]+*){--_run-start: var(--_run-edge)}[data-ui=event-calendar] [data-part=day][data-selected]:not(:has(+[data-selected])),[data-ui=event-calendar] [data-part=all-day-cell][data-selected]:not(:has(+[data-selected])){--_run-end: var(--_run-edge)}[data-ui=event-calendar] [data-part=day-header]{align-items:center;display:flex;gap:var(--slotted-space-2, .25rem);justify-content:space-between;margin-block-end:var(--_air);min-inline-size:0}[data-ui=event-calendar] [data-part=day-content]{color:var(--slotted-text-muted, #5b6b7f);font-size:var(--slotted-font-size-xs, .75rem);line-height:var(--_line-xs);min-inline-size:0;overflow:hidden;text-overflow:ellipsis;unicode-bidi:plaintext;white-space:nowrap}[data-ui=event-calendar] [data-part=day-number]{align-items:center;appearance:none;background-color:transparent;block-size:var(--_event-size);border:0;border-radius:var(--slotted-radius-full, 9999px);color:inherit;cursor:pointer;display:inline-flex;flex:0 0 auto;font:inherit;font-size:var(--_event-font-size);font-variant-numeric:tabular-nums;justify-content:center;min-inline-size:var(--_event-size);padding-block:0;padding-inline:var(--slotted-space-2, .25rem);transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}[data-ui=event-calendar] [data-part=day-number]:hover:not([data-disabled]){background-color:var(--slotted-tone-secondary-subtle-hover, #eef1f5)}[data-ui=event-calendar] [data-part=day-number]:active:not([data-disabled]){background-color:var(--slotted-tone-secondary-subtle-active, #e2e8f0);transition-duration:var(--slotted-duration-instant)}[data-ui=event-calendar] [data-part=day][data-outside-month] [data-part=day-number]{color:var(--slotted-text-muted, #5b6b7f)}[data-ui=event-calendar] [data-today]>[data-part=day-header] [data-part=day-number],[data-ui=event-calendar] [data-part=column-header][data-today] [data-part=day-number]{background-color:var( --slotted-event-calendar-today-background, var(--slotted-tone-accent-solid, #2563eb) );color:var(--slotted-event-calendar-today-color, var(--slotted-tone-accent-on-solid, #ffffff));font-weight:var(--slotted-font-weight-semibold, 600)}[data-ui=event-calendar] [data-part=day-events],[data-ui=event-calendar] [data-part=all-day-cell]{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:repeat(var(--slotted-event-calendar-lanes, 3),var(--_event-size));row-gap:var(--_air)}[data-ui=event-calendar] [data-part=day-events]{container:slotted-event-calendar-day / inline-size;grid-template-rows:repeat(var(--slotted-event-calendar-lanes, 3),var(--_event-size)) var(--_event-size);position:relative}[data-ui=event-calendar] [data-part=day-events]>[data-part=event],[data-ui=event-calendar] [data-part=all-day-cell]>[data-part=event]{grid-column:1;grid-row:var(--slotted-event-lane, 1);justify-self:start}[data-ui=event-calendar] [data-part=day-events]>[data-part=more]{grid-column:1;grid-row:-2 / -1;justify-self:start}[data-ui=event-calendar] [data-part=event]{align-items:center;appearance:none;background-color:transparent;border:var(--slotted-border-width-thin, 1px) solid transparent;border-radius:var(--_event-radius);color:var(--slotted-text, #0f172a);cursor:pointer;display:flex;font:inherit;font-size:var(--_event-font-size);gap:var(--slotted-space-2, .25rem);line-height:var(--_line-xs);margin:0;min-inline-size:0;overflow:hidden;padding-block:0;padding-inline:var(--slotted-space-3, .375rem);text-align:start;text-decoration:none;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);-webkit-tap-highlight-color:transparent}[data-ui=event-calendar] [data-part=event][data-color=\"1\"]{--_hue: var(--slotted-data-1, #2563eb)}[data-ui=event-calendar] [data-part=event][data-color=\"2\"]{--_hue: var(--slotted-data-2, #ea580c)}[data-ui=event-calendar] [data-part=event][data-color=\"3\"]{--_hue: var(--slotted-data-3, #0891b2)}[data-ui=event-calendar] [data-part=event][data-color=\"4\"]{--_hue: var(--slotted-data-4, #dc2626)}[data-ui=event-calendar] [data-part=event][data-color=\"5\"]{--_hue: var(--slotted-data-5, #7c3aed)}[data-ui=event-calendar] [data-part=event][data-color=\"6\"]{--_hue: var(--slotted-data-6, #a16207)}[data-ui=event-calendar] [data-part=event][data-color=\"7\"]{--_hue: var(--slotted-data-7, #c026d3)}[data-ui=event-calendar] [data-part=event][data-color=\"8\"]{--_hue: var(--slotted-data-8, #16a34a)}[data-ui=event-calendar] [data-part=event-time],[data-ui=event-calendar] [data-part=event-title],[data-ui=event-calendar] [data-part=event-location],[data-ui=event-calendar] [data-part=more],[data-ui=event-calendar] [data-part=hour],[data-ui=event-calendar] [data-part=zone],[data-ui=event-calendar] [data-part=selection],[data-ui=event-calendar] [data-part=offset-change]{unicode-bidi:plaintext}[data-ui=event-calendar] [data-part=event-time]{color:var(--slotted-text-muted, #5b6b7f);flex:0 0 auto;font-variant-numeric:tabular-nums;white-space:nowrap}[data-ui=event-calendar] [data-part=event-title]{flex:0 1 auto;font-weight:var(--slotted-font-weight-medium, 500);min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-ui=event-calendar] [data-part=event-location]{color:var(--slotted-text-muted, #5b6b7f);min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-ui=event-calendar] [data-part=event-meta],[data-ui=event-calendar] [data-part=continuation]{block-size:1px;clip-path:inset(50%);inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}[data-ui=event-calendar] [data-part=day-events]>[data-part=event]:not([data-bar]){position:relative;block-size:var(--_event-size);inline-size:100%;padding-inline:var(--slotted-space-2, .25rem)}[data-ui=event-calendar] [data-part=day-events]>[data-part=event]:not([data-bar]):before,[data-ui=event-calendar] [data-part=list-events] [data-part=event]:before{background-color:var(--_hue);block-size:var(--slotted-space-4, .5rem);border-radius:var(--slotted-radius-full, 9999px);content:\"\";flex:0 0 auto;inline-size:var(--slotted-space-4, .5rem)}[data-ui=event-calendar] [data-part=day-events]>[data-part=event]:not([data-bar]):hover:not([data-disabled]){background-color:var(--slotted-tone-secondary-subtle-hover, #eef1f5)}[data-ui=event-calendar] [data-part=day-events]>[data-part=event]:not([data-bar]):active:not([data-disabled],[data-open]){background-color:var(--slotted-tone-secondary-subtle-active, #e2e8f0);transition-duration:var(--slotted-duration-instant)}[data-ui=event-calendar] [data-part=day-events]>[data-part=event]:not([data-bar])[data-open]{background-color:light-dark(color-mix(in oklab,var(--_hue) var(--_tint),var(--_base)),color-mix(in oklab,var(--_hue) var(--_tint-dark),var(--_base)))}[data-ui=event-calendar] [data-part=event][data-bar],[data-ui=event-calendar] [data-part=column]>[data-part=event]{--_ground: light-dark( color-mix(in oklab, var(--_hue) var(--_tint), var(--_base)), color-mix(in oklab, var(--_hue) var(--_tint-dark), var(--_base)) );--_ink: color-mix(in oklab, var(--_hue) var(--_ink-mix), var(--slotted-text, #0f172a));background-color:var(--_ground);border-color:light-dark(color-mix(in oklab,var(--_hue) var(--_edge),var(--_base)),color-mix(in oklab,var(--_hue) var(--_edge-dark),var(--_base)));color:var(--_ink)}[data-ui=event-calendar] [data-part=event][data-bar] [data-part=event-time],[data-ui=event-calendar] [data-part=event][data-bar] [data-part=event-location],[data-ui=event-calendar] [data-part=column]>[data-part=event]>[data-part=event-time],[data-ui=event-calendar] [data-part=column]>[data-part=event]>[data-part=event-location]{color:color-mix(in oklab,var(--_ink) 72%,var(--_ground))}[data-ui=event-calendar] [data-part=event][data-bar]:hover:not([data-disabled],[data-open],[data-dragging],[data-context]),[data-ui=event-calendar] [data-part=column]>[data-part=event]:hover:not([data-disabled],[data-open],[data-dragging],[data-context]){--_ground: light-dark( color-mix(in oklab, var(--_hue) var(--_tint-hover), var(--_base)), color-mix(in oklab, var(--_hue) var(--_tint-hover-dark), var(--_base)) );border-color:light-dark(color-mix(in oklab,var(--_hue) var(--_edge-hover),var(--_base)),color-mix(in oklab,var(--_hue) var(--_edge-hover-dark),var(--_base)))}[data-ui=event-calendar] [data-part=event][data-bar]:active:not([data-disabled],[data-open],[data-dragging],[data-context]),[data-ui=event-calendar] [data-part=column]>[data-part=event]:active:not([data-disabled],[data-open],[data-dragging],[data-context]){--_ground: light-dark( color-mix(in oklab, var(--_hue) var(--_tint-active), var(--_base)), color-mix(in oklab, var(--_hue) var(--_tint-active-dark), var(--_base)) );transition-duration:var(--slotted-duration-instant)}[data-ui=event-calendar] [data-part=event][data-bar][data-open],[data-ui=event-calendar] [data-part=column]>[data-part=event][data-open],[data-ui=event-calendar] [data-part=event][data-bar][data-context],[data-ui=event-calendar] [data-part=column]>[data-part=event][data-context],[data-ui=event-calendar] [data-part=event][data-bar][data-dragging],[data-ui=event-calendar] [data-part=column]>[data-part=event][data-dragging]{--_ground: color-mix(in oklab, var(--_hue) 80%, #000000);--_ink: #ffffff;border-color:var(--_ground)}[data-ui=event-calendar] [data-part=event][data-bar][data-dragging][data-drop-invalid],[data-ui=event-calendar] [data-part=column]>[data-part=event][data-dragging][data-drop-invalid]{--_ground: light-dark( color-mix(in oklab, var(--_hue) var(--_tint), var(--_base)), color-mix(in oklab, var(--_hue) var(--_tint-dark), var(--_base)) );--_ink: color-mix(in oklab, var(--_hue) var(--_ink-mix), var(--slotted-text, #0f172a));border-color:var(--slotted-tone-danger-border, #dc2626);border-style:dashed}[data-ui=event-calendar]:has([data-part=event][data-drop-invalid]),[data-ui=event-calendar]:has([data-part=event][data-drop-invalid]) *{cursor:not-allowed}[data-ui=event-calendar] [data-part=event][data-bar][data-open]:hover:not([data-disabled]),[data-ui=event-calendar] [data-part=column]>[data-part=event][data-open]:hover:not([data-disabled]){--_ground: color-mix(in oklab, var(--_hue) 70%, #000000)}[data-ui=event-calendar] [data-part=event][data-bar][data-open]:active:not([data-disabled]),[data-ui=event-calendar] [data-part=column]>[data-part=event][data-open]:active:not([data-disabled]){--_ground: color-mix(in oklab, var(--_hue) 60%, #000000);transition-duration:var(--slotted-duration-instant)}[data-ui=event-calendar] [data-part=column]>[data-part=event]:not([data-short]):after{background-image:linear-gradient(to bottom,transparent,var(--_ground));block-size:min(var(--slotted-space-6, 1rem),45%);border-end-end-radius:inherit;border-end-start-radius:inherit;content:\"\";inset-block-end:0;inset-inline:0;pointer-events:none;position:absolute}[data-ui=event-calendar] [data-part=event][data-past]:not([data-open],[data-dragging]){--_tint: 7%;--_tint-hover: 13%;--_edge: 20%;--_tint-dark: 12%;--_tint-hover-dark: 19%;--_edge-dark: 26%;--_ink-mix: 30%}[data-ui=event-calendar] [data-part=day-events]>[data-part=event][data-past]:not([data-bar]):before{opacity:.55}[data-ui=event-calendar] [data-part=day-events]>[data-part=event][data-past]:not([data-bar]){color:var(--slotted-text-muted, #5b6b7f)}[data-ui=event-calendar] [data-part=list-events] [data-part=event][data-past]:before{opacity:.55}[data-ui=event-calendar] [data-part=list-events] [data-part=event][data-past]{color:var(--slotted-text-muted, #5b6b7f)}[data-ui=event-calendar] [data-part=event][data-bar]{block-size:var(--_event-size);inline-size:calc(var(--slotted-event-span, 1) * (100% + 2 * var(--_pad, 0px) + var(--_rule-width)) - 2 * var(--_pad, 0px) - var(--_rule-width));inset-block-start:0;inset-inline-start:0;position:absolute;z-index:1}[data-ui=event-calendar] [data-part=event][data-bar][data-continues-before]{border-end-start-radius:0;border-start-start-radius:0;padding-inline-start:var(--slotted-space-1, .125rem)}[data-ui=event-calendar] [data-part=event][data-bar][data-continues-after]{border-end-end-radius:0;border-start-end-radius:0;padding-inline-end:var(--slotted-space-1, .125rem)}[data-ui=event-calendar] [data-part=event][data-bar]>[data-ui=icon][data-edge]{color:color-mix(in oklab,var(--_hue) 70%,var(--slotted-text, #0f172a))}[data-ui=event-calendar] [data-part=event][data-bar]>[data-ui=icon][data-edge=start]{rotate:180deg}[data-ui=event-calendar] [data-part=event][data-bar]>[data-ui=icon][data-edge=end]{margin-inline-start:auto}[data-ui=event-calendar]:dir(rtl) [data-part=event][data-bar]>[data-ui=icon][data-edge=start]{rotate:0deg}[data-ui=event-calendar]:dir(rtl) [data-part=event][data-bar]>[data-ui=icon][data-edge=end]{rotate:180deg}[data-ui=event-calendar] [data-part=event][data-status=tentative][data-bar]:not([data-open],[data-dragging]),[data-ui=event-calendar] [data-part=column]>[data-part=event][data-status=tentative]:not([data-open],[data-dragging]){--_tint: 0%;--_tint-hover: 7%;--_tint-active: 12%;--_tint-dark: 0%;--_tint-hover-dark: 12%;--_tint-active-dark: 18%;border-color:var(--_hue);border-style:dashed}[data-ui=event-calendar] [data-part=event][data-status=cancelled]{color:var(--slotted-text-muted, #5b6b7f)}[data-ui=event-calendar] [data-part=event][data-status=cancelled] [data-part=event-title]{text-decoration:line-through}[data-ui=event-calendar] [data-part=event][data-editable]{cursor:grab;touch-action:none}[data-ui=event-calendar] [data-part=event][data-dragging]{box-shadow:var(--slotted-shadow-md, none);cursor:grabbing;pointer-events:none;z-index:5}[data-ui=event-calendar] [data-part=resize-handle]{display:flex;inset-block-end:0;inset-inline:0;align-items:center;block-size:var(--slotted-space-4, .5rem);cursor:ns-resize;justify-content:center;position:absolute;touch-action:none;z-index:1}[data-ui=event-calendar] [data-part=event][data-bar]>[data-part=resize-handle]{block-size:auto;cursor:ew-resize;inline-size:var(--slotted-space-4, .5rem);inset-block:0;inset-inline:auto 0}[data-ui=event-calendar] [data-part=resize-handle]:before{background-color:var(--_ink, var(--_hue));block-size:var(--slotted-border-width-thick, 2px);border-radius:var(--slotted-radius-full, 9999px);content:\"\";inline-size:var(--slotted-space-6, 1rem);opacity:0;transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit)}[data-ui=event-calendar] [data-part=event][data-bar]>[data-part=resize-handle]:before{block-size:var(--slotted-space-4, .5rem);inline-size:var(--slotted-border-width-thick, 2px)}[data-ui=event-calendar] [data-part=event]:hover:not([data-disabled])>[data-part=resize-handle]:before,[data-ui=event-calendar] [data-part=event]:focus-visible>[data-part=resize-handle]:before,[data-ui=event-calendar] [data-part=event][data-dragging]>[data-part=resize-handle]:before{opacity:1;transition-timing-function:var(--slotted-easing-enter)}[data-ui=event-calendar] [data-part=more]{align-items:center;appearance:none;background-color:transparent;block-size:var(--_event-size);border:var(--slotted-border-width-thin, 1px) solid transparent;border-radius:var(--_event-radius);color:var(--slotted-text-muted, #5b6b7f);cursor:pointer;display:inline-flex;font:inherit;font-size:var(--_event-font-size);font-weight:var(--slotted-font-weight-medium, 500);gap:.3em;max-inline-size:100%;overflow:hidden;padding-block:0;padding-inline:var(--slotted-space-2, .25rem);transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);white-space:nowrap}[data-ui=event-calendar] [data-part=more]:hover:not([data-disabled]),[data-ui=event-calendar] [data-part=more][aria-expanded=true]{background-color:var(--slotted-tone-secondary-subtle-hover, #eef1f5);color:var(--slotted-text, #0f172a)}[data-ui=event-calendar] [data-part=more]:active:not([data-disabled]){background-color:var(--slotted-tone-secondary-subtle-active, #e2e8f0);transition-duration:var(--slotted-duration-instant)}@container slotted-event-calendar-day (max-width: 7.5rem){[data-ui=event-calendar] [data-part=day-events]>[data-part=event]:not([data-bar])>[data-part=event-time]{display:none}}@container slotted-event-calendar-event (max-width: 4.5rem){[data-ui=event-calendar] [data-part=column]>[data-part=event]>[data-part=event-time],[data-ui=event-calendar] [data-part=column]>[data-part=event]>[data-part=event-location]{display:none}[data-ui=event-calendar] [data-part=column]>[data-part=event]{padding-inline:var(--slotted-space-2, .25rem)}}@container slotted-event-calendar-event (max-width: 2rem){[data-ui=event-calendar] [data-part=column]>[data-part=event]>[data-part=event-title]{block-size:1px;clip-path:inset(50%);inline-size:1px;overflow:hidden;position:absolute;white-space:nowrap}}@container slotted-event-calendar-event (max-width: 4.5rem){[data-ui=event-calendar] [data-part=column]>[data-part=more]>span{display:none}}[data-ui=event-calendar] [data-part=time-grid]{border-block-start:var(--_rule-width) solid var(--_rule);display:flex;flex:1 1 auto;flex-direction:column;min-block-size:0}[data-ui=event-calendar] [data-part=time-head]{border-block-end:var(--_rule-width) solid var(--_rule);overflow:hidden;scrollbar-gutter:stable}[data-ui=event-calendar] [data-part=columns],[data-ui=event-calendar] [data-part=all-day-row],[data-ui=event-calendar] [data-part=time-row]{display:grid;grid-template-columns:var(--_gutter) repeat(var(--slotted-event-calendar-days, 7),minmax(0,1fr))}[data-ui=event-calendar] [data-part=columns]{border-block-end:var(--_rule-width) solid var(--_rule)}[data-ui=event-calendar] [data-part=zone]{align-self:end;color:var(--slotted-text-muted, #5b6b7f);font-size:var(--slotted-font-size-xs, .75rem);font-variant-numeric:tabular-nums;line-height:var(--_line-xs);overflow:hidden;padding-block:var(--slotted-space-3, .375rem);padding-inline:var(--slotted-space-2, .25rem) var(--slotted-space-3, .375rem);text-align:end;text-overflow:ellipsis;white-space:nowrap}[data-ui=event-calendar] [data-part=column-header]{align-items:center;border-inline-start:var(--_rule-width) solid var(--_rule);display:flex;flex-direction:column;gap:var(--slotted-space-1, .125rem);min-inline-size:0;padding-block:var(--slotted-space-3, .375rem);padding-inline:var(--_air)}[data-ui=event-calendar] [data-part=column-header] [data-part=weekday]{max-inline-size:100%;padding:0}[data-ui=event-calendar] [data-part=column-header][data-today] [data-part=weekday]{color:var(--slotted-tone-accent-text, #1d4ed8)}[data-ui=event-calendar] [data-part=column-header] [data-part=day-number]{block-size:var(--slotted-control-inner-size-lg, 28px);font-size:var(--slotted-font-size-lg, 1rem);font-weight:var(--slotted-font-weight-medium, 500);min-inline-size:var(--slotted-control-inner-size-lg, 28px)}[data-ui=event-calendar] [data-part=column-header] [data-part=day-content],[data-ui=event-calendar] [data-part=offset-change]{color:var(--slotted-text-muted, #5b6b7f);font-size:var(--slotted-font-size-xs, .75rem);line-height:var(--_line-xs);max-inline-size:100%;overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap}[data-ui=event-calendar] [data-part=all-day-label]{color:var(--slotted-text-muted, #5b6b7f);font-size:var(--slotted-font-size-xs, .75rem);hyphens:auto;line-height:var(--_line-xs);overflow-wrap:break-word;padding-block:calc(var(--_air) + (var(--_event-size) - 1lh) / 2);padding-inline:var(--slotted-space-2, .25rem) var(--slotted-space-3, .375rem);text-align:end}[data-ui=event-calendar] [data-part=all-day-cell]{--_pad: var(--_air);border-inline-start:var(--_rule-width) solid var(--_rule);min-inline-size:0;padding:var(--_pad);position:relative}[data-ui=event-calendar] [data-part=scroller]{flex:1 1 40rem;max-block-size:max-content;min-block-size:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable}[data-ui=event-calendar] [data-part=gutter]{display:flex;flex-direction:column;min-inline-size:0}[data-ui=event-calendar] [data-part=hour]{block-size:var(--_hour);color:var(--slotted-text-muted, #5b6b7f);flex:0 0 auto;font-size:var(--slotted-font-size-xs, .75rem);font-variant-numeric:tabular-nums;line-height:var(--_line-xs);overflow:hidden;padding-inline-end:var(--slotted-space-3, .375rem);text-align:end;text-overflow:ellipsis;translate:0 calc(var(--_line-xs) / -2);white-space:nowrap}[data-ui=event-calendar] [data-part=hour]:nth-child(1 of[data-part=hour]){visibility:hidden}[data-ui=event-calendar] [data-part=column]{background-image:linear-gradient(to bottom,var(--_rule) var(--_rule-width),transparent var(--_rule-width)),linear-gradient(to bottom,color-mix(in oklab,var(--_rule) 45%,transparent) var(--_rule-width),transparent var(--_rule-width));background-size:100% var(--_hour),100% calc(var(--_hour) * var(--slotted-event-calendar-slot, 30) / 60);border-inline-start:var(--_rule-width) solid var(--_rule);min-inline-size:0;position:relative}[data-ui=event-calendar] [data-part=column][data-today]{background-color:color-mix(in oklab,var(--slotted-tone-accent-surface, #eff6ff) 50%,transparent)}[data-ui=event-calendar] [data-part=column]>[data-part=event],[data-ui=event-calendar] [data-part=column]>[data-part=more],[data-ui=event-calendar] [data-part=column]>[data-part=selection]{--_room: calc(100% - var(--slotted-space-5, .75rem));--_share: calc(var(--_room) / var(--slotted-event-columns, 1));block-size:max(calc(var(--slotted-event-length, 30) * var(--_hour) / 60 - var(--_air)),var(--_event-size));inline-size:calc(var(--_share) * var(--slotted-event-span, 1) - var(--_air));inset-block-start:calc(var(--slotted-event-start, 0) * var(--_hour) / 60 + var(--_air) / 2);inset-inline-start:calc(var(--_share) * var(--slotted-event-column, 0) + var(--_air));position:absolute}[data-ui=event-calendar] [data-part=column]>[data-part=event]{align-content:start;align-items:start;container:slotted-event-calendar-event / inline-size;flex-direction:column;gap:0;padding-block:var(--slotted-space-1, .125rem);z-index:1}[data-ui=event-calendar] [data-part=column]>[data-part=event]>*{flex-shrink:0}[data-ui=event-calendar] [data-part=column]>[data-part=event]>[data-part=event-title]{max-inline-size:100%;order:-1}[data-ui=event-calendar] [data-part=column]>[data-part=event]:not([data-short])>[data-part=event-title]{-webkit-box-orient:vertical;display:-webkit-box;hyphens:auto;-webkit-line-clamp:3;line-clamp:3;overflow-wrap:break-word;white-space:normal}[data-ui=event-calendar] [data-part=column]>[data-part=event]>[data-part=event-location],[data-ui=event-calendar] [data-part=column]>[data-part=event]>[data-part=event-time]{max-inline-size:100%;overflow:hidden;text-overflow:ellipsis}[data-ui=event-calendar] [data-part=column]>[data-part=event][data-short]{align-items:center;flex-direction:row;gap:var(--slotted-space-2, .25rem);padding-block:0}[data-ui=event-calendar] [data-part=column]>[data-part=event][data-short]>[data-part=event-title]{flex:0 0 auto;max-inline-size:100%}[data-ui=event-calendar] [data-part=column]>[data-part=event][data-short]>[data-part=event-time]{flex:1 1 0;min-inline-size:0}[data-ui=event-calendar] [data-part=column]>[data-part=event][data-clipped-start],[data-ui=event-calendar] [data-part=column]>[data-part=event][data-continues-before]{border-block-start-style:dashed;border-start-end-radius:0;border-start-start-radius:0}[data-ui=event-calendar] [data-part=column]>[data-part=event][data-clipped-end],[data-ui=event-calendar] [data-part=column]>[data-part=event][data-continues-after]{border-block-end-style:dashed;border-end-end-radius:0;border-end-start-radius:0}[data-ui=event-calendar] [data-part=column]>[data-part=more]{align-items:start;container:slotted-event-calendar-event / inline-size;background-color:color-mix(in oklab,var(--slotted-text-muted, #5b6b7f) 9%,var(--_base));border-color:color-mix(in oklab,var(--slotted-text-muted, #5b6b7f) 24%,var(--_base));padding-block:var(--slotted-space-1, .125rem);z-index:1}[data-ui=event-calendar] [data-part=column]>[data-part=more]:hover:not([data-disabled]),[data-ui=event-calendar] [data-part=column]>[data-part=more][aria-expanded=true]{background-color:color-mix(in oklab,var(--slotted-text-muted, #5b6b7f) 15%,var(--_base))}[data-ui=event-calendar] [data-part=column]>[data-part=more]:active:not([data-disabled]){background-color:color-mix(in oklab,var(--slotted-text-muted, #5b6b7f) 21%,var(--_base))}[data-ui=event-calendar] [data-part=column]>[data-part=more][data-overlay]{align-items:center;background-color:var(--_base);block-size:auto;border-radius:var(--slotted-radius-full, 9999px);box-shadow:var(--slotted-shadow-sm, none);container-type:normal;inline-size:auto;inset-block-start:calc((var(--slotted-event-start, 0) + var(--slotted-event-length, 30)) * var(--_hour) / 60 - var(--_air));inset-inline:auto var(--slotted-space-4, .5rem);line-height:var(--_line-xs);translate:0 -100%;padding-block:0;padding-inline:var(--slotted-space-3, .375rem);z-index:3}[data-ui=event-calendar] [data-part=column]>[data-part=more][data-overlay]>span{display:none}[data-ui=event-calendar] [data-part=column]>[data-part=selection]{background-color:var( --slotted-event-calendar-selection-background, var(--slotted-tone-accent-surface, #eff6ff) );border:var(--slotted-border-width-thin, 1px) solid var( --slotted-event-calendar-selection-border-color, var(--slotted-tone-accent-border, #2563eb) );border-radius:var(--_event-radius);color:var(--slotted-tone-accent-text, #1d4ed8);font-size:var(--_event-font-size);font-variant-numeric:tabular-nums;font-weight:var(--slotted-font-weight-medium, 500);inline-size:calc(var(--_room) - var(--_air));inset-inline-start:var(--_air);line-height:var(--_line-xs);overflow:hidden;padding-block:var(--slotted-space-1, .125rem);padding-inline:var(--slotted-space-3, .375rem);pointer-events:none;text-overflow:ellipsis;white-space:nowrap;z-index:2}[data-ui=event-calendar] [data-part=off-hours]{background-color:var(--slotted-event-calendar-off-background, var(--_off));block-size:calc(var(--slotted-event-length, 0) * var(--_hour) / 60);inset-block-start:calc(var(--slotted-event-start, 0) * var(--_hour) / 60);inset-inline:0;pointer-events:none;position:absolute}[data-ui=event-calendar] [data-part=now],[data-ui=event-calendar] [data-part=offset-line]{inset-block-start:calc(var(--slotted-event-start, 0) * var(--_hour) / 60);inset-inline:0;pointer-events:none;position:absolute}[data-ui=event-calendar] [data-part=now]{border-block-start:var(--slotted-border-width-thick, 2px) solid var(--slotted-event-calendar-now-color, var(--slotted-tone-accent-solid, #2563eb));translate:0 -50%;z-index:2}[data-ui=event-calendar] [data-part=now]:before{background-color:var( --slotted-event-calendar-now-color, var(--slotted-tone-accent-solid, #2563eb) );block-size:var(--slotted-space-4, .5rem);border-radius:var(--slotted-radius-full, 9999px);content:\"\";inline-size:var(--slotted-space-4, .5rem);inset-block-start:calc(var(--slotted-space-4, .5rem) / -2 - var(--slotted-border-width-thick, 2px) / 2);inset-inline-start:calc(var(--slotted-space-4, .5rem) / -2);position:absolute}[data-ui=event-calendar] [data-part=offset-line]{border-block-start:var(--slotted-border-width-thin, 1px) dashed var(--slotted-border-strong, #78899c);z-index:1}[data-ui=event-calendar]>[data-part=body]>[data-part=list]{border-block-start:var(--_rule-width) solid var(--_rule);display:flex;flex-direction:column}[data-ui=event-calendar] [data-part=list-day]{border-block-end:var(--_rule-width) solid var(--_rule);column-gap:var(--slotted-space-6, 1rem);display:grid;grid-template-columns:calc(var(--slotted-space-12, 4rem) * 2) minmax(0,1fr);padding-block:var(--slotted-space-4, .5rem)}[data-ui=event-calendar] [data-part=list-day-heading]{display:flex;flex-direction:column;margin:0;padding-block:var(--slotted-space-3, .375rem)}[data-ui=event-calendar] [data-part=list-weekday]{color:var(--slotted-text-muted, #5b6b7f);font-size:var(--slotted-font-size-xs, .75rem);font-weight:var(--slotted-font-weight-medium, 500);line-height:var(--_line-xs)}[data-ui=event-calendar] [data-part=list-date]{font-size:var(--slotted-font-size-sm, .8125rem);font-weight:var(--slotted-font-weight-semibold, 600);line-height:var(--_line-sm)}[data-ui=event-calendar] [data-part=list-day][data-today] [data-part=list-day-heading],[data-ui=event-calendar] [data-part=list-day][data-today] [data-part=list-weekday]{color:var(--slotted-tone-accent-text, #1d4ed8)}[data-ui=event-calendar] [data-part=list-events]{display:flex;flex-direction:column;gap:var(--slotted-space-1, .125rem);list-style:none;margin:0;padding:0}[data-ui=event-calendar] [data-part=list-events] [data-part=event]{align-items:start;column-gap:var(--slotted-space-4, .5rem);display:grid;font-size:var(--slotted-font-size-sm, .8125rem);grid-template-columns:calc(var(--slotted-space-12, 4rem) * 2.5) auto minmax(0,1fr);inline-size:100%;line-height:var(--_line-sm);min-block-size:var(--slotted-control-height-md, 34px);padding-block:var(--slotted-space-3, .375rem);padding-inline:var(--slotted-space-3, .375rem)}[data-ui=event-calendar] [data-part=list-events] [data-part=event]:before{grid-column:2;grid-row:1;margin-block-start:calc((1lh - var(--slotted-space-4, .5rem)) / 2)}[data-ui=event-calendar] [data-part=list-events] [data-part=event-time]{grid-column:1;grid-row:1;white-space:normal}[data-ui=event-calendar] [data-part=list-events] [data-part=event-title]{grid-column:3;grid-row:1;overflow-wrap:break-word;white-space:normal}[data-ui=event-calendar] [data-part=list-events] [data-part=event-location]{font-size:var(--slotted-font-size-xs, .75rem);grid-column:3;line-height:var(--_line-xs);grid-row:2;overflow-wrap:break-word;white-space:normal}[data-ui=event-calendar] [data-part=list-events] [data-part=event]:hover:not([data-disabled]){background-color:var(--slotted-tone-secondary-subtle-hover, #eef1f5)}[data-ui=event-calendar] [data-part=list-events] [data-part=event]:active:not([data-disabled],[data-open],[data-context]){background-color:var(--slotted-tone-secondary-subtle-active, #e2e8f0);transition-duration:var(--slotted-duration-instant)}[data-ui=event-calendar] [data-part=list-events] [data-part=event][data-open],[data-ui=event-calendar] [data-part=list-events] [data-part=event][data-context]{background-color:light-dark(color-mix(in oklab,var(--_hue) var(--_tint),var(--_base)),color-mix(in oklab,var(--_hue) var(--_tint-dark),var(--_base)))}[data-ui=event-calendar] [data-part=list-events] [data-part=event][data-status=tentative]:before{background-color:transparent;border:var(--slotted-border-width-medium, 1.5px) solid var(--_hue)}[data-ui=event-calendar] [data-part=detail-day],[data-ui=event-calendar] [data-part=detail-range]{display:inline-block}[data-ui=event-calendar] [data-ui=popover]>[data-part=content]>[data-part=body],[data-ui=event-calendar] [data-ui=drawer] [data-part=panel]>[data-part=body]{display:grid;gap:var(--slotted-space-5, .75rem)}[data-ui=event-calendar] [data-part=list-events][data-layout=stacked] [data-part=event]{grid-template-columns:auto minmax(0,1fr)}[data-ui=event-calendar] [data-part=list-events][data-layout=stacked] [data-part=event]:before{grid-column:1}[data-ui=event-calendar] [data-part=list-events][data-layout=stacked] [data-part=event-title]{grid-column:2;grid-row:1}[data-ui=event-calendar] [data-part=list-events][data-layout=stacked] [data-part=event-time]{font-size:var(--slotted-font-size-xs, .75rem);grid-column:2;grid-row:2;line-height:var(--_line-xs)}[data-ui=event-calendar] [data-part=list-events][data-layout=stacked] [data-part=event-location]{grid-column:2;grid-row:3}[data-ui=event-calendar] [data-part=empty]{align-items:center;color:var(--slotted-text-muted, #5b6b7f);display:flex;flex-direction:column;gap:var(--slotted-space-5, .75rem);padding-block:var(--slotted-space-10, 2.5rem);padding-inline:var(--slotted-space-6, 1rem);text-align:center}@container slotted-event-calendar (max-width: 959px){[data-ui=event-calendar]>[data-part=header]{grid-template-areas:\"title title navigation navigation\" \"views . filter actions\";grid-template-columns:auto minmax(0,1fr) auto auto}[data-ui=event-calendar] [data-part=navigation]{justify-self:end}[data-ui=event-calendar] [data-part=views]{margin-inline-start:0}}@container slotted-event-calendar (max-width: 599px){[data-ui=event-calendar][data-part=root]{--_gutter: calc(var(--slotted-space-10, 2.5rem) + var(--slotted-space-2, .25rem))}[data-ui=event-calendar] [data-part=list-day]{grid-template-columns:minmax(0,1fr);row-gap:var(--slotted-space-1, .125rem)}[data-ui=event-calendar] [data-part=list-day-heading]{align-items:baseline;column-gap:var(--slotted-space-3, .375rem);flex-direction:row;flex-wrap:wrap}[data-ui=event-calendar] [data-part=list-events] [data-part=event]{grid-template-columns:auto minmax(0,1fr)}[data-ui=event-calendar] [data-part=list-events] [data-part=event]:before{grid-column:1}[data-ui=event-calendar] [data-part=list-events] [data-part=event-title]{grid-column:2;grid-row:1}[data-ui=event-calendar] [data-part=list-events] [data-part=event-time]{font-size:var(--slotted-font-size-xs, .75rem);grid-column:2;grid-row:2;line-height:var(--_line-xs)}[data-ui=event-calendar] [data-part=list-events] [data-part=event-location]{grid-column:2;grid-row:3}[data-ui=event-calendar] [data-part=month] [data-part=day]{--_event-size: var(--slotted-space-3, .375rem);--_air: var(--slotted-space-1, .125rem)}[data-ui=event-calendar] [data-part=month] [data-part=day-header]{margin-block-end:var(--slotted-space-2, .25rem)}[data-ui=event-calendar] [data-part=month] [data-part=day-number]{block-size:var(--slotted-control-inner-size-sm, 22px);min-inline-size:var(--slotted-control-inner-size-sm, 22px)}[data-ui=event-calendar] [data-part=month] [data-part=day-number]:after{content:\"\";inset:0;position:absolute}[data-ui=event-calendar] [data-part=month] [data-part=event]{padding:0;pointer-events:none}[data-ui=event-calendar] [data-part=column]>[data-part=event]{background-color:light-dark(color-mix(in oklab,var(--_hue) var(--_tint-active),var(--_base)),color-mix(in oklab,var(--_hue) var(--_tint-active-dark),var(--_base)));border-color:var(--_hue);padding:0}[data-ui=event-calendar] [data-part=column]>[data-part=more]{justify-content:center;padding-inline:0}[data-ui=event-calendar] [data-part=month] [data-part=event][data-bar]{background-color:var(--_hue);border-color:var(--_hue);border-radius:var(--slotted-radius-full, 9999px)}[data-ui=event-calendar] [data-part=month] [data-part=event]:not([data-bar]){inline-size:var(--slotted-space-4, .5rem)}[data-ui=event-calendar] [data-part=month] [data-part=event]:before{block-size:var(--slotted-space-3, .375rem);inline-size:var(--slotted-space-3, .375rem)}[data-ui=event-calendar] [data-part=month] [data-part=event][data-bar]:before,[data-ui=event-calendar] [data-part=month] [data-part=event][data-bar]:after{display:none}[data-ui=event-calendar] [data-part=month] [data-part=event]>*,[data-ui=event-calendar] [data-part=column]>[data-part=event]>*,[data-ui=event-calendar] [data-part=month] [data-part=day-content],[data-ui=event-calendar] [data-part=month] [data-part=more]>*,[data-ui=event-calendar] [data-part=column-header] [data-part=day-content],[data-ui=event-calendar] [data-part=offset-change]{block-size:1px;clip-path:inset(50%);inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}[data-ui=event-calendar] [data-part=month] [data-part=more]{block-size:auto;font-size:var(--slotted-font-size-xs, .75rem);line-height:var(--_line-xs);padding:0;pointer-events:none}[data-ui=event-calendar] [data-part=month] [data-part=day-events]{grid-template-rows:repeat(var(--slotted-event-calendar-lanes, 3),var(--_event-size)) auto}[data-ui=event-calendar] [data-part=column-header] [data-part=day-number]{block-size:var(--slotted-control-inner-size-md, 24px);font-size:var(--slotted-font-size-md, .875rem);min-inline-size:var(--slotted-control-inner-size-md, 24px)}[data-ui=event-calendar] [data-part=column]>[data-part=event],[data-ui=event-calendar] [data-part=column]>[data-part=more]{--_room: 100%}}@container slotted-event-calendar (max-width: 479px){[data-ui=event-calendar]>[data-part=header]{grid-template-areas:\"title title title title\" \"navigation . filter actions\" \"views views views views\";grid-template-columns:auto minmax(0,1fr) auto auto}[data-ui=event-calendar] [data-part=navigation]{justify-self:start;margin-inline-start:0}[data-ui=event-calendar] [data-part=views]>*{flex:1 1 auto;min-inline-size:0}[data-ui=event-calendar] [data-part=filter]{inline-size:var(--slotted-control-height-md, 34px);padding-inline:0}[data-ui=event-calendar] [data-part=filter]>[data-ui=icon]:last-child{display:none}[data-ui=event-calendar] [data-part=filter]>:not([data-ui=icon]){block-size:1px;clip-path:inset(50%);inline-size:1px;margin:-1px;overflow:hidden;position:absolute;white-space:nowrap}}@media(forced-colors:active){[data-ui=event-calendar] [data-part=event]:before,[data-ui=event-calendar] [data-part=now]:before{forced-color-adjust:none}[data-ui=event-calendar] [data-part=event][data-bar],[data-ui=event-calendar] [data-part=column]>[data-part=event]{border-color:currentcolor}[data-ui=event-calendar] [data-part=day-events]>[data-part=event]:not([data-bar]),[data-ui=event-calendar] [data-part=list-events] [data-part=event]{border-color:Canvas}[data-ui=event-calendar] [data-today]>[data-part=day-header] [data-part=day-number],[data-ui=event-calendar] [data-part=column-header][data-today] [data-part=day-number]{background-color:Highlight;color:HighlightText;forced-color-adjust:none}}}\n", "@layer slotted.components{[data-ui=visually-hidden]:not([data-focusable]:focus-within){block-size:1px;border:0;clip-path:inset(50%);inline-size:1px;inset-block-start:0;inset-inline-start:0;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}}\n"] }]
2927
+ }], ctorParameters: () => [], propDecorators: { events: [{ type: i0.Input, args: [{ isSignal: true, alias: "events", required: false }] }], calendars: [{ type: i0.Input, args: [{ isSignal: true, alias: "calendars", required: false }] }], views: [{ type: i0.Input, args: [{ isSignal: true, alias: "views", required: false }] }], date: [{ type: i0.Input, args: [{ isSignal: true, alias: "date", required: false }] }, { type: i0.Output, args: ["dateChange"] }], defaultDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultDate", required: false }] }], view: [{ type: i0.Input, args: [{ isSignal: true, alias: "view", required: false }] }, { type: i0.Output, args: ["viewChange"] }], defaultView: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultView", required: false }] }], visibleCalendars: [{ type: i0.Input, args: [{ isSignal: true, alias: "visibleCalendars", required: false }] }, { type: i0.Output, args: ["visibleCalendarsChange"] }], defaultVisibleCalendars: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultVisibleCalendars", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], selection: [{ type: i0.Input, args: [{ isSignal: true, alias: "selection", required: false }] }, { type: i0.Output, args: ["selectionChange"] }], defaultSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultSelection", required: false }] }], openEvent: [{ type: i0.Input, args: [{ isSignal: true, alias: "openEvent", required: false }] }, { type: i0.Output, args: ["openEventChange"] }], defaultOpenEvent: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultOpenEvent", required: false }] }], filter: [{ type: i0.Input, args: [{ isSignal: true, alias: "filter", required: false }] }], editable: [{ type: i0.Input, args: [{ isSignal: true, alias: "editable", required: false }] }], workingHours: [{ type: i0.Input, args: [{ isSignal: true, alias: "workingHours", required: false }] }], header: [{ type: i0.Input, args: [{ isSignal: true, alias: "header", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], level: [{ type: i0.Input, args: [{ isSignal: true, alias: "level", required: false }] }], compact: [{ type: i0.Input, args: [{ isSignal: true, alias: "compact", required: false }] }], dayHours: [{ type: i0.Input, args: [{ isSignal: true, alias: "dayHours", required: false }] }], firstDayOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstDayOfWeek", required: false }] }], fixedWeeks: [{ type: i0.Input, args: [{ isSignal: true, alias: "fixedWeeks", required: false }] }], hourCycle: [{ type: i0.Input, args: [{ isSignal: true, alias: "hourCycle", required: false }] }], listRange: [{ type: i0.Input, args: [{ isSignal: true, alias: "listRange", required: false }] }], loadingDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingDelay", required: false }] }], loadingMinDuration: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingMinDuration", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], messages: [{ type: i0.Input, args: [{ isSignal: true, alias: "messages", required: false }] }], maxColumns: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxColumns", required: false }] }], maxEvents: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxEvents", required: false }] }], scrollTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollTime", required: false }] }], slotDuration: [{ type: i0.Input, args: [{ isSignal: true, alias: "slotDuration", required: false }] }], timeZone: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeZone", required: false }] }], weekends: [{ type: i0.Input, args: [{ isSignal: true, alias: "weekends", required: false }] }], weekNumbers: [{ type: i0.Input, args: [{ isSignal: true, alias: "weekNumbers", required: false }] }], dateRequest: [{ type: i0.Output, args: ["dateRequest"] }], viewRequest: [{ type: i0.Output, args: ["viewRequest"] }], visibleCalendarsRequest: [{ type: i0.Output, args: ["visibleCalendarsRequest"] }], selectionRequest: [{ type: i0.Output, args: ["selectionRequest"] }], openEventRequest: [{ type: i0.Output, args: ["openEventRequest"] }], eventChangeRequest: [{ type: i0.Output, args: ["eventChangeRequest"] }], canDrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "canDrop", required: false }] }], rangeChange: [{ type: i0.Output, args: ["rangeChange"] }], eventContentTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SlEventCalendarEvent), { isSignal: true }] }], detail: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SlEventCalendarDetail), { isSignal: true }] }], dayContent: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SlEventCalendarDayContent), { isSignal: true }] }], actions: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SlEventCalendarActions), { isSignal: true }] }], empty: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SlEventCalendarEmpty), { isSignal: true }] }], errorContent: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SlEventCalendarError), { isSignal: true }] }], body: [{ type: i0.ViewChild, args: ['body', { ...{ read: ElementRef }, isSignal: true }] }], scroller: [{ type: i0.ViewChild, args: ['scroller', { isSignal: true }] }], filterButton: [{ type: i0.ViewChild, args: ['filterButton', { isSignal: true }] }], morePopover: [{ type: i0.ViewChild, args: ['morePopover', { isSignal: true }] }], detailPopover: [{ type: i0.ViewChild, args: ['detailPopover', { isSignal: true }] }], contextMenu: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SlEventCalendarContextMenu), { isSignal: true }] }], contextMenuRef: [{ type: i0.ViewChild, args: ['contextMenuRef', { isSignal: true }] }] } });
2928
+
2929
+ /**
2930
+ * Generated bundle index. Do not edit.
2931
+ */
2932
+
2933
+ export { EVENT_CALENDAR_DEFAULTS, EVENT_CALENDAR_FALLBACK, SlEventCalendar, SlEventCalendarActions, SlEventCalendarContextMenu, SlEventCalendarDayContent, SlEventCalendarDetail, SlEventCalendarEmpty, SlEventCalendarError, SlEventCalendarEvent, injectEventCalendarDefaults, provideEventCalendarDefaults };
2934
+ //# sourceMappingURL=slotted-angular-event-calendar.mjs.map