@deephaven/components 0.22.3-beta.18 → 0.22.3-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AutoCompleteInput.js +12 -85
- package/dist/AutoCompleteInput.js.map +1 -1
- package/dist/AutoResizeTextarea.d.ts +5 -5
- package/dist/AutoResizeTextarea.d.ts.map +1 -1
- package/dist/AutoResizeTextarea.js +8 -23
- package/dist/AutoResizeTextarea.js.map +1 -1
- package/dist/BasicModal.d.ts +28 -1
- package/dist/BasicModal.d.ts.map +1 -1
- package/dist/BasicModal.js +2 -8
- package/dist/BasicModal.js.map +1 -1
- package/dist/Button.js +8 -34
- package/dist/Button.js.map +1 -1
- package/dist/ButtonGroup.d.ts +6 -6
- package/dist/ButtonGroup.d.ts.map +1 -1
- package/dist/ButtonGroup.js +2 -4
- package/dist/ButtonGroup.js.map +1 -1
- package/dist/ButtonOld.js.map +1 -1
- package/dist/CardFlip.d.ts +1 -1
- package/dist/CardFlip.d.ts.map +1 -1
- package/dist/CardFlip.js +2 -7
- package/dist/CardFlip.js.map +1 -1
- package/dist/Checkbox.js +3 -14
- package/dist/Checkbox.js.map +1 -1
- package/dist/Collapse.js +0 -15
- package/dist/Collapse.js.map +1 -1
- package/dist/ComboBox.js +4 -83
- package/dist/ComboBox.js.map +1 -1
- package/dist/CopyButton.d.ts +1 -1
- package/dist/CopyButton.d.ts.map +1 -1
- package/dist/CopyButton.js +2 -4
- package/dist/CopyButton.js.map +1 -1
- package/dist/CustomTimeSelect.js +2 -86
- package/dist/CustomTimeSelect.js.map +1 -1
- package/dist/DateInput.js.map +1 -1
- package/dist/DateInputUtils.js +0 -7
- package/dist/DateInputUtils.js.map +1 -1
- package/dist/DateTimeInput.js +7 -10
- package/dist/DateTimeInput.js.map +1 -1
- package/dist/DebouncedSearchInput.js +0 -14
- package/dist/DebouncedSearchInput.js.map +1 -1
- package/dist/DragUtils.js +4 -16
- package/dist/DragUtils.js.map +1 -1
- package/dist/DraggableItemList.d.ts.map +1 -1
- package/dist/DraggableItemList.js +22 -44
- package/dist/DraggableItemList.js.map +1 -1
- package/dist/EditableItemList.d.ts +1 -1
- package/dist/EditableItemList.d.ts.map +1 -1
- package/dist/EditableItemList.js +2 -6
- package/dist/EditableItemList.js.map +1 -1
- package/dist/HierarchicalCheckboxMenu.js +6 -28
- package/dist/HierarchicalCheckboxMenu.js.map +1 -1
- package/dist/ItemList.d.ts.map +1 -1
- package/dist/ItemList.js +22 -115
- package/dist/ItemList.js.map +1 -1
- package/dist/ItemListItem.d.ts +0 -1
- package/dist/ItemListItem.d.ts.map +1 -1
- package/dist/ItemListItem.js +26 -50
- package/dist/ItemListItem.js.map +1 -1
- package/dist/LoadingOverlay.d.ts +1 -1
- package/dist/LoadingOverlay.d.ts.map +1 -1
- package/dist/LoadingOverlay.js +3 -5
- package/dist/LoadingOverlay.js.map +1 -1
- package/dist/LoadingSpinner.d.ts +1 -1
- package/dist/LoadingSpinner.d.ts.map +1 -1
- package/dist/LoadingSpinner.js +2 -4
- package/dist/LoadingSpinner.js.map +1 -1
- package/dist/MaskedInput.js +26 -85
- package/dist/MaskedInput.js.map +1 -1
- package/dist/Option.d.ts +1 -1
- package/dist/Option.d.ts.map +1 -1
- package/dist/Option.js +2 -4
- package/dist/Option.js.map +1 -1
- package/dist/RadioGroup.d.ts +1 -1
- package/dist/RadioGroup.d.ts.map +1 -1
- package/dist/RadioGroup.js +4 -6
- package/dist/RadioGroup.js.map +1 -1
- package/dist/RadioItem.js +0 -1
- package/dist/RadioItem.js.map +1 -1
- package/dist/SearchInput.js +2 -13
- package/dist/SearchInput.js.map +1 -1
- package/dist/Select.d.ts +1 -1
- package/dist/Select.d.ts.map +1 -1
- package/dist/Select.js +2 -4
- package/dist/Select.js.map +1 -1
- package/dist/SelectValueList.js +0 -28
- package/dist/SelectValueList.js.map +1 -1
- package/dist/SocketedButton.js.map +1 -1
- package/dist/ThemeExport.js +0 -4
- package/dist/ThemeExport.js.map +1 -1
- package/dist/TimeInput.js +2 -12
- package/dist/TimeInput.js.map +1 -1
- package/dist/TimeSlider.d.ts +1 -1
- package/dist/TimeSlider.d.ts.map +1 -1
- package/dist/TimeSlider.js +19 -33
- package/dist/TimeSlider.js.map +1 -1
- package/dist/ToastNotification.d.ts +4 -4
- package/dist/ToastNotification.d.ts.map +1 -1
- package/dist/ToastNotification.js +2 -4
- package/dist/ToastNotification.js.map +1 -1
- package/dist/UISwitch.d.ts +1 -1
- package/dist/UISwitch.d.ts.map +1 -1
- package/dist/UISwitch.js +2 -4
- package/dist/UISwitch.js.map +1 -1
- package/dist/ValidateLabelInput.d.ts.map +1 -1
- package/dist/ValidateLabelInput.js +3 -3
- package/dist/ValidateLabelInput.js.map +1 -1
- package/dist/context-actions/ContextActionUtils.js +9 -40
- package/dist/context-actions/ContextActionUtils.js.map +1 -1
- package/dist/context-actions/ContextActions.js +1 -34
- package/dist/context-actions/ContextActions.js.map +1 -1
- package/dist/context-actions/ContextMenu.js +29 -110
- package/dist/context-actions/ContextMenu.js.map +1 -1
- package/dist/context-actions/ContextMenuItem.d.ts.map +1 -1
- package/dist/context-actions/ContextMenuItem.js +3 -19
- package/dist/context-actions/ContextMenuItem.js.map +1 -1
- package/dist/context-actions/ContextMenuRoot.js +7 -26
- package/dist/context-actions/ContextMenuRoot.js.map +1 -1
- package/dist/context-actions/GlobalContextAction.js +0 -15
- package/dist/context-actions/GlobalContextAction.js.map +1 -1
- package/dist/context-actions/GlobalContextActions.js +0 -6
- package/dist/context-actions/GlobalContextActions.js.map +1 -1
- package/dist/context-actions/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/menu-actions/DropdownMenu.js +4 -32
- package/dist/menu-actions/DropdownMenu.js.map +1 -1
- package/dist/menu-actions/Menu.js +7 -52
- package/dist/menu-actions/Menu.js.map +1 -1
- package/dist/menu-actions/index.d.ts +2 -1
- package/dist/menu-actions/index.d.ts.map +1 -1
- package/dist/menu-actions/index.js +2 -2
- package/dist/menu-actions/index.js.map +1 -1
- package/dist/modal/Modal.d.ts +2 -2
- package/dist/modal/Modal.d.ts.map +1 -1
- package/dist/modal/Modal.js +3 -9
- package/dist/modal/Modal.js.map +1 -1
- package/dist/modal/ModalBody.d.ts +1 -1
- package/dist/modal/ModalBody.d.ts.map +1 -1
- package/dist/modal/ModalBody.js +2 -4
- package/dist/modal/ModalBody.js.map +1 -1
- package/dist/modal/ModalFooter.d.ts +1 -1
- package/dist/modal/ModalFooter.d.ts.map +1 -1
- package/dist/modal/ModalFooter.js +2 -4
- package/dist/modal/ModalFooter.js.map +1 -1
- package/dist/modal/ModalHeader.d.ts +1 -1
- package/dist/modal/ModalHeader.d.ts.map +1 -1
- package/dist/modal/ModalHeader.js +2 -4
- package/dist/modal/ModalHeader.js.map +1 -1
- package/dist/modal/index.js.map +1 -1
- package/dist/navigation/Menu.d.ts +1 -1
- package/dist/navigation/Menu.d.ts.map +1 -1
- package/dist/navigation/Menu.js +2 -2
- package/dist/navigation/Menu.js.map +1 -1
- package/dist/navigation/MenuItem.d.ts +1 -1
- package/dist/navigation/MenuItem.d.ts.map +1 -1
- package/dist/navigation/MenuItem.js +4 -7
- package/dist/navigation/MenuItem.js.map +1 -1
- package/dist/navigation/Page.d.ts +1 -1
- package/dist/navigation/Page.d.ts.map +1 -1
- package/dist/navigation/Page.js +2 -3
- package/dist/navigation/Page.js.map +1 -1
- package/dist/navigation/Stack.d.ts +1 -1
- package/dist/navigation/Stack.d.ts.map +1 -1
- package/dist/navigation/Stack.js +3 -6
- package/dist/navigation/Stack.js.map +1 -1
- package/dist/navigation/index.js.map +1 -1
- package/dist/popper/Popper.d.ts.map +1 -1
- package/dist/popper/Popper.js +13 -46
- package/dist/popper/Popper.js.map +1 -1
- package/dist/popper/Tooltip.js +0 -56
- package/dist/popper/Tooltip.js.map +1 -1
- package/dist/popper/index.js.map +1 -1
- package/dist/shortcuts/GlobalShortcuts.js.map +1 -1
- package/dist/shortcuts/Shortcut.js +19 -76
- package/dist/shortcuts/Shortcut.js.map +1 -1
- package/dist/shortcuts/ShortcutRegistry.js +3 -18
- package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
- package/dist/shortcuts/index.js.map +1 -1
- package/package.json +8 -8
package/dist/MaskedInput.js
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
2
|
-
|
|
3
2
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
-
|
|
5
3
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
-
|
|
7
4
|
import React, { useMemo, useEffect, useCallback } from 'react';
|
|
8
5
|
import classNames from 'classnames';
|
|
9
6
|
import Log from '@deephaven/log';
|
|
@@ -15,15 +12,16 @@ var SELECTION_DIRECTION = {
|
|
|
15
12
|
BACKWARD: 'backward',
|
|
16
13
|
NONE: 'none'
|
|
17
14
|
};
|
|
15
|
+
|
|
18
16
|
/**
|
|
19
17
|
* Special space character that's the same size as tabular numbers
|
|
20
18
|
* https://www.fileformat.info/info/unicode/char/2007/index.htm
|
|
21
19
|
*/
|
|
22
|
-
|
|
23
20
|
var FIXED_WIDTH_SPACE = '\u2007';
|
|
24
21
|
export function DEFAULT_GET_PREFERRED_REPLACEMENT_STRING(value, replaceIndex, newChar) {
|
|
25
22
|
return value.substring(0, replaceIndex) + newChar + value.substring(replaceIndex + 1);
|
|
26
23
|
}
|
|
24
|
+
|
|
27
25
|
/**
|
|
28
26
|
* Fill the string on the right side with the example value to the given length
|
|
29
27
|
* @param checkValue Initial string to pad
|
|
@@ -31,22 +29,20 @@ export function DEFAULT_GET_PREFERRED_REPLACEMENT_STRING(value, replaceIndex, ne
|
|
|
31
29
|
* @param length Target length
|
|
32
30
|
* @returns String padded with the given example value
|
|
33
31
|
*/
|
|
34
|
-
|
|
35
32
|
export function fillToLength(checkValue, exampleValue, length) {
|
|
36
33
|
return checkValue.length < length ? "".concat(checkValue).concat(exampleValue.substring(checkValue.length, length)) : checkValue;
|
|
37
34
|
}
|
|
35
|
+
|
|
38
36
|
/**
|
|
39
37
|
* Trim all characters matching the empty mask on the right side of the given value
|
|
40
38
|
* @param value String to trim
|
|
41
39
|
* @param emptyMask Empty mask
|
|
42
40
|
* @returns Trimmed string
|
|
43
41
|
*/
|
|
44
|
-
|
|
45
42
|
export function trimTrailingMask(value, emptyMask) {
|
|
46
43
|
var {
|
|
47
44
|
length
|
|
48
45
|
} = value;
|
|
49
|
-
|
|
50
46
|
for (var i = value.length - 1; i >= 0; i -= 1) {
|
|
51
47
|
if (emptyMask[i] === value[i]) {
|
|
52
48
|
length = i;
|
|
@@ -54,10 +50,8 @@ export function trimTrailingMask(value, emptyMask) {
|
|
|
54
50
|
break;
|
|
55
51
|
}
|
|
56
52
|
}
|
|
57
|
-
|
|
58
53
|
return value.substring(0, length);
|
|
59
54
|
}
|
|
60
|
-
|
|
61
55
|
/**
|
|
62
56
|
* A masked input for entering data from a template.
|
|
63
57
|
* Won't work by itself, must use within another component and handle updating the value/selection.
|
|
@@ -87,7 +81,6 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
87
81
|
useEffect(function setSelectedSegment() {
|
|
88
82
|
if (selection != null) {
|
|
89
83
|
var _input$current;
|
|
90
|
-
|
|
91
84
|
log.debug('setting selection...', selection);
|
|
92
85
|
var {
|
|
93
86
|
selectionStart: _selectionStart,
|
|
@@ -98,32 +91,27 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
98
91
|
log.debug('selection set!');
|
|
99
92
|
}
|
|
100
93
|
}, [selection, input]);
|
|
94
|
+
|
|
101
95
|
/**
|
|
102
96
|
* Returns the selection range for the segment at the given cursor position
|
|
103
97
|
* @param cursorPosition The current position of the cursor
|
|
104
98
|
*/
|
|
105
|
-
|
|
106
99
|
var getSegment = useCallback(cursorPosition => {
|
|
107
100
|
var selectionStart = cursorPosition;
|
|
108
101
|
var selectionEnd = cursorPosition;
|
|
109
102
|
var testValue = examples.length > 0 ? examples[0] : value;
|
|
110
|
-
|
|
111
103
|
for (var i = selectionStart - 1; i >= 0; i -= 1) {
|
|
112
104
|
if (!/[a-zA-Z0-9]/g.test(testValue.charAt(i))) {
|
|
113
105
|
break;
|
|
114
106
|
}
|
|
115
|
-
|
|
116
107
|
selectionStart = i;
|
|
117
108
|
}
|
|
118
|
-
|
|
119
109
|
for (var _i = selectionEnd; _i < testValue.length; _i += 1) {
|
|
120
110
|
if (!/[a-zA-Z0-9]/g.test(testValue.charAt(_i))) {
|
|
121
111
|
break;
|
|
122
112
|
}
|
|
123
|
-
|
|
124
113
|
selectionEnd = _i + 1;
|
|
125
114
|
}
|
|
126
|
-
|
|
127
115
|
var selectionDirection = selectionStart === selectionEnd ? SELECTION_DIRECTION.NONE : SELECTION_DIRECTION.BACKWARD;
|
|
128
116
|
return {
|
|
129
117
|
selectionStart,
|
|
@@ -131,6 +119,7 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
131
119
|
selectionDirection
|
|
132
120
|
};
|
|
133
121
|
}, [examples, value]);
|
|
122
|
+
|
|
134
123
|
/**
|
|
135
124
|
* Replaces all blank spaces and everything after the current cursor position with the example value
|
|
136
125
|
* @param checkValue The value to check/fill in
|
|
@@ -138,11 +127,9 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
138
127
|
* @param cursorPosition The cursor position
|
|
139
128
|
* @returns The filled in value
|
|
140
129
|
*/
|
|
141
|
-
|
|
142
130
|
function fillValue(checkValue, exampleValue) {
|
|
143
131
|
var cursorPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : checkValue.length;
|
|
144
132
|
var filledValue = '';
|
|
145
|
-
|
|
146
133
|
for (var i = 0; i < cursorPosition; i += 1) {
|
|
147
134
|
if (checkValue.charAt(i) !== FIXED_WIDTH_SPACE) {
|
|
148
135
|
filledValue = filledValue.concat(checkValue[i]);
|
|
@@ -150,101 +137,82 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
150
137
|
filledValue = filledValue.concat(exampleValue[i]);
|
|
151
138
|
}
|
|
152
139
|
}
|
|
153
|
-
|
|
154
140
|
filledValue = filledValue.concat(exampleValue.substring(cursorPosition));
|
|
155
141
|
return filledValue;
|
|
156
142
|
}
|
|
143
|
+
|
|
157
144
|
/**
|
|
158
145
|
* Checks if a given `value` is valid up until the `cursorPosition`.
|
|
159
146
|
* Uses the examples to build the rest of the string
|
|
160
147
|
* @param checkValue The value to check validity of
|
|
161
148
|
* @param cursorPosition The position of the cursor to check up to
|
|
162
149
|
*/
|
|
163
|
-
|
|
164
|
-
|
|
165
150
|
function isValid(checkValue) {
|
|
166
151
|
var cursorPosition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : checkValue.length;
|
|
167
152
|
var patternRegex = new RegExp("^".concat(pattern, "$"));
|
|
168
|
-
|
|
169
153
|
if (patternRegex.test(checkValue)) {
|
|
170
154
|
return true;
|
|
171
155
|
}
|
|
172
|
-
|
|
173
156
|
for (var i = 0; i < examples.length; i += 1) {
|
|
174
157
|
var filledValue = fillValue(checkValue, examples[i], cursorPosition);
|
|
175
|
-
|
|
176
158
|
if (patternRegex.test(filledValue)) {
|
|
177
159
|
return true;
|
|
178
160
|
}
|
|
179
161
|
}
|
|
180
|
-
|
|
181
162
|
return false;
|
|
182
163
|
}
|
|
164
|
+
|
|
183
165
|
/**
|
|
184
166
|
* Returns the next segment after the given position
|
|
185
167
|
* @param position The cursor position to start at
|
|
186
168
|
* @returns The new selection range
|
|
187
169
|
*/
|
|
188
|
-
|
|
189
|
-
|
|
190
170
|
function nextSegment(position) {
|
|
191
171
|
var currentSegment = getSegment(position);
|
|
192
172
|
var nextPosition = currentSegment.selectionEnd + 1;
|
|
193
|
-
|
|
194
173
|
if (nextPosition >= value.length) {
|
|
195
174
|
return currentSegment;
|
|
196
175
|
}
|
|
197
|
-
|
|
198
176
|
return getSegment(nextPosition);
|
|
199
177
|
}
|
|
178
|
+
|
|
200
179
|
/**
|
|
201
180
|
* Returns the previous segment before the given position
|
|
202
181
|
* @param position The cursor position to start at
|
|
203
182
|
* @returns The new selection range
|
|
204
183
|
*/
|
|
205
|
-
|
|
206
|
-
|
|
207
184
|
function previousSegment(position) {
|
|
208
185
|
var currentSegment = getSegment(position);
|
|
209
186
|
var previousPosition = currentSegment.selectionStart - 1;
|
|
210
|
-
|
|
211
187
|
if (previousPosition <= 0) {
|
|
212
188
|
return currentSegment;
|
|
213
189
|
}
|
|
214
|
-
|
|
215
190
|
return getSegment(previousPosition);
|
|
216
191
|
}
|
|
217
|
-
|
|
218
192
|
function nextSegmentValue(position, delta) {
|
|
219
193
|
var segment = getSegment(position);
|
|
220
194
|
var segmentValue = value.substring(segment.selectionStart, segment.selectionEnd);
|
|
221
195
|
var newSegmentValue = getNextSegmentValue(segment, delta, segmentValue, value);
|
|
222
196
|
var newValue = value.substring(0, segment.selectionStart) + newSegmentValue + value.substring(segment.selectionEnd);
|
|
223
|
-
|
|
224
197
|
if (isValid(newValue, segment.selectionEnd)) {
|
|
225
198
|
onChange(newValue);
|
|
226
199
|
onSelect(segment);
|
|
227
200
|
}
|
|
228
201
|
}
|
|
229
|
-
|
|
230
202
|
var handleSelect = useCallback(event => {
|
|
231
203
|
var {
|
|
232
204
|
selectionStart = 0,
|
|
233
205
|
selectionEnd = 0,
|
|
234
206
|
selectionDirection = 'none'
|
|
235
207
|
} = event.target;
|
|
236
|
-
|
|
237
208
|
if (selectionStart === null || selectionEnd === null || selectionDirection === null) {
|
|
238
209
|
log.error('Selection attempted on non-text input element', event.target);
|
|
239
210
|
return;
|
|
240
211
|
}
|
|
241
|
-
|
|
242
212
|
log.debug2('handleSelect', selectionStart, selectionEnd, selectionDirection);
|
|
243
|
-
|
|
244
213
|
if (selection != null && selectionStart === selection.selectionStart && selectionEnd === selection.selectionEnd) {
|
|
245
214
|
return;
|
|
246
215
|
}
|
|
247
|
-
|
|
248
216
|
if (selection != null && selectionStart === value.length && selectionEnd === value.length && event.nativeEvent.type !== 'mouseup') {
|
|
249
217
|
// React triggers onSelect event with the cursor at the end of the input content
|
|
250
218
|
// when the component is rendered at a different location in the DOM,
|
|
@@ -253,7 +221,6 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
253
221
|
onSelect(_objectSpread({}, selection));
|
|
254
222
|
return;
|
|
255
223
|
}
|
|
256
|
-
|
|
257
224
|
if (selectionStart === selectionEnd) {
|
|
258
225
|
var newSelection = getSegment(selectionStart);
|
|
259
226
|
log.debug('Selection segment from ', selectionStart, selectionEnd, '=>', newSelection);
|
|
@@ -268,28 +235,22 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
268
235
|
}, [getSegment, onSelect, selection, value]);
|
|
269
236
|
var handleSelectCapture = useCallback(event => {
|
|
270
237
|
var _input$current$select;
|
|
271
|
-
|
|
272
238
|
if (!input.current) {
|
|
273
239
|
return;
|
|
274
240
|
}
|
|
275
|
-
|
|
276
241
|
log.debug('handleSelectCapture', event);
|
|
277
242
|
var selectionStart = (_input$current$select = input.current.selectionStart) !== null && _input$current$select !== void 0 ? _input$current$select : 0;
|
|
278
|
-
|
|
279
243
|
if (selectionStart === value.length && selection != null && selectionStart !== selection.selectionStart) {
|
|
280
244
|
event.preventDefault();
|
|
281
245
|
event.stopPropagation();
|
|
282
246
|
}
|
|
283
247
|
}, [input, selection, value]);
|
|
284
|
-
|
|
285
248
|
function handleArrowKey(event) {
|
|
286
249
|
event.preventDefault();
|
|
287
250
|
event.stopPropagation();
|
|
288
|
-
|
|
289
251
|
if (!input.current) {
|
|
290
252
|
return;
|
|
291
253
|
}
|
|
292
|
-
|
|
293
254
|
var {
|
|
294
255
|
key
|
|
295
256
|
} = event;
|
|
@@ -297,12 +258,10 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
297
258
|
selectionStart = 0,
|
|
298
259
|
selectionEnd = 0
|
|
299
260
|
} = input.current;
|
|
300
|
-
|
|
301
261
|
if (selectionStart === null || selectionEnd === null) {
|
|
302
262
|
log.error('Selection arrow nvaigation attempted on non-text input element', event.target);
|
|
303
263
|
return;
|
|
304
264
|
}
|
|
305
|
-
|
|
306
265
|
if (key === 'ArrowLeft') {
|
|
307
266
|
onSelect(previousSegment(selectionStart));
|
|
308
267
|
} else if (key === 'ArrowRight') {
|
|
@@ -313,12 +272,10 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
313
272
|
nextSegmentValue(selectionStart, 1);
|
|
314
273
|
}
|
|
315
274
|
}
|
|
316
|
-
|
|
317
275
|
function handleKeyDown(event) {
|
|
318
276
|
if (!input.current) {
|
|
319
277
|
return;
|
|
320
278
|
}
|
|
321
|
-
|
|
322
279
|
log.debug('handleKeyDown', event);
|
|
323
280
|
var {
|
|
324
281
|
key
|
|
@@ -327,26 +284,24 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
327
284
|
selectionStart = 0,
|
|
328
285
|
selectionEnd = 0
|
|
329
286
|
} = input.current;
|
|
330
|
-
|
|
331
287
|
if (selectionStart === null || selectionEnd === null) {
|
|
332
288
|
log.error('Selection key event on non-text input element', event.target);
|
|
333
289
|
return;
|
|
334
290
|
}
|
|
335
|
-
|
|
336
291
|
if (key.startsWith('Arrow')) {
|
|
337
292
|
handleArrowKey(event);
|
|
338
293
|
return;
|
|
339
294
|
}
|
|
340
|
-
|
|
341
295
|
if (key === 'Delete' || key === 'Backspace') {
|
|
342
296
|
event.preventDefault();
|
|
343
|
-
event.stopPropagation();
|
|
297
|
+
event.stopPropagation();
|
|
344
298
|
|
|
299
|
+
// Deleting at the end of the value
|
|
345
300
|
if (selectionEnd >= trimTrailingMask(value, emptyMask).length) {
|
|
346
|
-
var newValue = value.substring(0,
|
|
301
|
+
var newValue = value.substring(0,
|
|
302
|
+
// Delete whole selection or just the char before the cursor
|
|
347
303
|
selectionStart === selectionEnd ? selectionStart - 1 : selectionStart);
|
|
348
304
|
var trimmedValue = trimTrailingMask(newValue, emptyMask);
|
|
349
|
-
|
|
350
305
|
if (trimmedValue !== value) {
|
|
351
306
|
onChange(trimmedValue);
|
|
352
307
|
onSelect({
|
|
@@ -355,14 +310,11 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
355
310
|
selectionDirection: SELECTION_DIRECTION.NONE
|
|
356
311
|
});
|
|
357
312
|
}
|
|
358
|
-
|
|
359
313
|
return;
|
|
360
314
|
}
|
|
361
|
-
|
|
362
315
|
if (selectionStart !== selectionEnd) {
|
|
363
316
|
// Replace all non-masked characters with blanks, set selection to start
|
|
364
317
|
var _newValue = value.substring(0, selectionStart) + value.substring(selectionStart, selectionEnd).replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) + value.substring(selectionEnd);
|
|
365
|
-
|
|
366
318
|
log.debug('Range ', selectionStart, selectionEnd, 'deleted, setting value', _newValue);
|
|
367
319
|
onChange(_newValue);
|
|
368
320
|
onSelect({
|
|
@@ -374,7 +326,6 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
374
326
|
for (var i = selectionStart - 1; i >= 0; i -= 1) {
|
|
375
327
|
// Only replace non placeholder text
|
|
376
328
|
var _newValue2 = value.substring(0, i) + value.substring(i, selectionStart).replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) + value.substring(selectionStart);
|
|
377
|
-
|
|
378
329
|
if (_newValue2 !== value) {
|
|
379
330
|
onChange(_newValue2);
|
|
380
331
|
onSelect({
|
|
@@ -386,30 +337,25 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
386
337
|
}
|
|
387
338
|
}
|
|
388
339
|
}
|
|
389
|
-
|
|
390
340
|
return;
|
|
391
341
|
}
|
|
392
|
-
|
|
393
342
|
if (event.altKey || event.metaKey || event.ctrlKey || key.length > 1) {
|
|
394
343
|
return;
|
|
395
344
|
}
|
|
396
|
-
|
|
397
345
|
event.preventDefault();
|
|
398
|
-
event.stopPropagation();
|
|
346
|
+
event.stopPropagation();
|
|
399
347
|
|
|
348
|
+
// Get the different permutations of the character they entered, remove duplicates
|
|
400
349
|
var newChars = Array.from(new Set([key, key.toUpperCase(), key.toLowerCase()]));
|
|
401
|
-
|
|
402
350
|
for (var _i2 = 0; _i2 < newChars.length; _i2 += 1) {
|
|
403
|
-
var newChar = newChars[_i2];
|
|
351
|
+
var newChar = newChars[_i2];
|
|
404
352
|
|
|
353
|
+
// If they're typing an alphanumeric character, be smart and allow it to jump ahead
|
|
405
354
|
var maxReplaceIndex = /[a-zA-Z0-9]/g.test(newChar) ? examples[0].length - 1 : selectionStart;
|
|
406
|
-
|
|
407
355
|
for (var _replaceIndex = selectionStart; _replaceIndex <= maxReplaceIndex; _replaceIndex += 1) {
|
|
408
356
|
// Fill with the example chars if necessary
|
|
409
357
|
var filledValue = fillToLength(value, examples[0], _replaceIndex + 1);
|
|
410
|
-
|
|
411
358
|
var _newValue3 = getPreferredReplacementString(filledValue, _replaceIndex, newChar, selectionStart, selectionEnd);
|
|
412
|
-
|
|
413
359
|
if (isValid(_newValue3, _replaceIndex + 1)) {
|
|
414
360
|
var currentSegment = getSegment(_replaceIndex);
|
|
415
361
|
var newSelectionStart = _replaceIndex + 1;
|
|
@@ -418,15 +364,12 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
418
364
|
selectionEnd: newSelectionStart,
|
|
419
365
|
selectionDirection: SELECTION_DIRECTION.NONE
|
|
420
366
|
};
|
|
421
|
-
|
|
422
367
|
if (newSelectionStart >= currentSegment.selectionEnd) {
|
|
423
368
|
var nextSegmentSelection = nextSegment(_replaceIndex);
|
|
424
|
-
|
|
425
369
|
if (nextSegmentSelection.selectionStart !== currentSegment.selectionStart) {
|
|
426
370
|
newSelection = nextSegmentSelection;
|
|
427
371
|
}
|
|
428
372
|
}
|
|
429
|
-
|
|
430
373
|
log.debug('handleKeyDown', key, '=>', _newValue3, newSelection);
|
|
431
374
|
onChange(_newValue3);
|
|
432
375
|
onSelect(newSelection);
|
|
@@ -434,9 +377,9 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
434
377
|
}
|
|
435
378
|
}
|
|
436
379
|
}
|
|
437
|
-
}
|
|
438
|
-
|
|
380
|
+
}
|
|
439
381
|
|
|
382
|
+
// Need to use "text" type so we can apply a pattern and make selection properly
|
|
440
383
|
return /*#__PURE__*/React.createElement("input", {
|
|
441
384
|
ref: input,
|
|
442
385
|
className: classNames('form-control masked-input', className),
|
|
@@ -456,23 +399,21 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
456
399
|
MaskedInput.defaultProps = {
|
|
457
400
|
className: '',
|
|
458
401
|
placeholder: undefined,
|
|
459
|
-
|
|
460
|
-
|
|
402
|
+
onChange() {
|
|
403
|
+
// no-op
|
|
461
404
|
},
|
|
462
|
-
|
|
463
|
-
|
|
405
|
+
onSelect() {
|
|
406
|
+
// no-op
|
|
464
407
|
},
|
|
465
|
-
|
|
466
408
|
getNextSegmentValue: (range, delta, segmentValue) => segmentValue,
|
|
467
409
|
getPreferredReplacementString: DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,
|
|
468
410
|
selection: undefined,
|
|
469
|
-
|
|
470
|
-
|
|
411
|
+
onFocus() {
|
|
412
|
+
// no-op
|
|
471
413
|
},
|
|
472
|
-
|
|
473
|
-
|
|
414
|
+
onBlur() {
|
|
415
|
+
// no-op
|
|
474
416
|
},
|
|
475
|
-
|
|
476
417
|
'data-testid': undefined
|
|
477
418
|
};
|
|
478
419
|
export default MaskedInput;
|
package/dist/MaskedInput.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MaskedInput.js","names":["React","useMemo","useEffect","useCallback","classNames","Log","useForwardedRef","log","module","SELECTION_DIRECTION","FORWARD","BACKWARD","NONE","FIXED_WIDTH_SPACE","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","value","replaceIndex","newChar","substring","fillToLength","checkValue","exampleValue","length","trimTrailingMask","emptyMask","i","MaskedInput","forwardRef","props","ref","className","example","getNextSegmentValue","range","delta","segmentValue","getPreferredReplacementString","onChange","onSelect","pattern","placeholder","selection","onFocus","onBlur","dataTestId","input","examples","Array","isArray","replace","setSelectedSegment","debug","selectionStart","selectionEnd","selectionDirection","current","setSelectionRange","getSegment","cursorPosition","testValue","test","charAt","fillValue","filledValue","concat","isValid","patternRegex","RegExp","nextSegment","position","currentSegment","nextPosition","previousSegment","previousPosition","nextSegmentValue","segment","newSegmentValue","newValue","handleSelect","event","target","error","debug2","nativeEvent","type","newSelection","handleSelectCapture","preventDefault","stopPropagation","handleArrowKey","key","handleKeyDown","startsWith","trimmedValue","altKey","metaKey","ctrlKey","newChars","from","Set","toUpperCase","toLowerCase","maxReplaceIndex","newSelectionStart","nextSegmentSelection","undefined","defaultProps"],"sources":["../src/MaskedInput.tsx"],"sourcesContent":["import React, { useMemo, useEffect, useCallback } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport { useForwardedRef } from '@deephaven/react-hooks';\nimport './MaskedInput.scss';\n\nconst log = Log.module('MaskedInput');\n\nconst SELECTION_DIRECTION = {\n FORWARD: 'forward',\n BACKWARD: 'backward',\n NONE: 'none',\n} as const;\n\n/**\n * Special space character that's the same size as tabular numbers\n * https://www.fileformat.info/info/unicode/char/2007/index.htm\n */\nconst FIXED_WIDTH_SPACE = '\\u2007';\n\nexport function DEFAULT_GET_PREFERRED_REPLACEMENT_STRING(\n value: string,\n replaceIndex: number,\n newChar: string\n): string {\n return (\n value.substring(0, replaceIndex) +\n newChar +\n value.substring(replaceIndex + 1)\n );\n}\n\n/**\n * Fill the string on the right side with the example value to the given length\n * @param checkValue Initial string to pad\n * @param exampleValue Example value\n * @param length Target length\n * @returns String padded with the given example value\n */\nexport function fillToLength(\n checkValue: string,\n exampleValue: string,\n length: number\n): string {\n return checkValue.length < length\n ? `${checkValue}${exampleValue.substring(checkValue.length, length)}`\n : checkValue;\n}\n\n/**\n * Trim all characters matching the empty mask on the right side of the given value\n * @param value String to trim\n * @param emptyMask Empty mask\n * @returns Trimmed string\n */\nexport function trimTrailingMask(value: string, emptyMask: string): string {\n let { length } = value;\n for (let i = value.length - 1; i >= 0; i -= 1) {\n if (emptyMask[i] === value[i]) {\n length = i;\n } else {\n break;\n }\n }\n return value.substring(0, length);\n}\n\nexport type SelectionSegment = {\n selectionStart: number;\n selectionEnd: number;\n selectionDirection?: typeof SELECTION_DIRECTION[keyof typeof SELECTION_DIRECTION];\n};\n\ntype MaskedInputProps = {\n /** An extra class name to add to the component */\n className?: string;\n /** The regex pattern this masked input must match */\n pattern: string;\n /** Input placeholder */\n placeholder?: string;\n /** The current value to display */\n value: string;\n /** One or more examples of valid values. Used when deciding if next keystroke is valid (as rest of the current value may be incomplete) */\n example: string | string[];\n /** The current selection to use for the input */\n selection?: SelectionSegment;\n /** Called when the value changes. Note the value may still be incomplete. */\n onChange?(value: string): void;\n /** Called when selection changes */\n onSelect?(segment: SelectionSegment): void;\n /** Retrieve the next value for a provided segment */\n getNextSegmentValue?(\n segment: SelectionSegment,\n delta: number,\n segmentValue: string,\n value: string\n ): string;\n getPreferredReplacementString?(\n value: string,\n replaceIndex: number,\n replaceChar: string,\n selectionStart: number,\n selectionEnd: number\n ): string;\n onFocus?: React.FocusEventHandler;\n onBlur?: React.FocusEventHandler;\n\n 'data-testid'?: string;\n};\n\n/**\n * A masked input for entering data from a template.\n * Won't work by itself, must use within another component and handle updating the value/selection.\n */\n// Forward ref causes a false positive for display-name in eslint:\n// https://github.com/yannickcr/eslint-plugin-react/issues/2269\n// eslint-disable-next-line react/display-name\nconst MaskedInput = React.forwardRef<HTMLInputElement, MaskedInputProps>(\n (props: MaskedInputProps, ref) => {\n const {\n className,\n example,\n getNextSegmentValue = (range, delta, segmentValue) => segmentValue,\n getPreferredReplacementString = DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n onChange = () => false,\n onSelect = () => false,\n pattern,\n placeholder,\n selection,\n value,\n onFocus = () => false,\n onBlur = () => false,\n 'data-testid': dataTestId,\n } = props;\n const input = useForwardedRef(ref);\n const examples = useMemo(\n () => (Array.isArray(example) ? example : [example]),\n [example]\n );\n const emptyMask = useMemo(\n () => examples[0].replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE),\n [examples]\n );\n\n useEffect(\n function setSelectedSegment() {\n if (selection != null) {\n log.debug('setting selection...', selection);\n const {\n selectionStart,\n selectionEnd,\n selectionDirection,\n } = selection;\n input.current?.setSelectionRange(\n selectionStart,\n selectionEnd,\n selectionDirection\n );\n log.debug('selection set!');\n }\n },\n [selection, input]\n );\n\n /**\n * Returns the selection range for the segment at the given cursor position\n * @param cursorPosition The current position of the cursor\n */\n const getSegment = useCallback(\n (cursorPosition: number) => {\n let selectionStart = cursorPosition;\n let selectionEnd = cursorPosition;\n const testValue = examples.length > 0 ? examples[0] : value;\n\n for (let i = selectionStart - 1; i >= 0; i -= 1) {\n if (!/[a-zA-Z0-9]/g.test(testValue.charAt(i))) {\n break;\n }\n\n selectionStart = i;\n }\n\n for (let i = selectionEnd; i < testValue.length; i += 1) {\n if (!/[a-zA-Z0-9]/g.test(testValue.charAt(i))) {\n break;\n }\n\n selectionEnd = i + 1;\n }\n\n const selectionDirection =\n selectionStart === selectionEnd\n ? SELECTION_DIRECTION.NONE\n : SELECTION_DIRECTION.BACKWARD;\n\n return {\n selectionStart,\n selectionEnd,\n selectionDirection,\n };\n },\n [examples, value]\n );\n\n /**\n * Replaces all blank spaces and everything after the current cursor position with the example value\n * @param checkValue The value to check/fill in\n * @param exampleValue The example to fill in the value from\n * @param cursorPosition The cursor position\n * @returns The filled in value\n */\n function fillValue(\n checkValue: string,\n exampleValue: string,\n cursorPosition = checkValue.length\n ): string {\n let filledValue = '';\n for (let i = 0; i < cursorPosition; i += 1) {\n if (checkValue.charAt(i) !== FIXED_WIDTH_SPACE) {\n filledValue = filledValue.concat(checkValue[i]);\n } else {\n filledValue = filledValue.concat(exampleValue[i]);\n }\n }\n filledValue = filledValue.concat(exampleValue.substring(cursorPosition));\n\n return filledValue;\n }\n\n /**\n * Checks if a given `value` is valid up until the `cursorPosition`.\n * Uses the examples to build the rest of the string\n * @param checkValue The value to check validity of\n * @param cursorPosition The position of the cursor to check up to\n */\n function isValid(\n checkValue: string,\n cursorPosition = checkValue.length\n ): boolean {\n const patternRegex = new RegExp(`^${pattern}$`);\n if (patternRegex.test(checkValue)) {\n return true;\n }\n\n for (let i = 0; i < examples.length; i += 1) {\n const filledValue = fillValue(checkValue, examples[i], cursorPosition);\n if (patternRegex.test(filledValue)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Returns the next segment after the given position\n * @param position The cursor position to start at\n * @returns The new selection range\n */\n function nextSegment(position: number): SelectionSegment {\n const currentSegment = getSegment(position);\n const nextPosition = currentSegment.selectionEnd + 1;\n if (nextPosition >= value.length) {\n return currentSegment;\n }\n\n return getSegment(nextPosition);\n }\n\n /**\n * Returns the previous segment before the given position\n * @param position The cursor position to start at\n * @returns The new selection range\n */\n function previousSegment(position: number): SelectionSegment {\n const currentSegment = getSegment(position);\n const previousPosition = currentSegment.selectionStart - 1;\n if (previousPosition <= 0) {\n return currentSegment;\n }\n\n return getSegment(previousPosition);\n }\n\n function nextSegmentValue(position: number, delta: number): void {\n const segment = getSegment(position);\n const segmentValue = value.substring(\n segment.selectionStart,\n segment.selectionEnd\n );\n const newSegmentValue = getNextSegmentValue(\n segment,\n delta,\n segmentValue,\n value\n );\n const newValue =\n value.substring(0, segment.selectionStart) +\n newSegmentValue +\n value.substring(segment.selectionEnd);\n if (isValid(newValue, segment.selectionEnd)) {\n onChange(newValue);\n onSelect(segment);\n }\n }\n\n const handleSelect = useCallback(\n (event: React.UIEvent<HTMLInputElement>) => {\n const {\n selectionStart = 0,\n selectionEnd = 0,\n selectionDirection = 'none',\n } = event.target as HTMLInputElement;\n\n if (\n selectionStart === null ||\n selectionEnd === null ||\n selectionDirection === null\n ) {\n log.error(\n 'Selection attempted on non-text input element',\n event.target\n );\n return;\n }\n\n log.debug2(\n 'handleSelect',\n selectionStart,\n selectionEnd,\n selectionDirection\n );\n if (\n selection != null &&\n selectionStart === selection.selectionStart &&\n selectionEnd === selection.selectionEnd\n ) {\n return;\n }\n if (\n selection != null &&\n selectionStart === value.length &&\n selectionEnd === value.length &&\n event.nativeEvent.type !== 'mouseup'\n ) {\n // React triggers onSelect event with the cursor at the end of the input content\n // when the component is rendered at a different location in the DOM,\n // i.e. when start/end times switch places in the TimeSlider.\n // Ignore this event and reset the selection to its previous state.\n onSelect({ ...selection });\n return;\n }\n if (selectionStart === selectionEnd) {\n const newSelection = getSegment(selectionStart);\n log.debug(\n 'Selection segment from ',\n selectionStart,\n selectionEnd,\n '=>',\n newSelection\n );\n onSelect(newSelection);\n } else {\n onSelect({ selectionStart, selectionEnd, selectionDirection });\n }\n },\n [getSegment, onSelect, selection, value]\n );\n\n const handleSelectCapture = useCallback(\n (event: React.UIEvent<HTMLInputElement>) => {\n if (!input.current) {\n return;\n }\n log.debug('handleSelectCapture', event);\n const selectionStart = input.current.selectionStart ?? 0;\n if (\n selectionStart === value.length &&\n selection != null &&\n selectionStart !== selection.selectionStart\n ) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [input, selection, value]\n );\n\n function handleArrowKey(event: React.KeyboardEvent<HTMLInputElement>) {\n event.preventDefault();\n event.stopPropagation();\n\n if (!input.current) {\n return;\n }\n\n const { key } = event;\n const { selectionStart = 0, selectionEnd = 0 } = input.current;\n if (selectionStart === null || selectionEnd === null) {\n log.error(\n 'Selection arrow nvaigation attempted on non-text input element',\n event.target\n );\n return;\n }\n\n if (key === 'ArrowLeft') {\n onSelect(previousSegment(selectionStart));\n } else if (key === 'ArrowRight') {\n onSelect(nextSegment(selectionEnd));\n } else if (key === 'ArrowUp') {\n nextSegmentValue(selectionStart, -1);\n } else if (key === 'ArrowDown') {\n nextSegmentValue(selectionStart, 1);\n }\n }\n\n function handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>) {\n if (!input.current) {\n return;\n }\n log.debug('handleKeyDown', event);\n const { key } = event;\n const { selectionStart = 0, selectionEnd = 0 } = input.current;\n if (selectionStart === null || selectionEnd === null) {\n log.error(\n 'Selection key event on non-text input element',\n event.target\n );\n return;\n }\n\n if (key.startsWith('Arrow')) {\n handleArrowKey(event);\n return;\n }\n\n if (key === 'Delete' || key === 'Backspace') {\n event.preventDefault();\n event.stopPropagation();\n\n // Deleting at the end of the value\n if (selectionEnd >= trimTrailingMask(value, emptyMask).length) {\n const newValue = value.substring(\n 0,\n // Delete whole selection or just the char before the cursor\n selectionStart === selectionEnd\n ? selectionStart - 1\n : selectionStart\n );\n const trimmedValue = trimTrailingMask(newValue, emptyMask);\n if (trimmedValue !== value) {\n onChange(trimmedValue);\n onSelect({\n selectionStart: trimmedValue.length,\n selectionEnd: trimmedValue.length,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n }\n return;\n }\n\n if (selectionStart !== selectionEnd) {\n // Replace all non-masked characters with blanks, set selection to start\n const newValue =\n value.substring(0, selectionStart) +\n value\n .substring(selectionStart, selectionEnd)\n .replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) +\n value.substring(selectionEnd);\n log.debug(\n 'Range ',\n selectionStart,\n selectionEnd,\n 'deleted, setting value',\n newValue\n );\n\n onChange(newValue);\n onSelect({\n selectionStart,\n selectionEnd: selectionStart,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n } else if (selectionStart > 0) {\n for (let i = selectionStart - 1; i >= 0; i -= 1) {\n // Only replace non placeholder text\n const newValue =\n value.substring(0, i) +\n value\n .substring(i, selectionStart)\n .replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) +\n value.substring(selectionStart);\n\n if (newValue !== value) {\n onChange(newValue);\n onSelect({\n selectionStart: i,\n selectionEnd: i,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n return;\n }\n }\n }\n\n return;\n }\n\n if (event.altKey || event.metaKey || event.ctrlKey || key.length > 1) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n // Get the different permutations of the character they entered, remove duplicates\n const newChars = Array.from(\n new Set([key, key.toUpperCase(), key.toLowerCase()])\n );\n for (let i = 0; i < newChars.length; i += 1) {\n const newChar = newChars[i];\n\n // If they're typing an alphanumeric character, be smart and allow it to jump ahead\n const maxReplaceIndex = /[a-zA-Z0-9]/g.test(newChar)\n ? examples[0].length - 1\n : selectionStart;\n for (\n let replaceIndex = selectionStart;\n replaceIndex <= maxReplaceIndex;\n replaceIndex += 1\n ) {\n // Fill with the example chars if necessary\n const filledValue = fillToLength(\n value,\n examples[0],\n replaceIndex + 1\n );\n const newValue = getPreferredReplacementString(\n filledValue,\n replaceIndex,\n newChar,\n selectionStart,\n selectionEnd\n );\n if (isValid(newValue, replaceIndex + 1)) {\n const currentSegment = getSegment(replaceIndex);\n const newSelectionStart = replaceIndex + 1;\n let newSelection: SelectionSegment = {\n selectionStart: newSelectionStart,\n selectionEnd: newSelectionStart,\n selectionDirection: SELECTION_DIRECTION.NONE,\n };\n if (newSelectionStart >= currentSegment.selectionEnd) {\n const nextSegmentSelection = nextSegment(replaceIndex);\n if (\n nextSegmentSelection.selectionStart !==\n currentSegment.selectionStart\n ) {\n newSelection = nextSegmentSelection;\n }\n }\n log.debug('handleKeyDown', key, '=>', newValue, newSelection);\n onChange(newValue);\n onSelect(newSelection);\n return;\n }\n }\n }\n }\n\n // Need to use \"text\" type so we can apply a pattern and make selection properly\n return (\n <input\n ref={input}\n className={classNames('form-control masked-input', className)}\n type=\"text\"\n pattern={pattern}\n placeholder={placeholder}\n value={value}\n onChange={() => undefined}\n onKeyDown={handleKeyDown}\n onSelect={handleSelect}\n onSelectCapture={handleSelectCapture}\n onFocus={onFocus}\n onBlur={onBlur}\n data-testid={dataTestId}\n />\n );\n }\n);\n\nMaskedInput.defaultProps = {\n className: '',\n placeholder: undefined,\n onChange(): void {\n // no-op\n },\n onSelect(): void {\n // no-op\n },\n getNextSegmentValue: (range, delta, segmentValue) => segmentValue,\n getPreferredReplacementString: DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n selection: undefined,\n onFocus(): void {\n // no-op\n },\n onBlur(): void {\n // no-op\n },\n 'data-testid': undefined,\n};\n\nexport default MaskedInput;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MaskedInput.js","names":["React","useMemo","useEffect","useCallback","classNames","Log","useForwardedRef","log","module","SELECTION_DIRECTION","FORWARD","BACKWARD","NONE","FIXED_WIDTH_SPACE","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","value","replaceIndex","newChar","substring","fillToLength","checkValue","exampleValue","length","trimTrailingMask","emptyMask","i","MaskedInput","forwardRef","props","ref","className","example","getNextSegmentValue","range","delta","segmentValue","getPreferredReplacementString","onChange","onSelect","pattern","placeholder","selection","onFocus","onBlur","dataTestId","input","examples","Array","isArray","replace","setSelectedSegment","debug","selectionStart","selectionEnd","selectionDirection","current","setSelectionRange","getSegment","cursorPosition","testValue","test","charAt","fillValue","filledValue","concat","isValid","patternRegex","RegExp","nextSegment","position","currentSegment","nextPosition","previousSegment","previousPosition","nextSegmentValue","segment","newSegmentValue","newValue","handleSelect","event","target","error","debug2","nativeEvent","type","newSelection","handleSelectCapture","preventDefault","stopPropagation","handleArrowKey","key","handleKeyDown","startsWith","trimmedValue","altKey","metaKey","ctrlKey","newChars","from","Set","toUpperCase","toLowerCase","maxReplaceIndex","newSelectionStart","nextSegmentSelection","undefined","defaultProps"],"sources":["../src/MaskedInput.tsx"],"sourcesContent":["import React, { useMemo, useEffect, useCallback } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport { useForwardedRef } from '@deephaven/react-hooks';\nimport './MaskedInput.scss';\n\nconst log = Log.module('MaskedInput');\n\nconst SELECTION_DIRECTION = {\n FORWARD: 'forward',\n BACKWARD: 'backward',\n NONE: 'none',\n} as const;\n\n/**\n * Special space character that's the same size as tabular numbers\n * https://www.fileformat.info/info/unicode/char/2007/index.htm\n */\nconst FIXED_WIDTH_SPACE = '\\u2007';\n\nexport function DEFAULT_GET_PREFERRED_REPLACEMENT_STRING(\n value: string,\n replaceIndex: number,\n newChar: string\n): string {\n return (\n value.substring(0, replaceIndex) +\n newChar +\n value.substring(replaceIndex + 1)\n );\n}\n\n/**\n * Fill the string on the right side with the example value to the given length\n * @param checkValue Initial string to pad\n * @param exampleValue Example value\n * @param length Target length\n * @returns String padded with the given example value\n */\nexport function fillToLength(\n checkValue: string,\n exampleValue: string,\n length: number\n): string {\n return checkValue.length < length\n ? `${checkValue}${exampleValue.substring(checkValue.length, length)}`\n : checkValue;\n}\n\n/**\n * Trim all characters matching the empty mask on the right side of the given value\n * @param value String to trim\n * @param emptyMask Empty mask\n * @returns Trimmed string\n */\nexport function trimTrailingMask(value: string, emptyMask: string): string {\n let { length } = value;\n for (let i = value.length - 1; i >= 0; i -= 1) {\n if (emptyMask[i] === value[i]) {\n length = i;\n } else {\n break;\n }\n }\n return value.substring(0, length);\n}\n\nexport type SelectionSegment = {\n selectionStart: number;\n selectionEnd: number;\n selectionDirection?: typeof SELECTION_DIRECTION[keyof typeof SELECTION_DIRECTION];\n};\n\ntype MaskedInputProps = {\n /** An extra class name to add to the component */\n className?: string;\n /** The regex pattern this masked input must match */\n pattern: string;\n /** Input placeholder */\n placeholder?: string;\n /** The current value to display */\n value: string;\n /** One or more examples of valid values. Used when deciding if next keystroke is valid (as rest of the current value may be incomplete) */\n example: string | string[];\n /** The current selection to use for the input */\n selection?: SelectionSegment;\n /** Called when the value changes. Note the value may still be incomplete. */\n onChange?(value: string): void;\n /** Called when selection changes */\n onSelect?(segment: SelectionSegment): void;\n /** Retrieve the next value for a provided segment */\n getNextSegmentValue?(\n segment: SelectionSegment,\n delta: number,\n segmentValue: string,\n value: string\n ): string;\n getPreferredReplacementString?(\n value: string,\n replaceIndex: number,\n replaceChar: string,\n selectionStart: number,\n selectionEnd: number\n ): string;\n onFocus?: React.FocusEventHandler;\n onBlur?: React.FocusEventHandler;\n\n 'data-testid'?: string;\n};\n\n/**\n * A masked input for entering data from a template.\n * Won't work by itself, must use within another component and handle updating the value/selection.\n */\n// Forward ref causes a false positive for display-name in eslint:\n// https://github.com/yannickcr/eslint-plugin-react/issues/2269\n// eslint-disable-next-line react/display-name\nconst MaskedInput = React.forwardRef<HTMLInputElement, MaskedInputProps>(\n (props: MaskedInputProps, ref) => {\n const {\n className,\n example,\n getNextSegmentValue = (range, delta, segmentValue) => segmentValue,\n getPreferredReplacementString = DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n onChange = () => false,\n onSelect = () => false,\n pattern,\n placeholder,\n selection,\n value,\n onFocus = () => false,\n onBlur = () => false,\n 'data-testid': dataTestId,\n } = props;\n const input = useForwardedRef(ref);\n const examples = useMemo(\n () => (Array.isArray(example) ? example : [example]),\n [example]\n );\n const emptyMask = useMemo(\n () => examples[0].replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE),\n [examples]\n );\n\n useEffect(\n function setSelectedSegment() {\n if (selection != null) {\n log.debug('setting selection...', selection);\n const {\n selectionStart,\n selectionEnd,\n selectionDirection,\n } = selection;\n input.current?.setSelectionRange(\n selectionStart,\n selectionEnd,\n selectionDirection\n );\n log.debug('selection set!');\n }\n },\n [selection, input]\n );\n\n /**\n * Returns the selection range for the segment at the given cursor position\n * @param cursorPosition The current position of the cursor\n */\n const getSegment = useCallback(\n (cursorPosition: number) => {\n let selectionStart = cursorPosition;\n let selectionEnd = cursorPosition;\n const testValue = examples.length > 0 ? examples[0] : value;\n\n for (let i = selectionStart - 1; i >= 0; i -= 1) {\n if (!/[a-zA-Z0-9]/g.test(testValue.charAt(i))) {\n break;\n }\n\n selectionStart = i;\n }\n\n for (let i = selectionEnd; i < testValue.length; i += 1) {\n if (!/[a-zA-Z0-9]/g.test(testValue.charAt(i))) {\n break;\n }\n\n selectionEnd = i + 1;\n }\n\n const selectionDirection =\n selectionStart === selectionEnd\n ? SELECTION_DIRECTION.NONE\n : SELECTION_DIRECTION.BACKWARD;\n\n return {\n selectionStart,\n selectionEnd,\n selectionDirection,\n };\n },\n [examples, value]\n );\n\n /**\n * Replaces all blank spaces and everything after the current cursor position with the example value\n * @param checkValue The value to check/fill in\n * @param exampleValue The example to fill in the value from\n * @param cursorPosition The cursor position\n * @returns The filled in value\n */\n function fillValue(\n checkValue: string,\n exampleValue: string,\n cursorPosition = checkValue.length\n ): string {\n let filledValue = '';\n for (let i = 0; i < cursorPosition; i += 1) {\n if (checkValue.charAt(i) !== FIXED_WIDTH_SPACE) {\n filledValue = filledValue.concat(checkValue[i]);\n } else {\n filledValue = filledValue.concat(exampleValue[i]);\n }\n }\n filledValue = filledValue.concat(exampleValue.substring(cursorPosition));\n\n return filledValue;\n }\n\n /**\n * Checks if a given `value` is valid up until the `cursorPosition`.\n * Uses the examples to build the rest of the string\n * @param checkValue The value to check validity of\n * @param cursorPosition The position of the cursor to check up to\n */\n function isValid(\n checkValue: string,\n cursorPosition = checkValue.length\n ): boolean {\n const patternRegex = new RegExp(`^${pattern}$`);\n if (patternRegex.test(checkValue)) {\n return true;\n }\n\n for (let i = 0; i < examples.length; i += 1) {\n const filledValue = fillValue(checkValue, examples[i], cursorPosition);\n if (patternRegex.test(filledValue)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Returns the next segment after the given position\n * @param position The cursor position to start at\n * @returns The new selection range\n */\n function nextSegment(position: number): SelectionSegment {\n const currentSegment = getSegment(position);\n const nextPosition = currentSegment.selectionEnd + 1;\n if (nextPosition >= value.length) {\n return currentSegment;\n }\n\n return getSegment(nextPosition);\n }\n\n /**\n * Returns the previous segment before the given position\n * @param position The cursor position to start at\n * @returns The new selection range\n */\n function previousSegment(position: number): SelectionSegment {\n const currentSegment = getSegment(position);\n const previousPosition = currentSegment.selectionStart - 1;\n if (previousPosition <= 0) {\n return currentSegment;\n }\n\n return getSegment(previousPosition);\n }\n\n function nextSegmentValue(position: number, delta: number): void {\n const segment = getSegment(position);\n const segmentValue = value.substring(\n segment.selectionStart,\n segment.selectionEnd\n );\n const newSegmentValue = getNextSegmentValue(\n segment,\n delta,\n segmentValue,\n value\n );\n const newValue =\n value.substring(0, segment.selectionStart) +\n newSegmentValue +\n value.substring(segment.selectionEnd);\n if (isValid(newValue, segment.selectionEnd)) {\n onChange(newValue);\n onSelect(segment);\n }\n }\n\n const handleSelect = useCallback(\n (event: React.UIEvent<HTMLInputElement>) => {\n const {\n selectionStart = 0,\n selectionEnd = 0,\n selectionDirection = 'none',\n } = event.target as HTMLInputElement;\n\n if (\n selectionStart === null ||\n selectionEnd === null ||\n selectionDirection === null\n ) {\n log.error(\n 'Selection attempted on non-text input element',\n event.target\n );\n return;\n }\n\n log.debug2(\n 'handleSelect',\n selectionStart,\n selectionEnd,\n selectionDirection\n );\n if (\n selection != null &&\n selectionStart === selection.selectionStart &&\n selectionEnd === selection.selectionEnd\n ) {\n return;\n }\n if (\n selection != null &&\n selectionStart === value.length &&\n selectionEnd === value.length &&\n event.nativeEvent.type !== 'mouseup'\n ) {\n // React triggers onSelect event with the cursor at the end of the input content\n // when the component is rendered at a different location in the DOM,\n // i.e. when start/end times switch places in the TimeSlider.\n // Ignore this event and reset the selection to its previous state.\n onSelect({ ...selection });\n return;\n }\n if (selectionStart === selectionEnd) {\n const newSelection = getSegment(selectionStart);\n log.debug(\n 'Selection segment from ',\n selectionStart,\n selectionEnd,\n '=>',\n newSelection\n );\n onSelect(newSelection);\n } else {\n onSelect({ selectionStart, selectionEnd, selectionDirection });\n }\n },\n [getSegment, onSelect, selection, value]\n );\n\n const handleSelectCapture = useCallback(\n (event: React.UIEvent<HTMLInputElement>) => {\n if (!input.current) {\n return;\n }\n log.debug('handleSelectCapture', event);\n const selectionStart = input.current.selectionStart ?? 0;\n if (\n selectionStart === value.length &&\n selection != null &&\n selectionStart !== selection.selectionStart\n ) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [input, selection, value]\n );\n\n function handleArrowKey(event: React.KeyboardEvent<HTMLInputElement>) {\n event.preventDefault();\n event.stopPropagation();\n\n if (!input.current) {\n return;\n }\n\n const { key } = event;\n const { selectionStart = 0, selectionEnd = 0 } = input.current;\n if (selectionStart === null || selectionEnd === null) {\n log.error(\n 'Selection arrow nvaigation attempted on non-text input element',\n event.target\n );\n return;\n }\n\n if (key === 'ArrowLeft') {\n onSelect(previousSegment(selectionStart));\n } else if (key === 'ArrowRight') {\n onSelect(nextSegment(selectionEnd));\n } else if (key === 'ArrowUp') {\n nextSegmentValue(selectionStart, -1);\n } else if (key === 'ArrowDown') {\n nextSegmentValue(selectionStart, 1);\n }\n }\n\n function handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>) {\n if (!input.current) {\n return;\n }\n log.debug('handleKeyDown', event);\n const { key } = event;\n const { selectionStart = 0, selectionEnd = 0 } = input.current;\n if (selectionStart === null || selectionEnd === null) {\n log.error(\n 'Selection key event on non-text input element',\n event.target\n );\n return;\n }\n\n if (key.startsWith('Arrow')) {\n handleArrowKey(event);\n return;\n }\n\n if (key === 'Delete' || key === 'Backspace') {\n event.preventDefault();\n event.stopPropagation();\n\n // Deleting at the end of the value\n if (selectionEnd >= trimTrailingMask(value, emptyMask).length) {\n const newValue = value.substring(\n 0,\n // Delete whole selection or just the char before the cursor\n selectionStart === selectionEnd\n ? selectionStart - 1\n : selectionStart\n );\n const trimmedValue = trimTrailingMask(newValue, emptyMask);\n if (trimmedValue !== value) {\n onChange(trimmedValue);\n onSelect({\n selectionStart: trimmedValue.length,\n selectionEnd: trimmedValue.length,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n }\n return;\n }\n\n if (selectionStart !== selectionEnd) {\n // Replace all non-masked characters with blanks, set selection to start\n const newValue =\n value.substring(0, selectionStart) +\n value\n .substring(selectionStart, selectionEnd)\n .replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) +\n value.substring(selectionEnd);\n log.debug(\n 'Range ',\n selectionStart,\n selectionEnd,\n 'deleted, setting value',\n newValue\n );\n\n onChange(newValue);\n onSelect({\n selectionStart,\n selectionEnd: selectionStart,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n } else if (selectionStart > 0) {\n for (let i = selectionStart - 1; i >= 0; i -= 1) {\n // Only replace non placeholder text\n const newValue =\n value.substring(0, i) +\n value\n .substring(i, selectionStart)\n .replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) +\n value.substring(selectionStart);\n\n if (newValue !== value) {\n onChange(newValue);\n onSelect({\n selectionStart: i,\n selectionEnd: i,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n return;\n }\n }\n }\n\n return;\n }\n\n if (event.altKey || event.metaKey || event.ctrlKey || key.length > 1) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n // Get the different permutations of the character they entered, remove duplicates\n const newChars = Array.from(\n new Set([key, key.toUpperCase(), key.toLowerCase()])\n );\n for (let i = 0; i < newChars.length; i += 1) {\n const newChar = newChars[i];\n\n // If they're typing an alphanumeric character, be smart and allow it to jump ahead\n const maxReplaceIndex = /[a-zA-Z0-9]/g.test(newChar)\n ? examples[0].length - 1\n : selectionStart;\n for (\n let replaceIndex = selectionStart;\n replaceIndex <= maxReplaceIndex;\n replaceIndex += 1\n ) {\n // Fill with the example chars if necessary\n const filledValue = fillToLength(\n value,\n examples[0],\n replaceIndex + 1\n );\n const newValue = getPreferredReplacementString(\n filledValue,\n replaceIndex,\n newChar,\n selectionStart,\n selectionEnd\n );\n if (isValid(newValue, replaceIndex + 1)) {\n const currentSegment = getSegment(replaceIndex);\n const newSelectionStart = replaceIndex + 1;\n let newSelection: SelectionSegment = {\n selectionStart: newSelectionStart,\n selectionEnd: newSelectionStart,\n selectionDirection: SELECTION_DIRECTION.NONE,\n };\n if (newSelectionStart >= currentSegment.selectionEnd) {\n const nextSegmentSelection = nextSegment(replaceIndex);\n if (\n nextSegmentSelection.selectionStart !==\n currentSegment.selectionStart\n ) {\n newSelection = nextSegmentSelection;\n }\n }\n log.debug('handleKeyDown', key, '=>', newValue, newSelection);\n onChange(newValue);\n onSelect(newSelection);\n return;\n }\n }\n }\n }\n\n // Need to use \"text\" type so we can apply a pattern and make selection properly\n return (\n <input\n ref={input}\n className={classNames('form-control masked-input', className)}\n type=\"text\"\n pattern={pattern}\n placeholder={placeholder}\n value={value}\n onChange={() => undefined}\n onKeyDown={handleKeyDown}\n onSelect={handleSelect}\n onSelectCapture={handleSelectCapture}\n onFocus={onFocus}\n onBlur={onBlur}\n data-testid={dataTestId}\n />\n );\n }\n);\n\nMaskedInput.defaultProps = {\n className: '',\n placeholder: undefined,\n onChange(): void {\n // no-op\n },\n onSelect(): void {\n // no-op\n },\n getNextSegmentValue: (range, delta, segmentValue) => segmentValue,\n getPreferredReplacementString: DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n selection: undefined,\n onFocus(): void {\n // no-op\n },\n onBlur(): void {\n // no-op\n },\n 'data-testid': undefined,\n};\n\nexport default MaskedInput;\n"],"mappings":"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"}
|
package/dist/Option.d.ts
CHANGED
|
@@ -5,6 +5,6 @@ export declare type OptionProps = {
|
|
|
5
5
|
value: string;
|
|
6
6
|
'data-testid'?: string;
|
|
7
7
|
};
|
|
8
|
-
declare
|
|
8
|
+
declare function Option({ children, disabled, value, 'data-testid': dataTestId, }: OptionProps): JSX.Element;
|
|
9
9
|
export default Option;
|
|
10
10
|
//# sourceMappingURL=Option.d.ts.map
|
package/dist/Option.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Option.d.ts","sourceRoot":"","sources":["../src/Option.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,oBAAY,WAAW,GAAG;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"Option.d.ts","sourceRoot":"","sources":["../src/Option.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,oBAAY,WAAW,GAAG;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,iBAAS,MAAM,CAAC,EACd,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,aAAa,EAAE,UAAU,GAC1B,EAAE,WAAW,GAAG,GAAG,CAAC,OAAO,CAM3B;AAED,eAAe,MAAM,CAAC"}
|
package/dist/Option.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
3
|
-
var Option = _ref => {
|
|
2
|
+
function Option(_ref) {
|
|
4
3
|
var {
|
|
5
4
|
children,
|
|
6
5
|
disabled,
|
|
@@ -12,7 +11,6 @@ var Option = _ref => {
|
|
|
12
11
|
disabled: disabled,
|
|
13
12
|
"data-testid": dataTestId
|
|
14
13
|
}, children);
|
|
15
|
-
}
|
|
16
|
-
|
|
14
|
+
}
|
|
17
15
|
export default Option;
|
|
18
16
|
//# sourceMappingURL=Option.js.map
|
package/dist/Option.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Option.js","names":["React","Option","children","disabled","value","dataTestId"],"sources":["../src/Option.tsx"],"sourcesContent":["import React from 'react';\n\nexport type OptionProps = {\n children: React.ReactNode;\n disabled?: boolean;\n value: string;\n 'data-testid'?: string;\n};\n\
|
|
1
|
+
{"version":3,"file":"Option.js","names":["React","Option","children","disabled","value","dataTestId"],"sources":["../src/Option.tsx"],"sourcesContent":["import React from 'react';\n\nexport type OptionProps = {\n children: React.ReactNode;\n disabled?: boolean;\n value: string;\n 'data-testid'?: string;\n};\n\nfunction Option({\n children,\n disabled,\n value,\n 'data-testid': dataTestId,\n}: OptionProps): JSX.Element {\n return (\n <option value={value} disabled={disabled} data-testid={dataTestId}>\n {children}\n </option>\n );\n}\n\nexport default Option;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AASzB,SAASC,MAAM,OAKc;EAAA,IALb;IACdC,QAAQ;IACRC,QAAQ;IACRC,KAAK;IACL,aAAa,EAAEC;EACJ,CAAC;EACZ,oBACE;IAAQ,KAAK,EAAED,KAAM;IAAC,QAAQ,EAAED,QAAS;IAAC,eAAaE;EAAW,GAC/DH,QAAQ,CACF;AAEb;AAEA,eAAeD,MAAM"}
|
package/dist/RadioGroup.d.ts
CHANGED
|
@@ -18,6 +18,6 @@ declare type RadioGroupProps = {
|
|
|
18
18
|
* <RadioItem .../>
|
|
19
19
|
* </RadioGroup>
|
|
20
20
|
*/
|
|
21
|
-
declare
|
|
21
|
+
declare function RadioGroup(props: RadioGroupProps): JSX.Element;
|
|
22
22
|
export default RadioGroup;
|
|
23
23
|
//# sourceMappingURL=RadioGroup.d.ts.map
|
package/dist/RadioGroup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioGroup.d.ts","sourceRoot":"","sources":["../src/RadioGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,aAAK,eAAe,GAAG;IACrB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IAErD,+FAA+F;IAC/F,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,+CAA+C;IAC/C,QAAQ,EAAE,KAAK,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAErD,qGAAqG;IACrG,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;;;GAMG;AACH,
|
|
1
|
+
{"version":3,"file":"RadioGroup.d.ts","sourceRoot":"","sources":["../src/RadioGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,aAAK,eAAe,GAAG;IACrB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IAErD,+FAA+F;IAC/F,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,+CAA+C;IAC/C,QAAQ,EAAE,KAAK,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAErD,qGAAqG;IACrG,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;;;GAMG;AACH,iBAAS,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,CA2BvD;AAED,eAAe,UAAU,CAAC"}
|