@campminder/ds 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,771 @@
1
+ import * as React$1 from 'react';
2
+ import { ReactNode } from 'react';
3
+ import { Accordion as Accordion$1 } from '@base-ui/react/accordion';
4
+ import { Avatar as Avatar$1 } from '@base-ui/react/avatar';
5
+ import * as class_variance_authority_types from 'class-variance-authority/types';
6
+ import { useRender } from '@base-ui/react/use-render';
7
+ import { VariantProps } from 'class-variance-authority';
8
+ import { Button as Button$1 } from '@base-ui/react/button';
9
+ import { z } from 'zod';
10
+ import { Checkbox as Checkbox$1 } from '@base-ui/react/checkbox';
11
+ import { Command as Command$1 } from 'cmdk';
12
+ import { Dialog as Dialog$1 } from '@base-ui/react/dialog';
13
+ import { Menu } from '@base-ui/react/menu';
14
+ import RPNInput, { Country } from 'react-phone-number-input';
15
+ export { getCountries, isValidPhoneNumber } from 'react-phone-number-input';
16
+ import { Popover as Popover$1 } from '@base-ui/react/popover';
17
+ import { Progress as Progress$1 } from '@base-ui/react/progress';
18
+ import { ScrollArea as ScrollArea$1 } from '@base-ui/react/scroll-area';
19
+ import { Select as Select$1 } from '@base-ui/react/select';
20
+ import { Separator as Separator$1 } from '@base-ui/react/separator';
21
+ import { Tooltip as Tooltip$1 } from '@base-ui/react/tooltip';
22
+ import { ToasterProps } from 'sonner';
23
+ import { Switch as Switch$1 } from '@base-ui/react/switch';
24
+ import { Tabs as Tabs$1 } from '@base-ui/react/tabs';
25
+ import { ClassValue } from 'clsx';
26
+
27
+ declare function Accordion({ className, ...props }: Accordion$1.Root.Props): React$1.JSX.Element;
28
+ declare function AccordionItem({ className, ...props }: Accordion$1.Item.Props): React$1.JSX.Element;
29
+ declare function AccordionTrigger({ className, children, ...props }: Accordion$1.Trigger.Props): React$1.JSX.Element;
30
+ declare function AccordionPanel({ className, children, ...props }: Accordion$1.Panel.Props): React$1.JSX.Element;
31
+
32
+ interface AddonItem {
33
+ id: string;
34
+ name: string;
35
+ description?: string;
36
+ price: number;
37
+ /** Groups add-ons under a shared subheader. If unset, all add-ons render as a flat list. */
38
+ group?: string;
39
+ }
40
+ declare function AddonCard({ addon, selected, onToggle, }: {
41
+ addon: AddonItem;
42
+ selected: boolean;
43
+ onToggle: () => void;
44
+ }): React$1.JSX.Element;
45
+ interface InlineAddonPickerProps {
46
+ addons: AddonItem[];
47
+ selectedAddonIds: string[];
48
+ onToggleAddon: (addon: AddonItem) => void;
49
+ className?: string;
50
+ }
51
+ declare function InlineAddonPicker({ addons, selectedAddonIds, onToggleAddon, className, }: InlineAddonPickerProps): React$1.JSX.Element;
52
+
53
+ declare function Avatar({ className, size, ...props }: Avatar$1.Root.Props & {
54
+ size?: "default" | "sm" | "lg";
55
+ }): React$1.JSX.Element;
56
+ declare function AvatarImage({ className, ...props }: Avatar$1.Image.Props): React$1.JSX.Element;
57
+ declare function AvatarFallback({ className, ...props }: Avatar$1.Fallback.Props): React$1.JSX.Element;
58
+ declare function AvatarBadge({ className, ...props }: React$1.ComponentProps<"span">): React$1.JSX.Element;
59
+ declare function AvatarGroup({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
60
+ declare function AvatarGroupCount({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
61
+
62
+ declare const badgeVariants: (props?: ({
63
+ variant?: "link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | "success" | "verified" | null | undefined;
64
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
65
+ declare function Badge({ className, variant, render, children, ...props }: useRender.ComponentProps<"span"> & VariantProps<typeof badgeVariants>): React$1.ReactElement<unknown, string | React$1.JSXElementConstructor<any>>;
66
+
67
+ declare function Breadcrumb({ className, ...props }: React$1.ComponentProps<"nav">): React$1.JSX.Element;
68
+ declare function BreadcrumbList({ className, ...props }: React$1.ComponentProps<"ol">): React$1.JSX.Element;
69
+ declare function BreadcrumbItem({ className, ...props }: React$1.ComponentProps<"li">): React$1.JSX.Element;
70
+ declare function BreadcrumbLink({ className, render, ...props }: useRender.ComponentProps<"a">): React$1.ReactElement<unknown, string | React$1.JSXElementConstructor<any>>;
71
+ declare function BreadcrumbPage({ className, ...props }: React$1.ComponentProps<"span">): React$1.JSX.Element;
72
+ declare function BreadcrumbSeparator({ children, className, ...props }: React$1.ComponentProps<"li">): React$1.JSX.Element;
73
+ declare function BreadcrumbEllipsis({ className, ...props }: React$1.ComponentProps<"span">): React$1.JSX.Element;
74
+
75
+ declare const buttonVariants: (props?: ({
76
+ variant?: "link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined;
77
+ size?: "default" | "sm" | "lg" | "xs" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
78
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
79
+ type ButtonProps = Button$1.Props & VariantProps<typeof buttonVariants> & {
80
+ /** When true, renders a spinner and disables the button. */
81
+ loading?: boolean;
82
+ };
83
+ declare function Button({ className, variant, size, loading, disabled, children, ...props }: ButtonProps): React$1.JSX.Element;
84
+
85
+ interface CamperProfile$1 {
86
+ id: string;
87
+ firstName: string;
88
+ lastName: string;
89
+ photoUrl?: string;
90
+ dateOfBirth?: string;
91
+ grade?: string;
92
+ gender?: string;
93
+ pronouns?: string;
94
+ tshirtSize?: string;
95
+ }
96
+ declare const TSHIRT_SIZES: string[];
97
+ declare function makeCamperFormSchema(isAgeBased: boolean, slim?: boolean, requireGender?: boolean): z.ZodObject<{
98
+ firstName: z.ZodString;
99
+ lastName: z.ZodString;
100
+ dateOfBirth: z.ZodString | z.ZodOptional<z.ZodString>;
101
+ grade: z.ZodString | z.ZodOptional<z.ZodString>;
102
+ gender: z.ZodString | z.ZodOptional<z.ZodString>;
103
+ pronouns: z.ZodOptional<z.ZodString>;
104
+ tshirtSize: z.ZodOptional<z.ZodString>;
105
+ }, z.core.$strip>;
106
+ type CamperFormData = {
107
+ firstName: string;
108
+ lastName: string;
109
+ dateOfBirth?: string;
110
+ grade?: string;
111
+ gender?: string;
112
+ pronouns?: string;
113
+ tshirtSize?: string;
114
+ };
115
+ interface CamperFormConfig {
116
+ /** 'age' shows DOB only; 'grade' shows DOB + grade dropdown. Defaults to 'grade'. */
117
+ ageGradeType?: "grade" | "age";
118
+ /** Show the gender field. Defaults to true. */
119
+ showGender?: boolean;
120
+ /** Show the t-shirt size field. Defaults to true. */
121
+ showTshirt?: boolean;
122
+ /** Show the pronouns field. Defaults to false. */
123
+ showPronouns?: boolean;
124
+ /** Label for the grade field. Defaults to "Grade". Pass e.g. "Grade entering in 2027" for camp-specific framing. */
125
+ gradeFieldLabel?: string;
126
+ }
127
+ interface CamperFormProps {
128
+ config?: CamperFormConfig;
129
+ editing: CamperProfile$1 | null;
130
+ onSave: (data: CamperFormData) => void;
131
+ onCancel: () => void;
132
+ showCancel: boolean;
133
+ slim?: boolean;
134
+ dottedSubmit?: boolean;
135
+ bare?: boolean;
136
+ formId?: string;
137
+ hideSubmit?: boolean;
138
+ hideTitle?: boolean;
139
+ onValidChange?: (valid: boolean) => void;
140
+ /** Title shown above the form when adding a new camper. Defaults to "Add camper". */
141
+ addTitle?: string;
142
+ /** Title shown above the form when editing an existing camper. Receives the camper's first name. Defaults to `Edit {firstName}`. */
143
+ editTitle?: (firstName: string) => string;
144
+ }
145
+ declare function CamperForm({ config, editing, onSave, onCancel, showCancel, slim, dottedSubmit, bare, formId, hideSubmit, hideTitle, onValidChange, addTitle, editTitle, }: CamperFormProps): React$1.JSX.Element;
146
+
147
+ declare function Card({ className, size, ...props }: React$1.ComponentProps<"div"> & {
148
+ size?: "default" | "sm";
149
+ }): React$1.JSX.Element;
150
+ declare function CardHeader({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
151
+ declare function CardTitle({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
152
+ declare function CardDescription({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
153
+ declare function CardAction({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
154
+ declare function CardContent({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
155
+ declare function CardFooter({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
156
+
157
+ declare function Checkbox({ className, ...props }: Checkbox$1.Root.Props): React$1.JSX.Element;
158
+
159
+ declare function Dialog({ ...props }: Dialog$1.Root.Props): React$1.JSX.Element;
160
+ declare function DialogTrigger({ ...props }: Dialog$1.Trigger.Props): React$1.JSX.Element;
161
+ declare function DialogPortal({ ...props }: Dialog$1.Portal.Props): React$1.JSX.Element;
162
+ declare function DialogClose({ ...props }: Dialog$1.Close.Props): React$1.JSX.Element;
163
+ declare function DialogOverlay({ className, ...props }: Dialog$1.Backdrop.Props): React$1.JSX.Element;
164
+ declare function DialogContent({ className, children, showCloseButton, ...props }: Dialog$1.Popup.Props & {
165
+ showCloseButton?: boolean;
166
+ }): React$1.JSX.Element;
167
+ declare function DialogHeader({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
168
+ declare function DialogFooter({ className, showCloseButton, children, ...props }: React$1.ComponentProps<"div"> & {
169
+ showCloseButton?: boolean;
170
+ }): React$1.JSX.Element;
171
+ declare function DialogTitle({ className, ...props }: Dialog$1.Title.Props): React$1.JSX.Element;
172
+ declare function DialogDescription({ className, ...props }: Dialog$1.Description.Props): React$1.JSX.Element;
173
+
174
+ declare function Command({ className, ...props }: React$1.ComponentProps<typeof Command$1>): React$1.JSX.Element;
175
+ declare function CommandDialog({ title, description, children, className, showCloseButton, ...props }: Omit<React$1.ComponentProps<typeof Dialog>, "children"> & {
176
+ title?: string;
177
+ description?: string;
178
+ className?: string;
179
+ showCloseButton?: boolean;
180
+ children: React$1.ReactNode;
181
+ }): React$1.JSX.Element;
182
+ declare function CommandInput({ className, ...props }: React$1.ComponentProps<typeof Command$1.Input>): React$1.JSX.Element;
183
+ declare function CommandList({ className, ...props }: React$1.ComponentProps<typeof Command$1.List>): React$1.JSX.Element;
184
+ declare function CommandEmpty({ className, ...props }: React$1.ComponentProps<typeof Command$1.Empty>): React$1.JSX.Element;
185
+ declare function CommandGroup({ className, ...props }: React$1.ComponentProps<typeof Command$1.Group>): React$1.JSX.Element;
186
+ declare function CommandSeparator({ className, ...props }: React$1.ComponentProps<typeof Command$1.Separator>): React$1.JSX.Element;
187
+ declare function CommandItem({ className, children, ...props }: React$1.ComponentProps<typeof Command$1.Item>): React$1.JSX.Element;
188
+ declare function CommandShortcut({ className, ...props }: React$1.ComponentProps<"span">): React$1.JSX.Element;
189
+
190
+ declare function DropdownMenu(props: Menu.Root.Props): React$1.JSX.Element;
191
+ declare function DropdownMenuTrigger({ ...props }: Menu.Trigger.Props): React$1.JSX.Element;
192
+ declare function DropdownMenuGroup(props: Menu.Group.Props): React$1.JSX.Element;
193
+ declare function DropdownMenuContent({ className, sideOffset, align, ...props }: Menu.Popup.Props & {
194
+ sideOffset?: Menu.Positioner.Props["sideOffset"];
195
+ align?: Menu.Positioner.Props["align"];
196
+ }): React$1.JSX.Element;
197
+ declare function DropdownMenuItem({ className, ...props }: Menu.Item.Props): React$1.JSX.Element;
198
+ declare function DropdownMenuCheckboxItem({ className, children, ...props }: Menu.CheckboxItem.Props): React$1.JSX.Element;
199
+ declare function DropdownMenuRadioGroup(props: Menu.RadioGroup.Props): React$1.JSX.Element;
200
+ declare function DropdownMenuRadioItem({ className, children, ...props }: Menu.RadioItem.Props): React$1.JSX.Element;
201
+ declare function DropdownMenuGroupLabel({ className, ...props }: Menu.GroupLabel.Props): React$1.JSX.Element;
202
+ declare function DropdownMenuSeparator({ className, ...props }: Menu.Separator.Props): React$1.JSX.Element;
203
+ declare function DropdownMenuSubmenu(props: Menu.SubmenuRoot.Props): React$1.JSX.Element;
204
+ declare function DropdownMenuSubmenuTrigger({ className, children, ...props }: Menu.SubmenuTrigger.Props): React$1.JSX.Element;
205
+ declare function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<"span">): React$1.JSX.Element;
206
+
207
+ declare function Label({ className, ...props }: React$1.ComponentProps<"label">): React$1.JSX.Element;
208
+
209
+ declare function FieldSet({ className, ...props }: React.ComponentProps<"fieldset">): React$1.JSX.Element;
210
+ declare function FieldLegend({ className, variant, ...props }: React.ComponentProps<"legend"> & {
211
+ variant?: "legend" | "label";
212
+ }): React$1.JSX.Element;
213
+ declare function FieldGroup({ className, ...props }: React.ComponentProps<"div">): React$1.JSX.Element;
214
+ declare const fieldVariants: (props?: ({
215
+ orientation?: "horizontal" | "vertical" | "responsive" | null | undefined;
216
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
217
+ declare function Field({ className, orientation, ...props }: React.ComponentProps<"div"> & VariantProps<typeof fieldVariants>): React$1.JSX.Element;
218
+ declare function FieldContent({ className, ...props }: React.ComponentProps<"div">): React$1.JSX.Element;
219
+ declare function FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>): React$1.JSX.Element;
220
+ declare function FieldTitle({ className, ...props }: React.ComponentProps<"div">): React$1.JSX.Element;
221
+ declare function FieldDescription({ className, ...props }: React.ComponentProps<"p">): React$1.JSX.Element;
222
+ declare function FieldSeparator({ children, className, ...props }: React.ComponentProps<"div"> & {
223
+ children?: React.ReactNode;
224
+ }): React$1.JSX.Element;
225
+ declare function FieldError({ className, children, errors, ...props }: React.ComponentProps<"div"> & {
226
+ errors?: Array<{
227
+ message?: string;
228
+ } | undefined>;
229
+ }): React$1.JSX.Element | null;
230
+
231
+ declare function Input({ className, type, ...props }: React$1.ComponentProps<"input">): React$1.JSX.Element;
232
+
233
+ declare function InputGroup({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
234
+ declare const inputGroupAddonVariants: (props?: ({
235
+ align?: "inline-end" | "inline-start" | "block-start" | "block-end" | null | undefined;
236
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
237
+ declare function InputGroupAddon({ className, align, ...props }: React$1.ComponentProps<"div"> & VariantProps<typeof inputGroupAddonVariants>): React$1.JSX.Element;
238
+ declare const inputGroupButtonVariants: (props?: ({
239
+ size?: "sm" | "xs" | "icon-xs" | "icon-sm" | null | undefined;
240
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
241
+ declare function InputGroupButton({ className, type, variant, size, ...props }: Omit<React$1.ComponentProps<typeof Button>, "size" | "type"> & VariantProps<typeof inputGroupButtonVariants> & {
242
+ type?: "button" | "submit" | "reset";
243
+ }): React$1.JSX.Element;
244
+ declare function InputGroupText({ className, ...props }: React$1.ComponentProps<"span">): React$1.JSX.Element;
245
+ declare function InputGroupInput({ className, ...props }: React$1.ComponentProps<"input">): React$1.JSX.Element;
246
+ declare function InputGroupTextarea({ className, ...props }: React$1.ComponentProps<"textarea">): React$1.JSX.Element;
247
+
248
+ interface PackageTier {
249
+ id: string;
250
+ name: string;
251
+ weeks: number;
252
+ price: number;
253
+ dates: string;
254
+ startDate: string;
255
+ endDate: string;
256
+ popular?: boolean;
257
+ }
258
+ interface CampWeek {
259
+ id: string;
260
+ name: string;
261
+ dates: string;
262
+ startDate: string;
263
+ endDate: string;
264
+ }
265
+ interface SessionAddon {
266
+ id: string;
267
+ name: string;
268
+ description?: string;
269
+ price: number;
270
+ }
271
+ interface PackageSessionSelection {
272
+ id: string;
273
+ name: string;
274
+ dates: string;
275
+ startDate: string;
276
+ endDate: string;
277
+ price: number;
278
+ selectedWeekIds?: string[];
279
+ }
280
+ interface PackagePickerProps {
281
+ packages: PackageTier[];
282
+ campWeeks?: CampWeek[];
283
+ deposit?: number;
284
+ selectedSession: {
285
+ id: string;
286
+ selectedWeekIds?: string[];
287
+ } | null;
288
+ onSelectSession: (session: PackageSessionSelection) => void;
289
+ onClearSession: () => void;
290
+ sessionAddons?: SessionAddon[];
291
+ selectedAddonIds: string[];
292
+ onToggleAddon: (addon: SessionAddon) => void;
293
+ }
294
+ declare function PackagePicker({ packages, campWeeks, deposit, selectedSession, onSelectSession, onClearSession, sessionAddons, selectedAddonIds, onToggleAddon, }: PackagePickerProps): React$1.JSX.Element;
295
+
296
+ type Person$1 = CamperProfile$1;
297
+
298
+ declare function parseDOB(dob: string): Date | null;
299
+ declare function formatDOB(dob: string): string;
300
+ declare function calcAge(dob: string): number | null;
301
+ type RenderCamperFormFn = (props: {
302
+ editing: CamperProfile$1 | null;
303
+ onSave: (data: CamperFormData) => void;
304
+ onCancel: () => void;
305
+ formMode: "add" | "edit";
306
+ }) => ReactNode;
307
+ interface PersonListProps {
308
+ people: CamperProfile$1[];
309
+ /** Consumer generates the person id (e.g. crypto.randomUUID() or a server id). */
310
+ onAddPerson: (person: CamperProfile$1) => void;
311
+ onUpdatePerson: (person: CamperProfile$1) => void;
312
+ onRemovePerson: (id: string) => void;
313
+ config?: CamperFormConfig;
314
+ onNext: () => void;
315
+ nextLabel?: string;
316
+ /** Title shown above the inline add form. Defaults to "Add person". */
317
+ addTitle?: string;
318
+ /** Title shown above the inline edit form. Defaults to (n) => `Edit ${n}`. */
319
+ editTitle?: (firstName: string) => string;
320
+ /** Optional override for the form. When provided, replaces the default CamperForm composition. */
321
+ renderCamperForm?: RenderCamperFormFn;
322
+ }
323
+ declare function PersonList({ people, onAddPerson, onUpdatePerson, onRemovePerson, config, onNext, nextLabel, addTitle, editTitle, renderCamperForm, }: PersonListProps): React$1.JSX.Element;
324
+ interface PersonSelectProps {
325
+ people: CamperProfile$1[];
326
+ initialSelectedIds?: string[];
327
+ onUpdatePerson: (person: CamperProfile$1) => void;
328
+ /** Called with the final selectedIds when the user clicks Next. */
329
+ onConfirm: (selectedIds: string[]) => void;
330
+ config?: CamperFormConfig;
331
+ nextLabel?: string;
332
+ addTitle?: string;
333
+ editTitle?: (firstName: string) => string;
334
+ renderCamperForm?: RenderCamperFormFn;
335
+ }
336
+ declare function PersonSelect({ people: allPeople, initialSelectedIds, onUpdatePerson, onConfirm, config, nextLabel, addTitle, editTitle, renderCamperForm, }: PersonSelectProps): React$1.JSX.Element;
337
+
338
+ interface Person {
339
+ id: string;
340
+ firstName: string;
341
+ lastName: string;
342
+ photoUrl?: string;
343
+ dateOfBirth?: string;
344
+ grade?: string | number;
345
+ }
346
+ interface PersonTabsProps {
347
+ people: Person[];
348
+ activeIdx: number;
349
+ onChange: (idx: number) => void;
350
+ /** Optional badge rendered to the right of the person name (e.g. session count, "skip"). */
351
+ renderBadge?: (person: Person, idx: number) => React.ReactNode;
352
+ }
353
+ declare function PersonTabs({ people, activeIdx, onChange, renderBadge, }: PersonTabsProps): React$1.JSX.Element | null;
354
+
355
+ type PhoneInputProps = Omit<React$1.ComponentProps<typeof RPNInput>, "onChange" | "value" | "defaultCountry"> & {
356
+ value: string;
357
+ onChange: (value: string) => void;
358
+ defaultCountry?: Country;
359
+ /**
360
+ * Country picker variant. "popover" (default) shows a searchable list in a
361
+ * popover — good for desktop. "native" uses a native <select> — required on
362
+ * iOS where the popover + autofocused search field cause keyboard chaos.
363
+ * If you don't know which to use, pick "native" for mobile-first consumers.
364
+ */
365
+ variant?: "popover" | "native";
366
+ className?: string;
367
+ "aria-invalid"?: boolean;
368
+ };
369
+ declare function PhoneInput({ className, onChange, value, defaultCountry, variant, ...props }: PhoneInputProps): React$1.JSX.Element;
370
+
371
+ interface PhotoUploadProps {
372
+ value?: string;
373
+ onChange: (dataUrl: string | undefined) => void;
374
+ className?: string;
375
+ variant?: "rect" | "avatar";
376
+ label?: string;
377
+ }
378
+ declare function PhotoUpload({ value, onChange, className, variant, label, }: PhotoUploadProps): React$1.JSX.Element;
379
+
380
+ declare function Popover({ ...props }: Popover$1.Root.Props): React$1.JSX.Element;
381
+ declare function PopoverTrigger({ ...props }: Popover$1.Trigger.Props): React$1.JSX.Element;
382
+ declare function PopoverContent({ className, align, alignOffset, side, sideOffset, ...props }: Popover$1.Popup.Props & Pick<Popover$1.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">): React$1.JSX.Element;
383
+ declare function PopoverHeader({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
384
+ declare function PopoverTitle({ className, ...props }: Popover$1.Title.Props): React$1.JSX.Element;
385
+ declare function PopoverDescription({ className, ...props }: Popover$1.Description.Props): React$1.JSX.Element;
386
+
387
+ declare function Progress({ className, value, ...props }: Progress$1.Root.Props): React$1.JSX.Element;
388
+
389
+ declare function ScrollArea({ className, children, ...props }: ScrollArea$1.Root.Props): React$1.JSX.Element;
390
+ declare function ScrollBar({ className, orientation, ...props }: ScrollArea$1.Scrollbar.Props): React$1.JSX.Element;
391
+
392
+ declare const Select: typeof Select$1.Root;
393
+ declare function SelectGroup({ className, ...props }: Select$1.Group.Props): React$1.JSX.Element;
394
+ declare function SelectValue({ className, ...props }: Select$1.Value.Props): React$1.JSX.Element;
395
+ declare function SelectTrigger({ className, size, children, ...props }: Select$1.Trigger.Props & {
396
+ size?: "sm" | "default";
397
+ }): React$1.JSX.Element;
398
+ declare function SelectContent({ className, children, side, sideOffset, align, alignOffset, alignItemWithTrigger, ...props }: Select$1.Popup.Props & Pick<Select$1.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset" | "alignItemWithTrigger">): React$1.JSX.Element;
399
+ declare function SelectLabel({ className, ...props }: Select$1.GroupLabel.Props): React$1.JSX.Element;
400
+ declare function SelectItem({ className, children, ...props }: Select$1.Item.Props): React$1.JSX.Element;
401
+ declare function SelectSeparator({ className, ...props }: Select$1.Separator.Props): React$1.JSX.Element;
402
+ declare function SelectScrollUpButton({ className, ...props }: React$1.ComponentProps<typeof Select$1.ScrollUpArrow>): React$1.JSX.Element;
403
+ declare function SelectScrollDownButton({ className, ...props }: React$1.ComponentProps<typeof Select$1.ScrollDownArrow>): React$1.JSX.Element;
404
+
405
+ declare function Separator({ className, orientation, ...props }: Separator$1.Props): React$1.JSX.Element;
406
+
407
+ interface MockSession$1 {
408
+ id: string;
409
+ name: string;
410
+ description?: string;
411
+ dates: string;
412
+ startDate: string;
413
+ endDate: string;
414
+ gradeMin?: number;
415
+ gradeMax?: number;
416
+ gender?: "male" | "female" | "coed";
417
+ duration: string;
418
+ price: number;
419
+ capacity: "available" | "waitlist" | "full";
420
+ spotsLeft?: number;
421
+ group?: string;
422
+ mandatoryFees?: {
423
+ id: string;
424
+ name: string;
425
+ amount: number;
426
+ }[];
427
+ earlyBirdAmount?: number;
428
+ deposit?: number;
429
+ sessionPrograms?: SessionProgram$1[];
430
+ programSelectionMode?: "single" | "multi";
431
+ programsLabel?: string;
432
+ freeEvent?: boolean;
433
+ }
434
+ interface SessionProgram$1 {
435
+ id: string;
436
+ name: string;
437
+ dates?: string;
438
+ price?: number;
439
+ deposit?: number;
440
+ gradeMin?: number | null;
441
+ gradeMax?: number | null;
442
+ }
443
+ interface SessionCardProfile {
444
+ earlyBirdDiscount?: {
445
+ amount: number;
446
+ expiresDate: string;
447
+ };
448
+ registrationFee?: number;
449
+ requiresApproval?: boolean;
450
+ saveASpotMode?: boolean;
451
+ }
452
+ interface SessionPickerProfile extends SessionCardProfile {
453
+ brand?: {
454
+ secondaryColor?: string;
455
+ };
456
+ }
457
+ declare function mandatoryTotal(session: {
458
+ mandatoryFees?: {
459
+ name: string;
460
+ amount: number;
461
+ }[];
462
+ }): number;
463
+ declare function effectivePrice(session: {
464
+ price: number;
465
+ earlyBirdAmount?: number;
466
+ mandatoryFees?: {
467
+ name: string;
468
+ amount: number;
469
+ }[];
470
+ }, profile: {
471
+ earlyBirdDiscount?: {
472
+ amount: number;
473
+ expiresDate: string;
474
+ };
475
+ } | null | undefined): number;
476
+ declare function fakeSpotsLeft(session: MockSession$1): number | null;
477
+ declare function ExpandDesc({ text, selected, }: {
478
+ text: string;
479
+ selected: boolean;
480
+ }): React$1.JSX.Element;
481
+ declare function SessionCard({ session, isSelected, onToggle, profile, ineligibleReason, addonsSlot, }: {
482
+ session: MockSession$1;
483
+ isSelected: boolean;
484
+ onToggle: () => void;
485
+ profile?: SessionCardProfile | null;
486
+ ineligibleReason?: string | null;
487
+ addonsSlot?: ReactNode;
488
+ }): React$1.JSX.Element;
489
+ declare function InlineSessionPicker({ sessions, selectedIds, onToggle, profile, getIneligibilityReason, renderSessionAddons, }: {
490
+ sessions: MockSession$1[];
491
+ selectedIds: string[];
492
+ onToggle: (s: MockSession$1) => void;
493
+ profile?: SessionPickerProfile | null;
494
+ getIneligibilityReason?: (s: MockSession$1) => string | null;
495
+ renderSessionAddons?: (session: MockSession$1) => ReactNode;
496
+ }): React$1.JSX.Element;
497
+
498
+ interface MockSession {
499
+ id: string;
500
+ name: string;
501
+ startDate: string;
502
+ endDate: string;
503
+ dates: string;
504
+ gender?: "male" | "female" | "coed";
505
+ gradeMin?: number;
506
+ gradeMax?: number;
507
+ price: number;
508
+ capacity: "available" | "waitlist" | "full";
509
+ spotsLeft?: number;
510
+ mandatoryFees?: {
511
+ id: string;
512
+ name: string;
513
+ amount: number;
514
+ }[];
515
+ earlyBirdAmount?: number;
516
+ deposit?: number;
517
+ sessionPrograms?: SessionProgram[];
518
+ programSelectionMode?: "single" | "multi";
519
+ }
520
+ interface SessionProgram {
521
+ id: string;
522
+ name: string;
523
+ dates?: string;
524
+ price?: number;
525
+ deposit?: number;
526
+ gradeMin?: number | null;
527
+ gradeMax?: number | null;
528
+ }
529
+ interface CamperProfile {
530
+ id: string;
531
+ firstName: string;
532
+ lastName: string;
533
+ dateOfBirth?: string;
534
+ grade?: string;
535
+ gender?: string;
536
+ }
537
+ interface EligibilityOptions {
538
+ /** "grade" (default) or "age". Controls whether the eligibility check uses grade or age-from-DOB. */
539
+ ageGradeType?: "grade" | "age";
540
+ }
541
+ interface PricingOptions {
542
+ /** Camp's early-bird discount. Applied to base price + mandatory fees when active. */
543
+ earlyBirdDiscount?: {
544
+ amount: number;
545
+ expiresDate: string;
546
+ };
547
+ /** Save-a-spot mode forces effective price to 0. */
548
+ saveASpotMode?: boolean;
549
+ }
550
+ interface DepositOptions {
551
+ /** Fallback when neither the session nor any selected program defines a deposit. */
552
+ defaultDeposit?: number;
553
+ }
554
+ /**
555
+ * Reason this camper can't take this session, or null if eligible.
556
+ * Returns user-facing short strings: "Boys only", "Grades 3–7", "Ages 8–12".
557
+ */
558
+ declare function eligibilityReason(camper: CamperProfile, session: MockSession, options?: EligibilityOptions): string | null;
559
+ /**
560
+ * Effective price for this session given selected programs and pricing options.
561
+ * Save-a-spot mode forces 0. Programs with their own prices override the base
562
+ * session price when at least one priced program is selected.
563
+ */
564
+ declare function computeSessionPrice(session: MockSession, selectedProgramIds: string[], options?: PricingOptions): number;
565
+ /**
566
+ * Deposit amount due for this session and selected programs.
567
+ *
568
+ * Priority: session.deposit → sum of selected program deposits → options.defaultDeposit → undefined.
569
+ */
570
+ declare function computeSessionDeposit(session: MockSession, selectedProgramIds: string[], options?: DepositOptions): number | undefined;
571
+
572
+ declare function Sheet({ ...props }: Dialog$1.Root.Props): React$1.JSX.Element;
573
+ declare function SheetTrigger({ ...props }: Dialog$1.Trigger.Props): React$1.JSX.Element;
574
+ declare function SheetClose({ ...props }: Dialog$1.Close.Props): React$1.JSX.Element;
575
+ declare function SheetContent({ className, children, side, showCloseButton, ...props }: Dialog$1.Popup.Props & {
576
+ side?: "top" | "right" | "bottom" | "left";
577
+ showCloseButton?: boolean;
578
+ }): React$1.JSX.Element;
579
+ declare function SheetHeader({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
580
+ declare function SheetFooter({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
581
+ declare function SheetTitle({ className, ...props }: Dialog$1.Title.Props): React$1.JSX.Element;
582
+ declare function SheetDescription({ className, ...props }: Dialog$1.Description.Props): React$1.JSX.Element;
583
+
584
+ declare function TooltipProvider({ delay, ...props }: Tooltip$1.Provider.Props): React$1.JSX.Element;
585
+ declare function Tooltip({ ...props }: Tooltip$1.Root.Props): React$1.JSX.Element;
586
+ declare function TooltipTrigger({ ...props }: Tooltip$1.Trigger.Props): React$1.JSX.Element;
587
+ declare function TooltipContent({ className, side, sideOffset, align, alignOffset, children, ...props }: Tooltip$1.Popup.Props & Pick<Tooltip$1.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">): React$1.JSX.Element;
588
+
589
+ type SidebarContextProps = {
590
+ state: "expanded" | "collapsed";
591
+ open: boolean;
592
+ setOpen: (open: boolean) => void;
593
+ openMobile: boolean;
594
+ setOpenMobile: (open: boolean) => void;
595
+ isMobile: boolean;
596
+ toggleSidebar: () => void;
597
+ };
598
+ declare function useSidebar(): SidebarContextProps;
599
+ declare function SidebarProvider({ defaultOpen, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }: React$1.ComponentProps<"div"> & {
600
+ defaultOpen?: boolean;
601
+ open?: boolean;
602
+ onOpenChange?: (open: boolean) => void;
603
+ }): React$1.JSX.Element;
604
+ declare function Sidebar({ side, variant, collapsible, className, children, dir, ...props }: React$1.ComponentProps<"div"> & {
605
+ side?: "left" | "right";
606
+ variant?: "sidebar" | "floating" | "inset";
607
+ collapsible?: "offcanvas" | "icon" | "none";
608
+ }): React$1.JSX.Element;
609
+ declare function SidebarTrigger({ className, onClick, ...props }: React$1.ComponentProps<typeof Button>): React$1.JSX.Element;
610
+ declare function SidebarRail({ className, ...props }: React$1.ComponentProps<"button">): React$1.JSX.Element;
611
+ declare function SidebarInset({ className, ...props }: React$1.ComponentProps<"main">): React$1.JSX.Element;
612
+ declare function SidebarInput({ className, ...props }: React$1.ComponentProps<typeof Input>): React$1.JSX.Element;
613
+ declare function SidebarHeader({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
614
+ declare function SidebarFooter({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
615
+ declare function SidebarSeparator({ className, ...props }: React$1.ComponentProps<typeof Separator>): React$1.JSX.Element;
616
+ declare function SidebarContent({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
617
+ declare function SidebarGroup({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
618
+ declare function SidebarGroupLabel({ className, render, ...props }: useRender.ComponentProps<"div"> & React$1.ComponentProps<"div">): React$1.ReactElement<unknown, string | React$1.JSXElementConstructor<any>>;
619
+ declare function SidebarGroupAction({ className, render, ...props }: useRender.ComponentProps<"button"> & React$1.ComponentProps<"button">): React$1.ReactElement<unknown, string | React$1.JSXElementConstructor<any>>;
620
+ declare function SidebarGroupContent({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
621
+ declare function SidebarMenu({ className, ...props }: React$1.ComponentProps<"ul">): React$1.JSX.Element;
622
+ declare function SidebarMenuItem({ className, ...props }: React$1.ComponentProps<"li">): React$1.JSX.Element;
623
+ declare const sidebarMenuButtonVariants: (props?: ({
624
+ variant?: "default" | "outline" | null | undefined;
625
+ size?: "default" | "sm" | "lg" | null | undefined;
626
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
627
+ declare function SidebarMenuButton({ render, isActive, variant, size, tooltip, className, ...props }: useRender.ComponentProps<"button"> & React$1.ComponentProps<"button"> & {
628
+ isActive?: boolean;
629
+ tooltip?: string | React$1.ComponentProps<typeof TooltipContent>;
630
+ } & VariantProps<typeof sidebarMenuButtonVariants>): React$1.JSX.Element;
631
+ declare function SidebarMenuAction({ className, render, showOnHover, ...props }: useRender.ComponentProps<"button"> & React$1.ComponentProps<"button"> & {
632
+ showOnHover?: boolean;
633
+ }): React$1.ReactElement<unknown, string | React$1.JSXElementConstructor<any>>;
634
+ declare function SidebarMenuBadge({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
635
+ declare function SidebarMenuSkeleton({ className, showIcon, ...props }: React$1.ComponentProps<"div"> & {
636
+ showIcon?: boolean;
637
+ }): React$1.JSX.Element;
638
+ declare function SidebarMenuSub({ className, ...props }: React$1.ComponentProps<"ul">): React$1.JSX.Element;
639
+ declare function SidebarMenuSubItem({ className, ...props }: React$1.ComponentProps<"li">): React$1.JSX.Element;
640
+ declare function SidebarMenuSubButton({ render, size, isActive, className, ...props }: useRender.ComponentProps<"a"> & React$1.ComponentProps<"a"> & {
641
+ size?: "sm" | "md";
642
+ isActive?: boolean;
643
+ }): React$1.ReactElement<unknown, string | React$1.JSXElementConstructor<any>>;
644
+
645
+ declare function Skeleton({ className, ...props }: React.ComponentProps<"div">): React$1.JSX.Element;
646
+
647
+ /**
648
+ * Toast notifications, built on sonner and themed to the Campminder semantic
649
+ * tokens.
650
+ *
651
+ * Mount a single <Toaster /> near the app root, then fire toasts imperatively
652
+ * with `toast(...)` from `sonner`:
653
+ *
654
+ * toast.success("Pipeline archived.", {
655
+ * action: { label: "Undo", onClick: () => restore() },
656
+ * })
657
+ *
658
+ * The success / error / info / warning / loading icons are pinned to the
659
+ * lucide set. Colors are driven by `--color-popover`,
660
+ * `--color-popover-foreground`, and `--color-border`, so the toast follows the
661
+ * active persona and dark-mode overlays automatically — there is no per-surface
662
+ * theming, and no next-themes dependency; the token vars do the work.
663
+ */
664
+ declare function Toaster({ ...props }: ToasterProps): React$1.JSX.Element;
665
+
666
+ /**
667
+ * StatusPill — lifecycle indicator for activities (pipelines, rosters, sessions,
668
+ * …). One defined status set everywhere: Active · Draft · Paused · Archived.
669
+ *
670
+ * Colors are driven by the Campminder semantic status tokens — `active` reads as
671
+ * success, `paused` as warning, `draft`/`archived` as neutral — so it follows
672
+ * persona + dark-mode overlays automatically. Presentational and self-contained:
673
+ * the consumer maps its own domain state onto an ActivityStatus.
674
+ */
675
+ type ActivityStatus = "active" | "draft" | "paused" | "archived";
676
+ declare const statusPillVariants: (props?: ({
677
+ status?: "active" | "paused" | "draft" | "archived" | null | undefined;
678
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
679
+ declare const STATUS_LABEL: Record<ActivityStatus, string>;
680
+ declare function StatusPill({ className, status, showDot, children, ...props }: React$1.ComponentProps<"span"> & VariantProps<typeof statusPillVariants> & {
681
+ /** Leading status dot. On by default; off for dense rows if needed. */
682
+ showDot?: boolean;
683
+ }): React$1.JSX.Element;
684
+
685
+ declare function StepBadge({ num, done, active, locked, }: {
686
+ num: number;
687
+ done: boolean;
688
+ active: boolean;
689
+ locked?: boolean;
690
+ }): React$1.JSX.Element;
691
+ declare function StepCard({ num, title, subtitle, summary, done, active, locked, onEdit, children, }: {
692
+ num: number;
693
+ title: string;
694
+ subtitle?: string;
695
+ /** Short summary shown when the step is collapsed/locked. */
696
+ summary?: string;
697
+ done: boolean;
698
+ active: boolean;
699
+ locked: boolean;
700
+ /** Called when the user clicks "Change" on a completed step. */
701
+ onEdit?: () => void;
702
+ children?: ReactNode;
703
+ }): React$1.JSX.Element;
704
+ interface UpcomingStep {
705
+ num: number;
706
+ title: string;
707
+ }
708
+ declare function NextStepPeek({ upcomingSteps, }: {
709
+ upcomingSteps: UpcomingStep[];
710
+ }): React$1.JSX.Element | null;
711
+
712
+ type NoticeStep = "campers" | "sessions" | "addons" | "household" | "questions" | "health" | "checkout" | "confirmation" | "all";
713
+ interface CampNotice {
714
+ id: string;
715
+ message: string;
716
+ type?: "info" | "warning";
717
+ step?: NoticeStep;
718
+ }
719
+ interface StepNoticesProps {
720
+ step: NoticeStep;
721
+ notices: CampNotice[];
722
+ className?: string;
723
+ }
724
+ declare function StepNotices({ step, notices, className }: StepNoticesProps): React$1.JSX.Element | null;
725
+
726
+ declare function Switch({ className, size, ...props }: Switch$1.Root.Props & {
727
+ size?: "sm" | "default";
728
+ }): React$1.JSX.Element;
729
+
730
+ declare function Table({ className, ...props }: React$1.ComponentProps<"table">): React$1.JSX.Element;
731
+ declare function TableHeader({ className, ...props }: React$1.ComponentProps<"thead">): React$1.JSX.Element;
732
+ declare function TableBody({ className, ...props }: React$1.ComponentProps<"tbody">): React$1.JSX.Element;
733
+ declare function TableFooter({ className, ...props }: React$1.ComponentProps<"tfoot">): React$1.JSX.Element;
734
+ declare function TableRow({ className, ...props }: React$1.ComponentProps<"tr">): React$1.JSX.Element;
735
+ declare function TableHead({ className, ...props }: React$1.ComponentProps<"th">): React$1.JSX.Element;
736
+ declare function TableCell({ className, ...props }: React$1.ComponentProps<"td">): React$1.JSX.Element;
737
+ declare function TableCaption({ className, ...props }: React$1.ComponentProps<"caption">): React$1.JSX.Element;
738
+
739
+ declare function Tabs({ className, orientation, ...props }: Tabs$1.Root.Props): React$1.JSX.Element;
740
+ declare const tabsListVariants: (props?: ({
741
+ variant?: "line" | "default" | null | undefined;
742
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
743
+ declare function TabsList({ className, variant, ...props }: Tabs$1.List.Props & VariantProps<typeof tabsListVariants>): React$1.JSX.Element;
744
+ declare function TabsTrigger({ className, ...props }: Tabs$1.Tab.Props): React$1.JSX.Element;
745
+ declare function TabsContent({ className, ...props }: Tabs$1.Panel.Props): React$1.JSX.Element;
746
+
747
+ declare function Textarea({ className, ...props }: React$1.ComponentProps<"textarea">): React$1.JSX.Element;
748
+
749
+ type Locale = {
750
+ country: string;
751
+ dateFormat: string;
752
+ dateSeparator: string;
753
+ dateOrder: [
754
+ "month" | "day" | "year",
755
+ "month" | "day" | "year",
756
+ "month" | "day" | "year"
757
+ ];
758
+ };
759
+ declare function parseCountry(tag: string): string;
760
+ declare function detectDateFormat(tag: string): Pick<Locale, "dateFormat" | "dateSeparator" | "dateOrder">;
761
+ declare function useLocale(): Locale;
762
+ declare const __internal: {
763
+ parseCountry: typeof parseCountry;
764
+ detectDateFormat: typeof detectDateFormat;
765
+ };
766
+
767
+ declare function useIsMobile(): boolean;
768
+
769
+ declare function cn(...inputs: ClassValue[]): string;
770
+
771
+ export { Accordion, AccordionItem, AccordionPanel, AccordionTrigger, type ActivityStatus, AddonCard, type AddonItem, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, type ButtonProps, type CampNotice, type CampWeek, CamperForm, type CamperFormConfig, type CamperFormData, type CamperProfile$1 as CamperProfile, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, type DepositOptions, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuGroupLabel, DropdownMenuItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSubmenu, DropdownMenuSubmenuTrigger, DropdownMenuTrigger, type EligibilityOptions, ExpandDesc, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, InlineAddonPicker, InlineSessionPicker, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, Label, type Locale, type MockSession$1 as MockSession, NextStepPeek, type NoticeStep, PackagePicker, type PackageSessionSelection, type PackageTier, type Person$1 as Person, PersonList, PersonSelect, PersonTabs, PhoneInput, PhotoUpload, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, type PricingOptions, Progress, type RenderCamperFormFn, STATUS_LABEL, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, type SessionAddon, SessionCard, type SessionCardProfile, type SessionPickerProfile, type SessionProgram$1 as SessionProgram, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, StatusPill, StepBadge, StepCard, StepNotices, Switch, TSHIRT_SIZES, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type UpcomingStep, __internal, badgeVariants, buttonVariants, calcAge, cn, computeSessionDeposit, computeSessionPrice, effectivePrice, eligibilityReason, fakeSpotsLeft, formatDOB, makeCamperFormSchema, mandatoryTotal, parseDOB, statusPillVariants, tabsListVariants, useIsMobile, useLocale, useSidebar };