@lehnihon/bit-form 2.2.26 → 2.2.28
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 +0 -28
- package/dist/angular/index.cjs +1 -1
- package/dist/angular/index.js +1 -1
- package/dist/{chunk-WYYVVM2C.js → chunk-3MWOSR4W.js} +2 -2
- package/dist/chunk-77RIH3KJ.js +2 -0
- package/dist/chunk-77RIH3KJ.js.map +1 -0
- package/dist/chunk-CTQXXT26.cjs +2 -0
- package/dist/{chunk-U6UFULNS.cjs.map → chunk-CTQXXT26.cjs.map} +1 -1
- package/dist/{chunk-GBHOCY7E.cjs → chunk-G6EG5AWJ.cjs} +2 -2
- package/dist/{chunk-GBHOCY7E.cjs.map → chunk-G6EG5AWJ.cjs.map} +1 -1
- package/dist/{chunk-WKLCAC74.cjs → chunk-KDNY7F5Q.cjs} +2 -2
- package/dist/{chunk-WKLCAC74.cjs.map → chunk-KDNY7F5Q.cjs.map} +1 -1
- package/dist/{chunk-EYCJKAK3.js → chunk-V22XASFK.js} +2 -2
- package/dist/core/store.cjs +1 -1
- package/dist/core/store.js +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.js +1 -1
- package/dist/devtools/bridge.cjs +1 -1
- package/dist/devtools/bridge.js +1 -1
- package/dist/devtools/index.cjs +49 -24
- package/dist/devtools/index.cjs.map +1 -1
- package/dist/devtools/index.d.cts +2 -0
- package/dist/devtools/index.d.ts +2 -0
- package/dist/devtools/index.js +49 -24
- package/dist/devtools/index.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react-native/index.cjs +1 -1
- package/dist/react-native/index.js +1 -1
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-7T7L2TZX.js +0 -2
- package/dist/chunk-7T7L2TZX.js.map +0 -1
- package/dist/chunk-U6UFULNS.cjs +0 -2
- /package/dist/{chunk-WYYVVM2C.js.map → chunk-3MWOSR4W.js.map} +0 -0
- /package/dist/{chunk-EYCJKAK3.js.map → chunk-V22XASFK.js.map} +0 -0
|
@@ -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
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
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 _chunkCTQXXT26cjs = require('./chunk-CTQXXT26.cjs');var _chunkH27ROY4Fcjs = require('./chunk-H27ROY4F.cjs');var _chunkRHMJPKNVcjs = require('./chunk-RHMJPKNV.cjs');var _chunkAV7YYSFIcjs = require('./chunk-AV7YYSFI.cjs');var _chunkOWDDAM6Ccjs = require('./chunk-OWDDAM6C.cjs');var _react = require('react');var _jsxruntime = require('react/jsx-runtime');var G=_react.createContext.call(void 0, null),vt= exports.a =({store:t,children:e})=>{let r=_react.useMemo.call(void 0, ()=>_chunkCTQXXT26cjs.d.call(void 0, t),[t]),n=_react.useRef.call(void 0, !1);return _react.useEffect.call(void 0, ()=>(n.current=!1,()=>{n.current=!0,queueMicrotask(()=>{n.current&&(n.current=!1,_optionalChain([r, 'access', _2 => _2.feature, 'optionalAccess', _3 => _3.cleanup, 'optionalCall', _4 => _4()]))})}),[r]),_jsxruntime.jsx.call(void 0, G.Provider,{value:r,children:e})},S= exports.b =()=>{let t=_react.useContext.call(void 0, G);if(!t)throw new Error("BitForm hooks devem ser usados dentro de um BitFormProvider");return t};function Mt(){let t=S(),[e,r]=_react.useState.call(void 0, null),[n,s]=_react.useState.call(void 0, null),o=_react.useRef.call(void 0, null),c=_react.useCallback.call(void 0, p=>_chunkH27ROY4Fcjs.b.call(void 0, t,p),[t]),l=_react.useCallback.call(void 0, ()=>{let p=_chunkH27ROY4Fcjs.a.call(void 0, t);return o.current&&o.current.isValid===p.isValid&&o.current.isDirty===p.isDirty&&o.current.isSubmitting===p.isSubmitting?o.current:(o.current=p,p)},[t]),i=_react.useSyncExternalStore.call(void 0, c,l,l),a=_react.useMemo.call(void 0, ()=>_chunkH27ROY4Fcjs.i.call(void 0, t,{clearSubmissionState:()=>{r(null),s(null)},setSubmissionResult:p=>{s(p)},setSubmissionError:p=>{r(p)}}),[t]),{controller:m,actions:P}=a,b=_react.useCallback.call(void 0, m.submit,[m]),g=_react.useCallback.call(void 0, m.onSubmit,[m]),y=_react.useCallback.call(void 0, m.reset,[m]),F=_react.useCallback.call(void 0, m.getValues,[m]),h=_react.useCallback.call(void 0, m.getErrors,[m]),u=_react.useCallback.call(void 0, m.getTouched,[m]),B=_react.useCallback.call(void 0, m.getDirtyValues,[m]),R=_react.useMemo.call(void 0, ()=>({...i,submitError:e,lastResponse:n}),[i,e,n]);return _react.useMemo.call(void 0, ()=>({meta:R,getValues:F,getErrors:h,getTouched:u,getDirtyValues:B,submit:b,onSubmit:g,reset:y,...P}),[R,F,h,u,B,b,g,y,P])}function jt(t){let e=S(),r=_react.useMemo.call(void 0, ()=>_chunkH27ROY4Fcjs.g.call(void 0, e,t),[e,t]),n=_react.useRef.call(void 0, null),s=_react.useCallback.call(void 0, ()=>{let i=r.readItems();return n.current&&_chunkOWDDAM6Ccjs.c.call(void 0, n.current,i)?n.current:(n.current=i,i)},[r]),o=_react.useCallback.call(void 0, i=>e.observe.subscribePath(t,()=>i()),[e,t]),c=_react.useSyncExternalStore.call(void 0, o,s,s),l=_react.useMemo.call(void 0, ()=>r.getFields(c),[r,c]);return _react.useEffect.call(void 0, ()=>()=>{_chunkH27ROY4Fcjs.k.call(void 0, e,`${t}.`)},[e,t]),_react.useMemo.call(void 0, ()=>({fields:l,length:c.length,append:r.append,prepend:r.prepend,insert:r.insert,remove:r.remove,move:r.move,swap:r.swap,replace:r.replace,clear:r.clear}),[l,c.length,r])}function Wt(t){let e=S(),r=_react.useRef.call(void 0, null),n=_react.useCallback.call(void 0, ()=>{let i=e.read.getScopeStatus(t);return r.current&&_chunkRHMJPKNVcjs.b.call(void 0, r.current,i)?r.current:(r.current=i,i)},[e,t]),s=_react.useCallback.call(void 0, i=>e.observe.subscribeScopeStatus(t,()=>i()),[e,t]),o=_react.useSyncExternalStore.call(void 0, s,n,n),c=_react.useCallback.call(void 0, async()=>{let i=await e.feature.validate({scope:t}),a=e.read.getScopeErrors(t);return{valid:i,errors:a}},[e,t]),l=_react.useCallback.call(void 0, ()=>e.read.getScopeErrors(t),[e,t]);return _react.useMemo.call(void 0, ()=>({scopeName:t,status:o,errors:o.errors,validate:c,getErrors:l,isValid:!o.hasErrors,isDirty:o.isDirty}),[t,o,c,l])}function Gt(t){if(t.length===0)throw new Error("useBitSteps: scopeNames must not be empty");let e=S(),[r,n]=_react.useState.call(void 0, 0),s=_nullishCoalesce(t[r], () => ("")),o=_react.useRef.call(void 0, null),c=_react.useRef.call(void 0, s);c.current=s;let l=_react.useRef.call(void 0, r);l.current=r;let i=_react.useCallback.call(void 0, ()=>{let u=e.read.getScopeStatus(s);return o.current&&_chunkRHMJPKNVcjs.b.call(void 0, o.current,u)?o.current:(o.current=u,u)},[e,s]),a=_react.useSyncExternalStore.call(void 0, _react.useCallback.call(void 0, u=>e.observe.subscribeScopeStatus(s,()=>u()),[e,s]),i,i),m=_react.useCallback.call(void 0, async()=>{let u=await e.feature.validate({scope:s}),B=e.read.getScopeErrors(s);return{valid:u,errors:B}},[e,s]),P=_react.useCallback.call(void 0, ()=>e.read.getScopeErrors(s),[e,s]),b=_react.useCallback.call(void 0, async()=>{let u=c.current,B=l.current,R=e.read.getScopeFields(u);if(e.feature.hasValidationsInProgress(R))return!1;let p=await e.feature.validate({scope:u});if(B!==l.current)return!1;if(p)n(M=>Math.min(M+1,t.length-1));else{let M=e.read.getScopeErrors(u),C=Object.keys(M);C.length>0&&e.write.markFieldsTouched(C)}return p},[e,t.length]),g=_react.useCallback.call(void 0, ()=>{n(u=>Math.max(u-1,0))},[]),y=_react.useCallback.call(void 0, u=>{n(Math.max(0,Math.min(u-1,t.length-1)))},[t.length]),F=r===0,h=r>=t.length-1;return _react.useMemo.call(void 0, ()=>({step:r+1,stepIndex:r,scope:s,next:b,prev:g,goTo:y,isFirst:F,isLast:h,status:a,errors:a.errors,isValid:!a.hasErrors,isDirty:a.isDirty,validate:m,getErrors:P}),[r,s,b,g,y,F,h,a,m,P])}function Zt(t){let e=S(),r=_react.useRef.call(void 0, null),n=_react.useCallback.call(void 0, ()=>{let o=_chunkOWDDAM6Ccjs.f.call(void 0, e.read.getState().values,t);return r.current!==null&&_chunkOWDDAM6Ccjs.c.call(void 0, r.current,o)?r.current:(r.current=o,o)},[e,t]),s=_react.useCallback.call(void 0, o=>e.observe.subscribePath(t,()=>o()),[e,t]);return _react.useSyncExternalStore.call(void 0, s,n,n)}function se(){let t=S(),e=_react.useCallback.call(void 0, a=>_chunkH27ROY4Fcjs.e.call(void 0, t,a),[t]),r=_react.useRef.call(void 0, null),n=_react.useCallback.call(void 0, ()=>{let a=_chunkH27ROY4Fcjs.d.call(void 0, t);return r.current&&r.current.isSaving===a.isSaving&&r.current.isRestoring===a.isRestoring&&r.current.error===a.error?r.current:(r.current=a,a)},[t]),s=_react.useSyncExternalStore.call(void 0, e,n,n),o=_react.useCallback.call(void 0, async()=>t.feature.restorePersisted(),[t]),c=_react.useCallback.call(void 0, async()=>{await t.feature.forceSave()},[t]),l=_react.useCallback.call(void 0, async()=>{await t.feature.clearPersisted()},[t]),i=_react.useMemo.call(void 0, ()=>({isSaving:s.isSaving,isRestoring:s.isRestoring,error:s.error}),[s]);return _react.useMemo.call(void 0, ()=>({restore:o,save:c,clear:l,meta:i}),[o,c,l,i])}function me(t){let e=S(),r=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>()=>_chunkH27ROY4Fcjs.j.call(void 0, e,t),[e,t]);let n=_react.useCallback.call(void 0, ()=>{let i=e.read.getFieldState(t),a=_chunkAV7YYSFIcjs.a.call(void 0, i,r.current);return r.current=a,a},[e,t]),s=_react.useCallback.call(void 0, i=>e.observe.subscribeFieldState(t,()=>i()),[e,t]),o=_react.useSyncExternalStore.call(void 0, s,n,n),c=_react.useCallback.call(void 0, i=>e.write.setField(t,i),[e,t]),l=_react.useCallback.call(void 0, ()=>e.write.blurField(t),[e,t]);return{fieldState:o,setValue:c,setBlur:l,store:e}}exports.a = vt; exports.b = S; exports.c = Mt; exports.d = me; exports.e = jt; exports.f = Wt; exports.g = Gt; exports.h = Zt; exports.i = se;
|
|
2
|
+
//# sourceMappingURL=chunk-KDNY7F5Q.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/builds/kenji.ccp-group/bit-form/dist/chunk-WKLCAC74.cjs","../src/react/context.tsx","../src/react/use-bit-form.ts","../src/react/use-bit-array.ts"],"names":["BitContext","createContext","BitFormProvider","store","children","adapted","useMemo","createFrameworkStoreAdapter","cleanupPendingRef","useRef","useEffect","jsx","useBitStore","useContext","useBitForm","submitError","setSubmitError","useState","lastResponse","setLastResponse","lastMeta","subscribeMeta","useCallback","cb","subscribeFormMetaSnapshot","getMetaSnapshot","nextMeta","readFormMetaSnapshot","metaState","useSyncExternalStore","binding","createFrameworkFormBinding","result","error","controller","actions","submit","onSubmit","reset","getValues","getErrors","getTouched","getDirtyValues","meta","useBitArray","path","createArrayBinding","lastSnapshotRef","getSnapshot","next","valueEqual","subscribeArray","data","fields","cleanupRegisteredPrefix"],"mappings":"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","file":"/builds/kenji.ccp-group/bit-form/dist/chunk-WKLCAC74.cjs","sourcesContent":[null,"import React, { createContext, useContext, useEffect, useMemo, useRef } from \"react\";\nimport type { BitFrameworkStoreApi, BitStoreApi } from \"../core\";\nimport { createFrameworkStoreAdapter } from \"../core\";\n\nconst BitContext = createContext<BitFrameworkStoreApi<any> | null>(null);\n\ninterface BitFormProviderProps<T extends object> {\n store: BitFrameworkStoreApi<T> | BitStoreApi<T>;\n children: React.ReactNode;\n}\n\ninterface BitFormProviderRuntimeProps {\n store: unknown;\n children: React.ReactNode;\n}\n\ntype BitFormProviderComponent = {\n <T extends object>(props: BitFormProviderProps<T>): React.ReactElement;\n (props: BitFormProviderRuntimeProps): React.ReactElement;\n};\n\nexport const BitFormProvider: BitFormProviderComponent = ({\n store,\n children,\n}: BitFormProviderRuntimeProps) => {\n const adapted = useMemo(() => createFrameworkStoreAdapter(store), [store]);\n const cleanupPendingRef = useRef(false);\n\n useEffect(() => {\n // On mount (including Strict Mode remount), cancel any pending cleanup.\n cleanupPendingRef.current = false;\n\n return () => {\n // On unmount, flag that cleanup is pending and defer to microtask.\n // React Strict Mode double-mounts (mount → unmount → mount)\n // synchronously. The remount resets cleanupPendingRef before the\n // microtask fires, so Strict Mode cycles are safely ignored.\n cleanupPendingRef.current = true;\n queueMicrotask(() => {\n if (cleanupPendingRef.current) {\n cleanupPendingRef.current = false;\n (adapted as any).feature?.cleanup?.();\n }\n });\n };\n }, [adapted]);\n\n return (\n <BitContext.Provider value={adapted}>\n {children}\n </BitContext.Provider>\n );\n};\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 BitFrameworkStoreApi<T>;\n};\n","import {\n useCallback,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport {\n createFrameworkFormBinding,\n readFormMetaSnapshot,\n subscribeFormMetaSnapshot,\n} from \"../core\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitFormResult } from \"./types\";\n\nexport function useBitForm<T extends object>(): UseBitFormResult<T> {\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<ReturnType<typeof readFormMetaSnapshot<T>> | null>(\n null,\n );\n\n const subscribeMeta = useCallback(\n (cb: () => void) => subscribeFormMetaSnapshot(store, cb),\n [store],\n );\n const getMetaSnapshot = useCallback(() => {\n const nextMeta = readFormMetaSnapshot(store);\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 metaState = useSyncExternalStore(\n subscribeMeta,\n getMetaSnapshot,\n getMetaSnapshot,\n );\n\n const binding = useMemo(\n () =>\n createFrameworkFormBinding(store, {\n clearSubmissionState: () => {\n setSubmitError(null);\n setLastResponse(null);\n },\n setSubmissionResult: (result) => {\n setLastResponse(result);\n },\n setSubmissionError: (error) => {\n setSubmitError(error);\n },\n }),\n [store],\n );\n\n const { controller, actions } = binding;\n\n const submit = useCallback(controller.submit, [controller]);\n const onSubmit = useCallback(controller.onSubmit, [controller]);\n const reset = useCallback(controller.reset, [controller]);\n\n const getValues = useCallback(controller.getValues, [controller]);\n const getErrors = useCallback(controller.getErrors, [controller]);\n const getTouched = useCallback(controller.getTouched, [controller]);\n const getDirtyValues = useCallback(controller.getDirtyValues, [controller]);\n\n const meta = useMemo(\n () => ({\n ...metaState,\n submitError,\n lastResponse,\n }),\n [metaState, submitError, lastResponse],\n );\n\n return useMemo(\n () => ({\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 ...actions,\n }),\n [\n meta,\n getValues,\n getErrors,\n getTouched,\n getDirtyValues,\n submit,\n onSubmit,\n reset,\n actions,\n ],\n );\n}\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n} from \"react\";\nimport {\n BitArrayPath,\n cleanupRegisteredPrefix,\n createArrayBinding,\n valueEqual,\n} from \"../core\";\nimport { useBitStore } from \"./context\";\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 const controller = useMemo(\n () => createArrayBinding<TForm, P>(store, path),\n [store, path],\n );\n type ArraySnapshot = ReturnType<typeof controller.readItems>;\n const lastSnapshotRef = useRef<ArraySnapshot | null>(null);\n\n const getSnapshot = useCallback(() => {\n const next = controller.readItems();\n\n if (lastSnapshotRef.current && valueEqual(lastSnapshotRef.current, next)) {\n return lastSnapshotRef.current;\n }\n\n lastSnapshotRef.current = next;\n return next;\n }, [controller]);\n\n const subscribeArray = useCallback(\n (cb: () => void) => store.observe.subscribePath(path, () => cb()),\n [store, path],\n );\n\n const data = useSyncExternalStore(subscribeArray, getSnapshot, getSnapshot);\n\n const fields = useMemo(() => controller.getFields(data), [controller, data]);\n\n useEffect(() => {\n return () => {\n cleanupRegisteredPrefix(store, `${path as string}.`);\n };\n }, [store, path]);\n\n return useMemo(\n () => ({\n fields,\n length: data.length,\n append: controller.append,\n prepend: controller.prepend,\n insert: controller.insert,\n remove: controller.remove,\n move: controller.move,\n swap: controller.swap,\n replace: controller.replace,\n clear: controller.clear,\n }),\n [fields, data.length, controller],\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/builds/kenji.ccp-group/bit-form/dist/chunk-KDNY7F5Q.cjs","../src/react/context.tsx","../src/react/use-bit-form.ts","../src/react/use-bit-array.ts"],"names":["BitContext","createContext","BitFormProvider","store","children","adapted","useMemo","createFrameworkStoreAdapter","cleanupPendingRef","useRef","useEffect","jsx","useBitStore","useContext","useBitForm","submitError","setSubmitError","useState","lastResponse","setLastResponse","lastMeta","subscribeMeta","useCallback","cb","subscribeFormMetaSnapshot","getMetaSnapshot","nextMeta","readFormMetaSnapshot","metaState","useSyncExternalStore","binding","createFrameworkFormBinding","result","error","controller","actions","submit","onSubmit","reset","getValues","getErrors","getTouched","getDirtyValues","meta","useBitArray","path","createArrayBinding","lastSnapshotRef","getSnapshot","next","valueEqual","subscribeArray","data","fields","cleanupRegisteredPrefix"],"mappings":"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","file":"/builds/kenji.ccp-group/bit-form/dist/chunk-KDNY7F5Q.cjs","sourcesContent":[null,"import React, { createContext, useContext, useEffect, useMemo, useRef } from \"react\";\nimport type { BitFrameworkStoreApi, BitStoreApi } from \"../core\";\nimport { createFrameworkStoreAdapter } from \"../core\";\n\nconst BitContext = createContext<BitFrameworkStoreApi<any> | null>(null);\n\ninterface BitFormProviderProps<T extends object> {\n store: BitFrameworkStoreApi<T> | BitStoreApi<T>;\n children: React.ReactNode;\n}\n\ninterface BitFormProviderRuntimeProps {\n store: unknown;\n children: React.ReactNode;\n}\n\ntype BitFormProviderComponent = {\n <T extends object>(props: BitFormProviderProps<T>): React.ReactElement;\n (props: BitFormProviderRuntimeProps): React.ReactElement;\n};\n\nexport const BitFormProvider: BitFormProviderComponent = ({\n store,\n children,\n}: BitFormProviderRuntimeProps) => {\n const adapted = useMemo(() => createFrameworkStoreAdapter(store), [store]);\n const cleanupPendingRef = useRef(false);\n\n useEffect(() => {\n // On mount (including Strict Mode remount), cancel any pending cleanup.\n cleanupPendingRef.current = false;\n\n return () => {\n // On unmount, flag that cleanup is pending and defer to microtask.\n // React Strict Mode double-mounts (mount → unmount → mount)\n // synchronously. The remount resets cleanupPendingRef before the\n // microtask fires, so Strict Mode cycles are safely ignored.\n cleanupPendingRef.current = true;\n queueMicrotask(() => {\n if (cleanupPendingRef.current) {\n cleanupPendingRef.current = false;\n (adapted as any).feature?.cleanup?.();\n }\n });\n };\n }, [adapted]);\n\n return (\n <BitContext.Provider value={adapted}>\n {children}\n </BitContext.Provider>\n );\n};\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 BitFrameworkStoreApi<T>;\n};\n","import {\n useCallback,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport {\n createFrameworkFormBinding,\n readFormMetaSnapshot,\n subscribeFormMetaSnapshot,\n} from \"../core\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitFormResult } from \"./types\";\n\nexport function useBitForm<T extends object>(): UseBitFormResult<T> {\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<ReturnType<typeof readFormMetaSnapshot<T>> | null>(\n null,\n );\n\n const subscribeMeta = useCallback(\n (cb: () => void) => subscribeFormMetaSnapshot(store, cb),\n [store],\n );\n const getMetaSnapshot = useCallback(() => {\n const nextMeta = readFormMetaSnapshot(store);\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 metaState = useSyncExternalStore(\n subscribeMeta,\n getMetaSnapshot,\n getMetaSnapshot,\n );\n\n const binding = useMemo(\n () =>\n createFrameworkFormBinding(store, {\n clearSubmissionState: () => {\n setSubmitError(null);\n setLastResponse(null);\n },\n setSubmissionResult: (result) => {\n setLastResponse(result);\n },\n setSubmissionError: (error) => {\n setSubmitError(error);\n },\n }),\n [store],\n );\n\n const { controller, actions } = binding;\n\n const submit = useCallback(controller.submit, [controller]);\n const onSubmit = useCallback(controller.onSubmit, [controller]);\n const reset = useCallback(controller.reset, [controller]);\n\n const getValues = useCallback(controller.getValues, [controller]);\n const getErrors = useCallback(controller.getErrors, [controller]);\n const getTouched = useCallback(controller.getTouched, [controller]);\n const getDirtyValues = useCallback(controller.getDirtyValues, [controller]);\n\n const meta = useMemo(\n () => ({\n ...metaState,\n submitError,\n lastResponse,\n }),\n [metaState, submitError, lastResponse],\n );\n\n return useMemo(\n () => ({\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 ...actions,\n }),\n [\n meta,\n getValues,\n getErrors,\n getTouched,\n getDirtyValues,\n submit,\n onSubmit,\n reset,\n actions,\n ],\n );\n}\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n} from \"react\";\nimport {\n BitArrayPath,\n cleanupRegisteredPrefix,\n createArrayBinding,\n valueEqual,\n} from \"../core\";\nimport { useBitStore } from \"./context\";\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 const controller = useMemo(\n () => createArrayBinding<TForm, P>(store, path),\n [store, path],\n );\n type ArraySnapshot = ReturnType<typeof controller.readItems>;\n const lastSnapshotRef = useRef<ArraySnapshot | null>(null);\n\n const getSnapshot = useCallback(() => {\n const next = controller.readItems();\n\n if (lastSnapshotRef.current && valueEqual(lastSnapshotRef.current, next)) {\n return lastSnapshotRef.current;\n }\n\n lastSnapshotRef.current = next;\n return next;\n }, [controller]);\n\n const subscribeArray = useCallback(\n (cb: () => void) => store.observe.subscribePath(path, () => cb()),\n [store, path],\n );\n\n const data = useSyncExternalStore(subscribeArray, getSnapshot, getSnapshot);\n\n const fields = useMemo(() => controller.getFields(data), [controller, data]);\n\n useEffect(() => {\n return () => {\n cleanupRegisteredPrefix(store, `${path as string}.`);\n };\n }, [store, path]);\n\n return useMemo(\n () => ({\n fields,\n length: data.length,\n append: controller.append,\n prepend: controller.prepend,\n insert: controller.insert,\n remove: controller.remove,\n move: controller.move,\n swap: controller.swap,\n replace: controller.replace,\n clear: controller.clear,\n }),\n [fields, data.length, controller],\n );\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as I}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{d as I}from"./chunk-77RIH3KJ.js";import{a as U,b as q,d as L,e as W,g as O,i as _,j as $,k as z}from"./chunk-L42NQRVD.js";import{b as T}from"./chunk-UIKO6GGW.js";import{a as j}from"./chunk-Y7TQTZY7.js";import{c as x,f as D}from"./chunk-UBVVBVLS.js";import{createContext as X,useContext as Y,useEffect as Z,useMemo as N,useRef as tt}from"react";import{jsx as et}from"react/jsx-runtime";var G=X(null),vt=({store:t,children:e})=>{let r=N(()=>I(t),[t]),n=tt(!1);return Z(()=>(n.current=!1,()=>{n.current=!0,queueMicrotask(()=>{n.current&&(n.current=!1,r.feature?.cleanup?.())})}),[r]),et(G.Provider,{value:r,children:e})},S=()=>{let t=Y(G);if(!t)throw new Error("BitForm hooks devem ser usados dentro de um BitFormProvider");return t};import{useCallback as d,useMemo as w,useRef as rt,useState as H,useSyncExternalStore as st}from"react";function Mt(){let t=S(),[e,r]=H(null),[n,s]=H(null),o=rt(null),c=d(p=>q(t,p),[t]),l=d(()=>{let p=U(t);return o.current&&o.current.isValid===p.isValid&&o.current.isDirty===p.isDirty&&o.current.isSubmitting===p.isSubmitting?o.current:(o.current=p,p)},[t]),i=st(c,l,l),a=w(()=>_(t,{clearSubmissionState:()=>{r(null),s(null)},setSubmissionResult:p=>{s(p)},setSubmissionError:p=>{r(p)}}),[t]),{controller:m,actions:P}=a,b=d(m.submit,[m]),g=d(m.onSubmit,[m]),y=d(m.reset,[m]),F=d(m.getValues,[m]),h=d(m.getErrors,[m]),u=d(m.getTouched,[m]),B=d(m.getDirtyValues,[m]),R=w(()=>({...i,submitError:e,lastResponse:n}),[i,e,n]);return w(()=>({meta:R,getValues:F,getErrors:h,getTouched:u,getDirtyValues:B,submit:b,onSubmit:g,reset:y,...P}),[R,F,h,u,B,b,g,y,P])}import{useCallback as J,useEffect as ot,useMemo as k,useRef as nt,useSyncExternalStore as it}from"react";function jt(t){let e=S(),r=k(()=>O(e,t),[e,t]),n=nt(null),s=J(()=>{let i=r.readItems();return n.current&&x(n.current,i)?n.current:(n.current=i,i)},[r]),o=J(i=>e.observe.subscribePath(t,()=>i()),[e,t]),c=it(o,s,s),l=k(()=>r.getFields(c),[r,c]);return ot(()=>()=>{z(e,`${t}.`)},[e,t]),k(()=>({fields:l,length:c.length,append:r.append,prepend:r.prepend,insert:r.insert,remove:r.remove,move:r.move,swap:r.swap,replace:r.replace,clear:r.clear}),[l,c.length,r])}import{useCallback as E,useMemo as at,useRef as ut,useSyncExternalStore as ct}from"react";function Wt(t){let e=S(),r=ut(null),n=E(()=>{let i=e.read.getScopeStatus(t);return r.current&&T(r.current,i)?r.current:(r.current=i,i)},[e,t]),s=E(i=>e.observe.subscribeScopeStatus(t,()=>i()),[e,t]),o=ct(s,n,n),c=E(async()=>{let i=await e.feature.validate({scope:t}),a=e.read.getScopeErrors(t);return{valid:i,errors:a}},[e,t]),l=E(()=>e.read.getScopeErrors(t),[e,t]);return at(()=>({scopeName:t,status:o,errors:o.errors,validate:c,getErrors:l,isValid:!o.hasErrors,isDirty:o.isDirty}),[t,o,c,l])}import{useCallback as f,useMemo as lt,useRef as A,useState as mt,useSyncExternalStore as pt}from"react";function Gt(t){if(t.length===0)throw new Error("useBitSteps: scopeNames must not be empty");let e=S(),[r,n]=mt(0),s=t[r]??"",o=A(null),c=A(s);c.current=s;let l=A(r);l.current=r;let i=f(()=>{let u=e.read.getScopeStatus(s);return o.current&&T(o.current,u)?o.current:(o.current=u,u)},[e,s]),a=pt(f(u=>e.observe.subscribeScopeStatus(s,()=>u()),[e,s]),i,i),m=f(async()=>{let u=await e.feature.validate({scope:s}),B=e.read.getScopeErrors(s);return{valid:u,errors:B}},[e,s]),P=f(()=>e.read.getScopeErrors(s),[e,s]),b=f(async()=>{let u=c.current,B=l.current,R=e.read.getScopeFields(u);if(e.feature.hasValidationsInProgress(R))return!1;let p=await e.feature.validate({scope:u});if(B!==l.current)return!1;if(p)n(M=>Math.min(M+1,t.length-1));else{let M=e.read.getScopeErrors(u),C=Object.keys(M);C.length>0&&e.write.markFieldsTouched(C)}return p},[e,t.length]),g=f(()=>{n(u=>Math.max(u-1,0))},[]),y=f(u=>{n(Math.max(0,Math.min(u-1,t.length-1)))},[t.length]),F=r===0,h=r>=t.length-1;return lt(()=>({step:r+1,stepIndex:r,scope:s,next:b,prev:g,goTo:y,isFirst:F,isLast:h,status:a,errors:a.errors,isValid:!a.hasErrors,isDirty:a.isDirty,validate:m,getErrors:P}),[r,s,b,g,y,F,h,a,m,P])}import{useCallback as K,useSyncExternalStore as St,useRef as dt}from"react";function Zt(t){let e=S(),r=dt(null),n=K(()=>{let o=D(e.read.getState().values,t);return r.current!==null&&x(r.current,o)?r.current:(r.current=o,o)},[e,t]),s=K(o=>e.observe.subscribePath(t,()=>o()),[e,t]);return St(s,n,n)}import{useCallback as v,useMemo as Q,useSyncExternalStore as ft,useRef as Bt}from"react";function se(){let t=S(),e=v(a=>W(t,a),[t]),r=Bt(null),n=v(()=>{let a=L(t);return r.current&&r.current.isSaving===a.isSaving&&r.current.isRestoring===a.isRestoring&&r.current.error===a.error?r.current:(r.current=a,a)},[t]),s=ft(e,n,n),o=v(async()=>t.feature.restorePersisted(),[t]),c=v(async()=>{await t.feature.forceSave()},[t]),l=v(async()=>{await t.feature.clearPersisted()},[t]),i=Q(()=>({isSaving:s.isSaving,isRestoring:s.isRestoring,error:s.error}),[s]);return Q(()=>({restore:o,save:c,clear:l,meta:i}),[o,c,l,i])}import{useCallback as V,useEffect as Pt,useRef as bt,useSyncExternalStore as gt}from"react";function me(t){let e=S(),r=bt(null);Pt(()=>()=>$(e,t),[e,t]);let n=V(()=>{let i=e.read.getFieldState(t),a=j(i,r.current);return r.current=a,a},[e,t]),s=V(i=>e.observe.subscribeFieldState(t,()=>i()),[e,t]),o=gt(s,n,n),c=V(i=>e.write.setField(t,i),[e,t]),l=V(()=>e.write.blurField(t),[e,t]);return{fieldState:o,setValue:c,setBlur:l,store:e}}export{vt as a,S as b,Mt as c,me as d,jt as e,Wt as f,Gt as g,Zt as h,se as i};
|
|
2
|
+
//# sourceMappingURL=chunk-V22XASFK.js.map
|
package/dist/core/store.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkCTQXXT26cjs = require('../chunk-CTQXXT26.cjs');require('../chunk-RHMJPKNV.cjs');require('../chunk-AV7YYSFI.cjs');require('../chunk-OWDDAM6C.cjs');require('../chunk-X3DGA5UC.cjs');exports.bitBus = _chunkCTQXXT26cjs.a; exports.createBitBus = _chunkCTQXXT26cjs.b; exports.createBitStore = _chunkCTQXXT26cjs.e; exports.createFrameworkStoreAdapter = _chunkCTQXXT26cjs.d; exports.extractFeatureSlice = _chunkCTQXXT26cjs.i; exports.extractObserveSlice = _chunkCTQXXT26cjs.g; exports.extractReadSlice = _chunkCTQXXT26cjs.f; exports.extractSlices = _chunkCTQXXT26cjs.j; exports.extractWriteSlice = _chunkCTQXXT26cjs.h; exports.resolveBitStoreForHooks = _chunkCTQXXT26cjs.c;
|
|
2
2
|
//# sourceMappingURL=store.cjs.map
|
package/dist/core/store.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a,b,c,d,e,f,g,h,i,j}from"../chunk-
|
|
1
|
+
import{a,b,c,d,e,f,g,h,i,j}from"../chunk-77RIH3KJ.js";import"../chunk-UIKO6GGW.js";import"../chunk-Y7TQTZY7.js";import"../chunk-UBVVBVLS.js";import"../chunk-MBEQLBJB.js";export{a as bitBus,b as createBitBus,e as createBitStore,d as createFrameworkStoreAdapter,i as extractFeatureSlice,g as extractObserveSlice,f as extractReadSlice,j as extractSlices,h as extractWriteSlice,c as resolveBitStoreForHooks};
|
|
2
2
|
//# sourceMappingURL=store.js.map
|
package/dist/core.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-W5CLDRRE.cjs');var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-W5CLDRRE.cjs');var _chunkCTQXXT26cjs = require('./chunk-CTQXXT26.cjs');var _chunkH27ROY4Fcjs = require('./chunk-H27ROY4F.cjs');var _chunkBSGJ3T5Scjs = require('./chunk-BSGJ3T5S.cjs');var _chunkRHMJPKNVcjs = require('./chunk-RHMJPKNV.cjs');var _chunkH6HGYVRVcjs = require('./chunk-H6HGYVRV.cjs');var _chunkAV7YYSFIcjs = require('./chunk-AV7YYSFI.cjs');var _chunkOWDDAM6Ccjs = require('./chunk-OWDDAM6C.cjs');require('./chunk-X3DGA5UC.cjs');var _chunk725CMNAVcjs = require('./chunk-725CMNAV.cjs');exports.areFieldSnapshotsEqual = _chunkAV7YYSFIcjs.b; exports.areScopeErrorsEqual = _chunkRHMJPKNVcjs.a; exports.bitBus = _chunkCTQXXT26cjs.a; exports.cleanPrefixedKeys = _chunkOWDDAM6Ccjs.j; exports.cleanupRegisteredField = _chunkH27ROY4Fcjs.j; exports.cleanupRegisteredPrefix = _chunkH27ROY4Fcjs.k; exports.createArrayBinding = _chunkH27ROY4Fcjs.g; exports.createBitBus = _chunkCTQXXT26cjs.b; exports.createBitStore = _chunkCTQXXT26cjs.e; exports.createFieldStateSnapshot = _chunkAV7YYSFIcjs.a; exports.createFrameworkFormBinding = _chunkH27ROY4Fcjs.i; exports.createFrameworkMaskedFieldBinding = _chunkH27ROY4Fcjs.h; exports.createFrameworkStoreAdapter = _chunkCTQXXT26cjs.d; exports.deepClone = _chunkOWDDAM6Ccjs.a; exports.deepEqual = _chunkOWDDAM6Ccjs.d; exports.deepMerge = _chunkOWDDAM6Ccjs.b; exports.deriveFieldMeta = _chunkH6HGYVRVcjs.a; exports.extractFeatureSlice = _chunkCTQXXT26cjs.i; exports.extractObserveSlice = _chunkCTQXXT26cjs.g; exports.extractReadSlice = _chunkCTQXXT26cjs.f; exports.extractServerErrors = _chunkOWDDAM6Ccjs.n; exports.extractSlices = _chunkCTQXXT26cjs.j; exports.extractWriteSlice = _chunkCTQXXT26cjs.h; exports.formatMaskedValue = _chunk725CMNAVcjs.b; exports.getDeepValue = _chunkOWDDAM6Ccjs.f; exports.getScopeSubscriptionPaths = _chunkRHMJPKNVcjs.c; exports.isBitFieldInputEventObject = _chunk725CMNAVcjs.a; exports.isHistoryMetaEqual = _chunkRHMJPKNVcjs.e; exports.isScopeStatusEqual = _chunkRHMJPKNVcjs.b; exports.isValidationErrorShape = _chunkOWDDAM6Ccjs.m; exports.observeFormMetaSnapshot = _chunkH27ROY4Fcjs.c; exports.observeHistoryMetaSnapshot = _chunkRHMJPKNVcjs.g; exports.observePersistMetaSnapshot = _chunkH27ROY4Fcjs.f; exports.observeScopeStatusSnapshot = _chunkBSGJ3T5Scjs.a; exports.parseMaskedInput = _chunk725CMNAVcjs.c; exports.readFormMetaSnapshot = _chunkH27ROY4Fcjs.a; exports.readHistoryMetaSnapshot = _chunkRHMJPKNVcjs.f; exports.readPersistMetaSnapshot = _chunkH27ROY4Fcjs.d; exports.resolveBitStoreForHooks = _chunkCTQXXT26cjs.c; exports.setDeepValue = _chunkOWDDAM6Ccjs.g; exports.subscribeFormMetaSnapshot = _chunkH27ROY4Fcjs.b; exports.subscribePersistMetaSnapshot = _chunkH27ROY4Fcjs.e; exports.valueEqual = _chunkOWDDAM6Ccjs.c;
|
|
2
2
|
//# sourceMappingURL=core.cjs.map
|
package/dist/core.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./chunk-5NA2TFPG.js";import{a as j,b as k,c as t,d as u,e as v,f as w,g as x,h as y,i as z,j as A}from"./chunk-
|
|
1
|
+
import"./chunk-5NA2TFPG.js";import{a as j,b as k,c as t,d as u,e as v,f as w,g as x,h as y,i as z,j as A}from"./chunk-77RIH3KJ.js";import{a as B,b as C,c as D,d as E,e as F,f as G,g as H,h as L,i as M,j as N,k as O}from"./chunk-L42NQRVD.js";import{a as P}from"./chunk-W2E5UIXT.js";import{a as l,b as m,c as n,e as o,f as p,g as q}from"./chunk-UIKO6GGW.js";import{a as Q}from"./chunk-L57KMBXS.js";import{a as r,b as s}from"./chunk-Y7TQTZY7.js";import{a,b,c,d,f as e,g as f,j as g,m as h,n as i}from"./chunk-UBVVBVLS.js";import"./chunk-MBEQLBJB.js";import{a as I,b as J,c as K}from"./chunk-DGEGYNQL.js";export{s as areFieldSnapshotsEqual,l as areScopeErrorsEqual,j as bitBus,g as cleanPrefixedKeys,N as cleanupRegisteredField,O as cleanupRegisteredPrefix,H as createArrayBinding,k as createBitBus,v as createBitStore,r as createFieldStateSnapshot,M as createFrameworkFormBinding,L as createFrameworkMaskedFieldBinding,u as createFrameworkStoreAdapter,a as deepClone,d as deepEqual,b as deepMerge,Q as deriveFieldMeta,z as extractFeatureSlice,x as extractObserveSlice,w as extractReadSlice,i as extractServerErrors,A as extractSlices,y as extractWriteSlice,J as formatMaskedValue,e as getDeepValue,n as getScopeSubscriptionPaths,I as isBitFieldInputEventObject,o as isHistoryMetaEqual,m as isScopeStatusEqual,h as isValidationErrorShape,D as observeFormMetaSnapshot,q as observeHistoryMetaSnapshot,G as observePersistMetaSnapshot,P as observeScopeStatusSnapshot,K as parseMaskedInput,B as readFormMetaSnapshot,p as readHistoryMetaSnapshot,E as readPersistMetaSnapshot,t as resolveBitStoreForHooks,f as setDeepValue,C as subscribeFormMetaSnapshot,F as subscribePersistMetaSnapshot,c as valueEqual};
|
|
2
2
|
//# sourceMappingURL=core.js.map
|
package/dist/devtools/bridge.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkG6EG5AWJcjs = require('../chunk-G6EG5AWJ.cjs');require('../chunk-QKGTVKBU.cjs');require('../chunk-W5CLDRRE.cjs');require('../chunk-CTQXXT26.cjs');require('../chunk-H27ROY4F.cjs');require('../chunk-BSGJ3T5S.cjs');require('../chunk-RHMJPKNV.cjs');require('../chunk-H6HGYVRV.cjs');require('../chunk-AV7YYSFI.cjs');require('../chunk-OWDDAM6C.cjs');require('../chunk-X3DGA5UC.cjs');require('../chunk-725CMNAV.cjs');exports.setupRemoteBridge = _chunkG6EG5AWJcjs.c;
|
|
2
2
|
//# sourceMappingURL=bridge.cjs.map
|
package/dist/devtools/bridge.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as a}from"../chunk-
|
|
1
|
+
import{c as a}from"../chunk-3MWOSR4W.js";import"../chunk-K5X37E3U.js";import"../chunk-5NA2TFPG.js";import"../chunk-77RIH3KJ.js";import"../chunk-L42NQRVD.js";import"../chunk-W2E5UIXT.js";import"../chunk-UIKO6GGW.js";import"../chunk-L57KMBXS.js";import"../chunk-Y7TQTZY7.js";import"../chunk-UBVVBVLS.js";import"../chunk-MBEQLBJB.js";import"../chunk-DGEGYNQL.js";export{a as setupRemoteBridge};
|
|
2
2
|
//# sourceMappingURL=bridge.js.map
|
package/dist/devtools/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
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 _class;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 _class;var _chunkG6EG5AWJcjs = require('../chunk-G6EG5AWJ.cjs');var _chunkQKGTVKBUcjs = require('../chunk-QKGTVKBU.cjs');require('../chunk-W5CLDRRE.cjs');var _chunkCTQXXT26cjs = require('../chunk-CTQXXT26.cjs');require('../chunk-H27ROY4F.cjs');require('../chunk-BSGJ3T5S.cjs');require('../chunk-RHMJPKNV.cjs');require('../chunk-H6HGYVRV.cjs');require('../chunk-AV7YYSFI.cjs');require('../chunk-OWDDAM6C.cjs');require('../chunk-X3DGA5UC.cjs');require('../chunk-725CMNAV.cjs');function E(){return`
|
|
2
2
|
.bit-devtools-container {
|
|
3
3
|
position: fixed;
|
|
4
4
|
bottom: 20px;
|
|
@@ -75,6 +75,31 @@
|
|
|
75
75
|
.badge-warn { background: rgba(245, 158, 11, 0.2); color: #fbbf24; border: 1px solid rgba(245, 158, 11, 0.2); }
|
|
76
76
|
.badge-info { background: rgba(56, 189, 248, 0.2); color: #7dd3fc; border: 1px solid rgba(56, 189, 248, 0.2); }
|
|
77
77
|
|
|
78
|
+
.bit-devtools-tabs {
|
|
79
|
+
display: flex;
|
|
80
|
+
gap: 4px;
|
|
81
|
+
padding: 8px 0 0 0;
|
|
82
|
+
border-bottom: 1px solid #1e293b;
|
|
83
|
+
}
|
|
84
|
+
.bit-devtools-tab {
|
|
85
|
+
background: transparent;
|
|
86
|
+
color: #94a3b8;
|
|
87
|
+
border: none;
|
|
88
|
+
border-bottom: 2px solid transparent;
|
|
89
|
+
padding: 6px 12px;
|
|
90
|
+
font-size: 12px;
|
|
91
|
+
font-family: inherit;
|
|
92
|
+
cursor: pointer;
|
|
93
|
+
transition: all 0.2s;
|
|
94
|
+
border-radius: 4px 4px 0 0;
|
|
95
|
+
}
|
|
96
|
+
.bit-devtools-tab:hover { color: #e2e8f0; background: rgba(255,255,255,0.05); }
|
|
97
|
+
.bit-devtools-tab.active {
|
|
98
|
+
color: #38bdf8;
|
|
99
|
+
border-bottom-color: #38bdf8;
|
|
100
|
+
background: rgba(56, 189, 248, 0.08);
|
|
101
|
+
}
|
|
102
|
+
|
|
78
103
|
.bit-section-title { font-size: 11px; color: #94a3b8; text-transform: uppercase; letter-spacing: 1px; margin: 12px 0 4px 0; display: block; }
|
|
79
104
|
|
|
80
105
|
.bit-controls { display: flex; gap: 6px; margin-bottom: 12px; background: #0f172a; padding: 8px; border-radius: 6px; }
|
|
@@ -86,48 +111,48 @@
|
|
|
86
111
|
|
|
87
112
|
pre.bit-pre { background: #020617; padding: 10px; border-radius: 4px; font-size: 11px; overflow-x: auto; border: 1px solid #1e293b; margin: 0; color: #e2e8f0; }
|
|
88
113
|
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; }
|
|
89
|
-
`}function
|
|
90
|
-
<div class="bit-devtools-panel">
|
|
91
|
-
<div class="bit-devtools-header">
|
|
92
|
-
<h2><span style="font-size: 20px;">\u{1F6E0}</span> Bit-Form DevTools</h2>
|
|
93
|
-
<span style="font-size: 11px; color: #64748b;">v1.0.0</span>
|
|
94
|
-
</div>
|
|
95
|
-
`;for(let[o,r]of s){let n=Object.keys(r.errors||{}).length>0,a=r._meta||{totalSteps:0,currentIndex:-1,canUndo:!1,canRedo:!1},c=a.currentIndex+1,p=a.totalSteps;i+=`
|
|
114
|
+
`}function p(s){return s.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function O(s){try{return JSON.stringify(s,null,2)}catch (e2){return"[Unserializable]"}}var b= (_class =class{__init() {this.currentStoresState={}}__init2() {this.isOpen=!1}__init3() {this.activeStoreId=null}constructor(r,i){;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);_class.prototype.__init3.call(this);if(this.container=r,this.actions=i,!document.getElementById("bit-devtools-styles")){let t=document.createElement("style");t.id="bit-devtools-styles",t.textContent=E(),document.head.appendChild(t)}this.rootElement=document.createElement("div"),this.rootElement.className="bit-devtools-container",this.container.appendChild(this.rootElement),this.rootElement.addEventListener("click",t=>{let e=t.target;if(e.closest(".bit-devtools-trigger")){this.isOpen=!this.isOpen,this.render();return}let a=e.closest(".bit-devtools-tab");if(a){let n=a.getAttribute("data-store");n&&(this.activeStoreId=n,this.render());return}let o=e.closest(".bit-action-btn");if(o&&!o.hasAttribute("disabled")){let n=o.getAttribute("data-action"),d=o.getAttribute("data-store");n&&d&&(n==="undo"&&this.actions.onUndo(d),n==="redo"&&this.actions.onRedo(d),n==="reset"&&this.actions.onReset(d))}})}updateState(r){this.currentStoresState=r,this.render()}renderStoreBlock(r,i){let t=Object.keys(i.errors||{}).length>0,e=i._meta||{totalSteps:0,currentIndex:-1,canUndo:!1,canRedo:!1},a=e.currentIndex+1,o=e.totalSteps,n=`
|
|
96
115
|
<div class="bit-store-block">
|
|
97
116
|
<div class="bit-store-header">
|
|
98
|
-
<h3 class="bit-store-title">${
|
|
117
|
+
<h3 class="bit-store-title">${p(r)}</h3>
|
|
99
118
|
<div class="bit-badge-group">
|
|
100
|
-
<span class="bit-badge ${
|
|
101
|
-
${
|
|
119
|
+
<span class="bit-badge ${i.isValid?"badge-success":"badge-error"}">
|
|
120
|
+
${i.isValid?"\u2713 Valid":"\u2715 Invalid"}
|
|
102
121
|
</span>
|
|
103
|
-
${
|
|
104
|
-
${
|
|
122
|
+
${i.isDirty?'<span class="bit-badge badge-warn">Dirty</span>':""}
|
|
123
|
+
${i.isSubmitting?'<span class="bit-badge badge-info">\u23F3 Submitting</span>':""}
|
|
105
124
|
</div>
|
|
106
125
|
</div>
|
|
107
126
|
|
|
108
|
-
<span class="bit-section-title">Time Travel (${
|
|
109
|
-
|
|
127
|
+
<span class="bit-section-title">Time Travel (${a}/${o})</span>
|
|
128
|
+
|
|
110
129
|
<div class="bit-controls">
|
|
111
|
-
<button class="bit-action-btn" data-action="undo" data-store="${
|
|
130
|
+
<button class="bit-action-btn" data-action="undo" data-store="${p(r)}" ${e.canUndo?"":"disabled"}>
|
|
112
131
|
<span>\u21BA</span> Undo
|
|
113
132
|
</button>
|
|
114
|
-
<button class="bit-action-btn" data-action="redo" data-store="${
|
|
133
|
+
<button class="bit-action-btn" data-action="redo" data-store="${p(r)}" ${e.canRedo?"":"disabled"}>
|
|
115
134
|
<span>\u21BB</span> Redo
|
|
116
135
|
</button>
|
|
117
|
-
<button class="bit-action-btn bit-btn-reset" data-action="reset" data-store="${
|
|
136
|
+
<button class="bit-action-btn bit-btn-reset" data-action="reset" data-store="${p(r)}">
|
|
118
137
|
<span>\u{1F5D1}</span> Reset
|
|
119
138
|
</button>
|
|
120
139
|
</div>
|
|
121
|
-
|
|
140
|
+
`;return t&&(n+=`
|
|
122
141
|
<span class="bit-section-title" style="color: #f87171;">\u26A0\uFE0F Validations Failing</span>
|
|
123
|
-
<pre class="bit-error-box">${
|
|
124
|
-
`),
|
|
142
|
+
<pre class="bit-error-box">${O(i.errors)}</pre>
|
|
143
|
+
`),n+=`
|
|
125
144
|
<span class="bit-section-title">Values</span>
|
|
126
|
-
<pre class="bit-pre">${
|
|
145
|
+
<pre class="bit-pre">${O(i.values)}</pre>
|
|
146
|
+
</div>
|
|
147
|
+
`,n}render(){let r=Object.entries(this.currentStoresState);if(r.length===0){this.activeStoreId=null,this.rootElement.innerHTML="";return}let i=this.activeStoreId;(!this.activeStoreId||!r.some(([o])=>o===this.activeStoreId))&&(this.activeStoreId=_nullishCoalesce(_optionalChain([r, 'access', _ => _[0], 'optionalAccess', _2 => _2[0]]), () => (null)));let t=0;if(this.isOpen){let o=this.rootElement.querySelector(".bit-devtools-panel");o&&(t=o.scrollTop)}let e="";if(this.isOpen){if(e=`
|
|
148
|
+
<div class="bit-devtools-panel">
|
|
149
|
+
<div class="bit-devtools-header">
|
|
150
|
+
<h2><span style="font-size: 20px;">\u{1F6E0}</span> Bit-Form DevTools</h2>
|
|
151
|
+
<span style="font-size: 11px; color: #64748b;">v1.0.0</span>
|
|
127
152
|
</div>
|
|
128
|
-
|
|
153
|
+
`,r.length>=2){e+='<div class="bit-devtools-tabs">';for(let[n]of r){let d=n===this.activeStoreId;e+=`<button class="bit-devtools-tab${d?" active":""}" data-store="${p(n)}">${p(n)}</button>`}e+="</div>"}let o=_nullishCoalesce(r.find(([n])=>n===this.activeStoreId), () => (r[0]));e+=this.renderStoreBlock(o[0],o[1]),e+="</div>"}let a=`
|
|
129
154
|
<button class="bit-devtools-trigger" style="transform: ${this.isOpen?"scale(0.9)":"scale(1)"};" title="Abrir DevTools">
|
|
130
155
|
${this.isOpen?"\u2716":"Bit"}
|
|
131
156
|
</button>
|
|
132
|
-
`;this.rootElement.innerHTML=i
|
|
157
|
+
`;if(this.rootElement.innerHTML=e+a,this.isOpen&&this.activeStoreId===i&&t>0){let o=this.rootElement.querySelector(".bit-devtools-panel");o&&(o.scrollTop=t)}}}, _class);function M(s,r=_chunkCTQXXT26cjs.a){let i=new b(s,{onUndo:o=>_optionalChain([_chunkG6EG5AWJcjs.b.call(void 0, r.stores,o), 'optionalAccess', _3 => _3.undo, 'call', _4 => _4()]),onRedo:o=>_optionalChain([_chunkG6EG5AWJcjs.b.call(void 0, r.stores,o), 'optionalAccess', _5 => _5.redo, 'call', _6 => _6()]),onReset:o=>_optionalChain([_chunkG6EG5AWJcjs.b.call(void 0, r.stores,o), 'optionalAccess', _7 => _7.reset, 'call', _8 => _8()])}),t=()=>_chunkG6EG5AWJcjs.a.call(void 0, r.stores);i.updateState(t());let e,a=r.subscribe(()=>{e===void 0&&(e=requestAnimationFrame(()=>{e=void 0,i.updateState(t())}))});return{ui:i,destroy:()=>{e!==void 0&&cancelAnimationFrame(e),a(),s.innerHTML=""}}}function k(s,r="ws://localhost:3000",i){let t=null,e=l=>{if(_optionalChain([t, 'optionalAccess', _9 => _9.readyState])===WebSocket.OPEN)try{t.send(JSON.stringify(l))}catch(c){console.warn("[bit-form] Failed to send message:",c)}else console.warn("[bit-form] Tentativa de envio falhou. WebSocket n\xE3o est\xE1 aberto.")},a=(l,c)=>{e({type:"ACTION",protocolVersion:1,payload:{storeId:l,action:c}})},o=new b(s,{onUndo:l=>a(l,"undo"),onRedo:l=>a(l,"redo"),onReset:l=>a(l,"reset")}),n=!1,d,f=0,x=3e4;function w(){t&&(t.addEventListener("open",()=>{f=0,e({type:"HELLO",protocolVersion:1,payload:{role:"client",protocolVersion:1}}),console.log(`[bit-form] Conectado ao DevTools remoto em ${r}`)}),t.addEventListener("message",l=>{try{let c=JSON.parse(l.data);_chunkQKGTVKBUcjs.d.call(void 0, c)&&o.updateState(c.payload)}catch(c){console.error("[bit-form] Erro ao processar mensagem do WebSocket:",c)}}),t.addEventListener("error",l=>{console.error("[bit-form] Erro na conex\xE3o do DevTools remoto:",l)}),t.addEventListener("close",()=>{if(n)return;console.log("[bit-form] Conex\xE3o DevTools remota fechada. Reconectando...");let c=Math.min(1e3*Math.pow(2,f),x)*(.5+Math.random()*.5);f++,d=setTimeout(()=>{n||g()},c)}))}function g(){t&&(t.onopen=null,t.onmessage=null,t.onerror=null,t.onclose=null,(t.readyState===WebSocket.OPEN||t.readyState===WebSocket.CONNECTING)&&t.close());try{t=new WebSocket(r)}catch(l){console.error("[bit-form] Failed to create WebSocket for remote devtools:",l);let h=Math.min(1e3*Math.pow(2,f),x)*(.5+Math.random()*.5);f++,n||(d=setTimeout(()=>{n||g()},h));return}w()}return g(),{ui:o,destroy:()=>{n=!0,d&&(clearTimeout(d),d=void 0),t&&(t.readyState===WebSocket.OPEN||t.readyState===WebSocket.CONNECTING)&&t.close(),s.innerHTML=""}}}function v(s={}){let{mode:r="local",url:i,bus:t}=s,e,a=!1;if(typeof s.container=="string"){let n=document.querySelector(s.container);if(!n)throw new Error(`[bit-form] Container '${s.container}' n\xE3o encontrado na p\xE1gina.`);e=n}else s.container instanceof HTMLElement?e=s.container:(e=document.createElement("div"),e.id="bit-form-devtools-root",e.style.position="fixed",e.style.bottom="20px",e.style.right="20px",e.style.zIndex="9999",e.style.maxHeight="80vh",e.style.overflowY="auto",e.style.boxShadow="0 10px 25px rgba(0,0,0,0.1)",document.body.appendChild(e),a=!0);let o;if(r==="local")console.log("[bit-form] DevTools iniciado em modo Local."),o=M(e,t);else if(r==="remote")console.log("[bit-form] DevTools iniciado em modo Remote."),o=k(e,i,t);else throw new Error(`[bit-form] Modo DevTools inv\xE1lido: ${r}`);return{...o,destroy:()=>{o&&typeof o.destroy=="function"&&o.destroy(),a&&e.parentNode?e.parentNode.removeChild(e):e.innerHTML=""}}}function L(s){return typeof s=="boolean"?{enabled:s,mode:"local"}:{enabled:!!s,mode:_nullishCoalesce(_optionalChain([s, 'optionalAccess', _10 => _10.mode]), () => ("local")),url:_optionalChain([s, 'optionalAccess', _11 => _11.url])}}function A(){return typeof process<"u"&&typeof process.env<"u"&&process.env.NODE_ENV==="production"?!0:(typeof process<"u"&&typeof process.env<"u"&&process.env.VITEST==="true",!1)}function R(s){return{name:"bit-devtools",setup:r=>{let i=L(_nullishCoalesce(s, () => (r.getConfig().devTools)));if(!i.enabled||A()&&s!==!0)return;let t=null,e=r.getConfig().bus;try{if(i.mode==="remote")t=_chunkG6EG5AWJcjs.c.call(void 0, i.url||"ws://localhost:3000",e);else{let a=v({bus:e});t=a&&typeof a.destroy=="function"?a.destroy:null}}catch (e3){}return()=>{t&&(t(),t=null)}}}}exports.DEVTOOLS_PROTOCOL_VERSION = _chunkQKGTVKBUcjs.a; exports.createDevToolsPlugin = R; exports.initDevTools = v;
|
|
133
158
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/builds/kenji.ccp-group/bit-form/dist/devtools/index.cjs","../../src/devtools/ui/styles.ts","../../src/devtools/ui/index.ts","../../src/devtools/adapters/local.ts","../../src/devtools/adapters/remote.ts"],"names":["getDevToolsCSS","escapeHtml","str","safeJsonStringify","value","BitFormDevToolsUI","container","actions","style","target","btn","action","storeId","storesState","storeEntries","panelHtml","id","state","hasErrors","meta","currentStep","totalSteps","triggerHtml","setupLocalDevTools","bus","bitBus","ui","getDevToolsActionableStore","getFullSnapshot","createDevToolsSnapshotMap","rafId","unsubscribe","setupRemoteDevTools","url","_bus","socket","sendMessage","message","e","sendAction","destroyed","reconnectTimer","retries","MAX_RETRY_DELAY","attachListeners"],"mappings":"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","file":"/builds/kenji.ccp-group/bit-form/dist/devtools/index.cjs","sourcesContent":[null,"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\";\nimport type { DevToolsStoreSnapshots } from \"../protocol\";\n\nexport type { DevToolsActions };\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\n}\n\nfunction safeJsonStringify(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return \"[Unserializable]\";\n }\n}\n\nexport class BitFormDevToolsUI {\n private container: HTMLElement;\n private actions: DevToolsActions;\n private rootElement: HTMLDivElement;\n private currentStoresState: DevToolsStoreSnapshots = {};\n private isOpen = 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: DevToolsStoreSnapshots) {\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\">${escapeHtml(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=\"${escapeHtml(id)}\" ${meta.canUndo ? \"\" : \"disabled\"}>\n <span>↺</span> Undo\n </button>\n <button class=\"bit-action-btn\" data-action=\"redo\" data-store=\"${escapeHtml(id)}\" ${meta.canRedo ? \"\" : \"disabled\"}>\n <span>↻</span> Redo\n </button>\n <button class=\"bit-action-btn bit-btn-reset\" data-action=\"reset\" data-store=\"${escapeHtml(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\">${safeJsonStringify(state.errors)}</pre>\n `;\n }\n\n panelHtml += `\n <span class=\"bit-section-title\">Values</span>\n <pre class=\"bit-pre\">${safeJsonStringify(state.values)}</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 { BitBus } from \"../../core\";\nimport { BitFormDevToolsUI } from \"../ui\";\nimport { createDevToolsSnapshotMap } from \"../store-snapshot\";\nimport { getDevToolsActionableStore } from \"../store-port\";\n\nexport function setupLocalDevTools(\n container: HTMLElement,\n bus: BitBus = bitBus,\n) {\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => getDevToolsActionableStore(bus.stores, id)?.undo(),\n onRedo: (id) => getDevToolsActionableStore(bus.stores, id)?.redo(),\n onReset: (id) => getDevToolsActionableStore(bus.stores, id)?.reset(),\n });\n\n const getFullSnapshot = () => createDevToolsSnapshotMap(bus.stores);\n\n ui.updateState(getFullSnapshot());\n\n let rafId: number | undefined;\n const unsubscribe = bus.subscribe(() => {\n if (rafId !== undefined) return;\n rafId = requestAnimationFrame(() => {\n rafId = undefined;\n ui.updateState(getFullSnapshot());\n });\n });\n\n return {\n ui,\n destroy: () => {\n if (rafId !== undefined) cancelAnimationFrame(rafId);\n unsubscribe();\n container.innerHTML = \"\";\n },\n };\n}\n","import { BitFormDevToolsUI } from \"../ui\";\nimport type { BitBus } from \"../../core\";\nimport type {\n DevToolsHelloMessage,\n DevToolsActionMessage,\n DevToolsActionName,\n DevToolsRemoteMessage,\n} from \"../types\";\nimport {\n DEVTOOLS_PROTOCOL_VERSION,\n isDevToolsStateUpdateMessage,\n} from \"../protocol\";\n\nexport function setupRemoteDevTools(\n container: HTMLElement,\n url: string = \"ws://localhost:3000\",\n _bus?: BitBus,\n) {\n let socket: WebSocket | null = null;\n\n const sendMessage = (message: DevToolsRemoteMessage) => {\n if (socket?.readyState === WebSocket.OPEN) {\n try {\n socket.send(JSON.stringify(message));\n } catch (e) {\n console.warn(\"[bit-form] Failed to send message:\", e);\n }\n } else {\n console.warn(\n \"[bit-form] Tentativa de envio falhou. WebSocket não está aberto.\",\n );\n }\n };\n\n const sendAction = (storeId: string, action: DevToolsActionName) => {\n const message: DevToolsActionMessage = {\n type: \"ACTION\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload: { storeId, action },\n };\n sendMessage(message);\n };\n\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => sendAction(id, \"undo\"),\n onRedo: (id) => sendAction(id, \"redo\"),\n onReset: (id) => sendAction(id, \"reset\"),\n });\n\n let destroyed = false;\n let reconnectTimer: ReturnType<typeof setTimeout> | undefined;\n let retries = 0;\n const MAX_RETRY_DELAY = 30000;\n\n function attachListeners() {\n if (!socket) return;\n\n socket.addEventListener(\"open\", () => {\n retries = 0;\n const helloMessage: DevToolsHelloMessage = {\n type: \"HELLO\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload: { role: \"client\", protocolVersion: DEVTOOLS_PROTOCOL_VERSION },\n };\n\n sendMessage(helloMessage);\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) as DevToolsRemoteMessage;\n if (isDevToolsStateUpdateMessage(data)) {\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 socket.addEventListener(\"close\", () => {\n if (destroyed) return;\n console.log(\"[bit-form] Conexão DevTools remota fechada. Reconectando...\");\n const delay = Math.min(1000 * Math.pow(2, retries), MAX_RETRY_DELAY);\n const jitter = delay * (0.5 + Math.random() * 0.5);\n retries++;\n reconnectTimer = setTimeout(() => {\n if (destroyed) return;\n connect();\n }, jitter);\n });\n }\n\n function connect() {\n if (socket) {\n socket.onopen = null;\n socket.onmessage = null;\n socket.onerror = null;\n socket.onclose = null;\n if (socket.readyState === WebSocket.OPEN || socket.readyState === WebSocket.CONNECTING) {\n socket.close();\n }\n }\n try {\n socket = new WebSocket(url);\n } catch (e) {\n console.error(\"[bit-form] Failed to create WebSocket for remote devtools:\", e);\n const delay = Math.min(1000 * Math.pow(2, retries), MAX_RETRY_DELAY);\n const jitter = delay * (0.5 + Math.random() * 0.5);\n retries++;\n if (!destroyed) {\n reconnectTimer = setTimeout(() => {\n if (destroyed) return;\n connect();\n }, jitter);\n }\n return;\n }\n attachListeners();\n }\n\n connect();\n\n return {\n ui,\n destroy: () => {\n destroyed = true;\n if (reconnectTimer) {\n clearTimeout(reconnectTimer);\n reconnectTimer = undefined;\n }\n if (\n socket &&\n (socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING)\n ) {\n socket.close();\n }\n container.innerHTML = \"\";\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/builds/kenji.ccp-group/bit-form/dist/devtools/index.cjs","../../src/devtools/ui/styles.ts","../../src/devtools/ui/index.ts","../../src/devtools/adapters/local.ts","../../src/devtools/adapters/remote.ts"],"names":["getDevToolsCSS","escapeHtml","str","safeJsonStringify","value","BitFormDevToolsUI","container","actions","style","e","target","tab","storeId","btn","action","storesState","id","state","hasErrors","meta","currentStep","totalSteps","html","storeEntries","prevActiveStoreId","savedScrollTop","panel","panelHtml","isActive","activeEntry","triggerHtml","setupLocalDevTools","bus","bitBus","ui","getDevToolsActionableStore","getFullSnapshot","createDevToolsSnapshotMap","rafId","unsubscribe","setupRemoteDevTools","url","_bus","socket","sendMessage","message","sendAction","destroyed","reconnectTimer","retries","MAX_RETRY_DELAY","attachListeners"],"mappings":"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","file":"/builds/kenji.ccp-group/bit-form/dist/devtools/index.cjs","sourcesContent":[null,"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-devtools-tabs {\n display: flex;\n gap: 4px;\n padding: 8px 0 0 0;\n border-bottom: 1px solid #1e293b;\n }\n .bit-devtools-tab {\n background: transparent;\n color: #94a3b8;\n border: none;\n border-bottom: 2px solid transparent;\n padding: 6px 12px;\n font-size: 12px;\n font-family: inherit;\n cursor: pointer;\n transition: all 0.2s;\n border-radius: 4px 4px 0 0;\n }\n .bit-devtools-tab:hover { color: #e2e8f0; background: rgba(255,255,255,0.05); }\n .bit-devtools-tab.active {\n color: #38bdf8;\n border-bottom-color: #38bdf8;\n background: rgba(56, 189, 248, 0.08);\n }\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\";\nimport type { DevToolsStoreSnapshots } from \"../protocol\";\n\nexport type { DevToolsActions };\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\n}\n\nfunction safeJsonStringify(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return \"[Unserializable]\";\n }\n}\n\nexport class BitFormDevToolsUI {\n private container: HTMLElement;\n private actions: DevToolsActions;\n private rootElement: HTMLDivElement;\n private currentStoresState: DevToolsStoreSnapshots = {};\n private isOpen = false;\n private activeStoreId: string | null = null;\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 if (target.closest(\".bit-devtools-trigger\")) {\n this.isOpen = !this.isOpen;\n this.render();\n return;\n }\n\n const tab = target.closest(\".bit-devtools-tab\");\n if (tab) {\n const storeId = tab.getAttribute(\"data-store\");\n if (storeId) {\n this.activeStoreId = storeId;\n this.render();\n }\n return;\n }\n\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: DevToolsStoreSnapshots) {\n this.currentStoresState = storesState;\n this.render();\n }\n\n private renderStoreBlock(id: string, state: DevToolsStoreSnapshots[string]) {\n const hasErrors = Object.keys(state.errors || {}).length > 0;\n\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 let html = `\n <div class=\"bit-store-block\">\n <div class=\"bit-store-header\">\n <h3 class=\"bit-store-title\">${escapeHtml(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=\"${escapeHtml(id)}\" ${meta.canUndo ? \"\" : \"disabled\"}>\n <span>↺</span> Undo\n </button>\n <button class=\"bit-action-btn\" data-action=\"redo\" data-store=\"${escapeHtml(id)}\" ${meta.canRedo ? \"\" : \"disabled\"}>\n <span>↻</span> Redo\n </button>\n <button class=\"bit-action-btn bit-btn-reset\" data-action=\"reset\" data-store=\"${escapeHtml(id)}\">\n <span>🗑</span> Reset\n </button>\n </div>\n `;\n\n if (hasErrors) {\n html += `\n <span class=\"bit-section-title\" style=\"color: #f87171;\">⚠️ Validations Failing</span>\n <pre class=\"bit-error-box\">${safeJsonStringify(state.errors)}</pre>\n `;\n }\n\n html += `\n <span class=\"bit-section-title\">Values</span>\n <pre class=\"bit-pre\">${safeJsonStringify(state.values)}</pre>\n </div>\n `;\n\n return html;\n }\n\n private render() {\n const storeEntries = Object.entries(this.currentStoresState);\n if (storeEntries.length === 0) {\n this.activeStoreId = null;\n this.rootElement.innerHTML = \"\";\n return;\n }\n\n const prevActiveStoreId = this.activeStoreId;\n\n if (!this.activeStoreId || !storeEntries.some(([id]) => id === this.activeStoreId)) {\n this.activeStoreId = storeEntries[0]?.[0] ?? null;\n }\n\n let savedScrollTop = 0;\n if (this.isOpen) {\n const panel = this.rootElement.querySelector(\".bit-devtools-panel\");\n if (panel) {\n savedScrollTop = panel.scrollTop;\n }\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 if (storeEntries.length >= 2) {\n panelHtml += `<div class=\"bit-devtools-tabs\">`;\n for (const [id] of storeEntries) {\n const isActive = id === this.activeStoreId;\n panelHtml += `<button class=\"bit-devtools-tab${isActive ? \" active\" : \"\"}\" data-store=\"${escapeHtml(id)}\">${escapeHtml(id)}</button>`;\n }\n panelHtml += `</div>`;\n }\n\n const activeEntry = storeEntries.find(([id]) => id === this.activeStoreId) ?? storeEntries[0]!;\n panelHtml += this.renderStoreBlock(activeEntry[0], activeEntry[1]);\n\n panelHtml += `</div>`;\n }\n\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 if (this.isOpen && this.activeStoreId === prevActiveStoreId && savedScrollTop > 0) {\n const panel = this.rootElement.querySelector(\".bit-devtools-panel\");\n if (panel) {\n panel.scrollTop = savedScrollTop;\n }\n }\n }\n}\n","import { bitBus } from \"../../core\";\nimport type { BitBus } from \"../../core\";\nimport { BitFormDevToolsUI } from \"../ui\";\nimport { createDevToolsSnapshotMap } from \"../store-snapshot\";\nimport { getDevToolsActionableStore } from \"../store-port\";\n\nexport function setupLocalDevTools(\n container: HTMLElement,\n bus: BitBus = bitBus,\n) {\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => getDevToolsActionableStore(bus.stores, id)?.undo(),\n onRedo: (id) => getDevToolsActionableStore(bus.stores, id)?.redo(),\n onReset: (id) => getDevToolsActionableStore(bus.stores, id)?.reset(),\n });\n\n const getFullSnapshot = () => createDevToolsSnapshotMap(bus.stores);\n\n ui.updateState(getFullSnapshot());\n\n let rafId: number | undefined;\n const unsubscribe = bus.subscribe(() => {\n if (rafId !== undefined) return;\n rafId = requestAnimationFrame(() => {\n rafId = undefined;\n ui.updateState(getFullSnapshot());\n });\n });\n\n return {\n ui,\n destroy: () => {\n if (rafId !== undefined) cancelAnimationFrame(rafId);\n unsubscribe();\n container.innerHTML = \"\";\n },\n };\n}\n","import { BitFormDevToolsUI } from \"../ui\";\nimport type { BitBus } from \"../../core\";\nimport type {\n DevToolsHelloMessage,\n DevToolsActionMessage,\n DevToolsActionName,\n DevToolsRemoteMessage,\n} from \"../types\";\nimport {\n DEVTOOLS_PROTOCOL_VERSION,\n isDevToolsStateUpdateMessage,\n} from \"../protocol\";\n\nexport function setupRemoteDevTools(\n container: HTMLElement,\n url: string = \"ws://localhost:3000\",\n _bus?: BitBus,\n) {\n let socket: WebSocket | null = null;\n\n const sendMessage = (message: DevToolsRemoteMessage) => {\n if (socket?.readyState === WebSocket.OPEN) {\n try {\n socket.send(JSON.stringify(message));\n } catch (e) {\n console.warn(\"[bit-form] Failed to send message:\", e);\n }\n } else {\n console.warn(\n \"[bit-form] Tentativa de envio falhou. WebSocket não está aberto.\",\n );\n }\n };\n\n const sendAction = (storeId: string, action: DevToolsActionName) => {\n const message: DevToolsActionMessage = {\n type: \"ACTION\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload: { storeId, action },\n };\n sendMessage(message);\n };\n\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => sendAction(id, \"undo\"),\n onRedo: (id) => sendAction(id, \"redo\"),\n onReset: (id) => sendAction(id, \"reset\"),\n });\n\n let destroyed = false;\n let reconnectTimer: ReturnType<typeof setTimeout> | undefined;\n let retries = 0;\n const MAX_RETRY_DELAY = 30000;\n\n function attachListeners() {\n if (!socket) return;\n\n socket.addEventListener(\"open\", () => {\n retries = 0;\n const helloMessage: DevToolsHelloMessage = {\n type: \"HELLO\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload: { role: \"client\", protocolVersion: DEVTOOLS_PROTOCOL_VERSION },\n };\n\n sendMessage(helloMessage);\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) as DevToolsRemoteMessage;\n if (isDevToolsStateUpdateMessage(data)) {\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 socket.addEventListener(\"close\", () => {\n if (destroyed) return;\n console.log(\"[bit-form] Conexão DevTools remota fechada. Reconectando...\");\n const delay = Math.min(1000 * Math.pow(2, retries), MAX_RETRY_DELAY);\n const jitter = delay * (0.5 + Math.random() * 0.5);\n retries++;\n reconnectTimer = setTimeout(() => {\n if (destroyed) return;\n connect();\n }, jitter);\n });\n }\n\n function connect() {\n if (socket) {\n socket.onopen = null;\n socket.onmessage = null;\n socket.onerror = null;\n socket.onclose = null;\n if (socket.readyState === WebSocket.OPEN || socket.readyState === WebSocket.CONNECTING) {\n socket.close();\n }\n }\n try {\n socket = new WebSocket(url);\n } catch (e) {\n console.error(\"[bit-form] Failed to create WebSocket for remote devtools:\", e);\n const delay = Math.min(1000 * Math.pow(2, retries), MAX_RETRY_DELAY);\n const jitter = delay * (0.5 + Math.random() * 0.5);\n retries++;\n if (!destroyed) {\n reconnectTimer = setTimeout(() => {\n if (destroyed) return;\n connect();\n }, jitter);\n }\n return;\n }\n attachListeners();\n }\n\n connect();\n\n return {\n ui,\n destroy: () => {\n destroyed = true;\n if (reconnectTimer) {\n clearTimeout(reconnectTimer);\n reconnectTimer = undefined;\n }\n if (\n socket &&\n (socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING)\n ) {\n socket.close();\n }\n container.innerHTML = \"\";\n },\n };\n}\n"]}
|
|
@@ -26,8 +26,10 @@ declare class BitFormDevToolsUI {
|
|
|
26
26
|
private rootElement;
|
|
27
27
|
private currentStoresState;
|
|
28
28
|
private isOpen;
|
|
29
|
+
private activeStoreId;
|
|
29
30
|
constructor(container: HTMLElement, actions: DevToolsActions);
|
|
30
31
|
updateState(storesState: DevToolsStoreSnapshots): void;
|
|
32
|
+
private renderStoreBlock;
|
|
31
33
|
private render;
|
|
32
34
|
}
|
|
33
35
|
|
package/dist/devtools/index.d.ts
CHANGED
|
@@ -26,8 +26,10 @@ declare class BitFormDevToolsUI {
|
|
|
26
26
|
private rootElement;
|
|
27
27
|
private currentStoresState;
|
|
28
28
|
private isOpen;
|
|
29
|
+
private activeStoreId;
|
|
29
30
|
constructor(container: HTMLElement, actions: DevToolsActions);
|
|
30
31
|
updateState(storesState: DevToolsStoreSnapshots): void;
|
|
32
|
+
private renderStoreBlock;
|
|
31
33
|
private render;
|
|
32
34
|
}
|
|
33
35
|
|