react-yearly-calendar-grid 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +5 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +18 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +18 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -37,6 +37,10 @@ interface YearlyCalendarProps {
|
|
|
37
37
|
onDateRangeSelect?: (startDate: Date, endDate: Date) => void;
|
|
38
38
|
onEventClick?: (event: CalendarEvent) => void;
|
|
39
39
|
onEventMove?: (event: CalendarEvent, newStartDate: Date, newEndDate: Date | undefined) => void;
|
|
40
|
+
highlightRange?: {
|
|
41
|
+
start: Date;
|
|
42
|
+
end: Date;
|
|
43
|
+
} | null;
|
|
40
44
|
categoryColors?: Record<string, string>;
|
|
41
45
|
theme?: ThemeColors;
|
|
42
46
|
locale?: string;
|
|
@@ -49,7 +53,7 @@ interface DayCellProps {
|
|
|
49
53
|
onEventClick?: (event: CalendarEvent) => void;
|
|
50
54
|
}
|
|
51
55
|
|
|
52
|
-
declare function YearlyCalendar({ year, events, onDateClick, onDateDoubleClick, onDateRangeSelect, onEventClick, onEventMove, categoryColors, theme: customTheme, }: YearlyCalendarProps): react_jsx_runtime.JSX.Element;
|
|
56
|
+
declare function YearlyCalendar({ year, events, onDateClick, onDateDoubleClick, onDateRangeSelect, onEventClick, onEventMove, highlightRange, categoryColors, theme: customTheme, }: YearlyCalendarProps): react_jsx_runtime.JSX.Element;
|
|
53
57
|
|
|
54
58
|
declare const defaultTheme: Required<ThemeColors>;
|
|
55
59
|
declare function mergeTheme(custom?: ThemeColors): Required<ThemeColors>;
|
package/dist/index.d.ts
CHANGED
|
@@ -37,6 +37,10 @@ interface YearlyCalendarProps {
|
|
|
37
37
|
onDateRangeSelect?: (startDate: Date, endDate: Date) => void;
|
|
38
38
|
onEventClick?: (event: CalendarEvent) => void;
|
|
39
39
|
onEventMove?: (event: CalendarEvent, newStartDate: Date, newEndDate: Date | undefined) => void;
|
|
40
|
+
highlightRange?: {
|
|
41
|
+
start: Date;
|
|
42
|
+
end: Date;
|
|
43
|
+
} | null;
|
|
40
44
|
categoryColors?: Record<string, string>;
|
|
41
45
|
theme?: ThemeColors;
|
|
42
46
|
locale?: string;
|
|
@@ -49,7 +53,7 @@ interface DayCellProps {
|
|
|
49
53
|
onEventClick?: (event: CalendarEvent) => void;
|
|
50
54
|
}
|
|
51
55
|
|
|
52
|
-
declare function YearlyCalendar({ year, events, onDateClick, onDateDoubleClick, onDateRangeSelect, onEventClick, onEventMove, categoryColors, theme: customTheme, }: YearlyCalendarProps): react_jsx_runtime.JSX.Element;
|
|
56
|
+
declare function YearlyCalendar({ year, events, onDateClick, onDateDoubleClick, onDateRangeSelect, onEventClick, onEventMove, highlightRange, categoryColors, theme: customTheme, }: YearlyCalendarProps): react_jsx_runtime.JSX.Element;
|
|
53
57
|
|
|
54
58
|
declare const defaultTheme: Required<ThemeColors>;
|
|
55
59
|
declare function mergeTheme(custom?: ThemeColors): Required<ThemeColors>;
|
package/dist/index.js
CHANGED
|
@@ -417,6 +417,7 @@ function YearlyCalendar({
|
|
|
417
417
|
onDateRangeSelect,
|
|
418
418
|
onEventClick,
|
|
419
419
|
onEventMove,
|
|
420
|
+
highlightRange,
|
|
420
421
|
categoryColors = {},
|
|
421
422
|
theme: customTheme
|
|
422
423
|
}) {
|
|
@@ -555,10 +556,21 @@ function YearlyCalendar({
|
|
|
555
556
|
return new Date(year, month, day).getTime();
|
|
556
557
|
};
|
|
557
558
|
const isInSelectionRange = (month, day) => {
|
|
558
|
-
if (
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
559
|
+
if (rangeSelectionStart && rangeSelectionEnd) {
|
|
560
|
+
const cellDate = dateToNumber(month, day);
|
|
561
|
+
const startDate = dateToNumber(rangeSelectionStart.month, rangeSelectionStart.day);
|
|
562
|
+
const endDate = dateToNumber(rangeSelectionEnd.month, rangeSelectionEnd.day);
|
|
563
|
+
const minDate = Math.min(startDate, endDate);
|
|
564
|
+
const maxDate = Math.max(startDate, endDate);
|
|
565
|
+
if (cellDate >= minDate && cellDate <= maxDate) return true;
|
|
566
|
+
}
|
|
567
|
+
return false;
|
|
568
|
+
};
|
|
569
|
+
const isInHighlightRange = (month, day) => {
|
|
570
|
+
if (!highlightRange) return false;
|
|
571
|
+
const cellDate = new Date(year, month, day).getTime();
|
|
572
|
+
const startDate = highlightRange.start.getTime();
|
|
573
|
+
const endDate = highlightRange.end.getTime();
|
|
562
574
|
const minDate = Math.min(startDate, endDate);
|
|
563
575
|
const maxDate = Math.max(startDate, endDate);
|
|
564
576
|
return cellDate >= minDate && cellDate <= maxDate;
|
|
@@ -820,12 +832,13 @@ function YearlyCalendar({
|
|
|
820
832
|
const saturday = isValidDay && isSaturday(year, monthIndex, day);
|
|
821
833
|
const isHovered = (hoveredCell == null ? void 0 : hoveredCell.month) === monthIndex && (hoveredCell == null ? void 0 : hoveredCell.day) === day;
|
|
822
834
|
const isInRange = isValidDay && isInSelectionRange(monthIndex, day);
|
|
835
|
+
const isHighlighted = isValidDay && isInHighlightRange(monthIndex, day);
|
|
823
836
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
824
837
|
"div",
|
|
825
838
|
{
|
|
826
839
|
style: __spreadProps(__spreadValues({}, styles.calendarCell), {
|
|
827
840
|
height: rowHeight,
|
|
828
|
-
backgroundColor: isInRange ? "rgba(59, 130, 246, 0.3)" : getCellBackgroundColor(
|
|
841
|
+
backgroundColor: isInRange ? "rgba(59, 130, 246, 0.3)" : isHighlighted ? "rgba(59, 130, 246, 0.2)" : getCellBackgroundColor(
|
|
829
842
|
theme,
|
|
830
843
|
isValidDay,
|
|
831
844
|
sunday,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/YearlyCalendar/styles.ts","../src/YearlyCalendar/YearlyCalendar.tsx"],"names":["isSunday","isSaturday","useMemo","useRef","useState","useEffect","useCallback","jsx","jsxs","Fragment"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAIO,IAAM,YAAA,GAAsC;AAAA;AAAA,EAEjD,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU,SAAA;AAAA,EACV,SAAA,EAAW,SAAA;AAAA,EACX,QAAA,EAAU,SAAA;AAAA,EACV,UAAA,EAAY,SAAA;AAAA,EACZ,eAAA,EAAiB,0BAAA;AAAA;AAAA,EAGjB,aAAA,EAAe,SAAA;AAAA,EACf,mBAAA,EAAqB,SAAA;AAAA;AAAA,EAGrB,WAAA,EAAa,SAAA;AAAA,EACb,aAAA,EAAe,SAAA;AAAA,EACf,SAAA,EAAW,SAAA;AAAA;AAAA,EAGX,SAAA,EAAW,SAAA;AAAA,EACX,WAAA,EAAa,SAAA;AAAA,EACb,aAAA,EAAe,oBAAA;AAAA,EACf,aAAA,EAAe,SAAA;AAAA,EACf,kBAAA,EAAoB,SAAA;AAAA,EACpB,cAAA,EAAgB,SAAA;AAAA,EAChB,gBAAA,EAAkB;AACpB;AAGO,SAAS,WAAW,MAAA,EAA6C;AACtE,EAAA,IAAI,CAAC,QAAQ,OAAO,YAAA;AACpB,EAAA,OAAO,kCAAK,YAAA,CAAA,EAAiB,MAAA,CAAA;AAC/B;AAGO,SAAS,aAAa,KAAA,EAA8B;AACzD,EAAA,OAAO;AAAA;AAAA,IAEL,SAAA,EAAW;AAAA,MACT,KAAA,EAAO,MAAA;AAAA,MACP,MAAA,EAAQ,MAAA;AAAA,MACR,QAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAS,MAAA;AAAA,MACT,aAAA,EAAe;AAAA,KACjB;AAAA;AAAA,IAGA,aAAA,EAAe;AAAA,MACb,OAAA,EAAS,MAAA;AAAA,MACT,KAAA,EAAO,MAAA;AAAA,MACP,IAAA,EAAM;AAAA,KACR;AAAA;AAAA,IAGA,SAAA,EAAW;AAAA,MACT,QAAA,EAAU,QAAA;AAAA,MACV,IAAA,EAAM,CAAA;AAAA,MACN,MAAA,EAAQ,EAAA;AAAA,MACR,iBAAiB,KAAA,CAAM,SAAA;AAAA,MACvB,UAAA,EAAY,CAAA;AAAA,MACZ,OAAA,EAAS,MAAA;AAAA,MACT,aAAA,EAAe;AAAA,KACjB;AAAA;AAAA,IAGA,aAAA,EAAe;AAAA,MACb,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,aAAa,CAAA,CAAA;AAAA,MACxC,iBAAiB,KAAA,CAAM,SAAA;AAAA,MACvB,OAAA,EAAS,OAAA;AAAA,MACT,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB,QAAA;AAAA,MAChB,UAAA,EAAY,GAAA;AAAA,MACZ,QAAA,EAAU,EAAA;AAAA,MACV,KAAA,EAAO;AAAA,KACT;AAAA;AAAA,IAGA,OAAA,EAAS;AAAA,MACP,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,aAAa,CAAA,CAAA;AAAA,MACxC,iBAAiB,KAAA,CAAM,QAAA;AAAA,MACvB,OAAA,EAAS,OAAA;AAAA,MACT,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB,QAAA;AAAA,MAChB,UAAA,EAAY,GAAA;AAAA,MACZ,QAAA,EAAU,EAAA;AAAA,MACV,KAAA,EAAO;AAAA,KACT;AAAA;AAAA,IAGA,WAAA,EAAa;AAAA,MACX,QAAA,EAAU,UAAA;AAAA,MACV,IAAA,EAAM,CAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA;AAAA,IAGA,WAAA,EAAa;AAAA,MACX,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,aAAa,CAAA,CAAA;AAAA,MACxC,iBAAiB,KAAA,CAAM,SAAA;AAAA,MACvB,OAAA,EAAS,OAAA;AAAA,MACT,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB,QAAA;AAAA,MAChB,UAAA,EAAY,GAAA;AAAA,MACZ,QAAA,EAAU;AAAA,KACZ;AAAA;AAAA,IAGA,YAAA,EAAc;AAAA,MACZ,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,aAAa,CAAA,CAAA;AAAA,MACxC,QAAA,EAAU;AAAA,KACZ;AAAA;AAAA,IAGA,iBAAA,EAAmB;AAAA,MACjB,QAAA,EAAU,UAAA;AAAA,MACV,GAAA,EAAK,EAAA;AAAA,MACL,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO,KAAA;AAAA,MACP,OAAA,EAAS,OAAA;AAAA,MACT,aAAA,EAAe,MAAA;AAAA,MACf,MAAA,EAAQ;AAAA,KACV;AAAA;AAAA,IAGA,QAAA,EAAU;AAAA,MACR,QAAA,EAAU,UAAA;AAAA,MACV,MAAA,EAAQ,MAAA;AAAA,MACR,UAAA,EAAY,6BAAA;AAAA,MACZ,SAAA,EAAW;AAAA,KACb;AAAA;AAAA,IAGA,aAAA,EAAe;AAAA,MACb,QAAA,EAAU,UAAA;AAAA,MACV,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO,CAAA;AAAA,MACP,aAAA,EAAe,MAAA;AAAA,MACf,MAAA,EAAQ;AAAA,KACV;AAAA,IAEA,kBAAA,EAAoB;AAAA,MAClB,MAAA,EAAQ,MAAA;AAAA,MACR,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,mBAAmB,CAAA,CAAA;AAAA,MAC9C,iBAAiB,KAAA,CAAM,eAAA;AAAA,MACvB,YAAA,EAAc;AAAA,KAChB;AAAA;AAAA,IAGA,YAAA,EAAc;AAAA,MACZ,QAAA,EAAU,OAAA;AAAA,MACV,MAAA,EAAQ,GAAA;AAAA,MACR,aAAA,EAAe,MAAA;AAAA,MACf,SAAA,EAAW;AAAA,KACb;AAAA,IAEA,mBAAA,EAAqB;AAAA,MACnB,iBAAiB,KAAA,CAAM,cAAA;AAAA,MACvB,OAAO,KAAA,CAAM,WAAA;AAAA,MACb,QAAA,EAAU,EAAA;AAAA,MACV,UAAA,EAAY,GAAA;AAAA,MACZ,YAAA,EAAc,CAAA;AAAA,MACd,OAAA,EAAS,UAAA;AAAA,MACT,SAAA,EAAW;AAAA,KACb;AAAA,IAEA,mBAAA,EAAqB;AAAA,MACnB,QAAA,EAAU,EAAA;AAAA,MACV,UAAA,EAAY,GAAA;AAAA,MACZ,OAAA,EAAS;AAAA,KACX;AAAA;AAAA,IAGA,qBAAA,EAAuB;AAAA,MACrB,iBAAiB,KAAA,CAAM,gBAAA;AAAA,MACvB,OAAO,KAAA,CAAM,WAAA;AAAA,MACb,QAAA,EAAU,EAAA;AAAA,MACV,UAAA,EAAY,GAAA;AAAA,MACZ,YAAA,EAAc,CAAA;AAAA,MACd,OAAA,EAAS,UAAA;AAAA,MACT,SAAA,EAAW;AAAA,KACb;AAAA;AAAA,IAGA,OAAA,EAAS;AAAA,MACP,QAAA,EAAU,OAAA;AAAA,MACV,MAAA,EAAQ,GAAA;AAAA,MACR,aAAA,EAAe;AAAA,KACjB;AAAA,IAEA,cAAA,EAAgB;AAAA,MACd,iBAAiB,KAAA,CAAM,SAAA;AAAA,MACvB,OAAO,KAAA,CAAM,WAAA;AAAA,MACb,QAAA,EAAU,EAAA;AAAA,MACV,YAAA,EAAc,CAAA;AAAA,MACd,OAAA,EAAS,SAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,SAAA,EAAW;AAAA,KACb;AAAA,IAEA,YAAA,EAAc;AAAA,MACZ,UAAA,EAAY;AAAA,KACd;AAAA,IAEA,WAAA,EAAa;AAAA,MACX,KAAA,EAAO,0BAAA;AAAA,MACP,QAAA,EAAU,EAAA;AAAA,MACV,SAAA,EAAW;AAAA,KACb;AAAA;AAAA,IAGA,aAAA,EAAe;AAAA,MACb,QAAA,EAAU,OAAA;AAAA,MACV,KAAA,EAAO,CAAA;AAAA,MACP,MAAA,EAAQ,GAAA;AAAA,MACR,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB,QAAA;AAAA,MAChB,iBAAiB,KAAA,CAAM;AAAA,KACzB;AAAA,IAEA,aAAA,EAAe;AAAA,MACb,iBAAiB,KAAA,CAAM,OAAA;AAAA,MACvB,YAAA,EAAc,CAAA;AAAA,MACd,SAAA,EAAW,2EAAA;AAAA,MACX,OAAA,EAAS,EAAA;AAAA,MACT,QAAA,EAAU,GAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACV;AAAA,IAEA,WAAA,EAAa;AAAA,MACX,UAAA,EAAY,GAAA;AAAA,MACZ,OAAO,KAAA,CAAM,WAAA;AAAA,MACb,YAAA,EAAc;AAAA,KAChB;AAAA,IAEA,UAAA,EAAY;AAAA,MACV,QAAA,EAAU,EAAA;AAAA,MACV,OAAO,KAAA,CAAM,aAAA;AAAA,MACb,YAAA,EAAc;AAAA,KAChB;AAAA,IAEA,gBAAA,EAAkB;AAAA,MAChB,UAAA,EAAY,GAAA;AAAA,MACZ,OAAO,KAAA,CAAM;AAAA,KACf;AAAA,IAEA,eAAA,EAAiB;AAAA,MACf,OAAO,KAAA,CAAM;AAAA,KACf;AAAA,IAEA,aAAA,EAAe;AAAA,MACb,OAAA,EAAS,MAAA;AAAA,MACT,GAAA,EAAK,CAAA;AAAA,MACL,cAAA,EAAgB;AAAA,KAClB;AAAA,IAEA,kBAAA,EAAoB;AAAA,MAClB,OAAA,EAAS,UAAA;AAAA,MACT,QAAA,EAAU,EAAA;AAAA,MACV,OAAO,KAAA,CAAM,aAAA;AAAA,MACb,eAAA,EAAiB,aAAA;AAAA,MACjB,MAAA,EAAQ,MAAA;AAAA,MACR,YAAA,EAAc,CAAA;AAAA,MACd,MAAA,EAAQ;AAAA,KACV;AAAA,IAEA,mBAAA,EAAqB;AAAA,MACnB,OAAA,EAAS,UAAA;AAAA,MACT,QAAA,EAAU,EAAA;AAAA,MACV,OAAO,KAAA,CAAM,WAAA;AAAA,MACb,iBAAiB,KAAA,CAAM,aAAA;AAAA,MACvB,MAAA,EAAQ,MAAA;AAAA,MACR,YAAA,EAAc,CAAA;AAAA,MACd,MAAA,EAAQ;AAAA,KACV;AAAA;AAAA,IAGA,YAAA,EAAc;AAAA,MACZ,QAAA,EAAU,UAAA;AAAA,MACV,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO,CAAA;AAAA,MACP,MAAA,EAAQ,CAAA;AAAA,MACR,MAAA,EAAQ,WAAA;AAAA,MACR,OAAA,EAAS,CAAA;AAAA,MACT,eAAA,EAAiB;AAAA,KACnB;AAAA,IAEA,eAAA,EAAiB;AAAA,MACf,GAAA,EAAK,CAAA;AAAA,MACL,mBAAA,EAAqB,CAAA;AAAA,MACrB,oBAAA,EAAsB;AAAA,KACxB;AAAA,IAEA,kBAAA,EAAoB;AAAA,MAClB,MAAA,EAAQ,CAAA;AAAA,MACR,sBAAA,EAAwB,CAAA;AAAA,MACxB,uBAAA,EAAyB;AAAA,KAC3B;AAAA;AAAA,IAGA,SAAA,EAAW;AAAA,MACT,QAAA,EAAU,UAAA;AAAA,MACV,IAAA,EAAM,KAAA;AAAA,MACN,SAAA,EAAW,kBAAA;AAAA,MACX,QAAA,EAAU,CAAA;AAAA,MACV,KAAA,EAAO;AAAA,KACT;AAAA,IAEA,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK;AAAA,KACP;AAAA,IAEA,eAAA,EAAiB;AAAA,MACf,MAAA,EAAQ;AAAA,KACV;AAAA;AAAA,IAGA,aAAA,EAAe;AAAA,MACb,QAAA,EAAU,UAAA;AAAA,MACV,KAAA,EAAO,CAAA;AAAA,MACP,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB,QAAA;AAAA,MAChB,QAAA,EAAU,EAAA;AAAA,MACV,KAAA,EAAO,SAAA;AAAA,MACP,UAAA,EAAY,GAAA;AAAA,MACZ,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa;AAAA,KACf;AAAA;AAAA,IAGA,eAAA,EAAiB;AAAA,MACf,QAAA,EAAU,UAAA;AAAA,MACV,KAAA,EAAO,CAAA;AAAA,MACP,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB,QAAA;AAAA,MAChB,QAAA,EAAU,CAAA;AAAA,MACV,KAAA,EAAO,SAAA;AAAA,MACP,UAAA,EAAY,GAAA;AAAA,MACZ,QAAA,EAAU,QAAA;AAAA,MACV,OAAA,EAAS;AAAA,KACX;AAAA,IAEA,QAAA,EAAU;AAAA,MACR,QAAA,EAAU,QAAA;AAAA,MACV,YAAA,EAAc,UAAA;AAAA,MACd,UAAA,EAAY;AAAA;AACd,GACF;AACF;AAGO,SAAS,sBAAA,CACd,KAAA,EACA,UAAA,EACAA,SAAAA,EACAC,aACA,SAAA,EACQ;AACR,EAAA,IAAI,CAAC,UAAA,EAAY,OAAO,KAAA,CAAM,SAAA;AAC9B,EAAA,IAAI,SAAA,SAAkB,KAAA,CAAM,QAAA;AAC5B,EAAA,IAAID,SAAAA,SAAiB,KAAA,CAAM,QAAA;AAC3B,EAAA,IAAIC,WAAAA,SAAmB,KAAA,CAAM,UAAA;AAC7B,EAAA,OAAO,KAAA,CAAM,OAAA;AACf;AChXA,IAAM,MAAA,GAAS;AAAA,EACb,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,EAAA,EAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AACvD,IAAM,cAAA,GAAiB,EAAA;AACvB,IAAM,aAAA,GAAgB,EAAA;AAEtB,SAAS,cAAA,CAAe,MAAc,KAAA,EAAuB;AAC3D,EAAA,OAAO,IAAI,IAAA,CAAK,IAAA,EAAM,QAAQ,CAAA,EAAG,CAAC,EAAE,OAAA,EAAQ;AAC9C;AAEA,SAAS,QAAA,CAAS,IAAA,EAAc,KAAA,EAAe,GAAA,EAAsB;AACnE,EAAA,OAAO,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,GAAG,CAAA,CAAE,QAAO,KAAM,CAAA;AACjD;AAEA,SAAS,UAAA,CAAW,IAAA,EAAc,KAAA,EAAe,GAAA,EAAsB;AACrE,EAAA,OAAO,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,GAAG,CAAA,CAAE,QAAO,KAAM,CAAA;AACjD;AAUA,SAAS,aAAA,CACP,MAAA,EACA,IAAA,EACA,KAAA,EACa;AACb,EAAA,MAAM,QAAqB,EAAC;AAC5B,EAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,EAAM,KAAK,CAAA;AAE9C,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAU;AACxB,IAAA,MAAM,YAAY,KAAA,CAAM,IAAA;AACxB,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,IAAA;AAEvC,IAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,CAAC,CAAA;AAC1C,IAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,WAAA,EAAa,EAAA,EAAI,IAAI,EAAE,CAAA;AAE9D,IAAA,IAAI,SAAA,GAAY,QAAA,IAAY,OAAA,GAAU,UAAA,EAAY;AAChD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,SAAA,IAAa,UAAA,GAAa,SAAA,CAAU,SAAQ,GAAI,CAAA;AAClE,IAAA,MAAM,OAAA,GAAU,OAAA,IAAW,QAAA,GAAW,OAAA,CAAQ,SAAQ,GAAI,WAAA;AAE1D,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,KAAA;AAAA,MACA,QAAA,EAAU,SAAA;AAAA,MACV,MAAA,EAAQ,OAAA;AAAA,MACR,SACE,SAAA,CAAU,WAAA,OAAkB,IAAA,IAAQ,SAAA,CAAU,UAAS,KAAM,KAAA;AAAA,MAC/D,OAAO,OAAA,CAAQ,WAAA,OAAkB,IAAA,IAAQ,OAAA,CAAQ,UAAS,KAAM;AAAA,KACjE,CAAA;AAAA,EACH,CAAC,CAAA;AAED,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,eAAe,KAAA,EAAyC;AAC/D,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAoB;AACxC,EAAA,MAAM,QAA8B,EAAC;AACrC,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,QAAA,GAAW,CAAA,CAAE,QAAQ,CAAA;AAEhE,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,IAAA,KAAS;AACvB,IAAA,IAAI,SAAA,GAAY,MAAM,SAAA,CAAU,CAAC,SAAS,IAAA,CAAK,MAAA,GAAS,KAAK,QAAQ,CAAA;AACrE,IAAA,IAAI,cAAc,EAAA,EAAI;AACpB,MAAA,SAAA,GAAY,KAAA,CAAM,MAAA;AAClB,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAA,CAAK,QAAQ,CAAA;AAAA,IACpC,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,SAAS,CAAA,CAAE,MAAA,GAAS,IAAA,CAAK,MAAA;AAAA,IACjC;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,EAAA,EAAI,SAAS,CAAA;AAAA,EACtC,CAAC,CAAA;AAED,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,cAAA,CAAe;AAAA,EAC7B,IAAA;AAAA,EACA,SAAS,EAAC;AAAA,EACV,WAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAiB,EAAC;AAAA,EAClB,KAAA,EAAO;AACT,CAAA,EAAwB;AAEtB,EAAA,MAAM,KAAA,GAAQC,cAAQ,MAAM,UAAA,CAAW,WAAW,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAClE,EAAA,MAAM,MAAA,GAASA,cAAQ,MAAM,YAAA,CAAa,KAAK,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEzD,EAAA,MAAM,YAAA,GAAeC,aAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,eAAS,cAAc,CAAA;AAEzD,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,kBAAkB,MAAM;AAC5B,MAAA,IAAI,aAAa,OAAA,EAAS;AACxB,QAAA,MAAM,eAAA,GAAkB,aAAa,OAAA,CAAQ,YAAA;AAC7C,QAAA,MAAM,mBAAmB,IAAA,CAAK,KAAA;AAAA,UAAA,CAC3B,kBAAkB,aAAA,IAAiB;AAAA,SACtC;AACA,QAAA,YAAA,CAAa,IAAA,CAAK,GAAA,CAAI,gBAAA,EAAkB,cAAc,CAAC,CAAA;AAAA,MACzD;AAAA,IACF,CAAA;AAEA,IAAA,eAAA,EAAgB;AAChB,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,eAAe,CAAA;AACjD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,eAAe,CAAA;AAAA,EACnE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAID,cAAA;AAAA,IACxC;AAAA,GACF;AACA,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAiB,CAAC,CAAA;AACtD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAG9B,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAG9B,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,eAAiB,CAAC,CAAA;AAChE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,eAAiB,CAAC,CAAA;AAC9D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAK5B,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAI9B,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,eAGhC,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAG5B,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAC1E,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAIA,eAG5C,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAIA,eAAS,KAAK,CAAA;AACpE,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAGtE,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAIA,eAG5C,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,eAGxC,IAAI,CAAA;AACd,EAAA,MAAM,mBAAmB,mBAAA,KAAwB,IAAA;AAEjD,EAAA,MAAM,UAAA,GAAaF,cAAQ,MAAM;AAC/B,IAAA,MAAM,SAAwB,EAAC;AAC/B,IAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,EAAA,EAAI,KAAA,EAAA,EAAS;AACvC,MAAA,MAAA,CAAO,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQ,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,IAChD;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG,CAAC,MAAA,EAAQ,IAAI,CAAC,CAAA;AAEjB,EAAA,MAAM,QAAA,GAAWA,cAAQ,MAAM;AAC7B,IAAA,OAAO,WAAW,GAAA,CAAI,CAAC,KAAA,KAAU,cAAA,CAAe,KAAK,CAAC,CAAA;AAAA,EACxD,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAGf,EAAA,MAAM,QAAA,GAAWA,cAAQ,MAAM;AAC7B,IAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,KAAY;AAC/B,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,IAAA,KAAS;AACxB,QAAA,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,GAAO,CAAC,CAAA;AAAA,MAC9B,CAAC,CAAA;AACD,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,CAAC,CAAA;AAAA,IACxB,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAGb,EAAA,MAAM,kBAAA,GAAqBA,cAAQ,MAAM;AACvC,IAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,YAAA,EAAc,OAAO,IAAA;AAE5C,IAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,aAAA;AACxB,IAAA,MAAM,WAAW,IAAI,IAAA,CAAK,MAAM,YAAA,CAAa,KAAA,EAAO,aAAa,GAAG,CAAA;AAEpE,IAAA,IAAI,YAAA,GAAe,IAAI,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AACtC,IAAA,IAAI,aAAa,IAAI,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,MAAM,IAAI,CAAA;AAErD,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,QAAA,YAAA,GAAe,QAAA;AAAA,MACjB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAI,YAAY,YAAA,EAAc;AAC5B,QAAA,UAAA,GAAa,QAAA;AAAA,MACf;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,uBAAY,GAAA,EAAuB;AACzC,IAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,EAAA,EAAI,KAAA,EAAA,EAAS;AACvC,MAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,EAAM,KAAK,CAAA;AAC9C,MAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,CAAC,CAAA;AAC1C,MAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,WAAA,EAAa,EAAA,EAAI,IAAI,EAAE,CAAA;AAE9D,MAAA,IAAI,YAAA,GAAe,QAAA,IAAY,UAAA,GAAa,UAAA,EAAY;AAExD,MAAA,MAAM,SAAA,GAAY,YAAA,IAAgB,UAAA,GAAa,YAAA,CAAa,SAAQ,GAAI,CAAA;AACxE,MAAA,MAAM,OAAA,GACJ,UAAA,IAAc,QAAA,GAAW,UAAA,CAAW,SAAQ,GAAI,WAAA;AAElD,MAAA,KAAA,CAAM,IAAI,KAAA,EAAO;AAAA,QACf,KAAA;AAAA,QACA,QAAA,EAAU,SAAA;AAAA,QACV,MAAA,EAAQ,OAAA;AAAA,QACR,SACE,YAAA,CAAa,WAAA,OAAkB,IAAA,IAC/B,YAAA,CAAa,UAAS,KAAM,KAAA;AAAA,QAC9B,OACE,UAAA,CAAW,WAAA,OAAkB,IAAA,IAAQ,UAAA,CAAW,UAAS,KAAM;AAAA,OAClE,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,EAAG,CAAC,aAAA,EAAe,YAAA,EAAc,IAAI,CAAC,CAAA;AAEtC,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAiC;AACtD,IAAA,IAAI,KAAA,CAAM,KAAA,EAAO,OAAO,KAAA,CAAM,KAAA;AAC9B,IAAA,IAAI,KAAA,CAAM,QAAA,IAAY,cAAA,CAAe,KAAA,CAAM,QAAQ,CAAA,EAAG;AACpD,MAAA,OAAO,cAAA,CAAe,MAAM,QAAQ,CAAA;AAAA,IACtC;AACA,IAAA,OAAO,SAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,YAAA,GAAeA,cAAQ,MAAM;AACjC,IAAA,MAAM,GAAA,uBAAU,GAAA,EAA6B;AAC7C,IAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAU;AACxB,MAAA,MAAM,YAAY,KAAA,CAAM,IAAA;AACxB,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,IAAA;AACvC,MAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,SAAS,CAAA;AAClC,MAAA,OAAO,WAAW,OAAA,EAAS;AACzB,QAAA,MAAM,OAAA,GAAU,CAAA,EAAG,OAAA,CAAQ,WAAA,EAAa,CAAA,CAAA,EAAI,OAAA,CAAQ,QAAA,EAAU,CAAA,CAAA,EAAI,OAAA,CAAQ,OAAA,EAAS,CAAA,CAAA;AACnF,QAAA,MAAM,QAAA,GAAW,GAAA,CAAI,GAAA,CAAI,OAAO,KAAK,EAAC;AACtC,QAAA,GAAA,CAAI,IAAI,OAAA,EAAS,CAAC,GAAG,QAAA,EAAU,KAAK,CAAC,CAAA;AACrC,QAAA,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,OAAA,EAAQ,GAAI,CAAC,CAAA;AAAA,MACvC;AAAA,IACF,CAAC,CAAA;AACD,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,EAAe,GAAA,KAAiC;AACxE,IAAA,MAAM,UAAU,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,IAAI,GAAG,CAAA,CAAA;AACvC,IAAA,OAAO,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA,IAAK,EAAC;AAAA,EACvC,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,EAAe,GAAA,KAAgB;AACtD,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,EAAM,KAAK,CAAA;AAC9C,IAAA,IAAI,MAAM,WAAA,EAAa;AACvB,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,GAAG,CAAA;AACtC,IAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,KAAA,EAAO,GAAG,CAAA;AAC9C,IAAA,WAAA,CAAY,MAAM,UAAU,CAAA;AAAA,EAC9B,CAAA;AAEA,EAAA,MAAM,qBAAA,GAAwB,CAAC,KAAA,EAAe,GAAA,KAAgB;AAC5D,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACxB,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,EAAM,KAAK,CAAA;AAC9C,IAAA,IAAI,MAAM,WAAA,EAAa;AACvB,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,GAAG,CAAA;AACtC,IAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,KAAA,EAAO,GAAG,CAAA;AAC9C,IAAA,iBAAA,CAAkB,MAAM,UAAU,CAAA;AAAA,EACpC,CAAA;AAGA,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,EAAe,GAAA,KAAwB;AAC3D,IAAA,OAAO,IAAI,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,GAAG,EAAE,OAAA,EAAQ;AAAA,EAC5C,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,KAAA,EAAe,GAAA,KAAyB;AAClE,IAAA,IAAI,CAAC,mBAAA,IAAuB,CAAC,iBAAA,EAAmB,OAAO,KAAA;AACvD,IAAA,MAAM,QAAA,GAAW,YAAA,CAAa,KAAA,EAAO,GAAG,CAAA;AACxC,IAAA,MAAM,SAAA,GAAY,YAAA,CAAa,mBAAA,CAAoB,KAAA,EAAO,oBAAoB,GAAG,CAAA;AACjF,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,iBAAA,CAAkB,KAAA,EAAO,kBAAkB,GAAG,CAAA;AAC3E,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA;AAC3C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA;AAC3C,IAAA,OAAO,QAAA,IAAY,WAAW,QAAA,IAAY,OAAA;AAAA,EAC5C,CAAA;AAEA,EAAA,MAAM,sBAAA,GAAyBI,iBAAA;AAAA,IAC7B,CAAC,OAAe,GAAA,KAAgB;AAC9B,MAAA,IAAI,CAAC,iBAAA,EAAmB;AACxB,MAAA,IAAI,iBAAiB,aAAA,EAAe;AACpC,MAAA,sBAAA,CAAuB,EAAE,KAAA,EAAO,GAAA,EAAK,CAAA;AACrC,MAAA,oBAAA,CAAqB,EAAE,KAAA,EAAO,GAAA,EAAK,CAAA;AAAA,IACrC,CAAA;AAAA,IACA,CAAC,iBAAA,EAAmB,aAAA,EAAe,aAAa;AAAA,GAClD;AAEA,EAAA,MAAM,qBAAA,GAAwBA,iBAAA;AAAA,IAC5B,CAAC,OAAe,GAAA,KAAgB;AAC9B,MAAA,IAAI,CAAC,mBAAA,EAAqB;AAC1B,MAAA,oBAAA,CAAqB,EAAE,KAAA,EAAO,GAAA,EAAK,CAAA;AAAA,IACrC,CAAA;AAAA,IACA,CAAC,mBAAmB;AAAA,GACtB;AAEA,EAAA,MAAM,oBAAA,GAAuBA,kBAAY,MAAM;AAC7C,IAAA,IAAI,CAAC,mBAAA,IAAuB,CAAC,iBAAA,IAAqB,CAAC,iBAAA,EAAmB;AACpE,MAAA,sBAAA,CAAuB,IAAI,CAAA;AAC3B,MAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,YAAY,IAAI,IAAA,CAAK,MAAM,mBAAA,CAAoB,KAAA,EAAO,oBAAoB,GAAG,CAAA;AACnF,IAAA,MAAM,UAAU,IAAI,IAAA,CAAK,MAAM,iBAAA,CAAkB,KAAA,EAAO,kBAAkB,GAAG,CAAA;AAG7E,IAAA,MAAM,CAAC,UAAA,EAAY,QAAQ,CAAA,GAAI,SAAA,IAAa,OAAA,GACxC,CAAC,SAAA,EAAW,OAAO,CAAA,GACnB,CAAC,OAAA,EAAS,SAAS,CAAA;AAEvB,IAAA,iBAAA,CAAkB,YAAY,QAAQ,CAAA;AACtC,IAAA,sBAAA,CAAuB,IAAI,CAAA;AAC3B,IAAA,oBAAA,CAAqB,IAAI,CAAA;AAAA,EAC3B,GAAG,CAAC,mBAAA,EAAqB,iBAAA,EAAmB,IAAA,EAAM,iBAAiB,CAAC,CAAA;AAEpE,EAAA,MAAM,eAAA,GAAkBA,iBAAA;AAAA,IACtB,CACE,CAAA,EACA,KAAA,EACA,UAAA,EACA,YAAA,KACG;AACH,MAAA,CAAA,CAAE,aAAa,aAAA,GAAgB,MAAA;AAC/B,MAAA,CAAA,CAAE,YAAA,CAAa,OAAA,CAAQ,YAAA,EAAc,KAAA,CAAM,EAAE,CAAA;AAE7C,MAAA,MAAM,IAAA,GAAO,CAAA,CAAE,aAAA,CAAc,qBAAA,EAAsB;AACnD,MAAA,MAAM,MAAA,GAAS,CAAA,CAAE,OAAA,GAAU,IAAA,CAAK,GAAA;AAChC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,SAAS,CAAA;AAC/C,MAAA,MAAM,UAAU,YAAA,GAAe,SAAA;AAE/B,MAAA,kBAAA,CAAmB,MAAM,CAAA;AACzB,MAAA,iBAAA,CAAkB,KAAK,MAAM,CAAA;AAC7B,MAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,IAAA,EAAM,YAAY,OAAO,CAAA;AACnD,MAAA,MAAM,YAAY,KAAA,CAAM,IAAA;AACxB,MAAA,MAAM,aAAa,IAAA,CAAK,KAAA;AAAA,QAAA,CACrB,QAAA,CAAS,SAAQ,GAAI,SAAA,CAAU,SAAQ,KAAM,GAAA,GAAO,KAAK,EAAA,GAAK,EAAA;AAAA,OACjE;AACA,MAAA,aAAA,CAAc,UAAU,CAAA;AAExB,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,MACxB,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,MAAM,SAAS;AAAA,GAClB;AAEA,EAAA,MAAM,cAAA,GAAiBA,iBAAA;AAAA,IACrB,CAAC,CAAA,EAAoB,KAAA,EAAe,GAAA,KAAgB;AAClD,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,CAAA,CAAE,aAAa,UAAA,GAAa,MAAA;AAE5B,MAAA,IAAI,aAAA,IAAiB,kBAAkB,CAAA,EAAG;AACxC,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,eAAA,GAAkB,SAAS,CAAA;AACxD,QAAA,IAAI,aAAa,GAAA,GAAM,SAAA;AACvB,QAAA,IAAI,YAAA,GAAe,KAAA;AAEnB,QAAA,OAAO,UAAA,GAAa,CAAA,IAAK,YAAA,GAAe,CAAA,EAAG;AACzC,UAAA,YAAA,EAAA;AACA,UAAA,UAAA,IAAc,cAAA,CAAe,MAAM,YAAY,CAAA;AAAA,QACjD;AACA,QAAA,IAAI,WAAA,GAAc,cAAA,CAAe,IAAA,EAAM,YAAY,CAAA;AACnD,QAAA,OAAO,UAAA,GAAa,WAAA,IAAe,YAAA,GAAe,EAAA,EAAI;AACpD,UAAA,UAAA,IAAc,WAAA;AACd,UAAA,YAAA,EAAA;AACA,UAAA,WAAA,GAAc,cAAA,CAAe,MAAM,YAAY,CAAA;AAAA,QACjD;AACA,QAAA,UAAA,GAAa,IAAA,CAAK,GAAA;AAAA,UAChB,CAAA;AAAA,UACA,KAAK,GAAA,CAAI,UAAA,EAAY,cAAA,CAAe,IAAA,EAAM,YAAY,CAAC;AAAA,SACzD;AAEA,QAAA,eAAA,CAAgB,EAAE,KAAA,EAAO,YAAA,EAAc,GAAA,EAAK,YAAY,CAAA;AAAA,MAC1D,CAAA,MAAO;AACL,QAAA,eAAA,CAAgB,EAAE,KAAA,EAAO,GAAA,EAAK,CAAA;AAAA,MAChC;AACA,MAAA,eAAA,CAAgB,EAAE,CAAA,EAAG,CAAA,CAAE,SAAS,CAAA,EAAG,CAAA,CAAE,SAAS,CAAA;AAAA,IAChD,CAAA;AAAA,IACA,CAAC,aAAA,EAAe,eAAA,EAAiB,IAAA,EAAM,SAAS;AAAA,GAClD;AAEA,EAAA,MAAM,eAAA,GAAkBA,kBAAY,MAAM;AACxC,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACtB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAaA,iBAAA;AAAA,IACjB,CAAC,CAAA,KAAuB;AACtB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,IAAI,aAAA,IAAiB,eAAe,YAAA,EAAc;AAChD,QAAA,MAAM,eAAe,IAAI,IAAA;AAAA,UACvB,IAAA;AAAA,UACA,YAAA,CAAa,KAAA;AAAA,UACb,YAAA,CAAa;AAAA,SACf;AAEA,QAAA,IAAI,UAAA;AACJ,QAAA,IAAI,cAAc,OAAA,EAAS;AACzB,UAAA,MAAM,WACJ,aAAA,CAAc,OAAA,CAAQ,SAAQ,GAAI,aAAA,CAAc,KAAK,OAAA,EAAQ;AAC/D,UAAA,UAAA,GAAa,IAAI,IAAA,CAAK,YAAA,CAAa,OAAA,KAAY,QAAQ,CAAA;AAAA,QACzD;AAEA,QAAA,WAAA,CAAY,aAAA,EAAe,cAAc,UAAU,CAAA;AAAA,MACrD;AACA,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA,aAAA,CAAc,CAAC,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAC,aAAA,EAAe,YAAA,EAAc,IAAA,EAAM,WAAW;AAAA,GACjD;AAEA,EAAA,MAAM,aAAA,GAAgBA,kBAAY,MAAM;AACtC,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,kBAAA,CAAmB,CAAC,CAAA;AACpB,IAAA,iBAAA,CAAkB,CAAC,CAAA;AAAA,EACrB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,iBAAA,GAAoBA,kBAAY,MAAM;AAC1C,IAAA,IAAI,eAAe,WAAA,EAAa;AAC9B,MAAA,WAAA;AAAA,QACE,WAAA,CAAY,KAAA;AAAA,QACZ,WAAA,CAAY,YAAA;AAAA,QACZ,WAAA,CAAY;AAAA,OACd;AAAA,IACF;AACA,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,EACrB,CAAA,EAAG,CAAC,WAAA,EAAa,WAAW,CAAC,CAAA;AAE7B,EAAA,MAAM,gBAAA,GAAmBA,kBAAY,MAAM;AACzC,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,EACrB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,iBAAA,GAAoBA,iBAAA;AAAA,IACxB,CAAC,CAAA,EAAoB,KAAA,EAAsB,IAAA,KAA0B;AACnE,MAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,MAAA,CAAA,CAAE,aAAa,aAAA,GAAgB,MAAA;AAC/B,MAAA,CAAA,CAAE,aAAa,OAAA,CAAQ,YAAA,EAAc,CAAA,OAAA,EAAU,KAAA,CAAM,EAAE,CAAA,CAAE,CAAA;AACzD,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,gBAAA,CAAiB,EAAE,KAAA,EAAO,IAAA,EAAM,CAAA;AAAA,MAClC,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,gBAAA,GAAmBA,iBAAA;AAAA,IACvB,CAAC,OAAe,GAAA,KAAgB;AAC9B,MAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,WAAA,EAAa;AAEpC,MAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,aAAA;AACxB,MAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,GAAG,CAAA;AAE1C,MAAA,IAAI,eAAe,KAAA,CAAM,IAAA;AACzB,MAAA,IAAI,UAAA,GAAa,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,IAAA;AAExC,MAAA,IAAI,SAAS,OAAA,EAAS;AACpB,QAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,UAAA,YAAA,GAAe,QAAA;AAAA,QACjB;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAI,YAAY,YAAA,EAAc;AAC5B,UAAA,UAAA,GAAa,QAAA;AAAA,QACf;AAAA,MACF;AAEA,MAAA,MAAM,eACJ,YAAA,CAAa,OAAA,OAAc,UAAA,CAAW,OAAA,KAClC,MAAA,GACA,UAAA;AACN,MAAA,WAAA,CAAY,KAAA,EAAO,cAAc,YAAY,CAAA;AAE7C,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,IACtB,CAAA;AAAA,IACA,CAAC,aAAA,EAAe,IAAA,EAAM,WAAW;AAAA,GACnC;AAEA,EAAA,MAAM,eAAA,GAAkBA,kBAAY,MAAM;AACxC,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACtB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAD,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,sBAAsB,MAAM;AAChC,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,kBAAA,CAAmB,CAAC,CAAA;AACpB,MAAA,iBAAA,CAAkB,CAAC,CAAA;AACnB,MAAA,aAAA,CAAc,CAAC,CAAA;AAEf,MAAA,IAAI,mBAAA,EAAqB;AACvB,QAAA,oBAAA,EAAqB;AAAA,MACvB;AAAA,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,mBAAmB,CAAA;AACtD,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,mBAAmB,CAAA;AACtD,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,WAAW,mBAAmB,CAAA;AACzD,MAAA,MAAA,CAAO,mBAAA,CAAoB,WAAW,mBAAmB,CAAA;AAAA,IAC3D,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,mBAAA,EAAqB,oBAAoB,CAAC,CAAA;AAE9C,EAAA,MAAM,cAAA,GAAiB,CAAC,KAAA,EAAe,GAAA,KAAgB;AACrD,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,GAAG,CAAA;AACtC,IAAA,OAAO,CAAC,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAG,CAAA,CAAE,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,EAC1D,CAAA;AAEA,EAAA,uCACG,KAAA,EAAA,EAAI,GAAA,EAAK,YAAA,EAAc,KAAA,EAAO,OAAO,SAAA,EAEnC,QAAA,EAAA;AAAA,IAAA,aAAA,IACC,YAAA,IACA,iBACC,MAAM;AACL,MAAA,MAAM,OAAA,GAAU,aAAa,CAAA,GAAI,eAAA;AACjC,MAAA,MAAM,aAAa,OAAA,GAAU,cAAA;AAC7B,MAAA,MAAM,YAAY,OAAA,GAAU,EAAA;AAC5B,MAAA,uBACEE,cAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,YAAA,CAAA,EADL;AAAA,YAEL,MAAM,YAAA,CAAa,CAAA;AAAA,YACnB,GAAA,EAAK,SAAA,GAAY,UAAA,GAAa,CAAA,GAAI,OAAA,GAAU,CAAA;AAAA,YAC5C,SAAA,EAAW,YACP,kBAAA,GACA;AAAA,WACN,CAAA;AAAA,UAEA,QAAA,kBAAAC,eAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,mBAAA,EACjB,QAAA,EAAA;AAAA,4BAAAA,eAAA,CAAC,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,cAAA,YAAA,CAAa,KAAA,GAAQ,CAAA;AAAA,cAAE,QAAA;AAAA,cAAE,YAAA,CAAa,GAAA;AAAA,cAAI,SAAA;AAAA,cAC1C,cAAA,CAAe,YAAA,CAAa,KAAA,EAAO,YAAA,CAAa,GAAG,CAAA;AAAA,cAAE;AAAA,aAAA,EACxD,CAAA;AAAA,2CACC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,mBAAA,EAChB,wBAAc,KAAA,EACjB;AAAA,WAAA,EACF;AAAA;AAAA,OACF;AAAA,IAEJ,CAAA,GAAG;AAAA,IAGJ,aAAA,IAAiB,gBAAgB,YAAA,oBAChCD,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,YAAA,CAAA,EADL;AAAA,UAEL,MAAM,YAAA,CAAa,CAAA;AAAA,UACnB,GAAA,EAAK,aAAa,CAAA,GAAI;AAAA,SACxB,CAAA;AAAA,QAEA,QAAA,kBAAAC,eAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,qBAAA,EACjB,QAAA,EAAA;AAAA,0BAAAA,eAAA,CAAC,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,YAAA,aAAA,CAAc,IAAA,KAAS,UAAU,0BAAA,GAAS,0BAAA;AAAA,YAC1C,aAAa,KAAA,GAAQ,CAAA;AAAA,YAAE,QAAA;AAAA,YAAE,YAAA,CAAa,GAAA;AAAA,YAAI,SAAA;AAAA,YAC1C,cAAA,CAAe,YAAA,CAAa,KAAA,EAAO,YAAA,CAAa,GAAG,CAAA;AAAA,YAAE;AAAA,WAAA,EACxD,CAAA;AAAA,yCACC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAO,mBAAA,EAChB,QAAA,EAAA,aAAA,CAAc,MAAM,KAAA,EACvB;AAAA,SAAA,EACF;AAAA;AAAA,KACF;AAAA,oBAGFA,eAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,aAAA,EAEjB,QAAA,EAAA;AAAA,sBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,SAAA,EACjB,QAAA,EAAA;AAAA,wBAAAD,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,aAAA,EAAe,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,QAClC,KAAK,GAAA,CAAI,CAAC,GAAA,qBACTA,cAAA,CAAC,SAAc,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,MAAA,CAAO,OAAA,CAAA,EAAZ,EAAqB,MAAA,EAAQ,SAAA,EAAU,CAAA,EAC1D,QAAA,EAAA,GAAA,EAAA,EADO,GAEV,CACD;AAAA,OAAA,EACH,CAAA;AAAA,MAGC,MAAA,CAAO,GAAA,CAAI,CAAC,SAAA,EAAW,UAAA,KAAe;AACrC,QAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,EAAM,UAAU,CAAA;AACnD,QAAA,MAAM,KAAA,GAAQ,WAAW,UAAU,CAAA;AACnC,QAAA,MAAM,OAAA,GAAU,SAAS,UAAU,CAAA;AACnC,QAAA,MAAM,SAAA,GAAY,SAAS,UAAU,CAAA;AAErC,QAAA,uBACEC,eAAA,CAAC,KAAA,EAAA,EAAqB,KAAA,EAAO,MAAA,CAAO,WAAA,EAElC,QAAA,EAAA;AAAA,0BAAAD,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,WAAA,EAAc,QAAA,EAAA,SAAA,EAAU,CAAA;AAAA,UAG1C,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACjB,YAAA,MAAM,aAAa,GAAA,IAAO,WAAA;AAC1B,YAAA,MAAM,MAAA,GAAS,UAAA,IAAc,QAAA,CAAS,IAAA,EAAM,YAAY,GAAG,CAAA;AAC3D,YAAA,MAAM,QAAA,GACJ,UAAA,IAAc,UAAA,CAAW,IAAA,EAAM,YAAY,GAAG,CAAA;AAChD,YAAA,MAAM,SAAA,GAAA,CACJ,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,KAAA,MAAU,UAAA,IAAA,CAAc,2CAAa,GAAA,MAAQ,GAAA;AAC5D,YAAA,MAAM,SAAA,GAAY,UAAA,IAAc,kBAAA,CAAmB,UAAA,EAAY,GAAG,CAAA;AAElE,YAAA,uBACEA,cAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBAEC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,YAAA,CAAA,EADL;AAAA,kBAEL,MAAA,EAAQ,SAAA;AAAA,kBACR,eAAA,EAAiB,YACb,yBAAA,GACA,sBAAA;AAAA,oBACE,KAAA;AAAA,oBACA,UAAA;AAAA,oBACA,MAAA;AAAA,oBACA,QAAA;AAAA,oBACA,SAAA,IAAa,cAAc,CAAC;AAAA,mBAC9B;AAAA,kBACJ,MAAA,EAAQ,aAAa,SAAA,GAAY,SAAA;AAAA,kBACjC,UAAA,EAAY;AAAA,iBACd,CAAA;AAAA,gBACA,SAAS,MACP,UAAA,IAAc,CAAC,gBAAA,IAAoB,eAAA,CAAgB,YAAY,GAAG,CAAA;AAAA,gBAEpE,aAAA,EAAe,MACb,UAAA,IAAc,qBAAA,CAAsB,YAAY,GAAG,CAAA;AAAA,gBAErD,WAAA,EAAa,MACX,UAAA,IAAc,sBAAA,CAAuB,YAAY,GAAG,CAAA;AAAA,gBAEtD,cAAc,MAAM;AAClB,kBAAA,IAAI,UAAA,EAAY;AACd,oBAAA,cAAA,CAAe,EAAE,KAAA,EAAO,UAAA,EAAY,GAAA,EAAK,CAAA;AACzC,oBAAA,IAAI,gBAAA,EAAkB;AACpB,sBAAA,qBAAA,CAAsB,YAAY,GAAG,CAAA;AAAA,oBACvC;AAAA,kBACF;AAAA,gBACF,CAAA;AAAA,gBACA,YAAA,EAAc,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,gBACvC,YAAY,CAAC,CAAA,KACX,cAAc,cAAA,CAAe,CAAA,EAAG,YAAY,GAAG,CAAA;AAAA,gBAEjD,WAAA,EAAa,eAAA;AAAA,gBACb,MAAA,EAAQ,CAAC,CAAA,KAAM;AACb,kBAAA,IAAI,CAAC,UAAA,EAAY;AACjB,kBAAA,IAAI,aAAA,EAAe;AACjB,oBAAA,gBAAA,CAAiB,YAAY,GAAG,CAAA;AAAA,kBAClC,CAAA,MAAO;AACL,oBAAA,UAAA,CAAW,CAAC,CAAA;AAAA,kBACd;AAAA,gBACF;AAAA,eAAA;AAAA,cA7CK;AAAA,aA8CP;AAAA,UAEJ,CAAC,CAAA;AAAA,UAAA,CAGC,iBAAiB,aAAA,KAAA,CACjB,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,WAAU,UAAA,IACxB,YAAA,CAAa,OAAO,WAAA,oBAClBA,cAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,aAAA,CAAA,EADL;AAAA,gBAEL,GAAA,EAAK,EAAA,GAAA,CAAM,YAAA,CAAa,GAAA,GAAM,CAAA,IAAK,SAAA;AAAA,gBACnC,MAAA,EAAQ;AAAA,eACV,CAAA;AAAA,cAEA,QAAA,kBAAAA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,kBAAA,EAAoB;AAAA;AAAA,WACzC;AAAA,0BAIJC,eAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,iBAAA,EAChB,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACnB,cAAA,MAAM,YAAY,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA,IAAK,CAAA;AAEhD,cAAA,MAAM,YAAY,GAAA,GAAM,SAAA;AACxB,cAAA,MAAM,OAAO,SAAA,GAAY,SAAA;AAEzB,cAAA,MAAM,cAAA,GAAA,CAAiB,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,EAAA,MAAO,IAAA,CAAK,KAAA,CAAM,EAAA;AACxD,cAAA,MAAM,cAAA,GAAA,CACJ,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,KAAA,CAAM,EAAA,MAAO,KAAK,KAAA,CAAM,EAAA;AAEzC,cAAA,IAAI,WAAA,GAAc,IAAA;AAClB,cAAA,IAAI,kBAAkB,kBAAA,EAAoB;AACxC,gBAAA,MAAM,WAAA,GAAc,kBAAA,CAAmB,GAAA,CAAI,UAAU,CAAA;AACrD,gBAAA,IAAI,WAAA,EAAa;AACf,kBAAA,WAAA,GAAc,WAAA;AAAA,gBAChB,CAAA,MAAO;AACL,kBAAA,OAAO,IAAA;AAAA,gBACT;AAAA,cACF;AAEA,cAAA,MAAM,kBAAkB,WAAA,CAAY,QAAA;AACpC,cAAA,MAAM,gBAAgB,WAAA,CAAY,MAAA;AAClC,cAAA,MAAM,GAAA,GAAA,CAAO,eAAA,GAAkB,CAAA,IAAK,SAAA,GAAY,CAAA;AAChD,cAAA,MAAM,MAAA,GAAA,CACH,aAAA,GAAgB,eAAA,GAAkB,CAAA,IAAK,SAAA,GAAY,CAAA;AACtD,cAAA,MAAM,QAAA,GAAW,gBAAgB,eAAA,GAAkB,CAAA;AAEnD,cAAA,MAAM,aAAA,GAAgB,CAAC,aAAA,IAAiB,CAAC,aAAA;AACzC,cAAA,MAAM,SAAA,GAAY,eAAA,KAAoB,IAAA,CAAK,KAAA,CAAM,EAAA;AAEjD,cAAA,uBACEA,eAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,QAAA,CAAA,EADL;AAAA,oBAEL,GAAA;AAAA,oBACA,IAAA,EAAM,GAAG,IAAI,CAAA,CAAA,CAAA;AAAA,oBACb,KAAA,EAAO,QAAQ,SAAS,CAAA,QAAA,CAAA;AAAA,oBACxB,MAAA;AAAA,oBACA,eAAA,EAAiB,aAAA,CAAc,IAAA,CAAK,KAAK,CAAA;AAAA,oBACzC,YAAA,EAAc,GAAG,IAAA,CAAK,OAAA,GAAU,IAAI,CAAC,CAAA,GAAA,EAAM,KAAK,OAAA,GAAU,CAAA,GAAI,CAAC,CAAA,GAAA,EAAM,IAAA,CAAK,QAAQ,CAAA,GAAI,CAAC,MAAM,IAAA,CAAK,KAAA,GAAQ,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,oBAC/G,OAAA,EAAS,iBAAiB,GAAA,GAAM,CAAA;AAAA,oBAChC,MAAA,EAAQ,iBACJ,qCAAA,GACA,MAAA;AAAA,oBACJ,MAAA,EAAQ,cAAA,GAAiB,EAAA,GAAK,SAAA,GAAY,EAAA,GAAK,EAAA;AAAA,oBAC/C,MAAA,EAAQ,YAAY,iBAAA,GAAoB,MAAA;AAAA,oBACxC,aAAA,EAAe,gBAAgB,MAAA,GAAS;AAAA,mBAC1C,CAAA;AAAA,kBACA,SAAA,EAAS,IAAA;AAAA,kBACT,WAAA,EAAa,CAAC,CAAA,KACZ,eAAA;AAAA,oBACE,CAAA;AAAA,oBACA,IAAA,CAAK,KAAA;AAAA,oBACL,UAAA;AAAA,oBACA,IAAA,CAAK;AAAA,mBACP;AAAA,kBAEF,SAAA,EAAW,aAAA;AAAA,kBACX,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,oBAAA,kBAAA,CAAmB,IAAA,CAAK,MAAM,EAAE,CAAA;AAChC,oBAAA,MAAM,IAAA,GAAO,CAAA,CAAE,aAAA,CAAc,qBAAA,EAAsB;AACnD,oBAAA,eAAA,CAAgB;AAAA,sBACd,OAAO,IAAA,CAAK,KAAA;AAAA,sBACZ,CAAA,EAAG,KAAK,KAAA,GAAQ,CAAA;AAAA,sBAChB,GAAG,IAAA,CAAK;AAAA,qBACT,CAAA;AAAA,kBACH,CAAA;AAAA,kBACA,cAAc,MAAM;AAClB,oBAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,oBAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,kBACtB,CAAA;AAAA,kBACA,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,oBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,oBAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAe,IAAA,CAAK,KAAA,CAAA;AAAA,kBACtB,CAAA;AAAA,kBAGC,QAAA,EAAA;AAAA,oBAAA,CAAC,IAAA,CAAK,OAAA,oBACLD,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,kCAAK,MAAA,CAAO,SAAA,CAAA,EAAc,MAAA,CAAO,YAAA,CAAA,EAAgB,QAAA,EAAA,QAAA,EAE7D,CAAA;AAAA,oBAID,IAAA,CAAK,WAAW,QAAA,IAAY,CAAA,mCAC1B,KAAA,EAAA,EAAI,KAAA,EAAO,OAAO,aAAA,EACjB,QAAA,kBAAAA,cAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,QAAA,CAAA,EADL;AAAA,0BAEL,SAAA,EAAW,MAAA;AAAA,0BACX,OAAA,EAAS;AAAA,yBACX,CAAA;AAAA,wBAEC,eAAK,KAAA,CAAM;AAAA;AAAA,qBACd,EACF,CAAA;AAAA,oBAID,KAAK,OAAA,IAAW,QAAA,KAAa,CAAA,oBAC5BA,cAAA,CAAC,SAAI,KAAA,EAAO,MAAA,CAAO,eAAA,EACjB,QAAA,kBAAAA,cAAA,CAAC,UAAK,KAAA,EAAO,MAAA,CAAO,UAAW,QAAA,EAAA,IAAA,CAAK,KAAA,CAAM,OAAM,CAAA,EAClD,CAAA;AAAA,oBAID,CAAC,IAAA,CAAK,KAAA,oBACLA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,cAAA,CAAA,cAAA,CAAA,EAAA,EAAK,MAAA,CAAO,SAAA,CAAA,EAAc,MAAA,CAAO,eAAA,CAAA,EAAmB,QAAA,EAAA,QAAA,EAEhE,CAAA;AAAA,oBAID,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,aAAA,oBACrBC,eAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAK,OAAA,oBACJF,cAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BACC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,YAAA,CAAA,EACP,OAAO,eAAA,CAAA,EAFL;AAAA,4BAGL,OAAA,EAAA,CACE,2DAAqB,OAAA,MAAY,IAAA,CAAK,MAAM,EAAA,IAAA,CAC5C,mBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,mBAAA,CAAqB,IAAA,MAAS,OAAA,GAC1B,CAAA,GACA;AAAA,2BACR,CAAA;AAAA,0BACA,SAAA,EAAS,IAAA;AAAA,0BACT,WAAA,EAAa,CAAC,CAAA,KAAM;AAClB,4BAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,4BAAA,iBAAA,CAAkB,CAAA,EAAG,IAAA,CAAK,KAAA,EAAO,OAAO,CAAA;AAAA,0BAC1C,CAAA;AAAA,0BACA,SAAA,EAAW,eAAA;AAAA,0BACX,YAAA,EAAc,MACZ,sBAAA,CAAuB;AAAA,4BACrB,OAAA,EAAS,KAAK,KAAA,CAAM,EAAA;AAAA,4BACpB,IAAA,EAAM;AAAA,2BACP,CAAA;AAAA,0BAEH,YAAA,EAAc,MAAM,sBAAA,CAAuB,IAAI;AAAA;AAAA,uBACjD;AAAA,sBAED,KAAK,KAAA,oBACJA,cAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BACC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,YAAA,CAAA,EACP,OAAO,kBAAA,CAAA,EAFL;AAAA,4BAGL,OAAA,EAAA,CACE,2DAAqB,OAAA,MAAY,IAAA,CAAK,MAAM,EAAA,IAAA,CAC5C,mBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,mBAAA,CAAqB,IAAA,MAAS,KAAA,GAC1B,CAAA,GACA;AAAA,2BACR,CAAA;AAAA,0BACA,SAAA,EAAS,IAAA;AAAA,0BACT,WAAA,EAAa,CAAC,CAAA,KAAM;AAClB,4BAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,4BAAA,iBAAA,CAAkB,CAAA,EAAG,IAAA,CAAK,KAAA,EAAO,KAAK,CAAA;AAAA,0BACxC,CAAA;AAAA,0BACA,SAAA,EAAW,eAAA;AAAA,0BACX,YAAA,EAAc,MACZ,sBAAA,CAAuB;AAAA,4BACrB,OAAA,EAAS,KAAK,KAAA,CAAM,EAAA;AAAA,4BACpB,IAAA,EAAM;AAAA,2BACP,CAAA;AAAA,0BAEH,YAAA,EAAc,MAAM,sBAAA,CAAuB,IAAI;AAAA;AAAA;AACjD,qBAAA,EAEJ;AAAA;AAAA,iBAAA;AAAA,gBAxIG,KAAK,KAAA,CAAM;AAAA,eA0IlB;AAAA,YAEJ,CAAC,CAAA;AAAA,YAGA,iBACC,kBAAA,IACA,kBAAA,CAAmB,IAAI,UAAU,CAAA,IACjC,CAAC,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,KAAA,CAAM,EAAA,KAAO,cAAc,KAAA,CAAM,EAAE,MACvD,MAAM;AACL,cAAA,MAAM,WAAA,GAAc,kBAAA,CAAmB,GAAA,CAAI,UAAU,CAAA;AAErD,cAAA,IAAI,iBAAA,GAAoB,CAAA;AACxB,cAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,CAAA,EAAA,EAAK;AAC3B,gBAAA,MAAM,OAAO,QAAA,CAAS,CAAC,EAAE,GAAA,CAAI,aAAA,CAAc,MAAM,EAAE,CAAA;AACnD,gBAAA,IAAI,SAAS,MAAA,EAAW;AACtB,kBAAA,iBAAA,GAAoB,IAAA;AACpB,kBAAA;AAAA,gBACF;AAAA,cACF;AAEA,cAAA,MAAM,gBAAA,GAAmB,SAAS,UAAU,CAAA;AAC5C,cAAA,MAAM,YAAY,GAAA,GAAM,gBAAA;AACxB,cAAA,MAAM,OAAO,IAAA,CAAK,GAAA,CAAI,iBAAA,EAAmB,gBAAA,GAAmB,CAAC,CAAA,GAAI,SAAA;AACjE,cAAA,MAAM,GAAA,GAAA,CAAO,WAAA,CAAY,QAAA,GAAW,CAAA,IAAK,SAAA,GAAY,CAAA;AACrD,cAAA,MAAM,UACH,WAAA,CAAY,MAAA,GAAS,WAAA,CAAY,QAAA,GAAW,KAC3C,SAAA,GACF,CAAA;AAEF,cAAA,uBACEC,eAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,QAAA,CAAA,EADL;AAAA,oBAEL,GAAA;AAAA,oBACA,IAAA,EAAM,GAAG,IAAI,CAAA,CAAA,CAAA;AAAA,oBACb,KAAA,EAAO,QAAQ,SAAS,CAAA,QAAA,CAAA;AAAA,oBACxB,MAAA;AAAA,oBACA,eAAA,EAAiB,aAAA,CAAc,aAAA,CAAc,KAAK,CAAA;AAAA,oBAClD,YAAA,EAAc,GAAG,WAAA,CAAY,OAAA,GAAU,IAAI,CAAC,CAAA,GAAA,EAAM,YAAY,OAAA,GAAU,CAAA,GAAI,CAAC,CAAA,GAAA,EAAM,WAAA,CAAY,QAAQ,CAAA,GAAI,CAAC,MAAM,WAAA,CAAY,KAAA,GAAQ,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,oBAC3I,MAAA,EAAQ,qCAAA;AAAA,oBACR,OAAA,EAAS,GAAA;AAAA,oBACT,MAAA,EAAQ;AAAA,mBACV,CAAA;AAAA,kBAEC,QAAA,EAAA;AAAA,oBAAA,CAAC,WAAA,CAAY,OAAA,oBACZD,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,kCAAK,MAAA,CAAO,SAAA,CAAA,EAAc,MAAA,CAAO,YAAA,CAAA,EAAgB,QAAA,EAAA,QAAA,EAE7D,CAAA;AAAA,oBAED,CAAC,WAAA,CAAY,KAAA,oBACZA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,cAAA,CAAA,cAAA,CAAA,EAAA,EAAK,MAAA,CAAO,SAAA,CAAA,EAAc,MAAA,CAAO,eAAA,CAAA,EAAmB,QAAA,EAAA,QAAA,EAEhE;AAAA;AAAA,iBAAA;AAAA,gBAtBG,CAAA,QAAA,EAAW,aAAA,CAAc,KAAA,CAAM,EAAE,CAAA;AAAA,eAwBxC;AAAA,YAEJ,CAAA;AAAG,WAAA,EACP;AAAA,SAAA,EAAA,EAxTQ,UAyTV,CAAA;AAAA,MAEJ,CAAC;AAAA,KAAA,EACH,CAAA;AAAA,IAGC,YAAA,IAAgB,CAAC,aAAA,IAAiB,CAAC,aAAA,oBAClCA,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,OAAA,CAAA,EADL;AAAA,UAEL,MAAM,YAAA,CAAa,CAAA;AAAA,UACnB,KAAK,YAAA,CAAa;AAAA,SACpB,CAAA;AAAA,QAEA,QAAA,kBAAAC,eAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,cAAA,EACjB,QAAA,EAAA;AAAA,0BAAAD,cAAA,CAAC,SAAI,KAAA,EAAO,MAAA,CAAO,YAAA,EAAe,QAAA,EAAA,YAAA,CAAa,MAAM,KAAA,EAAM,CAAA;AAAA,0BAC3DC,eAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,WAAA,EAChB,QAAA,EAAA;AAAA,YAAA,YAAA,CAAa,KAAA,CAAM,IAAA,CAAK,kBAAA,CAAmB,OAAA,EAAS;AAAA,cACnD,KAAA,EAAO,OAAA;AAAA,cACP,GAAA,EAAK,SAAA;AAAA,cACL,OAAA,EAAS;AAAA,aACV,CAAA;AAAA,YACA,YAAA,CAAa,KAAA,CAAM,OAAA,oBAClBA,eAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,cAAA,UAAA;AAAA,cACA,YAAA,CAAa,KAAA,CAAM,OAAA,CAAQ,kBAAA,CAAmB,OAAA,EAAS;AAAA,gBACtD,KAAA,EAAO,OAAA;AAAA,gBACP,GAAA,EAAK,SAAA;AAAA,gBACL,OAAA,EAAS;AAAA,eACV;AAAA,aAAA,EACH;AAAA,WAAA,EAEJ;AAAA,SAAA,EACF;AAAA;AAAA,KACF;AAAA,IAID,WAAA,oBACCF,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,eACjB,QAAA,kBAAAC,eAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,aAAA,EACjB,QAAA,EAAA;AAAA,sBAAAD,cAAA,CAAC,QAAG,KAAA,EAAO,MAAA,CAAO,aACf,QAAA,EAAA,WAAA,CAAY,QAAA,GACT,iEACA,8DAAA,EACN,CAAA;AAAA,sBACAC,eAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,UAAA,EACjB,QAAA,EAAA;AAAA,wBAAAD,cAAA,CAAC,SAAI,KAAA,EAAO,MAAA,CAAO,gBAAA,EAAmB,QAAA,EAAA,WAAA,CAAY,MAAM,KAAA,EAAM,CAAA;AAAA,wCAC7D,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAA,EAAW,GAAE,EACzB,QAAA,EAAA;AAAA,0BAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,eAAA,EAAiB,QAAA,EAAA,0BAAA,EAAI,CAAA;AAAA,UACxC,WAAA,CAAY,KAAA,CAAM,IAAA,CAAK,kBAAA,CAAmB,OAAA,EAAS;AAAA,YAClD,KAAA,EAAO,MAAA;AAAA,YACP,GAAA,EAAK,SAAA;AAAA,YACL,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,UACA,WAAA,CAAY,KAAA,CAAM,OAAA,oBACjBC,eAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,YAAA,UAAA;AAAA,YACA,WAAA,CAAY,KAAA,CAAM,OAAA,CAAQ,kBAAA,CAAmB,OAAA,EAAS;AAAA,cACrD,KAAA,EAAO,MAAA;AAAA,cACP,GAAA,EAAK,SAAA;AAAA,cACL,OAAA,EAAS;AAAA,aACV;AAAA,WAAA,EACH;AAAA,SAAA,EAEJ,CAAA;AAAA,wCACC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAA,EAAW,GAAE,EACzB,QAAA,EAAA;AAAA,0BAAAF,cAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,eAAA,EAAiB,QAAA,EAAA,0BAAA,EAAI,CAAA;AAAA,UACxC,WAAA,CAAY,YAAA,CAAa,kBAAA,CAAmB,OAAA,EAAS;AAAA,YACpD,KAAA,EAAO,MAAA;AAAA,YACP,GAAA,EAAK,SAAA;AAAA,YACL,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,UACA,WAAA,CAAY,8BACXC,eAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,YAAA,UAAA;AAAA,YACA,WAAA,CAAY,UAAA,CAAW,kBAAA,CAAmB,OAAA,EAAS;AAAA,cAClD,KAAA,EAAO,MAAA;AAAA,cACP,GAAA,EAAK,SAAA;AAAA,cACL,OAAA,EAAS;AAAA,aACV;AAAA,WAAA,EACH;AAAA,SAAA,EAEJ;AAAA,OAAA,EACF,CAAA;AAAA,sBACAD,eAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,aAAA,EACjB,QAAA,EAAA;AAAA,wBAAAD,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,gBAAA;AAAA,YACT,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,kBAAA,CAAA,EADL;AAAA,cAEL,eAAA,EAAiB,mBAAA,GACb,KAAA,CAAM,SAAA,GACN;AAAA,aACN,CAAA;AAAA,YACA,YAAA,EAAc,MAAM,sBAAA,CAAuB,IAAI,CAAA;AAAA,YAC/C,YAAA,EAAc,MAAM,sBAAA,CAAuB,KAAK,CAAA;AAAA,YACjD,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,wBACAA,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,iBAAA;AAAA,YACT,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,mBAAA,CAAA,EADL;AAAA,cAEL,eAAA,EAAiB,oBAAA,GACb,KAAA,CAAM,kBAAA,GACN,KAAA,CAAM;AAAA,aACZ,CAAA;AAAA,YACA,YAAA,EAAc,MAAM,uBAAA,CAAwB,IAAI,CAAA;AAAA,YAChD,YAAA,EAAc,MAAM,uBAAA,CAAwB,KAAK,CAAA;AAAA,YAEhD,QAAA,EAAA,WAAA,CAAY,WAAW,0BAAA,GAAS;AAAA;AAAA;AACnC,OAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ","file":"index.js","sourcesContent":["import { CSSProperties } from \"react\";\nimport type { ThemeColors } from \"./types\";\n\n// デフォルトテーマカラー\nexport const defaultTheme: Required<ThemeColors> = {\n // 背景色\n bgWhite: \"#ffffff\",\n bgGray50: \"#f9fafb\",\n bgGray100: \"#f3f4f6\",\n bgSunday: \"#fef2f2\",\n bgSaturday: \"#eff6ff\",\n bgDropHighlight: \"rgba(191, 219, 254, 0.5)\",\n\n // ボーダー\n borderDefault: \"#d1d5db\",\n borderDropHighlight: \"#3b82f6\",\n\n // テキスト\n textPrimary: \"#111827\",\n textSecondary: \"#4b5563\",\n textMuted: \"#6b7280\",\n\n // UI要素\n tooltipBg: \"#111827\",\n tooltipText: \"#ffffff\",\n dialogOverlay: \"rgba(0, 0, 0, 0.3)\",\n buttonPrimary: \"#2563eb\",\n buttonPrimaryHover: \"#1d4ed8\",\n floatingDateBg: \"#2563eb\",\n resizeFloatingBg: \"#9333ea\",\n};\n\n// テーマをマージするヘルパー\nexport function mergeTheme(custom?: ThemeColors): Required<ThemeColors> {\n if (!custom) return defaultTheme;\n return { ...defaultTheme, ...custom };\n}\n\n// スタイル生成関数\nexport function createStyles(theme: Required<ThemeColors>) {\n return {\n // コンテナ\n container: {\n width: \"100%\",\n height: \"100%\",\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n } as CSSProperties,\n\n // フレックスコンテナ\n flexContainer: {\n display: \"flex\",\n width: \"100%\",\n flex: 1,\n } as CSSProperties,\n\n // 日付列(左側固定)\n dayColumn: {\n position: \"sticky\",\n left: 0,\n zIndex: 20,\n backgroundColor: theme.bgGray100,\n flexShrink: 0,\n display: \"flex\",\n flexDirection: \"column\",\n } as CSSProperties,\n\n // 日付ヘッダーセル\n dayHeaderCell: {\n height: 24,\n border: `1px solid ${theme.borderDefault}`,\n backgroundColor: theme.bgGray100,\n padding: \"0 4px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontWeight: 500,\n fontSize: 12,\n width: 32,\n } as CSSProperties,\n\n // 日付セル\n dayCell: {\n border: `1px solid ${theme.borderDefault}`,\n backgroundColor: theme.bgGray50,\n padding: \"0 4px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontWeight: 500,\n fontSize: 12,\n width: 32,\n } as CSSProperties,\n\n // 月列\n monthColumn: {\n position: \"relative\",\n flex: 1,\n minWidth: 0,\n } as CSSProperties,\n\n // 月ヘッダー\n monthHeader: {\n height: 24,\n border: `1px solid ${theme.borderDefault}`,\n backgroundColor: theme.bgGray100,\n padding: \"0 4px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontWeight: 500,\n fontSize: 12,\n } as CSSProperties,\n\n // カレンダーセル(基本)\n calendarCell: {\n border: `1px solid ${theme.borderDefault}`,\n position: \"relative\",\n } as CSSProperties,\n\n // イベントバーコンテナ\n eventBarContainer: {\n position: \"absolute\",\n top: 24,\n left: 0,\n right: \"20%\",\n padding: \"0 2px\",\n pointerEvents: \"none\",\n zIndex: 10,\n } as CSSProperties,\n\n // イベントバー\n eventBar: {\n position: \"absolute\",\n cursor: \"grab\",\n transition: \"filter 0.15s, z-index 0.15s\",\n boxShadow: \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n } as CSSProperties,\n\n // ドロップインジケーター\n dropIndicator: {\n position: \"absolute\",\n left: 0,\n right: 0,\n pointerEvents: \"none\",\n zIndex: 50,\n } as CSSProperties,\n\n dropIndicatorInner: {\n height: \"100%\",\n border: `2px solid ${theme.borderDropHighlight}`,\n backgroundColor: theme.bgDropHighlight,\n borderRadius: 4,\n } as CSSProperties,\n\n // フローティング日付表示\n floatingDate: {\n position: \"fixed\",\n zIndex: 100,\n pointerEvents: \"none\",\n transform: \"translateX(-50%)\",\n } as CSSProperties,\n\n floatingDateContent: {\n backgroundColor: theme.floatingDateBg,\n color: theme.tooltipText,\n fontSize: 14,\n fontWeight: 700,\n borderRadius: 8,\n padding: \"8px 12px\",\n boxShadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n } as CSSProperties,\n\n floatingDateSubtext: {\n fontSize: 12,\n fontWeight: 400,\n opacity: 0.8,\n } as CSSProperties,\n\n // リサイズ用フローティング表示\n resizeFloatingContent: {\n backgroundColor: theme.resizeFloatingBg,\n color: theme.tooltipText,\n fontSize: 14,\n fontWeight: 700,\n borderRadius: 8,\n padding: \"8px 12px\",\n boxShadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n } as CSSProperties,\n\n // ツールチップ\n tooltip: {\n position: \"fixed\",\n zIndex: 200,\n pointerEvents: \"none\",\n } as CSSProperties,\n\n tooltipContent: {\n backgroundColor: theme.tooltipBg,\n color: theme.tooltipText,\n fontSize: 12,\n borderRadius: 4,\n padding: \"6px 8px\",\n whiteSpace: \"nowrap\",\n boxShadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n } as CSSProperties,\n\n tooltipTitle: {\n fontWeight: 500,\n } as CSSProperties,\n\n tooltipDate: {\n color: \"rgba(255, 255, 255, 0.7)\",\n fontSize: 10,\n marginTop: 2,\n } as CSSProperties,\n\n // 確認ダイアログ\n dialogOverlay: {\n position: \"fixed\",\n inset: 0,\n zIndex: 100,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: theme.dialogOverlay,\n } as CSSProperties,\n\n dialogContent: {\n backgroundColor: theme.bgWhite,\n borderRadius: 8,\n boxShadow: \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n padding: 16,\n maxWidth: 384,\n margin: \"0 16px\",\n } as CSSProperties,\n\n dialogTitle: {\n fontWeight: 700,\n color: theme.textPrimary,\n marginBottom: 8,\n } as CSSProperties,\n\n dialogBody: {\n fontSize: 14,\n color: theme.textSecondary,\n marginBottom: 16,\n } as CSSProperties,\n\n dialogEventTitle: {\n fontWeight: 500,\n color: theme.textPrimary,\n } as CSSProperties,\n\n dialogDateLabel: {\n color: theme.textMuted,\n } as CSSProperties,\n\n dialogButtons: {\n display: \"flex\",\n gap: 8,\n justifyContent: \"flex-end\",\n } as CSSProperties,\n\n dialogCancelButton: {\n padding: \"8px 16px\",\n fontSize: 14,\n color: theme.textSecondary,\n backgroundColor: \"transparent\",\n border: \"none\",\n borderRadius: 4,\n cursor: \"pointer\",\n } as CSSProperties,\n\n dialogConfirmButton: {\n padding: \"8px 16px\",\n fontSize: 14,\n color: theme.tooltipText,\n backgroundColor: theme.buttonPrimary,\n border: \"none\",\n borderRadius: 4,\n cursor: \"pointer\",\n } as CSSProperties,\n\n // リサイズハンドル\n resizeHandle: {\n position: \"absolute\",\n left: 0,\n right: 0,\n height: 8,\n cursor: \"ns-resize\",\n opacity: 0,\n backgroundColor: \"rgba(255, 255, 255, 0.3)\",\n } as CSSProperties,\n\n resizeHandleTop: {\n top: 0,\n borderTopLeftRadius: 4,\n borderTopRightRadius: 4,\n } as CSSProperties,\n\n resizeHandleBottom: {\n bottom: 0,\n borderBottomLeftRadius: 4,\n borderBottomRightRadius: 4,\n } as CSSProperties,\n\n // インジケーター(▲▼)\n indicator: {\n position: \"absolute\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n fontSize: 8,\n color: \"rgba(255, 255, 255, 0.8)\",\n } as CSSProperties,\n\n indicatorTop: {\n top: -6,\n } as CSSProperties,\n\n indicatorBottom: {\n bottom: -6,\n } as CSSProperties,\n\n // 縦書きタイトル\n verticalTitle: {\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 10,\n color: \"#ffffff\",\n fontWeight: 500,\n overflow: \"hidden\",\n writingMode: \"vertical-rl\",\n } as CSSProperties,\n\n // 横書きタイトル\n horizontalTitle: {\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 9,\n color: \"#ffffff\",\n fontWeight: 500,\n overflow: \"hidden\",\n padding: \"0 2px\",\n } as CSSProperties,\n\n truncate: {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n } as CSSProperties,\n };\n}\n\n// セル背景色を取得\nexport function getCellBackgroundColor(\n theme: Required<ThemeColors>,\n isValidDay: boolean,\n isSunday: boolean,\n isSaturday: boolean,\n isHovered: boolean\n): string {\n if (!isValidDay) return theme.bgGray100;\n if (isHovered) return theme.bgGray50;\n if (isSunday) return theme.bgSunday;\n if (isSaturday) return theme.bgSaturday;\n return theme.bgWhite;\n}\n","\"use client\";\n\nimport { useMemo, useState, useCallback, useEffect, useRef } from \"react\";\nimport type { YearlyCalendarProps, CalendarEvent } from \"./types\";\nimport { createStyles, mergeTheme, getCellBackgroundColor, defaultTheme } from \"./styles\";\n\nconst MONTHS = [\n \"1月\",\n \"2月\",\n \"3月\",\n \"4月\",\n \"5月\",\n \"6月\",\n \"7月\",\n \"8月\",\n \"9月\",\n \"10月\",\n \"11月\",\n \"12月\",\n];\n\nconst DAYS = Array.from({ length: 31 }, (_, i) => i + 1);\nconst MIN_ROW_HEIGHT = 20;\nconst HEADER_HEIGHT = 24;\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction isSunday(year: number, month: number, day: number): boolean {\n return new Date(year, month, day).getDay() === 0;\n}\n\nfunction isSaturday(year: number, month: number, day: number): boolean {\n return new Date(year, month, day).getDay() === 6;\n}\n\ninterface MonthSpan {\n event: CalendarEvent;\n startDay: number;\n endDay: number;\n isStart: boolean;\n isEnd: boolean;\n}\n\nfunction getMonthSpans(\n events: CalendarEvent[],\n year: number,\n month: number\n): MonthSpan[] {\n const spans: MonthSpan[] = [];\n const daysInMonth = getDaysInMonth(year, month);\n\n events.forEach((event) => {\n const startDate = event.date;\n const endDate = event.endDate || event.date;\n\n const monthStart = new Date(year, month, 1);\n const monthEnd = new Date(year, month, daysInMonth, 23, 59, 59);\n\n if (startDate > monthEnd || endDate < monthStart) {\n return;\n }\n\n const spanStart = startDate >= monthStart ? startDate.getDate() : 1;\n const spanEnd = endDate <= monthEnd ? endDate.getDate() : daysInMonth;\n\n spans.push({\n event,\n startDay: spanStart,\n endDay: spanEnd,\n isStart:\n startDate.getFullYear() === year && startDate.getMonth() === month,\n isEnd: endDate.getFullYear() === year && endDate.getMonth() === month,\n });\n });\n\n return spans;\n}\n\nfunction calculateLanes(spans: MonthSpan[]): Map<string, number> {\n const laneMap = new Map<string, number>();\n const lanes: { endDay: number }[] = [];\n const sorted = [...spans].sort((a, b) => a.startDay - b.startDay);\n\n sorted.forEach((span) => {\n let laneIndex = lanes.findIndex((lane) => lane.endDay < span.startDay);\n if (laneIndex === -1) {\n laneIndex = lanes.length;\n lanes.push({ endDay: span.endDay });\n } else {\n lanes[laneIndex].endDay = span.endDay;\n }\n laneMap.set(span.event.id, laneIndex);\n });\n\n return laneMap;\n}\n\nexport function YearlyCalendar({\n year,\n events = [],\n onDateClick,\n onDateDoubleClick,\n onDateRangeSelect,\n onEventClick,\n onEventMove,\n categoryColors = {},\n theme: customTheme,\n}: YearlyCalendarProps) {\n // テーマをマージ\n const theme = useMemo(() => mergeTheme(customTheme), [customTheme]);\n const styles = useMemo(() => createStyles(theme), [theme]);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const [rowHeight, setRowHeight] = useState(MIN_ROW_HEIGHT);\n\n useEffect(() => {\n const updateRowHeight = () => {\n if (containerRef.current) {\n const containerHeight = containerRef.current.clientHeight;\n const calculatedHeight = Math.floor(\n (containerHeight - HEADER_HEIGHT) / 31\n );\n setRowHeight(Math.max(calculatedHeight, MIN_ROW_HEIGHT));\n }\n };\n\n updateRowHeight();\n window.addEventListener(\"resize\", updateRowHeight);\n return () => window.removeEventListener(\"resize\", updateRowHeight);\n }, []);\n\n const [draggingEvent, setDraggingEvent] = useState<CalendarEvent | null>(\n null\n );\n const [dragOffset, setDragOffset] = useState<number>(0);\n const [dragOverCell, setDragOverCell] = useState<{\n month: number;\n day: number;\n } | null>(null);\n const [dragPosition, setDragPosition] = useState<{\n x: number;\n y: number;\n } | null>(null);\n const [dragGrabOffsetY, setDragGrabOffsetY] = useState<number>(0);\n const [dragCardHeight, setDragCardHeight] = useState<number>(0);\n const [pendingMove, setPendingMove] = useState<{\n event: CalendarEvent;\n newStartDate: Date;\n newEndDate: Date | undefined;\n isResize?: boolean;\n } | null>(null);\n const [hoveredEvent, setHoveredEvent] = useState<{\n event: CalendarEvent;\n x: number;\n y: number;\n } | null>(null);\n const [resizingEvent, setResizingEvent] = useState<{\n event: CalendarEvent;\n edge: \"start\" | \"end\";\n } | null>(null);\n const [hoveredCell, setHoveredCell] = useState<{\n month: number;\n day: number;\n } | null>(null);\n const [hoveredEventBar, setHoveredEventBar] = useState<string | null>(null);\n const [hoveredResizeHandle, setHoveredResizeHandle] = useState<{\n eventId: string;\n edge: \"start\" | \"end\";\n } | null>(null);\n const [hoveredCancelButton, setHoveredCancelButton] = useState(false);\n const [hoveredConfirmButton, setHoveredConfirmButton] = useState(false);\n\n // Range selection state\n const [rangeSelectionStart, setRangeSelectionStart] = useState<{\n month: number;\n day: number;\n } | null>(null);\n const [rangeSelectionEnd, setRangeSelectionEnd] = useState<{\n month: number;\n day: number;\n } | null>(null);\n const isRangeSelecting = rangeSelectionStart !== null;\n\n const monthSpans = useMemo(() => {\n const result: MonthSpan[][] = [];\n for (let month = 0; month < 12; month++) {\n result.push(getMonthSpans(events, year, month));\n }\n return result;\n }, [events, year]);\n\n const laneMaps = useMemo(() => {\n return monthSpans.map((spans) => calculateLanes(spans));\n }, [monthSpans]);\n\n // 各月のレーン数(重なっているカードの数)\n const maxLanes = useMemo(() => {\n return laneMaps.map((laneMap) => {\n let max = 0;\n laneMap.forEach((lane) => {\n max = Math.max(max, lane + 1);\n });\n return Math.max(max, 1);\n });\n }, [laneMaps]);\n\n // リサイズ中のプレビュー範囲を計算\n const resizePreviewSpans = useMemo(() => {\n if (!resizingEvent || !dragOverCell) return null;\n\n const { event, edge } = resizingEvent;\n const dropDate = new Date(year, dragOverCell.month, dragOverCell.day);\n\n let newStartDate = new Date(event.date);\n let newEndDate = new Date(event.endDate || event.date);\n\n if (edge === \"start\") {\n if (dropDate <= newEndDate) {\n newStartDate = dropDate;\n }\n } else {\n if (dropDate >= newStartDate) {\n newEndDate = dropDate;\n }\n }\n\n const spans = new Map<number, MonthSpan>();\n for (let month = 0; month < 12; month++) {\n const daysInMonth = getDaysInMonth(year, month);\n const monthStart = new Date(year, month, 1);\n const monthEnd = new Date(year, month, daysInMonth, 23, 59, 59);\n\n if (newStartDate > monthEnd || newEndDate < monthStart) continue;\n\n const spanStart = newStartDate >= monthStart ? newStartDate.getDate() : 1;\n const spanEnd =\n newEndDate <= monthEnd ? newEndDate.getDate() : daysInMonth;\n\n spans.set(month, {\n event,\n startDay: spanStart,\n endDay: spanEnd,\n isStart:\n newStartDate.getFullYear() === year &&\n newStartDate.getMonth() === month,\n isEnd:\n newEndDate.getFullYear() === year && newEndDate.getMonth() === month,\n });\n }\n\n return spans;\n }, [resizingEvent, dragOverCell, year]);\n\n const getEventColor = (event: CalendarEvent): string => {\n if (event.color) return event.color;\n if (event.category && categoryColors[event.category]) {\n return categoryColors[event.category];\n }\n return \"#3b82f6\";\n };\n\n const eventsByDate = useMemo(() => {\n const map = new Map<string, CalendarEvent[]>();\n events.forEach((event) => {\n const startDate = event.date;\n const endDate = event.endDate || event.date;\n const current = new Date(startDate);\n while (current <= endDate) {\n const dateKey = `${current.getFullYear()}-${current.getMonth()}-${current.getDate()}`;\n const existing = map.get(dateKey) || [];\n map.set(dateKey, [...existing, event]);\n current.setDate(current.getDate() + 1);\n }\n });\n return map;\n }, [events]);\n\n const getEventsForDate = (month: number, day: number): CalendarEvent[] => {\n const dateKey = `${year}-${month}-${day}`;\n return eventsByDate.get(dateKey) || [];\n };\n\n const handleCellClick = (month: number, day: number) => {\n if (!onDateClick) return;\n const daysInMonth = getDaysInMonth(year, month);\n if (day > daysInMonth) return;\n const date = new Date(year, month, day);\n const cellEvents = getEventsForDate(month, day);\n onDateClick(date, cellEvents);\n };\n\n const handleCellDoubleClick = (month: number, day: number) => {\n if (!onDateDoubleClick) return;\n const daysInMonth = getDaysInMonth(year, month);\n if (day > daysInMonth) return;\n const date = new Date(year, month, day);\n const cellEvents = getEventsForDate(month, day);\n onDateDoubleClick(date, cellEvents);\n };\n\n // Range selection helpers\n const dateToNumber = (month: number, day: number): number => {\n return new Date(year, month, day).getTime();\n };\n\n const isInSelectionRange = (month: number, day: number): boolean => {\n if (!rangeSelectionStart || !rangeSelectionEnd) return false;\n const cellDate = dateToNumber(month, day);\n const startDate = dateToNumber(rangeSelectionStart.month, rangeSelectionStart.day);\n const endDate = dateToNumber(rangeSelectionEnd.month, rangeSelectionEnd.day);\n const minDate = Math.min(startDate, endDate);\n const maxDate = Math.max(startDate, endDate);\n return cellDate >= minDate && cellDate <= maxDate;\n };\n\n const handleRangeSelectStart = useCallback(\n (month: number, day: number) => {\n if (!onDateRangeSelect) return;\n if (draggingEvent || resizingEvent) return;\n setRangeSelectionStart({ month, day });\n setRangeSelectionEnd({ month, day });\n },\n [onDateRangeSelect, draggingEvent, resizingEvent]\n );\n\n const handleRangeSelectMove = useCallback(\n (month: number, day: number) => {\n if (!rangeSelectionStart) return;\n setRangeSelectionEnd({ month, day });\n },\n [rangeSelectionStart]\n );\n\n const handleRangeSelectEnd = useCallback(() => {\n if (!rangeSelectionStart || !rangeSelectionEnd || !onDateRangeSelect) {\n setRangeSelectionStart(null);\n setRangeSelectionEnd(null);\n return;\n }\n\n const startDate = new Date(year, rangeSelectionStart.month, rangeSelectionStart.day);\n const endDate = new Date(year, rangeSelectionEnd.month, rangeSelectionEnd.day);\n\n // Ensure start is before end\n const [finalStart, finalEnd] = startDate <= endDate\n ? [startDate, endDate]\n : [endDate, startDate];\n\n onDateRangeSelect(finalStart, finalEnd);\n setRangeSelectionStart(null);\n setRangeSelectionEnd(null);\n }, [rangeSelectionStart, rangeSelectionEnd, year, onDateRangeSelect]);\n\n const handleDragStart = useCallback(\n (\n e: React.DragEvent,\n event: CalendarEvent,\n monthIndex: number,\n spanStartDay: number\n ) => {\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.setData(\"text/plain\", event.id);\n\n const rect = e.currentTarget.getBoundingClientRect();\n const clickY = e.clientY - rect.top;\n const dayOffset = Math.floor(clickY / rowHeight);\n const grabDay = spanStartDay + dayOffset;\n\n setDragGrabOffsetY(clickY);\n setDragCardHeight(rect.height);\n const grabDate = new Date(year, monthIndex, grabDay);\n const startDate = event.date;\n const offsetDays = Math.floor(\n (grabDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24)\n );\n setDragOffset(offsetDays);\n\n requestAnimationFrame(() => {\n setDraggingEvent(event);\n });\n },\n [year, rowHeight]\n );\n\n const handleDragOver = useCallback(\n (e: React.DragEvent, month: number, day: number) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = \"move\";\n\n if (draggingEvent && dragGrabOffsetY > 0) {\n const dayOffset = Math.floor(dragGrabOffsetY / rowHeight);\n let cardTopDay = day - dayOffset;\n let cardTopMonth = month;\n\n while (cardTopDay < 1 && cardTopMonth > 0) {\n cardTopMonth--;\n cardTopDay += getDaysInMonth(year, cardTopMonth);\n }\n let daysInMonth = getDaysInMonth(year, cardTopMonth);\n while (cardTopDay > daysInMonth && cardTopMonth < 11) {\n cardTopDay -= daysInMonth;\n cardTopMonth++;\n daysInMonth = getDaysInMonth(year, cardTopMonth);\n }\n cardTopDay = Math.max(\n 1,\n Math.min(cardTopDay, getDaysInMonth(year, cardTopMonth))\n );\n\n setDragOverCell({ month: cardTopMonth, day: cardTopDay });\n } else {\n setDragOverCell({ month, day });\n }\n setDragPosition({ x: e.clientX, y: e.clientY });\n },\n [draggingEvent, dragGrabOffsetY, year, rowHeight]\n );\n\n const handleDragLeave = useCallback(() => {\n setDragOverCell(null);\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n if (draggingEvent && onEventMove && dragOverCell) {\n const newStartDate = new Date(\n year,\n dragOverCell.month,\n dragOverCell.day\n );\n\n let newEndDate: Date | undefined;\n if (draggingEvent.endDate) {\n const duration =\n draggingEvent.endDate.getTime() - draggingEvent.date.getTime();\n newEndDate = new Date(newStartDate.getTime() + duration);\n }\n\n onEventMove(draggingEvent, newStartDate, newEndDate);\n }\n setDragOverCell(null);\n setDragPosition(null);\n setDraggingEvent(null);\n setDragOffset(0);\n },\n [draggingEvent, dragOverCell, year, onEventMove]\n );\n\n const handleDragEnd = useCallback(() => {\n setDraggingEvent(null);\n setDragOverCell(null);\n setDragPosition(null);\n setDragGrabOffsetY(0);\n setDragCardHeight(0);\n }, []);\n\n const handleConfirmMove = useCallback(() => {\n if (pendingMove && onEventMove) {\n onEventMove(\n pendingMove.event,\n pendingMove.newStartDate,\n pendingMove.newEndDate\n );\n }\n setPendingMove(null);\n }, [pendingMove, onEventMove]);\n\n const handleCancelMove = useCallback(() => {\n setPendingMove(null);\n }, []);\n\n const handleResizeStart = useCallback(\n (e: React.DragEvent, event: CalendarEvent, edge: \"start\" | \"end\") => {\n e.stopPropagation();\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.setData(\"text/plain\", `resize-${event.id}`);\n requestAnimationFrame(() => {\n setResizingEvent({ event, edge });\n });\n },\n []\n );\n\n const handleResizeDrop = useCallback(\n (month: number, day: number) => {\n if (!resizingEvent || !onEventMove) return;\n\n const { event, edge } = resizingEvent;\n const dropDate = new Date(year, month, day);\n\n let newStartDate = event.date;\n let newEndDate = event.endDate || event.date;\n\n if (edge === \"start\") {\n if (dropDate <= newEndDate) {\n newStartDate = dropDate;\n }\n } else {\n if (dropDate >= newStartDate) {\n newEndDate = dropDate;\n }\n }\n\n const finalEndDate =\n newStartDate.getTime() === newEndDate.getTime()\n ? undefined\n : newEndDate;\n onEventMove(event, newStartDate, finalEndDate);\n\n setResizingEvent(null);\n setDragOverCell(null);\n setDragPosition(null);\n },\n [resizingEvent, year, onEventMove]\n );\n\n const handleResizeEnd = useCallback(() => {\n setResizingEvent(null);\n setDragOverCell(null);\n setDragPosition(null);\n }, []);\n\n useEffect(() => {\n const handleGlobalMouseUp = () => {\n setResizingEvent(null);\n setDraggingEvent(null);\n setDragOverCell(null);\n setDragPosition(null);\n setDragGrabOffsetY(0);\n setDragCardHeight(0);\n setDragOffset(0);\n // End range selection on global mouse up\n if (rangeSelectionStart) {\n handleRangeSelectEnd();\n }\n };\n\n window.addEventListener(\"mouseup\", handleGlobalMouseUp);\n window.addEventListener(\"dragend\", handleGlobalMouseUp);\n return () => {\n window.removeEventListener(\"mouseup\", handleGlobalMouseUp);\n window.removeEventListener(\"dragend\", handleGlobalMouseUp);\n };\n }, [rangeSelectionStart, handleRangeSelectEnd]);\n\n const getWeekdayName = (month: number, day: number) => {\n const date = new Date(year, month, day);\n return [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"][date.getDay()];\n };\n\n return (\n <div ref={containerRef} style={styles.container}>\n {/* ドラッグ中のフローティング日付表示 */}\n {draggingEvent &&\n dragOverCell &&\n dragPosition &&\n (() => {\n const cardTop = dragPosition.y - dragGrabOffsetY;\n const cardBottom = cardTop + dragCardHeight;\n const showBelow = cardTop < 80;\n return (\n <div\n style={{\n ...styles.floatingDate,\n left: dragPosition.x,\n top: showBelow ? cardBottom + 8 : cardTop - 8,\n transform: showBelow\n ? \"translateX(-50%)\"\n : \"translateX(-50%) translateY(-100%)\",\n }}\n >\n <div style={styles.floatingDateContent}>\n <div>\n {dragOverCell.month + 1}月{dragOverCell.day}日(\n {getWeekdayName(dragOverCell.month, dragOverCell.day)})\n </div>\n <div style={styles.floatingDateSubtext}>\n {draggingEvent.title}\n </div>\n </div>\n </div>\n );\n })()}\n\n {/* リサイズ中のフローティング日付表示 */}\n {resizingEvent && dragOverCell && dragPosition && (\n <div\n style={{\n ...styles.floatingDate,\n left: dragPosition.x,\n top: dragPosition.y - 50,\n }}\n >\n <div style={styles.resizeFloatingContent}>\n <div>\n {resizingEvent.edge === \"start\" ? \"開始日:\" : \"終了日:\"}\n {dragOverCell.month + 1}月{dragOverCell.day}日(\n {getWeekdayName(dragOverCell.month, dragOverCell.day)})\n </div>\n <div style={styles.floatingDateSubtext}>\n {resizingEvent.event.title}\n </div>\n </div>\n </div>\n )}\n\n <div style={styles.flexContainer}>\n {/* 日付列 */}\n <div style={styles.dayColumn}>\n <div style={styles.dayHeaderCell}>日</div>\n {DAYS.map((day) => (\n <div key={day} style={{ ...styles.dayCell, height: rowHeight }}>\n {day}\n </div>\n ))}\n </div>\n\n {/* 月ごとの列 */}\n {MONTHS.map((monthName, monthIndex) => {\n const daysInMonth = getDaysInMonth(year, monthIndex);\n const spans = monthSpans[monthIndex];\n const laneMap = laneMaps[monthIndex];\n const laneCount = maxLanes[monthIndex]; // この月のレーン数\n\n return (\n <div key={monthIndex} style={styles.monthColumn}>\n {/* 月ヘッダー */}\n <div style={styles.monthHeader}>{monthName}</div>\n\n {/* 日付セル(背景) */}\n {DAYS.map((day) => {\n const isValidDay = day <= daysInMonth;\n const sunday = isValidDay && isSunday(year, monthIndex, day);\n const saturday =\n isValidDay && isSaturday(year, monthIndex, day);\n const isHovered =\n hoveredCell?.month === monthIndex && hoveredCell?.day === day;\n const isInRange = isValidDay && isInSelectionRange(monthIndex, day);\n\n return (\n <div\n key={day}\n style={{\n ...styles.calendarCell,\n height: rowHeight,\n backgroundColor: isInRange\n ? \"rgba(59, 130, 246, 0.3)\"\n : getCellBackgroundColor(\n theme,\n isValidDay,\n sunday,\n saturday,\n isHovered && isValidDay && !isRangeSelecting\n ),\n cursor: isValidDay ? \"pointer\" : \"default\",\n userSelect: \"none\",\n }}\n onClick={() =>\n isValidDay && !isRangeSelecting && handleCellClick(monthIndex, day)\n }\n onDoubleClick={() =>\n isValidDay && handleCellDoubleClick(monthIndex, day)\n }\n onMouseDown={() =>\n isValidDay && handleRangeSelectStart(monthIndex, day)\n }\n onMouseEnter={() => {\n if (isValidDay) {\n setHoveredCell({ month: monthIndex, day });\n if (isRangeSelecting) {\n handleRangeSelectMove(monthIndex, day);\n }\n }\n }}\n onMouseLeave={() => setHoveredCell(null)}\n onDragOver={(e) =>\n isValidDay && handleDragOver(e, monthIndex, day)\n }\n onDragLeave={handleDragLeave}\n onDrop={(e) => {\n if (!isValidDay) return;\n if (resizingEvent) {\n handleResizeDrop(monthIndex, day);\n } else {\n handleDrop(e);\n }\n }}\n />\n );\n })}\n\n {/* ドロップインジケーター */}\n {(draggingEvent || resizingEvent) &&\n dragOverCell?.month === monthIndex &&\n dragOverCell.day <= daysInMonth && (\n <div\n style={{\n ...styles.dropIndicator,\n top: 24 + (dragOverCell.day - 1) * rowHeight,\n height: rowHeight,\n }}\n >\n <div style={styles.dropIndicatorInner} />\n </div>\n )}\n\n {/* イベントバー */}\n <div style={styles.eventBarContainer}>\n {spans.map((span) => {\n const laneIndex = laneMap.get(span.event.id) || 0;\n // この月のレーン数に応じた幅(重なりがある場合のみ分割)\n const laneWidth = 100 / laneCount;\n const left = laneIndex * laneWidth;\n\n const isDraggingThis = draggingEvent?.id === span.event.id;\n const isResizingThis =\n resizingEvent?.event.id === span.event.id;\n\n let displaySpan = span;\n if (isResizingThis && resizePreviewSpans) {\n const previewSpan = resizePreviewSpans.get(monthIndex);\n if (previewSpan) {\n displaySpan = previewSpan;\n } else {\n return null;\n }\n }\n\n const displayStartDay = displaySpan.startDay;\n const displayEndDay = displaySpan.endDay;\n const top = (displayStartDay - 1) * rowHeight + 2;\n const height =\n (displayEndDay - displayStartDay + 1) * rowHeight - 4;\n const spanDays = displayEndDay - displayStartDay + 1;\n\n const isInteractive = !draggingEvent && !resizingEvent;\n const isHovered = hoveredEventBar === span.event.id;\n\n return (\n <div\n key={span.event.id}\n style={{\n ...styles.eventBar,\n top,\n left: `${left}%`,\n width: `calc(${laneWidth}% - 4px)`,\n height,\n backgroundColor: getEventColor(span.event),\n borderRadius: `${span.isStart ? 4 : 0}px ${span.isStart ? 4 : 0}px ${span.isEnd ? 4 : 0}px ${span.isEnd ? 4 : 0}px`,\n opacity: isDraggingThis ? 0.3 : 1,\n border: isResizingThis\n ? \"2px dashed rgba(255, 255, 255, 0.8)\"\n : \"none\",\n zIndex: isResizingThis ? 30 : isHovered ? 50 : 10,\n filter: isHovered ? \"brightness(1.1)\" : \"none\",\n pointerEvents: isInteractive ? \"auto\" : \"none\",\n }}\n draggable\n onDragStart={(e) =>\n handleDragStart(\n e,\n span.event,\n monthIndex,\n span.startDay\n )\n }\n onDragEnd={handleDragEnd}\n onMouseEnter={(e) => {\n setHoveredEventBar(span.event.id);\n const rect = e.currentTarget.getBoundingClientRect();\n setHoveredEvent({\n event: span.event,\n x: rect.right + 8,\n y: rect.top,\n });\n }}\n onMouseLeave={() => {\n setHoveredEventBar(null);\n setHoveredEvent(null);\n }}\n onClick={(e) => {\n e.stopPropagation();\n onEventClick?.(span.event);\n }}\n >\n {/* 前月から続くインジケーター */}\n {!span.isStart && (\n <div style={{ ...styles.indicator, ...styles.indicatorTop }}>\n ▲\n </div>\n )}\n\n {/* 縦書きタイトル(2日以上) */}\n {span.isStart && spanDays >= 2 && (\n <div style={styles.verticalTitle}>\n <span\n style={{\n ...styles.truncate,\n maxHeight: \"100%\",\n padding: \"0 2px\",\n }}\n >\n {span.event.title}\n </span>\n </div>\n )}\n\n {/* 横書きタイトル(1日のみ) */}\n {span.isStart && spanDays === 1 && (\n <div style={styles.horizontalTitle}>\n <span style={styles.truncate}>{span.event.title}</span>\n </div>\n )}\n\n {/* 翌月へ続くインジケーター */}\n {!span.isEnd && (\n <div style={{ ...styles.indicator, ...styles.indicatorBottom }}>\n ▼\n </div>\n )}\n\n {/* リサイズハンドル */}\n {span.event.endDate && isInteractive && (\n <>\n {span.isStart && (\n <div\n style={{\n ...styles.resizeHandle,\n ...styles.resizeHandleTop,\n opacity:\n hoveredResizeHandle?.eventId === span.event.id &&\n hoveredResizeHandle?.edge === \"start\"\n ? 1\n : 0,\n }}\n draggable\n onDragStart={(e) => {\n e.stopPropagation();\n handleResizeStart(e, span.event, \"start\");\n }}\n onDragEnd={handleResizeEnd}\n onMouseEnter={() =>\n setHoveredResizeHandle({\n eventId: span.event.id,\n edge: \"start\",\n })\n }\n onMouseLeave={() => setHoveredResizeHandle(null)}\n />\n )}\n {span.isEnd && (\n <div\n style={{\n ...styles.resizeHandle,\n ...styles.resizeHandleBottom,\n opacity:\n hoveredResizeHandle?.eventId === span.event.id &&\n hoveredResizeHandle?.edge === \"end\"\n ? 1\n : 0,\n }}\n draggable\n onDragStart={(e) => {\n e.stopPropagation();\n handleResizeStart(e, span.event, \"end\");\n }}\n onDragEnd={handleResizeEnd}\n onMouseEnter={() =>\n setHoveredResizeHandle({\n eventId: span.event.id,\n edge: \"end\",\n })\n }\n onMouseLeave={() => setHoveredResizeHandle(null)}\n />\n )}\n </>\n )}\n </div>\n );\n })}\n\n {/* リサイズで新たに追加される月のプレビュースパン */}\n {resizingEvent &&\n resizePreviewSpans &&\n resizePreviewSpans.has(monthIndex) &&\n !spans.some((s) => s.event.id === resizingEvent.event.id) &&\n (() => {\n const previewSpan = resizePreviewSpans.get(monthIndex)!;\n // 元のイベントがあった月のレーンを取得\n let originalLaneIndex = 0;\n for (let m = 0; m < 12; m++) {\n const lane = laneMaps[m].get(resizingEvent.event.id);\n if (lane !== undefined) {\n originalLaneIndex = lane;\n break;\n }\n }\n // プレビュー月のレーン数を使用\n const previewLaneCount = maxLanes[monthIndex];\n const laneWidth = 100 / previewLaneCount;\n const left = Math.min(originalLaneIndex, previewLaneCount - 1) * laneWidth;\n const top = (previewSpan.startDay - 1) * rowHeight + 2;\n const height =\n (previewSpan.endDay - previewSpan.startDay + 1) *\n rowHeight -\n 4;\n\n return (\n <div\n key={`preview-${resizingEvent.event.id}`}\n style={{\n ...styles.eventBar,\n top,\n left: `${left}%`,\n width: `calc(${laneWidth}% - 4px)`,\n height,\n backgroundColor: getEventColor(resizingEvent.event),\n borderRadius: `${previewSpan.isStart ? 4 : 0}px ${previewSpan.isStart ? 4 : 0}px ${previewSpan.isEnd ? 4 : 0}px ${previewSpan.isEnd ? 4 : 0}px`,\n border: \"2px dashed rgba(255, 255, 255, 0.8)\",\n opacity: 0.7,\n zIndex: 30,\n }}\n >\n {!previewSpan.isStart && (\n <div style={{ ...styles.indicator, ...styles.indicatorTop }}>\n ▲\n </div>\n )}\n {!previewSpan.isEnd && (\n <div style={{ ...styles.indicator, ...styles.indicatorBottom }}>\n ▼\n </div>\n )}\n </div>\n );\n })()}\n </div>\n </div>\n );\n })}\n </div>\n\n {/* ホバーツールチップ */}\n {hoveredEvent && !draggingEvent && !resizingEvent && (\n <div\n style={{\n ...styles.tooltip,\n left: hoveredEvent.x,\n top: hoveredEvent.y,\n }}\n >\n <div style={styles.tooltipContent}>\n <div style={styles.tooltipTitle}>{hoveredEvent.event.title}</div>\n <div style={styles.tooltipDate}>\n {hoveredEvent.event.date.toLocaleDateString(\"ja-JP\", {\n month: \"short\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {hoveredEvent.event.endDate && (\n <>\n {\" 〜 \"}\n {hoveredEvent.event.endDate.toLocaleDateString(\"ja-JP\", {\n month: \"short\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n </>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* 移動/リサイズ確認ダイアログ */}\n {pendingMove && (\n <div style={styles.dialogOverlay}>\n <div style={styles.dialogContent}>\n <h3 style={styles.dialogTitle}>\n {pendingMove.isResize\n ? \"期間を変更しますか?\"\n : \"予定を移動しますか?\"}\n </h3>\n <div style={styles.dialogBody}>\n <div style={styles.dialogEventTitle}>{pendingMove.event.title}</div>\n <div style={{ marginTop: 4 }}>\n <span style={styles.dialogDateLabel}>変更前:</span>\n {pendingMove.event.date.toLocaleDateString(\"ja-JP\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {pendingMove.event.endDate && (\n <>\n {\" 〜 \"}\n {pendingMove.event.endDate.toLocaleDateString(\"ja-JP\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n </>\n )}\n </div>\n <div style={{ marginTop: 4 }}>\n <span style={styles.dialogDateLabel}>変更後:</span>\n {pendingMove.newStartDate.toLocaleDateString(\"ja-JP\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {pendingMove.newEndDate && (\n <>\n {\" 〜 \"}\n {pendingMove.newEndDate.toLocaleDateString(\"ja-JP\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n </>\n )}\n </div>\n </div>\n <div style={styles.dialogButtons}>\n <button\n onClick={handleCancelMove}\n style={{\n ...styles.dialogCancelButton,\n backgroundColor: hoveredCancelButton\n ? theme.bgGray100\n : \"transparent\",\n }}\n onMouseEnter={() => setHoveredCancelButton(true)}\n onMouseLeave={() => setHoveredCancelButton(false)}\n >\n キャンセル\n </button>\n <button\n onClick={handleConfirmMove}\n style={{\n ...styles.dialogConfirmButton,\n backgroundColor: hoveredConfirmButton\n ? theme.buttonPrimaryHover\n : theme.buttonPrimary,\n }}\n onMouseEnter={() => setHoveredConfirmButton(true)}\n onMouseLeave={() => setHoveredConfirmButton(false)}\n >\n {pendingMove.isResize ? \"変更する\" : \"移動する\"}\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/YearlyCalendar/styles.ts","../src/YearlyCalendar/YearlyCalendar.tsx"],"names":["isSunday","isSaturday","useMemo","useRef","useState","useEffect","useCallback","jsx","jsxs","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["import { CSSProperties } from \"react\";\nimport type { ThemeColors } from \"./types\";\n\n// デフォルトテーマカラー\nexport const defaultTheme: Required<ThemeColors> = {\n // 背景色\n bgWhite: \"#ffffff\",\n bgGray50: \"#f9fafb\",\n bgGray100: \"#f3f4f6\",\n bgSunday: \"#fef2f2\",\n bgSaturday: \"#eff6ff\",\n bgDropHighlight: \"rgba(191, 219, 254, 0.5)\",\n\n // ボーダー\n borderDefault: \"#d1d5db\",\n borderDropHighlight: \"#3b82f6\",\n\n // テキスト\n textPrimary: \"#111827\",\n textSecondary: \"#4b5563\",\n textMuted: \"#6b7280\",\n\n // UI要素\n tooltipBg: \"#111827\",\n tooltipText: \"#ffffff\",\n dialogOverlay: \"rgba(0, 0, 0, 0.3)\",\n buttonPrimary: \"#2563eb\",\n buttonPrimaryHover: \"#1d4ed8\",\n floatingDateBg: \"#2563eb\",\n resizeFloatingBg: \"#9333ea\",\n};\n\n// テーマをマージするヘルパー\nexport function mergeTheme(custom?: ThemeColors): Required<ThemeColors> {\n if (!custom) return defaultTheme;\n return { ...defaultTheme, ...custom };\n}\n\n// スタイル生成関数\nexport function createStyles(theme: Required<ThemeColors>) {\n return {\n // コンテナ\n container: {\n width: \"100%\",\n height: \"100%\",\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n } as CSSProperties,\n\n // フレックスコンテナ\n flexContainer: {\n display: \"flex\",\n width: \"100%\",\n flex: 1,\n } as CSSProperties,\n\n // 日付列(左側固定)\n dayColumn: {\n position: \"sticky\",\n left: 0,\n zIndex: 20,\n backgroundColor: theme.bgGray100,\n flexShrink: 0,\n display: \"flex\",\n flexDirection: \"column\",\n } as CSSProperties,\n\n // 日付ヘッダーセル\n dayHeaderCell: {\n height: 24,\n border: `1px solid ${theme.borderDefault}`,\n backgroundColor: theme.bgGray100,\n padding: \"0 4px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontWeight: 500,\n fontSize: 12,\n width: 32,\n } as CSSProperties,\n\n // 日付セル\n dayCell: {\n border: `1px solid ${theme.borderDefault}`,\n backgroundColor: theme.bgGray50,\n padding: \"0 4px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontWeight: 500,\n fontSize: 12,\n width: 32,\n } as CSSProperties,\n\n // 月列\n monthColumn: {\n position: \"relative\",\n flex: 1,\n minWidth: 0,\n } as CSSProperties,\n\n // 月ヘッダー\n monthHeader: {\n height: 24,\n border: `1px solid ${theme.borderDefault}`,\n backgroundColor: theme.bgGray100,\n padding: \"0 4px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontWeight: 500,\n fontSize: 12,\n } as CSSProperties,\n\n // カレンダーセル(基本)\n calendarCell: {\n border: `1px solid ${theme.borderDefault}`,\n position: \"relative\",\n } as CSSProperties,\n\n // イベントバーコンテナ\n eventBarContainer: {\n position: \"absolute\",\n top: 24,\n left: 0,\n right: \"20%\",\n padding: \"0 2px\",\n pointerEvents: \"none\",\n zIndex: 10,\n } as CSSProperties,\n\n // イベントバー\n eventBar: {\n position: \"absolute\",\n cursor: \"grab\",\n transition: \"filter 0.15s, z-index 0.15s\",\n boxShadow: \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n } as CSSProperties,\n\n // ドロップインジケーター\n dropIndicator: {\n position: \"absolute\",\n left: 0,\n right: 0,\n pointerEvents: \"none\",\n zIndex: 50,\n } as CSSProperties,\n\n dropIndicatorInner: {\n height: \"100%\",\n border: `2px solid ${theme.borderDropHighlight}`,\n backgroundColor: theme.bgDropHighlight,\n borderRadius: 4,\n } as CSSProperties,\n\n // フローティング日付表示\n floatingDate: {\n position: \"fixed\",\n zIndex: 100,\n pointerEvents: \"none\",\n transform: \"translateX(-50%)\",\n } as CSSProperties,\n\n floatingDateContent: {\n backgroundColor: theme.floatingDateBg,\n color: theme.tooltipText,\n fontSize: 14,\n fontWeight: 700,\n borderRadius: 8,\n padding: \"8px 12px\",\n boxShadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n } as CSSProperties,\n\n floatingDateSubtext: {\n fontSize: 12,\n fontWeight: 400,\n opacity: 0.8,\n } as CSSProperties,\n\n // リサイズ用フローティング表示\n resizeFloatingContent: {\n backgroundColor: theme.resizeFloatingBg,\n color: theme.tooltipText,\n fontSize: 14,\n fontWeight: 700,\n borderRadius: 8,\n padding: \"8px 12px\",\n boxShadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n } as CSSProperties,\n\n // ツールチップ\n tooltip: {\n position: \"fixed\",\n zIndex: 200,\n pointerEvents: \"none\",\n } as CSSProperties,\n\n tooltipContent: {\n backgroundColor: theme.tooltipBg,\n color: theme.tooltipText,\n fontSize: 12,\n borderRadius: 4,\n padding: \"6px 8px\",\n whiteSpace: \"nowrap\",\n boxShadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n } as CSSProperties,\n\n tooltipTitle: {\n fontWeight: 500,\n } as CSSProperties,\n\n tooltipDate: {\n color: \"rgba(255, 255, 255, 0.7)\",\n fontSize: 10,\n marginTop: 2,\n } as CSSProperties,\n\n // 確認ダイアログ\n dialogOverlay: {\n position: \"fixed\",\n inset: 0,\n zIndex: 100,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: theme.dialogOverlay,\n } as CSSProperties,\n\n dialogContent: {\n backgroundColor: theme.bgWhite,\n borderRadius: 8,\n boxShadow: \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n padding: 16,\n maxWidth: 384,\n margin: \"0 16px\",\n } as CSSProperties,\n\n dialogTitle: {\n fontWeight: 700,\n color: theme.textPrimary,\n marginBottom: 8,\n } as CSSProperties,\n\n dialogBody: {\n fontSize: 14,\n color: theme.textSecondary,\n marginBottom: 16,\n } as CSSProperties,\n\n dialogEventTitle: {\n fontWeight: 500,\n color: theme.textPrimary,\n } as CSSProperties,\n\n dialogDateLabel: {\n color: theme.textMuted,\n } as CSSProperties,\n\n dialogButtons: {\n display: \"flex\",\n gap: 8,\n justifyContent: \"flex-end\",\n } as CSSProperties,\n\n dialogCancelButton: {\n padding: \"8px 16px\",\n fontSize: 14,\n color: theme.textSecondary,\n backgroundColor: \"transparent\",\n border: \"none\",\n borderRadius: 4,\n cursor: \"pointer\",\n } as CSSProperties,\n\n dialogConfirmButton: {\n padding: \"8px 16px\",\n fontSize: 14,\n color: theme.tooltipText,\n backgroundColor: theme.buttonPrimary,\n border: \"none\",\n borderRadius: 4,\n cursor: \"pointer\",\n } as CSSProperties,\n\n // リサイズハンドル\n resizeHandle: {\n position: \"absolute\",\n left: 0,\n right: 0,\n height: 8,\n cursor: \"ns-resize\",\n opacity: 0,\n backgroundColor: \"rgba(255, 255, 255, 0.3)\",\n } as CSSProperties,\n\n resizeHandleTop: {\n top: 0,\n borderTopLeftRadius: 4,\n borderTopRightRadius: 4,\n } as CSSProperties,\n\n resizeHandleBottom: {\n bottom: 0,\n borderBottomLeftRadius: 4,\n borderBottomRightRadius: 4,\n } as CSSProperties,\n\n // インジケーター(▲▼)\n indicator: {\n position: \"absolute\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n fontSize: 8,\n color: \"rgba(255, 255, 255, 0.8)\",\n } as CSSProperties,\n\n indicatorTop: {\n top: -6,\n } as CSSProperties,\n\n indicatorBottom: {\n bottom: -6,\n } as CSSProperties,\n\n // 縦書きタイトル\n verticalTitle: {\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 10,\n color: \"#ffffff\",\n fontWeight: 500,\n overflow: \"hidden\",\n writingMode: \"vertical-rl\",\n } as CSSProperties,\n\n // 横書きタイトル\n horizontalTitle: {\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 9,\n color: \"#ffffff\",\n fontWeight: 500,\n overflow: \"hidden\",\n padding: \"0 2px\",\n } as CSSProperties,\n\n truncate: {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n } as CSSProperties,\n };\n}\n\n// セル背景色を取得\nexport function getCellBackgroundColor(\n theme: Required<ThemeColors>,\n isValidDay: boolean,\n isSunday: boolean,\n isSaturday: boolean,\n isHovered: boolean\n): string {\n if (!isValidDay) return theme.bgGray100;\n if (isHovered) return theme.bgGray50;\n if (isSunday) return theme.bgSunday;\n if (isSaturday) return theme.bgSaturday;\n return theme.bgWhite;\n}\n","\"use client\";\n\nimport { useMemo, useState, useCallback, useEffect, useRef } from \"react\";\nimport type { YearlyCalendarProps, CalendarEvent } from \"./types\";\nimport { createStyles, mergeTheme, getCellBackgroundColor, defaultTheme } from \"./styles\";\n\nconst MONTHS = [\n \"1月\",\n \"2月\",\n \"3月\",\n \"4月\",\n \"5月\",\n \"6月\",\n \"7月\",\n \"8月\",\n \"9月\",\n \"10月\",\n \"11月\",\n \"12月\",\n];\n\nconst DAYS = Array.from({ length: 31 }, (_, i) => i + 1);\nconst MIN_ROW_HEIGHT = 20;\nconst HEADER_HEIGHT = 24;\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction isSunday(year: number, month: number, day: number): boolean {\n return new Date(year, month, day).getDay() === 0;\n}\n\nfunction isSaturday(year: number, month: number, day: number): boolean {\n return new Date(year, month, day).getDay() === 6;\n}\n\ninterface MonthSpan {\n event: CalendarEvent;\n startDay: number;\n endDay: number;\n isStart: boolean;\n isEnd: boolean;\n}\n\nfunction getMonthSpans(\n events: CalendarEvent[],\n year: number,\n month: number\n): MonthSpan[] {\n const spans: MonthSpan[] = [];\n const daysInMonth = getDaysInMonth(year, month);\n\n events.forEach((event) => {\n const startDate = event.date;\n const endDate = event.endDate || event.date;\n\n const monthStart = new Date(year, month, 1);\n const monthEnd = new Date(year, month, daysInMonth, 23, 59, 59);\n\n if (startDate > monthEnd || endDate < monthStart) {\n return;\n }\n\n const spanStart = startDate >= monthStart ? startDate.getDate() : 1;\n const spanEnd = endDate <= monthEnd ? endDate.getDate() : daysInMonth;\n\n spans.push({\n event,\n startDay: spanStart,\n endDay: spanEnd,\n isStart:\n startDate.getFullYear() === year && startDate.getMonth() === month,\n isEnd: endDate.getFullYear() === year && endDate.getMonth() === month,\n });\n });\n\n return spans;\n}\n\nfunction calculateLanes(spans: MonthSpan[]): Map<string, number> {\n const laneMap = new Map<string, number>();\n const lanes: { endDay: number }[] = [];\n const sorted = [...spans].sort((a, b) => a.startDay - b.startDay);\n\n sorted.forEach((span) => {\n let laneIndex = lanes.findIndex((lane) => lane.endDay < span.startDay);\n if (laneIndex === -1) {\n laneIndex = lanes.length;\n lanes.push({ endDay: span.endDay });\n } else {\n lanes[laneIndex].endDay = span.endDay;\n }\n laneMap.set(span.event.id, laneIndex);\n });\n\n return laneMap;\n}\n\nexport function YearlyCalendar({\n year,\n events = [],\n onDateClick,\n onDateDoubleClick,\n onDateRangeSelect,\n onEventClick,\n onEventMove,\n highlightRange,\n categoryColors = {},\n theme: customTheme,\n}: YearlyCalendarProps) {\n // テーマをマージ\n const theme = useMemo(() => mergeTheme(customTheme), [customTheme]);\n const styles = useMemo(() => createStyles(theme), [theme]);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const [rowHeight, setRowHeight] = useState(MIN_ROW_HEIGHT);\n\n useEffect(() => {\n const updateRowHeight = () => {\n if (containerRef.current) {\n const containerHeight = containerRef.current.clientHeight;\n const calculatedHeight = Math.floor(\n (containerHeight - HEADER_HEIGHT) / 31\n );\n setRowHeight(Math.max(calculatedHeight, MIN_ROW_HEIGHT));\n }\n };\n\n updateRowHeight();\n window.addEventListener(\"resize\", updateRowHeight);\n return () => window.removeEventListener(\"resize\", updateRowHeight);\n }, []);\n\n const [draggingEvent, setDraggingEvent] = useState<CalendarEvent | null>(\n null\n );\n const [dragOffset, setDragOffset] = useState<number>(0);\n const [dragOverCell, setDragOverCell] = useState<{\n month: number;\n day: number;\n } | null>(null);\n const [dragPosition, setDragPosition] = useState<{\n x: number;\n y: number;\n } | null>(null);\n const [dragGrabOffsetY, setDragGrabOffsetY] = useState<number>(0);\n const [dragCardHeight, setDragCardHeight] = useState<number>(0);\n const [pendingMove, setPendingMove] = useState<{\n event: CalendarEvent;\n newStartDate: Date;\n newEndDate: Date | undefined;\n isResize?: boolean;\n } | null>(null);\n const [hoveredEvent, setHoveredEvent] = useState<{\n event: CalendarEvent;\n x: number;\n y: number;\n } | null>(null);\n const [resizingEvent, setResizingEvent] = useState<{\n event: CalendarEvent;\n edge: \"start\" | \"end\";\n } | null>(null);\n const [hoveredCell, setHoveredCell] = useState<{\n month: number;\n day: number;\n } | null>(null);\n const [hoveredEventBar, setHoveredEventBar] = useState<string | null>(null);\n const [hoveredResizeHandle, setHoveredResizeHandle] = useState<{\n eventId: string;\n edge: \"start\" | \"end\";\n } | null>(null);\n const [hoveredCancelButton, setHoveredCancelButton] = useState(false);\n const [hoveredConfirmButton, setHoveredConfirmButton] = useState(false);\n\n // Range selection state\n const [rangeSelectionStart, setRangeSelectionStart] = useState<{\n month: number;\n day: number;\n } | null>(null);\n const [rangeSelectionEnd, setRangeSelectionEnd] = useState<{\n month: number;\n day: number;\n } | null>(null);\n const isRangeSelecting = rangeSelectionStart !== null;\n\n const monthSpans = useMemo(() => {\n const result: MonthSpan[][] = [];\n for (let month = 0; month < 12; month++) {\n result.push(getMonthSpans(events, year, month));\n }\n return result;\n }, [events, year]);\n\n const laneMaps = useMemo(() => {\n return monthSpans.map((spans) => calculateLanes(spans));\n }, [monthSpans]);\n\n // 各月のレーン数(重なっているカードの数)\n const maxLanes = useMemo(() => {\n return laneMaps.map((laneMap) => {\n let max = 0;\n laneMap.forEach((lane) => {\n max = Math.max(max, lane + 1);\n });\n return Math.max(max, 1);\n });\n }, [laneMaps]);\n\n // リサイズ中のプレビュー範囲を計算\n const resizePreviewSpans = useMemo(() => {\n if (!resizingEvent || !dragOverCell) return null;\n\n const { event, edge } = resizingEvent;\n const dropDate = new Date(year, dragOverCell.month, dragOverCell.day);\n\n let newStartDate = new Date(event.date);\n let newEndDate = new Date(event.endDate || event.date);\n\n if (edge === \"start\") {\n if (dropDate <= newEndDate) {\n newStartDate = dropDate;\n }\n } else {\n if (dropDate >= newStartDate) {\n newEndDate = dropDate;\n }\n }\n\n const spans = new Map<number, MonthSpan>();\n for (let month = 0; month < 12; month++) {\n const daysInMonth = getDaysInMonth(year, month);\n const monthStart = new Date(year, month, 1);\n const monthEnd = new Date(year, month, daysInMonth, 23, 59, 59);\n\n if (newStartDate > monthEnd || newEndDate < monthStart) continue;\n\n const spanStart = newStartDate >= monthStart ? newStartDate.getDate() : 1;\n const spanEnd =\n newEndDate <= monthEnd ? newEndDate.getDate() : daysInMonth;\n\n spans.set(month, {\n event,\n startDay: spanStart,\n endDay: spanEnd,\n isStart:\n newStartDate.getFullYear() === year &&\n newStartDate.getMonth() === month,\n isEnd:\n newEndDate.getFullYear() === year && newEndDate.getMonth() === month,\n });\n }\n\n return spans;\n }, [resizingEvent, dragOverCell, year]);\n\n const getEventColor = (event: CalendarEvent): string => {\n if (event.color) return event.color;\n if (event.category && categoryColors[event.category]) {\n return categoryColors[event.category];\n }\n return \"#3b82f6\";\n };\n\n const eventsByDate = useMemo(() => {\n const map = new Map<string, CalendarEvent[]>();\n events.forEach((event) => {\n const startDate = event.date;\n const endDate = event.endDate || event.date;\n const current = new Date(startDate);\n while (current <= endDate) {\n const dateKey = `${current.getFullYear()}-${current.getMonth()}-${current.getDate()}`;\n const existing = map.get(dateKey) || [];\n map.set(dateKey, [...existing, event]);\n current.setDate(current.getDate() + 1);\n }\n });\n return map;\n }, [events]);\n\n const getEventsForDate = (month: number, day: number): CalendarEvent[] => {\n const dateKey = `${year}-${month}-${day}`;\n return eventsByDate.get(dateKey) || [];\n };\n\n const handleCellClick = (month: number, day: number) => {\n if (!onDateClick) return;\n const daysInMonth = getDaysInMonth(year, month);\n if (day > daysInMonth) return;\n const date = new Date(year, month, day);\n const cellEvents = getEventsForDate(month, day);\n onDateClick(date, cellEvents);\n };\n\n const handleCellDoubleClick = (month: number, day: number) => {\n if (!onDateDoubleClick) return;\n const daysInMonth = getDaysInMonth(year, month);\n if (day > daysInMonth) return;\n const date = new Date(year, month, day);\n const cellEvents = getEventsForDate(month, day);\n onDateDoubleClick(date, cellEvents);\n };\n\n // Range selection helpers\n const dateToNumber = (month: number, day: number): number => {\n return new Date(year, month, day).getTime();\n };\n\n const isInSelectionRange = (month: number, day: number): boolean => {\n // Check active drag selection\n if (rangeSelectionStart && rangeSelectionEnd) {\n const cellDate = dateToNumber(month, day);\n const startDate = dateToNumber(rangeSelectionStart.month, rangeSelectionStart.day);\n const endDate = dateToNumber(rangeSelectionEnd.month, rangeSelectionEnd.day);\n const minDate = Math.min(startDate, endDate);\n const maxDate = Math.max(startDate, endDate);\n if (cellDate >= minDate && cellDate <= maxDate) return true;\n }\n return false;\n };\n\n const isInHighlightRange = (month: number, day: number): boolean => {\n if (!highlightRange) return false;\n const cellDate = new Date(year, month, day).getTime();\n const startDate = highlightRange.start.getTime();\n const endDate = highlightRange.end.getTime();\n const minDate = Math.min(startDate, endDate);\n const maxDate = Math.max(startDate, endDate);\n return cellDate >= minDate && cellDate <= maxDate;\n };\n\n const handleRangeSelectStart = useCallback(\n (month: number, day: number) => {\n if (!onDateRangeSelect) return;\n if (draggingEvent || resizingEvent) return;\n setRangeSelectionStart({ month, day });\n setRangeSelectionEnd({ month, day });\n },\n [onDateRangeSelect, draggingEvent, resizingEvent]\n );\n\n const handleRangeSelectMove = useCallback(\n (month: number, day: number) => {\n if (!rangeSelectionStart) return;\n setRangeSelectionEnd({ month, day });\n },\n [rangeSelectionStart]\n );\n\n const handleRangeSelectEnd = useCallback(() => {\n if (!rangeSelectionStart || !rangeSelectionEnd || !onDateRangeSelect) {\n setRangeSelectionStart(null);\n setRangeSelectionEnd(null);\n return;\n }\n\n const startDate = new Date(year, rangeSelectionStart.month, rangeSelectionStart.day);\n const endDate = new Date(year, rangeSelectionEnd.month, rangeSelectionEnd.day);\n\n // Ensure start is before end\n const [finalStart, finalEnd] = startDate <= endDate\n ? [startDate, endDate]\n : [endDate, startDate];\n\n onDateRangeSelect(finalStart, finalEnd);\n setRangeSelectionStart(null);\n setRangeSelectionEnd(null);\n }, [rangeSelectionStart, rangeSelectionEnd, year, onDateRangeSelect]);\n\n const handleDragStart = useCallback(\n (\n e: React.DragEvent,\n event: CalendarEvent,\n monthIndex: number,\n spanStartDay: number\n ) => {\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.setData(\"text/plain\", event.id);\n\n const rect = e.currentTarget.getBoundingClientRect();\n const clickY = e.clientY - rect.top;\n const dayOffset = Math.floor(clickY / rowHeight);\n const grabDay = spanStartDay + dayOffset;\n\n setDragGrabOffsetY(clickY);\n setDragCardHeight(rect.height);\n const grabDate = new Date(year, monthIndex, grabDay);\n const startDate = event.date;\n const offsetDays = Math.floor(\n (grabDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24)\n );\n setDragOffset(offsetDays);\n\n requestAnimationFrame(() => {\n setDraggingEvent(event);\n });\n },\n [year, rowHeight]\n );\n\n const handleDragOver = useCallback(\n (e: React.DragEvent, month: number, day: number) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = \"move\";\n\n if (draggingEvent && dragGrabOffsetY > 0) {\n const dayOffset = Math.floor(dragGrabOffsetY / rowHeight);\n let cardTopDay = day - dayOffset;\n let cardTopMonth = month;\n\n while (cardTopDay < 1 && cardTopMonth > 0) {\n cardTopMonth--;\n cardTopDay += getDaysInMonth(year, cardTopMonth);\n }\n let daysInMonth = getDaysInMonth(year, cardTopMonth);\n while (cardTopDay > daysInMonth && cardTopMonth < 11) {\n cardTopDay -= daysInMonth;\n cardTopMonth++;\n daysInMonth = getDaysInMonth(year, cardTopMonth);\n }\n cardTopDay = Math.max(\n 1,\n Math.min(cardTopDay, getDaysInMonth(year, cardTopMonth))\n );\n\n setDragOverCell({ month: cardTopMonth, day: cardTopDay });\n } else {\n setDragOverCell({ month, day });\n }\n setDragPosition({ x: e.clientX, y: e.clientY });\n },\n [draggingEvent, dragGrabOffsetY, year, rowHeight]\n );\n\n const handleDragLeave = useCallback(() => {\n setDragOverCell(null);\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n if (draggingEvent && onEventMove && dragOverCell) {\n const newStartDate = new Date(\n year,\n dragOverCell.month,\n dragOverCell.day\n );\n\n let newEndDate: Date | undefined;\n if (draggingEvent.endDate) {\n const duration =\n draggingEvent.endDate.getTime() - draggingEvent.date.getTime();\n newEndDate = new Date(newStartDate.getTime() + duration);\n }\n\n onEventMove(draggingEvent, newStartDate, newEndDate);\n }\n setDragOverCell(null);\n setDragPosition(null);\n setDraggingEvent(null);\n setDragOffset(0);\n },\n [draggingEvent, dragOverCell, year, onEventMove]\n );\n\n const handleDragEnd = useCallback(() => {\n setDraggingEvent(null);\n setDragOverCell(null);\n setDragPosition(null);\n setDragGrabOffsetY(0);\n setDragCardHeight(0);\n }, []);\n\n const handleConfirmMove = useCallback(() => {\n if (pendingMove && onEventMove) {\n onEventMove(\n pendingMove.event,\n pendingMove.newStartDate,\n pendingMove.newEndDate\n );\n }\n setPendingMove(null);\n }, [pendingMove, onEventMove]);\n\n const handleCancelMove = useCallback(() => {\n setPendingMove(null);\n }, []);\n\n const handleResizeStart = useCallback(\n (e: React.DragEvent, event: CalendarEvent, edge: \"start\" | \"end\") => {\n e.stopPropagation();\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.setData(\"text/plain\", `resize-${event.id}`);\n requestAnimationFrame(() => {\n setResizingEvent({ event, edge });\n });\n },\n []\n );\n\n const handleResizeDrop = useCallback(\n (month: number, day: number) => {\n if (!resizingEvent || !onEventMove) return;\n\n const { event, edge } = resizingEvent;\n const dropDate = new Date(year, month, day);\n\n let newStartDate = event.date;\n let newEndDate = event.endDate || event.date;\n\n if (edge === \"start\") {\n if (dropDate <= newEndDate) {\n newStartDate = dropDate;\n }\n } else {\n if (dropDate >= newStartDate) {\n newEndDate = dropDate;\n }\n }\n\n const finalEndDate =\n newStartDate.getTime() === newEndDate.getTime()\n ? undefined\n : newEndDate;\n onEventMove(event, newStartDate, finalEndDate);\n\n setResizingEvent(null);\n setDragOverCell(null);\n setDragPosition(null);\n },\n [resizingEvent, year, onEventMove]\n );\n\n const handleResizeEnd = useCallback(() => {\n setResizingEvent(null);\n setDragOverCell(null);\n setDragPosition(null);\n }, []);\n\n useEffect(() => {\n const handleGlobalMouseUp = () => {\n setResizingEvent(null);\n setDraggingEvent(null);\n setDragOverCell(null);\n setDragPosition(null);\n setDragGrabOffsetY(0);\n setDragCardHeight(0);\n setDragOffset(0);\n // End range selection on global mouse up\n if (rangeSelectionStart) {\n handleRangeSelectEnd();\n }\n };\n\n window.addEventListener(\"mouseup\", handleGlobalMouseUp);\n window.addEventListener(\"dragend\", handleGlobalMouseUp);\n return () => {\n window.removeEventListener(\"mouseup\", handleGlobalMouseUp);\n window.removeEventListener(\"dragend\", handleGlobalMouseUp);\n };\n }, [rangeSelectionStart, handleRangeSelectEnd]);\n\n const getWeekdayName = (month: number, day: number) => {\n const date = new Date(year, month, day);\n return [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"][date.getDay()];\n };\n\n return (\n <div ref={containerRef} style={styles.container}>\n {/* ドラッグ中のフローティング日付表示 */}\n {draggingEvent &&\n dragOverCell &&\n dragPosition &&\n (() => {\n const cardTop = dragPosition.y - dragGrabOffsetY;\n const cardBottom = cardTop + dragCardHeight;\n const showBelow = cardTop < 80;\n return (\n <div\n style={{\n ...styles.floatingDate,\n left: dragPosition.x,\n top: showBelow ? cardBottom + 8 : cardTop - 8,\n transform: showBelow\n ? \"translateX(-50%)\"\n : \"translateX(-50%) translateY(-100%)\",\n }}\n >\n <div style={styles.floatingDateContent}>\n <div>\n {dragOverCell.month + 1}月{dragOverCell.day}日(\n {getWeekdayName(dragOverCell.month, dragOverCell.day)})\n </div>\n <div style={styles.floatingDateSubtext}>\n {draggingEvent.title}\n </div>\n </div>\n </div>\n );\n })()}\n\n {/* リサイズ中のフローティング日付表示 */}\n {resizingEvent && dragOverCell && dragPosition && (\n <div\n style={{\n ...styles.floatingDate,\n left: dragPosition.x,\n top: dragPosition.y - 50,\n }}\n >\n <div style={styles.resizeFloatingContent}>\n <div>\n {resizingEvent.edge === \"start\" ? \"開始日:\" : \"終了日:\"}\n {dragOverCell.month + 1}月{dragOverCell.day}日(\n {getWeekdayName(dragOverCell.month, dragOverCell.day)})\n </div>\n <div style={styles.floatingDateSubtext}>\n {resizingEvent.event.title}\n </div>\n </div>\n </div>\n )}\n\n <div style={styles.flexContainer}>\n {/* 日付列 */}\n <div style={styles.dayColumn}>\n <div style={styles.dayHeaderCell}>日</div>\n {DAYS.map((day) => (\n <div key={day} style={{ ...styles.dayCell, height: rowHeight }}>\n {day}\n </div>\n ))}\n </div>\n\n {/* 月ごとの列 */}\n {MONTHS.map((monthName, monthIndex) => {\n const daysInMonth = getDaysInMonth(year, monthIndex);\n const spans = monthSpans[monthIndex];\n const laneMap = laneMaps[monthIndex];\n const laneCount = maxLanes[monthIndex]; // この月のレーン数\n\n return (\n <div key={monthIndex} style={styles.monthColumn}>\n {/* 月ヘッダー */}\n <div style={styles.monthHeader}>{monthName}</div>\n\n {/* 日付セル(背景) */}\n {DAYS.map((day) => {\n const isValidDay = day <= daysInMonth;\n const sunday = isValidDay && isSunday(year, monthIndex, day);\n const saturday =\n isValidDay && isSaturday(year, monthIndex, day);\n const isHovered =\n hoveredCell?.month === monthIndex && hoveredCell?.day === day;\n const isInRange = isValidDay && isInSelectionRange(monthIndex, day);\n const isHighlighted = isValidDay && isInHighlightRange(monthIndex, day);\n\n return (\n <div\n key={day}\n style={{\n ...styles.calendarCell,\n height: rowHeight,\n backgroundColor: isInRange\n ? \"rgba(59, 130, 246, 0.3)\"\n : isHighlighted\n ? \"rgba(59, 130, 246, 0.2)\"\n : getCellBackgroundColor(\n theme,\n isValidDay,\n sunday,\n saturday,\n isHovered && isValidDay && !isRangeSelecting\n ),\n cursor: isValidDay ? \"pointer\" : \"default\",\n userSelect: \"none\",\n }}\n onClick={() =>\n isValidDay && !isRangeSelecting && handleCellClick(monthIndex, day)\n }\n onDoubleClick={() =>\n isValidDay && handleCellDoubleClick(monthIndex, day)\n }\n onMouseDown={() =>\n isValidDay && handleRangeSelectStart(monthIndex, day)\n }\n onMouseEnter={() => {\n if (isValidDay) {\n setHoveredCell({ month: monthIndex, day });\n if (isRangeSelecting) {\n handleRangeSelectMove(monthIndex, day);\n }\n }\n }}\n onMouseLeave={() => setHoveredCell(null)}\n onDragOver={(e) =>\n isValidDay && handleDragOver(e, monthIndex, day)\n }\n onDragLeave={handleDragLeave}\n onDrop={(e) => {\n if (!isValidDay) return;\n if (resizingEvent) {\n handleResizeDrop(monthIndex, day);\n } else {\n handleDrop(e);\n }\n }}\n />\n );\n })}\n\n {/* ドロップインジケーター */}\n {(draggingEvent || resizingEvent) &&\n dragOverCell?.month === monthIndex &&\n dragOverCell.day <= daysInMonth && (\n <div\n style={{\n ...styles.dropIndicator,\n top: 24 + (dragOverCell.day - 1) * rowHeight,\n height: rowHeight,\n }}\n >\n <div style={styles.dropIndicatorInner} />\n </div>\n )}\n\n {/* イベントバー */}\n <div style={styles.eventBarContainer}>\n {spans.map((span) => {\n const laneIndex = laneMap.get(span.event.id) || 0;\n // この月のレーン数に応じた幅(重なりがある場合のみ分割)\n const laneWidth = 100 / laneCount;\n const left = laneIndex * laneWidth;\n\n const isDraggingThis = draggingEvent?.id === span.event.id;\n const isResizingThis =\n resizingEvent?.event.id === span.event.id;\n\n let displaySpan = span;\n if (isResizingThis && resizePreviewSpans) {\n const previewSpan = resizePreviewSpans.get(monthIndex);\n if (previewSpan) {\n displaySpan = previewSpan;\n } else {\n return null;\n }\n }\n\n const displayStartDay = displaySpan.startDay;\n const displayEndDay = displaySpan.endDay;\n const top = (displayStartDay - 1) * rowHeight + 2;\n const height =\n (displayEndDay - displayStartDay + 1) * rowHeight - 4;\n const spanDays = displayEndDay - displayStartDay + 1;\n\n const isInteractive = !draggingEvent && !resizingEvent;\n const isHovered = hoveredEventBar === span.event.id;\n\n return (\n <div\n key={span.event.id}\n style={{\n ...styles.eventBar,\n top,\n left: `${left}%`,\n width: `calc(${laneWidth}% - 4px)`,\n height,\n backgroundColor: getEventColor(span.event),\n borderRadius: `${span.isStart ? 4 : 0}px ${span.isStart ? 4 : 0}px ${span.isEnd ? 4 : 0}px ${span.isEnd ? 4 : 0}px`,\n opacity: isDraggingThis ? 0.3 : 1,\n border: isResizingThis\n ? \"2px dashed rgba(255, 255, 255, 0.8)\"\n : \"none\",\n zIndex: isResizingThis ? 30 : isHovered ? 50 : 10,\n filter: isHovered ? \"brightness(1.1)\" : \"none\",\n pointerEvents: isInteractive ? \"auto\" : \"none\",\n }}\n draggable\n onDragStart={(e) =>\n handleDragStart(\n e,\n span.event,\n monthIndex,\n span.startDay\n )\n }\n onDragEnd={handleDragEnd}\n onMouseEnter={(e) => {\n setHoveredEventBar(span.event.id);\n const rect = e.currentTarget.getBoundingClientRect();\n setHoveredEvent({\n event: span.event,\n x: rect.right + 8,\n y: rect.top,\n });\n }}\n onMouseLeave={() => {\n setHoveredEventBar(null);\n setHoveredEvent(null);\n }}\n onClick={(e) => {\n e.stopPropagation();\n onEventClick?.(span.event);\n }}\n >\n {/* 前月から続くインジケーター */}\n {!span.isStart && (\n <div style={{ ...styles.indicator, ...styles.indicatorTop }}>\n ▲\n </div>\n )}\n\n {/* 縦書きタイトル(2日以上) */}\n {span.isStart && spanDays >= 2 && (\n <div style={styles.verticalTitle}>\n <span\n style={{\n ...styles.truncate,\n maxHeight: \"100%\",\n padding: \"0 2px\",\n }}\n >\n {span.event.title}\n </span>\n </div>\n )}\n\n {/* 横書きタイトル(1日のみ) */}\n {span.isStart && spanDays === 1 && (\n <div style={styles.horizontalTitle}>\n <span style={styles.truncate}>{span.event.title}</span>\n </div>\n )}\n\n {/* 翌月へ続くインジケーター */}\n {!span.isEnd && (\n <div style={{ ...styles.indicator, ...styles.indicatorBottom }}>\n ▼\n </div>\n )}\n\n {/* リサイズハンドル */}\n {span.event.endDate && isInteractive && (\n <>\n {span.isStart && (\n <div\n style={{\n ...styles.resizeHandle,\n ...styles.resizeHandleTop,\n opacity:\n hoveredResizeHandle?.eventId === span.event.id &&\n hoveredResizeHandle?.edge === \"start\"\n ? 1\n : 0,\n }}\n draggable\n onDragStart={(e) => {\n e.stopPropagation();\n handleResizeStart(e, span.event, \"start\");\n }}\n onDragEnd={handleResizeEnd}\n onMouseEnter={() =>\n setHoveredResizeHandle({\n eventId: span.event.id,\n edge: \"start\",\n })\n }\n onMouseLeave={() => setHoveredResizeHandle(null)}\n />\n )}\n {span.isEnd && (\n <div\n style={{\n ...styles.resizeHandle,\n ...styles.resizeHandleBottom,\n opacity:\n hoveredResizeHandle?.eventId === span.event.id &&\n hoveredResizeHandle?.edge === \"end\"\n ? 1\n : 0,\n }}\n draggable\n onDragStart={(e) => {\n e.stopPropagation();\n handleResizeStart(e, span.event, \"end\");\n }}\n onDragEnd={handleResizeEnd}\n onMouseEnter={() =>\n setHoveredResizeHandle({\n eventId: span.event.id,\n edge: \"end\",\n })\n }\n onMouseLeave={() => setHoveredResizeHandle(null)}\n />\n )}\n </>\n )}\n </div>\n );\n })}\n\n {/* リサイズで新たに追加される月のプレビュースパン */}\n {resizingEvent &&\n resizePreviewSpans &&\n resizePreviewSpans.has(monthIndex) &&\n !spans.some((s) => s.event.id === resizingEvent.event.id) &&\n (() => {\n const previewSpan = resizePreviewSpans.get(monthIndex)!;\n // 元のイベントがあった月のレーンを取得\n let originalLaneIndex = 0;\n for (let m = 0; m < 12; m++) {\n const lane = laneMaps[m].get(resizingEvent.event.id);\n if (lane !== undefined) {\n originalLaneIndex = lane;\n break;\n }\n }\n // プレビュー月のレーン数を使用\n const previewLaneCount = maxLanes[monthIndex];\n const laneWidth = 100 / previewLaneCount;\n const left = Math.min(originalLaneIndex, previewLaneCount - 1) * laneWidth;\n const top = (previewSpan.startDay - 1) * rowHeight + 2;\n const height =\n (previewSpan.endDay - previewSpan.startDay + 1) *\n rowHeight -\n 4;\n\n return (\n <div\n key={`preview-${resizingEvent.event.id}`}\n style={{\n ...styles.eventBar,\n top,\n left: `${left}%`,\n width: `calc(${laneWidth}% - 4px)`,\n height,\n backgroundColor: getEventColor(resizingEvent.event),\n borderRadius: `${previewSpan.isStart ? 4 : 0}px ${previewSpan.isStart ? 4 : 0}px ${previewSpan.isEnd ? 4 : 0}px ${previewSpan.isEnd ? 4 : 0}px`,\n border: \"2px dashed rgba(255, 255, 255, 0.8)\",\n opacity: 0.7,\n zIndex: 30,\n }}\n >\n {!previewSpan.isStart && (\n <div style={{ ...styles.indicator, ...styles.indicatorTop }}>\n ▲\n </div>\n )}\n {!previewSpan.isEnd && (\n <div style={{ ...styles.indicator, ...styles.indicatorBottom }}>\n ▼\n </div>\n )}\n </div>\n );\n })()}\n </div>\n </div>\n );\n })}\n </div>\n\n {/* ホバーツールチップ */}\n {hoveredEvent && !draggingEvent && !resizingEvent && (\n <div\n style={{\n ...styles.tooltip,\n left: hoveredEvent.x,\n top: hoveredEvent.y,\n }}\n >\n <div style={styles.tooltipContent}>\n <div style={styles.tooltipTitle}>{hoveredEvent.event.title}</div>\n <div style={styles.tooltipDate}>\n {hoveredEvent.event.date.toLocaleDateString(\"ja-JP\", {\n month: \"short\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {hoveredEvent.event.endDate && (\n <>\n {\" 〜 \"}\n {hoveredEvent.event.endDate.toLocaleDateString(\"ja-JP\", {\n month: \"short\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n </>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* 移動/リサイズ確認ダイアログ */}\n {pendingMove && (\n <div style={styles.dialogOverlay}>\n <div style={styles.dialogContent}>\n <h3 style={styles.dialogTitle}>\n {pendingMove.isResize\n ? \"期間を変更しますか?\"\n : \"予定を移動しますか?\"}\n </h3>\n <div style={styles.dialogBody}>\n <div style={styles.dialogEventTitle}>{pendingMove.event.title}</div>\n <div style={{ marginTop: 4 }}>\n <span style={styles.dialogDateLabel}>変更前:</span>\n {pendingMove.event.date.toLocaleDateString(\"ja-JP\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {pendingMove.event.endDate && (\n <>\n {\" 〜 \"}\n {pendingMove.event.endDate.toLocaleDateString(\"ja-JP\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n </>\n )}\n </div>\n <div style={{ marginTop: 4 }}>\n <span style={styles.dialogDateLabel}>変更後:</span>\n {pendingMove.newStartDate.toLocaleDateString(\"ja-JP\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {pendingMove.newEndDate && (\n <>\n {\" 〜 \"}\n {pendingMove.newEndDate.toLocaleDateString(\"ja-JP\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n </>\n )}\n </div>\n </div>\n <div style={styles.dialogButtons}>\n <button\n onClick={handleCancelMove}\n style={{\n ...styles.dialogCancelButton,\n backgroundColor: hoveredCancelButton\n ? theme.bgGray100\n : \"transparent\",\n }}\n onMouseEnter={() => setHoveredCancelButton(true)}\n onMouseLeave={() => setHoveredCancelButton(false)}\n >\n キャンセル\n </button>\n <button\n onClick={handleConfirmMove}\n style={{\n ...styles.dialogConfirmButton,\n backgroundColor: hoveredConfirmButton\n ? theme.buttonPrimaryHover\n : theme.buttonPrimary,\n }}\n onMouseEnter={() => setHoveredConfirmButton(true)}\n onMouseLeave={() => setHoveredConfirmButton(false)}\n >\n {pendingMove.isResize ? \"変更する\" : \"移動する\"}\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -415,6 +415,7 @@ function YearlyCalendar({
|
|
|
415
415
|
onDateRangeSelect,
|
|
416
416
|
onEventClick,
|
|
417
417
|
onEventMove,
|
|
418
|
+
highlightRange,
|
|
418
419
|
categoryColors = {},
|
|
419
420
|
theme: customTheme
|
|
420
421
|
}) {
|
|
@@ -553,10 +554,21 @@ function YearlyCalendar({
|
|
|
553
554
|
return new Date(year, month, day).getTime();
|
|
554
555
|
};
|
|
555
556
|
const isInSelectionRange = (month, day) => {
|
|
556
|
-
if (
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
557
|
+
if (rangeSelectionStart && rangeSelectionEnd) {
|
|
558
|
+
const cellDate = dateToNumber(month, day);
|
|
559
|
+
const startDate = dateToNumber(rangeSelectionStart.month, rangeSelectionStart.day);
|
|
560
|
+
const endDate = dateToNumber(rangeSelectionEnd.month, rangeSelectionEnd.day);
|
|
561
|
+
const minDate = Math.min(startDate, endDate);
|
|
562
|
+
const maxDate = Math.max(startDate, endDate);
|
|
563
|
+
if (cellDate >= minDate && cellDate <= maxDate) return true;
|
|
564
|
+
}
|
|
565
|
+
return false;
|
|
566
|
+
};
|
|
567
|
+
const isInHighlightRange = (month, day) => {
|
|
568
|
+
if (!highlightRange) return false;
|
|
569
|
+
const cellDate = new Date(year, month, day).getTime();
|
|
570
|
+
const startDate = highlightRange.start.getTime();
|
|
571
|
+
const endDate = highlightRange.end.getTime();
|
|
560
572
|
const minDate = Math.min(startDate, endDate);
|
|
561
573
|
const maxDate = Math.max(startDate, endDate);
|
|
562
574
|
return cellDate >= minDate && cellDate <= maxDate;
|
|
@@ -818,12 +830,13 @@ function YearlyCalendar({
|
|
|
818
830
|
const saturday = isValidDay && isSaturday(year, monthIndex, day);
|
|
819
831
|
const isHovered = (hoveredCell == null ? void 0 : hoveredCell.month) === monthIndex && (hoveredCell == null ? void 0 : hoveredCell.day) === day;
|
|
820
832
|
const isInRange = isValidDay && isInSelectionRange(monthIndex, day);
|
|
833
|
+
const isHighlighted = isValidDay && isInHighlightRange(monthIndex, day);
|
|
821
834
|
return /* @__PURE__ */ jsx(
|
|
822
835
|
"div",
|
|
823
836
|
{
|
|
824
837
|
style: __spreadProps(__spreadValues({}, styles.calendarCell), {
|
|
825
838
|
height: rowHeight,
|
|
826
|
-
backgroundColor: isInRange ? "rgba(59, 130, 246, 0.3)" : getCellBackgroundColor(
|
|
839
|
+
backgroundColor: isInRange ? "rgba(59, 130, 246, 0.3)" : isHighlighted ? "rgba(59, 130, 246, 0.2)" : getCellBackgroundColor(
|
|
827
840
|
theme,
|
|
828
841
|
isValidDay,
|
|
829
842
|
sunday,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/YearlyCalendar/styles.ts","../src/YearlyCalendar/YearlyCalendar.tsx"],"names":["isSunday","isSaturday"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAIO,IAAM,YAAA,GAAsC;AAAA;AAAA,EAEjD,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU,SAAA;AAAA,EACV,SAAA,EAAW,SAAA;AAAA,EACX,QAAA,EAAU,SAAA;AAAA,EACV,UAAA,EAAY,SAAA;AAAA,EACZ,eAAA,EAAiB,0BAAA;AAAA;AAAA,EAGjB,aAAA,EAAe,SAAA;AAAA,EACf,mBAAA,EAAqB,SAAA;AAAA;AAAA,EAGrB,WAAA,EAAa,SAAA;AAAA,EACb,aAAA,EAAe,SAAA;AAAA,EACf,SAAA,EAAW,SAAA;AAAA;AAAA,EAGX,SAAA,EAAW,SAAA;AAAA,EACX,WAAA,EAAa,SAAA;AAAA,EACb,aAAA,EAAe,oBAAA;AAAA,EACf,aAAA,EAAe,SAAA;AAAA,EACf,kBAAA,EAAoB,SAAA;AAAA,EACpB,cAAA,EAAgB,SAAA;AAAA,EAChB,gBAAA,EAAkB;AACpB;AAGO,SAAS,WAAW,MAAA,EAA6C;AACtE,EAAA,IAAI,CAAC,QAAQ,OAAO,YAAA;AACpB,EAAA,OAAO,kCAAK,YAAA,CAAA,EAAiB,MAAA,CAAA;AAC/B;AAGO,SAAS,aAAa,KAAA,EAA8B;AACzD,EAAA,OAAO;AAAA;AAAA,IAEL,SAAA,EAAW;AAAA,MACT,KAAA,EAAO,MAAA;AAAA,MACP,MAAA,EAAQ,MAAA;AAAA,MACR,QAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAS,MAAA;AAAA,MACT,aAAA,EAAe;AAAA,KACjB;AAAA;AAAA,IAGA,aAAA,EAAe;AAAA,MACb,OAAA,EAAS,MAAA;AAAA,MACT,KAAA,EAAO,MAAA;AAAA,MACP,IAAA,EAAM;AAAA,KACR;AAAA;AAAA,IAGA,SAAA,EAAW;AAAA,MACT,QAAA,EAAU,QAAA;AAAA,MACV,IAAA,EAAM,CAAA;AAAA,MACN,MAAA,EAAQ,EAAA;AAAA,MACR,iBAAiB,KAAA,CAAM,SAAA;AAAA,MACvB,UAAA,EAAY,CAAA;AAAA,MACZ,OAAA,EAAS,MAAA;AAAA,MACT,aAAA,EAAe;AAAA,KACjB;AAAA;AAAA,IAGA,aAAA,EAAe;AAAA,MACb,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,aAAa,CAAA,CAAA;AAAA,MACxC,iBAAiB,KAAA,CAAM,SAAA;AAAA,MACvB,OAAA,EAAS,OAAA;AAAA,MACT,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB,QAAA;AAAA,MAChB,UAAA,EAAY,GAAA;AAAA,MACZ,QAAA,EAAU,EAAA;AAAA,MACV,KAAA,EAAO;AAAA,KACT;AAAA;AAAA,IAGA,OAAA,EAAS;AAAA,MACP,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,aAAa,CAAA,CAAA;AAAA,MACxC,iBAAiB,KAAA,CAAM,QAAA;AAAA,MACvB,OAAA,EAAS,OAAA;AAAA,MACT,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB,QAAA;AAAA,MAChB,UAAA,EAAY,GAAA;AAAA,MACZ,QAAA,EAAU,EAAA;AAAA,MACV,KAAA,EAAO;AAAA,KACT;AAAA;AAAA,IAGA,WAAA,EAAa;AAAA,MACX,QAAA,EAAU,UAAA;AAAA,MACV,IAAA,EAAM,CAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA;AAAA,IAGA,WAAA,EAAa;AAAA,MACX,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,aAAa,CAAA,CAAA;AAAA,MACxC,iBAAiB,KAAA,CAAM,SAAA;AAAA,MACvB,OAAA,EAAS,OAAA;AAAA,MACT,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB,QAAA;AAAA,MAChB,UAAA,EAAY,GAAA;AAAA,MACZ,QAAA,EAAU;AAAA,KACZ;AAAA;AAAA,IAGA,YAAA,EAAc;AAAA,MACZ,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,aAAa,CAAA,CAAA;AAAA,MACxC,QAAA,EAAU;AAAA,KACZ;AAAA;AAAA,IAGA,iBAAA,EAAmB;AAAA,MACjB,QAAA,EAAU,UAAA;AAAA,MACV,GAAA,EAAK,EAAA;AAAA,MACL,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO,KAAA;AAAA,MACP,OAAA,EAAS,OAAA;AAAA,MACT,aAAA,EAAe,MAAA;AAAA,MACf,MAAA,EAAQ;AAAA,KACV;AAAA;AAAA,IAGA,QAAA,EAAU;AAAA,MACR,QAAA,EAAU,UAAA;AAAA,MACV,MAAA,EAAQ,MAAA;AAAA,MACR,UAAA,EAAY,6BAAA;AAAA,MACZ,SAAA,EAAW;AAAA,KACb;AAAA;AAAA,IAGA,aAAA,EAAe;AAAA,MACb,QAAA,EAAU,UAAA;AAAA,MACV,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO,CAAA;AAAA,MACP,aAAA,EAAe,MAAA;AAAA,MACf,MAAA,EAAQ;AAAA,KACV;AAAA,IAEA,kBAAA,EAAoB;AAAA,MAClB,MAAA,EAAQ,MAAA;AAAA,MACR,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,mBAAmB,CAAA,CAAA;AAAA,MAC9C,iBAAiB,KAAA,CAAM,eAAA;AAAA,MACvB,YAAA,EAAc;AAAA,KAChB;AAAA;AAAA,IAGA,YAAA,EAAc;AAAA,MACZ,QAAA,EAAU,OAAA;AAAA,MACV,MAAA,EAAQ,GAAA;AAAA,MACR,aAAA,EAAe,MAAA;AAAA,MACf,SAAA,EAAW;AAAA,KACb;AAAA,IAEA,mBAAA,EAAqB;AAAA,MACnB,iBAAiB,KAAA,CAAM,cAAA;AAAA,MACvB,OAAO,KAAA,CAAM,WAAA;AAAA,MACb,QAAA,EAAU,EAAA;AAAA,MACV,UAAA,EAAY,GAAA;AAAA,MACZ,YAAA,EAAc,CAAA;AAAA,MACd,OAAA,EAAS,UAAA;AAAA,MACT,SAAA,EAAW;AAAA,KACb;AAAA,IAEA,mBAAA,EAAqB;AAAA,MACnB,QAAA,EAAU,EAAA;AAAA,MACV,UAAA,EAAY,GAAA;AAAA,MACZ,OAAA,EAAS;AAAA,KACX;AAAA;AAAA,IAGA,qBAAA,EAAuB;AAAA,MACrB,iBAAiB,KAAA,CAAM,gBAAA;AAAA,MACvB,OAAO,KAAA,CAAM,WAAA;AAAA,MACb,QAAA,EAAU,EAAA;AAAA,MACV,UAAA,EAAY,GAAA;AAAA,MACZ,YAAA,EAAc,CAAA;AAAA,MACd,OAAA,EAAS,UAAA;AAAA,MACT,SAAA,EAAW;AAAA,KACb;AAAA;AAAA,IAGA,OAAA,EAAS;AAAA,MACP,QAAA,EAAU,OAAA;AAAA,MACV,MAAA,EAAQ,GAAA;AAAA,MACR,aAAA,EAAe;AAAA,KACjB;AAAA,IAEA,cAAA,EAAgB;AAAA,MACd,iBAAiB,KAAA,CAAM,SAAA;AAAA,MACvB,OAAO,KAAA,CAAM,WAAA;AAAA,MACb,QAAA,EAAU,EAAA;AAAA,MACV,YAAA,EAAc,CAAA;AAAA,MACd,OAAA,EAAS,SAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,SAAA,EAAW;AAAA,KACb;AAAA,IAEA,YAAA,EAAc;AAAA,MACZ,UAAA,EAAY;AAAA,KACd;AAAA,IAEA,WAAA,EAAa;AAAA,MACX,KAAA,EAAO,0BAAA;AAAA,MACP,QAAA,EAAU,EAAA;AAAA,MACV,SAAA,EAAW;AAAA,KACb;AAAA;AAAA,IAGA,aAAA,EAAe;AAAA,MACb,QAAA,EAAU,OAAA;AAAA,MACV,KAAA,EAAO,CAAA;AAAA,MACP,MAAA,EAAQ,GAAA;AAAA,MACR,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB,QAAA;AAAA,MAChB,iBAAiB,KAAA,CAAM;AAAA,KACzB;AAAA,IAEA,aAAA,EAAe;AAAA,MACb,iBAAiB,KAAA,CAAM,OAAA;AAAA,MACvB,YAAA,EAAc,CAAA;AAAA,MACd,SAAA,EAAW,2EAAA;AAAA,MACX,OAAA,EAAS,EAAA;AAAA,MACT,QAAA,EAAU,GAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACV;AAAA,IAEA,WAAA,EAAa;AAAA,MACX,UAAA,EAAY,GAAA;AAAA,MACZ,OAAO,KAAA,CAAM,WAAA;AAAA,MACb,YAAA,EAAc;AAAA,KAChB;AAAA,IAEA,UAAA,EAAY;AAAA,MACV,QAAA,EAAU,EAAA;AAAA,MACV,OAAO,KAAA,CAAM,aAAA;AAAA,MACb,YAAA,EAAc;AAAA,KAChB;AAAA,IAEA,gBAAA,EAAkB;AAAA,MAChB,UAAA,EAAY,GAAA;AAAA,MACZ,OAAO,KAAA,CAAM;AAAA,KACf;AAAA,IAEA,eAAA,EAAiB;AAAA,MACf,OAAO,KAAA,CAAM;AAAA,KACf;AAAA,IAEA,aAAA,EAAe;AAAA,MACb,OAAA,EAAS,MAAA;AAAA,MACT,GAAA,EAAK,CAAA;AAAA,MACL,cAAA,EAAgB;AAAA,KAClB;AAAA,IAEA,kBAAA,EAAoB;AAAA,MAClB,OAAA,EAAS,UAAA;AAAA,MACT,QAAA,EAAU,EAAA;AAAA,MACV,OAAO,KAAA,CAAM,aAAA;AAAA,MACb,eAAA,EAAiB,aAAA;AAAA,MACjB,MAAA,EAAQ,MAAA;AAAA,MACR,YAAA,EAAc,CAAA;AAAA,MACd,MAAA,EAAQ;AAAA,KACV;AAAA,IAEA,mBAAA,EAAqB;AAAA,MACnB,OAAA,EAAS,UAAA;AAAA,MACT,QAAA,EAAU,EAAA;AAAA,MACV,OAAO,KAAA,CAAM,WAAA;AAAA,MACb,iBAAiB,KAAA,CAAM,aAAA;AAAA,MACvB,MAAA,EAAQ,MAAA;AAAA,MACR,YAAA,EAAc,CAAA;AAAA,MACd,MAAA,EAAQ;AAAA,KACV;AAAA;AAAA,IAGA,YAAA,EAAc;AAAA,MACZ,QAAA,EAAU,UAAA;AAAA,MACV,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO,CAAA;AAAA,MACP,MAAA,EAAQ,CAAA;AAAA,MACR,MAAA,EAAQ,WAAA;AAAA,MACR,OAAA,EAAS,CAAA;AAAA,MACT,eAAA,EAAiB;AAAA,KACnB;AAAA,IAEA,eAAA,EAAiB;AAAA,MACf,GAAA,EAAK,CAAA;AAAA,MACL,mBAAA,EAAqB,CAAA;AAAA,MACrB,oBAAA,EAAsB;AAAA,KACxB;AAAA,IAEA,kBAAA,EAAoB;AAAA,MAClB,MAAA,EAAQ,CAAA;AAAA,MACR,sBAAA,EAAwB,CAAA;AAAA,MACxB,uBAAA,EAAyB;AAAA,KAC3B;AAAA;AAAA,IAGA,SAAA,EAAW;AAAA,MACT,QAAA,EAAU,UAAA;AAAA,MACV,IAAA,EAAM,KAAA;AAAA,MACN,SAAA,EAAW,kBAAA;AAAA,MACX,QAAA,EAAU,CAAA;AAAA,MACV,KAAA,EAAO;AAAA,KACT;AAAA,IAEA,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK;AAAA,KACP;AAAA,IAEA,eAAA,EAAiB;AAAA,MACf,MAAA,EAAQ;AAAA,KACV;AAAA;AAAA,IAGA,aAAA,EAAe;AAAA,MACb,QAAA,EAAU,UAAA;AAAA,MACV,KAAA,EAAO,CAAA;AAAA,MACP,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB,QAAA;AAAA,MAChB,QAAA,EAAU,EAAA;AAAA,MACV,KAAA,EAAO,SAAA;AAAA,MACP,UAAA,EAAY,GAAA;AAAA,MACZ,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa;AAAA,KACf;AAAA;AAAA,IAGA,eAAA,EAAiB;AAAA,MACf,QAAA,EAAU,UAAA;AAAA,MACV,KAAA,EAAO,CAAA;AAAA,MACP,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB,QAAA;AAAA,MAChB,QAAA,EAAU,CAAA;AAAA,MACV,KAAA,EAAO,SAAA;AAAA,MACP,UAAA,EAAY,GAAA;AAAA,MACZ,QAAA,EAAU,QAAA;AAAA,MACV,OAAA,EAAS;AAAA,KACX;AAAA,IAEA,QAAA,EAAU;AAAA,MACR,QAAA,EAAU,QAAA;AAAA,MACV,YAAA,EAAc,UAAA;AAAA,MACd,UAAA,EAAY;AAAA;AACd,GACF;AACF;AAGO,SAAS,sBAAA,CACd,KAAA,EACA,UAAA,EACAA,SAAAA,EACAC,aACA,SAAA,EACQ;AACR,EAAA,IAAI,CAAC,UAAA,EAAY,OAAO,KAAA,CAAM,SAAA;AAC9B,EAAA,IAAI,SAAA,SAAkB,KAAA,CAAM,QAAA;AAC5B,EAAA,IAAID,SAAAA,SAAiB,KAAA,CAAM,QAAA;AAC3B,EAAA,IAAIC,WAAAA,SAAmB,KAAA,CAAM,UAAA;AAC7B,EAAA,OAAO,KAAA,CAAM,OAAA;AACf;AChXA,IAAM,MAAA,GAAS;AAAA,EACb,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,EAAA,EAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AACvD,IAAM,cAAA,GAAiB,EAAA;AACvB,IAAM,aAAA,GAAgB,EAAA;AAEtB,SAAS,cAAA,CAAe,MAAc,KAAA,EAAuB;AAC3D,EAAA,OAAO,IAAI,IAAA,CAAK,IAAA,EAAM,QAAQ,CAAA,EAAG,CAAC,EAAE,OAAA,EAAQ;AAC9C;AAEA,SAAS,QAAA,CAAS,IAAA,EAAc,KAAA,EAAe,GAAA,EAAsB;AACnE,EAAA,OAAO,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,GAAG,CAAA,CAAE,QAAO,KAAM,CAAA;AACjD;AAEA,SAAS,UAAA,CAAW,IAAA,EAAc,KAAA,EAAe,GAAA,EAAsB;AACrE,EAAA,OAAO,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,GAAG,CAAA,CAAE,QAAO,KAAM,CAAA;AACjD;AAUA,SAAS,aAAA,CACP,MAAA,EACA,IAAA,EACA,KAAA,EACa;AACb,EAAA,MAAM,QAAqB,EAAC;AAC5B,EAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,EAAM,KAAK,CAAA;AAE9C,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAU;AACxB,IAAA,MAAM,YAAY,KAAA,CAAM,IAAA;AACxB,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,IAAA;AAEvC,IAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,CAAC,CAAA;AAC1C,IAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,WAAA,EAAa,EAAA,EAAI,IAAI,EAAE,CAAA;AAE9D,IAAA,IAAI,SAAA,GAAY,QAAA,IAAY,OAAA,GAAU,UAAA,EAAY;AAChD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,SAAA,IAAa,UAAA,GAAa,SAAA,CAAU,SAAQ,GAAI,CAAA;AAClE,IAAA,MAAM,OAAA,GAAU,OAAA,IAAW,QAAA,GAAW,OAAA,CAAQ,SAAQ,GAAI,WAAA;AAE1D,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,KAAA;AAAA,MACA,QAAA,EAAU,SAAA;AAAA,MACV,MAAA,EAAQ,OAAA;AAAA,MACR,SACE,SAAA,CAAU,WAAA,OAAkB,IAAA,IAAQ,SAAA,CAAU,UAAS,KAAM,KAAA;AAAA,MAC/D,OAAO,OAAA,CAAQ,WAAA,OAAkB,IAAA,IAAQ,OAAA,CAAQ,UAAS,KAAM;AAAA,KACjE,CAAA;AAAA,EACH,CAAC,CAAA;AAED,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,eAAe,KAAA,EAAyC;AAC/D,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAoB;AACxC,EAAA,MAAM,QAA8B,EAAC;AACrC,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,QAAA,GAAW,CAAA,CAAE,QAAQ,CAAA;AAEhE,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,IAAA,KAAS;AACvB,IAAA,IAAI,SAAA,GAAY,MAAM,SAAA,CAAU,CAAC,SAAS,IAAA,CAAK,MAAA,GAAS,KAAK,QAAQ,CAAA;AACrE,IAAA,IAAI,cAAc,EAAA,EAAI;AACpB,MAAA,SAAA,GAAY,KAAA,CAAM,MAAA;AAClB,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAA,CAAK,QAAQ,CAAA;AAAA,IACpC,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,SAAS,CAAA,CAAE,MAAA,GAAS,IAAA,CAAK,MAAA;AAAA,IACjC;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,EAAA,EAAI,SAAS,CAAA;AAAA,EACtC,CAAC,CAAA;AAED,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,cAAA,CAAe;AAAA,EAC7B,IAAA;AAAA,EACA,SAAS,EAAC;AAAA,EACV,WAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAiB,EAAC;AAAA,EAClB,KAAA,EAAO;AACT,CAAA,EAAwB;AAEtB,EAAA,MAAM,KAAA,GAAQ,QAAQ,MAAM,UAAA,CAAW,WAAW,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAClE,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAM,YAAA,CAAa,KAAK,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEzD,EAAA,MAAM,YAAA,GAAe,OAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,cAAc,CAAA;AAEzD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,kBAAkB,MAAM;AAC5B,MAAA,IAAI,aAAa,OAAA,EAAS;AACxB,QAAA,MAAM,eAAA,GAAkB,aAAa,OAAA,CAAQ,YAAA;AAC7C,QAAA,MAAM,mBAAmB,IAAA,CAAK,KAAA;AAAA,UAAA,CAC3B,kBAAkB,aAAA,IAAiB;AAAA,SACtC;AACA,QAAA,YAAA,CAAa,IAAA,CAAK,GAAA,CAAI,gBAAA,EAAkB,cAAc,CAAC,CAAA;AAAA,MACzD;AAAA,IACF,CAAA;AAEA,IAAA,eAAA,EAAgB;AAChB,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,eAAe,CAAA;AACjD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,eAAe,CAAA;AAAA,EACnE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,QAAA;AAAA,IACxC;AAAA,GACF;AACA,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAiB,CAAC,CAAA;AACtD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAG9B,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAG9B,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,SAAiB,CAAC,CAAA;AAChE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAiB,CAAC,CAAA;AAC9D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAK5B,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAI9B,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAGhC,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAG5B,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,SAAwB,IAAI,CAAA;AAC1E,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAI,SAG5C,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAI,SAAS,KAAK,CAAA;AACpE,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAI,SAAS,KAAK,CAAA;AAGtE,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAI,SAG5C,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAI,SAGxC,IAAI,CAAA;AACd,EAAA,MAAM,mBAAmB,mBAAA,KAAwB,IAAA;AAEjD,EAAA,MAAM,UAAA,GAAa,QAAQ,MAAM;AAC/B,IAAA,MAAM,SAAwB,EAAC;AAC/B,IAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,EAAA,EAAI,KAAA,EAAA,EAAS;AACvC,MAAA,MAAA,CAAO,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQ,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,IAChD;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG,CAAC,MAAA,EAAQ,IAAI,CAAC,CAAA;AAEjB,EAAA,MAAM,QAAA,GAAW,QAAQ,MAAM;AAC7B,IAAA,OAAO,WAAW,GAAA,CAAI,CAAC,KAAA,KAAU,cAAA,CAAe,KAAK,CAAC,CAAA;AAAA,EACxD,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAGf,EAAA,MAAM,QAAA,GAAW,QAAQ,MAAM;AAC7B,IAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,KAAY;AAC/B,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,IAAA,KAAS;AACxB,QAAA,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,GAAO,CAAC,CAAA;AAAA,MAC9B,CAAC,CAAA;AACD,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,CAAC,CAAA;AAAA,IACxB,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAGb,EAAA,MAAM,kBAAA,GAAqB,QAAQ,MAAM;AACvC,IAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,YAAA,EAAc,OAAO,IAAA;AAE5C,IAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,aAAA;AACxB,IAAA,MAAM,WAAW,IAAI,IAAA,CAAK,MAAM,YAAA,CAAa,KAAA,EAAO,aAAa,GAAG,CAAA;AAEpE,IAAA,IAAI,YAAA,GAAe,IAAI,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AACtC,IAAA,IAAI,aAAa,IAAI,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,MAAM,IAAI,CAAA;AAErD,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,QAAA,YAAA,GAAe,QAAA;AAAA,MACjB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAI,YAAY,YAAA,EAAc;AAC5B,QAAA,UAAA,GAAa,QAAA;AAAA,MACf;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,uBAAY,GAAA,EAAuB;AACzC,IAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,EAAA,EAAI,KAAA,EAAA,EAAS;AACvC,MAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,EAAM,KAAK,CAAA;AAC9C,MAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,CAAC,CAAA;AAC1C,MAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,WAAA,EAAa,EAAA,EAAI,IAAI,EAAE,CAAA;AAE9D,MAAA,IAAI,YAAA,GAAe,QAAA,IAAY,UAAA,GAAa,UAAA,EAAY;AAExD,MAAA,MAAM,SAAA,GAAY,YAAA,IAAgB,UAAA,GAAa,YAAA,CAAa,SAAQ,GAAI,CAAA;AACxE,MAAA,MAAM,OAAA,GACJ,UAAA,IAAc,QAAA,GAAW,UAAA,CAAW,SAAQ,GAAI,WAAA;AAElD,MAAA,KAAA,CAAM,IAAI,KAAA,EAAO;AAAA,QACf,KAAA;AAAA,QACA,QAAA,EAAU,SAAA;AAAA,QACV,MAAA,EAAQ,OAAA;AAAA,QACR,SACE,YAAA,CAAa,WAAA,OAAkB,IAAA,IAC/B,YAAA,CAAa,UAAS,KAAM,KAAA;AAAA,QAC9B,OACE,UAAA,CAAW,WAAA,OAAkB,IAAA,IAAQ,UAAA,CAAW,UAAS,KAAM;AAAA,OAClE,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,EAAG,CAAC,aAAA,EAAe,YAAA,EAAc,IAAI,CAAC,CAAA;AAEtC,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAiC;AACtD,IAAA,IAAI,KAAA,CAAM,KAAA,EAAO,OAAO,KAAA,CAAM,KAAA;AAC9B,IAAA,IAAI,KAAA,CAAM,QAAA,IAAY,cAAA,CAAe,KAAA,CAAM,QAAQ,CAAA,EAAG;AACpD,MAAA,OAAO,cAAA,CAAe,MAAM,QAAQ,CAAA;AAAA,IACtC;AACA,IAAA,OAAO,SAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,QAAQ,MAAM;AACjC,IAAA,MAAM,GAAA,uBAAU,GAAA,EAA6B;AAC7C,IAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAU;AACxB,MAAA,MAAM,YAAY,KAAA,CAAM,IAAA;AACxB,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,IAAA;AACvC,MAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,SAAS,CAAA;AAClC,MAAA,OAAO,WAAW,OAAA,EAAS;AACzB,QAAA,MAAM,OAAA,GAAU,CAAA,EAAG,OAAA,CAAQ,WAAA,EAAa,CAAA,CAAA,EAAI,OAAA,CAAQ,QAAA,EAAU,CAAA,CAAA,EAAI,OAAA,CAAQ,OAAA,EAAS,CAAA,CAAA;AACnF,QAAA,MAAM,QAAA,GAAW,GAAA,CAAI,GAAA,CAAI,OAAO,KAAK,EAAC;AACtC,QAAA,GAAA,CAAI,IAAI,OAAA,EAAS,CAAC,GAAG,QAAA,EAAU,KAAK,CAAC,CAAA;AACrC,QAAA,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,OAAA,EAAQ,GAAI,CAAC,CAAA;AAAA,MACvC;AAAA,IACF,CAAC,CAAA;AACD,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,EAAe,GAAA,KAAiC;AACxE,IAAA,MAAM,UAAU,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,IAAI,GAAG,CAAA,CAAA;AACvC,IAAA,OAAO,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA,IAAK,EAAC;AAAA,EACvC,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,EAAe,GAAA,KAAgB;AACtD,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,EAAM,KAAK,CAAA;AAC9C,IAAA,IAAI,MAAM,WAAA,EAAa;AACvB,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,GAAG,CAAA;AACtC,IAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,KAAA,EAAO,GAAG,CAAA;AAC9C,IAAA,WAAA,CAAY,MAAM,UAAU,CAAA;AAAA,EAC9B,CAAA;AAEA,EAAA,MAAM,qBAAA,GAAwB,CAAC,KAAA,EAAe,GAAA,KAAgB;AAC5D,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACxB,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,EAAM,KAAK,CAAA;AAC9C,IAAA,IAAI,MAAM,WAAA,EAAa;AACvB,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,GAAG,CAAA;AACtC,IAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,KAAA,EAAO,GAAG,CAAA;AAC9C,IAAA,iBAAA,CAAkB,MAAM,UAAU,CAAA;AAAA,EACpC,CAAA;AAGA,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,EAAe,GAAA,KAAwB;AAC3D,IAAA,OAAO,IAAI,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,GAAG,EAAE,OAAA,EAAQ;AAAA,EAC5C,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,KAAA,EAAe,GAAA,KAAyB;AAClE,IAAA,IAAI,CAAC,mBAAA,IAAuB,CAAC,iBAAA,EAAmB,OAAO,KAAA;AACvD,IAAA,MAAM,QAAA,GAAW,YAAA,CAAa,KAAA,EAAO,GAAG,CAAA;AACxC,IAAA,MAAM,SAAA,GAAY,YAAA,CAAa,mBAAA,CAAoB,KAAA,EAAO,oBAAoB,GAAG,CAAA;AACjF,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,iBAAA,CAAkB,KAAA,EAAO,kBAAkB,GAAG,CAAA;AAC3E,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA;AAC3C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA;AAC3C,IAAA,OAAO,QAAA,IAAY,WAAW,QAAA,IAAY,OAAA;AAAA,EAC5C,CAAA;AAEA,EAAA,MAAM,sBAAA,GAAyB,WAAA;AAAA,IAC7B,CAAC,OAAe,GAAA,KAAgB;AAC9B,MAAA,IAAI,CAAC,iBAAA,EAAmB;AACxB,MAAA,IAAI,iBAAiB,aAAA,EAAe;AACpC,MAAA,sBAAA,CAAuB,EAAE,KAAA,EAAO,GAAA,EAAK,CAAA;AACrC,MAAA,oBAAA,CAAqB,EAAE,KAAA,EAAO,GAAA,EAAK,CAAA;AAAA,IACrC,CAAA;AAAA,IACA,CAAC,iBAAA,EAAmB,aAAA,EAAe,aAAa;AAAA,GAClD;AAEA,EAAA,MAAM,qBAAA,GAAwB,WAAA;AAAA,IAC5B,CAAC,OAAe,GAAA,KAAgB;AAC9B,MAAA,IAAI,CAAC,mBAAA,EAAqB;AAC1B,MAAA,oBAAA,CAAqB,EAAE,KAAA,EAAO,GAAA,EAAK,CAAA;AAAA,IACrC,CAAA;AAAA,IACA,CAAC,mBAAmB;AAAA,GACtB;AAEA,EAAA,MAAM,oBAAA,GAAuB,YAAY,MAAM;AAC7C,IAAA,IAAI,CAAC,mBAAA,IAAuB,CAAC,iBAAA,IAAqB,CAAC,iBAAA,EAAmB;AACpE,MAAA,sBAAA,CAAuB,IAAI,CAAA;AAC3B,MAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,YAAY,IAAI,IAAA,CAAK,MAAM,mBAAA,CAAoB,KAAA,EAAO,oBAAoB,GAAG,CAAA;AACnF,IAAA,MAAM,UAAU,IAAI,IAAA,CAAK,MAAM,iBAAA,CAAkB,KAAA,EAAO,kBAAkB,GAAG,CAAA;AAG7E,IAAA,MAAM,CAAC,UAAA,EAAY,QAAQ,CAAA,GAAI,SAAA,IAAa,OAAA,GACxC,CAAC,SAAA,EAAW,OAAO,CAAA,GACnB,CAAC,OAAA,EAAS,SAAS,CAAA;AAEvB,IAAA,iBAAA,CAAkB,YAAY,QAAQ,CAAA;AACtC,IAAA,sBAAA,CAAuB,IAAI,CAAA;AAC3B,IAAA,oBAAA,CAAqB,IAAI,CAAA;AAAA,EAC3B,GAAG,CAAC,mBAAA,EAAqB,iBAAA,EAAmB,IAAA,EAAM,iBAAiB,CAAC,CAAA;AAEpE,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CACE,CAAA,EACA,KAAA,EACA,UAAA,EACA,YAAA,KACG;AACH,MAAA,CAAA,CAAE,aAAa,aAAA,GAAgB,MAAA;AAC/B,MAAA,CAAA,CAAE,YAAA,CAAa,OAAA,CAAQ,YAAA,EAAc,KAAA,CAAM,EAAE,CAAA;AAE7C,MAAA,MAAM,IAAA,GAAO,CAAA,CAAE,aAAA,CAAc,qBAAA,EAAsB;AACnD,MAAA,MAAM,MAAA,GAAS,CAAA,CAAE,OAAA,GAAU,IAAA,CAAK,GAAA;AAChC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,SAAS,CAAA;AAC/C,MAAA,MAAM,UAAU,YAAA,GAAe,SAAA;AAE/B,MAAA,kBAAA,CAAmB,MAAM,CAAA;AACzB,MAAA,iBAAA,CAAkB,KAAK,MAAM,CAAA;AAC7B,MAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,IAAA,EAAM,YAAY,OAAO,CAAA;AACnD,MAAA,MAAM,YAAY,KAAA,CAAM,IAAA;AACxB,MAAA,MAAM,aAAa,IAAA,CAAK,KAAA;AAAA,QAAA,CACrB,QAAA,CAAS,SAAQ,GAAI,SAAA,CAAU,SAAQ,KAAM,GAAA,GAAO,KAAK,EAAA,GAAK,EAAA;AAAA,OACjE;AACA,MAAA,aAAA,CAAc,UAAU,CAAA;AAExB,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,MACxB,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,MAAM,SAAS;AAAA,GAClB;AAEA,EAAA,MAAM,cAAA,GAAiB,WAAA;AAAA,IACrB,CAAC,CAAA,EAAoB,KAAA,EAAe,GAAA,KAAgB;AAClD,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,CAAA,CAAE,aAAa,UAAA,GAAa,MAAA;AAE5B,MAAA,IAAI,aAAA,IAAiB,kBAAkB,CAAA,EAAG;AACxC,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,eAAA,GAAkB,SAAS,CAAA;AACxD,QAAA,IAAI,aAAa,GAAA,GAAM,SAAA;AACvB,QAAA,IAAI,YAAA,GAAe,KAAA;AAEnB,QAAA,OAAO,UAAA,GAAa,CAAA,IAAK,YAAA,GAAe,CAAA,EAAG;AACzC,UAAA,YAAA,EAAA;AACA,UAAA,UAAA,IAAc,cAAA,CAAe,MAAM,YAAY,CAAA;AAAA,QACjD;AACA,QAAA,IAAI,WAAA,GAAc,cAAA,CAAe,IAAA,EAAM,YAAY,CAAA;AACnD,QAAA,OAAO,UAAA,GAAa,WAAA,IAAe,YAAA,GAAe,EAAA,EAAI;AACpD,UAAA,UAAA,IAAc,WAAA;AACd,UAAA,YAAA,EAAA;AACA,UAAA,WAAA,GAAc,cAAA,CAAe,MAAM,YAAY,CAAA;AAAA,QACjD;AACA,QAAA,UAAA,GAAa,IAAA,CAAK,GAAA;AAAA,UAChB,CAAA;AAAA,UACA,KAAK,GAAA,CAAI,UAAA,EAAY,cAAA,CAAe,IAAA,EAAM,YAAY,CAAC;AAAA,SACzD;AAEA,QAAA,eAAA,CAAgB,EAAE,KAAA,EAAO,YAAA,EAAc,GAAA,EAAK,YAAY,CAAA;AAAA,MAC1D,CAAA,MAAO;AACL,QAAA,eAAA,CAAgB,EAAE,KAAA,EAAO,GAAA,EAAK,CAAA;AAAA,MAChC;AACA,MAAA,eAAA,CAAgB,EAAE,CAAA,EAAG,CAAA,CAAE,SAAS,CAAA,EAAG,CAAA,CAAE,SAAS,CAAA;AAAA,IAChD,CAAA;AAAA,IACA,CAAC,aAAA,EAAe,eAAA,EAAiB,IAAA,EAAM,SAAS;AAAA,GAClD;AAEA,EAAA,MAAM,eAAA,GAAkB,YAAY,MAAM;AACxC,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACtB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAa,WAAA;AAAA,IACjB,CAAC,CAAA,KAAuB;AACtB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,IAAI,aAAA,IAAiB,eAAe,YAAA,EAAc;AAChD,QAAA,MAAM,eAAe,IAAI,IAAA;AAAA,UACvB,IAAA;AAAA,UACA,YAAA,CAAa,KAAA;AAAA,UACb,YAAA,CAAa;AAAA,SACf;AAEA,QAAA,IAAI,UAAA;AACJ,QAAA,IAAI,cAAc,OAAA,EAAS;AACzB,UAAA,MAAM,WACJ,aAAA,CAAc,OAAA,CAAQ,SAAQ,GAAI,aAAA,CAAc,KAAK,OAAA,EAAQ;AAC/D,UAAA,UAAA,GAAa,IAAI,IAAA,CAAK,YAAA,CAAa,OAAA,KAAY,QAAQ,CAAA;AAAA,QACzD;AAEA,QAAA,WAAA,CAAY,aAAA,EAAe,cAAc,UAAU,CAAA;AAAA,MACrD;AACA,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA,aAAA,CAAc,CAAC,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAC,aAAA,EAAe,YAAA,EAAc,IAAA,EAAM,WAAW;AAAA,GACjD;AAEA,EAAA,MAAM,aAAA,GAAgB,YAAY,MAAM;AACtC,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,kBAAA,CAAmB,CAAC,CAAA;AACpB,IAAA,iBAAA,CAAkB,CAAC,CAAA;AAAA,EACrB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,iBAAA,GAAoB,YAAY,MAAM;AAC1C,IAAA,IAAI,eAAe,WAAA,EAAa;AAC9B,MAAA,WAAA;AAAA,QACE,WAAA,CAAY,KAAA;AAAA,QACZ,WAAA,CAAY,YAAA;AAAA,QACZ,WAAA,CAAY;AAAA,OACd;AAAA,IACF;AACA,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,EACrB,CAAA,EAAG,CAAC,WAAA,EAAa,WAAW,CAAC,CAAA;AAE7B,EAAA,MAAM,gBAAA,GAAmB,YAAY,MAAM;AACzC,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,EACrB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,iBAAA,GAAoB,WAAA;AAAA,IACxB,CAAC,CAAA,EAAoB,KAAA,EAAsB,IAAA,KAA0B;AACnE,MAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,MAAA,CAAA,CAAE,aAAa,aAAA,GAAgB,MAAA;AAC/B,MAAA,CAAA,CAAE,aAAa,OAAA,CAAQ,YAAA,EAAc,CAAA,OAAA,EAAU,KAAA,CAAM,EAAE,CAAA,CAAE,CAAA;AACzD,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,gBAAA,CAAiB,EAAE,KAAA,EAAO,IAAA,EAAM,CAAA;AAAA,MAClC,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,gBAAA,GAAmB,WAAA;AAAA,IACvB,CAAC,OAAe,GAAA,KAAgB;AAC9B,MAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,WAAA,EAAa;AAEpC,MAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,aAAA;AACxB,MAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,GAAG,CAAA;AAE1C,MAAA,IAAI,eAAe,KAAA,CAAM,IAAA;AACzB,MAAA,IAAI,UAAA,GAAa,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,IAAA;AAExC,MAAA,IAAI,SAAS,OAAA,EAAS;AACpB,QAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,UAAA,YAAA,GAAe,QAAA;AAAA,QACjB;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAI,YAAY,YAAA,EAAc;AAC5B,UAAA,UAAA,GAAa,QAAA;AAAA,QACf;AAAA,MACF;AAEA,MAAA,MAAM,eACJ,YAAA,CAAa,OAAA,OAAc,UAAA,CAAW,OAAA,KAClC,MAAA,GACA,UAAA;AACN,MAAA,WAAA,CAAY,KAAA,EAAO,cAAc,YAAY,CAAA;AAE7C,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,IACtB,CAAA;AAAA,IACA,CAAC,aAAA,EAAe,IAAA,EAAM,WAAW;AAAA,GACnC;AAEA,EAAA,MAAM,eAAA,GAAkB,YAAY,MAAM;AACxC,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACtB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,sBAAsB,MAAM;AAChC,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,kBAAA,CAAmB,CAAC,CAAA;AACpB,MAAA,iBAAA,CAAkB,CAAC,CAAA;AACnB,MAAA,aAAA,CAAc,CAAC,CAAA;AAEf,MAAA,IAAI,mBAAA,EAAqB;AACvB,QAAA,oBAAA,EAAqB;AAAA,MACvB;AAAA,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,mBAAmB,CAAA;AACtD,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,mBAAmB,CAAA;AACtD,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,WAAW,mBAAmB,CAAA;AACzD,MAAA,MAAA,CAAO,mBAAA,CAAoB,WAAW,mBAAmB,CAAA;AAAA,IAC3D,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,mBAAA,EAAqB,oBAAoB,CAAC,CAAA;AAE9C,EAAA,MAAM,cAAA,GAAiB,CAAC,KAAA,EAAe,GAAA,KAAgB;AACrD,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,GAAG,CAAA;AACtC,IAAA,OAAO,CAAC,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAG,CAAA,CAAE,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,EAC1D,CAAA;AAEA,EAAA,4BACG,KAAA,EAAA,EAAI,GAAA,EAAK,YAAA,EAAc,KAAA,EAAO,OAAO,SAAA,EAEnC,QAAA,EAAA;AAAA,IAAA,aAAA,IACC,YAAA,IACA,iBACC,MAAM;AACL,MAAA,MAAM,OAAA,GAAU,aAAa,CAAA,GAAI,eAAA;AACjC,MAAA,MAAM,aAAa,OAAA,GAAU,cAAA;AAC7B,MAAA,MAAM,YAAY,OAAA,GAAU,EAAA;AAC5B,MAAA,uBACE,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,YAAA,CAAA,EADL;AAAA,YAEL,MAAM,YAAA,CAAa,CAAA;AAAA,YACnB,GAAA,EAAK,SAAA,GAAY,UAAA,GAAa,CAAA,GAAI,OAAA,GAAU,CAAA;AAAA,YAC5C,SAAA,EAAW,YACP,kBAAA,GACA;AAAA,WACN,CAAA;AAAA,UAEA,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,mBAAA,EACjB,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,cAAA,YAAA,CAAa,KAAA,GAAQ,CAAA;AAAA,cAAE,QAAA;AAAA,cAAE,YAAA,CAAa,GAAA;AAAA,cAAI,SAAA;AAAA,cAC1C,cAAA,CAAe,YAAA,CAAa,KAAA,EAAO,YAAA,CAAa,GAAG,CAAA;AAAA,cAAE;AAAA,aAAA,EACxD,CAAA;AAAA,gCACC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,mBAAA,EAChB,wBAAc,KAAA,EACjB;AAAA,WAAA,EACF;AAAA;AAAA,OACF;AAAA,IAEJ,CAAA,GAAG;AAAA,IAGJ,aAAA,IAAiB,gBAAgB,YAAA,oBAChC,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,YAAA,CAAA,EADL;AAAA,UAEL,MAAM,YAAA,CAAa,CAAA;AAAA,UACnB,GAAA,EAAK,aAAa,CAAA,GAAI;AAAA,SACxB,CAAA;AAAA,QAEA,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,qBAAA,EACjB,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,YAAA,aAAA,CAAc,IAAA,KAAS,UAAU,0BAAA,GAAS,0BAAA;AAAA,YAC1C,aAAa,KAAA,GAAQ,CAAA;AAAA,YAAE,QAAA;AAAA,YAAE,YAAA,CAAa,GAAA;AAAA,YAAI,SAAA;AAAA,YAC1C,cAAA,CAAe,YAAA,CAAa,KAAA,EAAO,YAAA,CAAa,GAAG,CAAA;AAAA,YAAE;AAAA,WAAA,EACxD,CAAA;AAAA,8BACC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAO,mBAAA,EAChB,QAAA,EAAA,aAAA,CAAc,MAAM,KAAA,EACvB;AAAA,SAAA,EACF;AAAA;AAAA,KACF;AAAA,oBAGF,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,aAAA,EAEjB,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,SAAA,EACjB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,aAAA,EAAe,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,QAClC,KAAK,GAAA,CAAI,CAAC,GAAA,qBACT,GAAA,CAAC,SAAc,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,MAAA,CAAO,OAAA,CAAA,EAAZ,EAAqB,MAAA,EAAQ,SAAA,EAAU,CAAA,EAC1D,QAAA,EAAA,GAAA,EAAA,EADO,GAEV,CACD;AAAA,OAAA,EACH,CAAA;AAAA,MAGC,MAAA,CAAO,GAAA,CAAI,CAAC,SAAA,EAAW,UAAA,KAAe;AACrC,QAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,EAAM,UAAU,CAAA;AACnD,QAAA,MAAM,KAAA,GAAQ,WAAW,UAAU,CAAA;AACnC,QAAA,MAAM,OAAA,GAAU,SAAS,UAAU,CAAA;AACnC,QAAA,MAAM,SAAA,GAAY,SAAS,UAAU,CAAA;AAErC,QAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAqB,KAAA,EAAO,MAAA,CAAO,WAAA,EAElC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,WAAA,EAAc,QAAA,EAAA,SAAA,EAAU,CAAA;AAAA,UAG1C,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACjB,YAAA,MAAM,aAAa,GAAA,IAAO,WAAA;AAC1B,YAAA,MAAM,MAAA,GAAS,UAAA,IAAc,QAAA,CAAS,IAAA,EAAM,YAAY,GAAG,CAAA;AAC3D,YAAA,MAAM,QAAA,GACJ,UAAA,IAAc,UAAA,CAAW,IAAA,EAAM,YAAY,GAAG,CAAA;AAChD,YAAA,MAAM,SAAA,GAAA,CACJ,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,KAAA,MAAU,UAAA,IAAA,CAAc,2CAAa,GAAA,MAAQ,GAAA;AAC5D,YAAA,MAAM,SAAA,GAAY,UAAA,IAAc,kBAAA,CAAmB,UAAA,EAAY,GAAG,CAAA;AAElE,YAAA,uBACE,GAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBAEC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,YAAA,CAAA,EADL;AAAA,kBAEL,MAAA,EAAQ,SAAA;AAAA,kBACR,eAAA,EAAiB,YACb,yBAAA,GACA,sBAAA;AAAA,oBACE,KAAA;AAAA,oBACA,UAAA;AAAA,oBACA,MAAA;AAAA,oBACA,QAAA;AAAA,oBACA,SAAA,IAAa,cAAc,CAAC;AAAA,mBAC9B;AAAA,kBACJ,MAAA,EAAQ,aAAa,SAAA,GAAY,SAAA;AAAA,kBACjC,UAAA,EAAY;AAAA,iBACd,CAAA;AAAA,gBACA,SAAS,MACP,UAAA,IAAc,CAAC,gBAAA,IAAoB,eAAA,CAAgB,YAAY,GAAG,CAAA;AAAA,gBAEpE,aAAA,EAAe,MACb,UAAA,IAAc,qBAAA,CAAsB,YAAY,GAAG,CAAA;AAAA,gBAErD,WAAA,EAAa,MACX,UAAA,IAAc,sBAAA,CAAuB,YAAY,GAAG,CAAA;AAAA,gBAEtD,cAAc,MAAM;AAClB,kBAAA,IAAI,UAAA,EAAY;AACd,oBAAA,cAAA,CAAe,EAAE,KAAA,EAAO,UAAA,EAAY,GAAA,EAAK,CAAA;AACzC,oBAAA,IAAI,gBAAA,EAAkB;AACpB,sBAAA,qBAAA,CAAsB,YAAY,GAAG,CAAA;AAAA,oBACvC;AAAA,kBACF;AAAA,gBACF,CAAA;AAAA,gBACA,YAAA,EAAc,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,gBACvC,YAAY,CAAC,CAAA,KACX,cAAc,cAAA,CAAe,CAAA,EAAG,YAAY,GAAG,CAAA;AAAA,gBAEjD,WAAA,EAAa,eAAA;AAAA,gBACb,MAAA,EAAQ,CAAC,CAAA,KAAM;AACb,kBAAA,IAAI,CAAC,UAAA,EAAY;AACjB,kBAAA,IAAI,aAAA,EAAe;AACjB,oBAAA,gBAAA,CAAiB,YAAY,GAAG,CAAA;AAAA,kBAClC,CAAA,MAAO;AACL,oBAAA,UAAA,CAAW,CAAC,CAAA;AAAA,kBACd;AAAA,gBACF;AAAA,eAAA;AAAA,cA7CK;AAAA,aA8CP;AAAA,UAEJ,CAAC,CAAA;AAAA,UAAA,CAGC,iBAAiB,aAAA,KAAA,CACjB,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,WAAU,UAAA,IACxB,YAAA,CAAa,OAAO,WAAA,oBAClB,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,aAAA,CAAA,EADL;AAAA,gBAEL,GAAA,EAAK,EAAA,GAAA,CAAM,YAAA,CAAa,GAAA,GAAM,CAAA,IAAK,SAAA;AAAA,gBACnC,MAAA,EAAQ;AAAA,eACV,CAAA;AAAA,cAEA,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,kBAAA,EAAoB;AAAA;AAAA,WACzC;AAAA,0BAIJ,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,iBAAA,EAChB,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACnB,cAAA,MAAM,YAAY,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA,IAAK,CAAA;AAEhD,cAAA,MAAM,YAAY,GAAA,GAAM,SAAA;AACxB,cAAA,MAAM,OAAO,SAAA,GAAY,SAAA;AAEzB,cAAA,MAAM,cAAA,GAAA,CAAiB,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,EAAA,MAAO,IAAA,CAAK,KAAA,CAAM,EAAA;AACxD,cAAA,MAAM,cAAA,GAAA,CACJ,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,KAAA,CAAM,EAAA,MAAO,KAAK,KAAA,CAAM,EAAA;AAEzC,cAAA,IAAI,WAAA,GAAc,IAAA;AAClB,cAAA,IAAI,kBAAkB,kBAAA,EAAoB;AACxC,gBAAA,MAAM,WAAA,GAAc,kBAAA,CAAmB,GAAA,CAAI,UAAU,CAAA;AACrD,gBAAA,IAAI,WAAA,EAAa;AACf,kBAAA,WAAA,GAAc,WAAA;AAAA,gBAChB,CAAA,MAAO;AACL,kBAAA,OAAO,IAAA;AAAA,gBACT;AAAA,cACF;AAEA,cAAA,MAAM,kBAAkB,WAAA,CAAY,QAAA;AACpC,cAAA,MAAM,gBAAgB,WAAA,CAAY,MAAA;AAClC,cAAA,MAAM,GAAA,GAAA,CAAO,eAAA,GAAkB,CAAA,IAAK,SAAA,GAAY,CAAA;AAChD,cAAA,MAAM,MAAA,GAAA,CACH,aAAA,GAAgB,eAAA,GAAkB,CAAA,IAAK,SAAA,GAAY,CAAA;AACtD,cAAA,MAAM,QAAA,GAAW,gBAAgB,eAAA,GAAkB,CAAA;AAEnD,cAAA,MAAM,aAAA,GAAgB,CAAC,aAAA,IAAiB,CAAC,aAAA;AACzC,cAAA,MAAM,SAAA,GAAY,eAAA,KAAoB,IAAA,CAAK,KAAA,CAAM,EAAA;AAEjD,cAAA,uBACE,IAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,QAAA,CAAA,EADL;AAAA,oBAEL,GAAA;AAAA,oBACA,IAAA,EAAM,GAAG,IAAI,CAAA,CAAA,CAAA;AAAA,oBACb,KAAA,EAAO,QAAQ,SAAS,CAAA,QAAA,CAAA;AAAA,oBACxB,MAAA;AAAA,oBACA,eAAA,EAAiB,aAAA,CAAc,IAAA,CAAK,KAAK,CAAA;AAAA,oBACzC,YAAA,EAAc,GAAG,IAAA,CAAK,OAAA,GAAU,IAAI,CAAC,CAAA,GAAA,EAAM,KAAK,OAAA,GAAU,CAAA,GAAI,CAAC,CAAA,GAAA,EAAM,IAAA,CAAK,QAAQ,CAAA,GAAI,CAAC,MAAM,IAAA,CAAK,KAAA,GAAQ,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,oBAC/G,OAAA,EAAS,iBAAiB,GAAA,GAAM,CAAA;AAAA,oBAChC,MAAA,EAAQ,iBACJ,qCAAA,GACA,MAAA;AAAA,oBACJ,MAAA,EAAQ,cAAA,GAAiB,EAAA,GAAK,SAAA,GAAY,EAAA,GAAK,EAAA;AAAA,oBAC/C,MAAA,EAAQ,YAAY,iBAAA,GAAoB,MAAA;AAAA,oBACxC,aAAA,EAAe,gBAAgB,MAAA,GAAS;AAAA,mBAC1C,CAAA;AAAA,kBACA,SAAA,EAAS,IAAA;AAAA,kBACT,WAAA,EAAa,CAAC,CAAA,KACZ,eAAA;AAAA,oBACE,CAAA;AAAA,oBACA,IAAA,CAAK,KAAA;AAAA,oBACL,UAAA;AAAA,oBACA,IAAA,CAAK;AAAA,mBACP;AAAA,kBAEF,SAAA,EAAW,aAAA;AAAA,kBACX,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,oBAAA,kBAAA,CAAmB,IAAA,CAAK,MAAM,EAAE,CAAA;AAChC,oBAAA,MAAM,IAAA,GAAO,CAAA,CAAE,aAAA,CAAc,qBAAA,EAAsB;AACnD,oBAAA,eAAA,CAAgB;AAAA,sBACd,OAAO,IAAA,CAAK,KAAA;AAAA,sBACZ,CAAA,EAAG,KAAK,KAAA,GAAQ,CAAA;AAAA,sBAChB,GAAG,IAAA,CAAK;AAAA,qBACT,CAAA;AAAA,kBACH,CAAA;AAAA,kBACA,cAAc,MAAM;AAClB,oBAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,oBAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,kBACtB,CAAA;AAAA,kBACA,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,oBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,oBAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAe,IAAA,CAAK,KAAA,CAAA;AAAA,kBACtB,CAAA;AAAA,kBAGC,QAAA,EAAA;AAAA,oBAAA,CAAC,IAAA,CAAK,OAAA,oBACL,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,kCAAK,MAAA,CAAO,SAAA,CAAA,EAAc,MAAA,CAAO,YAAA,CAAA,EAAgB,QAAA,EAAA,QAAA,EAE7D,CAAA;AAAA,oBAID,IAAA,CAAK,WAAW,QAAA,IAAY,CAAA,wBAC1B,KAAA,EAAA,EAAI,KAAA,EAAO,OAAO,aAAA,EACjB,QAAA,kBAAA,GAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,QAAA,CAAA,EADL;AAAA,0BAEL,SAAA,EAAW,MAAA;AAAA,0BACX,OAAA,EAAS;AAAA,yBACX,CAAA;AAAA,wBAEC,eAAK,KAAA,CAAM;AAAA;AAAA,qBACd,EACF,CAAA;AAAA,oBAID,KAAK,OAAA,IAAW,QAAA,KAAa,CAAA,oBAC5B,GAAA,CAAC,SAAI,KAAA,EAAO,MAAA,CAAO,eAAA,EACjB,QAAA,kBAAA,GAAA,CAAC,UAAK,KAAA,EAAO,MAAA,CAAO,UAAW,QAAA,EAAA,IAAA,CAAK,KAAA,CAAM,OAAM,CAAA,EAClD,CAAA;AAAA,oBAID,CAAC,IAAA,CAAK,KAAA,oBACL,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,cAAA,CAAA,cAAA,CAAA,EAAA,EAAK,MAAA,CAAO,SAAA,CAAA,EAAc,MAAA,CAAO,eAAA,CAAA,EAAmB,QAAA,EAAA,QAAA,EAEhE,CAAA;AAAA,oBAID,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,aAAA,oBACrB,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAK,OAAA,oBACJ,GAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BACC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,YAAA,CAAA,EACP,OAAO,eAAA,CAAA,EAFL;AAAA,4BAGL,OAAA,EAAA,CACE,2DAAqB,OAAA,MAAY,IAAA,CAAK,MAAM,EAAA,IAAA,CAC5C,mBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,mBAAA,CAAqB,IAAA,MAAS,OAAA,GAC1B,CAAA,GACA;AAAA,2BACR,CAAA;AAAA,0BACA,SAAA,EAAS,IAAA;AAAA,0BACT,WAAA,EAAa,CAAC,CAAA,KAAM;AAClB,4BAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,4BAAA,iBAAA,CAAkB,CAAA,EAAG,IAAA,CAAK,KAAA,EAAO,OAAO,CAAA;AAAA,0BAC1C,CAAA;AAAA,0BACA,SAAA,EAAW,eAAA;AAAA,0BACX,YAAA,EAAc,MACZ,sBAAA,CAAuB;AAAA,4BACrB,OAAA,EAAS,KAAK,KAAA,CAAM,EAAA;AAAA,4BACpB,IAAA,EAAM;AAAA,2BACP,CAAA;AAAA,0BAEH,YAAA,EAAc,MAAM,sBAAA,CAAuB,IAAI;AAAA;AAAA,uBACjD;AAAA,sBAED,KAAK,KAAA,oBACJ,GAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BACC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,YAAA,CAAA,EACP,OAAO,kBAAA,CAAA,EAFL;AAAA,4BAGL,OAAA,EAAA,CACE,2DAAqB,OAAA,MAAY,IAAA,CAAK,MAAM,EAAA,IAAA,CAC5C,mBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,mBAAA,CAAqB,IAAA,MAAS,KAAA,GAC1B,CAAA,GACA;AAAA,2BACR,CAAA;AAAA,0BACA,SAAA,EAAS,IAAA;AAAA,0BACT,WAAA,EAAa,CAAC,CAAA,KAAM;AAClB,4BAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,4BAAA,iBAAA,CAAkB,CAAA,EAAG,IAAA,CAAK,KAAA,EAAO,KAAK,CAAA;AAAA,0BACxC,CAAA;AAAA,0BACA,SAAA,EAAW,eAAA;AAAA,0BACX,YAAA,EAAc,MACZ,sBAAA,CAAuB;AAAA,4BACrB,OAAA,EAAS,KAAK,KAAA,CAAM,EAAA;AAAA,4BACpB,IAAA,EAAM;AAAA,2BACP,CAAA;AAAA,0BAEH,YAAA,EAAc,MAAM,sBAAA,CAAuB,IAAI;AAAA;AAAA;AACjD,qBAAA,EAEJ;AAAA;AAAA,iBAAA;AAAA,gBAxIG,KAAK,KAAA,CAAM;AAAA,eA0IlB;AAAA,YAEJ,CAAC,CAAA;AAAA,YAGA,iBACC,kBAAA,IACA,kBAAA,CAAmB,IAAI,UAAU,CAAA,IACjC,CAAC,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,KAAA,CAAM,EAAA,KAAO,cAAc,KAAA,CAAM,EAAE,MACvD,MAAM;AACL,cAAA,MAAM,WAAA,GAAc,kBAAA,CAAmB,GAAA,CAAI,UAAU,CAAA;AAErD,cAAA,IAAI,iBAAA,GAAoB,CAAA;AACxB,cAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,CAAA,EAAA,EAAK;AAC3B,gBAAA,MAAM,OAAO,QAAA,CAAS,CAAC,EAAE,GAAA,CAAI,aAAA,CAAc,MAAM,EAAE,CAAA;AACnD,gBAAA,IAAI,SAAS,MAAA,EAAW;AACtB,kBAAA,iBAAA,GAAoB,IAAA;AACpB,kBAAA;AAAA,gBACF;AAAA,cACF;AAEA,cAAA,MAAM,gBAAA,GAAmB,SAAS,UAAU,CAAA;AAC5C,cAAA,MAAM,YAAY,GAAA,GAAM,gBAAA;AACxB,cAAA,MAAM,OAAO,IAAA,CAAK,GAAA,CAAI,iBAAA,EAAmB,gBAAA,GAAmB,CAAC,CAAA,GAAI,SAAA;AACjE,cAAA,MAAM,GAAA,GAAA,CAAO,WAAA,CAAY,QAAA,GAAW,CAAA,IAAK,SAAA,GAAY,CAAA;AACrD,cAAA,MAAM,UACH,WAAA,CAAY,MAAA,GAAS,WAAA,CAAY,QAAA,GAAW,KAC3C,SAAA,GACF,CAAA;AAEF,cAAA,uBACE,IAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,QAAA,CAAA,EADL;AAAA,oBAEL,GAAA;AAAA,oBACA,IAAA,EAAM,GAAG,IAAI,CAAA,CAAA,CAAA;AAAA,oBACb,KAAA,EAAO,QAAQ,SAAS,CAAA,QAAA,CAAA;AAAA,oBACxB,MAAA;AAAA,oBACA,eAAA,EAAiB,aAAA,CAAc,aAAA,CAAc,KAAK,CAAA;AAAA,oBAClD,YAAA,EAAc,GAAG,WAAA,CAAY,OAAA,GAAU,IAAI,CAAC,CAAA,GAAA,EAAM,YAAY,OAAA,GAAU,CAAA,GAAI,CAAC,CAAA,GAAA,EAAM,WAAA,CAAY,QAAQ,CAAA,GAAI,CAAC,MAAM,WAAA,CAAY,KAAA,GAAQ,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,oBAC3I,MAAA,EAAQ,qCAAA;AAAA,oBACR,OAAA,EAAS,GAAA;AAAA,oBACT,MAAA,EAAQ;AAAA,mBACV,CAAA;AAAA,kBAEC,QAAA,EAAA;AAAA,oBAAA,CAAC,WAAA,CAAY,OAAA,oBACZ,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,kCAAK,MAAA,CAAO,SAAA,CAAA,EAAc,MAAA,CAAO,YAAA,CAAA,EAAgB,QAAA,EAAA,QAAA,EAE7D,CAAA;AAAA,oBAED,CAAC,WAAA,CAAY,KAAA,oBACZ,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,cAAA,CAAA,cAAA,CAAA,EAAA,EAAK,MAAA,CAAO,SAAA,CAAA,EAAc,MAAA,CAAO,eAAA,CAAA,EAAmB,QAAA,EAAA,QAAA,EAEhE;AAAA;AAAA,iBAAA;AAAA,gBAtBG,CAAA,QAAA,EAAW,aAAA,CAAc,KAAA,CAAM,EAAE,CAAA;AAAA,eAwBxC;AAAA,YAEJ,CAAA;AAAG,WAAA,EACP;AAAA,SAAA,EAAA,EAxTQ,UAyTV,CAAA;AAAA,MAEJ,CAAC;AAAA,KAAA,EACH,CAAA;AAAA,IAGC,YAAA,IAAgB,CAAC,aAAA,IAAiB,CAAC,aAAA,oBAClC,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,OAAA,CAAA,EADL;AAAA,UAEL,MAAM,YAAA,CAAa,CAAA;AAAA,UACnB,KAAK,YAAA,CAAa;AAAA,SACpB,CAAA;AAAA,QAEA,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,cAAA,EACjB,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,SAAI,KAAA,EAAO,MAAA,CAAO,YAAA,EAAe,QAAA,EAAA,YAAA,CAAa,MAAM,KAAA,EAAM,CAAA;AAAA,0BAC3D,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,WAAA,EAChB,QAAA,EAAA;AAAA,YAAA,YAAA,CAAa,KAAA,CAAM,IAAA,CAAK,kBAAA,CAAmB,OAAA,EAAS;AAAA,cACnD,KAAA,EAAO,OAAA;AAAA,cACP,GAAA,EAAK,SAAA;AAAA,cACL,OAAA,EAAS;AAAA,aACV,CAAA;AAAA,YACA,YAAA,CAAa,KAAA,CAAM,OAAA,oBAClB,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,cAAA,UAAA;AAAA,cACA,YAAA,CAAa,KAAA,CAAM,OAAA,CAAQ,kBAAA,CAAmB,OAAA,EAAS;AAAA,gBACtD,KAAA,EAAO,OAAA;AAAA,gBACP,GAAA,EAAK,SAAA;AAAA,gBACL,OAAA,EAAS;AAAA,eACV;AAAA,aAAA,EACH;AAAA,WAAA,EAEJ;AAAA,SAAA,EACF;AAAA;AAAA,KACF;AAAA,IAID,WAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,eACjB,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,aAAA,EACjB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,QAAG,KAAA,EAAO,MAAA,CAAO,aACf,QAAA,EAAA,WAAA,CAAY,QAAA,GACT,iEACA,8DAAA,EACN,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,UAAA,EACjB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAI,KAAA,EAAO,MAAA,CAAO,gBAAA,EAAmB,QAAA,EAAA,WAAA,CAAY,MAAM,KAAA,EAAM,CAAA;AAAA,6BAC7D,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAA,EAAW,GAAE,EACzB,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,eAAA,EAAiB,QAAA,EAAA,0BAAA,EAAI,CAAA;AAAA,UACxC,WAAA,CAAY,KAAA,CAAM,IAAA,CAAK,kBAAA,CAAmB,OAAA,EAAS;AAAA,YAClD,KAAA,EAAO,MAAA;AAAA,YACP,GAAA,EAAK,SAAA;AAAA,YACL,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,UACA,WAAA,CAAY,KAAA,CAAM,OAAA,oBACjB,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,YAAA,UAAA;AAAA,YACA,WAAA,CAAY,KAAA,CAAM,OAAA,CAAQ,kBAAA,CAAmB,OAAA,EAAS;AAAA,cACrD,KAAA,EAAO,MAAA;AAAA,cACP,GAAA,EAAK,SAAA;AAAA,cACL,OAAA,EAAS;AAAA,aACV;AAAA,WAAA,EACH;AAAA,SAAA,EAEJ,CAAA;AAAA,6BACC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAA,EAAW,GAAE,EACzB,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,eAAA,EAAiB,QAAA,EAAA,0BAAA,EAAI,CAAA;AAAA,UACxC,WAAA,CAAY,YAAA,CAAa,kBAAA,CAAmB,OAAA,EAAS;AAAA,YACpD,KAAA,EAAO,MAAA;AAAA,YACP,GAAA,EAAK,SAAA;AAAA,YACL,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,UACA,WAAA,CAAY,8BACX,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,YAAA,UAAA;AAAA,YACA,WAAA,CAAY,UAAA,CAAW,kBAAA,CAAmB,OAAA,EAAS;AAAA,cAClD,KAAA,EAAO,MAAA;AAAA,cACP,GAAA,EAAK,SAAA;AAAA,cACL,OAAA,EAAS;AAAA,aACV;AAAA,WAAA,EACH;AAAA,SAAA,EAEJ;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,aAAA,EACjB,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,gBAAA;AAAA,YACT,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,kBAAA,CAAA,EADL;AAAA,cAEL,eAAA,EAAiB,mBAAA,GACb,KAAA,CAAM,SAAA,GACN;AAAA,aACN,CAAA;AAAA,YACA,YAAA,EAAc,MAAM,sBAAA,CAAuB,IAAI,CAAA;AAAA,YAC/C,YAAA,EAAc,MAAM,sBAAA,CAAuB,KAAK,CAAA;AAAA,YACjD,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,wBACA,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,iBAAA;AAAA,YACT,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,MAAA,CAAO,mBAAA,CAAA,EADL;AAAA,cAEL,eAAA,EAAiB,oBAAA,GACb,KAAA,CAAM,kBAAA,GACN,KAAA,CAAM;AAAA,aACZ,CAAA;AAAA,YACA,YAAA,EAAc,MAAM,uBAAA,CAAwB,IAAI,CAAA;AAAA,YAChD,YAAA,EAAc,MAAM,uBAAA,CAAwB,KAAK,CAAA;AAAA,YAEhD,QAAA,EAAA,WAAA,CAAY,WAAW,0BAAA,GAAS;AAAA;AAAA;AACnC,OAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ","file":"index.mjs","sourcesContent":["import { CSSProperties } from \"react\";\nimport type { ThemeColors } from \"./types\";\n\n// デフォルトテーマカラー\nexport const defaultTheme: Required<ThemeColors> = {\n // 背景色\n bgWhite: \"#ffffff\",\n bgGray50: \"#f9fafb\",\n bgGray100: \"#f3f4f6\",\n bgSunday: \"#fef2f2\",\n bgSaturday: \"#eff6ff\",\n bgDropHighlight: \"rgba(191, 219, 254, 0.5)\",\n\n // ボーダー\n borderDefault: \"#d1d5db\",\n borderDropHighlight: \"#3b82f6\",\n\n // テキスト\n textPrimary: \"#111827\",\n textSecondary: \"#4b5563\",\n textMuted: \"#6b7280\",\n\n // UI要素\n tooltipBg: \"#111827\",\n tooltipText: \"#ffffff\",\n dialogOverlay: \"rgba(0, 0, 0, 0.3)\",\n buttonPrimary: \"#2563eb\",\n buttonPrimaryHover: \"#1d4ed8\",\n floatingDateBg: \"#2563eb\",\n resizeFloatingBg: \"#9333ea\",\n};\n\n// テーマをマージするヘルパー\nexport function mergeTheme(custom?: ThemeColors): Required<ThemeColors> {\n if (!custom) return defaultTheme;\n return { ...defaultTheme, ...custom };\n}\n\n// スタイル生成関数\nexport function createStyles(theme: Required<ThemeColors>) {\n return {\n // コンテナ\n container: {\n width: \"100%\",\n height: \"100%\",\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n } as CSSProperties,\n\n // フレックスコンテナ\n flexContainer: {\n display: \"flex\",\n width: \"100%\",\n flex: 1,\n } as CSSProperties,\n\n // 日付列(左側固定)\n dayColumn: {\n position: \"sticky\",\n left: 0,\n zIndex: 20,\n backgroundColor: theme.bgGray100,\n flexShrink: 0,\n display: \"flex\",\n flexDirection: \"column\",\n } as CSSProperties,\n\n // 日付ヘッダーセル\n dayHeaderCell: {\n height: 24,\n border: `1px solid ${theme.borderDefault}`,\n backgroundColor: theme.bgGray100,\n padding: \"0 4px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontWeight: 500,\n fontSize: 12,\n width: 32,\n } as CSSProperties,\n\n // 日付セル\n dayCell: {\n border: `1px solid ${theme.borderDefault}`,\n backgroundColor: theme.bgGray50,\n padding: \"0 4px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontWeight: 500,\n fontSize: 12,\n width: 32,\n } as CSSProperties,\n\n // 月列\n monthColumn: {\n position: \"relative\",\n flex: 1,\n minWidth: 0,\n } as CSSProperties,\n\n // 月ヘッダー\n monthHeader: {\n height: 24,\n border: `1px solid ${theme.borderDefault}`,\n backgroundColor: theme.bgGray100,\n padding: \"0 4px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontWeight: 500,\n fontSize: 12,\n } as CSSProperties,\n\n // カレンダーセル(基本)\n calendarCell: {\n border: `1px solid ${theme.borderDefault}`,\n position: \"relative\",\n } as CSSProperties,\n\n // イベントバーコンテナ\n eventBarContainer: {\n position: \"absolute\",\n top: 24,\n left: 0,\n right: \"20%\",\n padding: \"0 2px\",\n pointerEvents: \"none\",\n zIndex: 10,\n } as CSSProperties,\n\n // イベントバー\n eventBar: {\n position: \"absolute\",\n cursor: \"grab\",\n transition: \"filter 0.15s, z-index 0.15s\",\n boxShadow: \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n } as CSSProperties,\n\n // ドロップインジケーター\n dropIndicator: {\n position: \"absolute\",\n left: 0,\n right: 0,\n pointerEvents: \"none\",\n zIndex: 50,\n } as CSSProperties,\n\n dropIndicatorInner: {\n height: \"100%\",\n border: `2px solid ${theme.borderDropHighlight}`,\n backgroundColor: theme.bgDropHighlight,\n borderRadius: 4,\n } as CSSProperties,\n\n // フローティング日付表示\n floatingDate: {\n position: \"fixed\",\n zIndex: 100,\n pointerEvents: \"none\",\n transform: \"translateX(-50%)\",\n } as CSSProperties,\n\n floatingDateContent: {\n backgroundColor: theme.floatingDateBg,\n color: theme.tooltipText,\n fontSize: 14,\n fontWeight: 700,\n borderRadius: 8,\n padding: \"8px 12px\",\n boxShadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n } as CSSProperties,\n\n floatingDateSubtext: {\n fontSize: 12,\n fontWeight: 400,\n opacity: 0.8,\n } as CSSProperties,\n\n // リサイズ用フローティング表示\n resizeFloatingContent: {\n backgroundColor: theme.resizeFloatingBg,\n color: theme.tooltipText,\n fontSize: 14,\n fontWeight: 700,\n borderRadius: 8,\n padding: \"8px 12px\",\n boxShadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n } as CSSProperties,\n\n // ツールチップ\n tooltip: {\n position: \"fixed\",\n zIndex: 200,\n pointerEvents: \"none\",\n } as CSSProperties,\n\n tooltipContent: {\n backgroundColor: theme.tooltipBg,\n color: theme.tooltipText,\n fontSize: 12,\n borderRadius: 4,\n padding: \"6px 8px\",\n whiteSpace: \"nowrap\",\n boxShadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n } as CSSProperties,\n\n tooltipTitle: {\n fontWeight: 500,\n } as CSSProperties,\n\n tooltipDate: {\n color: \"rgba(255, 255, 255, 0.7)\",\n fontSize: 10,\n marginTop: 2,\n } as CSSProperties,\n\n // 確認ダイアログ\n dialogOverlay: {\n position: \"fixed\",\n inset: 0,\n zIndex: 100,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: theme.dialogOverlay,\n } as CSSProperties,\n\n dialogContent: {\n backgroundColor: theme.bgWhite,\n borderRadius: 8,\n boxShadow: \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n padding: 16,\n maxWidth: 384,\n margin: \"0 16px\",\n } as CSSProperties,\n\n dialogTitle: {\n fontWeight: 700,\n color: theme.textPrimary,\n marginBottom: 8,\n } as CSSProperties,\n\n dialogBody: {\n fontSize: 14,\n color: theme.textSecondary,\n marginBottom: 16,\n } as CSSProperties,\n\n dialogEventTitle: {\n fontWeight: 500,\n color: theme.textPrimary,\n } as CSSProperties,\n\n dialogDateLabel: {\n color: theme.textMuted,\n } as CSSProperties,\n\n dialogButtons: {\n display: \"flex\",\n gap: 8,\n justifyContent: \"flex-end\",\n } as CSSProperties,\n\n dialogCancelButton: {\n padding: \"8px 16px\",\n fontSize: 14,\n color: theme.textSecondary,\n backgroundColor: \"transparent\",\n border: \"none\",\n borderRadius: 4,\n cursor: \"pointer\",\n } as CSSProperties,\n\n dialogConfirmButton: {\n padding: \"8px 16px\",\n fontSize: 14,\n color: theme.tooltipText,\n backgroundColor: theme.buttonPrimary,\n border: \"none\",\n borderRadius: 4,\n cursor: \"pointer\",\n } as CSSProperties,\n\n // リサイズハンドル\n resizeHandle: {\n position: \"absolute\",\n left: 0,\n right: 0,\n height: 8,\n cursor: \"ns-resize\",\n opacity: 0,\n backgroundColor: \"rgba(255, 255, 255, 0.3)\",\n } as CSSProperties,\n\n resizeHandleTop: {\n top: 0,\n borderTopLeftRadius: 4,\n borderTopRightRadius: 4,\n } as CSSProperties,\n\n resizeHandleBottom: {\n bottom: 0,\n borderBottomLeftRadius: 4,\n borderBottomRightRadius: 4,\n } as CSSProperties,\n\n // インジケーター(▲▼)\n indicator: {\n position: \"absolute\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n fontSize: 8,\n color: \"rgba(255, 255, 255, 0.8)\",\n } as CSSProperties,\n\n indicatorTop: {\n top: -6,\n } as CSSProperties,\n\n indicatorBottom: {\n bottom: -6,\n } as CSSProperties,\n\n // 縦書きタイトル\n verticalTitle: {\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 10,\n color: \"#ffffff\",\n fontWeight: 500,\n overflow: \"hidden\",\n writingMode: \"vertical-rl\",\n } as CSSProperties,\n\n // 横書きタイトル\n horizontalTitle: {\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 9,\n color: \"#ffffff\",\n fontWeight: 500,\n overflow: \"hidden\",\n padding: \"0 2px\",\n } as CSSProperties,\n\n truncate: {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n } as CSSProperties,\n };\n}\n\n// セル背景色を取得\nexport function getCellBackgroundColor(\n theme: Required<ThemeColors>,\n isValidDay: boolean,\n isSunday: boolean,\n isSaturday: boolean,\n isHovered: boolean\n): string {\n if (!isValidDay) return theme.bgGray100;\n if (isHovered) return theme.bgGray50;\n if (isSunday) return theme.bgSunday;\n if (isSaturday) return theme.bgSaturday;\n return theme.bgWhite;\n}\n","\"use client\";\n\nimport { useMemo, useState, useCallback, useEffect, useRef } from \"react\";\nimport type { YearlyCalendarProps, CalendarEvent } from \"./types\";\nimport { createStyles, mergeTheme, getCellBackgroundColor, defaultTheme } from \"./styles\";\n\nconst MONTHS = [\n \"1月\",\n \"2月\",\n \"3月\",\n \"4月\",\n \"5月\",\n \"6月\",\n \"7月\",\n \"8月\",\n \"9月\",\n \"10月\",\n \"11月\",\n \"12月\",\n];\n\nconst DAYS = Array.from({ length: 31 }, (_, i) => i + 1);\nconst MIN_ROW_HEIGHT = 20;\nconst HEADER_HEIGHT = 24;\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction isSunday(year: number, month: number, day: number): boolean {\n return new Date(year, month, day).getDay() === 0;\n}\n\nfunction isSaturday(year: number, month: number, day: number): boolean {\n return new Date(year, month, day).getDay() === 6;\n}\n\ninterface MonthSpan {\n event: CalendarEvent;\n startDay: number;\n endDay: number;\n isStart: boolean;\n isEnd: boolean;\n}\n\nfunction getMonthSpans(\n events: CalendarEvent[],\n year: number,\n month: number\n): MonthSpan[] {\n const spans: MonthSpan[] = [];\n const daysInMonth = getDaysInMonth(year, month);\n\n events.forEach((event) => {\n const startDate = event.date;\n const endDate = event.endDate || event.date;\n\n const monthStart = new Date(year, month, 1);\n const monthEnd = new Date(year, month, daysInMonth, 23, 59, 59);\n\n if (startDate > monthEnd || endDate < monthStart) {\n return;\n }\n\n const spanStart = startDate >= monthStart ? startDate.getDate() : 1;\n const spanEnd = endDate <= monthEnd ? endDate.getDate() : daysInMonth;\n\n spans.push({\n event,\n startDay: spanStart,\n endDay: spanEnd,\n isStart:\n startDate.getFullYear() === year && startDate.getMonth() === month,\n isEnd: endDate.getFullYear() === year && endDate.getMonth() === month,\n });\n });\n\n return spans;\n}\n\nfunction calculateLanes(spans: MonthSpan[]): Map<string, number> {\n const laneMap = new Map<string, number>();\n const lanes: { endDay: number }[] = [];\n const sorted = [...spans].sort((a, b) => a.startDay - b.startDay);\n\n sorted.forEach((span) => {\n let laneIndex = lanes.findIndex((lane) => lane.endDay < span.startDay);\n if (laneIndex === -1) {\n laneIndex = lanes.length;\n lanes.push({ endDay: span.endDay });\n } else {\n lanes[laneIndex].endDay = span.endDay;\n }\n laneMap.set(span.event.id, laneIndex);\n });\n\n return laneMap;\n}\n\nexport function YearlyCalendar({\n year,\n events = [],\n onDateClick,\n onDateDoubleClick,\n onDateRangeSelect,\n onEventClick,\n onEventMove,\n categoryColors = {},\n theme: customTheme,\n}: YearlyCalendarProps) {\n // テーマをマージ\n const theme = useMemo(() => mergeTheme(customTheme), [customTheme]);\n const styles = useMemo(() => createStyles(theme), [theme]);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const [rowHeight, setRowHeight] = useState(MIN_ROW_HEIGHT);\n\n useEffect(() => {\n const updateRowHeight = () => {\n if (containerRef.current) {\n const containerHeight = containerRef.current.clientHeight;\n const calculatedHeight = Math.floor(\n (containerHeight - HEADER_HEIGHT) / 31\n );\n setRowHeight(Math.max(calculatedHeight, MIN_ROW_HEIGHT));\n }\n };\n\n updateRowHeight();\n window.addEventListener(\"resize\", updateRowHeight);\n return () => window.removeEventListener(\"resize\", updateRowHeight);\n }, []);\n\n const [draggingEvent, setDraggingEvent] = useState<CalendarEvent | null>(\n null\n );\n const [dragOffset, setDragOffset] = useState<number>(0);\n const [dragOverCell, setDragOverCell] = useState<{\n month: number;\n day: number;\n } | null>(null);\n const [dragPosition, setDragPosition] = useState<{\n x: number;\n y: number;\n } | null>(null);\n const [dragGrabOffsetY, setDragGrabOffsetY] = useState<number>(0);\n const [dragCardHeight, setDragCardHeight] = useState<number>(0);\n const [pendingMove, setPendingMove] = useState<{\n event: CalendarEvent;\n newStartDate: Date;\n newEndDate: Date | undefined;\n isResize?: boolean;\n } | null>(null);\n const [hoveredEvent, setHoveredEvent] = useState<{\n event: CalendarEvent;\n x: number;\n y: number;\n } | null>(null);\n const [resizingEvent, setResizingEvent] = useState<{\n event: CalendarEvent;\n edge: \"start\" | \"end\";\n } | null>(null);\n const [hoveredCell, setHoveredCell] = useState<{\n month: number;\n day: number;\n } | null>(null);\n const [hoveredEventBar, setHoveredEventBar] = useState<string | null>(null);\n const [hoveredResizeHandle, setHoveredResizeHandle] = useState<{\n eventId: string;\n edge: \"start\" | \"end\";\n } | null>(null);\n const [hoveredCancelButton, setHoveredCancelButton] = useState(false);\n const [hoveredConfirmButton, setHoveredConfirmButton] = useState(false);\n\n // Range selection state\n const [rangeSelectionStart, setRangeSelectionStart] = useState<{\n month: number;\n day: number;\n } | null>(null);\n const [rangeSelectionEnd, setRangeSelectionEnd] = useState<{\n month: number;\n day: number;\n } | null>(null);\n const isRangeSelecting = rangeSelectionStart !== null;\n\n const monthSpans = useMemo(() => {\n const result: MonthSpan[][] = [];\n for (let month = 0; month < 12; month++) {\n result.push(getMonthSpans(events, year, month));\n }\n return result;\n }, [events, year]);\n\n const laneMaps = useMemo(() => {\n return monthSpans.map((spans) => calculateLanes(spans));\n }, [monthSpans]);\n\n // 各月のレーン数(重なっているカードの数)\n const maxLanes = useMemo(() => {\n return laneMaps.map((laneMap) => {\n let max = 0;\n laneMap.forEach((lane) => {\n max = Math.max(max, lane + 1);\n });\n return Math.max(max, 1);\n });\n }, [laneMaps]);\n\n // リサイズ中のプレビュー範囲を計算\n const resizePreviewSpans = useMemo(() => {\n if (!resizingEvent || !dragOverCell) return null;\n\n const { event, edge } = resizingEvent;\n const dropDate = new Date(year, dragOverCell.month, dragOverCell.day);\n\n let newStartDate = new Date(event.date);\n let newEndDate = new Date(event.endDate || event.date);\n\n if (edge === \"start\") {\n if (dropDate <= newEndDate) {\n newStartDate = dropDate;\n }\n } else {\n if (dropDate >= newStartDate) {\n newEndDate = dropDate;\n }\n }\n\n const spans = new Map<number, MonthSpan>();\n for (let month = 0; month < 12; month++) {\n const daysInMonth = getDaysInMonth(year, month);\n const monthStart = new Date(year, month, 1);\n const monthEnd = new Date(year, month, daysInMonth, 23, 59, 59);\n\n if (newStartDate > monthEnd || newEndDate < monthStart) continue;\n\n const spanStart = newStartDate >= monthStart ? newStartDate.getDate() : 1;\n const spanEnd =\n newEndDate <= monthEnd ? newEndDate.getDate() : daysInMonth;\n\n spans.set(month, {\n event,\n startDay: spanStart,\n endDay: spanEnd,\n isStart:\n newStartDate.getFullYear() === year &&\n newStartDate.getMonth() === month,\n isEnd:\n newEndDate.getFullYear() === year && newEndDate.getMonth() === month,\n });\n }\n\n return spans;\n }, [resizingEvent, dragOverCell, year]);\n\n const getEventColor = (event: CalendarEvent): string => {\n if (event.color) return event.color;\n if (event.category && categoryColors[event.category]) {\n return categoryColors[event.category];\n }\n return \"#3b82f6\";\n };\n\n const eventsByDate = useMemo(() => {\n const map = new Map<string, CalendarEvent[]>();\n events.forEach((event) => {\n const startDate = event.date;\n const endDate = event.endDate || event.date;\n const current = new Date(startDate);\n while (current <= endDate) {\n const dateKey = `${current.getFullYear()}-${current.getMonth()}-${current.getDate()}`;\n const existing = map.get(dateKey) || [];\n map.set(dateKey, [...existing, event]);\n current.setDate(current.getDate() + 1);\n }\n });\n return map;\n }, [events]);\n\n const getEventsForDate = (month: number, day: number): CalendarEvent[] => {\n const dateKey = `${year}-${month}-${day}`;\n return eventsByDate.get(dateKey) || [];\n };\n\n const handleCellClick = (month: number, day: number) => {\n if (!onDateClick) return;\n const daysInMonth = getDaysInMonth(year, month);\n if (day > daysInMonth) return;\n const date = new Date(year, month, day);\n const cellEvents = getEventsForDate(month, day);\n onDateClick(date, cellEvents);\n };\n\n const handleCellDoubleClick = (month: number, day: number) => {\n if (!onDateDoubleClick) return;\n const daysInMonth = getDaysInMonth(year, month);\n if (day > daysInMonth) return;\n const date = new Date(year, month, day);\n const cellEvents = getEventsForDate(month, day);\n onDateDoubleClick(date, cellEvents);\n };\n\n // Range selection helpers\n const dateToNumber = (month: number, day: number): number => {\n return new Date(year, month, day).getTime();\n };\n\n const isInSelectionRange = (month: number, day: number): boolean => {\n if (!rangeSelectionStart || !rangeSelectionEnd) return false;\n const cellDate = dateToNumber(month, day);\n const startDate = dateToNumber(rangeSelectionStart.month, rangeSelectionStart.day);\n const endDate = dateToNumber(rangeSelectionEnd.month, rangeSelectionEnd.day);\n const minDate = Math.min(startDate, endDate);\n const maxDate = Math.max(startDate, endDate);\n return cellDate >= minDate && cellDate <= maxDate;\n };\n\n const handleRangeSelectStart = useCallback(\n (month: number, day: number) => {\n if (!onDateRangeSelect) return;\n if (draggingEvent || resizingEvent) return;\n setRangeSelectionStart({ month, day });\n setRangeSelectionEnd({ month, day });\n },\n [onDateRangeSelect, draggingEvent, resizingEvent]\n );\n\n const handleRangeSelectMove = useCallback(\n (month: number, day: number) => {\n if (!rangeSelectionStart) return;\n setRangeSelectionEnd({ month, day });\n },\n [rangeSelectionStart]\n );\n\n const handleRangeSelectEnd = useCallback(() => {\n if (!rangeSelectionStart || !rangeSelectionEnd || !onDateRangeSelect) {\n setRangeSelectionStart(null);\n setRangeSelectionEnd(null);\n return;\n }\n\n const startDate = new Date(year, rangeSelectionStart.month, rangeSelectionStart.day);\n const endDate = new Date(year, rangeSelectionEnd.month, rangeSelectionEnd.day);\n\n // Ensure start is before end\n const [finalStart, finalEnd] = startDate <= endDate\n ? [startDate, endDate]\n : [endDate, startDate];\n\n onDateRangeSelect(finalStart, finalEnd);\n setRangeSelectionStart(null);\n setRangeSelectionEnd(null);\n }, [rangeSelectionStart, rangeSelectionEnd, year, onDateRangeSelect]);\n\n const handleDragStart = useCallback(\n (\n e: React.DragEvent,\n event: CalendarEvent,\n monthIndex: number,\n spanStartDay: number\n ) => {\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.setData(\"text/plain\", event.id);\n\n const rect = e.currentTarget.getBoundingClientRect();\n const clickY = e.clientY - rect.top;\n const dayOffset = Math.floor(clickY / rowHeight);\n const grabDay = spanStartDay + dayOffset;\n\n setDragGrabOffsetY(clickY);\n setDragCardHeight(rect.height);\n const grabDate = new Date(year, monthIndex, grabDay);\n const startDate = event.date;\n const offsetDays = Math.floor(\n (grabDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24)\n );\n setDragOffset(offsetDays);\n\n requestAnimationFrame(() => {\n setDraggingEvent(event);\n });\n },\n [year, rowHeight]\n );\n\n const handleDragOver = useCallback(\n (e: React.DragEvent, month: number, day: number) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = \"move\";\n\n if (draggingEvent && dragGrabOffsetY > 0) {\n const dayOffset = Math.floor(dragGrabOffsetY / rowHeight);\n let cardTopDay = day - dayOffset;\n let cardTopMonth = month;\n\n while (cardTopDay < 1 && cardTopMonth > 0) {\n cardTopMonth--;\n cardTopDay += getDaysInMonth(year, cardTopMonth);\n }\n let daysInMonth = getDaysInMonth(year, cardTopMonth);\n while (cardTopDay > daysInMonth && cardTopMonth < 11) {\n cardTopDay -= daysInMonth;\n cardTopMonth++;\n daysInMonth = getDaysInMonth(year, cardTopMonth);\n }\n cardTopDay = Math.max(\n 1,\n Math.min(cardTopDay, getDaysInMonth(year, cardTopMonth))\n );\n\n setDragOverCell({ month: cardTopMonth, day: cardTopDay });\n } else {\n setDragOverCell({ month, day });\n }\n setDragPosition({ x: e.clientX, y: e.clientY });\n },\n [draggingEvent, dragGrabOffsetY, year, rowHeight]\n );\n\n const handleDragLeave = useCallback(() => {\n setDragOverCell(null);\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n if (draggingEvent && onEventMove && dragOverCell) {\n const newStartDate = new Date(\n year,\n dragOverCell.month,\n dragOverCell.day\n );\n\n let newEndDate: Date | undefined;\n if (draggingEvent.endDate) {\n const duration =\n draggingEvent.endDate.getTime() - draggingEvent.date.getTime();\n newEndDate = new Date(newStartDate.getTime() + duration);\n }\n\n onEventMove(draggingEvent, newStartDate, newEndDate);\n }\n setDragOverCell(null);\n setDragPosition(null);\n setDraggingEvent(null);\n setDragOffset(0);\n },\n [draggingEvent, dragOverCell, year, onEventMove]\n );\n\n const handleDragEnd = useCallback(() => {\n setDraggingEvent(null);\n setDragOverCell(null);\n setDragPosition(null);\n setDragGrabOffsetY(0);\n setDragCardHeight(0);\n }, []);\n\n const handleConfirmMove = useCallback(() => {\n if (pendingMove && onEventMove) {\n onEventMove(\n pendingMove.event,\n pendingMove.newStartDate,\n pendingMove.newEndDate\n );\n }\n setPendingMove(null);\n }, [pendingMove, onEventMove]);\n\n const handleCancelMove = useCallback(() => {\n setPendingMove(null);\n }, []);\n\n const handleResizeStart = useCallback(\n (e: React.DragEvent, event: CalendarEvent, edge: \"start\" | \"end\") => {\n e.stopPropagation();\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.setData(\"text/plain\", `resize-${event.id}`);\n requestAnimationFrame(() => {\n setResizingEvent({ event, edge });\n });\n },\n []\n );\n\n const handleResizeDrop = useCallback(\n (month: number, day: number) => {\n if (!resizingEvent || !onEventMove) return;\n\n const { event, edge } = resizingEvent;\n const dropDate = new Date(year, month, day);\n\n let newStartDate = event.date;\n let newEndDate = event.endDate || event.date;\n\n if (edge === \"start\") {\n if (dropDate <= newEndDate) {\n newStartDate = dropDate;\n }\n } else {\n if (dropDate >= newStartDate) {\n newEndDate = dropDate;\n }\n }\n\n const finalEndDate =\n newStartDate.getTime() === newEndDate.getTime()\n ? undefined\n : newEndDate;\n onEventMove(event, newStartDate, finalEndDate);\n\n setResizingEvent(null);\n setDragOverCell(null);\n setDragPosition(null);\n },\n [resizingEvent, year, onEventMove]\n );\n\n const handleResizeEnd = useCallback(() => {\n setResizingEvent(null);\n setDragOverCell(null);\n setDragPosition(null);\n }, []);\n\n useEffect(() => {\n const handleGlobalMouseUp = () => {\n setResizingEvent(null);\n setDraggingEvent(null);\n setDragOverCell(null);\n setDragPosition(null);\n setDragGrabOffsetY(0);\n setDragCardHeight(0);\n setDragOffset(0);\n // End range selection on global mouse up\n if (rangeSelectionStart) {\n handleRangeSelectEnd();\n }\n };\n\n window.addEventListener(\"mouseup\", handleGlobalMouseUp);\n window.addEventListener(\"dragend\", handleGlobalMouseUp);\n return () => {\n window.removeEventListener(\"mouseup\", handleGlobalMouseUp);\n window.removeEventListener(\"dragend\", handleGlobalMouseUp);\n };\n }, [rangeSelectionStart, handleRangeSelectEnd]);\n\n const getWeekdayName = (month: number, day: number) => {\n const date = new Date(year, month, day);\n return [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"][date.getDay()];\n };\n\n return (\n <div ref={containerRef} style={styles.container}>\n {/* ドラッグ中のフローティング日付表示 */}\n {draggingEvent &&\n dragOverCell &&\n dragPosition &&\n (() => {\n const cardTop = dragPosition.y - dragGrabOffsetY;\n const cardBottom = cardTop + dragCardHeight;\n const showBelow = cardTop < 80;\n return (\n <div\n style={{\n ...styles.floatingDate,\n left: dragPosition.x,\n top: showBelow ? cardBottom + 8 : cardTop - 8,\n transform: showBelow\n ? \"translateX(-50%)\"\n : \"translateX(-50%) translateY(-100%)\",\n }}\n >\n <div style={styles.floatingDateContent}>\n <div>\n {dragOverCell.month + 1}月{dragOverCell.day}日(\n {getWeekdayName(dragOverCell.month, dragOverCell.day)})\n </div>\n <div style={styles.floatingDateSubtext}>\n {draggingEvent.title}\n </div>\n </div>\n </div>\n );\n })()}\n\n {/* リサイズ中のフローティング日付表示 */}\n {resizingEvent && dragOverCell && dragPosition && (\n <div\n style={{\n ...styles.floatingDate,\n left: dragPosition.x,\n top: dragPosition.y - 50,\n }}\n >\n <div style={styles.resizeFloatingContent}>\n <div>\n {resizingEvent.edge === \"start\" ? \"開始日:\" : \"終了日:\"}\n {dragOverCell.month + 1}月{dragOverCell.day}日(\n {getWeekdayName(dragOverCell.month, dragOverCell.day)})\n </div>\n <div style={styles.floatingDateSubtext}>\n {resizingEvent.event.title}\n </div>\n </div>\n </div>\n )}\n\n <div style={styles.flexContainer}>\n {/* 日付列 */}\n <div style={styles.dayColumn}>\n <div style={styles.dayHeaderCell}>日</div>\n {DAYS.map((day) => (\n <div key={day} style={{ ...styles.dayCell, height: rowHeight }}>\n {day}\n </div>\n ))}\n </div>\n\n {/* 月ごとの列 */}\n {MONTHS.map((monthName, monthIndex) => {\n const daysInMonth = getDaysInMonth(year, monthIndex);\n const spans = monthSpans[monthIndex];\n const laneMap = laneMaps[monthIndex];\n const laneCount = maxLanes[monthIndex]; // この月のレーン数\n\n return (\n <div key={monthIndex} style={styles.monthColumn}>\n {/* 月ヘッダー */}\n <div style={styles.monthHeader}>{monthName}</div>\n\n {/* 日付セル(背景) */}\n {DAYS.map((day) => {\n const isValidDay = day <= daysInMonth;\n const sunday = isValidDay && isSunday(year, monthIndex, day);\n const saturday =\n isValidDay && isSaturday(year, monthIndex, day);\n const isHovered =\n hoveredCell?.month === monthIndex && hoveredCell?.day === day;\n const isInRange = isValidDay && isInSelectionRange(monthIndex, day);\n\n return (\n <div\n key={day}\n style={{\n ...styles.calendarCell,\n height: rowHeight,\n backgroundColor: isInRange\n ? \"rgba(59, 130, 246, 0.3)\"\n : getCellBackgroundColor(\n theme,\n isValidDay,\n sunday,\n saturday,\n isHovered && isValidDay && !isRangeSelecting\n ),\n cursor: isValidDay ? \"pointer\" : \"default\",\n userSelect: \"none\",\n }}\n onClick={() =>\n isValidDay && !isRangeSelecting && handleCellClick(monthIndex, day)\n }\n onDoubleClick={() =>\n isValidDay && handleCellDoubleClick(monthIndex, day)\n }\n onMouseDown={() =>\n isValidDay && handleRangeSelectStart(monthIndex, day)\n }\n onMouseEnter={() => {\n if (isValidDay) {\n setHoveredCell({ month: monthIndex, day });\n if (isRangeSelecting) {\n handleRangeSelectMove(monthIndex, day);\n }\n }\n }}\n onMouseLeave={() => setHoveredCell(null)}\n onDragOver={(e) =>\n isValidDay && handleDragOver(e, monthIndex, day)\n }\n onDragLeave={handleDragLeave}\n onDrop={(e) => {\n if (!isValidDay) return;\n if (resizingEvent) {\n handleResizeDrop(monthIndex, day);\n } else {\n handleDrop(e);\n }\n }}\n />\n );\n })}\n\n {/* ドロップインジケーター */}\n {(draggingEvent || resizingEvent) &&\n dragOverCell?.month === monthIndex &&\n dragOverCell.day <= daysInMonth && (\n <div\n style={{\n ...styles.dropIndicator,\n top: 24 + (dragOverCell.day - 1) * rowHeight,\n height: rowHeight,\n }}\n >\n <div style={styles.dropIndicatorInner} />\n </div>\n )}\n\n {/* イベントバー */}\n <div style={styles.eventBarContainer}>\n {spans.map((span) => {\n const laneIndex = laneMap.get(span.event.id) || 0;\n // この月のレーン数に応じた幅(重なりがある場合のみ分割)\n const laneWidth = 100 / laneCount;\n const left = laneIndex * laneWidth;\n\n const isDraggingThis = draggingEvent?.id === span.event.id;\n const isResizingThis =\n resizingEvent?.event.id === span.event.id;\n\n let displaySpan = span;\n if (isResizingThis && resizePreviewSpans) {\n const previewSpan = resizePreviewSpans.get(monthIndex);\n if (previewSpan) {\n displaySpan = previewSpan;\n } else {\n return null;\n }\n }\n\n const displayStartDay = displaySpan.startDay;\n const displayEndDay = displaySpan.endDay;\n const top = (displayStartDay - 1) * rowHeight + 2;\n const height =\n (displayEndDay - displayStartDay + 1) * rowHeight - 4;\n const spanDays = displayEndDay - displayStartDay + 1;\n\n const isInteractive = !draggingEvent && !resizingEvent;\n const isHovered = hoveredEventBar === span.event.id;\n\n return (\n <div\n key={span.event.id}\n style={{\n ...styles.eventBar,\n top,\n left: `${left}%`,\n width: `calc(${laneWidth}% - 4px)`,\n height,\n backgroundColor: getEventColor(span.event),\n borderRadius: `${span.isStart ? 4 : 0}px ${span.isStart ? 4 : 0}px ${span.isEnd ? 4 : 0}px ${span.isEnd ? 4 : 0}px`,\n opacity: isDraggingThis ? 0.3 : 1,\n border: isResizingThis\n ? \"2px dashed rgba(255, 255, 255, 0.8)\"\n : \"none\",\n zIndex: isResizingThis ? 30 : isHovered ? 50 : 10,\n filter: isHovered ? \"brightness(1.1)\" : \"none\",\n pointerEvents: isInteractive ? \"auto\" : \"none\",\n }}\n draggable\n onDragStart={(e) =>\n handleDragStart(\n e,\n span.event,\n monthIndex,\n span.startDay\n )\n }\n onDragEnd={handleDragEnd}\n onMouseEnter={(e) => {\n setHoveredEventBar(span.event.id);\n const rect = e.currentTarget.getBoundingClientRect();\n setHoveredEvent({\n event: span.event,\n x: rect.right + 8,\n y: rect.top,\n });\n }}\n onMouseLeave={() => {\n setHoveredEventBar(null);\n setHoveredEvent(null);\n }}\n onClick={(e) => {\n e.stopPropagation();\n onEventClick?.(span.event);\n }}\n >\n {/* 前月から続くインジケーター */}\n {!span.isStart && (\n <div style={{ ...styles.indicator, ...styles.indicatorTop }}>\n ▲\n </div>\n )}\n\n {/* 縦書きタイトル(2日以上) */}\n {span.isStart && spanDays >= 2 && (\n <div style={styles.verticalTitle}>\n <span\n style={{\n ...styles.truncate,\n maxHeight: \"100%\",\n padding: \"0 2px\",\n }}\n >\n {span.event.title}\n </span>\n </div>\n )}\n\n {/* 横書きタイトル(1日のみ) */}\n {span.isStart && spanDays === 1 && (\n <div style={styles.horizontalTitle}>\n <span style={styles.truncate}>{span.event.title}</span>\n </div>\n )}\n\n {/* 翌月へ続くインジケーター */}\n {!span.isEnd && (\n <div style={{ ...styles.indicator, ...styles.indicatorBottom }}>\n ▼\n </div>\n )}\n\n {/* リサイズハンドル */}\n {span.event.endDate && isInteractive && (\n <>\n {span.isStart && (\n <div\n style={{\n ...styles.resizeHandle,\n ...styles.resizeHandleTop,\n opacity:\n hoveredResizeHandle?.eventId === span.event.id &&\n hoveredResizeHandle?.edge === \"start\"\n ? 1\n : 0,\n }}\n draggable\n onDragStart={(e) => {\n e.stopPropagation();\n handleResizeStart(e, span.event, \"start\");\n }}\n onDragEnd={handleResizeEnd}\n onMouseEnter={() =>\n setHoveredResizeHandle({\n eventId: span.event.id,\n edge: \"start\",\n })\n }\n onMouseLeave={() => setHoveredResizeHandle(null)}\n />\n )}\n {span.isEnd && (\n <div\n style={{\n ...styles.resizeHandle,\n ...styles.resizeHandleBottom,\n opacity:\n hoveredResizeHandle?.eventId === span.event.id &&\n hoveredResizeHandle?.edge === \"end\"\n ? 1\n : 0,\n }}\n draggable\n onDragStart={(e) => {\n e.stopPropagation();\n handleResizeStart(e, span.event, \"end\");\n }}\n onDragEnd={handleResizeEnd}\n onMouseEnter={() =>\n setHoveredResizeHandle({\n eventId: span.event.id,\n edge: \"end\",\n })\n }\n onMouseLeave={() => setHoveredResizeHandle(null)}\n />\n )}\n </>\n )}\n </div>\n );\n })}\n\n {/* リサイズで新たに追加される月のプレビュースパン */}\n {resizingEvent &&\n resizePreviewSpans &&\n resizePreviewSpans.has(monthIndex) &&\n !spans.some((s) => s.event.id === resizingEvent.event.id) &&\n (() => {\n const previewSpan = resizePreviewSpans.get(monthIndex)!;\n // 元のイベントがあった月のレーンを取得\n let originalLaneIndex = 0;\n for (let m = 0; m < 12; m++) {\n const lane = laneMaps[m].get(resizingEvent.event.id);\n if (lane !== undefined) {\n originalLaneIndex = lane;\n break;\n }\n }\n // プレビュー月のレーン数を使用\n const previewLaneCount = maxLanes[monthIndex];\n const laneWidth = 100 / previewLaneCount;\n const left = Math.min(originalLaneIndex, previewLaneCount - 1) * laneWidth;\n const top = (previewSpan.startDay - 1) * rowHeight + 2;\n const height =\n (previewSpan.endDay - previewSpan.startDay + 1) *\n rowHeight -\n 4;\n\n return (\n <div\n key={`preview-${resizingEvent.event.id}`}\n style={{\n ...styles.eventBar,\n top,\n left: `${left}%`,\n width: `calc(${laneWidth}% - 4px)`,\n height,\n backgroundColor: getEventColor(resizingEvent.event),\n borderRadius: `${previewSpan.isStart ? 4 : 0}px ${previewSpan.isStart ? 4 : 0}px ${previewSpan.isEnd ? 4 : 0}px ${previewSpan.isEnd ? 4 : 0}px`,\n border: \"2px dashed rgba(255, 255, 255, 0.8)\",\n opacity: 0.7,\n zIndex: 30,\n }}\n >\n {!previewSpan.isStart && (\n <div style={{ ...styles.indicator, ...styles.indicatorTop }}>\n ▲\n </div>\n )}\n {!previewSpan.isEnd && (\n <div style={{ ...styles.indicator, ...styles.indicatorBottom }}>\n ▼\n </div>\n )}\n </div>\n );\n })()}\n </div>\n </div>\n );\n })}\n </div>\n\n {/* ホバーツールチップ */}\n {hoveredEvent && !draggingEvent && !resizingEvent && (\n <div\n style={{\n ...styles.tooltip,\n left: hoveredEvent.x,\n top: hoveredEvent.y,\n }}\n >\n <div style={styles.tooltipContent}>\n <div style={styles.tooltipTitle}>{hoveredEvent.event.title}</div>\n <div style={styles.tooltipDate}>\n {hoveredEvent.event.date.toLocaleDateString(\"ja-JP\", {\n month: \"short\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {hoveredEvent.event.endDate && (\n <>\n {\" 〜 \"}\n {hoveredEvent.event.endDate.toLocaleDateString(\"ja-JP\", {\n month: \"short\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n </>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* 移動/リサイズ確認ダイアログ */}\n {pendingMove && (\n <div style={styles.dialogOverlay}>\n <div style={styles.dialogContent}>\n <h3 style={styles.dialogTitle}>\n {pendingMove.isResize\n ? \"期間を変更しますか?\"\n : \"予定を移動しますか?\"}\n </h3>\n <div style={styles.dialogBody}>\n <div style={styles.dialogEventTitle}>{pendingMove.event.title}</div>\n <div style={{ marginTop: 4 }}>\n <span style={styles.dialogDateLabel}>変更前:</span>\n {pendingMove.event.date.toLocaleDateString(\"ja-JP\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {pendingMove.event.endDate && (\n <>\n {\" 〜 \"}\n {pendingMove.event.endDate.toLocaleDateString(\"ja-JP\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n </>\n )}\n </div>\n <div style={{ marginTop: 4 }}>\n <span style={styles.dialogDateLabel}>変更後:</span>\n {pendingMove.newStartDate.toLocaleDateString(\"ja-JP\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {pendingMove.newEndDate && (\n <>\n {\" 〜 \"}\n {pendingMove.newEndDate.toLocaleDateString(\"ja-JP\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n </>\n )}\n </div>\n </div>\n <div style={styles.dialogButtons}>\n <button\n onClick={handleCancelMove}\n style={{\n ...styles.dialogCancelButton,\n backgroundColor: hoveredCancelButton\n ? theme.bgGray100\n : \"transparent\",\n }}\n onMouseEnter={() => setHoveredCancelButton(true)}\n onMouseLeave={() => setHoveredCancelButton(false)}\n >\n キャンセル\n </button>\n <button\n onClick={handleConfirmMove}\n style={{\n ...styles.dialogConfirmButton,\n backgroundColor: hoveredConfirmButton\n ? theme.buttonPrimaryHover\n : theme.buttonPrimary,\n }}\n onMouseEnter={() => setHoveredConfirmButton(true)}\n onMouseLeave={() => setHoveredConfirmButton(false)}\n >\n {pendingMove.isResize ? \"変更する\" : \"移動する\"}\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/YearlyCalendar/styles.ts","../src/YearlyCalendar/YearlyCalendar.tsx"],"names":["isSunday","isSaturday"],"mappings":"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","file":"index.mjs","sourcesContent":["import { CSSProperties } from \"react\";\nimport type { ThemeColors } from \"./types\";\n\n// デフォルトテーマカラー\nexport const defaultTheme: Required<ThemeColors> = {\n // 背景色\n bgWhite: \"#ffffff\",\n bgGray50: \"#f9fafb\",\n bgGray100: \"#f3f4f6\",\n bgSunday: \"#fef2f2\",\n bgSaturday: \"#eff6ff\",\n bgDropHighlight: \"rgba(191, 219, 254, 0.5)\",\n\n // ボーダー\n borderDefault: \"#d1d5db\",\n borderDropHighlight: \"#3b82f6\",\n\n // テキスト\n textPrimary: \"#111827\",\n textSecondary: \"#4b5563\",\n textMuted: \"#6b7280\",\n\n // UI要素\n tooltipBg: \"#111827\",\n tooltipText: \"#ffffff\",\n dialogOverlay: \"rgba(0, 0, 0, 0.3)\",\n buttonPrimary: \"#2563eb\",\n buttonPrimaryHover: \"#1d4ed8\",\n floatingDateBg: \"#2563eb\",\n resizeFloatingBg: \"#9333ea\",\n};\n\n// テーマをマージするヘルパー\nexport function mergeTheme(custom?: ThemeColors): Required<ThemeColors> {\n if (!custom) return defaultTheme;\n return { ...defaultTheme, ...custom };\n}\n\n// スタイル生成関数\nexport function createStyles(theme: Required<ThemeColors>) {\n return {\n // コンテナ\n container: {\n width: \"100%\",\n height: \"100%\",\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n } as CSSProperties,\n\n // フレックスコンテナ\n flexContainer: {\n display: \"flex\",\n width: \"100%\",\n flex: 1,\n } as CSSProperties,\n\n // 日付列(左側固定)\n dayColumn: {\n position: \"sticky\",\n left: 0,\n zIndex: 20,\n backgroundColor: theme.bgGray100,\n flexShrink: 0,\n display: \"flex\",\n flexDirection: \"column\",\n } as CSSProperties,\n\n // 日付ヘッダーセル\n dayHeaderCell: {\n height: 24,\n border: `1px solid ${theme.borderDefault}`,\n backgroundColor: theme.bgGray100,\n padding: \"0 4px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontWeight: 500,\n fontSize: 12,\n width: 32,\n } as CSSProperties,\n\n // 日付セル\n dayCell: {\n border: `1px solid ${theme.borderDefault}`,\n backgroundColor: theme.bgGray50,\n padding: \"0 4px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontWeight: 500,\n fontSize: 12,\n width: 32,\n } as CSSProperties,\n\n // 月列\n monthColumn: {\n position: \"relative\",\n flex: 1,\n minWidth: 0,\n } as CSSProperties,\n\n // 月ヘッダー\n monthHeader: {\n height: 24,\n border: `1px solid ${theme.borderDefault}`,\n backgroundColor: theme.bgGray100,\n padding: \"0 4px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontWeight: 500,\n fontSize: 12,\n } as CSSProperties,\n\n // カレンダーセル(基本)\n calendarCell: {\n border: `1px solid ${theme.borderDefault}`,\n position: \"relative\",\n } as CSSProperties,\n\n // イベントバーコンテナ\n eventBarContainer: {\n position: \"absolute\",\n top: 24,\n left: 0,\n right: \"20%\",\n padding: \"0 2px\",\n pointerEvents: \"none\",\n zIndex: 10,\n } as CSSProperties,\n\n // イベントバー\n eventBar: {\n position: \"absolute\",\n cursor: \"grab\",\n transition: \"filter 0.15s, z-index 0.15s\",\n boxShadow: \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n } as CSSProperties,\n\n // ドロップインジケーター\n dropIndicator: {\n position: \"absolute\",\n left: 0,\n right: 0,\n pointerEvents: \"none\",\n zIndex: 50,\n } as CSSProperties,\n\n dropIndicatorInner: {\n height: \"100%\",\n border: `2px solid ${theme.borderDropHighlight}`,\n backgroundColor: theme.bgDropHighlight,\n borderRadius: 4,\n } as CSSProperties,\n\n // フローティング日付表示\n floatingDate: {\n position: \"fixed\",\n zIndex: 100,\n pointerEvents: \"none\",\n transform: \"translateX(-50%)\",\n } as CSSProperties,\n\n floatingDateContent: {\n backgroundColor: theme.floatingDateBg,\n color: theme.tooltipText,\n fontSize: 14,\n fontWeight: 700,\n borderRadius: 8,\n padding: \"8px 12px\",\n boxShadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n } as CSSProperties,\n\n floatingDateSubtext: {\n fontSize: 12,\n fontWeight: 400,\n opacity: 0.8,\n } as CSSProperties,\n\n // リサイズ用フローティング表示\n resizeFloatingContent: {\n backgroundColor: theme.resizeFloatingBg,\n color: theme.tooltipText,\n fontSize: 14,\n fontWeight: 700,\n borderRadius: 8,\n padding: \"8px 12px\",\n boxShadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n } as CSSProperties,\n\n // ツールチップ\n tooltip: {\n position: \"fixed\",\n zIndex: 200,\n pointerEvents: \"none\",\n } as CSSProperties,\n\n tooltipContent: {\n backgroundColor: theme.tooltipBg,\n color: theme.tooltipText,\n fontSize: 12,\n borderRadius: 4,\n padding: \"6px 8px\",\n whiteSpace: \"nowrap\",\n boxShadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n } as CSSProperties,\n\n tooltipTitle: {\n fontWeight: 500,\n } as CSSProperties,\n\n tooltipDate: {\n color: \"rgba(255, 255, 255, 0.7)\",\n fontSize: 10,\n marginTop: 2,\n } as CSSProperties,\n\n // 確認ダイアログ\n dialogOverlay: {\n position: \"fixed\",\n inset: 0,\n zIndex: 100,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: theme.dialogOverlay,\n } as CSSProperties,\n\n dialogContent: {\n backgroundColor: theme.bgWhite,\n borderRadius: 8,\n boxShadow: \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n padding: 16,\n maxWidth: 384,\n margin: \"0 16px\",\n } as CSSProperties,\n\n dialogTitle: {\n fontWeight: 700,\n color: theme.textPrimary,\n marginBottom: 8,\n } as CSSProperties,\n\n dialogBody: {\n fontSize: 14,\n color: theme.textSecondary,\n marginBottom: 16,\n } as CSSProperties,\n\n dialogEventTitle: {\n fontWeight: 500,\n color: theme.textPrimary,\n } as CSSProperties,\n\n dialogDateLabel: {\n color: theme.textMuted,\n } as CSSProperties,\n\n dialogButtons: {\n display: \"flex\",\n gap: 8,\n justifyContent: \"flex-end\",\n } as CSSProperties,\n\n dialogCancelButton: {\n padding: \"8px 16px\",\n fontSize: 14,\n color: theme.textSecondary,\n backgroundColor: \"transparent\",\n border: \"none\",\n borderRadius: 4,\n cursor: \"pointer\",\n } as CSSProperties,\n\n dialogConfirmButton: {\n padding: \"8px 16px\",\n fontSize: 14,\n color: theme.tooltipText,\n backgroundColor: theme.buttonPrimary,\n border: \"none\",\n borderRadius: 4,\n cursor: \"pointer\",\n } as CSSProperties,\n\n // リサイズハンドル\n resizeHandle: {\n position: \"absolute\",\n left: 0,\n right: 0,\n height: 8,\n cursor: \"ns-resize\",\n opacity: 0,\n backgroundColor: \"rgba(255, 255, 255, 0.3)\",\n } as CSSProperties,\n\n resizeHandleTop: {\n top: 0,\n borderTopLeftRadius: 4,\n borderTopRightRadius: 4,\n } as CSSProperties,\n\n resizeHandleBottom: {\n bottom: 0,\n borderBottomLeftRadius: 4,\n borderBottomRightRadius: 4,\n } as CSSProperties,\n\n // インジケーター(▲▼)\n indicator: {\n position: \"absolute\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n fontSize: 8,\n color: \"rgba(255, 255, 255, 0.8)\",\n } as CSSProperties,\n\n indicatorTop: {\n top: -6,\n } as CSSProperties,\n\n indicatorBottom: {\n bottom: -6,\n } as CSSProperties,\n\n // 縦書きタイトル\n verticalTitle: {\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 10,\n color: \"#ffffff\",\n fontWeight: 500,\n overflow: \"hidden\",\n writingMode: \"vertical-rl\",\n } as CSSProperties,\n\n // 横書きタイトル\n horizontalTitle: {\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 9,\n color: \"#ffffff\",\n fontWeight: 500,\n overflow: \"hidden\",\n padding: \"0 2px\",\n } as CSSProperties,\n\n truncate: {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n } as CSSProperties,\n };\n}\n\n// セル背景色を取得\nexport function getCellBackgroundColor(\n theme: Required<ThemeColors>,\n isValidDay: boolean,\n isSunday: boolean,\n isSaturday: boolean,\n isHovered: boolean\n): string {\n if (!isValidDay) return theme.bgGray100;\n if (isHovered) return theme.bgGray50;\n if (isSunday) return theme.bgSunday;\n if (isSaturday) return theme.bgSaturday;\n return theme.bgWhite;\n}\n","\"use client\";\n\nimport { useMemo, useState, useCallback, useEffect, useRef } from \"react\";\nimport type { YearlyCalendarProps, CalendarEvent } from \"./types\";\nimport { createStyles, mergeTheme, getCellBackgroundColor, defaultTheme } from \"./styles\";\n\nconst MONTHS = [\n \"1月\",\n \"2月\",\n \"3月\",\n \"4月\",\n \"5月\",\n \"6月\",\n \"7月\",\n \"8月\",\n \"9月\",\n \"10月\",\n \"11月\",\n \"12月\",\n];\n\nconst DAYS = Array.from({ length: 31 }, (_, i) => i + 1);\nconst MIN_ROW_HEIGHT = 20;\nconst HEADER_HEIGHT = 24;\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction isSunday(year: number, month: number, day: number): boolean {\n return new Date(year, month, day).getDay() === 0;\n}\n\nfunction isSaturday(year: number, month: number, day: number): boolean {\n return new Date(year, month, day).getDay() === 6;\n}\n\ninterface MonthSpan {\n event: CalendarEvent;\n startDay: number;\n endDay: number;\n isStart: boolean;\n isEnd: boolean;\n}\n\nfunction getMonthSpans(\n events: CalendarEvent[],\n year: number,\n month: number\n): MonthSpan[] {\n const spans: MonthSpan[] = [];\n const daysInMonth = getDaysInMonth(year, month);\n\n events.forEach((event) => {\n const startDate = event.date;\n const endDate = event.endDate || event.date;\n\n const monthStart = new Date(year, month, 1);\n const monthEnd = new Date(year, month, daysInMonth, 23, 59, 59);\n\n if (startDate > monthEnd || endDate < monthStart) {\n return;\n }\n\n const spanStart = startDate >= monthStart ? startDate.getDate() : 1;\n const spanEnd = endDate <= monthEnd ? endDate.getDate() : daysInMonth;\n\n spans.push({\n event,\n startDay: spanStart,\n endDay: spanEnd,\n isStart:\n startDate.getFullYear() === year && startDate.getMonth() === month,\n isEnd: endDate.getFullYear() === year && endDate.getMonth() === month,\n });\n });\n\n return spans;\n}\n\nfunction calculateLanes(spans: MonthSpan[]): Map<string, number> {\n const laneMap = new Map<string, number>();\n const lanes: { endDay: number }[] = [];\n const sorted = [...spans].sort((a, b) => a.startDay - b.startDay);\n\n sorted.forEach((span) => {\n let laneIndex = lanes.findIndex((lane) => lane.endDay < span.startDay);\n if (laneIndex === -1) {\n laneIndex = lanes.length;\n lanes.push({ endDay: span.endDay });\n } else {\n lanes[laneIndex].endDay = span.endDay;\n }\n laneMap.set(span.event.id, laneIndex);\n });\n\n return laneMap;\n}\n\nexport function YearlyCalendar({\n year,\n events = [],\n onDateClick,\n onDateDoubleClick,\n onDateRangeSelect,\n onEventClick,\n onEventMove,\n highlightRange,\n categoryColors = {},\n theme: customTheme,\n}: YearlyCalendarProps) {\n // テーマをマージ\n const theme = useMemo(() => mergeTheme(customTheme), [customTheme]);\n const styles = useMemo(() => createStyles(theme), [theme]);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const [rowHeight, setRowHeight] = useState(MIN_ROW_HEIGHT);\n\n useEffect(() => {\n const updateRowHeight = () => {\n if (containerRef.current) {\n const containerHeight = containerRef.current.clientHeight;\n const calculatedHeight = Math.floor(\n (containerHeight - HEADER_HEIGHT) / 31\n );\n setRowHeight(Math.max(calculatedHeight, MIN_ROW_HEIGHT));\n }\n };\n\n updateRowHeight();\n window.addEventListener(\"resize\", updateRowHeight);\n return () => window.removeEventListener(\"resize\", updateRowHeight);\n }, []);\n\n const [draggingEvent, setDraggingEvent] = useState<CalendarEvent | null>(\n null\n );\n const [dragOffset, setDragOffset] = useState<number>(0);\n const [dragOverCell, setDragOverCell] = useState<{\n month: number;\n day: number;\n } | null>(null);\n const [dragPosition, setDragPosition] = useState<{\n x: number;\n y: number;\n } | null>(null);\n const [dragGrabOffsetY, setDragGrabOffsetY] = useState<number>(0);\n const [dragCardHeight, setDragCardHeight] = useState<number>(0);\n const [pendingMove, setPendingMove] = useState<{\n event: CalendarEvent;\n newStartDate: Date;\n newEndDate: Date | undefined;\n isResize?: boolean;\n } | null>(null);\n const [hoveredEvent, setHoveredEvent] = useState<{\n event: CalendarEvent;\n x: number;\n y: number;\n } | null>(null);\n const [resizingEvent, setResizingEvent] = useState<{\n event: CalendarEvent;\n edge: \"start\" | \"end\";\n } | null>(null);\n const [hoveredCell, setHoveredCell] = useState<{\n month: number;\n day: number;\n } | null>(null);\n const [hoveredEventBar, setHoveredEventBar] = useState<string | null>(null);\n const [hoveredResizeHandle, setHoveredResizeHandle] = useState<{\n eventId: string;\n edge: \"start\" | \"end\";\n } | null>(null);\n const [hoveredCancelButton, setHoveredCancelButton] = useState(false);\n const [hoveredConfirmButton, setHoveredConfirmButton] = useState(false);\n\n // Range selection state\n const [rangeSelectionStart, setRangeSelectionStart] = useState<{\n month: number;\n day: number;\n } | null>(null);\n const [rangeSelectionEnd, setRangeSelectionEnd] = useState<{\n month: number;\n day: number;\n } | null>(null);\n const isRangeSelecting = rangeSelectionStart !== null;\n\n const monthSpans = useMemo(() => {\n const result: MonthSpan[][] = [];\n for (let month = 0; month < 12; month++) {\n result.push(getMonthSpans(events, year, month));\n }\n return result;\n }, [events, year]);\n\n const laneMaps = useMemo(() => {\n return monthSpans.map((spans) => calculateLanes(spans));\n }, [monthSpans]);\n\n // 各月のレーン数(重なっているカードの数)\n const maxLanes = useMemo(() => {\n return laneMaps.map((laneMap) => {\n let max = 0;\n laneMap.forEach((lane) => {\n max = Math.max(max, lane + 1);\n });\n return Math.max(max, 1);\n });\n }, [laneMaps]);\n\n // リサイズ中のプレビュー範囲を計算\n const resizePreviewSpans = useMemo(() => {\n if (!resizingEvent || !dragOverCell) return null;\n\n const { event, edge } = resizingEvent;\n const dropDate = new Date(year, dragOverCell.month, dragOverCell.day);\n\n let newStartDate = new Date(event.date);\n let newEndDate = new Date(event.endDate || event.date);\n\n if (edge === \"start\") {\n if (dropDate <= newEndDate) {\n newStartDate = dropDate;\n }\n } else {\n if (dropDate >= newStartDate) {\n newEndDate = dropDate;\n }\n }\n\n const spans = new Map<number, MonthSpan>();\n for (let month = 0; month < 12; month++) {\n const daysInMonth = getDaysInMonth(year, month);\n const monthStart = new Date(year, month, 1);\n const monthEnd = new Date(year, month, daysInMonth, 23, 59, 59);\n\n if (newStartDate > monthEnd || newEndDate < monthStart) continue;\n\n const spanStart = newStartDate >= monthStart ? newStartDate.getDate() : 1;\n const spanEnd =\n newEndDate <= monthEnd ? newEndDate.getDate() : daysInMonth;\n\n spans.set(month, {\n event,\n startDay: spanStart,\n endDay: spanEnd,\n isStart:\n newStartDate.getFullYear() === year &&\n newStartDate.getMonth() === month,\n isEnd:\n newEndDate.getFullYear() === year && newEndDate.getMonth() === month,\n });\n }\n\n return spans;\n }, [resizingEvent, dragOverCell, year]);\n\n const getEventColor = (event: CalendarEvent): string => {\n if (event.color) return event.color;\n if (event.category && categoryColors[event.category]) {\n return categoryColors[event.category];\n }\n return \"#3b82f6\";\n };\n\n const eventsByDate = useMemo(() => {\n const map = new Map<string, CalendarEvent[]>();\n events.forEach((event) => {\n const startDate = event.date;\n const endDate = event.endDate || event.date;\n const current = new Date(startDate);\n while (current <= endDate) {\n const dateKey = `${current.getFullYear()}-${current.getMonth()}-${current.getDate()}`;\n const existing = map.get(dateKey) || [];\n map.set(dateKey, [...existing, event]);\n current.setDate(current.getDate() + 1);\n }\n });\n return map;\n }, [events]);\n\n const getEventsForDate = (month: number, day: number): CalendarEvent[] => {\n const dateKey = `${year}-${month}-${day}`;\n return eventsByDate.get(dateKey) || [];\n };\n\n const handleCellClick = (month: number, day: number) => {\n if (!onDateClick) return;\n const daysInMonth = getDaysInMonth(year, month);\n if (day > daysInMonth) return;\n const date = new Date(year, month, day);\n const cellEvents = getEventsForDate(month, day);\n onDateClick(date, cellEvents);\n };\n\n const handleCellDoubleClick = (month: number, day: number) => {\n if (!onDateDoubleClick) return;\n const daysInMonth = getDaysInMonth(year, month);\n if (day > daysInMonth) return;\n const date = new Date(year, month, day);\n const cellEvents = getEventsForDate(month, day);\n onDateDoubleClick(date, cellEvents);\n };\n\n // Range selection helpers\n const dateToNumber = (month: number, day: number): number => {\n return new Date(year, month, day).getTime();\n };\n\n const isInSelectionRange = (month: number, day: number): boolean => {\n // Check active drag selection\n if (rangeSelectionStart && rangeSelectionEnd) {\n const cellDate = dateToNumber(month, day);\n const startDate = dateToNumber(rangeSelectionStart.month, rangeSelectionStart.day);\n const endDate = dateToNumber(rangeSelectionEnd.month, rangeSelectionEnd.day);\n const minDate = Math.min(startDate, endDate);\n const maxDate = Math.max(startDate, endDate);\n if (cellDate >= minDate && cellDate <= maxDate) return true;\n }\n return false;\n };\n\n const isInHighlightRange = (month: number, day: number): boolean => {\n if (!highlightRange) return false;\n const cellDate = new Date(year, month, day).getTime();\n const startDate = highlightRange.start.getTime();\n const endDate = highlightRange.end.getTime();\n const minDate = Math.min(startDate, endDate);\n const maxDate = Math.max(startDate, endDate);\n return cellDate >= minDate && cellDate <= maxDate;\n };\n\n const handleRangeSelectStart = useCallback(\n (month: number, day: number) => {\n if (!onDateRangeSelect) return;\n if (draggingEvent || resizingEvent) return;\n setRangeSelectionStart({ month, day });\n setRangeSelectionEnd({ month, day });\n },\n [onDateRangeSelect, draggingEvent, resizingEvent]\n );\n\n const handleRangeSelectMove = useCallback(\n (month: number, day: number) => {\n if (!rangeSelectionStart) return;\n setRangeSelectionEnd({ month, day });\n },\n [rangeSelectionStart]\n );\n\n const handleRangeSelectEnd = useCallback(() => {\n if (!rangeSelectionStart || !rangeSelectionEnd || !onDateRangeSelect) {\n setRangeSelectionStart(null);\n setRangeSelectionEnd(null);\n return;\n }\n\n const startDate = new Date(year, rangeSelectionStart.month, rangeSelectionStart.day);\n const endDate = new Date(year, rangeSelectionEnd.month, rangeSelectionEnd.day);\n\n // Ensure start is before end\n const [finalStart, finalEnd] = startDate <= endDate\n ? [startDate, endDate]\n : [endDate, startDate];\n\n onDateRangeSelect(finalStart, finalEnd);\n setRangeSelectionStart(null);\n setRangeSelectionEnd(null);\n }, [rangeSelectionStart, rangeSelectionEnd, year, onDateRangeSelect]);\n\n const handleDragStart = useCallback(\n (\n e: React.DragEvent,\n event: CalendarEvent,\n monthIndex: number,\n spanStartDay: number\n ) => {\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.setData(\"text/plain\", event.id);\n\n const rect = e.currentTarget.getBoundingClientRect();\n const clickY = e.clientY - rect.top;\n const dayOffset = Math.floor(clickY / rowHeight);\n const grabDay = spanStartDay + dayOffset;\n\n setDragGrabOffsetY(clickY);\n setDragCardHeight(rect.height);\n const grabDate = new Date(year, monthIndex, grabDay);\n const startDate = event.date;\n const offsetDays = Math.floor(\n (grabDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24)\n );\n setDragOffset(offsetDays);\n\n requestAnimationFrame(() => {\n setDraggingEvent(event);\n });\n },\n [year, rowHeight]\n );\n\n const handleDragOver = useCallback(\n (e: React.DragEvent, month: number, day: number) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = \"move\";\n\n if (draggingEvent && dragGrabOffsetY > 0) {\n const dayOffset = Math.floor(dragGrabOffsetY / rowHeight);\n let cardTopDay = day - dayOffset;\n let cardTopMonth = month;\n\n while (cardTopDay < 1 && cardTopMonth > 0) {\n cardTopMonth--;\n cardTopDay += getDaysInMonth(year, cardTopMonth);\n }\n let daysInMonth = getDaysInMonth(year, cardTopMonth);\n while (cardTopDay > daysInMonth && cardTopMonth < 11) {\n cardTopDay -= daysInMonth;\n cardTopMonth++;\n daysInMonth = getDaysInMonth(year, cardTopMonth);\n }\n cardTopDay = Math.max(\n 1,\n Math.min(cardTopDay, getDaysInMonth(year, cardTopMonth))\n );\n\n setDragOverCell({ month: cardTopMonth, day: cardTopDay });\n } else {\n setDragOverCell({ month, day });\n }\n setDragPosition({ x: e.clientX, y: e.clientY });\n },\n [draggingEvent, dragGrabOffsetY, year, rowHeight]\n );\n\n const handleDragLeave = useCallback(() => {\n setDragOverCell(null);\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n if (draggingEvent && onEventMove && dragOverCell) {\n const newStartDate = new Date(\n year,\n dragOverCell.month,\n dragOverCell.day\n );\n\n let newEndDate: Date | undefined;\n if (draggingEvent.endDate) {\n const duration =\n draggingEvent.endDate.getTime() - draggingEvent.date.getTime();\n newEndDate = new Date(newStartDate.getTime() + duration);\n }\n\n onEventMove(draggingEvent, newStartDate, newEndDate);\n }\n setDragOverCell(null);\n setDragPosition(null);\n setDraggingEvent(null);\n setDragOffset(0);\n },\n [draggingEvent, dragOverCell, year, onEventMove]\n );\n\n const handleDragEnd = useCallback(() => {\n setDraggingEvent(null);\n setDragOverCell(null);\n setDragPosition(null);\n setDragGrabOffsetY(0);\n setDragCardHeight(0);\n }, []);\n\n const handleConfirmMove = useCallback(() => {\n if (pendingMove && onEventMove) {\n onEventMove(\n pendingMove.event,\n pendingMove.newStartDate,\n pendingMove.newEndDate\n );\n }\n setPendingMove(null);\n }, [pendingMove, onEventMove]);\n\n const handleCancelMove = useCallback(() => {\n setPendingMove(null);\n }, []);\n\n const handleResizeStart = useCallback(\n (e: React.DragEvent, event: CalendarEvent, edge: \"start\" | \"end\") => {\n e.stopPropagation();\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.setData(\"text/plain\", `resize-${event.id}`);\n requestAnimationFrame(() => {\n setResizingEvent({ event, edge });\n });\n },\n []\n );\n\n const handleResizeDrop = useCallback(\n (month: number, day: number) => {\n if (!resizingEvent || !onEventMove) return;\n\n const { event, edge } = resizingEvent;\n const dropDate = new Date(year, month, day);\n\n let newStartDate = event.date;\n let newEndDate = event.endDate || event.date;\n\n if (edge === \"start\") {\n if (dropDate <= newEndDate) {\n newStartDate = dropDate;\n }\n } else {\n if (dropDate >= newStartDate) {\n newEndDate = dropDate;\n }\n }\n\n const finalEndDate =\n newStartDate.getTime() === newEndDate.getTime()\n ? undefined\n : newEndDate;\n onEventMove(event, newStartDate, finalEndDate);\n\n setResizingEvent(null);\n setDragOverCell(null);\n setDragPosition(null);\n },\n [resizingEvent, year, onEventMove]\n );\n\n const handleResizeEnd = useCallback(() => {\n setResizingEvent(null);\n setDragOverCell(null);\n setDragPosition(null);\n }, []);\n\n useEffect(() => {\n const handleGlobalMouseUp = () => {\n setResizingEvent(null);\n setDraggingEvent(null);\n setDragOverCell(null);\n setDragPosition(null);\n setDragGrabOffsetY(0);\n setDragCardHeight(0);\n setDragOffset(0);\n // End range selection on global mouse up\n if (rangeSelectionStart) {\n handleRangeSelectEnd();\n }\n };\n\n window.addEventListener(\"mouseup\", handleGlobalMouseUp);\n window.addEventListener(\"dragend\", handleGlobalMouseUp);\n return () => {\n window.removeEventListener(\"mouseup\", handleGlobalMouseUp);\n window.removeEventListener(\"dragend\", handleGlobalMouseUp);\n };\n }, [rangeSelectionStart, handleRangeSelectEnd]);\n\n const getWeekdayName = (month: number, day: number) => {\n const date = new Date(year, month, day);\n return [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"][date.getDay()];\n };\n\n return (\n <div ref={containerRef} style={styles.container}>\n {/* ドラッグ中のフローティング日付表示 */}\n {draggingEvent &&\n dragOverCell &&\n dragPosition &&\n (() => {\n const cardTop = dragPosition.y - dragGrabOffsetY;\n const cardBottom = cardTop + dragCardHeight;\n const showBelow = cardTop < 80;\n return (\n <div\n style={{\n ...styles.floatingDate,\n left: dragPosition.x,\n top: showBelow ? cardBottom + 8 : cardTop - 8,\n transform: showBelow\n ? \"translateX(-50%)\"\n : \"translateX(-50%) translateY(-100%)\",\n }}\n >\n <div style={styles.floatingDateContent}>\n <div>\n {dragOverCell.month + 1}月{dragOverCell.day}日(\n {getWeekdayName(dragOverCell.month, dragOverCell.day)})\n </div>\n <div style={styles.floatingDateSubtext}>\n {draggingEvent.title}\n </div>\n </div>\n </div>\n );\n })()}\n\n {/* リサイズ中のフローティング日付表示 */}\n {resizingEvent && dragOverCell && dragPosition && (\n <div\n style={{\n ...styles.floatingDate,\n left: dragPosition.x,\n top: dragPosition.y - 50,\n }}\n >\n <div style={styles.resizeFloatingContent}>\n <div>\n {resizingEvent.edge === \"start\" ? \"開始日:\" : \"終了日:\"}\n {dragOverCell.month + 1}月{dragOverCell.day}日(\n {getWeekdayName(dragOverCell.month, dragOverCell.day)})\n </div>\n <div style={styles.floatingDateSubtext}>\n {resizingEvent.event.title}\n </div>\n </div>\n </div>\n )}\n\n <div style={styles.flexContainer}>\n {/* 日付列 */}\n <div style={styles.dayColumn}>\n <div style={styles.dayHeaderCell}>日</div>\n {DAYS.map((day) => (\n <div key={day} style={{ ...styles.dayCell, height: rowHeight }}>\n {day}\n </div>\n ))}\n </div>\n\n {/* 月ごとの列 */}\n {MONTHS.map((monthName, monthIndex) => {\n const daysInMonth = getDaysInMonth(year, monthIndex);\n const spans = monthSpans[monthIndex];\n const laneMap = laneMaps[monthIndex];\n const laneCount = maxLanes[monthIndex]; // この月のレーン数\n\n return (\n <div key={monthIndex} style={styles.monthColumn}>\n {/* 月ヘッダー */}\n <div style={styles.monthHeader}>{monthName}</div>\n\n {/* 日付セル(背景) */}\n {DAYS.map((day) => {\n const isValidDay = day <= daysInMonth;\n const sunday = isValidDay && isSunday(year, monthIndex, day);\n const saturday =\n isValidDay && isSaturday(year, monthIndex, day);\n const isHovered =\n hoveredCell?.month === monthIndex && hoveredCell?.day === day;\n const isInRange = isValidDay && isInSelectionRange(monthIndex, day);\n const isHighlighted = isValidDay && isInHighlightRange(monthIndex, day);\n\n return (\n <div\n key={day}\n style={{\n ...styles.calendarCell,\n height: rowHeight,\n backgroundColor: isInRange\n ? \"rgba(59, 130, 246, 0.3)\"\n : isHighlighted\n ? \"rgba(59, 130, 246, 0.2)\"\n : getCellBackgroundColor(\n theme,\n isValidDay,\n sunday,\n saturday,\n isHovered && isValidDay && !isRangeSelecting\n ),\n cursor: isValidDay ? \"pointer\" : \"default\",\n userSelect: \"none\",\n }}\n onClick={() =>\n isValidDay && !isRangeSelecting && handleCellClick(monthIndex, day)\n }\n onDoubleClick={() =>\n isValidDay && handleCellDoubleClick(monthIndex, day)\n }\n onMouseDown={() =>\n isValidDay && handleRangeSelectStart(monthIndex, day)\n }\n onMouseEnter={() => {\n if (isValidDay) {\n setHoveredCell({ month: monthIndex, day });\n if (isRangeSelecting) {\n handleRangeSelectMove(monthIndex, day);\n }\n }\n }}\n onMouseLeave={() => setHoveredCell(null)}\n onDragOver={(e) =>\n isValidDay && handleDragOver(e, monthIndex, day)\n }\n onDragLeave={handleDragLeave}\n onDrop={(e) => {\n if (!isValidDay) return;\n if (resizingEvent) {\n handleResizeDrop(monthIndex, day);\n } else {\n handleDrop(e);\n }\n }}\n />\n );\n })}\n\n {/* ドロップインジケーター */}\n {(draggingEvent || resizingEvent) &&\n dragOverCell?.month === monthIndex &&\n dragOverCell.day <= daysInMonth && (\n <div\n style={{\n ...styles.dropIndicator,\n top: 24 + (dragOverCell.day - 1) * rowHeight,\n height: rowHeight,\n }}\n >\n <div style={styles.dropIndicatorInner} />\n </div>\n )}\n\n {/* イベントバー */}\n <div style={styles.eventBarContainer}>\n {spans.map((span) => {\n const laneIndex = laneMap.get(span.event.id) || 0;\n // この月のレーン数に応じた幅(重なりがある場合のみ分割)\n const laneWidth = 100 / laneCount;\n const left = laneIndex * laneWidth;\n\n const isDraggingThis = draggingEvent?.id === span.event.id;\n const isResizingThis =\n resizingEvent?.event.id === span.event.id;\n\n let displaySpan = span;\n if (isResizingThis && resizePreviewSpans) {\n const previewSpan = resizePreviewSpans.get(monthIndex);\n if (previewSpan) {\n displaySpan = previewSpan;\n } else {\n return null;\n }\n }\n\n const displayStartDay = displaySpan.startDay;\n const displayEndDay = displaySpan.endDay;\n const top = (displayStartDay - 1) * rowHeight + 2;\n const height =\n (displayEndDay - displayStartDay + 1) * rowHeight - 4;\n const spanDays = displayEndDay - displayStartDay + 1;\n\n const isInteractive = !draggingEvent && !resizingEvent;\n const isHovered = hoveredEventBar === span.event.id;\n\n return (\n <div\n key={span.event.id}\n style={{\n ...styles.eventBar,\n top,\n left: `${left}%`,\n width: `calc(${laneWidth}% - 4px)`,\n height,\n backgroundColor: getEventColor(span.event),\n borderRadius: `${span.isStart ? 4 : 0}px ${span.isStart ? 4 : 0}px ${span.isEnd ? 4 : 0}px ${span.isEnd ? 4 : 0}px`,\n opacity: isDraggingThis ? 0.3 : 1,\n border: isResizingThis\n ? \"2px dashed rgba(255, 255, 255, 0.8)\"\n : \"none\",\n zIndex: isResizingThis ? 30 : isHovered ? 50 : 10,\n filter: isHovered ? \"brightness(1.1)\" : \"none\",\n pointerEvents: isInteractive ? \"auto\" : \"none\",\n }}\n draggable\n onDragStart={(e) =>\n handleDragStart(\n e,\n span.event,\n monthIndex,\n span.startDay\n )\n }\n onDragEnd={handleDragEnd}\n onMouseEnter={(e) => {\n setHoveredEventBar(span.event.id);\n const rect = e.currentTarget.getBoundingClientRect();\n setHoveredEvent({\n event: span.event,\n x: rect.right + 8,\n y: rect.top,\n });\n }}\n onMouseLeave={() => {\n setHoveredEventBar(null);\n setHoveredEvent(null);\n }}\n onClick={(e) => {\n e.stopPropagation();\n onEventClick?.(span.event);\n }}\n >\n {/* 前月から続くインジケーター */}\n {!span.isStart && (\n <div style={{ ...styles.indicator, ...styles.indicatorTop }}>\n ▲\n </div>\n )}\n\n {/* 縦書きタイトル(2日以上) */}\n {span.isStart && spanDays >= 2 && (\n <div style={styles.verticalTitle}>\n <span\n style={{\n ...styles.truncate,\n maxHeight: \"100%\",\n padding: \"0 2px\",\n }}\n >\n {span.event.title}\n </span>\n </div>\n )}\n\n {/* 横書きタイトル(1日のみ) */}\n {span.isStart && spanDays === 1 && (\n <div style={styles.horizontalTitle}>\n <span style={styles.truncate}>{span.event.title}</span>\n </div>\n )}\n\n {/* 翌月へ続くインジケーター */}\n {!span.isEnd && (\n <div style={{ ...styles.indicator, ...styles.indicatorBottom }}>\n ▼\n </div>\n )}\n\n {/* リサイズハンドル */}\n {span.event.endDate && isInteractive && (\n <>\n {span.isStart && (\n <div\n style={{\n ...styles.resizeHandle,\n ...styles.resizeHandleTop,\n opacity:\n hoveredResizeHandle?.eventId === span.event.id &&\n hoveredResizeHandle?.edge === \"start\"\n ? 1\n : 0,\n }}\n draggable\n onDragStart={(e) => {\n e.stopPropagation();\n handleResizeStart(e, span.event, \"start\");\n }}\n onDragEnd={handleResizeEnd}\n onMouseEnter={() =>\n setHoveredResizeHandle({\n eventId: span.event.id,\n edge: \"start\",\n })\n }\n onMouseLeave={() => setHoveredResizeHandle(null)}\n />\n )}\n {span.isEnd && (\n <div\n style={{\n ...styles.resizeHandle,\n ...styles.resizeHandleBottom,\n opacity:\n hoveredResizeHandle?.eventId === span.event.id &&\n hoveredResizeHandle?.edge === \"end\"\n ? 1\n : 0,\n }}\n draggable\n onDragStart={(e) => {\n e.stopPropagation();\n handleResizeStart(e, span.event, \"end\");\n }}\n onDragEnd={handleResizeEnd}\n onMouseEnter={() =>\n setHoveredResizeHandle({\n eventId: span.event.id,\n edge: \"end\",\n })\n }\n onMouseLeave={() => setHoveredResizeHandle(null)}\n />\n )}\n </>\n )}\n </div>\n );\n })}\n\n {/* リサイズで新たに追加される月のプレビュースパン */}\n {resizingEvent &&\n resizePreviewSpans &&\n resizePreviewSpans.has(monthIndex) &&\n !spans.some((s) => s.event.id === resizingEvent.event.id) &&\n (() => {\n const previewSpan = resizePreviewSpans.get(monthIndex)!;\n // 元のイベントがあった月のレーンを取得\n let originalLaneIndex = 0;\n for (let m = 0; m < 12; m++) {\n const lane = laneMaps[m].get(resizingEvent.event.id);\n if (lane !== undefined) {\n originalLaneIndex = lane;\n break;\n }\n }\n // プレビュー月のレーン数を使用\n const previewLaneCount = maxLanes[monthIndex];\n const laneWidth = 100 / previewLaneCount;\n const left = Math.min(originalLaneIndex, previewLaneCount - 1) * laneWidth;\n const top = (previewSpan.startDay - 1) * rowHeight + 2;\n const height =\n (previewSpan.endDay - previewSpan.startDay + 1) *\n rowHeight -\n 4;\n\n return (\n <div\n key={`preview-${resizingEvent.event.id}`}\n style={{\n ...styles.eventBar,\n top,\n left: `${left}%`,\n width: `calc(${laneWidth}% - 4px)`,\n height,\n backgroundColor: getEventColor(resizingEvent.event),\n borderRadius: `${previewSpan.isStart ? 4 : 0}px ${previewSpan.isStart ? 4 : 0}px ${previewSpan.isEnd ? 4 : 0}px ${previewSpan.isEnd ? 4 : 0}px`,\n border: \"2px dashed rgba(255, 255, 255, 0.8)\",\n opacity: 0.7,\n zIndex: 30,\n }}\n >\n {!previewSpan.isStart && (\n <div style={{ ...styles.indicator, ...styles.indicatorTop }}>\n ▲\n </div>\n )}\n {!previewSpan.isEnd && (\n <div style={{ ...styles.indicator, ...styles.indicatorBottom }}>\n ▼\n </div>\n )}\n </div>\n );\n })()}\n </div>\n </div>\n );\n })}\n </div>\n\n {/* ホバーツールチップ */}\n {hoveredEvent && !draggingEvent && !resizingEvent && (\n <div\n style={{\n ...styles.tooltip,\n left: hoveredEvent.x,\n top: hoveredEvent.y,\n }}\n >\n <div style={styles.tooltipContent}>\n <div style={styles.tooltipTitle}>{hoveredEvent.event.title}</div>\n <div style={styles.tooltipDate}>\n {hoveredEvent.event.date.toLocaleDateString(\"ja-JP\", {\n month: \"short\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {hoveredEvent.event.endDate && (\n <>\n {\" 〜 \"}\n {hoveredEvent.event.endDate.toLocaleDateString(\"ja-JP\", {\n month: \"short\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n </>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* 移動/リサイズ確認ダイアログ */}\n {pendingMove && (\n <div style={styles.dialogOverlay}>\n <div style={styles.dialogContent}>\n <h3 style={styles.dialogTitle}>\n {pendingMove.isResize\n ? \"期間を変更しますか?\"\n : \"予定を移動しますか?\"}\n </h3>\n <div style={styles.dialogBody}>\n <div style={styles.dialogEventTitle}>{pendingMove.event.title}</div>\n <div style={{ marginTop: 4 }}>\n <span style={styles.dialogDateLabel}>変更前:</span>\n {pendingMove.event.date.toLocaleDateString(\"ja-JP\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {pendingMove.event.endDate && (\n <>\n {\" 〜 \"}\n {pendingMove.event.endDate.toLocaleDateString(\"ja-JP\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n </>\n )}\n </div>\n <div style={{ marginTop: 4 }}>\n <span style={styles.dialogDateLabel}>変更後:</span>\n {pendingMove.newStartDate.toLocaleDateString(\"ja-JP\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {pendingMove.newEndDate && (\n <>\n {\" 〜 \"}\n {pendingMove.newEndDate.toLocaleDateString(\"ja-JP\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n </>\n )}\n </div>\n </div>\n <div style={styles.dialogButtons}>\n <button\n onClick={handleCancelMove}\n style={{\n ...styles.dialogCancelButton,\n backgroundColor: hoveredCancelButton\n ? theme.bgGray100\n : \"transparent\",\n }}\n onMouseEnter={() => setHoveredCancelButton(true)}\n onMouseLeave={() => setHoveredCancelButton(false)}\n >\n キャンセル\n </button>\n <button\n onClick={handleConfirmMove}\n style={{\n ...styles.dialogConfirmButton,\n backgroundColor: hoveredConfirmButton\n ? theme.buttonPrimaryHover\n : theme.buttonPrimary,\n }}\n onMouseEnter={() => setHoveredConfirmButton(true)}\n onMouseLeave={() => setHoveredConfirmButton(false)}\n >\n {pendingMove.isResize ? \"変更する\" : \"移動する\"}\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
|