@ceed/ads 0.0.94 → 0.0.96

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.
Files changed (3) hide show
  1. package/dist/index.js +1 -3025
  2. package/framer/index.js +95 -48134
  3. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -1,3025 +1 @@
1
- // src/index.ts
2
- import {
3
- useTheme,
4
- useColorScheme,
5
- useThemeProps as useThemeProps2,
6
- alertClasses,
7
- boxClasses,
8
- buttonClasses,
9
- checkboxClasses as checkboxClasses2,
10
- dividerClasses,
11
- iconButtonClasses,
12
- inputClasses,
13
- menuClasses,
14
- menuButtonClasses,
15
- menuItemClasses,
16
- optionClasses,
17
- radioClasses,
18
- radioGroupClasses,
19
- selectClasses,
20
- switchClasses as switchClasses2,
21
- tableClasses,
22
- textareaClasses,
23
- typographyClasses,
24
- formControlClasses,
25
- formLabelClasses,
26
- formHelperTextClasses,
27
- gridClasses,
28
- stackClasses,
29
- sheetClasses,
30
- modalClasses,
31
- modalCloseClasses,
32
- modalDialogClasses,
33
- modalOverflowClasses,
34
- dialogTitleClasses,
35
- dialogContentClasses,
36
- dialogActionsClasses,
37
- tooltipClasses,
38
- tabsClasses,
39
- tabListClasses,
40
- tabPanelClasses,
41
- accordionClasses,
42
- accordionDetailsClasses,
43
- accordionGroupClasses,
44
- accordionSummaryClasses,
45
- AutocompleteListbox,
46
- AutocompleteOption,
47
- autocompleteClasses,
48
- autocompleteListboxClasses,
49
- autocompleteOptionClasses,
50
- Avatar,
51
- avatarClasses,
52
- AvatarGroup,
53
- avatarGroupClasses,
54
- AspectRatio,
55
- aspectRatioClasses,
56
- Badge,
57
- badgeClasses,
58
- breadcrumbsClasses,
59
- Card,
60
- cardClasses,
61
- CardActions,
62
- cardActionsClasses,
63
- CardContent,
64
- cardContentClasses,
65
- CardCover,
66
- cardCoverClasses,
67
- CardOverflow,
68
- cardOverflowClasses,
69
- Chip,
70
- chipClasses,
71
- CircularProgress,
72
- circularProgressClasses,
73
- Drawer,
74
- drawerClasses,
75
- LinearProgress as LinearProgress2,
76
- linearProgressClasses,
77
- List,
78
- listClasses,
79
- ListDivider,
80
- listDividerClasses,
81
- ListItem,
82
- listItemClasses,
83
- ListItemButton,
84
- listItemButtonClasses,
85
- ListItemContent,
86
- listItemContentClasses,
87
- ListItemDecorator,
88
- listItemDecoratorClasses,
89
- ListSubheader,
90
- listSubheaderClasses,
91
- Link,
92
- linkClasses,
93
- Slider,
94
- sliderClasses,
95
- Step,
96
- stepClasses,
97
- StepButton,
98
- stepButtonClasses,
99
- StepIndicator,
100
- Stepper,
101
- stepperClasses,
102
- Skeleton,
103
- skeletonClasses
104
- } from "@mui/joy";
105
-
106
- // src/components/Accordions/Accordions.tsx
107
- import React from "react";
108
- import {
109
- AccordionGroup as JoyAccordionGroup,
110
- Accordion as JoyAccordion,
111
- AccordionSummary as JoyAccordionSummary,
112
- AccordionDetails as JoyAccordionDetails
113
- } from "@mui/joy";
114
- import { motion } from "framer-motion";
115
- var MotionAccordionSummary = motion(JoyAccordionSummary);
116
- var AccordionSummary = MotionAccordionSummary;
117
- AccordionSummary.displayName = "AccordionSummary";
118
- var MotionAccordionDetails = motion(JoyAccordionDetails);
119
- var AccordionDetails = MotionAccordionDetails;
120
- AccordionDetails.displayName = "AccordionDetails";
121
- var MotionAccordion = motion(JoyAccordion);
122
- function Accordion(props) {
123
- const { summary, details, variant, color, ...innerProps } = props;
124
- const inheritedVariant = variant === "solid" ? "solid" : void 0;
125
- return /* @__PURE__ */ React.createElement(MotionAccordion, { variant: inheritedVariant, color, ...innerProps }, /* @__PURE__ */ React.createElement(AccordionSummary, { variant: inheritedVariant, color }, summary), /* @__PURE__ */ React.createElement(AccordionDetails, { variant: inheritedVariant, color }, details));
126
- }
127
- Accordion.displayName = "Accordion";
128
- var MotionAccordions = motion(JoyAccordionGroup);
129
- function Accordions(props) {
130
- const { variant, color, items, ...innerProps } = props;
131
- return /* @__PURE__ */ React.createElement(MotionAccordions, { variant, color, ...innerProps }, items.map((item, index) => /* @__PURE__ */ React.createElement(
132
- Accordion,
133
- {
134
- summary: item.summary,
135
- details: item.details,
136
- index,
137
- variant,
138
- color
139
- }
140
- )));
141
- }
142
- Accordions.displayName = "Accordions";
143
-
144
- // src/components/Alert/Alert.tsx
145
- import React3 from "react";
146
- import { Alert as JoyAlert } from "@mui/joy";
147
- import { motion as motion4 } from "framer-motion";
148
-
149
- // src/components/Typography/Typography.tsx
150
- import React2 from "react";
151
- import { Typography as JoyTypography } from "@mui/joy";
152
- import { motion as motion2 } from "framer-motion";
153
- var MotionTypography = motion2(JoyTypography);
154
- var Typography = (props) => {
155
- return /* @__PURE__ */ React2.createElement(MotionTypography, { ...props });
156
- };
157
- Typography.displayName = "Typography";
158
-
159
- // src/components/Typography/index.ts
160
- var Typography_default = Typography;
161
-
162
- // src/components/Stack/Stack.tsx
163
- import { Stack as JoyStack } from "@mui/joy";
164
- import { motion as motion3 } from "framer-motion";
165
- var MotionStack = motion3(JoyStack);
166
- var Stack = MotionStack;
167
- Stack.displayName = "Stack";
168
-
169
- // src/components/Stack/index.ts
170
- var Stack_default = Stack;
171
-
172
- // src/components/Alert/Alert.tsx
173
- var MotionAlert = motion4(JoyAlert);
174
- function Alert(props) {
175
- const { title, content, actions, color = "primary", ...innerProps } = props;
176
- const innerVariant = props.variant === "outlined" ? void 0 : props.variant;
177
- return /* @__PURE__ */ React3.createElement(
178
- MotionAlert,
179
- {
180
- ...innerProps,
181
- color,
182
- endDecorator: actions
183
- },
184
- /* @__PURE__ */ React3.createElement(Stack_default, null, title && /* @__PURE__ */ React3.createElement(
185
- Typography_default,
186
- {
187
- color,
188
- variant: innerVariant,
189
- level: "title-md",
190
- fontWeight: 600
191
- },
192
- title
193
- ), /* @__PURE__ */ React3.createElement(Typography_default, { color, variant: innerVariant, level: "body-md" }, content))
194
- );
195
- }
196
- Alert.displayName = "Alert";
197
-
198
- // src/components/Autocomplete/Autocomplete.tsx
199
- import React4 from "react";
200
- import { Autocomplete as JoyAutocomplete } from "@mui/joy";
201
-
202
- // src/components/FormControl/FormControl.tsx
203
- import { FormControl as JoyFormControl, styled } from "@mui/joy";
204
- import { motion as motion5 } from "framer-motion";
205
- var MotionFormControl = styled(motion5(JoyFormControl))({
206
- width: "100%"
207
- });
208
- var FormControl = MotionFormControl;
209
- FormControl.displayName = "FormControl";
210
-
211
- // src/components/FormControl/index.ts
212
- var FormControl_default = FormControl;
213
-
214
- // src/components/FormLabel/FormLabel.tsx
215
- import { FormLabel as JoyFormLabel } from "@mui/joy";
216
- import { motion as motion6 } from "framer-motion";
217
- var MotionFormLabel = motion6(JoyFormLabel);
218
- var FormLabel = MotionFormLabel;
219
- FormLabel.displayName = "FormLabel";
220
-
221
- // src/components/FormLabel/index.ts
222
- var FormLabel_default = FormLabel;
223
-
224
- // src/components/FormHelperText/FormHelperText.tsx
225
- import { FormHelperText as JoyFormHelperText } from "@mui/joy";
226
- import { motion as motion7 } from "framer-motion";
227
- var MotionFormHelperText = motion7(JoyFormHelperText);
228
- var FormHelperText = MotionFormHelperText;
229
- FormHelperText.displayName = "FormHelperText";
230
-
231
- // src/components/FormHelperText/index.ts
232
- var FormHelperText_default = FormHelperText;
233
-
234
- // src/components/Autocomplete/Autocomplete.tsx
235
- function Autocomplete(props) {
236
- const {
237
- label,
238
- error,
239
- helperText,
240
- color,
241
- size,
242
- disabled,
243
- required,
244
- ...innerProps
245
- } = props;
246
- if (label) {
247
- return /* @__PURE__ */ React4.createElement(
248
- FormControl_default,
249
- {
250
- required,
251
- color,
252
- size,
253
- error,
254
- disabled
255
- },
256
- /* @__PURE__ */ React4.createElement(FormLabel_default, null, label),
257
- /* @__PURE__ */ React4.createElement(JoyAutocomplete, { ...innerProps }),
258
- helperText && /* @__PURE__ */ React4.createElement(FormHelperText_default, null, helperText)
259
- );
260
- }
261
- return /* @__PURE__ */ React4.createElement(
262
- JoyAutocomplete,
263
- {
264
- ...innerProps,
265
- required,
266
- color,
267
- size,
268
- disabled
269
- }
270
- );
271
- }
272
- Autocomplete.displayName = "Autocomplete";
273
-
274
- // src/components/Box/Box.tsx
275
- import { Box as JoyBox } from "@mui/joy";
276
- import { motion as motion8 } from "framer-motion";
277
- var MotionBox = motion8(JoyBox);
278
- var Box = MotionBox;
279
- Box.displayName = "Box";
280
-
281
- // src/components/Box/index.ts
282
- var Box_default = Box;
283
-
284
- // src/components/Breadcrumbs/Breadcrumbs.tsx
285
- import React6 from "react";
286
- import {
287
- Breadcrumbs as JoyBreadcrumbs,
288
- Link as JoyLink
289
- } from "@mui/joy";
290
-
291
- // src/components/Menu/Menu.tsx
292
- import React5 from "react";
293
- import {
294
- Menu as JoyMenu,
295
- MenuButton as JoyMenuButton,
296
- MenuItem as JoyMenuItem
297
- } from "@mui/joy";
298
- import { motion as motion9 } from "framer-motion";
299
- var MotionMenu = motion9(JoyMenu);
300
- var Menu = (props) => {
301
- return /* @__PURE__ */ React5.createElement(MotionMenu, { ...props });
302
- };
303
- Menu.displayName = "Menu";
304
- var MotionMenuButton = motion9(JoyMenuButton);
305
- var MenuButton = (props) => {
306
- return /* @__PURE__ */ React5.createElement(MotionMenuButton, { ...props });
307
- };
308
- MenuButton.displayName = "MenuButton";
309
- var MotionMenuItem = motion9(JoyMenuItem);
310
- var MenuItem = (props) => {
311
- return /* @__PURE__ */ React5.createElement(MotionMenuItem, { ...props });
312
- };
313
- MenuItem.displayName = "MenuItem";
314
-
315
- // src/components/Menu/index.ts
316
- var Menu_default = Menu;
317
-
318
- // src/components/Dropdown/Dropdown.tsx
319
- import { Dropdown as JoyDropdown } from "@mui/joy";
320
- import { motion as motion10 } from "framer-motion";
321
- var MotionDropdown = motion10(JoyDropdown);
322
- var Dropdown = MotionDropdown;
323
- Dropdown.displayName = "Dropdown";
324
-
325
- // src/components/Dropdown/index.ts
326
- var Dropdown_default = Dropdown;
327
-
328
- // src/components/Breadcrumbs/Breadcrumbs.tsx
329
- function Breadcrumbs(props) {
330
- const {
331
- crumbs,
332
- size,
333
- frontCrumbCounts = 1,
334
- backCrumbCounts = 3,
335
- slots: { link: Link2, ...restSlots } = { link: JoyLink },
336
- slotProps: { link: linkProps, ...restSlotProps } = {
337
- link: { color: "neutral" }
338
- },
339
- ...innerProps
340
- } = props;
341
- const _backCrumbCounts = Math.max(1, backCrumbCounts);
342
- const Crumb = (props2) => {
343
- if (props2.type === "link" && Link2) {
344
- return /* @__PURE__ */ React6.createElement(Link2, { to: props2.linkHref, href: props2.linkHref, ...linkProps }, props2.label);
345
- } else {
346
- return /* @__PURE__ */ React6.createElement(Typography_default, null, props2.label);
347
- }
348
- };
349
- const frontCrumbs = crumbs.slice(0, frontCrumbCounts).map((crumb) => /* @__PURE__ */ React6.createElement(Crumb, { ...crumb }));
350
- const backCrumbs = (frontCrumbCounts + _backCrumbCounts > crumbs.length ? crumbs.slice(frontCrumbCounts) : crumbs.slice(-_backCrumbCounts)).map((crumb) => /* @__PURE__ */ React6.createElement(Crumb, { ...crumb }));
351
- const collapsedCrumbs = crumbs.slice(frontCrumbCounts, -_backCrumbCounts).map((crumb) => /* @__PURE__ */ React6.createElement(MenuItem, null, /* @__PURE__ */ React6.createElement(Crumb, { ...crumb })));
352
- console.log(collapsedCrumbs);
353
- return /* @__PURE__ */ React6.createElement(
354
- JoyBreadcrumbs,
355
- {
356
- size,
357
- slots: restSlots,
358
- slotProps: restSlotProps,
359
- ...innerProps
360
- },
361
- frontCrumbs,
362
- collapsedCrumbs.length && /* @__PURE__ */ React6.createElement(Dropdown_default, null, /* @__PURE__ */ React6.createElement(MenuButton, { variant: "plain" }, "..."), /* @__PURE__ */ React6.createElement(Menu_default, null, collapsedCrumbs)),
363
- backCrumbs
364
- );
365
- }
366
- Breadcrumbs.displayName = "Breadcrumbs";
367
-
368
- // src/components/Button/Button.tsx
369
- import React7, { forwardRef } from "react";
370
- import { Button as JoyButton } from "@mui/joy";
371
- import { motion as motion11 } from "framer-motion";
372
- var MotionButton = motion11(JoyButton);
373
- var Button = forwardRef(
374
- (props, ref) => {
375
- return /* @__PURE__ */ React7.createElement(
376
- MotionButton,
377
- {
378
- ref,
379
- ...props
380
- }
381
- );
382
- }
383
- );
384
- Button.displayName = "Button";
385
-
386
- // src/components/Button/index.ts
387
- var Button_default = Button;
388
-
389
- // src/components/Calendar/Calendar.tsx
390
- import React10, { Fragment, forwardRef as forwardRef2, useMemo as useMemo2 } from "react";
391
- import { styled as styled2 } from "@mui/joy";
392
- import ChevronLeftIcon from "@mui/icons-material/esm/ChevronLeft.js";
393
- import ChevronRightIcon from "@mui/icons-material/esm/ChevronRight.js";
394
- import { AnimatePresence, motion as motion13 } from "framer-motion";
395
-
396
- // src/components/Calendar/utils/index.ts
397
- var getCalendarDates = (date) => {
398
- const dates = [];
399
- const firstDay = new Date(date.getFullYear(), date.getMonth(), 1);
400
- const lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);
401
- const firstWeekInThisMonth = Math.ceil((firstDay.getDay() + 1) / 7);
402
- const lastWeekInThisMonth = Math.ceil(
403
- (lastDay.getDate() + firstDay.getDay()) / 7
404
- );
405
- let day = 1;
406
- for (let i = 1; i <= lastWeekInThisMonth; i++) {
407
- const week = [];
408
- for (let j = 1; j <= 7; j++) {
409
- if (i === firstWeekInThisMonth && j < firstDay.getDay() + 1) {
410
- week.push(void 0);
411
- } else if (day > lastDay.getDate()) {
412
- week.push(void 0);
413
- } else {
414
- week.push(day);
415
- day++;
416
- }
417
- }
418
- dates.push(week);
419
- }
420
- return dates;
421
- };
422
- var getYearName = (date, locale) => {
423
- return date.toLocaleString(locale, { year: "numeric" });
424
- };
425
- var getMonthName = (date, locale) => {
426
- return date.toLocaleString(locale, { year: "numeric", month: "long" });
427
- };
428
- var getMonthNameFromIndex = (index, locale) => {
429
- return new Date(0, index).toLocaleString(locale, { month: "short" });
430
- };
431
- var getWeekdayNames = (locale) => {
432
- const currentDay = (/* @__PURE__ */ new Date()).getDay();
433
- const date = /* @__PURE__ */ new Date();
434
- date.setDate(date.getDate() - currentDay);
435
- return Array.from({ length: 7 }).map(() => {
436
- const day = date.toLocaleString(locale, { weekday: "short" });
437
- date.setDate(date.getDate() + 1);
438
- return day;
439
- });
440
- };
441
- var isToday = (date) => {
442
- const today = /* @__PURE__ */ new Date();
443
- const d = new Date(date);
444
- d.setHours(0, 0, 0, 0);
445
- today.setHours(0, 0, 0, 0);
446
- return d.getTime() === today.getTime();
447
- };
448
- var isSameDay = (date1, date2) => {
449
- const d1 = new Date(date1);
450
- const d2 = new Date(date2);
451
- d1.setHours(0, 0, 0, 0);
452
- d2.setHours(0, 0, 0, 0);
453
- return d1.getTime() === d2.getTime();
454
- };
455
- var isWithinRange = (d1, d2, date) => {
456
- const dateToCheck = new Date(date);
457
- dateToCheck.setHours(0, 0, 0, 0);
458
- const minDate = new Date(Math.min(d1.getTime(), d2.getTime()));
459
- const maxDate = new Date(Math.max(d1.getTime(), d2.getTime()));
460
- return dateToCheck >= minDate && dateToCheck <= maxDate;
461
- };
462
- var isSameMonth = (date1, date2) => {
463
- return date1.getFullYear() === date2.getFullYear() && date1.getMonth() === date2.getMonth();
464
- };
465
-
466
- // src/components/IconButton/IconButton.tsx
467
- import React8 from "react";
468
- import { IconButton as JoyIconButton } from "@mui/joy";
469
- import { motion as motion12 } from "framer-motion";
470
- var MotionIconButton = motion12(JoyIconButton);
471
- var IconButton = (props) => {
472
- return /* @__PURE__ */ React8.createElement(MotionIconButton, { ...props });
473
- };
474
- IconButton.displayName = "IconButton";
475
-
476
- // src/components/IconButton/index.ts
477
- var IconButton_default = IconButton;
478
-
479
- // src/components/Calendar/hooks/use-calendar-props.ts
480
- import { useCallback, useMemo, useState } from "react";
481
- import { useThemeProps } from "@mui/joy";
482
- var resolveView = (view, views) => {
483
- return views.includes(view) ? view : views[0];
484
- };
485
- var useCalendarProps = (inProps) => {
486
- const [uncontrolledView, setUncontrolledView] = useState(
487
- () => resolveView(inProps.view || "day", inProps.views || ["day", "month"])
488
- );
489
- const [uncontrolledValue, setUncontrolledValue] = useState(inProps.defaultValue);
490
- const [viewMonth, setViewMonth] = useState(() => {
491
- const today = /* @__PURE__ */ new Date();
492
- today.setDate(1);
493
- today.setHours(0, 0, 0, 0);
494
- return inProps.value?.[0] || inProps.defaultValue?.[0] || today;
495
- });
496
- const [[page, direction], setPage] = useState([0, 0]);
497
- const resolvedView = inProps.view ?? uncontrolledView;
498
- const paginate = (newDirection) => {
499
- setPage([page + newDirection, newDirection]);
500
- };
501
- const handleViewMonthChange = useCallback(
502
- (newMonth) => {
503
- setViewMonth(newMonth);
504
- if (resolvedView === "month") {
505
- if (viewMonth.getFullYear() !== newMonth.getFullYear()) {
506
- paginate(newMonth > viewMonth ? 1 : -1);
507
- }
508
- } else {
509
- paginate(newMonth > viewMonth ? 1 : -1);
510
- }
511
- inProps.onMonthChange?.(newMonth);
512
- },
513
- [inProps.onMonthChange, viewMonth, resolvedView]
514
- );
515
- const props = useThemeProps({
516
- props: {
517
- locale: "default",
518
- views: ["day", "month"],
519
- view: resolvedView,
520
- value: inProps.value ?? uncontrolledValue,
521
- ...inProps,
522
- // overrides
523
- onChange: inProps.value ? (
524
- // Controlled
525
- inProps.onChange
526
- ) : (
527
- // Uncontrolled
528
- (value) => {
529
- setUncontrolledValue(value);
530
- inProps.onChange?.(value);
531
- }
532
- ),
533
- onMonthChange: handleViewMonthChange,
534
- onViewChange: () => {
535
- const newView = resolvedView === "month" ? "day" : "month";
536
- const isAllowedView = !inProps.views ? true : inProps.views.includes(newView);
537
- if (!isAllowedView || inProps.view === newView)
538
- return;
539
- if (inProps.onViewChange) {
540
- inProps.onViewChange(newView);
541
- } else {
542
- setUncontrolledView(newView);
543
- }
544
- }
545
- },
546
- name: "Calendar"
547
- });
548
- const ownerState = useMemo(
549
- () => ({ ...props, viewMonth, direction }),
550
- [props, viewMonth, direction]
551
- );
552
- return [props, ownerState];
553
- };
554
-
555
- // src/components/Calendar/hooks/use-calendar.ts
556
- import { useCallback as useCallback2, useState as useState2 } from "react";
557
- var useCalendar = (ownerState) => {
558
- const [hoverDay, setHoverDay] = useState2(null);
559
- const [hoverMonth, setHoverMonth] = useState2(null);
560
- return {
561
- calendarTitle: ownerState.view === "month" ? getYearName(ownerState.viewMonth, ownerState.locale || "default") : getMonthName(ownerState.viewMonth, ownerState.locale || "default"),
562
- onPrev: useCallback2(() => {
563
- if (ownerState.view === "day") {
564
- const prevMonth = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
565
- prevMonth.setMonth(prevMonth.getMonth() - 1);
566
- ownerState.onMonthChange?.(prevMonth);
567
- } else if (ownerState.view === "month") {
568
- const prevYear = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
569
- prevYear.setFullYear(prevYear.getFullYear() - 1);
570
- ownerState.onMonthChange?.(prevYear);
571
- }
572
- }, [ownerState.onMonthChange, ownerState.viewMonth, ownerState.view]),
573
- onNext: useCallback2(() => {
574
- if (ownerState.view === "day") {
575
- const nextMonth = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
576
- nextMonth.setMonth(nextMonth.getMonth() + 1);
577
- ownerState.onMonthChange?.(nextMonth);
578
- } else if (ownerState.view === "month") {
579
- const nextYear = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
580
- nextYear.setFullYear(nextYear.getFullYear() + 1);
581
- ownerState.onMonthChange?.(nextYear);
582
- }
583
- }, [ownerState.onMonthChange, ownerState.viewMonth, ownerState.view]),
584
- getDayCellProps: useCallback2(
585
- (day) => {
586
- const thisDay = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
587
- thisDay.setHours(0, 0, 0, 0);
588
- thisDay.setDate(day);
589
- const inRange = ownerState.rangeSelection && ownerState.value && ownerState.value[0] && // NOTE: hover day is not included in the range
590
- (hoverDay && isWithinRange(ownerState.value[0], hoverDay, thisDay) || // NOTE: Selected range is included in the range
591
- ownerState.value[1] && isWithinRange(
592
- ownerState.value[0],
593
- ownerState.value[1],
594
- thisDay
595
- ));
596
- return {
597
- "aria-label": thisDay.toLocaleDateString(),
598
- "aria-current": inRange ? "date" : void 0
599
- };
600
- },
601
- [
602
- ownerState.rangeSelection,
603
- ownerState.value,
604
- ownerState.viewMonth,
605
- hoverDay
606
- ]
607
- ),
608
- getMonthCellProps: useCallback2(
609
- (monthIndex) => {
610
- const thisMonth = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
611
- thisMonth.setDate(1);
612
- thisMonth.setHours(0, 0, 0, 0);
613
- thisMonth.setMonth(monthIndex);
614
- const isMonthRangeSelection = !ownerState.views?.find((view) => view === "day") && ownerState.rangeSelection;
615
- const inRange = isMonthRangeSelection && ownerState.value && ownerState.value[0] && // NOTE: hover day is not included in the range
616
- (hoverMonth && isWithinRange(ownerState.value[0], hoverMonth, thisMonth) || // NOTE: Selected range is included in the range
617
- ownerState.value[1] && isWithinRange(
618
- ownerState.value[0],
619
- ownerState.value[1],
620
- thisMonth
621
- ));
622
- return {
623
- "aria-label": thisMonth.toLocaleDateString(),
624
- "aria-current": inRange ? "date" : void 0
625
- };
626
- },
627
- [
628
- ownerState.rangeSelection,
629
- ownerState.value,
630
- ownerState.viewMonth,
631
- hoverMonth
632
- ]
633
- ),
634
- getPickerDayProps: useCallback2(
635
- (day) => {
636
- const thisDay = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
637
- thisDay.setHours(0, 0, 0, 0);
638
- thisDay.setDate(day);
639
- const isSelected = !!ownerState.value && (isSameDay(thisDay, ownerState.value[0]) || ownerState.value[1] && isSameDay(thisDay, ownerState.value[1]));
640
- const inRange = ownerState.rangeSelection && ownerState.value && ownerState.value[0] && // NOTE: hover day is not included in the range
641
- (hoverDay && isWithinRange(ownerState.value[0], hoverDay, thisDay) || // NOTE: Selected range is included in the range
642
- ownerState.value[1] && isWithinRange(
643
- ownerState.value[0],
644
- ownerState.value[1],
645
- thisDay
646
- ));
647
- const handleDayClick = () => {
648
- if (ownerState.rangeSelection) {
649
- if (!ownerState.value) {
650
- ownerState.onChange?.([thisDay, void 0]);
651
- } else if (ownerState.value[0] && !ownerState.value[1]) {
652
- ownerState.onChange?.([
653
- new Date(
654
- Math.min(ownerState.value[0].getTime(), thisDay.getTime())
655
- ),
656
- new Date(
657
- Math.max(ownerState.value[0].getTime(), thisDay.getTime())
658
- )
659
- ]);
660
- } else {
661
- ownerState.onChange?.([thisDay, void 0]);
662
- }
663
- } else {
664
- ownerState.onChange?.([thisDay, void 0]);
665
- }
666
- setHoverDay(null);
667
- };
668
- return {
669
- isToday: isToday(thisDay),
670
- isSelected,
671
- onClick: handleDayClick,
672
- onMouseEnter: ownerState.rangeSelection && ownerState.value?.[0] && !ownerState.value?.[1] ? () => setHoverDay(thisDay) : void 0,
673
- disabled: ownerState.minDate && thisDay < ownerState.minDate || ownerState.maxDate && thisDay > ownerState.maxDate || ownerState.disableFuture && thisDay > /* @__PURE__ */ new Date() || ownerState.disablePast && thisDay < (() => {
674
- const today = /* @__PURE__ */ new Date();
675
- today.setHours(0, 0, 0, 0);
676
- return today;
677
- })(),
678
- tabIndex: -1,
679
- "aria-label": thisDay.toLocaleDateString(),
680
- "aria-selected": isSelected ? "true" : void 0,
681
- "aria-current": inRange ? "date" : void 0
682
- };
683
- },
684
- [
685
- ownerState.onChange,
686
- ownerState.value,
687
- ownerState.viewMonth,
688
- ownerState.rangeSelection,
689
- ownerState.minDate,
690
- ownerState.maxDate,
691
- ownerState.disableFuture,
692
- ownerState.disablePast,
693
- hoverDay
694
- ]
695
- ),
696
- getPickerMonthProps: useCallback2(
697
- (monthIndex) => {
698
- const thisMonth = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
699
- thisMonth.setDate(1);
700
- thisMonth.setHours(0, 0, 0, 0);
701
- thisMonth.setMonth(monthIndex);
702
- const isMonthRangeSelection = !ownerState.views?.find((view) => view === "day") && ownerState.rangeSelection;
703
- const isSelected = !!ownerState.value && (isSameMonth(thisMonth, ownerState.value[0]) || ownerState.value[1] && isSameMonth(thisMonth, ownerState.value[1]));
704
- const inRange = isMonthRangeSelection && ownerState.value && ownerState.value[0] && // NOTE: hover day is not included in the range
705
- (hoverMonth && isWithinRange(ownerState.value[0], hoverMonth, thisMonth) || // NOTE: Selected range is included in the range
706
- ownerState.value[1] && isWithinRange(
707
- ownerState.value[0],
708
- ownerState.value[1],
709
- thisMonth
710
- ));
711
- const handleMonthClick = () => {
712
- if (isMonthRangeSelection) {
713
- if (!ownerState.value) {
714
- ownerState.onChange?.([thisMonth, void 0]);
715
- } else if (ownerState.value[0] && !ownerState.value[1]) {
716
- ownerState.onChange?.([
717
- new Date(
718
- Math.min(ownerState.value[0].getTime(), thisMonth.getTime())
719
- ),
720
- new Date(
721
- Math.max(ownerState.value[0].getTime(), thisMonth.getTime())
722
- )
723
- ]);
724
- } else {
725
- ownerState.onChange?.([thisMonth, void 0]);
726
- }
727
- } else {
728
- ownerState.onViewChange?.("day");
729
- ownerState.onMonthChange?.(thisMonth);
730
- }
731
- setHoverMonth(null);
732
- };
733
- return {
734
- isSelected,
735
- onMouseEnter: isMonthRangeSelection && ownerState.value?.[0] && !ownerState.value?.[1] ? () => setHoverMonth(thisMonth) : void 0,
736
- disabled: ownerState.minDate && (() => {
737
- const lastDay = new Date(thisMonth);
738
- lastDay.setMonth(lastDay.getMonth() + 1);
739
- lastDay.setDate(0);
740
- return lastDay < ownerState.minDate;
741
- })() || ownerState.maxDate && (() => {
742
- const lastDay = new Date(thisMonth);
743
- lastDay.setDate(0);
744
- return lastDay > ownerState.maxDate;
745
- })() || ownerState.disableFuture && thisMonth > /* @__PURE__ */ new Date() || ownerState.disablePast && thisMonth < /* @__PURE__ */ new Date() && !isSameMonth(thisMonth, /* @__PURE__ */ new Date()),
746
- onClick: handleMonthClick,
747
- tabIndex: -1,
748
- "aria-label": getMonthName(thisMonth, ownerState.locale || "default"),
749
- "aria-selected": isSelected ? "true" : void 0,
750
- "aria-current": inRange ? "date" : void 0
751
- };
752
- },
753
- [
754
- ownerState.onMonthChange,
755
- ownerState.onViewChange,
756
- ownerState.onChange,
757
- ownerState.viewMonth,
758
- ownerState.locale,
759
- ownerState.value,
760
- ownerState.minDate,
761
- ownerState.maxDate,
762
- ownerState.disableFuture,
763
- ownerState.disablePast,
764
- hoverMonth
765
- ]
766
- )
767
- };
768
- };
769
-
770
- // src/components/Calendar/Calendar.tsx
771
- var CalendarRoot = styled2("div", {
772
- name: "Calendar",
773
- slot: "root"
774
- })({
775
- maxWidth: "264px"
776
- });
777
- var CalendarHeader = styled2("div", {
778
- name: "Calendar",
779
- slot: "calendarHeader"
780
- })(({ theme }) => ({
781
- display: "flex",
782
- justifyContent: "space-between",
783
- alignItems: "center",
784
- padding: theme.spacing(1)
785
- }));
786
- var CalendarViewContainer = styled2("div", {
787
- name: "Calendar",
788
- slot: "viewContainer"
789
- })(({ theme, calendarType }) => ({
790
- paddingLeft: theme.spacing(1),
791
- paddingRight: theme.spacing(1),
792
- position: "relative",
793
- overflow: "hidden",
794
- minHeight: calendarType === "datePicker" ? "250px" : "unset"
795
- }));
796
- var CalendarViewTable = styled2(motion13.table, {
797
- name: "Calendar",
798
- slot: "viewTable"
799
- })(({ theme }) => ({
800
- borderSpacing: 0,
801
- "& td, & th": {
802
- padding: 0
803
- },
804
- "& th": {
805
- paddingTop: theme.spacing(1),
806
- paddingBottom: theme.spacing(1)
807
- }
808
- }));
809
- var CalendarWeekHeaderContainer = styled2("thead", {
810
- name: "Calendar",
811
- slot: "weekHeaderContainer"
812
- })({});
813
- var CalendarDayPickerContainer = styled2("tbody", {
814
- name: "Calendar",
815
- slot: "dayPickerContainer"
816
- })({});
817
- var CalendarSwitchViewButton = styled2(Button_default, {
818
- name: "Calendar",
819
- slot: "switchViewButton"
820
- })(({ ownerState }) => [
821
- ownerState.view === "month" && {
822
- pointerEvents: "none"
823
- }
824
- ]);
825
- var CalendarDayCell = styled2("td", {
826
- name: "Calendar",
827
- slot: "dayCell"
828
- })(({ theme }) => ({
829
- // aria-current=date === range에 포함된 버튼
830
- "&[aria-current=date]": {
831
- position: "relative",
832
- "& button[aria-current=date]:not([aria-selected=true]):not(:hover):not(:active)": {
833
- backgroundColor: `rgb(${theme.palette.primary.lightChannel})`
834
- },
835
- '& + td[aria-hidden] + td[aria-current="date"]::before': {
836
- content: '""',
837
- position: "absolute",
838
- top: 0,
839
- left: "-10px",
840
- bottom: 0,
841
- width: "16px",
842
- backgroundColor: `rgb(${theme.palette.primary.lightChannel})`,
843
- zIndex: -1
844
- }
845
- }
846
- }));
847
- var CalendarMonthCell = styled2("td", {
848
- name: "Calendar",
849
- slot: "monthCell"
850
- })(({ theme }) => ({
851
- // aria-current=date === range에 포함된 버튼
852
- "&[aria-current=date]": {
853
- position: "relative",
854
- "& button[aria-current=date]:not([aria-selected=true]):not(:hover):not(:active)": {
855
- backgroundColor: `rgb(${theme.palette.primary.lightChannel})`
856
- },
857
- '& + td[aria-hidden] + td[aria-current="date"]::before': {
858
- content: '""',
859
- position: "absolute",
860
- top: 0,
861
- left: "-10px",
862
- bottom: 0,
863
- width: "16px",
864
- backgroundColor: `rgb(${theme.palette.primary.lightChannel})`,
865
- zIndex: -1
866
- }
867
- }
868
- }));
869
- var CalendarMonth = styled2(Button_default, {
870
- name: "Calendar",
871
- slot: "month"
872
- })(({ theme, isSelected, disabled }) => [
873
- {
874
- width: "59px",
875
- // height: "32px",
876
- textAlign: "center",
877
- "&:hover": {
878
- color: theme.palette.primary.softColor,
879
- backgroundColor: theme.palette.primary.softHoverBg
880
- },
881
- "&:active": {
882
- color: theme.palette.primary.softColor,
883
- backgroundColor: theme.palette.primary.softActiveBg
884
- }
885
- },
886
- isSelected && {
887
- backgroundColor: theme.palette.primary.solidBg,
888
- color: theme.palette.primary.solidColor,
889
- "&:hover": {
890
- color: theme.palette.primary.solidColor,
891
- backgroundColor: theme.palette.primary.solidHoverBg
892
- },
893
- "&:active": {
894
- color: theme.palette.primary.solidColor,
895
- backgroundColor: theme.palette.primary.solidActiveBg
896
- }
897
- },
898
- disabled && {
899
- color: theme.palette.neutral.solidDisabledColor,
900
- backgroundColor: theme.palette.neutral.solidDisabledBg
901
- }
902
- ]);
903
- var CalendarDay = styled2(Button_default, {
904
- name: "Calendar",
905
- slot: "day"
906
- })(({ theme, isToday: isToday2, isSelected, disabled }) => [
907
- {
908
- width: "32px",
909
- height: "32px",
910
- textAlign: "center",
911
- "&:hover": {
912
- color: theme.palette.primary.softColor,
913
- backgroundColor: theme.palette.primary.softHoverBg
914
- },
915
- "&:active": {
916
- color: theme.palette.primary.softColor,
917
- backgroundColor: theme.palette.primary.softActiveBg
918
- }
919
- },
920
- // NOTE: enabled, disabled 일때만 border 적용
921
- isToday2 && !isSelected && {
922
- "&:not([aria-current=date]):not(:hover)": {
923
- border: `1px solid ${theme.palette.neutral.outlinedBorder}`
924
- }
925
- },
926
- isSelected && {
927
- backgroundColor: theme.palette.primary.solidBg,
928
- color: theme.palette.primary.solidColor,
929
- "&:hover": {
930
- color: theme.palette.primary.solidColor,
931
- backgroundColor: theme.palette.primary.solidHoverBg
932
- },
933
- "&:active": {
934
- color: theme.palette.primary.solidColor,
935
- backgroundColor: theme.palette.primary.solidActiveBg
936
- }
937
- },
938
- disabled && {
939
- color: theme.palette.neutral.solidDisabledColor,
940
- backgroundColor: theme.palette.neutral.solidDisabledBg
941
- }
942
- ]);
943
- var variants = {
944
- enter: (direction) => {
945
- return {
946
- x: direction > 0 ? 300 : -300,
947
- opacity: 0
948
- };
949
- },
950
- center: {
951
- position: "relative",
952
- zIndex: 1,
953
- x: 0,
954
- opacity: 1
955
- },
956
- exit: (direction) => {
957
- return {
958
- position: "absolute",
959
- zIndex: 0,
960
- x: direction < 0 ? 300 : -300,
961
- opacity: 0
962
- };
963
- }
964
- };
965
- var swipeConfidenceThreshold = 1e4;
966
- var swipePower = (offset, velocity) => {
967
- return Math.abs(offset) * velocity;
968
- };
969
- var PickerDays = (props) => {
970
- const { ownerState } = props;
971
- const { getPickerDayProps, getDayCellProps } = useCalendar(ownerState);
972
- const calendarDates = useMemo2(
973
- () => getCalendarDates(ownerState.viewMonth),
974
- [ownerState.viewMonth]
975
- );
976
- const weekdayNames = useMemo2(
977
- () => getWeekdayNames(ownerState.locale || "default"),
978
- [ownerState.locale]
979
- );
980
- return /* @__PURE__ */ React10.createElement(CalendarViewContainer, { calendarType: "datePicker" }, /* @__PURE__ */ React10.createElement(AnimatePresence, { initial: false, custom: ownerState.direction }, /* @__PURE__ */ React10.createElement(
981
- CalendarViewTable,
982
- {
983
- key: `${ownerState.viewMonth.toString()}_${ownerState.direction}`,
984
- custom: ownerState.direction,
985
- variants,
986
- initial: "enter",
987
- animate: "center",
988
- exit: "exit",
989
- transition: {
990
- x: { type: "spring", stiffness: 300, damping: 30 },
991
- opacity: { duration: 0.2 }
992
- },
993
- drag: "x",
994
- dragConstraints: { left: 0, right: 0 },
995
- dragElastic: 1,
996
- onDragEnd: (e, { offset, velocity }) => {
997
- const swipe = swipePower(offset.x, velocity.x);
998
- if (swipe < -swipeConfidenceThreshold) {
999
- const date = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
1000
- date.setMonth(date.getMonth() + 1);
1001
- ownerState.onMonthChange?.(date);
1002
- } else if (swipe > swipeConfidenceThreshold) {
1003
- const date = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
1004
- date.setMonth(date.getMonth() - 1);
1005
- ownerState.onMonthChange?.(date);
1006
- }
1007
- }
1008
- },
1009
- /* @__PURE__ */ React10.createElement(CalendarWeekHeaderContainer, null, /* @__PURE__ */ React10.createElement("tr", null, weekdayNames.map((name, i) => /* @__PURE__ */ React10.createElement(React10.Fragment, null, /* @__PURE__ */ React10.createElement("th", null, /* @__PURE__ */ React10.createElement(Typography_default, { level: "body-xs", textAlign: "center" }, name)), i < 6 && /* @__PURE__ */ React10.createElement(
1010
- "th",
1011
- {
1012
- style: { width: 4 },
1013
- "aria-hidden": "true",
1014
- "aria-description": "cell-gap"
1015
- }
1016
- ))))),
1017
- /* @__PURE__ */ React10.createElement(CalendarDayPickerContainer, null, calendarDates.map((weekDates, rowIndex) => /* @__PURE__ */ React10.createElement(Fragment, { key: `${ownerState.viewMonth}_${rowIndex}` }, /* @__PURE__ */ React10.createElement("tr", null, weekDates.map(
1018
- (date, i) => date ? /* @__PURE__ */ React10.createElement(Fragment, { key: i }, /* @__PURE__ */ React10.createElement(CalendarDayCell, { ...getDayCellProps(date) }, /* @__PURE__ */ React10.createElement(
1019
- CalendarDay,
1020
- {
1021
- size: "sm",
1022
- variant: "plain",
1023
- color: "neutral",
1024
- ...getPickerDayProps(date)
1025
- },
1026
- date
1027
- )), i < 6 && /* @__PURE__ */ React10.createElement("td", { "aria-hidden": "true", "aria-description": "cell-gap" })) : /* @__PURE__ */ React10.createElement(Fragment, { key: i }, /* @__PURE__ */ React10.createElement("td", null), i < 6 && /* @__PURE__ */ React10.createElement("td", { "aria-hidden": "true", "aria-description": "cell-gap" }))
1028
- )), rowIndex < calendarDates.length - 1 && /* @__PURE__ */ React10.createElement("tr", { "aria-hidden": "true", "aria-description": "row-gap" }, /* @__PURE__ */ React10.createElement("td", { colSpan: 13, style: { height: 4 } })))))
1029
- )));
1030
- };
1031
- var PickerMonths = (props) => {
1032
- const { ownerState } = props;
1033
- const { getPickerMonthProps, getMonthCellProps } = useCalendar(ownerState);
1034
- const chunkedMonths = Array.from({ length: 12 }, (_, i) => i).reduce(
1035
- (acc, month) => {
1036
- if (acc[acc.length - 1].length === 4) {
1037
- acc.push([]);
1038
- }
1039
- acc[acc.length - 1].push(month);
1040
- return acc;
1041
- },
1042
- [[]]
1043
- );
1044
- const isMonthRangeSelection = !ownerState.views?.find((view) => view === "day") && ownerState.rangeSelection;
1045
- return /* @__PURE__ */ React10.createElement(CalendarViewContainer, { calendarType: isMonthRangeSelection ? "monthPicker" : "datePicker" }, /* @__PURE__ */ React10.createElement(AnimatePresence, { initial: false, custom: ownerState.direction }, /* @__PURE__ */ React10.createElement(
1046
- CalendarViewTable,
1047
- {
1048
- key: `${ownerState.viewMonth.getFullYear()}_${ownerState.direction}`,
1049
- custom: ownerState.direction,
1050
- variants,
1051
- initial: "enter",
1052
- animate: "center",
1053
- exit: "exit",
1054
- transition: {
1055
- x: { type: "spring", stiffness: 300, damping: 30 },
1056
- opacity: { duration: 0.2 }
1057
- },
1058
- drag: "x",
1059
- dragConstraints: { left: 0, right: 0 },
1060
- dragElastic: 1,
1061
- onDragEnd: (e, { offset, velocity }) => {
1062
- const swipe = swipePower(offset.x, velocity.x);
1063
- if (swipe < -swipeConfidenceThreshold) {
1064
- const date = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
1065
- date.setMonth(date.getMonth() + 1);
1066
- ownerState.onMonthChange?.(date);
1067
- } else if (swipe > swipeConfidenceThreshold) {
1068
- const date = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
1069
- date.setMonth(date.getMonth() - 1);
1070
- ownerState.onMonthChange?.(date);
1071
- }
1072
- }
1073
- },
1074
- /* @__PURE__ */ React10.createElement("tbody", null, chunkedMonths.map((months, i) => /* @__PURE__ */ React10.createElement(Fragment, { key: i }, /* @__PURE__ */ React10.createElement("tr", null, months.map((monthIndex, j) => /* @__PURE__ */ React10.createElement(Fragment, { key: monthIndex }, /* @__PURE__ */ React10.createElement(CalendarMonthCell, { ...getMonthCellProps(monthIndex) }, /* @__PURE__ */ React10.createElement(
1075
- CalendarMonth,
1076
- {
1077
- size: "sm",
1078
- variant: "plain",
1079
- color: "neutral",
1080
- ...getPickerMonthProps(monthIndex)
1081
- },
1082
- getMonthNameFromIndex(
1083
- monthIndex,
1084
- ownerState.locale
1085
- )
1086
- )), j < 3 && /* @__PURE__ */ React10.createElement(
1087
- "td",
1088
- {
1089
- style: { width: 4 },
1090
- "aria-hidden": "true",
1091
- "aria-description": "cell-gap"
1092
- }
1093
- )))), i < chunkedMonths.length - 1 && /* @__PURE__ */ React10.createElement("tr", { "aria-hidden": "true", "aria-description": "row-gap" }, /* @__PURE__ */ React10.createElement("td", { colSpan: 7, style: { height: 4 } })))))
1094
- )));
1095
- };
1096
- var Calendar = forwardRef2((inProps, ref) => {
1097
- const [props, ownerState] = useCalendarProps(inProps);
1098
- const {
1099
- value,
1100
- defaultValue,
1101
- onChange,
1102
- locale,
1103
- onViewChange,
1104
- onMonthChange,
1105
- view,
1106
- views,
1107
- rangeSelection,
1108
- ...others
1109
- } = props;
1110
- const { calendarTitle, onPrev, onNext } = useCalendar(ownerState);
1111
- return /* @__PURE__ */ React10.createElement(CalendarRoot, { ref, ...others }, /* @__PURE__ */ React10.createElement(CalendarHeader, null, /* @__PURE__ */ React10.createElement(IconButton_default, { size: "sm", onClick: onPrev }, /* @__PURE__ */ React10.createElement(ChevronLeftIcon, null)), /* @__PURE__ */ React10.createElement(
1112
- CalendarSwitchViewButton,
1113
- {
1114
- ownerState,
1115
- variant: "plain",
1116
- color: "neutral",
1117
- onClick: onViewChange
1118
- },
1119
- calendarTitle
1120
- ), /* @__PURE__ */ React10.createElement(IconButton_default, { size: "sm", onClick: onNext }, /* @__PURE__ */ React10.createElement(ChevronRightIcon, null))), view === "day" && /* @__PURE__ */ React10.createElement(PickerDays, { ownerState }), view === "month" && /* @__PURE__ */ React10.createElement(PickerMonths, { ownerState }));
1121
- });
1122
- Calendar.displayName = "Calendar";
1123
-
1124
- // src/components/Calendar/index.ts
1125
- var Calendar_default = Calendar;
1126
-
1127
- // src/components/Checkbox/Checkbox.tsx
1128
- import React11 from "react";
1129
- import { Checkbox as JoyCheckbox } from "@mui/joy";
1130
- import { motion as motion14 } from "framer-motion";
1131
- var MotionCheckbox = motion14(JoyCheckbox);
1132
- var Checkbox = (props) => {
1133
- return /* @__PURE__ */ React11.createElement(MotionCheckbox, { ...props });
1134
- };
1135
- Checkbox.displayName = "Checkbox";
1136
-
1137
- // src/components/Checkbox/index.ts
1138
- var Checkbox_default = Checkbox;
1139
-
1140
- // src/components/Container/Container.tsx
1141
- import { styled as styled3 } from "@mui/joy";
1142
- import React12, { forwardRef as forwardRef3 } from "react";
1143
- var ContainerRoot = styled3("div", {
1144
- name: "Container",
1145
- slot: "root",
1146
- shouldForwardProp: (prop) => prop !== "maxWidth"
1147
- })(({ theme, maxWidth = "lg" }) => ({
1148
- width: "100%",
1149
- marginLeft: "auto",
1150
- boxSizing: "border-box",
1151
- marginRight: "auto",
1152
- display: "block",
1153
- // Fix IE11 layout when used with main.
1154
- paddingLeft: theme.spacing(2),
1155
- paddingRight: theme.spacing(2),
1156
- ...maxWidth === "sm" && {
1157
- [theme.breakpoints.up("xs")]: {
1158
- maxWidth: theme.breakpoints.values.sm
1159
- }
1160
- },
1161
- ...maxWidth === "md" && {
1162
- [theme.breakpoints.up("sm")]: {
1163
- maxWidth: theme.breakpoints.values.md
1164
- }
1165
- },
1166
- ...maxWidth === "lg" && {
1167
- [theme.breakpoints.up("md")]: {
1168
- maxWidth: theme.breakpoints.values.lg
1169
- }
1170
- },
1171
- ...maxWidth === "xl" && {
1172
- [theme.breakpoints.up("lg")]: {
1173
- maxWidth: theme.breakpoints.values.xl
1174
- }
1175
- }
1176
- }));
1177
- var Container = forwardRef3(function Container2(props, ref) {
1178
- return /* @__PURE__ */ React12.createElement(ContainerRoot, { ref, ...props });
1179
- });
1180
- Container.displayName = "Container";
1181
-
1182
- // src/components/CurrencyInput/CurrencyInput.tsx
1183
- import React14, { useCallback as useCallback3, useState as useState3 } from "react";
1184
- import { IntlMessageFormat as IntlMessageFormat2 } from "intl-messageformat";
1185
- import { NumericFormat } from "react-number-format";
1186
- import InfoOutlined from "@mui/icons-material/esm/InfoOutlined.js";
1187
-
1188
- // src/components/Input/Input.tsx
1189
- import React13 from "react";
1190
- import { Input as JoyInput } from "@mui/joy";
1191
- import { motion as motion15 } from "framer-motion";
1192
- var MotionInput = motion15(JoyInput);
1193
- var Input = (props) => {
1194
- const {
1195
- label,
1196
- helperText,
1197
- error,
1198
- style,
1199
- size,
1200
- color,
1201
- disabled,
1202
- required,
1203
- ...innerProps
1204
- } = props;
1205
- if (label) {
1206
- return /* @__PURE__ */ React13.createElement(
1207
- FormControl_default,
1208
- {
1209
- required,
1210
- color,
1211
- size,
1212
- error,
1213
- disabled
1214
- },
1215
- /* @__PURE__ */ React13.createElement(FormLabel_default, null, label),
1216
- /* @__PURE__ */ React13.createElement(MotionInput, { ...innerProps }),
1217
- helperText && /* @__PURE__ */ React13.createElement(FormHelperText_default, null, helperText)
1218
- );
1219
- }
1220
- return /* @__PURE__ */ React13.createElement(
1221
- MotionInput,
1222
- {
1223
- required,
1224
- color,
1225
- size,
1226
- disabled,
1227
- ...innerProps
1228
- }
1229
- );
1230
- };
1231
- Input.displayName = "Input";
1232
-
1233
- // src/components/Input/index.ts
1234
- var Input_default = Input;
1235
-
1236
- // src/components/CurrencyInput/hooks/use-currency-setting.ts
1237
- import IntlMessageFormat from "intl-messageformat";
1238
- var useCurrencySetting = (currencyCode = "usd") => {
1239
- const [symbol, thousandSeparator, decimalSeparator] = new IntlMessageFormat(
1240
- `{amount, number, ::currency/${currencyCode} unit-width-narrow}`
1241
- ).format({ amount: 1e3 }).toString().replace(/\d/g, "").split("");
1242
- return {
1243
- symbol: `${symbol} `,
1244
- thousandSeparator,
1245
- decimalSeparator,
1246
- placeholder: decimalSeparator ? `${symbol} 0${decimalSeparator}00` : `${symbol} 0`,
1247
- fixedDecimalScale: !!decimalSeparator
1248
- };
1249
- };
1250
-
1251
- // src/components/CurrencyInput/CurrencyInput.tsx
1252
- var TextMaskAdapter = React14.forwardRef(
1253
- function TextMaskAdapter2(props, ref) {
1254
- const { onChange, ...innerProps } = props;
1255
- return /* @__PURE__ */ React14.createElement(
1256
- NumericFormat,
1257
- {
1258
- ...innerProps,
1259
- onValueChange: ({ floatValue }) => {
1260
- onChange?.({
1261
- target: { name: props.name, value: floatValue?.toString() }
1262
- });
1263
- },
1264
- valueIsNumericString: true,
1265
- getInputRef: ref,
1266
- decimalScale: 2
1267
- }
1268
- );
1269
- }
1270
- );
1271
- var CurrencyInput = React14.forwardRef(function CurrencyInput2(props, ref) {
1272
- const {
1273
- currency = "usd",
1274
- max = 1e5,
1275
- name,
1276
- onChange,
1277
- label,
1278
- error,
1279
- helperText,
1280
- required,
1281
- disabled,
1282
- ...innerProps
1283
- } = props;
1284
- const { symbol, thousandSeparator, decimalSeparator, placeholder, fixedDecimalScale } = useCurrencySetting(currency);
1285
- const [value, setValue] = useState3(props.value);
1286
- const [isOverLimit, setIsOverLimit] = useState3(
1287
- !!props.value && props.value > Number(max)
1288
- );
1289
- const handleChange = useCallback3(
1290
- (event) => {
1291
- const amount = Number(event.target.value);
1292
- setValue(amount);
1293
- onChange?.({ ...event, target: { name, value: amount } });
1294
- if (amount > Number(max)) {
1295
- setIsOverLimit(true);
1296
- } else {
1297
- setIsOverLimit(false);
1298
- }
1299
- },
1300
- []
1301
- );
1302
- const currencyFormatter = /* @__PURE__ */ React14.createElement(
1303
- Input_default,
1304
- {
1305
- ...innerProps,
1306
- size: "sm",
1307
- ref,
1308
- value,
1309
- placeholder,
1310
- onChange: handleChange,
1311
- disabled,
1312
- required,
1313
- slotProps: {
1314
- input: {
1315
- component: TextMaskAdapter,
1316
- decimalSeparator,
1317
- thousandSeparator,
1318
- prefix: symbol,
1319
- fixedDecimalScale
1320
- }
1321
- },
1322
- sx: {
1323
- fontFamily: "monospace"
1324
- }
1325
- }
1326
- );
1327
- if (label) {
1328
- return /* @__PURE__ */ React14.createElement(
1329
- FormControl_default,
1330
- {
1331
- size: "sm",
1332
- disabled,
1333
- required,
1334
- error: error || isOverLimit
1335
- },
1336
- /* @__PURE__ */ React14.createElement(FormLabel_default, null, label),
1337
- currencyFormatter,
1338
- isOverLimit ? /* @__PURE__ */ React14.createElement(FormHelperText_default, null, /* @__PURE__ */ React14.createElement(InfoOutlined, null), new IntlMessageFormat2(
1339
- `limit: {amount, number, ::currency/${currency} unit-width-narrow}`
1340
- ).format({ amount: max })) : helperText && /* @__PURE__ */ React14.createElement(FormHelperText_default, null, helperText)
1341
- );
1342
- }
1343
- return currencyFormatter;
1344
- });
1345
-
1346
- // src/components/DataTable/DataTable.tsx
1347
- import React16, {
1348
- useCallback as useCallback4,
1349
- useEffect,
1350
- useMemo as useMemo3,
1351
- useRef,
1352
- useState as useState4
1353
- } from "react";
1354
- import { styled as styled4, LinearProgress } from "@mui/joy";
1355
- import PreviousIcon from "@mui/icons-material/esm/ChevronLeft.js";
1356
- import NextIcon from "@mui/icons-material/esm/ChevronRight.js";
1357
-
1358
- // src/components/Sheet/Sheet.tsx
1359
- import { Sheet as JoySheet } from "@mui/joy";
1360
- import { motion as motion16 } from "framer-motion";
1361
- var MotionSheet = motion16(JoySheet);
1362
- var Sheet = MotionSheet;
1363
- Sheet.displayName = "Sheet";
1364
-
1365
- // src/components/Sheet/index.ts
1366
- var Sheet_default = Sheet;
1367
-
1368
- // src/components/Table/Table.tsx
1369
- import React15 from "react";
1370
- import { Table as JoyTable } from "@mui/joy";
1371
- var Table = (props) => {
1372
- const { children, ...inheritProps } = props;
1373
- return /* @__PURE__ */ React15.createElement(JoyTable, { ...inheritProps }, children);
1374
- };
1375
- Table.displayName = "Table";
1376
- function TableHead(props) {
1377
- const {
1378
- headCells,
1379
- showCheckbox,
1380
- onCheckboxChange,
1381
- slots: { checkbox: RenderCheckbox = Checkbox_default } = {},
1382
- slotProps: { checkbox: checkboxProps = {} } = {}
1383
- } = props;
1384
- return /* @__PURE__ */ React15.createElement("thead", null, /* @__PURE__ */ React15.createElement("tr", null, showCheckbox && /* @__PURE__ */ React15.createElement(
1385
- "th",
1386
- {
1387
- style: {
1388
- width: "40px",
1389
- textAlign: "center"
1390
- }
1391
- },
1392
- /* @__PURE__ */ React15.createElement(RenderCheckbox, { onChange: onCheckboxChange, ...checkboxProps })
1393
- ), headCells.map((headCell) => /* @__PURE__ */ React15.createElement(
1394
- "th",
1395
- {
1396
- key: headCell.label,
1397
- style: {
1398
- width: headCell.width,
1399
- minWidth: headCell.minWidth,
1400
- maxWidth: headCell.maxWidth,
1401
- textAlign: headCell.numeric ? "right" : "left"
1402
- }
1403
- },
1404
- headCell.label
1405
- ))));
1406
- }
1407
- TableHead.displayName = "TableHead";
1408
- function TableBody(props) {
1409
- const {
1410
- rows,
1411
- cellOrder,
1412
- rowOptions,
1413
- showCheckbox,
1414
- onCheckboxChange,
1415
- slots: { checkbox: RenderCheckbox = Checkbox_default } = {},
1416
- slotProps: { checkbox: checkboxProps = {} } = {}
1417
- } = props;
1418
- return /* @__PURE__ */ React15.createElement("tbody", null, rows.map((row, rowIndex) => /* @__PURE__ */ React15.createElement("tr", { key: rowIndex }, showCheckbox && /* @__PURE__ */ React15.createElement(
1419
- "td",
1420
- {
1421
- style: {
1422
- textAlign: "center"
1423
- }
1424
- },
1425
- /* @__PURE__ */ React15.createElement(
1426
- RenderCheckbox,
1427
- {
1428
- onChange: (event) => onCheckboxChange?.(event, rowIndex),
1429
- ...checkboxProps
1430
- }
1431
- )
1432
- ), cellOrder.map((cellKey) => /* @__PURE__ */ React15.createElement(
1433
- "td",
1434
- {
1435
- key: cellKey,
1436
- style: {
1437
- textAlign: rowOptions?.[cellKey]?.numeric ? "right" : "left"
1438
- }
1439
- },
1440
- row[cellKey]
1441
- )))));
1442
- }
1443
- TableBody.displayName = "TableBody";
1444
-
1445
- // src/components/DataTable/DataTable.tsx
1446
- var OverlayWrapper = styled4("tr", {
1447
- name: "DataTable",
1448
- slot: "overlayWrapper"
1449
- })({
1450
- position: "sticky",
1451
- top: `calc(var(--unstable_TableCell-height, 32px))`,
1452
- left: 0,
1453
- right: 0,
1454
- zIndex: 1,
1455
- "& > td": {
1456
- height: 0,
1457
- padding: 0,
1458
- border: "none !important"
1459
- }
1460
- });
1461
- var numberFormatter = (value) => "Intl" in window ? new Intl.NumberFormat().format(value) : value;
1462
- function TablePagination(props) {
1463
- const {
1464
- paginationModel: { page, pageSize },
1465
- rowCount,
1466
- onPageChange
1467
- } = props;
1468
- const firstPage = 1;
1469
- const lastPage = Math.ceil(rowCount / pageSize);
1470
- const beforePages = [page - 2, page - 1].filter((p) => p > 1);
1471
- const afterPages = [page + 1, page + 2].filter((p) => p <= lastPage - 1);
1472
- const isMoreAfterPages = lastPage > 1 && page < lastPage - 3;
1473
- const isMoreBeforePages = lastPage > 1 && page > 4;
1474
- return /* @__PURE__ */ React16.createElement(
1475
- Stack_default,
1476
- {
1477
- direction: "row",
1478
- spacing: 1,
1479
- sx: {
1480
- pt: 1,
1481
- pb: 1
1482
- },
1483
- justifyContent: "end",
1484
- alignItems: "center"
1485
- },
1486
- /* @__PURE__ */ React16.createElement(Stack_default, { direction: "row", spacing: 0.5, alignItems: "center" }, /* @__PURE__ */ React16.createElement(
1487
- IconButton_default,
1488
- {
1489
- size: "sm",
1490
- variant: "plain",
1491
- color: "neutral",
1492
- onClick: () => onPageChange(page - 1),
1493
- disabled: page === firstPage,
1494
- "aria-label": "Previous page"
1495
- },
1496
- /* @__PURE__ */ React16.createElement(PreviousIcon, null)
1497
- ), page !== firstPage && /* @__PURE__ */ React16.createElement(
1498
- Button_default,
1499
- {
1500
- size: "sm",
1501
- variant: "plain",
1502
- color: "neutral",
1503
- onClick: () => onPageChange(firstPage)
1504
- },
1505
- firstPage
1506
- ), isMoreBeforePages && /* @__PURE__ */ React16.createElement(
1507
- Button_default,
1508
- {
1509
- size: "sm",
1510
- variant: "plain",
1511
- color: "neutral",
1512
- onClick: () => onPageChange(page - 3)
1513
- },
1514
- "..."
1515
- ), beforePages.map((p) => /* @__PURE__ */ React16.createElement(
1516
- Button_default,
1517
- {
1518
- key: p,
1519
- size: "sm",
1520
- variant: "plain",
1521
- color: "neutral",
1522
- onClick: () => onPageChange(p)
1523
- },
1524
- p
1525
- )), /* @__PURE__ */ React16.createElement(Button_default, { variant: "soft", size: "sm" }, page), afterPages.map((p) => /* @__PURE__ */ React16.createElement(
1526
- Button_default,
1527
- {
1528
- key: p,
1529
- size: "sm",
1530
- variant: "plain",
1531
- color: "neutral",
1532
- onClick: () => onPageChange(p)
1533
- },
1534
- p
1535
- )), isMoreAfterPages && /* @__PURE__ */ React16.createElement(
1536
- Button_default,
1537
- {
1538
- size: "sm",
1539
- variant: "plain",
1540
- color: "neutral",
1541
- onClick: () => onPageChange(page + 3)
1542
- },
1543
- "..."
1544
- ), page !== lastPage && /* @__PURE__ */ React16.createElement(
1545
- Button_default,
1546
- {
1547
- size: "sm",
1548
- variant: "plain",
1549
- color: "neutral",
1550
- onClick: () => onPageChange(lastPage)
1551
- },
1552
- lastPage
1553
- ), /* @__PURE__ */ React16.createElement(
1554
- IconButton_default,
1555
- {
1556
- size: "sm",
1557
- variant: "plain",
1558
- color: "neutral",
1559
- onClick: () => onPageChange(page + 1),
1560
- disabled: page === lastPage,
1561
- "aria-label": "Next page"
1562
- },
1563
- /* @__PURE__ */ React16.createElement(NextIcon, null)
1564
- ))
1565
- );
1566
- }
1567
- var Resizer = (ref) => /* @__PURE__ */ React16.createElement(
1568
- Box_default,
1569
- {
1570
- sx: {
1571
- position: "absolute",
1572
- top: 0,
1573
- right: 0,
1574
- bottom: 0,
1575
- width: "4px",
1576
- cursor: "col-resize"
1577
- },
1578
- onMouseDown: (e) => {
1579
- const initialX = e.clientX;
1580
- const initialWidth = ref.current?.getBoundingClientRect().width;
1581
- const onMouseMove = (e2) => {
1582
- if (initialWidth && initialX) {
1583
- ref.current.style.width = `${initialWidth + (e2.clientX - initialX)}px`;
1584
- }
1585
- };
1586
- const onMouseUp = () => {
1587
- document.removeEventListener("mousemove", onMouseMove);
1588
- document.removeEventListener("mouseup", onMouseUp);
1589
- };
1590
- document.addEventListener("mousemove", onMouseMove);
1591
- document.addEventListener("mouseup", onMouseUp);
1592
- }
1593
- }
1594
- );
1595
- var HeadCell = (props) => {
1596
- const ref = useRef(null);
1597
- const style = {
1598
- width: props.width,
1599
- minWidth: props.minWidth ?? "50px",
1600
- maxWidth: props.maxWidth,
1601
- textAlign: props.type === "number" ? "end" : "start",
1602
- position: props.stickyHeader ? void 0 : "relative"
1603
- };
1604
- const resizer = props.resizable ?? true ? Resizer(ref) : null;
1605
- return /* @__PURE__ */ React16.createElement("th", { ref, key: props.field, style }, props.headerName ?? props.field, resizer);
1606
- };
1607
- function useDataTableRenderer({
1608
- rows,
1609
- columns,
1610
- rowCount: totalRowsProp,
1611
- paginationMode,
1612
- paginationModel,
1613
- onPaginationModelChange,
1614
- selectionModel = [],
1615
- onSelectionModelChange,
1616
- getId: _getId,
1617
- isTotalSelected: _isTotalSelected
1618
- }) {
1619
- const [page, setPage] = useState4(paginationModel?.page || 1);
1620
- const pageSize = paginationModel?.pageSize || 20;
1621
- const getId = useCallback4(
1622
- (row, index) => _getId?.(row) ?? row?.id ?? `${(index || 0) + (page - 1) * pageSize}`,
1623
- [_getId ?? page, pageSize]
1624
- );
1625
- const selectedModelSet = useMemo3(
1626
- () => new Set(selectionModel),
1627
- [selectionModel]
1628
- );
1629
- const dataInPage = useMemo3(
1630
- () => paginationMode === "server" ? rows : rows.slice((page - 1) * pageSize, (page - 1) * pageSize + pageSize),
1631
- [rows, page, pageSize, paginationMode]
1632
- );
1633
- const isAllSelected = useMemo3(
1634
- () => dataInPage.length > 0 && dataInPage.every((row, i) => selectedModelSet.has(getId(row, i))),
1635
- [dataInPage, selectedModelSet, page, pageSize, getId]
1636
- );
1637
- const rowCount = totalRowsProp || rows.length;
1638
- const isTotalSelected = useMemo3(
1639
- () => _isTotalSelected ?? (rowCount > 0 && selectionModel.length === rowCount),
1640
- [_isTotalSelected, selectionModel, rowCount]
1641
- );
1642
- const handlePageChange = useCallback4(
1643
- (newPage) => {
1644
- setPage(newPage);
1645
- onPaginationModelChange?.({ page: newPage, pageSize });
1646
- },
1647
- [onPaginationModelChange]
1648
- );
1649
- useEffect(() => {
1650
- handlePageChange(1);
1651
- }, [rowCount]);
1652
- useEffect(() => {
1653
- if (page > Math.ceil(rowCount / pageSize)) {
1654
- handlePageChange(Math.ceil(rowCount / pageSize));
1655
- }
1656
- }, [rowCount, pageSize]);
1657
- useEffect(() => {
1658
- onSelectionModelChange?.([]);
1659
- }, [page]);
1660
- return {
1661
- rowCount,
1662
- page,
1663
- pageSize,
1664
- onPaginationModelChange: handlePageChange,
1665
- getId,
1666
- HeadCell,
1667
- dataInPage,
1668
- isAllSelected,
1669
- // all rows are selected on this page
1670
- isTotalSelected,
1671
- isSelectedRow: useCallback4(
1672
- (model) => selectedModelSet.has(model),
1673
- [selectedModelSet]
1674
- ),
1675
- onAllCheckboxChange: useCallback4(() => {
1676
- onSelectionModelChange?.(isAllSelected ? [] : dataInPage.map(getId));
1677
- }, [isAllSelected, dataInPage, onSelectionModelChange]),
1678
- onCheckboxChange: useCallback4(
1679
- (event, selectedModel) => {
1680
- if (selectedModelSet.has(selectedModel)) {
1681
- const newSelectionModel = selectionModel.filter(
1682
- (model) => model !== selectedModel
1683
- );
1684
- onSelectionModelChange?.(newSelectionModel);
1685
- } else {
1686
- const newSelectionModel = [...selectionModel, selectedModel];
1687
- onSelectionModelChange?.(newSelectionModel);
1688
- }
1689
- },
1690
- [selectionModel, onSelectionModelChange]
1691
- ),
1692
- columns: useMemo3(
1693
- () => columns || // fallback
1694
- Object.keys(rows[0] || {}).map((key) => ({
1695
- field: key
1696
- })),
1697
- [rows, columns]
1698
- ),
1699
- onTotalSelect: useCallback4(() => {
1700
- onSelectionModelChange?.(
1701
- isTotalSelected ? [] : rows.map(getId),
1702
- !isTotalSelected
1703
- );
1704
- }, [isTotalSelected, rows, onSelectionModelChange])
1705
- };
1706
- }
1707
- function DataTable(props) {
1708
- const {
1709
- rows,
1710
- checkboxSelection,
1711
- selectionModel,
1712
- onSelectionModelChange,
1713
- rowCount: _,
1714
- // rowCount is used in useDataTableRenderer
1715
- columns: __,
1716
- // columns is used in useDataTableRenderer
1717
- onPaginationModelChange: ___,
1718
- // onPaginationModelChange is used in useDataTableRenderer
1719
- paginationMode: ____,
1720
- // paginationMode is used in useDataTableRenderer
1721
- paginationModel,
1722
- loading,
1723
- slots: {
1724
- checkbox: RenderCheckbox = Checkbox_default,
1725
- toolbar: Toolbar,
1726
- footer: Footer,
1727
- loadingOverlay: LoadingOverlay = () => /* @__PURE__ */ React16.createElement(LinearProgress, { value: 8, variant: "plain" })
1728
- } = {},
1729
- slotProps: {
1730
- checkbox: checkboxProps = {},
1731
- toolbar: toolbarProps,
1732
- background: backgroundProps = {}
1733
- } = {},
1734
- ...innerProps
1735
- } = props;
1736
- const {
1737
- columns,
1738
- isAllSelected,
1739
- isSelectedRow,
1740
- onAllCheckboxChange,
1741
- onCheckboxChange,
1742
- getId,
1743
- rowCount,
1744
- page,
1745
- pageSize,
1746
- onPaginationModelChange,
1747
- dataInPage,
1748
- isTotalSelected,
1749
- onTotalSelect,
1750
- HeadCell: HeadCell2
1751
- } = useDataTableRenderer(props);
1752
- return /* @__PURE__ */ React16.createElement(Box_default, null, /* @__PURE__ */ React16.createElement(
1753
- Stack_default,
1754
- {
1755
- direction: "row",
1756
- sx: {
1757
- pt: 1,
1758
- pb: 1
1759
- },
1760
- justifyContent: "space-between",
1761
- alignItems: "center"
1762
- },
1763
- !!checkboxSelection && /* @__PURE__ */ React16.createElement(Stack_default, { direction: "row", spacing: 1 }, !isAllSelected && /* @__PURE__ */ React16.createElement(Typography_default, { level: "body-xs" }, numberFormatter(selectionModel?.length || 0), " items selected"), isAllSelected && !isTotalSelected && /* @__PURE__ */ React16.createElement(Stack_default, { direction: "row", spacing: 1, alignItems: "center" }, /* @__PURE__ */ React16.createElement(Typography_default, { level: "body-xs" }, "All ", numberFormatter(selectionModel?.length || 0), " items on this page are selected."), /* @__PURE__ */ React16.createElement(Button_default, { size: "sm", variant: "plain", onClick: onTotalSelect }, "Select all ", numberFormatter(rowCount ?? rows.length), " items")), isTotalSelected && /* @__PURE__ */ React16.createElement(Stack_default, { direction: "row", spacing: 1, alignItems: "center" }, /* @__PURE__ */ React16.createElement(Typography_default, { level: "body-xs" }, "All ", numberFormatter(rowCount ?? rows.length), " items are selected."), /* @__PURE__ */ React16.createElement(
1764
- Button_default,
1765
- {
1766
- size: "sm",
1767
- variant: "plain",
1768
- color: "danger",
1769
- onClick: onTotalSelect
1770
- },
1771
- "Cancel"
1772
- ))),
1773
- Toolbar && /* @__PURE__ */ React16.createElement(Toolbar, { ...toolbarProps || {} })
1774
- ), /* @__PURE__ */ React16.createElement(
1775
- Sheet_default,
1776
- {
1777
- variant: "outlined",
1778
- sx: {
1779
- overflow: "auto",
1780
- width: "100%",
1781
- boxShadow: "sm",
1782
- borderRadius: "sm"
1783
- },
1784
- ...backgroundProps
1785
- },
1786
- /* @__PURE__ */ React16.createElement(Table, { ...innerProps }, /* @__PURE__ */ React16.createElement("thead", null, /* @__PURE__ */ React16.createElement("tr", null, checkboxSelection && /* @__PURE__ */ React16.createElement(
1787
- "th",
1788
- {
1789
- style: {
1790
- width: "40px",
1791
- textAlign: "center"
1792
- }
1793
- },
1794
- /* @__PURE__ */ React16.createElement(
1795
- RenderCheckbox,
1796
- {
1797
- onChange: onAllCheckboxChange,
1798
- checked: isAllSelected,
1799
- indeterminate: (selectionModel || []).length > 0 && !isAllSelected,
1800
- ...checkboxProps
1801
- }
1802
- )
1803
- ), columns.map((c) => /* @__PURE__ */ React16.createElement(
1804
- HeadCell2,
1805
- {
1806
- key: c.field,
1807
- stickyHeader: props.stickyHeader,
1808
- ...c
1809
- }
1810
- )))), /* @__PURE__ */ React16.createElement("tbody", null, /* @__PURE__ */ React16.createElement(OverlayWrapper, null, !!loading && /* @__PURE__ */ React16.createElement("td", null, /* @__PURE__ */ React16.createElement(
1811
- Box_default,
1812
- {
1813
- sx: {
1814
- position: "absolute",
1815
- top: 0,
1816
- left: 0,
1817
- right: 0
1818
- }
1819
- },
1820
- /* @__PURE__ */ React16.createElement(LoadingOverlay, null)
1821
- ))), /* @__PURE__ */ React16.createElement(OverlayWrapper, null), dataInPage.map((row, rowIndex) => {
1822
- const rowId = getId(row, rowIndex);
1823
- return /* @__PURE__ */ React16.createElement(
1824
- "tr",
1825
- {
1826
- key: rowId,
1827
- role: checkboxSelection ? "checkbox" : void 0,
1828
- tabIndex: checkboxSelection ? -1 : void 0,
1829
- onClick: checkboxSelection ? (e) => onCheckboxChange(e, rowId) : void 0,
1830
- "aria-checked": checkboxSelection ? isSelectedRow(rowId) : void 0
1831
- },
1832
- checkboxSelection && /* @__PURE__ */ React16.createElement(
1833
- "th",
1834
- {
1835
- scope: "row",
1836
- style: {
1837
- textAlign: "center"
1838
- }
1839
- },
1840
- /* @__PURE__ */ React16.createElement(
1841
- RenderCheckbox,
1842
- {
1843
- onChange: (e) => onCheckboxChange(e, rowId),
1844
- checked: isSelectedRow(rowId),
1845
- ...checkboxProps
1846
- }
1847
- )
1848
- ),
1849
- columns.map((column) => /* @__PURE__ */ React16.createElement(
1850
- "td",
1851
- {
1852
- key: column.field,
1853
- style: {
1854
- textAlign: column.type === "number" ? "end" : "start"
1855
- }
1856
- },
1857
- column.renderCell?.({
1858
- row,
1859
- value: row[column.field],
1860
- id: rowId
1861
- }) ?? row[column.field]
1862
- ))
1863
- );
1864
- })), Footer && /* @__PURE__ */ React16.createElement(Footer, null))
1865
- ), /* @__PURE__ */ React16.createElement(
1866
- TablePagination,
1867
- {
1868
- paginationModel: useMemo3(() => ({ page, pageSize }), [page, pageSize]),
1869
- rowCount,
1870
- onPageChange: onPaginationModelChange
1871
- }
1872
- ));
1873
- }
1874
- DataTable.displayName = "DataTable";
1875
-
1876
- // src/components/DatePicker/DatePicker.tsx
1877
- import React17, { forwardRef as forwardRef4, useCallback as useCallback5, useState as useState5 } from "react";
1878
- import { IMaskInput, IMask } from "react-imask";
1879
- import CalendarTodayIcon from "@mui/icons-material/esm/CalendarToday.js";
1880
- import { styled as styled6 } from "@mui/joy";
1881
- import { FocusTrap, ClickAwayListener, Popper } from "@mui/base";
1882
-
1883
- // src/components/DialogActions/DialogActions.tsx
1884
- import { DialogActions as JoyDialogActions, styled as styled5 } from "@mui/joy";
1885
- import { motion as motion17 } from "framer-motion";
1886
- var MotionDialogActions = motion17(JoyDialogActions);
1887
- var StyledDialogActions = styled5(MotionDialogActions)(({ theme }) => ({
1888
- padding: theme.spacing(1),
1889
- gap: theme.spacing(1),
1890
- flexDirection: "row",
1891
- justifyContent: "flex-end"
1892
- }));
1893
- var DialogActions = StyledDialogActions;
1894
- DialogActions.displayName = "DialogActions";
1895
-
1896
- // src/components/DialogActions/index.ts
1897
- var DialogActions_default = DialogActions;
1898
-
1899
- // src/components/DatePicker/DatePicker.tsx
1900
- var StyledPopper = styled6(Popper, {
1901
- name: "DatePicker",
1902
- slot: "popper"
1903
- })(({ theme }) => ({
1904
- zIndex: theme.zIndex.tooltip
1905
- }));
1906
- var CalendarSheet = styled6(Sheet_default, {
1907
- name: "DatePicker",
1908
- slot: "sheet",
1909
- overridesResolver: (props, styles) => styles.root
1910
- })(({ theme }) => ({
1911
- width: "264px",
1912
- boxShadow: theme.shadow.md,
1913
- borderRadius: theme.radius.md
1914
- }));
1915
- var formatValueString = (date) => {
1916
- let day = `${date.getDate()}`;
1917
- let month = `${date.getMonth() + 1}`;
1918
- const year = date.getFullYear();
1919
- if (Number(day) < 10)
1920
- day = "0" + day;
1921
- if (Number(month) < 10)
1922
- month = "0" + month;
1923
- return [year, month, day].join("/");
1924
- };
1925
- var TextMaskAdapter3 = React17.forwardRef(
1926
- function TextMaskAdapter4(props, ref) {
1927
- const { onChange, ...other } = props;
1928
- return /* @__PURE__ */ React17.createElement(
1929
- IMaskInput,
1930
- {
1931
- ...other,
1932
- inputRef: ref,
1933
- onAccept: (value) => onChange({ target: { name: props.name, value } }),
1934
- mask: Date,
1935
- pattern: "Y/`m/`d",
1936
- blocks: {
1937
- d: {
1938
- mask: IMask.MaskedRange,
1939
- from: 1,
1940
- to: 31,
1941
- maxLength: 2
1942
- },
1943
- m: {
1944
- mask: IMask.MaskedRange,
1945
- from: 1,
1946
- to: 12,
1947
- maxLength: 2
1948
- },
1949
- Y: {
1950
- mask: IMask.MaskedRange,
1951
- from: 1900,
1952
- to: 9999
1953
- }
1954
- },
1955
- format: formatValueString,
1956
- parse: (str) => {
1957
- const yearMonthDay = str.split("/");
1958
- return new Date(
1959
- Number(yearMonthDay[0]),
1960
- Number(yearMonthDay[1]) - 1,
1961
- Number(yearMonthDay[2])
1962
- );
1963
- },
1964
- autofix: "pad",
1965
- overwrite: true,
1966
- placeholderChar: " "
1967
- }
1968
- );
1969
- }
1970
- );
1971
- var DatePicker = forwardRef4(
1972
- (props, ref) => {
1973
- const {
1974
- onChange,
1975
- disabled,
1976
- label,
1977
- error,
1978
- helperText,
1979
- minDate,
1980
- maxDate,
1981
- disableFuture,
1982
- disablePast,
1983
- required
1984
- } = props;
1985
- const [value, setValue] = useState5(props.value || "");
1986
- const [anchorEl, setAnchorEl] = useState5(null);
1987
- const open = Boolean(anchorEl);
1988
- const handleChange = useCallback5(
1989
- (event) => {
1990
- setValue(event.target.value);
1991
- onChange?.(event);
1992
- },
1993
- []
1994
- );
1995
- const handleCalendarToggle = useCallback5(
1996
- (event) => {
1997
- setAnchorEl(anchorEl ? null : event.currentTarget);
1998
- },
1999
- [anchorEl, setAnchorEl]
2000
- );
2001
- const picker = /* @__PURE__ */ React17.createElement(React17.Fragment, null, /* @__PURE__ */ React17.createElement(
2002
- Input_default,
2003
- {
2004
- ref,
2005
- size: "sm",
2006
- value,
2007
- onChange: handleChange,
2008
- placeholder: "YYYY/MM/DD",
2009
- disabled,
2010
- required,
2011
- slotProps: { input: { component: TextMaskAdapter3 } },
2012
- sx: {
2013
- // NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
2014
- fontFamily: "monospace"
2015
- },
2016
- endDecorator: /* @__PURE__ */ React17.createElement(IconButton_default, { variant: "plain", onClick: handleCalendarToggle }, /* @__PURE__ */ React17.createElement(CalendarTodayIcon, null))
2017
- }
2018
- ), open && /* @__PURE__ */ React17.createElement(ClickAwayListener, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ React17.createElement(
2019
- StyledPopper,
2020
- {
2021
- id: "date-picker-popper",
2022
- open: true,
2023
- anchorEl,
2024
- placement: "bottom-end",
2025
- modifiers: [
2026
- {
2027
- name: "offset",
2028
- options: {
2029
- offset: [4, 4]
2030
- }
2031
- }
2032
- ]
2033
- },
2034
- /* @__PURE__ */ React17.createElement(FocusTrap, { open: true }, /* @__PURE__ */ React17.createElement(CalendarSheet, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React17.createElement(
2035
- Calendar_default,
2036
- {
2037
- value: !Number.isNaN(new Date(value).getTime()) ? [new Date(value), void 0] : void 0,
2038
- onChange: ([date]) => {
2039
- setValue(formatValueString(date));
2040
- setAnchorEl(null);
2041
- },
2042
- minDate: minDate ? new Date(minDate) : void 0,
2043
- maxDate: maxDate ? new Date(maxDate) : void 0,
2044
- disableFuture,
2045
- disablePast
2046
- }
2047
- ), /* @__PURE__ */ React17.createElement(
2048
- DialogActions_default,
2049
- {
2050
- sx: {
2051
- p: 1
2052
- }
2053
- },
2054
- /* @__PURE__ */ React17.createElement(
2055
- Button_default,
2056
- {
2057
- size: "sm",
2058
- variant: "plain",
2059
- color: "neutral",
2060
- onClick: () => {
2061
- setValue("");
2062
- setAnchorEl(null);
2063
- }
2064
- },
2065
- "Clear"
2066
- )
2067
- )))
2068
- )));
2069
- if (label) {
2070
- return /* @__PURE__ */ React17.createElement(
2071
- FormControl_default,
2072
- {
2073
- required,
2074
- disabled,
2075
- error,
2076
- size: "sm"
2077
- },
2078
- /* @__PURE__ */ React17.createElement(FormLabel_default, null, label),
2079
- picker,
2080
- helperText && /* @__PURE__ */ React17.createElement(FormHelperText_default, null, helperText)
2081
- );
2082
- }
2083
- return picker;
2084
- }
2085
- );
2086
- DatePicker.displayName = "DatePicker";
2087
-
2088
- // src/components/DateRangePicker/DateRangePicker.tsx
2089
- import React18, { forwardRef as forwardRef5, useCallback as useCallback6, useMemo as useMemo4, useState as useState6 } from "react";
2090
- import { IMaskInput as IMaskInput2, IMask as IMask2 } from "react-imask";
2091
- import CalendarTodayIcon2 from "@mui/icons-material/esm/CalendarToday.js";
2092
- import { styled as styled7 } from "@mui/joy";
2093
- import { FocusTrap as FocusTrap2, ClickAwayListener as ClickAwayListener2, Popper as Popper2 } from "@mui/base";
2094
- var StyledPopper2 = styled7(Popper2, {
2095
- name: "DateRangePicker",
2096
- slot: "popper"
2097
- })(({ theme }) => ({
2098
- zIndex: theme.zIndex.tooltip
2099
- }));
2100
- var CalendarSheet2 = styled7(Sheet_default, {
2101
- name: "DateRangePicker",
2102
- slot: "sheet",
2103
- overridesResolver: (props, styles) => styles.root
2104
- })(({ theme }) => ({
2105
- zIndex: theme.zIndex.tooltip,
2106
- width: "264px",
2107
- boxShadow: theme.shadow.md,
2108
- borderRadius: theme.radius.md
2109
- }));
2110
- var formatValueString2 = ([date1, date2]) => {
2111
- const getStr = (date) => {
2112
- let day = `${date.getDate()}`;
2113
- let month = `${date.getMonth() + 1}`;
2114
- const year = date.getFullYear();
2115
- if (Number(day) < 10)
2116
- day = "0" + day;
2117
- if (Number(month) < 10)
2118
- month = "0" + month;
2119
- return [year, month, day].join("/");
2120
- };
2121
- return [getStr(date1), date2 ? getStr(date2) : ""].join(" - ");
2122
- };
2123
- var parseDate = (str) => {
2124
- const date1 = str.split(" - ")[0] || "";
2125
- const date2 = str.split(" - ")[1] || "";
2126
- const yearMonthDay1 = date1.split("/");
2127
- const yearMonthDay2 = date2.split("/");
2128
- return [
2129
- new Date(
2130
- Number(yearMonthDay1[0]),
2131
- Number(yearMonthDay1[1]) - 1,
2132
- Number(yearMonthDay1[2])
2133
- ),
2134
- new Date(
2135
- Number(yearMonthDay2[0]),
2136
- Number(yearMonthDay2[1]) - 1,
2137
- Number(yearMonthDay2[2])
2138
- )
2139
- ];
2140
- };
2141
- var TextMaskAdapter5 = React18.forwardRef(
2142
- function TextMaskAdapter6(props, ref) {
2143
- const { onChange, ...other } = props;
2144
- return /* @__PURE__ */ React18.createElement(
2145
- IMaskInput2,
2146
- {
2147
- ...other,
2148
- inputRef: ref,
2149
- onAccept: (value) => onChange({ target: { name: props.name, value } }),
2150
- mask: Date,
2151
- pattern: "Y/`m/`d - Y/`m/`d",
2152
- blocks: {
2153
- d: {
2154
- mask: IMask2.MaskedRange,
2155
- from: 1,
2156
- to: 31,
2157
- maxLength: 2
2158
- },
2159
- m: {
2160
- mask: IMask2.MaskedRange,
2161
- from: 1,
2162
- to: 12,
2163
- maxLength: 2
2164
- },
2165
- Y: {
2166
- mask: IMask2.MaskedRange,
2167
- from: 1900,
2168
- to: 9999
2169
- }
2170
- },
2171
- format: formatValueString2,
2172
- parse: parseDate,
2173
- autofix: "pad",
2174
- overwrite: true,
2175
- placeholderChar: " "
2176
- }
2177
- );
2178
- }
2179
- );
2180
- var DateRangePicker = forwardRef5(
2181
- (props, ref) => {
2182
- const {
2183
- onChange,
2184
- disabled,
2185
- label,
2186
- error,
2187
- helperText,
2188
- minDate,
2189
- maxDate,
2190
- disableFuture,
2191
- disablePast,
2192
- required
2193
- } = props;
2194
- const [value, setValue] = useState6(props.value || "");
2195
- const [anchorEl, setAnchorEl] = useState6(null);
2196
- const open = Boolean(anchorEl);
2197
- const calendarValue = useMemo4(
2198
- () => value ? parseDate(value) : void 0,
2199
- [value]
2200
- );
2201
- const handleChange = useCallback6(
2202
- (event) => {
2203
- setValue(event.target.value);
2204
- onChange?.(event);
2205
- },
2206
- [onChange]
2207
- );
2208
- const handleCalendarToggle = useCallback6(
2209
- (event) => {
2210
- setAnchorEl(anchorEl ? null : event.currentTarget);
2211
- },
2212
- [anchorEl, setAnchorEl]
2213
- );
2214
- const handleCalendarChange = useCallback6(
2215
- ([date1, date2]) => {
2216
- if (!date1 || !date2)
2217
- return;
2218
- setValue(formatValueString2([date1, date2]));
2219
- setAnchorEl(null);
2220
- },
2221
- [setValue, setAnchorEl]
2222
- );
2223
- const picker = /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement(
2224
- Input_default,
2225
- {
2226
- ref,
2227
- size: "sm",
2228
- value,
2229
- onChange: handleChange,
2230
- disabled,
2231
- required,
2232
- placeholder: "YYYY/MM/DD - YYYY/MM/DD",
2233
- slotProps: { input: { component: TextMaskAdapter5 } },
2234
- sx: {
2235
- // NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
2236
- fontFamily: "monospace"
2237
- },
2238
- endDecorator: /* @__PURE__ */ React18.createElement(IconButton_default, { variant: "plain", onClick: handleCalendarToggle }, /* @__PURE__ */ React18.createElement(CalendarTodayIcon2, null))
2239
- }
2240
- ), open && /* @__PURE__ */ React18.createElement(ClickAwayListener2, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ React18.createElement(
2241
- StyledPopper2,
2242
- {
2243
- id: "date-range-picker-popper",
2244
- open: true,
2245
- anchorEl,
2246
- placement: "bottom-end",
2247
- modifiers: [
2248
- {
2249
- name: "offset",
2250
- options: {
2251
- offset: [4, 4]
2252
- }
2253
- }
2254
- ]
2255
- },
2256
- /* @__PURE__ */ React18.createElement(FocusTrap2, { open: true }, /* @__PURE__ */ React18.createElement(CalendarSheet2, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React18.createElement(
2257
- Calendar_default,
2258
- {
2259
- rangeSelection: true,
2260
- defaultValue: calendarValue,
2261
- onChange: handleCalendarChange,
2262
- minDate: minDate ? new Date(minDate) : void 0,
2263
- maxDate: maxDate ? new Date(maxDate) : void 0,
2264
- disableFuture,
2265
- disablePast
2266
- }
2267
- ), /* @__PURE__ */ React18.createElement(
2268
- DialogActions_default,
2269
- {
2270
- sx: {
2271
- p: 1
2272
- }
2273
- },
2274
- /* @__PURE__ */ React18.createElement(
2275
- Button_default,
2276
- {
2277
- size: "sm",
2278
- variant: "plain",
2279
- color: "neutral",
2280
- onClick: () => {
2281
- setValue("");
2282
- setAnchorEl(null);
2283
- }
2284
- },
2285
- "Clear"
2286
- )
2287
- )))
2288
- )));
2289
- if (label) {
2290
- return /* @__PURE__ */ React18.createElement(FormControl_default, { required, disabled, error, size: "sm" }, /* @__PURE__ */ React18.createElement(FormLabel_default, null, label), picker, helperText && /* @__PURE__ */ React18.createElement(FormHelperText_default, null, helperText));
2291
- }
2292
- return picker;
2293
- }
2294
- );
2295
- DateRangePicker.displayName = "DateRangePicker";
2296
-
2297
- // src/components/DialogContent/DialogContent.tsx
2298
- import { DialogContent as JoyDialogContent, styled as styled8 } from "@mui/joy";
2299
- import { motion as motion18 } from "framer-motion";
2300
- var MotionDialogContent = motion18(JoyDialogContent);
2301
- var StyledDialogContent = styled8(MotionDialogContent)(({ theme }) => ({
2302
- padding: theme.spacing(0, 3, 2.5)
2303
- }));
2304
- var DialogContent = StyledDialogContent;
2305
- DialogContent.displayName = "DialogContent";
2306
-
2307
- // src/components/DialogContent/index.ts
2308
- var DialogContent_default = DialogContent;
2309
-
2310
- // src/components/DialogTitle/DialogTitle.tsx
2311
- import { DialogTitle as JoyDialogTitle, styled as styled9 } from "@mui/joy";
2312
- import { motion as motion19 } from "framer-motion";
2313
- var MotionDialogTitle = motion19(JoyDialogTitle);
2314
- var StyledDialogTitle = styled9(MotionDialogTitle)(({ theme }) => ({
2315
- padding: theme.spacing(2, 3)
2316
- }));
2317
- var DialogTitle = StyledDialogTitle;
2318
- DialogTitle.displayName = "DialogTitle";
2319
-
2320
- // src/components/DialogTitle/index.ts
2321
- var DialogTitle_default = DialogTitle;
2322
-
2323
- // src/components/DialogFrame/DialogFrame.tsx
2324
- import React20 from "react";
2325
-
2326
- // src/components/Modal/Modal.tsx
2327
- import React19 from "react";
2328
- import {
2329
- Modal as JoyModal,
2330
- ModalDialog as JoyModalDialog,
2331
- ModalClose as JoyModalClose,
2332
- ModalOverflow as JoyModalOverflow,
2333
- styled as styled10
2334
- } from "@mui/joy";
2335
- import { motion as motion20 } from "framer-motion";
2336
- var MotionModal = motion20(JoyModal);
2337
- var Modal = MotionModal;
2338
- Modal.displayName = "Modal";
2339
- var MotionModalDialog = motion20(JoyModalDialog);
2340
- var StyledModalDialog = styled10(MotionModalDialog)({
2341
- padding: 0
2342
- });
2343
- var ModalDialog = StyledModalDialog;
2344
- ModalDialog.displayName = "ModalDialog";
2345
- var MotionModalClose = motion20(JoyModalClose);
2346
- var ModalClose = MotionModalClose;
2347
- ModalClose.displayName = "ModalClose";
2348
- var MotionModalOverflow = motion20(JoyModalOverflow);
2349
- var ModalOverflow = MotionModalOverflow;
2350
- ModalOverflow.displayName = "ModalOverflow";
2351
- function ModalFrame(props) {
2352
- const { title, children, ...innerProps } = props;
2353
- return /* @__PURE__ */ React19.createElement(StyledModalDialog, { ...innerProps }, /* @__PURE__ */ React19.createElement(ModalClose, null), /* @__PURE__ */ React19.createElement(DialogTitle_default, null, title), /* @__PURE__ */ React19.createElement(DialogContent_default, null, children));
2354
- }
2355
- ModalFrame.displayName = "ModalFrame";
2356
-
2357
- // src/components/DialogFrame/DialogFrame.tsx
2358
- import { styled as styled11 } from "@mui/joy";
2359
- var StyledDialogFrame = styled11(ModalDialog)(({ theme }) => ({
2360
- padding: 0
2361
- }));
2362
- function DialogFrame(props) {
2363
- const { title, children, actions, ...innerProps } = props;
2364
- return /* @__PURE__ */ React20.createElement(StyledDialogFrame, { ...innerProps }, /* @__PURE__ */ React20.createElement(DialogTitle_default, null, title), /* @__PURE__ */ React20.createElement(DialogContent_default, null, children), /* @__PURE__ */ React20.createElement(DialogActions_default, null, actions));
2365
- }
2366
- DialogFrame.displayName = "DialogFrame";
2367
-
2368
- // src/components/Divider/Divider.tsx
2369
- import React21 from "react";
2370
- import { Divider as JoyDivider } from "@mui/joy";
2371
- import { motion as motion21 } from "framer-motion";
2372
- var MotionDivider = motion21(JoyDivider);
2373
- var Divider = (props) => {
2374
- return /* @__PURE__ */ React21.createElement(MotionDivider, { ...props });
2375
- };
2376
- Divider.displayName = "Divider";
2377
-
2378
- // src/components/InsetDrawer/InsetDrawer.tsx
2379
- import React22 from "react";
2380
- import { Drawer as JoyDrawer } from "@mui/joy";
2381
- import { motion as motion22 } from "framer-motion";
2382
- var MotionDrawer = motion22(JoyDrawer);
2383
- var InsetDrawer = (props) => {
2384
- const { children, ...innerProps } = props;
2385
- return /* @__PURE__ */ React22.createElement(
2386
- MotionDrawer,
2387
- {
2388
- ...innerProps,
2389
- slotProps: {
2390
- ...innerProps.slotProps,
2391
- content: {
2392
- ...innerProps.slotProps?.content,
2393
- sx: {
2394
- bgcolor: "transparent",
2395
- p: { md: 3, sm: 0 },
2396
- boxShadow: "none"
2397
- }
2398
- }
2399
- }
2400
- },
2401
- children
2402
- );
2403
- };
2404
- InsetDrawer.displayName = "InsetDrawer";
2405
-
2406
- // src/components/Grid/Grid.tsx
2407
- import { Grid as JoyGrid } from "@mui/joy";
2408
- import { motion as motion23 } from "framer-motion";
2409
- var MotionGrid = motion23(JoyGrid);
2410
- var Grid = MotionGrid;
2411
- Grid.displayName = "Grid";
2412
-
2413
- // src/components/MonthRangePicker/MonthRangePicker.tsx
2414
- import React23, { forwardRef as forwardRef6, useCallback as useCallback7, useMemo as useMemo5, useState as useState7 } from "react";
2415
- import { IMaskInput as IMaskInput3, IMask as IMask3 } from "react-imask";
2416
- import CalendarTodayIcon3 from "@mui/icons-material/esm/CalendarToday.js";
2417
- import { styled as styled12 } from "@mui/joy";
2418
- import { FocusTrap as FocusTrap3, ClickAwayListener as ClickAwayListener3, Popper as Popper3 } from "@mui/base";
2419
- var StyledPopper3 = styled12(Popper3, {
2420
- name: "MonthRangePicker",
2421
- slot: "popper"
2422
- })(({ theme }) => ({
2423
- zIndex: theme.zIndex.tooltip
2424
- }));
2425
- var CalendarSheet3 = styled12(Sheet_default, {
2426
- name: "MonthRangePicker",
2427
- slot: "sheet",
2428
- overridesResolver: (props, styles) => styles.root
2429
- })(({ theme }) => ({
2430
- zIndex: theme.zIndex.tooltip,
2431
- width: "264px",
2432
- boxShadow: theme.shadow.md,
2433
- borderRadius: theme.radius.md
2434
- }));
2435
- var formatValueString3 = ([date1, date2]) => {
2436
- const getStr = (date) => {
2437
- let month = `${date.getMonth() + 1}`;
2438
- const year = date.getFullYear();
2439
- if (Number(month) < 10)
2440
- month = "0" + month;
2441
- return [year, month].join("/");
2442
- };
2443
- return [getStr(date1), date2 ? getStr(date2) : ""].join(" - ");
2444
- };
2445
- var parseDate2 = (str) => {
2446
- const date1 = str.split(" - ")[0] || "";
2447
- const date2 = str.split(" - ")[1] || "";
2448
- const yearMonthDay1 = date1.split("/");
2449
- const yearMonthDay2 = date2.split("/");
2450
- return [
2451
- new Date(Number(yearMonthDay1[0]), Number(yearMonthDay1[1]) - 1),
2452
- new Date(Number(yearMonthDay2[0]), Number(yearMonthDay2[1]) - 1)
2453
- ];
2454
- };
2455
- var TextMaskAdapter7 = React23.forwardRef(
2456
- function TextMaskAdapter8(props, ref) {
2457
- const { onChange, ...other } = props;
2458
- return /* @__PURE__ */ React23.createElement(
2459
- IMaskInput3,
2460
- {
2461
- ...other,
2462
- inputRef: ref,
2463
- onAccept: (value) => onChange({ target: { name: props.name, value } }),
2464
- mask: Date,
2465
- pattern: "Y/`m - Y/`m",
2466
- blocks: {
2467
- m: {
2468
- mask: IMask3.MaskedRange,
2469
- from: 1,
2470
- to: 12,
2471
- maxLength: 2
2472
- },
2473
- Y: {
2474
- mask: IMask3.MaskedRange,
2475
- from: 1900,
2476
- to: 9999
2477
- }
2478
- },
2479
- format: formatValueString3,
2480
- parse: parseDate2,
2481
- autofix: "pad",
2482
- overwrite: true,
2483
- placeholderChar: " "
2484
- }
2485
- );
2486
- }
2487
- );
2488
- var MonthRangePicker = forwardRef6(
2489
- (props, ref) => {
2490
- const {
2491
- onChange,
2492
- disabled,
2493
- label,
2494
- error,
2495
- helperText,
2496
- minDate,
2497
- maxDate,
2498
- disableFuture,
2499
- disablePast,
2500
- required
2501
- } = props;
2502
- const [value, setValue] = useState7(props.value || "");
2503
- const [anchorEl, setAnchorEl] = useState7(null);
2504
- const open = Boolean(anchorEl);
2505
- const calendarValue = useMemo5(
2506
- () => value ? parseDate2(value) : void 0,
2507
- [value]
2508
- );
2509
- const handleChange = useCallback7(
2510
- (event) => {
2511
- setValue(event.target.value);
2512
- onChange?.(event);
2513
- },
2514
- [onChange]
2515
- );
2516
- const handleCalendarToggle = useCallback7(
2517
- (event) => {
2518
- setAnchorEl(anchorEl ? null : event.currentTarget);
2519
- },
2520
- [anchorEl, setAnchorEl]
2521
- );
2522
- const handleCalendarChange = useCallback7(
2523
- ([date1, date2]) => {
2524
- if (!date1 || !date2)
2525
- return;
2526
- setValue(formatValueString3([date1, date2]));
2527
- setAnchorEl(null);
2528
- },
2529
- [setValue, setAnchorEl]
2530
- );
2531
- const picker = /* @__PURE__ */ React23.createElement(React23.Fragment, null, /* @__PURE__ */ React23.createElement(
2532
- Input_default,
2533
- {
2534
- ref,
2535
- size: "sm",
2536
- value,
2537
- onChange: handleChange,
2538
- disabled,
2539
- required,
2540
- placeholder: "YYYY/MM - YYYY/MM",
2541
- slotProps: { input: { component: TextMaskAdapter7 } },
2542
- sx: {
2543
- // NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
2544
- fontFamily: "monospace"
2545
- },
2546
- endDecorator: /* @__PURE__ */ React23.createElement(IconButton_default, { variant: "plain", onClick: handleCalendarToggle }, /* @__PURE__ */ React23.createElement(CalendarTodayIcon3, null))
2547
- }
2548
- ), open && /* @__PURE__ */ React23.createElement(ClickAwayListener3, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ React23.createElement(
2549
- StyledPopper3,
2550
- {
2551
- id: "date-range-picker-popper",
2552
- open: true,
2553
- anchorEl,
2554
- placement: "bottom-end",
2555
- modifiers: [
2556
- {
2557
- name: "offset",
2558
- options: {
2559
- offset: [4, 4]
2560
- }
2561
- }
2562
- ]
2563
- },
2564
- /* @__PURE__ */ React23.createElement(FocusTrap3, { open: true }, /* @__PURE__ */ React23.createElement(CalendarSheet3, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React23.createElement(
2565
- Calendar_default,
2566
- {
2567
- view: "month",
2568
- views: ["month"],
2569
- rangeSelection: true,
2570
- defaultValue: calendarValue,
2571
- onChange: handleCalendarChange,
2572
- minDate: minDate ? new Date(minDate) : void 0,
2573
- maxDate: maxDate ? new Date(maxDate) : void 0,
2574
- disableFuture,
2575
- disablePast
2576
- }
2577
- ), /* @__PURE__ */ React23.createElement(
2578
- DialogActions_default,
2579
- {
2580
- sx: {
2581
- p: 1
2582
- }
2583
- },
2584
- /* @__PURE__ */ React23.createElement(
2585
- Button_default,
2586
- {
2587
- size: "sm",
2588
- variant: "plain",
2589
- color: "neutral",
2590
- onClick: () => {
2591
- setValue("");
2592
- setAnchorEl(null);
2593
- }
2594
- },
2595
- "Clear"
2596
- )
2597
- )))
2598
- )));
2599
- if (label) {
2600
- return /* @__PURE__ */ React23.createElement(FormControl_default, { required, disabled, error, size: "sm" }, /* @__PURE__ */ React23.createElement(FormLabel_default, null, label), picker, helperText && /* @__PURE__ */ React23.createElement(FormHelperText_default, null, helperText));
2601
- }
2602
- return picker;
2603
- }
2604
- );
2605
- MonthRangePicker.displayName = "MonthRangePicker";
2606
-
2607
- // src/components/Radio/Radio.tsx
2608
- import { Radio as JoyRadio, RadioGroup as JoyRadioGroup } from "@mui/joy";
2609
- import { motion as motion24 } from "framer-motion";
2610
- var MotionRadio = motion24(JoyRadio);
2611
- var Radio = MotionRadio;
2612
- Radio.displayName = "Radio";
2613
- var MotionRadioGroup = motion24(JoyRadioGroup);
2614
- var RadioGroup = MotionRadioGroup;
2615
- RadioGroup.displayName = "RadioGroup";
2616
-
2617
- // src/components/RadioList/RadioList.tsx
2618
- import React24 from "react";
2619
- function RadioList(props) {
2620
- const { items, ...innerProps } = props;
2621
- return /* @__PURE__ */ React24.createElement(RadioGroup, { ...innerProps }, items.map((item) => /* @__PURE__ */ React24.createElement(Radio, { key: `${item.value}`, value: item.value, label: item.label })));
2622
- }
2623
- RadioList.displayName = "RadioList";
2624
-
2625
- // src/components/Select/Select.tsx
2626
- import React25 from "react";
2627
- import {
2628
- Select as JoySelect,
2629
- Option as JoyOption
2630
- } from "@mui/joy";
2631
- import { motion as motion25 } from "framer-motion";
2632
- var MotionOption = motion25(JoyOption);
2633
- var Option = MotionOption;
2634
- Option.displayName = "Option";
2635
- function Select(props) {
2636
- const {
2637
- label,
2638
- helperText,
2639
- error,
2640
- size,
2641
- color,
2642
- disabled,
2643
- required,
2644
- onChange,
2645
- ...innerProps
2646
- } = props;
2647
- const handleChange = (event, newValue) => {
2648
- const _event = event || { target: {} };
2649
- const newEvent = {
2650
- ..._event,
2651
- // @ts-expect-error target에 name이 있을 수 있다.
2652
- target: { name: _event.target?.name, value: newValue || void 0 }
2653
- };
2654
- console.log(newEvent);
2655
- onChange?.(newEvent);
2656
- };
2657
- const select = /* @__PURE__ */ React25.createElement(
2658
- JoySelect,
2659
- {
2660
- ...innerProps,
2661
- required,
2662
- disabled,
2663
- size,
2664
- color,
2665
- onChange: handleChange
2666
- }
2667
- );
2668
- if (label) {
2669
- return /* @__PURE__ */ React25.createElement(
2670
- FormControl_default,
2671
- {
2672
- required,
2673
- disabled,
2674
- size,
2675
- color,
2676
- error
2677
- },
2678
- /* @__PURE__ */ React25.createElement(FormLabel_default, null, label),
2679
- select,
2680
- helperText && /* @__PURE__ */ React25.createElement(FormHelperText_default, null, helperText)
2681
- );
2682
- }
2683
- return select;
2684
- }
2685
- Select.displayName = "Select";
2686
-
2687
- // src/components/Switch/Switch.tsx
2688
- import React26 from "react";
2689
- import {
2690
- Switch as JoySwitch,
2691
- styled as styled13,
2692
- switchClasses
2693
- } from "@mui/joy";
2694
- import { motion as motion26 } from "framer-motion";
2695
- var MotionSwitch = motion26(JoySwitch);
2696
- var StyledThumb = styled13(motion26.div)({
2697
- "--Icon-fontSize": "calc(var(--Switch-thumbSize) * 0.75)",
2698
- display: "inline-flex",
2699
- justifyContent: "center",
2700
- alignItems: "center",
2701
- position: "absolute",
2702
- left: "var(--Switch-thumbOffset)",
2703
- width: "var(--Switch-thumbWidth)",
2704
- height: "var(--Switch-thumbSize)",
2705
- borderRadius: "var(--Switch-thumbRadius)",
2706
- boxShadow: "var(--Switch-thumbShadow)",
2707
- color: "var(--Switch-thumbColor)",
2708
- backgroundColor: "var(--Switch-thumbBackground)",
2709
- [`&.${switchClasses.checked}`]: {
2710
- left: "unset",
2711
- right: "var(--Switch-thumbOffset)"
2712
- }
2713
- });
2714
- var Thumb = (props) => /* @__PURE__ */ React26.createElement(StyledThumb, { ...props, layout: true, transition: spring });
2715
- var spring = {
2716
- type: "spring",
2717
- stiffness: 700,
2718
- damping: 30
2719
- };
2720
- var Switch = (props) => {
2721
- return /* @__PURE__ */ React26.createElement(
2722
- MotionSwitch,
2723
- {
2724
- ...props,
2725
- slots: {
2726
- thumb: Thumb,
2727
- ...props.slots
2728
- }
2729
- }
2730
- );
2731
- };
2732
- Switch.displayName = "Switch";
2733
-
2734
- // src/components/Tabs/Tabs.tsx
2735
- import {
2736
- Tabs as JoyTabs,
2737
- Tab as JoyTab,
2738
- TabList as JoyTabList,
2739
- TabPanel as JoyTabPanel,
2740
- styled as styled14,
2741
- tabClasses
2742
- } from "@mui/joy";
2743
- import { motion as motion27 } from "framer-motion";
2744
- var MotionTabs = motion27(JoyTabs);
2745
- var Tabs = MotionTabs;
2746
- Tabs.displayName = "Tabs";
2747
- var MotionTab = styled14(motion27(JoyTab))(({ theme }) => ({
2748
- [`&:not(.${tabClasses.selected})`]: {
2749
- color: theme.palette.neutral[700]
2750
- }
2751
- }));
2752
- var Tab = MotionTab;
2753
- Tab.displayName = "Tab";
2754
- var MotionTabList = motion27(JoyTabList);
2755
- var TabList = MotionTabList;
2756
- TabList.displayName = "TabList";
2757
- var MotionTabPanel = motion27(JoyTabPanel);
2758
- var TabPanel = MotionTabPanel;
2759
- TabPanel.displayName = "TabPanel";
2760
-
2761
- // src/components/Textarea/Textarea.tsx
2762
- import React27 from "react";
2763
- import { Textarea as JoyTextarea } from "@mui/joy";
2764
- import { motion as motion28 } from "framer-motion";
2765
- var MotionTextarea = motion28(JoyTextarea);
2766
- var Textarea = (props) => {
2767
- const {
2768
- label,
2769
- error,
2770
- helperText,
2771
- color,
2772
- size,
2773
- disabled,
2774
- required,
2775
- ...innerProps
2776
- } = props;
2777
- if (label) {
2778
- return /* @__PURE__ */ React27.createElement(
2779
- FormControl_default,
2780
- {
2781
- required,
2782
- disabled,
2783
- color,
2784
- size,
2785
- error
2786
- },
2787
- /* @__PURE__ */ React27.createElement(FormLabel_default, null, label),
2788
- /* @__PURE__ */ React27.createElement(MotionTextarea, { ...innerProps }),
2789
- helperText && /* @__PURE__ */ React27.createElement(FormHelperText_default, null, helperText)
2790
- );
2791
- }
2792
- return /* @__PURE__ */ React27.createElement(
2793
- MotionTextarea,
2794
- {
2795
- required,
2796
- disabled,
2797
- color,
2798
- size,
2799
- ...innerProps
2800
- }
2801
- );
2802
- };
2803
- Textarea.displayName = "Textarea";
2804
-
2805
- // src/components/ThemeProvider/ThemeProvider.tsx
2806
- import React28 from "react";
2807
- import {
2808
- CssBaseline,
2809
- CssVarsProvider,
2810
- checkboxClasses,
2811
- extendTheme
2812
- } from "@mui/joy";
2813
- var defaultTheme = extendTheme({
2814
- cssVarPrefix: "ceed",
2815
- components: {
2816
- JoyTable: {
2817
- defaultProps: {
2818
- size: "sm",
2819
- borderAxis: "bothBetween"
2820
- },
2821
- styleOverrides: {
2822
- root: ({ theme }) => ({
2823
- "--TableRow-stripeBackground": theme.palette.background.level1,
2824
- "--TableCell-selectedBackground": theme.palette.background.level2,
2825
- "--TableRow-hoverBackground": theme.palette.background.level3,
2826
- "& tbody tr[aria-checked=false] th": {
2827
- "--TableCell-headBackground": "transparent"
2828
- },
2829
- "& tbody tr[aria-checked=true]:hover th": {
2830
- "--TableCell-headBackground": "var(--TableRow-hoverBackground)"
2831
- },
2832
- [`& tbody tr[aria-checked=true]:not(:hover) th`]: {
2833
- "--TableCell-headBackground": "var(--TableCell-selectedBackground)"
2834
- },
2835
- [`& tbody tr[aria-checked=true]:not(:hover) td`]: {
2836
- "--TableCell-dataBackground": "var(--TableCell-selectedBackground)"
2837
- },
2838
- [`& .${checkboxClasses.root}`]: {
2839
- verticalAlign: "middle"
2840
- }
2841
- })
2842
- }
2843
- },
2844
- JoyTooltip: {
2845
- defaultProps: {
2846
- size: "sm",
2847
- placement: "top"
2848
- }
2849
- }
2850
- }
2851
- });
2852
- function ThemeProvider(props) {
2853
- return /* @__PURE__ */ React28.createElement(React28.Fragment, null, /* @__PURE__ */ React28.createElement(CssVarsProvider, { theme: defaultTheme }, /* @__PURE__ */ React28.createElement(CssBaseline, null), props.children));
2854
- }
2855
- ThemeProvider.displayName = "ThemeProvider";
2856
-
2857
- // src/components/Tooltip/Tooltip.tsx
2858
- import React29 from "react";
2859
- import { Tooltip as JoyTooltip } from "@mui/joy";
2860
- import { motion as motion29 } from "framer-motion";
2861
- var MotionTooltip = motion29(JoyTooltip);
2862
- var Tooltip = (props) => {
2863
- return /* @__PURE__ */ React29.createElement(MotionTooltip, { ...props });
2864
- };
2865
- Tooltip.displayName = "Tooltip";
2866
- export {
2867
- Accordion,
2868
- AccordionDetails,
2869
- AccordionSummary,
2870
- Accordions,
2871
- Alert,
2872
- AspectRatio,
2873
- Autocomplete,
2874
- AutocompleteListbox,
2875
- AutocompleteOption,
2876
- Avatar,
2877
- AvatarGroup,
2878
- Badge,
2879
- Box,
2880
- Breadcrumbs,
2881
- Button,
2882
- Calendar,
2883
- Card,
2884
- CardActions,
2885
- CardContent,
2886
- CardCover,
2887
- CardOverflow,
2888
- Checkbox,
2889
- Chip,
2890
- CircularProgress,
2891
- Container,
2892
- CurrencyInput,
2893
- DataTable,
2894
- DatePicker,
2895
- DateRangePicker,
2896
- DialogActions,
2897
- DialogContent,
2898
- DialogFrame,
2899
- DialogTitle,
2900
- Divider,
2901
- Drawer,
2902
- Dropdown,
2903
- FormControl,
2904
- FormHelperText,
2905
- FormLabel,
2906
- Grid,
2907
- IconButton,
2908
- Input,
2909
- InsetDrawer,
2910
- LinearProgress2 as LinearProgress,
2911
- Link,
2912
- List,
2913
- ListDivider,
2914
- ListItem,
2915
- ListItemButton,
2916
- ListItemContent,
2917
- ListItemDecorator,
2918
- ListSubheader,
2919
- Menu,
2920
- MenuButton,
2921
- MenuItem,
2922
- Modal,
2923
- ModalClose,
2924
- ModalDialog,
2925
- ModalFrame,
2926
- ModalOverflow,
2927
- MonthRangePicker,
2928
- Option,
2929
- Radio,
2930
- RadioGroup,
2931
- RadioList,
2932
- Select,
2933
- Sheet,
2934
- Skeleton,
2935
- Slider,
2936
- Stack,
2937
- Step,
2938
- StepButton,
2939
- StepIndicator,
2940
- Stepper,
2941
- Switch,
2942
- Tab,
2943
- TabList,
2944
- TabPanel,
2945
- Table,
2946
- TableBody,
2947
- TableHead,
2948
- Tabs,
2949
- Textarea,
2950
- ThemeProvider,
2951
- Tooltip,
2952
- Typography,
2953
- accordionClasses,
2954
- accordionDetailsClasses,
2955
- accordionSummaryClasses,
2956
- accordionGroupClasses as accordionsClasses,
2957
- alertClasses,
2958
- aspectRatioClasses,
2959
- autocompleteClasses,
2960
- autocompleteListboxClasses,
2961
- autocompleteOptionClasses,
2962
- avatarClasses,
2963
- avatarGroupClasses,
2964
- badgeClasses,
2965
- boxClasses,
2966
- breadcrumbsClasses,
2967
- buttonClasses,
2968
- cardActionsClasses,
2969
- cardClasses,
2970
- cardContentClasses,
2971
- cardCoverClasses,
2972
- cardOverflowClasses,
2973
- checkboxClasses2 as checkboxClasses,
2974
- chipClasses,
2975
- circularProgressClasses,
2976
- dialogActionsClasses,
2977
- dialogContentClasses,
2978
- dialogTitleClasses,
2979
- dividerClasses,
2980
- drawerClasses,
2981
- formControlClasses,
2982
- formHelperTextClasses,
2983
- formLabelClasses,
2984
- gridClasses,
2985
- iconButtonClasses,
2986
- inputClasses,
2987
- linearProgressClasses,
2988
- linkClasses,
2989
- listClasses,
2990
- listDividerClasses,
2991
- listItemButtonClasses,
2992
- listItemClasses,
2993
- listItemContentClasses,
2994
- listItemDecoratorClasses,
2995
- listSubheaderClasses,
2996
- menuButtonClasses,
2997
- menuClasses,
2998
- menuItemClasses,
2999
- modalClasses,
3000
- modalCloseClasses,
3001
- modalDialogClasses,
3002
- modalOverflowClasses,
3003
- optionClasses,
3004
- radioClasses,
3005
- radioGroupClasses,
3006
- selectClasses,
3007
- sheetClasses,
3008
- skeletonClasses,
3009
- sliderClasses,
3010
- stackClasses,
3011
- stepButtonClasses,
3012
- stepClasses,
3013
- stepperClasses,
3014
- switchClasses2 as switchClasses,
3015
- tabListClasses,
3016
- tabPanelClasses,
3017
- tableClasses,
3018
- tabsClasses,
3019
- textareaClasses,
3020
- tooltipClasses,
3021
- typographyClasses,
3022
- useColorScheme,
3023
- useTheme,
3024
- useThemeProps2 as useThemeProps
3025
- };
1
+ import{useTheme as Kc,useColorScheme as eu,useThemeProps as ou,alertClasses as tu,boxClasses as ru,buttonClasses as nu,checkboxClasses as au,dividerClasses as iu,iconButtonClasses as su,inputClasses as lu,menuClasses as mu,menuButtonClasses as du,menuItemClasses as pu,optionClasses as cu,radioClasses as uu,radioGroupClasses as gu,selectClasses as fu,switchClasses as hu,tableClasses as bu,textareaClasses as Cu,typographyClasses as yu,formControlClasses as xu,formLabelClasses as vu,formHelperTextClasses as Du,gridClasses as Mu,stackClasses as ku,sheetClasses as Tu,modalClasses as Pu,modalCloseClasses as wu,modalDialogClasses as Fu,modalOverflowClasses as Iu,dialogTitleClasses as Au,dialogContentClasses as Bu,dialogActionsClasses as Nu,tooltipClasses as Lu,tabsClasses as Su,tabListClasses as Hu,tabPanelClasses as zu,accordionClasses as Vu,accordionDetailsClasses as Eu,accordionGroupClasses as Ou,accordionSummaryClasses as Ju,AutocompleteListbox as Yu,AutocompleteOption as Wu,autocompleteClasses as qu,autocompleteListboxClasses as $u,autocompleteOptionClasses as Gu,Avatar as ju,avatarClasses as _u,AvatarGroup as Ru,avatarGroupClasses as Uu,AspectRatio as Xu,aspectRatioClasses as Qu,Badge as Zu,badgeClasses as Ku,breadcrumbsClasses as eg,Card as og,cardClasses as tg,CardActions as rg,cardActionsClasses as ng,CardContent as ag,cardContentClasses as ig,CardCover as sg,cardCoverClasses as lg,CardOverflow as mg,cardOverflowClasses as dg,Chip as pg,chipClasses as cg,CircularProgress as ug,circularProgressClasses as gg,Drawer as fg,drawerClasses as hg,LinearProgress as bg,linearProgressClasses as Cg,List as yg,listClasses as xg,ListDivider as vg,listDividerClasses as Dg,ListItem as Mg,listItemClasses as kg,ListItemButton as Tg,listItemButtonClasses as Pg,ListItemContent as wg,listItemContentClasses as Fg,ListItemDecorator as Ig,listItemDecoratorClasses as Ag,ListSubheader as Bg,listSubheaderClasses as Ng,Link as Lg,linkClasses as Sg,Slider as Hg,sliderClasses as zg,Step as Vg,stepClasses as Eg,StepButton as Og,stepButtonClasses as Jg,StepIndicator as Yg,Stepper as Wg,stepperClasses as qg,Skeleton as $g,skeletonClasses as Gg}from"@mui/joy";import Z from"react";import{AccordionGroup as wt,Accordion as Ft,AccordionSummary as It,AccordionDetails as At}from"@mui/joy";import{motion as Fe}from"framer-motion";var Bt=Fe(It),Ie=Bt;Ie.displayName="AccordionSummary";var Nt=Fe(At),Ae=Nt;Ae.displayName="AccordionDetails";var Lt=Fe(Ft);function Be(e){let{summary:o,details:r,variant:n,color:i,...a}=e,t=n==="solid"?"solid":void 0;return Z.createElement(Lt,{variant:t,color:i,...a},Z.createElement(Ie,{variant:t,color:i},o),Z.createElement(Ae,{variant:t,color:i},r))}Be.displayName="Accordion";var St=Fe(wt);function Re(e){let{variant:o,color:r,items:n,...i}=e;return Z.createElement(St,{variant:o,color:r,...i},n.map((a,t)=>Z.createElement(Be,{summary:a.summary,details:a.details,index:t,variant:o,color:r})))}Re.displayName="Accordions";import Ne from"react";import{Alert as Wt}from"@mui/joy";import{motion as qt}from"framer-motion";import Ht from"react";import{Typography as zt}from"@mui/joy";import{motion as Vt}from"framer-motion";var Et=Vt(zt),K=e=>Ht.createElement(Et,{...e});K.displayName="Typography";var S=K;import{Stack as Ot}from"@mui/joy";import{motion as Jt}from"framer-motion";var Yt=Jt(Ot),ee=Yt;ee.displayName="Stack";var O=ee;var $t=qt(Wt);function Ue(e){let{title:o,content:r,actions:n,color:i="primary",...a}=e,t=e.variant==="outlined"?void 0:e.variant;return Ne.createElement($t,{...a,color:i,endDecorator:n},Ne.createElement(O,null,o&&Ne.createElement(S,{color:i,variant:t,level:"title-md",fontWeight:600},o),Ne.createElement(S,{color:i,variant:t,level:"body-md"},r)))}Ue.displayName="Alert";import ne from"react";import{Autocomplete as Vo}from"@mui/joy";import{FormControl as Gt,styled as jt}from"@mui/joy";import{motion as _t}from"framer-motion";var Rt=jt(_t(Gt))({width:"100%"}),oe=Rt;oe.displayName="FormControl";var F=oe;import{FormLabel as Ut}from"@mui/joy";import{motion as Xt}from"framer-motion";var Qt=Xt(Ut),te=Qt;te.displayName="FormLabel";var I=te;import{FormHelperText as Zt}from"@mui/joy";import{motion as Kt}from"framer-motion";var er=Kt(Zt),re=er;re.displayName="FormHelperText";var M=re;function Xe(e){let{label:o,error:r,helperText:n,color:i,size:a,disabled:t,required:s,...m}=e;return o?ne.createElement(F,{required:s,color:i,size:a,error:r,disabled:t},ne.createElement(I,null,o),ne.createElement(Vo,{...m}),n&&ne.createElement(M,null,n)):ne.createElement(Vo,{...m,required:s,color:i,size:a,disabled:t})}Xe.displayName="Autocomplete";import{Box as or}from"@mui/joy";import{motion as tr}from"framer-motion";var rr=tr(or),ae=rr;ae.displayName="Box";var Le=ae;import V from"react";import{Breadcrumbs as ur,Link as gr}from"@mui/joy";import Qe from"react";import{Menu as nr,MenuButton as ar,MenuItem as ir}from"@mui/joy";import{motion as Ze}from"framer-motion";var sr=Ze(nr),ie=e=>Qe.createElement(sr,{...e});ie.displayName="Menu";var lr=Ze(ar),se=e=>Qe.createElement(lr,{...e});se.displayName="MenuButton";var mr=Ze(ir),le=e=>Qe.createElement(mr,{...e});le.displayName="MenuItem";var Eo=ie;import{Dropdown as dr}from"@mui/joy";import{motion as pr}from"framer-motion";var cr=pr(dr),me=cr;me.displayName="Dropdown";var Oo=me;function Ke(e){let{crumbs:o,size:r,frontCrumbCounts:n=1,backCrumbCounts:i=3,slots:{link:a,...t}={link:gr},slotProps:{link:s,...m}={link:{color:"neutral"}},...p}=e,d=Math.max(1,i),c=l=>l.type==="link"&&a?V.createElement(a,{to:l.linkHref,href:l.linkHref,...s},l.label):V.createElement(S,null,l.label),f=o.slice(0,n).map(l=>V.createElement(c,{...l})),b=(n+d>o.length?o.slice(n):o.slice(-d)).map(l=>V.createElement(c,{...l})),h=o.slice(n,-d).map(l=>V.createElement(le,null,V.createElement(c,{...l})));return console.log(h),V.createElement(ur,{size:r,slots:t,slotProps:m,...p},f,h.length&&V.createElement(Oo,null,V.createElement(se,{variant:"plain"},"..."),V.createElement(Eo,null,h)),b)}Ke.displayName="Breadcrumbs";import fr,{forwardRef as hr}from"react";import{Button as br}from"@mui/joy";import{motion as Cr}from"framer-motion";var yr=Cr(br),de=hr((e,o)=>fr.createElement(yr,{ref:o,...e}));de.displayName="Button";var x=de;import g,{Fragment as ce,forwardRef as Fr,useMemo as _o}from"react";import{styled as H}from"@mui/joy";import Ir from"@mui/icons-material/esm/ChevronLeft.js";import Ar from"@mui/icons-material/esm/ChevronRight.js";import{AnimatePresence as Ro,motion as Br}from"framer-motion";var Jo=e=>{let o=[],r=new Date(e.getFullYear(),e.getMonth(),1),n=new Date(e.getFullYear(),e.getMonth()+1,0),i=Math.ceil((r.getDay()+1)/7),a=Math.ceil((n.getDate()+r.getDay())/7),t=1;for(let s=1;s<=a;s++){let m=[];for(let p=1;p<=7;p++)s===i&&p<r.getDay()+1||t>n.getDate()?m.push(void 0):(m.push(t),t++);o.push(m)}return o},Yo=(e,o)=>e.toLocaleString(o,{year:"numeric"}),eo=(e,o)=>e.toLocaleString(o,{year:"numeric",month:"long"}),Wo=(e,o)=>new Date(0,e).toLocaleString(o,{month:"short"}),qo=e=>{let o=new Date().getDay(),r=new Date;return r.setDate(r.getDate()-o),Array.from({length:7}).map(()=>{let n=r.toLocaleString(e,{weekday:"short"});return r.setDate(r.getDate()+1),n})},$o=e=>{let o=new Date,r=new Date(e);return r.setHours(0,0,0,0),o.setHours(0,0,0,0),r.getTime()===o.getTime()},oo=(e,o)=>{let r=new Date(e),n=new Date(o);return r.setHours(0,0,0,0),n.setHours(0,0,0,0),r.getTime()===n.getTime()},J=(e,o,r)=>{let n=new Date(r);n.setHours(0,0,0,0);let i=new Date(Math.min(e.getTime(),o.getTime())),a=new Date(Math.max(e.getTime(),o.getTime()));return n>=i&&n<=a},Se=(e,o)=>e.getFullYear()===o.getFullYear()&&e.getMonth()===o.getMonth();import xr from"react";import{IconButton as vr}from"@mui/joy";import{motion as Dr}from"framer-motion";var Mr=Dr(vr),pe=e=>xr.createElement(Mr,{...e});pe.displayName="IconButton";var L=pe;import{useCallback as kr,useMemo as Tr,useState as He}from"react";import{useThemeProps as Pr}from"@mui/joy";var wr=(e,o)=>o.includes(e)?e:o[0],Go=e=>{let[o,r]=He(()=>wr(e.view||"day",e.views||["day","month"])),[n,i]=He(e.defaultValue),[a,t]=He(()=>{let l=new Date;return l.setDate(1),l.setHours(0,0,0,0),e.value?.[0]||e.defaultValue?.[0]||l}),[[s,m],p]=He([0,0]),d=e.view??o,c=l=>{p([s+l,l])},f=kr(l=>{t(l),d==="month"?a.getFullYear()!==l.getFullYear()&&c(l>a?1:-1):c(l>a?1:-1),e.onMonthChange?.(l)},[e.onMonthChange,a,d]),b=Pr({props:{locale:"default",views:["day","month"],view:d,value:e.value??n,...e,onChange:e.value?e.onChange:l=>{i(l),e.onChange?.(l)},onMonthChange:f,onViewChange:()=>{let l=d==="month"?"day":"month";!(!e.views||e.views.includes(l))||e.view===l||(e.onViewChange?e.onViewChange(l):r(l))}},name:"Calendar"}),h=Tr(()=>({...b,viewMonth:a,direction:m}),[b,a,m]);return[b,h]};import{useCallback as R,useState as jo}from"react";var ze=e=>{let[o,r]=jo(null),[n,i]=jo(null);return{calendarTitle:e.view==="month"?Yo(e.viewMonth,e.locale||"default"):eo(e.viewMonth,e.locale||"default"),onPrev:R(()=>{if(e.view==="day"){let a=new Date(e.viewMonth||new Date);a.setMonth(a.getMonth()-1),e.onMonthChange?.(a)}else if(e.view==="month"){let a=new Date(e.viewMonth||new Date);a.setFullYear(a.getFullYear()-1),e.onMonthChange?.(a)}},[e.onMonthChange,e.viewMonth,e.view]),onNext:R(()=>{if(e.view==="day"){let a=new Date(e.viewMonth||new Date);a.setMonth(a.getMonth()+1),e.onMonthChange?.(a)}else if(e.view==="month"){let a=new Date(e.viewMonth||new Date);a.setFullYear(a.getFullYear()+1),e.onMonthChange?.(a)}},[e.onMonthChange,e.viewMonth,e.view]),getDayCellProps:R(a=>{let t=new Date(e.viewMonth||new Date);t.setHours(0,0,0,0),t.setDate(a);let s=e.rangeSelection&&e.value&&e.value[0]&&(o&&J(e.value[0],o,t)||e.value[1]&&J(e.value[0],e.value[1],t));return{"aria-label":t.toLocaleDateString(),"aria-current":s?"date":void 0}},[e.rangeSelection,e.value,e.viewMonth,o]),getMonthCellProps:R(a=>{let t=new Date(e.viewMonth||new Date);t.setDate(1),t.setHours(0,0,0,0),t.setMonth(a);let m=!e.views?.find(p=>p==="day")&&e.rangeSelection&&e.value&&e.value[0]&&(n&&J(e.value[0],n,t)||e.value[1]&&J(e.value[0],e.value[1],t));return{"aria-label":t.toLocaleDateString(),"aria-current":m?"date":void 0}},[e.rangeSelection,e.value,e.viewMonth,n]),getPickerDayProps:R(a=>{let t=new Date(e.viewMonth||new Date);t.setHours(0,0,0,0),t.setDate(a);let s=!!e.value&&(oo(t,e.value[0])||e.value[1]&&oo(t,e.value[1])),m=e.rangeSelection&&e.value&&e.value[0]&&(o&&J(e.value[0],o,t)||e.value[1]&&J(e.value[0],e.value[1],t)),p=()=>{e.rangeSelection?e.value?e.value[0]&&!e.value[1]?e.onChange?.([new Date(Math.min(e.value[0].getTime(),t.getTime())),new Date(Math.max(e.value[0].getTime(),t.getTime()))]):e.onChange?.([t,void 0]):e.onChange?.([t,void 0]):e.onChange?.([t,void 0]),r(null)};return{isToday:$o(t),isSelected:s,onClick:p,onMouseEnter:e.rangeSelection&&e.value?.[0]&&!e.value?.[1]?()=>r(t):void 0,disabled:e.minDate&&t<e.minDate||e.maxDate&&t>e.maxDate||e.disableFuture&&t>new Date||e.disablePast&&t<(()=>{let d=new Date;return d.setHours(0,0,0,0),d})(),tabIndex:-1,"aria-label":t.toLocaleDateString(),"aria-selected":s?"true":void 0,"aria-current":m?"date":void 0}},[e.onChange,e.value,e.viewMonth,e.rangeSelection,e.minDate,e.maxDate,e.disableFuture,e.disablePast,o]),getPickerMonthProps:R(a=>{let t=new Date(e.viewMonth||new Date);t.setDate(1),t.setHours(0,0,0,0),t.setMonth(a);let s=!e.views?.find(c=>c==="day")&&e.rangeSelection,m=!!e.value&&(Se(t,e.value[0])||e.value[1]&&Se(t,e.value[1])),p=s&&e.value&&e.value[0]&&(n&&J(e.value[0],n,t)||e.value[1]&&J(e.value[0],e.value[1],t)),d=()=>{s?e.value?e.value[0]&&!e.value[1]?e.onChange?.([new Date(Math.min(e.value[0].getTime(),t.getTime())),new Date(Math.max(e.value[0].getTime(),t.getTime()))]):e.onChange?.([t,void 0]):e.onChange?.([t,void 0]):(e.onViewChange?.("day"),e.onMonthChange?.(t)),i(null)};return{isSelected:m,onMouseEnter:s&&e.value?.[0]&&!e.value?.[1]?()=>i(t):void 0,disabled:e.minDate&&(()=>{let c=new Date(t);return c.setMonth(c.getMonth()+1),c.setDate(0),c<e.minDate})()||e.maxDate&&(()=>{let c=new Date(t);return c.setDate(0),c>e.maxDate})()||e.disableFuture&&t>new Date||e.disablePast&&t<new Date&&!Se(t,new Date),onClick:d,tabIndex:-1,"aria-label":eo(t,e.locale||"default"),"aria-selected":m?"true":void 0,"aria-current":p?"date":void 0}},[e.onMonthChange,e.onViewChange,e.onChange,e.viewMonth,e.locale,e.value,e.minDate,e.maxDate,e.disableFuture,e.disablePast,n])}};var Nr=H("div",{name:"Calendar",slot:"root"})({maxWidth:"264px"}),Lr=H("div",{name:"Calendar",slot:"calendarHeader"})(({theme:e})=>({display:"flex",justifyContent:"space-between",alignItems:"center",padding:e.spacing(1)})),Uo=H("div",{name:"Calendar",slot:"viewContainer"})(({theme:e,calendarType:o})=>({paddingLeft:e.spacing(1),paddingRight:e.spacing(1),position:"relative",overflow:"hidden",minHeight:o==="datePicker"?"250px":"unset"})),Xo=H(Br.table,{name:"Calendar",slot:"viewTable"})(({theme:e})=>({borderSpacing:0,"& td, & th":{padding:0},"& th":{paddingTop:e.spacing(1),paddingBottom:e.spacing(1)}})),Sr=H("thead",{name:"Calendar",slot:"weekHeaderContainer"})({}),Hr=H("tbody",{name:"Calendar",slot:"dayPickerContainer"})({}),zr=H(x,{name:"Calendar",slot:"switchViewButton"})(({ownerState:e})=>[e.view==="month"&&{pointerEvents:"none"}]),Vr=H("td",{name:"Calendar",slot:"dayCell"})(({theme:e})=>({"&[aria-current=date]":{position:"relative","& button[aria-current=date]:not([aria-selected=true]):not(:hover):not(:active)":{backgroundColor:`rgb(${e.palette.primary.lightChannel})`},'& + td[aria-hidden] + td[aria-current="date"]::before':{content:'""',position:"absolute",top:0,left:"-10px",bottom:0,width:"16px",backgroundColor:`rgb(${e.palette.primary.lightChannel})`,zIndex:-1}}})),Er=H("td",{name:"Calendar",slot:"monthCell"})(({theme:e})=>({"&[aria-current=date]":{position:"relative","& button[aria-current=date]:not([aria-selected=true]):not(:hover):not(:active)":{backgroundColor:`rgb(${e.palette.primary.lightChannel})`},'& + td[aria-hidden] + td[aria-current="date"]::before':{content:'""',position:"absolute",top:0,left:"-10px",bottom:0,width:"16px",backgroundColor:`rgb(${e.palette.primary.lightChannel})`,zIndex:-1}}})),Or=H(x,{name:"Calendar",slot:"month"})(({theme:e,isSelected:o,disabled:r})=>[{width:"59px",textAlign:"center","&:hover":{color:e.palette.primary.softColor,backgroundColor:e.palette.primary.softHoverBg},"&:active":{color:e.palette.primary.softColor,backgroundColor:e.palette.primary.softActiveBg}},o&&{backgroundColor:e.palette.primary.solidBg,color:e.palette.primary.solidColor,"&:hover":{color:e.palette.primary.solidColor,backgroundColor:e.palette.primary.solidHoverBg},"&:active":{color:e.palette.primary.solidColor,backgroundColor:e.palette.primary.solidActiveBg}},r&&{color:e.palette.neutral.solidDisabledColor,backgroundColor:e.palette.neutral.solidDisabledBg}]),Jr=H(x,{name:"Calendar",slot:"day"})(({theme:e,isToday:o,isSelected:r,disabled:n})=>[{width:"32px",height:"32px",textAlign:"center","&:hover":{color:e.palette.primary.softColor,backgroundColor:e.palette.primary.softHoverBg},"&:active":{color:e.palette.primary.softColor,backgroundColor:e.palette.primary.softActiveBg}},o&&!r&&{"&:not([aria-current=date]):not(:hover)":{border:`1px solid ${e.palette.neutral.outlinedBorder}`}},r&&{backgroundColor:e.palette.primary.solidBg,color:e.palette.primary.solidColor,"&:hover":{color:e.palette.primary.solidColor,backgroundColor:e.palette.primary.solidHoverBg},"&:active":{color:e.palette.primary.solidColor,backgroundColor:e.palette.primary.solidActiveBg}},n&&{color:e.palette.neutral.solidDisabledColor,backgroundColor:e.palette.neutral.solidDisabledBg}]),Qo={enter:e=>({x:e>0?300:-300,opacity:0}),center:{position:"relative",zIndex:1,x:0,opacity:1},exit:e=>({position:"absolute",zIndex:0,x:e<0?300:-300,opacity:0})},Ve=1e4,Zo=(e,o)=>Math.abs(e)*o,Yr=e=>{let{ownerState:o}=e,{getPickerDayProps:r,getDayCellProps:n}=ze(o),i=_o(()=>Jo(o.viewMonth),[o.viewMonth]),a=_o(()=>qo(o.locale||"default"),[o.locale]);return g.createElement(Uo,{calendarType:"datePicker"},g.createElement(Ro,{initial:!1,custom:o.direction},g.createElement(Xo,{key:`${o.viewMonth.toString()}_${o.direction}`,custom:o.direction,variants:Qo,initial:"enter",animate:"center",exit:"exit",transition:{x:{type:"spring",stiffness:300,damping:30},opacity:{duration:.2}},drag:"x",dragConstraints:{left:0,right:0},dragElastic:1,onDragEnd:(t,{offset:s,velocity:m})=>{let p=Zo(s.x,m.x);if(p<-Ve){let d=new Date(o.viewMonth||new Date);d.setMonth(d.getMonth()+1),o.onMonthChange?.(d)}else if(p>Ve){let d=new Date(o.viewMonth||new Date);d.setMonth(d.getMonth()-1),o.onMonthChange?.(d)}}},g.createElement(Sr,null,g.createElement("tr",null,a.map((t,s)=>g.createElement(g.Fragment,null,g.createElement("th",null,g.createElement(S,{level:"body-xs",textAlign:"center"},t)),s<6&&g.createElement("th",{style:{width:4},"aria-hidden":"true","aria-description":"cell-gap"}))))),g.createElement(Hr,null,i.map((t,s)=>g.createElement(ce,{key:`${o.viewMonth}_${s}`},g.createElement("tr",null,t.map((m,p)=>m?g.createElement(ce,{key:p},g.createElement(Vr,{...n(m)},g.createElement(Jr,{size:"sm",variant:"plain",color:"neutral",...r(m)},m)),p<6&&g.createElement("td",{"aria-hidden":"true","aria-description":"cell-gap"})):g.createElement(ce,{key:p},g.createElement("td",null),p<6&&g.createElement("td",{"aria-hidden":"true","aria-description":"cell-gap"})))),s<i.length-1&&g.createElement("tr",{"aria-hidden":"true","aria-description":"row-gap"},g.createElement("td",{colSpan:13,style:{height:4}}))))))))},Wr=e=>{let{ownerState:o}=e,{getPickerMonthProps:r,getMonthCellProps:n}=ze(o),i=Array.from({length:12},(t,s)=>s).reduce((t,s)=>(t[t.length-1].length===4&&t.push([]),t[t.length-1].push(s),t),[[]]),a=!o.views?.find(t=>t==="day")&&o.rangeSelection;return g.createElement(Uo,{calendarType:a?"monthPicker":"datePicker"},g.createElement(Ro,{initial:!1,custom:o.direction},g.createElement(Xo,{key:`${o.viewMonth.getFullYear()}_${o.direction}`,custom:o.direction,variants:Qo,initial:"enter",animate:"center",exit:"exit",transition:{x:{type:"spring",stiffness:300,damping:30},opacity:{duration:.2}},drag:"x",dragConstraints:{left:0,right:0},dragElastic:1,onDragEnd:(t,{offset:s,velocity:m})=>{let p=Zo(s.x,m.x);if(p<-Ve){let d=new Date(o.viewMonth||new Date);d.setMonth(d.getMonth()+1),o.onMonthChange?.(d)}else if(p>Ve){let d=new Date(o.viewMonth||new Date);d.setMonth(d.getMonth()-1),o.onMonthChange?.(d)}}},g.createElement("tbody",null,i.map((t,s)=>g.createElement(ce,{key:s},g.createElement("tr",null,t.map((m,p)=>g.createElement(ce,{key:m},g.createElement(Er,{...n(m)},g.createElement(Or,{size:"sm",variant:"plain",color:"neutral",...r(m)},Wo(m,o.locale))),p<3&&g.createElement("td",{style:{width:4},"aria-hidden":"true","aria-description":"cell-gap"})))),s<i.length-1&&g.createElement("tr",{"aria-hidden":"true","aria-description":"row-gap"},g.createElement("td",{colSpan:7,style:{height:4}}))))))))},ue=Fr((e,o)=>{let[r,n]=Go(e),{value:i,defaultValue:a,onChange:t,locale:s,onViewChange:m,onMonthChange:p,view:d,views:c,rangeSelection:f,...b}=r,{calendarTitle:h,onPrev:l,onNext:w}=ze(n);return g.createElement(Nr,{ref:o,...b},g.createElement(Lr,null,g.createElement(L,{size:"sm",onClick:l},g.createElement(Ir,null)),g.createElement(zr,{ownerState:n,variant:"plain",color:"neutral",onClick:m},h),g.createElement(L,{size:"sm",onClick:w},g.createElement(Ar,null))),d==="day"&&g.createElement(Yr,{ownerState:n}),d==="month"&&g.createElement(Wr,{ownerState:n}))});ue.displayName="Calendar";var U=ue;import qr from"react";import{Checkbox as $r}from"@mui/joy";import{motion as Gr}from"framer-motion";var jr=Gr($r),ge=e=>qr.createElement(jr,{...e});ge.displayName="Checkbox";var fe=ge;import{styled as _r}from"@mui/joy";import Rr,{forwardRef as Ur}from"react";var Xr=_r("div",{name:"Container",slot:"root",shouldForwardProp:e=>e!=="maxWidth"})(({theme:e,maxWidth:o="lg"})=>({width:"100%",marginLeft:"auto",boxSizing:"border-box",marginRight:"auto",display:"block",paddingLeft:e.spacing(2),paddingRight:e.spacing(2),...o==="sm"&&{[e.breakpoints.up("xs")]:{maxWidth:e.breakpoints.values.sm}},...o==="md"&&{[e.breakpoints.up("sm")]:{maxWidth:e.breakpoints.values.md}},...o==="lg"&&{[e.breakpoints.up("md")]:{maxWidth:e.breakpoints.values.lg}},...o==="xl"&&{[e.breakpoints.up("lg")]:{maxWidth:e.breakpoints.values.xl}}})),to=Ur(function(o,r){return Rr.createElement(Xr,{ref:r,...o})});to.displayName="Container";import Y,{useCallback as en,useState as ot}from"react";import{IntlMessageFormat as on}from"intl-messageformat";import{NumericFormat as tn}from"react-number-format";import rn from"@mui/icons-material/esm/InfoOutlined.js";import he from"react";import{Input as Qr}from"@mui/joy";import{motion as Zr}from"framer-motion";var Ko=Zr(Qr),be=e=>{let{label:o,helperText:r,error:n,style:i,size:a,color:t,disabled:s,required:m,...p}=e;return o?he.createElement(F,{required:m,color:t,size:a,error:n,disabled:s},he.createElement(I,null,o),he.createElement(Ko,{...p}),r&&he.createElement(M,null,r)):he.createElement(Ko,{required:m,color:t,size:a,disabled:s,...p})};be.displayName="Input";var W=be;import Kr from"intl-messageformat";var et=(e="usd")=>{let[o,r,n]=new Kr(`{amount, number, ::currency/${e} unit-width-narrow}`).format({amount:1e3}).toString().replace(/\d/g,"").split("");return{symbol:`${o} `,thousandSeparator:r,decimalSeparator:n,placeholder:n?`${o} 0${n}00`:`${o} 0`,fixedDecimalScale:!!n}};var nn=Y.forwardRef(function(o,r){let{onChange:n,...i}=o;return Y.createElement(tn,{...i,onValueChange:({floatValue:a})=>{n?.({target:{name:o.name,value:a?.toString()}})},valueIsNumericString:!0,getInputRef:r,decimalScale:2})}),tt=Y.forwardRef(function(o,r){let{currency:n="usd",max:i=1e5,name:a,onChange:t,label:s,error:m,helperText:p,required:d,disabled:c,...f}=o,{symbol:b,thousandSeparator:h,decimalSeparator:l,placeholder:w,fixedDecimalScale:D}=et(n),[B,A]=ot(o.value),[C,v]=ot(!!Number(i)&&!!o.value&&o.value>Number(i)),y=en(we=>{let G=Number(we.target.value);A(G),t?.({...we,target:{name:a,value:G}}),Number(i)&&G>Number(i)?v(!0):v(!1)},[]),N=Y.createElement(W,{...f,size:"sm",ref:r,value:B,placeholder:w,onChange:y,disabled:c,required:d,slotProps:{input:{component:nn,decimalSeparator:l,thousandSeparator:h,prefix:b,fixedDecimalScale:D}},sx:{fontFamily:"monospace"}});return s?Y.createElement(F,{size:"sm",disabled:c,required:d,error:m||C},Y.createElement(I,null,s),N,C?Y.createElement(M,null,Y.createElement(rn,null),new on(`limit: {amount, number, ::currency/${n} unit-width-narrow}`).format({amount:i})):p&&Y.createElement(M,null,p)):N});import u,{useCallback as X,useEffect as ao,useMemo as Q,useRef as dn,useState as pn}from"react";import{styled as cn,LinearProgress as un}from"@mui/joy";import gn from"@mui/icons-material/esm/ChevronLeft.js";import fn from"@mui/icons-material/esm/ChevronRight.js";import{Sheet as an}from"@mui/joy";import{motion as sn}from"framer-motion";var ln=sn(an),Ce=ln;Ce.displayName="Sheet";var q=Ce;import z from"react";import{Table as mn}from"@mui/joy";var ye=e=>{let{children:o,...r}=e;return z.createElement(mn,{...r},o)};ye.displayName="Table";function ro(e){let{headCells:o,showCheckbox:r,onCheckboxChange:n,slots:{checkbox:i=fe}={},slotProps:{checkbox:a={}}={}}=e;return z.createElement("thead",null,z.createElement("tr",null,r&&z.createElement("th",{style:{width:"40px",textAlign:"center"}},z.createElement(i,{onChange:n,...a})),o.map(t=>z.createElement("th",{key:t.label,style:{width:t.width,minWidth:t.minWidth,maxWidth:t.maxWidth,textAlign:t.numeric?"right":"left"}},t.label))))}ro.displayName="TableHead";function no(e){let{rows:o,cellOrder:r,rowOptions:n,showCheckbox:i,onCheckboxChange:a,slots:{checkbox:t=fe}={},slotProps:{checkbox:s={}}={}}=e;return z.createElement("tbody",null,o.map((m,p)=>z.createElement("tr",{key:p},i&&z.createElement("td",{style:{textAlign:"center"}},z.createElement(t,{onChange:d=>a?.(d,p),...s})),r.map(d=>z.createElement("td",{key:d,style:{textAlign:n?.[d]?.numeric?"right":"left"}},m[d])))))}no.displayName="TableBody";var rt=cn("tr",{name:"DataTable",slot:"overlayWrapper"})({position:"sticky",top:"calc(var(--unstable_TableCell-height, 32px))",left:0,right:0,zIndex:1,"& > td":{height:0,padding:0,border:"none !important"}}),Ee=e=>"Intl"in window?new Intl.NumberFormat().format(e):e;function hn(e){let{paginationModel:{page:o,pageSize:r},rowCount:n,onPageChange:i}=e,a=1,t=Math.ceil(n/r),s=[o-2,o-1].filter(c=>c>1),m=[o+1,o+2].filter(c=>c<=t-1),p=t>1&&o<t-3,d=t>1&&o>4;return u.createElement(O,{direction:"row",spacing:1,sx:{pt:1,pb:1},justifyContent:"end",alignItems:"center"},u.createElement(O,{direction:"row",spacing:.5,alignItems:"center"},u.createElement(L,{size:"sm",variant:"plain",color:"neutral",onClick:()=>i(o-1),disabled:o===a,"aria-label":"Previous page"},u.createElement(gn,null)),o!==a&&u.createElement(x,{size:"sm",variant:"plain",color:"neutral",onClick:()=>i(a)},a),d&&u.createElement(x,{size:"sm",variant:"plain",color:"neutral",onClick:()=>i(o-3)},"..."),s.map(c=>u.createElement(x,{key:c,size:"sm",variant:"plain",color:"neutral",onClick:()=>i(c)},c)),u.createElement(x,{variant:"soft",size:"sm"},o),m.map(c=>u.createElement(x,{key:c,size:"sm",variant:"plain",color:"neutral",onClick:()=>i(c)},c)),p&&u.createElement(x,{size:"sm",variant:"plain",color:"neutral",onClick:()=>i(o+3)},"..."),o!==t&&u.createElement(x,{size:"sm",variant:"plain",color:"neutral",onClick:()=>i(t)},t),u.createElement(L,{size:"sm",variant:"plain",color:"neutral",onClick:()=>i(o+1),disabled:o===t,"aria-label":"Next page"},u.createElement(fn,null))))}var bn=e=>u.createElement(Le,{sx:{position:"absolute",top:0,right:0,bottom:0,width:"4px",cursor:"col-resize"},onMouseDown:o=>{let r=o.clientX,n=e.current?.getBoundingClientRect().width,i=t=>{n&&r&&(e.current.style.width=`${n+(t.clientX-r)}px`)},a=()=>{document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",a)};document.addEventListener("mousemove",i),document.addEventListener("mouseup",a)}}),Cn=e=>{let o=dn(null),r={width:e.width,minWidth:e.minWidth??"50px",maxWidth:e.maxWidth,textAlign:e.type==="number"?"end":"start",position:e.stickyHeader?void 0:"relative"},n=e.resizable??!0?bn(o):null;return u.createElement("th",{ref:o,key:e.field,style:r},e.headerName??e.field,n)};function yn({rows:e,columns:o,rowCount:r,paginationMode:n,paginationModel:i,onPaginationModelChange:a,selectionModel:t=[],onSelectionModelChange:s,getId:m,isTotalSelected:p}){let[d,c]=pn(i?.page||1),f=i?.pageSize||20,b=X((C,v)=>m?.(C)??C?.id??`${(v||0)+(d-1)*f}`,[m??d,f]),h=Q(()=>new Set(t),[t]),l=Q(()=>n==="server"?e:e.slice((d-1)*f,(d-1)*f+f),[e,d,f,n]),w=Q(()=>l.length>0&&l.every((C,v)=>h.has(b(C,v))),[l,h,d,f,b]),D=r||e.length,B=Q(()=>p??(D>0&&t.length===D),[p,t,D]),A=X(C=>{c(C),a?.({page:C,pageSize:f})},[a]);return ao(()=>{A(1)},[D]),ao(()=>{d>Math.ceil(D/f)&&A(Math.ceil(D/f))},[D,f]),ao(()=>{s?.([])},[d]),{rowCount:D,page:d,pageSize:f,onPaginationModelChange:A,getId:b,HeadCell:Cn,dataInPage:l,isAllSelected:w,isTotalSelected:B,isSelectedRow:X(C=>h.has(C),[h]),onAllCheckboxChange:X(()=>{s?.(w?[]:l.map(b))},[w,l,s]),onCheckboxChange:X((C,v)=>{if(h.has(v)){let y=t.filter(N=>N!==v);s?.(y)}else{let y=[...t,v];s?.(y)}},[t,s]),columns:Q(()=>o||Object.keys(e[0]||{}).map(C=>({field:C})),[e,o]),onTotalSelect:X(()=>{s?.(B?[]:e.map(b),!B)},[B,e,s])}}function io(e){let{rows:o,checkboxSelection:r,selectionModel:n,onSelectionModelChange:i,rowCount:a,columns:t,onPaginationModelChange:s,paginationMode:m,paginationModel:p,loading:d,slots:{checkbox:c=fe,toolbar:f,footer:b,loadingOverlay:h=()=>u.createElement(un,{value:8,variant:"plain"})}={},slotProps:{checkbox:l={},toolbar:w,background:D={}}={},...B}=e,{columns:A,isAllSelected:C,isSelectedRow:v,onAllCheckboxChange:y,onCheckboxChange:N,getId:we,rowCount:G,page:Lo,pageSize:So,onPaginationModelChange:Mt,dataInPage:kt,isTotalSelected:Ho,onTotalSelect:zo,HeadCell:Tt}=yn(e);return u.createElement(Le,null,u.createElement(O,{direction:"row",sx:{pt:1,pb:1},justifyContent:"space-between",alignItems:"center"},!!r&&u.createElement(O,{direction:"row",spacing:1},!C&&u.createElement(S,{level:"body-xs"},Ee(n?.length||0)," items selected"),C&&!Ho&&u.createElement(O,{direction:"row",spacing:1,alignItems:"center"},u.createElement(S,{level:"body-xs"},"All ",Ee(n?.length||0)," items on this page are selected."),u.createElement(x,{size:"sm",variant:"plain",onClick:zo},"Select all ",Ee(G??o.length)," items")),Ho&&u.createElement(O,{direction:"row",spacing:1,alignItems:"center"},u.createElement(S,{level:"body-xs"},"All ",Ee(G??o.length)," items are selected."),u.createElement(x,{size:"sm",variant:"plain",color:"danger",onClick:zo},"Cancel"))),f&&u.createElement(f,{...w||{}})),u.createElement(q,{variant:"outlined",sx:{overflow:"auto",width:"100%",boxShadow:"sm",borderRadius:"sm"},...D},u.createElement(ye,{...B},u.createElement("thead",null,u.createElement("tr",null,r&&u.createElement("th",{style:{width:"40px",textAlign:"center"}},u.createElement(c,{onChange:y,checked:C,indeterminate:(n||[]).length>0&&!C,...l})),A.map(j=>u.createElement(Tt,{key:j.field,stickyHeader:e.stickyHeader,...j})))),u.createElement("tbody",null,u.createElement(rt,null,!!d&&u.createElement("td",null,u.createElement(Le,{sx:{position:"absolute",top:0,left:0,right:0}},u.createElement(h,null)))),u.createElement(rt,null),kt.map((j,Pt)=>{let _=we(j,Pt);return u.createElement("tr",{key:_,role:r?"checkbox":void 0,tabIndex:r?-1:void 0,onClick:r?E=>N(E,_):void 0,"aria-checked":r?v(_):void 0},r&&u.createElement("th",{scope:"row",style:{textAlign:"center"}},u.createElement(c,{onChange:E=>N(E,_),checked:v(_),...l})),A.map(E=>u.createElement("td",{key:E.field,style:{textAlign:E.type==="number"?"end":"start"}},E.renderCell?.({row:j,value:j[E.field],id:_})??j[E.field])))})),b&&u.createElement(b,null))),u.createElement(hn,{paginationModel:Q(()=>({page:Lo,pageSize:So}),[Lo,So]),rowCount:G,onPageChange:Mt}))}io.displayName="DataTable";import k,{forwardRef as Tn,useCallback as nt,useState as at}from"react";import{IMaskInput as Pn,IMask as so}from"react-imask";import wn from"@mui/icons-material/esm/CalendarToday.js";import{styled as it}from"@mui/joy";import{FocusTrap as Fn,ClickAwayListener as In,Popper as An}from"@mui/base";import{DialogActions as xn,styled as vn}from"@mui/joy";import{motion as Dn}from"framer-motion";var Mn=Dn(xn),kn=vn(Mn)(({theme:e})=>({padding:e.spacing(1),gap:e.spacing(1),flexDirection:"row",justifyContent:"flex-end"})),xe=kn;xe.displayName="DialogActions";var $=xe;var Bn=it(An,{name:"DatePicker",slot:"popper"})(({theme:e})=>({zIndex:e.zIndex.tooltip})),Nn=it(q,{name:"DatePicker",slot:"sheet",overridesResolver:(e,o)=>o.root})(({theme:e})=>({width:"264px",boxShadow:e.shadow.md,borderRadius:e.radius.md})),st=e=>{let o=`${e.getDate()}`,r=`${e.getMonth()+1}`,n=e.getFullYear();return Number(o)<10&&(o="0"+o),Number(r)<10&&(r="0"+r),[n,r,o].join("/")},Ln=k.forwardRef(function(o,r){let{onChange:n,...i}=o;return k.createElement(Pn,{...i,inputRef:r,onAccept:a=>n({target:{name:o.name,value:a}}),mask:Date,pattern:"Y/`m/`d",blocks:{d:{mask:so.MaskedRange,from:1,to:31,maxLength:2},m:{mask:so.MaskedRange,from:1,to:12,maxLength:2},Y:{mask:so.MaskedRange,from:1900,to:9999}},format:st,parse:a=>{let t=a.split("/");return new Date(Number(t[0]),Number(t[1])-1,Number(t[2]))},autofix:"pad",overwrite:!0,placeholderChar:" "})}),lo=Tn((e,o)=>{let{onChange:r,disabled:n,label:i,error:a,helperText:t,minDate:s,maxDate:m,disableFuture:p,disablePast:d,required:c}=e,[f,b]=at(e.value||""),[h,l]=at(null),w=!!h,D=nt(C=>{b(C.target.value),r?.(C)},[]),B=nt(C=>{l(h?null:C.currentTarget)},[h,l]),A=k.createElement(k.Fragment,null,k.createElement(W,{ref:o,size:"sm",value:f,onChange:D,placeholder:"YYYY/MM/DD",disabled:n,required:c,slotProps:{input:{component:Ln}},sx:{fontFamily:"monospace"},endDecorator:k.createElement(L,{variant:"plain",onClick:B},k.createElement(wn,null))}),w&&k.createElement(In,{onClickAway:()=>l(null)},k.createElement(Bn,{id:"date-picker-popper",open:!0,anchorEl:h,placement:"bottom-end",modifiers:[{name:"offset",options:{offset:[4,4]}}]},k.createElement(Fn,{open:!0},k.createElement(Nn,{tabIndex:-1,role:"presentation"},k.createElement(U,{value:Number.isNaN(new Date(f).getTime())?void 0:[new Date(f),void 0],onChange:([C])=>{b(st(C)),l(null)},minDate:s?new Date(s):void 0,maxDate:m?new Date(m):void 0,disableFuture:p,disablePast:d}),k.createElement($,{sx:{p:1}},k.createElement(x,{size:"sm",variant:"plain",color:"neutral",onClick:()=>{b(""),l(null)}},"Clear")))))));return i?k.createElement(F,{required:c,disabled:n,error:a,size:"sm"},k.createElement(I,null,i),A,t&&k.createElement(M,null,t)):A});lo.displayName="DatePicker";import T,{forwardRef as Sn,useCallback as mo,useMemo as Hn,useState as lt}from"react";import{IMaskInput as zn,IMask as po}from"react-imask";import Vn from"@mui/icons-material/esm/CalendarToday.js";import{styled as mt}from"@mui/joy";import{FocusTrap as En,ClickAwayListener as On,Popper as Jn}from"@mui/base";var Yn=mt(Jn,{name:"DateRangePicker",slot:"popper"})(({theme:e})=>({zIndex:e.zIndex.tooltip})),Wn=mt(q,{name:"DateRangePicker",slot:"sheet",overridesResolver:(e,o)=>o.root})(({theme:e})=>({zIndex:e.zIndex.tooltip,width:"264px",boxShadow:e.shadow.md,borderRadius:e.radius.md})),dt=([e,o])=>{let r=n=>{let i=`${n.getDate()}`,a=`${n.getMonth()+1}`,t=n.getFullYear();return Number(i)<10&&(i="0"+i),Number(a)<10&&(a="0"+a),[t,a,i].join("/")};return[r(e),o?r(o):""].join(" - ")},pt=e=>{let o=e.split(" - ")[0]||"",r=e.split(" - ")[1]||"",n=o.split("/"),i=r.split("/");return[new Date(Number(n[0]),Number(n[1])-1,Number(n[2])),new Date(Number(i[0]),Number(i[1])-1,Number(i[2]))]},qn=T.forwardRef(function(o,r){let{onChange:n,...i}=o;return T.createElement(zn,{...i,inputRef:r,onAccept:a=>n({target:{name:o.name,value:a}}),mask:Date,pattern:"Y/`m/`d - Y/`m/`d",blocks:{d:{mask:po.MaskedRange,from:1,to:31,maxLength:2},m:{mask:po.MaskedRange,from:1,to:12,maxLength:2},Y:{mask:po.MaskedRange,from:1900,to:9999}},format:dt,parse:pt,autofix:"pad",overwrite:!0,placeholderChar:" "})}),co=Sn((e,o)=>{let{onChange:r,disabled:n,label:i,error:a,helperText:t,minDate:s,maxDate:m,disableFuture:p,disablePast:d,required:c}=e,[f,b]=lt(e.value||""),[h,l]=lt(null),w=!!h,D=Hn(()=>f?pt(f):void 0,[f]),B=mo(y=>{b(y.target.value),r?.(y)},[r]),A=mo(y=>{l(h?null:y.currentTarget)},[h,l]),C=mo(([y,N])=>{!y||!N||(b(dt([y,N])),l(null))},[b,l]),v=T.createElement(T.Fragment,null,T.createElement(W,{ref:o,size:"sm",value:f,onChange:B,disabled:n,required:c,placeholder:"YYYY/MM/DD - YYYY/MM/DD",slotProps:{input:{component:qn}},sx:{fontFamily:"monospace"},endDecorator:T.createElement(L,{variant:"plain",onClick:A},T.createElement(Vn,null))}),w&&T.createElement(On,{onClickAway:()=>l(null)},T.createElement(Yn,{id:"date-range-picker-popper",open:!0,anchorEl:h,placement:"bottom-end",modifiers:[{name:"offset",options:{offset:[4,4]}}]},T.createElement(En,{open:!0},T.createElement(Wn,{tabIndex:-1,role:"presentation"},T.createElement(U,{rangeSelection:!0,defaultValue:D,onChange:C,minDate:s?new Date(s):void 0,maxDate:m?new Date(m):void 0,disableFuture:p,disablePast:d}),T.createElement($,{sx:{p:1}},T.createElement(x,{size:"sm",variant:"plain",color:"neutral",onClick:()=>{b(""),l(null)}},"Clear")))))));return i?T.createElement(F,{required:c,disabled:n,error:a,size:"sm"},T.createElement(I,null,i),v,t&&T.createElement(M,null,t)):v});co.displayName="DateRangePicker";import{DialogContent as $n,styled as Gn}from"@mui/joy";import{motion as jn}from"framer-motion";var _n=jn($n),Rn=Gn(_n)(({theme:e})=>({padding:e.spacing(0,3,2.5)})),ve=Rn;ve.displayName="DialogContent";var Oe=ve;import{DialogTitle as Un,styled as Xn}from"@mui/joy";import{motion as Qn}from"framer-motion";var Zn=Qn(Un),Kn=Xn(Zn)(({theme:e})=>({padding:e.spacing(2,3)})),De=Kn;De.displayName="DialogTitle";var Je=De;import $e from"react";import Ye from"react";import{Modal as ea,ModalDialog as oa,ModalClose as ta,ModalOverflow as ra,styled as na}from"@mui/joy";import{motion as We}from"framer-motion";var aa=We(ea),uo=aa;uo.displayName="Modal";var ia=We(oa),ct=na(ia)({padding:0}),Me=ct;Me.displayName="ModalDialog";var sa=We(ta),qe=sa;qe.displayName="ModalClose";var la=We(ra),go=la;go.displayName="ModalOverflow";function fo(e){let{title:o,children:r,...n}=e;return Ye.createElement(ct,{...n},Ye.createElement(qe,null),Ye.createElement(Je,null,o),Ye.createElement(Oe,null,r))}fo.displayName="ModalFrame";import{styled as ma}from"@mui/joy";var da=ma(Me)(({theme:e})=>({padding:0}));function ho(e){let{title:o,children:r,actions:n,...i}=e;return $e.createElement(da,{...i},$e.createElement(Je,null,o),$e.createElement(Oe,null,r),$e.createElement($,null,n))}ho.displayName="DialogFrame";import pa from"react";import{Divider as ca}from"@mui/joy";import{motion as ua}from"framer-motion";var ga=ua(ca),bo=e=>pa.createElement(ga,{...e});bo.displayName="Divider";import fa from"react";import{Drawer as ha}from"@mui/joy";import{motion as ba}from"framer-motion";var Ca=ba(ha),Co=e=>{let{children:o,...r}=e;return fa.createElement(Ca,{...r,slotProps:{...r.slotProps,content:{...r.slotProps?.content,sx:{bgcolor:"transparent",p:{md:3,sm:0},boxShadow:"none"}}}},o)};Co.displayName="InsetDrawer";import{Grid as ya}from"@mui/joy";import{motion as xa}from"framer-motion";var va=xa(ya),yo=va;yo.displayName="Grid";import P,{forwardRef as Da,useCallback as xo,useMemo as Ma,useState as ut}from"react";import{IMaskInput as ka,IMask as gt}from"react-imask";import Ta from"@mui/icons-material/esm/CalendarToday.js";import{styled as ft}from"@mui/joy";import{FocusTrap as Pa,ClickAwayListener as wa,Popper as Fa}from"@mui/base";var Ia=ft(Fa,{name:"MonthRangePicker",slot:"popper"})(({theme:e})=>({zIndex:e.zIndex.tooltip})),Aa=ft(q,{name:"MonthRangePicker",slot:"sheet",overridesResolver:(e,o)=>o.root})(({theme:e})=>({zIndex:e.zIndex.tooltip,width:"264px",boxShadow:e.shadow.md,borderRadius:e.radius.md})),ht=([e,o])=>{let r=n=>{let i=`${n.getMonth()+1}`,a=n.getFullYear();return Number(i)<10&&(i="0"+i),[a,i].join("/")};return[r(e),o?r(o):""].join(" - ")},bt=e=>{let o=e.split(" - ")[0]||"",r=e.split(" - ")[1]||"",n=o.split("/"),i=r.split("/");return[new Date(Number(n[0]),Number(n[1])-1),new Date(Number(i[0]),Number(i[1])-1)]},Ba=P.forwardRef(function(o,r){let{onChange:n,...i}=o;return P.createElement(ka,{...i,inputRef:r,onAccept:a=>n({target:{name:o.name,value:a}}),mask:Date,pattern:"Y/`m - Y/`m",blocks:{m:{mask:gt.MaskedRange,from:1,to:12,maxLength:2},Y:{mask:gt.MaskedRange,from:1900,to:9999}},format:ht,parse:bt,autofix:"pad",overwrite:!0,placeholderChar:" "})}),vo=Da((e,o)=>{let{onChange:r,disabled:n,label:i,error:a,helperText:t,minDate:s,maxDate:m,disableFuture:p,disablePast:d,required:c}=e,[f,b]=ut(e.value||""),[h,l]=ut(null),w=!!h,D=Ma(()=>f?bt(f):void 0,[f]),B=xo(y=>{b(y.target.value),r?.(y)},[r]),A=xo(y=>{l(h?null:y.currentTarget)},[h,l]),C=xo(([y,N])=>{!y||!N||(b(ht([y,N])),l(null))},[b,l]),v=P.createElement(P.Fragment,null,P.createElement(W,{ref:o,size:"sm",value:f,onChange:B,disabled:n,required:c,placeholder:"YYYY/MM - YYYY/MM",slotProps:{input:{component:Ba}},sx:{fontFamily:"monospace"},endDecorator:P.createElement(L,{variant:"plain",onClick:A},P.createElement(Ta,null))}),w&&P.createElement(wa,{onClickAway:()=>l(null)},P.createElement(Ia,{id:"date-range-picker-popper",open:!0,anchorEl:h,placement:"bottom-end",modifiers:[{name:"offset",options:{offset:[4,4]}}]},P.createElement(Pa,{open:!0},P.createElement(Aa,{tabIndex:-1,role:"presentation"},P.createElement(U,{view:"month",views:["month"],rangeSelection:!0,defaultValue:D,onChange:C,minDate:s?new Date(s):void 0,maxDate:m?new Date(m):void 0,disableFuture:p,disablePast:d}),P.createElement($,{sx:{p:1}},P.createElement(x,{size:"sm",variant:"plain",color:"neutral",onClick:()=>{b(""),l(null)}},"Clear")))))));return i?P.createElement(F,{required:c,disabled:n,error:a,size:"sm"},P.createElement(I,null,i),v,t&&P.createElement(M,null,t)):v});vo.displayName="MonthRangePicker";import{Radio as Na,RadioGroup as La}from"@mui/joy";import{motion as Ct}from"framer-motion";var Sa=Ct(Na),ke=Sa;ke.displayName="Radio";var Ha=Ct(La),Te=Ha;Te.displayName="RadioGroup";import yt from"react";function Do(e){let{items:o,...r}=e;return yt.createElement(Te,{...r},o.map(n=>yt.createElement(ke,{key:`${n.value}`,value:n.value,label:n.label})))}Do.displayName="RadioList";import Ge from"react";import{Select as za,Option as Va}from"@mui/joy";import{motion as Ea}from"framer-motion";var Oa=Ea(Va),Mo=Oa;Mo.displayName="Option";function ko(e){let{label:o,helperText:r,error:n,size:i,color:a,disabled:t,required:s,onChange:m,...p}=e,c=Ge.createElement(za,{...p,required:s,disabled:t,size:i,color:a,onChange:(f,b)=>{let h=f||{target:{}},l={...h,target:{name:h.target?.name,value:b||void 0}};console.log(l),m?.(l)}});return o?Ge.createElement(F,{required:s,disabled:t,size:i,color:a,error:n},Ge.createElement(I,null,o),c,r&&Ge.createElement(M,null,r)):c}ko.displayName="Select";import xt from"react";import{Switch as Ja,styled as Ya,switchClasses as Wa}from"@mui/joy";import{motion as vt}from"framer-motion";var qa=vt(Ja),$a=Ya(vt.div)({"--Icon-fontSize":"calc(var(--Switch-thumbSize) * 0.75)",display:"inline-flex",justifyContent:"center",alignItems:"center",position:"absolute",left:"var(--Switch-thumbOffset)",width:"var(--Switch-thumbWidth)",height:"var(--Switch-thumbSize)",borderRadius:"var(--Switch-thumbRadius)",boxShadow:"var(--Switch-thumbShadow)",color:"var(--Switch-thumbColor)",backgroundColor:"var(--Switch-thumbBackground)",[`&.${Wa.checked}`]:{left:"unset",right:"var(--Switch-thumbOffset)"}}),Ga=e=>xt.createElement($a,{...e,layout:!0,transition:ja}),ja={type:"spring",stiffness:700,damping:30},To=e=>xt.createElement(qa,{...e,slots:{thumb:Ga,...e.slots}});To.displayName="Switch";import{Tabs as _a,Tab as Ra,TabList as Ua,TabPanel as Xa,styled as Qa,tabClasses as Za}from"@mui/joy";import{motion as je}from"framer-motion";var Ka=je(_a),Po=Ka;Po.displayName="Tabs";var ei=Qa(je(Ra))(({theme:e})=>({[`&:not(.${Za.selected})`]:{color:e.palette.neutral[700]}})),wo=ei;wo.displayName="Tab";var oi=je(Ua),Fo=oi;Fo.displayName="TabList";var ti=je(Xa),Io=ti;Io.displayName="TabPanel";import Pe from"react";import{Textarea as ri}from"@mui/joy";import{motion as ni}from"framer-motion";var Dt=ni(ri),Ao=e=>{let{label:o,error:r,helperText:n,color:i,size:a,disabled:t,required:s,...m}=e;return o?Pe.createElement(F,{required:s,disabled:t,color:i,size:a,error:r},Pe.createElement(I,null,o),Pe.createElement(Dt,{...m}),n&&Pe.createElement(M,null,n)):Pe.createElement(Dt,{required:s,disabled:t,color:i,size:a,...m})};Ao.displayName="Textarea";import _e from"react";import{CssBaseline as ai,CssVarsProvider as ii,checkboxClasses as si,extendTheme as li}from"@mui/joy";var mi=li({cssVarPrefix:"ceed",components:{JoyTable:{defaultProps:{size:"sm",borderAxis:"bothBetween"},styleOverrides:{root:({theme:e})=>({"--TableRow-stripeBackground":e.palette.background.level1,"--TableCell-selectedBackground":e.palette.background.level2,"--TableRow-hoverBackground":e.palette.background.level3,"& tbody tr[aria-checked=false] th":{"--TableCell-headBackground":"transparent"},"& tbody tr[aria-checked=true]:hover th":{"--TableCell-headBackground":"var(--TableRow-hoverBackground)"},"& tbody tr[aria-checked=true]:not(:hover) th":{"--TableCell-headBackground":"var(--TableCell-selectedBackground)"},"& tbody tr[aria-checked=true]:not(:hover) td":{"--TableCell-dataBackground":"var(--TableCell-selectedBackground)"},[`& .${si.root}`]:{verticalAlign:"middle"}})}},JoyTooltip:{defaultProps:{size:"sm",placement:"top"}}}});function Bo(e){return _e.createElement(_e.Fragment,null,_e.createElement(ii,{theme:mi},_e.createElement(ai,null),e.children))}Bo.displayName="ThemeProvider";import di from"react";import{Tooltip as pi}from"@mui/joy";import{motion as ci}from"framer-motion";var ui=ci(pi),No=e=>di.createElement(ui,{...e});No.displayName="Tooltip";export{Be as Accordion,Ae as AccordionDetails,Ie as AccordionSummary,Re as Accordions,Ue as Alert,Xu as AspectRatio,Xe as Autocomplete,Yu as AutocompleteListbox,Wu as AutocompleteOption,ju as Avatar,Ru as AvatarGroup,Zu as Badge,ae as Box,Ke as Breadcrumbs,de as Button,ue as Calendar,og as Card,rg as CardActions,ag as CardContent,sg as CardCover,mg as CardOverflow,ge as Checkbox,pg as Chip,ug as CircularProgress,to as Container,tt as CurrencyInput,io as DataTable,lo as DatePicker,co as DateRangePicker,xe as DialogActions,ve as DialogContent,ho as DialogFrame,De as DialogTitle,bo as Divider,fg as Drawer,me as Dropdown,oe as FormControl,re as FormHelperText,te as FormLabel,yo as Grid,pe as IconButton,be as Input,Co as InsetDrawer,bg as LinearProgress,Lg as Link,yg as List,vg as ListDivider,Mg as ListItem,Tg as ListItemButton,wg as ListItemContent,Ig as ListItemDecorator,Bg as ListSubheader,ie as Menu,se as MenuButton,le as MenuItem,uo as Modal,qe as ModalClose,Me as ModalDialog,fo as ModalFrame,go as ModalOverflow,vo as MonthRangePicker,Mo as Option,ke as Radio,Te as RadioGroup,Do as RadioList,ko as Select,Ce as Sheet,$g as Skeleton,Hg as Slider,ee as Stack,Vg as Step,Og as StepButton,Yg as StepIndicator,Wg as Stepper,To as Switch,wo as Tab,Fo as TabList,Io as TabPanel,ye as Table,no as TableBody,ro as TableHead,Po as Tabs,Ao as Textarea,Bo as ThemeProvider,No as Tooltip,K as Typography,Vu as accordionClasses,Eu as accordionDetailsClasses,Ju as accordionSummaryClasses,Ou as accordionsClasses,tu as alertClasses,Qu as aspectRatioClasses,qu as autocompleteClasses,$u as autocompleteListboxClasses,Gu as autocompleteOptionClasses,_u as avatarClasses,Uu as avatarGroupClasses,Ku as badgeClasses,ru as boxClasses,eg as breadcrumbsClasses,nu as buttonClasses,ng as cardActionsClasses,tg as cardClasses,ig as cardContentClasses,lg as cardCoverClasses,dg as cardOverflowClasses,au as checkboxClasses,cg as chipClasses,gg as circularProgressClasses,Nu as dialogActionsClasses,Bu as dialogContentClasses,Au as dialogTitleClasses,iu as dividerClasses,hg as drawerClasses,xu as formControlClasses,Du as formHelperTextClasses,vu as formLabelClasses,Mu as gridClasses,su as iconButtonClasses,lu as inputClasses,Cg as linearProgressClasses,Sg as linkClasses,xg as listClasses,Dg as listDividerClasses,Pg as listItemButtonClasses,kg as listItemClasses,Fg as listItemContentClasses,Ag as listItemDecoratorClasses,Ng as listSubheaderClasses,du as menuButtonClasses,mu as menuClasses,pu as menuItemClasses,Pu as modalClasses,wu as modalCloseClasses,Fu as modalDialogClasses,Iu as modalOverflowClasses,cu as optionClasses,uu as radioClasses,gu as radioGroupClasses,fu as selectClasses,Tu as sheetClasses,Gg as skeletonClasses,zg as sliderClasses,ku as stackClasses,Jg as stepButtonClasses,Eg as stepClasses,qg as stepperClasses,hu as switchClasses,Hu as tabListClasses,zu as tabPanelClasses,bu as tableClasses,Su as tabsClasses,Cu as textareaClasses,Lu as tooltipClasses,yu as typographyClasses,eu as useColorScheme,Kc as useTheme,ou as useThemeProps};