@snack-uikit/fields 0.30.0 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +184 -152
  3. package/dist/cjs/components/FieldDate/FieldDate.d.ts +15 -24
  4. package/dist/cjs/components/FieldDate/FieldDate.js +53 -41
  5. package/dist/cjs/components/FieldDate/index.d.ts +0 -1
  6. package/dist/cjs/components/FieldDate/index.js +1 -9
  7. package/dist/cjs/components/FieldSecure/FieldSecure.d.ts +1 -1
  8. package/dist/cjs/components/FieldSelect/hooks.d.ts +2 -2
  9. package/dist/cjs/components/FieldSelect/hooks.js +7 -3
  10. package/dist/cjs/components/FieldSelect/styles.module.css +6 -18
  11. package/dist/cjs/components/FieldSlider/FieldSlider.d.ts +1 -1
  12. package/dist/cjs/components/FieldText/FieldText.d.ts +1 -1
  13. package/dist/cjs/components/FieldTextArea/FieldTextArea.d.ts +1 -1
  14. package/dist/cjs/components/FieldTime/FieldTime.d.ts +30 -0
  15. package/dist/cjs/components/FieldTime/FieldTime.js +298 -0
  16. package/dist/cjs/components/FieldTime/index.d.ts +1 -0
  17. package/dist/cjs/components/{FieldDate/hooks → FieldTime}/index.js +1 -1
  18. package/dist/cjs/components/FieldTime/styles.module.css +27 -0
  19. package/dist/cjs/components/index.d.ts +6 -5
  20. package/dist/cjs/components/index.js +6 -5
  21. package/dist/cjs/constants/dateFields.d.ts +24 -0
  22. package/dist/cjs/constants/dateFields.js +152 -0
  23. package/dist/cjs/constants/index.d.ts +2 -0
  24. package/dist/cjs/constants/index.js +26 -0
  25. package/dist/cjs/hooks/dateHandlers/index.d.ts +3 -0
  26. package/dist/cjs/hooks/dateHandlers/index.js +27 -0
  27. package/dist/cjs/{components/FieldDate/hooks → hooks/dateHandlers}/useDateField.d.ts +13 -5
  28. package/dist/cjs/{components/FieldDate/hooks → hooks/dateHandlers}/useDateField.js +49 -34
  29. package/dist/cjs/hooks/dateHandlers/useDateFieldHelpersForMode.d.ts +18 -0
  30. package/dist/cjs/hooks/dateHandlers/useDateFieldHelpersForMode.js +113 -0
  31. package/dist/cjs/hooks/index.d.ts +1 -0
  32. package/dist/cjs/hooks/index.js +1 -0
  33. package/dist/cjs/hooks/useCopyButton.js +1 -1
  34. package/dist/cjs/{types.d.ts → types/allFields.d.ts} +1 -1
  35. package/dist/cjs/types/dateFields.d.ts +11 -0
  36. package/dist/cjs/types/index.d.ts +2 -0
  37. package/dist/cjs/types/index.js +26 -0
  38. package/dist/cjs/utils/dateFields.d.ts +10 -0
  39. package/dist/cjs/utils/dateFields.js +71 -0
  40. package/dist/esm/components/FieldDate/FieldDate.d.ts +15 -24
  41. package/dist/esm/components/FieldDate/FieldDate.js +39 -31
  42. package/dist/esm/components/FieldDate/index.d.ts +0 -1
  43. package/dist/esm/components/FieldDate/index.js +0 -1
  44. package/dist/esm/components/FieldSecure/FieldSecure.d.ts +1 -1
  45. package/dist/esm/components/FieldSelect/hooks.d.ts +2 -2
  46. package/dist/esm/components/FieldSelect/hooks.js +9 -3
  47. package/dist/esm/components/FieldSelect/styles.module.css +6 -18
  48. package/dist/esm/components/FieldSlider/FieldSlider.d.ts +1 -1
  49. package/dist/esm/components/FieldText/FieldText.d.ts +1 -1
  50. package/dist/esm/components/FieldTextArea/FieldTextArea.d.ts +1 -1
  51. package/dist/esm/components/FieldTime/FieldTime.d.ts +30 -0
  52. package/dist/esm/components/FieldTime/FieldTime.js +161 -0
  53. package/dist/esm/components/FieldTime/index.d.ts +1 -0
  54. package/dist/esm/components/FieldTime/index.js +1 -0
  55. package/dist/esm/components/FieldTime/styles.module.css +27 -0
  56. package/dist/esm/components/index.d.ts +6 -5
  57. package/dist/esm/components/index.js +6 -5
  58. package/dist/esm/constants/dateFields.d.ts +24 -0
  59. package/dist/esm/constants/dateFields.js +103 -0
  60. package/dist/esm/constants/index.d.ts +2 -0
  61. package/dist/esm/constants/index.js +2 -0
  62. package/dist/esm/hooks/dateHandlers/index.d.ts +3 -0
  63. package/dist/esm/hooks/dateHandlers/index.js +3 -0
  64. package/dist/esm/{components/FieldDate/hooks → hooks/dateHandlers}/useDateField.d.ts +13 -5
  65. package/dist/esm/{components/FieldDate/hooks → hooks/dateHandlers}/useDateField.js +48 -35
  66. package/dist/esm/hooks/dateHandlers/useDateFieldHelpersForMode.d.ts +18 -0
  67. package/dist/esm/hooks/dateHandlers/useDateFieldHelpersForMode.js +95 -0
  68. package/dist/esm/hooks/index.d.ts +1 -0
  69. package/dist/esm/hooks/index.js +1 -0
  70. package/dist/esm/hooks/useCopyButton.js +1 -1
  71. package/dist/esm/{types.d.ts → types/allFields.d.ts} +1 -1
  72. package/dist/esm/types/dateFields.d.ts +11 -0
  73. package/dist/esm/types/index.d.ts +2 -0
  74. package/dist/esm/types/index.js +2 -0
  75. package/dist/esm/utils/dateFields.d.ts +10 -0
  76. package/dist/esm/utils/dateFields.js +59 -0
  77. package/package.json +16 -16
  78. package/src/components/FieldColor/styles.module.scss +9 -10
  79. package/src/components/FieldDate/FieldDate.tsx +72 -52
  80. package/src/components/FieldDate/index.ts +0 -1
  81. package/src/components/FieldDate/styles.module.scss +10 -11
  82. package/src/components/FieldDecorator/styles.module.scss +44 -45
  83. package/src/components/FieldSelect/hooks.ts +15 -3
  84. package/src/components/FieldSelect/styles.module.scss +20 -20
  85. package/src/components/FieldSlider/styles.module.scss +4 -4
  86. package/src/components/FieldTextArea/styles.module.scss +18 -18
  87. package/src/components/FieldTime/FieldTime.tsx +350 -0
  88. package/src/components/FieldTime/index.ts +1 -0
  89. package/src/components/FieldTime/styles.module.scss +41 -0
  90. package/src/components/index.ts +6 -5
  91. package/src/constants/dateFields.ts +127 -0
  92. package/src/constants/index.ts +2 -0
  93. package/src/helperComponents/ButtonCopyValue/styles.module.scss +2 -2
  94. package/src/helperComponents/ButtonField/styles.module.scss +9 -9
  95. package/src/helperComponents/ButtonFieldList/styles.module.scss +2 -2
  96. package/src/helperComponents/ButtonHideValue/styles.module.scss +2 -2
  97. package/src/helperComponents/FieldContainerPrivate/styles.module.scss +24 -26
  98. package/src/helperComponents/TextArea/styles.module.scss +5 -5
  99. package/src/hooks/dateHandlers/index.ts +3 -0
  100. package/src/{components/FieldDate/hooks → hooks/dateHandlers}/useDateField.ts +93 -47
  101. package/src/hooks/dateHandlers/useDateFieldHelpersForMode.ts +145 -0
  102. package/src/hooks/index.ts +1 -0
  103. package/src/hooks/styles.module.scss +5 -5
  104. package/src/hooks/useCopyButton.tsx +1 -1
  105. package/src/styles.module.scss +15 -15
  106. package/src/{types.ts → types/allFields.ts} +1 -1
  107. package/src/types/dateFields.ts +14 -0
  108. package/src/types/index.ts +2 -0
  109. package/src/utils/dateFields.ts +75 -0
  110. package/dist/cjs/components/FieldDate/constants.d.ts +0 -10
  111. package/dist/cjs/components/FieldDate/constants.js +0 -49
  112. package/dist/cjs/components/FieldDate/hooks/index.d.ts +0 -1
  113. package/dist/cjs/components/FieldDate/hooks/useDateFieldHelpers.d.ts +0 -10
  114. package/dist/cjs/components/FieldDate/hooks/useDateFieldHelpers.js +0 -82
  115. package/dist/cjs/components/FieldDate/types.d.ts +0 -6
  116. package/dist/cjs/components/FieldDate/utils.d.ts +0 -9
  117. package/dist/cjs/components/FieldDate/utils.js +0 -56
  118. package/dist/esm/components/FieldDate/constants.d.ts +0 -10
  119. package/dist/esm/components/FieldDate/constants.js +0 -28
  120. package/dist/esm/components/FieldDate/hooks/index.d.ts +0 -1
  121. package/dist/esm/components/FieldDate/hooks/index.js +0 -1
  122. package/dist/esm/components/FieldDate/hooks/useDateFieldHelpers.d.ts +0 -10
  123. package/dist/esm/components/FieldDate/hooks/useDateFieldHelpers.js +0 -66
  124. package/dist/esm/components/FieldDate/types.d.ts +0 -6
  125. package/dist/esm/components/FieldDate/utils.d.ts +0 -9
  126. package/dist/esm/components/FieldDate/utils.js +0 -43
  127. package/src/components/FieldDate/constants.ts +0 -33
  128. package/src/components/FieldDate/hooks/index.ts +0 -1
  129. package/src/components/FieldDate/hooks/useDateFieldHelpers.ts +0 -96
  130. package/src/components/FieldDate/types.ts +0 -6
  131. package/src/components/FieldDate/utils.ts +0 -49
  132. /package/dist/cjs/{constants.d.ts → constants/allFields.d.ts} +0 -0
  133. /package/dist/cjs/{constants.js → constants/allFields.js} +0 -0
  134. /package/dist/cjs/{components/FieldDate/hooks → hooks/dateHandlers}/useFocusHandlers.d.ts +0 -0
  135. /package/dist/cjs/{components/FieldDate/hooks → hooks/dateHandlers}/useFocusHandlers.js +0 -0
  136. /package/dist/cjs/{components/FieldDate/hooks → hooks/dateHandlers}/useHandlers.d.ts +0 -0
  137. /package/dist/cjs/{components/FieldDate/hooks → hooks/dateHandlers}/useHandlers.js +0 -0
  138. /package/dist/cjs/{components/FieldDate/types.js → types/allFields.js} +0 -0
  139. /package/dist/cjs/{types.js → types/dateFields.js} +0 -0
  140. /package/dist/esm/{constants.d.ts → constants/allFields.d.ts} +0 -0
  141. /package/dist/esm/{constants.js → constants/allFields.js} +0 -0
  142. /package/dist/esm/{components/FieldDate/hooks → hooks/dateHandlers}/useFocusHandlers.d.ts +0 -0
  143. /package/dist/esm/{components/FieldDate/hooks → hooks/dateHandlers}/useFocusHandlers.js +0 -0
  144. /package/dist/esm/{components/FieldDate/hooks → hooks/dateHandlers}/useHandlers.d.ts +0 -0
  145. /package/dist/esm/{components/FieldDate/hooks → hooks/dateHandlers}/useHandlers.js +0 -0
  146. /package/dist/esm/{components/FieldDate/types.js → types/allFields.js} +0 -0
  147. /package/dist/esm/{types.js → types/dateFields.js} +0 -0
  148. /package/src/{constants.ts → constants/allFields.ts} +0 -0
  149. /package/src/{components/FieldDate/hooks → hooks/dateHandlers}/useFocusHandlers.ts +0 -0
  150. /package/src/{components/FieldDate/hooks → hooks/dateHandlers}/useHandlers.ts +0 -0
