@lehnihon/bit-form 2.2.27 → 2.2.29

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 (46) hide show
  1. package/dist/angular/index.cjs +1 -1
  2. package/dist/angular/index.cjs.map +1 -1
  3. package/dist/angular/index.js +1 -1
  4. package/dist/angular/index.js.map +1 -1
  5. package/dist/{chunk-WYYVVM2C.js → chunk-4U32VQD5.js} +2 -2
  6. package/dist/chunk-FF6WALLN.js +2 -0
  7. package/dist/chunk-FF6WALLN.js.map +1 -0
  8. package/dist/chunk-K3QLAMDG.cjs +2 -0
  9. package/dist/{chunk-U6UFULNS.cjs.map → chunk-K3QLAMDG.cjs.map} +1 -1
  10. package/dist/chunk-KEINCG6A.js +2 -0
  11. package/dist/chunk-KEINCG6A.js.map +1 -0
  12. package/dist/{chunk-GBHOCY7E.cjs → chunk-LBWJK3IC.cjs} +2 -2
  13. package/dist/{chunk-GBHOCY7E.cjs.map → chunk-LBWJK3IC.cjs.map} +1 -1
  14. package/dist/chunk-UNBTMNY3.cjs +2 -0
  15. package/dist/chunk-UNBTMNY3.cjs.map +1 -0
  16. package/dist/core/store.cjs +1 -1
  17. package/dist/core/store.js +1 -1
  18. package/dist/core.cjs +1 -1
  19. package/dist/core.js +1 -1
  20. package/dist/devtools/bridge.cjs +1 -1
  21. package/dist/devtools/bridge.js +1 -1
  22. package/dist/devtools/index.cjs +49 -24
  23. package/dist/devtools/index.cjs.map +1 -1
  24. package/dist/devtools/index.d.cts +2 -0
  25. package/dist/devtools/index.d.ts +2 -0
  26. package/dist/devtools/index.js +49 -24
  27. package/dist/devtools/index.js.map +1 -1
  28. package/dist/index.cjs +1 -1
  29. package/dist/index.js +1 -1
  30. package/dist/react/index.cjs +1 -1
  31. package/dist/react/index.js +1 -1
  32. package/dist/react-native/index.cjs +1 -1
  33. package/dist/react-native/index.js +1 -1
  34. package/dist/vue/index.cjs +1 -1
  35. package/dist/vue/index.cjs.map +1 -1
  36. package/dist/vue/index.js +1 -1
  37. package/dist/vue/index.js.map +1 -1
  38. package/package.json +1 -1
  39. package/dist/chunk-7T7L2TZX.js +0 -2
  40. package/dist/chunk-7T7L2TZX.js.map +0 -1
  41. package/dist/chunk-EYCJKAK3.js +0 -2
  42. package/dist/chunk-EYCJKAK3.js.map +0 -1
  43. package/dist/chunk-U6UFULNS.cjs +0 -2
  44. package/dist/chunk-WKLCAC74.cjs +0 -2
  45. package/dist/chunk-WKLCAC74.cjs.map +0 -1
  46. /package/dist/{chunk-WYYVVM2C.js.map → chunk-4U32VQD5.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["/builds/kenji.ccp-group/bit-form/dist/chunk-GBHOCY7E.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","e","isDevToolsReadableStore","value","candidate","isDevToolsActionableStore","getDevToolsActionableStore","activeBridgeCleanup","STATE_BATCH_INTERVAL_MS","setupRemoteBridge","url","bus","bitBus","socket","unsubscribeBus","heartbeatInterval","batchFlushTimeout","reconnectTimer","pendingStoreIds","isIntentionalDisconnect","retries","MAX_RETRY_DELAY","sendWhenOpen","message","flushPendingStoreUpdates","payload","acc","storeInstance","scheduleStoreFlush","connect","jitter","initialState","_newState","event","isDevToolsActionMessage","action","cleanedUp","cleanup"],"mappings":"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","file":"/builds/kenji.ccp-group/bit-form/dist/chunk-GBHOCY7E.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 try {\n snapshots[storeId] = createDevToolsStoreSnapshot(instance);\n } catch (e) {\n console.warn(`[bit-form] Failed to snapshot store \"${storeId}\":`, e);\n }\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> | undefined;\n let batchFlushTimeout: ReturnType<typeof setTimeout> | null = null;\n let reconnectTimer: ReturnType<typeof setTimeout> | undefined;\n const pendingStoreIds = new Set<string>();\n let isIntentionalDisconnect = false;\n let retries = 0;\n const MAX_RETRY_DELAY = 30000;\n\n const sendWhenOpen = (message: Record<string, unknown>) => {\n if (socket?.readyState !== WebSocket.OPEN) {\n return;\n }\n\n try {\n socket.send(JSON.stringify(message));\n } catch (e) {\n console.warn(\"[bit-form] Failed to serialize/send message:\", e);\n }\n };\n\n const flushPendingStoreUpdates = () => {\n if (pendingStoreIds.size === 0) {\n return;\n }\n\n try {\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 } catch (e) {\n console.warn(\"[bit-form] Failed to create snapshot:\", e);\n pendingStoreIds.clear();\n batchFlushTimeout = null;\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 try {\n socket = new WebSocket(url);\n } catch (e) {\n console.error(\"[bit-form] Failed to create WebSocket:\", e);\n const delay = Math.min(1000 * Math.pow(2, retries), MAX_RETRY_DELAY);\n const jitter = delay * (0.5 + Math.random() * 0.5);\n retries++;\n if (!isIntentionalDisconnect) {\n reconnectTimer = setTimeout(connect, jitter);\n }\n return;\n }\n\n socket.onopen = () => {\n retries = 0;\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.onerror = (event) => {\n console.error(\"[bit-form] WebSocket error:\", event);\n };\n\n socket.onclose = () => {\n if (unsubscribeBus) unsubscribeBus();\n if (heartbeatInterval) 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...\");\n const delay = Math.min(1000 * Math.pow(2, retries), MAX_RETRY_DELAY);\n const jitter = delay * (0.5 + Math.random() * 0.5);\n retries++;\n reconnectTimer = setTimeout(connect, jitter);\n } else {\n console.log(\"[bit-form] Ponte antiga encerrada com sucesso.\");\n }\n };\n };\n\n connect();\n\n let cleanedUp = false;\n const cleanup = () => {\n if (cleanedUp) return;\n cleanedUp = true;\n isIntentionalDisconnect = true;\n if (reconnectTimer) {\n clearTimeout(reconnectTimer);\n reconnectTimer = undefined;\n }\n\n if (unsubscribeBus) unsubscribeBus();\n if (heartbeatInterval) 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":["/builds/kenji.ccp-group/bit-form/dist/chunk-LBWJK3IC.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","e","isDevToolsReadableStore","value","candidate","isDevToolsActionableStore","getDevToolsActionableStore","activeBridgeCleanup","STATE_BATCH_INTERVAL_MS","setupRemoteBridge","url","bus","bitBus","socket","unsubscribeBus","heartbeatInterval","batchFlushTimeout","reconnectTimer","pendingStoreIds","isIntentionalDisconnect","retries","MAX_RETRY_DELAY","sendWhenOpen","message","flushPendingStoreUpdates","payload","acc","storeInstance","scheduleStoreFlush","connect","jitter","initialState","_newState","event","isDevToolsActionMessage","action","cleanedUp","cleanup"],"mappings":"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","file":"/builds/kenji.ccp-group/bit-form/dist/chunk-LBWJK3IC.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 try {\n snapshots[storeId] = createDevToolsStoreSnapshot(instance);\n } catch (e) {\n console.warn(`[bit-form] Failed to snapshot store \"${storeId}\":`, e);\n }\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> | undefined;\n let batchFlushTimeout: ReturnType<typeof setTimeout> | null = null;\n let reconnectTimer: ReturnType<typeof setTimeout> | undefined;\n const pendingStoreIds = new Set<string>();\n let isIntentionalDisconnect = false;\n let retries = 0;\n const MAX_RETRY_DELAY = 30000;\n\n const sendWhenOpen = (message: Record<string, unknown>) => {\n if (socket?.readyState !== WebSocket.OPEN) {\n return;\n }\n\n try {\n socket.send(JSON.stringify(message));\n } catch (e) {\n console.warn(\"[bit-form] Failed to serialize/send message:\", e);\n }\n };\n\n const flushPendingStoreUpdates = () => {\n if (pendingStoreIds.size === 0) {\n return;\n }\n\n try {\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 } catch (e) {\n console.warn(\"[bit-form] Failed to create snapshot:\", e);\n pendingStoreIds.clear();\n batchFlushTimeout = null;\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 try {\n socket = new WebSocket(url);\n } catch (e) {\n console.error(\"[bit-form] Failed to create WebSocket:\", e);\n const delay = Math.min(1000 * Math.pow(2, retries), MAX_RETRY_DELAY);\n const jitter = delay * (0.5 + Math.random() * 0.5);\n retries++;\n if (!isIntentionalDisconnect) {\n reconnectTimer = setTimeout(connect, jitter);\n }\n return;\n }\n\n socket.onopen = () => {\n retries = 0;\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.onerror = (event) => {\n console.error(\"[bit-form] WebSocket error:\", event);\n };\n\n socket.onclose = () => {\n if (unsubscribeBus) unsubscribeBus();\n if (heartbeatInterval) 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...\");\n const delay = Math.min(1000 * Math.pow(2, retries), MAX_RETRY_DELAY);\n const jitter = delay * (0.5 + Math.random() * 0.5);\n retries++;\n reconnectTimer = setTimeout(connect, jitter);\n } else {\n console.log(\"[bit-form] Ponte antiga encerrada com sucesso.\");\n }\n };\n };\n\n connect();\n\n let cleanedUp = false;\n const cleanup = () => {\n if (cleanedUp) return;\n cleanedUp = true;\n isIntentionalDisconnect = true;\n if (reconnectTimer) {\n clearTimeout(reconnectTimer);\n reconnectTimer = undefined;\n }\n\n if (unsubscribeBus) unsubscribeBus();\n if (heartbeatInterval) 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"]}
