@lehnihon/bit-form 1.0.8 → 2.0.1

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 (60) 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 +16 -12
  4. package/dist/angular/index.d.ts +16 -12
  5. package/dist/angular/index.js +1 -1
  6. package/dist/angular/index.js.map +1 -1
  7. package/dist/{bus-BtKUu_9m.d.cts → bus-CnqfsZpc.d.cts} +19 -1
  8. package/dist/{bus-BtKUu_9m.d.ts → bus-CnqfsZpc.d.ts} +19 -1
  9. package/dist/chunk-4MPIKMTH.cjs +133 -0
  10. package/dist/chunk-4MPIKMTH.cjs.map +1 -0
  11. package/dist/chunk-OZOSKSJA.js +2 -0
  12. package/dist/chunk-OZOSKSJA.js.map +1 -0
  13. package/dist/chunk-VCHMCHED.cjs +2 -0
  14. package/dist/chunk-VCHMCHED.cjs.map +1 -0
  15. package/dist/chunk-ZWLZ4XDF.js +133 -0
  16. package/dist/chunk-ZWLZ4XDF.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-CH9ZdEkZ.d.cts → index-BAOM6INR.d.ts} +11 -3
  22. package/dist/{index-C4HaSh5W.d.ts → index-BdLuC0wS.d.cts} +11 -3
  23. package/dist/index.cjs +1 -1
  24. package/dist/index.cjs.map +1 -1
  25. package/dist/index.d.cts +26 -4
  26. package/dist/index.d.ts +26 -4
  27. package/dist/index.js +1 -1
  28. package/dist/react/index.cjs +1 -1
  29. package/dist/react/index.cjs.map +1 -1
  30. package/dist/react/index.d.cts +15 -5
  31. package/dist/react/index.d.ts +15 -5
  32. package/dist/react/index.js +1 -1
  33. package/dist/react/index.js.map +1 -1
  34. package/dist/react-native/index.cjs +1 -1
  35. package/dist/react-native/index.d.cts +4 -4
  36. package/dist/react-native/index.d.ts +4 -4
  37. package/dist/react-native/index.js +1 -1
  38. package/dist/resolvers/joi.d.cts +1 -1
  39. package/dist/resolvers/joi.d.ts +1 -1
  40. package/dist/resolvers/yup.d.cts +1 -1
  41. package/dist/resolvers/yup.d.ts +1 -1
  42. package/dist/resolvers/zod.d.cts +1 -1
  43. package/dist/resolvers/zod.d.ts +1 -1
  44. package/dist/{use-bit-watch-Bdwj9l_g.d.ts → use-bit-watch-B_ket_j5.d.ts} +5 -11
  45. package/dist/{use-bit-watch-ClvBxm6Z.d.cts → use-bit-watch-CtdglHvd.d.cts} +5 -11
  46. package/dist/vue/index.cjs +1 -1
  47. package/dist/vue/index.cjs.map +1 -1
  48. package/dist/vue/index.d.cts +16 -12
  49. package/dist/vue/index.d.ts +16 -12
  50. package/dist/vue/index.js +1 -1
  51. package/dist/vue/index.js.map +1 -1
  52. package/package.json +1 -1
  53. package/dist/chunk-4SZ2BOTW.js +0 -2
  54. package/dist/chunk-4SZ2BOTW.js.map +0 -1
  55. package/dist/chunk-IUDMKNON.cjs +0 -2
  56. package/dist/chunk-IUDMKNON.cjs.map +0 -1
  57. package/dist/chunk-MVDS4KAD.js +0 -133
  58. package/dist/chunk-MVDS4KAD.js.map +0 -1
  59. package/dist/chunk-QB7MQ6ZB.cjs +0 -133
  60. package/dist/chunk-QB7MQ6ZB.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/vue/index.cjs","../../src/vue/context.ts","../../src/vue/use-bit-form.ts","../../src/vue/use-bit-field.ts","../../src/vue/use-bit-array.ts"],"names":["BIT_STORE_KEY","provideBitStore","store","provide","useBitStore","inject","useBitForm","state","shallowRef","submitError","ref","lastResponse","unsubscribe","onUnmounted","getValues","getErrors","getTouched","isValid","computed","isSubmitting","isDirty","canUndo","canRedo","onSuccess","e","handler","values","result","err","isValidationErrorShape","extractServerErrors","useBitField","path","config","options","maskOption","resolvedMask","rawValue","getDeepValue","displayValue","val","modelValue","rawError","error","touched","invalid","isValidating","isHidden","isRequired","hasError","setValue","setBlur","generateId","useBitArray","getSnapshot","initialValues","ids","newValues","currentIds","diff","newIds"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/vue/index.cjs","sourcesContent":[null,"import { inject, provide, InjectionKey } from \"vue\";\nimport { BitStore } from \"../core\";\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\n const isValid = computed(() => state.value.isValid);\n const isSubmitting = computed(() => state.value.isSubmitting);\n const isDirty = computed(() => state.value.isDirty);\n\n const canUndo = computed(() => {\n state.value;\n return store.canUndo;\n });\n\n const canRedo = computed(() => {\n state.value;\n return store.canRedo;\n });\n\n const onSubmit = (handler: (values: T) => Promise<unknown>) => {\n return (e?: Event) => {\n e?.preventDefault?.();\n submitError.value = null;\n return store.submit(async (values) => {\n try {\n const result = await handler(values);\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 canUndo,\n canRedo,\n submitError,\n lastResponse,\n };\n\n return {\n // Metadata (grouped)\n meta,\n // Getters\n getValues,\n getErrors,\n getTouched,\n // Main actions (frequent use - flat)\n submit: (onSuccess: (values: T) => void | Promise<void>) => {\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 registerMask: store.registerMask.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 // History (grouped)\n history: {\n undo: store.undo.bind(store),\n redo: store.redo.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"]}
1
+ {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/vue/index.cjs","../../src/vue/context.ts","../../src/vue/use-bit-form.ts","../../src/vue/use-bit-field.ts","../../src/vue/use-bit-array.ts"],"names":["BIT_STORE_KEY","provideBitStore","store","provide","useBitStore","inject","useBitForm","state","shallowRef","submitError","ref","lastResponse","unsubscribe","onUnmounted","getValues","getErrors","getTouched","getDirtyValues","isValid","computed","isSubmitting","isDirty","onSuccess","e","handler","values","dirtyValues","result","err","isValidationErrorShape","extractServerErrors","useBitField","path","config","options","maskOption","resolvedMask","rawValue","getDeepValue","displayValue","val","modelValue","rawError","error","touched","invalid","isValidating","isHidden","isRequired","hasError","setValue","setBlur","generateId","useBitArray","getSnapshot","initialValues","ids","newValues","currentIds","diff","newIds"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/vue/index.cjs","sourcesContent":[null,"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"]}
@@ -1,5 +1,5 @@
1
- import { B as BitStore } from '../index-CH9ZdEkZ.cjs';
2
- import { e as BitErrors, n as BitTouched, k as BitPath, l as BitPathValue, B as BitMask, b as BitArrayPath, a as BitArrayItem, g as BitFieldDefinition, h as BitFieldOptions, S as ScopeStatus, V as ValidateScopeResult } from '../bus-BtKUu_9m.cjs';
1
+ import { B as BitStore } from '../index-BdLuC0wS.cjs';
2
+ import { d as BitErrors, o as BitTouched, b as BitPath, c as BitPathValue, h as BitArrayPath, g as BitArrayItem, k as BitFieldDefinition, l as BitFieldOptions, S as ScopeStatus, V as ValidateScopeResult } from '../bus-CnqfsZpc.cjs';
3
3
  import * as vue from 'vue';
4
4
  import * as _vue_reactivity from '@vue/reactivity';
5
5
  import * as _vue_shared from '@vue/shared';
@@ -12,16 +12,15 @@ declare function useBitForm<T extends object>(): {
12
12
  isValid: vue.ComputedRef<boolean>;
13
13
  isDirty: vue.ComputedRef<boolean>;
14
14
  isSubmitting: vue.ComputedRef<boolean>;
15
- canUndo: vue.ComputedRef<boolean>;
16
- canRedo: vue.ComputedRef<boolean>;
17
15
  submitError: vue.Ref<Error | null, Error | null>;
18
16
  lastResponse: vue.Ref<unknown, unknown>;
19
17
  };
20
18
  getValues: () => T;
21
19
  getErrors: () => BitErrors<T>;
22
20
  getTouched: () => BitTouched<T>;
23
- submit: (onSuccess: (values: T) => void | Promise<void>) => (e?: Event) => Promise<void>;
24
- onSubmit: (handler: (values: T) => Promise<unknown>) => (e?: Event) => Promise<void>;
21
+ getDirtyValues: () => Partial<T>;
22
+ submit: (onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>) => (e?: Event) => Promise<void>;
23
+ onSubmit: (handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>) => (e?: Event) => Promise<void>;
25
24
  reset: () => void;
26
25
  setValues: (newValues: T) => void;
27
26
  setError: (path: string, message: string | undefined) => void;
@@ -33,7 +32,6 @@ declare function useBitForm<T extends object>(): {
33
32
  scope?: string;
34
33
  scopeFields?: string[];
35
34
  }) => Promise<boolean>;
36
- registerMask: (name: string, mask: BitMask) => void;
37
35
  mutations: {
38
36
  pushItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
39
37
  prependItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
@@ -42,10 +40,6 @@ declare function useBitForm<T extends object>(): {
42
40
  moveItem: <P extends BitArrayPath<T>>(path: P, from: number, to: number) => void;
43
41
  swapItems: <P extends BitArrayPath<T>>(path: P, indexA: number, indexB: number) => void;
44
42
  };
45
- history: {
46
- undo: () => void;
47
- redo: () => void;
48
- };
49
43
  };
50
44
 
