@lehnihon/bit-form 2.2.15 → 2.2.17

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 (95) 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 +2 -2
  4. package/dist/angular/index.d.ts +2 -2
  5. package/dist/angular/index.js +1 -1
  6. package/dist/angular/index.js.map +1 -1
  7. package/dist/chunk-254C3DS5.js +2 -0
  8. package/dist/chunk-254C3DS5.js.map +1 -0
  9. package/dist/{chunk-KGI5PU2P.cjs → chunk-4FQRTIYP.cjs} +2 -2
  10. package/dist/{chunk-KGI5PU2P.cjs.map → chunk-4FQRTIYP.cjs.map} +1 -1
  11. package/dist/{chunk-LBISXDNW.js → chunk-HCJTGESK.js} +2 -2
  12. package/dist/chunk-L7RLUUSB.js +2 -0
  13. package/dist/chunk-L7RLUUSB.js.map +1 -0
  14. package/dist/chunk-QCKCONCU.js +2 -0
  15. package/dist/chunk-QCKCONCU.js.map +1 -0
  16. package/dist/chunk-QLF2QLII.cjs +2 -0
  17. package/dist/chunk-QLF2QLII.cjs.map +1 -0
  18. package/dist/chunk-WLOKGOW6.cjs +2 -0
  19. package/dist/chunk-WLOKGOW6.cjs.map +1 -0
  20. package/dist/chunk-WRNR6SXK.cjs +2 -0
  21. package/dist/chunk-WRNR6SXK.cjs.map +1 -0
  22. package/dist/chunk-XRDTN4JG.cjs +2 -0
  23. package/dist/chunk-XRDTN4JG.cjs.map +1 -0
  24. package/dist/chunk-YS4IB2ZO.js +2 -0
  25. package/dist/chunk-YS4IB2ZO.js.map +1 -0
  26. package/dist/{config-types-5eR82k2V.d.cts → config-types-BuN_ezi7.d.cts} +7 -2
  27. package/dist/{config-types-D9n-rQLk.d.ts → config-types-CjyxvUHF.d.ts} +7 -2
  28. package/dist/core/bindings.d.cts +2 -2
  29. package/dist/core/bindings.d.ts +2 -2
  30. package/dist/core/store.cjs +1 -1
  31. package/dist/core/store.cjs.map +1 -1
  32. package/dist/core/store.d.cts +3 -3
  33. package/dist/core/store.d.ts +3 -3
  34. package/dist/core/store.js +1 -1
  35. package/dist/core.cjs +1 -1
  36. package/dist/core.cjs.map +1 -1
  37. package/dist/core.d.cts +2 -2
  38. package/dist/core.d.ts +2 -2
  39. package/dist/core.js +1 -1
  40. package/dist/devtools/bridge.cjs +1 -1
  41. package/dist/devtools/bridge.cjs.map +1 -1
  42. package/dist/devtools/bridge.js +1 -1
  43. package/dist/devtools/index.cjs +2 -2
  44. package/dist/devtools/index.cjs.map +1 -1
  45. package/dist/devtools/index.d.cts +1 -1
  46. package/dist/devtools/index.d.ts +1 -1
  47. package/dist/devtools/index.js +1 -1
  48. package/dist/devtools/index.js.map +1 -1
  49. package/dist/index.cjs +1 -1
  50. package/dist/index.cjs.map +1 -1
  51. package/dist/index.d.cts +2 -2
  52. package/dist/index.d.ts +2 -2
  53. package/dist/index.js +1 -1
  54. package/dist/mask.cjs +1 -1
  55. package/dist/mask.cjs.map +1 -1
  56. package/dist/mask.d.cts +3 -3
  57. package/dist/mask.d.ts +3 -3
  58. package/dist/mask.js +1 -1
  59. package/dist/mask.js.map +1 -1
  60. package/dist/react/index.cjs +1 -1
  61. package/dist/react/index.cjs.map +1 -1
  62. package/dist/react/index.d.cts +4 -5
  63. package/dist/react/index.d.ts +4 -5
  64. package/dist/react/index.js +1 -1
  65. package/dist/react/index.js.map +1 -1
  66. package/dist/react-native/index.cjs +1 -1
  67. package/dist/react-native/index.cjs.map +1 -1
  68. package/dist/react-native/index.d.cts +3 -4
  69. package/dist/react-native/index.d.ts +3 -4
  70. package/dist/react-native/index.js +1 -1
  71. package/dist/react-native/index.js.map +1 -1
  72. package/dist/{store-api-types-Bozwlwyb.d.ts → store-api-types-CNBOPbCQ.d.ts} +2 -2
  73. package/dist/{store-api-types-DSgYwMS3.d.cts → store-api-types-C_K952Z3.d.cts} +2 -2
  74. package/dist/{use-bit-persist-Bd1H2fge.d.ts → use-bit-persist-BCc0wJNn.d.ts} +13 -5
  75. package/dist/{use-bit-persist-DDxV21AN.d.cts → use-bit-persist-DwRcnawp.d.cts} +13 -5
  76. package/dist/vue/index.cjs +1 -1
  77. package/dist/vue/index.cjs.map +1 -1
  78. package/dist/vue/index.d.cts +2 -2
  79. package/dist/vue/index.d.ts +2 -2
  80. package/dist/vue/index.js +1 -1
  81. package/dist/vue/index.js.map +1 -1
  82. package/package.json +1 -1
  83. package/dist/chunk-4EMYM7JF.cjs +0 -2
  84. package/dist/chunk-4EMYM7JF.cjs.map +0 -1
  85. package/dist/chunk-CIZ6UW2J.cjs +0 -2
  86. package/dist/chunk-CIZ6UW2J.cjs.map +0 -1
  87. package/dist/chunk-IB2BMG4F.cjs +0 -2
  88. package/dist/chunk-IB2BMG4F.cjs.map +0 -1
  89. package/dist/chunk-KMOB6DB6.js +0 -2
  90. package/dist/chunk-KMOB6DB6.js.map +0 -1
  91. package/dist/chunk-NFKYWPEV.js +0 -2
  92. package/dist/chunk-NFKYWPEV.js.map +0 -1
  93. package/dist/chunk-VSNLUHZQ.js +0 -2
  94. package/dist/chunk-VSNLUHZQ.js.map +0 -1
  95. /package/dist/{chunk-LBISXDNW.js.map → chunk-HCJTGESK.js.map} +0 -0
