@lehnihon/bit-form 2.2.24 → 2.2.26

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 (109) hide show
  1. package/dist/angular/index.cjs +1 -1
  2. package/dist/angular/index.cjs.map +1 -1
  3. package/dist/angular/index.d.cts +0 -1
  4. package/dist/angular/index.d.ts +0 -1
  5. package/dist/angular/index.js +1 -1
  6. package/dist/angular/index.js.map +1 -1
  7. package/dist/chunk-7T7L2TZX.js +2 -0
  8. package/dist/chunk-7T7L2TZX.js.map +1 -0
  9. package/dist/chunk-AV7YYSFI.cjs +2 -0
  10. package/dist/chunk-AV7YYSFI.cjs.map +1 -0
  11. package/dist/chunk-EYCJKAK3.js +2 -0
  12. package/dist/chunk-EYCJKAK3.js.map +1 -0
  13. package/dist/chunk-GBHOCY7E.cjs +2 -0
  14. package/dist/chunk-GBHOCY7E.cjs.map +1 -0
  15. package/dist/{chunk-AOMXTUA4.cjs → chunk-H27ROY4F.cjs} +2 -2
  16. package/dist/{chunk-AOMXTUA4.cjs.map → chunk-H27ROY4F.cjs.map} +1 -1
  17. package/dist/{chunk-XPY6TCOO.js → chunk-L42NQRVD.js} +2 -2
  18. package/dist/chunk-OWDDAM6C.cjs +2 -0
  19. package/dist/chunk-OWDDAM6C.cjs.map +1 -0
  20. package/dist/chunk-U6UFULNS.cjs +2 -0
  21. package/dist/chunk-U6UFULNS.cjs.map +1 -0
  22. package/dist/chunk-UBVVBVLS.js +2 -0
  23. package/dist/chunk-UBVVBVLS.js.map +1 -0
  24. package/dist/chunk-WKLCAC74.cjs +2 -0
  25. package/dist/chunk-WKLCAC74.cjs.map +1 -0
  26. package/dist/chunk-WYYVVM2C.js +2 -0
  27. package/dist/chunk-WYYVVM2C.js.map +1 -0
  28. package/dist/chunk-Y7TQTZY7.js +2 -0
  29. package/dist/chunk-Y7TQTZY7.js.map +1 -0
  30. package/dist/cli/index.cjs +6 -5
  31. package/dist/core/bindings.cjs +1 -1
  32. package/dist/core/bindings.js +1 -1
  33. package/dist/core/store.cjs +1 -1
  34. package/dist/core/store.js +1 -1
  35. package/dist/core/utils.cjs +1 -1
  36. package/dist/core/utils.js +1 -1
  37. package/dist/core.cjs +1 -1
  38. package/dist/core.js +1 -1
  39. package/dist/devtools/bridge.cjs +1 -1
  40. package/dist/devtools/bridge.js +1 -1
  41. package/dist/devtools/index.cjs +16 -16
  42. package/dist/devtools/index.cjs.map +1 -1
  43. package/dist/devtools/index.js +16 -16
  44. package/dist/devtools/index.js.map +1 -1
  45. package/dist/index.cjs +1 -1
  46. package/dist/index.js +1 -1
  47. package/dist/react/index.cjs +1 -1
  48. package/dist/react/index.cjs.map +1 -1
  49. package/dist/react/index.js +1 -1
  50. package/dist/react/index.js.map +1 -1
  51. package/dist/react-native/index.cjs +1 -1
  52. package/dist/react-native/index.js +1 -1
  53. package/dist/resolvers/index.cjs +1 -1
  54. package/dist/resolvers/index.cjs.map +1 -1
  55. package/dist/resolvers/index.d.cts +0 -8
  56. package/dist/resolvers/index.d.ts +0 -8
  57. package/dist/resolvers/index.js +1 -1
  58. package/dist/resolvers/joi.cjs +1 -1
  59. package/dist/resolvers/joi.cjs.map +1 -1
  60. package/dist/resolvers/joi.js +1 -1
  61. package/dist/resolvers/joi.js.map +1 -1
  62. package/dist/resolvers/yup.cjs +1 -1
  63. package/dist/resolvers/yup.cjs.map +1 -1
  64. package/dist/resolvers/yup.js +1 -1
  65. package/dist/resolvers/yup.js.map +1 -1
  66. package/dist/resolvers/zod.cjs +1 -1
  67. package/dist/resolvers/zod.cjs.map +1 -1
  68. package/dist/resolvers/zod.js +1 -1
  69. package/dist/resolvers/zod.js.map +1 -1
  70. package/dist/utils.cjs +1 -1
  71. package/dist/utils.js +1 -1
  72. package/dist/vue/index.cjs +1 -1
  73. package/dist/vue/index.cjs.map +1 -1
  74. package/dist/vue/index.js +1 -1
  75. package/dist/vue/index.js.map +1 -1
  76. package/package.json +21 -1
  77. package/dist/chunk-27LJCW56.cjs +0 -2
  78. package/dist/chunk-27LJCW56.cjs.map +0 -1
  79. package/dist/chunk-3SEB4YRQ.cjs +0 -2
  80. package/dist/chunk-3SEB4YRQ.cjs.map +0 -1
  81. package/dist/chunk-5ILGCBKG.cjs +0 -2
  82. package/dist/chunk-5ILGCBKG.cjs.map +0 -1
  83. package/dist/chunk-7LCFS2JM.cjs +0 -2
  84. package/dist/chunk-7LCFS2JM.cjs.map +0 -1
  85. package/dist/chunk-DNHPYPJA.js +0 -2
  86. package/dist/chunk-DNHPYPJA.js.map +0 -1
  87. package/dist/chunk-JVRTPL7W.js +0 -2
  88. package/dist/chunk-JVRTPL7W.js.map +0 -1
  89. package/dist/chunk-K2JSAJAF.cjs +0 -2
  90. package/dist/chunk-K2JSAJAF.cjs.map +0 -1
  91. package/dist/chunk-K2KCQEER.js +0 -2
  92. package/dist/chunk-K2KCQEER.js.map +0 -1
  93. package/dist/chunk-LY67POOF.js +0 -2
  94. package/dist/chunk-LY67POOF.js.map +0 -1
  95. package/dist/chunk-PDFT5E2E.cjs +0 -2
  96. package/dist/chunk-PDFT5E2E.cjs.map +0 -1
  97. package/dist/chunk-PRMNTQD5.js +0 -2
  98. package/dist/chunk-PRMNTQD5.js.map +0 -1
  99. package/dist/chunk-SFVGMVIE.js +0 -2
  100. package/dist/chunk-SFVGMVIE.js.map +0 -1
  101. package/dist/chunk-SMCFLQIA.cjs +0 -2
  102. package/dist/chunk-SMCFLQIA.cjs.map +0 -1
  103. package/dist/chunk-T36GFQHU.cjs +0 -2
  104. package/dist/chunk-T36GFQHU.cjs.map +0 -1
  105. package/dist/chunk-WEZ5Q6YO.js +0 -2
  106. package/dist/chunk-WEZ5Q6YO.js.map +0 -1
  107. package/dist/chunk-X3OFU2UH.js +0 -2
  108. package/dist/chunk-X3OFU2UH.js.map +0 -1
  109. /package/dist/{chunk-XPY6TCOO.js.map → chunk-L42NQRVD.js.map} +0 -0
