snice 7.8.0 → 7.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/README.md +1 -1
  2. package/adapters/react/SniceProvider.js +1 -1
  3. package/adapters/react/SniceRouter.js +1 -1
  4. package/adapters/react/matchRoute.js +1 -1
  5. package/adapters/react/table.d.ts +1 -0
  6. package/adapters/react/table.d.ts.map +1 -1
  7. package/adapters/react/table.js +1 -1
  8. package/adapters/react/table.js.map +1 -1
  9. package/adapters/react/table.tsx +2 -1
  10. package/adapters/react/useRequestHandler.js +1 -1
  11. package/bin/analyzer-contracts.js +17 -1
  12. package/custom-elements.json +57 -3
  13. package/dist/cdn/accordion/snice-accordion.js +1 -1
  14. package/dist/cdn/action-bar/snice-action-bar.js +1 -1
  15. package/dist/cdn/activity-feed/snice-activity-feed.js +1 -1
  16. package/dist/cdn/alert/snice-alert.js +1 -1
  17. package/dist/cdn/app-tiles/snice-app-tiles.js +1 -1
  18. package/dist/cdn/approval-flow/snice-approval-flow.js +1 -1
  19. package/dist/cdn/audio-recorder/snice-audio-recorder.js +1 -1
  20. package/dist/cdn/availability/snice-availability.js +1 -1
  21. package/dist/cdn/avatar/snice-avatar.js +1 -1
  22. package/dist/cdn/avatar-group/snice-avatar-group.js +1 -1
  23. package/dist/cdn/badge/snice-badge.js +1 -1
  24. package/dist/cdn/banner/snice-banner.js +1 -1
  25. package/dist/cdn/binpack/snice-binpack.js +1 -1
  26. package/dist/cdn/book/snice-book.js +1 -1
  27. package/dist/cdn/booking/snice-booking.js +1 -1
  28. package/dist/cdn/breadcrumbs/snice-breadcrumbs.js +1 -1
  29. package/dist/cdn/button/snice-button.js +1 -1
  30. package/dist/cdn/calendar/README.md +2 -2
  31. package/dist/cdn/calendar/snice-calendar.js +537 -44
  32. package/dist/cdn/calendar/snice-calendar.js.map +1 -1
  33. package/dist/cdn/calendar/snice-calendar.min.js +2 -2
  34. package/dist/cdn/calendar/snice-calendar.min.js.map +1 -1
  35. package/dist/cdn/camera/snice-camera.js +1 -1
  36. package/dist/cdn/camera-annotate/snice-camera-annotate.js +1 -1
  37. package/dist/cdn/candlestick/snice-candlestick.js +1 -1
  38. package/dist/cdn/card/snice-card.js +1 -1
  39. package/dist/cdn/carousel/snice-carousel.js +1 -1
  40. package/dist/cdn/cart/snice-cart.js +1 -1
  41. package/dist/cdn/chart/snice-chart.js +1 -1
  42. package/dist/cdn/chat/snice-chat.js +1 -1
  43. package/dist/cdn/checkbox/snice-checkbox.js +1 -1
  44. package/dist/cdn/chip/snice-chip.js +1 -1
  45. package/dist/cdn/code-block/README.md +2 -2
  46. package/dist/cdn/code-block/snice-code-block.js +177 -167
  47. package/dist/cdn/code-block/snice-code-block.js.map +1 -1
  48. package/dist/cdn/code-block/snice-code-block.min.js +2 -2
  49. package/dist/cdn/code-block/snice-code-block.min.js.map +1 -1
  50. package/dist/cdn/color-display/snice-color-display.js +1 -1
  51. package/dist/cdn/color-picker/snice-color-picker.js +1 -1
  52. package/dist/cdn/command-palette/README.md +1 -1
  53. package/dist/cdn/command-palette/snice-command-palette.js +2 -2
  54. package/dist/cdn/command-palette/snice-command-palette.js.map +1 -1
  55. package/dist/cdn/command-palette/snice-command-palette.min.js +1 -1
  56. package/dist/cdn/command-palette/snice-command-palette.min.js.map +1 -1
  57. package/dist/cdn/comments/snice-comments.js +1 -1
  58. package/dist/cdn/countdown/snice-countdown.js +1 -1
  59. package/dist/cdn/cropper/snice-cropper.js +1 -1
  60. package/dist/cdn/data-card/snice-data-card.js +1 -1
  61. package/dist/cdn/date-picker/snice-date-picker.js +1 -1
  62. package/dist/cdn/date-range-picker/snice-date-range-picker.js +1 -1
  63. package/dist/cdn/date-time-picker/snice-date-time-picker.js +1 -1
  64. package/dist/cdn/diff/snice-diff.js +1 -1
  65. package/dist/cdn/divider/snice-divider.js +1 -1
  66. package/dist/cdn/doc/snice-doc.js +1 -1
  67. package/dist/cdn/draw/snice-draw.js +1 -1
  68. package/dist/cdn/drawer/snice-drawer.js +1 -1
  69. package/dist/cdn/empty-state/snice-empty-state.js +1 -1
  70. package/dist/cdn/estimate/snice-estimate.js +1 -1
  71. package/dist/cdn/file-gallery/snice-file-gallery.js +1 -1
  72. package/dist/cdn/file-upload/snice-file-upload.js +1 -1
  73. package/dist/cdn/flip-card/snice-flip-card.js +1 -1
  74. package/dist/cdn/flow/snice-flow.js +1 -1
  75. package/dist/cdn/form-layout/snice-form-layout.js +1 -1
  76. package/dist/cdn/funnel/snice-funnel.js +1 -1
  77. package/dist/cdn/gantt/snice-gantt.js +1 -1
  78. package/dist/cdn/gauge/snice-gauge.js +1 -1
  79. package/dist/cdn/grid/snice-grid.js +1 -1
  80. package/dist/cdn/heatmap/snice-heatmap.js +1 -1
  81. package/dist/cdn/image/snice-image.js +1 -1
  82. package/dist/cdn/input/snice-input.js +1 -1
  83. package/dist/cdn/invoice/snice-invoice.js +1 -1
  84. package/dist/cdn/kanban/snice-kanban.js +1 -1
  85. package/dist/cdn/key-value/snice-key-value.js +1 -1
  86. package/dist/cdn/kpi/snice-kpi.js +1 -1
  87. package/dist/cdn/layout/snice-layout.js +1 -1
  88. package/dist/cdn/leaderboard/snice-leaderboard.js +1 -1
  89. package/dist/cdn/link/snice-link.js +1 -1
  90. package/dist/cdn/link-preview/snice-link-preview.js +1 -1
  91. package/dist/cdn/list/snice-list.js +1 -1
  92. package/dist/cdn/location/snice-location.js +1 -1
  93. package/dist/cdn/login/snice-login.js +1 -1
  94. package/dist/cdn/map/snice-map.js +1 -1
  95. package/dist/cdn/markdown/snice-markdown.js +1 -1
  96. package/dist/cdn/masonry/snice-masonry.js +1 -1
  97. package/dist/cdn/menu/snice-menu.js +1 -1
  98. package/dist/cdn/message-strip/snice-message-strip.js +1 -1
  99. package/dist/cdn/modal/snice-modal.js +1 -1
  100. package/dist/cdn/music-player/snice-music-player.js +1 -1
  101. package/dist/cdn/nav/snice-nav.js +1 -1
  102. package/dist/cdn/network-graph/snice-network-graph.js +1 -1
  103. package/dist/cdn/notification-center/snice-notification-center.js +1 -1
  104. package/dist/cdn/order-tracker/snice-order-tracker.js +1 -1
  105. package/dist/cdn/org-chart/snice-org-chart.js +1 -1
  106. package/dist/cdn/pagination/snice-pagination.js +1 -1
  107. package/dist/cdn/paint/snice-paint.js +1 -1
  108. package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +1 -1
  109. package/dist/cdn/permission-matrix/snice-permission-matrix.js +1 -1
  110. package/dist/cdn/podcast-player/snice-podcast-player.js +1 -1
  111. package/dist/cdn/popover/snice-popover.js +1 -1
  112. package/dist/cdn/pricing-table/snice-pricing-table.js +1 -1
  113. package/dist/cdn/product-card/snice-product-card.js +1 -1
  114. package/dist/cdn/progress/snice-progress.js +2 -2
  115. package/dist/cdn/progress/snice-progress.js.map +1 -1
  116. package/dist/cdn/progress/snice-progress.min.js +1 -1
  117. package/dist/cdn/progress/snice-progress.min.js.map +1 -1
  118. package/dist/cdn/progress-ring/snice-progress-ring.js +1 -1
  119. package/dist/cdn/qr-code/README.md +2 -2
  120. package/dist/cdn/qr-code/snice-qr-code.js +19 -3
  121. package/dist/cdn/qr-code/snice-qr-code.js.map +1 -1
  122. package/dist/cdn/qr-code/snice-qr-code.min.js +2 -2
  123. package/dist/cdn/qr-code/snice-qr-code.min.js.map +1 -1
  124. package/dist/cdn/qr-reader/snice-qr-reader.js +1 -1
  125. package/dist/cdn/radio/snice-radio.js +1 -1
  126. package/dist/cdn/range-slider/snice-range-slider.js +1 -1
  127. package/dist/cdn/rating/snice-rating.js +1 -1
  128. package/dist/cdn/receipt/snice-receipt.js +5 -2
  129. package/dist/cdn/receipt/snice-receipt.js.map +1 -1
  130. package/dist/cdn/receipt/snice-receipt.min.js +1 -1
  131. package/dist/cdn/receipt/snice-receipt.min.js.map +1 -1
  132. package/dist/cdn/recipe/snice-recipe.js +1 -1
  133. package/dist/cdn/runtime/snice-runtime.esm.js +4 -4
  134. package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
  135. package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
  136. package/dist/cdn/runtime/snice-runtime.js +4 -4
  137. package/dist/cdn/runtime/snice-runtime.js.map +1 -1
  138. package/dist/cdn/runtime/snice-runtime.min.js.map +1 -1
  139. package/dist/cdn/sankey/snice-sankey.js +1 -1
  140. package/dist/cdn/segmented-control/snice-segmented-control.js +1 -1
  141. package/dist/cdn/select/README.md +2 -2
  142. package/dist/cdn/select/snice-select.js +6 -9
  143. package/dist/cdn/select/snice-select.js.map +1 -1
  144. package/dist/cdn/select/snice-select.min.js +2 -2
  145. package/dist/cdn/select/snice-select.min.js.map +1 -1
  146. package/dist/cdn/skeleton/snice-skeleton.js +1 -1
  147. package/dist/cdn/slider/snice-slider.js +1 -1
  148. package/dist/cdn/sortable/snice-sortable.js +1 -1
  149. package/dist/cdn/sparkline/snice-sparkline.js +1 -1
  150. package/dist/cdn/spinner/snice-spinner.js +1 -1
  151. package/dist/cdn/split-button/snice-split-button.js +1 -1
  152. package/dist/cdn/split-pane/snice-split-pane.js +1 -1
  153. package/dist/cdn/spotlight/snice-spotlight.js +1 -1
  154. package/dist/cdn/stat-group/snice-stat-group.js +1 -1
  155. package/dist/cdn/step-input/snice-step-input.js +1 -1
  156. package/dist/cdn/stepper/snice-stepper.js +1 -1
  157. package/dist/cdn/switch/snice-switch.js +1 -1
  158. package/dist/cdn/table/README.md +2 -2
  159. package/dist/cdn/table/snice-table.esm.js +1940 -407
  160. package/dist/cdn/table/snice-table.esm.js.map +1 -1
  161. package/dist/cdn/table/snice-table.esm.min.js +242 -53
  162. package/dist/cdn/table/snice-table.esm.min.js.map +1 -1
  163. package/dist/cdn/table/snice-table.js +1940 -407
  164. package/dist/cdn/table/snice-table.js.map +1 -1
  165. package/dist/cdn/table/snice-table.min.js +234 -45
  166. package/dist/cdn/table/snice-table.min.js.map +1 -1
  167. package/dist/cdn/tabs/snice-tabs.js +1 -1
  168. package/dist/cdn/tag/snice-tag.js +1 -1
  169. package/dist/cdn/tag-input/snice-tag-input.js +1 -1
  170. package/dist/cdn/terminal/snice-terminal.js +1 -1
  171. package/dist/cdn/testimonial/snice-testimonial.js +1 -1
  172. package/dist/cdn/textarea/snice-textarea.js +1 -1
  173. package/dist/cdn/time-picker/snice-time-picker.js +1 -1
  174. package/dist/cdn/time-range-picker/snice-time-range-picker.js +1 -1
  175. package/dist/cdn/timeline/snice-timeline.js +1 -1
  176. package/dist/cdn/timer/snice-timer.js +1 -1
  177. package/dist/cdn/toast/snice-toast.js +1 -1
  178. package/dist/cdn/tooltip/snice-tooltip.js +1 -1
  179. package/dist/cdn/tree/snice-tree.js +1 -1
  180. package/dist/cdn/treemap/snice-treemap.js +1 -1
  181. package/dist/cdn/user-card/snice-user-card.js +1 -1
  182. package/dist/cdn/video-player/snice-video-player.js +1 -1
  183. package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +1 -1
  184. package/dist/cdn/waterfall/snice-waterfall.js +1 -1
  185. package/dist/cdn/weather/snice-weather.js +1 -1
  186. package/dist/cdn/work-order/snice-work-order.js +1 -1
  187. package/dist/components/calendar/snice-calendar.d.ts +187 -5
  188. package/dist/components/calendar/snice-calendar.js +537 -44
  189. package/dist/components/calendar/snice-calendar.js.map +1 -1
  190. package/dist/components/calendar/snice-calendar.types.d.ts +2 -1
  191. package/dist/components/code-block/formatter.d.ts +6 -0
  192. package/dist/components/code-block/formatter.js +174 -164
  193. package/dist/components/code-block/formatter.js.map +1 -1
  194. package/dist/components/code-block/grammars/snice.json +1 -1
  195. package/dist/components/code-block/grammars/typescript.json +1 -1
  196. package/dist/components/command-palette/snice-command-palette.js +1 -1
  197. package/dist/components/command-palette/snice-command-palette.js.map +1 -1
  198. package/dist/components/progress/snice-progress.js +1 -1
  199. package/dist/components/progress/snice-progress.js.map +1 -1
  200. package/dist/components/qr-code/qrcode.d.ts +1 -1
  201. package/dist/components/qr-code/qrcode.js +18 -2
  202. package/dist/components/qr-code/qrcode.js.map +1 -1
  203. package/dist/components/receipt/snice-receipt.js +4 -1
  204. package/dist/components/receipt/snice-receipt.js.map +1 -1
  205. package/dist/components/select/snice-select.d.ts +1 -1
  206. package/dist/components/select/snice-select.js +5 -8
  207. package/dist/components/select/snice-select.js.map +1 -1
  208. package/dist/components/table/snice-cell-actions.js +1 -1
  209. package/dist/components/table/snice-cell-actions.js.map +1 -1
  210. package/dist/components/table/snice-cell-color.js +1 -1
  211. package/dist/components/table/snice-cell-color.js.map +1 -1
  212. package/dist/components/table/snice-cell-date.js +20 -8
  213. package/dist/components/table/snice-cell-date.js.map +1 -1
  214. package/dist/components/table/snice-cell-email.js +1 -1
  215. package/dist/components/table/snice-cell-email.js.map +1 -1
  216. package/dist/components/table/snice-cell-image.js +1 -1
  217. package/dist/components/table/snice-cell-image.js.map +1 -1
  218. package/dist/components/table/snice-cell-json.js +1 -1
  219. package/dist/components/table/snice-cell-json.js.map +1 -1
  220. package/dist/components/table/snice-cell-link.js +1 -1
  221. package/dist/components/table/snice-cell-link.js.map +1 -1
  222. package/dist/components/table/snice-cell-location.js +1 -1
  223. package/dist/components/table/snice-cell-location.js.map +1 -1
  224. package/dist/components/table/snice-cell-phone.js +1 -1
  225. package/dist/components/table/snice-cell-phone.js.map +1 -1
  226. package/dist/components/table/snice-cell-status.js +1 -1
  227. package/dist/components/table/snice-cell-status.js.map +1 -1
  228. package/dist/components/table/snice-cell.d.ts +10 -0
  229. package/dist/components/table/snice-cell.js +59 -13
  230. package/dist/components/table/snice-cell.js.map +1 -1
  231. package/dist/components/table/snice-row.d.ts +0 -1
  232. package/dist/components/table/snice-row.js +4 -10
  233. package/dist/components/table/snice-row.js.map +1 -1
  234. package/dist/components/table/snice-table.d.ts +170 -2
  235. package/dist/components/table/snice-table.js +868 -189
  236. package/dist/components/table/snice-table.js.map +1 -1
  237. package/dist/components/table/snice-table.types.d.ts +17 -0
  238. package/dist/components/table/table-cell-presentation.d.ts +17 -4
  239. package/dist/components/table/table-cell-presentation.js +37 -11
  240. package/dist/components/table/table-cell-presentation.js.map +1 -1
  241. package/dist/components/table/table-column-manager.d.ts +153 -2
  242. package/dist/components/table/table-column-manager.js +364 -43
  243. package/dist/components/table/table-column-manager.js.map +1 -1
  244. package/dist/components/table/table-date.d.ts +29 -0
  245. package/dist/components/table/table-date.js +78 -0
  246. package/dist/components/table/table-date.js.map +1 -0
  247. package/dist/components/table/table-export.js +6 -2
  248. package/dist/components/table/table-export.js.map +1 -1
  249. package/dist/components/table/table-filter-engine.d.ts +9 -0
  250. package/dist/components/table/table-filter-engine.js +58 -14
  251. package/dist/components/table/table-filter-engine.js.map +1 -1
  252. package/dist/components/table/table-keyboard.d.ts +8 -0
  253. package/dist/components/table/table-keyboard.js +14 -3
  254. package/dist/components/table/table-keyboard.js.map +1 -1
  255. package/dist/components/table/table-toolbar.js +1 -0
  256. package/dist/components/table/table-toolbar.js.map +1 -1
  257. package/dist/components/table/table-tree-data.d.ts +2 -0
  258. package/dist/components/table/table-tree-data.js +35 -9
  259. package/dist/components/table/table-tree-data.js.map +1 -1
  260. package/dist/components/table/table-virtualizer.d.ts +44 -7
  261. package/dist/components/table/table-virtualizer.js +101 -54
  262. package/dist/components/table/table-virtualizer.js.map +1 -1
  263. package/dist/components/theme/theme.css +9 -0
  264. package/dist/index.cjs +1 -1
  265. package/dist/index.esm.js +1 -1
  266. package/dist/index.iife.js +1 -1
  267. package/dist/react/SniceProvider.js +1 -1
  268. package/dist/react/SniceRouter.js +1 -1
  269. package/dist/react/index.js +1 -1
  270. package/dist/react/matchRoute.js +1 -1
  271. package/dist/react/useRequestHandler.js +1 -1
  272. package/dist/symbols.cjs +1 -1
  273. package/dist/symbols.esm.js +1 -1
  274. package/dist/testing-dom.cjs +1 -1
  275. package/dist/testing-dom.esm.js +1 -1
  276. package/dist/transitions.cjs +1 -1
  277. package/dist/transitions.esm.js +1 -1
  278. package/docs/ai/DEVELOPMENT.md +93 -2
  279. package/docs/ai/components/calendar.md +113 -10
  280. package/docs/ai/components/code-block.md +4 -0
  281. package/docs/ai/components/doc.md +1 -1
  282. package/docs/ai/components/progress.md +1 -0
  283. package/docs/ai/components/receipt.md +1 -1
  284. package/docs/ai/components/table.md +29 -30
  285. package/docs/ai/components/theme.md +1 -0
  286. package/docs/ai/events.md +30 -0
  287. package/docs/ai/theme.md +1 -0
  288. package/docs/components/calendar.md +171 -11
  289. package/docs/components/code-block.md +2 -0
  290. package/docs/components/doc.md +1 -1
  291. package/docs/components/progress.md +13 -0
  292. package/docs/components/receipt.md +1 -0
  293. package/docs/components/table.md +274 -15
  294. package/docs/components/theme.md +5 -0
  295. package/docs/events.md +49 -0
  296. package/docs/plans/2026-03-06-date-range-picker-plan.md +4 -4
  297. package/docs/plans/2026-03-07-table-mui-parity-design.md +1 -1
  298. package/docs/plans/2026-03-09-action-bar-plan.md +11 -11
  299. package/docs/superpowers/specs/2026-07-09-table-incredible-design.md +1 -1
  300. package/docs/superpowers/specs/2026-07-09-table-phase0-implementation.md +2 -2
  301. package/package.json +3 -1
  302. package/vscode.html-custom-data.json +13 -1
