@reformer/core 2.0.0-beta.7 → 2.0.0-beta.8

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 (147) hide show
  1. package/dist/behaviors/compute-from.d.ts +2 -0
  2. package/dist/behaviors/compute-from.js +31 -0
  3. package/dist/behaviors/copy-from.d.ts +2 -0
  4. package/dist/behaviors/copy-from.js +29 -0
  5. package/dist/behaviors/enable-when.d.ts +2 -0
  6. package/dist/behaviors/enable-when.js +25 -0
  7. package/dist/behaviors/reset-when.d.ts +2 -0
  8. package/dist/behaviors/reset-when.js +24 -0
  9. package/dist/behaviors/revalidate-when.d.ts +2 -0
  10. package/dist/behaviors/revalidate-when.js +18 -0
  11. package/dist/behaviors/sync-fields.d.ts +2 -0
  12. package/dist/behaviors/sync-fields.js +41 -0
  13. package/dist/behaviors/transform-value.d.ts +2 -0
  14. package/dist/behaviors/transform-value.js +45 -0
  15. package/dist/behaviors/watch-field.d.ts +2 -0
  16. package/dist/behaviors/watch-field.js +21 -0
  17. package/dist/behaviors.js +26 -19
  18. package/dist/core/behavior/behavior-context.d.ts +26 -12
  19. package/dist/core/behavior/behavior-registry.d.ts +15 -27
  20. package/dist/core/behavior/behaviors/compute-from.d.ts +50 -21
  21. package/dist/core/behavior/behaviors/copy-from.d.ts +39 -14
  22. package/dist/core/behavior/behaviors/enable-when.d.ts +88 -19
  23. package/dist/core/behavior/behaviors/reset-when.d.ts +31 -18
  24. package/dist/core/behavior/behaviors/revalidate-when.d.ts +40 -17
  25. package/dist/core/behavior/behaviors/sync-fields.d.ts +34 -14
  26. package/dist/core/behavior/behaviors/transform-value.d.ts +116 -44
  27. package/dist/core/behavior/behaviors/watch-field.d.ts +66 -21
  28. package/dist/core/behavior/compose-behavior.d.ts +2 -12
  29. package/dist/core/behavior/index.d.ts +0 -1
  30. package/dist/core/behavior/types.d.ts +2 -8
  31. package/dist/core/factories/node-factory.d.ts +6 -29
  32. package/dist/core/nodes/array-node.d.ts +11 -15
  33. package/dist/core/nodes/field-node.d.ts +43 -24
  34. package/dist/core/nodes/form-node.d.ts +18 -20
  35. package/dist/core/nodes/group-node.d.ts +25 -21
  36. package/dist/core/types/deep-schema.d.ts +2 -12
  37. package/dist/core/types/field-path.d.ts +1 -1
  38. package/dist/core/types/form-context.d.ts +26 -26
  39. package/dist/core/types/form-proxy.d.ts +1 -31
  40. package/dist/core/types/index.d.ts +16 -4
  41. package/dist/core/types/validation-schema.d.ts +3 -12
  42. package/dist/core/utils/abstract-registry.d.ts +74 -0
  43. package/dist/core/utils/aggregate-signals.d.ts +71 -0
  44. package/dist/core/utils/create-form.d.ts +1 -20
  45. package/dist/core/utils/error-handler.d.ts +1 -18
  46. package/dist/core/utils/field-path-navigator.d.ts +1 -1
  47. package/dist/core/utils/field-path.d.ts +23 -11
  48. package/dist/core/utils/form-observer.d.ts +176 -0
  49. package/dist/core/utils/form-proxy-builder.d.ts +25 -0
  50. package/dist/core/utils/form-submitter.d.ts +121 -0
  51. package/dist/core/utils/index.d.ts +8 -2
  52. package/dist/core/utils/registry-helpers.d.ts +0 -7
  53. package/dist/core/utils/safe-effect.d.ts +73 -0
  54. package/dist/core/utils/status-machine.d.ts +153 -0
  55. package/dist/core/utils/type-guards.d.ts +5 -23
  56. package/dist/core/utils/unique-id.d.ts +34 -7
  57. package/dist/core/validation/core/apply-when.d.ts +3 -9
  58. package/dist/core/validation/core/apply.d.ts +2 -13
  59. package/dist/core/validation/core/validate-async.d.ts +2 -8
  60. package/dist/core/validation/core/validate-tree.d.ts +0 -6
  61. package/dist/core/validation/core/validate.d.ts +1 -7
  62. package/dist/core/validation/index.d.ts +8 -2
  63. package/dist/core/validation/validate-form.d.ts +1 -38
  64. package/dist/core/validation/validation-applicator.d.ts +2 -21
  65. package/dist/core/validation/validation-context.d.ts +38 -14
  66. package/dist/core/validation/validation-registry.d.ts +11 -20
  67. package/dist/core/validation/validators/array-validators.d.ts +2 -12
  68. package/dist/core/validation/validators/date-utils.d.ts +26 -0
  69. package/dist/core/validation/validators/email.d.ts +2 -9
  70. package/dist/core/validation/validators/future-date.d.ts +35 -0
  71. package/dist/core/validation/validators/index.d.ts +7 -1
  72. package/dist/core/validation/validators/is-date.d.ts +36 -0
  73. package/dist/core/validation/validators/max-age.d.ts +36 -0
  74. package/dist/core/validation/validators/max-date.d.ts +36 -0
  75. package/dist/core/validation/validators/max-length.d.ts +3 -10
  76. package/dist/core/validation/validators/max.d.ts +3 -10
  77. package/dist/core/validation/validators/min-age.d.ts +36 -0
  78. package/dist/core/validation/validators/min-date.d.ts +36 -0
  79. package/dist/core/validation/validators/min-length.d.ts +3 -10
  80. package/dist/core/validation/validators/min.d.ts +3 -10
  81. package/dist/core/validation/validators/number.d.ts +2 -9
  82. package/dist/core/validation/validators/past-date.d.ts +35 -0
  83. package/dist/core/validation/validators/pattern.d.ts +2 -9
  84. package/dist/core/validation/validators/phone.d.ts +2 -9
  85. package/dist/core/validation/validators/required.d.ts +2 -9
  86. package/dist/core/validation/validators/url.d.ts +2 -9
  87. package/dist/date-utils-xUWFslTj.js +29 -0
  88. package/dist/field-path-DuKdGcIE.js +66 -0
  89. package/dist/hooks/types.d.ts +1 -1
  90. package/dist/hooks/useArrayLength.d.ts +31 -0
  91. package/dist/hooks/useFormControl.d.ts +4 -4
  92. package/dist/hooks/useFormControlValue.d.ts +2 -2
  93. package/dist/hooks/useHiddenCondition.d.ts +25 -0
  94. package/dist/hooks/useSignalSubscription.d.ts +1 -1
  95. package/dist/index-D25LsbRm.js +73 -0
  96. package/dist/index.d.ts +2 -0
  97. package/dist/index.js +1031 -714
  98. package/dist/registry-helpers-Bv_BJ1s-.js +615 -0
  99. package/dist/safe-effect-Dh8uw81c.js +20 -0
  100. package/dist/validate-C3XiA_zf.js +10 -0
  101. package/dist/validators/email.d.ts +2 -0
  102. package/dist/validators/email.js +13 -0
  103. package/dist/validators/future-date.d.ts +2 -0
  104. package/dist/validators/future-date.js +20 -0
  105. package/dist/validators/is-date.d.ts +2 -0
  106. package/dist/validators/is-date.js +12 -0
  107. package/dist/validators/max-age.d.ts +2 -0
  108. package/dist/validators/max-age.js +20 -0
  109. package/dist/validators/max-date.d.ts +2 -0
  110. package/dist/validators/max-date.js +20 -0
  111. package/dist/validators/max-length.d.ts +2 -0
  112. package/dist/validators/max-length.js +11 -0
  113. package/dist/validators/max.d.ts +2 -0
  114. package/dist/validators/max.js +11 -0
  115. package/dist/validators/min-age.d.ts +2 -0
  116. package/dist/validators/min-age.js +20 -0
  117. package/dist/validators/min-date.d.ts +2 -0
  118. package/dist/validators/min-date.js +20 -0
  119. package/dist/validators/min-length.d.ts +2 -0
  120. package/dist/validators/min-length.js +11 -0
  121. package/dist/validators/min.d.ts +2 -0
  122. package/dist/validators/min.js +11 -0
  123. package/dist/validators/number.d.ts +2 -0
  124. package/dist/validators/number.js +35 -0
  125. package/dist/validators/past-date.d.ts +2 -0
  126. package/dist/validators/past-date.js +20 -0
  127. package/dist/validators/pattern.d.ts +2 -0
  128. package/dist/validators/pattern.js +11 -0
  129. package/dist/validators/phone.d.ts +2 -0
  130. package/dist/validators/phone.js +35 -0
  131. package/dist/validators/required.d.ts +2 -0
  132. package/dist/validators/required.js +15 -0
  133. package/dist/validators/url.d.ts +2 -0
  134. package/dist/validators/url.js +19 -0
  135. package/dist/validators-BGsNOgT1.js +207 -0
  136. package/dist/validators.js +54 -29
  137. package/llms.txt +7878 -311
  138. package/package.json +83 -9
  139. package/dist/behaviors-DyPzh2-X.js +0 -508
  140. package/dist/core/behavior/create-field-path.d.ts +0 -7
  141. package/dist/core/context/form-context-impl.d.ts +0 -29
  142. package/dist/core/utils/debounce.d.ts +0 -160
  143. package/dist/core/utils/resources.d.ts +0 -41
  144. package/dist/core/validation/field-path.d.ts +0 -7
  145. package/dist/core/validation/validators/date.d.ts +0 -38
  146. package/dist/registry-helpers--8-OogF8.js +0 -477
  147. package/dist/validators-CWdzevnC.js +0 -397
