@reformer/core 9.0.0-beta.2 → 9.1.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 (101) hide show
  1. package/dist/behaviors-node-BMOI2JJF.js +26 -0
  2. package/dist/behaviors-value-lCpqicfa.js +148 -0
  3. package/dist/behaviors.d.ts +2 -133
  4. package/dist/behaviors.js +29 -28
  5. package/dist/{core/utils → form}/aggregate-signals.d.ts +2 -2
  6. package/dist/form/behaviors-node.d.ts +55 -0
  7. package/dist/form/behaviors.d.ts +133 -0
  8. package/dist/{core/utils → form}/create-form.d.ts +5 -4
  9. package/dist/{core/utils → form}/error-handler.d.ts +1 -1
  10. package/dist/{core → form}/factories/node-factory.d.ts +1 -1
  11. package/dist/{core/utils → form}/form-proxy-builder.d.ts +2 -2
  12. package/dist/{hooks → form/hooks}/types.d.ts +1 -1
  13. package/dist/{hooks → form/hooks}/useArrayLength.d.ts +1 -1
  14. package/dist/{hooks → form/hooks}/useFormControl.d.ts +3 -3
  15. package/dist/{hooks → form/hooks}/useFormControlValue.d.ts +2 -2
  16. package/dist/form/index.d.ts +36 -0
  17. package/dist/{core → form}/nodes/array-node.d.ts +1 -1
  18. package/dist/{core → form}/nodes/field-node.d.ts +1 -1
  19. package/dist/{core → form}/nodes/form-node.d.ts +1 -1
  20. package/dist/{core → form}/nodes/group-node.d.ts +2 -2
  21. package/dist/{core → form}/nodes/model-array-node.d.ts +2 -2
  22. package/dist/{core/utils → form}/signal-node-registry.d.ts +1 -1
  23. package/dist/{core/utils → form}/status-machine.d.ts +1 -1
  24. package/dist/{core/utils → form}/type-guards.d.ts +5 -5
  25. package/dist/{core/types/index.d.ts → form/types/contracts.d.ts} +11 -90
  26. package/dist/form/types/index.d.ts +91 -0
  27. package/dist/{core → form}/types/schema-node.d.ts +1 -1
  28. package/dist/{core → form}/types/validation-schema.d.ts +1 -1
  29. package/dist/{core/model/validate-model.d.ts → form/validate-model-core.d.ts} +25 -25
  30. package/dist/form/validate-model.d.ts +27 -0
  31. package/dist/form/validators.d.ts +6 -0
  32. package/dist/form-model-C8Fi83k4.js +439 -0
  33. package/dist/index.d.ts +11 -16
  34. package/dist/index.js +663 -1016
  35. package/dist/{core/model/behaviors.d.ts → state/behaviors-value.d.ts} +0 -53
  36. package/dist/state/form-model.d.ts +26 -0
  37. package/dist/state/index.d.ts +31 -0
  38. package/dist/{core/utils → state}/safe-effect.d.ts +4 -4
  39. package/dist/{core/model → state}/types.d.ts +14 -11
  40. package/dist/state.d.ts +2 -0
  41. package/dist/state.js +19 -0
  42. package/dist/validators/email.d.ts +1 -1
  43. package/dist/validators/future-date.d.ts +1 -1
  44. package/dist/validators/integer.d.ts +1 -1
  45. package/dist/validators/is-date.d.ts +1 -1
  46. package/dist/validators/is-number.d.ts +1 -1
  47. package/dist/validators/max-age.d.ts +1 -1
  48. package/dist/validators/max-date.d.ts +1 -1
  49. package/dist/validators/max-length.d.ts +1 -1
  50. package/dist/validators/max.d.ts +1 -1
  51. package/dist/validators/min-age.d.ts +1 -1
  52. package/dist/validators/min-date.d.ts +1 -1
  53. package/dist/validators/min-length.d.ts +1 -1
  54. package/dist/validators/min.d.ts +1 -1
  55. package/dist/validators/multiple-of.d.ts +1 -1
  56. package/dist/validators/non-negative.d.ts +1 -1
  57. package/dist/validators/non-zero.d.ts +1 -1
  58. package/dist/validators/past-date.d.ts +1 -1
  59. package/dist/validators/pattern.d.ts +1 -1
  60. package/dist/validators/phone.d.ts +1 -1
  61. package/dist/validators/required.d.ts +1 -1
  62. package/dist/validators/url.d.ts +1 -1
  63. package/dist/validators.d.ts +6 -6
  64. package/llms.txt +161 -147
  65. package/package.json +5 -1
  66. package/dist/behaviors-Br4Im38V.js +0 -263
  67. package/dist/core/model/form-model.d.ts +0 -18
  68. package/dist/core/model/index.d.ts +0 -12
  69. package/dist/core/utils/index.d.ts +0 -18
  70. /package/dist/{core → form}/factories/index.d.ts +0 -0
  71. /package/dist/{core/utils → form}/form-submitter.d.ts +0 -0
  72. /package/dist/{hooks → form/hooks}/useSignalSubscription.d.ts +0 -0
  73. /package/dist/{core → form}/types/deep-schema.d.ts +0 -0
  74. /package/dist/{core → form}/types/form-proxy.d.ts +0 -0
  75. /package/dist/{core/utils → form}/unique-id.d.ts +0 -0
  76. /package/dist/{core → form}/validation/index.d.ts +0 -0
  77. /package/dist/{core → form}/validation/validators/date-utils.d.ts +0 -0
  78. /package/dist/{core → form}/validation/validators/email.d.ts +0 -0
  79. /package/dist/{core → form}/validation/validators/future-date.d.ts +0 -0
  80. /package/dist/{core → form}/validation/validators/index.d.ts +0 -0
  81. /package/dist/{core → form}/validation/validators/integer.d.ts +0 -0
  82. /package/dist/{core → form}/validation/validators/is-date.d.ts +0 -0
  83. /package/dist/{core → form}/validation/validators/is-number.d.ts +0 -0
  84. /package/dist/{core → form}/validation/validators/max-age.d.ts +0 -0
  85. /package/dist/{core → form}/validation/validators/max-date.d.ts +0 -0
  86. /package/dist/{core → form}/validation/validators/max-length.d.ts +0 -0
  87. /package/dist/{core → form}/validation/validators/max.d.ts +0 -0
  88. /package/dist/{core → form}/validation/validators/min-age.d.ts +0 -0
  89. /package/dist/{core → form}/validation/validators/min-date.d.ts +0 -0
  90. /package/dist/{core → form}/validation/validators/min-length.d.ts +0 -0
  91. /package/dist/{core → form}/validation/validators/min.d.ts +0 -0
  92. /package/dist/{core → form}/validation/validators/multiple-of.d.ts +0 -0
  93. /package/dist/{core → form}/validation/validators/non-negative.d.ts +0 -0
  94. /package/dist/{core → form}/validation/validators/non-zero.d.ts +0 -0
  95. /package/dist/{core → form}/validation/validators/past-date.d.ts +0 -0
  96. /package/dist/{core → form}/validation/validators/pattern.d.ts +0 -0
  97. /package/dist/{core → form}/validation/validators/phone.d.ts +0 -0
  98. /package/dist/{core → form}/validation/validators/required.d.ts +0 -0
  99. /package/dist/{core → form}/validation/validators/url.d.ts +0 -0
  100. /package/dist/{core/utils → state}/derived-registry.d.ts +0 -0
  101. /package/dist/{core/utils → state}/subscription-manager.d.ts +0 -0