@@ -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 _chunkK3QLAMDGcjs = require('./chunk-K3QLAMDG.cjs');var _chunkH27ROY4Fcjs = require('./chunk-H27ROY4F.cjs');var _chunkRHMJPKNVcjs = require('./chunk-RHMJPKNV.cjs');var _chunkAV7YYSFIcjs = require('./chunk-AV7YYSFI.cjs');var _chunkOWDDAM6Ccjs = require('./chunk-OWDDAM6C.cjs');var _react = require('react');var _jsxruntime = require('react/jsx-runtime');var G=_react.createContext.call(void 0, null),yt= exports.a =({store:t,children:e})=>{let r=_react.useMemo.call(void 0, ()=>_chunkK3QLAMDGcjs.d.call(void 0, t),[t]);return _jsxruntime.jsx.call(void 0, G.Provider,{value:r,children:e})},S= exports.b =()=>{let t=_react.useContext.call(void 0, G);if(!t)throw new Error("BitForm hooks devem ser usados dentro de um BitFormProvider");return t};function Et(){let t=S(),[e,r]=_react.useState.call(void 0, null),[i,s]=_react.useState.call(void 0, null),o=_react.useRef.call(void 0, null),c=_react.useCallback.call(void 0, p=>_chunkH27ROY4Fcjs.b.call(void 0, t,p),[t]),l=_react.useCallback.call(void 0, ()=>{let p=_chunkH27ROY4Fcjs.a.call(void 0, t);return o.current&&o.current.isValid===p.isValid&&o.current.isDirty===p.isDirty&&o.current.isSubmitting===p.isSubmitting?o.current:(o.current=p,p)},[t]),n=_react.useSyncExternalStore.call(void 0, c,l,l),a=_react.useMemo.call(void 0, ()=>_chunkH27ROY4Fcjs.i.call(void 0, t,{clearSubmissionState:()=>{r(null),s(null)},setSubmissionResult:p=>{s(p)},setSubmissionError:p=>{r(p)}}),[t]),{controller:m,actions:b}=a,P=_react.useCallback.call(void 0, m.submit,[m]),g=_react.useCallback.call(void 0, m.onSubmit,[m]),F=_react.useCallback.call(void 0, m.reset,[m]),y=_react.useCallback.call(void 0, m.getValues,[m]),h=_react.useCallback.call(void 0, m.getErrors,[m]),u=_react.useCallback.call(void 0, m.getTouched,[m]),B=_react.useCallback.call(void 0, m.getDirtyValues,[m]),R=_react.useMemo.call(void 0, ()=>({...n,submitError:e,lastResponse:i}),[n,e,i]);return _react.useMemo.call(void 0, ()=>({meta:R,getValues:y,getErrors:h,getTouched:u,getDirtyValues:B,submit:P,onSubmit:g,reset:F,...b}),[R,y,h,u,B,P,g,F,b])}function Ct(t){let e=S(),r=_react.useMemo.call(void 0, ()=>_chunkH27ROY4Fcjs.g.call(void 0, e,t),[e,t]),i=_react.useRef.call(void 0, null),s=_react.useCallback.call(void 0, ()=>{let n=r.readItems();return i.current&&_chunkOWDDAM6Ccjs.c.call(void 0, i.current,n)?i.current:(i.current=n,n)},[r]),o=_react.useCallback.call(void 0, n=>e.observe.subscribePath(t,()=>n()),[e,t]),c=_react.useSyncExternalStore.call(void 0, o,s,s),l=_react.useMemo.call(void 0, ()=>r.getFields(c),[r,c]);return _react.useEffect.call(void 0, ()=>()=>{_chunkH27ROY4Fcjs.k.call(void 0, e,`${t}.`)},[e,t]),_react.useMemo.call(void 0, ()=>({fields:l,length:c.length,append:r.append,prepend:r.prepend,insert:r.insert,remove:r.remove,move:r.move,swap:r.swap,replace:r.replace,clear:r.clear}),[l,c.length,r])}function qt(t){let e=S(),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]),s=_react.useCallback.call(void 0, n=>e.observe.subscribeScopeStatus(t,()=>n()),[e,t]),o=_react.useSyncExternalStore.call(void 0, s,i,i),c=_react.useCallback.call(void 0, async()=>{let n=await e.feature.validate({scope:t}),a=e.read.getScopeErrors(t);return{valid:n,errors:a}},[e,t]),l=_react.useCallback.call(void 0, ()=>e.read.getScopeErrors(t),[e,t]);return _react.useMemo.call(void 0, ()=>({scopeName:t,status:o,errors:o.errors,validate:c,getErrors:l,isValid:!o.hasErrors,isDirty:o.isDirty}),[t,o,c,l])}function $t(t){if(t.length===0)throw new Error("useBitSteps: scopeNames must not be empty");let e=S(),[r,i]=_react.useState.call(void 0, 0),s=_nullishCoalesce(t[r], () => ("")),o=_react.useRef.call(void 0, null),c=_react.useRef.call(void 0, s);c.current=s;let l=_react.useRef.call(void 0, r);l.current=r;let n=_react.useCallback.call(void 0, ()=>{let u=e.read.getScopeStatus(s);return o.current&&_chunkRHMJPKNVcjs.b.call(void 0, o.current,u)?o.current:(o.current=u,u)},[e,s]),a=_react.useSyncExternalStore.call(void 0, _react.useCallback.call(void 0, u=>e.observe.subscribeScopeStatus(s,()=>u()),[e,s]),n,n),m=_react.useCallback.call(void 0, async()=>{let u=await e.feature.validate({scope:s}),B=e.read.getScopeErrors(s);return{valid:u,errors:B}},[e,s]),b=_react.useCallback.call(void 0, ()=>e.read.getScopeErrors(s),[e,s]),P=_react.useCallback.call(void 0, async()=>{let u=c.current,B=l.current,R=e.read.getScopeFields(u);if(e.feature.hasValidationsInProgress(R))return!1;let p=await e.feature.validate({scope:u});if(B!==l.current)return!1;if(p)i(M=>Math.min(M+1,t.length-1));else{let M=e.read.getScopeErrors(u),C=Object.keys(M);C.length>0&&e.write.markFieldsTouched(C)}return p},[e,t.length]),g=_react.useCallback.call(void 0, ()=>{i(u=>Math.max(u-1,0))},[]),F=_react.useCallback.call(void 0, u=>{i(Math.max(0,Math.min(u-1,t.length-1)))},[t.length]),y=r===0,h=r>=t.length-1;return _react.useMemo.call(void 0, ()=>({step:r+1,stepIndex:r,scope:s,next:P,prev:g,goTo:F,isFirst:y,isLast:h,status:a,errors:a.errors,isValid:!a.hasErrors,isDirty:a.isDirty,validate:m,getErrors:b}),[r,s,P,g,F,y,h,a,m,b])}function Xt(t){let e=S(),r=_react.useRef.call(void 0, null),i=_react.useCallback.call(void 0, ()=>{let o=_chunkOWDDAM6Ccjs.f.call(void 0, e.read.getState().values,t);return r.current!==null&&_chunkOWDDAM6Ccjs.c.call(void 0, r.current,o)?r.current:(r.current=o,o)},[e,t]),s=_react.useCallback.call(void 0, o=>e.observe.subscribePath(t,()=>o()),[e,t]);return _react.useSyncExternalStore.call(void 0, s,i,i)}function ee(){let t=S(),e=_react.useCallback.call(void 0, a=>_chunkH27ROY4Fcjs.e.call(void 0, t,a),[t]),r=_react.useRef.call(void 0, null),i=_react.useCallback.call(void 0, ()=>{let a=_chunkH27ROY4Fcjs.d.call(void 0, t);return r.current&&r.current.isSaving===a.isSaving&&r.current.isRestoring===a.isRestoring&&r.current.error===a.error?r.current:(r.current=a,a)},[t]),s=_react.useSyncExternalStore.call(void 0, e,i,i),o=_react.useCallback.call(void 0, async()=>t.feature.restorePersisted(),[t]),c=_react.useCallback.call(void 0, async()=>{await t.feature.forceSave()},[t]),l=_react.useCallback.call(void 0, async()=>{await t.feature.clearPersisted()},[t]),n=_react.useMemo.call(void 0, ()=>({isSaving:s.isSaving,isRestoring:s.isRestoring,error:s.error}),[s]);return _react.useMemo.call(void 0, ()=>({restore:o,save:c,clear:l,meta:n}),[o,c,l,n])}function ce(t){let e=S(),r=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>()=>_chunkH27ROY4Fcjs.j.call(void 0, e,t),[e,t]);let i=_react.useCallback.call(void 0, ()=>{let n=e.read.getFieldState(t),a=_chunkAV7YYSFIcjs.a.call(void 0, n,r.current);return r.current=a,a},[e,t]),s=_react.useCallback.call(void 0, n=>e.observe.subscribeFieldState(t,()=>n()),[e,t]),o=_react.useSyncExternalStore.call(void 0, s,i,i),c=_react.useCallback.call(void 0, n=>e.write.setField(t,n),[e,t]),l=_react.useCallback.call(void 0, ()=>e.write.blurField(t),[e,t]);return{fieldState:o,setValue:c,setBlur:l,store:e}}exports.a = yt; exports.b = S; exports.c = Et; exports.d = ce; exports.e = Ct; exports.f = qt; exports.g = $t; exports.h = Xt; exports.i = ee;
2
+ //# sourceMappingURL=chunk-UNBTMNY3.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/builds/kenji.ccp-group/bit-form/dist/chunk-UNBTMNY3.cjs","../src/react/context.tsx","../src/react/use-bit-form.ts","../src/react/use-bit-array.ts"],"names":["BitContext","createContext","BitFormProvider","store","children","adapted","useMemo","createFrameworkStoreAdapter","jsx","useBitStore","useContext","useBitForm","submitError","setSubmitError","useState","lastResponse","setLastResponse","lastMeta","useRef","subscribeMeta","useCallback","cb","subscribeFormMetaSnapshot","getMetaSnapshot","nextMeta","readFormMetaSnapshot","metaState","useSyncExternalStore","binding","createFrameworkFormBinding","result","error","controller","actions","submit","onSubmit","reset","getValues","getErrors","getTouched","getDirtyValues","meta","useBitArray","path","createArrayBinding","lastSnapshotRef","getSnapshot","next","valueEqual","subscribeArray","data","fields","useEffect","cleanupRegisteredPrefix"],"mappings":"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","file":"/builds/kenji.ccp-group/bit-form/dist/chunk-UNBTMNY3.cjs","sourcesContent":[null,"import React, { createContext, useContext, useMemo } from \"react\";\nimport type { BitFrameworkStoreApi, BitStoreApi } from \"../core\";\nimport { createFrameworkStoreAdapter } from \"../core\";\n\nconst BitContext = createContext<BitFrameworkStoreApi<any> | null>(null);\n\ninterface BitFormProviderProps<T extends object> {\n store: BitFrameworkStoreApi<T> | BitStoreApi<T>;\n children: React.ReactNode;\n}\n\ninterface BitFormProviderRuntimeProps {\n store: unknown;\n children: React.ReactNode;\n}\n\ntype BitFormProviderComponent = {\n <T extends object>(props: BitFormProviderProps<T>): React.ReactElement;\n (props: BitFormProviderRuntimeProps): React.ReactElement;\n};\n\nexport const BitFormProvider: BitFormProviderComponent = ({\n store,\n children,\n}: BitFormProviderRuntimeProps) => {\n const adapted = useMemo(() => createFrameworkStoreAdapter(store), [store]);\n\n return (\n <BitContext.Provider value={adapted}>\n {children}\n </BitContext.Provider>\n );\n};\n\nexport const useBitStore = <T extends object>() => {\n const store = useContext(BitContext);\n if (!store)\n throw new Error(\n \"BitForm hooks devem ser usados dentro de um BitFormProvider\",\n );\n return store as BitFrameworkStoreApi<T>;\n};\n","import {\n useCallback,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport {\n createFrameworkFormBinding,\n readFormMetaSnapshot,\n subscribeFormMetaSnapshot,\n} from \"../core\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitFormResult } from \"./types\";\n\nexport function useBitForm<T extends object>(): UseBitFormResult<T> {\n const store = useBitStore<T>();\n\n const [submitError, setSubmitError] = useState<Error | null>(null);\n const [lastResponse, setLastResponse] = useState<unknown>(null);\n const lastMeta = useRef<ReturnType<typeof readFormMetaSnapshot<T>> | null>(\n null,\n );\n\n const subscribeMeta = useCallback(\n (cb: () => void) => subscribeFormMetaSnapshot(store, cb),\n [store],\n );\n const getMetaSnapshot = useCallback(() => {\n const nextMeta = readFormMetaSnapshot(store);\n\n if (\n lastMeta.current &&\n lastMeta.current.isValid === nextMeta.isValid &&\n lastMeta.current.isDirty === nextMeta.isDirty &&\n lastMeta.current.isSubmitting === nextMeta.isSubmitting\n ) {\n return lastMeta.current;\n }\n\n lastMeta.current = nextMeta;\n return nextMeta;\n }, [store]);\n\n const metaState = useSyncExternalStore(\n subscribeMeta,\n getMetaSnapshot,\n getMetaSnapshot,\n );\n\n const binding = useMemo(\n () =>\n createFrameworkFormBinding(store, {\n clearSubmissionState: () => {\n setSubmitError(null);\n setLastResponse(null);\n },\n setSubmissionResult: (result) => {\n setLastResponse(result);\n },\n setSubmissionError: (error) => {\n setSubmitError(error);\n },\n }),\n [store],\n );\n\n const { controller, actions } = binding;\n\n const submit = useCallback(controller.submit, [controller]);\n const onSubmit = useCallback(controller.onSubmit, [controller]);\n const reset = useCallback(controller.reset, [controller]);\n\n const getValues = useCallback(controller.getValues, [controller]);\n const getErrors = useCallback(controller.getErrors, [controller]);\n const getTouched = useCallback(controller.getTouched, [controller]);\n const getDirtyValues = useCallback(controller.getDirtyValues, [controller]);\n\n const meta = useMemo(\n () => ({\n ...metaState,\n submitError,\n lastResponse,\n }),\n [metaState, submitError, lastResponse],\n );\n\n return useMemo(\n () => ({\n // Metadata (grouped)\n meta,\n // Getters\n getValues,\n getErrors,\n getTouched,\n getDirtyValues,\n // Main actions (frequent use - flat)\n submit,\n onSubmit,\n reset,\n ...actions,\n }),\n [\n meta,\n getValues,\n getErrors,\n getTouched,\n getDirtyValues,\n submit,\n onSubmit,\n reset,\n actions,\n ],\n );\n}\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n} from \"react\";\nimport {\n BitArrayPath,\n cleanupRegisteredPrefix,\n createArrayBinding,\n valueEqual,\n} from \"../core\";\nimport { useBitStore } from \"./context\";\n\nexport function useBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = useBitStore<TForm>();\n const controller = useMemo(\n () => createArrayBinding<TForm, P>(store, path),\n [store, path],\n );\n type ArraySnapshot = ReturnType<typeof controller.readItems>;\n const lastSnapshotRef = useRef<ArraySnapshot | null>(null);\n\n const getSnapshot = useCallback(() => {\n const next = controller.readItems();\n\n if (lastSnapshotRef.current && valueEqual(lastSnapshotRef.current, next)) {\n return lastSnapshotRef.current;\n }\n\n lastSnapshotRef.current = next;\n return next;\n }, [controller]);\n\n const subscribeArray = useCallback(\n (cb: () => void) => store.observe.subscribePath(path, () => cb()),\n [store, path],\n );\n\n const data = useSyncExternalStore(subscribeArray, getSnapshot, getSnapshot);\n\n const fields = useMemo(() => controller.getFields(data), [controller, data]);\n\n useEffect(() => {\n return () => {\n cleanupRegisteredPrefix(store, `${path as string}.`);\n };\n }, [store, path]);\n\n return useMemo(\n () => ({\n fields,\n length: data.length,\n append: controller.append,\n prepend: controller.prepend,\n insert: controller.insert,\n remove: controller.remove,\n move: controller.move,\n swap: controller.swap,\n replace: controller.replace,\n clear: controller.clear,\n }),\n [fields, data.length, controller],\n );\n}\n"]}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkU6UFULNScjs = require('../chunk-U6UFULNS.cjs');require('../chunk-RHMJPKNV.cjs');require('../chunk-AV7YYSFI.cjs');require('../chunk-OWDDAM6C.cjs');require('../chunk-X3DGA5UC.cjs');exports.bitBus = _chunkU6UFULNScjs.a; exports.createBitBus = _chunkU6UFULNScjs.b; exports.createBitStore = _chunkU6UFULNScjs.e; exports.createFrameworkStoreAdapter = _chunkU6UFULNScjs.d; exports.extractFeatureSlice = _chunkU6UFULNScjs.i; exports.extractObserveSlice = _chunkU6UFULNScjs.g; exports.extractReadSlice = _chunkU6UFULNScjs.f; exports.extractSlices = _chunkU6UFULNScjs.j; exports.extractWriteSlice = _chunkU6UFULNScjs.h; exports.resolveBitStoreForHooks = _chunkU6UFULNScjs.c;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkK3QLAMDGcjs = require('../chunk-K3QLAMDG.cjs');require('../chunk-RHMJPKNV.cjs');require('../chunk-AV7YYSFI.cjs');require('../chunk-OWDDAM6C.cjs');require('../chunk-X3DGA5UC.cjs');exports.bitBus = _chunkK3QLAMDGcjs.a; exports.createBitBus = _chunkK3QLAMDGcjs.b; exports.createBitStore = _chunkK3QLAMDGcjs.e; exports.createFrameworkStoreAdapter = _chunkK3QLAMDGcjs.d; exports.extractFeatureSlice = _chunkK3QLAMDGcjs.i; exports.extractObserveSlice = _chunkK3QLAMDGcjs.g; exports.extractReadSlice = _chunkK3QLAMDGcjs.f; exports.extractSlices = _chunkK3QLAMDGcjs.j; exports.extractWriteSlice = _chunkK3QLAMDGcjs.h; exports.resolveBitStoreForHooks = _chunkK3QLAMDGcjs.c;
2
2
  //# sourceMappingURL=store.cjs.map
