@leonardaustin/ui 0.3.0 → 0.5.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/components/app-shell/AppShell.d.ts +4 -2
- package/dist/components/app-shell/AppShell.d.ts.map +1 -1
- package/dist/components/app-shell/Breadcrumbs.d.ts.map +1 -1
- package/dist/components/app-shell/MobileDrawer.d.ts +4 -2
- package/dist/components/app-shell/MobileDrawer.d.ts.map +1 -1
- package/dist/components/app-shell/TopBar.d.ts +5 -3
- package/dist/components/app-shell/TopBar.d.ts.map +1 -1
- package/dist/components/app-shell/navigation.d.ts +7 -2
- package/dist/components/app-shell/navigation.d.ts.map +1 -1
- package/dist/components/app-shell/types.d.ts +13 -1
- package/dist/components/app-shell/types.d.ts.map +1 -1
- package/dist/components/charts/AreaChart.d.ts +30 -7
- package/dist/components/charts/AreaChart.d.ts.map +1 -1
- package/dist/components/charts/BarChart.d.ts +25 -7
- package/dist/components/charts/BarChart.d.ts.map +1 -1
- package/dist/components/charts/DonutChart.d.ts +9 -4
- package/dist/components/charts/DonutChart.d.ts.map +1 -1
- package/dist/components/charts/RadarChart.d.ts +10 -4
- package/dist/components/charts/RadarChart.d.ts.map +1 -1
- package/dist/components/charts/RadialBarChart.d.ts +10 -4
- package/dist/components/charts/RadialBarChart.d.ts.map +1 -1
- package/dist/components/charts/SparkLine.d.ts +20 -2
- package/dist/components/charts/SparkLine.d.ts.map +1 -1
- package/dist/components/charts/StackedBarChart.d.ts +35 -0
- package/dist/components/charts/StackedBarChart.d.ts.map +1 -0
- package/dist/components/charts/VerticalBarChart.d.ts +26 -8
- package/dist/components/charts/VerticalBarChart.d.ts.map +1 -1
- package/dist/components/charts/chartUtils.d.ts +43 -0
- package/dist/components/charts/chartUtils.d.ts.map +1 -0
- package/dist/components/tables/ColumnPicker.d.ts +19 -2
- package/dist/components/tables/ColumnPicker.d.ts.map +1 -1
- package/dist/components/ui/Calendar.d.ts +174 -0
- package/dist/components/ui/Calendar.d.ts.map +1 -0
- package/dist/components/ui/Checkbox.d.ts +3 -1
- package/dist/components/ui/Checkbox.d.ts.map +1 -1
- package/dist/components/ui/CodeInput.d.ts +33 -0
- package/dist/components/ui/CodeInput.d.ts.map +1 -0
- package/dist/components/ui/DividerLabel.d.ts.map +1 -1
- package/dist/components/ui/MetricCard.d.ts +12 -1
- package/dist/components/ui/MetricCard.d.ts.map +1 -1
- package/dist/components/ui/PasswordRequirements.d.ts +13 -0
- package/dist/components/ui/PasswordRequirements.d.ts.map +1 -0
- package/dist/components/ui/QrCode.d.ts +33 -0
- package/dist/components/ui/QrCode.d.ts.map +1 -0
- package/dist/components/ui/StepProgress.d.ts.map +1 -1
- package/dist/components/ui/Tabs.d.ts.map +1 -1
- package/dist/components/ui/TextInput.d.ts.map +1 -1
- package/dist/components/ui/Tooltip.d.ts.map +1 -1
- package/dist/components/ui/calendar/AgendaView.d.ts +11 -0
- package/dist/components/ui/calendar/AgendaView.d.ts.map +1 -0
- package/dist/components/ui/calendar/MonthView.d.ts +10 -0
- package/dist/components/ui/calendar/MonthView.d.ts.map +1 -0
- package/dist/components/ui/calendar/TimeGrid.d.ts +11 -0
- package/dist/components/ui/calendar/TimeGrid.d.ts.map +1 -0
- package/dist/components/ui/calendar/TimelineView.d.ts +11 -0
- package/dist/components/ui/calendar/TimelineView.d.ts.map +1 -0
- package/dist/components/ui/calendar/context.d.ts +56 -0
- package/dist/components/ui/calendar/context.d.ts.map +1 -0
- package/dist/components/ui/calendar/items.d.ts +46 -0
- package/dist/components/ui/calendar/items.d.ts.map +1 -0
- package/dist/components/ui/calendar/types.d.ts +125 -0
- package/dist/components/ui/calendar/types.d.ts.map +1 -0
- package/dist/components/ui/calendar/useGridInteraction.d.ts +39 -0
- package/dist/components/ui/calendar/useGridInteraction.d.ts.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5910 -2089
- package/dist/lib/calendar.d.ts +305 -0
- package/dist/lib/calendar.d.ts.map +1 -0
- package/dist/lib/codeInput.d.ts +28 -0
- package/dist/lib/codeInput.d.ts.map +1 -0
- package/dist/lib/passwordRequirements.d.ts +12 -0
- package/dist/lib/passwordRequirements.d.ts.map +1 -0
- package/dist/lib/qrCode.d.ts +20 -0
- package/dist/lib/qrCode.d.ts.map +1 -0
- package/dist/styles.css +711 -0
- package/package.json +1 -1
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calendar — a Google-Calendar-style scheduler for bookings and availability.
|
|
3
|
+
*
|
|
4
|
+
* Views: day, 3-day, work week, week (default), month, agenda and a resource
|
|
5
|
+
* timeline. Pass `resources` to split time-grid columns per clinician/room.
|
|
6
|
+
* Availability blocks render as a background layer (time outside them is
|
|
7
|
+
* striped as busy); switch `editLayer` to "availability" to drag those instead of
|
|
8
|
+
* events.
|
|
9
|
+
*
|
|
10
|
+
* Fully controlled: the calendar never changes your data. Drag-to-create,
|
|
11
|
+
* move and resize (pointer or keyboard) call `onCreate`, `onEventChange` and
|
|
12
|
+
* `onAvailabilityChange`; apply the change to your state (or reject it in
|
|
13
|
+
* `validate`, which also drives the live drag preview).
|
|
14
|
+
*
|
|
15
|
+
* Times are local `Date`s on a wall-clock grid. See lib/calendar.ts for the
|
|
16
|
+
* timezone and DST notes.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* <Calendar
|
|
21
|
+
* events={bookings}
|
|
22
|
+
* availability={expandAvailabilityRules(rules, range)}
|
|
23
|
+
* resources={clinicians}
|
|
24
|
+
* slotDuration={15}
|
|
25
|
+
* onCreate={(sel) => openNewBooking(sel)}
|
|
26
|
+
* onEventChange={(change) => moveBooking(change)}
|
|
27
|
+
* onRangeChange={setRange}
|
|
28
|
+
* />
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
import { type ReactNode } from "react";
|
|
32
|
+
import { type CalendarAvailability, type CalendarEvent, type CalendarResource, type CalendarView, type Weekday } from "../../lib/calendar";
|
|
33
|
+
import { type CalendarAvailabilityChange, type CalendarDisplay, type CalendarDraft, type CalendarEventChange, type CalendarLabelOverrides, type CalendarRange, type CalendarRenderEvent, type CalendarSelection } from "./calendar/types";
|
|
34
|
+
export interface CalendarProps<T = unknown, A = unknown> {
|
|
35
|
+
/** Bookings/events to show. Filter them to the visible range for speed. */
|
|
36
|
+
events?: readonly CalendarEvent<T>[];
|
|
37
|
+
/**
|
|
38
|
+
* Availability and absence blocks, drawn behind events. Use
|
|
39
|
+
* `expandAvailabilityRules` to turn weekly rules into blocks. When provided,
|
|
40
|
+
* time no block covers is striped as busy (see `shadeOutsideAvailability`).
|
|
41
|
+
*/
|
|
42
|
+
availability?: readonly CalendarAvailability<A>[];
|
|
43
|
+
/**
|
|
44
|
+
* Resources (clinicians, rooms…). Time-grid views get one column per
|
|
45
|
+
* resource per day; the timeline gets one row each. Events need a matching
|
|
46
|
+
* `resourceId` to appear in resource views — add an "Unassigned" resource
|
|
47
|
+
* for events without one.
|
|
48
|
+
*/
|
|
49
|
+
resources?: readonly CalendarResource[];
|
|
50
|
+
/** Controlled view. */
|
|
51
|
+
view?: CalendarView;
|
|
52
|
+
/** Initial view when uncontrolled. Defaults to `week`. */
|
|
53
|
+
defaultView?: CalendarView;
|
|
54
|
+
onViewChange?: (view: CalendarView) => void;
|
|
55
|
+
/** Views offered by the toolbar switcher. */
|
|
56
|
+
views?: readonly CalendarView[];
|
|
57
|
+
/** Controlled anchor date (any time on the day to show). */
|
|
58
|
+
date?: Date;
|
|
59
|
+
/** Initial anchor date when uncontrolled. Defaults to today. */
|
|
60
|
+
defaultDate?: Date;
|
|
61
|
+
onDateChange?: (date: Date) => void;
|
|
62
|
+
/** Fires with the visible [start, end) range whenever it changes — fetch here. */
|
|
63
|
+
onRangeChange?: (range: CalendarRange) => void;
|
|
64
|
+
/** First day of the week. Defaults to 1 (Monday). */
|
|
65
|
+
weekStartsOn?: Weekday;
|
|
66
|
+
/** Days in the `workWeek` view. Defaults to Monday–Friday. */
|
|
67
|
+
workWeekDays?: readonly Weekday[];
|
|
68
|
+
/** Days in the `agenda` view. Defaults to 7. */
|
|
69
|
+
agendaDays?: number;
|
|
70
|
+
/** First visible time, "HH:mm". Defaults to "07:00". */
|
|
71
|
+
slotMinTime?: string;
|
|
72
|
+
/** Last visible time, "HH:mm" ("24:00" allowed). Defaults to "20:00". */
|
|
73
|
+
slotMaxTime?: string;
|
|
74
|
+
/** Snap step and keyboard step in minutes (5, 10, 15, 30…). Defaults to 15. */
|
|
75
|
+
slotDuration?: number;
|
|
76
|
+
/** Minutes between time labels. Defaults to 60. */
|
|
77
|
+
slotLabelInterval?: number;
|
|
78
|
+
/** Pixel height of one hour in time-grid views. Defaults to 48. */
|
|
79
|
+
hourHeight?: number;
|
|
80
|
+
/** Pixel width of one hour in the timeline. Defaults to 96. */
|
|
81
|
+
timelineHourWidth?: number;
|
|
82
|
+
/** Minimum width of a resource column. Defaults to 120. */
|
|
83
|
+
resourceMinWidth?: number;
|
|
84
|
+
/**
|
|
85
|
+
* Time to scroll to on mount, "HH:mm". Defaults to the earliest visible
|
|
86
|
+
* availability, else 08:00.
|
|
87
|
+
*/
|
|
88
|
+
scrollToTime?: string;
|
|
89
|
+
/**
|
|
90
|
+
* Where the scroll time lands: at the top (left in the timeline) of the
|
|
91
|
+
* visible hours, or in the middle. Defaults to "start".
|
|
92
|
+
*/
|
|
93
|
+
scrollAlign?: "start" | "center";
|
|
94
|
+
/** Current time for the now-line and "Today". Defaults to the live clock. */
|
|
95
|
+
now?: Date;
|
|
96
|
+
/** Show the current-time line. Defaults to true. */
|
|
97
|
+
nowIndicator?: boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Which layer the pointer edits. `events` (default): availability is a
|
|
100
|
+
* passive background. `availability`: blocks become draggable cards and
|
|
101
|
+
* events are dimmed.
|
|
102
|
+
*/
|
|
103
|
+
editLayer?: "events" | "availability";
|
|
104
|
+
/** Disable every create, move and resize. */
|
|
105
|
+
readOnly?: boolean;
|
|
106
|
+
/** Allow creating by drag/click on empty time. Defaults to `!!onCreate`. */
|
|
107
|
+
selectable?: boolean;
|
|
108
|
+
/** Length in minutes of a click (not drag) or keyboard create. Defaults to 30. */
|
|
109
|
+
clickCreateDuration?: number;
|
|
110
|
+
/**
|
|
111
|
+
* Stripe time no block covers as busy, like an absence. Defaults to true.
|
|
112
|
+
*/
|
|
113
|
+
shadeOutsideAvailability?: boolean;
|
|
114
|
+
/** Empty time was selected (drag, click, Enter, or a month-day click). */
|
|
115
|
+
onCreate?: (selection: CalendarSelection) => void;
|
|
116
|
+
onEventClick?: (event: CalendarEvent<T>) => void;
|
|
117
|
+
/** An event was moved or resized. Enables event dragging. */
|
|
118
|
+
onEventChange?: (change: CalendarEventChange<T>) => void;
|
|
119
|
+
onAvailabilityClick?: (availability: CalendarAvailability<A>) => void;
|
|
120
|
+
/**
|
|
121
|
+
* A block was moved or resized (in `editLayer="availability"`). For a
|
|
122
|
+
* recurring occurrence (`seriesId` set) ask whether it applies to this
|
|
123
|
+
* occurrence or the series.
|
|
124
|
+
*/
|
|
125
|
+
onAvailabilityChange?: (change: CalendarAvailabilityChange<A>) => void;
|
|
126
|
+
/**
|
|
127
|
+
* Return a reason to reject a proposed create/move/resize. Called while
|
|
128
|
+
* dragging (the preview shows the reason) and before each callback.
|
|
129
|
+
*/
|
|
130
|
+
validate?: (draft: CalendarDraft<T, A>) => string | null | undefined | void;
|
|
131
|
+
/**
|
|
132
|
+
* A change was dropped but `validate` rejected it. Keyboard, click and
|
|
133
|
+
* month-chip changes have no live drag preview, so this is their only
|
|
134
|
+
* feedback: wire it up (e.g. to a toast) whenever you pass `validate`.
|
|
135
|
+
*/
|
|
136
|
+
onInvalidChange?: (draft: CalendarDraft<T, A>, reason: string) => void;
|
|
137
|
+
/** A day header or month day number was clicked. Defaults to opening the day view. */
|
|
138
|
+
onDateClick?: (date: Date) => void;
|
|
139
|
+
/** Replace the contents of an event box. */
|
|
140
|
+
renderEvent?: CalendarRenderEvent<T>;
|
|
141
|
+
/** Rows per month cell before "+N more". Defaults to as many as fit. */
|
|
142
|
+
monthMaxEvents?: number;
|
|
143
|
+
/** List availability in the agenda view. Defaults to true. */
|
|
144
|
+
agendaShowAvailability?: boolean;
|
|
145
|
+
/**
|
|
146
|
+
* Text shown on boxes, chips and blocks outside the agenda, e.g.
|
|
147
|
+
* `{ time: false, status: false }`. Hidden text is removed, not replaced.
|
|
148
|
+
*/
|
|
149
|
+
display?: CalendarDisplay;
|
|
150
|
+
/**
|
|
151
|
+
* View used instead of multi-day time grids when the calendar is narrower
|
|
152
|
+
* than `narrowWidth`. Defaults to `day`; false keeps the chosen view.
|
|
153
|
+
*/
|
|
154
|
+
narrowView?: CalendarView | false;
|
|
155
|
+
/** Width in px below which `narrowView` applies. Defaults to 640. */
|
|
156
|
+
narrowWidth?: number;
|
|
157
|
+
/** Locale for dates and times. Defaults to "en-GB". */
|
|
158
|
+
locale?: string;
|
|
159
|
+
/** 12-hour clock. Defaults to false. */
|
|
160
|
+
hour12?: boolean;
|
|
161
|
+
/** Override any user-facing string. */
|
|
162
|
+
labels?: CalendarLabelOverrides;
|
|
163
|
+
/** Show the built-in toolbar. Defaults to true. */
|
|
164
|
+
toolbar?: boolean;
|
|
165
|
+
/** Extra toolbar content (filters, "New" button), before the view switcher. */
|
|
166
|
+
toolbarActions?: ReactNode;
|
|
167
|
+
/** Dim the calendar and show a spinner. */
|
|
168
|
+
loading?: boolean;
|
|
169
|
+
className?: string;
|
|
170
|
+
/** Accessible name for the calendar region. */
|
|
171
|
+
"aria-label"?: string;
|
|
172
|
+
}
|
|
173
|
+
export declare function Calendar<T = unknown, A = unknown>({ events, availability, resources, view: viewProp, defaultView, onViewChange, views, date: dateProp, defaultDate, onDateChange, onRangeChange, weekStartsOn, workWeekDays, agendaDays, slotMinTime, slotMaxTime, slotDuration, slotLabelInterval, hourHeight, timelineHourWidth, resourceMinWidth, scrollToTime, scrollAlign, now: nowProp, nowIndicator, editLayer, readOnly, selectable, clickCreateDuration, shadeOutsideAvailability, onCreate, onEventClick, onEventChange, onAvailabilityClick, onAvailabilityChange, validate, onInvalidChange, onDateClick, renderEvent, monthMaxEvents, agendaShowAvailability, display, narrowView, narrowWidth, locale, hour12, labels: labelOverrides, toolbar, toolbarActions, loading, className, "aria-label": ariaLabel, }: CalendarProps<T, A>): import("react/jsx-runtime").JSX.Element;
|
|
174
|
+
//# sourceMappingURL=Calendar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Calendar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
export interface CheckboxProps {
|
|
2
|
+
id?: string;
|
|
2
3
|
checked: boolean;
|
|
3
4
|
indeterminate?: boolean;
|
|
4
5
|
onChange: (checked: boolean) => void;
|
|
5
6
|
label?: string;
|
|
7
|
+
ariaLabel?: string;
|
|
6
8
|
disabled?: boolean;
|
|
7
9
|
className?: string;
|
|
8
10
|
}
|
|
9
|
-
export declare function Checkbox({ checked, indeterminate, onChange, label, disabled, className, }: CheckboxProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare function Checkbox({ id, checked, indeterminate, onChange, label, ariaLabel, disabled, className, }: CheckboxProps): import("react/jsx-runtime").JSX.Element;
|
|
10
12
|
//# sourceMappingURL=Checkbox.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Checkbox.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Checkbox.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EACvB,EAAE,EACF,OAAO,EACP,aAAa,EACb,QAAQ,EACR,KAAK,EACL,SAAS,EACT,QAAQ,EACR,SAAS,GACV,EAAE,aAAa,2CAgDf"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface CodeInputProps {
|
|
2
|
+
/**
|
|
3
|
+
* The digits entered so far (controlled). Boxes the user has cleared are
|
|
4
|
+
* left out, so `value.length === length` only when every box is filled.
|
|
5
|
+
*/
|
|
6
|
+
value: string;
|
|
7
|
+
onChange: (value: string) => void;
|
|
8
|
+
/**
|
|
9
|
+
* Called with the code whenever an edit leaves every box filled — use it
|
|
10
|
+
* to auto-submit. Fires again if the user then changes a digit.
|
|
11
|
+
*/
|
|
12
|
+
onComplete?: (value: string) => void;
|
|
13
|
+
/** Number of digit boxes. Only digits are accepted. */
|
|
14
|
+
length?: number;
|
|
15
|
+
/** Error message shown below the boxes; also marks them invalid. */
|
|
16
|
+
error?: string;
|
|
17
|
+
/** Marks the boxes invalid without a message (e.g. when it's shown elsewhere). */
|
|
18
|
+
invalid?: boolean;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
autoFocus?: boolean;
|
|
21
|
+
/** Submits the joined code under this name in a native form post. */
|
|
22
|
+
name?: string;
|
|
23
|
+
/** Accessible name for the group of boxes. */
|
|
24
|
+
"aria-label"?: string;
|
|
25
|
+
className?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A row of single-digit boxes for one-time codes (MFA, email verification).
|
|
29
|
+
* Handles typing, paste, SMS autofill, Backspace/Delete and arrow keys; each
|
|
30
|
+
* box keeps its position, so clearing one never shifts the others.
|
|
31
|
+
*/
|
|
32
|
+
export declare function CodeInput({ value, onChange, onComplete, length, error, invalid, disabled, autoFocus, name, "aria-label": ariaLabel, className, }: CodeInputProps): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
//# sourceMappingURL=CodeInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeInput.d.ts","sourceRoot":"","sources":["../../../src/components/ui/CodeInput.tsx"],"names":[],"mappings":"AAWA,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,UAAU,EACV,MAAU,EACV,KAAK,EACL,OAAO,EACP,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,YAAY,EAAE,SAA+B,EAC7C,SAAS,GACV,EAAE,cAAc,2CAkGhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DividerLabel.d.ts","sourceRoot":"","sources":["../../../src/components/ui/DividerLabel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"DividerLabel.d.ts","sourceRoot":"","sources":["../../../src/components/ui/DividerLabel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,iBAAiB,2CAQtE"}
|
|
@@ -3,10 +3,21 @@ export interface MetricCardProps {
|
|
|
3
3
|
label: string;
|
|
4
4
|
value: string | number;
|
|
5
5
|
sub?: string;
|
|
6
|
+
/**
|
|
7
|
+
* Optional trend indicator rendered below the value. `value` is the change
|
|
8
|
+
* string (e.g. "+12.5%"), `label` is the supporting context (e.g. "vs last
|
|
9
|
+
* week"), and `tone` controls the color of the change: positive (green),
|
|
10
|
+
* negative (red), or neutral (muted).
|
|
11
|
+
*/
|
|
12
|
+
trend?: {
|
|
13
|
+
label: string;
|
|
14
|
+
tone: "negative" | "neutral" | "positive";
|
|
15
|
+
value: string;
|
|
16
|
+
};
|
|
6
17
|
bar?: number;
|
|
7
18
|
icon?: ElementType;
|
|
8
19
|
iconColor?: string;
|
|
9
20
|
className?: string;
|
|
10
21
|
}
|
|
11
|
-
export declare function MetricCard({ label, value, sub, bar, icon: Icon, iconColor, className, }: MetricCardProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export declare function MetricCard({ label, value, sub, trend, bar, icon: Icon, iconColor, className, }: MetricCardProps): import("react/jsx-runtime").JSX.Element;
|
|
12
23
|
//# sourceMappingURL=MetricCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricCard.d.ts","sourceRoot":"","sources":["../../../src/components/ui/MetricCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAIzC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,GAAG,EACH,GAAG,EACH,IAAI,EAAE,IAAI,EACV,SAAS,EACT,SAAS,GACV,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"MetricCard.d.ts","sourceRoot":"","sources":["../../../src/components/ui/MetricCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAIzC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;QAC1C,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,GAAG,EACH,KAAK,EACL,GAAG,EACH,IAAI,EAAE,IAAI,EACV,SAAS,EACT,SAAS,GACV,EAAE,eAAe,2CAkDjB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type PasswordRequirement } from "../../lib/passwordRequirements";
|
|
2
|
+
export interface PasswordRequirementsProps {
|
|
3
|
+
/** The password to check against each rule. */
|
|
4
|
+
password: string;
|
|
5
|
+
/** Rules to list, each with a unique label. Defaults to `defaultPasswordRequirements`. */
|
|
6
|
+
requirements?: readonly PasswordRequirement[];
|
|
7
|
+
/** Keep the list visible while the password is empty. */
|
|
8
|
+
showWhenEmpty?: boolean;
|
|
9
|
+
className?: string;
|
|
10
|
+
}
|
|
11
|
+
/** A live checklist of password rules, ticked off as the user types. */
|
|
12
|
+
export declare function PasswordRequirements({ password, requirements, showWhenEmpty, className, }: PasswordRequirementsProps): import("react/jsx-runtime").JSX.Element | null;
|
|
13
|
+
//# sourceMappingURL=PasswordRequirements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PasswordRequirements.d.ts","sourceRoot":"","sources":["../../../src/components/ui/PasswordRequirements.tsx"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,gCAAgC,CAAC;AAExC,MAAM,WAAW,yBAAyB;IACxC,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,0FAA0F;IAC1F,YAAY,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC9C,yDAAyD;IACzD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wEAAwE;AACxE,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,YAA0C,EAC1C,aAAqB,EACrB,SAAS,GACV,EAAE,yBAAyB,kDA+B3B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import { type QrErrorCorrection } from "../../lib/qrCode";
|
|
3
|
+
export interface QrCodeProps {
|
|
4
|
+
/**
|
|
5
|
+
* Text to encode, e.g. a URL or an `otpauth://` URI for authenticator apps.
|
|
6
|
+
* An empty string renders nothing.
|
|
7
|
+
*/
|
|
8
|
+
value: string;
|
|
9
|
+
/**
|
|
10
|
+
* How much of the code can be damaged and still scan: L ≈ 7%, M ≈ 15%,
|
|
11
|
+
* Q ≈ 25%, H ≈ 30%. Higher levels produce denser codes.
|
|
12
|
+
*/
|
|
13
|
+
errorCorrection?: QrErrorCorrection;
|
|
14
|
+
/** Rendered width and height in pixels. */
|
|
15
|
+
size?: number;
|
|
16
|
+
/** Light border around the code, in modules. The spec asks for 4. */
|
|
17
|
+
margin?: number;
|
|
18
|
+
/** Accessible description of what the code contains. */
|
|
19
|
+
"aria-label"?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Rendered instead when `value` is too long to fit in a QR code at this
|
|
22
|
+
* error-correction level (2,953 bytes at L down to 1,273 at H).
|
|
23
|
+
*/
|
|
24
|
+
fallback?: ReactNode;
|
|
25
|
+
className?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A scannable QR code rendered as crisp SVG, with no runtime dependencies.
|
|
29
|
+
* Colours come from `--qr-foreground` / `--qr-background` so it stays
|
|
30
|
+
* dark-on-light in every theme.
|
|
31
|
+
*/
|
|
32
|
+
export declare function QrCode({ value, errorCorrection, size, margin, "aria-label": ariaLabel, fallback, className, }: QrCodeProps): import("react/jsx-runtime").JSX.Element | null;
|
|
33
|
+
//# sourceMappingURL=QrCode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QrCode.d.ts","sourceRoot":"","sources":["../../../src/components/ui/QrCode.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGhD,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,eAAe,CAAC,EAAE,iBAAiB,CAAC;IACpC,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,eAAqB,EACrB,IAAU,EACV,MAAU,EACV,YAAY,EAAE,SAAqB,EACnC,QAAe,EACf,SAAS,GACV,EAAE,WAAW,kDA0Cb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepProgress.d.ts","sourceRoot":"","sources":["../../../src/components/ui/StepProgress.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,SAAS,GACV,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"StepProgress.d.ts","sourceRoot":"","sources":["../../../src/components/ui/StepProgress.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,SAAS,GACV,EAAE,iBAAiB,2CAsDnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIhE,UAAU,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,UAAU,EACV,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIhE,UAAU,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,UAAU,EACV,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE,SAAS,2CA8EX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextInput.d.ts","sourceRoot":"","sources":["../../../src/components/ui/TextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,mBAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI7E,UAAU,cAAe,SAAQ,mBAAmB,CAAC,gBAAgB,CAAC;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,eAAO,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"TextInput.d.ts","sourceRoot":"","sources":["../../../src/components/ui/TextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,mBAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI7E,UAAU,cAAe,SAAQ,mBAAmB,CAAC,gBAAgB,CAAC;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,eAAO,MAAM,SAAS,6GAoErB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,KAAK,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAErD,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAaD,wBAAgB,OAAO,CAAC,EACtB,OAAO,EACP,SAAiB,EACjB,QAAQ,GACT,EAAE,YAAY,2CAqCd"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type CalendarAvailability, type CalendarEvent } from "../../../lib/calendar";
|
|
2
|
+
interface AgendaViewProps {
|
|
3
|
+
days: Date[];
|
|
4
|
+
events: readonly CalendarEvent[];
|
|
5
|
+
availability: readonly CalendarAvailability[];
|
|
6
|
+
label: string;
|
|
7
|
+
}
|
|
8
|
+
/** A printable list of days, each with its events (and availability). */
|
|
9
|
+
export declare function AgendaView({ days, events, availability, label, }: AgendaViewProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=AgendaView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgendaView.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/calendar/AgendaView.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAI/B,UAAU,eAAe;IACvB,IAAI,EAAE,IAAI,EAAE,CAAC;IACb,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IACjC,YAAY,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;CACf;AAMD,yEAAyE;AACzE,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,KAAK,GACN,EAAE,eAAe,2CAwFjB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type CalendarAvailability, type CalendarEvent } from "../../../lib/calendar";
|
|
2
|
+
interface MonthViewProps {
|
|
3
|
+
date: Date;
|
|
4
|
+
events: readonly CalendarEvent[];
|
|
5
|
+
availability: readonly CalendarAvailability[];
|
|
6
|
+
label: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function MonthView({ date, events, availability, label, }: MonthViewProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=MonthView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MonthView.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/calendar/MonthView.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAgBL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAK/B,UAAU,cAAc;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IACjC,YAAY,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;CACf;AAyBD,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,KAAK,GACN,EAAE,cAAc,2CAgehB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type CalendarAvailability, type CalendarEvent } from "../../../lib/calendar";
|
|
2
|
+
interface TimeGridProps {
|
|
3
|
+
days: Date[];
|
|
4
|
+
events: readonly CalendarEvent[];
|
|
5
|
+
availability: readonly CalendarAvailability[];
|
|
6
|
+
/** Accessible name for the grid, e.g. the toolbar title. */
|
|
7
|
+
label: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function TimeGrid({ days, events, availability, label }: TimeGridProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=TimeGrid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimeGrid.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/calendar/TimeGrid.tsx"],"names":[],"mappings":"AAUA,OAAO,EAcL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAEnB,MAAM,uBAAuB,CAAC;AAM/B,UAAU,aAAa;IACrB,IAAI,EAAE,IAAI,EAAE,CAAC;IACb,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IACjC,YAAY,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC9C,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;CACf;AAyCD,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,aAAa,2CAokB5E"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type CalendarAvailability, type CalendarEvent } from "../../../lib/calendar";
|
|
2
|
+
interface TimelineViewProps {
|
|
3
|
+
day: Date;
|
|
4
|
+
events: readonly CalendarEvent[];
|
|
5
|
+
availability: readonly CalendarAvailability[];
|
|
6
|
+
label: string;
|
|
7
|
+
}
|
|
8
|
+
/** One day, one horizontal row per resource, grouped by `resource.group`. */
|
|
9
|
+
export declare function TimelineView({ day, events, availability, label, }: TimelineViewProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=TimelineView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimelineView.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/calendar/TimelineView.tsx"],"names":[],"mappings":"AAWA,OAAO,EASL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAEnB,MAAM,uBAAuB,CAAC;AAM/B,UAAU,iBAAiB;IACzB,GAAG,EAAE,IAAI,CAAC;IACV,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IACjC,YAAY,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;CACf;AA+BD,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,EAC3B,GAAG,EACH,MAAM,EACN,YAAY,EACZ,KAAK,GACN,EAAE,iBAAiB,2CAkdnB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { CalendarAvailability, CalendarColor, CalendarEvent, CalendarResource, CalendarView, TimeBounds, Weekday } from "../../../lib/calendar";
|
|
2
|
+
import type { CalendarDisplay, CalendarDraft, CalendarLabels, CalendarRenderEvent } from "./types";
|
|
3
|
+
/** Resolved configuration shared by every calendar view (internal). */
|
|
4
|
+
export interface CalendarContextValue {
|
|
5
|
+
view: CalendarView;
|
|
6
|
+
locale: string;
|
|
7
|
+
hour12: boolean;
|
|
8
|
+
weekStartsOn: Weekday;
|
|
9
|
+
now: Date;
|
|
10
|
+
nowIndicator: boolean;
|
|
11
|
+
labels: CalendarLabels;
|
|
12
|
+
/** Id of the hidden element describing item keyboard controls. */
|
|
13
|
+
itemHelpId: string;
|
|
14
|
+
resources: readonly CalendarResource[];
|
|
15
|
+
resourceById: Map<string, CalendarResource>;
|
|
16
|
+
/** Snap step in minutes. */
|
|
17
|
+
step: number;
|
|
18
|
+
bounds: TimeBounds;
|
|
19
|
+
hourHeight: number;
|
|
20
|
+
slotLabelInterval: number;
|
|
21
|
+
timelineHourWidth: number;
|
|
22
|
+
resourceMinWidth: number;
|
|
23
|
+
editLayer: "events" | "availability";
|
|
24
|
+
selectable: boolean;
|
|
25
|
+
clickCreateDuration: number;
|
|
26
|
+
hasAvailability: boolean;
|
|
27
|
+
shadeOutsideAvailability: boolean;
|
|
28
|
+
/** Undefined = fit to the cell height. */
|
|
29
|
+
monthMaxEvents?: number;
|
|
30
|
+
agendaShowAvailability: boolean;
|
|
31
|
+
/** Text shown in the grid, month and timeline (not the agenda). */
|
|
32
|
+
display: Required<CalendarDisplay>;
|
|
33
|
+
scrollToMinute?: number;
|
|
34
|
+
scrollAlign: "start" | "center";
|
|
35
|
+
canEditEvent: (event: CalendarEvent) => boolean;
|
|
36
|
+
canEditBlock: (block: CalendarAvailability) => boolean;
|
|
37
|
+
eventColor: (event: CalendarEvent) => CalendarColor;
|
|
38
|
+
blockColor: (block: CalendarAvailability) => CalendarColor;
|
|
39
|
+
statusLabel: (event: CalendarEvent) => string | undefined;
|
|
40
|
+
describeEvent: (event: CalendarEvent) => string;
|
|
41
|
+
describeBlock: (block: CalendarAvailability) => string;
|
|
42
|
+
renderEvent?: CalendarRenderEvent<unknown>;
|
|
43
|
+
hasEventClick: boolean;
|
|
44
|
+
hasBlockClick: boolean;
|
|
45
|
+
clickEvent: (event: CalendarEvent) => void;
|
|
46
|
+
clickBlock: (block: CalendarAvailability) => void;
|
|
47
|
+
/** Returns a rejection reason for a draft, if any. */
|
|
48
|
+
check: (draft: CalendarDraft) => string | undefined;
|
|
49
|
+
/** Validates and emits a draft. Returns false when it was rejected. */
|
|
50
|
+
commit: (draft: CalendarDraft, source: "pointer" | "keyboard") => boolean;
|
|
51
|
+
/** Opens a day (header or month-cell click). */
|
|
52
|
+
openDay: (date: Date) => void;
|
|
53
|
+
}
|
|
54
|
+
export declare const CalendarContext: import("react").Context<CalendarContextValue | null>;
|
|
55
|
+
export declare function useCalendarContext(): CalendarContextValue;
|
|
56
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/calendar/context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,OAAO,EACR,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,cAAc,EACd,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAEjB,uEAAuE;AACvE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,GAAG,EAAE,IAAI,CAAC;IACV,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;IACvB,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACvC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC5C,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,QAAQ,GAAG,cAAc,CAAC;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,wBAAwB,EAAE,OAAO,CAAC;IAClC,0CAA0C;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sBAAsB,EAAE,OAAO,CAAC;IAChC,mEAAmE;IACnE,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,OAAO,GAAG,QAAQ,CAAC;IAChC,YAAY,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;IAChD,YAAY,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,OAAO,CAAC;IACvD,UAAU,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,aAAa,CAAC;IACpD,UAAU,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,aAAa,CAAC;IAC3D,WAAW,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1D,aAAa,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,MAAM,CAAC;IAChD,aAAa,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,MAAM,CAAC;IACvD,WAAW,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC3C,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3C,UAAU,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAClD,sDAAsD;IACtD,KAAK,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,MAAM,GAAG,SAAS,CAAC;IACpD,uEAAuE;IACvE,MAAM,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,GAAG,UAAU,KAAK,OAAO,CAAC;IAC1E,gDAAgD;IAChD,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;CAC/B;AAED,eAAO,MAAM,eAAe,sDAAmD,CAAC;AAEhF,wBAAgB,kBAAkB,IAAI,oBAAoB,CAIzD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { CSSProperties, KeyboardEvent, MouseEvent } from "react";
|
|
2
|
+
import { type CalendarAvailability, type CalendarEvent } from "../../../lib/calendar";
|
|
3
|
+
import type { CalendarDraft } from "./types";
|
|
4
|
+
interface EventBoxProps {
|
|
5
|
+
event: CalendarEvent;
|
|
6
|
+
style: CSSProperties;
|
|
7
|
+
/** Resize handle edge, or none. */
|
|
8
|
+
resizeEdge?: "bottom" | "right";
|
|
9
|
+
compact: boolean;
|
|
10
|
+
/** Title plus one time · status line (timeline rows). */
|
|
11
|
+
dense?: boolean;
|
|
12
|
+
continuesBefore?: boolean;
|
|
13
|
+
continuesAfter?: boolean;
|
|
14
|
+
dragging?: boolean;
|
|
15
|
+
onKeyDown?: (e: KeyboardEvent<HTMLElement>) => void;
|
|
16
|
+
/**
|
|
17
|
+
* Click handler. Boxes inside the pointer-handled grid only need it for
|
|
18
|
+
* assistive-technology activation (a synthetic click, `detail === 0`).
|
|
19
|
+
*/
|
|
20
|
+
onClick?: (e: MouseEvent<HTMLElement>) => void;
|
|
21
|
+
}
|
|
22
|
+
/** A positioned event in the time grid, all-day row or timeline. */
|
|
23
|
+
export declare function EventBox({ event, style, resizeEdge, compact, dense, continuesBefore, continuesAfter, dragging, onKeyDown, onClick, }: EventBoxProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
interface BlockBoxProps {
|
|
25
|
+
block: CalendarAvailability;
|
|
26
|
+
style: CSSProperties;
|
|
27
|
+
resizeEdge?: "bottom" | "right";
|
|
28
|
+
continuesAfter?: boolean;
|
|
29
|
+
dragging?: boolean;
|
|
30
|
+
onKeyDown?: (e: KeyboardEvent<HTMLElement>) => void;
|
|
31
|
+
/** Like `EventBox`'s `onClick`. */
|
|
32
|
+
onClick?: (e: MouseEvent<HTMLElement>) => void;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* An availability block. In the events layer it's a passive background tint;
|
|
36
|
+
* with `editLayer="availability"` it becomes a focusable, draggable card.
|
|
37
|
+
*/
|
|
38
|
+
export declare function BlockBox({ block, style, resizeEdge, continuesAfter, dragging, onKeyDown, onClick, }: BlockBoxProps): import("react/jsx-runtime").JSX.Element | null;
|
|
39
|
+
/** Drag preview: the proposed time, or why it's not allowed. */
|
|
40
|
+
export declare function Ghost({ draft, invalid, style, }: {
|
|
41
|
+
draft: CalendarDraft;
|
|
42
|
+
invalid?: string;
|
|
43
|
+
style: CSSProperties;
|
|
44
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=items.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/calendar/items.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEtE,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,UAAU,aAAa;IACrB,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,aAAa,CAAC;IACrB,mCAAmC;IACnC,UAAU,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACpD;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;CAChD;AAED,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,KAAK,EACL,UAAU,EACV,OAAO,EACP,KAAK,EACL,eAAe,EACf,cAAc,EACd,QAAQ,EACR,SAAS,EACT,OAAO,GACR,EAAE,aAAa,2CAwEf;AAmDD,UAAU,aAAa;IACrB,KAAK,EAAE,oBAAoB,CAAC;IAC5B,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAChC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACpD,mCAAmC;IACnC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;CAChD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,KAAK,EACL,UAAU,EACV,cAAc,EACd,QAAQ,EACR,SAAS,EACT,OAAO,GACR,EAAE,aAAa,kDAkDf;AAED,gEAAgE;AAChE,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,OAAO,EACP,KAAK,GACN,EAAE;IACD,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;CACtB,2CAsBA"}
|