51
45
  interface UseBitFieldVueMeta {
@@ -87,6 +81,16 @@ declare function useBitArray<TForm extends object = any, P extends BitArrayPath<
87
81
  clear: () => void;
88
82
  };
89
83
 
84
+ interface UseBitHistoryResult {
85
+ canUndo: vue.ComputedRef<boolean>;
86
+ canRedo: vue.ComputedRef<boolean>;
87
+ historyIndex: vue.ComputedRef<number>;
88
+ historySize: vue.ComputedRef<number>;
89
+ undo: () => void;
90
+ redo: () => void;
91
+ }
92
+ declare function useBitHistory<T extends object = any>(): UseBitHistoryResult;
93
+
90
94
  declare function useBitScope(scopeName: string): {
91
95
  scopeName: string;
92
96
  status: vue.Ref<{
@@ -125,4 +129,4 @@ declare function useBitSteps(scopeNames: string[]): UseBitStepsResult;
125
129
 
126
130
  declare function useBitWatch<TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P): vue.DeepReadonly<vue.UnwrapNestedRefs<[BitPathValue<TForm, P>] extends [vue.Ref<any, any>] ? _vue_shared.IfAny<vue.Ref<any, any> & BitPathValue<TForm, P>, vue.Ref<vue.Ref<any, any> & BitPathValue<TForm, P>, vue.Ref<any, any> & BitPathValue<TForm, P>>, vue.Ref<any, any> & BitPathValue<TForm, P>> : vue.Ref<vue.UnwrapRef<BitPathValue<TForm, P>>, BitPathValue<TForm, P> | vue.UnwrapRef<BitPathValue<TForm, P>>>>>;
127
131
 
128
- export { ScopeStatus, type UseBitFieldVueMeta, type UseBitFieldVueResult, ValidateScopeResult, provideBitStore, useBitArray, useBitField, useBitForm, useBitScope, useBitSteps, useBitStore, useBitWatch };
132
+ export { ScopeStatus, type UseBitFieldVueMeta, type UseBitFieldVueResult, ValidateScopeResult, provideBitStore, useBitArray, useBitField, useBitForm, useBitHistory, useBitScope, useBitSteps, useBitStore, useBitWatch };
@@ -1,5 +1,5 @@
1
- import { B as BitStore } from '../index-C4HaSh5W.js';
2
- import { e as BitErrors, n as BitTouched, k as BitPath, l as BitPathValue, B as BitMask, b as BitArrayPath, a as BitArrayItem, g as BitFieldDefinition, h as BitFieldOptions, S as ScopeStatus, V as ValidateScopeResult } from '../bus-BtKUu_9m.js';
1
+ import { B as BitStore } from '../index-BAOM6INR.js';
2
+ import { d as BitErrors, o as BitTouched, b as BitPath, c as BitPathValue, h as BitArrayPath, g as BitArrayItem, k as BitFieldDefinition, l as BitFieldOptions, S as ScopeStatus, V as ValidateScopeResult } from '../bus-CnqfsZpc.js';
3
3
  import * as vue from 'vue';
4
4
  import * as _vue_reactivity from '@vue/reactivity';
5
5
  import * as _vue_shared from '@vue/shared';
@@ -12,16 +12,15 @@ declare function useBitForm<T extends object>(): {
12
12
  isValid: vue.ComputedRef<boolean>;
13
13
  isDirty: vue.ComputedRef<boolean>;
14
14
  isSubmitting: vue.ComputedRef<boolean>;
15
- canUndo: vue.ComputedRef<boolean>;
16
- canRedo: vue.ComputedRef<boolean>;
17
15
  submitError: vue.Ref<Error | null, Error | null>;
18
16
  lastResponse: vue.Ref<unknown, unknown>;
19
17
  };
20
18
  getValues: () => T;
21
19
  getErrors: () => BitErrors<T>;
22
20
  getTouched: () => BitTouched<T>;
23
- submit: (onSuccess: (values: T) => void | Promise<void>) => (e?: Event) => Promise<void>;
24
- onSubmit: (handler: (values: T) => Promise<unknown>) => (e?: Event) => Promise<void>;
21
+ getDirtyValues: () => Partial<T>;
22
+ submit: (onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>) => (e?: Event) => Promise<void>;
23
+ onSubmit: (handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>) => (e?: Event) => Promise<void>;
25
24
  reset: () => void;
26
25
  setValues: (newValues: T) => void;
27
26
  setError: (path: string, message: string | undefined) => void;
@@ -33,7 +32,6 @@ declare function useBitForm<T extends object>(): {
33
32
  scope?: string;
34
33
  scopeFields?: string[];
35
34
  }) => Promise<boolean>;
36
- registerMask: (name: string, mask: BitMask) => void;
37
35
  mutations: {
38
36
  pushItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
39
37
  prependItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
@@ -42,10 +40,6 @@ declare function useBitForm<T extends object>(): {
42
40
  moveItem: <P extends BitArrayPath<T>>(path: P, from: number, to: number) => void;
43
41
  swapItems: <P extends BitArrayPath<T>>(path: P, indexA: number, indexB: number) => void;
44
42
  };
45
- history: {
46
- undo: () => void;
47
- redo: () => void;
48
- };
49
43
  };
50
44
 
51
45
  interface UseBitFieldVueMeta {
@@ -87,6 +81,16 @@ declare function useBitArray<TForm extends object = any, P extends BitArrayPath<
87
81
  clear: () => void;
88
82
  };
89
83
 