@@ -1,2 +1,2 @@
1
- import{a,b,c,d,e,f,g,h,i,j}from"../chunk-7T7L2TZX.js";import"../chunk-UIKO6GGW.js";import"../chunk-Y7TQTZY7.js";import"../chunk-UBVVBVLS.js";import"../chunk-MBEQLBJB.js";export{a as bitBus,b as createBitBus,e as createBitStore,d as createFrameworkStoreAdapter,i as extractFeatureSlice,g as extractObserveSlice,f as extractReadSlice,j as extractSlices,h as extractWriteSlice,c as resolveBitStoreForHooks};
1
+ import{a,b,c,d,e,f,g,h,i,j}from"../chunk-FF6WALLN.js";import"../chunk-UIKO6GGW.js";import"../chunk-Y7TQTZY7.js";import"../chunk-UBVVBVLS.js";import"../chunk-MBEQLBJB.js";export{a as bitBus,b as createBitBus,e as createBitStore,d as createFrameworkStoreAdapter,i as extractFeatureSlice,g as extractObserveSlice,f as extractReadSlice,j as extractSlices,h as extractWriteSlice,c as resolveBitStoreForHooks};
2
2
  //# sourceMappingURL=store.js.map
package/dist/core.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-W5CLDRRE.cjs');var _chunkU6UFULNScjs = require('./chunk-U6UFULNS.cjs');var _chunkH27ROY4Fcjs = require('./chunk-H27ROY4F.cjs');var _chunkBSGJ3T5Scjs = require('./chunk-BSGJ3T5S.cjs');var _chunkRHMJPKNVcjs = require('./chunk-RHMJPKNV.cjs');var _chunkH6HGYVRVcjs = require('./chunk-H6HGYVRV.cjs');var _chunkAV7YYSFIcjs = require('./chunk-AV7YYSFI.cjs');var _chunkOWDDAM6Ccjs = require('./chunk-OWDDAM6C.cjs');require('./chunk-X3DGA5UC.cjs');var _chunk725CMNAVcjs = require('./chunk-725CMNAV.cjs');exports.areFieldSnapshotsEqual = _chunkAV7YYSFIcjs.b; exports.areScopeErrorsEqual = _chunkRHMJPKNVcjs.a; exports.bitBus = _chunkU6UFULNScjs.a; exports.cleanPrefixedKeys = _chunkOWDDAM6Ccjs.j; exports.cleanupRegisteredField = _chunkH27ROY4Fcjs.j; exports.cleanupRegisteredPrefix = _chunkH27ROY4Fcjs.k; exports.createArrayBinding = _chunkH27ROY4Fcjs.g; exports.createBitBus = _chunkU6UFULNScjs.b; exports.createBitStore = _chunkU6UFULNScjs.e; exports.createFieldStateSnapshot = _chunkAV7YYSFIcjs.a; exports.createFrameworkFormBinding = _chunkH27ROY4Fcjs.i; exports.createFrameworkMaskedFieldBinding = _chunkH27ROY4Fcjs.h; exports.createFrameworkStoreAdapter = _chunkU6UFULNScjs.d; exports.deepClone = _chunkOWDDAM6Ccjs.a; exports.deepEqual = _chunkOWDDAM6Ccjs.d; exports.deepMerge = _chunkOWDDAM6Ccjs.b; exports.deriveFieldMeta = _chunkH6HGYVRVcjs.a; exports.extractFeatureSlice = _chunkU6UFULNScjs.i; exports.extractObserveSlice = _chunkU6UFULNScjs.g; exports.extractReadSlice = _chunkU6UFULNScjs.f; exports.extractServerErrors = _chunkOWDDAM6Ccjs.n; exports.extractSlices = _chunkU6UFULNScjs.j; exports.extractWriteSlice = _chunkU6UFULNScjs.h; exports.formatMaskedValue = _chunk725CMNAVcjs.b; exports.getDeepValue = _chunkOWDDAM6Ccjs.f; exports.getScopeSubscriptionPaths = _chunkRHMJPKNVcjs.c; exports.isBitFieldInputEventObject = _chunk725CMNAVcjs.a; exports.isHistoryMetaEqual = _chunkRHMJPKNVcjs.e; exports.isScopeStatusEqual = _chunkRHMJPKNVcjs.b; exports.isValidationErrorShape = _chunkOWDDAM6Ccjs.m; exports.observeFormMetaSnapshot = _chunkH27ROY4Fcjs.c; exports.observeHistoryMetaSnapshot = _chunkRHMJPKNVcjs.g; exports.observePersistMetaSnapshot = _chunkH27ROY4Fcjs.f; exports.observeScopeStatusSnapshot = _chunkBSGJ3T5Scjs.a; exports.parseMaskedInput = _chunk725CMNAVcjs.c; exports.readFormMetaSnapshot = _chunkH27ROY4Fcjs.a; exports.readHistoryMetaSnapshot = _chunkRHMJPKNVcjs.f; exports.readPersistMetaSnapshot = _chunkH27ROY4Fcjs.d; exports.resolveBitStoreForHooks = _chunkU6UFULNScjs.c; exports.setDeepValue = _chunkOWDDAM6Ccjs.g; exports.subscribeFormMetaSnapshot = _chunkH27ROY4Fcjs.b; exports.subscribePersistMetaSnapshot = _chunkH27ROY4Fcjs.e; exports.valueEqual = _chunkOWDDAM6Ccjs.c;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-W5CLDRRE.cjs');var _chunkK3QLAMDGcjs = require('./chunk-K3QLAMDG.cjs');var _chunkH27ROY4Fcjs = require('./chunk-H27ROY4F.cjs');var _chunkBSGJ3T5Scjs = require('./chunk-BSGJ3T5S.cjs');var _chunkRHMJPKNVcjs = require('./chunk-RHMJPKNV.cjs');var _chunkH6HGYVRVcjs = require('./chunk-H6HGYVRV.cjs');var _chunkAV7YYSFIcjs = require('./chunk-AV7YYSFI.cjs');var _chunkOWDDAM6Ccjs = require('./chunk-OWDDAM6C.cjs');require('./chunk-X3DGA5UC.cjs');var _chunk725CMNAVcjs = require('./chunk-725CMNAV.cjs');exports.areFieldSnapshotsEqual = _chunkAV7YYSFIcjs.b; exports.areScopeErrorsEqual = _chunkRHMJPKNVcjs.a; exports.bitBus = _chunkK3QLAMDGcjs.a; exports.cleanPrefixedKeys = _chunkOWDDAM6Ccjs.j; exports.cleanupRegisteredField = _chunkH27ROY4Fcjs.j; exports.cleanupRegisteredPrefix = _chunkH27ROY4Fcjs.k; exports.createArrayBinding = _chunkH27ROY4Fcjs.g; exports.createBitBus = _chunkK3QLAMDGcjs.b; exports.createBitStore = _chunkK3QLAMDGcjs.e; exports.createFieldStateSnapshot = _chunkAV7YYSFIcjs.a; exports.createFrameworkFormBinding = _chunkH27ROY4Fcjs.i; exports.createFrameworkMaskedFieldBinding = _chunkH27ROY4Fcjs.h; exports.createFrameworkStoreAdapter = _chunkK3QLAMDGcjs.d; exports.deepClone = _chunkOWDDAM6Ccjs.a; exports.deepEqual = _chunkOWDDAM6Ccjs.d; exports.deepMerge = _chunkOWDDAM6Ccjs.b; exports.deriveFieldMeta = _chunkH6HGYVRVcjs.a; exports.extractFeatureSlice = _chunkK3QLAMDGcjs.i; exports.extractObserveSlice = _chunkK3QLAMDGcjs.g; exports.extractReadSlice = _chunkK3QLAMDGcjs.f; exports.extractServerErrors = _chunkOWDDAM6Ccjs.n; exports.extractSlices = _chunkK3QLAMDGcjs.j; exports.extractWriteSlice = _chunkK3QLAMDGcjs.h; exports.formatMaskedValue = _chunk725CMNAVcjs.b; exports.getDeepValue = _chunkOWDDAM6Ccjs.f; exports.getScopeSubscriptionPaths = _chunkRHMJPKNVcjs.c; exports.isBitFieldInputEventObject = _chunk725CMNAVcjs.a; exports.isHistoryMetaEqual = _chunkRHMJPKNVcjs.e; exports.isScopeStatusEqual = _chunkRHMJPKNVcjs.b; exports.isValidationErrorShape = _chunkOWDDAM6Ccjs.m; exports.observeFormMetaSnapshot = _chunkH27ROY4Fcjs.c; exports.observeHistoryMetaSnapshot = _chunkRHMJPKNVcjs.g; exports.observePersistMetaSnapshot = _chunkH27ROY4Fcjs.f; exports.observeScopeStatusSnapshot = _chunkBSGJ3T5Scjs.a; exports.parseMaskedInput = _chunk725CMNAVcjs.c; exports.readFormMetaSnapshot = _chunkH27ROY4Fcjs.a; exports.readHistoryMetaSnapshot = _chunkRHMJPKNVcjs.f; exports.readPersistMetaSnapshot = _chunkH27ROY4Fcjs.d; exports.resolveBitStoreForHooks = _chunkK3QLAMDGcjs.c; exports.setDeepValue = _chunkOWDDAM6Ccjs.g; exports.subscribeFormMetaSnapshot = _chunkH27ROY4Fcjs.b; exports.subscribePersistMetaSnapshot = _chunkH27ROY4Fcjs.e; exports.valueEqual = _chunkOWDDAM6Ccjs.c;
2
2
  //# sourceMappingURL=core.cjs.map
