@reformer/core 1.1.0-beta.8 → 2.0.0-beta.2
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/behaviors-DzYL8kY_.js +499 -0
- package/dist/behaviors.js +14 -14
- package/dist/core/behavior/create-field-path.d.ts +3 -16
- package/dist/core/nodes/group-node.d.ts +14 -193
- package/dist/core/utils/field-path.d.ts +48 -0
- package/dist/core/utils/index.d.ts +1 -0
- package/dist/core/validation/field-path.d.ts +3 -39
- package/dist/core/validation/validation-context.d.ts +23 -0
- package/dist/hooks/types.d.ts +328 -0
- package/dist/hooks/useFormControl.d.ts +13 -37
- package/dist/hooks/useFormControlValue.d.ts +167 -0
- package/dist/hooks/useSignalSubscription.d.ts +17 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +492 -986
- package/dist/{registry-helpers-BfCZcMkO.js → registry-helpers-BRxAr6nG.js} +136 -72
- package/dist/{validators-DjXtDVoE.js → validators-gXoHPdqM.js} +194 -231
- package/dist/validators.js +25 -25
- package/llms.txt +317 -172
- package/package.json +8 -4
- package/dist/behaviors-BRaiR-UY.js +0 -528
- package/dist/core/behavior/behavior-applicator.d.ts +0 -71
- package/dist/core/nodes/group-node/field-registry.d.ts +0 -191
- package/dist/core/nodes/group-node/index.d.ts +0 -11
- package/dist/core/nodes/group-node/proxy-builder.d.ts +0 -71
- package/dist/core/nodes/group-node/state-manager.d.ts +0 -184
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FieldRegistry - управление полями в GroupNode
|
|
3
|
-
*
|
|
4
|
-
* Извлечено из GroupNode для соблюдения SRP (Single Responsibility Principle).
|
|
5
|
-
* Отвечает только за хранение и управление коллекцией полей формы.
|
|
6
|
-
*
|
|
7
|
-
* @template T Тип формы (объект)
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```typescript
|
|
11
|
-
* const registry = new FieldRegistry<{ email: string; name: string }>();
|
|
12
|
-
* registry.set('email', emailField);
|
|
13
|
-
* registry.set('name', nameField);
|
|
14
|
-
*
|
|
15
|
-
* const emailField = registry.get('email');
|
|
16
|
-
* registry.forEach((field, key) => {
|
|
17
|
-
* console.log(key, field.value.value);
|
|
18
|
-
* });
|
|
19
|
-
* ```
|
|
20
|
-
*/
|
|
21
|
-
import type { FormNode } from '../form-node';
|
|
22
|
-
import type { FormValue } from '../../types';
|
|
23
|
-
/**
|
|
24
|
-
* Реестр полей формы
|
|
25
|
-
*
|
|
26
|
-
* Предоставляет типобезопасный доступ к полям формы
|
|
27
|
-
* через Map-подобный интерфейс
|
|
28
|
-
*
|
|
29
|
-
* @template T Тип формы (объект)
|
|
30
|
-
*/
|
|
31
|
-
export declare class FieldRegistry<T> {
|
|
32
|
-
/**
|
|
33
|
-
* Внутреннее хранилище полей
|
|
34
|
-
* Map обеспечивает быструю lookup производительность O(1)
|
|
35
|
-
*/
|
|
36
|
-
private fields;
|
|
37
|
-
/**
|
|
38
|
-
* Установить поле в реестр
|
|
39
|
-
*
|
|
40
|
-
* @param key - Ключ поля (имя свойства в типе T)
|
|
41
|
-
* @param node - FormNode для этого поля
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
* ```typescript
|
|
45
|
-
* registry.set('email', new FieldNode({ value: '' }));
|
|
46
|
-
* ```
|
|
47
|
-
*/
|
|
48
|
-
set<K extends keyof T>(key: K, node: FormNode<T[K]>): void;
|
|
49
|
-
/**
|
|
50
|
-
* Получить поле из реестра
|
|
51
|
-
*
|
|
52
|
-
* @param key - Ключ поля
|
|
53
|
-
* @returns FormNode или undefined, если поле не найдено
|
|
54
|
-
*
|
|
55
|
-
* @example
|
|
56
|
-
* ```typescript
|
|
57
|
-
* const emailField = registry.get('email');
|
|
58
|
-
* if (emailField) {
|
|
59
|
-
* console.log(emailField.value.value);
|
|
60
|
-
* }
|
|
61
|
-
* ```
|
|
62
|
-
*/
|
|
63
|
-
get<K extends keyof T>(key: K): FormNode<T[K]> | undefined;
|
|
64
|
-
/**
|
|
65
|
-
* Проверить наличие поля в реестре
|
|
66
|
-
*
|
|
67
|
-
* @param key - Ключ поля
|
|
68
|
-
* @returns true если поле существует
|
|
69
|
-
*
|
|
70
|
-
* @example
|
|
71
|
-
* ```typescript
|
|
72
|
-
* if (registry.has('email')) {
|
|
73
|
-
* console.log('Email field exists');
|
|
74
|
-
* }
|
|
75
|
-
* ```
|
|
76
|
-
*/
|
|
77
|
-
has(key: keyof T): boolean;
|
|
78
|
-
/**
|
|
79
|
-
* Удалить поле из реестра
|
|
80
|
-
*
|
|
81
|
-
* @param key - Ключ поля
|
|
82
|
-
* @returns true если поле было удалено, false если поля не было
|
|
83
|
-
*
|
|
84
|
-
* @example
|
|
85
|
-
* ```typescript
|
|
86
|
-
* registry.delete('email');
|
|
87
|
-
* ```
|
|
88
|
-
*/
|
|
89
|
-
delete(key: keyof T): boolean;
|
|
90
|
-
/**
|
|
91
|
-
* Перебрать все поля
|
|
92
|
-
*
|
|
93
|
-
* @param callback - Функция обратного вызова для каждого поля
|
|
94
|
-
*
|
|
95
|
-
* @example
|
|
96
|
-
* ```typescript
|
|
97
|
-
* registry.forEach((field, key) => {
|
|
98
|
-
* console.log(`${key}: ${field.value.value}`);
|
|
99
|
-
* });
|
|
100
|
-
* ```
|
|
101
|
-
*/
|
|
102
|
-
forEach(callback: (field: FormNode<FormValue>, key: keyof T) => void): void;
|
|
103
|
-
/**
|
|
104
|
-
* Получить итератор значений (полей)
|
|
105
|
-
*
|
|
106
|
-
* @returns Итератор по всем полям
|
|
107
|
-
*
|
|
108
|
-
* @example
|
|
109
|
-
* ```typescript
|
|
110
|
-
* for (const field of registry.values()) {
|
|
111
|
-
* await field.validate();
|
|
112
|
-
* }
|
|
113
|
-
* ```
|
|
114
|
-
*/
|
|
115
|
-
values(): IterableIterator<FormNode<FormValue>>;
|
|
116
|
-
/**
|
|
117
|
-
* Получить итератор пар [ключ, значение]
|
|
118
|
-
*
|
|
119
|
-
* @returns Итератор по всем записям
|
|
120
|
-
*
|
|
121
|
-
* @example
|
|
122
|
-
* ```typescript
|
|
123
|
-
* for (const [key, field] of registry.entries()) {
|
|
124
|
-
* console.log(key, field.value.value);
|
|
125
|
-
* }
|
|
126
|
-
* ```
|
|
127
|
-
*/
|
|
128
|
-
entries(): IterableIterator<[keyof T, FormNode<FormValue>]>;
|
|
129
|
-
/**
|
|
130
|
-
* Получить итератор ключей полей
|
|
131
|
-
*
|
|
132
|
-
* @returns Итератор по всем ключам
|
|
133
|
-
*
|
|
134
|
-
* @example
|
|
135
|
-
* ```typescript
|
|
136
|
-
* const fieldNames = Array.from(registry.keys());
|
|
137
|
-
* // ['email', 'name', 'age']
|
|
138
|
-
* ```
|
|
139
|
-
*/
|
|
140
|
-
keys(): IterableIterator<keyof T>;
|
|
141
|
-
/**
|
|
142
|
-
* Получить количество полей
|
|
143
|
-
*
|
|
144
|
-
* @returns Количество зарегистрированных полей
|
|
145
|
-
*
|
|
146
|
-
* @example
|
|
147
|
-
* ```typescript
|
|
148
|
-
* console.log(`Form has ${registry.size()} fields`);
|
|
149
|
-
* ```
|
|
150
|
-
*/
|
|
151
|
-
size(): number;
|
|
152
|
-
/**
|
|
153
|
-
* Очистить все поля
|
|
154
|
-
*
|
|
155
|
-
* Удаляет все поля из реестра
|
|
156
|
-
*
|
|
157
|
-
* @example
|
|
158
|
-
* ```typescript
|
|
159
|
-
* registry.clear();
|
|
160
|
-
* console.log(registry.size()); // 0
|
|
161
|
-
* ```
|
|
162
|
-
*/
|
|
163
|
-
clear(): void;
|
|
164
|
-
/**
|
|
165
|
-
* Получить все поля как массив
|
|
166
|
-
*
|
|
167
|
-
* Полезно для операций, требующих работу с массивом
|
|
168
|
-
*
|
|
169
|
-
* @returns Массив всех полей
|
|
170
|
-
*
|
|
171
|
-
* @example
|
|
172
|
-
* ```typescript
|
|
173
|
-
* const allValid = registry.toArray().every(field => field.valid.value);
|
|
174
|
-
* ```
|
|
175
|
-
*/
|
|
176
|
-
toArray(): FormNode<FormValue>[];
|
|
177
|
-
/**
|
|
178
|
-
* Получить Map-представление реестра (readonly)
|
|
179
|
-
*
|
|
180
|
-
* Используйте для совместимости с существующим кодом
|
|
181
|
-
*
|
|
182
|
-
* @returns ReadonlyMap с полями
|
|
183
|
-
* @internal
|
|
184
|
-
*
|
|
185
|
-
* @example
|
|
186
|
-
* ```typescript
|
|
187
|
-
* const mapView = registry.asMap();
|
|
188
|
-
* ```
|
|
189
|
-
*/
|
|
190
|
-
asMap(): ReadonlyMap<keyof T, FormNode<FormValue>>;
|
|
191
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GroupNode modules
|
|
3
|
-
*
|
|
4
|
-
* Модульная структура для GroupNode:
|
|
5
|
-
* - FieldRegistry: Управление коллекцией полей
|
|
6
|
-
* - ProxyBuilder: Создание Proxy для типобезопасного доступа к полям
|
|
7
|
-
* - StateManager: Управление состоянием формы (signals)
|
|
8
|
-
*/
|
|
9
|
-
export { FieldRegistry } from './field-registry';
|
|
10
|
-
export { ProxyBuilder } from './proxy-builder';
|
|
11
|
-
export { StateManager } from './state-manager';
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ProxyBuilder - создание Proxy для типобезопасного доступа к полям GroupNode
|
|
3
|
-
*
|
|
4
|
-
* Извлечено из GroupNode для соблюдения SRP (Single Responsibility Principle).
|
|
5
|
-
* Отвечает только за создание Proxy с расширенной поддержкой операций.
|
|
6
|
-
*
|
|
7
|
-
* @template T Тип формы (объект)
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```typescript
|
|
11
|
-
* const fieldRegistry = new FieldRegistry<FormType>();
|
|
12
|
-
* const proxyBuilder = new ProxyBuilder(fieldRegistry);
|
|
13
|
-
* const proxy = proxyBuilder.build(groupNode);
|
|
14
|
-
*
|
|
15
|
-
* // Теперь можно обращаться к полям напрямую:
|
|
16
|
-
* console.log(proxy.email.value);
|
|
17
|
-
* console.log('email' in proxy); // true
|
|
18
|
-
* ```
|
|
19
|
-
*/
|
|
20
|
-
import type { GroupNode } from '../group-node';
|
|
21
|
-
import type { GroupNodeWithControls } from '../../types/group-node-proxy';
|
|
22
|
-
import type { FieldRegistry } from './field-registry';
|
|
23
|
-
/**
|
|
24
|
-
* Строитель Proxy для GroupNode
|
|
25
|
-
*
|
|
26
|
-
* Создает Proxy с поддержкой:
|
|
27
|
-
* - get: Прямой доступ к полям через точечную нотацию
|
|
28
|
-
* - set: Предупреждение о попытке прямой установки полей
|
|
29
|
-
* - has: Проверка существования поля ('email' in form)
|
|
30
|
-
* - ownKeys: Перечисление всех ключей (Object.keys(form))
|
|
31
|
-
* - getOwnPropertyDescriptor: Получение дескрипторов полей
|
|
32
|
-
*
|
|
33
|
-
* @template T Тип формы (объект)
|
|
34
|
-
*/
|
|
35
|
-
export declare class ProxyBuilder<T> {
|
|
36
|
-
private fieldRegistry;
|
|
37
|
-
/**
|
|
38
|
-
* @param fieldRegistry - Реестр полей для доступа к коллекции
|
|
39
|
-
*/
|
|
40
|
-
constructor(fieldRegistry: FieldRegistry<T>);
|
|
41
|
-
/**
|
|
42
|
-
* Создать Proxy для GroupNode
|
|
43
|
-
*
|
|
44
|
-
* Proxy позволяет обращаться к полям формы напрямую:
|
|
45
|
-
* - form.email вместо form.fields.get('email')
|
|
46
|
-
* - form.address.city вместо form.fields.get('address').fields.get('city')
|
|
47
|
-
*
|
|
48
|
-
* @param target - GroupNode для которого создается Proxy
|
|
49
|
-
* @returns Proxy с типобезопасным доступом к полям
|
|
50
|
-
*
|
|
51
|
-
* @example
|
|
52
|
-
* ```typescript
|
|
53
|
-
* const proxy = proxyBuilder.build(groupNode);
|
|
54
|
-
*
|
|
55
|
-
* // Доступ к полям
|
|
56
|
-
* console.log(proxy.email.value); // Работает!
|
|
57
|
-
* console.log(proxy.name.value); // Работает!
|
|
58
|
-
*
|
|
59
|
-
* // Доступ к методам GroupNode
|
|
60
|
-
* await proxy.validate(); // Работает!
|
|
61
|
-
* proxy.markAsTouched(); // Работает!
|
|
62
|
-
*
|
|
63
|
-
* // Проверка существования
|
|
64
|
-
* if ('email' in proxy) { ... }
|
|
65
|
-
*
|
|
66
|
-
* // Перечисление ключей
|
|
67
|
-
* Object.keys(proxy); // ['email', 'name', ...]
|
|
68
|
-
* ```
|
|
69
|
-
*/
|
|
70
|
-
build(target: GroupNode<T>): GroupNodeWithControls<T>;
|
|
71
|
-
}
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* StateManager - управление состоянием GroupNode
|
|
3
|
-
*
|
|
4
|
-
* Инкапсулирует всю логику создания и управления сигналами состояния:
|
|
5
|
-
* - Приватные сигналы (submitting, disabled, formErrors)
|
|
6
|
-
* - Публичные computed signals (value, valid, invalid, touched, dirty, pending, errors, status, submitting)
|
|
7
|
-
*
|
|
8
|
-
* Извлечено из GroupNode для соблюдения SRP (Single Responsibility Principle).
|
|
9
|
-
* Отвечает только за логику управления состоянием формы.
|
|
10
|
-
*
|
|
11
|
-
* @template T Тип формы (объект)
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```typescript
|
|
15
|
-
* class GroupNode {
|
|
16
|
-
* private stateManager: StateManager<T>;
|
|
17
|
-
*
|
|
18
|
-
* constructor(schema: FormSchema<T>) {
|
|
19
|
-
* this.fieldRegistry = new FieldRegistry<T>();
|
|
20
|
-
* // ... создание полей ...
|
|
21
|
-
* this.stateManager = new StateManager(this.fieldRegistry);
|
|
22
|
-
*
|
|
23
|
-
* // Доступ к computed signals
|
|
24
|
-
* this.value = this.stateManager.value;
|
|
25
|
-
* this.valid = this.stateManager.valid;
|
|
26
|
-
* }
|
|
27
|
-
* }
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
import type { ReadonlySignal } from '@preact/signals-core';
|
|
31
|
-
import type { ValidationError, FieldStatus } from '../../types';
|
|
32
|
-
import type { FieldRegistry } from './field-registry';
|
|
33
|
-
/**
|
|
34
|
-
* Менеджер состояния для GroupNode
|
|
35
|
-
*
|
|
36
|
-
* Создает и управляет всеми сигналами состояния формы:
|
|
37
|
-
* - value - значение формы как объект
|
|
38
|
-
* - valid/invalid - валидность формы
|
|
39
|
-
* - touched/dirty - пользовательское взаимодействие
|
|
40
|
-
* - pending - асинхронная валидация в процессе
|
|
41
|
-
* - errors - все ошибки валидации (form-level + field-level)
|
|
42
|
-
* - status - общий статус формы
|
|
43
|
-
* - submitting - флаг отправки формы
|
|
44
|
-
*
|
|
45
|
-
* @template T Тип формы (объект)
|
|
46
|
-
*/
|
|
47
|
-
export declare class StateManager<T> {
|
|
48
|
-
private readonly fieldRegistry;
|
|
49
|
-
/**
|
|
50
|
-
* Флаг отправки формы
|
|
51
|
-
* Устанавливается в true во время отправки формы на сервер
|
|
52
|
-
*/
|
|
53
|
-
private _submitting;
|
|
54
|
-
/**
|
|
55
|
-
* Флаг disabled состояния
|
|
56
|
-
* Если true, форма считается disabled
|
|
57
|
-
*/
|
|
58
|
-
private _disabled;
|
|
59
|
-
/**
|
|
60
|
-
* Form-level validation errors (не связанные с конкретным полем)
|
|
61
|
-
* Используется для server-side errors или кросс-полевой валидации
|
|
62
|
-
*/
|
|
63
|
-
private _formErrors;
|
|
64
|
-
/**
|
|
65
|
-
* Значение формы как объект
|
|
66
|
-
*
|
|
67
|
-
* Computed signal, который автоматически пересчитывается при изменении любого поля.
|
|
68
|
-
* Использует мемоизацию - если зависимости не изменились, вернет закешированный объект.
|
|
69
|
-
*
|
|
70
|
-
* @example
|
|
71
|
-
* ```typescript
|
|
72
|
-
* const form = new GroupNode({ email: { value: 'test@mail.com' } });
|
|
73
|
-
* console.log(form.value.value); // { email: 'test@mail.com' }
|
|
74
|
-
* ```
|
|
75
|
-
*/
|
|
76
|
-
readonly value: ReadonlySignal<T>;
|
|
77
|
-
/**
|
|
78
|
-
* Форма валидна?
|
|
79
|
-
*
|
|
80
|
-
* Computed signal. Форма валидна, если:
|
|
81
|
-
* - Нет form-level errors
|
|
82
|
-
* - Все поля валидны
|
|
83
|
-
*/
|
|
84
|
-
readonly valid: ReadonlySignal<boolean>;
|
|
85
|
-
/**
|
|
86
|
-
* Форма невалидна?
|
|
87
|
-
*
|
|
88
|
-
* Computed signal. Инверсия valid.
|
|
89
|
-
*/
|
|
90
|
-
readonly invalid: ReadonlySignal<boolean>;
|
|
91
|
-
/**
|
|
92
|
-
* Хотя бы одно поле touched?
|
|
93
|
-
*
|
|
94
|
-
* Computed signal. Возвращает true, если хотя бы одно поле было touched.
|
|
95
|
-
*/
|
|
96
|
-
readonly touched: ReadonlySignal<boolean>;
|
|
97
|
-
/**
|
|
98
|
-
* Хотя бы одно поле dirty?
|
|
99
|
-
*
|
|
100
|
-
* Computed signal. Возвращает true, если хотя бы одно поле изменилось.
|
|
101
|
-
*/
|
|
102
|
-
readonly dirty: ReadonlySignal<boolean>;
|
|
103
|
-
/**
|
|
104
|
-
* Асинхронная валидация в процессе?
|
|
105
|
-
*
|
|
106
|
-
* Computed signal. Возвращает true, если хотя бы одно поле находится в pending состоянии.
|
|
107
|
-
*/
|
|
108
|
-
readonly pending: ReadonlySignal<boolean>;
|
|
109
|
-
/**
|
|
110
|
-
* Все ошибки валидации
|
|
111
|
-
*
|
|
112
|
-
* Computed signal. Возвращает массив всех ошибок:
|
|
113
|
-
* - Form-level errors
|
|
114
|
-
* - Field-level errors (из всех вложенных полей)
|
|
115
|
-
*/
|
|
116
|
-
readonly errors: ReadonlySignal<ValidationError[]>;
|
|
117
|
-
/**
|
|
118
|
-
* Общий статус формы
|
|
119
|
-
*
|
|
120
|
-
* Computed signal. Возможные значения:
|
|
121
|
-
* - 'disabled' - форма disabled
|
|
122
|
-
* - 'pending' - асинхронная валидация в процессе
|
|
123
|
-
* - 'invalid' - форма невалидна
|
|
124
|
-
* - 'valid' - форма валидна
|
|
125
|
-
*/
|
|
126
|
-
readonly status: ReadonlySignal<FieldStatus>;
|
|
127
|
-
/**
|
|
128
|
-
* Форма в процессе отправки?
|
|
129
|
-
*
|
|
130
|
-
* Computed signal (обертка над _submitting для read-only доступа).
|
|
131
|
-
*/
|
|
132
|
-
readonly submitting: ReadonlySignal<boolean>;
|
|
133
|
-
/**
|
|
134
|
-
* Создать менеджер состояния
|
|
135
|
-
*
|
|
136
|
-
* @param fieldRegistry - реестр полей формы
|
|
137
|
-
*/
|
|
138
|
-
constructor(fieldRegistry: FieldRegistry<T>);
|
|
139
|
-
/**
|
|
140
|
-
* Установить form-level ошибки
|
|
141
|
-
*
|
|
142
|
-
* @param errors - массив ошибок валидации
|
|
143
|
-
*
|
|
144
|
-
* @example
|
|
145
|
-
* ```typescript
|
|
146
|
-
* // Server-side ошибки
|
|
147
|
-
* stateManager.setFormErrors([
|
|
148
|
-
* { code: 'server_error', message: 'Пользователь с таким email уже существует' }
|
|
149
|
-
* ]);
|
|
150
|
-
* ```
|
|
151
|
-
*/
|
|
152
|
-
setFormErrors(errors: ValidationError[]): void;
|
|
153
|
-
/**
|
|
154
|
-
* Очистить form-level ошибки
|
|
155
|
-
*/
|
|
156
|
-
clearFormErrors(): void;
|
|
157
|
-
/**
|
|
158
|
-
* Получить form-level ошибки
|
|
159
|
-
*/
|
|
160
|
-
getFormErrors(): ValidationError[];
|
|
161
|
-
/**
|
|
162
|
-
* Установить флаг submitting
|
|
163
|
-
*
|
|
164
|
-
* @param value - true если форма отправляется, false если нет
|
|
165
|
-
*
|
|
166
|
-
* @example
|
|
167
|
-
* ```typescript
|
|
168
|
-
* stateManager.setSubmitting(true);
|
|
169
|
-
* await api.submitForm(form.getValue());
|
|
170
|
-
* stateManager.setSubmitting(false);
|
|
171
|
-
* ```
|
|
172
|
-
*/
|
|
173
|
-
setSubmitting(value: boolean): void;
|
|
174
|
-
/**
|
|
175
|
-
* Установить флаг disabled
|
|
176
|
-
*
|
|
177
|
-
* @param value - true если форма disabled, false если нет
|
|
178
|
-
*/
|
|
179
|
-
setDisabled(value: boolean): void;
|
|
180
|
-
/**
|
|
181
|
-
* Получить флаг disabled
|
|
182
|
-
*/
|
|
183
|
-
isDisabled(): boolean;
|
|
184
|
-
}
|