indicator-ui 0.1.46 → 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.
- package/dist/index.css +617 -0
- package/dist/index.css.map +1 -1
- package/dist/index.js +17548 -14323
- package/dist/index.js.map +1 -1
- package/dist/scss/ui/formFields/FormFieldWrapper/styles/mixins/index.scss +1 -0
- package/dist/scss/ui/formFields/FormFieldWrapper/styles/mixins/inputFieldWrapper.scss +50 -0
- package/dist/types/src/hooks/forms/__tests__/lib/getDataByPath.test.d.ts +1 -0
- package/dist/types/src/hooks/forms/__tests__/lib/getFormDataPaths.test.d.ts +1 -0
- package/dist/types/src/hooks/forms/__tests__/lib/setDataByPath.test.d.ts +1 -0
- package/dist/types/src/hooks/forms/__tests__/lib/utils.test.d.ts +1 -0
- package/dist/types/src/hooks/forms/classes/index.d.ts +44 -0
- package/dist/types/src/hooks/forms/index.d.ts +2 -0
- package/dist/types/src/hooks/forms/lib/fieldsProps.d.ts +11 -0
- package/dist/types/src/hooks/forms/lib/getDataByPath.d.ts +4 -0
- package/dist/types/src/hooks/forms/lib/getFormDataPaths.d.ts +5 -0
- package/dist/types/src/hooks/forms/lib/index.d.ts +5 -0
- package/dist/types/src/hooks/forms/lib/scheme.d.ts +13 -0
- package/dist/types/src/hooks/forms/lib/setDataByPath.d.ts +5 -0
- package/dist/types/src/hooks/forms/lib/utils.d.ts +9 -0
- package/dist/types/src/hooks/forms/types/formTypes.d.ts +51 -0
- package/dist/types/src/hooks/forms/types/index.d.ts +2 -3
- package/dist/types/src/hooks/forms/types/scheme.d.ts +151 -0
- package/dist/types/src/hooks/forms/useForm.d.ts +212 -0
- package/dist/types/src/hooks/forms/validateFunctions/config.d.ts +2 -0
- package/dist/types/src/hooks/forms/validateFunctions/index.d.ts +8 -0
- package/dist/types/src/hooks/forms/validateFunctions/validateArray.d.ts +1 -0
- package/dist/types/src/hooks/forms/validateFunctions/validateDateTime.d.ts +7 -0
- package/dist/types/src/hooks/forms/validateFunctions/validateEqualsTo.d.ts +1 -0
- package/dist/types/src/hooks/forms/validateFunctions/validateFile.d.ts +3 -0
- package/dist/types/src/hooks/forms/validateFunctions/validateNum.d.ts +6 -0
- package/dist/types/src/hooks/forms/validateFunctions/validateRequired.d.ts +1 -0
- package/dist/types/src/hooks/forms/validateFunctions/validateStr.d.ts +8 -0
- package/dist/types/src/hooks/index.d.ts +1 -0
- package/dist/types/src/lib/tsCheck/index.d.ts +1 -0
- package/dist/types/src/test/App.d.ts +1 -1
- package/dist/types/src/test/layout/PageLayout.d.ts +1 -1
- package/dist/types/src/test/pages/ButtonsPage.d.ts +1 -1
- package/dist/types/src/test/pages/CascadeSelectorPage.d.ts +1 -1
- package/dist/types/src/test/pages/CheckboxMarkPage.d.ts +1 -1
- package/dist/types/src/test/pages/CheckboxPage.d.ts +1 -1
- package/dist/types/src/test/pages/DateTimeFieldMaskPage.d.ts +1 -1
- package/dist/types/src/test/pages/DateTimeFieldsPage.d.ts +1 -1
- package/dist/types/src/test/pages/DateTimePickerPage.d.ts +1 -1
- package/dist/types/src/test/pages/DropdownItemPage.d.ts +1 -1
- package/dist/types/src/test/pages/FieldsPage.d.ts +1 -1
- package/dist/types/src/test/pages/FormBuilderPage.d.ts +1 -1
- package/dist/types/src/test/pages/FormPage.d.ts +1 -0
- package/dist/types/src/test/pages/HomePage.d.ts +1 -1
- package/dist/types/src/test/pages/LoadingIndicatorPage.d.ts +1 -1
- package/dist/types/src/test/pages/MediaPlayerPage.d.ts +1 -1
- package/dist/types/src/test/pages/MicroButtonsPage.d.ts +1 -1
- package/dist/types/src/test/pages/ModalsPage.d.ts +1 -1
- package/dist/types/src/test/pages/PaginationPage.d.ts +1 -1
- package/dist/types/src/test/pages/SlideTransitionPage.d.ts +1 -1
- package/dist/types/src/test/pages/TabFramePage.d.ts +1 -1
- package/dist/types/src/test/pages/TagPage.d.ts +1 -1
- package/dist/types/src/test/pages/TestPage.d.ts +1 -1
- package/dist/types/src/test/pages/ToggleBasePage.d.ts +1 -1
- package/dist/types/src/test/pages/TogglePage.d.ts +1 -1
- package/dist/types/src/test/pages/TooltipTage.d.ts +1 -1
- package/dist/types/src/test/pages/UiAnimationsPage.d.ts +1 -1
- package/dist/types/src/test/pages/UseSmartPositionPage.d.ts +1 -1
- package/dist/types/src/test/pages/UseSmartScrollPage.d.ts +1 -1
- package/dist/types/src/test/pages/UserPickPage.d.ts +1 -1
- package/dist/types/src/test/pages/index.d.ts +1 -0
- package/dist/types/src/types/mixins.d.ts +10 -0
- package/dist/types/src/ui/Carousel/ui/Carousel.d.ts +1 -1
- package/dist/types/src/ui/CascadeSelector/ui/CascadeSelector.d.ts +1 -1
- package/dist/types/src/ui/DateTimePicker/ui/components/CalendarButton.d.ts +1 -1
- package/dist/types/src/ui/DateTimePicker/ui/components/CalendarDay.d.ts +1 -1
- package/dist/types/src/ui/DateTimePicker/ui/components/CalendarMonth.d.ts +1 -1
- package/dist/types/src/ui/DateTimePicker/ui/components/CalendarYear.d.ts +1 -1
- package/dist/types/src/ui/DateTimePicker/ui/components/TimePickerFeed.d.ts +1 -1
- package/dist/types/src/ui/DateTimePicker/ui/components/TimePickerTag.d.ts +1 -1
- package/dist/types/src/ui/DateTimePicker/ui/parts/Footer.d.ts +1 -1
- package/dist/types/src/ui/DateTimePicker/ui/parts/Header.d.ts +1 -1
- package/dist/types/src/ui/DateTimePicker/ui/parts/Main.d.ts +1 -1
- package/dist/types/src/ui/DateTimePicker/ui/pickers/DatePicker.d.ts +1 -1
- package/dist/types/src/ui/DateTimePicker/ui/pickers/MonthPicker.d.ts +1 -1
- package/dist/types/src/ui/DateTimePicker/ui/pickers/TimePicker.d.ts +1 -1
- package/dist/types/src/ui/DateTimePicker/ui/pickers/YearPicker.d.ts +1 -1
- package/dist/types/src/ui/Dropdown/types/DropdownTypes.d.ts +5 -0
- package/dist/types/src/ui/DropdownItem/types/DropdownItemTypes.d.ts +5 -0
- package/dist/types/src/ui/FormBuilder/lib/formBuilder.d.ts +1 -1
- package/dist/types/src/ui/InputFields/DateTimeField/ui/DateField.d.ts +1 -1
- package/dist/types/src/ui/InputFields/DateTimeField/ui/DateFieldBase.d.ts +1 -1
- package/dist/types/src/ui/InputFields/DateTimeField/ui/DateTimeField.d.ts +1 -1
- package/dist/types/src/ui/InputFields/DateTimeField/ui/TimeField.d.ts +1 -1
- package/dist/types/src/ui/InputFields/DateTimeField/ui/TimeFieldBase.d.ts +1 -1
- package/dist/types/src/ui/InputFields/DateTimeFieldMask/ui/DateTimeFieldMask.d.ts +1 -1
- package/dist/types/src/ui/InputFields/DateTimeRangeField/ui/DateRangeField.d.ts +1 -1
- package/dist/types/src/ui/InputFields/DateTimeRangeField/ui/DateTimeRangeField.d.ts +1 -1
- package/dist/types/src/ui/InputFields/DateTimeRangeField/ui/TimeRangeField.d.ts +1 -1
- package/dist/types/src/ui/InputFields/SelectField/types/SelectFieldTypes.d.ts +4 -0
- package/dist/types/src/ui/InputFields/TextareaField/ui/TextareaField.d.ts +1 -1
- package/dist/types/src/ui/Loaders/ui/LoadingIndicator.d.ts +1 -1
- package/dist/types/src/ui/MediaViewer/ui/components/ControlBar.d.ts +1 -1
- package/dist/types/src/ui/MediaViewer/ui/components/VideoProgressBar.d.ts +1 -1
- package/dist/types/src/ui/PaginationBar/ui/PageSwitcher.d.ts +1 -1
- package/dist/types/src/ui/PaginationBar/ui/PaginationBar.d.ts +1 -1
- package/dist/types/src/ui/PlayButton/ui/PlayButton.d.ts +1 -1
- package/dist/types/src/ui/SlideTransition/ui/SlideTransition.d.ts +1 -1
- package/dist/types/src/ui/TabButtons/ui/TabButtons.d.ts +1 -1
- package/dist/types/src/ui/TabFrame/ui/TabFrame.d.ts +1 -1
- package/dist/types/src/ui/Tag/ui/Tag.d.ts +1 -1
- package/dist/types/src/ui/Tag/ui/TagCheckbox.d.ts +1 -1
- package/dist/types/src/ui/Tag/ui/TagCount.d.ts +1 -1
- package/dist/types/src/ui/Toggle/ui/Toggle.d.ts +1 -1
- package/dist/types/src/ui/Tooltip/ui/Tooltip.d.ts +1 -1
- package/dist/types/src/ui/UserPick/ui/UserPick.d.ts +1 -1
- package/dist/types/src/ui/formFields/FormField/index.d.ts +1 -0
- package/dist/types/src/ui/formFields/FormField/styles/index.d.ts +1 -0
- package/dist/types/src/ui/formFields/FormField/ui/FormField.d.ts +6 -0
- package/dist/types/src/ui/formFields/FormField/ui/FormFieldBase.d.ts +19 -0
- package/dist/types/src/ui/formFields/FormField/ui/index.d.ts +2 -0
- package/dist/types/src/ui/formFields/FormFieldWrapper/index.d.ts +1 -0
- package/dist/types/src/ui/formFields/FormFieldWrapper/styles/index.d.ts +1 -0
- package/dist/types/src/ui/formFields/FormFieldWrapper/ui/FormFieldWrapper.d.ts +24 -0
- package/dist/types/src/ui/formFields/FormFieldWrapper/ui/index.d.ts +1 -0
- package/dist/types/src/ui/formFields/FormRadioField/index.d.ts +1 -0
- package/dist/types/src/ui/formFields/FormRadioField/ui/FieldItem.d.ts +11 -0
- package/dist/types/src/ui/formFields/FormRadioField/ui/FormRadioField.d.ts +18 -0
- package/dist/types/src/ui/formFields/FormRadioField/ui/index.d.ts +1 -0
- package/dist/types/src/ui/formFields/FormSelectField/config/index.d.ts +1 -0
- package/dist/types/src/ui/formFields/FormSelectField/index.d.ts +1 -0
- package/dist/types/src/ui/formFields/FormSelectField/styles/index.d.ts +1 -0
- package/dist/types/src/ui/formFields/FormSelectField/ui/FormSelectField.d.ts +8 -0
- package/dist/types/src/ui/formFields/FormSelectField/ui/FormSelectFieldBase.d.ts +21 -0
- package/dist/types/src/ui/formFields/FormSelectField/ui/index.d.ts +2 -0
- package/dist/types/src/ui/formFields/FormSwitcherField/index.d.ts +1 -0
- package/dist/types/src/ui/formFields/FormSwitcherField/ui/FormSwitcherField.d.ts +5 -0
- package/dist/types/src/ui/formFields/FormSwitcherField/ui/index.d.ts +1 -0
- package/dist/types/src/ui/formFields/FormTextareaField/index.d.ts +1 -0
- package/dist/types/src/ui/formFields/FormTextareaField/styles/index.d.ts +1 -0
- package/dist/types/src/ui/formFields/FormTextareaField/ui/FormTextareaField.d.ts +14 -0
- package/dist/types/src/ui/formFields/FormTextareaField/ui/index.d.ts +1 -0
- package/dist/types/src/ui/formFields/extends/index.d.ts +1 -0
- package/dist/types/src/ui/formFields/extends/style/index.d.ts +2 -0
- package/dist/types/src/ui/formFields/extends/ui/DropdownArrow.d.ts +6 -0
- package/dist/types/src/ui/formFields/extends/ui/InputInnerButton.d.ts +7 -0
- package/dist/types/src/ui/formFields/extends/ui/index.d.ts +2 -0
- package/dist/types/src/ui/formFields/index.d.ts +6 -0
- package/dist/types/src/ui/index.d.ts +1 -0
- package/docs/Notes.md +134 -0
- package/package.json +2 -2
- package/dist/scss/ui/InputFields/index.scss +0 -7
- package/dist/types/src/hooks/forms/useForms.d.ts +0 -3
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { ComponentRefType } from "../../../../../../types";
|
|
3
|
+
import { FormSelectFieldBase } from './FormSelectFieldBase';
|
|
4
|
+
import { FormFieldWrapper } from '../../FormFieldWrapper';
|
|
5
|
+
type RefType = ComponentRefType<typeof FormFieldWrapper>;
|
|
6
|
+
type PropsType<D, M extends boolean> = React.ComponentProps<typeof FormSelectFieldBase<D, M>> & React.ComponentProps<typeof FormFieldWrapper>;
|
|
7
|
+
export declare const FormSelectField: <D, M extends boolean = false>(props: PropsType<D, M> & React.RefAttributes<RefType>) => React.ReactElement | null;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { FieldPropsType } from "../../../../hooks";
|
|
3
|
+
import { DropdownItemPropsType } from "../../../../ui";
|
|
4
|
+
import { FormFieldBase } from '../../FormField';
|
|
5
|
+
type SelectFieldOptionsExtendItemType<T> = DropdownItemPropsType & {
|
|
6
|
+
value: T;
|
|
7
|
+
label?: string;
|
|
8
|
+
};
|
|
9
|
+
type SelectFieldOptionsItemType<T> = SelectFieldOptionsExtendItemType<T> | T;
|
|
10
|
+
type SelectFieldOptionsType<T> = Array<SelectFieldOptionsItemType<T>>;
|
|
11
|
+
type SelectFieldValueType<D, M> = M extends true ? Array<D> : D;
|
|
12
|
+
type BasePropsType<D, M extends boolean> = {
|
|
13
|
+
options?: SelectFieldOptionsType<D>;
|
|
14
|
+
multiple?: M;
|
|
15
|
+
theme?: "light" | "dark";
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
required?: boolean;
|
|
18
|
+
};
|
|
19
|
+
type PropsType<D, M extends boolean> = Omit<React.ComponentProps<typeof FormFieldBase>, keyof BasePropsType<D, M> | keyof FieldPropsType<SelectFieldValueType<D, M>>> & FieldPropsType<SelectFieldValueType<D, M>> & BasePropsType<D, M>;
|
|
20
|
+
export declare function FormSelectFieldBase<D, M extends boolean = false>(props: PropsType<D, M>): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ui';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { TogglePropsType } from "../../../../ui";
|
|
2
|
+
import { FieldPropsType } from "../../../../hooks";
|
|
3
|
+
type PropsType = Omit<TogglePropsType, keyof FieldPropsType<boolean>> & FieldPropsType<boolean>;
|
|
4
|
+
export declare function FormSwitcherField(props: PropsType): JSX.Element;
|
|
5
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './FormSwitcherField';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ui';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as TextareaFieldStyle } from './TextareaField.module.scss';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { FieldPropsType } from "../../../../hooks";
|
|
3
|
+
type BasePropsType = FieldPropsType<string> & {
|
|
4
|
+
/**
|
|
5
|
+
* Изменяет размер текстового поля, если текст не помещается.
|
|
6
|
+
*
|
|
7
|
+
* По умолчанию: ```false```
|
|
8
|
+
* */
|
|
9
|
+
autoResize?: boolean;
|
|
10
|
+
theme?: "light" | "dark";
|
|
11
|
+
};
|
|
12
|
+
type PropsType = Omit<React.ComponentProps<'textarea'>, keyof BasePropsType> & BasePropsType;
|
|
13
|
+
export declare function FormTextareaField(props: PropsType): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './FormTextareaField';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ui';
|
package/docs/Notes.md
CHANGED
|
@@ -53,3 +53,137 @@ newEl.addEventListener("dragover", e => {
|
|
|
53
53
|
|
|
54
54
|
`Keydown` событие срабатывает только на сфокусированном объекте и всплывает вверх по дереву, пока не встретит слушатель.
|
|
55
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
|
+
и можно не бояться увидеть сообщение об ошибке.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "indicator-ui",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.48",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/types/src/index.d.ts",
|
|
6
6
|
"style": "dist/index.css",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"tsconfig-paths-webpack-plugin": "^4.2.0",
|
|
64
64
|
"tslib": "^2.8.1",
|
|
65
65
|
"typed-css-modules-webpack-plugin": "^0.2.0",
|
|
66
|
-
"typescript": "^5.
|
|
66
|
+
"typescript": "^5.9.3",
|
|
67
67
|
"webpack": "^5.97.1",
|
|
68
68
|
"webpack-cli": "^6.0.1",
|
|
69
69
|
"webpack-dev-server": "^5.2.0"
|