@proyecto-viviana/solid-stately 0.1.5 → 0.2.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 (217) hide show
  1. package/{src → dist}/autocomplete/createAutocompleteState.d.ts +0 -1
  2. package/{src → dist}/autocomplete/index.d.ts +0 -1
  3. package/{src → dist}/calendar/createCalendarState.d.ts +0 -1
  4. package/{src → dist}/calendar/createDateFieldState.d.ts +0 -1
  5. package/{src → dist}/calendar/createRangeCalendarState.d.ts +0 -1
  6. package/{src → dist}/calendar/createTimeFieldState.d.ts +0 -1
  7. package/{src → dist}/calendar/index.d.ts +0 -1
  8. package/{src → dist}/checkbox/createCheckboxGroupState.d.ts +0 -1
  9. package/{src → dist}/checkbox/index.d.ts +0 -1
  10. package/{src → dist}/collections/ListCollection.d.ts +0 -1
  11. package/{src → dist}/collections/createListState.d.ts +0 -1
  12. package/{src → dist}/collections/createMenuState.d.ts +0 -1
  13. package/{src → dist}/collections/createSelectionState.d.ts +0 -1
  14. package/{src → dist}/collections/index.d.ts +0 -1
  15. package/{src → dist}/collections/types.d.ts +0 -1
  16. package/{src → dist}/color/Color.d.ts +0 -1
  17. package/{src → dist}/color/createColorAreaState.d.ts +0 -1
  18. package/{src → dist}/color/createColorFieldState.d.ts +0 -1
  19. package/{src → dist}/color/createColorSliderState.d.ts +0 -1
  20. package/{src → dist}/color/createColorWheelState.d.ts +0 -1
  21. package/{src → dist}/color/index.d.ts +0 -1
  22. package/{src → dist}/color/types.d.ts +0 -1
  23. package/{src → dist}/combobox/createComboBoxState.d.ts +0 -1
  24. package/{src → dist}/combobox/index.d.ts +0 -1
  25. package/{src → dist}/disclosure/createDisclosureState.d.ts +0 -1
  26. package/{src → dist}/disclosure/index.d.ts +0 -1
  27. package/{src → dist}/dnd/createDragState.d.ts +0 -1
  28. package/{src → dist}/dnd/createDraggableCollectionState.d.ts +0 -1
  29. package/{src → dist}/dnd/createDropState.d.ts +0 -1
  30. package/{src → dist}/dnd/createDroppableCollectionState.d.ts +0 -1
  31. package/{src → dist}/dnd/index.d.ts +0 -1
  32. package/{src → dist}/dnd/types.d.ts +0 -1
  33. package/{src → dist}/form/createFormValidationState.d.ts +0 -1
  34. package/{src → dist}/form/index.d.ts +0 -1
  35. package/{src → dist}/grid/createGridState.d.ts +0 -1
  36. package/{src → dist}/grid/index.d.ts +0 -1
  37. package/{src → dist}/grid/types.d.ts +0 -1
  38. package/dist/index.d.ts +25 -3363
  39. package/dist/index.js +2 -2
  40. package/dist/index.js.map +7 -1
  41. package/{src → dist}/numberfield/createNumberFieldState.d.ts +0 -1
  42. package/{src → dist}/numberfield/index.d.ts +0 -1
  43. package/{src → dist}/overlays/createOverlayTriggerState.d.ts +0 -1
  44. package/{src → dist}/overlays/index.d.ts +0 -1
  45. package/{src → dist}/radio/createRadioGroupState.d.ts +0 -1
  46. package/{src → dist}/radio/index.d.ts +0 -1
  47. package/{src → dist}/searchfield/createSearchFieldState.d.ts +0 -1
  48. package/{src → dist}/searchfield/index.d.ts +0 -1
  49. package/{src → dist}/select/createSelectState.d.ts +0 -1
  50. package/{src → dist}/select/index.d.ts +0 -1
  51. package/{src → dist}/slider/createSliderState.d.ts +0 -1
  52. package/{src → dist}/slider/index.d.ts +0 -1
  53. package/{src → dist}/ssr/index.d.ts +0 -1
  54. package/{src → dist}/table/TableCollection.d.ts +0 -1
  55. package/{src → dist}/table/createTableState.d.ts +0 -1
  56. package/{src → dist}/table/index.d.ts +0 -1
  57. package/{src → dist}/table/types.d.ts +0 -1
  58. package/{src → dist}/tabs/createTabListState.d.ts +0 -1
  59. package/{src → dist}/tabs/index.d.ts +0 -1
  60. package/{src → dist}/textfield/createTextFieldState.d.ts +0 -1
  61. package/{src → dist}/textfield/index.d.ts +0 -1
  62. package/{src → dist}/toast/createToastState.d.ts +0 -1
  63. package/{src → dist}/toast/index.d.ts +0 -1
  64. package/{src → dist}/toggle/createToggleState.d.ts +0 -1
  65. package/{src → dist}/toggle/index.d.ts +0 -1
  66. package/{src → dist}/tooltip/createTooltipTriggerState.d.ts +0 -1
  67. package/{src → dist}/tooltip/index.d.ts +0 -1
  68. package/{src → dist}/tree/TreeCollection.d.ts +0 -1
  69. package/{src → dist}/tree/createTreeState.d.ts +0 -1
  70. package/{src → dist}/tree/index.d.ts +0 -1
  71. package/{src → dist}/tree/types.d.ts +0 -1
  72. package/{src → dist}/utils/reactivity.d.ts +0 -1
  73. package/package.json +5 -7
  74. package/src/autocomplete/createAutocompleteState.d.ts.map +0 -1
  75. package/src/autocomplete/createAutocompleteState.ts +0 -90
  76. package/src/autocomplete/index.d.ts.map +0 -1
  77. package/src/autocomplete/index.ts +0 -5
  78. package/src/calendar/createCalendarState.d.ts.map +0 -1
  79. package/src/calendar/createCalendarState.ts +0 -461
  80. package/src/calendar/createDateFieldState.d.ts.map +0 -1
  81. package/src/calendar/createDateFieldState.ts +0 -562
  82. package/src/calendar/createRangeCalendarState.d.ts.map +0 -1
  83. package/src/calendar/createRangeCalendarState.ts +0 -535
  84. package/src/calendar/createTimeFieldState.d.ts.map +0 -1
  85. package/src/calendar/createTimeFieldState.ts +0 -483
  86. package/src/calendar/index.d.ts.map +0 -1
  87. package/src/calendar/index.ts +0 -81
  88. package/src/checkbox/createCheckboxGroupState.d.ts.map +0 -1
  89. package/src/checkbox/createCheckboxGroupState.ts +0 -193
  90. package/src/checkbox/index.d.ts.map +0 -1
  91. package/src/checkbox/index.ts +0 -5
  92. package/src/collections/ListCollection.d.ts.map +0 -1
  93. package/src/collections/ListCollection.ts +0 -146
  94. package/src/collections/createListState.d.ts.map +0 -1
  95. package/src/collections/createListState.ts +0 -264
  96. package/src/collections/createMenuState.d.ts.map +0 -1
  97. package/src/collections/createMenuState.ts +0 -106
  98. package/src/collections/createSelectionState.d.ts.map +0 -1
  99. package/src/collections/createSelectionState.ts +0 -336
  100. package/src/collections/index.d.ts.map +0 -1
  101. package/src/collections/index.ts +0 -46
  102. package/src/collections/types.d.ts.map +0 -1
  103. package/src/collections/types.ts +0 -169
  104. package/src/color/Color.d.ts.map +0 -1
  105. package/src/color/Color.ts +0 -951
  106. package/src/color/createColorAreaState.d.ts.map +0 -1
  107. package/src/color/createColorAreaState.ts +0 -293
  108. package/src/color/createColorFieldState.d.ts.map +0 -1
  109. package/src/color/createColorFieldState.ts +0 -292
  110. package/src/color/createColorSliderState.d.ts.map +0 -1
  111. package/src/color/createColorSliderState.ts +0 -241
  112. package/src/color/createColorWheelState.d.ts.map +0 -1
  113. package/src/color/createColorWheelState.ts +0 -211
  114. package/src/color/index.d.ts.map +0 -1
  115. package/src/color/index.ts +0 -47
  116. package/src/color/types.d.ts.map +0 -1
  117. package/src/color/types.ts +0 -127
  118. package/src/combobox/createComboBoxState.d.ts.map +0 -1
  119. package/src/combobox/createComboBoxState.ts +0 -703
  120. package/src/combobox/index.d.ts.map +0 -1
  121. package/src/combobox/index.ts +0 -13
  122. package/src/disclosure/createDisclosureState.d.ts.map +0 -1
  123. package/src/disclosure/createDisclosureState.ts +0 -193
  124. package/src/disclosure/index.d.ts.map +0 -1
  125. package/src/disclosure/index.ts +0 -9
  126. package/src/dnd/createDragState.d.ts.map +0 -1
  127. package/src/dnd/createDragState.ts +0 -153
  128. package/src/dnd/createDraggableCollectionState.d.ts.map +0 -1
  129. package/src/dnd/createDraggableCollectionState.ts +0 -165
  130. package/src/dnd/createDropState.d.ts.map +0 -1
  131. package/src/dnd/createDropState.ts +0 -212
  132. package/src/dnd/createDroppableCollectionState.d.ts.map +0 -1
  133. package/src/dnd/createDroppableCollectionState.ts +0 -357
  134. package/src/dnd/index.d.ts.map +0 -1
  135. package/src/dnd/index.ts +0 -76
  136. package/src/dnd/types.d.ts.map +0 -1
  137. package/src/dnd/types.ts +0 -317
  138. package/src/form/createFormValidationState.d.ts.map +0 -1
  139. package/src/form/createFormValidationState.ts +0 -389
  140. package/src/form/index.d.ts.map +0 -1
  141. package/src/form/index.ts +0 -15
  142. package/src/grid/createGridState.d.ts.map +0 -1
  143. package/src/grid/createGridState.ts +0 -327
  144. package/src/grid/index.d.ts.map +0 -1
  145. package/src/grid/index.ts +0 -13
  146. package/src/grid/types.d.ts.map +0 -1
  147. package/src/grid/types.ts +0 -179
  148. package/src/index.d.ts +0 -26
  149. package/src/index.d.ts.map +0 -1
  150. package/src/index.ts +0 -383
  151. package/src/numberfield/createNumberFieldState.d.ts.map +0 -1
  152. package/src/numberfield/createNumberFieldState.ts +0 -383
  153. package/src/numberfield/index.d.ts.map +0 -1
  154. package/src/numberfield/index.ts +0 -5
  155. package/src/overlays/createOverlayTriggerState.d.ts.map +0 -1
  156. package/src/overlays/createOverlayTriggerState.ts +0 -67
  157. package/src/overlays/index.d.ts.map +0 -1
  158. package/src/overlays/index.ts +0 -5
  159. package/src/radio/createRadioGroupState.d.ts.map +0 -1
  160. package/src/radio/createRadioGroupState.ts +0 -201
  161. package/src/radio/index.d.ts.map +0 -1
  162. package/src/radio/index.ts +0 -6
  163. package/src/searchfield/createSearchFieldState.d.ts.map +0 -1
  164. package/src/searchfield/createSearchFieldState.ts +0 -62
  165. package/src/searchfield/index.d.ts.map +0 -1
  166. package/src/searchfield/index.ts +0 -5
  167. package/src/select/createSelectState.d.ts.map +0 -1
  168. package/src/select/createSelectState.ts +0 -181
  169. package/src/select/index.d.ts.map +0 -1
  170. package/src/select/index.ts +0 -5
  171. package/src/slider/createSliderState.d.ts.map +0 -1
  172. package/src/slider/createSliderState.ts +0 -211
  173. package/src/slider/index.d.ts.map +0 -1
  174. package/src/slider/index.ts +0 -6
  175. package/src/ssr/index.d.ts.map +0 -1
  176. package/src/ssr/index.ts +0 -41
  177. package/src/table/TableCollection.d.ts.map +0 -1
  178. package/src/table/TableCollection.ts +0 -388
  179. package/src/table/createTableState.d.ts.map +0 -1
  180. package/src/table/createTableState.ts +0 -127
  181. package/src/table/index.d.ts.map +0 -1
  182. package/src/table/index.ts +0 -18
  183. package/src/table/types.d.ts.map +0 -1
  184. package/src/table/types.ts +0 -150
  185. package/src/tabs/createTabListState.d.ts.map +0 -1
  186. package/src/tabs/createTabListState.ts +0 -240
  187. package/src/tabs/index.d.ts.map +0 -1
  188. package/src/tabs/index.ts +0 -7
  189. package/src/textfield/createTextFieldState.d.ts.map +0 -1
  190. package/src/textfield/createTextFieldState.ts +0 -75
  191. package/src/textfield/index.d.ts.map +0 -1
  192. package/src/textfield/index.ts +0 -5
  193. package/src/toast/createToastState.d.ts.map +0 -1
  194. package/src/toast/createToastState.ts +0 -316
  195. package/src/toast/index.d.ts.map +0 -1
  196. package/src/toast/index.ts +0 -11
  197. package/src/toggle/createToggleState.d.ts.map +0 -1
  198. package/src/toggle/createToggleState.ts +0 -94
  199. package/src/toggle/index.d.ts.map +0 -1
  200. package/src/toggle/index.ts +0 -5
  201. package/src/tooltip/createTooltipTriggerState.d.ts.map +0 -1
  202. package/src/tooltip/createTooltipTriggerState.ts +0 -183
  203. package/src/tooltip/index.d.ts.map +0 -1
  204. package/src/tooltip/index.ts +0 -6
  205. package/src/tree/TreeCollection.d.ts.map +0 -1
  206. package/src/tree/TreeCollection.ts +0 -175
  207. package/src/tree/createTreeState.d.ts.map +0 -1
  208. package/src/tree/createTreeState.ts +0 -392
  209. package/src/tree/index.d.ts.map +0 -1
  210. package/src/tree/index.ts +0 -13
  211. package/src/tree/types.d.ts.map +0 -1
  212. package/src/tree/types.ts +0 -174
  213. package/src/utils/index.d.ts +0 -2
  214. package/src/utils/index.d.ts.map +0 -1
  215. package/src/utils/reactivity.d.ts.map +0 -1
  216. package/src/utils/reactivity.ts +0 -36
  217. /package/{src/utils/index.ts → dist/utils/index.d.ts} +0 -0