@@ -1,397 +0,0 @@
1
- import { e as c, g as i, t as y, c as d, V as x, a as $ } from "./registry-helpers--8-OogF8.js";
2
- function m(r, e, a) {
3
- if (!r) return;
4
- const t = c(r);
5
- i().registerSync(t, e, a);
6
- }
7
- function V(r, e, a) {
8
- const t = c(r);
9
- i().registerAsync(t, e, a);
10
- }
11
- function b(r, e) {
12
- i().registerTree(r, e);
13
- }
14
- function D(r, e) {
15
- if (!Array.isArray(r) && !Array.isArray(e) && r && !("__key" in r) && !("__path" in r)) {
16
- e(r);
17
- return;
18
- }
19
- const a = (Array.isArray(r) ? r : [r]).filter(
20
- Boolean
21
- ), t = Array.isArray(e) ? e : [e];
22
- for (const n of a) {
23
- const s = y(n);
24
- for (const u of t)
25
- u(s);
26
- }
27
- }
28
- function N(r, e, a) {
29
- const t = c(r);
30
- i().enterCondition(t, e);
31
- try {
32
- const n = d();
33
- a(n);
34
- } finally {
35
- i().exitCondition();
36
- }
37
- }
38
- function R(r, e) {
39
- r && m(r, (a) => a == null || a === "" ? {
40
- code: "required",
41
- message: e?.message || "Поле обязательно для заполнения",
42
- params: e?.params
43
- } : typeof a == "boolean" && a !== !0 ? {
44
- code: "required",
45
- message: e?.message || "Поле обязательно для заполнения",
46
- params: e?.params
47
- } : null);
48
- }
49
- function C(r, e, a) {
50
- r && m(r, (t) => t == null ? null : t < e ? {
51
- code: "min",
52
- message: a?.message || `Минимальное значение: ${e}`,
53
- params: { min: e, actual: t, ...a?.params }
54
- } : null);
55
- }
56
- function L(r, e, a) {
57
- r && m(r, (t) => t == null ? null : t > e ? {
58
- code: "max",
59
- message: a?.message || `Максимальное значение: ${e}`,
60
- params: { max: e, actual: t, ...a?.params }
61
- } : null);
62
- }
63
- function A(r, e, a) {
64
- r && m(r, (t) => t && t.length < e ? {
65
- code: "minLength",
66
- message: a?.message || `Минимальная длина: ${e} символов`,
67
- params: { minLength: e, actualLength: t.length, ...a?.params }
68
- } : null);
69
- }
70
- function T(r, e, a) {
71
- r && m(r, (t) => t && t.length > e ? {
72
- code: "maxLength",
73
- message: a?.message || `Максимальная длина: ${e} символов`,
74
- params: { maxLength: e, actualLength: t.length, ...a?.params }
75
- } : null);
76
- }
77
- function P(r, e) {
78
- if (!r) return;
79
- const a = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
80
- m(r, (t) => t ? a.test(t) ? null : {
81
- code: "email",
82
- message: e?.message || "Неверный формат email",
83
- params: e?.params
84
- } : null);
85
- }
86
- function F(r, e, a) {
87
- r && m(r, (t) => t ? e.test(t) ? null : {
88
- code: "pattern",
89
- message: a?.message || "Значение не соответствует требуемому формату",
90
- params: { pattern: e.source, ...a?.params }
91
- } : null);
92
- }
93
- function I(r, e) {
94
- if (!r) return;
95
- const a = /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/i, t = /^https?:\/\/([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/i;
96
- m(r, (n) => n ? (e?.requireProtocol ? t : a).test(n) ? e?.allowedProtocols && e.allowedProtocols.length > 0 && !e.allowedProtocols.some(
97
- (g) => n.toLowerCase().startsWith(`${g}://`)
98
- ) ? {
99
- code: "url_protocol",
100
- message: e?.message || `URL должен использовать один из протоколов: ${e.allowedProtocols.join(", ")}`,
101
- params: { allowedProtocols: e.allowedProtocols, ...e?.params }
102
- } : null : {
103
- code: "url",
104
- message: e?.message || "Неверный формат URL",
105
- params: e?.params
106
- } : null);
107
- }
108
- function q(r, e) {
109
- if (!r) return;
110
- const a = e?.format || "any", t = {
111
- // Международный формат: +1234567890 или +1 234 567 8900
112
- international: /^\+?[1-9]\d{1,14}$/,
113
- // Российский формат: +7 (XXX) XXX-XX-XX, 8 (XXX) XXX-XX-XX, и вариации
114
- ru: /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/,
115
- // US формат: (123) 456-7890, 123-456-7890, 1234567890
116
- us: /^(\+?1)?[\s\-]?\(?[2-9]\d{2}\)?[\s\-]?\d{3}[\s\-]?\d{4}$/,
117
- // Любой формат: минимум 10 цифр с возможными разделителями
118
- any: /^[\+]?[(]?[0-9]{1,4}[)]?[-\s\.]?[(]?[0-9]{1,4}[)]?[-\s\.]?[0-9]{1,9}$/
119
- };
120
- m(r, (n) => {
121
- if (!n)
122
- return null;
123
- if (!t[a].test(n)) {
124
- const u = {
125
- international: "Введите телефон в международном формате (например, +1234567890)",
126
- ru: "Введите российский номер телефона (например, +7 900 123-45-67)",
127
- us: "Введите американский номер телефона (например, (123) 456-7890)",
128
- any: "Неверный формат телефона"
129
- };
130
- return {
131
- code: "phone",
132
- message: e?.message || u[a],
133
- params: { format: a, ...e?.params }
134
- };
135
- }
136
- return null;
137
- });
138
- }
139
- function z(r, e) {
140
- r && m(r, (a) => a == null ? null : typeof a != "number" || isNaN(a) ? {
141
- code: "number",
142
- message: e?.message || "Значение должно быть числом",
143
- params: e?.params
144
- } : e?.integer && !Number.isInteger(a) ? {
145
- code: "number_integer",
146
- message: e?.message || "Значение должно быть целым числом",
147
- params: e?.params
148
- } : e?.min !== void 0 && a < e.min ? {
149
- code: "number_min",
150
- message: e?.message || `Значение должно быть не менее ${e.min}`,
151
- params: { min: e.min, ...e?.params }
152
- } : e?.max !== void 0 && a > e.max ? {
153
- code: "number_max",
154
- message: e?.message || `Значение должно быть не более ${e.max}`,
155
- params: { max: e.max, ...e?.params }
156
- } : e?.multipleOf !== void 0 && a % e.multipleOf !== 0 ? {
157
- code: "number_multiple",
158
- message: e?.message || `Значение должно быть кратно ${e.multipleOf}`,
159
- params: { multipleOf: e.multipleOf, ...e?.params }
160
- } : e?.allowNegative === !1 && a < 0 ? {
161
- code: "number_negative",
162
- message: e?.message || "Отрицательные числа не допускаются",
163
- params: e?.params
164
- } : e?.allowZero === !1 && a === 0 ? {
165
- code: "number_zero",
166
- message: e?.message || "Ноль не допускается",
167
- params: e?.params
168
- } : null);
169
- }
170
- function j(r, e) {
171
- r && m(r, (a) => {
172
- if (!a)
173
- return null;
174
- let t;
175
- if (a instanceof Date)
176
- t = a;
177
- else if (typeof a == "string")
178
- t = new Date(a);
179
- else
180
- return {
181
- code: "date_invalid",
182
- message: e?.message || "Неверный формат даты",
183
- params: e?.params
184
- };
185
- if (isNaN(t.getTime()))
186
- return {
187
- code: "date_invalid",
188
- message: e?.message || "Неверный формат даты",
189
- params: e?.params
190
- };
191
- const n = /* @__PURE__ */ new Date();
192
- if (n.setHours(0, 0, 0, 0), e?.minDate) {
193
- const s = new Date(e.minDate);
194
- if (s.setHours(0, 0, 0, 0), t < s)
195
- return {
196
- code: "date_min",
197
- message: e?.message || `Дата должна быть не ранее ${s.toLocaleDateString()}`,
198
- params: { minDate: e.minDate, ...e?.params }
199
- };
200
- }
201
- if (e?.maxDate) {
202
- const s = new Date(e.maxDate);
203
- if (s.setHours(0, 0, 0, 0), t > s)
204
- return {
205
- code: "date_max",
206
- message: e?.message || `Дата должна быть не позднее ${s.toLocaleDateString()}`,
207
- params: { maxDate: e.maxDate, ...e?.params }
208
- };
209
- }
210
- if (e?.noFuture && t > n)
211
- return {
212
- code: "date_future",
213
- message: e?.message || "Дата не может быть в будущем",
214
- params: e?.params
215
- };
216
- if (e?.noPast && t < n)
217
- return {
218
- code: "date_past",
219
- message: e?.message || "Дата не может быть в прошлом",
220
- params: e?.params
221
- };
222
- if (e?.minAge !== void 0 || e?.maxAge !== void 0) {
223
- const s = Math.floor(
224
- (n.getTime() - t.getTime()) / 315576e5
225
- );
226
- if (e?.minAge !== void 0 && s < e.minAge)
227
- return {
228
- code: "date_min_age",
229
- message: e?.message || `Минимальный возраст: ${e.minAge} лет`,
230
- params: { minAge: e.minAge, currentAge: s, ...e?.params }
231
- };
232
- if (e?.maxAge !== void 0 && s > e.maxAge)
233
- return {
234
- code: "date_max_age",
235
- message: e?.message || `Максимальный возраст: ${e.maxAge} лет`,
236
- params: { maxAge: e.maxAge, currentAge: s, ...e?.params }
237
- };
238
- }
239
- return null;
240
- });
241
- }
242
- function B(r, e) {
243
- r && A(r, 1, {
244
- message: e?.message || "Массив не должен быть пустым",
245
- params: { minLength: 1, ...e?.params }
246
- });
247
- }
248
- function k(r, e) {
249
- if (!r) return;
250
- const a = c(r);
251
- i().registerArrayItemValidation(a, e);
252
- }
253
- function l(r) {
254
- return r == null ? !1 : typeof r == "object" && "value" in r && "setValue" in r && "getValue" in r && "validate" in r;
255
- }
256
- function h(r) {
257
- return r == null ? !1 : l(r) && "validators" in r && "asyncValidators" in r && // FieldNode имеет markAsTouched метод
258
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
259
- typeof r.markAsTouched == "function" && // У FieldNode нет fields или items
260
- !("fields" in r) && !("items" in r);
261
- }
262
- function _(r) {
263
- return r == null ? !1 : l(r) && "applyValidationSchema" in r && "applyBehaviorSchema" in r && "getFieldByPath" in r && // GroupNode НЕ имеет items/push/removeAt (это ArrayNode)
264
- !("items" in r) && !("push" in r) && !("removeAt" in r);
265
- }
266
- function p(r) {
267
- return r == null ? !1 : l(r) && "items" in r && "length" in r && "push" in r && "removeAt" in r && "at" in r && // eslint-disable-next-line @typescript-eslint/no-explicit-any
268
- typeof r.push == "function" && // eslint-disable-next-line @typescript-eslint/no-explicit-any
269
- typeof r.removeAt == "function";
270
- }
271
- function S(r) {
272
- return h(r) ? "FieldNode" : _(r) ? "GroupNode" : p(r) ? "ArrayNode" : l(r) ? "FormNode" : "Unknown";
273
- }
274
- function f(r) {
275
- return h(r) ? [r] : _(r) ? Array.from(r.getAllFields()).flatMap(f) : p(r) ? r.map((e) => f(e)).flat() : [];
276
- }
277
- async function M(r, e) {
278
- const a = new x();
279
- a.beginRegistration();
280
- let t = [], n = !1;
281
- try {
282
- const s = d();
283
- e(s), t = a.getCurrentContext()?.getValidators() || [], a.cancelRegistration(), n = !0, r.clearErrors();
284
- const g = f(r);
285
- return await Promise.all(g.map((w) => w.validate())), t.length > 0 && await r.applyContextualValidators(t), r.valid.value;
286
- } catch (s) {
287
- throw n || a.cancelRegistration(), s;
288
- }
289
- }
290
- class o {
291
- _form;
292
- /**
293
- * Форма с типизированным Proxy-доступом к полям
294
- */
295
- form;
296
- constructor(e) {
297
- this._form = e, this.form = e._proxyInstance || e.getProxy();
298
- }
299
- /**
300
- * Безопасно установить значение поля по строковому пути
301
- * Автоматически использует emitEvent: false для предотвращения циклов
302
- */
303
- setFieldValue(e, a) {
304
- const t = this._form.getFieldByPath(e);
305
- t && l(t) && t.setValue(a, { emitEvent: !1 });
306
- }
307
- }
308
- class E extends o {
309
- control;
310
- constructor(e, a, t) {
311
- super(e), this.control = t;
312
- }
313
- /**
314
- * Получить текущее значение поля (внутренний метод для validation-applicator)
315
- * @internal
316
- */
317
- value() {
318
- return this.control.value.value;
319
- }
320
- }
321
- class H extends o {
322
- constructor(e) {
323
- super(e);
324
- }
325
- }
326
- class U extends o {
327
- arrayValue;
328
- constructor(e, a, t) {
329
- super(e), this.arrayValue = t;
330
- }
331
- /**
332
- * Получить текущее значение массива (для валидатора)
333
- * @internal
334
- */
335
- value() {
336
- return this.arrayValue;
337
- }
338
- }
339
- const W = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
340
- __proto__: null,
341
- TreeValidationContextImpl: H,
342
- ValidationContextImpl: E,
343
- ValidationRegistry: x,
344
- apply: D,
345
- applyWhen: N,
346
- createFieldPath: d,
347
- date: j,
348
- email: P,
349
- extractKey: $,
350
- extractPath: c,
351
- max: L,
352
- maxLength: T,
353
- min: C,
354
- minLength: A,
355
- notEmpty: B,
356
- number: z,
357
- pattern: F,
358
- phone: q,
359
- required: R,
360
- toFieldPath: y,
361
- url: I,
362
- validate: m,
363
- validateAsync: V,
364
- validateForm: M,
365
- validateItems: k,
366
- validateTree: b
367
- }, Symbol.toStringTag, { value: "Module" }));
368
- export {
369
- U as A,
370
- H as T,
371
- E as V,
372
- p as a,
373
- W as b,
374
- l as c,
375
- _ as d,
376
- m as e,
377
- V as f,
378
- S as g,
379
- b as h,
380
- h as i,
381
- D as j,
382
- N as k,
383
- L as l,
384
- C as m,
385
- A as n,
386
- T as o,
387
- P as p,
388
- F as q,
389
- R as r,
390
- q as s,
391
- z as t,
392
- I as u,
393
- M as v,
394
- j as w,
395
- B as x,
396
- k as y
397
- };