@medplum/react-scheduling 5.1.39 → 5.1.40
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/cjs/index.cjs +5 -2
- package/dist/cjs/index.cjs.map +4 -4
- package/dist/cjs/index.css +1 -1
- package/dist/cjs/index.css.map +4 -4
- package/dist/cjs/index.d.ts +217 -24
- package/dist/esm/index.css +1 -1
- package/dist/esm/index.css.map +4 -4
- package/dist/esm/index.d.ts +217 -24
- package/dist/esm/index.mjs +5 -2
- package/dist/esm/index.mjs.map +4 -4
- package/package.json +12 -12
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { Appointment } from '@medplum/fhirtypes';
|
|
2
|
+
import type { Bundle } from '@medplum/fhirtypes';
|
|
2
3
|
import type { Coding } from '@medplum/fhirtypes';
|
|
3
4
|
import type { Dereference } from '@medplum/core';
|
|
5
|
+
import type { Extension } from '@medplum/fhirtypes';
|
|
4
6
|
import type { HealthcareService } from '@medplum/fhirtypes';
|
|
5
7
|
import type { HealthcareServiceAvailableTime } from '@medplum/fhirtypes';
|
|
6
8
|
import type { JSX } from 'react';
|
|
@@ -122,16 +124,12 @@ export declare interface AppointmentActorSelectProps {
|
|
|
122
124
|
}
|
|
123
125
|
|
|
124
126
|
/** What a booking wrote, as `Appointment/$book` returned it. */
|
|
125
|
-
export declare
|
|
126
|
-
readonly appointment: WithId<Appointment>;
|
|
127
|
-
/** The times reserved for it, one per schedule it is held on. */
|
|
128
|
-
readonly slots: readonly WithId<Slot>[];
|
|
129
|
-
}
|
|
127
|
+
export declare type AppointmentBooking = AppointmentWrite;
|
|
130
128
|
|
|
131
129
|
/**
|
|
132
130
|
* The booking form, writing the booking itself.
|
|
133
131
|
*
|
|
134
|
-
* Wraps {@link AppointmentProposalForm}:
|
|
132
|
+
* Wraps {@link AppointmentProposalForm}: writes the booking, announces the
|
|
135
133
|
* appointment and every time it reserved so views reading them refresh, then
|
|
136
134
|
* reports what was written through `onBooked` — the only required prop.
|
|
137
135
|
*
|
|
@@ -142,7 +140,7 @@ export declare interface AppointmentBooking {
|
|
|
142
140
|
*/
|
|
143
141
|
export declare function AppointmentBookingForm(props: AppointmentBookingFormProps): JSX.Element;
|
|
144
142
|
|
|
145
|
-
export declare interface AppointmentBookingFormProps extends Omit<AppointmentProposalFormProps, '
|
|
143
|
+
export declare interface AppointmentBookingFormProps extends Omit<AppointmentProposalFormProps, 'onSubmit' | 'mode' | 'ignoreAppointment'> {
|
|
146
144
|
/**
|
|
147
145
|
* Called with what the booking wrote.
|
|
148
146
|
*
|
|
@@ -201,12 +199,13 @@ export declare interface AppointmentOptionRowProps {
|
|
|
201
199
|
|
|
202
200
|
/**
|
|
203
201
|
* Gathers what a visit is held on, finds a time every one of them is free, and
|
|
204
|
-
* hands the proposal out to be
|
|
202
|
+
* hands the proposal out to be written.
|
|
205
203
|
*
|
|
206
|
-
* Writes nothing and announces nothing: `
|
|
204
|
+
* Writes nothing and announces nothing: `onSubmit` owns that. Mount this to do
|
|
207
205
|
* something other than `$book` with the proposal — hold it through `$hold`, or
|
|
208
206
|
* write it inside a transaction of your own. {@link AppointmentBookingForm} is the
|
|
209
|
-
* one that books
|
|
207
|
+
* one that books, and {@link AppointmentRescheduleForm} the one that moves a visit
|
|
208
|
+
* already on file.
|
|
210
209
|
*
|
|
211
210
|
* @param props - The React props.
|
|
212
211
|
* @returns The form.
|
|
@@ -214,6 +213,8 @@ export declare interface AppointmentOptionRowProps {
|
|
|
214
213
|
export declare function AppointmentProposalForm(props: AppointmentProposalFormProps): JSX.Element;
|
|
215
214
|
|
|
216
215
|
export declare interface AppointmentProposalFormProps {
|
|
216
|
+
/** What the proposal is for. Defaults to booking a new visit. */
|
|
217
|
+
readonly mode?: AppointmentProposalMode;
|
|
217
218
|
/** Pre-fills where the visit is, for a host that already knows. */
|
|
218
219
|
readonly defaultLocation?: WithId<Location_2>;
|
|
219
220
|
/** Pre-fills the visit type, for a deep link or a reschedule. */
|
|
@@ -221,9 +222,23 @@ export declare interface AppointmentProposalFormProps {
|
|
|
221
222
|
/** Pre-fills who the visit is for, for a host launching from a patient's chart. */
|
|
222
223
|
readonly defaultPatient?: WithId<Patient>;
|
|
223
224
|
/**
|
|
224
|
-
*
|
|
225
|
+
* Pre-fills who and what the visit is held on, for a host that already knows — the
|
|
226
|
+
* actors an appointment being moved is currently held on, say.
|
|
227
|
+
*
|
|
228
|
+
* Read once, at mount: the fields own what they are asked for afterwards.
|
|
229
|
+
*/
|
|
230
|
+
readonly defaultSelections?: ActorSelections;
|
|
231
|
+
/**
|
|
232
|
+
* An appointment whose own times are not to count as taken.
|
|
225
233
|
*
|
|
226
|
-
*
|
|
234
|
+
* For a form searching on behalf of an appointment that already exists: without it,
|
|
235
|
+
* the time it holds blocks every search that keeps any of the actors holding it, and
|
|
236
|
+
* moving a visit to a different room at the same hour finds nothing.
|
|
237
|
+
*/
|
|
238
|
+
readonly ignoreAppointment?: Reference<Appointment> | WithId<Appointment>;
|
|
239
|
+
/**
|
|
240
|
+
* The day the time search opens on, and the day a typed time starts out on.
|
|
241
|
+
* Defaults to today.
|
|
227
242
|
*/
|
|
228
243
|
readonly defaultStart?: Date;
|
|
229
244
|
/**
|
|
@@ -256,12 +271,78 @@ export declare interface AppointmentProposalFormProps {
|
|
|
256
271
|
/** The ValueSet the diagnosis code field binds to. Defaults to the full ICD-10-CM value set. */
|
|
257
272
|
readonly diagnosisBinding?: string;
|
|
258
273
|
/**
|
|
259
|
-
*
|
|
274
|
+
* Writes the proposal the form assembled.
|
|
260
275
|
*
|
|
261
|
-
* Resolving marks the form
|
|
262
|
-
* changes; rejecting shows the reason as the
|
|
276
|
+
* Resolving marks the form written, so it stops offering to write until an answer
|
|
277
|
+
* changes; rejecting shows the reason as the write's refusal, every answer kept.
|
|
278
|
+
*
|
|
279
|
+
* In `book` mode the proposal carries the patient and the visit type's required
|
|
280
|
+
* codes; in `reschedule` mode it is the time as `$find` offered it, untouched.
|
|
281
|
+
*/
|
|
282
|
+
readonly onSubmit: (proposal: Appointment, options: BookOptions) => void | Promise<void>;
|
|
283
|
+
/** Extensions to put on every appointment this form books. */
|
|
284
|
+
readonly appointmentExtensions?: readonly Extension[];
|
|
285
|
+
/**
|
|
286
|
+
* Allows for manual entry of a time and length, bypassing the `$find` search and
|
|
287
|
+
* `$book` endpoint.
|
|
263
288
|
*/
|
|
264
|
-
readonly
|
|
289
|
+
readonly canBypassSchedulingRules?: boolean;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* What the proposal the form assembles is for, which decides what it asks for.
|
|
294
|
+
*
|
|
295
|
+
* `book` gathers everything a new visit is written with: who it is for, and whatever
|
|
296
|
+
* its visit type requires. `reschedule` gathers only what decides the time, because
|
|
297
|
+
* `Appointment/[id]/$reschedule` moves a visit already on file and writes nothing else
|
|
298
|
+
* about it — asking for details it would drop is asking for them under false pretences.
|
|
299
|
+
*
|
|
300
|
+
* The visit type goes the same way: in `reschedule` mode a `defaultService` is shown
|
|
301
|
+
* rather than asked for, since the operation is measured against it but will not change
|
|
302
|
+
* it. Without one it is still asked, because the search cannot run without a visit type.
|
|
303
|
+
*/
|
|
304
|
+
export declare type AppointmentProposalMode = 'book' | 'reschedule';
|
|
305
|
+
|
|
306
|
+
/** What a reschedule wrote, as `Appointment/[id]/$reschedule` returned it. */
|
|
307
|
+
export declare type AppointmentReschedule = AppointmentWrite;
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* The form that moves a visit already on file, to another time or another set of actors.
|
|
311
|
+
*
|
|
312
|
+
* Wraps {@link AppointmentProposalForm}, opened on what the appointment is held on now
|
|
313
|
+
* and searching as though it were not: the time it occupies is the time it is being
|
|
314
|
+
* moved off, so `$find` is told to ignore it, which is what lets the same hour in a
|
|
315
|
+
* different room be found.
|
|
316
|
+
*
|
|
317
|
+
* Posts `Appointment/[id]/$reschedule`, announces the appointment, the times it gave up
|
|
318
|
+
* and the times it took, so views reading them refresh, then reports what was written
|
|
319
|
+
* through `onRescheduled`.
|
|
320
|
+
*
|
|
321
|
+
* Only the time and the actors are asked for. Everything else on the appointment — who
|
|
322
|
+
* it is for, its status, its visit type, whatever clinical detail it carries — is left
|
|
323
|
+
* exactly as it was, because that is all the operation will write. The visit type is
|
|
324
|
+
* shown rather than offered: `$reschedule` takes none, reading the one the appointment
|
|
325
|
+
* is on file for instead, since changing what a visit *is* would leave its required
|
|
326
|
+
* codes, its authorization, and anything applied at booking keyed to a type it no
|
|
327
|
+
* longer has.
|
|
328
|
+
*
|
|
329
|
+
* @param props - The React props.
|
|
330
|
+
* @returns The form.
|
|
331
|
+
*/
|
|
332
|
+
export declare function AppointmentRescheduleForm(props: AppointmentRescheduleFormProps): JSX.Element;
|
|
333
|
+
|
|
334
|
+
export declare interface AppointmentRescheduleFormProps extends Omit<AppointmentProposalFormProps, 'onSubmit' | 'mode' | 'defaultService' | 'defaultSelections' | 'defaultPatient' | 'ignoreAppointment' | 'mrnSystem' | 'procedureBinding' | 'diagnosisBinding' | 'canBypassSchedulingRules' | 'appointmentExtensions'> {
|
|
335
|
+
/** The appointment being moved. */
|
|
336
|
+
readonly appointment: WithId<Appointment>;
|
|
337
|
+
/**
|
|
338
|
+
* Called with what the move wrote.
|
|
339
|
+
*
|
|
340
|
+
* The answers stay on screen and the form stops offering to move until one of them
|
|
341
|
+
* changes, so a host can keep this mounted without it writing twice. A failure here
|
|
342
|
+
* is logged rather than shown as a refusal: the appointment has already moved by the
|
|
343
|
+
* time it runs.
|
|
344
|
+
*/
|
|
345
|
+
readonly onRescheduled: (reschedule: AppointmentReschedule) => void | Promise<void>;
|
|
265
346
|
}
|
|
266
347
|
|
|
267
348
|
/**
|
|
@@ -285,6 +366,8 @@ export declare interface AppointmentServiceSelectProps {
|
|
|
285
366
|
/** A chosen site, which narrows the services on offer to the ones held there. */
|
|
286
367
|
readonly location?: WithId<Location_2> | Reference<Location_2>;
|
|
287
368
|
readonly label?: string;
|
|
369
|
+
readonly placeholder?: string;
|
|
370
|
+
readonly required?: boolean;
|
|
288
371
|
readonly error?: string;
|
|
289
372
|
readonly disabled?: boolean;
|
|
290
373
|
}
|
|
@@ -317,6 +400,13 @@ export declare interface AppointmentSlotGroupCardProps {
|
|
|
317
400
|
readonly disabled?: boolean;
|
|
318
401
|
}
|
|
319
402
|
|
|
403
|
+
/** What a scheduling operation wrote: the appointment, and the times it holds. */
|
|
404
|
+
export declare interface AppointmentWrite {
|
|
405
|
+
readonly appointment: WithId<Appointment>;
|
|
406
|
+
/** The times reserved for it, one set per schedule it is held on. */
|
|
407
|
+
readonly slots: readonly WithId<Slot>[];
|
|
408
|
+
}
|
|
409
|
+
|
|
320
410
|
/**
|
|
321
411
|
* Actor types whose schedules may be offered for booking, in the order they are
|
|
322
412
|
* asked about.
|
|
@@ -346,6 +436,12 @@ export declare interface BookingRequirementValues {
|
|
|
346
436
|
readonly medicalNecessity: boolean;
|
|
347
437
|
}
|
|
348
438
|
|
|
439
|
+
/** What `onBook` is told about the proposal it was handed. */
|
|
440
|
+
export declare interface BookOptions {
|
|
441
|
+
/** True when the time was typed (& unvalidated) rather than chosen from the search. */
|
|
442
|
+
readonly manual: boolean;
|
|
443
|
+
}
|
|
444
|
+
|
|
349
445
|
export declare function Calendar(props: CalendarProps): JSX.Element;
|
|
350
446
|
|
|
351
447
|
export declare interface CalendarProps {
|
|
@@ -630,14 +726,14 @@ export declare function getFindWindowError(range: DateRange): string | undefined
|
|
|
630
726
|
/**
|
|
631
727
|
* Returns the input type to use for a date or time field.
|
|
632
728
|
*
|
|
633
|
-
* JSDOM does not fire change events for `<input type="date">`
|
|
634
|
-
* `<input type="
|
|
729
|
+
* JSDOM does not fire change events for `<input type="date">`, `<input type="time">`
|
|
730
|
+
* or `<input type="datetime-local">`, so tests get a plain text field, matching what
|
|
635
731
|
* `DateTimeInput` does.
|
|
636
732
|
*
|
|
637
733
|
* @param type - The native input type to use outside of tests.
|
|
638
734
|
* @returns The input type for the current environment.
|
|
639
735
|
*/
|
|
640
|
-
export declare function getNativeInputType(type: 'date' | 'time'): string;
|
|
736
|
+
export declare function getNativeInputType(type: 'date' | 'time' | 'datetime-local'): string;
|
|
641
737
|
|
|
642
738
|
/**
|
|
643
739
|
* Returns every row across every actor type, in the order they are asked about.
|
|
@@ -787,6 +883,14 @@ export declare interface MultiCalendarSource {
|
|
|
787
883
|
*/
|
|
788
884
|
export declare function parseDayKey(key: string): Date;
|
|
789
885
|
|
|
886
|
+
/**
|
|
887
|
+
* Reads a native datetime input's value as an instant in a timezone.
|
|
888
|
+
* @param value - A `YYYY-MM-DDTHH:MM` value, as the input reports it.
|
|
889
|
+
* @param timezone - IANA timezone identifier. Defaults to the browser's.
|
|
890
|
+
* @returns The instant, or undefined while the value is not a complete date and time.
|
|
891
|
+
*/
|
|
892
|
+
export declare function parseZonedDateTimeInput(value: string, timezone?: string): Date | undefined;
|
|
893
|
+
|
|
790
894
|
/**
|
|
791
895
|
* Reads a wall-clock time on a given day as an instant in a timezone.
|
|
792
896
|
*
|
|
@@ -797,6 +901,18 @@ export declare function parseDayKey(key: string): Date;
|
|
|
797
901
|
*/
|
|
798
902
|
export declare function parseZonedTime(day: Date, time: string, timezone?: string): Date | undefined;
|
|
799
903
|
|
|
904
|
+
/**
|
|
905
|
+
* Reads what a scheduling operation wrote out of the bundle it answers with.
|
|
906
|
+
*
|
|
907
|
+
* `$book` and `$reschedule` both answer with the appointment and every Slot they
|
|
908
|
+
* created, in one transaction bundle.
|
|
909
|
+
*
|
|
910
|
+
* @param written - The bundle the operation returned.
|
|
911
|
+
* @param operation - What was called, for the error a bundle without an appointment raises.
|
|
912
|
+
* @returns The appointment and the times reserved for it.
|
|
913
|
+
*/
|
|
914
|
+
export declare function readAppointmentWrite(written: Bundle<WithId<Appointment> | WithId<Slot>>, operation: string): AppointmentWrite;
|
|
915
|
+
|
|
800
916
|
/**
|
|
801
917
|
* Actor types that must be chosen before a search can run.
|
|
802
918
|
*
|
|
@@ -805,6 +921,35 @@ export declare function parseZonedTime(day: Date, time: string, timezone?: strin
|
|
|
805
921
|
*/
|
|
806
922
|
export declare const REQUIRED_ACTOR_TYPES: ReadonlySet<SchedulingActorType>;
|
|
807
923
|
|
|
924
|
+
export declare interface RescheduleDefaults {
|
|
925
|
+
/** The visit type the appointment is on file under, where it records one. */
|
|
926
|
+
readonly service: WithId<HealthcareService> | undefined;
|
|
927
|
+
/** Who and what it is held on now, arranged into the rows a form asks for them in. */
|
|
928
|
+
readonly selections: ActorSelections;
|
|
929
|
+
/**
|
|
930
|
+
* Actors the visit is held on whose schedules cannot be offered back, named where they
|
|
931
|
+
* could be read.
|
|
932
|
+
*
|
|
933
|
+
* A Schedule that is inactive, no longer names the visit type, or is held on an actor
|
|
934
|
+
* this form does not book leaves its actors out of the rows above — and a move writes
|
|
935
|
+
* the actors it is given, so these are about to be dropped off the visit.
|
|
936
|
+
*/
|
|
937
|
+
readonly droppedActors: readonly SchedulingActor[];
|
|
938
|
+
/**
|
|
939
|
+
* Set when the visit type, or a Slot or Schedule the visit is held on, could not be read.
|
|
940
|
+
*
|
|
941
|
+
* `$reschedule` reads those same references, so no move from here would be accepted.
|
|
942
|
+
*/
|
|
943
|
+
readonly error: unknown;
|
|
944
|
+
/**
|
|
945
|
+
* True until the reads settle.
|
|
946
|
+
*
|
|
947
|
+
* A form reads its defaults once, at mount, so one mounted while this is true would
|
|
948
|
+
* open on nothing and never take them.
|
|
949
|
+
*/
|
|
950
|
+
readonly loading: boolean;
|
|
951
|
+
}
|
|
952
|
+
|
|
808
953
|
/**
|
|
809
954
|
* Edits weekly availability for one visit service type, either as a Schedule's
|
|
810
955
|
* override of the service hours or as the service's own default hours.
|
|
@@ -871,9 +1016,9 @@ export declare type SchedulingActorValue = SchedulingActor | SchedulingActorReso
|
|
|
871
1016
|
* The form writes the booking and announces what it wrote, which is what puts the
|
|
872
1017
|
* new appointment on the calendar beside it — a host supplies no data for any of it.
|
|
873
1018
|
* What was written is reported through `onBooked`, for a host that wants to say so.
|
|
874
|
-
* - Shows what is booked: clicking an appointment opens {@link AppointmentDetails} in
|
|
875
|
-
*
|
|
876
|
-
*
|
|
1019
|
+
* - Shows what is booked: clicking an appointment opens {@link AppointmentDetails} in the
|
|
1020
|
+
* same pane the booking form uses, describing the visit and offering to cancel or
|
|
1021
|
+
* reschedule it.
|
|
877
1022
|
* - Highlights the time last chosen, wherever it was chosen: the click that opened the
|
|
878
1023
|
* pane, then whatever the form's time search settles on, and nothing while the form
|
|
879
1024
|
* holds no time. The calendar is never moved to reach it — a highlight off the week
|
|
@@ -892,11 +1037,32 @@ export declare interface SchedulingWorkspaceProps {
|
|
|
892
1037
|
readonly diagnosisBinding?: string;
|
|
893
1038
|
readonly onBooked?: (booking: AppointmentBooking) => void | Promise<void>;
|
|
894
1039
|
readonly onCancelled?: (appointment: WithId<Appointment>) => void | Promise<void>;
|
|
1040
|
+
readonly onRescheduled?: (reschedule: AppointmentReschedule) => void | Promise<void>;
|
|
895
1041
|
/**
|
|
896
1042
|
* Overrides the value set the appointment detail view offers cancellation reasons
|
|
897
1043
|
* from, for a host coding them against its own terminology.
|
|
898
1044
|
*/
|
|
899
1045
|
readonly appointmentCancellationReasonValueSet?: string;
|
|
1046
|
+
/**
|
|
1047
|
+
* Lets the booking form take a typed time and length, placing a visit the scheduling
|
|
1048
|
+
* rules would refuse: over occupied or blocked time, past the configured capacity,
|
|
1049
|
+
* or at a time or length the visit type does not offer.
|
|
1050
|
+
*
|
|
1051
|
+
* Passing it draws the fields; it enforces nothing. Which users get it is the host
|
|
1052
|
+
* application's responsibility.
|
|
1053
|
+
*
|
|
1054
|
+
* Such a booking is sent as a transaction, so the appointment and its Slots commit
|
|
1055
|
+
* together on projects with the `transaction-bundles` feature enabled. Without it they
|
|
1056
|
+
* are applied as a plain batch, where an appointment that failed to write would leave
|
|
1057
|
+
* Slots holding no visit.
|
|
1058
|
+
* @see https://www.medplum.com/docs/fhir-datastore/fhir-batch-requests#batches-vs-transactions
|
|
1059
|
+
*/
|
|
1060
|
+
readonly canBypassSchedulingRules?: boolean;
|
|
1061
|
+
/**
|
|
1062
|
+
* Extensions to put on every appointment booked from this workspace. See
|
|
1063
|
+
* {@link AppointmentProposalFormProps.appointmentExtensions}.
|
|
1064
|
+
*/
|
|
1065
|
+
readonly appointmentExtensions?: readonly Extension[];
|
|
900
1066
|
}
|
|
901
1067
|
|
|
902
1068
|
/**
|
|
@@ -955,10 +1121,10 @@ export declare interface ServiceDefaultEditorProps extends CommonProps {
|
|
|
955
1121
|
/**
|
|
956
1122
|
* Immutably gives a Schedule its own hours for a HealthcareService, in place of the service default.
|
|
957
1123
|
* Reads back through `getEffectiveAvailability`; to drop the calendar back to the default, clear the
|
|
958
|
-
* parameter with `
|
|
1124
|
+
* parameter with `clearScheduleSchedulingParameter(schedule, service, 'availability')` from `@medplum/core`.
|
|
959
1125
|
*
|
|
960
1126
|
* Availability is the one parameter with a typed wrapper, because it is the only one that is not a single
|
|
961
|
-
* `value[x]`: `bufferBefore` and the rest go through `
|
|
1127
|
+
* `value[x]`: `bufferBefore` and the rest go through `setScheduleSchedulingParameter` directly, already legible as
|
|
962
1128
|
* `{ url: 'bufferBefore', valueDuration: { value: 10, unit: 'min' } }`. Availability is a repeating nested
|
|
963
1129
|
* structure, so hand-building it at every call site would mean re-deriving the encoding.
|
|
964
1130
|
*
|
|
@@ -991,6 +1157,8 @@ export declare type TimeOfDay = 'any' | 'morning' | 'afternoon';
|
|
|
991
1157
|
*/
|
|
992
1158
|
export declare function toCodings(elements: readonly ValueSetExpansionContains[]): Coding[];
|
|
993
1159
|
|
|
1160
|
+
export declare function toScheduleCandidate(schedule: WithId<Schedule>, service: WithId<HealthcareService> | undefined, actors: Map<string, SchedulingActorResource>): ScheduleCandidate | undefined;
|
|
1161
|
+
|
|
994
1162
|
/** Rows that cannot all be filled at once, and where to say so. */
|
|
995
1163
|
export declare interface UnsatisfiableRows {
|
|
996
1164
|
/** The actor type whose rows have no answer between them. */
|
|
@@ -1019,6 +1187,14 @@ export declare interface UseProposedAppointmentsOptions {
|
|
|
1019
1187
|
readonly range: DateRange;
|
|
1020
1188
|
/** Times to ask for per combination. Defaults to 20. */
|
|
1021
1189
|
readonly count?: number;
|
|
1190
|
+
/**
|
|
1191
|
+
* An appointment whose own times are not to count as taken.
|
|
1192
|
+
*
|
|
1193
|
+
* For searching on behalf of an appointment that already exists: the times it holds
|
|
1194
|
+
* are the times it is being moved off, and left standing they would block every
|
|
1195
|
+
* search that keeps any of the actors it is held on.
|
|
1196
|
+
*/
|
|
1197
|
+
readonly ignoreAppointment?: Reference<Appointment> | WithId<Appointment>;
|
|
1022
1198
|
}
|
|
1023
1199
|
|
|
1024
1200
|
export declare interface UseProposedAppointmentsResult {
|
|
@@ -1035,6 +1211,23 @@ export declare interface UseProposedAppointmentsResult {
|
|
|
1035
1211
|
readonly windowError: string | undefined;
|
|
1036
1212
|
}
|
|
1037
1213
|
|
|
1214
|
+
/**
|
|
1215
|
+
* Reads what an appointment is currently held on, for a form that offers to move it.
|
|
1216
|
+
*
|
|
1217
|
+
* The visit type comes off `Appointment.serviceType`, which carries a reference to the
|
|
1218
|
+
* HealthcareService it was booked under; the actors come off the Slots it holds, which
|
|
1219
|
+
* name the Schedules — the appointment's own participants would not say which of an
|
|
1220
|
+
* actor's schedules is the one being moved off.
|
|
1221
|
+
*
|
|
1222
|
+
* An actor that cannot be read keeps its schedule, shown under the name the schedule
|
|
1223
|
+
* gives it: the move is written against the schedule, not the actor.
|
|
1224
|
+
*
|
|
1225
|
+
* @param appointment - The appointment being moved.
|
|
1226
|
+
* @returns Its visit type and actors, whether they are still being read, who a move
|
|
1227
|
+
* would drop off it, and why it could not be read, where it could not.
|
|
1228
|
+
*/
|
|
1229
|
+
export declare function useRescheduleDefaults(appointment: WithId<Appointment>): RescheduleDefaults;
|
|
1230
|
+
|
|
1038
1231
|
/**
|
|
1039
1232
|
* Loads the Appointments for a set of schedules within a date range and keeps them live.
|
|
1040
1233
|
*
|
package/dist/esm/index.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
.AppointmentFinder_timeGrid{row-gap:var(--mantine-spacing-xs)}.AppointmentFinder_layout{display:flex;flex-wrap:wrap;gap:var(--mantine-spacing-lg);align-items:flex-start;flex:1 1 auto;min-height:0}.AppointmentFinder_form{flex:1 1 300px;min-width:0;max-width:420px;max-height:100%;overflow-y:auto}.AppointmentFinder_results{flex:1 1 380px;min-width:0;max-height:100%;overflow-y:auto}.AppointmentFinder_form>*,.AppointmentFinder_results>*{flex-shrink:0}.AppointmentFinder_codePill{max-width:14rem}.AppointmentFinder_requiredLabel:after{content:" *";color:var(--mantine-color-error)}:root{--fc-sticky-header-footer-z: 3;--fc-popover-z: 4}.fc-ZK{z-index:var(--fc-popover-z)!important}.fc-5R{isolation:isolate}.fc-O6,.fc-O6 *,.fc-O6 *:before,.fc-O6 *:after{box-sizing:border-box!important}.fc-fF,.fc-fF *{cursor:not-allowed!important}.fc-Rp{-ms-overflow-style:none!important;scrollbar-width:none!important}.fc-Rp::-webkit-scrollbar{display:none!important}.fc-tp{flex-shrink:0!important}.fc-MU .fc-rr{display:flex!important;flex-direction:row!important;flex-wrap:wrap!important}.fc-ob .fc-rr>*{float:left!important}[dir=rtl] .fc-ob .fc-rr>*,.fc-ob[dir=rtl] .fc-rr>*{float:right!important}.fc-ob .fc-rr:after{content:""!important;display:block!important;clear:both!important}.fc-iz{cursor:pointer!important}.fc-W6{cursor:n-resize!important}.fc-9e{cursor:s-resize!important}.fc-wb{cursor:w-resize!important}[dir=rtl] .fc-wb,.fc-0b{cursor:e-resize!important}[dir=rtl] .fc-0b{cursor:w-resize!important}.fc-Gz{cursor:col-resize!important}.fc-wZ,.fc-oJ,.fc-9A{position:absolute!important;box-sizing:content-box!important;width:100%!important;height:100%!important}.fc-wZ{padding:10px!important;margin:-10px!important}.fc-oJ{padding-left:10px!important;padding-right:10px!important;margin-left:-10px!important;margin-right:-10px!important}.fc-9A{padding-top:10px!important;padding-bottom:10px!important;margin-top:-10px!important;margin-bottom:-10px!important}.fc-Yf{position:absolute;inset:0 -5px}.fc-AQ{-webkit-user-select:none;-moz-user-select:none;user-select:none}.fc-MJ{visibility:hidden}.fc-Yq{border:0!important}.fc-3R{border-left:0!important;border-right:0!important}.fc-dv{border-top:0!important;border-bottom:0!important}.fc-Yk{border-top:0!important}.fc-b1{border-bottom:0!important}.fc-W7{border-inline-start:0!important}.fc-Eu{border-inline-end:0!important}.fc-bH{display:flex!important;flex-direction:row!important}.fc-Ih{display:flex!important;flex-direction:column!important}.fc-BH{flex-grow:1!important}.fc-1Y{flex-grow:1!important;flex-basis:0!important;min-width:0!important;min-height:0!important}.fc-Ux{min-height:0!important}.fc-ZM{flex-grow:1!important;flex-basis:0!important;min-width:0!important}.fc-Gx{width:100%!important;table-layout:fixed!important;border:0!important;border-collapse:separate!important;border-spacing:0!important}.fc-Gx>thead{-moz-column-break-inside:avoid!important;break-inside:avoid!important;page-break-inside:avoid!important}.fc-Gx>tbody{background:transparent!important}.fc-Gx>thead>tr>th,.fc-Gx>tbody>tr>th,.fc-Gx>tbody>tr>td{vertical-align:top!important;font-weight:inherit;text-align:inherit}.fc-33{padding:0!important}.fc-5V{padding-top:0!important;padding-bottom:0!important}.fc-b4{margin:0!important}.fc-H8{margin-top:0!important;margin-bottom:0!important}.fc-Oq{margin-left:0!important;margin-right:0!important}.fc-oX{white-space:nowrap!important}.fc-LF{white-space:pre!important}.fc-Gg{overflow-anchor:none}.fc-87{pointer-events:none!important}.fc-5o{overflow:hidden!important}.fc-7P{white-space:nowrap!important;overflow:hidden!important}.fc-XV{position:relative!important}.fc-Ew{position:absolute!important}.fc-bN{inset-inline-start:0!important}.fc-cH{inset-inline-end:0!important}.fc-wd{position:absolute!important;inset:0!important}.fc-sd,.fc-ar{position:absolute!important;left:0!important;right:0!important}.fc-0H,.fc-63{position:absolute!important;top:0!important;bottom:0!important}.fc-sd{top:0!important}.fc-63{left:0!important;right:0!important;width:0!important}@media not print{.fc-WL{position:sticky!important}.fc-i6{position:sticky!important;top:0!important}.fc-n4{position:sticky!important;inset-inline-start:0!important}.fc-q0{position:sticky!important;top:0!important;z-index:var(--fc-sticky-header-footer-z)!important}}.fc-F2{box-sizing:content-box!important}.fc-rZ{position:absolute!important;left:-10000px!important}.fc-dG{align-items:center!important}.fc-jB{align-items:flex-start!important}.fc-6B{align-items:flex-end!important}.fc-89{position:sticky!important;bottom:0!important;z-index:var(--fc-sticky-header-footer-z)!important}.fc-Se>*{margin-top:-1px!important}.fc-Se>*>*{height:1px!important}.fc-qu{-moz-column-break-inside:avoid!important;break-inside:avoid!important;page-break-inside:avoid!important}.fc-sn{min-height:4em!important}.fc-os{display:flow-root!important}.fc-P0{z-index:0}.fc-hB{z-index:1}.fc-b7{z-index:2}.fc-BR{z-index:3}.fc-eM{z-index:4}.fc-zy{z-index:5}.fc-xI{z-index:1000}.fc-hJ{z-index:9999}.fc-0t:focus-visible{z-index:2}:root{--fc-classic-button: #334155;--fc-classic-button-border: #334155;--fc-classic-button-strong: #1e293b;--fc-classic-button-strong-border: #0f172a;--fc-classic-button-outline: #47556980;--fc-classic-button-foreground: #fff;--fc-classic-primary: #3788d8;--fc-classic-primary-foreground: #fff;--fc-classic-event: var(--fc-classic-primary);--fc-classic-event-contrast: var(--fc-classic-primary-foreground);--fc-classic-background-event: #22c55e;--fc-classic-background-event-opacity: 15%;--fc-classic-background-event-foreground-opacity: 50%;--fc-classic-highlight: #cffafe66;--fc-classic-today: #facc1526;--fc-classic-now: #ef4444;--fc-classic-small-dot-width: 8px;--fc-classic-large-dot-width: 10px;--fc-classic-background: #ffffff;--fc-classic-faint: #0000000A;--fc-classic-muted: #00000014;--fc-classic-strong: #00000024;--fc-classic-foreground: #030712;--fc-classic-faint-foreground: #9ca3af;--fc-classic-muted-foreground: #6b7280;--fc-classic-border: #ddd;--fc-classic-strong-border: #9ca3af}@media not print{[data-color-scheme=dark]{--fc-classic-highlight: #3b82f633;--fc-classic-today: #fef08a1A;--fc-classic-background: #030712;--fc-classic-faint: #ffffff0A;--fc-classic-muted: #ffffff14;--fc-classic-strong: #ffffff24;--fc-classic-foreground: #fff;--fc-classic-faint-foreground: #4b5563;--fc-classic-muted-foreground: #9ca3af;--fc-classic-border: #1f2937;--fc-classic-strong-border: #374151}}.fc-classic-n5m{font-size:16px;line-height:1.5;--fc-classic-border-style: solid}.fc-classic-Z9U{appearance:button;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0;margin:0;border:0;padding:0}.fc-classic-JiE{color:inherit;text-decoration:inherit}.fc-classic-3Lc{pointer-events:none}.fc-classic-1EY{position:absolute}.fc-classic-eYX{position:relative}.fc-classic-OUe{position:sticky}.fc-classic-MaV{inset-inline:0}.fc-classic-AWB{inset-block:0}.fc-classic-11a{inset-inline-start:-4px}.fc-classic-rbS{inset-inline-start:0}.fc-classic-bEw{inset-inline-end:-4px}.fc-classic-2w8{inset-inline-end:2px}.fc-classic-dnf{inset-inline-end:-3px}.fc-classic-YDC{top:-4px}.fc-classic-n9G{top:0}.fc-classic-2ik{top:2px}.fc-classic-ERR{top:50%}.fc-classic-fJL{bottom:-4px}.fc-classic-jGI{bottom:0}.fc-classic-1V6{left:50%}.fc-classic-88I{order:-1}.fc-classic-gMS{margin:4px}.fc-classic-bvX{margin:8px}.fc-classic-jD5{margin:16px}.fc-classic-J04{margin-inline:-5px}.fc-classic-cKZ{margin-inline:2px}.fc-classic-rVY{margin-inline:4px}.fc-classic-fn8{margin-inline:8px}.fc-classic-148{margin-inline:1px}.fc-classic-cJ3{margin-block:2px}.fc-classic-V9v{margin-block:4px}.fc-classic-2tF{margin-block:8px}.fc-classic-Jzj{margin-inline-start:2px}.fc-classic-Mde{margin-inline-start:8px}.fc-classic-qvL{margin-inline-start:1px}.fc-classic-kp0{margin-inline-end:-4px}.fc-classic-3e1{margin-inline-end:2px}.fc-classic-B3G{margin-inline-end:2.5%}.fc-classic-9hC{margin-inline-end:1px}.fc-classic-Dq8{margin-top:-4px}.fc-classic-a10{margin-top:-5px}.fc-classic-Ika{margin-bottom:1px}.fc-classic-nHS{margin-bottom:-1px}.fc-classic-F99{margin-left:-4px}.fc-classic-eF2{display:contents}.fc-classic-I48{display:block}.fc-classic-dl1{display:flex}.fc-classic-i3N{display:grid}.fc-classic-pps{display:none}.fc-classic-3wQ{width:8px;height:8px}.fc-classic-vnf{width:16px;height:16px}.fc-classic-XUJ{width:20px;height:20px}.fc-classic-uuA{height:8px}.fc-classic-zrJ{height:12px}.fc-classic-84e{min-height:2px}.fc-classic-mhE{min-height:12px}.fc-classic-toR{min-height:1px}.fc-classic-roZ{width:50%}.fc-classic-hza{width:8px}.fc-classic-4Tv{width:5px}.fc-classic-kMV{max-width:200px}.fc-classic-2KU{min-width:0}.fc-classic-aNc{min-width:220px}.fc-classic-yi0{flex-shrink:0}.fc-classic-1Zl{flex-shrink:1}.fc-classic-OLq{flex-shrink:100}.fc-classic-1El{flex-grow:1}.fc-classic-jmT{rotate:180deg}.fc-classic-sgX{flex-direction:column}.fc-classic-1sP{flex-direction:row}.fc-classic-dNl{flex-wrap:wrap}.fc-classic-XpK{align-items:center}.fc-classic-N2M{justify-content:space-between}.fc-classic-E9P{justify-content:center}.fc-classic-LMv{justify-content:flex-end}.fc-classic-aTF{gap:2px}.fc-classic-NWN{gap:4px}.fc-classic-wwb{gap:12px}.fc-classic-yth{gap:20px}.fc-classic-sI7{align-self:flex-start}.fc-classic-pKG{overflow:hidden}.fc-classic-Ig4{border-radius:4px}.fc-classic-AAA{border-radius:3.40282e38px}.fc-classic-Fvv{border-radius:4px}.fc-classic-kmj{border-start-start-radius:4px;border-end-start-radius:4px}.fc-classic-Skl{border-start-end-radius:4px;border-end-end-radius:4px}.fc-classic-C2g{border-end-end-radius:4px}.fc-classic-Z7Q{border-top-left-radius:4px;border-top-right-radius:4px}.fc-classic-2qh{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.fc-classic-wsy{border-style:var(--fc-classic-border-style);border-width:1px}.fc-classic-5JF{border-style:var(--fc-classic-border-style);border-width:4px}.fc-classic-yDA{border-style:var(--fc-classic-border-style);border-width:5px}.fc-classic-Mjo{border-style:var(--fc-classic-border-style);border-width:calc(var(--fc-classic-small-dot-width) / 2)}.fc-classic-GOm{border-style:var(--fc-classic-border-style);border-width:calc(var(--fc-classic-large-dot-width) / 2)}.fc-classic-1Wx{border-inline-style:var(--fc-classic-border-style);border-inline-width:1px}.fc-classic-ybF{border-inline-style:var(--fc-classic-border-style);border-inline-width:5px}.fc-classic-JIC{border-block-style:var(--fc-classic-border-style);border-block-width:1px}.fc-classic-XM3{border-block-style:var(--fc-classic-border-style);border-block-width:5px}.fc-classic-3J4{border-inline-start-style:var(--fc-classic-border-style);border-inline-start-width:1px}.fc-classic-hhi{border-inline-start-style:var(--fc-classic-border-style);border-inline-start-width:5px}.fc-classic-jIH{border-inline-start-style:var(--fc-classic-border-style);border-inline-start-width:6px}.fc-classic-USt{border-inline-end-style:var(--fc-classic-border-style);border-inline-end-width:1px}.fc-classic-Bda{border-inline-end-style:var(--fc-classic-border-style);border-inline-end-width:5px}.fc-classic-ku3{border-top-style:var(--fc-classic-border-style);border-top-width:1px}.fc-classic-bLA{border-top-style:var(--fc-classic-border-style);border-top-width:6px}.fc-classic-zi1{border-bottom-style:var(--fc-classic-border-style);border-bottom-width:1px}.fc-classic-TN2{--fc-classic-border-style: dotted;border-style:dotted}.fc-classic-C1x{border-color:var(--fc-classic-border)}.fc-classic-sYT{border-color:var(--fc-classic-now)}.fc-classic-0Pr{border-color:var(--fc-classic-primary)}.fc-classic-vXO{border-color:var(--fc-classic-button-border)}.fc-classic-rQI{border-color:var(--fc-classic-button-strong-border)}.fc-classic-C0k{border-color:var(--fc-classic-strong-border)}.fc-classic-lNM{border-color:var(--fc-event-color)}.fc-classic-d0j{border-color:#0000}.fc-classic-Pqk{border-inline-color:#0000}.fc-classic-rif{border-block-color:#0000}.fc-classic-0qY{border-inline-start-color:var(--fc-classic-now)}.fc-classic-LaM{border-inline-start-color:#000}.fc-classic-5JV{border-inline-end-color:#000}.fc-classic-1Aa{border-top-color:var(--fc-classic-now)}.fc-classic-Jk3{background-color:var(--fc-classic-background)}.fc-classic-iYS{background-color:var(--fc-classic-faint)}.fc-classic-hLU{background-color:var(--fc-classic-highlight)}.fc-classic-k3f{background-color:var(--fc-classic-muted)}.fc-classic-YjJ{background-color:var(--fc-event-color)}@media not print{@supports (color:color-mix(in lab,red,red)){.fc-classic-hsC{background-color:color-mix(in oklab,var(--fc-event-color) var(--fc-classic-background-event-opacity),transparent)}}@supports not (color:color-mix(in lab,red,red)){.fc-classic-hsC{position:relative;isolation:isolate}.fc-classic-hsC:before{content:"";position:absolute;inset:0;background-color:var(--fc-event-color);opacity:var(--fc-classic-background-event-opacity);z-index:-1}}}.fc-classic-JWq{background-color:var(--fc-classic-button)}.fc-classic-Adi{background-color:var(--fc-classic-button-strong)}.fc-classic-KUX{padding:2px}.fc-classic-XJa{padding:6px}.fc-classic-3N5{padding:8px}.fc-classic-7A6{padding:1px}.fc-classic-oQ2{padding-inline:2px}.fc-classic-Eaq{padding-inline:10px}.fc-classic-Apf{padding-inline:12px}.fc-classic-F1o{padding-inline:1px}.fc-classic-2rx{padding-block:2px}.fc-classic-Jhn{padding-block:4px}.fc-classic-End{padding-block:6px}.fc-classic-dl6{padding-block:8px}.fc-classic-P9h{padding-block:60px}.fc-classic-z5u{padding-block:1px}.fc-classic-a7i{padding-inline-start:2px}.fc-classic-166{padding-top:2px}.fc-classic-8ub{padding-bottom:2px}.fc-classic-cM0{padding-bottom:16px}.fc-classic-HXA{text-align:center}.fc-classic-2HE{text-align:end}.fc-classic-AVD{font-size:24px;line-height:calc(2/1.5)}.fc-classic-vQz{font-size:11px;line-height:1.09091}.fc-classic-1Po{font-size:16px;line-height:1.5}.fc-classic-9yp{font-size:14px;line-height:calc(1.25/.875)}.fc-classic-a3B{font-size:12px;line-height:calc(1/.75)}.fc-classic-DIS{font-weight:700}.fc-classic-IPx{text-overflow:ellipsis}.fc-classic-TZ4{white-space:nowrap}.fc-classic-jm6{white-space:pre}.fc-classic-taq{color:var(--fc-classic-faint-foreground)}.fc-classic-m9h{color:var(--fc-classic-muted-foreground)}.fc-classic-GAX{color:var(--fc-classic-foreground)}.fc-classic-RnT{color:var(--fc-classic-button-foreground)}.fc-classic-i9F{color:var(--fc-event-contrast-color)}.fc-classic-L1Y{font-style:italic}.fc-classic-lMo{opacity:.5}.fc-classic-Q3Z{opacity:.65}.fc-classic-iTG{opacity:.75}.fc-classic-MGT{opacity:var(--fc-classic-background-event-foreground-opacity)}.fc-classic-1kP{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a}.fc-classic-tkw{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}.fc-classic-qNs{box-shadow:0 1px 3px #0000001a,0 1px 2px -1px #0000001a}.fc-classic-A3h{box-shadow:0 0 0 1px var(--fc-classic-ring-color, currentcolor)}.fc-classic-yKG{--fc-classic-ring-color: var(--fc-classic-background) }.fc-classic-2R2{outline-style:solid;outline-width:1px}.fc-classic-0Bj{outline-style:solid;outline-width:2px}.fc-classic-fFh{outline-offset:-2px}.fc-classic-3Xj{outline-offset:2px}.fc-classic-lYz{outline-color:var(--fc-classic-button-outline)}.fc-classic-zIi{outline-color:var(--fc-classic-primary)}.fc-classic-SDU{background:linear-gradient(var(--fc-classic-muted),var(--fc-classic-muted))var(--fc-classic-background)}.fc-classic-BaR{background:linear-gradient(var(--fc-classic-strong),var(--fc-classic-strong))var(--fc-classic-background)}.fc-classic-mAY:not(:is(:where(.fc-classic-bCs):hover *)){opacity:.65}@media not all and (hover:hover){.fc-classic-mAY{opacity:.65}}@media not print{.fc-classic-hbn{background-color:var(--fc-classic-today)}}@media(hover:hover){.fc-classic-vs6:is(:where(.fc-classic-bCs):hover *){display:block}.fc-classic-Ogp:is(:where(.fc-classic-bCs):hover *){text-decoration-line:underline}}.fc-classic-uk6:first-child{border-start-start-radius:4px;border-end-start-radius:4px}.fc-classic-Tuc:last-child{border-start-end-radius:4px;border-end-end-radius:4px}@media(hover:hover){.fc-classic-bqK:hover{border-color:var(--fc-classic-button-strong-border)}.fc-classic-9Rj:hover{background-color:var(--fc-classic-button-strong)}.fc-classic-Ubk:hover{background-color:var(--fc-classic-faint)}.fc-classic-4yP:hover{background-color:var(--fc-classic-muted)}.fc-classic-Eu0:hover{text-decoration-line:underline}}.fc-classic-OIx:focus-visible{background-color:var(--fc-classic-faint)}.fc-classic-tCP:focus-visible{background-color:var(--fc-classic-muted)}.fc-classic-uqo:focus-visible{outline-style:solid;outline-width:2px}.fc-classic-sOR:focus-visible{outline-style:solid;outline-width:3px}.fc-classic-aIH:active{border-color:var(--fc-classic-button-strong-border)}.fc-classic-5ky:active{background-color:var(--fc-classic-button-strong)}.fc-classic-28F:active{background-color:var(--fc-classic-muted)}.fc-classic-8gz:active{background-color:var(--fc-classic-strong)}@media print{.fc-classic-jsy{border-width:1px}.fc-classic-nQ5{border-color:var(--fc-classic-button-strong-border)}.fc-classic-DO7{border-color:var(--fc-event-color)}.fc-classic-4MR{border-color:#000}.fc-classic-vwH{background-color:#fff}.fc-classic-cfp{color:#000}}[dir=rtl] .fc-classic-jY6{rotate:none}[dir=rtl] .fc-classic-asP{rotate:180deg}.CalendarBase_wrapper{height:100%;display:flex;flex-direction:column}.CalendarBase_calendar{flex-grow:1;min-width:0}.dayGridMonth.CalendarBase_calendar,.timeGridWeek.CalendarBase_calendar{min-width:480px}.dayGridMonth.CalendarBase_calendar .CalendarBase_listItemEventBefore{display:none}.CalendarBase_clickable{cursor:pointer}.CalendarBase_selectedRange{background-color:light-dark(#228be62e,#4dabf73d)}.CalendarBase_eventTitle{order:1}.CalendarBase_eventTime{order:2}.CalendarBase_eventInner{overflow:hidden}.CalendarBase_eventTitle{white-space:normal;overflow:visible}.CalendarBase_eventTitle{font-weight:500}.CalendarBase_eventTime{font-size:10px}.CalendarBase_shortEvent{.CalendarBase_eventInner{flex-direction:column;align-items:inherit}}.CalendarBase_backgroundEventInner>div{opacity:1}.CalendarBase_backgroundEvent{container-type:size}@container (height < 50px){.CalendarBase_backgroundEventInner>div{font-size:10px;padding-top:2px}}.CalendarBase_backgroundEvent{border-radius:var(--mantine-radius-sm)}:root{--fc-classic-today: #b8e0ff4d;[data-color-scheme=dark]{--fc-classic-today: #406e934d}}.CalendarBase_nonBusinessHours{background-color:light-dark(#0000000A,#FFFFFF2A)}.dayGridMonth .CalendarBase_event{background-color:var(--fc-event-color);.CalendarBase_eventInner{color:var(--fc-event-contrast-color)}}.Calendar_wrapper{.appointment{--cal-color: light-dark(var(--mantine-color-white), var(--mantine-color-white));--cal-background-color: light-dark(var(--mantine-color-blue-6), var(--mantine-color-blue-8))}.slot{--cal-color: light-dark(var(--mantine-color-dark-4), var(--mantine-color-gray-4));--cal-background-color: light-dark(var(--mantine-color-gray-4), var(--mantine-color-gray-7))}.dayGridMonth .Calendar_event:hover{background-color:var(--cal-background-color)}.appointment.proposed{.Calendar_eventTitle:after{content:" (proposed)"}}.appointment.pending{--cal-color: light-dark(var(--mantine-color-blue-8), var(--mantine-color-blue-6));--cal-background-color: light-dark(var(--mantine-color-white), var(--mantine-color-black));border:1px solid var(--cal-color)}.appointment.waitlist{.Calendar_eventTitle:after{content:" (waitlist)"}}.appointment.checked-in{.Calendar_eventTitle:after{content:" (checked in)"}}.appointment.cancelled{.Calendar_eventTitle:after{content:" (cancelled)"}--cal-color: light-dark(var(--mantine-color-black), var(--mantine-color-white));--cal-background-color: light-dark(var(--mantine-color-red-3), var(--mantine-color-red-8))}.appointment.noshow{.Calendar_eventTitle:after{content:" (no show)"}}.appointment.entered-in-error{.Calendar_eventTitle:after{content:" (entered in error)"}}.slot.free{--cal-color: light-dark(var(--mantine-color-dark-7), var(--mantine-color-gray-1));--cal-background-color: light-dark(var(--mantine-color-green-1), var(--mantine-color-green-9))}.slot.entered-in-error{--cal-color: light-dark(var(--mantine-color-dark-7), var(--mantine-color-black));--cal-background-color: light-dark(var(--mantine-color-red-1), var(--mantine-color-red-3))}.Calendar_event,.Calendar_backgroundEvent{background-color:var(--cal-background-color);.Calendar_eventInner{color:var(--cal-color)}.Calendar_backgroundEventInner>div{color:var(--cal-color)}}.Calendar_eventTitle:after{opacity:.7}}.appointment .MultiCalendar_eventInner{margin-left:8px;&:before{content:"";width:4px;position:absolute;top:2px;left:2px;bottom:2px;border-radius:8px;background-color:var(--status-color)}}.appointment.pending,.appointment.proposed{--status-color: var(--mantine-color-yellow-3)}.appointment.booked,.appointment.arrived,.appointment.fulfilled,.appointment.checked-in{--status-color: var(--mantine-color-blue-3)}.appointment.cancelled,.appointment.noshow,.appointment.entered-in-error{--status-color: var(--mantine-color-red-3)}.appointment.waitlist{--status-color: var(--mantine-color-gray-3)}.MultiCalendar_eventTime{color:var(--mantine-color-gray-2)}.ScheduleAvailabilityEditor_week{display:grid;grid-template-columns:repeat(5,max-content) 1fr;align-items:center;column-gap:var(--mantine-spacing-xs);row-gap:var(--mantine-spacing-xs);grid-auto-rows:minmax(calc(2.25rem * var(--mantine-scale)),auto)}.ScheduleAvailabilityEditor_dayCell{grid-column:1;padding-right:var(--mantine-spacing-sm)}.ScheduleAvailabilityEditor_rangeStart{grid-column:2}.ScheduleAvailabilityEditor_rangeSeparator{grid-column:3}.ScheduleAvailabilityEditor_rangeEnd{grid-column:4}.ScheduleAvailabilityEditor_addAction{grid-column:5}.ScheduleAvailabilityEditor_removeAction{grid-column:6}.ScheduleAvailabilityEditor_unavailable{grid-column:2 / -1}.ScheduleAvailabilityEditor_overrideToggle{min-height:calc(2.25rem * var(--mantine-scale))}.CalendarRow_row{width:100%;padding:6px 8px;border-radius:var(--mantine-radius-sm);text-align:left}.CalendarRow_row[data-interactive]{cursor:pointer}.CalendarRow_row[data-interactive]:hover{background-color:light-dark(var(--mantine-color-gray-0),var(--mantine-color-dark-6))}.CalendarRow_eyeSlot{display:flex}.CalendarRow_eyeOff{color:light-dark(var(--mantine-color-gray-5),var(--mantine-color-dark-2))}.CalendarRow_eyeHint{color:light-dark(var(--mantine-color-gray-5),var(--mantine-color-dark-2));opacity:0;transition:opacity .15s ease}.CalendarRow_row:hover .CalendarRow_eyeHint{opacity:1}.SectionHeader_chevron{transition:transform .2s ease;cursor:pointer;color:light-dark(var(--mantine-color-gray-7),var(--mantine-color-dark-1))}.SectionHeader_chevron[data-collapsed]{transform:rotate(-90deg)}.SectionHeader_chevron:hover{background-color:light-dark(var(--mantine-color-gray-0),var(--mantine-color-dark-6))}.SectionHeader_title{cursor:pointer}.SchedulingWorkspace_root{display:flex;align-items:stretch;gap:var(--mantine-spacing-md);height:100%;width:100%}.SchedulingWorkspace_sidebar{flex-shrink:0;width:300px;overflow-y:auto}.SchedulingWorkspace_calendar{position:relative;display:flex;flex-direction:column;flex:1;min-width:0;overflow-x:auto}.SchedulingWorkspace_multiCalendar{flex:1;min-height:0}.SchedulingWorkspace_timezoneNotice{flex-shrink:0;margin-top:var(--mantine-spacing-xs)}.SchedulingWorkspace_bookingPane{flex-shrink:0;width:320px;display:flex;flex-direction:column;overflow-y:auto}.SchedulingWorkspace_bookingPaneWide{width:760px}.SchedulingWorkspace_alert{margin-bottom:var(--mantine-spacing-xs)}
|
|
1
|
+
.AppointmentFinder_timeGrid{row-gap:var(--mantine-spacing-xs)}.AppointmentFinder_layout{display:flex;flex-wrap:wrap;gap:var(--mantine-spacing-lg);align-items:flex-start;flex:1 1 auto;min-height:0}.AppointmentFinder_form{flex:1 1 300px;min-width:0;max-width:420px;max-height:100%;overflow-y:auto}.AppointmentFinder_results{flex:1 1 380px;min-width:0;max-height:100%;overflow-y:auto}.AppointmentFinder_form>*,.AppointmentFinder_results>*{flex-shrink:0}.AppointmentFinder_codePill{max-width:14rem}.AppointmentFinder_requiredLabel:after{content:" *";color:var(--mantine-color-error)}:root{--fc-sticky-header-footer-z: 3;--fc-popover-z: 4}.fc-ZK{z-index:var(--fc-popover-z)!important}.fc-5R{isolation:isolate}.fc-O6,.fc-O6 *,.fc-O6 *:before,.fc-O6 *:after{box-sizing:border-box!important}.fc-fF,.fc-fF *{cursor:not-allowed!important}.fc-Rp{-ms-overflow-style:none!important;scrollbar-width:none!important}.fc-Rp::-webkit-scrollbar{display:none!important}.fc-tp{flex-shrink:0!important}.fc-MU .fc-rr{display:flex!important;flex-direction:row!important;flex-wrap:wrap!important}.fc-ob .fc-rr>*{float:left!important}[dir=rtl] .fc-ob .fc-rr>*,.fc-ob[dir=rtl] .fc-rr>*{float:right!important}.fc-ob .fc-rr:after{content:""!important;display:block!important;clear:both!important}.fc-iz{cursor:pointer!important}.fc-W6{cursor:n-resize!important}.fc-9e{cursor:s-resize!important}.fc-wb{cursor:w-resize!important}[dir=rtl] .fc-wb,.fc-0b{cursor:e-resize!important}[dir=rtl] .fc-0b{cursor:w-resize!important}.fc-Gz{cursor:col-resize!important}.fc-wZ,.fc-oJ,.fc-9A{position:absolute!important;box-sizing:content-box!important;width:100%!important;height:100%!important}.fc-wZ{padding:10px!important;margin:-10px!important}.fc-oJ{padding-left:10px!important;padding-right:10px!important;margin-left:-10px!important;margin-right:-10px!important}.fc-9A{padding-top:10px!important;padding-bottom:10px!important;margin-top:-10px!important;margin-bottom:-10px!important}.fc-Yf{position:absolute;inset:0 -5px}.fc-AQ{-webkit-user-select:none;-moz-user-select:none;user-select:none}.fc-MJ{visibility:hidden}.fc-Yq{border:0!important}.fc-3R{border-left:0!important;border-right:0!important}.fc-dv{border-top:0!important;border-bottom:0!important}.fc-Yk{border-top:0!important}.fc-b1{border-bottom:0!important}.fc-W7{border-inline-start:0!important}.fc-Eu{border-inline-end:0!important}.fc-bH{display:flex!important;flex-direction:row!important}.fc-Ih{display:flex!important;flex-direction:column!important}.fc-BH{flex-grow:1!important}.fc-1Y{flex-grow:1!important;flex-basis:0!important;min-width:0!important;min-height:0!important}.fc-Ux{min-height:0!important}.fc-ZM{flex-grow:1!important;flex-basis:0!important;min-width:0!important}.fc-Gx{width:100%!important;table-layout:fixed!important;border:0!important;border-collapse:separate!important;border-spacing:0!important}.fc-Gx>thead{-moz-column-break-inside:avoid!important;break-inside:avoid!important;page-break-inside:avoid!important}.fc-Gx>tbody{background:transparent!important}.fc-Gx>thead>tr>th,.fc-Gx>tbody>tr>th,.fc-Gx>tbody>tr>td{vertical-align:top!important;font-weight:inherit;text-align:inherit}.fc-33{padding:0!important}.fc-5V{padding-top:0!important;padding-bottom:0!important}.fc-b4{margin:0!important}.fc-H8{margin-top:0!important;margin-bottom:0!important}.fc-Oq{margin-left:0!important;margin-right:0!important}.fc-oX{white-space:nowrap!important}.fc-LF{white-space:pre!important}.fc-Gg{overflow-anchor:none}.fc-87{pointer-events:none!important}.fc-5o{overflow:hidden!important}.fc-7P{white-space:nowrap!important;overflow:hidden!important}.fc-XV{position:relative!important}.fc-Ew{position:absolute!important}.fc-bN{inset-inline-start:0!important}.fc-cH{inset-inline-end:0!important}.fc-wd{position:absolute!important;inset:0!important}.fc-sd,.fc-ar{position:absolute!important;left:0!important;right:0!important}.fc-0H,.fc-63{position:absolute!important;top:0!important;bottom:0!important}.fc-sd{top:0!important}.fc-63{left:0!important;right:0!important;width:0!important}@media not print{.fc-WL{position:sticky!important}.fc-i6{position:sticky!important;top:0!important}.fc-n4{position:sticky!important;inset-inline-start:0!important}.fc-q0{position:sticky!important;top:0!important;z-index:var(--fc-sticky-header-footer-z)!important}}.fc-F2{box-sizing:content-box!important}.fc-rZ{position:absolute!important;left:-10000px!important}.fc-dG{align-items:center!important}.fc-jB{align-items:flex-start!important}.fc-6B{align-items:flex-end!important}.fc-89{position:sticky!important;bottom:0!important;z-index:var(--fc-sticky-header-footer-z)!important}.fc-Se>*{margin-top:-1px!important}.fc-Se>*>*{height:1px!important}.fc-qu{-moz-column-break-inside:avoid!important;break-inside:avoid!important;page-break-inside:avoid!important}.fc-sn{min-height:4em!important}.fc-os{display:flow-root!important}.fc-P0{z-index:0}.fc-hB{z-index:1}.fc-b7{z-index:2}.fc-BR{z-index:3}.fc-eM{z-index:4}.fc-zy{z-index:5}.fc-xI{z-index:1000}.fc-hJ{z-index:9999}.fc-0t:focus-visible{z-index:2}:root{--fc-classic-button: #334155;--fc-classic-button-border: #334155;--fc-classic-button-strong: #1e293b;--fc-classic-button-strong-border: #0f172a;--fc-classic-button-outline: #47556980;--fc-classic-button-foreground: #fff;--fc-classic-primary: #3788d8;--fc-classic-primary-foreground: #fff;--fc-classic-event: var(--fc-classic-primary);--fc-classic-event-contrast: var(--fc-classic-primary-foreground);--fc-classic-background-event: #22c55e;--fc-classic-background-event-opacity: 15%;--fc-classic-background-event-foreground-opacity: 50%;--fc-classic-highlight: #cffafe66;--fc-classic-today: #facc1526;--fc-classic-now: #ef4444;--fc-classic-small-dot-width: 8px;--fc-classic-large-dot-width: 10px;--fc-classic-background: #ffffff;--fc-classic-faint: #0000000A;--fc-classic-muted: #00000014;--fc-classic-strong: #00000024;--fc-classic-foreground: #030712;--fc-classic-faint-foreground: #9ca3af;--fc-classic-muted-foreground: #6b7280;--fc-classic-border: #ddd;--fc-classic-strong-border: #9ca3af}@media not print{[data-color-scheme=dark]{--fc-classic-highlight: #3b82f633;--fc-classic-today: #fef08a1A;--fc-classic-background: #030712;--fc-classic-faint: #ffffff0A;--fc-classic-muted: #ffffff14;--fc-classic-strong: #ffffff24;--fc-classic-foreground: #fff;--fc-classic-faint-foreground: #4b5563;--fc-classic-muted-foreground: #9ca3af;--fc-classic-border: #1f2937;--fc-classic-strong-border: #374151}}.fc-classic-n5m{font-size:16px;line-height:1.5;--fc-classic-border-style: solid}.fc-classic-Z9U{appearance:button;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0;margin:0;border:0;padding:0}.fc-classic-JiE{color:inherit;text-decoration:inherit}.fc-classic-3Lc{pointer-events:none}.fc-classic-1EY{position:absolute}.fc-classic-eYX{position:relative}.fc-classic-OUe{position:sticky}.fc-classic-MaV{inset-inline:0}.fc-classic-AWB{inset-block:0}.fc-classic-11a{inset-inline-start:-4px}.fc-classic-rbS{inset-inline-start:0}.fc-classic-bEw{inset-inline-end:-4px}.fc-classic-2w8{inset-inline-end:2px}.fc-classic-dnf{inset-inline-end:-3px}.fc-classic-YDC{top:-4px}.fc-classic-n9G{top:0}.fc-classic-2ik{top:2px}.fc-classic-ERR{top:50%}.fc-classic-fJL{bottom:-4px}.fc-classic-jGI{bottom:0}.fc-classic-1V6{left:50%}.fc-classic-88I{order:-1}.fc-classic-gMS{margin:4px}.fc-classic-bvX{margin:8px}.fc-classic-jD5{margin:16px}.fc-classic-J04{margin-inline:-5px}.fc-classic-cKZ{margin-inline:2px}.fc-classic-rVY{margin-inline:4px}.fc-classic-fn8{margin-inline:8px}.fc-classic-148{margin-inline:1px}.fc-classic-cJ3{margin-block:2px}.fc-classic-V9v{margin-block:4px}.fc-classic-2tF{margin-block:8px}.fc-classic-Jzj{margin-inline-start:2px}.fc-classic-Mde{margin-inline-start:8px}.fc-classic-qvL{margin-inline-start:1px}.fc-classic-kp0{margin-inline-end:-4px}.fc-classic-3e1{margin-inline-end:2px}.fc-classic-B3G{margin-inline-end:2.5%}.fc-classic-9hC{margin-inline-end:1px}.fc-classic-Dq8{margin-top:-4px}.fc-classic-a10{margin-top:-5px}.fc-classic-Ika{margin-bottom:1px}.fc-classic-nHS{margin-bottom:-1px}.fc-classic-F99{margin-left:-4px}.fc-classic-eF2{display:contents}.fc-classic-I48{display:block}.fc-classic-dl1{display:flex}.fc-classic-i3N{display:grid}.fc-classic-pps{display:none}.fc-classic-3wQ{width:8px;height:8px}.fc-classic-vnf{width:16px;height:16px}.fc-classic-XUJ{width:20px;height:20px}.fc-classic-uuA{height:8px}.fc-classic-zrJ{height:12px}.fc-classic-84e{min-height:2px}.fc-classic-mhE{min-height:12px}.fc-classic-toR{min-height:1px}.fc-classic-roZ{width:50%}.fc-classic-hza{width:8px}.fc-classic-4Tv{width:5px}.fc-classic-kMV{max-width:200px}.fc-classic-2KU{min-width:0}.fc-classic-aNc{min-width:220px}.fc-classic-yi0{flex-shrink:0}.fc-classic-1Zl{flex-shrink:1}.fc-classic-OLq{flex-shrink:100}.fc-classic-1El{flex-grow:1}.fc-classic-jmT{rotate:180deg}.fc-classic-sgX{flex-direction:column}.fc-classic-1sP{flex-direction:row}.fc-classic-dNl{flex-wrap:wrap}.fc-classic-XpK{align-items:center}.fc-classic-N2M{justify-content:space-between}.fc-classic-E9P{justify-content:center}.fc-classic-LMv{justify-content:flex-end}.fc-classic-aTF{gap:2px}.fc-classic-NWN{gap:4px}.fc-classic-wwb{gap:12px}.fc-classic-yth{gap:20px}.fc-classic-sI7{align-self:flex-start}.fc-classic-pKG{overflow:hidden}.fc-classic-Ig4{border-radius:4px}.fc-classic-AAA{border-radius:3.40282e38px}.fc-classic-Fvv{border-radius:4px}.fc-classic-kmj{border-start-start-radius:4px;border-end-start-radius:4px}.fc-classic-Skl{border-start-end-radius:4px;border-end-end-radius:4px}.fc-classic-C2g{border-end-end-radius:4px}.fc-classic-Z7Q{border-top-left-radius:4px;border-top-right-radius:4px}.fc-classic-2qh{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.fc-classic-wsy{border-style:var(--fc-classic-border-style);border-width:1px}.fc-classic-5JF{border-style:var(--fc-classic-border-style);border-width:4px}.fc-classic-yDA{border-style:var(--fc-classic-border-style);border-width:5px}.fc-classic-Mjo{border-style:var(--fc-classic-border-style);border-width:calc(var(--fc-classic-small-dot-width) / 2)}.fc-classic-GOm{border-style:var(--fc-classic-border-style);border-width:calc(var(--fc-classic-large-dot-width) / 2)}.fc-classic-1Wx{border-inline-style:var(--fc-classic-border-style);border-inline-width:1px}.fc-classic-ybF{border-inline-style:var(--fc-classic-border-style);border-inline-width:5px}.fc-classic-JIC{border-block-style:var(--fc-classic-border-style);border-block-width:1px}.fc-classic-XM3{border-block-style:var(--fc-classic-border-style);border-block-width:5px}.fc-classic-3J4{border-inline-start-style:var(--fc-classic-border-style);border-inline-start-width:1px}.fc-classic-hhi{border-inline-start-style:var(--fc-classic-border-style);border-inline-start-width:5px}.fc-classic-jIH{border-inline-start-style:var(--fc-classic-border-style);border-inline-start-width:6px}.fc-classic-USt{border-inline-end-style:var(--fc-classic-border-style);border-inline-end-width:1px}.fc-classic-Bda{border-inline-end-style:var(--fc-classic-border-style);border-inline-end-width:5px}.fc-classic-ku3{border-top-style:var(--fc-classic-border-style);border-top-width:1px}.fc-classic-bLA{border-top-style:var(--fc-classic-border-style);border-top-width:6px}.fc-classic-zi1{border-bottom-style:var(--fc-classic-border-style);border-bottom-width:1px}.fc-classic-TN2{--fc-classic-border-style: dotted;border-style:dotted}.fc-classic-C1x{border-color:var(--fc-classic-border)}.fc-classic-sYT{border-color:var(--fc-classic-now)}.fc-classic-0Pr{border-color:var(--fc-classic-primary)}.fc-classic-vXO{border-color:var(--fc-classic-button-border)}.fc-classic-rQI{border-color:var(--fc-classic-button-strong-border)}.fc-classic-C0k{border-color:var(--fc-classic-strong-border)}.fc-classic-lNM{border-color:var(--fc-event-color)}.fc-classic-d0j{border-color:#0000}.fc-classic-Pqk{border-inline-color:#0000}.fc-classic-rif{border-block-color:#0000}.fc-classic-0qY{border-inline-start-color:var(--fc-classic-now)}.fc-classic-LaM{border-inline-start-color:#000}.fc-classic-5JV{border-inline-end-color:#000}.fc-classic-1Aa{border-top-color:var(--fc-classic-now)}.fc-classic-Jk3{background-color:var(--fc-classic-background)}.fc-classic-iYS{background-color:var(--fc-classic-faint)}.fc-classic-hLU{background-color:var(--fc-classic-highlight)}.fc-classic-k3f{background-color:var(--fc-classic-muted)}.fc-classic-YjJ{background-color:var(--fc-event-color)}@media not print{@supports (color:color-mix(in lab,red,red)){.fc-classic-hsC{background-color:color-mix(in oklab,var(--fc-event-color) var(--fc-classic-background-event-opacity),transparent)}}@supports not (color:color-mix(in lab,red,red)){.fc-classic-hsC{position:relative;isolation:isolate}.fc-classic-hsC:before{content:"";position:absolute;inset:0;background-color:var(--fc-event-color);opacity:var(--fc-classic-background-event-opacity);z-index:-1}}}.fc-classic-JWq{background-color:var(--fc-classic-button)}.fc-classic-Adi{background-color:var(--fc-classic-button-strong)}.fc-classic-KUX{padding:2px}.fc-classic-XJa{padding:6px}.fc-classic-3N5{padding:8px}.fc-classic-7A6{padding:1px}.fc-classic-oQ2{padding-inline:2px}.fc-classic-Eaq{padding-inline:10px}.fc-classic-Apf{padding-inline:12px}.fc-classic-F1o{padding-inline:1px}.fc-classic-2rx{padding-block:2px}.fc-classic-Jhn{padding-block:4px}.fc-classic-End{padding-block:6px}.fc-classic-dl6{padding-block:8px}.fc-classic-P9h{padding-block:60px}.fc-classic-z5u{padding-block:1px}.fc-classic-a7i{padding-inline-start:2px}.fc-classic-166{padding-top:2px}.fc-classic-8ub{padding-bottom:2px}.fc-classic-cM0{padding-bottom:16px}.fc-classic-HXA{text-align:center}.fc-classic-2HE{text-align:end}.fc-classic-AVD{font-size:24px;line-height:calc(2/1.5)}.fc-classic-vQz{font-size:11px;line-height:1.09091}.fc-classic-1Po{font-size:16px;line-height:1.5}.fc-classic-9yp{font-size:14px;line-height:calc(1.25/.875)}.fc-classic-a3B{font-size:12px;line-height:calc(1/.75)}.fc-classic-DIS{font-weight:700}.fc-classic-IPx{text-overflow:ellipsis}.fc-classic-TZ4{white-space:nowrap}.fc-classic-jm6{white-space:pre}.fc-classic-taq{color:var(--fc-classic-faint-foreground)}.fc-classic-m9h{color:var(--fc-classic-muted-foreground)}.fc-classic-GAX{color:var(--fc-classic-foreground)}.fc-classic-RnT{color:var(--fc-classic-button-foreground)}.fc-classic-i9F{color:var(--fc-event-contrast-color)}.fc-classic-L1Y{font-style:italic}.fc-classic-lMo{opacity:.5}.fc-classic-Q3Z{opacity:.65}.fc-classic-iTG{opacity:.75}.fc-classic-MGT{opacity:var(--fc-classic-background-event-foreground-opacity)}.fc-classic-1kP{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a}.fc-classic-tkw{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}.fc-classic-qNs{box-shadow:0 1px 3px #0000001a,0 1px 2px -1px #0000001a}.fc-classic-A3h{box-shadow:0 0 0 1px var(--fc-classic-ring-color, currentcolor)}.fc-classic-yKG{--fc-classic-ring-color: var(--fc-classic-background) }.fc-classic-2R2{outline-style:solid;outline-width:1px}.fc-classic-0Bj{outline-style:solid;outline-width:2px}.fc-classic-fFh{outline-offset:-2px}.fc-classic-3Xj{outline-offset:2px}.fc-classic-lYz{outline-color:var(--fc-classic-button-outline)}.fc-classic-zIi{outline-color:var(--fc-classic-primary)}.fc-classic-SDU{background:linear-gradient(var(--fc-classic-muted),var(--fc-classic-muted))var(--fc-classic-background)}.fc-classic-BaR{background:linear-gradient(var(--fc-classic-strong),var(--fc-classic-strong))var(--fc-classic-background)}.fc-classic-mAY:not(:is(:where(.fc-classic-bCs):hover *)){opacity:.65}@media not all and (hover:hover){.fc-classic-mAY{opacity:.65}}@media not print{.fc-classic-hbn{background-color:var(--fc-classic-today)}}@media(hover:hover){.fc-classic-vs6:is(:where(.fc-classic-bCs):hover *){display:block}.fc-classic-Ogp:is(:where(.fc-classic-bCs):hover *){text-decoration-line:underline}}.fc-classic-uk6:first-child{border-start-start-radius:4px;border-end-start-radius:4px}.fc-classic-Tuc:last-child{border-start-end-radius:4px;border-end-end-radius:4px}@media(hover:hover){.fc-classic-bqK:hover{border-color:var(--fc-classic-button-strong-border)}.fc-classic-9Rj:hover{background-color:var(--fc-classic-button-strong)}.fc-classic-Ubk:hover{background-color:var(--fc-classic-faint)}.fc-classic-4yP:hover{background-color:var(--fc-classic-muted)}.fc-classic-Eu0:hover{text-decoration-line:underline}}.fc-classic-OIx:focus-visible{background-color:var(--fc-classic-faint)}.fc-classic-tCP:focus-visible{background-color:var(--fc-classic-muted)}.fc-classic-uqo:focus-visible{outline-style:solid;outline-width:2px}.fc-classic-sOR:focus-visible{outline-style:solid;outline-width:3px}.fc-classic-aIH:active{border-color:var(--fc-classic-button-strong-border)}.fc-classic-5ky:active{background-color:var(--fc-classic-button-strong)}.fc-classic-28F:active{background-color:var(--fc-classic-muted)}.fc-classic-8gz:active{background-color:var(--fc-classic-strong)}@media print{.fc-classic-jsy{border-width:1px}.fc-classic-nQ5{border-color:var(--fc-classic-button-strong-border)}.fc-classic-DO7{border-color:var(--fc-event-color)}.fc-classic-4MR{border-color:#000}.fc-classic-vwH{background-color:#fff}.fc-classic-cfp{color:#000}}[dir=rtl] .fc-classic-jY6{rotate:none}[dir=rtl] .fc-classic-asP{rotate:180deg}.CalendarBase_wrapper{height:100%;display:flex;flex-direction:column}.CalendarBase_calendar{flex-grow:1;min-width:0}.dayGridMonth.CalendarBase_calendar,.timeGridWeek.CalendarBase_calendar{min-width:480px}.dayGridMonth.CalendarBase_calendar .CalendarBase_listItemEventBefore{display:none}.CalendarBase_clickable{cursor:pointer}.CalendarBase_selectedRange{background-color:light-dark(#228be62e,#4dabf73d)}.CalendarBase_eventTitle{order:1}.CalendarBase_eventTime{order:2}.CalendarBase_eventInner{overflow:hidden}.CalendarBase_eventTitle{white-space:normal;overflow:visible}.CalendarBase_eventTitle{font-weight:500}.CalendarBase_eventTime{font-size:10px}.CalendarBase_shortEvent{.CalendarBase_eventInner{flex-direction:column;align-items:inherit}}.CalendarBase_backgroundEventInner>div{opacity:1}.CalendarBase_backgroundEvent{container-type:size}@container (height < 50px){.CalendarBase_backgroundEventInner>div{font-size:10px;padding-top:2px}}.CalendarBase_backgroundEvent{border-radius:var(--mantine-radius-sm)}:root{--fc-classic-today: #b8e0ff4d;[data-color-scheme=dark]{--fc-classic-today: #406e934d}}.CalendarBase_nonBusinessHours{background-color:light-dark(#0000000A,#FFFFFF2A)}.dayGridMonth .CalendarBase_event{background-color:var(--fc-event-color);.CalendarBase_eventInner{color:var(--fc-event-contrast-color)}}.Calendar_wrapper{.appointment{--cal-color: light-dark(var(--mantine-color-white), var(--mantine-color-white));--cal-background-color: light-dark(var(--mantine-color-blue-6), var(--mantine-color-blue-8))}.slot{--cal-color: light-dark(var(--mantine-color-dark-4), var(--mantine-color-gray-4));--cal-background-color: light-dark(var(--mantine-color-gray-4), var(--mantine-color-gray-7))}.dayGridMonth .Calendar_event:hover{background-color:var(--cal-background-color)}.appointment.proposed{.Calendar_eventTitle:after{content:" (proposed)"}}.appointment.pending{--cal-color: light-dark(var(--mantine-color-blue-8), var(--mantine-color-blue-6));--cal-background-color: light-dark(var(--mantine-color-white), var(--mantine-color-black));border:1px solid var(--cal-color)}.appointment.waitlist{.Calendar_eventTitle:after{content:" (waitlist)"}}.appointment.checked-in{.Calendar_eventTitle:after{content:" (checked in)"}}.appointment.cancelled{.Calendar_eventTitle:after{content:" (cancelled)"}--cal-color: light-dark(var(--mantine-color-black), var(--mantine-color-white));--cal-background-color: light-dark(var(--mantine-color-red-3), var(--mantine-color-red-8))}.appointment.noshow{.Calendar_eventTitle:after{content:" (no show)"}}.appointment.entered-in-error{.Calendar_eventTitle:after{content:" (entered in error)"}}.slot.free{--cal-color: light-dark(var(--mantine-color-dark-7), var(--mantine-color-gray-1));--cal-background-color: light-dark(var(--mantine-color-green-1), var(--mantine-color-green-9))}.slot.entered-in-error{--cal-color: light-dark(var(--mantine-color-dark-7), var(--mantine-color-black));--cal-background-color: light-dark(var(--mantine-color-red-1), var(--mantine-color-red-3))}.Calendar_event,.Calendar_backgroundEvent{background-color:var(--cal-background-color);.Calendar_eventInner{color:var(--cal-color)}.Calendar_backgroundEventInner>div{color:var(--cal-color)}}.Calendar_eventTitle:after{opacity:.7}}.appointment .MultiCalendar_eventInner{margin-left:8px;&:before{content:"";width:4px;position:absolute;top:2px;left:2px;bottom:2px;border-radius:8px;background-color:var(--status-color)}}.appointment.pending,.appointment.proposed{--status-color: var(--mantine-color-yellow-3)}.appointment.booked,.appointment.arrived,.appointment.fulfilled,.appointment.checked-in{--status-color: var(--mantine-color-blue-3)}.appointment.cancelled,.appointment.noshow,.appointment.entered-in-error{--status-color: var(--mantine-color-red-3)}.appointment.waitlist{--status-color: var(--mantine-color-gray-3)}.MultiCalendar_eventTime{color:var(--mantine-color-gray-2)}.ScheduleAvailabilityEditor_week{display:grid;grid-template-columns:repeat(5,max-content) 1fr;align-items:center;column-gap:var(--mantine-spacing-xs);row-gap:var(--mantine-spacing-xs);grid-auto-rows:minmax(calc(2.25rem * var(--mantine-scale)),auto)}.ScheduleAvailabilityEditor_dayCell{grid-column:1;padding-right:var(--mantine-spacing-sm)}.ScheduleAvailabilityEditor_rangeStart{grid-column:2}.ScheduleAvailabilityEditor_rangeSeparator{grid-column:3}.ScheduleAvailabilityEditor_rangeEnd{grid-column:4}.ScheduleAvailabilityEditor_addAction{grid-column:5}.ScheduleAvailabilityEditor_removeAction{grid-column:6}.ScheduleAvailabilityEditor_unavailable{grid-column:2 / -1}.ScheduleAvailabilityEditor_overrideToggle{min-height:calc(2.25rem * var(--mantine-scale))}.AppointmentDetails_details{flex:1;min-height:0}.AppointmentDetails_actions{margin-top:auto}.CalendarRow_row{width:100%;padding:6px 8px;border-radius:var(--mantine-radius-sm);text-align:left}.CalendarRow_row[data-interactive]{cursor:pointer}.CalendarRow_row[data-interactive]:hover{background-color:light-dark(var(--mantine-color-gray-0),var(--mantine-color-dark-6))}.CalendarRow_eyeSlot{display:flex}.CalendarRow_eyeOff{color:light-dark(var(--mantine-color-gray-5),var(--mantine-color-dark-2))}.CalendarRow_eyeHint{color:light-dark(var(--mantine-color-gray-5),var(--mantine-color-dark-2));opacity:0;transition:opacity .15s ease}.CalendarRow_row:hover .CalendarRow_eyeHint{opacity:1}.SectionHeader_chevron{transition:transform .2s ease;cursor:pointer;color:light-dark(var(--mantine-color-gray-7),var(--mantine-color-dark-1))}.SectionHeader_chevron[data-collapsed]{transform:rotate(-90deg)}.SectionHeader_chevron:hover{background-color:light-dark(var(--mantine-color-gray-0),var(--mantine-color-dark-6))}.SectionHeader_title{cursor:pointer}.SchedulingWorkspace_root{display:flex;align-items:stretch;gap:var(--mantine-spacing-md);height:100%;width:100%}.SchedulingWorkspace_sidebar{flex-shrink:0;width:300px;overflow-y:auto}.SchedulingWorkspace_calendar{position:relative;display:flex;flex-direction:column;flex:1;min-width:0;overflow-x:auto}.SchedulingWorkspace_multiCalendar{flex:1;min-height:0}.SchedulingWorkspace_timezoneNotice{flex-shrink:0;margin-top:var(--mantine-spacing-xs)}.SchedulingWorkspace_pane{flex-shrink:0;width:320px;display:flex;flex-direction:column;overflow-y:auto}.SchedulingWorkspace_paneWide{width:760px}.SchedulingWorkspace_alert{margin-bottom:var(--mantine-spacing-xs)}
|
|
2
2
|
/*# sourceMappingURL=index.css.map */
|