jsl-ui 9.28.2 → 9.28.3

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 (170) hide show
  1. package/lib/components/IntervalComponent.d.ts +17 -17
  2. package/lib/components/IntervalComponent.js +65 -68
  3. package/lib/components/auto-suggest/AutoSuggestComponent.d.ts +22 -22
  4. package/lib/components/auto-suggest/AutoSuggestComponent.js +47 -49
  5. package/lib/components/button/ButtonComponent.d.ts +18 -18
  6. package/lib/components/button/ButtonComponent.js +29 -46
  7. package/lib/components/checkbox/CheckBoxComponent.d.ts +28 -28
  8. package/lib/components/checkbox/CheckBoxComponent.js +81 -98
  9. package/lib/components/date/DateComponent.d.ts +32 -32
  10. package/lib/components/date/DateComponent.js +89 -106
  11. package/lib/components/date-range/DateRangeComponent.d.ts +35 -35
  12. package/lib/components/date-range/DateRangeComponent.js +123 -136
  13. package/lib/components/date-time/DateTimeComponent.d.ts +15 -15
  14. package/lib/components/date-time/DateTimeComponent.js +39 -53
  15. package/lib/components/dialog/DialogComponent.d.ts +67 -67
  16. package/lib/components/dialog/DialogComponent.js +198 -251
  17. package/lib/components/drop-down/DropDownComponent.d.ts +27 -27
  18. package/lib/components/drop-down/DropDownComponent.js +60 -74
  19. package/lib/components/expander/ExpanderComponent.d.ts +27 -27
  20. package/lib/components/expander/ExpanderComponent.js +89 -90
  21. package/lib/components/form-field/FormComponent.d.ts +12 -12
  22. package/lib/components/form-field/FormComponent.js +23 -26
  23. package/lib/components/form-field/FormFieldComponent.d.ts +39 -39
  24. package/lib/components/form-field/FormFieldComponent.js +138 -140
  25. package/lib/components/grid/GridComponent.d.ts +26 -26
  26. package/lib/components/grid/GridComponent.js +110 -116
  27. package/lib/components/input/InputComponent.d.ts +33 -33
  28. package/lib/components/input/InputComponent.js +126 -147
  29. package/lib/components/loading/LoadingComponent.d.ts +8 -8
  30. package/lib/components/loading/LoadingComponent.js +20 -22
  31. package/lib/components/navigation/NavigationComponent.d.ts +34 -34
  32. package/lib/components/navigation/NavigationComponent.js +45 -70
  33. package/lib/components/notification/Notification.d.ts +19 -19
  34. package/lib/components/notification/Notification.js +65 -69
  35. package/lib/components/number/NumberComponent.d.ts +26 -26
  36. package/lib/components/number/NumberComponent.js +80 -98
  37. package/lib/components/overlay/OverlayComponent.d.ts +27 -27
  38. package/lib/components/overlay/OverlayComponent.js +137 -149
  39. package/lib/components/progress/ProgressComponent.d.ts +18 -18
  40. package/lib/components/progress/ProgressComponent.js +40 -42
  41. package/lib/components/ribbon-menu/RibbonMenuComponent.d.ts +12 -12
  42. package/lib/components/ribbon-menu/RibbonMenuComponent.js +23 -34
  43. package/lib/components/select/SelectComponent.d.ts +79 -79
  44. package/lib/components/select/SelectComponent.js +356 -369
  45. package/lib/components/select/SelectDDAreaComponent.d.ts +32 -32
  46. package/lib/components/select/SelectDDAreaComponent.js +303 -317
  47. package/lib/components/slider/nouislider.d.ts +44 -44
  48. package/lib/components/slider/nouislider.js +2158 -2158
  49. package/lib/components/stack-panel/SplitterComponent.d.ts +21 -21
  50. package/lib/components/stack-panel/SplitterComponent.js +124 -126
  51. package/lib/components/stack-panel/StackPanelComponent.d.ts +20 -20
  52. package/lib/components/stack-panel/StackPanelComponent.js +50 -64
  53. package/lib/components/tabs/TabsComponent.d.ts +40 -40
  54. package/lib/components/tabs/TabsComponent.js +200 -204
  55. package/lib/components/time/TimeComponent.d.ts +29 -29
  56. package/lib/components/time/TimeComponent.js +104 -113
  57. package/lib/components/tree-view/TreeViewComponent.d.ts +23 -23
  58. package/lib/components/tree-view/TreeViewComponent.js +43 -45
  59. package/lib/components/virtual-render/VirtualRenderComponent.d.ts +30 -30
  60. package/lib/components/virtual-render/VirtualRenderComponent.js +92 -104
  61. package/lib/core/culture.d.ts +5 -5
  62. package/lib/core/culture.js +385 -385
  63. package/lib/core/date.d.ts +14 -14
  64. package/lib/core/date.js +346 -350
  65. package/lib/core/helper.d.ts +13 -13
  66. package/lib/core/helper.js +100 -104
  67. package/lib/core/jq.d.ts +37 -37
  68. package/lib/core/jq.js +362 -371
  69. package/lib/core/lang.d.ts +24 -24
  70. package/lib/core/lang.js +24 -28
  71. package/lib/core/numeric.d.ts +7 -7
  72. package/lib/core/numeric.js +139 -143
  73. package/lib/core/polyfills.js +22 -22
  74. package/lib/core.d.ts +6 -6
  75. package/lib/core.js +6 -6
  76. package/lib/grid/filterDialogs/dateRangeFilter.d.ts +7 -7
  77. package/lib/grid/filterDialogs/dateRangeFilter.js +106 -156
  78. package/lib/grid/filterDialogs/excelFilter.d.ts +9 -9
  79. package/lib/grid/filterDialogs/excelFilter.js +250 -316
  80. package/lib/grid/plugins/ext.overlay.d.ts +2 -2
  81. package/lib/grid/plugins/ext.overlay.js +295 -295
  82. package/lib/grid/plugins/slick.cellrangedecorator.d.ts +12 -12
  83. package/lib/grid/plugins/slick.cellrangedecorator.js +68 -68
  84. package/lib/grid/plugins/slick.cellrangeselector.d.ts +1 -1
  85. package/lib/grid/plugins/slick.cellrangeselector.js +144 -144
  86. package/lib/grid/plugins/slick.cellselectionmodel.d.ts +1 -1
  87. package/lib/grid/plugins/slick.cellselectionmodel.js +194 -194
  88. package/lib/grid/plugins/slick.headerbuttons.d.ts +55 -55
  89. package/lib/grid/plugins/slick.headerbuttons.js +156 -156
  90. package/lib/grid/plugins/slick.headermenu.d.ts +74 -74
  91. package/lib/grid/plugins/slick.headermenu.js +260 -260
  92. package/lib/grid/plugins/slick.rowmovemanager.d.ts +18 -18
  93. package/lib/grid/plugins/slick.rowmovemanager.js +249 -249
  94. package/lib/grid/plugins/slick.rowselectionmodel.d.ts +1 -1
  95. package/lib/grid/plugins/slick.rowselectionmodel.js +167 -167
  96. package/lib/grid/slick.core.d.ts +91 -91
  97. package/lib/grid/slick.core.js +574 -574
  98. package/lib/grid/slick.creator.d.ts +81 -81
  99. package/lib/grid/slick.creator.js +726 -726
  100. package/lib/grid/slick.dataview.d.ts +71 -71
  101. package/lib/grid/slick.dataview.js +1069 -1080
  102. package/lib/grid/slick.editors.core.d.ts +4 -4
  103. package/lib/grid/slick.editors.core.js +235 -235
  104. package/lib/grid/slick.editors.date.d.ts +2 -2
  105. package/lib/grid/slick.editors.date.js +125 -125
  106. package/lib/grid/slick.editors.lookup.d.ts +14 -14
  107. package/lib/grid/slick.editors.lookup.js +352 -353
  108. package/lib/grid/slick.editors.nav.d.ts +6 -6
  109. package/lib/grid/slick.editors.nav.js +22 -22
  110. package/lib/grid/slick.formatters.d.ts +17 -17
  111. package/lib/grid/slick.formatters.js +144 -144
  112. package/lib/grid/slick.grid.d.ts +285 -285
  113. package/lib/grid/slick.grid.js +5409 -5412
  114. package/lib/grid/slick.groupitemmetadataprovider.d.ts +39 -39
  115. package/lib/grid/slick.groupitemmetadataprovider.js +165 -165
  116. package/lib/grid/slick.tree.d.ts +33 -33
  117. package/lib/grid/slick.tree.js +208 -220
  118. package/lib/grid.css +1 -705
  119. package/lib/grid.d.ts +13 -13
  120. package/lib/grid.js +13 -13
  121. package/lib/index.css +8 -2195
  122. package/lib/index.css.map +1 -1
  123. package/lib/index.d.ts +56 -55
  124. package/lib/index.js +61 -61
  125. package/lib/index.js.map +1 -1
  126. package/lib/interaction/dataconverter.d.ts +4 -4
  127. package/lib/interaction/dataconverter.js +0 -1
  128. package/lib/interaction/eventhandler.d.ts +13 -13
  129. package/lib/interaction/eventhandler.js +39 -42
  130. package/lib/interaction/moveable.d.ts +39 -39
  131. package/lib/interaction/moveable.js +160 -174
  132. package/lib/interaction/resizable.d.ts +37 -37
  133. package/lib/interaction/resizable.js +109 -123
  134. package/lib/ui/auto.suggest.d.ts +18 -18
  135. package/lib/ui/auto.suggest.js +244 -259
  136. package/lib/ui/date.picker/date-picker-options.d.ts +11 -11
  137. package/lib/ui/date.picker/date-picker-options.js +76 -76
  138. package/lib/ui/date.picker/lib/date-manip.d.ts +74 -74
  139. package/lib/ui/date.picker/lib/date-manip.js +120 -120
  140. package/lib/ui/date.picker/lib/dom.d.ts +23 -23
  141. package/lib/ui/date.picker/lib/dom.js +28 -28
  142. package/lib/ui/date.picker/lib/emitter.d.ts +13 -13
  143. package/lib/ui/date.picker/lib/emitter.js +49 -49
  144. package/lib/ui/date.picker/lib/fns.d.ts +23 -23
  145. package/lib/ui/date.picker/lib/fns.js +39 -43
  146. package/lib/ui/date.picker/mode/base-mode.d.ts +26 -26
  147. package/lib/ui/date.picker/mode/base-mode.js +248 -248
  148. package/lib/ui/date.picker/mode/dropdown-mode.d.ts +28 -28
  149. package/lib/ui/date.picker/mode/dropdown-mode.js +50 -50
  150. package/lib/ui/date.picker/mode/index.d.ts +28 -28
  151. package/lib/ui/date.picker/mode/index.js +18 -18
  152. package/lib/ui/date.picker/mode/modal-mode.d.ts +25 -25
  153. package/lib/ui/date.picker/mode/modal-mode.js +17 -17
  154. package/lib/ui/date.picker/mode/permanent-mode.d.ts +29 -29
  155. package/lib/ui/date.picker/mode/permanent-mode.js +19 -19
  156. package/lib/ui/date.picker/views/day-picker.d.ts +40 -40
  157. package/lib/ui/date.picker/views/day-picker.js +155 -155
  158. package/lib/ui/date.picker/views/month-picker.d.ts +26 -26
  159. package/lib/ui/date.picker/views/month-picker.js +65 -65
  160. package/lib/ui/date.picker/views/year-picker.d.ts +20 -20
  161. package/lib/ui/date.picker/views/year-picker.js +66 -66
  162. package/lib/ui/date.picker.d.ts +66 -66
  163. package/lib/ui/date.picker.js +32 -32
  164. package/lib/ui/dialog.d.ts +22 -22
  165. package/lib/ui/dialog.js +98 -113
  166. package/lib/ui/drop.down.d.ts +52 -52
  167. package/lib/ui/drop.down.js +2112 -2112
  168. package/lib/ui/number.input.d.ts +13 -13
  169. package/lib/ui/number.input.js +56 -67
  170. package/package.json +1 -1
