@manzanohq/calendar-lite 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/LICENSE +191 -0
  2. package/cdn/calendar.component.d.ts +146 -0
  3. package/cdn/calendar.component.js +2 -0
  4. package/cdn/calendar.component.js.map +7 -0
  5. package/cdn/calendar.d.ts +9 -0
  6. package/cdn/calendar.js +2 -0
  7. package/cdn/calendar.js.map +7 -0
  8. package/cdn/calendar.styles.d.ts +3 -0
  9. package/cdn/calendar.styles.js +2 -0
  10. package/cdn/calendar.styles.js.map +7 -0
  11. package/cdn/calendar.types.d.ts +99 -0
  12. package/cdn/calendar.types.js +2 -0
  13. package/cdn/calendar.types.js.map +7 -0
  14. package/cdn/chunks/chunk.B6XGWUEF.js +1 -0
  15. package/cdn/chunks/chunk.B6XGWUEF.js.map +7 -0
  16. package/cdn/chunks/chunk.BYWXPW2P.js +2 -0
  17. package/cdn/chunks/chunk.BYWXPW2P.js.map +7 -0
  18. package/cdn/chunks/chunk.EOXXNYIW.js +2 -0
  19. package/cdn/chunks/chunk.EOXXNYIW.js.map +7 -0
  20. package/cdn/chunks/chunk.MGICPQBB.js +2 -0
  21. package/cdn/chunks/chunk.MGICPQBB.js.map +7 -0
  22. package/cdn/chunks/chunk.OEC274YS.js +915 -0
  23. package/cdn/chunks/chunk.OEC274YS.js.map +7 -0
  24. package/cdn/chunks/chunk.PJFNXC5P.js +307 -0
  25. package/cdn/chunks/chunk.PJFNXC5P.js.map +7 -0
  26. package/cdn/index.d.ts +3 -0
  27. package/cdn/index.js +2 -0
  28. package/cdn/index.js.map +7 -0
  29. package/cdn/internal/date-utils.d.ts +74 -0
  30. package/cdn/internal/date-utils.js +2 -0
  31. package/cdn/internal/date-utils.js.map +7 -0
  32. package/cdn/internal/event-layout.d.ts +67 -0
  33. package/cdn/internal/event-layout.js +2 -0
  34. package/cdn/internal/event-layout.js.map +7 -0
  35. package/dist/calendar.component.d.ts +146 -0
  36. package/dist/calendar.component.d.ts.map +1 -0
  37. package/dist/calendar.component.js +1218 -0
  38. package/dist/calendar.component.js.map +7 -0
  39. package/dist/calendar.d.ts +9 -0
  40. package/dist/calendar.d.ts.map +1 -0
  41. package/dist/calendar.js +5 -0
  42. package/dist/calendar.js.map +7 -0
  43. package/dist/calendar.styles.d.ts +3 -0
  44. package/dist/calendar.styles.d.ts.map +1 -0
  45. package/dist/calendar.styles.js +923 -0
  46. package/dist/calendar.styles.js.map +7 -0
  47. package/dist/calendar.types.d.ts +99 -0
  48. package/dist/calendar.types.d.ts.map +1 -0
  49. package/dist/calendar.types.js +1 -0
  50. package/dist/calendar.types.js.map +7 -0
  51. package/dist/index.d.ts +3 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +6 -0
  54. package/dist/index.js.map +7 -0
  55. package/dist/internal/date-utils.d.ts +74 -0
  56. package/dist/internal/date-utils.d.ts.map +1 -0
  57. package/dist/internal/date-utils.js +133 -0
  58. package/dist/internal/date-utils.js.map +7 -0
  59. package/dist/internal/event-layout.d.ts +67 -0
  60. package/dist/internal/event-layout.d.ts.map +1 -0
  61. package/dist/internal/event-layout.js +224 -0
  62. package/dist/internal/event-layout.js.map +7 -0
  63. package/package.json +37 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/calendar.styles.ts"],