@@ -31,18 +31,9 @@ const helperComponents_1 = require("../../helperComponents");
31
31
  const hooks_1 = require("../../hooks");
32
32
  const getValidationState_1 = require("../../utils/getValidationState");
33
33
  const FieldDecorator_1 = require("../FieldDecorator");
34
- const constants_2 = require("./constants");
35
- const hooks_2 = require("./hooks");
36
- const useFocusHandlers_1 = require("./hooks/useFocusHandlers");
37
- const useHandlers_1 = require("./hooks/useHandlers");
38
34
  const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
39
- const utils_2 = require("./utils");
40
- const CALENDAR_SIZE_MAP = {
41
- [input_private_1.SIZE.S]: 's',
42
- [input_private_1.SIZE.M]: 'm',
43
- [input_private_1.SIZE.L]: 'm'
44
- };
45
35
  exports.FieldDate = (0, react_1.forwardRef)((_a, ref) => {
36
+ var _b;
46
37
  var {
47
38
  id,
48
39
  name,
@@ -66,13 +57,12 @@ exports.FieldDate = (0, react_1.forwardRef)((_a, ref) => {
66
57
  showHintIcon,
67
58
  size = input_private_1.SIZE.S,
68
59
  validationState = constants_1.VALIDATION_STATE.Default,
69
- locale = constants_2.DEFAULT_LOCALE,
70
60
  buildCellProps,
71
- error
61
+ error,
62
+ mode
72
63
  } = _a,
73
- rest = __rest(_a, ["id", "name", "value", "disabled", "readonly", "showCopyButton", "showClearButton", "open", "onOpenChange", "onChange", "onFocus", "onBlur", "className", "label", "labelTooltip", "labelTooltipPlacement", "required", "caption", "hint", "showHintIcon", "size", "validationState", "locale", "buildCellProps", "error"]);
64
+ rest = __rest(_a, ["id", "name", "value", "disabled", "readonly", "showCopyButton", "showClearButton", "open", "onOpenChange", "onChange", "onFocus", "onBlur", "className", "label", "labelTooltip", "labelTooltipPlacement", "required", "caption", "hint", "showHintIcon", "size", "validationState", "buildCellProps", "error", "mode"]);
74
65
  const [isOpen, setIsOpen] = (0, uncontrollable_1.useUncontrolledProp)(open, false, onOpenChange);
75
- const [pickerAutofocus, setPickerAutofocus] = (0, react_1.useState)(false);
76
66
  const localRef = (0, react_1.useRef)(null);
77
67
  const clearButtonRef = (0, react_1.useRef)(null);
78
68
  const copyButtonRef = (0, react_1.useRef)(null);
@@ -81,19 +71,24 @@ exports.FieldDate = (0, react_1.forwardRef)((_a, ref) => {
81
71
  const showAdditionalButton = Boolean(valueProp && !disabled);
82
72
  const showClearButton = showClearButtonProp && showAdditionalButton && !readonly;
83
73
  const showCopyButton = showCopyButtonProp && showAdditionalButton && readonly;
74
+ const showSeconds = mode === 'date-time' ? (_b = rest.showSeconds) !== null && _b !== void 0 ? _b : true : undefined;
84
75
  const fieldValidationState = (0, getValidationState_1.getValidationState)({
85
76
  validationState,
86
77
  error
87
78
  });
79
+ const navigationStartRef = (0, react_1.useRef)(null);
88
80
  const checkForLeavingFocus = (0, react_1.useCallback)(event => {
89
81
  if (event.key === 'ArrowDown') {
90
- setPickerAutofocus(true);
91
82
  setIsOpen(true);
83
+ setTimeout(() => {
84
+ var _a;
85
+ return (_a = navigationStartRef.current) === null || _a === void 0 ? void 0 : _a.focus();
86
+ }, 0);
92
87
  }
93
88
  }, [setIsOpen]);
94
89
  const handleClear = (0, react_1.useCallback)(() => {
95
90
  var _a, _b, _c;
96
- onChange && onChange('');
91
+ onChange && onChange(undefined);
97
92
  if ((_a = localRef.current) === null || _a === void 0 ? void 0 : _a.value) {
98
93
  localRef.current.value = '';
99
94
  }
@@ -105,6 +100,21 @@ exports.FieldDate = (0, react_1.forwardRef)((_a, ref) => {
105
100
  setIsOpen(false);
106
101
  }
107
102
  }, [onChange, required, setIsOpen]);
103
+ const getStringDateValue = (0, react_1.useCallback)(date => {
104
+ if (!date) return '';
105
+ if (mode === 'date') {
106
+ return date.toLocaleDateString(constants_1.DEFAULT_LOCALE);
107
+ }
108
+ return date.toLocaleString(constants_1.DEFAULT_LOCALE, {
109
+ year: 'numeric',
110
+ month: 'numeric',
111
+ day: 'numeric',
112
+ hour: '2-digit',
113
+ minute: '2-digit',
114
+ second: showSeconds ? '2-digit' : undefined
115
+ });
116
+ }, [mode, showSeconds]);
117
+ const valueToCopy = getStringDateValue(valueProp);
108
118
  const clearButtonSettings = (0, input_private_1.useClearButton)({
109
119
  clearButtonRef,
110
120
  showClearButton,
@@ -115,7 +125,7 @@ exports.FieldDate = (0, react_1.forwardRef)((_a, ref) => {
115
125
  copyButtonRef,
116
126
  showCopyButton,
117
127
  size,
118
- valueToCopy: valueProp || ''
128
+ valueToCopy
119
129
  });
120
130
  const calendarIcon = (0, react_1.useMemo)(() => ({
121
131
  active: false,
@@ -136,14 +146,16 @@ exports.FieldDate = (0, react_1.forwardRef)((_a, ref) => {
136
146
  handleBlur: dateInputBlurHandler,
137
147
  mask,
138
148
  setInputFocus
139
- } = (0, hooks_2.useDateField)({
149
+ } = (0, hooks_1.useDateField)({
140
150
  inputRef: localRef,
141
151
  onChange,
142
152
  readonly,
143
- locale,
144
- setIsOpen
153
+ locale: constants_1.DEFAULT_LOCALE,
154
+ setIsOpen,
155
+ mode,
156
+ showSeconds
145
157
  });
146
- const setInputFocusFromButtons = (0, react_1.useCallback)(() => setInputFocus(constants_2.SlotKey.Year), [setInputFocus]);
158
+ const setInputFocusFromButtons = (0, react_1.useCallback)(() => setInputFocus(mode === 'date' ? constants_1.SlotKey.Year : constants_1.SlotKey.Seconds), [mode, setInputFocus]);
147
159
  const {
148
160
  postfixButtons,
149
161
  inputTabIndex,
@@ -157,43 +169,46 @@ exports.FieldDate = (0, react_1.forwardRef)((_a, ref) => {
157
169
  readonly,
158
170
  submitKeys: ['Enter', 'Space', 'Tab']
159
171
  });
160
- // TODO: do not hardcode locale here
161
172
  const handleSelectDate = date => {
162
173
  var _a;
163
- onChange && onChange(date.toLocaleDateString(constants_2.DEFAULT_LOCALE));
174
+ onChange && onChange(date);
164
175
  (_a = localRef.current) === null || _a === void 0 ? void 0 : _a.focus();
165
176
  setIsOpen(false);
177
+ if (localRef.current) {
178
+ localRef.current.value = getStringDateValue(date);
179
+ }
166
180
  };
167
181
  const handleCalendarFocusLeave = () => {
168
182
  setInitialTabIndices();
169
183
  // TODO: find out why it works not as expected (focus is moved to the next element instead of the focused one)
170
184
  // maybe floating-ui causes the problem
171
185
  (0, input_private_1.runAfterRerender)(() => {
172
- setInputFocus(constants_2.SlotKey.Day);
186
+ setInputFocus(constants_1.SlotKey.Day);
173
187
  setIsOpen(false);
174
188
  });
175
189
  };
176
- const handleInputKeyDown = (0, useHandlers_1.useHandlers)([checkForLeavingFocus, dateInputKeyDownHandler, navigationInputKeyDownHandler]);
190
+ const handleInputKeyDown = (0, hooks_1.useHandlers)([checkForLeavingFocus, dateInputKeyDownHandler, navigationInputKeyDownHandler]);
177
191
  (0, react_1.useEffect)(() => {
178
192
  var _a;
179
193
  if (open) {
180
194
  (_a = localRef.current) === null || _a === void 0 ? void 0 : _a.focus();
181
195
  }
182
196
  }, [open]);
197
+ // TODO input ref - determine whether to update ref based on input/non-input state
183
198
  (0, react_1.useEffect)(() => {
184
- if (localRef.current) {
185
- localRef.current.value = valueProp;
199
+ if (localRef.current && document.activeElement !== localRef.current) {
200
+ localRef.current.value = getStringDateValue(valueProp);
186
201
  }
187
- }, [valueProp]);
202
+ }, [getStringDateValue, valueProp]);
188
203
  const onFocusByKeyboard = (0, react_1.useCallback)(e => {
189
204
  setInputFocus();
190
205
  onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);
191
206
  }, [onFocus, setInputFocus]);
192
- const inputHandlers = (0, useFocusHandlers_1.useFocusHandlers)({
207
+ const inputHandlers = (0, hooks_1.useFocusHandlers)({
193
208
  onFocusByClick: onFocus,
194
209
  onFocusByKeyboard
195
210
  });
196
- const onBlur = (0, useHandlers_1.useHandlers)([dateInputBlurHandler, inputHandlers.onBlur, onBlurProp]);
211
+ const onBlur = (0, hooks_1.useHandlers)([dateInputBlurHandler, inputHandlers.onBlur, onBlurProp]);
197
212
  const onClick = (0, react_1.useCallback)(e => {
198
213
  dateInputClickHandler();
199
214
  if (isOpen) {
@@ -231,20 +246,17 @@ exports.FieldDate = (0, react_1.forwardRef)((_a, ref) => {
231
246
  className: styles_module_scss_1.default.calendarWrapper,
232
247
  "data-size": size,
233
248
  children: (0, jsx_runtime_1.jsx)(calendar_1.Calendar, {
234
- mode: 'date',
235
- size: CALENDAR_SIZE_MAP[size],
236
- value: valueProp ? (0, utils_2.parseDate)(valueProp) : undefined,
249
+ mode: mode,
250
+ size: size,
251
+ value: valueProp,
252
+ showSeconds: showSeconds,
237
253
  onChangeValue: handleSelectDate,
238
254
  buildCellProps: buildCellProps,
239
- navigationStartRef: element => {
240
- if (pickerAutofocus) {
241
- element === null || element === void 0 ? void 0 : element.focus();
242
- setPickerAutofocus(false);
243
- }
244
- },
255
+ navigationStartRef: navigationStartRef,
245
256
  onFocusLeave: handleCalendarFocusLeave,
246
- locale: locale,
247
- "data-test-id": 'field-date__calendar'
257
+ locale: constants_1.DEFAULT_LOCALE,
258
+ "data-test-id": 'field-date__calendar',
259
+ fitToContainer: false
248
260
  })
249
261
  }),
250
262
  children: (0, jsx_runtime_1.jsx)(helperComponents_1.FieldContainerPrivate, {
@@ -1,2 +1 @@
1
1
  export * from './FieldDate';
2
- export { parseDate } from './utils';
@@ -22,12 +22,4 @@ var __exportStar = void 0 && (void 0).__exportStar || function (m, exports) {
22
22
  Object.defineProperty(exports, "__esModule", {
23
23
  value: true
24
24
  });
25
- exports.parseDate = void 0;
26
- __exportStar(require("./FieldDate"), exports);
27
- var utils_1 = require("./utils");
28
- Object.defineProperty(exports, "parseDate", {
29
- enumerable: true,
30
- get: function () {
31
- return utils_1.parseDate;
32
- }
33
- });
25
+ __exportStar(require("./FieldDate"), exports);
@@ -21,5 +21,5 @@ type FieldSecureOwnProps = {
21
21
  export type FieldSecureProps = WithSupportProps<FieldSecureOwnProps & InputProps & WrapperProps>;
22
22
  export declare const FieldSecure: import("react").ForwardRefExoticComponent<{
23
23
  'data-test-id'?: string;
24
- } & import("react").AriaAttributes & FieldSecureOwnProps & Pick<Partial<InputPrivateProps>, "value" | "onChange"> & Pick<InputPrivateProps, "onFocus" | "onBlur" | "id" | "disabled" | "readonly" | "name" | "placeholder" | "autoComplete" | "maxLength"> & WrapperProps & import("react").RefAttributes<HTMLInputElement>>;
24
+ } & import("react").AriaAttributes & FieldSecureOwnProps & Pick<Partial<InputPrivateProps>, "value" | "onChange"> & Pick<InputPrivateProps, "onFocus" | "onBlur" | "id" | "disabled" | "name" | "readonly" | "placeholder" | "autoComplete" | "maxLength"> & WrapperProps & import("react").RefAttributes<HTMLInputElement>>;
25
25
  export {};
@@ -27,9 +27,9 @@ export declare function useSearchInput({ value, onChange, defaultValue, selected
27
27
  resetSearchOnOptionSelection?: boolean;
28
28
  }): {
29
29
  inputValue: string;
30
- setInputValue: (value: any, ...args: any[]) => ReturnType<Handler> | void;
30
+ setInputValue: (value: string) => void;
31
31
  prevInputValue: import("react").MutableRefObject<string>;
32
- onInputValueChange: (value: any, ...args: any[]) => ReturnType<Handler> | void;
32
+ onInputValueChange: (value: string) => void;
33
33
  updateInputValue: (selectedItem?: ItemWithId) => void;
34
34
  };
35
35
  export declare function useHandleDeleteItem(setValue: Handler): (item?: ItemWithId) => (e?: MouseEvent<HTMLButtonElement>) => void;
@@ -94,7 +94,7 @@ function useSearchInput(_ref3) {
94
94
  selectedOptionFormatter,
95
95
  resetSearchOnOptionSelection = true
96
96
  } = _ref3;
97
- const [inputValue = '', setInputValue] = (0, hooks_1.useValueControl)({
97
+ const [inputValue = '', setInputValueState] = (0, hooks_1.useValueControl)({
98
98
  value,
99
99
  onChange,
100
100
  defaultValue
@@ -103,10 +103,14 @@ function useSearchInput(_ref3) {
103
103
  const updateInputValue = (0, react_1.useCallback)(selectedItem => {
104
104
  const newInputValue = selectedOptionFormatter(selectedItem);
105
105
  if (resetSearchOnOptionSelection && (inputValue !== newInputValue || prevInputValue.current !== newInputValue)) {
106
- setInputValue(newInputValue);
106
+ setInputValueState(newInputValue);
107
107
  prevInputValue.current = newInputValue;
108
108
  }
109
- }, [inputValue, resetSearchOnOptionSelection, selectedOptionFormatter, setInputValue]);
109
+ }, [inputValue, resetSearchOnOptionSelection, selectedOptionFormatter, setInputValueState]);
110
+ const setInputValue = (0, react_1.useCallback)(value => {
111
+ const updatedValue = prevInputValue.current && value.includes(prevInputValue.current) ? value.replace(prevInputValue.current, '') : value;
112
+ setInputValueState(updatedValue);
113
+ }, [setInputValueState]);
110
114
  return {
111
115
  inputValue,
112
116
  setInputValue,
@@ -72,12 +72,8 @@
72
72
  color:var(--sys-neutral-text-light, #8b8e9b);
73
73
  }
74
74
  .container[data-size=s][data-variant=single-line-container] .displayValue{
75
- width:calc(100% - (
76
- var(--space-fields-single-line-container-s-right, 6px) + var(--space-fields-single-line-container-s-gap, 4px) + calc(var(var(--space-fields-postfix-gap, 4px)) + var(--size-icon-container-xs, 16px) * 2)
77
- ));
78
- margin-right:calc(
79
- var(--space-fields-single-line-container-s-right, 6px) + var(--space-fields-single-line-container-s-gap, 4px) + calc(var(var(--space-fields-postfix-gap, 4px)) + var(--size-icon-container-xs, 16px) * 2)
80
- );
75
+ width:calc(100% - (var(--space-fields-single-line-container-s-right, 6px) + var(--space-fields-single-line-container-s-gap, 4px) + calc(var(var(--space-fields-postfix-gap, 4px)) + var(--size-icon-container-xs, 16px) * 2)));
76
+ margin-right:calc(var(--space-fields-single-line-container-s-right, 6px) + var(--space-fields-single-line-container-s-gap, 4px) + calc(var(var(--space-fields-postfix-gap, 4px)) + var(--size-icon-container-xs, 16px) * 2));
81
77
  padding-left:var(--space-fields-single-line-container-s-left, 6px);
82
78
  border-radius:var(--radius-fields-s, 12px);
83
79
  }
@@ -95,12 +91,8 @@
95
91
  color:var(--sys-neutral-text-light, #8b8e9b);
96
92
  }
97
93
  .container[data-size=m][data-variant=single-line-container] .displayValue{
98
- width:calc(100% - (
99
- var(--space-fields-single-line-container-m-right, 8px) + var(--space-fields-single-line-container-m-gap, 4px) + calc(var(var(--space-fields-postfix-gap, 4px)) + var(--size-icon-container-s, 24px) * 2)
100
- ));
101
- margin-right:calc(
102
- var(--space-fields-single-line-container-m-right, 8px) + var(--space-fields-single-line-container-m-gap, 4px) + calc(var(var(--space-fields-postfix-gap, 4px)) + var(--size-icon-container-s, 24px) * 2)
103
- );
94
+ width:calc(100% - (var(--space-fields-single-line-container-m-right, 8px) + var(--space-fields-single-line-container-m-gap, 4px) + calc(var(var(--space-fields-postfix-gap, 4px)) + var(--size-icon-container-s, 24px) * 2)));
95
+ margin-right:calc(var(--space-fields-single-line-container-m-right, 8px) + var(--space-fields-single-line-container-m-gap, 4px) + calc(var(var(--space-fields-postfix-gap, 4px)) + var(--size-icon-container-s, 24px) * 2));
104
96
  padding-left:var(--space-fields-single-line-container-m-left, 8px);
105
97
  border-radius:var(--radius-fields-m, 14px);
106
98
  }
@@ -118,12 +110,8 @@
118
110
  color:var(--sys-neutral-text-light, #8b8e9b);
119
111
  }
120
112
  .container[data-size=l][data-variant=single-line-container] .displayValue{
121
- width:calc(100% - (
122
- var(--space-fields-single-line-container-l-right, 10px) + var(--space-fields-single-line-container-l-gap, 8px) + calc(var(var(--space-fields-postfix-gap, 4px)) + var(--size-icon-container-s, 24px) * 2)
123
- ));
124
- margin-right:calc(
125
- var(--space-fields-single-line-container-l-right, 10px) + var(--space-fields-single-line-container-l-gap, 8px) + calc(var(var(--space-fields-postfix-gap, 4px)) + var(--size-icon-container-s, 24px) * 2)
126
- );
113
+ width:calc(100% - (var(--space-fields-single-line-container-l-right, 10px) + var(--space-fields-single-line-container-l-gap, 8px) + calc(var(var(--space-fields-postfix-gap, 4px)) + var(--size-icon-container-s, 24px) * 2)));
114
+ margin-right:calc(var(--space-fields-single-line-container-l-right, 10px) + var(--space-fields-single-line-container-l-gap, 8px) + calc(var(var(--space-fields-postfix-gap, 4px)) + var(--size-icon-container-s, 24px) * 2));
127
115
  padding-left:var(--space-fields-single-line-container-l-left, 10px);
128
116
  border-radius:var(--radius-fields-l, 16px);
129
117
  }
@@ -23,5 +23,5 @@ type FieldSliderOwnProps = {
23
23
  export type FieldSliderProps = WithSupportProps<FieldSliderOwnProps & SliderProps & WrapperProps>;
24
24
  export declare const FieldSlider: import("react").ForwardRefExoticComponent<{
25
25
  'data-test-id'?: string;
26
- } & import("react").AriaAttributes & FieldSliderOwnProps & Pick<InputPrivateProps, "onFocus" | "onBlur" | "id" | "disabled" | "readonly" | "name"> & Pick<SliderComponentProps, "value" | "onChange" | "range" | "tipFormatter"> & Required<Pick<SliderComponentProps, "max" | "min" | "step" | "marks">> & WrapperProps & import("react").RefAttributes<HTMLInputElement>>;
26
+ } & import("react").AriaAttributes & FieldSliderOwnProps & Pick<InputPrivateProps, "onFocus" | "onBlur" | "id" | "disabled" | "name" | "readonly"> & Pick<SliderComponentProps, "value" | "onChange" | "range" | "tipFormatter"> & Required<Pick<SliderComponentProps, "max" | "min" | "step" | "marks">> & WrapperProps & import("react").RefAttributes<HTMLInputElement>>;
27
27
  export {};
@@ -27,5 +27,5 @@ type FieldTextOwnProps = {
27
27
  export type FieldTextProps = WithSupportProps<FieldTextOwnProps & InputProps & WrapperProps>;
28
28
  export declare const FieldText: import("react").ForwardRefExoticComponent<{
29
29
  'data-test-id'?: string;
30
- } & import("react").AriaAttributes & FieldTextOwnProps & Pick<Partial<InputPrivateProps>, "value" | "onChange"> & Pick<InputPrivateProps, "onFocus" | "onBlur" | "id" | "disabled" | "readonly" | "name" | "placeholder" | "autoComplete" | "maxLength"> & WrapperProps & import("react").RefAttributes<HTMLInputElement>>;
30
+ } & import("react").AriaAttributes & FieldTextOwnProps & Pick<Partial<InputPrivateProps>, "value" | "onChange"> & Pick<InputPrivateProps, "onFocus" | "onBlur" | "id" | "disabled" | "name" | "readonly" | "placeholder" | "autoComplete" | "maxLength"> & WrapperProps & import("react").RefAttributes<HTMLInputElement>>;
31
31
  export {};
@@ -26,5 +26,5 @@ type FieldTextAreaOwnProps = {
26
26
  export type FieldTextAreaProps = WithSupportProps<FieldTextAreaOwnProps & InputProps & WrapperProps>;
27
27
  export declare const FieldTextArea: import("react").ForwardRefExoticComponent<{
28
28
  'data-test-id'?: string;
29
- } & import("react").AriaAttributes & FieldTextAreaOwnProps & Pick<Partial<TextAreaProps>, "value"> & Pick<TextAreaProps, "onFocus" | "onBlur" | "id" | "disabled" | "readonly" | "name" | "placeholder" | "maxLength"> & WrapperProps & import("react").RefAttributes<HTMLTextAreaElement>>;
29
+ } & import("react").AriaAttributes & FieldTextAreaOwnProps & Pick<Partial<TextAreaProps>, "value"> & Pick<TextAreaProps, "onFocus" | "onBlur" | "id" | "disabled" | "name" | "readonly" | "placeholder" | "maxLength"> & WrapperProps & import("react").RefAttributes<HTMLTextAreaElement>>;
30
30
  export {};
@@ -0,0 +1,30 @@
1
+ import { TimePickerProps } from '@snack-uikit/calendar';
2
+ import { InputPrivateProps } from '@snack-uikit/input-private';
3
+ import { WithSupportProps } from '@snack-uikit/utils';
4
+ import { FieldDecoratorProps } from '../FieldDecorator';
5
+ type InputProps = Pick<InputPrivateProps, 'id' | 'name' | 'disabled' | 'readonly' | 'onFocus' | 'onBlur'>;
6
+ type WrapperProps = Pick<FieldDecoratorProps, 'className' | 'label' | 'labelTooltip' | 'required' | 'caption' | 'hint' | 'showHintIcon' | 'size' | 'validationState' | 'labelTooltipPlacement' | 'error'>;
7
+ type FieldTimeOwnProps = {
8
+ /** Открыт time-picker */
9
+ open?: boolean;
10
+ /** Колбек открытия пикера */
11
+ onOpenChange?(value: boolean): void;
12
+ /** Значение поля */
13
+ value?: TimePickerProps['value'];
14
+ /** Колбек смены значения */
15
+ onChange?: TimePickerProps['onChangeValue'];
16
+ /** Отображение кнопки копирования */
17
+ showCopyButton?: boolean;
18
+ /** Показывать ли секунды */
19
+ showSeconds?: boolean;
20
+ /**
21
+ * Отображение кнопки Очистки поля
22
+ * @default true
23
+ */
24
+ showClearButton?: boolean;
25
+ };
26
+ export type FieldTimeProps = WithSupportProps<FieldTimeOwnProps & InputProps & WrapperProps>;
27
+ export declare const FieldTime: import("react").ForwardRefExoticComponent<{
28
+ 'data-test-id'?: string;
29
+ } & import("react").AriaAttributes & FieldTimeOwnProps & InputProps & WrapperProps & import("react").RefAttributes<HTMLInputElement>>;
30
+ export {};