@lehnihon/bit-form 2.1.2 → 2.2.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.
- package/README.md +6 -0
- package/dist/angular/index.cjs +1 -1
- package/dist/angular/index.cjs.map +1 -1
- package/dist/angular/index.d.cts +29 -17
- package/dist/angular/index.d.ts +29 -17
- package/dist/angular/index.js +1 -1
- package/dist/angular/index.js.map +1 -1
- package/dist/bus-B3pGaiFZ.d.cts +255 -0
- package/dist/bus-B3pGaiFZ.d.ts +255 -0
- package/dist/chunk-442A4FTZ.cjs +2 -0
- package/dist/chunk-442A4FTZ.cjs.map +1 -0
- package/dist/chunk-6FJEE6O3.js +133 -0
- package/dist/chunk-6FJEE6O3.js.map +1 -0
- package/dist/chunk-FOV24ACZ.js +2 -0
- package/dist/chunk-FOV24ACZ.js.map +1 -0
- package/dist/chunk-YWXX6XRV.cjs +133 -0
- package/dist/chunk-YWXX6XRV.cjs.map +1 -0
- package/dist/devtools/bridge.cjs +1 -1
- package/dist/devtools/bridge.js +1 -1
- package/dist/devtools/index.cjs +1 -1
- package/dist/devtools/index.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -6
- package/dist/index.d.ts +7 -6
- package/dist/index.js +1 -1
- package/dist/public-types-CtYuIAMP.d.cts +99 -0
- package/dist/public-types-Lq3eLstW.d.ts +99 -0
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +5 -5
- package/dist/react/index.d.ts +5 -5
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react-native/index.cjs +1 -1
- package/dist/react-native/index.cjs.map +1 -1
- package/dist/react-native/index.d.cts +10 -12
- package/dist/react-native/index.d.ts +10 -12
- package/dist/react-native/index.js +1 -1
- package/dist/react-native/index.js.map +1 -1
- package/dist/resolvers/joi.d.cts +1 -1
- package/dist/resolvers/joi.d.ts +1 -1
- package/dist/resolvers/yup.d.cts +1 -1
- package/dist/resolvers/yup.d.ts +1 -1
- package/dist/resolvers/zod.d.cts +1 -1
- package/dist/resolvers/zod.d.ts +1 -1
- package/dist/{use-bit-watch-hA0AqCkC.d.ts → use-bit-persist-CWzGfovL.d.cts} +27 -19
- package/dist/{use-bit-watch-BRekIj2W.d.cts → use-bit-persist-hxJaKG2S.d.ts} +27 -19
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.d.cts +45 -33
- package/dist/vue/index.d.ts +45 -33
- package/dist/vue/index.js +1 -1
- package/dist/vue/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/bus-vCbulIYH.d.cts +0 -141
- package/dist/bus-vCbulIYH.d.ts +0 -141
- package/dist/chunk-2QNUW6ZN.cjs +0 -133
- package/dist/chunk-2QNUW6ZN.cjs.map +0 -1
- package/dist/chunk-F6LJWWEW.js +0 -2
- package/dist/chunk-F6LJWWEW.js.map +0 -1
- package/dist/chunk-LPRLSFPT.cjs +0 -2
- package/dist/chunk-LPRLSFPT.cjs.map +0 -1
- package/dist/chunk-N6IA7HQL.js +0 -133
- package/dist/chunk-N6IA7HQL.js.map +0 -1
- package/dist/public-types-ChP5j3xc.d.ts +0 -69
- package/dist/public-types-Nv__uZTR.d.cts +0 -69
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/store/bus.ts","../src/core/utils.ts","../src/core/mask/creators.ts","../src/core/mask/presets.ts","../src/core/mask/index.ts","../src/core/store/config.ts","../src/core/store/dependency-manager.ts","../src/core/store/history-manager.ts","../src/core/store/array-manager.ts","../src/core/store/computed-manager.ts","../src/core/store/validation-manager.ts","../src/core/store/lifecycle-manager.ts","../src/devtools/ui/styles.ts","../src/devtools/ui/index.ts","../src/devtools/adapters/local.ts","../src/devtools/adapters/remote.ts","../src/devtools/init-dev-tools.ts","../src/core/store/devtools-manager.ts","../src/core/store/dirty-manager.ts","../src/core/store/scope-manager.ts","../src/core/store/field-query-manager.ts","../src/core/store/error-manager.ts","../src/core/store/persist-manager.ts","../src/core/store/plugin-manager.ts","../src/core/store/index.ts","../src/core/store/create-store.ts","../src/devtools/bridge.ts"],"sourcesContent":["import { BitBusListener, BitFormGlobal } from \"./bus-types\";\n\ndeclare global {\n var __BIT_FORM__: BitFormGlobal | undefined;\n}\n\nconst rootGlobal =\n typeof globalThis !== \"undefined\"\n ? globalThis\n : typeof global !== \"undefined\"\n ? global\n : window;\n\nif (!rootGlobal.__BIT_FORM__) {\n rootGlobal.__BIT_FORM__ = {\n stores: {},\n listeners: new Set<BitBusListener>(),\n\n dispatch(id: string, state: any) {\n this.listeners.forEach((fn: BitBusListener) => fn(id, state));\n },\n\n subscribe(fn: BitBusListener) {\n this.listeners.add(fn);\n return () => {\n this.listeners.delete(fn);\n };\n },\n };\n}\n\nexport const bitBus = rootGlobal.__BIT_FORM__ as BitFormGlobal;\n","export function deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") {\n return obj;\n }\n\n if (obj instanceof Date) {\n return new Date(obj.getTime()) as any as T;\n }\n if (obj instanceof RegExp) {\n return new RegExp(obj.source, obj.flags) as any as T;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => deepClone(item)) as any as T;\n }\n\n const clone: any = {};\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n clone[key] = deepClone((obj as any)[key]);\n }\n }\n return clone as T;\n}\n\nexport function deepMerge<T>(target: T, source: any): T {\n if (source === undefined) {\n return deepClone(target);\n }\n\n if (\n source === null ||\n typeof source !== \"object\" ||\n source instanceof Date ||\n source instanceof RegExp ||\n Array.isArray(source)\n ) {\n return deepClone(source as T);\n }\n\n const base =\n target && typeof target === \"object\" && !Array.isArray(target)\n ? deepClone(target as any)\n : ({} as Record<string, unknown>);\n\n for (const key of Object.keys(source)) {\n const sourceValue = source[key];\n const baseValue = (base as Record<string, unknown>)[key];\n\n if (\n sourceValue !== null &&\n typeof sourceValue === \"object\" &&\n !Array.isArray(sourceValue) &&\n !(sourceValue instanceof Date) &&\n !(sourceValue instanceof RegExp)\n ) {\n (base as Record<string, unknown>)[key] = deepMerge(\n baseValue,\n sourceValue,\n );\n continue;\n }\n\n (base as Record<string, unknown>)[key] = deepClone(sourceValue);\n }\n\n return base as T;\n}\n\n/**\n * Fast equality for single values. Uses === for primitives, deepEqual for objects/arrays.\n * Prefer over deepEqual when comparing a single field value (e.g. isFieldDirty, getStepStatus).\n */\nexport function valueEqual(a: any, b: any): boolean {\n if (a === b) return true;\n if (\n a === null ||\n typeof a !== \"object\" ||\n b === null ||\n typeof b !== \"object\"\n ) {\n return false;\n }\n return deepEqual(a, b);\n}\n\nexport function deepEqual(a: any, b: any): boolean {\n if (a === b) return true;\n if (\n a === null ||\n typeof a !== \"object\" ||\n b === null ||\n typeof b !== \"object\"\n ) {\n return false;\n }\n\n if (a instanceof Date && b instanceof Date)\n return a.getTime() === b.getTime();\n if (a instanceof RegExp && b instanceof RegExp)\n return a.toString() === b.toString();\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (\n !Object.prototype.hasOwnProperty.call(b, key) ||\n !deepEqual(a[key], b[key])\n ) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Collects all paths where obj differs from initial. Used to rebuild dirtyPaths after full state replacement.\n */\nexport function collectDirtyPaths(\n obj: any,\n initial: any,\n prefix = \"\",\n result: Set<string> = new Set(),\n): Set<string> {\n if (valueEqual(obj, initial)) return result;\n if (\n obj === null ||\n typeof obj !== \"object\" ||\n initial === null ||\n typeof initial !== \"object\"\n ) {\n if (prefix) result.add(prefix);\n return result;\n }\n if (Array.isArray(obj) || Array.isArray(initial)) {\n if (!valueEqual(obj, initial) && prefix) result.add(prefix);\n return result;\n }\n const allKeys = new Set([\n ...Object.keys(obj || {}),\n ...Object.keys(initial || {}),\n ]);\n for (const k of allKeys) {\n const p = prefix ? `${prefix}.${k}` : k;\n collectDirtyPaths((obj as any)?.[k], (initial as any)?.[k], p, result);\n }\n return result;\n}\n\nconst pathCache = new Map<string, string[]>();\n\nexport function getDeepValue(obj: any, path: string): any {\n if (!path) return obj;\n\n const keys = pathCache.get(path) || path.split(\".\");\n if (!pathCache.has(path)) pathCache.set(path, keys);\n\n let current = obj;\n for (const key of keys) {\n if (current === null || current === undefined) return undefined;\n current = current[key];\n }\n return current;\n}\n\nexport function setDeepValue(obj: any, path: string, value: any): any {\n if (!path) return value;\n\n const keys = pathCache.get(path) || path.split(\".\");\n if (!pathCache.has(path)) pathCache.set(path, keys);\n\n const result = Array.isArray(obj) ? [...obj] : { ...obj };\n let current = result;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n const nextKey = keys[i + 1];\n\n const isNextNumeric = /^\\d+$/.test(nextKey);\n const currentValue = current[key];\n\n if (currentValue === null || currentValue === undefined) {\n current[key] = isNextNumeric ? [] : {};\n } else {\n current[key] = Array.isArray(currentValue)\n ? [...currentValue]\n : { ...currentValue };\n }\n\n current = current[key];\n }\n\n current[keys[keys.length - 1]] = value;\n\n return result;\n}\n\nexport function cleanPrefixedKeys(\n obj: Record<string, any>,\n prefix: string,\n): Record<string, any> {\n const newObj: Record<string, any> = {};\n const prefixWithDot = `${prefix}.`;\n\n for (const key in obj) {\n if (key !== prefix && !key.startsWith(prefixWithDot)) {\n newObj[key] = obj[key];\n }\n }\n return newObj;\n}\n\nexport const shiftKeys = (\n obj: Record<string, any>,\n path: string,\n removedIndex: number,\n) => {\n const newObj: Record<string, any> = {};\n const prefix = `${path}.`;\n\n Object.keys(obj).forEach((key) => {\n if (!key.startsWith(prefix)) {\n newObj[key] = obj[key];\n return;\n }\n const remaining = key.substring(prefix.length);\n const parts = remaining.split(\".\");\n const currentIdx = parseInt(parts[0], 10);\n const rest = parts.slice(1).join(\".\");\n\n if (currentIdx === removedIndex) return;\n\n if (currentIdx > removedIndex) {\n const newIdx = currentIdx - 1;\n const newKey = rest ? `${prefix}${newIdx}.${rest}` : `${prefix}${newIdx}`;\n newObj[newKey] = obj[key];\n } else {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n};\n\nexport const swapKeys = (\n obj: Record<string, any>,\n path: string,\n indexA: number,\n indexB: number,\n) => {\n const newObj: Record<string, any> = {};\n const prefix = `${path}.`;\n\n Object.keys(obj).forEach((key) => {\n if (!key.startsWith(prefix)) {\n newObj[key] = obj[key];\n return;\n }\n const remaining = key.substring(prefix.length);\n const parts = remaining.split(\".\");\n const currentIdx = parseInt(parts[0], 10);\n const rest = parts.slice(1).join(\".\");\n\n if (currentIdx === indexA) {\n const newKey = rest ? `${prefix}${indexB}.${rest}` : `${prefix}${indexB}`;\n newObj[newKey] = obj[key];\n } else if (currentIdx === indexB) {\n const newKey = rest ? `${prefix}${indexA}.${rest}` : `${prefix}${indexA}`;\n newObj[newKey] = obj[key];\n } else {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n};\n\nexport const moveKeys = (\n obj: Record<string, any>,\n path: string,\n from: number,\n to: number,\n) => {\n const newObj: Record<string, any> = {};\n const prefix = `${path}.`;\n\n Object.keys(obj).forEach((key) => {\n if (!key.startsWith(prefix)) {\n newObj[key] = obj[key];\n return;\n }\n const remaining = key.substring(prefix.length);\n const parts = remaining.split(\".\");\n const currentIdx = parseInt(parts[0], 10);\n const rest = parts.slice(1).join(\".\");\n\n let newIdx = currentIdx;\n if (currentIdx === from) {\n newIdx = to;\n } else if (from < to && currentIdx > from && currentIdx <= to) {\n newIdx = currentIdx - 1;\n } else if (from > to && currentIdx >= to && currentIdx < from) {\n newIdx = currentIdx + 1;\n }\n\n const newKey = rest ? `${prefix}${newIdx}.${rest}` : `${prefix}${newIdx}`;\n newObj[newKey] = obj[key];\n });\n return newObj;\n};\n\n/**\n * Checks if a value looks like a server validation error response.\n * Handles shapes like { email: \"Taken\" }, { errors: { email: [\"Taken\"] } }, etc.\n */\nexport function isValidationErrorShape(\n x: unknown,\n): x is Record<string, string | string[]> {\n if (typeof x !== \"object\" || x === null || Array.isArray(x)) return false;\n\n const obj = (x as Record<string, unknown>).errors ?? x;\n if (typeof obj !== \"object\" || obj === null || Array.isArray(obj))\n return false;\n\n return Object.values(obj as Record<string, unknown>).every(\n (v) =>\n typeof v === \"string\" ||\n (Array.isArray(v) && v.every((i) => typeof i === \"string\")),\n );\n}\n\n/**\n * Extracts server errors in the format expected by setServerErrors.\n */\nexport function extractServerErrors(\n x: unknown,\n): Record<string, string | string[]> {\n if (!isValidationErrorShape(x)) return {};\n\n const obj = (x as Record<string, unknown>).errors ?? x;\n return obj as Record<string, string | string[]>;\n}\n","import {\n BitMask,\n CurrencyMaskConfig,\n DateMaskConfig,\n PatternMaskOptions,\n} from \"./types\";\n\ntype TokenMap = Record<string, RegExp>;\n\nconst tokens: TokenMap = {\n \"#\": /\\d/,\n A: /[a-zA-Z]/,\n X: /[a-zA-Z0-9]/,\n H: /[0-9a-fA-F]/,\n U: /[A-Z]/,\n L: /[a-z]/,\n \"*\": /./,\n};\n\nexport const unmask = (\n value: string | number | null | undefined,\n allowChars?: string,\n): string => {\n if (value === null || value === undefined || value === \"\") return \"\";\n const stringValue = String(value);\n const isNegative = stringValue.startsWith(\"-\");\n\n const escapedChars = allowChars\n ? allowChars.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n : \"\";\n const regex = new RegExp(`[^a-zA-Z0-9${escapedChars}]`, \"g\");\n\n const clean = stringValue.replace(regex, \"\");\n return isNegative && clean && !clean.startsWith(\"-\") ? `-${clean}` : clean;\n};\n\nexport const unmaskCurrency = (value: any, precision = 2): number => {\n if (typeof value === \"number\") return value;\n if (!value) return 0;\n\n const stringValue = String(value);\n const isNegative = stringValue.includes(\"-\");\n const digits = stringValue.replace(/\\D/g, \"\");\n\n if (!digits) return 0;\n\n const numberValue = parseInt(digits, 10) / Math.pow(10, precision);\n return isNegative ? -numberValue : numberValue;\n};\n\nexport const createPatternMask = (\n pattern: string | string[],\n options?: PatternMaskOptions,\n): BitMask => {\n const getRawLength = (p: string) =>\n p.split(\"\").filter((c) => tokens[c]).length;\n\n return {\n format: (value: any) => {\n let stringVal = unmask(value, options?.allowChars);\n\n // Se não há valor e o guide não está ativo, retorna vazio logo de cara\n if (!stringVal && !options?.guide) return \"\";\n\n const patterns = Array.isArray(pattern) ? pattern : [pattern];\n const sortedPatterns = [...patterns].sort(\n (a, b) => getRawLength(a) - getRawLength(b),\n );\n\n let activePattern = sortedPatterns[sortedPatterns.length - 1];\n for (const p of sortedPatterns) {\n if (stringVal.length <= getRawLength(p)) {\n activePattern = p;\n break;\n }\n }\n\n let masked = \"\";\n let valueIndex = 0;\n\n // Variáveis do guide\n const showGuide = options?.guide || false;\n const placeholder = options?.placeholderChar || \"_\";\n\n // O loop agora corre o activePattern por inteiro se o guide for true\n for (let i = 0; i < activePattern.length; i++) {\n const patternChar = activePattern[i];\n const token = tokens[patternChar];\n\n if (valueIndex < stringVal.length) {\n // 1. Ainda temos texto do utilizador para processar\n let dataChar = stringVal[valueIndex];\n\n if (token) {\n if (patternChar === \"U\") dataChar = dataChar.toUpperCase();\n if (patternChar === \"L\") dataChar = dataChar.toLowerCase();\n\n if (token.test(dataChar)) {\n masked += dataChar;\n valueIndex++;\n } else {\n // Se o utilizador digitou um char inválido, ignora-o.\n // Se o guide estiver ativo, desenha o placeholder.\n if (showGuide) masked += placeholder;\n else break;\n }\n } else {\n masked += patternChar;\n if (dataChar === patternChar) valueIndex++;\n }\n } else {\n // 2. Acabou o texto do utilizador!\n if (showGuide) {\n // Se for um token (ex: #), põe o placeholder (_). Se for literal (ex: -), põe o literal.\n masked += token ? placeholder : patternChar;\n } else {\n // Se não for para mostrar o guide, terminamos a máscara aqui.\n break;\n }\n }\n }\n\n // Evita mostrar o guide solto se o campo estiver 100% vazio e o dev não quiser\n // (Mas por padrão, se guide é true, até o campo vazio exibe a máscara inteira)\n return masked;\n },\n parse: (value: string) => {\n if (options?.customParse) return options.customParse(value);\n\n const mask = createPatternMask(pattern, options);\n const formatted = mask.format(value);\n\n if (options?.saveRaw) {\n if (options?.guide) {\n const placeholder = options.placeholderChar || \"_\";\n const escapedPlaceholder = placeholder.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n \"\\\\$&\",\n );\n const placeholderRegex = new RegExp(escapedPlaceholder, \"g\");\n\n return formatted.replace(placeholderRegex, \"\");\n }\n\n return formatted;\n }\n\n return unmask(formatted, options?.allowChars);\n },\n };\n};\n\nexport const createCurrencyMask = ({\n prefix = \"\",\n suffix = \"\",\n thousand,\n decimal,\n precision = 2,\n allowNegative = true,\n saveRaw = false,\n}: CurrencyMaskConfig): BitMask => {\n const formatFn = (value: any) => {\n if (value === undefined || value === null || value === \"\") return \"\";\n\n let stringValue = \"\";\n\n if (typeof value === \"number\") {\n stringValue = Math.abs(value).toFixed(precision).replace(/\\D/g, \"\");\n } else {\n stringValue = String(value).replace(/\\D/g, \"\");\n }\n\n if (!stringValue && String(value).includes(\"-\") && allowNegative)\n return \"-\";\n if (!stringValue) return \"\";\n\n stringValue = stringValue.padStart(precision + 1, \"0\");\n\n const integerPart =\n stringValue.slice(0, -precision).replace(/^0+(?=\\d)/, \"\") || \"0\";\n const decimalPart = stringValue.slice(-precision);\n\n const formattedInteger = integerPart.replace(\n /\\B(?=(\\d{3})+(?!\\d))/g,\n thousand,\n );\n\n const isNegative =\n typeof value === \"number\" ? value < 0 : String(value).includes(\"-\");\n const sign = isNegative && allowNegative ? \"-\" : \"\";\n\n return `${sign}${prefix}${formattedInteger}${decimal}${decimalPart}${suffix}`;\n };\n\n return {\n format: formatFn,\n parse: (value: string) => {\n const numericValue = unmaskCurrency(value, precision);\n const finalNumber = !allowNegative\n ? Math.abs(numericValue)\n : numericValue;\n if (saveRaw) return formatFn(finalNumber);\n return finalNumber;\n },\n };\n};\n\nexport const createCreditCardMask = (options?: PatternMaskOptions): BitMask => {\n // Função auxiliar para descobrir o padrão dinamicamente\n const getCardPattern = (rawValue: string) => {\n // Amex (American Express) começa com 34 ou 37 -> 15 dígitos\n if (/^3[47]/.test(rawValue)) {\n return \"#### ###### #####\";\n }\n // Diners Club começa com 300-305, 36 ou 38 -> 14 dígitos\n if (/^3(?:0[0-5]|[68])/.test(rawValue)) {\n return \"#### ###### ####\";\n }\n // Default: Visa, Mastercard, Discover, Elo, etc -> 16 dígitos\n return \"#### #### #### ####\";\n };\n\n return {\n format: (value: any) => {\n const stringVal = unmask(value, options?.allowChars);\n const pattern = getCardPattern(stringVal);\n const mask = createPatternMask(pattern, options);\n return mask.format(value);\n },\n parse: (value: string) => {\n const stringVal = unmask(value, options?.allowChars);\n const pattern = getCardPattern(stringVal);\n\n const mask = createPatternMask(pattern, options);\n return mask.parse(value);\n },\n };\n};\n\nexport const createDateMask = (config?: DateMaskConfig): BitMask => {\n const formatType = config?.format || \"DD/MM/YYYY\";\n const isISO = formatType === \"YYYY-MM-DD\";\n\n // Criamos a máscara base consoante o formato escolhido\n const baseMask = createPatternMask(\n isISO ? \"####-##-##\" : \"##/##/####\",\n config,\n );\n\n return {\n format: (value: any) => {\n let stringVal = unmask(value);\n if (!stringVal) return \"\";\n\n let day = \"\";\n let month = \"\";\n let year = \"\";\n\n // Separamos os componentes consoante o que o utilizador já digitou\n if (isISO) {\n year = stringVal.substring(0, 4);\n month = stringVal.substring(4, 6);\n day = stringVal.substring(6, 8);\n } else {\n day = stringVal.substring(0, 2);\n month = stringVal.substring(2, 4);\n year = stringVal.substring(4, 8);\n }\n\n // Validação do Dia (01 a 31)\n if (day.length === 2) {\n const d = parseInt(day, 10);\n if (d > 31) day = \"31\";\n if (d === 0) day = \"01\";\n }\n\n // Validação do Mês (01 a 12)\n if (month.length === 2) {\n const m = parseInt(month, 10);\n if (m > 12) month = \"12\";\n if (m === 0) month = \"01\";\n }\n\n // Reconstruímos a string limpa e passamos para o pattern normal\n const safeString = isISO\n ? `${year}${month}${day}`\n : `${day}${month}${year}`;\n\n return baseMask.format(safeString);\n },\n parse: (value: string) => {\n // Usamos a funcionalidade completa da máscara base (incluindo o saveRaw e o unmasking)\n return baseMask.parse(value);\n },\n };\n};\n","import {\n createCreditCardMask,\n createCurrencyMask,\n createDateMask,\n createPatternMask,\n} from \"./creators\";\n\n// ==========================================\n// 💲 MOEDAS (Currencies)\n// ==========================================\n\n/** BRL - Real Brasileiro (R$ 1.000,00) */\nexport const maskBRL = createCurrencyMask({\n prefix: \"R$ \",\n thousand: \".\",\n decimal: \",\",\n precision: 2,\n});\n\n/** USD - Dólar Americano ($1,000.00) */\nexport const maskUSD = createCurrencyMask({\n prefix: \"$\",\n thousand: \",\",\n decimal: \".\",\n precision: 2,\n});\n\n/** EUR - Euro Padrão (€ 1.000,00) - Sufixo comum na Europa */\nexport const maskEUR = createCurrencyMask({\n suffix: \" €\",\n thousand: \".\",\n decimal: \",\",\n precision: 2,\n});\n\n/** GBP - Libra Esterlina (£1,000.00) */\nexport const maskGBP = createCurrencyMask({\n prefix: \"£\",\n thousand: \",\",\n decimal: \".\",\n precision: 2,\n});\n\n/** JPY - Iene Japonês (¥1,000) - Geralmente sem decimais */\nexport const maskJPY = createCurrencyMask({\n prefix: \"¥\",\n thousand: \",\",\n decimal: \".\",\n precision: 0,\n});\n\n// ==========================================\n// 🔢 NÚMEROS E PERCENTUAIS\n// ==========================================\n\n/** Porcentagem PT-BR (10,5%) */\nexport const maskPercent = createCurrencyMask({\n suffix: \"%\",\n thousand: \".\",\n decimal: \",\",\n precision: 1, // Ex: 99,9%\n});\n\n/** Decimal Genérico PT-BR (1.000,00) - Sem símbolo */\nexport const maskDecimal = createCurrencyMask({\n thousand: \".\",\n decimal: \",\",\n precision: 2,\n});\n\n/** Inteiro (1.000) - Apenas separador de milhar */\nexport const maskInteger = createCurrencyMask({\n thousand: \".\",\n decimal: \",\",\n precision: 0,\n});\n\n// ==========================================\n// 🇧🇷 PADRÕES BRASILEIROS (Brazil)\n// ==========================================\n\n/** CPF (000.000.000-00) */\nexport const maskCPF = createPatternMask(\"###.###.###-##\");\n\n/** CNPJ (00.000.000/0000-00) */\nexport const maskCNPJ = createPatternMask(\"##.###.###/####-##\");\n\nexport const maskPhone = createPatternMask([\n \"(##) ####-####\", // Fixo (10 dígitos)\n \"(##) #####-####\", // Celular (11 dígitos)\n]);\n\n/** Telefone Fixo BR (11) 0000-0000 */\nexport const maskLandline = createPatternMask(\"(##) ####-####\");\n\n/** CEP (00000-000) */\nexport const maskCEP = createPatternMask(\"#####-###\");\n\n/** Data PT/BR com correção automática de dia/mês */\nexport const maskDate = createDateMask({\n format: \"DD/MM/YYYY\",\n guide: true,\n customParse: (val) => {\n const cleanVal = val.replace(/_/g, \"\");\n const parts = cleanVal.split(\"/\");\n if (parts.length === 3 && parts[2].length === 4) {\n return `${parts[2]}-${parts[1]}-${parts[0]}`;\n }\n return cleanVal.replace(/\\D/g, \"\");\n },\n});\n\n/** Hora Curta (HH:MM) */\nexport const maskTime = createPatternMask(\"##:##\");\n\n/** CNH (Carteira de Motorista - 11 dígitos) */\nexport const maskCNH = createPatternMask(\"###########\");\n\n/** RG (00.000.000-X) - Suporta o 'X' como dígito verificador */\nexport const maskRG = createPatternMask(\"##.###.###-X\");\n\n// ==========================================\n// 🇺🇸 PADRÕES AMERICANOS (USA)\n// ==========================================\n\n/** US Phone ((000) 000-0000) */\nexport const maskUSPhone = createPatternMask(\"(###) ###-####\");\n\n/** ZIP Code (00000 or 00000-0000) */\nexport const maskZipCode = createPatternMask(\"#####-####\");\n\n/** Date US (MM/DD/YYYY) - Igual ao BR, mas semântica diferente */\nexport const maskDateUS = createPatternMask(\"##/##/####\");\n\n/** SSN (Social Security Number) */\nexport const maskSSN = createPatternMask(\"###-##-####\");\n\n// ==========================================\n// 🌐 PADRÕES GLOBAIS / TÉCNICOS\n// ==========================================\n\n/** Cartão de Crédito Inteligente (Detecta Visa/Master, Amex e Diners) */\nexport const maskCreditCard = createCreditCardMask();\n\n/** CVV (3 ou 4 dígitos) */\nexport const maskCVV = createPatternMask(\"####\");\n\n/** Data ISO (Ideal para base de dados: YYYY-MM-DD) */\nexport const maskDateISO = createDateMask({\n format: \"YYYY-MM-DD\",\n saveRaw: true,\n guide: true,\n});\n\n/** Endereço MAC (HH:HH:HH:HH:HH:HH) - Usa o token Hexadecimal */\nexport const maskMacAddress = createPatternMask(\"HH:HH:HH:HH:HH:HH\");\n\n/** Cor Hexadecimal (#HHHHHH) */\nexport const maskColorHex = createPatternMask(\"#HHHHHH\");\n\n/** IPv4 (000.000.000.000) - Formato de blocos fixos */\nexport const maskIPv4 = createPatternMask(\"###.###.###.###\");\n\n/** IPv6 (HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH) */\nexport const maskIPv6 = createPatternMask(\n \"HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH\",\n);\n\n/** * IBAN Internacional\n * Força as duas primeiras letras para maiúsculas e agrupa de 4 em 4.\n * O tamanho máximo cobre os 34 caracteres do padrão IBAN.\n */\nexport const maskIBAN = createPatternMask(\n \"UU## XXXX XXXX XXXX XXXX XXXX XXXX XXXX XX\",\n { allowChars: \" \" },\n);\n","export * from \"./types\";\nexport * from \"./creators\";\nexport * from \"./presets\";\n\nimport * as presets from \"./presets\";\n\nexport const bitMasks = {\n // Moedas\n brl: presets.maskBRL,\n usd: presets.maskUSD,\n eur: presets.maskEUR,\n gbp: presets.maskGBP,\n jpy: presets.maskJPY,\n // Documentos BR\n cpf: presets.maskCPF,\n cnpj: presets.maskCNPJ,\n rg: presets.maskRG,\n cep: presets.maskCEP,\n cnh: presets.maskCNH,\n // Comunicação/Data\n phone: presets.maskPhone,\n landline: presets.maskLandline,\n date: presets.maskDate,\n time: presets.maskTime,\n // Tech/Global\n ip: presets.maskIPv4,\n ipv6: presets.maskIPv6,\n mac: presets.maskMacAddress,\n color: presets.maskColorHex,\n cc: presets.maskCreditCard,\n cvv: presets.maskCVV,\n // Utilitários\n percent: presets.maskPercent,\n decimal: presets.maskDecimal,\n int: presets.maskInteger,\n};\n","import type { BitConfig, BitPersistResolvedConfig } from \"./types\";\nimport type { BitResolvedConfig } from \"./internal-types\";\nimport { deepClone } from \"../utils\";\nimport { bitMasks } from \"../mask\";\n\nexport function normalizeConfig<T extends object>(\n config: BitConfig<T> = {},\n): BitResolvedConfig<T> {\n const rawInitial = (config.initialValues ?? {}) as T;\n const validation = config.validation;\n const history = config.history;\n\n const defaultPersistKey = config.name\n ? `bit-form:${config.name}:draft`\n : \"bit-form:draft\";\n\n const persist: BitPersistResolvedConfig<T> = {\n enabled: config.persist?.enabled ?? false,\n key: config.persist?.key ?? defaultPersistKey,\n storage: config.persist?.storage,\n autoSave: config.persist?.autoSave ?? true,\n debounceMs: config.persist?.debounceMs ?? 300,\n mode: config.persist?.mode ?? \"values\",\n serialize: config.persist?.serialize ?? JSON.stringify,\n deserialize:\n config.persist?.deserialize ??\n ((raw: string) => JSON.parse(raw) as Partial<T>),\n onError: config.persist?.onError,\n };\n\n return {\n name: config.name,\n initialValues: deepClone(rawInitial),\n resolver: validation?.resolver,\n validationDelay: validation?.delay ?? 300,\n enableHistory: history?.enabled ?? false,\n historyLimit: history?.limit ?? 15,\n masks: { ...bitMasks },\n fields: config.fields,\n devTools: config.devTools,\n persist,\n plugins: config.plugins ?? [],\n } as BitResolvedConfig<T>;\n}\n","import { BitFieldDefinition } from \"./types\";\nimport { getDeepValue } from \"../utils\";\n\nexport class BitDependencyManager<T extends object = any> {\n public fieldConfigs: Map<string, BitFieldDefinition<T>> = new Map();\n public dependencies: Map<string, Set<string>> = new Map();\n public hiddenFields: Set<string> = new Set();\n\n register(path: string, config: BitFieldDefinition<T>, currentValues: T) {\n this.fieldConfigs.set(path, config);\n\n const dependsOn = config.conditional?.dependsOn;\n if (dependsOn) {\n dependsOn.forEach((dep) => {\n if (!this.dependencies.has(dep)) {\n this.dependencies.set(dep, new Set());\n }\n this.dependencies.get(dep)!.add(path);\n });\n }\n\n this.evaluateFieldCondition(path, currentValues);\n }\n\n isHidden(path: string): boolean {\n return this.hiddenFields.has(path);\n }\n\n isRequired(path: string, values: T): boolean {\n const config = this.fieldConfigs.get(path);\n if (!config || this.isHidden(path)) return false;\n return !!config.conditional?.requiredIf?.(values);\n }\n\n getRequiredErrors(values: T): Record<string, string> {\n const errors: Record<string, string> = {};\n\n this.fieldConfigs.forEach((config, path) => {\n if (this.isRequired(path, values)) {\n const val = getDeepValue(values, path);\n if (this.isEmpty(val)) {\n errors[path] =\n config.conditional?.requiredMessage ?? \"required field\";\n }\n }\n });\n\n return errors;\n }\n\n evaluateAll(values: T) {\n this.fieldConfigs.forEach((_, path) => {\n this.evaluateFieldCondition(path, values);\n });\n }\n\n updateDependencies(changedPath: string, newValues: T): string[] {\n const toggledFields: string[] = [];\n\n const queue = [changedPath];\n const visited = new Set<string>();\n\n while (queue.length > 0) {\n const currentPath = queue.shift()!;\n\n if (visited.has(currentPath)) {\n continue;\n }\n\n visited.add(currentPath);\n\n const dependents = this.dependencies.get(currentPath);\n if (!dependents) {\n continue;\n }\n\n dependents.forEach((depPath) => {\n const wasHidden = this.isHidden(depPath);\n this.evaluateFieldCondition(depPath, newValues);\n const isHiddenNow = this.isHidden(depPath);\n\n if (wasHidden !== isHiddenNow) {\n toggledFields.push(depPath);\n }\n\n queue.push(depPath);\n });\n }\n\n return toggledFields;\n }\n\n unregister(path: string) {\n this.fieldConfigs.delete(path);\n this.hiddenFields.delete(path);\n this.dependencies.delete(path);\n\n this.dependencies.forEach((dependentsSet) => {\n dependentsSet.delete(path);\n });\n }\n\n unregisterPrefix(prefix: string) {\n const pathsToRemove: string[] = [];\n\n this.fieldConfigs.forEach((_, path) => {\n if (path.startsWith(prefix)) {\n pathsToRemove.push(path);\n }\n });\n\n pathsToRemove.forEach((path) => this.unregister(path));\n }\n\n private evaluateFieldCondition(path: string, values: T) {\n const config = this.fieldConfigs.get(path);\n const showIf = config?.conditional?.showIf;\n if (!showIf) return;\n\n if (showIf(values)) {\n this.hiddenFields.delete(path);\n } else {\n this.hiddenFields.add(path);\n }\n }\n\n private isEmpty(value: any): boolean {\n return (\n value === undefined ||\n value === null ||\n (typeof value === \"string\" && value.trim() === \"\") ||\n (Array.isArray(value) && value.length === 0)\n );\n }\n}\n","import { deepClone, deepEqual } from \"../utils\";\n\nexport class BitHistoryManager<T extends object = any> {\n private history: T[] = [];\n private historyIndex: number = -1;\n\n constructor(\n private enableHistory: boolean,\n private maxHistory: number = 15,\n ) {}\n\n saveSnapshot(values: T) {\n if (!this.enableHistory) return;\n\n const currentSnapshot = this.history[this.historyIndex];\n\n if (currentSnapshot && deepEqual(currentSnapshot, values)) {\n return;\n }\n\n if (this.historyIndex < this.history.length - 1) {\n this.history = this.history.slice(0, this.historyIndex + 1);\n }\n\n this.history.push(deepClone(values));\n\n if (this.history.length > this.maxHistory) {\n this.history.shift();\n } else {\n this.historyIndex++;\n }\n }\n\n get canUndo(): boolean {\n return this.enableHistory ? this.historyIndex > 0 : false;\n }\n\n get canRedo(): boolean {\n return this.enableHistory\n ? this.historyIndex < this.history.length - 1\n : false;\n }\n\n undo(): T | null {\n if (this.canUndo) {\n this.historyIndex--;\n return deepClone(this.history[this.historyIndex]);\n }\n return null;\n }\n\n redo(): T | null {\n if (this.canRedo) {\n this.historyIndex++;\n return deepClone(this.history[this.historyIndex]);\n }\n return null;\n }\n\n reset(initialValues: T) {\n this.history = [];\n this.historyIndex = -1;\n this.saveSnapshot(initialValues);\n }\n\n getMetadata(): {\n enabled: boolean;\n canUndo: boolean;\n canRedo: boolean;\n historyIndex: number;\n historySize: number;\n } {\n return {\n enabled: this.enableHistory,\n canUndo: this.canUndo,\n canRedo: this.canRedo,\n historyIndex: this.historyIndex,\n historySize: this.history.length,\n };\n }\n}\n","import { BitStoreAdapter } from \"./internal-types\";\nimport {\n getDeepValue,\n setDeepValue,\n shiftKeys,\n swapKeys,\n moveKeys,\n} from \"../utils\";\n\nexport class BitArrayManager<T extends object = any> {\n constructor(private store: BitStoreAdapter<T>) {}\n\n pushItem(path: string, value: any) {\n const arr = getDeepValue(this.store.getState().values, path) || [];\n this.store.setFieldWithMeta(path, [...arr, value], {\n origin: \"array\",\n operation: \"push\",\n });\n this.store.internalSaveSnapshot();\n }\n\n prependItem(path: string, value: any) {\n const arr = getDeepValue(this.store.getState().values, path) || [];\n this.store.setFieldWithMeta(path, [value, ...arr], {\n origin: \"array\",\n operation: \"prepend\",\n });\n this.store.internalSaveSnapshot();\n }\n\n insertItem(path: string, index: number, value: any) {\n const arr = [...(getDeepValue(this.store.getState().values, path) || [])];\n arr.splice(index, 0, value);\n this.store.setFieldWithMeta(path, arr, {\n origin: \"array\",\n operation: \"insert\",\n index,\n });\n this.store.internalSaveSnapshot();\n }\n\n removeItem(path: string, index: number) {\n const state = this.store.getState();\n const arr = getDeepValue(state.values, path);\n if (!Array.isArray(arr)) return;\n\n const previousArray = [...arr];\n\n if (this.store.unregisterPrefix) {\n this.store.unregisterPrefix(`${path}.${index}.`);\n }\n\n const newArray = arr.filter((_, i) => i !== index);\n const newValues = setDeepValue(state.values, path, newArray);\n\n const isDirty = this.store.updateDirtyForPath(\n path,\n newValues,\n this.store.getConfig().initialValues,\n );\n\n this.store.internalUpdateState({\n values: newValues,\n errors: shiftKeys(state.errors, path, index),\n touched: shiftKeys(state.touched, path, index),\n isDirty,\n });\n\n this.store.emitFieldChange({\n path,\n previousValue: previousArray,\n nextValue: newArray,\n values: this.store.getState().values,\n state: this.store.getState(),\n meta: { origin: \"array\", operation: \"remove\", index },\n });\n\n this.store.internalSaveSnapshot();\n this.revalidate(path);\n }\n\n swapItems(path: string, indexA: number, indexB: number) {\n const state = this.store.getState();\n const arr = [...(getDeepValue(state.values, path) || [])];\n const previousArray = [...arr];\n [arr[indexA], arr[indexB]] = [arr[indexB], arr[indexA]];\n\n const newValues = setDeepValue(state.values, path, arr);\n\n const isDirty = this.store.updateDirtyForPath(\n path,\n newValues,\n this.store.getConfig().initialValues,\n );\n\n this.store.internalUpdateState({\n values: newValues,\n errors: swapKeys(state.errors, path, indexA, indexB),\n touched: swapKeys(state.touched, path, indexA, indexB),\n isDirty,\n });\n\n this.store.emitFieldChange({\n path,\n previousValue: previousArray,\n nextValue: arr,\n values: this.store.getState().values,\n state: this.store.getState(),\n meta: {\n origin: \"array\",\n operation: \"swap\",\n from: indexA,\n to: indexB,\n },\n });\n\n this.store.internalSaveSnapshot();\n this.revalidate(path);\n }\n\n moveItem(path: string, from: number, to: number) {\n const state = this.store.getState();\n const arr = [...(getDeepValue(state.values, path) || [])];\n const previousArray = [...arr];\n const [item] = arr.splice(from, 1);\n arr.splice(to, 0, item);\n\n const newValues = setDeepValue(state.values, path, arr);\n\n const isDirty = this.store.updateDirtyForPath(\n path,\n newValues,\n this.store.getConfig().initialValues,\n );\n\n this.store.internalUpdateState({\n values: newValues,\n errors: moveKeys(state.errors, path, from, to),\n touched: moveKeys(state.touched, path, from, to),\n isDirty,\n });\n\n this.store.emitFieldChange({\n path,\n previousValue: previousArray,\n nextValue: arr,\n values: this.store.getState().values,\n state: this.store.getState(),\n meta: {\n origin: \"array\",\n operation: \"move\",\n from,\n to,\n },\n });\n\n this.store.internalSaveSnapshot();\n this.revalidate(path);\n }\n\n private revalidate(path: string) {\n this.store.triggerValidation([path]);\n }\n}\n","import { getDeepValue, setDeepValue, deepEqual } from \"../utils\";\nimport type { BitComputedFn } from \"./types\";\n\nexport class BitComputedManager<T extends object> {\n private static readonly MIN_PASSES = 4;\n\n constructor(private getComputedEntries: () => [string, BitComputedFn<T>][]) {}\n\n apply(values: T): T {\n const computedEntries = this.getComputedEntries();\n if (computedEntries.length === 0) return values;\n\n let nextValues = values;\n const maxPasses = Math.max(\n BitComputedManager.MIN_PASSES,\n computedEntries.length * 2,\n );\n\n for (let i = 0; i < maxPasses; i++) {\n let changedInThisPass = false;\n\n for (const [path, computeFn] of computedEntries) {\n const newValue = computeFn(nextValues);\n const currentValue = getDeepValue(nextValues, path);\n\n if (!deepEqual(currentValue, newValue)) {\n nextValues = setDeepValue(nextValues, path, newValue);\n changedInThisPass = true;\n }\n }\n\n if (!changedInThisPass) break;\n\n if (i === maxPasses - 1) {\n throw new Error(\n \"BitStore: computed fields did not stabilize. Check for cyclic computed definitions.\",\n );\n }\n }\n\n return nextValues;\n }\n}\n","import { BitErrors } from \"./types\";\nimport { BitValidationAdapter } from \"./internal-types\";\nimport { BitValidationOptions } from \"./public-types\";\n\nexport class BitValidationManager<T extends object> {\n private validationTimeout?: ReturnType<typeof setTimeout>;\n private currentValidationId: number = 0;\n private asyncTimers: Record<string, ReturnType<typeof setTimeout>> = {};\n private asyncRequests: Record<string, number> = {};\n public asyncErrors: Record<string, string> = {};\n\n constructor(private store: BitValidationAdapter<T>) {}\n\n private updateFieldValidating(path: string, isValidating: boolean) {\n this.store.internalUpdateState({\n isValidating: {\n ...this.store.getState().isValidating,\n [path]: isValidating,\n },\n });\n }\n\n private cancelFieldAsync(path: string) {\n if (this.asyncTimers[path]) {\n clearTimeout(this.asyncTimers[path]);\n delete this.asyncTimers[path];\n }\n\n this.asyncRequests[path] = (this.asyncRequests[path] || 0) + 1;\n }\n\n beginExternalValidation(path: string) {\n this.cancelFieldAsync(path);\n this.updateFieldValidating(path, true);\n }\n\n endExternalValidation(path: string) {\n this.updateFieldValidating(path, false);\n }\n\n async setExternalError(path: string, message: string | undefined) {\n if (message) {\n this.asyncErrors[path] = message;\n this.store.setError(path, message);\n return;\n }\n\n delete this.asyncErrors[path];\n\n if (this.store.validate) {\n await this.store.validate({ scopeFields: [path] });\n return;\n }\n\n const newErrors = { ...this.store.getState().errors };\n delete newErrors[path as keyof BitErrors<T>];\n this.store.internalUpdateState({\n errors: newErrors,\n isValid: Object.keys(newErrors).length === 0,\n });\n }\n\n handleAsync(path: string, value: any) {\n const config = this.store.getFieldConfig(path);\n const asyncValidate = config?.validation?.asyncValidate;\n if (!asyncValidate) {\n this.updateFieldValidating(path, false);\n return;\n }\n\n if (this.asyncTimers[path]) clearTimeout(this.asyncTimers[path]);\n\n const delay = config.validation?.asyncValidateDelay ?? 500;\n\n this.updateFieldValidating(path, true);\n\n this.asyncTimers[path] = setTimeout(async () => {\n delete this.asyncTimers[path];\n\n const currentRequestId = (this.asyncRequests[path] || 0) + 1;\n this.asyncRequests[path] = currentRequestId;\n\n try {\n const errorMessage = await asyncValidate(\n value,\n this.store.getState().values,\n );\n\n if (this.asyncRequests[path] !== currentRequestId) return;\n\n if (errorMessage) {\n this.asyncErrors[path] = errorMessage;\n this.store.setError(path, errorMessage);\n } else {\n delete this.asyncErrors[path];\n if (this.store.validate) {\n await this.store.validate({ scopeFields: [path] });\n } else {\n const newErrors = { ...this.store.getState().errors };\n delete newErrors[path as keyof BitErrors<T>];\n this.store.internalUpdateState({\n errors: newErrors,\n isValid: Object.keys(newErrors).length === 0,\n });\n }\n }\n } finally {\n if (this.asyncRequests[path] === currentRequestId) {\n this.updateFieldValidating(path, false);\n }\n }\n }, delay);\n }\n\n hasValidationsInProgress(scopeFields?: string[]) {\n const state = this.store.getState();\n\n if (scopeFields && scopeFields.length > 0) {\n return scopeFields.some((field) => !!state.isValidating[field]);\n }\n\n return Object.values(state.isValidating).some(Boolean);\n }\n\n trigger(scopeFields?: string[]) {\n if (this.validationTimeout) clearTimeout(this.validationTimeout);\n\n const delay = this.store.config.validationDelay ?? 300;\n\n if (delay > 0) {\n this.validationTimeout = setTimeout(() => {\n this.validate({ scopeFields });\n }, delay);\n } else {\n this.validate({ scopeFields });\n }\n }\n\n async validate(options?: BitValidationOptions): Promise<boolean> {\n const validationId = ++this.currentValidationId;\n const currentState = this.store.getState();\n\n let targetFields: string[] | undefined = options?.scopeFields;\n\n if (options?.scope) {\n const scopeFields = this.store.getScopeFields(options.scope);\n if (scopeFields.length > 0) {\n targetFields = scopeFields;\n }\n }\n\n await this.store.emitBeforeValidate({\n values: currentState.values,\n state: currentState,\n scope: options?.scope,\n scopeFields: targetFields,\n });\n\n let allErrors: Record<string, any> = this.store.config.resolver\n ? await this.store.config.resolver(currentState.values, {\n scopeFields: targetFields,\n })\n : {};\n\n const dynamicRequiredErrors = this.store.getRequiredErrors(\n currentState.values,\n );\n allErrors = { ...allErrors, ...dynamicRequiredErrors };\n\n this.store.getHiddenFields().forEach((hiddenPath: string) => {\n delete allErrors[hiddenPath];\n delete this.asyncErrors[hiddenPath];\n });\n\n if (validationId !== this.currentValidationId) {\n await this.store.emitAfterValidate({\n values: this.store.getState().values,\n state: this.store.getState(),\n scope: options?.scope,\n scopeFields: targetFields,\n errors: this.store.getState().errors,\n result: currentState.isValid,\n aborted: true,\n });\n\n return currentState.isValid;\n }\n\n if (targetFields) {\n const newErrors = { ...currentState.errors };\n\n targetFields.forEach((field) => {\n if (allErrors[field]) {\n newErrors[field as keyof BitErrors<T>] = allErrors[field];\n } else if (this.asyncErrors[field]) {\n newErrors[field as keyof BitErrors<T>] = this.asyncErrors[field];\n } else {\n delete newErrors[field as keyof BitErrors<T>];\n }\n });\n\n const isValid = Object.keys(newErrors).length === 0;\n this.store.internalUpdateState({ errors: newErrors, isValid });\n\n const result = targetFields.every(\n (f) => !allErrors[f] && !this.asyncErrors[f],\n );\n\n await this.store.emitAfterValidate({\n values: this.store.getState().values,\n state: this.store.getState(),\n scope: options?.scope,\n scopeFields: targetFields,\n errors: newErrors,\n result,\n });\n\n return result;\n }\n\n allErrors = { ...this.asyncErrors, ...allErrors };\n const isValid = Object.keys(allErrors).length === 0;\n\n this.store.internalUpdateState({\n errors: allErrors as BitErrors<T>,\n isValid,\n });\n\n await this.store.emitAfterValidate({\n values: this.store.getState().values,\n state: this.store.getState(),\n scope: options?.scope,\n scopeFields: targetFields,\n errors: allErrors as BitErrors<T>,\n result: isValid,\n });\n\n return isValid;\n }\n\n clear(path: string) {\n if (this.asyncTimers[path]) clearTimeout(this.asyncTimers[path]);\n delete this.asyncTimers[path];\n this.updateFieldValidating(path, false);\n delete this.asyncErrors[path];\n }\n\n cancelAll() {\n if (this.validationTimeout) clearTimeout(this.validationTimeout);\n Object.values(this.asyncTimers).forEach((t) => clearTimeout(t));\n this.asyncTimers = {};\n this.store.internalUpdateState({ isValidating: {} });\n }\n}\n","import { BitErrors, BitFieldChangeMeta, DeepPartial } from \"./types\";\nimport { BitLifecycleAdapter } from \"./internal-types\";\nimport { deepClone, deepMerge, getDeepValue, setDeepValue } from \"../utils\";\n\nexport class BitLifecycleManager<T extends object> {\n constructor(private store: BitLifecycleAdapter<T>) {}\n\n updateField(\n path: string,\n value: any,\n meta: BitFieldChangeMeta = { origin: \"setField\" },\n ) {\n const state = this.store.getState();\n const previousValue = getDeepValue(state.values, path);\n const newValues = setDeepValue(state.values, path, value);\n const newErrors = { ...state.errors };\n\n delete newErrors[path as keyof BitErrors<T>];\n this.store.clearFieldValidation(path);\n\n const toggledFields = this.store.updateDependencies(path, newValues);\n\n toggledFields.forEach((depPath) => {\n if (this.store.isFieldHidden(depPath)) {\n delete newErrors[depPath as keyof BitErrors<T>];\n this.store.clearFieldValidation(depPath);\n }\n });\n\n const isDirty = this.store.updateDirtyForPath(\n path,\n newValues,\n this.store.config.initialValues,\n );\n\n this.store.internalUpdateState({\n values: newValues,\n errors: newErrors,\n isValid: Object.keys(newErrors).length === 0,\n isDirty,\n });\n\n this.store.emitFieldChange({\n path,\n previousValue,\n nextValue: value,\n values: this.store.getState().values,\n state: this.store.getState(),\n meta,\n });\n\n if (this.store.config.resolver) {\n this.store.triggerValidation([path]);\n }\n\n this.store.handleFieldAsyncValidation(path, value);\n }\n\n replaceValues(\n newValues: T,\n origin: \"replaceValues\" | \"hydrate\" = \"replaceValues\",\n ) {\n const previousValues = this.store.getState().values;\n const clonedValues = deepClone(newValues);\n\n this.store.cancelAllValidations();\n this.store.evaluateAllDependencies(clonedValues);\n\n const isDirty = this.store.rebuildDirtyState(\n clonedValues,\n this.store.config.initialValues,\n );\n\n this.store.internalUpdateState({\n values: clonedValues,\n errors: {},\n isValidating: {},\n isValid: true,\n isDirty,\n isSubmitting: false,\n });\n\n this.store.internalSaveSnapshot();\n this.store.validateNow();\n\n this.store.emitFieldChange({\n path: \"*\",\n previousValue: previousValues,\n nextValue: clonedValues,\n values: this.store.getState().values,\n state: this.store.getState(),\n meta: { origin },\n });\n }\n\n hydrateValues(values: DeepPartial<T>) {\n const mergedValues = deepMerge(this.store.getState().values, values);\n this.replaceValues(mergedValues, \"hydrate\");\n }\n\n rebaseValues(newValues: T) {\n const previousValues = this.store.getState().values;\n const clonedValues = deepClone(newValues);\n\n this.store.config.initialValues = deepClone(clonedValues);\n\n this.store.cancelAllValidations();\n this.store.evaluateAllDependencies(clonedValues);\n\n this.store.clearDirtyState();\n\n this.store.internalUpdateState({\n values: clonedValues,\n errors: {},\n touched: {},\n isValidating: {},\n isValid: true,\n isDirty: false,\n isSubmitting: false,\n });\n\n this.store.internalSaveSnapshot();\n this.store.validateNow();\n\n this.store.emitFieldChange({\n path: \"*\",\n previousValue: previousValues,\n nextValue: clonedValues,\n values: this.store.getState().values,\n state: this.store.getState(),\n meta: { origin: \"rebase\" },\n });\n }\n\n async submit(\n onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>,\n ) {\n const currentState = this.store.getState();\n\n if (currentState.isSubmitting) return;\n\n if (this.store.hasValidationsInProgress()) return;\n\n this.store.cancelAllValidations();\n\n this.store.internalUpdateState({ isSubmitting: true });\n\n const isValid = await this.store.validateNow();\n\n if (isValid) {\n try {\n let valuesToSubmit = deepClone(this.store.getState().values);\n\n this.store.getHiddenFields().forEach((hiddenPath) => {\n valuesToSubmit = setDeepValue(valuesToSubmit, hiddenPath, undefined);\n });\n\n for (const [path, transformer] of this.store.getTransformEntries()) {\n const currentVal = getDeepValue(valuesToSubmit, path);\n valuesToSubmit = setDeepValue(\n valuesToSubmit,\n path,\n transformer(currentVal, this.store.getState().values),\n );\n }\n\n const dirtyValues = this.store.buildDirtyValues(valuesToSubmit);\n\n await this.store.emitBeforeSubmit({\n values: valuesToSubmit,\n dirtyValues,\n state: this.store.getState(),\n });\n\n await onSuccess(valuesToSubmit, dirtyValues);\n\n await this.store.emitAfterSubmit({\n values: valuesToSubmit,\n dirtyValues,\n state: this.store.getState(),\n success: true,\n });\n } catch (error) {\n await this.store.emitOperationalError({\n source: \"submit\",\n error,\n });\n\n await this.store.emitAfterSubmit({\n values: this.store.getState().values,\n dirtyValues: this.store.buildDirtyValues(\n this.store.getState().values,\n ),\n state: this.store.getState(),\n success: false,\n error,\n });\n\n console.error(error);\n }\n } else {\n const currentErrors = this.store.getState().errors;\n const newTouched = { ...this.store.getState().touched };\n\n Object.keys(currentErrors).forEach((path) => {\n newTouched[path as keyof typeof newTouched] = true;\n });\n\n this.store.internalUpdateState({ touched: newTouched });\n\n await this.store.emitAfterSubmit({\n values: this.store.getState().values,\n dirtyValues: this.store.buildDirtyValues(this.store.getState().values),\n state: this.store.getState(),\n success: false,\n invalid: true,\n });\n }\n\n this.store.internalUpdateState({ isSubmitting: false });\n }\n\n reset() {\n this.store.cancelAllValidations();\n\n const initialCloned = deepClone(this.store.config.initialValues);\n\n this.store.evaluateAllDependencies(initialCloned);\n\n this.store.clearDirtyState();\n\n this.store.internalUpdateState({\n values: initialCloned,\n errors: {},\n touched: {},\n isValidating: {},\n isValid: true,\n isDirty: false,\n isSubmitting: false,\n });\n\n this.store.resetHistory(initialCloned);\n }\n}\n","export function getDevToolsCSS(): string {\n return `\n .bit-devtools-container {\n position: fixed;\n bottom: 20px;\n right: 20px;\n z-index: 9999;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n\n .bit-devtools-trigger {\n background: #10b981;\n color: #fff;\n border: none;\n border-radius: 50%;\n width: 48px;\n height: 48px;\n cursor: pointer;\n box-shadow: 0 4px 12px rgba(16, 185, 129, 0.4);\n font-weight: bold;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.2s;\n font-size: 16px;\n margin-top: 16px;\n }\n .bit-devtools-trigger:hover { transform: scale(1.05); }\n\n .bit-devtools-panel {\n width: 450px;\n max-height: 80vh;\n background: #0f172a;\n color: #f8fafc;\n border-radius: 8px;\n padding: 16px;\n overflow-y: auto;\n box-shadow: 0 20px 25px -5px rgba(0,0,0,0.5), 0 8px 10px -6px rgba(0,0,0,0.5);\n border: 1px solid #334155;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .bit-devtools-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 12px;\n border-bottom: 1px solid #1e293b;\n }\n .bit-devtools-header h2 { margin: 0; font-size: 16px; display: flex; align-items: center; gap: 8px; }\n\n .bit-store-block {\n background: #1e293b;\n border-radius: 6px;\n padding: 12px;\n border: 1px solid #334155;\n }\n\n .bit-store-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n }\n .bit-store-title { margin: 0; color: #38bdf8; font-size: 14px; font-weight: bold; }\n\n .bit-badge-group { display: flex; gap: 6px; flex-wrap: wrap; }\n .bit-badge { font-size: 10px; padding: 2px 6px; border-radius: 4px; text-transform: uppercase; font-weight: bold; }\n .badge-success { background: rgba(16, 185, 129, 0.2); color: #34d399; border: 1px solid rgba(16, 185, 129, 0.2); }\n .badge-error { background: rgba(239, 68, 68, 0.2); color: #f87171; border: 1px solid rgba(239, 68, 68, 0.2); }\n .badge-warn { background: rgba(245, 158, 11, 0.2); color: #fbbf24; border: 1px solid rgba(245, 158, 11, 0.2); }\n .badge-info { background: rgba(56, 189, 248, 0.2); color: #7dd3fc; border: 1px solid rgba(56, 189, 248, 0.2); }\n\n .bit-section-title { font-size: 11px; color: #94a3b8; text-transform: uppercase; letter-spacing: 1px; margin: 12px 0 4px 0; display: block; }\n\n .bit-controls { display: flex; gap: 6px; margin-bottom: 12px; background: #0f172a; padding: 8px; border-radius: 6px; }\n .bit-action-btn { flex: 1; background: #334155; color: #e2e8f0; border: 1px solid #475569; padding: 6px 0; border-radius: 4px; cursor: pointer; font-size: 11px; display: flex; align-items: center; justify-content: center; gap: 4px; transition: all 0.2s; }\n .bit-action-btn:hover:not(:disabled) { background: #475569; }\n .bit-action-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n .bit-btn-reset { color: #fca5a5; border-color: rgba(239,68,68,0.3); }\n .bit-btn-reset:hover { background: rgba(239,68,68,0.1) !important; }\n\n pre.bit-pre { background: #020617; padding: 10px; border-radius: 4px; font-size: 11px; overflow-x: auto; border: 1px solid #1e293b; margin: 0; color: #e2e8f0; }\n pre.bit-error-box { background: rgba(239, 68, 68, 0.05); padding: 10px; border-radius: 4px; font-size: 11px; border: 1px dashed #ef4444; color: #fca5a5; margin: 0; overflow-x: auto; }\n `;\n}\n","import { getDevToolsCSS } from \"./styles\";\nimport type { DevToolsActions } from \"../types\";\n\nexport type { DevToolsActions };\n\nexport class BitFormDevToolsUI {\n private container: HTMLElement;\n private actions: DevToolsActions;\n private rootElement: HTMLDivElement;\n private currentStoresState: Record<string, any> = {};\n private isOpen: boolean = false;\n\n constructor(container: HTMLElement, actions: DevToolsActions) {\n this.container = container;\n this.actions = actions;\n\n if (!document.getElementById(\"bit-devtools-styles\")) {\n const style = document.createElement(\"style\");\n style.id = \"bit-devtools-styles\";\n style.textContent = getDevToolsCSS();\n document.head.appendChild(style);\n }\n\n this.rootElement = document.createElement(\"div\");\n this.rootElement.className = \"bit-devtools-container\";\n this.container.appendChild(this.rootElement);\n\n this.rootElement.addEventListener(\"click\", (e) => {\n const target = e.target as HTMLElement;\n\n // Evento do botão flutuante\n if (target.closest(\".bit-devtools-trigger\")) {\n this.isOpen = !this.isOpen;\n this.render();\n return;\n }\n\n // Eventos dos botões de ação\n const btn = target.closest(\".bit-action-btn\");\n if (btn && !btn.hasAttribute(\"disabled\")) {\n const action = btn.getAttribute(\"data-action\");\n const storeId = btn.getAttribute(\"data-store\");\n\n if (action && storeId) {\n if (action === \"undo\") this.actions.onUndo(storeId);\n if (action === \"redo\") this.actions.onRedo(storeId);\n if (action === \"reset\") this.actions.onReset(storeId);\n }\n }\n });\n }\n\n public updateState(storesState: Record<string, any>) {\n this.currentStoresState = storesState;\n this.render();\n }\n\n private render() {\n const storeEntries = Object.entries(this.currentStoresState);\n if (storeEntries.length === 0) {\n this.rootElement.innerHTML = \"\";\n return;\n }\n\n let panelHtml = \"\";\n\n if (this.isOpen) {\n panelHtml = `\n <div class=\"bit-devtools-panel\">\n <div class=\"bit-devtools-header\">\n <h2><span style=\"font-size: 20px;\">🛠</span> Bit-Form DevTools</h2>\n <span style=\"font-size: 11px; color: #64748b;\">v1.0.0</span>\n </div>\n `;\n\n for (const [id, state] of storeEntries) {\n const hasErrors = Object.keys(state.errors || {}).length > 0;\n\n // Lemos os metadados do histórico que o adaptador injetou\n const meta = state._meta || {\n totalSteps: 0,\n currentIndex: -1,\n canUndo: false,\n canRedo: false,\n };\n const currentStep = meta.currentIndex + 1;\n const totalSteps = meta.totalSteps;\n\n panelHtml += `\n <div class=\"bit-store-block\">\n <div class=\"bit-store-header\">\n <h3 class=\"bit-store-title\">${id}</h3>\n <div class=\"bit-badge-group\">\n <span class=\"bit-badge ${state.isValid ? \"badge-success\" : \"badge-error\"}\">\n ${state.isValid ? \"✓ Valid\" : \"✕ Invalid\"}\n </span>\n ${state.isDirty ? `<span class=\"bit-badge badge-warn\">Dirty</span>` : \"\"}\n ${state.isSubmitting ? `<span class=\"bit-badge badge-info\">⏳ Submitting</span>` : \"\"}\n </div>\n </div>\n\n <span class=\"bit-section-title\">Time Travel (${currentStep}/${totalSteps})</span>\n \n <div class=\"bit-controls\">\n <button class=\"bit-action-btn\" data-action=\"undo\" data-store=\"${id}\" ${meta.canUndo ? \"\" : \"disabled\"}>\n <span>↺</span> Undo\n </button>\n <button class=\"bit-action-btn\" data-action=\"redo\" data-store=\"${id}\" ${meta.canRedo ? \"\" : \"disabled\"}>\n <span>↻</span> Redo\n </button>\n <button class=\"bit-action-btn bit-btn-reset\" data-action=\"reset\" data-store=\"${id}\">\n <span>🗑</span> Reset\n </button>\n </div>\n `;\n\n if (hasErrors) {\n panelHtml += `\n <span class=\"bit-section-title\" style=\"color: #f87171;\">⚠️ Validations Failing</span>\n <pre class=\"bit-error-box\">${JSON.stringify(state.errors, null, 2)}</pre>\n `;\n }\n\n panelHtml += `\n <span class=\"bit-section-title\">Values</span>\n <pre class=\"bit-pre\">${JSON.stringify(state.values, null, 2)}</pre>\n </div>\n `;\n }\n\n panelHtml += `</div>`;\n }\n\n // Botão Flutuante (sempre renderizado)\n const triggerHtml = `\n <button class=\"bit-devtools-trigger\" style=\"transform: ${this.isOpen ? \"scale(0.9)\" : \"scale(1)\"};\" title=\"Abrir DevTools\">\n ${this.isOpen ? \"✖\" : \"Bit\"}\n </button>\n `;\n\n this.rootElement.innerHTML = panelHtml + triggerHtml;\n }\n}\n","import { bitBus } from \"../../core\";\nimport type { BitStore } from \"../../core/store\";\nimport { BitFormDevToolsUI } from \"../ui\";\n\nexport function setupLocalDevTools(container: HTMLElement) {\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => (bitBus.stores[id] as BitStore<any>)?.undo(),\n onRedo: (id) => (bitBus.stores[id] as BitStore<any>)?.redo(),\n onReset: (id) => (bitBus.stores[id] as BitStore<any>)?.reset(),\n });\n\n const getFullSnapshot = () => {\n const states: Record<string, any> = {};\n\n for (const [id, instance] of Object.entries(bitBus.stores)) {\n const storeInstance = instance as any;\n const state = storeInstance.getState();\n\n const historyMeta = storeInstance?.getHistoryMetadata?.() || {\n enabled: false,\n canUndo: false,\n canRedo: false,\n historyIndex: -1,\n historySize: 0,\n };\n\n states[id] = {\n ...state,\n _meta: {\n canUndo: historyMeta.canUndo,\n canRedo: historyMeta.canRedo,\n totalSteps: historyMeta.historySize,\n currentIndex: historyMeta.historyIndex,\n },\n };\n }\n return states;\n };\n\n ui.updateState(getFullSnapshot());\n\n const unsubscribe = bitBus.subscribe(() => {\n ui.updateState(getFullSnapshot());\n });\n\n return {\n ui,\n destroy: () => {\n unsubscribe();\n container.innerHTML = \"\";\n },\n };\n}\n","import { BitFormDevToolsUI } from \"../ui\";\n\nexport function setupRemoteDevTools(\n container: HTMLElement,\n url: string = \"ws://localhost:3000\",\n) {\n const socket = new WebSocket(url);\n\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => sendMessage(\"ACTION\", { storeId: id, action: \"undo\" }),\n onRedo: (id) => sendMessage(\"ACTION\", { storeId: id, action: \"redo\" }),\n onReset: (id) => sendMessage(\"ACTION\", { storeId: id, action: \"reset\" }),\n });\n\n const sendMessage = (type: string, payload: any) => {\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify({ type, payload }));\n } else {\n console.warn(\n \"[bit-form] Tentativa de envio falhou. WebSocket não está aberto.\",\n );\n }\n };\n\n socket.addEventListener(\"open\", () => {\n console.log(`[bit-form] Conectado ao DevTools remoto em ${url}`);\n });\n\n socket.addEventListener(\"message\", (msg: MessageEvent) => {\n try {\n const data = JSON.parse(msg.data);\n if (data.type === \"STATE_UPDATE\") {\n ui.updateState(data.payload);\n }\n } catch (e) {\n console.error(\"[bit-form] Erro ao processar mensagem do WebSocket:\", e);\n }\n });\n\n socket.addEventListener(\"error\", (err) => {\n console.error(\"[bit-form] Erro na conexão do DevTools remoto:\", err);\n });\n\n return ui;\n}\n","import { setupLocalDevTools } from \"./adapters/local\";\nimport { setupRemoteDevTools } from \"./adapters/remote\";\nimport type { BitDevToolsOptions } from \"./types\";\n\nexport type { BitDevToolsOptions };\n\nexport function initDevTools(options: BitDevToolsOptions = {}) {\n const { mode = \"local\", url } = options;\n let containerEl: HTMLElement;\n\n let isAutoCreated = false;\n\n if (typeof options.container === \"string\") {\n const el = document.querySelector<HTMLElement>(options.container);\n if (!el)\n throw new Error(\n `[bit-form] Container '${options.container}' não encontrado na página.`,\n );\n containerEl = el;\n } else if (options.container instanceof HTMLElement) {\n containerEl = options.container;\n } else {\n containerEl = document.createElement(\"div\");\n containerEl.id = \"bit-form-devtools-root\";\n containerEl.style.position = \"fixed\";\n containerEl.style.bottom = \"20px\";\n containerEl.style.right = \"20px\";\n containerEl.style.zIndex = \"9999\";\n containerEl.style.maxHeight = \"80vh\";\n containerEl.style.overflowY = \"auto\";\n containerEl.style.boxShadow = \"0 10px 25px rgba(0,0,0,0.1)\";\n document.body.appendChild(containerEl);\n isAutoCreated = true;\n }\n\n let adapterInstance: any;\n\n if (mode === \"local\") {\n console.log(\"[bit-form] DevTools iniciado em modo Local.\");\n adapterInstance = setupLocalDevTools(containerEl);\n } else if (mode === \"remote\") {\n console.log(\"[bit-form] DevTools iniciado em modo Remote.\");\n adapterInstance = setupRemoteDevTools(containerEl, url);\n } else {\n throw new Error(`[bit-form] Modo DevTools inválido: ${mode}`);\n }\n\n return {\n ...adapterInstance,\n destroy: () => {\n if (adapterInstance && typeof adapterInstance.destroy === \"function\") {\n adapterInstance.destroy();\n }\n\n if (isAutoCreated && containerEl.parentNode) {\n containerEl.parentNode.removeChild(containerEl);\n } else {\n containerEl.innerHTML = \"\";\n }\n },\n };\n}\n","import { BitStore } from \"./index\";\nimport type { DevToolsOptions } from \"./types\";\nimport { setupRemoteBridge } from \"../../devtools/bridge\";\nimport { initDevTools } from \"../../devtools\";\n\nexport class BitDevtoolsManager<T extends object> {\n private store: BitStore<T>;\n private cleanupFn: (() => void) | null = null;\n\n constructor(store: BitStore<T>) {\n this.store = store;\n this.setup();\n }\n\n private setup() {\n const devTools = this.store.config.devTools;\n if (!devTools) return;\n\n const options: Required<Pick<DevToolsOptions, \"enabled\" | \"mode\">> &\n Pick<DevToolsOptions, \"url\"> =\n typeof devTools === \"boolean\"\n ? { enabled: devTools, mode: \"local\" }\n : { enabled: true, mode: devTools.mode ?? \"local\", ...devTools };\n\n if (!options.enabled) return;\n\n if (options.mode === \"remote\") {\n const url = options.url || \"ws://localhost:3000\";\n this.cleanupFn = setupRemoteBridge(url);\n } else {\n const instance = initDevTools();\n\n if (instance && typeof instance.destroy === \"function\") {\n this.cleanupFn = instance.destroy;\n }\n }\n }\n\n public destroy() {\n if (this.cleanupFn) {\n this.cleanupFn();\n }\n }\n}\n","import { collectDirtyPaths, getDeepValue, valueEqual } from \"../utils\";\n\n/**\n * BitDirtyManager\n *\n * Manages dirty state tracking for form fields.\n * Tracks which fields have been modified from their initial values.\n */\nexport class BitDirtyManager<T extends object = any> {\n private dirtyPaths: Set<string> = new Set();\n\n /**\n * Updates dirty state for a single path change.\n * Automatically removes child paths when parent changes.\n * @returns true if any fields are dirty\n */\n updateForPath(path: string, values: T, initialValues: T): boolean {\n // Remove child paths when parent changes\n for (const p of this.dirtyPaths) {\n if (p.startsWith(path + \".\")) {\n this.dirtyPaths.delete(p);\n }\n }\n\n const current = getDeepValue(values, path);\n const initial = getDeepValue(initialValues, path);\n\n if (valueEqual(current, initial)) {\n this.dirtyPaths.delete(path);\n } else {\n this.dirtyPaths.add(path);\n }\n\n return this.dirtyPaths.size > 0;\n }\n\n /**\n * Rebuilds dirty paths from full state comparison.\n * Used for undo/redo and bulk updates.\n * @returns true if any fields are dirty\n */\n rebuild(values: T, initialValues: T): boolean {\n this.dirtyPaths = collectDirtyPaths(values, initialValues);\n return this.dirtyPaths.size > 0;\n }\n\n /**\n * Clears all dirty tracking.\n * Used when resetting form or updating initial values.\n */\n clear(): void {\n this.dirtyPaths.clear();\n }\n\n /**\n * Returns current dirty state.\n */\n get isDirty(): boolean {\n return this.dirtyPaths.size > 0;\n }\n\n /**\n * Returns readonly set of dirty paths (for debugging/devtools).\n */\n getDirtyPaths(): ReadonlySet<string> {\n return this.dirtyPaths;\n }\n\n /**\n * Builds a partial object containing only dirty values.\n * For arrays, returns the entire array if any index changed.\n * @param values - current form values (already cleaned/transformed)\n */\n buildDirtyValues<T extends object>(values: T): Partial<T> {\n if (this.dirtyPaths.size === 0) return {};\n\n const result: any = {};\n const processedArrays = new Set<string>();\n\n for (const path of this.dirtyPaths) {\n // Check if this path is part of an array\n const arrayMatch = path.match(/^(.+)\\.(\\d+)/);\n\n if (arrayMatch) {\n const arrayPath = arrayMatch[1];\n\n // Skip if we already processed this array\n if (processedArrays.has(arrayPath)) continue;\n\n processedArrays.add(arrayPath);\n this.setNestedValue(\n result,\n arrayPath,\n this.getNestedValue(values, arrayPath),\n );\n } else {\n // Regular field or array reference itself\n this.setNestedValue(result, path, this.getNestedValue(values, path));\n }\n }\n\n return result;\n }\n\n private getNestedValue(obj: any, path: string): any {\n const keys = path.split(\".\");\n let current = obj;\n for (const key of keys) {\n if (current === null || current === undefined) return undefined;\n current = current[key];\n }\n return current;\n }\n\n private setNestedValue(obj: any, path: string, value: any): void {\n const keys = path.split(\".\");\n let current = obj;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n if (!(key in current)) {\n current[key] = {};\n }\n current = current[key];\n }\n\n current[keys[keys.length - 1]] = value;\n }\n}\n","import { BitErrors, BitState } from \"./types\";\nimport { getDeepValue, valueEqual } from \"../utils\";\n\n/**\n * BitScopeManager\n *\n * Manages multi-step forms and scope-based validation.\n * Scopes are groups of fields that can be validated and tracked independently,\n * useful for wizard-style forms or multi-section forms.\n */\nexport class BitScopeManager<T extends object = any> {\n constructor(\n private getState: () => BitState<T>,\n private getInitialValues: () => T,\n private getScopeFields: (scopeName: string) => string[],\n ) {}\n\n /**\n * Get validation status of a scope (step).\n * Returns whether the scope has errors, is dirty, and the error details.\n */\n getStepStatus(scopeName: string) {\n const fields = this.getScopeFields(scopeName);\n const state = this.getState();\n\n const hasErrors = fields.some(\n (f) => !!state.errors[f as keyof BitErrors<T>],\n );\n\n const isDirty = fields.some((f) => {\n const current = getDeepValue(state.values, f);\n const initial = getDeepValue(this.getInitialValues(), f);\n return !valueEqual(current, initial);\n });\n\n const errors = this.getStepErrors(scopeName);\n\n return { hasErrors, isDirty, errors };\n }\n\n /**\n * Get all errors for fields in a specific scope.\n */\n getStepErrors(scopeName: string): Record<string, string> {\n const fields = this.getScopeFields(scopeName);\n const state = this.getState();\n const result: Record<string, string> = {};\n\n for (const field of fields) {\n const error = state.errors[field as keyof BitErrors<T>];\n if (error) {\n result[field] = error;\n }\n }\n\n return result;\n }\n}\n","import { BitState } from \"./types\";\nimport type { BitResolvedConfig } from \"./internal-types\";\nimport { BitDependencyManager } from \"./dependency-manager\";\nimport { getDeepValue, valueEqual } from \"../utils\";\n\n/**\n * BitFieldQueryManager\n *\n * Provides query methods for field state without mutating.\n * All methods are read-only and delegate to appropriate managers.\n */\nexport class BitFieldQueryManager<T extends object = any> {\n constructor(\n private depsMg: BitDependencyManager<T>,\n private getState: () => BitState<T>,\n private getConfig: () => BitResolvedConfig<T>,\n ) {}\n\n /**\n * Check if a field is hidden based on conditional logic.\n */\n isHidden<P extends string>(path: P): boolean {\n return this.depsMg.isHidden(path);\n }\n\n /**\n * Check if a field is required based on conditional logic.\n */\n isRequired<P extends string>(path: P): boolean {\n return this.depsMg.isRequired(path, this.getState().values);\n }\n\n /**\n * Check if a field has been modified from its initial value.\n */\n isFieldDirty(path: string): boolean {\n const currentValue = getDeepValue(this.getState().values, path);\n const initialValue = getDeepValue(this.getConfig().initialValues, path);\n return !valueEqual(currentValue, initialValue);\n }\n\n /**\n * Check if a field is currently validating (async validation in progress).\n */\n isFieldValidating(path: string): boolean {\n return !!this.getState().isValidating[path];\n }\n}\n","import { BitErrors, BitState } from \"./types\";\n\n/**\n * BitErrorManager\n *\n * Manages error state for fields.\n * Handles setting individual errors, batch errors, and server errors.\n */\nexport class BitErrorManager<T extends object = any> {\n constructor(\n private getState: () => BitState<T>,\n private internalUpdateState: (partial: Partial<BitState<T>>) => void,\n ) {}\n\n /**\n * Set or clear error for a single field.\n * Pass undefined to clear the error.\n */\n setError(path: string, message: string | undefined): void {\n const newErrors = {\n ...this.getState().errors,\n [path]: message,\n } as BitErrors<T>;\n\n if (!message) {\n delete newErrors[path as keyof BitErrors<T>];\n }\n\n this.internalUpdateState({ errors: newErrors });\n }\n\n /**\n * Set multiple field errors at once (merge behavior).\n */\n setErrors(errors: BitErrors<T>): void {\n this.internalUpdateState({\n errors: { ...this.getState().errors, ...errors },\n });\n }\n\n /**\n * Set errors from server response (converts arrays to first element).\n * Useful for handling 422 validation error responses.\n */\n setServerErrors(serverErrors: Record<string, string[] | string>): void {\n const formattedErrors: BitErrors<T> = {};\n\n for (const [key, value] of Object.entries(serverErrors)) {\n formattedErrors[key as keyof BitErrors<T>] = Array.isArray(value)\n ? value[0]\n : value;\n }\n\n this.setErrors(formattedErrors);\n }\n}\n","import { deepClone } from \"../utils\";\nimport type {\n BitPersistResolvedConfig,\n BitPersistStorageAdapter,\n} from \"./types\";\n\nfunction getDefaultStorage(): BitPersistStorageAdapter | undefined {\n if (typeof globalThis === \"undefined\") return undefined;\n\n const storageLike = (globalThis as { localStorage?: Storage }).localStorage;\n if (!storageLike) return undefined;\n\n return {\n getItem: (key: string) => storageLike.getItem(key),\n setItem: (key: string, value: string) => storageLike.setItem(key, value),\n removeItem: (key: string) => storageLike.removeItem(key),\n };\n}\n\nexport class BitPersistManager<T extends object = any> {\n private timer: ReturnType<typeof setTimeout> | undefined;\n\n constructor(\n private config: BitPersistResolvedConfig<T>,\n private getValues: () => T,\n private getDirtyValues: () => Partial<T>,\n private applyRestoredValues: (values: Partial<T>) => void,\n ) {}\n\n private getStorage(): BitPersistStorageAdapter | undefined {\n return this.config.storage || getDefaultStorage();\n }\n\n private canPersist() {\n return !!(this.config.enabled && this.config.key && this.getStorage());\n }\n\n private handleError(error: unknown) {\n this.config.onError?.(error);\n }\n\n async saveNow() {\n if (!this.canPersist()) return;\n\n const storage = this.getStorage();\n if (!storage) return;\n\n try {\n const payload =\n this.config.mode === \"dirtyValues\"\n ? this.getDirtyValues()\n : this.getValues();\n const serialized = this.config.serialize(deepClone(payload));\n await storage.setItem(this.config.key, serialized);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n queueSave() {\n if (!this.canPersist() || !this.config.autoSave) return;\n\n if (this.timer) {\n clearTimeout(this.timer);\n }\n\n this.timer = setTimeout(() => {\n void this.saveNow();\n }, this.config.debounceMs);\n }\n\n async restore() {\n if (!this.canPersist()) return false;\n\n const storage = this.getStorage();\n if (!storage) return false;\n\n try {\n const raw = await storage.getItem(this.config.key);\n if (!raw) return false;\n\n const parsed = this.config.deserialize(raw);\n if (!parsed || typeof parsed !== \"object\") {\n return false;\n }\n\n this.applyRestoredValues(parsed);\n return true;\n } catch (error) {\n this.handleError(error);\n return false;\n }\n }\n\n async clear() {\n if (!this.canPersist()) return;\n\n const storage = this.getStorage();\n if (!storage) return;\n\n try {\n await storage.removeItem(this.config.key);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n destroy() {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = undefined;\n }\n }\n}\n","import type {\n BitAfterSubmitEvent,\n BitAfterValidateEvent,\n BitBeforeSubmitEvent,\n BitBeforeValidateEvent,\n BitFieldChangeEvent,\n BitPlugin,\n BitPluginContext,\n BitPluginErrorEvent,\n} from \"./types\";\n\nexport class BitPluginManager<T extends object = any> {\n private teardownFns: Array<() => void> = [];\n private notifyingError = false;\n\n constructor(\n private plugins: BitPlugin<T>[],\n private contextFactory: () => BitPluginContext<T>,\n ) {}\n\n setupAll() {\n this.plugins.forEach((plugin) => {\n if (!plugin.setup) return;\n\n try {\n const maybeTeardown = plugin.setup(this.contextFactory());\n if (typeof maybeTeardown === \"function\") {\n this.teardownFns.push(maybeTeardown);\n }\n } catch (error) {\n void this.reportError(\"setup\", error, undefined, plugin.name);\n }\n });\n }\n\n async beforeValidate(event: BitBeforeValidateEvent<T>) {\n await this.emitHook(\"beforeValidate\", event);\n }\n\n async afterValidate(event: BitAfterValidateEvent<T>) {\n await this.emitHook(\"afterValidate\", event);\n }\n\n async beforeSubmit(event: BitBeforeSubmitEvent<T>) {\n await this.emitHook(\"beforeSubmit\", event);\n }\n\n async afterSubmit(event: BitAfterSubmitEvent<T>) {\n await this.emitHook(\"afterSubmit\", event);\n }\n\n onFieldChange(event: BitFieldChangeEvent<T>) {\n this.plugins.forEach((plugin) => {\n const hook = plugin.hooks?.onFieldChange;\n if (!hook) return;\n\n try {\n const result = hook(event, this.contextFactory());\n void Promise.resolve(result).catch((error) => {\n void this.reportError(\"onFieldChange\", error, event, plugin.name);\n });\n } catch (error) {\n void this.reportError(\"onFieldChange\", error, event, plugin.name);\n }\n });\n }\n\n async reportError(\n source: BitPluginErrorEvent<T>[\"source\"],\n error: unknown,\n event?: unknown,\n pluginName?: string,\n ) {\n if (this.notifyingError) {\n return;\n }\n\n this.notifyingError = true;\n\n const context = this.contextFactory();\n const payload: BitPluginErrorEvent<T> = {\n source,\n pluginName,\n error,\n event,\n values: context.getState().values,\n state: context.getState(),\n };\n\n for (const plugin of this.plugins) {\n const onError = plugin.hooks?.onError;\n if (!onError) continue;\n\n try {\n await onError(payload, context);\n } catch {\n // fail-open: ignore secondary errors from onError handlers\n }\n }\n\n this.notifyingError = false;\n }\n\n destroy() {\n for (let index = this.teardownFns.length - 1; index >= 0; index -= 1) {\n const teardown = this.teardownFns[index];\n try {\n teardown();\n } catch (error) {\n void this.reportError(\"teardown\", error);\n }\n }\n\n this.teardownFns = [];\n }\n\n private async emitHook(\n hookName:\n | \"beforeValidate\"\n | \"afterValidate\"\n | \"beforeSubmit\"\n | \"afterSubmit\",\n event:\n | BitBeforeValidateEvent<T>\n | BitAfterValidateEvent<T>\n | BitBeforeSubmitEvent<T>\n | BitAfterSubmitEvent<T>,\n ) {\n const context = this.contextFactory();\n\n for (const plugin of this.plugins) {\n const hook = plugin.hooks?.[hookName];\n if (!hook) continue;\n\n try {\n await hook(event as never, context);\n } catch (error) {\n await this.reportError(hookName, error, event, plugin.name);\n }\n }\n }\n}\n","import { bitBus } from \"./bus\";\nimport { BitMask } from \"../mask/types\";\nimport {\n BitConfig,\n BitComputedFn,\n BitErrors,\n BitFieldState,\n BitTransformFn,\n BitState,\n BitFieldDefinition,\n BitPath,\n BitPathValue,\n BitArrayPath,\n BitArrayItem,\n DeepPartial,\n BitFieldChangeMeta,\n BitFieldChangeEvent,\n BitBeforeValidateEvent,\n BitAfterValidateEvent,\n BitBeforeSubmitEvent,\n BitAfterSubmitEvent,\n} from \"./types\";\nimport type {\n BitHistoryMetadata,\n BitSelector,\n BitSelectorSubscriptionOptions,\n BitValidationOptions,\n} from \"./public-types\";\nimport {\n BitResolvedConfig,\n BitStoreAdapter,\n SelectorListenerEntry,\n BitValidationAdapter,\n BitLifecycleAdapter,\n} from \"./internal-types\";\nimport { deepClone, deepEqual, getDeepValue, valueEqual } from \"../utils\";\nimport { normalizeConfig } from \"./config\";\nimport { BitDependencyManager } from \"./dependency-manager\";\nimport { BitHistoryManager } from \"./history-manager\";\nimport { BitArrayManager } from \"./array-manager\";\nimport { BitComputedManager } from \"./computed-manager\";\nimport { BitValidationManager } from \"./validation-manager\";\nimport { BitLifecycleManager } from \"./lifecycle-manager\";\nimport { BitDevtoolsManager } from \"./devtools-manager\";\nimport { BitDirtyManager } from \"./dirty-manager\";\nimport { BitScopeManager } from \"./scope-manager\";\nimport { BitFieldQueryManager } from \"./field-query-manager\";\nimport { BitErrorManager } from \"./error-manager\";\nimport { BitPersistManager } from \"./persist-manager\";\nimport { BitPluginManager } from \"./plugin-manager\";\n/**\n * BitStore\n *\n * The core orchestrator of form state management.\n *\n * This store coordinates multiple managers to provide comprehensive form handling:\n * - Core managers handle essential state and validation\n * - Feature managers provide optional enhancements (history, arrays, scopes)\n * - Query/mutation managers organize domain-specific operations\n */\nexport class BitStore<T extends object = any>\n implements BitStoreAdapter<T>, BitValidationAdapter<T>, BitLifecycleAdapter<T>\n{\n // ============================================================================\n // PRIVATE PROPERTIES\n // ============================================================================\n\n private state: BitState<T>;\n private listeners: Set<() => void> = new Set();\n private selectorListeners: Set<SelectorListenerEntry<T>> = new Set();\n private persistMg: BitPersistManager<T>;\n private pluginMg: BitPluginManager<T>;\n\n // ============================================================================\n // PUBLIC PROPERTIES\n // ============================================================================\n\n public config: BitResolvedConfig<T>;\n public storeId: string;\n\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n // Core Managers\n // Managers for essential form state management\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n private readonly depsMg: BitDependencyManager<T>;\n private readonly validatorMg: BitValidationManager<T>;\n private readonly computedMg: BitComputedManager<T>;\n private readonly dirtyMg: BitDirtyManager<T>;\n private readonly lifecycleMg: BitLifecycleManager<T>;\n\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n // Feature Managers\n // Managers for optional features like history, arrays, and scopes\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n private readonly historyMg: BitHistoryManager<T>;\n private readonly arraysMg: BitArrayManager<T>;\n private readonly scopeMg: BitScopeManager<T>;\n private readonly devtoolsMg: BitDevtoolsManager<T>;\n\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n // Query & Mutation Managers\n // Dedicated managers for specific operations\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n private readonly queryMg: BitFieldQueryManager<T>;\n private readonly errorMg: BitErrorManager<T>;\n\n // ============================================================================\n // CONSTRUCTOR\n // ============================================================================\n\n constructor(config: BitConfig<T> = {}) {\n this.config = normalizeConfig(config);\n\n // Initialize core managers\n this.depsMg = new BitDependencyManager<T>();\n this.computedMg = new BitComputedManager<T>(() =>\n this.getComputedEntries(),\n );\n this.validatorMg = new BitValidationManager<T>(this);\n this.dirtyMg = new BitDirtyManager<T>();\n this.lifecycleMg = new BitLifecycleManager<T>(this);\n\n // Initialize feature managers\n this.historyMg = new BitHistoryManager<T>(\n !!this.config.enableHistory,\n this.config.historyLimit ?? 15,\n );\n this.arraysMg = new BitArrayManager<T>(this);\n this.devtoolsMg = new BitDevtoolsManager<T>(this);\n\n // Initialize query/mutation managers with state access\n this.scopeMg = new BitScopeManager<T>(\n () => this.state,\n () => this.config.initialValues,\n (scopeName) => this.getScopeFields(scopeName),\n );\n this.queryMg = new BitFieldQueryManager<T>(\n this.depsMg,\n () => this.state,\n () => this.config,\n );\n this.errorMg = new BitErrorManager<T>(\n () => this.state,\n (partial) => this.internalUpdateState(partial),\n );\n this.persistMg = new BitPersistManager<T>(\n this.config.persist,\n () => this.state.values,\n () => this.getDirtyValues(),\n (values) => this.applyPersistedValues(values),\n );\n\n // Initialize form state\n const initialValues = deepClone(this.config.initialValues);\n\n // Register initial fields from config\n if (this.config.fields) {\n Object.entries(this.config.fields).forEach(([path, fieldConfig]) => {\n this.depsMg.register(\n path,\n fieldConfig as BitFieldDefinition<T>,\n initialValues,\n );\n });\n }\n\n const valuesWithComputeds = this.computedMg.apply(initialValues);\n\n this.state = {\n values: valuesWithComputeds,\n errors: {},\n touched: {},\n isValidating: {},\n isValid: true,\n isSubmitting: false,\n isDirty: false,\n };\n\n this.internalSaveSnapshot();\n\n this.storeId =\n this.config.name ||\n `bit-form-${Math.random().toString(36).substring(2, 9)}`;\n\n this.pluginMg = new BitPluginManager<T>(this.config.plugins, () => ({\n storeId: this.storeId,\n getState: () => this.getState(),\n getConfig: () => this.getConfig(),\n }));\n this.pluginMg.setupAll();\n\n // Register store in global bus\n bitBus.stores[this.storeId] = this;\n }\n\n // ============================================================================\n // STATE ACCESS\n // ============================================================================\n\n getConfig() {\n return this.config;\n }\n\n getFieldConfig(path: string): BitFieldDefinition<T> | undefined {\n return (\n this.depsMg.fieldConfigs.get(path) ||\n this.config.fields?.[path as keyof typeof this.config.fields]\n );\n }\n\n getScopeFields(scopeName: string): string[] {\n const result: string[] = [];\n\n this.depsMg.fieldConfigs.forEach((cfg, path) => {\n if (cfg.scope === scopeName) {\n result.push(path);\n }\n });\n\n return result;\n }\n\n getComputedEntries(): [string, BitComputedFn<T>][] {\n const result: [string, BitComputedFn<T>][] = [];\n\n this.depsMg.fieldConfigs.forEach((cfg, path) => {\n if (cfg.computed) {\n result.push([path, cfg.computed]);\n }\n });\n\n return result;\n }\n\n getTransformEntries(): [string, BitTransformFn<T>][] {\n const result: [string, BitTransformFn<T>][] = [];\n\n this.depsMg.fieldConfigs.forEach((cfg, path) => {\n if (cfg.transform) {\n result.push([path, cfg.transform]);\n }\n });\n\n return result;\n }\n\n resolveMask(path: string): BitMask | undefined {\n const maskOption = this.getFieldConfig(path)?.mask;\n if (!maskOption) return undefined;\n\n if (typeof maskOption === \"string\") {\n return this.config.masks?.[maskOption];\n }\n\n return maskOption;\n }\n\n getState(): BitState<T> {\n return this.state;\n }\n\n getFieldState<P extends BitPath<T>>(\n path: P,\n ): BitFieldState<T, BitPathValue<T, P>> {\n const value = getDeepValue(\n this.state.values,\n path as string,\n ) as BitPathValue<T, P>;\n\n return {\n value,\n error: this.state.errors[path as keyof BitErrors<T>],\n touched: !!this.state.touched[path as keyof typeof this.state.touched],\n isHidden: this.isHidden(path),\n isRequired: this.isRequired(path),\n isDirty: this.isFieldDirty(path as string),\n isValidating: this.isFieldValidating(path as string),\n };\n }\n\n get isValid(): boolean {\n return this.state.isValid;\n }\n\n get isSubmitting(): boolean {\n return this.state.isSubmitting;\n }\n\n get isDirty(): boolean {\n return this.state.isDirty;\n }\n\n // ============================================================================\n // FIELD REGISTRATION & CLEANUP\n // ============================================================================\n\n registerField(path: string, config: BitFieldDefinition<T>) {\n this.depsMg.register(path, config, this.state.values);\n if (this.depsMg.isHidden(path)) {\n this.notify();\n }\n }\n\n unregisterField<P extends BitPath<T>>(path: P) {\n // Fields from initial config are never unregistered\n if (this.config.fields?.[path as string]) {\n return;\n }\n this.depsMg.unregister(path);\n\n const newErrors = { ...this.state.errors };\n const newTouched = { ...this.state.touched };\n let stateChanged = false;\n\n if (newErrors[path as keyof BitErrors<T>]) {\n delete newErrors[path as keyof BitErrors<T>];\n stateChanged = true;\n }\n\n if (newTouched[path as keyof typeof newTouched]) {\n delete newTouched[path as keyof typeof newTouched];\n stateChanged = true;\n }\n\n if (stateChanged) {\n this.internalUpdateState({\n errors: newErrors,\n touched: newTouched,\n });\n }\n }\n\n unregisterPrefix(prefix: string) {\n this.depsMg.unregisterPrefix(prefix);\n }\n\n // ============================================================================\n // FIELD QUERIES (Delegated to queryMg)\n // ============================================================================\n\n isHidden<P extends BitPath<T>>(path: P): boolean {\n return this.queryMg.isHidden(path);\n }\n\n isRequired<P extends BitPath<T>>(path: P): boolean {\n return this.queryMg.isRequired(path);\n }\n\n isFieldDirty(path: string): boolean {\n return this.queryMg.isFieldDirty(path);\n }\n\n isFieldValidating(path: string): boolean {\n return this.queryMg.isFieldValidating(path);\n }\n\n // ============================================================================\n // SUBSCRIPTIONS & WATCHERS\n // ============================================================================\n\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n subscribeSelector<TSlice>(\n selector: BitSelector<T, TSlice>,\n listener: (slice: TSlice) => void,\n options?: BitSelectorSubscriptionOptions<TSlice>,\n ) {\n const equalityFn = options?.equalityFn ?? valueEqual;\n let lastSlice = selector(this.state);\n\n const subscription: SelectorListenerEntry<T> = {\n notify: (nextState) => {\n const nextSlice = selector(nextState);\n\n if (equalityFn(lastSlice, nextSlice)) {\n return;\n }\n\n lastSlice = nextSlice;\n listener(nextSlice);\n },\n };\n\n this.selectorListeners.add(subscription);\n\n if (options?.emitImmediately) {\n listener(lastSlice);\n }\n\n return () => this.selectorListeners.delete(subscription);\n }\n\n subscribePath<P extends BitPath<T>>(\n path: P,\n listener: (value: BitPathValue<T, P>) => void,\n options?: BitSelectorSubscriptionOptions<BitPathValue<T, P>>,\n ) {\n return this.subscribeSelector(\n (state) =>\n getDeepValue(state.values, path as string) as BitPathValue<T, P>,\n listener,\n options,\n );\n }\n\n watch<P extends BitPath<T>>(\n path: P,\n callback: (value: BitPathValue<T, P>) => void,\n ) {\n return this.subscribePath(path, callback, {\n equalityFn: deepEqual,\n });\n }\n\n // ============================================================================\n // FIELD VALUE MUTATIONS\n // ============================================================================\n\n setField<P extends BitPath<T>>(path: P, value: BitPathValue<T, P>) {\n this.setFieldWithMeta(path as string, value, { origin: \"setField\" });\n }\n\n setFieldWithMeta(\n path: string,\n value: any,\n meta: BitFieldChangeMeta = { origin: \"setField\" },\n ) {\n this.lifecycleMg.updateField(path, value, meta);\n }\n\n blurField<P extends BitPath<T>>(path: P) {\n this.internalSaveSnapshot();\n\n if (!this.state.touched[path as keyof typeof this.state.touched]) {\n this.internalUpdateState({\n touched: { ...this.state.touched, [path]: true },\n });\n }\n\n this.validatorMg.trigger([path]);\n }\n\n markFieldsTouched(paths: string[]) {\n if (paths.length === 0) return;\n const newTouched = { ...this.state.touched };\n paths.forEach((path) => (newTouched[path] = true));\n this.internalUpdateState({ touched: newTouched });\n }\n\n /** @deprecated Use `rebase()` instead. This method is an alias and may be removed in a future version. */\n setValues(newValues: T) {\n this.rebase(newValues);\n }\n\n replaceValues(newValues: T) {\n this.lifecycleMg.replaceValues(newValues);\n }\n\n hydrate(values: DeepPartial<T>) {\n this.lifecycleMg.hydrateValues(values);\n }\n\n rebase(newValues: T) {\n this.lifecycleMg.rebaseValues(newValues);\n }\n\n // ============================================================================\n // ERROR MANAGEMENT (Delegated to errorMg)\n // ============================================================================\n\n setError(path: string, message: string | undefined) {\n this.errorMg.setError(path, message);\n }\n\n setErrors(errors: BitErrors<T>) {\n this.errorMg.setErrors(errors);\n }\n\n setServerErrors(serverErrors: Record<string, string[] | string>) {\n this.errorMg.setServerErrors(serverErrors);\n }\n\n // ============================================================================\n // FORM-LEVEL OPERATIONS\n // ============================================================================\n\n reset() {\n this.lifecycleMg.reset();\n }\n\n async submit(\n onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>,\n ) {\n return this.lifecycleMg.submit(onSuccess);\n }\n\n registerMask(name: string, mask: BitMask) {\n this.config.masks = {\n ...(this.config.masks || {}),\n [name]: mask,\n };\n }\n\n getDirtyValues(): Partial<T> {\n return this.dirtyMg.buildDirtyValues(this.state.values);\n }\n\n async restorePersisted(): Promise<boolean> {\n return this.persistMg.restore();\n }\n\n async forceSave(): Promise<void> {\n await this.persistMg.saveNow();\n }\n\n async clearPersisted(): Promise<void> {\n await this.persistMg.clear();\n }\n\n // ============================================================================\n // ARRAY OPERATIONS (Delegated to arraysMg)\n // ============================================================================\n\n pushItem<P extends BitArrayPath<T>>(\n path: P,\n value: BitArrayItem<BitPathValue<T, P>>,\n ) {\n this.arraysMg.pushItem(path, value);\n }\n\n prependItem<P extends BitArrayPath<T>>(\n path: P,\n value: BitArrayItem<BitPathValue<T, P>>,\n ) {\n this.arraysMg.prependItem(path, value);\n }\n\n insertItem<P extends BitArrayPath<T>>(\n path: P,\n index: number,\n value: BitArrayItem<BitPathValue<T, P>>,\n ) {\n this.arraysMg.insertItem(path, index, value);\n }\n\n removeItem<P extends BitArrayPath<T>>(path: P, index: number) {\n this.arraysMg.removeItem(path, index);\n }\n\n swapItems<P extends BitArrayPath<T>>(\n path: P,\n indexA: number,\n indexB: number,\n ) {\n this.arraysMg.swapItems(path, indexA, indexB);\n }\n\n moveItem<P extends BitArrayPath<T>>(path: P, from: number, to: number) {\n this.arraysMg.moveItem(path, from, to);\n }\n\n // ============================================================================\n // HISTORY & TIME-TRAVEL (Delegated to historyMg)\n // ============================================================================\n\n get canUndo(): boolean {\n return this.historyMg.canUndo;\n }\n\n get canRedo(): boolean {\n return this.historyMg.canRedo;\n }\n\n undo() {\n const prevState = this.historyMg.undo();\n if (prevState) {\n const isDirty = this.dirtyMg.rebuild(\n prevState,\n this.config.initialValues,\n );\n this.internalUpdateState({ values: prevState, isDirty });\n this.validatorMg.validate();\n }\n }\n\n redo() {\n const nextState = this.historyMg.redo();\n if (nextState) {\n const isDirty = this.dirtyMg.rebuild(\n nextState,\n this.config.initialValues,\n );\n this.internalUpdateState({ values: nextState, isDirty });\n this.validatorMg.validate();\n }\n }\n\n getHistoryMetadata(): BitHistoryMetadata {\n return this.historyMg.getMetadata();\n }\n\n // ============================================================================\n // VALIDATION & SCOPES\n // ============================================================================\n\n validate(options?: BitValidationOptions): Promise<boolean> {\n return this.validatorMg.validate(options);\n }\n\n emitBeforeValidate(event: BitBeforeValidateEvent<T>): Promise<void> {\n return this.pluginMg.beforeValidate(event);\n }\n\n emitAfterValidate(event: BitAfterValidateEvent<T>): Promise<void> {\n return this.pluginMg.afterValidate(event);\n }\n\n emitBeforeSubmit(event: BitBeforeSubmitEvent<T>): Promise<void> {\n return this.pluginMg.beforeSubmit(event);\n }\n\n emitAfterSubmit(event: BitAfterSubmitEvent<T>): Promise<void> {\n return this.pluginMg.afterSubmit(event);\n }\n\n emitFieldChange(event: BitFieldChangeEvent<T>) {\n this.pluginMg.onFieldChange(event);\n }\n\n emitOperationalError(event: {\n source: \"submit\";\n error: unknown;\n payload?: unknown;\n }) {\n return this.pluginMg.reportError(event.source, event.error, event.payload);\n }\n\n hasValidationsInProgress(scopeFields?: string[]): boolean {\n return this.validatorMg.hasValidationsInProgress(scopeFields);\n }\n\n beginFieldValidation(path: string) {\n this.validatorMg.beginExternalValidation(path);\n }\n\n endFieldValidation(path: string) {\n this.validatorMg.endExternalValidation(path);\n }\n\n setFieldAsyncError(path: string, message: string | undefined) {\n return this.validatorMg.setExternalError(path, message);\n }\n\n clearFieldAsyncError(path: string) {\n return this.validatorMg.setExternalError(path, undefined);\n }\n\n triggerValidation(scopeFields?: string[]) {\n this.validatorMg.trigger(scopeFields);\n }\n\n getStepStatus(scopeName: string) {\n return this.scopeMg.getStepStatus(scopeName);\n }\n\n getStepErrors(scopeName: string): Record<string, string> {\n return this.scopeMg.getStepErrors(scopeName);\n }\n\n updateDependencies(changedPath: string, newValues: T): string[] {\n return this.depsMg.updateDependencies(changedPath, newValues);\n }\n\n isFieldHidden(path: string): boolean {\n return this.depsMg.isHidden(path);\n }\n\n evaluateAllDependencies(values: T): void {\n this.depsMg.evaluateAll(values);\n }\n\n getHiddenFields(): string[] {\n return Array.from(this.depsMg.hiddenFields);\n }\n\n getRequiredErrors(values: T): BitErrors<T> {\n return this.depsMg.getRequiredErrors(values);\n }\n\n clearFieldValidation(path: string): void {\n this.validatorMg.clear(path);\n }\n\n handleFieldAsyncValidation(path: string, value: any): void {\n this.validatorMg.handleAsync(path, value);\n }\n\n cancelAllValidations(): void {\n this.validatorMg.cancelAll();\n }\n\n validateNow(options?: BitValidationOptions): Promise<boolean> {\n return this.validatorMg.validate(options);\n }\n\n updateDirtyForPath(path: string, nextValues: T, baselineValues: T): boolean {\n return this.dirtyMg.updateForPath(path, nextValues, baselineValues);\n }\n\n rebuildDirtyState(nextValues: T, baselineValues: T): boolean {\n return this.dirtyMg.rebuild(nextValues, baselineValues);\n }\n\n clearDirtyState(): void {\n this.dirtyMg.clear();\n }\n\n buildDirtyValues(values: T): Partial<T> {\n return this.dirtyMg.buildDirtyValues(values);\n }\n\n resetHistory(initialValues: T): void {\n this.historyMg.reset(initialValues);\n }\n\n // ============================================================================\n // INTERNAL OPERATIONS\n // ============================================================================\n\n internalUpdateState(partialState: Partial<BitState<T>>) {\n const previousState = this.state;\n let nextState = { ...this.state, ...partialState };\n\n if (partialState.values) {\n nextState.values = this.computedMg.apply(partialState.values);\n }\n\n if (partialState.errors) {\n nextState.isValid = Object.keys(nextState.errors).length === 0;\n }\n\n this.state = nextState;\n\n if (partialState.values) {\n this.persistMg.queueSave();\n }\n\n this.notify(previousState, nextState);\n\n bitBus.dispatch(this.storeId, this.state);\n }\n\n internalSaveSnapshot() {\n this.historyMg.saveSnapshot(this.state.values);\n }\n\n private applyPersistedValues(values: Partial<T>) {\n const nextValues = deepClone({\n ...this.config.initialValues,\n ...values,\n } as T);\n\n this.validatorMg.cancelAll();\n this.depsMg.evaluateAll(nextValues);\n\n const isDirty = this.dirtyMg.rebuild(nextValues, this.config.initialValues);\n\n this.internalUpdateState({\n values: nextValues,\n errors: {},\n touched: {},\n isValidating: {},\n isValid: true,\n isDirty,\n isSubmitting: false,\n });\n\n this.internalSaveSnapshot();\n this.validatorMg.validate();\n }\n\n cleanup() {\n this.listeners.clear();\n this.selectorListeners.clear();\n this.validatorMg.cancelAll();\n this.devtoolsMg.destroy();\n this.persistMg.destroy();\n this.pluginMg.destroy();\n\n delete bitBus.stores[this.storeId];\n }\n\n private notify(\n previousState: BitState<T> = this.state,\n nextState: BitState<T> = this.state,\n ) {\n this.listeners.forEach((listener) => listener());\n\n this.selectorListeners.forEach((subscription) => {\n subscription.notify(nextState);\n });\n }\n}\n","import { BitStore } from \"./index\";\nimport { BitConfig } from \"./types\";\nimport { BitStoreApi } from \"./public-types\";\n\nexport function createBitStore<T extends object = any>(\n config: BitConfig<T> = {},\n): BitStoreApi<T> {\n const engine = new BitStore<T>(config);\n\n return {\n get config() {\n return engine.config;\n },\n\n getConfig: () => engine.getConfig(),\n getState: () => engine.getState(),\n getFieldState: engine.getFieldState.bind(engine),\n subscribe: engine.subscribe.bind(engine),\n subscribePath: engine.subscribePath.bind(engine),\n subscribeSelector: engine.subscribeSelector.bind(engine),\n\n setField: engine.setField.bind(engine),\n blurField: engine.blurField.bind(engine),\n replaceValues: engine.replaceValues.bind(engine),\n hydrate: engine.hydrate.bind(engine),\n rebase: engine.rebase.bind(engine),\n setValues: engine.setValues.bind(engine),\n\n setError: engine.setError.bind(engine),\n setErrors: engine.setErrors.bind(engine),\n setServerErrors: engine.setServerErrors.bind(engine),\n\n validate: engine.validate.bind(engine),\n reset: engine.reset.bind(engine),\n submit: engine.submit.bind(engine),\n\n registerMask: engine.registerMask.bind(engine),\n getDirtyValues: engine.getDirtyValues.bind(engine),\n restorePersisted: engine.restorePersisted.bind(engine),\n forceSave: engine.forceSave.bind(engine),\n clearPersisted: engine.clearPersisted.bind(engine),\n\n registerField: engine.registerField.bind(engine),\n unregisterField: engine.unregisterField.bind(engine),\n unregisterPrefix: engine.unregisterPrefix.bind(engine),\n\n isHidden: engine.isHidden.bind(engine),\n isRequired: engine.isRequired.bind(engine),\n isFieldDirty: engine.isFieldDirty.bind(engine),\n isFieldValidating: engine.isFieldValidating.bind(engine),\n watch: engine.watch.bind(engine),\n\n pushItem: engine.pushItem.bind(engine),\n prependItem: engine.prependItem.bind(engine),\n insertItem: engine.insertItem.bind(engine),\n removeItem: engine.removeItem.bind(engine),\n moveItem: engine.moveItem.bind(engine),\n swapItems: engine.swapItems.bind(engine),\n\n getHistoryMetadata: engine.getHistoryMetadata.bind(engine),\n undo: engine.undo.bind(engine),\n redo: engine.redo.bind(engine),\n\n getStepStatus: engine.getStepStatus.bind(engine),\n getStepErrors: engine.getStepErrors.bind(engine),\n markFieldsTouched: engine.markFieldsTouched.bind(engine),\n hasValidationsInProgress: engine.hasValidationsInProgress.bind(engine),\n beginFieldValidation: engine.beginFieldValidation.bind(engine),\n endFieldValidation: engine.endFieldValidation.bind(engine),\n setFieldAsyncError: engine.setFieldAsyncError.bind(engine),\n clearFieldAsyncError: engine.clearFieldAsyncError.bind(engine),\n resolveMask: engine.resolveMask.bind(engine),\n getScopeFields: engine.getScopeFields.bind(engine),\n\n cleanup: engine.cleanup.bind(engine),\n };\n}\n","import { bitBus } from \"bit-form/core\";\n\nconst formatStoreState = (instance: any) => {\n const cleanState =\n typeof instance.getState === \"function\" ? instance.getState() : instance;\n\n const historyMeta = instance?.getHistoryMetadata?.() || {\n canUndo: false,\n canRedo: false,\n historyIndex: -1,\n historySize: 0,\n };\n\n return {\n ...cleanState,\n _meta: {\n canUndo: historyMeta.canUndo,\n canRedo: historyMeta.canRedo,\n totalSteps: historyMeta.historySize,\n currentIndex: historyMeta.historyIndex,\n },\n };\n};\n\nlet activeBridgeCleanup: (() => void) | null = null;\n\nexport function setupRemoteBridge(url: string) {\n if (activeBridgeCleanup) {\n console.warn(\n \"[bit-form] Reiniciando ponte do DevTools (Fast Refresh detectado).\",\n );\n activeBridgeCleanup();\n }\n\n let socket: WebSocket | null = null;\n let unsubscribeBus: (() => void) | null = null;\n let heartbeatInterval: ReturnType<typeof setInterval>;\n let isIntentionalDisconnect = false;\n\n const connect = () => {\n isIntentionalDisconnect = false;\n socket = new WebSocket(url);\n\n socket.onopen = () => {\n console.log(\"[bit-form] 🔌 Conectado ao CLI DevTools via WebSocket.\");\n\n const storesEntries = Object.entries(bitBus.stores);\n if (storesEntries.length > 0) {\n const initialState = storesEntries.reduce(\n (acc, [id, store]) => {\n acc[id] = formatStoreState(store);\n return acc;\n },\n {} as Record<string, any>,\n );\n\n socket?.send(\n JSON.stringify({ type: \"STATE_UPDATE\", payload: initialState }),\n );\n }\n\n unsubscribeBus = bitBus.subscribe((storeId, _newState) => {\n if (socket?.readyState === WebSocket.OPEN) {\n const storeInstance = bitBus.stores[storeId];\n if (storeInstance) {\n socket.send(\n JSON.stringify({\n type: \"STATE_UPDATE\",\n payload: { [storeId]: formatStoreState(storeInstance) },\n }),\n );\n }\n }\n });\n\n heartbeatInterval = setInterval(() => {\n if (socket?.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify({ type: \"PING\" }));\n }\n }, 30000);\n };\n\n socket.onmessage = (event) => {\n try {\n const message = JSON.parse(event.data) as {\n type?: unknown;\n payload?: unknown;\n };\n\n if (message.type === \"ACTION\") {\n const payload = message.payload as {\n storeId?: unknown;\n action?: unknown;\n };\n const storeId = payload.storeId;\n const action = payload.action;\n\n if (typeof storeId !== \"string\" || typeof action !== \"string\") {\n return;\n }\n\n const store = bitBus.stores[storeId];\n\n if (!store || typeof store !== \"object\") {\n return;\n }\n\n const method = (store as Record<string, unknown>)[action];\n if (typeof method === \"function\") {\n (method as () => void).call(store);\n }\n }\n } catch (e) {\n console.warn(\"[bit-form] Erro ao processar comando do CLI:\", e);\n }\n };\n\n socket.onclose = () => {\n if (unsubscribeBus) unsubscribeBus();\n clearInterval(heartbeatInterval);\n\n if (!isIntentionalDisconnect) {\n console.log(\"[bit-form] Conexão perdida. Reconectando em 3s...\");\n setTimeout(connect, 3000);\n } else {\n console.log(\"[bit-form] Ponte antiga encerrada com sucesso.\");\n }\n };\n };\n\n connect();\n\n const cleanup = () => {\n isIntentionalDisconnect = true;\n\n if (unsubscribeBus) unsubscribeBus();\n clearInterval(heartbeatInterval);\n if (\n socket &&\n (socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING)\n ) {\n socket.close();\n }\n activeBridgeCleanup = null;\n };\n\n activeBridgeCleanup = cleanup;\n\n return cleanup;\n}\n"],"mappings":"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","names":["rootGlobal","id","state","fn","bitBus","deepClone","obj","item","clone","key","deepMerge","target","source","base","sourceValue","baseValue","valueEqual","a","b","deepEqual","keysA","keysB","collectDirtyPaths","initial","prefix","result","allKeys","k","p","pathCache","getDeepValue","path","keys","current","setDeepValue","value","i","nextKey","isNextNumeric","currentValue","cleanPrefixedKeys","newObj","prefixWithDot","shiftKeys","removedIndex","parts","currentIdx","rest","newIdx","newKey","swapKeys","indexA","indexB","moveKeys","from","to","isValidationErrorShape","x","v","extractServerErrors","tokens","unmask","value","allowChars","stringValue","isNegative","escapedChars","regex","clean","unmaskCurrency","precision","digits","numberValue","createPatternMask","pattern","options","getRawLength","p","c","stringVal","sortedPatterns","a","b","activePattern","masked","valueIndex","showGuide","placeholder","i","patternChar","token","dataChar","formatted","escapedPlaceholder","placeholderRegex","createCurrencyMask","prefix","suffix","thousand","decimal","allowNegative","saveRaw","formatFn","integerPart","decimalPart","formattedInteger","numericValue","finalNumber","createCreditCardMask","getCardPattern","rawValue","createDateMask","config","isISO","baseMask","day","month","year","d","m","safeString","maskBRL","createCurrencyMask","maskUSD","maskEUR","maskGBP","maskJPY","maskPercent","maskDecimal","maskInteger","maskCPF","createPatternMask","maskCNPJ","maskPhone","maskLandline","maskCEP","maskDate","createDateMask","val","cleanVal","parts","maskTime","maskCNH","maskRG","maskUSPhone","maskZipCode","maskDateUS","maskSSN","maskCreditCard","createCreditCardMask","maskCVV","maskDateISO","maskMacAddress","maskColorHex","maskIPv4","maskIPv6","maskIBAN","bitMasks","maskBRL","maskUSD","maskEUR","maskGBP","maskJPY","maskCPF","maskCNPJ","maskRG","maskCEP","maskCNH","maskPhone","maskLandline","maskDate","maskTime","maskIPv4","maskIPv6","maskMacAddress","maskColorHex","maskCreditCard","maskCVV","maskPercent","maskDecimal","maskInteger","normalizeConfig","config","rawInitial","validation","history","defaultPersistKey","persist","raw","deepClone","bitMasks","BitDependencyManager","path","config","currentValues","dependsOn","dep","values","errors","val","getDeepValue","_","changedPath","newValues","toggledFields","queue","visited","currentPath","dependents","depPath","wasHidden","isHiddenNow","dependentsSet","prefix","pathsToRemove","showIf","value","BitHistoryManager","enableHistory","maxHistory","values","currentSnapshot","deepEqual","deepClone","initialValues","BitArrayManager","store","path","value","arr","getDeepValue","index","state","previousArray","newArray","_","i","newValues","setDeepValue","isDirty","shiftKeys","indexA","indexB","swapKeys","from","to","item","moveKeys","BitComputedManager","_BitComputedManager","getComputedEntries","values","computedEntries","nextValues","maxPasses","changedInThisPass","path","computeFn","newValue","currentValue","getDeepValue","deepEqual","setDeepValue","BitValidationManager","store","path","isValidating","message","newErrors","value","config","asyncValidate","delay","currentRequestId","errorMessage","scopeFields","state","field","options","validationId","currentState","targetFields","allErrors","dynamicRequiredErrors","hiddenPath","isValid","result","f","BitLifecycleManager","store","path","value","meta","state","previousValue","getDeepValue","newValues","setDeepValue","newErrors","depPath","isDirty","origin","previousValues","clonedValues","deepClone","values","mergedValues","deepMerge","onSuccess","valuesToSubmit","hiddenPath","transformer","currentVal","dirtyValues","error","currentErrors","newTouched","initialCloned","getDevToolsCSS","BitFormDevToolsUI","container","actions","style","getDevToolsCSS","e","target","btn","action","storeId","storesState","storeEntries","panelHtml","id","state","hasErrors","meta","currentStep","totalSteps","triggerHtml","setupLocalDevTools","container","ui","BitFormDevToolsUI","id","bitBus","getFullSnapshot","states","instance","storeInstance","state","historyMeta","unsubscribe","setupRemoteDevTools","container","url","socket","ui","BitFormDevToolsUI","id","sendMessage","type","payload","msg","data","e","err","initDevTools","options","mode","url","containerEl","isAutoCreated","el","adapterInstance","setupLocalDevTools","setupRemoteDevTools","BitDevtoolsManager","store","devTools","options","url","setupRemoteBridge","instance","initDevTools","BitDirtyManager","path","values","initialValues","p","current","getDeepValue","initial","valueEqual","collectDirtyPaths","result","processedArrays","arrayMatch","arrayPath","obj","keys","key","value","i","BitScopeManager","getState","getInitialValues","getScopeFields","scopeName","fields","state","hasErrors","f","isDirty","current","getDeepValue","initial","valueEqual","errors","result","field","error","BitFieldQueryManager","depsMg","getState","getConfig","path","currentValue","getDeepValue","initialValue","valueEqual","BitErrorManager","getState","internalUpdateState","path","message","newErrors","errors","serverErrors","formattedErrors","key","value","getDefaultStorage","storageLike","key","value","BitPersistManager","config","getValues","getDirtyValues","applyRestoredValues","error","storage","payload","serialized","deepClone","raw","parsed","BitPluginManager","plugins","contextFactory","plugin","maybeTeardown","error","event","hook","result","source","pluginName","context","payload","onError","index","teardown","hookName","BitStore","config","normalizeConfig","BitDependencyManager","BitComputedManager","BitValidationManager","BitDirtyManager","BitLifecycleManager","BitHistoryManager","BitArrayManager","BitDevtoolsManager","BitScopeManager","scopeName","BitFieldQueryManager","BitErrorManager","partial","BitPersistManager","values","initialValues","deepClone","path","fieldConfig","valuesWithComputeds","BitPluginManager","bitBus","result","cfg","maskOption","getDeepValue","newErrors","newTouched","stateChanged","prefix","listener","selector","options","equalityFn","valueEqual","lastSlice","subscription","nextState","nextSlice","state","callback","deepEqual","value","meta","paths","newValues","message","errors","serverErrors","onSuccess","name","mask","index","indexA","indexB","from","to","prevState","isDirty","event","scopeFields","changedPath","nextValues","baselineValues","partialState","previousState","createBitStore","config","engine","BitStore","formatStoreState","instance","cleanState","historyMeta","activeBridgeCleanup","setupRemoteBridge","url","socket","unsubscribeBus","heartbeatInterval","isIntentionalDisconnect","connect","storesEntries","bitBus","initialState","acc","id","store","storeId","_newState","storeInstance","event","message","payload","action","method","e","cleanup"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{e as D,f as V,i as w,j as R}from"./chunk-6FJEE6O3.js";import{createContext as H,useContext as U}from"react";import{jsx as L}from"react/jsx-runtime";var k=H(null),at=({store:t,children:e})=>L(k.Provider,{value:t,children:e}),g=()=>{let t=U(k);if(!t)throw new Error("BitForm hooks devem ser usados dentro de um BitFormProvider");return t};import{useCallback as y,useSyncExternalStore as W,useMemo as _,useRef as $,useState as A}from"react";function St(){let t=g(),[e,s]=A(null),[m,n]=A(null),o=$(null),u=y(()=>{let p=t.getState(),b={isValid:p.isValid,isDirty:p.isDirty,isSubmitting:p.isSubmitting};return o.current&&o.current.isValid===b.isValid&&o.current.isDirty===b.isDirty&&o.current.isSubmitting===b.isSubmitting?o.current:(o.current=b,b)},[t]),c=y(p=>t.subscribeSelector(b=>({isValid:b.isValid,isDirty:b.isDirty,isSubmitting:b.isSubmitting}),()=>p()),[t]),i=W(c,u,u),r=y(p=>b=>(b?.preventDefault?.(),t.submit(p)),[t]),a=y(p=>b=>(b?.preventDefault?.(),s(null),t.submit(async(O,q)=>{try{let h=await p(O,q);n(h),s(null)}catch(h){w(h)?t.setServerErrors(R(h)):s(h instanceof Error?h:new Error(String(h)))}})),[t]),l=y(()=>{t.reset(),s(null),n(null)},[t]),d=y(()=>t.getState().values,[t]),B=y(()=>t.getState().errors,[t]),F=y(()=>t.getState().touched,[t]),S=y(()=>t.getDirtyValues(),[t]);return{meta:_(()=>({...i,submitError:e,lastResponse:m}),[i,e,m]),getValues:d,getErrors:B,getTouched:F,getDirtyValues:S,submit:r,onSubmit:a,reset:l,setField:t.setField.bind(t),blurField:t.blurField.bind(t),replaceValues:t.replaceValues.bind(t),hydrate:t.hydrate.bind(t),rebase:t.rebase.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),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)}}}import{useCallback as M,useSyncExternalStore as z,useState as G,useMemo as j,useEffect as J}from"react";var P=()=>Math.random().toString(36).substring(2,9);function Bt(t){let e=g(),s=M(()=>{let r=e.getState(),a=V(r.values,t);return Array.isArray(a)?a:[]},[e,t]),m=M(r=>e.subscribePath(t,()=>r()),[e,t]),n=z(m,s,s),[o,u]=G(()=>n.map(P));J(()=>{n.length!==o.length&&u(r=>{if(n.length>r.length){let a=n.length-r.length;return[...r,...Array(a).fill(null).map(P)]}return r.slice(0,n.length)})},[n.length]);let c=j(()=>({append:r=>{u(a=>[...a,P()]),e.pushItem(t,r)},prepend:r=>{u(a=>[P(),...a]),e.prependItem(t,r)},insert:(r,a)=>{u(l=>{let d=[...l];return d.splice(r,0,P()),d}),e.insertItem(t,r,a)},remove:r=>{u(a=>a.filter((l,d)=>d!==r)),e.removeItem(t,r)},move:(r,a)=>{u(l=>{let d=[...l],[B]=d.splice(r,1);return d.splice(a,0,B),d}),e.moveItem(t,r,a)},swap:(r,a)=>{u(l=>{let d=[...l];return[d[r],d[a]]=[d[a],d[r]],d}),e.swapItems(t,r,a)},replace:r=>{u(r.map(P)),e.setField(t,r)},clear:()=>{u([]),e.setField(t,[])}}),[e,t]);return{fields:j(()=>n.map((r,a)=>({key:o[a]||`temp-${a}`,value:r,index:a})),[n,o]),length:n.length,...c}}import{useCallback as T,useSyncExternalStore as K,useRef as Q}from"react";function Tt(t){let e=g(),s=Q(null),m=T(()=>{let c=e.getStepStatus(t);return s.current&&s.current.hasErrors===c.hasErrors&&s.current.isDirty===c.isDirty&&Object.keys(s.current.errors).length===Object.keys(c.errors).length&&Object.entries(c.errors).every(([i,r])=>s.current.errors[i]===r)?s.current:(s.current=c,c)},[e,t]),n=K(e.subscribe.bind(e),m,m),o=T(async()=>{let c=await e.validate({scope:t}),i=e.getStepErrors(t);return{valid:c,errors:i}},[e,t]),u=T(()=>e.getStepErrors(t),[e,t]);return{scopeName:t,status:n,errors:n.errors,validate:o,getErrors:u,isValid:!n.hasErrors,isDirty:n.isDirty}}import{useCallback as v,useSyncExternalStore as X,useRef as Y,useState as Z}from"react";function wt(t){let e=g(),[s,m]=Z(0),n=t[s]??"",o=Y(null),u=v(()=>{let S=e.getStepStatus(n);return o.current&&o.current.hasErrors===S.hasErrors&&o.current.isDirty===S.isDirty&&Object.keys(o.current.errors).length===Object.keys(S.errors).length&&Object.entries(S.errors).every(([f,p])=>o.current.errors[f]===p)?o.current:(o.current=S,S)},[e,n]),c=X(e.subscribe.bind(e),u,u),i=v(async()=>{let S=await e.validate({scope:n}),f=e.getStepErrors(n);return{valid:S,errors:f}},[e,n]),r=v(()=>e.getStepErrors(n),[e,n]),a=v(async()=>{let S=e.getScopeFields(n);if(e.hasValidationsInProgress(S))return!1;let f=await e.validate({scope:n});if(f)m(p=>Math.min(p+1,t.length-1));else{let p=e.getStepErrors(n),b=Object.keys(p);b.length>0&&e.markFieldsTouched(b)}return f},[e,n,t.length]),l=v(()=>{m(S=>Math.max(S-1,0))},[]),d=v(S=>{m(Math.max(0,Math.min(S-1,t.length-1)))},[t.length]),B=s===0,F=s>=t.length-1;return{step:s+1,stepIndex:s,scope:n,next:a,prev:l,goTo:d,isFirst:B,isLast:F,status:c,errors:c.errors,isValid:!c.hasErrors,isDirty:c.isDirty,validate:i,getErrors:r}}import{useCallback as C,useSyncExternalStore as N,useRef as tt}from"react";function Ot(t){let e=g(),s=tt(null),m=C(()=>{let o=V(e.getState().values,t);return s.current!==null&&D(s.current,o)?s.current:(s.current=o,o)},[e,t]),n=C(o=>e.subscribe(o),[e]);return N(n,m,m)}import{useCallback as I,useMemo as et,useState as x}from"react";function Lt(){let t=g(),[e,s]=x(!1),[m,n]=x(!1),[o,u]=x(null),c=I(async()=>{n(!0),u(null);try{return await t.restorePersisted()}catch(l){return u(l instanceof Error?l:new Error(String(l))),!1}finally{n(!1)}},[t]),i=I(async()=>{s(!0),u(null);try{await t.forceSave()}catch(l){u(l instanceof Error?l:new Error(String(l)))}finally{s(!1)}},[t]),r=I(async()=>{u(null);try{await t.clearPersisted()}catch(l){u(l instanceof Error?l:new Error(String(l)))}},[t]),a=et(()=>({isSaving:e,isRestoring:m,error:o}),[e,m,o]);return{restore:c,save:i,clear:r,meta:a}}import{useCallback as E,useSyncExternalStore as rt,useRef as st,useEffect as nt}from"react";function zt(t){let e=g(),s=st(null);nt(()=>()=>{e.unregisterField&&e.unregisterField(t)},[e,t]);let m=E(()=>{let i=e.getFieldState(t);if(s.current&&s.current.value===i.value&&s.current.error===i.error&&s.current.touched===i.touched&&s.current.isHidden===i.isHidden&&s.current.isRequired===i.isRequired&&s.current.isDirty===i.isDirty&&s.current.isValidating===i.isValidating)return s.current;let r={value:i.value,error:i.error,touched:i.touched,isHidden:i.isHidden,isRequired:i.isRequired,isDirty:i.isDirty,isValidating:i.isValidating};return s.current=r,r},[e,t]),n=E(i=>e.subscribeSelector(()=>e.getFieldState(t),()=>i()),[e,t]),o=rt(n,m,m),u=E(i=>e.setField(t,i),[e,t]),c=E(()=>e.blurField(t),[e,t]);return{fieldState:o,setValue:u,setBlur:c,store:e}}export{at as a,g as b,St as c,zt as d,Bt as e,Tt as f,wt as g,Ot as h,Lt as i};
|
|
2
|
+
//# sourceMappingURL=chunk-FOV24ACZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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-persist.ts","../src/react/use-bit-field-base.ts"],"sourcesContent":["import React, { createContext, useContext } from \"react\";\nimport type { BitStoreApi } from \"../core\";\n\nconst BitContext = createContext<BitStoreApi<any> | null>(null);\n\nexport const BitFormProvider = ({\n store,\n children,\n}: {\n store: BitStoreApi<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 BitStoreApi<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 const lastMeta = useRef<{\n isValid: boolean;\n isDirty: boolean;\n isSubmitting: boolean;\n } | null>(null);\n\n const getMetaSnapshot = useCallback(() => {\n const state = store.getState();\n const nextMeta = {\n isValid: state.isValid,\n isDirty: state.isDirty,\n isSubmitting: state.isSubmitting,\n };\n\n if (\n lastMeta.current &&\n lastMeta.current.isValid === nextMeta.isValid &&\n lastMeta.current.isDirty === nextMeta.isDirty &&\n lastMeta.current.isSubmitting === nextMeta.isSubmitting\n ) {\n return lastMeta.current;\n }\n\n lastMeta.current = nextMeta;\n return nextMeta;\n }, [store]);\n\n const subscribeMeta = useCallback(\n (cb: () => void) =>\n store.subscribeSelector(\n (state) => ({\n isValid: state.isValid,\n isDirty: state.isDirty,\n isSubmitting: state.isSubmitting,\n }),\n () => cb(),\n ),\n [store],\n );\n\n const metaState = useSyncExternalStore(\n subscribeMeta,\n getMetaSnapshot,\n getMetaSnapshot,\n );\n\n const submit = useCallback(\n (\n onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>,\n ) => {\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, dirtyValues?: Partial<T>) => Promise<unknown>) => {\n return (e?: { preventDefault: () => void }) => {\n e?.preventDefault?.();\n setSubmitError(null);\n\n return store.submit(async (values, dirtyValues) => {\n try {\n const result = await handler(values, dirtyValues);\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 const getDirtyValues = useCallback(() => store.getDirtyValues(), [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 getDirtyValues,\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 replaceValues: store.replaceValues.bind(store),\n hydrate: store.hydrate.bind(store),\n rebase: store.rebase.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 // 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 };\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 subscribeArray = useCallback(\n (cb: () => void) => store.subscribePath(path, () => cb()),\n [store, path],\n );\n\n const data = useSyncExternalStore(subscribeArray, getSnapshot, getSnapshot);\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(\n path as unknown as BitPath<TForm>,\n items as unknown as BitPathValue<TForm, BitPath<TForm>>,\n );\n },\n clear: () => {\n setIds([]);\n store.setField(\n path as unknown as BitPath<TForm>,\n [] as unknown as BitPathValue<TForm, BitPath<TForm>>,\n );\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\";\nimport type { UseBitStepsResult } from \"./types\";\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 scopeFields = store.getScopeFields(scope);\n\n if (store.hasValidationsInProgress(scopeFields)) {\n return false;\n }\n\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(\n (targetStep: number) => {\n setStepIndex(\n Math.max(0, Math.min(targetStep - 1, scopeNames.length - 1)),\n );\n },\n [scopeNames.length],\n );\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, useMemo, useState } from \"react\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitPersistResult } from \"./types\";\n\nexport function useBitPersist(): UseBitPersistResult {\n const store = useBitStore<any>();\n const [isSaving, setIsSaving] = useState(false);\n const [isRestoring, setIsRestoring] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const restore = useCallback(async () => {\n setIsRestoring(true);\n setError(null);\n\n try {\n return await store.restorePersisted();\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n return false;\n } finally {\n setIsRestoring(false);\n }\n }, [store]);\n\n const save = useCallback(async () => {\n setIsSaving(true);\n setError(null);\n\n try {\n await store.forceSave();\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsSaving(false);\n }\n }, [store]);\n\n const clear = useCallback(async () => {\n setError(null);\n\n try {\n await store.clearPersisted();\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n }\n }, [store]);\n\n const meta = useMemo(\n () => ({\n isSaving,\n isRestoring,\n error,\n }),\n [isSaving, isRestoring, error],\n );\n\n return {\n restore,\n save,\n clear,\n meta,\n };\n}\n","import { useCallback, useSyncExternalStore, useRef, useEffect } from \"react\";\nimport { useBitStore } from \"./context\";\nimport { 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) {\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 return () => {\n if (store.unregisterField) {\n store.unregisterField(path);\n }\n };\n }, [store, path]);\n\n const getSnapshot = useCallback(() => {\n const nextState = store.getFieldState(path);\n\n if (\n lastState.current &&\n lastState.current.value === nextState.value &&\n lastState.current.error === nextState.error &&\n lastState.current.touched === nextState.touched &&\n lastState.current.isHidden === nextState.isHidden &&\n lastState.current.isRequired === nextState.isRequired &&\n lastState.current.isDirty === nextState.isDirty &&\n lastState.current.isValidating === nextState.isValidating\n ) {\n return lastState.current;\n }\n\n const newState = {\n value: nextState.value,\n error: nextState.error,\n touched: nextState.touched,\n isHidden: nextState.isHidden,\n isRequired: nextState.isRequired,\n isDirty: nextState.isDirty,\n isValidating: nextState.isValidating,\n };\n lastState.current = newState;\n return newState;\n }, [store, path]);\n\n const subscribe = useCallback(\n (cb: () => void) =>\n store.subscribeSelector(\n () => store.getFieldState(path),\n () => cb(),\n ),\n [store, path],\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","nextMeta","subscribeMeta","cb","metaState","useSyncExternalStore","submit","onSuccess","e","onSubmit","handler","values","dirtyValues","result","err","isValidationErrorShape","extractServerErrors","reset","getValues","getErrors","getTouched","getDirtyValues","useMemo","useCallback","useSyncExternalStore","useState","useMemo","useEffect","generateId","useBitArray","path","store","useBitStore","getSnapshot","useCallback","state","value","getDeepValue","subscribeArray","cb","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","scopeFields","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","useMemo","useState","useBitPersist","store","useBitStore","isSaving","setIsSaving","useState","isRestoring","setIsRestoring","error","setError","restore","useCallback","err","save","clear","meta","useMemo","useCallback","useSyncExternalStore","useRef","useEffect","useBitFieldBase","path","store","useBitStore","lastState","useRef","useEffect","getSnapshot","useCallback","nextState","newState","subscribe","cb","fieldState","useSyncExternalStore","setValue","val","setBlur"]}
|