@@ -1,461 +0,0 @@
1
- /**
2
- * CalendarState for Solid-Stately
3
- *
4
- * Provides state management for calendar components.
5
- * Based on @react-stately/calendar useCalendarState
6
- */
7
-
8
- import { createSignal, createMemo, type Accessor } from 'solid-js';
9
- import {
10
- type CalendarDate,
11
- type DateValue,
12
- today,
13
- getLocalTimeZone,
14
- isSameDay,
15
- isSameMonth,
16
- startOfMonth,
17
- endOfMonth,
18
- startOfWeek,
19
- getWeeksInMonth,
20
- getDayOfWeek,
21
- DateFormatter,
22
- toCalendarDate as intlToCalendarDate,
23
- } from '@internationalized/date';
24
- import { access, type MaybeAccessor } from '../utils';
25
-
26
- // ============================================
27
- // TYPES
28
- // ============================================
29
-
30
- export type ValidationState = 'valid' | 'invalid';
31
-
32
- export interface CalendarStateProps<T extends DateValue = DateValue> {
33
- /** The current value (controlled). */
34
- value?: MaybeAccessor<T | null>;
35
- /** The default value (uncontrolled). */
36
- defaultValue?: T | null;
37
- /** Handler called when the value changes. */
38
- onChange?: (value: T) => void;
39
- /** The minimum allowed date. */
40
- minValue?: MaybeAccessor<DateValue | undefined>;
41
- /** The maximum allowed date. */
42
- maxValue?: MaybeAccessor<DateValue | undefined>;
43
- /** Whether the calendar is disabled. */
44
- isDisabled?: MaybeAccessor<boolean>;
45
- /** Whether the calendar is read-only. */
46
- isReadOnly?: MaybeAccessor<boolean>;
47
- /** Whether dates outside the visible range are automatically focused. */
48
- autoFocus?: boolean;
49
- /** The date that is focused when the calendar first mounts. */
50
- focusedValue?: MaybeAccessor<DateValue | undefined>;
51
- /** The default focused date (uncontrolled). */
52
- defaultFocusedValue?: DateValue;
53
- /** Handler called when the focused date changes. */
54
- onFocusChange?: (date: CalendarDate) => void;
55
- /** The locale to use for formatting. */
56
- locale?: string;
57
- /** Callback that is called for each date in the calendar to determine if it is unavailable. */
58
- isDateUnavailable?: (date: DateValue) => boolean;
59
- /** The number of months to display at once. */
60
- visibleMonths?: number;
61
- /** Whether to automatically focus the calendar when it is mounted. */
62
- autoFocusOnMount?: boolean;
63
- /** Controls which days are disabled. */
64
- isDateDisabled?: (date: DateValue) => boolean;
65
- /** Validation state. */
66
- validationState?: MaybeAccessor<ValidationState | undefined>;
67
- /** Error message. */
68
- errorMessage?: string;
69
- /** The first day of the week (0 = Sunday, 1 = Monday, etc.). */
70
- firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
71
- }
72
-
73
- export interface CalendarState<T extends DateValue = DateValue> {
74
- /** The currently selected date. */
75
- value: Accessor<T | null>;
76
- /** Sets the selected date. */
77
- setValue: (value: T | null) => void;
78
- /** The currently focused date. */
79
- focusedDate: Accessor<CalendarDate>;
80
- /** Sets the focused date. */
81
- setFocusedDate: (date: CalendarDate) => void;
82
- /** Whether the calendar is disabled. */
83
- isDisabled: Accessor<boolean>;
84
- /** Whether the calendar is read-only. */
85
- isReadOnly: Accessor<boolean>;
86
- /** The visible date range (first and last day of visible month(s)). */
87
- visibleRange: Accessor<{ start: CalendarDate; end: CalendarDate }>;
88
- /** The timezone used for date calculations. */
89
- timeZone: string;
90
- /** The validation state. */
91
- validationState: Accessor<ValidationState | undefined>;
92
- /** Whether a date is selected. */
93
- isSelected: (date: DateValue) => boolean;
94
- /** Whether a date is focused. */
95
- isCellFocused: (date: DateValue) => boolean;
96
- /** Whether a date is unavailable. */
97
- isCellUnavailable: (date: DateValue) => boolean;
98
- /** Whether a date is disabled. */
99
- isCellDisabled: (date: DateValue) => boolean;
100
- /** Whether a date is outside the visible range. */
101
- isOutsideVisibleRange: (date: DateValue) => boolean;
102
- /** Whether a date is invalid. */
103
- isInvalid: (date: DateValue) => boolean;
104
- /** Moves focus to the previous page (month). */
105
- focusPreviousPage: () => void;
106
- /** Moves focus to the next page (month). */
107
- focusNextPage: () => void;
108
- /** Moves focus to the previous section (year). */
109
- focusPreviousSection: () => void;
110
- /** Moves focus to the next section (year). */
111
- focusNextSection: () => void;
112
- /** Moves focus to the previous day. */
113
- focusPreviousDay: () => void;
114
- /** Moves focus to the next day. */
115
- focusNextDay: () => void;
116
- /** Moves focus to the previous week. */
117
- focusPreviousWeek: () => void;
118
- /** Moves focus to the next week. */
119
- focusNextWeek: () => void;
120
- /** Moves focus to the start of the month. */
121
- focusPageStart: () => void;
122
- /** Moves focus to the end of the month. */
123
- focusPageEnd: () => void;
124
- /** Selects the focused date. */
125
- selectFocusedDate: () => void;
126
- /** Selects a specific date. */
127
- selectDate: (date: CalendarDate) => void;
128
- /** Whether focus is currently within the calendar. */
129
- isFocused: Accessor<boolean>;
130
- /** Sets whether focus is within the calendar. */
131
- setFocused: (focused: boolean) => void;
132
- /** Gets the dates for a week in the visible range. */
133
- getDatesInWeek: (weekIndex: number, monthStartDate?: CalendarDate) => (CalendarDate | null)[];
134
- /** Gets the number of weeks in a month. */
135
- getWeeksInMonth: (date?: CalendarDate) => number;
136
- /** The week day headers. */
137
- weekDays: Accessor<string[]>;
138
- /** The title for the calendar (formatted month and year). */
139
- title: Accessor<string>;
140
- /** The number of visible months. */
141
- visibleMonths: number;
142
- /** Whether the calendar is paginating (for animations). */
143
- isPaginating: Accessor<boolean>;
144
- }
145
-
146
- // ============================================
147
- // IMPLEMENTATION
148
- // ============================================
149
-
150
- /**
151
- * Provides state management for a calendar component.
152
- */
153
- export function createCalendarState<T extends DateValue = CalendarDate>(
154
- props: CalendarStateProps<T> = {}
155
- ): CalendarState<T> {
156
- const timeZone = getLocalTimeZone();
157
- const locale = props.locale ?? 'en-US';
158
- const visibleMonths = props.visibleMonths ?? 1;
159
-
160
- // Determine the initially focused date
161
- const getInitialFocusedDate = (): CalendarDate => {
162
- const controlledFocused = access(props.focusedValue);
163
- if (controlledFocused) {
164
- return toCalendarDate(controlledFocused);
165
- }
166
- if (props.defaultFocusedValue) {
167
- return toCalendarDate(props.defaultFocusedValue);
168
- }
169
- const controlledValue = access(props.value);
170
- if (controlledValue) {
171
- return toCalendarDate(controlledValue);
172
- }
173
- if (props.defaultValue) {
174
- return toCalendarDate(props.defaultValue);
175
- }
176
- return today(timeZone);
177
- };
178
-
179
- // State signals
180
- const [internalValue, setInternalValue] = createSignal<T | null>(
181
- props.defaultValue ?? null
182
- );
183
- const [focusedDate, setFocusedDateInternal] = createSignal<CalendarDate>(
184
- getInitialFocusedDate()
185
- );
186
- const [isFocused, setFocused] = createSignal(false);
187
- const [isPaginating, setIsPaginating] = createSignal(false);
188
-
189
- // Controlled vs uncontrolled value
190
- const value = createMemo<T | null>(() => {
191
- const controlled = access(props.value);
192
- return controlled !== undefined ? controlled : internalValue();
193
- });
194
-
195
- // Derived states
196
- const isDisabled = createMemo(() => access(props.isDisabled) ?? false);
197
- const isReadOnly = createMemo(() => access(props.isReadOnly) ?? false);
198
- const validationState = createMemo(() => access(props.validationState));
199
-
200
- // Visible range based on focused date
201
- const visibleRange = createMemo(() => {
202
- const focused = focusedDate();
203
- const start = startOfMonth(focused);
204
- let end = endOfMonth(focused);
205
-
206
- // Extend for multiple visible months
207
- for (let i = 1; i < visibleMonths; i++) {
208
- end = endOfMonth(end.add({ months: 1 }));
209
- }
210
-
211
- return { start, end };
212
- });
213
-
214
- // Format week days for headers
215
- const weekDays = createMemo(() => {
216
- const formatter = new DateFormatter(locale, { weekday: 'short' });
217
- const startDay = props.firstDayOfWeek ?? 0;
218
- const days: string[] = [];
219
- const base = today(timeZone);
220
-
221
- // Find the start of the week
222
- const dayOfWeek = getDayOfWeek(base, locale);
223
- const weekStart = base.subtract({ days: (dayOfWeek - startDay + 7) % 7 });
224
-
225
- for (let i = 0; i < 7; i++) {
226
- const day = weekStart.add({ days: i });
227
- days.push(formatter.format(day.toDate(timeZone)));
228
- }
229
-
230
- return days;
231
- });
232
-
233
- // Title (formatted month/year)
234
- const title = createMemo(() => {
235
- const formatter = new DateFormatter(locale, {
236
- month: 'long',
237
- year: 'numeric',
238
- });
239
- return formatter.format(focusedDate().toDate(timeZone));
240
- });
241
-
242
- // Set value with onChange callback
243
- const setValue = (newValue: T | null) => {
244
- if (isDisabled() || isReadOnly()) return;
245
-
246
- const controlled = access(props.value);
247
- if (controlled === undefined) {
248
- setInternalValue(() => newValue);
249
- }
250
-
251
- if (newValue && props.onChange) {
252
- props.onChange(newValue);
253
- }
254
- };
255
-
256
- // Set focused date with constraints
257
- const setFocusedDate = (date: CalendarDate) => {
258
- const minValue = access(props.minValue);
259
- const maxValue = access(props.maxValue);
260
-
261
- let constrained = date;
262
-
263
- if (minValue && date.compare(toCalendarDate(minValue)) < 0) {
264
- constrained = toCalendarDate(minValue);
265
- }
266
- if (maxValue && date.compare(toCalendarDate(maxValue)) > 0) {
267
- constrained = toCalendarDate(maxValue);
268
- }
269
-
270
- setFocusedDateInternal(constrained);
271
- props.onFocusChange?.(constrained);
272
- };
273
-
274
- // Check if a date is selected
275
- const isSelected = (date: DateValue): boolean => {
276
- const v = value();
277
- if (!v) return false;
278
- return isSameDay(toCalendarDate(date), toCalendarDate(v));
279
- };
280
-
281
- // Check if a date is focused
282
- const isCellFocused = (date: DateValue): boolean => {
283
- return isSameDay(toCalendarDate(date), focusedDate());
284
- };
285
-
286
- // Check if a date is unavailable
287
- const isCellUnavailable = (date: DateValue): boolean => {
288
- return props.isDateUnavailable?.(date) ?? false;
289
- };
290
-
291
- // Check if a date is disabled
292
- const isCellDisabled = (date: DateValue): boolean => {
293
- if (isDisabled()) return true;
294
- if (props.isDateDisabled?.(date)) return true;
295
-
296
- const minValue = access(props.minValue);
297
- const maxValue = access(props.maxValue);
298
- const calDate = toCalendarDate(date);
299
-
300
- if (minValue && calDate.compare(toCalendarDate(minValue)) < 0) return true;
301
- if (maxValue && calDate.compare(toCalendarDate(maxValue)) > 0) return true;
302
-
303
- return false;
304
- };
305
-
306
- // Check if a date is outside the visible range
307
- const isOutsideVisibleRange = (date: DateValue): boolean => {
308
- const range = visibleRange();
309
- const calDate = toCalendarDate(date);
310
- return !isSameMonth(calDate, range.start) && !isSameMonth(calDate, range.end);
311
- };
312
-
313
- // Check if a date is invalid
314
- const isInvalid = (date: DateValue): boolean => {
315
- return isCellDisabled(date) || isCellUnavailable(date);
316
- };
317
-
318
- // Navigation methods
319
- const focusPreviousPage = () => {
320
- setIsPaginating(true);
321
- setFocusedDate(focusedDate().subtract({ months: 1 }));
322
- setIsPaginating(false);
323
- };
324
-
325
- const focusNextPage = () => {
326
- setIsPaginating(true);
327
- setFocusedDate(focusedDate().add({ months: 1 }));
328
- setIsPaginating(false);
329
- };
330
-
331
- const focusPreviousSection = () => {
332
- setFocusedDate(focusedDate().subtract({ years: 1 }));
333
- };
334
-
335
- const focusNextSection = () => {
336
- setFocusedDate(focusedDate().add({ years: 1 }));
337
- };
338
-
339
- const focusPreviousDay = () => {
340
- setFocusedDate(focusedDate().subtract({ days: 1 }));
341
- };
342
-
343
- const focusNextDay = () => {
344
- setFocusedDate(focusedDate().add({ days: 1 }));
345
- };
346
-
347
- const focusPreviousWeek = () => {
348
- setFocusedDate(focusedDate().subtract({ weeks: 1 }));
349
- };
350
-
351
- const focusNextWeek = () => {
352
- setFocusedDate(focusedDate().add({ weeks: 1 }));
353
- };
354
-
355
- const focusPageStart = () => {
356
- setFocusedDate(startOfMonth(focusedDate()));
357
- };
358
-
359
- const focusPageEnd = () => {
360
- setFocusedDate(endOfMonth(focusedDate()));
361
- };
362
-
363
- // Selection methods
364
- const selectFocusedDate = () => {
365
- if (isReadOnly() || isDisabled()) return;
366
- const date = focusedDate();
367
- if (!isCellDisabled(date) && !isCellUnavailable(date)) {
368
- setValue(date as unknown as T);
369
- }
370
- };
371
-
372
- const selectDate = (date: CalendarDate) => {
373
- if (isReadOnly() || isDisabled()) return;
374
- if (!isCellDisabled(date) && !isCellUnavailable(date)) {
375
- setValue(date as unknown as T);
376
- setFocusedDate(date);
377
- }
378
- };
379
-
380
- // Get dates in a specific week
381
- const getDatesInWeek = (
382
- weekIndex: number,
383
- monthStartDate?: CalendarDate
384
- ): (CalendarDate | null)[] => {
385
- const startDate = monthStartDate ?? visibleRange().start;
386
-
387
- const monthStart = startOfMonth(startDate);
388
- const weekStart = startOfWeek(monthStart, locale);
389
-
390
- const week: (CalendarDate | null)[] = [];
391
- const firstDayOfWeek = weekStart.add({ weeks: weekIndex });
392
-
393
- for (let i = 0; i < 7; i++) {
394
- const date = firstDayOfWeek.add({ days: i });
395
- // Only include dates that are in the same month
396
- if (isSameMonth(date, startDate)) {
397
- week.push(date);
398
- } else {
399
- week.push(date); // Still include for proper grid alignment
400
- }
401
- }
402
-
403
- return week;
404
- };
405
-
406
- // Get number of weeks in a month
407
- const getWeeksInMonthFn = (date?: CalendarDate): number => {
408
- const monthDate = date ?? focusedDate();
409
- return getWeeksInMonth(monthDate, locale);
410
- };
411
-
412
- return {
413
- value,
414
- setValue,
415
- focusedDate,
416
- setFocusedDate,
417
- isDisabled,
418
- isReadOnly,
419
- visibleRange,
420
- timeZone,
421
- validationState,
422
- isSelected,
423
- isCellFocused,
424
- isCellUnavailable,
425
- isCellDisabled,
426
- isOutsideVisibleRange,
427
- isInvalid,
428
- focusPreviousPage,
429
- focusNextPage,
430
- focusPreviousSection,
431
- focusNextSection,
432
- focusPreviousDay,
433
- focusNextDay,
434
- focusPreviousWeek,
435
- focusNextWeek,
436
- focusPageStart,
437
- focusPageEnd,
438
- selectFocusedDate,
439
- selectDate,
440
- isFocused,
441
- setFocused,
442
- getDatesInWeek,
443
- getWeeksInMonth: getWeeksInMonthFn,
444
- weekDays,
445
- title,
446
- visibleMonths,
447
- isPaginating,
448
- };
449
- }
450
-
451
- // ============================================
452
- // HELPER FUNCTIONS
453
- // ============================================
454
-
455
- /**
456
- * Converts a DateValue to a CalendarDate.
457
- */
458
- function toCalendarDate(date: DateValue): CalendarDate {
459
- // Use the library function to convert
460
- return intlToCalendarDate(date);
461
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"createDateFieldState.d.ts","sourceRoot":"","sources":["createDateFieldState.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAA4B,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,EACL,KAAK,YAAY,EAGjB,KAAK,SAAS,EAMf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAM7D,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,OAAO,GACP,KAAK,GACL,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,KAAK,GACL,cAAc,GACd,SAAS,CAAC;AAEd,MAAM,WAAW,WAAW;IAC1B,2BAA2B;IAC3B,IAAI,EAAE,eAAe,CAAC;IACtB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,UAAU,EAAE,OAAO,CAAC;IACpB,6CAA6C;IAC7C,aAAa,EAAE,OAAO,CAAC;IACvB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAClE,sCAAsC;IACtC,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAChC,wCAAwC;IACxC,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACxB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IACrC,gCAAgC;IAChC,QAAQ,CAAC,EAAE,aAAa,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAChD,gCAAgC;IAChC,QAAQ,CAAC,EAAE,aAAa,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAChD,qCAAqC;IACrC,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,sCAAsC;IACtC,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,qCAAqC;IACrC,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACnD,wDAAwD;IACxD,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;IACpB,qCAAqC;IACrC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,wBAAwB;IACxB,eAAe,CAAC,EAAE,aAAa,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IAC7D,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,4CAA4C;IAC5C,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5C;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC7D,yBAAyB;IACzB,KAAK,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1B,sDAAsD;IACtD,SAAS,EAAE,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACtC,2BAA2B;IAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IACpC,0CAA0C;IAC1C,QAAQ,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,yBAAyB;IACzB,WAAW,EAAE,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,qBAAqB,KAAK,MAAM,CAAC;IACnE,4BAA4B;IAC5B,UAAU,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,4BAA4B;IAC5B,gBAAgB,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAClD,4BAA4B;IAC5B,gBAAgB,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAClD,wBAAwB;IACxB,YAAY,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9C,yCAAyC;IACzC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,qCAAqC;IACrC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9B,sCAAsC;IACtC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9B,qCAAqC;IACrC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9B,4BAA4B;IAC5B,eAAe,EAAE,QAAQ,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IACvD,uBAAuB;IACvB,WAAW,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAClD,oCAAoC;IACpC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7B,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,SAAS,GAAG,YAAY,EACrE,KAAK,GAAE,mBAAmB,CAAC,CAAC,CAAM,GACjC,cAAc,CAAC,CAAC,CAAC,CAkRnB"}