indicator-ui 0.1.47 → 0.1.48

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 (181) hide show
  1. package/README.md +25 -25
  2. package/dist/index.css +612 -0
  3. package/dist/index.css.map +1 -1
  4. package/dist/index.js +6059 -2842
  5. package/dist/index.js.map +1 -1
  6. package/dist/scss/styles/adaptive/index.scss +142 -142
  7. package/dist/scss/styles/colors/index.scss +1 -1
  8. package/dist/scss/styles/colors/primary.scss +54 -54
  9. package/dist/scss/styles/colors/secondary.scss +12 -12
  10. package/dist/scss/styles/index.scss +2 -2
  11. package/dist/scss/styles/mixins/centerInsideContent.scss +6 -6
  12. package/dist/scss/styles/mixins/changeSvg.scss +25 -25
  13. package/dist/scss/styles/mixins/fnt-flex.scss +38 -38
  14. package/dist/scss/styles/mixins/fnt.scss +25 -25
  15. package/dist/scss/styles/mixins/hiddeScrollBar.scss +9 -9
  16. package/dist/scss/styles/mixins/index.scss +7 -7
  17. package/dist/scss/styles/mixins/modify-flex.scss +17 -17
  18. package/dist/scss/styles/mixins/modify-svg.scss +30 -30
  19. package/dist/scss/test/global.scss +82 -82
  20. package/dist/scss/ui/Buttons/styles/mixins/baseButton.scss +48 -48
  21. package/dist/scss/ui/Buttons/styles/mixins/index.scss +1 -1
  22. package/dist/scss/ui/Buttons/styles/mixins/properties/index.scss +21 -21
  23. package/dist/scss/ui/Buttons/styles/mixins/properties/large.scss +28 -28
  24. package/dist/scss/ui/Buttons/styles/mixins/properties/link-black.scss +47 -47
  25. package/dist/scss/ui/Buttons/styles/mixins/properties/link-color.scss +47 -47
  26. package/dist/scss/ui/Buttons/styles/mixins/properties/link-dark-theme.scss +47 -47
  27. package/dist/scss/ui/Buttons/styles/mixins/properties/link-gray.scss +47 -47
  28. package/dist/scss/ui/Buttons/styles/mixins/properties/medium.scss +28 -28
  29. package/dist/scss/ui/Buttons/styles/mixins/properties/primary.scss +59 -59
  30. package/dist/scss/ui/Buttons/styles/mixins/properties/secondary-color.scss +72 -72
  31. package/dist/scss/ui/Buttons/styles/mixins/properties/secondary-gray.scss +90 -90
  32. package/dist/scss/ui/Buttons/styles/mixins/properties/small.scss +28 -28
  33. package/dist/scss/ui/Buttons/styles/mixins/properties/tab-active.scss +51 -51
  34. package/dist/scss/ui/Buttons/styles/mixins/properties/tab.scss +51 -51
  35. package/dist/scss/ui/Buttons/styles/mixins/properties/tertiary-color.scss +82 -82
  36. package/dist/scss/ui/Buttons/styles/mixins/properties/tertiary-gray.scss +42 -42
  37. package/dist/scss/ui/Buttons/styles/mixins/properties/tertiary-white.scss +83 -83
  38. package/dist/scss/ui/Buttons/styles/mixins/properties/ultra.scss +28 -28
  39. package/dist/scss/ui/Buttons/styles/mixins/properties/warning-link-color.scss +44 -44
  40. package/dist/scss/ui/Buttons/styles/mixins/properties/warning-primary.scss +36 -36
  41. package/dist/scss/ui/Buttons/styles/mixins/properties/warning-secondary-color.scss +40 -40
  42. package/dist/scss/ui/CheckboxMark/styles/mixins/base.scss +30 -30
  43. package/dist/scss/ui/CheckboxMark/styles/mixins/checkbox-mark.scss +95 -95
  44. package/dist/scss/ui/CheckboxMark/styles/mixins/index.scss +2 -2
  45. package/dist/scss/ui/CheckboxMark/styles/mixins/properties/checkbox.scss +2 -2
  46. package/dist/scss/ui/CheckboxMark/styles/mixins/properties/checked.scss +21 -21
  47. package/dist/scss/ui/CheckboxMark/styles/mixins/properties/correct.scss +48 -48
  48. package/dist/scss/ui/CheckboxMark/styles/mixins/properties/disabled.scss +28 -28
  49. package/dist/scss/ui/CheckboxMark/styles/mixins/properties/error.scss +23 -23
  50. package/dist/scss/ui/CheckboxMark/styles/mixins/properties/incorrect.scss +48 -48
  51. package/dist/scss/ui/CheckboxMark/styles/mixins/properties/indeterminate.scss +18 -18
  52. package/dist/scss/ui/CheckboxMark/styles/mixins/properties/index.scss +7 -7
  53. package/dist/scss/ui/CheckboxMark/styles/mixins/properties/radio.scss +14 -14
  54. package/dist/scss/ui/FormBuilder/styles/CustomFields/CustomInputField/CustomInput.scss +125 -125
  55. package/dist/scss/ui/FormBuilder/styles/CustomFields/CustomInputField/CustomInputField.scss +32 -32
  56. package/dist/scss/ui/FormBuilder/styles/CustomFields/CustomInputField/CustomTextareaInput.scss +29 -29
  57. package/dist/scss/ui/FormBuilder/styles/CustomFields/CustomInputField/index.scss +1 -1
  58. package/dist/scss/ui/FormBuilder/styles/CustomFields/CustomInputWrapper/CustomInputWrapper.scss +54 -54
  59. package/dist/scss/ui/FormBuilder/styles/CustomFields/CustomInputWrapper/config.scss +4 -4
  60. package/dist/scss/ui/FormBuilder/styles/CustomFields/CustomOptionsInput/index.scss +47 -47
  61. package/dist/scss/ui/FormBuilder/styles/CustomFields/CustomSelectField/CustomSelectField.scss +53 -53
  62. package/dist/scss/ui/FormBuilder/styles/CustomFields/CustomSelectField/CustomSelectFieldOption.scss +50 -50
  63. package/dist/scss/ui/FormBuilder/styles/CustomFields/CustomSelectField/CustomSelectFieldViewField.scss +27 -27
  64. package/dist/scss/ui/FormBuilder/styles/CustomFields/CustomSwitchersField/CustomSwitchersField.scss +16 -16
  65. package/dist/scss/ui/FormBuilder/styles/CustomFields/CustomSwitchersField/components/option.scss +33 -33
  66. package/dist/scss/ui/FormBuilder/styles/CustomFields/index.scss +4 -4
  67. package/dist/scss/ui/InputFields/FlexField/styles/mixins/flexField.scss +150 -150
  68. package/dist/scss/ui/InputFields/InputFieldWrapper/styles/mixins/inputFieldWrapper.scss +49 -49
  69. package/dist/scss/ui/MicroButton/styles/mixins/base-button.scss +17 -17
  70. package/dist/scss/ui/MicroButton/styles/mixins/index.scss +1 -1
  71. package/dist/scss/ui/MicroButton/styles/mixins/micro-button.scss +68 -68
  72. package/dist/scss/ui/MicroButton/styles/mixins/properties/blue-light.scss +18 -18
  73. package/dist/scss/ui/MicroButton/styles/mixins/properties/color-fill.scss +20 -20
  74. package/dist/scss/ui/MicroButton/styles/mixins/properties/color-hover.scss +20 -20
  75. package/dist/scss/ui/MicroButton/styles/mixins/properties/color.scss +20 -20
  76. package/dist/scss/ui/MicroButton/styles/mixins/properties/dark.scss +18 -18
  77. package/dist/scss/ui/MicroButton/styles/mixins/properties/gray-fill.scss +20 -20
  78. package/dist/scss/ui/MicroButton/styles/mixins/properties/gray.scss +20 -20
  79. package/dist/scss/ui/MicroButton/styles/mixins/properties/index.scss +17 -17
  80. package/dist/scss/ui/MicroButton/styles/mixins/properties/light.scss +20 -20
  81. package/dist/scss/ui/MicroButton/styles/mixins/properties/red-fill.scss +20 -20
  82. package/dist/scss/ui/MicroButton/styles/mixins/properties/red-hover.scss +20 -20
  83. package/dist/scss/ui/MicroButton/styles/mixins/properties/rose.scss +20 -20
  84. package/dist/scss/ui/MicroButton/styles/mixins/properties/size-14.scss +11 -11
  85. package/dist/scss/ui/MicroButton/styles/mixins/properties/size-16.scss +11 -11
  86. package/dist/scss/ui/MicroButton/styles/mixins/properties/size-20.scss +11 -11
  87. package/dist/scss/ui/MicroButton/styles/mixins/properties/size-24.scss +11 -11
  88. package/dist/scss/ui/MicroButton/styles/mixins/properties/size-28.scss +11 -11
  89. package/dist/scss/ui/Tag/styles/properties/active.scss +15 -15
  90. package/dist/scss/ui/Tag/styles/properties/base.scss +33 -33
  91. package/dist/scss/ui/Tag/styles/properties/clicked.scss +2 -2
  92. package/dist/scss/ui/Tag/styles/properties/hover.scss +4 -4
  93. package/dist/scss/ui/Tag/styles/properties/index.scss +6 -6
  94. package/dist/scss/ui/Tag/styles/properties/large.scss +18 -18
  95. package/dist/scss/ui/Tag/styles/properties/medium.scss +18 -18
  96. package/dist/scss/ui/Tag/styles/properties/small.scss +18 -18
  97. package/dist/scss/ui/ToggleBase/styles/mixins/active.scss +12 -12
  98. package/dist/scss/ui/ToggleBase/styles/mixins/base-button.scss +8 -8
  99. package/dist/scss/ui/ToggleBase/styles/mixins/base.scss +13 -13
  100. package/dist/scss/ui/ToggleBase/styles/mixins/disabled.scss +5 -5
  101. package/dist/scss/ui/ToggleBase/styles/mixins/error.scss +6 -6
  102. package/dist/scss/ui/ToggleBase/styles/mixins/hover.scss +22 -22
  103. package/dist/scss/ui/ToggleBase/styles/mixins/index.scss +8 -8
  104. package/dist/scss/ui/ToggleBase/styles/mixins/large.scss +8 -8
  105. package/dist/scss/ui/ToggleBase/styles/mixins/medium.scss +8 -8
  106. package/dist/scss/ui/ToggleBase/styles/mixins/spacer.scss +4 -4
  107. package/dist/scss/ui/formFields/FormFieldWrapper/styles/mixins/index.scss +1 -0
  108. package/dist/scss/ui/formFields/FormFieldWrapper/styles/mixins/inputFieldWrapper.scss +50 -0
  109. package/dist/types/src/hooks/forms/__tests__/lib/getDataByPath.test.d.ts +1 -0
  110. package/dist/types/src/hooks/forms/__tests__/lib/getFormDataPaths.test.d.ts +1 -0
  111. package/dist/types/src/hooks/forms/__tests__/lib/setDataByPath.test.d.ts +1 -0
  112. package/dist/types/src/hooks/forms/__tests__/lib/utils.test.d.ts +1 -0
  113. package/dist/types/src/hooks/forms/classes/index.d.ts +44 -0
  114. package/dist/types/src/hooks/forms/index.d.ts +2 -0
  115. package/dist/types/src/hooks/forms/lib/fieldsProps.d.ts +11 -0
  116. package/dist/types/src/hooks/forms/lib/getDataByPath.d.ts +4 -0
  117. package/dist/types/src/hooks/forms/lib/getFormDataPaths.d.ts +5 -0
  118. package/dist/types/src/hooks/forms/lib/index.d.ts +5 -0
  119. package/dist/types/src/hooks/forms/lib/scheme.d.ts +13 -0
  120. package/dist/types/src/hooks/forms/lib/setDataByPath.d.ts +5 -0
  121. package/dist/types/src/hooks/forms/lib/utils.d.ts +9 -0
  122. package/dist/types/src/hooks/forms/types/formTypes.d.ts +51 -0
  123. package/dist/types/src/hooks/forms/types/index.d.ts +2 -3
  124. package/dist/types/src/hooks/forms/types/scheme.d.ts +151 -0
  125. package/dist/types/src/hooks/forms/useForm.d.ts +212 -0
  126. package/dist/types/src/hooks/forms/validateFunctions/config.d.ts +2 -0
  127. package/dist/types/src/hooks/forms/validateFunctions/index.d.ts +8 -0
  128. package/dist/types/src/hooks/forms/validateFunctions/validateArray.d.ts +1 -0
  129. package/dist/types/src/hooks/forms/validateFunctions/validateDateTime.d.ts +7 -0
  130. package/dist/types/src/hooks/forms/validateFunctions/validateEqualsTo.d.ts +1 -0
  131. package/dist/types/src/hooks/forms/validateFunctions/validateFile.d.ts +3 -0
  132. package/dist/types/src/hooks/forms/validateFunctions/validateNum.d.ts +6 -0
  133. package/dist/types/src/hooks/forms/validateFunctions/validateRequired.d.ts +1 -0
  134. package/dist/types/src/hooks/forms/validateFunctions/validateStr.d.ts +8 -0
  135. package/dist/types/src/hooks/index.d.ts +1 -0
  136. package/dist/types/src/lib/tsCheck/index.d.ts +1 -0
  137. package/dist/types/src/test/pages/FormPage.d.ts +1 -0
  138. package/dist/types/src/test/pages/index.d.ts +1 -0
  139. package/dist/types/src/types/mixins.d.ts +10 -0
  140. package/dist/types/src/ui/formFields/FormField/index.d.ts +1 -0
  141. package/dist/types/src/ui/formFields/FormField/styles/index.d.ts +1 -0
  142. package/dist/types/src/ui/formFields/FormField/ui/FormField.d.ts +6 -0
  143. package/dist/types/src/ui/formFields/FormField/ui/FormFieldBase.d.ts +19 -0
  144. package/dist/types/src/ui/formFields/FormField/ui/index.d.ts +2 -0
  145. package/dist/types/src/ui/formFields/FormFieldWrapper/index.d.ts +1 -0
  146. package/dist/types/src/ui/formFields/FormFieldWrapper/styles/index.d.ts +1 -0
  147. package/dist/types/src/ui/formFields/FormFieldWrapper/ui/FormFieldWrapper.d.ts +24 -0
  148. package/dist/types/src/ui/formFields/FormFieldWrapper/ui/index.d.ts +1 -0
  149. package/dist/types/src/ui/formFields/FormRadioField/index.d.ts +1 -0
  150. package/dist/types/src/ui/formFields/FormRadioField/ui/FieldItem.d.ts +11 -0
  151. package/dist/types/src/ui/formFields/FormRadioField/ui/FormRadioField.d.ts +18 -0
  152. package/dist/types/src/ui/formFields/FormRadioField/ui/index.d.ts +1 -0
  153. package/dist/types/src/ui/formFields/FormSelectField/config/index.d.ts +1 -0
  154. package/dist/types/src/ui/formFields/FormSelectField/index.d.ts +1 -0
  155. package/dist/types/src/ui/formFields/FormSelectField/styles/index.d.ts +1 -0
  156. package/dist/types/src/ui/formFields/FormSelectField/ui/FormSelectField.d.ts +8 -0
  157. package/dist/types/src/ui/formFields/FormSelectField/ui/FormSelectFieldBase.d.ts +21 -0
  158. package/dist/types/src/ui/formFields/FormSelectField/ui/index.d.ts +2 -0
  159. package/dist/types/src/ui/formFields/FormSwitcherField/index.d.ts +1 -0
  160. package/dist/types/src/ui/formFields/FormSwitcherField/ui/FormSwitcherField.d.ts +5 -0
  161. package/dist/types/src/ui/formFields/FormSwitcherField/ui/index.d.ts +1 -0
  162. package/dist/types/src/ui/formFields/FormTextareaField/index.d.ts +1 -0
  163. package/dist/types/src/ui/formFields/FormTextareaField/styles/index.d.ts +1 -0
  164. package/dist/types/src/ui/formFields/FormTextareaField/ui/FormTextareaField.d.ts +14 -0
  165. package/dist/types/src/ui/formFields/FormTextareaField/ui/index.d.ts +1 -0
  166. package/dist/types/src/ui/formFields/extends/index.d.ts +1 -0
  167. package/dist/types/src/ui/formFields/extends/style/index.d.ts +2 -0
  168. package/dist/types/src/ui/formFields/extends/ui/DropdownArrow.d.ts +6 -0
  169. package/dist/types/src/ui/formFields/extends/ui/InputInnerButton.d.ts +7 -0
  170. package/dist/types/src/ui/formFields/extends/ui/index.d.ts +2 -0
  171. package/dist/types/src/ui/formFields/index.d.ts +6 -0
  172. package/dist/types/src/ui/index.d.ts +1 -0
  173. package/docs/CSSVariables/CSSVariables.md +62 -62
  174. package/docs/CSSVariables/CSSVariablesCalifornia.md +61 -61
  175. package/docs/ForDev.md +106 -106
  176. package/docs/FormBuilderDocs.md +204 -204
  177. package/docs/Notes.md +189 -55
  178. package/docs/SCSSVariables.md +28 -28
  179. package/package.json +2 -2
  180. package/dist/scss/ui/InputFields/index.scss +0 -7
  181. package/dist/types/src/hooks/forms/useForms.d.ts +0 -3