@@ -48,59 +48,6 @@ export declare function copyFrom<T>(source: ReadonlySignal<T>, target: Signal<T>
48
48
  export declare function watchField<T>(source: ReadonlySignal<T>, cb: (value: T) => void, options?: {
49
49
  immediate?: boolean;
50
50
  }): BehaviorCleanup;
51
- /**
52
- * Условное включение поля (state-операция). Резолвит ноду по сигналу-цели через реестр
53
- * сигнал→нода (заполняется `createForm`) и вызывает `enable()`/`disable()` (+`reset()` при
54
- * `resetOnDisable`). `condition` реактивен (читает свои сигналы модели).
55
- *
56
- * Запись состояния отложена через `runOutsideEffect` (микротаск) для защиты от «Cycle detected».
57
- * ⚠️ Поле должно быть материализовано в форме (`createForm`) — иначе ноды в реестре нет (например,
58
- * элемент массива, который строится per-item).
59
- *
60
- * ⚠️ Если то же поле одновременно является целью `compute`/`computeFrom`, обязательно ограничь
61
- * compute тем же условием (`when`), что и это `enableWhen`. Механизмы не согласованы: `enableWhen`
62
- * работает со статус-машиной ноды (enable/disable/reset), а `compute` пишет `target.value` напрямую
63
- * в сигнал модели и проверяет только собственный `options.when` — состояние `disabled` он НЕ смотрит.
64
- * Поэтому при выключенном поле любое изменение зависимости compute молча заново заполнит его (а с
65
- * `resetOnDisable` — перезапишет только что сброшенное значение), и так как `getValue()`/`submit`
66
- * включают disabled-поля, мусор утечёт в payload. Это аналог правила #13 гайда add-behavior,
67
- * которое сегодня сформулировано только для `copyFrom`; для `compute` то же ограничение обязательно.
68
- *
69
- * @group Model
70
- * @example
71
- * ```typescript
72
- * enableWhen(model.$.propertyValue, () => model.loanType === 'mortgage', { resetOnDisable: true });
73
- *
74
- * // Поле-цель compute, которое ТАКЖЕ в resetOnDisable enableWhen: compute обязан нести тот же when,
75
- * // иначе initialPayment заново заполнится в выключенном состоянии и утечёт в submit.
76
- * compute(model.$.initialPayment, () => model.propertyValue * 0.2, {
77
- * when: () => model.loanType === 'mortgage',
78
- * });
79
- * ```
80
- */
81
- export declare function enableWhen(target: ReadonlySignal<unknown>, condition: () => boolean, options?: {
82
- resetOnDisable?: boolean;
83
- }): BehaviorCleanup;
84
- /**
85
- * Условное выключение поля (инверсия {@link enableWhen}). Резолвит ноду по сигналу-цели через реестр
86
- * сигнал→нода и вызывает `disable()`, когда `condition` истинно (+`reset()` при `resetOnDisable`).
87
- * `condition` реактивен (читает свои сигналы модели).
88
- *
89
- * @group Model
90
- * @param target Сигнал-цель поля (`model.$.<path>`).
91
- * @param condition Реактивное условие; при `true` поле выключается.
92
- * @param options.resetOnDisable Сбросить значение при выключении (по умолчанию `false`).
93
- * @returns Cleanup для отписки.
94
- *
95
- * @example
96
- * ```typescript
97
- * // Поле скидки недоступно, пока не выбран промо-тариф
98
- * disableWhen(model.$.discount, () => model.plan !== 'promo', { resetOnDisable: true });
99
- * ```
100
- */
101
- export declare function disableWhen(target: ReadonlySignal<unknown>, condition: () => boolean, options?: {
102
- resetOnDisable?: boolean;
103
- }): BehaviorCleanup;
104
51
  /**
105
52
  * Трансформация значения поля (идемпотентная): при изменении пишет `transformer(value)` обратно.
106
53
  * Запись отложена (`runOutsideEffect`) во избежание «Cycle detected» (эффект читает и пишет один сигнал).
@@ -0,0 +1,26 @@
1
+ import { FormModel } from './types';
2
+ /**
3
+ * Создать реактивную модель данных формы (слой M1).
4
+ *
5
+ * @group Model
6
+ * @param initial Начальные значения (объект). Определяют форму данных и initial-снимок.
7
+ * @returns {@link FormModel} с value-доступом, `$`-сигналами и API (get/set/patch/isDirty/reset/signalAt).
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * const model = createModel<{ email: string; profile: { name: string }; tags: string[] }>({
12
+ * email: '',
13
+ * profile: { name: '' },
14
+ * tags: [],
15
+ * });
16
+ * model.email = 'a@b.c';
17
+ * model.$.email.value; // 'a@b.c' (сигнал)
18
+ * // вложенная объект-группа — под-модель FormModel (value-доступ + `.$` + API):
19
+ * model.profile.name = 'Ada'; // value-запись
20
+ * model.$.profile.name.value; // 'Ada' (сигнал; ≡ model.profile.$.name у под-модели)
21
+ * model.profile.get(); // { name: 'Ada' }
22
+ * model.tags.push('x');
23
+ * model.get(); // { email: 'a@b.c', profile: { name: 'Ada' }, tags: ['x'] }
24
+ * ```
25
+ */
26
+ export declare function createModel<T extends object>(initial: T): FormModel<T>;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * `@reformer/core/state` — низкоуровневый реактивный **state-субстрат** (M1) и barrel модуля `state`.
3
+ *
4
+ * Это «прокси-объект с сигналами» и инструментарий для построения доменных модулей поверх него
5
+ * (form, table, …). Модуль СТРОГО реактивный: НИЧЕГО связанного с формами/валидацией/схемами здесь
6
+ * нет — только модель, value-операции, producer-флаг и утилиты субстрата. Граница state⇏form
7
+ * зафиксирована ESLint-правилом (`no-restricted-imports` на `src/state/**`).
8
+ *
9
+ * Реактивный рантайм (`signal/computed/effect/…`) живёт в отдельном subpath `@reformer/core/signals`
10
+ * (единый владелец `@preact/signals-core`) — импортируй его оттуда; здесь он НЕ реэкспортируется,
11
+ * чтобы зонтичный barrel `.` не разрастался рантаймом.
12
+ *
13
+ * Состав (реэкспорты — из тех же файлов, что использует зонтик `.`, поэтому `.` и `/state` — один
14
+ * module-инстанс: общий `derived`-WeakMap, единая идентичность `Signal`):
15
+ * - **модель** — `createModel` + типы `FormModel`/`ModelArray`/… + `PathAwareSignal`;
16
+ * - **value-операции** (реактивные правила) — `computeFrom`/`copyFrom`/`watchField`/`transformValue`/
17
+ * `resetWhen`/`syncFields`/`revalidateWhen`;
18
+ * - **producer-owned флаг** — `markDerived`/`isDerived`/`unmarkDerived`;
19
+ * - **утилиты субстрата** — `runOutsideEffect`/`safeCallback`/`safeDebouncedCallback`,
20
+ * `SubscriptionManager`.
21
+ *
22
+ * @group State
23
+ * @module state
24
+ */
25
+ export { createModel } from './form-model';
26
+ export type { FormModel, ModelArray, ModelObject, ModelValue, ModelSignals, ModelApi, PathAwareSignal, } from './types';
27
+ export { computeFrom, copyFrom, watchField, transformValue, resetWhen, syncFields, revalidateWhen, } from './behaviors-value';
28
+ export type { BehaviorCleanup } from './behaviors-value';
29
+ export { markDerived, isDerived, unmarkDerived } from './derived-registry';
30
+ export { runOutsideEffect, safeCallback, safeDebouncedCallback } from './safe-effect';
31
+ export { SubscriptionManager } from './subscription-manager';
@@ -5,13 +5,13 @@
5
5
  * которая возникает при модификации сигналов внутри effect.
6
6
  *
7
7
  * Отложенная запись ({@link runOutsideEffect}) откладывается на микротаск и при этом:
8
- * - маршрутизирует синхронные throws и async-rejection через {@link FormErrorHandler} вместо того,
8
+ * - маршрутизирует синхронные throws и async-rejection dev-логгером (logDeferError) вместо того,
9
9
  * чтобы они всплывали неперехваченными в точке микротаска / тонули как unhandledRejection;
10
10
  * - возвращает отменитель (canceller) для liveness — вызывающий может отменить ещё не выполненную
11
11
  * запись при dispose, чтобы она не сработала против снесённого узла/формы.
12
12
  *
13
13
  * NB: намеренно НЕ оборачиваем записи в `batch()`. Реципрокные guard'ы слоя данных (например
14
- * `syncFields` в {@link module:core/model/behaviors}) держат флаг «идёт синхронизация» и сбрасывают его
14
+ * `syncFields` в модуле state/behaviors-value) держат флаг «идёт синхронизация» и сбрасывают его
15
15
  * в `finally` ПОСЛЕ записи, полагаясь на то, что встречный эффект флашится СИНХРОННО во время записи
