react-yearly-calendar-grid 0.9.1 → 0.9.3
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/README.ja.md +10 -0
- package/README.md +10 -0
- package/dist/index.d.mts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +11 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +11 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.ja.md
CHANGED
|
@@ -67,6 +67,9 @@ function App() {
|
|
|
67
67
|
| `theme` | `ThemeColors` | - | テーマカラー設定 |
|
|
68
68
|
| `highlightRange` | `{ start: Date; end: Date } \| null` | - | ハイライトする日付範囲 |
|
|
69
69
|
| `showWeekday` | `boolean` | - | 各セルの右上に曜日を表示 |
|
|
70
|
+
| `locale` | `string` | - | 日付フォーマットのロケール(例: `"ja-JP"`, `"en-US"`) |
|
|
71
|
+
| `minRowHeight` | `number` | - | 行の最小高さ(px)デフォルト: `20` |
|
|
72
|
+
| `showContinuationTitle` | `boolean` | - | 月またぎ先にイベントタイトルを表示(デフォルト: `true`) |
|
|
70
73
|
| `onDateClick` | `(date: Date, events: CalendarEvent[]) => void` | - | 日付クリック時 |
|
|
71
74
|
| `onDateDoubleClick` | `(date: Date, events: CalendarEvent[]) => void` | - | 日付ダブルクリック時 |
|
|
72
75
|
| `onDateRangeSelect` | `(startDate: Date, endDate: Date) => void` | - | 日付範囲選択時 |
|
|
@@ -147,6 +150,12 @@ function App() {
|
|
|
147
150
|
### 日付範囲選択
|
|
148
151
|
日付をドラッグして範囲を選択できます。
|
|
149
152
|
|
|
153
|
+
### イベント表示順
|
|
154
|
+
イベントは自動的にソートされ、常に一貫した表示順になります:
|
|
155
|
+
1. 複数日イベントが先(左側)に表示
|
|
156
|
+
2. 開始日が早い順
|
|
157
|
+
3. 開始日が同じ場合、期間が長い順
|
|
158
|
+
|
|
150
159
|
## テーマカスタマイズ
|
|
151
160
|
|
|
152
161
|
全てのテーマプロパティはオプションです。変更したいプロパティのみ指定すれば、それ以外はデフォルト値が使用されます。
|
|
@@ -183,6 +192,7 @@ function App() {
|
|
|
183
192
|
| `textMuted` | 薄いテキスト | `#6b7280` |
|
|
184
193
|
| `tooltipBg` | ツールチップ背景 | `#111827` |
|
|
185
194
|
| `tooltipText` | ツールチップ文字 | `#ffffff` |
|
|
195
|
+
| `dialogOverlay` | ダイアログオーバーレイ背景 | `rgba(0, 0, 0, 0.5)` |
|
|
186
196
|
| `buttonPrimary` | ボタン背景 | `#2563eb` |
|
|
187
197
|
| `buttonPrimaryHover` | ボタンホバー | `#1d4ed8` |
|
|
188
198
|
| `floatingDateBg` | ドラッグ中日付表示 | `#2563eb` |
|
package/README.md
CHANGED
|
@@ -67,6 +67,9 @@ function App() {
|
|
|
67
67
|
| `theme` | `ThemeColors` | No | Theme color settings |
|
|
68
68
|
| `highlightRange` | `{ start: Date; end: Date } \| null` | No | Date range to highlight |
|
|
69
69
|
| `showWeekday` | `boolean` | No | Show weekday label in the top-right corner of each cell |
|
|
70
|
+
| `locale` | `string` | No | Locale for date formatting (e.g., `"en-US"`, `"ja-JP"`) |
|
|
71
|
+
| `minRowHeight` | `number` | No | Minimum row height in pixels (default: `20`) |
|
|
72
|
+
| `showContinuationTitle` | `boolean` | No | Show event title on continuation spans across months (default: `true`) |
|
|
70
73
|
| `onDateClick` | `(date: Date, events: CalendarEvent[]) => void` | No | Called when a date is clicked |
|
|
71
74
|
| `onDateDoubleClick` | `(date: Date, events: CalendarEvent[]) => void` | No | Called when a date is double-clicked |
|
|
72
75
|
| `onDateRangeSelect` | `(startDate: Date, endDate: Date) => void` | No | Called when a date range is selected |
|
|
@@ -133,6 +136,12 @@ Events spanning multiple months are displayed continuously across each month.
|
|
|
133
136
|
### Date Range Selection
|
|
134
137
|
Click and drag across dates to select a date range.
|
|
135
138
|
|
|
139
|
+
### Event Display Order
|
|
140
|
+
Events are automatically sorted for consistent display:
|
|
141
|
+
1. Multi-day events are displayed first (leftmost)
|
|
142
|
+
2. Sorted by start date (earlier first)
|
|
143
|
+
3. If start dates are the same, longer events are displayed first
|
|
144
|
+
|
|
136
145
|
## Theme Customization
|
|
137
146
|
|
|
138
147
|
All theme properties are optional. Only specify the properties you want to override - unspecified properties will use default values.
|
|
@@ -169,6 +178,7 @@ All theme properties are optional. Only specify the properties you want to overr
|
|
|
169
178
|
| `textMuted` | Muted text color | `#6b7280` |
|
|
170
179
|
| `tooltipBg` | Tooltip background | `#111827` |
|
|
171
180
|
| `tooltipText` | Tooltip text color | `#ffffff` |
|
|
181
|
+
| `dialogOverlay` | Dialog overlay background | `rgba(0, 0, 0, 0.5)` |
|
|
172
182
|
| `buttonPrimary` | Button background | `#2563eb` |
|
|
173
183
|
| `buttonPrimaryHover` | Button hover background | `#1d4ed8` |
|
|
174
184
|
| `floatingDateBg` | Dragging date display background | `#2563eb` |
|
package/dist/index.d.mts
CHANGED
|
@@ -53,6 +53,7 @@ interface YearlyCalendarProps {
|
|
|
53
53
|
locale?: string;
|
|
54
54
|
showWeekday?: boolean;
|
|
55
55
|
minRowHeight?: number;
|
|
56
|
+
showContinuationTitle?: boolean;
|
|
56
57
|
}
|
|
57
58
|
interface DayCellProps {
|
|
58
59
|
date: Date | null;
|
|
@@ -62,7 +63,7 @@ interface DayCellProps {
|
|
|
62
63
|
onEventClick?: (event: CalendarEvent) => void;
|
|
63
64
|
}
|
|
64
65
|
|
|
65
|
-
declare function YearlyCalendar({ year, events, holidays, onDateClick, onDateDoubleClick, onDateRangeSelect, onEventClick, onEventMove, highlightRange, categoryColors, theme: customTheme, showWeekday, locale, minRowHeight: minRowHeightProp, }: YearlyCalendarProps): react_jsx_runtime.JSX.Element;
|
|
66
|
+
declare function YearlyCalendar({ year, events, holidays, onDateClick, onDateDoubleClick, onDateRangeSelect, onEventClick, onEventMove, highlightRange, categoryColors, theme: customTheme, showWeekday, locale, minRowHeight: minRowHeightProp, showContinuationTitle, }: YearlyCalendarProps): react_jsx_runtime.JSX.Element;
|
|
66
67
|
|
|
67
68
|
declare const defaultTheme: Required<ThemeColors>;
|
|
68
69
|
declare function mergeTheme(custom?: ThemeColors): Required<ThemeColors>;
|
package/dist/index.d.ts
CHANGED
|
@@ -53,6 +53,7 @@ interface YearlyCalendarProps {
|
|
|
53
53
|
locale?: string;
|
|
54
54
|
showWeekday?: boolean;
|
|
55
55
|
minRowHeight?: number;
|
|
56
|
+
showContinuationTitle?: boolean;
|
|
56
57
|
}
|
|
57
58
|
interface DayCellProps {
|
|
58
59
|
date: Date | null;
|
|
@@ -62,7 +63,7 @@ interface DayCellProps {
|
|
|
62
63
|
onEventClick?: (event: CalendarEvent) => void;
|
|
63
64
|
}
|
|
64
65
|
|
|
65
|
-
declare function YearlyCalendar({ year, events, holidays, onDateClick, onDateDoubleClick, onDateRangeSelect, onEventClick, onEventMove, highlightRange, categoryColors, theme: customTheme, showWeekday, locale, minRowHeight: minRowHeightProp, }: YearlyCalendarProps): react_jsx_runtime.JSX.Element;
|
|
66
|
+
declare function YearlyCalendar({ year, events, holidays, onDateClick, onDateDoubleClick, onDateRangeSelect, onEventClick, onEventMove, highlightRange, categoryColors, theme: customTheme, showWeekday, locale, minRowHeight: minRowHeightProp, showContinuationTitle, }: YearlyCalendarProps): react_jsx_runtime.JSX.Element;
|
|
66
67
|
|
|
67
68
|
declare const defaultTheme: Required<ThemeColors>;
|
|
68
69
|
declare function mergeTheme(custom?: ThemeColors): Required<ThemeColors>;
|
package/dist/index.js
CHANGED
|
@@ -441,7 +441,13 @@ function getMonthSpans(events, year, month) {
|
|
|
441
441
|
function calculateLanes(spans) {
|
|
442
442
|
const laneMap = /* @__PURE__ */ new Map();
|
|
443
443
|
const lanes = [];
|
|
444
|
-
const sorted = [...spans].sort((a, b) =>
|
|
444
|
+
const sorted = [...spans].sort((a, b) => {
|
|
445
|
+
const aIsMultiDay = a.endDay > a.startDay ? 1 : 0;
|
|
446
|
+
const bIsMultiDay = b.endDay > b.startDay ? 1 : 0;
|
|
447
|
+
if (aIsMultiDay !== bIsMultiDay) return bIsMultiDay - aIsMultiDay;
|
|
448
|
+
if (a.startDay !== b.startDay) return a.startDay - b.startDay;
|
|
449
|
+
return b.endDay - b.startDay - (a.endDay - a.startDay);
|
|
450
|
+
});
|
|
445
451
|
sorted.forEach((span) => {
|
|
446
452
|
let laneIndex = lanes.findIndex((lane) => lane.endDay < span.startDay);
|
|
447
453
|
if (laneIndex === -1) {
|
|
@@ -468,7 +474,8 @@ function YearlyCalendar({
|
|
|
468
474
|
theme: customTheme,
|
|
469
475
|
showWeekday = false,
|
|
470
476
|
locale = "en",
|
|
471
|
-
minRowHeight: minRowHeightProp
|
|
477
|
+
minRowHeight: minRowHeightProp,
|
|
478
|
+
showContinuationTitle = true
|
|
472
479
|
}) {
|
|
473
480
|
const MIN_HEIGHT = minRowHeightProp != null ? minRowHeightProp : MIN_ROW_HEIGHT;
|
|
474
481
|
const theme = react.useMemo(() => mergeTheme(customTheme), [customTheme]);
|
|
@@ -1024,7 +1031,7 @@ function YearlyCalendar({
|
|
|
1024
1031
|
},
|
|
1025
1032
|
children: [
|
|
1026
1033
|
!span.isStart && /* @__PURE__ */ jsxRuntime.jsx("div", { style: __spreadValues(__spreadValues({}, styles.indicator), styles.indicatorTop), children: "\u25B2" }),
|
|
1027
|
-
span.isStart && spanDays >= 2 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: styles.verticalTitle, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1034
|
+
(span.isStart || showContinuationTitle) && spanDays >= 2 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: styles.verticalTitle, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1028
1035
|
"span",
|
|
1029
1036
|
{
|
|
1030
1037
|
style: __spreadProps(__spreadValues({}, styles.truncate), {
|
|
@@ -1034,7 +1041,7 @@ function YearlyCalendar({
|
|
|
1034
1041
|
children: span.event.title
|
|
1035
1042
|
}
|
|
1036
1043
|
) }),
|
|
1037
|
-
span.isStart && spanDays === 1 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: styles.horizontalTitle, children: /* @__PURE__ */ jsxRuntime.jsx("span", { style: styles.truncate, children: span.event.title }) }),
|
|
1044
|
+
(span.isStart || showContinuationTitle) && spanDays === 1 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: styles.horizontalTitle, children: /* @__PURE__ */ jsxRuntime.jsx("span", { style: styles.truncate, children: span.event.title }) }),
|
|
1038
1045
|
!span.isEnd && /* @__PURE__ */ jsxRuntime.jsx("div", { style: __spreadValues(__spreadValues({}, styles.indicator), styles.indicatorBottom), children: "\u25BC" }),
|
|
1039
1046
|
isInteractive && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1040
1047
|
span.isStart && /* @__PURE__ */ jsxRuntime.jsx(
|
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":"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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 bgHoliday: \"#fef2f2\",\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 alignItems: \"flex-start\",\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 position: \"sticky\",\n top: 0,\n zIndex: 21,\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 position: \"sticky\",\n top: 0,\n zIndex: 15,\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: \"pre-wrap\",\n maxWidth: 280,\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 whiteSpace: \"nowrap\",\n } as CSSProperties,\n\n tooltipDescription: {\n color: \"rgba(255, 255, 255, 0.8)\",\n fontSize: 11,\n marginTop: 3,\n lineHeight: 1.4,\n } as CSSProperties,\n\n tooltipDate: {\n color: \"rgba(255, 255, 255, 0.7)\",\n fontSize: 10,\n marginTop: 2,\n whiteSpace: \"nowrap\",\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 weekdayLabel: {\n position: \"absolute\",\n top: 1,\n right: 3,\n fontSize: 9,\n color: theme.textMuted,\n opacity: 0.6,\n pointerEvents: \"none\",\n userSelect: \"none\",\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 isHoliday: boolean = false\n): string {\n if (!isValidDay) return theme.bgGray100;\n if (isHovered) return theme.bgGray50;\n if (isHoliday) return theme.bgHoliday;\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, Holiday } from \"./types\";\nimport { createStyles, mergeTheme, getCellBackgroundColor, defaultTheme } from \"./styles\";\n\nconst MONTHS_JA = [\n \"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\",\n \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\",\n];\n\nconst MONTHS_EN = [\n \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\",\n];\n\nconst WEEKDAYS_JA = [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"];\nconst WEEKDAYS_EN = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"];\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 holidays = [],\n onDateClick,\n onDateDoubleClick,\n onDateRangeSelect,\n onEventClick,\n onEventMove,\n highlightRange,\n categoryColors = {},\n theme: customTheme,\n showWeekday = false,\n locale = \"en\",\n minRowHeight: minRowHeightProp,\n}: YearlyCalendarProps) {\n const MIN_HEIGHT = minRowHeightProp ?? MIN_ROW_HEIGHT;\n // テーマをマージ\n const theme = useMemo(() => mergeTheme(customTheme), [customTheme]);\n const styles = useMemo(() => createStyles(theme), [theme]);\n\n // ロケールに応じた表示\n const isJa = locale === \"ja\";\n const MONTHS = isJa ? MONTHS_JA : MONTHS_EN;\n const WEEKDAYS = isJa ? WEEKDAYS_JA : WEEKDAYS_EN;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const [rowHeight, setRowHeight] = useState(MIN_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_HEIGHT));\n }\n };\n\n updateRowHeight();\n window.addEventListener(\"resize\", updateRowHeight);\n return () => window.removeEventListener(\"resize\", updateRowHeight);\n }, [MIN_HEIGHT]);\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 // タッチデバイス判定(ホバーツールチップの抑制用)\n const [isTouchDevice, setIsTouchDevice] = useState(false);\n useEffect(() => {\n setIsTouchDevice(\"ontouchstart\" in window || navigator.maxTouchPoints > 0);\n }, []);\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 // 祝日をマップに変換(高速検索用)\n const holidayMap = useMemo(() => {\n const map = new Map<string, Holiday>();\n holidays.forEach((holiday) => {\n const dateKey = `${holiday.date.getFullYear()}-${holiday.date.getMonth()}-${holiday.date.getDate()}`;\n map.set(dateKey, holiday);\n });\n return map;\n }, [holidays]);\n\n const isHoliday = (month: number, day: number): boolean => {\n const dateKey = `${year}-${month}-${day}`;\n return holidayMap.has(dateKey);\n };\n\n const getHoliday = (month: number, day: number): Holiday | undefined => {\n const dateKey = `${year}-${month}-${day}`;\n return holidayMap.get(dateKey);\n };\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 // 同じ日付への移動はスキップ\n if (newStartDate.getTime() !== draggingEvent.date.getTime()) {\n setPendingMove({\n event: draggingEvent,\n newStartDate,\n newEndDate,\n isResize: false,\n });\n }\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\n // 変更がない場合はスキップ\n const startChanged = newStartDate.getTime() !== event.date.getTime();\n const endChanged = finalEndDate?.getTime() !== event.endDate?.getTime();\n if (startChanged || endChanged) {\n setPendingMove({\n event,\n newStartDate,\n newEndDate: finalEndDate,\n isResize: true,\n });\n }\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 WEEKDAYS[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 {isJa\n ? `${dragOverCell.month + 1}月${dragOverCell.day}日(${getWeekdayName(dragOverCell.month, dragOverCell.day)})`\n : `${MONTHS[dragOverCell.month]} ${dragOverCell.day} (${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 {isJa\n ? `${resizingEvent.edge === \"start\" ? \"開始日:\" : \"終了日:\"}${dragOverCell.month + 1}月${dragOverCell.day}日(${getWeekdayName(dragOverCell.month, dragOverCell.day)})`\n : `${resizingEvent.edge === \"start\" ? \"Start: \" : \"End: \"}${MONTHS[dragOverCell.month]} ${dragOverCell.day} (${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}>{isJa ? \"日\" : \"Day\"}</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 holiday = isValidDay && isHoliday(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 holiday\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 {showWeekday && isValidDay && (\n <span style={styles.weekdayLabel}>\n {getWeekdayName(monthIndex, day)}\n </span>\n )}\n </div>\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 {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 {/* ホバーツールチップ(PC用) */}\n {hoveredEvent && !isTouchDevice && !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 {hoveredEvent.event.description && (\n <div style={styles.tooltipDescription}>{hoveredEvent.event.description}</div>\n )}\n <div style={styles.tooltipDate}>\n {hoveredEvent.event.date.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\n month: \"short\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {hoveredEvent.event.endDate && (\n <>\n {isJa ? \" 〜 \" : \" - \"}\n {hoveredEvent.event.endDate.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\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 ? (isJa ? \"期間を変更しますか?\" : \"Change duration?\")\n : (isJa ? \"予定を移動しますか?\" : \"Move event?\")}\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}>{isJa ? \"変更前:\" : \"From: \"}</span>\n {pendingMove.event.date.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {pendingMove.event.endDate && (\n <>\n {isJa ? \" 〜 \" : \" - \"}\n {pendingMove.event.endDate.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n </>\n )}\n </div>\n <div style={{ marginTop: 4 }}>\n <span style={styles.dialogDateLabel}>{isJa ? \"変更後:\" : \"To: \"}</span>\n {pendingMove.newStartDate.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {pendingMove.newEndDate && (\n <>\n {isJa ? \" 〜 \" : \" - \"}\n {pendingMove.newEndDate.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\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 {isJa ? \"キャンセル\" : \"Cancel\"}\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 ? (isJa ? \"変更する\" : \"Change\")\n : (isJa ? \"移動する\" : \"Move\")}\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 bgHoliday: \"#fef2f2\",\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 alignItems: \"flex-start\",\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 position: \"sticky\",\n top: 0,\n zIndex: 21,\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 position: \"sticky\",\n top: 0,\n zIndex: 15,\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: \"pre-wrap\",\n maxWidth: 280,\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 whiteSpace: \"nowrap\",\n } as CSSProperties,\n\n tooltipDescription: {\n color: \"rgba(255, 255, 255, 0.8)\",\n fontSize: 11,\n marginTop: 3,\n lineHeight: 1.4,\n } as CSSProperties,\n\n tooltipDate: {\n color: \"rgba(255, 255, 255, 0.7)\",\n fontSize: 10,\n marginTop: 2,\n whiteSpace: \"nowrap\",\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 weekdayLabel: {\n position: \"absolute\",\n top: 1,\n right: 3,\n fontSize: 9,\n color: theme.textMuted,\n opacity: 0.6,\n pointerEvents: \"none\",\n userSelect: \"none\",\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 isHoliday: boolean = false\n): string {\n if (!isValidDay) return theme.bgGray100;\n if (isHovered) return theme.bgGray50;\n if (isHoliday) return theme.bgHoliday;\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, Holiday } from \"./types\";\nimport { createStyles, mergeTheme, getCellBackgroundColor, defaultTheme } from \"./styles\";\n\nconst MONTHS_JA = [\n \"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\",\n \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\",\n];\n\nconst MONTHS_EN = [\n \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\",\n];\n\nconst WEEKDAYS_JA = [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"];\nconst WEEKDAYS_EN = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"];\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) => {\n const aIsMultiDay = a.endDay > a.startDay ? 1 : 0;\n const bIsMultiDay = b.endDay > b.startDay ? 1 : 0;\n // 複数日イベントを先(左側)に配置\n if (aIsMultiDay !== bIsMultiDay) return bIsMultiDay - aIsMultiDay;\n // 開始日が早い順\n if (a.startDay !== b.startDay) return a.startDay - b.startDay;\n // 開始日が同じ場合、期間が長い順\n return (b.endDay - b.startDay) - (a.endDay - a.startDay);\n });\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 holidays = [],\n onDateClick,\n onDateDoubleClick,\n onDateRangeSelect,\n onEventClick,\n onEventMove,\n highlightRange,\n categoryColors = {},\n theme: customTheme,\n showWeekday = false,\n locale = \"en\",\n minRowHeight: minRowHeightProp,\n showContinuationTitle = true,\n}: YearlyCalendarProps) {\n const MIN_HEIGHT = minRowHeightProp ?? MIN_ROW_HEIGHT;\n // テーマをマージ\n const theme = useMemo(() => mergeTheme(customTheme), [customTheme]);\n const styles = useMemo(() => createStyles(theme), [theme]);\n\n // ロケールに応じた表示\n const isJa = locale === \"ja\";\n const MONTHS = isJa ? MONTHS_JA : MONTHS_EN;\n const WEEKDAYS = isJa ? WEEKDAYS_JA : WEEKDAYS_EN;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const [rowHeight, setRowHeight] = useState(MIN_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_HEIGHT));\n }\n };\n\n updateRowHeight();\n window.addEventListener(\"resize\", updateRowHeight);\n return () => window.removeEventListener(\"resize\", updateRowHeight);\n }, [MIN_HEIGHT]);\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 // タッチデバイス判定(ホバーツールチップの抑制用)\n const [isTouchDevice, setIsTouchDevice] = useState(false);\n useEffect(() => {\n setIsTouchDevice(\"ontouchstart\" in window || navigator.maxTouchPoints > 0);\n }, []);\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 // 祝日をマップに変換(高速検索用)\n const holidayMap = useMemo(() => {\n const map = new Map<string, Holiday>();\n holidays.forEach((holiday) => {\n const dateKey = `${holiday.date.getFullYear()}-${holiday.date.getMonth()}-${holiday.date.getDate()}`;\n map.set(dateKey, holiday);\n });\n return map;\n }, [holidays]);\n\n const isHoliday = (month: number, day: number): boolean => {\n const dateKey = `${year}-${month}-${day}`;\n return holidayMap.has(dateKey);\n };\n\n const getHoliday = (month: number, day: number): Holiday | undefined => {\n const dateKey = `${year}-${month}-${day}`;\n return holidayMap.get(dateKey);\n };\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 // 同じ日付への移動はスキップ\n if (newStartDate.getTime() !== draggingEvent.date.getTime()) {\n setPendingMove({\n event: draggingEvent,\n newStartDate,\n newEndDate,\n isResize: false,\n });\n }\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\n // 変更がない場合はスキップ\n const startChanged = newStartDate.getTime() !== event.date.getTime();\n const endChanged = finalEndDate?.getTime() !== event.endDate?.getTime();\n if (startChanged || endChanged) {\n setPendingMove({\n event,\n newStartDate,\n newEndDate: finalEndDate,\n isResize: true,\n });\n }\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 WEEKDAYS[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 {isJa\n ? `${dragOverCell.month + 1}月${dragOverCell.day}日(${getWeekdayName(dragOverCell.month, dragOverCell.day)})`\n : `${MONTHS[dragOverCell.month]} ${dragOverCell.day} (${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 {isJa\n ? `${resizingEvent.edge === \"start\" ? \"開始日:\" : \"終了日:\"}${dragOverCell.month + 1}月${dragOverCell.day}日(${getWeekdayName(dragOverCell.month, dragOverCell.day)})`\n : `${resizingEvent.edge === \"start\" ? \"Start: \" : \"End: \"}${MONTHS[dragOverCell.month]} ${dragOverCell.day} (${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}>{isJa ? \"日\" : \"Day\"}</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 holiday = isValidDay && isHoliday(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 holiday\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 {showWeekday && isValidDay && (\n <span style={styles.weekdayLabel}>\n {getWeekdayName(monthIndex, day)}\n </span>\n )}\n </div>\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 || showContinuationTitle) && 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 || showContinuationTitle) && 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 {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 {/* ホバーツールチップ(PC用) */}\n {hoveredEvent && !isTouchDevice && !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 {hoveredEvent.event.description && (\n <div style={styles.tooltipDescription}>{hoveredEvent.event.description}</div>\n )}\n <div style={styles.tooltipDate}>\n {hoveredEvent.event.date.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\n month: \"short\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {hoveredEvent.event.endDate && (\n <>\n {isJa ? \" 〜 \" : \" - \"}\n {hoveredEvent.event.endDate.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\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 ? (isJa ? \"期間を変更しますか?\" : \"Change duration?\")\n : (isJa ? \"予定を移動しますか?\" : \"Move event?\")}\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}>{isJa ? \"変更前:\" : \"From: \"}</span>\n {pendingMove.event.date.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {pendingMove.event.endDate && (\n <>\n {isJa ? \" 〜 \" : \" - \"}\n {pendingMove.event.endDate.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n </>\n )}\n </div>\n <div style={{ marginTop: 4 }}>\n <span style={styles.dialogDateLabel}>{isJa ? \"変更後:\" : \"To: \"}</span>\n {pendingMove.newStartDate.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {pendingMove.newEndDate && (\n <>\n {isJa ? \" 〜 \" : \" - \"}\n {pendingMove.newEndDate.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\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 {isJa ? \"キャンセル\" : \"Cancel\"}\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 ? (isJa ? \"変更する\" : \"Change\")\n : (isJa ? \"移動する\" : \"Move\")}\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -439,7 +439,13 @@ function getMonthSpans(events, year, month) {
|
|
|
439
439
|
function calculateLanes(spans) {
|
|
440
440
|
const laneMap = /* @__PURE__ */ new Map();
|
|
441
441
|
const lanes = [];
|
|
442
|
-
const sorted = [...spans].sort((a, b) =>
|
|
442
|
+
const sorted = [...spans].sort((a, b) => {
|
|
443
|
+
const aIsMultiDay = a.endDay > a.startDay ? 1 : 0;
|
|
444
|
+
const bIsMultiDay = b.endDay > b.startDay ? 1 : 0;
|
|
445
|
+
if (aIsMultiDay !== bIsMultiDay) return bIsMultiDay - aIsMultiDay;
|
|
446
|
+
if (a.startDay !== b.startDay) return a.startDay - b.startDay;
|
|
447
|
+
return b.endDay - b.startDay - (a.endDay - a.startDay);
|
|
448
|
+
});
|
|
443
449
|
sorted.forEach((span) => {
|
|
444
450
|
let laneIndex = lanes.findIndex((lane) => lane.endDay < span.startDay);
|
|
445
451
|
if (laneIndex === -1) {
|
|
@@ -466,7 +472,8 @@ function YearlyCalendar({
|
|
|
466
472
|
theme: customTheme,
|
|
467
473
|
showWeekday = false,
|
|
468
474
|
locale = "en",
|
|
469
|
-
minRowHeight: minRowHeightProp
|
|
475
|
+
minRowHeight: minRowHeightProp,
|
|
476
|
+
showContinuationTitle = true
|
|
470
477
|
}) {
|
|
471
478
|
const MIN_HEIGHT = minRowHeightProp != null ? minRowHeightProp : MIN_ROW_HEIGHT;
|
|
472
479
|
const theme = useMemo(() => mergeTheme(customTheme), [customTheme]);
|
|
@@ -1022,7 +1029,7 @@ function YearlyCalendar({
|
|
|
1022
1029
|
},
|
|
1023
1030
|
children: [
|
|
1024
1031
|
!span.isStart && /* @__PURE__ */ jsx("div", { style: __spreadValues(__spreadValues({}, styles.indicator), styles.indicatorTop), children: "\u25B2" }),
|
|
1025
|
-
span.isStart && spanDays >= 2 && /* @__PURE__ */ jsx("div", { style: styles.verticalTitle, children: /* @__PURE__ */ jsx(
|
|
1032
|
+
(span.isStart || showContinuationTitle) && spanDays >= 2 && /* @__PURE__ */ jsx("div", { style: styles.verticalTitle, children: /* @__PURE__ */ jsx(
|
|
1026
1033
|
"span",
|
|
1027
1034
|
{
|
|
1028
1035
|
style: __spreadProps(__spreadValues({}, styles.truncate), {
|
|
@@ -1032,7 +1039,7 @@ function YearlyCalendar({
|
|
|
1032
1039
|
children: span.event.title
|
|
1033
1040
|
}
|
|
1034
1041
|
) }),
|
|
1035
|
-
span.isStart && spanDays === 1 && /* @__PURE__ */ jsx("div", { style: styles.horizontalTitle, children: /* @__PURE__ */ jsx("span", { style: styles.truncate, children: span.event.title }) }),
|
|
1042
|
+
(span.isStart || showContinuationTitle) && spanDays === 1 && /* @__PURE__ */ jsx("div", { style: styles.horizontalTitle, children: /* @__PURE__ */ jsx("span", { style: styles.truncate, children: span.event.title }) }),
|
|
1036
1043
|
!span.isEnd && /* @__PURE__ */ jsx("div", { style: __spreadValues(__spreadValues({}, styles.indicator), styles.indicatorBottom), children: "\u25BC" }),
|
|
1037
1044
|
isInteractive && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1038
1045
|
span.isStart && /* @__PURE__ */ jsx(
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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 bgHoliday: \"#fef2f2\",\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 alignItems: \"flex-start\",\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 position: \"sticky\",\n top: 0,\n zIndex: 21,\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 position: \"sticky\",\n top: 0,\n zIndex: 15,\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: \"pre-wrap\",\n maxWidth: 280,\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 whiteSpace: \"nowrap\",\n } as CSSProperties,\n\n tooltipDescription: {\n color: \"rgba(255, 255, 255, 0.8)\",\n fontSize: 11,\n marginTop: 3,\n lineHeight: 1.4,\n } as CSSProperties,\n\n tooltipDate: {\n color: \"rgba(255, 255, 255, 0.7)\",\n fontSize: 10,\n marginTop: 2,\n whiteSpace: \"nowrap\",\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 weekdayLabel: {\n position: \"absolute\",\n top: 1,\n right: 3,\n fontSize: 9,\n color: theme.textMuted,\n opacity: 0.6,\n pointerEvents: \"none\",\n userSelect: \"none\",\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 isHoliday: boolean = false\n): string {\n if (!isValidDay) return theme.bgGray100;\n if (isHovered) return theme.bgGray50;\n if (isHoliday) return theme.bgHoliday;\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, Holiday } from \"./types\";\nimport { createStyles, mergeTheme, getCellBackgroundColor, defaultTheme } from \"./styles\";\n\nconst MONTHS_JA = [\n \"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\",\n \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\",\n];\n\nconst MONTHS_EN = [\n \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\",\n];\n\nconst WEEKDAYS_JA = [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"];\nconst WEEKDAYS_EN = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"];\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 holidays = [],\n onDateClick,\n onDateDoubleClick,\n onDateRangeSelect,\n onEventClick,\n onEventMove,\n highlightRange,\n categoryColors = {},\n theme: customTheme,\n showWeekday = false,\n locale = \"en\",\n minRowHeight: minRowHeightProp,\n}: YearlyCalendarProps) {\n const MIN_HEIGHT = minRowHeightProp ?? MIN_ROW_HEIGHT;\n // テーマをマージ\n const theme = useMemo(() => mergeTheme(customTheme), [customTheme]);\n const styles = useMemo(() => createStyles(theme), [theme]);\n\n // ロケールに応じた表示\n const isJa = locale === \"ja\";\n const MONTHS = isJa ? MONTHS_JA : MONTHS_EN;\n const WEEKDAYS = isJa ? WEEKDAYS_JA : WEEKDAYS_EN;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const [rowHeight, setRowHeight] = useState(MIN_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_HEIGHT));\n }\n };\n\n updateRowHeight();\n window.addEventListener(\"resize\", updateRowHeight);\n return () => window.removeEventListener(\"resize\", updateRowHeight);\n }, [MIN_HEIGHT]);\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 // タッチデバイス判定(ホバーツールチップの抑制用)\n const [isTouchDevice, setIsTouchDevice] = useState(false);\n useEffect(() => {\n setIsTouchDevice(\"ontouchstart\" in window || navigator.maxTouchPoints > 0);\n }, []);\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 // 祝日をマップに変換(高速検索用)\n const holidayMap = useMemo(() => {\n const map = new Map<string, Holiday>();\n holidays.forEach((holiday) => {\n const dateKey = `${holiday.date.getFullYear()}-${holiday.date.getMonth()}-${holiday.date.getDate()}`;\n map.set(dateKey, holiday);\n });\n return map;\n }, [holidays]);\n\n const isHoliday = (month: number, day: number): boolean => {\n const dateKey = `${year}-${month}-${day}`;\n return holidayMap.has(dateKey);\n };\n\n const getHoliday = (month: number, day: number): Holiday | undefined => {\n const dateKey = `${year}-${month}-${day}`;\n return holidayMap.get(dateKey);\n };\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 // 同じ日付への移動はスキップ\n if (newStartDate.getTime() !== draggingEvent.date.getTime()) {\n setPendingMove({\n event: draggingEvent,\n newStartDate,\n newEndDate,\n isResize: false,\n });\n }\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\n // 変更がない場合はスキップ\n const startChanged = newStartDate.getTime() !== event.date.getTime();\n const endChanged = finalEndDate?.getTime() !== event.endDate?.getTime();\n if (startChanged || endChanged) {\n setPendingMove({\n event,\n newStartDate,\n newEndDate: finalEndDate,\n isResize: true,\n });\n }\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 WEEKDAYS[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 {isJa\n ? `${dragOverCell.month + 1}月${dragOverCell.day}日(${getWeekdayName(dragOverCell.month, dragOverCell.day)})`\n : `${MONTHS[dragOverCell.month]} ${dragOverCell.day} (${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 {isJa\n ? `${resizingEvent.edge === \"start\" ? \"開始日:\" : \"終了日:\"}${dragOverCell.month + 1}月${dragOverCell.day}日(${getWeekdayName(dragOverCell.month, dragOverCell.day)})`\n : `${resizingEvent.edge === \"start\" ? \"Start: \" : \"End: \"}${MONTHS[dragOverCell.month]} ${dragOverCell.day} (${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}>{isJa ? \"日\" : \"Day\"}</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 holiday = isValidDay && isHoliday(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 holiday\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 {showWeekday && isValidDay && (\n <span style={styles.weekdayLabel}>\n {getWeekdayName(monthIndex, day)}\n </span>\n )}\n </div>\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 {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 {/* ホバーツールチップ(PC用) */}\n {hoveredEvent && !isTouchDevice && !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 {hoveredEvent.event.description && (\n <div style={styles.tooltipDescription}>{hoveredEvent.event.description}</div>\n )}\n <div style={styles.tooltipDate}>\n {hoveredEvent.event.date.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\n month: \"short\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {hoveredEvent.event.endDate && (\n <>\n {isJa ? \" 〜 \" : \" - \"}\n {hoveredEvent.event.endDate.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\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 ? (isJa ? \"期間を変更しますか?\" : \"Change duration?\")\n : (isJa ? \"予定を移動しますか?\" : \"Move event?\")}\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}>{isJa ? \"変更前:\" : \"From: \"}</span>\n {pendingMove.event.date.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {pendingMove.event.endDate && (\n <>\n {isJa ? \" 〜 \" : \" - \"}\n {pendingMove.event.endDate.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n </>\n )}\n </div>\n <div style={{ marginTop: 4 }}>\n <span style={styles.dialogDateLabel}>{isJa ? \"変更後:\" : \"To: \"}</span>\n {pendingMove.newStartDate.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {pendingMove.newEndDate && (\n <>\n {isJa ? \" 〜 \" : \" - \"}\n {pendingMove.newEndDate.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\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 {isJa ? \"キャンセル\" : \"Cancel\"}\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 ? (isJa ? \"変更する\" : \"Change\")\n : (isJa ? \"移動する\" : \"Move\")}\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 bgHoliday: \"#fef2f2\",\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 alignItems: \"flex-start\",\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 position: \"sticky\",\n top: 0,\n zIndex: 21,\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 position: \"sticky\",\n top: 0,\n zIndex: 15,\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: \"pre-wrap\",\n maxWidth: 280,\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 whiteSpace: \"nowrap\",\n } as CSSProperties,\n\n tooltipDescription: {\n color: \"rgba(255, 255, 255, 0.8)\",\n fontSize: 11,\n marginTop: 3,\n lineHeight: 1.4,\n } as CSSProperties,\n\n tooltipDate: {\n color: \"rgba(255, 255, 255, 0.7)\",\n fontSize: 10,\n marginTop: 2,\n whiteSpace: \"nowrap\",\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 weekdayLabel: {\n position: \"absolute\",\n top: 1,\n right: 3,\n fontSize: 9,\n color: theme.textMuted,\n opacity: 0.6,\n pointerEvents: \"none\",\n userSelect: \"none\",\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 isHoliday: boolean = false\n): string {\n if (!isValidDay) return theme.bgGray100;\n if (isHovered) return theme.bgGray50;\n if (isHoliday) return theme.bgHoliday;\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, Holiday } from \"./types\";\nimport { createStyles, mergeTheme, getCellBackgroundColor, defaultTheme } from \"./styles\";\n\nconst MONTHS_JA = [\n \"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\",\n \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\",\n];\n\nconst MONTHS_EN = [\n \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\",\n];\n\nconst WEEKDAYS_JA = [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"];\nconst WEEKDAYS_EN = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"];\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) => {\n const aIsMultiDay = a.endDay > a.startDay ? 1 : 0;\n const bIsMultiDay = b.endDay > b.startDay ? 1 : 0;\n // 複数日イベントを先(左側)に配置\n if (aIsMultiDay !== bIsMultiDay) return bIsMultiDay - aIsMultiDay;\n // 開始日が早い順\n if (a.startDay !== b.startDay) return a.startDay - b.startDay;\n // 開始日が同じ場合、期間が長い順\n return (b.endDay - b.startDay) - (a.endDay - a.startDay);\n });\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 holidays = [],\n onDateClick,\n onDateDoubleClick,\n onDateRangeSelect,\n onEventClick,\n onEventMove,\n highlightRange,\n categoryColors = {},\n theme: customTheme,\n showWeekday = false,\n locale = \"en\",\n minRowHeight: minRowHeightProp,\n showContinuationTitle = true,\n}: YearlyCalendarProps) {\n const MIN_HEIGHT = minRowHeightProp ?? MIN_ROW_HEIGHT;\n // テーマをマージ\n const theme = useMemo(() => mergeTheme(customTheme), [customTheme]);\n const styles = useMemo(() => createStyles(theme), [theme]);\n\n // ロケールに応じた表示\n const isJa = locale === \"ja\";\n const MONTHS = isJa ? MONTHS_JA : MONTHS_EN;\n const WEEKDAYS = isJa ? WEEKDAYS_JA : WEEKDAYS_EN;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const [rowHeight, setRowHeight] = useState(MIN_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_HEIGHT));\n }\n };\n\n updateRowHeight();\n window.addEventListener(\"resize\", updateRowHeight);\n return () => window.removeEventListener(\"resize\", updateRowHeight);\n }, [MIN_HEIGHT]);\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 // タッチデバイス判定(ホバーツールチップの抑制用)\n const [isTouchDevice, setIsTouchDevice] = useState(false);\n useEffect(() => {\n setIsTouchDevice(\"ontouchstart\" in window || navigator.maxTouchPoints > 0);\n }, []);\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 // 祝日をマップに変換(高速検索用)\n const holidayMap = useMemo(() => {\n const map = new Map<string, Holiday>();\n holidays.forEach((holiday) => {\n const dateKey = `${holiday.date.getFullYear()}-${holiday.date.getMonth()}-${holiday.date.getDate()}`;\n map.set(dateKey, holiday);\n });\n return map;\n }, [holidays]);\n\n const isHoliday = (month: number, day: number): boolean => {\n const dateKey = `${year}-${month}-${day}`;\n return holidayMap.has(dateKey);\n };\n\n const getHoliday = (month: number, day: number): Holiday | undefined => {\n const dateKey = `${year}-${month}-${day}`;\n return holidayMap.get(dateKey);\n };\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 // 同じ日付への移動はスキップ\n if (newStartDate.getTime() !== draggingEvent.date.getTime()) {\n setPendingMove({\n event: draggingEvent,\n newStartDate,\n newEndDate,\n isResize: false,\n });\n }\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\n // 変更がない場合はスキップ\n const startChanged = newStartDate.getTime() !== event.date.getTime();\n const endChanged = finalEndDate?.getTime() !== event.endDate?.getTime();\n if (startChanged || endChanged) {\n setPendingMove({\n event,\n newStartDate,\n newEndDate: finalEndDate,\n isResize: true,\n });\n }\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 WEEKDAYS[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 {isJa\n ? `${dragOverCell.month + 1}月${dragOverCell.day}日(${getWeekdayName(dragOverCell.month, dragOverCell.day)})`\n : `${MONTHS[dragOverCell.month]} ${dragOverCell.day} (${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 {isJa\n ? `${resizingEvent.edge === \"start\" ? \"開始日:\" : \"終了日:\"}${dragOverCell.month + 1}月${dragOverCell.day}日(${getWeekdayName(dragOverCell.month, dragOverCell.day)})`\n : `${resizingEvent.edge === \"start\" ? \"Start: \" : \"End: \"}${MONTHS[dragOverCell.month]} ${dragOverCell.day} (${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}>{isJa ? \"日\" : \"Day\"}</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 holiday = isValidDay && isHoliday(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 holiday\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 {showWeekday && isValidDay && (\n <span style={styles.weekdayLabel}>\n {getWeekdayName(monthIndex, day)}\n </span>\n )}\n </div>\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 || showContinuationTitle) && 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 || showContinuationTitle) && 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 {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 {/* ホバーツールチップ(PC用) */}\n {hoveredEvent && !isTouchDevice && !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 {hoveredEvent.event.description && (\n <div style={styles.tooltipDescription}>{hoveredEvent.event.description}</div>\n )}\n <div style={styles.tooltipDate}>\n {hoveredEvent.event.date.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\n month: \"short\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {hoveredEvent.event.endDate && (\n <>\n {isJa ? \" 〜 \" : \" - \"}\n {hoveredEvent.event.endDate.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\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 ? (isJa ? \"期間を変更しますか?\" : \"Change duration?\")\n : (isJa ? \"予定を移動しますか?\" : \"Move event?\")}\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}>{isJa ? \"変更前:\" : \"From: \"}</span>\n {pendingMove.event.date.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {pendingMove.event.endDate && (\n <>\n {isJa ? \" 〜 \" : \" - \"}\n {pendingMove.event.endDate.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n </>\n )}\n </div>\n <div style={{ marginTop: 4 }}>\n <span style={styles.dialogDateLabel}>{isJa ? \"変更後:\" : \"To: \"}</span>\n {pendingMove.newStartDate.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\n month: \"long\",\n day: \"numeric\",\n weekday: \"short\",\n })}\n {pendingMove.newEndDate && (\n <>\n {isJa ? \" 〜 \" : \" - \"}\n {pendingMove.newEndDate.toLocaleDateString(isJa ? \"ja-JP\" : \"en-US\", {\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 {isJa ? \"キャンセル\" : \"Cancel\"}\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 ? (isJa ? \"変更する\" : \"Change\")\n : (isJa ? \"移動する\" : \"Move\")}\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
|