@@ -1,205 +1,205 @@
1
- [🔙 Назад](../README.md)
2
-
3
- # `FormBuilder`
4
-
5
- ### Важно
6
-
7
- Для работы нужно установить библы: `npm install clsx react-imask`
8
-
9
- ---
10
-
11
- Клиентский компонент, созданный для облегчения создания полей. По большей части он был создан для имплементации хука
12
- `useFormBuilder` (чья цель, создать гибкое состояние формы). В `FormBuilder` передается основной пропс - `schema`.
13
-
14
- `schema` - словарь, в котором перечислены все поля и другие компоненты. Fообще в билдере можно написать обсалютно любую
15
- логику компонента (или почти любую), в этом и была основная идея `FormBuilder`.
16
-
17
- ---
18
-
19
- ### Актуальные типы полей:
20
-
21
- * `FORM_WRAPPER_SCHEMA`
22
- * `REACT_NODE_SCHEMA`
23
- * `INPUT_FIELD_SCHEMA`
24
- * `ARRAY_FIELDS_SCHEMA`
25
- * `BLOCK_WRAPPER_SCHEMA`
26
-
27
- ### Неактуальные типы полей (ими лучше не пользоваться, они потихоньку будут выпиливаться из проекта)
28
-
29
- * `BLOCK_SCHEMA`
30
- * `CUSTOM_FIELD_WRAPPER_SCHEMA`
31
- * `ADDITION_PROPS`
32
-
33
- ---
34
-
35
- ### `INPUT_FIELD_SCHEMA`
36
-
37
- Самая используемая схема поля ввода.
38
-
39
- ```ts
40
- const schema: INPUT_FIELD_SCHEMA = {
41
- type: 'input_field',
42
- props: {
43
- name: 'test',
44
- labelText: 'label',
45
- hintText: 'hint',
46
- }
47
- }
48
- ```
49
-
50
- Основной пропсы - это `name`, он отвечает за имя во вложенности формы
51
-
52
- ###### В результате получим:
53
-
54
- ```ts
55
- const formData = {
56
- test: 'data',
57
- }
58
- ```
59
-
60
- #### Дополнительные поля, предоставляемые `FormBuilder`:
61
-
62
- * `keyWay` - позволяет вручную задать вложенность поля
63
-
64
- ```ts
65
- const schema: INPUT_FIELD_SCHEMA = {
66
- type: 'input_field',
67
- props: {
68
- keyWay: ['test1', 'test2', 'test3'],
69
- labelText: 'label',
70
- hintText: 'hint',
71
- }
72
- }
73
- ```
74
-
75
- ###### В результате получим:
76
-
77
- ```ts
78
- const formData = {
79
- test1: {
80
- test2: {
81
- test3: 'data',
82
- }
83
- }
84
- }
85
- ```
86
-
87
- * `onBlurValidation` - добавляет проверку на `onBlur`.
88
-
89
- ```ts
90
- type onBlurValidation = { required: boolean, fun: (data: any) => boolean }
91
- ```
92
-
93
- `required` - обязательное поле.
94
-
95
- * `ownerInputComponent` - свое собственное `input` поле. Для работы оно должно принимать параметры `value` и `onChange`,
96
- которые накидываются `FormBuilder`. Любые пропсы, переданные в `props` пойдут в компонент (можно накинуть на сам
97
- компонент в `ownerInputComponent`, разницы нет, но `value`, `onChange`, `isError`, `isErrorMessage`, `onBlur` будут
98
- перезаписаны).
99
-
100
- ---
101
-
102
- ### `ARRAY_FIELDS_SCHEMA`
103
-
104
- Схема для создания массива в форме. Любой `input_field` будет класться в ячейку массива, а не в поле словаря.
105
-
106
- ```ts
107
- const schemes: ARRAY_FIELDS_SCHEMA = [
108
- {
109
- type: 'array_fields',
110
- props: {
111
- name: 'test_arr',
112
- children: [
113
- {
114
- type: 'input_field',
115
- props: {
116
- name: 'test',
117
- labelText: 'label',
118
- hintText: 'hint',
119
- placeholder: 'placeholder',
120
- }
121
- }
122
- ]
123
- }
124
- },
125
- ]
126
- ```
127
-
128
- ###### В результате получим:
129
-
130
- ```ts
131
- const formData = {
132
- test_arr: [
133
- {
134
- test: "123213"
135
- },
136
- ]
137
- }
138
- ```
139
-
140
- ###### Если не указать `name` в `input_field`, то получим:
141
-
142
- ```ts
143
- const formData = {
144
- test_arr: [
145
- "123123123123"
146
- ]
147
- }
148
- ```
149
-
150
- В зависимости от того, в каком порядке написаны поля ввода в массиве схемы, в том же порядке будет идти запись в форму.
151
-
152
- ---
153
-
154
- ### `FORM_WRAPPER_SCHEMA`
155
-
156
- Используется для обертки формы, сбрасывает счетчик `ARRAY_FIELDS_SCHEMA` (это значит, что поля внутри `FORM_WAPPER`
157
- **_не пойдут_** в массив).
158
-
159
- ```ts
160
- const schemes: ARRAY_FIELDS_SCHEMA = [
161
- {
162
- type: 'form_wrapper',
163
- props: {
164
- name: 'test_arr',
165
- children: [
166
- {
167
- type: 'input_field',
168
- props: {
169
- name: 'test',
170
- labelText: 'label',
171
- hintText: 'hint',
172
- placeholder: 'placeholder',
173
- }
174
- }
175
- ]
176
- }
177
- },
178
- ]
179
- ```
180
-
181
- ###### В результате получим:
182
-
183
- ```ts
184
- const formData = {
185
- test_arr: {
186
- test: "123123132132"
187
- }
188
- }
189
- ```
190
-
191
- ---
192
-
193
- ### `BLOCK_WRAPPER_SCHEMA`
194
-
195
- Используется для обертки чего-то, не сбрасывает счетчик `ARRAY_FIELDS_SCHEMA`, но и прописать ключ значения в словаре
196
- тоже нельзя (это значит, что поля внутри `FORM_WAPPER` **_пойдут_** в массив). Было сделано для того, чтобы можно было в
197
- массиве (или просто в схеме) сделать обертку, а в нее передать схему поля. К примеру, у вас посреди схемы надо сделать
198
- обертку для `input_field`, писать новый компонент поля не хочется, поэтому мы можем сделать компонент обертки и передать
199
- его в `BLOCK_WRAPPER_SCHEMA`.
200
-
201
- ---
202
-
203
- ### `REACT_NODE_SCHEMA`
204
-
1
+ [🔙 Назад](../README.md)
2
+
3
+ # `FormBuilder`
4
+
5
+ ### Важно
6
+
7
+ Для работы нужно установить библы: `npm install clsx react-imask`
8
+
9
+ ---
10
+
11
+ Клиентский компонент, созданный для облегчения создания полей. По большей части он был создан для имплементации хука
12
+ `useFormBuilder` (чья цель, создать гибкое состояние формы). В `FormBuilder` передается основной пропс - `schema`.
13
+
14
+ `schema` - словарь, в котором перечислены все поля и другие компоненты. Fообще в билдере можно написать обсалютно любую
15
+ логику компонента (или почти любую), в этом и была основная идея `FormBuilder`.
16
+
17
+ ---
18
+
19
+ ### Актуальные типы полей:
20
+
21
+ * `FORM_WRAPPER_SCHEMA`
22
+ * `REACT_NODE_SCHEMA`
23
+ * `INPUT_FIELD_SCHEMA`
24
+ * `ARRAY_FIELDS_SCHEMA`
25
+ * `BLOCK_WRAPPER_SCHEMA`
26
+
27
+ ### Неактуальные типы полей (ими лучше не пользоваться, они потихоньку будут выпиливаться из проекта)
28
+
29
+ * `BLOCK_SCHEMA`
30
+ * `CUSTOM_FIELD_WRAPPER_SCHEMA`
31
+ * `ADDITION_PROPS`
32
+
33
+ ---
34
+
35
+ ### `INPUT_FIELD_SCHEMA`
36
+
37
+ Самая используемая схема поля ввода.
38
+
39
+ ```ts
40
+ const schema: INPUT_FIELD_SCHEMA = {
41
+ type: 'input_field',
42
+ props: {
43
+ name: 'test',
44
+ labelText: 'label',
45
+ hintText: 'hint',
46
+ }
47
+ }
48
+ ```
49
+
50
+ Основной пропсы - это `name`, он отвечает за имя во вложенности формы
51
+
52
+ ###### В результате получим:
53
+
54
+ ```ts
55
+ const formData = {
56
+ test: 'data',
57
+ }
58
+ ```
59
+
60
+ #### Дополнительные поля, предоставляемые `FormBuilder`:
61
+
62
+ * `keyWay` - позволяет вручную задать вложенность поля
63
+
64
+ ```ts
65
+ const schema: INPUT_FIELD_SCHEMA = {
66
+ type: 'input_field',
67
+ props: {
68
+ keyWay: ['test1', 'test2', 'test3'],
69
+ labelText: 'label',
70
+ hintText: 'hint',
71
+ }
72
+ }
73
+ ```
74
+
75
+ ###### В результате получим:
76
+
77
+ ```ts
78
+ const formData = {
79
+ test1: {
80
+ test2: {
81
+ test3: 'data',
82
+ }
83
+ }
84
+ }
85
+ ```
86
+
87
+ * `onBlurValidation` - добавляет проверку на `onBlur`.
88
+
89
+ ```ts
90
+ type onBlurValidation = { required: boolean, fun: (data: any) => boolean }
91
+ ```
92
+
93
+ `required` - обязательное поле.
94
+
95
+ * `ownerInputComponent` - свое собственное `input` поле. Для работы оно должно принимать параметры `value` и `onChange`,
96
+ которые накидываются `FormBuilder`. Любые пропсы, переданные в `props` пойдут в компонент (можно накинуть на сам
97
+ компонент в `ownerInputComponent`, разницы нет, но `value`, `onChange`, `isError`, `isErrorMessage`, `onBlur` будут
98
+ перезаписаны).
99
+
100
+ ---
101
+
102
+ ### `ARRAY_FIELDS_SCHEMA`
103
+
104
+ Схема для создания массива в форме. Любой `input_field` будет класться в ячейку массива, а не в поле словаря.
105
+
106
+ ```ts
107
+ const schemes: ARRAY_FIELDS_SCHEMA = [
108
+ {
109
+ type: 'array_fields',
110
+ props: {
111
+ name: 'test_arr',
112
+ children: [
113
+ {
114
+ type: 'input_field',
115
+ props: {
116
+ name: 'test',
117
+ labelText: 'label',
118
+ hintText: 'hint',
119
+ placeholder: 'placeholder',
120
+ }
121
+ }
122
+ ]
123
+ }
124
+ },
125
+ ]
126
+ ```
127
+
128
+ ###### В результате получим:
129
+
130
+ ```ts
131
+ const formData = {
132
+ test_arr: [
133
+ {
134
+ test: "123213"
135
+ },
136
+ ]
137
+ }
138
+ ```
139
+
140
+ ###### Если не указать `name` в `input_field`, то получим:
141
+
142
+ ```ts
143
+ const formData = {
144
+ test_arr: [
145
+ "123123123123"
146
+ ]
147
+ }
148
+ ```
149
+
150
+ В зависимости от того, в каком порядке написаны поля ввода в массиве схемы, в том же порядке будет идти запись в форму.
151
+
152
+ ---
153
+
154
+ ### `FORM_WRAPPER_SCHEMA`
155
+
156
+ Используется для обертки формы, сбрасывает счетчик `ARRAY_FIELDS_SCHEMA` (это значит, что поля внутри `FORM_WAPPER`
157
+ **_не пойдут_** в массив).
158
+
159
+ ```ts
160
+ const schemes: ARRAY_FIELDS_SCHEMA = [
161
+ {
162
+ type: 'form_wrapper',
163
+ props: {
164
+ name: 'test_arr',
165
+ children: [
166
+ {
167
+ type: 'input_field',
168
+ props: {
169
+ name: 'test',
170
+ labelText: 'label',
171
+ hintText: 'hint',
172
+ placeholder: 'placeholder',
173
+ }
174
+ }
175
+ ]
176
+ }
177
+ },
178
+ ]
179
+ ```
180
+
181
+ ###### В результате получим:
182
+
183
+ ```ts
184
+ const formData = {
185
+ test_arr: {
186
+ test: "123123132132"
187
+ }
188
+ }
189
+ ```
190
+
191
+ ---
192
+
193
+ ### `BLOCK_WRAPPER_SCHEMA`
194
+
195
+ Используется для обертки чего-то, не сбрасывает счетчик `ARRAY_FIELDS_SCHEMA`, но и прописать ключ значения в словаре
196
+ тоже нельзя (это значит, что поля внутри `FORM_WAPPER` **_пойдут_** в массив). Было сделано для того, чтобы можно было в
197
+ массиве (или просто в схеме) сделать обертку, а в нее передать схему поля. К примеру, у вас посреди схемы надо сделать
198
+ обертку для `input_field`, писать новый компонент поля не хочется, поэтому мы можем сделать компонент обертки и передать
199
+ его в `BLOCK_WRAPPER_SCHEMA`.
200
+
201
+ ---
202
+
203
+ ### `REACT_NODE_SCHEMA`
204
+
205
205
  Схема простого `React-компонента`. Можно посреди схемы вcтавить какой-нибудь `ReactNode`.
