@lehnihon/bit-form 2.2.7 → 2.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/README.md +6 -6
  2. package/dist/angular/index.cjs +1 -1
  3. package/dist/angular/index.cjs.map +1 -1
  4. package/dist/angular/index.d.cts +18 -15
  5. package/dist/angular/index.d.ts +18 -15
  6. package/dist/angular/index.js +1 -1
  7. package/dist/angular/index.js.map +1 -1
  8. package/dist/{array-controller-DtkmcnUr.d.ts → array-controller-C61ByyG6.d.ts} +5 -5
  9. package/dist/{array-controller-C1A5VKYd.d.cts → array-controller-CtlqjA0e.d.cts} +5 -5
  10. package/dist/bus-BKuMV3E7.d.ts +19 -0
  11. package/dist/bus-WOHGxuVy.d.cts +19 -0
  12. package/dist/chunk-2QLQPMCZ.js +2 -0
  13. package/dist/chunk-2QLQPMCZ.js.map +1 -0
  14. package/dist/chunk-3KI3GEU3.cjs +2 -0
  15. package/dist/chunk-3KI3GEU3.cjs.map +1 -0
  16. package/dist/chunk-5NA2TFPG.js +1 -0
  17. package/dist/chunk-5NA2TFPG.js.map +1 -0
  18. package/dist/chunk-6LNXTSZ6.cjs +2 -0
  19. package/dist/chunk-6LNXTSZ6.cjs.map +1 -0
  20. package/dist/chunk-BSGJ3T5S.cjs +2 -0
  21. package/dist/chunk-BSGJ3T5S.cjs.map +1 -0
  22. package/dist/chunk-GGZPA7AO.cjs +2 -0
  23. package/dist/chunk-GGZPA7AO.cjs.map +1 -0
  24. package/dist/chunk-ICYXODTQ.js +2 -0
  25. package/dist/chunk-ICYXODTQ.js.map +1 -0
  26. package/dist/chunk-J5ALITQW.cjs +2 -0
  27. package/dist/chunk-J5ALITQW.cjs.map +1 -0
  28. package/dist/chunk-J5GQLEVA.js +2 -0
  29. package/dist/chunk-J5GQLEVA.js.map +1 -0
  30. package/dist/chunk-KDHPLXZF.cjs +2 -0
  31. package/dist/chunk-KDHPLXZF.cjs.map +1 -0
  32. package/dist/chunk-N4HCGMMM.js +2 -0
  33. package/dist/chunk-N4HCGMMM.js.map +1 -0
  34. package/dist/chunk-OLQVH24Z.cjs +2 -0
  35. package/dist/chunk-OLQVH24Z.cjs.map +1 -0
  36. package/dist/chunk-QX2IVNMK.js +2 -0
  37. package/dist/chunk-QX2IVNMK.js.map +1 -0
  38. package/dist/chunk-RHMJPKNV.cjs +2 -0
  39. package/dist/chunk-RHMJPKNV.cjs.map +1 -0
  40. package/dist/chunk-UARLAXZX.js +2 -0
  41. package/dist/chunk-UARLAXZX.js.map +1 -0
  42. package/dist/chunk-UIKO6GGW.js +2 -0
  43. package/dist/chunk-UIKO6GGW.js.map +1 -0
  44. package/dist/chunk-W2E5UIXT.js +2 -0
  45. package/dist/chunk-W2E5UIXT.js.map +1 -0
  46. package/dist/chunk-W5CLDRRE.cjs +1 -0
  47. package/dist/chunk-W5CLDRRE.cjs.map +1 -0
  48. package/dist/chunk-X5UCRGYJ.cjs +2 -0
  49. package/dist/chunk-X5UCRGYJ.cjs.map +1 -0
  50. package/dist/chunk-Y3XVQGCU.js +2 -0
  51. package/dist/chunk-Y3XVQGCU.js.map +1 -0
  52. package/dist/cli/index.cjs +2 -2
  53. package/dist/core/bindings.cjs +2 -0
  54. package/dist/core/bindings.cjs.map +1 -0
  55. package/dist/core/bindings.d.cts +89 -0
  56. package/dist/core/bindings.d.ts +89 -0
  57. package/dist/core/bindings.js +2 -0
  58. package/dist/core/bindings.js.map +1 -0
  59. package/dist/core/status.cjs +2 -0
  60. package/dist/core/status.cjs.map +1 -0
  61. package/dist/core/status.d.cts +44 -0
  62. package/dist/core/status.d.ts +44 -0
  63. package/dist/core/status.js +2 -0
  64. package/dist/core/status.js.map +1 -0
  65. package/dist/core/store.cjs +2 -0
  66. package/dist/core/store.cjs.map +1 -0
  67. package/dist/core/store.d.cts +84 -0
  68. package/dist/core/store.d.ts +84 -0
  69. package/dist/core/store.js +2 -0
  70. package/dist/core/store.js.map +1 -0
  71. package/dist/core/utils.cjs +2 -0
  72. package/dist/core/utils.cjs.map +1 -0
  73. package/dist/core/utils.d.cts +74 -0
  74. package/dist/core/utils.d.ts +74 -0
  75. package/dist/core/utils.js +2 -0
  76. package/dist/core/utils.js.map +1 -0
  77. package/dist/core.cjs +1 -1
  78. package/dist/core.cjs.map +1 -1
  79. package/dist/core.d.cts +14 -122
  80. package/dist/core.d.ts +14 -122
  81. package/dist/core.js +1 -1
  82. package/dist/devtools/bridge.cjs +1 -1
  83. package/dist/devtools/bridge.cjs.map +1 -1
  84. package/dist/devtools/bridge.d.cts +3 -2
  85. package/dist/devtools/bridge.d.ts +3 -2
  86. package/dist/devtools/bridge.js +1 -1
  87. package/dist/devtools/index.cjs +2 -2
  88. package/dist/devtools/index.cjs.map +1 -1
  89. package/dist/devtools/index.d.cts +3 -2
  90. package/dist/devtools/index.d.ts +3 -2
  91. package/dist/devtools/index.js +1 -1
  92. package/dist/devtools/index.js.map +1 -1
  93. package/dist/{field-binding-X5TkvfUt.d.cts → field-binding-B_OX3bjp.d.cts} +1 -1
  94. package/dist/{field-binding-Bi1g-D8X.d.ts → field-binding-MX6jVQbT.d.ts} +1 -1
  95. package/dist/index.cjs +1 -1
  96. package/dist/index.cjs.map +1 -1
  97. package/dist/index.d.cts +8 -85
  98. package/dist/index.d.ts +8 -85
  99. package/dist/index.js +1 -1
  100. package/dist/mask.cjs +1 -1
  101. package/dist/mask.cjs.map +1 -1
  102. package/dist/mask.d.cts +2 -2
  103. package/dist/mask.d.ts +2 -2
  104. package/dist/mask.js +1 -1
  105. package/dist/mask.js.map +1 -1
  106. package/dist/meta-types-Bzmm21TP.d.cts +18 -0
  107. package/dist/meta-types-Bzmm21TP.d.ts +18 -0
  108. package/dist/react/index.cjs +1 -1
  109. package/dist/react/index.cjs.map +1 -1
  110. package/dist/react/index.d.cts +11 -9
  111. package/dist/react/index.d.ts +11 -9
  112. package/dist/react/index.js +1 -1
  113. package/dist/react/index.js.map +1 -1
  114. package/dist/react-native/index.cjs +1 -1
  115. package/dist/react-native/index.cjs.map +1 -1
  116. package/dist/react-native/index.d.cts +9 -7
  117. package/dist/react-native/index.d.ts +9 -7
  118. package/dist/react-native/index.js +1 -1
  119. package/dist/react-native/index.js.map +1 -1
  120. package/dist/resolvers/index.cjs +1 -1
  121. package/dist/resolvers/index.cjs.map +1 -1
  122. package/dist/resolvers/index.d.cts +3 -2
  123. package/dist/resolvers/index.d.ts +3 -2
  124. package/dist/resolvers/index.js +1 -1
  125. package/dist/resolvers/joi.d.cts +3 -2
  126. package/dist/resolvers/joi.d.ts +3 -2
  127. package/dist/resolvers/yup.d.cts +3 -2
  128. package/dist/resolvers/yup.d.ts +3 -2
  129. package/dist/resolvers/zod.d.cts +3 -2
  130. package/dist/resolvers/zod.d.ts +3 -2
  131. package/dist/store-api-types-Bm3EAqR_.d.cts +161 -0
  132. package/dist/store-api-types-DfTFy2h4.d.ts +161 -0
  133. package/dist/{bus-DgilLszS.d.ts → types-CRCP4Pgq.d.ts} +82 -45
  134. package/dist/{types-CUXh7PqD.d.cts → types-D8DgIUhJ.d.cts} +1 -1
  135. package/dist/{types-CUXh7PqD.d.ts → types-D8DgIUhJ.d.ts} +1 -1
  136. package/dist/{bus-rcUiufS7.d.cts → types-SOg9xEce.d.cts} +82 -45
  137. package/dist/{upload-EXnJLq8k.d.cts → upload-C2mpfhp1.d.cts} +1 -1
  138. package/dist/{upload-EXnJLq8k.d.ts → upload-C2mpfhp1.d.ts} +1 -1
  139. package/dist/{use-bit-persist-CIKFwtdM.d.cts → use-bit-persist-BDMZmxBh.d.ts} +8 -6
  140. package/dist/{use-bit-persist-Bc06fmqZ.d.ts → use-bit-persist-CBTZIMc5.d.cts} +8 -6
  141. package/dist/utils.cjs +2 -0
  142. package/dist/utils.cjs.map +1 -0
  143. package/dist/utils.d.cts +6 -0
  144. package/dist/utils.d.ts +6 -0
  145. package/dist/utils.js +2 -0
  146. package/dist/utils.js.map +1 -0
  147. package/dist/vue/index.cjs +1 -1
  148. package/dist/vue/index.cjs.map +1 -1
  149. package/dist/vue/index.d.cts +9 -7
  150. package/dist/vue/index.d.ts +9 -7
  151. package/dist/vue/index.js +1 -1
  152. package/dist/vue/index.js.map +1 -1
  153. package/package.json +39 -14
  154. package/dist/chunk-DIEE6LUO.js +0 -2
  155. package/dist/chunk-DIEE6LUO.js.map +0 -1
  156. package/dist/chunk-FUUQB4DV.cjs +0 -2
  157. package/dist/chunk-FUUQB4DV.cjs.map +0 -1
  158. package/dist/chunk-KWLLYQOL.cjs +0 -2
  159. package/dist/chunk-KWLLYQOL.cjs.map +0 -1
  160. package/dist/chunk-LIYZPSWM.js +0 -2
  161. package/dist/chunk-LIYZPSWM.js.map +0 -1
  162. package/dist/chunk-QAL6J5GQ.cjs +0 -2
  163. package/dist/chunk-QAL6J5GQ.cjs.map +0 -1
  164. package/dist/chunk-SA47B5OP.js +0 -2
  165. package/dist/chunk-SA47B5OP.js.map +0 -1
  166. package/dist/store-api-types-9ipdute1.d.ts +0 -187
  167. package/dist/store-api-types-B6_bPoVI.d.cts +0 -187
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;var _chunkQAL6J5GQcjs = require('../chunk-QAL6J5GQ.cjs');var _chunkQKGTVKBUcjs = require('../chunk-QKGTVKBU.cjs');var _chunkFUUQB4DVcjs = require('../chunk-FUUQB4DV.cjs');require('../chunk-PFPGASVZ.cjs');function x(){return`
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;var _chunkGGZPA7AOcjs = require('../chunk-GGZPA7AO.cjs');var _chunkQKGTVKBUcjs = require('../chunk-QKGTVKBU.cjs');require('../chunk-W5CLDRRE.cjs');var _chunkJ5ALITQWcjs = require('../chunk-J5ALITQW.cjs');require('../chunk-KDHPLXZF.cjs');require('../chunk-BSGJ3T5S.cjs');require('../chunk-RHMJPKNV.cjs');require('../chunk-3KI3GEU3.cjs');require('../chunk-OLQVH24Z.cjs');require('../chunk-6LNXTSZ6.cjs');require('../chunk-PFPGASVZ.cjs');function x(){return`
2
2
  .bit-devtools-container {
3
3
  position: fixed;
4
4
  bottom: 20px;
@@ -129,5 +129,5 @@
129
129
  <button class="bit-devtools-trigger" style="transform: ${this.isOpen?"scale(0.9)":"scale(1)"};" title="Abrir DevTools">
130
130
  ${this.isOpen?"\u2716":"Bit"}
131
131
  </button>
132
- `;this.rootElement.innerHTML=i+t}}, _class);function y(n,r=_chunkFUUQB4DVcjs.j){let i=new d(n,{onUndo:o=>_optionalChain([_chunkQAL6J5GQcjs.a.call(void 0, r.stores,o), 'optionalAccess', _ => _.undo, 'call', _2 => _2()]),onRedo:o=>_optionalChain([_chunkQAL6J5GQcjs.a.call(void 0, r.stores,o), 'optionalAccess', _3 => _3.redo, 'call', _4 => _4()]),onReset:o=>_optionalChain([_chunkQAL6J5GQcjs.a.call(void 0, r.stores,o), 'optionalAccess', _5 => _5.reset, 'call', _6 => _6()])}),t=()=>_chunkQAL6J5GQcjs.b.call(void 0, r.stores);i.updateState(t());let e=r.subscribe(()=>{i.updateState(t())});return{ui:i,destroy:()=>{e(),n.innerHTML=""}}}function T(n,r="ws://localhost:3000",i){let t=new WebSocket(r),e=s=>{t.readyState===WebSocket.OPEN?t.send(JSON.stringify(s)):console.warn("[bit-form] Tentativa de envio falhou. WebSocket n\xE3o est\xE1 aberto.")},o=(s,l)=>{e({type:"ACTION",protocolVersion:1,payload:{storeId:s,action:l}})},a=new d(n,{onUndo:s=>o(s,"undo"),onRedo:s=>o(s,"redo"),onReset:s=>o(s,"reset")});return t.addEventListener("open",()=>{e({type:"HELLO",protocolVersion:1,payload:{role:"client",protocolVersion:1}}),console.log(`[bit-form] Conectado ao DevTools remoto em ${r}`)}),t.addEventListener("message",s=>{try{let l=JSON.parse(s.data);_chunkQKGTVKBUcjs.d.call(void 0, l)&&a.updateState(l.payload)}catch(l){console.error("[bit-form] Erro ao processar mensagem do WebSocket:",l)}}),t.addEventListener("error",s=>{console.error("[bit-form] Erro na conex\xE3o do DevTools remoto:",s)}),{ui:a,destroy:()=>{(t.readyState===WebSocket.OPEN||t.readyState===WebSocket.CONNECTING)&&t.close(),n.innerHTML=""}}}function b(n={}){let{mode:r="local",url:i,bus:t}=n,e,o=!1;if(typeof n.container=="string"){let s=document.querySelector(n.container);if(!s)throw new Error(`[bit-form] Container '${n.container}' n\xE3o encontrado na p\xE1gina.`);e=s}else n.container instanceof HTMLElement?e=n.container:(e=document.createElement("div"),e.id="bit-form-devtools-root",e.style.position="fixed",e.style.bottom="20px",e.style.right="20px",e.style.zIndex="9999",e.style.maxHeight="80vh",e.style.overflowY="auto",e.style.boxShadow="0 10px 25px rgba(0,0,0,0.1)",document.body.appendChild(e),o=!0);let a;if(r==="local")console.log("[bit-form] DevTools iniciado em modo Local."),a=y(e,t);else if(r==="remote")console.log("[bit-form] DevTools iniciado em modo Remote."),a=T(e,i,t);else throw new Error(`[bit-form] Modo DevTools inv\xE1lido: ${r}`);return{...a,destroy:()=>{a&&typeof a.destroy=="function"&&a.destroy(),o&&e.parentNode?e.parentNode.removeChild(e):e.innerHTML=""}}}function h(n){return typeof n=="boolean"?{enabled:n,mode:"local"}:{enabled:!!n,mode:_nullishCoalesce(_optionalChain([n, 'optionalAccess', _7 => _7.mode]), () => ("local")),url:_optionalChain([n, 'optionalAccess', _8 => _8.url])}}function D(n){return{name:"bit-devtools",setup:r=>{let i=h(_nullishCoalesce(n, () => (r.getConfig().devTools)));if(!i.enabled)return;let t=null,e=r.getConfig().bus;try{if(i.mode==="remote")t=_chunkQAL6J5GQcjs.c.call(void 0, i.url||"ws://localhost:3000",e);else{let o=b({bus:e});t=o&&typeof o.destroy=="function"?o.destroy:null}}catch (e2){}return()=>{t&&(t(),t=null)}}}}exports.DEVTOOLS_PROTOCOL_VERSION = _chunkQKGTVKBUcjs.a; exports.createDevToolsPlugin = D; exports.initDevTools = b;
132
+ `;this.rootElement.innerHTML=i+t}}, _class);function y(n,r=_chunkJ5ALITQWcjs.a){let i=new d(n,{onUndo:o=>_optionalChain([_chunkGGZPA7AOcjs.b.call(void 0, r.stores,o), 'optionalAccess', _ => _.undo, 'call', _2 => _2()]),onRedo:o=>_optionalChain([_chunkGGZPA7AOcjs.b.call(void 0, r.stores,o), 'optionalAccess', _3 => _3.redo, 'call', _4 => _4()]),onReset:o=>_optionalChain([_chunkGGZPA7AOcjs.b.call(void 0, r.stores,o), 'optionalAccess', _5 => _5.reset, 'call', _6 => _6()])}),t=()=>_chunkGGZPA7AOcjs.a.call(void 0, r.stores);i.updateState(t());let e=r.subscribe(()=>{i.updateState(t())});return{ui:i,destroy:()=>{e(),n.innerHTML=""}}}function T(n,r="ws://localhost:3000",i){let t=new WebSocket(r),e=s=>{t.readyState===WebSocket.OPEN?t.send(JSON.stringify(s)):console.warn("[bit-form] Tentativa de envio falhou. WebSocket n\xE3o est\xE1 aberto.")},o=(s,l)=>{e({type:"ACTION",protocolVersion:1,payload:{storeId:s,action:l}})},a=new d(n,{onUndo:s=>o(s,"undo"),onRedo:s=>o(s,"redo"),onReset:s=>o(s,"reset")});return t.addEventListener("open",()=>{e({type:"HELLO",protocolVersion:1,payload:{role:"client",protocolVersion:1}}),console.log(`[bit-form] Conectado ao DevTools remoto em ${r}`)}),t.addEventListener("message",s=>{try{let l=JSON.parse(s.data);_chunkQKGTVKBUcjs.d.call(void 0, l)&&a.updateState(l.payload)}catch(l){console.error("[bit-form] Erro ao processar mensagem do WebSocket:",l)}}),t.addEventListener("error",s=>{console.error("[bit-form] Erro na conex\xE3o do DevTools remoto:",s)}),{ui:a,destroy:()=>{(t.readyState===WebSocket.OPEN||t.readyState===WebSocket.CONNECTING)&&t.close(),n.innerHTML=""}}}function b(n={}){let{mode:r="local",url:i,bus:t}=n,e,o=!1;if(typeof n.container=="string"){let s=document.querySelector(n.container);if(!s)throw new Error(`[bit-form] Container '${n.container}' n\xE3o encontrado na p\xE1gina.`);e=s}else n.container instanceof HTMLElement?e=n.container:(e=document.createElement("div"),e.id="bit-form-devtools-root",e.style.position="fixed",e.style.bottom="20px",e.style.right="20px",e.style.zIndex="9999",e.style.maxHeight="80vh",e.style.overflowY="auto",e.style.boxShadow="0 10px 25px rgba(0,0,0,0.1)",document.body.appendChild(e),o=!0);let a;if(r==="local")console.log("[bit-form] DevTools iniciado em modo Local."),a=y(e,t);else if(r==="remote")console.log("[bit-form] DevTools iniciado em modo Remote."),a=T(e,i,t);else throw new Error(`[bit-form] Modo DevTools inv\xE1lido: ${r}`);return{...a,destroy:()=>{a&&typeof a.destroy=="function"&&a.destroy(),o&&e.parentNode?e.parentNode.removeChild(e):e.innerHTML=""}}}function h(n){return typeof n=="boolean"?{enabled:n,mode:"local"}:{enabled:!!n,mode:_nullishCoalesce(_optionalChain([n, 'optionalAccess', _7 => _7.mode]), () => ("local")),url:_optionalChain([n, 'optionalAccess', _8 => _8.url])}}function D(n){return{name:"bit-devtools",setup:r=>{let i=h(_nullishCoalesce(n, () => (r.getConfig().devTools)));if(!i.enabled)return;let t=null,e=r.getConfig().bus;try{if(i.mode==="remote")t=_chunkGGZPA7AOcjs.c.call(void 0, i.url||"ws://localhost:3000",e);else{let o=b({bus:e});t=o&&typeof o.destroy=="function"?o.destroy:null}}catch (e2){}return()=>{t&&(t(),t=null)}}}}exports.DEVTOOLS_PROTOCOL_VERSION = _chunkQKGTVKBUcjs.a; exports.createDevToolsPlugin = D; exports.initDevTools = b;
133
133
  //# sourceMappingURL=index.cjs.map
