@ozen-ui/kit 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/FieldControl/package.json +5 -0
  2. package/FieldInput/package.json +5 -0
  3. package/Fieldset/package.json +5 -0
  4. package/__inner__/cjs/components/Backdrop/Backdrop.d.ts +2 -2
  5. package/__inner__/cjs/components/Breadcrumbs/types.d.ts +2 -2
  6. package/__inner__/cjs/components/DataList/DataList.d.ts +1 -1
  7. package/__inner__/cjs/components/DataList/DataListProvider.d.ts +5 -5
  8. package/__inner__/cjs/components/FieldControl/FieldControl.css +135 -0
  9. package/__inner__/cjs/components/FieldControl/FieldControl.d.ts +13 -0
  10. package/__inner__/cjs/components/FieldControl/FieldControl.js +82 -0
  11. package/__inner__/cjs/components/FieldControl/FieldControlContext.d.ts +15 -0
  12. package/__inner__/cjs/components/FieldControl/FieldControlContext.js +6 -0
  13. package/__inner__/cjs/components/FieldControl/index.d.ts +2 -0
  14. package/__inner__/cjs/components/FieldControl/index.js +5 -0
  15. package/__inner__/cjs/components/FieldHint/FieldHint.d.ts +6 -9
  16. package/__inner__/cjs/components/FieldHint/FieldHint.js +24 -4
  17. package/__inner__/cjs/components/FieldIcon/FieldIcon.css +1 -21
  18. package/__inner__/cjs/components/FieldIcon/FieldIcon.d.ts +8 -12
  19. package/__inner__/cjs/components/FieldIcon/FieldIcon.js +15 -4
  20. package/__inner__/cjs/components/FieldInput/FieldInput.d.ts +11 -0
  21. package/__inner__/cjs/components/FieldInput/FieldInput.js +54 -0
  22. package/__inner__/cjs/components/FieldInput/index.d.ts +1 -0
  23. package/__inner__/cjs/components/FieldInput/index.js +4 -0
  24. package/__inner__/cjs/components/FieldLabel/FieldLabel.d.ts +7 -5
  25. package/__inner__/cjs/components/FieldLabel/FieldLabel.js +39 -10
  26. package/__inner__/cjs/components/Fieldset/Fieldset.css +13 -0
  27. package/__inner__/cjs/components/Fieldset/Fieldset.d.ts +10 -0
  28. package/__inner__/cjs/components/Fieldset/Fieldset.js +15 -0
  29. package/__inner__/cjs/components/Fieldset/index.d.ts +1 -0
  30. package/__inner__/cjs/components/Fieldset/index.js +4 -0
  31. package/__inner__/cjs/components/FilePicker/FilePicker.css +48 -59
  32. package/__inner__/cjs/components/FilePicker/FilePicker.js +2 -1
  33. package/__inner__/cjs/components/Input/Input.css +9 -121
  34. package/__inner__/cjs/components/Input/Input.d.ts +1 -62
  35. package/__inner__/cjs/components/Input/Input.js +32 -53
  36. package/__inner__/cjs/components/Input/constants.d.ts +1 -0
  37. package/__inner__/cjs/components/Input/constants.js +4 -0
  38. package/__inner__/cjs/components/Input/index.d.ts +1 -0
  39. package/__inner__/cjs/components/Input/index.js +1 -0
  40. package/__inner__/cjs/components/Input/types.d.ts +71 -0
  41. package/__inner__/cjs/components/Input/types.js +13 -0
  42. package/__inner__/cjs/components/InputNumber/InputNumber.css +60 -74
  43. package/__inner__/cjs/components/InputNumber/InputNumber.js +2 -1
  44. package/__inner__/cjs/components/InputNumber/utils.d.ts +2 -2
  45. package/__inner__/cjs/components/Link/Link.d.ts +1 -1
  46. package/__inner__/cjs/components/List/components/ListItem/ListItem.d.ts +1 -2
  47. package/__inner__/cjs/components/List/components/ListItemButton/ListItemButton.d.ts +1 -2
  48. package/__inner__/cjs/components/List/types.d.ts +3 -3
  49. package/__inner__/cjs/components/Menu/components/MenuItem/MenuItem.d.ts +1 -1
  50. package/__inner__/cjs/components/Menu/components/MenuList/MenuList.d.ts +1 -1
  51. package/__inner__/cjs/components/Modal/Modal.d.ts +1 -1
  52. package/__inner__/cjs/components/Modal/Modal.js +1 -1
  53. package/__inner__/cjs/components/Modal/components/ModalConsumer.d.ts +2 -2
  54. package/__inner__/cjs/components/Pagination/helpers/createPaginationRange/createPaginationRange.d.ts +1 -1
  55. package/__inner__/cjs/components/Pagination/types.d.ts +5 -5
  56. package/__inner__/cjs/components/Popover/types.d.ts +4 -5
  57. package/__inner__/cjs/components/ProgressBar/ProgressBar.d.ts +2 -2
  58. package/__inner__/cjs/components/Select/Select.css +5 -16
  59. package/__inner__/cjs/components/Select/components/SelectInput/SelectInput.js +2 -1
  60. package/__inner__/cjs/components/Select/types.d.ts +3 -4
  61. package/__inner__/cjs/components/Slider/types.d.ts +1 -1
  62. package/__inner__/cjs/components/Snackbar/types.d.ts +1 -1
  63. package/__inner__/cjs/components/Tag/components/RemoveButton/RemoveButton.d.ts +1 -1
  64. package/__inner__/cjs/components/Textarea/Textarea.css +3 -107
  65. package/__inner__/cjs/components/Textarea/Textarea.d.ts +1 -59
  66. package/__inner__/cjs/components/Textarea/Textarea.js +8 -62
  67. package/__inner__/cjs/components/Textarea/components/TextareaConsumer.d.ts +3 -0
  68. package/__inner__/cjs/components/Textarea/components/TextareaConsumer.js +36 -0
  69. package/__inner__/cjs/components/Textarea/components/TextareaCounter.d.ts +7 -0
  70. package/__inner__/cjs/components/Textarea/components/TextareaCounter.js +25 -0
  71. package/__inner__/cjs/components/Textarea/components/index.d.ts +2 -0
  72. package/__inner__/cjs/components/Textarea/components/index.js +5 -0
  73. package/__inner__/cjs/components/Textarea/constants.d.ts +1 -0
  74. package/__inner__/cjs/components/Textarea/constants.js +4 -0
  75. package/__inner__/cjs/components/Textarea/index.d.ts +1 -0
  76. package/__inner__/cjs/components/Textarea/index.js +1 -0
  77. package/__inner__/cjs/components/Textarea/types.d.ts +69 -0
  78. package/__inner__/cjs/components/Textarea/types.js +4 -0
  79. package/__inner__/cjs/components/ThemeProvider/ThemeProvider.d.ts +2 -1
  80. package/__inner__/cjs/components/ThemeProvider/types.d.ts +2 -0
  81. package/__inner__/cjs/components/Tooltip/types.d.ts +1 -1
  82. package/__inner__/cjs/hooks/useMultiRef/useMultiRef.d.ts +2 -3
  83. package/__inner__/cjs/types/ResponsiveValue.d.ts +1 -1
  84. package/__inner__/cjs/utils/isKey.d.ts +2 -2
  85. package/__inner__/cjs/utils/polymorphicComponentWithRef.d.ts +0 -1
  86. package/__inner__/esm/components/Backdrop/Backdrop.d.ts +2 -2
  87. package/__inner__/esm/components/Backdrop/Backdrop.js +1 -1
  88. package/__inner__/esm/components/Breadcrumbs/types.d.ts +2 -2
  89. package/__inner__/esm/components/DataList/DataList.d.ts +1 -1
  90. package/__inner__/esm/components/DataList/DataListProvider.d.ts +5 -5
  91. package/__inner__/esm/components/FieldControl/FieldControl.css +135 -0
  92. package/__inner__/esm/components/FieldControl/FieldControl.d.ts +13 -0
  93. package/__inner__/esm/components/FieldControl/FieldControl.js +79 -0
  94. package/__inner__/esm/components/FieldControl/FieldControlContext.d.ts +15 -0
  95. package/__inner__/esm/components/FieldControl/FieldControlContext.js +2 -0
  96. package/__inner__/esm/components/FieldControl/index.d.ts +2 -0
  97. package/__inner__/esm/components/FieldControl/index.js +2 -0
  98. package/__inner__/esm/components/FieldHint/FieldHint.d.ts +6 -9
  99. package/__inner__/esm/components/FieldHint/FieldHint.js +25 -5
  100. package/__inner__/esm/components/FieldIcon/FieldIcon.css +1 -21
  101. package/__inner__/esm/components/FieldIcon/FieldIcon.d.ts +8 -12
  102. package/__inner__/esm/components/FieldIcon/FieldIcon.js +16 -5
  103. package/__inner__/esm/components/FieldInput/FieldInput.d.ts +11 -0
  104. package/__inner__/esm/components/FieldInput/FieldInput.js +51 -0
  105. package/__inner__/esm/components/FieldInput/index.d.ts +1 -0
  106. package/__inner__/esm/components/FieldInput/index.js +1 -0
  107. package/__inner__/esm/components/FieldLabel/FieldLabel.d.ts +7 -5
  108. package/__inner__/esm/components/FieldLabel/FieldLabel.js +38 -8
  109. package/__inner__/esm/components/Fieldset/Fieldset.css +13 -0
  110. package/__inner__/esm/components/Fieldset/Fieldset.d.ts +10 -0
  111. package/__inner__/esm/components/Fieldset/Fieldset.js +12 -0
  112. package/__inner__/esm/components/Fieldset/index.d.ts +1 -0
  113. package/__inner__/esm/components/Fieldset/index.js +1 -0
  114. package/__inner__/esm/components/FilePicker/FilePicker.css +48 -59
  115. package/__inner__/esm/components/FilePicker/FilePicker.js +2 -1
  116. package/__inner__/esm/components/Input/Input.css +9 -121
  117. package/__inner__/esm/components/Input/Input.d.ts +1 -62
  118. package/__inner__/esm/components/Input/Input.js +33 -54
  119. package/__inner__/esm/components/Input/constants.d.ts +1 -0
  120. package/__inner__/esm/components/Input/constants.js +1 -0
  121. package/__inner__/esm/components/Input/index.d.ts +1 -0
  122. package/__inner__/esm/components/Input/index.js +1 -0
  123. package/__inner__/esm/components/Input/types.d.ts +71 -0
  124. package/__inner__/esm/components/Input/types.js +10 -0
  125. package/__inner__/esm/components/InputNumber/InputNumber.css +60 -74
  126. package/__inner__/esm/components/InputNumber/InputNumber.js +2 -1
  127. package/__inner__/esm/components/InputNumber/utils.d.ts +2 -2
  128. package/__inner__/esm/components/Link/Link.d.ts +1 -1
  129. package/__inner__/esm/components/List/components/ListItem/ListItem.d.ts +1 -2
  130. package/__inner__/esm/components/List/components/ListItemButton/ListItemButton.d.ts +1 -2
  131. package/__inner__/esm/components/List/types.d.ts +3 -3
  132. package/__inner__/esm/components/Menu/components/MenuItem/MenuItem.d.ts +1 -1
  133. package/__inner__/esm/components/Menu/components/MenuList/MenuList.d.ts +1 -1
  134. package/__inner__/esm/components/Modal/Modal.d.ts +1 -1
  135. package/__inner__/esm/components/Modal/Modal.js +1 -1
  136. package/__inner__/esm/components/Modal/components/ModalConsumer.d.ts +2 -2
  137. package/__inner__/esm/components/Pagination/helpers/createPaginationRange/createPaginationRange.d.ts +1 -1
  138. package/__inner__/esm/components/Pagination/types.d.ts +5 -5
  139. package/__inner__/esm/components/Popover/types.d.ts +4 -5
  140. package/__inner__/esm/components/ProgressBar/ProgressBar.d.ts +2 -2
  141. package/__inner__/esm/components/ProgressBar/ProgressBar.js +1 -1
  142. package/__inner__/esm/components/Select/Select.css +5 -16
  143. package/__inner__/esm/components/Select/components/SelectInput/SelectInput.js +2 -1
  144. package/__inner__/esm/components/Select/types.d.ts +3 -4
  145. package/__inner__/esm/components/Slider/types.d.ts +1 -1
  146. package/__inner__/esm/components/Snackbar/types.d.ts +1 -1
  147. package/__inner__/esm/components/Tag/components/RemoveButton/RemoveButton.d.ts +1 -1
  148. package/__inner__/esm/components/Textarea/Textarea.css +3 -107
  149. package/__inner__/esm/components/Textarea/Textarea.d.ts +1 -59
  150. package/__inner__/esm/components/Textarea/Textarea.js +9 -63
  151. package/__inner__/esm/components/Textarea/components/TextareaConsumer.d.ts +3 -0
  152. package/__inner__/esm/components/Textarea/components/TextareaConsumer.js +32 -0
  153. package/__inner__/esm/components/Textarea/components/TextareaCounter.d.ts +7 -0
  154. package/__inner__/esm/components/Textarea/components/TextareaCounter.js +21 -0
  155. package/__inner__/esm/components/Textarea/components/index.d.ts +2 -0
  156. package/__inner__/esm/components/Textarea/components/index.js +2 -0
  157. package/__inner__/esm/components/Textarea/constants.d.ts +1 -0
  158. package/__inner__/esm/components/Textarea/constants.js +1 -0
  159. package/__inner__/esm/components/Textarea/index.d.ts +1 -0
  160. package/__inner__/esm/components/Textarea/index.js +1 -0
  161. package/__inner__/esm/components/Textarea/types.d.ts +69 -0
  162. package/__inner__/esm/components/Textarea/types.js +1 -0
  163. package/__inner__/esm/components/ThemeProvider/ThemeProvider.d.ts +2 -1
  164. package/__inner__/esm/components/ThemeProvider/types.d.ts +2 -0
  165. package/__inner__/esm/components/Tooltip/Tooltip.js +1 -1
  166. package/__inner__/esm/components/Tooltip/types.d.ts +1 -1
  167. package/__inner__/esm/hooks/useMultiRef/useMultiRef.d.ts +2 -3
  168. package/__inner__/esm/types/ResponsiveValue.d.ts +1 -1
  169. package/__inner__/esm/utils/isKey.d.ts +2 -2
  170. package/__inner__/esm/utils/polymorphicComponentWithRef.d.ts +0 -1
  171. package/package.json +1 -1