@@ -1 +1 @@
1
- {"version":3,"file":"snice-calendar.js","sources":["../../../components/calendar/snice-calendar.css?inline","../../../../components/calendar/snice-calendar.ts"],"sourcesContent":["export default \":host([hidden]){display:none}:host{display:block;font-family:var(--snice-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif);contain:layout style}.calendar{width:100%;max-width:37.5rem}.calendar__header{font-family:var(--snice-font-family-display, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif);display:flex;align-items:center;justify-content:space-between;padding:var(--snice-spacing-md,1rem);background:var(--snice-color-surface,rgb(255 255 255));border-bottom:1px solid var(--snice-color-border,rgb(226 226 226))}.calendar__title{font-family:var(--snice-font-family-display, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif);font-size:var(--snice-heading-md, 1.125rem);font-weight:var(--snice-font-weight-semibold,600);color:var(--snice-color-text,rgb(23 23 23))}.calendar__nav{display:flex;gap:var(--snice-spacing-xs,.5rem)}.calendar__nav-button{padding:var(--snice-spacing-xs,.5rem) var(--snice-spacing-sm,.75rem);border:1px solid var(--snice-color-border,rgb(226 226 226));background:var(--snice-color-surface,rgb(255 255 255));border-radius:var(--snice-border-radius-md,.25rem);cursor:pointer;transition:background-color var(--snice-transition-fast, 150ms) ease,border-color var(--snice-transition-fast, 150ms) ease;font-size:var(--snice-font-size-sm, .875rem);color:var(--snice-color-text,rgb(23 23 23));font-family:inherit}.calendar__nav-button:hover{background:var(--snice-color-surface-container-low,rgb(250 250 250));border-color:var(--snice-color-border-hover,rgb(204 204 204))}.calendar__nav-button:focus-visible{outline:0;box-shadow:0 0 0 var(--snice-focus-ring-width,2px) var(--snice-focus-ring-color,rgb(59 130 246 / .5))}.calendar__grid{display:grid;grid-template-columns:repeat(7,1fr);background:var(--snice-color-surface,rgb(255 255 255));container-type:inline-size}.calendar__weekday{padding:var(--snice-spacing-sm,.75rem);text-align:center;font-size:var(--snice-font-size-xs, .75rem);font-weight:var(--snice-font-weight-semibold,600);color:var(--snice-color-text-secondary,rgb(82 82 82));text-transform:uppercase;letter-spacing:var(--snice-tracking-widest, .1em);border-bottom:1px solid var(--snice-color-border,rgb(226 226 226))}.calendar__day{box-sizing:border-box;min-width:0;min-height:max(calc(100cqw / 7),3rem,calc(2.125rem + var(--calendar-week-lanes,0) * 1.375rem + var(--calendar-week-more,0rem)));padding:var(--snice-spacing-xs,.5rem);border:1px solid var(--snice-color-border,rgb(226 226 226));border-top:none;border-left:none;cursor:pointer;transition:background-color var(--snice-transition-fast, 150ms) ease;position:relative;background:var(--snice-color-surface,rgb(255 255 255));color:var(--snice-color-text,rgb(23 23 23));overflow:hidden}.calendar__day:hover{background:var(--snice-color-surface-container-low,rgb(250 250 250))}.calendar__day:focus-visible{outline:0;box-shadow:inset 0 0 0 2px var(--snice-focus-ring-color,rgb(59 130 246 / .5))}.calendar__day:nth-child(7n+1){border-left:1px solid var(--snice-color-border,rgb(226 226 226))}.calendar__day--stretch{min-height:max(3rem,calc(2.125rem + var(--calendar-week-lanes,0) * 1.375rem + var(--calendar-week-more,0rem)))}.calendar__day--static{cursor:default}.calendar__day--static:hover{background:var(--snice-color-surface,rgb(255 255 255))}.calendar__day--static.calendar__day--today:hover{background:var(--snice-color-primary-subtle,rgb(239 246 255))}.calendar__day--other-month{background:var(--snice-color-surface,rgb(255 255 255));color:var(--snice-color-text-tertiary,rgb(115 115 115));opacity:.5}.calendar__day--other-month:hover{opacity:.7}.calendar__day--today{background:var(--snice-color-primary-subtle,rgb(239 246 255))}.calendar__day--today:hover{background:var(--snice-color-primary-subtle-hover,rgb(219 234 254))}.calendar__day--selected{background:var(--snice-color-primary,rgb(37 99 235));color:var(--snice-color-text-inverse,rgb(250 250 250))}.calendar__day--selected:hover{background:var(--snice-color-primary-hover,rgb(29 78 216))}.calendar__day--disabled{background:var(--snice-color-surface-container,rgb(241 241 241));color:var(--snice-color-text-tertiary,rgb(115 115 115));opacity:.5;cursor:not-allowed}.calendar__day--disabled:hover{background:var(--snice-color-surface-container,rgb(241 241 241))}.calendar__day-number{font-size:var(--snice-font-size-sm, .875rem);font-weight:var(--snice-font-weight-medium,500);margin-bottom:var(--snice-spacing-2xs,.25rem)}.calendar__day--selected .calendar__day-number{color:var(--snice-color-text-inverse,rgb(250 250 250))}.calendar__event-bar{display:flex;align-items:center;gap:var(--snice-spacing-3xs,.125rem);align-self:start;margin-top:calc(1.875rem + var(--calendar-event-lane,0) * 1.375rem);margin-inline:var(--snice-spacing-3xs,0.125rem);height:1.125rem;line-height:1.125rem;font-size:var(--snice-font-size-2xs, .625rem);padding:0 var(--snice-spacing-2xs,.25rem);border-radius:var(--snice-border-radius-sm,.125rem);background:var(--snice-color-primary,rgb(37 99 235));color:var(--snice-color-text-inverse,rgb(250 250 250));white-space:nowrap;overflow:hidden;cursor:pointer;z-index:1;transition:opacity var(--snice-transition-fast, 150ms) ease}.calendar__event-title{overflow:hidden;text-overflow:ellipsis;min-width:0}.calendar__event-avatar{flex:none;--avatar-size:0.875rem;font-size:.375rem;border-radius:50%;overflow:hidden}.calendar__popover{position:fixed;z-index:var(--snice-z-floating,1000);min-width:14rem;max-width:22rem;padding:var(--snice-spacing-sm,.75rem);border:1px solid var(--snice-color-border,rgb(226 226 226));border-radius:var(--snice-border-radius-md,.25rem);background:var(--snice-color-surface,rgb(255 255 255));color:var(--snice-color-text,rgb(23 23 23));font-size:var(--snice-font-size-sm, .875rem);line-height:1.5;box-shadow:var(--snice-shadow-lg,0 10px 15px -3px rgb(0 0 0 / .1))}.calendar__popover:focus-visible{outline:0;box-shadow:var(--snice-shadow-lg,0 10px 15px -3px rgb(0 0 0 / .1)),0 0 0 var(--snice-focus-ring-width,2px) var(--snice-focus-ring-color,rgb(59 130 246 / .5))}.calendar__popover-loading{color:var(--snice-color-text-secondary,rgb(82 82 82));font-size:var(--snice-font-size-xs, .75rem)}.calendar__tooltip{position:fixed;z-index:var(--snice-z-floating,1000);max-width:18rem;padding:var(--snice-spacing-2xs,.25rem) var(--snice-spacing-xs,.5rem);border-radius:var(--snice-border-radius-md,.25rem);background:var(--snice-tooltip-bg,rgb(51 51 51));color:var(--snice-color-text-inverse,rgb(250 250 250));font-size:var(--snice-font-size-xs, .75rem);line-height:1.4;box-shadow:var(--snice-shadow-md,0 4px 6px -1px rgb(0 0 0 / .1));pointer-events:none}.calendar__event-bar:hover{opacity:.8}.calendar__event-bar--continues-left{border-top-left-radius:0;border-bottom-left-radius:0;margin-inline-start:0}.calendar__event-bar--continues-right{border-top-right-radius:0;border-bottom-right-radius:0;margin-inline-end:0}.calendar__more{position:absolute;bottom:var(--snice-spacing-3xs,.125rem);left:var(--snice-spacing-2xs,.25rem);font-size:var(--snice-font-size-xs, .75rem);font-weight:var(--snice-font-weight-medium,500);color:var(--snice-color-text,rgb(23 23 23));cursor:pointer}.calendar__more:hover{text-decoration:underline}.calendar__more:focus-visible{outline:0;box-shadow:0 0 0 var(--snice-focus-ring-width,2px) var(--snice-focus-ring-color,rgb(59 130 246 / .5))}.calendar__week-number{padding:var(--snice-spacing-sm,.75rem) var(--snice-spacing-xs,.5rem);text-align:center;font-size:var(--snice-font-size-xs, .75rem);color:var(--snice-color-text-tertiary,rgb(115 115 115));background:var(--snice-color-surface-container-low,rgb(250 250 250));border-right:1px solid var(--snice-color-border,rgb(226 226 226))}.calendar--week .calendar__grid{grid-template-columns:repeat(7,1fr)}.calendar--week .calendar__day{min-height:7.5rem}.calendar--day .calendar__grid{grid-template-columns:1fr}.calendar--day .calendar__day{min-height:25rem}@media (prefers-reduced-motion:reduce){*{transition-duration:0s!important;animation-duration:0s!important}}\";","import { element, property, styles, dispatch, ready, watch, css, request, dispose } from 'snice';\nimport '../avatar/snice-avatar';\nimport type {\n SniceCalendarElement, CalendarView, CalendarEvent, CalendarEventTooltip,\n CalendarEventPopoverProvider,\n} from './snice-calendar.types';\nimport cssContent from './snice-calendar.css?inline';\n\n@element('snice-calendar')\nexport class SniceCalendar extends HTMLElement implements SniceCalendarElement {\n @property({ type: Date })\n value: Date | string = new Date();\n\n @property({ attribute: 'view' })\n view: CalendarView = 'month';\n\n @property({ type: Array, attribute: false })\n events: CalendarEvent[] = [];\n\n @property({ type: Date, attribute: 'min-date' })\n minDate: Date | string = '';\n\n @property({ type: Date, attribute: 'max-date' })\n maxDate: Date | string = '';\n\n @property({ type: Array, attribute: false })\n disabledDates: (Date | string)[] = [];\n\n @property({ type: Boolean, attribute: 'highlight-today' })\n highlightToday = true;\n\n @property({ type: Boolean, attribute: 'show-week-numbers' })\n showWeekNumbers = false;\n\n @property({ type: Number, attribute: 'first-day-of-week' })\n firstDayOfWeek = 0; // 0 = Sunday, 1 = Monday\n\n @property({ attribute: 'locale' })\n locale = 'en-US';\n\n @property({ type: Boolean, attribute: 'no-day-select' })\n noDaySelect = false;\n\n @property({ attribute: 'cell-sizing' })\n cellSizing: 'square' | 'stretch' = 'square';\n\n @property({ attribute: false })\n eventTooltip: CalendarEventTooltip | null = null;\n\n @property({ attribute: false })\n eventPopover: CalendarEventPopoverProvider | null = null;\n\n private displayDate = new Date();\n private tooltipEl!: HTMLElement;\n private tooltipToken = 0;\n private tooltipBar: HTMLElement | null = null;\n private popoverEl!: HTMLElement;\n private popoverToken = 0;\n private popoverBar: HTMLElement | null = null;\n private boundPopoverEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && this.popoverBar) this.closeEventPopover();\n };\n private boundPopoverOutside = (e: MouseEvent) => {\n if (!this.popoverBar) return;\n if (e.composedPath().includes(this.popoverEl)) return;\n this.closeEventPopover({ returnFocus: false });\n };\n private container!: HTMLElement;\n private header!: HTMLElement;\n private grid!: HTMLElement;\n private dayCells: HTMLElement[] = [];\n private focusedDate: Date | null = null;\n\n private computeRovingIndex(days: Date[]): number {\n // Prefer: focused → selected → today → first in-month day\n const same = (a: Date, b: Date) =>\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate();\n\n if (this.focusedDate) {\n const idx = days.findIndex(d => same(d, this.focusedDate!));\n if (idx >= 0) return idx;\n }\n if (this.value) {\n const s = this.value instanceof Date ? this.value : new Date(this.value);\n if (!isNaN(s.getTime())) {\n const idx = days.findIndex(d => same(d, s));\n if (idx >= 0) return idx;\n }\n }\n const today = new Date();\n const tIdx = days.findIndex(d => same(d, today));\n if (tIdx >= 0) return tIdx;\n return days.findIndex(d => d.getMonth() === this.displayDate.getMonth());\n }\n\n private handleGridKeydown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement;\n const currentDate = (target as any).__date as Date | undefined;\n if (!currentDate) return;\n\n let delta: number | null = null;\n let monthStep: 1 | -1 | null = null;\n switch (e.key) {\n case 'ArrowLeft': delta = -1; break;\n case 'ArrowRight': delta = 1; break;\n case 'ArrowUp': delta = -7; break;\n case 'ArrowDown': delta = 7; break;\n case 'Home': delta = -currentDate.getDay(); break;\n case 'End': delta = 6 - currentDate.getDay(); break;\n case 'PageUp': monthStep = -1; break;\n case 'PageDown': monthStep = 1; break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n this.handleDayClick(currentDate);\n return;\n default: return;\n }\n e.preventDefault();\n const next = new Date(currentDate);\n if (delta !== null) next.setDate(currentDate.getDate() + delta);\n if (monthStep !== null) next.setMonth(currentDate.getMonth() + monthStep);\n\n // If moved outside the displayed month, navigate.\n if (next.getMonth() !== this.displayDate.getMonth() ||\n next.getFullYear() !== this.displayDate.getFullYear()) {\n this.displayDate = new Date(next.getFullYear(), next.getMonth(), 1);\n }\n this.focusedDate = next;\n this.updateView();\n // Move focus to the newly-selected cell after DOM update.\n const sameAs = (d: Date, e2: Date) =>\n d.getFullYear() === e2.getFullYear() &&\n d.getMonth() === e2.getMonth() &&\n d.getDate() === e2.getDate();\n requestAnimationFrame(() => {\n const cell = this.dayCells.find(c => sameAs((c as any).__date, next));\n cell?.focus();\n });\n };\n\n @dispatch('calendar-change', { bubbles: true, composed: true })\n private dispatchChange() {\n return { value: this.value, calendar: this };\n }\n\n @dispatch('calendar-event-click', { bubbles: true, composed: true })\n private dispatchEventClick(event: CalendarEvent) {\n return { event, calendar: this };\n }\n\n @dispatch('calendar-more-click', { bubbles: true, composed: true })\n private dispatchMoreClick(date: Date, count: number) {\n return { date, count, calendar: this };\n }\n\n @styles()\n styles() {\n return css/*css*/`${cssContent}`;\n }\n\n @ready()\n initialize() {\n this.createDOM();\n this.updateView();\n }\n\n private createDOM() {\n const shadow = this.shadowRoot!;\n\n // Create container\n this.container = document.createElement('div');\n this.container.className = `calendar calendar--${this.view}`;\n this.container.setAttribute('part', 'base');\n\n // Create header\n this.header = document.createElement('div');\n this.header.className = 'calendar__header';\n this.header.setAttribute('part', 'header');\n\n const title = document.createElement('div');\n title.className = 'calendar__title';\n\n const nav = document.createElement('div');\n nav.className = 'calendar__nav';\n\n const todayBtn = document.createElement('button');\n todayBtn.className = 'calendar__nav-button';\n todayBtn.textContent = 'Today';\n todayBtn.onclick = () => this.goToToday();\n\n const prevBtn = document.createElement('button');\n prevBtn.className = 'calendar__nav-button';\n prevBtn.textContent = '‹';\n prevBtn.onclick = () => this.previousMonth();\n\n const nextBtn = document.createElement('button');\n nextBtn.className = 'calendar__nav-button';\n nextBtn.textContent = '›';\n nextBtn.onclick = () => this.nextMonth();\n\n nav.appendChild(todayBtn);\n nav.appendChild(prevBtn);\n nav.appendChild(nextBtn);\n\n this.header.appendChild(title);\n this.header.appendChild(nav);\n\n // Create grid\n this.grid = document.createElement('div');\n this.grid.className = 'calendar__grid';\n this.grid.setAttribute('part', 'grid');\n\n // Add weekday headers. Every grid child gets an explicit position —\n // event stripe bars are placed explicitly, and mixing explicit items\n // with auto-flow would push auto-placed cells out of their slots.\n const weekdays = this.getWeekdays();\n weekdays.forEach((day, i) => {\n const weekdayEl = document.createElement('div');\n weekdayEl.className = 'calendar__weekday';\n weekdayEl.textContent = day;\n weekdayEl.style.gridRow = '1';\n weekdayEl.style.gridColumn = String(i + 1);\n this.grid.appendChild(weekdayEl);\n });\n\n // Mark grid for a11y\n this.grid.setAttribute('role', 'grid');\n this.grid.setAttribute('aria-label', 'Calendar');\n this.grid.addEventListener('keydown', this.handleGridKeydown);\n\n // Create 42 day cells\n for (let i = 0; i < 42; i++) {\n const dayCell = document.createElement('div');\n dayCell.className = 'calendar__day';\n dayCell.setAttribute('role', 'gridcell');\n // Roving tabindex: only one cell is tabbable at a time. Start by\n // making the first cell tabbable; updateView re-targets the focused\n // date so today/selected gets the 0.\n dayCell.setAttribute('tabindex', i === 0 ? '0' : '-1');\n\n dayCell.style.gridRow = String(Math.floor(i / 7) + 2);\n dayCell.style.gridColumn = String((i % 7) + 1);\n\n const dayNumber = document.createElement('div');\n dayNumber.className = 'calendar__day-number';\n dayCell.appendChild(dayNumber);\n\n this.grid.appendChild(dayCell);\n this.dayCells.push(dayCell);\n }\n\n // Shared tooltip overlay for event bars — one element, repositioned per\n // bar, so rich content can load lazily without a tooltip instance per bar.\n this.tooltipEl = document.createElement('div');\n this.tooltipEl.className = 'calendar__tooltip';\n this.tooltipEl.setAttribute('part', 'event-tooltip');\n this.tooltipEl.setAttribute('role', 'tooltip');\n this.tooltipEl.id = 'calendar-event-tooltip';\n this.tooltipEl.hidden = true;\n\n // Interactive click-to-open popover for event details. One shared panel,\n // anchored per bar; content may load lazily (provider or the\n // calendar/event-popover request channel).\n this.popoverEl = document.createElement('div');\n this.popoverEl.className = 'calendar__popover';\n this.popoverEl.setAttribute('part', 'event-popover');\n this.popoverEl.setAttribute('role', 'dialog');\n this.popoverEl.setAttribute('aria-label', 'Event details');\n this.popoverEl.tabIndex = -1;\n this.popoverEl.hidden = true;\n\n this.container.appendChild(this.header);\n this.container.appendChild(this.grid);\n this.container.appendChild(this.tooltipEl);\n this.container.appendChild(this.popoverEl);\n shadow.appendChild(this.container);\n }\n\n /**\n * Dynamic popover channel: yields `{ event }` so any\n * `@respond('calendar/event-popover')` controller can return the content.\n */\n @request('calendar/event-popover')\n private async *requestEventPopoverContent(event: CalendarEvent): any {\n return await (yield { event });\n }\n\n private async openEventPopover(bar: HTMLElement, event: CalendarEvent) {\n const token = ++this.popoverToken;\n this.hideEventTooltip();\n\n // Anchor + loading shell first, so slow content still feels responsive.\n this.popoverBar = bar;\n this.popoverEl.replaceChildren();\n const loading = document.createElement('div');\n loading.className = 'calendar__popover-loading';\n loading.textContent = 'Loading…';\n this.popoverEl.appendChild(loading);\n this.popoverEl.hidden = false;\n this.positionPopover(bar);\n document.addEventListener('keydown', this.boundPopoverEscape, true);\n document.addEventListener('mousedown', this.boundPopoverOutside, true);\n\n let content: string | Node | undefined;\n try {\n if (event.popover !== true && event.popover) {\n content = typeof event.popover === 'function' ? event.popover() : event.popover;\n } else if (this.eventPopover) {\n content = await this.eventPopover(event);\n } else {\n content = await this.requestEventPopoverContent(event);\n }\n } catch {\n // No responder discovered (or the provider failed) — close quietly.\n content = undefined;\n }\n\n if (token !== this.popoverToken) return; // closed (or replaced) meanwhile\n\n if (content == null) {\n console.warn(\n `[snice-calendar] event \"${String(event.id)}\" enables a popover but no content was provided — set eventPopover, event.popover content, or a @respond('calendar/event-popover') handler.`\n );\n this.closeEventPopover({ returnFocus: false });\n return;\n }\n\n if (typeof content === 'string') this.popoverEl.textContent = content;\n else this.popoverEl.replaceChildren(content);\n this.positionPopover(bar);\n this.popoverEl.focus();\n }\n\n private positionPopover(bar: HTMLElement) {\n const rect = bar.getBoundingClientRect();\n this.popoverEl.style.left = `${Math.max(4, rect.left)}px`;\n this.popoverEl.style.top = `${rect.bottom + 6}px`;\n }\n\n closeEventPopover(options: { returnFocus?: boolean } = {}): void {\n if (!this.popoverBar) return;\n this.popoverToken++;\n const bar = this.popoverBar;\n this.popoverBar = null;\n this.popoverEl.hidden = true;\n this.popoverEl.replaceChildren();\n document.removeEventListener('keydown', this.boundPopoverEscape, true);\n document.removeEventListener('mousedown', this.boundPopoverOutside, true);\n if (options.returnFocus !== false && bar.isConnected) bar.focus();\n }\n\n @dispose()\n cleanupPopover() {\n document.removeEventListener('keydown', this.boundPopoverEscape, true);\n document.removeEventListener('mousedown', this.boundPopoverOutside, true);\n }\n\n private async showEventTooltip(bar: HTMLElement, event: CalendarEvent) {\n const token = ++this.tooltipToken;\n const provider = this.eventTooltip;\n\n let content: string | Node | undefined;\n if (provider) {\n try {\n content = await provider(event);\n } catch {\n content = event.tooltip;\n }\n } else {\n content = event.tooltip;\n }\n\n // Pointer already left (or moved to another bar) while loading.\n if (token !== this.tooltipToken || content == null) return;\n\n if (typeof content === 'string') this.tooltipEl.textContent = content;\n else this.tooltipEl.replaceChildren(content);\n\n this.tooltipEl.hidden = false;\n this.tooltipBar = bar;\n bar.setAttribute('aria-describedby', this.tooltipEl.id);\n\n // Fixed positioning above the bar, clamped to the viewport.\n const rect = bar.getBoundingClientRect();\n this.tooltipEl.style.left = `${Math.max(4, rect.left)}px`;\n this.tooltipEl.style.top = `${Math.max(4, rect.top - this.tooltipEl.offsetHeight - 6)}px`;\n }\n\n private hideEventTooltip() {\n this.tooltipToken++;\n this.tooltipEl.hidden = true;\n this.tooltipBar?.removeAttribute('aria-describedby');\n this.tooltipBar = null;\n }\n\n private updateView() {\n // Update header title\n const monthName = this.displayDate.toLocaleDateString(this.locale, { month: 'long', year: 'numeric' });\n const titleEl = this.header.querySelector('.calendar__title') as HTMLElement;\n if (titleEl) titleEl.textContent = monthName;\n\n // Update day cells\n const days = this.getMonthDays();\n const currentMonth = this.displayDate.getMonth();\n\n // Resolve which cell should be tab-stoppable (roving tabindex).\n const rovingIndex = this.computeRovingIndex(days);\n\n days.forEach((date, i) => {\n const cell = this.dayCells[i];\n if (!cell) return;\n\n const isOtherMonth = date.getMonth() !== currentMonth;\n const isToday = this.highlightToday && this.isToday(date);\n // Display-only mode never shows a selection highlight.\n const isSelected = !this.noDaySelect && this.isSelected(date);\n const isDisabled = this.isDisabled(date);\n\n // Update classes (preserving role)\n cell.className = 'calendar__day';\n if (isOtherMonth) cell.classList.add('calendar__day--other-month');\n if (isToday) cell.classList.add('calendar__day--today');\n if (isSelected) cell.classList.add('calendar__day--selected');\n if (isDisabled) cell.classList.add('calendar__day--disabled');\n if (this.noDaySelect) cell.classList.add('calendar__day--static');\n if (this.cellSizing === 'stretch') cell.classList.add('calendar__day--stretch');\n\n cell.setAttribute('role', 'gridcell');\n cell.setAttribute('aria-selected', isSelected ? 'true' : 'false');\n cell.setAttribute('aria-disabled', isDisabled ? 'true' : 'false');\n cell.setAttribute('aria-current', isToday && !isOtherMonth ? 'date' : 'false');\n cell.setAttribute('tabindex', i === rovingIndex ? '0' : '-1');\n cell.setAttribute('aria-label', date.toLocaleDateString(this.locale, { dateStyle: 'full' }));\n (cell as any).__date = date;\n\n // Update day number\n const dayNumber = cell.querySelector('.calendar__day-number') as HTMLElement;\n if (dayNumber) dayNumber.textContent = String(date.getDate());\n\n // Update click handler\n cell.onclick = () => this.handleDayClick(date);\n });\n\n this.renderEventStripes(days);\n }\n\n /** Visible stacking depth for event stripes; deeper lanes collapse into a\n * per-day \"+N more\" chip. */\n private static readonly MAX_EVENT_LANES = 3;\n\n /**\n * Render events as continuous stripes: one bar per (event × week row),\n * spanning the event's days in that week and chopped at week boundaries\n * with continues-left/right styling. Overlapping events stack into lanes\n * per week — earlier start first, longer event first on ties — like\n * professional calendars.\n */\n private renderEventStripes(days: Date[]) {\n this.closeEventPopover({ returnFocus: false }); // anchors are re-created\n this.grid.querySelectorAll('.calendar__event-bar').forEach(el => el.remove());\n this.dayCells.forEach(cell => {\n cell.querySelector('.calendar__more')?.remove();\n cell.style.removeProperty('--calendar-week-lanes');\n cell.style.removeProperty('--calendar-week-more');\n });\n\n if (!this.events || this.events.length === 0) return;\n\n // Local-midnight timestamps for the visible grid; events normalize to the\n // same construction so lookups are exact (and DST-safe).\n const dayTimes = days.map(d => new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime());\n const dayIndex = new Map<number, number>(dayTimes.map((t, i) => [t, i]));\n const gridStart = dayTimes[0];\n const gridEnd = dayTimes[dayTimes.length - 1];\n\n const normalize = (d: Date | string): number => {\n const date = typeof d === 'string' ? new Date(d) : d;\n return new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();\n };\n\n type Segmentable = {\n event: CalendarEvent;\n startIdx: number;\n endIdx: number;\n startsBeforeGrid: boolean;\n endsAfterGrid: boolean;\n startTime: number;\n duration: number;\n order: number;\n };\n\n const resolved: Segmentable[] = [];\n this.events.forEach((event, order) => {\n if (!event.start) return;\n const startTime = normalize(event.start);\n if (isNaN(startTime)) return;\n const endTime = event.end ? Math.max(normalize(event.end), startTime) : startTime;\n if (isNaN(endTime) || endTime < gridStart || startTime > gridEnd) return;\n\n const startsBeforeGrid = startTime < gridStart;\n const endsAfterGrid = endTime > gridEnd;\n const startIdx = startsBeforeGrid ? 0 : dayIndex.get(startTime)!;\n const endIdx = endsAfterGrid ? dayTimes.length - 1 : dayIndex.get(endTime)!;\n resolved.push({\n event, startIdx, endIdx, startsBeforeGrid, endsAfterGrid,\n startTime, duration: endTime - startTime, order,\n });\n });\n\n resolved.sort((a, b) =>\n a.startTime - b.startTime || b.duration - a.duration || a.order - b.order);\n\n const hiddenPerDay = new Array(dayTimes.length).fill(0);\n const weekCount = Math.floor(dayTimes.length / 7);\n const weekLaneCounts = new Array(weekCount).fill(0);\n\n for (let week = 0; week < weekCount; week++) {\n const weekStart = week * 7;\n const weekEnd = weekStart + 6;\n // lanes[lane] holds the occupied [startCol, endCol] ranges in this week.\n const lanes: Array<Array<[number, number]>> = [];\n\n for (const item of resolved) {\n if (item.endIdx < weekStart || item.startIdx > weekEnd) continue;\n\n const segStart = Math.max(item.startIdx, weekStart);\n const segEnd = Math.min(item.endIdx, weekEnd);\n const startCol = segStart - weekStart;\n const endCol = segEnd - weekStart;\n\n let lane = 0;\n while (lanes[lane]?.some(([s, e]) => startCol <= e && endCol >= s)) lane++;\n (lanes[lane] ??= []).push([startCol, endCol]);\n weekLaneCounts[week] = Math.min(\n Math.max(weekLaneCounts[week], lane + 1), SniceCalendar.MAX_EVENT_LANES);\n\n if (lane >= SniceCalendar.MAX_EVENT_LANES) {\n for (let i = segStart; i <= segEnd; i++) hiddenPerDay[i]++;\n continue;\n }\n\n const continuesLeft = segStart > item.startIdx\n || (segStart === item.startIdx && item.startsBeforeGrid);\n const continuesRight = segEnd < item.endIdx\n || (segEnd === item.endIdx && item.endsAfterGrid);\n\n const bar = document.createElement('div');\n bar.className = 'calendar__event-bar';\n if (continuesLeft) bar.classList.add('calendar__event-bar--continues-left');\n if (continuesRight) bar.classList.add('calendar__event-bar--continues-right');\n\n // A custom className rides along on both the class list and the part\n // attribute, so events are styleable from outside via\n // ::part(<className>).\n const customClasses = item.event.className\n ? item.event.className.split(/\\s+/).filter(Boolean)\n : [];\n bar.classList.add(...customClasses);\n bar.setAttribute('part', ['event-bar', ...customClasses].join(' '));\n\n bar.setAttribute('data-event-id', String(item.event.id));\n bar.setAttribute('data-lane', String(lane));\n bar.style.gridRow = String(week + 2); // row 1 is the weekday header\n bar.style.gridColumn = `${startCol + 1} / ${endCol + 2}`;\n bar.style.setProperty('--calendar-event-lane', String(lane));\n if (item.event.color) bar.style.background = item.event.color;\n\n if (item.event.avatar) {\n const spec = typeof item.event.avatar === 'string'\n ? { src: item.event.avatar }\n : item.event.avatar;\n const avatar = document.createElement('snice-avatar') as any;\n avatar.className = 'calendar__event-avatar';\n avatar.setAttribute('part', 'event-avatar');\n // Attributes, not property assignments: the avatar's shape/size CSS\n // matches on :host([shape])/:host([size]) attribute selectors.\n avatar.setAttribute('size', 'xs');\n avatar.setAttribute('shape', 'circle');\n // Tiny thumbnail — eager: lazy-load buys nothing at this size and\n // stalls on very tall pages.\n avatar.setAttribute('loading', 'eager');\n if (spec.src) avatar.src = spec.src;\n if (spec.name) avatar.name = spec.name;\n if (spec.alt) avatar.alt = spec.alt;\n bar.appendChild(avatar);\n }\n const titleEl = document.createElement('span');\n titleEl.className = 'calendar__event-title';\n titleEl.textContent = item.event.title;\n bar.appendChild(titleEl);\n\n // Tooltip: static string, or lazy/rich content from eventTooltip.\n // The native title attribute stays only when no tooltip is configured.\n if (item.event.tooltip || this.eventTooltip) {\n bar.onmouseenter = () => this.showEventTooltip(bar, item.event);\n bar.onmouseleave = () => this.hideEventTooltip();\n } else {\n bar.title = item.event.title;\n }\n\n // Popover: strictly per-event opt-in — without `popover`, a click\n // only dispatches calendar-event-click and no request is issued.\n if (item.event.popover) {\n bar.setAttribute('role', 'button');\n bar.setAttribute('tabindex', '0');\n bar.setAttribute('aria-haspopup', 'dialog');\n bar.onkeydown = (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n this.openEventPopover(bar, item.event);\n }\n };\n bar.onclick = (e) => {\n this.handleEventClick(item.event, e);\n this.openEventPopover(bar, item.event);\n };\n } else {\n bar.onclick = (e) => this.handleEventClick(item.event, e);\n }\n this.grid.appendChild(bar);\n }\n }\n\n hiddenPerDay.forEach((count, i) => {\n if (count === 0) return;\n const cell = this.dayCells[i];\n if (!cell) return;\n const date = days[i];\n const more = document.createElement('div');\n more.className = 'calendar__more';\n more.setAttribute('part', 'more-chip');\n more.textContent = `+${count} more`;\n // The chip is its own control: it reports its day and hidden count, and\n // its clicks never fall through to the day cell's selection handler.\n more.setAttribute('role', 'button');\n more.setAttribute('tabindex', '0');\n more.setAttribute('aria-label',\n `${count} more event${count === 1 ? '' : 's'} on ${date.toLocaleDateString(this.locale, { dateStyle: 'full' })}`);\n more.onclick = (e) => this.handleMoreClick(date, count, e);\n more.onkeydown = (e) => {\n if (e.key !== 'Enter' && e.key !== ' ') return;\n e.preventDefault();\n this.handleMoreClick(date, count, e);\n };\n cell.appendChild(more);\n });\n\n // Reserve row height for the lane stack (and the \"+N more\" chip) so\n // stripes never spill past their week row — every cell in a week shares\n // the reservation, since the grid row is as tall as its tallest cell.\n for (let week = 0; week < weekCount; week++) {\n if (weekLaneCounts[week] === 0) continue;\n const weekHasMore = hiddenPerDay\n .slice(week * 7, week * 7 + 7).some(count => count > 0);\n for (let i = week * 7; i < week * 7 + 7; i++) {\n const cell = this.dayCells[i];\n if (!cell) continue;\n cell.style.setProperty('--calendar-week-lanes', String(weekLaneCounts[week]));\n if (weekHasMore) cell.style.setProperty('--calendar-week-more', '1rem');\n }\n }\n }\n\n goToToday(): void {\n this.displayDate = new Date();\n this.value = new Date();\n this.updateView();\n this.dispatchChange();\n }\n\n goToDate(date: Date | string): void {\n this.displayDate = typeof date === 'string' ? new Date(date) : date;\n this.value = this.displayDate;\n this.updateView();\n this.dispatchChange();\n }\n\n previousMonth(): void {\n this.displayDate = new Date(this.displayDate.getFullYear(), this.displayDate.getMonth() - 1);\n this.updateView();\n }\n\n nextMonth(): void {\n this.displayDate = new Date(this.displayDate.getFullYear(), this.displayDate.getMonth() + 1);\n this.updateView();\n }\n\n previousWeek(): void {\n this.displayDate = new Date(this.displayDate.getTime() - 7 * 24 * 60 * 60 * 1000);\n this.updateView();\n }\n\n nextWeek(): void {\n this.displayDate = new Date(this.displayDate.getTime() + 7 * 24 * 60 * 60 * 1000);\n this.updateView();\n }\n\n previousDay(): void {\n this.displayDate = new Date(this.displayDate.getTime() - 24 * 60 * 60 * 1000);\n this.updateView();\n }\n\n nextDay(): void {\n this.displayDate = new Date(this.displayDate.getTime() + 24 * 60 * 60 * 1000);\n this.updateView();\n }\n\n getDisplayedMonth(): { month: number; year: number } {\n return {\n month: this.displayDate.getMonth(),\n year: this.displayDate.getFullYear()\n };\n }\n\n getEventsForDate(date: Date | string): CalendarEvent[] {\n const targetDate = typeof date === 'string' ? new Date(date) : date;\n const targetTime = targetDate.getTime();\n\n return this.events.filter(event => {\n if (!event.start) return false;\n\n const startDate = typeof event.start === 'string' ? new Date(event.start) : event.start;\n const startTime = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate()).getTime();\n\n // If no end date, event is single day\n if (!event.end) {\n return this.isSameDay(targetDate, startDate);\n }\n\n // Multi-day event: check if target date falls between start and end\n const endDate = typeof event.end === 'string' ? new Date(event.end) : event.end;\n const endTime = new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate()).getTime();\n\n return targetTime >= startTime && targetTime <= endTime;\n });\n }\n\n private formatDate(date: Date): string {\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n }\n\n private isSameDay(date1: Date, date2: Date): boolean {\n return this.formatDate(date1) === this.formatDate(date2);\n }\n\n private isToday(date: Date): boolean {\n return this.isSameDay(date, new Date());\n }\n\n private isSelected(date: Date): boolean {\n const valueDate = typeof this.value === 'string' ? new Date(this.value) : this.value;\n return this.isSameDay(date, valueDate);\n }\n\n private isDisabled(date: Date): boolean {\n if (this.minDate) {\n const min = typeof this.minDate === 'string' ? new Date(this.minDate) : this.minDate;\n if (date < min) return true;\n }\n\n if (this.maxDate) {\n const max = typeof this.maxDate === 'string' ? new Date(this.maxDate) : this.maxDate;\n if (date > max) return true;\n }\n\n return this.disabledDates.some(d => {\n const disabledDate = typeof d === 'string' ? new Date(d) : d;\n return this.isSameDay(date, disabledDate);\n });\n }\n\n private handleDayClick(date: Date) {\n // Display-only calendars: days are not selectable at all.\n if (this.noDaySelect) return;\n if (this.isDisabled(date)) return;\n\n this.value = date;\n this.updateView();\n this.dispatchChange();\n }\n\n private handleEventClick(event: CalendarEvent, e: Event) {\n e.stopPropagation();\n this.dispatchEventClick(event);\n }\n\n private handleMoreClick(date: Date, count: number, e: Event) {\n e.stopPropagation();\n this.dispatchMoreClick(date, count);\n }\n\n private getMonthDays(): Date[] {\n const year = this.displayDate.getFullYear();\n const month = this.displayDate.getMonth();\n\n // First day of the month\n const firstDay = new Date(year, month, 1);\n const firstDayOfWeek = firstDay.getDay();\n\n // Adjust for first day of week setting\n const daysToSubtract = (firstDayOfWeek - this.firstDayOfWeek + 7) % 7;\n const startDate = new Date(year, month, 1 - daysToSubtract);\n\n // Generate 42 days (6 weeks)\n const days: Date[] = [];\n for (let i = 0; i < 42; i++) {\n days.push(new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + i));\n }\n\n return days;\n }\n\n private getWeekdays(): string[] {\n const weekdays = [];\n const baseDate = new Date(2024, 0, this.firstDayOfWeek); // Start from a Sunday\n\n for (let i = 0; i < 7; i++) {\n const date = new Date(baseDate);\n date.setDate(baseDate.getDate() + i);\n weekdays.push(date.toLocaleDateString(this.locale, { weekday: 'short' }));\n }\n\n return weekdays;\n }\n\n @watch('value')\n @watch('events')\n @watch('eventTooltip')\n @watch('noDaySelect')\n @watch('cellSizing')\n handlePropertyChange() {\n if (this.grid) {\n this.updateView();\n }\n }\n\n @watch('locale')\n @watch('firstDayOfWeek')\n handleWeekdayInputsChange() {\n if (!this.grid) return;\n // Rebuild the weekday header row so the new locale / start-of-week is reflected.\n const existing = this.grid.querySelectorAll('.calendar__weekday');\n existing.forEach(el => el.remove());\n const weekdays = this.getWeekdays();\n weekdays.forEach((day, i) => {\n const weekdayEl = document.createElement('div');\n weekdayEl.className = 'calendar__weekday';\n weekdayEl.textContent = day;\n weekdayEl.style.gridRow = '1';\n weekdayEl.style.gridColumn = String(i + 1);\n // Insert before the first day cell so header row stays at the top\n this.grid.insertBefore(weekdayEl, this.grid.children[i] || null);\n });\n this.updateView();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'snice-calendar': SniceCalendar;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snice-calendar.js","sources":["../../../components/calendar/snice-calendar.css?inline","../../../../components/calendar/snice-calendar.ts"],"sourcesContent":["export default \":host([hidden]){display:none}:host{display:block;font-family:var(--snice-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif);contain:layout style}:host([overlay-open]){position:relative;z-index:var(--snice-z-floating,1000)}.calendar{width:100%;max-width:37.5rem;position:relative;height:100%;display:flex;flex-direction:column}.calendar__header{font-family:var(--snice-font-family-display, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif);display:flex;align-items:center;justify-content:space-between;padding:var(--snice-spacing-md,1rem);background:var(--snice-color-surface,rgb(255 255 255));border-bottom:1px solid var(--snice-color-border,rgb(226 226 226))}.calendar__title{font-family:var(--snice-font-family-display, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif);font-size:var(--snice-heading-md, 1.125rem);font-weight:var(--snice-font-weight-semibold,600);color:var(--snice-color-text,rgb(23 23 23))}.calendar__nav{display:flex;gap:var(--snice-spacing-xs,.5rem)}.calendar__nav-button{padding:var(--snice-spacing-xs,.5rem) var(--snice-spacing-sm,.75rem);border:1px solid var(--snice-color-border,rgb(226 226 226));background:var(--snice-color-surface,rgb(255 255 255));border-radius:var(--snice-border-radius-md,.25rem);cursor:pointer;transition:background-color var(--snice-transition-fast, 150ms) ease,border-color var(--snice-transition-fast, 150ms) ease;font-size:var(--snice-font-size-sm, .875rem);color:var(--snice-color-text,rgb(23 23 23));font-family:inherit}.calendar__nav-button:hover{background:var(--snice-color-surface-container-low,rgb(250 250 250));border-color:var(--snice-color-border-hover,rgb(204 204 204))}.calendar__nav-button:focus-visible{outline:0;box-shadow:0 0 0 var(--snice-focus-ring-width,2px) var(--snice-focus-ring-color,rgb(59 130 246 / .5))}.calendar__grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));grid-template-rows:min-content repeat(6,var(--calendar-row-cap,auto));flex:1 1 auto;position:relative;background:var(--snice-color-surface,rgb(255 255 255));container-type:inline-size}.calendar__weekday{box-sizing:border-box;min-width:0;overflow:hidden;padding:var(--snice-spacing-sm,.75rem);text-align:center;font-size:var(--snice-font-size-xs, .75rem);font-weight:var(--snice-font-weight-semibold,600);color:var(--snice-color-text-secondary,rgb(82 82 82));text-transform:uppercase;letter-spacing:var(--snice-tracking-widest, .1em);border-bottom:1px solid var(--snice-color-border,rgb(226 226 226))}.calendar__day{box-sizing:border-box;min-width:0;min-height:min(max(calc(100cqw / 7),3rem,calc(2.125rem + var(--calendar-week-lanes,0) * 1.375rem + var(--calendar-week-more,0rem))),var(--calendar-row-cap,100000px));padding:var(--snice-spacing-xs,.5rem);border:1px solid var(--snice-color-border,rgb(226 226 226));border-top:none;border-left:none;cursor:pointer;transition:background-color var(--snice-transition-fast, 150ms) ease;position:relative;background:var(--snice-color-surface,rgb(255 255 255));color:var(--snice-color-text,rgb(23 23 23));overflow:hidden}.calendar__day:hover{background:var(--snice-color-surface-container-low,rgb(250 250 250))}.calendar__day:focus-visible{outline:0;box-shadow:inset 0 0 0 2px var(--snice-focus-ring-color,rgb(59 130 246 / .5))}.calendar__day--week-start{border-left:1px solid var(--snice-color-border,rgb(226 226 226))}.calendar--week-numbers .calendar__day--week-start{border-left:none}.calendar__day--stretch{min-height:min(max(3rem,calc(2.125rem + var(--calendar-week-lanes,0) * 1.375rem + var(--calendar-week-more,0rem))),var(--calendar-row-cap,100000px))}.calendar__day--static{cursor:default}.calendar__day--static:hover{background:var(--snice-color-surface,rgb(255 255 255))}.calendar__day--static.calendar__day--today:hover{background:var(--snice-color-primary-subtle,rgb(239 246 255))}.calendar__day--other-month{background:var(--snice-color-surface,rgb(255 255 255));color:var(--snice-color-text-tertiary,rgb(115 115 115));opacity:.5}.calendar__day--other-month:hover{opacity:.7}.calendar__day--today{background:var(--snice-color-primary-subtle,rgb(239 246 255))}.calendar__day--today:hover{background:var(--snice-color-primary-subtle-hover,rgb(219 234 254))}.calendar__day--selected{background:var(--snice-color-primary,rgb(37 99 235));color:var(--snice-color-text-inverse,rgb(250 250 250))}.calendar__day--selected:hover{background:var(--snice-color-primary-hover,rgb(29 78 216))}.calendar__day--disabled{background:var(--snice-color-surface-container,rgb(241 241 241));color:var(--snice-color-text-tertiary,rgb(115 115 115));opacity:.5;cursor:not-allowed}.calendar__day--disabled:hover{background:var(--snice-color-surface-container,rgb(241 241 241))}.calendar__day-number{font-size:var(--snice-font-size-sm, .875rem);font-weight:var(--snice-font-weight-medium,500);margin-bottom:var(--snice-spacing-2xs,.25rem)}.calendar__day--selected .calendar__day-number{color:var(--snice-color-text-inverse,rgb(250 250 250))}.calendar__event-bar{display:flex;align-items:center;gap:var(--snice-spacing-3xs,.125rem);position:absolute;inset:0 0 auto 0;margin-top:calc(1.875rem + var(--calendar-event-lane,0) * 1.375rem);margin-inline:var(--snice-spacing-3xs,0.125rem);height:1.125rem;line-height:1.125rem;font-size:var(--snice-font-size-2xs, .625rem);padding:0 var(--snice-spacing-2xs,.25rem);border-radius:var(--snice-border-radius-sm,.125rem);background:var(--snice-color-primary,rgb(37 99 235));color:var(--snice-color-text-inverse,rgb(250 250 250));white-space:nowrap;overflow:hidden;cursor:pointer;z-index:1;transition:opacity var(--snice-transition-fast, 150ms) ease}.calendar__event-bar--compact{padding-inline:var(--snice-spacing-3xs,0.125rem)}.calendar__event-title{overflow:hidden;text-overflow:ellipsis;min-width:0}.calendar__event-avatar{flex:none;--avatar-size:0.875rem;font-size:.375rem;border-radius:50%;overflow:hidden}.calendar__popover{position:absolute;z-index:var(--snice-z-floating,1000);min-width:14rem;max-width:22rem;padding:var(--snice-spacing-sm,.75rem);border:1px solid var(--snice-color-border,rgb(226 226 226));border-radius:var(--snice-border-radius-md,.25rem);background:var(--snice-color-surface,rgb(255 255 255));color:var(--snice-color-text,rgb(23 23 23));font-size:var(--snice-font-size-sm, .875rem);line-height:1.5;box-shadow:var(--snice-shadow-lg,0 10px 15px -3px rgb(0 0 0 / .1))}.calendar__popover:focus-visible{outline:0;box-shadow:var(--snice-shadow-lg,0 10px 15px -3px rgb(0 0 0 / .1)),0 0 0 var(--snice-focus-ring-width,2px) var(--snice-focus-ring-color,rgb(59 130 246 / .5))}.calendar__popover-loading{color:var(--snice-color-text-secondary,rgb(82 82 82));font-size:var(--snice-font-size-xs, .75rem)}.calendar__more-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--snice-spacing-3xs,.125rem);max-height:15rem;overflow-y:auto}.calendar__more-item{display:flex;align-items:center;gap:var(--snice-spacing-xs,.5rem);width:100%;padding:var(--snice-spacing-2xs,.25rem) var(--snice-spacing-xs,.5rem);border:none;border-radius:var(--snice-border-radius-sm,.125rem);background:0 0;color:var(--snice-color-text,rgb(23 23 23));font-family:inherit;font-size:var(--snice-font-size-sm, .875rem);text-align:start;cursor:pointer;transition:background-color var(--snice-transition-fast, 150ms) ease}.calendar__more-item:hover{background:var(--snice-color-surface-container-low,rgb(250 250 250))}.calendar__more-item:focus-visible{outline:0;box-shadow:0 0 0 var(--snice-focus-ring-width,2px) var(--snice-focus-ring-color,rgb(59 130 246 / .5))}.calendar__more-dot{flex:none;width:.5rem;height:.5rem;border-radius:50%;background:var(--snice-color-primary,rgb(37 99 235))}.calendar__more-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.calendar__more-date{margin:0 0 var(--snice-spacing-2xs,.25rem);font-size:var(--snice-font-size-xs, .75rem);font-weight:var(--snice-font-weight-semibold,600);color:var(--snice-color-text-secondary,rgb(82 82 82))}.calendar__tooltip{position:absolute;z-index:var(--snice-z-floating,1000);max-width:18rem;padding:var(--snice-spacing-2xs,.25rem) var(--snice-spacing-xs,.5rem);border-radius:var(--snice-border-radius-md,.25rem);background:var(--snice-tooltip-bg,rgb(51 51 51));color:var(--snice-tooltip-color,rgb(255 255 255));font-size:var(--snice-font-size-xs, .75rem);line-height:1.4;box-shadow:var(--snice-shadow-md,0 4px 6px -1px rgb(0 0 0 / .1));pointer-events:none}.calendar__event-bar:hover{opacity:.8}.calendar__event-bar--continues-left{border-top-left-radius:0;border-bottom-left-radius:0;margin-inline-start:0}.calendar__event-bar--continues-right{border-top-right-radius:0;border-bottom-right-radius:0;margin-inline-end:0}.calendar__more{position:absolute;bottom:var(--snice-spacing-3xs,.125rem);left:var(--snice-spacing-2xs,.25rem);font-size:var(--snice-font-size-xs, .75rem);font-weight:var(--snice-font-weight-medium,500);color:var(--snice-color-text,rgb(23 23 23));cursor:pointer}.calendar__more:hover{text-decoration:underline}.calendar__more:focus-visible{outline:0;box-shadow:0 0 0 var(--snice-focus-ring-width,2px) var(--snice-focus-ring-color,rgb(59 130 246 / .5))}.calendar--week-numbers .calendar__grid{grid-template-columns:var(--calendar-week-number-width,2.25rem) repeat(7,minmax(0,1fr))}.calendar--week-numbers .calendar__weekday{padding-inline:var(--snice-spacing-2xs,0.25rem)}.calendar--week-numbers .calendar__day{min-height:min(max(calc((100cqw - var(--calendar-week-number-width,2.25rem))/ 7),3rem,calc(2.125rem + var(--calendar-week-lanes,0) * 1.375rem + var(--calendar-week-more,0rem))),var(--calendar-row-cap,100000px))}.calendar__week-number{box-sizing:border-box;display:flex;align-items:flex-start;justify-content:center;padding:var(--snice-spacing-xs,.5rem) var(--snice-spacing-2xs,.25rem);text-align:center;font-size:var(--snice-font-size-xs, .75rem);font-variant-numeric:tabular-nums;color:var(--snice-color-text-tertiary,rgb(115 115 115));background:var(--snice-color-surface-container-low,rgb(250 250 250));border:1px solid var(--snice-color-border,rgb(226 226 226));border-top:none}.calendar__week-number--header{background:var(--snice-color-surface,rgb(255 255 255));border:none;border-bottom:1px solid var(--snice-color-border,rgb(226 226 226))}.calendar--week .calendar__grid{grid-template-columns:repeat(7,1fr)}.calendar--week .calendar__day{min-height:7.5rem}.calendar--day .calendar__grid{grid-template-columns:1fr}.calendar--day .calendar__day{min-height:25rem}@media (prefers-reduced-motion:reduce){*{transition-duration:0s!important;animation-duration:0s!important}}\";","import { element, property, styles, dispatch, ready, watch, observe, css, request, dispose } from 'snice';\nimport '../avatar/snice-avatar';\nimport type {\n SniceCalendarElement, CalendarView, CalendarEvent, CalendarEventTooltip,\n CalendarEventPopoverProvider,\n} from './snice-calendar.types';\nimport cssContent from './snice-calendar.css?inline';\n\n@element('snice-calendar')\nexport class SniceCalendar extends HTMLElement implements SniceCalendarElement {\n /**\n * The selected day, or `null` for \"nothing selected yet\" — the state a\n * calendar starts in. A default of today would paint the selected\n * background over today's own highlight, making `highlight-today` invisible\n * and announcing `aria-selected` for a choice the user never made.\n */\n @property({ type: Date })\n value: Date | string | null = null;\n\n @property({ attribute: 'view' })\n view: CalendarView = 'month';\n\n @property({ type: Array, attribute: false })\n events: CalendarEvent[] = [];\n\n @property({ type: Date, attribute: 'min-date' })\n minDate: Date | string = '';\n\n @property({ type: Date, attribute: 'max-date' })\n maxDate: Date | string = '';\n\n @property({ type: Array, attribute: false })\n disabledDates: (Date | string)[] = [];\n\n @property({ type: Boolean, attribute: 'highlight-today' })\n highlightToday = true;\n\n @property({ type: Boolean, attribute: 'show-week-numbers' })\n showWeekNumbers = false;\n\n @property({ type: Number, attribute: 'first-day-of-week' })\n firstDayOfWeek = 0; // 0 = Sunday, 1 = Monday\n\n @property({ attribute: 'locale' })\n locale = 'en-US';\n\n @property({ type: Boolean, attribute: 'no-day-select' })\n noDaySelect = false;\n\n @property({ attribute: 'cell-sizing' })\n cellSizing: 'square' | 'stretch' = 'square';\n\n @property({ attribute: false })\n eventTooltip: CalendarEventTooltip | null = null;\n\n @property({ attribute: false })\n eventPopover: CalendarEventPopoverProvider | null = null;\n\n private displayDate = new Date();\n private tooltipEl!: HTMLElement;\n private tooltipToken = 0;\n private tooltipBar: HTMLElement | null = null;\n private popoverEl!: HTMLElement;\n private popoverToken = 0;\n private popoverBar: HTMLElement | null = null;\n private boundPopoverEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && this.popoverBar) this.closeEventPopover();\n };\n private boundPopoverOutside = (e: MouseEvent) => {\n if (!this.popoverBar) return;\n if (e.composedPath().includes(this.popoverEl)) return;\n this.closeEventPopover({ returnFocus: false });\n };\n private container!: HTMLElement;\n private header!: HTMLElement;\n private grid!: HTMLElement;\n private dayCells: HTMLElement[] = [];\n private weekNumberHeader!: HTMLElement;\n private weekNumberCells: HTMLElement[] = [];\n private focusedDate: Date | null = null;\n\n /**\n * Columns the day grid is shifted by. The week-number column occupies the\n * grid's first column, so every explicitly-placed child — weekday headers,\n * day cells, event stripes — moves one column right while it is shown.\n */\n private get columnOffset(): number {\n return this.showWeekNumbers ? 1 : 0;\n }\n\n private computeRovingIndex(days: Date[]): number {\n // Prefer: focused → selected → today → first in-month day\n const same = (a: Date, b: Date) =>\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate();\n\n if (this.focusedDate) {\n const idx = days.findIndex(d => same(d, this.focusedDate!));\n if (idx >= 0) return idx;\n }\n if (this.value) {\n const s = this.value instanceof Date ? this.value : new Date(this.value);\n if (!isNaN(s.getTime())) {\n const idx = days.findIndex(d => same(d, s));\n if (idx >= 0) return idx;\n }\n }\n const today = new Date();\n const tIdx = days.findIndex(d => same(d, today));\n if (tIdx >= 0) return tIdx;\n return days.findIndex(d => d.getMonth() === this.displayDate.getMonth());\n }\n\n private handleGridKeydown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement;\n const currentDate = (target as any).__date as Date | undefined;\n if (!currentDate) return;\n\n let delta: number | null = null;\n let monthStep: 1 | -1 | null = null;\n switch (e.key) {\n case 'ArrowLeft': delta = -1; break;\n case 'ArrowRight': delta = 1; break;\n case 'ArrowUp': delta = -7; break;\n case 'ArrowDown': delta = 7; break;\n case 'Home': delta = -currentDate.getDay(); break;\n case 'End': delta = 6 - currentDate.getDay(); break;\n case 'PageUp': monthStep = -1; break;\n case 'PageDown': monthStep = 1; break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n this.handleDayClick(currentDate);\n return;\n default: return;\n }\n e.preventDefault();\n const next = new Date(currentDate);\n if (delta !== null) next.setDate(currentDate.getDate() + delta);\n if (monthStep !== null) next.setMonth(currentDate.getMonth() + monthStep);\n\n // If moved outside the displayed month, navigate.\n if (next.getMonth() !== this.displayDate.getMonth() ||\n next.getFullYear() !== this.displayDate.getFullYear()) {\n this.displayDate = new Date(next.getFullYear(), next.getMonth(), 1);\n }\n this.focusedDate = next;\n this.updateView();\n // Move focus to the newly-selected cell after DOM update.\n const sameAs = (d: Date, e2: Date) =>\n d.getFullYear() === e2.getFullYear() &&\n d.getMonth() === e2.getMonth() &&\n d.getDate() === e2.getDate();\n requestAnimationFrame(() => {\n const cell = this.dayCells.find(c => sameAs((c as any).__date, next));\n cell?.focus();\n });\n };\n\n @dispatch('calendar-change', { bubbles: true, composed: true })\n private dispatchChange() {\n return { value: this.value, calendar: this };\n }\n\n @dispatch('calendar-event-click', { bubbles: true, composed: true })\n private dispatchEventClick(event: CalendarEvent) {\n return { event, calendar: this };\n }\n\n /**\n * `calendar-more-click` carries a default action (the built-in day panel),\n * so it is cancelable and the component has to read the result of the\n * dispatch. `@dispatch` accepts `cancelable` — it is EventInit passthrough —\n * but the decorated method returns the detail, not `dispatchEvent`'s\n * boolean, so a cancelable default action cannot be observed through it.\n * Dispatched by hand for that reason, the same way `snice-link`'s `navigate`\n * and `snice-stepper`'s `step-change` are.\n *\n * @returns `false` when a listener called `preventDefault()`.\n */\n private dispatchMoreClick(date: Date, count: number): boolean {\n return this.dispatchEvent(new CustomEvent('calendar-more-click', {\n detail: { date, count, calendar: this },\n bubbles: true,\n composed: true,\n cancelable: true,\n }));\n }\n\n @styles()\n styles() {\n return css/*css*/`${cssContent}`;\n }\n\n @ready()\n initialize() {\n this.createDOM();\n this.updateView();\n }\n\n private createDOM() {\n const shadow = this.shadowRoot!;\n\n // Create container\n this.container = document.createElement('div');\n this.container.className = `calendar calendar--${this.view}`;\n this.container.setAttribute('part', 'base');\n\n // Create header\n this.header = document.createElement('div');\n this.header.className = 'calendar__header';\n this.header.setAttribute('part', 'header');\n\n const title = document.createElement('div');\n title.className = 'calendar__title';\n\n const nav = document.createElement('div');\n nav.className = 'calendar__nav';\n\n const todayBtn = document.createElement('button');\n todayBtn.className = 'calendar__nav-button';\n todayBtn.textContent = 'Today';\n todayBtn.onclick = () => this.goToToday();\n\n const prevBtn = document.createElement('button');\n prevBtn.className = 'calendar__nav-button';\n prevBtn.textContent = '‹';\n prevBtn.onclick = () => this.previousMonth();\n\n const nextBtn = document.createElement('button');\n nextBtn.className = 'calendar__nav-button';\n nextBtn.textContent = '›';\n nextBtn.onclick = () => this.nextMonth();\n\n nav.appendChild(todayBtn);\n nav.appendChild(prevBtn);\n nav.appendChild(nextBtn);\n\n this.header.appendChild(title);\n this.header.appendChild(nav);\n\n // Create grid\n this.grid = document.createElement('div');\n this.grid.className = 'calendar__grid';\n this.grid.setAttribute('part', 'grid');\n\n // Add weekday headers. Every grid child gets an explicit position —\n // event stripe bars are placed explicitly, and mixing explicit items\n // with auto-flow would push auto-placed cells out of their slots.\n const weekdays = this.getWeekdays();\n weekdays.forEach((day, i) => {\n const weekdayEl = document.createElement('div');\n weekdayEl.className = 'calendar__weekday';\n weekdayEl.textContent = day;\n weekdayEl.style.gridRow = '1';\n weekdayEl.style.gridColumn = String(i + 1 + this.columnOffset);\n this.grid.appendChild(weekdayEl);\n });\n\n // Mark grid for a11y\n this.grid.setAttribute('role', 'grid');\n this.grid.setAttribute('aria-label', 'Calendar');\n this.grid.addEventListener('keydown', this.handleGridKeydown);\n\n // Create 42 day cells\n for (let i = 0; i < 42; i++) {\n const dayCell = document.createElement('div');\n dayCell.className = 'calendar__day';\n dayCell.setAttribute('role', 'gridcell');\n // Roving tabindex: only one cell is tabbable at a time. Start by\n // making the first cell tabbable; updateView re-targets the focused\n // date so today/selected gets the 0.\n dayCell.setAttribute('tabindex', i === 0 ? '0' : '-1');\n\n dayCell.style.gridRow = String(Math.floor(i / 7) + 2);\n dayCell.style.gridColumn = String((i % 7) + 1 + this.columnOffset);\n\n const dayNumber = document.createElement('div');\n dayNumber.className = 'calendar__day-number';\n dayCell.appendChild(dayNumber);\n\n this.grid.appendChild(dayCell);\n this.dayCells.push(dayCell);\n }\n\n // Week-number column: a header corner cell plus one row header per week\n // row, all in the reserved first column. Built once here and attached only\n // while `show-week-numbers` is on, so a calendar without it carries no\n // extra nodes.\n this.weekNumberHeader = document.createElement('div');\n this.weekNumberHeader.className =\n 'calendar__week-number calendar__week-number--header';\n this.weekNumberHeader.setAttribute('part', 'week-number-header');\n this.weekNumberHeader.setAttribute('aria-hidden', 'true');\n this.weekNumberHeader.style.gridRow = '1';\n this.weekNumberHeader.style.gridColumn = '1';\n\n for (let week = 0; week < 6; week++) {\n const weekCell = document.createElement('div');\n weekCell.className = 'calendar__week-number';\n weekCell.setAttribute('part', 'week-number');\n weekCell.setAttribute('role', 'rowheader');\n weekCell.style.gridRow = String(week + 2);\n weekCell.style.gridColumn = '1';\n this.weekNumberCells.push(weekCell);\n }\n\n // Shared tooltip overlay for event bars — one element, repositioned per\n // bar, so rich content can load lazily without a tooltip instance per bar.\n this.tooltipEl = document.createElement('div');\n this.tooltipEl.className = 'calendar__tooltip';\n this.tooltipEl.setAttribute('part', 'event-tooltip');\n this.tooltipEl.setAttribute('role', 'tooltip');\n this.tooltipEl.id = 'calendar-event-tooltip';\n this.tooltipEl.hidden = true;\n\n // Interactive click-to-open popover for event details. One shared panel,\n // anchored per bar; content may load lazily (provider or the\n // calendar/event-popover request channel).\n this.popoverEl = document.createElement('div');\n this.popoverEl.className = 'calendar__popover';\n this.popoverEl.setAttribute('part', 'event-popover');\n this.popoverEl.setAttribute('role', 'dialog');\n this.popoverEl.setAttribute('aria-label', 'Event details');\n this.popoverEl.tabIndex = -1;\n this.popoverEl.hidden = true;\n\n this.container.appendChild(this.header);\n this.container.appendChild(this.grid);\n this.container.appendChild(this.tooltipEl);\n this.container.appendChild(this.popoverEl);\n shadow.appendChild(this.container);\n }\n\n /**\n * Dynamic popover channel: yields `{ event }` so any\n * `@respond('calendar/event-popover')` controller can return the content.\n */\n @request('calendar/event-popover')\n private async *requestEventPopoverContent(event: CalendarEvent): any {\n return await (yield { event });\n }\n\n /**\n * Opens the shared overlay, empty, anchored on `anchor`, and arms its\n * Escape / outside-press dismissal. Both panels the calendar owns — the\n * event popover and the \"+N more\" day list — go through here, so they share\n * one dismissal contract and one focus-return target.\n *\n * @returns the token identifying this opening; async content must check it\n * against `popoverToken` before painting.\n */\n private beginPopover(anchor: HTMLElement, label: string): number {\n const token = ++this.popoverToken;\n this.hideEventTooltip();\n // A trigger that advertises aria-haspopup owes the reader the panel's\n // state too — and the previous anchor is stale the moment this one opens\n // (an entry in the day panel re-anchors the overlay on the same chip).\n this.setAnchorExpanded(this.popoverBar, false);\n this.setAnchorExpanded(anchor, true);\n this.popoverBar = anchor;\n this.popoverEl.setAttribute('aria-label', label);\n this.popoverEl.replaceChildren();\n this.popoverEl.hidden = false;\n this.syncOverlayLift();\n document.addEventListener('keydown', this.boundPopoverEscape, true);\n document.addEventListener('mousedown', this.boundPopoverOutside, true);\n return token;\n }\n\n private async openEventPopover(bar: HTMLElement, event: CalendarEvent) {\n // Anchor + loading shell first, so slow content still feels responsive.\n const token = this.beginPopover(bar, event.title || 'Event details');\n const loading = document.createElement('div');\n loading.className = 'calendar__popover-loading';\n loading.textContent = 'Loading…';\n this.popoverEl.appendChild(loading);\n this.positionPopover(bar);\n\n let content: string | Node | undefined;\n try {\n if (event.popover !== true && event.popover) {\n content = typeof event.popover === 'function' ? event.popover() : event.popover;\n } else if (this.eventPopover) {\n content = await this.eventPopover(event);\n } else {\n content = await this.requestEventPopoverContent(event);\n }\n } catch {\n // No responder discovered (or the provider failed) — close quietly.\n content = undefined;\n }\n\n if (token !== this.popoverToken) return; // closed (or replaced) meanwhile\n\n if (content == null) {\n console.warn(\n `[snice-calendar] event \"${String(event.id)}\" enables a popover but no content was provided — set eventPopover, event.popover content, or a @respond('calendar/event-popover') handler.`\n );\n this.closeEventPopover({ returnFocus: false });\n return;\n }\n\n if (typeof content === 'string') this.popoverEl.textContent = content;\n else this.popoverEl.replaceChildren(content);\n this.positionPopover(bar);\n this.popoverEl.focus();\n }\n\n /**\n * The \"+N more\" chip's built-in default action: the day's hidden events,\n * listed in the shared overlay.\n *\n * Wiring `calendar-more-click` is an application concern, but a chip that\n * visibly does nothing when clicked reads as broken, so the component owns a\n * sensible default. It is only a default — the event is cancelable, and\n * `preventDefault()` leaves the day to the app.\n */\n private openMorePanel(chip: HTMLElement, date: Date, hidden: CalendarEvent[]) {\n const dayLabel = date.toLocaleDateString(this.locale, { dateStyle: 'full' });\n this.beginPopover(chip,\n `${hidden.length} more event${hidden.length === 1 ? '' : 's'} on ${dayLabel}`);\n\n const heading = document.createElement('p');\n heading.className = 'calendar__more-date';\n heading.setAttribute('part', 'more-panel-date');\n heading.textContent = dayLabel;\n\n const list = document.createElement('ul');\n list.className = 'calendar__more-list';\n list.setAttribute('part', 'more-list');\n // Explicit: `list-style: none` drops the implicit list role in WebKit.\n list.setAttribute('role', 'list');\n\n for (const event of hidden) {\n const item = document.createElement('li');\n const entry = document.createElement('button');\n entry.type = 'button';\n entry.className = 'calendar__more-item';\n entry.setAttribute('part', 'more-item');\n\n const dot = document.createElement('span');\n dot.className = 'calendar__more-dot';\n dot.setAttribute('part', 'more-dot');\n dot.setAttribute('aria-hidden', 'true');\n if (event.color) dot.style.background = event.color;\n\n const title = document.createElement('span');\n title.className = 'calendar__more-title';\n title.textContent = event.title;\n\n entry.append(dot, title);\n entry.onclick = (e) => this.handleMorePanelEntry(chip, event, e);\n item.appendChild(entry);\n list.appendChild(item);\n }\n\n this.popoverEl.append(heading, list);\n this.positionPopover(chip);\n this.popoverEl.focus();\n }\n\n /**\n * A panel entry behaves like the event's own stripe: it reports the click,\n * and drills into the event's popover when it has one. Without popover\n * content there is nothing further to show, so the panel closes and hands\n * focus back to the chip.\n */\n private handleMorePanelEntry(chip: HTMLElement, event: CalendarEvent, e: Event) {\n this.handleEventClick(event, e);\n if (event.popover) this.openEventPopover(chip, event);\n else this.closeEventPopover();\n }\n\n /**\n * Places an overlay at a point given in viewport coordinates.\n *\n * `:host` declares `contain: layout`, which makes the host — not the\n * viewport — the containing block for its `position: fixed` descendants, so\n * viewport coordinates written straight into `left`/`top` land the overlay a\n * whole host-offset down the page. The overlays are `position: absolute`\n * inside `.calendar` instead, and the target is converted into that box\n * here, which is correct with or without the containment.\n */\n private placeOverlay(el: HTMLElement, viewportX: number, viewportY: number) {\n // The containing block is the container's PADDING box, while the rect is\n // its border box — `clientLeft`/`clientTop` are the border widths between\n // them. They are 0 by default and non-zero only when a consumer borders\n // the documented `::part(base)`, which would otherwise shift both overlays\n // off their bar by that width.\n const origin = this.container.getBoundingClientRect();\n el.style.left = `${viewportX - origin.left - this.container.clientLeft}px`;\n el.style.top = `${viewportY - origin.top - this.container.clientTop}px`;\n }\n\n /** Gap between a bar and its overlay, and the minimum viewport margin. */\n private static readonly OVERLAY_GAP = 6;\n private static readonly OVERLAY_EDGE = 4;\n\n /** Clamps an overlay's left edge into the viewport. */\n private clampOverlayX(left: number, width: number): number {\n const edge = SniceCalendar.OVERLAY_EDGE;\n const vw = window.innerWidth || 0;\n return Math.max(edge, vw > 0 ? Math.min(left, vw - width - edge) : left);\n }\n\n private positionPopover(bar: HTMLElement) {\n const rect = bar.getBoundingClientRect();\n const width = this.popoverEl.offsetWidth;\n const height = this.popoverEl.offsetHeight;\n const gap = SniceCalendar.OVERLAY_GAP;\n const edge = SniceCalendar.OVERLAY_EDGE;\n const vh = window.innerHeight || 0;\n\n let y = rect.bottom + gap;\n if (vh > 0 && y + height > vh - edge) {\n // No room under the bar — flip above it, or pin to the bottom margin\n // when the panel is taller than either side.\n const above = rect.top - gap - height;\n y = above >= edge ? above : Math.max(edge, vh - height - edge);\n }\n\n this.placeOverlay(this.popoverEl, this.clampOverlayX(rect.left, width), y);\n }\n\n closeEventPopover(options: { returnFocus?: boolean } = {}): void {\n if (!this.popoverBar) return;\n this.popoverToken++;\n const bar = this.popoverBar;\n this.setAnchorExpanded(bar, false);\n this.popoverBar = null;\n this.popoverEl.hidden = true;\n this.popoverEl.replaceChildren();\n this.syncOverlayLift();\n document.removeEventListener('keydown', this.boundPopoverEscape, true);\n document.removeEventListener('mousedown', this.boundPopoverOutside, true);\n if (options.returnFocus !== false && bar.isConnected) bar.focus();\n }\n\n /** Keeps a popup trigger's `aria-expanded` in step with the overlay. Guarded\n * on `aria-haspopup` so only the anchors that actually advertise a popup —\n * the \"+N more\" chip and an event bar carrying popover content — claim the\n * state; a plain bar is not a trigger and must not report one. */\n private setAnchorExpanded(anchor: HTMLElement | null, expanded: boolean) {\n if (!anchor?.hasAttribute('aria-haspopup')) return;\n anchor.setAttribute('aria-expanded', String(expanded));\n }\n\n @dispose()\n cleanupPopover() {\n document.removeEventListener('keydown', this.boundPopoverEscape, true);\n document.removeEventListener('mousedown', this.boundPopoverOutside, true);\n }\n\n private async showEventTooltip(bar: HTMLElement, event: CalendarEvent) {\n const token = ++this.tooltipToken;\n const provider = this.eventTooltip;\n\n let content: string | Node | undefined;\n if (provider) {\n try {\n content = await provider(event);\n } catch {\n content = event.tooltip;\n }\n } else {\n content = event.tooltip;\n }\n\n // Pointer already left (or moved to another bar) while loading.\n if (token !== this.tooltipToken || content == null) return;\n\n if (typeof content === 'string') this.tooltipEl.textContent = content;\n else this.tooltipEl.replaceChildren(content);\n\n this.tooltipEl.hidden = false;\n this.tooltipBar = bar;\n bar.setAttribute('aria-describedby', this.tooltipEl.id);\n this.syncOverlayLift();\n this.positionTooltip(bar);\n }\n\n private positionTooltip(bar: HTMLElement) {\n const rect = bar.getBoundingClientRect();\n const gap = SniceCalendar.OVERLAY_GAP;\n const edge = SniceCalendar.OVERLAY_EDGE;\n\n // Above the bar, or under it when the top of the viewport is in the way.\n let y = rect.top - this.tooltipEl.offsetHeight - gap;\n if (y < edge) y = rect.bottom + gap;\n\n this.placeOverlay(\n this.tooltipEl,\n this.clampOverlayX(rect.left, this.tooltipEl.offsetWidth),\n y,\n );\n }\n\n private hideEventTooltip() {\n this.tooltipToken++;\n this.tooltipEl.hidden = true;\n this.tooltipBar?.removeAttribute('aria-describedby');\n this.tooltipBar = null;\n this.syncOverlayLift();\n }\n\n /**\n * Marks the host while a tooltip or popover is showing. Layout containment\n * makes the host a stacking context, so an overlay can only paint above what\n * follows the calendar if the host itself is lifted — see\n * `:host([overlay-open])` in the stylesheet.\n */\n private syncOverlayLift() {\n this.toggleAttribute('overlay-open', !!this.popoverBar || !!this.tooltipBar);\n }\n\n private updateView() {\n // Update header title\n const monthName = this.displayDate.toLocaleDateString(this.locale, { month: 'long', year: 'numeric' });\n const titleEl = this.header.querySelector('.calendar__title') as HTMLElement;\n if (titleEl) titleEl.textContent = monthName;\n\n // Update day cells\n const days = this.getMonthDays();\n const currentMonth = this.displayDate.getMonth();\n\n // The week-number column shifts every explicitly-placed grid child, so it\n // is resolved before the cells are positioned.\n this.syncWeekNumberColumn(days);\n\n // Resolve which cell should be tab-stoppable (roving tabindex).\n const rovingIndex = this.computeRovingIndex(days);\n\n days.forEach((date, i) => {\n const cell = this.dayCells[i];\n if (!cell) return;\n\n const isOtherMonth = date.getMonth() !== currentMonth;\n const isToday = this.highlightToday && this.isToday(date);\n // Display-only mode never shows a selection highlight.\n const isSelected = !this.noDaySelect && this.isSelected(date);\n const isDisabled = this.isDisabled(date);\n\n // Update classes (preserving role)\n cell.className = 'calendar__day';\n // The week's first cell draws the grid's left edge. A class, not\n // :nth-child — the week-number column adds siblings that would shift\n // any positional selector.\n if (i % 7 === 0) cell.classList.add('calendar__day--week-start');\n if (isOtherMonth) cell.classList.add('calendar__day--other-month');\n if (isToday) cell.classList.add('calendar__day--today');\n if (isSelected) cell.classList.add('calendar__day--selected');\n if (isDisabled) cell.classList.add('calendar__day--disabled');\n if (this.noDaySelect) cell.classList.add('calendar__day--static');\n if (this.cellSizing === 'stretch') cell.classList.add('calendar__day--stretch');\n\n cell.setAttribute('role', 'gridcell');\n cell.setAttribute('aria-selected', isSelected ? 'true' : 'false');\n cell.setAttribute('aria-disabled', isDisabled ? 'true' : 'false');\n cell.setAttribute('aria-current', isToday && !isOtherMonth ? 'date' : 'false');\n cell.setAttribute('tabindex', i === rovingIndex ? '0' : '-1');\n cell.setAttribute('aria-label', date.toLocaleDateString(this.locale, { dateStyle: 'full' }));\n (cell as any).__date = date;\n\n // Update day number\n const dayNumber = cell.querySelector('.calendar__day-number') as HTMLElement;\n if (dayNumber) dayNumber.textContent = String(date.getDate());\n\n // Update click handler\n cell.onclick = () => this.handleDayClick(date);\n });\n\n this.renderEventStripes(days);\n }\n\n /**\n * Attaches or detaches the week-number column and re-places every\n * explicitly-positioned grid child for the resulting column offset.\n */\n private syncWeekNumberColumn(days: Date[]) {\n const show = this.showWeekNumbers;\n this.container.classList.toggle('calendar--week-numbers', show);\n\n if (show) {\n // Inserted in reading order — the corner cell ahead of the weekday\n // strip, each row header ahead of its week's day cells.\n if (!this.weekNumberHeader.isConnected) {\n this.grid.insertBefore(this.weekNumberHeader, this.grid.firstChild);\n }\n this.weekNumberCells.forEach((cell, week) => {\n if (!cell.isConnected) this.grid.insertBefore(cell, this.dayCells[week * 7]);\n const weekNumber = this.getWeekNumber(days[week * 7]);\n cell.textContent = String(weekNumber);\n cell.setAttribute('aria-label', `Week ${weekNumber}`);\n });\n } else {\n this.weekNumberHeader.remove();\n this.weekNumberCells.forEach(cell => cell.remove());\n }\n\n const offset = this.columnOffset;\n const weekdays = this.grid.querySelectorAll('.calendar__weekday');\n weekdays.forEach((el, i) => {\n (el as HTMLElement).style.gridColumn = String(i + 1 + offset);\n });\n this.dayCells.forEach((cell, i) => {\n cell.style.gridColumn = String((i % 7) + 1 + offset);\n });\n }\n\n /**\n * Number of the week that starts on `weekStart`.\n *\n * Monday-start calendars use ISO-8601 (week 1 is the week holding the year's\n * first Thursday). Every other start-of-week uses the common civil rule —\n * the week containing January 1 is week 1 — anchored on the year the week\n * ends in, so the turn-of-year week is numbered once, not twice.\n */\n private getWeekNumber(weekStart: Date): number {\n const WEEK_MS = 7 * 24 * 60 * 60 * 1000;\n const midnight = (y: number, m: number, d: number) => new Date(y, m, d).getTime();\n\n if (this.firstDayOfWeek === 1) {\n // The ISO week is named by its Thursday.\n const thursday = new Date(\n weekStart.getFullYear(), weekStart.getMonth(), weekStart.getDate() + 3);\n const isoYear = thursday.getFullYear();\n // January 4 is always in ISO week 1; walk back to that week's Monday.\n const jan4 = new Date(isoYear, 0, 4);\n const week1Monday = midnight(isoYear, 0, 4 - ((jan4.getDay() + 6) % 7));\n return 1 + Math.round((thursday.getTime() - week1Monday) / WEEK_MS);\n }\n\n const weekEnd = new Date(\n weekStart.getFullYear(), weekStart.getMonth(), weekStart.getDate() + 6);\n const year = weekEnd.getFullYear();\n const jan1 = new Date(year, 0, 1);\n const week1Start = midnight(\n year, 0, 1 - ((jan1.getDay() - this.firstDayOfWeek + 7) % 7));\n return 1 + Math.round((\n midnight(weekStart.getFullYear(), weekStart.getMonth(), weekStart.getDate())\n - week1Start) / WEEK_MS);\n }\n\n /** Event-lane geometry in rem — mirrors snice-calendar.css. */\n private static readonly LANE_HEIGHT_REM = 1.375;\n /** Day-number strip above the first lane (the constant in the cell's\n * min-height reservation). */\n private static readonly LANE_STACK_TOP_REM = 2.125;\n /** Strip the \"+N more\" chip claims when a stack overflows. */\n private static readonly MORE_CHIP_REM = 1;\n /** Intrinsic floor of a `cell-sizing=\"stretch\"` cell. */\n private static readonly STRETCH_FLOOR_REM = 3;\n /** Lane depth used when there is no layout to measure (headless DOM,\n * detached, `display: none`). */\n private static readonly DEFAULT_EVENT_LANES = 3;\n /**\n * Height a single lane physically occupies, measured from the top of the\n * cell: the bar sits 1.875rem down and is 1.125rem tall.\n *\n * LANE_STACK_TOP_REM + LANE_HEIGHT_REM (3.5rem) is the *budgeted* cost of a\n * lane — it carries a bottom gap so the next lane has somewhere to go. This\n * is the smaller number the budget falls back to when the row cannot grow:\n * the point below which a drawn lane would be clipped by its own cell.\n */\n private static readonly LANE_MIN_FIT_REM = 3;\n /** Height the \"+N more\" chip itself occupies at the bottom of the cell. */\n private static readonly MORE_CHIP_FIT_REM = 1.125;\n /**\n * Narrowest segment, in rem, that still carries an event avatar.\n *\n * A one-day chip in a 400px month grid is ~57px wide; the avatar, its gap,\n * and the bar padding leave the title three characters (\"Des…\"). The title\n * is the payload and the avatar is an adornment, so — like every\n * professional calendar — a segment that cannot carry both keeps the title\n * and drops the adornment. 4.5rem is the width at which a default-size\n * title still reads next to the avatar.\n */\n private static readonly AVATAR_MIN_SEGMENT_REM = 4.5;\n\n /**\n * How many event lanes fit in a day cell, and how many still fit once the\n * \"+N more\" chip claims its strip.\n *\n * Measured from the cell's own height with every lane reservation cleared,\n * so the budget follows whatever sizes the cell — the square baseline\n * (`100cqw / 7`), a height the host imposes on the calendar, or the stretch\n * floor — and never feeds back on itself. A `cell-sizing=\"stretch\"` cell the\n * host does not constrain has no budget at all: its row grows to fit every\n * lane, which is what \"collapse to content\" means.\n */\n private laneBudget(): { fit: number; withMore: number; height: number; rem: number } {\n const rem = parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;\n const height = this.dayCells[0]?.getBoundingClientRect().height ?? 0;\n if (!height) {\n const depth = SniceCalendar.DEFAULT_EVENT_LANES;\n return { fit: depth, withMore: depth, height: 0, rem };\n }\n if (this.cellSizing === 'stretch' && !this.rowCapped\n && height <= SniceCalendar.STRETCH_FLOOR_REM * rem + 1) {\n return { fit: Infinity, withMore: Infinity, height, rem };\n }\n const lanesIn = (reserve: number) => {\n const budgeted = Math.floor(\n (height / rem - SniceCalendar.LANE_STACK_TOP_REM - reserve)\n / SniceCalendar.LANE_HEIGHT_REM);\n if (budgeted >= 1) return budgeted;\n // Below the budgeted floor a row that can still grow always draws one\n // lane — the reservation at the end of renderEventStripes buys it the\n // height. A capped row has no such recourse, so the lane is drawn only\n // when it already fits; otherwise the day collapses entirely into its\n // chip rather than painting a stripe its cell will clip.\n if (!this.rowCapped) return 1;\n const needed = SniceCalendar.LANE_MIN_FIT_REM\n + (reserve > 0 ? SniceCalendar.MORE_CHIP_FIT_REM : 0);\n return height / rem >= needed ? 1 : 0;\n };\n return {\n fit: lanesIn(0),\n withMore: lanesIn(SniceCalendar.MORE_CHIP_REM),\n height,\n rem,\n };\n }\n\n /** True while `--calendar-row-cap` is holding the week rows below the size\n * they would take of their own accord. */\n private rowCapped = false;\n\n /**\n * Fits the six week rows inside a host that constrains the calendar's\n * height.\n *\n * The square baseline sizes a week row from the *column width*\n * (`100cqw / 7`), which says nothing about how much height the host has\n * given the grid. A host that hands down a definite height — the components\n * page's `aspect-ratio: 1` card is the reported case — therefore gets a grid\n * whose min-content height exceeds its box: the grid overflows, and whatever\n * clips it (that card's `overflow: hidden`) takes the bottom weeks of the\n * month with it.\n *\n * The room the grid has and the room it wants are both measurable, so the\n * fix is to compare them and publish the per-row ceiling when they disagree.\n * With no constraint the container's height IS its content height, the two\n * agree, and nothing is published — square cells and the growable lane\n * reservation are untouched. Measured with the cap cleared, so it never\n * feeds back on itself.\n *\n * Month view only. The cap divides the room into WEEK_ROWS equal shares and\n * lands as a definite `grid-template-rows` track; the week and day views\n * carry their own taller `min-height` at higher specificity, so a definite\n * track there would leave every cell overflowing its own row and painting\n * over the next one. They keep the pre-cap behaviour — the var stays unset,\n * the tracks stay `auto`.\n */\n private syncRowCap() {\n this.grid.style.removeProperty('--calendar-row-cap');\n this.rowCapped = false;\n if (this.view !== 'month') return;\n\n // The host's own content box, not just the container's: `.calendar`'s\n // `height: 100%` resolves to auto against a host sized by `max-height`,\n // so the container reports the height it WANTED and only the host box is\n // actually clamped. Whichever is smaller is the room there really is.\n const hostStyle = getComputedStyle(this);\n const hostRoom = this.clientHeight\n - parseFloat(hostStyle.paddingTop) - parseFloat(hostStyle.paddingBottom);\n const room = Math.min(this.container.clientHeight, hostRoom)\n - this.header.getBoundingClientRect().height;\n const wanted = this.grid.getBoundingClientRect().height;\n // No layout to measure (headless, detached, display:none) — or the rows\n // already fit, which is every unconstrained calendar.\n if (!(room > 0) || !(wanted > 0) || wanted <= room + 0.5) return;\n\n const weekdayHeight = (this.grid.querySelector('.calendar__weekday') as\n HTMLElement | null)?.getBoundingClientRect().height ?? 0;\n // A cell cannot be shorter than its own padding and rules, so a cap below\n // that floor buys no height — it only detaches the rows from their tracks\n // and stacks each week on top of the next. Below the floor the calendar\n // has compressed as far as it physically can: it overflows a host that\n // short, the way it always did, rather than rendering weeks over weeks.\n const cell = this.dayCells[0];\n const cellStyle = cell ? getComputedStyle(cell) : null;\n const cellFloor = cellStyle\n ? parseFloat(cellStyle.paddingTop) + parseFloat(cellStyle.paddingBottom)\n + parseFloat(cellStyle.borderTopWidth)\n + parseFloat(cellStyle.borderBottomWidth)\n : 0;\n const cap = Math.max(\n (room - weekdayHeight) / SniceCalendar.WEEK_ROWS, cellFloor);\n if (!(cap > 0)) return;\n\n this.rowCapped = true;\n this.grid.style.setProperty('--calendar-row-cap', `${cap}px`);\n }\n\n /** Week rows in a month grid. */\n private static readonly WEEK_ROWS = 6;\n\n /**\n * Render events as continuous stripes: one bar per (event × week row),\n * spanning the event's days in that week and chopped at week boundaries\n * with continues-left/right styling. Overlapping events stack into lanes\n * per week — earlier start first, longer event first on ties — like\n * professional calendars. How many of those lanes are drawn is the week's\n * share of the day cell's height (see laneBudget); the rest collapse into\n * the day's \"+N more\" chip.\n */\n private renderEventStripes(days: Date[]) {\n this.closeEventPopover({ returnFocus: false }); // anchors are re-created\n this.grid.querySelectorAll('.calendar__event-bar').forEach(el => el.remove());\n this.dayCells.forEach(cell => {\n cell.querySelector('.calendar__more')?.remove();\n cell.style.removeProperty('--calendar-week-lanes');\n cell.style.removeProperty('--calendar-week-more');\n });\n // Before anything is measured and regardless of whether this month has\n // events: an empty calendar in a short host overflows too.\n this.syncRowCap();\n\n if (!this.events || this.events.length === 0) return;\n\n // Local-midnight timestamps for the visible grid; events normalize to the\n // same construction so lookups are exact (and DST-safe).\n const dayTimes = days.map(d => new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime());\n const dayIndex = new Map<number, number>(dayTimes.map((t, i) => [t, i]));\n const gridStart = dayTimes[0];\n const gridEnd = dayTimes[dayTimes.length - 1];\n\n const normalize = (d: Date | string): number => {\n const date = typeof d === 'string' ? new Date(d) : d;\n return new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();\n };\n\n type Segmentable = {\n event: CalendarEvent;\n startIdx: number;\n endIdx: number;\n startsBeforeGrid: boolean;\n endsAfterGrid: boolean;\n startTime: number;\n duration: number;\n order: number;\n };\n\n const resolved: Segmentable[] = [];\n this.events.forEach((event, order) => {\n if (!event.start) return;\n const startTime = normalize(event.start);\n if (isNaN(startTime)) return;\n const endTime = event.end ? Math.max(normalize(event.end), startTime) : startTime;\n if (isNaN(endTime) || endTime < gridStart || startTime > gridEnd) return;\n\n const startsBeforeGrid = startTime < gridStart;\n const endsAfterGrid = endTime > gridEnd;\n const startIdx = startsBeforeGrid ? 0 : dayIndex.get(startTime)!;\n const endIdx = endsAfterGrid ? dayTimes.length - 1 : dayIndex.get(endTime)!;\n resolved.push({\n event, startIdx, endIdx, startsBeforeGrid, endsAfterGrid,\n startTime, duration: endTime - startTime, order,\n });\n });\n\n resolved.sort((a, b) =>\n a.startTime - b.startTime || b.duration - a.duration || a.order - b.order);\n\n // The events each day dropped, in the order they stack — the chip reports\n // the count, and its built-in panel lists them.\n const hiddenPerDay: CalendarEvent[][] =\n Array.from({ length: dayTimes.length }, () => []);\n const weekCount = Math.floor(dayTimes.length / 7);\n const weekLaneCounts = new Array(weekCount).fill(0);\n // Measured before a single bar or reservation goes back in, so the budget\n // reflects the room the row has of its own.\n const budget = this.laneBudget();\n // Segment width comes from the same measured cell the lane budget uses, so\n // the avatar decision follows the calendar's real box and is re-taken by\n // the resize observer. No layout to measure → nothing is dropped.\n const cellWidth = this.dayCells[0]?.getBoundingClientRect().width ?? 0;\n const avatarMinWidth = SniceCalendar.AVATAR_MIN_SEGMENT_REM * budget.rem;\n\n for (let week = 0; week < weekCount; week++) {\n const weekStart = week * 7;\n const weekEnd = weekStart + 6;\n // lanes[lane] holds the occupied [startCol, endCol] ranges in this week.\n const lanes: Array<Array<[number, number]>> = [];\n const placed: Array<{ item: Segmentable; lane: number; segStart: number; segEnd: number }> = [];\n let stackDepth = 0;\n\n // Lane assignment first: how deep this week stacks decides whether the\n // \"+N more\" chip is needed at all, and the chip costs a strip of height.\n for (const item of resolved) {\n if (item.endIdx < weekStart || item.startIdx > weekEnd) continue;\n\n const segStart = Math.max(item.startIdx, weekStart);\n const segEnd = Math.min(item.endIdx, weekEnd);\n const startCol = segStart - weekStart;\n const endCol = segEnd - weekStart;\n\n let lane = 0;\n while (lanes[lane]?.some(([s, e]) => startCol <= e && endCol >= s)) lane++;\n (lanes[lane] ??= []).push([startCol, endCol]);\n placed.push({ item, lane, segStart, segEnd });\n stackDepth = Math.max(stackDepth, lane + 1);\n }\n\n const visibleLanes = stackDepth <= budget.fit ? stackDepth : budget.withMore;\n weekLaneCounts[week] = Math.min(stackDepth, visibleLanes);\n\n for (const { item, lane, segStart, segEnd } of placed) {\n if (lane >= visibleLanes) {\n for (let i = segStart; i <= segEnd; i++) hiddenPerDay[i].push(item.event);\n continue;\n }\n\n const startCol = segStart - weekStart;\n const endCol = segEnd - weekStart;\n\n const continuesLeft = segStart > item.startIdx\n || (segStart === item.startIdx && item.startsBeforeGrid);\n const continuesRight = segEnd < item.endIdx\n || (segEnd === item.endIdx && item.endsAfterGrid);\n\n // A segment too narrow for an avatar plus a legible title runs\n // compact: title only, tighter inline padding.\n const compact = cellWidth > 0\n && cellWidth * (endCol - startCol + 1) < avatarMinWidth;\n\n const bar = document.createElement('div');\n bar.className = 'calendar__event-bar';\n if (continuesLeft) bar.classList.add('calendar__event-bar--continues-left');\n if (continuesRight) bar.classList.add('calendar__event-bar--continues-right');\n if (compact) bar.classList.add('calendar__event-bar--compact');\n\n // A custom className rides along on both the class list and the part\n // attribute, so events are styleable from outside via\n // ::part(<className>).\n const customClasses = item.event.className\n ? item.event.className.split(/\\s+/).filter(Boolean)\n : [];\n bar.classList.add(...customClasses);\n bar.setAttribute('part', ['event-bar', ...customClasses].join(' '));\n\n bar.setAttribute('data-event-id', String(item.event.id));\n bar.setAttribute('data-lane', String(lane));\n bar.style.gridRow = String(week + 2); // row 1 is the weekday header\n bar.style.gridColumn =\n `${startCol + 1 + this.columnOffset} / ${endCol + 2 + this.columnOffset}`;\n bar.style.setProperty('--calendar-event-lane', String(lane));\n if (item.event.color) bar.style.background = item.event.color;\n\n if (item.event.avatar && !compact) {\n const spec = typeof item.event.avatar === 'string'\n ? { src: item.event.avatar }\n : item.event.avatar;\n const avatar = document.createElement('snice-avatar') as any;\n avatar.className = 'calendar__event-avatar';\n avatar.setAttribute('part', 'event-avatar');\n // Attributes, not property assignments: the avatar's shape/size CSS\n // matches on :host([shape])/:host([size]) attribute selectors.\n avatar.setAttribute('size', 'xs');\n avatar.setAttribute('shape', 'circle');\n // Tiny thumbnail — eager: lazy-load buys nothing at this size and\n // stalls on very tall pages.\n avatar.setAttribute('loading', 'eager');\n if (spec.src) avatar.src = spec.src;\n if (spec.name) avatar.name = spec.name;\n if (spec.alt) avatar.alt = spec.alt;\n bar.appendChild(avatar);\n }\n const titleEl = document.createElement('span');\n titleEl.className = 'calendar__event-title';\n titleEl.textContent = item.event.title;\n bar.appendChild(titleEl);\n\n // Tooltip: static string, or lazy/rich content from eventTooltip.\n // The native title attribute stays only when no tooltip is configured.\n if (item.event.tooltip || this.eventTooltip) {\n bar.onmouseenter = () => this.showEventTooltip(bar, item.event);\n bar.onmouseleave = () => this.hideEventTooltip();\n } else {\n bar.title = item.event.title;\n }\n\n // Popover: strictly per-event opt-in — without `popover`, a click\n // only dispatches calendar-event-click and no request is issued.\n if (item.event.popover) {\n bar.setAttribute('role', 'button');\n bar.setAttribute('tabindex', '0');\n bar.setAttribute('aria-haspopup', 'dialog');\n bar.onkeydown = (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n this.openEventPopover(bar, item.event);\n }\n };\n bar.onclick = (e) => {\n this.handleEventClick(item.event, e);\n this.openEventPopover(bar, item.event);\n };\n } else {\n bar.onclick = (e) => this.handleEventClick(item.event, e);\n }\n this.grid.appendChild(bar);\n }\n }\n\n hiddenPerDay.forEach((hidden, i) => {\n const count = hidden.length;\n if (count === 0) return;\n const cell = this.dayCells[i];\n if (!cell) return;\n const date = days[i];\n const more = document.createElement('div');\n more.className = 'calendar__more';\n more.setAttribute('part', 'more-chip');\n more.textContent = `+${count} more`;\n // The chip is its own control: it reports its day and hidden count,\n // opens the day panel unless the app cancels it, and its clicks never\n // fall through to the day cell's selection handler.\n more.setAttribute('role', 'button');\n more.setAttribute('tabindex', '0');\n more.setAttribute('aria-haspopup', 'dialog');\n more.setAttribute('aria-expanded', 'false');\n more.setAttribute('aria-label',\n `${count} more event${count === 1 ? '' : 's'} on ${date.toLocaleDateString(this.locale, { dateStyle: 'full' })}`);\n more.onclick = (e) => this.handleMoreClick(date, more, hidden, e);\n more.onkeydown = (e) => {\n if (e.key !== 'Enter' && e.key !== ' ') return;\n e.preventDefault();\n this.handleMoreClick(date, more, hidden, e);\n };\n cell.appendChild(more);\n });\n\n // Reserve row height for the lane stack (and the \"+N more\" chip) so\n // stripes never spill past their week row — every cell in a week shares\n // the reservation, since the grid row is as tall as its tallest cell.\n // The reservation is only a floor: when the row already has the room it is\n // left off, so the busy week's row stays level with the rest. That covers\n // every cell tall enough for the stack it shows; the floor still bites\n // below 3.5rem (the one lane always drawn) or 4.5rem once the chip claims\n // its strip — square cells are that short on calendars under ~500px wide.\n for (let week = 0; week < weekCount; week++) {\n if (weekLaneCounts[week] === 0) continue;\n const weekHasMore = hiddenPerDay\n .slice(week * 7, week * 7 + 7).some(hidden => hidden.length > 0);\n const needed = (SniceCalendar.LANE_STACK_TOP_REM\n + weekLaneCounts[week] * SniceCalendar.LANE_HEIGHT_REM\n + (weekHasMore ? SniceCalendar.MORE_CHIP_REM : 0)) * budget.rem;\n if (budget.height && needed <= budget.height + 0.5) continue;\n for (let i = week * 7; i < week * 7 + 7; i++) {\n const cell = this.dayCells[i];\n if (!cell) continue;\n cell.style.setProperty('--calendar-week-lanes', String(weekLaneCounts[week]));\n if (weekHasMore) {\n cell.style.setProperty('--calendar-week-more',\n `${SniceCalendar.MORE_CHIP_REM}rem`);\n }\n }\n }\n }\n\n goToToday(): void {\n this.displayDate = new Date();\n this.value = new Date();\n this.updateView();\n this.dispatchChange();\n }\n\n goToDate(date: Date | string): void {\n this.displayDate = typeof date === 'string' ? new Date(date) : date;\n this.value = this.displayDate;\n this.updateView();\n this.dispatchChange();\n }\n\n previousMonth(): void {\n this.displayDate = new Date(this.displayDate.getFullYear(), this.displayDate.getMonth() - 1);\n this.updateView();\n }\n\n nextMonth(): void {\n this.displayDate = new Date(this.displayDate.getFullYear(), this.displayDate.getMonth() + 1);\n this.updateView();\n }\n\n previousWeek(): void {\n this.displayDate = new Date(this.displayDate.getTime() - 7 * 24 * 60 * 60 * 1000);\n this.updateView();\n }\n\n nextWeek(): void {\n this.displayDate = new Date(this.displayDate.getTime() + 7 * 24 * 60 * 60 * 1000);\n this.updateView();\n }\n\n previousDay(): void {\n this.displayDate = new Date(this.displayDate.getTime() - 24 * 60 * 60 * 1000);\n this.updateView();\n }\n\n nextDay(): void {\n this.displayDate = new Date(this.displayDate.getTime() + 24 * 60 * 60 * 1000);\n this.updateView();\n }\n\n getDisplayedMonth(): { month: number; year: number } {\n return {\n month: this.displayDate.getMonth(),\n year: this.displayDate.getFullYear()\n };\n }\n\n getEventsForDate(date: Date | string): CalendarEvent[] {\n const targetDate = typeof date === 'string' ? new Date(date) : date;\n const targetTime = targetDate.getTime();\n\n return this.events.filter(event => {\n if (!event.start) return false;\n\n const startDate = typeof event.start === 'string' ? new Date(event.start) : event.start;\n const startTime = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate()).getTime();\n\n // If no end date, event is single day\n if (!event.end) {\n return this.isSameDay(targetDate, startDate);\n }\n\n // Multi-day event: check if target date falls between start and end\n const endDate = typeof event.end === 'string' ? new Date(event.end) : event.end;\n const endTime = new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate()).getTime();\n\n return targetTime >= startTime && targetTime <= endTime;\n });\n }\n\n private formatDate(date: Date): string {\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n }\n\n private isSameDay(date1: Date, date2: Date): boolean {\n return this.formatDate(date1) === this.formatDate(date2);\n }\n\n private isToday(date: Date): boolean {\n return this.isSameDay(date, new Date());\n }\n\n private isSelected(date: Date): boolean {\n // No value means no selection at all — and an unparseable one selects\n // nothing rather than throwing out of the render.\n if (!this.value) return false;\n const valueDate = typeof this.value === 'string' ? new Date(this.value) : this.value;\n if (!(valueDate instanceof Date) || isNaN(valueDate.getTime())) return false;\n return this.isSameDay(date, valueDate);\n }\n\n private isDisabled(date: Date): boolean {\n if (this.minDate) {\n const min = typeof this.minDate === 'string' ? new Date(this.minDate) : this.minDate;\n if (date < min) return true;\n }\n\n if (this.maxDate) {\n const max = typeof this.maxDate === 'string' ? new Date(this.maxDate) : this.maxDate;\n if (date > max) return true;\n }\n\n return this.disabledDates.some(d => {\n const disabledDate = typeof d === 'string' ? new Date(d) : d;\n return this.isSameDay(date, disabledDate);\n });\n }\n\n private handleDayClick(date: Date) {\n // Display-only calendars: days are not selectable at all.\n if (this.noDaySelect) return;\n if (this.isDisabled(date)) return;\n\n this.value = date;\n this.updateView();\n this.dispatchChange();\n }\n\n private handleEventClick(event: CalendarEvent, e: Event) {\n e.stopPropagation();\n this.dispatchEventClick(event);\n }\n\n private handleMoreClick(\n date: Date, chip: HTMLElement, hidden: CalendarEvent[], e: Event,\n ) {\n e.stopPropagation();\n // The app gets first refusal: preventDefault() means it is opening its own\n // day view and the built-in panel must stay out of the way.\n if (!this.dispatchMoreClick(date, hidden.length)) return;\n this.openMorePanel(chip, date, hidden);\n }\n\n private getMonthDays(): Date[] {\n const year = this.displayDate.getFullYear();\n const month = this.displayDate.getMonth();\n\n // First day of the month\n const firstDay = new Date(year, month, 1);\n const firstDayOfWeek = firstDay.getDay();\n\n // Adjust for first day of week setting\n const daysToSubtract = (firstDayOfWeek - this.firstDayOfWeek + 7) % 7;\n const startDate = new Date(year, month, 1 - daysToSubtract);\n\n // Generate 42 days (6 weeks)\n const days: Date[] = [];\n for (let i = 0; i < 42; i++) {\n days.push(new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + i));\n }\n\n return days;\n }\n\n private getWeekdays(): string[] {\n const weekdays = [];\n const baseDate = new Date(2024, 0, this.firstDayOfWeek); // Start from a Sunday\n\n for (let i = 0; i < 7; i++) {\n const date = new Date(baseDate);\n date.setDate(baseDate.getDate() + i);\n weekdays.push(date.toLocaleDateString(this.locale, { weekday: 'short' }));\n }\n\n return weekdays;\n }\n\n @watch('value')\n @watch('events')\n @watch('eventTooltip')\n @watch('noDaySelect')\n @watch('cellSizing')\n @watch('showWeekNumbers')\n @watch('highlightToday')\n handlePropertyChange() {\n if (this.grid) {\n this.updateView();\n }\n }\n\n /** Box the stripes were last laid out against, so a resize that changes\n * nothing (including the one the render itself causes) is a no-op. */\n private laidOutFor = '';\n\n /**\n * The lane budget comes from the cell's height, and that height follows the\n * calendar's own box — column width in square mode, the host's height when\n * it has one. Re-stripe when the box actually changes.\n */\n @observe('resize', { throttle: 100 })\n handleCalendarResize(entry: ResizeObserverEntry) {\n if (!this.grid) return;\n const box = `${Math.round(entry.contentRect.width)}x${Math.round(entry.contentRect.height)}`;\n if (box === this.laidOutFor) return;\n this.laidOutFor = box;\n this.updateView();\n }\n\n @watch('locale')\n @watch('firstDayOfWeek')\n handleWeekdayInputsChange() {\n if (!this.grid) return;\n // Rebuild the weekday header row so the new locale / start-of-week is reflected.\n const existing = this.grid.querySelectorAll('.calendar__weekday');\n existing.forEach(el => el.remove());\n const weekdays = this.getWeekdays();\n // Anchor on the first day cell rather than a child index: the week-number\n // column adds siblings ahead of it, so a positional index would interleave\n // the strip with the grid's other children.\n const firstRow = this.weekNumberCells[0]?.isConnected\n ? this.weekNumberCells[0] : this.dayCells[0];\n const anchor = firstRow ?? null;\n weekdays.forEach((day, i) => {\n const weekdayEl = document.createElement('div');\n weekdayEl.className = 'calendar__weekday';\n weekdayEl.textContent = day;\n weekdayEl.style.gridRow = '1';\n weekdayEl.style.gridColumn = String(i + 1 + this.columnOffset);\n this.grid.insertBefore(weekdayEl, anchor);\n });\n this.updateView();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'snice-calendar': SniceCalendar;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -50,7 +50,8 @@ export interface CalendarEvent {
50
50
  data?: any;
51
51
  }
52
52
  export interface SniceCalendarElement extends HTMLElement {
53
- value: Date | string;
53
+ /** Selected day, or `null` when nothing is selected (the initial state). */
54
+ value: Date | string | null;
54
55
  view: CalendarView;
55
56
  events: CalendarEvent[];
56
57
  /** Lazy/rich tooltip provider for event bars; wins over `event.tooltip`. */
@@ -4,6 +4,12 @@
4
4
  * Rules are defined in grammar JSON files under "formatters" section.
5
5
  * The engine scans code char by char, tracks string/comment context,
6
6
  * and applies newline/space/indent rules based on regex char classes.
7
+ *
8
+ * Semantics: a code display formats authored code — it does not re-flow it.
9
+ * Author line breaks are preserved; rule-driven newlines fire only where
10
+ * they do not duplicate an author break and are suppressed inside
11
+ * parentheses/bracket depth. Leading indentation is renormalized from the
12
+ * indent/dedent char-class depth.
7
13
  */
8
14
  export interface FormatRules {
9
15
  tabSize?: number;