@dayflow/core 2.0.2 → 2.0.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.
Files changed (52) hide show
  1. package/LICENSE +1 -1
  2. package/README.ja.md +9 -345
  3. package/README.md +5 -351
  4. package/README.zh.md +9 -345
  5. package/dist/components/calendarEvent/components/AllDayContent.d.ts +9 -0
  6. package/dist/components/calendarEvent/components/MonthAllDayContent.d.ts +8 -0
  7. package/dist/components/calendarEvent/components/MonthRegularContent.d.ts +11 -0
  8. package/dist/components/calendarEvent/components/RegularEventContent.d.ts +20 -0
  9. package/dist/components/calendarEvent/index.d.ts +4 -0
  10. package/dist/components/calendarEvent/types.d.ts +49 -0
  11. package/dist/components/dayView/DayContent.d.ts +55 -0
  12. package/dist/components/dayView/RightPanel.d.ts +16 -0
  13. package/dist/components/dayView/util.d.ts +8 -0
  14. package/dist/components/eventLayout/constants.d.ts +8 -0
  15. package/dist/components/eventLayout/index.d.ts +129 -0
  16. package/dist/components/eventLayout/types.d.ts +23 -0
  17. package/dist/components/eventLayout/utils.d.ts +5 -0
  18. package/dist/components/rangePicker/components/CalendarGrid.d.ts +13 -0
  19. package/dist/components/rangePicker/components/CalendarHeader.d.ts +11 -0
  20. package/dist/components/rangePicker/components/RangePickerPanel.d.ts +25 -0
  21. package/dist/components/rangePicker/components/TimeSelector.d.ts +21 -0
  22. package/dist/components/rangePicker/constants.d.ts +5 -0
  23. package/dist/components/rangePicker/index.d.ts +4 -0
  24. package/dist/components/rangePicker/types.d.ts +23 -0
  25. package/dist/components/rangePicker/utils.d.ts +2 -0
  26. package/dist/components/weekView/AllDayRow.d.ts +50 -0
  27. package/dist/components/weekView/TimeGrid.d.ts +52 -0
  28. package/dist/components/weekView/util.d.ts +9 -0
  29. package/dist/components/yearView/DefaultYearView.d.ts +11 -0
  30. package/dist/components/yearView/FixedWeekYearView.d.ts +14 -0
  31. package/dist/components/yearView/YearDayCell.d.ts +12 -0
  32. package/dist/components/yearView/YearMultiDayEvent.d.ts +23 -0
  33. package/dist/components/yearView/YearRowComponent.d.ts +27 -0
  34. package/dist/components/yearView/YearWeekComponent.d.ts +29 -0
  35. package/dist/components/yearView/utils.d.ts +19 -0
  36. package/dist/contexts/ThemeContext.d.ts +0 -21
  37. package/dist/factories/createDayView.d.ts +1 -9
  38. package/dist/factories/createMonthView.d.ts +1 -13
  39. package/dist/factories/createWeekView.d.ts +1 -12
  40. package/dist/factories/createYearView.d.ts +1 -7
  41. package/dist/factories/index.d.ts +0 -7
  42. package/dist/hooks/virtualScroll/useVirtualScroll.d.ts +9 -9
  43. package/dist/index.d.ts +2 -2
  44. package/dist/index.esm.js +1 -1
  45. package/dist/index.js +1 -1
  46. package/dist/styles/classNames.d.ts +8 -8
  47. package/dist/styles.css +78 -140
  48. package/dist/types/dragIndicator.d.ts +2 -0
  49. package/dist/types/factory.d.ts +2 -0
  50. package/dist/types/plugin.d.ts +1 -1
  51. package/dist/views/YearView.d.ts +7 -2
  52. package/package.json +3 -1
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 Jayce Li
3
+ Copyright (c) 2025 DayFlow Contributors
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.ja.md CHANGED
@@ -9,364 +9,28 @@
9
9
  [![License](https://img.shields.io/github/license/dayflow-js/dayflow)](https://github.com/dayflow-js/dayflow/blob/main/LICENSE)
10
10
  [![Discord](https://img.shields.io/badge/Discord-Join%20Chat-5865F2?logo=discord&logoColor=white)](https://discord.gg/9vdFZKJqBb)
11
11
 
12
- ## 🗓️ 機能
12
+ ## 機能
13
13
 
14
- ### 月次、週次、日次、その他のビュータイプ
14
+ ### 月次、週次、日次、その他のビュータイプ
15
15
 
16
- | 月次 | 週次 |
17
- |------------------------------------------|----------------------------------------|
18
- | ![image](./assets/images//MonthView.png) | ![image](./assets/images/WeekView.png) |
16
+ | 月次 | 週次 |
17
+ |-----------------------------------------|----------------------------------------|
18
+ | ![image](./assets/images/MonthView.png) | ![image](./assets/images/WeekView.png) |
19
19
 
20
20
  | 日次 | イベントスタックレベル |
21
21
  |---------------------------------------|------------------------------------------|
22
22
  | ![image](./assets/images/DayView.png) | ![image](./assets/images/stackLevel.png) |
23
23
 
24
- ### 🤩 デフォルトパネル(複数のイベント詳細パネルオプションが利用可能)
24
+ ### デフォルトパネル(複数のイベント詳細パネルオプションが利用可能)
25
25
 
26
26
  | 詳細ポップアップ | 詳細ダイアログ |
27
27
  |-------------------------------------|--------------------------------------|
28
28
  | ![image](./assets/images/popup.png) | ![image](./assets/images/dialog.png) |
29
29
 
30
- ## クイックスタート
30
+ ### ドラッグ&ドロップとリサイズも簡単
31
+ https://github.com/user-attachments/assets/726a5232-35a8-4fe3-8e7b-4de07c455353
31
32
 
32
- 公式サイト:
33
-
34
- https://dayflow-js.github.io/calendar/
35
-
36
- ### インストール
37
-
38
- ```bash
39
- npm install @dayflow/core lucide-react
40
- ```
41
-
42
- **DayFlow** アプリ全体は `useCalendarApp` フックを通じて作成され、**`calendar`** オブジェクトを返します。
43
-
44
- このオブジェクトは、`DayFlowCalendar` UI コンポーネントを使用してレンダリングされます。
45
-
46
- ```tsx
47
- 'use client';
48
-
49
- import {
50
- useCalendarApp,
51
- DayFlowCalendar,
52
- createMonthView,
53
- createEvent,
54
- createAllDayEvent,
55
- createTimedEvent,
56
- } from '@dayflow/core';
57
- import '@dayflow/core/dist/styles.css';
58
-
59
- // ローカル時間指定イベント(タイムゾーンの複雑さなし)
60
- const meeting = createEvent({
61
- id: '1',
62
- title: 'Team Meeting',
63
- start: new Date(2024, 9, 15, 10, 0), // 2024年10月15日 10:00
64
- end: new Date(2024, 9, 15, 11, 0), // 2024年10月15日 11:00
65
- });
66
-
67
- // 終日イベント
68
- const holiday = createAllDayEvent(
69
- '2',
70
- 'Tech Conference',
71
- new Date(2024, 9, 20)
72
- );
73
-
74
- // 時間指定イベントのクイック作成
75
- const lunch = createTimedEvent(
76
- '3',
77
- 'Lunch Break',
78
- new Date(2024, 9, 15, 12, 0), // 12:00
79
- new Date(2024, 9, 15, 13, 0) // 13:00
80
- );
81
-
82
- export default function MyCalendar() {
83
- const calendar = useCalendarApp({
84
- views: [createMonthView()],
85
- events: [],
86
- calendars: [],
87
- defaultView: 'month',
88
- initialDate: new Date(),
89
- });
90
-
91
- return <DayFlowCalendar calendar={calendar} />;
92
- }
93
- ```
94
-
95
- - **views**: カレンダービューの配列。現在、DayFlow は4つの組み込みファクトリ関数を提供しています:
96
- `createMonthView`、`createWeekView`、`createDayView`、および `createYearView`(開発中)。
97
- ビューの順序によってタブの順序が決まります(年 / 月 / 週 / 日)。
98
- - **events**: カレンダーのコアデータ。イベントタイプに応じて、組み込みヘルパー
99
- `createEvent`、`createAllDayEvent`、および `createTimedEvent` を使用して作成できます。
100
-
101
- ---
102
-
103
- ## `useCalendarApp` 設定オプション
104
-
105
- | オプション | 型 | デフォルト | 説明 | 必須 |
106
- |------------------------|----------------------------|---------------------|--------------------------------------------------------------------------|------|
107
- | `views` | `CalendarView[]` | — | 登録されたビュー定義(例:`createMonthView()`)。少なくとも1つのビューが必要です | ✅ |
108
- | `plugins` | `CalendarPlugin[]` | `[]` | オプションのプラグイン(ドラッグサポート、キーボードショートカットなど)。各プラグインはインストール中にアプリインスタンスを受け取ります | ❌ |
109
- | `events` | `Event[]` | `[]` | 初期のイベントデータ。後で `addEvent` / `updateEvent` を使用して変更します | ❌ |
110
- | `callbacks` | `CalendarCallbacks` | `{}` | ビュー、日付、またはイベントの変更時にトリガーされるライフサイクルフック — API 同期に最適です | ❌ |
111
- | `defaultView` | `ViewType` | `ViewType.WEEK` | ロード時の初期ビュー。`views` に存在する必要があります | ❌ |
112
- | `initialDate` | `Date` | `new Date()` | 初期のフォーカス日付(可視範囲の計算も初期化します) | ❌ |
113
- | `switcherMode` | `'buttons' \| 'select'` | `'buttons'` | ヘッダー内の組み込みビュースイッチャーのレンダリング方法を制御します | ❌ |
114
- | `calendars` | `CalendarType[]` | `[]` | カレンダーカテゴリ(仕事、個人など)を色と表示設定とともに登録します | ❌ |
115
- | `defaultCalendar` | `string` | 最初の可視カレンダー | 新しいイベントを作成するときに使用されるカレンダー ID | ❌ |
116
- | `theme` | `ThemeConfig` | `{ mode: 'light' }` | グローバルテーマモードとオプションのトークンオーバーライド | ❌ |
117
- | `locale` | `string \| Locale` | `'en-US'` | 国際化 (i18n)。言語コード(例:`'ja'`)または Locale オブジェクトをサポートします | ❌ |
118
- | `useSidebar` | `boolean \| SidebarConfig` | `false` | 組み込みサイドバーを有効にするか、幅、折りたたみ状態、およびレンダラーをカスタマイズします | ❌ |
119
- | `useEventDetailDialog` | `boolean` | `false` | イベント詳細にインラインパネルではなくモーダルダイアログを使用します | ❌ |
120
-
121
- ## コールバック関数
122
-
123
- `callbacks` は、DayFlow とバックエンドまたは外部状態管理の間のブリッジとして機能します。
124
-
125
- これらは通常、データベースまたは API との CRUD 操作に使用されます。
126
-
127
- 例:
128
-
129
- - `onViewChange(view)`: ビューの切り替え後にトリガーされます(分析や URL 同期に便利)
130
- - `onDateChange(date)`: フォーカスされた日付が変更されたときに発火します
131
- - `onVisibleMonthChange(date)`: 表示されている月が変更されたときにトリガーされます(データのプリロードに便利)
132
- - `onEventCreate / Update / Delete`: イベント CRUD をバックエンドに接続します
133
- - `onCalendarCreate / Update / Delete`: カレンダーリストの変更を同期します
134
- - `onCalendarMerge(sourceId, targetId)`: 2つのカレンダーをマージするときにトリガーされます
135
- - `onRender`: レンダリングサイクル後に発火し、パフォーマンス監視に適しています
136
-
137
- ```tsx
138
- const calendar = useCalendarApp({
139
- views: [createDayView(), createWeekView(), createMonthView()],
140
- events,
141
- calendars: customCalendarTypes,
142
- defaultCalendar: 'work',
143
- plugins: [dragPlugin],
144
- theme: { mode: 'auto' },
145
- useSidebar: sidebarConfig,
146
- callbacks: {
147
- onCalendarUpdate: async calendar => {
148
- console.log('update calendar:', calendar);
149
- },
150
- onCalendarDelete: async calendar => {
151
- console.log('delete calendar:', calendar);
152
- },
153
- onCalendarCreate: async calendar => {
154
- // await server API call
155
- console.log('create calendar:', calendar);
156
- },
157
- onCalendarMerge: async (sourceId, targetId) => {
158
- console.log('merge calendar:', sourceId, targetId);
159
- },
160
- },
161
- });
162
- ```
163
-
164
- ---
165
-
166
- ## イベント詳細管理
167
-
168
- DayFlow には、以下の編集をサポートするデフォルトのイベント詳細パネルが含まれています:
169
-
170
- - タイトル
171
- - 時間範囲
172
- - メモ
173
-
174
- `meta` オブジェクトを渡して、**会議リンク**、**場所** などのカスタムフィールドを保存することもできます。
175
-
176
- <img width="536" height="323" alt="image" src="https://github.com/user-attachments/assets/7a599105-460e-4f83-8418-92bcd0ff8c2a" />
177
-
178
- `useEventDetailDialog` を `DayFlowCalendar` に渡すことで、詳細パネルをモーダルダイアログとして有効にできます:
179
-
180
- ```tsx
181
- <DayFlowCalendar calendar={calendar} useEventDetailDialog={true} />
182
- ```
183
-
184
- <img width="1476" height="1108" alt="image" src="https://github.com/user-attachments/assets/c9f1e231-f8d1-4006-8ff1-942bb7491934" />
185
-
186
- ---
187
-
188
- ### カスタムイベント詳細パネル / ダイアログ
189
-
190
- 完全にカスタマイズされた UI の場合、以下を提供することで、デフォルトの詳細パネルまたはダイアログを独自のコンポーネントに置き換えることができます:
191
-
192
- - `customDetailPanelContent`
193
- - `customEventDetailDialog`
194
-
195
- ```tsx
196
- <DayFlowCalendar
197
- calendar={calendar}
198
- customEventDetailDialog={CustomDialog} // Modal dialog
199
- customDetailPanelContent={CustomContent} // Floating panel
200
- />
201
- ```
202
-
203
- 詳細はドキュメントをご覧ください:
204
-
205
- - **カスタムイベント詳細ダイアログ**
206
- https://dayflow-js.github.io/calendar/docs-ja/features/custom-detail-dialog
207
- - **カスタムイベント詳細パネル**
208
- https://dayflow-js.github.io/calendar/docs-ja/features/custom-detail-panel
209
-
210
- ---
211
-
212
- ## サイドバー
213
-
214
- DayFlow には強力な組み込みサイドバーが搭載されています。
215
-
216
- 以下のことができます:
217
-
218
- - サイドバーからカレンダーをドラッグしてイベントを作成
219
-
220
- ![Area](https://github.com/user-attachments/assets/938a9a8f-b995-4ea0-8fe3-fa25ca2be4b6)
221
-
222
- - カレンダーの統合、削除、色の変更
223
-
224
- <img width="540" height="423" alt="image" src="https://github.com/user-attachments/assets/257a8671-e645-43fe-861e-613030f6c46e" />
225
-
226
- - プリセットカラーの使用、またはカラーピッカーによるカスタムカラーの選択
227
-
228
- <img width="872" height="708" alt="image" src="https://github.com/user-attachments/assets/bfda7cde-281e-4c23-86d6-910b13e7bc63" />
229
-
230
- ```tsx
231
- const calendar = useCalendarApp({
232
- views: [createMonthView(), createWeekView(), createDayView()],
233
- plugins: [createDragPlugin()],
234
- events,
235
- calendars,
236
- defaultView: ViewType.WEEK,
237
- useSidebar: {
238
- enabled: true,
239
- width: 280,
240
- },
241
- });
242
- ```
243
-
244
- ---
245
-
246
- ### `useSidebar` 設定
247
-
248
- | プロパティ | 型 | 説明 | デフォルト |
249
- |------------------------------|--------------------------------------------------------------------|-----------------------------------------------------------------------|------------|
250
- | `enabled` | `boolean` | サイドバーが有効かどうか。 | `true` |
251
- | `width` | `number \| string` | サイドバーの幅(例:`240` または `'20%'`)。 | `'240px'` |
252
- | `initialCollapsed` | `boolean` | サイドバーがデフォルトで折りたたまれているかどうか。 | `false` |
253
- | `render` | `(props: CalendarSidebarRenderProps) => React.ReactNode` | サイドバー UI の完全なオーバーライド。 | - |
254
- | `createCalendarMode` | `'inline' \| 'modal'` | 新しいカレンダーを作成するモード:`inline`(リスト内で直接編集)または `modal`(ポップアップダイアログ)。 | `'inline'` |
255
- | `renderCalendarContextMenu` | `(calendar: CalendarType, onClose: () => void) => React.ReactNode` | カレンダーアイテムの右クリックコンテキストメニューのカスタムレンダラー。 | - |
256
- | `renderCreateCalendarDialog` | `(props: CreateCalendarDialogProps) => React.ReactNode` | カレンダー作成ダイアログのカスタムレンダラー(`modal` モードで使用)。 | - |
257
-
258
-
259
- ---
260
-
261
- ### カスタムサイドバー
262
-
263
- プロジェクトに独自のサイドバーデザインがすでにある場合は、`useSidebar.render` を使用して完全にカスタマイズできます。
264
-
265
- このレンダリング関数は、リアルタイムのカレンダー状態と、DayFlow コアと対話するためのヘルパーメソッドを受け取ります。
266
-
267
- **`CalendarSidebarRenderProps` は、カスタムサイドバーと DayFlow コア間の通信を可能にします。**
268
-
269
- ```tsx
270
- import type { CalendarSidebarRenderProps } from '@dayflow/core';
271
-
272
- const CustomSidebar = ({
273
- app,
274
- calendars,
275
- toggleCalendarVisibility,
276
- toggleAll,
277
- isCollapsed,
278
- setCollapsed,
279
- }: CalendarSidebarRenderProps) => {
280
- if (isCollapsed) {
281
- return <button onClick={() => setCollapsed(false)}>Expand Sidebar</button>;
282
- }
283
-
284
- return (
285
- <aside className="flex h-full flex-col gap-4 p-4">
286
- <header className="flex items-center justify-between">
287
- <h3 className="text-sm font-semibold">Calendars</h3>
288
- <div className="space-x-2">
289
- <button onClick={() => toggleAll(true)}>Show All</button>
290
- <button onClick={() => toggleAll(false)}>Hide All</button>
291
- </div>
292
- </header>
293
- <ul className="space-y-2">
294
- {calendars.map(calendar => (
295
- <li key={calendar.id} className="flex items-center gap-2 text-sm">
296
- <input
297
- type="checkbox"
298
- checked={calendar.isVisible}
299
- onChange={() =>
300
- toggleCalendarVisibility(calendar.id, !calendar.isVisible)
301
- }
302
- />
303
- <span
304
- className="h-2.5 w-2.5 rounded-full"
305
- style={{ backgroundColor: calendar.colors.eventColor }}
306
- />
307
- {calendar.name}
308
- </li>
309
- ))}
310
- </ul>
311
- <section className="rounded-xl border border-slate-200 p-3 text-xs">
312
- <p>Current date: {app.getCurrentDate().toDateString()}</p>
313
- <p>Total events: {app.getEvents().length}</p>
314
- </section>
315
- </aside>
316
- );
317
- };
318
-
319
- const calendar = useCalendarApp({
320
- /* ... */
321
- useSidebar: {
322
- enabled: true,
323
- width: 320,
324
- render: props => <CustomSidebar {...props} />,
325
- },
326
- });
327
- ```
328
-
329
- ---
330
-
331
- ## ダークモード
332
-
333
- DayFlow Calendar は、ビュー、サイドバー、イベントカード、ダイアログ全体で完全なダークモードをネイティブにサポートしています。
334
-
335
- <img width="1103" height="729" alt="image" src="https://github.com/user-attachments/assets/03c542d4-4b1b-4b99-9590-08c7be7f85df" />
336
-
337
- **light**(ライト)、**dark**(ダーク)、または **auto**(システム設定に従う)を切り替えることができます。
338
-
339
- ```tsx
340
- import { DayFlowCalendar, useCalendarApp } from '@dayflow/core';
341
-
342
- function MyCalendar() {
343
- const calendar = useCalendarApp({
344
- theme: {
345
- mode: 'dark', // 'light' | 'dark' | 'auto'
346
- },
347
- });
348
-
349
- return <DayFlowCalendar calendar={calendar} />;
350
- }
351
- ```
352
-
353
- ---
354
-
355
- ## ビュースイッチャーモード
356
-
357
- `switcherMode` オプションは、ヘッダーのビュースイッチャーのレンダリング方法を制御します。
358
-
359
- DayFlow は2つの組み込みモードを提供します:
360
-
361
- - **`buttons`**: 水平ボタンタブ(デフォルト、デスクトップに最適)
362
-
363
- <img width="2190" height="406" alt="image" src="https://github.com/user-attachments/assets/a4be37bc-90ac-4872-afa0-589e3d1f7e9b" />
364
-
365
- - **`select`**: ドロップダウンメニュー(省スペース、モバイルフレンドリー)
366
-
367
- <img width="2186" height="420" alt="image" src="https://github.com/user-attachments/assets/28e321ae-6c56-441a-a9fc-ddcfa504c920" />
368
-
369
- ---
33
+ https://github.com/user-attachments/assets/957317e5-02d8-4419-a74b-62b7d191e347
370
34
 
371
35
  ## コントリビューション
372
36