@@ -0,0 +1,135 @@
1
+ /* stylelint-disable */
2
+ .FieldControl {
3
+ --textfield-color: var(--color-content-primary);
4
+ --textfield-background-color: var(--color-background-primary);
5
+ --textfield-border-width: var(--border-width-s);
6
+ --textfield-border-color: var(--color-border-main);
7
+ cursor: text;
8
+ display: inline-flex;
9
+ vertical-align: top;
10
+ flex-direction: column;
11
+ }
12
+ .FieldControl > * {
13
+ cursor: text;
14
+ }
15
+ .FieldControl_size_2xs {
16
+ --textfield-gutter-x: 12px;
17
+ --textfield-input-height: 32px;
18
+ --textfield-input-padding: 8px 0;
19
+ --textfield-input-gap: var(--space-s);
20
+
21
+ font: var(--typography-text-2xs-font);
22
+
23
+ letter-spacing: var(--typography-text-2xs-letter_spacing, 0);
24
+
25
+ text-transform: var(--typography-text-2xs-text_transform, none);
26
+ }
27
+ .FieldControl_size_2xs .FieldInput::-webkit-calendar-picker-indicator {
28
+ inset-inline-end: -25px;
29
+ }
30
+ .FieldControl_size_xs {
31
+ --textfield-gutter-x: 12px;
32
+ --textfield-input-height: 40px;
33
+ --textfield-input-padding: 12px 0;
34
+ --textfield-input-gap: var(--space-s);
35
+
36
+ font: var(--typography-text-xs-font);
37
+
38
+ letter-spacing: var(--typography-text-xs-letter_spacing, 0);
39
+
40
+ text-transform: var(--typography-text-xs-text_transform, none);
41
+ }
42
+ .FieldControl_size_xs .FieldInput::-webkit-calendar-picker-indicator {
43
+ inset-inline-end: -25px;
44
+ }
45
+ .FieldControl_size_s {
46
+ --textfield-gutter-x: 16px;
47
+ --textfield-input-height: 48px;
48
+ --textfield-input-padding: 14px 0;
49
+ --textfield-input-gap: var(--space-m);
50
+
51
+ font: var(--typography-text-s-font);
52
+
53
+ letter-spacing: var(--typography-text-s-letter_spacing, 0);
54
+
55
+ text-transform: var(--typography-text-s-text_transform, none);
56
+ }
57
+ .FieldControl_size_s .FieldInput::-webkit-calendar-picker-indicator {
58
+ inset-inline-end: -30px;
59
+ }
60
+ .FieldControl_size_m {
61
+ --textfield-gutter-x: 20px;
62
+ --textfield-input-height: 56px;
63
+ --textfield-input-padding: 16px 0;
64
+ --textfield-input-gap: var(--space-m);
65
+
66
+ font: var(--typography-text-m-font);
67
+
68
+ letter-spacing: var(--typography-text-m-letter_spacing, 0);
69
+
70
+ text-transform: var(--typography-text-m-text_transform, none);
71
+ }
72
+ .FieldControl_size_m .FieldInput::-webkit-calendar-picker-indicator {
73
+ inset-inline-end: -34px;
74
+ }
75
+ .FieldControl_size_l {
76
+ --textfield-gutter-x: 24px;
77
+ --textfield-input-height: 64px;
78
+ --textfield-input-padding: 18px 0;
79
+ --textfield-input-gap: var(--space-l);
80
+
81
+ font: var(--typography-text-l-font);
82
+
83
+ letter-spacing: var(--typography-text-l-letter_spacing, 0);
84
+
85
+ text-transform: var(--typography-text-l-text_transform, none);
86
+ }
87
+ .FieldControl_size_l .FieldInput::-webkit-calendar-picker-indicator {
88
+ inset-inline-end: -39px;
89
+ }
90
+ .FieldControl_hasLabel.FieldControl_size_2xs {
91
+ --textfield-input-padding: 8px 0 8px;
92
+ }
93
+ .FieldControl_hasLabel.FieldControl_size_xs {
94
+ --textfield-input-padding: 19px 0 4px;
95
+ }
96
+ .FieldControl_hasLabel.FieldControl_size_s {
97
+ --textfield-input-padding: 21px 0 6px;
98
+ }
99
+ .FieldControl_hasLabel.FieldControl_size_m {
100
+ --textfield-input-padding: 24px 0 6px;
101
+ }
102
+ .FieldControl_hasLabel.FieldControl_size_l {
103
+ --textfield-input-padding: 26px 0 6px;
104
+ }
105
+ .FieldControl_hasLabel .FieldInput::placeholder {
106
+ opacity: 0;
107
+ }
108
+ .FieldControl_hasLabel .FieldInput:focus::placeholder {
109
+ opacity: 1;
110
+ }
111
+ .FieldControl_fullWidth {
112
+ inline-size: 100%;
113
+ }
114
+ .FieldControl:hover {
115
+ --textfield-border-color: var(--color-border-main-hover);
116
+ }
117
+ .FieldControl_focused,
118
+ .FieldControl_focused:hover {
119
+ --textfield-border-width: var(--border-width-m);
120
+ --textfield-background-color: var(--color-background-main);
121
+ --textfield-border-color: var(--color-border-action);
122
+ }
123
+ .FieldControl_error,
124
+ .FieldControl_error.FieldControl:hover,
125
+ .FieldControl_error.FieldControl_focused,
126
+ .FieldControl_error.FieldControl_focused:hover {
127
+ --textfield-border-color: var(--color-border-error);
128
+ }
129
+ .FieldControl_disabled {
130
+ --textfield-border-color: var(--color-border-disabled);
131
+ --textfield-background-color: var(--color-background-disabled);
132
+ --textfield-color: var(--color-content-secondary);
133
+ pointer-events: none;
134
+ cursor: default;
135
+ }
@@ -0,0 +1,13 @@
1
+ import './FieldControl.css';
2
+ import type { ElementType, ComponentRef } from 'react';
3
+ import { type PolymorphicComponentPropsWithoutRef } from '../../utils/polymorphicComponentWithRef';
4
+ import type { FieldControlContextValue } from './index';
5
+ export declare const FIELD_CONTROL_DEFAULT_TAG = "div";
6
+ export type FieldControlRef = ComponentRef<typeof FIELD_CONTROL_DEFAULT_TAG>;
7
+ export type FieldControlBaseProps = Omit<FieldControlContextValue, 'label'> & {
8
+ /** data-атрибут для тестирования */
9
+ 'data-testid'?: string;
10
+ };
11
+ export type FieldControlProps<As extends ElementType = 'div'> = PolymorphicComponentPropsWithoutRef<FieldControlBaseProps, As>;
12
+ export declare const cnFieldControl: import("@bem-react/classname").ClassNameFormatter;
13
+ export declare const FieldControl: import("../../utils/polymorphicComponentWithRef").PolymorphicComponentWithRef<FieldControlBaseProps, "div">;
@@ -0,0 +1,79 @@
1
+ import { __assign, __read, __rest } from "tslib";
2
+ import './FieldControl.css';
3
+ import React, { useState } from 'react';
4
+ import { useThemeProps } from '../../hooks/useThemeProps';
5
+ import { cn } from '../../utils/classname';
6
+ import { polymorphicComponentWithRef, } from '../../utils/polymorphicComponentWithRef';
7
+ import { FieldControlContext } from './index';
8
+ export var FIELD_CONTROL_DEFAULT_TAG = 'div';
9
+ export var cnFieldControl = cn('FieldControl');
10
+ export var FieldControl = polymorphicComponentWithRef(function (inProps, ref) {
11
+ var props = useThemeProps({
12
+ props: inProps,
13
+ name: 'FieldControl'
14
+ });
15
+ var _a = props.as, Tag = _a === void 0 ? FIELD_CONTROL_DEFAULT_TAG : _a, sizeProp = props.size, disabledProp = props.disabled, requiredProp = props.required, errorProp = props.error, fullWidthProp = props.fullWidth, filledProp = props.filled, focusedProp = props.focused, children = props.children, className = props.className, otherProp = __rest(props, ["as", "size", "disabled", "required", "error", "fullWidth", "filled", "focused", "children", "className"]);
16
+ var focused = focusedProp;
17
+ var filled = filledProp;
18
+ var size = sizeProp;
19
+ var required = requiredProp;
20
+ var disabled = disabledProp;
21
+ var error = errorProp;
22
+ var fullWidth = fullWidthProp;
23
+ var initialState = {
24
+ size: size,
25
+ filled: filled,
26
+ focused: focused,
27
+ disabled: disabled,
28
+ required: required,
29
+ error: error,
30
+ fullWidth: fullWidth
31
+ };
32
+ var _b = __read(useState(initialState), 2), state = _b[0], setState = _b[1];
33
+ var label = state.label, value = state.value;
34
+ if (size === undefined && state.size) {
35
+ size = state.size;
36
+ }
37
+ if (focused === undefined && state.focused) {
38
+ focused = state.focused;
39
+ }
40
+ if (filled === undefined && state.filled) {
41
+ filled = state.filled;
42
+ }
43
+ if (disabled === undefined && state.disabled) {
44
+ disabled = state.disabled;
45
+ }
46
+ if (required === undefined && state.required) {
47
+ required = state.required;
48
+ }
49
+ if (error === undefined && state.error) {
50
+ error = state.error;
51
+ }
52
+ if (fullWidth === undefined && state.fullWidth) {
53
+ fullWidth = state.fullWidth;
54
+ }
55
+ return (React.createElement(Tag, __assign({ className: cnFieldControl({
56
+ error: error,
57
+ fullWidth: fullWidth,
58
+ disabled: disabled,
59
+ required: required,
60
+ size: size,
61
+ filled: filled,
62
+ focused: focused,
63
+ hasLabel: !!label
64
+ }, [className]) }, otherProp, { ref: ref }),
65
+ React.createElement(FieldControlContext.Provider, { value: [
66
+ {
67
+ error: error,
68
+ fullWidth: fullWidth,
69
+ disabled: disabled,
70
+ required: required,
71
+ size: size,
72
+ filled: filled,
73
+ focused: focused,
74
+ value: value
75
+ },
76
+ setState,
77
+ ] }, children)));
78
+ });
79
+ FieldControl.displayName = 'FieldControl';
@@ -0,0 +1,15 @@
1
+ import type { Dispatch, SetStateAction } from 'react';
2
+ import React from 'react';
3
+ import type { FormElementSizeVariant } from '../../types/FormElementSizeVariant';
4
+ export type FieldControlContextValue = {
5
+ size?: FormElementSizeVariant;
6
+ error?: boolean;
7
+ disabled?: boolean;
8
+ required?: boolean;
9
+ fullWidth?: boolean;
10
+ filled?: boolean;
11
+ focused?: boolean;
12
+ label?: string;
13
+ value?: string | number;
14
+ };
15
+ export declare const FieldControlContext: React.Context<[FieldControlContextValue, Dispatch<SetStateAction<FieldControlContextValue>>]>;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export var FieldControlContext = React.createContext([{}, function () { return undefined; }]);
@@ -0,0 +1,2 @@
1
+ export * from './FieldControl';
2
+ export * from './FieldControlContext';
@@ -0,0 +1,2 @@
1
+ export * from './FieldControl';
2
+ export * from './FieldControlContext';
@@ -1,17 +1,14 @@
1
1
  import './FieldHint.css';
