@marco.colia/react-fast-scheduler 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/constants.ts","../src/components/utils.ts","../src/components/Scheduler.tsx","../src/appointment-change.ts"],"names":["pointerMin","nextEndMin","onResizePointerDown"],"mappings":"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","file":"index.js","sourcesContent":["const OPEN_TIME = '09:00';\r\nconst CLOSE_TIME = '18:00';\r\n\r\nconst STEP_MIN = 15;\r\nconst MIN_EVENT_MIN = 15;\r\nconst DEFAULT_CREATE_MIN = 30;\r\n\r\nconst PX_PER_MIN = 2; // visual scale\r\nconst HEADER_H = 56;\r\nconst GUTTER_W = 72;\r\nconst TOP_PAD = 12;\r\nconst BOTTOM_PAD = 24;\r\n\r\nconst RESOURCE_MIN_W = 420; // columns expand to fill available width; min width enables x-scroll when needed\r\nconst RESOURCE_MIN_W_TW = 'min-w-[400px] lg:w-full'; // columns expand to fill available width; min width enables x-scroll when needed\r\nconst LANE_GAP = 6;\r\n\r\nexport {\r\n OPEN_TIME,\r\n CLOSE_TIME,\r\n STEP_MIN,\r\n MIN_EVENT_MIN,\r\n DEFAULT_CREATE_MIN,\r\n PX_PER_MIN,\r\n HEADER_H,\r\n GUTTER_W,\r\n TOP_PAD,\r\n BOTTOM_PAD,\r\n RESOURCE_MIN_W,\r\n LANE_GAP,\r\n RESOURCE_MIN_W_TW,\r\n}","import { format } from \"date-fns\";\r\nimport { STEP_MIN } from \"./constants\";\r\n\r\ntype NameLike = {\r\n firstName?: string | null;\r\n lastName?: string | null;\r\n};\r\n\r\ntype TimeBlockLike<TId extends string | number = string | number> = {\r\n id: TId;\r\n startMin: number;\r\n endMin: number;\r\n};\r\n\r\ntype LaidOut<T extends TimeBlockLike> = T & {\r\n lane: number;\r\n lanes: number;\r\n};\r\n\r\nconst clamp = (n: number, min: number, max: number) => {\r\n return Math.max(min, Math.min(max, n));\r\n};\r\n\r\nconst snap = (mins: number, stepMin = STEP_MIN) => {\r\n return Math.round(mins / stepMin) * stepMin;\r\n};\r\n\r\nconst parseHHMM = (hhmm: string) => {\r\n const [h, m] = hhmm.split(\":\").map(Number);\r\n return h * 60 + m;\r\n};\r\n\r\nconst fullName = <T extends NameLike>(u: T) => {\r\n return `${u.firstName ?? \"\"} ${u.lastName ?? \"\"}`.trim();\r\n};\r\n\r\nconst dayISO = (d: Date) => {\r\n return format(d, \"yyyy-MM-dd\");\r\n};\r\n\r\nconst shiftDays = (d: Date, delta: number) => {\r\n return new Date(d.getFullYear(), d.getMonth(), d.getDate() + delta);\r\n};\r\n\r\nconst dateAtMinute = (\r\n selectedDate: Date,\r\n dayStartAbs: number,\r\n minuteFromStart: number\r\n) => {\r\n const base = new Date(\r\n selectedDate.getFullYear(),\r\n selectedDate.getMonth(),\r\n selectedDate.getDate(),\r\n 0,\r\n 0,\r\n 0,\r\n 0\r\n );\r\n const abs = dayStartAbs + minuteFromStart;\r\n const hh = Math.floor(abs / 60);\r\n const mm = abs % 60;\r\n base.setHours(hh, mm, 0, 0);\r\n return base;\r\n};\r\n\r\nconst minutesFromDayStart = (dayStartAbs: number, dt: Date) => {\r\n return dt.getHours() * 60 + dt.getMinutes() - dayStartAbs;\r\n};\r\n\r\nconst overlaps = (a: TimeBlockLike, b: TimeBlockLike) => {\r\n return a.startMin < b.endMin && b.startMin < a.endMin;\r\n};\r\n\r\nconst layoutOverlaps = <T extends TimeBlockLike>(blocks: T[]): LaidOut<T>[] => {\r\n const sorted = [...blocks].sort((a, b) => a.startMin - b.startMin || a.endMin - b.endMin);\r\n\r\n const groups: T[][] = [];\r\n let active: T[] = [];\r\n let current: T[] = [];\r\n\r\n for (const e of sorted) {\r\n active = active.filter((x) => x.endMin > e.startMin);\r\n const conflicts = active.some((x) => overlaps(x, e));\r\n\r\n if (!conflicts && current.length > 0) {\r\n groups.push(current);\r\n current = [];\r\n }\r\n current.push(e);\r\n active.push(e);\r\n }\r\n if (current.length) {\r\n groups.push(current);\r\n }\r\n\r\n const out: LaidOut<T>[] = [];\r\n\r\n for (const group of groups) {\r\n const g = [...group].sort((a, b) => a.startMin - b.startMin || a.endMin - b.endMin);\r\n const laneEnd: number[] = [];\r\n const laneOf = new Map<T[\"id\"], number>();\r\n\r\n for (const e of g) {\r\n let placed = false;\r\n for (let i = 0; i < laneEnd.length; i++) {\r\n if (laneEnd[i] <= e.startMin) {\r\n laneEnd[i] = e.endMin;\r\n laneOf.set(e.id, i);\r\n placed = true;\r\n break;\r\n }\r\n }\r\n if (!placed) {\r\n laneEnd.push(e.endMin);\r\n laneOf.set(e.id, laneEnd.length - 1);\r\n }\r\n }\r\n\r\n const lanes = laneEnd.length;\r\n for (const e of g) {\r\n out.push({ ...e, lane: laneOf.get(e.id) ?? 0, lanes });\r\n }\r\n }\r\n\r\n return out;\r\n};\r\n\r\nexport {\r\n clamp,\r\n snap,\r\n parseHHMM,\r\n fullName,\r\n dayISO,\r\n shiftDays,\r\n dateAtMinute,\r\n minutesFromDayStart,\r\n overlaps,\r\n layoutOverlaps,\r\n};\r\n","import * as React from \"react\";\r\nimport { BOTTOM_PAD, GUTTER_W, MIN_EVENT_MIN, PX_PER_MIN, RESOURCE_MIN_W, STEP_MIN, TOP_PAD } from \"./constants\";\r\nimport { clamp, dateAtMinute, dayISO, fullName, layoutOverlaps, minutesFromDayStart, overlaps, parseHHMM, shiftDays, snap } from \"./utils\";\r\nimport type {\r\n BaseSchedulerResource,\r\n SchedulerAppointmentAppearance,\r\n SchedulerAppointmentColorToken,\r\n SchedulerDragState,\r\n SchedulerEvent,\r\n SchedulerId,\r\n SchedulerProps\r\n} from \"../types/scheduler\";\r\n\r\nfunction isNameLike(resource: unknown): resource is { firstName?: string | null; lastName?: string | null } {\r\n if (!resource || typeof resource !== \"object\") {\r\n return false;\r\n }\r\n const maybe = resource as { firstName?: unknown; lastName?: unknown };\r\n return typeof maybe.firstName === \"string\" || typeof maybe.lastName === \"string\";\r\n}\r\n\r\nfunction toInputDateValue(date: Date): string {\r\n const year = date.getFullYear();\r\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const day = String(date.getDate()).padStart(2, \"0\");\r\n return `${year}-${month}-${day}`;\r\n}\r\n\r\nfunction fromInputDateValue(value: string): Date | null {\r\n const [yearRaw, monthRaw, dayRaw] = value.split(\"-\");\r\n const year = Number(yearRaw);\r\n const month = Number(monthRaw);\r\n const day = Number(dayRaw);\r\n if (!Number.isInteger(year) || !Number.isInteger(month) || !Number.isInteger(day)) {\r\n return null;\r\n }\r\n return new Date(year, month - 1, day);\r\n}\r\n\r\nconst DEFAULT_APPOINTMENT_COLOR_TOKEN_CLASS_MAP: Record<SchedulerAppointmentColorToken, string> = {\r\n slate: \"bg-slate-100 dark:bg-slate-900/40\",\r\n gray: \"bg-gray-100 dark:bg-gray-900/40\",\r\n zinc: \"bg-zinc-100 dark:bg-zinc-900/40\",\r\n neutral: \"bg-neutral-100 dark:bg-neutral-900/40\",\r\n stone: \"bg-stone-100 dark:bg-stone-900/40\",\r\n red: \"bg-red-100 dark:bg-red-950/40\",\r\n orange: \"bg-orange-100 dark:bg-orange-950/40\",\r\n amber: \"bg-amber-100 dark:bg-amber-950/40\",\r\n yellow: \"bg-yellow-100 dark:bg-yellow-950/40\",\r\n lime: \"bg-lime-100 dark:bg-lime-950/40\",\r\n green: \"bg-green-100 dark:bg-green-950/40\",\r\n emerald: \"bg-emerald-100 dark:bg-emerald-950/40\",\r\n teal: \"bg-teal-100 dark:bg-teal-950/40\",\r\n cyan: \"bg-cyan-100 dark:bg-cyan-950/40\",\r\n sky: \"bg-sky-100 dark:bg-sky-950/40\",\r\n blue: \"bg-blue-100 dark:bg-blue-950/40\",\r\n indigo: \"bg-indigo-100 dark:bg-indigo-950/40\",\r\n violet: \"bg-violet-100 dark:bg-violet-950/40\",\r\n purple: \"bg-purple-100 dark:bg-purple-950/40\",\r\n fuchsia: \"bg-fuchsia-100 dark:bg-fuchsia-950/40\",\r\n pink: \"bg-pink-100 dark:bg-pink-950/40\",\r\n rose: \"bg-rose-100 dark:bg-rose-950/40\"\r\n};\r\n\r\nexport function Scheduler<TAppointment, TResource extends BaseSchedulerResource<TResourceId>, TResourceId extends SchedulerId>({\r\n resources,\r\n appointments,\r\n selectedDate,\r\n onSelectedDateChange,\r\n adapter,\r\n onPersistMoveResize,\r\n onAppointmentChange,\r\n renderResourceHeader,\r\n renderAppointment,\r\n resourceAppointmentClassMap,\r\n getResourceAppointmentAppearance,\r\n getResourceAppointmentColorToken,\r\n appointmentColorTokenClassMap,\r\n getResourceAppointmentBackground,\r\n renderDatePicker,\r\n prevButtonLabel = \"Prev\",\r\n nextButtonLabel = \"Next\",\r\n dayStart = \"09:00\",\r\n dayEnd = \"18:00\"\r\n}: SchedulerProps<TAppointment, TResource, TResourceId>) {\r\n const [drag, setDrag] = React.useState<SchedulerDragState<TResourceId>>({ kind: \"none\" });\r\n const colRefs = React.useRef<Record<string, HTMLDivElement | null>>({});\r\n const suppressClickRef = React.useRef(false);\r\n\r\n const dayStartAbs = parseHHMM(dayStart);\r\n const dayEndAbs = parseHHMM(dayEnd);\r\n const dayMinutes = Math.max(0, dayEndAbs - dayStartAbs);\r\n const gridHeight = TOP_PAD + dayMinutes * PX_PER_MIN + BOTTOM_PAD;\r\n const gridMinWidth = GUTTER_W + Math.max(resources.length, 1) * RESOURCE_MIN_W;\r\n const selectedISO = React.useMemo(() => dayISO(selectedDate), [selectedDate]);\r\n\r\n const renderAppts = React.useMemo<SchedulerEvent<TAppointment, TResourceId>[]>(() => {\r\n return appointments\r\n .map((appointment) => {\r\n const start = new Date(adapter.getStart(appointment));\r\n const end = new Date(adapter.getEnd(appointment));\r\n return {\r\n raw: appointment,\r\n id: adapter.getId(appointment),\r\n resourceId: adapter.getResourceId(appointment),\r\n start,\r\n end,\r\n startMin: clamp(minutesFromDayStart(dayStartAbs, start), 0, dayMinutes),\r\n endMin: clamp(minutesFromDayStart(dayStartAbs, end), 0, dayMinutes),\r\n title: adapter.getTitle(appointment)\r\n };\r\n })\r\n .filter((appointment) => dayISO(appointment.start) === selectedISO);\r\n }, [appointments, adapter, dayStartAbs, dayMinutes, selectedISO]);\r\n\r\n const appointmentMap = React.useMemo(() => {\r\n return new Map(renderAppts.map((appointment) => [appointment.id, appointment]));\r\n }, [renderAppts]);\r\n\r\n const effectiveAppts = React.useMemo<SchedulerEvent<TAppointment, TResourceId>[]>(() => {\r\n if (drag.kind === \"none\") {\r\n return renderAppts;\r\n }\r\n return renderAppts.map((appointment) => {\r\n if (appointment.id !== drag.appointmentId) {\r\n return appointment;\r\n }\r\n return {\r\n ...appointment,\r\n resourceId: drag.resourceId,\r\n startMin: drag.startMin,\r\n endMin: drag.endMin,\r\n start: dateAtMinute(selectedDate, dayStartAbs, drag.startMin),\r\n end: dateAtMinute(selectedDate, dayStartAbs, drag.endMin)\r\n };\r\n });\r\n }, [drag, renderAppts, selectedDate, dayStartAbs]);\r\n\r\n const laidOutByResource = React.useMemo(() => {\r\n const byResource = new Map<TResourceId, ReturnType<typeof layoutOverlaps<SchedulerEvent<TAppointment, TResourceId>>>>();\r\n for (const resource of resources) {\r\n const events = effectiveAppts.filter((appointment) => appointment.resourceId === resource.id);\r\n byResource.set(resource.id, layoutOverlaps(events));\r\n }\r\n return byResource;\r\n }, [effectiveAppts, resources]);\r\n\r\n const appointmentBgByResource = React.useMemo(() => {\r\n const map = new Map<TResourceId, string | undefined>();\r\n if (!getResourceAppointmentBackground) {\r\n return map;\r\n }\r\n for (const resource of resources) {\r\n map.set(resource.id, getResourceAppointmentBackground(resource));\r\n }\r\n return map;\r\n }, [getResourceAppointmentBackground, resources]);\r\n\r\n const appointmentColorTokenClassByResource = React.useMemo(() => {\r\n const map = new Map<TResourceId, string | undefined>();\r\n const mergedClassMap = {\r\n ...DEFAULT_APPOINTMENT_COLOR_TOKEN_CLASS_MAP,\r\n ...(appointmentColorTokenClassMap ?? {})\r\n };\r\n if (!getResourceAppointmentColorToken) {\r\n return map;\r\n }\r\n for (const resource of resources) {\r\n const token = getResourceAppointmentColorToken(resource);\r\n map.set(resource.id, token ? mergedClassMap[token] : undefined);\r\n }\r\n return map;\r\n }, [appointmentColorTokenClassMap, getResourceAppointmentColorToken, resources]);\r\n\r\n const appointmentAppearanceByResource = React.useMemo(() => {\r\n const map = new Map<TResourceId, SchedulerAppointmentAppearance | undefined>();\r\n for (const resource of resources) {\r\n const classFromIdMap = resourceAppointmentClassMap?.[String(resource.id)];\r\n if (classFromIdMap) {\r\n map.set(resource.id, { className: classFromIdMap });\r\n continue;\r\n }\r\n const appearance = getResourceAppointmentAppearance?.(resource);\r\n if (appearance) {\r\n map.set(resource.id, appearance);\r\n continue;\r\n }\r\n const tokenClass = appointmentColorTokenClassByResource.get(resource.id);\r\n if (tokenClass) {\r\n map.set(resource.id, { className: tokenClass });\r\n continue;\r\n }\r\n const legacyBackground = appointmentBgByResource.get(resource.id);\r\n if (!legacyBackground) {\r\n map.set(resource.id, undefined);\r\n continue;\r\n }\r\n map.set(resource.id, { className: legacyBackground });\r\n }\r\n return map;\r\n }, [appointmentBgByResource, appointmentColorTokenClassByResource, getResourceAppointmentAppearance, resourceAppointmentClassMap, resources]);\r\n\r\n const pointerToMin = (resourceId: TResourceId, clientY: number) => {\r\n const col = colRefs.current[String(resourceId)];\r\n if (!col) {\r\n return 0;\r\n }\r\n const y = clientY - col.getBoundingClientRect().top - TOP_PAD;\r\n return clamp(snap(y / PX_PER_MIN), 0, dayMinutes);\r\n };\r\n\r\n const pointerToResourceId = (clientX: number, fallbackResourceId: TResourceId) => {\r\n for (const resource of resources) {\r\n const col = colRefs.current[String(resource.id)];\r\n if (!col) {\r\n continue;\r\n }\r\n const rect = col.getBoundingClientRect();\r\n if (clientX >= rect.left && clientX <= rect.right) {\r\n return resource.id;\r\n }\r\n }\r\n return fallbackResourceId;\r\n };\r\n\r\n const hasOverlap = (appointmentId: SchedulerId, resourceId: TResourceId, startMin: number, endMin: number) => {\r\n const events = renderAppts.filter((appointment) => appointment.resourceId === resourceId && appointment.id !== appointmentId);\r\n return events.some((appointment) => overlaps(appointment, { id: appointmentId, startMin, endMin }));\r\n };\r\n\r\n const persistDrag = async (state: Exclude<SchedulerDragState<TResourceId>, { kind: \"none\" }>) => {\r\n const target = appointmentMap.get(state.appointmentId);\r\n if (!target) {\r\n return;\r\n }\r\n if (hasOverlap(state.appointmentId, state.resourceId, state.startMin, state.endMin)) {\r\n return;\r\n }\r\n const next = {\r\n resourceId: state.resourceId,\r\n start: dateAtMinute(selectedDate, dayStartAbs, state.startMin),\r\n end: dateAtMinute(selectedDate, dayStartAbs, state.endMin)\r\n };\r\n\r\n if (onAppointmentChange) {\r\n await onAppointmentChange({\r\n kind: state.kind,\r\n appointment: target.raw,\r\n previous: {\r\n resourceId: target.resourceId,\r\n start: target.start,\r\n end: target.end\r\n },\r\n next\r\n });\r\n return;\r\n }\r\n\r\n if (onPersistMoveResize) {\r\n await onPersistMoveResize({\r\n appointment: target.raw,\r\n resourceId: next.resourceId,\r\n start: next.start,\r\n end: next.end\r\n });\r\n }\r\n };\r\n\r\n const onApptPointerDown = (event: React.PointerEvent, appointment: SchedulerEvent<TAppointment, TResourceId>) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n event.stopPropagation();\r\n suppressClickRef.current = false;\r\n const pointerMin = pointerToMin(appointment.resourceId, event.clientY);\r\n setDrag({\r\n kind: \"move\",\r\n appointmentId: appointment.id,\r\n pointerId: event.pointerId,\r\n resourceId: appointment.resourceId,\r\n durationMin: Math.max(MIN_EVENT_MIN, appointment.endMin - appointment.startMin),\r\n offsetMin: pointerMin - appointment.startMin,\r\n startMin: appointment.startMin,\r\n endMin: appointment.endMin\r\n });\r\n };\r\n\r\n const onResizePointerDown = (event: React.PointerEvent, appointment: SchedulerEvent<TAppointment, TResourceId>) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n event.stopPropagation();\r\n suppressClickRef.current = false;\r\n setDrag({\r\n kind: \"resize\",\r\n appointmentId: appointment.id,\r\n pointerId: event.pointerId,\r\n resourceId: appointment.resourceId,\r\n startMin: appointment.startMin,\r\n endMin: appointment.endMin\r\n });\r\n };\r\n\r\n const onGlobalPointerMove = (event: React.PointerEvent<HTMLElement>) => {\r\n if (drag.kind === \"none\") {\r\n return;\r\n }\r\n\r\n if (drag.kind === \"move\") {\r\n const nextResourceId = pointerToResourceId(event.clientX, drag.resourceId);\r\n const pointerMin = pointerToMin(nextResourceId, event.clientY);\r\n const rawStart = pointerMin - drag.offsetMin;\r\n const nextStartMin = clamp(snap(rawStart), 0, dayMinutes - drag.durationMin);\r\n const nextEndMin = nextStartMin + drag.durationMin;\r\n if (nextStartMin !== drag.startMin || nextEndMin !== drag.endMin || nextResourceId !== drag.resourceId) {\r\n suppressClickRef.current = true;\r\n setDrag({\r\n ...drag,\r\n resourceId: nextResourceId,\r\n startMin: nextStartMin,\r\n endMin: nextEndMin\r\n });\r\n }\r\n return;\r\n }\r\n\r\n const pointerMin = pointerToMin(drag.resourceId, event.clientY);\r\n const nextEndMin = clamp(snap(pointerMin), drag.startMin + MIN_EVENT_MIN, dayMinutes);\r\n if (nextEndMin !== drag.endMin) {\r\n suppressClickRef.current = true;\r\n setDrag({\r\n ...drag,\r\n endMin: nextEndMin\r\n });\r\n }\r\n };\r\n\r\n const onGlobalPointerUp = () => {\r\n if (drag.kind === \"none\") {\r\n return;\r\n }\r\n const current = drag;\r\n setDrag({ kind: \"none\" });\r\n if (suppressClickRef.current) {\r\n void persistDrag(current);\r\n }\r\n };\r\n\r\n const defaultRenderAppointment = ({\r\n appointment,\r\n onPointerDown,\r\n onResizePointerDown,\r\n appointmentAppearance,\r\n appointmentBackgroundColor\r\n }: {\r\n appointment: SchedulerEvent<TAppointment, TResourceId> & { lane: number; lanes: number };\r\n onPointerDown: (e: React.PointerEvent) => void;\r\n onResizePointerDown: (e: React.PointerEvent) => void;\r\n appointmentAppearance?: SchedulerAppointmentAppearance;\r\n appointmentBackgroundColor?: string;\r\n drag: SchedulerDragState<TResourceId>;\r\n suppressClickRef: React.RefObject<boolean>;\r\n }) => {\r\n const rawMaybe = appointment.raw as { description?: unknown };\r\n const description = typeof rawMaybe.description === \"string\" ? rawMaybe.description : undefined;\r\n const legacyClassName = typeof appointmentBackgroundColor === \"string\" ? appointmentBackgroundColor : undefined;\r\n const backgroundClassName = appointmentAppearance?.className ?? legacyClassName ?? \"bg-muted/40 dark:bg-muted/30\";\r\n const className = `relative h-full cursor-grab overflow-hidden rounded-md border border-border p-2 pb-5 text-foreground ${backgroundClassName}`;\r\n\r\n return (\r\n <div onPointerDown={onPointerDown} className={className}>\r\n <div className=\"text-xs font-semibold\">{appointment.title}</div>\r\n {description ? <div className=\"mt-1 text-[10px] font-medium text-muted-foreground\">{description}</div> : null}\r\n <div\r\n role=\"button\"\r\n aria-label=\"Resize appointment\"\r\n onPointerDown={(event) => {\r\n event.stopPropagation();\r\n onResizePointerDown(event);\r\n }}\r\n className=\"absolute inset-x-1 bottom-1 h-2 cursor-ns-resize rounded-full bg-border/90 transition-colors hover:bg-border\"\r\n />\r\n </div>\r\n );\r\n };\r\n\r\n const defaultRenderDatePicker = ({\r\n selectedDate: value,\r\n onSelectedDateChange: onDateChange\r\n }: {\r\n selectedDate: Date;\r\n onSelectedDateChange: (date: Date) => void;\r\n }) => (\r\n <input\r\n type=\"date\"\r\n value={toInputDateValue(value)}\r\n onChange={(event) => {\r\n const nextDate = fromInputDateValue(event.target.value);\r\n if (nextDate) {\r\n onDateChange(nextDate);\r\n }\r\n }}\r\n className=\"h-7 rounded-md border border-border bg-card px-2 text-xs text-foreground\"\r\n aria-label=\"Select date\"\r\n />\r\n );\r\n\r\n const defaultRenderResourceHeader = (resource: TResource) => <strong>{resource.label}</strong>;\r\n\r\n return (\r\n <section\r\n className={`rfs-root rounded-lg bg-background text-foreground ${drag.kind === \"move\" ? \"rfs-root--drag-move\" : \"\"} ${drag.kind === \"resize\" ? \"rfs-root--drag-resize\" : \"\"}`}\r\n onPointerMove={onGlobalPointerMove}\r\n onPointerUp={onGlobalPointerUp}\r\n onPointerCancel={onGlobalPointerUp}\r\n >\r\n <div className=\"rfs-toolbar\">\r\n <button\r\n className=\"rfs-btn border-border bg-card text-foreground hover:bg-muted\"\r\n type=\"button\"\r\n onClick={() => onSelectedDateChange(shiftDays(selectedDate, -1))}\r\n >\r\n {prevButtonLabel}\r\n </button>\r\n {(renderDatePicker ?? defaultRenderDatePicker)({ selectedDate, onSelectedDateChange })}\r\n <button\r\n className=\"rfs-btn border-border bg-card text-foreground hover:bg-muted\"\r\n type=\"button\"\r\n onClick={() => onSelectedDateChange(shiftDays(selectedDate, 1))}\r\n >\r\n {nextButtonLabel}\r\n </button>\r\n </div>\r\n\r\n <div className=\"rfs-shell border-border bg-card\">\r\n <div style={{ minWidth: gridMinWidth }}>\r\n <div className=\"rfs-header border-border bg-card\">\r\n <div className=\"rfs-gutter border-border\" style={{ width: GUTTER_W }} />\r\n {resources.map((resource) => (\r\n <div\r\n key={String(resource.id)}\r\n className=\"rfs-resource-header border-border bg-card text-foreground\"\r\n style={{ minWidth: RESOURCE_MIN_W, flex: 1 }}\r\n >\r\n {(renderResourceHeader ?? defaultRenderResourceHeader)(resource)}\r\n {isNameLike(resource) ? <div className=\"rfs-resource-subtitle text-muted-foreground\">{fullName(resource)}</div> : null}\r\n </div>\r\n ))}\r\n </div>\r\n <div className=\"rfs-body\">\r\n <div className=\"rfs-times border-border bg-card\" style={{ width: GUTTER_W, height: gridHeight }}>\r\n {Array.from({ length: Math.floor(dayMinutes / 60) + 1 }).map((_, i) => (\r\n <div\r\n key={`tick-${i}`}\r\n className=\"rfs-time-tick text-muted-foreground\"\r\n style={{ top: TOP_PAD + i * 60 * PX_PER_MIN }}\r\n >\r\n {String(Math.floor((dayStartAbs + i * 60) / 60)).padStart(2, \"0\")}:\r\n {String((dayStartAbs + i * 60) % 60).padStart(2, \"0\")}\r\n </div>\r\n ))}\r\n </div>\r\n <div className=\"rfs-grid\">\r\n {resources.map((resource) => (\r\n <div\r\n key={String(resource.id)}\r\n className=\"rfs-col border-border bg-card\"\r\n style={{ minWidth: RESOURCE_MIN_W, flex: 1 }}\r\n >\r\n <div\r\n ref={(el) => {\r\n colRefs.current[String(resource.id)] = el;\r\n }}\r\n className=\"rfs-col-inner bg-card\"\r\n style={{ height: gridHeight }}\r\n >\r\n {Array.from({ length: Math.floor(dayMinutes / 60) + 1 }).map((_, i) => (\r\n <div\r\n key={`major-${String(resource.id)}-${i}`}\r\n className=\"rfs-hour-line border-border/70\"\r\n style={{ top: TOP_PAD + i * 60 * PX_PER_MIN }}\r\n />\r\n ))}\r\n {Array.from({ length: Math.floor(dayMinutes / STEP_MIN) + 1 }).map((_, i) => (\r\n <div\r\n key={`minor-${String(resource.id)}-${i}`}\r\n className=\"rfs-slot-line border-border/50\"\r\n style={{ top: TOP_PAD + i * STEP_MIN * PX_PER_MIN }}\r\n />\r\n ))}\r\n {(laidOutByResource.get(resource.id) ?? []).map((appointment) => {\r\n const laneWidthPct = 100 / appointment.lanes;\r\n const top = TOP_PAD + appointment.startMin * PX_PER_MIN;\r\n const height = Math.max(MIN_EVENT_MIN * PX_PER_MIN, (appointment.endMin - appointment.startMin) * PX_PER_MIN);\r\n const appointmentAppearance = appointmentAppearanceByResource.get(resource.id);\r\n const appointmentBackgroundColor = appointmentBgByResource.get(resource.id);\r\n return (\r\n <div\r\n key={String(appointment.id)}\r\n className=\"rfs-card-slot\"\r\n style={{\r\n top,\r\n left: `${laneWidthPct * appointment.lane}%`,\r\n width: `${laneWidthPct}%`,\r\n height\r\n }}\r\n >\r\n {(renderAppointment ?? defaultRenderAppointment)({\r\n appointment,\r\n onPointerDown: (event) => onApptPointerDown(event, appointment),\r\n onResizePointerDown: (event) => onResizePointerDown(event, appointment),\r\n appointmentAppearance,\r\n appointmentBackgroundColor,\r\n drag,\r\n suppressClickRef\r\n })}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n );\r\n}\r\n","import type { SchedulerAppointmentChangeArgs, SchedulerId } from \"./types\";\r\n\r\nexport type ApplySchedulerAppointmentChangeOptions<TAppointment, TResourceId extends SchedulerId> = {\r\n getId: (appointment: TAppointment) => SchedulerId;\r\n setResourceId: (appointment: TAppointment, resourceId: TResourceId) => TAppointment;\r\n setStart: (appointment: TAppointment, start: Date) => TAppointment;\r\n setEnd: (appointment: TAppointment, end: Date) => TAppointment;\r\n};\r\n\r\nexport function applySchedulerAppointmentChange<TAppointment, TResourceId extends SchedulerId>(\r\n appointments: TAppointment[],\r\n change: SchedulerAppointmentChangeArgs<TAppointment, TResourceId>,\r\n options: ApplySchedulerAppointmentChangeOptions<TAppointment, TResourceId>\r\n): TAppointment[] {\r\n return appointments.map((item) => {\r\n if (options.getId(item) !== options.getId(change.appointment)) {\r\n return item;\r\n }\r\n const withResource = options.setResourceId(item, change.next.resourceId);\r\n const withStart = options.setStart(withResource, change.next.start);\r\n return options.setEnd(withStart, change.next.end);\r\n });\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/components/defaultRenderAppointment/index.tsx","../src/components/constants.ts","../src/utils/scheduler-core.utils.ts","../src/components/defaultRenderDatePicker/index.tsx","../src/components/defaultRenderResourceHeader/index.tsx","../src/utils/scheduler-data.utils.ts","../src/hooks/useSchedulerBaseData.ts","../src/hooks/useSchedulerInteractions.ts","../src/hooks/useSchedulerPresentationData.ts","../src/components/scheduler/index.tsx","../src/utils/scheduler-appointment-change.utils.ts"],"names":["jsx","React","pointerMin","nextEndMin","React3","jsxs"],"mappings":"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","file":"index.js","sourcesContent":["import * as React from \"react\";\nimport type { DefaultRenderAppointmentProps } from \"./types\";\nimport type { SchedulerId } from \"../../types/scheduler\";\n\nexport function defaultRenderAppointment<TAppointment, TResourceId extends SchedulerId>({\n appointment,\n onPointerDown,\n onResizePointerDown,\n appointmentAppearance,\n appointmentBackgroundColor\n}: DefaultRenderAppointmentProps<TAppointment, TResourceId>) {\n const rawMaybe = appointment.raw as { description?: unknown };\n const description = typeof rawMaybe.description === \"string\" ? rawMaybe.description : undefined;\n const legacyClassName = typeof appointmentBackgroundColor === \"string\" ? appointmentBackgroundColor : undefined;\n const backgroundClassName = appointmentAppearance?.className ?? legacyClassName ?? \"bg-muted/40 dark:bg-muted/30\";\n const className = `relative h-full cursor-grab overflow-hidden rounded-md border border-border p-2 pb-5 text-foreground ${backgroundClassName}`;\n\n return (\n <div onPointerDown={onPointerDown} className={className}>\n <div className=\"text-xs font-semibold\">{appointment.title}</div>\n {description ? <div className=\"mt-1 text-[10px] font-medium text-muted-foreground\">{description}</div> : null}\n <div\n role=\"button\"\n aria-label=\"Resize appointment\"\n onPointerDown={(event) => {\n event.stopPropagation();\n onResizePointerDown(event);\n }}\n className=\"absolute inset-x-1 bottom-1 h-2 cursor-ns-resize rounded-full bg-border/90 transition-colors hover:bg-border\"\n />\n </div>\n );\n}\n","const OPEN_TIME = '09:00';\nconst CLOSE_TIME = '18:00';\n\nconst STEP_MIN = 15;\nconst MIN_EVENT_MIN = 15;\nconst DEFAULT_CREATE_MIN = 30;\n\nconst PX_PER_MIN = 2; // visual scale\nconst HEADER_H = 56;\nconst GUTTER_W = 72;\nconst TOP_PAD = 12;\nconst BOTTOM_PAD = 24;\n\nconst RESOURCE_MIN_W = 420; // columns expand to fill available width; min width enables x-scroll when needed\nconst RESOURCE_MIN_W_TW = 'min-w-[400px] lg:w-full'; // columns expand to fill available width; min width enables x-scroll when needed\nconst LANE_GAP = 6;\n\nexport {\n OPEN_TIME,\n CLOSE_TIME,\n STEP_MIN,\n MIN_EVENT_MIN,\n DEFAULT_CREATE_MIN,\n PX_PER_MIN,\n HEADER_H,\n GUTTER_W,\n TOP_PAD,\n BOTTOM_PAD,\n RESOURCE_MIN_W,\n LANE_GAP,\n RESOURCE_MIN_W_TW,\n}","import { format } from \"date-fns\";\nimport type { SchedulerAppointmentColorToken } from \"../types/scheduler\";\nimport { STEP_MIN } from \"../components/constants\";\nimport type { LaidOut, NameLike, TimeBlockLike } from \"../hooks/types\";\n\nexport function isNameLike(resource: unknown): resource is NameLike {\n if (!resource || typeof resource !== \"object\") {\n return false;\n }\n const maybe = resource as { firstName?: unknown; lastName?: unknown };\n return typeof maybe.firstName === \"string\" || typeof maybe.lastName === \"string\";\n}\n\nexport function toInputDateValue(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\nexport function fromInputDateValue(value: string): Date | null {\n const [yearRaw, monthRaw, dayRaw] = value.split(\"-\");\n const year = Number(yearRaw);\n const month = Number(monthRaw);\n const day = Number(dayRaw);\n if (!Number.isInteger(year) || !Number.isInteger(month) || !Number.isInteger(day)) {\n return null;\n }\n return new Date(year, month - 1, day);\n}\n\nexport const DEFAULT_APPOINTMENT_COLOR_TOKEN_CLASS_MAP: Record<SchedulerAppointmentColorToken, string> = {\n slate: \"bg-slate-100 dark:bg-slate-900/40\",\n gray: \"bg-gray-100 dark:bg-gray-900/40\",\n zinc: \"bg-zinc-100 dark:bg-zinc-900/40\",\n neutral: \"bg-neutral-100 dark:bg-neutral-900/40\",\n stone: \"bg-stone-100 dark:bg-stone-900/40\",\n red: \"bg-red-100 dark:bg-red-950/40\",\n orange: \"bg-orange-100 dark:bg-orange-950/40\",\n amber: \"bg-amber-100 dark:bg-amber-950/40\",\n yellow: \"bg-yellow-100 dark:bg-yellow-950/40\",\n lime: \"bg-lime-100 dark:bg-lime-950/40\",\n green: \"bg-green-100 dark:bg-green-950/40\",\n emerald: \"bg-emerald-100 dark:bg-emerald-950/40\",\n teal: \"bg-teal-100 dark:bg-teal-950/40\",\n cyan: \"bg-cyan-100 dark:bg-cyan-950/40\",\n sky: \"bg-sky-100 dark:bg-sky-950/40\",\n blue: \"bg-blue-100 dark:bg-blue-950/40\",\n indigo: \"bg-indigo-100 dark:bg-indigo-950/40\",\n violet: \"bg-violet-100 dark:bg-violet-950/40\",\n purple: \"bg-purple-100 dark:bg-purple-950/40\",\n fuchsia: \"bg-fuchsia-100 dark:bg-fuchsia-950/40\",\n pink: \"bg-pink-100 dark:bg-pink-950/40\",\n rose: \"bg-rose-100 dark:bg-rose-950/40\"\n};\n\nexport function clamp(n: number, min: number, max: number) {\n return Math.max(min, Math.min(max, n));\n}\n\nexport function snap(mins: number, stepMin = STEP_MIN) {\n return Math.round(mins / stepMin) * stepMin;\n}\n\nexport function parseHHMM(hhmm: string) {\n const [h, m] = hhmm.split(\":\").map(Number);\n return h * 60 + m;\n}\n\nexport function fullName<T extends NameLike>(resource: T) {\n return `${resource.firstName ?? \"\"} ${resource.lastName ?? \"\"}`.trim();\n}\n\nexport function dayISO(date: Date) {\n return format(date, \"yyyy-MM-dd\");\n}\n\nexport function shiftDays(date: Date, delta: number) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + delta);\n}\n\nexport function dateAtMinute(selectedDate: Date, dayStartAbs: number, minuteFromStart: number) {\n const base = new Date(\n selectedDate.getFullYear(),\n selectedDate.getMonth(),\n selectedDate.getDate(),\n 0,\n 0,\n 0,\n 0\n );\n const abs = dayStartAbs + minuteFromStart;\n const hh = Math.floor(abs / 60);\n const mm = abs % 60;\n base.setHours(hh, mm, 0, 0);\n return base;\n}\n\nexport function minutesFromDayStart(dayStartAbs: number, date: Date) {\n return date.getHours() * 60 + date.getMinutes() - dayStartAbs;\n}\n\nexport function overlaps(a: TimeBlockLike, b: TimeBlockLike) {\n return a.startMin < b.endMin && b.startMin < a.endMin;\n}\n\nexport function layoutOverlaps<T extends TimeBlockLike>(blocks: T[]): LaidOut<T>[] {\n const sorted = [...blocks].sort((a, b) => a.startMin - b.startMin || a.endMin - b.endMin);\n const groups: T[][] = [];\n let active: T[] = [];\n let current: T[] = [];\n\n for (const block of sorted) {\n active = active.filter((item) => item.endMin > block.startMin);\n const conflicts = active.some((item) => overlaps(item, block));\n\n if (!conflicts && current.length > 0) {\n groups.push(current);\n current = [];\n }\n current.push(block);\n active.push(block);\n }\n\n if (current.length) {\n groups.push(current);\n }\n\n const output: LaidOut<T>[] = [];\n\n for (const group of groups) {\n const sortedGroup = [...group].sort((a, b) => a.startMin - b.startMin || a.endMin - b.endMin);\n const laneEnd: number[] = [];\n const laneOf = new Map<T[\"id\"], number>();\n\n for (const block of sortedGroup) {\n let placed = false;\n for (let i = 0; i < laneEnd.length; i++) {\n if (laneEnd[i] <= block.startMin) {\n laneEnd[i] = block.endMin;\n laneOf.set(block.id, i);\n placed = true;\n break;\n }\n }\n if (!placed) {\n laneEnd.push(block.endMin);\n laneOf.set(block.id, laneEnd.length - 1);\n }\n }\n\n const lanes = laneEnd.length;\n for (const block of sortedGroup) {\n output.push({ ...block, lane: laneOf.get(block.id) ?? 0, lanes });\n }\n }\n\n return output;\n}\n","import * as React from \"react\";\nimport type { DefaultRenderDatePickerProps } from \"./types\";\nimport { fromInputDateValue, toInputDateValue } from \"../../utils/scheduler-core.utils\";\n\nexport function defaultRenderDatePicker({ selectedDate, onSelectedDateChange }: DefaultRenderDatePickerProps) {\n return (\n <input\n type=\"date\"\n value={toInputDateValue(selectedDate)}\n onChange={(event) => {\n const nextDate = fromInputDateValue(event.target.value);\n if (nextDate) {\n onSelectedDateChange(nextDate);\n }\n }}\n className=\"h-7 rounded-md border border-border bg-card px-2 text-xs text-foreground\"\n aria-label=\"Select date\"\n />\n );\n}\n","import * as React from \"react\";\nimport type { BaseSchedulerResource, SchedulerId } from \"../../types/scheduler\";\nimport type { DefaultRenderResourceHeaderProps } from \"./types\";\n\nexport function defaultRenderResourceHeader<\n TResource extends BaseSchedulerResource<TResourceId>,\n TResourceId extends SchedulerId\n>({ resource }: DefaultRenderResourceHeaderProps<TResource, TResourceId>) {\n return <strong>{resource.label}</strong>;\n}\n","import type {\n BaseSchedulerResource,\n SchedulerAppointmentAppearance,\n SchedulerDragState,\n SchedulerEvent,\n SchedulerId\n} from \"../types/scheduler\";\nimport type {\n BuildResourceMapOptions,\n NormalizeAppointmentsArgs,\n SchedulerLayoutAppointment\n} from \"../hooks/types\";\nimport {\n clamp,\n dateAtMinute,\n dayISO,\n layoutOverlaps,\n minutesFromDayStart\n} from \"./scheduler-core.utils\";\n\nexport function buildResourceMap<TResource, TResourceId extends SchedulerId, TValue>({\n fallback,\n getValue,\n resources,\n toKey\n}: BuildResourceMapOptions<TResource, TResourceId, TValue>) {\n const map = new Map<TResourceId, TValue | undefined>();\n for (const resource of resources) {\n map.set(toKey(resource), getValue(resource) ?? fallback);\n }\n return map;\n}\n\nexport function normalizeAppointments<TAppointment, TResourceId extends SchedulerId>({\n adapter,\n appointments,\n dayMinutes,\n dayStartAbs,\n selectedISO\n}: NormalizeAppointmentsArgs<TAppointment, TResourceId>) {\n return appointments\n .map((appointment) => {\n const start = new Date(adapter.getStart(appointment));\n const end = new Date(adapter.getEnd(appointment));\n return {\n raw: appointment,\n id: adapter.getId(appointment),\n resourceId: adapter.getResourceId(appointment),\n start,\n end,\n startMin: clamp(minutesFromDayStart(dayStartAbs, start), 0, dayMinutes),\n endMin: clamp(minutesFromDayStart(dayStartAbs, end), 0, dayMinutes),\n title: adapter.getTitle(appointment)\n };\n })\n .filter((appointment) => dayISO(appointment.start) === selectedISO);\n}\n\nexport function buildAppointmentMap<TAppointment, TResourceId extends SchedulerId>(appointments: SchedulerEvent<TAppointment, TResourceId>[]) {\n return new Map(appointments.map((appointment) => [appointment.id, appointment]));\n}\n\nexport function applyDragToAppointments<TAppointment, TResourceId extends SchedulerId>(\n appointments: SchedulerEvent<TAppointment, TResourceId>[],\n drag: SchedulerDragState<TResourceId>,\n selectedDate: Date,\n dayStartAbs: number\n) {\n if (drag.kind === \"none\") {\n return appointments;\n }\n\n return appointments.map((appointment) => {\n if (appointment.id !== drag.appointmentId) {\n return appointment;\n }\n\n return {\n ...appointment,\n resourceId: drag.resourceId,\n startMin: drag.startMin,\n endMin: drag.endMin,\n start: dateAtMinute(selectedDate, dayStartAbs, drag.startMin),\n end: dateAtMinute(selectedDate, dayStartAbs, drag.endMin)\n };\n });\n}\n\nexport function buildLaidOutByResource<\n TAppointment,\n TResource extends BaseSchedulerResource<TResourceId>,\n TResourceId extends SchedulerId\n>(resources: TResource[], appointments: SchedulerEvent<TAppointment, TResourceId>[]) {\n const appointmentsByResource = new Map<TResourceId, SchedulerEvent<TAppointment, TResourceId>[]>();\n\n for (const appointment of appointments) {\n const current = appointmentsByResource.get(appointment.resourceId) ?? [];\n current.push(appointment);\n appointmentsByResource.set(appointment.resourceId, current);\n }\n\n const result = new Map<TResourceId, SchedulerLayoutAppointment<TAppointment, TResourceId>[]>();\n for (const resource of resources) {\n result.set(resource.id, layoutOverlaps(appointmentsByResource.get(resource.id) ?? []));\n }\n return result;\n}\n\nexport function buildAppointmentAppearanceByResource<\n TResource extends BaseSchedulerResource<TResourceId>,\n TResourceId extends SchedulerId\n>(\n resources: TResource[],\n resourceAppointmentClassMap: Partial<Record<string, string>> | undefined,\n getResourceAppointmentAppearance: ((resource: TResource) => SchedulerAppointmentAppearance | undefined) | undefined,\n appointmentColorTokenClassByResource: Map<TResourceId, string | undefined>,\n appointmentBgByResource: Map<TResourceId, string | undefined>\n) {\n const map = new Map<TResourceId, SchedulerAppointmentAppearance | undefined>();\n\n for (const resource of resources) {\n const classFromIdMap = resourceAppointmentClassMap?.[String(resource.id)];\n if (classFromIdMap) {\n map.set(resource.id, { className: classFromIdMap });\n continue;\n }\n\n const appearance = getResourceAppointmentAppearance?.(resource);\n if (appearance) {\n map.set(resource.id, appearance);\n continue;\n }\n\n const tokenClass = appointmentColorTokenClassByResource.get(resource.id);\n if (tokenClass) {\n map.set(resource.id, { className: tokenClass });\n continue;\n }\n\n const legacyBackground = appointmentBgByResource.get(resource.id);\n map.set(resource.id, legacyBackground ? { className: legacyBackground } : undefined);\n }\n\n return map;\n}\n","import * as React from \"react\";\nimport { BOTTOM_PAD, GUTTER_W, PX_PER_MIN, RESOURCE_MIN_W, TOP_PAD } from \"../components/constants\";\nimport type { BaseSchedulerResource, SchedulerId } from \"../types/scheduler\";\nimport type { SchedulerBaseData, UseSchedulerBaseDataArgs } from \"./types\";\nimport { buildAppointmentMap, normalizeAppointments } from \"../utils/scheduler-data.utils\";\nimport { dayISO, parseHHMM } from \"../utils/scheduler-core.utils\";\n\nexport function useSchedulerBaseData<\n TAppointment,\n TResource extends BaseSchedulerResource<TResourceId>,\n TResourceId extends SchedulerId\n>({\n adapter,\n appointments,\n dayEnd = \"18:00\",\n dayStart = \"09:00\",\n resources,\n selectedDate\n}: UseSchedulerBaseDataArgs<TAppointment, TResource, TResourceId>): SchedulerBaseData<TAppointment, TResourceId> {\n const dayStartAbs = React.useMemo(() => parseHHMM(dayStart), [dayStart]);\n const dayEndAbs = React.useMemo(() => parseHHMM(dayEnd), [dayEnd]);\n const dayMinutes = React.useMemo(() => Math.max(0, dayEndAbs - dayStartAbs), [dayEndAbs, dayStartAbs]);\n const gridHeight = React.useMemo(() => TOP_PAD + dayMinutes * PX_PER_MIN + BOTTOM_PAD, [dayMinutes]);\n const gridMinWidth = React.useMemo(() => GUTTER_W + Math.max(resources.length, 1) * RESOURCE_MIN_W, [resources.length]);\n const selectedISO = React.useMemo(() => dayISO(selectedDate), [selectedDate]);\n\n const renderAppts = React.useMemo(() => {\n return normalizeAppointments({\n adapter,\n appointments,\n dayMinutes,\n dayStartAbs,\n selectedISO\n });\n }, [adapter, appointments, dayMinutes, dayStartAbs, selectedISO]);\n\n const appointmentMap = React.useMemo(() => buildAppointmentMap(renderAppts), [renderAppts]);\n\n return {\n appointmentMap,\n dayEndAbs,\n dayMinutes,\n dayStartAbs,\n gridHeight,\n gridMinWidth,\n renderAppts\n };\n}\n","import * as React from \"react\";\nimport { MIN_EVENT_MIN, PX_PER_MIN, TOP_PAD } from \"../components/constants\";\nimport type { BaseSchedulerResource, SchedulerDragState, SchedulerEvent, SchedulerId } from \"../types/scheduler\";\nimport type { SchedulerInteractions, UseSchedulerInteractionsArgs } from \"./types\";\nimport { clamp, dateAtMinute, overlaps, snap } from \"../utils/scheduler-core.utils\";\n\nexport function useSchedulerInteractions<\n TAppointment,\n TResource extends BaseSchedulerResource<TResourceId>,\n TResourceId extends SchedulerId\n>({\n appointmentMap,\n dayMinutes,\n dayStartAbs,\n onAppointmentChange,\n onPersistMoveResize,\n renderAppts,\n resources,\n selectedDate\n}: UseSchedulerInteractionsArgs<TAppointment, TResource, TResourceId>): SchedulerInteractions<TAppointment, TResourceId> {\n const [drag, setDrag] = React.useState<SchedulerDragState<TResourceId>>({ kind: \"none\" });\n const colRefs = React.useRef<Record<string, HTMLDivElement | null>>({});\n const suppressClickRef = React.useRef(false);\n\n const pointerToMin = React.useCallback(\n (resourceId: TResourceId, clientY: number) => {\n const col = colRefs.current[String(resourceId)];\n if (!col) {\n return 0;\n }\n\n const y = clientY - col.getBoundingClientRect().top - TOP_PAD;\n return clamp(snap(y / PX_PER_MIN), 0, dayMinutes);\n },\n [dayMinutes]\n );\n\n const pointerToResourceId = React.useCallback(\n (clientX: number, fallbackResourceId: TResourceId) => {\n for (const resource of resources) {\n const col = colRefs.current[String(resource.id)];\n if (!col) {\n continue;\n }\n\n const rect = col.getBoundingClientRect();\n if (clientX >= rect.left && clientX <= rect.right) {\n return resource.id;\n }\n }\n\n return fallbackResourceId;\n },\n [resources]\n );\n\n const hasOverlap = React.useCallback(\n (appointmentId: SchedulerId, resourceId: TResourceId, startMin: number, endMin: number) => {\n const events = renderAppts.filter((appointment) => appointment.resourceId === resourceId && appointment.id !== appointmentId);\n return events.some((appointment) => overlaps(appointment, { id: appointmentId, startMin, endMin }));\n },\n [renderAppts]\n );\n\n const persistDrag = React.useCallback(\n async (state: Exclude<SchedulerDragState<TResourceId>, { kind: \"none\" }>) => {\n const target = appointmentMap.get(state.appointmentId);\n if (!target) {\n return;\n }\n\n if (hasOverlap(state.appointmentId, state.resourceId, state.startMin, state.endMin)) {\n return;\n }\n\n const next = {\n resourceId: state.resourceId,\n start: dateAtMinute(selectedDate, dayStartAbs, state.startMin),\n end: dateAtMinute(selectedDate, dayStartAbs, state.endMin)\n };\n\n if (onAppointmentChange) {\n await onAppointmentChange({\n kind: state.kind,\n appointment: target.raw,\n previous: {\n resourceId: target.resourceId,\n start: target.start,\n end: target.end\n },\n next\n });\n return;\n }\n\n if (onPersistMoveResize) {\n await onPersistMoveResize({\n appointment: target.raw,\n resourceId: next.resourceId,\n start: next.start,\n end: next.end\n });\n }\n },\n [appointmentMap, dayStartAbs, hasOverlap, onAppointmentChange, onPersistMoveResize, selectedDate]\n );\n\n const onApptPointerDown = React.useCallback(\n (event: React.PointerEvent, appointment: SchedulerEvent<TAppointment, TResourceId>) => {\n if (event.button !== 0) {\n return;\n }\n\n event.stopPropagation();\n suppressClickRef.current = false;\n const pointerMin = pointerToMin(appointment.resourceId, event.clientY);\n setDrag({\n kind: \"move\",\n appointmentId: appointment.id,\n pointerId: event.pointerId,\n resourceId: appointment.resourceId,\n durationMin: Math.max(MIN_EVENT_MIN, appointment.endMin - appointment.startMin),\n offsetMin: pointerMin - appointment.startMin,\n startMin: appointment.startMin,\n endMin: appointment.endMin\n });\n },\n [pointerToMin]\n );\n\n const onResizePointerDown = React.useCallback((event: React.PointerEvent, appointment: SchedulerEvent<TAppointment, TResourceId>) => {\n if (event.button !== 0) {\n return;\n }\n\n event.stopPropagation();\n suppressClickRef.current = false;\n setDrag({\n kind: \"resize\",\n appointmentId: appointment.id,\n pointerId: event.pointerId,\n resourceId: appointment.resourceId,\n startMin: appointment.startMin,\n endMin: appointment.endMin\n });\n }, []);\n\n const onGlobalPointerMove = React.useCallback(\n (event: React.PointerEvent<HTMLElement>) => {\n if (drag.kind === \"none\") {\n return;\n }\n\n if (drag.kind === \"move\") {\n const nextResourceId = pointerToResourceId(event.clientX, drag.resourceId);\n const pointerMin = pointerToMin(nextResourceId, event.clientY);\n const rawStart = pointerMin - drag.offsetMin;\n const nextStartMin = clamp(snap(rawStart), 0, dayMinutes - drag.durationMin);\n const nextEndMin = nextStartMin + drag.durationMin;\n\n if (nextStartMin !== drag.startMin || nextEndMin !== drag.endMin || nextResourceId !== drag.resourceId) {\n suppressClickRef.current = true;\n setDrag({\n ...drag,\n resourceId: nextResourceId,\n startMin: nextStartMin,\n endMin: nextEndMin\n });\n }\n return;\n }\n\n const pointerMin = pointerToMin(drag.resourceId, event.clientY);\n const nextEndMin = clamp(snap(pointerMin), drag.startMin + MIN_EVENT_MIN, dayMinutes);\n if (nextEndMin !== drag.endMin) {\n suppressClickRef.current = true;\n setDrag({\n ...drag,\n endMin: nextEndMin\n });\n }\n },\n [dayMinutes, drag, pointerToMin, pointerToResourceId]\n );\n\n const onGlobalPointerUp = React.useCallback(() => {\n if (drag.kind === \"none\") {\n return;\n }\n\n const current = drag;\n setDrag({ kind: \"none\" });\n if (suppressClickRef.current) {\n void persistDrag(current);\n }\n }, [drag, persistDrag]);\n\n return {\n colRefs,\n drag,\n onApptPointerDown,\n onGlobalPointerMove,\n onGlobalPointerUp,\n onResizePointerDown,\n suppressClickRef\n };\n}\n","import * as React from \"react\";\nimport type { BaseSchedulerResource, SchedulerId } from \"../types/scheduler\";\nimport type { SchedulerPresentationData, UseSchedulerPresentationDataArgs } from \"./types\";\nimport {\n applyDragToAppointments,\n buildAppointmentAppearanceByResource,\n buildLaidOutByResource,\n buildResourceMap\n} from \"../utils/scheduler-data.utils\";\nimport { DEFAULT_APPOINTMENT_COLOR_TOKEN_CLASS_MAP } from \"../utils/scheduler-core.utils\";\n\nexport function useSchedulerPresentationData<\n TAppointment,\n TResource extends BaseSchedulerResource<TResourceId>,\n TResourceId extends SchedulerId\n>({\n appointmentColorTokenClassMap,\n dayStartAbs,\n drag,\n getResourceAppointmentAppearance,\n getResourceAppointmentBackground,\n getResourceAppointmentColorToken,\n renderAppts,\n resourceAppointmentClassMap,\n resources,\n selectedDate\n}: UseSchedulerPresentationDataArgs<TAppointment, TResource, TResourceId>): SchedulerPresentationData<TAppointment, TResourceId> {\n const effectiveAppts = React.useMemo(() => {\n return applyDragToAppointments(renderAppts, drag, selectedDate, dayStartAbs);\n }, [dayStartAbs, drag, renderAppts, selectedDate]);\n\n const laidOutByResource = React.useMemo(() => {\n return buildLaidOutByResource(resources, effectiveAppts);\n }, [effectiveAppts, resources]);\n\n const appointmentBgByResource = React.useMemo(() => {\n if (!getResourceAppointmentBackground) {\n return new Map<TResourceId, string | undefined>();\n }\n\n return buildResourceMap({\n fallback: undefined,\n getValue: getResourceAppointmentBackground,\n resources,\n toKey: (resource) => resource.id\n });\n }, [getResourceAppointmentBackground, resources]);\n\n const appointmentColorTokenClassByResource = React.useMemo(() => {\n if (!getResourceAppointmentColorToken) {\n return new Map<TResourceId, string | undefined>();\n }\n\n const mergedClassMap = {\n ...DEFAULT_APPOINTMENT_COLOR_TOKEN_CLASS_MAP,\n ...(appointmentColorTokenClassMap ?? {})\n };\n\n return buildResourceMap({\n fallback: undefined,\n getValue: (resource: TResource) => {\n const token = getResourceAppointmentColorToken(resource);\n return token ? mergedClassMap[token] : undefined;\n },\n resources,\n toKey: (resource) => resource.id\n });\n }, [appointmentColorTokenClassMap, getResourceAppointmentColorToken, resources]);\n\n const appointmentAppearanceByResource = React.useMemo(() => {\n return buildAppointmentAppearanceByResource(\n resources,\n resourceAppointmentClassMap,\n getResourceAppointmentAppearance,\n appointmentColorTokenClassByResource,\n appointmentBgByResource\n );\n }, [\n appointmentBgByResource,\n appointmentColorTokenClassByResource,\n getResourceAppointmentAppearance,\n resourceAppointmentClassMap,\n resources\n ]);\n\n return {\n appointmentAppearanceByResource,\n appointmentBgByResource,\n effectiveAppts,\n laidOutByResource\n };\n}\n","import * as React from \"react\";\nimport { defaultRenderAppointment } from \"../defaultRenderAppointment\";\nimport { defaultRenderDatePicker } from \"../defaultRenderDatePicker\";\nimport { defaultRenderResourceHeader } from \"../defaultRenderResourceHeader\";\nimport { GUTTER_W, MIN_EVENT_MIN, PX_PER_MIN, RESOURCE_MIN_W, STEP_MIN, TOP_PAD } from \"../constants\";\nimport type { BaseSchedulerResource, SchedulerId, SchedulerProps } from \"../../types/scheduler\";\nimport { useSchedulerBaseData } from \"../../hooks/useSchedulerBaseData\";\nimport { useSchedulerInteractions } from \"../../hooks/useSchedulerInteractions\";\nimport { useSchedulerPresentationData } from \"../../hooks/useSchedulerPresentationData\";\nimport { fullName, isNameLike, shiftDays } from \"../../utils/scheduler-core.utils\";\n\nexport function Scheduler<TAppointment, TResource extends BaseSchedulerResource<TResourceId>, TResourceId extends SchedulerId>({\n resources,\n appointments,\n selectedDate,\n onSelectedDateChange,\n adapter,\n onPersistMoveResize,\n onAppointmentChange,\n renderResourceHeader,\n renderAppointment,\n resourceAppointmentClassMap,\n getResourceAppointmentAppearance,\n getResourceAppointmentColorToken,\n appointmentColorTokenClassMap,\n getResourceAppointmentBackground,\n renderDatePicker,\n prevButtonLabel = \"Prev\",\n nextButtonLabel = \"Next\",\n dayStart = \"09:00\",\n dayEnd = \"18:00\"\n}: SchedulerProps<TAppointment, TResource, TResourceId>) {\n const {\n appointmentMap,\n dayMinutes,\n dayStartAbs,\n gridHeight,\n gridMinWidth,\n renderAppts\n } = useSchedulerBaseData({\n adapter,\n appointments,\n dayEnd,\n dayStart,\n resources,\n selectedDate\n });\n\n const {\n colRefs,\n drag,\n onApptPointerDown,\n onGlobalPointerMove,\n onGlobalPointerUp,\n onResizePointerDown,\n suppressClickRef\n } =\n useSchedulerInteractions({\n appointmentMap,\n dayMinutes,\n dayStartAbs,\n onAppointmentChange,\n onPersistMoveResize,\n renderAppts,\n resources,\n selectedDate\n });\n\n const {\n appointmentAppearanceByResource,\n appointmentBgByResource,\n laidOutByResource\n } = useSchedulerPresentationData({\n appointmentColorTokenClassMap,\n dayStartAbs,\n drag,\n getResourceAppointmentAppearance,\n getResourceAppointmentBackground,\n getResourceAppointmentColorToken,\n renderAppts,\n resourceAppointmentClassMap,\n resources,\n selectedDate\n });\n\n const defaultResourceHeaderRenderer = (resource: TResource) => defaultRenderResourceHeader({ resource });\n\n return (\n <section\n className={`rfs-root rounded-lg bg-background text-foreground ${drag.kind === \"move\" ? \"rfs-root--drag-move\" : \"\"} ${drag.kind === \"resize\" ? \"rfs-root--drag-resize\" : \"\"}`}\n onPointerMove={onGlobalPointerMove}\n onPointerUp={onGlobalPointerUp}\n onPointerCancel={onGlobalPointerUp}\n >\n <div className=\"rfs-toolbar\">\n <button\n className=\"rfs-btn border-border bg-card text-foreground hover:bg-muted\"\n type=\"button\"\n onClick={() => onSelectedDateChange(shiftDays(selectedDate, -1))}\n >\n {prevButtonLabel}\n </button>\n {(renderDatePicker ?? defaultRenderDatePicker)({ selectedDate, onSelectedDateChange })}\n <button\n className=\"rfs-btn border-border bg-card text-foreground hover:bg-muted\"\n type=\"button\"\n onClick={() => onSelectedDateChange(shiftDays(selectedDate, 1))}\n >\n {nextButtonLabel}\n </button>\n </div>\n\n <div className=\"rfs-shell border-border bg-card\">\n <div style={{ minWidth: gridMinWidth }}>\n <div className=\"rfs-header border-border bg-card\">\n <div className=\"rfs-gutter border-border\" style={{ width: GUTTER_W }} />\n {resources.map((resource) => (\n <div\n key={String(resource.id)}\n className=\"rfs-resource-header border-border bg-card text-foreground\"\n style={{ minWidth: RESOURCE_MIN_W, flex: 1 }}\n >\n {(renderResourceHeader ?? defaultResourceHeaderRenderer)(resource)}\n {isNameLike(resource) ? <div className=\"rfs-resource-subtitle text-muted-foreground\">{fullName(resource)}</div> : null}\n </div>\n ))}\n </div>\n <div className=\"rfs-body\">\n <div className=\"rfs-times border-border bg-card\" style={{ width: GUTTER_W, height: gridHeight }}>\n {Array.from({ length: Math.floor(dayMinutes / 60) + 1 }).map((_, i) => (\n <div\n key={`tick-${i}`}\n className=\"rfs-time-tick text-muted-foreground\"\n style={{ top: TOP_PAD + i * 60 * PX_PER_MIN }}\n >\n {String(Math.floor((dayStartAbs + i * 60) / 60)).padStart(2, \"0\")}:\n {String((dayStartAbs + i * 60) % 60).padStart(2, \"0\")}\n </div>\n ))}\n </div>\n <div className=\"rfs-grid\">\n {resources.map((resource) => (\n <div\n key={String(resource.id)}\n className=\"rfs-col border-border bg-card\"\n style={{ minWidth: RESOURCE_MIN_W, flex: 1 }}\n >\n <div\n ref={(el) => {\n colRefs.current[String(resource.id)] = el;\n }}\n className=\"rfs-col-inner bg-card\"\n style={{ height: gridHeight }}\n >\n {Array.from({ length: Math.floor(dayMinutes / 60) + 1 }).map((_, i) => (\n <div\n key={`major-${String(resource.id)}-${i}`}\n className=\"rfs-hour-line border-border/70\"\n style={{ top: TOP_PAD + i * 60 * PX_PER_MIN }}\n />\n ))}\n {Array.from({ length: Math.floor(dayMinutes / STEP_MIN) + 1 }).map((_, i) => (\n <div\n key={`minor-${String(resource.id)}-${i}`}\n className=\"rfs-slot-line border-border/50\"\n style={{ top: TOP_PAD + i * STEP_MIN * PX_PER_MIN }}\n />\n ))}\n {(laidOutByResource.get(resource.id) ?? []).map((appointment) => {\n const laneWidthPct = 100 / appointment.lanes;\n const top = TOP_PAD + appointment.startMin * PX_PER_MIN;\n const height = Math.max(MIN_EVENT_MIN * PX_PER_MIN, (appointment.endMin - appointment.startMin) * PX_PER_MIN);\n const appointmentAppearance = appointmentAppearanceByResource.get(resource.id);\n const appointmentBackgroundColor = appointmentBgByResource.get(resource.id);\n return (\n <div\n key={String(appointment.id)}\n className=\"rfs-card-slot\"\n style={{\n top,\n left: `${laneWidthPct * appointment.lane}%`,\n width: `${laneWidthPct}%`,\n height\n }}\n >\n {(renderAppointment ?? defaultRenderAppointment)({\n appointment,\n onPointerDown: (event) => onApptPointerDown(event, appointment),\n onResizePointerDown: (event) => onResizePointerDown(event, appointment),\n appointmentAppearance,\n appointmentBackgroundColor,\n drag,\n suppressClickRef\n })}\n </div>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n </section>\n );\n}\n","import type { SchedulerAppointmentChangeArgs, SchedulerId } from \"../types\";\n\nexport type ApplySchedulerAppointmentChangeOptions<TAppointment, TResourceId extends SchedulerId> = {\n getId: (appointment: TAppointment) => SchedulerId;\n setResourceId: (appointment: TAppointment, resourceId: TResourceId) => TAppointment;\n setStart: (appointment: TAppointment, start: Date) => TAppointment;\n setEnd: (appointment: TAppointment, end: Date) => TAppointment;\n};\n\nexport function applySchedulerAppointmentChange<TAppointment, TResourceId extends SchedulerId>(\n appointments: TAppointment[],\n change: SchedulerAppointmentChangeArgs<TAppointment, TResourceId>,\n options: ApplySchedulerAppointmentChangeOptions<TAppointment, TResourceId>\n): TAppointment[] {\n return appointments.map((item) => {\n if (options.getId(item) !== options.getId(change.appointment)) {\n return item;\n }\n\n const withResource = options.setResourceId(item, change.next.resourceId);\n const withStart = options.setStart(withResource, change.next.start);\n return options.setEnd(withStart, change.next.end);\n });\n}\n"]}
package/dist/styles.css CHANGED
@@ -1,2 +1,2 @@
1
1
  /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid}}}@layer theme{:root,:host{--font-sans:var(--font-sans);--font-serif:var(--font-serif);--font-mono:var(--font-mono);--color-red-100:oklch(93.6% .032 17.717);--color-red-950:oklch(25.8% .092 26.042);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-950:oklch(26.6% .079 36.259);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-950:oklch(27.9% .077 45.635);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-950:oklch(28.6% .066 53.813);--color-lime-100:oklch(96.7% .067 122.328);--color-lime-950:oklch(27.4% .072 132.109);--color-green-100:oklch(96.2% .044 156.743);--color-green-950:oklch(26.6% .065 152.934);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-950:oklch(26.2% .051 172.552);--color-teal-100:oklch(95.3% .051 180.801);--color-teal-950:oklch(27.7% .046 192.524);--color-cyan-100:oklch(95.6% .045 203.388);--color-cyan-950:oklch(30.2% .056 229.695);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-950:oklch(29.3% .066 243.157);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-950:oklch(28.2% .091 267.935);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-950:oklch(25.7% .09 281.288);--color-violet-100:oklch(94.3% .029 294.588);--color-violet-950:oklch(28.3% .141 291.089);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-950:oklch(29.1% .149 302.717);--color-fuchsia-100:oklch(95.2% .037 318.852);--color-fuchsia-950:oklch(29.3% .136 325.661);--color-pink-100:oklch(94.8% .028 342.258);--color-pink-950:oklch(28.4% .109 3.907);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-950:oklch(27.1% .105 12.094);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-900:oklch(20.8% .042 265.755);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-900:oklch(21% .034 264.665);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-900:oklch(21% .006 285.885);--color-neutral-100:oklch(97% 0 0);--color-neutral-900:oklch(20.5% 0 0);--color-stone-100:oklch(97% .001 106.424);--color-stone-900:oklch(21.6% .006 56.043);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-medium:500;--font-weight-semibold:600;--tracking-normal:var(--tracking-normal);--leading-tight:1.25;--shadow-2xs:var(--shadow-2xs);--shadow-xs:var(--shadow-xs);--shadow-sm:var(--shadow-sm);--shadow-md:var(--shadow-md);--shadow-lg:var(--shadow-lg);--shadow-xl:var(--shadow-xl);--shadow-2xl:var(--shadow-2xl);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--shadow:var(--shadow)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-x-1{inset-inline:calc(var(--spacing) * 1)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.bottom-1{bottom:calc(var(--spacing) * 1)}.mx-auto{margin-inline:auto}.my-6{margin-block:calc(var(--spacing) * 6)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.contents{display:contents}.flex{display:flex}.h-2{height:calc(var(--spacing) * 2)}.h-7{height:calc(var(--spacing) * 7)}.h-full{height:100%}.w-auto{width:auto}.min-w-\[400px\]{min-width:400px}.cursor-grab{cursor:grab}.cursor-ns-resize{cursor:ns-resize}.resize{resize:both}.overflow-hidden{overflow:hidden}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-border,.border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/50{border-color:color-mix(in oklab, var(--border) 50%, transparent)}}.border-border\/70{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/70{border-color:color-mix(in oklab, var(--border) 70%, transparent)}}.border-slate-300{border-color:var(--color-slate-300)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-background{background-color:var(--background)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-border\/90{background-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.bg-border\/90{background-color:color-mix(in oklab, var(--border) 90%, transparent)}}.bg-card{background-color:var(--card)}.bg-cyan-100{background-color:var(--color-cyan-100)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-fuchsia-100{background-color:var(--color-fuchsia-100)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-green-100{background-color:var(--color-green-100)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-muted\/40{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/40{background-color:color-mix(in oklab, var(--muted) 40%, transparent)}}.bg-neutral-100{background-color:var(--color-neutral-100)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-red-100{background-color:var(--color-red-100)}.bg-rose-100{background-color:var(--color-rose-100)}.bg-sky-100{background-color:var(--color-sky-100)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-300\/90{background-color:#cad5e2e6}@supports (color:color-mix(in lab, red, red)){.bg-slate-300\/90{background-color:color-mix(in oklab, var(--color-slate-300) 90%, transparent)}}.bg-stone-100{background-color:var(--color-stone-100)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-violet-100{background-color:var(--color-violet-100)}.bg-white{background-color:var(--color-white)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-100{background-color:var(--color-zinc-100)}.p-0{padding:calc(var(--spacing) * 0)}.p-2{padding:calc(var(--spacing) * 2)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-1{padding-block:calc(var(--spacing) * 1)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:calc(var(--tracking-normal) - .025em);letter-spacing:calc(var(--tracking-normal) - .025em)}.tracking-wide{--tw-tracking:calc(var(--tracking-normal) + .025em);letter-spacing:calc(var(--tracking-normal) + .025em)}.text-foreground{color:var(--foreground)}.text-muted-foreground{color:var(--muted-foreground)}.text-slate-500{color:var(--color-slate-500)}.shadow-sm{--tw-shadow:var(--shadow-sm);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\:bg-border:hover{background-color:var(--border)}.hover\:bg-muted:hover{background-color:var(--muted)}.hover\:bg-slate-400:hover{background-color:var(--color-slate-400)}}.active\:cursor-grabbing:active{cursor:grabbing}@media (min-width:64rem){.lg\:w-full{width:100%}}.dark\:bg-amber-950\/40:is(.dark *){background-color:#46190166}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-amber-950) 40%, transparent)}}.dark\:bg-blue-950\/40:is(.dark *){background-color:#16245666}@supports (color:color-mix(in lab, red, red)){.dark\:bg-blue-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-blue-950) 40%, transparent)}}.dark\:bg-cyan-950\/40:is(.dark *){background-color:#05334566}@supports (color:color-mix(in lab, red, red)){.dark\:bg-cyan-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-cyan-950) 40%, transparent)}}.dark\:bg-emerald-950\/40:is(.dark *){background-color:#002c2266}@supports (color:color-mix(in lab, red, red)){.dark\:bg-emerald-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-emerald-950) 40%, transparent)}}.dark\:bg-fuchsia-950\/40:is(.dark *){background-color:#4b004f66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-fuchsia-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-fuchsia-950) 40%, transparent)}}.dark\:bg-gray-900\/40:is(.dark *){background-color:#10182866}@supports (color:color-mix(in lab, red, red)){.dark\:bg-gray-900\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-gray-900) 40%, transparent)}}.dark\:bg-green-950\/40:is(.dark *){background-color:#032e1566}@supports (color:color-mix(in lab, red, red)){.dark\:bg-green-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-green-950) 40%, transparent)}}.dark\:bg-indigo-950\/40:is(.dark *){background-color:#1e1a4d66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-indigo-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-indigo-950) 40%, transparent)}}.dark\:bg-lime-950\/40:is(.dark *){background-color:#192e0366}@supports (color:color-mix(in lab, red, red)){.dark\:bg-lime-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-lime-950) 40%, transparent)}}.dark\:bg-muted\/30:is(.dark *){background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-muted\/30:is(.dark *){background-color:color-mix(in oklab, var(--muted) 30%, transparent)}}.dark\:bg-neutral-900\/40:is(.dark *){background-color:#17171766}@supports (color:color-mix(in lab, red, red)){.dark\:bg-neutral-900\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-neutral-900) 40%, transparent)}}.dark\:bg-orange-950\/40:is(.dark *){background-color:#44130666}@supports (color:color-mix(in lab, red, red)){.dark\:bg-orange-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-orange-950) 40%, transparent)}}.dark\:bg-pink-950\/40:is(.dark *){background-color:#51042466}@supports (color:color-mix(in lab, red, red)){.dark\:bg-pink-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-pink-950) 40%, transparent)}}.dark\:bg-purple-950\/40:is(.dark *){background-color:#3c036666}@supports (color:color-mix(in lab, red, red)){.dark\:bg-purple-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-purple-950) 40%, transparent)}}.dark\:bg-red-950\/40:is(.dark *){background-color:#46080966}@supports (color:color-mix(in lab, red, red)){.dark\:bg-red-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-red-950) 40%, transparent)}}.dark\:bg-rose-950\/40:is(.dark *){background-color:#4d021866}@supports (color:color-mix(in lab, red, red)){.dark\:bg-rose-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-rose-950) 40%, transparent)}}.dark\:bg-sky-950\/40:is(.dark *){background-color:#052f4a66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-sky-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-sky-950) 40%, transparent)}}.dark\:bg-slate-900\/40:is(.dark *){background-color:#0f172b66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-slate-900\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-slate-900) 40%, transparent)}}.dark\:bg-stone-900\/40:is(.dark *){background-color:#1c191766}@supports (color:color-mix(in lab, red, red)){.dark\:bg-stone-900\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-stone-900) 40%, transparent)}}.dark\:bg-teal-950\/40:is(.dark *){background-color:#022f2e66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-teal-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-teal-950) 40%, transparent)}}.dark\:bg-violet-950\/40:is(.dark *){background-color:#2f0d6866}@supports (color:color-mix(in lab, red, red)){.dark\:bg-violet-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-violet-950) 40%, transparent)}}.dark\:bg-yellow-950\/40:is(.dark *){background-color:#43200466}@supports (color:color-mix(in lab, red, red)){.dark\:bg-yellow-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-yellow-950) 40%, transparent)}}.dark\:bg-zinc-900\/40:is(.dark *){background-color:#18181b66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-zinc-900\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-zinc-900) 40%, transparent)}}}:root{--topbar-h:39px;--header-h:87px;--footer-h:359px;--site-content-min-h:calc(100dvh - var(--topbar-h) - var(--header-h) - var(--footer-h));--background:oklch(100% 0 0);--foreground:oklch(21.93% .0122 145.145);--card:oklch(100% 0 0);--card-foreground:oklch(21.93% .0122 145.145);--popover:oklch(100% 0 0);--popover-foreground:oklch(21.93% .0122 145.145);--primary:oklch(72.56% .0713 141.056);--primary-foreground:oklch(100% 0 0);--secondary:oklch(96.07% .0112 141.263);--secondary-foreground:oklch(44.45% .0502 141.758);--muted:oklch(96.07% .0112 141.263);--muted-foreground:oklch(53.51% .0432 142.652);--accent:oklch(96.07% .0112 141.263);--accent-foreground:oklch(72.56% .0713 141.056);--destructive:oklch(68.07% .1129 109.059);--destructive-foreground:oklch(100% 0 0);--border:oklch(91% .021 140.896);--input:oklch(91% .021 140.896);--ring:oklch(72.56% .0713 141.056);--chart-1:oklch(72.56% .0713 141.056);--chart-2:oklch(60.42% .0688 140.724);--chart-3:oklch(84.06% .0531 141.655);--chart-4:oklch(49.29% .0598 141.478);--chart-5:oklch(91% .021 140.896);--sidebar:oklch(97.77% .0078 139.442);--sidebar-foreground:oklch(21.93% .0122 145.145);--sidebar-primary:oklch(72.56% .0713 141.056);--sidebar-primary-foreground:oklch(100% 0 0);--sidebar-accent:oklch(91% .021 140.896);--sidebar-accent-foreground:oklch(72.56% .0713 141.056);--sidebar-border:oklch(91% .021 140.896);--sidebar-ring:oklch(72.56% .0713 141.056);--font-sans:Geist, ui-sans-serif, sans-serif, system-ui;--font-serif:PT Serif, ui-serif, serif;--font-mono:Inconsolata, ui-monospace, monospace;--radius:.28rem;--shadow-x:0px;--shadow-y:4px;--shadow-blur:10px;--shadow-spread:0px;--shadow-opacity:.05;--shadow-color:0 0 0;--shadow-2xs:0px 4px 10px 0px #00000008;--shadow-xs:0px 4px 10px 0px #00000008;--shadow-sm:0px 4px 10px 0px #0000000d, 0px 1px 2px -1px #0000000d;--shadow:0px 4px 10px 0px #0000000d, 0px 1px 2px -1px #0000000d;--shadow-md:0px 4px 10px 0px #0000000d, 0px 2px 4px -1px #0000000d;--shadow-lg:0px 4px 10px 0px #0000000d, 0px 4px 6px -1px #0000000d;--shadow-xl:0px 4px 10px 0px #0000000d, 0px 8px 10px -1px #0000000d;--shadow-2xl:0px 4px 10px 0px #00000021;--tracking-normal:.01em;--spacing:.3rem;--rfs-bg:var(--background);--rfs-surface:var(--card);--rfs-border:var(--border);--rfs-text:var(--foreground);--rfs-muted:var(--muted-foreground)}.dark{--background:oklch(21.93% .0122 145.145);--foreground:oklch(96.07% .0112 141.263);--card:oklch(21.93% .0122 145.145);--card-foreground:oklch(96.07% .0112 141.263);--popover:oklch(21.93% .0122 145.145);--popover-foreground:oklch(96.07% .0112 141.263);--primary:oklch(72.56% .0713 141.056);--primary-foreground:oklch(21.93% .0122 145.145);--secondary:oklch(27.44% .0184 145.053);--secondary-foreground:oklch(84.06% .0531 141.655);--muted:oklch(27.44% .0184 145.053);--muted-foreground:oklch(60.42% .0688 140.724);--accent:oklch(27.44% .0184 145.053);--accent-foreground:oklch(72.56% .0713 141.056);--destructive:oklch(88.44% .1663 107.49);--destructive-foreground:oklch(100% 0 0);--border:oklch(27.44% .0184 145.053);--input:oklch(27.44% .0184 145.053);--ring:oklch(72.56% .0713 141.056);--chart-1:oklch(72.56% .0713 141.056);--chart-2:oklch(84.06% .0531 141.655);--chart-3:oklch(60.42% .0688 140.724);--chart-4:oklch(49.29% .0598 141.478);--chart-5:oklch(35.96% .0355 143.305);--sidebar:oklch(21.93% .0122 145.145);--sidebar-foreground:oklch(96.07% .0112 141.263);--sidebar-primary:oklch(72.56% .0713 141.056);--sidebar-primary-foreground:oklch(21.93% .0122 145.145);--sidebar-accent:oklch(27.44% .0184 145.053);--sidebar-accent-foreground:oklch(72.56% .0713 141.056);--sidebar-border:oklch(27.44% .0184 145.053);--sidebar-ring:oklch(72.56% .0713 141.056);--font-sans:Geist, ui-sans-serif, sans-serif, system-ui;--font-serif:PT Serif, ui-serif, serif;--font-mono:Inconsolata, ui-monospace, monospace;--radius:.28rem;--shadow-x:0px;--shadow-y:10px;--shadow-blur:20px;--shadow-spread:0px;--shadow-opacity:.4;--shadow-color:0 0 0;--shadow-2xs:0px 10px 20px 0px #0003;--shadow-xs:0px 10px 20px 0px #0003;--shadow-sm:0px 10px 20px 0px #0006, 0px 1px 2px -1px #0006;--shadow:0px 10px 20px 0px #0006, 0px 1px 2px -1px #0006;--shadow-md:0px 10px 20px 0px #0006, 0px 2px 4px -1px #0006;--shadow-lg:0px 10px 20px 0px #0006, 0px 4px 6px -1px #0006;--shadow-xl:0px 10px 20px 0px #0006, 0px 8px 10px -1px #0006;--shadow-2xl:0px 10px 20px 0px #000;--rfs-bg:var(--background);--rfs-surface:var(--card);--rfs-border:var(--border);--rfs-text:var(--foreground);--rfs-muted:var(--muted-foreground)}.rfs-root{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--rfs-text)}.rfs-root--drag-move{cursor:grabbing;-webkit-user-select:none;user-select:none}.rfs-root--drag-resize{cursor:ns-resize;-webkit-user-select:none;user-select:none}.rfs-toolbar{margin-bottom:calc(var(--spacing) * 3);align-items:center;gap:calc(var(--spacing) * 2);display:flex}.rfs-btn{border-radius:calc(var(--radius) - 2px);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-width:1px;border-color:var(--rfs-border);background:var(--rfs-surface)}.rfs-btn:hover{background:var(--rfs-bg)}.rfs-btn:disabled{cursor:not-allowed;opacity:.5}.rfs-date-label{border-radius:calc(var(--radius) - 2px);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);border-width:1px;border-color:var(--rfs-border);background:var(--rfs-surface)}.rfs-shell{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--rfs-border);background:var(--rfs-surface);overflow-x:auto}.rfs-header{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--rfs-border);display:flex}.rfs-gutter{border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--rfs-border);flex-shrink:0}.rfs-resource-header{border-right-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 2);border-right-width:1px;border-color:var(--rfs-border)}.rfs-resource-subtitle{margin-top:calc(var(--spacing) * 1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--rfs-muted)}.rfs-body{display:flex}.rfs-times{border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--rfs-border);flex-shrink:0;position:relative}.rfs-time-tick{left:calc(var(--spacing) * 1);color:var(--rfs-muted);font-size:11px;position:absolute}.rfs-grid{flex:1;display:flex}.rfs-col{border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--rfs-border)}.rfs-col-inner{position:relative}.rfs-hour-line,.rfs-slot-line{right:calc(var(--spacing) * 0);left:calc(var(--spacing) * 0);border-top-style:var(--tw-border-style);--tw-border-style:dotted;border-style:dotted;border-top-width:1px;border-color:var(--rfs-border);opacity:.5;position:absolute}.rfs-card-slot{padding:calc(var(--spacing) * .5);position:absolute}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid}}}@layer theme{:root,:host{--font-sans:var(--font-sans);--font-serif:var(--font-serif);--font-mono:var(--font-mono);--color-red-100:oklch(93.6% .032 17.717);--color-red-950:oklch(25.8% .092 26.042);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-950:oklch(26.6% .079 36.259);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-950:oklch(27.9% .077 45.635);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-950:oklch(28.6% .066 53.813);--color-lime-100:oklch(96.7% .067 122.328);--color-lime-950:oklch(27.4% .072 132.109);--color-green-100:oklch(96.2% .044 156.743);--color-green-950:oklch(26.6% .065 152.934);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-950:oklch(26.2% .051 172.552);--color-teal-100:oklch(95.3% .051 180.801);--color-teal-950:oklch(27.7% .046 192.524);--color-cyan-100:oklch(95.6% .045 203.388);--color-cyan-950:oklch(30.2% .056 229.695);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-950:oklch(29.3% .066 243.157);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-950:oklch(28.2% .091 267.935);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-950:oklch(25.7% .09 281.288);--color-violet-100:oklch(94.3% .029 294.588);--color-violet-950:oklch(28.3% .141 291.089);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-950:oklch(29.1% .149 302.717);--color-fuchsia-100:oklch(95.2% .037 318.852);--color-fuchsia-950:oklch(29.3% .136 325.661);--color-pink-100:oklch(94.8% .028 342.258);--color-pink-950:oklch(28.4% .109 3.907);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-950:oklch(27.1% .105 12.094);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-900:oklch(20.8% .042 265.755);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-900:oklch(21% .034 264.665);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-900:oklch(21% .006 285.885);--color-neutral-100:oklch(97% 0 0);--color-neutral-900:oklch(20.5% 0 0);--color-stone-100:oklch(97% .001 106.424);--color-stone-900:oklch(21.6% .006 56.043);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-medium:500;--font-weight-semibold:600;--tracking-normal:var(--tracking-normal);--leading-tight:1.25;--shadow-2xs:var(--shadow-2xs);--shadow-xs:var(--shadow-xs);--shadow-sm:var(--shadow-sm);--shadow-md:var(--shadow-md);--shadow-lg:var(--shadow-lg);--shadow-xl:var(--shadow-xl);--shadow-2xl:var(--shadow-2xl);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--shadow:var(--shadow)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-x-1{inset-inline:calc(var(--spacing) * 1)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.bottom-1{bottom:calc(var(--spacing) * 1)}.mx-auto{margin-inline:auto}.my-6{margin-block:calc(var(--spacing) * 6)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.block{display:block}.contents{display:contents}.flex{display:flex}.h-2{height:calc(var(--spacing) * 2)}.h-7{height:calc(var(--spacing) * 7)}.h-full{height:100%}.w-auto{width:auto}.min-w-\[400px\]{min-width:400px}.cursor-grab{cursor:grab}.cursor-ns-resize{cursor:ns-resize}.resize{resize:both}.overflow-hidden{overflow:hidden}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-border,.border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/50{border-color:color-mix(in oklab, var(--border) 50%, transparent)}}.border-border\/70{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/70{border-color:color-mix(in oklab, var(--border) 70%, transparent)}}.border-slate-300{border-color:var(--color-slate-300)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-background{background-color:var(--background)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-border\/90{background-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.bg-border\/90{background-color:color-mix(in oklab, var(--border) 90%, transparent)}}.bg-card{background-color:var(--card)}.bg-cyan-100{background-color:var(--color-cyan-100)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-fuchsia-100{background-color:var(--color-fuchsia-100)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-green-100{background-color:var(--color-green-100)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-muted\/40{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/40{background-color:color-mix(in oklab, var(--muted) 40%, transparent)}}.bg-neutral-100{background-color:var(--color-neutral-100)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-red-100{background-color:var(--color-red-100)}.bg-rose-100{background-color:var(--color-rose-100)}.bg-sky-100{background-color:var(--color-sky-100)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-300\/90{background-color:#cad5e2e6}@supports (color:color-mix(in lab, red, red)){.bg-slate-300\/90{background-color:color-mix(in oklab, var(--color-slate-300) 90%, transparent)}}.bg-stone-100{background-color:var(--color-stone-100)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-violet-100{background-color:var(--color-violet-100)}.bg-white{background-color:var(--color-white)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-100{background-color:var(--color-zinc-100)}.p-0{padding:calc(var(--spacing) * 0)}.p-2{padding:calc(var(--spacing) * 2)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-1{padding-block:calc(var(--spacing) * 1)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:calc(var(--tracking-normal) - .025em);letter-spacing:calc(var(--tracking-normal) - .025em)}.tracking-wide{--tw-tracking:calc(var(--tracking-normal) + .025em);letter-spacing:calc(var(--tracking-normal) + .025em)}.text-foreground{color:var(--foreground)}.text-muted-foreground{color:var(--muted-foreground)}.text-slate-500{color:var(--color-slate-500)}.shadow-sm{--tw-shadow:var(--shadow-sm);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\:bg-border:hover{background-color:var(--border)}.hover\:bg-muted:hover{background-color:var(--muted)}.hover\:bg-slate-400:hover{background-color:var(--color-slate-400)}}.active\:cursor-grabbing:active{cursor:grabbing}@media (min-width:64rem){.lg\:w-full{width:100%}}.dark\:bg-amber-950\/40:is(.dark *){background-color:#46190166}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-amber-950) 40%, transparent)}}.dark\:bg-blue-950\/40:is(.dark *){background-color:#16245666}@supports (color:color-mix(in lab, red, red)){.dark\:bg-blue-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-blue-950) 40%, transparent)}}.dark\:bg-cyan-950\/40:is(.dark *){background-color:#05334566}@supports (color:color-mix(in lab, red, red)){.dark\:bg-cyan-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-cyan-950) 40%, transparent)}}.dark\:bg-emerald-950\/40:is(.dark *){background-color:#002c2266}@supports (color:color-mix(in lab, red, red)){.dark\:bg-emerald-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-emerald-950) 40%, transparent)}}.dark\:bg-fuchsia-950\/40:is(.dark *){background-color:#4b004f66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-fuchsia-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-fuchsia-950) 40%, transparent)}}.dark\:bg-gray-900\/40:is(.dark *){background-color:#10182866}@supports (color:color-mix(in lab, red, red)){.dark\:bg-gray-900\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-gray-900) 40%, transparent)}}.dark\:bg-green-950\/40:is(.dark *){background-color:#032e1566}@supports (color:color-mix(in lab, red, red)){.dark\:bg-green-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-green-950) 40%, transparent)}}.dark\:bg-indigo-950\/40:is(.dark *){background-color:#1e1a4d66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-indigo-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-indigo-950) 40%, transparent)}}.dark\:bg-lime-950\/40:is(.dark *){background-color:#192e0366}@supports (color:color-mix(in lab, red, red)){.dark\:bg-lime-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-lime-950) 40%, transparent)}}.dark\:bg-muted\/30:is(.dark *){background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-muted\/30:is(.dark *){background-color:color-mix(in oklab, var(--muted) 30%, transparent)}}.dark\:bg-neutral-900\/40:is(.dark *){background-color:#17171766}@supports (color:color-mix(in lab, red, red)){.dark\:bg-neutral-900\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-neutral-900) 40%, transparent)}}.dark\:bg-orange-950\/40:is(.dark *){background-color:#44130666}@supports (color:color-mix(in lab, red, red)){.dark\:bg-orange-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-orange-950) 40%, transparent)}}.dark\:bg-pink-950\/40:is(.dark *){background-color:#51042466}@supports (color:color-mix(in lab, red, red)){.dark\:bg-pink-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-pink-950) 40%, transparent)}}.dark\:bg-purple-950\/40:is(.dark *){background-color:#3c036666}@supports (color:color-mix(in lab, red, red)){.dark\:bg-purple-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-purple-950) 40%, transparent)}}.dark\:bg-red-950\/40:is(.dark *){background-color:#46080966}@supports (color:color-mix(in lab, red, red)){.dark\:bg-red-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-red-950) 40%, transparent)}}.dark\:bg-rose-950\/40:is(.dark *){background-color:#4d021866}@supports (color:color-mix(in lab, red, red)){.dark\:bg-rose-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-rose-950) 40%, transparent)}}.dark\:bg-sky-950\/40:is(.dark *){background-color:#052f4a66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-sky-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-sky-950) 40%, transparent)}}.dark\:bg-slate-900\/40:is(.dark *){background-color:#0f172b66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-slate-900\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-slate-900) 40%, transparent)}}.dark\:bg-stone-900\/40:is(.dark *){background-color:#1c191766}@supports (color:color-mix(in lab, red, red)){.dark\:bg-stone-900\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-stone-900) 40%, transparent)}}.dark\:bg-teal-950\/40:is(.dark *){background-color:#022f2e66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-teal-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-teal-950) 40%, transparent)}}.dark\:bg-violet-950\/40:is(.dark *){background-color:#2f0d6866}@supports (color:color-mix(in lab, red, red)){.dark\:bg-violet-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-violet-950) 40%, transparent)}}.dark\:bg-yellow-950\/40:is(.dark *){background-color:#43200466}@supports (color:color-mix(in lab, red, red)){.dark\:bg-yellow-950\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-yellow-950) 40%, transparent)}}.dark\:bg-zinc-900\/40:is(.dark *){background-color:#18181b66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-zinc-900\/40:is(.dark *){background-color:color-mix(in oklab, var(--color-zinc-900) 40%, transparent)}}}:root{--topbar-h:39px;--header-h:87px;--footer-h:359px;--site-content-min-h:calc(100dvh - var(--topbar-h) - var(--header-h) - var(--footer-h));--background:oklch(100% 0 0);--foreground:oklch(21.93% .0122 145.145);--card:oklch(100% 0 0);--card-foreground:oklch(21.93% .0122 145.145);--popover:oklch(100% 0 0);--popover-foreground:oklch(21.93% .0122 145.145);--primary:oklch(72.56% .0713 141.056);--primary-foreground:oklch(100% 0 0);--secondary:oklch(96.07% .0112 141.263);--secondary-foreground:oklch(44.45% .0502 141.758);--muted:oklch(96.07% .0112 141.263);--muted-foreground:oklch(53.51% .0432 142.652);--accent:oklch(96.07% .0112 141.263);--accent-foreground:oklch(72.56% .0713 141.056);--destructive:oklch(68.07% .1129 109.059);--destructive-foreground:oklch(100% 0 0);--border:oklch(91% .021 140.896);--input:oklch(91% .021 140.896);--ring:oklch(72.56% .0713 141.056);--chart-1:oklch(72.56% .0713 141.056);--chart-2:oklch(60.42% .0688 140.724);--chart-3:oklch(84.06% .0531 141.655);--chart-4:oklch(49.29% .0598 141.478);--chart-5:oklch(91% .021 140.896);--sidebar:oklch(97.77% .0078 139.442);--sidebar-foreground:oklch(21.93% .0122 145.145);--sidebar-primary:oklch(72.56% .0713 141.056);--sidebar-primary-foreground:oklch(100% 0 0);--sidebar-accent:oklch(91% .021 140.896);--sidebar-accent-foreground:oklch(72.56% .0713 141.056);--sidebar-border:oklch(91% .021 140.896);--sidebar-ring:oklch(72.56% .0713 141.056);--font-sans:Geist, ui-sans-serif, sans-serif, system-ui;--font-serif:PT Serif, ui-serif, serif;--font-mono:Inconsolata, ui-monospace, monospace;--radius:.28rem;--shadow-x:0px;--shadow-y:4px;--shadow-blur:10px;--shadow-spread:0px;--shadow-opacity:.05;--shadow-color:0 0 0;--shadow-2xs:0px 4px 10px 0px #00000008;--shadow-xs:0px 4px 10px 0px #00000008;--shadow-sm:0px 4px 10px 0px #0000000d, 0px 1px 2px -1px #0000000d;--shadow:0px 4px 10px 0px #0000000d, 0px 1px 2px -1px #0000000d;--shadow-md:0px 4px 10px 0px #0000000d, 0px 2px 4px -1px #0000000d;--shadow-lg:0px 4px 10px 0px #0000000d, 0px 4px 6px -1px #0000000d;--shadow-xl:0px 4px 10px 0px #0000000d, 0px 8px 10px -1px #0000000d;--shadow-2xl:0px 4px 10px 0px #00000021;--tracking-normal:.01em;--spacing:.3rem;--rfs-bg:var(--background);--rfs-surface:var(--card);--rfs-border:var(--border);--rfs-text:var(--foreground);--rfs-muted:var(--muted-foreground)}.dark{--background:oklch(21.93% .0122 145.145);--foreground:oklch(96.07% .0112 141.263);--card:oklch(21.93% .0122 145.145);--card-foreground:oklch(96.07% .0112 141.263);--popover:oklch(21.93% .0122 145.145);--popover-foreground:oklch(96.07% .0112 141.263);--primary:oklch(72.56% .0713 141.056);--primary-foreground:oklch(21.93% .0122 145.145);--secondary:oklch(27.44% .0184 145.053);--secondary-foreground:oklch(84.06% .0531 141.655);--muted:oklch(27.44% .0184 145.053);--muted-foreground:oklch(60.42% .0688 140.724);--accent:oklch(27.44% .0184 145.053);--accent-foreground:oklch(72.56% .0713 141.056);--destructive:oklch(88.44% .1663 107.49);--destructive-foreground:oklch(100% 0 0);--border:oklch(27.44% .0184 145.053);--input:oklch(27.44% .0184 145.053);--ring:oklch(72.56% .0713 141.056);--chart-1:oklch(72.56% .0713 141.056);--chart-2:oklch(84.06% .0531 141.655);--chart-3:oklch(60.42% .0688 140.724);--chart-4:oklch(49.29% .0598 141.478);--chart-5:oklch(35.96% .0355 143.305);--sidebar:oklch(21.93% .0122 145.145);--sidebar-foreground:oklch(96.07% .0112 141.263);--sidebar-primary:oklch(72.56% .0713 141.056);--sidebar-primary-foreground:oklch(21.93% .0122 145.145);--sidebar-accent:oklch(27.44% .0184 145.053);--sidebar-accent-foreground:oklch(72.56% .0713 141.056);--sidebar-border:oklch(27.44% .0184 145.053);--sidebar-ring:oklch(72.56% .0713 141.056);--font-sans:Geist, ui-sans-serif, sans-serif, system-ui;--font-serif:PT Serif, ui-serif, serif;--font-mono:Inconsolata, ui-monospace, monospace;--radius:.28rem;--shadow-x:0px;--shadow-y:10px;--shadow-blur:20px;--shadow-spread:0px;--shadow-opacity:.4;--shadow-color:0 0 0;--shadow-2xs:0px 10px 20px 0px #0003;--shadow-xs:0px 10px 20px 0px #0003;--shadow-sm:0px 10px 20px 0px #0006, 0px 1px 2px -1px #0006;--shadow:0px 10px 20px 0px #0006, 0px 1px 2px -1px #0006;--shadow-md:0px 10px 20px 0px #0006, 0px 2px 4px -1px #0006;--shadow-lg:0px 10px 20px 0px #0006, 0px 4px 6px -1px #0006;--shadow-xl:0px 10px 20px 0px #0006, 0px 8px 10px -1px #0006;--shadow-2xl:0px 10px 20px 0px #000;--rfs-bg:var(--background);--rfs-surface:var(--card);--rfs-border:var(--border);--rfs-text:var(--foreground);--rfs-muted:var(--muted-foreground)}.rfs-root{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--rfs-text)}.rfs-root--drag-move{cursor:grabbing;-webkit-user-select:none;user-select:none}.rfs-root--drag-resize{cursor:ns-resize;-webkit-user-select:none;user-select:none}.rfs-toolbar{margin-bottom:calc(var(--spacing) * 3);align-items:center;gap:calc(var(--spacing) * 2);display:flex}.rfs-btn{border-radius:calc(var(--radius) - 2px);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));border-width:1px;border-color:var(--rfs-border);background:var(--rfs-surface)}.rfs-btn:hover{background:var(--rfs-bg)}.rfs-btn:disabled{cursor:not-allowed;opacity:.5}.rfs-date-label{border-radius:calc(var(--radius) - 2px);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);border-width:1px;border-color:var(--rfs-border);background:var(--rfs-surface)}.rfs-shell{border-radius:var(--radius);border-style:var(--tw-border-style);border-width:1px;border-color:var(--rfs-border);background:var(--rfs-surface);overflow-x:auto}.rfs-header{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--rfs-border);display:flex}.rfs-gutter{border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--rfs-border);flex-shrink:0}.rfs-resource-header{border-right-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 2);border-right-width:1px;border-color:var(--rfs-border)}.rfs-resource-subtitle{margin-top:calc(var(--spacing) * 1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--rfs-muted)}.rfs-body{display:flex}.rfs-times{border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--rfs-border);flex-shrink:0;position:relative}.rfs-time-tick{left:calc(var(--spacing) * 1);color:var(--rfs-muted);font-size:11px;position:absolute}.rfs-grid{flex:1;display:flex}.rfs-col{border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--rfs-border)}.rfs-col-inner{position:relative}.rfs-hour-line,.rfs-slot-line{right:calc(var(--spacing) * 0);left:calc(var(--spacing) * 0);border-top-style:var(--tw-border-style);--tw-border-style:dotted;border-style:dotted;border-top-width:1px;border-color:var(--rfs-border);opacity:.5;position:absolute}.rfs-card-slot{padding:calc(var(--spacing) * .5);position:absolute}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}
package/package.json CHANGED
@@ -1,86 +1,86 @@
1
- {
2
- "name": "@marco.colia/react-fast-scheduler",
3
- "version": "2.0.0",
4
- "description": "A lightweight React scheduling library.",
5
- "keywords": [
6
- "react",
7
- "scheduler",
8
- "calendar",
9
- "library"
10
- ],
11
- "license": "MIT",
12
- "author": "Marco Colia",
13
- "type": "module",
14
- "main": "./dist/index.cjs",
15
- "module": "./dist/index.js",
16
- "types": "./dist/index.d.ts",
17
- "files": [
18
- "dist"
19
- ],
20
- "sideEffects": false,
21
- "exports": {
22
- ".": {
23
- "types": "./dist/index.d.ts",
24
- "import": "./dist/index.js",
25
- "require": "./dist/index.cjs"
26
- },
27
- "./styles.css": "./dist/styles.css"
28
- },
29
- "publishConfig": {
30
- "access": "public"
31
- },
32
- "repository": {
33
- "type": "git",
34
- "url": "git+https://github.com/justoverclockl/react-fast-scheduler.git"
35
- },
36
- "homepage": "https://github.com/justoverclockl/react-fast-scheduler#readme",
37
- "bugs": {
38
- "url": "https://github.com/justoverclockl/react-fast-scheduler/issues"
39
- },
40
- "scripts": {
41
- "build": "npm run build:js && npm run build:css",
42
- "build:js": "tsup",
43
- "build:css": "tailwindcss -i ./src/global.css -o ./dist/styles.css --minify",
44
- "dev:demo": "vite",
45
- "changeset": "changeset",
46
- "clean": "rimraf dist",
47
- "dev": "tsup --watch",
48
- "lint": "eslint .",
49
- "release": "npm run build && changeset publish",
50
- "test": "vitest run --passWithNoTests",
51
- "test:watch": "vitest",
52
- "typecheck": "tsc --noEmit",
53
- "prepack": "npm run clean && npm run build"
54
- },
55
- "peerDependencies": {
56
- "react": "^18.0.0 || ^19.0.0",
57
- "react-dom": "^18.0.0 || ^19.0.0"
58
- },
59
- "devDependencies": {
60
- "@tailwindcss/cli": "^4.1.13",
61
- "@tailwindcss/vite": "^4.1.13",
62
- "@changesets/changelog-github": "^0.5.1",
63
- "@changesets/cli": "^2.29.4",
64
- "@eslint/js": "^9.25.1",
65
- "@testing-library/jest-dom": "^6.6.3",
66
- "@testing-library/react": "^16.3.0",
67
- "@types/react": "^19.1.8",
68
- "@types/react-dom": "^19.1.6",
69
- "@vitest/coverage-v8": "^3.2.4",
70
- "eslint": "^9.25.1",
71
- "eslint-plugin-react-hooks": "^5.2.0",
72
- "globals": "^16.0.0",
73
- "jsdom": "^26.1.0",
74
- "react": "^19.1.1",
75
- "react-dom": "^19.1.1",
76
- "rimraf": "^6.0.1",
77
- "tsup": "^8.5.0",
78
- "tailwindcss": "^4.1.13",
79
- "typescript": "^5.8.3",
80
- "typescript-eslint": "^8.30.1",
81
- "vitest": "^3.2.4"
82
- },
83
- "dependencies": {
84
- "date-fns": "^4.1.0"
85
- }
86
- }
1
+ {
2
+ "name": "@marco.colia/react-fast-scheduler",
3
+ "version": "2.1.0",
4
+ "description": "A lightweight React scheduling library.",
5
+ "keywords": [
6
+ "react",
7
+ "scheduler",
8
+ "calendar",
9
+ "library"
10
+ ],
11
+ "license": "MIT",
12
+ "author": "Marco Colia",
13
+ "type": "module",
14
+ "main": "./dist/index.cjs",
15
+ "module": "./dist/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "sideEffects": false,
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/index.d.ts",
24
+ "import": "./dist/index.js",
25
+ "require": "./dist/index.cjs"
26
+ },
27
+ "./styles.css": "./dist/styles.css"
28
+ },
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "git+https://github.com/justoverclockl/react-fast-scheduler.git"
35
+ },
36
+ "homepage": "https://github.com/justoverclockl/react-fast-scheduler#readme",
37
+ "bugs": {
38
+ "url": "https://github.com/justoverclockl/react-fast-scheduler/issues"
39
+ },
40
+ "scripts": {
41
+ "build": "npm run build:js && npm run build:css",
42
+ "build:js": "tsup",
43
+ "build:css": "tailwindcss -i ./src/global.css -o ./dist/styles.css --minify",
44
+ "dev:demo": "vite",
45
+ "changeset": "changeset",
46
+ "clean": "rimraf dist",
47
+ "dev": "tsup --watch",
48
+ "lint": "eslint .",
49
+ "release": "npm run build && changeset publish",
50
+ "test": "vitest run --passWithNoTests",
51
+ "test:watch": "vitest",
52
+ "typecheck": "tsc --noEmit",
53
+ "prepack": "npm run clean && npm run build"
54
+ },
55
+ "peerDependencies": {
56
+ "react": "^18.0.0 || ^19.0.0",
57
+ "react-dom": "^18.0.0 || ^19.0.0"
58
+ },
59
+ "devDependencies": {
60
+ "@tailwindcss/cli": "^4.1.13",
61
+ "@tailwindcss/vite": "^4.1.13",
62
+ "@changesets/changelog-github": "^0.5.1",
63
+ "@changesets/cli": "^2.29.4",
64
+ "@eslint/js": "^9.25.1",
65
+ "@testing-library/jest-dom": "^6.6.3",
66
+ "@testing-library/react": "^16.3.0",
67
+ "@types/react": "^19.1.8",
68
+ "@types/react-dom": "^19.1.6",
69
+ "@vitest/coverage-v8": "^3.2.4",
70
+ "eslint": "^9.25.1",
71
+ "eslint-plugin-react-hooks": "^5.2.0",
72
+ "globals": "^16.0.0",
73
+ "jsdom": "^26.1.0",
74
+ "react": "^19.1.1",
75
+ "react-dom": "^19.1.1",
76
+ "rimraf": "^6.0.1",
77
+ "tsup": "^8.5.0",
78
+ "tailwindcss": "^4.1.13",
79
+ "typescript": "^5.8.3",
80
+ "typescript-eslint": "^8.30.1",
81
+ "vitest": "^3.2.4"
82
+ },
83
+ "dependencies": {
84
+ "date-fns": "^4.1.0"
85
+ }
86
+ }