@dxos/react-ui-calendar 0.8.4-staging.ac66bdf99f → 0.9.1-main.c7dcc2e112

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 (36) hide show
  1. package/LICENSE +102 -5
  2. package/dist/lib/browser/index.mjs +881 -107
  3. package/dist/lib/browser/index.mjs.map +4 -4
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/browser/translations.mjs +16 -0
  6. package/dist/lib/browser/translations.mjs.map +7 -0
  7. package/dist/lib/node-esm/index.mjs +881 -107
  8. package/dist/lib/node-esm/index.mjs.map +4 -4
  9. package/dist/lib/node-esm/meta.json +1 -1
  10. package/dist/lib/node-esm/translations.mjs +18 -0
  11. package/dist/lib/node-esm/translations.mjs.map +7 -0
  12. package/dist/types/src/components/Calendar/Calendar.d.ts +40 -21
  13. package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -1
  14. package/dist/types/src/components/Calendar/Calendar.stories.d.ts +4 -1
  15. package/dist/types/src/components/Calendar/Calendar.stories.d.ts.map +1 -1
  16. package/dist/types/src/components/Calendar/Week.d.ts +30 -0
  17. package/dist/types/src/components/Calendar/Week.d.ts.map +1 -0
  18. package/dist/types/src/components/Calendar/Weekdays.d.ts +18 -0
  19. package/dist/types/src/components/Calendar/Weekdays.d.ts.map +1 -0
  20. package/dist/types/src/components/Calendar/context.d.ts +40 -0
  21. package/dist/types/src/components/Calendar/context.d.ts.map +1 -0
  22. package/dist/types/src/components/Calendar/util.d.ts +47 -0
  23. package/dist/types/src/components/Calendar/util.d.ts.map +1 -1
  24. package/dist/types/src/components/Calendar/util.test.d.ts +2 -0
  25. package/dist/types/src/components/Calendar/util.test.d.ts.map +1 -0
  26. package/dist/types/src/translations.d.ts +1 -1
  27. package/dist/types/src/translations.d.ts.map +1 -1
  28. package/dist/types/tsconfig.tsbuildinfo +1 -1
  29. package/package.json +25 -19
  30. package/src/components/Calendar/Calendar.stories.tsx +63 -3
  31. package/src/components/Calendar/Calendar.tsx +483 -92
  32. package/src/components/Calendar/Week.tsx +488 -0
  33. package/src/components/Calendar/Weekdays.tsx +57 -0
  34. package/src/components/Calendar/context.ts +60 -0
  35. package/src/components/Calendar/util.test.ts +90 -0
  36. package/src/components/Calendar/util.ts +110 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/react-ui-calendar",
3
- "version": "0.8.4-staging.ac66bdf99f",
3
+ "version": "0.9.1-main.c7dcc2e112",
4
4
  "description": "A calendar component.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -8,21 +8,27 @@
8
8
  "type": "git",
9
9
  "url": "https://github.com/dxos/dxos"
10
10
  },
11
- "license": "MIT",
11
+ "license": "FSL-1.1-Apache-2.0",
12
12
  "author": "DXOS.org",
13
13
  "type": "module",
14
+ "imports": {
15
+ "#translations": "./src/translations.ts"
16
+ },
14
17
  "exports": {
15
18
  ".": {
16
19
  "source": "./src/index.ts",
17
20
  "types": "./dist/types/src/index.d.ts",
18
21
  "browser": "./dist/lib/browser/index.mjs",
19
22
  "node": "./dist/lib/node-esm/index.mjs"
23
+ },
24
+ "./translations": {
25
+ "source": "./src/translations.ts",
26
+ "types": "./dist/types/src/translations.d.ts",
27
+ "browser": "./dist/lib/browser/translations.mjs",
28
+ "node": "./dist/lib/node-esm/translations.mjs"
20
29
  }
21
30
  },
22
31
  "types": "dist/types/src/index.d.ts",
23
- "typesVersions": {
24
- "*": {}
25
- },
26
32
  "files": [
27
33
  "dist",
28
34
  "src"
@@ -33,31 +39,31 @@
33
39
  "react-resize-detector": "^11.0.1",
34
40
  "react-virtualized": "^9.22.6",
35
41
  "react-window": "^2.2.3",
36
- "@dxos/async": "0.8.4-staging.ac66bdf99f",
37
- "@dxos/log": "0.8.4-staging.ac66bdf99f",
38
- "@dxos/invariant": "0.8.4-staging.ac66bdf99f",
39
- "@dxos/util": "0.8.4-staging.ac66bdf99f",
40
- "@dxos/debug": "0.8.4-staging.ac66bdf99f"
42
+ "@dxos/async": "0.9.1-main.c7dcc2e112",
43
+ "@dxos/invariant": "0.9.1-main.c7dcc2e112",
44
+ "@dxos/log": "0.9.1-main.c7dcc2e112",
45
+ "@dxos/debug": "0.9.1-main.c7dcc2e112",
46
+ "@dxos/util": "0.9.1-main.c7dcc2e112"
41
47
  },
