@ceed/ads 0.0.54 → 0.0.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Calendar/hooks/use-calendar.d.ts +7 -0
- package/dist/components/MonthRangePicker/MonthRangePicker.d.ts +21 -0
- package/dist/components/MonthRangePicker/index.d.ts +3 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +304 -35
- package/framer/index.js +428 -89
- package/package.json +1 -1
|
@@ -7,6 +7,10 @@ export declare const useCalendar: (ownerState: CalendarOwnerState) => {
|
|
|
7
7
|
readonly "aria-label": string;
|
|
8
8
|
readonly "aria-current": "date" | undefined;
|
|
9
9
|
};
|
|
10
|
+
getMonthCellProps: (monthIndex: number) => {
|
|
11
|
+
readonly "aria-label": string;
|
|
12
|
+
readonly "aria-current": "date" | undefined;
|
|
13
|
+
};
|
|
10
14
|
getPickerDayProps: (day: number) => {
|
|
11
15
|
readonly isToday: boolean;
|
|
12
16
|
readonly isSelected: boolean | undefined;
|
|
@@ -20,9 +24,12 @@ export declare const useCalendar: (ownerState: CalendarOwnerState) => {
|
|
|
20
24
|
};
|
|
21
25
|
getPickerMonthProps: (monthIndex: number) => {
|
|
22
26
|
readonly isSelected: boolean | undefined;
|
|
27
|
+
readonly onMouseEnter: (() => void) | undefined;
|
|
23
28
|
readonly disabled: boolean | undefined;
|
|
24
29
|
readonly onClick: () => void;
|
|
25
30
|
readonly tabIndex: -1;
|
|
26
31
|
readonly "aria-label": string;
|
|
32
|
+
readonly "aria-selected": "true" | undefined;
|
|
33
|
+
readonly "aria-current": "date" | undefined;
|
|
27
34
|
};
|
|
28
35
|
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface MonthRangePickerProps {
|
|
3
|
+
value?: string;
|
|
4
|
+
onChange?: (event: {
|
|
5
|
+
target: {
|
|
6
|
+
name?: string;
|
|
7
|
+
value: string;
|
|
8
|
+
};
|
|
9
|
+
}) => void;
|
|
10
|
+
name?: string;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
label?: React.ReactNode;
|
|
13
|
+
error?: boolean;
|
|
14
|
+
helperText?: React.ReactNode;
|
|
15
|
+
minDate?: Date;
|
|
16
|
+
maxDate?: Date;
|
|
17
|
+
disableFuture?: boolean;
|
|
18
|
+
disablePast?: boolean;
|
|
19
|
+
}
|
|
20
|
+
declare const MonthRangePicker: React.ForwardRefExoticComponent<MonthRangePickerProps & React.RefAttributes<HTMLDivElement>>;
|
|
21
|
+
export { MonthRangePicker };
|
|
@@ -22,6 +22,7 @@ export { IconButton } from "./IconButton";
|
|
|
22
22
|
export { Input } from "./Input";
|
|
23
23
|
export { Menu, MenuButton, MenuItem } from "./Menu";
|
|
24
24
|
export { Modal, ModalClose, ModalDialog, ModalOverflow, ModalFrame, } from "./Modal";
|
|
25
|
+
export { MonthRangePicker } from "./MonthRangePicker";
|
|
25
26
|
export { Radio, RadioGroup } from "./Radio";
|
|
26
27
|
export { RadioList } from "./RadioList";
|
|
27
28
|
export { Select, Option } from "./Select";
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { boxClasses, buttonClasses, checkboxClasses, dividerClasses, iconButtonClasses, inputClasses, menuClasses, menuButtonClasses, menuItemClasses, optionClasses, radioClasses, radioGroupClasses, selectClasses, switchClasses, tableClasses, textareaClasses, typographyClasses, formControlClasses, formLabelClasses, formHelperTextClasses, gridClasses, stackClasses, sheetClasses, modalClasses, modalCloseClasses, modalDialogClasses, modalOverflowClasses, dialogTitleClasses, dialogContentClasses, dialogActionsClasses, tooltipClasses, tabsClasses, tabListClasses, tabPanelClasses, accordionClasses, accordionDetailsClasses, accordionGroupClasses as accordionsClasses, accordionSummaryClasses, Autocomplete, AutocompleteListbox, AutocompleteOption, autocompleteClasses, autocompleteListboxClasses, autocompleteOptionClasses, Avatar, avatarClasses, AvatarGroup, avatarGroupClasses, AspectRatio, aspectRatioClasses, Badge, badgeClasses, Breadcrumbs, breadcrumbsClasses, Card, cardClasses, CardActions, cardActionsClasses, CardContent, cardContentClasses, CardCover, cardCoverClasses, CardOverflow, cardOverflowClasses, Chip, chipClasses, CircularProgress, circularProgressClasses, Drawer, drawerClasses, LinearProgress, linearProgressClasses, List, listClasses, ListDivider, listDividerClasses, ListItem, listItemClasses, ListItemButton, listItemButtonClasses, ListItemContent, listItemContentClasses, ListItemDecorator, listItemDecoratorClasses, ListSubheader, listSubheaderClasses, Link, linkClasses, Slider, sliderClasses, Step, stepClasses, StepButton, stepButtonClasses, StepIndicator, Stepper, stepperClasses, Skeleton, skeletonClasses, } from "@mui/joy";
|
|
2
|
-
export { Accordion, Accordions, AccordionDetails, AccordionSummary, Box, Button, Calendar, Checkbox, Container, DataTable, DatePicker, DateRangePicker, DialogActions, DialogContent, DialogTitle, DialogFrame, Divider, Dropdown, InsetDrawer, FormControl, FormHelperText, FormLabel, Grid, IconButton, Input, Menu, MenuButton, MenuItem, Modal, ModalClose, ModalDialog, ModalOverflow, ModalFrame, Radio, RadioGroup, RadioList, Select, Option, Sheet, Stack, Switch, Table, TableHead, TableBody, Tabs, Tab, TabList, TabPanel, Textarea, ThemeProvider, Tooltip, Typography, } from "./components";
|
|
2
|
+
export { Accordion, Accordions, AccordionDetails, AccordionSummary, Box, Button, Calendar, Checkbox, Container, DataTable, DatePicker, DateRangePicker, DialogActions, DialogContent, DialogTitle, DialogFrame, Divider, Dropdown, InsetDrawer, FormControl, FormHelperText, FormLabel, Grid, IconButton, Input, Menu, MenuButton, MenuItem, Modal, ModalClose, ModalDialog, ModalOverflow, ModalFrame, MonthRangePicker, Radio, RadioGroup, RadioList, Select, Option, Sheet, Stack, Switch, Table, TableHead, TableBody, Tabs, Tab, TabList, TabPanel, Textarea, ThemeProvider, Tooltip, Typography, } from "./components";
|
package/dist/index.js
CHANGED
|
@@ -173,8 +173,8 @@ var Button_default = Button;
|
|
|
173
173
|
// src/components/Calendar/Calendar.tsx
|
|
174
174
|
import React6, { Fragment, forwardRef as forwardRef2, useMemo as useMemo2 } from "react";
|
|
175
175
|
import { styled } from "@mui/joy/styles";
|
|
176
|
-
import ChevronLeftIcon from "@mui/icons-material/esm/ChevronLeft";
|
|
177
|
-
import ChevronRightIcon from "@mui/icons-material/esm/ChevronRight";
|
|
176
|
+
import ChevronLeftIcon from "@mui/icons-material/esm/ChevronLeft.js";
|
|
177
|
+
import ChevronRightIcon from "@mui/icons-material/esm/ChevronRight.js";
|
|
178
178
|
import { AnimatePresence, motion as motion6 } from "framer-motion";
|
|
179
179
|
|
|
180
180
|
// src/components/Typography/Typography.tsx
|
|
@@ -223,7 +223,7 @@ var getMonthName = (date, locale) => {
|
|
|
223
223
|
return date.toLocaleString(locale, { year: "numeric", month: "long" });
|
|
224
224
|
};
|
|
225
225
|
var getMonthNameFromIndex = (index, locale) => {
|
|
226
|
-
return new Date(0, index).toLocaleString(locale, { month: "
|
|
226
|
+
return new Date(0, index).toLocaleString(locale, { month: "short" });
|
|
227
227
|
};
|
|
228
228
|
var getWeekdayNames = (locale) => {
|
|
229
229
|
const currentDay = (/* @__PURE__ */ new Date()).getDay();
|
|
@@ -353,6 +353,7 @@ var useCalendarProps = (inProps) => {
|
|
|
353
353
|
import { useCallback as useCallback2, useState as useState2 } from "react";
|
|
354
354
|
var useCalendar = (ownerState) => {
|
|
355
355
|
const [hoverDay, setHoverDay] = useState2(null);
|
|
356
|
+
const [hoverMonth, setHoverMonth] = useState2(null);
|
|
356
357
|
return {
|
|
357
358
|
calendarTitle: ownerState.view === "month" ? getYearName(ownerState.viewMonth, ownerState.locale || "default") : getMonthName(ownerState.viewMonth, ownerState.locale || "default"),
|
|
358
359
|
onPrev: useCallback2(() => {
|
|
@@ -401,6 +402,32 @@ var useCalendar = (ownerState) => {
|
|
|
401
402
|
hoverDay
|
|
402
403
|
]
|
|
403
404
|
),
|
|
405
|
+
getMonthCellProps: useCallback2(
|
|
406
|
+
(monthIndex) => {
|
|
407
|
+
const thisMonth = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
|
|
408
|
+
thisMonth.setDate(1);
|
|
409
|
+
thisMonth.setHours(0, 0, 0, 0);
|
|
410
|
+
thisMonth.setMonth(monthIndex);
|
|
411
|
+
const isMonthRangeSelection = !ownerState.views?.find((view) => view === "day") && ownerState.rangeSelection;
|
|
412
|
+
const inRange = isMonthRangeSelection && ownerState.value && ownerState.value[0] && // NOTE: hover day is not included in the range
|
|
413
|
+
(hoverMonth && isWithinRange(ownerState.value[0], hoverMonth, thisMonth) || // NOTE: Selected range is included in the range
|
|
414
|
+
ownerState.value[1] && isWithinRange(
|
|
415
|
+
ownerState.value[0],
|
|
416
|
+
ownerState.value[1],
|
|
417
|
+
thisMonth
|
|
418
|
+
));
|
|
419
|
+
return {
|
|
420
|
+
"aria-label": thisMonth.toLocaleDateString(),
|
|
421
|
+
"aria-current": inRange ? "date" : void 0
|
|
422
|
+
};
|
|
423
|
+
},
|
|
424
|
+
[
|
|
425
|
+
ownerState.rangeSelection,
|
|
426
|
+
ownerState.value,
|
|
427
|
+
ownerState.viewMonth,
|
|
428
|
+
hoverMonth
|
|
429
|
+
]
|
|
430
|
+
),
|
|
404
431
|
getPickerDayProps: useCallback2(
|
|
405
432
|
(day) => {
|
|
406
433
|
const thisDay = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
|
|
@@ -469,13 +496,40 @@ var useCalendar = (ownerState) => {
|
|
|
469
496
|
thisMonth.setDate(1);
|
|
470
497
|
thisMonth.setHours(0, 0, 0, 0);
|
|
471
498
|
thisMonth.setMonth(monthIndex);
|
|
499
|
+
const isMonthRangeSelection = !ownerState.views?.find((view) => view === "day") && ownerState.rangeSelection;
|
|
472
500
|
const isSelected = !!ownerState.value && (isSameMonth(thisMonth, ownerState.value[0]) || ownerState.value[1] && isSameMonth(thisMonth, ownerState.value[1]));
|
|
501
|
+
const inRange = isMonthRangeSelection && ownerState.value && ownerState.value[0] && // NOTE: hover day is not included in the range
|
|
502
|
+
(hoverMonth && isWithinRange(ownerState.value[0], hoverMonth, thisMonth) || // NOTE: Selected range is included in the range
|
|
503
|
+
ownerState.value[1] && isWithinRange(
|
|
504
|
+
ownerState.value[0],
|
|
505
|
+
ownerState.value[1],
|
|
506
|
+
thisMonth
|
|
507
|
+
));
|
|
473
508
|
const handleMonthClick = () => {
|
|
474
|
-
|
|
475
|
-
|
|
509
|
+
if (isMonthRangeSelection) {
|
|
510
|
+
if (!ownerState.value) {
|
|
511
|
+
ownerState.onChange?.([thisMonth, void 0]);
|
|
512
|
+
} else if (ownerState.value[0] && !ownerState.value[1]) {
|
|
513
|
+
ownerState.onChange?.([
|
|
514
|
+
new Date(
|
|
515
|
+
Math.min(ownerState.value[0].getTime(), thisMonth.getTime())
|
|
516
|
+
),
|
|
517
|
+
new Date(
|
|
518
|
+
Math.max(ownerState.value[0].getTime(), thisMonth.getTime())
|
|
519
|
+
)
|
|
520
|
+
]);
|
|
521
|
+
} else {
|
|
522
|
+
ownerState.onChange?.([thisMonth, void 0]);
|
|
523
|
+
}
|
|
524
|
+
} else {
|
|
525
|
+
ownerState.onViewChange?.("day");
|
|
526
|
+
ownerState.onMonthChange?.(thisMonth);
|
|
527
|
+
}
|
|
528
|
+
setHoverMonth(null);
|
|
476
529
|
};
|
|
477
530
|
return {
|
|
478
531
|
isSelected,
|
|
532
|
+
onMouseEnter: isMonthRangeSelection && ownerState.value?.[0] && !ownerState.value?.[1] ? () => setHoverMonth(thisMonth) : void 0,
|
|
479
533
|
disabled: ownerState.minDate && (() => {
|
|
480
534
|
const lastDay = new Date(thisMonth);
|
|
481
535
|
lastDay.setMonth(lastDay.getMonth() + 1);
|
|
@@ -485,10 +539,12 @@ var useCalendar = (ownerState) => {
|
|
|
485
539
|
const lastDay = new Date(thisMonth);
|
|
486
540
|
lastDay.setDate(0);
|
|
487
541
|
return lastDay > ownerState.maxDate;
|
|
488
|
-
})() || ownerState.disableFuture && thisMonth > /* @__PURE__ */ new Date() || ownerState.disablePast && thisMonth < /* @__PURE__ */ new Date(),
|
|
542
|
+
})() || ownerState.disableFuture && thisMonth > /* @__PURE__ */ new Date() || ownerState.disablePast && thisMonth < /* @__PURE__ */ new Date() && !isSameMonth(thisMonth, /* @__PURE__ */ new Date()),
|
|
489
543
|
onClick: handleMonthClick,
|
|
490
544
|
tabIndex: -1,
|
|
491
|
-
"aria-label": getMonthName(thisMonth, ownerState.locale || "default")
|
|
545
|
+
"aria-label": getMonthName(thisMonth, ownerState.locale || "default"),
|
|
546
|
+
"aria-selected": isSelected ? "true" : void 0,
|
|
547
|
+
"aria-current": inRange ? "date" : void 0
|
|
492
548
|
};
|
|
493
549
|
},
|
|
494
550
|
[
|
|
@@ -501,7 +557,8 @@ var useCalendar = (ownerState) => {
|
|
|
501
557
|
ownerState.minDate,
|
|
502
558
|
ownerState.maxDate,
|
|
503
559
|
ownerState.disableFuture,
|
|
504
|
-
ownerState.disablePast
|
|
560
|
+
ownerState.disablePast,
|
|
561
|
+
hoverMonth
|
|
505
562
|
]
|
|
506
563
|
)
|
|
507
564
|
};
|
|
@@ -585,6 +642,28 @@ var CalendarDayCell = styled("td", {
|
|
|
585
642
|
}
|
|
586
643
|
}
|
|
587
644
|
}));
|
|
645
|
+
var CalendarMonthCell = styled("td", {
|
|
646
|
+
name: "Calendar",
|
|
647
|
+
slot: "monthCell"
|
|
648
|
+
})(({ theme }) => ({
|
|
649
|
+
// aria-current=date === range에 포함된 버튼
|
|
650
|
+
"&[aria-current=date]": {
|
|
651
|
+
position: "relative",
|
|
652
|
+
"& button[aria-current=date]:not([aria-selected=true]):not(:hover):not(:active)": {
|
|
653
|
+
backgroundColor: `rgb(${theme.palette.primary.lightChannel})`
|
|
654
|
+
},
|
|
655
|
+
'& + td[aria-hidden] + td[aria-current="date"]::before': {
|
|
656
|
+
content: '""',
|
|
657
|
+
position: "absolute",
|
|
658
|
+
top: 0,
|
|
659
|
+
left: "-10px",
|
|
660
|
+
bottom: 0,
|
|
661
|
+
width: "16px",
|
|
662
|
+
backgroundColor: `rgb(${theme.palette.primary.lightChannel})`,
|
|
663
|
+
zIndex: -1
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
}));
|
|
588
667
|
var CalendarMonth = styled(Button_default, {
|
|
589
668
|
name: "Calendar",
|
|
590
669
|
slot: "month"
|
|
@@ -747,7 +826,7 @@ var PickerDays = (props) => {
|
|
|
747
826
|
};
|
|
748
827
|
var PickerMonths = (props) => {
|
|
749
828
|
const { ownerState } = props;
|
|
750
|
-
const { getPickerMonthProps } = useCalendar(ownerState);
|
|
829
|
+
const { getPickerMonthProps, getMonthCellProps } = useCalendar(ownerState);
|
|
751
830
|
const chunkedMonths = Array.from({ length: 12 }, (_, i) => i).reduce(
|
|
752
831
|
(acc, month) => {
|
|
753
832
|
if (acc[acc.length - 1].length === 4) {
|
|
@@ -787,7 +866,7 @@ var PickerMonths = (props) => {
|
|
|
787
866
|
}
|
|
788
867
|
}
|
|
789
868
|
},
|
|
790
|
-
/* @__PURE__ */ React6.createElement("tbody", null, chunkedMonths.map((months, i) => /* @__PURE__ */ React6.createElement(Fragment, { key: i }, /* @__PURE__ */ React6.createElement("tr", null, months.map((monthIndex, j) => /* @__PURE__ */ React6.createElement(Fragment, { key: monthIndex }, /* @__PURE__ */ React6.createElement(
|
|
869
|
+
/* @__PURE__ */ React6.createElement("tbody", null, chunkedMonths.map((months, i) => /* @__PURE__ */ React6.createElement(Fragment, { key: i }, /* @__PURE__ */ React6.createElement("tr", null, months.map((monthIndex, j) => /* @__PURE__ */ React6.createElement(Fragment, { key: monthIndex }, /* @__PURE__ */ React6.createElement(CalendarMonthCell, { ...getMonthCellProps(monthIndex) }, /* @__PURE__ */ React6.createElement(
|
|
791
870
|
CalendarMonth,
|
|
792
871
|
{
|
|
793
872
|
size: "sm",
|
|
@@ -1416,7 +1495,7 @@ DataTable.displayName = "DataTable";
|
|
|
1416
1495
|
// src/components/DatePicker/DatePicker.tsx
|
|
1417
1496
|
import React12, { forwardRef as forwardRef4, useCallback as useCallback4, useState as useState4 } from "react";
|
|
1418
1497
|
import { IMaskInput, IMask } from "react-imask";
|
|
1419
|
-
import CalendarTodayIcon from "@mui/icons-material/esm/CalendarToday";
|
|
1498
|
+
import CalendarTodayIcon from "@mui/icons-material/esm/CalendarToday.js";
|
|
1420
1499
|
import { styled as styled3 } from "@mui/joy/styles";
|
|
1421
1500
|
import { FocusTrap } from "@mui/base/FocusTrap";
|
|
1422
1501
|
import { ClickAwayListener } from "@mui/base/ClickAwayListener";
|
|
@@ -1460,11 +1539,11 @@ var FormHelperText_default = FormHelperText;
|
|
|
1460
1539
|
// src/components/Input/Input.tsx
|
|
1461
1540
|
var MotionInput = motion13(JoyInput);
|
|
1462
1541
|
var Input = (props) => {
|
|
1463
|
-
const { label, helperText, error, style, ...innerProps } = props;
|
|
1542
|
+
const { label, helperText, error, style, size, color, ...innerProps } = props;
|
|
1464
1543
|
if (label) {
|
|
1465
|
-
return /* @__PURE__ */ React11.createElement(FormControl_default, { error }, /* @__PURE__ */ React11.createElement(FormLabel_default, null, label), /* @__PURE__ */ React11.createElement(MotionInput, { ...innerProps
|
|
1544
|
+
return /* @__PURE__ */ React11.createElement(FormControl_default, { color, size, error }, /* @__PURE__ */ React11.createElement(FormLabel_default, null, label), /* @__PURE__ */ React11.createElement(MotionInput, { ...innerProps }), helperText && /* @__PURE__ */ React11.createElement(FormHelperText_default, null, helperText));
|
|
1466
1545
|
}
|
|
1467
|
-
return /* @__PURE__ */ React11.createElement(MotionInput, { ...innerProps });
|
|
1546
|
+
return /* @__PURE__ */ React11.createElement(MotionInput, { color, size, ...innerProps });
|
|
1468
1547
|
};
|
|
1469
1548
|
Input.displayName = "Input";
|
|
1470
1549
|
|
|
@@ -1650,7 +1729,7 @@ DatePicker.displayName = "DatePicker";
|
|
|
1650
1729
|
// src/components/DateRangePicker/DateRangePicker.tsx
|
|
1651
1730
|
import React13, { forwardRef as forwardRef5, useCallback as useCallback5, useMemo as useMemo4, useState as useState5 } from "react";
|
|
1652
1731
|
import { IMaskInput as IMaskInput2, IMask as IMask2 } from "react-imask";
|
|
1653
|
-
import CalendarTodayIcon2 from "@mui/icons-material/esm/CalendarToday";
|
|
1732
|
+
import CalendarTodayIcon2 from "@mui/icons-material/esm/CalendarToday.js";
|
|
1654
1733
|
import { styled as styled4 } from "@mui/joy/styles";
|
|
1655
1734
|
import { FocusTrap as FocusTrap2 } from "@mui/base/FocusTrap";
|
|
1656
1735
|
import { ClickAwayListener as ClickAwayListener2 } from "@mui/base/ClickAwayListener";
|
|
@@ -1979,6 +2058,196 @@ var MenuItem = (props) => {
|
|
|
1979
2058
|
};
|
|
1980
2059
|
MenuItem.displayName = "MenuItem";
|
|
1981
2060
|
|
|
2061
|
+
// src/components/MonthRangePicker/MonthRangePicker.tsx
|
|
2062
|
+
import React19, { forwardRef as forwardRef6, useCallback as useCallback6, useMemo as useMemo5, useState as useState6 } from "react";
|
|
2063
|
+
import { IMaskInput as IMaskInput3, IMask as IMask3 } from "react-imask";
|
|
2064
|
+
import CalendarTodayIcon3 from "@mui/icons-material/esm/CalendarToday";
|
|
2065
|
+
import { styled as styled5 } from "@mui/joy/styles";
|
|
2066
|
+
import { FocusTrap as FocusTrap3 } from "@mui/base/FocusTrap";
|
|
2067
|
+
import { ClickAwayListener as ClickAwayListener3 } from "@mui/base/ClickAwayListener";
|
|
2068
|
+
import { Popper as Popper3 } from "@mui/base/Popper";
|
|
2069
|
+
var StyledPopper3 = styled5(Popper3, {
|
|
2070
|
+
name: "MonthRangePicker",
|
|
2071
|
+
slot: "popper"
|
|
2072
|
+
})(({ theme }) => ({
|
|
2073
|
+
zIndex: theme.zIndex.popup
|
|
2074
|
+
}));
|
|
2075
|
+
var CalendarSheet3 = styled5(Sheet_default, {
|
|
2076
|
+
name: "MonthRangePicker",
|
|
2077
|
+
slot: "sheet",
|
|
2078
|
+
overridesResolver: (props, styles) => styles.root
|
|
2079
|
+
})(({ theme }) => ({
|
|
2080
|
+
zIndex: theme.zIndex.popup,
|
|
2081
|
+
width: "264px",
|
|
2082
|
+
boxShadow: theme.shadow.md,
|
|
2083
|
+
borderRadius: theme.radius.md
|
|
2084
|
+
}));
|
|
2085
|
+
var formatValueString3 = ([date1, date2]) => {
|
|
2086
|
+
const getStr = (date) => {
|
|
2087
|
+
let month = `${date.getMonth() + 1}`;
|
|
2088
|
+
const year = date.getFullYear();
|
|
2089
|
+
if (Number(month) < 10)
|
|
2090
|
+
month = "0" + month;
|
|
2091
|
+
return [year, month].join("/");
|
|
2092
|
+
};
|
|
2093
|
+
return [getStr(date1), date2 ? getStr(date2) : ""].join(" - ");
|
|
2094
|
+
};
|
|
2095
|
+
var parseDate2 = (str) => {
|
|
2096
|
+
const date1 = str.split(" - ")[0] || "";
|
|
2097
|
+
const date2 = str.split(" - ")[1] || "";
|
|
2098
|
+
const yearMonthDay1 = date1.split("/");
|
|
2099
|
+
const yearMonthDay2 = date2.split("/");
|
|
2100
|
+
return [
|
|
2101
|
+
new Date(
|
|
2102
|
+
Number(yearMonthDay1[0]),
|
|
2103
|
+
Number(yearMonthDay1[1]) - 1
|
|
2104
|
+
),
|
|
2105
|
+
new Date(
|
|
2106
|
+
Number(yearMonthDay2[0]),
|
|
2107
|
+
Number(yearMonthDay2[1]) - 1
|
|
2108
|
+
)
|
|
2109
|
+
];
|
|
2110
|
+
};
|
|
2111
|
+
var TextMaskAdapter5 = React19.forwardRef(
|
|
2112
|
+
function TextMaskAdapter6(props, ref) {
|
|
2113
|
+
const { onChange, ...other } = props;
|
|
2114
|
+
return /* @__PURE__ */ React19.createElement(
|
|
2115
|
+
IMaskInput3,
|
|
2116
|
+
{
|
|
2117
|
+
...other,
|
|
2118
|
+
inputRef: ref,
|
|
2119
|
+
onAccept: (value) => onChange({ target: { name: props.name, value } }),
|
|
2120
|
+
mask: Date,
|
|
2121
|
+
pattern: "Y/`m - Y/`m",
|
|
2122
|
+
blocks: {
|
|
2123
|
+
m: {
|
|
2124
|
+
mask: IMask3.MaskedRange,
|
|
2125
|
+
from: 1,
|
|
2126
|
+
to: 12,
|
|
2127
|
+
maxLength: 2
|
|
2128
|
+
},
|
|
2129
|
+
Y: {
|
|
2130
|
+
mask: IMask3.MaskedRange,
|
|
2131
|
+
from: 1900,
|
|
2132
|
+
to: 9999
|
|
2133
|
+
}
|
|
2134
|
+
},
|
|
2135
|
+
format: formatValueString3,
|
|
2136
|
+
parse: parseDate2,
|
|
2137
|
+
autofix: "pad",
|
|
2138
|
+
overwrite: true,
|
|
2139
|
+
placeholderChar: " "
|
|
2140
|
+
}
|
|
2141
|
+
);
|
|
2142
|
+
}
|
|
2143
|
+
);
|
|
2144
|
+
var MonthRangePicker = forwardRef6(
|
|
2145
|
+
(props, ref) => {
|
|
2146
|
+
const { onChange, disabled, label, error, helperText, minDate, maxDate, disableFuture, disablePast } = props;
|
|
2147
|
+
const [value, setValue] = useState6(props.value || "");
|
|
2148
|
+
const [anchorEl, setAnchorEl] = useState6(null);
|
|
2149
|
+
const open = Boolean(anchorEl);
|
|
2150
|
+
const calendarValue = useMemo5(
|
|
2151
|
+
() => value ? parseDate2(value) : void 0,
|
|
2152
|
+
[value]
|
|
2153
|
+
);
|
|
2154
|
+
const handleChange = useCallback6(
|
|
2155
|
+
(event) => {
|
|
2156
|
+
setValue(event.target.value);
|
|
2157
|
+
onChange?.(event);
|
|
2158
|
+
},
|
|
2159
|
+
[onChange]
|
|
2160
|
+
);
|
|
2161
|
+
const handleCalendarToggle = useCallback6(
|
|
2162
|
+
(event) => {
|
|
2163
|
+
setAnchorEl(anchorEl ? null : event.currentTarget);
|
|
2164
|
+
},
|
|
2165
|
+
[anchorEl, setAnchorEl]
|
|
2166
|
+
);
|
|
2167
|
+
const handleCalendarChange = useCallback6(
|
|
2168
|
+
([date1, date2]) => {
|
|
2169
|
+
if (!date1 || !date2)
|
|
2170
|
+
return;
|
|
2171
|
+
setValue(formatValueString3([date1, date2]));
|
|
2172
|
+
setAnchorEl(null);
|
|
2173
|
+
},
|
|
2174
|
+
[setValue, setAnchorEl]
|
|
2175
|
+
);
|
|
2176
|
+
const picker = /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement(
|
|
2177
|
+
Input_default,
|
|
2178
|
+
{
|
|
2179
|
+
ref,
|
|
2180
|
+
size: "sm",
|
|
2181
|
+
value,
|
|
2182
|
+
onChange: handleChange,
|
|
2183
|
+
disabled,
|
|
2184
|
+
placeholder: "YYYY/MM - YYYY/MM",
|
|
2185
|
+
slotProps: { input: { component: TextMaskAdapter5 } },
|
|
2186
|
+
sx: {
|
|
2187
|
+
// NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
|
|
2188
|
+
fontFamily: "monospace"
|
|
2189
|
+
},
|
|
2190
|
+
endDecorator: /* @__PURE__ */ React19.createElement(IconButton_default, { variant: "plain", onClick: handleCalendarToggle }, /* @__PURE__ */ React19.createElement(CalendarTodayIcon3, null))
|
|
2191
|
+
}
|
|
2192
|
+
), open && /* @__PURE__ */ React19.createElement(ClickAwayListener3, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ React19.createElement(
|
|
2193
|
+
StyledPopper3,
|
|
2194
|
+
{
|
|
2195
|
+
id: "date-range-picker-popper",
|
|
2196
|
+
open: true,
|
|
2197
|
+
anchorEl,
|
|
2198
|
+
placement: "bottom-end",
|
|
2199
|
+
modifiers: [
|
|
2200
|
+
{
|
|
2201
|
+
name: "offset",
|
|
2202
|
+
options: {
|
|
2203
|
+
offset: [4, 4]
|
|
2204
|
+
}
|
|
2205
|
+
}
|
|
2206
|
+
]
|
|
2207
|
+
},
|
|
2208
|
+
/* @__PURE__ */ React19.createElement(FocusTrap3, { open: true }, /* @__PURE__ */ React19.createElement(CalendarSheet3, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React19.createElement(
|
|
2209
|
+
Calendar_default,
|
|
2210
|
+
{
|
|
2211
|
+
view: "month",
|
|
2212
|
+
views: ["month"],
|
|
2213
|
+
rangeSelection: true,
|
|
2214
|
+
defaultValue: calendarValue,
|
|
2215
|
+
onChange: handleCalendarChange,
|
|
2216
|
+
minDate,
|
|
2217
|
+
maxDate,
|
|
2218
|
+
disableFuture,
|
|
2219
|
+
disablePast
|
|
2220
|
+
}
|
|
2221
|
+
), /* @__PURE__ */ React19.createElement(
|
|
2222
|
+
DialogActions_default,
|
|
2223
|
+
{
|
|
2224
|
+
sx: {
|
|
2225
|
+
p: 1
|
|
2226
|
+
}
|
|
2227
|
+
},
|
|
2228
|
+
/* @__PURE__ */ React19.createElement(
|
|
2229
|
+
Button_default,
|
|
2230
|
+
{
|
|
2231
|
+
size: "sm",
|
|
2232
|
+
variant: "plain",
|
|
2233
|
+
color: "neutral",
|
|
2234
|
+
onClick: () => {
|
|
2235
|
+
setValue("");
|
|
2236
|
+
setAnchorEl(null);
|
|
2237
|
+
}
|
|
2238
|
+
},
|
|
2239
|
+
"Clear"
|
|
2240
|
+
)
|
|
2241
|
+
)))
|
|
2242
|
+
)));
|
|
2243
|
+
if (label) {
|
|
2244
|
+
return /* @__PURE__ */ React19.createElement(FormControl_default, { error, size: "sm" }, /* @__PURE__ */ React19.createElement(FormLabel_default, null, label), picker, helperText && /* @__PURE__ */ React19.createElement(FormHelperText_default, null, helperText));
|
|
2245
|
+
}
|
|
2246
|
+
return picker;
|
|
2247
|
+
}
|
|
2248
|
+
);
|
|
2249
|
+
MonthRangePicker.displayName = "MonthRangePicker";
|
|
2250
|
+
|
|
1982
2251
|
// src/components/Radio/Radio.tsx
|
|
1983
2252
|
import { Radio as JoyRadio, RadioGroup as JoyRadioGroup } from "@mui/joy";
|
|
1984
2253
|
import { motion as motion23 } from "framer-motion";
|
|
@@ -1990,15 +2259,15 @@ var RadioGroup = MotionRadioGroup;
|
|
|
1990
2259
|
RadioGroup.displayName = "RadioGroup";
|
|
1991
2260
|
|
|
1992
2261
|
// src/components/RadioList/RadioList.tsx
|
|
1993
|
-
import
|
|
2262
|
+
import React20 from "react";
|
|
1994
2263
|
function RadioList(props) {
|
|
1995
2264
|
const { items, ...innerProps } = props;
|
|
1996
|
-
return /* @__PURE__ */
|
|
2265
|
+
return /* @__PURE__ */ React20.createElement(RadioGroup, { ...innerProps }, items.map((item) => /* @__PURE__ */ React20.createElement(Radio, { key: `${item.value}`, value: item.value, label: item.label })));
|
|
1997
2266
|
}
|
|
1998
2267
|
RadioList.displayName = "RadioList";
|
|
1999
2268
|
|
|
2000
2269
|
// src/components/Select/Select.tsx
|
|
2001
|
-
import
|
|
2270
|
+
import React21 from "react";
|
|
2002
2271
|
import {
|
|
2003
2272
|
Select as JoySelect,
|
|
2004
2273
|
Option as JoyOption
|
|
@@ -2008,30 +2277,29 @@ var MotionOption = motion24(JoyOption);
|
|
|
2008
2277
|
var Option = MotionOption;
|
|
2009
2278
|
Option.displayName = "Option";
|
|
2010
2279
|
function Select(props) {
|
|
2011
|
-
const { label, helperText, error, ...innerProps } = props;
|
|
2280
|
+
const { label, helperText, error, size, color, ...innerProps } = props;
|
|
2012
2281
|
if (label) {
|
|
2013
|
-
return /* @__PURE__ */
|
|
2282
|
+
return /* @__PURE__ */ React21.createElement(FormControl_default, { size, color, error }, /* @__PURE__ */ React21.createElement(FormLabel_default, null, label), /* @__PURE__ */ React21.createElement(
|
|
2014
2283
|
JoySelect,
|
|
2015
2284
|
{
|
|
2016
|
-
...innerProps
|
|
2017
|
-
color: error ? "danger" : innerProps.color
|
|
2285
|
+
...innerProps
|
|
2018
2286
|
}
|
|
2019
|
-
), helperText && /* @__PURE__ */
|
|
2287
|
+
), helperText && /* @__PURE__ */ React21.createElement(FormHelperText_default, null, helperText));
|
|
2020
2288
|
}
|
|
2021
|
-
return /* @__PURE__ */
|
|
2289
|
+
return /* @__PURE__ */ React21.createElement(JoySelect, { size, color, ...innerProps });
|
|
2022
2290
|
}
|
|
2023
2291
|
Select.displayName = "Select";
|
|
2024
2292
|
|
|
2025
2293
|
// src/components/Switch/Switch.tsx
|
|
2026
|
-
import
|
|
2294
|
+
import React22 from "react";
|
|
2027
2295
|
import {
|
|
2028
2296
|
Switch as JoySwitch,
|
|
2029
|
-
styled as
|
|
2297
|
+
styled as styled6,
|
|
2030
2298
|
switchClasses
|
|
2031
2299
|
} from "@mui/joy";
|
|
2032
2300
|
import { motion as motion25 } from "framer-motion";
|
|
2033
2301
|
var MotionSwitch = motion25(JoySwitch);
|
|
2034
|
-
var StyledThumb =
|
|
2302
|
+
var StyledThumb = styled6(motion25.div)({
|
|
2035
2303
|
"--Icon-fontSize": "calc(var(--Switch-thumbSize) * 0.75)",
|
|
2036
2304
|
display: "inline-flex",
|
|
2037
2305
|
justifyContent: "center",
|
|
@@ -2049,14 +2317,14 @@ var StyledThumb = styled5(motion25.div)({
|
|
|
2049
2317
|
right: "var(--Switch-thumbOffset)"
|
|
2050
2318
|
}
|
|
2051
2319
|
});
|
|
2052
|
-
var Thumb = (props) => /* @__PURE__ */
|
|
2320
|
+
var Thumb = (props) => /* @__PURE__ */ React22.createElement(StyledThumb, { ...props, layout: true, transition: spring });
|
|
2053
2321
|
var spring = {
|
|
2054
2322
|
type: "spring",
|
|
2055
2323
|
stiffness: 700,
|
|
2056
2324
|
damping: 30
|
|
2057
2325
|
};
|
|
2058
2326
|
var Switch = (props) => {
|
|
2059
|
-
return /* @__PURE__ */
|
|
2327
|
+
return /* @__PURE__ */ React22.createElement(
|
|
2060
2328
|
MotionSwitch,
|
|
2061
2329
|
{
|
|
2062
2330
|
...props,
|
|
@@ -2086,17 +2354,17 @@ var TabPanel = MotionTabPanel;
|
|
|
2086
2354
|
TabPanel.displayName = "TabPanel";
|
|
2087
2355
|
|
|
2088
2356
|
// src/components/Textarea/Textarea.tsx
|
|
2089
|
-
import
|
|
2357
|
+
import React23 from "react";
|
|
2090
2358
|
import { Textarea as JoyTextarea } from "@mui/joy";
|
|
2091
2359
|
import { motion as motion27 } from "framer-motion";
|
|
2092
2360
|
var MotionTextarea = motion27(JoyTextarea);
|
|
2093
2361
|
var Textarea = (props) => {
|
|
2094
|
-
return /* @__PURE__ */
|
|
2362
|
+
return /* @__PURE__ */ React23.createElement(MotionTextarea, { ...props });
|
|
2095
2363
|
};
|
|
2096
2364
|
Textarea.displayName = "Textarea";
|
|
2097
2365
|
|
|
2098
2366
|
// src/components/ThemeProvider/ThemeProvider.tsx
|
|
2099
|
-
import
|
|
2367
|
+
import React24 from "react";
|
|
2100
2368
|
import {
|
|
2101
2369
|
CssBaseline,
|
|
2102
2370
|
CssVarsProvider,
|
|
@@ -2143,17 +2411,17 @@ var defaultTheme = extendTheme({
|
|
|
2143
2411
|
}
|
|
2144
2412
|
});
|
|
2145
2413
|
function ThemeProvider(props) {
|
|
2146
|
-
return /* @__PURE__ */
|
|
2414
|
+
return /* @__PURE__ */ React24.createElement(React24.Fragment, null, /* @__PURE__ */ React24.createElement(CssVarsProvider, { theme: defaultTheme }, /* @__PURE__ */ React24.createElement(CssBaseline, null), props.children));
|
|
2147
2415
|
}
|
|
2148
2416
|
ThemeProvider.displayName = "ThemeProvider";
|
|
2149
2417
|
|
|
2150
2418
|
// src/components/Tooltip/Tooltip.tsx
|
|
2151
|
-
import
|
|
2419
|
+
import React25 from "react";
|
|
2152
2420
|
import { Tooltip as JoyTooltip } from "@mui/joy";
|
|
2153
2421
|
import { motion as motion28 } from "framer-motion";
|
|
2154
2422
|
var MotionTooltip = motion28(JoyTooltip);
|
|
2155
2423
|
var Tooltip = (props) => {
|
|
2156
|
-
return /* @__PURE__ */
|
|
2424
|
+
return /* @__PURE__ */ React25.createElement(MotionTooltip, { ...props });
|
|
2157
2425
|
};
|
|
2158
2426
|
Tooltip.displayName = "Tooltip";
|
|
2159
2427
|
export {
|
|
@@ -2215,6 +2483,7 @@ export {
|
|
|
2215
2483
|
ModalDialog,
|
|
2216
2484
|
ModalFrame,
|
|
2217
2485
|
ModalOverflow,
|
|
2486
|
+
MonthRangePicker,
|
|
2218
2487
|
Option,
|
|
2219
2488
|
Radio,
|
|
2220
2489
|
RadioGroup,
|