@carbon-labs/wc-date-picker 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.
Files changed (156) hide show
  1. package/LICENSE +201 -0
  2. package/es/__stories__/date-picker.stories.d.ts +949 -0
  3. package/es/components/date-picker/calendar-renderer.d.ts +147 -0
  4. package/es/components/date-picker/calendar-renderer.js +406 -0
  5. package/es/components/date-picker/calendar-renderer.js.map +1 -0
  6. package/es/components/date-picker/date-picker-input-skeleton.d.ts +34 -0
  7. package/es/components/date-picker/date-picker-input-skeleton.js +77 -0
  8. package/es/components/date-picker/date-picker-input-skeleton.js.map +1 -0
  9. package/es/components/date-picker/date-picker-input.d.ts +539 -0
  10. package/es/components/date-picker/date-picker-input.js +413 -0
  11. package/es/components/date-picker/date-picker-input.js.map +1 -0
  12. package/es/components/date-picker/date-picker.d.ts +977 -0
  13. package/es/components/date-picker/date-picker.js +1047 -0
  14. package/es/components/date-picker/date-picker.js.map +1 -0
  15. package/es/components/date-picker/date-picker.scss.js +6 -0
  16. package/es/components/date-picker/date-picker.scss.js.map +1 -0
  17. package/es/components/date-picker/defs.d.ts +45 -0
  18. package/es/components/date-picker/defs.js +51 -0
  19. package/es/components/date-picker/defs.js.map +1 -0
  20. package/es/index.d.ts +10 -0
  21. package/es/index.js +5 -0
  22. package/es/index.js.map +1 -0
  23. package/es/state-machine/actions.d.ts +35 -0
  24. package/es/state-machine/actions.js +860 -0
  25. package/es/state-machine/actions.js.map +1 -0
  26. package/es/state-machine/adapters/web-component-adapter.d.ts +142 -0
  27. package/es/state-machine/adapters/web-component-adapter.js +269 -0
  28. package/es/state-machine/adapters/web-component-adapter.js.map +1 -0
  29. package/es/state-machine/effects.d.ts +35 -0
  30. package/es/state-machine/effects.js +92 -0
  31. package/es/state-machine/effects.js.map +1 -0
  32. package/es/state-machine/guards.d.ts +41 -0
  33. package/es/state-machine/guards.js +143 -0
  34. package/es/state-machine/guards.js.map +1 -0
  35. package/es/state-machine/index.d.ts +12 -0
  36. package/es/state-machine/machine.d.ts +92 -0
  37. package/es/state-machine/machine.js +272 -0
  38. package/es/state-machine/machine.js.map +1 -0
  39. package/es/state-machine/states.d.ts +89 -0
  40. package/es/state-machine/states.js +105 -0
  41. package/es/state-machine/states.js.map +1 -0
  42. package/es/state-machine/temporal-utils.d.ts +203 -0
  43. package/es/state-machine/temporal-utils.js +128 -0
  44. package/es/state-machine/temporal-utils.js.map +1 -0
  45. package/es/state-machine/types.d.ts +163 -0
  46. package/es/temp-imports/.storybook/templates/with-layer.d.ts +26 -0
  47. package/es/temp-imports/globals/decorators/carbon-element.d.ts +45 -0
  48. package/es/temp-imports/globals/decorators/carbon-element.js +63 -0
  49. package/es/temp-imports/globals/decorators/carbon-element.js.map +1 -0
  50. package/es/temp-imports/globals/decorators/host-listener.d.ts +17 -0
  51. package/es/temp-imports/globals/decorators/host-listener.js +62 -0
  52. package/es/temp-imports/globals/decorators/host-listener.js.map +1 -0
  53. package/es/temp-imports/globals/internal/collection-helpers.d.ts +41 -0
  54. package/es/temp-imports/globals/internal/handle.d.ts +16 -0
  55. package/es/temp-imports/globals/internal/icon-loader-utils.d.ts +31 -0
  56. package/es/temp-imports/globals/internal/icon-loader-utils.js +69 -0
  57. package/es/temp-imports/globals/internal/icon-loader-utils.js.map +1 -0
  58. package/es/temp-imports/globals/internal/icon-loader.d.ts +28 -0
  59. package/es/temp-imports/globals/internal/icon-loader.js +43 -0
  60. package/es/temp-imports/globals/internal/icon-loader.js.map +1 -0
  61. package/es/temp-imports/globals/mixins/focus.d.ts +369 -0
  62. package/es/temp-imports/globals/mixins/focus.js +38 -0
  63. package/es/temp-imports/globals/mixins/focus.js.map +1 -0
  64. package/es/temp-imports/globals/mixins/form.d.ts +379 -0
  65. package/es/temp-imports/globals/mixins/form.js +49 -0
  66. package/es/temp-imports/globals/mixins/form.js.map +1 -0
  67. package/es/temp-imports/globals/mixins/host-listener.d.ts +387 -0
  68. package/es/temp-imports/globals/mixins/host-listener.js +76 -0
  69. package/es/temp-imports/globals/mixins/host-listener.js.map +1 -0
  70. package/es/temp-imports/globals/mixins/on.d.ts +9 -0
  71. package/es/temp-imports/globals/mixins/on.js +19 -0
  72. package/es/temp-imports/globals/mixins/on.js.map +1 -0
  73. package/es/temp-imports/globals/settings.d.ts +13 -0
  74. package/es/temp-imports/globals/settings.js +76 -0
  75. package/es/temp-imports/globals/settings.js.map +1 -0
  76. package/es/temp-imports/globals/shared-enums.d.ts +19 -0
  77. package/es/temp-imports/globals/shared-enums.js +23 -0
  78. package/es/temp-imports/globals/shared-enums.js.map +1 -0
  79. package/lib/__stories__/date-picker.stories.d.ts +949 -0
  80. package/lib/components/date-picker/calendar-renderer.d.ts +147 -0
  81. package/lib/components/date-picker/calendar-renderer.js +408 -0
  82. package/lib/components/date-picker/calendar-renderer.js.map +1 -0
  83. package/lib/components/date-picker/date-picker-input-skeleton.d.ts +34 -0
  84. package/lib/components/date-picker/date-picker-input-skeleton.js +79 -0
  85. package/lib/components/date-picker/date-picker-input-skeleton.js.map +1 -0
  86. package/lib/components/date-picker/date-picker-input.d.ts +539 -0
  87. package/lib/components/date-picker/date-picker-input.js +422 -0
  88. package/lib/components/date-picker/date-picker-input.js.map +1 -0
  89. package/lib/components/date-picker/date-picker.d.ts +977 -0
  90. package/lib/components/date-picker/date-picker.js +1049 -0
  91. package/lib/components/date-picker/date-picker.js.map +1 -0
  92. package/lib/components/date-picker/date-picker.scss.js +10 -0
  93. package/lib/components/date-picker/date-picker.scss.js.map +1 -0
  94. package/lib/components/date-picker/defs.d.ts +45 -0
  95. package/lib/components/date-picker/defs.js +56 -0
  96. package/lib/components/date-picker/defs.js.map +1 -0
  97. package/lib/index.d.ts +10 -0
  98. package/lib/index.js +8 -0
  99. package/lib/index.js.map +1 -0
  100. package/lib/state-machine/actions.d.ts +35 -0
  101. package/lib/state-machine/actions.js +864 -0
  102. package/lib/state-machine/actions.js.map +1 -0
  103. package/lib/state-machine/adapters/web-component-adapter.d.ts +142 -0
  104. package/lib/state-machine/adapters/web-component-adapter.js +271 -0
  105. package/lib/state-machine/adapters/web-component-adapter.js.map +1 -0
  106. package/lib/state-machine/effects.d.ts +35 -0
  107. package/lib/state-machine/effects.js +96 -0
  108. package/lib/state-machine/effects.js.map +1 -0
  109. package/lib/state-machine/guards.d.ts +41 -0
  110. package/lib/state-machine/guards.js +147 -0
  111. package/lib/state-machine/guards.js.map +1 -0
  112. package/lib/state-machine/index.d.ts +12 -0
  113. package/lib/state-machine/machine.d.ts +92 -0
  114. package/lib/state-machine/machine.js +274 -0
  115. package/lib/state-machine/machine.js.map +1 -0
  116. package/lib/state-machine/states.d.ts +89 -0
  117. package/lib/state-machine/states.js +105 -0
  118. package/lib/state-machine/states.js.map +1 -0
  119. package/lib/state-machine/temporal-utils.d.ts +203 -0
  120. package/lib/state-machine/temporal-utils.js +136 -0
  121. package/lib/state-machine/temporal-utils.js.map +1 -0
  122. package/lib/state-machine/types.d.ts +163 -0
  123. package/lib/temp-imports/.storybook/templates/with-layer.d.ts +26 -0
  124. package/lib/temp-imports/globals/decorators/carbon-element.d.ts +45 -0
  125. package/lib/temp-imports/globals/decorators/carbon-element.js +65 -0
  126. package/lib/temp-imports/globals/decorators/carbon-element.js.map +1 -0
  127. package/lib/temp-imports/globals/decorators/host-listener.d.ts +17 -0
  128. package/lib/temp-imports/globals/decorators/host-listener.js +66 -0
  129. package/lib/temp-imports/globals/decorators/host-listener.js.map +1 -0
  130. package/lib/temp-imports/globals/internal/collection-helpers.d.ts +41 -0
  131. package/lib/temp-imports/globals/internal/handle.d.ts +16 -0
  132. package/lib/temp-imports/globals/internal/icon-loader-utils.d.ts +31 -0
  133. package/lib/temp-imports/globals/internal/icon-loader-utils.js +72 -0
  134. package/lib/temp-imports/globals/internal/icon-loader-utils.js.map +1 -0
  135. package/lib/temp-imports/globals/internal/icon-loader.d.ts +28 -0
  136. package/lib/temp-imports/globals/internal/icon-loader.js +45 -0
  137. package/lib/temp-imports/globals/internal/icon-loader.js.map +1 -0
  138. package/lib/temp-imports/globals/mixins/focus.d.ts +369 -0
  139. package/lib/temp-imports/globals/mixins/focus.js +42 -0
  140. package/lib/temp-imports/globals/mixins/focus.js.map +1 -0
  141. package/lib/temp-imports/globals/mixins/form.d.ts +379 -0
  142. package/lib/temp-imports/globals/mixins/form.js +53 -0
  143. package/lib/temp-imports/globals/mixins/form.js.map +1 -0
  144. package/lib/temp-imports/globals/mixins/host-listener.d.ts +387 -0
  145. package/lib/temp-imports/globals/mixins/host-listener.js +80 -0
  146. package/lib/temp-imports/globals/mixins/host-listener.js.map +1 -0
  147. package/lib/temp-imports/globals/mixins/on.d.ts +9 -0
  148. package/lib/temp-imports/globals/mixins/on.js +23 -0
  149. package/lib/temp-imports/globals/mixins/on.js.map +1 -0
  150. package/lib/temp-imports/globals/settings.d.ts +13 -0
  151. package/lib/temp-imports/globals/settings.js +79 -0
  152. package/lib/temp-imports/globals/settings.js.map +1 -0
  153. package/lib/temp-imports/globals/shared-enums.d.ts +19 -0
  154. package/lib/temp-imports/globals/shared-enums.js +23 -0
  155. package/lib/temp-imports/globals/shared-enums.js.map +1 -0
  156. package/package.json +44 -0