@@ -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":"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","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":"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","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,8 @@
1
- import { d as BitBus, l as DevToolsOptions, o as BitPlugin } from '../bus-rcUiufS7.cjs';
1
+ import { f as BitBus, M as DevToolsOptions, A as BitPlugin } from '../types-SOg9xEce.cjs';
2
+ import '../bus-WOHGxuVy.cjs';
2
3
  import { DevToolsStoreSnapshots } from './protocol.cjs';
3
4
  export { DEVTOOLS_PROTOCOL_VERSION, DevToolsActionName, DevToolsActionPayload, DevToolsHelloMessage, DevToolsHelloPayload, DevToolsRemoteMessage, DevToolsStateUpdateMessage, DevToolsStoreSnapshot } from './protocol.cjs';
4
- import '../types-CUXh7PqD.cjs';
5
+ import '../types-D8DgIUhJ.cjs';
5
6
 
6
7
  interface BitDevToolsOptions {
7
8
  container?: HTMLElement | string;
@@ -1,7 +1,8 @@
1
- import { d as BitBus, l as DevToolsOptions, o as BitPlugin } from '../bus-DgilLszS.js';
1
+ import { f as BitBus, M as DevToolsOptions, A as BitPlugin } from '../types-CRCP4Pgq.js';
2
+ import '../bus-BKuMV3E7.js';
2
3
  import { DevToolsStoreSnapshots } from './protocol.js';
3
4
  export { DEVTOOLS_PROTOCOL_VERSION, DevToolsActionName, DevToolsActionPayload, DevToolsHelloMessage, DevToolsHelloPayload, DevToolsRemoteMessage, DevToolsStateUpdateMessage, DevToolsStoreSnapshot } from './protocol.js';
4
- import '../types-CUXh7PqD.js';
5
+ import '../types-D8DgIUhJ.js';
5
6
 
6
7
  interface BitDevToolsOptions {
7
8
  container?: HTMLElement | string;
@@ -1,4 +1,4 @@
1
- import{a as c,b as g,c as v}from"../chunk-DIEE6LUO.js";import{a as p,d as u}from"../chunk-K5X37E3U.js";import{j as f}from"../chunk-SA47B5OP.js";import"../chunk-3NUJVIAM.js";function x(){return`
1
+ import{a as g,b as c,c as v}from"../chunk-N4HCGMMM.js";import{a as p,d as u}from"../chunk-K5X37E3U.js";import"../chunk-5NA2TFPG.js";import{a as f}from"../chunk-UARLAXZX.js";import"../chunk-Y3XVQGCU.js";import"../chunk-W2E5UIXT.js";import"../chunk-UIKO6GGW.js";import"../chunk-ICYXODTQ.js";import"../chunk-2QLQPMCZ.js";import"../chunk-QX2IVNMK.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"]}
@@ -1,4 +1,4 @@
1
- import { B as BitMask } from './types-CUXh7PqD.cjs';
1
+ import { B as BitMask } from './types-D8DgIUhJ.cjs';
2
2
 
3
3
  /**
4
4
  * Tipo de entrada aceito pelos handlers de campo.
@@ -1,4 +1,4 @@
1
- import { B as BitMask } from './types-CUXh7PqD.js';
1
+ import { B as BitMask } from './types-D8DgIUhJ.js';
2
2
 
3
3
  /**
4
4
  * Tipo de entrada aceito pelos handlers de campo.
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkFUUQB4DVcjs = require('./chunk-FUUQB4DV.cjs');require('./chunk-PFPGASVZ.cjs');exports.areFieldSnapshotsEqual = _chunkFUUQB4DVcjs.v; exports.bitBus = _chunkFUUQB4DVcjs.j; exports.cleanPrefixedKeys = _chunkFUUQB4DVcjs.g; exports.createBitBus = _chunkFUUQB4DVcjs.k; exports.createBitStore = _chunkFUUQB4DVcjs.t; exports.createFieldStateSnapshot = _chunkFUUQB4DVcjs.u; exports.deepClone = _chunkFUUQB4DVcjs.a; exports.deepEqual = _chunkFUUQB4DVcjs.d; exports.deepMerge = _chunkFUUQB4DVcjs.b; exports.extractServerErrors = _chunkFUUQB4DVcjs.i; exports.getDeepValue = _chunkFUUQB4DVcjs.e; exports.isValidationErrorShape = _chunkFUUQB4DVcjs.h; exports.resolveBitStoreForHooks = _chunkFUUQB4DVcjs.s; exports.setDeepValue = _chunkFUUQB4DVcjs.f; exports.valueEqual = _chunkFUUQB4DVcjs.c;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-W5CLDRRE.cjs');var _chunkJ5ALITQWcjs = require('./chunk-J5ALITQW.cjs');require('./chunk-KDHPLXZF.cjs');require('./chunk-BSGJ3T5S.cjs');require('./chunk-RHMJPKNV.cjs');require('./chunk-3KI3GEU3.cjs');require('./chunk-OLQVH24Z.cjs');require('./chunk-6LNXTSZ6.cjs');require('./chunk-PFPGASVZ.cjs');exports.createBitStore = _chunkJ5ALITQWcjs.e; exports.createFrameworkStoreAdapter = _chunkJ5ALITQWcjs.d; exports.resolveBitStoreForHooks = _chunkJ5ALITQWcjs.c;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/index.cjs"],"names":[],"mappings":"AAAA,iIAA0I,gCAA6B,2rBAA8T","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,+JAA0F","file":"/home/runner/work/bit-form/bit-form/dist/index.cjs"}
package/dist/index.d.cts CHANGED
@@ -1,88 +1,11 @@
1
- import { j as BitConfig } from './bus-rcUiufS7.cjs';
2
- export { s as BitAfterSubmitEvent, t as BitAfterValidateEvent, a as BitArrayItem, B as BitArrayPath, u as BitBeforeSubmitEvent, v as BitBeforeValidateEvent, d as BitBus, w as BitBusListener, x as BitComputedFn, c as BitErrors, y as BitFieldChangeEvent, z as BitFieldChangeMeta, A as BitFieldConditional, h as BitFieldDefinition, g as BitFieldState, C as BitFieldValidation, q as BitFormGlobal, E as BitHistoryConfig, e as BitPath, b as BitPathValue, F as BitPersistConfig, i as BitPersistMetadata, G as BitPersistMode, H as BitPersistStorageAdapter, o as BitPlugin, I as BitPluginContext, J as BitPluginErrorEvent, K as BitPluginHooks, p as BitScheduler, f as BitState, r as BitTouched, L as BitTransformFn, M as BitValidationConfig, D as DeepPartial, l as DevToolsOptions, S as ScopeStatus, V as ValidateScopeResult, k as ValidatorFn, N as bitBus, O as createBitBus } from './bus-rcUiufS7.cjs';
3
- import { a as BitStoreHooksApi } from './store-api-types-B6_bPoVI.cjs';
4
- export { B as BitArrayBindingApi, h as BitEqualityFn, g as BitFieldBindingApi, b as BitFormBindingApi, f as BitFormMeta, e as BitFormMetaBindingApi, i as BitFrameworkConfig, c as BitHistoryMetadata, j as BitSelector, k as BitSelectorSubscriptionOptions, l as BitStoreApi, m as BitStoreArrayFeatureApi, n as BitStoreFeatureApi, o as BitStoreHistoryFeatureApi, p as BitStoreObserveApi, q as BitStorePersistFeatureApi, r as BitStoreQueryApi, s as BitStoreRegistrationFeatureApi, t as BitStoreWriteApi, d as BitValidationOptions } from './store-api-types-B6_bPoVI.cjs';
5
- export { a as BitDeleteUploadFn, B as BitUploadFn, b as BitUploadResult } from './upload-EXnJLq8k.cjs';
6
- import './types-CUXh7PqD.cjs';
1
+ import { j as BitConfig } from './types-SOg9xEce.cjs';
2
+ import { e as BitStoreApi, b as BitFrameworkStoreApi, f as BitStoreHooksApi } from './store-api-types-Bm3EAqR_.cjs';
3
+ import './bus-WOHGxuVy.cjs';
4
+ import './types-D8DgIUhJ.cjs';
5
+ import './meta-types-Bzmm21TP.cjs';
7
6
 
8
7
  declare function resolveBitStoreForHooks<T extends object>(store: unknown): BitStoreHooksApi<T>;
9
- declare function createBitStore<T extends object = any>(config?: BitConfig<T>): BitStoreHooksApi<T>;
8
+ declare function createFrameworkStoreAdapter<T extends object>(store: unknown): BitFrameworkStoreApi<T>;
9
+ declare function createBitStore<T extends object = Record<string, unknown>>(config?: BitConfig<T>): BitStoreApi<T>;
10
10
 
11
- declare function deepClone<T>(obj: T): T;
12
- declare function deepMerge<T>(target: T, source: any): T;
13
- /**
14
- * Fast equality for single values. Uses === for primitives, deepEqual for objects/arrays.
15
- * Prefer over deepEqual when comparing a single field value (e.g. isFieldDirty, getStepStatus).
16
- */
17
- declare function valueEqual(a: any, b: any): boolean;
18
- declare function deepEqual(a: any, b: any): boolean;
19
- declare function getDeepValue(obj: any, path: string): any;
20
- declare function setDeepValue(obj: any, path: string, value: any): any;
21
- declare function cleanPrefixedKeys(obj: Record<string, any>, prefix: string): Record<string, any>;
22
- /**
23
- * Checks if a value looks like a server validation error response.
24
- * Handles shapes like { email: "Taken" }, { errors: { email: ["Taken"] } }, etc.
25
- */
26
- declare function isValidationErrorShape(x: unknown): x is Record<string, string | string[]>;
27
- /**
28
- * Extracts server errors in the format expected by setServerErrors.
29
- */
30
- declare function extractServerErrors(x: unknown): Record<string, string | string[]>;
31
-
32
- /**
33
- * Field State Snapshot Utilities
34
- *
35
- * Shared utilities for creating and managing field state snapshots across frameworks
36
- * (React, Vue, Angular). Reduces code duplication while maintaining type safety.
37
- */
38
- /**
39
- * Represents a stable snapshot of field state that can be compared for equality.
40
- */
41
- interface BitFieldSnapshot<TValue = any> {
42
- value: TValue;
43
- error: string | undefined;
44
- touched: boolean;
45
- isHidden: boolean;
46
- isRequired: boolean;
47
- isDirty: boolean;
48
- isValidating: boolean;
49
- }
50
- /**
51
- * Creates or reuses a field state snapshot with shallow equality checking.
52
- *
53
- * This function prevents unnecessary re-renders in frameworks like React by
54
- * returning the same object reference when field state hasn't changed.
55
- *
56
- * @param nextState - The new field state from the store
57
- * @param lastSnapshot - The previous snapshot (can be null on first call)
58
- * @returns A stable snapshot object that can be used for equality comparison
59
- *
60
- * @example
61
- * ```typescript
62
- * const snapshot = createFieldStateSnapshot(store.getFieldState("email"), lastSnapshot);
63
- * if (snapshot !== lastSnapshot) {
64
- * // Field state changed, update component
65
- * render(snapshot);
66
- * }
67
- * ```
68
- */
69
- declare function createFieldStateSnapshot<TValue = any>(nextState: {
70
- value: TValue;
71
- error: string | undefined;
72
- touched: boolean;
73
- isHidden: boolean;
74
- isRequired: boolean;
75
- isDirty: boolean;
76
- isValidating: boolean;
77
- }, lastSnapshot: BitFieldSnapshot<TValue> | null): BitFieldSnapshot<TValue>;
78
- /**
79
- * Deep comparison utility for field state snapshots.
80
- * Useful for scenarios where shallow comparison isn't sufficient (e.g., object/array values).
81
- *
82
- * @param snapshotA - First snapshot
83
- * @param snapshotB - Second snapshot
84
- * @returns true if snapshots are deeply equal
85
- */
86
- declare function areFieldSnapshotsEqual(snapshotA: BitFieldSnapshot | null | undefined, snapshotB: BitFieldSnapshot | null | undefined): boolean;
87
-
88
- export { BitConfig, type BitFieldSnapshot, BitStoreHooksApi, areFieldSnapshotsEqual, cleanPrefixedKeys, createBitStore, createFieldStateSnapshot, deepClone, deepEqual, deepMerge, extractServerErrors, getDeepValue, isValidationErrorShape, resolveBitStoreForHooks, setDeepValue, valueEqual };
11
+ export { BitConfig, BitFrameworkStoreApi, BitStoreApi, createBitStore, createFrameworkStoreAdapter, resolveBitStoreForHooks };
package/dist/index.d.ts CHANGED
@@ -1,88 +1,11 @@
1
- import { j as BitConfig } from './bus-DgilLszS.js';
2
- export { s as BitAfterSubmitEvent, t as BitAfterValidateEvent, a as BitArrayItem, B as BitArrayPath, u as BitBeforeSubmitEvent, v as BitBeforeValidateEvent, d as BitBus, w as BitBusListener, x as BitComputedFn, c as BitErrors, y as BitFieldChangeEvent, z as BitFieldChangeMeta, A as BitFieldConditional, h as BitFieldDefinition, g as BitFieldState, C as BitFieldValidation, q as BitFormGlobal, E as BitHistoryConfig, e as BitPath, b as BitPathValue, F as BitPersistConfig, i as BitPersistMetadata, G as BitPersistMode, H as BitPersistStorageAdapter, o as BitPlugin, I as BitPluginContext, J as BitPluginErrorEvent, K as BitPluginHooks, p as BitScheduler, f as BitState, r as BitTouched, L as BitTransformFn, M as BitValidationConfig, D as DeepPartial, l as DevToolsOptions, S as ScopeStatus, V as ValidateScopeResult, k as ValidatorFn, N as bitBus, O as createBitBus } from './bus-DgilLszS.js';
3
- import { a as BitStoreHooksApi } from './store-api-types-9ipdute1.js';
4
- export { B as BitArrayBindingApi, h as BitEqualityFn, g as BitFieldBindingApi, b as BitFormBindingApi, f as BitFormMeta, e as BitFormMetaBindingApi, i as BitFrameworkConfig, c as BitHistoryMetadata, j as BitSelector, k as BitSelectorSubscriptionOptions, l as BitStoreApi, m as BitStoreArrayFeatureApi, n as BitStoreFeatureApi, o as BitStoreHistoryFeatureApi, p as BitStoreObserveApi, q as BitStorePersistFeatureApi, r as BitStoreQueryApi, s as BitStoreRegistrationFeatureApi, t as BitStoreWriteApi, d as BitValidationOptions } from './store-api-types-9ipdute1.js';
5
- export { a as BitDeleteUploadFn, B as BitUploadFn, b as BitUploadResult } from './upload-EXnJLq8k.js';
6
- import './types-CUXh7PqD.js';
1
+ import { j as BitConfig } from './types-CRCP4Pgq.js';
2
+ import { e as BitStoreApi, b as BitFrameworkStoreApi, f as BitStoreHooksApi } from './store-api-types-DfTFy2h4.js';
3
+ import './bus-BKuMV3E7.js';
4
+ import './types-D8DgIUhJ.js';
5
+ import './meta-types-Bzmm21TP.js';
7
6
 
8
7
  declare function resolveBitStoreForHooks<T extends object>(store: unknown): BitStoreHooksApi<T>;
9
- declare function createBitStore<T extends object = any>(config?: BitConfig<T>): BitStoreHooksApi<T>;
8
+ declare function createFrameworkStoreAdapter<T extends object>(store: unknown): BitFrameworkStoreApi<T>;
9
+ declare function createBitStore<T extends object = Record<string, unknown>>(config?: BitConfig<T>): BitStoreApi<T>;
10
10
 
11
- declare function deepClone<T>(obj: T): T;
12
- declare function deepMerge<T>(target: T, source: any): T;
13
- /**
14
- * Fast equality for single values. Uses === for primitives, deepEqual for objects/arrays.
15
- * Prefer over deepEqual when comparing a single field value (e.g. isFieldDirty, getStepStatus).
16
- */
17
- declare function valueEqual(a: any, b: any): boolean;
18
- declare function deepEqual(a: any, b: any): boolean;
19
- declare function getDeepValue(obj: any, path: string): any;
20
- declare function setDeepValue(obj: any, path: string, value: any): any;
21
- declare function cleanPrefixedKeys(obj: Record<string, any>, prefix: string): Record<string, any>;
22
- /**
23
- * Checks if a value looks like a server validation error response.
24
- * Handles shapes like { email: "Taken" }, { errors: { email: ["Taken"] } }, etc.
25
- */
26
- declare function isValidationErrorShape(x: unknown): x is Record<string, string | string[]>;
27
- /**
28
- * Extracts server errors in the format expected by setServerErrors.
29
- */
30
- declare function extractServerErrors(x: unknown): Record<string, string | string[]>;
31
-
32
- /**
33
- * Field State Snapshot Utilities
34
- *
35
- * Shared utilities for creating and managing field state snapshots across frameworks
36
- * (React, Vue, Angular). Reduces code duplication while maintaining type safety.
37
- */
38
- /**
39
- * Represents a stable snapshot of field state that can be compared for equality.
40
- */
41
- interface BitFieldSnapshot<TValue = any> {
42
- value: TValue;
43
- error: string | undefined;
44
- touched: boolean;
45
- isHidden: boolean;
46
- isRequired: boolean;
47
- isDirty: boolean;
48
- isValidating: boolean;
49
- }
50
- /**
51
- * Creates or reuses a field state snapshot with shallow equality checking.
52
- *
53
- * This function prevents unnecessary re-renders in frameworks like React by
54
- * returning the same object reference when field state hasn't changed.
55
- *
56
- * @param nextState - The new field state from the store
57
- * @param lastSnapshot - The previous snapshot (can be null on first call)
58
- * @returns A stable snapshot object that can be used for equality comparison
59
- *
60
- * @example
61
- * ```typescript
62
- * const snapshot = createFieldStateSnapshot(store.getFieldState("email"), lastSnapshot);
63
- * if (snapshot !== lastSnapshot) {
64
- * // Field state changed, update component
65
- * render(snapshot);
66
- * }
67
- * ```
68
- */
69
- declare function createFieldStateSnapshot<TValue = any>(nextState: {
70
- value: TValue;
71
- error: string | undefined;
72
- touched: boolean;
73
- isHidden: boolean;
74
- isRequired: boolean;
75
- isDirty: boolean;
76
- isValidating: boolean;
77
- }, lastSnapshot: BitFieldSnapshot<TValue> | null): BitFieldSnapshot<TValue>;
78
- /**
79
- * Deep comparison utility for field state snapshots.
80
- * Useful for scenarios where shallow comparison isn't sufficient (e.g., object/array values).
81
- *
82
- * @param snapshotA - First snapshot
83
- * @param snapshotB - Second snapshot
84
- * @returns true if snapshots are deeply equal
85
- */
86
- declare function areFieldSnapshotsEqual(snapshotA: BitFieldSnapshot | null | undefined, snapshotB: BitFieldSnapshot | null | undefined): boolean;
87
-
88
- export { BitConfig, type BitFieldSnapshot, BitStoreHooksApi, areFieldSnapshotsEqual, cleanPrefixedKeys, createBitStore, createFieldStateSnapshot, deepClone, deepEqual, deepMerge, extractServerErrors, getDeepValue, isValidationErrorShape, resolveBitStoreForHooks, setDeepValue, valueEqual };
11
+ export { BitConfig, BitFrameworkStoreApi, BitStoreApi, createBitStore, createFrameworkStoreAdapter, resolveBitStoreForHooks };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{a as t,b as i,c as e,d as r,e as o,f as a,g as B,h as n,i as l,j as s,k as p,s as d,t as u,u as S,v as F}from"./chunk-SA47B5OP.js";import"./chunk-3NUJVIAM.js";export{F as areFieldSnapshotsEqual,s as bitBus,B as cleanPrefixedKeys,p as createBitBus,u as createBitStore,S as createFieldStateSnapshot,t as deepClone,r as deepEqual,i as deepMerge,l as extractServerErrors,o as getDeepValue,n as isValidationErrorShape,d as resolveBitStoreForHooks,a as setDeepValue,e as valueEqual};
1
+ import"./chunk-5NA2TFPG.js";import{c as r,d as e,e as o}from"./chunk-UARLAXZX.js";import"./chunk-Y3XVQGCU.js";import"./chunk-W2E5UIXT.js";import"./chunk-UIKO6GGW.js";import"./chunk-ICYXODTQ.js";import"./chunk-2QLQPMCZ.js";import"./chunk-QX2IVNMK.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}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }require('./chunk-PFPGASVZ.cjs');var ee={"#":/\d/,A:/[a-zA-Z]/,X:/[a-zA-Z0-9]/,H:/[0-9a-fA-F]/,U:/[A-Z]/,L:/[a-z]/,"*":/./},x= exports.unmask =(s,r)=>{if(s==null||s==="")return"";let e=String(s),m=e.startsWith("-"),a=r?r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"):"",i=new RegExp(`[^a-zA-Z0-9${a}]`,"g"),p=e.replace(i,"");return m&&p&&!p.startsWith("-")?`-${p}`:p},te= exports.unmaskCurrency =(s,r=2)=>{if(typeof s=="number")return s;if(!s)return 0;let e=String(s),m=e.includes("-"),a=e.replace(/\D/g,"");if(!a)return 0;let i=parseInt(a,10)/Math.pow(10,r);return m?-i:i},n= exports.createPatternMask =(s,r)=>{let e=o=>o.split("").filter(t=>ee[t]).length,a=[...Array.isArray(s)?s:[s]].sort((o,t)=>e(o)-e(t)),i=o=>{let t=a[a.length-1];for(let c of a)if(o<=e(c)){t=c;break}return t},p=o=>{let t=x(o,_optionalChain([r, 'optionalAccess', _2 => _2.allowChars]));if(!t&&!_optionalChain([r, 'optionalAccess', _3 => _3.guide]))return"";let c=i(t.length),k=_optionalChain([r, 'optionalAccess', _4 => _4.guide])||!1,f=_optionalChain([r, 'optionalAccess', _5 => _5.placeholderChar])||"_",d="",P=0;for(let g=0;g<c.length;g++){let C=c[g],h=ee[C];if(P<t.length){let u=t[P];if(h)if(C==="U"&&(u=u.toUpperCase()),C==="L"&&(u=u.toLowerCase()),h.test(u))d+=u,P++;else if(k)d+=f;else break;else d+=C,u===C&&P++}else if(k)d+=h?f:C;else break}return d};return{format:p,parse:o=>{if(_optionalChain([r, 'optionalAccess', _6 => _6.customParse]))return r.customParse(o);let t=p(o);if(_optionalChain([r, 'optionalAccess', _7 => _7.saveRaw])){if(_optionalChain([r, 'optionalAccess', _8 => _8.guide])){let k=(r.placeholderChar||"_").replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),f=new RegExp(k,"g");return t.replace(f,"")}return t}return x(t,_optionalChain([r, 'optionalAccess', _9 => _9.allowChars]))}}},l= exports.createCurrencyMask =({prefix:s="",suffix:r="",thousand:e,decimal:m,precision:a=2,allowNegative:i=!0,saveRaw:p=!1})=>{let o=t=>{if(t==null||t==="")return"";let c="";if(typeof t=="number"?c=Math.abs(t).toFixed(a).replace(/\D/g,""):c=String(t).replace(/\D/g,""),!c&&String(t).includes("-")&&i)return"-";if(!c)return"";c=c.padStart(a+1,"0");let k=a>0?c.slice(0,-a).replace(/^0+(?=\d)/,"")||"0":c.replace(/^0+(?=\d)/,"")||"0",f=a>0?c.slice(-a):"",d=k.replace(/\B(?=(\d{3})+(?!\d))/g,e),g=(typeof t=="number"?t<0:String(t).includes("-"))&&i?"-":"";return a===0?`${g}${s}${d}${r}`:`${g}${s}${d}${m}${f}${r}`};return{format:o,parse:t=>{let c=te(t,a),k=i?c:Math.abs(c);return p?o(k):k}}},D= exports.createCreditCardMask =s=>{let r=e=>/^3[47]/.test(e)?"#### ###### #####":/^3(?:0[0-5]|[68])/.test(e)?"#### ###### ####":"#### #### #### ####";return{format:e=>{let m=x(e,_optionalChain([s, 'optionalAccess', _10 => _10.allowChars])),a=r(m);return n(a,s).format(e)},parse:e=>{let m=x(e,_optionalChain([s, 'optionalAccess', _11 => _11.allowChars])),a=r(m);return n(a,s).parse(e)}}},H= exports.createDateMask =s=>{let e=(_optionalChain([s, 'optionalAccess', _12 => _12.format])||"DD/MM/YYYY")==="YYYY-MM-DD",m=n(e?"####-##-##":"##/##/####",s);return{format:a=>{let i=x(a);if(!i)return"";let p="",o="",t="";if(e?(t=i.substring(0,4),o=i.substring(4,6),p=i.substring(6,8)):(p=i.substring(0,2),o=i.substring(2,4),t=i.substring(4,8)),p.length===2){let k=parseInt(p,10);k>31&&(p="31"),k===0&&(p="01")}if(o.length===2){let k=parseInt(o,10);k>12&&(o="12"),k===0&&(o="01")}let c=e?`${t}${o}${p}`:`${p}${o}${t}`;return m.format(c)},parse:a=>m.parse(a)}};var X=l({prefix:"R$ ",thousand:".",decimal:",",precision:2}),$= exports.maskUSD =l({prefix:"$",thousand:",",decimal:".",precision:2}),y= exports.maskEUR =l({suffix:" \u20AC",thousand:".",decimal:",",precision:2}),S= exports.maskGBP =l({prefix:"\xA3",thousand:",",decimal:".",precision:2}),B= exports.maskJPY =l({prefix:"\xA5",thousand:",",decimal:".",precision:0}),b= exports.maskPercent =l({suffix:"%",thousand:".",decimal:",",precision:1}),I= exports.maskDecimal =l({thousand:".",decimal:",",precision:2}),M= exports.maskInteger =l({thousand:".",decimal:",",precision:0}),N= exports.maskCPF =n("###.###.###-##"),U= exports.maskCNPJ =n("##.###.###/####-##"),R= exports.maskPhone =n(["(##) ####-####","(##) #####-####"]),Y= exports.maskLandline =n("(##) ####-####"),A= exports.maskCEP =n("#####-###"),V= exports.maskDate =H({format:"DD/MM/YYYY",guide:!0,customParse:s=>{let r=s.replace(/_/g,""),e=r.split("/");return e.length===3&&e[2].length===4?`${e[2]}-${e[1]}-${e[0]}`:r.replace(/\D/g,"")}}),w= exports.maskTime =n("##:##"),L= exports.maskCNH =n("###########"),Z= exports.maskRG =n("##.###.###-X"),E= exports.maskCPFCNPJ =n(["###.###.###-##","##.###.###/####-##"]),F= exports.maskPlate ={format(s){let r=String(_nullishCoalesce(s, () => (""))).replace(/[^a-zA-Z0-9]/g,"").toUpperCase().slice(0,7);if(r.length===0)return"";let e=r.slice(0,3),m=r.slice(3);return m.length===0?e:m.length>=2&&/[A-Z]/.test(m[1])?`${e}${m}`:`${e}-${m}`},parse(s){return String(_nullishCoalesce(s, () => (""))).replace(/[^a-zA-Z0-9]/g,"").toUpperCase().slice(0,7)}},J= exports.maskUSPhone =n("(###) ###-####"),O= exports.maskZipCode =n("#####-####"),z= exports.maskDateUS =n("##/##/####"),G= exports.maskSSN =n("###-##-####"),T= exports.maskCreditCard =D(),j= exports.maskCVV =n("####"),_= exports.maskDateISO =H({format:"YYYY-MM-DD",saveRaw:!0,guide:!0}),W= exports.maskMacAddress =n("HH:HH:HH:HH:HH:HH"),q= exports.maskColorHex =n("#HHHHHH"),K= exports.maskIPv4 =n("###.###.###.###"),Q= exports.maskIPv6 =n("HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH"),v= exports.maskIBAN =n("UU## XXXX XXXX XXXX XXXX XXXX XXXX XXXX XX",{allowChars:" "});var re={brl:X,usd:$,eur:y,gbp:S,jpy:B,percent:b,decimal:I,int:M,integer:M,cpf:N,cnpj:U,cpfCnpj:E,rg:Z,cep:A,cnh:L,plate:F,phone:R,landline:Y,date:V,time:w,usPhone:J,zipCode:O,dateUS:z,ssn:G,cc:T,cvv:j,dateISO:_,ip:K,ipv6:Q,mac:W,color:q,iban:v};exports.bitMasks = re; exports.createCreditCardMask = D; exports.createCurrencyMask = l; exports.createDateMask = H; exports.createPatternMask = n; exports.maskBRL = X; exports.maskCEP = A; exports.maskCNH = L; exports.maskCNPJ = U; exports.maskCPF = N; exports.maskCPFCNPJ = E; exports.maskCVV = j; exports.maskColorHex = q; exports.maskCreditCard = T; exports.maskDate = V; exports.maskDateISO = _; exports.maskDateUS = z; exports.maskDecimal = I; exports.maskEUR = y; exports.maskGBP = S; exports.maskIBAN = v; exports.maskIPv4 = K; exports.maskIPv6 = Q; exports.maskInteger = M; exports.maskJPY = B; exports.maskLandline = Y; exports.maskMacAddress = W; exports.maskPercent = b; exports.maskPhone = R; exports.maskPlate = F; exports.maskRG = Z; exports.maskSSN = G; exports.maskTime = w; exports.maskUSD = $; exports.maskUSPhone = J; exports.maskZipCode = O; exports.unmask = x; exports.unmaskCurrency = te;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }require('./chunk-PFPGASVZ.cjs');var ee={"#":/\d/,A:/[a-zA-Z]/,X:/[a-zA-Z0-9]/,H:/[0-9a-fA-F]/,U:/[A-Z]/,L:/[a-z]/,"*":/./},x= exports.unmask =(s,r)=>{if(s==null||s==="")return"";let e=String(s),i=e.startsWith("-"),a=r?r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"):"",c=new RegExp(`[^a-zA-Z0-9${a}]`,"g"),p=e.replace(c,"");return i&&p&&!p.startsWith("-")?`-${p}`:p},te= exports.unmaskCurrency =(s,r=2)=>{if(typeof s=="number")return s;if(!s)return 0;let e=String(s),i=e.includes("-"),a=e.replace(/\D/g,"");if(!a)return 0;let c=parseInt(a,10)/Math.pow(10,r);return i?-c:c},n= exports.createPatternMask =(s,r)=>{let e=o=>o.split("").filter(t=>ee[t]).length,a=[...Array.isArray(s)?s:[s]].sort((o,t)=>e(o)-e(t)),c=o=>{let t=a[a.length-1];for(let m of a)if(o<=e(m)){t=m;break}return t},p=o=>{let t=x(o,_optionalChain([r, 'optionalAccess', _2 => _2.allowChars]));if(!t&&!_optionalChain([r, 'optionalAccess', _3 => _3.guide]))return"";let m=c(t.length),k=_optionalChain([r, 'optionalAccess', _4 => _4.guide])||!1,u=_optionalChain([r, 'optionalAccess', _5 => _5.placeholderChar])||"_",g="",P=0;for(let f=0;f<m.length;f++){let C=m[f],h=ee[C];if(P<t.length){let d=t[P];if(h)if(C==="U"&&(d=d.toUpperCase()),C==="L"&&(d=d.toLowerCase()),h.test(d))g+=d,P++;else if(k)g+=u;else break;else g+=C,d===C&&P++}else if(k)g+=h?u:C;else break}return g};return{format:p,parse:o=>{if(_optionalChain([r, 'optionalAccess', _6 => _6.customParse]))return r.customParse(o);let t=p(o);if(_optionalChain([r, 'optionalAccess', _7 => _7.saveRaw])){if(_optionalChain([r, 'optionalAccess', _8 => _8.guide])){let k=(r.placeholderChar||"_").replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),u=new RegExp(k,"g");return t.replace(u,"")}return t}return x(t,_optionalChain([r, 'optionalAccess', _9 => _9.allowChars]))}}},l= exports.createCurrencyMask =({prefix:s="",suffix:r="",thousand:e,decimal:i,precision:a=2,allowNegative:c=!0,saveRaw:p=!1})=>{let o=t=>{if(t==null||t==="")return"";let m=typeof t=="number"?Math.abs(t).toFixed(a).replace(/\D/g,""):String(t).replace(/\D/g,"");if(!m&&String(t).includes("-")&&c)return"-";if(!m)return"";m=m.padStart(a+1,"0");let k=a>0?m.slice(0,-a).replace(/^0+(?=\d)/,"")||"0":m.replace(/^0+(?=\d)/,"")||"0",u=a>0?m.slice(-a):"",g=k.replace(/\B(?=(\d{3})+(?!\d))/g,e),f=(typeof t=="number"?t<0:String(t).includes("-"))&&c?"-":"";return a===0?`${f}${s}${g}${r}`:`${f}${s}${g}${i}${u}${r}`};return{format:o,parse:t=>{let m=te(t,a),k=c?m:Math.abs(m);return p?o(k):k}}},D= exports.createCreditCardMask =s=>{let r=e=>/^3[47]/.test(e)?"#### ###### #####":/^3(?:0[0-5]|[68])/.test(e)?"#### ###### ####":"#### #### #### ####";return{format:e=>{let i=x(e,_optionalChain([s, 'optionalAccess', _10 => _10.allowChars])),a=r(i);return n(a,s).format(e)},parse:e=>{let i=x(e,_optionalChain([s, 'optionalAccess', _11 => _11.allowChars])),a=r(i);return n(a,s).parse(e)}}},H= exports.createDateMask =s=>{let e=(_optionalChain([s, 'optionalAccess', _12 => _12.format])||"DD/MM/YYYY")==="YYYY-MM-DD",i=n(e?"####-##-##":"##/##/####",s);return{format:a=>{let c=x(a);if(!c)return"";let p,o,t;if(e?(t=c.substring(0,4),o=c.substring(4,6),p=c.substring(6,8)):(p=c.substring(0,2),o=c.substring(2,4),t=c.substring(4,8)),p.length===2){let k=parseInt(p,10);k>31&&(p="31"),k===0&&(p="01")}if(o.length===2){let k=parseInt(o,10);k>12&&(o="12"),k===0&&(o="01")}let m=e?`${t}${o}${p}`:`${p}${o}${t}`;return i.format(m)},parse:a=>i.parse(a)}};var X=l({prefix:"R$ ",thousand:".",decimal:",",precision:2}),$= exports.maskUSD =l({prefix:"$",thousand:",",decimal:".",precision:2}),y= exports.maskEUR =l({suffix:" \u20AC",thousand:".",decimal:",",precision:2}),S= exports.maskGBP =l({prefix:"\xA3",thousand:",",decimal:".",precision:2}),B= exports.maskJPY =l({prefix:"\xA5",thousand:",",decimal:".",precision:0}),b= exports.maskPercent =l({suffix:"%",thousand:".",decimal:",",precision:1}),I= exports.maskDecimal =l({thousand:".",decimal:",",precision:2}),M= exports.maskInteger =l({thousand:".",decimal:",",precision:0}),N= exports.maskCPF =n("###.###.###-##"),U= exports.maskCNPJ =n("##.###.###/####-##"),R= exports.maskPhone =n(["(##) ####-####","(##) #####-####"]),Y= exports.maskLandline =n("(##) ####-####"),A= exports.maskCEP =n("#####-###"),V= exports.maskDate =H({format:"DD/MM/YYYY",guide:!0,customParse:s=>{let r=s.replace(/_/g,""),e=r.split("/");return e.length===3&&e[2].length===4?`${e[2]}-${e[1]}-${e[0]}`:r.replace(/\D/g,"")}}),w= exports.maskTime =n("##:##"),L= exports.maskCNH =n("###########"),Z= exports.maskRG =n("##.###.###-X"),E= exports.maskCPFCNPJ =n(["###.###.###-##","##.###.###/####-##"]),F= exports.maskPlate ={format(s){let r=String(_nullishCoalesce(s, () => (""))).replace(/[^a-zA-Z0-9]/g,"").toUpperCase().slice(0,7);if(r.length===0)return"";let e=r.slice(0,3),i=r.slice(3);return i.length===0?e:i.length>=2&&/[A-Z]/.test(i[1])?`${e}${i}`:`${e}-${i}`},parse(s){return String(_nullishCoalesce(s, () => (""))).replace(/[^a-zA-Z0-9]/g,"").toUpperCase().slice(0,7)}},J= exports.maskUSPhone =n("(###) ###-####"),O= exports.maskZipCode =n("#####-####"),z= exports.maskDateUS =n("##/##/####"),G= exports.maskSSN =n("###-##-####"),T= exports.maskCreditCard =D(),j= exports.maskCVV =n("####"),_= exports.maskDateISO =H({format:"YYYY-MM-DD",saveRaw:!0,guide:!0}),W= exports.maskMacAddress =n("HH:HH:HH:HH:HH:HH"),q= exports.maskColorHex =n("#HHHHHH"),K= exports.maskIPv4 =n("###.###.###.###"),Q= exports.maskIPv6 =n("HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH"),v= exports.maskIBAN =n("UU## XXXX XXXX XXXX XXXX XXXX XXXX XXXX XX",{allowChars:" "});var re={brl:X,usd:$,eur:y,gbp:S,jpy:B,percent:b,decimal:I,int:M,integer:M,cpf:N,cnpj:U,cpfCnpj:E,rg:Z,cep:A,cnh:L,plate:F,phone:R,landline:Y,date:V,time:w,usPhone:J,zipCode:O,dateUS:z,ssn:G,cc:T,cvv:j,dateISO:_,ip:K,ipv6:Q,mac:W,color:q,iban:v};exports.bitMasks = re; exports.createCreditCardMask = D; exports.createCurrencyMask = l; exports.createDateMask = H; exports.createPatternMask = n; exports.maskBRL = X; exports.maskCEP = A; exports.maskCNH = L; exports.maskCNPJ = U; exports.maskCPF = N; exports.maskCPFCNPJ = E; exports.maskCVV = j; exports.maskColorHex = q; exports.maskCreditCard = T; exports.maskDate = V; exports.maskDateISO = _; exports.maskDateUS = z; exports.maskDecimal = I; exports.maskEUR = y; exports.maskGBP = S; exports.maskIBAN = v; exports.maskIPv4 = K; exports.maskIPv6 = Q; exports.maskInteger = M; exports.maskJPY = B; exports.maskLandline = Y; exports.maskMacAddress = W; exports.maskPercent = b; exports.maskPhone = R; exports.maskPlate = F; exports.maskRG = Z; exports.maskSSN = G; exports.maskTime = w; exports.maskUSD = $; exports.maskUSPhone = J; exports.maskZipCode = O; exports.unmask = x; exports.unmaskCurrency = te;
2
2
  //# sourceMappingURL=mask.cjs.map