@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,535 +0,0 @@
1
- /**
2
- * RangeCalendarState for Solid-Stately
3
- *
4
- * Provides state management for range calendar components.
5
- * Based on @react-stately/calendar useRangeCalendarState
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
- import type { ValidationState } from './createCalendarState';
26
-
27
- // ============================================
28
- // TYPES
29
- // ============================================
30
-
31
- export interface DateRange {
32
- start: CalendarDate;
33
- end: CalendarDate;
34
- }
35
-
36
- export interface RangeValue<T> {
37
- start: T;
38
- end: T;
39
- }
40
-
41
- export interface RangeCalendarStateProps<T extends DateValue = DateValue> {
42
- /** The current value (controlled). */
43
- value?: MaybeAccessor<RangeValue<T> | null>;
44
- /** The default value (uncontrolled). */
45
- defaultValue?: RangeValue<T> | null;
46
- /** Handler called when the value changes. */
47
- onChange?: (value: RangeValue<T>) => void;
48
- /** The minimum allowed date. */
49
- minValue?: MaybeAccessor<DateValue | undefined>;
50
- /** The maximum allowed date. */
51
- maxValue?: MaybeAccessor<DateValue | undefined>;
52
- /** Whether the calendar is disabled. */
53
- isDisabled?: MaybeAccessor<boolean>;
54
- /** Whether the calendar is read-only. */
55
- isReadOnly?: MaybeAccessor<boolean>;
56
- /** The date that is focused when the calendar first mounts. */
57
- focusedValue?: MaybeAccessor<DateValue | undefined>;
58
- /** The default focused date (uncontrolled). */
59
- defaultFocusedValue?: DateValue;
60
- /** Handler called when the focused date changes. */
61
- onFocusChange?: (date: CalendarDate) => void;
62
- /** The locale to use for formatting. */
63
- locale?: string;
64
- /** Callback to determine if a date is unavailable. */
65
- isDateUnavailable?: (date: DateValue) => boolean;
66
- /** The number of months to display at once. */
67
- visibleMonths?: number;
68
- /** Controls which days are disabled. */
69
- isDateDisabled?: (date: DateValue) => boolean;
70
- /** Validation state. */
71
- validationState?: MaybeAccessor<ValidationState | undefined>;
72
- /** Whether to allow selecting the same date for start and end. */
73
- allowsNonContiguousRanges?: boolean;
74
- /** The first day of the week (0 = Sunday, 1 = Monday, etc.). */
75
- firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
76
- }
77
-
78
- export interface RangeCalendarState<T extends DateValue = DateValue> {
79
- /** The currently selected date range. */
80
- value: Accessor<RangeValue<T> | null>;
81
- /** Sets the selected date range. */
82
- setValue: (value: RangeValue<T> | null) => void;
83
- /** The currently focused date. */
84
- focusedDate: Accessor<CalendarDate>;
85
- /** Sets the focused date. */
86
- setFocusedDate: (date: CalendarDate) => void;
87
- /** The anchor date when selecting a range (first click). */
88
- anchorDate: Accessor<CalendarDate | null>;
89
- /** Sets the anchor date. */
90
- setAnchorDate: (date: CalendarDate | null) => void;
91
- /** The highlighted range during selection. */
92
- highlightedRange: Accessor<RangeValue<CalendarDate> | null>;
93
- /** Whether the calendar is disabled. */
94
- isDisabled: Accessor<boolean>;
95
- /** Whether the calendar is read-only. */
96
- isReadOnly: Accessor<boolean>;
97
- /** The visible date range (first and last day of visible month(s)). */
98
- visibleRange: Accessor<{ start: CalendarDate; end: CalendarDate }>;
99
- /** The timezone used for date calculations. */
100
- timeZone: string;
101
- /** The validation state. */
102
- validationState: Accessor<ValidationState | undefined>;
103
- /** Whether a date is within the selected range. */
104
- isSelected: (date: DateValue) => boolean;
105
- /** Whether a date is the start of the selection. */
106
- isSelectionStart: (date: DateValue) => boolean;
107
- /** Whether a date is the end of the selection. */
108
- isSelectionEnd: (date: DateValue) => boolean;
109
- /** Whether a date is focused. */
110
- isCellFocused: (date: DateValue) => boolean;
111
- /** Whether a date is unavailable. */
112
- isCellUnavailable: (date: DateValue) => boolean;
113
- /** Whether a date is disabled. */
114
- isCellDisabled: (date: DateValue) => boolean;
115
- /** Whether a date is outside the visible range. */
116
- isOutsideVisibleRange: (date: DateValue) => boolean;
117
- /** Whether a date is invalid. */
118
- isInvalid: (date: DateValue) => boolean;
119
- /** Moves focus to the previous page (month). */
120
- focusPreviousPage: () => void;
121
- /** Moves focus to the next page (month). */
122
- focusNextPage: () => void;
123
- /** Moves focus to the previous section (year). */
124
- focusPreviousSection: () => void;
125
- /** Moves focus to the next section (year). */
126
- focusNextSection: () => void;
127
- /** Moves focus to the previous day. */
128
- focusPreviousDay: () => void;
129
- /** Moves focus to the next day. */
130
- focusNextDay: () => void;
131
- /** Moves focus to the previous week. */
132
- focusPreviousWeek: () => void;
133
- /** Moves focus to the next week. */
134
- focusNextWeek: () => void;
135
- /** Moves focus to the start of the month. */
136
- focusPageStart: () => void;
137
- /** Moves focus to the end of the month. */
138
- focusPageEnd: () => void;
139
- /** Selects the focused date. */
140
- selectFocusedDate: () => void;
141
- /** Selects a specific date. */
142
- selectDate: (date: CalendarDate) => void;
143
- /** Whether focus is currently within the calendar. */
144
- isFocused: Accessor<boolean>;
145
- /** Sets whether focus is within the calendar. */
146
- setFocused: (focused: boolean) => void;
147
- /** Gets the dates for a week in the visible range. */
148
- getDatesInWeek: (weekIndex: number, monthStartDate?: CalendarDate) => (CalendarDate | null)[];
149
- /** Gets the number of weeks in a month. */
150
- getWeeksInMonth: (date?: CalendarDate) => number;
151
- /** The week day headers. */
152
- weekDays: Accessor<string[]>;
153
- /** The title for the calendar (formatted month and year). */
154
- title: Accessor<string>;
155
- /** The number of visible months. */
156
- visibleMonths: number;
157
- /** Whether the user is currently selecting a range. */
158
- isDragging: Accessor<boolean>;
159
- /** Sets whether the user is dragging to select. */
160
- setDragging: (dragging: boolean) => void;
161
- }
162
-
163
- // ============================================
164
- // IMPLEMENTATION
165
- // ============================================
166
-
167
- /**
168
- * Provides state management for a range calendar component.
169
- */
170
- export function createRangeCalendarState<T extends DateValue = CalendarDate>(
171
- props: RangeCalendarStateProps<T> = {}
172
- ): RangeCalendarState<T> {
173
- const timeZone = getLocalTimeZone();
174
- const locale = props.locale ?? 'en-US';
175
- const visibleMonths = props.visibleMonths ?? 1;
176
-
177
- // Determine the initially focused date
178
- const getInitialFocusedDate = (): CalendarDate => {
179
- const controlledFocused = access(props.focusedValue);
180
- if (controlledFocused) {
181
- return toCalendarDate(controlledFocused);
182
- }
183
- if (props.defaultFocusedValue) {
184
- return toCalendarDate(props.defaultFocusedValue);
185
- }
186
- const controlledValue = access(props.value);
187
- if (controlledValue?.start) {
188
- return toCalendarDate(controlledValue.start);
189
- }
190
- if (props.defaultValue?.start) {
191
- return toCalendarDate(props.defaultValue.start);
192
- }
193
- return today(timeZone);
194
- };
195
-
196
- // State signals
197
- const [internalValue, setInternalValue] = createSignal<RangeValue<T> | null>(
198
- props.defaultValue ?? null
199
- );
200
- const [focusedDate, setFocusedDateInternal] = createSignal<CalendarDate>(
201
- getInitialFocusedDate()
202
- );
203
- const [anchorDate, setAnchorDate] = createSignal<CalendarDate | null>(null);
204
- const [isFocused, setFocused] = createSignal(false);
205
- const [isDragging, setDragging] = createSignal(false);
206
-
207
- // Controlled vs uncontrolled value
208
- const value = createMemo<RangeValue<T> | null>(() => {
209
- const controlled = access(props.value);
210
- return controlled !== undefined ? controlled : internalValue();
211
- });
212
-
213
- // Derived states
214
- const isDisabled = createMemo(() => access(props.isDisabled) ?? false);
215
- const isReadOnly = createMemo(() => access(props.isReadOnly) ?? false);
216
- const validationState = createMemo(() => access(props.validationState));
217
-
218
- // Highlighted range during selection
219
- const highlightedRange = createMemo<RangeValue<CalendarDate> | null>(() => {
220
- const anchor = anchorDate();
221
- if (!anchor) {
222
- const v = value();
223
- if (v) {
224
- return {
225
- start: toCalendarDate(v.start),
226
- end: toCalendarDate(v.end),
227
- };
228
- }
229
- return null;
230
- }
231
-
232
- const focused = focusedDate();
233
- if (anchor.compare(focused) <= 0) {
234
- return { start: anchor, end: focused };
235
- }
236
- return { start: focused, end: anchor };
237
- });
238
-
239
- // Visible range based on focused date
240
- const visibleRange = createMemo(() => {
241
- const focused = focusedDate();
242
- const start = startOfMonth(focused);
243
- let end = endOfMonth(focused);
244
-
245
- for (let i = 1; i < visibleMonths; i++) {
246
- end = endOfMonth(end.add({ months: 1 }));
247
- }
248
-
249
- return { start, end };
250
- });
251
-
252
- // Format week days for headers
253
- const weekDays = createMemo(() => {
254
- const formatter = new DateFormatter(locale, { weekday: 'short' });
255
- const startDay = props.firstDayOfWeek ?? 0;
256
- const days: string[] = [];
257
- const base = today(timeZone);
258
-
259
- const dayOfWeek = getDayOfWeek(base, locale);
260
- const weekStart = base.subtract({ days: (dayOfWeek - startDay + 7) % 7 });
261
-
262
- for (let i = 0; i < 7; i++) {
263
- const day = weekStart.add({ days: i });
264
- days.push(formatter.format(day.toDate(timeZone)));
265
- }
266
-
267
- return days;
268
- });
269
-
270
- // Title (formatted month/year)
271
- const title = createMemo(() => {
272
- const formatter = new DateFormatter(locale, {
273
- month: 'long',
274
- year: 'numeric',
275
- });
276
- return formatter.format(focusedDate().toDate(timeZone));
277
- });
278
-
279
- // Set value with onChange callback
280
- const setValue = (newValue: RangeValue<T> | null) => {
281
- if (isDisabled() || isReadOnly()) return;
282
-
283
- const controlled = access(props.value);
284
- if (controlled === undefined) {
285
- setInternalValue(() => newValue);
286
- }
287
-
288
- if (newValue && props.onChange) {
289
- props.onChange(newValue);
290
- }
291
- };
292
-
293
- // Set focused date with constraints
294
- const setFocusedDate = (date: CalendarDate) => {
295
- const minValue = access(props.minValue);
296
- const maxValue = access(props.maxValue);
297
-
298
- let constrained = date;
299
-
300
- if (minValue && date.compare(toCalendarDate(minValue)) < 0) {
301
- constrained = toCalendarDate(minValue);
302
- }
303
- if (maxValue && date.compare(toCalendarDate(maxValue)) > 0) {
304
- constrained = toCalendarDate(maxValue);
305
- }
306
-
307
- setFocusedDateInternal(constrained);
308
- props.onFocusChange?.(constrained);
309
- };
310
-
311
- // Check if a date is within the selected range
312
- const isSelected = (date: DateValue): boolean => {
313
- const range = highlightedRange();
314
- if (!range) return false;
315
-
316
- const calDate = toCalendarDate(date);
317
- return (
318
- calDate.compare(range.start) >= 0 && calDate.compare(range.end) <= 0
319
- );
320
- };
321
-
322
- // Check if a date is the start of the selection
323
- const isSelectionStart = (date: DateValue): boolean => {
324
- const range = highlightedRange();
325
- if (!range) return false;
326
- return isSameDay(toCalendarDate(date), range.start);
327
- };
328
-
329
- // Check if a date is the end of the selection
330
- const isSelectionEnd = (date: DateValue): boolean => {
331
- const range = highlightedRange();
332
- if (!range) return false;
333
- return isSameDay(toCalendarDate(date), range.end);
334
- };
335
-
336
- // Check if a date is focused
337
- const isCellFocused = (date: DateValue): boolean => {
338
- return isSameDay(toCalendarDate(date), focusedDate());
339
- };
340
-
341
- // Check if a date is unavailable
342
- const isCellUnavailable = (date: DateValue): boolean => {
343
- return props.isDateUnavailable?.(date) ?? false;
344
- };
345
-
346
- // Check if a date is disabled
347
- const isCellDisabled = (date: DateValue): boolean => {
348
- if (isDisabled()) return true;
349
- if (props.isDateDisabled?.(date)) return true;
350
-
351
- const minValue = access(props.minValue);
352
- const maxValue = access(props.maxValue);
353
- const calDate = toCalendarDate(date);
354
-
355
- if (minValue && calDate.compare(toCalendarDate(minValue)) < 0) return true;
356
- if (maxValue && calDate.compare(toCalendarDate(maxValue)) > 0) return true;
357
-
358
- return false;
359
- };
360
-
361
- // Check if a date is outside the visible range
362
- const isOutsideVisibleRange = (date: DateValue): boolean => {
363
- const range = visibleRange();
364
- const calDate = toCalendarDate(date);
365
- return !isSameMonth(calDate, range.start) && !isSameMonth(calDate, range.end);
366
- };
367
-
368
- // Check if a date is invalid
369
- const isInvalid = (date: DateValue): boolean => {
370
- return isCellDisabled(date) || isCellUnavailable(date);
371
- };
372
-
373
- // Navigation methods
374
- const focusPreviousPage = () => {
375
- setFocusedDate(focusedDate().subtract({ months: 1 }));
376
- };
377
-
378
- const focusNextPage = () => {
379
- setFocusedDate(focusedDate().add({ months: 1 }));
380
- };
381
-
382
- const focusPreviousSection = () => {
383
- setFocusedDate(focusedDate().subtract({ years: 1 }));
384
- };
385
-
386
- const focusNextSection = () => {
387
- setFocusedDate(focusedDate().add({ years: 1 }));
388
- };
389
-
390
- const focusPreviousDay = () => {
391
- setFocusedDate(focusedDate().subtract({ days: 1 }));
392
- };
393
-
394
- const focusNextDay = () => {
395
- setFocusedDate(focusedDate().add({ days: 1 }));
396
- };
397
-
398
- const focusPreviousWeek = () => {
399
- setFocusedDate(focusedDate().subtract({ weeks: 1 }));
400
- };
401
-
402
- const focusNextWeek = () => {
403
- setFocusedDate(focusedDate().add({ weeks: 1 }));
404
- };
405
-
406
- const focusPageStart = () => {
407
- setFocusedDate(startOfMonth(focusedDate()));
408
- };
409
-
410
- const focusPageEnd = () => {
411
- setFocusedDate(endOfMonth(focusedDate()));
412
- };
413
-
414
- // Selection methods
415
- const selectFocusedDate = () => {
416
- if (isReadOnly() || isDisabled()) return;
417
- selectDate(focusedDate());
418
- };
419
-
420
- const selectDate = (date: CalendarDate) => {
421
- if (isReadOnly() || isDisabled()) return;
422
- if (isCellDisabled(date) || isCellUnavailable(date)) return;
423
-
424
- const anchor = anchorDate();
425
-
426
- if (!anchor) {
427
- // First click - set anchor
428
- setAnchorDate(date);
429
- setDragging(true);
430
- } else {
431
- // Second click - complete selection
432
- let start: CalendarDate;
433
- let end: CalendarDate;
434
-
435
- if (date.compare(anchor) < 0) {
436
- start = date;
437
- end = anchor;
438
- } else {
439
- start = anchor;
440
- end = date;
441
- }
442
-
443
- setValue({
444
- start: start as unknown as T,
445
- end: end as unknown as T,
446
- });
447
- setAnchorDate(null);
448
- setDragging(false);
449
- }
450
-
451
- setFocusedDate(date);
452
- };
453
-
454
- // Get dates in a specific week
455
- const getDatesInWeek = (
456
- weekIndex: number,
457
- monthStartDate?: CalendarDate
458
- ): (CalendarDate | null)[] => {
459
- const startDate = monthStartDate ?? visibleRange().start;
460
-
461
- const monthStart = startOfMonth(startDate);
462
- const weekStart = startOfWeek(monthStart, locale);
463
-
464
- const week: (CalendarDate | null)[] = [];
465
- const firstDayOfWeek = weekStart.add({ weeks: weekIndex });
466
-
467
- for (let i = 0; i < 7; i++) {
468
- const date = firstDayOfWeek.add({ days: i });
469
- week.push(date);
470
- }
471
-
472
- return week;
473
- };
474
-
475
- // Get number of weeks in a month
476
- const getWeeksInMonthFn = (date?: CalendarDate): number => {
477
- const monthDate = date ?? focusedDate();
478
- return getWeeksInMonth(monthDate, locale);
479
- };
480
-
481
- return {
482
- value,
483
- setValue,
484
- focusedDate,
485
- setFocusedDate,
486
- anchorDate,
487
- setAnchorDate,
488
- highlightedRange,
489
- isDisabled,
490
- isReadOnly,
491
- visibleRange,
492
- timeZone,
493
- validationState,
494
- isSelected,
495
- isSelectionStart,
496
- isSelectionEnd,
497
- isCellFocused,
498
- isCellUnavailable,
499
- isCellDisabled,
500
- isOutsideVisibleRange,
501
- isInvalid,
502
- focusPreviousPage,
503
- focusNextPage,
504
- focusPreviousSection,
505
- focusNextSection,
506
- focusPreviousDay,
507
- focusNextDay,
508
- focusPreviousWeek,
509
- focusNextWeek,
510
- focusPageStart,
511
- focusPageEnd,
512
- selectFocusedDate,
513
- selectDate,
514
- isFocused,
515
- setFocused,
516
- getDatesInWeek,
517
- getWeeksInMonth: getWeeksInMonthFn,
518
- weekDays,
519
- title,
520
- visibleMonths,
521
- isDragging,
522
- setDragging,
523
- };
524
- }
525
-
526
- // ============================================
527
- // HELPER FUNCTIONS
528
- // ============================================
529
-
530
- /**
531
- * Converts a DateValue to a CalendarDate.
532
- */
533
- function toCalendarDate(date: DateValue): CalendarDate {
534
- return intlToCalendarDate(date);
535
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"createTimeFieldState.d.ts","sourceRoot":"","sources":["createTimeFieldState.ts"],"names":[],"mappings":"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"}