@@ -0,0 +1,143 @@
1
+ import { DatePickerState } from './states.js';
2
+ import { isDateInRange } from './temporal-utils.js';
3
+
4
+ /**
5
+ * Copyright IBM Corp. 2026
6
+ *
7
+ * This source code is licensed under the Apache-2.0 license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ /**
11
+ * Check if the component is interactive (not disabled or readonly)
12
+ *
13
+ * @param {DatePickerContext} context - The current context
14
+ * @returns {boolean} True if interactive
15
+ */
16
+ const isInteractive = (context) => {
17
+ return !context.isDisabled && !context.isReadonly;
18
+ };
19
+ /**
20
+ * Check if component is in range mode
21
+ *
22
+ * @param {DatePickerContext} context - The current context
23
+ * @returns {boolean} True if in range mode
24
+ */
25
+ const isRangeMode = (context) => {
26
+ return context.mode === 'range';
27
+ };
28
+ /**
29
+ * Guards for state transitions
30
+ */
31
+ const guards = {
32
+ [DatePickerState.IDLE]: {},
33
+ [DatePickerState.FOCUSED]: {
34
+ INPUT_FOCUS: isInteractive,
35
+ },
36
+ [DatePickerState.CALENDAR_OPEN]: {
37
+ CALENDAR_OPEN: isInteractive,
38
+ CALENDAR_ICON_CLICK: isInteractive,
39
+ TAB_KEY: isInteractive,
40
+ },
41
+ [DatePickerState.SELECTING_START]: {
42
+ /**
43
+ * Guard for calendar open in range mode
44
+ *
45
+ * @param {DatePickerContext} context - The current context
46
+ * @returns {boolean} True if allowed
47
+ */
48
+ CALENDAR_OPEN: (context) => isInteractive(context) && isRangeMode(context),
49
+ },
50
+ [DatePickerState.SELECTING_END]: {
51
+ /**
52
+ * Guard for range start selection
53
+ *
54
+ * @param {DatePickerContext} context - The current context
55
+ * @param {DatePickerEvent} event - The event
56
+ * @returns {boolean} True if allowed
57
+ */
58
+ RANGE_START_SELECT: (context, event) => {
59
+ if (!isInteractive(context) || !isRangeMode(context)) {
60
+ return false;
61
+ }
62
+ const payload = event.payload;
63
+ if (!(payload === null || payload === void 0 ? void 0 : payload.date)) {
64
+ return false;
65
+ }
66
+ return isDateInRange(payload.date, context.minDate, context.maxDate);
67
+ },
68
+ },
69
+ [DatePickerState.DATE_SELECTED]: {
70
+ /**
71
+ * Guard for date selection
72
+ *
73
+ * @param {DatePickerContext} context - The current context
74
+ * @param {DatePickerEvent} event - The event
75
+ * @returns {boolean} True if allowed
76
+ */
77
+ DATE_SELECT: (context, event) => {
78
+ if (!isInteractive(context)) {
79
+ return false;
80
+ }
81
+ const payload = event.payload;
82
+ if (!(payload === null || payload === void 0 ? void 0 : payload.date)) {
83
+ return false;
84
+ }
85
+ return isDateInRange(payload.date, context.minDate, context.maxDate);
86
+ },
87
+ /**
88
+ * Guard for range end selection
89
+ *
90
+ * @param {DatePickerContext} context - The current context
91
+ * @param {DatePickerEvent} event - The event
92
+ * @returns {boolean} True if allowed
93
+ */
94
+ RANGE_END_SELECT: (context, event) => {
95
+ if (!isInteractive(context) || !isRangeMode(context)) {
96
+ return false;
97
+ }
98
+ const payload = event.payload;
99
+ if (!(payload === null || payload === void 0 ? void 0 : payload.date)) {
100
+ return false;
101
+ }
102
+ // Must have a start date selected
103
+ if (!context.startDate) {
104
+ return false;
105
+ }
106
+ return isDateInRange(payload.date, context.minDate, context.maxDate);
107
+ },
108
+ },
109
+ [DatePickerState.DISABLED]: {},
110
+ [DatePickerState.READONLY]: {},
111
+ [DatePickerState.ERROR]: {},
112
+ };
113
+ /**
114
+ * Get guard for a specific state and event
115
+ *
116
+ * @param {DatePickerState} state - The current state
117
+ * @param {string} eventType - The event type
118
+ * @returns {StateGuard | undefined} The guard function or undefined
119
+ */
120
+ function getGuard(state, eventType) {
121
+ var _a;
122
+ return (_a = guards[state]) === null || _a === void 0 ? void 0 : _a[eventType];
123
+ }
124
+ /**
125
+ * Check if a transition is guarded and allowed
126
+ *
127
+ * @param {DatePickerState} state - The current state
128
+ * @param {string} eventType - The event type
129
+ * @param {DatePickerContext} context - The current context
130
+ * @param {DatePickerEvent} event - The event
131
+ * @returns {boolean} True if guard passes
132
+ */
133
+ function checkGuard(state, eventType, context, event) {
134
+ const guard = getGuard(state, eventType);
135
+ if (!guard) {
136
+ return true; // No guard means transition is allowed
137
+ }
138
+ return guard(context, event);
139
+ }
140
+ // Made with Bob
141
+
142
+ export { checkGuard, getGuard, guards };
143
+ //# sourceMappingURL=guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.js","sources":["../../../state-machine/guards.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Copyright IBM Corp. 2026
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ export { DatePickerStateMachine } from './machine';
8
+ export { DatePickerState, DatePickerEvent } from './states';
9
+ export { guards, getGuard, checkGuard } from './guards';
10
+ export { actions, getAction, executeAction } from './actions';
11
+ export { effects, getEffect, executeEffect } from './effects';
12
+ export type { DatePickerContext, DatePickerMode, InputType, DateSelectPayload, InputFocusPayload, KeyboardPayload, ValueChangePayload, ValidationErrorPayload, DatePickerEvent as DatePickerEventType, StateTransition, StateGuard, StateAction, SideEffect, TransitionListener, StateConfig, TransitionMap, } from './types';
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Copyright IBM Corp. 2026
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import { DatePickerState } from './states';
8
+ import type { DatePickerContext, TransitionListener } from './types';
9
+ /**
10
+ * Date picker state machine
11
+ * Manages state transitions and context updates for the date picker
12
+ */
13
+ export declare class DatePickerStateMachine {
14
+ private currentState;
15
+ private context;
16
+ private listeners;
17
+ /**
18
+ * Create a new date picker state machine
19
+ *
20
+ * @param {Partial<DatePickerContext>} initialContext - Initial context values
21
+ */
22
+ constructor(initialContext?: Partial<DatePickerContext>);
23
+ /**
24
+ * Create initial context with defaults
25
+ *
26
+ * @param {Partial<DatePickerContext>} partial - Partial context to merge with defaults
27
+ * @returns Complete context object
28
+ */
29
+ private createInitialContext;
30
+ /**
31
+ * Send an event to the state machine
32
+ * This is the primary method for triggering state transitions
33
+ *
34
+ * @param {string} eventType - The type of event to send
35
+ * @param {any} payload - Optional event payload
36
+ * @returns The updated context
37
+ */
38
+ send(eventType: string, payload?: any): DatePickerContext;
39
+ /**
40
+ * Get the current state
41
+ *
42
+ * @returns The current state
43
+ */
44
+ getState(): DatePickerState;
45
+ /**
46
+ * Get the current context
47
+ *
48
+ * @returns A copy of the current context
49
+ */
50
+ getContext(): DatePickerContext;
51
+ /**
52
+ * Update context directly (use sparingly)
53
+ *
54
+ * @param {Partial<DatePickerContext>} updates - Partial context updates
55
+ * @returns The updated context
56
+ */
57
+ updateContext(updates: Partial<DatePickerContext>): DatePickerContext;
58
+ /**
59
+ * Subscribe to state transitions
60
+ *
61
+ * @param {TransitionListener} listener - Function to call on each transition
62
+ * @returns Unsubscribe function
63
+ */
64
+ subscribe(listener: TransitionListener): () => void;
65
+ /**
66
+ * Check if a transition is valid from the current state
67
+ *
68
+ * @param {string} eventType - The event type to check
69
+ * @returns True if the transition is valid
70
+ */
71
+ canTransition(eventType: string): boolean;
72
+ /**
73
+ * Get the next state for a given event
74
+ *
75
+ * @param {DatePickerState} from - Current state
76
+ * @param {DatePickerEvent} event - The event
77
+ * @returns Next state or null if no transition exists
78
+ */
79
+ private getNextState;
80
+ /**
81
+ * Notify all listeners of a state transition
82
+ *
83
+ * @param {StateTransition} transition - The state transition
84
+ */
85
+ private notifyListeners;
86
+ /**
87
+ * Reset the state machine to initial state
88
+ *
89
+ * @param {Partial<DatePickerContext>} initialContext - Optional new initial context
90
+ */
91
+ reset(initialContext?: Partial<DatePickerContext>): void;
92
+ }
@@ -0,0 +1,272 @@
1
+ import { DatePickerState, DatePickerEvent } from './states.js';
2
+ import { checkGuard } from './guards.js';
3
+ import { executeAction } from './actions.js';
4
+ import { executeEffect } from './effects.js';
5
+
6
+ /**
7
+ * Copyright IBM Corp. 2026
8
+ *
9
+ * This source code is licensed under the Apache-2.0 license found in the
10
+ * LICENSE file in the root directory of this source tree.
11
+ */
12
+ /**
13
+ * State transition configuration
14
+ * Maps the current state + event type to the next state
15
+ */
16
+ const stateTransitions = {
17
+ [DatePickerState.IDLE]: {
18
+ [DatePickerEvent.INPUT_FOCUS]: DatePickerState.FOCUSED,
19
+ [DatePickerEvent.CALENDAR_ICON_CLICK]: DatePickerState.CALENDAR_OPEN,
20
+ [DatePickerEvent.DISABLE]: DatePickerState.DISABLED,
21
+ [DatePickerEvent.SET_READONLY]: DatePickerState.READONLY,
22
+ },
23
+ [DatePickerState.FOCUSED]: {
24
+ [DatePickerEvent.INPUT_BLUR]: DatePickerState.IDLE,
25
+ [DatePickerEvent.CALENDAR_OPEN]: DatePickerState.CALENDAR_OPEN,
26
+ [DatePickerEvent.DISABLE]: DatePickerState.DISABLED,
27
+ },
28
+ [DatePickerState.CALENDAR_OPEN]: {
29
+ [DatePickerEvent.DATE_SELECT]: DatePickerState.DATE_SELECTED,
30
+ [DatePickerEvent.RANGE_START_SELECT]: DatePickerState.SELECTING_END,
31
+ [DatePickerEvent.OUTSIDE_CLICK]: DatePickerState.IDLE,
32
+ [DatePickerEvent.ESCAPE_KEY]: DatePickerState.FOCUSED,
33
+ [DatePickerEvent.TAB_KEY]: DatePickerState.IDLE,
34
+ [DatePickerEvent.CALENDAR_CLOSE]: DatePickerState.FOCUSED,
35
+ [DatePickerEvent.PREV_MONTH]: DatePickerState.CALENDAR_OPEN,
36
+ [DatePickerEvent.NEXT_MONTH]: DatePickerState.CALENDAR_OPEN,
37
+ [DatePickerEvent.PREV_YEAR]: DatePickerState.CALENDAR_OPEN,
38
+ [DatePickerEvent.NEXT_YEAR]: DatePickerState.CALENDAR_OPEN,
39
+ [DatePickerEvent.GO_TO_TODAY]: DatePickerState.CALENDAR_OPEN,
40
+ // Keyboard navigation
41
+ [DatePickerEvent.ARROW_UP]: DatePickerState.CALENDAR_OPEN,
42
+ [DatePickerEvent.ARROW_DOWN]: DatePickerState.CALENDAR_OPEN,
43
+ [DatePickerEvent.ARROW_LEFT]: DatePickerState.CALENDAR_OPEN,
44
+ [DatePickerEvent.ARROW_RIGHT]: DatePickerState.CALENDAR_OPEN,
45
+ [DatePickerEvent.PAGE_UP]: DatePickerState.CALENDAR_OPEN,
46
+ [DatePickerEvent.PAGE_DOWN]: DatePickerState.CALENDAR_OPEN,
47
+ [DatePickerEvent.HOME_KEY]: DatePickerState.CALENDAR_OPEN,
48
+ [DatePickerEvent.END_KEY]: DatePickerState.CALENDAR_OPEN,
49
+ // ENTER_KEY is handled by guards - will dispatch DATE_SELECT or RANGE_START_SELECT
50
+ },
51
+ [DatePickerState.SELECTING_START]: {
52
+ [DatePickerEvent.RANGE_START_SELECT]: DatePickerState.SELECTING_END,
53
+ [DatePickerEvent.OUTSIDE_CLICK]: DatePickerState.IDLE,
54
+ [DatePickerEvent.ESCAPE_KEY]: DatePickerState.FOCUSED,
55
+ },
56
+ [DatePickerState.SELECTING_END]: {
57
+ [DatePickerEvent.RANGE_END_SELECT]: DatePickerState.DATE_SELECTED,
58
+ [DatePickerEvent.RANGE_START_SELECT]: DatePickerState.SELECTING_END,
59
+ [DatePickerEvent.OUTSIDE_CLICK]: DatePickerState.IDLE,
60
+ [DatePickerEvent.ESCAPE_KEY]: DatePickerState.FOCUSED,
61
+ [DatePickerEvent.TAB_KEY]: DatePickerState.IDLE,
62
+ // Keyboard navigation
63
+ [DatePickerEvent.ARROW_UP]: DatePickerState.SELECTING_END,
64
+ [DatePickerEvent.ARROW_DOWN]: DatePickerState.SELECTING_END,
65
+ [DatePickerEvent.ARROW_LEFT]: DatePickerState.SELECTING_END,
66
+ [DatePickerEvent.ARROW_RIGHT]: DatePickerState.SELECTING_END,
67
+ [DatePickerEvent.PAGE_UP]: DatePickerState.SELECTING_END,
68
+ [DatePickerEvent.PAGE_DOWN]: DatePickerState.SELECTING_END,
69
+ [DatePickerEvent.HOME_KEY]: DatePickerState.SELECTING_END,
70
+ [DatePickerEvent.END_KEY]: DatePickerState.SELECTING_END,
71
+ [DatePickerEvent.ENTER_KEY]: DatePickerState.DATE_SELECTED,
72
+ [DatePickerEvent.PREV_MONTH]: DatePickerState.SELECTING_END,
73
+ [DatePickerEvent.NEXT_MONTH]: DatePickerState.SELECTING_END,
74
+ },
75
+ [DatePickerState.DATE_SELECTED]: {
76
+ [DatePickerEvent.CALENDAR_CLOSE]: DatePickerState.IDLE,
77
+ [DatePickerEvent.INPUT_FOCUS]: DatePickerState.FOCUSED,
78
+ },
79
+ [DatePickerState.DISABLED]: {
80
+ [DatePickerEvent.ENABLE]: DatePickerState.IDLE,
81
+ },
82
+ [DatePickerState.READONLY]: {
83
+ [DatePickerEvent.UNSET_READONLY]: DatePickerState.IDLE,
84
+ },
85
+ [DatePickerState.ERROR]: {
86
+ [DatePickerEvent.VALUE_CHANGE]: DatePickerState.IDLE,
87
+ [DatePickerEvent.CLEAR_ERROR]: DatePickerState.IDLE,
88
+ },
89
+ };
90
+ /**
91
+ * Date picker state machine
92
+ * Manages state transitions and context updates for the date picker
93
+ */
94
+ class DatePickerStateMachine {
95
+ /**
96
+ * Create a new date picker state machine
97
+ *
98
+ * @param {Partial<DatePickerContext>} initialContext - Initial context values
99
+ */
100
+ constructor(initialContext = {}) {
101
+ this.listeners = new Set();
102
+ this.currentState = DatePickerState.IDLE;
103
+ this.context = this.createInitialContext(initialContext);
104
+ }
105
+ /**
106
+ * Create initial context with defaults
107
+ *
108
+ * @param {Partial<DatePickerContext>} partial - Partial context to merge with defaults
109
+ * @returns Complete context object
110
+ */
111
+ createInitialContext(partial) {
112
+ return {
113
+ mode: 'single',
114
+ value: '',
115
+ startDate: null,
116
+ endDate: null,
117
+ isOpen: false,
118
+ isFocused: false,
119
+ isDisabled: false,
120
+ isReadonly: false,
121
+ isInvalid: false,
122
+ lastFocusedInput: null,
123
+ minDate: null,
124
+ maxDate: null,
125
+ dateFormat: 'm/d/Y',
126
+ allowInput: true,
127
+ closeOnSelect: true,
128
+ viewDate: null,
129
+ focusedDate: null,
130
+ ...partial,
131
+ };
132
+ }
133
+ /**
134
+ * Send an event to the state machine
135
+ * This is the primary method for triggering state transitions
136
+ *
137
+ * @param {string} eventType - The type of event to send
138
+ * @param {any} payload - Optional event payload
139
+ * @returns The updated context
140
+ */
141
+ send(eventType, payload) {
142
+ const event = {
143
+ type: eventType,
144
+ payload,
145
+ timestamp: Date.now(),
146
+ };
147
+ const nextState = this.getNextState(this.currentState, event);
148
+ if (!nextState) {
149
+ // No valid transition, return current context
150
+ return this.context;
151
+ }
152
+ // Check guards
153
+ if (!checkGuard(nextState, event.type, this.context, event)) {
154
+ return this.context;
155
+ }
156
+ // Execute actions to update context
157
+ // Actions are defined for the current state, not the next state
158
+ const contextUpdates = executeAction(this.currentState, event.type, this.context, event);
159
+ const newContext = {
160
+ ...this.context,
161
+ ...contextUpdates,
162
+ };
163
+ // Create a transition object
164
+ const stateTransition = {
165
+ from: this.currentState,
166
+ to: nextState,
167
+ event,
168
+ context: newContext,
169
+ };
170
+ // Update state
171
+ this.currentState;
172
+ this.currentState = nextState;
173
+ this.context = newContext;
174
+ // Execute side effects
175
+ executeEffect(nextState, event.type, this.context, event);
176
+ // Notify listeners
177
+ this.notifyListeners(stateTransition);
178
+ return this.context;
179
+ }
180
+ /**
181
+ * Get the current state
182
+ *
183
+ * @returns The current state
184
+ */
185
+ getState() {
186
+ return this.currentState;
187
+ }
188
+ /**
189
+ * Get the current context
190
+ *
191
+ * @returns A copy of the current context
192
+ */
193
+ getContext() {
194
+ return { ...this.context };
195
+ }
196
+ /**
197
+ * Update context directly (use sparingly)
198
+ *
199
+ * @param {Partial<DatePickerContext>} updates - Partial context updates
200
+ * @returns The updated context
201
+ */
202
+ updateContext(updates) {
203
+ this.context = {
204
+ ...this.context,
205
+ ...updates,
206
+ };
207
+ return this.context;
208
+ }
209
+ /**
210
+ * Subscribe to state transitions
211
+ *
212
+ * @param {TransitionListener} listener - Function to call on each transition
213
+ * @returns Unsubscribe function
214
+ */
215
+ subscribe(listener) {
216
+ this.listeners.add(listener);
217
+ return () => this.listeners.delete(listener);
218
+ }
219
+ /**
220
+ * Check if a transition is valid from the current state
221
+ *
222
+ * @param {string} eventType - The event type to check
223
+ * @returns True if the transition is valid
224
+ */
225
+ canTransition(eventType) {
226
+ const event = { type: eventType, timestamp: Date.now() };
227
+ const nextState = this.getNextState(this.currentState, event);
228
+ if (!nextState) {
229
+ return false;
230
+ }
231
+ return checkGuard(nextState, eventType, this.context, event);
232
+ }
233
+ /**
234
+ * Get the next state for a given event
235
+ *
236
+ * @param {DatePickerState} from - Current state
237
+ * @param {DatePickerEvent} event - The event
238
+ * @returns Next state or null if no transition exists
239
+ */
240
+ getNextState(from, event) {
241
+ const transitions = stateTransitions[from];
242
+ if (!transitions) {
243
+ return null;
244
+ }
245
+ const nextState = transitions[event.type];
246
+ if (!nextState) {
247
+ return null;
248
+ }
249
+ return nextState;
250
+ }
251
+ /**
252
+ * Notify all listeners of a state transition
253
+ *
254
+ * @param {StateTransition} transition - The state transition
255
+ */
256
+ notifyListeners(transition) {
257
+ this.listeners.forEach((listener) => listener(transition));
258
+ }
259
+ /**
260
+ * Reset the state machine to initial state
261
+ *
262
+ * @param {Partial<DatePickerContext>} initialContext - Optional new initial context
263
+ */
264
+ reset(initialContext) {
265
+ this.currentState = DatePickerState.IDLE;
266
+ this.context = this.createInitialContext(initialContext || {});
267
+ }
268
+ }
269
+ // Made with Bob
270
+
271
+ export { DatePickerStateMachine };
272
+ //# sourceMappingURL=machine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine.js","sources":["../../../state-machine/machine.ts"],"sourcesContent":[null],"names":["DatePickerEventEnum"],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Copyright IBM Corp. 2026
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ /**
8
+ * Date picker state machine states
9
+ */
10
+ export declare enum DatePickerState {
11
+ /**
12
+ * Initial state - calendar closed, no focus
13
+ */
14
+ IDLE = "idle",
15
+ /**
16
+ * Input has focus, calendar closed
17
+ */
18
+ FOCUSED = "focused",
19
+ /**
20
+ * Calendar dropdown is open
21
+ */
22
+ CALENDAR_OPEN = "calendar_open",
23
+ /**
24
+ * User is selecting the start date (range mode)
25
+ */
26
+ SELECTING_START = "selecting_start",
27
+ /**
28
+ * User is selecting the end date (range mode)
29
+ */
30
+ SELECTING_END = "selecting_end",
31
+ /**
32
+ * Date(s) have been selected
33
+ */
34
+ DATE_SELECTED = "date_selected",
35
+ /**
36
+ * Component is disabled
37
+ */
38
+ DISABLED = "disabled",
39
+ /**
40
+ * Component is read-only
41
+ */
42
+ READONLY = "readonly",
43
+ /**
44
+ * Component is in an error state
45
+ */
46
+ ERROR = "error"
47
+ }
48
+ /**
49
+ * Date picker events
50
+ */
51
+ export declare enum DatePickerEvent {
52
+ INPUT_FOCUS = "INPUT_FOCUS",
53
+ INPUT_BLUR = "INPUT_BLUR",
54
+ INPUT_CHANGE = "INPUT_CHANGE",
55
+ CALENDAR_ICON_CLICK = "CALENDAR_ICON_CLICK",
56
+ CALENDAR_OPEN = "CALENDAR_OPEN",
57
+ CALENDAR_CLOSE = "CALENDAR_CLOSE",
58
+ PREV_MONTH = "PREV_MONTH",
59
+ NEXT_MONTH = "NEXT_MONTH",
60
+ PREV_YEAR = "PREV_YEAR",
61
+ NEXT_YEAR = "NEXT_YEAR",
62
+ GO_TO_TODAY = "GO_TO_TODAY",
63
+ DATE_SELECT = "DATE_SELECT",
64
+ RANGE_START_SELECT = "RANGE_START_SELECT",
65
+ RANGE_END_SELECT = "RANGE_END_SELECT",
66
+ OUTSIDE_CLICK = "OUTSIDE_CLICK",
67
+ ESCAPE_KEY = "ESCAPE_KEY",
68
+ TAB_KEY = "TAB_KEY",
69
+ SHIFT_TAB_KEY = "SHIFT_TAB_KEY",
70
+ ENTER_KEY = "ENTER_KEY",
71
+ ARROW_UP = "ARROW_UP",
72
+ ARROW_DOWN = "ARROW_DOWN",
73
+ ARROW_LEFT = "ARROW_LEFT",
74
+ ARROW_RIGHT = "ARROW_RIGHT",
75
+ PAGE_UP = "PAGE_UP",
76
+ PAGE_DOWN = "PAGE_DOWN",
77
+ HOME_KEY = "HOME_KEY",
78
+ END_KEY = "END_KEY",
79
+ DISABLE = "DISABLE",
80
+ ENABLE = "ENABLE",
81
+ SET_READONLY = "SET_READONLY",
82
+ UNSET_READONLY = "UNSET_READONLY",
83
+ VALUE_CHANGE = "VALUE_CHANGE",
84
+ VALIDATION_ERROR = "VALIDATION_ERROR",
85
+ CLEAR_ERROR = "CLEAR_ERROR",
86
+ SET_MIN_DATE = "SET_MIN_DATE",
87
+ SET_MAX_DATE = "SET_MAX_DATE",
88
+ SET_DATE_FORMAT = "SET_DATE_FORMAT"
89
+ }