16
16
  * (вне batch). `batch()` отложил бы встречный флаш за пределы сброса флага и сломал бы эту защиту
17
17
  * (сходимость осталась бы за peek-guard'ом, но появились бы лишние круги). Коалесинг записей в один
@@ -49,7 +49,7 @@ export declare function safeCallback<TArgs extends unknown[]>(callback: (...args
49
49
  /**
50
50
  * Выполняет функцию вне контекста effect (отложенная запись на микротаск).
51
51
  *
52
- * Сбои fn (синхронный throw и async-rejection) маршрутизируются через {@link FormErrorHandler}, а не
52
+ * Сбои fn (синхронный throw и async-rejection) маршрутизируются dev-логгером (logDeferError), а не
53
53
  * всплывают неперехваченными. Возвращает отменитель: вызов до срабатывания микротаска отменяет запись
54
54
  * (liveness-охрана — не писать против снесённого узла при dispose в том же тике).
55
55
  *
@@ -73,7 +73,7 @@ export declare function runOutsideEffect(fn: () => void | Promise<void>): () =>
73
73
  *
74
74
  * `withDebounce` уже откладывает вызов (таймер) — этого достаточно для выхода из effect-контекста,
75
75
  * поэтому дополнительного `queueMicrotask` нет (устранён двойной defer). Сбои callback (в т.ч.
76
- * async-rejection) маршрутизируются через {@link FormErrorHandler}.
76
+ * async-rejection) маршрутизируются dev-логгером (logDeferError).
77
77
  *
78
78
  * @param callback - Функция для выполнения
79
79
  * @param withDebounce - Функция debounce обёртки из BehaviorRegistry
@@ -26,15 +26,17 @@ type ModelArrayItem<U> = NonNullable<U> extends ReadonlyArray<infer E> ? ModelAr
26
26
  * Значение поля в value-доступе модели:
27
27
  * - массив → {@link ModelArray}
28
28
  * - спец-объект (Date/File/Blob) → как есть
29
- * - объект → вложенный value-proxy
29
+ * - объект → под-модель {@link FormModel} (value-доступ + `.$`-сигналы + API get/set/patch/…);
30
+ * промоутится рантаймом (`makeFormModel`); сигналы идентичны `model.$.<path>`
30
31
  * - примитив → значение
31
32
  *
32
33
  * @group Model
33
34
  */
34
- export type ModelValue<V> = NonNullable<V> extends ReadonlyArray<infer U> ? ModelArray<U> : NonNullable<V> extends Opaque ? V : NonNullable<V> extends object ? ModelObject<NonNullable<V>> : V;
35
+ export type ModelValue<V> = NonNullable<V> extends ReadonlyArray<infer U> ? ModelArray<U> : NonNullable<V> extends Opaque ? V : NonNullable<V> extends object ? FormModel<NonNullable<V>> : V;
35
36
  /**
36
- * value-proxy объекта: поля доступны как обычные свойства (чтение реактивно
37
- * внутри `effect`/`computed`, запись — присваиванием).
37
+ * Карта value-полей объекта (value-половина {@link FormModel}): поля доступны как обычные свойства
38
+ * (чтение реактивно внутри `effect`/`computed`, запись — присваиванием). Вложенные объекты-поля
39
+ * резолвятся в под-модели {@link FormModel} (см. {@link ModelValue}), массивы — в {@link ModelArray}.
38
40
  *
39
41
  * @group Model
40
42
  */
@@ -99,7 +101,7 @@ type ModelSignalNode<V> = NonNullable<V> extends ReadonlyArray<infer U> ? {
99
101
  readonly [index: number]: ModelSignalNode<U>;
100
102
  } : NonNullable<V> extends Opaque ? PathAwareSignal<V> : NonNullable<V> extends object ? ModelSignals<NonNullable<V>> : PathAwareSignal<V>;
101
103
  /**
102
- * API уровня модели (доступно на корне и под-моделях элементов массива).
104
+ * API уровня модели (доступно на корне, под-моделях вложенных объектов-групп и элементов массива).
103
105
  *
104
106
  * ⚠️ Имена методов (`$`/`get`/`set`/`patch`/`isDirty`/`reset`/`signalAt`/`captureInitial`)
105
107
  * зарезервированы: одноимённое поле формы их затеняет (редкий краевой случай).
@@ -112,12 +114,11 @@ export interface ModelApi<T> {
112
114
  /** Снимок значений (без подписки) — для submit. */
113
115
  get(): T;
114
116
  /**
115
- * @deprecated Алиас {@link ModelApi.patch}: `set` выполняет то же частичное **слияние** —
116
- * обновляет только переданные ключи, отсутствующие НЕ трогает (это НЕ полная замена, вопреки
117
- * старому названию). Используйте `patch`; для замены с обнулением лишних полей делайте
118
- * `patch({ ...defaults, ...dto })` явно. Не меняет initial-снимок.
117
+ * Полная установка значений: принимает объект целиком (все ключи `T`) и записывает их в модель.
118
+ * Производными полями (цели `compute`) владеет compute — их значения из payload игнорируются.
119
+ * Не меняет initial-снимок. Для частичного обновления (только переданные ключи) — {@link ModelApi.patch}.
119
120
  */
120
- set(value: Partial<T>): void;
121
+ set(value: T): void;
121
122
  /**
122
123
  * Частичное слияние значений (load/patch с сервера): обновляет только переданные ключи,
123
124
  * отсутствующие ключи НЕ трогаются. Не меняет initial-снимок.
@@ -133,7 +134,9 @@ export interface ModelApi<T> {
133
134
  signalAt(path: string): PathAwareSignal<unknown> | undefined;
134
135
  }
135
136
  /**
136
- * FormModel — value-proxy объекта `T` + {@link ModelApi}.
137
+ * FormModel — под-модель объекта `T`: value-доступ ({@link ModelObject}) + `.$`-сигналы + {@link ModelApi}
138
+ * (get/set/patch/isDirty/reset/signalAt). Вложенные объекты-группы модели — тоже {@link FormModel}
139
+ * (доступны как `model.<group>`), поэтому `model.<group>.$.<field>` эквивалентно `model.$.<group>.<field>`.
137
140
  *
138
141
  * @group Model
139
142
  */
@@ -0,0 +1,2 @@
1
+ export * from './state/index'
2
+ export {}
package/dist/state.js ADDED
@@ -0,0 +1,19 @@
1
+ import { S as s, c as r } from "./form-model-C8Fi83k4.js";
2
+ import { c as o, a as t, i, m as d, r as l, b as m, d as n, e as f, f as u, s as b, t as p, u as k, w as v } from "./behaviors-value-lCpqicfa.js";
3
+ export {
4
+ s as SubscriptionManager,
5
+ o as computeFrom,
6
+ t as copyFrom,
7
+ r as createModel,
8
+ i as isDerived,
9
+ d as markDerived,
10
+ l as resetWhen,
11
+ m as revalidateWhen,
12
+ n as runOutsideEffect,
13
+ f as safeCallback,
14
+ u as safeDebouncedCallback,
15
+ b as syncFields,
16
+ p as transformValue,
17
+ k as unmarkDerived,
18
+ v as watchField
19
+ };
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/email'
1
+ export * from '../form/validation/validators/email'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/future-date'
1
+ export * from '../form/validation/validators/future-date'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/integer'
1
+ export * from '../form/validation/validators/integer'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/is-date'
1
+ export * from '../form/validation/validators/is-date'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/is-number'
1
+ export * from '../form/validation/validators/is-number'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/max-age'
1
+ export * from '../form/validation/validators/max-age'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/max-date'
1
+ export * from '../form/validation/validators/max-date'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/max-length'
1
+ export * from '../form/validation/validators/max-length'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/max'
1
+ export * from '../form/validation/validators/max'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/min-age'
1
+ export * from '../form/validation/validators/min-age'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/min-date'
1
+ export * from '../form/validation/validators/min-date'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/min-length'
1
+ export * from '../form/validation/validators/min-length'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/min'
1
+ export * from '../form/validation/validators/min'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/multiple-of'
1
+ export * from '../form/validation/validators/multiple-of'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/non-negative'
1
+ export * from '../form/validation/validators/non-negative'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/non-zero'
1
+ export * from '../form/validation/validators/non-zero'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/past-date'
1
+ export * from '../form/validation/validators/past-date'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/pattern'
1
+ export * from '../form/validation/validators/pattern'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/phone'
1
+ export * from '../form/validation/validators/phone'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/required'
1
+ export * from '../form/validation/validators/required'
2
2
  export {}
@@ -1,2 +1,2 @@
1
- export * from '../core/validation/validators/url'
1
+ export * from '../form/validation/validators/url'
2
2
  export {}
@@ -1,6 +1,6 @@
1
- /**
2
- * Re-export validators from the main index to ensure single module instance.
3
- * This prevents static registry isolation issues when consuming the library.
4
- */
5
- export { validators as default } from './index';
6
- export * from './core/validation';
1
+ export * from './form/validators'
2
+ export {}
3
+ import _default from './form/validators'
4
+ export default _default
5
+ export * from './form/validators'
6
+ export {}