@lehnihon/bit-form 2.2.6 → 2.2.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 (177) hide show
  1. package/README.md +80 -24
  2. package/dist/angular/index.cjs +1 -1
  3. package/dist/angular/index.cjs.map +1 -1
  4. package/dist/angular/index.d.cts +20 -20
  5. package/dist/angular/index.d.ts +20 -20
  6. package/dist/angular/index.js +1 -1
  7. package/dist/angular/index.js.map +1 -1
  8. package/dist/array-controller-B5bfXV1W.d.cts +23 -0
  9. package/dist/array-controller-Cx-DMH7Y.d.ts +23 -0
  10. package/dist/bus-B2VEKrPI.d.ts +19 -0
  11. package/dist/bus-ZLQeq4Vr.d.cts +19 -0
  12. package/dist/chunk-5NA2TFPG.js +1 -0
  13. package/dist/chunk-5NA2TFPG.js.map +1 -0
  14. package/dist/chunk-63OJBMKK.js +2 -0
  15. package/dist/chunk-63OJBMKK.js.map +1 -0
  16. package/dist/chunk-BSGJ3T5S.cjs +2 -0
  17. package/dist/chunk-BSGJ3T5S.cjs.map +1 -0
  18. package/dist/chunk-CPP7ELA5.js +2 -0
  19. package/dist/chunk-CPP7ELA5.js.map +1 -0
  20. package/dist/chunk-D7JQWF6V.cjs +2 -0
  21. package/dist/chunk-D7JQWF6V.cjs.map +1 -0
  22. package/dist/chunk-E2NZR44P.js +2 -0
  23. package/dist/chunk-E2NZR44P.js.map +1 -0
  24. package/dist/chunk-EQ55DKX2.js +2 -0
  25. package/dist/chunk-EQ55DKX2.js.map +1 -0
  26. package/dist/chunk-IV32WXCF.cjs +2 -0
  27. package/dist/chunk-IV32WXCF.cjs.map +1 -0
  28. package/dist/chunk-JC4R5WCC.js +2 -0
  29. package/dist/chunk-JC4R5WCC.js.map +1 -0
  30. package/dist/chunk-K5X37E3U.js +2 -0
  31. package/dist/chunk-K5X37E3U.js.map +1 -0
  32. package/dist/chunk-M6WBNHIT.cjs +2 -0
  33. package/dist/chunk-M6WBNHIT.cjs.map +1 -0
  34. package/dist/chunk-MFSQATNZ.cjs +2 -0
  35. package/dist/chunk-MFSQATNZ.cjs.map +1 -0
  36. package/dist/chunk-MFTWAFMG.cjs +2 -0
  37. package/dist/chunk-MFTWAFMG.cjs.map +1 -0
  38. package/dist/chunk-O5UPA33R.js +2 -0
  39. package/dist/chunk-O5UPA33R.js.map +1 -0
  40. package/dist/chunk-P2YWYBWG.cjs +2 -0
  41. package/dist/chunk-P2YWYBWG.cjs.map +1 -0
  42. package/dist/chunk-QKGTVKBU.cjs +2 -0
  43. package/dist/chunk-QKGTVKBU.cjs.map +1 -0
  44. package/dist/chunk-RD73EBSN.js +2 -0
  45. package/dist/chunk-RD73EBSN.js.map +1 -0
  46. package/dist/chunk-T2JRSWQU.cjs +2 -0
  47. package/dist/chunk-T2JRSWQU.cjs.map +1 -0
  48. package/dist/chunk-UQ3DSUWC.js +2 -0
  49. package/dist/chunk-UQ3DSUWC.js.map +1 -0
  50. package/dist/chunk-VZHG372Q.cjs +2 -0
  51. package/dist/chunk-VZHG372Q.cjs.map +1 -0
  52. package/dist/chunk-W2E5UIXT.js +2 -0
  53. package/dist/chunk-W2E5UIXT.js.map +1 -0
  54. package/dist/chunk-W5CLDRRE.cjs +1 -0
  55. package/dist/chunk-W5CLDRRE.cjs.map +1 -0
  56. package/dist/cli/index.cjs +22 -22
  57. package/dist/core/bindings.cjs +2 -0
  58. package/dist/core/bindings.cjs.map +1 -0
  59. package/dist/core/bindings.d.cts +81 -0
  60. package/dist/core/bindings.d.ts +81 -0
  61. package/dist/core/bindings.js +2 -0
  62. package/dist/core/bindings.js.map +1 -0
  63. package/dist/core/status.cjs +2 -0
  64. package/dist/core/status.cjs.map +1 -0
  65. package/dist/core/status.d.cts +44 -0
  66. package/dist/core/status.d.ts +44 -0
  67. package/dist/core/status.js +2 -0
  68. package/dist/core/status.js.map +1 -0
  69. package/dist/core/store.cjs +2 -0
  70. package/dist/core/store.cjs.map +1 -0
  71. package/dist/core/store.d.cts +84 -0
  72. package/dist/core/store.d.ts +84 -0
  73. package/dist/core/store.js +2 -0
  74. package/dist/core/store.js.map +1 -0
  75. package/dist/core/utils.cjs +2 -0
  76. package/dist/core/utils.cjs.map +1 -0
  77. package/dist/core/utils.d.cts +81 -0
  78. package/dist/core/utils.d.ts +81 -0
  79. package/dist/core/utils.js +2 -0
  80. package/dist/core/utils.js.map +1 -0
  81. package/dist/core.cjs +2 -0
  82. package/dist/core.cjs.map +1 -0
  83. package/dist/core.d.cts +14 -0
  84. package/dist/core.d.ts +14 -0
  85. package/dist/core.js +2 -0
  86. package/dist/core.js.map +1 -0
  87. package/dist/devtools/bridge.cjs +1 -1
  88. package/dist/devtools/bridge.cjs.map +1 -1
  89. package/dist/devtools/bridge.d.cts +5 -1
  90. package/dist/devtools/bridge.d.ts +5 -1
  91. package/dist/devtools/bridge.js +1 -1
  92. package/dist/devtools/bridge.js.map +1 -1
  93. package/dist/devtools/index.cjs +18 -18
  94. package/dist/devtools/index.cjs.map +1 -1
  95. package/dist/devtools/index.d.cts +27 -2
  96. package/dist/devtools/index.d.ts +27 -2
  97. package/dist/devtools/index.js +18 -18
  98. package/dist/devtools/index.js.map +1 -1
  99. package/dist/devtools/protocol.cjs +2 -0
  100. package/dist/devtools/protocol.cjs.map +1 -0
  101. package/dist/devtools/protocol.d.cts +54 -0
  102. package/dist/devtools/protocol.d.ts +54 -0
  103. package/dist/devtools/protocol.js +2 -0
  104. package/dist/devtools/protocol.js.map +1 -0
  105. package/dist/field-binding-B_OX3bjp.d.cts +25 -0
  106. package/dist/field-binding-MX6jVQbT.d.ts +25 -0
  107. package/dist/index.cjs +1 -1
  108. package/dist/index.cjs.map +1 -1
  109. package/dist/index.d.cts +9 -193
  110. package/dist/index.d.ts +9 -193
  111. package/dist/index.js +1 -1
  112. package/dist/meta-types-Bzmm21TP.d.cts +18 -0
  113. package/dist/meta-types-Bzmm21TP.d.ts +18 -0
  114. package/dist/react/index.cjs +1 -1
  115. package/dist/react/index.cjs.map +1 -1
  116. package/dist/react/index.d.cts +10 -7
  117. package/dist/react/index.d.ts +10 -7
  118. package/dist/react/index.js +1 -1
  119. package/dist/react/index.js.map +1 -1
  120. package/dist/react-native/index.cjs +1 -1
  121. package/dist/react-native/index.cjs.map +1 -1
  122. package/dist/react-native/index.d.cts +8 -5
  123. package/dist/react-native/index.d.ts +8 -5
  124. package/dist/react-native/index.js +1 -1
  125. package/dist/react-native/index.js.map +1 -1
  126. package/dist/resolvers/index.cjs +1 -1
  127. package/dist/resolvers/index.cjs.map +1 -1
  128. package/dist/resolvers/index.d.cts +2 -1
  129. package/dist/resolvers/index.d.ts +2 -1
  130. package/dist/resolvers/index.js +1 -1
  131. package/dist/resolvers/joi.d.cts +2 -1
  132. package/dist/resolvers/joi.d.ts +2 -1
  133. package/dist/resolvers/yup.d.cts +2 -1
  134. package/dist/resolvers/yup.d.ts +2 -1
  135. package/dist/resolvers/zod.d.cts +2 -1
  136. package/dist/resolvers/zod.d.ts +2 -1
  137. package/dist/store-api-types-D-ZHxzRy.d.cts +161 -0
  138. package/dist/store-api-types-DPi30jQF.d.ts +161 -0
  139. package/dist/{bus-B4zZmB9C.d.ts → types-CG5nYeRk.d.ts} +140 -41
  140. package/dist/{bus-BeAeZwWu.d.cts → types-D6LhF5GC.d.cts} +140 -41
  141. package/dist/{upload-EXnJLq8k.d.cts → upload-C2mpfhp1.d.cts} +1 -1
  142. package/dist/{upload-EXnJLq8k.d.ts → upload-C2mpfhp1.d.ts} +1 -1
  143. package/dist/{use-bit-persist-Dk3fUrds.d.ts → use-bit-persist-BTwy8kvA.d.ts} +14 -14
  144. package/dist/{use-bit-persist-D_gimC9A.d.cts → use-bit-persist-C2LHNTVv.d.cts} +14 -14
  145. package/dist/utils.cjs +2 -0
  146. package/dist/utils.cjs.map +1 -0
  147. package/dist/utils.d.cts +6 -0
  148. package/dist/utils.d.ts +6 -0
  149. package/dist/utils.js +2 -0
  150. package/dist/utils.js.map +1 -0
  151. package/dist/vue/index.cjs +1 -1
  152. package/dist/vue/index.cjs.map +1 -1
  153. package/dist/vue/index.d.cts +17 -18
  154. package/dist/vue/index.d.ts +17 -18
  155. package/dist/vue/index.js +1 -1
  156. package/dist/vue/index.js.map +1 -1
  157. package/package.json +48 -17
  158. package/dist/chunk-2CVKNPWX.js +0 -2
  159. package/dist/chunk-2CVKNPWX.js.map +0 -1
  160. package/dist/chunk-3EDD3V43.cjs +0 -2
  161. package/dist/chunk-3EDD3V43.cjs.map +0 -1
  162. package/dist/chunk-PX6WKENM.js +0 -2
  163. package/dist/chunk-PX6WKENM.js.map +0 -1
  164. package/dist/chunk-QWH2NBVB.js +0 -2
  165. package/dist/chunk-QWH2NBVB.js.map +0 -1
  166. package/dist/chunk-T3FR7D5V.js +0 -2
  167. package/dist/chunk-T3FR7D5V.js.map +0 -1
  168. package/dist/chunk-VQ7MK5VB.cjs +0 -2
  169. package/dist/chunk-VQ7MK5VB.cjs.map +0 -1
  170. package/dist/chunk-Y2ONHDRE.cjs +0 -2
  171. package/dist/chunk-Y2ONHDRE.cjs.map +0 -1
  172. package/dist/chunk-YCSWULEN.cjs +0 -2
  173. package/dist/chunk-YCSWULEN.cjs.map +0 -1
  174. package/dist/field-binding-BXw0Ku2c.d.cts +0 -12
  175. package/dist/field-binding-BXw0Ku2c.d.ts +0 -12
  176. package/dist/public-types-Cd9ai20P.d.cts +0 -97
  177. package/dist/public-types-DdZxD6Op.d.ts +0 -97
