@daryasidorovich/modsen-datepicker 1.0.0 → 1.0.1

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 (128) hide show
  1. package/.prettierrc +6 -6
  2. package/.storybook/main.js +93 -93
  3. package/.storybook/main.ts +16 -0
  4. package/.storybook/preview.js +26 -26
  5. package/.storybook/preview.tsx +18 -18
  6. package/README.md +5 -5
  7. package/commitlint.config.js +23 -23
  8. package/package.json +1 -1
  9. package/rollup.config.js +65 -65
  10. package/src/components/BaseCalendar/BaseCalendar.stories.tsx +77 -77
  11. package/src/components/BaseCalendar/index.tsx +63 -63
  12. package/src/components/BaseCalendar/styles.module.scss +15 -15
  13. package/src/components/Button/Button.stories.tsx +16 -0
  14. package/src/components/Button/Button.tsx +14 -0
  15. package/src/components/Button/index.ts +1 -0
  16. package/src/components/Button/styles.module.scss +3 -0
  17. package/src/components/CalendarGrid/CalendarGrid.stories.tsx +136 -136
  18. package/src/components/CalendarGrid/CalendarGridWithTasks/Tooltip/index.tsx +27 -27
  19. package/src/components/CalendarGrid/CalendarGridWithTasks/Tooltip/styles.module.scss +9 -9
  20. package/src/components/CalendarGrid/CalendarGridWithTasks/index.tsx +51 -51
  21. package/src/components/CalendarGrid/CalendarGridWithoutTasks/index.tsx +36 -36
  22. package/src/components/CalendarGrid/CalendarGridWithoutTasks/styles.module.scss +11 -11
  23. package/src/components/CalendarGrid/index.tsx +19 -19
  24. package/src/components/CalendarGrid/types.ts +26 -26
  25. package/src/components/Clear/Clear.stories.tsx +16 -16
  26. package/src/components/Clear/index.tsx +12 -12
  27. package/src/components/Clear/styles.module.scss +34 -34
  28. package/src/components/DatePicker/DatePicker.stories.tsx +127 -127
  29. package/src/components/DatePicker/index.tsx +72 -72
  30. package/src/components/DatePicker/styles.module.scss +10 -10
  31. package/src/components/Day/Day.stories.tsx +75 -75
  32. package/src/components/Day/index.tsx +95 -95
  33. package/src/components/Day/styles.module.scss +97 -97
  34. package/src/components/Input/Input.stories.tsx +37 -37
  35. package/src/components/Input/index.tsx +64 -64
  36. package/src/components/Input/styles.module.scss +79 -79
  37. package/src/components/Modal/CrudModal/index.tsx +43 -43
  38. package/src/components/Modal/CrudModal/styles.module.scss +44 -44
  39. package/src/components/Modal/index.tsx +66 -66
  40. package/src/components/Modal/styles.module.scss +40 -40
  41. package/src/components/Modal/types.ts +13 -13
  42. package/src/components/Month/Month.stories.tsx +19 -19
  43. package/src/components/Month/index.tsx +31 -31
  44. package/src/components/Month/styles.module.scss +30 -30
  45. package/src/components/RangePicker/RangePicker.stories.tsx +134 -134
  46. package/src/components/RangePicker/index.tsx +144 -144
  47. package/src/components/RangePicker/styles.module.scss +19 -19
  48. package/src/components/TasksManager/AddModal/index.tsx +62 -62
  49. package/src/components/TasksManager/DeleteModal/index.tsx +22 -22
  50. package/src/components/TasksManager/EditModal/index.tsx +96 -96
  51. package/src/components/TasksManager/index.tsx +112 -112
  52. package/src/components/TasksManager/styles.module.scss +62 -62
  53. package/src/components/Week/Week.stories.tsx +49 -49
  54. package/src/components/Week/index.tsx +68 -68
  55. package/src/components/Week/styles.module.scss +7 -7
  56. package/src/components/WeekDay/WeekDay.stories.tsx +38 -38
  57. package/src/components/WeekDay/index.tsx +35 -35
  58. package/src/components/WeekDay/styles.module.scss +19 -19
  59. package/src/constants/dateMask.ts +23 -23
  60. package/src/constants/firstDayOfWeek.ts +7 -7
  61. package/src/constants/holidays.ts +32 -32
  62. package/src/constants/modes.ts +6 -6
  63. package/src/constants/monthsNames.ts +14 -14
  64. package/src/constants/weekdaysNames.ts +1 -1
  65. package/src/hooks/useCalendar.ts +62 -62
  66. package/src/hooks/useLockBodyScroll.ts +19 -19
  67. package/src/hooks/useModal.ts +45 -45
  68. package/src/hooks/useTooltip.ts +41 -41
  69. package/src/hooks/useValidate.ts +80 -80
  70. package/src/index.ts +15 -15
  71. package/src/services/calendarService.ts +62 -62
  72. package/src/services/decorators/withHolidays.ts +12 -12
  73. package/src/services/decorators/withMinMax.test.ts +77 -77
  74. package/src/services/decorators/withMinMax.ts +19 -19
  75. package/src/services/holidayService.ts +56 -56
  76. package/src/store/localStorage.ts +33 -33
  77. package/src/store/tasksStore.tsx +146 -146
  78. package/src/store/types.ts +22 -22
  79. package/src/stories/Button.stories.ts +54 -0
  80. package/src/stories/Button.tsx +37 -0
  81. package/src/stories/Configure.mdx +388 -0
  82. package/src/stories/Header.stories.ts +34 -0
  83. package/src/stories/Header.tsx +56 -0
  84. package/src/stories/Page.stories.ts +33 -0
  85. package/src/stories/Page.tsx +73 -0
  86. package/src/stories/assets/accessibility.png +0 -0
  87. package/src/stories/assets/accessibility.svg +1 -0
  88. package/src/stories/assets/addon-library.png +0 -0
  89. package/src/stories/assets/assets.png +0 -0
  90. package/src/stories/assets/avif-test-image.avif +0 -0
  91. package/src/stories/assets/context.png +0 -0
  92. package/src/stories/assets/discord.svg +1 -0
  93. package/src/stories/assets/docs.png +0 -0
  94. package/src/stories/assets/figma-plugin.png +0 -0
  95. package/src/stories/assets/github.svg +1 -0
  96. package/src/stories/assets/share.png +0 -0
  97. package/src/stories/assets/styling.png +0 -0
  98. package/src/stories/assets/testing.png +0 -0
  99. package/src/stories/assets/theming.png +0 -0
  100. package/src/stories/assets/tutorials.svg +1 -0
  101. package/src/stories/assets/youtube.svg +1 -0
  102. package/src/stories/button.css +30 -0
  103. package/src/stories/header.css +32 -0
  104. package/src/stories/page.css +68 -0
  105. package/src/styles/_border.scss +9 -9
  106. package/src/styles/_colors.scss +53 -53
  107. package/src/styles/_gap.scss +4 -4
  108. package/src/styles/_globals.scss +61 -61
  109. package/src/styles/_grid.scss +9 -9
  110. package/src/styles/_mixins.scss +6 -6
  111. package/src/styles/_reset.scss +98 -98
  112. package/src/styles/_theme-mixins.scss +51 -51
  113. package/src/styles/_typography.scss +10 -10
  114. package/src/styles/_variables.scss +8 -8
  115. package/src/styles/main.scss +3 -3
  116. package/src/types/types.d.ts +15 -15
  117. package/src/utils/calendar.test.ts +154 -154
  118. package/src/utils/calendar.ts +82 -82
  119. package/src/utils/controlDate.ts +3 -3
  120. package/src/utils/dateChecks.test.ts +216 -216
  121. package/src/utils/dateChecks.ts +75 -75
  122. package/src/utils/formatDate.ts +27 -27
  123. package/src/utils/schema.test.ts +40 -40
  124. package/src/utils/schema.ts +8 -8
  125. package/src/utils/weekdayOrder.test.ts +11 -11
  126. package/src/utils/weekdayOrder.ts +7 -7
  127. package/vitest.config.ts +38 -38
  128. package/vitest.shims.d.ts +1 -1