@@ -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 _chunkSMCFLQIAcjs = require('../chunk-SMCFLQIA.cjs');var _chunkQKGTVKBUcjs = require('../chunk-QKGTVKBU.cjs');require('../chunk-W5CLDRRE.cjs');var _chunkPDFT5E2Ecjs = require('../chunk-PDFT5E2E.cjs');require('../chunk-AOMXTUA4.cjs');require('../chunk-BSGJ3T5S.cjs');require('../chunk-RHMJPKNV.cjs');require('../chunk-H6HGYVRV.cjs');require('../chunk-7LCFS2JM.cjs');require('../chunk-3SEB4YRQ.cjs');require('../chunk-X3DGA5UC.cjs');require('../chunk-725CMNAV.cjs');function D(){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 _chunkGBHOCY7Ecjs = require('../chunk-GBHOCY7E.cjs');var _chunkQKGTVKBUcjs = require('../chunk-QKGTVKBU.cjs');require('../chunk-W5CLDRRE.cjs');var _chunkU6UFULNScjs = require('../chunk-U6UFULNS.cjs');require('../chunk-H27ROY4F.cjs');require('../chunk-BSGJ3T5S.cjs');require('../chunk-RHMJPKNV.cjs');require('../chunk-H6HGYVRV.cjs');require('../chunk-AV7YYSFI.cjs');require('../chunk-OWDDAM6C.cjs');require('../chunk-X3DGA5UC.cjs');require('../chunk-725CMNAV.cjs');function E(){return`
2
2
  .bit-devtools-container {
3
3
  position: fixed;
4
4
  bottom: 20px;
@@ -86,48 +86,48 @@
86
86
 
87
87
  pre.bit-pre { background: #020617; padding: 10px; border-radius: 4px; font-size: 11px; overflow-x: auto; border: 1px solid #1e293b; margin: 0; color: #e2e8f0; }
88
88
  pre.bit-error-box { background: rgba(239, 68, 68, 0.05); padding: 10px; border-radius: 4px; font-size: 11px; border: 1px dashed #ef4444; color: #fca5a5; margin: 0; overflow-x: auto; }
89
- `}function u(t){return t.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function S(t){try{return JSON.stringify(t,null,2)}catch (e2){return"[Unserializable]"}}var p= (_class =class{__init() {this.currentStoresState={}}__init2() {this.isOpen=!1}constructor(r,i){;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);if(this.container=r,this.actions=i,!document.getElementById("bit-devtools-styles")){let o=document.createElement("style");o.id="bit-devtools-styles",o.textContent=D(),document.head.appendChild(o)}this.rootElement=document.createElement("div"),this.rootElement.className="bit-devtools-container",this.container.appendChild(this.rootElement),this.rootElement.addEventListener("click",o=>{let e=o.target;if(e.closest(".bit-devtools-trigger")){this.isOpen=!this.isOpen,this.render();return}let s=e.closest(".bit-action-btn");if(s&&!s.hasAttribute("disabled")){let n=s.getAttribute("data-action"),a=s.getAttribute("data-store");n&&a&&(n==="undo"&&this.actions.onUndo(a),n==="redo"&&this.actions.onRedo(a),n==="reset"&&this.actions.onReset(a))}})}updateState(r){this.currentStoresState=r,this.render()}render(){let r=Object.entries(this.currentStoresState);if(r.length===0){this.rootElement.innerHTML="";return}let i="";if(this.isOpen){i=`
89
+ `}function m(t){return t.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function M(t){try{return JSON.stringify(t,null,2)}catch (e2){return"[Unserializable]"}}var b= (_class =class{__init() {this.currentStoresState={}}__init2() {this.isOpen=!1}constructor(s,i){;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);if(this.container=s,this.actions=i,!document.getElementById("bit-devtools-styles")){let e=document.createElement("style");e.id="bit-devtools-styles",e.textContent=E(),document.head.appendChild(e)}this.rootElement=document.createElement("div"),this.rootElement.className="bit-devtools-container",this.container.appendChild(this.rootElement),this.rootElement.addEventListener("click",e=>{let o=e.target;if(o.closest(".bit-devtools-trigger")){this.isOpen=!this.isOpen,this.render();return}let r=o.closest(".bit-action-btn");if(r&&!r.hasAttribute("disabled")){let n=r.getAttribute("data-action"),a=r.getAttribute("data-store");n&&a&&(n==="undo"&&this.actions.onUndo(a),n==="redo"&&this.actions.onRedo(a),n==="reset"&&this.actions.onReset(a))}})}updateState(s){this.currentStoresState=s,this.render()}render(){let s=Object.entries(this.currentStoresState);if(s.length===0){this.rootElement.innerHTML="";return}let i="";if(this.isOpen){i=`
90
90
  <div class="bit-devtools-panel">
91
91
  <div class="bit-devtools-header">
92
92
  <h2><span style="font-size: 20px;">\u{1F6E0}</span> Bit-Form DevTools</h2>
93
93
  <span style="font-size: 11px; color: #64748b;">v1.0.0</span>
94
94
  </div>
95
- `;for(let[e,s]of r){let n=Object.keys(s.errors||{}).length>0,a=s._meta||{totalSteps:0,currentIndex:-1,canUndo:!1,canRedo:!1},d=a.currentIndex+1,m=a.totalSteps;i+=`
95
+ `;for(let[o,r]of s){let n=Object.keys(r.errors||{}).length>0,a=r._meta||{totalSteps:0,currentIndex:-1,canUndo:!1,canRedo:!1},c=a.currentIndex+1,p=a.totalSteps;i+=`
96
96
  <div class="bit-store-block">
97
97
  <div class="bit-store-header">
98
- <h3 class="bit-store-title">${u(e)}</h3>
98
+ <h3 class="bit-store-title">${m(o)}</h3>
99
99
  <div class="bit-badge-group">
100
- <span class="bit-badge ${s.isValid?"badge-success":"badge-error"}">
101
- ${s.isValid?"\u2713 Valid":"\u2715 Invalid"}
100
+ <span class="bit-badge ${r.isValid?"badge-success":"badge-error"}">
101
+ ${r.isValid?"\u2713 Valid":"\u2715 Invalid"}
102
102
  </span>
103
- ${s.isDirty?'<span class="bit-badge badge-warn">Dirty</span>':""}
104
- ${s.isSubmitting?'<span class="bit-badge badge-info">\u23F3 Submitting</span>':""}
103
+ ${r.isDirty?'<span class="bit-badge badge-warn">Dirty</span>':""}
104
+ ${r.isSubmitting?'<span class="bit-badge badge-info">\u23F3 Submitting</span>':""}
105
105
  </div>
106
106
  </div>
107
107
 
108
- <span class="bit-section-title">Time Travel (${d}/${m})</span>
108
+ <span class="bit-section-title">Time Travel (${c}/${p})</span>
109
109
 
110
110
  <div class="bit-controls">
111
- <button class="bit-action-btn" data-action="undo" data-store="${u(e)}" ${a.canUndo?"":"disabled"}>
111
+ <button class="bit-action-btn" data-action="undo" data-store="${m(o)}" ${a.canUndo?"":"disabled"}>
112
112
  <span>\u21BA</span> Undo
113
113
  </button>
114
- <button class="bit-action-btn" data-action="redo" data-store="${u(e)}" ${a.canRedo?"":"disabled"}>
114
+ <button class="bit-action-btn" data-action="redo" data-store="${m(o)}" ${a.canRedo?"":"disabled"}>
115
115
  <span>\u21BB</span> Redo
116
116
  </button>
117
- <button class="bit-action-btn bit-btn-reset" data-action="reset" data-store="${u(e)}">
117
+ <button class="bit-action-btn bit-btn-reset" data-action="reset" data-store="${m(o)}">
118
118
  <span>\u{1F5D1}</span> Reset
119
119
  </button>
120
120
  </div>
121
121
  `,n&&(i+=`
122
122
  <span class="bit-section-title" style="color: #f87171;">\u26A0\uFE0F Validations Failing</span>
123
- <pre class="bit-error-box">${S(s.errors)}</pre>
123
+ <pre class="bit-error-box">${M(r.errors)}</pre>
124
124
  `),i+=`
125
125
  <span class="bit-section-title">Values</span>
126
- <pre class="bit-pre">${S(s.values)}</pre>
126
+ <pre class="bit-pre">${M(r.values)}</pre>
127
127
  </div>
128
- `}i+="</div>"}let o=`
128
+ `}i+="</div>"}let e=`
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+o}}, _class);function E(t,r=_chunkPDFT5E2Ecjs.a){let i=new p(t,{onUndo:n=>_optionalChain([_chunkSMCFLQIAcjs.b.call(void 0, r.stores,n), 'optionalAccess', _ => _.undo, 'call', _2 => _2()]),onRedo:n=>_optionalChain([_chunkSMCFLQIAcjs.b.call(void 0, r.stores,n), 'optionalAccess', _3 => _3.redo, 'call', _4 => _4()]),onReset:n=>_optionalChain([_chunkSMCFLQIAcjs.b.call(void 0, r.stores,n), 'optionalAccess', _5 => _5.reset, 'call', _6 => _6()])}),o=()=>_chunkSMCFLQIAcjs.a.call(void 0, r.stores);i.updateState(o());let e,s=r.subscribe(()=>{e===void 0&&(e=requestAnimationFrame(()=>{e=void 0,i.updateState(o())}))});return{ui:i,destroy:()=>{e!==void 0&&cancelAnimationFrame(e),s(),t.innerHTML=""}}}function O(t,r="ws://localhost:3000",i){let o,e=l=>{o.readyState===WebSocket.OPEN?o.send(JSON.stringify(l)):console.warn("[bit-form] Tentativa de envio falhou. WebSocket n\xE3o est\xE1 aberto.")},s=(l,c)=>{e({type:"ACTION",protocolVersion:1,payload:{storeId:l,action:c}})},n=new p(t,{onUndo:l=>s(l,"undo"),onRedo:l=>s(l,"redo"),onReset:l=>s(l,"reset")}),a=!1,d;function m(){o.addEventListener("open",()=>{e({type:"HELLO",protocolVersion:1,payload:{role:"client",protocolVersion:1}}),console.log(`[bit-form] Conectado ao DevTools remoto em ${r}`)}),o.addEventListener("message",l=>{try{let c=JSON.parse(l.data);_chunkQKGTVKBUcjs.d.call(void 0, c)&&n.updateState(c.payload)}catch(c){console.error("[bit-form] Erro ao processar mensagem do WebSocket:",c)}}),o.addEventListener("error",l=>{console.error("[bit-form] Erro na conex\xE3o do DevTools remoto:",l)}),o.addEventListener("close",()=>{a||(console.log("[bit-form] Conex\xE3o DevTools remota fechada. Reconectando em 5s..."),d=setTimeout(()=>{a||v()},5e3))})}function v(){o=new WebSocket(r),m()}return v(),{ui:n,destroy:()=>{a=!0,d&&(clearTimeout(d),d=void 0),(o.readyState===WebSocket.OPEN||o.readyState===WebSocket.CONNECTING)&&o.close(),t.innerHTML=""}}}function g(t={}){let{mode:r="local",url:i,bus:o}=t,e,s=!1;if(typeof t.container=="string"){let a=document.querySelector(t.container);if(!a)throw new Error(`[bit-form] Container '${t.container}' n\xE3o encontrado na p\xE1gina.`);e=a}else t.container instanceof HTMLElement?e=t.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),s=!0);let n;if(r==="local")console.log("[bit-form] DevTools iniciado em modo Local."),n=E(e,o);else if(r==="remote")console.log("[bit-form] DevTools iniciado em modo Remote."),n=O(e,i,o);else throw new Error(`[bit-form] Modo DevTools inv\xE1lido: ${r}`);return{...n,destroy:()=>{n&&typeof n.destroy=="function"&&n.destroy(),s&&e.parentNode?e.parentNode.removeChild(e):e.innerHTML=""}}}function M(t){return typeof t=="boolean"?{enabled:t,mode:"local"}:{enabled:!!t,mode:_nullishCoalesce(_optionalChain([t, 'optionalAccess', _7 => _7.mode]), () => ("local")),url:_optionalChain([t, 'optionalAccess', _8 => _8.url])}}function w(){return typeof process<"u"&&typeof process.env<"u"&&process.env.NODE_ENV==="production"?!0:(typeof process<"u"&&typeof process.env<"u"&&process.env.VITEST==="true",!1)}function k(t){return{name:"bit-devtools",setup:r=>{let i=M(_nullishCoalesce(t, () => (r.getConfig().devTools)));if(!i.enabled||w()&&t!==!0)return;let o=null,e=r.getConfig().bus;try{if(i.mode==="remote")o=_chunkSMCFLQIAcjs.c.call(void 0, i.url||"ws://localhost:3000",e);else{let s=g({bus:e});o=s&&typeof s.destroy=="function"?s.destroy:null}}catch (e3){}return()=>{o&&(o(),o=null)}}}}exports.DEVTOOLS_PROTOCOL_VERSION = _chunkQKGTVKBUcjs.a; exports.createDevToolsPlugin = k; exports.initDevTools = g;
132
+ `;this.rootElement.innerHTML=i+e}}, _class);function O(t,s=_chunkU6UFULNScjs.a){let i=new b(t,{onUndo:n=>_optionalChain([_chunkGBHOCY7Ecjs.b.call(void 0, s.stores,n), 'optionalAccess', _ => _.undo, 'call', _2 => _2()]),onRedo:n=>_optionalChain([_chunkGBHOCY7Ecjs.b.call(void 0, s.stores,n), 'optionalAccess', _3 => _3.redo, 'call', _4 => _4()]),onReset:n=>_optionalChain([_chunkGBHOCY7Ecjs.b.call(void 0, s.stores,n), 'optionalAccess', _5 => _5.reset, 'call', _6 => _6()])}),e=()=>_chunkGBHOCY7Ecjs.a.call(void 0, s.stores);i.updateState(e());let o,r=s.subscribe(()=>{o===void 0&&(o=requestAnimationFrame(()=>{o=void 0,i.updateState(e())}))});return{ui:i,destroy:()=>{o!==void 0&&cancelAnimationFrame(o),r(),t.innerHTML=""}}}function w(t,s="ws://localhost:3000",i){let e=null,o=l=>{if(_optionalChain([e, 'optionalAccess', _7 => _7.readyState])===WebSocket.OPEN)try{e.send(JSON.stringify(l))}catch(d){console.warn("[bit-form] Failed to send message:",d)}else console.warn("[bit-form] Tentativa de envio falhou. WebSocket n\xE3o est\xE1 aberto.")},r=(l,d)=>{o({type:"ACTION",protocolVersion:1,payload:{storeId:l,action:d}})},n=new b(t,{onUndo:l=>r(l,"undo"),onRedo:l=>r(l,"redo"),onReset:l=>r(l,"reset")}),a=!1,c,p=0,x=3e4;function k(){e&&(e.addEventListener("open",()=>{p=0,o({type:"HELLO",protocolVersion:1,payload:{role:"client",protocolVersion:1}}),console.log(`[bit-form] Conectado ao DevTools remoto em ${s}`)}),e.addEventListener("message",l=>{try{let d=JSON.parse(l.data);_chunkQKGTVKBUcjs.d.call(void 0, d)&&n.updateState(d.payload)}catch(d){console.error("[bit-form] Erro ao processar mensagem do WebSocket:",d)}}),e.addEventListener("error",l=>{console.error("[bit-form] Erro na conex\xE3o do DevTools remoto:",l)}),e.addEventListener("close",()=>{if(a)return;console.log("[bit-form] Conex\xE3o DevTools remota fechada. Reconectando...");let d=Math.min(1e3*Math.pow(2,p),x)*(.5+Math.random()*.5);p++,c=setTimeout(()=>{a||g()},d)}))}function g(){e&&(e.onopen=null,e.onmessage=null,e.onerror=null,e.onclose=null,(e.readyState===WebSocket.OPEN||e.readyState===WebSocket.CONNECTING)&&e.close());try{e=new WebSocket(s)}catch(l){console.error("[bit-form] Failed to create WebSocket for remote devtools:",l);let y=Math.min(1e3*Math.pow(2,p),x)*(.5+Math.random()*.5);p++,a||(c=setTimeout(()=>{a||g()},y));return}k()}return g(),{ui:n,destroy:()=>{a=!0,c&&(clearTimeout(c),c=void 0),e&&(e.readyState===WebSocket.OPEN||e.readyState===WebSocket.CONNECTING)&&e.close(),t.innerHTML=""}}}function v(t={}){let{mode:s="local",url:i,bus:e}=t,o,r=!1;if(typeof t.container=="string"){let a=document.querySelector(t.container);if(!a)throw new Error(`[bit-form] Container '${t.container}' n\xE3o encontrado na p\xE1gina.`);o=a}else t.container instanceof HTMLElement?o=t.container:(o=document.createElement("div"),o.id="bit-form-devtools-root",o.style.position="fixed",o.style.bottom="20px",o.style.right="20px",o.style.zIndex="9999",o.style.maxHeight="80vh",o.style.overflowY="auto",o.style.boxShadow="0 10px 25px rgba(0,0,0,0.1)",document.body.appendChild(o),r=!0);let n;if(s==="local")console.log("[bit-form] DevTools iniciado em modo Local."),n=O(o,e);else if(s==="remote")console.log("[bit-form] DevTools iniciado em modo Remote."),n=w(o,i,e);else throw new Error(`[bit-form] Modo DevTools inv\xE1lido: ${s}`);return{...n,destroy:()=>{n&&typeof n.destroy=="function"&&n.destroy(),r&&o.parentNode?o.parentNode.removeChild(o):o.innerHTML=""}}}function L(t){return typeof t=="boolean"?{enabled:t,mode:"local"}:{enabled:!!t,mode:_nullishCoalesce(_optionalChain([t, 'optionalAccess', _8 => _8.mode]), () => ("local")),url:_optionalChain([t, 'optionalAccess', _9 => _9.url])}}function R(){return typeof process<"u"&&typeof process.env<"u"&&process.env.NODE_ENV==="production"?!0:(typeof process<"u"&&typeof process.env<"u"&&process.env.VITEST==="true",!1)}function A(t){return{name:"bit-devtools",setup:s=>{let i=L(_nullishCoalesce(t, () => (s.getConfig().devTools)));if(!i.enabled||R()&&t!==!0)return;let e=null,o=s.getConfig().bus;try{if(i.mode==="remote")e=_chunkGBHOCY7Ecjs.c.call(void 0, i.url||"ws://localhost:3000",o);else{let r=v({bus:o});e=r&&typeof r.destroy=="function"?r.destroy:null}}catch (e3){}return()=>{e&&(e(),e=null)}}}}exports.DEVTOOLS_PROTOCOL_VERSION = _chunkQKGTVKBUcjs.a; exports.createDevToolsPlugin = A; exports.initDevTools = v;
133
133
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/builds/kenji.ccp-group/bit-form/dist/devtools/index.cjs","../../src/devtools/ui/styles.ts","../../src/devtools/ui/index.ts","../../src/devtools/adapters/local.ts","../../src/devtools/adapters/remote.ts"],"names":["getDevToolsCSS","escapeHtml","str","safeJsonStringify","value","BitFormDevToolsUI","container","actions","style","e","target","btn","action","storeId","storesState","storeEntries","panelHtml","id","state","hasErrors","meta","currentStep","totalSteps","triggerHtml","setupLocalDevTools","bus","bitBus","ui","getDevToolsActionableStore","getFullSnapshot","createDevToolsSnapshotMap","rafId","unsubscribe","setupRemoteDevTools","url","_bus","socket","sendMessage","message","sendAction","destroyed","reconnectTimer","attachListeners"],"mappings":"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","file":"/builds/kenji.ccp-group/bit-form/dist/devtools/index.cjs","sourcesContent":[null,"export function getDevToolsCSS(): string {\n return `\n .bit-devtools-container {\n position: fixed;\n bottom: 20px;\n right: 20px;\n z-index: 9999;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n\n .bit-devtools-trigger {\n background: #10b981;\n color: #fff;\n border: none;\n border-radius: 50%;\n width: 48px;\n height: 48px;\n cursor: pointer;\n box-shadow: 0 4px 12px rgba(16, 185, 129, 0.4);\n font-weight: bold;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.2s;\n font-size: 16px;\n margin-top: 16px;\n }\n .bit-devtools-trigger:hover { transform: scale(1.05); }\n\n .bit-devtools-panel {\n width: 450px;\n max-height: 80vh;\n background: #0f172a;\n color: #f8fafc;\n border-radius: 8px;\n padding: 16px;\n overflow-y: auto;\n box-shadow: 0 20px 25px -5px rgba(0,0,0,0.5), 0 8px 10px -6px rgba(0,0,0,0.5);\n border: 1px solid #334155;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .bit-devtools-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 12px;\n border-bottom: 1px solid #1e293b;\n }\n .bit-devtools-header h2 { margin: 0; font-size: 16px; display: flex; align-items: center; gap: 8px; }\n\n .bit-store-block {\n background: #1e293b;\n border-radius: 6px;\n padding: 12px;\n border: 1px solid #334155;\n }\n\n .bit-store-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n }\n .bit-store-title { margin: 0; color: #38bdf8; font-size: 14px; font-weight: bold; }\n\n .bit-badge-group { display: flex; gap: 6px; flex-wrap: wrap; }\n .bit-badge { font-size: 10px; padding: 2px 6px; border-radius: 4px; text-transform: uppercase; font-weight: bold; }\n .badge-success { background: rgba(16, 185, 129, 0.2); color: #34d399; border: 1px solid rgba(16, 185, 129, 0.2); }\n .badge-error { background: rgba(239, 68, 68, 0.2); color: #f87171; border: 1px solid rgba(239, 68, 68, 0.2); }\n .badge-warn { background: rgba(245, 158, 11, 0.2); color: #fbbf24; border: 1px solid rgba(245, 158, 11, 0.2); }\n .badge-info { background: rgba(56, 189, 248, 0.2); color: #7dd3fc; border: 1px solid rgba(56, 189, 248, 0.2); }\n\n .bit-section-title { font-size: 11px; color: #94a3b8; text-transform: uppercase; letter-spacing: 1px; margin: 12px 0 4px 0; display: block; }\n\n .bit-controls { display: flex; gap: 6px; margin-bottom: 12px; background: #0f172a; padding: 8px; border-radius: 6px; }\n .bit-action-btn { flex: 1; background: #334155; color: #e2e8f0; border: 1px solid #475569; padding: 6px 0; border-radius: 4px; cursor: pointer; font-size: 11px; display: flex; align-items: center; justify-content: center; gap: 4px; transition: all 0.2s; }\n .bit-action-btn:hover:not(:disabled) { background: #475569; }\n .bit-action-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n .bit-btn-reset { color: #fca5a5; border-color: rgba(239,68,68,0.3); }\n .bit-btn-reset:hover { background: rgba(239,68,68,0.1) !important; }\n\n pre.bit-pre { background: #020617; padding: 10px; border-radius: 4px; font-size: 11px; overflow-x: auto; border: 1px solid #1e293b; margin: 0; color: #e2e8f0; }\n pre.bit-error-box { background: rgba(239, 68, 68, 0.05); padding: 10px; border-radius: 4px; font-size: 11px; border: 1px dashed #ef4444; color: #fca5a5; margin: 0; overflow-x: auto; }\n `;\n}\n","import { getDevToolsCSS } from \"./styles\";\nimport type { DevToolsActions } from \"../types\";\nimport type { DevToolsStoreSnapshots } from \"../protocol\";\n\nexport type { DevToolsActions };\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction safeJsonStringify(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return \"[Unserializable]\";\n }\n}\n\nexport class BitFormDevToolsUI {\n private container: HTMLElement;\n private actions: DevToolsActions;\n private rootElement: HTMLDivElement;\n private currentStoresState: DevToolsStoreSnapshots = {};\n private isOpen = false;\n\n constructor(container: HTMLElement, actions: DevToolsActions) {\n this.container = container;\n this.actions = actions;\n\n if (!document.getElementById(\"bit-devtools-styles\")) {\n const style = document.createElement(\"style\");\n style.id = \"bit-devtools-styles\";\n style.textContent = getDevToolsCSS();\n document.head.appendChild(style);\n }\n\n this.rootElement = document.createElement(\"div\");\n this.rootElement.className = \"bit-devtools-container\";\n this.container.appendChild(this.rootElement);\n\n this.rootElement.addEventListener(\"click\", (e) => {\n const target = e.target as HTMLElement;\n\n // Evento do botão flutuante\n if (target.closest(\".bit-devtools-trigger\")) {\n this.isOpen = !this.isOpen;\n this.render();\n return;\n }\n\n // Eventos dos botões de ação\n const btn = target.closest(\".bit-action-btn\");\n if (btn && !btn.hasAttribute(\"disabled\")) {\n const action = btn.getAttribute(\"data-action\");\n const storeId = btn.getAttribute(\"data-store\");\n\n if (action && storeId) {\n if (action === \"undo\") this.actions.onUndo(storeId);\n if (action === \"redo\") this.actions.onRedo(storeId);\n if (action === \"reset\") this.actions.onReset(storeId);\n }\n }\n });\n }\n\n public updateState(storesState: DevToolsStoreSnapshots) {\n this.currentStoresState = storesState;\n this.render();\n }\n\n private render() {\n const storeEntries = Object.entries(this.currentStoresState);\n if (storeEntries.length === 0) {\n this.rootElement.innerHTML = \"\";\n return;\n }\n\n let panelHtml = \"\";\n\n if (this.isOpen) {\n panelHtml = `\n <div class=\"bit-devtools-panel\">\n <div class=\"bit-devtools-header\">\n <h2><span style=\"font-size: 20px;\">🛠</span> Bit-Form DevTools</h2>\n <span style=\"font-size: 11px; color: #64748b;\">v1.0.0</span>\n </div>\n `;\n\n for (const [id, state] of storeEntries) {\n const hasErrors = Object.keys(state.errors || {}).length > 0;\n\n // Lemos os metadados do histórico que o adaptador injetou\n const meta = state._meta || {\n totalSteps: 0,\n currentIndex: -1,\n canUndo: false,\n canRedo: false,\n };\n const currentStep = meta.currentIndex + 1;\n const totalSteps = meta.totalSteps;\n\n panelHtml += `\n <div class=\"bit-store-block\">\n <div class=\"bit-store-header\">\n <h3 class=\"bit-store-title\">${escapeHtml(id)}</h3>\n <div class=\"bit-badge-group\">\n <span class=\"bit-badge ${state.isValid ? \"badge-success\" : \"badge-error\"}\">\n ${state.isValid ? \"✓ Valid\" : \"✕ Invalid\"}\n </span>\n ${state.isDirty ? `<span class=\"bit-badge badge-warn\">Dirty</span>` : \"\"}\n ${state.isSubmitting ? `<span class=\"bit-badge badge-info\">⏳ Submitting</span>` : \"\"}\n </div>\n </div>\n\n <span class=\"bit-section-title\">Time Travel (${currentStep}/${totalSteps})</span>\n \n <div class=\"bit-controls\">\n <button class=\"bit-action-btn\" data-action=\"undo\" data-store=\"${escapeHtml(id)}\" ${meta.canUndo ? \"\" : \"disabled\"}>\n <span>↺</span> Undo\n </button>\n <button class=\"bit-action-btn\" data-action=\"redo\" data-store=\"${escapeHtml(id)}\" ${meta.canRedo ? \"\" : \"disabled\"}>\n <span>↻</span> Redo\n </button>\n <button class=\"bit-action-btn bit-btn-reset\" data-action=\"reset\" data-store=\"${escapeHtml(id)}\">\n <span>🗑</span> Reset\n </button>\n </div>\n `;\n\n if (hasErrors) {\n panelHtml += `\n <span class=\"bit-section-title\" style=\"color: #f87171;\">⚠️ Validations Failing</span>\n <pre class=\"bit-error-box\">${safeJsonStringify(state.errors)}</pre>\n `;\n }\n\n panelHtml += `\n <span class=\"bit-section-title\">Values</span>\n <pre class=\"bit-pre\">${safeJsonStringify(state.values)}</pre>\n </div>\n `;\n }\n\n panelHtml += `</div>`;\n }\n\n // Botão Flutuante (sempre renderizado)\n const triggerHtml = `\n <button class=\"bit-devtools-trigger\" style=\"transform: ${this.isOpen ? \"scale(0.9)\" : \"scale(1)\"};\" title=\"Abrir DevTools\">\n ${this.isOpen ? \"✖\" : \"Bit\"}\n </button>\n `;\n\n this.rootElement.innerHTML = panelHtml + triggerHtml;\n }\n}\n","import { bitBus } from \"../../core\";\nimport type { BitBus } from \"../../core\";\nimport { BitFormDevToolsUI } from \"../ui\";\nimport { createDevToolsSnapshotMap } from \"../store-snapshot\";\nimport { getDevToolsActionableStore } from \"../store-port\";\n\nexport function setupLocalDevTools(\n container: HTMLElement,\n bus: BitBus = bitBus,\n) {\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => getDevToolsActionableStore(bus.stores, id)?.undo(),\n onRedo: (id) => getDevToolsActionableStore(bus.stores, id)?.redo(),\n onReset: (id) => getDevToolsActionableStore(bus.stores, id)?.reset(),\n });\n\n const getFullSnapshot = () => createDevToolsSnapshotMap(bus.stores);\n\n ui.updateState(getFullSnapshot());\n\n let rafId: number | undefined;\n const unsubscribe = bus.subscribe(() => {\n if (rafId !== undefined) return;\n rafId = requestAnimationFrame(() => {\n rafId = undefined;\n ui.updateState(getFullSnapshot());\n });\n });\n\n return {\n ui,\n destroy: () => {\n if (rafId !== undefined) cancelAnimationFrame(rafId);\n unsubscribe();\n container.innerHTML = \"\";\n },\n };\n}\n","import { BitFormDevToolsUI } from \"../ui\";\nimport type { BitBus } from \"../../core\";\nimport type {\n DevToolsHelloMessage,\n DevToolsActionMessage,\n DevToolsActionName,\n DevToolsRemoteMessage,\n} from \"../types\";\nimport {\n DEVTOOLS_PROTOCOL_VERSION,\n isDevToolsStateUpdateMessage,\n} from \"../protocol\";\n\nexport function setupRemoteDevTools(\n container: HTMLElement,\n url: string = \"ws://localhost:3000\",\n _bus?: BitBus,\n) {\n let socket: WebSocket;\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 let destroyed = false;\n let reconnectTimer: ReturnType<typeof setTimeout> | undefined;\n\n function attachListeners() {\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 socket.addEventListener(\"close\", () => {\n if (destroyed) return;\n console.log(\"[bit-form] Conexão DevTools remota fechada. Reconectando em 5s...\");\n reconnectTimer = setTimeout(() => {\n if (destroyed) return;\n connect();\n }, 5000);\n });\n }\n\n function connect() {\n socket = new WebSocket(url);\n attachListeners();\n }\n\n connect();\n\n return {\n ui,\n destroy: () => {\n destroyed = true;\n if (reconnectTimer) {\n clearTimeout(reconnectTimer);\n reconnectTimer = undefined;\n }\n if (\n socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING\n ) {\n socket.close();\n }\n container.innerHTML = \"\";\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["/builds/kenji.ccp-group/bit-form/dist/devtools/index.cjs","../../src/devtools/ui/styles.ts","../../src/devtools/ui/index.ts","../../src/devtools/adapters/local.ts","../../src/devtools/adapters/remote.ts"],"names":["getDevToolsCSS","escapeHtml","str","safeJsonStringify","value","BitFormDevToolsUI","container","actions","style","target","btn","action","storeId","storesState","storeEntries","panelHtml","id","state","hasErrors","meta","currentStep","totalSteps","triggerHtml","setupLocalDevTools","bus","bitBus","ui","getDevToolsActionableStore","getFullSnapshot","createDevToolsSnapshotMap","rafId","unsubscribe","setupRemoteDevTools","url","_bus","socket","sendMessage","message","e","sendAction","destroyed","reconnectTimer","retries","MAX_RETRY_DELAY","attachListeners"],"mappings":"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","file":"/builds/kenji.ccp-group/bit-form/dist/devtools/index.cjs","sourcesContent":[null,"export function getDevToolsCSS(): string {\n return `\n .bit-devtools-container {\n position: fixed;\n bottom: 20px;\n right: 20px;\n z-index: 9999;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n\n .bit-devtools-trigger {\n background: #10b981;\n color: #fff;\n border: none;\n border-radius: 50%;\n width: 48px;\n height: 48px;\n cursor: pointer;\n box-shadow: 0 4px 12px rgba(16, 185, 129, 0.4);\n font-weight: bold;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.2s;\n font-size: 16px;\n margin-top: 16px;\n }\n .bit-devtools-trigger:hover { transform: scale(1.05); }\n\n .bit-devtools-panel {\n width: 450px;\n max-height: 80vh;\n background: #0f172a;\n color: #f8fafc;\n border-radius: 8px;\n padding: 16px;\n overflow-y: auto;\n box-shadow: 0 20px 25px -5px rgba(0,0,0,0.5), 0 8px 10px -6px rgba(0,0,0,0.5);\n border: 1px solid #334155;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .bit-devtools-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 12px;\n border-bottom: 1px solid #1e293b;\n }\n .bit-devtools-header h2 { margin: 0; font-size: 16px; display: flex; align-items: center; gap: 8px; }\n\n .bit-store-block {\n background: #1e293b;\n border-radius: 6px;\n padding: 12px;\n border: 1px solid #334155;\n }\n\n .bit-store-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n }\n .bit-store-title { margin: 0; color: #38bdf8; font-size: 14px; font-weight: bold; }\n\n .bit-badge-group { display: flex; gap: 6px; flex-wrap: wrap; }\n .bit-badge { font-size: 10px; padding: 2px 6px; border-radius: 4px; text-transform: uppercase; font-weight: bold; }\n .badge-success { background: rgba(16, 185, 129, 0.2); color: #34d399; border: 1px solid rgba(16, 185, 129, 0.2); }\n .badge-error { background: rgba(239, 68, 68, 0.2); color: #f87171; border: 1px solid rgba(239, 68, 68, 0.2); }\n .badge-warn { background: rgba(245, 158, 11, 0.2); color: #fbbf24; border: 1px solid rgba(245, 158, 11, 0.2); }\n .badge-info { background: rgba(56, 189, 248, 0.2); color: #7dd3fc; border: 1px solid rgba(56, 189, 248, 0.2); }\n\n .bit-section-title { font-size: 11px; color: #94a3b8; text-transform: uppercase; letter-spacing: 1px; margin: 12px 0 4px 0; display: block; }\n\n .bit-controls { display: flex; gap: 6px; margin-bottom: 12px; background: #0f172a; padding: 8px; border-radius: 6px; }\n .bit-action-btn { flex: 1; background: #334155; color: #e2e8f0; border: 1px solid #475569; padding: 6px 0; border-radius: 4px; cursor: pointer; font-size: 11px; display: flex; align-items: center; justify-content: center; gap: 4px; transition: all 0.2s; }\n .bit-action-btn:hover:not(:disabled) { background: #475569; }\n .bit-action-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n .bit-btn-reset { color: #fca5a5; border-color: rgba(239,68,68,0.3); }\n .bit-btn-reset:hover { background: rgba(239,68,68,0.1) !important; }\n\n pre.bit-pre { background: #020617; padding: 10px; border-radius: 4px; font-size: 11px; overflow-x: auto; border: 1px solid #1e293b; margin: 0; color: #e2e8f0; }\n pre.bit-error-box { background: rgba(239, 68, 68, 0.05); padding: 10px; border-radius: 4px; font-size: 11px; border: 1px dashed #ef4444; color: #fca5a5; margin: 0; overflow-x: auto; }\n `;\n}\n","import { getDevToolsCSS } from \"./styles\";\nimport type { DevToolsActions } from \"../types\";\nimport type { DevToolsStoreSnapshots } from \"../protocol\";\n\nexport type { DevToolsActions };\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction safeJsonStringify(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return \"[Unserializable]\";\n }\n}\n\nexport class BitFormDevToolsUI {\n private container: HTMLElement;\n private actions: DevToolsActions;\n private rootElement: HTMLDivElement;\n private currentStoresState: DevToolsStoreSnapshots = {};\n private isOpen = false;\n\n constructor(container: HTMLElement, actions: DevToolsActions) {\n this.container = container;\n this.actions = actions;\n\n if (!document.getElementById(\"bit-devtools-styles\")) {\n const style = document.createElement(\"style\");\n style.id = \"bit-devtools-styles\";\n style.textContent = getDevToolsCSS();\n document.head.appendChild(style);\n }\n\n this.rootElement = document.createElement(\"div\");\n this.rootElement.className = \"bit-devtools-container\";\n this.container.appendChild(this.rootElement);\n\n this.rootElement.addEventListener(\"click\", (e) => {\n const target = e.target as HTMLElement;\n\n // Evento do botão flutuante\n if (target.closest(\".bit-devtools-trigger\")) {\n this.isOpen = !this.isOpen;\n this.render();\n return;\n }\n\n // Eventos dos botões de ação\n const btn = target.closest(\".bit-action-btn\");\n if (btn && !btn.hasAttribute(\"disabled\")) {\n const action = btn.getAttribute(\"data-action\");\n const storeId = btn.getAttribute(\"data-store\");\n\n if (action && storeId) {\n if (action === \"undo\") this.actions.onUndo(storeId);\n if (action === \"redo\") this.actions.onRedo(storeId);\n if (action === \"reset\") this.actions.onReset(storeId);\n }\n }\n });\n }\n\n public updateState(storesState: DevToolsStoreSnapshots) {\n this.currentStoresState = storesState;\n this.render();\n }\n\n private render() {\n const storeEntries = Object.entries(this.currentStoresState);\n if (storeEntries.length === 0) {\n this.rootElement.innerHTML = \"\";\n return;\n }\n\n let panelHtml = \"\";\n\n if (this.isOpen) {\n panelHtml = `\n <div class=\"bit-devtools-panel\">\n <div class=\"bit-devtools-header\">\n <h2><span style=\"font-size: 20px;\">🛠</span> Bit-Form DevTools</h2>\n <span style=\"font-size: 11px; color: #64748b;\">v1.0.0</span>\n </div>\n `;\n\n for (const [id, state] of storeEntries) {\n const hasErrors = Object.keys(state.errors || {}).length > 0;\n\n // Lemos os metadados do histórico que o adaptador injetou\n const meta = state._meta || {\n totalSteps: 0,\n currentIndex: -1,\n canUndo: false,\n canRedo: false,\n };\n const currentStep = meta.currentIndex + 1;\n const totalSteps = meta.totalSteps;\n\n panelHtml += `\n <div class=\"bit-store-block\">\n <div class=\"bit-store-header\">\n <h3 class=\"bit-store-title\">${escapeHtml(id)}</h3>\n <div class=\"bit-badge-group\">\n <span class=\"bit-badge ${state.isValid ? \"badge-success\" : \"badge-error\"}\">\n ${state.isValid ? \"✓ Valid\" : \"✕ Invalid\"}\n </span>\n ${state.isDirty ? `<span class=\"bit-badge badge-warn\">Dirty</span>` : \"\"}\n ${state.isSubmitting ? `<span class=\"bit-badge badge-info\">⏳ Submitting</span>` : \"\"}\n </div>\n </div>\n\n <span class=\"bit-section-title\">Time Travel (${currentStep}/${totalSteps})</span>\n \n <div class=\"bit-controls\">\n <button class=\"bit-action-btn\" data-action=\"undo\" data-store=\"${escapeHtml(id)}\" ${meta.canUndo ? \"\" : \"disabled\"}>\n <span>↺</span> Undo\n </button>\n <button class=\"bit-action-btn\" data-action=\"redo\" data-store=\"${escapeHtml(id)}\" ${meta.canRedo ? \"\" : \"disabled\"}>\n <span>↻</span> Redo\n </button>\n <button class=\"bit-action-btn bit-btn-reset\" data-action=\"reset\" data-store=\"${escapeHtml(id)}\">\n <span>🗑</span> Reset\n </button>\n </div>\n `;\n\n if (hasErrors) {\n panelHtml += `\n <span class=\"bit-section-title\" style=\"color: #f87171;\">⚠️ Validations Failing</span>\n <pre class=\"bit-error-box\">${safeJsonStringify(state.errors)}</pre>\n `;\n }\n\n panelHtml += `\n <span class=\"bit-section-title\">Values</span>\n <pre class=\"bit-pre\">${safeJsonStringify(state.values)}</pre>\n </div>\n `;\n }\n\n panelHtml += `</div>`;\n }\n\n // Botão Flutuante (sempre renderizado)\n const triggerHtml = `\n <button class=\"bit-devtools-trigger\" style=\"transform: ${this.isOpen ? \"scale(0.9)\" : \"scale(1)\"};\" title=\"Abrir DevTools\">\n ${this.isOpen ? \"✖\" : \"Bit\"}\n </button>\n `;\n\n this.rootElement.innerHTML = panelHtml + triggerHtml;\n }\n}\n","import { bitBus } from \"../../core\";\nimport type { BitBus } from \"../../core\";\nimport { BitFormDevToolsUI } from \"../ui\";\nimport { createDevToolsSnapshotMap } from \"../store-snapshot\";\nimport { getDevToolsActionableStore } from \"../store-port\";\n\nexport function setupLocalDevTools(\n container: HTMLElement,\n bus: BitBus = bitBus,\n) {\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => getDevToolsActionableStore(bus.stores, id)?.undo(),\n onRedo: (id) => getDevToolsActionableStore(bus.stores, id)?.redo(),\n onReset: (id) => getDevToolsActionableStore(bus.stores, id)?.reset(),\n });\n\n const getFullSnapshot = () => createDevToolsSnapshotMap(bus.stores);\n\n ui.updateState(getFullSnapshot());\n\n let rafId: number | undefined;\n const unsubscribe = bus.subscribe(() => {\n if (rafId !== undefined) return;\n rafId = requestAnimationFrame(() => {\n rafId = undefined;\n ui.updateState(getFullSnapshot());\n });\n });\n\n return {\n ui,\n destroy: () => {\n if (rafId !== undefined) cancelAnimationFrame(rafId);\n unsubscribe();\n container.innerHTML = \"\";\n },\n };\n}\n","import { BitFormDevToolsUI } from \"../ui\";\nimport type { BitBus } from \"../../core\";\nimport type {\n DevToolsHelloMessage,\n DevToolsActionMessage,\n DevToolsActionName,\n DevToolsRemoteMessage,\n} from \"../types\";\nimport {\n DEVTOOLS_PROTOCOL_VERSION,\n isDevToolsStateUpdateMessage,\n} from \"../protocol\";\n\nexport function setupRemoteDevTools(\n container: HTMLElement,\n url: string = \"ws://localhost:3000\",\n _bus?: BitBus,\n) {\n let socket: WebSocket | null = null;\n\n const sendMessage = (message: DevToolsRemoteMessage) => {\n if (socket?.readyState === WebSocket.OPEN) {\n try {\n socket.send(JSON.stringify(message));\n } catch (e) {\n console.warn(\"[bit-form] Failed to send message:\", e);\n }\n } else {\n console.warn(\n \"[bit-form] Tentativa de envio falhou. WebSocket não está aberto.\",\n );\n }\n };\n\n const sendAction = (storeId: string, action: DevToolsActionName) => {\n const message: DevToolsActionMessage = {\n type: \"ACTION\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload: { storeId, action },\n };\n sendMessage(message);\n };\n\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => sendAction(id, \"undo\"),\n onRedo: (id) => sendAction(id, \"redo\"),\n onReset: (id) => sendAction(id, \"reset\"),\n });\n\n let destroyed = false;\n let reconnectTimer: ReturnType<typeof setTimeout> | undefined;\n let retries = 0;\n const MAX_RETRY_DELAY = 30000;\n\n function attachListeners() {\n if (!socket) return;\n\n socket.addEventListener(\"open\", () => {\n retries = 0;\n const helloMessage: DevToolsHelloMessage = {\n type: \"HELLO\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload: { role: \"client\", protocolVersion: DEVTOOLS_PROTOCOL_VERSION },\n };\n\n sendMessage(helloMessage);\n console.log(`[bit-form] Conectado ao DevTools remoto em ${url}`);\n });\n\n socket.addEventListener(\"message\", (msg: MessageEvent) => {\n try {\n const data = JSON.parse(msg.data) as DevToolsRemoteMessage;\n if (isDevToolsStateUpdateMessage(data)) {\n ui.updateState(data.payload);\n }\n } catch (e) {\n console.error(\"[bit-form] Erro ao processar mensagem do WebSocket:\", e);\n }\n });\n\n socket.addEventListener(\"error\", (err) => {\n console.error(\"[bit-form] Erro na conexão do DevTools remoto:\", err);\n });\n\n socket.addEventListener(\"close\", () => {\n if (destroyed) return;\n console.log(\"[bit-form] Conexão DevTools remota fechada. Reconectando...\");\n const delay = Math.min(1000 * Math.pow(2, retries), MAX_RETRY_DELAY);\n const jitter = delay * (0.5 + Math.random() * 0.5);\n retries++;\n reconnectTimer = setTimeout(() => {\n if (destroyed) return;\n connect();\n }, jitter);\n });\n }\n\n function connect() {\n if (socket) {\n socket.onopen = null;\n socket.onmessage = null;\n socket.onerror = null;\n socket.onclose = null;\n if (socket.readyState === WebSocket.OPEN || socket.readyState === WebSocket.CONNECTING) {\n socket.close();\n }\n }\n try {\n socket = new WebSocket(url);\n } catch (e) {\n console.error(\"[bit-form] Failed to create WebSocket for remote devtools:\", e);\n const delay = Math.min(1000 * Math.pow(2, retries), MAX_RETRY_DELAY);\n const jitter = delay * (0.5 + Math.random() * 0.5);\n retries++;\n if (!destroyed) {\n reconnectTimer = setTimeout(() => {\n if (destroyed) return;\n connect();\n }, jitter);\n }\n return;\n }\n attachListeners();\n }\n\n connect();\n\n return {\n ui,\n destroy: () => {\n destroyed = true;\n if (reconnectTimer) {\n clearTimeout(reconnectTimer);\n reconnectTimer = undefined;\n }\n if (\n socket &&\n (socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING)\n ) {\n socket.close();\n }\n container.innerHTML = \"\";\n },\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import{a as y,b as f,c as h}from"../chunk-LY67POOF.js";import{a as b,d as T}from"../chunk-K5X37E3U.js";import"../chunk-5NA2TFPG.js";import{a as x}from"../chunk-PRMNTQD5.js";import"../chunk-XPY6TCOO.js";import"../chunk-W2E5UIXT.js";import"../chunk-UIKO6GGW.js";import"../chunk-L57KMBXS.js";import"../chunk-X3OFU2UH.js";import"../chunk-JVRTPL7W.js";import"../chunk-MBEQLBJB.js";import"../chunk-DGEGYNQL.js";function D(){return`
1
+ import{a as h,b as u,c as S}from"../chunk-WYYVVM2C.js";import{a as f,d as D}from"../chunk-K5X37E3U.js";import"../chunk-5NA2TFPG.js";import{a as T}from"../chunk-7T7L2TZX.js";import"../chunk-L42NQRVD.js";import"../chunk-W2E5UIXT.js";import"../chunk-UIKO6GGW.js";import"../chunk-L57KMBXS.js";import"../chunk-Y7TQTZY7.js";import"../chunk-UBVVBVLS.js";import"../chunk-MBEQLBJB.js";import"../chunk-DGEGYNQL.js";function E(){return`
2
2
  .bit-devtools-container {
3
3
  position: fixed;
4
4
  bottom: 20px;
@@ -86,48 +86,48 @@ import{a as y,b as f,c as h}from"../chunk-LY67POOF.js";import{a as b,d as T}from
86
86
 
87
87
  pre.bit-pre { background: #020617; padding: 10px; border-radius: 4px; font-size: 11px; overflow-x: auto; border: 1px solid #1e293b; margin: 0; color: #e2e8f0; }
88
88
  pre.bit-error-box { background: rgba(239, 68, 68, 0.05); padding: 10px; border-radius: 4px; font-size: 11px; border: 1px dashed #ef4444; color: #fca5a5; margin: 0; overflow-x: auto; }
89
- `}function u(t){return t.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function S(t){try{return JSON.stringify(t,null,2)}catch{return"[Unserializable]"}}var p=class{container;actions;rootElement;currentStoresState={};isOpen=!1;constructor(r,i){if(this.container=r,this.actions=i,!document.getElementById("bit-devtools-styles")){let o=document.createElement("style");o.id="bit-devtools-styles",o.textContent=D(),document.head.appendChild(o)}this.rootElement=document.createElement("div"),this.rootElement.className="bit-devtools-container",this.container.appendChild(this.rootElement),this.rootElement.addEventListener("click",o=>{let e=o.target;if(e.closest(".bit-devtools-trigger")){this.isOpen=!this.isOpen,this.render();return}let s=e.closest(".bit-action-btn");if(s&&!s.hasAttribute("disabled")){let n=s.getAttribute("data-action"),a=s.getAttribute("data-store");n&&a&&(n==="undo"&&this.actions.onUndo(a),n==="redo"&&this.actions.onRedo(a),n==="reset"&&this.actions.onReset(a))}})}updateState(r){this.currentStoresState=r,this.render()}render(){let r=Object.entries(this.currentStoresState);if(r.length===0){this.rootElement.innerHTML="";return}let i="";if(this.isOpen){i=`
89
+ `}function m(t){return t.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function M(t){try{return JSON.stringify(t,null,2)}catch{return"[Unserializable]"}}var b=class{container;actions;rootElement;currentStoresState={};isOpen=!1;constructor(s,i){if(this.container=s,this.actions=i,!document.getElementById("bit-devtools-styles")){let e=document.createElement("style");e.id="bit-devtools-styles",e.textContent=E(),document.head.appendChild(e)}this.rootElement=document.createElement("div"),this.rootElement.className="bit-devtools-container",this.container.appendChild(this.rootElement),this.rootElement.addEventListener("click",e=>{let o=e.target;if(o.closest(".bit-devtools-trigger")){this.isOpen=!this.isOpen,this.render();return}let r=o.closest(".bit-action-btn");if(r&&!r.hasAttribute("disabled")){let n=r.getAttribute("data-action"),a=r.getAttribute("data-store");n&&a&&(n==="undo"&&this.actions.onUndo(a),n==="redo"&&this.actions.onRedo(a),n==="reset"&&this.actions.onReset(a))}})}updateState(s){this.currentStoresState=s,this.render()}render(){let s=Object.entries(this.currentStoresState);if(s.length===0){this.rootElement.innerHTML="";return}let i="";if(this.isOpen){i=`
90
90
  <div class="bit-devtools-panel">
91
91
  <div class="bit-devtools-header">
92
92
  <h2><span style="font-size: 20px;">\u{1F6E0}</span> Bit-Form DevTools</h2>
93
93
  <span style="font-size: 11px; color: #64748b;">v1.0.0</span>
94
94
  </div>
95
- `;for(let[e,s]of r){let n=Object.keys(s.errors||{}).length>0,a=s._meta||{totalSteps:0,currentIndex:-1,canUndo:!1,canRedo:!1},d=a.currentIndex+1,m=a.totalSteps;i+=`
95
+ `;for(let[o,r]of s){let n=Object.keys(r.errors||{}).length>0,a=r._meta||{totalSteps:0,currentIndex:-1,canUndo:!1,canRedo:!1},c=a.currentIndex+1,p=a.totalSteps;i+=`
96
96
  <div class="bit-store-block">
97
97
  <div class="bit-store-header">
98
- <h3 class="bit-store-title">${u(e)}</h3>
98
+ <h3 class="bit-store-title">${m(o)}</h3>
99
99
  <div class="bit-badge-group">
100
- <span class="bit-badge ${s.isValid?"badge-success":"badge-error"}">
101
- ${s.isValid?"\u2713 Valid":"\u2715 Invalid"}
100
+ <span class="bit-badge ${r.isValid?"badge-success":"badge-error"}">
101
+ ${r.isValid?"\u2713 Valid":"\u2715 Invalid"}
102
102
  </span>
103
- ${s.isDirty?'<span class="bit-badge badge-warn">Dirty</span>':""}
104
- ${s.isSubmitting?'<span class="bit-badge badge-info">\u23F3 Submitting</span>':""}
103
+ ${r.isDirty?'<span class="bit-badge badge-warn">Dirty</span>':""}
104
+ ${r.isSubmitting?'<span class="bit-badge badge-info">\u23F3 Submitting</span>':""}
105
105
  </div>
106
106
  </div>
107
107
 
108
- <span class="bit-section-title">Time Travel (${d}/${m})</span>
108
+ <span class="bit-section-title">Time Travel (${c}/${p})</span>
109
109
 
110
110
  <div class="bit-controls">
111
- <button class="bit-action-btn" data-action="undo" data-store="${u(e)}" ${a.canUndo?"":"disabled"}>
111
+ <button class="bit-action-btn" data-action="undo" data-store="${m(o)}" ${a.canUndo?"":"disabled"}>
112
112
  <span>\u21BA</span> Undo
113
113
  </button>
114
- <button class="bit-action-btn" data-action="redo" data-store="${u(e)}" ${a.canRedo?"":"disabled"}>
114
+ <button class="bit-action-btn" data-action="redo" data-store="${m(o)}" ${a.canRedo?"":"disabled"}>
115
115
  <span>\u21BB</span> Redo
116
116
  </button>
117
- <button class="bit-action-btn bit-btn-reset" data-action="reset" data-store="${u(e)}">
117
+ <button class="bit-action-btn bit-btn-reset" data-action="reset" data-store="${m(o)}">
118
118
  <span>\u{1F5D1}</span> Reset
119
119
  </button>
120
120
  </div>
121
121
  `,n&&(i+=`
122
122
  <span class="bit-section-title" style="color: #f87171;">\u26A0\uFE0F Validations Failing</span>
123
- <pre class="bit-error-box">${S(s.errors)}</pre>
123
+ <pre class="bit-error-box">${M(r.errors)}</pre>
124
124
  `),i+=`
125
125
  <span class="bit-section-title">Values</span>
126
- <pre class="bit-pre">${S(s.values)}</pre>
126
+ <pre class="bit-pre">${M(r.values)}</pre>
127
127
  </div>
128
- `}i+="</div>"}let o=`
128
+ `}i+="</div>"}let e=`
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+o}};function E(t,r=x){let i=new p(t,{onUndo:n=>f(r.stores,n)?.undo(),onRedo:n=>f(r.stores,n)?.redo(),onReset:n=>f(r.stores,n)?.reset()}),o=()=>y(r.stores);i.updateState(o());let e,s=r.subscribe(()=>{e===void 0&&(e=requestAnimationFrame(()=>{e=void 0,i.updateState(o())}))});return{ui:i,destroy:()=>{e!==void 0&&cancelAnimationFrame(e),s(),t.innerHTML=""}}}function O(t,r="ws://localhost:3000",i){let o,e=l=>{o.readyState===WebSocket.OPEN?o.send(JSON.stringify(l)):console.warn("[bit-form] Tentativa de envio falhou. WebSocket n\xE3o est\xE1 aberto.")},s=(l,c)=>{e({type:"ACTION",protocolVersion:1,payload:{storeId:l,action:c}})},n=new p(t,{onUndo:l=>s(l,"undo"),onRedo:l=>s(l,"redo"),onReset:l=>s(l,"reset")}),a=!1,d;function m(){o.addEventListener("open",()=>{e({type:"HELLO",protocolVersion:1,payload:{role:"client",protocolVersion:1}}),console.log(`[bit-form] Conectado ao DevTools remoto em ${r}`)}),o.addEventListener("message",l=>{try{let c=JSON.parse(l.data);T(c)&&n.updateState(c.payload)}catch(c){console.error("[bit-form] Erro ao processar mensagem do WebSocket:",c)}}),o.addEventListener("error",l=>{console.error("[bit-form] Erro na conex\xE3o do DevTools remoto:",l)}),o.addEventListener("close",()=>{a||(console.log("[bit-form] Conex\xE3o DevTools remota fechada. Reconectando em 5s..."),d=setTimeout(()=>{a||v()},5e3))})}function v(){o=new WebSocket(r),m()}return v(),{ui:n,destroy:()=>{a=!0,d&&(clearTimeout(d),d=void 0),(o.readyState===WebSocket.OPEN||o.readyState===WebSocket.CONNECTING)&&o.close(),t.innerHTML=""}}}function g(t={}){let{mode:r="local",url:i,bus:o}=t,e,s=!1;if(typeof t.container=="string"){let a=document.querySelector(t.container);if(!a)throw new Error(`[bit-form] Container '${t.container}' n\xE3o encontrado na p\xE1gina.`);e=a}else t.container instanceof HTMLElement?e=t.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),s=!0);let n;if(r==="local")console.log("[bit-form] DevTools iniciado em modo Local."),n=E(e,o);else if(r==="remote")console.log("[bit-form] DevTools iniciado em modo Remote."),n=O(e,i,o);else throw new Error(`[bit-form] Modo DevTools inv\xE1lido: ${r}`);return{...n,destroy:()=>{n&&typeof n.destroy=="function"&&n.destroy(),s&&e.parentNode?e.parentNode.removeChild(e):e.innerHTML=""}}}function M(t){return typeof t=="boolean"?{enabled:t,mode:"local"}:{enabled:!!t,mode:t?.mode??"local",url:t?.url}}function w(){return typeof process<"u"&&typeof process.env<"u"&&process.env.NODE_ENV==="production"?!0:(typeof process<"u"&&typeof process.env<"u"&&process.env.VITEST==="true",!1)}function k(t){return{name:"bit-devtools",setup:r=>{let i=M(t??r.getConfig().devTools);if(!i.enabled||w()&&t!==!0)return;let o=null,e=r.getConfig().bus;try{if(i.mode==="remote")o=h(i.url||"ws://localhost:3000",e);else{let s=g({bus:e});o=s&&typeof s.destroy=="function"?s.destroy:null}}catch{}return()=>{o&&(o(),o=null)}}}}export{b as DEVTOOLS_PROTOCOL_VERSION,k as createDevToolsPlugin,g as initDevTools};
132
+ `;this.rootElement.innerHTML=i+e}};function O(t,s=T){let i=new b(t,{onUndo:n=>u(s.stores,n)?.undo(),onRedo:n=>u(s.stores,n)?.redo(),onReset:n=>u(s.stores,n)?.reset()}),e=()=>h(s.stores);i.updateState(e());let o,r=s.subscribe(()=>{o===void 0&&(o=requestAnimationFrame(()=>{o=void 0,i.updateState(e())}))});return{ui:i,destroy:()=>{o!==void 0&&cancelAnimationFrame(o),r(),t.innerHTML=""}}}function w(t,s="ws://localhost:3000",i){let e=null,o=l=>{if(e?.readyState===WebSocket.OPEN)try{e.send(JSON.stringify(l))}catch(d){console.warn("[bit-form] Failed to send message:",d)}else console.warn("[bit-form] Tentativa de envio falhou. WebSocket n\xE3o est\xE1 aberto.")},r=(l,d)=>{o({type:"ACTION",protocolVersion:1,payload:{storeId:l,action:d}})},n=new b(t,{onUndo:l=>r(l,"undo"),onRedo:l=>r(l,"redo"),onReset:l=>r(l,"reset")}),a=!1,c,p=0,x=3e4;function k(){e&&(e.addEventListener("open",()=>{p=0,o({type:"HELLO",protocolVersion:1,payload:{role:"client",protocolVersion:1}}),console.log(`[bit-form] Conectado ao DevTools remoto em ${s}`)}),e.addEventListener("message",l=>{try{let d=JSON.parse(l.data);D(d)&&n.updateState(d.payload)}catch(d){console.error("[bit-form] Erro ao processar mensagem do WebSocket:",d)}}),e.addEventListener("error",l=>{console.error("[bit-form] Erro na conex\xE3o do DevTools remoto:",l)}),e.addEventListener("close",()=>{if(a)return;console.log("[bit-form] Conex\xE3o DevTools remota fechada. Reconectando...");let d=Math.min(1e3*Math.pow(2,p),x)*(.5+Math.random()*.5);p++,c=setTimeout(()=>{a||g()},d)}))}function g(){e&&(e.onopen=null,e.onmessage=null,e.onerror=null,e.onclose=null,(e.readyState===WebSocket.OPEN||e.readyState===WebSocket.CONNECTING)&&e.close());try{e=new WebSocket(s)}catch(l){console.error("[bit-form] Failed to create WebSocket for remote devtools:",l);let y=Math.min(1e3*Math.pow(2,p),x)*(.5+Math.random()*.5);p++,a||(c=setTimeout(()=>{a||g()},y));return}k()}return g(),{ui:n,destroy:()=>{a=!0,c&&(clearTimeout(c),c=void 0),e&&(e.readyState===WebSocket.OPEN||e.readyState===WebSocket.CONNECTING)&&e.close(),t.innerHTML=""}}}function v(t={}){let{mode:s="local",url:i,bus:e}=t,o,r=!1;if(typeof t.container=="string"){let a=document.querySelector(t.container);if(!a)throw new Error(`[bit-form] Container '${t.container}' n\xE3o encontrado na p\xE1gina.`);o=a}else t.container instanceof HTMLElement?o=t.container:(o=document.createElement("div"),o.id="bit-form-devtools-root",o.style.position="fixed",o.style.bottom="20px",o.style.right="20px",o.style.zIndex="9999",o.style.maxHeight="80vh",o.style.overflowY="auto",o.style.boxShadow="0 10px 25px rgba(0,0,0,0.1)",document.body.appendChild(o),r=!0);let n;if(s==="local")console.log("[bit-form] DevTools iniciado em modo Local."),n=O(o,e);else if(s==="remote")console.log("[bit-form] DevTools iniciado em modo Remote."),n=w(o,i,e);else throw new Error(`[bit-form] Modo DevTools inv\xE1lido: ${s}`);return{...n,destroy:()=>{n&&typeof n.destroy=="function"&&n.destroy(),r&&o.parentNode?o.parentNode.removeChild(o):o.innerHTML=""}}}function L(t){return typeof t=="boolean"?{enabled:t,mode:"local"}:{enabled:!!t,mode:t?.mode??"local",url:t?.url}}function R(){return typeof process<"u"&&typeof process.env<"u"&&process.env.NODE_ENV==="production"?!0:(typeof process<"u"&&typeof process.env<"u"&&process.env.VITEST==="true",!1)}function A(t){return{name:"bit-devtools",setup:s=>{let i=L(t??s.getConfig().devTools);if(!i.enabled||R()&&t!==!0)return;let e=null,o=s.getConfig().bus;try{if(i.mode==="remote")e=S(i.url||"ws://localhost:3000",o);else{let r=v({bus:o});e=r&&typeof r.destroy=="function"?r.destroy:null}}catch{}return()=>{e&&(e(),e=null)}}}}export{f as DEVTOOLS_PROTOCOL_VERSION,A as createDevToolsPlugin,v as initDevTools};
133
133
  //# sourceMappingURL=index.js.map
@@ -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\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction safeJsonStringify(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return \"[Unserializable]\";\n }\n}\n\nexport class BitFormDevToolsUI {\n private container: HTMLElement;\n private actions: DevToolsActions;\n private rootElement: HTMLDivElement;\n private currentStoresState: DevToolsStoreSnapshots = {};\n private isOpen = false;\n\n constructor(container: HTMLElement, actions: DevToolsActions) {\n this.container = container;\n this.actions = actions;\n\n if (!document.getElementById(\"bit-devtools-styles\")) {\n const style = document.createElement(\"style\");\n style.id = \"bit-devtools-styles\";\n style.textContent = getDevToolsCSS();\n document.head.appendChild(style);\n }\n\n this.rootElement = document.createElement(\"div\");\n this.rootElement.className = \"bit-devtools-container\";\n this.container.appendChild(this.rootElement);\n\n this.rootElement.addEventListener(\"click\", (e) => {\n const target = e.target as HTMLElement;\n\n // Evento do botão flutuante\n if (target.closest(\".bit-devtools-trigger\")) {\n this.isOpen = !this.isOpen;\n this.render();\n return;\n }\n\n // Eventos dos botões de ação\n const btn = target.closest(\".bit-action-btn\");\n if (btn && !btn.hasAttribute(\"disabled\")) {\n const action = btn.getAttribute(\"data-action\");\n const storeId = btn.getAttribute(\"data-store\");\n\n if (action && storeId) {\n if (action === \"undo\") this.actions.onUndo(storeId);\n if (action === \"redo\") this.actions.onRedo(storeId);\n if (action === \"reset\") this.actions.onReset(storeId);\n }\n }\n });\n }\n\n public updateState(storesState: DevToolsStoreSnapshots) {\n this.currentStoresState = storesState;\n this.render();\n }\n\n private render() {\n const storeEntries = Object.entries(this.currentStoresState);\n if (storeEntries.length === 0) {\n this.rootElement.innerHTML = \"\";\n return;\n }\n\n let panelHtml = \"\";\n\n if (this.isOpen) {\n panelHtml = `\n <div class=\"bit-devtools-panel\">\n <div class=\"bit-devtools-header\">\n <h2><span style=\"font-size: 20px;\">🛠</span> Bit-Form DevTools</h2>\n <span style=\"font-size: 11px; color: #64748b;\">v1.0.0</span>\n </div>\n `;\n\n for (const [id, state] of storeEntries) {\n const hasErrors = Object.keys(state.errors || {}).length > 0;\n\n // Lemos os metadados do histórico que o adaptador injetou\n const meta = state._meta || {\n totalSteps: 0,\n currentIndex: -1,\n canUndo: false,\n canRedo: false,\n };\n const currentStep = meta.currentIndex + 1;\n const totalSteps = meta.totalSteps;\n\n panelHtml += `\n <div class=\"bit-store-block\">\n <div class=\"bit-store-header\">\n <h3 class=\"bit-store-title\">${escapeHtml(id)}</h3>\n <div class=\"bit-badge-group\">\n <span class=\"bit-badge ${state.isValid ? \"badge-success\" : \"badge-error\"}\">\n ${state.isValid ? \"✓ Valid\" : \"✕ Invalid\"}\n </span>\n ${state.isDirty ? `<span class=\"bit-badge badge-warn\">Dirty</span>` : \"\"}\n ${state.isSubmitting ? `<span class=\"bit-badge badge-info\">⏳ Submitting</span>` : \"\"}\n </div>\n </div>\n\n <span class=\"bit-section-title\">Time Travel (${currentStep}/${totalSteps})</span>\n \n <div class=\"bit-controls\">\n <button class=\"bit-action-btn\" data-action=\"undo\" data-store=\"${escapeHtml(id)}\" ${meta.canUndo ? \"\" : \"disabled\"}>\n <span>↺</span> Undo\n </button>\n <button class=\"bit-action-btn\" data-action=\"redo\" data-store=\"${escapeHtml(id)}\" ${meta.canRedo ? \"\" : \"disabled\"}>\n <span>↻</span> Redo\n </button>\n <button class=\"bit-action-btn bit-btn-reset\" data-action=\"reset\" data-store=\"${escapeHtml(id)}\">\n <span>🗑</span> Reset\n </button>\n </div>\n `;\n\n if (hasErrors) {\n panelHtml += `\n <span class=\"bit-section-title\" style=\"color: #f87171;\">⚠️ Validations Failing</span>\n <pre class=\"bit-error-box\">${safeJsonStringify(state.errors)}</pre>\n `;\n }\n\n panelHtml += `\n <span class=\"bit-section-title\">Values</span>\n <pre class=\"bit-pre\">${safeJsonStringify(state.values)}</pre>\n </div>\n `;\n }\n\n panelHtml += `</div>`;\n }\n\n // Botão Flutuante (sempre renderizado)\n const triggerHtml = `\n <button class=\"bit-devtools-trigger\" style=\"transform: ${this.isOpen ? \"scale(0.9)\" : \"scale(1)\"};\" title=\"Abrir DevTools\">\n ${this.isOpen ? \"✖\" : \"Bit\"}\n </button>\n `;\n\n this.rootElement.innerHTML = panelHtml + triggerHtml;\n }\n}\n","import { bitBus } from \"../../core\";\nimport type { BitBus } from \"../../core\";\nimport { BitFormDevToolsUI } from \"../ui\";\nimport { createDevToolsSnapshotMap } from \"../store-snapshot\";\nimport { getDevToolsActionableStore } from \"../store-port\";\n\nexport function setupLocalDevTools(\n container: HTMLElement,\n bus: BitBus = bitBus,\n) {\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => getDevToolsActionableStore(bus.stores, id)?.undo(),\n onRedo: (id) => getDevToolsActionableStore(bus.stores, id)?.redo(),\n onReset: (id) => getDevToolsActionableStore(bus.stores, id)?.reset(),\n });\n\n const getFullSnapshot = () => createDevToolsSnapshotMap(bus.stores);\n\n ui.updateState(getFullSnapshot());\n\n let rafId: number | undefined;\n const unsubscribe = bus.subscribe(() => {\n if (rafId !== undefined) return;\n rafId = requestAnimationFrame(() => {\n rafId = undefined;\n ui.updateState(getFullSnapshot());\n });\n });\n\n return {\n ui,\n destroy: () => {\n if (rafId !== undefined) cancelAnimationFrame(rafId);\n unsubscribe();\n container.innerHTML = \"\";\n },\n };\n}\n","import { BitFormDevToolsUI } from \"../ui\";\nimport type { BitBus } from \"../../core\";\nimport type {\n DevToolsHelloMessage,\n DevToolsActionMessage,\n DevToolsActionName,\n DevToolsRemoteMessage,\n} from \"../types\";\nimport {\n DEVTOOLS_PROTOCOL_VERSION,\n isDevToolsStateUpdateMessage,\n} from \"../protocol\";\n\nexport function setupRemoteDevTools(\n container: HTMLElement,\n url: string = \"ws://localhost:3000\",\n _bus?: BitBus,\n) {\n let socket: WebSocket;\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 let destroyed = false;\n let reconnectTimer: ReturnType<typeof setTimeout> | undefined;\n\n function attachListeners() {\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 socket.addEventListener(\"close\", () => {\n if (destroyed) return;\n console.log(\"[bit-form] Conexão DevTools remota fechada. Reconectando em 5s...\");\n reconnectTimer = setTimeout(() => {\n if (destroyed) return;\n connect();\n }, 5000);\n });\n }\n\n function connect() {\n socket = new WebSocket(url);\n attachListeners();\n }\n\n connect();\n\n return {\n ui,\n destroy: () => {\n destroyed = true;\n if (reconnectTimer) {\n clearTimeout(reconnectTimer);\n reconnectTimer = undefined;\n }\n if (\n socket.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\nfunction isProductionEnv(): boolean {\n if (\n typeof process !== \"undefined\" &&\n typeof process.env !== \"undefined\" &&\n process.env.NODE_ENV === \"production\"\n ) {\n return true;\n }\n\n if (\n typeof process !== \"undefined\" &&\n typeof process.env !== \"undefined\" &&\n process.env.VITEST === \"true\"\n ) {\n return false;\n }\n\n return false;\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 if (isProductionEnv() && override !== true) {\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","escapeHtml","str","safeJsonStringify","value","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","rafId","unsubscribe","setupRemoteDevTools","container","url","_bus","socket","sendMessage","message","sendAction","storeId","action","ui","BitFormDevToolsUI","id","destroyed","reconnectTimer","attachListeners","msg","data","isDevToolsStateUpdateMessage","e","err","connect","initDevTools","options","mode","url","bus","containerEl","isAutoCreated","el","adapterInstance","setupLocalDevTools","setupRemoteDevTools","resolveDevToolsOptions","devTools","isProductionEnv","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\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction safeJsonStringify(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return \"[Unserializable]\";\n }\n}\n\nexport class BitFormDevToolsUI {\n private container: HTMLElement;\n private actions: DevToolsActions;\n private rootElement: HTMLDivElement;\n private currentStoresState: DevToolsStoreSnapshots = {};\n private isOpen = false;\n\n constructor(container: HTMLElement, actions: DevToolsActions) {\n this.container = container;\n this.actions = actions;\n\n if (!document.getElementById(\"bit-devtools-styles\")) {\n const style = document.createElement(\"style\");\n style.id = \"bit-devtools-styles\";\n style.textContent = getDevToolsCSS();\n document.head.appendChild(style);\n }\n\n this.rootElement = document.createElement(\"div\");\n this.rootElement.className = \"bit-devtools-container\";\n this.container.appendChild(this.rootElement);\n\n this.rootElement.addEventListener(\"click\", (e) => {\n const target = e.target as HTMLElement;\n\n // Evento do botão flutuante\n if (target.closest(\".bit-devtools-trigger\")) {\n this.isOpen = !this.isOpen;\n this.render();\n return;\n }\n\n // Eventos dos botões de ação\n const btn = target.closest(\".bit-action-btn\");\n if (btn && !btn.hasAttribute(\"disabled\")) {\n const action = btn.getAttribute(\"data-action\");\n const storeId = btn.getAttribute(\"data-store\");\n\n if (action && storeId) {\n if (action === \"undo\") this.actions.onUndo(storeId);\n if (action === \"redo\") this.actions.onRedo(storeId);\n if (action === \"reset\") this.actions.onReset(storeId);\n }\n }\n });\n }\n\n public updateState(storesState: DevToolsStoreSnapshots) {\n this.currentStoresState = storesState;\n this.render();\n }\n\n private render() {\n const storeEntries = Object.entries(this.currentStoresState);\n if (storeEntries.length === 0) {\n this.rootElement.innerHTML = \"\";\n return;\n }\n\n let panelHtml = \"\";\n\n if (this.isOpen) {\n panelHtml = `\n <div class=\"bit-devtools-panel\">\n <div class=\"bit-devtools-header\">\n <h2><span style=\"font-size: 20px;\">🛠</span> Bit-Form DevTools</h2>\n <span style=\"font-size: 11px; color: #64748b;\">v1.0.0</span>\n </div>\n `;\n\n for (const [id, state] of storeEntries) {\n const hasErrors = Object.keys(state.errors || {}).length > 0;\n\n // Lemos os metadados do histórico que o adaptador injetou\n const meta = state._meta || {\n totalSteps: 0,\n currentIndex: -1,\n canUndo: false,\n canRedo: false,\n };\n const currentStep = meta.currentIndex + 1;\n const totalSteps = meta.totalSteps;\n\n panelHtml += `\n <div class=\"bit-store-block\">\n <div class=\"bit-store-header\">\n <h3 class=\"bit-store-title\">${escapeHtml(id)}</h3>\n <div class=\"bit-badge-group\">\n <span class=\"bit-badge ${state.isValid ? \"badge-success\" : \"badge-error\"}\">\n ${state.isValid ? \"✓ Valid\" : \"✕ Invalid\"}\n </span>\n ${state.isDirty ? `<span class=\"bit-badge badge-warn\">Dirty</span>` : \"\"}\n ${state.isSubmitting ? `<span class=\"bit-badge badge-info\">⏳ Submitting</span>` : \"\"}\n </div>\n </div>\n\n <span class=\"bit-section-title\">Time Travel (${currentStep}/${totalSteps})</span>\n \n <div class=\"bit-controls\">\n <button class=\"bit-action-btn\" data-action=\"undo\" data-store=\"${escapeHtml(id)}\" ${meta.canUndo ? \"\" : \"disabled\"}>\n <span>↺</span> Undo\n </button>\n <button class=\"bit-action-btn\" data-action=\"redo\" data-store=\"${escapeHtml(id)}\" ${meta.canRedo ? \"\" : \"disabled\"}>\n <span>↻</span> Redo\n </button>\n <button class=\"bit-action-btn bit-btn-reset\" data-action=\"reset\" data-store=\"${escapeHtml(id)}\">\n <span>🗑</span> Reset\n </button>\n </div>\n `;\n\n if (hasErrors) {\n panelHtml += `\n <span class=\"bit-section-title\" style=\"color: #f87171;\">⚠️ Validations Failing</span>\n <pre class=\"bit-error-box\">${safeJsonStringify(state.errors)}</pre>\n `;\n }\n\n panelHtml += `\n <span class=\"bit-section-title\">Values</span>\n <pre class=\"bit-pre\">${safeJsonStringify(state.values)}</pre>\n </div>\n `;\n }\n\n panelHtml += `</div>`;\n }\n\n // Botão Flutuante (sempre renderizado)\n const triggerHtml = `\n <button class=\"bit-devtools-trigger\" style=\"transform: ${this.isOpen ? \"scale(0.9)\" : \"scale(1)\"};\" title=\"Abrir DevTools\">\n ${this.isOpen ? \"✖\" : \"Bit\"}\n </button>\n `;\n\n this.rootElement.innerHTML = panelHtml + triggerHtml;\n }\n}\n","import { bitBus } from \"../../core\";\nimport type { BitBus } from \"../../core\";\nimport { BitFormDevToolsUI } from \"../ui\";\nimport { createDevToolsSnapshotMap } from \"../store-snapshot\";\nimport { getDevToolsActionableStore } from \"../store-port\";\n\nexport function setupLocalDevTools(\n container: HTMLElement,\n bus: BitBus = bitBus,\n) {\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => getDevToolsActionableStore(bus.stores, id)?.undo(),\n onRedo: (id) => getDevToolsActionableStore(bus.stores, id)?.redo(),\n onReset: (id) => getDevToolsActionableStore(bus.stores, id)?.reset(),\n });\n\n const getFullSnapshot = () => createDevToolsSnapshotMap(bus.stores);\n\n ui.updateState(getFullSnapshot());\n\n let rafId: number | undefined;\n const unsubscribe = bus.subscribe(() => {\n if (rafId !== undefined) return;\n rafId = requestAnimationFrame(() => {\n rafId = undefined;\n ui.updateState(getFullSnapshot());\n });\n });\n\n return {\n ui,\n destroy: () => {\n if (rafId !== undefined) cancelAnimationFrame(rafId);\n unsubscribe();\n container.innerHTML = \"\";\n },\n };\n}\n","import { BitFormDevToolsUI } from \"../ui\";\nimport type { BitBus } from \"../../core\";\nimport type {\n DevToolsHelloMessage,\n DevToolsActionMessage,\n DevToolsActionName,\n DevToolsRemoteMessage,\n} from \"../types\";\nimport {\n DEVTOOLS_PROTOCOL_VERSION,\n isDevToolsStateUpdateMessage,\n} from \"../protocol\";\n\nexport function setupRemoteDevTools(\n container: HTMLElement,\n url: string = \"ws://localhost:3000\",\n _bus?: BitBus,\n) {\n let socket: WebSocket | null = null;\n\n const sendMessage = (message: DevToolsRemoteMessage) => {\n if (socket?.readyState === WebSocket.OPEN) {\n try {\n socket.send(JSON.stringify(message));\n } catch (e) {\n console.warn(\"[bit-form] Failed to send message:\", e);\n }\n } else {\n console.warn(\n \"[bit-form] Tentativa de envio falhou. WebSocket não está aberto.\",\n );\n }\n };\n\n const sendAction = (storeId: string, action: DevToolsActionName) => {\n const message: DevToolsActionMessage = {\n type: \"ACTION\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload: { storeId, action },\n };\n sendMessage(message);\n };\n\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => sendAction(id, \"undo\"),\n onRedo: (id) => sendAction(id, \"redo\"),\n onReset: (id) => sendAction(id, \"reset\"),\n });\n\n let destroyed = false;\n let reconnectTimer: ReturnType<typeof setTimeout> | undefined;\n let retries = 0;\n const MAX_RETRY_DELAY = 30000;\n\n function attachListeners() {\n if (!socket) return;\n\n socket.addEventListener(\"open\", () => {\n retries = 0;\n const helloMessage: DevToolsHelloMessage = {\n type: \"HELLO\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload: { role: \"client\", protocolVersion: DEVTOOLS_PROTOCOL_VERSION },\n };\n\n sendMessage(helloMessage);\n console.log(`[bit-form] Conectado ao DevTools remoto em ${url}`);\n });\n\n socket.addEventListener(\"message\", (msg: MessageEvent) => {\n try {\n const data = JSON.parse(msg.data) as DevToolsRemoteMessage;\n if (isDevToolsStateUpdateMessage(data)) {\n ui.updateState(data.payload);\n }\n } catch (e) {\n console.error(\"[bit-form] Erro ao processar mensagem do WebSocket:\", e);\n }\n });\n\n socket.addEventListener(\"error\", (err) => {\n console.error(\"[bit-form] Erro na conexão do DevTools remoto:\", err);\n });\n\n socket.addEventListener(\"close\", () => {\n if (destroyed) return;\n console.log(\"[bit-form] Conexão DevTools remota fechada. Reconectando...\");\n const delay = Math.min(1000 * Math.pow(2, retries), MAX_RETRY_DELAY);\n const jitter = delay * (0.5 + Math.random() * 0.5);\n retries++;\n reconnectTimer = setTimeout(() => {\n if (destroyed) return;\n connect();\n }, jitter);\n });\n }\n\n function connect() {\n if (socket) {\n socket.onopen = null;\n socket.onmessage = null;\n socket.onerror = null;\n socket.onclose = null;\n if (socket.readyState === WebSocket.OPEN || socket.readyState === WebSocket.CONNECTING) {\n socket.close();\n }\n }\n try {\n socket = new WebSocket(url);\n } catch (e) {\n console.error(\"[bit-form] Failed to create WebSocket for remote devtools:\", e);\n const delay = Math.min(1000 * Math.pow(2, retries), MAX_RETRY_DELAY);\n const jitter = delay * (0.5 + Math.random() * 0.5);\n retries++;\n if (!destroyed) {\n reconnectTimer = setTimeout(() => {\n if (destroyed) return;\n connect();\n }, jitter);\n }\n return;\n }\n attachListeners();\n }\n\n connect();\n\n return {\n ui,\n destroy: () => {\n destroyed = true;\n if (reconnectTimer) {\n clearTimeout(reconnectTimer);\n reconnectTimer = undefined;\n }\n if (\n socket &&\n (socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING)\n ) {\n socket.close();\n }\n container.innerHTML = \"\";\n },\n };\n}\n","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\nfunction isProductionEnv(): boolean {\n if (\n typeof process !== \"undefined\" &&\n typeof process.env !== \"undefined\" &&\n process.env.NODE_ENV === \"production\"\n ) {\n return true;\n }\n\n if (\n typeof process !== \"undefined\" &&\n typeof process.env !== \"undefined\" &&\n process.env.VITEST === \"true\"\n ) {\n return false;\n }\n\n return false;\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 if (isProductionEnv() && override !== true) {\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","escapeHtml","str","safeJsonStringify","value","BitFormDevToolsUI","container","actions","style","getDevToolsCSS","target","btn","action","storeId","storesState","storeEntries","panelHtml","id","state","hasErrors","meta","currentStep","totalSteps","triggerHtml","setupLocalDevTools","container","bus","bitBus","ui","BitFormDevToolsUI","id","getDevToolsActionableStore","getFullSnapshot","createDevToolsSnapshotMap","rafId","unsubscribe","setupRemoteDevTools","container","url","_bus","socket","sendMessage","message","e","sendAction","storeId","action","ui","BitFormDevToolsUI","id","destroyed","reconnectTimer","retries","MAX_RETRY_DELAY","attachListeners","msg","data","isDevToolsStateUpdateMessage","err","jitter","connect","initDevTools","options","mode","url","bus","containerEl","isAutoCreated","el","adapterInstance","setupLocalDevTools","setupRemoteDevTools","resolveDevToolsOptions","devTools","isProductionEnv","createDevToolsPlugin","override","context","options","cleanup","bus","setupRemoteBridge","instance","initDevTools"]}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-W5CLDRRE.cjs');var _chunkPDFT5E2Ecjs = require('./chunk-PDFT5E2E.cjs');require('./chunk-AOMXTUA4.cjs');require('./chunk-BSGJ3T5S.cjs');require('./chunk-RHMJPKNV.cjs');require('./chunk-H6HGYVRV.cjs');require('./chunk-7LCFS2JM.cjs');require('./chunk-3SEB4YRQ.cjs');require('./chunk-X3DGA5UC.cjs');require('./chunk-725CMNAV.cjs');exports.createBitStore = _chunkPDFT5E2Ecjs.e; exports.createFrameworkStoreAdapter = _chunkPDFT5E2Ecjs.d; exports.resolveBitStoreForHooks = _chunkPDFT5E2Ecjs.c;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-W5CLDRRE.cjs');var _chunkU6UFULNScjs = require('./chunk-U6UFULNS.cjs');require('./chunk-H27ROY4F.cjs');require('./chunk-BSGJ3T5S.cjs');require('./chunk-RHMJPKNV.cjs');require('./chunk-H6HGYVRV.cjs');require('./chunk-AV7YYSFI.cjs');require('./chunk-OWDDAM6C.cjs');require('./chunk-X3DGA5UC.cjs');require('./chunk-725CMNAV.cjs');exports.createBitStore = _chunkU6UFULNScjs.e; exports.createFrameworkStoreAdapter = _chunkU6UFULNScjs.d; exports.resolveBitStoreForHooks = _chunkU6UFULNScjs.c;
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import"./chunk-5NA2TFPG.js";import{c as r,d as t,e}from"./chunk-PRMNTQD5.js";import"./chunk-XPY6TCOO.js";import"./chunk-W2E5UIXT.js";import"./chunk-UIKO6GGW.js";import"./chunk-L57KMBXS.js";import"./chunk-X3OFU2UH.js";import"./chunk-JVRTPL7W.js";import"./chunk-MBEQLBJB.js";import"./chunk-DGEGYNQL.js";export{e as createBitStore,t as createFrameworkStoreAdapter,r as resolveBitStoreForHooks};
1
+ import"./chunk-5NA2TFPG.js";import{c as r,d as t,e}from"./chunk-7T7L2TZX.js";import"./chunk-L42NQRVD.js";import"./chunk-W2E5UIXT.js";import"./chunk-UIKO6GGW.js";import"./chunk-L57KMBXS.js";import"./chunk-Y7TQTZY7.js";import"./chunk-UBVVBVLS.js";import"./chunk-MBEQLBJB.js";import"./chunk-DGEGYNQL.js";export{e as createBitStore,t as createFrameworkStoreAdapter,r as resolveBitStoreForHooks};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkT36GFQHUcjs = require('../chunk-T36GFQHU.cjs');var _chunkH3RTOA6Xcjs = require('../chunk-H3RTOA6X.cjs');require('../chunk-W5CLDRRE.cjs');require('../chunk-PDFT5E2E.cjs');var _chunkAOMXTUA4cjs = require('../chunk-AOMXTUA4.cjs');require('../chunk-BSGJ3T5S.cjs');var _chunkRHMJPKNVcjs = require('../chunk-RHMJPKNV.cjs');var _chunkH6HGYVRVcjs = require('../chunk-H6HGYVRV.cjs');require('../chunk-7LCFS2JM.cjs');require('../chunk-3SEB4YRQ.cjs');require('../chunk-X3DGA5UC.cjs');var _chunk725CMNAVcjs = require('../chunk-725CMNAV.cjs');var _react = require('react');function V(t){let{fieldState:r,setBlur:i,store:l}=_chunkT36GFQHUcjs.d.call(void 0, t),{fieldController:u}=_react.useMemo.call(void 0, ()=>_chunkAOMXTUA4cjs.h.call(void 0, l,t),[l,t]),a=_react.useMemo.call(void 0, ()=>u.displayValue(r.value),[r.value,u]),n=_react.useCallback.call(void 0, F=>{u.setValue(F)},[u]),{value:o}=r,b=_chunkH6HGYVRVcjs.a.call(void 0, r),{error:m,touched:B,invalid:f,isDirty:y,isValidating:U,isHidden:s,isRequired:d,hasError:g}=b,p=_react.useCallback.call(void 0, F=>{let K=_chunk725CMNAVcjs.a.call(void 0, F)?_optionalChain([F, 'access', _ => _.target, 'optionalAccess', _2 => _2.value]):F;n(K)},[n]),e=_react.useCallback.call(void 0, ()=>{i()},[i]),c=_react.useMemo.call(void 0, ()=>({value:a,onChange:p,onBlur:e}),[a,p,e]),h=_react.useMemo.call(void 0, ()=>({error:m,touched:B,invalid:f,isDirty:y,isValidating:U,isHidden:s,isRequired:d,hasError:g}),[m,B,f,y,U,s,d,g]);return _react.useMemo.call(void 0, ()=>({value:o,displayValue:a,setValue:n,setBlur:i,onChange:p,onBlur:e,props:c,meta:h}),[o,a,n,i,p,e,c,h])}function N(){let t=_chunkT36GFQHUcjs.b.call(void 0, ),r=_react.useRef.call(void 0, null),i=_react.useCallback.call(void 0, ()=>{let o=_chunkRHMJPKNVcjs.f.call(void 0, t);return r.current&&r.current.canUndo===o.canUndo&&r.current.canRedo===o.canRedo&&r.current.historyIndex===o.historyIndex&&r.current.historySize===o.historySize?r.current:(r.current=o,o)},[t]),l=_react.useCallback.call(void 0, o=>t.observe.subscribeHistoryMeta(()=>o()),[t]),u=_react.useSyncExternalStore.call(void 0, l,i,i),a=_react.useCallback.call(void 0, ()=>{t.feature.undo()},[t]),n=_react.useCallback.call(void 0, ()=>{t.feature.redo()},[t]);return _react.useMemo.call(void 0, ()=>({...u,undo:a,redo:n}),[u,a,n])}function Y(t,r,i){let l=_chunkT36GFQHUcjs.b.call(void 0, ),u=V(t),{value:a,setValue:n,meta:o}=u,b=_optionalChain([o, 'optionalAccess', _3 => _3.error]),m=!!_optionalChain([o, 'optionalAccess', _4 => _4.isValidating]),B=_react.useRef.call(void 0, null),[f,y]=_react.useState.call(void 0, !1),U=_react.useRef.call(void 0, {current:0}).current,s=_react.useRef.call(void 0, {setLoading:y,setError:(e,c)=>l.write.setError(e,c),setValue:e=>n(e),getUploadKey:()=>B.current,setUploadKey:e=>{B.current=e},onCallbackError:e=>l.read.config.onUnhandledError(e,"upload")});_react.useEffect.call(void 0, ()=>{s.current.setLoading=y,s.current.setError=(e,c)=>l.write.setError(e,c),s.current.setValue=e=>n(e),s.current.onCallbackError=e=>l.read.config.onUnhandledError(e,"upload")});let d=_react.useMemo.call(void 0, ()=>({setLoading:e=>s.current.setLoading(e),setError:(e,c)=>s.current.setError(e,c),setValue:e=>s.current.setValue(e),getUploadKey:()=>s.current.getUploadKey(),setUploadKey:e=>s.current.setUploadKey(e),onCallbackError:e=>_optionalChain([s, 'access', _5 => _5.current, 'access', _6 => _6.onCallbackError, 'optionalCall', _7 => _7(e)])}),[]),g=_react.useMemo.call(void 0, ()=>_chunkH3RTOA6Xcjs.a.call(void 0, t,r,d,U),[t,r,d]),p=_react.useMemo.call(void 0, ()=>_chunkH3RTOA6Xcjs.b.call(void 0, t,i,d,U),[t,i,d]);return _react.useMemo.call(void 0, ()=>({value:a,setValue:n,error:b,isValidating:m||f,upload:g,remove:p}),[a,n,b,m,f,g,p])}exports.BitFormProvider = _chunkT36GFQHUcjs.a; exports.useBitArray = _chunkT36GFQHUcjs.e; exports.useBitField = V; exports.useBitForm = _chunkT36GFQHUcjs.c; exports.useBitHistory = N; exports.useBitPersist = _chunkT36GFQHUcjs.i; exports.useBitScope = _chunkT36GFQHUcjs.f; exports.useBitSteps = _chunkT36GFQHUcjs.g; exports.useBitStore = _chunkT36GFQHUcjs.b; exports.useBitUpload = Y; exports.useBitWatch = _chunkT36GFQHUcjs.h;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkWKLCAC74cjs = require('../chunk-WKLCAC74.cjs');var _chunkH3RTOA6Xcjs = require('../chunk-H3RTOA6X.cjs');require('../chunk-W5CLDRRE.cjs');require('../chunk-U6UFULNS.cjs');var _chunkH27ROY4Fcjs = require('../chunk-H27ROY4F.cjs');require('../chunk-BSGJ3T5S.cjs');var _chunkRHMJPKNVcjs = require('../chunk-RHMJPKNV.cjs');var _chunkH6HGYVRVcjs = require('../chunk-H6HGYVRV.cjs');require('../chunk-AV7YYSFI.cjs');require('../chunk-OWDDAM6C.cjs');require('../chunk-X3DGA5UC.cjs');var _chunk725CMNAVcjs = require('../chunk-725CMNAV.cjs');var _react = require('react');function V(t){let{fieldState:r,setBlur:i,store:u}=_chunkWKLCAC74cjs.d.call(void 0, t),{fieldController:l}=_react.useMemo.call(void 0, ()=>_chunkH27ROY4Fcjs.h.call(void 0, u,t),[u,t]),a=_react.useMemo.call(void 0, ()=>l.displayValue(r.value),[r.value,l]),n=_react.useCallback.call(void 0, F=>{l.setValue(F)},[l]),{value:s}=r,b=_chunkH6HGYVRVcjs.a.call(void 0, r),{error:f,touched:c,invalid:y,isDirty:U,isValidating:B,isHidden:o,isRequired:p,hasError:g}=b,m=_react.useCallback.call(void 0, F=>{let L=_chunk725CMNAVcjs.a.call(void 0, F)?_optionalChain([F, 'access', _ => _.target, 'optionalAccess', _2 => _2.value]):F;n(L)},[n]),e=_react.useCallback.call(void 0, ()=>{i()},[i]),d=_react.useMemo.call(void 0, ()=>({value:a,onChange:m,onBlur:e}),[a,m,e]),h=_react.useMemo.call(void 0, ()=>({error:f,touched:c,invalid:y,isDirty:U,isValidating:B,isHidden:o,isRequired:p,hasError:g}),[f,c,y,U,B,o,p,g]);return _react.useMemo.call(void 0, ()=>({value:s,displayValue:a,setValue:n,setBlur:i,onChange:m,onBlur:e,props:d,meta:h}),[s,a,n,i,m,e,d,h])}function Q(){let t=_chunkWKLCAC74cjs.b.call(void 0, ),r=_react.useRef.call(void 0, null),i=_react.useCallback.call(void 0, ()=>{let s=_chunkRHMJPKNVcjs.f.call(void 0, t);return r.current&&r.current.canUndo===s.canUndo&&r.current.canRedo===s.canRedo&&r.current.historyIndex===s.historyIndex&&r.current.historySize===s.historySize?r.current:(r.current=s,s)},[t]),u=_react.useCallback.call(void 0, s=>t.observe.subscribeHistoryMeta(()=>s()),[t]),l=_react.useSyncExternalStore.call(void 0, u,i,i),a=_react.useCallback.call(void 0, ()=>{t.feature.undo()},[t]),n=_react.useCallback.call(void 0, ()=>{t.feature.redo()},[t]);return _react.useMemo.call(void 0, ()=>({...l,undo:a,redo:n}),[l,a,n])}function Y(t,r,i){let u=_chunkWKLCAC74cjs.b.call(void 0, ),l=V(t),{value:a,setValue:n,meta:s}=l,b=_optionalChain([s, 'optionalAccess', _3 => _3.error]),f=!!_optionalChain([s, 'optionalAccess', _4 => _4.isValidating]),c=_react.useRef.call(void 0, null),[y,U]=_react.useState.call(void 0, !1),B=_react.useRef.call(void 0, {current:0}).current;_react.useEffect.call(void 0, ()=>()=>{B.current++,c.current=null},[]);let o=_react.useRef.call(void 0, {setLoading:U,setError:(e,d)=>u.write.setError(e,d),setValue:e=>n(e),getUploadKey:()=>c.current,setUploadKey:e=>{c.current=e},onCallbackError:e=>u.read.config.onUnhandledError(e,"upload")});_react.useEffect.call(void 0, ()=>{o.current.setLoading=U,o.current.setError=(e,d)=>u.write.setError(e,d),o.current.setValue=e=>n(e),o.current.getUploadKey=()=>c.current,o.current.setUploadKey=e=>{c.current=e},o.current.onCallbackError=e=>u.read.config.onUnhandledError(e,"upload")});let p=_react.useMemo.call(void 0, ()=>({setLoading:e=>o.current.setLoading(e),setError:(e,d)=>o.current.setError(e,d),setValue:e=>o.current.setValue(e),getUploadKey:()=>o.current.getUploadKey(),setUploadKey:e=>o.current.setUploadKey(e),onCallbackError:e=>_optionalChain([o, 'access', _5 => _5.current, 'access', _6 => _6.onCallbackError, 'optionalCall', _7 => _7(e)])}),[]),g=_react.useMemo.call(void 0, ()=>_chunkH3RTOA6Xcjs.a.call(void 0, t,r,p,B),[t,r,p]),m=_react.useMemo.call(void 0, ()=>_chunkH3RTOA6Xcjs.b.call(void 0, t,i,p,B),[t,i,p]);return _react.useMemo.call(void 0, ()=>({value:a,setValue:n,error:b,isValidating:f||y,upload:g,remove:m}),[a,n,b,f,y,g,m])}exports.BitFormProvider = _chunkWKLCAC74cjs.a; exports.useBitArray = _chunkWKLCAC74cjs.e; exports.useBitField = V; exports.useBitForm = _chunkWKLCAC74cjs.c; exports.useBitHistory = Q; exports.useBitPersist = _chunkWKLCAC74cjs.i; exports.useBitScope = _chunkWKLCAC74cjs.f; exports.useBitSteps = _chunkWKLCAC74cjs.g; exports.useBitStore = _chunkWKLCAC74cjs.b; exports.useBitUpload = Y; exports.useBitWatch = _chunkWKLCAC74cjs.h;
2
2
  //# sourceMappingURL=index.cjs.map