@@ -1,248 +1,248 @@
1
- /**
2
- * @file Defines the base date picker behavior, overridden by various modes.
3
- */
4
- import dayPicker from '../views/day-picker';
5
- import monthPicker from '../views/month-picker';
6
- import yearPicker from '../views/year-picker';
7
- import { bufferFn, noop } from '../lib/fns';
8
- import { on, CustomEvent, Key } from '../lib/dom';
9
- import { constrainDate } from '../lib/date-manip';
10
- var views = {
11
- day: dayPicker,
12
- year: yearPicker,
13
- month: monthPicker
14
- };
15
- export default function BaseMode(input, emit, opts) {
16
- var detatchInputEvents; // A function that detaches all events from the input
17
- var closing = false; // A hack to prevent calendar from re-opening when closing.
18
- var selectedDate; // The currently selected date
19
- var dp = {
20
- // The root DOM element for the date picker, initialized on first open.
21
- el: undefined,
22
- opts: opts,
23
- shouldFocusOnBlur: true,
24
- shouldFocusOnRender: true,
25
- state: initialState(),
26
- adjustPosition: noop,
27
- containerHTML: '<div class="dp"></div>',
28
- attachToDom: function () {
29
- opts.appendTo.appendChild(dp.el);
30
- },
31
- updateInput: function (selectedDate) {
32
- var e = new CustomEvent('change', { bubbles: true });
33
- e.simulated = true;
34
- input.value = selectedDate ? opts.format(selectedDate) : '';
35
- input.dispatchEvent(e);
36
- },
37
- computeSelectedDate: function () {
38
- return opts.parse(input.value);
39
- },
40
- currentView: function () {
41
- return views[dp.state.view];
42
- },
43
- open: function () {
44
- if (closing) {
45
- return;
46
- }
47
- if (!dp.el) {
48
- dp.el = createContainerElement(opts, dp.containerHTML);
49
- attachContainerEvents(dp);
50
- }
51
- selectedDate = constrainDate(dp.computeSelectedDate(), opts.min, opts.max);
52
- dp.state.hilightedDate = selectedDate || opts.hilightedDate;
53
- dp.state.view = 'day';
54
- dp.attachToDom();
55
- dp.render();
56
- emit('open');
57
- },
58
- isVisible: function () {
59
- return !!dp.el && !!dp.el.parentNode;
60
- },
61
- hasFocus: function () {
62
- var focused = document.activeElement;
63
- return dp.el &&
64
- dp.el.contains(focused) &&
65
- focused.className.indexOf('dp-focuser') < 0;
66
- },
67
- shouldHide: function () {
68
- return dp.isVisible();
69
- },
70
- close: function (becauseOfBlur) {
71
- var el = dp.el;
72
- if (!dp.isVisible()) {
73
- return;
74
- }
75
- if (el) {
76
- var parent = el.parentNode;
77
- parent && parent.removeChild(el);
78
- }
79
- closing = true;
80
- if (becauseOfBlur && dp.shouldFocusOnBlur) {
81
- focusInput(input);
82
- }
83
- // When we close, the input often gains refocus, which
84
- // can then launch the date picker again, so we buffer
85
- // a bit and don't show the date picker within N ms of closing
86
- setTimeout(function () {
87
- closing = false;
88
- }, 100);
89
- emit('close');
90
- },
91
- destroy: function () {
92
- dp.close();
93
- detatchInputEvents();
94
- },
95
- render: function () {
96
- if (!dp.el) {
97
- return;
98
- }
99
- var hadFocus = dp.hasFocus();
100
- var html = dp.currentView().render(dp);
101
- html && (dp.el.firstChild.innerHTML = html);
102
- dp.adjustPosition();
103
- if (hadFocus || dp.shouldFocusOnRender) {
104
- focusCurrent(dp);
105
- }
106
- },
107
- // Conceptually similar to setState in React, updates
108
- // the view state and re-renders.
109
- setState: function (state) {
110
- for (var key in state) {
111
- dp.state[key] = state[key];
112
- }
113
- emit('statechange');
114
- dp.render();
115
- },
116
- };
117
- detatchInputEvents = attachInputEvents(input, dp);
118
- // Builds the initial view state
119
- // selectedDate is a special case and causes changes to hilightedDate
120
- // hilightedDate is set on open, so remains undefined initially
121
- // view is the current view (day, month, year)
122
- function initialState() {
123
- return {
124
- get selectedDate() {
125
- return selectedDate;
126
- },
127
- set selectedDate(dt) {
128
- if (dt && !opts.inRange(dt)) {
129
- return;
130
- }
131
- if (dt) {
132
- selectedDate = new Date(dt);
133
- dp.state.hilightedDate = selectedDate;
134
- }
135
- else {
136
- selectedDate = dt;
137
- }
138
- dp.updateInput(selectedDate);
139
- emit('select');
140
- dp.close();
141
- },
142
- view: 'day',
143
- hilightedDate: undefined
144
- };
145
- }
146
- return dp;
147
- }
148
- function createContainerElement(opts, containerHTML) {
149
- var el = document.createElement('div');
150
- el.className = opts.mode;
151
- el.innerHTML = containerHTML;
152
- return el;
153
- }
154
- function attachInputEvents(input, dp) {
155
- var bufferShow = bufferFn(5, function () {
156
- if (dp.shouldHide()) {
157
- dp.close();
158
- }
159
- else {
160
- dp.open();
161
- }
162
- });
163
- var off = [
164
- on('blur', input, bufferFn(150, function () {
165
- if (!dp.hasFocus()) {
166
- dp.close(true);
167
- }
168
- })),
169
- on('mousedown', input, function () {
170
- if (input === document.activeElement && !dp.isVisible()) {
171
- bufferShow();
172
- }
173
- }),
174
- on('focus', input, bufferShow),
175
- on('input', input, function (e) {
176
- try {
177
- var date = dp.opts.parse(e.target.value);
178
- dp.setState({
179
- hilightedDate: date
180
- });
181
- }
182
- catch (e) {
183
- //ignore invalid dates while input
184
- }
185
- }),
186
- ];
187
- // Unregister all events that were registered above.
188
- return function () {
189
- off.forEach(function (f) {
190
- f();
191
- });
192
- };
193
- }
194
- function focusCurrent(dp) {
195
- var current = dp.el.querySelector('.dp-current');
196
- return current && current.focus();
197
- }
198
- function attachContainerEvents(dp) {
199
- var el = dp.el;
200
- var calEl = el.querySelector('.dp');
201
- // Hack to get iOS to show active CSS states
202
- el.ontouchstart = noop;
203
- function onClick(e) {
204
- e.target.className.split(' ').forEach(function (evt) {
205
- var handler = dp.currentView().onClick[evt];
206
- handler && handler(e, dp);
207
- });
208
- }
209
- // The calender fires a blur event *every* time we redraw
210
- // this means we need to buffer the blur event to see if
211
- // it still has no focus after redrawing, and only then
212
- // do we return focus to the input. A possible other approach
213
- // would be to set context.redrawing = true on redraw and
214
- // set it to false in the blur event.
215
- on('blur', calEl, bufferFn(150, function () {
216
- if (!dp.hasFocus()) {
217
- dp.close(true);
218
- }
219
- }));
220
- on('keydown', el, function (e) {
221
- if (e.keyCode === Key.enter) {
222
- onClick(e);
223
- }
224
- else {
225
- dp.currentView().onKeyDown(e, dp);
226
- }
227
- });
228
- // If the user clicks in non-focusable space, but
229
- // still within the date picker, we don't want to
230
- // hide, so we need to hack some things...
231
- on('mousedown', calEl, function (e) {
232
- e.target.focus && e.target.focus(); // IE hack
233
- if (document.activeElement !== e.target) {
234
- e.preventDefault();
235
- focusCurrent(dp);
236
- }
237
- });
238
- on('click', el, onClick);
239
- }
240
- function focusInput(input) {
241
- // When the modal closes, we need to focus the original input so the
242
- // user can continue tabbing from where they left off.
243
- input.focus();
244
- // iOS zonks out if we don't blur the input, so...
245
- if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) {
246
- input.blur();
247
- }
248
- }
1
+ /**
2
+ * @file Defines the base date picker behavior, overridden by various modes.
3
+ */
4
+ import dayPicker from '../views/day-picker';
5
+ import monthPicker from '../views/month-picker';
6
+ import yearPicker from '../views/year-picker';
7
+ import { bufferFn, noop } from '../lib/fns';
8
+ import { on, CustomEvent, Key } from '../lib/dom';
9
+ import { constrainDate } from '../lib/date-manip';
10
+ var views = {
11
+ day: dayPicker,
12
+ year: yearPicker,
13
+ month: monthPicker
14
+ };
15
+ export default function BaseMode(input, emit, opts) {
16
+ var detatchInputEvents; // A function that detaches all events from the input
17
+ var closing = false; // A hack to prevent calendar from re-opening when closing.
18
+ var selectedDate; // The currently selected date
19
+ var dp = {
20
+ // The root DOM element for the date picker, initialized on first open.
21
+ el: undefined,
22
+ opts: opts,
23
+ shouldFocusOnBlur: true,
24
+ shouldFocusOnRender: true,
25
+ state: initialState(),
26
+ adjustPosition: noop,
27
+ containerHTML: '<div class="dp"></div>',
28
+ attachToDom: function () {
29
+ opts.appendTo.appendChild(dp.el);
30
+ },
31
+ updateInput: function (selectedDate) {
32
+ var e = new CustomEvent('change', { bubbles: true });
33
+ e.simulated = true;
34
+ input.value = selectedDate ? opts.format(selectedDate) : '';
35
+ input.dispatchEvent(e);
36
+ },
37
+ computeSelectedDate: function () {
38
+ return opts.parse(input.value);
39
+ },
40
+ currentView: function () {
41
+ return views[dp.state.view];
42
+ },
43
+ open: function () {
44
+ if (closing) {
45
+ return;
46
+ }
47
+ if (!dp.el) {
48
+ dp.el = createContainerElement(opts, dp.containerHTML);
49
+ attachContainerEvents(dp);
50
+ }
51
+ selectedDate = constrainDate(dp.computeSelectedDate(), opts.min, opts.max);
52
+ dp.state.hilightedDate = selectedDate || opts.hilightedDate;
53
+ dp.state.view = 'day';
54
+ dp.attachToDom();
55
+ dp.render();
56
+ emit('open');
57
+ },
58
+ isVisible: function () {
59
+ return !!dp.el && !!dp.el.parentNode;
60
+ },
61
+ hasFocus: function () {
62
+ var focused = document.activeElement;
63
+ return dp.el &&
64
+ dp.el.contains(focused) &&
65
+ focused.className.indexOf('dp-focuser') < 0;
66
+ },
67
+ shouldHide: function () {
68
+ return dp.isVisible();
69
+ },
70
+ close: function (becauseOfBlur) {
71
+ var el = dp.el;
72
+ if (!dp.isVisible()) {
73
+ return;
74
+ }
75
+ if (el) {
76
+ var parent = el.parentNode;
77
+ parent && parent.removeChild(el);
78
+ }
79
+ closing = true;
80
+ if (becauseOfBlur && dp.shouldFocusOnBlur) {
81
+ focusInput(input);
82
+ }
83
+ // When we close, the input often gains refocus, which
84
+ // can then launch the date picker again, so we buffer
85
+ // a bit and don't show the date picker within N ms of closing
86
+ setTimeout(function () {
87
+ closing = false;
88
+ }, 100);
89
+ emit('close');
90
+ },
91
+ destroy: function () {
92
+ dp.close();
93
+ detatchInputEvents();
94
+ },
95
+ render: function () {
96
+ if (!dp.el) {
97
+ return;
98
+ }
99
+ var hadFocus = dp.hasFocus();
100
+ var html = dp.currentView().render(dp);
101
+ html && (dp.el.firstChild.innerHTML = html);
102
+ dp.adjustPosition();
103
+ if (hadFocus || dp.shouldFocusOnRender) {
104
+ focusCurrent(dp);
105
+ }
106
+ },
107
+ // Conceptually similar to setState in React, updates
108
+ // the view state and re-renders.
109
+ setState: function (state) {
110
+ for (var key in state) {
111
+ dp.state[key] = state[key];
112
+ }
113
+ emit('statechange');
114
+ dp.render();
115
+ },
116
+ };
117
+ detatchInputEvents = attachInputEvents(input, dp);
118
+ // Builds the initial view state
119
+ // selectedDate is a special case and causes changes to hilightedDate
120
+ // hilightedDate is set on open, so remains undefined initially
121
+ // view is the current view (day, month, year)
122
+ function initialState() {
123
+ return {
124
+ get selectedDate() {
125
+ return selectedDate;
126
+ },
127
+ set selectedDate(dt) {
128
+ if (dt && !opts.inRange(dt)) {
129
+ return;
130
+ }
131
+ if (dt) {
132
+ selectedDate = new Date(dt);
133
+ dp.state.hilightedDate = selectedDate;
134
+ }
135
+ else {
136
+ selectedDate = dt;
137
+ }
138
+ dp.updateInput(selectedDate);
139
+ emit('select');
140
+ dp.close();
141
+ },
142
+ view: 'day',
143
+ hilightedDate: undefined
144
+ };
145
+ }
146
+ return dp;
147
+ }
148
+ function createContainerElement(opts, containerHTML) {
149
+ var el = document.createElement('div');
150
+ el.className = opts.mode;
151
+ el.innerHTML = containerHTML;
152
+ return el;
153
+ }
154
+ function attachInputEvents(input, dp) {
155
+ var bufferShow = bufferFn(5, function () {
156
+ if (dp.shouldHide()) {
157
+ dp.close();
158
+ }
159
+ else {
160
+ dp.open();
161
+ }
162
+ });
163
+ var off = [
164
+ on('blur', input, bufferFn(150, function () {
165
+ if (!dp.hasFocus()) {
166
+ dp.close(true);
167
+ }
168
+ })),
169
+ on('mousedown', input, function () {
170
+ if (input === document.activeElement && !dp.isVisible()) {
171
+ bufferShow();
172
+ }
173
+ }),
174
+ on('focus', input, bufferShow),
175
+ on('input', input, function (e) {
176
+ try {
177
+ var date = dp.opts.parse(e.target.value);
178
+ dp.setState({
179
+ hilightedDate: date
180
+ });
181
+ }
182
+ catch (e) {
183
+ //ignore invalid dates while input
184
+ }
185
+ }),
186
+ ];
187
+ // Unregister all events that were registered above.
188
+ return function () {
189
+ off.forEach(function (f) {
190
+ f();
191
+ });
192
+ };
193
+ }
194
+ function focusCurrent(dp) {
195
+ var current = dp.el.querySelector('.dp-current');
196
+ return current && current.focus();
197
+ }
198
+ function attachContainerEvents(dp) {
199
+ var el = dp.el;
200
+ var calEl = el.querySelector('.dp');
201
+ // Hack to get iOS to show active CSS states
202
+ el.ontouchstart = noop;
203
+ function onClick(e) {
204
+ e.target.className.split(' ').forEach(function (evt) {
205
+ var handler = dp.currentView().onClick[evt];
206
+ handler && handler(e, dp);
207
+ });
208
+ }
209
+ // The calender fires a blur event *every* time we redraw
210
+ // this means we need to buffer the blur event to see if
211
+ // it still has no focus after redrawing, and only then
212
+ // do we return focus to the input. A possible other approach
213
+ // would be to set context.redrawing = true on redraw and
214
+ // set it to false in the blur event.
215
+ on('blur', calEl, bufferFn(150, function () {
216
+ if (!dp.hasFocus()) {
217
+ dp.close(true);
218
+ }
219
+ }));
220
+ on('keydown', el, function (e) {
221
+ if (e.keyCode === Key.enter) {
222
+ onClick(e);
223
+ }
224
+ else {
225
+ dp.currentView().onKeyDown(e, dp);
226
+ }
227
+ });
228
+ // If the user clicks in non-focusable space, but
229
+ // still within the date picker, we don't want to
230
+ // hide, so we need to hack some things...
231
+ on('mousedown', calEl, function (e) {
232
+ e.target.focus && e.target.focus(); // IE hack
233
+ if (document.activeElement !== e.target) {
234
+ e.preventDefault();
235
+ focusCurrent(dp);
236
+ }
237
+ });
238
+ on('click', el, onClick);
239
+ }
240
+ function focusInput(input) {
241
+ // When the modal closes, we need to focus the original input so the
242
+ // user can continue tabbing from where they left off.
243
+ input.focus();
244
+ // iOS zonks out if we don't blur the input, so...
245
+ if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) {
246
+ input.blur();
247
+ }
248
+ }
@@ -1,28 +1,28 @@
1
- /**
2
- * @file Defines the dropdown date picker behavior.
3
- */
4
- export default function DropdownMode(input: any, emit: any, opts: any): {
5
- el: any;
6
- opts: any;
7
- shouldFocusOnBlur: boolean;
8
- shouldFocusOnRender: boolean;
9
- state: {
10
- selectedDate: Date;
11
- view: string;
12
- hilightedDate: any;
13
- };
14
- adjustPosition: typeof import("../lib/fns").noop;
15
- containerHTML: string;
16
- attachToDom: () => void;
17
- updateInput: (selectedDate: any) => void;
18
- computeSelectedDate: () => any;
19
- currentView: () => any;
20
- open: () => void;
21
- isVisible: () => boolean;
22
- hasFocus: () => boolean;
23
- shouldHide: () => boolean;
24
- close: (becauseOfBlur?: boolean) => void;
25
- destroy: () => void;
26
- render: () => void;
27
- setState: (state: any) => void;
28
- };
1
+ /**
2
+ * @file Defines the dropdown date picker behavior.
3
+ */
4
+ export default function DropdownMode(input: any, emit: any, opts: any): {
5
+ el: any;
6
+ opts: any;
7
+ shouldFocusOnBlur: boolean;
8
+ shouldFocusOnRender: boolean;
9
+ state: {
10
+ selectedDate: Date;
11
+ view: string;
12
+ hilightedDate: any;
13
+ };
14
+ adjustPosition: typeof import("../lib/fns").noop;
15
+ containerHTML: string;
16
+ attachToDom: () => void;
17
+ updateInput: (selectedDate: any) => void;
18
+ computeSelectedDate: () => any;
19
+ currentView: () => any;
20
+ open: () => void;
21
+ isVisible: () => boolean;
22
+ hasFocus: () => boolean;
23
+ shouldHide: () => boolean;
24
+ close: (becauseOfBlur?: boolean) => void;
25
+ destroy: () => void;
26
+ render: () => void;
27
+ setState: (state: any) => void;
28
+ };
@@ -1,50 +1,50 @@
1
- /**
2
- * @file Defines the dropdown date picker behavior.
3
- */
4
- import BaseMode from './base-mode';
5
- export default function DropdownMode(input, emit, opts) {
6
- var dp = BaseMode(input, emit, opts);
7
- dp.shouldFocusOnBlur = false;
8
- Object.defineProperty(dp, 'shouldFocusOnRender', {
9
- get: function () {
10
- return input !== document.activeElement;
11
- }
12
- });
13
- dp.adjustPosition = function () {
14
- autoPosition(input, dp);
15
- };
16
- return dp;
17
- }
18
- function autoPosition(input, dp) {
19
- var inputPos = input.getBoundingClientRect();
20
- var win = window;
21
- adjustCalY(dp, inputPos, win);
22
- adjustCalX(dp, inputPos, win);
23
- dp.el.style.visibility = '';
24
- }
25
- function adjustCalX(dp, inputPos, win) {
26
- var cal = dp.el;
27
- var scrollLeft = win.pageXOffset;
28
- var inputLeft = inputPos.left + scrollLeft;
29
- var maxRight = win.innerWidth + scrollLeft;
30
- var offsetWidth = cal.offsetWidth;
31
- var calRight = inputLeft + offsetWidth;
32
- var shiftedLeft = maxRight - offsetWidth;
33
- var left = calRight > maxRight && shiftedLeft > 0 ? shiftedLeft : inputLeft;
34
- cal.style.left = left + 'px';
35
- }
36
- function adjustCalY(dp, inputPos, win) {
37
- var cal = dp.el;
38
- var scrollTop = win.pageYOffset;
39
- var inputTop = scrollTop + inputPos.top;
40
- var calHeight = cal.offsetHeight;
41
- var belowTop = inputTop + inputPos.height + 8;
42
- var aboveTop = inputTop - calHeight - 8;
43
- var isAbove = (aboveTop > 0 && belowTop + calHeight > scrollTop + win.innerHeight);
44
- var top = isAbove ? aboveTop : belowTop;
45
- if (cal.classList) {
46
- cal.classList.toggle('dp-is-above', isAbove);
47
- cal.classList.toggle('dp-is-below', !isAbove);
48
- }
49
- cal.style.top = top + 'px';
50
- }
1
+ /**
2
+ * @file Defines the dropdown date picker behavior.
3
+ */
4
+ import BaseMode from './base-mode';
5
+ export default function DropdownMode(input, emit, opts) {
6
+ var dp = BaseMode(input, emit, opts);
7
+ dp.shouldFocusOnBlur = false;
8
+ Object.defineProperty(dp, 'shouldFocusOnRender', {
9
+ get: function () {
10
+ return input !== document.activeElement;
11
+ }
12
+ });
13
+ dp.adjustPosition = function () {
14
+ autoPosition(input, dp);
15
+ };
16
+ return dp;
17
+ }
18
+ function autoPosition(input, dp) {
19
+ var inputPos = input.getBoundingClientRect();
20
+ var win = window;
21
+ adjustCalY(dp, inputPos, win);
22
+ adjustCalX(dp, inputPos, win);
23
+ dp.el.style.visibility = '';
24
+ }
25
+ function adjustCalX(dp, inputPos, win) {
26
+ var cal = dp.el;
27
+ var scrollLeft = win.pageXOffset;
28
+ var inputLeft = inputPos.left + scrollLeft;
29
+ var maxRight = win.innerWidth + scrollLeft;
30
+ var offsetWidth = cal.offsetWidth;
31
+ var calRight = inputLeft + offsetWidth;
32
+ var shiftedLeft = maxRight - offsetWidth;
33
+ var left = calRight > maxRight && shiftedLeft > 0 ? shiftedLeft : inputLeft;
34
+ cal.style.left = left + 'px';
35
+ }
36
+ function adjustCalY(dp, inputPos, win) {
37
+ var cal = dp.el;
38
+ var scrollTop = win.pageYOffset;
39
+ var inputTop = scrollTop + inputPos.top;
40
+ var calHeight = cal.offsetHeight;
41
+ var belowTop = inputTop + inputPos.height + 8;
42
+ var aboveTop = inputTop - calHeight - 8;
43
+ var isAbove = (aboveTop > 0 && belowTop + calHeight > scrollTop + win.innerHeight);
44
+ var top = isAbove ? aboveTop : belowTop;
45
+ if (cal.classList) {
46
+ cal.classList.toggle('dp-is-above', isAbove);
47
+ cal.classList.toggle('dp-is-below', !isAbove);
48
+ }
49
+ cal.style.top = top + 'px';
50
+ }