2
2
  import React from 'react';
3
- import type { HTMLAttributes, ReactNode } from 'react';
3
+ import type { ReactNode, ComponentPropsWithRef, ComponentRef } from 'react';
4
4
  import type { FormElementSizeVariant } from '../../types/FormElementSizeVariant';
5
- export type FieldHintProps = {
5
+ export declare const FIELD_HINT_DEFAULT_TAG = "div";
6
+ export type FieldHintRef = ComponentRef<typeof FIELD_HINT_DEFAULT_TAG>;
7
+ export type FieldHintProps = ComponentPropsWithRef<typeof FIELD_HINT_DEFAULT_TAG> & {
6
8
  children?: ReactNode;
7
9
  error?: boolean;
8
10
  disabled?: boolean;
9
11
  size?: FormElementSizeVariant;
10
- } & Omit<HTMLAttributes<HTMLDivElement>, 'color'>;
12
+ };
11
13
  export declare const cnFieldHint: import("@bem-react/classname").ClassNameFormatter;
12
- export declare const FieldHint: React.ForwardRefExoticComponent<{
13
- children?: ReactNode;
14
- error?: boolean | undefined;
15
- disabled?: boolean | undefined;
16
- size?: "s" | "m" | "l" | "2xs" | "xs" | undefined;
17
- } & Omit<React.HTMLAttributes<HTMLDivElement>, "color"> & React.RefAttributes<HTMLDivElement>>;
14
+ export declare const FieldHint: React.ForwardRefExoticComponent<Omit<FieldHintProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
@@ -1,13 +1,33 @@
1
- import { __assign, __rest } from "tslib";
1
+ import { __assign, __read, __rest } from "tslib";
2
2
  import './FieldHint.css';
