@cloud-ru/ds-fields 1.0.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 +8 -0
- package/LICENSE +201 -0
- package/README.md +888 -0
- package/dist/cjs/components/FieldColor/FieldColor.d.ts +48 -0
- package/dist/cjs/components/FieldColor/FieldColor.js +147 -0
- package/dist/cjs/components/FieldColor/index.d.ts +1 -0
- package/dist/cjs/components/FieldColor/index.js +17 -0
- package/dist/cjs/components/FieldColor/styles.module.css +79 -0
- package/dist/cjs/components/FieldColor/utils.d.ts +7 -0
- package/dist/cjs/components/FieldColor/utils.js +19 -0
- package/dist/cjs/components/FieldCombo/FieldCombo.d.ts +91 -0
- package/dist/cjs/components/FieldCombo/FieldCombo.js +200 -0
- package/dist/cjs/components/FieldCombo/index.d.ts +1 -0
- package/dist/cjs/components/FieldCombo/index.js +17 -0
- package/dist/cjs/components/FieldDate/FieldDate.d.ts +2 -0
- package/dist/cjs/components/FieldDate/FieldDate.js +369 -0
- package/dist/cjs/components/FieldDate/constants.d.ts +10 -0
- package/dist/cjs/components/FieldDate/constants.js +13 -0
- package/dist/cjs/components/FieldDate/index.d.ts +3 -0
- package/dist/cjs/components/FieldDate/index.js +19 -0
- package/dist/cjs/components/FieldDate/mask.d.ts +20 -0
- package/dist/cjs/components/FieldDate/mask.js +117 -0
- package/dist/cjs/components/FieldDate/styles.module.css +43 -0
- package/dist/cjs/components/FieldDate/types.d.ts +100 -0
- package/dist/cjs/components/FieldDate/types.js +2 -0
- package/dist/cjs/components/FieldDate/utils.d.ts +3 -0
- package/dist/cjs/components/FieldDate/utils.js +8 -0
- package/dist/cjs/components/FieldSecure/FieldSecure.d.ts +64 -0
- package/dist/cjs/components/FieldSecure/FieldSecure.js +158 -0
- package/dist/cjs/components/FieldSecure/index.d.ts +1 -0
- package/dist/cjs/components/FieldSecure/index.js +17 -0
- package/dist/cjs/components/FieldSelect/FieldSelect.d.ts +2 -0
- package/dist/cjs/components/FieldSelect/FieldSelect.js +360 -0
- package/dist/cjs/components/FieldSelect/constants.d.ts +4 -0
- package/dist/cjs/components/FieldSelect/constants.js +7 -0
- package/dist/cjs/components/FieldSelect/index.d.ts +3 -0
- package/dist/cjs/components/FieldSelect/index.js +19 -0
- package/dist/cjs/components/FieldSelect/styles.module.css +92 -0
- package/dist/cjs/components/FieldSelect/types.d.ts +197 -0
- package/dist/cjs/components/FieldSelect/types.js +2 -0
- package/dist/cjs/components/FieldSelect/utils.d.ts +19 -0
- package/dist/cjs/components/FieldSelect/utils.js +104 -0
- package/dist/cjs/components/FieldSlider/FieldSlider.d.ts +92 -0
- package/dist/cjs/components/FieldSlider/FieldSlider.js +196 -0
- package/dist/cjs/components/FieldSlider/index.d.ts +2 -0
- package/dist/cjs/components/FieldSlider/index.js +18 -0
- package/dist/cjs/components/FieldSlider/styles.module.css +44 -0
- package/dist/cjs/components/FieldSlider/types.d.ts +4 -0
- package/dist/cjs/components/FieldSlider/types.js +2 -0
- package/dist/cjs/components/FieldSlider/utils/generateAllowedValues.d.ts +1 -0
- package/dist/cjs/components/FieldSlider/utils/generateAllowedValues.js +16 -0
- package/dist/cjs/components/FieldSlider/utils/getClosestMark.d.ts +4 -0
- package/dist/cjs/components/FieldSlider/utils/getClosestMark.js +16 -0
- package/dist/cjs/components/FieldSlider/utils/getMarkLabel.d.ts +2 -0
- package/dist/cjs/components/FieldSlider/utils/getMarkLabel.js +7 -0
- package/dist/cjs/components/FieldSlider/utils/getTextFieldValue.d.ts +2 -0
- package/dist/cjs/components/FieldSlider/utils/getTextFieldValue.js +9 -0
- package/dist/cjs/components/FieldSlider/utils/index.d.ts +5 -0
- package/dist/cjs/components/FieldSlider/utils/index.js +21 -0
- package/dist/cjs/components/FieldSlider/utils/isMarkObject.d.ts +6 -0
- package/dist/cjs/components/FieldSlider/utils/isMarkObject.js +6 -0
- package/dist/cjs/components/FieldStepper/FieldStepper.d.ts +81 -0
- package/dist/cjs/components/FieldStepper/FieldStepper.js +160 -0
- package/dist/cjs/components/FieldStepper/index.d.ts +1 -0
- package/dist/cjs/components/FieldStepper/index.js +17 -0
- package/dist/cjs/components/FieldStepper/styles.module.css +78 -0
- package/dist/cjs/components/FieldStepper/utils.d.ts +14 -0
- package/dist/cjs/components/FieldStepper/utils.js +45 -0
- package/dist/cjs/components/FieldText/FieldText.d.ts +11 -0
- package/dist/cjs/components/FieldText/FieldText.js +14 -0
- package/dist/cjs/components/FieldText/index.d.ts +1 -0
- package/dist/cjs/components/FieldText/index.js +17 -0
- package/dist/cjs/components/FieldTextArea/FieldTextArea.d.ts +95 -0
- package/dist/cjs/components/FieldTextArea/FieldTextArea.js +114 -0
- package/dist/cjs/components/FieldTextArea/index.d.ts +1 -0
- package/dist/cjs/components/FieldTextArea/index.js +17 -0
- package/dist/cjs/components/FieldTextArea/styles.module.css +123 -0
- package/dist/cjs/components/FieldTime/FieldTime.d.ts +74 -0
- package/dist/cjs/components/FieldTime/FieldTime.js +167 -0
- package/dist/cjs/components/FieldTime/index.d.ts +2 -0
- package/dist/cjs/components/FieldTime/index.js +17 -0
- package/dist/cjs/components/FieldTime/mask.d.ts +3 -0
- package/dist/cjs/components/FieldTime/mask.js +24 -0
- package/dist/cjs/components/FieldTime/styles.module.css +3 -0
- package/dist/cjs/components/index.d.ts +14 -0
- package/dist/cjs/components/index.js +32 -0
- package/dist/cjs/components/shared/helperComponents/FieldElementButton/FieldElementButton.d.ts +35 -0
- package/dist/cjs/components/shared/helperComponents/FieldElementButton/FieldElementButton.js +47 -0
- package/dist/cjs/components/shared/helperComponents/FieldElementButton/FieldElementButtonList.d.ts +26 -0
- package/dist/cjs/components/shared/helperComponents/FieldElementButton/FieldElementButtonList.js +24 -0
- package/dist/cjs/components/shared/helperComponents/FieldElementButton/constants.d.ts +9 -0
- package/dist/cjs/components/shared/helperComponents/FieldElementButton/constants.js +12 -0
- package/dist/cjs/components/shared/helperComponents/FieldElementButton/index.d.ts +4 -0
- package/dist/cjs/components/shared/helperComponents/FieldElementButton/index.js +20 -0
- package/dist/cjs/components/shared/helperComponents/FieldElementButton/styles.module.css +204 -0
- package/dist/cjs/components/shared/helperComponents/FieldElementButton/types.d.ts +4 -0
- package/dist/cjs/components/shared/helperComponents/FieldElementButton/types.js +2 -0
- package/dist/cjs/components/shared/helperComponents/FieldShell/FieldShell.d.ts +43 -0
- package/dist/cjs/components/shared/helperComponents/FieldShell/FieldShell.js +22 -0
- package/dist/cjs/components/shared/helperComponents/FieldShell/index.d.ts +1 -0
- package/dist/cjs/components/shared/helperComponents/FieldShell/index.js +17 -0
- package/dist/cjs/components/shared/helperComponents/FieldShell/styles.module.css +11 -0
- package/dist/cjs/components/shared/hooks/useCopyButton.d.ts +20 -0
- package/dist/cjs/components/shared/hooks/useCopyButton.js +58 -0
- package/dist/cjs/components/shared/index.d.ts +4 -0
- package/dist/cjs/components/shared/index.js +20 -0
- package/dist/cjs/components/shared/styles.module.css +673 -0
- package/dist/cjs/components/shared/utils.d.ts +69 -0
- package/dist/cjs/components/shared/utils.js +104 -0
- package/dist/cjs/constants.d.ts +61 -0
- package/dist/cjs/constants.js +76 -0
- package/dist/cjs/hooks/index.d.ts +1 -0
- package/dist/cjs/hooks/index.js +17 -0
- package/dist/cjs/hooks/useAdaptiveAutoFocus.d.ts +7 -0
- package/dist/cjs/hooks/useAdaptiveAutoFocus.js +10 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.js +19 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/segments/index.d.ts +2 -0
- package/dist/cjs/segments/index.js +18 -0
- package/dist/cjs/segments/segments.d.ts +22 -0
- package/dist/cjs/segments/segments.js +46 -0
- package/dist/cjs/segments/useSegmentedMask.d.ts +43 -0
- package/dist/cjs/segments/useSegmentedMask.js +282 -0
- package/dist/cjs/style.css +1350 -0
- package/dist/esm/components/FieldColor/FieldColor.d.ts +48 -0
- package/dist/esm/components/FieldColor/FieldColor.js +141 -0
- package/dist/esm/components/FieldColor/index.d.ts +1 -0
- package/dist/esm/components/FieldColor/index.js +1 -0
- package/dist/esm/components/FieldColor/styles.module.css +79 -0
- package/dist/esm/components/FieldColor/utils.d.ts +7 -0
- package/dist/esm/components/FieldColor/utils.js +16 -0
- package/dist/esm/components/FieldCombo/FieldCombo.d.ts +91 -0
- package/dist/esm/components/FieldCombo/FieldCombo.js +194 -0
- package/dist/esm/components/FieldCombo/index.d.ts +1 -0
- package/dist/esm/components/FieldCombo/index.js +1 -0
- package/dist/esm/components/FieldDate/FieldDate.d.ts +2 -0
- package/dist/esm/components/FieldDate/FieldDate.js +363 -0
- package/dist/esm/components/FieldDate/constants.d.ts +10 -0
- package/dist/esm/components/FieldDate/constants.js +10 -0
- package/dist/esm/components/FieldDate/index.d.ts +3 -0
- package/dist/esm/components/FieldDate/index.js +3 -0
- package/dist/esm/components/FieldDate/mask.d.ts +20 -0
- package/dist/esm/components/FieldDate/mask.js +111 -0
- package/dist/esm/components/FieldDate/styles.module.css +43 -0
- package/dist/esm/components/FieldDate/types.d.ts +100 -0
- package/dist/esm/components/FieldDate/types.js +1 -0
- package/dist/esm/components/FieldDate/utils.d.ts +3 -0
- package/dist/esm/components/FieldDate/utils.js +5 -0
- package/dist/esm/components/FieldSecure/FieldSecure.d.ts +64 -0
- package/dist/esm/components/FieldSecure/FieldSecure.js +152 -0
- package/dist/esm/components/FieldSecure/index.d.ts +1 -0
- package/dist/esm/components/FieldSecure/index.js +1 -0
- package/dist/esm/components/FieldSelect/FieldSelect.d.ts +2 -0
- package/dist/esm/components/FieldSelect/FieldSelect.js +354 -0
- package/dist/esm/components/FieldSelect/constants.d.ts +4 -0
- package/dist/esm/components/FieldSelect/constants.js +4 -0
- package/dist/esm/components/FieldSelect/index.d.ts +3 -0
- package/dist/esm/components/FieldSelect/index.js +3 -0
- package/dist/esm/components/FieldSelect/styles.module.css +92 -0
- package/dist/esm/components/FieldSelect/types.d.ts +197 -0
- package/dist/esm/components/FieldSelect/types.js +1 -0
- package/dist/esm/components/FieldSelect/utils.d.ts +19 -0
- package/dist/esm/components/FieldSelect/utils.js +93 -0
- package/dist/esm/components/FieldSlider/FieldSlider.d.ts +92 -0
- package/dist/esm/components/FieldSlider/FieldSlider.js +190 -0
- package/dist/esm/components/FieldSlider/index.d.ts +2 -0
- package/dist/esm/components/FieldSlider/index.js +2 -0
- package/dist/esm/components/FieldSlider/styles.module.css +44 -0
- package/dist/esm/components/FieldSlider/types.d.ts +4 -0
- package/dist/esm/components/FieldSlider/types.js +1 -0
- package/dist/esm/components/FieldSlider/utils/generateAllowedValues.d.ts +1 -0
- package/dist/esm/components/FieldSlider/utils/generateAllowedValues.js +13 -0
- package/dist/esm/components/FieldSlider/utils/getClosestMark.d.ts +4 -0
- package/dist/esm/components/FieldSlider/utils/getClosestMark.js +13 -0
- package/dist/esm/components/FieldSlider/utils/getMarkLabel.d.ts +2 -0
- package/dist/esm/components/FieldSlider/utils/getMarkLabel.js +4 -0
- package/dist/esm/components/FieldSlider/utils/getTextFieldValue.d.ts +2 -0
- package/dist/esm/components/FieldSlider/utils/getTextFieldValue.js +6 -0
- package/dist/esm/components/FieldSlider/utils/index.d.ts +5 -0
- package/dist/esm/components/FieldSlider/utils/index.js +5 -0
- package/dist/esm/components/FieldSlider/utils/isMarkObject.d.ts +6 -0
- package/dist/esm/components/FieldSlider/utils/isMarkObject.js +3 -0
- package/dist/esm/components/FieldStepper/FieldStepper.d.ts +81 -0
- package/dist/esm/components/FieldStepper/FieldStepper.js +154 -0
- package/dist/esm/components/FieldStepper/index.d.ts +1 -0
- package/dist/esm/components/FieldStepper/index.js +1 -0
- package/dist/esm/components/FieldStepper/styles.module.css +78 -0
- package/dist/esm/components/FieldStepper/utils.d.ts +14 -0
- package/dist/esm/components/FieldStepper/utils.js +38 -0
- package/dist/esm/components/FieldText/FieldText.d.ts +11 -0
- package/dist/esm/components/FieldText/FieldText.js +11 -0
- package/dist/esm/components/FieldText/index.d.ts +1 -0
- package/dist/esm/components/FieldText/index.js +1 -0
- package/dist/esm/components/FieldTextArea/FieldTextArea.d.ts +95 -0
- package/dist/esm/components/FieldTextArea/FieldTextArea.js +108 -0
- package/dist/esm/components/FieldTextArea/index.d.ts +1 -0
- package/dist/esm/components/FieldTextArea/index.js +1 -0
- package/dist/esm/components/FieldTextArea/styles.module.css +123 -0
- package/dist/esm/components/FieldTime/FieldTime.d.ts +74 -0
- package/dist/esm/components/FieldTime/FieldTime.js +161 -0
- package/dist/esm/components/FieldTime/index.d.ts +2 -0
- package/dist/esm/components/FieldTime/index.js +1 -0
- package/dist/esm/components/FieldTime/mask.d.ts +3 -0
- package/dist/esm/components/FieldTime/mask.js +20 -0
- package/dist/esm/components/FieldTime/styles.module.css +3 -0
- package/dist/esm/components/index.d.ts +14 -0
- package/dist/esm/components/index.js +12 -0
- package/dist/esm/components/shared/helperComponents/FieldElementButton/FieldElementButton.d.ts +35 -0
- package/dist/esm/components/shared/helperComponents/FieldElementButton/FieldElementButton.js +41 -0
- package/dist/esm/components/shared/helperComponents/FieldElementButton/FieldElementButtonList.d.ts +26 -0
- package/dist/esm/components/shared/helperComponents/FieldElementButton/FieldElementButtonList.js +21 -0
- package/dist/esm/components/shared/helperComponents/FieldElementButton/constants.d.ts +9 -0
- package/dist/esm/components/shared/helperComponents/FieldElementButton/constants.js +9 -0
- package/dist/esm/components/shared/helperComponents/FieldElementButton/index.d.ts +4 -0
- package/dist/esm/components/shared/helperComponents/FieldElementButton/index.js +4 -0
- package/dist/esm/components/shared/helperComponents/FieldElementButton/styles.module.css +204 -0
- package/dist/esm/components/shared/helperComponents/FieldElementButton/types.d.ts +4 -0
- package/dist/esm/components/shared/helperComponents/FieldElementButton/types.js +1 -0
- package/dist/esm/components/shared/helperComponents/FieldShell/FieldShell.d.ts +43 -0
- package/dist/esm/components/shared/helperComponents/FieldShell/FieldShell.js +16 -0
- package/dist/esm/components/shared/helperComponents/FieldShell/index.d.ts +1 -0
- package/dist/esm/components/shared/helperComponents/FieldShell/index.js +1 -0
- package/dist/esm/components/shared/helperComponents/FieldShell/styles.module.css +11 -0
- package/dist/esm/components/shared/hooks/useCopyButton.d.ts +20 -0
- package/dist/esm/components/shared/hooks/useCopyButton.js +55 -0
- package/dist/esm/components/shared/index.d.ts +4 -0
- package/dist/esm/components/shared/index.js +4 -0
- package/dist/esm/components/shared/styles.module.css +673 -0
- package/dist/esm/components/shared/utils.d.ts +69 -0
- package/dist/esm/components/shared/utils.js +91 -0
- package/dist/esm/constants.d.ts +61 -0
- package/dist/esm/constants.js +73 -0
- package/dist/esm/hooks/index.d.ts +1 -0
- package/dist/esm/hooks/index.js +1 -0
- package/dist/esm/hooks/useAdaptiveAutoFocus.d.ts +7 -0
- package/dist/esm/hooks/useAdaptiveAutoFocus.js +7 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/segments/index.d.ts +2 -0
- package/dist/esm/segments/index.js +2 -0
- package/dist/esm/segments/segments.d.ts +22 -0
- package/dist/esm/segments/segments.js +43 -0
- package/dist/esm/segments/useSegmentedMask.d.ts +43 -0
- package/dist/esm/segments/useSegmentedMask.js +279 -0
- package/dist/esm/style.css +1350 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/package.json +62 -0
- package/src/components/FieldColor/FieldColor.tsx +426 -0
- package/src/components/FieldColor/index.ts +1 -0
- package/src/components/FieldColor/styles.module.scss +120 -0
- package/src/components/FieldColor/utils.ts +17 -0
- package/src/components/FieldCombo/FieldCombo.tsx +495 -0
- package/src/components/FieldCombo/index.ts +1 -0
- package/src/components/FieldDate/FieldDate.tsx +658 -0
- package/src/components/FieldDate/constants.ts +11 -0
- package/src/components/FieldDate/index.ts +3 -0
- package/src/components/FieldDate/mask.ts +123 -0
- package/src/components/FieldDate/styles.module.scss +56 -0
- package/src/components/FieldDate/types.ts +124 -0
- package/src/components/FieldDate/utils.ts +7 -0
- package/src/components/FieldSecure/FieldSecure.tsx +398 -0
- package/src/components/FieldSecure/index.ts +1 -0
- package/src/components/FieldSelect/FieldSelect.tsx +689 -0
- package/src/components/FieldSelect/constants.ts +4 -0
- package/src/components/FieldSelect/index.ts +3 -0
- package/src/components/FieldSelect/styles.module.scss +104 -0
- package/src/components/FieldSelect/types.ts +212 -0
- package/src/components/FieldSelect/utils.ts +134 -0
- package/src/components/FieldSlider/FieldSlider.tsx +502 -0
- package/src/components/FieldSlider/index.ts +2 -0
- package/src/components/FieldSlider/styles.module.scss +47 -0
- package/src/components/FieldSlider/types.ts +5 -0
- package/src/components/FieldSlider/utils/generateAllowedValues.ts +13 -0
- package/src/components/FieldSlider/utils/getClosestMark.ts +21 -0
- package/src/components/FieldSlider/utils/getMarkLabel.ts +7 -0
- package/src/components/FieldSlider/utils/getTextFieldValue.ts +8 -0
- package/src/components/FieldSlider/utils/index.ts +5 -0
- package/src/components/FieldSlider/utils/isMarkObject.ts +7 -0
- package/src/components/FieldStepper/FieldStepper.tsx +457 -0
- package/src/components/FieldStepper/index.ts +1 -0
- package/src/components/FieldStepper/styles.module.scss +98 -0
- package/src/components/FieldStepper/utils.ts +44 -0
- package/src/components/FieldText/FieldText.tsx +27 -0
- package/src/components/FieldText/index.ts +1 -0
- package/src/components/FieldTextArea/FieldTextArea.tsx +374 -0
- package/src/components/FieldTextArea/index.ts +1 -0
- package/src/components/FieldTextArea/styles.module.scss +192 -0
- package/src/components/FieldTime/FieldTime.tsx +401 -0
- package/src/components/FieldTime/index.ts +2 -0
- package/src/components/FieldTime/mask.ts +22 -0
- package/src/components/FieldTime/styles.module.scss +3 -0
- package/src/components/index.ts +14 -0
- package/src/components/shared/helperComponents/FieldElementButton/FieldElementButton.tsx +127 -0
- package/src/components/shared/helperComponents/FieldElementButton/FieldElementButtonList.tsx +72 -0
- package/src/components/shared/helperComponents/FieldElementButton/constants.ts +10 -0
- package/src/components/shared/helperComponents/FieldElementButton/index.ts +4 -0
- package/src/components/shared/helperComponents/FieldElementButton/styles.module.scss +137 -0
- package/src/components/shared/helperComponents/FieldElementButton/types.ts +6 -0
- package/src/components/shared/helperComponents/FieldShell/FieldShell.tsx +100 -0
- package/src/components/shared/helperComponents/FieldShell/index.ts +1 -0
- package/src/components/shared/helperComponents/FieldShell/styles.module.scss +13 -0
- package/src/components/shared/hooks/useCopyButton.tsx +103 -0
- package/src/components/shared/index.ts +4 -0
- package/src/components/shared/styles.module.scss +409 -0
- package/src/components/shared/utils.ts +128 -0
- package/src/constants.ts +73 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useAdaptiveAutoFocus.ts +16 -0
- package/src/index.ts +3 -0
- package/src/segments/index.ts +2 -0
- package/src/segments/segments.ts +74 -0
- package/src/segments/useSegmentedMask.ts +361 -0
package/README.md
ADDED
|
@@ -0,0 +1,888 @@
|
|
|
1
|
+
# Fields
|
|
2
|
+
|
|
3
|
+
`@cloud-ru/ds-fields` — Поля ввода с единой обёрткой label/caption/hint/error и общими осями size/validationState — текст, пароль, число, ползунок, дата, время, выбор, цвет.
|
|
4
|
+
|
|
5
|
+
Пакет `@cloud-ru/ds-fields` объединяет поля ввода с общими осями `size` (`s`/`m`/`l`) и `validationState` (`default`/`error`/`warning`/`success`) и единой обёрткой label/caption/hint/error.
|
|
6
|
+
|
|
7
|
+
- **`FieldText`** — однострочное текстовое поле.
|
|
8
|
+
- **`FieldSecure`** — поле для паролей и токенов с переключателем видимости.
|
|
9
|
+
- **`FieldTextArea`** — многострочное поле с опциональным resize.
|
|
10
|
+
- **`FieldStepper`** — числовое поле с кнопками −/+.
|
|
11
|
+
- **`FieldSlider`** — поле с ползунком + связанным input'ом.
|
|
12
|
+
- **`FieldSelect`** — выпадающий список с одиночным и множественным выбором.
|
|
13
|
+
- **`FieldDate`** — поле выбора даты/даты-времени с календарём и маской ввода.
|
|
14
|
+
- **`FieldTime`** — поле выбора времени с пикером и маской.
|
|
15
|
+
- **`FieldColor`** — поле выбора цвета с ColorPicker в дропдауне.
|
|
16
|
+
|
|
17
|
+
Структурная обёртка `FieldDecorator` (label/caption/hint/error/length) вынесена в отдельный пакет **`@cloud-ru/ds-field-decorator`**.
|
|
18
|
+
|
|
19
|
+
## Установка
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pnpm add @cloud-ru/ds-fields
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
import {
|
|
27
|
+
FieldText,
|
|
28
|
+
FieldSecure,
|
|
29
|
+
FieldTextArea,
|
|
30
|
+
FieldStepper,
|
|
31
|
+
FieldSlider,
|
|
32
|
+
FieldSelect,
|
|
33
|
+
FieldDate,
|
|
34
|
+
FieldTime,
|
|
35
|
+
FieldColor,
|
|
36
|
+
} from '@cloud-ru/ds-fields'
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## FieldColor
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
import { FieldColor } from '@cloud-ru/ds-fields';
|
|
43
|
+
import { useState } from 'react';
|
|
44
|
+
|
|
45
|
+
export function ColorBasic() {
|
|
46
|
+
const [value, setValue] = useState('#1976d2');
|
|
47
|
+
return (
|
|
48
|
+
<FieldColor
|
|
49
|
+
label='Цвет акцента'
|
|
50
|
+
hint='Откройте палитру шевроном или кликом по полю'
|
|
51
|
+
value={value}
|
|
52
|
+
onChange={setValue}
|
|
53
|
+
/>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Props `FieldColorProps`
|
|
59
|
+
|
|
60
|
+
| Prop | Type | Default | Description |
|
|
61
|
+
|------|------|---------|-------------|
|
|
62
|
+
| `autoApply` | `boolean` | `true` | Применять изменения автоматически. Если `false` — появляются кнопки Cancel/Apply. <br/> По умолчанию `true` — без футера (паритет с Figma colorPicker, где Cancel/Apply нет). |
|
|
63
|
+
| `autoComplete` | `string \| boolean` | `false` | Включен ли автокомплит для поля |
|
|
64
|
+
| `autoFocus` | `boolean` | `false` | Включен ли авто-фокус для поля |
|
|
65
|
+
| `availableModes` | `ColorMode` | `['hex', 'hsv', 'rgb']` | Какие цветовые модели доступны переключателю. |
|
|
66
|
+
| `background` | `boolean` | `true` | Фон поля (acrylic). |
|
|
67
|
+
| `caption` | `string` | — | Вторичная подпись справа |
|
|
68
|
+
| `className` | `string` | — | CSS-класс <br/> CSS-класс корня `FieldDecorator` |
|
|
69
|
+
| `data-test-id` | `string` | `field-color` | |
|
|
70
|
+
| `defaultValue` | `string` | `` | Начальное значение (uncontrolled-режим). |
|
|
71
|
+
| `disabled` | `boolean` | `false` | Поле выключено <br/> Является ли поле деактивированным |
|
|
72
|
+
| `error` | `string` | — | Ошибка (приоритетнее `hint`; форсит `validationState=error`) |
|
|
73
|
+
| `fieldClassName` | `string` | — | CSS-класс оболочки поля |
|
|
74
|
+
| `hint` | `string` | — | Подсказка |
|
|
75
|
+
| `id` | `string` | — | Значение html-атрибута id |
|
|
76
|
+
| `innerRef` | `Ref<HTMLDivElement>` | — | Ref на корневой DOM-элемент |
|
|
77
|
+
| `inputMode` | `"decimal"` \| `"email"` \| `"none"` \| `"numeric"` \| `"search"` \| `"tel"` \| `"text"` \| `"url"` | — | Режим работы экранной клавиатуры |
|
|
78
|
+
| `label` | `string` | `` | Заголовок |
|
|
79
|
+
| `labelFor` | `string` | — | HTML-атрибут `for` для `<label>` |
|
|
80
|
+
| `labelTooltip` | `QuestionTooltipProps` | — | Подсказка (question-tooltip) у заголовка |
|
|
81
|
+
| `layoutPresets` | `FieldLayoutPresets` | — | Переопределение адаптивных дефолтов по раскладке. Участвует `autoFocus`: на mobile он выключен <br/> (открывает клавиатуру без действия). Вернуть на mobile — `layoutPresets={{ mobile: { autoFocus: true } }}`. |
|
|
82
|
+
| `length` | `FieldLength` | — | Счётчик длины `current/max` |
|
|
83
|
+
| `max` | `number` | — | Максимальное значение поля |
|
|
84
|
+
| `maxLength` | `number` | — | Максимальная длина вводимого значения |
|
|
85
|
+
| `min` | `number` | — | Минимальное значение поля |
|
|
86
|
+
| `name` | `string` | — | Значение html-атрибута name |
|
|
87
|
+
| `onBlur` | `FocusEventHandler<HTMLInputElement>` | — | Колбек обработки потери фокуса |
|
|
88
|
+
| `onChange` | `((value: string) => void)` | — | Колбек смены значения. |
|
|
89
|
+
| `onClearButtonClick` | `(() => void)` | — | Колбек после клика по кнопке очистки. |
|
|
90
|
+
| `onClick` | `MouseEventHandler<HTMLInputElement>` | — | Колбек обработки клика |
|
|
91
|
+
| `onCopyButtonClick` | `(() => void)` | — | Колбек после копирования значения. |
|
|
92
|
+
| `onFocus` | `FocusEventHandler<HTMLInputElement>` | — | Колбек обработки получения фокуса |
|
|
93
|
+
| `onKeyDown` | `KeyboardEventHandler<HTMLInputElement>` | — | Колбек обработки начала нажатия клавиши клавиатуры |
|
|
94
|
+
| `onMouseDown` | `MouseEventHandler<HTMLInputElement>` | — | Колбек обработки нажатия кнопки мыши |
|
|
95
|
+
| `onOpenChange` | `((open: boolean) => void)` | — | Колбек смены состояния открытия. |
|
|
96
|
+
| `onPaste` | `ClipboardEventHandler<HTMLInputElement>` | — | Колбек обработки вставки значения |
|
|
97
|
+
| `open` | `boolean` | — | Открыт color-picker. |
|
|
98
|
+
| `pattern` | `string` | — | Регулярное выражение валидного инпута |
|
|
99
|
+
| `placeholder` | `string` | — | Значение плейсхолдера |
|
|
100
|
+
| `readonly` | `boolean` | `false` | Только для чтения <br/> Является ли поле доступным только для чтения |
|
|
101
|
+
| `required` | `boolean` | — | Показать знак обязательности `*` |
|
|
102
|
+
| `showClearButton` | `boolean` | `true` | Показывать кнопку очистки (видна при value && !readonly && !disabled). |
|
|
103
|
+
| `showCopyButton` | `boolean` | `true` | Показывать кнопку копирования (видна при readonly && value && !disabled). |
|
|
104
|
+
| `showHintIcon` | `boolean` | — | Отображение статус-иконки у подсказки (по умолчанию `true`) |
|
|
105
|
+
| `size` | `"l"` \| `"m"` \| `"s"` | `m` | Размер |
|
|
106
|
+
| `spellCheck` | `boolean` | `true` | Значение атрибута spellcheck (проверка орфографии) |
|
|
107
|
+
| `step` | `string \| number` | — | Максимальное значение поля |
|
|
108
|
+
| `tabIndex` | `number` | `0` | Значение атрибута tab-index |
|
|
109
|
+
| `type` | `"email"` \| `"number"` \| `"password"` \| `"tel"` \| `"text"` \| `"url"` | — | Тип инпута |
|
|
110
|
+
| `validationState` | `"default"` \| `"error"` \| `"success"` \| `"warning"` | `default` | Состояние валидации |
|
|
111
|
+
| `value` | `string` | — | Текущее значение (hex/rgb/hsl-строка, controlled-режим). |
|
|
112
|
+
| `withAlpha` | `boolean` | `true` | Управляет альфа-каналом палитры и наличием поля Alpha. |
|
|
113
|
+
|
|
114
|
+
#### Related types
|
|
115
|
+
|
|
116
|
+
**FieldLayoutPresets**
|
|
117
|
+
|
|
118
|
+
| Prop | Type | Default | Description |
|
|
119
|
+
|------|------|---------|-------------|
|
|
120
|
+
| `desktop` | `any` | — | |
|
|
121
|
+
| `desktopSmall` | `any` | — | |
|
|
122
|
+
| `mobile` | `any` | — | |
|
|
123
|
+
| `tablet` | `any` | — | |
|
|
124
|
+
|
|
125
|
+
## FieldCombo
|
|
126
|
+
|
|
127
|
+
```tsx
|
|
128
|
+
import { FieldCombo } from '@cloud-ru/ds-fields';
|
|
129
|
+
import { useState } from 'react';
|
|
130
|
+
|
|
131
|
+
export function Affixes() {
|
|
132
|
+
const [value, setValue] = useState('100');
|
|
133
|
+
return <FieldCombo label='Сумма' prefix='$' postfix='USD' value={value} onChange={setValue} />;
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Props `FieldComboProps`
|
|
138
|
+
|
|
139
|
+
| Prop | Type | Default | Description |
|
|
140
|
+
|------|------|---------|-------------|
|
|
141
|
+
| `allowMoreThanMaxLength` | `boolean` | `false` | Разрешить ввод свыше `maxLength` символов (счётчик продолжит расти). |
|
|
142
|
+
| `autoComplete` | `string \| boolean` | `false` | Включен ли автокомплит для поля |
|
|
143
|
+
| `autoFocus` | `boolean` | `false` | Включен ли авто-фокус для поля |
|
|
144
|
+
| `background` | `boolean` | `true` | Фон поля (acrylic) |
|
|
145
|
+
| `caption` | `string` | — | Вторичная подпись справа |
|
|
146
|
+
| `className` | `string` | — | CSS-класс <br/> CSS-класс корня `FieldDecorator` |
|
|
147
|
+
| `data-test-id` | `string` | — | |
|
|
148
|
+
| `defaultValue` | `string` | `` | Начальное значение (uncontrolled-режим) |
|
|
149
|
+
| `disabled` | `boolean` | `false` | Поле выключено <br/> Является ли поле деактивированным |
|
|
150
|
+
| `elementAfter` | `FieldElementButtonProps` \| `FieldElementSlot` | — | Слот справа (кнопка / селект с опциональным выпадающим списком) |
|
|
151
|
+
| `elementBefore` | `FieldElementButtonProps` \| `FieldElementSlot` | — | Слот слева (кнопка / селект с опциональным выпадающим списком) |
|
|
152
|
+
| `error` | `string` | — | Ошибка (приоритетнее `hint`; форсит `validationState=error`) |
|
|
153
|
+
| `fieldClassName` | `string` | — | CSS-класс оболочки поля ввода |
|
|
154
|
+
| `hint` | `string` | — | Подсказка |
|
|
155
|
+
| `iconAfter` | `ReactNode` | — | Иконка справа от строки ввода |
|
|
156
|
+
| `iconBefore` | `ReactNode` | — | Иконка слева от строки ввода |
|
|
157
|
+
| `id` | `string` | — | Значение html-атрибута id |
|
|
158
|
+
| `innerRef` | `Ref<HTMLDivElement>` | — | Ref на корневой DOM-элемент |
|
|
159
|
+
| `innerTestIds` | `{ shell?: string; input?: string; } \| undefined` | — | Идентификаторы внутренних слотов — оболочки и строки ввода. Нужны компонентам, которые <br/> рендерят `FieldCombo` под собственным именем (`FieldText`): их e2e адресует свои слоты, <br/> а не слоты `FieldCombo`. |
|
|
160
|
+
| `inputMode` | `"decimal"` \| `"email"` \| `"none"` \| `"numeric"` \| `"search"` \| `"tel"` \| `"text"` \| `"url"` | — | Режим работы экранной клавиатуры |
|
|
161
|
+
| `label` | `string` | `` | Заголовок |
|
|
162
|
+
| `labelFor` | `string` | — | HTML-атрибут `for` для `<label>` |
|
|
163
|
+
| `labelTooltip` | `QuestionTooltipProps` | — | Подсказка (question-tooltip) у заголовка |
|
|
164
|
+
| `layoutPresets` | `FieldLayoutPresets` | — | Переопределение адаптивных дефолтов по раскладке. Участвует `autoFocus`: на mobile он выключен <br/> (открывает клавиатуру без действия). Вернуть на mobile — `layoutPresets={{ mobile: { autoFocus: true } }}`. |
|
|
165
|
+
| `length` | `FieldLength` | — | Счётчик длины `current/max` |
|
|
166
|
+
| `max` | `number` | — | Максимальное значение поля |
|
|
167
|
+
| `maxLength` | `number` | — | Максимальная длина вводимого значения |
|
|
168
|
+
| `min` | `number` | — | Минимальное значение поля |
|
|
169
|
+
| `name` | `string` | — | Значение html-атрибута name |
|
|
170
|
+
| `onBlur` | `FocusEventHandler<HTMLInputElement>` | — | Колбек обработки потери фокуса |
|
|
171
|
+
| `onChange` | `((value: string) => void)` | — | Колбек смены значения |
|
|
172
|
+
| `onClearButtonClick` | `(() => void)` | — | Колбек клика по кнопке очистки |
|
|
173
|
+
| `onClick` | `MouseEventHandler<HTMLInputElement>` | — | Колбек обработки клика |
|
|
174
|
+
| `onCopyButtonClick` | `(() => void)` | — | Колбек после копирования значения в буфер |
|
|
175
|
+
| `onFocus` | `FocusEventHandler<HTMLInputElement>` | — | Колбек обработки получения фокуса |
|
|
176
|
+
| `onKeyDown` | `KeyboardEventHandler<HTMLInputElement>` | — | Колбек обработки начала нажатия клавиши клавиатуры |
|
|
177
|
+
| `onMouseDown` | `MouseEventHandler<HTMLInputElement>` | — | Колбек обработки нажатия кнопки мыши |
|
|
178
|
+
| `onPaste` | `ClipboardEventHandler<HTMLInputElement>` | — | Колбек обработки вставки значения |
|
|
179
|
+
| `outline` | `boolean` | `true` | Разделитель между основным полем и слотами `elementBefore` / `elementAfter` |
|
|
180
|
+
| `pattern` | `string` | — | Регулярное выражение валидного инпута |
|
|
181
|
+
| `placeholder` | `string` | — | Значение плейсхолдера |
|
|
182
|
+
| `postfix` | `ReactNode` | — | Постфикс (текст или нода) |
|
|
183
|
+
| `prefix` | `ReactNode` | — | Префикс (текст или нода) |
|
|
184
|
+
| `prefixIcon` | `ReactNode` | — | Ведущая иконка. <br/> @deprecated Используйте `iconBefore` — он приоритетнее, если заданы оба. |
|
|
185
|
+
| `readonly` | `boolean` | `false` | Только для чтения <br/> Является ли поле доступным только для чтения |
|
|
186
|
+
| `required` | `boolean` | — | Показать знак обязательности `*` |
|
|
187
|
+
| `showClearButton` | `boolean` | `true` | Показывать кнопку очистки значения (как в Search) |
|
|
188
|
+
| `showCopyButton` | `boolean` | `true` | Показывать кнопку копирования значения (только при `readonly = true` и непустом `value`) |
|
|
189
|
+
| `showHintIcon` | `boolean` | — | Отображение статус-иконки у подсказки (по умолчанию `true`) |
|
|
190
|
+
| `size` | `"l"` \| `"m"` \| `"s"` | `m` | Размер |
|
|
191
|
+
| `spellCheck` | `boolean` | `true` | Значение атрибута spellcheck (проверка орфографии) |
|
|
192
|
+
| `step` | `string \| number` | — | Максимальное значение поля |
|
|
193
|
+
| `tabIndex` | `number` | `0` | Значение атрибута tab-index |
|
|
194
|
+
| `type` | `"email"` \| `"number"` \| `"password"` \| `"tel"` \| `"text"` \| `"url"` | — | Тип инпута |
|
|
195
|
+
| `validationState` | `"default"` \| `"error"` \| `"success"` \| `"warning"` | `default` | Состояние валидации |
|
|
196
|
+
| `value` | `string` | — | Значение поля (controlled-режим) |
|
|
197
|
+
|
|
198
|
+
#### Related types
|
|
199
|
+
|
|
200
|
+
- `ButtonSize` = `"l"` \| `"m"` \| `"s"`
|
|
201
|
+
|
|
202
|
+
**FieldElementButtonProps**
|
|
203
|
+
|
|
204
|
+
| Prop | Type | Default | Description |
|
|
205
|
+
|------|------|---------|-------------|
|
|
206
|
+
| `action` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | Содержимое (иконка и т.д.) |
|
|
207
|
+
| `className` | `string \| undefined` | — | CSS-класс (передаётся обёрткой `Droplist` / `PopoverPrivate` на триггер) |
|
|
208
|
+
| `data-test-id` | `string \| undefined` | — | data-test-id кнопки-слота |
|
|
209
|
+
| `disabled` | `boolean \| undefined` | — | Деактивировано |
|
|
210
|
+
| `loading` | `boolean \| undefined` | — | Состояние загрузки |
|
|
211
|
+
| `onClick` | `(() => void) \| undefined` | — | Обработчик клика |
|
|
212
|
+
| `onKeyDown` | `((event: KeyboardEvent<HTMLButtonElement>) => void) \| undefined` | — | Обработчик нажатия клавиш (передаётся обёрткой `Droplist` для ArrowDown/ArrowUp) |
|
|
213
|
+
| `open` | `boolean \| undefined` | — | Контролируемое состояние раскрытия (используется обёрткой `FieldElementButtonList`). <br/> Если задано — шеврон отражает это значение; иначе кнопка управляет шевроном сама. |
|
|
214
|
+
| `size` | `"l"` \| `"m"` \| `"s"` | — | Размер (совпадает с размером поля) |
|
|
215
|
+
| `tabIndex` | `number \| undefined` | — | HTML tabIndex (`-1` — исключить кнопку из tab-order, фокус по Tab уходит в поле) |
|
|
216
|
+
| `variant` | `"after"` \| `"before"` | — | Положение относительно поля |
|
|
217
|
+
| `withDropdownList` | `boolean \| undefined` | — | Показать шеврон раскрытия |
|
|
218
|
+
|
|
219
|
+
**FieldElementDroplistProps**
|
|
220
|
+
|
|
221
|
+
| Prop | Type | Default | Description |
|
|
222
|
+
|------|------|---------|-------------|
|
|
223
|
+
| `closeDroplistOnItemClick` | `boolean \| undefined` | — | Закрывать выпадающий список после клика на базовый айтем. <br/> Работает в режимах selection: 'none' \| 'single' |
|
|
224
|
+
| `items` | `BaseItemWithoutNonGroup` \| `CommonGroupItem` \| `Item` \| `ScrollProps` | — | Основные элементы списка |
|
|
225
|
+
| `onOpenChange` | `((open: boolean) => void) \| undefined` | — | Колбек смены состояния раскрытия |
|
|
226
|
+
| `open` | `boolean \| undefined` | — | Контролируемое состояние раскрытия |
|
|
227
|
+
| `pinBottom` | `BaseItemWithoutNonGroup` \| `CommonGroupItem` \| `Item` \| `ScrollProps` | — | Элементы списка, закрепленные снизу |
|
|
228
|
+
| `pinTop` | `BaseItemWithoutNonGroup` \| `CommonGroupItem` \| `Item` \| `ScrollProps` | — | Элементы списка, закрепленные сверху |
|
|
229
|
+
| `placement` | `"bottom"` \| `"bottom-end"` \| `"bottom-start"` \| `"left"` \| `"left-end"` \| `"left-start"` \| `"right"` \| `"right-end"` \| `"right-start"` \| `"top"` \| `"top-end"` \| `"top-start"` | — | Положение поповера относительно своего триггера (children). |
|
|
230
|
+
| `scroll` | `boolean \| undefined` | — | Включить ли скролл для основной части списка |
|
|
231
|
+
| `scrollToSelectedItem` | `boolean \| undefined` | — | Флаг, отвечающий за прокручивание до выбранного элемента |
|
|
232
|
+
| `search` | `SearchState` | — | Настройки поисковой строки |
|
|
233
|
+
| `selection` | `SelectionMultipleState` \| `SelectionSingleState` | — | Настройки выбора элементов. `mode: 'single'` — один выбранный элемент (`value: ItemId`), <br/> `mode: 'multiple'` — множественный выбор (`value: ItemId[]`). Без `selection` выбора нет — <br/> клик вызывает только `onClick` элемента. |
|
|
234
|
+
| `virtualized` | `boolean \| undefined` | — | Включить виртуализацию элементов списка. Рекомендуется при количестве элементов от 1000. |
|
|
235
|
+
| `widthStrategy` | `"auto"` \| `"eq"` \| `"gte"` | — | Стратегия управления шириной контейнера поповера <br/> - `auto` - соответствует ширине контента, <br/> - `gte` - Great Than or Equal, равен ширине таргета или больше ее, если контент в поповере шире, <br/> - `eq` - Equal, строго равен ширине таргета. |
|
|
236
|
+
|
|
237
|
+
**FieldElementSlot**
|
|
238
|
+
|
|
239
|
+
| Prop | Type | Default | Description |
|
|
240
|
+
|------|------|---------|-------------|
|
|
241
|
+
| `action` | `string \| number \| boolean \| ReactElement<any, string \| JSXElementConstructor<any>> \| Iterable<ReactNode> \| ReactPortal \| null \| undefined` | — | Содержимое (иконка и т.д.) |
|
|
242
|
+
| `className` | `string \| undefined` | — | CSS-класс (передаётся обёрткой `Droplist` / `PopoverPrivate` на триггер) |
|
|
243
|
+
| `data-test-id` | `string \| undefined` | — | data-test-id кнопки-слота |
|
|
244
|
+
| `disabled` | `boolean \| undefined` | — | Деактивировано |
|
|
245
|
+
| `droplist` | `DroplistListProps` \| `DroplistMobileSlots` \| `EmptyState` \| `FieldElementDroplistProps` \| `PublicListContextType` \| `ScrollProps` \| `SelectionState` | — | Встроенный выпадающий список (действия / выбор) на `@cloud-ru/ds-list` `Droplist` |
|
|
246
|
+
| `loading` | `boolean \| undefined` | — | Состояние загрузки |
|
|
247
|
+
| `onClick` | `(() => void) \| undefined` | — | Обработчик клика |
|
|
248
|
+
| `size` | `"l"` \| `"m"` \| `"s"` | — | Размер (совпадает с размером поля) |
|
|
249
|
+
| `tabIndex` | `number \| undefined` | — | HTML tabIndex (`-1` — исключить кнопку из tab-order, фокус по Tab уходит в поле) |
|
|
250
|
+
| `withDropdownList` | `boolean \| undefined` | — | Показать шеврон раскрытия |
|
|
251
|
+
|
|
252
|
+
- `Variant` = `"after"` \| `"before"`
|
|
253
|
+
|
|
254
|
+
## FieldDate
|
|
255
|
+
|
|
256
|
+
```tsx
|
|
257
|
+
import { FieldDate } from '@cloud-ru/ds-fields';
|
|
258
|
+
import { useState } from 'react';
|
|
259
|
+
|
|
260
|
+
export function DateBasic() {
|
|
261
|
+
const [value, setValue] = useState<Date | undefined>(undefined);
|
|
262
|
+
return <FieldDate label='Дата' hint='Маска DD.MM.YYYY или выбор в календаре' value={value} onChange={setValue} />;
|
|
263
|
+
}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Props `FieldDateProps`
|
|
267
|
+
|
|
268
|
+
| Prop | Type | Default | Description |
|
|
269
|
+
|------|------|---------|-------------|
|
|
270
|
+
| `autoFocus` | `boolean` | — | Автофокус input при монтировании. На mobile выключается адаптивно (см. `layoutPresets`) |
|
|
271
|
+
| `background` | `boolean` | `true` | Фон поля (acrylic) |
|
|
272
|
+
| `buildCellProps` | `BuildCellPropsFunction` | — | Колбек установки свойств ячеек календаря. Вызывается на построение каждой ячейки. Принимает два параметра: <br/> <br> `Date` - дата ячейки <br/> <br> `ViewMode`: <br/> <br> - `month` отображение месяца, каждая ячейка - 1 день <br/> <br> - `year` отображение года, каждая ячейка - 1 месяц <br/> <br> - `decade` отображение декады, каждая ячейка - 1 год <br/> <br><br> Колбек должен возвращать объект с полями, отвечающими за отключение и подкраску ячейки. |
|
|
273
|
+
| `caption` | `string` | — | Вторичная подпись справа |
|
|
274
|
+
| `className` | `string` | — | CSS-класс <br/> CSS-класс корня `FieldDecorator` |
|
|
275
|
+
| `closeOnApply` | `boolean` | — | Закрыть dropdown после нажатия Apply. |
|
|
276
|
+
| `closeOnPopstate` | `boolean` | — | Закрывать ли поповер при переходе по истории браузера |
|
|
277
|
+
| `data-test-id` | `string` | — | |
|
|
278
|
+
| `defaultValue` | `DateRangeValue` \| `DateValue` | — | Неуправляемое значение по умолчанию |
|
|
279
|
+
| `disabled` | `boolean` | — | Поле выключено <br/> Деактивировано |
|
|
280
|
+
| `error` | `string` | — | Ошибка (приоритетнее `hint`; форсит `validationState=error`) |
|
|
281
|
+
| `fieldClassName` | `string` | — | CSS-класс оболочки поля |
|
|
282
|
+
| `hint` | `string` | — | Подсказка |
|
|
283
|
+
| `iconBefore` | `ReactNode` | — | Иконка перед текстом (если не задано — `CalendarSVG`) |
|
|
284
|
+
| `id` | `string` | — | HTML-атрибут `id` для input (и `for` у label) |
|
|
285
|
+
| `innerRef` | `Ref<HTMLDivElement>` | — | Ref на корневой DOM-элемент |
|
|
286
|
+
| `label` | `string` | — | Заголовок |
|
|
287
|
+
| `labelFor` | `string` | — | HTML-атрибут `for` для `<label>` |
|
|
288
|
+
| `labelFrom` | `string` | `'Начало периода'` | `aria-label` поля начала периода (режим `date-range`). |
|
|
289
|
+
| `labelTo` | `string` | `'Конец периода'` | `aria-label` поля конца периода (режим `date-range`). |
|
|
290
|
+
| `labelTooltip` | `QuestionTooltipProps` | — | Подсказка (question-tooltip) у заголовка |
|
|
291
|
+
| `layoutPresets` | `FieldLayoutPresets` | — | Переопределение адаптивных дефолтов по раскладке. Участвует `autoFocus`: на mobile он выключен <br/> (открывает клавиатуру без действия). Вернуть на mobile — `layoutPresets={{ mobile: { autoFocus: true } }}`. |
|
|
292
|
+
| `length` | `FieldLength` | — | Счётчик длины `current/max` |
|
|
293
|
+
| `locale` | `Intl.Locale` | `Проставляется в соответствие с языком в настройках браузера` | Локаль, в соответствие с которой выставляется язык названий и первый день недели |
|
|
294
|
+
| `mode` | `"date"` \| `"date-range"` \| `"date-time"` | — | Режим выбора даты. По умолчанию `'date'`. <br/> Режим выбора периода |
|
|
295
|
+
| `name` | `string` | — | HTML-атрибут `name` для input |
|
|
296
|
+
| `onBlur` | `((event: FocusEvent<HTMLInputElement, Element>) => void)` | — | Колбек блюра input |
|
|
297
|
+
| `onChange` | `((value: DateValue) => void) \| ((value: DateRangeValue) => void)` | — | Колбек смены значения |
|
|
298
|
+
| `onCopyButtonClick` | `(() => void)` | — | Колбек после копирования значения в буфер |
|
|
299
|
+
| `onFocus` | `((event: FocusEvent<HTMLInputElement, Element>) => void)` | — | Колбек фокуса input |
|
|
300
|
+
| `onOpenChange` | `((isOpen: boolean) => void)` | — | Колбек отображения компонента. Срабатывает при изменении состояния open. |
|
|
301
|
+
| `open` | `boolean` | — | Управляет состоянием показан/не показан. |
|
|
302
|
+
| `placeholder` | `string` | — | Placeholder в триггере, когда нет значения |
|
|
303
|
+
| `placement` | `"bottom"` \| `"bottom-end"` \| `"bottom-start"` \| `"left"` \| `"left-end"` \| `"left-start"` \| `"right"` \| `"right-end"` \| `"right-start"` \| `"top"` \| `"top-end"` \| `"top-start"` | `top` | Положение поповера относительно своего триггера (children). |
|
|
304
|
+
| `presets` | `PresetsOptions` | — | Настройки секции с пресетами быстрого выбора периода. Доступны только при mode === 'date-range' и отсутствии buildCellProps (временно PDS-3139) |
|
|
305
|
+
| `readonly` | `boolean` | — | Только для чтения <br/> Read-only режим |
|
|
306
|
+
| `required` | `boolean` | — | Показать знак обязательности `*` |
|
|
307
|
+
| `showClearButton` | `boolean` | `true` | Показывать кнопку очистки значения (✕). Активна, когда есть значение и поле не disabled/readonly. |
|
|
308
|
+
| `showCopyButton` | `boolean` | `true` | Показывать кнопку копирования значения (только при `readonly` и непустом значении). |
|
|
309
|
+
| `showHintIcon` | `boolean` | — | Отображение статус-иконки у подсказки (по умолчанию `true`) |
|
|
310
|
+
| `showHolidays` | `boolean` | — | Раскрашивает субботу и воскресенье |
|
|
311
|
+
| `showSeconds` | `boolean` | `true` | Показывать секунды в режиме `date-time` (в маске и в выпадающем календаре). |
|
|
312
|
+
| `size` | `"l"` \| `"m"` \| `"s"` | — | Размер |
|
|
313
|
+
| `today` | `number \| Date` | — | Дата сегодняшнего дня |
|
|
314
|
+
| `validationState` | `"default"` \| `"error"` \| `"success"` \| `"warning"` | — | Состояние валидации |
|
|
315
|
+
| `value` | `DateRangeValue` \| `DateValue` | — | Управляемое значение |
|
|
316
|
+
|
|
317
|
+
#### Related types
|
|
318
|
+
|
|
319
|
+
**DateRangeValue**
|
|
320
|
+
|
|
321
|
+
| Prop | Type | Default | Description |
|
|
322
|
+
|------|------|---------|-------------|
|
|
323
|
+
| `0` | `any` | — | |
|
|
324
|
+
| `1` | `any` | — | |
|
|
325
|
+
| `length` | `any` | — | |
|
|
326
|
+
|
|
327
|
+
- `DateValue` = `Date | undefined`
|
|
328
|
+
|
|
329
|
+
**FieldLayoutPresets**
|
|
330
|
+
|
|
331
|
+
| Prop | Type | Default | Description |
|
|
332
|
+
|------|------|---------|-------------|
|
|
333
|
+
| `desktop` | `any` | — | |
|
|
334
|
+
| `desktopSmall` | `any` | — | |
|
|
335
|
+
| `mobile` | `any` | — | |
|
|
336
|
+
| `tablet` | `any` | — | |
|
|
337
|
+
|
|
338
|
+
## FieldSecure
|
|
339
|
+
|
|
340
|
+
```tsx
|
|
341
|
+
import { FieldSecure } from '@cloud-ru/ds-fields';
|
|
342
|
+
import { useState } from 'react';
|
|
343
|
+
|
|
344
|
+
export function Secure() {
|
|
345
|
+
const [value, setValue] = useState('');
|
|
346
|
+
return (
|
|
347
|
+
<FieldSecure
|
|
348
|
+
label='Пароль'
|
|
349
|
+
required
|
|
350
|
+
placeholder='Минимум 8 символов'
|
|
351
|
+
hint='Не передавайте пароль третьим лицам'
|
|
352
|
+
showHintIcon
|
|
353
|
+
value={value}
|
|
354
|
+
onChange={setValue}
|
|
355
|
+
/>
|
|
356
|
+
);
|
|
357
|
+
}
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### Props `FieldSecureProps`
|
|
361
|
+
|
|
362
|
+
| Prop | Type | Default | Description |
|
|
363
|
+
|------|------|---------|-------------|
|
|
364
|
+
| `allowMoreThanMaxLength` | `boolean` | `false` | Разрешить ввод свыше `maxLength` символов. |
|
|
365
|
+
| `asyncValueGetter` | `(() => Promise<string>)` | — | Async-загрузчик значения. Вызывается перед раскрытием/копированием значения, <br/> результат передаётся через `onChange`. Во время запроса показывается Skeleton. <br/> После успешного запроса значение считается полученным и больше не запрашивается. |
|
|
366
|
+
| `autoComplete` | `string \| boolean` | `false` | Включен ли автокомплит для поля |
|
|
367
|
+
| `autoFocus` | `boolean` | `false` | Включен ли авто-фокус для поля |
|
|
368
|
+
| `background` | `boolean` | `true` | Фон поля (acrylic) |
|
|
369
|
+
| `caption` | `string` | — | Вторичная подпись справа |
|
|
370
|
+
| `className` | `string` | — | CSS-класс <br/> CSS-класс корня `FieldDecorator` |
|
|
371
|
+
| `data-test-id` | `string` | — | |
|
|
372
|
+
| `defaultHidden` | `boolean` | `true` | Начальное состояние маскирования (uncontrolled-режим). Кнопка «глаз» переключает <br/> маскирование сама; `hidden` для этого передавать не нужно. |
|
|
373
|
+
| `defaultValue` | `string` | — | Начальное значение (uncontrolled-режим) |
|
|
374
|
+
| `disabled` | `boolean` | `false` | Поле выключено <br/> Является ли поле деактивированным |
|
|
375
|
+
| `error` | `string` | — | Ошибка (приоритетнее `hint`; форсит `validationState=error`) |
|
|
376
|
+
| `fieldClassName` | `string` | — | CSS-класс оболочки поля ввода |
|
|
377
|
+
| `hidden` | `boolean` | — | Скрыто ли значение (controlled). Для uncontrolled-режима используйте `defaultHidden`. |
|
|
378
|
+
| `hint` | `string` | — | Подсказка |
|
|
379
|
+
| `id` | `string` | — | Значение html-атрибута id |
|
|
380
|
+
| `innerRef` | `Ref<HTMLDivElement>` | — | Ref на корневой DOM-элемент |
|
|
381
|
+
| `inputMode` | `"decimal"` \| `"email"` \| `"none"` \| `"numeric"` \| `"search"` \| `"tel"` \| `"text"` \| `"url"` | — | Режим работы экранной клавиатуры |
|
|
382
|
+
| `label` | `string` | `` | Заголовок |
|
|
383
|
+
| `labelFor` | `string` | — | HTML-атрибут `for` для `<label>` |
|
|
384
|
+
| `labelTooltip` | `QuestionTooltipProps` | — | Подсказка (question-tooltip) у заголовка |
|
|
385
|
+
| `length` | `FieldLength` | — | Счётчик длины `current/max` |
|
|
386
|
+
| `max` | `number` | — | Максимальное значение поля |
|
|
387
|
+
| `maxLength` | `number` | — | Максимальная длина вводимого значения |
|
|
388
|
+
| `min` | `number` | — | Минимальное значение поля |
|
|
389
|
+
| `name` | `string` | — | Значение html-атрибута name |
|
|
390
|
+
| `onBlur` | `FocusEventHandler<HTMLInputElement>` | — | Колбек обработки потери фокуса |
|
|
391
|
+
| `onChange` | `((value: string) => void)` | — | Колбек смены значения |
|
|
392
|
+
| `onClick` | `MouseEventHandler<HTMLInputElement>` | — | Колбек обработки клика |
|
|
393
|
+
| `onCopyButtonClick` | `(() => void)` | — | Колбек после копирования значения в буфер |
|
|
394
|
+
| `onFocus` | `FocusEventHandler<HTMLInputElement>` | — | Колбек обработки получения фокуса |
|
|
395
|
+
| `onHiddenChange` | `((hidden: boolean) => void)` | — | Колбек смены маскирования |
|
|
396
|
+
| `onKeyDown` | `KeyboardEventHandler<HTMLInputElement>` | — | Колбек обработки начала нажатия клавиши клавиатуры |
|
|
397
|
+
| `onMouseDown` | `MouseEventHandler<HTMLInputElement>` | — | Колбек обработки нажатия кнопки мыши |
|
|
398
|
+
| `onPaste` | `ClipboardEventHandler<HTMLInputElement>` | — | Колбек обработки вставки значения |
|
|
399
|
+
| `pattern` | `string` | — | Регулярное выражение валидного инпута |
|
|
400
|
+
| `placeholder` | `string` | — | Значение плейсхолдера |
|
|
401
|
+
| `prefixIcon` | `ReactNode` | — | Ведущая иконка. <br/> @deprecated Используйте `iconBefore`. |
|
|
402
|
+
| `readonly` | `boolean` | `false` | Только для чтения <br/> Является ли поле доступным только для чтения |
|
|
403
|
+
| `required` | `boolean` | — | Показать знак обязательности `*` |
|
|
404
|
+
| `showCopyButton` | `boolean` | `true` | Показывать кнопку копирования (только при `readonly = true` и непустом `value`) |
|
|
405
|
+
| `showHideButton` | `boolean` | `true` | Показывать кнопку «глаз» |
|
|
406
|
+
| `showHintIcon` | `boolean` | — | Отображение статус-иконки у подсказки (по умолчанию `true`) |
|
|
407
|
+
| `size` | `"l"` \| `"m"` \| `"s"` | `m` | Размер |
|
|
408
|
+
| `spellCheck` | `boolean` | `true` | Значение атрибута spellcheck (проверка орфографии) |
|
|
409
|
+
| `step` | `string \| number` | — | Максимальное значение поля |
|
|
410
|
+
| `tabIndex` | `number` | `0` | Значение атрибута tab-index |
|
|
411
|
+
| `validationState` | `"default"` \| `"error"` \| `"success"` \| `"warning"` | `default` | Состояние валидации |
|
|
412
|
+
| `value` | `string` | — | Значение (controlled-режим) |
|
|
413
|
+
|
|
414
|
+
## FieldSelect
|
|
415
|
+
|
|
416
|
+
```tsx
|
|
417
|
+
import { FieldSelect } from '@cloud-ru/ds-fields';
|
|
418
|
+
import { ItemId, ItemProps } from '@cloud-ru/ds-list';
|
|
419
|
+
import { useState } from 'react';
|
|
420
|
+
|
|
421
|
+
const options: ItemProps[] = [
|
|
422
|
+
{ id: 's', content: { label: 'Small (1 vCPU, 2 GB)' } },
|
|
423
|
+
{ id: 'm', content: { label: 'Medium (2 vCPU, 4 GB)' } },
|
|
424
|
+
{ id: 'l', content: { label: 'Large (4 vCPU, 8 GB)' } },
|
|
425
|
+
{ id: 'xl', content: { label: 'X-Large (8 vCPU, 16 GB)' } },
|
|
426
|
+
];
|
|
427
|
+
|
|
428
|
+
export function Select() {
|
|
429
|
+
const [value, setValue] = useState<ItemId | undefined>('m');
|
|
430
|
+
return (
|
|
431
|
+
<FieldSelect
|
|
432
|
+
label='Размер инстанса'
|
|
433
|
+
placeholder='Выберите размер'
|
|
434
|
+
selection='single'
|
|
435
|
+
items={options}
|
|
436
|
+
value={value}
|
|
437
|
+
onChange={setValue}
|
|
438
|
+
/>
|
|
439
|
+
);
|
|
440
|
+
}
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
### Props `FieldSelectProps`
|
|
444
|
+
|
|
445
|
+
| Prop | Type | Default | Description |
|
|
446
|
+
|------|------|---------|-------------|
|
|
447
|
+
| `addOptionByEnter` | `boolean` | `false` | Зафиксировать введённый текст как новый выбор по `Enter` (создание опции «на лету»). |
|
|
448
|
+
| `autoFocus` | `boolean` | — | Автофокус input при монтировании. На mobile выключается адаптивно (см. `layoutPresets`) |
|
|
449
|
+
| `autocomplete` | `boolean` | `false` | Не фильтровать список на клиенте — фильтрацию обеспечивает потребитель (серверный поиск). <br/> Введённый текст уходит в `search.onChange`, список берётся из `items` как есть. |
|
|
450
|
+
| `background` | `boolean` | `true` | Фон поля (acrylic) |
|
|
451
|
+
| `caption` | `string` | — | Вторичная подпись справа |
|
|
452
|
+
| `chips` | `boolean` | `true` | Отображать выбранные значения как чипы (`@cloud-ru/ds-tag`) внутри поля. Если `false`, <br/> показывает строку из `formatSelected` либо comma-joined. |
|
|
453
|
+
| `className` | `string` | — | CSS-класс <br/> CSS-класс корня `FieldDecorator` |
|
|
454
|
+
| `closeDroplistOnItemClick` | `boolean` | `true false` | Закрывать дроплист после клика на айтем. |
|
|
455
|
+
| `closeOnPopstate` | `boolean` | — | Закрывать ли поповер при переходе по истории браузера |
|
|
456
|
+
| `data-test-id` | `string` | — | Тестовый id корня |
|
|
457
|
+
| `dataError` | `DroplistProps` | — | Флаг «ошибка загрузки данных» — при `true` дроплист рендерит `errorDataState` <br/> вместо списка (для асинхронной подгрузки с провалившимся запросом). |
|
|
458
|
+
| `dataFiltered` | `DroplistProps` | — | Флаг «список отфильтрован» — при `true` и пустом результате дроплист рендерит <br/> `noResultsState`. По умолчанию выводится из строки поиска (`searchable` + ввод). |
|
|
459
|
+
| `defaultValue` | `ItemId` | — | Неуправляемое значение по умолчанию <br/> Неуправляемые значения по умолчанию |
|
|
460
|
+
| `disabled` | `boolean` | — | Поле выключено <br/> Деактивировано |
|
|
461
|
+
| `enableFuzzySearch` | `boolean` | `true` | Включить нечёткий поиск: символы запроса должны встречаться в лейбле в том же порядке <br/> (например, `lge` найдёт `Large`). Если `false` — простой substring-match. |
|
|
462
|
+
| `error` | `string` | — | Ошибка (приоритетнее `hint`; форсит `validationState=error`) |
|
|
463
|
+
| `errorDataState` | `EmptyStateProps` | — | Экран при ошибке запроса |
|
|
464
|
+
| `fieldClassName` | `string` | — | CSS-класс оболочки поля |
|
|
465
|
+
| `footer` | `ReactNode ;` | — | Кастомизируемый элемент в конце списка |
|
|
466
|
+
| `footerActiveElementsRefs` | `RefObject<HTMLElement>[]` | — | Список ссылок на кастомные элементы, помещенные в специальную секцию внизу списка |
|
|
467
|
+
| `formatSelected` | `((selected: { id: ItemId; label: string; }[]) => string)` | `— список лейблов через `, `` | Форматтер строки выбранных значений (используется, если `chips=false`). |
|
|
468
|
+
| `hint` | `string` | — | Подсказка |
|
|
469
|
+
| `iconBefore` | `ReactNode` | — | Иконка перед текстом |
|
|
470
|
+
| `id` | `string` | — | HTML-атрибут `id` для input (и `for` у label) |
|
|
471
|
+
| `innerRef` | `Ref<HTMLDivElement>` | — | Ref на корневой DOM-элемент |
|
|
472
|
+
| `items` | `BaseItemWithoutNonGroup` \| `CommonGroupItem` \| `ItemProps` \| `ScrollProps` | — | Список айтемов дроплиста (формат `@cloud-ru/ds-list`) |
|
|
473
|
+
| `label` | `string` | — | Заголовок |
|
|
474
|
+
| `labelFor` | `string` | — | HTML-атрибут `for` для `<label>` |
|
|
475
|
+
| `labelTooltip` | `QuestionTooltipProps` | — | Подсказка (question-tooltip) у заголовка |
|
|
476
|
+
| `layoutPresets` | `FieldLayoutPresets` | — | Переопределение адаптивных дефолтов по раскладке. Участвует `autoFocus`: на mobile он выключен <br/> (открывает клавиатуру без действия). Вернуть на mobile — `layoutPresets={{ mobile: { autoFocus: true } }}`. |
|
|
477
|
+
| `length` | `FieldLength` | — | Счётчик длины `current/max` |
|
|
478
|
+
| `limitedScrollHeight` | `boolean` | — | Ограничить максимальную высоту скролл-контейнера в зависимости от `size` |
|
|
479
|
+
| `loading` | `boolean` | — | Флаг, отвечающий за состояние загрузки списка |
|
|
480
|
+
| `name` | `string` | — | HTML-атрибут `name` для input |
|
|
481
|
+
| `noDataState` | `EmptyStateProps` | — | Экран при отсутствии данных |
|
|
482
|
+
| `noResultsState` | `EmptyStateProps` | — | Экран при отсутствии результатов поиска или фильтров |
|
|
483
|
+
| `onBlur` | `((event: FocusEvent<HTMLInputElement, Element>) => void)` | — | Колбек блюра input |
|
|
484
|
+
| `onChange` | `((value: ItemId) => void) \| ((value: ItemId[]) => void)` | — | Колбек смены значения <br/> Колбек смены значений |
|
|
485
|
+
| `onCopyButtonClick` | `(() => void)` | — | Колбек после копирования значения в буфер |
|
|
486
|
+
| `onFocus` | `((event: FocusEvent<HTMLInputElement, Element>) => void)` | — | Колбек фокуса input |
|
|
487
|
+
| `onKeyDown` | `((event: KeyboardEvent<HTMLInputElement>) => void)` | — | Колбек нажатия клавиши на input (вызывается после внутренней обработки навигации) |
|
|
488
|
+
| `onOpenChange` | `DroplistProps` | — | Колбек смены открытия |
|
|
489
|
+
| `open` | `DroplistProps` | — | Управляемое открытие дроплиста |
|
|
490
|
+
| `pinBottom` | `BaseItemWithoutNonGroup` \| `CommonGroupItem` \| `ItemProps` \| `ScrollProps` | — | Пресет-айтемы снизу (формат `@cloud-ru/ds-list`) |
|
|
491
|
+
| `pinTop` | `BaseItemWithoutNonGroup` \| `CommonGroupItem` \| `ItemProps` \| `ScrollProps` | — | Пресет-айтемы сверху (формат `@cloud-ru/ds-list`) |
|
|
492
|
+
| `placeholder` | `string` | — | Placeholder в триггере, когда нет выбранного значения |
|
|
493
|
+
| `placement` | `"bottom"` \| `"bottom-end"` \| `"bottom-start"` \| `"left"` \| `"left-end"` \| `"left-start"` \| `"right"` \| `"right-end"` \| `"right-start"` \| `"top"` \| `"top-end"` \| `"top-start"` | — | Placement дроплиста |
|
|
494
|
+
| `postfix` | `ReactNode` | — | Постфикс — текст или нода после значения (Figma `postfix`) |
|
|
495
|
+
| `prefix` | `ReactNode` | — | Префикс — текст или нода перед значением (Figma `prefix`) |
|
|
496
|
+
| `readonly` | `boolean` | — | Только для чтения <br/> Read-only режим |
|
|
497
|
+
| `removeByBackspace` | `boolean` | `true` | Удалять последний чип по `Backspace`, когда строка ввода пустая. <br/> Работает только при `chips=true` и `searchable=true`. |
|
|
498
|
+
| `required` | `boolean` | — | Показать знак обязательности `*` |
|
|
499
|
+
| `resetSearchOnOptionSelection` | `boolean` | `true` | Сбрасывать строку поиска к выбранному значению после выбора. `false` нужен при асинхронной <br/> подгрузке (оставить введённый запрос как значение, пока данные не пришли). |
|
|
500
|
+
| `scrollToSelectedItem` | `boolean` | — | Флаг, отвечающий за прокручивание до выбранного элемента |
|
|
501
|
+
| `search` | `{ value?: string; defaultValue?: string; onChange?(value: string): void; } \| undefined` | — | Управляемое/неуправляемое состояние строки поиска (текста в поле). Позволяет потребителю <br/> читать и задавать запрос (например, для серверного поиска вместе с `autocomplete`). |
|
|
502
|
+
| `searchable` | `boolean` | `true` | Включить поиск/ввод в поле — пользователь печатает, список фильтруется по подстроке лейбла. |
|
|
503
|
+
| `selectedOptionFormatter` | `((selected: { id: ItemId; label: string; }) => string)` | — | Кастомный форматтер лейбла выбранного значения. Применяется к каждому выбранному <br/> элементу (single — значение в поле, multiple — лейбл чипа или элемент в comma-joined). |
|
|
504
|
+
| `selection` | `"multiple"` \| `"single"` | — | Режим выбора. По умолчанию `'single'`. <br/> Режим выбора |
|
|
505
|
+
| `showClearButton` | `boolean` | `true` | Показывать кнопку очистки значения (✕). Активна, когда есть выбранное значение <br/> и поле не disabled/readonly. |
|
|
506
|
+
| `showCopyButton` | `boolean` | `true` | Показывать кнопку копирования значения (только при `readonly` и непустом значении). |
|
|
507
|
+
| `showHintIcon` | `boolean` | — | Отображение статус-иконки у подсказки (по умолчанию `true`) |
|
|
508
|
+
| `size` | `"l"` \| `"m"` \| `"s"` | — | Размер |
|
|
509
|
+
| `untouchableScrollbars` | `boolean` | — | Отключает возможность взаимодействовать со скролбарами мышью. |
|
|
510
|
+
| `validationState` | `"default"` \| `"error"` \| `"success"` \| `"warning"` | — | Состояние валидации |
|
|
511
|
+
| `value` | `ItemId` | — | Управляемое значение <br/> Управляемые значения |
|
|
512
|
+
| `virtualized` | `boolean` | — | Включить виртуализацию элементов списка. Рекомендуется при количестве элементов от 1000. |
|
|
513
|
+
| `widthStrategy` | `"auto"` \| `"eq"` \| `"gte"` | `'eq' — равна ширине триггера` | Стратегия ширины дроплиста. |
|
|
514
|
+
|
|
515
|
+
## FieldSlider
|
|
516
|
+
|
|
517
|
+
```tsx
|
|
518
|
+
import { FieldSlider } from '@cloud-ru/ds-fields';
|
|
519
|
+
import { useState } from 'react';
|
|
520
|
+
|
|
521
|
+
export function SliderRange() {
|
|
522
|
+
const [value, setValue] = useState<number[]>([20, 80]);
|
|
523
|
+
return (
|
|
524
|
+
<FieldSlider
|
|
525
|
+
label='Диапазон цены'
|
|
526
|
+
hint='₽/мес. Текстовое поле в range-режиме только для чтения'
|
|
527
|
+
range
|
|
528
|
+
min={0}
|
|
529
|
+
max={100}
|
|
530
|
+
step={1}
|
|
531
|
+
postfix='₽'
|
|
532
|
+
value={value}
|
|
533
|
+
onChange={v => setValue(v as number[])}
|
|
534
|
+
/>
|
|
535
|
+
);
|
|
536
|
+
}
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
### Props `FieldSliderProps`
|
|
540
|
+
|
|
541
|
+
| Prop | Type | Default | Description |
|
|
542
|
+
|------|------|---------|-------------|
|
|
543
|
+
| `autoFocus` | `boolean` | — | Автофокус. На mobile выключается адаптивно (см. `layoutPresets`) |
|
|
544
|
+
| `background` | `boolean` | `true` | Фон поля (acrylic) |
|
|
545
|
+
| `caption` | `string` | — | Вторичная подпись справа |
|
|
546
|
+
| `className` | `string` | — | CSS-класс <br/> CSS-класс корня `FieldDecorator` |
|
|
547
|
+
| `data-test-id` | `string` | — | |
|
|
548
|
+
| `defaultValue` | `SliderValue` | — | Начальное значение (uncontrolled-режим). По умолчанию `min` (или `[min, max]` при `range`). |
|
|
549
|
+
| `disabled` | `boolean` | — | Поле выключено |
|
|
550
|
+
| `error` | `string` | — | Ошибка (приоритетнее `hint`; форсит `validationState=error`) |
|
|
551
|
+
| `fieldClassName` | `string` | — | CSS-класс оболочки поля |
|
|
552
|
+
| `hint` | `string` | — | Подсказка |
|
|
553
|
+
| `id` | `string` | — | HTML id |
|
|
554
|
+
| `innerRef` | `Ref<HTMLDivElement>` | — | Ref на корневой DOM-элемент |
|
|
555
|
+
| `label` | `string` | `` | Заголовок |
|
|
556
|
+
| `labelFor` | `string` | — | HTML-атрибут `for` для `<label>` |
|
|
557
|
+
| `labelTooltip` | `QuestionTooltipProps` | — | Подсказка (question-tooltip) у заголовка |
|
|
558
|
+
| `layoutPresets` | `FieldLayoutPresets` | — | Переопределение адаптивных дефолтов по раскладке. Участвует `autoFocus`: на mobile он выключен <br/> (открывает клавиатуру без действия). Вернуть на mobile — `layoutPresets={{ mobile: { autoFocus: true } }}`. |
|
|
559
|
+
| `length` | `FieldLength` | — | Счётчик длины `current/max` |
|
|
560
|
+
| `marks` | `SliderMarks` | — | Метки на шкале |
|
|
561
|
+
| `marksEqualSpacing` | `boolean` | `false` | Равномерно распределять метки по шкале при нелинейных значениях <br/> (например `1 2 4 8 16 32` — равные промежутки вместо логарифмических). |
|
|
562
|
+
| `max` | `number` | — | Максимум |
|
|
563
|
+
| `min` | `number` | — | Минимум |
|
|
564
|
+
| `name` | `string` | — | HTML name |
|
|
565
|
+
| `onBlur` | `((event: FocusEvent<HTMLInputElement, Element>) => void)` | — | Колбек блюра |
|
|
566
|
+
| `onChange` | `((value: SliderValue) => void)` | — | Колбек смены значения |
|
|
567
|
+
| `onCopyButtonClick` | `(() => void)` | — | Колбек после успешного копирования значения. |
|
|
568
|
+
| `onFocus` | `((event: FocusEvent<HTMLInputElement, Element>) => void)` | — | Колбек фокуса |
|
|
569
|
+
| `postfix` | `ReactNode` | — | Произвольный постфикс |
|
|
570
|
+
| `postfixIcon` | `ReactElement<any, string \| JSXElementConstructor<any>>` | — | Иконка-постфикс справа от текстового поля |
|
|
571
|
+
| `prefix` | `ReactNode` | — | Произвольный префикс |
|
|
572
|
+
| `range` | `boolean` | `false` | Диапазон с двумя ручками. Текстовое поле в этом режиме `readonly` <br/> и показывает значение как `min – max`. |
|
|
573
|
+
| `readonly` | `boolean` | — | Только для чтения |
|
|
574
|
+
| `required` | `boolean` | — | Показать знак обязательности `*` |
|
|
575
|
+
| `showCopyButton` | `boolean` | `true` | Показывать кнопку копирования значения (видна в readonly, при `!disabled`). |
|
|
576
|
+
| `showHintIcon` | `boolean` | — | Отображение статус-иконки у подсказки (по умолчанию `true`) |
|
|
577
|
+
| `showScaleBar` | `boolean` | `true` | Показывать линейку с метками |
|
|
578
|
+
| `size` | `"l"` \| `"m"` \| `"s"` | `m` | Размер |
|
|
579
|
+
| `step` | `number \| null` | — | Шаг приращения. `null` — снэп только к меткам. |
|
|
580
|
+
| `textInputFormatter` | `TextInputFormatter` | — | Форматирование значения в текстовом поле |
|
|
581
|
+
| `unbindInputFromMarks` | `boolean` | `false` | Если `true` — текстовое поле принимает любые числа в диапазоне `min..max`, <br/> не снэпя к меткам. |
|
|
582
|
+
| `validationState` | `"default"` \| `"error"` \| `"success"` \| `"warning"` | `default` | Состояние валидации |
|
|
583
|
+
| `value` | `SliderValue` | — | Значение (число или диапазон при `range`; controlled-режим) |
|
|
584
|
+
|
|
585
|
+
#### Related types
|
|
586
|
+
|
|
587
|
+
**FieldLayoutPresets**
|
|
588
|
+
|
|
589
|
+
| Prop | Type | Default | Description |
|
|
590
|
+
|------|------|---------|-------------|
|
|
591
|
+
| `desktop` | `any` | — | |
|
|
592
|
+
| `desktopSmall` | `any` | — | |
|
|
593
|
+
| `mobile` | `any` | — | |
|
|
594
|
+
| `tablet` | `any` | — | |
|
|
595
|
+
|
|
596
|
+
- `SliderMarks` = `{ [x: string]: ReactNode | MarkObj; [x: number]: ReactNode | MarkObj; }`
|
|
597
|
+
|
|
598
|
+
- `SliderValue` = `number | number[]`
|
|
599
|
+
|
|
600
|
+
- `TextInputFormatter` = `(value: number) => string`
|
|
601
|
+
|
|
602
|
+
## FieldStepper
|
|
603
|
+
|
|
604
|
+
```tsx
|
|
605
|
+
import { FieldStepper } from '@cloud-ru/ds-fields';
|
|
606
|
+
import { useState } from 'react';
|
|
607
|
+
|
|
608
|
+
export function Stepper() {
|
|
609
|
+
const [value, setValue] = useState(1);
|
|
610
|
+
return <FieldStepper label='Количество' value={value} onChange={setValue} />;
|
|
611
|
+
}
|
|
612
|
+
```
|
|
613
|
+
|
|
614
|
+
### Props `FieldStepperProps`
|
|
615
|
+
|
|
616
|
+
| Prop | Type | Default | Description |
|
|
617
|
+
|------|------|---------|-------------|
|
|
618
|
+
| `allowMoreThanLimits` | `boolean` | `true` | Разрешить ввод значений вне `min`/`max`. Если `false`, на blur значение клампится. |
|
|
619
|
+
| `autoFocus` | `boolean` | — | Автофокус. На mobile выключается адаптивно (см. `layoutPresets`) |
|
|
620
|
+
| `background` | `boolean` | `true` | Фон поля (acrylic) |
|
|
621
|
+
| `caption` | `string` | — | Вторичная подпись справа |
|
|
622
|
+
| `clampTooltipText` | `{ min?: ((value: number) => string); max?: ((value: number) => string); } \| undefined` | `{ min: 'Значение должно быть больше либо равно {value}', max: 'Значение должно быть меньше либо равно {value}' }` | Тексты тултипа клампа (показывается на 2с после blur с выходом за `min`/`max`). |
|
|
623
|
+
| `className` | `string` | — | CSS-класс <br/> CSS-класс корня `FieldDecorator` |
|
|
624
|
+
| `data-test-id` | `string` | — | |
|
|
625
|
+
| `defaultValue` | `number` | — | Начальное значение (uncontrolled-режим). По умолчанию выводится из `min`/`max`. |
|
|
626
|
+
| `disabled` | `boolean` | — | Поле выключено |
|
|
627
|
+
| `error` | `string` | — | Ошибка (приоритетнее `hint`; форсит `validationState=error`) |
|
|
628
|
+
| `fieldClassName` | `string` | — | CSS-класс оболочки поля |
|
|
629
|
+
| `hint` | `string` | — | Подсказка |
|
|
630
|
+
| `id` | `string` | — | HTML id |
|
|
631
|
+
| `innerRef` | `Ref<HTMLDivElement>` | — | Ref на корневой DOM-элемент |
|
|
632
|
+
| `label` | `string` | `` | Заголовок |
|
|
633
|
+
| `labelFor` | `string` | — | HTML-атрибут `for` для `<label>` |
|
|
634
|
+
| `labelTooltip` | `QuestionTooltipProps` | — | Подсказка (question-tooltip) у заголовка |
|
|
635
|
+
| `layoutPresets` | `FieldLayoutPresets` | — | Переопределение адаптивных дефолтов по раскладке. Участвует `autoFocus`: на mobile он выключен <br/> (открывает клавиатуру без действия). Вернуть на mobile — `layoutPresets={{ mobile: { autoFocus: true } }}`. |
|
|
636
|
+
| `length` | `FieldLength` | — | Счётчик длины `current/max` |
|
|
637
|
+
| `max` | `number` | — | Максимум |
|
|
638
|
+
| `min` | `number` | — | Минимум |
|
|
639
|
+
| `minusButtonTooltip` | `TooltipProps` | — | Тултип над кнопкой `−` |
|
|
640
|
+
| `name` | `string` | — | HTML name |
|
|
641
|
+
| `onBlur` | `((event: FocusEvent<HTMLInputElement, Element>) => void)` | — | Колбек блюра |
|
|
642
|
+
| `onChange` | `((value: number, event?: ChangeEvent<HTMLInputElement>) => void)` | — | Колбек смены значения. Второй аргумент — событие, если изменение пришло из ручного ввода. |
|
|
643
|
+
| `onCopyButtonClick` | `(() => void)` | — | Колбек после успешного копирования значения. |
|
|
644
|
+
| `onFocus` | `((event: FocusEvent<HTMLInputElement, Element>) => void)` | — | Колбек фокуса |
|
|
645
|
+
| `plusButtonTooltip` | `TooltipProps` | — | Тултип над кнопкой `+` |
|
|
646
|
+
| `postfix` | `ReactNode` | — | Постфикс — текст или иконка справа от значения (например, единица измерения) |
|
|
647
|
+
| `prefix` | `ReactNode` | — | Префикс — текст или иконка слева от значения |
|
|
648
|
+
| `readonly` | `boolean` | — | Только для чтения |
|
|
649
|
+
| `required` | `boolean` | — | Показать знак обязательности `*` |
|
|
650
|
+
| `showCopyButton` | `boolean` | `true` | Показывать кнопку копирования значения (видна в readonly, при `!disabled`). |
|
|
651
|
+
| `showHintIcon` | `boolean` | — | Отображение статус-иконки у подсказки (по умолчанию `true`) |
|
|
652
|
+
| `size` | `"l"` \| `"m"` \| `"s"` | `m` | Размер |
|
|
653
|
+
| `step` | `number` | `1` | Шаг приращения |
|
|
654
|
+
| `validationState` | `"default"` \| `"error"` \| `"success"` \| `"warning"` | `default` | Состояние валидации |
|
|
655
|
+
| `value` | `number` | — | Значение (controlled-режим) |
|
|
656
|
+
|
|
657
|
+
#### Related types
|
|
658
|
+
|
|
659
|
+
**FieldLayoutPresets**
|
|
660
|
+
|
|
661
|
+
| Prop | Type | Default | Description |
|
|
662
|
+
|------|------|---------|-------------|
|
|
663
|
+
| `desktop` | `any` | — | |
|
|
664
|
+
| `desktopSmall` | `any` | — | |
|
|
665
|
+
| `mobile` | `any` | — | |
|
|
666
|
+
| `tablet` | `any` | — | |
|
|
667
|
+
|
|
668
|
+
## FieldText
|
|
669
|
+
|
|
670
|
+
```tsx
|
|
671
|
+
import { FieldText } from '@cloud-ru/ds-fields';
|
|
672
|
+
import { useState } from 'react';
|
|
673
|
+
|
|
674
|
+
export function Basic() {
|
|
675
|
+
const [value, setValue] = useState('');
|
|
676
|
+
return <FieldText label='Имя' hint='Как к вам обращаться' placeholder='Иван' value={value} onChange={setValue} />;
|
|
677
|
+
}
|
|
678
|
+
```
|
|
679
|
+
|
|
680
|
+
### Props `FieldTextProps`
|
|
681
|
+
|
|
682
|
+
| Prop | Type | Default | Description |
|
|
683
|
+
|------|------|---------|-------------|
|
|
684
|
+
| `allowMoreThanMaxLength` | `boolean` | `false` | Разрешить ввод свыше `maxLength` символов (счётчик продолжит расти). |
|
|
685
|
+
| `autoComplete` | `string \| boolean` | `false` | Включен ли автокомплит для поля |
|
|
686
|
+
| `autoFocus` | `boolean` | `false` | Включен ли авто-фокус для поля |
|
|
687
|
+
| `background` | `boolean` | `true` | Фон поля (acrylic) |
|
|
688
|
+
| `caption` | `string` | — | Вторичная подпись справа |
|
|
689
|
+
| `className` | `string` | — | CSS-класс <br/> CSS-класс корня `FieldDecorator` |
|
|
690
|
+
| `data-test-id` | `string` | — | |
|
|
691
|
+
| `defaultValue` | `string` | — | Начальное значение (uncontrolled-режим) |
|
|
692
|
+
| `disabled` | `boolean` | `false` | Поле выключено <br/> Является ли поле деактивированным |
|
|
693
|
+
| `error` | `string` | — | Ошибка (приоритетнее `hint`; форсит `validationState=error`) |
|
|
694
|
+
| `fieldClassName` | `string` | — | CSS-класс оболочки поля ввода |
|
|
695
|
+
| `hint` | `string` | — | Подсказка |
|
|
696
|
+
| `id` | `string` | — | Значение html-атрибута id |
|
|
697
|
+
| `innerRef` | `Ref<HTMLDivElement>` | — | Ref на корневой DOM-элемент |
|
|
698
|
+
| `inputMode` | `"decimal"` \| `"email"` \| `"none"` \| `"numeric"` \| `"search"` \| `"tel"` \| `"text"` \| `"url"` | — | Режим работы экранной клавиатуры |
|
|
699
|
+
| `label` | `string` | — | Заголовок |
|
|
700
|
+
| `labelFor` | `string` | — | HTML-атрибут `for` для `<label>` |
|
|
701
|
+
| `labelTooltip` | `QuestionTooltipProps` | — | Подсказка (question-tooltip) у заголовка |
|
|
702
|
+
| `layoutPresets` | `FieldLayoutPresets` | — | Переопределение адаптивных дефолтов по раскладке. Участвует `autoFocus`: на mobile он выключен <br/> (открывает клавиатуру без действия). Вернуть на mobile — `layoutPresets={{ mobile: { autoFocus: true } }}`. |
|
|
703
|
+
| `length` | `FieldLength` | — | Счётчик длины `current/max` |
|
|
704
|
+
| `max` | `number` | — | Максимальное значение поля |
|
|
705
|
+
| `maxLength` | `number` | — | Максимальная длина вводимого значения |
|
|
706
|
+
| `min` | `number` | — | Минимальное значение поля |
|
|
707
|
+
| `name` | `string` | — | Значение html-атрибута name |
|
|
708
|
+
| `onBlur` | `FocusEventHandler<HTMLInputElement>` | — | Колбек обработки потери фокуса |
|
|
709
|
+
| `onChange` | `((value: string) => void)` | — | Колбек смены значения |
|
|
710
|
+
| `onClearButtonClick` | `(() => void)` | — | Колбек клика по кнопке очистки |
|
|
711
|
+
| `onClick` | `MouseEventHandler<HTMLInputElement>` | — | Колбек обработки клика |
|
|
712
|
+
| `onCopyButtonClick` | `(() => void)` | — | Колбек после копирования значения в буфер |
|
|
713
|
+
| `onFocus` | `FocusEventHandler<HTMLInputElement>` | — | Колбек обработки получения фокуса |
|
|
714
|
+
| `onKeyDown` | `KeyboardEventHandler<HTMLInputElement>` | — | Колбек обработки начала нажатия клавиши клавиатуры |
|
|
715
|
+
| `onMouseDown` | `MouseEventHandler<HTMLInputElement>` | — | Колбек обработки нажатия кнопки мыши |
|
|
716
|
+
| `onPaste` | `ClipboardEventHandler<HTMLInputElement>` | — | Колбек обработки вставки значения |
|
|
717
|
+
| `outline` | `boolean` | `true` | Разделитель между основным полем и слотами `elementBefore` / `elementAfter` |
|
|
718
|
+
| `pattern` | `string` | — | Регулярное выражение валидного инпута |
|
|
719
|
+
| `placeholder` | `string` | — | Значение плейсхолдера |
|
|
720
|
+
| `readonly` | `boolean` | `false` | Только для чтения <br/> Является ли поле доступным только для чтения |
|
|
721
|
+
| `required` | `boolean` | — | Показать знак обязательности `*` |
|
|
722
|
+
| `showClearButton` | `boolean` | `true` | Показывать кнопку очистки значения (как в Search) |
|
|
723
|
+
| `showCopyButton` | `boolean` | `true` | Показывать кнопку копирования значения (только при `readonly = true` и непустом `value`) |
|
|
724
|
+
| `showHintIcon` | `boolean` | — | Отображение статус-иконки у подсказки (по умолчанию `true`) |
|
|
725
|
+
| `size` | `"l"` \| `"m"` \| `"s"` | — | Размер |
|
|
726
|
+
| `spellCheck` | `boolean` | `true` | Значение атрибута spellcheck (проверка орфографии) |
|
|
727
|
+
| `step` | `string \| number` | — | Максимальное значение поля |
|
|
728
|
+
| `tabIndex` | `number` | `0` | Значение атрибута tab-index |
|
|
729
|
+
| `type` | `"email"` \| `"number"` \| `"password"` \| `"tel"` \| `"text"` \| `"url"` | — | Тип инпута |
|
|
730
|
+
| `validationState` | `"default"` \| `"error"` \| `"success"` \| `"warning"` | — | Состояние валидации |
|
|
731
|
+
| `value` | `string` | — | Значение поля (controlled-режим) |
|
|
732
|
+
|
|
733
|
+
#### Related types
|
|
734
|
+
|
|
735
|
+
**FieldLayoutPresets**
|
|
736
|
+
|
|
737
|
+
| Prop | Type | Default | Description |
|
|
738
|
+
|------|------|---------|-------------|
|
|
739
|
+
| `desktop` | `any` | — | |
|
|
740
|
+
| `desktopSmall` | `any` | — | |
|
|
741
|
+
| `mobile` | `any` | — | |
|
|
742
|
+
| `tablet` | `any` | — | |
|
|
743
|
+
|
|
744
|
+
## FieldTextArea
|
|
745
|
+
|
|
746
|
+
```tsx
|
|
747
|
+
import { FieldTextArea } from '@cloud-ru/ds-fields';
|
|
748
|
+
import { useState } from 'react';
|
|
749
|
+
|
|
750
|
+
export function TextArea() {
|
|
751
|
+
const [value, setValue] = useState('');
|
|
752
|
+
return (
|
|
753
|
+
<FieldTextArea
|
|
754
|
+
label='Комментарий'
|
|
755
|
+
placeholder='Расскажите подробнее'
|
|
756
|
+
hint='До 500 символов'
|
|
757
|
+
minRows={3}
|
|
758
|
+
maxRows={8}
|
|
759
|
+
value={value}
|
|
760
|
+
onChange={setValue}
|
|
761
|
+
/>
|
|
762
|
+
);
|
|
763
|
+
}
|
|
764
|
+
```
|
|
765
|
+
|
|
766
|
+
### Props `FieldTextAreaProps`
|
|
767
|
+
|
|
768
|
+
| Prop | Type | Default | Description |
|
|
769
|
+
|------|------|---------|-------------|
|
|
770
|
+
| `allowMoreThanMaxLength` | `boolean` | `true` | Разрешить ввод свыше `maxLength` символов (счётчик продолжит расти). |
|
|
771
|
+
| `autoFocus` | `boolean` | — | Автофокус. На mobile выключается адаптивно (см. `layoutPresets`) |
|
|
772
|
+
| `background` | `boolean` | `true` | Фон поля (acrylic) |
|
|
773
|
+
| `caption` | `string` | — | Вторичная подпись справа |
|
|
774
|
+
| `className` | `string` | — | CSS-класс <br/> CSS-класс корня `FieldDecorator` |
|
|
775
|
+
| `data-test-id` | `string` | — | |
|
|
776
|
+
| `defaultValue` | `string` | `` | Начальное значение (uncontrolled-режим) |
|
|
777
|
+
| `disabled` | `boolean` | — | Поле выключено |
|
|
778
|
+
| `error` | `string` | — | Ошибка (приоритетнее `hint`; форсит `validationState=error`) |
|
|
779
|
+
| `fieldClassName` | `string` | — | CSS-класс оболочки поля |
|
|
780
|
+
| `footer` | `ReactNode` | — | Нода под textarea — ряд элементов после контента (Figma `elementWrapperAfter` / <br/> `slotAfterContent`): действия, счётчик-плагин и т.п. |
|
|
781
|
+
| `header` | `ReactNode` | — | Нода над textarea — ряд элементов до контента (Figma `elementWrapperBefore` / <br/> `slotBeforeContent`): тулбар с кнопками, чипами и т.п. |
|
|
782
|
+
| `hint` | `string` | — | Подсказка |
|
|
783
|
+
| `id` | `string` | — | HTML id |
|
|
784
|
+
| `innerRef` | `Ref<HTMLDivElement>` | — | Ref на корневой DOM-элемент |
|
|
785
|
+
| `inputMode` | `"decimal"` \| `"email"` \| `"none"` \| `"numeric"` \| `"search"` \| `"tel"` \| `"text"` \| `"url"` | — | Режим виртуальной клавиатуры (`inputmode` нативного `<textarea>`) |
|
|
786
|
+
| `label` | `string` | `` | Заголовок |
|
|
787
|
+
| `labelFor` | `string` | — | HTML-атрибут `for` для `<label>` |
|
|
788
|
+
| `labelTooltip` | `QuestionTooltipProps` | — | Подсказка (question-tooltip) у заголовка |
|
|
789
|
+
| `layoutPresets` | `FieldLayoutPresets` | — | Переопределение адаптивных дефолтов по раскладке. Участвует `autoFocus`: на mobile он выключен <br/> (открывает клавиатуру без действия). Вернуть на mobile — `layoutPresets={{ mobile: { autoFocus: true } }}`. |
|
|
790
|
+
| `length` | `FieldLength` | — | Счётчик длины `current/max` |
|
|
791
|
+
| `maxLength` | `number` | — | Максимальное количество символов |
|
|
792
|
+
| `maxRows` | `number` | `1000` | Максимальное количество строк (после — появляется скролл) |
|
|
793
|
+
| `minRows` | `number` | `3` | Минимальное количество строк |
|
|
794
|
+
| `name` | `string` | — | HTML name |
|
|
795
|
+
| `onBlur` | `((event: FocusEvent<HTMLTextAreaElement, Element>) => void)` | — | Колбек блюра |
|
|
796
|
+
| `onChange` | `((value: string, event?: ChangeEvent<HTMLTextAreaElement>) => void)` | — | Колбек смены значения |
|
|
797
|
+
| `onCopyButtonClick` | `(() => void)` | — | Колбек после копирования |
|
|
798
|
+
| `onFocus` | `((event: FocusEvent<HTMLTextAreaElement, Element>) => void)` | — | Колбек фокуса |
|
|
799
|
+
| `onKeyDown` | `((event: KeyboardEvent<HTMLTextAreaElement>) => void)` | — | Колбек нажатия клавиши |
|
|
800
|
+
| `placeholder` | `string` | — | Плейсхолдер |
|
|
801
|
+
| `readonly` | `boolean` | — | Только для чтения |
|
|
802
|
+
| `required` | `boolean` | — | Показать знак обязательности `*` |
|
|
803
|
+
| `resizable` | `boolean` | `false` | Можно ли менять высоту мышкой за нижний угол. Игнорируется при `disabled` или `readonly`. |
|
|
804
|
+
| `showClearButton` | `boolean` | `true` | Кнопка очистки (видна при value && !readonly) |
|
|
805
|
+
| `showCopyButton` | `boolean` | `true` | Кнопка копирования (видна при value && !disabled, независимо от readonly) |
|
|
806
|
+
| `showHintIcon` | `boolean` | — | Отображение статус-иконки у подсказки (по умолчанию `true`) |
|
|
807
|
+
| `size` | `"l"` \| `"m"` \| `"s"` | `m` | Размер |
|
|
808
|
+
| `spellCheck` | `boolean` | — | Проверка орфографии |
|
|
809
|
+
| `validationState` | `"default"` \| `"error"` \| `"success"` \| `"warning"` | `default` | Состояние валидации |
|
|
810
|
+
| `value` | `string` | — | Значение (controlled-режим) |
|
|
811
|
+
|
|
812
|
+
#### Related types
|
|
813
|
+
|
|
814
|
+
**FieldLayoutPresets**
|
|
815
|
+
|
|
816
|
+
| Prop | Type | Default | Description |
|
|
817
|
+
|------|------|---------|-------------|
|
|
818
|
+
| `desktop` | `any` | — | |
|
|
819
|
+
| `desktopSmall` | `any` | — | |
|
|
820
|
+
| `mobile` | `any` | — | |
|
|
821
|
+
| `tablet` | `any` | — | |
|
|
822
|
+
|
|
823
|
+
## FieldTime
|
|
824
|
+
|
|
825
|
+
```tsx
|
|
826
|
+
import { TimeValue } from '@cloud-ru/ds-calendar';
|
|
827
|
+
import { FieldTime } from '@cloud-ru/ds-fields';
|
|
828
|
+
import { useState } from 'react';
|
|
829
|
+
|
|
830
|
+
export function TimeBasic() {
|
|
831
|
+
const [value, setValue] = useState<TimeValue | undefined>({ hours: 9, minutes: 30, seconds: 0 });
|
|
832
|
+
return (
|
|
833
|
+
<FieldTime label='Время' hint='Введите HH:MM:SS или выберите из дропдауна' value={value} onChange={setValue} />
|
|
834
|
+
);
|
|
835
|
+
}
|
|
836
|
+
```
|
|
837
|
+
|
|
838
|
+
### Props `FieldTimeProps`
|
|
839
|
+
|
|
840
|
+
| Prop | Type | Default | Description |
|
|
841
|
+
|------|------|---------|-------------|
|
|
842
|
+
| `autoFocus` | `boolean` | — | Автофокус. На mobile выключается адаптивно (см. `layoutPresets`) |
|
|
843
|
+
| `background` | `boolean` | `true` | Фон поля (acrylic). |
|
|
844
|
+
| `caption` | `string` | — | Вторичная подпись справа |
|
|
845
|
+
| `className` | `string` | — | CSS-класс <br/> CSS-класс корня `FieldDecorator` |
|
|
846
|
+
| `closeOnApply` | `boolean` | `true` | Закрыть picker после Apply. |
|
|
847
|
+
| `data-test-id` | `string` | `field-time` | |
|
|
848
|
+
| `defaultValue` | `TimeValue` | — | Дефолтное значение для uncontrolled-режима |
|
|
849
|
+
| `disabled` | `boolean` | — | Поле выключено <br/> Отключено |
|
|
850
|
+
| `error` | `string` | — | Ошибка (приоритетнее `hint`; форсит `validationState=error`) |
|
|
851
|
+
| `fieldClassName` | `string` | — | CSS-класс оболочки поля |
|
|
852
|
+
| `hint` | `string` | — | Подсказка |
|
|
853
|
+
| `id` | `string` | — | HTML id |
|
|
854
|
+
| `innerRef` | `Ref<HTMLDivElement>` | — | Ref на корневой DOM-элемент |
|
|
855
|
+
| `label` | `string` | `` | Заголовок |
|
|
856
|
+
| `labelFor` | `string` | — | HTML-атрибут `for` для `<label>` |
|
|
857
|
+
| `labelTooltip` | `QuestionTooltipProps` | — | Подсказка (question-tooltip) у заголовка |
|
|
858
|
+
| `layoutPresets` | `FieldLayoutPresets` | — | Переопределение адаптивных дефолтов по раскладке. Участвует `autoFocus`: на mobile он выключен <br/> (открывает клавиатуру без действия). Вернуть на mobile — `layoutPresets={{ mobile: { autoFocus: true } }}`. |
|
|
859
|
+
| `length` | `FieldLength` | — | Счётчик длины `current/max` |
|
|
860
|
+
| `name` | `string` | — | HTML name |
|
|
861
|
+
| `onBlur` | `((event: FocusEvent<HTMLInputElement, Element>) => void)` | — | Колбек блюра input |
|
|
862
|
+
| `onChange` | `((value: TimeValue) => void)` | — | Колбек смены значения |
|
|
863
|
+
| `onClearButtonClick` | `(() => void)` | — | Колбек после клика по кнопке очистки. |
|
|
864
|
+
| `onCopyButtonClick` | `(() => void)` | — | Колбек после копирования значения. |
|
|
865
|
+
| `onFocus` | `((event: FocusEvent<HTMLInputElement, Element>) => void)` | — | Колбек фокуса input |
|
|
866
|
+
| `onOpenChange` | `((open: boolean) => void)` | — | Колбек смены состояния открытия |
|
|
867
|
+
| `open` | `boolean` | — | Открыт ли picker (controlled) |
|
|
868
|
+
| `placeholder` | `string` | — | Плейсхолдер маски; по умолчанию `чч:мм:сс` или `чч:мм` в зависимости от `showSeconds`. |
|
|
869
|
+
| `readonly` | `boolean` | — | Только для чтения |
|
|
870
|
+
| `required` | `boolean` | — | Показать знак обязательности `*` |
|
|
871
|
+
| `showClearButton` | `boolean` | `true` | Показывать кнопку очистки (видна при value && !readonly && !disabled). |
|
|
872
|
+
| `showCopyButton` | `boolean` | `true` | Показывать кнопку копирования (видна при readonly && value && !disabled). |
|
|
873
|
+
| `showHintIcon` | `boolean` | — | Отображение статус-иконки у подсказки (по умолчанию `true`) |
|
|
874
|
+
| `showSeconds` | `boolean` | `true` | Показывать секунды в picker и в маске input. |
|
|
875
|
+
| `size` | `"l"` \| `"m"` \| `"s"` | `m` | Размер |
|
|
876
|
+
| `validationState` | `"default"` \| `"error"` \| `"success"` \| `"warning"` | `default` | Состояние валидации |
|
|
877
|
+
| `value` | `TimeValue` | — | Значение |
|
|
878
|
+
|
|
879
|
+
#### Related types
|
|
880
|
+
|
|
881
|
+
**FieldLayoutPresets**
|
|
882
|
+
|
|
883
|
+
| Prop | Type | Default | Description |
|
|
884
|
+
|------|------|---------|-------------|
|
|
885
|
+
| `desktop` | `any` | — | |
|
|
886
|
+
| `desktopSmall` | `any` | — | |
|
|
887
|
+
| `mobile` | `any` | — | |
|
|
888
|
+
| `tablet` | `any` | — | |
|