@mantine/schedule 9.1.1 → 9.2.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.
- package/cjs/components/CurrentTimeIndicator/CurrentTimeIndicator.cjs.map +1 -1
- package/cjs/components/DayView/DayView.cjs +2 -1
- package/cjs/components/DayView/DayView.cjs.map +1 -1
- package/cjs/components/DayView/get-day-view-events/get-day-positioned-events.cjs +3 -2
- package/cjs/components/DayView/get-day-view-events/get-day-positioned-events.cjs.map +1 -1
- package/cjs/components/DayView/get-day-view-events/get-day-view-events.cjs +4 -2
- package/cjs/components/DayView/get-day-view-events/get-day-view-events.cjs.map +1 -1
- package/cjs/components/DragContext/DragContext.cjs.map +1 -1
- package/cjs/components/MobileMonthView/MobileMonthView.cjs.map +1 -1
- package/cjs/components/MobileMonthView/get-mobile-month-view-events.cjs.map +1 -1
- package/cjs/components/MonthView/MonthView.cjs +19 -9
- package/cjs/components/MonthView/MonthView.cjs.map +1 -1
- package/cjs/components/MonthView/get-month-view-events/add-event-to-day-groups.cjs.map +1 -1
- package/cjs/components/MonthView/get-month-view-events/calculate-event-position-in-week.cjs.map +1 -1
- package/cjs/components/MonthView/get-month-view-events/find-available-row.cjs.map +1 -1
- package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs.map +1 -1
- package/cjs/components/MonthView/get-month-view-events/get-month-view-events.cjs.map +1 -1
- package/cjs/components/MonthView/get-month-view-events/get-weeks-in-range.cjs.map +1 -1
- package/cjs/components/MonthView/get-renderable-month-event-segments.cjs +121 -0
- package/cjs/components/MonthView/get-renderable-month-event-segments.cjs.map +1 -0
- package/cjs/components/MonthView/handle-month-view-key-down.cjs.map +1 -1
- package/cjs/components/MoreEvents/MoreEvents.cjs.map +1 -1
- package/cjs/components/Schedule/Schedule.cjs.map +1 -1
- package/cjs/components/ScheduleEvent/ScheduleEvent.cjs.map +1 -1
- package/cjs/components/ScheduleEvent/ScheduleEvent.module.cjs.map +1 -1
- package/cjs/components/ScheduleHeader/HeaderControl/HeaderControl.cjs.map +1 -1
- package/cjs/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.cjs.map +1 -1
- package/cjs/components/ScheduleHeader/ScheduleHeader.cjs.map +1 -1
- package/cjs/components/ScheduleHeader/ScheduleHeaderBase.cjs.map +1 -1
- package/cjs/components/ScheduleHeader/ScheduleHeaderContext.cjs.map +1 -1
- package/cjs/components/ScheduleHeader/ViewSelect/ViewSelect.cjs.map +1 -1
- package/cjs/components/WeekView/WeekView.cjs +1 -0
- package/cjs/components/WeekView/WeekView.cjs.map +1 -1
- package/cjs/components/WeekView/WeekViewDay.cjs +5 -2
- package/cjs/components/WeekView/WeekViewDay.cjs.map +1 -1
- package/cjs/components/WeekView/get-week-label/get-week-label.cjs.map +1 -1
- package/cjs/components/WeekView/get-week-view-events/assign-event-rows.cjs.map +1 -1
- package/cjs/components/WeekView/get-week-view-events/calculate-all-day-event-offset.cjs.map +1 -1
- package/cjs/components/WeekView/get-week-view-events/calculate-all-day-event-width.cjs.map +1 -1
- package/cjs/components/WeekView/get-week-view-events/calculate-event-days.cjs.map +1 -1
- package/cjs/components/WeekView/get-week-view-events/calculate-regular-event-overlaps.cjs.map +1 -1
- package/cjs/components/WeekView/get-week-view-events/filter-week-view-events.cjs.map +1 -1
- package/cjs/components/WeekView/get-week-view-events/find-available-column.cjs.map +1 -1
- package/cjs/components/WeekView/get-week-view-events/get-event-end-date.cjs.map +1 -1
- package/cjs/components/WeekView/get-week-view-events/get-hanging-status.cjs.map +1 -1
- package/cjs/components/WeekView/get-week-view-events/get-week-positioned-events.cjs +5 -3
- package/cjs/components/WeekView/get-week-view-events/get-week-positioned-events.cjs.map +1 -1
- package/cjs/components/WeekView/get-week-view-events/get-week-view-events.cjs.map +1 -1
- package/cjs/components/WeekView/handle-week-view-key-down.cjs.map +1 -1
- package/cjs/components/YearView/YearView.cjs.map +1 -1
- package/cjs/components/YearView/YearViewMonth.cjs.map +1 -1
- package/cjs/components/YearView/get-year-view-events/get-year-view-events.cjs.map +1 -1
- package/cjs/components/YearView/handle-year-view-key-down.cjs.map +1 -1
- package/cjs/hooks/use-auto-scroll-on-drag.cjs.map +1 -1
- package/cjs/hooks/use-drag-drop-handlers.cjs.map +1 -1
- package/cjs/hooks/use-drag-state.cjs.map +1 -1
- package/cjs/hooks/use-event-resize.cjs +9 -5
- package/cjs/hooks/use-event-resize.cjs.map +1 -1
- package/cjs/hooks/use-slot-drag-select.cjs.map +1 -1
- package/cjs/labels.cjs.map +1 -1
- package/cjs/utils/calculate-drop-time/calculate-drop-time.cjs.map +1 -1
- package/cjs/utils/calculate-month-drop-date/calculate-month-drop-date.cjs.map +1 -1
- package/cjs/utils/clamp-interval-minutes/clamp-interval-minutes.cjs.map +1 -1
- package/cjs/utils/expand-recurring-events/expand-recurring-events.cjs.map +1 -1
- package/cjs/utils/format-date/format-date.cjs.map +1 -1
- package/cjs/utils/get-business-hours-mod/get-business-hours-mod.cjs +20 -3
- package/cjs/utils/get-business-hours-mod/get-business-hours-mod.cjs.map +1 -1
- package/cjs/utils/get-current-time-position/get-current-time-position.cjs.map +1 -1
- package/cjs/utils/get-day-position/get-day-position.cjs +11 -8
- package/cjs/utils/get-day-position/get-day-position.cjs.map +1 -1
- package/cjs/utils/get-day-time-intervals/get-day-time-intervals.cjs.map +1 -1
- package/cjs/utils/get-end-of-week/get-end-of-week.cjs.map +1 -1
- package/cjs/utils/get-month-days/get-month-days.cjs.map +1 -1
- package/cjs/utils/get-month-range/get-month-range.cjs.map +1 -1
- package/cjs/utils/get-months-by-quarter/get-months-by-quarter.cjs.map +1 -1
- package/cjs/utils/get-months-list/get-months-list.cjs.map +1 -1
- package/cjs/utils/get-start-of-week/get-start-of-week.cjs.map +1 -1
- package/cjs/utils/get-visible-events/get-visible-events.cjs.map +1 -1
- package/cjs/utils/get-week-days/get-week-days.cjs.map +1 -1
- package/cjs/utils/get-week-number/get-week-number.cjs.map +1 -1
- package/cjs/utils/get-weekdays-names/get-weekdays-names.cjs.map +1 -1
- package/cjs/utils/get-years-list/get-years-list.cjs.map +1 -1
- package/cjs/utils/is-after-min-date/is-after-min-date.cjs.map +1 -1
- package/cjs/utils/is-all-day-event/is-all-day-event.cjs.map +1 -1
- package/cjs/utils/is-before-max-date/is-before-max-date.cjs.map +1 -1
- package/cjs/utils/is-event-in-time-range/is-event-in-time-range.cjs.map +1 -1
- package/cjs/utils/is-events-overlap/is-events-overlap.cjs.map +1 -1
- package/cjs/utils/is-in-time-range/is-in-time-range.cjs.map +1 -1
- package/cjs/utils/is-multiday-event/is-multiday-event.cjs.map +1 -1
- package/cjs/utils/is-same-month/is-same-month.cjs.map +1 -1
- package/cjs/utils/is-within-week/is-within-week.cjs.map +1 -1
- package/cjs/utils/next-week/next-week.cjs.map +1 -1
- package/cjs/utils/parse-time-string/parse-time-string.cjs.map +1 -1
- package/cjs/utils/previous-week/previous-week.cjs.map +1 -1
- package/cjs/utils/sort-events/sort-events.cjs.map +1 -1
- package/cjs/utils/to-date-string/to-date-string.cjs.map +1 -1
- package/cjs/utils/to-time-string/to-time-string.cjs.map +1 -1
- package/cjs/utils/validate-event/validate-event.cjs.map +1 -1
- package/esm/components/CurrentTimeIndicator/CurrentTimeIndicator.mjs.map +1 -1
- package/esm/components/DayView/DayView.mjs +2 -1
- package/esm/components/DayView/DayView.mjs.map +1 -1
- package/esm/components/DayView/get-day-view-events/get-day-positioned-events.mjs +3 -2
- package/esm/components/DayView/get-day-view-events/get-day-positioned-events.mjs.map +1 -1
- package/esm/components/DayView/get-day-view-events/get-day-view-events.mjs +4 -2
- package/esm/components/DayView/get-day-view-events/get-day-view-events.mjs.map +1 -1
- package/esm/components/DragContext/DragContext.mjs.map +1 -1
- package/esm/components/MobileMonthView/MobileMonthView.mjs.map +1 -1
- package/esm/components/MobileMonthView/get-mobile-month-view-events.mjs.map +1 -1
- package/esm/components/MonthView/MonthView.mjs +19 -9
- package/esm/components/MonthView/MonthView.mjs.map +1 -1
- package/esm/components/MonthView/get-month-view-events/add-event-to-day-groups.mjs.map +1 -1
- package/esm/components/MonthView/get-month-view-events/calculate-event-position-in-week.mjs.map +1 -1
- package/esm/components/MonthView/get-month-view-events/find-available-row.mjs.map +1 -1
- package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs.map +1 -1
- package/esm/components/MonthView/get-month-view-events/get-month-view-events.mjs.map +1 -1
- package/esm/components/MonthView/get-month-view-events/get-weeks-in-range.mjs.map +1 -1
- package/esm/components/MonthView/get-renderable-month-event-segments.mjs +121 -0
- package/esm/components/MonthView/get-renderable-month-event-segments.mjs.map +1 -0
- package/esm/components/MonthView/handle-month-view-key-down.mjs.map +1 -1
- package/esm/components/MoreEvents/MoreEvents.mjs.map +1 -1
- package/esm/components/Schedule/Schedule.mjs.map +1 -1
- package/esm/components/ScheduleEvent/ScheduleEvent.mjs.map +1 -1
- package/esm/components/ScheduleEvent/ScheduleEvent.module.mjs.map +1 -1
- package/esm/components/ScheduleHeader/HeaderControl/HeaderControl.mjs.map +1 -1
- package/esm/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.mjs.map +1 -1
- package/esm/components/ScheduleHeader/ScheduleHeader.mjs.map +1 -1
- package/esm/components/ScheduleHeader/ScheduleHeaderBase.mjs.map +1 -1
- package/esm/components/ScheduleHeader/ScheduleHeaderContext.mjs.map +1 -1
- package/esm/components/ScheduleHeader/ViewSelect/ViewSelect.mjs.map +1 -1
- package/esm/components/WeekView/WeekView.mjs +1 -0
- package/esm/components/WeekView/WeekView.mjs.map +1 -1
- package/esm/components/WeekView/WeekViewDay.mjs +5 -2
- package/esm/components/WeekView/WeekViewDay.mjs.map +1 -1
- package/esm/components/WeekView/get-week-label/get-week-label.mjs.map +1 -1
- package/esm/components/WeekView/get-week-view-events/assign-event-rows.mjs.map +1 -1
- package/esm/components/WeekView/get-week-view-events/calculate-all-day-event-offset.mjs.map +1 -1
- package/esm/components/WeekView/get-week-view-events/calculate-all-day-event-width.mjs.map +1 -1
- package/esm/components/WeekView/get-week-view-events/calculate-event-days.mjs.map +1 -1
- package/esm/components/WeekView/get-week-view-events/calculate-regular-event-overlaps.mjs.map +1 -1
- package/esm/components/WeekView/get-week-view-events/filter-week-view-events.mjs.map +1 -1
- package/esm/components/WeekView/get-week-view-events/find-available-column.mjs.map +1 -1
- package/esm/components/WeekView/get-week-view-events/get-event-end-date.mjs.map +1 -1
- package/esm/components/WeekView/get-week-view-events/get-hanging-status.mjs.map +1 -1
- package/esm/components/WeekView/get-week-view-events/get-week-positioned-events.mjs +5 -3
- package/esm/components/WeekView/get-week-view-events/get-week-positioned-events.mjs.map +1 -1
- package/esm/components/WeekView/get-week-view-events/get-week-view-events.mjs.map +1 -1
- package/esm/components/WeekView/handle-week-view-key-down.mjs.map +1 -1
- package/esm/components/YearView/YearView.mjs.map +1 -1
- package/esm/components/YearView/YearViewMonth.mjs.map +1 -1
- package/esm/components/YearView/get-year-view-events/get-year-view-events.mjs.map +1 -1
- package/esm/components/YearView/handle-year-view-key-down.mjs.map +1 -1
- package/esm/hooks/use-auto-scroll-on-drag.mjs.map +1 -1
- package/esm/hooks/use-drag-drop-handlers.mjs.map +1 -1
- package/esm/hooks/use-drag-state.mjs.map +1 -1
- package/esm/hooks/use-event-resize.mjs +9 -5
- package/esm/hooks/use-event-resize.mjs.map +1 -1
- package/esm/hooks/use-slot-drag-select.mjs.map +1 -1
- package/esm/labels.mjs.map +1 -1
- package/esm/utils/calculate-drop-time/calculate-drop-time.mjs.map +1 -1
- package/esm/utils/calculate-month-drop-date/calculate-month-drop-date.mjs.map +1 -1
- package/esm/utils/clamp-interval-minutes/clamp-interval-minutes.mjs.map +1 -1
- package/esm/utils/expand-recurring-events/expand-recurring-events.mjs.map +1 -1
- package/esm/utils/format-date/format-date.mjs.map +1 -1
- package/esm/utils/get-business-hours-mod/get-business-hours-mod.mjs +20 -3
- package/esm/utils/get-business-hours-mod/get-business-hours-mod.mjs.map +1 -1
- package/esm/utils/get-current-time-position/get-current-time-position.mjs.map +1 -1
- package/esm/utils/get-day-position/get-day-position.mjs +11 -8
- package/esm/utils/get-day-position/get-day-position.mjs.map +1 -1
- package/esm/utils/get-day-time-intervals/get-day-time-intervals.mjs.map +1 -1
- package/esm/utils/get-end-of-week/get-end-of-week.mjs.map +1 -1
- package/esm/utils/get-month-days/get-month-days.mjs.map +1 -1
- package/esm/utils/get-month-range/get-month-range.mjs.map +1 -1
- package/esm/utils/get-months-by-quarter/get-months-by-quarter.mjs.map +1 -1
- package/esm/utils/get-months-list/get-months-list.mjs.map +1 -1
- package/esm/utils/get-start-of-week/get-start-of-week.mjs.map +1 -1
- package/esm/utils/get-visible-events/get-visible-events.mjs.map +1 -1
- package/esm/utils/get-week-days/get-week-days.mjs.map +1 -1
- package/esm/utils/get-week-number/get-week-number.mjs.map +1 -1
- package/esm/utils/get-weekdays-names/get-weekdays-names.mjs.map +1 -1
- package/esm/utils/get-years-list/get-years-list.mjs.map +1 -1
- package/esm/utils/is-after-min-date/is-after-min-date.mjs.map +1 -1
- package/esm/utils/is-all-day-event/is-all-day-event.mjs.map +1 -1
- package/esm/utils/is-before-max-date/is-before-max-date.mjs.map +1 -1
- package/esm/utils/is-event-in-time-range/is-event-in-time-range.mjs.map +1 -1
- package/esm/utils/is-events-overlap/is-events-overlap.mjs.map +1 -1
- package/esm/utils/is-in-time-range/is-in-time-range.mjs.map +1 -1
- package/esm/utils/is-multiday-event/is-multiday-event.mjs.map +1 -1
- package/esm/utils/is-same-month/is-same-month.mjs.map +1 -1
- package/esm/utils/is-within-week/is-within-week.mjs.map +1 -1
- package/esm/utils/next-week/next-week.mjs.map +1 -1
- package/esm/utils/parse-time-string/parse-time-string.mjs.map +1 -1
- package/esm/utils/previous-week/previous-week.mjs.map +1 -1
- package/esm/utils/sort-events/sort-events.mjs.map +1 -1
- package/esm/utils/to-date-string/to-date-string.mjs.map +1 -1
- package/esm/utils/to-time-string/to-time-string.mjs.map +1 -1
- package/esm/utils/validate-event/validate-event.mjs.map +1 -1
- package/lib/components/DayView/get-day-view-events/get-day-positioned-events.d.ts +3 -1
- package/lib/components/DayView/get-day-view-events/get-day-view-events.d.ts +2 -1
- package/lib/components/MonthView/get-renderable-month-event-segments.d.ts +16 -0
- package/lib/components/Schedule/Schedule.d.ts +1 -1
- package/lib/components/WeekView/WeekView.d.ts +3 -2
- package/lib/components/WeekView/WeekViewDay.d.ts +3 -3
- package/lib/components/WeekView/get-week-view-events/get-week-positioned-events.d.ts +3 -1
- package/lib/utils/get-business-hours-mod/get-business-hours-mod.d.ts +12 -3
- package/lib/utils/get-day-position/get-day-position.d.ts +3 -1
- package/lib/utils/index.d.ts +1 -1
- package/package.json +4 -4
- package/styles.css +25 -0
- package/styles.layer.css +25 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonthView.cjs","names":["getMonthRange","getMonthViewEvents","expandRecurringEvents","useDragDropHandlers","calculateMonthDropDate","useSlotDragSelect","getMonthDays","isSameMonth","getWeekdaysNames","UnstyledButton","getWeekNumber","Box","ScheduleEvent","MoreEvents","toDateString","ScheduleHeaderBase","ScrollArea","DragContext","classes"],"sources":["../../../src/components/MonthView/MonthView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useRef } from 'react';\nimport {\n Box,\n BoxProps,\n createVarsResolver,\n DataAttributes,\n ElementProps,\n factory,\n Factory,\n getRadius,\n MantineRadius,\n ScrollArea,\n ScrollAreaProps,\n StylesApiProps,\n UnstyledButton,\n useMantineTheme,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { useDatesContext } from '@mantine/dates';\nimport { useDragDropHandlers } from '../../hooks/use-drag-drop-handlers';\nimport { useSlotDragSelect } from '../../hooks/use-slot-drag-select';\nimport { ScheduleLabelsOverride } from '../../labels';\nimport {\n DateLabelFormat,\n DateStringValue,\n DateTimeStringValue,\n DayOfWeek,\n ScheduleEventData,\n ScheduleMode,\n ScheduleViewLevel,\n} from '../../types';\nimport {\n calculateMonthDropDate,\n expandRecurringEvents,\n getMonthDays,\n getMonthRange,\n getWeekdaysNames,\n getWeekNumber,\n isSameMonth,\n toDateString,\n} from '../../utils';\nimport { DragContext } from '../DragContext/DragContext';\nimport { MoreEvents, MoreEventsProps } from '../MoreEvents/MoreEvents';\nimport { RenderEvent, RenderEventBody, ScheduleEvent } from '../ScheduleEvent/ScheduleEvent';\nimport { MonthYearSelectProps } from '../ScheduleHeader/MonthYearSelect/MonthYearSelect';\nimport { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';\nimport { ScheduleHeaderBase } from '../ScheduleHeader/ScheduleHeaderBase';\nimport { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';\nimport { getMonthViewEvents } from './get-month-view-events/get-month-view-events';\nimport { handleMonthViewKeyDown, MonthViewControlsRef } from './handle-month-view-key-down';\nimport classes from './MonthView.module.css';\n\nexport type MonthViewStylesNames =\n | 'monthView'\n | 'monthViewScrollArea'\n | 'monthViewInner'\n | 'monthViewWeek'\n | 'monthViewDay'\n | 'monthViewDayLabel'\n | 'monthViewWeekNumber'\n | 'monthViewWeekday'\n | 'monthViewWeekdays'\n | 'monthViewWeekdaysCorner'\n | 'monthViewEvents'\n | 'monthViewBackgroundEvent'\n | CombinedScheduleHeaderStylesNames;\n\nexport type MonthViewCssVariables = {\n monthView: '--month-view-radius' | '--month-view-max-events';\n};\n\nexport interface MonthViewProps\n extends BoxProps, StylesApiProps<MonthViewFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Date to display, Date object or date string in `YYYY-MM-DD 00:00:00` format */\n date: Date | string;\n\n /** Called with the new date value when a date is selected */\n onDateChange?: (value: DateStringValue) => void;\n\n /** If set, week numbers are displayed in the first column @default false */\n withWeekNumbers?: boolean;\n\n /** If set, weekdays names are displayed in the first row @default true */\n withWeekDays?: boolean;\n\n /** Locale passed down to dayjs, overrides value defined on `DatesProvider` */\n locale?: string;\n\n /** Number 0-6, where 0 – Sunday and 6 – Saturday. @default 1 – Monday */\n firstDayOfWeek?: DayOfWeek;\n\n /** `dayjs` format for weekdays names. By default, the first letter of the weekday. */\n weekdayFormat?: DateLabelFormat;\n\n /** Indices of weekend days, 0-6, where 0 is Sunday and 6 is Saturday. The default value is defined by `DatesProvider`. */\n weekendDays?: DayOfWeek[];\n\n /** Props passed down to the week number button */\n getWeekNumberProps?: (weekStartDate: DateStringValue) => Record<string, any>;\n\n /** Props passed down to the day button */\n getDayProps?: (date: DateStringValue) => Record<string, any>;\n\n /** Called when day is clicked */\n onDayClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Called with first day of the week when week number is clicked */\n onWeekNumberClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** If set, always renders 6 weeks in the month view @default true */\n consistentWeeks?: boolean;\n\n /** If set, highlights the current day @default true */\n highlightToday?: boolean;\n\n /** Key of `theme.radius` or any valid CSS value to set `border-radius` @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** If set, days from the previous and next months are displayed to fill the weeks @default true */\n withOutsideDays?: boolean;\n\n /** If set, the header is displayed @default true */\n withHeader?: boolean;\n\n /** Props passed down to `MonthYearSelect` component in the header */\n monthYearSelectProps?: Partial<MonthYearSelectProps>;\n\n /** Called when view level select button is clicked */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Props passed to previous month control */\n previousControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to next month control */\n nextControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to today control */\n todayControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to view level select */\n viewSelectProps?: Partial<ViewSelectProps> & DataAttributes;\n\n /** Events to display */\n events?: ScheduleEventData[];\n\n /** Props passed down to `MoreEvents` component */\n moreEventsProps?: Partial<MoreEventsProps>;\n\n /** Function to customize event body, `event` object is passed as first argument */\n renderEventBody?: RenderEventBody;\n\n /** Function to fully customize event rendering, receives all props that would be passed to the root element including children */\n renderEvent?: RenderEvent;\n\n /** If true, events can be dragged and dropped @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped on new date */\n onEventDrop?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => void;\n\n /** Function to determine if event can be dragged */\n canDragEvent?: (event: ScheduleEventData) => boolean;\n\n /** Called when any event drag starts */\n onEventDragStart?: (event: ScheduleEventData) => void;\n\n /** Called when any event drag ends */\n onEventDragEnd?: () => void;\n\n /** Called when event is clicked */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** If set, enables drag-to-select day ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a day range is selected by dragging */\n onSlotDragEnd?: (rangeStart: DateTimeStringValue, rangeEnd: DateTimeStringValue) => void;\n\n /** Labels override for i18n */\n labels?: ScheduleLabelsOverride;\n\n /** Interaction mode: 'default' allows all interactions, 'static' disables event interactions @default default */\n mode?: ScheduleMode;\n\n /** Props passed down to `ScrollArea` component */\n scrollAreaProps?: Partial<ScrollAreaProps> & DataAttributes;\n\n /** Called when an external item is dropped onto the schedule. Receives the `DataTransfer` object and the drop target datetime. */\n onExternalEventDrop?: (dataTransfer: DataTransfer, dropDateTime: DateTimeStringValue) => void;\n\n /** Max number of generated recurring instances per recurring series @default 2000 */\n recurrenceExpansionLimit?: number;\n\n /** Maximum number of events visible per day before \"+more\" indicator shows, value is clamped between 1 and 10 @default 2 */\n maxEventsPerDay?: number;\n}\n\nexport type MonthViewFactory = Factory<{\n props: MonthViewProps;\n ref: HTMLDivElement;\n stylesNames: MonthViewStylesNames;\n vars: MonthViewCssVariables;\n}>;\n\nconst varsResolver = createVarsResolver<MonthViewFactory>(\n (_theme, { radius, maxEventsPerDay }) => ({\n monthView: {\n '--month-view-radius': radius !== undefined ? getRadius(radius) : undefined,\n '--month-view-max-events':\n maxEventsPerDay !== undefined ? `${Math.min(10, Math.max(1, maxEventsPerDay))}` : undefined,\n },\n })\n);\n\nconst defaultProps = {\n __staticSelector: 'MonthView',\n withWeekDays: true,\n consistentWeeks: true,\n highlightToday: true,\n withOutsideDays: true,\n withHeader: true,\n weekdayFormat: 'ddd',\n withEventsDragAndDrop: false,\n withDragSlotSelect: false,\n mode: 'default',\n} satisfies Partial<MonthViewProps>;\n\nexport const MonthView = factory<MonthViewFactory>((_props) => {\n const props = useProps('MonthView', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n attributes,\n vars,\n mod,\n date,\n onDateChange,\n withWeekNumbers,\n withWeekDays,\n locale,\n weekdayFormat,\n firstDayOfWeek,\n weekendDays,\n __staticSelector,\n getDayProps,\n getWeekNumberProps,\n onDayClick,\n onWeekNumberClick,\n consistentWeeks,\n highlightToday,\n radius,\n withOutsideDays,\n withHeader,\n monthYearSelectProps,\n onViewChange,\n todayControlProps,\n nextControlProps,\n previousControlProps,\n viewSelectProps,\n events,\n moreEventsProps,\n renderEventBody,\n renderEvent,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n labels,\n mode,\n scrollAreaProps,\n onExternalEventDrop,\n recurrenceExpansionLimit,\n maxEventsPerDay: _maxEventsPerDay,\n ...others\n } = props;\n\n const maxEventsPerDay = Math.min(10, Math.max(1, _maxEventsPerDay ?? 2));\n\n const getStyles = useStyles<MonthViewFactory>({\n name: __staticSelector,\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n varsResolver,\n rootSelector: 'monthView',\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<MonthViewFactory>({\n classNames,\n styles,\n props,\n });\n\n const stylesApiProps = {\n classNames: resolvedClassNames,\n styles: resolvedStyles,\n attributes,\n __staticSelector,\n radius,\n };\n\n const theme = useMantineTheme();\n const ctx = useDatesContext();\n\n const range = getMonthRange({\n month: date,\n withOutsideDays,\n consistentWeeks,\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n });\n\n const expandedEvents = expandRecurringEvents({\n events,\n rangeStart: dayjs(range.start).startOf('day').toDate(),\n rangeEnd: dayjs(range.end).endOf('day').toDate(),\n expansionLimit: recurrenceExpansionLimit,\n });\n\n const monthEvents = getMonthViewEvents({\n date,\n events: expandedEvents,\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n withOutsideDays,\n consistentWeeks,\n });\n\n const handleExternalDrop = useCallback(\n (e: React.DragEvent, day: string) => {\n if (!onExternalEventDrop) {\n return;\n }\n onExternalEventDrop(e.dataTransfer, `${dayjs(day).format('YYYY-MM-DD')} 00:00:00`);\n },\n [onExternalEventDrop]\n );\n\n const dragDrop = useDragDropHandlers<string>({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: (targetDay: string, draggedEvent: ScheduleEventData) => {\n return calculateMonthDropDate({\n draggedEvent,\n targetDay,\n });\n },\n onExternalDrop: onExternalEventDrop ? handleExternalDrop : undefined,\n });\n\n const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static';\n\n const flatDaysRef = useRef<string[]>([]);\n\n const slotDragSelect = useSlotDragSelect({\n enabled: withDragSlotSelect && mode !== 'static',\n onDragEnd: (startIndex, endIndex) => {\n if (!onSlotDragEnd) {\n return;\n }\n const startDay = flatDaysRef.current[startIndex];\n const endDay = flatDaysRef.current[endIndex];\n if (startDay && endDay) {\n onSlotDragEnd(\n dayjs(startDay).startOf('day').format('YYYY-MM-DD HH:mm:ss'),\n dayjs(endDay).endOf('day').format('YYYY-MM-DD HH:mm:ss')\n );\n }\n },\n });\n\n const daysRef: MonthViewControlsRef = useRef<HTMLButtonElement[][]>([]);\n\n const monthDays = getMonthDays({\n month: dayjs(date).format('YYYY-MM-DD 00:00:00'),\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n consistentWeeks: consistentWeeks && withOutsideDays,\n });\n\n const firstDayIndex = (() => {\n for (let weekIndex = 0; weekIndex < monthDays.length; weekIndex++) {\n const week = monthDays[weekIndex];\n for (let dayIndex = 0; dayIndex < week.length; dayIndex++) {\n const day = week[dayIndex];\n const outside = !isSameMonth(date, day);\n if (!outside || withOutsideDays) {\n return { weekIndex, dayIndex };\n }\n }\n }\n return { weekIndex: 0, dayIndex: 0 };\n })();\n\n const weekdays = withWeekDays\n ? getWeekdaysNames({\n locale: ctx.getLocale(locale),\n format: weekdayFormat,\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n }).map((day, index) => (\n <div {...getStyles('monthViewWeekday')} key={index}>\n {day}\n </div>\n ))\n : null;\n\n const monthGroup = 'month';\n flatDaysRef.current = monthDays.flat();\n\n const weeks = monthDays.map((week, weekIndex) => {\n if (!daysRef.current[weekIndex]) {\n daysRef.current[weekIndex] = [];\n }\n\n const days = week.map((day, dayIndex) => {\n const outside = !isSameMonth(date, day);\n const weekend = ctx.getWeekendDays(weekendDays).includes(dayjs(day).day());\n const ariaLabel = dayjs(day)\n .locale(locale || ctx.locale)\n .format('MMMM D, YYYY');\n\n const dayProps = getDayProps?.(dayjs(day).format('YYYY-MM-DD')) || {};\n const today = dayjs(day).isSame(dayjs(), 'day') && highlightToday;\n\n if (outside && !withOutsideDays) {\n return (\n <div key={day} data-static {...getStyles('monthViewDay', { style: dayProps.style })} />\n );\n }\n\n const isFirstDay =\n weekIndex === firstDayIndex.weekIndex && dayIndex === firstDayIndex.dayIndex;\n\n const isDropTarget = dragDrop.isDropTarget(day);\n const flatIndex = weekIndex * 7 + dayIndex;\n const isDragSelected = slotDragSelect.isSlotSelected(flatIndex, monthGroup);\n\n return (\n <UnstyledButton\n aria-label={ariaLabel}\n {...dayProps}\n {...getStyles('monthViewDay', { className: dayProps.className, style: dayProps.style })}\n key={day}\n ref={(node) => {\n if (node) {\n if (!daysRef.current[weekIndex]) {\n daysRef.current[weekIndex] = [];\n }\n daysRef.current[weekIndex][dayIndex] = node;\n }\n }}\n data-drag-slot-index={withDragSlotSelect && mode !== 'static' ? flatIndex : undefined}\n data-drag-slot-group={withDragSlotSelect && mode !== 'static' ? monthGroup : undefined}\n onClick={\n mode === 'static'\n ? undefined\n : (event) => {\n onDayClick?.(dayjs(day).format('YYYY-MM-DD'), event);\n dayProps.onClick?.(event);\n }\n }\n onPointerDown={\n withDragSlotSelect && mode !== 'static'\n ? (e) =>\n slotDragSelect.handleSlotPointerDown(\n e as React.PointerEvent<HTMLButtonElement>,\n flatIndex,\n monthGroup\n )\n : undefined\n }\n onKeyDown={(event) => {\n handleMonthViewKeyDown({\n controlsRef: daysRef,\n weekIndex,\n dayIndex,\n event,\n });\n dayProps.onKeyDown?.(event);\n }}\n mod={[\n {\n outside,\n weekend,\n today,\n 'drop-target': isDropTarget,\n 'drag-selected': isDragSelected,\n static: mode === 'static',\n },\n dayProps.mod,\n ]}\n data-outside={outside || undefined}\n tabIndex={mode === 'static' ? -1 : isFirstDay ? 0 : -1}\n onDragOver={withDragHandlers ? (e) => dragDrop.handleDragOver(e, day) : undefined}\n onDragLeave={withDragHandlers ? dragDrop.handleDragLeave : undefined}\n onDrop={withDragHandlers ? (e) => dragDrop.handleDrop(e, day) : undefined}\n >\n <span data-today={today || undefined} {...getStyles('monthViewDayLabel')}>\n {dayjs(day).format('D')}\n </span>\n </UnstyledButton>\n );\n });\n\n const weekNumberProps = getWeekNumberProps?.(dayjs(week[0]).format('YYYY-MM-DD')) || {};\n const weekNumber = getWeekNumber(week);\n\n const backgroundEventNodes = (monthEvents.backgroundByWeek[weekIndex] || []).map((event) => {\n const colors = theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: 'light',\n autoContrast: true,\n });\n\n const bgEventBody =\n typeof renderEventBody === 'function' ? renderEventBody(event) : event.title;\n\n const bgEventProps = {\n key: `bg-${event.id}-${weekIndex}`,\n ...getStyles('monthViewBackgroundEvent', {\n style: {\n left: `calc(${event.position.startOffset}% + 2px)`,\n width: `calc(${event.position.width}% - 3px)`,\n },\n }),\n __vars: {\n '--bg-event-bg': colors.background,\n '--bg-event-color': colors.color,\n },\n children: bgEventBody,\n };\n\n if (typeof renderEvent === 'function') {\n return renderEvent(event, bgEventProps as any);\n }\n\n const { key: bgEventKey, ...restBgEventProps } = bgEventProps;\n return <Box key={bgEventKey} {...restBgEventProps} />;\n });\n\n const rowHeightPercent = 100 / maxEventsPerDay;\n\n const events = (monthEvents.groupedByWeek[weekIndex] || [])\n .filter((event) => event.position.row < maxEventsPerDay)\n .map((event) => {\n const isDraggable = dragDrop.isDraggableEvent(event);\n\n return (\n <ScheduleEvent\n key={event.id}\n event={event}\n nowrap\n autoSize\n hanging={event.position.hanging}\n draggable={isDraggable}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n radius={radius}\n mode={mode}\n onClick={onEventClick ? (e) => onEventClick(event, e) : undefined}\n style={{\n position: 'absolute',\n top: `calc(${event.position.row * rowHeightPercent}% + 1px)`,\n left: `calc(${event.position.startOffset}% + 1px)`,\n width: `calc(${event.position.width}% - 2px)`,\n height: `calc(${rowHeightPercent}% - 2px)`,\n }}\n />\n );\n });\n\n const moreEventsNodes = week.map((day, dayIndex) => {\n const dayEvents = monthEvents.groupedByDay[day] || [];\n const hiddenEventsCount = Math.max(0, dayEvents.length - maxEventsPerDay);\n\n if (hiddenEventsCount <= 0) {\n return null;\n }\n\n // Calculate position based on day's position within the week (each day is 1/7 of the week)\n const dayStartOffset = (dayIndex / 7) * 100;\n const dayWidth = (1 / 7) * 100;\n\n return (\n <MoreEvents\n key={`more-${day}`}\n events={dayEvents}\n moreEventsCount={hiddenEventsCount}\n mode={mode}\n labels={labels}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n onEventClick={onEventClick}\n style={{\n position: 'absolute',\n top: `calc(100% - 2px)`,\n left: `calc(${dayStartOffset}% + 1px)`,\n width: `calc(${dayWidth}% - 1px)`,\n height: '22px',\n paddingInline: 4,\n }}\n {...moreEventsProps}\n />\n );\n });\n\n return (\n <div {...getStyles('monthViewWeek')} key={weekIndex}>\n {withWeekNumbers && (\n <UnstyledButton\n key={weekNumber}\n aria-label={`Week ${weekNumber}`}\n {...weekNumberProps}\n onClick={\n mode === 'static'\n ? undefined\n : (event) => {\n onViewChange?.('week');\n onDateChange?.(toDateString(week[0]));\n onWeekNumberClick?.(dayjs(week[0]).format('YYYY-MM-DD'), event);\n weekNumberProps.onClick?.(event);\n }\n }\n mod={{ static: mode === 'static' }}\n tabIndex={mode === 'static' ? -1 : 0}\n {...getStyles('monthViewWeekNumber', {\n className: weekNumberProps.className,\n style: weekNumberProps.style,\n })}\n >\n {weekNumber}\n </UnstyledButton>\n )}\n\n <div {...getStyles('monthViewEvents')} key=\"week-events\">\n {backgroundEventNodes}\n {events}\n {moreEventsNodes}\n </div>\n\n {days}\n </div>\n );\n });\n\n const content = (\n <Box\n mod={[\n {\n 'with-week-numbers': withWeekNumbers,\n 'with-weekdays': withWeekDays,\n static: mode === 'static',\n 'slot-dragging': slotDragSelect.isDragging,\n },\n mod,\n ]}\n {...getStyles('monthView')}\n {...others}\n >\n {withHeader && (\n <ScheduleHeaderBase\n view=\"month\"\n navigationHandlers={{\n previous: () => toDateString(dayjs(date).subtract(1, 'month').startOf('month')),\n next: () => toDateString(dayjs(date).add(1, 'month').startOf('month')),\n today: () => toDateString(dayjs()),\n }}\n control={{\n monthYearSelect: {\n locale,\n yearValue: dayjs(date).get('year'),\n monthValue: dayjs(date).get('month'),\n onYearChange: (year) =>\n onDateChange?.(toDateString(dayjs(date).set('year', year).startOf('month'))),\n onMonthChange: (month) =>\n onDateChange?.(toDateString(dayjs(date).set('month', month).startOf('month'))),\n ...monthYearSelectProps,\n },\n }}\n labels={labels}\n onDateChange={onDateChange}\n onViewChange={onViewChange}\n previousControlProps={previousControlProps}\n nextControlProps={nextControlProps}\n todayControlProps={todayControlProps}\n viewSelectProps={viewSelectProps}\n stylesApiProps={stylesApiProps}\n />\n )}\n\n <ScrollArea\n scrollbarSize={4}\n {...scrollAreaProps}\n {...getStyles('monthViewScrollArea', {\n className: scrollAreaProps?.className,\n style: scrollAreaProps?.style,\n })}\n >\n <div {...getStyles('monthViewInner')}>\n {weekdays && (\n <div {...getStyles('monthViewWeekdays')}>\n {withWeekNumbers && <div {...getStyles('monthViewWeekdaysCorner')} />}\n {weekdays}\n </div>\n )}\n\n {weeks}\n </div>\n </ScrollArea>\n </Box>\n );\n\n if (withEventsDragAndDrop) {\n return <DragContext.Provider value={dragDrop.dragContextValue}>{content}</DragContext.Provider>;\n }\n\n return content;\n});\n\nMonthView.displayName = '@mantine/schedule/MonthView';\nMonthView.classes = classes;\nMonthView.varsResolver = varsResolver;\n\nexport namespace MonthView {\n export type Props = MonthViewProps;\n export type Factory = MonthViewFactory;\n export type StylesNames = MonthViewStylesNames;\n export type CssVariables = MonthViewCssVariables;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MonthView.cjs","names":["getMonthRange","getMonthViewEvents","expandRecurringEvents","useDragDropHandlers","calculateMonthDropDate","useSlotDragSelect","getMonthDays","isSameMonth","getWeekdaysNames","UnstyledButton","getWeekNumber","Box","getRenderableMonthEventSegments","ScheduleEvent","MoreEvents","toDateString","ScheduleHeaderBase","ScrollArea","DragContext","classes"],"sources":["../../../src/components/MonthView/MonthView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useRef } from 'react';\nimport {\n Box,\n BoxProps,\n createVarsResolver,\n DataAttributes,\n ElementProps,\n factory,\n Factory,\n getRadius,\n MantineRadius,\n ScrollArea,\n ScrollAreaProps,\n StylesApiProps,\n UnstyledButton,\n useMantineTheme,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { useDatesContext } from '@mantine/dates';\nimport { useDragDropHandlers } from '../../hooks/use-drag-drop-handlers';\nimport { useSlotDragSelect } from '../../hooks/use-slot-drag-select';\nimport { ScheduleLabelsOverride } from '../../labels';\nimport {\n DateLabelFormat,\n DateStringValue,\n DateTimeStringValue,\n DayOfWeek,\n ScheduleEventData,\n ScheduleMode,\n ScheduleViewLevel,\n} from '../../types';\nimport {\n calculateMonthDropDate,\n expandRecurringEvents,\n getMonthDays,\n getMonthRange,\n getWeekdaysNames,\n getWeekNumber,\n isSameMonth,\n toDateString,\n} from '../../utils';\nimport { DragContext } from '../DragContext/DragContext';\nimport { MoreEvents, MoreEventsProps } from '../MoreEvents/MoreEvents';\nimport { RenderEvent, RenderEventBody, ScheduleEvent } from '../ScheduleEvent/ScheduleEvent';\nimport { MonthYearSelectProps } from '../ScheduleHeader/MonthYearSelect/MonthYearSelect';\nimport { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';\nimport { ScheduleHeaderBase } from '../ScheduleHeader/ScheduleHeaderBase';\nimport { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';\nimport { getRenderableMonthEventSegments } from './get-renderable-month-event-segments';\nimport { getMonthViewEvents } from './get-month-view-events/get-month-view-events';\nimport { handleMonthViewKeyDown, MonthViewControlsRef } from './handle-month-view-key-down';\nimport classes from './MonthView.module.css';\n\nexport type MonthViewStylesNames =\n | 'monthView'\n | 'monthViewScrollArea'\n | 'monthViewInner'\n | 'monthViewWeek'\n | 'monthViewDay'\n | 'monthViewDayLabel'\n | 'monthViewWeekNumber'\n | 'monthViewWeekday'\n | 'monthViewWeekdays'\n | 'monthViewWeekdaysCorner'\n | 'monthViewEvents'\n | 'monthViewBackgroundEvent'\n | CombinedScheduleHeaderStylesNames;\n\nexport type MonthViewCssVariables = {\n monthView: '--month-view-radius' | '--month-view-max-events';\n};\n\nexport interface MonthViewProps\n extends BoxProps, StylesApiProps<MonthViewFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Date to display, Date object or date string in `YYYY-MM-DD 00:00:00` format */\n date: Date | string;\n\n /** Called with the new date value when a date is selected */\n onDateChange?: (value: DateStringValue) => void;\n\n /** If set, week numbers are displayed in the first column @default false */\n withWeekNumbers?: boolean;\n\n /** If set, weekdays names are displayed in the first row @default true */\n withWeekDays?: boolean;\n\n /** Locale passed down to dayjs, overrides value defined on `DatesProvider` */\n locale?: string;\n\n /** Number 0-6, where 0 – Sunday and 6 – Saturday. @default 1 – Monday */\n firstDayOfWeek?: DayOfWeek;\n\n /** `dayjs` format for weekdays names. By default, the first letter of the weekday. */\n weekdayFormat?: DateLabelFormat;\n\n /** Indices of weekend days, 0-6, where 0 is Sunday and 6 is Saturday. The default value is defined by `DatesProvider`. */\n weekendDays?: DayOfWeek[];\n\n /** Props passed down to the week number button */\n getWeekNumberProps?: (weekStartDate: DateStringValue) => Record<string, any>;\n\n /** Props passed down to the day button */\n getDayProps?: (date: DateStringValue) => Record<string, any>;\n\n /** Called when day is clicked */\n onDayClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Called with first day of the week when week number is clicked */\n onWeekNumberClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** If set, always renders 6 weeks in the month view @default true */\n consistentWeeks?: boolean;\n\n /** If set, highlights the current day @default true */\n highlightToday?: boolean;\n\n /** Key of `theme.radius` or any valid CSS value to set `border-radius` @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** If set, days from the previous and next months are displayed to fill the weeks @default true */\n withOutsideDays?: boolean;\n\n /** If set, the header is displayed @default true */\n withHeader?: boolean;\n\n /** Props passed down to `MonthYearSelect` component in the header */\n monthYearSelectProps?: Partial<MonthYearSelectProps>;\n\n /** Called when view level select button is clicked */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Props passed to previous month control */\n previousControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to next month control */\n nextControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to today control */\n todayControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to view level select */\n viewSelectProps?: Partial<ViewSelectProps> & DataAttributes;\n\n /** Events to display */\n events?: ScheduleEventData[];\n\n /** Props passed down to `MoreEvents` component */\n moreEventsProps?: Partial<MoreEventsProps>;\n\n /** Function to customize event body, `event` object is passed as first argument */\n renderEventBody?: RenderEventBody;\n\n /** Function to fully customize event rendering, receives all props that would be passed to the root element including children */\n renderEvent?: RenderEvent;\n\n /** If true, events can be dragged and dropped @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped on new date */\n onEventDrop?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => void;\n\n /** Function to determine if event can be dragged */\n canDragEvent?: (event: ScheduleEventData) => boolean;\n\n /** Called when any event drag starts */\n onEventDragStart?: (event: ScheduleEventData) => void;\n\n /** Called when any event drag ends */\n onEventDragEnd?: () => void;\n\n /** Called when event is clicked */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** If set, enables drag-to-select day ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a day range is selected by dragging */\n onSlotDragEnd?: (rangeStart: DateTimeStringValue, rangeEnd: DateTimeStringValue) => void;\n\n /** Labels override for i18n */\n labels?: ScheduleLabelsOverride;\n\n /** Interaction mode: 'default' allows all interactions, 'static' disables event interactions @default default */\n mode?: ScheduleMode;\n\n /** Props passed down to `ScrollArea` component */\n scrollAreaProps?: Partial<ScrollAreaProps> & DataAttributes;\n\n /** Called when an external item is dropped onto the schedule. Receives the `DataTransfer` object and the drop target datetime. */\n onExternalEventDrop?: (dataTransfer: DataTransfer, dropDateTime: DateTimeStringValue) => void;\n\n /** Max number of generated recurring instances per recurring series @default 2000 */\n recurrenceExpansionLimit?: number;\n\n /** Maximum number of events visible per day before \"+more\" indicator shows, value is clamped between 1 and 10 @default 2 */\n maxEventsPerDay?: number;\n}\n\nexport type MonthViewFactory = Factory<{\n props: MonthViewProps;\n ref: HTMLDivElement;\n stylesNames: MonthViewStylesNames;\n vars: MonthViewCssVariables;\n}>;\n\nconst varsResolver = createVarsResolver<MonthViewFactory>(\n (_theme, { radius, maxEventsPerDay }) => ({\n monthView: {\n '--month-view-radius': radius !== undefined ? getRadius(radius) : undefined,\n '--month-view-max-events':\n maxEventsPerDay !== undefined ? `${Math.min(10, Math.max(1, maxEventsPerDay))}` : undefined,\n },\n })\n);\n\nconst defaultProps = {\n __staticSelector: 'MonthView',\n withWeekDays: true,\n consistentWeeks: true,\n highlightToday: true,\n withOutsideDays: true,\n withHeader: true,\n weekdayFormat: 'ddd',\n withEventsDragAndDrop: false,\n withDragSlotSelect: false,\n mode: 'default',\n} satisfies Partial<MonthViewProps>;\n\nexport const MonthView = factory<MonthViewFactory>((_props) => {\n const props = useProps('MonthView', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n attributes,\n vars,\n mod,\n date,\n onDateChange,\n withWeekNumbers,\n withWeekDays,\n locale,\n weekdayFormat,\n firstDayOfWeek,\n weekendDays,\n __staticSelector,\n getDayProps,\n getWeekNumberProps,\n onDayClick,\n onWeekNumberClick,\n consistentWeeks,\n highlightToday,\n radius,\n withOutsideDays,\n withHeader,\n monthYearSelectProps,\n onViewChange,\n todayControlProps,\n nextControlProps,\n previousControlProps,\n viewSelectProps,\n events,\n moreEventsProps,\n renderEventBody,\n renderEvent,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n labels,\n mode,\n scrollAreaProps,\n onExternalEventDrop,\n recurrenceExpansionLimit,\n maxEventsPerDay: _maxEventsPerDay,\n ...others\n } = props;\n\n const maxEventsPerDay = Math.min(10, Math.max(1, _maxEventsPerDay ?? 2));\n\n const getStyles = useStyles<MonthViewFactory>({\n name: __staticSelector,\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n varsResolver,\n rootSelector: 'monthView',\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<MonthViewFactory>({\n classNames,\n styles,\n props,\n });\n\n const stylesApiProps = {\n classNames: resolvedClassNames,\n styles: resolvedStyles,\n attributes,\n __staticSelector,\n radius,\n };\n\n const theme = useMantineTheme();\n const ctx = useDatesContext();\n\n const range = getMonthRange({\n month: date,\n withOutsideDays,\n consistentWeeks,\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n });\n\n const expandedEvents = expandRecurringEvents({\n events,\n rangeStart: dayjs(range.start).startOf('day').toDate(),\n rangeEnd: dayjs(range.end).endOf('day').toDate(),\n expansionLimit: recurrenceExpansionLimit,\n });\n\n const monthEvents = getMonthViewEvents({\n date,\n events: expandedEvents,\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n withOutsideDays,\n consistentWeeks,\n });\n\n const handleExternalDrop = useCallback(\n (e: React.DragEvent, day: string) => {\n if (!onExternalEventDrop) {\n return;\n }\n onExternalEventDrop(e.dataTransfer, `${dayjs(day).format('YYYY-MM-DD')} 00:00:00`);\n },\n [onExternalEventDrop]\n );\n\n const dragDrop = useDragDropHandlers<string>({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: (targetDay: string, draggedEvent: ScheduleEventData) => {\n return calculateMonthDropDate({\n draggedEvent,\n targetDay,\n });\n },\n onExternalDrop: onExternalEventDrop ? handleExternalDrop : undefined,\n });\n\n const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static';\n\n const flatDaysRef = useRef<string[]>([]);\n\n const slotDragSelect = useSlotDragSelect({\n enabled: withDragSlotSelect && mode !== 'static',\n onDragEnd: (startIndex, endIndex) => {\n if (!onSlotDragEnd) {\n return;\n }\n const startDay = flatDaysRef.current[startIndex];\n const endDay = flatDaysRef.current[endIndex];\n if (startDay && endDay) {\n onSlotDragEnd(\n dayjs(startDay).startOf('day').format('YYYY-MM-DD HH:mm:ss'),\n dayjs(endDay).endOf('day').format('YYYY-MM-DD HH:mm:ss')\n );\n }\n },\n });\n\n const daysRef: MonthViewControlsRef = useRef<HTMLButtonElement[][]>([]);\n\n const monthDays = getMonthDays({\n month: dayjs(date).format('YYYY-MM-DD 00:00:00'),\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n consistentWeeks: consistentWeeks && withOutsideDays,\n });\n\n const firstDayIndex = (() => {\n for (let weekIndex = 0; weekIndex < monthDays.length; weekIndex++) {\n const week = monthDays[weekIndex];\n for (let dayIndex = 0; dayIndex < week.length; dayIndex++) {\n const day = week[dayIndex];\n const outside = !isSameMonth(date, day);\n if (!outside || withOutsideDays) {\n return { weekIndex, dayIndex };\n }\n }\n }\n return { weekIndex: 0, dayIndex: 0 };\n })();\n\n const weekdays = withWeekDays\n ? getWeekdaysNames({\n locale: ctx.getLocale(locale),\n format: weekdayFormat,\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n }).map((day, index) => (\n <div {...getStyles('monthViewWeekday')} key={index}>\n {day}\n </div>\n ))\n : null;\n\n const monthGroup = 'month';\n flatDaysRef.current = monthDays.flat();\n\n const weeks = monthDays.map((week, weekIndex) => {\n if (!daysRef.current[weekIndex]) {\n daysRef.current[weekIndex] = [];\n }\n\n const days = week.map((day, dayIndex) => {\n const outside = !isSameMonth(date, day);\n const weekend = ctx.getWeekendDays(weekendDays).includes(dayjs(day).day());\n const ariaLabel = dayjs(day)\n .locale(locale || ctx.locale)\n .format('MMMM D, YYYY');\n\n const dayProps = getDayProps?.(dayjs(day).format('YYYY-MM-DD')) || {};\n const today = dayjs(day).isSame(dayjs(), 'day') && highlightToday;\n\n if (outside && !withOutsideDays) {\n return (\n <div key={day} data-static {...getStyles('monthViewDay', { style: dayProps.style })} />\n );\n }\n\n const isFirstDay =\n weekIndex === firstDayIndex.weekIndex && dayIndex === firstDayIndex.dayIndex;\n\n const isDropTarget = dragDrop.isDropTarget(day);\n const flatIndex = weekIndex * 7 + dayIndex;\n const isDragSelected = slotDragSelect.isSlotSelected(flatIndex, monthGroup);\n\n return (\n <UnstyledButton\n aria-label={ariaLabel}\n {...dayProps}\n {...getStyles('monthViewDay', { className: dayProps.className, style: dayProps.style })}\n key={day}\n ref={(node) => {\n if (node) {\n if (!daysRef.current[weekIndex]) {\n daysRef.current[weekIndex] = [];\n }\n daysRef.current[weekIndex][dayIndex] = node;\n }\n }}\n data-drag-slot-index={withDragSlotSelect && mode !== 'static' ? flatIndex : undefined}\n data-drag-slot-group={withDragSlotSelect && mode !== 'static' ? monthGroup : undefined}\n onClick={\n mode === 'static'\n ? undefined\n : (event) => {\n onDayClick?.(dayjs(day).format('YYYY-MM-DD'), event);\n dayProps.onClick?.(event);\n }\n }\n onPointerDown={\n withDragSlotSelect && mode !== 'static'\n ? (e) =>\n slotDragSelect.handleSlotPointerDown(\n e as React.PointerEvent<HTMLButtonElement>,\n flatIndex,\n monthGroup\n )\n : undefined\n }\n onKeyDown={(event) => {\n handleMonthViewKeyDown({\n controlsRef: daysRef,\n weekIndex,\n dayIndex,\n event,\n });\n dayProps.onKeyDown?.(event);\n }}\n mod={[\n {\n outside,\n weekend,\n today,\n 'drop-target': isDropTarget,\n 'drag-selected': isDragSelected,\n static: mode === 'static',\n },\n dayProps.mod,\n ]}\n data-outside={outside || undefined}\n tabIndex={mode === 'static' ? -1 : isFirstDay ? 0 : -1}\n onDragOver={withDragHandlers ? (e) => dragDrop.handleDragOver(e, day) : undefined}\n onDragLeave={withDragHandlers ? dragDrop.handleDragLeave : undefined}\n onDrop={withDragHandlers ? (e) => dragDrop.handleDrop(e, day) : undefined}\n >\n <span data-today={today || undefined} {...getStyles('monthViewDayLabel')}>\n {dayjs(day).format('D')}\n </span>\n </UnstyledButton>\n );\n });\n\n const weekNumberProps = getWeekNumberProps?.(dayjs(week[0]).format('YYYY-MM-DD')) || {};\n const weekNumber = getWeekNumber(week);\n\n const backgroundEventNodes = (monthEvents.backgroundByWeek[weekIndex] || []).map((event) => {\n const colors = theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: 'light',\n autoContrast: true,\n });\n\n const bgEventBody =\n typeof renderEventBody === 'function' ? renderEventBody(event) : event.title;\n\n const bgEventProps = {\n key: `bg-${event.id}-${weekIndex}`,\n ...getStyles('monthViewBackgroundEvent', {\n style: {\n left: `calc(${event.position.startOffset}% + 2px)`,\n width: `calc(${event.position.width}% - 3px)`,\n },\n }),\n __vars: {\n '--bg-event-bg': colors.background,\n '--bg-event-color': colors.color,\n },\n children: bgEventBody,\n };\n\n if (typeof renderEvent === 'function') {\n return renderEvent(event, bgEventProps as any);\n }\n\n const { key: bgEventKey, ...restBgEventProps } = bgEventProps;\n return <Box key={bgEventKey} {...restBgEventProps} />;\n });\n\n const rowHeightPercent = 100 / maxEventsPerDay;\n\n const eventSegments = getRenderableMonthEventSegments({\n events: monthEvents.groupedByWeek[weekIndex] || [],\n groupedByDay: monthEvents.groupedByDay,\n maxEventsPerDay,\n week,\n });\n\n const events = eventSegments.map((segment) => {\n const isDraggable = dragDrop.isDraggableEvent(segment.event);\n\n return (\n <ScheduleEvent\n key={segment.key}\n event={segment.event}\n nowrap\n autoSize\n hanging={segment.position.hanging}\n draggable={isDraggable}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n radius={radius}\n mode={mode}\n mod={{ 'clip-start': segment.clipStart, 'clip-end': segment.clipEnd }}\n onClick={onEventClick ? (e) => onEventClick(segment.event, e) : undefined}\n style={{\n position: 'absolute',\n top: `calc(${segment.position.row * rowHeightPercent}% + 1px)`,\n left: `calc(${segment.position.startOffset}% + 1px)`,\n width: `calc(${segment.position.width}% - 2px)`,\n height: `calc(${rowHeightPercent}% - 2px)`,\n }}\n />\n );\n });\n\n const moreEventsNodes = week.map((day, dayIndex) => {\n const dayEvents = monthEvents.groupedByDay[day] || [];\n const hiddenEventsCount = Math.max(0, dayEvents.length - maxEventsPerDay);\n\n if (hiddenEventsCount <= 0) {\n return null;\n }\n\n // Calculate position based on day's position within the week (each day is 1/7 of the week)\n const dayStartOffset = (dayIndex / 7) * 100;\n const dayWidth = (1 / 7) * 100;\n\n return (\n <MoreEvents\n key={`more-${day}`}\n events={dayEvents}\n moreEventsCount={hiddenEventsCount}\n mode={mode}\n labels={labels}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n onEventClick={onEventClick}\n style={{\n position: 'absolute',\n top: `calc(100% - 2px)`,\n left: `calc(${dayStartOffset}% + 1px)`,\n width: `calc(${dayWidth}% - 1px)`,\n height: '22px',\n paddingInline: 4,\n }}\n {...moreEventsProps}\n />\n );\n });\n\n return (\n <div {...getStyles('monthViewWeek')} key={weekIndex}>\n {withWeekNumbers && (\n <UnstyledButton\n key={weekNumber}\n aria-label={`Week ${weekNumber}`}\n {...weekNumberProps}\n onClick={\n mode === 'static'\n ? undefined\n : (event) => {\n onViewChange?.('week');\n onDateChange?.(toDateString(week[0]));\n onWeekNumberClick?.(dayjs(week[0]).format('YYYY-MM-DD'), event);\n weekNumberProps.onClick?.(event);\n }\n }\n mod={{ static: mode === 'static' }}\n tabIndex={mode === 'static' ? -1 : 0}\n {...getStyles('monthViewWeekNumber', {\n className: weekNumberProps.className,\n style: weekNumberProps.style,\n })}\n >\n {weekNumber}\n </UnstyledButton>\n )}\n\n <div {...getStyles('monthViewEvents')} key=\"week-events\">\n {backgroundEventNodes}\n {events}\n {moreEventsNodes}\n </div>\n\n {days}\n </div>\n );\n });\n\n const content = (\n <Box\n mod={[\n {\n 'with-week-numbers': withWeekNumbers,\n 'with-weekdays': withWeekDays,\n static: mode === 'static',\n 'slot-dragging': slotDragSelect.isDragging,\n },\n mod,\n ]}\n {...getStyles('monthView')}\n {...others}\n >\n {withHeader && (\n <ScheduleHeaderBase\n view=\"month\"\n navigationHandlers={{\n previous: () => toDateString(dayjs(date).subtract(1, 'month').startOf('month')),\n next: () => toDateString(dayjs(date).add(1, 'month').startOf('month')),\n today: () => toDateString(dayjs()),\n }}\n control={{\n monthYearSelect: {\n locale,\n yearValue: dayjs(date).get('year'),\n monthValue: dayjs(date).get('month'),\n onYearChange: (year) =>\n onDateChange?.(toDateString(dayjs(date).set('year', year).startOf('month'))),\n onMonthChange: (month) =>\n onDateChange?.(toDateString(dayjs(date).set('month', month).startOf('month'))),\n ...monthYearSelectProps,\n },\n }}\n labels={labels}\n onDateChange={onDateChange}\n onViewChange={onViewChange}\n previousControlProps={previousControlProps}\n nextControlProps={nextControlProps}\n todayControlProps={todayControlProps}\n viewSelectProps={viewSelectProps}\n stylesApiProps={stylesApiProps}\n />\n )}\n\n <ScrollArea\n scrollbarSize={4}\n {...scrollAreaProps}\n {...getStyles('monthViewScrollArea', {\n className: scrollAreaProps?.className,\n style: scrollAreaProps?.style,\n })}\n >\n <div {...getStyles('monthViewInner')}>\n {weekdays && (\n <div {...getStyles('monthViewWeekdays')}>\n {withWeekNumbers && <div {...getStyles('monthViewWeekdaysCorner')} />}\n {weekdays}\n </div>\n )}\n\n {weeks}\n </div>\n </ScrollArea>\n </Box>\n );\n\n if (withEventsDragAndDrop) {\n return <DragContext.Provider value={dragDrop.dragContextValue}>{content}</DragContext.Provider>;\n }\n\n return content;\n});\n\nMonthView.displayName = '@mantine/schedule/MonthView';\nMonthView.classes = classes;\nMonthView.varsResolver = varsResolver;\n\nexport namespace MonthView {\n export type Props = MonthViewProps;\n export type Factory = MonthViewFactory;\n export type StylesNames = MonthViewStylesNames;\n export type CssVariables = MonthViewCssVariables;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAuNA,MAAM,gBAAA,GAAA,cAAA,qBACH,QAAQ,EAAE,QAAQ,uBAAuB,EACxC,WAAW;CACT,uBAAuB,WAAW,KAAA,KAAA,GAAA,cAAA,WAAsB,MAAM,IAAI,KAAA;CAClE,2BACE,oBAAoB,KAAA,IAAY,GAAG,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,eAAe,CAAC,MAAM,KAAA;AACtF,EACF,EACF;AAEA,MAAM,eAAe;CACnB,kBAAkB;CAClB,cAAc;CACd,iBAAiB;CACjB,gBAAgB;CAChB,iBAAiB;CACjB,YAAY;CACZ,eAAe;CACf,uBAAuB;CACvB,oBAAoB;CACpB,MAAM;AACR;AAEA,MAAa,aAAA,GAAA,cAAA,UAAuC,WAAW;CAC7D,MAAM,SAAA,GAAA,cAAA,UAAiB,aAAa,cAAc,MAAM;CACxD,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,YACA,MACA,KACA,MACA,cACA,iBACA,cACA,QACA,eACA,gBACA,aACA,kBACA,aACA,oBACA,YACA,mBACA,iBACA,gBACA,QACA,iBACA,YACA,sBACA,cACA,mBACA,kBACA,sBACA,iBACA,QACA,iBACA,iBACA,aACA,uBACA,aACA,cACA,kBACA,gBACA,cACA,oBACA,eACA,QACA,MACA,iBACA,qBACA,0BACA,iBAAiB,kBACjB,GAAG,WACD;CAEJ,MAAM,kBAAkB,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,oBAAoB,CAAC,CAAC;CAEvE,MAAM,aAAA,GAAA,cAAA,WAAwC;EAC5C,MAAM;EACN,SAAA,yBAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;CAChB,CAAC;CAED,MAAM,EAAE,oBAAoB,oBAAA,GAAA,cAAA,sBAA0D;EACpF;EACA;EACA;CACF,CAAC;CAED,MAAM,iBAAiB;EACrB,YAAY;EACZ,QAAQ;EACR;EACA;EACA;CACF;CAEA,MAAM,SAAA,GAAA,cAAA,iBAAwB;CAC9B,MAAM,OAAA,GAAA,eAAA,iBAAsB;CAE5B,MAAM,QAAQA,wBAAAA,cAAc;EAC1B,OAAO;EACP;EACA;EACA,gBAAgB,IAAI,kBAAkB,cAAc;CACtD,CAAC;CASD,MAAM,cAAcC,8BAAAA,mBAAmB;EACrC;EACA,QATqBC,gCAAAA,sBAAsB;GAC3C;GACA,aAAA,GAAA,MAAA,SAAkB,MAAM,KAAK,EAAE,QAAQ,KAAK,EAAE,OAAO;GACrD,WAAA,GAAA,MAAA,SAAgB,MAAM,GAAG,EAAE,MAAM,KAAK,EAAE,OAAO;GAC/C,gBAAgB;EAClB,CAIuB;EACrB,gBAAgB,IAAI,kBAAkB,cAAc;EACpD;EACA;CACF,CAAC;CAED,MAAM,sBAAA,GAAA,MAAA,cACH,GAAoB,QAAgB;EACnC,IAAI,CAAC,qBACH;EAEF,oBAAoB,EAAE,cAAc,IAAA,GAAA,MAAA,SAAS,GAAG,EAAE,OAAO,YAAY,EAAE,UAAU;CACnF,GACA,CAAC,mBAAmB,CACtB;CAEA,MAAM,WAAWC,+BAAAA,oBAA4B;EAC3C,SAAS;EACT;EACA;EACA;EACA;EACA;EACA,sBAAsB,WAAmB,iBAAoC;GAC3E,OAAOC,kCAAAA,uBAAuB;IAC5B;IACA;GACF,CAAC;EACH;EACA,gBAAgB,sBAAsB,qBAAqB,KAAA;CAC7D,CAAC;CAED,MAAM,oBAAoB,yBAAyB,CAAC,CAAC,wBAAwB,SAAS;CAEtF,MAAM,eAAA,GAAA,MAAA,QAA+B,CAAC,CAAC;CAEvC,MAAM,iBAAiBC,6BAAAA,kBAAkB;EACvC,SAAS,sBAAsB,SAAS;EACxC,YAAY,YAAY,aAAa;GACnC,IAAI,CAAC,eACH;GAEF,MAAM,WAAW,YAAY,QAAQ;GACrC,MAAM,SAAS,YAAY,QAAQ;GACnC,IAAI,YAAY,QACd,eAAA,GAAA,MAAA,SACQ,QAAQ,EAAE,QAAQ,KAAK,EAAE,OAAO,qBAAqB,IAAA,GAAA,MAAA,SACrD,MAAM,EAAE,MAAM,KAAK,EAAE,OAAO,qBAAqB,CACzD;EAEJ;CACF,CAAC;CAED,MAAM,WAAA,GAAA,MAAA,QAA8D,CAAC,CAAC;CAEtE,MAAM,YAAYC,uBAAAA,aAAa;EAC7B,QAAA,GAAA,MAAA,SAAa,IAAI,EAAE,OAAO,qBAAqB;EAC/C,gBAAgB,IAAI,kBAAkB,cAAc;EACpD,iBAAiB,mBAAmB;CACtC,CAAC;CAED,MAAM,uBAAuB;EAC3B,KAAK,IAAI,YAAY,GAAG,YAAY,UAAU,QAAQ,aAAa;GACjE,MAAM,OAAO,UAAU;GACvB,KAAK,IAAI,WAAW,GAAG,WAAW,KAAK,QAAQ,YAAY;IACzD,MAAM,MAAM,KAAK;IAEjB,IAAI,CAAC,CADYC,sBAAAA,YAAY,MAAM,GAAG,KACtB,iBACd,OAAO;KAAE;KAAW;IAAS;GAEjC;EACF;EACA,OAAO;GAAE,WAAW;GAAG,UAAU;EAAE;CACrC,GAAG;CAEH,MAAM,WAAW,eACbC,2BAAAA,iBAAiB;EACf,QAAQ,IAAI,UAAU,MAAM;EAC5B,QAAQ;EACR,gBAAgB,IAAI,kBAAkB,cAAc;CACtD,CAAC,EAAE,KAAK,KAAK,UACX,iBAAA,GAAA,MAAA,eAAC,OAAD;EAAK,GAAI,UAAU,kBAAkB;EAAG,KAAK;CAExC,GADF,GACE,CACN,IACD;CAEJ,MAAM,aAAa;CACnB,YAAY,UAAU,UAAU,KAAK;CAErC,MAAM,QAAQ,UAAU,KAAK,MAAM,cAAc;EAC/C,IAAI,CAAC,QAAQ,QAAQ,YACnB,QAAQ,QAAQ,aAAa,CAAC;EAGhC,MAAM,OAAO,KAAK,KAAK,KAAK,aAAa;GACvC,MAAM,UAAU,CAACD,sBAAAA,YAAY,MAAM,GAAG;GACtC,MAAM,UAAU,IAAI,eAAe,WAAW,EAAE,UAAA,GAAA,MAAA,SAAe,GAAG,EAAE,IAAI,CAAC;GACzE,MAAM,aAAA,GAAA,MAAA,SAAkB,GAAG,EACxB,OAAO,UAAU,IAAI,MAAM,EAC3B,OAAO,cAAc;GAExB,MAAM,WAAW,eAAA,GAAA,MAAA,SAAoB,GAAG,EAAE,OAAO,YAAY,CAAC,KAAK,CAAC;GACpE,MAAM,SAAA,GAAA,MAAA,SAAc,GAAG,EAAE,QAAA,GAAA,MAAA,SAAa,GAAG,KAAK,KAAK;GAEnD,IAAI,WAAW,CAAC,iBACd,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;IAAe,eAAA;IAAY,GAAI,UAAU,gBAAgB,EAAE,OAAO,SAAS,MAAM,CAAC;GAAI,GAA5E,GAA4E;GAI1F,MAAM,aACJ,cAAc,cAAc,aAAa,aAAa,cAAc;GAEtE,MAAM,eAAe,SAAS,aAAa,GAAG;GAC9C,MAAM,YAAY,YAAY,IAAI;GAClC,MAAM,iBAAiB,eAAe,eAAe,WAAW,UAAU;GAE1E,OACE,iBAAA,GAAA,MAAA,eAACE,cAAAA,gBAAD;IACE,cAAY;IACZ,GAAI;IACJ,GAAI,UAAU,gBAAgB;KAAE,WAAW,SAAS;KAAW,OAAO,SAAS;IAAM,CAAC;IACtF,KAAK;IACL,MAAM,SAAS;KACb,IAAI,MAAM;MACR,IAAI,CAAC,QAAQ,QAAQ,YACnB,QAAQ,QAAQ,aAAa,CAAC;MAEhC,QAAQ,QAAQ,WAAW,YAAY;KACzC;IACF;IACA,wBAAsB,sBAAsB,SAAS,WAAW,YAAY,KAAA;IAC5E,wBAAsB,sBAAsB,SAAS,WAAW,aAAa,KAAA;IAC7E,SACE,SAAS,WACL,KAAA,KACC,UAAU;KACT,cAAA,GAAA,MAAA,SAAmB,GAAG,EAAE,OAAO,YAAY,GAAG,KAAK;KACnD,SAAS,UAAU,KAAK;IAC1B;IAEN,eACE,sBAAsB,SAAS,YAC1B,MACC,eAAe,sBACb,GACA,WACA,UACF,IACF,KAAA;IAEN,YAAY,UAAU;KACpB,mCAAA,uBAAuB;MACrB,aAAa;MACb;MACA;MACA;KACF,CAAC;KACD,SAAS,YAAY,KAAK;IAC5B;IACA,KAAK,CACH;KACE;KACA;KACA;KACA,eAAe;KACf,iBAAiB;KACjB,QAAQ,SAAS;IACnB,GACA,SAAS,GACX;IACA,gBAAc,WAAW,KAAA;IACzB,UAAU,SAAS,WAAW,KAAK,aAAa,IAAI;IACpD,YAAY,oBAAoB,MAAM,SAAS,eAAe,GAAG,GAAG,IAAI,KAAA;IACxE,aAAa,mBAAmB,SAAS,kBAAkB,KAAA;IAC3D,QAAQ,oBAAoB,MAAM,SAAS,WAAW,GAAG,GAAG,IAAI,KAAA;GAKlD,GAHd,iBAAA,GAAA,kBAAA,KAAC,QAAD;IAAM,cAAY,SAAS,KAAA;IAAW,GAAI,UAAU,mBAAmB;iCAC9D,GAAG,EAAE,OAAO,GAAG;GAClB,CAAA,CACQ;EAEpB,CAAC;EAED,MAAM,kBAAkB,sBAAA,GAAA,MAAA,SAA2B,KAAK,EAAE,EAAE,OAAO,YAAY,CAAC,KAAK,CAAC;EACtF,MAAM,aAAaC,wBAAAA,cAAc,IAAI;EAErC,MAAM,wBAAwB,YAAY,iBAAiB,cAAc,CAAC,GAAG,KAAK,UAAU;GAC1F,MAAM,SAAS,MAAM,qBAAqB;IACxC,OAAO,MAAM,SAAS,MAAM;IAC5B;IACA,SAAS;IACT,cAAc;GAChB,CAAC;GAED,MAAM,cACJ,OAAO,oBAAoB,aAAa,gBAAgB,KAAK,IAAI,MAAM;GAEzE,MAAM,eAAe;IACnB,KAAK,MAAM,MAAM,GAAG,GAAG;IACvB,GAAG,UAAU,4BAA4B,EACvC,OAAO;KACL,MAAM,QAAQ,MAAM,SAAS,YAAY;KACzC,OAAO,QAAQ,MAAM,SAAS,MAAM;IACtC,EACF,CAAC;IACD,QAAQ;KACN,iBAAiB,OAAO;KACxB,oBAAoB,OAAO;IAC7B;IACA,UAAU;GACZ;GAEA,IAAI,OAAO,gBAAgB,YACzB,OAAO,YAAY,OAAO,YAAmB;GAG/C,MAAM,EAAE,KAAK,YAAY,GAAG,qBAAqB;GACjD,OAAO,iBAAA,GAAA,kBAAA,KAACC,cAAAA,KAAD,EAAsB,GAAI,iBAAmB,GAAnC,UAAmC;EACtD,CAAC;EAED,MAAM,mBAAmB,MAAM;EAS/B,MAAM,SAPgBC,4CAAAA,gCAAgC;GACpD,QAAQ,YAAY,cAAc,cAAc,CAAC;GACjD,cAAc,YAAY;GAC1B;GACA;EACF,CAE2B,EAAE,KAAK,YAAY;GAC5C,MAAM,cAAc,SAAS,iBAAiB,QAAQ,KAAK;GAE3D,OACE,iBAAA,GAAA,kBAAA,KAACC,sBAAAA,eAAD;IAEE,OAAO,QAAQ;IACf,QAAA;IACA,UAAA;IACA,SAAS,QAAQ,SAAS;IAC1B,WAAW;IACM;IACJ;IACL;IACF;IACN,KAAK;KAAE,cAAc,QAAQ;KAAW,YAAY,QAAQ;IAAQ;IACpE,SAAS,gBAAgB,MAAM,aAAa,QAAQ,OAAO,CAAC,IAAI,KAAA;IAChE,OAAO;KACL,UAAU;KACV,KAAK,QAAQ,QAAQ,SAAS,MAAM,iBAAiB;KACrD,MAAM,QAAQ,QAAQ,SAAS,YAAY;KAC3C,OAAO,QAAQ,QAAQ,SAAS,MAAM;KACtC,QAAQ,QAAQ,iBAAiB;IACnC;GACD,GAnBM,QAAQ,GAmBd;EAEL,CAAC;EAED,MAAM,kBAAkB,KAAK,KAAK,KAAK,aAAa;GAClD,MAAM,YAAY,YAAY,aAAa,QAAQ,CAAC;GACpD,MAAM,oBAAoB,KAAK,IAAI,GAAG,UAAU,SAAS,eAAe;GAExE,IAAI,qBAAqB,GACvB,OAAO;GAOT,OACE,iBAAA,GAAA,kBAAA,KAACC,mBAAAA,YAAD;IAEE,QAAQ;IACR,iBAAiB;IACX;IACE;IACS;IACJ;IACC;IACd,OAAO;KACL,UAAU;KACV,KAAK;KACL,MAAM,QAhBY,WAAW,IAAK,IAgBL;KAC7B,OAAO,QAhBK,IAAI,IAAK,IAgBG;KACxB,QAAQ;KACR,eAAe;IACjB;IACA,GAAI;GACL,GAjBM,QAAQ,KAiBd;EAEL,CAAC;EAED,OACE,iBAAA,GAAA,MAAA,eAAC,OAAD;GAAK,GAAI,UAAU,eAAe;GAAG,KAAK;EAkCrC,GAjCF,mBACC,iBAAA,GAAA,kBAAA,KAACL,cAAAA,gBAAD;GAEE,cAAY,QAAQ;GACpB,GAAI;GACJ,SACE,SAAS,WACL,KAAA,KACC,UAAU;IACT,eAAe,MAAM;IACrB,eAAeM,uBAAAA,aAAa,KAAK,EAAE,CAAC;IACpC,qBAAA,GAAA,MAAA,SAA0B,KAAK,EAAE,EAAE,OAAO,YAAY,GAAG,KAAK;IAC9D,gBAAgB,UAAU,KAAK;GACjC;GAEN,KAAK,EAAE,QAAQ,SAAS,SAAS;GACjC,UAAU,SAAS,WAAW,KAAK;GACnC,GAAI,UAAU,uBAAuB;IACnC,WAAW,gBAAgB;IAC3B,OAAO,gBAAgB;GACzB,CAAC;aAEA;EACa,GArBT,UAqBS,GAGlB,iBAAA,GAAA,MAAA,eAAC,OAAD;GAAK,GAAI,UAAU,iBAAiB;GAAG,KAAI;EAItC,GAHF,sBACA,QACA,eACE,GAEJ,IACE;CAET,CAAC;CAED,MAAM,UACJ,iBAAA,GAAA,kBAAA,MAACJ,cAAAA,KAAD;EACE,KAAK,CACH;GACE,qBAAqB;GACrB,iBAAiB;GACjB,QAAQ,SAAS;GACjB,iBAAiB,eAAe;EAClC,GACA,GACF;EACA,GAAI,UAAU,WAAW;EACzB,GAAI;YAXN,CAaG,cACC,iBAAA,GAAA,kBAAA,KAACK,2BAAAA,oBAAD;GACE,MAAK;GACL,oBAAoB;IAClB,gBAAgBD,uBAAAA,cAAAA,GAAAA,MAAAA,SAAmB,IAAI,EAAE,SAAS,GAAG,OAAO,EAAE,QAAQ,OAAO,CAAC;IAC9E,YAAYA,uBAAAA,cAAAA,GAAAA,MAAAA,SAAmB,IAAI,EAAE,IAAI,GAAG,OAAO,EAAE,QAAQ,OAAO,CAAC;IACrE,aAAaA,uBAAAA,cAAAA,GAAAA,MAAAA,SAAmB,CAAC;GACnC;GACA,SAAS,EACP,iBAAiB;IACf;IACA,YAAA,GAAA,MAAA,SAAiB,IAAI,EAAE,IAAI,MAAM;IACjC,aAAA,GAAA,MAAA,SAAkB,IAAI,EAAE,IAAI,OAAO;IACnC,eAAe,SACb,eAAeA,uBAAAA,cAAAA,GAAAA,MAAAA,SAAmB,IAAI,EAAE,IAAI,QAAQ,IAAI,EAAE,QAAQ,OAAO,CAAC,CAAC;IAC7E,gBAAgB,UACd,eAAeA,uBAAAA,cAAAA,GAAAA,MAAAA,SAAmB,IAAI,EAAE,IAAI,SAAS,KAAK,EAAE,QAAQ,OAAO,CAAC,CAAC;IAC/E,GAAG;GACL,EACF;GACQ;GACM;GACA;GACQ;GACJ;GACC;GACF;GACD;EACjB,CAAA,GAGH,iBAAA,GAAA,kBAAA,KAACE,cAAAA,YAAD;GACE,eAAe;GACf,GAAI;GACJ,GAAI,UAAU,uBAAuB;IACnC,WAAW,iBAAiB;IAC5B,OAAO,iBAAiB;GAC1B,CAAC;aAED,iBAAA,GAAA,kBAAA,MAAC,OAAD;IAAK,GAAI,UAAU,gBAAgB;cAAnC,CACG,YACC,iBAAA,GAAA,kBAAA,MAAC,OAAD;KAAK,GAAI,UAAU,mBAAmB;eAAtC,CACG,mBAAmB,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,GAAI,UAAU,yBAAyB,EAAI,CAAA,GACnE,QACE;QAGN,KACE;;EACK,CAAA,CACT;;CAGP,IAAI,uBACF,OAAO,iBAAA,GAAA,kBAAA,KAACC,oBAAAA,YAAY,UAAb;EAAsB,OAAO,SAAS;YAAmB;CAA8B,CAAA;CAGhG,OAAO;AACT,CAAC;AAED,UAAU,cAAc;AACxB,UAAU,UAAUC,yBAAAA;AACpB,UAAU,eAAe"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-event-to-day-groups.cjs","names":[],"sources":["../../../../src/components/MonthView/get-month-view-events/add-event-to-day-groups.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { MonthPositionedEventData } from '../../../types';\n\ninterface AddEventToDayGroupsInput {\n positionedEvent: MonthPositionedEventData;\n eventStart: dayjs.Dayjs;\n eventEnd: dayjs.Dayjs;\n groupedByDay: { [date: string]: MonthPositionedEventData[] };\n eventsAddedToDay: Set<string>;\n weekIdx: number;\n}\n\nexport function addEventToDayGroups({\n positionedEvent,\n eventStart,\n eventEnd,\n groupedByDay,\n eventsAddedToDay,\n weekIdx,\n}: AddEventToDayGroupsInput): void {\n if (weekIdx === 0 || !eventsAddedToDay.has(positionedEvent.id.toString())) {\n let dayDate = eventStart;\n while (dayDate.isBefore(eventEnd) || dayDate.isSame(eventEnd, 'day')) {\n const dayDateStr = dayDate.format('YYYY-MM-DD 00:00:00');\n if (groupedByDay[dayDateStr]) {\n groupedByDay[dayDateStr].push(positionedEvent);\n }\n dayDate = dayDate.add(1, 'day');\n }\n eventsAddedToDay.add(positionedEvent.id.toString());\n }\n}\n"],"mappings":";;AAYA,SAAgB,oBAAoB,EAClC,iBACA,YACA,UACA,cACA,kBACA,WACiC;
|
|
1
|
+
{"version":3,"file":"add-event-to-day-groups.cjs","names":[],"sources":["../../../../src/components/MonthView/get-month-view-events/add-event-to-day-groups.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { MonthPositionedEventData } from '../../../types';\n\ninterface AddEventToDayGroupsInput {\n positionedEvent: MonthPositionedEventData;\n eventStart: dayjs.Dayjs;\n eventEnd: dayjs.Dayjs;\n groupedByDay: { [date: string]: MonthPositionedEventData[] };\n eventsAddedToDay: Set<string>;\n weekIdx: number;\n}\n\nexport function addEventToDayGroups({\n positionedEvent,\n eventStart,\n eventEnd,\n groupedByDay,\n eventsAddedToDay,\n weekIdx,\n}: AddEventToDayGroupsInput): void {\n if (weekIdx === 0 || !eventsAddedToDay.has(positionedEvent.id.toString())) {\n let dayDate = eventStart;\n while (dayDate.isBefore(eventEnd) || dayDate.isSame(eventEnd, 'day')) {\n const dayDateStr = dayDate.format('YYYY-MM-DD 00:00:00');\n if (groupedByDay[dayDateStr]) {\n groupedByDay[dayDateStr].push(positionedEvent);\n }\n dayDate = dayDate.add(1, 'day');\n }\n eventsAddedToDay.add(positionedEvent.id.toString());\n }\n}\n"],"mappings":";;AAYA,SAAgB,oBAAoB,EAClC,iBACA,YACA,UACA,cACA,kBACA,WACiC;CACjC,IAAI,YAAY,KAAK,CAAC,iBAAiB,IAAI,gBAAgB,GAAG,SAAS,CAAC,GAAG;EACzE,IAAI,UAAU;EACd,OAAO,QAAQ,SAAS,QAAQ,KAAK,QAAQ,OAAO,UAAU,KAAK,GAAG;GACpE,MAAM,aAAa,QAAQ,OAAO,qBAAqB;GACvD,IAAI,aAAa,aACf,aAAa,YAAY,KAAK,eAAe;GAE/C,UAAU,QAAQ,IAAI,GAAG,KAAK;EAChC;EACA,iBAAiB,IAAI,gBAAgB,GAAG,SAAS,CAAC;CACpD;AACF"}
|
package/cjs/components/MonthView/get-month-view-events/calculate-event-position-in-week.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculate-event-position-in-week.cjs","names":[],"sources":["../../../../src/components/MonthView/get-month-view-events/calculate-event-position-in-week.ts"],"sourcesContent":["import dayjs from 'dayjs';\n\nexport type HangingStatus = 'none' | 'start' | 'end' | 'both';\n\ninterface CalculateEventPositionInput {\n eventStart: dayjs.Dayjs;\n eventEnd: dayjs.Dayjs;\n weekStart: dayjs.Dayjs;\n weekEnd: dayjs.Dayjs;\n isMultiday: boolean;\n}\n\ninterface EventPositionInWeek {\n startDayIndex: number;\n daysSpanned: number;\n startOffset: number;\n width: number;\n hanging: HangingStatus;\n}\n\nexport function calculateEventPositionInWeek({\n eventStart,\n eventEnd,\n weekStart,\n weekEnd,\n isMultiday,\n}: CalculateEventPositionInput): EventPositionInWeek {\n let displayStart = eventStart;\n let displayEnd = eventEnd;\n\n const hangingStart = eventStart.isBefore(weekStart);\n const hangingEnd = eventEnd.isAfter(weekEnd);\n const hanging: HangingStatus =\n hangingStart && hangingEnd ? 'both' : hangingStart ? 'start' : hangingEnd ? 'end' : 'none';\n\n if (displayStart.isBefore(weekStart)) {\n displayStart = weekStart;\n }\n if (displayEnd.isAfter(weekEnd)) {\n displayEnd = weekEnd;\n }\n\n const startDayIndex = displayStart.diff(weekStart, 'day');\n const endDayIndex = displayEnd.diff(weekStart, 'day');\n const daysSpanned = Math.max(1, endDayIndex - startDayIndex + (isMultiday ? 1 : 0));\n\n const startOffset = (startDayIndex / 7) * 100;\n const width = (daysSpanned / 7) * 100;\n\n return {\n startDayIndex,\n daysSpanned,\n startOffset,\n width,\n hanging,\n };\n}\n"],"mappings":";;AAoBA,SAAgB,6BAA6B,EAC3C,YACA,UACA,WACA,SACA,cACmD;CACnD,IAAI,eAAe;CACnB,IAAI,aAAa;CAEjB,MAAM,eAAe,WAAW,SAAS,
|
|
1
|
+
{"version":3,"file":"calculate-event-position-in-week.cjs","names":[],"sources":["../../../../src/components/MonthView/get-month-view-events/calculate-event-position-in-week.ts"],"sourcesContent":["import dayjs from 'dayjs';\n\nexport type HangingStatus = 'none' | 'start' | 'end' | 'both';\n\ninterface CalculateEventPositionInput {\n eventStart: dayjs.Dayjs;\n eventEnd: dayjs.Dayjs;\n weekStart: dayjs.Dayjs;\n weekEnd: dayjs.Dayjs;\n isMultiday: boolean;\n}\n\ninterface EventPositionInWeek {\n startDayIndex: number;\n daysSpanned: number;\n startOffset: number;\n width: number;\n hanging: HangingStatus;\n}\n\nexport function calculateEventPositionInWeek({\n eventStart,\n eventEnd,\n weekStart,\n weekEnd,\n isMultiday,\n}: CalculateEventPositionInput): EventPositionInWeek {\n let displayStart = eventStart;\n let displayEnd = eventEnd;\n\n const hangingStart = eventStart.isBefore(weekStart);\n const hangingEnd = eventEnd.isAfter(weekEnd);\n const hanging: HangingStatus =\n hangingStart && hangingEnd ? 'both' : hangingStart ? 'start' : hangingEnd ? 'end' : 'none';\n\n if (displayStart.isBefore(weekStart)) {\n displayStart = weekStart;\n }\n if (displayEnd.isAfter(weekEnd)) {\n displayEnd = weekEnd;\n }\n\n const startDayIndex = displayStart.diff(weekStart, 'day');\n const endDayIndex = displayEnd.diff(weekStart, 'day');\n const daysSpanned = Math.max(1, endDayIndex - startDayIndex + (isMultiday ? 1 : 0));\n\n const startOffset = (startDayIndex / 7) * 100;\n const width = (daysSpanned / 7) * 100;\n\n return {\n startDayIndex,\n daysSpanned,\n startOffset,\n width,\n hanging,\n };\n}\n"],"mappings":";;AAoBA,SAAgB,6BAA6B,EAC3C,YACA,UACA,WACA,SACA,cACmD;CACnD,IAAI,eAAe;CACnB,IAAI,aAAa;CAEjB,MAAM,eAAe,WAAW,SAAS,SAAS;CAClD,MAAM,aAAa,SAAS,QAAQ,OAAO;CAC3C,MAAM,UACJ,gBAAgB,aAAa,SAAS,eAAe,UAAU,aAAa,QAAQ;CAEtF,IAAI,aAAa,SAAS,SAAS,GACjC,eAAe;CAEjB,IAAI,WAAW,QAAQ,OAAO,GAC5B,aAAa;CAGf,MAAM,gBAAgB,aAAa,KAAK,WAAW,KAAK;CACxD,MAAM,cAAc,WAAW,KAAK,WAAW,KAAK;CACpD,MAAM,cAAc,KAAK,IAAI,GAAG,cAAc,iBAAiB,aAAa,IAAI,EAAE;CAKlF,OAAO;EACL;EACA;EACA,aANmB,gBAAgB,IAAK;EAOxC,OANa,cAAc,IAAK;EAOhC;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-available-row.cjs","names":[],"sources":["../../../../src/components/MonthView/get-month-view-events/find-available-row.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { MonthPositionedEventData } from '../../../types';\n\ninterface FindAvailableRowInput {\n existingEvents: MonthPositionedEventData[];\n startDayIndex: number;\n daysSpanned: number;\n weekStart: dayjs.Dayjs;\n}\n\nexport function findAvailableRow({\n existingEvents,\n startDayIndex,\n daysSpanned,\n weekStart,\n}: FindAvailableRowInput): number {\n let row = 0;\n\n for (const existing of existingEvents) {\n const existingStart = dayjs(existing.start).startOf('day');\n const existingDisplayStart =\n existingStart.isBefore(weekStart) || existingStart.isSame(weekStart, 'day')\n ? weekStart\n : existingStart;\n const existingDayIndex = existingDisplayStart.diff(weekStart, 'day');\n const existingWidth = existing.position?.width || 0;\n const existingDaysSpanned = (existingWidth / 100) * 7;\n\n if (\n existingDayIndex + existingDaysSpanned > startDayIndex &&\n existingDayIndex < startDayIndex + daysSpanned\n ) {\n row = Math.max(row, (existing.position?.row || 0) + 1);\n }\n }\n\n return row;\n}\n"],"mappings":";;;;;AAUA,SAAgB,iBAAiB,EAC/B,gBACA,eACA,aACA,aACgC;CAChC,IAAI,MAAM;
|
|
1
|
+
{"version":3,"file":"find-available-row.cjs","names":[],"sources":["../../../../src/components/MonthView/get-month-view-events/find-available-row.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { MonthPositionedEventData } from '../../../types';\n\ninterface FindAvailableRowInput {\n existingEvents: MonthPositionedEventData[];\n startDayIndex: number;\n daysSpanned: number;\n weekStart: dayjs.Dayjs;\n}\n\nexport function findAvailableRow({\n existingEvents,\n startDayIndex,\n daysSpanned,\n weekStart,\n}: FindAvailableRowInput): number {\n let row = 0;\n\n for (const existing of existingEvents) {\n const existingStart = dayjs(existing.start).startOf('day');\n const existingDisplayStart =\n existingStart.isBefore(weekStart) || existingStart.isSame(weekStart, 'day')\n ? weekStart\n : existingStart;\n const existingDayIndex = existingDisplayStart.diff(weekStart, 'day');\n const existingWidth = existing.position?.width || 0;\n const existingDaysSpanned = (existingWidth / 100) * 7;\n\n if (\n existingDayIndex + existingDaysSpanned > startDayIndex &&\n existingDayIndex < startDayIndex + daysSpanned\n ) {\n row = Math.max(row, (existing.position?.row || 0) + 1);\n }\n }\n\n return row;\n}\n"],"mappings":";;;;;AAUA,SAAgB,iBAAiB,EAC/B,gBACA,eACA,aACA,aACgC;CAChC,IAAI,MAAM;CAEV,KAAK,MAAM,YAAY,gBAAgB;EACrC,MAAM,iBAAA,GAAA,MAAA,SAAsB,SAAS,KAAK,EAAE,QAAQ,KAAK;EAKzD,MAAM,oBAHJ,cAAc,SAAS,SAAS,KAAK,cAAc,OAAO,WAAW,KAAK,IACtE,YACA,eACwC,KAAK,WAAW,KAAK;EAInE,IACE,oBAJoB,SAAS,UAAU,SAAS,KACL,MAAO,IAGT,iBACzC,mBAAmB,gBAAgB,aAEnC,MAAM,KAAK,IAAI,MAAM,SAAS,UAAU,OAAO,KAAK,CAAC;CAEzD;CAEA,OAAO;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-month-positioned-events.cjs","names":["getWeeksInRange","calculateEventPositionInWeek","findAvailableRow"],"sources":["../../../../src/components/MonthView/get-month-view-events/get-month-positioned-events.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport {\n AnyDateValue,\n DateStringValue,\n DayOfWeek,\n MonthPositionedEventData,\n ScheduleEventData,\n} from '../../../types';\nimport { addEventToDayGroups } from './add-event-to-day-groups';\nimport { calculateEventPositionInWeek } from './calculate-event-position-in-week';\nimport { findAvailableRow } from './find-available-row';\nimport { getWeeksInRange } from './get-weeks-in-range';\n\ninterface GetMonthPositionedEventsInput {\n /** Date (month start) at which events are positioned */\n date: AnyDateValue;\n\n /** List of all events that belong to the given month, extra events must be filtered out before passing to the function */\n events: ScheduleEventData[];\n\n /** First day of the week, 0 - Sunday, 1 - Monday, etc., used to calculate events positions */\n firstDayOfWeek?: DayOfWeek;\n\n /** Range of dates for which events should be displayed (includes outside days if withOutsideDays is true) */\n range?: {\n start: DateStringValue;\n end: DateStringValue;\n };\n}\n\n/** Events grouped by week index and by day */\nexport interface GroupedMonthEvents {\n /** Events grouped by week index (index within month) */\n groupedByWeek: {\n [weekIndex: string]: MonthPositionedEventData[];\n };\n\n /** Events grouped by day (YYYY-MM-DD format) */\n groupedByDay: {\n [date: string]: MonthPositionedEventData[];\n };\n\n /** Background events grouped by week index */\n backgroundByWeek: {\n [weekIndex: string]: MonthPositionedEventData[];\n };\n}\n\nexport function getMonthPositionedEvents({\n date,\n events,\n firstDayOfWeek = 1,\n range,\n}: GetMonthPositionedEventsInput): GroupedMonthEvents {\n const groupedByWeek: GroupedMonthEvents['groupedByWeek'] = {};\n const backgroundByWeek: GroupedMonthEvents['backgroundByWeek'] = {};\n const eventsAddedToDay = new Set<string>();\n\n const rangeStart = range ? dayjs(range.start) : dayjs(date).startOf('month');\n const rangeEnd = range ? dayjs(range.end) : dayjs(date).startOf('month').endOf('month');\n\n const { weeks, groupedByDay } = getWeeksInRange({\n rangeStart,\n rangeEnd,\n firstDayOfWeek,\n });\n\n for (let i = 0; i < weeks.length; i++) {\n groupedByWeek[i.toString()] = [];\n backgroundByWeek[i.toString()] = [];\n }\n\n for (const event of events) {\n const eventStart = dayjs(event.start).startOf('day');\n const rawEnd = dayjs(event.end);\n const endAtMidnight = rawEnd.hour() === 0 && rawEnd.minute() === 0 && rawEnd.second() === 0;\n const eventEnd = endAtMidnight\n ? rawEnd.startOf('day').subtract(1, 'day')\n : rawEnd.startOf('day');\n const isMultiday = eventEnd.isAfter(eventStart);\n\n for (let weekIdx = 0; weekIdx < weeks.length; weekIdx++) {\n const week = weeks[weekIdx];\n const weekStart = dayjs(week[0]).startOf('day');\n const weekEnd = dayjs(week[6]).endOf('day');\n\n if (\n (eventStart.isBefore(weekEnd) || eventStart.isSame(weekEnd, 'day')) &&\n (eventEnd.isAfter(weekStart) || eventEnd.isSame(weekStart, 'day'))\n ) {\n const { startDayIndex, daysSpanned, startOffset, width, hanging } =\n calculateEventPositionInWeek({\n eventStart,\n eventEnd,\n weekStart,\n weekEnd,\n isMultiday,\n });\n\n if (event.display === 'background') {\n backgroundByWeek[weekIdx.toString()].push({\n ...event,\n position: {\n startOffset,\n width,\n weekIndex: weekIdx,\n row: 0,\n hanging,\n },\n });\n continue;\n }\n\n const row = findAvailableRow({\n existingEvents: groupedByWeek[weekIdx.toString()],\n startDayIndex,\n daysSpanned,\n weekStart,\n });\n\n const positionedEvent: MonthPositionedEventData = {\n ...event,\n position: {\n startOffset,\n width,\n weekIndex: weekIdx,\n row,\n hanging,\n },\n };\n\n groupedByWeek[weekIdx.toString()].push(positionedEvent);\n\n addEventToDayGroups({\n positionedEvent,\n eventStart,\n eventEnd,\n groupedByDay,\n eventsAddedToDay,\n weekIdx,\n });\n }\n }\n }\n\n return {\n groupedByWeek,\n groupedByDay,\n backgroundByWeek,\n };\n}\n"],"mappings":";;;;;;;;;AAgDA,SAAgB,yBAAyB,EACvC,MACA,QACA,iBAAiB,GACjB,SACoD;CACpD,MAAM,gBAAqD,
|
|
1
|
+
{"version":3,"file":"get-month-positioned-events.cjs","names":["getWeeksInRange","calculateEventPositionInWeek","findAvailableRow"],"sources":["../../../../src/components/MonthView/get-month-view-events/get-month-positioned-events.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport {\n AnyDateValue,\n DateStringValue,\n DayOfWeek,\n MonthPositionedEventData,\n ScheduleEventData,\n} from '../../../types';\nimport { addEventToDayGroups } from './add-event-to-day-groups';\nimport { calculateEventPositionInWeek } from './calculate-event-position-in-week';\nimport { findAvailableRow } from './find-available-row';\nimport { getWeeksInRange } from './get-weeks-in-range';\n\ninterface GetMonthPositionedEventsInput {\n /** Date (month start) at which events are positioned */\n date: AnyDateValue;\n\n /** List of all events that belong to the given month, extra events must be filtered out before passing to the function */\n events: ScheduleEventData[];\n\n /** First day of the week, 0 - Sunday, 1 - Monday, etc., used to calculate events positions */\n firstDayOfWeek?: DayOfWeek;\n\n /** Range of dates for which events should be displayed (includes outside days if withOutsideDays is true) */\n range?: {\n start: DateStringValue;\n end: DateStringValue;\n };\n}\n\n/** Events grouped by week index and by day */\nexport interface GroupedMonthEvents {\n /** Events grouped by week index (index within month) */\n groupedByWeek: {\n [weekIndex: string]: MonthPositionedEventData[];\n };\n\n /** Events grouped by day (YYYY-MM-DD format) */\n groupedByDay: {\n [date: string]: MonthPositionedEventData[];\n };\n\n /** Background events grouped by week index */\n backgroundByWeek: {\n [weekIndex: string]: MonthPositionedEventData[];\n };\n}\n\nexport function getMonthPositionedEvents({\n date,\n events,\n firstDayOfWeek = 1,\n range,\n}: GetMonthPositionedEventsInput): GroupedMonthEvents {\n const groupedByWeek: GroupedMonthEvents['groupedByWeek'] = {};\n const backgroundByWeek: GroupedMonthEvents['backgroundByWeek'] = {};\n const eventsAddedToDay = new Set<string>();\n\n const rangeStart = range ? dayjs(range.start) : dayjs(date).startOf('month');\n const rangeEnd = range ? dayjs(range.end) : dayjs(date).startOf('month').endOf('month');\n\n const { weeks, groupedByDay } = getWeeksInRange({\n rangeStart,\n rangeEnd,\n firstDayOfWeek,\n });\n\n for (let i = 0; i < weeks.length; i++) {\n groupedByWeek[i.toString()] = [];\n backgroundByWeek[i.toString()] = [];\n }\n\n for (const event of events) {\n const eventStart = dayjs(event.start).startOf('day');\n const rawEnd = dayjs(event.end);\n const endAtMidnight = rawEnd.hour() === 0 && rawEnd.minute() === 0 && rawEnd.second() === 0;\n const eventEnd = endAtMidnight\n ? rawEnd.startOf('day').subtract(1, 'day')\n : rawEnd.startOf('day');\n const isMultiday = eventEnd.isAfter(eventStart);\n\n for (let weekIdx = 0; weekIdx < weeks.length; weekIdx++) {\n const week = weeks[weekIdx];\n const weekStart = dayjs(week[0]).startOf('day');\n const weekEnd = dayjs(week[6]).endOf('day');\n\n if (\n (eventStart.isBefore(weekEnd) || eventStart.isSame(weekEnd, 'day')) &&\n (eventEnd.isAfter(weekStart) || eventEnd.isSame(weekStart, 'day'))\n ) {\n const { startDayIndex, daysSpanned, startOffset, width, hanging } =\n calculateEventPositionInWeek({\n eventStart,\n eventEnd,\n weekStart,\n weekEnd,\n isMultiday,\n });\n\n if (event.display === 'background') {\n backgroundByWeek[weekIdx.toString()].push({\n ...event,\n position: {\n startOffset,\n width,\n weekIndex: weekIdx,\n row: 0,\n hanging,\n },\n });\n continue;\n }\n\n const row = findAvailableRow({\n existingEvents: groupedByWeek[weekIdx.toString()],\n startDayIndex,\n daysSpanned,\n weekStart,\n });\n\n const positionedEvent: MonthPositionedEventData = {\n ...event,\n position: {\n startOffset,\n width,\n weekIndex: weekIdx,\n row,\n hanging,\n },\n };\n\n groupedByWeek[weekIdx.toString()].push(positionedEvent);\n\n addEventToDayGroups({\n positionedEvent,\n eventStart,\n eventEnd,\n groupedByDay,\n eventsAddedToDay,\n weekIdx,\n });\n }\n }\n }\n\n return {\n groupedByWeek,\n groupedByDay,\n backgroundByWeek,\n };\n}\n"],"mappings":";;;;;;;;;AAgDA,SAAgB,yBAAyB,EACvC,MACA,QACA,iBAAiB,GACjB,SACoD;CACpD,MAAM,gBAAqD,CAAC;CAC5D,MAAM,mBAA2D,CAAC;CAClE,MAAM,mCAAmB,IAAI,IAAY;CAKzC,MAAM,EAAE,OAAO,iBAAiBA,2BAAAA,gBAAgB;EAC9C,YAJiB,SAAA,GAAA,MAAA,SAAc,MAAM,KAAK,KAAA,GAAA,MAAA,SAAU,IAAI,EAAE,QAAQ,OAAO;EAKzE,UAJe,SAAA,GAAA,MAAA,SAAc,MAAM,GAAG,KAAA,GAAA,MAAA,SAAU,IAAI,EAAE,QAAQ,OAAO,EAAE,MAAM,OAAO;EAKpF;CACF,CAAC;CAED,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;EACrC,cAAc,EAAE,SAAS,KAAK,CAAC;EAC/B,iBAAiB,EAAE,SAAS,KAAK,CAAC;CACpC;CAEA,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,cAAA,GAAA,MAAA,SAAmB,MAAM,KAAK,EAAE,QAAQ,KAAK;EACnD,MAAM,UAAA,GAAA,MAAA,SAAe,MAAM,GAAG;EAE9B,MAAM,WADgB,OAAO,KAAK,MAAM,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO,OAAO,MAAM,IAEtF,OAAO,QAAQ,KAAK,EAAE,SAAS,GAAG,KAAK,IACvC,OAAO,QAAQ,KAAK;EACxB,MAAM,aAAa,SAAS,QAAQ,UAAU;EAE9C,KAAK,IAAI,UAAU,GAAG,UAAU,MAAM,QAAQ,WAAW;GACvD,MAAM,OAAO,MAAM;GACnB,MAAM,aAAA,GAAA,MAAA,SAAkB,KAAK,EAAE,EAAE,QAAQ,KAAK;GAC9C,MAAM,WAAA,GAAA,MAAA,SAAgB,KAAK,EAAE,EAAE,MAAM,KAAK;GAE1C,KACG,WAAW,SAAS,OAAO,KAAK,WAAW,OAAO,SAAS,KAAK,OAChE,SAAS,QAAQ,SAAS,KAAK,SAAS,OAAO,WAAW,KAAK,IAChE;IACA,MAAM,EAAE,eAAe,aAAa,aAAa,OAAO,YACtDC,yCAAAA,6BAA6B;KAC3B;KACA;KACA;KACA;KACA;IACF,CAAC;IAEH,IAAI,MAAM,YAAY,cAAc;KAClC,iBAAiB,QAAQ,SAAS,GAAG,KAAK;MACxC,GAAG;MACH,UAAU;OACR;OACA;OACA,WAAW;OACX,KAAK;OACL;MACF;KACF,CAAC;KACD;IACF;IAEA,MAAM,MAAMC,2BAAAA,iBAAiB;KAC3B,gBAAgB,cAAc,QAAQ,SAAS;KAC/C;KACA;KACA;IACF,CAAC;IAED,MAAM,kBAA4C;KAChD,GAAG;KACH,UAAU;MACR;MACA;MACA,WAAW;MACX;MACA;KACF;IACF;IAEA,cAAc,QAAQ,SAAS,GAAG,KAAK,eAAe;IAEtD,gCAAA,oBAAoB;KAClB;KACA;KACA;KACA;KACA;KACA;IACF,CAAC;GACH;EACF;CACF;CAEA,OAAO;EACL;EACA;EACA;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-month-view-events.cjs","names":["getMonthRange","validateEvent","getMonthPositionedEvents"],"sources":["../../../../src/components/MonthView/get-month-view-events/get-month-view-events.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DayOfWeek, ScheduleEventData } from '../../../types';\nimport { getMonthRange, validateEvent } from '../../../utils';\nimport { getMonthPositionedEvents, GroupedMonthEvents } from './get-month-positioned-events';\n\ninterface UseMonthViewEventsInput {\n /** Date (month start) at which events are positioned */\n date: AnyDateValue;\n\n /** List of all events that belong to the given month, extra events must be filtered out before passing to the function */\n events: ScheduleEventData[] | undefined;\n\n /** First day of the week, 0 - Sunday, 1 - Monday, etc., used to calculate events positions */\n firstDayOfWeek?: DayOfWeek;\n\n /** If true, events for outside days are included */\n withOutsideDays?: boolean;\n\n /** If true, month will show events for consistent number of weeks (6) */\n consistentWeeks?: boolean;\n}\n\nexport function getMonthViewEvents({\n date,\n events,\n firstDayOfWeek = 1,\n withOutsideDays,\n consistentWeeks,\n}: UseMonthViewEventsInput): GroupedMonthEvents {\n if (events === undefined) {\n return { groupedByDay: {}, groupedByWeek: {}, backgroundByWeek: {} };\n }\n\n const ids = new Set<string | number>();\n const filteredEvents: ScheduleEventData[] = [];\n\n const range = getMonthRange({ month: date, withOutsideDays, consistentWeeks, firstDayOfWeek });\n\n for (const event of events) {\n if (\n dayjs(event.end).isAfter(range.start, 'day') ||\n dayjs(event.start).isBefore(range.end, 'day')\n ) {\n filteredEvents.push(validateEvent(event));\n\n if (!ids.has(event.id)) {\n ids.add(event.id);\n } else {\n throw new Error(`[@mantine/schedule] MonthView: Duplicated event ids found: ${event.id}`);\n }\n }\n }\n\n return getMonthPositionedEvents({\n date,\n events: filteredEvents,\n firstDayOfWeek,\n range,\n });\n}\n"],"mappings":";;;;;;;;AAsBA,SAAgB,mBAAmB,EACjC,MACA,QACA,iBAAiB,GACjB,iBACA,mBAC8C;
|
|
1
|
+
{"version":3,"file":"get-month-view-events.cjs","names":["getMonthRange","validateEvent","getMonthPositionedEvents"],"sources":["../../../../src/components/MonthView/get-month-view-events/get-month-view-events.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DayOfWeek, ScheduleEventData } from '../../../types';\nimport { getMonthRange, validateEvent } from '../../../utils';\nimport { getMonthPositionedEvents, GroupedMonthEvents } from './get-month-positioned-events';\n\ninterface UseMonthViewEventsInput {\n /** Date (month start) at which events are positioned */\n date: AnyDateValue;\n\n /** List of all events that belong to the given month, extra events must be filtered out before passing to the function */\n events: ScheduleEventData[] | undefined;\n\n /** First day of the week, 0 - Sunday, 1 - Monday, etc., used to calculate events positions */\n firstDayOfWeek?: DayOfWeek;\n\n /** If true, events for outside days are included */\n withOutsideDays?: boolean;\n\n /** If true, month will show events for consistent number of weeks (6) */\n consistentWeeks?: boolean;\n}\n\nexport function getMonthViewEvents({\n date,\n events,\n firstDayOfWeek = 1,\n withOutsideDays,\n consistentWeeks,\n}: UseMonthViewEventsInput): GroupedMonthEvents {\n if (events === undefined) {\n return { groupedByDay: {}, groupedByWeek: {}, backgroundByWeek: {} };\n }\n\n const ids = new Set<string | number>();\n const filteredEvents: ScheduleEventData[] = [];\n\n const range = getMonthRange({ month: date, withOutsideDays, consistentWeeks, firstDayOfWeek });\n\n for (const event of events) {\n if (\n dayjs(event.end).isAfter(range.start, 'day') ||\n dayjs(event.start).isBefore(range.end, 'day')\n ) {\n filteredEvents.push(validateEvent(event));\n\n if (!ids.has(event.id)) {\n ids.add(event.id);\n } else {\n throw new Error(`[@mantine/schedule] MonthView: Duplicated event ids found: ${event.id}`);\n }\n }\n }\n\n return getMonthPositionedEvents({\n date,\n events: filteredEvents,\n firstDayOfWeek,\n range,\n });\n}\n"],"mappings":";;;;;;;;AAsBA,SAAgB,mBAAmB,EACjC,MACA,QACA,iBAAiB,GACjB,iBACA,mBAC8C;CAC9C,IAAI,WAAW,KAAA,GACb,OAAO;EAAE,cAAc,CAAC;EAAG,eAAe,CAAC;EAAG,kBAAkB,CAAC;CAAE;CAGrE,MAAM,sBAAM,IAAI,IAAqB;CACrC,MAAM,iBAAsC,CAAC;CAE7C,MAAM,QAAQA,wBAAAA,cAAc;EAAE,OAAO;EAAM;EAAiB;EAAiB;CAAe,CAAC;CAE7F,KAAK,MAAM,SAAS,QAClB,KAAA,GAAA,MAAA,SACQ,MAAM,GAAG,EAAE,QAAQ,MAAM,OAAO,KAAK,MAAA,GAAA,MAAA,SACrC,MAAM,KAAK,EAAE,SAAS,MAAM,KAAK,KAAK,GAC5C;EACA,eAAe,KAAKC,uBAAAA,cAAc,KAAK,CAAC;EAExC,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,GACnB,IAAI,IAAI,MAAM,EAAE;OAEhB,MAAM,IAAI,MAAM,8DAA8D,MAAM,IAAI;CAE5F;CAGF,OAAOC,oCAAAA,yBAAyB;EAC9B;EACA,QAAQ;EACR;EACA;CACF,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-weeks-in-range.cjs","names":["getStartOfWeek"],"sources":["../../../../src/components/MonthView/get-month-view-events/get-weeks-in-range.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { DateStringValue, DayOfWeek } from '../../../types';\nimport { getStartOfWeek } from '../../../utils';\n\ninterface GetWeeksInRangeInput {\n rangeStart: dayjs.Dayjs;\n rangeEnd: dayjs.Dayjs;\n firstDayOfWeek: DayOfWeek;\n}\n\ninterface GetWeeksInRangeOutput {\n weeks: DateStringValue[][];\n groupedByDay: { [date: string]: any[] };\n}\n\nexport function getWeeksInRange({\n rangeStart,\n rangeEnd,\n firstDayOfWeek,\n}: GetWeeksInRangeInput): GetWeeksInRangeOutput {\n const weeks: DateStringValue[][] = [];\n const groupedByDay: { [date: string]: any[] } = {};\n\n const startOfFirstWeekStr = getStartOfWeek({\n date: rangeStart.format('YYYY-MM-DD'),\n firstDayOfWeek,\n });\n\n let currentDate = dayjs(startOfFirstWeekStr);\n\n while (currentDate.isBefore(rangeEnd) || currentDate.isSame(rangeEnd, 'day')) {\n const week: DateStringValue[] = [];\n for (let i = 0; i < 7; i++) {\n const dateStr = currentDate.format('YYYY-MM-DD 00:00:00');\n week.push(dateStr);\n if (!groupedByDay[dateStr]) {\n groupedByDay[dateStr] = [];\n }\n currentDate = currentDate.add(1, 'day');\n }\n weeks.push(week);\n }\n\n return { weeks, groupedByDay };\n}\n"],"mappings":";;;;;;AAeA,SAAgB,gBAAgB,EAC9B,YACA,UACA,kBAC8C;CAC9C,MAAM,QAA6B,
|
|
1
|
+
{"version":3,"file":"get-weeks-in-range.cjs","names":["getStartOfWeek"],"sources":["../../../../src/components/MonthView/get-month-view-events/get-weeks-in-range.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { DateStringValue, DayOfWeek } from '../../../types';\nimport { getStartOfWeek } from '../../../utils';\n\ninterface GetWeeksInRangeInput {\n rangeStart: dayjs.Dayjs;\n rangeEnd: dayjs.Dayjs;\n firstDayOfWeek: DayOfWeek;\n}\n\ninterface GetWeeksInRangeOutput {\n weeks: DateStringValue[][];\n groupedByDay: { [date: string]: any[] };\n}\n\nexport function getWeeksInRange({\n rangeStart,\n rangeEnd,\n firstDayOfWeek,\n}: GetWeeksInRangeInput): GetWeeksInRangeOutput {\n const weeks: DateStringValue[][] = [];\n const groupedByDay: { [date: string]: any[] } = {};\n\n const startOfFirstWeekStr = getStartOfWeek({\n date: rangeStart.format('YYYY-MM-DD'),\n firstDayOfWeek,\n });\n\n let currentDate = dayjs(startOfFirstWeekStr);\n\n while (currentDate.isBefore(rangeEnd) || currentDate.isSame(rangeEnd, 'day')) {\n const week: DateStringValue[] = [];\n for (let i = 0; i < 7; i++) {\n const dateStr = currentDate.format('YYYY-MM-DD 00:00:00');\n week.push(dateStr);\n if (!groupedByDay[dateStr]) {\n groupedByDay[dateStr] = [];\n }\n currentDate = currentDate.add(1, 'day');\n }\n weeks.push(week);\n }\n\n return { weeks, groupedByDay };\n}\n"],"mappings":";;;;;;AAeA,SAAgB,gBAAgB,EAC9B,YACA,UACA,kBAC8C;CAC9C,MAAM,QAA6B,CAAC;CACpC,MAAM,eAA0C,CAAC;CAOjD,IAAI,eAAA,GAAA,MAAA,SALwBA,0BAAAA,eAAe;EACzC,MAAM,WAAW,OAAO,YAAY;EACpC;CACF,CAE0C,CAAC;CAE3C,OAAO,YAAY,SAAS,QAAQ,KAAK,YAAY,OAAO,UAAU,KAAK,GAAG;EAC5E,MAAM,OAA0B,CAAC;EACjC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;GAC1B,MAAM,UAAU,YAAY,OAAO,qBAAqB;GACxD,KAAK,KAAK,OAAO;GACjB,IAAI,CAAC,aAAa,UAChB,aAAa,WAAW,CAAC;GAE3B,cAAc,YAAY,IAAI,GAAG,KAAK;EACxC;EACA,MAAM,KAAK,IAAI;CACjB;CAEA,OAAO;EAAE;EAAO;CAAa;AAC/B"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
//#region packages/@mantine/schedule/src/components/MonthView/get-renderable-month-event-segments.ts
|
|
3
|
+
const DAYS_IN_WEEK = 7;
|
|
4
|
+
const DAY_WIDTH = 100 / DAYS_IN_WEEK;
|
|
5
|
+
function getEventDayRange(event) {
|
|
6
|
+
const startDayIndex = Math.max(0, Math.round(event.position.startOffset / DAY_WIDTH));
|
|
7
|
+
const daysSpanned = Math.max(1, Math.round(event.position.width / DAY_WIDTH));
|
|
8
|
+
return {
|
|
9
|
+
startDayIndex,
|
|
10
|
+
endDayIndex: Math.min(DAYS_IN_WEEK - 1, startDayIndex + daysSpanned - 1)
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function getFirstAvailableRow(usedRows, maxEventsPerDay) {
|
|
14
|
+
for (let row = 0; row < maxEventsPerDay; row += 1) if (!usedRows.has(row)) return row;
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
function getSegmentHanging(originalHanging, touchesStart, touchesEnd) {
|
|
18
|
+
const hangsFromStart = touchesStart && (originalHanging === "start" || originalHanging === "both");
|
|
19
|
+
const hangsFromEnd = touchesEnd && (originalHanging === "end" || originalHanging === "both");
|
|
20
|
+
if (hangsFromStart && hangsFromEnd) return "both";
|
|
21
|
+
if (hangsFromStart) return "start";
|
|
22
|
+
if (hangsFromEnd) return "end";
|
|
23
|
+
return "none";
|
|
24
|
+
}
|
|
25
|
+
function getSegmentPosition(event, segment, eventRange) {
|
|
26
|
+
const touchesStart = segment.startDayIndex === eventRange.startDayIndex;
|
|
27
|
+
const touchesEnd = segment.endDayIndex === eventRange.endDayIndex;
|
|
28
|
+
return {
|
|
29
|
+
...event.position,
|
|
30
|
+
startOffset: segment.startDayIndex / DAYS_IN_WEEK * 100,
|
|
31
|
+
width: (segment.endDayIndex - segment.startDayIndex + 1) / DAYS_IN_WEEK * 100,
|
|
32
|
+
row: segment.row,
|
|
33
|
+
hanging: getSegmentHanging(event.position.hanging, touchesStart, touchesEnd)
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function getEventKey(event) {
|
|
37
|
+
return event.id;
|
|
38
|
+
}
|
|
39
|
+
function getRenderableMonthEventSegments({ events, groupedByDay, maxEventsPerDay, week }) {
|
|
40
|
+
const eventIndexes = /* @__PURE__ */ new Map();
|
|
41
|
+
const eventRanges = /* @__PURE__ */ new Map();
|
|
42
|
+
const renderRows = /* @__PURE__ */ new Map();
|
|
43
|
+
events.forEach((event, index) => {
|
|
44
|
+
eventIndexes.set(event, index);
|
|
45
|
+
eventRanges.set(event, getEventDayRange(event));
|
|
46
|
+
});
|
|
47
|
+
const setRenderRow = (event, dayIndex, row) => {
|
|
48
|
+
if (!renderRows.has(event)) renderRows.set(event, /* @__PURE__ */ new Map());
|
|
49
|
+
renderRows.get(event).set(dayIndex, row);
|
|
50
|
+
};
|
|
51
|
+
for (let dayIndex = 0; dayIndex < week.length; dayIndex += 1) {
|
|
52
|
+
const dayEvents = groupedByDay[week[dayIndex]] || [];
|
|
53
|
+
const dayEventIds = new Set(dayEvents.map((event) => getEventKey(event)));
|
|
54
|
+
const dayWeekEvents = events.filter((event) => {
|
|
55
|
+
const range = eventRanges.get(event);
|
|
56
|
+
return dayEventIds.has(getEventKey(event)) && dayIndex >= range.startDayIndex && dayIndex <= range.endDayIndex;
|
|
57
|
+
});
|
|
58
|
+
if (dayEvents.length > maxEventsPerDay) {
|
|
59
|
+
dayWeekEvents.forEach((event) => {
|
|
60
|
+
if (event.position.row < maxEventsPerDay) setRenderRow(event, dayIndex, event.position.row);
|
|
61
|
+
});
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const usedRows = /* @__PURE__ */ new Set();
|
|
65
|
+
[...dayWeekEvents].sort((a, b) => {
|
|
66
|
+
const rowDiff = a.position.row - b.position.row;
|
|
67
|
+
if (rowDiff !== 0) return rowDiff;
|
|
68
|
+
return eventIndexes.get(a) - eventIndexes.get(b);
|
|
69
|
+
}).forEach((event) => {
|
|
70
|
+
let row = event.position.row;
|
|
71
|
+
if (row >= maxEventsPerDay || usedRows.has(row)) {
|
|
72
|
+
const availableRow = getFirstAvailableRow(usedRows, maxEventsPerDay);
|
|
73
|
+
if (availableRow === null) return;
|
|
74
|
+
row = availableRow;
|
|
75
|
+
}
|
|
76
|
+
usedRows.add(row);
|
|
77
|
+
setRenderRow(event, dayIndex, row);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return events.flatMap((event) => {
|
|
81
|
+
const eventRange = eventRanges.get(event);
|
|
82
|
+
const eventRenderRows = renderRows.get(event);
|
|
83
|
+
const segments = [];
|
|
84
|
+
let currentSegment = null;
|
|
85
|
+
const addSegment = (segment) => {
|
|
86
|
+
const position = getSegmentPosition(event, segment, eventRange);
|
|
87
|
+
segments.push({
|
|
88
|
+
event,
|
|
89
|
+
position,
|
|
90
|
+
clipStart: segment.startDayIndex > eventRange.startDayIndex,
|
|
91
|
+
clipEnd: segment.endDayIndex < eventRange.endDayIndex,
|
|
92
|
+
key: `${event.id}-${event.position.weekIndex}-${segment.startDayIndex}-${segment.endDayIndex}-${segment.row}`
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
for (let dayIndex = eventRange.startDayIndex; dayIndex <= eventRange.endDayIndex; dayIndex += 1) {
|
|
96
|
+
const row = eventRenderRows?.get(dayIndex);
|
|
97
|
+
if (row === void 0) {
|
|
98
|
+
if (currentSegment) {
|
|
99
|
+
addSegment(currentSegment);
|
|
100
|
+
currentSegment = null;
|
|
101
|
+
}
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (currentSegment && currentSegment.row === row) currentSegment.endDayIndex = dayIndex;
|
|
105
|
+
else {
|
|
106
|
+
if (currentSegment) addSegment(currentSegment);
|
|
107
|
+
currentSegment = {
|
|
108
|
+
startDayIndex: dayIndex,
|
|
109
|
+
endDayIndex: dayIndex,
|
|
110
|
+
row
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (currentSegment) addSegment(currentSegment);
|
|
115
|
+
return segments;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
//#endregion
|
|
119
|
+
exports.getRenderableMonthEventSegments = getRenderableMonthEventSegments;
|
|
120
|
+
|
|
121
|
+
//# sourceMappingURL=get-renderable-month-event-segments.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-renderable-month-event-segments.cjs","names":[],"sources":["../../../src/components/MonthView/get-renderable-month-event-segments.ts"],"sourcesContent":["import { DateStringValue, MonthEventPositionData, MonthPositionedEventData } from '../../types';\n\nconst DAYS_IN_WEEK = 7;\nconst DAY_WIDTH = 100 / DAYS_IN_WEEK;\n\ninterface GetRenderableMonthEventSegmentsInput {\n events: MonthPositionedEventData[];\n groupedByDay: Record<string, MonthPositionedEventData[]>;\n maxEventsPerDay: number;\n week: DateStringValue[];\n}\n\ninterface EventDayRange {\n startDayIndex: number;\n endDayIndex: number;\n}\n\ninterface SegmentRange extends EventDayRange {\n row: number;\n}\n\nexport interface RenderableMonthEventSegment {\n event: MonthPositionedEventData;\n position: MonthEventPositionData;\n clipStart: boolean;\n clipEnd: boolean;\n key: string;\n}\n\nfunction getEventDayRange(event: MonthPositionedEventData): EventDayRange {\n const startDayIndex = Math.max(0, Math.round(event.position.startOffset / DAY_WIDTH));\n const daysSpanned = Math.max(1, Math.round(event.position.width / DAY_WIDTH));\n\n return {\n startDayIndex,\n endDayIndex: Math.min(DAYS_IN_WEEK - 1, startDayIndex + daysSpanned - 1),\n };\n}\n\nfunction getFirstAvailableRow(usedRows: Set<number>, maxEventsPerDay: number): number | null {\n for (let row = 0; row < maxEventsPerDay; row += 1) {\n if (!usedRows.has(row)) {\n return row;\n }\n }\n\n return null;\n}\n\nfunction getSegmentHanging(\n originalHanging: MonthEventPositionData['hanging'],\n touchesStart: boolean,\n touchesEnd: boolean\n): MonthEventPositionData['hanging'] {\n const hangsFromStart =\n touchesStart && (originalHanging === 'start' || originalHanging === 'both');\n const hangsFromEnd = touchesEnd && (originalHanging === 'end' || originalHanging === 'both');\n\n if (hangsFromStart && hangsFromEnd) {\n return 'both';\n }\n\n if (hangsFromStart) {\n return 'start';\n }\n\n if (hangsFromEnd) {\n return 'end';\n }\n\n return 'none';\n}\n\nfunction getSegmentPosition(\n event: MonthPositionedEventData,\n segment: SegmentRange,\n eventRange: EventDayRange\n): MonthEventPositionData {\n const touchesStart = segment.startDayIndex === eventRange.startDayIndex;\n const touchesEnd = segment.endDayIndex === eventRange.endDayIndex;\n\n return {\n ...event.position,\n startOffset: (segment.startDayIndex / DAYS_IN_WEEK) * 100,\n width: ((segment.endDayIndex - segment.startDayIndex + 1) / DAYS_IN_WEEK) * 100,\n row: segment.row,\n hanging: getSegmentHanging(event.position.hanging, touchesStart, touchesEnd),\n };\n}\n\nfunction getEventKey(event: MonthPositionedEventData): string | number {\n return event.id;\n}\n\nexport function getRenderableMonthEventSegments({\n events,\n groupedByDay,\n maxEventsPerDay,\n week,\n}: GetRenderableMonthEventSegmentsInput): RenderableMonthEventSegment[] {\n const eventIndexes = new Map<MonthPositionedEventData, number>();\n const eventRanges = new Map<MonthPositionedEventData, EventDayRange>();\n const renderRows = new Map<MonthPositionedEventData, Map<number, number>>();\n\n events.forEach((event, index) => {\n eventIndexes.set(event, index);\n eventRanges.set(event, getEventDayRange(event));\n });\n\n const setRenderRow = (event: MonthPositionedEventData, dayIndex: number, row: number) => {\n if (!renderRows.has(event)) {\n renderRows.set(event, new Map());\n }\n\n renderRows.get(event)!.set(dayIndex, row);\n };\n\n for (let dayIndex = 0; dayIndex < week.length; dayIndex += 1) {\n const dayEvents = groupedByDay[week[dayIndex]] || [];\n const dayEventIds = new Set(dayEvents.map((event) => getEventKey(event)));\n const dayWeekEvents = events.filter((event) => {\n const range = eventRanges.get(event)!;\n return (\n dayEventIds.has(getEventKey(event)) &&\n dayIndex >= range.startDayIndex &&\n dayIndex <= range.endDayIndex\n );\n });\n\n if (dayEvents.length > maxEventsPerDay) {\n dayWeekEvents.forEach((event) => {\n if (event.position.row < maxEventsPerDay) {\n setRenderRow(event, dayIndex, event.position.row);\n }\n });\n\n continue;\n }\n\n const usedRows = new Set<number>();\n const sortedDayEvents = [...dayWeekEvents].sort((a, b) => {\n const rowDiff = a.position.row - b.position.row;\n\n if (rowDiff !== 0) {\n return rowDiff;\n }\n\n return eventIndexes.get(a)! - eventIndexes.get(b)!;\n });\n\n sortedDayEvents.forEach((event) => {\n let row = event.position.row;\n\n if (row >= maxEventsPerDay || usedRows.has(row)) {\n const availableRow = getFirstAvailableRow(usedRows, maxEventsPerDay);\n\n if (availableRow === null) {\n return;\n }\n\n row = availableRow;\n }\n\n usedRows.add(row);\n setRenderRow(event, dayIndex, row);\n });\n }\n\n return events.flatMap((event) => {\n const eventRange = eventRanges.get(event)!;\n const eventRenderRows = renderRows.get(event);\n const segments: RenderableMonthEventSegment[] = [];\n let currentSegment: SegmentRange | null = null;\n\n const addSegment = (segment: SegmentRange) => {\n const position = getSegmentPosition(event, segment, eventRange);\n\n segments.push({\n event,\n position,\n clipStart: segment.startDayIndex > eventRange.startDayIndex,\n clipEnd: segment.endDayIndex < eventRange.endDayIndex,\n key: `${event.id}-${event.position.weekIndex}-${segment.startDayIndex}-${segment.endDayIndex}-${segment.row}`,\n });\n };\n\n for (\n let dayIndex = eventRange.startDayIndex;\n dayIndex <= eventRange.endDayIndex;\n dayIndex += 1\n ) {\n const row = eventRenderRows?.get(dayIndex);\n\n if (row === undefined) {\n if (currentSegment) {\n addSegment(currentSegment);\n currentSegment = null;\n }\n\n continue;\n }\n\n if (currentSegment && currentSegment.row === row) {\n currentSegment.endDayIndex = dayIndex;\n } else {\n if (currentSegment) {\n addSegment(currentSegment);\n }\n\n currentSegment = {\n startDayIndex: dayIndex,\n endDayIndex: dayIndex,\n row,\n };\n }\n }\n\n if (currentSegment) {\n addSegment(currentSegment);\n }\n\n return segments;\n });\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle-month-view-key-down.cjs","names":[],"sources":["../../../src/components/MonthView/handle-month-view-key-down.ts"],"sourcesContent":["import { RefObject } from 'react';\n\n/** Reference to a 2D array of day buttons: [weekIndex][dayIndex] */\nexport type MonthViewControlsRef = RefObject<HTMLButtonElement[][]>;\n\ntype Direction = 'up' | 'down' | 'left' | 'right';\n\ninterface DayPosition {\n weekIndex: number;\n dayIndex: number;\n}\n\nfunction getDirection(key: KeyboardEvent['key']): Direction | null {\n switch (key) {\n case 'ArrowDown':\n return 'down';\n case 'ArrowUp':\n return 'up';\n case 'ArrowRight':\n return 'right';\n case 'ArrowLeft':\n return 'left';\n default:\n return null;\n }\n}\n\nfunction getControlsSize(controlsRef: MonthViewControlsRef): number[] | null {\n if (!controlsRef.current) {\n return null;\n }\n return controlsRef.current.map((week) => (week ? week.length : 0));\n}\n\ninterface GetNextPositionInput {\n direction: Direction;\n weekIndex: number;\n dayIndex: number;\n size: number[];\n}\n\nfunction getNextPosition({\n direction,\n weekIndex,\n dayIndex,\n size,\n}: GetNextPositionInput): DayPosition | null {\n const currentWeekSize = size[weekIndex];\n if (!currentWeekSize) {\n return null;\n }\n\n switch (direction) {\n case 'up': {\n if (weekIndex === 0) {\n return null;\n }\n\n const prevWeekSize = size[weekIndex - 1];\n const clampedDayIndex = Math.min(dayIndex, prevWeekSize - 1);\n return {\n weekIndex: weekIndex - 1,\n dayIndex: clampedDayIndex,\n };\n }\n\n case 'down': {\n if (weekIndex === size.length - 1) {\n return null;\n }\n\n const nextWeekSize = size[weekIndex + 1];\n const clampedDayIndex = Math.min(dayIndex, nextWeekSize - 1);\n return {\n weekIndex: weekIndex + 1,\n dayIndex: clampedDayIndex,\n };\n }\n\n case 'left': {\n if (dayIndex === 0) {\n if (weekIndex === 0) {\n return null;\n }\n\n return {\n weekIndex: weekIndex - 1,\n dayIndex: size[weekIndex - 1] - 1,\n };\n }\n\n return {\n weekIndex,\n dayIndex: dayIndex - 1,\n };\n }\n\n case 'right': {\n if (dayIndex === currentWeekSize - 1) {\n if (weekIndex === size.length - 1) {\n return null;\n }\n\n return {\n weekIndex: weekIndex + 1,\n dayIndex: 0,\n };\n }\n\n return {\n weekIndex,\n dayIndex: dayIndex + 1,\n };\n }\n\n default:\n return null;\n }\n}\n\ninterface FocusOnNextControlInput {\n controlsRef: MonthViewControlsRef;\n direction: Direction;\n weekIndex: number;\n dayIndex: number;\n size: number[];\n}\n\nfunction focusOnNextFocusableControl({\n controlsRef,\n direction,\n weekIndex,\n dayIndex,\n size,\n}: FocusOnNextControlInput): void {\n const nextPosition = getNextPosition({\n direction,\n weekIndex,\n dayIndex,\n size,\n });\n\n if (!nextPosition) {\n return;\n }\n\n const controlToFocus = controlsRef.current?.[nextPosition.weekIndex]?.[nextPosition.dayIndex];\n\n if (!controlToFocus) {\n return;\n }\n\n if (\n controlToFocus.disabled ||\n controlToFocus.getAttribute('data-hidden') ||\n controlToFocus.getAttribute('data-day-placeholder')\n ) {\n focusOnNextFocusableControl({\n controlsRef,\n direction,\n weekIndex: nextPosition.weekIndex,\n dayIndex: nextPosition.dayIndex,\n size,\n });\n } else {\n controlToFocus.focus();\n }\n}\n\nexport interface HandleMonthViewKeyDownInput {\n controlsRef: MonthViewControlsRef;\n weekIndex: number;\n dayIndex: number;\n event: React.KeyboardEvent<HTMLButtonElement>;\n}\n\nexport function handleMonthViewKeyDown({\n controlsRef,\n weekIndex,\n dayIndex,\n event,\n}: HandleMonthViewKeyDownInput): void {\n const direction = getDirection(event.key);\n\n if (direction) {\n event.preventDefault();\n\n const size = getControlsSize(controlsRef);\n\n if (!size) {\n return;\n }\n\n focusOnNextFocusableControl({\n controlsRef,\n direction,\n weekIndex,\n dayIndex,\n size,\n });\n }\n}\n"],"mappings":";;AAYA,SAAS,aAAa,KAA6C;
|
|
1
|
+
{"version":3,"file":"handle-month-view-key-down.cjs","names":[],"sources":["../../../src/components/MonthView/handle-month-view-key-down.ts"],"sourcesContent":["import { RefObject } from 'react';\n\n/** Reference to a 2D array of day buttons: [weekIndex][dayIndex] */\nexport type MonthViewControlsRef = RefObject<HTMLButtonElement[][]>;\n\ntype Direction = 'up' | 'down' | 'left' | 'right';\n\ninterface DayPosition {\n weekIndex: number;\n dayIndex: number;\n}\n\nfunction getDirection(key: KeyboardEvent['key']): Direction | null {\n switch (key) {\n case 'ArrowDown':\n return 'down';\n case 'ArrowUp':\n return 'up';\n case 'ArrowRight':\n return 'right';\n case 'ArrowLeft':\n return 'left';\n default:\n return null;\n }\n}\n\nfunction getControlsSize(controlsRef: MonthViewControlsRef): number[] | null {\n if (!controlsRef.current) {\n return null;\n }\n return controlsRef.current.map((week) => (week ? week.length : 0));\n}\n\ninterface GetNextPositionInput {\n direction: Direction;\n weekIndex: number;\n dayIndex: number;\n size: number[];\n}\n\nfunction getNextPosition({\n direction,\n weekIndex,\n dayIndex,\n size,\n}: GetNextPositionInput): DayPosition | null {\n const currentWeekSize = size[weekIndex];\n if (!currentWeekSize) {\n return null;\n }\n\n switch (direction) {\n case 'up': {\n if (weekIndex === 0) {\n return null;\n }\n\n const prevWeekSize = size[weekIndex - 1];\n const clampedDayIndex = Math.min(dayIndex, prevWeekSize - 1);\n return {\n weekIndex: weekIndex - 1,\n dayIndex: clampedDayIndex,\n };\n }\n\n case 'down': {\n if (weekIndex === size.length - 1) {\n return null;\n }\n\n const nextWeekSize = size[weekIndex + 1];\n const clampedDayIndex = Math.min(dayIndex, nextWeekSize - 1);\n return {\n weekIndex: weekIndex + 1,\n dayIndex: clampedDayIndex,\n };\n }\n\n case 'left': {\n if (dayIndex === 0) {\n if (weekIndex === 0) {\n return null;\n }\n\n return {\n weekIndex: weekIndex - 1,\n dayIndex: size[weekIndex - 1] - 1,\n };\n }\n\n return {\n weekIndex,\n dayIndex: dayIndex - 1,\n };\n }\n\n case 'right': {\n if (dayIndex === currentWeekSize - 1) {\n if (weekIndex === size.length - 1) {\n return null;\n }\n\n return {\n weekIndex: weekIndex + 1,\n dayIndex: 0,\n };\n }\n\n return {\n weekIndex,\n dayIndex: dayIndex + 1,\n };\n }\n\n default:\n return null;\n }\n}\n\ninterface FocusOnNextControlInput {\n controlsRef: MonthViewControlsRef;\n direction: Direction;\n weekIndex: number;\n dayIndex: number;\n size: number[];\n}\n\nfunction focusOnNextFocusableControl({\n controlsRef,\n direction,\n weekIndex,\n dayIndex,\n size,\n}: FocusOnNextControlInput): void {\n const nextPosition = getNextPosition({\n direction,\n weekIndex,\n dayIndex,\n size,\n });\n\n if (!nextPosition) {\n return;\n }\n\n const controlToFocus = controlsRef.current?.[nextPosition.weekIndex]?.[nextPosition.dayIndex];\n\n if (!controlToFocus) {\n return;\n }\n\n if (\n controlToFocus.disabled ||\n controlToFocus.getAttribute('data-hidden') ||\n controlToFocus.getAttribute('data-day-placeholder')\n ) {\n focusOnNextFocusableControl({\n controlsRef,\n direction,\n weekIndex: nextPosition.weekIndex,\n dayIndex: nextPosition.dayIndex,\n size,\n });\n } else {\n controlToFocus.focus();\n }\n}\n\nexport interface HandleMonthViewKeyDownInput {\n controlsRef: MonthViewControlsRef;\n weekIndex: number;\n dayIndex: number;\n event: React.KeyboardEvent<HTMLButtonElement>;\n}\n\nexport function handleMonthViewKeyDown({\n controlsRef,\n weekIndex,\n dayIndex,\n event,\n}: HandleMonthViewKeyDownInput): void {\n const direction = getDirection(event.key);\n\n if (direction) {\n event.preventDefault();\n\n const size = getControlsSize(controlsRef);\n\n if (!size) {\n return;\n }\n\n focusOnNextFocusableControl({\n controlsRef,\n direction,\n weekIndex,\n dayIndex,\n size,\n });\n }\n}\n"],"mappings":";;AAYA,SAAS,aAAa,KAA6C;CACjE,QAAQ,KAAR;EACE,KAAK,aACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK,cACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAEA,SAAS,gBAAgB,aAAoD;CAC3E,IAAI,CAAC,YAAY,SACf,OAAO;CAET,OAAO,YAAY,QAAQ,KAAK,SAAU,OAAO,KAAK,SAAS,CAAE;AACnE;AASA,SAAS,gBAAgB,EACvB,WACA,WACA,UACA,QAC2C;CAC3C,MAAM,kBAAkB,KAAK;CAC7B,IAAI,CAAC,iBACH,OAAO;CAGT,QAAQ,WAAR;EACE,KAAK,MAAM;GACT,IAAI,cAAc,GAChB,OAAO;GAGT,MAAM,eAAe,KAAK,YAAY;GACtC,MAAM,kBAAkB,KAAK,IAAI,UAAU,eAAe,CAAC;GAC3D,OAAO;IACL,WAAW,YAAY;IACvB,UAAU;GACZ;EACF;EAEA,KAAK,QAAQ;GACX,IAAI,cAAc,KAAK,SAAS,GAC9B,OAAO;GAGT,MAAM,eAAe,KAAK,YAAY;GACtC,MAAM,kBAAkB,KAAK,IAAI,UAAU,eAAe,CAAC;GAC3D,OAAO;IACL,WAAW,YAAY;IACvB,UAAU;GACZ;EACF;EAEA,KAAK;GACH,IAAI,aAAa,GAAG;IAClB,IAAI,cAAc,GAChB,OAAO;IAGT,OAAO;KACL,WAAW,YAAY;KACvB,UAAU,KAAK,YAAY,KAAK;IAClC;GACF;GAEA,OAAO;IACL;IACA,UAAU,WAAW;GACvB;EAGF,KAAK;GACH,IAAI,aAAa,kBAAkB,GAAG;IACpC,IAAI,cAAc,KAAK,SAAS,GAC9B,OAAO;IAGT,OAAO;KACL,WAAW,YAAY;KACvB,UAAU;IACZ;GACF;GAEA,OAAO;IACL;IACA,UAAU,WAAW;GACvB;EAGF,SACE,OAAO;CACX;AACF;AAUA,SAAS,4BAA4B,EACnC,aACA,WACA,WACA,UACA,QACgC;CAChC,MAAM,eAAe,gBAAgB;EACnC;EACA;EACA;EACA;CACF,CAAC;CAED,IAAI,CAAC,cACH;CAGF,MAAM,iBAAiB,YAAY,UAAU,aAAa,aAAa,aAAa;CAEpF,IAAI,CAAC,gBACH;CAGF,IACE,eAAe,YACf,eAAe,aAAa,aAAa,KACzC,eAAe,aAAa,sBAAsB,GAElD,4BAA4B;EAC1B;EACA;EACA,WAAW,aAAa;EACxB,UAAU,aAAa;EACvB;CACF,CAAC;MAED,eAAe,MAAM;AAEzB;AASA,SAAgB,uBAAuB,EACrC,aACA,WACA,UACA,SACoC;CACpC,MAAM,YAAY,aAAa,MAAM,GAAG;CAExC,IAAI,WAAW;EACb,MAAM,eAAe;EAErB,MAAM,OAAO,gBAAgB,WAAW;EAExC,IAAI,CAAC,MACH;EAGF,4BAA4B;GAC1B;GACA;GACA;GACA;GACA;EACF,CAAC;CACH;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MoreEvents.cjs","names":["ScheduleEvent","Modal","Popover","UnstyledButton","getLabel","classes"],"sources":["../../../src/components/MoreEvents/MoreEvents.tsx"],"sourcesContent":["import {\n BoxProps,\n ElementProps,\n factory,\n Factory,\n MantineRadius,\n Modal,\n ModalProps,\n Popover,\n PopoverProps,\n StylesApiProps,\n UnstyledButton,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { useDisclosure } from '@mantine/hooks';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport { ScheduleEventData, ScheduleMode } from '../../types';\nimport { RenderEvent, RenderEventBody, ScheduleEvent } from '../ScheduleEvent/ScheduleEvent';\nimport classes from './MoreEvents.module.css';\n\nexport type MoreEventsDropdownType = 'popover' | 'modal';\n\nexport type MoreEventsStylesNames = 'moreEventsButton' | 'moreEventsList' | 'moreEventsDropdown';\n\nexport interface MoreEventsProps\n extends BoxProps, StylesApiProps<MoreEventsFactory>, ElementProps<'button'> {\n /** List of events to display */\n events: ScheduleEventData[];\n\n /** Events count to use for `+X more` label */\n moreEventsCount: number;\n\n /** Key of `theme.radius` or any valid CSS value to set border-radius @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** Title for the Modal component, ignored if `dropdownType` is not 'modal' */\n modalTitle?: string;\n\n /** Type of dropdown to use for displaying more events @default 'popover' */\n dropdownType?: MoreEventsDropdownType;\n\n /** Props passed down to `Popover` component */\n popoverProps?: Partial<Omit<PopoverProps, 'children'>>;\n\n /** Props passed down to `Modal` component */\n modalProps?: Partial<Omit<ModalProps, 'children'>>;\n\n /** Called when the dropdown is closed */\n onDropdownClose?: () => void;\n\n /** Function to customize event body, `event` object is passed as first argument */\n renderEventBody?: RenderEventBody;\n\n /** Function to fully customize event rendering, receives all props that would be passed to the root element including children */\n renderEvent?: RenderEvent;\n\n /** Labels override */\n labels?: ScheduleLabelsOverride;\n\n /** Interaction mode: 'default' allows all interactions, 'static' disables event interactions @default default */\n mode?: ScheduleMode;\n\n /** Called when an event inside the dropdown is clicked */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n}\n\nexport type MoreEventsFactory = Factory<{\n props: MoreEventsProps;\n ref: HTMLButtonElement;\n stylesNames: MoreEventsStylesNames;\n}>;\n\nconst defaultProps = {\n dropdownType: 'popover',\n} satisfies Partial<MoreEventsProps>;\n\nexport const MoreEvents = factory<MoreEventsFactory>((_props) => {\n const props = useProps('MoreEvents', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n attributes,\n radius,\n dropdownType,\n events,\n moreEventsCount,\n popoverProps,\n modalProps,\n onDropdownClose,\n children,\n modalTitle,\n renderEventBody,\n renderEvent,\n id,\n labels,\n mode,\n onEventClick,\n ...others\n } = props;\n const [dropdownOpened, dropdownHandlers] = useDisclosure();\n\n const getStyles = useStyles<MoreEventsFactory>({\n name: 'MoreEvents',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n rootSelector: 'moreEventsButton',\n });\n\n const handleClose = () => {\n dropdownHandlers.close();\n onDropdownClose?.();\n };\n\n const eventsList = (\n <div {...getStyles('moreEventsList')}>\n {events.map((event) => (\n <ScheduleEvent\n key={event.id}\n radius={radius}\n event={event}\n size=\"md\"\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n mode={mode}\n onClick={onEventClick ? (e) => onEventClick(event, e) : undefined}\n >\n {event.title}\n </ScheduleEvent>\n ))}\n </div>\n );\n\n return (\n <>\n {dropdownType === 'modal' && (\n <Modal\n opened={dropdownOpened}\n onClose={handleClose}\n unstyled={unstyled}\n radius={radius}\n title={modalTitle}\n {...modalProps}\n >\n {eventsList}\n </Modal>\n )}\n\n <Popover\n position=\"bottom-start\"\n width={260}\n opened={dropdownOpened}\n trapFocus\n returnFocus={false}\n unstyled={unstyled}\n disabled={popoverProps?.disabled || dropdownType === 'modal'}\n radius={radius}\n transitionProps={{ transition: 'pop', duration: 120 }}\n offset={-46}\n id={id}\n {...popoverProps}\n onChange={(_opened) => {\n if (!_opened) {\n popoverProps?.onChange?.(_opened);\n handleClose();\n }\n }}\n >\n <Popover.Target>\n <UnstyledButton\n {...getStyles('moreEventsButton')}\n mod={{ static: mode === 'static' }}\n onClick={() => dropdownHandlers.toggle()}\n {...others}\n >\n {getLabel('moreLabel', labels)(moreEventsCount)}\n </UnstyledButton>\n </Popover.Target>\n\n <Popover.Dropdown {...getStyles('moreEventsDropdown')}>{eventsList}</Popover.Dropdown>\n </Popover>\n </>\n );\n});\n\nMoreEvents.displayName = '@mantine/schedule/MoreEvents';\nMoreEvents.classes = classes;\n"],"mappings":";;;;;;;;;AAyEA,MAAM,eAAe,EACnB,cAAc,
|
|
1
|
+
{"version":3,"file":"MoreEvents.cjs","names":["ScheduleEvent","Modal","Popover","UnstyledButton","getLabel","classes"],"sources":["../../../src/components/MoreEvents/MoreEvents.tsx"],"sourcesContent":["import {\n BoxProps,\n ElementProps,\n factory,\n Factory,\n MantineRadius,\n Modal,\n ModalProps,\n Popover,\n PopoverProps,\n StylesApiProps,\n UnstyledButton,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { useDisclosure } from '@mantine/hooks';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport { ScheduleEventData, ScheduleMode } from '../../types';\nimport { RenderEvent, RenderEventBody, ScheduleEvent } from '../ScheduleEvent/ScheduleEvent';\nimport classes from './MoreEvents.module.css';\n\nexport type MoreEventsDropdownType = 'popover' | 'modal';\n\nexport type MoreEventsStylesNames = 'moreEventsButton' | 'moreEventsList' | 'moreEventsDropdown';\n\nexport interface MoreEventsProps\n extends BoxProps, StylesApiProps<MoreEventsFactory>, ElementProps<'button'> {\n /** List of events to display */\n events: ScheduleEventData[];\n\n /** Events count to use for `+X more` label */\n moreEventsCount: number;\n\n /** Key of `theme.radius` or any valid CSS value to set border-radius @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** Title for the Modal component, ignored if `dropdownType` is not 'modal' */\n modalTitle?: string;\n\n /** Type of dropdown to use for displaying more events @default 'popover' */\n dropdownType?: MoreEventsDropdownType;\n\n /** Props passed down to `Popover` component */\n popoverProps?: Partial<Omit<PopoverProps, 'children'>>;\n\n /** Props passed down to `Modal` component */\n modalProps?: Partial<Omit<ModalProps, 'children'>>;\n\n /** Called when the dropdown is closed */\n onDropdownClose?: () => void;\n\n /** Function to customize event body, `event` object is passed as first argument */\n renderEventBody?: RenderEventBody;\n\n /** Function to fully customize event rendering, receives all props that would be passed to the root element including children */\n renderEvent?: RenderEvent;\n\n /** Labels override */\n labels?: ScheduleLabelsOverride;\n\n /** Interaction mode: 'default' allows all interactions, 'static' disables event interactions @default default */\n mode?: ScheduleMode;\n\n /** Called when an event inside the dropdown is clicked */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n}\n\nexport type MoreEventsFactory = Factory<{\n props: MoreEventsProps;\n ref: HTMLButtonElement;\n stylesNames: MoreEventsStylesNames;\n}>;\n\nconst defaultProps = {\n dropdownType: 'popover',\n} satisfies Partial<MoreEventsProps>;\n\nexport const MoreEvents = factory<MoreEventsFactory>((_props) => {\n const props = useProps('MoreEvents', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n attributes,\n radius,\n dropdownType,\n events,\n moreEventsCount,\n popoverProps,\n modalProps,\n onDropdownClose,\n children,\n modalTitle,\n renderEventBody,\n renderEvent,\n id,\n labels,\n mode,\n onEventClick,\n ...others\n } = props;\n const [dropdownOpened, dropdownHandlers] = useDisclosure();\n\n const getStyles = useStyles<MoreEventsFactory>({\n name: 'MoreEvents',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n rootSelector: 'moreEventsButton',\n });\n\n const handleClose = () => {\n dropdownHandlers.close();\n onDropdownClose?.();\n };\n\n const eventsList = (\n <div {...getStyles('moreEventsList')}>\n {events.map((event) => (\n <ScheduleEvent\n key={event.id}\n radius={radius}\n event={event}\n size=\"md\"\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n mode={mode}\n onClick={onEventClick ? (e) => onEventClick(event, e) : undefined}\n >\n {event.title}\n </ScheduleEvent>\n ))}\n </div>\n );\n\n return (\n <>\n {dropdownType === 'modal' && (\n <Modal\n opened={dropdownOpened}\n onClose={handleClose}\n unstyled={unstyled}\n radius={radius}\n title={modalTitle}\n {...modalProps}\n >\n {eventsList}\n </Modal>\n )}\n\n <Popover\n position=\"bottom-start\"\n width={260}\n opened={dropdownOpened}\n trapFocus\n returnFocus={false}\n unstyled={unstyled}\n disabled={popoverProps?.disabled || dropdownType === 'modal'}\n radius={radius}\n transitionProps={{ transition: 'pop', duration: 120 }}\n offset={-46}\n id={id}\n {...popoverProps}\n onChange={(_opened) => {\n if (!_opened) {\n popoverProps?.onChange?.(_opened);\n handleClose();\n }\n }}\n >\n <Popover.Target>\n <UnstyledButton\n {...getStyles('moreEventsButton')}\n mod={{ static: mode === 'static' }}\n onClick={() => dropdownHandlers.toggle()}\n {...others}\n >\n {getLabel('moreLabel', labels)(moreEventsCount)}\n </UnstyledButton>\n </Popover.Target>\n\n <Popover.Dropdown {...getStyles('moreEventsDropdown')}>{eventsList}</Popover.Dropdown>\n </Popover>\n </>\n );\n});\n\nMoreEvents.displayName = '@mantine/schedule/MoreEvents';\nMoreEvents.classes = classes;\n"],"mappings":";;;;;;;;;AAyEA,MAAM,eAAe,EACnB,cAAc,UAChB;AAEA,MAAa,cAAA,GAAA,cAAA,UAAyC,WAAW;CAC/D,MAAM,SAAA,GAAA,cAAA,UAAiB,cAAc,cAAc,MAAM;CACzD,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,YACA,QACA,cACA,QACA,iBACA,cACA,YACA,iBACA,UACA,YACA,iBACA,aACA,IACA,QACA,MACA,cACA,GAAG,WACD;CACJ,MAAM,CAAC,gBAAgB,qBAAA,GAAA,eAAA,eAAkC;CAEzD,MAAM,aAAA,GAAA,cAAA,WAAyC;EAC7C,MAAM;EACN,SAAA,0BAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;CAChB,CAAC;CAED,MAAM,oBAAoB;EACxB,iBAAiB,MAAM;EACvB,kBAAkB;CACpB;CAEA,MAAM,aACJ,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,GAAI,UAAU,gBAAgB;YAChC,OAAO,KAAK,UACX,iBAAA,GAAA,kBAAA,KAACA,sBAAAA,eAAD;GAEU;GACD;GACP,MAAK;GACY;GACJ;GACP;GACN,SAAS,gBAAgB,MAAM,aAAa,OAAO,CAAC,IAAI,KAAA;aAEvD,MAAM;EACM,GAVR,MAAM,EAUE,CAChB;CACE,CAAA;CAGP,OACE,iBAAA,GAAA,kBAAA,MAAA,kBAAA,UAAA,EAAA,UAAA,CACG,iBAAiB,WAChB,iBAAA,GAAA,kBAAA,KAACC,cAAAA,OAAD;EACE,QAAQ;EACR,SAAS;EACC;EACF;EACR,OAAO;EACP,GAAI;YAEH;CACI,CAAA,GAGT,iBAAA,GAAA,kBAAA,MAACC,cAAAA,SAAD;EACE,UAAS;EACT,OAAO;EACP,QAAQ;EACR,WAAA;EACA,aAAa;EACH;EACV,UAAU,cAAc,YAAY,iBAAiB;EAC7C;EACR,iBAAiB;GAAE,YAAY;GAAO,UAAU;EAAI;EACpD,QAAQ;EACJ;EACJ,GAAI;EACJ,WAAW,YAAY;GACrB,IAAI,CAAC,SAAS;IACZ,cAAc,WAAW,OAAO;IAChC,YAAY;GACd;EACF;YAlBF,CAoBE,iBAAA,GAAA,kBAAA,KAACA,cAAAA,QAAQ,QAAT,EAAA,UACE,iBAAA,GAAA,kBAAA,KAACC,cAAAA,gBAAD;GACE,GAAI,UAAU,kBAAkB;GAChC,KAAK,EAAE,QAAQ,SAAS,SAAS;GACjC,eAAe,iBAAiB,OAAO;GACvC,GAAI;aAEHC,eAAAA,SAAS,aAAa,MAAM,EAAE,eAAe;EAChC,CAAA,EACF,CAAA,GAEhB,iBAAA,GAAA,kBAAA,KAACF,cAAAA,QAAQ,UAAT;GAAkB,GAAI,UAAU,oBAAoB;aAAI;EAA6B,CAAA,CAC9E;GACT,EAAA,CAAA;AAEN,CAAC;AAED,WAAW,cAAc;AACzB,WAAW,UAAUG,0BAAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Schedule.cjs","names":["DayView","WeekView","MonthView","YearView","MobileMonthView","Box","classes"],"sources":["../../../src/components/Schedule/Schedule.tsx"],"sourcesContent":["import {\n Box,\n BoxProps,\n ElementProps,\n factory,\n Factory,\n MantineRadius,\n StylesApiProps,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { useUncontrolled } from '@mantine/hooks';\nimport { ScheduleLabelsOverride } from '../../labels';\nimport {\n DateStringValue,\n DateTimeStringValue,\n ScheduleEventData,\n ScheduleMode,\n ScheduleViewLevel,\n} from '../../types';\nimport { DayView, DayViewProps, DayViewStylesNames } from '../DayView/DayView';\nimport {\n MobileMonthView,\n MobileMonthViewProps,\n MobileMonthViewStylesNames,\n} from '../MobileMonthView/MobileMonthView';\nimport { MonthView, MonthViewProps, MonthViewStylesNames } from '../MonthView/MonthView';\nimport { RenderEventBody } from '../ScheduleEvent/ScheduleEvent';\nimport { WeekView, WeekViewProps, WeekViewStylesNames } from '../WeekView/WeekView';\nimport { YearView, YearViewProps, YearViewStylesNames } from '../YearView/YearView';\nimport classes from './Schedule.module.css';\n\nexport type ScheduleStylesNames =\n | 'root'\n | 'desktopView'\n | 'mobileView'\n | DayViewStylesNames\n | WeekViewStylesNames\n | MonthViewStylesNames\n | YearViewStylesNames\n | MobileMonthViewStylesNames;\n\nexport type ScheduleLayout = 'default' | 'responsive';\n\ntype ScheduleCommonProps =\n | 'date'\n | 'onDateChange'\n | 'events'\n | 'locale'\n | 'radius'\n | 'labels'\n | 'renderEventBody'\n | 'withEventsDragAndDrop'\n | 'onEventDrop'\n | 'canDragEvent'\n | 'onEventDragStart'\n | 'onEventDragEnd'\n | 'onTimeSlotClick'\n | 'onAllDaySlotClick'\n | 'onEventClick'\n | 'onDayClick'\n | 'onMonthClick'\n | 'withDragSlotSelect'\n | 'onSlotDragEnd'\n | 'view'\n | 'onViewChange'\n | 'mode'\n | 'onExternalEventDrop'\n | 'withEventResize'\n | 'onEventResize'\n | 'canResizeEvent'\n | 'recurrenceExpansionLimit';\n\ntype ScheduleViewProps<T> = Partial<Omit<T, ScheduleCommonProps>>;\n\nexport interface ScheduleProps\n extends BoxProps, StylesApiProps<ScheduleFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Current date to display (controlled) */\n date?: Date | DateStringValue;\n\n /** Default date (uncontrolled) */\n defaultDate?: Date | DateStringValue;\n\n /** Called when date changes via navigation */\n onDateChange?: (date: DateStringValue) => void;\n\n /** Current view level (controlled) */\n view?: ScheduleViewLevel;\n\n /** Default view level (uncontrolled) */\n defaultView?: ScheduleViewLevel;\n\n /** Called when view level changes */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Events to display across all views */\n events?: ScheduleEventData[];\n\n /** Locale for date formatting (overrides `DatesProvider`) */\n locale?: string;\n\n /** Key of theme.radius or any valid CSS value to set border-radius */\n radius?: MantineRadius;\n\n /** Labels override for i18n */\n labels?: ScheduleLabelsOverride;\n\n /** Custom event body renderer */\n renderEventBody?: RenderEventBody;\n\n /** Enable drag and drop for events @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped */\n onEventDrop?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => void;\n\n /** Function to determine if event can be dragged */\n canDragEvent?: (event: ScheduleEventData) => boolean;\n\n /** Called when any event drag starts */\n onEventDragStart?: (event: ScheduleEventData) => void;\n\n /** Called when any event drag ends */\n onEventDragEnd?: () => void;\n\n /** Called when time slot is clicked in DayView/WeekView */\n onTimeSlotClick?: (data: {\n slotStart: DateTimeStringValue;\n slotEnd: DateTimeStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n }) => void;\n\n /** Called when all-day slot is clicked in DayView/WeekView */\n onAllDaySlotClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Called when day is clicked in MonthView */\n onDayClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** If set, enables drag-to-select slot ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a slot range is selected by dragging */\n onSlotDragEnd?: (rangeStart: DateTimeStringValue, rangeEnd: DateTimeStringValue) => void;\n\n /** Called when event is clicked in any view */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Interaction mode:\n * - `'default'` allows all interactions\n * - `'static'` disables event interactions\n * @default 'default' */\n mode?: ScheduleMode;\n\n /** Called when an external item is dropped onto the schedule. Receives the `DataTransfer` object and the drop target datetime. */\n onExternalEventDrop?: (dataTransfer: DataTransfer, dropDateTime: DateTimeStringValue) => void;\n\n /** If true, events can be resized by dragging their edges @default false */\n withEventResize?: boolean;\n\n /** Called when event is resized */\n onEventResize?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => void;\n\n /** Function to determine if event can be resized */\n canResizeEvent?: (event: ScheduleEventData) => boolean;\n\n /** Max number of generated recurring instances per recurring series @default 2000 */\n recurrenceExpansionLimit?: number;\n\n /** Layout mode:\n * - `'default'` uses same views on all screen sizes\n * - `'responsive'` switches to YearView/MobileMonthView on small screens\n * @default 'default' */\n layout?: ScheduleLayout;\n\n /** Props specific to DayView (includes `startTime`, `endTime`, `intervalMinutes`, etc.) */\n dayViewProps?: ScheduleViewProps<DayViewProps>;\n\n /** Props specific to WeekView (includes `startTime`, `endTime`, `intervalMinutes`, etc.) */\n weekViewProps?: ScheduleViewProps<WeekViewProps>;\n\n /** Props specific to MonthView (includes `firstDayOfWeek`, `weekendDays`, etc.) */\n monthViewProps?: ScheduleViewProps<MonthViewProps>;\n\n /** Props specific to YearView (includes `firstDayOfWeek`, `weekendDays`, etc.) */\n yearViewProps?: ScheduleViewProps<YearViewProps>;\n\n /** Props specific to MobileMonthView (used in responsive layout) */\n mobileMonthViewProps?: ScheduleViewProps<MobileMonthViewProps>;\n}\n\nexport type ScheduleFactory = Factory<{\n props: ScheduleProps;\n ref: HTMLDivElement;\n stylesNames: ScheduleStylesNames;\n}>;\n\nconst defaultProps: Partial<ScheduleProps> = {\n defaultView: 'week',\n mode: 'default',\n layout: 'default',\n};\n\nexport const Schedule = factory<ScheduleFactory>((_props) => {\n const props = useProps('Schedule', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n date,\n defaultDate,\n onDateChange,\n view,\n defaultView,\n onViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onAllDaySlotClick,\n onDayClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n withEventResize,\n onEventResize,\n canResizeEvent,\n recurrenceExpansionLimit,\n mode,\n layout,\n dayViewProps,\n weekViewProps,\n monthViewProps,\n yearViewProps,\n mobileMonthViewProps,\n __staticSelector,\n mod,\n ...others\n } = props;\n\n const getStyles = useStyles<ScheduleFactory>({\n name: __staticSelector || 'Schedule',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n });\n\n const [_view, _setView] = useUncontrolled<ScheduleViewLevel>({\n value: view,\n defaultValue: defaultView,\n onChange: onViewChange,\n });\n\n const [_date, _setDate] = useUncontrolled<Date | DateStringValue>({\n value: date,\n defaultValue: defaultDate ?? new Date(),\n });\n\n const handleDateChange = (newDate: DateStringValue) => {\n _setDate(newDate);\n onDateChange?.(newDate);\n };\n\n const handleViewChange = (newView: ScheduleViewLevel) => {\n _setView(newView);\n onViewChange?.(newView);\n };\n\n const handleMonthClick = (monthDate: DateStringValue) => {\n handleDateChange(monthDate);\n handleViewChange('month');\n };\n\n const commonProps = {\n date: _date,\n onDateChange: handleDateChange,\n view: _view,\n onViewChange: handleViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n withEventsDragAndDrop: mode === 'static' ? false : withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onAllDaySlotClick,\n onDayClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n withEventResize: mode === 'static' ? false : withEventResize,\n onEventResize,\n canResizeEvent,\n recurrenceExpansionLimit,\n mode,\n };\n\n const desktopContent = (() => {\n switch (_view) {\n case 'day':\n return <DayView {...commonProps} {...dayViewProps} />;\n case 'week':\n return <WeekView {...commonProps} {...weekViewProps} />;\n case 'month':\n return <MonthView {...commonProps} {...monthViewProps} />;\n case 'year':\n return <YearView {...commonProps} onMonthClick={handleMonthClick} {...yearViewProps} />;\n default:\n return null;\n }\n })();\n\n const mobileContent = (() => {\n switch (_view) {\n case 'day':\n case 'week':\n case 'month':\n return (\n <MobileMonthView\n date={_date}\n onDateChange={handleDateChange}\n events={events}\n locale={locale}\n radius={radius}\n labels={labels}\n mode={mode}\n recurrenceExpansionLimit={recurrenceExpansionLimit}\n onYearClick={() => handleViewChange('year')}\n onEventClick={onEventClick}\n {...mobileMonthViewProps}\n />\n );\n case 'year':\n return <YearView {...commonProps} onMonthClick={handleMonthClick} {...yearViewProps} />;\n default:\n return null;\n }\n })();\n\n if (layout === 'responsive') {\n return (\n <Box {...getStyles('root')} mod={[{ layout }, mod]} {...others}>\n <Box {...getStyles('desktopView')}>{desktopContent}</Box>\n <Box {...getStyles('mobileView')}>{mobileContent}</Box>\n </Box>\n );\n }\n\n return (\n <Box {...getStyles('root')} mod={mod} {...others}>\n {desktopContent}\n </Box>\n );\n});\n\nSchedule.displayName = '@mantine/schedule/Schedule';\nSchedule.classes = classes;\n\nexport namespace Schedule {\n export type Props = ScheduleProps;\n export type StylesNames = ScheduleStylesNames;\n export type Factory = ScheduleFactory;\n export type Layout = ScheduleLayout;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Schedule.cjs","names":["DayView","WeekView","MonthView","YearView","MobileMonthView","Box","classes"],"sources":["../../../src/components/Schedule/Schedule.tsx"],"sourcesContent":["import {\n Box,\n BoxProps,\n ElementProps,\n factory,\n Factory,\n MantineRadius,\n StylesApiProps,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { useUncontrolled } from '@mantine/hooks';\nimport { ScheduleLabelsOverride } from '../../labels';\nimport {\n DateStringValue,\n DateTimeStringValue,\n ScheduleEventData,\n ScheduleMode,\n ScheduleViewLevel,\n} from '../../types';\nimport { DayView, DayViewProps, DayViewStylesNames } from '../DayView/DayView';\nimport {\n MobileMonthView,\n MobileMonthViewProps,\n MobileMonthViewStylesNames,\n} from '../MobileMonthView/MobileMonthView';\nimport { MonthView, MonthViewProps, MonthViewStylesNames } from '../MonthView/MonthView';\nimport { RenderEventBody } from '../ScheduleEvent/ScheduleEvent';\nimport { WeekView, WeekViewProps, WeekViewStylesNames } from '../WeekView/WeekView';\nimport { YearView, YearViewProps, YearViewStylesNames } from '../YearView/YearView';\nimport classes from './Schedule.module.css';\n\nexport type ScheduleStylesNames =\n | 'root'\n | 'desktopView'\n | 'mobileView'\n | DayViewStylesNames\n | WeekViewStylesNames\n | MonthViewStylesNames\n | YearViewStylesNames\n | MobileMonthViewStylesNames;\n\nexport type ScheduleLayout = 'default' | 'responsive';\n\ntype ScheduleCommonProps =\n | 'date'\n | 'onDateChange'\n | 'events'\n | 'locale'\n | 'radius'\n | 'labels'\n | 'renderEventBody'\n | 'withEventsDragAndDrop'\n | 'onEventDrop'\n | 'canDragEvent'\n | 'onEventDragStart'\n | 'onEventDragEnd'\n | 'onTimeSlotClick'\n | 'onAllDaySlotClick'\n | 'onEventClick'\n | 'onDayClick'\n | 'onMonthClick'\n | 'withDragSlotSelect'\n | 'onSlotDragEnd'\n | 'view'\n | 'onViewChange'\n | 'mode'\n | 'onExternalEventDrop'\n | 'withEventResize'\n | 'onEventResize'\n | 'canResizeEvent'\n | 'recurrenceExpansionLimit';\n\ntype ScheduleViewProps<T> = Partial<Omit<T, ScheduleCommonProps>>;\n\nexport interface ScheduleProps\n extends BoxProps, StylesApiProps<ScheduleFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Current date to display (controlled) */\n date?: Date | DateStringValue;\n\n /** Default date (uncontrolled) */\n defaultDate?: Date | DateStringValue;\n\n /** Called when date changes via navigation */\n onDateChange?: (date: DateStringValue) => void;\n\n /** Current view level (controlled) */\n view?: ScheduleViewLevel;\n\n /** Default view level (uncontrolled) */\n defaultView?: ScheduleViewLevel;\n\n /** Called when view level changes */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Events to display across all views */\n events?: ScheduleEventData[];\n\n /** Locale for date formatting (overrides `DatesProvider`) */\n locale?: string;\n\n /** Key of theme.radius or any valid CSS value to set border-radius */\n radius?: MantineRadius;\n\n /** Labels override for i18n */\n labels?: ScheduleLabelsOverride;\n\n /** Custom event body renderer */\n renderEventBody?: RenderEventBody;\n\n /** Enable drag and drop for events @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped */\n onEventDrop?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => void;\n\n /** Function to determine if event can be dragged */\n canDragEvent?: (event: ScheduleEventData) => boolean;\n\n /** Called when any event drag starts */\n onEventDragStart?: (event: ScheduleEventData) => void;\n\n /** Called when any event drag ends */\n onEventDragEnd?: () => void;\n\n /** Called when time slot is clicked in DayView/WeekView */\n onTimeSlotClick?: (data: {\n slotStart: DateTimeStringValue;\n slotEnd: DateTimeStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n }) => void;\n\n /** Called when all-day slot is clicked in DayView/WeekView */\n onAllDaySlotClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Called when a day is clicked in MonthView and YearView */\n onDayClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** If set, enables drag-to-select slot ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a slot range is selected by dragging */\n onSlotDragEnd?: (rangeStart: DateTimeStringValue, rangeEnd: DateTimeStringValue) => void;\n\n /** Called when event is clicked in any view */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Interaction mode:\n * - `'default'` allows all interactions\n * - `'static'` disables event interactions\n * @default 'default' */\n mode?: ScheduleMode;\n\n /** Called when an external item is dropped onto the schedule. Receives the `DataTransfer` object and the drop target datetime. */\n onExternalEventDrop?: (dataTransfer: DataTransfer, dropDateTime: DateTimeStringValue) => void;\n\n /** If true, events can be resized by dragging their edges @default false */\n withEventResize?: boolean;\n\n /** Called when event is resized */\n onEventResize?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => void;\n\n /** Function to determine if event can be resized */\n canResizeEvent?: (event: ScheduleEventData) => boolean;\n\n /** Max number of generated recurring instances per recurring series @default 2000 */\n recurrenceExpansionLimit?: number;\n\n /** Layout mode:\n * - `'default'` uses same views on all screen sizes\n * - `'responsive'` switches to YearView/MobileMonthView on small screens\n * @default 'default' */\n layout?: ScheduleLayout;\n\n /** Props specific to DayView (includes `startTime`, `endTime`, `intervalMinutes`, etc.) */\n dayViewProps?: ScheduleViewProps<DayViewProps>;\n\n /** Props specific to WeekView (includes `startTime`, `endTime`, `intervalMinutes`, etc.) */\n weekViewProps?: ScheduleViewProps<WeekViewProps>;\n\n /** Props specific to MonthView (includes `firstDayOfWeek`, `weekendDays`, etc.) */\n monthViewProps?: ScheduleViewProps<MonthViewProps>;\n\n /** Props specific to YearView (includes `firstDayOfWeek`, `weekendDays`, etc.) */\n yearViewProps?: ScheduleViewProps<YearViewProps>;\n\n /** Props specific to MobileMonthView (used in responsive layout) */\n mobileMonthViewProps?: ScheduleViewProps<MobileMonthViewProps>;\n}\n\nexport type ScheduleFactory = Factory<{\n props: ScheduleProps;\n ref: HTMLDivElement;\n stylesNames: ScheduleStylesNames;\n}>;\n\nconst defaultProps: Partial<ScheduleProps> = {\n defaultView: 'week',\n mode: 'default',\n layout: 'default',\n};\n\nexport const Schedule = factory<ScheduleFactory>((_props) => {\n const props = useProps('Schedule', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n date,\n defaultDate,\n onDateChange,\n view,\n defaultView,\n onViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onAllDaySlotClick,\n onDayClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n withEventResize,\n onEventResize,\n canResizeEvent,\n recurrenceExpansionLimit,\n mode,\n layout,\n dayViewProps,\n weekViewProps,\n monthViewProps,\n yearViewProps,\n mobileMonthViewProps,\n __staticSelector,\n mod,\n ...others\n } = props;\n\n const getStyles = useStyles<ScheduleFactory>({\n name: __staticSelector || 'Schedule',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n });\n\n const [_view, _setView] = useUncontrolled<ScheduleViewLevel>({\n value: view,\n defaultValue: defaultView,\n onChange: onViewChange,\n });\n\n const [_date, _setDate] = useUncontrolled<Date | DateStringValue>({\n value: date,\n defaultValue: defaultDate ?? new Date(),\n });\n\n const handleDateChange = (newDate: DateStringValue) => {\n _setDate(newDate);\n onDateChange?.(newDate);\n };\n\n const handleViewChange = (newView: ScheduleViewLevel) => {\n _setView(newView);\n onViewChange?.(newView);\n };\n\n const handleMonthClick = (monthDate: DateStringValue) => {\n handleDateChange(monthDate);\n handleViewChange('month');\n };\n\n const commonProps = {\n date: _date,\n onDateChange: handleDateChange,\n view: _view,\n onViewChange: handleViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n withEventsDragAndDrop: mode === 'static' ? false : withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onAllDaySlotClick,\n onDayClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n withEventResize: mode === 'static' ? false : withEventResize,\n onEventResize,\n canResizeEvent,\n recurrenceExpansionLimit,\n mode,\n };\n\n const desktopContent = (() => {\n switch (_view) {\n case 'day':\n return <DayView {...commonProps} {...dayViewProps} />;\n case 'week':\n return <WeekView {...commonProps} {...weekViewProps} />;\n case 'month':\n return <MonthView {...commonProps} {...monthViewProps} />;\n case 'year':\n return <YearView {...commonProps} onMonthClick={handleMonthClick} {...yearViewProps} />;\n default:\n return null;\n }\n })();\n\n const mobileContent = (() => {\n switch (_view) {\n case 'day':\n case 'week':\n case 'month':\n return (\n <MobileMonthView\n date={_date}\n onDateChange={handleDateChange}\n events={events}\n locale={locale}\n radius={radius}\n labels={labels}\n mode={mode}\n recurrenceExpansionLimit={recurrenceExpansionLimit}\n onYearClick={() => handleViewChange('year')}\n onEventClick={onEventClick}\n {...mobileMonthViewProps}\n />\n );\n case 'year':\n return <YearView {...commonProps} onMonthClick={handleMonthClick} {...yearViewProps} />;\n default:\n return null;\n }\n })();\n\n if (layout === 'responsive') {\n return (\n <Box {...getStyles('root')} mod={[{ layout }, mod]} {...others}>\n <Box {...getStyles('desktopView')}>{desktopContent}</Box>\n <Box {...getStyles('mobileView')}>{mobileContent}</Box>\n </Box>\n );\n }\n\n return (\n <Box {...getStyles('root')} mod={mod} {...others}>\n {desktopContent}\n </Box>\n );\n});\n\nSchedule.displayName = '@mantine/schedule/Schedule';\nSchedule.classes = classes;\n\nexport namespace Schedule {\n export type Props = ScheduleProps;\n export type StylesNames = ScheduleStylesNames;\n export type Factory = ScheduleFactory;\n export type Layout = ScheduleLayout;\n}\n"],"mappings":"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"}
|