@@ -0,0 +1,44 @@
1
+ import { a as BitHistoryMetadata } from '../meta-types-Bzmm21TP.js';
2
+ import { S as ScopeStatus } from '../types-CG5nYeRk.js';
3
+ export { V as ValidateScopeResult } from '../types-CG5nYeRk.js';
4
+ import '../types-D8DgIUhJ.js';
5
+
6
+ /**
7
+ * Subconjunto relevante de BitHistoryMetadata para comparação de igualdade.
8
+ * Evita re-renders/updates desnecessários quando o estado de histórico não muda.
9
+ */
10
+ type HistoryMeta = Pick<BitHistoryMetadata, "canUndo" | "canRedo" | "historyIndex" | "historySize">;
11
+ /**
12
+ * Compara dois snapshots de metadata de histórico por valor.
13
+ * Retorna `true` quando todos os campos relevantes são idênticos,
14
+ * permitindo que os bindings de framework ignorem atualizações não relacionadas.
15
+ */
16
+ declare function isHistoryMetaEqual(a: HistoryMeta, b: HistoryMeta): boolean;
17
+ declare function readHistoryMetaSnapshot<T extends object>(store: {
18
+ read: {
19
+ getHistoryMetadata(): BitHistoryMetadata;
20
+ };
21
+ }): HistoryMeta;
22
+ declare function observeHistoryMetaSnapshot<T extends object>(store: {
23
+ read: {
24
+ getHistoryMetadata(): BitHistoryMetadata;
25
+ };
26
+ observe: {
27
+ subscribeHistoryMeta(listener: (meta: BitHistoryMetadata) => void): () => void;
28
+ };
29
+ }, listener: (meta: HistoryMeta) => void): () => void;
30
+
31
+ declare function areScopeErrorsEqual(currentErrors: Record<string, string>, nextErrors: Record<string, string>): boolean;
32
+ declare function isScopeStatusEqual(currentStatus: ScopeStatus, nextStatus: ScopeStatus): boolean;
33
+ declare function getScopeSubscriptionPaths(scopeFields: readonly string[]): string[];
34
+
35
+ declare function observeScopeStatusSnapshot(store: {
36
+ read: {
37
+ getScopeStatus(scopeName: string): ScopeStatus;
38
+ };
39
+ observe: {
40
+ subscribeScopeStatus(scopeName: string, listener: (status: ScopeStatus) => void): () => void;
41
+ };
42
+ }, scopeName: string, listener: (status: ScopeStatus) => void): () => void;
43
+
44
+ export { type HistoryMeta, ScopeStatus, areScopeErrorsEqual, getScopeSubscriptionPaths, isHistoryMetaEqual, isScopeStatusEqual, observeHistoryMetaSnapshot, observeScopeStatusSnapshot, readHistoryMetaSnapshot };
@@ -0,0 +1,2 @@
1
+ import{a as g}from"../chunk-W2E5UIXT.js";import{a,b,c,e as d,f as e,g as f}from"../chunk-EQ55DKX2.js";export{a as areScopeErrorsEqual,c as getScopeSubscriptionPaths,d as isHistoryMetaEqual,b as isScopeStatusEqual,f as observeHistoryMetaSnapshot,g as observeScopeStatusSnapshot,e as readHistoryMetaSnapshot};
2
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkVZHG372Qcjs = require('../chunk-VZHG372Q.cjs');require('../chunk-D7JQWF6V.cjs');require('../chunk-T2JRSWQU.cjs');exports.bitBus = _chunkVZHG372Qcjs.a; exports.createBitBus = _chunkVZHG372Qcjs.b; exports.createBitStore = _chunkVZHG372Qcjs.e; exports.createFrameworkStoreAdapter = _chunkVZHG372Qcjs.d; exports.extractFeatureSlice = _chunkVZHG372Qcjs.i; exports.extractObserveSlice = _chunkVZHG372Qcjs.g; exports.extractReadSlice = _chunkVZHG372Qcjs.f; exports.extractSlices = _chunkVZHG372Qcjs.j; exports.extractWriteSlice = _chunkVZHG372Qcjs.h; exports.resolveBitStoreForHooks = _chunkVZHG372Qcjs.c;
2
+ //# sourceMappingURL=store.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/core/store.cjs"],"names":[],"mappings":"AAAA,kIAAsD,iCAA8B,iCAA8B,qeAA0O","file":"/home/runner/work/bit-form/bit-form/dist/core/store.cjs"}
@@ -0,0 +1,84 @@
1
+ export { createBitStore, createFrameworkStoreAdapter, resolveBitStoreForHooks } from '../index.cjs';
2
+ import { e as BitStoreApi, g as BitStoreFeatureApi, h as BitStoreObserveSliceApi, i as BitStoreReadSliceApi, j as BitStoreWriteSliceApi } from '../store-api-types-D-ZHxzRy.cjs';
3
+ export { B as BitEqualityFn, a as BitFrameworkConfig, b as BitFrameworkStoreApi, c as BitSelector, d as BitSelectorSubscriptionOptions } from '../store-api-types-D-ZHxzRy.cjs';
4
+ export { B as BitFormMeta, a as BitHistoryMetadata, b as BitValidationOptions } from '../meta-types-Bzmm21TP.cjs';
5
+ export { B as BitAfterSubmitEvent, a as BitAfterValidateEvent, b as BitArrayItem, c as BitArrayPath, d as BitBeforeSubmitEvent, e as BitBeforeValidateEvent, f as BitBus, g as BitBusListener, h as BitBusStorePort, i as BitComputedFn, j as BitConfig, k as BitErrors, l as BitFieldChangeEvent, m as BitFieldChangeMeta, n as BitFieldConditional, o as BitFieldDefinition, p as BitFieldState, q as BitFieldValidation, r as BitFormGlobal, s as BitHistoryConfig, t as BitNormalizeFn, u as BitPath, v as BitPathValue, w as BitPersistConfig, x as BitPersistMetadata, y as BitPersistMode, z as BitPersistStorageAdapter, A as BitPlugin, C as BitPluginContext, D as BitPluginErrorEvent, E as BitPluginHooks, F as BitScheduler, G as BitState, H as BitSubmitResult, I as BitTouched, J as BitTransformFn, K as BitValidationConfig, L as DeepPartial, M as DevToolsOptions, S as ScopeStatus, V as ValidateScopeResult, N as ValidatorFn } from '../types-D6LhF5GC.cjs';
6
+ export { b as bitBus, c as createBitBus } from '../bus-ZLQeq4Vr.cjs';
7
+ import '../types-D8DgIUhJ.cjs';
8
+
9
+ /**
10
+ * Extracts the `read` slice from a BitStore instance.
11
+ *
12
+ * Use this to pass a read-only API to utility functions and services.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * function useFormValidation(read: BitStoreReadSliceApi<MyForm>) {
17
+ * const isValid = read.getIsValid();
18
+ * // ...
19
+ * }
20
+ *
21
+ * useFormValidation(extractReadSlice(store));
22
+ * ```
23
+ */
24
+ declare function extractReadSlice<T extends object>(store: BitStoreApi<T>): BitStoreReadSliceApi<T>;
25
+ /**
26
+ * Extracts the `observe` slice from a BitStore instance.
27
+ *
28
+ * Use this to pass an observation-only API to framework hooks and subscriptions.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * function useFormSubscribe(observe: BitStoreObserveSliceApi<MyForm>) {
33
+ * useEffect(() => observe.subscribe(handler), [observe]);
34
+ * }
35
+ *
36
+ * useFormSubscribe(extractObserveSlice(store));
37
+ * ```
38
+ */
39
+ declare function extractObserveSlice<T extends object>(store: BitStoreApi<T>): BitStoreObserveSliceApi<T>;
40
+ /**
41
+ * Extracts the `write` slice from a BitStore instance.
42
+ *
43
+ * Use this to pass a write-only API for form mutations.
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * function useFormActions(write: BitStoreWriteSliceApi<MyForm>) {
48
+ * const handleChange = (path: string, value: any) => {
49
+ * write.setField(path, value);
50
+ * };
51
+ * }
52
+ *
53
+ * useFormActions(extractWriteSlice(store));
54
+ * ```
55
+ */
56
+ declare function extractWriteSlice<T extends object>(store: BitStoreApi<T>): BitStoreWriteSliceApi<T>;
57
+ /**
58
+ * Extracts the `feature` slice from a BitStore instance.
59
+ *
60
+ * Use this to pass feature-specific APIs (validation, history, persistence, etc.)
61
+ *
62
+ * @example
63
+ * ```typescript
64
+ * function useFormValidation(feature: BitStoreFeatureApi<MyForm>) {
65
+ * const isValid = await feature.validate();
66
+ * }
67
+ *
68
+ * useFormValidation(extractFeatureSlice(store));
69
+ * ```
70
+ */
71
+ declare function extractFeatureSlice<T extends object>(store: BitStoreApi<T>): BitStoreFeatureApi<T>;
72
+ /**
73
+ * Extracts multiple slices at once for convenience.
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * const [readApi, writeApi] = extractSlices(store, ["read", "write"]);
78
+ * ```
79
+ */
80
+ declare function extractSlices<T extends object, K extends (keyof BitStoreApi<T>)[]>(store: BitStoreApi<T>, keys: readonly [...K]): {
81
+ [P in K[number]]: BitStoreApi<T>[P];
82
+ };
83
+
84
+ export { BitStoreApi, extractFeatureSlice, extractObserveSlice, extractReadSlice, extractSlices, extractWriteSlice };
@@ -0,0 +1,84 @@
1
+ export { createBitStore, createFrameworkStoreAdapter, resolveBitStoreForHooks } from '../index.js';
2
+ import { e as BitStoreApi, g as BitStoreFeatureApi, h as BitStoreObserveSliceApi, i as BitStoreReadSliceApi, j as BitStoreWriteSliceApi } from '../store-api-types-DPi30jQF.js';
3
+ export { B as BitEqualityFn, a as BitFrameworkConfig, b as BitFrameworkStoreApi, c as BitSelector, d as BitSelectorSubscriptionOptions } from '../store-api-types-DPi30jQF.js';
4
+ export { B as BitFormMeta, a as BitHistoryMetadata, b as BitValidationOptions } from '../meta-types-Bzmm21TP.js';
5
+ export { B as BitAfterSubmitEvent, a as BitAfterValidateEvent, b as BitArrayItem, c as BitArrayPath, d as BitBeforeSubmitEvent, e as BitBeforeValidateEvent, f as BitBus, g as BitBusListener, h as BitBusStorePort, i as BitComputedFn, j as BitConfig, k as BitErrors, l as BitFieldChangeEvent, m as BitFieldChangeMeta, n as BitFieldConditional, o as BitFieldDefinition, p as BitFieldState, q as BitFieldValidation, r as BitFormGlobal, s as BitHistoryConfig, t as BitNormalizeFn, u as BitPath, v as BitPathValue, w as BitPersistConfig, x as BitPersistMetadata, y as BitPersistMode, z as BitPersistStorageAdapter, A as BitPlugin, C as BitPluginContext, D as BitPluginErrorEvent, E as BitPluginHooks, F as BitScheduler, G as BitState, H as BitSubmitResult, I as BitTouched, J as BitTransformFn, K as BitValidationConfig, L as DeepPartial, M as DevToolsOptions, S as ScopeStatus, V as ValidateScopeResult, N as ValidatorFn } from '../types-CG5nYeRk.js';
6
+ export { b as bitBus, c as createBitBus } from '../bus-B2VEKrPI.js';
7
+ import '../types-D8DgIUhJ.js';
8
+
9
+ /**
10
+ * Extracts the `read` slice from a BitStore instance.
11
+ *
12
+ * Use this to pass a read-only API to utility functions and services.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * function useFormValidation(read: BitStoreReadSliceApi<MyForm>) {
17
+ * const isValid = read.getIsValid();
18
+ * // ...
19
+ * }
20
+ *
21
+ * useFormValidation(extractReadSlice(store));
22
+ * ```
23
+ */
24
+ declare function extractReadSlice<T extends object>(store: BitStoreApi<T>): BitStoreReadSliceApi<T>;
25
+ /**
26
+ * Extracts the `observe` slice from a BitStore instance.
27
+ *
28
+ * Use this to pass an observation-only API to framework hooks and subscriptions.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * function useFormSubscribe(observe: BitStoreObserveSliceApi<MyForm>) {
33
+ * useEffect(() => observe.subscribe(handler), [observe]);
34
+ * }
35
+ *
36
+ * useFormSubscribe(extractObserveSlice(store));
37
+ * ```
38
+ */
39
+ declare function extractObserveSlice<T extends object>(store: BitStoreApi<T>): BitStoreObserveSliceApi<T>;
40
+ /**
41
+ * Extracts the `write` slice from a BitStore instance.
42
+ *
43
+ * Use this to pass a write-only API for form mutations.
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * function useFormActions(write: BitStoreWriteSliceApi<MyForm>) {
48
+ * const handleChange = (path: string, value: any) => {
49
+ * write.setField(path, value);
50
+ * };
51
+ * }
52
+ *
53
+ * useFormActions(extractWriteSlice(store));
54
+ * ```
55
+ */
56
+ declare function extractWriteSlice<T extends object>(store: BitStoreApi<T>): BitStoreWriteSliceApi<T>;
57
+ /**
58
+ * Extracts the `feature` slice from a BitStore instance.
59
+ *
60
+ * Use this to pass feature-specific APIs (validation, history, persistence, etc.)
61
+ *
62
+ * @example
63
+ * ```typescript
64
+ * function useFormValidation(feature: BitStoreFeatureApi<MyForm>) {
65
+ * const isValid = await feature.validate();
66
+ * }
67
+ *
68
+ * useFormValidation(extractFeatureSlice(store));
69
+ * ```
70
+ */
71
+ declare function extractFeatureSlice<T extends object>(store: BitStoreApi<T>): BitStoreFeatureApi<T>;
72
+ /**
73
+ * Extracts multiple slices at once for convenience.
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * const [readApi, writeApi] = extractSlices(store, ["read", "write"]);
78
+ * ```
79
+ */
80
+ declare function extractSlices<T extends object, K extends (keyof BitStoreApi<T>)[]>(store: BitStoreApi<T>, keys: readonly [...K]): {
81
+ [P in K[number]]: BitStoreApi<T>[P];
82
+ };
83
+
84
+ export { BitStoreApi, extractFeatureSlice, extractObserveSlice, extractReadSlice, extractSlices, extractWriteSlice };
@@ -0,0 +1,2 @@
1
+ import{a,b,c,d,e,f,g,h,i,j}from"../chunk-UQ3DSUWC.js";import"../chunk-EQ55DKX2.js";import"../chunk-RD73EBSN.js";export{a as bitBus,b as createBitBus,e as createBitStore,d as createFrameworkStoreAdapter,i as extractFeatureSlice,g as extractObserveSlice,f as extractReadSlice,j as extractSlices,h as extractWriteSlice,c as resolveBitStoreForHooks};
2
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkM6WBNHITcjs = require('../chunk-M6WBNHIT.cjs');var _chunkT2JRSWQUcjs = require('../chunk-T2JRSWQU.cjs');exports.areFieldSnapshotsEqual = _chunkM6WBNHITcjs.b; exports.cleanPrefixedKeys = _chunkT2JRSWQUcjs.j; exports.createFieldStateSnapshot = _chunkM6WBNHITcjs.a; exports.deepClone = _chunkT2JRSWQUcjs.a; exports.deepEqual = _chunkT2JRSWQUcjs.d; exports.deepMerge = _chunkT2JRSWQUcjs.b; exports.deriveFieldMeta = _chunkM6WBNHITcjs.c; exports.extractServerErrors = _chunkT2JRSWQUcjs.m; exports.getDeepValue = _chunkT2JRSWQUcjs.f; exports.isValidationErrorShape = _chunkT2JRSWQUcjs.l; exports.setDeepValue = _chunkT2JRSWQUcjs.g; exports.valueEqual = _chunkT2JRSWQUcjs.c;
2
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/core/utils.cjs"],"names":[],"mappings":"AAAA,kIAAuD,yDAA8E,mjBAAoQ","file":"/home/runner/work/bit-form/bit-form/dist/core/utils.cjs"}
@@ -0,0 +1,81 @@
1
+ export { cleanPrefixedKeys, extractServerErrors, isValidationErrorShape } from '../utils.cjs';
2
+ import { p as BitFieldState } from '../types-D6LhF5GC.cjs';
3
+ import '../types-D8DgIUhJ.cjs';
4
+
5
+ declare function deepClone<T>(obj: T): T;
6
+ declare function deepMerge<T>(target: T, source: any): T;
7
+ declare function valueEqual(a: any, b: any): boolean;
8
+ declare function deepEqual(a: any, b: any): boolean;
9
+
10
+ declare function getDeepValue(obj: any, path: string): any;
11
+ declare function setDeepValue(obj: any, path: string, value: any): any;
12
+
13
+ /**
14
+ * Field State Snapshot Utilities
15
+ *
16
+ * Shared utilities for creating and managing field state snapshots across frameworks
17
+ * (React, Vue, Angular). Reduces code duplication while maintaining type safety.
18
+ */
19
+ /**
20
+ * Represents a stable snapshot of field state that can be compared for equality.
21
+ */
22
+ interface BitFieldSnapshot<TValue = any> {
23
+ value: TValue;
24
+ error: string | undefined;
25
+ touched: boolean;
26
+ isHidden: boolean;
27
+ isRequired: boolean;
28
+ isDirty: boolean;
29
+ isValidating: boolean;
30
+ }
31
+ /**
32
+ * Creates or reuses a field state snapshot with shallow equality checking.
33
+ *
34
+ * This function prevents unnecessary re-renders in frameworks like React by
35
+ * returning the same object reference when field state hasn't changed.
36
+ *
37
+ * @param nextState - The new field state from the store
38
+ * @param lastSnapshot - The previous snapshot (can be null on first call)
39
+ * @returns A stable snapshot object that can be used for equality comparison
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * const snapshot = createFieldStateSnapshot(store.getFieldState("email"), lastSnapshot);
44
+ * if (snapshot !== lastSnapshot) {
45
+ * // Field state changed, update component
46
+ * render(snapshot);
47
+ * }
48
+ * ```
49
+ */
50
+ declare function createFieldStateSnapshot<TValue = any>(nextState: {
51
+ value: TValue;
52
+ error: string | undefined;
53
+ touched: boolean;
54
+ isHidden: boolean;
55
+ isRequired: boolean;
56
+ isDirty: boolean;
57
+ isValidating: boolean;
58
+ }, lastSnapshot: BitFieldSnapshot<TValue> | null): BitFieldSnapshot<TValue>;
59
+ /**
60
+ * Deep comparison utility for field state snapshots.
61
+ * Useful for scenarios where shallow comparison isn't sufficient (e.g., object/array values).
62
+ *
63
+ * @param snapshotA - First snapshot
64
+ * @param snapshotB - Second snapshot
65
+ * @returns true if snapshots are deeply equal
66
+ */
67
+ declare function areFieldSnapshotsEqual(snapshotA: BitFieldSnapshot | null | undefined, snapshotB: BitFieldSnapshot | null | undefined): boolean;
68
+
69
+ interface BitDerivedFieldMeta {
70
+ error: string | undefined;
71
+ touched: boolean;
72
+ invalid: boolean;
73
+ isValidating: boolean;
74
+ isDirty: boolean;
75
+ isHidden: boolean;
76
+ isRequired: boolean;
77
+ hasError: boolean;
78
+ }
79
+ declare function deriveFieldMeta<T extends object, TValue>(state: Readonly<BitFieldState<T, TValue>>): BitDerivedFieldMeta;
80
+
81
+ export { type BitDerivedFieldMeta, type BitFieldSnapshot, areFieldSnapshotsEqual, createFieldStateSnapshot, deepClone, deepEqual, deepMerge, deriveFieldMeta, getDeepValue, setDeepValue, valueEqual };
@@ -0,0 +1,81 @@
1
+ export { cleanPrefixedKeys, extractServerErrors, isValidationErrorShape } from '../utils.js';
2
+ import { p as BitFieldState } from '../types-CG5nYeRk.js';
3
+ import '../types-D8DgIUhJ.js';
4
+
5
+ declare function deepClone<T>(obj: T): T;
6
+ declare function deepMerge<T>(target: T, source: any): T;
7
+ declare function valueEqual(a: any, b: any): boolean;
8
+ declare function deepEqual(a: any, b: any): boolean;
9
+
10
+ declare function getDeepValue(obj: any, path: string): any;
11
+ declare function setDeepValue(obj: any, path: string, value: any): any;
12
+
13
+ /**
14
+ * Field State Snapshot Utilities
15
+ *
16
+ * Shared utilities for creating and managing field state snapshots across frameworks
17
+ * (React, Vue, Angular). Reduces code duplication while maintaining type safety.
18
+ */
19
+ /**
20
+ * Represents a stable snapshot of field state that can be compared for equality.
21
+ */
22
+ interface BitFieldSnapshot<TValue = any> {
23
+ value: TValue;
24
+ error: string | undefined;
25
+ touched: boolean;
26
+ isHidden: boolean;
27
+ isRequired: boolean;
28
+ isDirty: boolean;
29
+ isValidating: boolean;
30
+ }
31
+ /**
32
+ * Creates or reuses a field state snapshot with shallow equality checking.
33
+ *
34
+ * This function prevents unnecessary re-renders in frameworks like React by
35
+ * returning the same object reference when field state hasn't changed.
36
+ *
37
+ * @param nextState - The new field state from the store
38
+ * @param lastSnapshot - The previous snapshot (can be null on first call)
39
+ * @returns A stable snapshot object that can be used for equality comparison
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * const snapshot = createFieldStateSnapshot(store.getFieldState("email"), lastSnapshot);
44
+ * if (snapshot !== lastSnapshot) {
45
+ * // Field state changed, update component
46
+ * render(snapshot);
47
+ * }
48
+ * ```
49
+ */
50
+ declare function createFieldStateSnapshot<TValue = any>(nextState: {
51
+ value: TValue;
52
+ error: string | undefined;
53
+ touched: boolean;
54
+ isHidden: boolean;
55
+ isRequired: boolean;
56
+ isDirty: boolean;
57
+ isValidating: boolean;
58
+ }, lastSnapshot: BitFieldSnapshot<TValue> | null): BitFieldSnapshot<TValue>;
59
+ /**
60
+ * Deep comparison utility for field state snapshots.
61
+ * Useful for scenarios where shallow comparison isn't sufficient (e.g., object/array values).
62
+ *
63
+ * @param snapshotA - First snapshot
64
+ * @param snapshotB - Second snapshot
65
+ * @returns true if snapshots are deeply equal
66
+ */
67
+ declare function areFieldSnapshotsEqual(snapshotA: BitFieldSnapshot | null | undefined, snapshotB: BitFieldSnapshot | null | undefined): boolean;
68
+
69
+ interface BitDerivedFieldMeta {
70
+ error: string | undefined;
71
+ touched: boolean;
72
+ invalid: boolean;
73
+ isValidating: boolean;
74
+ isDirty: boolean;
75
+ isHidden: boolean;
76
+ isRequired: boolean;
77
+ hasError: boolean;
78
+ }
79
+ declare function deriveFieldMeta<T extends object, TValue>(state: Readonly<BitFieldState<T, TValue>>): BitDerivedFieldMeta;
80
+
81
+ export { type BitDerivedFieldMeta, type BitFieldSnapshot, areFieldSnapshotsEqual, createFieldStateSnapshot, deepClone, deepEqual, deepMerge, deriveFieldMeta, getDeepValue, setDeepValue, valueEqual };
@@ -0,0 +1,2 @@
1
+ import{a as j,b as k,c as l}from"../chunk-63OJBMKK.js";import{a,b,c,d,f as e,g as f,j as g,l as h,m as i}from"../chunk-RD73EBSN.js";export{k as areFieldSnapshotsEqual,g as cleanPrefixedKeys,j as createFieldStateSnapshot,a as deepClone,d as deepEqual,b as deepMerge,l as deriveFieldMeta,i as extractServerErrors,e as getDeepValue,h as isValidationErrorShape,f as setDeepValue,c as valueEqual};
2
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/core.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-W5CLDRRE.cjs');var _chunkVZHG372Qcjs = require('./chunk-VZHG372Q.cjs');var _chunkMFTWAFMGcjs = require('./chunk-MFTWAFMG.cjs');var _chunkBSGJ3T5Scjs = require('./chunk-BSGJ3T5S.cjs');var _chunkD7JQWF6Vcjs = require('./chunk-D7JQWF6V.cjs');var _chunkM6WBNHITcjs = require('./chunk-M6WBNHIT.cjs');var _chunkT2JRSWQUcjs = require('./chunk-T2JRSWQU.cjs');var _chunkPFPGASVZcjs = require('./chunk-PFPGASVZ.cjs');exports.areFieldSnapshotsEqual = _chunkM6WBNHITcjs.b; exports.areScopeErrorsEqual = _chunkD7JQWF6Vcjs.a; exports.bitBus = _chunkVZHG372Qcjs.a; exports.cleanPrefixedKeys = _chunkT2JRSWQUcjs.j; exports.cleanupRegisteredField = _chunkMFTWAFMGcjs.j; exports.cleanupRegisteredPrefix = _chunkMFTWAFMGcjs.k; exports.createArrayBindingController = _chunkMFTWAFMGcjs.i; exports.createBitBus = _chunkVZHG372Qcjs.b; exports.createBitStore = _chunkVZHG372Qcjs.e; exports.createFieldStateSnapshot = _chunkM6WBNHITcjs.a; exports.createFrameworkFormBinding = _chunkMFTWAFMGcjs.g; exports.createFrameworkMaskedFieldBinding = _chunkMFTWAFMGcjs.h; exports.createFrameworkStoreAdapter = _chunkVZHG372Qcjs.d; exports.deepClone = _chunkT2JRSWQUcjs.a; exports.deepEqual = _chunkT2JRSWQUcjs.d; exports.deepMerge = _chunkT2JRSWQUcjs.b; exports.deriveFieldMeta = _chunkM6WBNHITcjs.c; exports.extractFeatureSlice = _chunkVZHG372Qcjs.i; exports.extractObserveSlice = _chunkVZHG372Qcjs.g; exports.extractReadSlice = _chunkVZHG372Qcjs.f; exports.extractServerErrors = _chunkT2JRSWQUcjs.m; exports.extractSlices = _chunkVZHG372Qcjs.j; exports.extractWriteSlice = _chunkVZHG372Qcjs.h; exports.formatMaskedValue = _chunkPFPGASVZcjs.b; exports.getDeepValue = _chunkT2JRSWQUcjs.f; exports.getScopeSubscriptionPaths = _chunkD7JQWF6Vcjs.c; exports.isBitFieldInputEventObject = _chunkPFPGASVZcjs.a; exports.isHistoryMetaEqual = _chunkD7JQWF6Vcjs.e; exports.isScopeStatusEqual = _chunkD7JQWF6Vcjs.b; exports.isValidationErrorShape = _chunkT2JRSWQUcjs.l; exports.observeFormMetaSnapshot = _chunkMFTWAFMGcjs.c; exports.observeHistoryMetaSnapshot = _chunkD7JQWF6Vcjs.g; exports.observePersistMetaSnapshot = _chunkMFTWAFMGcjs.f; exports.observeScopeStatusSnapshot = _chunkBSGJ3T5Scjs.a; exports.parseMaskedInput = _chunkPFPGASVZcjs.c; exports.readFormMetaSnapshot = _chunkMFTWAFMGcjs.a; exports.readHistoryMetaSnapshot = _chunkD7JQWF6Vcjs.f; exports.readPersistMetaSnapshot = _chunkMFTWAFMGcjs.d; exports.resolveBitStoreForHooks = _chunkVZHG372Qcjs.c; exports.setDeepValue = _chunkT2JRSWQUcjs.g; exports.subscribeFormMetaSnapshot = _chunkMFTWAFMGcjs.b; exports.subscribePersistMetaSnapshot = _chunkMFTWAFMGcjs.e; exports.valueEqual = _chunkT2JRSWQUcjs.c;
2
+ //# sourceMappingURL=core.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/core.cjs"],"names":[],"mappings":"AAAA,yGAA4B,wDAAwG,wDAA+G,wDAAyC,wDAA4E,wDAAuD,wDAA6E,wDAAuD,oqEAA+kC","file":"/home/runner/work/bit-form/bit-form/dist/core.cjs"}
@@ -0,0 +1,14 @@
1
+ export { createBitStore, createFrameworkStoreAdapter, resolveBitStoreForHooks } from './index.cjs';
2
+ export { extractFeatureSlice, extractObserveSlice, extractReadSlice, extractSlices, extractWriteSlice } from './core/store.cjs';
3
+ export { B as BitEqualityFn, a as BitFrameworkConfig, b as BitFrameworkStoreApi, c as BitSelector, d as BitSelectorSubscriptionOptions, e as BitStoreApi } from './store-api-types-D-ZHxzRy.cjs';
4
+ export { B as BitFormMeta, a as BitHistoryMetadata, b as BitValidationOptions } from './meta-types-Bzmm21TP.cjs';
5
+ export { B as BitAfterSubmitEvent, a as BitAfterValidateEvent, b as BitArrayItem, c as BitArrayPath, d as BitBeforeSubmitEvent, e as BitBeforeValidateEvent, f as BitBus, g as BitBusListener, h as BitBusStorePort, i as BitComputedFn, j as BitConfig, k as BitErrors, l as BitFieldChangeEvent, m as BitFieldChangeMeta, n as BitFieldConditional, o as BitFieldDefinition, p as BitFieldState, q as BitFieldValidation, r as BitFormGlobal, s as BitHistoryConfig, t as BitNormalizeFn, u as BitPath, v as BitPathValue, w as BitPersistConfig, x as BitPersistMetadata, y as BitPersistMode, z as BitPersistStorageAdapter, A as BitPlugin, C as BitPluginContext, D as BitPluginErrorEvent, E as BitPluginHooks, F as BitScheduler, G as BitState, H as BitSubmitResult, I as BitTouched, J as BitTransformFn, K as BitValidationConfig, L as DeepPartial, M as DevToolsOptions, S as ScopeStatus, V as ValidateScopeResult, N as ValidatorFn } from './types-D6LhF5GC.cjs';
6
+ export { b as bitBus, c as createBitBus } from './bus-ZLQeq4Vr.cjs';
7
+ export { cleanupRegisteredField, cleanupRegisteredPrefix, createFrameworkFormBinding, createFrameworkMaskedFieldBinding, observeFormMetaSnapshot, observePersistMetaSnapshot, readFormMetaSnapshot, readPersistMetaSnapshot, subscribeFormMetaSnapshot, subscribePersistMetaSnapshot } from './core/bindings.cjs';
8
+ export { B as BitArrayBindingController, a as BitArrayBindingField, c as createArrayBindingController } from './array-controller-B5bfXV1W.cjs';
9
+ export { B as BitFieldInputEvent, f as formatMaskedValue, i as isBitFieldInputEventObject, p as parseMaskedInput } from './field-binding-B_OX3bjp.cjs';
10
+ export { B as BitDeleteUploadFn, a as BitUploadFn, b as BitUploadResult } from './upload-C2mpfhp1.cjs';
11
+ export { HistoryMeta, areScopeErrorsEqual, getScopeSubscriptionPaths, isHistoryMetaEqual, isScopeStatusEqual, observeHistoryMetaSnapshot, observeScopeStatusSnapshot, readHistoryMetaSnapshot } from './core/status.cjs';
12
+ export { BitDerivedFieldMeta, BitFieldSnapshot, areFieldSnapshotsEqual, createFieldStateSnapshot, deepClone, deepEqual, deepMerge, deriveFieldMeta, getDeepValue, setDeepValue, valueEqual } from './core/utils.cjs';
13
+ export { cleanPrefixedKeys, extractServerErrors, isValidationErrorShape } from './utils.cjs';
14
+ import './types-D8DgIUhJ.cjs';
package/dist/core.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ export { createBitStore, createFrameworkStoreAdapter, resolveBitStoreForHooks } from './index.js';
2
+ export { extractFeatureSlice, extractObserveSlice, extractReadSlice, extractSlices, extractWriteSlice } from './core/store.js';
3
+ export { B as BitEqualityFn, a as BitFrameworkConfig, b as BitFrameworkStoreApi, c as BitSelector, d as BitSelectorSubscriptionOptions, e as BitStoreApi } from './store-api-types-DPi30jQF.js';
4
+ export { B as BitFormMeta, a as BitHistoryMetadata, b as BitValidationOptions } from './meta-types-Bzmm21TP.js';
5
+ export { B as BitAfterSubmitEvent, a as BitAfterValidateEvent, b as BitArrayItem, c as BitArrayPath, d as BitBeforeSubmitEvent, e as BitBeforeValidateEvent, f as BitBus, g as BitBusListener, h as BitBusStorePort, i as BitComputedFn, j as BitConfig, k as BitErrors, l as BitFieldChangeEvent, m as BitFieldChangeMeta, n as BitFieldConditional, o as BitFieldDefinition, p as BitFieldState, q as BitFieldValidation, r as BitFormGlobal, s as BitHistoryConfig, t as BitNormalizeFn, u as BitPath, v as BitPathValue, w as BitPersistConfig, x as BitPersistMetadata, y as BitPersistMode, z as BitPersistStorageAdapter, A as BitPlugin, C as BitPluginContext, D as BitPluginErrorEvent, E as BitPluginHooks, F as BitScheduler, G as BitState, H as BitSubmitResult, I as BitTouched, J as BitTransformFn, K as BitValidationConfig, L as DeepPartial, M as DevToolsOptions, S as ScopeStatus, V as ValidateScopeResult, N as ValidatorFn } from './types-CG5nYeRk.js';
6
+ export { b as bitBus, c as createBitBus } from './bus-B2VEKrPI.js';
7
+ export { cleanupRegisteredField, cleanupRegisteredPrefix, createFrameworkFormBinding, createFrameworkMaskedFieldBinding, observeFormMetaSnapshot, observePersistMetaSnapshot, readFormMetaSnapshot, readPersistMetaSnapshot, subscribeFormMetaSnapshot, subscribePersistMetaSnapshot } from './core/bindings.js';
8
+ export { B as BitArrayBindingController, a as BitArrayBindingField, c as createArrayBindingController } from './array-controller-Cx-DMH7Y.js';
9
+ export { B as BitFieldInputEvent, f as formatMaskedValue, i as isBitFieldInputEventObject, p as parseMaskedInput } from './field-binding-MX6jVQbT.js';
10
+ export { B as BitDeleteUploadFn, a as BitUploadFn, b as BitUploadResult } from './upload-C2mpfhp1.js';
11
+ export { HistoryMeta, areScopeErrorsEqual, getScopeSubscriptionPaths, isHistoryMetaEqual, isScopeStatusEqual, observeHistoryMetaSnapshot, observeScopeStatusSnapshot, readHistoryMetaSnapshot } from './core/status.js';
12
+ export { BitDerivedFieldMeta, BitFieldSnapshot, areFieldSnapshotsEqual, createFieldStateSnapshot, deepClone, deepEqual, deepMerge, deriveFieldMeta, getDeepValue, setDeepValue, valueEqual } from './core/utils.js';
13
+ export { cleanPrefixedKeys, extractServerErrors, isValidationErrorShape } from './utils.js';
14
+ import './types-D8DgIUhJ.js';
package/dist/core.js ADDED
@@ -0,0 +1,2 @@
1
+ import"./chunk-5NA2TFPG.js";import{a as j,b as k,c as r,d as s,e as t,f as u,g as v,h as w,i as x,j as y}from"./chunk-UQ3DSUWC.js";import{a as z,b as A,c as B,d as C,e as D,f as E,g as F,h as J,i as K,j as L,k as M}from"./chunk-E2NZR44P.js";import{a as N}from"./chunk-W2E5UIXT.js";import{a as l,b as m,c as n,e as o,f as p,g as q}from"./chunk-EQ55DKX2.js";import{a as O,b as P,c as Q}from"./chunk-63OJBMKK.js";import{a,b,c,d,f as e,g as f,j as g,l as h,m as i}from"./chunk-RD73EBSN.js";import{a as G,b as H,c as I}from"./chunk-3NUJVIAM.js";export{P as areFieldSnapshotsEqual,l as areScopeErrorsEqual,j as bitBus,g as cleanPrefixedKeys,L as cleanupRegisteredField,M as cleanupRegisteredPrefix,K as createArrayBindingController,k as createBitBus,t as createBitStore,O as createFieldStateSnapshot,F as createFrameworkFormBinding,J as createFrameworkMaskedFieldBinding,s as createFrameworkStoreAdapter,a as deepClone,d as deepEqual,b as deepMerge,Q as deriveFieldMeta,x as extractFeatureSlice,v as extractObserveSlice,u as extractReadSlice,i as extractServerErrors,y as extractSlices,w as extractWriteSlice,H as formatMaskedValue,e as getDeepValue,n as getScopeSubscriptionPaths,G as isBitFieldInputEventObject,o as isHistoryMetaEqual,m as isScopeStatusEqual,h as isValidationErrorShape,B as observeFormMetaSnapshot,q as observeHistoryMetaSnapshot,E as observePersistMetaSnapshot,N as observeScopeStatusSnapshot,I as parseMaskedInput,z as readFormMetaSnapshot,p as readHistoryMetaSnapshot,C as readPersistMetaSnapshot,r as resolveBitStoreForHooks,f as setDeepValue,A as subscribeFormMetaSnapshot,D as subscribePersistMetaSnapshot,c as valueEqual};
2
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkYCSWULENcjs = require('../chunk-YCSWULEN.cjs');var S=o=>{let e=typeof o.getState=="function"?o.getState():o,t=_optionalChain([o, 'optionalAccess', _ => _.getHistoryMetadata, 'optionalCall', _2 => _2()])||{canUndo:!1,canRedo:!1,historyIndex:-1,historySize:0};return{...e,_meta:{canUndo:t.canUndo,canRedo:t.canRedo,totalSteps:t.historySize,currentIndex:t.historyIndex}}},l=null,m=o=>{if(!o||typeof o!="object")return!1;let{storeId:e,action:t}=o;return typeof e=="string"&&(t==="undo"||t==="redo"||t==="reset")};function v(o){l&&(console.warn("[bit-form] Reiniciando ponte do DevTools (Fast Refresh detectado)."),l());let e=null,t=null,d,f=!1,u=()=>{f=!1,e=new WebSocket(o),e.onopen=()=>{console.log("[bit-form] \u{1F50C} Conectado ao CLI DevTools via WebSocket.");let i=Object.entries(_chunkYCSWULENcjs.j.stores);if(i.length>0){let n=i.reduce((r,[s,a])=>(r[s]=S(a),r),{});_optionalChain([e, 'optionalAccess', _3 => _3.send, 'call', _4 => _4(JSON.stringify({type:"STATE_UPDATE",payload:n}))])}t=_chunkYCSWULENcjs.j.subscribe((n,r)=>{if(_optionalChain([e, 'optionalAccess', _5 => _5.readyState])===WebSocket.OPEN){let s=_chunkYCSWULENcjs.j.stores[n];s&&e.send(JSON.stringify({type:"STATE_UPDATE",payload:{[n]:S(s)}}))}}),d=setInterval(()=>{_optionalChain([e, 'optionalAccess', _6 => _6.readyState])===WebSocket.OPEN&&e.send(JSON.stringify({type:"PING"}))},3e4)},e.onmessage=i=>{try{let n=JSON.parse(i.data);if(n.type==="ACTION"){if(!m(n.payload))return;let{storeId:r,action:s}=n.payload,a=_chunkYCSWULENcjs.j.stores[r];if(!a||typeof a!="object")return;let p=a[{undo:"undo",redo:"redo",reset:"reset"}[s]];typeof p=="function"&&p.call(a)}}catch(n){console.warn("[bit-form] Erro ao processar comando do CLI:",n)}},e.onclose=()=>{t&&t(),clearInterval(d),f?console.log("[bit-form] Ponte antiga encerrada com sucesso."):(console.log("[bit-form] Conex\xE3o perdida. Reconectando em 3s..."),setTimeout(u,3e3))}};u();let y=()=>{f=!0,t&&t(),clearInterval(d),e&&(e.readyState===WebSocket.OPEN||e.readyState===WebSocket.CONNECTING)&&e.close(),l=null};return l=y,y}exports.setupRemoteBridge = v;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkP2YWYBWGcjs = require('../chunk-P2YWYBWG.cjs');require('../chunk-QKGTVKBU.cjs');require('../chunk-W5CLDRRE.cjs');require('../chunk-VZHG372Q.cjs');require('../chunk-MFTWAFMG.cjs');require('../chunk-BSGJ3T5S.cjs');require('../chunk-D7JQWF6V.cjs');require('../chunk-M6WBNHIT.cjs');require('../chunk-T2JRSWQU.cjs');require('../chunk-PFPGASVZ.cjs');exports.setupRemoteBridge = _chunkP2YWYBWGcjs.c;
2
2
  //# sourceMappingURL=bridge.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/devtools/bridge.cjs","../../src/devtools/bridge.ts"],"names":["formatStoreState","instance","cleanState","historyMeta","activeBridgeCleanup","isDevToolsActionPayload","payload","storeId","action","setupRemoteBridge","url","socket","unsubscribeBus","heartbeatInterval","isIntentionalDisconnect","connect","storesEntries","bitBus","initialState","acc","id","store","_newState","storeInstance","event","message","method","e","cleanup"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/devtools/bridge.cjs","sourcesContent":[null,"import { bitBus } from \"bit-form/core\";\nimport type { DevToolsActionName, DevToolsActionPayload } from \"./types\";\n\nconst formatStoreState = (instance: any) => {\n const cleanState =\n typeof instance.getState === \"function\" ? instance.getState() : instance;\n\n const historyMeta = instance?.getHistoryMetadata?.() || {\n canUndo: false,\n canRedo: false,\n historyIndex: -1,\n historySize: 0,\n };\n\n return {\n ...cleanState,\n _meta: {\n canUndo: historyMeta.canUndo,\n canRedo: historyMeta.canRedo,\n totalSteps: historyMeta.historySize,\n currentIndex: historyMeta.historyIndex,\n },\n };\n};\n\nlet activeBridgeCleanup: (() => void) | null = null;\n\nconst isDevToolsActionPayload = (\n payload: unknown,\n): payload is DevToolsActionPayload => {\n if (!payload || typeof payload !== \"object\") return false;\n\n const { storeId, action } = payload as {\n storeId?: unknown;\n action?: unknown;\n };\n\n return (\n typeof storeId === \"string\" &&\n (action === \"undo\" || action === \"redo\" || action === \"reset\")\n );\n};\n\nexport function setupRemoteBridge(url: string) {\n if (activeBridgeCleanup) {\n console.warn(\n \"[bit-form] Reiniciando ponte do DevTools (Fast Refresh detectado).\",\n );\n activeBridgeCleanup();\n }\n\n let socket: WebSocket | null = null;\n let unsubscribeBus: (() => void) | null = null;\n let heartbeatInterval: ReturnType<typeof setInterval>;\n let isIntentionalDisconnect = false;\n\n const connect = () => {\n isIntentionalDisconnect = false;\n socket = new WebSocket(url);\n\n socket.onopen = () => {\n console.log(\"[bit-form] 🔌 Conectado ao CLI DevTools via WebSocket.\");\n\n const storesEntries = Object.entries(bitBus.stores);\n if (storesEntries.length > 0) {\n const initialState = storesEntries.reduce(\n (acc, [id, store]) => {\n acc[id] = formatStoreState(store);\n return acc;\n },\n {} as Record<string, any>,\n );\n\n socket?.send(\n JSON.stringify({ type: \"STATE_UPDATE\", payload: initialState }),\n );\n }\n\n unsubscribeBus = bitBus.subscribe((storeId, _newState) => {\n if (socket?.readyState === WebSocket.OPEN) {\n const storeInstance = bitBus.stores[storeId];\n if (storeInstance) {\n socket.send(\n JSON.stringify({\n type: \"STATE_UPDATE\",\n payload: { [storeId]: formatStoreState(storeInstance) },\n }),\n );\n }\n }\n });\n\n heartbeatInterval = setInterval(() => {\n if (socket?.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify({ type: \"PING\" }));\n }\n }, 30000);\n };\n\n socket.onmessage = (event) => {\n try {\n const message = JSON.parse(event.data) as {\n type?: unknown;\n payload?: unknown;\n };\n\n if (message.type === \"ACTION\") {\n if (!isDevToolsActionPayload(message.payload)) {\n return;\n }\n\n const { storeId, action } = message.payload;\n\n const store = bitBus.stores[storeId];\n\n if (!store || typeof store !== \"object\") {\n return;\n }\n\n const methodByAction: Record<DevToolsActionName, string> = {\n undo: \"undo\",\n redo: \"redo\",\n reset: \"reset\",\n };\n\n const method = (store as Record<string, unknown>)[\n methodByAction[action]\n ];\n if (typeof method === \"function\") {\n (method as () => void).call(store);\n }\n }\n } catch (e) {\n console.warn(\"[bit-form] Erro ao processar comando do CLI:\", e);\n }\n };\n\n socket.onclose = () => {\n if (unsubscribeBus) unsubscribeBus();\n clearInterval(heartbeatInterval);\n\n if (!isIntentionalDisconnect) {\n console.log(\"[bit-form] Conexão perdida. Reconectando em 3s...\");\n setTimeout(connect, 3000);\n } else {\n console.log(\"[bit-form] Ponte antiga encerrada com sucesso.\");\n }\n };\n };\n\n connect();\n\n const cleanup = () => {\n isIntentionalDisconnect = true;\n\n if (unsubscribeBus) unsubscribeBus();\n clearInterval(heartbeatInterval);\n if (\n socket &&\n (socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING)\n ) {\n socket.close();\n }\n activeBridgeCleanup = null;\n };\n\n activeBridgeCleanup = cleanup;\n\n return cleanup;\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/devtools/bridge.cjs"],"names":[],"mappings":"AAAA,kIAAyC,iCAA8B,iCAA8B,iCAA8B,iCAA8B,iCAA8B,iCAA8B,iCAA8B,iCAA8B,iCAA8B,gDAA+B","file":"/home/runner/work/bit-form/bit-form/dist/devtools/bridge.cjs"}