42
48
  "devDependencies": {
43
49
  "@types/react": "~19.2.7",
44
50
  "@types/react-dom": "~19.2.3",
45
51
  "@types/react-virtualized": "^9.22.3",
46
- "effect": "3.20.0",
52
+ "effect": "3.21.3",
47
53
  "react": "~19.2.3",
48
54
  "react-dom": "~19.2.3",
49
- "vite": "^7.1.11",
50
- "@dxos/random": "0.8.4-staging.ac66bdf99f",
51
- "@dxos/react-ui": "0.8.4-staging.ac66bdf99f",
52
- "@dxos/storybook-utils": "0.8.4-staging.ac66bdf99f",
53
- "@dxos/ui-theme": "0.8.4-staging.ac66bdf99f"
55
+ "vite": "^8.0.16",
56
+ "@dxos/random": "0.9.1-main.c7dcc2e112",
57
+ "@dxos/react-ui": "0.9.1-main.c7dcc2e112",
58
+ "@dxos/storybook-utils": "0.9.1-main.c7dcc2e112",
59
+ "@dxos/ui-theme": "0.9.1-main.c7dcc2e112"
54
60
  },
55
61
  "peerDependencies": {
56
- "effect": "3.20.0",
62
+ "effect": "3.21.3",
57
63
  "react": "~19.2.3",
58
64
  "react-dom": "~19.2.3",
59
- "@dxos/react-ui": "0.8.4-staging.ac66bdf99f",
60
- "@dxos/ui-theme": "0.8.4-staging.ac66bdf99f"
65
+ "@dxos/react-ui": "0.9.1-main.c7dcc2e112",
66
+ "@dxos/ui-theme": "0.9.1-main.c7dcc2e112"
61
67
  },
62
68
  "publishConfig": {
63
69
  "access": "public"
@@ -3,13 +3,15 @@
3
3
  //
4
4
 
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
- import React from 'react';
6
+ import { addDays, addMinutes, format, startOfDay, startOfWeek } from 'date-fns';
7
+ import React, { useMemo, useRef, useState } from 'react';
7
8
 
8
9
  import { Panel } from '@dxos/react-ui';
9
10
  import { withLayout, withTheme } from '@dxos/react-ui/testing';
10
11
 
11
- import { translations } from '../../translations';
12
- import { Calendar } from './Calendar';
12
+ import { translations } from '#translations';
13
+
14
+ import { Calendar, type CalendarEvent, type Range as DateRange } from './Calendar';
13
15
 
14
16
  const meta = {
15
17
  title: 'ui/react-ui-calendar/Calendar',
@@ -33,6 +35,24 @@ export const Default: Story = {
33
35
  ),
34
36
  };
35
37
 
38
+ export const Range: Story = {
39
+ decorators: [withTheme(), withLayout({ layout: 'centered' })],
40
+ render: () => {
41
+ const [range, setRange] = useState<DateRange | undefined>();
42
+ return (
43
+ <div className='flex flex-col gap-2'>
44
+ <Calendar.Root>
45
+ <Calendar.Toolbar />
46
+ <Calendar.Grid rows={6} onSelectRange={({ range }) => setRange(range)} />
47
+ </Calendar.Root>
48
+ <div className='text-sm text-description text-center'>
49
+ {range ? `${format(range.from, 'PP')} → ${format(range.to, 'PP')}` : 'Drag across days to select a range.'}
50
+ </div>
51
+ </div>
52
+ );
53
+ },
54
+ };
55
+
36
56
  export const Column: Story = {
37
57
  decorators: [withTheme(), withLayout({ layout: 'column', classNames: 'w-auto' })],
38
58
  render: () => (
@@ -48,3 +68,43 @@ export const Column: Story = {
48
68
  </Calendar.Root>
49
69
  ),
50
70
  };
71
+
72
+ export const Week: StoryObj<typeof Calendar.Week> = {
73
+ decorators: [withTheme(), withLayout({ layout: 'column', classNames: 'w-auto' })],
74
+ render: () => {
75
+ const idRef = useRef(100);
76
+ const initial = useMemo<CalendarEvent[]>(() => {
77
+ const weekStart = startOfWeek(new Date(), { weekStartsOn: 1 });
78
+ const at = (dayOffset: number, hour: number, minute = 0) =>
79
+ addMinutes(startOfDay(addDays(weekStart, dayOffset)), hour * 60 + minute);
80
+ return [
81
+ { id: '1', title: 'Standup', start: at(1, 9, 0), end: at(1, 9, 30) },
82
+ { id: '2', title: 'Design review', start: at(1, 9, 15), end: at(1, 10, 30) },
83
+ { id: '3', title: 'Lunch', start: at(2, 12, 0), end: at(2, 13, 0) },
84
+ { id: '4', title: '1:1', start: at(3, 14, 0), end: at(3, 15, 0) },
85
+ { id: '5', title: 'Focus', start: at(3, 14, 30), end: at(3, 16, 0) },
86
+ { id: '6', title: 'Planning', start: at(4, 10, 0), end: at(4, 11, 30) },
87
+ ];
88
+ }, []);
89
+ const [events, setEvents] = useState<CalendarEvent[]>(initial);
90
+
91
+ return (
92
+ <Calendar.Root>
93
+ <Panel.Root>
94
+ <Panel.Toolbar asChild>
95
+ <Calendar.Toolbar />
96
+ </Panel.Toolbar>
97
+ <Calendar.Week
98
+ events={events}
99
+ onEventCreate={({ start, end }) =>
100
+ setEvents((current) => [...current, { id: `${idRef.current++}`, title: 'New event', start, end }])
101
+ }
102
+ onEventUpdate={({ id, start, end }) =>
103
+ setEvents((current) => current.map((event) => (event.id === id ? { ...event, start, end } : event)))
104
+ }
105
+ />
106
+ </Panel.Root>
107
+ </Calendar.Root>
108
+ );
109
+ },
110
+ };