@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.
- package/dist/angular/index.cjs +1 -1
- package/dist/angular/index.cjs.map +1 -1
- package/dist/angular/index.js +1 -1
- package/dist/angular/index.js.map +1 -1
- package/dist/{chunk-WYYVVM2C.js → chunk-4U32VQD5.js} +2 -2
- package/dist/chunk-FF6WALLN.js +2 -0
- package/dist/chunk-FF6WALLN.js.map +1 -0
- package/dist/chunk-K3QLAMDG.cjs +2 -0
- package/dist/{chunk-U6UFULNS.cjs.map → chunk-K3QLAMDG.cjs.map} +1 -1
- package/dist/chunk-KEINCG6A.js +2 -0
- package/dist/chunk-KEINCG6A.js.map +1 -0
- package/dist/{chunk-GBHOCY7E.cjs → chunk-LBWJK3IC.cjs} +2 -2
- package/dist/{chunk-GBHOCY7E.cjs.map → chunk-LBWJK3IC.cjs.map} +1 -1
- package/dist/chunk-UNBTMNY3.cjs +2 -0
- package/dist/chunk-UNBTMNY3.cjs.map +1 -0
- package/dist/core/store.cjs +1 -1
- package/dist/core/store.js +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.js +1 -1
- package/dist/devtools/bridge.cjs +1 -1
- package/dist/devtools/bridge.js +1 -1
- package/dist/devtools/index.cjs +49 -24
- package/dist/devtools/index.cjs.map +1 -1
- package/dist/devtools/index.d.cts +2 -0
- package/dist/devtools/index.d.ts +2 -0
- package/dist/devtools/index.js +49 -24
- package/dist/devtools/index.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react-native/index.cjs +1 -1
- package/dist/react-native/index.js +1 -1
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.js +1 -1
- package/dist/vue/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-7T7L2TZX.js +0 -2
- package/dist/chunk-7T7L2TZX.js.map +0 -1
- package/dist/chunk-EYCJKAK3.js +0 -2
- package/dist/chunk-EYCJKAK3.js.map +0 -1
- package/dist/chunk-U6UFULNS.cjs +0 -2
- package/dist/chunk-WKLCAC74.cjs +0 -2
- package/dist/chunk-WKLCAC74.cjs.map +0 -1
- /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"]}
|
package/dist/core/store.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var
|
|
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
|
package/dist/core/store.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a,b,c,d,e,f,g,h,i,j}from"../chunk-
|
|
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
|
|
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-
|
|
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
|
package/dist/devtools/bridge.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var
|
|
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
|
package/dist/devtools/bridge.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as a}from"../chunk-
|
|
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
|
package/dist/devtools/index.cjs
CHANGED
|
@@ -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
|
|
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
|
|
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,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}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">${
|
|
117
|
+
<h3 class="bit-store-title">${p(r)}</h3>
|
|
99
118
|
<div class="bit-badge-group">
|
|
100
|
-
<span class="bit-badge ${
|
|
101
|
-
${
|
|
119
|
+
<span class="bit-badge ${i.isValid?"badge-success":"badge-error"}">
|
|
120
|
+
${i.isValid?"\u2713 Valid":"\u2715 Invalid"}
|
|
102
121
|
</span>
|
|
103
|
-
${
|
|
104
|
-
${
|
|
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 (${
|
|
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="${
|
|
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="${
|
|
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="${
|
|
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
|
-
|
|
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">${
|
|
124
|
-
`),
|
|
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">${
|
|
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
|
-
|
|
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
|
|
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, \"&\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\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, \"&\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\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
|
|
package/dist/devtools/index.d.ts
CHANGED
|
@@ -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
|
|