@@ -1,3 +1,7 @@
1
- declare function setupRemoteBridge(url: string): () => void;
1
+ import { f as BitBus } from '../types-D6LhF5GC.cjs';
2
+ import '../bus-ZLQeq4Vr.cjs';
3
+ import '../types-D8DgIUhJ.cjs';
4
+
5
+ declare function setupRemoteBridge(url: string, bus?: BitBus): () => void;
2
6
 
3
7
  export { setupRemoteBridge };
@@ -1,3 +1,7 @@
1
- declare function setupRemoteBridge(url: string): () => void;
1
+ import { f as BitBus } from '../types-CG5nYeRk.js';
2
+ import '../bus-B2VEKrPI.js';
3
+ import '../types-D8DgIUhJ.js';
4
+
5
+ declare function setupRemoteBridge(url: string, bus?: BitBus): () => void;
2
6
 
3
7
  export { setupRemoteBridge };
@@ -1,2 +1,2 @@
1
- import{j as c}from"../chunk-PX6WKENM.js";var S=o=>{let e=typeof o.getState=="function"?o.getState():o,t=o?.getHistoryMetadata?.()||{canUndo:!1,canRedo:!1,historyIndex:-1,historySize:0};return{...e,_meta:{canUndo:t.canUndo,canRedo:t.canRedo,totalSteps:t.historySize,currentIndex:t.historyIndex}}},l=null,m=o=>{if(!o||typeof o!="object")return!1;let{storeId:e,action:t}=o;return typeof e=="string"&&(t==="undo"||t==="redo"||t==="reset")};function v(o){l&&(console.warn("[bit-form] Reiniciando ponte do DevTools (Fast Refresh detectado)."),l());let e=null,t=null,d,f=!1,u=()=>{f=!1,e=new WebSocket(o),e.onopen=()=>{console.log("[bit-form] \u{1F50C} Conectado ao CLI DevTools via WebSocket.");let i=Object.entries(c.stores);if(i.length>0){let n=i.reduce((r,[s,a])=>(r[s]=S(a),r),{});e?.send(JSON.stringify({type:"STATE_UPDATE",payload:n}))}t=c.subscribe((n,r)=>{if(e?.readyState===WebSocket.OPEN){let s=c.stores[n];s&&e.send(JSON.stringify({type:"STATE_UPDATE",payload:{[n]:S(s)}}))}}),d=setInterval(()=>{e?.readyState===WebSocket.OPEN&&e.send(JSON.stringify({type:"PING"}))},3e4)},e.onmessage=i=>{try{let n=JSON.parse(i.data);if(n.type==="ACTION"){if(!m(n.payload))return;let{storeId:r,action:s}=n.payload,a=c.stores[r];if(!a||typeof a!="object")return;let p=a[{undo:"undo",redo:"redo",reset:"reset"}[s]];typeof p=="function"&&p.call(a)}}catch(n){console.warn("[bit-form] Erro ao processar comando do CLI:",n)}},e.onclose=()=>{t&&t(),clearInterval(d),f?console.log("[bit-form] Ponte antiga encerrada com sucesso."):(console.log("[bit-form] Conex\xE3o perdida. Reconectando em 3s..."),setTimeout(u,3e3))}};u();let y=()=>{f=!0,t&&t(),clearInterval(d),e&&(e.readyState===WebSocket.OPEN||e.readyState===WebSocket.CONNECTING)&&e.close(),l=null};return l=y,y}export{v as setupRemoteBridge};
1
+ import{c as a}from"../chunk-JC4R5WCC.js";import"../chunk-K5X37E3U.js";import"../chunk-5NA2TFPG.js";import"../chunk-UQ3DSUWC.js";import"../chunk-E2NZR44P.js";import"../chunk-W2E5UIXT.js";import"../chunk-EQ55DKX2.js";import"../chunk-63OJBMKK.js";import"../chunk-RD73EBSN.js";import"../chunk-3NUJVIAM.js";export{a as setupRemoteBridge};
2
2
  //# sourceMappingURL=bridge.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/devtools/bridge.ts"],"sourcesContent":["import { bitBus } from \"bit-form/core\";\nimport type { DevToolsActionName, DevToolsActionPayload } from \"./types\";\n\nconst formatStoreState = (instance: any) => {\n const cleanState =\n typeof instance.getState === \"function\" ? instance.getState() : instance;\n\n const historyMeta = instance?.getHistoryMetadata?.() || {\n canUndo: false,\n canRedo: false,\n historyIndex: -1,\n historySize: 0,\n };\n\n return {\n ...cleanState,\n _meta: {\n canUndo: historyMeta.canUndo,\n canRedo: historyMeta.canRedo,\n totalSteps: historyMeta.historySize,\n currentIndex: historyMeta.historyIndex,\n },\n };\n};\n\nlet activeBridgeCleanup: (() => void) | null = null;\n\nconst isDevToolsActionPayload = (\n payload: unknown,\n): payload is DevToolsActionPayload => {\n if (!payload || typeof payload !== \"object\") return false;\n\n const { storeId, action } = payload as {\n storeId?: unknown;\n action?: unknown;\n };\n\n return (\n typeof storeId === \"string\" &&\n (action === \"undo\" || action === \"redo\" || action === \"reset\")\n );\n};\n\nexport function setupRemoteBridge(url: string) {\n if (activeBridgeCleanup) {\n console.warn(\n \"[bit-form] Reiniciando ponte do DevTools (Fast Refresh detectado).\",\n );\n activeBridgeCleanup();\n }\n\n let socket: WebSocket | null = null;\n let unsubscribeBus: (() => void) | null = null;\n let heartbeatInterval: ReturnType<typeof setInterval>;\n let isIntentionalDisconnect = false;\n\n const connect = () => {\n isIntentionalDisconnect = false;\n socket = new WebSocket(url);\n\n socket.onopen = () => {\n console.log(\"[bit-form] 🔌 Conectado ao CLI DevTools via WebSocket.\");\n\n const storesEntries = Object.entries(bitBus.stores);\n if (storesEntries.length > 0) {\n const initialState = storesEntries.reduce(\n (acc, [id, store]) => {\n acc[id] = formatStoreState(store);\n return acc;\n },\n {} as Record<string, any>,\n );\n\n socket?.send(\n JSON.stringify({ type: \"STATE_UPDATE\", payload: initialState }),\n );\n }\n\n unsubscribeBus = bitBus.subscribe((storeId, _newState) => {\n if (socket?.readyState === WebSocket.OPEN) {\n const storeInstance = bitBus.stores[storeId];\n if (storeInstance) {\n socket.send(\n JSON.stringify({\n type: \"STATE_UPDATE\",\n payload: { [storeId]: formatStoreState(storeInstance) },\n }),\n );\n }\n }\n });\n\n heartbeatInterval = setInterval(() => {\n if (socket?.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify({ type: \"PING\" }));\n }\n }, 30000);\n };\n\n socket.onmessage = (event) => {\n try {\n const message = JSON.parse(event.data) as {\n type?: unknown;\n payload?: unknown;\n };\n\n if (message.type === \"ACTION\") {\n if (!isDevToolsActionPayload(message.payload)) {\n return;\n }\n\n const { storeId, action } = message.payload;\n\n const store = bitBus.stores[storeId];\n\n if (!store || typeof store !== \"object\") {\n return;\n }\n\n const methodByAction: Record<DevToolsActionName, string> = {\n undo: \"undo\",\n redo: \"redo\",\n reset: \"reset\",\n };\n\n const method = (store as Record<string, unknown>)[\n methodByAction[action]\n ];\n if (typeof method === \"function\") {\n (method as () => void).call(store);\n }\n }\n } catch (e) {\n console.warn(\"[bit-form] Erro ao processar comando do CLI:\", e);\n }\n };\n\n socket.onclose = () => {\n if (unsubscribeBus) unsubscribeBus();\n clearInterval(heartbeatInterval);\n\n if (!isIntentionalDisconnect) {\n console.log(\"[bit-form] Conexão perdida. Reconectando em 3s...\");\n setTimeout(connect, 3000);\n } else {\n console.log(\"[bit-form] Ponte antiga encerrada com sucesso.\");\n }\n };\n };\n\n connect();\n\n const cleanup = () => {\n isIntentionalDisconnect = true;\n\n if (unsubscribeBus) unsubscribeBus();\n clearInterval(heartbeatInterval);\n if (\n socket &&\n (socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING)\n ) {\n socket.close();\n }\n activeBridgeCleanup = null;\n };\n\n activeBridgeCleanup = cleanup;\n\n return cleanup;\n}\n"],"mappings":"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","names":["formatStoreState","instance","cleanState","historyMeta","activeBridgeCleanup","isDevToolsActionPayload","payload","storeId","action","setupRemoteBridge","url","socket","unsubscribeBus","heartbeatInterval","isIntentionalDisconnect","connect","storesEntries","bitBus","initialState","acc","id","store","_newState","storeInstance","event","message","method","e","cleanup"]}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}