4
+ "sourcesContent": ["import { css } from 'lit';\nimport componentStyles from '@manzanohq/components/dist/styles/component.styles.js';\n\nexport default [\n componentStyles,\n css`\n /* ------------------------------------------------------------------ */\n /* Host & public/private custom property pattern */\n /* ------------------------------------------------------------------ */\n :host {\n --_calendar-bg: var(--mz-calendar-bg, var(--mz-color-surface));\n --_calendar-border: var(--mz-calendar-border-color, var(--mz-color-border));\n --_calendar-event-bg: var(--mz-calendar-event-bg, var(--mz-color-primary));\n --_calendar-event-color: var(--mz-calendar-event-color, var(--mz-color-on-primary));\n --_calendar-slot-height: var(--mz-calendar-slot-height, 3.5rem);\n --_calendar-today-bg: var(--mz-calendar-today-bg, color-mix(in srgb, var(--mz-color-primary) 5%, transparent));\n --_calendar-now-color: var(--mz-calendar-now-indicator-color, var(--mz-color-danger));\n --_calendar-gutter-width: var(--mz-calendar-gutter-width, 4.5rem);\n --_calendar-header-bg: var(--mz-calendar-header-bg, var(--mz-color-surface));\n\n display: block;\n min-height: var(--mz-calendar-min-height, 400px);\n font-family: var(--mz-font-sans);\n background: var(--_calendar-bg);\n color: var(--mz-color-text);\n border: var(--mz-border-width-sm) solid var(--_calendar-border);\n border-radius: var(--mz-radius-lg);\n overflow: hidden;\n container-type: inline-size;\n container-name: calendar;\n }\n\n /* ------------------------------------------------------------------ */\n /* Toolbar */\n /* ------------------------------------------------------------------ */\n .calendar__toolbar {\n display: flex;\n align-items: center;\n gap: var(--mz-space-sm);\n padding: var(--mz-space-sm) var(--mz-space-lg);\n border-bottom: var(--mz-border-width-sm) solid var(--_calendar-border);\n background: var(--_calendar-header-bg);\n flex-wrap: wrap;\n }\n\n .calendar__toolbar-nav {\n display: flex;\n align-items: center;\n gap: var(--mz-space-2xs);\n }\n\n .calendar__toolbar-title {\n flex: 1;\n font-size: var(--mz-font-size-lg);\n font-weight: var(--mz-font-weight-semibold);\n white-space: nowrap;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n padding-left: var(--mz-space-xs);\n }\n\n .calendar__toolbar-views {\n display: flex;\n background: var(--_calendar-border);\n border-radius: var(--mz-radius-sm);\n padding: 1px;\n }\n\n .calendar__btn {\n appearance: none;\n border: var(--mz-border-width-sm) solid var(--_calendar-border);\n background: var(--_calendar-bg);\n color: var(--mz-color-text);\n font-family: var(--mz-font-sans);\n font-size: var(--mz-font-size-sm);\n font-weight: var(--mz-font-weight-medium);\n padding: var(--mz-space-2xs) var(--mz-space-sm);\n border-radius: var(--mz-radius-sm);\n cursor: pointer;\n user-select: none;\n white-space: nowrap;\n line-height: 1.5;\n transition: background var(--mz-transition-fast) ease,\n border-color var(--mz-transition-fast) ease,\n color var(--mz-transition-fast) ease;\n }\n\n .calendar__btn:hover {\n background: color-mix(in srgb, var(--mz-color-text) 6%, var(--_calendar-bg));\n }\n\n .calendar__btn:focus-visible {\n outline: var(--mz-focus-ring);\n outline-offset: var(--mz-focus-ring-offset);\n }\n\n /* View toggle buttons \u2014 segmented control style */\n .calendar__toolbar-views .calendar__btn {\n border: none;\n border-radius: calc(var(--mz-radius-sm) - 1px);\n padding: var(--mz-space-2xs) var(--mz-space-sm);\n font-size: var(--mz-font-size-xs);\n background: var(--_calendar-bg);\n }\n\n .calendar__toolbar-views .calendar__btn:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n .calendar__toolbar-views .calendar__btn:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n .calendar__toolbar-views .calendar__btn:hover {\n background: color-mix(in srgb, var(--mz-color-text) 8%, var(--_calendar-bg));\n }\n\n .calendar__btn--active {\n background: var(--mz-color-primary);\n color: var(--mz-color-on-primary);\n border-color: var(--mz-color-primary);\n }\n\n .calendar__btn--active:hover {\n background: var(--mz-color-primary);\n }\n\n .calendar__toolbar-views .calendar__btn--active {\n background: var(--mz-color-primary);\n color: var(--mz-color-on-primary);\n }\n\n .calendar__toolbar-views .calendar__btn--active:hover {\n background: var(--mz-color-primary);\n }\n\n /* ------------------------------------------------------------------ */\n /* aria-live region (visually hidden) */\n /* ------------------------------------------------------------------ */\n .calendar__live {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n\n /* ------------------------------------------------------------------ */\n /* Time grid: scroll container (header + allday + body) */\n /* ------------------------------------------------------------------ */\n .calendar__scroll-container {\n overflow-y: auto;\n max-height: var(--mz-calendar-body-height, 800px);\n position: relative;\n }\n\n /* Styled scrollbar \u2014 subtle, warm */\n .calendar__scroll-container::-webkit-scrollbar {\n width: 6px;\n }\n\n .calendar__scroll-container::-webkit-scrollbar-track {\n background: transparent;\n }\n\n .calendar__scroll-container::-webkit-scrollbar-thumb {\n background: color-mix(in srgb, var(--mz-color-text) 18%, transparent);\n border-radius: 3px;\n }\n\n .calendar__scroll-container::-webkit-scrollbar-thumb:hover {\n background: color-mix(in srgb, var(--mz-color-text) 30%, transparent);\n }\n\n :host([no-scroll]) .calendar__scroll-container {\n overflow-y: visible;\n max-height: none;\n }\n\n .calendar__sticky-header {\n position: sticky;\n top: 0;\n z-index: 3;\n }\n\n /* ------------------------------------------------------------------ */\n /* Time grid: header row (day headers) */\n /* ------------------------------------------------------------------ */\n .calendar__header {\n display: grid;\n grid-template-columns: var(--_calendar-gutter-width) repeat(var(--_day-count, 7), minmax(var(--_calendar-min-col-width, 3rem), 1fr));\n border-bottom: var(--mz-border-width-sm) solid var(--_calendar-border);\n background: var(--_calendar-header-bg);\n }\n\n .calendar__gutter-header {\n border-right: var(--mz-border-width-sm) solid var(--_calendar-border);\n }\n\n .calendar__day-header {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 1px;\n padding: var(--mz-space-xs) var(--mz-space-xs);\n font-size: var(--mz-font-size-2xs);\n font-weight: var(--mz-font-weight-semibold);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: color-mix(in srgb, var(--mz-color-text) 55%, transparent);\n border-left: var(--mz-border-width-sm) solid var(--_calendar-border);\n }\n\n .calendar__day-header--today {\n color: var(--mz-color-primary);\n }\n\n .calendar__day-number {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n border-radius: 50%;\n font-size: var(--mz-font-size-md);\n font-weight: var(--mz-font-weight-semibold);\n line-height: 1;\n color: var(--mz-color-text);\n }\n\n .calendar__day-number--today {\n background: var(--mz-color-primary);\n color: var(--mz-color-on-primary);\n }\n\n /* ------------------------------------------------------------------ */\n /* Time grid: all-day row */\n /* ------------------------------------------------------------------ */\n .calendar__allday {\n display: grid;\n grid-template-columns: var(--_calendar-gutter-width) repeat(var(--_day-count, 7), minmax(var(--_calendar-min-col-width, 3rem), 1fr));\n border-bottom: var(--mz-border-width-sm) solid var(--_calendar-border);\n min-height: 2rem;\n position: relative;\n background: var(--_calendar-header-bg);\n }\n\n .calendar__allday-label {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n font-size: var(--mz-font-size-2xs);\n color: color-mix(in srgb, var(--mz-color-text) 45%, transparent);\n padding: var(--mz-space-2xs) var(--mz-space-xs);\n border-right: var(--mz-border-width-sm) solid var(--_calendar-border);\n }\n\n .calendar__allday-cell {\n position: relative;\n border-left: var(--mz-border-width-sm) solid var(--_calendar-border);\n min-height: 1.75rem;\n padding: var(--mz-space-2xs) var(--mz-space-2xs);\n display: flex;\n flex-direction: column;\n gap: 1px;\n }\n\n /* ------------------------------------------------------------------ */\n /* Time grid: body (time slots) */\n /* ------------------------------------------------------------------ */\n .calendar__body {\n display: grid;\n grid-template-columns: var(--_calendar-gutter-width) 1fr;\n position: relative;\n }\n\n .calendar__gutter {\n display: flex;\n flex-direction: column;\n border-right: var(--mz-border-width-sm) solid var(--_calendar-border);\n }\n\n .calendar__hour-label {\n height: var(--_calendar-slot-height);\n display: flex;\n align-items: flex-start;\n justify-content: flex-end;\n padding-right: var(--mz-space-sm);\n font-size: var(--mz-font-size-2xs);\n font-weight: var(--mz-font-weight-medium);\n color: color-mix(in srgb, var(--mz-color-text) 45%, transparent);\n transform: translateY(-0.5em);\n user-select: none;\n letter-spacing: 0.01em;\n white-space: nowrap;\n }\n\n /* Full format shown by default, short hidden */\n .calendar__hour-short {\n display: none;\n }\n\n .calendar__grid {\n position: relative;\n display: grid;\n grid-template-rows: repeat(var(--_slot-count, 48), var(--_calendar-slot-height));\n grid-template-columns: repeat(var(--_day-count, 7), minmax(var(--_calendar-min-col-width, 3rem), 1fr));\n }\n\n /* Horizontal slot lines */\n .calendar__slot-line {\n grid-column: 1 / -1;\n border-bottom: var(--mz-border-width-sm) solid var(--_calendar-border);\n pointer-events: none;\n }\n\n .calendar__slot-line--hour {\n border-bottom-style: solid;\n }\n\n .calendar__slot-line--half {\n border-bottom-color: color-mix(in srgb, var(--_calendar-border) 50%, transparent);\n border-bottom-style: solid;\n }\n\n /* Vertical day dividers */\n .calendar__day-divider {\n position: absolute;\n top: 0;\n bottom: 0;\n border-left: var(--mz-border-width-sm) solid var(--_calendar-border);\n pointer-events: none;\n z-index: 1;\n }\n\n /* Today column highlight */\n .calendar__today-col {\n position: absolute;\n top: 0;\n bottom: 0;\n background: var(--_calendar-today-bg);\n pointer-events: none;\n z-index: 0;\n }\n\n /* ------------------------------------------------------------------ */\n /* Events (time grid) */\n /* ------------------------------------------------------------------ */\n .calendar__event {\n position: absolute;\n border-radius: var(--mz-radius-sm);\n padding: var(--mz-space-2xs) var(--mz-space-xs);\n font-size: var(--mz-font-size-xs);\n line-height: 1.35;\n overflow: hidden;\n cursor: pointer;\n user-select: none;\n z-index: 2;\n background: var(--_event-bg, var(--_calendar-event-bg));\n color: var(--_event-color, var(--_calendar-event-color));\n border-left: 3px solid color-mix(in srgb, var(--_event-bg, var(--_calendar-event-bg)) 70%, #000);\n transition: box-shadow var(--mz-transition-fast) ease;\n }\n\n .calendar__event:hover {\n box-shadow: var(--mz-shadow-md);\n z-index: 4;\n }\n\n .calendar__event:focus-visible {\n outline: var(--mz-focus-ring);\n outline-offset: var(--mz-focus-ring-offset);\n z-index: 5;\n }\n\n .calendar__event-title {\n font-weight: var(--mz-font-weight-semibold);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .calendar__event-time {\n font-size: var(--mz-font-size-2xs);\n opacity: 0.8;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n /* Resize handle at bottom of event */\n .calendar__event-resize {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 8px;\n cursor: s-resize;\n z-index: 3;\n }\n\n .calendar__event-resize::after {\n content: '';\n position: absolute;\n bottom: 2px;\n left: 50%;\n transform: translateX(-50%);\n width: 1.5rem;\n height: 2px;\n border-radius: 1px;\n background: currentColor;\n opacity: 0;\n transition: opacity var(--mz-transition-fast) ease;\n }\n\n .calendar__event:hover .calendar__event-resize::after {\n opacity: 0.5;\n }\n\n /* All-day event in the all-day row */\n .calendar__allday-event {\n display: block;\n border-radius: var(--mz-radius-sm);\n padding: 2px var(--mz-space-xs);\n font-size: var(--mz-font-size-xs);\n font-weight: var(--mz-font-weight-semibold);\n line-height: 1.5;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n user-select: none;\n background: var(--_event-bg, var(--_calendar-event-bg));\n color: var(--_event-color, var(--_calendar-event-color));\n }\n\n .calendar__allday-event:hover {\n box-shadow: var(--mz-shadow-sm);\n }\n\n .calendar__allday-event:focus-visible {\n outline: var(--mz-focus-ring);\n outline-offset: var(--mz-focus-ring-offset);\n }\n\n /* ------------------------------------------------------------------ */\n /* Now indicator */\n /* ------------------------------------------------------------------ */\n .calendar__now-indicator {\n position: absolute;\n left: 0;\n right: 0;\n height: 2px;\n background: var(--_calendar-now-color);\n z-index: 6;\n pointer-events: none;\n }\n\n .calendar__now-indicator::before {\n content: '';\n position: absolute;\n left: -4px;\n top: -3px;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--_calendar-now-color);\n }\n\n /* ------------------------------------------------------------------ */\n /* Drag selection highlight */\n /* ------------------------------------------------------------------ */\n .calendar__drag-selection {\n position: absolute;\n background: color-mix(in srgb, var(--mz-color-primary) 15%, transparent);\n border: 2px solid color-mix(in srgb, var(--mz-color-primary) 60%, transparent);\n border-radius: var(--mz-radius-sm);\n z-index: 3;\n pointer-events: none;\n }\n\n /* ------------------------------------------------------------------ */\n /* Month grid */\n /* ------------------------------------------------------------------ */\n .calendar__month-grid {\n display: grid;\n grid-template-columns: repeat(7, minmax(0, 1fr));\n flex: 1;\n }\n\n .calendar__month-weekday {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--mz-space-sm) var(--mz-space-xs);\n font-size: var(--mz-font-size-2xs);\n font-weight: var(--mz-font-weight-semibold);\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: color-mix(in srgb, var(--mz-color-text) 50%, transparent);\n border-bottom: var(--mz-border-width-sm) solid var(--_calendar-border);\n min-width: 0;\n }\n\n .calendar__month-cell {\n min-height: 5.5rem;\n padding: var(--mz-space-2xs) var(--mz-space-xs);\n border-bottom: var(--mz-border-width-sm) solid var(--_calendar-border);\n border-right: var(--mz-border-width-sm) solid var(--_calendar-border);\n position: relative;\n overflow: hidden;\n min-width: 0;\n }\n\n .calendar__month-cell:nth-child(7n) {\n border-right: none;\n }\n\n .calendar__month-cell--outside {\n background: color-mix(in srgb, var(--mz-color-text) 2%, var(--_calendar-bg));\n }\n\n .calendar__month-cell--today {\n background: var(--_calendar-today-bg);\n }\n\n .calendar__month-date {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1.5rem;\n height: 1.5rem;\n font-size: var(--mz-font-size-xs);\n font-weight: var(--mz-font-weight-medium);\n margin-bottom: var(--mz-space-2xs);\n }\n\n .calendar__month-date--today {\n background: var(--mz-color-primary);\n color: var(--mz-color-on-primary);\n border-radius: 50%;\n font-weight: var(--mz-font-weight-semibold);\n }\n\n .calendar__month-date--outside {\n opacity: 0.35;\n }\n\n .calendar__month-event {\n display: block;\n border-radius: var(--mz-radius-sm);\n padding: 2px var(--mz-space-xs);\n font-size: var(--mz-font-size-xs);\n font-weight: var(--mz-font-weight-medium);\n line-height: 1.4;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n user-select: none;\n background: var(--_event-bg, var(--_calendar-event-bg));\n color: var(--_event-color, var(--_calendar-event-color));\n margin-bottom: 2px;\n }\n\n .calendar__month-event:hover {\n box-shadow: var(--mz-shadow-sm);\n }\n\n .calendar__month-event:focus-visible {\n outline: var(--mz-focus-ring);\n outline-offset: var(--mz-focus-ring-offset);\n }\n\n .calendar__month-overflow {\n font-size: var(--mz-font-size-xs);\n color: color-mix(in srgb, var(--mz-color-text) 50%, transparent);\n padding: 2px var(--mz-space-xs);\n cursor: pointer;\n user-select: none;\n font-weight: var(--mz-font-weight-medium);\n }\n\n .calendar__month-overflow:hover {\n color: var(--mz-color-primary);\n }\n\n /* ------------------------------------------------------------------ */\n /* List view */\n /* ------------------------------------------------------------------ */\n .calendar__list {\n display: flex;\n flex-direction: column;\n }\n\n .calendar__list-day {\n border-bottom: var(--mz-border-width-sm) solid var(--_calendar-border);\n }\n\n .calendar__list-day-header {\n display: flex;\n gap: var(--mz-space-sm);\n padding: var(--mz-space-sm) var(--mz-space-lg);\n font-size: var(--mz-font-size-sm);\n font-weight: var(--mz-font-weight-semibold);\n background: color-mix(in srgb, var(--mz-color-text) 3%, var(--_calendar-bg));\n }\n\n .calendar__list-event {\n display: flex;\n align-items: center;\n gap: var(--mz-space-sm);\n padding: var(--mz-space-sm) var(--mz-space-lg);\n cursor: pointer;\n transition: background var(--mz-transition-fast) ease;\n }\n\n .calendar__list-event:hover {\n background: color-mix(in srgb, var(--mz-color-text) 4%, var(--_calendar-bg));\n }\n\n .calendar__list-event:focus-visible {\n outline: var(--mz-focus-ring);\n outline-offset: var(--mz-focus-ring-offset);\n }\n\n .calendar__list-event-dot {\n width: 0.5rem;\n height: 0.5rem;\n border-radius: 50%;\n background: var(--_event-bg, var(--_calendar-event-bg));\n flex-shrink: 0;\n }\n\n .calendar__list-event-time {\n font-size: var(--mz-font-size-xs);\n color: color-mix(in srgb, var(--mz-color-text) 50%, transparent);\n min-width: 6rem;\n }\n\n .calendar__list-event-title {\n font-size: var(--mz-font-size-sm);\n font-weight: var(--mz-font-weight-medium);\n flex: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n /* ------------------------------------------------------------------ */\n /* Resource headers */\n /* ------------------------------------------------------------------ */\n .calendar__resource-header {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--mz-space-sm) var(--mz-space-sm);\n font-size: var(--mz-font-size-xs);\n font-weight: var(--mz-font-weight-semibold);\n border-left: var(--mz-border-width-sm) solid var(--_calendar-border);\n text-align: center;\n }\n\n /* Resource timeline */\n .calendar__timeline {\n display: grid;\n overflow-x: auto;\n }\n\n .calendar__timeline-resource-label {\n display: flex;\n align-items: center;\n padding: var(--mz-space-sm) var(--mz-space-md);\n font-size: var(--mz-font-size-sm);\n font-weight: var(--mz-font-weight-medium);\n border-bottom: var(--mz-border-width-sm) solid var(--_calendar-border);\n border-right: var(--mz-border-width-sm) solid var(--_calendar-border);\n min-width: 8rem;\n background: var(--_calendar-header-bg);\n }\n\n .calendar__timeline-row {\n display: grid;\n grid-template-columns: repeat(var(--_slot-count, 48), var(--_calendar-slot-height));\n border-bottom: var(--mz-border-width-sm) solid var(--_calendar-border);\n position: relative;\n min-height: 2.5rem;\n }\n\n .calendar__timeline-slot {\n border-right: var(--mz-border-width-sm) solid var(--_calendar-border);\n }\n\n .calendar__timeline-slot--hour {\n border-right-style: solid;\n }\n\n .calendar__timeline-slot--half {\n border-right-color: color-mix(in srgb, var(--_calendar-border) 50%, transparent);\n border-right-style: solid;\n }\n\n /* ------------------------------------------------------------------ */\n /* Empty state */\n /* ------------------------------------------------------------------ */\n .calendar__empty {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--mz-space-lg);\n color: color-mix(in srgb, var(--mz-color-text) 40%, transparent);\n font-size: var(--mz-font-size-sm);\n font-style: italic;\n }\n\n /* ------------------------------------------------------------------ */\n /* Responsive: compact (tablet-ish, \u2264768px container) */\n /* ------------------------------------------------------------------ */\n @container calendar (max-width: 768px) {\n .calendar__toolbar {\n padding: var(--mz-space-xs) var(--mz-space-sm);\n gap: var(--mz-space-xs);\n }\n\n .calendar__toolbar-title {\n font-size: var(--mz-font-size-md);\n padding-left: var(--mz-space-2xs);\n }\n\n .calendar {\n --_calendar-gutter-width: 3.5rem;\n }\n\n .calendar__month-cell {\n min-height: 4.5rem;\n }\n }\n\n /* ------------------------------------------------------------------ */\n /* Responsive: narrow (mobile, \u2264540px container) */\n /* ------------------------------------------------------------------ */\n @container calendar (max-width: 540px) {\n .calendar__scroll-container {\n max-height: var(--mz-calendar-body-height, 500px);\n }\n\n .calendar__toolbar {\n padding: var(--mz-space-xs) var(--mz-space-sm);\n gap: var(--mz-space-2xs);\n }\n\n /* Title on its own row */\n .calendar__toolbar-title {\n font-size: var(--mz-font-size-sm);\n font-weight: var(--mz-font-weight-semibold);\n padding-left: 0;\n order: -1;\n flex-basis: 100%;\n }\n\n .calendar__toolbar-nav {\n gap: 2px;\n }\n\n .calendar__toolbar-views .calendar__btn {\n padding: 3px var(--mz-space-xs);\n font-size: 0.6875rem;\n }\n\n .calendar__btn {\n padding: var(--mz-space-2xs) var(--mz-space-xs);\n font-size: var(--mz-font-size-xs);\n line-height: 1.4;\n }\n\n .calendar {\n --_calendar-gutter-width: 2.75rem;\n --_calendar-slot-height: var(--mz-calendar-slot-height, 2.75rem);\n }\n\n .calendar__hour-label {\n font-size: 0.625rem;\n padding-right: var(--mz-space-2xs);\n letter-spacing: -0.01em;\n }\n\n /* Swap to short hour format (e.g. \"9 AM\" instead of \"9:00 AM\") */\n .calendar__hour-full {\n display: none;\n }\n\n .calendar__hour-short {\n display: inline;\n }\n\n .calendar__allday-label {\n font-size: 0.5625rem;\n padding: var(--mz-space-2xs) 2px;\n }\n\n .calendar__day-header {\n padding: var(--mz-space-2xs) 0;\n font-size: 0.5625rem;\n letter-spacing: 0.02em;\n }\n\n .calendar__day-number {\n width: 1.375rem;\n height: 1.375rem;\n font-size: var(--mz-font-size-xs);\n }\n\n .calendar__event {\n padding: 2px var(--mz-space-2xs);\n font-size: 0.6875rem;\n line-height: 1.3;\n border-left-width: 2px;\n }\n\n .calendar__event-time {\n font-size: 0.5625rem;\n }\n\n .calendar__allday-event {\n font-size: 0.6875rem;\n padding: 1px var(--mz-space-2xs);\n }\n\n .calendar__month-cell {\n min-height: 3.25rem;\n padding: 2px;\n }\n\n .calendar__month-date {\n width: 1.25rem;\n height: 1.25rem;\n font-size: 0.625rem;\n }\n\n .calendar__month-event {\n font-size: 0.625rem;\n padding: 1px 3px;\n line-height: 1.35;\n border-radius: 2px;\n }\n\n .calendar__month-overflow {\n font-size: 0.625rem;\n padding: 1px 3px;\n }\n\n .calendar__month-weekday {\n padding: var(--mz-space-2xs) 0;\n font-size: 0.5625rem;\n }\n\n /* List view \u2014 tighter on mobile */\n .calendar__list-event {\n padding: var(--mz-space-xs) var(--mz-space-sm);\n gap: var(--mz-space-xs);\n }\n\n .calendar__list-event-time {\n font-size: 0.6875rem;\n min-width: 4.5rem;\n }\n\n .calendar__list-event-title {\n font-size: var(--mz-font-size-xs);\n }\n\n .calendar__list-day-header {\n padding: var(--mz-space-xs) var(--mz-space-sm);\n font-size: var(--mz-font-size-xs);\n }\n\n /* Resource headers tighter */\n .calendar__resource-header {\n padding: var(--mz-space-xs) var(--mz-space-2xs);\n font-size: 0.625rem;\n }\n }\n\n /* ------------------------------------------------------------------ */\n /* Touch: larger hit targets */\n /* ------------------------------------------------------------------ */\n @media (pointer: coarse) {\n .calendar__btn {\n min-height: 2.25rem;\n min-width: 2.25rem;\n }\n\n .calendar__event-resize {\n height: 12px;\n }\n\n .calendar__month-event {\n min-height: 1.375rem;\n line-height: 1.375rem;\n }\n\n .calendar__allday-event {\n min-height: 1.375rem;\n line-height: 1.375rem;\n }\n\n .calendar__list-event {\n min-height: 2.5rem;\n }\n }\n `\n];\n"],
5
+ "mappings": "AAAA,OAAS,OAAAA,MAAW,MACpB,OAAOC,MAAqB,wDAE5B,IAAOC,EAAQ,CACbD,EACAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAk5BF",
6
+ "names": ["css", "componentStyles", "calendar_styles_default"]
7
+ }
@@ -0,0 +1,307 @@
1
+ import{a as A}from"./chunk.OEC274YS.js";import{a as K,b as tt,c as et}from"./chunk.EOXXNYIW.js";import{a as M,b as E,c as j,d as P,f as O,g as z,i as U,j as S,k as B,l as J,m as Q,n as b,o as I,p as x,q as Z}from"./chunk.BYWXPW2P.js";import{a as g}from"./chunk.MGICPQBB.js";import{html as d,nothing as C}from"lit";import{property as _,state as F}from"lit/decorators.js";import{classMap as H}from"lit/directives/class-map.js";import{styleMap as W}from"lit/directives/style-map.js";import{ManzanoElement as ot}from"@manzanohq/components/dist/internal/manzano-element.js";import{watch as q}from"@manzanohq/components/dist/internal/watch.js";import{drag as nt}from"@manzanohq/components/dist/internal/drag.js";var m=class extends ot{constructor(){super(...arguments);this.view="timeGridWeek";this.date=(()=>{let t=new Date;return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")}`})();this.events=[];this.resources=[];this.slotDuration=30;this.slotMinTime="00:00";this.slotMaxTime="24:00";this.allDaySlot=!0;this.selectable=!1;this.editable=!1;this.nowIndicator=!0;this.firstDay=0;this.locale="";this.duration=0;this.dayMaxEvents=4;this.noScroll=!1;this.eventContent=null;this.currentDate=new Date;this.nowMinutes=0;this.dragSelection=null;this._containerWidth=0;this.nowTimer=null;this.dragCleanup=null;this.resizeObserver=null;this.liveText=""}connectedCallback(){super.connectedCallback(),this.updateNowMinutes(),this.nowIndicator&&(this.nowTimer=setInterval(()=>this.updateNowMinutes(),6e4)),this.resizeObserver=new ResizeObserver(t=>{for(let e of t)this._containerWidth=e.contentRect.width}),this.resizeObserver.observe(this)}disconnectedCallback(){super.disconnectedCallback(),this.nowTimer&&(clearInterval(this.nowTimer),this.nowTimer=null),this.dragCleanup&&(this.dragCleanup(),this.dragCleanup=null),this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null)}handleDateChange(t,e){if(e){let i=e.split("-").map(Number);i.length===3&&(this.currentDate=new Date(i[0],i[1]-1,i[2]))}}handleViewChange(){this.emitDatesSet(),this.announceLive(`View changed to ${this.getViewLabel(this.view)}`)}handleNowIndicatorChange(t,e){e&&!this.nowTimer?this.nowTimer=setInterval(()=>this.updateNowMinutes(),6e4):!e&&this.nowTimer&&(clearInterval(this.nowTimer),this.nowTimer=null)}prev(){this.currentDate=this.getOffsetDate(-1),this.emitDatesSet(),this.announceLive(this.getTitle())}next(){this.currentDate=this.getOffsetDate(1),this.emitDatesSet(),this.announceLive(this.getTitle())}today(){this.currentDate=M(new Date),this.emitDatesSet(),this.announceLive("Today")}gotoDate(t){this.currentDate=M(t instanceof Date?t:new Date(t)),this.emitDatesSet()}changeView(t){this.view=t}getDate(){return new Date(this.currentDate)}addEvent(t){this.events=[...this.events,t]}updateEvent(t){this.events=this.events.map(e=>e.id===t.id?t:e)}removeEvent(t){this.events=this.events.filter(e=>e.id!==t)}refetchEvents(){this.events=[...this.events]}updateNowMinutes(){let t=new Date;this.nowMinutes=b(t.getHours(),t.getMinutes())}getResolvedLocale(){return this.locale||void 0}get responsiveDayCount(){if(this.duration>0)return this.duration;let t=this.view;if(t==="timeGridWeek"||t==="listWeek"||t==="resourceTimeGridWeek"){if(this._containerWidth>0&&this._containerWidth<540)return 3;if(this._containerWidth>=540&&this._containerWidth<768)return 5}return 0}getVisibleDays(){let t=this.view,e=this.currentDate;if(this.duration>0){let n=[];for(let a=0;a<this.duration;a++)n.push(E(M(e),a));return n}let i=this.responsiveDayCount;switch(t){case"timeGridWeek":case"resourceTimeGridWeek":case"listWeek":if(i>0&&i<7){let n=[];for(let a=0;a<i;a++)n.push(E(M(e),a));return n}return O(e,this.firstDay);case"timeGridDay":case"resourceTimeGridDay":return U(e);default:return O(e,this.firstDay)}}getOffsetDate(t){let e=this.currentDate;if(this.duration>0)return E(e,t*this.duration);let i=this.responsiveDayCount;switch(this.view){case"timeGridWeek":case"resourceTimeGridWeek":case"listWeek":return E(e,t*(i>0&&i<7?i:7));case"timeGridDay":case"resourceTimeGridDay":return E(e,t);case"dayGridMonth":{let n=new Date(e);return n.setMonth(n.getMonth()+t),n}case"resourceTimeline":return E(e,t);default:return E(e,t*7)}}getVisibleRange(){if(this.view==="dayGridMonth"){let e=new Date(this.currentDate.getFullYear(),this.currentDate.getMonth(),1),i=new Date(this.currentDate.getFullYear(),this.currentDate.getMonth()+1,0);return{start:M(e),end:M(E(i,1))}}let t=this.getVisibleDays();return{start:M(t[0]),end:M(E(t[t.length-1],1))}}emitDatesSet(){let t=this.getVisibleRange();this.emit("mz-calendar-dates-set",{detail:{start:t.start,end:t.end,view:this.view}})}announceLive(t){this.liveText=t,this.requestUpdate()}getTitle(){let t=this.getResolvedLocale(),e=this.currentDate;if(this.view==="dayGridMonth")return Q(e,t);if(this.view==="timeGridDay"||this.view==="resourceTimeGridDay")return new Intl.DateTimeFormat(t,{weekday:"long",month:"long",day:"numeric",year:"numeric"}).format(e);let i=this.getVisibleDays(),n=i[0],a=i[i.length-1],o=this.responsiveDayCount;if(o>0&&o<7){if(n.getMonth()===a.getMonth())return`${new Intl.DateTimeFormat(t,{month:"short"}).format(n)} ${n.getDate()}\u2013${a.getDate()}, ${n.getFullYear()}`;let c=new Intl.DateTimeFormat(t,{month:"short",day:"numeric"}).format(n),r=new Intl.DateTimeFormat(t,{month:"short",day:"numeric",year:"numeric"}).format(a);return`${c} \u2013 ${r}`}if(n.getMonth()===a.getMonth())return`${new Intl.DateTimeFormat(t,{month:"short"}).format(n)} ${n.getDate()}\u2013${a.getDate()}, ${n.getFullYear()}`;if(n.getFullYear()===a.getFullYear()){let c=new Intl.DateTimeFormat(t,{month:"short"}).format(n),r=new Intl.DateTimeFormat(t,{month:"short"}).format(a);return`${c} ${n.getDate()} \u2013 ${r} ${a.getDate()}, ${n.getFullYear()}`}let s=new Intl.DateTimeFormat(t,{month:"short",day:"numeric",year:"numeric"}).format(n),l=new Intl.DateTimeFormat(t,{month:"short",day:"numeric",year:"numeric"}).format(a);return`${s} \u2013 ${l}`}getViewLabel(t){switch(t){case"dayGridMonth":return"Month";case"timeGridWeek":return"Week";case"timeGridDay":return"Day";case"resourceTimeGridDay":return"Resource Day";case"resourceTimeGridWeek":return"Resource Week";case"resourceTimeline":return"Timeline";case"listWeek":return"List";default:return t}}getSlotCount(){let{hours:t,minutes:e}=x(this.slotMinTime),{hours:i,minutes:n}=x(this.slotMaxTime),a=b(i,n)-b(t,e);return Math.ceil(a/this.slotDuration)}getHourLabels(){let{hours:t,minutes:e}=x(this.slotMinTime),{hours:i,minutes:n}=x(this.slotMaxTime),a=b(t,e),o=b(i,n),s=[];for(let l=a;l<o;l+=this.slotDuration){let c=new Date(2e3,0,1,Math.floor(l/60),l%60);s.push({time:c,isHour:l%60===0})}return s}getNowPosition(){if(!this.nowIndicator)return null;let{hours:t,minutes:e}=x(this.slotMinTime),{hours:i,minutes:n}=x(this.slotMaxTime),a=b(t,e),o=b(i,n),s=o-a;return this.nowMinutes<a||this.nowMinutes>o?null:(this.nowMinutes-a)/s*100}getNowDayIndex(t){let e=new Date;for(let i=0;i<t.length;i++)if(j(e,t[i]))return i;return-1}handleEventClick(t,e,i){i.stopPropagation(),this.emit("mz-calendar-event-click",{detail:{event:t,el:e,jsEvent:i}})}handleEventKeydown(t,e,i){(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),this.emit("mz-calendar-event-click",{detail:{event:t,el:e,jsEvent:i}}))}updated(){(this.selectable||this.editable)&&this.setupGridDrag()}setupGridDrag(){this.dragCleanup&&(this.dragCleanup(),this.dragCleanup=null);let t=this.shadowRoot?.querySelector(".calendar__grid");if(!t||!this.selectable)return;let e=this.getSlotCount(),i=this.getVisibleDays(),n=i.length,{hours:a,minutes:o}=x(this.slotMinTime),s=b(a,o);this.dragCleanup=nt({target:t,onStart:l=>{if(l.target.closest(".calendar__event"))return!1;let r=t.getBoundingClientRect(),h=r.height/e,u=r.width/n,v=l.clientX-r.left,p=l.clientY-r.top,T=Math.max(0,Math.min(n-1,Math.floor(v/u))),D=Math.max(0,Math.min(e-1,Math.floor(p/h)));this.dragSelection={startSlot:D,endSlot:D,dayIndex:T}},onMove:l=>{if(!this.dragSelection)return;let c=t.getBoundingClientRect(),r=c.height/e,h=l.clientY-c.top,u=Math.max(0,Math.min(e-1,Math.floor(h/r)));this.dragSelection={...this.dragSelection,endSlot:u}},onEnd:()=>{if(!this.dragSelection)return;let{startSlot:l,endSlot:c,dayIndex:r}=this.dragSelection,h=Math.min(l,c),u=Math.max(l,c)+1,v=i[r],p=s+h*this.slotDuration,T=s+u*this.slotDuration,D=new Date(v);D.setHours(Math.floor(p/60),p%60,0,0);let $=new Date(v);$.setHours(Math.floor(T/60),T%60,0,0),this.emit("mz-calendar-select",{detail:{start:D,end:$,startStr:D.toISOString(),endStr:$.toISOString(),allDay:!1}}),this.dragSelection=null}})}setupEventDrag(t,e){if(!this.editable||e.editable===!1)return;let i=this.getVisibleDays(),n=this.getSlotCount(),{hours:a,minutes:o}=x(this.slotMinTime),s=b(a,o),l=i.length,c=!1,r,h=null;nt({target:t,onStart:u=>{if(h=this.shadowRoot?.querySelector(".calendar__grid")??null,!h)return!1;let v=t.getBoundingClientRect();c=u.clientY>v.bottom-8,r={...e},t.style.zIndex="10",t.style.opacity="0.8"},onMove:u=>{if(!h)return;let v=h.getBoundingClientRect(),p=v.height/n,T=v.width/l,D=u.clientY-v.top,$=u.clientX-v.left;if(c){let G=Math.max(0,Math.min(n,Math.ceil(D/p))),k=s+G*this.slotDuration,f=new Date(y(e.start));if(f.setHours(Math.floor(k/60),k%60,0,0),f.getTime()>y(e.start).getTime()){let R=I(X(y(e.start))-s,this.slotDuration),w=I(k-s,this.slotDuration);t.style.top=`${(R-1)/n*100}%`,t.style.height=`${(w-R)/n*100}%`}}else{let G=Math.max(0,Math.min(l-1,Math.floor($/T))),k=Math.max(0,Math.min(n-1,Math.floor(D/p))),f=y(e.end).getTime()-y(e.start).getTime(),R=Math.ceil(f/6e4/this.slotDuration);t.style.top=`${k/n*100}%`,t.style.height=`${R/n*100}%`;let w=100/l;t.style.left=`${G*w}%`,t.style.width=`${w}%`}},onEnd:u=>{if(t.style.zIndex="",t.style.opacity="",!h)return;let v=h.getBoundingClientRect(),p=v.height/n,T=v.width/l,D=u.clientY-v.top,$=u.clientX-v.left;if(c){let G=Math.max(0,Math.min(n,Math.ceil(D/p))),k=s+G*this.slotDuration,f=new Date(y(e.start));if(f.setHours(Math.floor(k/60),k%60,0,0),f.getTime()<=y(e.start).getTime())return;let R=y(r.end),w=f.getTime()-R.getTime(),N=Math.floor(w/864e5),V=w%864e5,Y={...e,end:f.toISOString()};this.emit("mz-calendar-event-resize",{detail:{event:Y,oldEvent:r,endDelta:{days:N,milliseconds:V},revert:()=>{this.updateEvent(r)}}})}else{let G=Math.max(0,Math.min(l-1,Math.floor($/T))),k=Math.max(0,Math.min(n-1,Math.floor(D/p))),f=s+k*this.slotDuration,R=i[G],w=new Date(R);w.setHours(Math.floor(f/60),f%60,0,0);let N=y(r.start),V=w.getTime()-N.getTime(),Y=Math.floor(V/864e5),it=V%864e5,at=y(e.end).getTime()-y(e.start).getTime(),rt=new Date(w.getTime()+at),st={...e,start:w.toISOString(),end:rt.toISOString()};this.emit("mz-calendar-event-drop",{detail:{event:st,oldEvent:r,delta:{days:Y,milliseconds:it},revert:()=>{this.updateEvent(r)}}})}}})}render(){return d`
2
+ <div part="calendar" class="calendar" role="application" aria-label="Calendar">
3
+ ${this.renderToolbar()}
4
+ <div class="calendar__live" aria-live="polite" role="status">${this.liveText}</div>
5
+ ${this.renderView()}
6
+ </div>
7
+ `}renderToolbar(){return d`
8
+ <div part="toolbar" class="calendar__toolbar" role="toolbar" aria-label="Calendar controls">
9
+ <div class="calendar__toolbar-nav" role="group" aria-label="Navigation">
10
+ <button
11
+ class="calendar__btn"
12
+ @click=${this.prev}
13
+ aria-label="Previous period"
14
+ >&lsaquo;</button>
15
+ <button
16
+ class="calendar__btn"
17
+ @click=${this.next}
18
+ aria-label="Next period"
19
+ >&rsaquo;</button>
20
+ <button
21
+ class="calendar__btn"
22
+ @click=${this.today}
23
+ >Today</button>
24
+ </div>
25
+ <span part="title" class="calendar__toolbar-title" aria-live="polite" role="heading" aria-level="2">${this.getTitle()}</span>
26
+ <div class="calendar__toolbar-views" role="group" aria-label="View options">
27
+ ${this.renderViewButton("dayGridMonth","Month")}
28
+ ${this.renderViewButton("timeGridWeek","Week")}
29
+ ${this.renderViewButton("timeGridDay","Day")}
30
+ ${this.renderViewButton("listWeek","List")}
31
+ </div>
32
+ </div>
33
+ `}renderViewButton(t,e){return d`
34
+ <button
35
+ class=${H({calendar__btn:!0,"calendar__btn--active":this.view===t})}
36
+ @click=${()=>this.changeView(t)}
37
+ aria-pressed=${this.view===t?"true":"false"}
38
+ >${e}</button>
39
+ `}renderView(){switch(this.view){case"dayGridMonth":return this.renderMonthGrid();case"timeGridWeek":case"timeGridDay":return this.renderTimeGrid(this.getVisibleDays());case"resourceTimeGridDay":case"resourceTimeGridWeek":return this.renderResourceTimeGrid(this.getVisibleDays());case"resourceTimeline":return this.renderResourceTimeline();case"listWeek":return this.renderListView();default:return this.renderTimeGrid(this.getVisibleDays())}}renderTimeGrid(t){let e=this.getSlotCount(),i=this.getHourLabels(),n=this.getResolvedLocale(),a=K(this.events,t,this.slotDuration,this.slotMinTime,this.slotMaxTime),o=this.allDaySlot?tt(this.events,t):[],s=this.getNowPosition(),l=this.getNowDayIndex(t),c=t.length;return d`
40
+ <div class="calendar__scroll-container">
41
+ <div class="calendar__sticky-header">
42
+ <!-- Day headers -->
43
+ <div part="header" class="calendar__header" role="row" style="--_day-count: ${c}">
44
+ <div class="calendar__gutter-header" role="presentation"></div>
45
+ ${t.map(r=>d`
46
+ <div
47
+ class=${H({calendar__day_header:!0,"calendar__day-header":!0,"calendar__day-header--today":P(r)})}
48
+ role="columnheader"
49
+ aria-label=${new Intl.DateTimeFormat(n,{weekday:"long",month:"long",day:"numeric"}).format(r)}
50
+ >
51
+ <span>${new Intl.DateTimeFormat(n,{weekday:"short"}).format(r)}</span>
52
+ <span class=${H({calendar__day_number:!0,"calendar__day-number":!0,"calendar__day-number--today":P(r)})}>${r.getDate()}</span>
53
+ </div>
54
+ `)}
55
+ </div>
56
+
57
+ <!-- All-day row -->
58
+ ${this.allDaySlot?d`
59
+ <div part="allday" class="calendar__allday" style="--_day-count: ${c}">
60
+ <div class="calendar__allday-label">all-day</div>
61
+ ${t.map((r,h)=>d`
62
+ <div class="calendar__allday-cell">
63
+ ${o.filter(u=>h>=u.startCol-1&&h<u.endCol-1).filter(u=>u.startCol-1===h).map(u=>d`
64
+ <div
65
+ class="calendar__allday-event"
66
+ part="event"
67
+ role="button"
68
+ tabindex="0"
69
+ data-event-id=${u.event.id}
70
+ aria-label="${u.event.title}"
71
+ style=${W({...u.event.backgroundColor?{"--_event-bg":u.event.backgroundColor}:{},...u.event.textColor?{"--_event-color":u.event.textColor}:{}})}
72
+ @click=${v=>this.handleEventClick(u.event,v.currentTarget,v)}
73
+ @keydown=${v=>this.handleEventKeydown(u.event,v.currentTarget,v)}
74
+ >${u.event.title}</div>
75
+ `)}
76
+ </div>
77
+ `)}
78
+ </div>
79
+ `:C}
80
+ </div>
81
+
82
+ <!-- Time grid body -->
83
+ <div class="calendar__body">
84
+ <!-- Gutter with hour labels -->
85
+ <div class="calendar__gutter">
86
+ ${i.map(r=>r.isHour?d`<div class="calendar__hour-label"><span class="calendar__hour-full">${S(r.time,n)}</span><span class="calendar__hour-short">${B(r.time,n)}</span></div>`:d`<div class="calendar__hour-label"></div>`)}
87
+ </div>
88
+
89
+ <!-- Grid area -->
90
+ <div
91
+ part="grid"
92
+ class="calendar__grid"
93
+ role="grid"
94
+ style="--_slot-count: ${e}; --_day-count: ${c}"
95
+ >
96
+ <!-- Slot lines -->
97
+ ${i.map((r,h)=>d`
98
+ <div
99
+ class=${H({"calendar__slot-line":!0,"calendar__slot-line--hour":r.isHour,"calendar__slot-line--half":!r.isHour})}
100
+ style="grid-row: ${h+1}; grid-column: 1 / -1"
101
+ ></div>
102
+ `)}
103
+
104
+ <!-- Day dividers -->
105
+ ${t.map((r,h)=>h>0?d`<div
106
+ class="calendar__day-divider"
107
+ style="left: ${h/c*100}%"
108
+ ></div>`:C)}
109
+
110
+ <!-- Today column highlight -->
111
+ ${l>=0?d`<div
112
+ class="calendar__today-col"
113
+ style="left: ${l/c*100}%; width: ${100/c}%"
114
+ ></div>`:C}
115
+
116
+ <!-- Positioned events -->
117
+ ${a.map(r=>this.renderTimeGridEvent(r,c))}
118
+
119
+ <!-- Now indicator -->
120
+ ${s!==null&&l>=0?d`<div
121
+ class="calendar__now-indicator"
122
+ style="top: ${s}%; left: ${l/c*100}%; width: ${100/c}%"
123
+ ></div>`:C}
124
+
125
+ <!-- Drag selection -->
126
+ ${this.dragSelection?(()=>{let r=Math.min(this.dragSelection.startSlot,this.dragSelection.endSlot),h=Math.max(this.dragSelection.startSlot,this.dragSelection.endSlot),u=this.dragSelection.dayIndex,v=this.getSlotCount(),p=100/c;return d`<div
127
+ class="calendar__drag-selection"
128
+ style="
129
+ top: ${r/v*100}%;
130
+ height: ${(h-r+1)/v*100}%;
131
+ left: ${u*p}%;
132
+ width: ${p}%;
133
+ "
134
+ ></div>`})():C}
135
+ </div>
136
+ </div>
137
+ </div>
138
+ `}renderTimeGridEvent(t,e){let i=this.getResolvedLocale(),n=y(t.event.start),a=y(t.event.end),o=`${S(n,i)} \u2013 ${S(a,i)}`,s=100/e,l=s/t.totalColumns,c=l*(t.colSpan??1),r=t.dayIndex*s+t.column*l,h=t.totalColumns>1?1:0;return d`
139
+ <div
140
+ class="calendar__event ${t.event.classNames?.join(" ")??""}"
141
+ part="event"
142
+ role="button"
143
+ tabindex="0"
144
+ data-event-id=${t.event.id}
145
+ aria-label="${t.event.title}, ${o}"
146
+ style=${W({position:"absolute",top:`${(t.startRow-1)/this.getSlotCount()*100}%`,height:`${(t.endRow-t.startRow)/this.getSlotCount()*100}%`,left:`calc(${r}% + ${h}px)`,width:`calc(${c}% - ${h*2}px)`,...t.event.backgroundColor?{"--_event-bg":t.event.backgroundColor}:{},...t.event.textColor?{"--_event-color":t.event.textColor}:{}})}
147
+ @click=${u=>this.handleEventClick(t.event,u.currentTarget,u)}
148
+ @keydown=${u=>this.handleEventKeydown(t.event,u.currentTarget,u)}
149
+ ${this.editable?this.refEventDrag(t.event):C}
150
+ >
151
+ ${this.eventContent?this.eventContent(t.event):d`<div class="calendar__event-title">${t.event.title}</div>
152
+ <div class="calendar__event-time">${o}</div>`}
153
+ ${this.editable&&t.event.editable!==!1?d`<div class="calendar__event-resize" aria-hidden="true"></div>`:C}
154
+ </div>
155
+ `}refEventDrag(t){return queueMicrotask(()=>{let e=this.shadowRoot?.querySelector(`.calendar__event[data-event-id="${t.id}"]`);e&&this.setupEventDrag(e,t)}),C}renderMonthGrid(){let t=z(this.currentDate.getFullYear(),this.currentDate.getMonth(),this.firstDay),e=Z(this.firstDay,this.getResolvedLocale());return d`
156
+ <div class="calendar__month-grid">
157
+ ${e.map(i=>d`<div class="calendar__month-weekday">${i}</div>`)}
158
+ ${t.map(i=>i.map(n=>this.renderMonthCell(n)))}
159
+ </div>
160
+ `}renderMonthCell(t){let{visible:e,overflow:i}=et(this.events,t.date,this.dayMaxEvents),n=this.getResolvedLocale();return d`
161
+ <div
162
+ class=${H({"calendar__month-cell":!0,"calendar__month-cell--outside":!t.isCurrentMonth,"calendar__month-cell--today":t.isToday})}
163
+ role="gridcell"
164
+ aria-label=${new Intl.DateTimeFormat(n,{month:"long",day:"numeric",year:"numeric"}).format(t.date)}
165
+ >
166
+ <div class=${H({"calendar__month-date":!0,"calendar__month-date--today":t.isToday,"calendar__month-date--outside":!t.isCurrentMonth})}>${t.date.getDate()}</div>
167
+ ${e.map(a=>d`
168
+ <div
169
+ class="calendar__month-event"
170
+ part="event"
171
+ role="button"
172
+ tabindex="0"
173
+ data-event-id=${a.event.id}
174
+ aria-label="${a.event.title}"
175
+ style=${W({...a.event.backgroundColor?{"--_event-bg":a.event.backgroundColor}:{},...a.event.textColor?{"--_event-color":a.event.textColor}:{}})}
176
+ @click=${o=>this.handleEventClick(a.event,o.currentTarget,o)}
177
+ @keydown=${o=>this.handleEventKeydown(a.event,o.currentTarget,o)}
178
+ >${a.event.allDay?a.event.title:`${S(y(a.event.start),n)} ${a.event.title}`}</div>
179
+ `)}
180
+ ${i>0?d`<div class="calendar__month-overflow">+${i} more</div>`:C}
181
+ </div>
182
+ `}renderResourceTimeGrid(t){let e=this.getSlotCount(),i=this.getHourLabels(),n=this.getResolvedLocale(),a=this.resources;return a.length===0?d`<div class="calendar__empty">No resources defined</div>`:d`
183
+ <div class="calendar__scroll-container">
184
+ <div class="calendar__sticky-header">
185
+ <!-- Resource headers -->
186
+ <div class="calendar__header" role="row" style="--_day-count: ${a.length*t.length}">
187
+ <div class="calendar__gutter-header" role="presentation"></div>
188
+ ${a.map(o=>d`
189
+ ${t.map(s=>d`
190
+ <div class="calendar__resource-header" role="columnheader">
191
+ <div>${o.title}</div>
192
+ ${t.length>1?d`<div style="font-size: var(--mz-font-size-2xs)">${J(s,n)}</div>`:C}
193
+ </div>
194
+ `)}
195
+ `)}
196
+ </div>
197
+ </div>
198
+
199
+ <div class="calendar__body">
200
+ <div class="calendar__gutter">
201
+ ${i.map(o=>o.isHour?d`<div class="calendar__hour-label"><span class="calendar__hour-full">${S(o.time,n)}</span><span class="calendar__hour-short">${B(o.time,n)}</span></div>`:d`<div class="calendar__hour-label"></div>`)}
202
+ </div>
203
+ <div
204
+ class="calendar__grid"
205
+ role="grid"
206
+ style="--_slot-count: ${e}; --_day-count: ${a.length*t.length}"
207
+ >
208
+ <!-- Slot lines -->
209
+ ${i.map((o,s)=>d`
210
+ <div
211
+ class=${H({"calendar__slot-line":!0,"calendar__slot-line--hour":o.isHour,"calendar__slot-line--half":!o.isHour})}
212
+ style="grid-row: ${s+1}; grid-column: 1 / -1"
213
+ ></div>
214
+ `)}
215
+
216
+ <!-- Events per resource -->
217
+ ${a.flatMap((o,s)=>{let l=this.events.filter(r=>r.resourceId===o.id);return K(l,t,this.slotDuration,this.slotMinTime,this.slotMaxTime).map(r=>{let h=a.length*t.length,u=s*t.length+r.dayIndex;return this.renderResourceTimeGridEvent(r,u,h)})})}
218
+ </div>
219
+ </div>
220
+ </div>
221
+ `}renderResourceTimeGridEvent(t,e,i){let n=this.getResolvedLocale(),a=y(t.event.start),o=y(t.event.end),s=`${S(a,n)} \u2013 ${S(o,n)}`,l=100/i,c=e*l;return d`
222
+ <div
223
+ class="calendar__event"
224
+ part="event"
225
+ role="button"
226
+ tabindex="0"
227
+ data-event-id=${t.event.id}
228
+ aria-label="${t.event.title}, ${s}"
229
+ style=${W({position:"absolute",top:`calc(${(t.startRow-1)/this.getSlotCount()*100}%)`,height:`calc(${(t.endRow-t.startRow)/this.getSlotCount()*100}%)`,left:`${c}%`,width:`${l}%`,...t.event.backgroundColor?{"--_event-bg":t.event.backgroundColor}:{},...t.event.textColor?{"--_event-color":t.event.textColor}:{}})}
230
+ @click=${r=>this.handleEventClick(t.event,r.currentTarget,r)}
231
+ @keydown=${r=>this.handleEventKeydown(t.event,r.currentTarget,r)}
232
+ >
233
+ ${this.eventContent?this.eventContent(t.event):d`<div class="calendar__event-title">${t.event.title}</div>
234
+ <div class="calendar__event-time">${s}</div>`}
235
+ </div>
236
+ `}renderResourceTimeline(){let t=this.getSlotCount(),e=this.getHourLabels(),i=this.getResolvedLocale(),n=this.resources;return n.length===0?d`<div class="calendar__empty">No resources defined</div>`:d`
237
+ <!-- Time axis header -->
238
+ <div class="calendar__header" role="row" style="--_day-count: ${t}">
239
+ <div class="calendar__gutter-header" role="presentation" style="min-width: 8rem"></div>
240
+ ${e.map(a=>d`
241
+ <div class="calendar__day-header" role="columnheader" style="font-size: var(--mz-font-size-2xs)">
242
+ ${a.isHour?S(a.time,i):""}
243
+ </div>
244
+ `)}
245
+ </div>
246
+
247
+ <!-- Resource rows -->
248
+ ${n.map(a=>{let o=this.events.filter(s=>s.resourceId===a.id);return d`
249
+ <div style="display: grid; grid-template-columns: 8rem 1fr">
250
+ <div class="calendar__timeline-resource-label">${a.title}</div>
251
+ <div class="calendar__timeline-row" style="--_slot-count: ${t}">
252
+ ${e.map((s,l)=>d`
253
+ <div
254
+ class=${H({"calendar__timeline-slot":!0,"calendar__timeline-slot--hour":s.isHour,"calendar__timeline-slot--half":!s.isHour})}
255
+ style="grid-column: ${l+1}"
256
+ ></div>
257
+ `)}
258
+ ${o.map(s=>{if(s.allDay)return C;let l=y(s.start),c=y(s.end),{hours:r,minutes:h}=x(this.slotMinTime),u=b(r,h),v=Math.max(X(l)-u,0),p=X(c)-u,T=I(v,this.slotDuration),D=I(p,this.slotDuration);return d`
259
+ <div
260
+ class="calendar__allday-event"
261
+ part="event"
262
+ role="button"
263
+ tabindex="0"
264
+ data-event-id=${s.id}
265
+ aria-label="${s.title}"
266
+ style=${W({position:"absolute",left:`${(T-1)/t*100}%`,width:`${(D-T)/t*100}%`,top:"2px",bottom:"2px",...s.backgroundColor?{"--_event-bg":s.backgroundColor}:{},...s.textColor?{"--_event-color":s.textColor}:{}})}
267
+ @click=${$=>this.handleEventClick(s,$.currentTarget,$)}
268
+ @keydown=${$=>this.handleEventKeydown(s,$.currentTarget,$)}
269
+ >${s.title}</div>
270
+ `})}
271
+ </div>
272
+ </div>
273
+ `})}
274
+ `}renderListView(){let t=this.getVisibleDays(),e=this.getResolvedLocale(),i=t.map(n=>{let a=M(n),o=M(E(n,1)),s=this.events.filter(l=>{let c=y(l.start),r=y(l.end);return c<o&&r>a}).sort((l,c)=>l.allDay&&!c.allDay?-1:!l.allDay&&c.allDay?1:y(l.start).getTime()-y(c.start).getTime());return{day:n,events:s}}).filter(n=>n.events.length>0);return i.length===0?d`<div class="calendar__empty">No events this week</div>`:d`
275
+ <div class="calendar__list">
276
+ ${i.map(({day:n,events:a})=>d`
277
+ <div class="calendar__list-day">
278
+ <div class="calendar__list-day-header">
279
+ <span>${new Intl.DateTimeFormat(e,{weekday:"long"}).format(n)}</span>
280
+ <span>${new Intl.DateTimeFormat(e,{month:"short",day:"numeric",year:"numeric"}).format(n)}</span>
281
+ </div>
282
+ ${a.map(o=>d`
283
+ <div
284
+ class="calendar__list-event"
285
+ part="event"
286
+ role="button"
287
+ tabindex="0"
288
+ data-event-id=${o.id}
289
+ aria-label="${o.title}"
290
+ @click=${s=>this.handleEventClick(o,s.currentTarget,s)}
291
+ @keydown=${s=>this.handleEventKeydown(o,s.currentTarget,s)}
292
+ >
293
+ <div
294
+ class="calendar__list-event-dot"
295
+ style=${o.backgroundColor?`--_event-bg: ${o.backgroundColor}`:""}
296
+ ></div>
297
+ <div class="calendar__list-event-time">
298
+ ${o.allDay?"all-day":`${S(y(o.start),e)} \u2013 ${S(y(o.end),e)}`}
299
+ </div>
300
+ <div class="calendar__list-event-title">${o.title}</div>
301
+ </div>
302
+ `)}
303
+ </div>
304
+ `)}
305
+ </div>
306
+ `}};m.styles=A,g([_({reflect:!0})],m.prototype,"view",2),g([_({attribute:"date"})],m.prototype,"date",2),g([_({type:Array})],m.prototype,"events",2),g([_({type:Array})],m.prototype,"resources",2),g([_({type:Number,attribute:"slot-duration"})],m.prototype,"slotDuration",2),g([_({attribute:"slot-min-time"})],m.prototype,"slotMinTime",2),g([_({attribute:"slot-max-time"})],m.prototype,"slotMaxTime",2),g([_({type:Boolean,attribute:"all-day-slot"})],m.prototype,"allDaySlot",2),g([_({type:Boolean})],m.prototype,"selectable",2),g([_({type:Boolean})],m.prototype,"editable",2),g([_({type:Boolean,attribute:"now-indicator"})],m.prototype,"nowIndicator",2),g([_({type:Number,attribute:"first-day"})],m.prototype,"firstDay",2),g([_()],m.prototype,"locale",2),g([_({type:Number})],m.prototype,"duration",2),g([_({type:Number,attribute:"day-max-events"})],m.prototype,"dayMaxEvents",2),g([_({type:Boolean,attribute:"no-scroll",reflect:!0})],m.prototype,"noScroll",2),g([_({attribute:!1})],m.prototype,"eventContent",2),g([F()],m.prototype,"currentDate",2),g([F()],m.prototype,"nowMinutes",2),g([F()],m.prototype,"dragSelection",2),g([F()],m.prototype,"_containerWidth",2),g([q("date")],m.prototype,"handleDateChange",1),g([q("view")],m.prototype,"handleViewChange",1),g([q("nowIndicator")],m.prototype,"handleNowIndicatorChange",1);function y(L){return L instanceof Date?L:new Date(L)}function X(L){return b(L.getHours(),L.getMinutes())}export{m as a};
307
+ //# sourceMappingURL=chunk.PJFNXC5P.js.map