@lehnihon/bit-form 1.0.2 → 1.0.7
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 +39 -0
- package/dist/angular/index.cjs +1 -1
- package/dist/angular/index.cjs.map +1 -1
- package/dist/angular/index.d.cts +2 -2
- package/dist/angular/index.d.ts +2 -2
- package/dist/angular/index.js +1 -1
- package/dist/{bus-DAwKIiMY.d.cts → bus-DkMkzOXE.d.cts} +4 -6
- package/dist/{bus-DAwKIiMY.d.ts → bus-DkMkzOXE.d.ts} +4 -6
- package/dist/{chunk-Z6ITPS2B.cjs → chunk-6ISGLRK2.cjs} +2 -2
- package/dist/chunk-6ISGLRK2.cjs.map +1 -0
- package/dist/{chunk-6VDQSKUN.cjs → chunk-J3EGU5ZH.cjs} +6 -6
- package/dist/chunk-J3EGU5ZH.cjs.map +1 -0
- package/dist/{chunk-UFYHEI6S.js → chunk-OA4FCEV2.js} +2 -2
- package/dist/{chunk-KA4FAGIX.js → chunk-QU365SAC.js} +6 -6
- package/dist/chunk-QU365SAC.js.map +1 -0
- package/dist/devtools/bridge.cjs +1 -1
- package/dist/devtools/bridge.cjs.map +1 -1
- package/dist/devtools/bridge.js +1 -1
- package/dist/devtools/index.cjs +1 -1
- package/dist/devtools/index.cjs.map +1 -1
- package/dist/devtools/index.js +1 -1
- package/dist/{index-CPKnWBVv.d.ts → index-BXaNeJBk.d.ts} +1 -1
- package/dist/{index-BD_l3aH5.d.cts → index-mzR_3Kbx.d.cts} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +4 -4
- package/dist/react/index.d.ts +4 -4
- package/dist/react/index.js +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 +4 -4
- package/dist/react-native/index.d.ts +4 -4
- package/dist/react-native/index.js +1 -1
- package/dist/resolvers/joi.cjs.map +1 -1
- package/dist/resolvers/joi.d.cts +1 -1
- package/dist/resolvers/joi.d.ts +1 -1
- package/dist/resolvers/yup.cjs.map +1 -1
- package/dist/resolvers/yup.d.cts +1 -1
- package/dist/resolvers/yup.d.ts +1 -1
- package/dist/resolvers/zod.cjs.map +1 -1
- package/dist/resolvers/zod.d.cts +1 -1
- package/dist/resolvers/zod.d.ts +1 -1
- package/dist/{use-bit-watch-CoCFwS-F.d.ts → use-bit-watch-DEYCmgNf.d.ts} +2 -2
- package/dist/{use-bit-watch-BSWy9rG7.d.cts → use-bit-watch-wjK9PF7w.d.cts} +2 -2
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.d.cts +2 -2
- package/dist/vue/index.d.ts +2 -2
- package/dist/vue/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-6VDQSKUN.cjs.map +0 -1
- package/dist/chunk-KA4FAGIX.js.map +0 -1
- package/dist/chunk-Z6ITPS2B.cjs.map +0 -1
- /package/dist/{chunk-UFYHEI6S.js.map → chunk-OA4FCEV2.js.map} +0 -0
package/dist/resolvers/joi.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ObjectSchema } from 'joi';
|
|
2
|
-
import { e as BitErrors } from '../bus-
|
|
2
|
+
import { e as BitErrors } from '../bus-DkMkzOXE.cjs';
|
|
3
3
|
|
|
4
4
|
declare const joiResolver: <T extends object>(schema: ObjectSchema<T>) => (values: T, options?: {
|
|
5
5
|
scopeFields?: string[];
|
package/dist/resolvers/joi.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ObjectSchema } from 'joi';
|
|
2
|
-
import { e as BitErrors } from '../bus-
|
|
2
|
+
import { e as BitErrors } from '../bus-DkMkzOXE.js';
|
|
3
3
|
|
|
4
4
|
declare const joiResolver: <T extends object>(schema: ObjectSchema<T>) => (values: T, options?: {
|
|
5
5
|
scopeFields?: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/resolvers/yup.ts"],"names":["yupResolver","schema","values","options","errors","field","err","normalizedPath","ValidationError","error"],"mappings":"AAAA,umBAAwC,IAG3BA,CAAAA,CAAiCC,CAAAA,EACrC,KAAA,CACLC,CAAAA,CACAC,CAAAA,CAAAA,EAC0B,CAC1B,IAAMC,CAAAA,CAAuB,CAAC,CAAA,CAE9B,EAAA,iBAAID,CAAAA,2BAAS,aAAA,EAAeA,CAAAA,CAAQ,WAAA,CAAY,MAAA,CAAS,CAAA,CACvD,OAAA,MAAM,OAAA,CAAQ,GAAA,CACZA,CAAAA,CAAQ,WAAA,CAAY,GAAA,CAAI,MAAOE,CAAAA,EAAU,CACvC,GAAI,CACF,MAAMJ,CAAAA,CAAO,UAAA,CAAWI,CAAAA,CAAOH,CAAM,CACvC,CAAA,KAAA,CAASI,CAAAA,CAAU,CACjB,EAAA,CAAIA,CAAAA,CAAI,IAAA,GAAS,iBAAA,EAAqBA,CAAAA,CAAI,IAAA,CAAM,CAC9C,IAAMC,CAAAA,CAAiBD,CAAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAc,KAAK,CAAA,CAC3DF,CAAAA,CAAOG,CAAc,CAAA,CAAID,CAAAA,CAAI,OAC/B,CACF,CACF,CAAC,CACH,CAAA,CACOF,CAAAA,CAGT,GAAI,CACF,OAAA,MAAMH,CAAAA,CAAO,QAAA,CAASC,CAAAA,CAAQ,CAAE,UAAA,CAAY,CAAA,CAAM,CAAC,CAAA,CAC5C,CAAC,CACV,CAAA,KAAA,CAASI,CAAAA,CAAU,CACjB,OAAIA,CAAAA,CAAI,IAAA,GAAS,iBAAA,EAAqBA,EAAAA,WAAeE,oBAAAA,CAAAA,iBACnDF,CAAAA,qBAAI,KAAA,6BAAO,OAAA,mBAASG,CAAAA,EAAe,CACjC,EAAA,CAAIA,CAAAA,CAAM,IAAA,CAAM,CACd,IAAMF,CAAAA,CAAiBE,CAAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAc,KAAK,CAAA,CACxDL,CAAAA,CAAOG,CAAc,CAAA,EAAA,CACxBH,CAAAA,CAAOG,CAAc,CAAA,CAAIE,CAAAA,CAAM,OAAA,CAEnC,CACF,CAAC,GAAA,CACML,CAAAA,CAAAA,CAEF,CAAC,CACV,CACF,CAAA,CAAA,wBAAA","file":"/
|
|
1
|
+
{"version":3,"sources":["../../src/resolvers/yup.ts"],"names":["yupResolver","schema","values","options","errors","field","err","normalizedPath","ValidationError","error"],"mappings":"AAAA,umBAAwC,IAG3BA,CAAAA,CAAiCC,CAAAA,EACrC,KAAA,CACLC,CAAAA,CACAC,CAAAA,CAAAA,EAC0B,CAC1B,IAAMC,CAAAA,CAAuB,CAAC,CAAA,CAE9B,EAAA,iBAAID,CAAAA,2BAAS,aAAA,EAAeA,CAAAA,CAAQ,WAAA,CAAY,MAAA,CAAS,CAAA,CACvD,OAAA,MAAM,OAAA,CAAQ,GAAA,CACZA,CAAAA,CAAQ,WAAA,CAAY,GAAA,CAAI,MAAOE,CAAAA,EAAU,CACvC,GAAI,CACF,MAAMJ,CAAAA,CAAO,UAAA,CAAWI,CAAAA,CAAOH,CAAM,CACvC,CAAA,KAAA,CAASI,CAAAA,CAAU,CACjB,EAAA,CAAIA,CAAAA,CAAI,IAAA,GAAS,iBAAA,EAAqBA,CAAAA,CAAI,IAAA,CAAM,CAC9C,IAAMC,CAAAA,CAAiBD,CAAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAc,KAAK,CAAA,CAC3DF,CAAAA,CAAOG,CAAc,CAAA,CAAID,CAAAA,CAAI,OAC/B,CACF,CACF,CAAC,CACH,CAAA,CACOF,CAAAA,CAGT,GAAI,CACF,OAAA,MAAMH,CAAAA,CAAO,QAAA,CAASC,CAAAA,CAAQ,CAAE,UAAA,CAAY,CAAA,CAAM,CAAC,CAAA,CAC5C,CAAC,CACV,CAAA,KAAA,CAASI,CAAAA,CAAU,CACjB,OAAIA,CAAAA,CAAI,IAAA,GAAS,iBAAA,EAAqBA,EAAAA,WAAeE,oBAAAA,CAAAA,iBACnDF,CAAAA,qBAAI,KAAA,6BAAO,OAAA,mBAASG,CAAAA,EAAe,CACjC,EAAA,CAAIA,CAAAA,CAAM,IAAA,CAAM,CACd,IAAMF,CAAAA,CAAiBE,CAAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAc,KAAK,CAAA,CACxDL,CAAAA,CAAOG,CAAc,CAAA,EAAA,CACxBH,CAAAA,CAAOG,CAAc,CAAA,CAAIE,CAAAA,CAAM,OAAA,CAEnC,CACF,CAAC,GAAA,CACML,CAAAA,CAAAA,CAEF,CAAC,CACV,CACF,CAAA,CAAA,wBAAA","file":"/home/runner/work/bit-form/bit-form/dist/resolvers/yup.cjs","sourcesContent":["import { ValidationError, Schema } from \"yup\";\nimport { BitErrors } from \"../core\";\n\nexport const yupResolver = <T extends object>(schema: Schema<any>) => {\n return async (\n values: T,\n options?: { scopeFields?: string[] },\n ): Promise<BitErrors<T>> => {\n const errors: BitErrors<T> = {};\n\n if (options?.scopeFields && options.scopeFields.length > 0) {\n await Promise.all(\n options.scopeFields.map(async (field) => {\n try {\n await schema.validateAt(field, values);\n } catch (err: any) {\n if (err.name === \"ValidationError\" && err.path) {\n const normalizedPath = err.path.replace(/\\[(\\d+)\\]/g, \".$1\");\n errors[normalizedPath] = err.message;\n }\n }\n }),\n );\n return errors;\n }\n\n try {\n await schema.validate(values, { abortEarly: false });\n return {};\n } catch (err: any) {\n if (err.name === \"ValidationError\" || err instanceof ValidationError) {\n err.inner?.forEach((error: any) => {\n if (error.path) {\n const normalizedPath = error.path.replace(/\\[(\\d+)\\]/g, \".$1\");\n if (!errors[normalizedPath]) {\n errors[normalizedPath] = error.message;\n }\n }\n });\n return errors;\n }\n return {};\n }\n };\n};\n"]}
|
package/dist/resolvers/yup.d.cts
CHANGED
package/dist/resolvers/yup.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/resolvers/zod.ts"],"names":["zodResolver","schema","values","options","err","errors","issue","path","scopeSet","filtered","key","msg"],"mappings":"AAGO,ilBAAMA,CAAAA,CAAiCC,CAAAA,EACrC,KAAA,CACLC,CAAAA,CACAC,CAAAA,CAAAA,EAC0B,CAC1B,GAAI,CACF,OAAA,MAAMF,CAAAA,CAAO,UAAA,CAAWC,CAAM,CAAA,CACvB,CAAC,CACV,CAAA,KAAA,CAASE,CAAAA,CAAU,CACjB,IAAMC,CAAAA,CAAuB,CAAC,CAAA,CAW9B,EAAA,CATID,CAAAA,CAAI,MAAA,EACNA,CAAAA,CAAI,MAAA,CAAO,OAAA,CAASE,CAAAA,EAAe,CACjC,IAAMC,CAAAA,CAAOD,CAAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,CAC5BC,CAAAA,EAAQ,CAACF,CAAAA,CAAOE,CAAI,CAAA,EAAA,CACtBF,CAAAA,CAAOE,CAAI,CAAA,CAAID,CAAAA,CAAM,OAAA,CAEzB,CAAC,CAAA,iBAGCH,CAAAA,2BAAS,aAAA,EAAeA,CAAAA,CAAQ,WAAA,CAAY,MAAA,CAAS,CAAA,CAAG,CAC1D,IAAMK,CAAAA,CAAW,IAAI,GAAA,CAAIL,CAAAA,CAAQ,WAAW,CAAA,CACtCM,CAAAA,CAAyB,CAAC,CAAA,CAChC,GAAA,CAAA,GAAW,CAACC,CAAAA,CAAKC,CAAG,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQN,CAAM,CAAA,CACxCG,CAAAA,CAAS,GAAA,CAAIE,CAAG,CAAA,EAAKC,CAAAA,EAAAA,CAAKF,CAAAA,CAASC,CAAyB,CAAA,CAAIC,CAAAA,CAAAA,CAEtE,OAAOF,CACT,CAEA,OAAOJ,CACT,CACF,CAAA,CAAA,wBAAA","file":"/
|
|
1
|
+
{"version":3,"sources":["../../src/resolvers/zod.ts"],"names":["zodResolver","schema","values","options","err","errors","issue","path","scopeSet","filtered","key","msg"],"mappings":"AAGO,ilBAAMA,CAAAA,CAAiCC,CAAAA,EACrC,KAAA,CACLC,CAAAA,CACAC,CAAAA,CAAAA,EAC0B,CAC1B,GAAI,CACF,OAAA,MAAMF,CAAAA,CAAO,UAAA,CAAWC,CAAM,CAAA,CACvB,CAAC,CACV,CAAA,KAAA,CAASE,CAAAA,CAAU,CACjB,IAAMC,CAAAA,CAAuB,CAAC,CAAA,CAW9B,EAAA,CATID,CAAAA,CAAI,MAAA,EACNA,CAAAA,CAAI,MAAA,CAAO,OAAA,CAASE,CAAAA,EAAe,CACjC,IAAMC,CAAAA,CAAOD,CAAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,CAC5BC,CAAAA,EAAQ,CAACF,CAAAA,CAAOE,CAAI,CAAA,EAAA,CACtBF,CAAAA,CAAOE,CAAI,CAAA,CAAID,CAAAA,CAAM,OAAA,CAEzB,CAAC,CAAA,iBAGCH,CAAAA,2BAAS,aAAA,EAAeA,CAAAA,CAAQ,WAAA,CAAY,MAAA,CAAS,CAAA,CAAG,CAC1D,IAAMK,CAAAA,CAAW,IAAI,GAAA,CAAIL,CAAAA,CAAQ,WAAW,CAAA,CACtCM,CAAAA,CAAyB,CAAC,CAAA,CAChC,GAAA,CAAA,GAAW,CAACC,CAAAA,CAAKC,CAAG,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQN,CAAM,CAAA,CACxCG,CAAAA,CAAS,GAAA,CAAIE,CAAG,CAAA,EAAKC,CAAAA,EAAAA,CAAKF,CAAAA,CAASC,CAAyB,CAAA,CAAIC,CAAAA,CAAAA,CAEtE,OAAOF,CACT,CAEA,OAAOJ,CACT,CACF,CAAA,CAAA,wBAAA","file":"/home/runner/work/bit-form/bit-form/dist/resolvers/zod.cjs","sourcesContent":["import { ZodSchema } from \"zod\";\nimport { BitErrors } from \"../core\";\n\nexport const zodResolver = <T extends object>(schema: ZodSchema<T>) => {\n return async (\n values: T,\n options?: { scopeFields?: string[] },\n ): Promise<BitErrors<T>> => {\n try {\n await schema.parseAsync(values);\n return {};\n } catch (err: any) {\n const errors: BitErrors<T> = {};\n\n if (err.issues) {\n err.issues.forEach((issue: any) => {\n const path = issue.path.join(\".\");\n if (path && !errors[path]) {\n errors[path] = issue.message;\n }\n });\n }\n\n if (options?.scopeFields && options.scopeFields.length > 0) {\n const scopeSet = new Set(options.scopeFields);\n const filtered: BitErrors<T> = {};\n for (const [key, msg] of Object.entries(errors)) {\n if (scopeSet.has(key) && msg) filtered[key as keyof BitErrors<T>] = msg;\n }\n return filtered;\n }\n\n return errors;\n }\n };\n};\n"]}
|
package/dist/resolvers/zod.d.cts
CHANGED
package/dist/resolvers/zod.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import { B as BitStore } from './index-
|
|
4
|
-
import { k as BitPath, l as BitPathValue, e as BitErrors, B as BitMask, b as BitArrayPath, a as BitArrayItem, n as BitTouched, S as ScopeStatus, V as ValidateScopeResult } from './bus-
|
|
3
|
+
import { B as BitStore } from './index-BXaNeJBk.js';
|
|
4
|
+
import { k as BitPath, l as BitPathValue, e as BitErrors, B as BitMask, b as BitArrayPath, a as BitArrayItem, n as BitTouched, S as ScopeStatus, V as ValidateScopeResult } from './bus-DkMkzOXE.js';
|
|
5
5
|
|
|
6
6
|
declare const BitFormProvider: ({ store, children, }: {
|
|
7
7
|
store: BitStore<any>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import { B as BitStore } from './index-
|
|
4
|
-
import { k as BitPath, l as BitPathValue, e as BitErrors, B as BitMask, b as BitArrayPath, a as BitArrayItem, n as BitTouched, S as ScopeStatus, V as ValidateScopeResult } from './bus-
|
|
3
|
+
import { B as BitStore } from './index-mzR_3Kbx.cjs';
|
|
4
|
+
import { k as BitPath, l as BitPathValue, e as BitErrors, B as BitMask, b as BitArrayPath, a as BitArrayItem, n as BitTouched, S as ScopeStatus, V as ValidateScopeResult } from './bus-DkMkzOXE.cjs';
|
|
5
5
|
|
|
6
6
|
declare const BitFormProvider: ({ store, children, }: {
|
|
7
7
|
store: BitStore<any>;
|
package/dist/vue/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkJ3EGU5ZHcjs = require('../chunk-J3EGU5ZH.cjs');var _vue = require('vue');var D=Symbol("BIT_STORE");function q(e){_vue.provide.call(void 0, D,e)}function d(){let e=_vue.inject.call(void 0, D);if(!e)throw new Error("BitForm Vue hooks devem ser usados sob um provideBitStore");return e}function W(){let e=d(),t=_vue.shallowRef.call(void 0, e.getState()),o=_vue.ref.call(void 0, null),s=_vue.ref.call(void 0, null),n=e.subscribe(()=>{t.value={...e.getState()}});_vue.onUnmounted.call(void 0, n);let i=()=>t.value.values,m=()=>t.value.errors,f=()=>t.value.touched,g=_vue.computed.call(void 0, ()=>t.value.isValid),r=_vue.computed.call(void 0, ()=>t.value.isSubmitting),u=_vue.computed.call(void 0, ()=>t.value.isDirty),c=_vue.computed.call(void 0, ()=>(t.value,e.canUndo)),p=_vue.computed.call(void 0, ()=>(t.value,e.canRedo));return{store:e,isValid:g,isSubmitting:r,isDirty:u,canUndo:c,canRedo:p,getValues:i,getErrors:m,getTouched:f,submit:S=>b=>(_optionalChain([b, 'optionalAccess', _2 => _2.preventDefault, 'optionalCall', _3 => _3()]),e.submit(S)),onSubmit:S=>b=>(_optionalChain([b, 'optionalAccess', _4 => _4.preventDefault, 'optionalCall', _5 => _5()]),o.value=null,e.submit(async B=>{try{let a=await S(B);s.value=a,o.value=null}catch(a){_chunkJ3EGU5ZHcjs.h.call(void 0, a)?e.setServerErrors(_chunkJ3EGU5ZHcjs.i.call(void 0, a)):o.value=a instanceof Error?a:new Error(String(a))}})),submitError:o,lastResponse:s,reset:()=>{e.reset(),o.value=null,s.value=null},validate:e.validate.bind(e),setValues:e.setValues.bind(e),setError:e.setError.bind(e),setErrors:e.setErrors.bind(e),setServerErrors:e.setServerErrors.bind(e),setField:e.setField.bind(e),blurField:e.blurField.bind(e),registerMask:e.registerMask.bind(e),pushItem:e.pushItem.bind(e),prependItem:e.prependItem.bind(e),removeItem:e.removeItem.bind(e),insertItem:e.insertItem.bind(e),moveItem:e.moveItem.bind(e),swapItems:e.swapItems.bind(e),undo:e.undo.bind(e),redo:e.redo.bind(e)}}function $(e,t,o){let s=d();t&&s.registerField(e,t);let n=_nullishCoalesce(_optionalChain([o, 'optionalAccess', _6 => _6.mask]), () => (_optionalChain([s, 'access', _7 => _7.config, 'access', _8 => _8.fields, 'optionalAccess', _9 => _9[e], 'optionalAccess', _10 => _10.mask]))),i=n?typeof n=="string"?_optionalChain([s, 'access', _11 => _11.config, 'access', _12 => _12.masks, 'optionalAccess', _13 => _13[n]]):n:void 0,m=_vue.shallowRef.call(void 0, s.getState()),f=s.subscribe(()=>{m.value=s.getState()});_vue.onUnmounted.call(void 0, ()=>{f(),s.unregisterField&&s.unregisterField(e)});let g=_vue.computed.call(void 0, ()=>_chunkJ3EGU5ZHcjs.e.call(void 0, m.value.values,e)),r=_vue.computed.call(void 0, ()=>{let l=g.value;return l==null||l===""?"":i?i.format(l):String(l)}),u=_vue.computed.call(void 0, {get:()=>r.value,set:l=>{if(!i){s.setField(e,l);return}s.setField(e,i.parse(String(_nullishCoalesce(l, () => ("")))))}}),c=_vue.computed.call(void 0, ()=>m.value.touched[e]?m.value.errors[e]:void 0),p=_vue.computed.call(void 0, ()=>!!m.value.touched[e]),V=_vue.computed.call(void 0, ()=>!!(p.value&&c.value)),E=_vue.computed.call(void 0, ()=>(m.value,s.isFieldValidating(e))),S=_vue.computed.call(void 0, ()=>(m.value,s.isFieldDirty(e))),b=_vue.computed.call(void 0, ()=>(m.value,s.isHidden(e))),B=_vue.computed.call(void 0, ()=>(m.value,s.isRequired(e))),a=_vue.computed.call(void 0, ()=>({isDirty:S.value,isValidating:E.value,isHidden:b.value,isRequired:B.value,hasError:!!c.value}));return{value:u,displayValue:r,error:c,touched:p,invalid:V,isValidating:E,isDirty:S,isHidden:b,isRequired:B,fieldMeta:a,setBlur:()=>s.blurField(e),setValue:l=>u.value=l}}var F=()=>Math.random().toString(36).substring(2,9);function z(e){let t=d(),o=()=>{let r=_chunkJ3EGU5ZHcjs.e.call(void 0, t.getState().values,e);return Array.isArray(r)?r:[]},s=o(),n=_vue.ref.call(void 0, s),i=_vue.ref.call(void 0, s.map(F)),m=t.subscribe(()=>{let r=o();if(n.value=[...r],r.length!==i.value.length){let u=[...i.value];if(r.length>u.length){let c=r.length-u.length,p=Array.from({length:c},F);i.value=[...u,...p]}else i.value=u.slice(0,r.length)}});_vue.onUnmounted.call(void 0, ()=>{m(),t.unregisterPrefix&&t.unregisterPrefix(`${e}.`)});let f=_vue.computed.call(void 0, ()=>n.value.map((r,u)=>({key:i.value[u]||`temp-${u}`,value:r,index:u}))),g=_vue.computed.call(void 0, ()=>n.value.length);return{fields:f,length:g,append:r=>{i.value.push(F()),t.pushItem(e,r)},prepend:r=>{i.value.unshift(F()),t.prependItem(e,r)},insert:(r,u)=>{i.value.splice(r,0,F()),t.insertItem(e,r,u)},remove:r=>{i.value.splice(r,1),t.removeItem(e,r)},move:(r,u)=>{let c=[...i.value],[p]=c.splice(r,1);c.splice(u,0,p),i.value=c,t.moveItem(e,r,u)},swap:(r,u)=>{let c=[...i.value];[c[r],c[u]]=[c[u],c[r]],i.value=c,t.swapItems(e,r,u)},replace:r=>{i.value=r.map(F),t.setField(e,r)},clear:()=>{i.value=[],t.setField(e,[])}}}function X(e,t){let o=Object.keys(e),s=Object.keys(t);return o.length!==s.length?!1:o.every(n=>e[n]===t[n])}function Z(e){let t=d(),o=_vue.ref.call(void 0, t.getStepStatus(e)),s;_vue.onMounted.call(void 0, ()=>{s=t.subscribe(()=>{let r=t.getStepStatus(e);(r.hasErrors!==o.value.hasErrors||r.isDirty!==o.value.isDirty||!X(r.errors,o.value.errors))&&(o.value=r)})}),_vue.onUnmounted.call(void 0, ()=>{_optionalChain([s, 'optionalCall', _14 => _14()])});let n=async()=>{let r=await t.validate({scope:e}),u=t.getStepErrors(e);return{valid:r,errors:u}},i=()=>t.getStepErrors(e),m=_vue.computed.call(void 0, ()=>!o.value.hasErrors),f=_vue.computed.call(void 0, ()=>o.value.isDirty),g=_vue.computed.call(void 0, ()=>o.value.errors);return{scopeName:e,status:o,errors:g,validate:n,getErrors:i,isValid:m,isDirty:f}}function re(e,t){let o=Object.keys(e),s=Object.keys(t);return o.length!==s.length?!1:o.every(n=>e[n]===t[n])}function se(e){let t=d(),o=_vue.ref.call(void 0, 0),s=_vue.computed.call(void 0, ()=>_nullishCoalesce(e[o.value], () => (""))),n=_vue.ref.call(void 0, t.getStepStatus(s.value)),i;_vue.watch.call(void 0, s,a=>{n.value=t.getStepStatus(a)});let m=()=>{let a=s.value,l=t.getStepStatus(a);(l.hasErrors!==n.value.hasErrors||l.isDirty!==n.value.isDirty||!re(l.errors,n.value.errors))&&(n.value=l)};_vue.onMounted.call(void 0, ()=>{i=t.subscribe(m)}),_vue.onUnmounted.call(void 0, ()=>{_optionalChain([i, 'optionalCall', _15 => _15()])});let f=async()=>{let a=s.value,l=await t.validate({scope:a}),P=t.getStepErrors(a);return{valid:l,errors:P}},g=()=>t.getStepErrors(s.value),r=async()=>{let a=s.value,l=await t.validate({scope:a});if(l)o.value=Math.min(o.value+1,e.length-1);else{let P=t.getStepErrors(a),x=Object.keys(P);x.length>0&&t.markFieldsTouched(x)}return l},u=()=>{o.value=Math.max(o.value-1,0)},c=a=>{o.value=Math.max(0,Math.min(a-1,e.length-1))},p=_vue.computed.call(void 0, ()=>o.value+1),V=_vue.computed.call(void 0, ()=>o.value===0),E=_vue.computed.call(void 0, ()=>o.value>=e.length-1),S=_vue.computed.call(void 0, ()=>!n.value.hasErrors),b=_vue.computed.call(void 0, ()=>n.value.isDirty),B=_vue.computed.call(void 0, ()=>n.value.errors);return{step:p,stepIndex:o,scope:s,next:r,prev:u,goTo:c,isFirst:V,isLast:E,status:n,errors:B,isValid:S,isDirty:b,validate:f,getErrors:g}}function ue(e){let t=d(),o=_chunkJ3EGU5ZHcjs.e.call(void 0, t.getState().values,e),s=_vue.ref.call(void 0, o),n=t.watch(e,i=>{_chunkJ3EGU5ZHcjs.d.call(void 0, s.value,i)||(s.value=i)});return _vue.onUnmounted.call(void 0, n),_vue.readonly.call(void 0, s)}exports.provideBitStore = q; exports.useBitArray = z; exports.useBitField = $; exports.useBitForm = W; exports.useBitScope = Z; exports.useBitSteps = se; exports.useBitStore = d; exports.useBitWatch = ue;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/vue/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/leandrocarol/Projetos/bit-form/dist/vue/index.cjs","../../src/vue/context.ts","../../src/vue/use-bit-form.ts","../../src/vue/use-bit-field.ts","../../src/vue/use-bit-array.ts"],"names":["BIT_STORE_KEY","provideBitStore","store","provide","useBitStore","inject","useBitForm","state","shallowRef","submitError","ref","lastResponse","unsubscribe","onUnmounted","getValues","getErrors","getTouched","isValid","computed","isSubmitting","isDirty","canUndo","canRedo","onSuccess","e","handler","values","result","err","isValidationErrorShape","extractServerErrors","useBitField","path","config","options","maskOption","resolvedMask","rawValue","getDeepValue","displayValue","val","value","error","touched","invalid","isValidating","isHidden","isRequired","fieldMeta","generateId","useBitArray","getSnapshot","initialValues","ids","newValues","currentIds","diff","newIds"],"mappings":"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","file":"/Users/leandrocarol/Projetos/bit-form/dist/vue/index.cjs","sourcesContent":[null,"import { inject, provide, InjectionKey } from \"vue\";\nimport { BitStore } from \"../core\";\n\n// Chave única para evitar colisões\nexport const BIT_STORE_KEY: InjectionKey<BitStore<any>> = Symbol(\"BIT_STORE\");\n\nexport function provideBitStore(store: BitStore<any>) {\n provide(BIT_STORE_KEY, store);\n}\n\nexport function useBitStore<T extends object>() {\n const store = inject(BIT_STORE_KEY);\n if (!store)\n throw new Error(\n \"BitForm Vue hooks devem ser usados sob um provideBitStore\",\n );\n return store as BitStore<T>;\n}\n","import { computed, onUnmounted, shallowRef, ref } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport { isValidationErrorShape, extractServerErrors } from \"../core/utils\";\n\nexport function useBitForm<T extends object>() {\n const store = useBitStore<T>();\n const state = shallowRef(store.getState());\n const submitError = ref<Error | null>(null);\n const lastResponse = ref<unknown>(null);\n\n const unsubscribe = store.subscribe(() => {\n state.value = { ...store.getState() };\n });\n\n onUnmounted(unsubscribe);\n\n const getValues = () => state.value.values;\n const getErrors = () => state.value.errors;\n const getTouched = () => state.value.touched;\n\n const isValid = computed(() => state.value.isValid);\n const isSubmitting = computed(() => state.value.isSubmitting);\n const isDirty = computed(() => state.value.isDirty);\n\n const canUndo = computed(() => {\n state.value;\n return store.canUndo;\n });\n\n const canRedo = computed(() => {\n state.value;\n return store.canRedo;\n });\n\n const onSubmit = (handler: (values: T) => Promise<unknown>) => {\n return (e?: Event) => {\n e?.preventDefault?.();\n submitError.value = null;\n return store.submit(async (values) => {\n try {\n const result = await handler(values);\n lastResponse.value = result;\n submitError.value = null;\n } catch (err) {\n if (isValidationErrorShape(err)) {\n store.setServerErrors(extractServerErrors(err));\n } else {\n submitError.value =\n err instanceof Error ? err : new Error(String(err));\n }\n }\n });\n };\n };\n\n const reset = () => {\n store.reset();\n submitError.value = null;\n lastResponse.value = null;\n };\n\n return {\n store,\n isValid,\n isSubmitting,\n isDirty,\n canUndo,\n canRedo,\n getValues,\n getErrors,\n getTouched,\n submit: (onSuccess: (values: T) => void | Promise<void>) => {\n return (e?: Event) => {\n e?.preventDefault?.();\n return store.submit(onSuccess);\n };\n },\n onSubmit,\n submitError,\n lastResponse,\n reset,\n validate: store.validate.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 setField: store.setField.bind(store),\n blurField: store.blurField.bind(store),\n registerMask: store.registerMask.bind(store),\n pushItem: store.pushItem.bind(store),\n prependItem: store.prependItem.bind(store),\n removeItem: store.removeItem.bind(store),\n insertItem: store.insertItem.bind(store),\n moveItem: store.moveItem.bind(store),\n swapItems: store.swapItems.bind(store),\n undo: store.undo.bind(store),\n redo: store.redo.bind(store),\n };\n}\n","import { computed, onUnmounted, shallowRef } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport { BitFieldOptions, BitFieldDefinition, getDeepValue } from \"../core\";\n\nexport function useBitField<TValue = any>(\n path: string,\n config?: BitFieldDefinition<any>,\n options?: BitFieldOptions,\n) {\n const store = useBitStore<any>();\n\n if (config) {\n store.registerField(path as string, config as any);\n }\n\n const maskOption =\n options?.mask ?? store.config.fields?.[path as string]?.mask;\n const resolvedMask = maskOption\n ? typeof maskOption === \"string\"\n ? store.config.masks?.[maskOption]\n : maskOption\n : undefined;\n\n const state = shallowRef(store.getState());\n\n const unsubscribe = store.subscribe(() => {\n state.value = store.getState();\n });\n\n onUnmounted(() => {\n unsubscribe();\n if (store.unregisterField) {\n store.unregisterField(path as string);\n }\n });\n\n const rawValue = computed(\n () => getDeepValue(state.value.values, path as string) as TValue,\n );\n\n const displayValue = computed(() => {\n const val = rawValue.value;\n if (val === undefined || val === null || val === \"\") return \"\";\n\n return resolvedMask ? resolvedMask.format(val as any) : String(val);\n });\n\n const value = computed({\n get: () => displayValue.value,\n set: (val: any) => {\n if (!resolvedMask) {\n store.setField(path, val);\n return;\n }\n\n store.setField(path, resolvedMask.parse(String(val ?? \"\")));\n },\n });\n\n const error = computed(() =>\n state.value.touched[path] ? state.value.errors[path] : undefined,\n );\n const touched = computed(() => !!state.value.touched[path]);\n const invalid = computed(() => !!(touched.value && error.value));\n\n const isValidating = computed(() => {\n state.value;\n return store.isFieldValidating(path);\n });\n\n const isDirty = computed(() => {\n state.value;\n return store.isFieldDirty(path);\n });\n\n const isHidden = computed(() => {\n state.value;\n return store.isHidden(path);\n });\n\n const isRequired = computed(() => {\n state.value;\n return store.isRequired(path);\n });\n\n const fieldMeta = computed(() => ({\n isDirty: isDirty.value,\n isValidating: isValidating.value,\n isHidden: isHidden.value,\n isRequired: isRequired.value,\n hasError: !!error.value,\n }));\n\n return {\n value,\n displayValue,\n error,\n touched,\n invalid,\n isValidating,\n isDirty,\n isHidden,\n isRequired,\n fieldMeta,\n setBlur: () => store.blurField(path),\n setValue: (val: any) => (value.value = val),\n };\n}\n","import { ref, computed, onUnmounted } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport {\n getDeepValue,\n BitArrayPath,\n BitPathValue,\n BitArrayItem,\n BitPath,\n} from \"../core\";\n\nconst generateId = () => Math.random().toString(36).substring(2, 9);\n\nexport function useBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = useBitStore<TForm>();\n\n type Item = BitArrayItem<BitPathValue<TForm, P>>;\n\n const getSnapshot = (): Item[] => {\n const val = getDeepValue(\n store.getState().values,\n path as string,\n ) as BitPathValue<TForm, P> | undefined;\n return Array.isArray(val) ? (val as Item[]) : [];\n };\n\n const initialValues = getSnapshot();\n const values = ref<Item[]>(initialValues);\n const ids = ref<string[]>(initialValues.map(generateId));\n\n const unsubscribe = store.subscribe(() => {\n const newValues = getSnapshot();\n values.value = [...newValues];\n\n if (newValues.length !== ids.value.length) {\n const currentIds = [...ids.value];\n if (newValues.length > currentIds.length) {\n const diff = newValues.length - currentIds.length;\n const newIds = Array.from({ length: diff }, generateId);\n ids.value = [...currentIds, ...newIds];\n } else {\n ids.value = currentIds.slice(0, newValues.length);\n }\n }\n });\n\n onUnmounted(() => {\n unsubscribe();\n if (store.unregisterPrefix) {\n store.unregisterPrefix(`${path as string}.`);\n }\n });\n\n const fields = computed(() =>\n values.value.map((v, i) => ({\n key: ids.value[i] || `temp-${i}`,\n value: v,\n index: i,\n })),\n );\n\n const length = computed(() => values.value.length);\n\n return {\n fields,\n length,\n append: (val: Item) => {\n ids.value.push(generateId());\n store.pushItem(path, val);\n },\n prepend: (val: Item) => {\n ids.value.unshift(generateId());\n store.prependItem(path, val);\n },\n insert: (index: number, val: Item) => {\n ids.value.splice(index, 0, generateId());\n store.insertItem(path, index, val);\n },\n remove: (index: number) => {\n ids.value.splice(index, 1);\n store.removeItem(path, index);\n },\n move: (from: number, to: number) => {\n const currentIds = [...ids.value];\n const [id] = currentIds.splice(from, 1);\n currentIds.splice(to, 0, id);\n ids.value = currentIds;\n store.moveItem(path, from, to);\n },\n swap: (a: number, b: number) => {\n const currentIds = [...ids.value];\n [currentIds[a], currentIds[b]] = [currentIds[b], currentIds[a]];\n ids.value = currentIds;\n store.swapItems(path, a, b);\n },\n replace: (items: Item[]) => {\n ids.value = items.map(generateId);\n store.setField(path as unknown as BitPath<TForm>, items as any);\n },\n clear: () => {\n ids.value = [];\n store.setField(path as unknown as BitPath<TForm>, [] as any);\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/vue/index.cjs","../../src/vue/context.ts","../../src/vue/use-bit-form.ts","../../src/vue/use-bit-field.ts","../../src/vue/use-bit-array.ts"],"names":["BIT_STORE_KEY","provideBitStore","store","provide","useBitStore","inject","useBitForm","state","shallowRef","submitError","ref","lastResponse","unsubscribe","onUnmounted","getValues","getErrors","getTouched","isValid","computed","isSubmitting","isDirty","canUndo","canRedo","onSuccess","e","handler","values","result","err","isValidationErrorShape","extractServerErrors","useBitField","path","config","options","maskOption","resolvedMask","rawValue","getDeepValue","displayValue","val","value","error","touched","invalid","isValidating","isHidden","isRequired","fieldMeta","generateId","useBitArray","getSnapshot","initialValues","ids","newValues","currentIds","diff","newIds"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/vue/index.cjs","sourcesContent":[null,"import { inject, provide, InjectionKey } from \"vue\";\nimport { BitStore } from \"../core\";\n\n// Chave única para evitar colisões\nexport const BIT_STORE_KEY: InjectionKey<BitStore<any>> = Symbol(\"BIT_STORE\");\n\nexport function provideBitStore(store: BitStore<any>) {\n provide(BIT_STORE_KEY, store);\n}\n\nexport function useBitStore<T extends object>() {\n const store = inject(BIT_STORE_KEY);\n if (!store)\n throw new Error(\n \"BitForm Vue hooks devem ser usados sob um provideBitStore\",\n );\n return store as BitStore<T>;\n}\n","import { computed, onUnmounted, shallowRef, ref } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport { isValidationErrorShape, extractServerErrors } from \"../core/utils\";\n\nexport function useBitForm<T extends object>() {\n const store = useBitStore<T>();\n const state = shallowRef(store.getState());\n const submitError = ref<Error | null>(null);\n const lastResponse = ref<unknown>(null);\n\n const unsubscribe = store.subscribe(() => {\n state.value = { ...store.getState() };\n });\n\n onUnmounted(unsubscribe);\n\n const getValues = () => state.value.values;\n const getErrors = () => state.value.errors;\n const getTouched = () => state.value.touched;\n\n const isValid = computed(() => state.value.isValid);\n const isSubmitting = computed(() => state.value.isSubmitting);\n const isDirty = computed(() => state.value.isDirty);\n\n const canUndo = computed(() => {\n state.value;\n return store.canUndo;\n });\n\n const canRedo = computed(() => {\n state.value;\n return store.canRedo;\n });\n\n const onSubmit = (handler: (values: T) => Promise<unknown>) => {\n return (e?: Event) => {\n e?.preventDefault?.();\n submitError.value = null;\n return store.submit(async (values) => {\n try {\n const result = await handler(values);\n lastResponse.value = result;\n submitError.value = null;\n } catch (err) {\n if (isValidationErrorShape(err)) {\n store.setServerErrors(extractServerErrors(err));\n } else {\n submitError.value =\n err instanceof Error ? err : new Error(String(err));\n }\n }\n });\n };\n };\n\n const reset = () => {\n store.reset();\n submitError.value = null;\n lastResponse.value = null;\n };\n\n return {\n store,\n isValid,\n isSubmitting,\n isDirty,\n canUndo,\n canRedo,\n getValues,\n getErrors,\n getTouched,\n submit: (onSuccess: (values: T) => void | Promise<void>) => {\n return (e?: Event) => {\n e?.preventDefault?.();\n return store.submit(onSuccess);\n };\n },\n onSubmit,\n submitError,\n lastResponse,\n reset,\n validate: store.validate.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 setField: store.setField.bind(store),\n blurField: store.blurField.bind(store),\n registerMask: store.registerMask.bind(store),\n pushItem: store.pushItem.bind(store),\n prependItem: store.prependItem.bind(store),\n removeItem: store.removeItem.bind(store),\n insertItem: store.insertItem.bind(store),\n moveItem: store.moveItem.bind(store),\n swapItems: store.swapItems.bind(store),\n undo: store.undo.bind(store),\n redo: store.redo.bind(store),\n };\n}\n","import { computed, onUnmounted, shallowRef } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport { BitFieldOptions, BitFieldDefinition, getDeepValue } from \"../core\";\n\nexport function useBitField<TValue = any>(\n path: string,\n config?: BitFieldDefinition<any>,\n options?: BitFieldOptions,\n) {\n const store = useBitStore<any>();\n\n if (config) {\n store.registerField(path as string, config as any);\n }\n\n const maskOption =\n options?.mask ?? store.config.fields?.[path as string]?.mask;\n const resolvedMask = maskOption\n ? typeof maskOption === \"string\"\n ? store.config.masks?.[maskOption]\n : maskOption\n : undefined;\n\n const state = shallowRef(store.getState());\n\n const unsubscribe = store.subscribe(() => {\n state.value = store.getState();\n });\n\n onUnmounted(() => {\n unsubscribe();\n if (store.unregisterField) {\n store.unregisterField(path as string);\n }\n });\n\n const rawValue = computed(\n () => getDeepValue(state.value.values, path as string) as TValue,\n );\n\n const displayValue = computed(() => {\n const val = rawValue.value;\n if (val === undefined || val === null || val === \"\") return \"\";\n\n return resolvedMask ? resolvedMask.format(val as any) : String(val);\n });\n\n const value = computed({\n get: () => displayValue.value,\n set: (val: any) => {\n if (!resolvedMask) {\n store.setField(path, val);\n return;\n }\n\n store.setField(path, resolvedMask.parse(String(val ?? \"\")));\n },\n });\n\n const error = computed(() =>\n state.value.touched[path] ? state.value.errors[path] : undefined,\n );\n const touched = computed(() => !!state.value.touched[path]);\n const invalid = computed(() => !!(touched.value && error.value));\n\n const isValidating = computed(() => {\n state.value;\n return store.isFieldValidating(path);\n });\n\n const isDirty = computed(() => {\n state.value;\n return store.isFieldDirty(path);\n });\n\n const isHidden = computed(() => {\n state.value;\n return store.isHidden(path);\n });\n\n const isRequired = computed(() => {\n state.value;\n return store.isRequired(path);\n });\n\n const fieldMeta = computed(() => ({\n isDirty: isDirty.value,\n isValidating: isValidating.value,\n isHidden: isHidden.value,\n isRequired: isRequired.value,\n hasError: !!error.value,\n }));\n\n return {\n value,\n displayValue,\n error,\n touched,\n invalid,\n isValidating,\n isDirty,\n isHidden,\n isRequired,\n fieldMeta,\n setBlur: () => store.blurField(path),\n setValue: (val: any) => (value.value = val),\n };\n}\n","import { ref, computed, onUnmounted } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport {\n getDeepValue,\n BitArrayPath,\n BitPathValue,\n BitArrayItem,\n BitPath,\n} from \"../core\";\n\nconst generateId = () => Math.random().toString(36).substring(2, 9);\n\nexport function useBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = useBitStore<TForm>();\n\n type Item = BitArrayItem<BitPathValue<TForm, P>>;\n\n const getSnapshot = (): Item[] => {\n const val = getDeepValue(\n store.getState().values,\n path as string,\n ) as BitPathValue<TForm, P> | undefined;\n return Array.isArray(val) ? (val as Item[]) : [];\n };\n\n const initialValues = getSnapshot();\n const values = ref<Item[]>(initialValues);\n const ids = ref<string[]>(initialValues.map(generateId));\n\n const unsubscribe = store.subscribe(() => {\n const newValues = getSnapshot();\n values.value = [...newValues];\n\n if (newValues.length !== ids.value.length) {\n const currentIds = [...ids.value];\n if (newValues.length > currentIds.length) {\n const diff = newValues.length - currentIds.length;\n const newIds = Array.from({ length: diff }, generateId);\n ids.value = [...currentIds, ...newIds];\n } else {\n ids.value = currentIds.slice(0, newValues.length);\n }\n }\n });\n\n onUnmounted(() => {\n unsubscribe();\n if (store.unregisterPrefix) {\n store.unregisterPrefix(`${path as string}.`);\n }\n });\n\n const fields = computed(() =>\n values.value.map((v, i) => ({\n key: ids.value[i] || `temp-${i}`,\n value: v,\n index: i,\n })),\n );\n\n const length = computed(() => values.value.length);\n\n return {\n fields,\n length,\n append: (val: Item) => {\n ids.value.push(generateId());\n store.pushItem(path, val);\n },\n prepend: (val: Item) => {\n ids.value.unshift(generateId());\n store.prependItem(path, val);\n },\n insert: (index: number, val: Item) => {\n ids.value.splice(index, 0, generateId());\n store.insertItem(path, index, val);\n },\n remove: (index: number) => {\n ids.value.splice(index, 1);\n store.removeItem(path, index);\n },\n move: (from: number, to: number) => {\n const currentIds = [...ids.value];\n const [id] = currentIds.splice(from, 1);\n currentIds.splice(to, 0, id);\n ids.value = currentIds;\n store.moveItem(path, from, to);\n },\n swap: (a: number, b: number) => {\n const currentIds = [...ids.value];\n [currentIds[a], currentIds[b]] = [currentIds[b], currentIds[a]];\n ids.value = currentIds;\n store.swapItems(path, a, b);\n },\n replace: (items: Item[]) => {\n ids.value = items.map(generateId);\n store.setField(path as unknown as BitPath<TForm>, items as any);\n },\n clear: () => {\n ids.value = [];\n store.setField(path as unknown as BitPath<TForm>, [] as any);\n },\n };\n}\n"]}
|
package/dist/vue/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { B as BitStore } from '../index-
|
|
2
|
-
import { e as BitErrors, n as BitTouched, k as BitPath, l as BitPathValue, B as BitMask, b as BitArrayPath, a as BitArrayItem, g as BitFieldDefinition, h as BitFieldOptions, S as ScopeStatus, V as ValidateScopeResult } from '../bus-
|
|
1
|
+
import { B as BitStore } from '../index-mzR_3Kbx.cjs';
|
|
2
|
+
import { e as BitErrors, n as BitTouched, k as BitPath, l as BitPathValue, B as BitMask, b as BitArrayPath, a as BitArrayItem, g as BitFieldDefinition, h as BitFieldOptions, S as ScopeStatus, V as ValidateScopeResult } from '../bus-DkMkzOXE.cjs';
|
|
3
3
|
import * as vue from 'vue';
|
|
4
4
|
import * as _vue_reactivity from '@vue/reactivity';
|
|
5
5
|
import * as _vue_shared from '@vue/shared';
|
package/dist/vue/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { B as BitStore } from '../index-
|
|
2
|
-
import { e as BitErrors, n as BitTouched, k as BitPath, l as BitPathValue, B as BitMask, b as BitArrayPath, a as BitArrayItem, g as BitFieldDefinition, h as BitFieldOptions, S as ScopeStatus, V as ValidateScopeResult } from '../bus-
|
|
1
|
+
import { B as BitStore } from '../index-BXaNeJBk.js';
|
|
2
|
+
import { e as BitErrors, n as BitTouched, k as BitPath, l as BitPathValue, B as BitMask, b as BitArrayPath, a as BitArrayItem, g as BitFieldDefinition, h as BitFieldOptions, S as ScopeStatus, V as ValidateScopeResult } from '../bus-DkMkzOXE.js';
|
|
3
3
|
import * as vue from 'vue';
|
|
4
4
|
import * as _vue_reactivity from '@vue/reactivity';
|
|
5
5
|
import * as _vue_shared from '@vue/shared';
|
package/dist/vue/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as T,e as h,h as w,i as k}from"../chunk-
|
|
1
|
+
import{d as T,e as h,h as w,i as k}from"../chunk-QU365SAC.js";import{inject as U,provide as C}from"vue";var D=Symbol("BIT_STORE");function q(e){C(D,e)}function d(){let e=U(D);if(!e)throw new Error("BitForm Vue hooks devem ser usados sob um provideBitStore");return e}import{computed as I,onUnmounted as H,shallowRef as K,ref as j}from"vue";function W(){let e=d(),t=K(e.getState()),o=j(null),s=j(null),n=e.subscribe(()=>{t.value={...e.getState()}});H(n);let i=()=>t.value.values,m=()=>t.value.errors,f=()=>t.value.touched,g=I(()=>t.value.isValid),r=I(()=>t.value.isSubmitting),u=I(()=>t.value.isDirty),c=I(()=>(t.value,e.canUndo)),p=I(()=>(t.value,e.canRedo));return{store:e,isValid:g,isSubmitting:r,isDirty:u,canUndo:c,canRedo:p,getValues:i,getErrors:m,getTouched:f,submit:S=>b=>(b?.preventDefault?.(),e.submit(S)),onSubmit:S=>b=>(b?.preventDefault?.(),o.value=null,e.submit(async B=>{try{let a=await S(B);s.value=a,o.value=null}catch(a){w(a)?e.setServerErrors(k(a)):o.value=a instanceof Error?a:new Error(String(a))}})),submitError:o,lastResponse:s,reset:()=>{e.reset(),o.value=null,s.value=null},validate:e.validate.bind(e),setValues:e.setValues.bind(e),setError:e.setError.bind(e),setErrors:e.setErrors.bind(e),setServerErrors:e.setServerErrors.bind(e),setField:e.setField.bind(e),blurField:e.blurField.bind(e),registerMask:e.registerMask.bind(e),pushItem:e.pushItem.bind(e),prependItem:e.prependItem.bind(e),removeItem:e.removeItem.bind(e),insertItem:e.insertItem.bind(e),moveItem:e.moveItem.bind(e),swapItems:e.swapItems.bind(e),undo:e.undo.bind(e),redo:e.redo.bind(e)}}import{computed as v,onUnmounted as _,shallowRef as L}from"vue";function $(e,t,o){let s=d();t&&s.registerField(e,t);let n=o?.mask??s.config.fields?.[e]?.mask,i=n?typeof n=="string"?s.config.masks?.[n]:n:void 0,m=L(s.getState()),f=s.subscribe(()=>{m.value=s.getState()});_(()=>{f(),s.unregisterField&&s.unregisterField(e)});let g=v(()=>h(m.value.values,e)),r=v(()=>{let l=g.value;return l==null||l===""?"":i?i.format(l):String(l)}),u=v({get:()=>r.value,set:l=>{if(!i){s.setField(e,l);return}s.setField(e,i.parse(String(l??"")))}}),c=v(()=>m.value.touched[e]?m.value.errors[e]:void 0),p=v(()=>!!m.value.touched[e]),V=v(()=>!!(p.value&&c.value)),E=v(()=>(m.value,s.isFieldValidating(e))),S=v(()=>(m.value,s.isFieldDirty(e))),b=v(()=>(m.value,s.isHidden(e))),B=v(()=>(m.value,s.isRequired(e))),a=v(()=>({isDirty:S.value,isValidating:E.value,isHidden:b.value,isRequired:B.value,hasError:!!c.value}));return{value:u,displayValue:r,error:c,touched:p,invalid:V,isValidating:E,isDirty:S,isHidden:b,isRequired:B,fieldMeta:a,setBlur:()=>s.blurField(e),setValue:l=>u.value=l}}import{ref as A,computed as M,onUnmounted as Y}from"vue";var F=()=>Math.random().toString(36).substring(2,9);function z(e){let t=d(),o=()=>{let r=h(t.getState().values,e);return Array.isArray(r)?r:[]},s=o(),n=A(s),i=A(s.map(F)),m=t.subscribe(()=>{let r=o();if(n.value=[...r],r.length!==i.value.length){let u=[...i.value];if(r.length>u.length){let c=r.length-u.length,p=Array.from({length:c},F);i.value=[...u,...p]}else i.value=u.slice(0,r.length)}});Y(()=>{m(),t.unregisterPrefix&&t.unregisterPrefix(`${e}.`)});let f=M(()=>n.value.map((r,u)=>({key:i.value[u]||`temp-${u}`,value:r,index:u}))),g=M(()=>n.value.length);return{fields:f,length:g,append:r=>{i.value.push(F()),t.pushItem(e,r)},prepend:r=>{i.value.unshift(F()),t.prependItem(e,r)},insert:(r,u)=>{i.value.splice(r,0,F()),t.insertItem(e,r,u)},remove:r=>{i.value.splice(r,1),t.removeItem(e,r)},move:(r,u)=>{let c=[...i.value],[p]=c.splice(r,1);c.splice(u,0,p),i.value=c,t.moveItem(e,r,u)},swap:(r,u)=>{let c=[...i.value];[c[r],c[u]]=[c[u],c[r]],i.value=c,t.swapItems(e,r,u)},replace:r=>{i.value=r.map(F),t.setField(e,r)},clear:()=>{i.value=[],t.setField(e,[])}}}import{ref as G,computed as R,onMounted as J,onUnmounted as Q}from"vue";function X(e,t){let o=Object.keys(e),s=Object.keys(t);return o.length!==s.length?!1:o.every(n=>e[n]===t[n])}function Z(e){let t=d(),o=G(t.getStepStatus(e)),s;J(()=>{s=t.subscribe(()=>{let r=t.getStepStatus(e);(r.hasErrors!==o.value.hasErrors||r.isDirty!==o.value.isDirty||!X(r.errors,o.value.errors))&&(o.value=r)})}),Q(()=>{s?.()});let n=async()=>{let r=await t.validate({scope:e}),u=t.getStepErrors(e);return{valid:r,errors:u}},i=()=>t.getStepErrors(e),m=R(()=>!o.value.hasErrors),f=R(()=>o.value.isDirty),g=R(()=>o.value.errors);return{scopeName:e,status:o,errors:g,validate:n,getErrors:i,isValid:m,isDirty:f}}import{ref as O,computed as y,watch as N,onMounted as ee,onUnmounted as te}from"vue";function re(e,t){let o=Object.keys(e),s=Object.keys(t);return o.length!==s.length?!1:o.every(n=>e[n]===t[n])}function se(e){let t=d(),o=O(0),s=y(()=>e[o.value]??""),n=O(t.getStepStatus(s.value)),i;N(s,a=>{n.value=t.getStepStatus(a)});let m=()=>{let a=s.value,l=t.getStepStatus(a);(l.hasErrors!==n.value.hasErrors||l.isDirty!==n.value.isDirty||!re(l.errors,n.value.errors))&&(n.value=l)};ee(()=>{i=t.subscribe(m)}),te(()=>{i?.()});let f=async()=>{let a=s.value,l=await t.validate({scope:a}),P=t.getStepErrors(a);return{valid:l,errors:P}},g=()=>t.getStepErrors(s.value),r=async()=>{let a=s.value,l=await t.validate({scope:a});if(l)o.value=Math.min(o.value+1,e.length-1);else{let P=t.getStepErrors(a),x=Object.keys(P);x.length>0&&t.markFieldsTouched(x)}return l},u=()=>{o.value=Math.max(o.value-1,0)},c=a=>{o.value=Math.max(0,Math.min(a-1,e.length-1))},p=y(()=>o.value+1),V=y(()=>o.value===0),E=y(()=>o.value>=e.length-1),S=y(()=>!n.value.hasErrors),b=y(()=>n.value.isDirty),B=y(()=>n.value.errors);return{step:p,stepIndex:o,scope:s,next:r,prev:u,goTo:c,isFirst:V,isLast:E,status:n,errors:B,isValid:S,isDirty:b,validate:f,getErrors:g}}import{ref as oe,onUnmounted as ne,readonly as ie}from"vue";function ue(e){let t=d(),o=h(t.getState().values,e),s=oe(o),n=t.watch(e,i=>{T(s.value,i)||(s.value=i)});return ne(n),ie(s)}export{q as provideBitStore,z as useBitArray,$ as useBitField,W as useBitForm,Z as useBitScope,se as useBitSteps,d as useBitStore,ue as useBitWatch};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/store/bus.ts","../src/core/utils.ts","../src/devtools/ui/styles.ts","../src/devtools/ui/index.ts","../src/devtools/init-dev-tools.ts"],"names":["rootGlobal","id","state","fn","bitBus","deepClone","obj","item","clone","key","valueEqual","a","b","deepEqual","keysA","keysB","collectDirtyPaths","initial","prefix","result","allKeys","k","p"],"mappings":"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","file":"/Users/leandrocarol/Projetos/bit-form/dist/chunk-6VDQSKUN.cjs","sourcesContent":["export type BitBusListener = (storeId: string, newState: any) => void;\n\ninterface BitFormGlobal {\n stores: Record<string, any>;\n listeners: Set<BitBusListener>;\n dispatch: (storeId: string, state: any) => void;\n subscribe: (fn: BitBusListener) => () => void;\n}\n\ndeclare global {\n var __BIT_FORM__: BitFormGlobal | undefined;\n}\n\nconst rootGlobal =\n typeof globalThis !== \"undefined\"\n ? globalThis\n : ((typeof global !== \"undefined\" ? global : window) as any);\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\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)) 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","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 { 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"]}
|