@lehnihon/bit-form 2.1.0 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/angular/index.cjs +1 -1
  2. package/dist/angular/index.cjs.map +1 -1
  3. package/dist/angular/index.d.cts +72 -46
  4. package/dist/angular/index.d.ts +72 -46
  5. package/dist/angular/index.js +1 -1
  6. package/dist/angular/index.js.map +1 -1
  7. package/dist/bus-vCbulIYH.d.cts +141 -0
  8. package/dist/bus-vCbulIYH.d.ts +141 -0
  9. package/dist/chunk-2QNUW6ZN.cjs +133 -0
  10. package/dist/chunk-2QNUW6ZN.cjs.map +1 -0
  11. package/dist/chunk-F6LJWWEW.js +2 -0
  12. package/dist/chunk-F6LJWWEW.js.map +1 -0
  13. package/dist/chunk-LPRLSFPT.cjs +2 -0
  14. package/dist/chunk-LPRLSFPT.cjs.map +1 -0
  15. package/dist/chunk-N6IA7HQL.js +133 -0
  16. package/dist/chunk-N6IA7HQL.js.map +1 -0
  17. package/dist/devtools/bridge.cjs +1 -1
  18. package/dist/devtools/bridge.js +1 -1
  19. package/dist/devtools/index.cjs +1 -1
  20. package/dist/devtools/index.js +1 -1
  21. package/dist/index.cjs +1 -1
  22. package/dist/index.d.cts +5 -24
  23. package/dist/index.d.ts +5 -24
  24. package/dist/index.js +1 -1
  25. package/dist/public-types-ChP5j3xc.d.ts +69 -0
  26. package/dist/public-types-Nv__uZTR.d.cts +69 -0
  27. package/dist/react/index.cjs +1 -1
  28. package/dist/react/index.cjs.map +1 -1
  29. package/dist/react/index.d.cts +7 -47
  30. package/dist/react/index.d.ts +7 -47
  31. package/dist/react/index.js +1 -1
  32. package/dist/react/index.js.map +1 -1
  33. package/dist/react-native/index.cjs +1 -1
  34. package/dist/react-native/index.cjs.map +1 -1
  35. package/dist/react-native/index.d.cts +16 -5
  36. package/dist/react-native/index.d.ts +16 -5
  37. package/dist/react-native/index.js +1 -1
  38. package/dist/react-native/index.js.map +1 -1
  39. package/dist/resolvers/joi.d.cts +1 -1
  40. package/dist/resolvers/joi.d.ts +1 -1
  41. package/dist/resolvers/yup.d.cts +1 -1
  42. package/dist/resolvers/yup.d.ts +1 -1
  43. package/dist/resolvers/zod.d.cts +1 -1
  44. package/dist/resolvers/zod.d.ts +1 -1
  45. package/dist/{use-bit-watch-iCGj-kYp.d.ts → use-bit-watch-BRekIj2W.d.cts} +92 -28
  46. package/dist/{use-bit-watch-BLCTa7d4.d.cts → use-bit-watch-hA0AqCkC.d.ts} +92 -28
  47. package/dist/vue/index.cjs +1 -1
  48. package/dist/vue/index.cjs.map +1 -1
  49. package/dist/vue/index.d.cts +66 -46
  50. package/dist/vue/index.d.ts +66 -46
  51. package/dist/vue/index.js +1 -1
  52. package/dist/vue/index.js.map +1 -1
  53. package/package.json +7 -2
  54. package/dist/bus-uG4EmM-Z.d.cts +0 -295
  55. package/dist/bus-uG4EmM-Z.d.ts +0 -295
  56. package/dist/chunk-ET36BANJ.js +0 -2
  57. package/dist/chunk-ET36BANJ.js.map +0 -1
  58. package/dist/chunk-NDFMZWBP.js +0 -133
  59. package/dist/chunk-NDFMZWBP.js.map +0 -1
  60. package/dist/chunk-PCVPCFPX.cjs +0 -2
  61. package/dist/chunk-PCVPCFPX.cjs.map +0 -1
  62. package/dist/chunk-VFLQH47Q.cjs +0 -133
  63. package/dist/chunk-VFLQH47Q.cjs.map +0 -1
  64. package/dist/index-1fP1eJH8.d.ts +0 -211
  65. package/dist/index-9vxGUNPP.d.cts +0 -211
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/angular/provider.ts","../../src/angular/inject-bit-form.ts","../../src/angular/inject-bit-field.ts","../../src/angular/inject-bit-array.ts","../../src/angular/inject-bit-history.ts","../../src/angular/inject-bit-scope.ts","../../src/angular/inject-bit-steps.ts","../../src/angular/inject-bit-watch.ts","../../src/angular/inject-bit-upload.ts"],"sourcesContent":["import { inject, InjectionToken, Provider } from \"@angular/core\"; // IMPORTANTE: Adicione o 'inject' aqui\nimport { BitStore } from \"../core/store\";\n\nexport const BIT_STORE_TOKEN = new InjectionToken<BitStore<any>>(\"BIT_STORE\");\n\nexport function provideBitStore(store: BitStore<any>): Provider {\n return { provide: BIT_STORE_TOKEN, useValue: store };\n}\n\nexport function useBitStore<T extends object>() {\n const store = inject(BIT_STORE_TOKEN, { optional: true });\n\n if (!store) {\n throw new Error(\n \"BitForm: Não foi possível encontrar a BitStore. \" +\n 'Certifique-se de que você adicionou \"provideBitStore(store)\" nos providers do seu componente.',\n );\n }\n\n return store as BitStore<T>;\n}\n","import { signal, computed, inject, DestroyRef } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { isValidationErrorShape, extractServerErrors } from \"../core/utils\";\n\nexport function injectBitForm<T extends object>() {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n const stateSignal = signal(store.getState());\n const submitError = signal<Error | null>(null);\n const lastResponse = signal<unknown>(null);\n\n const sub = store.subscribe(() => {\n stateSignal.set(store.getState());\n });\n\n destroyRef.onDestroy(() => sub());\n\n const isValid = computed(() => stateSignal().isValid);\n const isSubmitting = computed(() => stateSignal().isSubmitting);\n const isDirty = computed(() => stateSignal().isDirty);\n\n const getValues = () => stateSignal().values;\n const getErrors = () => stateSignal().errors;\n const getTouched = () => stateSignal().touched;\n const getDirtyValues = () => store.getDirtyValues();\n\n const submit = (\n onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>,\n ) => {\n return (event?: Event) => {\n event?.preventDefault();\n event?.stopPropagation();\n return store.submit(onSuccess);\n };\n };\n\n const onSubmit = (\n handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>,\n ) => {\n return (event?: Event) => {\n event?.preventDefault();\n event?.stopPropagation();\n submitError.set(null);\n return store.submit(async (values, dirtyValues) => {\n try {\n const result = await handler(values, dirtyValues);\n lastResponse.set(result);\n submitError.set(null);\n } catch (err) {\n if (isValidationErrorShape(err)) {\n store.setServerErrors(extractServerErrors(err));\n } else {\n submitError.set(\n err instanceof Error ? err : new Error(String(err)),\n );\n }\n }\n });\n };\n };\n\n const reset = () => {\n store.reset();\n submitError.set(null);\n lastResponse.set(null);\n };\n\n const meta = {\n isValid,\n isDirty,\n isSubmitting,\n submitError: submitError.asReadonly(),\n lastResponse: lastResponse.asReadonly(),\n };\n\n return {\n // Metadata (grouped)\n meta,\n // Getters\n getValues,\n getErrors,\n getTouched,\n getDirtyValues,\n // Main actions (frequent use - flat)\n submit,\n onSubmit,\n reset,\n setValues: store.setValues.bind(store),\n setError: store.setError.bind(store),\n setErrors: store.setErrors.bind(store),\n setServerErrors: store.setServerErrors.bind(store),\n setField: store.setField.bind(store),\n blurField: store.blurField.bind(store),\n validate: store.validate.bind(store),\n // Array mutations (grouped)\n mutations: {\n pushItem: store.pushItem.bind(store),\n prependItem: store.prependItem.bind(store),\n removeItem: store.removeItem.bind(store),\n insertItem: store.insertItem.bind(store),\n moveItem: store.moveItem.bind(store),\n swapItems: store.swapItems.bind(store),\n },\n };\n}\n","import { inject, DestroyRef, computed, signal } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n BitFieldDefinition,\n BitFieldOptions,\n getDeepValue,\n BitPath,\n BitPathValue,\n} from \"../core\";\n\nexport interface InjectBitFieldMeta {\n error: () => string | undefined;\n touched: () => boolean;\n invalid: () => boolean;\n isDirty: () => boolean;\n isValidating: () => boolean;\n isHidden: () => boolean;\n isRequired: () => boolean;\n hasError: () => boolean;\n}\n\nexport interface InjectBitFieldResult<\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n> {\n // Main handlers and values (flat)\n value: () => BitPathValue<TForm, P>;\n displayValue: () => string;\n setValue: (val: any) => void;\n setBlur: () => void;\n update: (e: any) => void;\n // Metadata (grouped)\n meta: InjectBitFieldMeta;\n}\n\nexport function injectBitField<\n TValue = any,\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(\n path: P,\n config?: BitFieldDefinition<TForm>,\n options?: BitFieldOptions,\n): InjectBitFieldResult<TForm, P> {\n const store = inject(BIT_STORE_TOKEN);\n\n const stateSignal = signal(store.getState());\n\n const unsubscribe = store.subscribe(() => {\n stateSignal.set(store.getState());\n });\n\n inject(DestroyRef).onDestroy(() => {\n unsubscribe();\n if (store.unregisterField) {\n store.unregisterField(path as string);\n }\n });\n\n if (config) {\n store.registerField(path as string, config as any);\n }\n\n const value = computed(\n () =>\n getDeepValue(stateSignal().values, path as string) as BitPathValue<\n TForm,\n P\n >,\n );\n const rawError = computed(\n () =>\n (stateSignal().errors as Record<string, any>)[path] as string | undefined,\n );\n const touched = computed(\n () => !!(stateSignal().touched as Record<string, any>)[path],\n );\n const error = computed(() => (touched() ? rawError() : undefined));\n\n const isDirty = computed(() => {\n stateSignal();\n return store.isFieldDirty(path);\n });\n\n const isValidating = computed(() => {\n stateSignal();\n return store.isFieldValidating(path);\n });\n\n const isHidden = computed(() => {\n stateSignal();\n return store.isHidden(path);\n });\n\n const isRequired = computed(() => {\n stateSignal();\n return store.isRequired(path);\n });\n\n const invalid = computed(() => touched() && !!rawError());\n\n const maskOption =\n options?.mask ?? store.config.fields?.[path as string]?.mask;\n const resolvedMask = maskOption\n ? typeof maskOption === \"string\"\n ? store.config.masks![maskOption]\n : maskOption\n : undefined;\n\n const displayValue = computed(() => {\n const val = value();\n if (val === undefined || val === null || val === \"\") return \"\";\n\n return resolvedMask ? resolvedMask.format(val) : String(val);\n });\n\n const setValue = (val: any) => {\n if (!resolvedMask) {\n store.setField(path, val);\n return;\n }\n\n const stringVal = String(val ?? \"\");\n store.setField(path, resolvedMask.parse(stringVal) as any);\n };\n\n const setBlur = () => store.blurField(path);\n\n const hasError = computed(() => !!rawError());\n\n const update = (e: any) => setValue(e?.target?.value ?? e);\n\n return {\n // Main handlers and values (flat)\n value,\n displayValue,\n setValue,\n setBlur,\n update,\n // Metadata (grouped)\n meta: {\n error,\n touched,\n invalid,\n isDirty,\n isValidating,\n isHidden,\n isRequired,\n hasError,\n },\n };\n}\n","import { DestroyRef, signal, computed, inject, untracked } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n getDeepValue,\n BitArrayPath,\n BitPathValue,\n BitArrayItem,\n BitPath,\n} from \"../core\";\n\nconst generateId = () => Math.random().toString(36).substring(2, 9);\n\nexport function injectBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = inject(BIT_STORE_TOKEN);\n const destroyRef = inject(DestroyRef);\n\n const getRaw = () => {\n const val = getDeepValue(\n store.getState().values,\n path as string,\n ) as BitPathValue<TForm, P>;\n return Array.isArray(val)\n ? (val as BitArrayItem<BitPathValue<TForm, P>>[])\n : [];\n };\n\n const valuesSig = signal<BitArrayItem<BitPathValue<TForm, P>>[]>(getRaw());\n const idsSig = signal<string[]>(valuesSig().map(generateId));\n\n const unsub = store.subscribe(() => {\n const next = getRaw();\n const ids = untracked(idsSig);\n valuesSig.set(next);\n\n if (next.length !== ids.length) {\n if (next.length > ids.length) {\n idsSig.set([\n ...ids,\n ...Array.from({ length: next.length - ids.length }, generateId),\n ]);\n } else {\n idsSig.set(ids.slice(0, next.length));\n }\n }\n });\n\n destroyRef.onDestroy(() => {\n unsub();\n if (store.unregisterPrefix) store.unregisterPrefix(`${path as string}.`);\n });\n\n return {\n fields: computed(() =>\n valuesSig().map((v, i) => ({\n key: idsSig()[i] || `temp-${i}`,\n value: v,\n index: i,\n })),\n ),\n length: computed(() => valuesSig().length),\n append: (v: BitArrayItem<BitPathValue<TForm, P>>) => {\n idsSig.update((ids) => [...ids, generateId()]);\n store.pushItem(path, v);\n },\n prepend: (v: BitArrayItem<BitPathValue<TForm, P>>) => {\n idsSig.update((ids) => [generateId(), ...ids]);\n store.prependItem(path, v);\n },\n remove: (i: number) => {\n idsSig.update((ids) => ids.filter((_, idx) => idx !== i));\n store.removeItem(path, i);\n },\n insert: (index: number, v: BitArrayItem<BitPathValue<TForm, P>>) => {\n idsSig.update((ids) => {\n const c = [...ids];\n c.splice(index, 0, generateId());\n return c;\n });\n store.insertItem(path, index, v);\n },\n swap: (a: number, b: number) => {\n idsSig.update((ids) => {\n const c = [...ids];\n [c[a], c[b]] = [c[b], c[a]];\n return c;\n });\n store.swapItems(path, a, b);\n },\n move: (f: number, t: number) => {\n idsSig.update((ids) => {\n const c = [...ids];\n const [it] = c.splice(f, 1);\n c.splice(t, 0, it);\n return c;\n });\n store.moveItem(path, f, t);\n },\n replace: (items: BitArrayItem<BitPathValue<TForm, P>>[]) => {\n idsSig.set(items.map(() => generateId()));\n store.setField(path as unknown as BitPath<TForm>, items as any);\n },\n clear: () => {\n idsSig.set([]);\n store.setField(path as unknown as BitPath<TForm>, [] as any);\n },\n };\n}\n","import { computed, DestroyRef, inject, signal } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\n\nexport interface InjectBitHistoryResult {\n canUndo: ReturnType<typeof computed<boolean>>;\n canRedo: ReturnType<typeof computed<boolean>>;\n historyIndex: ReturnType<typeof computed<number>>;\n historySize: ReturnType<typeof computed<number>>;\n undo: () => void;\n redo: () => void;\n}\n\nexport function injectBitHistory<\n T extends object = any,\n>(): InjectBitHistoryResult {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n\n const meta = signal(store.getHistoryMetadata());\n\n const sub = store.subscribe(() => {\n meta.set(store.getHistoryMetadata());\n });\n\n destroyRef.onDestroy(() => sub());\n\n return {\n canUndo: computed(() => meta().canUndo),\n canRedo: computed(() => meta().canRedo),\n historyIndex: computed(() => meta().historyIndex),\n historySize: computed(() => meta().historySize),\n undo: () => store.undo(),\n redo: () => store.redo(),\n };\n}\n","import { signal, computed, DestroyRef, inject } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./provider\";\n\nexport type { ScopeStatus, ValidateScopeResult };\n\nfunction errorsEqual(\n a: Record<string, string>,\n b: Record<string, string>,\n): boolean {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((k) => a[k] === b[k]);\n}\n\nexport function injectBitScope(scopeName: string) {\n const store = useBitStore();\n const initialStatus = store.getStepStatus(scopeName);\n\n const status = signal<ScopeStatus>(initialStatus);\n\n const unsubscribe = store.subscribe(() => {\n const newStatus = store.getStepStatus(scopeName);\n const current = status();\n if (\n newStatus.hasErrors !== current.hasErrors ||\n newStatus.isDirty !== current.isDirty ||\n !errorsEqual(newStatus.errors, current.errors)\n ) {\n status.set(newStatus);\n }\n });\n\n try {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(() => unsubscribe());\n } catch {}\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const valid = await store.validate({ scope: scopeName });\n const errors = store.getStepErrors(scopeName);\n return { valid, errors };\n };\n\n const getErrors = () => store.getStepErrors(scopeName);\n\n const isValid = computed(() => !status().hasErrors);\n const isDirty = computed(() => status().isDirty);\n const errors = computed(() => status().errors);\n\n return {\n scopeName,\n status,\n errors,\n validate,\n getErrors,\n isValid,\n isDirty,\n unsubscribe,\n };\n}\n","import { signal, computed, DestroyRef, inject } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./provider\";\n\nfunction errorsEqual(\n a: Record<string, string>,\n b: Record<string, string>,\n): boolean {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((k) => a[k] === b[k]);\n}\n\nexport interface InjectBitStepsResult {\n step: ReturnType<typeof computed<number>>;\n stepIndex: ReturnType<typeof signal<number>>;\n scope: ReturnType<typeof computed<string>>;\n next: () => Promise<boolean>;\n prev: () => void;\n goTo: (step: number) => void;\n isFirst: ReturnType<typeof computed<boolean>>;\n isLast: ReturnType<typeof computed<boolean>>;\n status: ReturnType<typeof signal<ScopeStatus>>;\n errors: ReturnType<typeof computed<Record<string, string>>>;\n isValid: ReturnType<typeof computed<boolean>>;\n isDirty: ReturnType<typeof computed<boolean>>;\n validate: () => Promise<ValidateScopeResult>;\n getErrors: () => Record<string, string>;\n}\n\nexport function injectBitSteps(scopeNames: string[]): InjectBitStepsResult {\n const store = useBitStore();\n const stepIndex = signal(0);\n\n const scope = computed(() => scopeNames[stepIndex()] ?? \"\");\n\n const getCurrentScope = () => scopeNames[stepIndex()] ?? \"\";\n const status = signal<ScopeStatus>(store.getStepStatus(getCurrentScope()));\n\n const updateStatus = () => {\n const scopeName = getCurrentScope();\n const newStatus = store.getStepStatus(scopeName);\n const current = status();\n if (\n newStatus.hasErrors !== current.hasErrors ||\n newStatus.isDirty !== current.isDirty ||\n !errorsEqual(newStatus.errors, current.errors)\n ) {\n status.set(newStatus);\n }\n };\n\n const unsubscribe = store.subscribe(updateStatus);\n\n try {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(() => unsubscribe());\n } catch {}\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const scopeName = getCurrentScope();\n const valid = await store.validate({ scope: scopeName });\n const errors = store.getStepErrors(scopeName);\n return { valid, errors };\n };\n\n const getErrors = () => store.getStepErrors(getCurrentScope());\n\n const next = async (): Promise<boolean> => {\n const scopeName = getCurrentScope();\n\n const scopeFields = store.getConfig().scopes?.[scopeName];\n if (store.hasValidationsInProgress(scopeFields)) {\n return false;\n }\n\n const valid = await store.validate({ scope: scopeName });\n if (valid) {\n const newIndex = Math.min(stepIndex() + 1, scopeNames.length - 1);\n stepIndex.set(newIndex);\n status.set(store.getStepStatus(scopeNames[newIndex] ?? \"\"));\n } else {\n const errors = store.getStepErrors(scopeName);\n const pathsWithErrors = Object.keys(errors);\n if (pathsWithErrors.length > 0) {\n store.markFieldsTouched(pathsWithErrors);\n }\n }\n return valid;\n };\n\n const prev = () => {\n const newIndex = Math.max(stepIndex() - 1, 0);\n stepIndex.set(newIndex);\n status.set(store.getStepStatus(scopeNames[newIndex] ?? \"\"));\n };\n\n const goTo = (targetStep: number) => {\n const newIndex = Math.max(\n 0,\n Math.min(targetStep - 1, scopeNames.length - 1),\n );\n stepIndex.set(newIndex);\n status.set(store.getStepStatus(scopeNames[newIndex] ?? \"\"));\n };\n\n const step = computed(() => stepIndex() + 1);\n const isFirst = computed(() => stepIndex() === 0);\n const isLast = computed(() => stepIndex() >= scopeNames.length - 1);\n const isValid = computed(() => !status().hasErrors);\n const isDirty = computed(() => status().isDirty);\n const errors = computed(() => status().errors);\n\n return {\n step,\n stepIndex,\n scope,\n next,\n prev,\n goTo,\n isFirst,\n isLast,\n status,\n errors,\n isValid,\n isDirty,\n validate,\n getErrors,\n };\n}\n","import { DestroyRef, signal, Signal, inject } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport {\n getDeepValue,\n deepEqual,\n BitPath,\n BitPathValue,\n} from \"../core\";\n\nexport function injectBitWatch<\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): Signal<BitPathValue<TForm, P>> {\n const store = useBitStore<TForm>();\n const destroyRef = inject(DestroyRef);\n const valueSig = signal<BitPathValue<TForm, P>>(\n getDeepValue(store.getState().values, path as string) as BitPathValue<\n TForm,\n P\n >,\n { equal: deepEqual },\n );\n\n const unsub = store.watch(path, (v) => {\n valueSig.set(v as BitPathValue<TForm, P>);\n });\n\n destroyRef.onDestroy(unsub);\n\n return valueSig.asReadonly();\n}\n","/**\n * Angular Dependency Injection for File Upload\n *\n * Minimal upload API integrated with global field validation lifecycle.\n */\n\nimport { computed, inject } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport { injectBitField } from \"./inject-bit-field\";\nimport { BitUploadFn, BitDeleteUploadFn } from \"../core/upload/types\";\n\nexport interface InjectBitUploadResult {\n value: import(\"@angular/core\").Signal<string | File | null>;\n setValue: (value: string | File | null) => void;\n error: import(\"@angular/core\").Signal<string | undefined>;\n isValidating: import(\"@angular/core\").Signal<boolean>;\n upload: (file: File | null | undefined) => Promise<void>;\n remove: () => Promise<void>;\n}\n\nexport function injectBitUpload(\n fieldPath: string,\n uploadFn: BitUploadFn,\n deleteFile?: BitDeleteUploadFn,\n): InjectBitUploadResult {\n const store = inject(BIT_STORE_TOKEN);\n const field = injectBitField(fieldPath);\n let uploadKey: string | null = null;\n\n const upload = async (file: File | null | undefined) => {\n if (!file) return;\n\n store.beginFieldValidation(fieldPath);\n await store.clearFieldAsyncError(fieldPath);\n\n try {\n const result = await uploadFn(file);\n\n field.setValue(result.url);\n uploadKey = result.key;\n await store.clearFieldAsyncError(fieldPath);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Upload failed\";\n await store.setFieldAsyncError(fieldPath, message);\n } finally {\n store.endFieldValidation(fieldPath);\n }\n };\n\n const remove = async () => {\n if (uploadKey && deleteFile) {\n try {\n await deleteFile(uploadKey);\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Delete failed\";\n await store.setFieldAsyncError(fieldPath, message);\n return;\n }\n }\n\n field.setValue(null);\n uploadKey = null;\n await store.clearFieldAsyncError(fieldPath);\n };\n\n return {\n value: computed(() => field.value()),\n setValue: field.setValue,\n error: computed(() => field.meta.error()),\n isValidating: computed(() => field.meta.isValidating() || false),\n upload,\n remove,\n };\n}\n"],"mappings":"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","names":["inject","InjectionToken","BIT_STORE_TOKEN","provideBitStore","store","useBitStore","signal","computed","inject","DestroyRef","injectBitForm","store","useBitStore","destroyRef","inject","DestroyRef","stateSignal","signal","submitError","lastResponse","sub","isValid","computed","isSubmitting","isDirty","getValues","getErrors","getTouched","getDirtyValues","submit","onSuccess","event","onSubmit","handler","values","dirtyValues","result","err","isValidationErrorShape","extractServerErrors","reset","inject","DestroyRef","computed","signal","injectBitField","path","config","options","store","inject","BIT_STORE_TOKEN","stateSignal","signal","unsubscribe","DestroyRef","value","computed","getDeepValue","rawError","touched","error","isDirty","isValidating","isHidden","isRequired","invalid","maskOption","resolvedMask","displayValue","val","setValue","stringVal","setBlur","hasError","e","DestroyRef","signal","computed","inject","untracked","generateId","injectBitArray","path","store","inject","BIT_STORE_TOKEN","destroyRef","DestroyRef","getRaw","val","getDeepValue","valuesSig","signal","idsSig","unsub","next","ids","untracked","computed","v","i","_","idx","index","a","b","f","t","it","items","computed","DestroyRef","inject","signal","injectBitHistory","store","useBitStore","destroyRef","inject","DestroyRef","meta","signal","sub","computed","signal","computed","DestroyRef","inject","errorsEqual","a","b","keysA","keysB","k","injectBitScope","scopeName","store","useBitStore","initialStatus","status","signal","unsubscribe","newStatus","current","inject","DestroyRef","validate","valid","errors","getErrors","isValid","computed","isDirty","signal","computed","DestroyRef","inject","errorsEqual","a","b","keysA","keysB","k","injectBitSteps","scopeNames","store","useBitStore","stepIndex","signal","scope","computed","getCurrentScope","status","updateStatus","scopeName","newStatus","current","unsubscribe","inject","DestroyRef","validate","valid","errors","getErrors","next","scopeFields","newIndex","pathsWithErrors","prev","goTo","targetStep","step","isFirst","isLast","isValid","isDirty","DestroyRef","signal","inject","injectBitWatch","path","store","useBitStore","destroyRef","inject","DestroyRef","valueSig","signal","getDeepValue","deepEqual","unsub","v","computed","inject","injectBitUpload","fieldPath","uploadFn","deleteFile","store","inject","BIT_STORE_TOKEN","field","injectBitField","uploadKey","upload","file","result","error","message","remove","computed"]}
1
+ {"version":3,"sources":["../../src/angular/provider.ts","../../src/angular/inject-bit-form.ts","../../src/angular/inject-bit-field.ts","../../src/angular/inject-bit-array.ts","../../src/angular/inject-bit-history.ts","../../src/angular/inject-bit-scope.ts","../../src/angular/inject-bit-steps.ts","../../src/angular/inject-bit-watch.ts","../../src/angular/inject-bit-upload.ts"],"sourcesContent":["import { inject, InjectionToken, Provider } from \"@angular/core\";\nimport type { BitFrameworkStore } from \"../core\";\n\nexport const BIT_STORE_TOKEN = new InjectionToken<BitFrameworkStore<any>>(\n \"BIT_STORE\",\n);\n\nexport function provideBitStore<T extends object>(\n store: BitFrameworkStore<T>,\n): Provider {\n return { provide: BIT_STORE_TOKEN, useValue: store };\n}\n\nexport function useBitStore<T extends object>() {\n const store = inject(BIT_STORE_TOKEN, { optional: true });\n\n if (!store) {\n throw new Error(\n \"BitForm: Não foi possível encontrar a BitStore. \" +\n 'Certifique-se de que você adicionou \"provideBitStore(store)\" nos providers do seu componente.',\n );\n }\n\n return store as BitFrameworkStore<T>;\n}\n","import { signal, computed, inject, DestroyRef } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { isValidationErrorShape, extractServerErrors } from \"../core/utils\";\n\nexport function injectBitForm<T extends object>() {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n const stateSignal = signal(store.getState());\n const submitError = signal<Error | null>(null);\n const lastResponse = signal<unknown>(null);\n\n const sub = store.subscribe(() => {\n stateSignal.set(store.getState());\n });\n\n destroyRef.onDestroy(() => sub());\n\n const isValid = computed(() => stateSignal().isValid);\n const isSubmitting = computed(() => stateSignal().isSubmitting);\n const isDirty = computed(() => stateSignal().isDirty);\n\n const getValues = () => stateSignal().values;\n const getErrors = () => stateSignal().errors;\n const getTouched = () => stateSignal().touched;\n const getDirtyValues = () => store.getDirtyValues();\n\n const submit = (\n onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>,\n ) => {\n return (event?: Event) => {\n event?.preventDefault();\n event?.stopPropagation();\n return store.submit(onSuccess);\n };\n };\n\n const onSubmit = (\n handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>,\n ) => {\n return (event?: Event) => {\n event?.preventDefault();\n event?.stopPropagation();\n submitError.set(null);\n return store.submit(async (values, dirtyValues) => {\n try {\n const result = await handler(values, dirtyValues);\n lastResponse.set(result);\n submitError.set(null);\n } catch (err) {\n if (isValidationErrorShape(err)) {\n store.setServerErrors(extractServerErrors(err));\n } else {\n submitError.set(\n err instanceof Error ? err : new Error(String(err)),\n );\n }\n }\n });\n };\n };\n\n const reset = () => {\n store.reset();\n submitError.set(null);\n lastResponse.set(null);\n };\n\n const meta = {\n isValid,\n isDirty,\n isSubmitting,\n submitError: submitError.asReadonly(),\n lastResponse: lastResponse.asReadonly(),\n };\n\n return {\n // Metadata (grouped)\n meta,\n // Getters\n getValues,\n getErrors,\n getTouched,\n getDirtyValues,\n // Main actions (frequent use - flat)\n submit,\n onSubmit,\n reset,\n setValues: store.setValues.bind(store),\n setError: store.setError.bind(store),\n setErrors: store.setErrors.bind(store),\n setServerErrors: store.setServerErrors.bind(store),\n setField: store.setField.bind(store),\n blurField: store.blurField.bind(store),\n validate: store.validate.bind(store),\n // Array mutations (grouped)\n mutations: {\n pushItem: store.pushItem.bind(store),\n prependItem: store.prependItem.bind(store),\n removeItem: store.removeItem.bind(store),\n insertItem: store.insertItem.bind(store),\n moveItem: store.moveItem.bind(store),\n swapItems: store.swapItems.bind(store),\n },\n };\n}\n","import { inject, DestroyRef, computed, signal } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport { getDeepValue, BitPath, BitPathValue } from \"../core\";\nimport type { InjectBitFieldMeta, InjectBitFieldResult } from \"./types\";\n\nexport function injectBitField<\n TValue = any,\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): InjectBitFieldResult<TForm, P> {\n const store = inject(BIT_STORE_TOKEN);\n\n const stateSignal = signal(store.getState());\n\n const unsubscribe = store.subscribe(() => {\n stateSignal.set(store.getState());\n });\n\n inject(DestroyRef).onDestroy(() => {\n unsubscribe();\n if (store.unregisterField) {\n store.unregisterField(path as string);\n }\n });\n\n const value = computed(\n () =>\n getDeepValue(stateSignal().values, path as string) as BitPathValue<\n TForm,\n P\n >,\n );\n const rawError = computed(\n () =>\n (stateSignal().errors as Record<string, any>)[path] as string | undefined,\n );\n const touched = computed(\n () => !!(stateSignal().touched as Record<string, any>)[path],\n );\n const error = computed(() => (touched() ? rawError() : undefined));\n\n const isDirty = computed(() => {\n stateSignal();\n return store.isFieldDirty(path);\n });\n\n const isValidating = computed(() => {\n stateSignal();\n return store.isFieldValidating(path);\n });\n\n const isHidden = computed(() => {\n stateSignal();\n return store.isHidden(path);\n });\n\n const isRequired = computed(() => {\n stateSignal();\n return store.isRequired(path);\n });\n\n const invalid = computed(() => touched() && !!rawError());\n\n const resolvedMask = store.resolveMask(path as string);\n\n const displayValue = computed(() => {\n const val = value();\n if (val === undefined || val === null || val === \"\") return \"\";\n\n return resolvedMask ? resolvedMask.format(val) : String(val);\n });\n\n const setValue = (val: any) => {\n if (!resolvedMask) {\n store.setField(path, val);\n return;\n }\n\n const stringVal = String(val ?? \"\");\n store.setField(path, resolvedMask.parse(stringVal) as any);\n };\n\n const setBlur = () => store.blurField(path);\n\n const hasError = computed(() => !!rawError());\n\n const update = (e: any) => setValue(e?.target?.value ?? e);\n\n return {\n // Main handlers and values (flat)\n value,\n displayValue,\n setValue,\n setBlur,\n update,\n // Metadata (grouped)\n meta: {\n error,\n touched,\n invalid,\n isDirty,\n isValidating,\n isHidden,\n isRequired,\n hasError,\n },\n };\n}\n","import { DestroyRef, signal, computed, inject, untracked } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n getDeepValue,\n BitArrayPath,\n BitPathValue,\n BitArrayItem,\n BitPath,\n} from \"../core\";\n\nconst generateId = () => Math.random().toString(36).substring(2, 9);\n\nexport function injectBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = inject(BIT_STORE_TOKEN);\n const destroyRef = inject(DestroyRef);\n\n const getRaw = () => {\n const val = getDeepValue(\n store.getState().values,\n path as string,\n ) as BitPathValue<TForm, P>;\n return Array.isArray(val)\n ? (val as BitArrayItem<BitPathValue<TForm, P>>[])\n : [];\n };\n\n const valuesSig = signal<BitArrayItem<BitPathValue<TForm, P>>[]>(getRaw());\n const idsSig = signal<string[]>(valuesSig().map(generateId));\n\n const unsub = store.subscribe(() => {\n const next = getRaw();\n const ids = untracked(idsSig);\n valuesSig.set(next);\n\n if (next.length !== ids.length) {\n if (next.length > ids.length) {\n idsSig.set([\n ...ids,\n ...Array.from({ length: next.length - ids.length }, generateId),\n ]);\n } else {\n idsSig.set(ids.slice(0, next.length));\n }\n }\n });\n\n destroyRef.onDestroy(() => {\n unsub();\n if (store.unregisterPrefix) store.unregisterPrefix(`${path as string}.`);\n });\n\n return {\n fields: computed(() =>\n valuesSig().map((v, i) => ({\n key: idsSig()[i] || `temp-${i}`,\n value: v,\n index: i,\n })),\n ),\n length: computed(() => valuesSig().length),\n append: (v: BitArrayItem<BitPathValue<TForm, P>>) => {\n idsSig.update((ids) => [...ids, generateId()]);\n store.pushItem(path, v);\n },\n prepend: (v: BitArrayItem<BitPathValue<TForm, P>>) => {\n idsSig.update((ids) => [generateId(), ...ids]);\n store.prependItem(path, v);\n },\n remove: (i: number) => {\n idsSig.update((ids) => ids.filter((_, idx) => idx !== i));\n store.removeItem(path, i);\n },\n insert: (index: number, v: BitArrayItem<BitPathValue<TForm, P>>) => {\n idsSig.update((ids) => {\n const c = [...ids];\n c.splice(index, 0, generateId());\n return c;\n });\n store.insertItem(path, index, v);\n },\n swap: (a: number, b: number) => {\n idsSig.update((ids) => {\n const c = [...ids];\n [c[a], c[b]] = [c[b], c[a]];\n return c;\n });\n store.swapItems(path, a, b);\n },\n move: (f: number, t: number) => {\n idsSig.update((ids) => {\n const c = [...ids];\n const [it] = c.splice(f, 1);\n c.splice(t, 0, it);\n return c;\n });\n store.moveItem(path, f, t);\n },\n replace: (items: BitArrayItem<BitPathValue<TForm, P>>[]) => {\n idsSig.set(items.map(() => generateId()));\n store.setField(path as unknown as BitPath<TForm>, items as any);\n },\n clear: () => {\n idsSig.set([]);\n store.setField(path as unknown as BitPath<TForm>, [] as any);\n },\n };\n}\n","import { computed, DestroyRef, inject, signal } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport type { InjectBitHistoryResult } from \"./types\";\n\nexport function injectBitHistory<\n T extends object = any,\n>(): InjectBitHistoryResult {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n\n const meta = signal(store.getHistoryMetadata());\n\n const sub = store.subscribe(() => {\n meta.set(store.getHistoryMetadata());\n });\n\n destroyRef.onDestroy(() => sub());\n\n return {\n canUndo: computed(() => meta().canUndo),\n canRedo: computed(() => meta().canRedo),\n historyIndex: computed(() => meta().historyIndex),\n historySize: computed(() => meta().historySize),\n undo: () => store.undo(),\n redo: () => store.redo(),\n };\n}\n","import { signal, computed, DestroyRef, inject } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./provider\";\n\nexport type { ScopeStatus, ValidateScopeResult };\n\nfunction errorsEqual(\n a: Record<string, string>,\n b: Record<string, string>,\n): boolean {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((k) => a[k] === b[k]);\n}\n\nexport function injectBitScope(scopeName: string) {\n const store = useBitStore();\n const initialStatus = store.getStepStatus(scopeName);\n\n const status = signal<ScopeStatus>(initialStatus);\n\n const unsubscribe = store.subscribe(() => {\n const newStatus = store.getStepStatus(scopeName);\n const current = status();\n if (\n newStatus.hasErrors !== current.hasErrors ||\n newStatus.isDirty !== current.isDirty ||\n !errorsEqual(newStatus.errors, current.errors)\n ) {\n status.set(newStatus);\n }\n });\n\n try {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(() => unsubscribe());\n } catch {}\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const valid = await store.validate({ scope: scopeName });\n const errors = store.getStepErrors(scopeName);\n return { valid, errors };\n };\n\n const getErrors = () => store.getStepErrors(scopeName);\n\n const isValid = computed(() => !status().hasErrors);\n const isDirty = computed(() => status().isDirty);\n const errors = computed(() => status().errors);\n\n return {\n scopeName,\n status,\n errors,\n validate,\n getErrors,\n isValid,\n isDirty,\n unsubscribe,\n };\n}\n","import { signal, computed, DestroyRef, inject } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./provider\";\nimport type { InjectBitStepsResult } from \"./types\";\n\nfunction errorsEqual(\n a: Record<string, string>,\n b: Record<string, string>,\n): boolean {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((k) => a[k] === b[k]);\n}\n\nexport function injectBitSteps(scopeNames: string[]): InjectBitStepsResult {\n const store = useBitStore();\n const stepIndex = signal(0);\n\n const scope = computed(() => scopeNames[stepIndex()] ?? \"\");\n\n const getCurrentScope = () => scopeNames[stepIndex()] ?? \"\";\n const status = signal<ScopeStatus>(store.getStepStatus(getCurrentScope()));\n\n const updateStatus = () => {\n const scopeName = getCurrentScope();\n const newStatus = store.getStepStatus(scopeName);\n const current = status();\n if (\n newStatus.hasErrors !== current.hasErrors ||\n newStatus.isDirty !== current.isDirty ||\n !errorsEqual(newStatus.errors, current.errors)\n ) {\n status.set(newStatus);\n }\n };\n\n const unsubscribe = store.subscribe(updateStatus);\n\n try {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(() => unsubscribe());\n } catch {}\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const scopeName = getCurrentScope();\n const valid = await store.validate({ scope: scopeName });\n const errors = store.getStepErrors(scopeName);\n return { valid, errors };\n };\n\n const getErrors = () => store.getStepErrors(getCurrentScope());\n\n const next = async (): Promise<boolean> => {\n const scopeName = getCurrentScope();\n\n const scopeFields = store.getScopeFields(scopeName);\n if (store.hasValidationsInProgress(scopeFields)) {\n return false;\n }\n\n const valid = await store.validate({ scope: scopeName });\n if (valid) {\n const newIndex = Math.min(stepIndex() + 1, scopeNames.length - 1);\n stepIndex.set(newIndex);\n status.set(store.getStepStatus(scopeNames[newIndex] ?? \"\"));\n } else {\n const errors = store.getStepErrors(scopeName);\n const pathsWithErrors = Object.keys(errors);\n if (pathsWithErrors.length > 0) {\n store.markFieldsTouched(pathsWithErrors);\n }\n }\n return valid;\n };\n\n const prev = () => {\n const newIndex = Math.max(stepIndex() - 1, 0);\n stepIndex.set(newIndex);\n status.set(store.getStepStatus(scopeNames[newIndex] ?? \"\"));\n };\n\n const goTo = (targetStep: number) => {\n const newIndex = Math.max(\n 0,\n Math.min(targetStep - 1, scopeNames.length - 1),\n );\n stepIndex.set(newIndex);\n status.set(store.getStepStatus(scopeNames[newIndex] ?? \"\"));\n };\n\n const step = computed(() => stepIndex() + 1);\n const isFirst = computed(() => stepIndex() === 0);\n const isLast = computed(() => stepIndex() >= scopeNames.length - 1);\n const isValid = computed(() => !status().hasErrors);\n const isDirty = computed(() => status().isDirty);\n const errors = computed(() => status().errors);\n\n return {\n step,\n stepIndex,\n scope,\n next,\n prev,\n goTo,\n isFirst,\n isLast,\n status,\n errors,\n isValid,\n isDirty,\n validate,\n getErrors,\n };\n}\n","import { DestroyRef, signal, Signal, inject } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport {\n getDeepValue,\n deepEqual,\n BitPath,\n BitPathValue,\n} from \"../core\";\n\nexport function injectBitWatch<\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): Signal<BitPathValue<TForm, P>> {\n const store = useBitStore<TForm>();\n const destroyRef = inject(DestroyRef);\n const valueSig = signal<BitPathValue<TForm, P>>(\n getDeepValue(store.getState().values, path as string) as BitPathValue<\n TForm,\n P\n >,\n { equal: deepEqual },\n );\n\n const unsub = store.watch(path, (v) => {\n valueSig.set(v as BitPathValue<TForm, P>);\n });\n\n destroyRef.onDestroy(unsub);\n\n return valueSig.asReadonly();\n}\n","/**\n * Angular Dependency Injection for File Upload\n *\n * Minimal upload API integrated with global field validation lifecycle.\n */\n\nimport { computed, inject } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport { injectBitField } from \"./inject-bit-field\";\nimport { BitUploadFn, BitDeleteUploadFn } from \"../core\";\nimport type { InjectBitUploadResult } from \"./types\";\n\nexport function injectBitUpload(\n fieldPath: string,\n uploadFn: BitUploadFn,\n deleteFile?: BitDeleteUploadFn,\n): InjectBitUploadResult {\n const store = inject(BIT_STORE_TOKEN);\n const field = injectBitField(fieldPath);\n let uploadKey: string | null = null;\n\n const upload = async (file: File | null | undefined) => {\n if (!file) return;\n\n store.beginFieldValidation(fieldPath);\n await store.clearFieldAsyncError(fieldPath);\n\n try {\n const result = await uploadFn(file);\n\n field.setValue(result.url);\n uploadKey = result.key;\n await store.clearFieldAsyncError(fieldPath);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Upload failed\";\n await store.setFieldAsyncError(fieldPath, message);\n } finally {\n store.endFieldValidation(fieldPath);\n }\n };\n\n const remove = async () => {\n if (uploadKey && deleteFile) {\n try {\n await deleteFile(uploadKey);\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Delete failed\";\n await store.setFieldAsyncError(fieldPath, message);\n return;\n }\n }\n\n field.setValue(null);\n uploadKey = null;\n await store.clearFieldAsyncError(fieldPath);\n };\n\n return {\n value: computed(() => field.value()),\n setValue: field.setValue,\n error: computed(() => field.meta.error()),\n isValidating: computed(() => field.meta.isValidating() || false),\n upload,\n remove,\n };\n}\n"],"mappings":"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","names":["inject","InjectionToken","BIT_STORE_TOKEN","provideBitStore","store","useBitStore","signal","computed","inject","DestroyRef","injectBitForm","store","useBitStore","destroyRef","inject","DestroyRef","stateSignal","signal","submitError","lastResponse","sub","isValid","computed","isSubmitting","isDirty","getValues","getErrors","getTouched","getDirtyValues","submit","onSuccess","event","onSubmit","handler","values","dirtyValues","result","err","isValidationErrorShape","extractServerErrors","reset","inject","DestroyRef","computed","signal","injectBitField","path","store","inject","BIT_STORE_TOKEN","stateSignal","signal","unsubscribe","DestroyRef","value","computed","getDeepValue","rawError","touched","error","isDirty","isValidating","isHidden","isRequired","invalid","resolvedMask","displayValue","val","setValue","stringVal","setBlur","hasError","e","DestroyRef","signal","computed","inject","untracked","generateId","injectBitArray","path","store","inject","BIT_STORE_TOKEN","destroyRef","DestroyRef","getRaw","val","getDeepValue","valuesSig","signal","idsSig","unsub","next","ids","untracked","computed","v","i","_","idx","index","a","b","f","t","it","items","computed","DestroyRef","inject","signal","injectBitHistory","store","useBitStore","destroyRef","inject","DestroyRef","meta","signal","sub","computed","signal","computed","DestroyRef","inject","errorsEqual","a","b","keysA","keysB","k","injectBitScope","scopeName","store","useBitStore","initialStatus","status","signal","unsubscribe","newStatus","current","inject","DestroyRef","validate","valid","errors","getErrors","isValid","computed","isDirty","signal","computed","DestroyRef","inject","errorsEqual","a","b","keysA","keysB","k","injectBitSteps","scopeNames","store","useBitStore","stepIndex","signal","scope","computed","getCurrentScope","status","updateStatus","scopeName","newStatus","current","unsubscribe","inject","DestroyRef","validate","valid","errors","getErrors","next","scopeFields","newIndex","pathsWithErrors","prev","goTo","targetStep","step","isFirst","isLast","isValid","isDirty","DestroyRef","signal","inject","injectBitWatch","path","store","useBitStore","destroyRef","inject","DestroyRef","valueSig","signal","getDeepValue","deepEqual","unsub","v","computed","inject","injectBitUpload","fieldPath","uploadFn","deleteFile","store","inject","BIT_STORE_TOKEN","field","injectBitField","uploadKey","upload","file","result","error","message","remove","computed"]}
@@ -0,0 +1,141 @@
1
+ interface BitMask {
2
+ format: (value: any) => string;
3
+ parse: (value: string) => any;
4
+ }
5
+ interface PatternMaskOptions {
6
+ allowChars?: string;
7
+ customParse?: (value: string) => any;
8
+ saveRaw?: boolean;
9
+ guide?: boolean;
10
+ placeholderChar?: string;
11
+ }
12
+ interface CurrencyMaskConfig {
13
+ prefix?: string;
14
+ suffix?: string;
15
+ thousand: string;
16
+ decimal: string;
17
+ precision?: number;
18
+ allowNegative?: boolean;
19
+ saveRaw?: boolean;
20
+ }
21
+ interface DateMaskConfig extends PatternMaskOptions {
22
+ format?: "DD/MM/YYYY" | "YYYY-MM-DD";
23
+ }
24
+
25
+ type DeepPartial<T> = T extends object ? {
26
+ [P in keyof T]?: DeepPartial<T[P]>;
27
+ } : T;
28
+ type BitErrors<T> = {
29
+ [key: string]: string | undefined;
30
+ };
31
+ type BitTouched<T> = {
32
+ [key: string]: boolean | undefined;
33
+ };
34
+ type BitComputedFn<T> = (values: T) => any;
35
+ type BitTransformFn<T> = (value: any, allValues: T) => any;
36
+ interface BitState<T> {
37
+ values: T;
38
+ errors: BitErrors<T>;
39
+ touched: BitTouched<T>;
40
+ isValidating: Record<string, boolean>;
41
+ isValid: boolean;
42
+ isSubmitting: boolean;
43
+ isDirty: boolean;
44
+ }
45
+ type ValidatorFn<T> = (values: T, options?: {
46
+ scopeFields?: string[];
47
+ }) => Promise<BitErrors<T>> | BitErrors<T>;
48
+ /** Conditional logic: visibility and dynamic required. */
49
+ interface BitFieldConditional<T extends object = any> {
50
+ dependsOn?: string[];
51
+ showIf?: (values: T) => boolean;
52
+ requiredIf?: (values: T) => boolean;
53
+ /** Custom message when field is required but empty. Fallback: "required field". */
54
+ requiredMessage?: string;
55
+ }
56
+ /** Field-level validation: async validation only. */
57
+ interface BitFieldValidation<T extends object = any> {
58
+ asyncValidate?: (value: any, values: T) => Promise<string | null | undefined>;
59
+ asyncValidateDelay?: number;
60
+ }
61
+ /** Full field definition: conditional, validation, transform, computed, mask, scope. */
62
+ interface BitFieldDefinition<T extends object = any> {
63
+ conditional?: BitFieldConditional<T>;
64
+ validation?: BitFieldValidation<T>;
65
+ transform?: BitTransformFn<T>;
66
+ computed?: BitComputedFn<T>;
67
+ /** Mask name (from registry) or BitMask instance. */
68
+ mask?: BitMask | string;
69
+ /** Scope name (e.g. wizard step). */
70
+ scope?: string;
71
+ }
72
+ interface DevToolsOptions {
73
+ enabled?: boolean;
74
+ mode?: "local" | "remote";
75
+ url?: string;
76
+ }
77
+ /** Validation config. */
78
+ interface BitValidationConfig<T> {
79
+ resolver?: ValidatorFn<T>;
80
+ delay?: number;
81
+ }
82
+ /** History config. */
83
+ interface BitHistoryConfig {
84
+ enabled?: boolean;
85
+ limit?: number;
86
+ }
87
+ /**
88
+ * BitConfig - store configuration.
89
+ * @see CHANGELOG for migration from features to fields in 2.0.
90
+ */
91
+ interface BitConfig<T extends object = any> {
92
+ /** Core */
93
+ name?: string;
94
+ initialValues?: T;
95
+ /** Central field config: conditional, validation, transform, computed, mask, scope. */
96
+ fields?: Record<string, BitFieldDefinition<T>>;
97
+ /** Schema-level validation */
98
+ validation?: BitValidationConfig<T>;
99
+ /** History (undo/redo) */
100
+ history?: BitHistoryConfig;
101
+ /** DevTools */
102
+ devTools?: boolean | DevToolsOptions;
103
+ }
104
+ /** Return type of BitStore.getStepStatus, used by useBitScope/injectBitScope. */
105
+ interface ScopeStatus {
106
+ hasErrors: boolean;
107
+ isDirty: boolean;
108
+ errors: Record<string, string>;
109
+ }
110
+ /** Return type of validateStep, used by useBitScope/injectBitScope. */
111
+ interface ValidateScopeResult {
112
+ valid: boolean;
113
+ errors: Record<string, string>;
114
+ }
115
+ /**
116
+ * Type-safe path utilities
117
+ *
118
+ * These are used to strengthen typing for field paths (e.g. "user.email", "items.0.name").
119
+ */
120
+ type Primitive = string | number | boolean | bigint | symbol | null | undefined;
121
+ type BitPath<T, Prefix extends string = ""> = T extends Primitive ? never : T extends readonly (infer U)[] ? Prefix extends "" ? `${number}` | `${number}.${BitPath<U>}` : `${Prefix}.${number}` | `${Prefix}.${number}.${BitPath<U>}` : {
122
+ [K in keyof T & (string | number)]: T[K] extends Primitive ? Prefix extends "" ? `${K & (string | number)}` : `${Prefix}.${K & (string | number)}` : Prefix extends "" ? `${K & (string | number)}` | `${K & (string | number)}.${BitPath<T[K]>}` : `${Prefix}.${K & (string | number)}` | `${Prefix}.${K & (string | number)}.${BitPath<T[K]>}`;
123
+ }[keyof T & (string | number)];
124
+ type BitPathValue<T, P extends string> = P extends `${infer K}.${infer Rest}` ? K extends `${number}` ? T extends readonly (infer U)[] ? BitPathValue<U, Rest> : never : K extends keyof T ? BitPathValue<T[K], Rest> : never : P extends `${number}` ? T extends readonly (infer U)[] ? U : never : P extends keyof T ? T[P] : never;
125
+ type BitArrayPath<T> = BitPath<T> extends infer P ? P extends string ? BitPathValue<T, P> extends readonly any[] ? P : never : never : never;
126
+ type BitArrayItem<A> = A extends readonly (infer U)[] ? U : A extends (infer U)[] ? U : never;
127
+
128
+ type BitBusListener = (storeId: string, newState: any) => void;
129
+ interface BitFormGlobal {
130
+ stores: Record<string, any>;
131
+ listeners: Set<BitBusListener>;
132
+ dispatch: (storeId: string, state: any) => void;
133
+ subscribe: (fn: BitBusListener) => () => void;
134
+ }
135
+
136
+ declare global {
137
+ var __BIT_FORM__: BitFormGlobal | undefined;
138
+ }
139
+ declare const bitBus: BitFormGlobal;
140
+
141
+ export { type BitConfig as B, type CurrencyMaskConfig as C, type DateMaskConfig as D, type PatternMaskOptions as P, type ScopeStatus as S, type ValidateScopeResult as V, type BitMask as a, type BitArrayItem as b, type BitArrayPath as c, type BitComputedFn as d, type BitErrors as e, type BitFieldConditional as f, type BitFieldDefinition as g, type BitFieldValidation as h, type BitHistoryConfig as i, type BitPath as j, type BitPathValue as k, type BitState as l, type BitTouched as m, type BitTransformFn as n, type BitValidationConfig as o, type DeepPartial as p, type ValidatorFn as q, bitBus as r, type DevToolsOptions as s };
@@ -0,0 +1,141 @@
1
+ interface BitMask {
2
+ format: (value: any) => string;
3
+ parse: (value: string) => any;
4
+ }
5
+ interface PatternMaskOptions {
6
+ allowChars?: string;
7
+ customParse?: (value: string) => any;
8
+ saveRaw?: boolean;
9
+ guide?: boolean;
10
+ placeholderChar?: string;
11
+ }
12
+ interface CurrencyMaskConfig {
13
+ prefix?: string;
14
+ suffix?: string;
15
+ thousand: string;
16
+ decimal: string;
17
+ precision?: number;
18
+ allowNegative?: boolean;
19
+ saveRaw?: boolean;
20
+ }
21
+ interface DateMaskConfig extends PatternMaskOptions {
22
+ format?: "DD/MM/YYYY" | "YYYY-MM-DD";
23
+ }
24
+
25
+ type DeepPartial<T> = T extends object ? {
26
+ [P in keyof T]?: DeepPartial<T[P]>;
27
+ } : T;
28
+ type BitErrors<T> = {
29
+ [key: string]: string | undefined;
30
+ };
31
+ type BitTouched<T> = {
32
+ [key: string]: boolean | undefined;
33
+ };
34
+ type BitComputedFn<T> = (values: T) => any;
35
+ type BitTransformFn<T> = (value: any, allValues: T) => any;
36
+ interface BitState<T> {
37
+ values: T;
38
+ errors: BitErrors<T>;
39
+ touched: BitTouched<T>;
40
+ isValidating: Record<string, boolean>;
41
+ isValid: boolean;
42
+ isSubmitting: boolean;
43
+ isDirty: boolean;
44
+ }
45
+ type ValidatorFn<T> = (values: T, options?: {
46
+ scopeFields?: string[];
47
+ }) => Promise<BitErrors<T>> | BitErrors<T>;
48
+ /** Conditional logic: visibility and dynamic required. */
49
+ interface BitFieldConditional<T extends object = any> {
50
+ dependsOn?: string[];
51
+ showIf?: (values: T) => boolean;
52
+ requiredIf?: (values: T) => boolean;
53
+ /** Custom message when field is required but empty. Fallback: "required field". */
54
+ requiredMessage?: string;
55
+ }
56
+ /** Field-level validation: async validation only. */
57
+ interface BitFieldValidation<T extends object = any> {
58
+ asyncValidate?: (value: any, values: T) => Promise<string | null | undefined>;
59
+ asyncValidateDelay?: number;
60
+ }
61
+ /** Full field definition: conditional, validation, transform, computed, mask, scope. */
62
+ interface BitFieldDefinition<T extends object = any> {
63
+ conditional?: BitFieldConditional<T>;
64
+ validation?: BitFieldValidation<T>;
65
+ transform?: BitTransformFn<T>;
66
+ computed?: BitComputedFn<T>;
67
+ /** Mask name (from registry) or BitMask instance. */
68
+ mask?: BitMask | string;
69
+ /** Scope name (e.g. wizard step). */
70
+ scope?: string;
71
+ }
72
+ interface DevToolsOptions {
73
+ enabled?: boolean;
74
+ mode?: "local" | "remote";
75
+ url?: string;
76
+ }
77
+ /** Validation config. */
78
+ interface BitValidationConfig<T> {
79
+ resolver?: ValidatorFn<T>;
80
+ delay?: number;
81
+ }
82
+ /** History config. */
83
+ interface BitHistoryConfig {
84
+ enabled?: boolean;
85
+ limit?: number;
86
+ }
87
+ /**
88
+ * BitConfig - store configuration.
89
+ * @see CHANGELOG for migration from features to fields in 2.0.
90
+ */
91
+ interface BitConfig<T extends object = any> {
92
+ /** Core */
93
+ name?: string;
94
+ initialValues?: T;
95
+ /** Central field config: conditional, validation, transform, computed, mask, scope. */
96
+ fields?: Record<string, BitFieldDefinition<T>>;
97
+ /** Schema-level validation */
98
+ validation?: BitValidationConfig<T>;
99
+ /** History (undo/redo) */
100
+ history?: BitHistoryConfig;
101
+ /** DevTools */
102
+ devTools?: boolean | DevToolsOptions;
103
+ }
104
+ /** Return type of BitStore.getStepStatus, used by useBitScope/injectBitScope. */
105
+ interface ScopeStatus {
106
+ hasErrors: boolean;
107
+ isDirty: boolean;
108
+ errors: Record<string, string>;
109
+ }
110
+ /** Return type of validateStep, used by useBitScope/injectBitScope. */
111
+ interface ValidateScopeResult {
112
+ valid: boolean;
113
+ errors: Record<string, string>;
114
+ }
115
+ /**
116
+ * Type-safe path utilities
117
+ *
118
+ * These are used to strengthen typing for field paths (e.g. "user.email", "items.0.name").
119
+ */
120
+ type Primitive = string | number | boolean | bigint | symbol | null | undefined;
121
+ type BitPath<T, Prefix extends string = ""> = T extends Primitive ? never : T extends readonly (infer U)[] ? Prefix extends "" ? `${number}` | `${number}.${BitPath<U>}` : `${Prefix}.${number}` | `${Prefix}.${number}.${BitPath<U>}` : {
122
+ [K in keyof T & (string | number)]: T[K] extends Primitive ? Prefix extends "" ? `${K & (string | number)}` : `${Prefix}.${K & (string | number)}` : Prefix extends "" ? `${K & (string | number)}` | `${K & (string | number)}.${BitPath<T[K]>}` : `${Prefix}.${K & (string | number)}` | `${Prefix}.${K & (string | number)}.${BitPath<T[K]>}`;
123
+ }[keyof T & (string | number)];
124
+ type BitPathValue<T, P extends string> = P extends `${infer K}.${infer Rest}` ? K extends `${number}` ? T extends readonly (infer U)[] ? BitPathValue<U, Rest> : never : K extends keyof T ? BitPathValue<T[K], Rest> : never : P extends `${number}` ? T extends readonly (infer U)[] ? U : never : P extends keyof T ? T[P] : never;
125
+ type BitArrayPath<T> = BitPath<T> extends infer P ? P extends string ? BitPathValue<T, P> extends readonly any[] ? P : never : never : never;
126
+ type BitArrayItem<A> = A extends readonly (infer U)[] ? U : A extends (infer U)[] ? U : never;
127
+
128
+ type BitBusListener = (storeId: string, newState: any) => void;
129
+ interface BitFormGlobal {
130
+ stores: Record<string, any>;
131
+ listeners: Set<BitBusListener>;
132
+ dispatch: (storeId: string, state: any) => void;
133
+ subscribe: (fn: BitBusListener) => () => void;
134
+ }
135
+
136
+ declare global {
137
+ var __BIT_FORM__: BitFormGlobal | undefined;
138
+ }
139
+ declare const bitBus: BitFormGlobal;
140
+
141
+ export { type BitConfig as B, type CurrencyMaskConfig as C, type DateMaskConfig as D, type PatternMaskOptions as P, type ScopeStatus as S, type ValidateScopeResult as V, type BitMask as a, type BitArrayItem as b, type BitArrayPath as c, type BitComputedFn as d, type BitErrors as e, type BitFieldConditional as f, type BitFieldDefinition as g, type BitFieldValidation as h, type BitHistoryConfig as i, type BitPath as j, type BitPathValue as k, type BitState as l, type BitTouched as m, type BitTransformFn as n, type BitValidationConfig as o, type DeepPartial as p, type ValidatorFn as q, bitBus as r, type DevToolsOptions as s };