3
- import React, { forwardRef } from 'react';
3
+ import React, { forwardRef, useContext, Children } from 'react';
4
4
  import { cn } from '../../utils/classname';
5
+ import { FieldControlContext } from '../FieldControl';
6
+ export var FIELD_HINT_DEFAULT_TAG = 'div';
5
7
  export var cnFieldHint = cn('FieldHint');
6
8
  export var FieldHint = forwardRef(function (_a, ref) {
7
- var children = _a.children, error = _a.error, disabled = _a.disabled, size = _a.size, className = _a.className, other = __rest(_a, ["children", "error", "disabled", "size", "className"]);
8
- if (!children) {
9
+ var children = _a.children, errorProp = _a.error, disabledProp = _a.disabled, sizeProp = _a.size, className = _a.className, other = __rest(_a, ["children", "error", "disabled", "size", "className"]);
10
+ var context = useContext(FieldControlContext);
11
+ var _b = __read(context, 1), fieldControl = _b[0];
12
+ var Tag = FIELD_HINT_DEFAULT_TAG;
13
+ var size = sizeProp;
14
+ var error = errorProp;
15
+ var disabled = disabledProp;
16
+ var childrenCount = Children.toArray(children).filter(function (element) { return element !== undefined; }).length;
17
+ if (!childrenCount) {
9
18
  return null;
10
19
  }
11
- return (React.createElement("div", __assign({ className: cnFieldHint({ error: error, disabled: disabled, size: size }, [className]) }, other, { ref: ref }), children));
20
+ if (fieldControl) {
21
+ if (size === undefined && fieldControl.size) {
22
+ size = fieldControl.size;
23
+ }
24
+ if (error === undefined && fieldControl.error) {
25
+ error = fieldControl.error;
26
+ }
27
+ if (disabled === undefined && fieldControl.disabled) {
28
+ disabled = fieldControl.disabled;
29
+ }
30
+ }
31
+ return (React.createElement(Tag, __assign({ className: cnFieldHint({ error: error, disabled: disabled, size: size }, [className]) }, other, { ref: ref }), children));
12
32
  });
13
33
  FieldHint.displayName = 'FieldHint';
@@ -2,25 +2,5 @@
2
2
  display: flex;
3
3
  align-items: center;
4
4
  color: var(--color-content-secondary);
5
- font: var(--field-icon-input-font);
5
+ font: inherit;
6
6
  }