84
+ interface UseBitHistoryResult {
85
+ canUndo: vue.ComputedRef<boolean>;
86
+ canRedo: vue.ComputedRef<boolean>;
87
+ historyIndex: vue.ComputedRef<number>;
88
+ historySize: vue.ComputedRef<number>;
89
+ undo: () => void;
90
+ redo: () => void;
91
+ }
92
+ declare function useBitHistory<T extends object = any>(): UseBitHistoryResult;
93
+
90
94
  declare function useBitScope(scopeName: string): {
91
95
  scopeName: string;
92
96
  status: vue.Ref<{
@@ -125,4 +129,4 @@ declare function useBitSteps(scopeNames: string[]): UseBitStepsResult;
125
129
 
126
130
  declare function useBitWatch<TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P): vue.DeepReadonly<vue.UnwrapNestedRefs<[BitPathValue<TForm, P>] extends [vue.Ref<any, any>] ? _vue_shared.IfAny<vue.Ref<any, any> & BitPathValue<TForm, P>, vue.Ref<vue.Ref<any, any> & BitPathValue<TForm, P>, vue.Ref<any, any> & BitPathValue<TForm, P>>, vue.Ref<any, any> & BitPathValue<TForm, P>> : vue.Ref<vue.UnwrapRef<BitPathValue<TForm, P>>, BitPathValue<TForm, P> | vue.UnwrapRef<BitPathValue<TForm, P>>>>>;
127
131
 
128
- export { ScopeStatus, type UseBitFieldVueMeta, type UseBitFieldVueResult, ValidateScopeResult, provideBitStore, useBitArray, useBitField, useBitForm, useBitScope, useBitSteps, useBitStore, useBitWatch };
132
+ export { ScopeStatus, type UseBitFieldVueMeta, type UseBitFieldVueResult, ValidateScopeResult, provideBitStore, useBitArray, useBitField, useBitForm, useBitHistory, useBitScope, useBitSteps, useBitStore, useBitWatch };
package/dist/vue/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{d as w,e as V,h as k,i as D}from"../chunk-MVDS4KAD.js";import{inject as C,provide as q}from"vue";var U=Symbol("BIT_STORE");function H(e){q(U,e)}function m(){let e=C(U);if(!e)throw new Error("BitForm Vue hooks devem ser usados sob um provideBitStore");return e}import{computed as E,onUnmounted as K,shallowRef as W,ref as M}from"vue";function _(){let e=m(),t=W(e.getState()),o=M(null),s=M(null),n=e.subscribe(()=>{t.value={...e.getState()}});K(n);let i=()=>t.value.values,l=()=>t.value.errors,g=()=>t.value.touched,f=E(()=>t.value.isValid),r=E(()=>t.value.isSubmitting),a=E(()=>t.value.isDirty),c=E(()=>(t.value,e.canUndo)),y=E(()=>(t.value,e.canRedo));return{meta:{isValid:f,isDirty:a,isSubmitting:r,canUndo:c,canRedo:y,submitError:o,lastResponse:s},getValues:i,getErrors:l,getTouched:g,submit:S=>b=>(b?.preventDefault?.(),e.submit(S)),onSubmit:S=>b=>(b?.preventDefault?.(),o.value=null,e.submit(async d=>{try{let u=await S(d);s.value=u,o.value=null}catch(u){k(u)?e.setServerErrors(D(u)):o.value=u instanceof Error?u:new Error(String(u))}})),reset:()=>{e.reset(),o.value=null,s.value=null},setValues:e.setValues.bind(e),setError:e.setError.bind(e),setErrors:e.setErrors.bind(e),setServerErrors:e.setServerErrors.bind(e),setField:e.setField.bind(e),blurField:e.blurField.bind(e),validate:e.validate.bind(e),registerMask:e.registerMask.bind(e),mutations:{pushItem:e.pushItem.bind(e),prependItem:e.prependItem.bind(e),removeItem:e.removeItem.bind(e),insertItem:e.insertItem.bind(e),moveItem:e.moveItem.bind(e),swapItems:e.swapItems.bind(e)},history:{undo:e.undo.bind(e),redo:e.redo.bind(e)}}}import{computed as p,onUnmounted as L,shallowRef as $}from"vue";function Y(e,t,o){let s=m();t&&s.registerField(e,t);let n=o?.mask??s.config.fields?.[e]?.mask,i=n?typeof n=="string"?s.config.masks?.[n]:n:void 0,l=$(s.getState()),g=s.subscribe(()=>{l.value=s.getState()});L(()=>{g(),s.unregisterField&&s.unregisterField(e)});let f=p(()=>V(l.value.values,e)),r=p(()=>{let v=f.value;return v==null||v===""?"":i?i.format(v):String(v)}),a=p({get:()=>r.value,set:v=>{if(!i){s.setField(e,v);return}s.setField(e,i.parse(String(v??"")))}}),c=p(()=>l.value.errors[e]),y=p(()=>l.value.touched[e]?l.value.errors[e]:void 0),R=p(()=>!!l.value.touched[e]),x=p(()=>!!(R.value&&y.value)),P=p(()=>(l.value,s.isFieldValidating(e))),S=p(()=>(l.value,s.isFieldDirty(e))),b=p(()=>(l.value,s.isHidden(e))),d=p(()=>(l.value,s.isRequired(e))),u=p(()=>!!c.value),h=v=>{a.value=v},I=()=>s.blurField(e);return{value:f,displayValue:r,modelValue:a,setValue:h,setBlur:I,onInput:v=>{h(v)},onBlur:()=>{I()},meta:{error:y,touched:R,invalid:x,isValidating:P,isDirty:S,isHidden:b,isRequired:d,hasError:u}}}import{ref as j,computed as A,onUnmounted as z}from"vue";var F=()=>Math.random().toString(36).substring(2,9);function G(e){let t=m(),o=()=>{let r=V(t.getState().values,e);return Array.isArray(r)?r:[]},s=o(),n=j(s),i=j(s.map(F)),l=t.subscribe(()=>{let r=o();if(n.value=[...r],r.length!==i.value.length){let a=[...i.value];if(r.length>a.length){let c=r.length-a.length,y=Array.from({length:c},F);i.value=[...a,...y]}else i.value=a.slice(0,r.length)}});z(()=>{l(),t.unregisterPrefix&&t.unregisterPrefix(`${e}.`)});let g=A(()=>n.value.map((r,a)=>({key:i.value[a]||`temp-${a}`,value:r,index:a}))),f=A(()=>n.value.length);return{fields:g,length:f,append:r=>{i.value.push(F()),t.pushItem(e,r)},prepend:r=>{i.value.unshift(F()),t.prependItem(e,r)},insert:(r,a)=>{i.value.splice(r,0,F()),t.insertItem(e,r,a)},remove:r=>{i.value.splice(r,1),t.removeItem(e,r)},move:(r,a)=>{let c=[...i.value],[y]=c.splice(r,1);c.splice(a,0,y),i.value=c,t.moveItem(e,r,a)},swap:(r,a)=>{let c=[...i.value];[c[r],c[a]]=[c[a],c[r]],i.value=c,t.swapItems(e,r,a)},replace:r=>{i.value=r.map(F),t.setField(e,r)},clear:()=>{i.value=[],t.setField(e,[])}}}import{ref as J,computed as T,onMounted as Q,onUnmounted as X}from"vue";function Z(e,t){let o=Object.keys(e),s=Object.keys(t);return o.length!==s.length?!1:o.every(n=>e[n]===t[n])}function N(e){let t=m(),o=J(t.getStepStatus(e)),s;Q(()=>{s=t.subscribe(()=>{let r=t.getStepStatus(e);(r.hasErrors!==o.value.hasErrors||r.isDirty!==o.value.isDirty||!Z(r.errors,o.value.errors))&&(o.value=r)})}),X(()=>{s?.()});let n=async()=>{let r=await t.validate({scope:e}),a=t.getStepErrors(e);return{valid:r,errors:a}},i=()=>t.getStepErrors(e),l=T(()=>!o.value.hasErrors),g=T(()=>o.value.isDirty),f=T(()=>o.value.errors);return{scopeName:e,status:o,errors:f,validate:n,getErrors:i,isValid:l,isDirty:g}}import{ref as O,computed as B,watch as ee,onMounted as te,onUnmounted as re}from"vue";function se(e,t){let o=Object.keys(e),s=Object.keys(t);return o.length!==s.length?!1:o.every(n=>e[n]===t[n])}function oe(e){let t=m(),o=O(0),s=B(()=>e[o.value]??""),n=O(t.getStepStatus(s.value)),i;ee(s,d=>{n.value=t.getStepStatus(d)});let l=()=>{let d=s.value,u=t.getStepStatus(d);(u.hasErrors!==n.value.hasErrors||u.isDirty!==n.value.isDirty||!se(u.errors,n.value.errors))&&(n.value=u)};te(()=>{i=t.subscribe(l)}),re(()=>{i?.()});let g=async()=>{let d=s.value,u=await t.validate({scope:d}),h=t.getStepErrors(d);return{valid:u,errors:h}},f=()=>t.getStepErrors(s.value),r=async()=>{let d=s.value,u=await t.validate({scope:d});if(u)o.value=Math.min(o.value+1,e.length-1);else{let h=t.getStepErrors(d),I=Object.keys(h);I.length>0&&t.markFieldsTouched(I)}return u},a=()=>{o.value=Math.max(o.value-1,0)},c=d=>{o.value=Math.max(0,Math.min(d-1,e.length-1))},y=B(()=>o.value+1),R=B(()=>o.value===0),x=B(()=>o.value>=e.length-1),P=B(()=>!n.value.hasErrors),S=B(()=>n.value.isDirty),b=B(()=>n.value.errors);return{step:y,stepIndex:o,scope:s,next:r,prev:a,goTo:c,isFirst:R,isLast:x,status:n,errors:b,isValid:P,isDirty:S,validate:g,getErrors:f}}import{ref as ne,onUnmounted as ie,readonly as ae}from"vue";function ue(e){let t=m(),o=V(t.getState().values,e),s=ne(o),n=t.watch(e,i=>{w(s.value,i)||(s.value=i)});return ie(n),ae(s)}export{H as provideBitStore,G as useBitArray,Y as useBitField,_ as useBitForm,N as useBitScope,oe as useBitSteps,m as useBitStore,ue as useBitWatch};
1
+ import{d as D,e as R,h as U,i as k}from"../chunk-ZWLZ4XDF.js";import{inject as H,provide as q}from"vue";var j=Symbol("BIT_STORE");function z(e){q(j,e)}function m(){let e=H(j);if(!e)throw new Error("BitForm Vue hooks devem ser usados sob um provideBitStore");return e}import{computed as P,onUnmounted as K,shallowRef as W,ref as M}from"vue";function _(){let e=m(),t=W(e.getState()),s=M(null),o=M(null),n=e.subscribe(()=>{t.value={...e.getState()}});K(n);let i=()=>t.value.values,l=()=>t.value.errors,f=()=>t.value.touched,y=()=>e.getDirtyValues(),r=P(()=>t.value.isValid),a=P(()=>t.value.isSubmitting),c=P(()=>t.value.isDirty);return{meta:{isValid:r,isDirty:c,isSubmitting:a,submitError:s,lastResponse:o},getValues:i,getErrors:l,getTouched:f,getDirtyValues:y,submit:S=>b=>(b?.preventDefault?.(),e.submit(S)),onSubmit:S=>b=>(b?.preventDefault?.(),s.value=null,e.submit(async(I,d)=>{try{let u=await S(I,d);o.value=u,s.value=null}catch(u){U(u)?e.setServerErrors(k(u)):s.value=u instanceof Error?u:new Error(String(u))}})),reset:()=>{e.reset(),s.value=null,o.value=null},setValues:e.setValues.bind(e),setError:e.setError.bind(e),setErrors:e.setErrors.bind(e),setServerErrors:e.setServerErrors.bind(e),setField:e.setField.bind(e),blurField:e.blurField.bind(e),validate:e.validate.bind(e),mutations:{pushItem:e.pushItem.bind(e),prependItem:e.prependItem.bind(e),removeItem:e.removeItem.bind(e),insertItem:e.insertItem.bind(e),moveItem:e.moveItem.bind(e),swapItems:e.swapItems.bind(e)}}}import{computed as p,onUnmounted as L,shallowRef as $}from"vue";function Y(e,t,s){let o=m();t&&o.registerField(e,t);let n=s?.mask??o.config.fields?.[e]?.mask,i=n?typeof n=="string"?o.config.masks?.[n]:n:void 0,l=$(o.getState()),f=o.subscribe(()=>{l.value=o.getState()});L(()=>{f(),o.unregisterField&&o.unregisterField(e)});let y=p(()=>R(l.value.values,e)),r=p(()=>{let v=y.value;return v==null||v===""?"":i?i.format(v):String(v)}),a=p({get:()=>r.value,set:v=>{if(!i){o.setField(e,v);return}o.setField(e,i.parse(String(v??"")))}}),c=p(()=>l.value.errors[e]),g=p(()=>l.value.touched[e]?l.value.errors[e]:void 0),F=p(()=>!!l.value.touched[e]),E=p(()=>!!(F.value&&g.value)),S=p(()=>(l.value,o.isFieldValidating(e))),b=p(()=>(l.value,o.isFieldDirty(e))),I=p(()=>(l.value,o.isHidden(e))),d=p(()=>(l.value,o.isRequired(e))),u=p(()=>!!c.value),h=v=>{a.value=v},x=()=>o.blurField(e);return{value:y,displayValue:r,modelValue:a,setValue:h,setBlur:x,onInput:v=>{h(v)},onBlur:()=>{x()},meta:{error:g,touched:F,invalid:E,isValidating:S,isDirty:b,isHidden:I,isRequired:d,hasError:u}}}import{ref as A,computed as C,onUnmounted as G}from"vue";var V=()=>Math.random().toString(36).substring(2,9);function J(e){let t=m(),s=()=>{let r=R(t.getState().values,e);return Array.isArray(r)?r:[]},o=s(),n=A(o),i=A(o.map(V)),l=t.subscribe(()=>{let r=s();if(n.value=[...r],r.length!==i.value.length){let a=[...i.value];if(r.length>a.length){let c=r.length-a.length,g=Array.from({length:c},V);i.value=[...a,...g]}else i.value=a.slice(0,r.length)}});G(()=>{l(),t.unregisterPrefix&&t.unregisterPrefix(`${e}.`)});let f=C(()=>n.value.map((r,a)=>({key:i.value[a]||`temp-${a}`,value:r,index:a}))),y=C(()=>n.value.length);return{fields:f,length:y,append:r=>{i.value.push(V()),t.pushItem(e,r)},prepend:r=>{i.value.unshift(V()),t.prependItem(e,r)},insert:(r,a)=>{i.value.splice(r,0,V()),t.insertItem(e,r,a)},remove:r=>{i.value.splice(r,1),t.removeItem(e,r)},move:(r,a)=>{let c=[...i.value],[g]=c.splice(r,1);c.splice(a,0,g),i.value=c,t.moveItem(e,r,a)},swap:(r,a)=>{let c=[...i.value];[c[r],c[a]]=[c[a],c[r]],i.value=c,t.swapItems(e,r,a)},replace:r=>{i.value=r.map(V),t.setField(e,r)},clear:()=>{i.value=[],t.setField(e,[])}}}import{computed as T,onUnmounted as Q,shallowRef as X}from"vue";function Z(){let e=m(),t=X(e.getHistoryMetadata()),s=e.subscribe(()=>{t.value=e.getHistoryMetadata()});Q(s);let o=()=>e.undo(),n=()=>e.redo();return{canUndo:T(()=>t.value.canUndo),canRedo:T(()=>t.value.canRedo),historyIndex:T(()=>t.value.historyIndex),historySize:T(()=>t.value.historySize),undo:o,redo:n}}import{ref as N,computed as w,onMounted as ee,onUnmounted as te}from"vue";function re(e,t){let s=Object.keys(e),o=Object.keys(t);return s.length!==o.length?!1:s.every(n=>e[n]===t[n])}function oe(e){let t=m(),s=N(t.getStepStatus(e)),o;ee(()=>{o=t.subscribe(()=>{let r=t.getStepStatus(e);(r.hasErrors!==s.value.hasErrors||r.isDirty!==s.value.isDirty||!re(r.errors,s.value.errors))&&(s.value=r)})}),te(()=>{o?.()});let n=async()=>{let r=await t.validate({scope:e}),a=t.getStepErrors(e);return{valid:r,errors:a}},i=()=>t.getStepErrors(e),l=w(()=>!s.value.hasErrors),f=w(()=>s.value.isDirty),y=w(()=>s.value.errors);return{scopeName:e,status:s,errors:y,validate:n,getErrors:i,isValid:l,isDirty:f}}import{ref as O,computed as B,watch as se,onMounted as ne,onUnmounted as ie}from"vue";function ae(e,t){let s=Object.keys(e),o=Object.keys(t);return s.length!==o.length?!1:s.every(n=>e[n]===t[n])}function ue(e){let t=m(),s=O(0),o=B(()=>e[s.value]??""),n=O(t.getStepStatus(o.value)),i;se(o,d=>{n.value=t.getStepStatus(d)});let l=()=>{let d=o.value,u=t.getStepStatus(d);(u.hasErrors!==n.value.hasErrors||u.isDirty!==n.value.isDirty||!ae(u.errors,n.value.errors))&&(n.value=u)};ne(()=>{i=t.subscribe(l)}),ie(()=>{i?.()});let f=async()=>{let d=o.value,u=await t.validate({scope:d}),h=t.getStepErrors(d);return{valid:u,errors:h}},y=()=>t.getStepErrors(o.value),r=async()=>{let d=o.value,u=await t.validate({scope:d});if(u)s.value=Math.min(s.value+1,e.length-1);else{let h=t.getStepErrors(d),x=Object.keys(h);x.length>0&&t.markFieldsTouched(x)}return u},a=()=>{s.value=Math.max(s.value-1,0)},c=d=>{s.value=Math.max(0,Math.min(d-1,e.length-1))},g=B(()=>s.value+1),F=B(()=>s.value===0),E=B(()=>s.value>=e.length-1),S=B(()=>!n.value.hasErrors),b=B(()=>n.value.isDirty),I=B(()=>n.value.errors);return{step:g,stepIndex:s,scope:o,next:r,prev:a,goTo:c,isFirst:F,isLast:E,status:n,errors:I,isValid:S,isDirty:b,validate:f,getErrors:y}}import{ref as le,onUnmounted as ce,readonly as de}from"vue";function me(e){let t=m(),s=R(t.getState().values,e),o=le(s),n=t.watch(e,i=>{D(o.value,i)||(o.value=i)});return ce(n),de(o)}export{z as provideBitStore,J as useBitArray,Y as useBitField,_ as useBitForm,Z as useBitHistory,oe as useBitScope,ue as useBitSteps,m as useBitStore,me as useBitWatch};
2
2
  //# sourceMappingURL=index.js.map
@@ -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-scope.ts","../../src/vue/use-bit-steps.ts","../../src/vue/use-bit-watch.ts"],"sourcesContent":["import { inject, provide, InjectionKey } from \"vue\";\nimport { BitStore } from \"../core\";\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\n const isValid = computed(() => state.value.isValid);\n const isSubmitting = computed(() => state.value.isSubmitting);\n const isDirty = computed(() => state.value.isDirty);\n\n const canUndo = computed(() => {\n state.value;\n return store.canUndo;\n });\n\n const canRedo = computed(() => {\n state.value;\n return store.canRedo;\n });\n\n const onSubmit = (handler: (values: T) => Promise<unknown>) => {\n return (e?: Event) => {\n e?.preventDefault?.();\n submitError.value = null;\n return store.submit(async (values) => {\n try {\n const result = await handler(values);\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 canUndo,\n canRedo,\n submitError,\n lastResponse,\n };\n\n return {\n // Metadata (grouped)\n meta,\n // Getters\n getValues,\n getErrors,\n getTouched,\n // Main actions (frequent use - flat)\n submit: (onSuccess: (values: T) => void | Promise<void>) => {\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 registerMask: store.registerMask.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 // History (grouped)\n history: {\n undo: store.undo.bind(store),\n redo: store.redo.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 { 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 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"],"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","isValid","computed","isSubmitting","isDirty","canUndo","canRedo","onSuccess","e","handler","values","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","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","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"]}
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"],"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 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"],"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","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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lehnihon/bit-form",
3
- "version": "1.0.8",
3
+ "version": "2.0.1",
4
4
  "description": "Gerenciamento de estado de formulários agnóstico e performático",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -1,2 +0,0 @@
