@proyecto-viviana/solid-stately 0.1.4 → 0.2.0
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.
- package/dist/index.js +226 -504
- package/dist/index.jsx +6407 -0
- package/package.json +3 -5
- package/dist/index.js.map +0 -1
- package/src/autocomplete/createAutocompleteState.d.ts +0 -46
- package/src/autocomplete/createAutocompleteState.d.ts.map +0 -1
- package/src/autocomplete/createAutocompleteState.ts +0 -90
- package/src/autocomplete/index.d.ts +0 -2
- package/src/autocomplete/index.d.ts.map +0 -1
- package/src/autocomplete/index.ts +0 -5
- package/src/calendar/createCalendarState.d.ts +0 -130
- package/src/calendar/createCalendarState.d.ts.map +0 -1
- package/src/calendar/createCalendarState.ts +0 -461
- package/src/calendar/createDateFieldState.d.ts +0 -110
- package/src/calendar/createDateFieldState.d.ts.map +0 -1
- package/src/calendar/createDateFieldState.ts +0 -562
- package/src/calendar/createRangeCalendarState.d.ts +0 -146
- package/src/calendar/createRangeCalendarState.d.ts.map +0 -1
- package/src/calendar/createRangeCalendarState.ts +0 -535
- package/src/calendar/createTimeFieldState.d.ts +0 -95
- package/src/calendar/createTimeFieldState.d.ts.map +0 -1
- package/src/calendar/createTimeFieldState.ts +0 -483
- package/src/calendar/index.d.ts +0 -7
- package/src/calendar/index.d.ts.map +0 -1
- package/src/calendar/index.ts +0 -81
- package/src/checkbox/createCheckboxGroupState.d.ts +0 -71
- package/src/checkbox/createCheckboxGroupState.d.ts.map +0 -1
- package/src/checkbox/createCheckboxGroupState.ts +0 -193
- package/src/checkbox/index.d.ts +0 -2
- package/src/checkbox/index.d.ts.map +0 -1
- package/src/checkbox/index.ts +0 -5
- package/src/collections/ListCollection.d.ts +0 -37
- package/src/collections/ListCollection.d.ts.map +0 -1
- package/src/collections/ListCollection.ts +0 -146
- package/src/collections/createListState.d.ts +0 -79
- package/src/collections/createListState.d.ts.map +0 -1
- package/src/collections/createListState.ts +0 -264
- package/src/collections/createMenuState.d.ts +0 -50
- package/src/collections/createMenuState.d.ts.map +0 -1
- package/src/collections/createMenuState.ts +0 -106
- package/src/collections/createSelectionState.d.ts +0 -76
- package/src/collections/createSelectionState.d.ts.map +0 -1
- package/src/collections/createSelectionState.ts +0 -336
- package/src/collections/index.d.ts +0 -6
- package/src/collections/index.d.ts.map +0 -1
- package/src/collections/index.ts +0 -46
- package/src/collections/types.d.ts +0 -147
- package/src/collections/types.d.ts.map +0 -1
- package/src/collections/types.ts +0 -169
- package/src/color/Color.d.ts +0 -28
- package/src/color/Color.d.ts.map +0 -1
- package/src/color/Color.ts +0 -951
- package/src/color/createColorAreaState.d.ts +0 -76
- package/src/color/createColorAreaState.d.ts.map +0 -1
- package/src/color/createColorAreaState.ts +0 -293
- package/src/color/createColorFieldState.d.ts +0 -55
- package/src/color/createColorFieldState.d.ts.map +0 -1
- package/src/color/createColorFieldState.ts +0 -292
- package/src/color/createColorSliderState.d.ts +0 -67
- package/src/color/createColorSliderState.d.ts.map +0 -1
- package/src/color/createColorSliderState.ts +0 -241
- package/src/color/createColorWheelState.d.ts +0 -51
- package/src/color/createColorWheelState.d.ts.map +0 -1
- package/src/color/createColorWheelState.ts +0 -211
- package/src/color/index.d.ts +0 -10
- package/src/color/index.d.ts.map +0 -1
- package/src/color/index.ts +0 -47
- package/src/color/types.d.ts +0 -106
- package/src/color/types.d.ts.map +0 -1
- package/src/color/types.ts +0 -127
- package/src/combobox/createComboBoxState.d.ts +0 -125
- package/src/combobox/createComboBoxState.d.ts.map +0 -1
- package/src/combobox/createComboBoxState.ts +0 -703
- package/src/combobox/index.d.ts +0 -5
- package/src/combobox/index.d.ts.map +0 -1
- package/src/combobox/index.ts +0 -13
- package/src/disclosure/createDisclosureState.d.ts +0 -64
- package/src/disclosure/createDisclosureState.d.ts.map +0 -1
- package/src/disclosure/createDisclosureState.ts +0 -193
- package/src/disclosure/index.d.ts +0 -2
- package/src/disclosure/index.d.ts.map +0 -1
- package/src/disclosure/index.ts +0 -9
- package/src/dnd/createDragState.d.ts +0 -59
- package/src/dnd/createDragState.d.ts.map +0 -1
- package/src/dnd/createDragState.ts +0 -153
- package/src/dnd/createDraggableCollectionState.d.ts +0 -57
- package/src/dnd/createDraggableCollectionState.d.ts.map +0 -1
- package/src/dnd/createDraggableCollectionState.ts +0 -165
- package/src/dnd/createDropState.d.ts +0 -61
- package/src/dnd/createDropState.d.ts.map +0 -1
- package/src/dnd/createDropState.ts +0 -212
- package/src/dnd/createDroppableCollectionState.d.ts +0 -78
- package/src/dnd/createDroppableCollectionState.d.ts.map +0 -1
- package/src/dnd/createDroppableCollectionState.ts +0 -357
- package/src/dnd/index.d.ts +0 -11
- package/src/dnd/index.d.ts.map +0 -1
- package/src/dnd/index.ts +0 -76
- package/src/dnd/types.d.ts +0 -264
- package/src/dnd/types.d.ts.map +0 -1
- package/src/dnd/types.ts +0 -317
- package/src/form/createFormValidationState.d.ts +0 -100
- package/src/form/createFormValidationState.d.ts.map +0 -1
- package/src/form/createFormValidationState.ts +0 -389
- package/src/form/index.d.ts +0 -2
- package/src/form/index.d.ts.map +0 -1
- package/src/form/index.ts +0 -15
- package/src/grid/createGridState.d.ts +0 -12
- package/src/grid/createGridState.d.ts.map +0 -1
- package/src/grid/createGridState.ts +0 -327
- package/src/grid/index.d.ts +0 -7
- package/src/grid/index.d.ts.map +0 -1
- package/src/grid/index.ts +0 -13
- package/src/grid/types.d.ts +0 -156
- package/src/grid/types.d.ts.map +0 -1
- package/src/grid/types.ts +0 -179
- package/src/index.d.ts +0 -26
- package/src/index.d.ts.map +0 -1
- package/src/index.ts +0 -383
- package/src/numberfield/createNumberFieldState.d.ts +0 -65
- package/src/numberfield/createNumberFieldState.d.ts.map +0 -1
- package/src/numberfield/createNumberFieldState.ts +0 -383
- package/src/numberfield/index.d.ts +0 -2
- package/src/numberfield/index.d.ts.map +0 -1
- package/src/numberfield/index.ts +0 -5
- package/src/overlays/createOverlayTriggerState.d.ts +0 -32
- package/src/overlays/createOverlayTriggerState.d.ts.map +0 -1
- package/src/overlays/createOverlayTriggerState.ts +0 -67
- package/src/overlays/index.d.ts +0 -2
- package/src/overlays/index.d.ts.map +0 -1
- package/src/overlays/index.ts +0 -5
- package/src/radio/createRadioGroupState.d.ts +0 -77
- package/src/radio/createRadioGroupState.d.ts.map +0 -1
- package/src/radio/createRadioGroupState.ts +0 -201
- package/src/radio/index.d.ts +0 -2
- package/src/radio/index.d.ts.map +0 -1
- package/src/radio/index.ts +0 -6
- package/src/searchfield/createSearchFieldState.d.ts +0 -25
- package/src/searchfield/createSearchFieldState.d.ts.map +0 -1
- package/src/searchfield/createSearchFieldState.ts +0 -62
- package/src/searchfield/index.d.ts +0 -3
- package/src/searchfield/index.d.ts.map +0 -1
- package/src/searchfield/index.ts +0 -5
- package/src/select/createSelectState.d.ts +0 -73
- package/src/select/createSelectState.d.ts.map +0 -1
- package/src/select/createSelectState.ts +0 -181
- package/src/select/index.d.ts +0 -2
- package/src/select/index.d.ts.map +0 -1
- package/src/select/index.ts +0 -5
- package/src/slider/createSliderState.d.ts +0 -72
- package/src/slider/createSliderState.d.ts.map +0 -1
- package/src/slider/createSliderState.ts +0 -211
- package/src/slider/index.d.ts +0 -3
- package/src/slider/index.d.ts.map +0 -1
- package/src/slider/index.ts +0 -6
- package/src/ssr/index.d.ts +0 -28
- package/src/ssr/index.d.ts.map +0 -1
- package/src/ssr/index.ts +0 -41
- package/src/table/TableCollection.d.ts +0 -52
- package/src/table/TableCollection.d.ts.map +0 -1
- package/src/table/TableCollection.ts +0 -388
- package/src/table/createTableState.d.ts +0 -12
- package/src/table/createTableState.d.ts.map +0 -1
- package/src/table/createTableState.ts +0 -127
- package/src/table/index.d.ts +0 -8
- package/src/table/index.d.ts.map +0 -1
- package/src/table/index.ts +0 -18
- package/src/table/types.d.ts +0 -139
- package/src/table/types.d.ts.map +0 -1
- package/src/table/types.ts +0 -150
- package/src/tabs/createTabListState.d.ts +0 -68
- package/src/tabs/createTabListState.d.ts.map +0 -1
- package/src/tabs/createTabListState.ts +0 -240
- package/src/tabs/index.d.ts +0 -2
- package/src/tabs/index.d.ts.map +0 -1
- package/src/tabs/index.ts +0 -7
- package/src/textfield/createTextFieldState.d.ts +0 -30
- package/src/textfield/createTextFieldState.d.ts.map +0 -1
- package/src/textfield/createTextFieldState.ts +0 -75
- package/src/textfield/index.d.ts +0 -2
- package/src/textfield/index.d.ts.map +0 -1
- package/src/textfield/index.ts +0 -5
- package/src/toast/createToastState.d.ts +0 -118
- package/src/toast/createToastState.d.ts.map +0 -1
- package/src/toast/createToastState.ts +0 -316
- package/src/toast/index.d.ts +0 -2
- package/src/toast/index.d.ts.map +0 -1
- package/src/toast/index.ts +0 -11
- package/src/toggle/createToggleState.d.ts +0 -34
- package/src/toggle/createToggleState.d.ts.map +0 -1
- package/src/toggle/createToggleState.ts +0 -94
- package/src/toggle/index.d.ts +0 -2
- package/src/toggle/index.d.ts.map +0 -1
- package/src/toggle/index.ts +0 -5
- package/src/tooltip/createTooltipTriggerState.d.ts +0 -39
- package/src/tooltip/createTooltipTriggerState.d.ts.map +0 -1
- package/src/tooltip/createTooltipTriggerState.ts +0 -183
- package/src/tooltip/index.d.ts +0 -2
- package/src/tooltip/index.d.ts.map +0 -1
- package/src/tooltip/index.ts +0 -6
- package/src/tree/TreeCollection.d.ts +0 -40
- package/src/tree/TreeCollection.d.ts.map +0 -1
- package/src/tree/TreeCollection.ts +0 -175
- package/src/tree/createTreeState.d.ts +0 -14
- package/src/tree/createTreeState.d.ts.map +0 -1
- package/src/tree/createTreeState.ts +0 -392
- package/src/tree/index.d.ts +0 -7
- package/src/tree/index.d.ts.map +0 -1
- package/src/tree/index.ts +0 -13
- package/src/tree/types.d.ts +0 -157
- package/src/tree/types.d.ts.map +0 -1
- package/src/tree/types.ts +0 -174
- package/src/utils/index.d.ts +0 -2
- package/src/utils/index.d.ts.map +0 -1
- package/src/utils/index.ts +0 -1
- package/src/utils/reactivity.d.ts +0 -28
- package/src/utils/reactivity.d.ts.map +0 -1
- package/src/utils/reactivity.ts +0 -36
|
@@ -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,110 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DateFieldState for Solid-Stately
|
|
3
|
-
*
|
|
4
|
-
* Provides state management for date field components with segment-based editing.
|
|
5
|
-
* Based on @react-stately/datepicker useDateFieldState
|
|
6
|
-
*/
|
|
7
|
-
import { type Accessor } from 'solid-js';
|
|
8
|
-
import { type CalendarDate, type DateValue } from '@internationalized/date';
|
|
9
|
-
import { type MaybeAccessor } from '../utils';
|
|
10
|
-
import type { ValidationState } from './createCalendarState';
|
|
11
|
-
export type DateSegmentType = 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second' | 'dayPeriod' | 'era' | 'timeZoneName' | 'literal';
|
|
12
|
-
export interface DateSegment {
|
|
13
|
-
/** The type of segment. */
|
|
14
|
-
type: DateSegmentType;
|
|
15
|
-
/** The text content of the segment. */
|
|
16
|
-
text: string;
|
|
17
|
-
/** The numeric value of the segment (if applicable). */
|
|
18
|
-
value?: number;
|
|
19
|
-
/** The minimum value for the segment. */
|
|
20
|
-
minValue?: number;
|
|
21
|
-
/** The maximum value for the segment. */
|
|
22
|
-
maxValue?: number;
|
|
23
|
-
/** Whether this segment is editable. */
|
|
24
|
-
isEditable: boolean;
|
|
25
|
-
/** Whether this segment is a placeholder. */
|
|
26
|
-
isPlaceholder: boolean;
|
|
27
|
-
/** A placeholder string for the segment. */
|
|
28
|
-
placeholder: string;
|
|
29
|
-
}
|
|
30
|
-
export interface DateFieldStateProps<T extends DateValue = DateValue> {
|
|
31
|
-
/** The current value (controlled). */
|
|
32
|
-
value?: MaybeAccessor<T | null>;
|
|
33
|
-
/** The default value (uncontrolled). */
|
|
34
|
-
defaultValue?: T | null;
|
|
35
|
-
/** Handler called when the value changes. */
|
|
36
|
-
onChange?: (value: T | null) => void;
|
|
37
|
-
/** The minimum allowed date. */
|
|
38
|
-
minValue?: MaybeAccessor<DateValue | undefined>;
|
|
39
|
-
/** The maximum allowed date. */
|
|
40
|
-
maxValue?: MaybeAccessor<DateValue | undefined>;
|
|
41
|
-
/** Whether the field is disabled. */
|
|
42
|
-
isDisabled?: MaybeAccessor<boolean>;
|
|
43
|
-
/** Whether the field is read-only. */
|
|
44
|
-
isReadOnly?: MaybeAccessor<boolean>;
|
|
45
|
-
/** Whether the field is required. */
|
|
46
|
-
isRequired?: MaybeAccessor<boolean>;
|
|
47
|
-
/** The locale to use for formatting. */
|
|
48
|
-
locale?: string;
|
|
49
|
-
/** The granularity of the date/time (day, hour, minute, second). */
|
|
50
|
-
granularity?: 'day' | 'hour' | 'minute' | 'second';
|
|
51
|
-
/** Whether to show the hour in 12 or 24 hour format. */
|
|
52
|
-
hourCycle?: 12 | 24;
|
|
53
|
-
/** Whether to hide the time zone. */
|
|
54
|
-
hideTimeZone?: boolean;
|
|
55
|
-
/** The placeholder date (determines segment structure). */
|
|
56
|
-
placeholderValue?: DateValue;
|
|
57
|
-
/** Validation state. */
|
|
58
|
-
validationState?: MaybeAccessor<ValidationState | undefined>;
|
|
59
|
-
/** Description text. */
|
|
60
|
-
description?: string;
|
|
61
|
-
/** Error message. */
|
|
62
|
-
errorMessage?: string;
|
|
63
|
-
/** Whether dates outside the min/max range are allowed. */
|
|
64
|
-
allowsNonContiguousRanges?: boolean;
|
|
65
|
-
/** Whether to create a date or datetime. */
|
|
66
|
-
createCalendar?: (name: string) => unknown;
|
|
67
|
-
}
|
|
68
|
-
export interface DateFieldState<T extends DateValue = DateValue> {
|
|
69
|
-
/** The current value. */
|
|
70
|
-
value: Accessor<T | null>;
|
|
71
|
-
/** The date value (may be partial during editing). */
|
|
72
|
-
dateValue: Accessor<DateValue | null>;
|
|
73
|
-
/** Sets the date value. */
|
|
74
|
-
setValue: (value: T | null) => void;
|
|
75
|
-
/** The segments that make up the date. */
|
|
76
|
-
segments: Accessor<DateSegment[]>;
|
|
77
|
-
/** The format string. */
|
|
78
|
-
formatValue: (fieldOptions?: Intl.DateTimeFormatOptions) => string;
|
|
79
|
-
/** Sets a segment value. */
|
|
80
|
-
setSegment: (type: DateSegmentType, value: number) => void;
|
|
81
|
-
/** Increments a segment. */
|
|
82
|
-
incrementSegment: (type: DateSegmentType) => void;
|
|
83
|
-
/** Decrements a segment. */
|
|
84
|
-
decrementSegment: (type: DateSegmentType) => void;
|
|
85
|
-
/** Clears a segment. */
|
|
86
|
-
clearSegment: (type: DateSegmentType) => void;
|
|
87
|
-
/** Confirms the value (after typing). */
|
|
88
|
-
confirmPlaceholder: () => void;
|
|
89
|
-
/** Whether the field is disabled. */
|
|
90
|
-
isDisabled: Accessor<boolean>;
|
|
91
|
-
/** Whether the field is read-only. */
|
|
92
|
-
isReadOnly: Accessor<boolean>;
|
|
93
|
-
/** Whether the field is required. */
|
|
94
|
-
isRequired: Accessor<boolean>;
|
|
95
|
-
/** The validation state. */
|
|
96
|
-
validationState: Accessor<ValidationState | undefined>;
|
|
97
|
-
/** The granularity. */
|
|
98
|
-
granularity: 'day' | 'hour' | 'minute' | 'second';
|
|
99
|
-
/** Whether the value is invalid. */
|
|
100
|
-
isInvalid: Accessor<boolean>;
|
|
101
|
-
/** The locale. */
|
|
102
|
-
locale: string;
|
|
103
|
-
/** The time zone. */
|
|
104
|
-
timeZone: string;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Provides state management for a date field component.
|
|
108
|
-
*/
|
|
109
|
-
export declare function createDateFieldState<T extends DateValue = CalendarDate>(props?: DateFieldStateProps<T>): DateFieldState<T>;
|
|
110
|
-
//# sourceMappingURL=createDateFieldState.d.ts.map
|
|
@@ -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"}
|