@k2b/ui 0.22.0 → 0.24.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/browser/content/Calendar.js +1122 -1065
- package/dist/browser/content/Calendar.js.map +1 -1
- package/dist/browser/content/CalendarDayView.js +1187 -0
- package/dist/browser/content/CalendarDayView.js.map +1 -0
- package/dist/browser/content/CalendarWeekView.js +1593 -0
- package/dist/browser/content/CalendarWeekView.js.map +1 -0
- package/dist/browser/content/ChartExplorer.js +174 -82
- package/dist/browser/content/ChartExplorer.js.map +1 -1
- package/dist/browser/content/ChartFilterControls.js +90 -33
- package/dist/browser/content/ChartFilterControls.js.map +1 -1
- package/dist/browser/content/DataTable.js +235 -197
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/calendar-day-scroll.js +111 -0
- package/dist/browser/content/calendar-day-scroll.js.map +1 -0
- package/dist/browser/content/calendar-days.js +408 -0
- package/dist/browser/content/calendar-days.js.map +1 -0
- package/dist/browser/content/calendar-dialogs.js +236 -0
- package/dist/browser/content/calendar-dialogs.js.map +1 -0
- package/dist/browser/content/calendar-messages.js +210 -2
- package/dist/browser/content/calendar-messages.js.map +1 -1
- package/dist/browser/content/calendar-pointer.js +15 -3
- package/dist/browser/content/calendar-pointer.js.map +1 -1
- package/dist/browser/content/calendar-shared.js +328 -0
- package/dist/browser/content/calendar-shared.js.map +1 -0
- package/dist/browser/content/calendar-time-view.js +1654 -0
- package/dist/browser/content/calendar-time-view.js.map +1 -0
- package/dist/browser/content/chart-messages.js +10 -0
- package/dist/browser/content/chart-messages.js.map +1 -1
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/inputs/Combobox.js +0 -1
- package/dist/browser/inputs/Combobox.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +125 -97
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/Navigation.js +18 -3
- package/dist/browser/layout/Navigation.js.map +1 -1
- package/dist/browser/layout/PageTitle.js +18 -1
- package/dist/browser/layout/PageTitle.js.map +1 -1
- package/dist/browser/layout/SidebarSwitcher.js +505 -0
- package/dist/browser/layout/SidebarSwitcher.js.map +1 -0
- package/dist/browser/layout/app-workspace-controller.js +174 -86
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/index.js +1 -0
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/navigation-model.js +1 -0
- package/dist/browser/layout/navigation-model.js.map +1 -1
- package/dist/browser/surfaces/StatCell.js +18 -6
- package/dist/browser/surfaces/StatCell.js.map +1 -1
- package/dist/ssr/content/Calendar.js +553 -341
- package/dist/ssr/content/Calendar.js.map +1 -1
- package/dist/ssr/content/CalendarDayView.js +800 -0
- package/dist/ssr/content/CalendarDayView.js.map +1 -0
- package/dist/ssr/content/CalendarWeekView.js +1090 -0
- package/dist/ssr/content/CalendarWeekView.js.map +1 -0
- package/dist/ssr/content/ChartExplorer.js +93 -34
- package/dist/ssr/content/ChartExplorer.js.map +1 -1
- package/dist/ssr/content/ChartFilterControls.js +49 -7
- package/dist/ssr/content/ChartFilterControls.js.map +1 -1
- package/dist/ssr/content/DataTable.js +88 -66
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/calendar-day-scroll.js +111 -0
- package/dist/ssr/content/calendar-day-scroll.js.map +1 -0
- package/dist/ssr/content/calendar-days.js +408 -0
- package/dist/ssr/content/calendar-days.js.map +1 -0
- package/dist/ssr/content/calendar-dialogs.js +159 -0
- package/dist/ssr/content/calendar-dialogs.js.map +1 -0
- package/dist/ssr/content/calendar-messages.js +210 -2
- package/dist/ssr/content/calendar-messages.js.map +1 -1
- package/dist/ssr/content/calendar-pointer.js +15 -3
- package/dist/ssr/content/calendar-pointer.js.map +1 -1
- package/dist/ssr/content/calendar-shared.js +261 -0
- package/dist/ssr/content/calendar-shared.js.map +1 -0
- package/dist/ssr/content/calendar-time-view.js +1311 -0
- package/dist/ssr/content/calendar-time-view.js.map +1 -0
- package/dist/ssr/content/chart-messages.js +10 -0
- package/dist/ssr/content/chart-messages.js.map +1 -1
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/inputs/Combobox.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +40 -29
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/Navigation.js +12 -2
- package/dist/ssr/layout/Navigation.js.map +1 -1
- package/dist/ssr/layout/PageTitle.js +18 -1
- package/dist/ssr/layout/PageTitle.js.map +1 -1
- package/dist/ssr/layout/SidebarSwitcher.js +271 -0
- package/dist/ssr/layout/SidebarSwitcher.js.map +1 -0
- package/dist/ssr/layout/app-workspace-controller.js +174 -86
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/index.js +1 -0
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/navigation-model.js +1 -0
- package/dist/ssr/layout/navigation-model.js.map +1 -1
- package/dist/ssr/surfaces/StatCell.js +2 -2
- package/dist/ssr/surfaces/StatCell.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/content/Calendar.d.ts +95 -1
- package/dist/types/content/CalendarDayView.d.ts +7 -0
- package/dist/types/content/CalendarWeekView.d.ts +7 -0
- package/dist/types/content/ChartExplorer.d.ts +36 -1
- package/dist/types/content/ChartFilterControls.d.ts +6 -1
- package/dist/types/content/DataTable.d.ts +14 -0
- package/dist/types/content/calendar-day-scroll.d.ts +47 -0
- package/dist/types/content/calendar-days.d.ts +192 -0
- package/dist/types/content/calendar-dialogs.d.ts +22 -0
- package/dist/types/content/calendar-messages.d.ts +99 -0
- package/dist/types/content/calendar-pointer.d.ts +9 -0
- package/dist/types/content/calendar-shared.d.ts +69 -0
- package/dist/types/content/calendar-time-view.d.ts +252 -0
- package/dist/types/content/chart-messages.d.ts +5 -0
- package/dist/types/content/index.d.ts +2 -2
- package/dist/types/layout/AppWorkspace.d.ts +27 -3
- package/dist/types/layout/PageTitle.d.ts +2 -1
- package/dist/types/layout/SidebarSwitcher.d.ts +65 -0
- package/dist/types/layout/app-workspace-controller.d.ts +9 -1
- package/dist/types/layout/index.d.ts +1 -0
- package/dist/types/layout/navigation-model.d.ts +4 -0
- package/dist/types/surfaces/StatCell.d.ts +5 -0
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["content/calendar-time-view.tsx"],"sourcesContent":["import { dates as calendar, type DateContext } from \"@k2b/stdlib\";\nimport { createEffect, createMemo, createSignal, For, on, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { announce } from \"../feedback/announce\";\nimport type { CalendarController, CalendarEvent, CalendarEventTimeChange, CalendarExternalDrag, CalendarLabels } from \"./Calendar\";\nimport {\n addDayKeys,\n buildDays,\n type CalendarDayHours,\n clockAt,\n DAY_MINUTES,\n type DayEntry,\n type DayGap,\n type DayGeometry,\n type DayLane,\n type DayModel,\n type DaySpan,\n dayKeyOf,\n dayLanes,\n dayMinuteAt,\n dayTopTerms,\n dayYTerms,\n freeGaps,\n GAP_LABEL_MINUTES,\n GAP_LONG_MINUTES,\n gapProposal,\n instantInDay,\n instantsInDay,\n minuteInDay,\n readDayGeometry,\n resizedInDay,\n snapMinutes,\n subtractTerms,\n termsCss,\n wakeMinutes,\n} from \"./calendar-days\";\nimport { useCalendarMessages } from \"./calendar-messages\";\nimport { startCalendarPointerSession } from \"./calendar-pointer\";\nimport {\n type CalendarOwner,\n type CalendarStop,\n EventChip,\n eventHref,\n type NormalizedEvent,\n ownerDateConfig,\n parseDate,\n placeCalendarPopover,\n validDate,\n} from \"./calendar-shared\";\n\n/**\n * Shared state and parts of the day and week views with `dayHours`: the time model of the loaded days, the selection,\n * the quick create, pointer gestures, and the pieces both views draw into a day's timeline.\n */\n\nexport type TodayDirection = \"left\" | \"right\" | \"up\" | \"down\" | \"\";\n\n/** What the header and the calendar's controller ask of the active day or week view. */\nexport type TimeViewHandle = {\n /** The first and last day the reader sees. */\n visibleKeys: () => { first: string; last: string };\n /** Moves by a day (day view) or a week (week view) when that is loaded; `false` leaves it to the header's link. */\n step: (direction: -1 | 1) => boolean;\n /** Shows a day when it is loaded; `false` leaves it to navigation. */\n goTo: (key: string) => boolean;\n /** Shows today and now when they are loaded. */\n today: () => boolean;\n todayDirection: () => TodayDirection;\n controller: CalendarController;\n};\n\nexport type TimeViewProps = {\n owner: CalendarOwner;\n view: \"day\" | \"week\";\n date: Date;\n now: Date;\n events: readonly CalendarEvent[];\n labels: Required<CalendarLabels>;\n hours: CalendarDayHours;\n register: (handle: TimeViewHandle | null) => void;\n};\n\nexport type TimeSelection = { key: string; start?: number; end?: number };\n\ntype Ghost = {\n key: string;\n start: number;\n end: number;\n title: string;\n time: string;\n colorHex?: string;\n color?: string;\n warn?: boolean;\n fit?: { fits: boolean; text: string };\n};\n\ntype QuickCreate = {\n range: CalendarEventTimeChange;\n anchor: Element | DOMRect;\n create?: string;\n key: string;\n start?: number;\n end?: number;\n};\n\nexport type BodyHit = { key: string; element: HTMLElement; geometry: DayGeometry; minute: number };\n\nconst COLOR_TOKENS: Record<string, string> = {\n blue: \"#3b82f6\",\n emerald: \"#10b981\",\n amber: \"#f59e0b\",\n red: \"#ef4444\",\n violet: \"#8b5cf6\",\n cyan: \"#06b6d4\",\n zinc: \"#a1a1aa\",\n};\nexport const eventAccent = (event: Pick<CalendarEvent, \"color\" | \"colorHex\">): string =>\n event.colorHex ?? COLOR_TOKENS[event.color ?? \"blue\"]!;\n\n/** Minimum minutes an overlap counts for a band, about the height of its title. */\nconst LANE_MINUTES = 20;\n\nexport const reducedMotion = () =>\n typeof window !== \"undefined\" && typeof window.matchMedia === \"function\" && window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n/** Swallows the click a browser sends right after a gesture ends, never the next one. */\nexport const swallowNextClick = () => {\n const stop = (event: Event) => {\n event.stopPropagation();\n event.preventDefault();\n };\n window.addEventListener(\"click\", stop, { capture: true, once: true });\n window.setTimeout(() => window.removeEventListener(\"click\", stop, { capture: true }), 120);\n};\n\nexport const createTimeView = (props: TimeViewProps) => {\n const messages = useCalendarMessages();\n const dateConfig = createMemo((): DateContext => ownerDateConfig(props.owner));\n const hours = () => props.hours;\n const wake = createMemo(() => wakeMinutes(props.hours));\n const keyOf = (date: Date) => calendar.formatDateKey(date, dateConfig());\n const parseKey = (key: string) => calendar.parseCalendarDate(key, dateConfig());\n\n /** The loaded days: the host's range, or the day or the week of the date. */\n const range = createMemo(\n () => {\n const context = dateConfig();\n const loaded = props.owner.range;\n if (loaded) {\n const from = parseDate(loaded.from, context);\n const to = parseDate(loaded.to, context);\n if (validDate(from) && validDate(to)) {\n const first = calendar.formatDateKey(from, context);\n const last = calendar.formatDateKey(new Date(Math.max(from.getTime(), to.getTime() - 1)), context);\n return { first, last };\n }\n }\n const key = calendar.formatDateKey(props.date, context);\n if (props.view === \"day\") return { first: key, last: key };\n const start = calendar.formatDateKey(calendar.startOfWeek(props.date, context), context);\n return { first: start, last: addDayKeys(start, 6) };\n },\n undefined,\n { equals: (left, right) => left.first === right.first && left.last === right.last },\n );\n const anchorKey = createMemo(() => keyOf(props.date));\n\n /** Checkbox states the reader just set, shown until the host's events agree or drop the entry. */\n const [checks, setChecks] = createSignal<Record<string, boolean>>({});\n const [justChecked, setJustChecked] = createSignal<ReadonlySet<string>>(new Set());\n createEffect(\n on(\n () => props.events,\n (events) => {\n const current = untrack(checks);\n const ids = Object.keys(current);\n if (ids.length === 0) return;\n const next = { ...current };\n for (const id of ids) {\n const event = events.find((candidate) => candidate.id === id);\n if (!event || event.checked === current[id]) delete next[id];\n }\n setChecks(next);\n },\n { defer: true },\n ),\n );\n const checkedOf = (event: CalendarEvent): boolean | undefined =>\n event.checked === undefined ? undefined : (checks()[event.id] ?? event.checked);\n /** What Space on an entry's chip does: check its box, where it has one the reader may change. */\n const checkOf = (event: CalendarEvent) =>\n checkedOf(event) !== undefined && props.owner.onEventCheck ? () => toggleCheck(event) : undefined;\n const forgetJustChecked = (id: string) =>\n setJustChecked((value) => {\n if (!value.has(id)) return value;\n const rest = new Set(value);\n rest.delete(id);\n return rest;\n });\n /** Today's day for a moment after its last open to-do was checked off, which its heading celebrates. */\n const [cheered, setCheered] = createSignal<string | null>(null);\n let cheerTimer = 0;\n // The server renders the view too, and has no window.\n onCleanup(() => clearTimeout(cheerTimer));\n /** The entries with a checkbox on a day: its deadlines, the to-dos planned into its hours, and the ones due all day. */\n const dueOn = (key: string) => {\n const model = dayOf(key);\n return [\n ...model.markers.map((marker) => marker.item),\n ...model.bands.map((band) => band.item),\n ...model.spans.filter((span) => span.marker && span.firstKey === key).map((span) => span.item),\n ].filter((item) => item.checked !== undefined);\n };\n const toggleCheck = (event: CalendarEvent) => {\n const current = checkedOf(event);\n if (current === undefined || !props.owner.onEventCheck) return;\n const next = !current;\n setChecks((value) => ({ ...value, [event.id]: next }));\n if (next) {\n setJustChecked((value) => new Set([...value, event.id]));\n window.setTimeout(() => forgetJustChecked(event.id), 1100);\n const today = nowKey();\n const due = dueOn(today);\n if (due.includes(event) && due.every((item) => checkedOf(item))) {\n // The heading shows it only for a moment, so a screen reader hears it once instead.\n announce(messages().calendarAllDone);\n setCheered(today);\n window.clearTimeout(cheerTimer);\n cheerTimer = window.setTimeout(() => setCheered(null), 2200);\n }\n } else setCheered(null);\n // A change the host refuses puts the box back as it was.\n void Promise.resolve(props.owner.onEventCheck(event, next)).catch(() => {\n forgetJustChecked(event.id);\n if (next) setCheered(null);\n setChecks((value) => {\n if (value[event.id] !== next) return value;\n const rest = { ...value };\n delete rest[event.id];\n return rest;\n });\n });\n };\n\n const entries = createMemo((): DayEntry<CalendarEvent>[] => {\n const context = dateConfig();\n return props.events.flatMap((event) => {\n const start = parseDate(event.start, context);\n if (!validDate(start)) return [];\n const marker = event.display === \"marker\";\n const parsedEnd = event.end ? parseDate(event.end, context) : null;\n let end = parsedEnd && validDate(parsedEnd) && parsedEnd > start ? parsedEnd : null;\n if (!end)\n end = event.allDay\n ? calendar.addDays(calendar.startOfDay(start, context), 1, context)\n : marker\n ? start\n : new Date(start.getTime() + 3_600_000);\n return [{ item: event, start, end, allDay: Boolean(event.allDay), marker }];\n });\n });\n const days = createMemo(() => buildDays(range().first, range().last, entries(), props.hours, dateConfig()));\n const emptyModel = (key: string): DayModel<CalendarEvent> => ({ key, bands: [], markers: [], spans: [], night: false, empty: true });\n const dayOf = (key: string) => days().get(key) ?? emptyModel(key);\n const sourceOf = createMemo(() => new Map(entries().map((entry) => [entry.item, entry])));\n\n /** The day that holds now: before the start hour still the day before. */\n const nowKey = createMemo(() => dayKeyOf(props.now, props.hours, dateConfig()));\n const nowMinute = createMemo(() => minuteInDay(nowKey(), props.now, props.hours, dateConfig()));\n /** Now as a minute of a day: past days lie wholly before it, coming days after. */\n const nowIn = (key: string) => (key === nowKey() ? nowMinute() : key < nowKey() ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY);\n const calendarToday = createMemo(() => keyOf(props.now));\n const clock = (minute: number) => clockAt(minute, props.hours);\n const duration = (minutes: number) => messages().calendarDuration({ minutes: Math.max(1, Math.round(minutes)) });\n const instant = (key: string, minute: number) => instantInDay(key, minute, props.hours, dateConfig());\n const slot = (key: string, start: number, end: number) => instantsInDay(key, start, end, props.hours, dateConfig());\n const dayStartMinute = (hour: number) => Math.max(0, (hour - props.hours[0]) * 60);\n\n /** A day's timed piece as the event chip reads it. */\n const normalized = (event: CalendarEvent, key: string): NormalizedEvent => {\n const source = sourceOf().get(event);\n const start = source?.start ?? parseDate(event.start, dateConfig());\n const end = source?.end ?? start;\n return { ...event, startDate: start, endDate: end, sourceStartDate: start, sourceEndDate: end, dayKey: key };\n };\n\n const [selection, setSelection] = createSignal<TimeSelection | null>(null);\n const [touchDraft, setTouchDraft] = createSignal<{ key: string; start: number; end: number } | null>(null);\n const [activeKey, setActiveKey] = createSignal<string | null>(null);\n const [ghost, setGhost] = createSignal<Ghost | null>(null);\n const [movingId, setMovingId] = createSignal(\"\");\n const [dragging, setDragging] = createSignal<\"\" | \"move\" | \"start\" | \"end\" | \"draw\" | \"external\">(\"\");\n const [nightOverrides, setNightOverrides] = createSignal<Record<string, boolean>>({});\n const [quick, setQuick] = createSignal<QuickCreate | null>(null);\n\n const rangeOfSelection = (value: TimeSelection): CalendarEventTimeChange =>\n value.start === undefined || value.end === undefined\n ? { start: parseKey(value.key), end: calendar.addDays(parseKey(value.key), 1, dateConfig()), allDay: true }\n : { ...slot(value.key, value.start, value.end), allDay: false };\n createEffect(on(selection, (value) => props.owner.onSelectionChange?.(value ? rangeOfSelection(value) : null), { defer: true }));\n onCleanup(() => {\n if (untrack(selection)) props.owner.onSelectionChange?.(null);\n });\n\n // Body elements of the days on screen, for pointer positions.\n const bodies = new Map<string, { element: HTMLElement; expanded: () => boolean }>();\n const registerBody = (key: string, element: HTMLElement, expanded: () => boolean) => {\n bodies.set(key, { element, expanded });\n onCleanup(() => {\n if (bodies.get(key)?.element === element) bodies.delete(key);\n });\n };\n const bodyAt = (clientX: number, clientY: number): BodyHit | null => {\n for (const [key, body] of bodies) {\n if (!body.element.isConnected) continue;\n const rect = body.element.getBoundingClientRect();\n if (clientX < rect.left || clientX >= rect.right || clientY < rect.top || clientY >= rect.bottom) continue;\n const geometry = readDayGeometry(body.element, wake(), body.expanded());\n return { key, element: body.element, geometry, minute: dayMinuteAt(geometry, clientY - rect.top) };\n }\n return null;\n };\n const limitOf = (key: string) => (bodies.get(key)?.expanded() ? DAY_MINUTES : wake());\n const nightOpen = (key: string, model: DayModel<CalendarEvent>) => nightOverrides()[key] ?? model.night;\n const setNight = (key: string, open: boolean) => setNightOverrides((value) => ({ ...value, [key]: open }));\n\n /** The gap under a minute while dragging, and whether `need` minutes fit it; the gap shows \"fits\" or how much is missing. */\n const fitAt = (key: string, minute: number, need: number, span?: { start: number; end: number }) => {\n const gap = freeGaps(dayOf(key).bands, wake(), Number.NEGATIVE_INFINITY).find(\n (candidate) => minute >= candidate.start && minute < candidate.end,\n );\n if (!gap) return null;\n const fits = gap.end - gap.start >= need;\n if (fits && span && (span.start < gap.start || span.end > gap.end)) return null;\n return {\n gap,\n fits,\n text: fits ? messages().calendarFits : messages().calendarTooShort({ duration: duration(need - (gap.end - gap.start)) }),\n };\n };\n const [gapHit, setGapHit] = createSignal<{ key: string; start: number; fits: boolean; text: string } | null>(null);\n const overlapAt = (key: string, start: number, end: number, except?: string) =>\n dayOf(key).bands.find((band) => band.item.id !== except && band.start < end && band.end > start)?.item ?? null;\n\n const openQuickCreate = (key: string, start: number | undefined, end: number | undefined, anchor: Element | DOMRect, create?: string) => {\n const range = rangeOfSelection({ key, start, end });\n setTouchDraft(null);\n if (!props.owner.renderQuickCreate) {\n props.owner.onSlotActivate?.(range);\n return;\n }\n setSelection({ key, start, end });\n setQuick({ range, anchor, create, key, start, end });\n };\n const canCreate = () => Boolean(props.owner.renderQuickCreate || props.owner.onSlotActivate);\n\n /** The time a new entry takes: the selection, today's next full hour while today shows, else 09:00 of the first day. */\n const createTarget = (visible: { first: string; last: string }): { key: string; start: number; end: number } => {\n const current = selection();\n if (current && current.start !== undefined && current.end !== undefined)\n return { key: current.key, start: current.start, end: current.end };\n const nine = dayStartMinute(9);\n const nextHour = (key: string) => {\n const minute = Math.ceil((nowMinute() + 1) / 60) * 60;\n return key === nowKey() ? (minute <= wake() - 60 ? minute : null) : nine;\n };\n let key: string;\n let start: number | null;\n if (current) {\n key = current.key;\n start = key === nowKey() ? nextHour(key) : nine;\n } else if (nowKey() >= visible.first && nowKey() <= visible.last) {\n key = nowKey();\n start = nextHour(key);\n } else {\n key = visible.first;\n start = nine;\n }\n if (start === null) {\n key = addDayKeys(key, 1);\n start = nine;\n }\n return { key, start, end: start + 60 };\n };\n\n // Pointer gestures: moving and resizing bands and markers, drawing a new event, and dragging entries in.\n let cancelGesture: (() => void) | undefined;\n onCleanup(() => cancelGesture?.());\n const step = (event: { shiftKey: boolean }) => (event.shiftKey ? 5 : 15);\n const shiftHeld = { current: false };\n const trackShift = (event: KeyboardEvent) => {\n shiftHeld.current = event.shiftKey;\n };\n onMount(() => {\n window.addEventListener(\"keydown\", trackShift, true);\n window.addEventListener(\"keyup\", trackShift, true);\n onCleanup(() => {\n window.removeEventListener(\"keydown\", trackShift, true);\n window.removeEventListener(\"keyup\", trackShift, true);\n });\n });\n const endGesture = () => {\n setGhost(null);\n setGapHit(null);\n setMovingId(\"\");\n setDragging(\"\");\n };\n\n const startMove = (pointerEvent: PointerEvent, event: CalendarEvent, key: string, start: number, end: number, scroller?: HTMLElement) => {\n const marker = event.display === \"marker\";\n if (!props.owner.onEventDrop) return;\n const body = bodies.get(key);\n if (!body) return;\n const rect = body.element.getBoundingClientRect();\n const geometry = readDayGeometry(body.element, wake(), body.expanded());\n const grab = dayMinuteAt(geometry, pointerEvent.clientY - rect.top) - start;\n const length = end - start;\n cancelGesture?.();\n cancelGesture = startCalendarPointerSession({\n event: pointerEvent,\n scrollContainer: scroller,\n resolve: (clientX, clientY) => {\n const hit = bodyAt(clientX, clientY);\n if (!hit) return null;\n const limit = limitOf(hit.key);\n const from = Math.max(\n 0,\n Math.min(limit - Math.max(length, 15), snapMinutes(hit.minute - grab, step({ shiftKey: shiftHeld.current }))),\n );\n return { key: hit.key, start: from, end: from + length };\n },\n onActivate: () => {\n setMovingId(event.id);\n setDragging(\"move\");\n setSelection(null);\n },\n onPreview: (next) => {\n const clash = marker ? null : overlapAt(next.key, next.start, next.end, event.id);\n const fit = marker ? null : fitAt(next.key, next.start + (next.end - next.start) / 2, next.end - next.start, next);\n setGapHit(fit ? { key: next.key, start: fit.gap.start, fits: fit.fits, text: fit.text } : null);\n const time = marker\n ? messages().calendarDue({ time: clock(next.start) })\n : `${clock(next.start)}–${clock(next.end)} · ${duration(next.end - next.start)}`;\n setGhost({\n key: next.key,\n start: next.start,\n end: marker ? next.start + 20 : next.end,\n title: event.title,\n time: clash ? `${time} · ${messages().calendarOverlaps({ title: clash.title })}` : time,\n colorHex: eventAccent(event),\n warn: Boolean(clash),\n fit: fit ? { fits: fit.fits, text: fit.text } : undefined,\n });\n },\n onCommit: (next) => {\n endGesture();\n swallowNextClick();\n if (next.key === key && next.start === start && next.end === end) return;\n const source = sourceOf().get(event);\n // A moved entry keeps its real length, also when it lands across a clock change.\n const startDate = instant(next.key, next.start);\n const endDate = marker\n ? startDate\n : source\n ? new Date(startDate.getTime() + source.end.getTime() - source.start.getTime())\n : slot(next.key, next.start, next.end).end;\n if (source && source.start.getTime() === startDate.getTime() && source.end.getTime() === endDate.getTime()) return;\n props.owner.onEventDrop?.(event, { start: startDate, end: endDate, allDay: false });\n },\n onCancel: endGesture,\n });\n };\n\n const startResize = (\n pointerEvent: PointerEvent,\n event: CalendarEvent,\n key: string,\n start: number,\n end: number,\n edge: \"start\" | \"end\",\n scroller?: HTMLElement,\n ) => {\n if (!props.owner.onEventResize) return;\n pointerEvent.preventDefault();\n pointerEvent.stopPropagation();\n const body = bodies.get(key);\n if (!body) return;\n cancelGesture?.();\n cancelGesture = startCalendarPointerSession({\n event: pointerEvent,\n scrollContainer: scroller,\n threshold: 1,\n resolve: (_clientX, clientY) => {\n const rect = body.element.getBoundingClientRect();\n const geometry = readDayGeometry(body.element, wake(), body.expanded());\n const minute = snapMinutes(dayMinuteAt(geometry, clientY - rect.top), step({ shiftKey: shiftHeld.current }));\n const limit = limitOf(key);\n const size = step({ shiftKey: shiftHeld.current });\n return edge === \"end\"\n ? { start, end: Math.max(start + size, Math.min(limit, minute)) }\n : { start: Math.max(0, Math.min(end - size, minute)), end };\n },\n onActivate: () => {\n setMovingId(event.id);\n setDragging(edge);\n },\n onPreview: (next) =>\n setGhost({\n key,\n start: next.start,\n end: next.end,\n title: event.title,\n time: `${clock(next.start)}–${clock(next.end)} · ${duration(next.end - next.start)}`,\n colorHex: eventAccent(event),\n }),\n onCommit: (next) => {\n endGesture();\n swallowNextClick();\n if (next.start === start && next.end === end) return;\n const source = sourceOf().get(event);\n const range = source ? resizedInDay(source, edge, key, next, props.hours, dateConfig()) : slot(key, next.start, next.end);\n props.owner.onEventResize?.(event, { ...range, allDay: false });\n },\n onCancel: endGesture,\n });\n };\n\n /** Drawing on free time: a new event with its live length, on a 15-minute grid, with Shift on 5 minutes. */\n const startDraw = (pointerEvent: PointerEvent, key: string, scroller?: HTMLElement) => {\n if (!canCreate() || pointerEvent.pointerType !== \"mouse\") return;\n const body = bodies.get(key);\n if (!body) return;\n const minuteAt = (clientY: number) => {\n const rect = body.element.getBoundingClientRect();\n const geometry = readDayGeometry(body.element, wake(), body.expanded());\n return Math.max(0, Math.min(limitOf(key), dayMinuteAt(geometry, clientY - rect.top)));\n };\n const origin = minuteAt(pointerEvent.clientY);\n cancelGesture?.();\n cancelGesture = startCalendarPointerSession({\n event: pointerEvent,\n scrollContainer: scroller,\n resolve: (_clientX, clientY) => {\n const size = step({ shiftKey: shiftHeld.current });\n const minute = minuteAt(clientY);\n const from = Math.floor(Math.min(origin, minute) / size) * size;\n let to = Math.ceil(Math.max(origin, minute) / size) * size;\n if (to - from < size) to = from + size;\n return { start: from, end: Math.min(to, limitOf(key)) };\n },\n onActivate: () => {\n setDragging(\"draw\");\n setSelection(null);\n setTouchDraft(null);\n },\n onPreview: (next) =>\n setGhost({\n key,\n start: next.start,\n end: next.end,\n title: messages().calendarNewEvent,\n time: `${clock(next.start)}–${clock(next.end)} · ${duration(next.end - next.start)}`,\n }),\n onCommit: (next) => {\n const anchor = document.querySelector<HTMLElement>(\".k2b-calendar-ghost[data-live]\")?.getBoundingClientRect() ?? body.element;\n endGesture();\n swallowNextClick();\n openQuickCreate(key, next.start, next.end, anchor);\n },\n onCancel: endGesture,\n });\n };\n\n /** Follows a pointer that pressed an entry outside the calendar into its free time. */\n const dragIn = (\n pointerEvent: PointerEvent,\n item: CalendarExternalDrag,\n onDrop: (slot: CalendarEventTimeChange) => void,\n scroller?: HTMLElement,\n ) => {\n if (pointerEvent.button !== 0 || !pointerEvent.isPrimary) return;\n cancelGesture?.();\n cancelGesture = undefined;\n const length = Math.max(15, Math.round(item.minutes));\n const color = item.colorHex ?? COLOR_TOKENS[item.color ?? \"blue\"]!;\n let token: HTMLElement | undefined;\n let spring: { element: Element; timer: number } | undefined;\n const target =\n pointerEvent.target instanceof HTMLElement ? pointerEvent.target.closest<HTMLElement>(\"li, [data-calendar-drag-source]\") : null;\n let held = false;\n let cleaned = false;\n const preventContextMenu = (event: Event) => event.preventDefault();\n const preventScroll = (event: TouchEvent) => {\n if (held) event.preventDefault();\n };\n const cleanup = () => {\n if (cleaned) return;\n cleaned = true;\n document.removeEventListener(\"touchmove\", preventScroll);\n window.removeEventListener(\"contextmenu\", preventContextMenu, true);\n if (pointerEvent.pointerType === \"touch\") held = false;\n if (target) delete target.dataset.lifted;\n token?.remove();\n token = undefined;\n if (spring) window.clearTimeout(spring.timer);\n spring = undefined;\n endGesture();\n };\n const begin = () => {\n cancelGesture = startCalendarPointerSession({\n event: pointerEvent,\n scrollContainer: scroller,\n armAutoScroll: true,\n threshold: held && pointerEvent.pointerType !== \"mouse\" ? 1 : 6,\n resolve: (clientX, clientY) => {\n const hit = bodyAt(clientX, clientY);\n if (!hit || hit.minute >= limitOf(hit.key)) return { key: \"\", start: 0, end: 0, clash: null };\n const fit = fitAt(hit.key, hit.minute, length);\n let start = snapMinutes(hit.minute - length / 2, 15);\n if (fit?.fits) start = Math.max(fit.gap.start, Math.min(fit.gap.end - length, start));\n start = Math.max(0, Math.min(limitOf(hit.key) - length, start));\n return { key: hit.key, start, end: start + length, clash: overlapAt(hit.key, start, start + length), fit };\n },\n onActivate: () => {\n setDragging(\"external\");\n setSelection(null);\n token = document.createElement(\"div\");\n token.className = \"k2b-calendar-token\";\n token.textContent = item.title;\n token.style.setProperty(\"--k2b-calendar-accent\", color);\n token.setAttribute(\"aria-hidden\", \"true\");\n document.body.append(token);\n },\n onMove: (clientX, clientY) => {\n if (token) token.style.transform = `translate(${clientX + 12}px, ${clientY + 10}px)`;\n // A folded run of empty days opens when the entry rests on it.\n const empty = document.elementFromPoint(clientX, clientY)?.closest(\"[data-calendar-unfold]\");\n if (empty && spring?.element !== empty) {\n if (spring) window.clearTimeout(spring.timer);\n spring = { element: empty, timer: window.setTimeout(() => (empty as HTMLElement).click(), 650) };\n } else if (!empty && spring) {\n window.clearTimeout(spring.timer);\n spring = undefined;\n }\n },\n onPreview: (next) => {\n if (token) token.dataset.hidden = next.key ? \"true\" : \"false\";\n if (!next.key) {\n setGhost(null);\n setGapHit(null);\n return;\n }\n setGapHit(next.fit ? { key: next.key, start: next.fit.gap.start, fits: next.fit.fits, text: next.fit.text } : null);\n const time = `${clock(next.start)}–${clock(next.end)} · ${duration(length)}`;\n setGhost({\n key: next.key,\n start: next.start,\n end: next.end,\n title: item.title,\n time: next.clash ? `${time} · ${messages().calendarOverlaps({ title: next.clash.title })}` : time,\n colorHex: color,\n warn: Boolean(next.clash),\n fit: next.fit ? { fits: next.fit.fits, text: next.fit.text } : undefined,\n });\n },\n onCommit: (next) => {\n swallowNextClick();\n if (next.key) onDrop({ ...slot(next.key, next.start, next.end), allDay: false });\n },\n onEnd: cleanup,\n });\n };\n if (pointerEvent.pointerType === \"mouse\") {\n begin();\n return;\n }\n // A finger first holds the entry still, so a short swipe keeps scrolling the list it sits in.\n const origin = { x: pointerEvent.clientX, y: pointerEvent.clientY };\n const abort = () => {\n window.clearTimeout(timer);\n window.removeEventListener(\"pointermove\", watch);\n window.removeEventListener(\"pointerup\", abort);\n window.removeEventListener(\"pointercancel\", abort);\n window.removeEventListener(\"contextmenu\", preventContextMenu, true);\n if (target) delete target.dataset.lifted;\n if (cancelGesture === abort) cancelGesture = undefined;\n };\n const watch = (event: PointerEvent) => {\n if (event.pointerId === pointerEvent.pointerId && Math.hypot(event.clientX - origin.x, event.clientY - origin.y) > 10) abort();\n };\n const timer = window.setTimeout(() => {\n abort();\n held = true;\n if (target) target.dataset.lifted = \"true\";\n navigator.vibrate?.(8);\n document.addEventListener(\"touchmove\", preventScroll, { passive: false });\n window.addEventListener(\"contextmenu\", preventContextMenu, true);\n begin();\n }, 420);\n window.addEventListener(\"pointermove\", watch);\n window.addEventListener(\"pointerup\", abort);\n window.addEventListener(\"pointercancel\", abort);\n window.addEventListener(\"contextmenu\", preventContextMenu, true);\n cancelGesture = abort;\n };\n\n return {\n props,\n messages,\n dateConfig,\n hours,\n wake,\n range,\n anchorKey,\n days,\n dayOf,\n keyOf,\n parseKey,\n nowKey,\n nowMinute,\n nowIn,\n calendarToday,\n clock,\n duration,\n instant,\n normalized,\n checkedOf,\n toggleCheck,\n checkOf,\n justChecked,\n cheered,\n selection,\n setSelection,\n touchDraft,\n setTouchDraft,\n activeKey,\n setActiveKey,\n ghost,\n gapHit,\n movingId,\n dragging,\n nightOpen,\n setNight,\n quick,\n setQuick,\n openQuickCreate,\n canCreate,\n createTarget,\n rangeOfSelection,\n registerBody,\n bodyAt,\n limitOf,\n startMove,\n startResize,\n startDraw,\n dragIn,\n dayStartMinute,\n };\n};\n\nexport type TimeView = ReturnType<typeof createTimeView>;\n\n/**\n * German short dates read \"Fr 9. Okt\", without the dots of the abbreviations; with `comma`, a title such as\n * \"Fr, 9. Okt 2026\" keeps the comma after the day.\n */\nexport const compactGermanDate = (text: string, locale: string | undefined, comma = false) =>\n locale?.startsWith(\"de\")\n ? text\n .replace(comma ? /\\b(Mo|Di|Mi|Do|Fr|Sa|So)\\./g : /\\b(Mo|Di|Mi|Do|Fr|Sa|So)\\.,?/g, \"$1\")\n .replace(/\\b(Jan|Feb|Mär|Apr|Jun|Jul|Aug|Sep|Sept|Okt|Nov|Dez)\\./g, \"$1\")\n : text;\n\n/** A short day such as \"Fri 9\" or \"Fr 9.\", in the calendar's locale. */\nexport const shortDay = (view: TimeView, key: string, withMonth = false) =>\n compactGermanDate(\n view.parseKey(key).toLocaleDateString(view.dateConfig().locale ?? \"en\", {\n weekday: \"short\",\n day: \"numeric\",\n ...(withMonth ? { month: \"short\" } : {}),\n timeZone: view.dateConfig().timeZone,\n }),\n view.dateConfig().locale,\n );\n\n/** A long day such as \"Friday, October 9\", with the year when it is not this year's. */\nexport const longDay = (view: TimeView, key: string) =>\n view.parseKey(key).toLocaleDateString(view.dateConfig().locale ?? \"en\", {\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n ...(key.slice(0, 4) !== view.calendarToday().slice(0, 4) ? { year: \"numeric\" } : {}),\n timeZone: view.dateConfig().timeZone,\n });\n\nconst CHECK_PATH = \"M4.6 8.3l2.3 2.3 4.6-4.9\";\n\n/** A to-do's checkbox: it draws its check, and the title beside it strikes through. */\nexport const TimeCheck = (props: { view: TimeView; event: CalendarEvent; tabIndex?: number }) => {\n const checked = () => props.view.checkedOf(props.event) ?? false;\n const box = (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <rect x=\"1.75\" y=\"1.75\" width=\"12.5\" height=\"12.5\" rx=\"3.5\" />\n <path d={CHECK_PATH} />\n </svg>\n );\n return (\n <Show\n when={props.view.props.owner.onEventCheck}\n fallback={\n <span class=\"k2b-calendar-check\" data-checked={checked() ? \"true\" : undefined} aria-hidden=\"true\">\n {box}\n </span>\n }\n >\n <button\n type=\"button\"\n class=\"k2b-calendar-check\"\n role=\"checkbox\"\n aria-checked={checked() ? \"true\" : \"false\"}\n aria-label={props.view.messages().calendarDone({ title: props.event.title })}\n tabIndex={props.tabIndex}\n data-checked={checked() ? \"true\" : undefined}\n data-just-checked={props.view.justChecked().has(props.event.id) ? \"true\" : undefined}\n onPointerDown={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n props.view.toggleCheck(props.event);\n }}\n >\n {box}\n </button>\n </Show>\n );\n};\n\n/** A timed entry in a day's timeline: a band as long as the entry, side by side with overlapping ones. */\nexport const TimeBand = (props: {\n view: TimeView;\n band: DayLane<CalendarEvent>;\n dayKey: string;\n expanded: boolean;\n compact?: boolean;\n /** Day view: a tall band shows its place. */\n showLocation?: boolean;\n /** The height of an hour on a wide screen, for the band's size class and title lines. */\n hourPx: number;\n tabIndex?: number;\n stop?: CalendarStop;\n scroller?: () => HTMLElement | undefined;\n}) => {\n const view = props.view;\n const event = () => props.band.item;\n const wake = () => view.wake();\n const limit = () => (props.expanded ? DAY_MINUTES : wake());\n const visibleStart = () => Math.max(0, props.band.start);\n const visibleEnd = () => Math.min(limit(), props.band.end);\n const top = () => dayTopTerms(wake(), props.expanded, visibleStart());\n const bottom = () => dayYTerms(wake(), props.expanded, visibleEnd());\n const now = () => view.nowIn(props.dayKey);\n const running = () => now() >= props.band.start && now() < props.band.end && Number.isFinite(now());\n const past = () => now() >= props.band.end;\n const length = () => props.band.end - props.band.start;\n const pixels = () => (length() / 60) * props.hourPx - 2;\n const size = () => (pixels() < 27 ? \"xs\" : pixels() < 40 ? \"s\" : \"m\");\n const checked = () => view.checkedOf(event());\n const remaining = () => (running() ? view.messages().calendarRemaining({ duration: view.duration(props.band.end - now()) }) : undefined);\n const lines = () => Math.max(1, Math.floor((pixels() - 24) / 15));\n return (\n <div\n class=\"k2b-calendar-band\"\n data-calendar-entry={event().id}\n data-size={size()}\n data-past={past() ? \"true\" : undefined}\n data-running={running() ? \"true\" : undefined}\n data-checked={checked() ? \"true\" : undefined}\n data-checkbox={checked() !== undefined ? \"true\" : undefined}\n data-just-checked={view.justChecked().has(event().id) ? \"true\" : undefined}\n data-cut-bottom={props.band.end > limit() ? \"true\" : undefined}\n data-moving={view.movingId() === event().id ? \"true\" : undefined}\n data-display={event().display}\n style={{\n \"--k2b-calendar-accent\": eventAccent(event()),\n \"--k2b-calendar-lane\": String(props.band.lane),\n \"--k2b-calendar-lanes\": String(props.band.lanes),\n \"--k2b-calendar-lines\": String(lines()),\n \"--k2b-calendar-progress\": running() ? `${(((now() - props.band.start) / length()) * 100).toFixed(1)}%` : undefined,\n top: `calc(${termsCss(top())} + 1px)`,\n height: `max(var(--k2b-calendar-band-min), calc(${termsCss(subtractTerms(bottom(), top()))} - 2px))`,\n }}\n >\n <Show when={running()}>\n <span class=\"k2b-calendar-band__fill\" aria-hidden=\"true\" />\n </Show>\n <Show when={checked() !== undefined}>\n <TimeCheck view={view} event={event()} tabIndex={props.tabIndex === undefined ? undefined : -1} />\n </Show>\n <EventChip\n event={view.normalized(event(), props.dayKey)}\n owner={view.props.owner}\n href={eventHref(view.props.owner, event())}\n fill\n timeline\n compact={props.compact}\n timeLabel={`${view.clock(props.band.start)}–${view.clock(props.band.end)}`}\n showLocation={props.showLocation && size() === \"m\" && pixels() >= 64}\n remaining={remaining()}\n checkbox={checked() !== undefined}\n onCheck={view.checkOf(event())}\n moving={view.movingId() === event().id}\n tabIndex={props.tabIndex}\n stop={props.stop}\n onMovePointerDown={\n view.props.owner.onEventDrop\n ? (pointerEvent) => view.startMove(pointerEvent, event(), props.dayKey, props.band.start, props.band.end, props.scroller?.())\n : undefined\n }\n />\n <Show when={view.props.owner.onEventResize}>\n <span\n class=\"k2b-calendar-band__grip\"\n data-edge=\"start\"\n aria-hidden=\"true\"\n onPointerDown={(pointerEvent) =>\n view.startResize(pointerEvent, event(), props.dayKey, props.band.start, props.band.end, \"start\", props.scroller?.())\n }\n />\n <Show when={props.band.end <= limit()}>\n <span\n class=\"k2b-calendar-band__grip\"\n data-edge=\"end\"\n aria-hidden=\"true\"\n onPointerDown={(pointerEvent) =>\n view.startResize(pointerEvent, event(), props.dayKey, props.band.start, props.band.end, \"end\", props.scroller?.())\n }\n />\n </Show>\n </Show>\n </div>\n );\n};\n\n/** A point in time such as a deadline: a dashed line across the day and a pill with its checkbox and title. */\nexport const TimeMarker = (props: {\n view: TimeView;\n event: CalendarEvent;\n minute: number;\n dayKey: string;\n expanded: boolean;\n above: boolean;\n /** The pill's place among deadlines whose pills would cover each other, from the left. */\n lane: number;\n lanes: number;\n showTime: boolean;\n tabIndex?: number;\n stop?: CalendarStop;\n scroller?: () => HTMLElement | undefined;\n}) => {\n const view = props.view;\n const checked = () => view.checkedOf(props.event);\n const past = () => view.nowIn(props.dayKey) >= props.minute;\n return (\n <div\n class=\"k2b-calendar-marker\"\n data-calendar-entry={props.event.id}\n data-past={past() ? \"true\" : undefined}\n data-overdue={past() && checked() === false ? \"true\" : undefined}\n data-checked={checked() ? \"true\" : undefined}\n data-just-checked={view.justChecked().has(props.event.id) ? \"true\" : undefined}\n data-above={props.above ? \"true\" : undefined}\n data-moving={view.movingId() === props.event.id ? \"true\" : undefined}\n style={{\n \"--k2b-calendar-accent\": eventAccent(props.event),\n \"--k2b-calendar-marker-lane\": String(props.lane),\n \"--k2b-calendar-marker-lanes\": String(props.lanes),\n top: termsCss(dayTopTerms(view.wake(), props.expanded, props.minute)),\n }}\n >\n <span class=\"k2b-calendar-marker__line\" aria-hidden=\"true\" />\n <span class=\"k2b-calendar-marker__pill\">\n <Show when={checked() !== undefined}>\n <TimeCheck view={view} event={props.event} tabIndex={props.tabIndex === undefined ? undefined : -1} />\n </Show>\n <EventChip\n event={view.normalized(props.event, props.dayKey)}\n owner={view.props.owner}\n href={eventHref(view.props.owner, props.event)}\n compact\n timeline\n checkbox={checked() !== undefined}\n onCheck={view.checkOf(props.event)}\n tabIndex={props.tabIndex}\n stop={props.stop}\n trailing={\n <Show when={props.showTime}>\n <span class=\"k2b-calendar-marker__time\">{view.clock(props.minute)}</span>\n </Show>\n }\n onMovePointerDown={\n view.props.owner.onEventDrop\n ? (pointerEvent) => view.startMove(pointerEvent, props.event, props.dayKey, props.minute, props.minute, props.scroller?.())\n : undefined\n }\n />\n </span>\n </div>\n );\n};\n\n/** Free time between entries, labelled from an hour on; activating it creates there. */\nexport const TimeGap = (props: {\n view: TimeView;\n gap: DayGap;\n dayKey: string;\n expanded: boolean;\n /** A deadline pill near the middle moves the label aside. */\n aside: boolean;\n tabIndex?: number;\n stop?: CalendarStop;\n}) => {\n const view = props.view;\n const length = () => props.gap.end - props.gap.start;\n const proposal = () => gapProposal(props.gap, view.hours());\n const label = () => view.messages().calendarFree({ duration: view.duration(length()) });\n const hit = () => {\n const current = view.gapHit();\n return current && current.key === props.dayKey && current.start === props.gap.start ? current : null;\n };\n const top = () => dayYTerms(view.wake(), props.expanded, props.gap.start);\n /**\n * Shorter free time is hidden until something is dragged into it, and past free time has no label, so neither is a\n * keyboard stop.\n */\n const labelled = () => length() >= GAP_LABEL_MINUTES;\n const stop = () => (labelled() && !props.gap.past ? props.stop : undefined);\n return (\n <div\n class=\"k2b-calendar-gap\"\n data-short={labelled() ? undefined : \"true\"}\n data-long={length() >= GAP_LONG_MINUTES ? \"true\" : undefined}\n data-past={props.gap.past ? \"true\" : undefined}\n data-aside={props.aside ? \"true\" : undefined}\n data-hit={hit() ? (hit()!.fits ? \"fit\" : \"short\") : undefined}\n style={{ top: termsCss(top()), height: termsCss(subtractTerms(dayYTerms(view.wake(), props.expanded, props.gap.end), top())) }}\n >\n <span class=\"k2b-calendar-gap__zone\" aria-hidden=\"true\" />\n <Show when={view.canCreate()}>\n <button\n type=\"button\"\n class=\"k2b-calendar-gap__button\"\n tabIndex={labelled() ? (props.tabIndex ?? (props.gap.past ? -1 : 0)) : -1}\n data-stop={stop()?.id}\n data-col={stop()?.column}\n data-minute={stop()?.minute}\n aria-label={view.messages().calendarFreeAction({\n duration: view.duration(length()),\n from: view.clock(props.gap.start),\n to: view.clock(props.gap.end),\n start: view.clock(proposal()[0]),\n end: view.clock(proposal()[1]),\n })}\n title={view.messages().calendarCreateAt({ start: view.clock(proposal()[0]), end: view.clock(proposal()[1]) })}\n onClick={(event) => {\n event.stopPropagation();\n view.openQuickCreate(props.dayKey, proposal()[0], proposal()[1], event.currentTarget);\n }}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n <span class=\"k2b-calendar-gap__text\">{hit() ? hit()!.text : label()}</span>\n </button>\n </Show>\n </div>\n );\n};\n\n/** The preview of a drag, a draw, or an entry dragged in, and the selected slot. */\nexport const TimeOverlays = (props: { view: TimeView; dayKey: string; expanded: boolean }) => {\n const view = props.view;\n const ghost = () => {\n const current = view.ghost();\n return current && current.key === props.dayKey ? current : null;\n };\n const selected = () => {\n const current = view.selection();\n return current && current.key === props.dayKey && current.start !== undefined && current.end !== undefined ? current : null;\n };\n const draft = () => {\n const current = view.touchDraft();\n return current && current.key === props.dayKey ? current : null;\n };\n const box = (start: number, end: number) => {\n const top = dayTopTerms(view.wake(), props.expanded, start);\n return { top: termsCss(top), height: termsCss(subtractTerms(dayYTerms(view.wake(), props.expanded, end), top)) };\n };\n return (\n <>\n <Show when={selected()}>\n {(slot) => <span class=\"k2b-calendar-slot\" style={box(slot().start!, slot().end!)} aria-hidden=\"true\" />}\n </Show>\n <Show when={draft()}>\n {(slot) => (\n <div class=\"k2b-calendar-draft\" style={box(slot().start, slot().end)}>\n <span\n class=\"k2b-calendar-draft__grip\"\n data-edge=\"start\"\n aria-hidden=\"true\"\n onPointerDown={(event) => startDraftResize(view, event, \"start\")}\n />\n <button\n type=\"button\"\n class=\"k2b-calendar-draft__open\"\n aria-label={view.messages().calendarCreateAt({ start: view.clock(slot().start), end: view.clock(slot().end) })}\n onClick={(event) => view.openQuickCreate(slot().key, slot().start, slot().end, event.currentTarget)}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n <span>\n {view.clock(slot().start)}–{view.clock(slot().end)} · {view.duration(slot().end - slot().start)}\n </span>\n </button>\n <span\n class=\"k2b-calendar-draft__grip\"\n data-edge=\"end\"\n aria-hidden=\"true\"\n onPointerDown={(event) => startDraftResize(view, event, \"end\")}\n />\n </div>\n )}\n </Show>\n <Show when={ghost()}>\n {(current) => (\n <div\n class=\"k2b-calendar-ghost\"\n data-live=\"true\"\n data-size={current().end - current().start < 40 ? \"s\" : \"m\"}\n data-warn={current().warn ? \"true\" : undefined}\n style={{ ...box(current().start, current().end), \"--k2b-calendar-accent\": current().colorHex ?? \"var(--k2b-action)\" }}\n aria-hidden=\"true\"\n >\n <span class=\"k2b-calendar-ghost__title\">{current().title}</span>\n <span class=\"k2b-calendar-ghost__time\">{current().time}</span>\n <Show when={current().fit}>\n {(fit) => (\n <span class=\"k2b-calendar-ghost__fit\" data-fit={fit().fits ? \"fit\" : \"short\"}>\n {fit().text}\n </span>\n )}\n </Show>\n </div>\n )}\n </Show>\n </>\n );\n};\n\n/** The handles of a tapped slot change its start or end. */\nconst startDraftResize = (view: TimeView, pointerEvent: PointerEvent, edge: \"start\" | \"end\") => {\n const draft = view.touchDraft();\n if (!draft) return;\n pointerEvent.preventDefault();\n pointerEvent.stopPropagation();\n startCalendarPointerSession({\n event: pointerEvent,\n threshold: 1,\n resolve: (clientX, clientY) => {\n const hit = view.bodyAt(clientX, clientY);\n if (!hit || hit.key !== draft.key) return null;\n const minute = snapMinutes(hit.minute, 15);\n const current = view.touchDraft() ?? draft;\n return edge === \"end\"\n ? { ...current, end: Math.max(current.start + 15, Math.min(view.limitOf(draft.key), minute)) }\n : { ...current, start: Math.max(0, Math.min(current.end - 15, minute)) };\n },\n onPreview: (next) => {\n view.setTouchDraft(next);\n view.setSelection({ key: next.key, start: next.start, end: next.end });\n },\n onCommit: () => swallowNextClick(),\n });\n};\n\n/** Free time of a day with the gap of now trimmed, as both views draw it. */\nexport const dayGaps = (view: TimeView, key: string) => freeGaps(view.dayOf(key).bands, view.wake(), view.nowIn(key));\n\n/** The bands of a day with their lanes, cut to what its timeline draws. */\nexport const dayBands = (view: TimeView, key: string, expanded: boolean) => {\n const limit = expanded ? DAY_MINUTES : view.wake();\n const visible = view.dayOf(key).bands.filter((band) => Math.min(limit, band.end) > Math.max(0, band.start));\n return dayLanes(visible, LANE_MINUTES);\n};\n\n/** Entries the folded night hides, as chips with their time. */\nexport const foldedEntries = (view: TimeView, key: string) => {\n const model = view.dayOf(key);\n const wake = view.wake();\n return [\n ...model.bands\n .filter((band) => band.end > wake)\n .map((band) => ({\n event: band.item,\n time: band.start >= wake ? view.clock(band.start) : view.messages().calendarUntil({ time: view.clock(band.end) }),\n })),\n ...model.markers.filter((marker) => marker.minute >= wake).map((marker) => ({ event: marker.item, time: view.clock(marker.minute) })),\n ];\n};\n\n/** The quick create at a slot or gap, as in the month view. */\nexport const TimeQuickCreate = (props: { view: TimeView }) => {\n const view = props.view;\n let element: HTMLDivElement | undefined;\n let returnFocus: HTMLElement | null = null;\n createEffect(() => {\n const current = view.quick();\n if (!element) return;\n if (!current) {\n if (element.matches(\":popover-open\")) element.hidePopover();\n return;\n }\n returnFocus = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n if (!element.matches(\":popover-open\")) element.showPopover();\n queueMicrotask(() => {\n if (view.quick() !== current || !element?.isConnected) return;\n placeCalendarPopover(current.anchor, element);\n element.querySelector<HTMLElement>(\"input,textarea,select,button,a[href],[tabindex]:not([tabindex='-1'])\")?.focus();\n });\n });\n /** Whether the focus is in the popover, or fell to the page as it hid: only then does a close return it. */\n const focusInPopover = () => element?.contains(document.activeElement) || document.activeElement === document.body;\n const close = (restore: boolean) => {\n const current = view.quick();\n if (!current) return;\n const selection = view.selection();\n view.setQuick(null);\n // A late close must leave a newer selection in place.\n if (selection?.key === current.key && selection.start === current.start && selection.end === current.end) view.setSelection(null);\n if (restore && returnFocus?.isConnected) returnFocus.focus({ preventScroll: true });\n };\n return (\n <div\n ref={element}\n class=\"k2b-calendar-popover\"\n popover=\"auto\"\n role=\"dialog\"\n aria-label={view.messages().calendarQuickCreate}\n data-kind=\"create\"\n onToggle={(event) => {\n if (event.newState !== \"closed\" || !view.quick() || event.currentTarget.matches(\":popover-open\")) return;\n close(focusInPopover());\n }}\n >\n <Show when={view.quick()} keyed>\n {(value) =>\n view.props.owner.renderQuickCreate?.(value.range, {\n create: value.create,\n close: () => {\n if (view.quick() === value) close(focusInPopover());\n },\n })\n }\n </Show>\n </div>\n );\n};\n\n/** All-day entries of a day as chips: bars with torn ends where they go on, and points due that day. */\nexport const AllDayChips = (props: { view: TimeView; dayKey: string; spans: readonly DaySpan<CalendarEvent>[] }) => {\n const view = props.view;\n return (\n <For each={props.spans}>\n {(span) => {\n const event = span.item;\n const checked = () => view.checkedOf(event);\n return (\n <span\n class=\"k2b-calendar-allday-chip\"\n data-bar={span.marker ? undefined : \"true\"}\n data-checkbox={checked() !== undefined ? \"true\" : undefined}\n data-checked={checked() ? \"true\" : undefined}\n data-just-checked={view.justChecked().has(event.id) ? \"true\" : undefined}\n style={{ \"--k2b-calendar-accent\": eventAccent(event) }}\n >\n <Show when={checked() !== undefined}>\n <TimeCheck view={view} event={event} />\n </Show>\n <EventChip\n event={view.normalized(event, props.dayKey)}\n owner={view.props.owner}\n href={eventHref(view.props.owner, event)}\n compact\n timeline\n bar={!span.marker}\n checkbox={checked() !== undefined}\n onCheck={view.checkOf(event)}\n continuesBefore={span.firstKey < props.dayKey}\n continuesAfter={span.lastKey > props.dayKey}\n />\n </span>\n );\n }}\n </For>\n );\n};\n\n/** Hour labels and lines of a day's timeline with the night open, and the date at midnight. */\nexport const nightHours = (wake: number) => {\n const hours: number[] = [];\n for (let minute = wake + 60; minute < DAY_MINUTES; minute += 60) hours.push(minute);\n return hours;\n};\n\nexport const isNearNow = (view: TimeView, key: string, minute: number) => key === view.nowKey() && Math.abs(view.nowMinute() - minute) < 14;\n\n/** Whether a marker sits right above a band's start, so its pill goes above the line. */\nexport const markerAbove = (model: DayModel<CalendarEvent>, minute: number) =>\n model.bands.some((band) => band.start >= minute - 10 && band.start <= minute + 20);\n\n/** Whether a deadline pill sits near the middle of a gap, so the gap's label moves aside. */\nexport const gapAside = (model: DayModel<CalendarEvent>, gap: DayGap) => {\n const middle = (gap.start + gap.end) / 2;\n return model.markers.some(\n (marker) => marker.minute > gap.start - 10 && marker.minute < gap.end + 10 && Math.abs(marker.minute - middle) < 25,\n );\n};\n\n/** A day's counts for its header: events and all-day entries, to-dos and deadlines. */\nexport const daySummary = (view: TimeView, key: string) => {\n const model = view.dayOf(key);\n const isTask = (event: CalendarEvent) => event.display === \"marker\" || event.checked !== undefined;\n const all = [\n ...model.bands.map((band) => band.item),\n ...model.markers.map((marker) => marker.item),\n ...model.spans.map((span) => span.item),\n ];\n const tasks = all.filter(isTask).length;\n return view.messages().calendarDaySummary({ events: all.length - tasks, tasks });\n};\n\n/** What starts within the next hour today, such as \"Planning in 12 min\". */\nexport const soonNote = (view: TimeView, key: string) => {\n if (key !== view.nowKey()) return \"\";\n const now = view.nowMinute();\n const next = view\n .dayOf(key)\n .bands.filter((band) => band.start > now && band.start - now <= 60 && !view.checkedOf(band.item))\n .sort((left, right) => left.start - right.start)[0];\n return next ? view.messages().calendarSoon({ title: next.item.title, duration: view.duration(next.start - now) }) : \"\";\n};\n\n/** The busy minutes of a day's waking hours, merged, with the color of the first entry, for the thin load line. */\nexport const dayLoad = (view: TimeView, key: string) => {\n const pieces = view\n .dayOf(key)\n .bands.map((band) => ({ start: Math.max(0, band.start), end: Math.min(view.wake(), band.end), color: eventAccent(band.item) }))\n .filter((piece) => piece.end > piece.start)\n .sort((left, right) => left.start - right.start);\n const merged: typeof pieces = [];\n for (const piece of pieces) {\n const last = merged[merged.length - 1];\n if (last && piece.start <= last.end) last.end = Math.max(last.end, piece.end);\n else merged.push({ ...piece });\n }\n return merged;\n};\n\n/** Day keys of the week that holds a day, from its first day. */\nexport const weekKeysOf = (view: TimeView, key: string) => {\n const start = view.keyOf(calendar.startOfWeek(view.parseKey(key), view.dateConfig()));\n return Array.from({ length: 7 }, (_, index) => addDayKeys(start, index));\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -19,6 +19,11 @@ const chartMessages = i18n.define({
|
|
|
19
19
|
chartPreviousData: "The chart and table still show the last loaded filters",
|
|
20
20
|
chartCopyData: "Copy data",
|
|
21
21
|
chartCopyFailed: "Could not copy data",
|
|
22
|
+
chartLegend: "Legend",
|
|
23
|
+
chartRowsShown: ({
|
|
24
|
+
shown,
|
|
25
|
+
total
|
|
26
|
+
}) => `Showing ${shown} of ${total} rows. Sort to see others; Copy data copies all of them.`,
|
|
22
27
|
interactiveLineChart: "Interactive line chart",
|
|
23
28
|
interactiveChart: "Interactive chart. Use arrow keys to inspect, Enter to select, Escape to dismiss. On maps and timelines use Alt with arrow keys to inspect.",
|
|
24
29
|
chartFields: ({
|
|
@@ -80,6 +85,11 @@ const chartMessages = i18n.define({
|
|
|
80
85
|
chartPreviousData: "Diagramm und Tabelle zeigen weiterhin die zuletzt geladenen Filter",
|
|
81
86
|
chartCopyData: "Daten kopieren",
|
|
82
87
|
chartCopyFailed: "Daten konnten nicht kopiert werden",
|
|
88
|
+
chartLegend: "Legende",
|
|
89
|
+
chartRowsShown: ({
|
|
90
|
+
shown,
|
|
91
|
+
total
|
|
92
|
+
}) => `${shown} von ${total} Zeilen werden angezeigt. Sortiere, um andere zu sehen; „Daten kopieren“ kopiert alle.`,
|
|
83
93
|
interactiveLineChart: "Interaktives Liniendiagramm",
|
|
84
94
|
interactiveChart: "Interaktives Diagramm. Pfeiltasten zum Erkunden, Enter zum Auswählen, Escape zum Schließen. In Karten und Zeitleisten Alt mit Pfeiltasten zum Erkunden.",
|
|
85
95
|
chartFields: ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["content/chart-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst chartMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n chartView: \"Chart view\",\n chartDiagram: \"Diagram\",\n chartData: \"Table\",\n chartSeries: \"Series visibility\",\n chartOnly: \"Only\",\n chartShowAll: \"Show all\",\n chartShowing: \"Showing\",\n chartSelectedDatum: \"Selected data point\",\n chartReference: \"Reference\",\n chartCurrent: \"Current\",\n chartPinReference: \"Pin as reference\",\n chartRemoveComparison: \"Remove comparison\",\n chartPreviousData: \"The chart and table still show the last loaded filters\",\n chartCopyData: \"Copy data\",\n chartCopyFailed: \"Could not copy data\",\n interactiveLineChart: \"Interactive line chart\",\n interactiveChart:\n \"Interactive chart. Use arrow keys to inspect, Enter to select, Escape to dismiss. On maps and timelines use Alt with arrow keys to inspect.\",\n chartFields: ({ key }: { key: string }) => {\n const labels: Record<string, string> = {\n x: \"X\",\n y: \"Y\",\n value: \"Value\",\n percent: \"Share\",\n total: \"Total\",\n from: \"From\",\n to: \"To\",\n upperInclusive: \"Includes upper bound\",\n count: \"Count\",\n q1: \"Lower quartile\",\n q2: \"Median\",\n q3: \"Upper quartile\",\n whiskerLow: \"Lower whisker\",\n whiskerHigh: \"Upper whisker\",\n min: \"Minimum\",\n max: \"Maximum\",\n threshold: \"Threshold\",\n delta: \"Change\",\n latitude: \"Latitude\",\n longitude: \"Longitude\",\n size: \"Size\",\n state: \"State\",\n duration: \"Duration\",\n detail: \"Detail\",\n errY: \"Y error\",\n errYHigh: \"Upper Y error\",\n errYLow: \"Lower Y error\",\n errX: \"X error\",\n errXHigh: \"Upper X error\",\n errXLow: \"Lower X error\",\n };\n return labels[key] ?? key;\n },\n interactiveMap: \"Interactive map\",\n interactiveTimeline: \"Interactive timeline\",\n series: \"Series\",\n resetMapView: \"Reset map view\",\n resetTimelineView: \"Reset timeline view\",\n },\n de: {\n chartView: \"Diagrammansicht\",\n chartDiagram: \"Diagramm\",\n chartData: \"Tabelle\",\n chartSeries: \"Sichtbare Datenreihen\",\n chartOnly: \"Nur diese\",\n chartShowAll: \"Alle anzeigen\",\n chartShowing: \"Angezeigt\",\n chartSelectedDatum: \"Ausgewählter Datenpunkt\",\n chartReference: \"Vergleich\",\n chartCurrent: \"Aktuell\",\n chartPinReference: \"Als Vergleich merken\",\n chartRemoveComparison: \"Vergleich entfernen\",\n chartPreviousData: \"Diagramm und Tabelle zeigen weiterhin die zuletzt geladenen Filter\",\n chartCopyData: \"Daten kopieren\",\n chartCopyFailed: \"Daten konnten nicht kopiert werden\",\n interactiveLineChart: \"Interaktives Liniendiagramm\",\n interactiveChart:\n \"Interaktives Diagramm. Pfeiltasten zum Erkunden, Enter zum Auswählen, Escape zum Schließen. In Karten und Zeitleisten Alt mit Pfeiltasten zum Erkunden.\",\n chartFields: ({ key }: { key: string }) => {\n const labels: Record<string, string> = {\n x: \"X\",\n y: \"Y\",\n value: \"Wert\",\n percent: \"Anteil\",\n total: \"Gesamt\",\n from: \"Von\",\n to: \"Bis\",\n upperInclusive: \"Obergrenze enthalten\",\n count: \"Anzahl\",\n q1: \"Unteres Quartil\",\n q2: \"Median\",\n q3: \"Oberes Quartil\",\n whiskerLow: \"Unterer Whisker\",\n whiskerHigh: \"Oberer Whisker\",\n min: \"Minimum\",\n max: \"Maximum\",\n threshold: \"Schwellenwert\",\n delta: \"Änderung\",\n latitude: \"Breitengrad\",\n longitude: \"Längengrad\",\n size: \"Größe\",\n state: \"Zustand\",\n duration: \"Dauer\",\n detail: \"Details\",\n errY: \"Y-Fehler\",\n errYHigh: \"Oberer Y-Fehler\",\n errYLow: \"Unterer Y-Fehler\",\n errX: \"X-Fehler\",\n errXHigh: \"Oberer X-Fehler\",\n errXLow: \"Unterer X-Fehler\",\n };\n return labels[key] ?? key;\n },\n interactiveMap: \"Interaktive Karte\",\n interactiveTimeline: \"Interaktive Zeitachse\",\n series: \"Datenreihe\",\n resetMapView: \"Kartenansicht zurücksetzen\",\n resetTimelineView: \"Zeitachsenansicht zurücksetzen\",\n },\n },\n});\n\nexport type ChartMessages = ReturnType<(typeof chartMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useChartMessages = (): (() => ChartMessages) => {\n const locale = useLocale();\n return () => chartMessages.resolve([locale()]).t;\n};\n\nexport const checkChartMessages = () => chartMessages.check();\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["content/chart-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst chartMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n chartView: \"Chart view\",\n chartDiagram: \"Diagram\",\n chartData: \"Table\",\n chartSeries: \"Series visibility\",\n chartOnly: \"Only\",\n chartShowAll: \"Show all\",\n chartShowing: \"Showing\",\n chartSelectedDatum: \"Selected data point\",\n chartReference: \"Reference\",\n chartCurrent: \"Current\",\n chartPinReference: \"Pin as reference\",\n chartRemoveComparison: \"Remove comparison\",\n chartPreviousData: \"The chart and table still show the last loaded filters\",\n chartCopyData: \"Copy data\",\n chartCopyFailed: \"Could not copy data\",\n chartLegend: \"Legend\",\n chartRowsShown: ({ shown, total }: { shown: string; total: string }) =>\n `Showing ${shown} of ${total} rows. Sort to see others; Copy data copies all of them.`,\n interactiveLineChart: \"Interactive line chart\",\n interactiveChart:\n \"Interactive chart. Use arrow keys to inspect, Enter to select, Escape to dismiss. On maps and timelines use Alt with arrow keys to inspect.\",\n chartFields: ({ key }: { key: string }) => {\n const labels: Record<string, string> = {\n x: \"X\",\n y: \"Y\",\n value: \"Value\",\n percent: \"Share\",\n total: \"Total\",\n from: \"From\",\n to: \"To\",\n upperInclusive: \"Includes upper bound\",\n count: \"Count\",\n q1: \"Lower quartile\",\n q2: \"Median\",\n q3: \"Upper quartile\",\n whiskerLow: \"Lower whisker\",\n whiskerHigh: \"Upper whisker\",\n min: \"Minimum\",\n max: \"Maximum\",\n threshold: \"Threshold\",\n delta: \"Change\",\n latitude: \"Latitude\",\n longitude: \"Longitude\",\n size: \"Size\",\n state: \"State\",\n duration: \"Duration\",\n detail: \"Detail\",\n errY: \"Y error\",\n errYHigh: \"Upper Y error\",\n errYLow: \"Lower Y error\",\n errX: \"X error\",\n errXHigh: \"Upper X error\",\n errXLow: \"Lower X error\",\n };\n return labels[key] ?? key;\n },\n interactiveMap: \"Interactive map\",\n interactiveTimeline: \"Interactive timeline\",\n series: \"Series\",\n resetMapView: \"Reset map view\",\n resetTimelineView: \"Reset timeline view\",\n },\n de: {\n chartView: \"Diagrammansicht\",\n chartDiagram: \"Diagramm\",\n chartData: \"Tabelle\",\n chartSeries: \"Sichtbare Datenreihen\",\n chartOnly: \"Nur diese\",\n chartShowAll: \"Alle anzeigen\",\n chartShowing: \"Angezeigt\",\n chartSelectedDatum: \"Ausgewählter Datenpunkt\",\n chartReference: \"Vergleich\",\n chartCurrent: \"Aktuell\",\n chartPinReference: \"Als Vergleich merken\",\n chartRemoveComparison: \"Vergleich entfernen\",\n chartPreviousData: \"Diagramm und Tabelle zeigen weiterhin die zuletzt geladenen Filter\",\n chartCopyData: \"Daten kopieren\",\n chartCopyFailed: \"Daten konnten nicht kopiert werden\",\n chartLegend: \"Legende\",\n chartRowsShown: ({ shown, total }: { shown: string; total: string }) =>\n `${shown} von ${total} Zeilen werden angezeigt. Sortiere, um andere zu sehen; „Daten kopieren“ kopiert alle.`,\n interactiveLineChart: \"Interaktives Liniendiagramm\",\n interactiveChart:\n \"Interaktives Diagramm. Pfeiltasten zum Erkunden, Enter zum Auswählen, Escape zum Schließen. In Karten und Zeitleisten Alt mit Pfeiltasten zum Erkunden.\",\n chartFields: ({ key }: { key: string }) => {\n const labels: Record<string, string> = {\n x: \"X\",\n y: \"Y\",\n value: \"Wert\",\n percent: \"Anteil\",\n total: \"Gesamt\",\n from: \"Von\",\n to: \"Bis\",\n upperInclusive: \"Obergrenze enthalten\",\n count: \"Anzahl\",\n q1: \"Unteres Quartil\",\n q2: \"Median\",\n q3: \"Oberes Quartil\",\n whiskerLow: \"Unterer Whisker\",\n whiskerHigh: \"Oberer Whisker\",\n min: \"Minimum\",\n max: \"Maximum\",\n threshold: \"Schwellenwert\",\n delta: \"Änderung\",\n latitude: \"Breitengrad\",\n longitude: \"Längengrad\",\n size: \"Größe\",\n state: \"Zustand\",\n duration: \"Dauer\",\n detail: \"Details\",\n errY: \"Y-Fehler\",\n errYHigh: \"Oberer Y-Fehler\",\n errYLow: \"Unterer Y-Fehler\",\n errX: \"X-Fehler\",\n errXHigh: \"Oberer X-Fehler\",\n errXLow: \"Unterer X-Fehler\",\n };\n return labels[key] ?? key;\n },\n interactiveMap: \"Interaktive Karte\",\n interactiveTimeline: \"Interaktive Zeitachse\",\n series: \"Datenreihe\",\n resetMapView: \"Kartenansicht zurücksetzen\",\n resetTimelineView: \"Zeitachsenansicht zurücksetzen\",\n },\n },\n});\n\nexport type ChartMessages = ReturnType<(typeof chartMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useChartMessages = (): (() => ChartMessages) => {\n const locale = useLocale();\n return () => chartMessages.resolve([locale()]).t;\n};\n\nexport const checkChartMessages = () => chartMessages.check();\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["content/index.ts"],"sourcesContent":["export type {\n CalendarAttendee,\n CalendarCustomView,\n CalendarDayBadge,\n CalendarEvent,\n CalendarEventColor,\n CalendarEventRenderContext,\n CalendarEventTimeChange,\n CalendarLabels,\n CalendarProps,\n CalendarQuickCreateControls,\n CalendarRecurrence,\n CalendarResource,\n CalendarSelectionControls,\n CalendarView,\n} from \"./Calendar\";\nexport { default as Calendar } from \"./Calendar\";\n\nexport type { ChartKind, ChartLabels, ChartProps, ChartRenderOptions } from \"./Chart\";\nexport { default as Chart } from \"./Chart\";\nexport type { ChartExplorerColumn, ChartExplorerProps } from \"./ChartExplorer\";\nexport { ChartExplorer } from \"./ChartExplorer\";\nexport type { ChartExplorerControlsProps } from \"./ChartExplorerControls\";\nexport { ChartExplorerControls } from \"./ChartExplorerControls\";\nexport { ChartFilterControls, type ChartFilterControlsProps } from \"./ChartFilterControls\";\nexport { ChartSnapshotView } from \"./ChartSnapshotView\";\nexport type { CodeDisplayLanguage, CodeDisplayProps } from \"./CodeDisplay\";\nexport { default as CodeDisplay } from \"./CodeDisplay\";\nexport { type ChartCursor, createChartCursor } from \"./chart-cursor\";\nexport type {\n ChartExplorerCharts,\n ChartExplorerController,\n ChartExplorerData,\n ChartExplorerOptions,\n ChartExplorerRequest,\n ChartExplorerRow,\n ChartExplorerSnapshot,\n} from \"./chart-explorer\";\nexport { createChartExplorer } from \"./chart-explorer\";\nexport type { ChartDatumRef, ChartSelection, ChartTooltip, ChartTooltipFormatter } from \"./chart-inspection\";\nexport type { ChartSnapshot } from \"./chart-snapshot\";\nexport { prepareChartSnapshot } from \"./chart-snapshot\";\nexport type {\n StateTimelineChartOptions,\n StateTimelineDomain,\n StateTimelineInterval,\n StateTimelineRow,\n StateTimelineState,\n} from \"./chart-state-timeline\";\nexport { type CollectionSelection, createCollectionSelection, type SelectionModifiers } from \"./collection-selection\";\nexport type {\n DataTableColumn,\n DataTableControlsProps,\n DataTableFooter,\n DataTableHeaderProps,\n DataTablePanelFooterProps,\n DataTablePanelProps,\n DataTableProps,\n DataTableRenderCell,\n DataTableRenderHeader,\n DataTableSort,\n} from \"./DataTable\";\nexport { default as DataTable } from \"./DataTable\";\nexport type { DocCodeHighlighter, DocCodeProps, DocConcept, DocNoteVariant, DocRow } from \"./Docs\";\nexport { DocCode, DocConceptGrid, DocInlineCode, DocLead, DocNote, DocPage, DocRows, DocSection } from \"./Docs\";\nexport { FileBrowserPanel, type FileBrowserPanelProps, type FileSource, openFileBrowser } from \"./FileBrowser\";\nexport { FileGrid, type FileGridProps } from \"./FileGrid\";\nexport { default as FileTree, type FileTreeActions, type FileTreeEntry, type FileTreeProps } from \"./FileTree\";\nexport {\n canPreviewFile,\n default as FileView,\n type FileViewContent,\n type FileViewFile,\n type FileViewPreviewKind,\n type FileViewProps,\n type FileViewRenderer,\n type FileViewRendererProps,\n formatFileViewSize,\n getFileViewPreviewKind,\n} from \"./FileView\";\nexport type { LightboxAction, LightboxImage } from \"./Lightbox\";\nexport { default as Lightbox } from \"./Lightbox\";\nexport type { LogTableEntry } from \"./LogEntriesTable\";\nexport { default as LogEntriesTable } from \"./LogEntriesTable\";\nexport { default as MarkdownView, type MarkdownRenderOptions, type MarkdownViewProps, renderSafeMarkdown } from \"./MarkdownView\";\nexport type {\n MessageGroupEntry,\n MessageRowAction,\n MessageRowAttachment,\n MessageRowAuthor,\n MessageRowFile,\n MessageRowMedia,\n MessageRowProgress,\n MessageRowProps,\n MessageRowQuote,\n MessageRowReaction,\n MessageRowStatus,\n MessageRowThread,\n MessageSystemRowProps,\n} from \"./MessageRow\";\nexport { MessageRow, MessageSystemRow, startsMessageGroup } from \"./MessageRow\";\nexport {\n type MarkdownInfoBlock,\n type MarkdownInfoBlockRenderInput,\n type MarkdownInfoBlockType,\n markdownInfoBlocks,\n renderMarkdownInfoBlock,\n scanMarkdownInfoBlock,\n} from \"./markdown-info-blocks\";\nexport {\n type MarkdownLinkInput,\n type MarkdownReference,\n type MarkdownReferenceKind,\n type MarkdownReferenceType,\n markdownLinkReference,\n markdownReferenceIcon,\n markdownReferenceType,\n markdownReferenceTypeLabel,\n markStandaloneLinks,\n renderMarkdownLink,\n} from \"./markdown-links\";\nexport { Pagination, type PaginationProps } from \"./Pagination\";\nexport type { PdfPreviewProps, PdfPreviewRequest } from \"./PdfPreview\";\nexport { default as PdfPreview } from \"./PdfPreview\";\nexport type { RangeOption, RangePickerProps } from \"./RangePicker\";\nexport { default as RangePicker } from \"./RangePicker\";\nexport type { StructuredDataPreviewMode, StructuredDataPreviewProps, StructuredDataValue } from \"./StructuredDataPreview\";\nexport { default as StructuredDataPreview, isStructuredDataValue } from \"./StructuredDataPreview\";\nexport type { TimelineColor, TimelineController, TimelineItem, TimelineProps } from \"./Timeline\";\nexport { default as Timeline } from \"./Timeline\";\nexport { VideoPlayer, type VideoPlayerProps } from \"./VideoPlayer\";\nexport type { VirtualFeedController, VirtualFeedProps, VirtualFeedScrollOptions } from \"./VirtualFeed\";\nexport { VirtualFeed } from \"./VirtualFeed\";\nexport type { ZoomPanAction, ZoomPanFullscreen, ZoomPanViewportProps } from \"./ZoomPanViewport\";\nexport { ZoomPanViewport } from \"./ZoomPanViewport\";\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":[],"sources":["content/index.ts"],"sourcesContent":["export type {\n CalendarAttendee,\n CalendarCommand,\n CalendarController,\n CalendarCustomView,\n CalendarDayBadge,\n CalendarEvent,\n CalendarEventColor,\n CalendarEventRenderContext,\n CalendarEventTimeChange,\n CalendarExternalDrag,\n CalendarLabels,\n CalendarProps,\n CalendarQuickCreateControls,\n CalendarRange,\n CalendarRecurrence,\n CalendarResource,\n CalendarSelectionControls,\n CalendarView,\n} from \"./Calendar\";\nexport { default as Calendar } from \"./Calendar\";\n\nexport type { ChartKind, ChartLabels, ChartProps, ChartRenderOptions } from \"./Chart\";\nexport { default as Chart } from \"./Chart\";\nexport type { ChartExplorerColumn, ChartExplorerProps, ChartLegendEntry } from \"./ChartExplorer\";\nexport { ChartExplorer } from \"./ChartExplorer\";\nexport type { ChartExplorerControlsProps } from \"./ChartExplorerControls\";\nexport { ChartExplorerControls } from \"./ChartExplorerControls\";\nexport { ChartFilterControls, type ChartFilterControlsProps } from \"./ChartFilterControls\";\nexport { ChartSnapshotView } from \"./ChartSnapshotView\";\nexport type { CodeDisplayLanguage, CodeDisplayProps } from \"./CodeDisplay\";\nexport { default as CodeDisplay } from \"./CodeDisplay\";\nexport { type ChartCursor, createChartCursor } from \"./chart-cursor\";\nexport type {\n ChartExplorerCharts,\n ChartExplorerController,\n ChartExplorerData,\n ChartExplorerOptions,\n ChartExplorerRequest,\n ChartExplorerRow,\n ChartExplorerSnapshot,\n} from \"./chart-explorer\";\nexport { createChartExplorer } from \"./chart-explorer\";\nexport type { ChartDatumRef, ChartSelection, ChartTooltip, ChartTooltipFormatter } from \"./chart-inspection\";\nexport type { ChartSnapshot } from \"./chart-snapshot\";\nexport { prepareChartSnapshot } from \"./chart-snapshot\";\nexport type {\n StateTimelineChartOptions,\n StateTimelineDomain,\n StateTimelineInterval,\n StateTimelineRow,\n StateTimelineState,\n} from \"./chart-state-timeline\";\nexport { type CollectionSelection, createCollectionSelection, type SelectionModifiers } from \"./collection-selection\";\nexport type {\n DataTableColumn,\n DataTableControlsProps,\n DataTableFooter,\n DataTableHeaderProps,\n DataTablePanelFooterProps,\n DataTablePanelProps,\n DataTableProps,\n DataTableRenderCell,\n DataTableRenderHeader,\n DataTableSort,\n} from \"./DataTable\";\nexport { default as DataTable } from \"./DataTable\";\nexport type { DocCodeHighlighter, DocCodeProps, DocConcept, DocNoteVariant, DocRow } from \"./Docs\";\nexport { DocCode, DocConceptGrid, DocInlineCode, DocLead, DocNote, DocPage, DocRows, DocSection } from \"./Docs\";\nexport { FileBrowserPanel, type FileBrowserPanelProps, type FileSource, openFileBrowser } from \"./FileBrowser\";\nexport { FileGrid, type FileGridProps } from \"./FileGrid\";\nexport { default as FileTree, type FileTreeActions, type FileTreeEntry, type FileTreeProps } from \"./FileTree\";\nexport {\n canPreviewFile,\n default as FileView,\n type FileViewContent,\n type FileViewFile,\n type FileViewPreviewKind,\n type FileViewProps,\n type FileViewRenderer,\n type FileViewRendererProps,\n formatFileViewSize,\n getFileViewPreviewKind,\n} from \"./FileView\";\nexport type { LightboxAction, LightboxImage } from \"./Lightbox\";\nexport { default as Lightbox } from \"./Lightbox\";\nexport type { LogTableEntry } from \"./LogEntriesTable\";\nexport { default as LogEntriesTable } from \"./LogEntriesTable\";\nexport { default as MarkdownView, type MarkdownRenderOptions, type MarkdownViewProps, renderSafeMarkdown } from \"./MarkdownView\";\nexport type {\n MessageGroupEntry,\n MessageRowAction,\n MessageRowAttachment,\n MessageRowAuthor,\n MessageRowFile,\n MessageRowMedia,\n MessageRowProgress,\n MessageRowProps,\n MessageRowQuote,\n MessageRowReaction,\n MessageRowStatus,\n MessageRowThread,\n MessageSystemRowProps,\n} from \"./MessageRow\";\nexport { MessageRow, MessageSystemRow, startsMessageGroup } from \"./MessageRow\";\nexport {\n type MarkdownInfoBlock,\n type MarkdownInfoBlockRenderInput,\n type MarkdownInfoBlockType,\n markdownInfoBlocks,\n renderMarkdownInfoBlock,\n scanMarkdownInfoBlock,\n} from \"./markdown-info-blocks\";\nexport {\n type MarkdownLinkInput,\n type MarkdownReference,\n type MarkdownReferenceKind,\n type MarkdownReferenceType,\n markdownLinkReference,\n markdownReferenceIcon,\n markdownReferenceType,\n markdownReferenceTypeLabel,\n markStandaloneLinks,\n renderMarkdownLink,\n} from \"./markdown-links\";\nexport { Pagination, type PaginationProps } from \"./Pagination\";\nexport type { PdfPreviewProps, PdfPreviewRequest } from \"./PdfPreview\";\nexport { default as PdfPreview } from \"./PdfPreview\";\nexport type { RangeOption, RangePickerProps } from \"./RangePicker\";\nexport { default as RangePicker } from \"./RangePicker\";\nexport type { StructuredDataPreviewMode, StructuredDataPreviewProps, StructuredDataValue } from \"./StructuredDataPreview\";\nexport { default as StructuredDataPreview, isStructuredDataValue } from \"./StructuredDataPreview\";\nexport type { TimelineColor, TimelineController, TimelineItem, TimelineProps } from \"./Timeline\";\nexport { default as Timeline } from \"./Timeline\";\nexport { VideoPlayer, type VideoPlayerProps } from \"./VideoPlayer\";\nexport type { VirtualFeedController, VirtualFeedProps, VirtualFeedScrollOptions } from \"./VirtualFeed\";\nexport { VirtualFeed } from \"./VirtualFeed\";\nexport type { ZoomPanAction, ZoomPanFullscreen, ZoomPanViewportProps } from \"./ZoomPanViewport\";\nexport { ZoomPanViewport } from \"./ZoomPanViewport\";\n"],"mappings":"AAoBA,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAGhD,SAAS,OAAO,IAAI,KAAK,QAAQ,SAAS;AAE1C,SAAS,aAAa,QAAQ,iBAAiB;AAE/C,SAAS,qBAAqB,QAAQ,yBAAyB;AAC/D,SAAS,mBAAmB,QAAuC,uBAAuB;AAC1F,SAAS,iBAAiB,QAAQ,qBAAqB;AAEvD,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AACtD,SAA2B,iBAAiB,QAAQ,gBAAgB;AAUpE,SAAS,mBAAmB,QAAQ,kBAAkB;AAGtD,SAAS,oBAAoB,QAAQ,kBAAkB;AAQvD,SAAmC,yBAAyB,QAAiC,wBAAwB;AAarH,SAAS,OAAO,IAAI,SAAS,QAAQ,aAAa;AAElD,SAAS,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,QAAQ,QAAQ;AAC/G,SAAS,gBAAgB,EAA+C,eAAe,QAAQ,eAAe;AAC9G,SAAS,QAAQ,QAA4B,YAAY;AACzD,SAAS,OAAO,IAAI,QAAQ,QAAsE,YAAY;AAC9G,SACE,cAAc,EACd,OAAO,IAAI,QAAQ,EAOnB,kBAAkB,EAClB,sBAAsB,QACjB,YAAY;AAEnB,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAEhD,SAAS,OAAO,IAAI,eAAe,QAAQ,mBAAmB;AAC9D,SAAS,OAAO,IAAI,YAAY,EAAsD,kBAAkB,QAAQ,gBAAgB;AAgBhI,SAAS,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,QAAQ,cAAc;AAC/E,SAIE,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,QAChB,wBAAwB;AAC/B,SAKE,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,QACb,kBAAkB;AACzB,SAAS,UAAU,QAA8B,cAAc;AAE/D,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAEpD,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AAEtD,SAAS,OAAO,IAAI,qBAAqB,EAAE,qBAAqB,QAAQ,yBAAyB;AAEjG,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAChD,SAAS,WAAW,QAA+B,eAAe;AAElE,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,eAAe,QAAQ,mBAAmB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["inputs/Combobox.tsx"],"sourcesContent":["import { createSignal, For, type JSX, Show } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { type ChoiceOption, createChoiceLoader, createChoicePopover, nextEnabledChoiceIndex } from \"./choice\";\nimport type { FieldProps, MaybeAccessor } from \"./field-contract\";\nimport { resolveMaybeAccessor } from \"./field-contract\";\nimport { useSelectMessages } from \"./select-messages\";\n\nexport type ComboboxOption = { id: string; label: string; description?: string; icon?: string };\nexport type ComboboxProps = FieldProps & {\n query?: MaybeAccessor<string>;\n onQueryChange?: (query: string) => void;\n placeholder?: string;\n fetchData: (query: string, signal: AbortSignal) => Promise<ComboboxOption[]>;\n onSelect: (option: ComboboxOption) => void;\n debounceMs?: number;\n};\n\nconst iconClass = (icon: string) => (icon.split(/\\s+/).includes(\"ti\") ? icon : `ti ${icon}`);\n\nexport function Combobox(props: ComboboxProps): JSX.Element {\n const messages = useUiMessages();\n const selectMessages = useSelectMessages();\n const meta = createFieldMeta(props.id);\n const listboxId = `${meta.controlId}-listbox`;\n const [localQuery, setLocalQuery] = createSignal(\"\");\n const query = () => resolveMaybeAccessor(props.query) ?? localQuery();\n const setQuery = (value: string) => {\n setLocalQuery(value);\n props.onQueryChange?.(value);\n };\n const error = () => resolveMaybeAccessor(props.error);\n const [focusedIndex, setFocusedIndex] = createSignal(-1);\n let inputRef: HTMLInputElement | undefined;\n let optionRefs: HTMLButtonElement[] = [];\n const loader = createChoiceLoader(\n () => async (value, signal) => (await props.fetchData(value, signal)).map((option) => ({ ...option, value: option.id })),\n // Cloud debounces at 200ms and then pads the response with a 200ms minimum\n // load time to stop the spinner flickering. The spinner here sits in the\n // chevron slot and stale results stay visible, so there is nothing to pad —\n // 150ms keeps typing responsive without hammering the loader.\n () => props.debounceMs ?? 150,\n );\n const popover = createChoicePopover(() => Boolean(props.disabled));\n const options = loader.options;\n const focusedOption = () => options()[focusedIndex()];\n const focus = (index: number) => {\n setFocusedIndex(index);\n optionRefs[index]?.scrollIntoView({ block: \"nearest\" });\n };\n /** `eager` loads the currently controlled query on open; typing supplies its\n * own query, so opening from `onInput` skips the duplicate request. */\n const open = (eager = true) => {\n if (props.disabled || popover.open()) return;\n popover.show();\n if (eager) loader.load(query(), true);\n focus(-1);\n };\n const reset = () => {\n loader.cancel();\n setQuery(\"\");\n focus(-1);\n };\n const close = () => {\n popover.hide();\n reset();\n };\n const select = (option: ChoiceOption<string>) => {\n popover.hide();\n props.onSelect({ id: option.value, label: option.label, description: option.description, icon: option.icon });\n reset();\n inputRef?.focus();\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n if (!popover.open()) open();\n else focus(nextEnabledChoiceIndex(options(), focusedIndex(), event.key === \"ArrowDown\" ? 1 : -1));\n } else if (event.key === \"Enter\" && popover.open() && options()[focusedIndex()]) {\n event.preventDefault();\n select(options()[focusedIndex()]!);\n } else if ((event.key === \"Escape\" || event.key === \"Tab\") && popover.open()) {\n // Escape is only ours while the list is open; otherwise it has to reach an\n // enclosing dialog or drawer.\n if (event.key === \"Escape\") event.preventDefault();\n close();\n }\n };\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={error()}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <div class=\"k2b-combobox\" data-invalid={error() ? \"true\" : undefined}>\n <div ref={popover.setTrigger} class=\"k2b-combobox__input\">\n <i class=\"ti ti-search\" aria-hidden=\"true\" />\n <input\n ref={(element) => {\n inputRef = element;\n }}\n id={meta.controlId}\n type=\"text\"\n value={query()}\n placeholder={props.placeholder ?? messages().search}\n disabled={props.disabled}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-expanded={popover.open()}\n aria-controls={listboxId}\n aria-activedescendant={focusedOption() ? `${listboxId}-${focusedIndex()}` : undefined}\n {...fieldControlAria(meta, props)}\n onFocus={() => open()}\n onClick={() => open()}\n onInput={(event) => {\n setQuery(event.currentTarget.value);\n open(false);\n loader.load(event.currentTarget.value);\n focus(-1);\n }}\n onKeyDown={onKeyDown}\n />\n <Show when={loader.loading()} fallback={<i class=\"ti ti-chevron-down\" aria-hidden=\"true\" />}>\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n </Show>\n </div>\n <div ref={popover.setPopover} popover=\"manual\" class=\"k2b-choice-popover\">\n <div class=\"k2b-choice-options\" role=\"listbox\" id={listboxId}>\n <Show when={loader.error()}>\n {(message) => (\n <div class=\"k2b-choice-status\" data-tone=\"danger\">\n <span>{message()}</span>\n <button type=\"button\" onClick={loader.retry}>\n {messages().retry}\n </button>\n </div>\n )}\n </Show>\n <For\n each={loader.error() ? [] : options()}\n fallback={\n <div class=\"k2b-choice-status\">{query().length >= 2 ? selectMessages().noResultsFound : selectMessages().typeToSearch}</div>\n }\n >\n {(option, index) => (\n <button\n ref={(element) => (optionRefs[index()] = element)}\n type=\"button\"\n id={`${listboxId}-${index()}`}\n class=\"k2b-choice-option\"\n role=\"option\"\n aria-selected={index() === focusedIndex()}\n data-focused={index() === focusedIndex() ? \"true\" : undefined}\n onPointerMove={() => focus(index())}\n onPointerDown={(event) => event.preventDefault()}\n onClick={() => select(option)}\n >\n <Show when={option.icon}>{(icon) => <i class={iconClass(icon())} aria-hidden=\"true\" />}</Show>\n <span>\n <strong>{option.label}</strong>\n <Show when={option.description}>{(description) => <small>{description()}</small>}</Show>\n </span>\n </button>\n )}\n </For>\n </div>\n </div>\n </div>\n </Field>\n );\n}\n\nexport default Combobox;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/Combobox.tsx"],"sourcesContent":["import { createSignal, For, type JSX, Show } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { type ChoiceOption, createChoiceLoader, createChoicePopover, nextEnabledChoiceIndex } from \"./choice\";\nimport type { FieldProps, MaybeAccessor } from \"./field-contract\";\nimport { resolveMaybeAccessor } from \"./field-contract\";\nimport { useSelectMessages } from \"./select-messages\";\n\nexport type ComboboxOption = { id: string; label: string; description?: string; icon?: string };\nexport type ComboboxProps = FieldProps & {\n query?: MaybeAccessor<string>;\n onQueryChange?: (query: string) => void;\n placeholder?: string;\n fetchData: (query: string, signal: AbortSignal) => Promise<ComboboxOption[]>;\n onSelect: (option: ComboboxOption) => void;\n debounceMs?: number;\n};\n\nconst iconClass = (icon: string) => (icon.split(/\\s+/).includes(\"ti\") ? icon : `ti ${icon}`);\n\nexport function Combobox(props: ComboboxProps): JSX.Element {\n const messages = useUiMessages();\n const selectMessages = useSelectMessages();\n const meta = createFieldMeta(props.id);\n const listboxId = `${meta.controlId}-listbox`;\n const [localQuery, setLocalQuery] = createSignal(\"\");\n const query = () => resolveMaybeAccessor(props.query) ?? localQuery();\n const setQuery = (value: string) => {\n setLocalQuery(value);\n props.onQueryChange?.(value);\n };\n const error = () => resolveMaybeAccessor(props.error);\n const [focusedIndex, setFocusedIndex] = createSignal(-1);\n let inputRef: HTMLInputElement | undefined;\n let optionRefs: HTMLButtonElement[] = [];\n const loader = createChoiceLoader(\n () => async (value, signal) => (await props.fetchData(value, signal)).map((option) => ({ ...option, value: option.id })),\n // Cloud debounces at 200ms and then pads the response with a 200ms minimum\n // load time to stop the spinner flickering. The spinner here sits in the\n // chevron slot and stale results stay visible, so there is nothing to pad —\n // 150ms keeps typing responsive without hammering the loader.\n () => props.debounceMs ?? 150,\n );\n const popover = createChoicePopover(() => Boolean(props.disabled));\n const options = loader.options;\n const focusedOption = () => options()[focusedIndex()];\n const focus = (index: number) => {\n setFocusedIndex(index);\n optionRefs[index]?.scrollIntoView({ block: \"nearest\" });\n };\n /** `eager` loads the currently controlled query on open; typing supplies its\n * own query, so opening from `onInput` skips the duplicate request. */\n const open = (eager = true) => {\n if (props.disabled || popover.open()) return;\n popover.show();\n if (eager) loader.load(query(), true);\n focus(-1);\n };\n const reset = () => {\n loader.cancel();\n setQuery(\"\");\n focus(-1);\n };\n const close = () => {\n popover.hide();\n reset();\n };\n const select = (option: ChoiceOption<string>) => {\n popover.hide();\n props.onSelect({ id: option.value, label: option.label, description: option.description, icon: option.icon });\n reset();\n inputRef?.focus();\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n if (!popover.open()) open();\n else focus(nextEnabledChoiceIndex(options(), focusedIndex(), event.key === \"ArrowDown\" ? 1 : -1));\n } else if (event.key === \"Enter\" && popover.open() && options()[focusedIndex()]) {\n event.preventDefault();\n select(options()[focusedIndex()]!);\n } else if ((event.key === \"Escape\" || event.key === \"Tab\") && popover.open()) {\n // Escape is only ours while the list is open; otherwise it has to reach an\n // enclosing dialog or drawer.\n if (event.key === \"Escape\") event.preventDefault();\n close();\n }\n };\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={error()}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <div class=\"k2b-combobox\" data-invalid={error() ? \"true\" : undefined}>\n <div ref={popover.setTrigger} class=\"k2b-combobox__input\">\n <i class=\"ti ti-search\" aria-hidden=\"true\" />\n {/* A click, typing, or an arrow key opens the list. Focus alone (Tab, a dialog's initial focus) does not, so Escape still closes the enclosing dialog. */}\n <input\n ref={(element) => {\n inputRef = element;\n }}\n id={meta.controlId}\n type=\"text\"\n value={query()}\n placeholder={props.placeholder ?? messages().search}\n disabled={props.disabled}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-expanded={popover.open()}\n aria-controls={listboxId}\n aria-activedescendant={focusedOption() ? `${listboxId}-${focusedIndex()}` : undefined}\n {...fieldControlAria(meta, props)}\n onClick={() => open()}\n onInput={(event) => {\n setQuery(event.currentTarget.value);\n open(false);\n loader.load(event.currentTarget.value);\n focus(-1);\n }}\n onKeyDown={onKeyDown}\n />\n <Show when={loader.loading()} fallback={<i class=\"ti ti-chevron-down\" aria-hidden=\"true\" />}>\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n </Show>\n </div>\n <div ref={popover.setPopover} popover=\"manual\" class=\"k2b-choice-popover\">\n <div class=\"k2b-choice-options\" role=\"listbox\" id={listboxId}>\n <Show when={loader.error()}>\n {(message) => (\n <div class=\"k2b-choice-status\" data-tone=\"danger\">\n <span>{message()}</span>\n <button type=\"button\" onClick={loader.retry}>\n {messages().retry}\n </button>\n </div>\n )}\n </Show>\n <For\n each={loader.error() ? [] : options()}\n fallback={\n <div class=\"k2b-choice-status\">{query().length >= 2 ? selectMessages().noResultsFound : selectMessages().typeToSearch}</div>\n }\n >\n {(option, index) => (\n <button\n ref={(element) => (optionRefs[index()] = element)}\n type=\"button\"\n id={`${listboxId}-${index()}`}\n class=\"k2b-choice-option\"\n role=\"option\"\n aria-selected={index() === focusedIndex()}\n data-focused={index() === focusedIndex() ? \"true\" : undefined}\n onPointerMove={() => focus(index())}\n onPointerDown={(event) => event.preventDefault()}\n onClick={() => select(option)}\n >\n <Show when={option.icon}>{(icon) => <i class={iconClass(icon())} aria-hidden=\"true\" />}</Show>\n <span>\n <strong>{option.label}</strong>\n <Show when={option.description}>{(description) => <small>{description()}</small>}</Show>\n </span>\n </button>\n )}\n </For>\n </div>\n </div>\n </div>\n </Field>\n );\n}\n\nexport default Combobox;\n"],"mappings":"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","ignoreList":[]}
|