@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/vue/context.ts","../../src/vue/use-bit-form.ts","../../src/vue/use-bit-field.ts","../../src/vue/use-bit-array.ts","../../src/vue/use-bit-history.ts","../../src/vue/use-bit-scope.ts","../../src/vue/use-bit-steps.ts","../../src/vue/use-bit-watch.ts","../../src/vue/use-bit-upload.ts"],"sourcesContent":["import { inject, provide, InjectionKey } from \"vue\";\nimport { BitStore } from \"../core/store\";\n\n// Chave única para evitar colisões\nexport const BIT_STORE_KEY: InjectionKey<BitStore<any>> = Symbol(\"BIT_STORE\");\n\nexport function provideBitStore(store: BitStore<any>) {\n provide(BIT_STORE_KEY, store);\n}\n\nexport function useBitStore<T extends object>() {\n const store = inject(BIT_STORE_KEY);\n if (!store)\n throw new Error(\n \"BitForm Vue hooks devem ser usados sob um provideBitStore\",\n );\n return store as BitStore<T>;\n}\n","import { computed, onUnmounted, shallowRef, ref } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport { isValidationErrorShape, extractServerErrors } from \"../core/utils\";\n\nexport function useBitForm<T extends object>() {\n const store = useBitStore<T>();\n const state = shallowRef(store.getState());\n const submitError = ref<Error | null>(null);\n const lastResponse = ref<unknown>(null);\n\n const unsubscribe = store.subscribe(() => {\n state.value = { ...store.getState() };\n });\n\n onUnmounted(unsubscribe);\n\n const getValues = () => state.value.values;\n const getErrors = () => state.value.errors;\n const getTouched = () => state.value.touched;\n const getDirtyValues = () => store.getDirtyValues();\n\n const isValid = computed(() => state.value.isValid);\n const isSubmitting = computed(() => state.value.isSubmitting);\n const isDirty = computed(() => state.value.isDirty);\n\n const onSubmit = (\n handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>,\n ) => {\n return (e?: Event) => {\n e?.preventDefault?.();\n submitError.value = null;\n return store.submit(async (values, dirtyValues) => {\n try {\n const result = await handler(values, dirtyValues);\n lastResponse.value = result;\n submitError.value = null;\n } catch (err) {\n if (isValidationErrorShape(err)) {\n store.setServerErrors(extractServerErrors(err));\n } else {\n submitError.value =\n err instanceof Error ? err : new Error(String(err));\n }\n }\n });\n };\n };\n\n const reset = () => {\n store.reset();\n submitError.value = null;\n lastResponse.value = null;\n };\n\n const meta = {\n isValid,\n isDirty,\n isSubmitting,\n submitError,\n lastResponse,\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 onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>,\n ) => {\n return (e?: Event) => {\n e?.preventDefault?.();\n return store.submit(onSuccess);\n };\n },\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 { computed, onUnmounted, shallowRef } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport { BitFieldOptions, BitFieldDefinition, getDeepValue } from \"../core\";\n\nexport interface UseBitFieldVueMeta {\n error: Readonly<any>;\n touched: Readonly<any>;\n invalid: Readonly<any>;\n isValidating: Readonly<any>;\n isDirty: Readonly<any>;\n isHidden: Readonly<any>;\n isRequired: Readonly<any>;\n hasError: Readonly<any>;\n}\n\nexport interface UseBitFieldVueResult<TValue = any> {\n // Main handlers and values (flat)\n value: Readonly<any>;\n displayValue: Readonly<any>;\n modelValue: any;\n setValue: (val: any) => void;\n setBlur: () => void;\n onInput: (val: any) => void;\n onBlur: () => void;\n // Metadata (grouped)\n meta: UseBitFieldVueMeta;\n}\n\nexport function useBitField<TValue = any>(\n path: string,\n config?: BitFieldDefinition<any>,\n options?: BitFieldOptions,\n): UseBitFieldVueResult<TValue> {\n const store = useBitStore<any>();\n\n if (config) {\n store.registerField(path as string, config as any);\n }\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 state = shallowRef(store.getState());\n\n const unsubscribe = store.subscribe(() => {\n state.value = store.getState();\n });\n\n onUnmounted(() => {\n unsubscribe();\n if (store.unregisterField) {\n store.unregisterField(path as string);\n }\n });\n\n const rawValue = computed(\n () => getDeepValue(state.value.values, path as string) as TValue,\n );\n\n const displayValue = computed(() => {\n const val = rawValue.value;\n if (val === undefined || val === null || val === \"\") return \"\";\n\n return resolvedMask ? resolvedMask.format(val as any) : String(val);\n });\n\n const modelValue = computed({\n get: () => displayValue.value,\n set: (val: any) => {\n if (!resolvedMask) {\n store.setField(path, val);\n return;\n }\n\n store.setField(path, resolvedMask.parse(String(val ?? \"\")));\n },\n });\n\n const rawError = computed(() => state.value.errors[path]);\n const error = computed(() =>\n state.value.touched[path] ? state.value.errors[path] : undefined,\n );\n const touched = computed(() => !!state.value.touched[path]);\n const invalid = computed(() => !!(touched.value && error.value));\n\n const isValidating = computed(() => {\n state.value;\n return store.isFieldValidating(path);\n });\n\n const isDirty = computed(() => {\n state.value;\n return store.isFieldDirty(path);\n });\n\n const isHidden = computed(() => {\n state.value;\n return store.isHidden(path);\n });\n\n const isRequired = computed(() => {\n state.value;\n return store.isRequired(path);\n });\n\n const hasError = computed(() => !!rawError.value);\n\n const setValue = (val: any) => {\n modelValue.value = val;\n };\n\n const setBlur = () => store.blurField(path);\n\n const onInput = (val: any) => {\n setValue(val);\n };\n\n const onBlur = () => {\n setBlur();\n };\n\n return {\n // Main handlers and values (flat)\n value: rawValue,\n displayValue,\n modelValue,\n setValue,\n setBlur,\n onInput,\n onBlur,\n // Metadata (grouped)\n meta: {\n error,\n touched,\n invalid,\n isValidating,\n isDirty,\n isHidden,\n isRequired,\n hasError,\n },\n };\n}\n","import { ref, computed, onUnmounted } from \"vue\";\nimport { useBitStore } from \"./context\";\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 useBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = useBitStore<TForm>();\n\n type Item = BitArrayItem<BitPathValue<TForm, P>>;\n\n const getSnapshot = (): Item[] => {\n const val = getDeepValue(\n store.getState().values,\n path as string,\n ) as BitPathValue<TForm, P> | undefined;\n return Array.isArray(val) ? (val as Item[]) : [];\n };\n\n const initialValues = getSnapshot();\n const values = ref<Item[]>(initialValues);\n const ids = ref<string[]>(initialValues.map(generateId));\n\n const unsubscribe = store.subscribe(() => {\n const newValues = getSnapshot();\n values.value = [...newValues];\n\n if (newValues.length !== ids.value.length) {\n const currentIds = [...ids.value];\n if (newValues.length > currentIds.length) {\n const diff = newValues.length - currentIds.length;\n const newIds = Array.from({ length: diff }, generateId);\n ids.value = [...currentIds, ...newIds];\n } else {\n ids.value = currentIds.slice(0, newValues.length);\n }\n }\n });\n\n onUnmounted(() => {\n unsubscribe();\n if (store.unregisterPrefix) {\n store.unregisterPrefix(`${path as string}.`);\n }\n });\n\n const fields = computed(() =>\n values.value.map((v, i) => ({\n key: ids.value[i] || `temp-${i}`,\n value: v,\n index: i,\n })),\n );\n\n const length = computed(() => values.value.length);\n\n return {\n fields,\n length,\n append: (val: Item) => {\n ids.value.push(generateId());\n store.pushItem(path, val);\n },\n prepend: (val: Item) => {\n ids.value.unshift(generateId());\n store.prependItem(path, val);\n },\n insert: (index: number, val: Item) => {\n ids.value.splice(index, 0, generateId());\n store.insertItem(path, index, val);\n },\n remove: (index: number) => {\n ids.value.splice(index, 1);\n store.removeItem(path, index);\n },\n move: (from: number, to: number) => {\n const currentIds = [...ids.value];\n const [id] = currentIds.splice(from, 1);\n currentIds.splice(to, 0, id);\n ids.value = currentIds;\n store.moveItem(path, from, to);\n },\n swap: (a: number, b: number) => {\n const currentIds = [...ids.value];\n [currentIds[a], currentIds[b]] = [currentIds[b], currentIds[a]];\n ids.value = currentIds;\n store.swapItems(path, a, b);\n },\n replace: (items: Item[]) => {\n ids.value = items.map(generateId);\n store.setField(path as unknown as BitPath<TForm>, items as any);\n },\n clear: () => {\n ids.value = [];\n store.setField(path as unknown as BitPath<TForm>, [] as any);\n },\n };\n}\n","import { computed, onUnmounted, shallowRef } from \"vue\";\nimport { useBitStore } from \"./context\";\n\nexport interface UseBitHistoryResult {\n canUndo: import(\"vue\").ComputedRef<boolean>;\n canRedo: import(\"vue\").ComputedRef<boolean>;\n historyIndex: import(\"vue\").ComputedRef<number>;\n historySize: import(\"vue\").ComputedRef<number>;\n undo: () => void;\n redo: () => void;\n}\n\nexport function useBitHistory<T extends object = any>(): UseBitHistoryResult {\n const store = useBitStore<T>();\n\n const meta = shallowRef(store.getHistoryMetadata());\n\n const unsubscribe = store.subscribe(() => {\n meta.value = store.getHistoryMetadata();\n });\n\n onUnmounted(unsubscribe);\n\n const undo = () => store.undo();\n const redo = () => store.redo();\n\n return {\n canUndo: computed(() => meta.value.canUndo),\n canRedo: computed(() => meta.value.canRedo),\n historyIndex: computed(() => meta.value.historyIndex),\n historySize: computed(() => meta.value.historySize),\n undo,\n redo,\n };\n}\n","import { ref, computed, onMounted, onUnmounted } from \"vue\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./context\";\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 useBitScope(scopeName: string) {\n const store = useBitStore();\n const status = ref<ScopeStatus>(store.getStepStatus(scopeName));\n let unsubscribe: () => void;\n\n onMounted(() => {\n unsubscribe = store.subscribe(() => {\n const newStatus = store.getStepStatus(scopeName);\n if (\n newStatus.hasErrors !== status.value.hasErrors ||\n newStatus.isDirty !== status.value.isDirty ||\n !errorsEqual(newStatus.errors, status.value.errors)\n ) {\n status.value = newStatus;\n }\n });\n });\n\n onUnmounted(() => {\n unsubscribe?.();\n });\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.value.hasErrors);\n const isDirty = computed(() => status.value.isDirty);\n const errors = computed(() => status.value.errors);\n\n return {\n scopeName,\n status,\n errors,\n validate,\n getErrors,\n isValid,\n isDirty,\n };\n}\n","import { ref, computed, watch, onMounted, onUnmounted } from \"vue\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./context\";\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 UseBitStepsResult {\n step: import(\"vue\").ComputedRef<number>;\n stepIndex: import(\"vue\").Ref<number>;\n scope: import(\"vue\").ComputedRef<string>;\n next: () => Promise<boolean>;\n prev: () => void;\n goTo: (step: number) => void;\n isFirst: import(\"vue\").ComputedRef<boolean>;\n isLast: import(\"vue\").ComputedRef<boolean>;\n status: import(\"vue\").Ref<ScopeStatus>;\n errors: import(\"vue\").ComputedRef<Record<string, string>>;\n isValid: import(\"vue\").ComputedRef<boolean>;\n isDirty: import(\"vue\").ComputedRef<boolean>;\n validate: () => Promise<ValidateScopeResult>;\n getErrors: () => Record<string, string>;\n}\n\nexport function useBitSteps(scopeNames: string[]): UseBitStepsResult {\n const store = useBitStore();\n const stepIndex = ref(0);\n\n const scope = computed(() => scopeNames[stepIndex.value] ?? \"\");\n const status = ref<ScopeStatus>(store.getStepStatus(scope.value));\n let unsubscribe: () => void;\n\n watch(scope, (newScope) => {\n status.value = store.getStepStatus(newScope);\n });\n\n const updateStatus = () => {\n const scopeName = scope.value;\n const newStatus = store.getStepStatus(scopeName);\n if (\n newStatus.hasErrors !== status.value.hasErrors ||\n newStatus.isDirty !== status.value.isDirty ||\n !errorsEqual(newStatus.errors, status.value.errors)\n ) {\n status.value = newStatus;\n }\n };\n\n onMounted(() => {\n unsubscribe = store.subscribe(updateStatus);\n });\n\n onUnmounted(() => {\n unsubscribe?.();\n });\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const scopeName = scope.value;\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(scope.value);\n\n const next = async (): Promise<boolean> => {\n const scopeName = scope.value;\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 stepIndex.value = Math.min(stepIndex.value + 1, scopeNames.length - 1);\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 stepIndex.value = Math.max(stepIndex.value - 1, 0);\n };\n\n const goTo = (targetStep: number) => {\n stepIndex.value = Math.max(\n 0,\n Math.min(targetStep - 1, scopeNames.length - 1),\n );\n };\n\n const step = computed(() => stepIndex.value + 1);\n const isFirst = computed(() => stepIndex.value === 0);\n const isLast = computed(() => stepIndex.value >= scopeNames.length - 1);\n const isValid = computed(() => !status.value.hasErrors);\n const isDirty = computed(() => status.value.isDirty);\n const errors = computed(() => status.value.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 { ref, onUnmounted, readonly } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport {\n getDeepValue,\n deepEqual,\n BitPath,\n BitPathValue,\n} from \"../core\";\n\nexport function useBitWatch<\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P) {\n const store = useBitStore<TForm>();\n const initialValue = getDeepValue(\n store.getState().values,\n path as string,\n ) as BitPathValue<TForm, P>;\n const value = ref<BitPathValue<TForm, P>>(initialValue);\n\n const unsubscribe = store.watch(path, (newValue) => {\n if (!deepEqual(value.value, newValue)) {\n value.value = newValue as BitPathValue<TForm, P>;\n }\n });\n\n onUnmounted(unsubscribe);\n\n return readonly(value);\n}\n","/**\n * Vue Composition API for File Upload\n *\n * Minimal upload API integrated with global field validation lifecycle.\n */\n\nimport { computed, ComputedRef } from \"vue\";\nimport { useBitField } from \"./use-bit-field\";\nimport { useBitStore } from \"./context\";\nimport { BitUploadFn, BitDeleteUploadFn } from \"../core/upload/types\";\n\nexport interface UseBitUploadResult {\n value: ComputedRef<string | File | null>;\n setValue: (value: string | File | null) => void;\n error: ComputedRef<string | undefined>;\n isValidating: ComputedRef<boolean>;\n upload: (file: File | null | undefined) => Promise<void>;\n remove: () => Promise<void>;\n}\n\nexport function useBitUpload(\n fieldPath: string,\n uploadFn: BitUploadFn,\n deleteFile?: BitDeleteUploadFn,\n): UseBitUploadResult {\n const store = useBitStore<any>();\n const field = useBitField(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: field.value as ComputedRef<string | File | null>,\n setValue: field.setValue,\n error: computed(() => field.meta.error.value),\n isValidating: computed(() => field.meta.isValidating.value || false),\n upload,\n remove,\n };\n}\n"],"mappings":"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","names":["inject","provide","BIT_STORE_KEY","provideBitStore","store","useBitStore","computed","onUnmounted","shallowRef","ref","useBitForm","store","useBitStore","state","shallowRef","submitError","ref","lastResponse","unsubscribe","onUnmounted","getValues","getErrors","getTouched","getDirtyValues","isValid","computed","isSubmitting","isDirty","onSuccess","e","handler","values","dirtyValues","result","err","isValidationErrorShape","extractServerErrors","computed","onUnmounted","shallowRef","useBitField","path","config","options","store","useBitStore","maskOption","resolvedMask","state","shallowRef","unsubscribe","onUnmounted","rawValue","computed","getDeepValue","displayValue","val","modelValue","rawError","error","touched","invalid","isValidating","isDirty","isHidden","isRequired","hasError","setValue","setBlur","ref","computed","onUnmounted","generateId","useBitArray","path","store","useBitStore","getSnapshot","val","getDeepValue","initialValues","values","ref","ids","unsubscribe","newValues","currentIds","diff","newIds","onUnmounted","fields","computed","v","i","length","index","from","to","id","a","b","items","computed","onUnmounted","shallowRef","useBitHistory","store","useBitStore","meta","shallowRef","unsubscribe","onUnmounted","undo","redo","computed","ref","computed","onMounted","onUnmounted","errorsEqual","a","b","keysA","keysB","k","useBitScope","scopeName","store","useBitStore","status","ref","unsubscribe","onMounted","newStatus","onUnmounted","validate","valid","errors","getErrors","isValid","computed","isDirty","ref","computed","watch","onMounted","onUnmounted","errorsEqual","a","b","keysA","keysB","k","useBitSteps","scopeNames","store","useBitStore","stepIndex","ref","scope","computed","status","unsubscribe","watch","newScope","updateStatus","scopeName","newStatus","onMounted","onUnmounted","validate","valid","errors","getErrors","next","scopeFields","pathsWithErrors","prev","goTo","targetStep","step","isFirst","isLast","isValid","isDirty","ref","onUnmounted","readonly","useBitWatch","path","store","useBitStore","initialValue","getDeepValue","value","ref","unsubscribe","newValue","deepEqual","onUnmounted","readonly","computed","useBitUpload","fieldPath","uploadFn","deleteFile","store","useBitStore","field","useBitField","uploadKey","upload","file","result","error","message","remove","computed"]}
1
+ {"version":3,"sources":["../../src/vue/context.ts","../../src/vue/use-bit-form.ts","../../src/vue/use-bit-field.ts","../../src/vue/use-bit-array.ts","../../src/vue/use-bit-history.ts","../../src/vue/use-bit-scope.ts","../../src/vue/use-bit-steps.ts","../../src/vue/use-bit-watch.ts","../../src/vue/use-bit-upload.ts"],"sourcesContent":["import { inject, provide, InjectionKey } from \"vue\";\nimport type { BitFrameworkStore } from \"../core\";\n\n// Chave única para evitar colisões\nexport const BIT_STORE_KEY: InjectionKey<BitFrameworkStore<any>> =\n Symbol(\"BIT_STORE\");\n\nexport function provideBitStore<T extends object>(store: BitFrameworkStore<T>) {\n provide(BIT_STORE_KEY, store);\n}\n\nexport function useBitStore<T extends object>() {\n const store = inject(BIT_STORE_KEY);\n if (!store)\n throw new Error(\n \"BitForm Vue hooks devem ser usados sob um provideBitStore\",\n );\n return store as BitFrameworkStore<T>;\n}\n","import { computed, onUnmounted, shallowRef, ref } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport { isValidationErrorShape, extractServerErrors } from \"../core/utils\";\n\nexport function useBitForm<T extends object>() {\n const store = useBitStore<T>();\n const state = shallowRef(store.getState());\n const submitError = ref<Error | null>(null);\n const lastResponse = ref<unknown>(null);\n\n const unsubscribe = store.subscribe(() => {\n state.value = { ...store.getState() };\n });\n\n onUnmounted(unsubscribe);\n\n const getValues = () => state.value.values;\n const getErrors = () => state.value.errors;\n const getTouched = () => state.value.touched;\n const getDirtyValues = () => store.getDirtyValues();\n\n const isValid = computed(() => state.value.isValid);\n const isSubmitting = computed(() => state.value.isSubmitting);\n const isDirty = computed(() => state.value.isDirty);\n\n const onSubmit = (\n handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>,\n ) => {\n return (e?: Event) => {\n e?.preventDefault?.();\n submitError.value = null;\n return store.submit(async (values, dirtyValues) => {\n try {\n const result = await handler(values, dirtyValues);\n lastResponse.value = result;\n submitError.value = null;\n } catch (err) {\n if (isValidationErrorShape(err)) {\n store.setServerErrors(extractServerErrors(err));\n } else {\n submitError.value =\n err instanceof Error ? err : new Error(String(err));\n }\n }\n });\n };\n };\n\n const reset = () => {\n store.reset();\n submitError.value = null;\n lastResponse.value = null;\n };\n\n const meta = {\n isValid,\n isDirty,\n isSubmitting,\n submitError,\n lastResponse,\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 onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>,\n ) => {\n return (e?: Event) => {\n e?.preventDefault?.();\n return store.submit(onSuccess);\n };\n },\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 { computed, onUnmounted, shallowRef } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport { getDeepValue } from \"../core\";\nimport type { UseBitFieldVueMeta, UseBitFieldVueResult } from \"./types\";\n\nexport function useBitField<TValue = any>(\n path: string,\n): UseBitFieldVueResult<TValue> {\n const store = useBitStore<any>();\n\n const resolvedMask = store.resolveMask(path as string);\n\n const state = shallowRef(store.getState());\n\n const unsubscribe = store.subscribe(() => {\n state.value = store.getState();\n });\n\n onUnmounted(() => {\n unsubscribe();\n if (store.unregisterField) {\n store.unregisterField(path as string);\n }\n });\n\n const rawValue = computed(\n () => getDeepValue(state.value.values, path as string) as TValue,\n );\n\n const displayValue = computed(() => {\n const val = rawValue.value;\n if (val === undefined || val === null || val === \"\") return \"\";\n\n return resolvedMask ? resolvedMask.format(val as any) : String(val);\n });\n\n const modelValue = computed({\n get: () => displayValue.value,\n set: (val: any) => {\n if (!resolvedMask) {\n store.setField(path, val);\n return;\n }\n\n store.setField(path, resolvedMask.parse(String(val ?? \"\")));\n },\n });\n\n const rawError = computed(() => state.value.errors[path]);\n const error = computed(() =>\n state.value.touched[path] ? state.value.errors[path] : undefined,\n );\n const touched = computed(() => !!state.value.touched[path]);\n const invalid = computed(() => !!(touched.value && error.value));\n\n const isValidating = computed(() => {\n state.value;\n return store.isFieldValidating(path);\n });\n\n const isDirty = computed(() => {\n state.value;\n return store.isFieldDirty(path);\n });\n\n const isHidden = computed(() => {\n state.value;\n return store.isHidden(path);\n });\n\n const isRequired = computed(() => {\n state.value;\n return store.isRequired(path);\n });\n\n const hasError = computed(() => !!rawError.value);\n\n const setValue = (val: any) => {\n modelValue.value = val;\n };\n\n const setBlur = () => store.blurField(path);\n\n const onInput = (val: any) => {\n setValue(val);\n };\n\n const onBlur = () => {\n setBlur();\n };\n\n return {\n // Main handlers and values (flat)\n value: rawValue,\n displayValue,\n modelValue,\n setValue,\n setBlur,\n onInput,\n onBlur,\n // Metadata (grouped)\n meta: {\n error,\n touched,\n invalid,\n isValidating,\n isDirty,\n isHidden,\n isRequired,\n hasError,\n },\n };\n}\n","import { ref, computed, onUnmounted } from \"vue\";\nimport { useBitStore } from \"./context\";\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 useBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = useBitStore<TForm>();\n\n type Item = BitArrayItem<BitPathValue<TForm, P>>;\n\n const getSnapshot = (): Item[] => {\n const val = getDeepValue(\n store.getState().values,\n path as string,\n ) as BitPathValue<TForm, P> | undefined;\n return Array.isArray(val) ? (val as Item[]) : [];\n };\n\n const initialValues = getSnapshot();\n const values = ref<Item[]>(initialValues);\n const ids = ref<string[]>(initialValues.map(generateId));\n\n const unsubscribe = store.subscribe(() => {\n const newValues = getSnapshot();\n values.value = [...newValues];\n\n if (newValues.length !== ids.value.length) {\n const currentIds = [...ids.value];\n if (newValues.length > currentIds.length) {\n const diff = newValues.length - currentIds.length;\n const newIds = Array.from({ length: diff }, generateId);\n ids.value = [...currentIds, ...newIds];\n } else {\n ids.value = currentIds.slice(0, newValues.length);\n }\n }\n });\n\n onUnmounted(() => {\n unsubscribe();\n if (store.unregisterPrefix) {\n store.unregisterPrefix(`${path as string}.`);\n }\n });\n\n const fields = computed(() =>\n values.value.map((v, i) => ({\n key: ids.value[i] || `temp-${i}`,\n value: v,\n index: i,\n })),\n );\n\n const length = computed(() => values.value.length);\n\n return {\n fields,\n length,\n append: (val: Item) => {\n ids.value.push(generateId());\n store.pushItem(path, val);\n },\n prepend: (val: Item) => {\n ids.value.unshift(generateId());\n store.prependItem(path, val);\n },\n insert: (index: number, val: Item) => {\n ids.value.splice(index, 0, generateId());\n store.insertItem(path, index, val);\n },\n remove: (index: number) => {\n ids.value.splice(index, 1);\n store.removeItem(path, index);\n },\n move: (from: number, to: number) => {\n const currentIds = [...ids.value];\n const [id] = currentIds.splice(from, 1);\n currentIds.splice(to, 0, id);\n ids.value = currentIds;\n store.moveItem(path, from, to);\n },\n swap: (a: number, b: number) => {\n const currentIds = [...ids.value];\n [currentIds[a], currentIds[b]] = [currentIds[b], currentIds[a]];\n ids.value = currentIds;\n store.swapItems(path, a, b);\n },\n replace: (items: Item[]) => {\n ids.value = items.map(generateId);\n store.setField(path as unknown as BitPath<TForm>, items as any);\n },\n clear: () => {\n ids.value = [];\n store.setField(path as unknown as BitPath<TForm>, [] as any);\n },\n };\n}\n","import { computed, onUnmounted, shallowRef } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitHistoryResult } from \"./types\";\n\nexport function useBitHistory<T extends object = any>(): UseBitHistoryResult {\n const store = useBitStore<T>();\n\n const meta = shallowRef(store.getHistoryMetadata());\n\n const unsubscribe = store.subscribe(() => {\n meta.value = store.getHistoryMetadata();\n });\n\n onUnmounted(unsubscribe);\n\n const undo = () => store.undo();\n const redo = () => store.redo();\n\n return {\n canUndo: computed(() => meta.value.canUndo),\n canRedo: computed(() => meta.value.canRedo),\n historyIndex: computed(() => meta.value.historyIndex),\n historySize: computed(() => meta.value.historySize),\n undo,\n redo,\n };\n}\n","import { ref, computed, onMounted, onUnmounted } from \"vue\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./context\";\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 useBitScope(scopeName: string) {\n const store = useBitStore();\n const status = ref<ScopeStatus>(store.getStepStatus(scopeName));\n let unsubscribe: () => void;\n\n onMounted(() => {\n unsubscribe = store.subscribe(() => {\n const newStatus = store.getStepStatus(scopeName);\n if (\n newStatus.hasErrors !== status.value.hasErrors ||\n newStatus.isDirty !== status.value.isDirty ||\n !errorsEqual(newStatus.errors, status.value.errors)\n ) {\n status.value = newStatus;\n }\n });\n });\n\n onUnmounted(() => {\n unsubscribe?.();\n });\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.value.hasErrors);\n const isDirty = computed(() => status.value.isDirty);\n const errors = computed(() => status.value.errors);\n\n return {\n scopeName,\n status,\n errors,\n validate,\n getErrors,\n isValid,\n isDirty,\n };\n}\n","import { ref, computed, watch, onMounted, onUnmounted } from \"vue\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitStepsResult } 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 useBitSteps(scopeNames: string[]): UseBitStepsResult {\n const store = useBitStore();\n const stepIndex = ref(0);\n\n const scope = computed(() => scopeNames[stepIndex.value] ?? \"\");\n const status = ref<ScopeStatus>(store.getStepStatus(scope.value));\n let unsubscribe: () => void;\n\n watch(scope, (newScope) => {\n status.value = store.getStepStatus(newScope);\n });\n\n const updateStatus = () => {\n const scopeName = scope.value;\n const newStatus = store.getStepStatus(scopeName);\n if (\n newStatus.hasErrors !== status.value.hasErrors ||\n newStatus.isDirty !== status.value.isDirty ||\n !errorsEqual(newStatus.errors, status.value.errors)\n ) {\n status.value = newStatus;\n }\n };\n\n onMounted(() => {\n unsubscribe = store.subscribe(updateStatus);\n });\n\n onUnmounted(() => {\n unsubscribe?.();\n });\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const scopeName = scope.value;\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(scope.value);\n\n const next = async (): Promise<boolean> => {\n const scopeName = scope.value;\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 stepIndex.value = Math.min(stepIndex.value + 1, scopeNames.length - 1);\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 stepIndex.value = Math.max(stepIndex.value - 1, 0);\n };\n\n const goTo = (targetStep: number) => {\n stepIndex.value = Math.max(\n 0,\n Math.min(targetStep - 1, scopeNames.length - 1),\n );\n };\n\n const step = computed(() => stepIndex.value + 1);\n const isFirst = computed(() => stepIndex.value === 0);\n const isLast = computed(() => stepIndex.value >= scopeNames.length - 1);\n const isValid = computed(() => !status.value.hasErrors);\n const isDirty = computed(() => status.value.isDirty);\n const errors = computed(() => status.value.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 { ref, onUnmounted, readonly } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport {\n getDeepValue,\n deepEqual,\n BitPath,\n BitPathValue,\n} from \"../core\";\n\nexport function useBitWatch<\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P) {\n const store = useBitStore<TForm>();\n const initialValue = getDeepValue(\n store.getState().values,\n path as string,\n ) as BitPathValue<TForm, P>;\n const value = ref<BitPathValue<TForm, P>>(initialValue);\n\n const unsubscribe = store.watch(path, (newValue) => {\n if (!deepEqual(value.value, newValue)) {\n value.value = newValue as BitPathValue<TForm, P>;\n }\n });\n\n onUnmounted(unsubscribe);\n\n return readonly(value);\n}\n","/**\n * Vue Composition API for File Upload\n *\n * Minimal upload API integrated with global field validation lifecycle.\n */\n\nimport { computed, ComputedRef } from \"vue\";\nimport { useBitField } from \"./use-bit-field\";\nimport { useBitStore } from \"./context\";\nimport { BitUploadFn, BitDeleteUploadFn } from \"../core\";\nimport type { UseBitUploadResult } from \"./types\";\n\nexport function useBitUpload(\n fieldPath: string,\n uploadFn: BitUploadFn,\n deleteFile?: BitDeleteUploadFn,\n): UseBitUploadResult {\n const store = useBitStore<any>();\n const field = useBitField(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: field.value as ComputedRef<string | File | null>,\n setValue: field.setValue,\n error: computed(() => field.meta.error.value),\n isValidating: computed(() => field.meta.isValidating.value || false),\n upload,\n remove,\n };\n}\n"],"mappings":"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","names":["inject","provide","BIT_STORE_KEY","provideBitStore","store","useBitStore","computed","onUnmounted","shallowRef","ref","useBitForm","store","useBitStore","state","shallowRef","submitError","ref","lastResponse","unsubscribe","onUnmounted","getValues","getErrors","getTouched","getDirtyValues","isValid","computed","isSubmitting","isDirty","onSuccess","e","handler","values","dirtyValues","result","err","isValidationErrorShape","extractServerErrors","computed","onUnmounted","shallowRef","useBitField","path","store","useBitStore","resolvedMask","state","shallowRef","unsubscribe","onUnmounted","rawValue","computed","getDeepValue","displayValue","val","modelValue","rawError","error","touched","invalid","isValidating","isDirty","isHidden","isRequired","hasError","setValue","setBlur","ref","computed","onUnmounted","generateId","useBitArray","path","store","useBitStore","getSnapshot","val","getDeepValue","initialValues","values","ref","ids","unsubscribe","newValues","currentIds","diff","newIds","onUnmounted","fields","computed","v","i","length","index","from","to","id","a","b","items","computed","onUnmounted","shallowRef","useBitHistory","store","useBitStore","meta","shallowRef","unsubscribe","onUnmounted","undo","redo","computed","ref","computed","onMounted","onUnmounted","errorsEqual","a","b","keysA","keysB","k","useBitScope","scopeName","store","useBitStore","status","ref","unsubscribe","onMounted","newStatus","onUnmounted","validate","valid","errors","getErrors","isValid","computed","isDirty","ref","computed","watch","onMounted","onUnmounted","errorsEqual","a","b","keysA","keysB","k","useBitSteps","scopeNames","store","useBitStore","stepIndex","ref","scope","computed","status","unsubscribe","watch","newScope","updateStatus","scopeName","newStatus","onMounted","onUnmounted","validate","valid","errors","getErrors","next","scopeFields","pathsWithErrors","prev","goTo","targetStep","step","isFirst","isLast","isValid","isDirty","ref","onUnmounted","readonly","useBitWatch","path","store","useBitStore","initialValue","getDeepValue","value","ref","unsubscribe","newValue","deepEqual","onUnmounted","readonly","computed","useBitUpload","fieldPath","uploadFn","deleteFile","store","useBitStore","field","useBitField","uploadKey","upload","file","result","error","message","remove","computed"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lehnihon/bit-form",
3
- "version": "2.1.0",
3
+ "version": "2.1.2",
4
4
  "description": "Gerenciamento de estado de formulários agnóstico e performático",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -84,7 +84,12 @@
84
84
  "sync": "npm run build && yalc push",
85
85
  "dev": "tsup --watch",
86
86
  "build": "tsup",
87
- "test": "vitest run",
87
+ "test": "npm run test:all",
88
+ "test:all": "vitest run",
89
+ "test:unit": "vitest run src/tests/core src/tests/devtools src/tests/resolvers",
90
+ "test:frameworks": "vitest run src/tests/frameworks",
91
+ "test:integration": "vitest run src/tests/integration",
92
+ "test:cli": "vitest run src/tests/cli",
88
93
  "test:watch": "vitest",
89
94
  "test:coverage": "vitest run --coverage",
90
95
  "clean": "rm -rf dist && rm -f *.tsbuildinfo",
@@ -1,295 +0,0 @@
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
- declare class BitDependencyManager<T extends object = any> {
26
- fieldConfigs: Map<string, BitFieldDefinition<T>>;
27
- dependencies: Map<string, Set<string>>;
28
- hiddenFields: Set<string>;
29
- register(path: string, config: BitFieldDefinition<T>, currentValues: T): void;
30
- isHidden(path: string): boolean;
31
- isRequired(path: string, values: T): boolean;
32
- getRequiredErrors(values: T): Record<string, string>;
33
- evaluateAll(values: T): void;
34
- updateDependencies(changedPath: string, newValues: T): string[];
35
- unregister(path: string): void;
36
- unregisterPrefix(prefix: string): void;
37
- private evaluateFieldCondition;
38
- private isEmpty;
39
- }
40
-
41
- declare class BitHistoryManager<T extends object = any> {
42
- private enableHistory;
43
- private maxHistory;
44
- private history;
45
- private historyIndex;
46
- constructor(enableHistory: boolean, maxHistory?: number);
47
- saveSnapshot(values: T): void;
48
- get canUndo(): boolean;
49
- get canRedo(): boolean;
50
- undo(): T | null;
51
- redo(): T | null;
52
- reset(initialValues: T): void;
53
- getMetadata(): {
54
- enabled: boolean;
55
- canUndo: boolean;
56
- canRedo: boolean;
57
- historyIndex: number;
58
- historySize: number;
59
- };
60
- }
61
-
62
- declare class BitValidationManager<T extends object> {
63
- private store;
64
- private validationTimeout?;
65
- private currentValidationId;
66
- private asyncTimers;
67
- private asyncRequests;
68
- asyncErrors: Record<string, string>;
69
- constructor(store: BitValidationAdapter<T>);
70
- private updateFieldValidating;
71
- private cancelFieldAsync;
72
- beginExternalValidation(path: string): void;
73
- endExternalValidation(path: string): void;
74
- setExternalError(path: string, message: string | undefined): Promise<void>;
75
- handleAsync(path: string, value: any): void;
76
- hasValidationsInProgress(scopeFields?: string[]): boolean;
77
- trigger(scopeFields?: string[]): void;
78
- validate(options?: {
79
- scope?: string;
80
- scopeFields?: string[];
81
- }): Promise<boolean>;
82
- clear(path: string): void;
83
- cancelAll(): void;
84
- }
85
-
86
- /**
87
- * BitDirtyManager
88
- *
89
- * Manages dirty state tracking for form fields.
90
- * Tracks which fields have been modified from their initial values.
91
- */
92
- declare class BitDirtyManager<T extends object = any> {
93
- private dirtyPaths;
94
- /**
95
- * Updates dirty state for a single path change.
96
- * Automatically removes child paths when parent changes.
97
- * @returns true if any fields are dirty
98
- */
99
- updateForPath(path: string, values: T, initialValues: T): boolean;
100
- /**
101
- * Rebuilds dirty paths from full state comparison.
102
- * Used for undo/redo and bulk updates.
103
- * @returns true if any fields are dirty
104
- */
105
- rebuild(values: T, initialValues: T): boolean;
106
- /**
107
- * Clears all dirty tracking.
108
- * Used when resetting form or updating initial values.
109
- */
110
- clear(): void;
111
- /**
112
- * Returns current dirty state.
113
- */
114
- get isDirty(): boolean;
115
- /**
116
- * Returns readonly set of dirty paths (for debugging/devtools).
117
- */
118
- getDirtyPaths(): ReadonlySet<string>;
119
- /**
120
- * Builds a partial object containing only dirty values.
121
- * For arrays, returns the entire array if any index changed.
122
- * @param values - current form values (already cleaned/transformed)
123
- */
124
- buildDirtyValues<T extends object>(values: T): Partial<T>;
125
- private getNestedValue;
126
- private setNestedValue;
127
- }
128
-
129
- type DeepPartial<T> = T extends object ? {
130
- [P in keyof T]?: DeepPartial<T[P]>;
131
- } : T;
132
- type BitErrors<T> = {
133
- [key: string]: string | undefined;
134
- };
135
- type BitTouched<T> = {
136
- [key: string]: boolean | undefined;
137
- };
138
- type BitComputedFn<T> = (values: T) => any;
139
- type BitTransformFn<T> = (value: any, allValues: T) => any;
140
- interface BitState<T> {
141
- values: T;
142
- errors: BitErrors<T>;
143
- touched: BitTouched<T>;
144
- isValidating: Record<string, boolean>;
145
- isValid: boolean;
146
- isSubmitting: boolean;
147
- isDirty: boolean;
148
- }
149
- type ValidatorFn<T> = (values: T, options?: {
150
- scopeFields?: string[];
151
- }) => Promise<BitErrors<T>> | BitErrors<T>;
152
- /** Conditional logic: visibility and dynamic required. */
153
- interface BitFieldConditional<T extends object = any> {
154
- dependsOn?: string[];
155
- showIf?: (values: T) => boolean;
156
- requiredIf?: (values: T) => boolean;
157
- /** Custom message when field is required but empty. Fallback: "required field". */
158
- requiredMessage?: string;
159
- }
160
- /** Field-level validation: async validation only. */
161
- interface BitFieldValidation<T extends object = any> {
162
- asyncValidate?: (value: any, values: T) => Promise<string | null | undefined>;
163
- asyncValidateDelay?: number;
164
- }
165
- /** Full field definition: conditional, validation, transform, computed, mask, scope. */
166
- interface BitFieldDefinition<T extends object = any> {
167
- conditional?: BitFieldConditional<T>;
168
- validation?: BitFieldValidation<T>;
169
- transform?: BitTransformFn<T>;
170
- computed?: BitComputedFn<T>;
171
- /** Mask name (from registry) or BitMask instance. */
172
- mask?: BitMask | string;
173
- /** Scope name (e.g. wizard step). */
174
- scope?: string;
175
- }
176
- interface DevToolsOptions {
177
- enabled?: boolean;
178
- mode?: "local" | "remote";
179
- url?: string;
180
- }
181
- /** Validation config. */
182
- interface BitValidationConfig<T> {
183
- resolver?: ValidatorFn<T>;
184
- delay?: number;
185
- }
186
- /** History config. */
187
- interface BitHistoryConfig {
188
- enabled?: boolean;
189
- limit?: number;
190
- }
191
- /**
192
- * BitConfig - store configuration.
193
- * @see CHANGELOG for migration from features to fields in 2.0.
194
- */
195
- interface BitConfig<T extends object = any> {
196
- /** Core */
197
- name?: string;
198
- initialValues?: T;
199
- /** Central field config: conditional, validation, transform, computed, mask, scope. */
200
- fields?: Record<string, BitFieldDefinition<T>>;
201
- /** Schema-level validation */
202
- validation?: BitValidationConfig<T>;
203
- /** History (undo/redo) */
204
- history?: BitHistoryConfig;
205
- /** DevTools */
206
- devTools?: boolean | DevToolsOptions;
207
- }
208
- /** Internal config produced by normalizeConfig from BitConfig. */
209
- interface BitResolvedConfig<T extends object> {
210
- name?: string;
211
- initialValues: T;
212
- resolver?: ValidatorFn<T>;
213
- validationDelay: number;
214
- enableHistory: boolean;
215
- historyLimit: number;
216
- /** Derived from fields where field.computed exists. */
217
- computed?: Record<string, BitComputedFn<T>>;
218
- /** Derived from fields where field.transform exists. */
219
- transform?: Partial<Record<string, BitTransformFn<T>>>;
220
- /** Derived from fields where field.scope exists. */
221
- scopes?: Record<string, string[]>;
222
- masks?: Record<string, BitMask>;
223
- fields?: Record<string, BitFieldDefinition<T>>;
224
- devTools?: boolean | DevToolsOptions;
225
- }
226
- interface BitFieldOptions {
227
- mask?: BitMask | string;
228
- }
229
- /** Return type of BitStore.getStepStatus, used by useBitScope/injectBitScope. */
230
- interface ScopeStatus {
231
- hasErrors: boolean;
232
- isDirty: boolean;
233
- errors: Record<string, string>;
234
- }
235
- /** Return type of validateStep, used by useBitScope/injectBitScope. */
236
- interface ValidateScopeResult {
237
- valid: boolean;
238
- errors: Record<string, string>;
239
- }
240
- interface BitLifecycleAdapter<T extends object> {
241
- getState: () => BitState<T>;
242
- internalUpdateState: (partial: Partial<BitState<T>>) => void;
243
- internalSaveSnapshot: () => void;
244
- config: BitResolvedConfig<T>;
245
- depsMg: BitDependencyManager<T>;
246
- validatorMg: BitValidationManager<T>;
247
- historyMg: BitHistoryManager<T>;
248
- dirtyMg: BitDirtyManager<T>;
249
- }
250
- interface BitStoreAdapter<T extends object = any> {
251
- getState: () => BitState<T>;
252
- getConfig(): BitResolvedConfig<T>;
253
- setField(path: string, value: any): void;
254
- internalUpdateState(partialState: any): void;
255
- internalSaveSnapshot(): void;
256
- unregisterPrefix?: (prefix: string) => void;
257
- validate?: () => Promise<boolean>;
258
- dirtyMg: BitDirtyManager<T>;
259
- }
260
- interface BitValidationAdapter<T extends object> {
261
- getState: () => BitState<T>;
262
- internalUpdateState: (partial: Partial<BitState<T>>) => void;
263
- setError: (path: string, message: string | undefined) => void;
264
- validate?: (opts: {
265
- scopeFields?: string[];
266
- }) => Promise<boolean>;
267
- config: BitResolvedConfig<T>;
268
- depsMg: BitDependencyManager<T>;
269
- }
270
- /**
271
- * Type-safe path utilities
272
- *
273
- * These are used to strengthen typing for field paths (e.g. "user.email", "items.0.name").
274
- */
275
- type Primitive = string | number | boolean | bigint | symbol | null | undefined;
276
- 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>}` : {
277
- [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]>}`;
278
- }[keyof T & (string | number)];
279
- 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;
280
- type BitArrayPath<T> = BitPath<T> extends infer P ? P extends string ? BitPathValue<T, P> extends readonly any[] ? P : never : never : never;
281
- type BitArrayItem<A> = A extends readonly (infer U)[] ? U : A extends (infer U)[] ? U : never;
282
-
283
- type BitBusListener = (storeId: string, newState: any) => void;
284
- interface BitFormGlobal {
285
- stores: Record<string, any>;
286
- listeners: Set<BitBusListener>;
287
- dispatch: (storeId: string, state: any) => void;
288
- subscribe: (fn: BitBusListener) => () => void;
289
- }
290
- declare global {
291
- var __BIT_FORM__: BitFormGlobal | undefined;
292
- }
293
- declare const bitBus: BitFormGlobal;
294
-
295
- export { BitHistoryManager as A, type BitResolvedConfig as B, type CurrencyMaskConfig as C, type DateMaskConfig as D, type PatternMaskOptions as P, type ScopeStatus as S, type ValidateScopeResult as V, type BitState as a, type BitPath as b, type BitPathValue as c, type BitErrors as d, type BitMask as e, type BitConfig as f, type BitArrayItem as g, type BitArrayPath as h, type BitComputedFn as i, type BitFieldConditional as j, type BitFieldDefinition as k, type BitFieldOptions as l, type BitFieldValidation as m, type BitHistoryConfig as n, type BitTouched as o, type BitTransformFn as p, type BitValidationConfig as q, type DeepPartial as r, type ValidatorFn as s, bitBus as t, type BitStoreAdapter as u, type BitLifecycleAdapter as v, BitDependencyManager as w, type BitValidationAdapter as x, BitValidationManager as y, BitDirtyManager as z };