7
-
8
- .FieldIcon_size_2xs {
9
- --field-icon-input-font: var(--typography-text-2xs-font);
10
- }
11
-
12
- .FieldIcon_size_xs {
13
- --field-icon-input-font: var(--typography-text-xs-font);
14
- }
15
-
16
- .FieldIcon_size_s {
17
- --field-icon-input-font: var(--typography-text-s-font);
18
- }
19
-
20
- .FieldIcon_size_m {
21
- --field-icon-input-font: var(--typography-text-m-font);
22
- }
23
-
24
- .FieldIcon_size_l {
25
- --field-icon-input-font: var(--typography-text-l-font);
26
- }
@@ -1,20 +1,16 @@
1
1
  import './FieldIcon.css';
2
+ import type { ComponentPropsWithRef, ComponentRef, FC } from 'react';
2
3
  import React from 'react';
3
- import type { HTMLAttributes } from 'react';
4
4
  import type { IconProps, IconSize } from '@ozen-ui/icons';
5
5
  import type { FormElementSizeVariant } from '../../types/FormElementSizeVariant';
6
- export type FieldIconProps = {
7
- icon?: string | React.FC<IconProps & {
6
+ export declare const FIELD_ICON_DEFAULT_TAG = "div";
7
+ export type FieldIconRef = ComponentRef<typeof FIELD_ICON_DEFAULT_TAG>;
8
+ export type FieldIconProps = ComponentPropsWithRef<typeof FIELD_ICON_DEFAULT_TAG> & {
9
+ icon?: string | FC<IconProps & {
8
10
  size?: IconSize;
9
11
  }> | undefined;
10
- size: FormElementSizeVariant;
12
+ size?: FormElementSizeVariant;
11
13
  children?: never;
12
- } & Omit<HTMLAttributes<HTMLDivElement>, 'children'>;
14
+ };
13
15
  export declare const cnFieldIcon: import("@bem-react/classname").ClassNameFormatter;
14
- export declare const FieldIcon: React.ForwardRefExoticComponent<{
15
- icon?: string | React.FC<IconProps & {
16
- size?: IconSize;
17
- }> | undefined;
18
- size: FormElementSizeVariant;
19
- children?: undefined;
20
- } & Omit<React.HTMLAttributes<HTMLDivElement>, "children"> & React.RefAttributes<HTMLDivElement>>;
16
+ export declare const FieldIcon: React.ForwardRefExoticComponent<Omit<FieldIconProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
@@ -1,24 +1,35 @@
1
- import { __assign, __rest } from "tslib";
1
+ import { __assign, __read, __rest } from "tslib";
2
2
  import './FieldIcon.css';
3
- import React, { forwardRef } from 'react';
3
+ import React, { forwardRef, useContext } from 'react';
4
4
  import { isValidElementType } from 'react-is';
5
5
  import { cn } from '../../utils/classname';
6
6
  import { getIconSizeToFormElement } from '../../utils/getIconSizeToFormElement';
7
+ import { FieldControlContext } from '../FieldControl';
8
+ export var FIELD_ICON_DEFAULT_TAG = 'div';
7
9
  export var cnFieldIcon = cn('FieldIcon');
8
10
  var resolveChildren = function (Content, size) {
9
11
  if (typeof Content === 'string') {
10
12
  return Content;
11
13
  }
12
14
  if (isValidElementType(Content)) {
13
- return React.createElement(Content, { size: getIconSizeToFormElement(size) });
15
+ return React.createElement(Content, { size: size && getIconSizeToFormElement(size) });
14
16
  }
15
17
  return null;
16
18
  };
17
19
  export var FieldIcon = forwardRef(function (_a, ref) {
18
- var icon = _a.icon, className = _a.className, size = _a.size, other = __rest(_a, ["icon", "className", "size"]);
20
+ var icon = _a.icon, className = _a.className, sizeProp = _a.size, other = __rest(_a, ["icon", "className", "size"]);
21
+ var context = useContext(FieldControlContext);
22
+ var _b = __read(context, 1), fieldControl = _b[0];
23
+ var Tag = FIELD_ICON_DEFAULT_TAG;
24
+ var size = sizeProp;
19
25
  if (!icon) {
20
26
  return null;
21
27
  }
22
- return (React.createElement("div", __assign({ className: cnFieldIcon({ size: size }, [className]) }, other, { ref: ref }), resolveChildren(icon, size)));
28
+ if (fieldControl) {
29
+ if (size === undefined && fieldControl.size) {
30
+ size = fieldControl.size;
31
+ }
32
+ }
33
+ return (React.createElement(Tag, __assign({ className: cnFieldIcon({ size: size }, [className]) }, other, { ref: ref }), resolveChildren(icon, size)));
23
34
  });
24
35
  FieldIcon.displayName = 'FieldIcon';
@@ -0,0 +1,11 @@
1
+ import type { ComponentRef, ElementType } from 'react';
2
+ import type { PolymorphicComponentPropsWithoutRef } from '../../utils/polymorphicComponentWithRef';
3
+ export declare const FIELD_INPUT_DEFAULT_TAG = "input";
4
+ export type FieldInputRef = ComponentRef<typeof FIELD_INPUT_DEFAULT_TAG>;
5
+ type FieldInputBaseProps = {
6
+ 'data-testid'?: string;
7
+ };
8
+ export type FieldInputProps<As extends ElementType = typeof FIELD_INPUT_DEFAULT_TAG> = PolymorphicComponentPropsWithoutRef<FieldInputBaseProps, As>;
9
+ export declare const cnFieldInput: import("@bem-react/classname").ClassNameFormatter;
10
+ export declare const FieldInput: import("../../utils/polymorphicComponentWithRef").PolymorphicComponentWithRef<FieldInputBaseProps, "div">;
11
+ export {};
@@ -0,0 +1,51 @@
1
+ import { __assign, __read, __rest } from "tslib";
2
+ import React, { useCallback, useContext, useState, useEffect } from 'react';
3
+ import { useControlled } from '../../hooks/useControlled';
4
+ import { cn } from '../../utils/classname';
5
+ import { polymorphicComponentWithRef } from '../../utils/polymorphicComponentWithRef';
6
+ import { FieldControlContext } from '../FieldControl';
7
+ export var FIELD_INPUT_DEFAULT_TAG = 'input';
8
+ export var cnFieldInput = cn('FieldInput');
9
+ export var FieldInput = polymorphicComponentWithRef(function (_a, ref) {
10
+ var _b = _a.as, Tag = _b === void 0 ? FIELD_INPUT_DEFAULT_TAG : _b, className = _a.className, requiredProp = _a.required, disabledProp = _a.disabled, valueProp = _a.value, onChange = _a.onChange, defaultValue = _a.defaultValue, children = _a.children, onFocus = _a.onFocus, onBlur = _a.onBlur, other = __rest(_a, ["as", "className", "required", "disabled", "value", "onChange", "defaultValue", "children", "onFocus", "onBlur"]);
11
+ var _c = __read(useState(), 2), focused = _c[0], setFocused = _c[1];
12
+ var context = useContext(FieldControlContext);
13
+ var _d = __read(context, 2), fieldControl = _d[0], setFieldControl = _d[1];
14
+ var _e = __read(useControlled({
15
+ value: valueProp,
16
+ name: 'FieldInput',
17
+ state: 'value',
18
+ defaultValue: defaultValue
19
+ }), 2), valueState = _e[0], setValueState = _e[1];
20
+ var filled = !!valueState || valueState === 0;
21
+ var required = requiredProp;
22
+ var disabled = disabledProp;
23
+ if (fieldControl) {
24
+ if (required === undefined && fieldControl.required) {
25
+ required = fieldControl.required;
26
+ }
27
+ if (disabled === undefined && fieldControl.disabled) {
28
+ disabled = fieldControl.disabled;
29
+ }
30
+ }
31
+ useEffect(function () {
32
+ setFieldControl(function (prevState) { return (__assign(__assign({}, prevState), { filled: filled, focused: focused, value: valueState })); });
33
+ }, [filled, focused, valueState]);
34
+ var handleChange = useCallback(function (e) {
35
+ if (disabled)
36
+ return;
37
+ var value = e.target.value;
38
+ setValueState(value);
39
+ onChange === null || onChange === void 0 ? void 0 : onChange(e);
40
+ }, [onChange, disabled]);
41
+ var handleFocus = useCallback(function (e) {
42
+ setFocused(true);
43
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);
44
+ }, [onFocus]);
45
+ var handleBlur = useCallback(function (e) {
46
+ setFocused(false);
47
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
48
+ }, [onBlur]);
49
+ return (React.createElement(Tag, __assign({ className: cnFieldInput({}, [className]), required: required, disabled: disabled, onFocus: handleFocus, onBlur: handleBlur, onChange: handleChange, defaultValue: defaultValue, value: valueProp }, other, { ref: ref }), children));
50
+ });
51
+ FieldInput.displayName = 'FieldInput';
@@ -0,0 +1 @@
1
+ export * from './FieldInput';
@@ -0,0 +1 @@
1
+ export * from './FieldInput';
@@ -1,8 +1,10 @@
1
- import type { HTMLAttributes, Ref } from 'react';
2
- import * as React from 'react';
3
1
  import './FieldLabel.css';
