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