@@ -1,127 +1,127 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- import { DatePicker } from './index';
3
- import { setControlDate } from '../../utils/controlDate';
4
-
5
- const meta: Meta<typeof DatePicker> = {
6
- component: DatePicker,
7
- parameters: {
8
- layout: 'centered',
9
- },
10
- argTypes: {
11
- monthDate: { control: 'date' },
12
- selectedDate: { control: 'date' },
13
- minDate: { control: 'date' },
14
- maxDate: { control: 'date' },
15
- firstDayOfWeek: {
16
- control: 'select',
17
- options: [0, 1],
18
- },
19
- },
20
- };
21
-
22
- export default meta;
23
- type Story = StoryObj<typeof DatePicker>;
24
-
25
- export const Default: Story = {
26
- args: {
27
- monthDate: new Date(2026, 7, 1),
28
- firstDayOfWeek: 1,
29
- selectedDate: new Date(2026, 7, 15),
30
- },
31
- render: (args) => (
32
- <DatePicker
33
- {...args}
34
- monthDate={new Date(args.monthDate)}
35
- selectedDate={setControlDate(args.selectedDate)}
36
- minDate={setControlDate(args.minDate)}
37
- maxDate={setControlDate(args.maxDate)}
38
- />
39
- ),
40
- };
41
-
42
- export const WithTasks: Story = {
43
- args: {
44
- monthDate: new Date(2026, 7, 25),
45
- firstDayOfWeek: 1,
46
- enableTasks: true,
47
- },
48
- render: (args) => (
49
- <DatePicker
50
- {...args}
51
- monthDate={new Date(args.monthDate)}
52
- selectedDate={setControlDate(args.selectedDate)}
53
- minDate={setControlDate(args.minDate)}
54
- maxDate={setControlDate(args.maxDate)}
55
- />
56
- ),
57
- };
58
-
59
- export const HideWeekends: Story = {
60
- args: {
61
- monthDate: new Date(2026, 8, 7),
62
- firstDayOfWeek: 1,
63
- hideWeekends: true,
64
- },
65
- render: (args) => (
66
- <DatePicker
67
- {...args}
68
- monthDate={new Date(args.monthDate)}
69
- selectedDate={setControlDate(args.selectedDate)}
70
- minDate={setControlDate(args.minDate)}
71
- maxDate={setControlDate(args.maxDate)}
72
- />
73
- ),
74
- };
75
-
76
- export const ShowHolidays: Story = {
77
- args: {
78
- monthDate: new Date(2025, 0, 3),
79
- firstDayOfWeek: 1,
80
- showHolidays: true,
81
- },
82
- render: (args) => (
83
- <DatePicker
84
- {...args}
85
- monthDate={new Date(args.monthDate)}
86
- selectedDate={setControlDate(args.selectedDate)}
87
- minDate={setControlDate(args.minDate)}
88
- maxDate={setControlDate(args.maxDate)}
89
- />
90
- ),
91
- };
92
-
93
- export const WeekMode: Story = {
94
- args: {
95
- monthDate: new Date(2025, 0, 31),
96
- firstDayOfWeek: 1,
97
- showHolidays: true,
98
- mode: 'week',
99
- },
100
- render: (args) => (
101
- <DatePicker
102
- {...args}
103
- monthDate={new Date(args.monthDate)}
104
- selectedDate={setControlDate(args.selectedDate)}
105
- minDate={setControlDate(args.minDate)}
106
- maxDate={setControlDate(args.maxDate)}
107
- />
108
- ),
109
- };
110
-
111
- export const WithMinMaxDates: Story = {
112
- args: {
113
- monthDate: new Date(2026, 7, 1),
114
- firstDayOfWeek: 1,
115
- minDate: new Date(2026, 7, 10),
116
- maxDate: new Date(2026, 7, 20),
117
- },
118
- render: (args) => (
119
- <DatePicker
120
- {...args}
121
- monthDate={new Date(args.monthDate)}
122
- selectedDate={setControlDate(args.selectedDate)}
123
- minDate={setControlDate(args.minDate)}
124
- maxDate={setControlDate(args.maxDate)}
125
- />
126
- ),
127
- };
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { DatePicker } from './index';
3
+ import { setControlDate } from '../../utils/controlDate';
4
+
5
+ const meta: Meta<typeof DatePicker> = {
6
+ component: DatePicker,
7
+ parameters: {
8
+ layout: 'centered',
9
+ },
10
+ argTypes: {
11
+ monthDate: { control: 'date' },
12
+ selectedDate: { control: 'date' },
13
+ minDate: { control: 'date' },
14
+ maxDate: { control: 'date' },
15
+ firstDayOfWeek: {
16
+ control: 'select',
17
+ options: [0, 1],
18
+ },
19
+ },
20
+ };
21
+
22
+ export default meta;
23
+ type Story = StoryObj<typeof DatePicker>;
24
+
25
+ export const Default: Story = {
26
+ args: {
27
+ monthDate: new Date(2026, 7, 1),
28
+ firstDayOfWeek: 1,
29
+ selectedDate: new Date(2026, 7, 15),
30
+ },
31
+ render: (args) => (
32
+ <DatePicker
33
+ {...args}
34
+ monthDate={new Date(args.monthDate)}
35
+ selectedDate={setControlDate(args.selectedDate)}
36
+ minDate={setControlDate(args.minDate)}
37
+ maxDate={setControlDate(args.maxDate)}
38
+ />
39
+ ),
40
+ };
41
+
42
+ export const WithTasks: Story = {
43
+ args: {
44
+ monthDate: new Date(2026, 7, 25),
45
+ firstDayOfWeek: 1,
46
+ enableTasks: true,
47
+ },
48
+ render: (args) => (
49
+ <DatePicker
50
+ {...args}
51
+ monthDate={new Date(args.monthDate)}
52
+ selectedDate={setControlDate(args.selectedDate)}
53
+ minDate={setControlDate(args.minDate)}
54
+ maxDate={setControlDate(args.maxDate)}
55
+ />
56
+ ),
57
+ };
58
+
59
+ export const HideWeekends: Story = {
60
+ args: {
61
+ monthDate: new Date(2026, 8, 7),
62
+ firstDayOfWeek: 1,
63
+ hideWeekends: true,
64
+ },
65
+ render: (args) => (
66
+ <DatePicker
67
+ {...args}
68
+ monthDate={new Date(args.monthDate)}
69
+ selectedDate={setControlDate(args.selectedDate)}
70
+ minDate={setControlDate(args.minDate)}
71
+ maxDate={setControlDate(args.maxDate)}
72
+ />
73
+ ),
74
+ };
75
+
76
+ export const ShowHolidays: Story = {
77
+ args: {
78
+ monthDate: new Date(2025, 0, 3),
79
+ firstDayOfWeek: 1,
80
+ showHolidays: true,
81
+ },
82
+ render: (args) => (
83
+ <DatePicker
84
+ {...args}
85
+ monthDate={new Date(args.monthDate)}
86
+ selectedDate={setControlDate(args.selectedDate)}
87
+ minDate={setControlDate(args.minDate)}
88
+ maxDate={setControlDate(args.maxDate)}
89
+ />
90
+ ),
91
+ };
92
+
93
+ export const WeekMode: Story = {
94
+ args: {
95
+ monthDate: new Date(2025, 0, 31),
96
+ firstDayOfWeek: 1,
97
+ showHolidays: true,
98
+ mode: 'week',
99
+ },
100
+ render: (args) => (
101
+ <DatePicker
102
+ {...args}
103
+ monthDate={new Date(args.monthDate)}
104
+ selectedDate={setControlDate(args.selectedDate)}
105
+ minDate={setControlDate(args.minDate)}
106
+ maxDate={setControlDate(args.maxDate)}
107
+ />
108
+ ),
109
+ };
110
+
111
+ export const WithMinMaxDates: Story = {
112
+ args: {
113
+ monthDate: new Date(2026, 7, 1),
114
+ firstDayOfWeek: 1,
115
+ minDate: new Date(2026, 7, 10),
116
+ maxDate: new Date(2026, 7, 20),
117
+ },
118
+ render: (args) => (
119
+ <DatePicker
120
+ {...args}
121
+ monthDate={new Date(args.monthDate)}
122
+ selectedDate={setControlDate(args.selectedDate)}
123
+ minDate={setControlDate(args.minDate)}
124
+ maxDate={setControlDate(args.maxDate)}
125
+ />
126
+ ),
127
+ };
@@ -1,72 +1,72 @@
1
- import { ChangeEvent, KeyboardEvent, Ref } from 'react';
2
-
3
- import { useValidate } from '@/hooks/useValidate';
4
-
5
- import { BaseCalendar } from '../BaseCalendar';
6
- import { BaseCalendarProps, CalendarProps } from '../CalendarGrid/types';
7
- import { Input } from '../Input';
8
- import styles from './styles.module.scss';
9
-
10
- export interface DatePickerProps
11
- extends BaseCalendarProps, Pick<CalendarProps, 'selectedDate'> {
12
- onChange?: (date: Date | undefined) => void;
13
- }
14
-
15
- export const DatePicker = ({
16
- selectedDate,
17
- monthDate = new Date(),
18
- onChange,
19
- ...props
20
- }: DatePickerProps) => {
21
- const {
22
- currentDate,
23
- value,
24
- handleDateSelect,
25
- error,
26
- ref,
27
- handleDateValidation,
28
- handleClearInput,
29
- } = useValidate(selectedDate);
30
-
31
- const handleDateSelectAndExternalUpdate = (
32
- e: React.MouseEvent<HTMLButtonElement>,
33
- date: Date
34
- ) => {
35
- handleDateSelect(date);
36
- if (onChange) {
37
- onChange(date);
38
- }
39
- };
40
-
41
- const handleDateChange = (e: ChangeEvent<HTMLInputElement>) => {
42
- handleDateValidation(e.target.value);
43
- };
44
-
45
- const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {
46
- if (e.key === 'Enter') {
47
- handleDateValidation(e.currentTarget.value);
48
- }
49
- };
50
-
51
- return (
52
- <div className={styles.datepicker}>
53
- <Input
54
- isDateInput
55
- label="Date"
56
- value={value}
57
- ref={ref as Ref<HTMLInputElement>}
58
- placeholder="dd/mm/yyyy"
59
- onBlur={handleDateChange}
60
- onReset={handleClearInput}
61
- onKeyDown={handleKeyDown}
62
- error={error}
63
- />
64
- <BaseCalendar
65
- selectedDate={currentDate}
66
- onDateClick={handleDateSelectAndExternalUpdate}
67
- monthDate={currentDate ?? monthDate}
68
- {...props}
69
- />
70
- </div>
71
- );
72
- };
1
+ import { ChangeEvent, KeyboardEvent, Ref } from 'react';
2
+
3
+ import { useValidate } from '@/hooks/useValidate';
4
+
5
+ import { BaseCalendar } from '../BaseCalendar';
6
+ import { BaseCalendarProps, CalendarProps } from '../CalendarGrid/types';
7
+ import { Input } from '../Input';
8
+ import styles from './styles.module.scss';
9
+
10
+ export interface DatePickerProps
11
+ extends BaseCalendarProps, Pick<CalendarProps, 'selectedDate'> {
12
+ onChange?: (date: Date | undefined) => void;
13
+ }
14
+
15
+ export const DatePicker = ({
16
+ selectedDate,
17
+ monthDate = new Date(),
18
+ onChange,
19
+ ...props
20
+ }: DatePickerProps) => {
21
+ const {
22
+ currentDate,
23
+ value,
24
+ handleDateSelect,
25
+ error,
26
+ ref,
27
+ handleDateValidation,
28
+ handleClearInput,
29
+ } = useValidate(selectedDate);
30
+
31
+ const handleDateSelectAndExternalUpdate = (
32
+ e: React.MouseEvent<HTMLButtonElement>,
33
+ date: Date
34
+ ) => {
35
+ handleDateSelect(date);
36
+ if (onChange) {
37
+ onChange(date);
38
+ }
39
+ };
40
+
41
+ const handleDateChange = (e: ChangeEvent<HTMLInputElement>) => {
42
+ handleDateValidation(e.target.value);
43
+ };
44
+
45
+ const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {
46
+ if (e.key === 'Enter') {
47
+ handleDateValidation(e.currentTarget.value);
48
+ }
49
+ };
50
+
51
+ return (
52
+ <div className={styles.datepicker}>
53
+ <Input
54
+ isDateInput
55
+ label="Date"
56
+ value={value}
57
+ ref={ref as Ref<HTMLInputElement>}
58
+ placeholder="dd/mm/yyyy"
59
+ onBlur={handleDateChange}
60
+ onReset={handleClearInput}
61
+ onKeyDown={handleKeyDown}
62
+ error={error}
63
+ />
64
+ <BaseCalendar
65
+ selectedDate={currentDate}
66
+ onDateClick={handleDateSelectAndExternalUpdate}
67
+ monthDate={currentDate ?? monthDate}
68
+ {...props}
69
+ />
70
+ </div>
71
+ );
72
+ };
@@ -1,10 +1,10 @@
1
- .datepicker {
2
- display: flex;
3
- flex-direction: column;
4
- gap: $gap-8;
5
- padding: $gap-8;
6
-
7
- @include themify-modules($themes) {
8
- background-color: themed('background');
9
- }
10
- }
1
+ .datepicker {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: $gap-8;
5
+ padding: $gap-8;
6
+
7
+ @include themify-modules($themes) {
8
+ background-color: themed('background');
9
+ }
10
+ }
@@ -1,75 +1,75 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- import { Day } from '.';
3
-
4
- const meta: Meta<typeof Day> = {
5
- component: Day,
6
- parameters: {
7
- layout: 'centered',
8
- },
9
- };
10
-
11
- export default meta;
12
-
13
- type Story = StoryObj<typeof Day>;
14
-
15
- export const Today: Story = {
16
- args: {
17
- date: new Date(),
18
- },
19
- };
20
-
21
- export const Selected: Story = {
22
- args: {
23
- date: new Date(2026, 7, 25),
24
- isSelected: true,
25
- },
26
- };
27
-
28
- export const Disabled: Story = {
29
- args: {
30
- date: new Date(2026, 7, 25),
31
- isDisabled: true,
32
- },
33
- };
34
-
35
- export const Holiday: Story = {
36
- args: {
37
- date: new Date(2026, 7, 25),
38
- isHoliday: true,
39
- },
40
- };
41
-
42
- export const HasTasks: Story = {
43
- args: {
44
- date: new Date(2026, 7, 25),
45
- hasTasks: true,
46
- },
47
- };
48
-
49
- export const RangeStart: Story = {
50
- args: {
51
- date: new Date(2026, 7, 25),
52
- isRangeStart: true,
53
- },
54
- };
55
-
56
- export const RangeMiddle: Story = {
57
- args: {
58
- date: new Date(2026, 7, 25),
59
- isRangeMiddle: true,
60
- },
61
- };
62
-
63
- export const RangeEnd: Story = {
64
- args: {
65
- date: new Date(2026, 7, 25),
66
- isRangeEnd: true,
67
- },
68
- };
69
-
70
- export const TodayAndHasTasks: Story = {
71
- args: {
72
- date: new Date(),
73
- hasTasks: true,
74
- },
75
- };
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { Day } from '.';
3
+
4
+ const meta: Meta<typeof Day> = {
5
+ component: Day,
6
+ parameters: {
7
+ layout: 'centered',
8
+ },
9
+ };
10
+
11
+ export default meta;
12
+
13
+ type Story = StoryObj<typeof Day>;
14
+
15
+ export const Today: Story = {
16
+ args: {
17
+ date: new Date(),
18
+ },
19
+ };
20
+
21
+ export const Selected: Story = {
22
+ args: {
23
+ date: new Date(2026, 7, 25),
24
+ isSelected: true,
25
+ },
26
+ };
27
+
28
+ export const Disabled: Story = {
29
+ args: {
30
+ date: new Date(2026, 7, 25),
31
+ isDisabled: true,
32
+ },
33
+ };
34
+
35
+ export const Holiday: Story = {
36
+ args: {
37
+ date: new Date(2026, 7, 25),
38
+ isHoliday: true,
39
+ },
40
+ };
41
+
42
+ export const HasTasks: Story = {
43
+ args: {
44
+ date: new Date(2026, 7, 25),
45
+ hasTasks: true,
46
+ },
47
+ };
48
+
49
+ export const RangeStart: Story = {
50
+ args: {
51
+ date: new Date(2026, 7, 25),
52
+ isRangeStart: true,
53
+ },
54
+ };
55
+
56
+ export const RangeMiddle: Story = {
57
+ args: {
58
+ date: new Date(2026, 7, 25),
59
+ isRangeMiddle: true,
60
+ },
61
+ };
62
+
63
+ export const RangeEnd: Story = {
64
+ args: {
65
+ date: new Date(2026, 7, 25),
66
+ isRangeEnd: true,
67
+ },
68
+ };
69
+
70
+ export const TodayAndHasTasks: Story = {
71
+ args: {
72
+ date: new Date(),
73
+ hasTasks: true,
74
+ },
75
+ };