4
- export declare const fieldLabelSizeVariant: readonly ["2xs", "xs", "s", "m", "l"];
5
- export type FieldLabelSizeVariant = (typeof fieldLabelSizeVariant)[number];
2
+ import type { Ref, ComponentRef, ComponentPropsWithRef } from 'react';
3
+ import React from 'react';
4
+ import type { FormElementSizeVariant } from '../../types/FormElementSizeVariant';
5
+ export type FieldLabelSizeVariant = FormElementSizeVariant;
6
+ export declare const FIELD_LABEL_DEFAULT_TAG = "span";
7
+ export type FieldLabelRef = ComponentRef<typeof FIELD_LABEL_DEFAULT_TAG>;
6
8
  export type FieldLabelProps = {
7
9
  /** Если {true} переводит компонент в визуальное состояние заполненный */
8
10
  filled?: boolean;
@@ -20,6 +22,6 @@ export type FieldLabelProps = {
20
22
  ref?: Ref<HTMLSpanElement>;
21
23
  /** Значение компонента */
22
24
  children?: string;
23
- } & HTMLAttributes<HTMLSpanElement>;
25
+ } & ComponentPropsWithRef<typeof FIELD_LABEL_DEFAULT_TAG>;
24
26
  export declare const cnFieldLabel: import("@bem-react/classname").ClassNameFormatter;