package/dist/core.js CHANGED
@@ -1,2 +1,2 @@
1
- import"./chunk-5NA2TFPG.js";import{a as j,b as k,c as t,d as u,e as v,f as w,g as x,h as y,i as z,j as A}from"./chunk-7T7L2TZX.js";import{a as B,b as C,c as D,d as E,e as F,f as G,g as H,h as L,i as M,j as N,k as O}from"./chunk-L42NQRVD.js";import{a as P}from"./chunk-W2E5UIXT.js";import{a as l,b as m,c as n,e as o,f as p,g as q}from"./chunk-UIKO6GGW.js";import{a as Q}from"./chunk-L57KMBXS.js";import{a as r,b as s}from"./chunk-Y7TQTZY7.js";import{a,b,c,d,f as e,g as f,j as g,m as h,n as i}from"./chunk-UBVVBVLS.js";import"./chunk-MBEQLBJB.js";import{a as I,b as J,c as K}from"./chunk-DGEGYNQL.js";export{s as areFieldSnapshotsEqual,l as areScopeErrorsEqual,j as bitBus,g as cleanPrefixedKeys,N as cleanupRegisteredField,O as cleanupRegisteredPrefix,H as createArrayBinding,k as createBitBus,v as createBitStore,r as createFieldStateSnapshot,M as createFrameworkFormBinding,L as createFrameworkMaskedFieldBinding,u as createFrameworkStoreAdapter,a as deepClone,d as deepEqual,b as deepMerge,Q as deriveFieldMeta,z as extractFeatureSlice,x as extractObserveSlice,w as extractReadSlice,i as extractServerErrors,A as extractSlices,y as extractWriteSlice,J as formatMaskedValue,e as getDeepValue,n as getScopeSubscriptionPaths,I as isBitFieldInputEventObject,o as isHistoryMetaEqual,m as isScopeStatusEqual,h as isValidationErrorShape,D as observeFormMetaSnapshot,q as observeHistoryMetaSnapshot,G as observePersistMetaSnapshot,P as observeScopeStatusSnapshot,K as parseMaskedInput,B as readFormMetaSnapshot,p as readHistoryMetaSnapshot,E as readPersistMetaSnapshot,t as resolveBitStoreForHooks,f as setDeepValue,C as subscribeFormMetaSnapshot,F as subscribePersistMetaSnapshot,c as valueEqual};
1
+ import"./chunk-5NA2TFPG.js";import{a as j,b as k,c as t,d as u,e as v,f as w,g as x,h as y,i as z,j as A}from"./chunk-FF6WALLN.js";import{a as B,b as C,c as D,d as E,e as F,f as G,g as H,h as L,i as M,j as N,k as O}from"./chunk-L42NQRVD.js";import{a as P}from"./chunk-W2E5UIXT.js";import{a as l,b as m,c as n,e as o,f as p,g as q}from"./chunk-UIKO6GGW.js";import{a as Q}from"./chunk-L57KMBXS.js";import{a as r,b as s}from"./chunk-Y7TQTZY7.js";import{a,b,c,d,f as e,g as f,j as g,m as h,n as i}from"./chunk-UBVVBVLS.js";import"./chunk-MBEQLBJB.js";import{a as I,b as J,c as K}from"./chunk-DGEGYNQL.js";export{s as areFieldSnapshotsEqual,l as areScopeErrorsEqual,j as bitBus,g as cleanPrefixedKeys,N as cleanupRegisteredField,O as cleanupRegisteredPrefix,H as createArrayBinding,k as createBitBus,v as createBitStore,r as createFieldStateSnapshot,M as createFrameworkFormBinding,L as createFrameworkMaskedFieldBinding,u as createFrameworkStoreAdapter,a as deepClone,d as deepEqual,b as deepMerge,Q as deriveFieldMeta,z as extractFeatureSlice,x as extractObserveSlice,w as extractReadSlice,i as extractServerErrors,A as extractSlices,y as extractWriteSlice,J as formatMaskedValue,e as getDeepValue,n as getScopeSubscriptionPaths,I as isBitFieldInputEventObject,o as isHistoryMetaEqual,m as isScopeStatusEqual,h as isValidationErrorShape,D as observeFormMetaSnapshot,q as observeHistoryMetaSnapshot,G as observePersistMetaSnapshot,P as observeScopeStatusSnapshot,K as parseMaskedInput,B as readFormMetaSnapshot,p as readHistoryMetaSnapshot,E as readPersistMetaSnapshot,t as resolveBitStoreForHooks,f as setDeepValue,C as subscribeFormMetaSnapshot,F as subscribePersistMetaSnapshot,c as valueEqual};
2
2
  //# sourceMappingURL=core.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkGBHOCY7Ecjs = require('../chunk-GBHOCY7E.cjs');require('../chunk-QKGTVKBU.cjs');require('../chunk-W5CLDRRE.cjs');require('../chunk-U6UFULNS.cjs');require('../chunk-H27ROY4F.cjs');require('../chunk-BSGJ3T5S.cjs');require('../chunk-RHMJPKNV.cjs');require('../chunk-H6HGYVRV.cjs');require('../chunk-AV7YYSFI.cjs');require('../chunk-OWDDAM6C.cjs');require('../chunk-X3DGA5UC.cjs');require('../chunk-725CMNAV.cjs');exports.setupRemoteBridge = _chunkGBHOCY7Ecjs.c;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkLBWJK3ICcjs = require('../chunk-LBWJK3IC.cjs');require('../chunk-QKGTVKBU.cjs');require('../chunk-W5CLDRRE.cjs');require('../chunk-K3QLAMDG.cjs');require('../chunk-H27ROY4F.cjs');require('../chunk-BSGJ3T5S.cjs');require('../chunk-RHMJPKNV.cjs');require('../chunk-H6HGYVRV.cjs');require('../chunk-AV7YYSFI.cjs');require('../chunk-OWDDAM6C.cjs');require('../chunk-X3DGA5UC.cjs');require('../chunk-725CMNAV.cjs');exports.setupRemoteBridge = _chunkLBWJK3ICcjs.c;
2
2
  //# sourceMappingURL=bridge.cjs.map
