@snack-uikit/fields 0.49.3 → 0.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # 0.50.0 (2025-09-02)
7
+
8
+
9
+ ### Features
10
+
11
+ * **UIIAAS-1033:** added tooltips in FieldStepper counter buttons ([3f6d19f](https://github.com/cloud-ru-tech/snack-uikit/commit/3f6d19fddbe76cc9483fed77ae77bafbe610f4bf))
12
+
13
+
14
+
15
+
16
+
6
17
  ## 0.49.3 (2025-09-01)
7
18
 
8
19
  ### Only dependencies have been changed
package/README.md CHANGED
@@ -442,6 +442,8 @@ FieldStepper в основном предназначен для работы с
442
442
  | allowMoreThanLimits | `boolean` | true | Можно ли вводить c клавиатуры числа, выходящие за пределы min/max |
443
443
  | prefix | `ReactNode` | - | Произвольный префикс для поля |
444
444
  | postfix | `ReactNode` | - | Произвольный постфикс для поля |
445
+ | plusButtonTooltip | `TooltipProps` | - | Тултип над кнопкой увеличения значения |
446
+ | minusButtonTooltip | `TooltipProps` | - | Тултип над кнопкой уменьшения значения |
445
447
  | id | `string` | - | Значение html-атрибута id |
446
448
  | name | `string` | - | Значение html-атрибута name |
447
449
  | disabled | `boolean` | - | Является ли поле деактивированным |
@@ -489,7 +491,7 @@ FieldStepper в основном предназначен для работы с
489
491
  | autoFocus | `boolean` | false | Включен ли авто-фокус для поля |
490
492
  | maxLength | `number` | - | Максимальная длина вводимого значения |
491
493
  | autoComplete | `string \| boolean` | false | Включен ли автокомплит для поля |
492
- | inputMode | enum InputMode: `"text"`, `"search"`, `"tel"`, `"email"`, `"decimal"`, `"numeric"`, `"url"` | - | Режим работы экранной клавиатуры |
494
+ | inputMode | enum InputMode: `"none"`, `"text"`, `"search"`, `"tel"`, `"email"`, `"decimal"`, `"numeric"`, `"url"` | - | Режим работы экранной клавиатуры |
493
495
  | spellCheck | `boolean` | true | Значение атрибута spellcheck (проверка орфографии) |
494
496
  | pattern | `string` | - | Регулярное выражение валидного инпута |
495
497
  | onKeyDown | `KeyboardEventHandler<HTMLInputElement>` | - | Колбек обработки начала нажатия клавиши клавиатуры |
@@ -1,5 +1,6 @@
1
1
  import { ChangeEvent, ReactNode } from 'react';
2
2
  import { InputPrivateProps } from '@snack-uikit/input-private';
3
+ import { TooltipProps } from '@snack-uikit/tooltip';
3
4
  import { WithSupportProps } from '@snack-uikit/utils';
4
5
  import { FieldDecoratorProps } from '../FieldDecorator';
5
6
  type InputProps = Pick<InputPrivateProps, 'id' | 'name' | 'disabled' | 'readonly' | 'onFocus' | 'onBlur' | 'min' | 'max' | 'autoFocus'>;
@@ -17,6 +18,10 @@ type FieldStepperOwnProps = {
17
18
  prefix?: ReactNode;
18
19
  /** Произвольный постфикс для поля */
19
20
  postfix?: ReactNode;
21
+ /** Тултип над кнопкой увеличения значения */
22
+ plusButtonTooltip?: TooltipProps;
23
+ /** Тултип над кнопкой уменьшения значения */
24
+ minusButtonTooltip?: TooltipProps;
20
25
  };
21
26
  export type FieldStepperProps = WithSupportProps<FieldStepperOwnProps & InputProps & WrapperProps>;
22
27
  export declare const FieldStepper: import("react").ForwardRefExoticComponent<{
@@ -55,6 +55,8 @@ exports.FieldStepper = (0, react_1.forwardRef)((_a, ref) => {
55
55
  value: valueProp,
56
56
  min = Number.NEGATIVE_INFINITY,
57
57
  max = Number.POSITIVE_INFINITY,
58
+ plusButtonTooltip,
59
+ minusButtonTooltip,
58
60
  step = 1,
59
61
  disabled = false,
60
62
  readonly = false,
@@ -77,7 +79,7 @@ exports.FieldStepper = (0, react_1.forwardRef)((_a, ref) => {
77
79
  postfix,
78
80
  autoFocus
79
81
  } = _a,
80
- rest = __rest(_a, ["id", "name", "value", "min", "max", "step", "disabled", "readonly", "allowMoreThanLimits", "onChange", "onFocus", "onBlur", "className", "label", "labelTooltip", "labelTooltipPlacement", "required", "caption", "hint", "showHintIcon", "size", "validationState", "error", "prefix", "postfix", "autoFocus"]);
82
+ rest = __rest(_a, ["id", "name", "value", "min", "max", "plusButtonTooltip", "minusButtonTooltip", "step", "disabled", "readonly", "allowMoreThanLimits", "onChange", "onFocus", "onBlur", "className", "label", "labelTooltip", "labelTooltipPlacement", "required", "caption", "hint", "showHintIcon", "size", "validationState", "error", "prefix", "postfix", "autoFocus"]);
81
83
  const {
82
84
  t
83
85
  } = (0, locale_1.useLocale)('Fields');
@@ -188,26 +190,36 @@ exports.FieldStepper = (0, react_1.forwardRef)((_a, ref) => {
188
190
  readonly: readonly,
189
191
  variant: constants_1.CONTAINER_VARIANT.SingleLine,
190
192
  inputRef: inputRef,
191
- prefix: (0, jsx_runtime_1.jsx)(button_1.ButtonFunction, {
192
- tabIndex: -1,
193
- size: 'xs',
194
- className: styles_module_scss_1.default.button,
195
- icon: (0, jsx_runtime_1.jsx)(icons_1.MinusSVG, {}),
196
- onClick: handleMinusButtonClick,
197
- onKeyDown: handleMinusButtonKeyDown,
198
- disabled: isMinusButtonDisabled,
199
- "data-test-id": 'field-stepper__minus-button'
200
- }),
201
- postfix: (0, jsx_runtime_1.jsx)(button_1.ButtonFunction, {
202
- tabIndex: -1,
203
- size: 'xs',
204
- className: styles_module_scss_1.default.button,
205
- icon: (0, jsx_runtime_1.jsx)(icons_1.PlusSVG, {}),
206
- onClick: handlePlusButtonClick,
207
- onKeyDown: handlePlusButtonKeyDown,
208
- disabled: isPlusButtonDisabled,
209
- "data-test-id": 'field-stepper__plus-button'
210
- }),
193
+ prefix: (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, Object.assign({}, minusButtonTooltip, {
194
+ open: minusButtonTooltip ? minusButtonTooltip === null || minusButtonTooltip === void 0 ? void 0 : minusButtonTooltip.open : false,
195
+ tip: minusButtonTooltip === null || minusButtonTooltip === void 0 ? void 0 : minusButtonTooltip.tip,
196
+ "data-test-id": 'field-stepper__minus-button-tooltip',
197
+ children: (0, jsx_runtime_1.jsx)(button_1.ButtonFunction, {
198
+ tabIndex: -1,
199
+ size: 'xs',
200
+ className: styles_module_scss_1.default.button,
201
+ icon: (0, jsx_runtime_1.jsx)(icons_1.MinusSVG, {}),
202
+ onClick: handleMinusButtonClick,
203
+ onKeyDown: handleMinusButtonKeyDown,
204
+ disabled: isMinusButtonDisabled,
205
+ "data-test-id": 'field-stepper__minus-button'
206
+ })
207
+ })),
208
+ postfix: (0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, Object.assign({}, plusButtonTooltip, {
209
+ open: plusButtonTooltip ? plusButtonTooltip === null || plusButtonTooltip === void 0 ? void 0 : plusButtonTooltip.open : false,
210
+ tip: plusButtonTooltip === null || plusButtonTooltip === void 0 ? void 0 : plusButtonTooltip.tip,
211
+ "data-test-id": 'field-stepper__plus-button-tooltip',
212
+ children: (0, jsx_runtime_1.jsx)(button_1.ButtonFunction, {
213
+ tabIndex: -1,
214
+ size: 'xs',
215
+ className: styles_module_scss_1.default.button,
216
+ icon: (0, jsx_runtime_1.jsx)(icons_1.PlusSVG, {}),
217
+ onClick: handlePlusButtonClick,
218
+ onKeyDown: handlePlusButtonKeyDown,
219
+ disabled: isPlusButtonDisabled,
220
+ "data-test-id": 'field-stepper__plus-button'
221
+ })
222
+ })),
211
223
  children: (0, jsx_runtime_1.jsxs)("div", {
212
224
  className: styles_module_scss_1.default.wrap,
213
225
  children: [(0, jsx_runtime_1.jsx)("div", {
@@ -1,5 +1,6 @@
1
1
  import { ChangeEvent, ReactNode } from 'react';
2
2
  import { InputPrivateProps } from '@snack-uikit/input-private';
3
+ import { TooltipProps } from '@snack-uikit/tooltip';
3
4
  import { WithSupportProps } from '@snack-uikit/utils';
4
5
  import { FieldDecoratorProps } from '../FieldDecorator';
5
6
  type InputProps = Pick<InputPrivateProps, 'id' | 'name' | 'disabled' | 'readonly' | 'onFocus' | 'onBlur' | 'min' | 'max' | 'autoFocus'>;
@@ -17,6 +18,10 @@ type FieldStepperOwnProps = {
17
18
  prefix?: ReactNode;
18
19
  /** Произвольный постфикс для поля */
19
20
  postfix?: ReactNode;
21
+ /** Тултип над кнопкой увеличения значения */
22
+ plusButtonTooltip?: TooltipProps;
23
+ /** Тултип над кнопкой уменьшения значения */
24
+ minusButtonTooltip?: TooltipProps;
20
25
  };
21
26
  export type FieldStepperProps = WithSupportProps<FieldStepperOwnProps & InputProps & WrapperProps>;
22
27
  export declare const FieldStepper: import("react").ForwardRefExoticComponent<{
@@ -41,7 +41,7 @@ const SymbolWidth = {
41
41
  l: 10,
42
42
  };
43
43
  export const FieldStepper = forwardRef((_a, ref) => {
44
- var { id, name, value: valueProp, min = Number.NEGATIVE_INFINITY, max = Number.POSITIVE_INFINITY, step = 1, disabled = false, readonly = false, allowMoreThanLimits = true, onChange: onChangeProp, onFocus, onBlur, className, label, labelTooltip, labelTooltipPlacement, required = false, caption, hint, showHintIcon, size = SIZE.S, validationState = VALIDATION_STATE.Default, error, prefix, postfix, autoFocus } = _a, rest = __rest(_a, ["id", "name", "value", "min", "max", "step", "disabled", "readonly", "allowMoreThanLimits", "onChange", "onFocus", "onBlur", "className", "label", "labelTooltip", "labelTooltipPlacement", "required", "caption", "hint", "showHintIcon", "size", "validationState", "error", "prefix", "postfix", "autoFocus"]);
44
+ var { id, name, value: valueProp, min = Number.NEGATIVE_INFINITY, max = Number.POSITIVE_INFINITY, plusButtonTooltip, minusButtonTooltip, step = 1, disabled = false, readonly = false, allowMoreThanLimits = true, onChange: onChangeProp, onFocus, onBlur, className, label, labelTooltip, labelTooltipPlacement, required = false, caption, hint, showHintIcon, size = SIZE.S, validationState = VALIDATION_STATE.Default, error, prefix, postfix, autoFocus } = _a, rest = __rest(_a, ["id", "name", "value", "min", "max", "plusButtonTooltip", "minusButtonTooltip", "step", "disabled", "readonly", "allowMoreThanLimits", "onChange", "onFocus", "onBlur", "className", "label", "labelTooltip", "labelTooltipPlacement", "required", "caption", "hint", "showHintIcon", "size", "validationState", "error", "prefix", "postfix", "autoFocus"]);
45
45
  const { t } = useLocale('Fields');
46
46
  const [value = 0, setValue] = useValueControl({
47
47
  value: valueProp,
@@ -113,7 +113,7 @@ export const FieldStepper = forwardRef((_a, ref) => {
113
113
  return;
114
114
  }
115
115
  };
116
- return (_jsx(FieldDecorator, Object.assign({ className: className, label: label, labelTooltip: labelTooltip, labelTooltipPlacement: labelTooltipPlacement, labelFor: id, required: required, caption: caption, hint: hint, disabled: disabled, readonly: readonly, showHintIcon: showHintIcon, size: size, validationState: fieldValidationState, error: error }, extractSupportProps(rest), { children: _jsx(Tooltip, { tip: tooltip, open: allowMoreThanLimits ? false : tooltipOpen, "data-test-id": 'field-stepper__limit-tooltip', triggerClassName: styles.trigger, children: _jsx(FieldContainerPrivate, { size: size, validationState: fieldValidationState, disabled: disabled, readonly: readonly, variant: CONTAINER_VARIANT.SingleLine, inputRef: inputRef, prefix: _jsx(ButtonFunction, { tabIndex: -1, size: 'xs', className: styles.button, icon: _jsx(MinusSVG, {}), onClick: handleMinusButtonClick, onKeyDown: handleMinusButtonKeyDown, disabled: isMinusButtonDisabled, "data-test-id": 'field-stepper__minus-button' }), postfix: _jsx(ButtonFunction, { tabIndex: -1, size: 'xs', className: styles.button, icon: _jsx(PlusSVG, {}), onClick: handlePlusButtonClick, onKeyDown: handlePlusButtonKeyDown, disabled: isPlusButtonDisabled, "data-test-id": 'field-stepper__plus-button' }), children: _jsxs("div", { className: styles.wrap, children: [_jsx("div", { className: cn({ [styles.prefixWrapper]: prefixSettings.show }), children: prefixSettings.show && prefixSettings.render({ key: prefixSettings.id }) }), _jsx("div", { style: {
116
+ return (_jsx(FieldDecorator, Object.assign({ className: className, label: label, labelTooltip: labelTooltip, labelTooltipPlacement: labelTooltipPlacement, labelFor: id, required: required, caption: caption, hint: hint, disabled: disabled, readonly: readonly, showHintIcon: showHintIcon, size: size, validationState: fieldValidationState, error: error }, extractSupportProps(rest), { children: _jsx(Tooltip, { tip: tooltip, open: allowMoreThanLimits ? false : tooltipOpen, "data-test-id": 'field-stepper__limit-tooltip', triggerClassName: styles.trigger, children: _jsx(FieldContainerPrivate, { size: size, validationState: fieldValidationState, disabled: disabled, readonly: readonly, variant: CONTAINER_VARIANT.SingleLine, inputRef: inputRef, prefix: _jsx(Tooltip, Object.assign({}, minusButtonTooltip, { open: minusButtonTooltip ? minusButtonTooltip === null || minusButtonTooltip === void 0 ? void 0 : minusButtonTooltip.open : false, tip: minusButtonTooltip === null || minusButtonTooltip === void 0 ? void 0 : minusButtonTooltip.tip, "data-test-id": 'field-stepper__minus-button-tooltip', children: _jsx(ButtonFunction, { tabIndex: -1, size: 'xs', className: styles.button, icon: _jsx(MinusSVG, {}), onClick: handleMinusButtonClick, onKeyDown: handleMinusButtonKeyDown, disabled: isMinusButtonDisabled, "data-test-id": 'field-stepper__minus-button' }) })), postfix: _jsx(Tooltip, Object.assign({}, plusButtonTooltip, { open: plusButtonTooltip ? plusButtonTooltip === null || plusButtonTooltip === void 0 ? void 0 : plusButtonTooltip.open : false, tip: plusButtonTooltip === null || plusButtonTooltip === void 0 ? void 0 : plusButtonTooltip.tip, "data-test-id": 'field-stepper__plus-button-tooltip', children: _jsx(ButtonFunction, { tabIndex: -1, size: 'xs', className: styles.button, icon: _jsx(PlusSVG, {}), onClick: handlePlusButtonClick, onKeyDown: handlePlusButtonKeyDown, disabled: isPlusButtonDisabled, "data-test-id": 'field-stepper__plus-button' }) })), children: _jsxs("div", { className: styles.wrap, children: [_jsx("div", { className: cn({ [styles.prefixWrapper]: prefixSettings.show }), children: prefixSettings.show && prefixSettings.render({ key: prefixSettings.id }) }), _jsx("div", { style: {
117
117
  width: String(value).length * SymbolWidth[size],
118
118
  maxWidth: '100%',
119
119
  }, children: _jsx(InputPrivate, { ref: mergeRefs(ref, inputRef), className: styles.stepper, "data-size": size, value: String(value), tabIndex: 0, onKeyDown: handleInputKeyDown, onChange: handleInputChange, onBlur: handleInputBlur, onFocus: handleInputFocus, disabled: disabled, readonly: readonly, type: 'number', id: id, step: step, name: name, min: min, max: max, autoFocus: autoFocus, "data-test-id": 'field-stepper__input' }) }), _jsx("div", { className: cn({ [styles.postfixWrapper]: postfixSettings.show }), children: postfixSettings.show && postfixSettings.render({ key: postfixSettings.id }) })] }) }) }) })));
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "title": "Fields",
7
- "version": "0.49.3",
7
+ "version": "0.50.0",
8
8
  "sideEffects": [
9
9
  "*.css",
10
10
  "*.woff",
@@ -65,5 +65,5 @@
65
65
  "peerDependencies": {
66
66
  "@snack-uikit/locale": "*"
67
67
  },
68
- "gitHead": "881a16cd10831b0effaacb06c506521c8705d9ca"
68
+ "gitHead": "a49dc66a4046d4122721a9a7e22ec059a08c0099"
69
69
  }
@@ -16,7 +16,7 @@ import { ButtonFunction } from '@snack-uikit/button';
16
16
  import { MinusSVG, PlusSVG } from '@snack-uikit/icons';
17
17
  import { InputPrivate, InputPrivateProps, SIZE } from '@snack-uikit/input-private';
18
18
  import { useLocale } from '@snack-uikit/locale';
19
- import { Tooltip } from '@snack-uikit/tooltip';
19
+ import { Tooltip, TooltipProps } from '@snack-uikit/tooltip';
20
20
  import { extractSupportProps, WithSupportProps } from '@snack-uikit/utils';
21
21
 
22
22
  import { CONTAINER_VARIANT, VALIDATION_STATE } from '../../constants';
@@ -59,6 +59,10 @@ type FieldStepperOwnProps = {
59
59
  prefix?: ReactNode;
60
60
  /** Произвольный постфикс для поля */
61
61
  postfix?: ReactNode;
62
+ /** Тултип над кнопкой увеличения значения */
63
+ plusButtonTooltip?: TooltipProps;
64
+ /** Тултип над кнопкой уменьшения значения */
65
+ minusButtonTooltip?: TooltipProps;
62
66
  };
63
67
 
64
68
  export type FieldStepperProps = WithSupportProps<FieldStepperOwnProps & InputProps & WrapperProps>;
@@ -91,6 +95,8 @@ export const FieldStepper = forwardRef<HTMLInputElement, FieldStepperProps>(
91
95
  value: valueProp,
92
96
  min = Number.NEGATIVE_INFINITY,
93
97
  max = Number.POSITIVE_INFINITY,
98
+ plusButtonTooltip,
99
+ minusButtonTooltip,
94
100
  step = 1,
95
101
  disabled = false,
96
102
  readonly = false,
@@ -240,28 +246,42 @@ export const FieldStepper = forwardRef<HTMLInputElement, FieldStepperProps>(
240
246
  variant={CONTAINER_VARIANT.SingleLine}
241
247
  inputRef={inputRef}
242
248
  prefix={
243
- <ButtonFunction
244
- tabIndex={-1}
245
- size='xs'
246
- className={styles.button}
247
- icon={<MinusSVG />}
248
- onClick={handleMinusButtonClick}
249
- onKeyDown={handleMinusButtonKeyDown}
250
- disabled={isMinusButtonDisabled}
251
- data-test-id='field-stepper__minus-button'
252
- />
249
+ <Tooltip
250
+ {...minusButtonTooltip}
251
+ open={minusButtonTooltip ? minusButtonTooltip?.open : false}
252
+ tip={minusButtonTooltip?.tip}
253
+ data-test-id='field-stepper__minus-button-tooltip'
254
+ >
255
+ <ButtonFunction
256
+ tabIndex={-1}
257
+ size='xs'
258
+ className={styles.button}
259
+ icon={<MinusSVG />}
260
+ onClick={handleMinusButtonClick}
261
+ onKeyDown={handleMinusButtonKeyDown}
262
+ disabled={isMinusButtonDisabled}
263
+ data-test-id='field-stepper__minus-button'
264
+ />
265
+ </Tooltip>
253
266
  }
254
267
  postfix={
255
- <ButtonFunction
256
- tabIndex={-1}
257
- size='xs'
258
- className={styles.button}
259
- icon={<PlusSVG />}
260
- onClick={handlePlusButtonClick}
261
- onKeyDown={handlePlusButtonKeyDown}
262
- disabled={isPlusButtonDisabled}
263
- data-test-id='field-stepper__plus-button'
264
- />
268
+ <Tooltip
269
+ {...plusButtonTooltip}
270
+ open={plusButtonTooltip ? plusButtonTooltip?.open : false}
271
+ tip={plusButtonTooltip?.tip}
272
+ data-test-id='field-stepper__plus-button-tooltip'
273
+ >
274
+ <ButtonFunction
275
+ tabIndex={-1}
276
+ size='xs'
277
+ className={styles.button}
278
+ icon={<PlusSVG />}
279
+ onClick={handlePlusButtonClick}
280
+ onKeyDown={handlePlusButtonKeyDown}
281
+ disabled={isPlusButtonDisabled}
282
+ data-test-id='field-stepper__plus-button'
283
+ />
284
+ </Tooltip>
265
285
  }
266
286
  >
267
287
  <div className={styles.wrap}>