1
- import{d as R,e as v,h as D,i as k}from"./chunk-MVDS4KAD.js";import{createContext as A,useContext as O}from"react";import{jsx as U}from"react/jsx-runtime";var w=A(null),nt=({store:t,children:e})=>U(w.Provider,{value:t,children:e}),S=()=>{let t=O(w);if(!t)throw new Error("BitForm hooks devem ser usados dentro de um BitFormProvider");return t};import{useCallback as y,useSyncExternalStore as q,useMemo as H,useRef as L,useState as M}from"react";function ct(){let t=S(),[e,r]=M(null),[i,a]=M(null),o=L(null),g=y(()=>{let u=t.getState(),{isValid:m,isDirty:b,isSubmitting:p}=u,T=t.canUndo,I=t.canRedo;if(o.current&&o.current.isValid===m&&o.current.isDirty===b&&o.current.isSubmitting===p&&o.current.canUndo===T&&o.current.canRedo===I)return o.current;let x={isValid:m,isDirty:b,isSubmitting:p,canUndo:T,canRedo:I};return o.current=x,x},[t]),c=q(t.subscribe.bind(t),g,g),s=y(u=>m=>(m?.preventDefault?.(),t.submit(u)),[t]),n=y(u=>m=>(m?.preventDefault?.(),r(null),t.submit(async b=>{try{let p=await u(b);a(p),r(null)}catch(p){D(p)?t.setServerErrors(k(p)):r(p instanceof Error?p:new Error(String(p)))}})),[t]),d=y(()=>{t.reset(),r(null),a(null)},[t]),l=y(()=>t.getState().values,[t]),f=y(()=>t.getState().errors,[t]),h=y(()=>t.getState().touched,[t]);return{meta:H(()=>({...c,submitError:e,lastResponse:i}),[c,e,i]),getValues:l,getErrors:f,getTouched:h,submit:s,onSubmit:n,reset:d,setField:t.setField.bind(t),blurField:t.blurField.bind(t),setValues:t.setValues.bind(t),setError:t.setError.bind(t),setErrors:t.setErrors.bind(t),setServerErrors:t.setServerErrors.bind(t),validate:t.validate.bind(t),registerMask:t.registerMask.bind(t),mutations:{pushItem:t.pushItem.bind(t),removeItem:t.removeItem.bind(t),prependItem:t.prependItem.bind(t),insertItem:t.insertItem.bind(t),moveItem:t.moveItem.bind(t),swapItems:t.swapItems.bind(t)},history:{undo:t.undo.bind(t),redo:t.redo.bind(t)}}}import{useCallback as W,useSyncExternalStore as _,useState as $,useMemo as j,useEffect as z}from"react";var B=()=>Math.random().toString(36).substring(2,9);function ht(t){let e=S(),r=W(()=>{let s=e.getState(),n=v(s.values,t);return Array.isArray(n)?n:[]},[e,t]),i=_(e.subscribe.bind(e),r,r),[a,o]=$(()=>i.map(B));z(()=>{i.length!==a.length&&o(s=>{if(i.length>s.length){let n=i.length-s.length;return[...s,...Array(n).fill(null).map(B)]}return s.slice(0,i.length)})},[i.length]);let g=j(()=>({append:s=>{o(n=>[...n,B()]),e.pushItem(t,s)},prepend:s=>{o(n=>[B(),...n]),e.prependItem(t,s)},insert:(s,n)=>{o(d=>{let l=[...d];return l.splice(s,0,B()),l}),e.insertItem(t,s,n)},remove:s=>{o(n=>n.filter((d,l)=>l!==s)),e.removeItem(t,s)},move:(s,n)=>{o(d=>{let l=[...d],[f]=l.splice(s,1);return l.splice(n,0,f),l}),e.moveItem(t,s,n)},swap:(s,n)=>{o(d=>{let l=[...d];return[l[s],l[n]]=[l[n],l[s]],l}),e.swapItems(t,s,n)},replace:s=>{o(s.map(B)),e.setField(t,s)},clear:()=>{o([]),e.setField(t,[])}}),[e,t]);return{fields:j(()=>i.map((s,n)=>({key:a[n]||`temp-${n}`,value:s,index:n})),[i,a]),length:i.length,...g}}import{useCallback as V,useSyncExternalStore as G,useRef as J}from"react";function Ft(t){let e=S(),r=J(null),i=V(()=>{let c=e.getStepStatus(t);return r.current&&r.current.hasErrors===c.hasErrors&&r.current.isDirty===c.isDirty&&Object.keys(r.current.errors).length===Object.keys(c.errors).length&&Object.entries(c.errors).every(([s,n])=>r.current.errors[s]===n)?r.current:(r.current=c,c)},[e,t]),a=G(e.subscribe.bind(e),i,i),o=V(async()=>{let c=await e.validate({scope:t}),s=e.getStepErrors(t);return{valid:c,errors:s}},[e,t]),g=V(()=>e.getStepErrors(t),[e,t]);return{scopeName:t,status:a,errors:a.errors,validate:o,getErrors:g,isValid:!a.hasErrors,isDirty:a.isDirty}}import{useCallback as P,useSyncExternalStore as K,useRef as Q,useState as X}from"react";function It(t){let e=S(),[r,i]=X(0),a=t[r]??"",o=Q(null),g=P(()=>{let u=e.getStepStatus(a);return o.current&&o.current.hasErrors===u.hasErrors&&o.current.isDirty===u.isDirty&&Object.keys(o.current.errors).length===Object.keys(u.errors).length&&Object.entries(u.errors).every(([m,b])=>o.current.errors[m]===b)?o.current:(o.current=u,u)},[e,a]),c=K(e.subscribe.bind(e),g,g),s=P(async()=>{let u=await e.validate({scope:a}),m=e.getStepErrors(a);return{valid:u,errors:m}},[e,a]),n=P(()=>e.getStepErrors(a),[e,a]),d=P(async()=>{let u=await e.validate({scope:a});if(u)i(m=>Math.min(m+1,t.length-1));else{let m=e.getStepErrors(a),b=Object.keys(m);b.length>0&&e.markFieldsTouched(b)}return u},[e,a,t.length]),l=P(()=>{i(u=>Math.max(u-1,0))},[]),f=P(u=>{i(Math.max(0,Math.min(u-1,t.length-1)))},[t.length]),h=r===0,F=r>=t.length-1;return{step:r+1,stepIndex:r,scope:a,next:d,prev:l,goTo:f,isFirst:h,isLast:F,status:c,errors:c.errors,isValid:!c.hasErrors,isDirty:c.isDirty,validate:s,getErrors:n}}import{useCallback as C,useSyncExternalStore as Y,useRef as Z}from"react";function jt(t){let e=S(),r=Z(null),i=C(()=>{let o=v(e.getState().values,t);return r.current!==null&&R(r.current,o)?r.current:(r.current=o,o)},[e,t]),a=C(o=>e.subscribe(o),[e]);return Y(a,i,i)}import{useCallback as E,useSyncExternalStore as N,useRef as tt,useEffect as et}from"react";function Wt(t,e){let r=S(),i=tt(null);et(()=>(e&&r.registerField(t,e),()=>{r.unregisterField&&r.unregisterField(t)}),[r,t,e]);let a=E(()=>{let n=r.getState(),d=v(n.values,t),l=n.errors[t],f=!!n.touched[t],h=r.isHidden(t),F=r.isRequired(t),u=r.isFieldDirty(t),m=r.isFieldValidating(t);if(i.current&&i.current.value===d&&i.current.error===l&&i.current.touched===f&&i.current.isHidden===h&&i.current.isRequired===F&&i.current.isDirty===u&&i.current.isValidating===m)return i.current;let b={value:d,error:l,touched:f,isHidden:h,isRequired:F,isDirty:u,isValidating:m};return i.current=b,b},[r,t]),o=E(n=>r.subscribe(n),[r]),g=N(o,a,a),c=E(n=>r.setField(t,n),[r,t]),s=E(()=>r.blurField(t),[r,t]);return{fieldState:g,setValue:c,setBlur:s,store:r}}export{nt as a,S as b,ct as c,Wt as d,ht as e,Ft as f,It as g,jt as h};
2
- //# sourceMappingURL=chunk-4SZ2BOTW.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/react/context.tsx","../src/react/use-bit-form.ts","../src/react/use-bit-array.ts","../src/react/use-bit-scope.ts","../src/react/use-bit-steps.ts","../src/react/use-bit-watch.ts","../src/react/use-bit-field-base.ts"],"sourcesContent":["import React, { createContext, useContext } from \"react\";\nimport { BitStore } from \"../core\";\n\nconst BitContext = createContext<BitStore<any> | null>(null);\n\nexport const BitFormProvider = ({\n store,\n children,\n}: {\n store: BitStore<any>;\n children: React.ReactNode;\n}) => <BitContext.Provider value={store}>{children}</BitContext.Provider>;\n\nexport const useBitStore = <T extends object>() => {\n const store = useContext(BitContext);\n if (!store)\n throw new Error(\n \"BitForm hooks devem ser usados dentro de um BitFormProvider\",\n );\n return store as BitStore<T>;\n};\n","import {\n useCallback,\n useSyncExternalStore,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useBitStore } from \"./context\";\nimport { isValidationErrorShape, extractServerErrors } from \"../core/utils\";\n\nexport function useBitForm<T extends object>() {\n const store = useBitStore<T>();\n\n const [submitError, setSubmitError] = useState<Error | null>(null);\n const [lastResponse, setLastResponse] = useState<unknown>(null);\n\n const lastMeta = useRef<{\n isValid: boolean;\n isDirty: boolean;\n isSubmitting: boolean;\n canUndo: boolean;\n canRedo: boolean;\n } | null>(null);\n\n const getMetaSnapshot = useCallback(() => {\n const state = store.getState();\n const { isValid, isDirty, isSubmitting } = state;\n const canUndo = store.canUndo;\n const canRedo = store.canRedo;\n\n if (\n lastMeta.current &&\n lastMeta.current.isValid === isValid &&\n lastMeta.current.isDirty === isDirty &&\n lastMeta.current.isSubmitting === isSubmitting &&\n lastMeta.current.canUndo === canUndo &&\n lastMeta.current.canRedo === canRedo\n ) {\n return lastMeta.current;\n }\n\n const nextMeta = { isValid, isDirty, isSubmitting, canUndo, canRedo };\n lastMeta.current = nextMeta;\n return nextMeta;\n }, [store]);\n\n const metaState = useSyncExternalStore(\n store.subscribe.bind(store),\n getMetaSnapshot,\n getMetaSnapshot,\n );\n\n const submit = useCallback(\n (onSuccess: (values: T) => void | Promise<void>) => {\n return (e?: { preventDefault: () => void }) => {\n e?.preventDefault?.();\n return store.submit(onSuccess);\n };\n },\n [store],\n );\n\n const onSubmit = useCallback(\n (handler: (values: T) => Promise<unknown>) => {\n return (e?: { preventDefault: () => void }) => {\n e?.preventDefault?.();\n setSubmitError(null);\n\n return store.submit(async (values) => {\n try {\n const result = await handler(values);\n setLastResponse(result);\n setSubmitError(null);\n } catch (err) {\n if (isValidationErrorShape(err)) {\n store.setServerErrors(extractServerErrors(err));\n } else {\n setSubmitError(\n err instanceof Error ? err : new Error(String(err)),\n );\n }\n }\n });\n };\n },\n [store],\n );\n\n const reset = useCallback(() => {\n store.reset();\n setSubmitError(null);\n setLastResponse(null);\n }, [store]);\n\n const getValues = useCallback(() => store.getState().values, [store]);\n const getErrors = useCallback(() => store.getState().errors, [store]);\n const getTouched = useCallback(() => store.getState().touched, [store]);\n\n const meta = useMemo(\n () => ({\n ...metaState,\n submitError,\n lastResponse,\n }),\n [metaState, submitError, lastResponse],\n );\n\n return {\n // Metadata (grouped)\n meta,\n // Getters\n getValues,\n getErrors,\n getTouched,\n // Main actions (frequent use - flat)\n submit,\n onSubmit,\n reset,\n setField: store.setField.bind(store),\n blurField: store.blurField.bind(store),\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 validate: store.validate.bind(store),\n registerMask: store.registerMask.bind(store),\n // Array mutations (grouped)\n mutations: {\n pushItem: store.pushItem.bind(store),\n removeItem: store.removeItem.bind(store),\n prependItem: store.prependItem.bind(store),\n insertItem: store.insertItem.bind(store),\n moveItem: store.moveItem.bind(store),\n swapItems: store.swapItems.bind(store),\n },\n // History (grouped)\n history: {\n undo: store.undo.bind(store),\n redo: store.redo.bind(store),\n },\n };\n}\n","import {\n useCallback,\n useSyncExternalStore,\n useState,\n useMemo,\n useEffect,\n} from \"react\";\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 = useCallback(() => {\n const state = store.getState();\n const value = getDeepValue(state.values, path as string) as\n | BitPathValue<TForm, P>\n | undefined;\n return Array.isArray(value) ? (value as Item[]) : [];\n }, [store, path]);\n\n const data = useSyncExternalStore(\n store.subscribe.bind(store),\n getSnapshot,\n getSnapshot,\n );\n\n const [ids, setIds] = useState<string[]>(() =>\n (data as Item[]).map(generateId),\n );\n\n useEffect(() => {\n if (data.length !== ids.length) {\n setIds((prevIds) => {\n if (data.length > prevIds.length) {\n const diff = data.length - prevIds.length;\n return [...prevIds, ...Array(diff).fill(null).map(generateId)];\n }\n return prevIds.slice(0, data.length);\n });\n }\n }, [data.length]);\n\n const methods = useMemo(\n () => ({\n append: (value: Item) => {\n setIds((prev) => [...prev, generateId()]);\n store.pushItem(path, value);\n },\n prepend: (value: Item) => {\n setIds((prev) => [generateId(), ...prev]);\n store.prependItem(path, value);\n },\n insert: (index: number, value: Item) => {\n setIds((prev) => {\n const newIds = [...prev];\n newIds.splice(index, 0, generateId());\n return newIds;\n });\n store.insertItem(path, index, value);\n },\n remove: (index: number) => {\n setIds((prev) => prev.filter((_, i) => i !== index));\n store.removeItem(path, index);\n },\n move: (from: number, to: number) => {\n setIds((prev) => {\n const newIds = [...prev];\n const [item] = newIds.splice(from, 1);\n newIds.splice(to, 0, item);\n return newIds;\n });\n store.moveItem(path, from, to);\n },\n swap: (indexA: number, indexB: number) => {\n setIds((prev) => {\n const newIds = [...prev];\n [newIds[indexA], newIds[indexB]] = [newIds[indexB], newIds[indexA]];\n return newIds;\n });\n store.swapItems(path, indexA, indexB);\n },\n replace: (items: Item[]) => {\n setIds(items.map(generateId));\n store.setField(path as unknown as BitPath<TForm>, items as any);\n },\n clear: () => {\n setIds([]);\n store.setField(path as unknown as BitPath<TForm>, [] as any);\n },\n }),\n [store, path],\n );\n\n const fields = useMemo(\n () =>\n (data as Item[]).map((item: Item, index: number) => ({\n key: ids[index] || `temp-${index}`,\n value: item,\n index,\n })),\n [data, ids],\n );\n\n return {\n fields,\n length: data.length,\n ...methods,\n };\n}\n","import { useCallback, useSyncExternalStore, useRef } from \"react\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./context\";\n\nexport type { ScopeStatus, ValidateScopeResult };\n\nexport function useBitScope(scopeName: string) {\n const store = useBitStore();\n\n const lastStatus = useRef<ScopeStatus | null>(null);\n\n const getStatusSnapshot = useCallback(() => {\n const nextStatus = store.getStepStatus(scopeName);\n\n if (\n lastStatus.current &&\n lastStatus.current.hasErrors === nextStatus.hasErrors &&\n lastStatus.current.isDirty === nextStatus.isDirty &&\n Object.keys(lastStatus.current.errors).length ===\n Object.keys(nextStatus.errors).length &&\n Object.entries(nextStatus.errors).every(\n ([k, v]) => lastStatus.current!.errors[k] === v,\n )\n ) {\n return lastStatus.current;\n }\n\n lastStatus.current = nextStatus;\n return nextStatus;\n }, [store, scopeName]);\n\n const status = useSyncExternalStore(\n store.subscribe.bind(store),\n getStatusSnapshot,\n getStatusSnapshot,\n );\n\n const validate = useCallback(async (): Promise<ValidateScopeResult> => {\n const valid = await store.validate({ scope: scopeName });\n const errors = store.getStepErrors(scopeName);\n return { valid, errors };\n }, [store, scopeName]);\n\n const getErrors = useCallback(() => {\n return store.getStepErrors(scopeName);\n }, [store, scopeName]);\n\n return {\n scopeName,\n status,\n errors: status.errors,\n validate,\n getErrors,\n isValid: !status.hasErrors,\n isDirty: status.isDirty,\n };\n}\n","import { useCallback, useSyncExternalStore, useRef, useState } from \"react\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./context\";\n\nexport interface UseBitStepsResult {\n step: number;\n stepIndex: number;\n scope: string;\n next: () => Promise<boolean>;\n prev: () => void;\n goTo: (step: number) => void;\n isFirst: boolean;\n isLast: boolean;\n status: ScopeStatus;\n errors: Record<string, string>;\n isValid: boolean;\n isDirty: 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, setStepIndex] = useState(0);\n\n const scope = scopeNames[stepIndex] ?? \"\";\n const lastStatus = useRef<ScopeStatus | null>(null);\n\n const getStatusSnapshot = useCallback(() => {\n const nextStatus = store.getStepStatus(scope);\n\n if (\n lastStatus.current &&\n lastStatus.current.hasErrors === nextStatus.hasErrors &&\n lastStatus.current.isDirty === nextStatus.isDirty &&\n Object.keys(lastStatus.current.errors).length ===\n Object.keys(nextStatus.errors).length &&\n Object.entries(nextStatus.errors).every(\n ([k, v]) => lastStatus.current!.errors[k] === v,\n )\n ) {\n return lastStatus.current;\n }\n\n lastStatus.current = nextStatus;\n return nextStatus;\n }, [store, scope]);\n\n const status = useSyncExternalStore(\n store.subscribe.bind(store),\n getStatusSnapshot,\n getStatusSnapshot,\n );\n\n const validate = useCallback(async (): Promise<ValidateScopeResult> => {\n const valid = await store.validate({ scope });\n const errors = store.getStepErrors(scope);\n return { valid, errors };\n }, [store, scope]);\n\n const getErrors = useCallback(() => {\n return store.getStepErrors(scope);\n }, [store, scope]);\n\n const next = useCallback(async (): Promise<boolean> => {\n const valid = await store.validate({ scope });\n if (valid) {\n setStepIndex((s) => Math.min(s + 1, scopeNames.length - 1));\n } else {\n const errors = store.getStepErrors(scope);\n const pathsWithErrors = Object.keys(errors);\n if (pathsWithErrors.length > 0) {\n store.markFieldsTouched(pathsWithErrors);\n }\n }\n return valid;\n }, [store, scope, scopeNames.length]);\n\n const prev = useCallback(() => {\n setStepIndex((s) => Math.max(s - 1, 0));\n }, []);\n\n const goTo = useCallback((targetStep: number) => {\n setStepIndex(\n Math.max(0, Math.min(targetStep - 1, scopeNames.length - 1)),\n );\n }, [scopeNames.length]);\n\n const isFirst = stepIndex === 0;\n const isLast = stepIndex >= scopeNames.length - 1;\n\n return {\n step: stepIndex + 1,\n stepIndex,\n scope,\n next,\n prev,\n goTo,\n isFirst,\n isLast,\n status,\n errors: status.errors,\n isValid: !status.hasErrors,\n isDirty: status.isDirty,\n validate,\n getErrors,\n };\n}\n","import { useCallback, useSyncExternalStore, useRef } from \"react\";\nimport { useBitStore } from \"./context\";\nimport { getDeepValue, deepEqual, BitPath, BitPathValue } from \"../core\";\n\nexport function useBitWatch<\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): BitPathValue<TForm, P> {\n const store = useBitStore<TForm>();\n const lastValue = useRef<BitPathValue<TForm, P> | null>(null);\n\n const getSnapshot = useCallback(() => {\n const value = getDeepValue(\n store.getState().values,\n path as string,\n ) as BitPathValue<TForm, P>;\n\n if (\n lastValue.current !== null &&\n deepEqual(lastValue.current, value)\n ) {\n return lastValue.current;\n }\n\n lastValue.current = value;\n return value;\n }, [store, path]);\n\n const subscribe = useCallback(\n (cb: () => void) => store.subscribe(cb),\n [store],\n );\n\n return useSyncExternalStore(\n subscribe,\n getSnapshot,\n getSnapshot,\n ) as BitPathValue<TForm, P>;\n}\n","import { useCallback, useSyncExternalStore, useRef, useEffect } from \"react\";\nimport { useBitStore } from \"./context\";\nimport { getDeepValue, BitFieldDefinition, BitPath, BitPathValue } from \"../core\";\n\nexport function useBitFieldBase<\n TValue = any,\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P, config?: BitFieldDefinition<TForm>) {\n const store = useBitStore<TForm>();\n const lastState = useRef<{\n value: BitPathValue<TForm, P>;\n error: any;\n touched: boolean;\n isHidden: boolean;\n isRequired: boolean;\n isDirty: boolean;\n isValidating: boolean;\n } | null>(null);\n\n useEffect(() => {\n if (config) {\n store.registerField(path, config as any);\n }\n\n return () => {\n if (store.unregisterField) {\n store.unregisterField(path);\n }\n };\n }, [store, path, config]);\n\n const getSnapshot = useCallback(() => {\n const state = store.getState();\n const value = getDeepValue(\n state.values,\n path as string,\n ) as BitPathValue<TForm, P>;\n const error = state.errors[path];\n const touched = !!state.touched[path];\n\n const isHidden = store.isHidden(path);\n const isRequired = store.isRequired(path);\n const isDirty = store.isFieldDirty(path);\n const isValidating = store.isFieldValidating(path);\n\n if (\n lastState.current &&\n lastState.current.value === value &&\n lastState.current.error === error &&\n lastState.current.touched === touched &&\n lastState.current.isHidden === isHidden &&\n lastState.current.isRequired === isRequired &&\n lastState.current.isDirty === isDirty &&\n lastState.current.isValidating === isValidating\n ) {\n return lastState.current;\n }\n\n const newState = {\n value,\n error,\n touched,\n isHidden,\n isRequired,\n isDirty,\n isValidating,\n };\n lastState.current = newState;\n return newState;\n }, [store, path]);\n\n const subscribe = useCallback(\n (cb: () => void) => store.subscribe(cb),\n [store],\n );\n\n const fieldState = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n const setValue = useCallback(\n (val: BitPathValue<TForm, P>) => store.setField(path, val),\n [store, path],\n );\n\n const setBlur = useCallback(() => store.blurField(path), [store, path]);\n\n return { fieldState, setValue, setBlur, store };\n}\n"],"mappings":"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","names":["createContext","useContext","jsx","BitContext","BitFormProvider","store","children","useBitStore","useCallback","useSyncExternalStore","useMemo","useRef","useState","useBitForm","store","useBitStore","submitError","setSubmitError","useState","lastResponse","setLastResponse","lastMeta","useRef","getMetaSnapshot","useCallback","state","isValid","isDirty","isSubmitting","canUndo","canRedo","nextMeta","metaState","useSyncExternalStore","submit","onSuccess","e","onSubmit","handler","values","result","err","isValidationErrorShape","extractServerErrors","reset","getValues","getErrors","getTouched","useMemo","useCallback","useSyncExternalStore","useState","useMemo","useEffect","generateId","useBitArray","path","store","useBitStore","getSnapshot","useCallback","state","value","getDeepValue","data","useSyncExternalStore","ids","setIds","useState","useEffect","prevIds","diff","methods","useMemo","prev","index","newIds","_","i","from","to","item","indexA","indexB","items","useCallback","useSyncExternalStore","useRef","useBitScope","scopeName","store","useBitStore","lastStatus","useRef","getStatusSnapshot","useCallback","nextStatus","k","v","status","useSyncExternalStore","validate","valid","errors","getErrors","useCallback","useSyncExternalStore","useRef","useState","useBitSteps","scopeNames","store","useBitStore","stepIndex","setStepIndex","useState","scope","lastStatus","useRef","getStatusSnapshot","useCallback","nextStatus","k","v","status","useSyncExternalStore","validate","valid","errors","getErrors","next","s","pathsWithErrors","prev","goTo","targetStep","isFirst","isLast","useCallback","useSyncExternalStore","useRef","useBitWatch","path","store","useBitStore","lastValue","useRef","getSnapshot","useCallback","value","getDeepValue","deepEqual","subscribe","cb","useSyncExternalStore","useCallback","useSyncExternalStore","useRef","useEffect","useBitFieldBase","path","config","store","useBitStore","lastState","useRef","useEffect","getSnapshot","useCallback","state","value","getDeepValue","error","touched","isHidden","isRequired","isDirty","isValidating","newState","subscribe","cb","fieldState","useSyncExternalStore","setValue","val","setBlur"]}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkQB7MQ6ZBcjs = require('./chunk-QB7MQ6ZB.cjs');var _react = require('react');var _jsxruntime = require('react/jsx-runtime');var w=_react.createContext.call(void 0, null),nt= exports.a =({store:t,children:e})=>_jsxruntime.jsx.call(void 0, w.Provider,{value:t,children:e}),S= exports.b =()=>{let t=_react.useContext.call(void 0, w);if(!t)throw new Error("BitForm hooks devem ser usados dentro de um BitFormProvider");return t};function ct(){let t=S(),[e,r]=_react.useState.call(void 0, null),[i,a]=_react.useState.call(void 0, null),o=_react.useRef.call(void 0, null),g=_react.useCallback.call(void 0, ()=>{let u=t.getState(),{isValid:m,isDirty:b,isSubmitting:p}=u,T=t.canUndo,I=t.canRedo;if(o.current&&o.current.isValid===m&&o.current.isDirty===b&&o.current.isSubmitting===p&&o.current.canUndo===T&&o.current.canRedo===I)return o.current;let x={isValid:m,isDirty:b,isSubmitting:p,canUndo:T,canRedo:I};return o.current=x,x},[t]),c=_react.useSyncExternalStore.call(void 0, t.subscribe.bind(t),g,g),s=_react.useCallback.call(void 0, u=>m=>(_optionalChain([m, 'optionalAccess', _2 => _2.preventDefault, 'optionalCall', _3 => _3()]),t.submit(u)),[t]),n=_react.useCallback.call(void 0, u=>m=>(_optionalChain([m, 'optionalAccess', _4 => _4.preventDefault, 'optionalCall', _5 => _5()]),r(null),t.submit(async b=>{try{let p=await u(b);a(p),r(null)}catch(p){_chunkQB7MQ6ZBcjs.h.call(void 0, p)?t.setServerErrors(_chunkQB7MQ6ZBcjs.i.call(void 0, p)):r(p instanceof Error?p:new Error(String(p)))}})),[t]),d=_react.useCallback.call(void 0, ()=>{t.reset(),r(null),a(null)},[t]),l=_react.useCallback.call(void 0, ()=>t.getState().values,[t]),f=_react.useCallback.call(void 0, ()=>t.getState().errors,[t]),h=_react.useCallback.call(void 0, ()=>t.getState().touched,[t]);return{meta:_react.useMemo.call(void 0, ()=>({...c,submitError:e,lastResponse:i}),[c,e,i]),getValues:l,getErrors:f,getTouched:h,submit:s,onSubmit:n,reset:d,setField:t.setField.bind(t),blurField:t.blurField.bind(t),setValues:t.setValues.bind(t),setError:t.setError.bind(t),setErrors:t.setErrors.bind(t),setServerErrors:t.setServerErrors.bind(t),validate:t.validate.bind(t),registerMask:t.registerMask.bind(t),mutations:{pushItem:t.pushItem.bind(t),removeItem:t.removeItem.bind(t),prependItem:t.prependItem.bind(t),insertItem:t.insertItem.bind(t),moveItem:t.moveItem.bind(t),swapItems:t.swapItems.bind(t)},history:{undo:t.undo.bind(t),redo:t.redo.bind(t)}}}var B=()=>Math.random().toString(36).substring(2,9);function ht(t){let e=S(),r=_react.useCallback.call(void 0, ()=>{let s=e.getState(),n=_chunkQB7MQ6ZBcjs.e.call(void 0, s.values,t);return Array.isArray(n)?n:[]},[e,t]),i=_react.useSyncExternalStore.call(void 0, e.subscribe.bind(e),r,r),[a,o]=_react.useState.call(void 0, ()=>i.map(B));_react.useEffect.call(void 0, ()=>{i.length!==a.length&&o(s=>{if(i.length>s.length){let n=i.length-s.length;return[...s,...Array(n).fill(null).map(B)]}return s.slice(0,i.length)})},[i.length]);let g=_react.useMemo.call(void 0, ()=>({append:s=>{o(n=>[...n,B()]),e.pushItem(t,s)},prepend:s=>{o(n=>[B(),...n]),e.prependItem(t,s)},insert:(s,n)=>{o(d=>{let l=[...d];return l.splice(s,0,B()),l}),e.insertItem(t,s,n)},remove:s=>{o(n=>n.filter((d,l)=>l!==s)),e.removeItem(t,s)},move:(s,n)=>{o(d=>{let l=[...d],[f]=l.splice(s,1);return l.splice(n,0,f),l}),e.moveItem(t,s,n)},swap:(s,n)=>{o(d=>{let l=[...d];return[l[s],l[n]]=[l[n],l[s]],l}),e.swapItems(t,s,n)},replace:s=>{o(s.map(B)),e.setField(t,s)},clear:()=>{o([]),e.setField(t,[])}}),[e,t]);return{fields:_react.useMemo.call(void 0, ()=>i.map((s,n)=>({key:a[n]||`temp-${n}`,value:s,index:n})),[i,a]),length:i.length,...g}}function Ft(t){let e=S(),r=_react.useRef.call(void 0, null),i=_react.useCallback.call(void 0, ()=>{let c=e.getStepStatus(t);return r.current&&r.current.hasErrors===c.hasErrors&&r.current.isDirty===c.isDirty&&Object.keys(r.current.errors).length===Object.keys(c.errors).length&&Object.entries(c.errors).every(([s,n])=>r.current.errors[s]===n)?r.current:(r.current=c,c)},[e,t]),a=_react.useSyncExternalStore.call(void 0, e.subscribe.bind(e),i,i),o=_react.useCallback.call(void 0, async()=>{let c=await e.validate({scope:t}),s=e.getStepErrors(t);return{valid:c,errors:s}},[e,t]),g=_react.useCallback.call(void 0, ()=>e.getStepErrors(t),[e,t]);return{scopeName:t,status:a,errors:a.errors,validate:o,getErrors:g,isValid:!a.hasErrors,isDirty:a.isDirty}}function It(t){let e=S(),[r,i]=_react.useState.call(void 0, 0),a=_nullishCoalesce(t[r], () => ("")),o=_react.useRef.call(void 0, null),g=_react.useCallback.call(void 0, ()=>{let u=e.getStepStatus(a);return o.current&&o.current.hasErrors===u.hasErrors&&o.current.isDirty===u.isDirty&&Object.keys(o.current.errors).length===Object.keys(u.errors).length&&Object.entries(u.errors).every(([m,b])=>o.current.errors[m]===b)?o.current:(o.current=u,u)},[e,a]),c=_react.useSyncExternalStore.call(void 0, e.subscribe.bind(e),g,g),s=_react.useCallback.call(void 0, async()=>{let u=await e.validate({scope:a}),m=e.getStepErrors(a);return{valid:u,errors:m}},[e,a]),n=_react.useCallback.call(void 0, ()=>e.getStepErrors(a),[e,a]),d=_react.useCallback.call(void 0, async()=>{let u=await e.validate({scope:a});if(u)i(m=>Math.min(m+1,t.length-1));else{let m=e.getStepErrors(a),b=Object.keys(m);b.length>0&&e.markFieldsTouched(b)}return u},[e,a,t.length]),l=_react.useCallback.call(void 0, ()=>{i(u=>Math.max(u-1,0))},[]),f=_react.useCallback.call(void 0, u=>{i(Math.max(0,Math.min(u-1,t.length-1)))},[t.length]),h=r===0,F=r>=t.length-1;return{step:r+1,stepIndex:r,scope:a,next:d,prev:l,goTo:f,isFirst:h,isLast:F,status:c,errors:c.errors,isValid:!c.hasErrors,isDirty:c.isDirty,validate:s,getErrors:n}}function jt(t){let e=S(),r=_react.useRef.call(void 0, null),i=_react.useCallback.call(void 0, ()=>{let o=_chunkQB7MQ6ZBcjs.e.call(void 0, e.getState().values,t);return r.current!==null&&_chunkQB7MQ6ZBcjs.d.call(void 0, r.current,o)?r.current:(r.current=o,o)},[e,t]),a=_react.useCallback.call(void 0, o=>e.subscribe(o),[e]);return _react.useSyncExternalStore.call(void 0, a,i,i)}function Wt(t,e){let r=S(),i=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>(e&&r.registerField(t,e),()=>{r.unregisterField&&r.unregisterField(t)}),[r,t,e]);let a=_react.useCallback.call(void 0, ()=>{let n=r.getState(),d=_chunkQB7MQ6ZBcjs.e.call(void 0, n.values,t),l=n.errors[t],f=!!n.touched[t],h=r.isHidden(t),F=r.isRequired(t),u=r.isFieldDirty(t),m=r.isFieldValidating(t);if(i.current&&i.current.value===d&&i.current.error===l&&i.current.touched===f&&i.current.isHidden===h&&i.current.isRequired===F&&i.current.isDirty===u&&i.current.isValidating===m)return i.current;let b={value:d,error:l,touched:f,isHidden:h,isRequired:F,isDirty:u,isValidating:m};return i.current=b,b},[r,t]),o=_react.useCallback.call(void 0, n=>r.subscribe(n),[r]),g=_react.useSyncExternalStore.call(void 0, o,a,a),c=_react.useCallback.call(void 0, n=>r.setField(t,n),[r,t]),s=_react.useCallback.call(void 0, ()=>r.blurField(t),[r,t]);return{fieldState:g,setValue:c,setBlur:s,store:r}}exports.a = nt; exports.b = S; exports.c = ct; exports.d = Wt; exports.e = ht; exports.f = Ft; exports.g = It; exports.h = jt;
2
- //# sourceMappingURL=chunk-IUDMKNON.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/chunk-IUDMKNON.cjs","../src/react/context.tsx","../src/react/use-bit-form.ts","../src/react/use-bit-array.ts"],"names":["BitContext","createContext","BitFormProvider","store","children","jsx","useBitStore","useContext","useBitForm","submitError","setSubmitError","useState","lastResponse","setLastResponse","lastMeta","useRef","getMetaSnapshot","useCallback","state","isValid","isDirty","isSubmitting","canUndo","canRedo","nextMeta","metaState","useSyncExternalStore","submit","onSuccess","e","onSubmit","handler","values","result","err","isValidationErrorShape","extractServerErrors","reset","getValues","getErrors","getTouched","useMemo","generateId","useBitArray","path","getSnapshot","value","getDeepValue","data","ids","setIds","useEffect","prevIds","diff","methods","prev","index","newIds","_","i","from","to","item","indexA","indexB","items"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/chunk-IUDMKNON.cjs","sourcesContent":[null,"import React, { createContext, useContext } from \"react\";\nimport { BitStore } from \"../core\";\n\nconst BitContext = createContext<BitStore<any> | null>(null);\n\nexport const BitFormProvider = ({\n store,\n children,\n}: {\n store: BitStore<any>;\n children: React.ReactNode;\n}) => <BitContext.Provider value={store}>{children}</BitContext.Provider>;\n\nexport const useBitStore = <T extends object>() => {\n const store = useContext(BitContext);\n if (!store)\n throw new Error(\n \"BitForm hooks devem ser usados dentro de um BitFormProvider\",\n );\n return store as BitStore<T>;\n};\n","import {\n useCallback,\n useSyncExternalStore,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useBitStore } from \"./context\";\nimport { isValidationErrorShape, extractServerErrors } from \"../core/utils\";\n\nexport function useBitForm<T extends object>() {\n const store = useBitStore<T>();\n\n const [submitError, setSubmitError] = useState<Error | null>(null);\n const [lastResponse, setLastResponse] = useState<unknown>(null);\n\n const lastMeta = useRef<{\n isValid: boolean;\n isDirty: boolean;\n isSubmitting: boolean;\n canUndo: boolean;\n canRedo: boolean;\n } | null>(null);\n\n const getMetaSnapshot = useCallback(() => {\n const state = store.getState();\n const { isValid, isDirty, isSubmitting } = state;\n const canUndo = store.canUndo;\n const canRedo = store.canRedo;\n\n if (\n lastMeta.current &&\n lastMeta.current.isValid === isValid &&\n lastMeta.current.isDirty === isDirty &&\n lastMeta.current.isSubmitting === isSubmitting &&\n lastMeta.current.canUndo === canUndo &&\n lastMeta.current.canRedo === canRedo\n ) {\n return lastMeta.current;\n }\n\n const nextMeta = { isValid, isDirty, isSubmitting, canUndo, canRedo };\n lastMeta.current = nextMeta;\n return nextMeta;\n }, [store]);\n\n const metaState = useSyncExternalStore(\n store.subscribe.bind(store),\n getMetaSnapshot,\n getMetaSnapshot,\n );\n\n const submit = useCallback(\n (onSuccess: (values: T) => void | Promise<void>) => {\n return (e?: { preventDefault: () => void }) => {\n e?.preventDefault?.();\n return store.submit(onSuccess);\n };\n },\n [store],\n );\n\n const onSubmit = useCallback(\n (handler: (values: T) => Promise<unknown>) => {\n return (e?: { preventDefault: () => void }) => {\n e?.preventDefault?.();\n setSubmitError(null);\n\n return store.submit(async (values) => {\n try {\n const result = await handler(values);\n setLastResponse(result);\n setSubmitError(null);\n } catch (err) {\n if (isValidationErrorShape(err)) {\n store.setServerErrors(extractServerErrors(err));\n } else {\n setSubmitError(\n err instanceof Error ? err : new Error(String(err)),\n );\n }\n }\n });\n };\n },\n [store],\n );\n\n const reset = useCallback(() => {\n store.reset();\n setSubmitError(null);\n setLastResponse(null);\n }, [store]);\n\n const getValues = useCallback(() => store.getState().values, [store]);\n const getErrors = useCallback(() => store.getState().errors, [store]);\n const getTouched = useCallback(() => store.getState().touched, [store]);\n\n const meta = useMemo(\n () => ({\n ...metaState,\n submitError,\n lastResponse,\n }),\n [metaState, submitError, lastResponse],\n );\n\n return {\n // Metadata (grouped)\n meta,\n // Getters\n getValues,\n getErrors,\n getTouched,\n // Main actions (frequent use - flat)\n submit,\n onSubmit,\n reset,\n setField: store.setField.bind(store),\n blurField: store.blurField.bind(store),\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 validate: store.validate.bind(store),\n registerMask: store.registerMask.bind(store),\n // Array mutations (grouped)\n mutations: {\n pushItem: store.pushItem.bind(store),\n removeItem: store.removeItem.bind(store),\n prependItem: store.prependItem.bind(store),\n insertItem: store.insertItem.bind(store),\n moveItem: store.moveItem.bind(store),\n swapItems: store.swapItems.bind(store),\n },\n // History (grouped)\n history: {\n undo: store.undo.bind(store),\n redo: store.redo.bind(store),\n },\n };\n}\n","import {\n useCallback,\n useSyncExternalStore,\n useState,\n useMemo,\n useEffect,\n} from \"react\";\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 = useCallback(() => {\n const state = store.getState();\n const value = getDeepValue(state.values, path as string) as\n | BitPathValue<TForm, P>\n | undefined;\n return Array.isArray(value) ? (value as Item[]) : [];\n }, [store, path]);\n\n const data = useSyncExternalStore(\n store.subscribe.bind(store),\n getSnapshot,\n getSnapshot,\n );\n\n const [ids, setIds] = useState<string[]>(() =>\n (data as Item[]).map(generateId),\n );\n\n useEffect(() => {\n if (data.length !== ids.length) {\n setIds((prevIds) => {\n if (data.length > prevIds.length) {\n const diff = data.length - prevIds.length;\n return [...prevIds, ...Array(diff).fill(null).map(generateId)];\n }\n return prevIds.slice(0, data.length);\n });\n }\n }, [data.length]);\n\n const methods = useMemo(\n () => ({\n append: (value: Item) => {\n setIds((prev) => [...prev, generateId()]);\n store.pushItem(path, value);\n },\n prepend: (value: Item) => {\n setIds((prev) => [generateId(), ...prev]);\n store.prependItem(path, value);\n },\n insert: (index: number, value: Item) => {\n setIds((prev) => {\n const newIds = [...prev];\n newIds.splice(index, 0, generateId());\n return newIds;\n });\n store.insertItem(path, index, value);\n },\n remove: (index: number) => {\n setIds((prev) => prev.filter((_, i) => i !== index));\n store.removeItem(path, index);\n },\n move: (from: number, to: number) => {\n setIds((prev) => {\n const newIds = [...prev];\n const [item] = newIds.splice(from, 1);\n newIds.splice(to, 0, item);\n return newIds;\n });\n store.moveItem(path, from, to);\n },\n swap: (indexA: number, indexB: number) => {\n setIds((prev) => {\n const newIds = [...prev];\n [newIds[indexA], newIds[indexB]] = [newIds[indexB], newIds[indexA]];\n return newIds;\n });\n store.swapItems(path, indexA, indexB);\n },\n replace: (items: Item[]) => {\n setIds(items.map(generateId));\n store.setField(path as unknown as BitPath<TForm>, items as any);\n },\n clear: () => {\n setIds([]);\n store.setField(path as unknown as BitPath<TForm>, [] as any);\n },\n }),\n [store, path],\n );\n\n const fields = useMemo(\n () =>\n (data as Item[]).map((item: Item, index: number) => ({\n key: ids[index] || `temp-${index}`,\n value: item,\n index,\n })),\n [data, ids],\n );\n\n return {\n fields,\n length: data.length,\n ...methods,\n };\n}\n"]}