@lehnihon/bit-form 2.2.15 → 2.2.16
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/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/angular/index.js.map +1 -1
- package/dist/chunk-FRKHIMXO.cjs +2 -0
- package/dist/chunk-FRKHIMXO.cjs.map +1 -0
- package/dist/chunk-HHDHVLGP.cjs +2 -0
- package/dist/chunk-HHDHVLGP.cjs.map +1 -0
- package/dist/{chunk-LBISXDNW.js → chunk-HNSQFNCR.js} +2 -2
- package/dist/chunk-L7RLUUSB.js +2 -0
- package/dist/chunk-L7RLUUSB.js.map +1 -0
- package/dist/chunk-PGLND5EZ.js +2 -0
- package/dist/chunk-PGLND5EZ.js.map +1 -0
- package/dist/chunk-PQYTA2OP.js +2 -0
- package/dist/chunk-PQYTA2OP.js.map +1 -0
- package/dist/chunk-QCKCONCU.js +2 -0
- package/dist/chunk-QCKCONCU.js.map +1 -0
- package/dist/{chunk-KGI5PU2P.cjs → chunk-UIBR5FS6.cjs} +2 -2
- package/dist/{chunk-KGI5PU2P.cjs.map → chunk-UIBR5FS6.cjs.map} +1 -1
- package/dist/chunk-WLOKGOW6.cjs +2 -0
- package/dist/chunk-WLOKGOW6.cjs.map +1 -0
- package/dist/chunk-WRNR6SXK.cjs +2 -0
- package/dist/chunk-WRNR6SXK.cjs.map +1 -0
- package/dist/{config-types-D9n-rQLk.d.ts → config-types-BgIAuvzu.d.ts} +1 -2
- package/dist/{config-types-5eR82k2V.d.cts → config-types-CewC0AIS.d.cts} +1 -2
- package/dist/core/bindings.d.cts +2 -2
- package/dist/core/bindings.d.ts +2 -2
- package/dist/core/store.cjs +1 -1
- package/dist/core/store.cjs.map +1 -1
- package/dist/core/store.d.cts +3 -3
- package/dist/core/store.d.ts +3 -3
- package/dist/core/store.js +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +2 -2
- package/dist/core.d.ts +2 -2
- package/dist/core.js +1 -1
- 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 +2 -2
- package/dist/devtools/index.cjs.map +1 -1
- package/dist/devtools/index.d.cts +1 -1
- package/dist/devtools/index.d.ts +1 -1
- package/dist/devtools/index.js +1 -1
- package/dist/devtools/index.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/mask.cjs +1 -1
- package/dist/mask.cjs.map +1 -1
- package/dist/mask.d.cts +3 -3
- package/dist/mask.d.ts +3 -3
- package/dist/mask.js +1 -1
- package/dist/mask.js.map +1 -1
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +4 -5
- package/dist/react/index.d.ts +4 -5
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react-native/index.cjs +1 -1
- package/dist/react-native/index.cjs.map +1 -1
- package/dist/react-native/index.d.cts +3 -4
- package/dist/react-native/index.d.ts +3 -4
- package/dist/react-native/index.js +1 -1
- package/dist/react-native/index.js.map +1 -1
- package/dist/{store-api-types-DSgYwMS3.d.cts → store-api-types-CVQuHPhm.d.cts} +1 -2
- package/dist/{store-api-types-Bozwlwyb.d.ts → store-api-types-Cy-zEhRU.d.ts} +1 -2
- package/dist/{use-bit-persist-Bd1H2fge.d.ts → use-bit-persist-BhMBUSzN.d.ts} +13 -5
- package/dist/{use-bit-persist-DDxV21AN.d.cts → use-bit-persist-Dt264zYz.d.cts} +13 -5
- 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/dist/vue/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-4EMYM7JF.cjs +0 -2
- package/dist/chunk-4EMYM7JF.cjs.map +0 -1
- package/dist/chunk-CIZ6UW2J.cjs +0 -2
- package/dist/chunk-CIZ6UW2J.cjs.map +0 -1
- package/dist/chunk-IB2BMG4F.cjs +0 -2
- package/dist/chunk-IB2BMG4F.cjs.map +0 -1
- package/dist/chunk-KMOB6DB6.js +0 -2
- package/dist/chunk-KMOB6DB6.js.map +0 -1
- package/dist/chunk-NFKYWPEV.js +0 -2
- package/dist/chunk-NFKYWPEV.js.map +0 -1
- package/dist/chunk-VSNLUHZQ.js +0 -2
- package/dist/chunk-VSNLUHZQ.js.map +0 -1
- /package/dist/{chunk-LBISXDNW.js.map → chunk-HNSQFNCR.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/bit-form/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","BitFormDevToolsUI","container","actions","style","e","target","btn","action","storeId","storesState","storeEntries","panelHtml","id","state","hasErrors","meta","currentStep","totalSteps","triggerHtml","setupLocalDevTools","bus","bitBus","ui","getDevToolsActionableStore","getFullSnapshot","createDevToolsSnapshotMap","unsubscribe","setupRemoteDevTools","url","_bus","socket","sendMessage","message","sendAction"],"mappings":"AAAA,svBAAuD,yDAAiD,iCAA8B,yDAA0C,iCAA8B,iCAA8B,iCAA8B,iCAA8B,iCAA8B,iCAA8B,iCAA8B,SCAlXA,CAAAA,CAAAA,CAAyB,CACvC,MAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAyFT,CCpFO,IAAMC,CAAAA,WAAN,KAAwB,CACrB,eAGA,kBAAA,CAA6C,CAAC,EAAA,gBAC9C,MAAA,CAAS,CAAA,EAAA,WAEjB,CAAYC,CAAAA,CAAwBC,CAAAA,CAA0B,yEAI5D,EAAA,CAHA,IAAA,CAAK,SAAA,CAAYD,CAAAA,CACjB,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAEX,CAAC,QAAA,CAAS,cAAA,CAAe,qBAAqB,CAAA,CAAG,CACnD,IAAMC,CAAAA,CAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA,CAC5CA,CAAAA,CAAM,EAAA,CAAK,qBAAA,CACXA,CAAAA,CAAM,WAAA,CAAcJ,CAAAA,CAAe,CAAA,CACnC,QAAA,CAAS,IAAA,CAAK,WAAA,CAAYI,CAAK,CACjC,CAEA,IAAA,CAAK,WAAA,CAAc,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAC/C,IAAA,CAAK,WAAA,CAAY,SAAA,CAAY,wBAAA,CAC7B,IAAA,CAAK,SAAA,CAAU,WAAA,CAAY,IAAA,CAAK,WAAW,CAAA,CAE3C,IAAA,CAAK,WAAA,CAAY,gBAAA,CAAiB,OAAA,CAAUC,CAAAA,EAAM,CAChD,IAAMC,CAAAA,CAASD,CAAAA,CAAE,MAAA,CAGjB,EAAA,CAAIC,CAAAA,CAAO,OAAA,CAAQ,uBAAuB,CAAA,CAAG,CAC3C,IAAA,CAAK,MAAA,CAAS,CAAC,IAAA,CAAK,MAAA,CACpB,IAAA,CAAK,MAAA,CAAO,CAAA,CACZ,MACF,CAGA,IAAMC,CAAAA,CAAMD,CAAAA,CAAO,OAAA,CAAQ,iBAAiB,CAAA,CAC5C,EAAA,CAAIC,CAAAA,EAAO,CAACA,CAAAA,CAAI,YAAA,CAAa,UAAU,CAAA,CAAG,CACxC,IAAMC,CAAAA,CAASD,CAAAA,CAAI,YAAA,CAAa,aAAa,CAAA,CACvCE,CAAAA,CAAUF,CAAAA,CAAI,YAAA,CAAa,YAAY,CAAA,CAEzCC,CAAAA,EAAUC,CAAAA,EAAAA,CACRD,CAAAA,GAAW,MAAA,EAAQ,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAOC,CAAO,CAAA,CAC9CD,CAAAA,GAAW,MAAA,EAAQ,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAOC,CAAO,CAAA,CAC9CD,CAAAA,GAAW,OAAA,EAAS,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQC,CAAO,CAAA,CAExD,CACF,CAAC,CACH,CAEO,WAAA,CAAYC,CAAAA,CAAqC,CACtD,IAAA,CAAK,kBAAA,CAAqBA,CAAAA,CAC1B,IAAA,CAAK,MAAA,CAAO,CACd,CAEQ,MAAA,CAAA,CAAS,CACf,IAAMC,CAAAA,CAAe,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,kBAAkB,CAAA,CAC3D,EAAA,CAAIA,CAAAA,CAAa,MAAA,GAAW,CAAA,CAAG,CAC7B,IAAA,CAAK,WAAA,CAAY,SAAA,CAAY,EAAA,CAC7B,MACF,CAEA,IAAIC,CAAAA,CAAY,EAAA,CAEhB,EAAA,CAAI,IAAA,CAAK,MAAA,CAAQ,CACfA,CAAAA,CAAY,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAQZ,GAAA,CAAA,GAAW,CAACC,CAAAA,CAAIC,CAAK,CAAA,GAAKH,CAAAA,CAAc,CACtC,IAAMI,CAAAA,CAAY,MAAA,CAAO,IAAA,CAAKD,CAAAA,CAAM,MAAA,EAAU,CAAC,CAAC,CAAA,CAAE,MAAA,CAAS,CAAA,CAGrDE,CAAAA,CAAOF,CAAAA,CAAM,KAAA,EAAS,CAC1B,UAAA,CAAY,CAAA,CACZ,YAAA,CAAc,CAAA,CAAA,CACd,OAAA,CAAS,CAAA,CAAA,CACT,OAAA,CAAS,CAAA,CACX,CAAA,CACMG,CAAAA,CAAcD,CAAAA,CAAK,YAAA,CAAe,CAAA,CAClCE,CAAAA,CAAaF,CAAAA,CAAK,UAAA,CAExBJ,CAAAA,EAAa,CAAA;AAAA;AAAA;AAAA,0CAAA,EAGuBC,CAAE,CAAA;AAAA;AAAA,uCAAA,EAELC,CAAAA,CAAM,OAAA,CAAU,eAAA,CAAkB,aAAa,CAAA;AAAA,kBAAA,EACpEA,CAAAA,CAAM,OAAA,CAAU,cAAA,CAAY,gBAAW,CAAA;AAAA;AAAA,gBAAA,EAEzCA,CAAAA,CAAM,OAAA,CAAU,iDAAA,CAAoD,EAAE,CAAA;AAAA,gBAAA,EACtEA,CAAAA,CAAM,YAAA,CAAe,6DAAA,CAA2D,EAAE,CAAA;AAAA;AAAA;AAAA;AAAA,yDAAA,EAIzCG,CAAW,CAAA,CAAA,EAAIC,CAAU,CAAA;AAAA;AAAA;AAAA,4EAAA,EAGNL,CAAE,CAAA,EAAA,EAAKG,CAAAA,CAAK,OAAA,CAAU,EAAA,CAAK,UAAU,CAAA;AAAA;AAAA;AAAA,4EAAA,EAGrCH,CAAE,CAAA,EAAA,EAAKG,CAAAA,CAAK,OAAA,CAAU,EAAA,CAAK,UAAU,CAAA;AAAA;AAAA;AAAA,2FAAA,EAGtBH,CAAE,CAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA,CAMnFE,CAAAA,EAAAA,CACFH,CAAAA,EAAa,CAAA;AAAA;AAAA,uCAAA,EAEkB,IAAA,CAAK,SAAA,CAAUE,CAAAA,CAAM,MAAA,CAAQ,IAAA,CAAM,CAAC,CAAC,CAAA;AAAA,UAAA,CAAA,CAAA,CAItEF,CAAAA,EAAa,CAAA;AAAA;AAAA,iCAAA,EAEc,IAAA,CAAK,SAAA,CAAUE,CAAAA,CAAM,MAAA,CAAQ,IAAA,CAAM,CAAC,CAAC,CAAA;AAAA;AAAA,QAAA,CAGlE,CAEAF,CAAAA,EAAa,QACf,CAGA,IAAMO,CAAAA,CAAc,CAAA;AAAA,6DAAA,EACuC,IAAA,CAAK,MAAA,CAAS,YAAA,CAAe,UAAU,CAAA;AAAA,QAAA,EAC5F,IAAA,CAAK,MAAA,CAAS,QAAA,CAAM,KAAK,CAAA;AAAA;AAAA,IAAA,CAAA,CAI/B,IAAA,CAAK,WAAA,CAAY,SAAA,CAAYP,CAAAA,CAAYO,CAC3C,CACF,UAAA,CCzIO,SAASC,CAAAA,CACdlB,CAAAA,CACAmB,CAAAA,CAAcC,mBAAAA,CACd,CACA,IAAMC,CAAAA,CAAK,IAAItB,CAAAA,CAAkBC,CAAAA,CAAW,CAC1C,MAAA,CAASW,CAAAA,kBAAOW,iCAAAA,CAA2BH,CAAI,MAAA,CAAQR,CAAE,CAAA,2BAAG,IAAA,mBAAK,GAAA,CACjE,MAAA,CAASA,CAAAA,kBAAOW,iCAAAA,CAA2BH,CAAI,MAAA,CAAQR,CAAE,CAAA,6BAAG,IAAA,mBAAK,GAAA,CACjE,OAAA,CAAUA,CAAAA,kBAAOW,iCAAAA,CAA2BH,CAAI,MAAA,CAAQR,CAAE,CAAA,6BAAG,KAAA,mBAAM,GACrE,CAAC,CAAA,CAEKY,CAAAA,CAAkB,CAAA,CAAA,EAAMC,iCAAAA,CAA0BL,CAAI,MAAM,CAAA,CAElEE,CAAAA,CAAG,WAAA,CAAYE,CAAAA,CAAgB,CAAC,CAAA,CAEhC,IAAME,CAAAA,CAAcN,CAAAA,CAAI,SAAA,CAAU,CAAA,CAAA,EAAM,CACtCE,CAAAA,CAAG,WAAA,CAAYE,CAAAA,CAAgB,CAAC,CAClC,CAAC,CAAA,CAED,MAAO,CACL,EAAA,CAAAF,CAAAA,CACA,OAAA,CAAS,CAAA,CAAA,EAAM,CACbI,CAAAA,CAAY,CAAA,CACZzB,CAAAA,CAAU,SAAA,CAAY,EACxB,CACF,CACF,CClBO,SAAS0B,CAAAA,CACd1B,CAAAA,CACA2B,CAAAA,CAAc,qBAAA,CACdC,CAAAA,CACA,CACA,IAAMC,CAAAA,CAAS,IAAI,SAAA,CAAUF,CAAG,CAAA,CAE1BG,CAAAA,CAAeC,CAAAA,EAAmC,CAClDF,CAAAA,CAAO,UAAA,GAAe,SAAA,CAAU,IAAA,CAClCA,CAAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAUE,CAAO,CAAC,CAAA,CAEnC,OAAA,CAAQ,IAAA,CACN,wEACF,CAEJ,CAAA,CAEMC,CAAAA,CAAa,CAACzB,CAAAA,CAAiBD,CAAAA,CAAAA,EAA+B,CAMlEwB,CAAAA,CALuC,CACrC,IAAA,CAAM,QAAA,CACN,eAAA,CAAiB,CAAA,CACjB,OAAA,CAAS,CAAE,OAAA,CAAAvB,CAAAA,CAAS,MAAA,CAAAD,CAAO,CAC7B,CACmB,CACrB,CAAA,CAEMe,CAAAA,CAAK,IAAItB,CAAAA,CAAkBC,CAAAA,CAAW,CAC1C,MAAA,CAASW,CAAAA,EAAOqB,CAAAA,CAAWrB,CAAAA,CAAI,MAAM,CAAA,CACrC,MAAA,CAASA,CAAAA,EAAOqB,CAAAA,CAAWrB,CAAAA,CAAI,MAAM,CAAA,CACrC,OAAA,CAAUA,CAAAA,EAAOqB,CAAAA,CAAWrB,CAAAA,CAAI,OAAO,CACzC,CAAC,CAAA,CAED,OAAAkB,CAAAA,CAAO,gBAAA,CAAiB,MAAA,CAAQ,CAAA,CAAA,EAAM,CAOpCC,CAAAA,CAN2C,CACzC,IAAA,CAAM,OAAA,CACN,eAAA,CAAiB,CAAA,CACjB,OAAA,CAAS,CAAE,IAAA,CAAM,QAAA,CAAU,eAAA,CAAiB,CAA0B,CACxE,CAEwB,CAAA,CACxB,OAAA,CAAQ,GAAA,CAAI,CAAA,2CAAA,EAA8CH,CAAG,CAAA,CAAA","file":"/home/runner/work/bit-form/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\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\">${id}</h3>\n <div class=\"bit-badge-group\">\n <span class=\"bit-badge ${state.isValid ? \"badge-success\" : \"badge-error\"}\">\n ${state.isValid ? \"✓ Valid\" : \"✕ Invalid\"}\n </span>\n ${state.isDirty ? `<span class=\"bit-badge badge-warn\">Dirty</span>` : \"\"}\n ${state.isSubmitting ? `<span class=\"bit-badge badge-info\">⏳ Submitting</span>` : \"\"}\n </div>\n </div>\n\n <span class=\"bit-section-title\">Time Travel (${currentStep}/${totalSteps})</span>\n \n <div class=\"bit-controls\">\n <button class=\"bit-action-btn\" data-action=\"undo\" data-store=\"${id}\" ${meta.canUndo ? \"\" : \"disabled\"}>\n <span>↺</span> Undo\n </button>\n <button class=\"bit-action-btn\" data-action=\"redo\" data-store=\"${id}\" ${meta.canRedo ? \"\" : \"disabled\"}>\n <span>↻</span> Redo\n </button>\n <button class=\"bit-action-btn bit-btn-reset\" data-action=\"reset\" data-store=\"${id}\">\n <span>🗑</span> Reset\n </button>\n </div>\n `;\n\n if (hasErrors) {\n panelHtml += `\n <span class=\"bit-section-title\" style=\"color: #f87171;\">⚠️ Validations Failing</span>\n <pre class=\"bit-error-box\">${JSON.stringify(state.errors, null, 2)}</pre>\n `;\n }\n\n panelHtml += `\n <span class=\"bit-section-title\">Values</span>\n <pre class=\"bit-pre\">${JSON.stringify(state.values, null, 2)}</pre>\n </div>\n `;\n }\n\n panelHtml += `</div>`;\n }\n\n // Botão Flutuante (sempre renderizado)\n const triggerHtml = `\n <button class=\"bit-devtools-trigger\" style=\"transform: ${this.isOpen ? \"scale(0.9)\" : \"scale(1)\"};\" title=\"Abrir DevTools\">\n ${this.isOpen ? \"✖\" : \"Bit\"}\n </button>\n `;\n\n this.rootElement.innerHTML = panelHtml + triggerHtml;\n }\n}\n","import { bitBus } from \"../../core\";\nimport type { 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 const unsubscribe = bus.subscribe(() => {\n ui.updateState(getFullSnapshot());\n });\n\n return {\n ui,\n destroy: () => {\n unsubscribe();\n container.innerHTML = \"\";\n },\n };\n}\n","import { BitFormDevToolsUI } from \"../ui\";\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 const socket = new WebSocket(url);\n\n const sendMessage = (message: DevToolsRemoteMessage) => {\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify(message));\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 socket.addEventListener(\"open\", () => {\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 return {\n ui,\n destroy: () => {\n if (\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":["/home/runner/work/bit-form/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","BitFormDevToolsUI","container","actions","style","e","target","btn","action","storeId","storesState","storeEntries","panelHtml","id","state","hasErrors","meta","currentStep","totalSteps","triggerHtml","setupLocalDevTools","bus","bitBus","ui","getDevToolsActionableStore","getFullSnapshot","createDevToolsSnapshotMap","unsubscribe","setupRemoteDevTools","url","_bus","socket","sendMessage","message","sendAction"],"mappings":"AAAA,svBAAuD,yDAAiD,iCAA8B,yDAA0C,iCAA8B,iCAA8B,iCAA8B,iCAA8B,iCAA8B,iCAA8B,iCAA8B,iCAA8B,SCAhZA,CAAAA,CAAAA,CAAyB,CACvC,MAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAyFT,CCpFO,IAAMC,CAAAA,WAAN,KAAwB,CACrB,eAGA,kBAAA,CAA6C,CAAC,EAAA,gBAC9C,MAAA,CAAS,CAAA,EAAA,WAEjB,CAAYC,CAAAA,CAAwBC,CAAAA,CAA0B,yEAI5D,EAAA,CAHA,IAAA,CAAK,SAAA,CAAYD,CAAAA,CACjB,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAEX,CAAC,QAAA,CAAS,cAAA,CAAe,qBAAqB,CAAA,CAAG,CACnD,IAAMC,CAAAA,CAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA,CAC5CA,CAAAA,CAAM,EAAA,CAAK,qBAAA,CACXA,CAAAA,CAAM,WAAA,CAAcJ,CAAAA,CAAe,CAAA,CACnC,QAAA,CAAS,IAAA,CAAK,WAAA,CAAYI,CAAK,CACjC,CAEA,IAAA,CAAK,WAAA,CAAc,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAC/C,IAAA,CAAK,WAAA,CAAY,SAAA,CAAY,wBAAA,CAC7B,IAAA,CAAK,SAAA,CAAU,WAAA,CAAY,IAAA,CAAK,WAAW,CAAA,CAE3C,IAAA,CAAK,WAAA,CAAY,gBAAA,CAAiB,OAAA,CAAUC,CAAAA,EAAM,CAChD,IAAMC,CAAAA,CAASD,CAAAA,CAAE,MAAA,CAGjB,EAAA,CAAIC,CAAAA,CAAO,OAAA,CAAQ,uBAAuB,CAAA,CAAG,CAC3C,IAAA,CAAK,MAAA,CAAS,CAAC,IAAA,CAAK,MAAA,CACpB,IAAA,CAAK,MAAA,CAAO,CAAA,CACZ,MACF,CAGA,IAAMC,CAAAA,CAAMD,CAAAA,CAAO,OAAA,CAAQ,iBAAiB,CAAA,CAC5C,EAAA,CAAIC,CAAAA,EAAO,CAACA,CAAAA,CAAI,YAAA,CAAa,UAAU,CAAA,CAAG,CACxC,IAAMC,CAAAA,CAASD,CAAAA,CAAI,YAAA,CAAa,aAAa,CAAA,CACvCE,CAAAA,CAAUF,CAAAA,CAAI,YAAA,CAAa,YAAY,CAAA,CAEzCC,CAAAA,EAAUC,CAAAA,EAAAA,CACRD,CAAAA,GAAW,MAAA,EAAQ,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAOC,CAAO,CAAA,CAC9CD,CAAAA,GAAW,MAAA,EAAQ,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAOC,CAAO,CAAA,CAC9CD,CAAAA,GAAW,OAAA,EAAS,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQC,CAAO,CAAA,CAExD,CACF,CAAC,CACH,CAEO,WAAA,CAAYC,CAAAA,CAAqC,CACtD,IAAA,CAAK,kBAAA,CAAqBA,CAAAA,CAC1B,IAAA,CAAK,MAAA,CAAO,CACd,CAEQ,MAAA,CAAA,CAAS,CACf,IAAMC,CAAAA,CAAe,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,kBAAkB,CAAA,CAC3D,EAAA,CAAIA,CAAAA,CAAa,MAAA,GAAW,CAAA,CAAG,CAC7B,IAAA,CAAK,WAAA,CAAY,SAAA,CAAY,EAAA,CAC7B,MACF,CAEA,IAAIC,CAAAA,CAAY,EAAA,CAEhB,EAAA,CAAI,IAAA,CAAK,MAAA,CAAQ,CACfA,CAAAA,CAAY,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAQZ,GAAA,CAAA,GAAW,CAACC,CAAAA,CAAIC,CAAK,CAAA,GAAKH,CAAAA,CAAc,CACtC,IAAMI,CAAAA,CAAY,MAAA,CAAO,IAAA,CAAKD,CAAAA,CAAM,MAAA,EAAU,CAAC,CAAC,CAAA,CAAE,MAAA,CAAS,CAAA,CAGrDE,CAAAA,CAAOF,CAAAA,CAAM,KAAA,EAAS,CAC1B,UAAA,CAAY,CAAA,CACZ,YAAA,CAAc,CAAA,CAAA,CACd,OAAA,CAAS,CAAA,CAAA,CACT,OAAA,CAAS,CAAA,CACX,CAAA,CACMG,CAAAA,CAAcD,CAAAA,CAAK,YAAA,CAAe,CAAA,CAClCE,CAAAA,CAAaF,CAAAA,CAAK,UAAA,CAExBJ,CAAAA,EAAa,CAAA;AAAA;AAAA;AAAA,0CAAA,EAGuBC,CAAE,CAAA;AAAA;AAAA,uCAAA,EAELC,CAAAA,CAAM,OAAA,CAAU,eAAA,CAAkB,aAAa,CAAA;AAAA,kBAAA,EACpEA,CAAAA,CAAM,OAAA,CAAU,cAAA,CAAY,gBAAW,CAAA;AAAA;AAAA,gBAAA,EAEzCA,CAAAA,CAAM,OAAA,CAAU,iDAAA,CAAoD,EAAE,CAAA;AAAA,gBAAA,EACtEA,CAAAA,CAAM,YAAA,CAAe,6DAAA,CAA2D,EAAE,CAAA;AAAA;AAAA;AAAA;AAAA,yDAAA,EAIzCG,CAAW,CAAA,CAAA,EAAIC,CAAU,CAAA;AAAA;AAAA;AAAA,4EAAA,EAGNL,CAAE,CAAA,EAAA,EAAKG,CAAAA,CAAK,OAAA,CAAU,EAAA,CAAK,UAAU,CAAA;AAAA;AAAA;AAAA,4EAAA,EAGrCH,CAAE,CAAA,EAAA,EAAKG,CAAAA,CAAK,OAAA,CAAU,EAAA,CAAK,UAAU,CAAA;AAAA;AAAA;AAAA,2FAAA,EAGtBH,CAAE,CAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA,CAMnFE,CAAAA,EAAAA,CACFH,CAAAA,EAAa,CAAA;AAAA;AAAA,uCAAA,EAEkB,IAAA,CAAK,SAAA,CAAUE,CAAAA,CAAM,MAAA,CAAQ,IAAA,CAAM,CAAC,CAAC,CAAA;AAAA,UAAA,CAAA,CAAA,CAItEF,CAAAA,EAAa,CAAA;AAAA;AAAA,iCAAA,EAEc,IAAA,CAAK,SAAA,CAAUE,CAAAA,CAAM,MAAA,CAAQ,IAAA,CAAM,CAAC,CAAC,CAAA;AAAA;AAAA,QAAA,CAGlE,CAEAF,CAAAA,EAAa,QACf,CAGA,IAAMO,CAAAA,CAAc,CAAA;AAAA,6DAAA,EACuC,IAAA,CAAK,MAAA,CAAS,YAAA,CAAe,UAAU,CAAA;AAAA,QAAA,EAC5F,IAAA,CAAK,MAAA,CAAS,QAAA,CAAM,KAAK,CAAA;AAAA;AAAA,IAAA,CAAA,CAI/B,IAAA,CAAK,WAAA,CAAY,SAAA,CAAYP,CAAAA,CAAYO,CAC3C,CACF,UAAA,CCzIO,SAASC,CAAAA,CACdlB,CAAAA,CACAmB,CAAAA,CAAcC,mBAAAA,CACd,CACA,IAAMC,CAAAA,CAAK,IAAItB,CAAAA,CAAkBC,CAAAA,CAAW,CAC1C,MAAA,CAASW,CAAAA,kBAAOW,iCAAAA,CAA2BH,CAAI,MAAA,CAAQR,CAAE,CAAA,2BAAG,IAAA,mBAAK,GAAA,CACjE,MAAA,CAASA,CAAAA,kBAAOW,iCAAAA,CAA2BH,CAAI,MAAA,CAAQR,CAAE,CAAA,6BAAG,IAAA,mBAAK,GAAA,CACjE,OAAA,CAAUA,CAAAA,kBAAOW,iCAAAA,CAA2BH,CAAI,MAAA,CAAQR,CAAE,CAAA,6BAAG,KAAA,mBAAM,GACrE,CAAC,CAAA,CAEKY,CAAAA,CAAkB,CAAA,CAAA,EAAMC,iCAAAA,CAA0BL,CAAI,MAAM,CAAA,CAElEE,CAAAA,CAAG,WAAA,CAAYE,CAAAA,CAAgB,CAAC,CAAA,CAEhC,IAAME,CAAAA,CAAcN,CAAAA,CAAI,SAAA,CAAU,CAAA,CAAA,EAAM,CACtCE,CAAAA,CAAG,WAAA,CAAYE,CAAAA,CAAgB,CAAC,CAClC,CAAC,CAAA,CAED,MAAO,CACL,EAAA,CAAAF,CAAAA,CACA,OAAA,CAAS,CAAA,CAAA,EAAM,CACbI,CAAAA,CAAY,CAAA,CACZzB,CAAAA,CAAU,SAAA,CAAY,EACxB,CACF,CACF,CClBO,SAAS0B,CAAAA,CACd1B,CAAAA,CACA2B,CAAAA,CAAc,qBAAA,CACdC,CAAAA,CACA,CACA,IAAMC,CAAAA,CAAS,IAAI,SAAA,CAAUF,CAAG,CAAA,CAE1BG,CAAAA,CAAeC,CAAAA,EAAmC,CAClDF,CAAAA,CAAO,UAAA,GAAe,SAAA,CAAU,IAAA,CAClCA,CAAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAUE,CAAO,CAAC,CAAA,CAEnC,OAAA,CAAQ,IAAA,CACN,wEACF,CAEJ,CAAA,CAEMC,CAAAA,CAAa,CAACzB,CAAAA,CAAiBD,CAAAA,CAAAA,EAA+B,CAMlEwB,CAAAA,CALuC,CACrC,IAAA,CAAM,QAAA,CACN,eAAA,CAAiB,CAAA,CACjB,OAAA,CAAS,CAAE,OAAA,CAAAvB,CAAAA,CAAS,MAAA,CAAAD,CAAO,CAC7B,CACmB,CACrB,CAAA,CAEMe,CAAAA,CAAK,IAAItB,CAAAA,CAAkBC,CAAAA,CAAW,CAC1C,MAAA,CAASW,CAAAA,EAAOqB,CAAAA,CAAWrB,CAAAA,CAAI,MAAM,CAAA,CACrC,MAAA,CAASA,CAAAA,EAAOqB,CAAAA,CAAWrB,CAAAA,CAAI,MAAM,CAAA,CACrC,OAAA,CAAUA,CAAAA,EAAOqB,CAAAA,CAAWrB,CAAAA,CAAI,OAAO,CACzC,CAAC,CAAA,CAED,OAAAkB,CAAAA,CAAO,gBAAA,CAAiB,MAAA,CAAQ,CAAA,CAAA,EAAM,CAOpCC,CAAAA,CAN2C,CACzC,IAAA,CAAM,OAAA,CACN,eAAA,CAAiB,CAAA,CACjB,OAAA,CAAS,CAAE,IAAA,CAAM,QAAA,CAAU,eAAA,CAAiB,CAA0B,CACxE,CAEwB,CAAA,CACxB,OAAA,CAAQ,GAAA,CAAI,CAAA,2CAAA,EAA8CH,CAAG,CAAA,CAAA","file":"/home/runner/work/bit-form/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\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\">${id}</h3>\n <div class=\"bit-badge-group\">\n <span class=\"bit-badge ${state.isValid ? \"badge-success\" : \"badge-error\"}\">\n ${state.isValid ? \"✓ Valid\" : \"✕ Invalid\"}\n </span>\n ${state.isDirty ? `<span class=\"bit-badge badge-warn\">Dirty</span>` : \"\"}\n ${state.isSubmitting ? `<span class=\"bit-badge badge-info\">⏳ Submitting</span>` : \"\"}\n </div>\n </div>\n\n <span class=\"bit-section-title\">Time Travel (${currentStep}/${totalSteps})</span>\n \n <div class=\"bit-controls\">\n <button class=\"bit-action-btn\" data-action=\"undo\" data-store=\"${id}\" ${meta.canUndo ? \"\" : \"disabled\"}>\n <span>↺</span> Undo\n </button>\n <button class=\"bit-action-btn\" data-action=\"redo\" data-store=\"${id}\" ${meta.canRedo ? \"\" : \"disabled\"}>\n <span>↻</span> Redo\n </button>\n <button class=\"bit-action-btn bit-btn-reset\" data-action=\"reset\" data-store=\"${id}\">\n <span>🗑</span> Reset\n </button>\n </div>\n `;\n\n if (hasErrors) {\n panelHtml += `\n <span class=\"bit-section-title\" style=\"color: #f87171;\">⚠️ Validations Failing</span>\n <pre class=\"bit-error-box\">${JSON.stringify(state.errors, null, 2)}</pre>\n `;\n }\n\n panelHtml += `\n <span class=\"bit-section-title\">Values</span>\n <pre class=\"bit-pre\">${JSON.stringify(state.values, null, 2)}</pre>\n </div>\n `;\n }\n\n panelHtml += `</div>`;\n }\n\n // Botão Flutuante (sempre renderizado)\n const triggerHtml = `\n <button class=\"bit-devtools-trigger\" style=\"transform: ${this.isOpen ? \"scale(0.9)\" : \"scale(1)\"};\" title=\"Abrir DevTools\">\n ${this.isOpen ? \"✖\" : \"Bit\"}\n </button>\n `;\n\n this.rootElement.innerHTML = panelHtml + triggerHtml;\n }\n}\n","import { bitBus } from \"../../core\";\nimport type { 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 const unsubscribe = bus.subscribe(() => {\n ui.updateState(getFullSnapshot());\n });\n\n return {\n ui,\n destroy: () => {\n unsubscribe();\n container.innerHTML = \"\";\n },\n };\n}\n","import { BitFormDevToolsUI } from \"../ui\";\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 const socket = new WebSocket(url);\n\n const sendMessage = (message: DevToolsRemoteMessage) => {\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify(message));\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 socket.addEventListener(\"open\", () => {\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 return {\n ui,\n destroy: () => {\n if (\n socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING\n ) {\n socket.close();\n }\n container.innerHTML = \"\";\n },\n };\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { B as BitBus } from '../bus-DzTqgkZ4.cjs';
|
|
2
2
|
import { DevToolsStoreSnapshots } from './protocol.cjs';
|
|
3
3
|
export { DEVTOOLS_PROTOCOL_VERSION, DevToolsActionName, DevToolsActionPayload, DevToolsHelloMessage, DevToolsHelloPayload, DevToolsRemoteMessage, DevToolsStateUpdateMessage, DevToolsStoreSnapshot } from './protocol.cjs';
|
|
4
|
-
import { p as BitPlugin } from '../config-types-
|
|
4
|
+
import { p as BitPlugin } from '../config-types-CewC0AIS.cjs';
|
|
5
5
|
import { D as DevToolsOptions } from '../runtime-types-D1SRZr-n.cjs';
|
|
6
6
|
import '../state-types-8bUndWfg.cjs';
|
|
7
7
|
import '../types-CUXh7PqD.cjs';
|
package/dist/devtools/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { B as BitBus } from '../bus-BFOBGmd9.js';
|
|
2
2
|
import { DevToolsStoreSnapshots } from './protocol.js';
|
|
3
3
|
export { DEVTOOLS_PROTOCOL_VERSION, DevToolsActionName, DevToolsActionPayload, DevToolsHelloMessage, DevToolsHelloPayload, DevToolsRemoteMessage, DevToolsStateUpdateMessage, DevToolsStoreSnapshot } from './protocol.js';
|
|
4
|
-
import { p as BitPlugin } from '../config-types-
|
|
4
|
+
import { p as BitPlugin } from '../config-types-BgIAuvzu.js';
|
|
5
5
|
import { D as DevToolsOptions } from '../runtime-types-D1SRZr-n.js';
|
|
6
6
|
import '../state-types-8bUndWfg.js';
|
|
7
7
|
import '../types-CUXh7PqD.js';
|
package/dist/devtools/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as g,b as c,c as v}from"../chunk-
|
|
1
|
+
import{a as g,b as c,c as v}from"../chunk-HNSQFNCR.js";import{a as p,d as u}from"../chunk-K5X37E3U.js";import"../chunk-5NA2TFPG.js";import{a as f}from"../chunk-PQYTA2OP.js";import"../chunk-SYEUXL2E.js";import"../chunk-W2E5UIXT.js";import"../chunk-UIKO6GGW.js";import"../chunk-ICYXODTQ.js";import"../chunk-HE6EQZTH.js";import"../chunk-G3EHXKOS.js";import"../chunk-QCKCONCU.js";import"../chunk-3NUJVIAM.js";function x(){return`
|
|
2
2
|
.bit-devtools-container {
|
|
3
3
|
position: fixed;
|
|
4
4
|
bottom: 20px;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/devtools/ui/styles.ts","../../src/devtools/ui/index.ts","../../src/devtools/adapters/local.ts","../../src/devtools/adapters/remote.ts","../../src/devtools/init-dev-tools.ts","../../src/devtools/create-plugin.ts"],"sourcesContent":["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\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\">${id}</h3>\n <div class=\"bit-badge-group\">\n <span class=\"bit-badge ${state.isValid ? \"badge-success\" : \"badge-error\"}\">\n ${state.isValid ? \"✓ Valid\" : \"✕ Invalid\"}\n </span>\n ${state.isDirty ? `<span class=\"bit-badge badge-warn\">Dirty</span>` : \"\"}\n ${state.isSubmitting ? `<span class=\"bit-badge badge-info\">⏳ Submitting</span>` : \"\"}\n </div>\n </div>\n\n <span class=\"bit-section-title\">Time Travel (${currentStep}/${totalSteps})</span>\n \n <div class=\"bit-controls\">\n <button class=\"bit-action-btn\" data-action=\"undo\" data-store=\"${id}\" ${meta.canUndo ? \"\" : \"disabled\"}>\n <span>↺</span> Undo\n </button>\n <button class=\"bit-action-btn\" data-action=\"redo\" data-store=\"${id}\" ${meta.canRedo ? \"\" : \"disabled\"}>\n <span>↻</span> Redo\n </button>\n <button class=\"bit-action-btn bit-btn-reset\" data-action=\"reset\" data-store=\"${id}\">\n <span>🗑</span> Reset\n </button>\n </div>\n `;\n\n if (hasErrors) {\n panelHtml += `\n <span class=\"bit-section-title\" style=\"color: #f87171;\">⚠️ Validations Failing</span>\n <pre class=\"bit-error-box\">${JSON.stringify(state.errors, null, 2)}</pre>\n `;\n }\n\n panelHtml += `\n <span class=\"bit-section-title\">Values</span>\n <pre class=\"bit-pre\">${JSON.stringify(state.values, null, 2)}</pre>\n </div>\n `;\n }\n\n panelHtml += `</div>`;\n }\n\n // Botão Flutuante (sempre renderizado)\n const triggerHtml = `\n <button class=\"bit-devtools-trigger\" style=\"transform: ${this.isOpen ? \"scale(0.9)\" : \"scale(1)\"};\" title=\"Abrir DevTools\">\n ${this.isOpen ? \"✖\" : \"Bit\"}\n </button>\n `;\n\n this.rootElement.innerHTML = panelHtml + triggerHtml;\n }\n}\n","import { bitBus } from \"../../core\";\nimport type { 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 const unsubscribe = bus.subscribe(() => {\n ui.updateState(getFullSnapshot());\n });\n\n return {\n ui,\n destroy: () => {\n unsubscribe();\n container.innerHTML = \"\";\n },\n };\n}\n","import { BitFormDevToolsUI } from \"../ui\";\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 const socket = new WebSocket(url);\n\n const sendMessage = (message: DevToolsRemoteMessage) => {\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify(message));\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 socket.addEventListener(\"open\", () => {\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 return {\n ui,\n destroy: () => {\n if (\n socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING\n ) {\n socket.close();\n }\n container.innerHTML = \"\";\n },\n };\n}\n","import { setupLocalDevTools } from \"./adapters/local\";\nimport { setupRemoteDevTools } from \"./adapters/remote\";\nimport type { BitDevToolsOptions } from \"./types\";\nimport type { BitDevToolsAdapter } from \"./adapters/types\";\n\nexport type { BitDevToolsOptions };\n\nexport function initDevTools(options: BitDevToolsOptions = {}) {\n const { mode = \"local\", url, bus } = 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: BitDevToolsAdapter;\n\n if (mode === \"local\") {\n console.log(\"[bit-form] DevTools iniciado em modo Local.\");\n adapterInstance = setupLocalDevTools(containerEl, bus);\n } else if (mode === \"remote\") {\n console.log(\"[bit-form] DevTools iniciado em modo Remote.\");\n adapterInstance = setupRemoteDevTools(containerEl, url, bus);\n } else {\n throw new Error(`[bit-form] Modo DevTools inválido: ${mode}`);\n }\n\n return {\n ...adapterInstance,\n destroy: () => {\n if (adapterInstance && typeof adapterInstance.destroy === \"function\") {\n adapterInstance.destroy();\n }\n\n if (isAutoCreated && containerEl.parentNode) {\n containerEl.parentNode.removeChild(containerEl);\n } else {\n containerEl.innerHTML = \"\";\n }\n },\n };\n}\n","import type { BitPlugin, DevToolsOptions } from \"../core\";\nimport { setupRemoteBridge } from \"./bridge\";\nimport { initDevTools } from \"./init-dev-tools\";\n\nfunction resolveDevToolsOptions(\n devTools: boolean | DevToolsOptions | undefined,\n): Required<Pick<DevToolsOptions, \"enabled\" | \"mode\">> &\n Pick<DevToolsOptions, \"url\"> {\n if (typeof devTools === \"boolean\") {\n return { enabled: devTools, mode: \"local\" };\n }\n\n return {\n enabled: !!devTools,\n mode: devTools?.mode ?? \"local\",\n url: devTools?.url,\n };\n}\n\nexport function createDevToolsPlugin<T extends object = any>(\n override?: boolean | DevToolsOptions,\n): BitPlugin<T> {\n return {\n name: \"bit-devtools\",\n setup: (context) => {\n const options = resolveDevToolsOptions(\n override ?? context.getConfig().devTools,\n );\n\n if (!options.enabled) {\n return;\n }\n\n let cleanup: (() => void) | null = null;\n const bus = context.getConfig().bus;\n\n try {\n if (options.mode === \"remote\") {\n cleanup = setupRemoteBridge(\n options.url || \"ws://localhost:3000\",\n bus,\n );\n } else {\n const instance = initDevTools({ bus });\n cleanup =\n instance && typeof instance.destroy === \"function\"\n ? instance.destroy\n : null;\n }\n } catch {\n // fail-open: devtools não deve impactar runtime principal\n }\n\n return () => {\n if (cleanup) {\n cleanup();\n cleanup = null;\n }\n };\n },\n };\n}\n"],"mappings":"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","names":["getDevToolsCSS","BitFormDevToolsUI","container","actions","style","getDevToolsCSS","e","target","btn","action","storeId","storesState","storeEntries","panelHtml","id","state","hasErrors","meta","currentStep","totalSteps","triggerHtml","setupLocalDevTools","container","bus","bitBus","ui","BitFormDevToolsUI","id","getDevToolsActionableStore","getFullSnapshot","createDevToolsSnapshotMap","unsubscribe","setupRemoteDevTools","container","url","_bus","socket","sendMessage","message","sendAction","storeId","action","ui","BitFormDevToolsUI","id","msg","data","isDevToolsStateUpdateMessage","e","err","initDevTools","options","mode","url","bus","containerEl","isAutoCreated","el","adapterInstance","setupLocalDevTools","setupRemoteDevTools","resolveDevToolsOptions","devTools","createDevToolsPlugin","override","context","options","cleanup","bus","setupRemoteBridge","instance","initDevTools"]}
|
|
1
|
+
{"version":3,"sources":["../../src/devtools/ui/styles.ts","../../src/devtools/ui/index.ts","../../src/devtools/adapters/local.ts","../../src/devtools/adapters/remote.ts","../../src/devtools/init-dev-tools.ts","../../src/devtools/create-plugin.ts"],"sourcesContent":["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\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\">${id}</h3>\n <div class=\"bit-badge-group\">\n <span class=\"bit-badge ${state.isValid ? \"badge-success\" : \"badge-error\"}\">\n ${state.isValid ? \"✓ Valid\" : \"✕ Invalid\"}\n </span>\n ${state.isDirty ? `<span class=\"bit-badge badge-warn\">Dirty</span>` : \"\"}\n ${state.isSubmitting ? `<span class=\"bit-badge badge-info\">⏳ Submitting</span>` : \"\"}\n </div>\n </div>\n\n <span class=\"bit-section-title\">Time Travel (${currentStep}/${totalSteps})</span>\n \n <div class=\"bit-controls\">\n <button class=\"bit-action-btn\" data-action=\"undo\" data-store=\"${id}\" ${meta.canUndo ? \"\" : \"disabled\"}>\n <span>↺</span> Undo\n </button>\n <button class=\"bit-action-btn\" data-action=\"redo\" data-store=\"${id}\" ${meta.canRedo ? \"\" : \"disabled\"}>\n <span>↻</span> Redo\n </button>\n <button class=\"bit-action-btn bit-btn-reset\" data-action=\"reset\" data-store=\"${id}\">\n <span>🗑</span> Reset\n </button>\n </div>\n `;\n\n if (hasErrors) {\n panelHtml += `\n <span class=\"bit-section-title\" style=\"color: #f87171;\">⚠️ Validations Failing</span>\n <pre class=\"bit-error-box\">${JSON.stringify(state.errors, null, 2)}</pre>\n `;\n }\n\n panelHtml += `\n <span class=\"bit-section-title\">Values</span>\n <pre class=\"bit-pre\">${JSON.stringify(state.values, null, 2)}</pre>\n </div>\n `;\n }\n\n panelHtml += `</div>`;\n }\n\n // Botão Flutuante (sempre renderizado)\n const triggerHtml = `\n <button class=\"bit-devtools-trigger\" style=\"transform: ${this.isOpen ? \"scale(0.9)\" : \"scale(1)\"};\" title=\"Abrir DevTools\">\n ${this.isOpen ? \"✖\" : \"Bit\"}\n </button>\n `;\n\n this.rootElement.innerHTML = panelHtml + triggerHtml;\n }\n}\n","import { bitBus } from \"../../core\";\nimport type { 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 const unsubscribe = bus.subscribe(() => {\n ui.updateState(getFullSnapshot());\n });\n\n return {\n ui,\n destroy: () => {\n unsubscribe();\n container.innerHTML = \"\";\n },\n };\n}\n","import { BitFormDevToolsUI } from \"../ui\";\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 const socket = new WebSocket(url);\n\n const sendMessage = (message: DevToolsRemoteMessage) => {\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify(message));\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 socket.addEventListener(\"open\", () => {\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 return {\n ui,\n destroy: () => {\n if (\n socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING\n ) {\n socket.close();\n }\n container.innerHTML = \"\";\n },\n };\n}\n","import { setupLocalDevTools } from \"./adapters/local\";\nimport { setupRemoteDevTools } from \"./adapters/remote\";\nimport type { BitDevToolsOptions } from \"./types\";\nimport type { BitDevToolsAdapter } from \"./adapters/types\";\n\nexport type { BitDevToolsOptions };\n\nexport function initDevTools(options: BitDevToolsOptions = {}) {\n const { mode = \"local\", url, bus } = 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: BitDevToolsAdapter;\n\n if (mode === \"local\") {\n console.log(\"[bit-form] DevTools iniciado em modo Local.\");\n adapterInstance = setupLocalDevTools(containerEl, bus);\n } else if (mode === \"remote\") {\n console.log(\"[bit-form] DevTools iniciado em modo Remote.\");\n adapterInstance = setupRemoteDevTools(containerEl, url, bus);\n } else {\n throw new Error(`[bit-form] Modo DevTools inválido: ${mode}`);\n }\n\n return {\n ...adapterInstance,\n destroy: () => {\n if (adapterInstance && typeof adapterInstance.destroy === \"function\") {\n adapterInstance.destroy();\n }\n\n if (isAutoCreated && containerEl.parentNode) {\n containerEl.parentNode.removeChild(containerEl);\n } else {\n containerEl.innerHTML = \"\";\n }\n },\n };\n}\n","import type { BitPlugin, DevToolsOptions } from \"../core\";\nimport { setupRemoteBridge } from \"./bridge\";\nimport { initDevTools } from \"./init-dev-tools\";\n\nfunction resolveDevToolsOptions(\n devTools: boolean | DevToolsOptions | undefined,\n): Required<Pick<DevToolsOptions, \"enabled\" | \"mode\">> &\n Pick<DevToolsOptions, \"url\"> {\n if (typeof devTools === \"boolean\") {\n return { enabled: devTools, mode: \"local\" };\n }\n\n return {\n enabled: !!devTools,\n mode: devTools?.mode ?? \"local\",\n url: devTools?.url,\n };\n}\n\nexport function createDevToolsPlugin<T extends object = any>(\n override?: boolean | DevToolsOptions,\n): BitPlugin<T> {\n return {\n name: \"bit-devtools\",\n setup: (context) => {\n const options = resolveDevToolsOptions(\n override ?? context.getConfig().devTools,\n );\n\n if (!options.enabled) {\n return;\n }\n\n let cleanup: (() => void) | null = null;\n const bus = context.getConfig().bus;\n\n try {\n if (options.mode === \"remote\") {\n cleanup = setupRemoteBridge(\n options.url || \"ws://localhost:3000\",\n bus,\n );\n } else {\n const instance = initDevTools({ bus });\n cleanup =\n instance && typeof instance.destroy === \"function\"\n ? instance.destroy\n : null;\n }\n } catch {\n // fail-open: devtools não deve impactar runtime principal\n }\n\n return () => {\n if (cleanup) {\n cleanup();\n cleanup = null;\n }\n };\n },\n };\n}\n"],"mappings":"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","names":["getDevToolsCSS","BitFormDevToolsUI","container","actions","style","getDevToolsCSS","e","target","btn","action","storeId","storesState","storeEntries","panelHtml","id","state","hasErrors","meta","currentStep","totalSteps","triggerHtml","setupLocalDevTools","container","bus","bitBus","ui","BitFormDevToolsUI","id","getDevToolsActionableStore","getFullSnapshot","createDevToolsSnapshotMap","unsubscribe","setupRemoteDevTools","container","url","_bus","socket","sendMessage","message","sendAction","storeId","action","ui","BitFormDevToolsUI","id","msg","data","isDevToolsStateUpdateMessage","e","err","initDevTools","options","mode","url","bus","containerEl","isAutoCreated","el","adapterInstance","setupLocalDevTools","setupRemoteDevTools","resolveDevToolsOptions","devTools","createDevToolsPlugin","override","context","options","cleanup","bus","setupRemoteBridge","instance","initDevTools"]}
|
package/dist/index.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 _chunkHHDHVLGPcjs = require('./chunk-HHDHVLGP.cjs');require('./chunk-AVUK52JW.cjs');require('./chunk-BSGJ3T5S.cjs');require('./chunk-RHMJPKNV.cjs');require('./chunk-3KI3GEU3.cjs');require('./chunk-GKNGJOB3.cjs');require('./chunk-FTXV2NZO.cjs');require('./chunk-WRNR6SXK.cjs');require('./chunk-PFPGASVZ.cjs');exports.createBitStore = _chunkHHDHVLGPcjs.e; exports.createFrameworkStoreAdapter = _chunkHHDHVLGPcjs.d; exports.resolveBitStoreForHooks = _chunkHHDHVLGPcjs.c;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/index.cjs"],"names":[],"mappings":"AAAA,yGAA4B,wDAAuD,gCAA6B,gCAA6B,gCAA6B,gCAA6B,gCAA6B,gCAA6B,gCAA6B,+JAA0F","file":"/home/runner/work/bit-form/bit-form/dist/index.cjs"}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/index.cjs"],"names":[],"mappings":"AAAA,yGAA4B,wDAAuD,gCAA6B,gCAA6B,gCAA6B,gCAA6B,gCAA6B,gCAA6B,gCAA6B,gCAA6B,+JAA0F","file":"/home/runner/work/bit-form/bit-form/dist/index.cjs"}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { e as BitConfig } from './config-types-
|
|
2
|
-
import { e as BitStoreApi, b as BitFrameworkStoreApi, f as BitStoreHooksApi } from './store-api-types-
|
|
1
|
+
import { e as BitConfig } from './config-types-CewC0AIS.cjs';
|
|
2
|
+
import { e as BitStoreApi, b as BitFrameworkStoreApi, f as BitStoreHooksApi } from './store-api-types-CVQuHPhm.cjs';
|
|
3
3
|
import './bus-DzTqgkZ4.cjs';
|
|
4
4
|
import './types-CUXh7PqD.cjs';
|
|
5
5
|
import './state-types-8bUndWfg.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { e as BitConfig } from './config-types-
|
|
2
|
-
import { e as BitStoreApi, b as BitFrameworkStoreApi, f as BitStoreHooksApi } from './store-api-types-
|
|
1
|
+
import { e as BitConfig } from './config-types-BgIAuvzu.js';
|
|
2
|
+
import { e as BitStoreApi, b as BitFrameworkStoreApi, f as BitStoreHooksApi } from './store-api-types-Cy-zEhRU.js';
|
|
3
3
|
import './bus-BFOBGmd9.js';
|
|
4
4
|
import './types-CUXh7PqD.js';
|
|
5
5
|
import './state-types-8bUndWfg.js';
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./chunk-5NA2TFPG.js";import{c as r,d as e,e as o}from"./chunk-
|
|
1
|
+
import"./chunk-5NA2TFPG.js";import{c as r,d as e,e as o}from"./chunk-PQYTA2OP.js";import"./chunk-SYEUXL2E.js";import"./chunk-W2E5UIXT.js";import"./chunk-UIKO6GGW.js";import"./chunk-ICYXODTQ.js";import"./chunk-HE6EQZTH.js";import"./chunk-G3EHXKOS.js";import"./chunk-QCKCONCU.js";import"./chunk-3NUJVIAM.js";export{o as createBitStore,e as createFrameworkStoreAdapter,r as resolveBitStoreForHooks};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/mask.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkWRNR6SXKcjs = require('./chunk-WRNR6SXK.cjs');require('./chunk-PFPGASVZ.cjs');exports.bitMasks = _chunkWRNR6SXKcjs.L; exports.createCreditCardMask = _chunkWRNR6SXKcjs.e; exports.createCurrencyMask = _chunkWRNR6SXKcjs.d; exports.createDateMask = _chunkWRNR6SXKcjs.f; exports.createPatternMask = _chunkWRNR6SXKcjs.c; exports.maskBRL = _chunkWRNR6SXKcjs.g; exports.maskCEP = _chunkWRNR6SXKcjs.s; exports.maskCNH = _chunkWRNR6SXKcjs.v; exports.maskCNPJ = _chunkWRNR6SXKcjs.p; exports.maskCPF = _chunkWRNR6SXKcjs.o; exports.maskCPFCNPJ = _chunkWRNR6SXKcjs.x; exports.maskCVV = _chunkWRNR6SXKcjs.E; exports.maskColorHex = _chunkWRNR6SXKcjs.H; exports.maskCreditCard = _chunkWRNR6SXKcjs.D; exports.maskDate = _chunkWRNR6SXKcjs.t; exports.maskDateISO = _chunkWRNR6SXKcjs.F; exports.maskDateUS = _chunkWRNR6SXKcjs.B; exports.maskDecimal = _chunkWRNR6SXKcjs.m; exports.maskEUR = _chunkWRNR6SXKcjs.i; exports.maskGBP = _chunkWRNR6SXKcjs.j; exports.maskIBAN = _chunkWRNR6SXKcjs.K; exports.maskIPv4 = _chunkWRNR6SXKcjs.I; exports.maskIPv6 = _chunkWRNR6SXKcjs.J; exports.maskInteger = _chunkWRNR6SXKcjs.n; exports.maskJPY = _chunkWRNR6SXKcjs.k; exports.maskLandline = _chunkWRNR6SXKcjs.r; exports.maskMacAddress = _chunkWRNR6SXKcjs.G; exports.maskPercent = _chunkWRNR6SXKcjs.l; exports.maskPhone = _chunkWRNR6SXKcjs.q; exports.maskPlate = _chunkWRNR6SXKcjs.y; exports.maskRG = _chunkWRNR6SXKcjs.w; exports.maskSSN = _chunkWRNR6SXKcjs.C; exports.maskTime = _chunkWRNR6SXKcjs.u; exports.maskUSD = _chunkWRNR6SXKcjs.h; exports.maskUSPhone = _chunkWRNR6SXKcjs.z; exports.maskZipCode = _chunkWRNR6SXKcjs.A; exports.unmask = _chunkWRNR6SXKcjs.a; exports.unmaskCurrency = _chunkWRNR6SXKcjs.b;
|
|
2
2
|
//# sourceMappingURL=mask.cjs.map
|
package/dist/mask.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/mask.cjs"
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/mask.cjs"],"names":[],"mappings":"AAAA,iIAAiS,gCAA6B,yjDAAsmB","file":"/home/runner/work/bit-form/bit-form/dist/mask.cjs"}
|
package/dist/mask.d.cts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a as BitBuiltInMaskName, B as BitMask, P as PatternMaskOptions, C as CurrencyMaskConfig, D as DateMaskConfig } from './types-CUXh7PqD.cjs';
|
|
2
2
|
export { b as BitMaskName } from './types-CUXh7PqD.cjs';
|
|
3
3
|
|
|
4
|
+
declare const bitMasks: Record<BitBuiltInMaskName, BitMask>;
|
|
5
|
+
|
|
4
6
|
declare const unmask: (value: string | number | null | undefined, allowChars?: string) => string;
|
|
5
7
|
declare const unmaskCurrency: (value: any, precision?: number) => number;
|
|
6
8
|
declare const createPatternMask: (pattern: string | string[], options?: PatternMaskOptions) => BitMask;
|
|
@@ -81,6 +83,4 @@ declare const maskIPv6: BitMask;
|
|
|
81
83
|
*/
|
|
82
84
|
declare const maskIBAN: BitMask;
|
|
83
85
|
|
|
84
|
-
declare const bitMasks: Record<BitBuiltInMaskName, BitMask>;
|
|
85
|
-
|
|
86
86
|
export { BitBuiltInMaskName, BitMask, CurrencyMaskConfig, DateMaskConfig, PatternMaskOptions, bitMasks, createCreditCardMask, createCurrencyMask, createDateMask, createPatternMask, maskBRL, maskCEP, maskCNH, maskCNPJ, maskCPF, maskCPFCNPJ, maskCVV, maskColorHex, maskCreditCard, maskDate, maskDateISO, maskDateUS, maskDecimal, maskEUR, maskGBP, maskIBAN, maskIPv4, maskIPv6, maskInteger, maskJPY, maskLandline, maskMacAddress, maskPercent, maskPhone, maskPlate, maskRG, maskSSN, maskTime, maskUSD, maskUSPhone, maskZipCode, unmask, unmaskCurrency };
|
package/dist/mask.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a as BitBuiltInMaskName, B as BitMask, P as PatternMaskOptions, C as CurrencyMaskConfig, D as DateMaskConfig } from './types-CUXh7PqD.js';
|
|
2
2
|
export { b as BitMaskName } from './types-CUXh7PqD.js';
|
|
3
3
|
|
|
4
|
+
declare const bitMasks: Record<BitBuiltInMaskName, BitMask>;
|
|
5
|
+
|
|
4
6
|
declare const unmask: (value: string | number | null | undefined, allowChars?: string) => string;
|
|
5
7
|
declare const unmaskCurrency: (value: any, precision?: number) => number;
|
|
6
8
|
declare const createPatternMask: (pattern: string | string[], options?: PatternMaskOptions) => BitMask;
|
|
@@ -81,6 +83,4 @@ declare const maskIPv6: BitMask;
|
|
|
81
83
|
*/
|
|
82
84
|
declare const maskIBAN: BitMask;
|
|
83
85
|
|
|
84
|
-
declare const bitMasks: Record<BitBuiltInMaskName, BitMask>;
|
|
85
|
-
|
|
86
86
|
export { BitBuiltInMaskName, BitMask, CurrencyMaskConfig, DateMaskConfig, PatternMaskOptions, bitMasks, createCreditCardMask, createCurrencyMask, createDateMask, createPatternMask, maskBRL, maskCEP, maskCNH, maskCNPJ, maskCPF, maskCPFCNPJ, maskCVV, maskColorHex, maskCreditCard, maskDate, maskDateISO, maskDateUS, maskDecimal, maskEUR, maskGBP, maskIBAN, maskIPv4, maskIPv6, maskInteger, maskJPY, maskLandline, maskMacAddress, maskPercent, maskPhone, maskPlate, maskRG, maskSSN, maskTime, maskUSD, maskUSPhone, maskZipCode, unmask, unmaskCurrency };
|
package/dist/mask.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import{A as g,B as J,C as R,D as b,E as h,F as v,G as A,H as E,I as F,J as G,K as H,L as a,a as s,b as e,c as m,d as k,e as r,f as t,g as o,h as C,i as n,j as i,k as P,l as p,m as M,n as c,o as f,p as x,q as d,r as B,s as D,t as N,u,v as I,w as S,x as l,y,z as U}from"./chunk-QCKCONCU.js";import"./chunk-3NUJVIAM.js";export{a as bitMasks,r as createCreditCardMask,k as createCurrencyMask,t as createDateMask,m as createPatternMask,o as maskBRL,D as maskCEP,I as maskCNH,x as maskCNPJ,f as maskCPF,l as maskCPFCNPJ,h as maskCVV,E as maskColorHex,b as maskCreditCard,N as maskDate,v as maskDateISO,J as maskDateUS,M as maskDecimal,n as maskEUR,i as maskGBP,H as maskIBAN,F as maskIPv4,G as maskIPv6,c as maskInteger,P as maskJPY,B as maskLandline,A as maskMacAddress,p as maskPercent,d as maskPhone,y as maskPlate,S as maskRG,R as maskSSN,u as maskTime,C as maskUSD,U as maskUSPhone,g as maskZipCode,s as unmask,e as unmaskCurrency};
|
|
2
2
|
//# sourceMappingURL=mask.js.map
|
package/dist/mask.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/mask/creators.ts","../src/core/mask/presets.ts","../src/core/mask/index.ts"],"sourcesContent":["import {\n BitMask,\n CurrencyMaskConfig,\n DateMaskConfig,\n PatternMaskOptions,\n} from \"./types\";\n\ntype TokenMap = Record<string, RegExp>;\n\nconst tokens: TokenMap = {\n \"#\": /\\d/,\n A: /[a-zA-Z]/,\n X: /[a-zA-Z0-9]/,\n H: /[0-9a-fA-F]/,\n U: /[A-Z]/,\n L: /[a-z]/,\n \"*\": /./,\n};\n\nexport const unmask = (\n value: string | number | null | undefined,\n allowChars?: string,\n): string => {\n if (value === null || value === undefined || value === \"\") return \"\";\n const stringValue = String(value);\n const isNegative = stringValue.startsWith(\"-\");\n\n const escapedChars = allowChars\n ? allowChars.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n : \"\";\n const regex = new RegExp(`[^a-zA-Z0-9${escapedChars}]`, \"g\");\n\n const clean = stringValue.replace(regex, \"\");\n return isNegative && clean && !clean.startsWith(\"-\") ? `-${clean}` : clean;\n};\n\nexport const unmaskCurrency = (value: any, precision = 2): number => {\n if (typeof value === \"number\") return value;\n if (!value) return 0;\n\n const stringValue = String(value);\n const isNegative = stringValue.includes(\"-\");\n const digits = stringValue.replace(/\\D/g, \"\");\n\n if (!digits) return 0;\n\n const numberValue = parseInt(digits, 10) / Math.pow(10, precision);\n return isNegative ? -numberValue : numberValue;\n};\n\nexport const createPatternMask = (\n pattern: string | string[],\n options?: PatternMaskOptions,\n): BitMask => {\n const getRawLength = (p: string) =>\n p.split(\"\").filter((c) => tokens[c]).length;\n\n const patterns = Array.isArray(pattern) ? pattern : [pattern];\n const sortedPatterns = [...patterns].sort(\n (a, b) => getRawLength(a) - getRawLength(b),\n );\n\n const getActivePattern = (rawValueLength: number) => {\n let activePattern = sortedPatterns[sortedPatterns.length - 1];\n for (const candidate of sortedPatterns) {\n if (rawValueLength <= getRawLength(candidate)) {\n activePattern = candidate;\n break;\n }\n }\n return activePattern;\n };\n\n const formatValue = (value: string | number | null | undefined): string => {\n const stringVal = unmask(value, options?.allowChars);\n\n if (!stringVal && !options?.guide) {\n return \"\";\n }\n\n const activePattern = getActivePattern(stringVal.length);\n const showGuide = options?.guide || false;\n const placeholder = options?.placeholderChar || \"_\";\n\n let masked = \"\";\n let valueIndex = 0;\n\n for (let i = 0; i < activePattern.length; i++) {\n const patternChar = activePattern[i];\n const token = tokens[patternChar];\n\n if (valueIndex < stringVal.length) {\n let dataChar = stringVal[valueIndex];\n\n if (token) {\n if (patternChar === \"U\") dataChar = dataChar.toUpperCase();\n if (patternChar === \"L\") dataChar = dataChar.toLowerCase();\n\n if (token.test(dataChar)) {\n masked += dataChar;\n valueIndex++;\n } else if (showGuide) {\n masked += placeholder;\n } else {\n break;\n }\n } else {\n masked += patternChar;\n if (dataChar === patternChar) valueIndex++;\n }\n } else if (showGuide) {\n masked += token ? placeholder : patternChar;\n } else {\n break;\n }\n }\n\n return masked;\n };\n\n return {\n format: formatValue,\n parse: (value: string) => {\n if (options?.customParse) return options.customParse(value);\n\n const formatted = formatValue(value);\n\n if (options?.saveRaw) {\n if (options?.guide) {\n const placeholder = options.placeholderChar || \"_\";\n const escapedPlaceholder = placeholder.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n \"\\\\$&\",\n );\n const placeholderRegex = new RegExp(escapedPlaceholder, \"g\");\n\n return formatted.replace(placeholderRegex, \"\");\n }\n\n return formatted;\n }\n\n return unmask(formatted, options?.allowChars);\n },\n };\n};\n\nexport const createCurrencyMask = ({\n prefix = \"\",\n suffix = \"\",\n thousand,\n decimal,\n precision = 2,\n allowNegative = true,\n saveRaw = false,\n}: CurrencyMaskConfig): BitMask => {\n const formatFn = (value: any) => {\n if (value === undefined || value === null || value === \"\") return \"\";\n\n let stringValue =\n typeof value === \"number\"\n ? Math.abs(value).toFixed(precision).replace(/\\D/g, \"\")\n : String(value).replace(/\\D/g, \"\");\n\n if (!stringValue && String(value).includes(\"-\") && allowNegative)\n return \"-\";\n if (!stringValue) return \"\";\n\n stringValue = stringValue.padStart(precision + 1, \"0\");\n\n const integerPart =\n precision > 0\n ? stringValue.slice(0, -precision).replace(/^0+(?=\\d)/, \"\") || \"0\"\n : stringValue.replace(/^0+(?=\\d)/, \"\") || \"0\";\n const decimalPart = precision > 0 ? stringValue.slice(-precision) : \"\";\n\n const formattedInteger = integerPart.replace(\n /\\B(?=(\\d{3})+(?!\\d))/g,\n thousand,\n );\n\n const isNegative =\n typeof value === \"number\" ? value < 0 : String(value).includes(\"-\");\n const sign = isNegative && allowNegative ? \"-\" : \"\";\n\n if (precision === 0) {\n return `${sign}${prefix}${formattedInteger}${suffix}`;\n }\n\n return `${sign}${prefix}${formattedInteger}${decimal}${decimalPart}${suffix}`;\n };\n\n return {\n format: formatFn,\n parse: (value: string) => {\n const numericValue = unmaskCurrency(value, precision);\n const finalNumber = !allowNegative\n ? Math.abs(numericValue)\n : numericValue;\n if (saveRaw) return formatFn(finalNumber);\n return finalNumber;\n },\n };\n};\n\nexport const createCreditCardMask = (options?: PatternMaskOptions): BitMask => {\n // Função auxiliar para descobrir o padrão dinamicamente\n const getCardPattern = (rawValue: string) => {\n // Amex (American Express) começa com 34 ou 37 -> 15 dígitos\n if (/^3[47]/.test(rawValue)) {\n return \"#### ###### #####\";\n }\n // Diners Club começa com 300-305, 36 ou 38 -> 14 dígitos\n if (/^3(?:0[0-5]|[68])/.test(rawValue)) {\n return \"#### ###### ####\";\n }\n // Default: Visa, Mastercard, Discover, Elo, etc -> 16 dígitos\n return \"#### #### #### ####\";\n };\n\n return {\n format: (value: any) => {\n const stringVal = unmask(value, options?.allowChars);\n const pattern = getCardPattern(stringVal);\n const mask = createPatternMask(pattern, options);\n return mask.format(value);\n },\n parse: (value: string) => {\n const stringVal = unmask(value, options?.allowChars);\n const pattern = getCardPattern(stringVal);\n\n const mask = createPatternMask(pattern, options);\n return mask.parse(value);\n },\n };\n};\n\nexport const createDateMask = (config?: DateMaskConfig): BitMask => {\n const formatType = config?.format || \"DD/MM/YYYY\";\n const isISO = formatType === \"YYYY-MM-DD\";\n\n // Criamos a máscara base consoante o formato escolhido\n const baseMask = createPatternMask(\n isISO ? \"####-##-##\" : \"##/##/####\",\n config,\n );\n\n return {\n format: (value: any) => {\n let stringVal = unmask(value);\n if (!stringVal) return \"\";\n\n let day: string;\n let month: string;\n let year: string;\n\n // Separamos os componentes consoante o que o utilizador já digitou\n if (isISO) {\n year = stringVal.substring(0, 4);\n month = stringVal.substring(4, 6);\n day = stringVal.substring(6, 8);\n } else {\n day = stringVal.substring(0, 2);\n month = stringVal.substring(2, 4);\n year = stringVal.substring(4, 8);\n }\n\n // Validação do Dia (01 a 31)\n if (day.length === 2) {\n const d = parseInt(day, 10);\n if (d > 31) day = \"31\";\n if (d === 0) day = \"01\";\n }\n\n // Validação do Mês (01 a 12)\n if (month.length === 2) {\n const m = parseInt(month, 10);\n if (m > 12) month = \"12\";\n if (m === 0) month = \"01\";\n }\n\n // Reconstruímos a string limpa e passamos para o pattern normal\n const safeString = isISO\n ? `${year}${month}${day}`\n : `${day}${month}${year}`;\n\n return baseMask.format(safeString);\n },\n parse: (value: string) => {\n // Usamos a funcionalidade completa da máscara base (incluindo o saveRaw e o unmasking)\n return baseMask.parse(value);\n },\n };\n};\n","import type { BitMask } from \"./types\";\nimport {\n createCreditCardMask,\n createCurrencyMask,\n createDateMask,\n createPatternMask,\n} from \"./creators\";\n\n// ==========================================\n// 💲 MOEDAS (Currencies)\n// ==========================================\n\n/** BRL - Real Brasileiro (R$ 1.000,00) */\nexport const maskBRL = createCurrencyMask({\n prefix: \"R$ \",\n thousand: \".\",\n decimal: \",\",\n precision: 2,\n});\n\n/** USD - Dólar Americano ($1,000.00) */\nexport const maskUSD = createCurrencyMask({\n prefix: \"$\",\n thousand: \",\",\n decimal: \".\",\n precision: 2,\n});\n\n/** EUR - Euro Padrão (€ 1.000,00) - Sufixo comum na Europa */\nexport const maskEUR = createCurrencyMask({\n suffix: \" €\",\n thousand: \".\",\n decimal: \",\",\n precision: 2,\n});\n\n/** GBP - Libra Esterlina (£1,000.00) */\nexport const maskGBP = createCurrencyMask({\n prefix: \"£\",\n thousand: \",\",\n decimal: \".\",\n precision: 2,\n});\n\n/** JPY - Iene Japonês (¥1,000) - Geralmente sem decimais */\nexport const maskJPY = createCurrencyMask({\n prefix: \"¥\",\n thousand: \",\",\n decimal: \".\",\n precision: 0,\n});\n\n// ==========================================\n// 🔢 NÚMEROS E PERCENTUAIS\n// ==========================================\n\n/** Porcentagem PT-BR (10,5%) */\nexport const maskPercent = createCurrencyMask({\n suffix: \"%\",\n thousand: \".\",\n decimal: \",\",\n precision: 1, // Ex: 99,9%\n});\n\n/** Decimal Genérico PT-BR (1.000,00) - Sem símbolo */\nexport const maskDecimal = createCurrencyMask({\n thousand: \".\",\n decimal: \",\",\n precision: 2,\n});\n\n/** Inteiro (1.000) - Apenas separador de milhar */\nexport const maskInteger = createCurrencyMask({\n thousand: \".\",\n decimal: \",\",\n precision: 0,\n});\n\n// ==========================================\n// 🇧🇷 PADRÕES BRASILEIROS (Brazil)\n// ==========================================\n\n/** CPF (000.000.000-00) */\nexport const maskCPF = createPatternMask(\"###.###.###-##\");\n\n/** CNPJ (00.000.000/0000-00) */\nexport const maskCNPJ = createPatternMask(\"##.###.###/####-##\");\n\nexport const maskPhone = createPatternMask([\n \"(##) ####-####\", // Fixo (10 dígitos)\n \"(##) #####-####\", // Celular (11 dígitos)\n]);\n\n/** Telefone Fixo BR (11) 0000-0000 */\nexport const maskLandline = createPatternMask(\"(##) ####-####\");\n\n/** CEP (00000-000) */\nexport const maskCEP = createPatternMask(\"#####-###\");\n\n/** Data PT/BR com correção automática de dia/mês */\nexport const maskDate = createDateMask({\n format: \"DD/MM/YYYY\",\n guide: true,\n customParse: (val) => {\n const cleanVal = val.replace(/_/g, \"\");\n const parts = cleanVal.split(\"/\");\n if (parts.length === 3 && parts[2].length === 4) {\n return `${parts[2]}-${parts[1]}-${parts[0]}`;\n }\n return cleanVal.replace(/\\D/g, \"\");\n },\n});\n\n/** Hora Curta (HH:MM) */\nexport const maskTime = createPatternMask(\"##:##\");\n\n/** CNH (Carteira de Motorista - 11 dígitos) */\nexport const maskCNH = createPatternMask(\"###########\");\n\n/** RG (00.000.000-X) - Suporta o 'X' como dígito verificador */\nexport const maskRG = createPatternMask(\"##.###.###-X\");\n\n/**\n * CPF + CNPJ combinado — alterna automaticamente pelo número de dígitos:\n * - Até 11 dígitos → CPF (000.000.000-00)\n * - Mais de 11 → CNPJ (00.000.000/0000-00)\n */\nexport const maskCPFCNPJ = createPatternMask([\n \"###.###.###-##\",\n \"##.###.###/####-##\",\n]);\n\n/**\n * Placa de veículo BR — detecta o formato pelo 5.º caractere:\n * - Antigo → ABC-1234 (posição 5 é dígito)\n * - Mercosul → ABC1D23 (posição 5 é letra)\n */\nexport const maskPlate: BitMask = {\n format(value: any): string {\n const raw = String(value ?? \"\")\n .replace(/[^a-zA-Z0-9]/g, \"\")\n .toUpperCase()\n .slice(0, 7);\n\n if (raw.length === 0) return \"\";\n\n const prefix = raw.slice(0, 3);\n const rest = raw.slice(3);\n\n if (rest.length === 0) return prefix;\n\n // Posição 5 (rest[1]): letra → Mercosul; dígito → formato antigo\n const isMercosul = rest.length >= 2 && /[A-Z]/.test(rest[1]);\n\n return isMercosul ? `${prefix}${rest}` : `${prefix}-${rest}`;\n },\n parse(value: string): string {\n return String(value ?? \"\")\n .replace(/[^a-zA-Z0-9]/g, \"\")\n .toUpperCase()\n .slice(0, 7);\n },\n};\n\n// ==========================================\n// 🇺🇸 PADRÕES AMERICANOS (USA)\n// ==========================================\n\n/** US Phone ((000) 000-0000) */\nexport const maskUSPhone = createPatternMask(\"(###) ###-####\");\n\n/** ZIP Code (00000 or 00000-0000) */\nexport const maskZipCode = createPatternMask(\"#####-####\");\n\n/** Date US (MM/DD/YYYY) - Igual ao BR, mas semântica diferente */\nexport const maskDateUS = createPatternMask(\"##/##/####\");\n\n/** SSN (Social Security Number) */\nexport const maskSSN = createPatternMask(\"###-##-####\");\n\n// ==========================================\n// 🌐 PADRÕES GLOBAIS / TÉCNICOS\n// ==========================================\n\n/** Cartão de Crédito Inteligente (Detecta Visa/Master, Amex e Diners) */\nexport const maskCreditCard = createCreditCardMask();\n\n/** CVV (3 ou 4 dígitos) */\nexport const maskCVV = createPatternMask(\"####\");\n\n/** Data ISO (Ideal para base de dados: YYYY-MM-DD) */\nexport const maskDateISO = createDateMask({\n format: \"YYYY-MM-DD\",\n saveRaw: true,\n guide: true,\n});\n\n/** Endereço MAC (HH:HH:HH:HH:HH:HH) - Usa o token Hexadecimal */\nexport const maskMacAddress = createPatternMask(\"HH:HH:HH:HH:HH:HH\");\n\n/** Cor Hexadecimal (#HHHHHH) */\nexport const maskColorHex = createPatternMask(\"#HHHHHH\");\n\n/** IPv4 (000.000.000.000) - Formato de blocos fixos */\nexport const maskIPv4 = createPatternMask(\"###.###.###.###\");\n\n/** IPv6 (HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH) */\nexport const maskIPv6 = createPatternMask(\n \"HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH\",\n);\n\n/** * IBAN Internacional\n * Força as duas primeiras letras para maiúsculas e agrupa de 4 em 4.\n * O tamanho máximo cobre os 34 caracteres do padrão IBAN.\n */\nexport const maskIBAN = createPatternMask(\n \"UU## XXXX XXXX XXXX XXXX XXXX XXXX XXXX XX\",\n { allowChars: \" \" },\n);\n","export * from \"./types\";\nexport * from \"./creators\";\nexport * from \"./presets\";\nexport * from \"./field-binding\";\n\nimport * as presets from \"./presets\";\nimport type { BitMask, BitBuiltInMaskName } from \"./types\";\n\nexport const bitMasks: Record<BitBuiltInMaskName, BitMask> = {\n // Moedas\n brl: presets.maskBRL,\n usd: presets.maskUSD,\n eur: presets.maskEUR,\n gbp: presets.maskGBP,\n jpy: presets.maskJPY,\n // Números\n percent: presets.maskPercent,\n decimal: presets.maskDecimal,\n int: presets.maskInteger,\n integer: presets.maskInteger,\n // Documentos BR\n cpf: presets.maskCPF,\n cnpj: presets.maskCNPJ,\n cpfCnpj: presets.maskCPFCNPJ,\n rg: presets.maskRG,\n cep: presets.maskCEP,\n cnh: presets.maskCNH,\n plate: presets.maskPlate,\n // Comunicação/Data\n phone: presets.maskPhone,\n landline: presets.maskLandline,\n date: presets.maskDate,\n time: presets.maskTime,\n // USA\n usPhone: presets.maskUSPhone,\n zipCode: presets.maskZipCode,\n dateUS: presets.maskDateUS,\n ssn: presets.maskSSN,\n // Tech/Global\n cc: presets.maskCreditCard,\n cvv: presets.maskCVV,\n dateISO: presets.maskDateISO,\n ip: presets.maskIPv4,\n ipv6: presets.maskIPv6,\n mac: presets.maskMacAddress,\n color: presets.maskColorHex,\n iban: presets.maskIBAN,\n};\n"],"mappings":"4BASA,IAAMA,GAAmB,CACvB,IAAK,KACL,EAAG,WACH,EAAG,cACH,EAAG,cACH,EAAG,QACH,EAAG,QACH,IAAK,GACP,EAEaC,EAAS,CACpBC,EACAC,IACW,CACX,GAAID,GAAU,MAA+BA,IAAU,GAAI,MAAO,GAClE,IAAME,EAAc,OAAOF,CAAK,EAC1BG,EAAaD,EAAY,WAAW,GAAG,EAEvCE,EAAeH,EACjBA,EAAW,QAAQ,sBAAuB,MAAM,EAChD,GACEI,EAAQ,IAAI,OAAO,cAAcD,CAAY,IAAK,GAAG,EAErDE,EAAQJ,EAAY,QAAQG,EAAO,EAAE,EAC3C,OAAOF,GAAcG,GAAS,CAACA,EAAM,WAAW,GAAG,EAAI,IAAIA,CAAK,GAAKA,CACvE,EAEaC,GAAiB,CAACP,EAAYQ,EAAY,IAAc,CACnE,GAAI,OAAOR,GAAU,SAAU,OAAOA,EACtC,GAAI,CAACA,EAAO,MAAO,GAEnB,IAAME,EAAc,OAAOF,CAAK,EAC1BG,EAAaD,EAAY,SAAS,GAAG,EACrCO,EAASP,EAAY,QAAQ,MAAO,EAAE,EAE5C,GAAI,CAACO,EAAQ,MAAO,GAEpB,IAAMC,EAAc,SAASD,EAAQ,EAAE,EAAI,KAAK,IAAI,GAAID,CAAS,EACjE,OAAOL,EAAa,CAACO,EAAcA,CACrC,EAEaC,EAAoB,CAC/BC,EACAC,IACY,CACZ,IAAMC,EAAgBC,GACpBA,EAAE,MAAM,EAAE,EAAE,OAAQC,GAAMlB,GAAOkB,CAAC,CAAC,EAAE,OAGjCC,EAAiB,CAAC,GADP,MAAM,QAAQL,CAAO,EAAIA,EAAU,CAACA,CAAO,CACzB,EAAE,KACnC,CAACM,EAAGC,IAAML,EAAaI,CAAC,EAAIJ,EAAaK,CAAC,CAC5C,EAEMC,EAAoBC,GAA2B,CACnD,IAAIC,EAAgBL,EAAeA,EAAe,OAAS,CAAC,EAC5D,QAAWM,KAAaN,EACtB,GAAII,GAAkBP,EAAaS,CAAS,EAAG,CAC7CD,EAAgBC,EAChB,KACF,CAEF,OAAOD,CACT,EAEME,EAAexB,GAAsD,CACzE,IAAMyB,EAAY1B,EAAOC,EAAOa,GAAS,UAAU,EAEnD,GAAI,CAACY,GAAa,CAACZ,GAAS,MAC1B,MAAO,GAGT,IAAMS,EAAgBF,EAAiBK,EAAU,MAAM,EACjDC,EAAYb,GAAS,OAAS,GAC9Bc,EAAcd,GAAS,iBAAmB,IAE5Ce,EAAS,GACTC,EAAa,EAEjB,QAASC,EAAI,EAAGA,EAAIR,EAAc,OAAQQ,IAAK,CAC7C,IAAMC,EAAcT,EAAcQ,CAAC,EAC7BE,EAAQlC,GAAOiC,CAAW,EAEhC,GAAIF,EAAaJ,EAAU,OAAQ,CACjC,IAAIQ,EAAWR,EAAUI,CAAU,EAEnC,GAAIG,EAIF,GAHID,IAAgB,MAAKE,EAAWA,EAAS,YAAY,GACrDF,IAAgB,MAAKE,EAAWA,EAAS,YAAY,GAErDD,EAAM,KAAKC,CAAQ,EACrBL,GAAUK,EACVJ,YACSH,EACTE,GAAUD,MAEV,YAGFC,GAAUG,EACNE,IAAaF,GAAaF,GAElC,SAAWH,EACTE,GAAUI,EAAQL,EAAcI,MAEhC,MAEJ,CAEA,OAAOH,CACT,EAEA,MAAO,CACL,OAAQJ,EACR,MAAQxB,GAAkB,CACxB,GAAIa,GAAS,YAAa,OAAOA,EAAQ,YAAYb,CAAK,EAE1D,IAAMkC,EAAYV,EAAYxB,CAAK,EAEnC,GAAIa,GAAS,QAAS,CACpB,GAAIA,GAAS,MAAO,CAElB,IAAMsB,GADctB,EAAQ,iBAAmB,KACR,QACrC,sBACA,MACF,EACMuB,EAAmB,IAAI,OAAOD,EAAoB,GAAG,EAE3D,OAAOD,EAAU,QAAQE,EAAkB,EAAE,CAC/C,CAEA,OAAOF,CACT,CAEA,OAAOnC,EAAOmC,EAAWrB,GAAS,UAAU,CAC9C,CACF,CACF,EAEawB,EAAqB,CAAC,CACjC,OAAAC,EAAS,GACT,OAAAC,EAAS,GACT,SAAAC,EACA,QAAAC,EACA,UAAAjC,EAAY,EACZ,cAAAkC,EAAgB,GAChB,QAAAC,EAAU,EACZ,IAAmC,CACjC,IAAMC,EAAY5C,GAAe,CAC/B,GAA2BA,GAAU,MAAQA,IAAU,GAAI,MAAO,GAElE,IAAIE,EACF,OAAOF,GAAU,SACb,KAAK,IAAIA,CAAK,EAAE,QAAQQ,CAAS,EAAE,QAAQ,MAAO,EAAE,EACpD,OAAOR,CAAK,EAAE,QAAQ,MAAO,EAAE,EAErC,GAAI,CAACE,GAAe,OAAOF,CAAK,EAAE,SAAS,GAAG,GAAK0C,EACjD,MAAO,IACT,GAAI,CAACxC,EAAa,MAAO,GAEzBA,EAAcA,EAAY,SAASM,EAAY,EAAG,GAAG,EAErD,IAAMqC,EACJrC,EAAY,EACRN,EAAY,MAAM,EAAG,CAACM,CAAS,EAAE,QAAQ,YAAa,EAAE,GAAK,IAC7DN,EAAY,QAAQ,YAAa,EAAE,GAAK,IACxC4C,EAActC,EAAY,EAAIN,EAAY,MAAM,CAACM,CAAS,EAAI,GAE9DuC,EAAmBF,EAAY,QACnC,wBACAL,CACF,EAIMQ,GADJ,OAAOhD,GAAU,SAAWA,EAAQ,EAAI,OAAOA,CAAK,EAAE,SAAS,GAAG,IACzC0C,EAAgB,IAAM,GAEjD,OAAIlC,IAAc,EACT,GAAGwC,CAAI,GAAGV,CAAM,GAAGS,CAAgB,GAAGR,CAAM,GAG9C,GAAGS,CAAI,GAAGV,CAAM,GAAGS,CAAgB,GAAGN,CAAO,GAAGK,CAAW,GAAGP,CAAM,EAC7E,EAEA,MAAO,CACL,OAAQK,EACR,MAAQ5C,GAAkB,CACxB,IAAMiD,EAAe1C,GAAeP,EAAOQ,CAAS,EAC9C0C,EAAeR,EAEjBO,EADA,KAAK,IAAIA,CAAY,EAEzB,OAAIN,EAAgBC,EAASM,CAAW,EACjCA,CACT,CACF,CACF,EAEaC,EAAwBtC,GAA0C,CAE7E,IAAMuC,EAAkBC,GAElB,SAAS,KAAKA,CAAQ,EACjB,oBAGL,oBAAoB,KAAKA,CAAQ,EAC5B,mBAGF,sBAGT,MAAO,CACL,OAASrD,GAAe,CACtB,IAAMyB,EAAY1B,EAAOC,EAAOa,GAAS,UAAU,EAC7CD,EAAUwC,EAAe3B,CAAS,EAExC,OADad,EAAkBC,EAASC,CAAO,EACnC,OAAOb,CAAK,CAC1B,EACA,MAAQA,GAAkB,CACxB,IAAMyB,EAAY1B,EAAOC,EAAOa,GAAS,UAAU,EAC7CD,EAAUwC,EAAe3B,CAAS,EAGxC,OADad,EAAkBC,EAASC,CAAO,EACnC,MAAMb,CAAK,CACzB,CACF,CACF,EAEasD,EAAkBC,GAAqC,CAElE,IAAMC,GADaD,GAAQ,QAAU,gBACR,aAGvBE,EAAW9C,EACf6C,EAAQ,aAAe,aACvBD,CACF,EAEA,MAAO,CACL,OAASvD,GAAe,CACtB,IAAIyB,EAAY1B,EAAOC,CAAK,EAC5B,GAAI,CAACyB,EAAW,MAAO,GAEvB,IAAIiC,EACAC,EACAC,EAcJ,GAXIJ,GACFI,EAAOnC,EAAU,UAAU,EAAG,CAAC,EAC/BkC,EAAQlC,EAAU,UAAU,EAAG,CAAC,EAChCiC,EAAMjC,EAAU,UAAU,EAAG,CAAC,IAE9BiC,EAAMjC,EAAU,UAAU,EAAG,CAAC,EAC9BkC,EAAQlC,EAAU,UAAU,EAAG,CAAC,EAChCmC,EAAOnC,EAAU,UAAU,EAAG,CAAC,GAI7BiC,EAAI,SAAW,EAAG,CACpB,IAAMG,EAAI,SAASH,EAAK,EAAE,EACtBG,EAAI,KAAIH,EAAM,MACdG,IAAM,IAAGH,EAAM,KACrB,CAGA,GAAIC,EAAM,SAAW,EAAG,CACtB,IAAMG,EAAI,SAASH,EAAO,EAAE,EACxBG,EAAI,KAAIH,EAAQ,MAChBG,IAAM,IAAGH,EAAQ,KACvB,CAGA,IAAMI,EAAaP,EACf,GAAGI,CAAI,GAAGD,CAAK,GAAGD,CAAG,GACrB,GAAGA,CAAG,GAAGC,CAAK,GAAGC,CAAI,GAEzB,OAAOH,EAAS,OAAOM,CAAU,CACnC,EACA,MAAQ/D,GAECyD,EAAS,MAAMzD,CAAK,CAE/B,CACF,ECxRO,IAAMgE,EAAUC,EAAmB,CACxC,OAAQ,MACR,SAAU,IACV,QAAS,IACT,UAAW,CACb,CAAC,EAGYC,EAAUD,EAAmB,CACxC,OAAQ,IACR,SAAU,IACV,QAAS,IACT,UAAW,CACb,CAAC,EAGYE,EAAUF,EAAmB,CACxC,OAAQ,UACR,SAAU,IACV,QAAS,IACT,UAAW,CACb,CAAC,EAGYG,EAAUH,EAAmB,CACxC,OAAQ,OACR,SAAU,IACV,QAAS,IACT,UAAW,CACb,CAAC,EAGYI,EAAUJ,EAAmB,CACxC,OAAQ,OACR,SAAU,IACV,QAAS,IACT,UAAW,CACb,CAAC,EAOYK,EAAcL,EAAmB,CAC5C,OAAQ,IACR,SAAU,IACV,QAAS,IACT,UAAW,CACb,CAAC,EAGYM,EAAcN,EAAmB,CAC5C,SAAU,IACV,QAAS,IACT,UAAW,CACb,CAAC,EAGYO,EAAcP,EAAmB,CAC5C,SAAU,IACV,QAAS,IACT,UAAW,CACb,CAAC,EAOYQ,EAAUC,EAAkB,gBAAgB,EAG5CC,EAAWD,EAAkB,oBAAoB,EAEjDE,EAAYF,EAAkB,CACzC,iBACA,iBACF,CAAC,EAGYG,EAAeH,EAAkB,gBAAgB,EAGjDI,EAAUJ,EAAkB,WAAW,EAGvCK,EAAWC,EAAe,CACrC,OAAQ,aACR,MAAO,GACP,YAAcC,GAAQ,CACpB,IAAMC,EAAWD,EAAI,QAAQ,KAAM,EAAE,EAC/BE,EAAQD,EAAS,MAAM,GAAG,EAChC,OAAIC,EAAM,SAAW,GAAKA,EAAM,CAAC,EAAE,SAAW,EACrC,GAAGA,EAAM,CAAC,CAAC,IAAIA,EAAM,CAAC,CAAC,IAAIA,EAAM,CAAC,CAAC,GAErCD,EAAS,QAAQ,MAAO,EAAE,CACnC,CACF,CAAC,EAGYE,EAAWV,EAAkB,OAAO,EAGpCW,EAAUX,EAAkB,aAAa,EAGzCY,EAASZ,EAAkB,cAAc,EAOzCa,EAAcb,EAAkB,CAC3C,iBACA,oBACF,CAAC,EAOYc,EAAqB,CAChC,OAAOC,EAAoB,CACzB,IAAMC,EAAM,OAAOD,GAAS,EAAE,EAC3B,QAAQ,gBAAiB,EAAE,EAC3B,YAAY,EACZ,MAAM,EAAG,CAAC,EAEb,GAAIC,EAAI,SAAW,EAAG,MAAO,GAE7B,IAAMC,EAASD,EAAI,MAAM,EAAG,CAAC,EACvBE,EAAOF,EAAI,MAAM,CAAC,EAExB,OAAIE,EAAK,SAAW,EAAUD,EAGXC,EAAK,QAAU,GAAK,QAAQ,KAAKA,EAAK,CAAC,CAAC,EAEvC,GAAGD,CAAM,GAAGC,CAAI,GAAK,GAAGD,CAAM,IAAIC,CAAI,EAC5D,EACA,MAAMH,EAAuB,CAC3B,OAAO,OAAOA,GAAS,EAAE,EACtB,QAAQ,gBAAiB,EAAE,EAC3B,YAAY,EACZ,MAAM,EAAG,CAAC,CACf,CACF,EAOaI,EAAcnB,EAAkB,gBAAgB,EAGhDoB,EAAcpB,EAAkB,YAAY,EAG5CqB,EAAarB,EAAkB,YAAY,EAG3CsB,EAAUtB,EAAkB,aAAa,EAOzCuB,EAAiBC,EAAqB,EAGtCC,EAAUzB,EAAkB,MAAM,EAGlC0B,EAAcpB,EAAe,CACxC,OAAQ,aACR,QAAS,GACT,MAAO,EACT,CAAC,EAGYqB,EAAiB3B,EAAkB,mBAAmB,EAGtD4B,EAAe5B,EAAkB,SAAS,EAG1C6B,EAAW7B,EAAkB,iBAAiB,EAG9C8B,EAAW9B,EACtB,yCACF,EAMa+B,EAAW/B,EACtB,6CACA,CAAE,WAAY,GAAI,CACpB,EClNO,IAAMgC,GAAgD,CAE3D,IAAaC,EACb,IAAaC,EACb,IAAaC,EACb,IAAaC,EACb,IAAaC,EAEb,QAAiBC,EACjB,QAAiBC,EACjB,IAAaC,EACb,QAAiBA,EAEjB,IAAaC,EACb,KAAcC,EACd,QAAiBC,EACjB,GAAYC,EACZ,IAAaC,EACb,IAAaC,EACb,MAAeC,EAEf,MAAeC,EACf,SAAkBC,EAClB,KAAcC,EACd,KAAcC,EAEd,QAAiBC,EACjB,QAAiBC,EACjB,OAAgBC,EAChB,IAAaC,EAEb,GAAYC,EACZ,IAAaC,EACb,QAAiBC,EACjB,GAAYC,EACZ,KAAcC,EACd,IAAaC,EACb,MAAeC,EACf,KAAcC,CAChB","names":["tokens","unmask","value","allowChars","stringValue","isNegative","escapedChars","regex","clean","unmaskCurrency","precision","digits","numberValue","createPatternMask","pattern","options","getRawLength","p","c","sortedPatterns","a","b","getActivePattern","rawValueLength","activePattern","candidate","formatValue","stringVal","showGuide","placeholder","masked","valueIndex","i","patternChar","token","dataChar","formatted","escapedPlaceholder","placeholderRegex","createCurrencyMask","prefix","suffix","thousand","decimal","allowNegative","saveRaw","formatFn","integerPart","decimalPart","formattedInteger","sign","numericValue","finalNumber","createCreditCardMask","getCardPattern","rawValue","createDateMask","config","isISO","baseMask","day","month","year","d","m","safeString","maskBRL","createCurrencyMask","maskUSD","maskEUR","maskGBP","maskJPY","maskPercent","maskDecimal","maskInteger","maskCPF","createPatternMask","maskCNPJ","maskPhone","maskLandline","maskCEP","maskDate","createDateMask","val","cleanVal","parts","maskTime","maskCNH","maskRG","maskCPFCNPJ","maskPlate","value","raw","prefix","rest","maskUSPhone","maskZipCode","maskDateUS","maskSSN","maskCreditCard","createCreditCardMask","maskCVV","maskDateISO","maskMacAddress","maskColorHex","maskIPv4","maskIPv6","maskIBAN","bitMasks","maskBRL","maskUSD","maskEUR","maskGBP","maskJPY","maskPercent","maskDecimal","maskInteger","maskCPF","maskCNPJ","maskCPFCNPJ","maskRG","maskCEP","maskCNH","maskPlate","maskPhone","maskLandline","maskDate","maskTime","maskUSPhone","maskZipCode","maskDateUS","maskSSN","maskCreditCard","maskCVV","maskDateISO","maskIPv4","maskIPv6","maskMacAddress","maskColorHex","maskIBAN"]}
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/react/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); 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 _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 _chunkFRKHIMXOcjs = require('../chunk-FRKHIMXO.cjs');var _chunkWLOKGOW6cjs = require('../chunk-WLOKGOW6.cjs');require('../chunk-W5CLDRRE.cjs');require('../chunk-HHDHVLGP.cjs');var _chunkAVUK52JWcjs = require('../chunk-AVUK52JW.cjs');require('../chunk-BSGJ3T5S.cjs');var _chunkRHMJPKNVcjs = require('../chunk-RHMJPKNV.cjs');var _chunk3KI3GEU3cjs = require('../chunk-3KI3GEU3.cjs');require('../chunk-GKNGJOB3.cjs');require('../chunk-FTXV2NZO.cjs');require('../chunk-WRNR6SXK.cjs');var _chunkPFPGASVZcjs = require('../chunk-PFPGASVZ.cjs');var _react = require('react');function V(e){let{fieldState:t,setBlur:s,store:u}=_chunkFRKHIMXOcjs.d.call(void 0, e),{fieldController:n}=_react.useMemo.call(void 0, ()=>_chunkAVUK52JWcjs.h.call(void 0, u,e),[u,e]),i=_react.useMemo.call(void 0, ()=>n.displayValue(t.value),[t.value,n]),o=_react.useCallback.call(void 0, y=>{n.setValue(y)},[n]),{value:r}=t,x=_chunk3KI3GEU3cjs.a.call(void 0, t),{error:c,touched:p,invalid:m,isDirty:g,isValidating:l,isHidden:B,isRequired:f,hasError:a}=x,d=_react.useCallback.call(void 0, y=>{let j=_chunkPFPGASVZcjs.a.call(void 0, y)?_optionalChain([y, 'access', _ => _.target, 'optionalAccess', _2 => _2.value]):y;o(j)},[o]),R=_react.useCallback.call(void 0, ()=>{s()},[s]),M=_react.useMemo.call(void 0, ()=>({value:i,onChange:d,onBlur:R}),[i,d,R]),P=_react.useMemo.call(void 0, ()=>({error:c,touched:p,invalid:m,isDirty:g,isValidating:l,isHidden:B,isRequired:f,hasError:a}),[c,p,m,g,l,B,f,a]);return _react.useMemo.call(void 0, ()=>({value:r,displayValue:i,setValue:o,setBlur:s,onChange:d,onBlur:R,props:M,meta:P}),[r,i,o,s,d,R,M,P])}function N(){let e=_chunkFRKHIMXOcjs.b.call(void 0, ),t=_react.useRef.call(void 0, null),s=_react.useCallback.call(void 0, ()=>{let r=_chunkRHMJPKNVcjs.f.call(void 0, e);return t.current&&t.current.canUndo===r.canUndo&&t.current.canRedo===r.canRedo&&t.current.historyIndex===r.historyIndex&&t.current.historySize===r.historySize?t.current:(t.current=r,r)},[e]),u=_react.useCallback.call(void 0, r=>e.observe.subscribeHistoryMeta(()=>r()),[e]),n=_react.useSyncExternalStore.call(void 0, u,s,s),i=_react.useCallback.call(void 0, ()=>{e.feature.undo()},[e]),o=_react.useCallback.call(void 0, ()=>{e.feature.redo()},[e]);return _react.useMemo.call(void 0, ()=>({...n,undo:i,redo:o}),[n,i,o])}function Y(e,t,s){let u=_chunkFRKHIMXOcjs.b.call(void 0, ),n=V(e),{value:i,setValue:o,meta:r}=n,x=_optionalChain([r, 'optionalAccess', _3 => _3.error]),c=!!_optionalChain([r, 'optionalAccess', _4 => _4.isValidating]),p=_react.useRef.call(void 0, null),[m,g]=_react.useState.call(void 0, !1),l=_react.useMemo.call(void 0, ()=>({setLoading:g,setError:(a,d)=>u.write.setError(a,d),setValue:a=>o(a),getUploadKey:()=>p.current,setUploadKey:a=>{p.current=a}}),[u,o]),B=_react.useCallback.call(void 0, _chunkWLOKGOW6cjs.a.call(void 0, e,t,l),[e,t,l]),f=_react.useCallback.call(void 0, _chunkWLOKGOW6cjs.b.call(void 0, e,s,l),[e,s,l]);return _react.useMemo.call(void 0, ()=>({value:i,setValue:o,error:x,isValidating:c||m,upload:B,remove:f}),[i,o,x,c,m,B,f])}exports.BitFormProvider = _chunkFRKHIMXOcjs.a; exports.useBitArray = _chunkFRKHIMXOcjs.e; exports.useBitField = V; exports.useBitForm = _chunkFRKHIMXOcjs.c; exports.useBitHistory = N; exports.useBitPersist = _chunkFRKHIMXOcjs.i; exports.useBitScope = _chunkFRKHIMXOcjs.f; exports.useBitSteps = _chunkFRKHIMXOcjs.g; exports.useBitStore = _chunkFRKHIMXOcjs.b; exports.useBitUpload = Y; exports.useBitWatch = _chunkFRKHIMXOcjs.h;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/react/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/react/index.cjs","../../src/react/use-bit-field.ts","../../src/react/use-bit-history.ts","../../src/react/use-bit-upload.ts"],"names":["useBitField","path","fieldState","setBlur","store","useBitFieldBase","fieldController","useMemo","createFrameworkMaskedFieldBinding","displayValue","setValue","useCallback","val","value","metaState","deriveFieldMeta","onChange","e","isBitFieldInputEventObject","onBlur","useBitHistory","useBitStore","lastMeta","useRef","getSnapshot","nextMeta","readHistoryMetaSnapshot","subscribe","cb","meta","useSyncExternalStore","undo","redo","useBitUpload","fieldPath","uploadFn","deleteFile","field","uploadKeyRef","isUploading","setIsUploading","useState","kernelCallbacks","msg","key","upload","createUploadHandler","remove","createRemoveHandler"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/react/index.cjs","sourcesContent":[null,"import { useMemo, useCallback } from \"react\";\nimport { useBitFieldBase } from \"./use-bit-field-base\";\nimport {\n BitPath,\n BitPathValue,\n createFrameworkMaskedFieldBinding,\n deriveFieldMeta,\n isBitFieldInputEventObject,\n} from \"../core\";\nimport type {\n BitFieldInputEvent,\n UseBitFieldResult,\n} from \"./types\";\n\nexport function useBitField<\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): UseBitFieldResult<TForm, P> {\n const { fieldState, setBlur, store } = useBitFieldBase<\n BitPathValue<TForm, P>,\n TForm,\n P\n >(path);\n\n const { fieldController } = useMemo(() => {\n return createFrameworkMaskedFieldBinding(store, path);\n }, [store, path]);\n\n const displayValue = useMemo(\n () => fieldController.displayValue(fieldState.value),\n [fieldState.value, fieldController],\n );\n\n const setValue = useCallback(\n (val: BitPathValue<TForm, P> | string | number | null | undefined) => {\n fieldController.setValue(val);\n },\n [fieldController],\n );\n\n const { value } = fieldState;\n const metaState = deriveFieldMeta(fieldState);\n\n const onChange = useCallback(\n (e: BitFieldInputEvent) => {\n const val = isBitFieldInputEventObject(e) ? e.target?.value : e;\n setValue(val);\n },\n [setValue],\n );\n\n const onBlur = useCallback(() => {\n setBlur();\n }, [setBlur]);\n\n return {\n // Main handlers and values (flat)\n value: value as BitPathValue<TForm, P>,\n displayValue,\n setValue,\n setBlur,\n onChange,\n onBlur,\n // Props helper\n props: {\n value: displayValue,\n onChange,\n onBlur,\n },\n // Metadata (grouped)\n meta: {\n error: metaState.error,\n touched: metaState.touched,\n invalid: metaState.invalid,\n isDirty: metaState.isDirty,\n isValidating: metaState.isValidating,\n isHidden: metaState.isHidden,\n isRequired: metaState.isRequired,\n hasError: metaState.hasError,\n },\n };\n}\n","import { useCallback, useRef, useSyncExternalStore } from \"react\";\nimport { readHistoryMetaSnapshot, type HistoryMeta } from \"../core\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitHistoryResult } from \"./types\";\n\nexport function useBitHistory<T extends object = any>(): UseBitHistoryResult {\n const store = useBitStore<T>();\n const lastMeta = useRef<HistoryMeta | null>(null);\n\n const getSnapshot = useCallback(() => {\n const nextMeta = readHistoryMetaSnapshot(store);\n\n if (\n lastMeta.current &&\n lastMeta.current.canUndo === nextMeta.canUndo &&\n lastMeta.current.canRedo === nextMeta.canRedo &&\n lastMeta.current.historyIndex === nextMeta.historyIndex &&\n lastMeta.current.historySize === nextMeta.historySize\n ) {\n return lastMeta.current;\n }\n\n lastMeta.current = nextMeta;\n return nextMeta;\n }, [store]);\n\n const subscribe = useCallback(\n (cb: () => void) => store.observe.subscribeHistoryMeta(() => cb()),\n [store],\n );\n\n const meta = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n const undo = useCallback(() => {\n store.feature.undo();\n }, [store]);\n\n const redo = useCallback(() => {\n store.feature.redo();\n }, [store]);\n\n return {\n ...meta,\n undo,\n redo,\n };\n}\n","/**\n * React Hook for File Upload Integration\n *\n * Minimal upload API integrated with global field validation lifecycle.\n *\n * @example\n * ```typescript\n * const avatar = useBitUpload(\"avatar\", uploadFn);\n *\n * return (\n * <>\n * <input\n * type=\"file\"\n * onChange={(e) => avatar.upload(e.target.files?.[0])}\n * disabled={avatar.isValidating}\n * />\n * {avatar.error && <Error>{avatar.error}</Error>}\n * </>\n * );\n * ```\n */\n\nimport { useCallback, useRef, useState } from \"react\";\nimport type { BitDeleteUploadFn, BitUploadFn } from \"../core\";\nimport { createRemoveHandler, createUploadHandler } from \"../core/adapters\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitUploadResult } from \"./types\";\nimport { useBitField } from \"./use-bit-field\";\n\nexport function useBitUpload<\n TMetadata extends Record<string, unknown> = Record<string, unknown>,\n>(\n fieldPath: string,\n uploadFn: BitUploadFn<TMetadata>,\n deleteFile?: BitDeleteUploadFn,\n): UseBitUploadResult {\n const store = useBitStore<any>();\n const field = useBitField(fieldPath);\n const uploadKeyRef = useRef<string | null>(null);\n const [isUploading, setIsUploading] = useState(false);\n\n const kernelCallbacks = {\n setLoading: setIsUploading,\n setError: (path: string, msg: string | undefined) =>\n store.write.setError(path, msg),\n setValue: (val: string | null) => field.setValue(val as any),\n getUploadKey: () => uploadKeyRef.current,\n setUploadKey: (key: string | null) => {\n uploadKeyRef.current = key;\n },\n };\n\n const upload = useCallback(\n createUploadHandler(fieldPath, uploadFn, kernelCallbacks),\n [uploadFn, field, fieldPath, store],\n );\n\n const remove = useCallback(\n createRemoveHandler(fieldPath, deleteFile, kernelCallbacks),\n [deleteFile, field, fieldPath, store],\n );\n\n return {\n value: field.value,\n setValue: field.setValue,\n error: field.meta?.error,\n isValidating: !!field.meta?.isValidating || isUploading,\n upload,\n remove,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/react/index.cjs","../../src/react/use-bit-field.ts","../../src/react/use-bit-history.ts","../../src/react/use-bit-upload.ts"],"names":["useBitField","path","fieldState","setBlur","store","useBitFieldBase","fieldController","useMemo","createFrameworkMaskedFieldBinding","displayValue","setValue","useCallback","val","value","metaState","deriveFieldMeta","error","touched","invalid","isDirty","isValidating","isHidden","isRequired","hasError","onChange","e","isBitFieldInputEventObject","onBlur","props","meta","useBitHistory","useBitStore","lastMeta","useRef","getSnapshot","nextMeta","readHistoryMetaSnapshot","subscribe","cb","useSyncExternalStore","undo","redo","useBitUpload","fieldPath","uploadFn","deleteFile","field","fieldIsValidating","uploadKeyRef","isUploading","setIsUploading","useState","kernelCallbacks","msg","key","upload","createUploadHandler","remove","createRemoveHandler"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/react/index.cjs","sourcesContent":[null,"import { useCallback, useMemo } from \"react\";\nimport {\n BitPath,\n BitPathValue,\n createFrameworkMaskedFieldBinding,\n deriveFieldMeta,\n isBitFieldInputEventObject,\n} from \"../core\";\nimport type { BitFieldInputEvent, UseBitFieldResult } from \"./types\";\nimport { useBitFieldBase } from \"./use-bit-field-base\";\n\nexport function useBitField<\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): UseBitFieldResult<TForm, P> {\n const { fieldState, setBlur, store } = useBitFieldBase<\n BitPathValue<TForm, P>,\n TForm,\n P\n >(path);\n\n const { fieldController } = useMemo(() => {\n return createFrameworkMaskedFieldBinding(store, path);\n }, [store, path]);\n\n const displayValue = useMemo(\n () => fieldController.displayValue(fieldState.value),\n [fieldState.value, fieldController],\n );\n\n const setValue = useCallback(\n (val: BitPathValue<TForm, P> | string | number | null | undefined) => {\n fieldController.setValue(val);\n },\n [fieldController],\n );\n\n const { value } = fieldState;\n const metaState = deriveFieldMeta(fieldState);\n const {\n error,\n touched,\n invalid,\n isDirty,\n isValidating,\n isHidden,\n isRequired,\n hasError,\n } = metaState;\n\n const onChange = useCallback(\n (e: BitFieldInputEvent) => {\n const val = isBitFieldInputEventObject(e) ? e.target?.value : e;\n setValue(val);\n },\n [setValue],\n );\n\n const onBlur = useCallback(() => {\n setBlur();\n }, [setBlur]);\n\n const props = useMemo(\n () => ({\n value: displayValue,\n onChange,\n onBlur,\n }),\n [displayValue, onChange, onBlur],\n );\n\n const meta = useMemo(\n () => ({\n error,\n touched,\n invalid,\n isDirty,\n isValidating,\n isHidden,\n isRequired,\n hasError,\n }),\n [\n error,\n touched,\n invalid,\n isDirty,\n isValidating,\n isHidden,\n isRequired,\n hasError,\n ],\n );\n\n return useMemo(\n () => ({\n // Main handlers and values (flat)\n value: value as BitPathValue<TForm, P>,\n displayValue,\n setValue,\n setBlur,\n onChange,\n onBlur,\n // Props helper\n props,\n // Metadata (grouped)\n meta,\n }),\n [value, displayValue, setValue, setBlur, onChange, onBlur, props, meta],\n );\n}\n","import { useCallback, useMemo, useRef, useSyncExternalStore } from \"react\";\nimport { readHistoryMetaSnapshot, type HistoryMeta } from \"../core\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitHistoryResult } from \"./types\";\n\nexport function useBitHistory<T extends object = any>(): UseBitHistoryResult {\n const store = useBitStore<T>();\n const lastMeta = useRef<HistoryMeta | null>(null);\n\n const getSnapshot = useCallback(() => {\n const nextMeta = readHistoryMetaSnapshot(store);\n\n if (\n lastMeta.current &&\n lastMeta.current.canUndo === nextMeta.canUndo &&\n lastMeta.current.canRedo === nextMeta.canRedo &&\n lastMeta.current.historyIndex === nextMeta.historyIndex &&\n lastMeta.current.historySize === nextMeta.historySize\n ) {\n return lastMeta.current;\n }\n\n lastMeta.current = nextMeta;\n return nextMeta;\n }, [store]);\n\n const subscribe = useCallback(\n (cb: () => void) => store.observe.subscribeHistoryMeta(() => cb()),\n [store],\n );\n\n const meta = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n const undo = useCallback(() => {\n store.feature.undo();\n }, [store]);\n\n const redo = useCallback(() => {\n store.feature.redo();\n }, [store]);\n\n return useMemo(\n () => ({\n ...meta,\n undo,\n redo,\n }),\n [meta, undo, redo],\n );\n}\n","/**\n * React Hook for File Upload Integration\n *\n * Minimal upload API integrated with global field validation lifecycle.\n *\n * @example\n * ```typescript\n * const avatar = useBitUpload(\"avatar\", uploadFn);\n *\n * return (\n * <>\n * <input\n * type=\"file\"\n * onChange={(e) => avatar.upload(e.target.files?.[0])}\n * disabled={avatar.isValidating}\n * />\n * {avatar.error && <Error>{avatar.error}</Error>}\n * </>\n * );\n * ```\n */\n\nimport { useCallback, useMemo, useRef, useState } from \"react\";\nimport type { BitDeleteUploadFn, BitUploadFn } from \"../core\";\nimport { createRemoveHandler, createUploadHandler } from \"../core/adapters\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitUploadResult } from \"./types\";\nimport { useBitField } from \"./use-bit-field\";\n\nexport function useBitUpload<\n TMetadata extends Record<string, unknown> = Record<string, unknown>,\n>(\n fieldPath: string,\n uploadFn: BitUploadFn<TMetadata>,\n deleteFile?: BitDeleteUploadFn,\n): UseBitUploadResult {\n const store = useBitStore<any>();\n const field = useBitField(fieldPath);\n const { value, setValue, meta } = field;\n const error = meta?.error;\n const fieldIsValidating = !!meta?.isValidating;\n const uploadKeyRef = useRef<string | null>(null);\n const [isUploading, setIsUploading] = useState(false);\n\n const kernelCallbacks = useMemo(\n () => ({\n setLoading: setIsUploading,\n setError: (path: string, msg: string | undefined) =>\n store.write.setError(path, msg),\n setValue: (val: string | null) => setValue(val as any),\n getUploadKey: () => uploadKeyRef.current,\n setUploadKey: (key: string | null) => {\n uploadKeyRef.current = key;\n },\n }),\n [store, setValue],\n );\n\n const upload = useCallback(\n createUploadHandler(fieldPath, uploadFn, kernelCallbacks),\n [fieldPath, uploadFn, kernelCallbacks],\n );\n\n const remove = useCallback(\n createRemoveHandler(fieldPath, deleteFile, kernelCallbacks),\n [fieldPath, deleteFile, kernelCallbacks],\n );\n\n return useMemo(\n () => ({\n value,\n setValue,\n error,\n isValidating: fieldIsValidating || isUploading,\n upload,\n remove,\n }),\n [value, setValue, error, fieldIsValidating, isUploading, upload, remove],\n );\n}\n"]}
|