@@ -1,2 +1,2 @@
1
- import{c as a}from"../chunk-WYYVVM2C.js";import"../chunk-K5X37E3U.js";import"../chunk-5NA2TFPG.js";import"../chunk-7T7L2TZX.js";import"../chunk-L42NQRVD.js";import"../chunk-W2E5UIXT.js";import"../chunk-UIKO6GGW.js";import"../chunk-L57KMBXS.js";import"../chunk-Y7TQTZY7.js";import"../chunk-UBVVBVLS.js";import"../chunk-MBEQLBJB.js";import"../chunk-DGEGYNQL.js";export{a as setupRemoteBridge};
1
+ import{c as a}from"../chunk-4U32VQD5.js";import"../chunk-K5X37E3U.js";import"../chunk-5NA2TFPG.js";import"../chunk-FF6WALLN.js";import"../chunk-L42NQRVD.js";import"../chunk-W2E5UIXT.js";import"../chunk-UIKO6GGW.js";import"../chunk-L57KMBXS.js";import"../chunk-Y7TQTZY7.js";import"../chunk-UBVVBVLS.js";import"../chunk-MBEQLBJB.js";import"../chunk-DGEGYNQL.js";export{a as setupRemoteBridge};
2
2
  //# sourceMappingURL=bridge.js.map
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;var _chunkGBHOCY7Ecjs = require('../chunk-GBHOCY7E.cjs');var _chunkQKGTVKBUcjs = require('../chunk-QKGTVKBU.cjs');require('../chunk-W5CLDRRE.cjs');var _chunkU6UFULNScjs = require('../chunk-U6UFULNS.cjs');require('../chunk-H27ROY4F.cjs');require('../chunk-BSGJ3T5S.cjs');require('../chunk-RHMJPKNV.cjs');require('../chunk-H6HGYVRV.cjs');require('../chunk-AV7YYSFI.cjs');require('../chunk-OWDDAM6C.cjs');require('../chunk-X3DGA5UC.cjs');require('../chunk-725CMNAV.cjs');function E(){return`
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;var _chunkLBWJK3ICcjs = require('../chunk-LBWJK3IC.cjs');var _chunkQKGTVKBUcjs = require('../chunk-QKGTVKBU.cjs');require('../chunk-W5CLDRRE.cjs');var _chunkK3QLAMDGcjs = require('../chunk-K3QLAMDG.cjs');require('../chunk-H27ROY4F.cjs');require('../chunk-BSGJ3T5S.cjs');require('../chunk-RHMJPKNV.cjs');require('../chunk-H6HGYVRV.cjs');require('../chunk-AV7YYSFI.cjs');require('../chunk-OWDDAM6C.cjs');require('../chunk-X3DGA5UC.cjs');require('../chunk-725CMNAV.cjs');function E(){return`
2
2
  .bit-devtools-container {
3
3
  position: fixed;
4
4
  bottom: 20px;
@@ -75,6 +75,31 @@
75
75
  .badge-warn { background: rgba(245, 158, 11, 0.2); color: #fbbf24; border: 1px solid rgba(245, 158, 11, 0.2); }
76
76
  .badge-info { background: rgba(56, 189, 248, 0.2); color: #7dd3fc; border: 1px solid rgba(56, 189, 248, 0.2); }
77
77
 
78
+ .bit-devtools-tabs {
79
+ display: flex;
80
+ gap: 4px;
81
+ padding: 8px 0 0 0;
82
+ border-bottom: 1px solid #1e293b;
83
+ }
84
+ .bit-devtools-tab {
85
+ background: transparent;
86
+ color: #94a3b8;
87
+ border: none;
88
+ border-bottom: 2px solid transparent;
89
+ padding: 6px 12px;
90
+ font-size: 12px;
91
+ font-family: inherit;
92
+ cursor: pointer;
93
+ transition: all 0.2s;
94
+ border-radius: 4px 4px 0 0;
95
+ }
96
+ .bit-devtools-tab:hover { color: #e2e8f0; background: rgba(255,255,255,0.05); }
97
+ .bit-devtools-tab.active {
98
+ color: #38bdf8;
99
+ border-bottom-color: #38bdf8;
100
+ background: rgba(56, 189, 248, 0.08);
101
+ }
102
+
78
103
  .bit-section-title { font-size: 11px; color: #94a3b8; text-transform: uppercase; letter-spacing: 1px; margin: 12px 0 4px 0; display: block; }
79
104
 
80
105
  .bit-controls { display: flex; gap: 6px; margin-bottom: 12px; background: #0f172a; padding: 8px; border-radius: 6px; }
@@ -86,48 +111,48 @@
86
111
 
87
112
  pre.bit-pre { background: #020617; padding: 10px; border-radius: 4px; font-size: 11px; overflow-x: auto; border: 1px solid #1e293b; margin: 0; color: #e2e8f0; }
88
113
  pre.bit-error-box { background: rgba(239, 68, 68, 0.05); padding: 10px; border-radius: 4px; font-size: 11px; border: 1px dashed #ef4444; color: #fca5a5; margin: 0; overflow-x: auto; }
89
- `}function m(t){return t.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function M(t){try{return JSON.stringify(t,null,2)}catch (e2){return"[Unserializable]"}}var b= (_class =class{__init() {this.currentStoresState={}}__init2() {this.isOpen=!1}constructor(s,i){;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);if(this.container=s,this.actions=i,!document.getElementById("bit-devtools-styles")){let e=document.createElement("style");e.id="bit-devtools-styles",e.textContent=E(),document.head.appendChild(e)}this.rootElement=document.createElement("div"),this.rootElement.className="bit-devtools-container",this.container.appendChild(this.rootElement),this.rootElement.addEventListener("click",e=>{let o=e.target;if(o.closest(".bit-devtools-trigger")){this.isOpen=!this.isOpen,this.render();return}let r=o.closest(".bit-action-btn");if(r&&!r.hasAttribute("disabled")){let n=r.getAttribute("data-action"),a=r.getAttribute("data-store");n&&a&&(n==="undo"&&this.actions.onUndo(a),n==="redo"&&this.actions.onRedo(a),n==="reset"&&this.actions.onReset(a))}})}updateState(s){this.currentStoresState=s,this.render()}render(){let s=Object.entries(this.currentStoresState);if(s.length===0){this.rootElement.innerHTML="";return}let i="";if(this.isOpen){i=`
90
- <div class="bit-devtools-panel">
91
- <div class="bit-devtools-header">
92
- <h2><span style="font-size: 20px;">\u{1F6E0}</span> Bit-Form DevTools</h2>
93
- <span style="font-size: 11px; color: #64748b;">v1.0.0</span>
94
- </div>
95
- `;for(let[o,r]of s){let n=Object.keys(r.errors||{}).length>0,a=r._meta||{totalSteps:0,currentIndex:-1,canUndo:!1,canRedo:!1},c=a.currentIndex+1,p=a.totalSteps;i+=`
114
+ `}function p(s){return s.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function O(s){try{return JSON.stringify(s,null,2)}catch (e2){return"[Unserializable]"}}var b= (_class =class{__init() {this.currentStoresState={}}__init2() {this.isOpen=!1}__init3() {this.activeStoreId=null}constructor(r,i){;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);_class.prototype.__init3.call(this);if(this.container=r,this.actions=i,!document.getElementById("bit-devtools-styles")){let t=document.createElement("style");t.id="bit-devtools-styles",t.textContent=E(),document.head.appendChild(t)}this.rootElement=document.createElement("div"),this.rootElement.className="bit-devtools-container",this.container.appendChild(this.rootElement),this.rootElement.addEventListener("click",t=>{let e=t.target;if(e.closest(".bit-devtools-trigger")){this.isOpen=!this.isOpen,this.render();return}let a=e.closest(".bit-devtools-tab");if(a){let n=a.getAttribute("data-store");n&&(this.activeStoreId=n,this.render());return}let o=e.closest(".bit-action-btn");if(o&&!o.hasAttribute("disabled")){let n=o.getAttribute("data-action"),d=o.getAttribute("data-store");n&&d&&(n==="undo"&&this.actions.onUndo(d),n==="redo"&&this.actions.onRedo(d),n==="reset"&&this.actions.onReset(d))}})}updateState(r){this.currentStoresState=r,this.render()}renderStoreBlock(r,i){let t=Object.keys(i.errors||{}).length>0,e=i._meta||{totalSteps:0,currentIndex:-1,canUndo:!1,canRedo:!1},a=e.currentIndex+1,o=e.totalSteps,n=`
96
115
  <div class="bit-store-block">
97
116
  <div class="bit-store-header">
98
- <h3 class="bit-store-title">${m(o)}</h3>
117
+ <h3 class="bit-store-title">${p(r)}</h3>
99
118
  <div class="bit-badge-group">
100
- <span class="bit-badge ${r.isValid?"badge-success":"badge-error"}">
101
- ${r.isValid?"\u2713 Valid":"\u2715 Invalid"}
119
+ <span class="bit-badge ${i.isValid?"badge-success":"badge-error"}">
120
+ ${i.isValid?"\u2713 Valid":"\u2715 Invalid"}
102
121
  </span>
103
- ${r.isDirty?'<span class="bit-badge badge-warn">Dirty</span>':""}
104
- ${r.isSubmitting?'<span class="bit-badge badge-info">\u23F3 Submitting</span>':""}
122
+ ${i.isDirty?'<span class="bit-badge badge-warn">Dirty</span>':""}
123
+ ${i.isSubmitting?'<span class="bit-badge badge-info">\u23F3 Submitting</span>':""}
105
124
  </div>
106
125
  </div>
107
126
 
108
- <span class="bit-section-title">Time Travel (${c}/${p})</span>
109
-
127
+ <span class="bit-section-title">Time Travel (${a}/${o})</span>
128
+
110
129
  <div class="bit-controls">
111
- <button class="bit-action-btn" data-action="undo" data-store="${m(o)}" ${a.canUndo?"":"disabled"}>
130
+ <button class="bit-action-btn" data-action="undo" data-store="${p(r)}" ${e.canUndo?"":"disabled"}>
112
131
  <span>\u21BA</span> Undo
113
132
  </button>
114
- <button class="bit-action-btn" data-action="redo" data-store="${m(o)}" ${a.canRedo?"":"disabled"}>
133
+ <button class="bit-action-btn" data-action="redo" data-store="${p(r)}" ${e.canRedo?"":"disabled"}>
115
134
  <span>\u21BB</span> Redo
116
135
  </button>
117
- <button class="bit-action-btn bit-btn-reset" data-action="reset" data-store="${m(o)}">
136
+ <button class="bit-action-btn bit-btn-reset" data-action="reset" data-store="${p(r)}">
118
137
  <span>\u{1F5D1}</span> Reset
119
138
  </button>
120
139
  </div>
121
- `,n&&(i+=`
140
+ `;return t&&(n+=`
122
141
  <span class="bit-section-title" style="color: #f87171;">\u26A0\uFE0F Validations Failing</span>
123
- <pre class="bit-error-box">${M(r.errors)}</pre>
124
- `),i+=`
142
+ <pre class="bit-error-box">${O(i.errors)}</pre>
143
+ `),n+=`
125
144
  <span class="bit-section-title">Values</span>
126
- <pre class="bit-pre">${M(r.values)}</pre>
145
+ <pre class="bit-pre">${O(i.values)}</pre>
146
+ </div>
147
+ `,n}render(){let r=Object.entries(this.currentStoresState);if(r.length===0){this.activeStoreId=null,this.rootElement.innerHTML="";return}let i=this.activeStoreId;(!this.activeStoreId||!r.some(([o])=>o===this.activeStoreId))&&(this.activeStoreId=_nullishCoalesce(_optionalChain([r, 'access', _ => _[0], 'optionalAccess', _2 => _2[0]]), () => (null)));let t=0;if(this.isOpen){let o=this.rootElement.querySelector(".bit-devtools-panel");o&&(t=o.scrollTop)}let e="";if(this.isOpen){if(e=`
148
+ <div class="bit-devtools-panel">
149
+ <div class="bit-devtools-header">
150
+ <h2><span style="font-size: 20px;">\u{1F6E0}</span> Bit-Form DevTools</h2>
151
+ <span style="font-size: 11px; color: #64748b;">v1.0.0</span>
127
152
  </div>
128
- `}i+="</div>"}let e=`
153
+ `,r.length>=2){e+='<div class="bit-devtools-tabs">';for(let[n]of r){let d=n===this.activeStoreId;e+=`<button class="bit-devtools-tab${d?" active":""}" data-store="${p(n)}">${p(n)}</button>`}e+="</div>"}let o=_nullishCoalesce(r.find(([n])=>n===this.activeStoreId), () => (r[0]));e+=this.renderStoreBlock(o[0],o[1]),e+="</div>"}let a=`
129
154
  <button class="bit-devtools-trigger" style="transform: ${this.isOpen?"scale(0.9)":"scale(1)"};" title="Abrir DevTools">
130
155
  ${this.isOpen?"\u2716":"Bit"}
131
156
  </button>
132
- `;this.rootElement.innerHTML=i+e}}, _class);function O(t,s=_chunkU6UFULNScjs.a){let i=new b(t,{onUndo:n=>_optionalChain([_chunkGBHOCY7Ecjs.b.call(void 0, s.stores,n), 'optionalAccess', _ => _.undo, 'call', _2 => _2()]),onRedo:n=>_optionalChain([_chunkGBHOCY7Ecjs.b.call(void 0, s.stores,n), 'optionalAccess', _3 => _3.redo, 'call', _4 => _4()]),onReset:n=>_optionalChain([_chunkGBHOCY7Ecjs.b.call(void 0, s.stores,n), 'optionalAccess', _5 => _5.reset, 'call', _6 => _6()])}),e=()=>_chunkGBHOCY7Ecjs.a.call(void 0, s.stores);i.updateState(e());let o,r=s.subscribe(()=>{o===void 0&&(o=requestAnimationFrame(()=>{o=void 0,i.updateState(e())}))});return{ui:i,destroy:()=>{o!==void 0&&cancelAnimationFrame(o),r(),t.innerHTML=""}}}function w(t,s="ws://localhost:3000",i){let e=null,o=l=>{if(_optionalChain([e, 'optionalAccess', _7 => _7.readyState])===WebSocket.OPEN)try{e.send(JSON.stringify(l))}catch(d){console.warn("[bit-form] Failed to send message:",d)}else console.warn("[bit-form] Tentativa de envio falhou. WebSocket n\xE3o est\xE1 aberto.")},r=(l,d)=>{o({type:"ACTION",protocolVersion:1,payload:{storeId:l,action:d}})},n=new b(t,{onUndo:l=>r(l,"undo"),onRedo:l=>r(l,"redo"),onReset:l=>r(l,"reset")}),a=!1,c,p=0,x=3e4;function k(){e&&(e.addEventListener("open",()=>{p=0,o({type:"HELLO",protocolVersion:1,payload:{role:"client",protocolVersion:1}}),console.log(`[bit-form] Conectado ao DevTools remoto em ${s}`)}),e.addEventListener("message",l=>{try{let d=JSON.parse(l.data);_chunkQKGTVKBUcjs.d.call(void 0, d)&&n.updateState(d.payload)}catch(d){console.error("[bit-form] Erro ao processar mensagem do WebSocket:",d)}}),e.addEventListener("error",l=>{console.error("[bit-form] Erro na conex\xE3o do DevTools remoto:",l)}),e.addEventListener("close",()=>{if(a)return;console.log("[bit-form] Conex\xE3o DevTools remota fechada. Reconectando...");let d=Math.min(1e3*Math.pow(2,p),x)*(.5+Math.random()*.5);p++,c=setTimeout(()=>{a||g()},d)}))}function g(){e&&(e.onopen=null,e.onmessage=null,e.onerror=null,e.onclose=null,(e.readyState===WebSocket.OPEN||e.readyState===WebSocket.CONNECTING)&&e.close());try{e=new WebSocket(s)}catch(l){console.error("[bit-form] Failed to create WebSocket for remote devtools:",l);let y=Math.min(1e3*Math.pow(2,p),x)*(.5+Math.random()*.5);p++,a||(c=setTimeout(()=>{a||g()},y));return}k()}return g(),{ui:n,destroy:()=>{a=!0,c&&(clearTimeout(c),c=void 0),e&&(e.readyState===WebSocket.OPEN||e.readyState===WebSocket.CONNECTING)&&e.close(),t.innerHTML=""}}}function v(t={}){let{mode:s="local",url:i,bus:e}=t,o,r=!1;if(typeof t.container=="string"){let a=document.querySelector(t.container);if(!a)throw new Error(`[bit-form] Container '${t.container}' n\xE3o encontrado na p\xE1gina.`);o=a}else t.container instanceof HTMLElement?o=t.container:(o=document.createElement("div"),o.id="bit-form-devtools-root",o.style.position="fixed",o.style.bottom="20px",o.style.right="20px",o.style.zIndex="9999",o.style.maxHeight="80vh",o.style.overflowY="auto",o.style.boxShadow="0 10px 25px rgba(0,0,0,0.1)",document.body.appendChild(o),r=!0);let n;if(s==="local")console.log("[bit-form] DevTools iniciado em modo Local."),n=O(o,e);else if(s==="remote")console.log("[bit-form] DevTools iniciado em modo Remote."),n=w(o,i,e);else throw new Error(`[bit-form] Modo DevTools inv\xE1lido: ${s}`);return{...n,destroy:()=>{n&&typeof n.destroy=="function"&&n.destroy(),r&&o.parentNode?o.parentNode.removeChild(o):o.innerHTML=""}}}function L(t){return typeof t=="boolean"?{enabled:t,mode:"local"}:{enabled:!!t,mode:_nullishCoalesce(_optionalChain([t, 'optionalAccess', _8 => _8.mode]), () => ("local")),url:_optionalChain([t, 'optionalAccess', _9 => _9.url])}}function R(){return typeof process<"u"&&typeof process.env<"u"&&process.env.NODE_ENV==="production"?!0:(typeof process<"u"&&typeof process.env<"u"&&process.env.VITEST==="true",!1)}function A(t){return{name:"bit-devtools",setup:s=>{let i=L(_nullishCoalesce(t, () => (s.getConfig().devTools)));if(!i.enabled||R()&&t!==!0)return;let e=null,o=s.getConfig().bus;try{if(i.mode==="remote")e=_chunkGBHOCY7Ecjs.c.call(void 0, i.url||"ws://localhost:3000",o);else{let r=v({bus:o});e=r&&typeof r.destroy=="function"?r.destroy:null}}catch (e3){}return()=>{e&&(e(),e=null)}}}}exports.DEVTOOLS_PROTOCOL_VERSION = _chunkQKGTVKBUcjs.a; exports.createDevToolsPlugin = A; exports.initDevTools = v;
157
+ `;if(this.rootElement.innerHTML=e+a,this.isOpen&&this.activeStoreId===i&&t>0){let o=this.rootElement.querySelector(".bit-devtools-panel");o&&(o.scrollTop=t)}}}, _class);function M(s,r=_chunkK3QLAMDGcjs.a){let i=new b(s,{onUndo:o=>_optionalChain([_chunkLBWJK3ICcjs.b.call(void 0, r.stores,o), 'optionalAccess', _3 => _3.undo, 'call', _4 => _4()]),onRedo:o=>_optionalChain([_chunkLBWJK3ICcjs.b.call(void 0, r.stores,o), 'optionalAccess', _5 => _5.redo, 'call', _6 => _6()]),onReset:o=>_optionalChain([_chunkLBWJK3ICcjs.b.call(void 0, r.stores,o), 'optionalAccess', _7 => _7.reset, 'call', _8 => _8()])}),t=()=>_chunkLBWJK3ICcjs.a.call(void 0, r.stores);i.updateState(t());let e,a=r.subscribe(()=>{e===void 0&&(e=requestAnimationFrame(()=>{e=void 0,i.updateState(t())}))});return{ui:i,destroy:()=>{e!==void 0&&cancelAnimationFrame(e),a(),s.innerHTML=""}}}function k(s,r="ws://localhost:3000",i){let t=null,e=l=>{if(_optionalChain([t, 'optionalAccess', _9 => _9.readyState])===WebSocket.OPEN)try{t.send(JSON.stringify(l))}catch(c){console.warn("[bit-form] Failed to send message:",c)}else console.warn("[bit-form] Tentativa de envio falhou. WebSocket n\xE3o est\xE1 aberto.")},a=(l,c)=>{e({type:"ACTION",protocolVersion:1,payload:{storeId:l,action:c}})},o=new b(s,{onUndo:l=>a(l,"undo"),onRedo:l=>a(l,"redo"),onReset:l=>a(l,"reset")}),n=!1,d,f=0,x=3e4;function w(){t&&(t.addEventListener("open",()=>{f=0,e({type:"HELLO",protocolVersion:1,payload:{role:"client",protocolVersion:1}}),console.log(`[bit-form] Conectado ao DevTools remoto em ${r}`)}),t.addEventListener("message",l=>{try{let c=JSON.parse(l.data);_chunkQKGTVKBUcjs.d.call(void 0, c)&&o.updateState(c.payload)}catch(c){console.error("[bit-form] Erro ao processar mensagem do WebSocket:",c)}}),t.addEventListener("error",l=>{console.error("[bit-form] Erro na conex\xE3o do DevTools remoto:",l)}),t.addEventListener("close",()=>{if(n)return;console.log("[bit-form] Conex\xE3o DevTools remota fechada. Reconectando...");let c=Math.min(1e3*Math.pow(2,f),x)*(.5+Math.random()*.5);f++,d=setTimeout(()=>{n||g()},c)}))}function g(){t&&(t.onopen=null,t.onmessage=null,t.onerror=null,t.onclose=null,(t.readyState===WebSocket.OPEN||t.readyState===WebSocket.CONNECTING)&&t.close());try{t=new WebSocket(r)}catch(l){console.error("[bit-form] Failed to create WebSocket for remote devtools:",l);let h=Math.min(1e3*Math.pow(2,f),x)*(.5+Math.random()*.5);f++,n||(d=setTimeout(()=>{n||g()},h));return}w()}return g(),{ui:o,destroy:()=>{n=!0,d&&(clearTimeout(d),d=void 0),t&&(t.readyState===WebSocket.OPEN||t.readyState===WebSocket.CONNECTING)&&t.close(),s.innerHTML=""}}}function v(s={}){let{mode:r="local",url:i,bus:t}=s,e,a=!1;if(typeof s.container=="string"){let n=document.querySelector(s.container);if(!n)throw new Error(`[bit-form] Container '${s.container}' n\xE3o encontrado na p\xE1gina.`);e=n}else s.container instanceof HTMLElement?e=s.container:(e=document.createElement("div"),e.id="bit-form-devtools-root",e.style.position="fixed",e.style.bottom="20px",e.style.right="20px",e.style.zIndex="9999",e.style.maxHeight="80vh",e.style.overflowY="auto",e.style.boxShadow="0 10px 25px rgba(0,0,0,0.1)",document.body.appendChild(e),a=!0);let o;if(r==="local")console.log("[bit-form] DevTools iniciado em modo Local."),o=M(e,t);else if(r==="remote")console.log("[bit-form] DevTools iniciado em modo Remote."),o=k(e,i,t);else throw new Error(`[bit-form] Modo DevTools inv\xE1lido: ${r}`);return{...o,destroy:()=>{o&&typeof o.destroy=="function"&&o.destroy(),a&&e.parentNode?e.parentNode.removeChild(e):e.innerHTML=""}}}function L(s){return typeof s=="boolean"?{enabled:s,mode:"local"}:{enabled:!!s,mode:_nullishCoalesce(_optionalChain([s, 'optionalAccess', _10 => _10.mode]), () => ("local")),url:_optionalChain([s, 'optionalAccess', _11 => _11.url])}}function A(){return typeof process<"u"&&typeof process.env<"u"&&process.env.NODE_ENV==="production"?!0:(typeof process<"u"&&typeof process.env<"u"&&process.env.VITEST==="true",!1)}function R(s){return{name:"bit-devtools",setup:r=>{let i=L(_nullishCoalesce(s, () => (r.getConfig().devTools)));if(!i.enabled||A()&&s!==!0)return;let t=null,e=r.getConfig().bus;try{if(i.mode==="remote")t=_chunkLBWJK3ICcjs.c.call(void 0, i.url||"ws://localhost:3000",e);else{let a=v({bus:e});t=a&&typeof a.destroy=="function"?a.destroy:null}}catch (e3){}return()=>{t&&(t(),t=null)}}}}exports.DEVTOOLS_PROTOCOL_VERSION = _chunkQKGTVKBUcjs.a; exports.createDevToolsPlugin = R; exports.initDevTools = v;
133
158
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/builds/kenji.ccp-group/bit-form/dist/devtools/index.cjs","../../src/devtools/ui/styles.ts","../../src/devtools/ui/index.ts","../../src/devtools/adapters/local.ts","../../src/devtools/adapters/remote.ts"],"names":["getDevToolsCSS","escapeHtml","str","safeJsonStringify","value","BitFormDevToolsUI","container","actions","style","target","btn","action","storeId","storesState","storeEntries","panelHtml","id","state","hasErrors","meta","currentStep","totalSteps","triggerHtml","setupLocalDevTools","bus","bitBus","ui","getDevToolsActionableStore","getFullSnapshot","createDevToolsSnapshotMap","rafId","unsubscribe","setupRemoteDevTools","url","_bus","socket","sendMessage","message","e","sendAction","destroyed","reconnectTimer","retries","MAX_RETRY_DELAY","attachListeners"],"mappings":"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","file":"/builds/kenji.ccp-group/bit-form/dist/devtools/index.cjs","sourcesContent":[null,"export function getDevToolsCSS(): string {\n return `\n .bit-devtools-container {\n position: fixed;\n bottom: 20px;\n right: 20px;\n z-index: 9999;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n\n .bit-devtools-trigger {\n background: #10b981;\n color: #fff;\n border: none;\n border-radius: 50%;\n width: 48px;\n height: 48px;\n cursor: pointer;\n box-shadow: 0 4px 12px rgba(16, 185, 129, 0.4);\n font-weight: bold;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.2s;\n font-size: 16px;\n margin-top: 16px;\n }\n .bit-devtools-trigger:hover { transform: scale(1.05); }\n\n .bit-devtools-panel {\n width: 450px;\n max-height: 80vh;\n background: #0f172a;\n color: #f8fafc;\n border-radius: 8px;\n padding: 16px;\n overflow-y: auto;\n box-shadow: 0 20px 25px -5px rgba(0,0,0,0.5), 0 8px 10px -6px rgba(0,0,0,0.5);\n border: 1px solid #334155;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .bit-devtools-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 12px;\n border-bottom: 1px solid #1e293b;\n }\n .bit-devtools-header h2 { margin: 0; font-size: 16px; display: flex; align-items: center; gap: 8px; }\n\n .bit-store-block {\n background: #1e293b;\n border-radius: 6px;\n padding: 12px;\n border: 1px solid #334155;\n }\n\n .bit-store-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n }\n .bit-store-title { margin: 0; color: #38bdf8; font-size: 14px; font-weight: bold; }\n\n .bit-badge-group { display: flex; gap: 6px; flex-wrap: wrap; }\n .bit-badge { font-size: 10px; padding: 2px 6px; border-radius: 4px; text-transform: uppercase; font-weight: bold; }\n .badge-success { background: rgba(16, 185, 129, 0.2); color: #34d399; border: 1px solid rgba(16, 185, 129, 0.2); }\n .badge-error { background: rgba(239, 68, 68, 0.2); color: #f87171; border: 1px solid rgba(239, 68, 68, 0.2); }\n .badge-warn { background: rgba(245, 158, 11, 0.2); color: #fbbf24; border: 1px solid rgba(245, 158, 11, 0.2); }\n .badge-info { background: rgba(56, 189, 248, 0.2); color: #7dd3fc; border: 1px solid rgba(56, 189, 248, 0.2); }\n\n .bit-section-title { font-size: 11px; color: #94a3b8; text-transform: uppercase; letter-spacing: 1px; margin: 12px 0 4px 0; display: block; }\n\n .bit-controls { display: flex; gap: 6px; margin-bottom: 12px; background: #0f172a; padding: 8px; border-radius: 6px; }\n .bit-action-btn { flex: 1; background: #334155; color: #e2e8f0; border: 1px solid #475569; padding: 6px 0; border-radius: 4px; cursor: pointer; font-size: 11px; display: flex; align-items: center; justify-content: center; gap: 4px; transition: all 0.2s; }\n .bit-action-btn:hover:not(:disabled) { background: #475569; }\n .bit-action-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n .bit-btn-reset { color: #fca5a5; border-color: rgba(239,68,68,0.3); }\n .bit-btn-reset:hover { background: rgba(239,68,68,0.1) !important; }\n\n pre.bit-pre { background: #020617; padding: 10px; border-radius: 4px; font-size: 11px; overflow-x: auto; border: 1px solid #1e293b; margin: 0; color: #e2e8f0; }\n pre.bit-error-box { background: rgba(239, 68, 68, 0.05); padding: 10px; border-radius: 4px; font-size: 11px; border: 1px dashed #ef4444; color: #fca5a5; margin: 0; overflow-x: auto; }\n `;\n}\n","import { getDevToolsCSS } from \"./styles\";\nimport type { DevToolsActions } from \"../types\";\nimport type { DevToolsStoreSnapshots } from \"../protocol\";\n\nexport type { DevToolsActions };\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction safeJsonStringify(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return \"[Unserializable]\";\n }\n}\n\nexport class BitFormDevToolsUI {\n private container: HTMLElement;\n private actions: DevToolsActions;\n private rootElement: HTMLDivElement;\n private currentStoresState: DevToolsStoreSnapshots = {};\n private isOpen = false;\n\n constructor(container: HTMLElement, actions: DevToolsActions) {\n this.container = container;\n this.actions = actions;\n\n if (!document.getElementById(\"bit-devtools-styles\")) {\n const style = document.createElement(\"style\");\n style.id = \"bit-devtools-styles\";\n style.textContent = getDevToolsCSS();\n document.head.appendChild(style);\n }\n\n this.rootElement = document.createElement(\"div\");\n this.rootElement.className = \"bit-devtools-container\";\n this.container.appendChild(this.rootElement);\n\n this.rootElement.addEventListener(\"click\", (e) => {\n const target = e.target as HTMLElement;\n\n // Evento do botão flutuante\n if (target.closest(\".bit-devtools-trigger\")) {\n this.isOpen = !this.isOpen;\n this.render();\n return;\n }\n\n // Eventos dos botões de ação\n const btn = target.closest(\".bit-action-btn\");\n if (btn && !btn.hasAttribute(\"disabled\")) {\n const action = btn.getAttribute(\"data-action\");\n const storeId = btn.getAttribute(\"data-store\");\n\n if (action && storeId) {\n if (action === \"undo\") this.actions.onUndo(storeId);\n if (action === \"redo\") this.actions.onRedo(storeId);\n if (action === \"reset\") this.actions.onReset(storeId);\n }\n }\n });\n }\n\n public updateState(storesState: DevToolsStoreSnapshots) {\n this.currentStoresState = storesState;\n this.render();\n }\n\n private render() {\n const storeEntries = Object.entries(this.currentStoresState);\n if (storeEntries.length === 0) {\n this.rootElement.innerHTML = \"\";\n return;\n }\n\n let panelHtml = \"\";\n\n if (this.isOpen) {\n panelHtml = `\n <div class=\"bit-devtools-panel\">\n <div class=\"bit-devtools-header\">\n <h2><span style=\"font-size: 20px;\">🛠</span> Bit-Form DevTools</h2>\n <span style=\"font-size: 11px; color: #64748b;\">v1.0.0</span>\n </div>\n `;\n\n for (const [id, state] of storeEntries) {\n const hasErrors = Object.keys(state.errors || {}).length > 0;\n\n // Lemos os metadados do histórico que o adaptador injetou\n const meta = state._meta || {\n totalSteps: 0,\n currentIndex: -1,\n canUndo: false,\n canRedo: false,\n };\n const currentStep = meta.currentIndex + 1;\n const totalSteps = meta.totalSteps;\n\n panelHtml += `\n <div class=\"bit-store-block\">\n <div class=\"bit-store-header\">\n <h3 class=\"bit-store-title\">${escapeHtml(id)}</h3>\n <div class=\"bit-badge-group\">\n <span class=\"bit-badge ${state.isValid ? \"badge-success\" : \"badge-error\"}\">\n ${state.isValid ? \"✓ Valid\" : \"✕ Invalid\"}\n </span>\n ${state.isDirty ? `<span class=\"bit-badge badge-warn\">Dirty</span>` : \"\"}\n ${state.isSubmitting ? `<span class=\"bit-badge badge-info\">⏳ Submitting</span>` : \"\"}\n </div>\n </div>\n\n <span class=\"bit-section-title\">Time Travel (${currentStep}/${totalSteps})</span>\n \n <div class=\"bit-controls\">\n <button class=\"bit-action-btn\" data-action=\"undo\" data-store=\"${escapeHtml(id)}\" ${meta.canUndo ? \"\" : \"disabled\"}>\n <span>↺</span> Undo\n </button>\n <button class=\"bit-action-btn\" data-action=\"redo\" data-store=\"${escapeHtml(id)}\" ${meta.canRedo ? \"\" : \"disabled\"}>\n <span>↻</span> Redo\n </button>\n <button class=\"bit-action-btn bit-btn-reset\" data-action=\"reset\" data-store=\"${escapeHtml(id)}\">\n <span>🗑</span> Reset\n </button>\n </div>\n `;\n\n if (hasErrors) {\n panelHtml += `\n <span class=\"bit-section-title\" style=\"color: #f87171;\">⚠️ Validations Failing</span>\n <pre class=\"bit-error-box\">${safeJsonStringify(state.errors)}</pre>\n `;\n }\n\n panelHtml += `\n <span class=\"bit-section-title\">Values</span>\n <pre class=\"bit-pre\">${safeJsonStringify(state.values)}</pre>\n </div>\n `;\n }\n\n panelHtml += `</div>`;\n }\n\n // Botão Flutuante (sempre renderizado)\n const triggerHtml = `\n <button class=\"bit-devtools-trigger\" style=\"transform: ${this.isOpen ? \"scale(0.9)\" : \"scale(1)\"};\" title=\"Abrir DevTools\">\n ${this.isOpen ? \"✖\" : \"Bit\"}\n </button>\n `;\n\n this.rootElement.innerHTML = panelHtml + triggerHtml;\n }\n}\n","import { bitBus } from \"../../core\";\nimport type { BitBus } from \"../../core\";\nimport { BitFormDevToolsUI } from \"../ui\";\nimport { createDevToolsSnapshotMap } from \"../store-snapshot\";\nimport { getDevToolsActionableStore } from \"../store-port\";\n\nexport function setupLocalDevTools(\n container: HTMLElement,\n bus: BitBus = bitBus,\n) {\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => getDevToolsActionableStore(bus.stores, id)?.undo(),\n onRedo: (id) => getDevToolsActionableStore(bus.stores, id)?.redo(),\n onReset: (id) => getDevToolsActionableStore(bus.stores, id)?.reset(),\n });\n\n const getFullSnapshot = () => createDevToolsSnapshotMap(bus.stores);\n\n ui.updateState(getFullSnapshot());\n\n let rafId: number | undefined;\n const unsubscribe = bus.subscribe(() => {\n if (rafId !== undefined) return;\n rafId = requestAnimationFrame(() => {\n rafId = undefined;\n ui.updateState(getFullSnapshot());\n });\n });\n\n return {\n ui,\n destroy: () => {\n if (rafId !== undefined) cancelAnimationFrame(rafId);\n unsubscribe();\n container.innerHTML = \"\";\n },\n };\n}\n","import { BitFormDevToolsUI } from \"../ui\";\nimport type { BitBus } from \"../../core\";\nimport type {\n DevToolsHelloMessage,\n DevToolsActionMessage,\n DevToolsActionName,\n DevToolsRemoteMessage,\n} from \"../types\";\nimport {\n DEVTOOLS_PROTOCOL_VERSION,\n isDevToolsStateUpdateMessage,\n} from \"../protocol\";\n\nexport function setupRemoteDevTools(\n container: HTMLElement,\n url: string = \"ws://localhost:3000\",\n _bus?: BitBus,\n) {\n let socket: WebSocket | null = null;\n\n const sendMessage = (message: DevToolsRemoteMessage) => {\n if (socket?.readyState === WebSocket.OPEN) {\n try {\n socket.send(JSON.stringify(message));\n } catch (e) {\n console.warn(\"[bit-form] Failed to send message:\", e);\n }\n } else {\n console.warn(\n \"[bit-form] Tentativa de envio falhou. WebSocket não está aberto.\",\n );\n }\n };\n\n const sendAction = (storeId: string, action: DevToolsActionName) => {\n const message: DevToolsActionMessage = {\n type: \"ACTION\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload: { storeId, action },\n };\n sendMessage(message);\n };\n\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => sendAction(id, \"undo\"),\n onRedo: (id) => sendAction(id, \"redo\"),\n onReset: (id) => sendAction(id, \"reset\"),\n });\n\n let destroyed = false;\n let reconnectTimer: ReturnType<typeof setTimeout> | undefined;\n let retries = 0;\n const MAX_RETRY_DELAY = 30000;\n\n function attachListeners() {\n if (!socket) return;\n\n socket.addEventListener(\"open\", () => {\n retries = 0;\n const helloMessage: DevToolsHelloMessage = {\n type: \"HELLO\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload: { role: \"client\", protocolVersion: DEVTOOLS_PROTOCOL_VERSION },\n };\n\n sendMessage(helloMessage);\n console.log(`[bit-form] Conectado ao DevTools remoto em ${url}`);\n });\n\n socket.addEventListener(\"message\", (msg: MessageEvent) => {\n try {\n const data = JSON.parse(msg.data) as DevToolsRemoteMessage;\n if (isDevToolsStateUpdateMessage(data)) {\n ui.updateState(data.payload);\n }\n } catch (e) {\n console.error(\"[bit-form] Erro ao processar mensagem do WebSocket:\", e);\n }\n });\n\n socket.addEventListener(\"error\", (err) => {\n console.error(\"[bit-form] Erro na conexão do DevTools remoto:\", err);\n });\n\n socket.addEventListener(\"close\", () => {\n if (destroyed) return;\n console.log(\"[bit-form] Conexão DevTools remota fechada. Reconectando...\");\n const delay = Math.min(1000 * Math.pow(2, retries), MAX_RETRY_DELAY);\n const jitter = delay * (0.5 + Math.random() * 0.5);\n retries++;\n reconnectTimer = setTimeout(() => {\n if (destroyed) return;\n connect();\n }, jitter);\n });\n }\n\n function connect() {\n if (socket) {\n socket.onopen = null;\n socket.onmessage = null;\n socket.onerror = null;\n socket.onclose = null;\n if (socket.readyState === WebSocket.OPEN || socket.readyState === WebSocket.CONNECTING) {\n socket.close();\n }\n }\n try {\n socket = new WebSocket(url);\n } catch (e) {\n console.error(\"[bit-form] Failed to create WebSocket for remote devtools:\", e);\n const delay = Math.min(1000 * Math.pow(2, retries), MAX_RETRY_DELAY);\n const jitter = delay * (0.5 + Math.random() * 0.5);\n retries++;\n if (!destroyed) {\n reconnectTimer = setTimeout(() => {\n if (destroyed) return;\n connect();\n }, jitter);\n }\n return;\n }\n attachListeners();\n }\n\n connect();\n\n return {\n ui,\n destroy: () => {\n destroyed = true;\n if (reconnectTimer) {\n clearTimeout(reconnectTimer);\n reconnectTimer = undefined;\n }\n if (\n socket &&\n (socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING)\n ) {\n socket.close();\n }\n container.innerHTML = \"\";\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["/builds/kenji.ccp-group/bit-form/dist/devtools/index.cjs","../../src/devtools/ui/styles.ts","../../src/devtools/ui/index.ts","../../src/devtools/adapters/local.ts","../../src/devtools/adapters/remote.ts"],"names":["getDevToolsCSS","escapeHtml","str","safeJsonStringify","value","BitFormDevToolsUI","container","actions","style","e","target","tab","storeId","btn","action","storesState","id","state","hasErrors","meta","currentStep","totalSteps","html","storeEntries","prevActiveStoreId","savedScrollTop","panel","panelHtml","isActive","activeEntry","triggerHtml","setupLocalDevTools","bus","bitBus","ui","getDevToolsActionableStore","getFullSnapshot","createDevToolsSnapshotMap","rafId","unsubscribe","setupRemoteDevTools","url","_bus","socket","sendMessage","message","sendAction","destroyed","reconnectTimer","retries","MAX_RETRY_DELAY","attachListeners"],"mappings":"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","file":"/builds/kenji.ccp-group/bit-form/dist/devtools/index.cjs","sourcesContent":[null,"export function getDevToolsCSS(): string {\n return `\n .bit-devtools-container {\n position: fixed;\n bottom: 20px;\n right: 20px;\n z-index: 9999;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n\n .bit-devtools-trigger {\n background: #10b981;\n color: #fff;\n border: none;\n border-radius: 50%;\n width: 48px;\n height: 48px;\n cursor: pointer;\n box-shadow: 0 4px 12px rgba(16, 185, 129, 0.4);\n font-weight: bold;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.2s;\n font-size: 16px;\n margin-top: 16px;\n }\n .bit-devtools-trigger:hover { transform: scale(1.05); }\n\n .bit-devtools-panel {\n width: 450px;\n max-height: 80vh;\n background: #0f172a;\n color: #f8fafc;\n border-radius: 8px;\n padding: 16px;\n overflow-y: auto;\n box-shadow: 0 20px 25px -5px rgba(0,0,0,0.5), 0 8px 10px -6px rgba(0,0,0,0.5);\n border: 1px solid #334155;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .bit-devtools-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 12px;\n border-bottom: 1px solid #1e293b;\n }\n .bit-devtools-header h2 { margin: 0; font-size: 16px; display: flex; align-items: center; gap: 8px; }\n\n .bit-store-block {\n background: #1e293b;\n border-radius: 6px;\n padding: 12px;\n border: 1px solid #334155;\n }\n\n .bit-store-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n }\n .bit-store-title { margin: 0; color: #38bdf8; font-size: 14px; font-weight: bold; }\n\n .bit-badge-group { display: flex; gap: 6px; flex-wrap: wrap; }\n .bit-badge { font-size: 10px; padding: 2px 6px; border-radius: 4px; text-transform: uppercase; font-weight: bold; }\n .badge-success { background: rgba(16, 185, 129, 0.2); color: #34d399; border: 1px solid rgba(16, 185, 129, 0.2); }\n .badge-error { background: rgba(239, 68, 68, 0.2); color: #f87171; border: 1px solid rgba(239, 68, 68, 0.2); }\n .badge-warn { background: rgba(245, 158, 11, 0.2); color: #fbbf24; border: 1px solid rgba(245, 158, 11, 0.2); }\n .badge-info { background: rgba(56, 189, 248, 0.2); color: #7dd3fc; border: 1px solid rgba(56, 189, 248, 0.2); }\n\n .bit-devtools-tabs {\n display: flex;\n gap: 4px;\n padding: 8px 0 0 0;\n border-bottom: 1px solid #1e293b;\n }\n .bit-devtools-tab {\n background: transparent;\n color: #94a3b8;\n border: none;\n border-bottom: 2px solid transparent;\n padding: 6px 12px;\n font-size: 12px;\n font-family: inherit;\n cursor: pointer;\n transition: all 0.2s;\n border-radius: 4px 4px 0 0;\n }\n .bit-devtools-tab:hover { color: #e2e8f0; background: rgba(255,255,255,0.05); }\n .bit-devtools-tab.active {\n color: #38bdf8;\n border-bottom-color: #38bdf8;\n background: rgba(56, 189, 248, 0.08);\n }\n\n .bit-section-title { font-size: 11px; color: #94a3b8; text-transform: uppercase; letter-spacing: 1px; margin: 12px 0 4px 0; display: block; }\n\n .bit-controls { display: flex; gap: 6px; margin-bottom: 12px; background: #0f172a; padding: 8px; border-radius: 6px; }\n .bit-action-btn { flex: 1; background: #334155; color: #e2e8f0; border: 1px solid #475569; padding: 6px 0; border-radius: 4px; cursor: pointer; font-size: 11px; display: flex; align-items: center; justify-content: center; gap: 4px; transition: all 0.2s; }\n .bit-action-btn:hover:not(:disabled) { background: #475569; }\n .bit-action-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n .bit-btn-reset { color: #fca5a5; border-color: rgba(239,68,68,0.3); }\n .bit-btn-reset:hover { background: rgba(239,68,68,0.1) !important; }\n\n pre.bit-pre { background: #020617; padding: 10px; border-radius: 4px; font-size: 11px; overflow-x: auto; border: 1px solid #1e293b; margin: 0; color: #e2e8f0; }\n pre.bit-error-box { background: rgba(239, 68, 68, 0.05); padding: 10px; border-radius: 4px; font-size: 11px; border: 1px dashed #ef4444; color: #fca5a5; margin: 0; overflow-x: auto; }\n `;\n}\n","import { getDevToolsCSS } from \"./styles\";\nimport type { DevToolsActions } from \"../types\";\nimport type { DevToolsStoreSnapshots } from \"../protocol\";\n\nexport type { DevToolsActions };\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction safeJsonStringify(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return \"[Unserializable]\";\n }\n}\n\nexport class BitFormDevToolsUI {\n private container: HTMLElement;\n private actions: DevToolsActions;\n private rootElement: HTMLDivElement;\n private currentStoresState: DevToolsStoreSnapshots = {};\n private isOpen = false;\n private activeStoreId: string | null = null;\n\n constructor(container: HTMLElement, actions: DevToolsActions) {\n this.container = container;\n this.actions = actions;\n\n if (!document.getElementById(\"bit-devtools-styles\")) {\n const style = document.createElement(\"style\");\n style.id = \"bit-devtools-styles\";\n style.textContent = getDevToolsCSS();\n document.head.appendChild(style);\n }\n\n this.rootElement = document.createElement(\"div\");\n this.rootElement.className = \"bit-devtools-container\";\n this.container.appendChild(this.rootElement);\n\n this.rootElement.addEventListener(\"click\", (e) => {\n const target = e.target as HTMLElement;\n\n if (target.closest(\".bit-devtools-trigger\")) {\n this.isOpen = !this.isOpen;\n this.render();\n return;\n }\n\n const tab = target.closest(\".bit-devtools-tab\");\n if (tab) {\n const storeId = tab.getAttribute(\"data-store\");\n if (storeId) {\n this.activeStoreId = storeId;\n this.render();\n }\n return;\n }\n\n const btn = target.closest(\".bit-action-btn\");\n if (btn && !btn.hasAttribute(\"disabled\")) {\n const action = btn.getAttribute(\"data-action\");\n const storeId = btn.getAttribute(\"data-store\");\n\n if (action && storeId) {\n if (action === \"undo\") this.actions.onUndo(storeId);\n if (action === \"redo\") this.actions.onRedo(storeId);\n if (action === \"reset\") this.actions.onReset(storeId);\n }\n }\n });\n }\n\n public updateState(storesState: DevToolsStoreSnapshots) {\n this.currentStoresState = storesState;\n this.render();\n }\n\n private renderStoreBlock(id: string, state: DevToolsStoreSnapshots[string]) {\n const hasErrors = Object.keys(state.errors || {}).length > 0;\n\n const meta = state._meta || {\n totalSteps: 0,\n currentIndex: -1,\n canUndo: false,\n canRedo: false,\n };\n const currentStep = meta.currentIndex + 1;\n const totalSteps = meta.totalSteps;\n\n let html = `\n <div class=\"bit-store-block\">\n <div class=\"bit-store-header\">\n <h3 class=\"bit-store-title\">${escapeHtml(id)}</h3>\n <div class=\"bit-badge-group\">\n <span class=\"bit-badge ${state.isValid ? \"badge-success\" : \"badge-error\"}\">\n ${state.isValid ? \"✓ Valid\" : \"✕ Invalid\"}\n </span>\n ${state.isDirty ? `<span class=\"bit-badge badge-warn\">Dirty</span>` : \"\"}\n ${state.isSubmitting ? `<span class=\"bit-badge badge-info\">⏳ Submitting</span>` : \"\"}\n </div>\n </div>\n\n <span class=\"bit-section-title\">Time Travel (${currentStep}/${totalSteps})</span>\n\n <div class=\"bit-controls\">\n <button class=\"bit-action-btn\" data-action=\"undo\" data-store=\"${escapeHtml(id)}\" ${meta.canUndo ? \"\" : \"disabled\"}>\n <span>↺</span> Undo\n </button>\n <button class=\"bit-action-btn\" data-action=\"redo\" data-store=\"${escapeHtml(id)}\" ${meta.canRedo ? \"\" : \"disabled\"}>\n <span>↻</span> Redo\n </button>\n <button class=\"bit-action-btn bit-btn-reset\" data-action=\"reset\" data-store=\"${escapeHtml(id)}\">\n <span>🗑</span> Reset\n </button>\n </div>\n `;\n\n if (hasErrors) {\n html += `\n <span class=\"bit-section-title\" style=\"color: #f87171;\">⚠️ Validations Failing</span>\n <pre class=\"bit-error-box\">${safeJsonStringify(state.errors)}</pre>\n `;\n }\n\n html += `\n <span class=\"bit-section-title\">Values</span>\n <pre class=\"bit-pre\">${safeJsonStringify(state.values)}</pre>\n </div>\n `;\n\n return html;\n }\n\n private render() {\n const storeEntries = Object.entries(this.currentStoresState);\n if (storeEntries.length === 0) {\n this.activeStoreId = null;\n this.rootElement.innerHTML = \"\";\n return;\n }\n\n const prevActiveStoreId = this.activeStoreId;\n\n if (!this.activeStoreId || !storeEntries.some(([id]) => id === this.activeStoreId)) {\n this.activeStoreId = storeEntries[0]?.[0] ?? null;\n }\n\n let savedScrollTop = 0;\n if (this.isOpen) {\n const panel = this.rootElement.querySelector(\".bit-devtools-panel\");\n if (panel) {\n savedScrollTop = panel.scrollTop;\n }\n }\n\n let panelHtml = \"\";\n\n if (this.isOpen) {\n panelHtml = `\n <div class=\"bit-devtools-panel\">\n <div class=\"bit-devtools-header\">\n <h2><span style=\"font-size: 20px;\">🛠</span> Bit-Form DevTools</h2>\n <span style=\"font-size: 11px; color: #64748b;\">v1.0.0</span>\n </div>\n `;\n\n if (storeEntries.length >= 2) {\n panelHtml += `<div class=\"bit-devtools-tabs\">`;\n for (const [id] of storeEntries) {\n const isActive = id === this.activeStoreId;\n panelHtml += `<button class=\"bit-devtools-tab${isActive ? \" active\" : \"\"}\" data-store=\"${escapeHtml(id)}\">${escapeHtml(id)}</button>`;\n }\n panelHtml += `</div>`;\n }\n\n const activeEntry = storeEntries.find(([id]) => id === this.activeStoreId) ?? storeEntries[0]!;\n panelHtml += this.renderStoreBlock(activeEntry[0], activeEntry[1]);\n\n panelHtml += `</div>`;\n }\n\n const triggerHtml = `\n <button class=\"bit-devtools-trigger\" style=\"transform: ${this.isOpen ? \"scale(0.9)\" : \"scale(1)\"};\" title=\"Abrir DevTools\">\n ${this.isOpen ? \"✖\" : \"Bit\"}\n </button>\n `;\n\n this.rootElement.innerHTML = panelHtml + triggerHtml;\n\n if (this.isOpen && this.activeStoreId === prevActiveStoreId && savedScrollTop > 0) {\n const panel = this.rootElement.querySelector(\".bit-devtools-panel\");\n if (panel) {\n panel.scrollTop = savedScrollTop;\n }\n }\n }\n}\n","import { bitBus } from \"../../core\";\nimport type { BitBus } from \"../../core\";\nimport { BitFormDevToolsUI } from \"../ui\";\nimport { createDevToolsSnapshotMap } from \"../store-snapshot\";\nimport { getDevToolsActionableStore } from \"../store-port\";\n\nexport function setupLocalDevTools(\n container: HTMLElement,\n bus: BitBus = bitBus,\n) {\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => getDevToolsActionableStore(bus.stores, id)?.undo(),\n onRedo: (id) => getDevToolsActionableStore(bus.stores, id)?.redo(),\n onReset: (id) => getDevToolsActionableStore(bus.stores, id)?.reset(),\n });\n\n const getFullSnapshot = () => createDevToolsSnapshotMap(bus.stores);\n\n ui.updateState(getFullSnapshot());\n\n let rafId: number | undefined;\n const unsubscribe = bus.subscribe(() => {\n if (rafId !== undefined) return;\n rafId = requestAnimationFrame(() => {\n rafId = undefined;\n ui.updateState(getFullSnapshot());\n });\n });\n\n return {\n ui,\n destroy: () => {\n if (rafId !== undefined) cancelAnimationFrame(rafId);\n unsubscribe();\n container.innerHTML = \"\";\n },\n };\n}\n","import { BitFormDevToolsUI } from \"../ui\";\nimport type { BitBus } from \"../../core\";\nimport type {\n DevToolsHelloMessage,\n DevToolsActionMessage,\n DevToolsActionName,\n DevToolsRemoteMessage,\n} from \"../types\";\nimport {\n DEVTOOLS_PROTOCOL_VERSION,\n isDevToolsStateUpdateMessage,\n} from \"../protocol\";\n\nexport function setupRemoteDevTools(\n container: HTMLElement,\n url: string = \"ws://localhost:3000\",\n _bus?: BitBus,\n) {\n let socket: WebSocket | null = null;\n\n const sendMessage = (message: DevToolsRemoteMessage) => {\n if (socket?.readyState === WebSocket.OPEN) {\n try {\n socket.send(JSON.stringify(message));\n } catch (e) {\n console.warn(\"[bit-form] Failed to send message:\", e);\n }\n } else {\n console.warn(\n \"[bit-form] Tentativa de envio falhou. WebSocket não está aberto.\",\n );\n }\n };\n\n const sendAction = (storeId: string, action: DevToolsActionName) => {\n const message: DevToolsActionMessage = {\n type: \"ACTION\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload: { storeId, action },\n };\n sendMessage(message);\n };\n\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => sendAction(id, \"undo\"),\n onRedo: (id) => sendAction(id, \"redo\"),\n onReset: (id) => sendAction(id, \"reset\"),\n });\n\n let destroyed = false;\n let reconnectTimer: ReturnType<typeof setTimeout> | undefined;\n let retries = 0;\n const MAX_RETRY_DELAY = 30000;\n\n function attachListeners() {\n if (!socket) return;\n\n socket.addEventListener(\"open\", () => {\n retries = 0;\n const helloMessage: DevToolsHelloMessage = {\n type: \"HELLO\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload: { role: \"client\", protocolVersion: DEVTOOLS_PROTOCOL_VERSION },\n };\n\n sendMessage(helloMessage);\n console.log(`[bit-form] Conectado ao DevTools remoto em ${url}`);\n });\n\n socket.addEventListener(\"message\", (msg: MessageEvent) => {\n try {\n const data = JSON.parse(msg.data) as DevToolsRemoteMessage;\n if (isDevToolsStateUpdateMessage(data)) {\n ui.updateState(data.payload);\n }\n } catch (e) {\n console.error(\"[bit-form] Erro ao processar mensagem do WebSocket:\", e);\n }\n });\n\n socket.addEventListener(\"error\", (err) => {\n console.error(\"[bit-form] Erro na conexão do DevTools remoto:\", err);\n });\n\n socket.addEventListener(\"close\", () => {\n if (destroyed) return;\n console.log(\"[bit-form] Conexão DevTools remota fechada. Reconectando...\");\n const delay = Math.min(1000 * Math.pow(2, retries), MAX_RETRY_DELAY);\n const jitter = delay * (0.5 + Math.random() * 0.5);\n retries++;\n reconnectTimer = setTimeout(() => {\n if (destroyed) return;\n connect();\n }, jitter);\n });\n }\n\n function connect() {\n if (socket) {\n socket.onopen = null;\n socket.onmessage = null;\n socket.onerror = null;\n socket.onclose = null;\n if (socket.readyState === WebSocket.OPEN || socket.readyState === WebSocket.CONNECTING) {\n socket.close();\n }\n }\n try {\n socket = new WebSocket(url);\n } catch (e) {\n console.error(\"[bit-form] Failed to create WebSocket for remote devtools:\", e);\n const delay = Math.min(1000 * Math.pow(2, retries), MAX_RETRY_DELAY);\n const jitter = delay * (0.5 + Math.random() * 0.5);\n retries++;\n if (!destroyed) {\n reconnectTimer = setTimeout(() => {\n if (destroyed) return;\n connect();\n }, jitter);\n }\n return;\n }\n attachListeners();\n }\n\n connect();\n\n return {\n ui,\n destroy: () => {\n destroyed = true;\n if (reconnectTimer) {\n clearTimeout(reconnectTimer);\n reconnectTimer = undefined;\n }\n if (\n socket &&\n (socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING)\n ) {\n socket.close();\n }\n container.innerHTML = \"\";\n },\n };\n}\n"]}
@@ -26,8 +26,10 @@ declare class BitFormDevToolsUI {
26
26
  private rootElement;
27
27
  private currentStoresState;
28
28
  private isOpen;
29
+ private activeStoreId;
29
30
  constructor(container: HTMLElement, actions: DevToolsActions);
30
31
  updateState(storesState: DevToolsStoreSnapshots): void;
32
+ private renderStoreBlock;
31
33
  private render;
32
34
  }
33
35
 
@@ -26,8 +26,10 @@ declare class BitFormDevToolsUI {
26
26
  private rootElement;
27
27
  private currentStoresState;
28
28
  private isOpen;
29
+ private activeStoreId;
29
30
  constructor(container: HTMLElement, actions: DevToolsActions);
30
31
  updateState(storesState: DevToolsStoreSnapshots): void;
32
+ private renderStoreBlock;
31
33
  private render;
32
34
  }
33
35