@@ -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 _chunkQKGTVKBUcjs = require('./chunk-QKGTVKBU.cjs');var _chunkCIZ6UW2Jcjs = require('./chunk-CIZ6UW2J.cjs');function R(e){return{values:e.values,errors:e.errors,touched:e.touched,isValid:e.isValid,isDirty:e.isDirty,isSubmitting:e.isSubmitting,isValidating:e.isValidating,persist:e.persist}}function k(e){let o=e.getHistoryMetadata();return{...R(e.getState()),_meta:{canUndo:o.canUndo,canRedo:o.canRedo,totalSteps:o.historySize,currentIndex:o.historyIndex}}}function b(e){let o={};for(let[t,i]of Object.entries(e))o[t]=k(i);return o}function w(e){if(!e||typeof e!="object")return!1;let o=e;return typeof o.getState=="function"&&typeof o.getHistoryMetadata=="function"}function I(e){if(!w(e))return!1;let o=e;return typeof o.undo=="function"&&typeof o.redo=="function"&&typeof o.reset=="function"}function B(e,o){let t=e[o];return I(t)?t:null}var S=null,O=50;function N(e,o=_chunkCIZ6UW2Jcjs.a){S&&(console.warn("[bit-form] Reiniciando ponte do DevTools (Fast Refresh detectado)."),S());let t=null,i=null,f,n=null,a=new Set,T=!1,u=r=>{_optionalChain([t, 'optionalAccess', _ => _.readyState])===WebSocket.OPEN&&t.send(JSON.stringify(r))},h=()=>{if(a.size===0)return;let r=b(Array.from(a).reduce((s,l)=>{let d=o.stores[l];return d&&(s[l]=d),s},{}));a.clear(),n=null,Object.keys(r).length>0&&u({type:"STATE_UPDATE",protocolVersion:1,payload:r})},D=()=>{n||(n=setTimeout(()=>{h()},O))},y=()=>{T=!1,t=new WebSocket(e),t.onopen=()=>{console.log("[bit-form] \u{1F50C} Conectado ao CLI DevTools via WebSocket."),u({type:"HELLO",protocolVersion:1,payload:{role:"server",protocolVersion:1}});let r=b(o.stores);Object.keys(r).length>0&&u({type:"STATE_UPDATE",protocolVersion:1,payload:r}),i=o.subscribe((s,l)=>{a.add(s),D()}),f=setInterval(()=>{u({type:"PING",protocolVersion:1})},3e4)},t.onmessage=r=>{try{let s=JSON.parse(r.data);if(_chunkQKGTVKBUcjs.c.call(void 0, s)){let{storeId:l,action:d}=s.payload,p=B(o.stores,l);if(!p)return;switch(d){case"undo":p.undo();break;case"redo":p.redo();break;case"reset":p.reset();break}}}catch(s){console.warn("[bit-form] Erro ao processar comando do CLI:",s)}},t.onclose=()=>{i&&i(),clearInterval(f),n&&(clearTimeout(n),n=null),a.clear(),T?console.log("[bit-form] Ponte antiga encerrada com sucesso."):(console.log("[bit-form] Conex\xE3o perdida. Reconectando em 3s..."),setTimeout(y,3e3))}};y();let m=()=>{T=!0,i&&i(),clearInterval(f),n&&(clearTimeout(n),n=null),a.clear(),t&&(t.readyState===WebSocket.OPEN||t.readyState===WebSocket.CONNECTING)&&t.close(),S=null};return S=m,m}exports.a = b; exports.b = B; exports.c = N;
2
- //# sourceMappingURL=chunk-KGI5PU2P.cjs.map
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 _chunkQKGTVKBUcjs = require('./chunk-QKGTVKBU.cjs');var _chunkXRDTN4JGcjs = require('./chunk-XRDTN4JG.cjs');function R(e){return{values:e.values,errors:e.errors,touched:e.touched,isValid:e.isValid,isDirty:e.isDirty,isSubmitting:e.isSubmitting,isValidating:e.isValidating,persist:e.persist}}function k(e){let o=e.getHistoryMetadata();return{...R(e.getState()),_meta:{canUndo:o.canUndo,canRedo:o.canRedo,totalSteps:o.historySize,currentIndex:o.historyIndex}}}function b(e){let o={};for(let[t,i]of Object.entries(e))o[t]=k(i);return o}function w(e){if(!e||typeof e!="object")return!1;let o=e;return typeof o.getState=="function"&&typeof o.getHistoryMetadata=="function"}function I(e){if(!w(e))return!1;let o=e;return typeof o.undo=="function"&&typeof o.redo=="function"&&typeof o.reset=="function"}function B(e,o){let t=e[o];return I(t)?t:null}var S=null,O=50;function N(e,o=_chunkXRDTN4JGcjs.a){S&&(console.warn("[bit-form] Reiniciando ponte do DevTools (Fast Refresh detectado)."),S());let t=null,i=null,f,n=null,a=new Set,T=!1,u=r=>{_optionalChain([t, 'optionalAccess', _ => _.readyState])===WebSocket.OPEN&&t.send(JSON.stringify(r))},h=()=>{if(a.size===0)return;let r=b(Array.from(a).reduce((s,l)=>{let d=o.stores[l];return d&&(s[l]=d),s},{}));a.clear(),n=null,Object.keys(r).length>0&&u({type:"STATE_UPDATE",protocolVersion:1,payload:r})},D=()=>{n||(n=setTimeout(()=>{h()},O))},y=()=>{T=!1,t=new WebSocket(e),t.onopen=()=>{console.log("[bit-form] \u{1F50C} Conectado ao CLI DevTools via WebSocket."),u({type:"HELLO",protocolVersion:1,payload:{role:"server",protocolVersion:1}});let r=b(o.stores);Object.keys(r).length>0&&u({type:"STATE_UPDATE",protocolVersion:1,payload:r}),i=o.subscribe((s,l)=>{a.add(s),D()}),f=setInterval(()=>{u({type:"PING",protocolVersion:1})},3e4)},t.onmessage=r=>{try{let s=JSON.parse(r.data);if(_chunkQKGTVKBUcjs.c.call(void 0, s)){let{storeId:l,action:d}=s.payload,p=B(o.stores,l);if(!p)return;switch(d){case"undo":p.undo();break;case"redo":p.redo();break;case"reset":p.reset();break}}}catch(s){console.warn("[bit-form] Erro ao processar comando do CLI:",s)}},t.onclose=()=>{i&&i(),clearInterval(f),n&&(clearTimeout(n),n=null),a.clear(),T?console.log("[bit-form] Ponte antiga encerrada com sucesso."):(console.log("[bit-form] Conex\xE3o perdida. Reconectando em 3s..."),setTimeout(y,3e3))}};y();let m=()=>{T=!0,i&&i(),clearInterval(f),n&&(clearTimeout(n),n=null),a.clear(),t&&(t.readyState===WebSocket.OPEN||t.readyState===WebSocket.CONNECTING)&&t.close(),S=null};return S=m,m}exports.a = b; exports.b = B; exports.c = N;
2
+ //# sourceMappingURL=chunk-4FQRTIYP.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/chunk-KGI5PU2P.cjs","../src/devtools/store-snapshot.ts","../src/devtools/store-port.ts","../src/devtools/bridge.ts"],"names":["normalizeStoreState","state","createDevToolsStoreSnapshot","store","historyMeta","createDevToolsSnapshotMap","stores","snapshots","storeId","instance","isDevToolsReadableStore","value","candidate","isDevToolsActionableStore","getDevToolsActionableStore","activeBridgeCleanup","STATE_BATCH_INTERVAL_MS","setupRemoteBridge","url","bus","bitBus","socket","unsubscribeBus","heartbeatInterval","batchFlushTimeout","pendingStoreIds","isIntentionalDisconnect","sendWhenOpen","message","flushPendingStoreUpdates","payload","acc","storeInstance","scheduleStoreFlush","connect","initialState","_newState","event","isDevToolsActionMessage","action","e","cleanup"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/chunk-KGI5PU2P.cjs","sourcesContent":[null,"import type { BitBusStorePort, BitState } from \"../core\";\nimport type { DevToolsStoreSnapshot, DevToolsStoreSnapshots } from \"./protocol\";\n\nfunction normalizeStoreState<T extends object>(\n state: Readonly<BitState<T>>,\n): Omit<DevToolsStoreSnapshot, \"_meta\"> {\n return {\n values: state.values,\n errors: state.errors as Record<string, unknown>,\n touched: state.touched as Record<string, unknown>,\n isValid: state.isValid,\n isDirty: state.isDirty,\n isSubmitting: state.isSubmitting,\n isValidating: state.isValidating as Record<string, unknown>,\n persist: state.persist,\n };\n}\n\nexport function createDevToolsStoreSnapshot<T extends object>(store: {\n getState: () => Readonly<BitState<T>>;\n getHistoryMetadata: () => {\n canUndo: boolean;\n canRedo: boolean;\n historySize: number;\n historyIndex: number;\n };\n}): DevToolsStoreSnapshot {\n const historyMeta = store.getHistoryMetadata();\n\n return {\n ...normalizeStoreState(store.getState()),\n _meta: {\n canUndo: historyMeta.canUndo,\n canRedo: historyMeta.canRedo,\n totalSteps: historyMeta.historySize,\n currentIndex: historyMeta.historyIndex,\n },\n };\n}\n\nexport function createDevToolsSnapshotMap(\n stores: Record<string, BitBusStorePort<object>>,\n): DevToolsStoreSnapshots {\n const snapshots: DevToolsStoreSnapshots = {};\n\n for (const [storeId, instance] of Object.entries(stores)) {\n snapshots[storeId] = createDevToolsStoreSnapshot(instance);\n }\n\n return snapshots;\n}\n","import type { BitBusStorePort } from \"../core\";\n\nexport type BitDevToolsReadableStore<T extends object = object> =\n BitBusStorePort<T>;\n\nexport type BitDevToolsActionableStore<T extends object = object> =\n BitBusStorePort<T>;\n\nexport function isDevToolsReadableStore(\n value: unknown,\n): value is BitDevToolsReadableStore<object> {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const candidate = value as unknown as Record<string, unknown>;\n\n return (\n typeof candidate.getState === \"function\" &&\n typeof candidate.getHistoryMetadata === \"function\"\n );\n}\n\nexport function isDevToolsActionableStore(\n value: unknown,\n): value is BitDevToolsActionableStore<object> {\n if (!isDevToolsReadableStore(value)) {\n return false;\n }\n\n const candidate = value as unknown as Record<string, unknown>;\n\n return (\n typeof candidate.undo === \"function\" &&\n typeof candidate.redo === \"function\" &&\n typeof candidate.reset === \"function\"\n );\n}\n\nexport function getDevToolsActionableStore(\n stores: Record<string, unknown>,\n storeId: string,\n): BitDevToolsActionableStore<object> | null {\n const candidate = stores[storeId];\n return isDevToolsActionableStore(candidate) ? candidate : null;\n}\n","import { bitBus } from \"../core\";\nimport type { BitBus } from \"../core\";\nimport type { BitBusStorePort } from \"../core\";\nimport { DEVTOOLS_PROTOCOL_VERSION, isDevToolsActionMessage } from \"./protocol\";\nimport { createDevToolsSnapshotMap } from \"./store-snapshot\";\nimport { getDevToolsActionableStore } from \"./store-port\";\n\nlet activeBridgeCleanup: (() => void) | null = null;\nconst STATE_BATCH_INTERVAL_MS = 50;\n\nexport function setupRemoteBridge(url: string, bus: BitBus = bitBus) {\n if (activeBridgeCleanup) {\n console.warn(\n \"[bit-form] Reiniciando ponte do DevTools (Fast Refresh detectado).\",\n );\n activeBridgeCleanup();\n }\n\n let socket: WebSocket | null = null;\n let unsubscribeBus: (() => void) | null = null;\n let heartbeatInterval: ReturnType<typeof setInterval>;\n let batchFlushTimeout: ReturnType<typeof setTimeout> | null = null;\n const pendingStoreIds = new Set<string>();\n let isIntentionalDisconnect = false;\n\n const sendWhenOpen = (message: Record<string, unknown>) => {\n if (socket?.readyState !== WebSocket.OPEN) {\n return;\n }\n\n socket.send(JSON.stringify(message));\n };\n\n const flushPendingStoreUpdates = () => {\n if (pendingStoreIds.size === 0) {\n return;\n }\n\n const payload = createDevToolsSnapshotMap(\n Array.from(pendingStoreIds).reduce<\n Record<string, BitBusStorePort<object>>\n >((acc, storeId) => {\n const storeInstance = bus.stores[storeId];\n if (storeInstance) {\n acc[storeId] = storeInstance;\n }\n return acc;\n }, {}),\n );\n\n pendingStoreIds.clear();\n batchFlushTimeout = null;\n\n if (Object.keys(payload).length > 0) {\n sendWhenOpen({\n type: \"STATE_UPDATE\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload,\n });\n }\n };\n\n const scheduleStoreFlush = () => {\n if (batchFlushTimeout) {\n return;\n }\n\n batchFlushTimeout = setTimeout(() => {\n flushPendingStoreUpdates();\n }, STATE_BATCH_INTERVAL_MS);\n };\n\n const connect = () => {\n isIntentionalDisconnect = false;\n socket = new WebSocket(url);\n\n socket.onopen = () => {\n console.log(\"[bit-form] 🔌 Conectado ao CLI DevTools via WebSocket.\");\n\n sendWhenOpen({\n type: \"HELLO\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload: { role: \"server\", protocolVersion: DEVTOOLS_PROTOCOL_VERSION },\n });\n\n const initialState = createDevToolsSnapshotMap(bus.stores);\n if (Object.keys(initialState).length > 0) {\n sendWhenOpen({\n type: \"STATE_UPDATE\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload: initialState,\n });\n }\n\n unsubscribeBus = bus.subscribe((storeId, _newState) => {\n pendingStoreIds.add(storeId);\n scheduleStoreFlush();\n });\n\n heartbeatInterval = setInterval(() => {\n sendWhenOpen({\n type: \"PING\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n });\n }, 30000);\n };\n\n socket.onmessage = (event) => {\n try {\n const message = JSON.parse(event.data) as unknown;\n\n if (isDevToolsActionMessage(message)) {\n const { storeId, action } = message.payload;\n const store = getDevToolsActionableStore(bus.stores, storeId);\n\n if (!store) {\n return;\n }\n\n switch (action) {\n case \"undo\":\n store.undo();\n break;\n case \"redo\":\n store.redo();\n break;\n case \"reset\":\n store.reset();\n break;\n }\n }\n } catch (e) {\n console.warn(\"[bit-form] Erro ao processar comando do CLI:\", e);\n }\n };\n\n socket.onclose = () => {\n if (unsubscribeBus) unsubscribeBus();\n clearInterval(heartbeatInterval);\n if (batchFlushTimeout) {\n clearTimeout(batchFlushTimeout);\n batchFlushTimeout = null;\n }\n pendingStoreIds.clear();\n\n if (!isIntentionalDisconnect) {\n console.log(\"[bit-form] Conexão perdida. Reconectando em 3s...\");\n setTimeout(connect, 3000);\n } else {\n console.log(\"[bit-form] Ponte antiga encerrada com sucesso.\");\n }\n };\n };\n\n connect();\n\n const cleanup = () => {\n isIntentionalDisconnect = true;\n\n if (unsubscribeBus) unsubscribeBus();\n clearInterval(heartbeatInterval);\n if (batchFlushTimeout) {\n clearTimeout(batchFlushTimeout);\n batchFlushTimeout = null;\n }\n pendingStoreIds.clear();\n if (\n socket &&\n (socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING)\n ) {\n socket.close();\n }\n activeBridgeCleanup = null;\n };\n\n activeBridgeCleanup = cleanup;\n\n return cleanup;\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/chunk-4FQRTIYP.cjs","../src/devtools/store-snapshot.ts","../src/devtools/store-port.ts","../src/devtools/bridge.ts"],"names":["normalizeStoreState","state","createDevToolsStoreSnapshot","store","historyMeta","createDevToolsSnapshotMap","stores","snapshots","storeId","instance","isDevToolsReadableStore","value","candidate","isDevToolsActionableStore","getDevToolsActionableStore","activeBridgeCleanup","STATE_BATCH_INTERVAL_MS","setupRemoteBridge","url","bus","bitBus","socket","unsubscribeBus","heartbeatInterval","batchFlushTimeout","pendingStoreIds","isIntentionalDisconnect","sendWhenOpen","message","flushPendingStoreUpdates","payload","acc","storeInstance","scheduleStoreFlush","connect","initialState","_newState","event","isDevToolsActionMessage","action","e","cleanup"],"mappings":"AAAA,qoBAA+C,wDAAyC,SCG/EA,CAAAA,CACPC,CAAAA,CACsC,CACtC,MAAO,CACL,MAAA,CAAQA,CAAAA,CAAM,MAAA,CACd,MAAA,CAAQA,CAAAA,CAAM,MAAA,CACd,OAAA,CAASA,CAAAA,CAAM,OAAA,CACf,OAAA,CAASA,CAAAA,CAAM,OAAA,CACf,OAAA,CAASA,CAAAA,CAAM,OAAA,CACf,YAAA,CAAcA,CAAAA,CAAM,YAAA,CACpB,YAAA,CAAcA,CAAAA,CAAM,YAAA,CACpB,OAAA,CAASA,CAAAA,CAAM,OACjB,CACF,CAEO,SAASC,CAAAA,CAA8CC,CAAAA,CAQpC,CACxB,IAAMC,CAAAA,CAAcD,CAAAA,CAAM,kBAAA,CAAmB,CAAA,CAE7C,MAAO,CACL,GAAGH,CAAAA,CAAoBG,CAAAA,CAAM,QAAA,CAAS,CAAC,CAAA,CACvC,KAAA,CAAO,CACL,OAAA,CAASC,CAAAA,CAAY,OAAA,CACrB,OAAA,CAASA,CAAAA,CAAY,OAAA,CACrB,UAAA,CAAYA,CAAAA,CAAY,WAAA,CACxB,YAAA,CAAcA,CAAAA,CAAY,YAC5B,CACF,CACF,CAEO,SAASC,CAAAA,CACdC,CAAAA,CACwB,CACxB,IAAMC,CAAAA,CAAoC,CAAC,CAAA,CAE3C,GAAA,CAAA,GAAW,CAACC,CAAAA,CAASC,CAAQ,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQH,CAAM,CAAA,CACrDC,CAAAA,CAAUC,CAAO,CAAA,CAAIN,CAAAA,CAA4BO,CAAQ,CAAA,CAG3D,OAAOF,CACT,CC1CO,SAASG,CAAAA,CACdC,CAAAA,CAC2C,CAC3C,EAAA,CAAI,CAACA,CAAAA,EAAS,OAAOA,CAAAA,EAAU,QAAA,CAC7B,MAAO,CAAA,CAAA,CAGT,IAAMC,CAAAA,CAAYD,CAAAA,CAElB,OACE,OAAOC,CAAAA,CAAU,QAAA,EAAa,UAAA,EAC9B,OAAOA,CAAAA,CAAU,kBAAA,EAAuB,UAE5C,CAEO,SAASC,CAAAA,CACdF,CAAAA,CAC6C,CAC7C,EAAA,CAAI,CAACD,CAAAA,CAAwBC,CAAK,CAAA,CAChC,MAAO,CAAA,CAAA,CAGT,IAAMC,CAAAA,CAAYD,CAAAA,CAElB,OACE,OAAOC,CAAAA,CAAU,IAAA,EAAS,UAAA,EAC1B,OAAOA,CAAAA,CAAU,IAAA,EAAS,UAAA,EAC1B,OAAOA,CAAAA,CAAU,KAAA,EAAU,UAE/B,CAEO,SAASE,CAAAA,CACdR,CAAAA,CACAE,CAAAA,CAC2C,CAC3C,IAAMI,CAAAA,CAAYN,CAAAA,CAAOE,CAAO,CAAA,CAChC,OAAOK,CAAAA,CAA0BD,CAAS,CAAA,CAAIA,CAAAA,CAAY,IAC5D,CCtCA,IAAIG,CAAAA,CAA2C,IAAA,CACzCC,CAAAA,CAA0B,EAAA,CAEzB,SAASC,CAAAA,CAAkBC,CAAAA,CAAaC,CAAAA,CAAcC,mBAAAA,CAAQ,CAC/DL,CAAAA,EAAAA,CACF,OAAA,CAAQ,IAAA,CACN,oEACF,CAAA,CACAA,CAAAA,CAAoB,CAAA,CAAA,CAGtB,IAAIM,CAAAA,CAA2B,IAAA,CAC3BC,CAAAA,CAAsC,IAAA,CACtCC,CAAAA,CACAC,CAAAA,CAA0D,IAAA,CACxDC,CAAAA,CAAkB,IAAI,GAAA,CACxBC,CAAAA,CAA0B,CAAA,CAAA,CAExBC,CAAAA,CAAgBC,CAAAA,EAAqC,iBACrDP,CAAAA,2BAAQ,YAAA,GAAe,SAAA,CAAU,IAAA,EAIrCA,CAAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAUO,CAAO,CAAC,CACrC,CAAA,CAEMC,CAAAA,CAA2B,CAAA,CAAA,EAAM,CACrC,EAAA,CAAIJ,CAAAA,CAAgB,IAAA,GAAS,CAAA,CAC3B,MAAA,CAGF,IAAMK,CAAAA,CAAUzB,CAAAA,CACd,KAAA,CAAM,IAAA,CAAKoB,CAAe,CAAA,CAAE,MAAA,CAE1B,CAACM,CAAAA,CAAKvB,CAAAA,CAAAA,EAAY,CAClB,IAAMwB,CAAAA,CAAgBb,CAAAA,CAAI,MAAA,CAAOX,CAAO,CAAA,CACxC,OAAIwB,CAAAA,EAAAA,CACFD,CAAAA,CAAIvB,CAAO,CAAA,CAAIwB,CAAAA,CAAAA,CAEVD,CACT,CAAA,CAAG,CAAC,CAAC,CACP,CAAA,CAEAN,CAAAA,CAAgB,KAAA,CAAM,CAAA,CACtBD,CAAAA,CAAoB,IAAA,CAEhB,MAAA,CAAO,IAAA,CAAKM,CAAO,CAAA,CAAE,MAAA,CAAS,CAAA,EAChCH,CAAAA,CAAa,CACX,IAAA,CAAM,cAAA,CACN,eAAA,CAAiB,CAAA,CACjB,OAAA,CAAAG,CACF,CAAC,CAEL,CAAA,CAEMG,CAAAA,CAAqB,CAAA,CAAA,EAAM,CAC3BT,CAAAA,EAAAA,CAIJA,CAAAA,CAAoB,UAAA,CAAW,CAAA,CAAA,EAAM,CACnCK,CAAAA,CAAyB,CAC3B,CAAA,CAAGb,CAAuB,CAAA,CAC5B,CAAA,CAEMkB,CAAAA,CAAU,CAAA,CAAA,EAAM,CACpBR,CAAAA,CAA0B,CAAA,CAAA,CAC1BL,CAAAA,CAAS,IAAI,SAAA,CAAUH,CAAG,CAAA,CAE1BG,CAAAA,CAAO,MAAA,CAAS,CAAA,CAAA,EAAM,CACpB,OAAA,CAAQ,GAAA,CAAI,+DAAwD,CAAA,CAEpEM,CAAAA,CAAa,CACX,IAAA,CAAM,OAAA,CACN,eAAA,CAAiB,CAAA,CACjB,OAAA,CAAS,CAAE,IAAA,CAAM,QAAA,CAAU,eAAA,CAAiB,CAA0B,CACxE,CAAC,CAAA,CAED,IAAMQ,CAAAA,CAAe9B,CAAAA,CAA0Bc,CAAAA,CAAI,MAAM,CAAA,CACrD,MAAA,CAAO,IAAA,CAAKgB,CAAY,CAAA,CAAE,MAAA,CAAS,CAAA,EACrCR,CAAAA,CAAa,CACX,IAAA,CAAM,cAAA,CACN,eAAA,CAAiB,CAAA,CACjB,OAAA,CAASQ,CACX,CAAC,CAAA,CAGHb,CAAAA,CAAiBH,CAAAA,CAAI,SAAA,CAAU,CAACX,CAAAA,CAAS4B,CAAAA,CAAAA,EAAc,CACrDX,CAAAA,CAAgB,GAAA,CAAIjB,CAAO,CAAA,CAC3ByB,CAAAA,CAAmB,CACrB,CAAC,CAAA,CAEDV,CAAAA,CAAoB,WAAA,CAAY,CAAA,CAAA,EAAM,CACpCI,CAAAA,CAAa,CACX,IAAA,CAAM,MAAA,CACN,eAAA,CAAiB,CACnB,CAAC,CACH,CAAA,CAAG,GAAK,CACV,CAAA,CAEAN,CAAAA,CAAO,SAAA,CAAagB,CAAAA,EAAU,CAC5B,GAAI,CACF,IAAMT,CAAAA,CAAU,IAAA,CAAK,KAAA,CAAMS,CAAAA,CAAM,IAAI,CAAA,CAErC,EAAA,CAAIC,iCAAAA,CAA+B,CAAA,CAAG,CACpC,GAAM,CAAE,OAAA,CAAA9B,CAAAA,CAAS,MAAA,CAAA+B,CAAO,CAAA,CAAIX,CAAAA,CAAQ,OAAA,CAC9BzB,CAAAA,CAAQW,CAAAA,CAA2BK,CAAAA,CAAI,MAAA,CAAQX,CAAO,CAAA,CAE5D,EAAA,CAAI,CAACL,CAAAA,CACH,MAAA,CAGF,MAAA,CAAQoC,CAAAA,CAAQ,CACd,IAAK,MAAA,CACHpC,CAAAA,CAAM,IAAA,CAAK,CAAA,CACX,KAAA,CACF,IAAK,MAAA,CACHA,CAAAA,CAAM,IAAA,CAAK,CAAA,CACX,KAAA,CACF,IAAK,OAAA,CACHA,CAAAA,CAAM,KAAA,CAAM,CAAA,CACZ,KACJ,CACF,CACF,CAAA,KAAA,CAASqC,CAAAA,CAAG,CACV,OAAA,CAAQ,IAAA,CAAK,8CAAA,CAAgDA,CAAC,CAChE,CACF,CAAA,CAEAnB,CAAAA,CAAO,OAAA,CAAU,CAAA,CAAA,EAAM,CACjBC,CAAAA,EAAgBA,CAAAA,CAAe,CAAA,CACnC,aAAA,CAAcC,CAAiB,CAAA,CAC3BC,CAAAA,EAAAA,CACF,YAAA,CAAaA,CAAiB,CAAA,CAC9BA,CAAAA,CAAoB,IAAA,CAAA,CAEtBC,CAAAA,CAAgB,KAAA,CAAM,CAAA,CAEjBC,CAAAA,CAIH,OAAA,CAAQ,GAAA,CAAI,gDAAgD,CAAA,CAAA,CAH5D,OAAA,CAAQ,GAAA,CAAI,sDAAmD,CAAA,CAC/D,UAAA,CAAWQ,CAAAA,CAAS,GAAI,CAAA,CAI5B,CACF,CAAA,CAEAA,CAAAA,CAAQ,CAAA,CAER,IAAMO,CAAAA,CAAU,CAAA,CAAA,EAAM,CACpBf,CAAAA,CAA0B,CAAA,CAAA,CAEtBJ,CAAAA,EAAgBA,CAAAA,CAAe,CAAA,CACnC,aAAA,CAAcC,CAAiB,CAAA,CAC3BC,CAAAA,EAAAA,CACF,YAAA,CAAaA,CAAiB,CAAA,CAC9BA,CAAAA,CAAoB,IAAA,CAAA,CAEtBC,CAAAA,CAAgB,KAAA,CAAM,CAAA,CAEpBJ,CAAAA,EAAAA,CACCA,CAAAA,CAAO,UAAA,GAAe,SAAA,CAAU,IAAA,EAC/BA,CAAAA,CAAO,UAAA,GAAe,SAAA,CAAU,UAAA,CAAA,EAElCA,CAAAA,CAAO,KAAA,CAAM,CAAA,CAEfN,CAAAA,CAAsB,IACxB,CAAA,CAEA,OAAAA,CAAAA,CAAsB0B,CAAAA,CAEfA,CACT,CAAA,4CAAA","file":"/home/runner/work/bit-form/bit-form/dist/chunk-4FQRTIYP.cjs","sourcesContent":[null,"import type { BitBusStorePort, BitState } from \"../core\";\nimport type { DevToolsStoreSnapshot, DevToolsStoreSnapshots } from \"./protocol\";\n\nfunction normalizeStoreState<T extends object>(\n state: Readonly<BitState<T>>,\n): Omit<DevToolsStoreSnapshot, \"_meta\"> {\n return {\n values: state.values,\n errors: state.errors as Record<string, unknown>,\n touched: state.touched as Record<string, unknown>,\n isValid: state.isValid,\n isDirty: state.isDirty,\n isSubmitting: state.isSubmitting,\n isValidating: state.isValidating as Record<string, unknown>,\n persist: state.persist,\n };\n}\n\nexport function createDevToolsStoreSnapshot<T extends object>(store: {\n getState: () => Readonly<BitState<T>>;\n getHistoryMetadata: () => {\n canUndo: boolean;\n canRedo: boolean;\n historySize: number;\n historyIndex: number;\n };\n}): DevToolsStoreSnapshot {\n const historyMeta = store.getHistoryMetadata();\n\n return {\n ...normalizeStoreState(store.getState()),\n _meta: {\n canUndo: historyMeta.canUndo,\n canRedo: historyMeta.canRedo,\n totalSteps: historyMeta.historySize,\n currentIndex: historyMeta.historyIndex,\n },\n };\n}\n\nexport function createDevToolsSnapshotMap(\n stores: Record<string, BitBusStorePort<object>>,\n): DevToolsStoreSnapshots {\n const snapshots: DevToolsStoreSnapshots = {};\n\n for (const [storeId, instance] of Object.entries(stores)) {\n snapshots[storeId] = createDevToolsStoreSnapshot(instance);\n }\n\n return snapshots;\n}\n","import type { BitBusStorePort } from \"../core\";\n\nexport type BitDevToolsReadableStore<T extends object = object> =\n BitBusStorePort<T>;\n\nexport type BitDevToolsActionableStore<T extends object = object> =\n BitBusStorePort<T>;\n\nexport function isDevToolsReadableStore(\n value: unknown,\n): value is BitDevToolsReadableStore<object> {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const candidate = value as unknown as Record<string, unknown>;\n\n return (\n typeof candidate.getState === \"function\" &&\n typeof candidate.getHistoryMetadata === \"function\"\n );\n}\n\nexport function isDevToolsActionableStore(\n value: unknown,\n): value is BitDevToolsActionableStore<object> {\n if (!isDevToolsReadableStore(value)) {\n return false;\n }\n\n const candidate = value as unknown as Record<string, unknown>;\n\n return (\n typeof candidate.undo === \"function\" &&\n typeof candidate.redo === \"function\" &&\n typeof candidate.reset === \"function\"\n );\n}\n\nexport function getDevToolsActionableStore(\n stores: Record<string, unknown>,\n storeId: string,\n): BitDevToolsActionableStore<object> | null {\n const candidate = stores[storeId];\n return isDevToolsActionableStore(candidate) ? candidate : null;\n}\n","import { bitBus } from \"../core\";\nimport type { BitBus } from \"../core\";\nimport type { BitBusStorePort } from \"../core\";\nimport { DEVTOOLS_PROTOCOL_VERSION, isDevToolsActionMessage } from \"./protocol\";\nimport { createDevToolsSnapshotMap } from \"./store-snapshot\";\nimport { getDevToolsActionableStore } from \"./store-port\";\n\nlet activeBridgeCleanup: (() => void) | null = null;\nconst STATE_BATCH_INTERVAL_MS = 50;\n\nexport function setupRemoteBridge(url: string, bus: BitBus = bitBus) {\n if (activeBridgeCleanup) {\n console.warn(\n \"[bit-form] Reiniciando ponte do DevTools (Fast Refresh detectado).\",\n );\n activeBridgeCleanup();\n }\n\n let socket: WebSocket | null = null;\n let unsubscribeBus: (() => void) | null = null;\n let heartbeatInterval: ReturnType<typeof setInterval>;\n let batchFlushTimeout: ReturnType<typeof setTimeout> | null = null;\n const pendingStoreIds = new Set<string>();\n let isIntentionalDisconnect = false;\n\n const sendWhenOpen = (message: Record<string, unknown>) => {\n if (socket?.readyState !== WebSocket.OPEN) {\n return;\n }\n\n socket.send(JSON.stringify(message));\n };\n\n const flushPendingStoreUpdates = () => {\n if (pendingStoreIds.size === 0) {\n return;\n }\n\n const payload = createDevToolsSnapshotMap(\n Array.from(pendingStoreIds).reduce<\n Record<string, BitBusStorePort<object>>\n >((acc, storeId) => {\n const storeInstance = bus.stores[storeId];\n if (storeInstance) {\n acc[storeId] = storeInstance;\n }\n return acc;\n }, {}),\n );\n\n pendingStoreIds.clear();\n batchFlushTimeout = null;\n\n if (Object.keys(payload).length > 0) {\n sendWhenOpen({\n type: \"STATE_UPDATE\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload,\n });\n }\n };\n\n const scheduleStoreFlush = () => {\n if (batchFlushTimeout) {\n return;\n }\n\n batchFlushTimeout = setTimeout(() => {\n flushPendingStoreUpdates();\n }, STATE_BATCH_INTERVAL_MS);\n };\n\n const connect = () => {\n isIntentionalDisconnect = false;\n socket = new WebSocket(url);\n\n socket.onopen = () => {\n console.log(\"[bit-form] 🔌 Conectado ao CLI DevTools via WebSocket.\");\n\n sendWhenOpen({\n type: \"HELLO\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload: { role: \"server\", protocolVersion: DEVTOOLS_PROTOCOL_VERSION },\n });\n\n const initialState = createDevToolsSnapshotMap(bus.stores);\n if (Object.keys(initialState).length > 0) {\n sendWhenOpen({\n type: \"STATE_UPDATE\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload: initialState,\n });\n }\n\n unsubscribeBus = bus.subscribe((storeId, _newState) => {\n pendingStoreIds.add(storeId);\n scheduleStoreFlush();\n });\n\n heartbeatInterval = setInterval(() => {\n sendWhenOpen({\n type: \"PING\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n });\n }, 30000);\n };\n\n socket.onmessage = (event) => {\n try {\n const message = JSON.parse(event.data) as unknown;\n\n if (isDevToolsActionMessage(message)) {\n const { storeId, action } = message.payload;\n const store = getDevToolsActionableStore(bus.stores, storeId);\n\n if (!store) {\n return;\n }\n\n switch (action) {\n case \"undo\":\n store.undo();\n break;\n case \"redo\":\n store.redo();\n break;\n case \"reset\":\n store.reset();\n break;\n }\n }\n } catch (e) {\n console.warn(\"[bit-form] Erro ao processar comando do CLI:\", e);\n }\n };\n\n socket.onclose = () => {\n if (unsubscribeBus) unsubscribeBus();\n clearInterval(heartbeatInterval);\n if (batchFlushTimeout) {\n clearTimeout(batchFlushTimeout);\n batchFlushTimeout = null;\n }\n pendingStoreIds.clear();\n\n if (!isIntentionalDisconnect) {\n console.log(\"[bit-form] Conexão perdida. Reconectando em 3s...\");\n setTimeout(connect, 3000);\n } else {\n console.log(\"[bit-form] Ponte antiga encerrada com sucesso.\");\n }\n };\n };\n\n connect();\n\n const cleanup = () => {\n isIntentionalDisconnect = true;\n\n if (unsubscribeBus) unsubscribeBus();\n clearInterval(heartbeatInterval);\n if (batchFlushTimeout) {\n clearTimeout(batchFlushTimeout);\n batchFlushTimeout = null;\n }\n pendingStoreIds.clear();\n if (\n socket &&\n (socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING)\n ) {\n socket.close();\n }\n activeBridgeCleanup = null;\n };\n\n activeBridgeCleanup = cleanup;\n\n return cleanup;\n}\n"]}
@@ -1,2 +1,2 @@
1
- import{a as c,c as v}from"./chunk-K5X37E3U.js";import{a as g}from"./chunk-KMOB6DB6.js";function R(e){return{values:e.values,errors:e.errors,touched:e.touched,isValid:e.isValid,isDirty:e.isDirty,isSubmitting:e.isSubmitting,isValidating:e.isValidating,persist:e.persist}}function k(e){let o=e.getHistoryMetadata();return{...R(e.getState()),_meta:{canUndo:o.canUndo,canRedo:o.canRedo,totalSteps:o.historySize,currentIndex:o.historyIndex}}}function b(e){let o={};for(let[t,i]of Object.entries(e))o[t]=k(i);return o}function w(e){if(!e||typeof e!="object")return!1;let o=e;return typeof o.getState=="function"&&typeof o.getHistoryMetadata=="function"}function I(e){if(!w(e))return!1;let o=e;return typeof o.undo=="function"&&typeof o.redo=="function"&&typeof o.reset=="function"}function B(e,o){let t=e[o];return I(t)?t:null}var S=null,O=50;function N(e,o=g){S&&(console.warn("[bit-form] Reiniciando ponte do DevTools (Fast Refresh detectado)."),S());let t=null,i=null,f,n=null,a=new Set,T=!1,u=r=>{t?.readyState===WebSocket.OPEN&&t.send(JSON.stringify(r))},h=()=>{if(a.size===0)return;let r=b(Array.from(a).reduce((s,l)=>{let d=o.stores[l];return d&&(s[l]=d),s},{}));a.clear(),n=null,Object.keys(r).length>0&&u({type:"STATE_UPDATE",protocolVersion:1,payload:r})},D=()=>{n||(n=setTimeout(()=>{h()},O))},y=()=>{T=!1,t=new WebSocket(e),t.onopen=()=>{console.log("[bit-form] \u{1F50C} Conectado ao CLI DevTools via WebSocket."),u({type:"HELLO",protocolVersion:1,payload:{role:"server",protocolVersion:1}});let r=b(o.stores);Object.keys(r).length>0&&u({type:"STATE_UPDATE",protocolVersion:1,payload:r}),i=o.subscribe((s,l)=>{a.add(s),D()}),f=setInterval(()=>{u({type:"PING",protocolVersion:1})},3e4)},t.onmessage=r=>{try{let s=JSON.parse(r.data);if(v(s)){let{storeId:l,action:d}=s.payload,p=B(o.stores,l);if(!p)return;switch(d){case"undo":p.undo();break;case"redo":p.redo();break;case"reset":p.reset();break}}}catch(s){console.warn("[bit-form] Erro ao processar comando do CLI:",s)}},t.onclose=()=>{i&&i(),clearInterval(f),n&&(clearTimeout(n),n=null),a.clear(),T?console.log("[bit-form] Ponte antiga encerrada com sucesso."):(console.log("[bit-form] Conex\xE3o perdida. Reconectando em 3s..."),setTimeout(y,3e3))}};y();let m=()=>{T=!0,i&&i(),clearInterval(f),n&&(clearTimeout(n),n=null),a.clear(),t&&(t.readyState===WebSocket.OPEN||t.readyState===WebSocket.CONNECTING)&&t.close(),S=null};return S=m,m}export{b as a,B as b,N as c};
2
- //# sourceMappingURL=chunk-LBISXDNW.js.map
1
+ import{a as c,c as v}from"./chunk-K5X37E3U.js";import{a as g}from"./chunk-254C3DS5.js";function R(e){return{values:e.values,errors:e.errors,touched:e.touched,isValid:e.isValid,isDirty:e.isDirty,isSubmitting:e.isSubmitting,isValidating:e.isValidating,persist:e.persist}}function k(e){let o=e.getHistoryMetadata();return{...R(e.getState()),_meta:{canUndo:o.canUndo,canRedo:o.canRedo,totalSteps:o.historySize,currentIndex:o.historyIndex}}}function b(e){let o={};for(let[t,i]of Object.entries(e))o[t]=k(i);return o}function w(e){if(!e||typeof e!="object")return!1;let o=e;return typeof o.getState=="function"&&typeof o.getHistoryMetadata=="function"}function I(e){if(!w(e))return!1;let o=e;return typeof o.undo=="function"&&typeof o.redo=="function"&&typeof o.reset=="function"}function B(e,o){let t=e[o];return I(t)?t:null}var S=null,O=50;function N(e,o=g){S&&(console.warn("[bit-form] Reiniciando ponte do DevTools (Fast Refresh detectado)."),S());let t=null,i=null,f,n=null,a=new Set,T=!1,u=r=>{t?.readyState===WebSocket.OPEN&&t.send(JSON.stringify(r))},h=()=>{if(a.size===0)return;let r=b(Array.from(a).reduce((s,l)=>{let d=o.stores[l];return d&&(s[l]=d),s},{}));a.clear(),n=null,Object.keys(r).length>0&&u({type:"STATE_UPDATE",protocolVersion:1,payload:r})},D=()=>{n||(n=setTimeout(()=>{h()},O))},y=()=>{T=!1,t=new WebSocket(e),t.onopen=()=>{console.log("[bit-form] \u{1F50C} Conectado ao CLI DevTools via WebSocket."),u({type:"HELLO",protocolVersion:1,payload:{role:"server",protocolVersion:1}});let r=b(o.stores);Object.keys(r).length>0&&u({type:"STATE_UPDATE",protocolVersion:1,payload:r}),i=o.subscribe((s,l)=>{a.add(s),D()}),f=setInterval(()=>{u({type:"PING",protocolVersion:1})},3e4)},t.onmessage=r=>{try{let s=JSON.parse(r.data);if(v(s)){let{storeId:l,action:d}=s.payload,p=B(o.stores,l);if(!p)return;switch(d){case"undo":p.undo();break;case"redo":p.redo();break;case"reset":p.reset();break}}}catch(s){console.warn("[bit-form] Erro ao processar comando do CLI:",s)}},t.onclose=()=>{i&&i(),clearInterval(f),n&&(clearTimeout(n),n=null),a.clear(),T?console.log("[bit-form] Ponte antiga encerrada com sucesso."):(console.log("[bit-form] Conex\xE3o perdida. Reconectando em 3s..."),setTimeout(y,3e3))}};y();let m=()=>{T=!0,i&&i(),clearInterval(f),n&&(clearTimeout(n),n=null),a.clear(),t&&(t.readyState===WebSocket.OPEN||t.readyState===WebSocket.CONNECTING)&&t.close(),S=null};return S=m,m}export{b as a,B as b,N as c};
2
+ //# sourceMappingURL=chunk-HCJTGESK.js.map
@@ -0,0 +1,2 @@
1
+ function t(r){try{r()}catch{}}function l(r,i,e){let n=0;return async o=>{if(!o)return;let a=++n;t(()=>e.setLoading(!0)),t(()=>e.setError(r,void 0));try{let d=await i(o);if(a!==n)return;t(()=>e.setValue(d.url)),t(()=>e.setUploadKey(d.key)),t(()=>e.setError(r,void 0))}catch(d){if(a!==n)return;let s=d instanceof Error?d.message:"Upload failed";t(()=>e.setError(r,s))}finally{a===n&&t(()=>e.setLoading(!1))}}}function u(r,i,e){return async()=>{let n=e.getUploadKey();if(n&&i)try{await i(n)}catch(o){let a=o instanceof Error?o.message:"Delete failed";e.setError(r,a);return}e.setValue(null),e.setUploadKey(null),e.setError(r,void 0)}}export{l as a,u as b};
2
+ //# sourceMappingURL=chunk-L7RLUUSB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/adapters/upload-kernel.ts"],"sourcesContent":["/**\n * Framework-agnostic upload kernel.\n *\n * Encapsulates the side-effect logic for uploading/removing files so that\n * React, Vue, and Angular adapters share a single implementation and only\n * differ in how they wire reactive state.\n */\n\nimport type { BitDeleteUploadFn, BitUploadFn } from \"../types/upload\";\n\nexport interface UploadKernelCallbacks {\n /** Called with `true` when upload starts and `false` when it finishes. */\n setLoading: (loading: boolean) => void;\n /** Set or clear a field-level error message. */\n setError: (path: string, message: string | undefined) => void;\n /** Set the stored file URL after a successful upload (or `null` on remove). */\n setValue: (value: string | null) => void;\n /** Return the key of the last uploaded file (used when deleting). */\n getUploadKey: () => string | null;\n /** Persist the upload key returned by the upload function. */\n setUploadKey: (key: string | null) => void;\n}\n\n/**\n * Creates a type-safe `upload` handler for a field.\n *\n * @example\n * ```ts\n * const upload = createUploadHandler(\"avatar\", myUploadFn, {\n * setLoading: (v) => (isUploading.value = v),\n * setError: (p, m) => store.setError(p, m),\n * setValue: (v) => field.setValue(v),\n * getUploadKey: () => uploadKey,\n * setUploadKey: (k) => (uploadKey = k),\n * });\n * ```\n */\nfunction safeCallbackExecution(fn: () => void): void {\n try {\n fn();\n } catch {\n // Silently swallow callback errors to maintain upload state consistency\n }\n}\n\nexport function createUploadHandler<\n TMetadata extends Record<string, unknown> = Record<string, unknown>,\n>(\n fieldPath: string,\n uploadFn: BitUploadFn<TMetadata>,\n callbacks: UploadKernelCallbacks,\n): (file: File | null | undefined) => Promise<void> {\n let currentGeneration = 0;\n return async (file) => {\n if (!file) return;\n\n const myGeneration = ++currentGeneration;\n safeCallbackExecution(() => callbacks.setLoading(true));\n safeCallbackExecution(() => callbacks.setError(fieldPath, undefined));\n\n try {\n const result = await uploadFn(file);\n\n if (myGeneration !== currentGeneration) return;\n safeCallbackExecution(() => callbacks.setValue(result.url));\n safeCallbackExecution(() => callbacks.setUploadKey(result.key));\n safeCallbackExecution(() => callbacks.setError(fieldPath, undefined));\n } catch (error) {\n if (myGeneration !== currentGeneration) return;\n const message = error instanceof Error ? error.message : \"Upload failed\";\n safeCallbackExecution(() => callbacks.setError(fieldPath, message));\n } finally {\n if (myGeneration === currentGeneration) {\n safeCallbackExecution(() => callbacks.setLoading(false));\n }\n }\n };\n}\n\n/**\n * Creates a type-safe `remove` handler for a field.\n */\nexport function createRemoveHandler(\n fieldPath: string,\n deleteFile: BitDeleteUploadFn | undefined,\n callbacks: UploadKernelCallbacks,\n): () => Promise<void> {\n return async () => {\n const uploadKey = callbacks.getUploadKey();\n\n if (uploadKey && deleteFile) {\n try {\n await deleteFile(uploadKey);\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Delete failed\";\n callbacks.setError(fieldPath, message);\n return;\n }\n }\n\n callbacks.setValue(null);\n callbacks.setUploadKey(null);\n callbacks.setError(fieldPath, undefined);\n };\n}\n"],"mappings":"AAqCA,SAASA,EAAsBC,EAAsB,CACnD,GAAI,CACFA,EAAG,CACL,MAAQ,CAER,CACF,CAEO,SAASC,EAGdC,EACAC,EACAC,EACkD,CAClD,IAAIC,EAAoB,EACxB,MAAO,OAAOC,GAAS,CACrB,GAAI,CAACA,EAAM,OAEX,IAAMC,EAAe,EAAEF,EACvBN,EAAsB,IAAMK,EAAU,WAAW,EAAI,CAAC,EACtDL,EAAsB,IAAMK,EAAU,SAASF,EAAW,MAAS,CAAC,EAEpE,GAAI,CACF,IAAMM,EAAS,MAAML,EAASG,CAAI,EAElC,GAAIC,IAAiBF,EAAmB,OACxCN,EAAsB,IAAMK,EAAU,SAASI,EAAO,GAAG,CAAC,EAC1DT,EAAsB,IAAMK,EAAU,aAAaI,EAAO,GAAG,CAAC,EAC9DT,EAAsB,IAAMK,EAAU,SAASF,EAAW,MAAS,CAAC,CACtE,OAASO,EAAO,CACd,GAAIF,IAAiBF,EAAmB,OACxC,IAAMK,EAAUD,aAAiB,MAAQA,EAAM,QAAU,gBACzDV,EAAsB,IAAMK,EAAU,SAASF,EAAWQ,CAAO,CAAC,CACpE,QAAE,CACIH,IAAiBF,GACnBN,EAAsB,IAAMK,EAAU,WAAW,EAAK,CAAC,CAE3D,CACF,CACF,CAKO,SAASO,EACdT,EACAU,EACAR,EACqB,CACrB,MAAO,UAAY,CACjB,IAAMS,EAAYT,EAAU,aAAa,EAEzC,GAAIS,GAAaD,EACf,GAAI,CACF,MAAMA,EAAWC,CAAS,CAC5B,OAASJ,EAAO,CACd,IAAMC,EACJD,aAAiB,MAAQA,EAAM,QAAU,gBAC3CL,EAAU,SAASF,EAAWQ,CAAO,EACrC,MACF,CAGFN,EAAU,SAAS,IAAI,EACvBA,EAAU,aAAa,IAAI,EAC3BA,EAAU,SAASF,EAAW,MAAS,CACzC,CACF","names":["safeCallbackExecution","fn","createUploadHandler","fieldPath","uploadFn","callbacks","currentGeneration","file","myGeneration","result","error","message","createRemoveHandler","deleteFile","uploadKey"]}
@@ -0,0 +1,2 @@
1
+ var X={"#":/\d/,A:/[a-zA-Z]/,X:/[a-zA-Z0-9]/,H:/[0-9a-fA-F]/,U:/[A-Z]/,L:/[a-z]/,"*":/./},h=(s,r)=>{if(s==null||s==="")return"";let e=String(s),i=e.startsWith("-"),a=r?r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"):"",c=new RegExp(`[^a-zA-Z0-9${a}]`,"g"),m=e.replace(c,"");return i&&m&&!m.startsWith("-")?`-${m}`:m},te=(s,r=2)=>{if(typeof s=="number")return s;if(!s)return 0;let e=String(s),i=e.includes("-"),a=e.replace(/\D/g,"");if(!a)return 0;let c=parseInt(a,10)/Math.pow(10,r);return i?-c:c},n=(s,r)=>{let e=o=>o.split("").filter(t=>X[t]).length,a=[...Array.isArray(s)?s:[s]].sort((o,t)=>e(o)-e(t)),c=o=>{let t=a[a.length-1];for(let p of a)if(o<=e(p)){t=p;break}return t},m=o=>{let t=h(o,r?.allowChars);if(!t&&!r?.guide)return"";let p=c(t.length),k=r?.guide||!1,d=r?.placeholderChar||"_",g="",x=0;for(let f=0;f<p.length;f++){let H=p[f],C=X[H];if(x<t.length){let u=t[x];if(C)if(H==="U"&&(u=u.toUpperCase()),H==="L"&&(u=u.toLowerCase()),C.test(u))g+=u,x++;else if(k)g+=d;else break;else g+=H,u===H&&x++}else if(k)g+=C?d:H;else break}return g};return{format:m,parse:o=>{if(r?.customParse)return r.customParse(o);let t=m(o);if(r?.saveRaw){if(r?.guide){let k=(r.placeholderChar||"_").replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=new RegExp(k,"g");return t.replace(d,"")}return t}return h(t,r?.allowChars)}}},l=({prefix:s="",suffix:r="",thousand:e,decimal:i,precision:a=2,allowNegative:c=!0,saveRaw:m=!1})=>{let o=t=>{if(t==null||t==="")return"";let p=typeof t=="number"?Math.abs(t).toFixed(a).replace(/\D/g,""):String(t).replace(/\D/g,"");if(!p&&String(t).includes("-")&&c)return"-";if(!p)return"";p=p.padStart(a+1,"0");let k=a>0?p.slice(0,-a).replace(/^0+(?=\d)/,"")||"0":p.replace(/^0+(?=\d)/,"")||"0",d=a>0?p.slice(-a):"",g=k.replace(/\B(?=(\d{3})+(?!\d))/g,e),f=(typeof t=="number"?t<0:String(t).includes("-"))&&c?"-":"";return a===0?`${f}${s}${g}${r}`:`${f}${s}${g}${i}${d}${r}`};return{format:o,parse:t=>{let p=te(t,a),k=c?p:Math.abs(p);return m?o(k):k}}},$=s=>{let r=e=>/^3[47]/.test(e)?"#### ###### #####":/^3(?:0[0-5]|[68])/.test(e)?"#### ###### ####":"#### #### #### ####";return{format:e=>{let i=h(e,s?.allowChars),a=r(i);return n(a,s).format(e)},parse:e=>{let i=h(e,s?.allowChars),a=r(i);return n(a,s).parse(e)}}},M=s=>{let e=(s?.format||"DD/MM/YYYY")==="YYYY-MM-DD",i=n(e?"####-##-##":"##/##/####",s);return{format:a=>{let c=h(a);if(!c)return"";let m,o,t;if(e?(t=c.substring(0,4),o=c.substring(4,6),m=c.substring(6,8)):(m=c.substring(0,2),o=c.substring(2,4),t=c.substring(4,8)),m.length===2){let k=parseInt(m,10);k>31&&(m="31"),k===0&&(m="01")}if(o.length===2){let k=parseInt(o,10);k>12&&(o="12"),k===0&&(o="01")}let p=e?`${t}${o}${m}`:`${m}${o}${t}`;return i.format(p)},parse:a=>i.parse(a)}};var D=l({prefix:"R$ ",thousand:".",decimal:",",precision:2}),b=l({prefix:"$",thousand:",",decimal:".",precision:2}),y=l({suffix:" \u20AC",thousand:".",decimal:",",precision:2}),S=l({prefix:"\xA3",thousand:",",decimal:".",precision:2}),B=l({prefix:"\xA5",thousand:",",decimal:".",precision:0}),I=l({suffix:"%",thousand:".",decimal:",",precision:1}),Y=l({thousand:".",decimal:",",precision:2}),P=l({thousand:".",decimal:",",precision:0}),A=n("###.###.###-##"),R=n("##.###.###/####-##"),U=n(["(##) ####-####","(##) #####-####"]),N=n("(##) ####-####"),V=n("#####-###"),w=M({format:"DD/MM/YYYY",guide:!0,customParse:s=>{let r=s.replace(/_/g,""),e=r.split("/");return e.length===3&&e[2].length===4?`${e[2]}-${e[1]}-${e[0]}`:r.replace(/\D/g,"")}}),Z=n("##:##"),L=n("###########"),z=n("##.###.###-X"),E=n(["###.###.###-##","##.###.###/####-##"]),F={format(s){let r=String(s??"").replace(/[^a-zA-Z0-9]/g,"").toUpperCase().slice(0,7);if(r.length===0)return"";let e=r.slice(0,3),i=r.slice(3);return i.length===0?e:i.length>=2&&/[A-Z]/.test(i[1])?`${e}${i}`:`${e}-${i}`},parse(s){return String(s??"").replace(/[^a-zA-Z0-9]/g,"").toUpperCase().slice(0,7)}},O=n("(###) ###-####"),J=n("#####-####"),T=n("##/##/####"),G=n("###-##-####"),j=$(),_=n("####"),W=M({format:"YYYY-MM-DD",saveRaw:!0,guide:!0}),q=n("HH:HH:HH:HH:HH:HH"),K=n("#HHHHHH"),Q=n("###.###.###.###"),v=n("HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH"),ee=n("UU## XXXX XXXX XXXX XXXX XXXX XXXX XXXX XX",{allowChars:" "});var ne={brl:D,usd:b,eur:y,gbp:S,jpy:B,percent:I,decimal:Y,int:P,integer:P,cpf:A,cnpj:R,cpfCnpj:E,rg:z,cep:V,cnh:L,plate:F,phone:U,landline:N,date:w,time:Z,usPhone:O,zipCode:J,dateUS:T,ssn:G,cc:j,cvv:_,dateISO:W,ip:Q,ipv6:v,mac:q,color:K,iban:ee};export{h as a,te as b,n as c,l as d,$ as e,M as f,D as g,b as h,y as i,S as j,B as k,I as l,Y as m,P as n,A as o,R as p,U as q,N as r,V as s,w as t,Z as u,L as v,z as w,E as x,F as y,O as z,J as A,T as B,G as C,j as D,_ as E,W as F,q as G,K as H,Q as I,v as J,ee as K,ne as L};
2
+ //# sourceMappingURL=chunk-QCKCONCU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/mask/creators.ts","../src/core/mask/presets.ts","../src/core/mask/built-ins.ts"],"sourcesContent":["import {\n BitMask,\n CurrencyMaskConfig,\n DateMaskConfig,\n PatternMaskOptions,\n} from \"./types\";\n\ntype TokenMap = Record<string, RegExp>;\n\nconst tokens: TokenMap = {\n \"#\": /\\d/,\n A: /[a-zA-Z]/,\n X: /[a-zA-Z0-9]/,\n H: /[0-9a-fA-F]/,\n U: /[A-Z]/,\n L: /[a-z]/,\n \"*\": /./,\n};\n\nexport const unmask = (\n value: string | number | null | undefined,\n allowChars?: string,\n): string => {\n if (value === null || value === undefined || value === \"\") return \"\";\n const stringValue = String(value);\n const isNegative = stringValue.startsWith(\"-\");\n\n const escapedChars = allowChars\n ? allowChars.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n : \"\";\n const regex = new RegExp(`[^a-zA-Z0-9${escapedChars}]`, \"g\");\n\n const clean = stringValue.replace(regex, \"\");\n return isNegative && clean && !clean.startsWith(\"-\") ? `-${clean}` : clean;\n};\n\nexport const unmaskCurrency = (value: any, precision = 2): number => {\n if (typeof value === \"number\") return value;\n if (!value) return 0;\n\n const stringValue = String(value);\n const isNegative = stringValue.includes(\"-\");\n const digits = stringValue.replace(/\\D/g, \"\");\n\n if (!digits) return 0;\n\n const numberValue = parseInt(digits, 10) / Math.pow(10, precision);\n return isNegative ? -numberValue : numberValue;\n};\n\nexport const createPatternMask = (\n pattern: string | string[],\n options?: PatternMaskOptions,\n): BitMask => {\n const getRawLength = (p: string) =>\n p.split(\"\").filter((c) => tokens[c]).length;\n\n const patterns = Array.isArray(pattern) ? pattern : [pattern];\n const sortedPatterns = [...patterns].sort(\n (a, b) => getRawLength(a) - getRawLength(b),\n );\n\n const getActivePattern = (rawValueLength: number) => {\n let activePattern = sortedPatterns[sortedPatterns.length - 1];\n for (const candidate of sortedPatterns) {\n if (rawValueLength <= getRawLength(candidate)) {\n activePattern = candidate;\n break;\n }\n }\n return activePattern;\n };\n\n const formatValue = (value: string | number | null | undefined): string => {\n const stringVal = unmask(value, options?.allowChars);\n\n if (!stringVal && !options?.guide) {\n return \"\";\n }\n\n const activePattern = getActivePattern(stringVal.length);\n const showGuide = options?.guide || false;\n const placeholder = options?.placeholderChar || \"_\";\n\n let masked = \"\";\n let valueIndex = 0;\n\n for (let i = 0; i < activePattern.length; i++) {\n const patternChar = activePattern[i];\n const token = tokens[patternChar];\n\n if (valueIndex < stringVal.length) {\n let dataChar = stringVal[valueIndex];\n\n if (token) {\n if (patternChar === \"U\") dataChar = dataChar.toUpperCase();\n if (patternChar === \"L\") dataChar = dataChar.toLowerCase();\n\n if (token.test(dataChar)) {\n masked += dataChar;\n valueIndex++;\n } else if (showGuide) {\n masked += placeholder;\n } else {\n break;\n }\n } else {\n masked += patternChar;\n if (dataChar === patternChar) valueIndex++;\n }\n } else if (showGuide) {\n masked += token ? placeholder : patternChar;\n } else {\n break;\n }\n }\n\n return masked;\n };\n\n return {\n format: formatValue,\n parse: (value: string) => {\n if (options?.customParse) return options.customParse(value);\n\n const formatted = formatValue(value);\n\n if (options?.saveRaw) {\n if (options?.guide) {\n const placeholder = options.placeholderChar || \"_\";\n const escapedPlaceholder = placeholder.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n \"\\\\$&\",\n );\n const placeholderRegex = new RegExp(escapedPlaceholder, \"g\");\n\n return formatted.replace(placeholderRegex, \"\");\n }\n\n return formatted;\n }\n\n return unmask(formatted, options?.allowChars);\n },\n };\n};\n\nexport const createCurrencyMask = ({\n prefix = \"\",\n suffix = \"\",\n thousand,\n decimal,\n precision = 2,\n allowNegative = true,\n saveRaw = false,\n}: CurrencyMaskConfig): BitMask => {\n const formatFn = (value: any) => {\n if (value === undefined || value === null || value === \"\") return \"\";\n\n let stringValue =\n typeof value === \"number\"\n ? Math.abs(value).toFixed(precision).replace(/\\D/g, \"\")\n : String(value).replace(/\\D/g, \"\");\n\n if (!stringValue && String(value).includes(\"-\") && allowNegative)\n return \"-\";\n if (!stringValue) return \"\";\n\n stringValue = stringValue.padStart(precision + 1, \"0\");\n\n const integerPart =\n precision > 0\n ? stringValue.slice(0, -precision).replace(/^0+(?=\\d)/, \"\") || \"0\"\n : stringValue.replace(/^0+(?=\\d)/, \"\") || \"0\";\n const decimalPart = precision > 0 ? stringValue.slice(-precision) : \"\";\n\n const formattedInteger = integerPart.replace(\n /\\B(?=(\\d{3})+(?!\\d))/g,\n thousand,\n );\n\n const isNegative =\n typeof value === \"number\" ? value < 0 : String(value).includes(\"-\");\n const sign = isNegative && allowNegative ? \"-\" : \"\";\n\n if (precision === 0) {\n return `${sign}${prefix}${formattedInteger}${suffix}`;\n }\n\n return `${sign}${prefix}${formattedInteger}${decimal}${decimalPart}${suffix}`;\n };\n\n return {\n format: formatFn,\n parse: (value: string) => {\n const numericValue = unmaskCurrency(value, precision);\n const finalNumber = !allowNegative\n ? Math.abs(numericValue)\n : numericValue;\n if (saveRaw) return formatFn(finalNumber);\n return finalNumber;\n },\n };\n};\n\nexport const createCreditCardMask = (options?: PatternMaskOptions): BitMask => {\n // Função auxiliar para descobrir o padrão dinamicamente\n const getCardPattern = (rawValue: string) => {\n // Amex (American Express) começa com 34 ou 37 -> 15 dígitos\n if (/^3[47]/.test(rawValue)) {\n return \"#### ###### #####\";\n }\n // Diners Club começa com 300-305, 36 ou 38 -> 14 dígitos\n if (/^3(?:0[0-5]|[68])/.test(rawValue)) {\n return \"#### ###### ####\";\n }\n // Default: Visa, Mastercard, Discover, Elo, etc -> 16 dígitos\n return \"#### #### #### ####\";\n };\n\n return {\n format: (value: any) => {\n const stringVal = unmask(value, options?.allowChars);\n const pattern = getCardPattern(stringVal);\n const mask = createPatternMask(pattern, options);\n return mask.format(value);\n },\n parse: (value: string) => {\n const stringVal = unmask(value, options?.allowChars);\n const pattern = getCardPattern(stringVal);\n\n const mask = createPatternMask(pattern, options);\n return mask.parse(value);\n },\n };\n};\n\nexport const createDateMask = (config?: DateMaskConfig): BitMask => {\n const formatType = config?.format || \"DD/MM/YYYY\";\n const isISO = formatType === \"YYYY-MM-DD\";\n\n // Criamos a máscara base consoante o formato escolhido\n const baseMask = createPatternMask(\n isISO ? \"####-##-##\" : \"##/##/####\",\n config,\n );\n\n return {\n format: (value: any) => {\n let stringVal = unmask(value);\n if (!stringVal) return \"\";\n\n let day: string;\n let month: string;\n let year: string;\n\n // Separamos os componentes consoante o que o utilizador já digitou\n if (isISO) {\n year = stringVal.substring(0, 4);\n month = stringVal.substring(4, 6);\n day = stringVal.substring(6, 8);\n } else {\n day = stringVal.substring(0, 2);\n month = stringVal.substring(2, 4);\n year = stringVal.substring(4, 8);\n }\n\n // Validação do Dia (01 a 31)\n if (day.length === 2) {\n const d = parseInt(day, 10);\n if (d > 31) day = \"31\";\n if (d === 0) day = \"01\";\n }\n\n // Validação do Mês (01 a 12)\n if (month.length === 2) {\n const m = parseInt(month, 10);\n if (m > 12) month = \"12\";\n if (m === 0) month = \"01\";\n }\n\n // Reconstruímos a string limpa e passamos para o pattern normal\n const safeString = isISO\n ? `${year}${month}${day}`\n : `${day}${month}${year}`;\n\n return baseMask.format(safeString);\n },\n parse: (value: string) => {\n // Usamos a funcionalidade completa da máscara base (incluindo o saveRaw e o unmasking)\n return baseMask.parse(value);\n },\n };\n};\n","import type { BitMask } from \"./types\";\nimport {\n createCreditCardMask,\n createCurrencyMask,\n createDateMask,\n createPatternMask,\n} from \"./creators\";\n\n// ==========================================\n// 💲 MOEDAS (Currencies)\n// ==========================================\n\n/** BRL - Real Brasileiro (R$ 1.000,00) */\nexport const maskBRL = createCurrencyMask({\n prefix: \"R$ \",\n thousand: \".\",\n decimal: \",\",\n precision: 2,\n});\n\n/** USD - Dólar Americano ($1,000.00) */\nexport const maskUSD = createCurrencyMask({\n prefix: \"$\",\n thousand: \",\",\n decimal: \".\",\n precision: 2,\n});\n\n/** EUR - Euro Padrão (€ 1.000,00) - Sufixo comum na Europa */\nexport const maskEUR = createCurrencyMask({\n suffix: \" €\",\n thousand: \".\",\n decimal: \",\",\n precision: 2,\n});\n\n/** GBP - Libra Esterlina (£1,000.00) */\nexport const maskGBP = createCurrencyMask({\n prefix: \"£\",\n thousand: \",\",\n decimal: \".\",\n precision: 2,\n});\n\n/** JPY - Iene Japonês (¥1,000) - Geralmente sem decimais */\nexport const maskJPY = createCurrencyMask({\n prefix: \"¥\",\n thousand: \",\",\n decimal: \".\",\n precision: 0,\n});\n\n// ==========================================\n// 🔢 NÚMEROS E PERCENTUAIS\n// ==========================================\n\n/** Porcentagem PT-BR (10,5%) */\nexport const maskPercent = createCurrencyMask({\n suffix: \"%\",\n thousand: \".\",\n decimal: \",\",\n precision: 1, // Ex: 99,9%\n});\n\n/** Decimal Genérico PT-BR (1.000,00) - Sem símbolo */\nexport const maskDecimal = createCurrencyMask({\n thousand: \".\",\n decimal: \",\",\n precision: 2,\n});\n\n/** Inteiro (1.000) - Apenas separador de milhar */\nexport const maskInteger = createCurrencyMask({\n thousand: \".\",\n decimal: \",\",\n precision: 0,\n});\n\n// ==========================================\n// 🇧🇷 PADRÕES BRASILEIROS (Brazil)\n// ==========================================\n\n/** CPF (000.000.000-00) */\nexport const maskCPF = createPatternMask(\"###.###.###-##\");\n\n/** CNPJ (00.000.000/0000-00) */\nexport const maskCNPJ = createPatternMask(\"##.###.###/####-##\");\n\nexport const maskPhone = createPatternMask([\n \"(##) ####-####\", // Fixo (10 dígitos)\n \"(##) #####-####\", // Celular (11 dígitos)\n]);\n\n/** Telefone Fixo BR (11) 0000-0000 */\nexport const maskLandline = createPatternMask(\"(##) ####-####\");\n\n/** CEP (00000-000) */\nexport const maskCEP = createPatternMask(\"#####-###\");\n\n/** Data PT/BR com correção automática de dia/mês */\nexport const maskDate = createDateMask({\n format: \"DD/MM/YYYY\",\n guide: true,\n customParse: (val) => {\n const cleanVal = val.replace(/_/g, \"\");\n const parts = cleanVal.split(\"/\");\n if (parts.length === 3 && parts[2].length === 4) {\n return `${parts[2]}-${parts[1]}-${parts[0]}`;\n }\n return cleanVal.replace(/\\D/g, \"\");\n },\n});\n\n/** Hora Curta (HH:MM) */\nexport const maskTime = createPatternMask(\"##:##\");\n\n/** CNH (Carteira de Motorista - 11 dígitos) */\nexport const maskCNH = createPatternMask(\"###########\");\n\n/** RG (00.000.000-X) - Suporta o 'X' como dígito verificador */\nexport const maskRG = createPatternMask(\"##.###.###-X\");\n\n/**\n * CPF + CNPJ combinado — alterna automaticamente pelo número de dígitos:\n * - Até 11 dígitos → CPF (000.000.000-00)\n * - Mais de 11 → CNPJ (00.000.000/0000-00)\n */\nexport const maskCPFCNPJ = createPatternMask([\n \"###.###.###-##\",\n \"##.###.###/####-##\",\n]);\n\n/**\n * Placa de veículo BR — detecta o formato pelo 5.º caractere:\n * - Antigo → ABC-1234 (posição 5 é dígito)\n * - Mercosul → ABC1D23 (posição 5 é letra)\n */\nexport const maskPlate: BitMask = {\n format(value: any): string {\n const raw = String(value ?? \"\")\n .replace(/[^a-zA-Z0-9]/g, \"\")\n .toUpperCase()\n .slice(0, 7);\n\n if (raw.length === 0) return \"\";\n\n const prefix = raw.slice(0, 3);\n const rest = raw.slice(3);\n\n if (rest.length === 0) return prefix;\n\n // Posição 5 (rest[1]): letra → Mercosul; dígito → formato antigo\n const isMercosul = rest.length >= 2 && /[A-Z]/.test(rest[1]);\n\n return isMercosul ? `${prefix}${rest}` : `${prefix}-${rest}`;\n },\n parse(value: string): string {\n return String(value ?? \"\")\n .replace(/[^a-zA-Z0-9]/g, \"\")\n .toUpperCase()\n .slice(0, 7);\n },\n};\n\n// ==========================================\n// 🇺🇸 PADRÕES AMERICANOS (USA)\n// ==========================================\n\n/** US Phone ((000) 000-0000) */\nexport const maskUSPhone = createPatternMask(\"(###) ###-####\");\n\n/** ZIP Code (00000 or 00000-0000) */\nexport const maskZipCode = createPatternMask(\"#####-####\");\n\n/** Date US (MM/DD/YYYY) - Igual ao BR, mas semântica diferente */\nexport const maskDateUS = createPatternMask(\"##/##/####\");\n\n/** SSN (Social Security Number) */\nexport const maskSSN = createPatternMask(\"###-##-####\");\n\n// ==========================================\n// 🌐 PADRÕES GLOBAIS / TÉCNICOS\n// ==========================================\n\n/** Cartão de Crédito Inteligente (Detecta Visa/Master, Amex e Diners) */\nexport const maskCreditCard = createCreditCardMask();\n\n/** CVV (3 ou 4 dígitos) */\nexport const maskCVV = createPatternMask(\"####\");\n\n/** Data ISO (Ideal para base de dados: YYYY-MM-DD) */\nexport const maskDateISO = createDateMask({\n format: \"YYYY-MM-DD\",\n saveRaw: true,\n guide: true,\n});\n\n/** Endereço MAC (HH:HH:HH:HH:HH:HH) - Usa o token Hexadecimal */\nexport const maskMacAddress = createPatternMask(\"HH:HH:HH:HH:HH:HH\");\n\n/** Cor Hexadecimal (#HHHHHH) */\nexport const maskColorHex = createPatternMask(\"#HHHHHH\");\n\n/** IPv4 (000.000.000.000) - Formato de blocos fixos */\nexport const maskIPv4 = createPatternMask(\"###.###.###.###\");\n\n/** IPv6 (HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH) */\nexport const maskIPv6 = createPatternMask(\n \"HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH\",\n);\n\n/** * IBAN Internacional\n * Força as duas primeiras letras para maiúsculas e agrupa de 4 em 4.\n * O tamanho máximo cobre os 34 caracteres do padrão IBAN.\n */\nexport const maskIBAN = createPatternMask(\n \"UU## XXXX XXXX XXXX XXXX XXXX XXXX XXXX XX\",\n { allowChars: \" \" },\n);\n","import * as presets from \"./presets\";\nimport type { BitBuiltInMaskName, BitMask } from \"./types\";\n\nexport const bitMasks: Record<BitBuiltInMaskName, BitMask> = {\n brl: presets.maskBRL,\n usd: presets.maskUSD,\n eur: presets.maskEUR,\n gbp: presets.maskGBP,\n jpy: presets.maskJPY,\n percent: presets.maskPercent,\n decimal: presets.maskDecimal,\n int: presets.maskInteger,\n integer: presets.maskInteger,\n cpf: presets.maskCPF,\n cnpj: presets.maskCNPJ,\n cpfCnpj: presets.maskCPFCNPJ,\n rg: presets.maskRG,\n cep: presets.maskCEP,\n cnh: presets.maskCNH,\n plate: presets.maskPlate,\n phone: presets.maskPhone,\n landline: presets.maskLandline,\n date: presets.maskDate,\n time: presets.maskTime,\n usPhone: presets.maskUSPhone,\n zipCode: presets.maskZipCode,\n dateUS: presets.maskDateUS,\n ssn: presets.maskSSN,\n cc: presets.maskCreditCard,\n cvv: presets.maskCVV,\n dateISO: presets.maskDateISO,\n ip: presets.maskIPv4,\n ipv6: presets.maskIPv6,\n mac: presets.maskMacAddress,\n color: presets.maskColorHex,\n iban: presets.maskIBAN,\n};\n"],"mappings":"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","names":["tokens","unmask","value","allowChars","stringValue","isNegative","escapedChars","regex","clean","unmaskCurrency","precision","digits","numberValue","createPatternMask","pattern","options","getRawLength","p","c","sortedPatterns","a","b","getActivePattern","rawValueLength","activePattern","candidate","formatValue","stringVal","showGuide","placeholder","masked","valueIndex","i","patternChar","token","dataChar","formatted","escapedPlaceholder","placeholderRegex","createCurrencyMask","prefix","suffix","thousand","decimal","allowNegative","saveRaw","formatFn","integerPart","decimalPart","formattedInteger","sign","numericValue","finalNumber","createCreditCardMask","getCardPattern","rawValue","createDateMask","config","isISO","baseMask","day","month","year","d","m","safeString","maskBRL","createCurrencyMask","maskUSD","maskEUR","maskGBP","maskJPY","maskPercent","maskDecimal","maskInteger","maskCPF","createPatternMask","maskCNPJ","maskPhone","maskLandline","maskCEP","maskDate","createDateMask","val","cleanVal","parts","maskTime","maskCNH","maskRG","maskCPFCNPJ","maskPlate","value","raw","prefix","rest","maskUSPhone","maskZipCode","maskDateUS","maskSSN","maskCreditCard","createCreditCardMask","maskCVV","maskDateISO","maskMacAddress","maskColorHex","maskIPv4","maskIPv6","maskIBAN","bitMasks","maskBRL","maskUSD","maskEUR","maskGBP","maskJPY","maskPercent","maskDecimal","maskInteger","maskCPF","maskCNPJ","maskCPFCNPJ","maskRG","maskCEP","maskCNH","maskPlate","maskPhone","maskLandline","maskDate","maskTime","maskUSPhone","maskZipCode","maskDateUS","maskSSN","maskCreditCard","maskCVV","maskDateISO","maskIPv4","maskIPv6","maskMacAddress","maskColorHex","maskIBAN"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }var _chunkXRDTN4JGcjs = require('./chunk-XRDTN4JG.cjs');var _chunkAVUK52JWcjs = require('./chunk-AVUK52JW.cjs');var _chunkRHMJPKNVcjs = require('./chunk-RHMJPKNV.cjs');var _chunkGKNGJOB3cjs = require('./chunk-GKNGJOB3.cjs');var _chunkFTXV2NZOcjs = require('./chunk-FTXV2NZO.cjs');var _react = require('react');var _jsxruntime = require('react/jsx-runtime');var _=_react.createContext.call(void 0, null),bt= exports.a =({store:t,children:e})=>_jsxruntime.jsx.call(void 0, _.Provider,{value:_chunkXRDTN4JGcjs.d.call(void 0, t),children:e}),m= exports.b =()=>{let t=_react.useContext.call(void 0, _);if(!t)throw new Error("BitForm hooks devem ser usados dentro de um BitFormProvider");return t};function vt(){let t=m(),[e,r]=_react.useState.call(void 0, null),[i,o]=_react.useState.call(void 0, null),s=_react.useRef.call(void 0, null),u=_react.useCallback.call(void 0, p=>_chunkAVUK52JWcjs.b.call(void 0, t,p),[t]),a=_react.useCallback.call(void 0, ()=>{let p=_chunkAVUK52JWcjs.a.call(void 0, t);return s.current&&s.current.isValid===p.isValid&&s.current.isDirty===p.isDirty&&s.current.isSubmitting===p.isSubmitting?s.current:(s.current=p,p)},[t]),n=_react.useSyncExternalStore.call(void 0, u,a,a),S=_react.useMemo.call(void 0, ()=>_chunkAVUK52JWcjs.i.call(void 0, t,{clearSubmissionState:()=>{r(null),o(null)},setSubmissionResult:p=>{o(p)},setSubmissionError:p=>{r(p)}}),[t]),{controller:c,actions:P}=S,F=_react.useCallback.call(void 0, c.submit,[c]),g=_react.useCallback.call(void 0, c.onSubmit,[c]),y=_react.useCallback.call(void 0, c.reset,[c]),l=_react.useCallback.call(void 0, c.getValues,[c]),f=_react.useCallback.call(void 0, c.getErrors,[c]),b=_react.useCallback.call(void 0, c.getTouched,[c]),h=_react.useCallback.call(void 0, c.getDirtyValues,[c]),k=_react.useMemo.call(void 0, ()=>({...n,submitError:e,lastResponse:i}),[n,e,i]);return _react.useMemo.call(void 0, ()=>({meta:k,getValues:l,getErrors:f,getTouched:b,getDirtyValues:h,submit:F,onSubmit:g,reset:y,...P}),[k,l,f,b,h,F,g,y,P])}function wt(t){let e=m(),r=_react.useMemo.call(void 0, ()=>_chunkAVUK52JWcjs.g.call(void 0, e,t),[e,t]),i=_react.useRef.call(void 0, null),o=_react.useCallback.call(void 0, ()=>{let n=r.readItems();return i.current&&_chunkFTXV2NZOcjs.c.call(void 0, i.current,n)?i.current:(i.current=n,n)},[r]),s=_react.useCallback.call(void 0, n=>e.observe.subscribePath(t,()=>n()),[e,t]),u=_react.useSyncExternalStore.call(void 0, s,o,o),a=_react.useMemo.call(void 0, ()=>r.getFields(u),[r,u]);return _react.useEffect.call(void 0, ()=>()=>{_chunkAVUK52JWcjs.k.call(void 0, e,`${t}.`)},[e,t]),_react.useMemo.call(void 0, ()=>({fields:a,length:u.length,append:r.append,prepend:r.prepend,insert:r.insert,remove:r.remove,move:r.move,swap:r.swap,replace:r.replace,clear:r.clear}),[a,u.length,r])}function Dt(t){let e=m(),r=_react.useRef.call(void 0, null),i=_react.useCallback.call(void 0, ()=>{let n=e.read.getScopeStatus(t);return r.current&&_chunkRHMJPKNVcjs.b.call(void 0, r.current,n)?r.current:(r.current=n,n)},[e,t]),o=_react.useCallback.call(void 0, n=>e.observe.subscribeScopeStatus(t,()=>n()),[e,t]),s=_react.useSyncExternalStore.call(void 0, o,i,i),u=_react.useCallback.call(void 0, async()=>{let n=await e.feature.validate({scope:t}),S=e.read.getScopeErrors(t);return{valid:n,errors:S}},[e,t]),a=_react.useCallback.call(void 0, ()=>e.read.getScopeErrors(t),[e,t]);return _react.useMemo.call(void 0, ()=>({scopeName:t,status:s,errors:s.errors,validate:u,getErrors:a,isValid:!s.hasErrors,isDirty:s.isDirty}),[t,s,u,a])}function Lt(t){let e=m(),[r,i]=_react.useState.call(void 0, 0),o=_nullishCoalesce(t[r], () => ("")),s=_react.useRef.call(void 0, null),u=_react.useCallback.call(void 0, ()=>{let l=e.read.getScopeStatus(o);return s.current&&_chunkRHMJPKNVcjs.b.call(void 0, s.current,l)?s.current:(s.current=l,l)},[e,o]),a=_react.useSyncExternalStore.call(void 0, _react.useCallback.call(void 0, l=>e.observe.subscribeScopeStatus(o,()=>l()),[e,o]),u,u),n=_react.useCallback.call(void 0, async()=>{let l=await e.feature.validate({scope:o}),f=e.read.getScopeErrors(o);return{valid:l,errors:f}},[e,o]),S=_react.useCallback.call(void 0, ()=>e.read.getScopeErrors(o),[e,o]),c=_react.useCallback.call(void 0, async()=>{let l=e.read.getScopeFields(o);if(e.feature.hasValidationsInProgress(l))return!1;let f=await e.feature.validate({scope:o});if(f)i(b=>Math.min(b+1,t.length-1));else{let b=e.read.getScopeErrors(o),h=Object.keys(b);h.length>0&&e.write.markFieldsTouched(h)}return f},[e,o,t.length]),P=_react.useCallback.call(void 0, ()=>{i(l=>Math.max(l-1,0))},[]),F=_react.useCallback.call(void 0, l=>{i(Math.max(0,Math.min(l-1,t.length-1)))},[t.length]),g=r===0,y=r>=t.length-1;return _react.useMemo.call(void 0, ()=>({step:r+1,stepIndex:r,scope:o,next:c,prev:P,goTo:F,isFirst:g,isLast:y,status:a,errors:a.errors,isValid:!a.hasErrors,isDirty:a.isDirty,validate:n,getErrors:S}),[r,o,c,P,F,g,y,a,n,S])}function Ht(t){let e=m(),r=_react.useRef.call(void 0, null),i=_react.useCallback.call(void 0, ()=>{let s=_chunkFTXV2NZOcjs.f.call(void 0, e.read.getState().values,t);return r.current!==null&&_chunkFTXV2NZOcjs.c.call(void 0, r.current,s)?r.current:(r.current=s,s)},[e,t]),o=_react.useCallback.call(void 0, s=>e.observe.subscribePath(t,()=>s()),[e,t]);return _react.useSyncExternalStore.call(void 0, o,i,i)}function Yt(){let t=m(),e=_react.useCallback.call(void 0, a=>_chunkAVUK52JWcjs.e.call(void 0, t,a),[t]),r=_react.useSyncExternalStore.call(void 0, e,()=>_chunkAVUK52JWcjs.d.call(void 0, t),()=>_chunkAVUK52JWcjs.d.call(void 0, t)),i=_react.useCallback.call(void 0, async()=>t.feature.restorePersisted(),[t]),o=_react.useCallback.call(void 0, async()=>{await t.feature.forceSave()},[t]),s=_react.useCallback.call(void 0, async()=>{await t.feature.clearPersisted()},[t]),u=_react.useMemo.call(void 0, ()=>({isSaving:r.isSaving,isRestoring:r.isRestoring,error:r.error}),[r]);return _react.useMemo.call(void 0, ()=>({restore:i,save:o,clear:s,meta:u}),[i,o,s,u])}function ne(t){let e=m(),r=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>()=>_chunkAVUK52JWcjs.j.call(void 0, e,t),[e,t]);let i=_react.useCallback.call(void 0, ()=>{let n=e.read.getFieldState(t),S=_chunkGKNGJOB3cjs.a.call(void 0, n,r.current);return r.current=S,S},[e,t]),o=_react.useCallback.call(void 0, n=>e.observe.subscribeFieldState(t,()=>n()),[e,t]),s=_react.useSyncExternalStore.call(void 0, o,i,i),u=_react.useCallback.call(void 0, n=>e.write.setField(t,n),[e,t]),a=_react.useCallback.call(void 0, ()=>e.write.blurField(t),[e,t]);return{fieldState:s,setValue:u,setBlur:a,store:e}}exports.a = bt; exports.b = m; exports.c = vt; exports.d = ne; exports.e = wt; exports.f = Dt; exports.g = Lt; exports.h = Ht; exports.i = Yt;
2
+ //# sourceMappingURL=chunk-QLF2QLII.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/chunk-QLF2QLII.cjs","../src/react/context.tsx","../src/react/use-bit-form.ts","../src/react/use-bit-array.ts"],"names":["BitContext","createContext","BitFormProvider","store","children","jsx","createFrameworkStoreAdapter","useBitStore","useContext","useBitForm","submitError","setSubmitError","useState","lastResponse","setLastResponse","lastMeta","useRef","subscribeMeta","useCallback","cb","subscribeFormMetaSnapshot","getMetaSnapshot","nextMeta","readFormMetaSnapshot","metaState","useSyncExternalStore","binding","useMemo","createFrameworkFormBinding","result","error","controller","actions","submit","onSubmit","reset","getValues","getErrors","getTouched","getDirtyValues","meta","useBitArray","path","createArrayBinding","lastSnapshotRef","getSnapshot","next","valueEqual","subscribeArray","data","fields","useEffect","cleanupRegisteredPrefix"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/chunk-QLF2QLII.cjs","sourcesContent":[null,"import React, { createContext, useContext } from \"react\";\nimport type { BitFrameworkStoreApi, BitStoreApi } from \"../core\";\nimport { createFrameworkStoreAdapter } from \"../core\";\n\nconst BitContext = createContext<BitFrameworkStoreApi<any> | null>(null);\n\ninterface BitFormProviderProps<T extends object> {\n store: BitFrameworkStoreApi<T> | BitStoreApi<T>;\n children: React.ReactNode;\n}\n\ninterface BitFormProviderRuntimeProps {\n store: unknown;\n children: React.ReactNode;\n}\n\ntype BitFormProviderComponent = {\n <T extends object>(props: BitFormProviderProps<T>): React.ReactElement;\n (props: BitFormProviderRuntimeProps): React.ReactElement;\n};\n\nexport const BitFormProvider: BitFormProviderComponent = ({\n store,\n children,\n}: BitFormProviderRuntimeProps) => {\n return (\n <BitContext.Provider value={createFrameworkStoreAdapter(store)}>\n {children}\n </BitContext.Provider>\n );\n};\n\nexport const useBitStore = <T extends object>() => {\n const store = useContext(BitContext);\n if (!store)\n throw new Error(\n \"BitForm hooks devem ser usados dentro de um BitFormProvider\",\n );\n return store as BitFrameworkStoreApi<T>;\n};\n","import {\n useCallback,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport {\n createFrameworkFormBinding,\n readFormMetaSnapshot,\n subscribeFormMetaSnapshot,\n} from \"../core\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitFormResult } from \"./types\";\n\nexport function useBitForm<T extends object>(): UseBitFormResult<T> {\n const store = useBitStore<T>();\n\n const [submitError, setSubmitError] = useState<Error | null>(null);\n const [lastResponse, setLastResponse] = useState<unknown>(null);\n const lastMeta = useRef<ReturnType<typeof readFormMetaSnapshot<T>> | null>(\n null,\n );\n\n const subscribeMeta = useCallback(\n (cb: () => void) => subscribeFormMetaSnapshot(store, cb),\n [store],\n );\n const getMetaSnapshot = useCallback(() => {\n const nextMeta = readFormMetaSnapshot(store);\n\n if (\n lastMeta.current &&\n lastMeta.current.isValid === nextMeta.isValid &&\n lastMeta.current.isDirty === nextMeta.isDirty &&\n lastMeta.current.isSubmitting === nextMeta.isSubmitting\n ) {\n return lastMeta.current;\n }\n\n lastMeta.current = nextMeta;\n return nextMeta;\n }, [store]);\n\n const metaState = useSyncExternalStore(\n subscribeMeta,\n getMetaSnapshot,\n getMetaSnapshot,\n );\n\n const binding = useMemo(\n () =>\n createFrameworkFormBinding(store, {\n clearSubmissionState: () => {\n setSubmitError(null);\n setLastResponse(null);\n },\n setSubmissionResult: (result) => {\n setLastResponse(result);\n },\n setSubmissionError: (error) => {\n setSubmitError(error);\n },\n }),\n [store],\n );\n\n const { controller, actions } = binding;\n\n const submit = useCallback(controller.submit, [controller]);\n const onSubmit = useCallback(controller.onSubmit, [controller]);\n const reset = useCallback(controller.reset, [controller]);\n\n const getValues = useCallback(controller.getValues, [controller]);\n const getErrors = useCallback(controller.getErrors, [controller]);\n const getTouched = useCallback(controller.getTouched, [controller]);\n const getDirtyValues = useCallback(controller.getDirtyValues, [controller]);\n\n const meta = useMemo(\n () => ({\n ...metaState,\n submitError,\n lastResponse,\n }),\n [metaState, submitError, lastResponse],\n );\n\n return useMemo(\n () => ({\n // Metadata (grouped)\n meta,\n // Getters\n getValues,\n getErrors,\n getTouched,\n getDirtyValues,\n // Main actions (frequent use - flat)\n submit,\n onSubmit,\n reset,\n ...actions,\n }),\n [\n meta,\n getValues,\n getErrors,\n getTouched,\n getDirtyValues,\n submit,\n onSubmit,\n reset,\n actions,\n ],\n );\n}\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n} from \"react\";\nimport {\n BitArrayPath,\n cleanupRegisteredPrefix,\n createArrayBinding,\n valueEqual,\n} from \"../core\";\nimport { useBitStore } from \"./context\";\n\nexport function useBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = useBitStore<TForm>();\n const controller = useMemo(\n () => createArrayBinding<TForm, P>(store, path),\n [store, path],\n );\n type ArraySnapshot = ReturnType<typeof controller.readItems>;\n const lastSnapshotRef = useRef<ArraySnapshot | null>(null);\n\n const getSnapshot = useCallback(() => {\n const next = controller.readItems();\n\n if (lastSnapshotRef.current && valueEqual(lastSnapshotRef.current, next)) {\n return lastSnapshotRef.current;\n }\n\n lastSnapshotRef.current = next;\n return next;\n }, [controller]);\n\n const subscribeArray = useCallback(\n (cb: () => void) => store.observe.subscribePath(path, () => cb()),\n [store, path],\n );\n\n const data = useSyncExternalStore(subscribeArray, getSnapshot, getSnapshot);\n\n const fields = useMemo(() => controller.getFields(data), [controller, data]);\n\n useEffect(() => {\n return () => {\n cleanupRegisteredPrefix(store, `${path as string}.`);\n };\n }, [store, path]);\n\n return useMemo(\n () => ({\n fields,\n length: data.length,\n append: controller.append,\n prepend: controller.prepend,\n insert: controller.insert,\n remove: controller.remove,\n move: controller.move,\n swap: controller.swap,\n replace: controller.replace,\n clear: controller.clear,\n }),\n [fields, data.length, controller],\n );\n}\n"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});function t(r){try{r()}catch (e2){}}function l(r,i,e){let n=0;return async o=>{if(!o)return;let a=++n;t(()=>e.setLoading(!0)),t(()=>e.setError(r,void 0));try{let d=await i(o);if(a!==n)return;t(()=>e.setValue(d.url)),t(()=>e.setUploadKey(d.key)),t(()=>e.setError(r,void 0))}catch(d){if(a!==n)return;let s=d instanceof Error?d.message:"Upload failed";t(()=>e.setError(r,s))}finally{a===n&&t(()=>e.setLoading(!1))}}}function u(r,i,e){return async()=>{let n=e.getUploadKey();if(n&&i)try{await i(n)}catch(o){let a=o instanceof Error?o.message:"Delete failed";e.setError(r,a);return}e.setValue(null),e.setUploadKey(null),e.setError(r,void 0)}}exports.a = l; exports.b = u;
2
+ //# sourceMappingURL=chunk-WLOKGOW6.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/adapters/upload-kernel.ts"],"names":["safeCallbackExecution","fn","createUploadHandler","fieldPath","uploadFn","callbacks","currentGeneration","file","myGeneration","result","error","message","createRemoveHandler","deleteFile","uploadKey"],"mappings":"AAqCA,kFAASA,CAAAA,CAAsBC,CAAAA,CAAsB,CACnD,GAAI,CACFA,CAAAA,CAAG,CACL,CAAA,UAAQ,CAER,CACF,CAEO,SAASC,CAAAA,CAGdC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACkD,CAClD,IAAIC,CAAAA,CAAoB,CAAA,CACxB,OAAO,MAAOC,CAAAA,EAAS,CACrB,EAAA,CAAI,CAACA,CAAAA,CAAM,MAAA,CAEX,IAAMC,CAAAA,CAAe,EAAEF,CAAAA,CACvBN,CAAAA,CAAsB,CAAA,CAAA,EAAMK,CAAAA,CAAU,UAAA,CAAW,CAAA,CAAI,CAAC,CAAA,CACtDL,CAAAA,CAAsB,CAAA,CAAA,EAAMK,CAAAA,CAAU,QAAA,CAASF,CAAAA,CAAW,KAAA,CAAS,CAAC,CAAA,CAEpE,GAAI,CACF,IAAMM,CAAAA,CAAS,MAAML,CAAAA,CAASG,CAAI,CAAA,CAElC,EAAA,CAAIC,CAAAA,GAAiBF,CAAAA,CAAmB,MAAA,CACxCN,CAAAA,CAAsB,CAAA,CAAA,EAAMK,CAAAA,CAAU,QAAA,CAASI,CAAAA,CAAO,GAAG,CAAC,CAAA,CAC1DT,CAAAA,CAAsB,CAAA,CAAA,EAAMK,CAAAA,CAAU,YAAA,CAAaI,CAAAA,CAAO,GAAG,CAAC,CAAA,CAC9DT,CAAAA,CAAsB,CAAA,CAAA,EAAMK,CAAAA,CAAU,QAAA,CAASF,CAAAA,CAAW,KAAA,CAAS,CAAC,CACtE,CAAA,KAAA,CAASO,CAAAA,CAAO,CACd,EAAA,CAAIF,CAAAA,GAAiBF,CAAAA,CAAmB,MAAA,CACxC,IAAMK,CAAAA,CAAUD,EAAAA,WAAiB,KAAA,CAAQA,CAAAA,CAAM,OAAA,CAAU,eAAA,CACzDV,CAAAA,CAAsB,CAAA,CAAA,EAAMK,CAAAA,CAAU,QAAA,CAASF,CAAAA,CAAWQ,CAAO,CAAC,CACpE,CAAA,OAAE,CACIH,CAAAA,GAAiBF,CAAAA,EACnBN,CAAAA,CAAsB,CAAA,CAAA,EAAMK,CAAAA,CAAU,UAAA,CAAW,CAAA,CAAK,CAAC,CAE3D,CACF,CACF,CAKO,SAASO,CAAAA,CACdT,CAAAA,CACAU,CAAAA,CACAR,CAAAA,CACqB,CACrB,OAAO,KAAA,CAAA,CAAA,EAAY,CACjB,IAAMS,CAAAA,CAAYT,CAAAA,CAAU,YAAA,CAAa,CAAA,CAEzC,EAAA,CAAIS,CAAAA,EAAaD,CAAAA,CACf,GAAI,CACF,MAAMA,CAAAA,CAAWC,CAAS,CAC5B,CAAA,KAAA,CAASJ,CAAAA,CAAO,CACd,IAAMC,CAAAA,CACJD,EAAAA,WAAiB,KAAA,CAAQA,CAAAA,CAAM,OAAA,CAAU,eAAA,CAC3CL,CAAAA,CAAU,QAAA,CAASF,CAAAA,CAAWQ,CAAO,CAAA,CACrC,MACF,CAGFN,CAAAA,CAAU,QAAA,CAAS,IAAI,CAAA,CACvBA,CAAAA,CAAU,YAAA,CAAa,IAAI,CAAA,CAC3BA,CAAAA,CAAU,QAAA,CAASF,CAAAA,CAAW,KAAA,CAAS,CACzC,CACF,CAAA,6BAAA","file":"/home/runner/work/bit-form/bit-form/dist/chunk-WLOKGOW6.cjs","sourcesContent":["/**\n * Framework-agnostic upload kernel.\n *\n * Encapsulates the side-effect logic for uploading/removing files so that\n * React, Vue, and Angular adapters share a single implementation and only\n * differ in how they wire reactive state.\n */\n\nimport type { BitDeleteUploadFn, BitUploadFn } from \"../types/upload\";\n\nexport interface UploadKernelCallbacks {\n /** Called with `true` when upload starts and `false` when it finishes. */\n setLoading: (loading: boolean) => void;\n /** Set or clear a field-level error message. */\n setError: (path: string, message: string | undefined) => void;\n /** Set the stored file URL after a successful upload (or `null` on remove). */\n setValue: (value: string | null) => void;\n /** Return the key of the last uploaded file (used when deleting). */\n getUploadKey: () => string | null;\n /** Persist the upload key returned by the upload function. */\n setUploadKey: (key: string | null) => void;\n}\n\n/**\n * Creates a type-safe `upload` handler for a field.\n *\n * @example\n * ```ts\n * const upload = createUploadHandler(\"avatar\", myUploadFn, {\n * setLoading: (v) => (isUploading.value = v),\n * setError: (p, m) => store.setError(p, m),\n * setValue: (v) => field.setValue(v),\n * getUploadKey: () => uploadKey,\n * setUploadKey: (k) => (uploadKey = k),\n * });\n * ```\n */\nfunction safeCallbackExecution(fn: () => void): void {\n try {\n fn();\n } catch {\n // Silently swallow callback errors to maintain upload state consistency\n }\n}\n\nexport function createUploadHandler<\n TMetadata extends Record<string, unknown> = Record<string, unknown>,\n>(\n fieldPath: string,\n uploadFn: BitUploadFn<TMetadata>,\n callbacks: UploadKernelCallbacks,\n): (file: File | null | undefined) => Promise<void> {\n let currentGeneration = 0;\n return async (file) => {\n if (!file) return;\n\n const myGeneration = ++currentGeneration;\n safeCallbackExecution(() => callbacks.setLoading(true));\n safeCallbackExecution(() => callbacks.setError(fieldPath, undefined));\n\n try {\n const result = await uploadFn(file);\n\n if (myGeneration !== currentGeneration) return;\n safeCallbackExecution(() => callbacks.setValue(result.url));\n safeCallbackExecution(() => callbacks.setUploadKey(result.key));\n safeCallbackExecution(() => callbacks.setError(fieldPath, undefined));\n } catch (error) {\n if (myGeneration !== currentGeneration) return;\n const message = error instanceof Error ? error.message : \"Upload failed\";\n safeCallbackExecution(() => callbacks.setError(fieldPath, message));\n } finally {\n if (myGeneration === currentGeneration) {\n safeCallbackExecution(() => callbacks.setLoading(false));\n }\n }\n };\n}\n\n/**\n * Creates a type-safe `remove` handler for a field.\n */\nexport function createRemoveHandler(\n fieldPath: string,\n deleteFile: BitDeleteUploadFn | undefined,\n callbacks: UploadKernelCallbacks,\n): () => Promise<void> {\n return async () => {\n const uploadKey = callbacks.getUploadKey();\n\n if (uploadKey && deleteFile) {\n try {\n await deleteFile(uploadKey);\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Delete failed\";\n callbacks.setError(fieldPath, message);\n return;\n }\n }\n\n callbacks.setValue(null);\n callbacks.setUploadKey(null);\n callbacks.setError(fieldPath, undefined);\n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var X={"#":/\d/,A:/[a-zA-Z]/,X:/[a-zA-Z0-9]/,H:/[0-9a-fA-F]/,U:/[A-Z]/,L:/[a-z]/,"*":/./},h= exports.a =(s,r)=>{if(s==null||s==="")return"";let e=String(s),i=e.startsWith("-"),a=r?r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"):"",c=new RegExp(`[^a-zA-Z0-9${a}]`,"g"),m=e.replace(c,"");return i&&m&&!m.startsWith("-")?`-${m}`:m},te= exports.b =(s,r=2)=>{if(typeof s=="number")return s;if(!s)return 0;let e=String(s),i=e.includes("-"),a=e.replace(/\D/g,"");if(!a)return 0;let c=parseInt(a,10)/Math.pow(10,r);return i?-c:c},n= exports.c =(s,r)=>{let e=o=>o.split("").filter(t=>X[t]).length,a=[...Array.isArray(s)?s:[s]].sort((o,t)=>e(o)-e(t)),c=o=>{let t=a[a.length-1];for(let p of a)if(o<=e(p)){t=p;break}return t},m=o=>{let t=h(o,_optionalChain([r, 'optionalAccess', _2 => _2.allowChars]));if(!t&&!_optionalChain([r, 'optionalAccess', _3 => _3.guide]))return"";let p=c(t.length),k=_optionalChain([r, 'optionalAccess', _4 => _4.guide])||!1,d=_optionalChain([r, 'optionalAccess', _5 => _5.placeholderChar])||"_",g="",x=0;for(let f=0;f<p.length;f++){let H=p[f],C=X[H];if(x<t.length){let u=t[x];if(C)if(H==="U"&&(u=u.toUpperCase()),H==="L"&&(u=u.toLowerCase()),C.test(u))g+=u,x++;else if(k)g+=d;else break;else g+=H,u===H&&x++}else if(k)g+=C?d:H;else break}return g};return{format:m,parse:o=>{if(_optionalChain([r, 'optionalAccess', _6 => _6.customParse]))return r.customParse(o);let t=m(o);if(_optionalChain([r, 'optionalAccess', _7 => _7.saveRaw])){if(_optionalChain([r, 'optionalAccess', _8 => _8.guide])){let k=(r.placeholderChar||"_").replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=new RegExp(k,"g");return t.replace(d,"")}return t}return h(t,_optionalChain([r, 'optionalAccess', _9 => _9.allowChars]))}}},l= exports.d =({prefix:s="",suffix:r="",thousand:e,decimal:i,precision:a=2,allowNegative:c=!0,saveRaw:m=!1})=>{let o=t=>{if(t==null||t==="")return"";let p=typeof t=="number"?Math.abs(t).toFixed(a).replace(/\D/g,""):String(t).replace(/\D/g,"");if(!p&&String(t).includes("-")&&c)return"-";if(!p)return"";p=p.padStart(a+1,"0");let k=a>0?p.slice(0,-a).replace(/^0+(?=\d)/,"")||"0":p.replace(/^0+(?=\d)/,"")||"0",d=a>0?p.slice(-a):"",g=k.replace(/\B(?=(\d{3})+(?!\d))/g,e),f=(typeof t=="number"?t<0:String(t).includes("-"))&&c?"-":"";return a===0?`${f}${s}${g}${r}`:`${f}${s}${g}${i}${d}${r}`};return{format:o,parse:t=>{let p=te(t,a),k=c?p:Math.abs(p);return m?o(k):k}}},$= exports.e =s=>{let r=e=>/^3[47]/.test(e)?"#### ###### #####":/^3(?:0[0-5]|[68])/.test(e)?"#### ###### ####":"#### #### #### ####";return{format:e=>{let i=h(e,_optionalChain([s, 'optionalAccess', _10 => _10.allowChars])),a=r(i);return n(a,s).format(e)},parse:e=>{let i=h(e,_optionalChain([s, 'optionalAccess', _11 => _11.allowChars])),a=r(i);return n(a,s).parse(e)}}},M= exports.f =s=>{let e=(_optionalChain([s, 'optionalAccess', _12 => _12.format])||"DD/MM/YYYY")==="YYYY-MM-DD",i=n(e?"####-##-##":"##/##/####",s);return{format:a=>{let c=h(a);if(!c)return"";let m,o,t;if(e?(t=c.substring(0,4),o=c.substring(4,6),m=c.substring(6,8)):(m=c.substring(0,2),o=c.substring(2,4),t=c.substring(4,8)),m.length===2){let k=parseInt(m,10);k>31&&(m="31"),k===0&&(m="01")}if(o.length===2){let k=parseInt(o,10);k>12&&(o="12"),k===0&&(o="01")}let p=e?`${t}${o}${m}`:`${m}${o}${t}`;return i.format(p)},parse:a=>i.parse(a)}};var D=l({prefix:"R$ ",thousand:".",decimal:",",precision:2}),b= exports.h =l({prefix:"$",thousand:",",decimal:".",precision:2}),y= exports.i =l({suffix:" \u20AC",thousand:".",decimal:",",precision:2}),S= exports.j =l({prefix:"\xA3",thousand:",",decimal:".",precision:2}),B= exports.k =l({prefix:"\xA5",thousand:",",decimal:".",precision:0}),I= exports.l =l({suffix:"%",thousand:".",decimal:",",precision:1}),Y= exports.m =l({thousand:".",decimal:",",precision:2}),P= exports.n =l({thousand:".",decimal:",",precision:0}),A= exports.o =n("###.###.###-##"),R= exports.p =n("##.###.###/####-##"),U= exports.q =n(["(##) ####-####","(##) #####-####"]),N= exports.r =n("(##) ####-####"),V= exports.s =n("#####-###"),w= exports.t =M({format:"DD/MM/YYYY",guide:!0,customParse:s=>{let r=s.replace(/_/g,""),e=r.split("/");return e.length===3&&e[2].length===4?`${e[2]}-${e[1]}-${e[0]}`:r.replace(/\D/g,"")}}),Z= exports.u =n("##:##"),L= exports.v =n("###########"),z= exports.w =n("##.###.###-X"),E= exports.x =n(["###.###.###-##","##.###.###/####-##"]),F= exports.y ={format(s){let r=String(_nullishCoalesce(s, () => (""))).replace(/[^a-zA-Z0-9]/g,"").toUpperCase().slice(0,7);if(r.length===0)return"";let e=r.slice(0,3),i=r.slice(3);return i.length===0?e:i.length>=2&&/[A-Z]/.test(i[1])?`${e}${i}`:`${e}-${i}`},parse(s){return String(_nullishCoalesce(s, () => (""))).replace(/[^a-zA-Z0-9]/g,"").toUpperCase().slice(0,7)}},O= exports.z =n("(###) ###-####"),J= exports.A =n("#####-####"),T= exports.B =n("##/##/####"),G= exports.C =n("###-##-####"),j= exports.D =$(),_= exports.E =n("####"),W= exports.F =M({format:"YYYY-MM-DD",saveRaw:!0,guide:!0}),q= exports.G =n("HH:HH:HH:HH:HH:HH"),K= exports.H =n("#HHHHHH"),Q= exports.I =n("###.###.###.###"),v= exports.J =n("HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH"),ee= exports.K =n("UU## XXXX XXXX XXXX XXXX XXXX XXXX XXXX XX",{allowChars:" "});var ne={brl:D,usd:b,eur:y,gbp:S,jpy:B,percent:I,decimal:Y,int:P,integer:P,cpf:A,cnpj:R,cpfCnpj:E,rg:z,cep:V,cnh:L,plate:F,phone:U,landline:N,date:w,time:Z,usPhone:O,zipCode:J,dateUS:T,ssn:G,cc:j,cvv:_,dateISO:W,ip:Q,ipv6:v,mac:q,color:K,iban:ee};exports.a = h; exports.b = te; exports.c = n; exports.d = l; exports.e = $; exports.f = M; exports.g = D; exports.h = b; exports.i = y; exports.j = S; exports.k = B; exports.l = I; exports.m = Y; exports.n = P; exports.o = A; exports.p = R; exports.q = U; exports.r = N; exports.s = V; exports.t = w; exports.u = Z; exports.v = L; exports.w = z; exports.x = E; exports.y = F; exports.z = O; exports.A = J; exports.B = T; exports.C = G; exports.D = j; exports.E = _; exports.F = W; exports.G = q; exports.H = K; exports.I = Q; exports.J = v; exports.K = ee; exports.L = ne;
2
+ //# sourceMappingURL=chunk-WRNR6SXK.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/mask/creators.ts"],"names":["tokens","unmask","value","allowChars","stringValue","isNegative","escapedChars","regex","clean"],"mappings":"AASA,qrBAAMA,CAAAA,CAAmB,CACvB,GAAA,CAAK,IAAA,CACL,CAAA,CAAG,UAAA,CACH,CAAA,CAAG,aAAA,CACH,CAAA,CAAG,aAAA,CACH,CAAA,CAAG,OAAA,CACH,CAAA,CAAG,OAAA,CACH,GAAA,CAAK,GACP,CAAA,CAEaC,CAAAA,aAAS,CACpBC,CAAAA,CACAC,CAAAA,CAAAA,EACW,CACX,EAAA,CAAID,CAAAA,EAAU,IAAA,EAA+BA,CAAAA,GAAU,EAAA,CAAI,MAAO,EAAA,CAClE,IAAME,CAAAA,CAAc,MAAA,CAAOF,CAAK,CAAA,CAC1BG,CAAAA,CAAaD,CAAAA,CAAY,UAAA,CAAW,GAAG,CAAA,CAEvCE,CAAAA,CAAeH,CAAAA,CACjBA,CAAAA,CAAW,OAAA,CAAQ,qBAAA,CAAuB,MAAM,CAAA,CAChD,EAAA,CACEI,CAAAA,CAAQ,IAAI,MAAA,CAAO,CAAA,WAAA,EAAcD,CAAY,CAAA,CAAA,CAAA,CAAK,GAAG,CAAA,CAErDE,CAAAA,CAAQJ,CAAAA,CAAY,OAAA,CAAQG,CAAAA,CAAO,EAAE,CAAA,CAC3C,OAAOF,CAAAA,EAAcG,CAAAA,EAAS,CAACA,CAAAA,CAAM,UAAA,CAAW,GAAG,CAAA,CAAI,CAAA,CAAA,EAAIA,CAAK,CAAA,CAAA","file":"/home/runner/work/bit-form/bit-form/dist/chunk-WRNR6SXK.cjs","sourcesContent":["import {\n BitMask,\n CurrencyMaskConfig,\n DateMaskConfig,\n PatternMaskOptions,\n} from \"./types\";\n\ntype TokenMap = Record<string, RegExp>;\n\nconst tokens: TokenMap = {\n \"#\": /\\d/,\n A: /[a-zA-Z]/,\n X: /[a-zA-Z0-9]/,\n H: /[0-9a-fA-F]/,\n U: /[A-Z]/,\n L: /[a-z]/,\n \"*\": /./,\n};\n\nexport const unmask = (\n value: string | number | null | undefined,\n allowChars?: string,\n): string => {\n if (value === null || value === undefined || value === \"\") return \"\";\n const stringValue = String(value);\n const isNegative = stringValue.startsWith(\"-\");\n\n const escapedChars = allowChars\n ? allowChars.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n : \"\";\n const regex = new RegExp(`[^a-zA-Z0-9${escapedChars}]`, \"g\");\n\n const clean = stringValue.replace(regex, \"\");\n return isNegative && clean && !clean.startsWith(\"-\") ? `-${clean}` : clean;\n};\n\nexport const unmaskCurrency = (value: any, precision = 2): number => {\n if (typeof value === \"number\") return value;\n if (!value) return 0;\n\n const stringValue = String(value);\n const isNegative = stringValue.includes(\"-\");\n const digits = stringValue.replace(/\\D/g, \"\");\n\n if (!digits) return 0;\n\n const numberValue = parseInt(digits, 10) / Math.pow(10, precision);\n return isNegative ? -numberValue : numberValue;\n};\n\nexport const createPatternMask = (\n pattern: string | string[],\n options?: PatternMaskOptions,\n): BitMask => {\n const getRawLength = (p: string) =>\n p.split(\"\").filter((c) => tokens[c]).length;\n\n const patterns = Array.isArray(pattern) ? pattern : [pattern];\n const sortedPatterns = [...patterns].sort(\n (a, b) => getRawLength(a) - getRawLength(b),\n );\n\n const getActivePattern = (rawValueLength: number) => {\n let activePattern = sortedPatterns[sortedPatterns.length - 1];\n for (const candidate of sortedPatterns) {\n if (rawValueLength <= getRawLength(candidate)) {\n activePattern = candidate;\n break;\n }\n }\n return activePattern;\n };\n\n const formatValue = (value: string | number | null | undefined): string => {\n const stringVal = unmask(value, options?.allowChars);\n\n if (!stringVal && !options?.guide) {\n return \"\";\n }\n\n const activePattern = getActivePattern(stringVal.length);\n const showGuide = options?.guide || false;\n const placeholder = options?.placeholderChar || \"_\";\n\n let masked = \"\";\n let valueIndex = 0;\n\n for (let i = 0; i < activePattern.length; i++) {\n const patternChar = activePattern[i];\n const token = tokens[patternChar];\n\n if (valueIndex < stringVal.length) {\n let dataChar = stringVal[valueIndex];\n\n if (token) {\n if (patternChar === \"U\") dataChar = dataChar.toUpperCase();\n if (patternChar === \"L\") dataChar = dataChar.toLowerCase();\n\n if (token.test(dataChar)) {\n masked += dataChar;\n valueIndex++;\n } else if (showGuide) {\n masked += placeholder;\n } else {\n break;\n }\n } else {\n masked += patternChar;\n if (dataChar === patternChar) valueIndex++;\n }\n } else if (showGuide) {\n masked += token ? placeholder : patternChar;\n } else {\n break;\n }\n }\n\n return masked;\n };\n\n return {\n format: formatValue,\n parse: (value: string) => {\n if (options?.customParse) return options.customParse(value);\n\n const formatted = formatValue(value);\n\n if (options?.saveRaw) {\n if (options?.guide) {\n const placeholder = options.placeholderChar || \"_\";\n const escapedPlaceholder = placeholder.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n \"\\\\$&\",\n );\n const placeholderRegex = new RegExp(escapedPlaceholder, \"g\");\n\n return formatted.replace(placeholderRegex, \"\");\n }\n\n return formatted;\n }\n\n return unmask(formatted, options?.allowChars);\n },\n };\n};\n\nexport const createCurrencyMask = ({\n prefix = \"\",\n suffix = \"\",\n thousand,\n decimal,\n precision = 2,\n allowNegative = true,\n saveRaw = false,\n}: CurrencyMaskConfig): BitMask => {\n const formatFn = (value: any) => {\n if (value === undefined || value === null || value === \"\") return \"\";\n\n let stringValue =\n typeof value === \"number\"\n ? Math.abs(value).toFixed(precision).replace(/\\D/g, \"\")\n : String(value).replace(/\\D/g, \"\");\n\n if (!stringValue && String(value).includes(\"-\") && allowNegative)\n return \"-\";\n if (!stringValue) return \"\";\n\n stringValue = stringValue.padStart(precision + 1, \"0\");\n\n const integerPart =\n precision > 0\n ? stringValue.slice(0, -precision).replace(/^0+(?=\\d)/, \"\") || \"0\"\n : stringValue.replace(/^0+(?=\\d)/, \"\") || \"0\";\n const decimalPart = precision > 0 ? stringValue.slice(-precision) : \"\";\n\n const formattedInteger = integerPart.replace(\n /\\B(?=(\\d{3})+(?!\\d))/g,\n thousand,\n );\n\n const isNegative =\n typeof value === \"number\" ? value < 0 : String(value).includes(\"-\");\n const sign = isNegative && allowNegative ? \"-\" : \"\";\n\n if (precision === 0) {\n return `${sign}${prefix}${formattedInteger}${suffix}`;\n }\n\n return `${sign}${prefix}${formattedInteger}${decimal}${decimalPart}${suffix}`;\n };\n\n return {\n format: formatFn,\n parse: (value: string) => {\n const numericValue = unmaskCurrency(value, precision);\n const finalNumber = !allowNegative\n ? Math.abs(numericValue)\n : numericValue;\n if (saveRaw) return formatFn(finalNumber);\n return finalNumber;\n },\n };\n};\n\nexport const createCreditCardMask = (options?: PatternMaskOptions): BitMask => {\n // Função auxiliar para descobrir o padrão dinamicamente\n const getCardPattern = (rawValue: string) => {\n // Amex (American Express) começa com 34 ou 37 -> 15 dígitos\n if (/^3[47]/.test(rawValue)) {\n return \"#### ###### #####\";\n }\n // Diners Club começa com 300-305, 36 ou 38 -> 14 dígitos\n if (/^3(?:0[0-5]|[68])/.test(rawValue)) {\n return \"#### ###### ####\";\n }\n // Default: Visa, Mastercard, Discover, Elo, etc -> 16 dígitos\n return \"#### #### #### ####\";\n };\n\n return {\n format: (value: any) => {\n const stringVal = unmask(value, options?.allowChars);\n const pattern = getCardPattern(stringVal);\n const mask = createPatternMask(pattern, options);\n return mask.format(value);\n },\n parse: (value: string) => {\n const stringVal = unmask(value, options?.allowChars);\n const pattern = getCardPattern(stringVal);\n\n const mask = createPatternMask(pattern, options);\n return mask.parse(value);\n },\n };\n};\n\nexport const createDateMask = (config?: DateMaskConfig): BitMask => {\n const formatType = config?.format || \"DD/MM/YYYY\";\n const isISO = formatType === \"YYYY-MM-DD\";\n\n // Criamos a máscara base consoante o formato escolhido\n const baseMask = createPatternMask(\n isISO ? \"####-##-##\" : \"##/##/####\",\n config,\n );\n\n return {\n format: (value: any) => {\n let stringVal = unmask(value);\n if (!stringVal) return \"\";\n\n let day: string;\n let month: string;\n let year: string;\n\n // Separamos os componentes consoante o que o utilizador já digitou\n if (isISO) {\n year = stringVal.substring(0, 4);\n month = stringVal.substring(4, 6);\n day = stringVal.substring(6, 8);\n } else {\n day = stringVal.substring(0, 2);\n month = stringVal.substring(2, 4);\n year = stringVal.substring(4, 8);\n }\n\n // Validação do Dia (01 a 31)\n if (day.length === 2) {\n const d = parseInt(day, 10);\n if (d > 31) day = \"31\";\n if (d === 0) day = \"01\";\n }\n\n // Validação do Mês (01 a 12)\n if (month.length === 2) {\n const m = parseInt(month, 10);\n if (m > 12) month = \"12\";\n if (m === 0) month = \"01\";\n }\n\n // Reconstruímos a string limpa e passamos para o pattern normal\n const safeString = isISO\n ? `${year}${month}${day}`\n : `${day}${month}${year}`;\n\n return baseMask.format(safeString);\n },\n parse: (value: string) => {\n // Usamos a funcionalidade completa da máscara base (incluindo o saveRaw e o unmasking)\n return baseMask.parse(value);\n },\n };\n};\n"]}