package/docs/Notes.md CHANGED
@@ -1,55 +1,189 @@
1
- [🔙 Назад](../README.md)
2
-
3
- # Всякие интересные заметки
4
-
5
- ---
6
-
7
- ---
8
-
9
- ## Перетаскивание файлов на ios (на других os apple тоже наверное)
10
-
11
- У *__Apple__* есть система перетаскивания файлов (к примеру изображений).
12
-
13
- Вот так
14
-
15
- ---
16
-
17
- <img src="./assets/Notes/apple/dragImage.png" style="width:200px;padding: 20px;">
18
-
19
- ---
20
-
21
- И при правильно написанном коде должен быть такой эффект.
22
-
23
- ___
24
-
25
- <img src="./assets/Notes/apple/dragging.png" style="width:200px;padding: 20px;">
26
-
27
- ---
28
-
29
- Чтобы его получить надо навесить на элемент `dragover` слушатель и обязательно отменить ванильное поведение события.
30
-
31
-
32
- ```typescript
33
- newEl.addEventListener("dragover", e => {
34
- // Отменяем ванильное поведение события
35
- e.preventDefault()
36
- console.log('dragover')
37
- })
38
- ```
39
-
40
- ---
41
-
42
- ---
43
-
44
- ## Как дать возможность фокусироваться на элементе
45
-
46
- `TabIndex` дает возможность фокусироваться на элементе, нужно просто указать его.
47
-
48
- ---
49
-
50
- ---
51
-
52
- ## `Keydown` событие
53
-
54
- `Keydown` событие срабатывает только на сфокусированном объекте и всплывает вверх по дереву, пока не встретит слушатель.
55
- После обработки слушателем идет дальше - искать следующий (если не отменить всплытие).
1
+ [🔙 Назад](../README.md)
2
+
3
+ # Всякие интересные заметки
4
+
5
+ ---
6
+
7
+ ---
8
+
9
+ ## Перетаскивание файлов на ios (на других os apple тоже наверное)
10
+
11
+ У *__Apple__* есть система перетаскивания файлов (к примеру изображений).
12
+
13
+ Вот так
14
+
15
+ ---
16
+
17
+ <img src="./assets/Notes/apple/dragImage.png" style="width:200px;padding: 20px;">
18
+
19
+ ---
20
+
21
+ И при правильно написанном коде должен быть такой эффект.
22
+
23
+ ___
24
+
25
+ <img src="./assets/Notes/apple/dragging.png" style="width:200px;padding: 20px;">
26
+
27
+ ---
28
+
29
+ Чтобы его получить надо навесить на элемент `dragover` слушатель и обязательно отменить ванильное поведение события.
30
+
31
+
32
+ ```typescript
33
+ newEl.addEventListener("dragover", e => {
34
+ // Отменяем ванильное поведение события
35
+ e.preventDefault()
36
+ console.log('dragover')
37
+ })
38
+ ```
39
+
40
+ ---
41
+
42
+ ---
43
+
44
+ ## Как дать возможность фокусироваться на элементе
45
+
46
+ `TabIndex` дает возможность фокусироваться на элементе, нужно просто указать его.
47
+
48
+ ---
49
+
50
+ ---
51
+
52
+ ## `Keydown` событие
53
+
54
+ `Keydown` событие срабатывает только на сфокусированном объекте и всплывает вверх по дереву, пока не встретит слушатель.
55
+ После обработки слушателем идет дальше - искать следующий (если не отменить всплытие).
56
+
57
+
58
+
59
+ ## Про `TS`
60
+
61
+ ### Бесконечная рекурсия в типах или ***Type instantiation is excessively deep and possibly infinite.***
62
+
63
+ Давайте рассмотрим такой пример рекурсивных типов.
64
+
65
+ ```typescript
66
+ type GetBaseKeyChains<P extends string, T> =
67
+ IsAny<T> extends false
68
+ ? P | `${P}${GetDeepKeyChains<T> | GetArrayKeyChains<T>}`
69
+ : P | `${P}${'.' | '['}${string}`
70
+
71
+ type GetArrayKeyChains<T> =
72
+ IsArray<T> extends false
73
+ ? never
74
+ : ClearArrayType<T> extends infer Arr
75
+ ? IsTuple<Arr> extends true
76
+ ? {
77
+ [K in Extract<keyof Arr, `${number}`>]: GetBaseKeyChains<`[${K}]`, Arr[K]>
78
+ }[Extract<keyof Arr, `${number}`>]
79
+ : Arr extends any[]
80
+ ? `[${number}]` | GetBaseKeyChains<`[${number}]`, Arr[number]>
81
+ : never
82
+ : never
83
+
84
+ type GetDeepKeyChains<T> =
85
+ IsObjectType<T> extends false
86
+ ? never
87
+ : ClearObjectType<T> extends infer Form
88
+ ? {
89
+ [K in Extract<keyof Form, string>]: GetBaseKeyChains<`.${K}`, Form[K]>
90
+ }[Extract<keyof Form, string>]
91
+ : never
92
+
93
+
94
+ export type FormPath<T> = '' |
95
+ (
96
+ IsObjectType<T> extends false
97
+ ? GetArrayKeyChains<T>
98
+ : ClearObjectType<T> extends infer Form
99
+ ? {
100
+ [K in Extract<keyof Form, string>]: GetBaseKeyChains<`${K}`, Form[K]>
101
+ }[Extract<keyof Form, string>]
102
+ : never
103
+ )
104
+ ```
105
+
106
+ Как видно из примера, `GetBaseKeyChains` вызывает `GetArrayKeyChains` и `GetDeepKeyChains`,
107
+ а они в свою очередь вызывают его, что создаёт рекурсию.
108
+
109
+ Все бы хорошо, тип рабочий, всё правильно делает, но когда ты начинаешь его использовать в других типах,
110
+ которые используются в других типах и т. д., `ts` начинает офигевать от "глубины" наших намерений и предлагает поумерить пыл.
111
+
112
+ ```
113
+ TS2589: Type instantiation is excessively deep and possibly infinite.
114
+ ```
115
+
116
+ Ошибка говорит о том, что слишком глубоко и, возможно, бесконечно.
117
+ Чтобы не было бесконечно, у рекурсии обязательно должно быть условие выхода.
118
+ Есть ли оно у этой?
119
+
120
+ Да, есть — `IsObjectType<T> extends false ? never : ...` или `IsArray<T> extends false ? never :` или `IsAny<T> extends false ...`
121
+
122
+ Но почему же `ts` всё равно ругается на `possibly infinite`? Ах да — `excessively deep`, `ts` ленивый.
123
+ Если он видит, что тип вывести слишком тяжело, он такой: "Не братан, по-моему, тут слишком глубоко и бесконечно".
124
+
125
+ На самом деле это круто, что есть такой защитный механизм, но как всё же победить это? Давайте разбираться.
126
+
127
+ Один из способов (и это единственный, который мы рассмотрим, но он довольно логичный и исходит из защиты от слишком
128
+ глубокой рекурсии в нормальных языках программирования) — это ограничить глубину рекурсии.
129
+
130
+ ```typescript
131
+ type SafeRecursiveArr = [1, 2, 3, 4, 5]
132
+ type SafeRecursiveStep<T> = T extends [infer _, ...infer Rest] ? Rest : never
133
+ type CanContinueRecursive<T> = SafeRecursiveStep<T> extends never ? false : true
134
+ ```
135
+
136
+ Здесь мы создали пару конструкций, которые помогут отслеживать возможность продолжать спуск и
137
+ уменьшать счётчик допустимой глубины.
138
+
139
+ Круто, теперь имплементируем это в наши изначальные типы.
140
+
141
+ ```typescript
142
+ type GetBaseKeyChains<P extends string, T, SafeArr> =
143
+ CanContinueRecursive<SafeArr> extends false
144
+ ? never
145
+ : IsAny<T> extends false
146
+ ? P | `${P}${GetDeepKeyChains<T, SafeRecursiveStep<SafeArr>> | GetArrayKeyChains<T, SafeRecursiveStep<SafeArr>>}`
147
+ : P | `${P}${'.' | '['}${string}`
148
+
149
+ type GetArrayKeyChains<T, SafeArr> =
150
+ CanContinueRecursive<SafeArr> extends false
151
+ ? never
152
+ : IsArray<T> extends false
153
+ ? never
154
+ : ClearArrayType<T> extends infer Arr
155
+ ? IsTuple<Arr> extends true
156
+ ? {
157
+ [K in Extract<keyof Arr, `${number}`>]: GetBaseKeyChains<`[${K}]`, Arr[K], SafeRecursiveStep<SafeArr>>
158
+ }[Extract<keyof Arr, `${number}`>]
159
+ : Arr extends any[]
160
+ ? `[${number}]` | GetBaseKeyChains<`[${number}]`, Arr[number], SafeRecursiveStep<SafeArr>>
161
+ : never
162
+ : never
163
+
164
+ type GetDeepKeyChains<T, SafeArr> =
165
+ CanContinueRecursive<SafeArr> extends false
166
+ ? never
167
+ : IsObjectType<T> extends false
168
+ ? never
169
+ : ClearObjectType<T> extends infer Form
170
+ ? {
171
+ [K in Extract<keyof Form, string>]: GetBaseKeyChains<`.${K}`, Form[K], SafeRecursiveStep<SafeArr>>
172
+ }[Extract<keyof Form, string>]
173
+ : never
174
+
175
+
176
+ export type FormPath<T> = '' |
177
+ (
178
+ IsObjectType<T> extends false
179
+ ? GetArrayKeyChains<T, SafeRecursiveArr>
180
+ : ClearObjectType<T> extends infer Form
181
+ ? {
182
+ [K in Extract<keyof Form, string>]: GetBaseKeyChains<`${K}`, Form[K], SafeRecursiveArr>
183
+ }[Extract<keyof Form, string>]
184
+ : never
185
+ )
186
+ ```
187
+
188
+ Теперь `ts` будет нормально реагировать на использование типа `FormPath` в других типах,
189
+ и можно не бояться увидеть сообщение об ошибке.