25
27
  export declare const FieldLabel: React.ForwardRefExoticComponent<Omit<FieldLabelProps, "ref"> & React.RefAttributes<HTMLSpanElement>>;
@@ -1,14 +1,44 @@
1
- import { forwardRef } from 'react';
2
- import * as React from 'react';
3
- import { cn } from '../../utils/classname';
1
+ import { __assign, __read } from "tslib";
4
2
  import './FieldLabel.css';
5
- export var fieldLabelSizeVariant = ['2xs', 'xs', 's', 'm', 'l'];
3
+ import React, { forwardRef, useContext, useEffect } from 'react';
4
+ import { cn } from '../../utils/classname';
5
+ import { FieldControlContext } from '../FieldControl';
6
+ export var FIELD_LABEL_DEFAULT_TAG = 'span';
6
7
  export var cnFieldLabel = cn('FieldLabel');
7
8
  export var FieldLabel = forwardRef(function (_a, ref) {
8
- var focused = _a.focused, children = _a.children, filled = _a.filled, shrink = _a.shrink, required = _a.required, disabled = _a.disabled, className = _a.className, size = _a.size;
9
- return (React.createElement("span", { className: cnFieldLabel({ filled: filled, shrink: shrink, focused: focused, disabled: disabled, size: size }, [
10
- className,
11
- ]), ref: ref },
9
+ var focusedProp = _a.focused, children = _a.children, filledProp = _a.filled, shrink = _a.shrink, requiredProp = _a.required, disabledProp = _a.disabled, className = _a.className, sizeProp = _a.size;
10
+ var context = useContext(FieldControlContext);
11
+ var _b = __read(context, 2), fieldControl = _b[0], setFieldControl = _b[1];
12
+ var Tag = FIELD_LABEL_DEFAULT_TAG;
13
+ var size = sizeProp;
14
+ var required = requiredProp;
15
+ var disabled = disabledProp;
16
+ var focused = focusedProp;
17
+ var filled = filledProp;
18
+ useEffect(function () {
19
+ setFieldControl(function (prevState) { return (__assign(__assign({}, prevState), { label: children })); });
20
+ }, [children]);
21
+ if (!children) {
22
+ return null;
23
+ }
24
+ if (fieldControl) {
25
+ if (size === undefined && fieldControl.size) {
26
+ size = fieldControl.size;
27
+ }
28
+ if (required === undefined && fieldControl.required) {
29
+ required = fieldControl.required;
30
+ }
31
+ if (disabled === undefined && fieldControl.disabled) {
32
+ disabled = fieldControl.disabled;
33
+ }
34
+ if (focused === undefined && fieldControl.focused) {
35
+ focused = fieldControl.focused;
36
+ }
37
+ if (filled === undefined && fieldControl.filled) {
38
+ filled = fieldControl.filled;
39
+ }
40
+ }
41
+ return (React.createElement(Tag, { className: cnFieldLabel({ filled: filled, shrink: shrink, focused: focused, disabled: disabled, size: size, required: required }, [className]), ref: ref },
12
42
  children,
13
43
  " ",
14
44
  required && React.createElement("sup", null, "*")));
@@ -0,0 +1,13 @@
1
+ .Fieldset {
2
+ position: absolute;
3
+ inset-block-end: 0;
4
+ inset-inline-end: 0;
5
+ inset-block-start: 0;
6
+ inset-inline-start: 0;
7
+ margin: 0;
8
+ padding: 0;
9
+ pointer-events: none;
10
+ border-radius: var(--border-radius-xs);
11
+ border: var(--textfield-border-width) solid var(--textfield-border-color);
12
+ transition: border var(--transition-default);
13
+ }
@@ -0,0 +1,10 @@
1
+ import './Fieldset.css';
2
+ import React from 'react';
3
+ import type { ComponentPropsWithRef, ComponentRef } from 'react';
4
+ export declare const FIELDSET_DEFAULT_TAG = "fieldset";
5
+ export type FieldsetRef = ComponentRef<typeof FIELDSET_DEFAULT_TAG>;
6
+ export type FieldsetProps = ComponentPropsWithRef<typeof FIELDSET_DEFAULT_TAG>;
7
+ export declare const cnFieldset: import("@bem-react/classname").ClassNameFormatter;
8
+ export declare const Fieldset: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement>, "ref"> & {
9
+ ref?: ((instance: HTMLFieldSetElement | null) => void) | React.RefObject<HTMLFieldSetElement> | null | undefined;
10
+ }, "ref"> & React.RefAttributes<HTMLFieldSetElement>>;
@@ -0,0 +1,12 @@
1
+ import { __assign, __rest } from "tslib";
2
+ import './Fieldset.css';
3
+ import React, { forwardRef } from 'react';
4
+ import { cn } from '../../utils/classname';
5
+ export var FIELDSET_DEFAULT_TAG = 'fieldset';
6
+ export var cnFieldset = cn('Fieldset');
7
+ export var Fieldset = forwardRef(function (_a, ref) {
8
+ var className = _a.className, other = __rest(_a, ["className"]);
9
+ var Tag = FIELDSET_DEFAULT_TAG;
10
+ return React.createElement(Tag, __assign({ className: cnFieldset({}, [className]) }, other, { ref: ref }));
11
+ });
12
+ Fieldset.displayName = 'Fieldset';
@@ -0,0 +1 @@
1
+ export * from './Fieldset';
@@ -0,0 +1 @@
1
+ export * from './Fieldset';