@lehnihon/bit-form 2.2.4 → 2.2.6
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.d.cts +3 -2
- package/dist/angular/index.d.ts +3 -2
- package/dist/angular/index.js +1 -1
- package/dist/angular/index.js.map +1 -1
- package/dist/{bus-BQI1FIOs.d.ts → bus-B4zZmB9C.d.ts} +4 -1
- package/dist/{bus-a_GA51Qw.d.cts → bus-BeAeZwWu.d.cts} +4 -1
- package/dist/chunk-2CVKNPWX.js +2 -0
- package/dist/chunk-2CVKNPWX.js.map +1 -0
- package/dist/chunk-3EDD3V43.cjs +2 -0
- package/dist/chunk-3EDD3V43.cjs.map +1 -0
- package/dist/chunk-3NUJVIAM.js +2 -0
- package/dist/chunk-3NUJVIAM.js.map +1 -0
- package/dist/{chunk-YEXRRTI3.cjs → chunk-77PK7U73.cjs} +2 -2
- package/dist/{chunk-YEXRRTI3.cjs.map → chunk-77PK7U73.cjs.map} +1 -1
- package/dist/chunk-CTURHI75.cjs +2 -0
- package/dist/{chunk-CFFLDMLG.cjs.map → chunk-CTURHI75.cjs.map} +1 -1
- package/dist/{chunk-MQX4YS6D.cjs → chunk-DD6XWUMR.cjs} +2 -2
- package/dist/{chunk-MQX4YS6D.cjs.map → chunk-DD6XWUMR.cjs.map} +1 -1
- package/dist/{chunk-BMHK77NL.js → chunk-FGJB4DHQ.js} +2 -2
- package/dist/{chunk-4XLU5ZCX.js → chunk-GDRNKTHO.js} +2 -2
- package/dist/chunk-GUU6EXFN.js +2 -0
- package/dist/chunk-GUU6EXFN.js.map +1 -0
- package/dist/{chunk-MBTLLIBM.js → chunk-M2XR4C7T.js} +2 -2
- package/dist/chunk-PFPGASVZ.cjs +2 -0
- package/dist/chunk-PFPGASVZ.cjs.map +1 -0
- package/dist/chunk-PX6WKENM.js +2 -0
- package/dist/chunk-PX6WKENM.js.map +1 -0
- package/dist/chunk-QWH2NBVB.js +2 -0
- package/dist/chunk-QWH2NBVB.js.map +1 -0
- package/dist/chunk-T3FR7D5V.js +2 -0
- package/dist/chunk-T3FR7D5V.js.map +1 -0
- package/dist/{chunk-KYM7JG2G.cjs → chunk-UT63HKR6.cjs} +2 -2
- package/dist/{chunk-KYM7JG2G.cjs.map → chunk-UT63HKR6.cjs.map} +1 -1
- package/dist/chunk-VQ7MK5VB.cjs +2 -0
- package/dist/chunk-VQ7MK5VB.cjs.map +1 -0
- package/dist/chunk-Y2ONHDRE.cjs +2 -0
- package/dist/chunk-Y2ONHDRE.cjs.map +1 -0
- package/dist/chunk-YCSWULEN.cjs +2 -0
- package/dist/chunk-YCSWULEN.cjs.map +1 -0
- package/dist/devtools/bridge.cjs +1 -1
- package/dist/devtools/bridge.cjs.map +1 -1
- package/dist/devtools/bridge.js +1 -1
- package/dist/devtools/bridge.js.map +1 -1
- package/dist/devtools/index.cjs +2 -2
- package/dist/devtools/index.cjs.map +1 -1
- package/dist/devtools/index.js +1 -1
- package/dist/devtools/index.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +44 -49
- package/dist/index.d.ts +44 -49
- package/dist/index.js +1 -1
- package/dist/mask.cjs +1 -1
- package/dist/mask.cjs.map +1 -1
- package/dist/mask.js +1 -1
- package/dist/mask.js.map +1 -1
- package/dist/{public-types-D14VY_4o.d.cts → public-types-Cd9ai20P.d.cts} +10 -2
- package/dist/{public-types-D3WIiMGu.d.ts → public-types-DdZxD6Op.d.ts} +10 -2
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +5 -5
- package/dist/react/index.d.ts +5 -5
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react-native/index.cjs +1 -1
- package/dist/react-native/index.d.cts +4 -4
- package/dist/react-native/index.d.ts +4 -4
- package/dist/react-native/index.js +1 -1
- package/dist/resolvers/index.cjs +1 -1
- package/dist/resolvers/index.d.cts +1 -1
- package/dist/resolvers/index.d.ts +1 -1
- package/dist/resolvers/index.js +1 -1
- package/dist/resolvers/joi.cjs +1 -1
- package/dist/resolvers/joi.d.cts +1 -1
- package/dist/resolvers/joi.d.ts +1 -1
- package/dist/resolvers/joi.js +1 -1
- package/dist/resolvers/yup.cjs +1 -1
- package/dist/resolvers/yup.d.cts +1 -1
- package/dist/resolvers/yup.d.ts +1 -1
- package/dist/resolvers/yup.js +1 -1
- package/dist/resolvers/zod.cjs +1 -1
- package/dist/resolvers/zod.d.cts +1 -1
- package/dist/resolvers/zod.d.ts +1 -1
- package/dist/resolvers/zod.js +1 -1
- package/dist/{use-bit-persist-Dt4zIl2u.d.cts → use-bit-persist-D_gimC9A.d.cts} +3 -2
- package/dist/{use-bit-persist-CNtQ3Gaq.d.ts → use-bit-persist-Dk3fUrds.d.ts} +3 -2
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.d.cts +3 -2
- package/dist/vue/index.d.ts +3 -2
- package/dist/vue/index.js +1 -1
- package/dist/vue/index.js.map +1 -1
- package/package.json +20 -1
- package/dist/chunk-66DIO2SH.js +0 -2
- package/dist/chunk-66DIO2SH.js.map +0 -1
- package/dist/chunk-7LMNIQTT.js +0 -2
- package/dist/chunk-7LMNIQTT.js.map +0 -1
- package/dist/chunk-AE4G32HS.js +0 -2
- package/dist/chunk-AE4G32HS.js.map +0 -1
- package/dist/chunk-CFFLDMLG.cjs +0 -2
- package/dist/chunk-EI5L5L3R.cjs +0 -2
- package/dist/chunk-EI5L5L3R.cjs.map +0 -1
- package/dist/chunk-IV32WXCF.cjs +0 -2
- package/dist/chunk-IV32WXCF.cjs.map +0 -1
- package/dist/chunk-K5NZDYAT.js +0 -2
- package/dist/chunk-K5NZDYAT.js.map +0 -1
- package/dist/chunk-LOYB7TTM.cjs +0 -2
- package/dist/chunk-LOYB7TTM.cjs.map +0 -1
- package/dist/chunk-O5UPA33R.js +0 -2
- package/dist/chunk-O5UPA33R.js.map +0 -1
- package/dist/chunk-RFFMBY7M.cjs +0 -2
- package/dist/chunk-RFFMBY7M.cjs.map +0 -1
- package/dist/chunk-YGAD4ZZW.js +0 -2
- package/dist/chunk-YGAD4ZZW.js.map +0 -1
- package/dist/chunk-ZO3GXKF3.cjs +0 -2
- package/dist/chunk-ZO3GXKF3.cjs.map +0 -1
- /package/dist/{chunk-BMHK77NL.js.map → chunk-FGJB4DHQ.js.map} +0 -0
- /package/dist/{chunk-4XLU5ZCX.js.map → chunk-GDRNKTHO.js.map} +0 -0
- /package/dist/{chunk-MBTLLIBM.js.map → chunk-M2XR4C7T.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/devtools/index.cjs","../../src/devtools/ui/styles.ts","../../src/devtools/ui/index.ts","../../src/devtools/adapters/local.ts","../../src/devtools/adapters/remote.ts"],"names":["getDevToolsCSS","BitFormDevToolsUI","container","actions","style","target","btn","action","storeId","storesState","storeEntries","panelHtml","id","state","hasErrors","meta","currentStep","totalSteps","triggerHtml","setupLocalDevTools","ui","bitBus","getFullSnapshot","states","instance","storeInstance","historyMeta","unsubscribe","setupRemoteDevTools","url","socket","sendMessage","message","sendAction"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/devtools/index.cjs","sourcesContent":[null,"export function getDevToolsCSS(): string {\n return `\n .bit-devtools-container {\n position: fixed;\n bottom: 20px;\n right: 20px;\n z-index: 9999;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n\n .bit-devtools-trigger {\n background: #10b981;\n color: #fff;\n border: none;\n border-radius: 50%;\n width: 48px;\n height: 48px;\n cursor: pointer;\n box-shadow: 0 4px 12px rgba(16, 185, 129, 0.4);\n font-weight: bold;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.2s;\n font-size: 16px;\n margin-top: 16px;\n }\n .bit-devtools-trigger:hover { transform: scale(1.05); }\n\n .bit-devtools-panel {\n width: 450px;\n max-height: 80vh;\n background: #0f172a;\n color: #f8fafc;\n border-radius: 8px;\n padding: 16px;\n overflow-y: auto;\n box-shadow: 0 20px 25px -5px rgba(0,0,0,0.5), 0 8px 10px -6px rgba(0,0,0,0.5);\n border: 1px solid #334155;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .bit-devtools-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 12px;\n border-bottom: 1px solid #1e293b;\n }\n .bit-devtools-header h2 { margin: 0; font-size: 16px; display: flex; align-items: center; gap: 8px; }\n\n .bit-store-block {\n background: #1e293b;\n border-radius: 6px;\n padding: 12px;\n border: 1px solid #334155;\n }\n\n .bit-store-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n }\n .bit-store-title { margin: 0; color: #38bdf8; font-size: 14px; font-weight: bold; }\n\n .bit-badge-group { display: flex; gap: 6px; flex-wrap: wrap; }\n .bit-badge { font-size: 10px; padding: 2px 6px; border-radius: 4px; text-transform: uppercase; font-weight: bold; }\n .badge-success { background: rgba(16, 185, 129, 0.2); color: #34d399; border: 1px solid rgba(16, 185, 129, 0.2); }\n .badge-error { background: rgba(239, 68, 68, 0.2); color: #f87171; border: 1px solid rgba(239, 68, 68, 0.2); }\n .badge-warn { background: rgba(245, 158, 11, 0.2); color: #fbbf24; border: 1px solid rgba(245, 158, 11, 0.2); }\n .badge-info { background: rgba(56, 189, 248, 0.2); color: #7dd3fc; border: 1px solid rgba(56, 189, 248, 0.2); }\n\n .bit-section-title { font-size: 11px; color: #94a3b8; text-transform: uppercase; letter-spacing: 1px; margin: 12px 0 4px 0; display: block; }\n\n .bit-controls { display: flex; gap: 6px; margin-bottom: 12px; background: #0f172a; padding: 8px; border-radius: 6px; }\n .bit-action-btn { flex: 1; background: #334155; color: #e2e8f0; border: 1px solid #475569; padding: 6px 0; border-radius: 4px; cursor: pointer; font-size: 11px; display: flex; align-items: center; justify-content: center; gap: 4px; transition: all 0.2s; }\n .bit-action-btn:hover:not(:disabled) { background: #475569; }\n .bit-action-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n .bit-btn-reset { color: #fca5a5; border-color: rgba(239,68,68,0.3); }\n .bit-btn-reset:hover { background: rgba(239,68,68,0.1) !important; }\n\n pre.bit-pre { background: #020617; padding: 10px; border-radius: 4px; font-size: 11px; overflow-x: auto; border: 1px solid #1e293b; margin: 0; color: #e2e8f0; }\n pre.bit-error-box { background: rgba(239, 68, 68, 0.05); padding: 10px; border-radius: 4px; font-size: 11px; border: 1px dashed #ef4444; color: #fca5a5; margin: 0; overflow-x: auto; }\n `;\n}\n","import { getDevToolsCSS } from \"./styles\";\nimport type { DevToolsActions } from \"../types\";\n\nexport type { DevToolsActions };\n\nexport class BitFormDevToolsUI {\n private container: HTMLElement;\n private actions: DevToolsActions;\n private rootElement: HTMLDivElement;\n private currentStoresState: Record<string, any> = {};\n private isOpen: boolean = 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: Record<string, any>) {\n this.currentStoresState = storesState;\n this.render();\n }\n\n private render() {\n const storeEntries = Object.entries(this.currentStoresState);\n if (storeEntries.length === 0) {\n this.rootElement.innerHTML = \"\";\n return;\n }\n\n let panelHtml = \"\";\n\n if (this.isOpen) {\n panelHtml = `\n <div class=\"bit-devtools-panel\">\n <div class=\"bit-devtools-header\">\n <h2><span style=\"font-size: 20px;\">🛠</span> Bit-Form DevTools</h2>\n <span style=\"font-size: 11px; color: #64748b;\">v1.0.0</span>\n </div>\n `;\n\n for (const [id, state] of storeEntries) {\n const hasErrors = Object.keys(state.errors || {}).length > 0;\n\n // Lemos os metadados do histórico que o adaptador injetou\n const meta = state._meta || {\n totalSteps: 0,\n currentIndex: -1,\n canUndo: false,\n canRedo: false,\n };\n const currentStep = meta.currentIndex + 1;\n const totalSteps = meta.totalSteps;\n\n panelHtml += `\n <div class=\"bit-store-block\">\n <div class=\"bit-store-header\">\n <h3 class=\"bit-store-title\">${id}</h3>\n <div class=\"bit-badge-group\">\n <span class=\"bit-badge ${state.isValid ? \"badge-success\" : \"badge-error\"}\">\n ${state.isValid ? \"✓ Valid\" : \"✕ Invalid\"}\n </span>\n ${state.isDirty ? `<span class=\"bit-badge badge-warn\">Dirty</span>` : \"\"}\n ${state.isSubmitting ? `<span class=\"bit-badge badge-info\">⏳ Submitting</span>` : \"\"}\n </div>\n </div>\n\n <span class=\"bit-section-title\">Time Travel (${currentStep}/${totalSteps})</span>\n \n <div class=\"bit-controls\">\n <button class=\"bit-action-btn\" data-action=\"undo\" data-store=\"${id}\" ${meta.canUndo ? \"\" : \"disabled\"}>\n <span>↺</span> Undo\n </button>\n <button class=\"bit-action-btn\" data-action=\"redo\" data-store=\"${id}\" ${meta.canRedo ? \"\" : \"disabled\"}>\n <span>↻</span> Redo\n </button>\n <button class=\"bit-action-btn bit-btn-reset\" data-action=\"reset\" data-store=\"${id}\">\n <span>🗑</span> Reset\n </button>\n </div>\n `;\n\n if (hasErrors) {\n panelHtml += `\n <span class=\"bit-section-title\" style=\"color: #f87171;\">⚠️ Validations Failing</span>\n <pre class=\"bit-error-box\">${JSON.stringify(state.errors, null, 2)}</pre>\n `;\n }\n\n panelHtml += `\n <span class=\"bit-section-title\">Values</span>\n <pre class=\"bit-pre\">${JSON.stringify(state.values, null, 2)}</pre>\n </div>\n `;\n }\n\n panelHtml += `</div>`;\n }\n\n // Botão Flutuante (sempre renderizado)\n const triggerHtml = `\n <button class=\"bit-devtools-trigger\" style=\"transform: ${this.isOpen ? \"scale(0.9)\" : \"scale(1)\"};\" title=\"Abrir DevTools\">\n ${this.isOpen ? \"✖\" : \"Bit\"}\n </button>\n `;\n\n this.rootElement.innerHTML = panelHtml + triggerHtml;\n }\n}\n","import { bitBus } from \"../../core\";\nimport type { BitStoreHooksApi } from \"../../core\";\nimport { BitFormDevToolsUI } from \"../ui\";\n\nexport function setupLocalDevTools(container: HTMLElement) {\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => (bitBus.stores[id] as BitStoreHooksApi<any>)?.undo(),\n onRedo: (id) => (bitBus.stores[id] as BitStoreHooksApi<any>)?.redo(),\n onReset: (id) => (bitBus.stores[id] as BitStoreHooksApi<any>)?.reset(),\n });\n\n const getFullSnapshot = () => {\n const states: Record<string, unknown> = {};\n\n for (const [id, instance] of Object.entries(bitBus.stores)) {\n const storeInstance = instance as BitStoreHooksApi<any>;\n const state = storeInstance.getState();\n\n const historyMeta = storeInstance?.getHistoryMetadata?.() || {\n enabled: false,\n canUndo: false,\n canRedo: false,\n historyIndex: -1,\n historySize: 0,\n };\n\n states[id] = {\n ...state,\n _meta: {\n canUndo: historyMeta.canUndo,\n canRedo: historyMeta.canRedo,\n totalSteps: historyMeta.historySize,\n currentIndex: historyMeta.historyIndex,\n },\n };\n }\n return states;\n };\n\n ui.updateState(getFullSnapshot());\n\n const unsubscribe = bitBus.subscribe(() => {\n ui.updateState(getFullSnapshot());\n });\n\n return {\n ui,\n destroy: () => {\n unsubscribe();\n container.innerHTML = \"\";\n },\n };\n}\n","import { BitFormDevToolsUI } from \"../ui\";\nimport type {\n DevToolsActionMessage,\n DevToolsActionName,\n DevToolsRemoteMessage,\n DevToolsStateUpdateMessage,\n} from \"../types\";\n\nexport function setupRemoteDevTools(\n container: HTMLElement,\n url: string = \"ws://localhost:3000\",\n) {\n const socket = new WebSocket(url);\n\n const sendMessage = (message: DevToolsRemoteMessage) => {\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify(message));\n } else {\n console.warn(\n \"[bit-form] Tentativa de envio falhou. WebSocket não está aberto.\",\n );\n }\n };\n\n const sendAction = (storeId: string, action: DevToolsActionName) => {\n const message: DevToolsActionMessage = {\n type: \"ACTION\",\n payload: { storeId, action },\n };\n sendMessage(message);\n };\n\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => sendAction(id, \"undo\"),\n onRedo: (id) => sendAction(id, \"redo\"),\n onReset: (id) => sendAction(id, \"reset\"),\n });\n\n socket.addEventListener(\"open\", () => {\n 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 (data.type === \"STATE_UPDATE\") {\n ui.updateState((data as DevToolsStateUpdateMessage).payload);\n }\n } catch (e) {\n console.error(\"[bit-form] Erro ao processar mensagem do WebSocket:\", e);\n }\n });\n\n socket.addEventListener(\"error\", (err) => {\n console.error(\"[bit-form] Erro na conexão do DevTools remoto:\", err);\n });\n\n return {\n ui,\n destroy: () => {\n if (\n socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING\n ) {\n socket.close();\n }\n container.innerHTML = \"\";\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/devtools/index.cjs","../../src/devtools/ui/styles.ts","../../src/devtools/ui/index.ts","../../src/devtools/adapters/local.ts","../../src/devtools/adapters/remote.ts"],"names":["getDevToolsCSS","BitFormDevToolsUI","container","actions","style","target","btn","action","storeId","storesState","storeEntries","panelHtml","id","state","hasErrors","meta","currentStep","totalSteps","triggerHtml","setupLocalDevTools","ui","bitBus","getFullSnapshot","states","instance","storeInstance","historyMeta","unsubscribe","setupRemoteDevTools","url","socket","sendMessage","message","sendAction"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/devtools/index.cjs","sourcesContent":[null,"export function getDevToolsCSS(): string {\n return `\n .bit-devtools-container {\n position: fixed;\n bottom: 20px;\n right: 20px;\n z-index: 9999;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n\n .bit-devtools-trigger {\n background: #10b981;\n color: #fff;\n border: none;\n border-radius: 50%;\n width: 48px;\n height: 48px;\n cursor: pointer;\n box-shadow: 0 4px 12px rgba(16, 185, 129, 0.4);\n font-weight: bold;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.2s;\n font-size: 16px;\n margin-top: 16px;\n }\n .bit-devtools-trigger:hover { transform: scale(1.05); }\n\n .bit-devtools-panel {\n width: 450px;\n max-height: 80vh;\n background: #0f172a;\n color: #f8fafc;\n border-radius: 8px;\n padding: 16px;\n overflow-y: auto;\n box-shadow: 0 20px 25px -5px rgba(0,0,0,0.5), 0 8px 10px -6px rgba(0,0,0,0.5);\n border: 1px solid #334155;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .bit-devtools-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 12px;\n border-bottom: 1px solid #1e293b;\n }\n .bit-devtools-header h2 { margin: 0; font-size: 16px; display: flex; align-items: center; gap: 8px; }\n\n .bit-store-block {\n background: #1e293b;\n border-radius: 6px;\n padding: 12px;\n border: 1px solid #334155;\n }\n\n .bit-store-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n }\n .bit-store-title { margin: 0; color: #38bdf8; font-size: 14px; font-weight: bold; }\n\n .bit-badge-group { display: flex; gap: 6px; flex-wrap: wrap; }\n .bit-badge { font-size: 10px; padding: 2px 6px; border-radius: 4px; text-transform: uppercase; font-weight: bold; }\n .badge-success { background: rgba(16, 185, 129, 0.2); color: #34d399; border: 1px solid rgba(16, 185, 129, 0.2); }\n .badge-error { background: rgba(239, 68, 68, 0.2); color: #f87171; border: 1px solid rgba(239, 68, 68, 0.2); }\n .badge-warn { background: rgba(245, 158, 11, 0.2); color: #fbbf24; border: 1px solid rgba(245, 158, 11, 0.2); }\n .badge-info { background: rgba(56, 189, 248, 0.2); color: #7dd3fc; border: 1px solid rgba(56, 189, 248, 0.2); }\n\n .bit-section-title { font-size: 11px; color: #94a3b8; text-transform: uppercase; letter-spacing: 1px; margin: 12px 0 4px 0; display: block; }\n\n .bit-controls { display: flex; gap: 6px; margin-bottom: 12px; background: #0f172a; padding: 8px; border-radius: 6px; }\n .bit-action-btn { flex: 1; background: #334155; color: #e2e8f0; border: 1px solid #475569; padding: 6px 0; border-radius: 4px; cursor: pointer; font-size: 11px; display: flex; align-items: center; justify-content: center; gap: 4px; transition: all 0.2s; }\n .bit-action-btn:hover:not(:disabled) { background: #475569; }\n .bit-action-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n .bit-btn-reset { color: #fca5a5; border-color: rgba(239,68,68,0.3); }\n .bit-btn-reset:hover { background: rgba(239,68,68,0.1) !important; }\n\n pre.bit-pre { background: #020617; padding: 10px; border-radius: 4px; font-size: 11px; overflow-x: auto; border: 1px solid #1e293b; margin: 0; color: #e2e8f0; }\n pre.bit-error-box { background: rgba(239, 68, 68, 0.05); padding: 10px; border-radius: 4px; font-size: 11px; border: 1px dashed #ef4444; color: #fca5a5; margin: 0; overflow-x: auto; }\n `;\n}\n","import { getDevToolsCSS } from \"./styles\";\nimport type { DevToolsActions } from \"../types\";\n\nexport type { DevToolsActions };\n\nexport class BitFormDevToolsUI {\n private container: HTMLElement;\n private actions: DevToolsActions;\n private rootElement: HTMLDivElement;\n private currentStoresState: Record<string, any> = {};\n private isOpen: boolean = 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: Record<string, any>) {\n this.currentStoresState = storesState;\n this.render();\n }\n\n private render() {\n const storeEntries = Object.entries(this.currentStoresState);\n if (storeEntries.length === 0) {\n this.rootElement.innerHTML = \"\";\n return;\n }\n\n let panelHtml = \"\";\n\n if (this.isOpen) {\n panelHtml = `\n <div class=\"bit-devtools-panel\">\n <div class=\"bit-devtools-header\">\n <h2><span style=\"font-size: 20px;\">🛠</span> Bit-Form DevTools</h2>\n <span style=\"font-size: 11px; color: #64748b;\">v1.0.0</span>\n </div>\n `;\n\n for (const [id, state] of storeEntries) {\n const hasErrors = Object.keys(state.errors || {}).length > 0;\n\n // Lemos os metadados do histórico que o adaptador injetou\n const meta = state._meta || {\n totalSteps: 0,\n currentIndex: -1,\n canUndo: false,\n canRedo: false,\n };\n const currentStep = meta.currentIndex + 1;\n const totalSteps = meta.totalSteps;\n\n panelHtml += `\n <div class=\"bit-store-block\">\n <div class=\"bit-store-header\">\n <h3 class=\"bit-store-title\">${id}</h3>\n <div class=\"bit-badge-group\">\n <span class=\"bit-badge ${state.isValid ? \"badge-success\" : \"badge-error\"}\">\n ${state.isValid ? \"✓ Valid\" : \"✕ Invalid\"}\n </span>\n ${state.isDirty ? `<span class=\"bit-badge badge-warn\">Dirty</span>` : \"\"}\n ${state.isSubmitting ? `<span class=\"bit-badge badge-info\">⏳ Submitting</span>` : \"\"}\n </div>\n </div>\n\n <span class=\"bit-section-title\">Time Travel (${currentStep}/${totalSteps})</span>\n \n <div class=\"bit-controls\">\n <button class=\"bit-action-btn\" data-action=\"undo\" data-store=\"${id}\" ${meta.canUndo ? \"\" : \"disabled\"}>\n <span>↺</span> Undo\n </button>\n <button class=\"bit-action-btn\" data-action=\"redo\" data-store=\"${id}\" ${meta.canRedo ? \"\" : \"disabled\"}>\n <span>↻</span> Redo\n </button>\n <button class=\"bit-action-btn bit-btn-reset\" data-action=\"reset\" data-store=\"${id}\">\n <span>🗑</span> Reset\n </button>\n </div>\n `;\n\n if (hasErrors) {\n panelHtml += `\n <span class=\"bit-section-title\" style=\"color: #f87171;\">⚠️ Validations Failing</span>\n <pre class=\"bit-error-box\">${JSON.stringify(state.errors, null, 2)}</pre>\n `;\n }\n\n panelHtml += `\n <span class=\"bit-section-title\">Values</span>\n <pre class=\"bit-pre\">${JSON.stringify(state.values, null, 2)}</pre>\n </div>\n `;\n }\n\n panelHtml += `</div>`;\n }\n\n // Botão Flutuante (sempre renderizado)\n const triggerHtml = `\n <button class=\"bit-devtools-trigger\" style=\"transform: ${this.isOpen ? \"scale(0.9)\" : \"scale(1)\"};\" title=\"Abrir DevTools\">\n ${this.isOpen ? \"✖\" : \"Bit\"}\n </button>\n `;\n\n this.rootElement.innerHTML = panelHtml + triggerHtml;\n }\n}\n","import { bitBus } from \"../../core\";\nimport type { BitStoreHooksApi } from \"../../core\";\nimport { BitFormDevToolsUI } from \"../ui\";\n\nexport function setupLocalDevTools(container: HTMLElement) {\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => (bitBus.stores[id] as BitStoreHooksApi<any>)?.undo(),\n onRedo: (id) => (bitBus.stores[id] as BitStoreHooksApi<any>)?.redo(),\n onReset: (id) => (bitBus.stores[id] as BitStoreHooksApi<any>)?.reset(),\n });\n\n const getFullSnapshot = () => {\n const states: Record<string, unknown> = {};\n\n for (const [id, instance] of Object.entries(bitBus.stores)) {\n const storeInstance = instance as BitStoreHooksApi<any>;\n const state = storeInstance.getState();\n\n const historyMeta = storeInstance?.getHistoryMetadata?.() || {\n enabled: false,\n canUndo: false,\n canRedo: false,\n historyIndex: -1,\n historySize: 0,\n };\n\n states[id] = {\n ...state,\n _meta: {\n canUndo: historyMeta.canUndo,\n canRedo: historyMeta.canRedo,\n totalSteps: historyMeta.historySize,\n currentIndex: historyMeta.historyIndex,\n },\n };\n }\n return states;\n };\n\n ui.updateState(getFullSnapshot());\n\n const unsubscribe = bitBus.subscribe(() => {\n ui.updateState(getFullSnapshot());\n });\n\n return {\n ui,\n destroy: () => {\n unsubscribe();\n container.innerHTML = \"\";\n },\n };\n}\n","import { BitFormDevToolsUI } from \"../ui\";\nimport type {\n DevToolsActionMessage,\n DevToolsActionName,\n DevToolsRemoteMessage,\n DevToolsStateUpdateMessage,\n} from \"../types\";\n\nexport function setupRemoteDevTools(\n container: HTMLElement,\n url: string = \"ws://localhost:3000\",\n) {\n const socket = new WebSocket(url);\n\n const sendMessage = (message: DevToolsRemoteMessage) => {\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify(message));\n } else {\n console.warn(\n \"[bit-form] Tentativa de envio falhou. WebSocket não está aberto.\",\n );\n }\n };\n\n const sendAction = (storeId: string, action: DevToolsActionName) => {\n const message: DevToolsActionMessage = {\n type: \"ACTION\",\n payload: { storeId, action },\n };\n sendMessage(message);\n };\n\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => sendAction(id, \"undo\"),\n onRedo: (id) => sendAction(id, \"redo\"),\n onReset: (id) => sendAction(id, \"reset\"),\n });\n\n socket.addEventListener(\"open\", () => {\n 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 (data.type === \"STATE_UPDATE\") {\n ui.updateState((data as DevToolsStateUpdateMessage).payload);\n }\n } catch (e) {\n console.error(\"[bit-form] Erro ao processar mensagem do WebSocket:\", e);\n }\n });\n\n socket.addEventListener(\"error\", (err) => {\n console.error(\"[bit-form] Erro na conexão do DevTools remoto:\", err);\n });\n\n return {\n ui,\n destroy: () => {\n if (\n socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING\n ) {\n socket.close();\n }\n container.innerHTML = \"\";\n },\n };\n}\n"]}
|
package/dist/devtools/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/devtools/ui/styles.ts","../../src/devtools/ui/index.ts","../../src/devtools/adapters/local.ts","../../src/devtools/adapters/remote.ts","../../src/devtools/init-dev-tools.ts"],"sourcesContent":["export function getDevToolsCSS(): string {\n return `\n .bit-devtools-container {\n position: fixed;\n bottom: 20px;\n right: 20px;\n z-index: 9999;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n\n .bit-devtools-trigger {\n background: #10b981;\n color: #fff;\n border: none;\n border-radius: 50%;\n width: 48px;\n height: 48px;\n cursor: pointer;\n box-shadow: 0 4px 12px rgba(16, 185, 129, 0.4);\n font-weight: bold;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.2s;\n font-size: 16px;\n margin-top: 16px;\n }\n .bit-devtools-trigger:hover { transform: scale(1.05); }\n\n .bit-devtools-panel {\n width: 450px;\n max-height: 80vh;\n background: #0f172a;\n color: #f8fafc;\n border-radius: 8px;\n padding: 16px;\n overflow-y: auto;\n box-shadow: 0 20px 25px -5px rgba(0,0,0,0.5), 0 8px 10px -6px rgba(0,0,0,0.5);\n border: 1px solid #334155;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .bit-devtools-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 12px;\n border-bottom: 1px solid #1e293b;\n }\n .bit-devtools-header h2 { margin: 0; font-size: 16px; display: flex; align-items: center; gap: 8px; }\n\n .bit-store-block {\n background: #1e293b;\n border-radius: 6px;\n padding: 12px;\n border: 1px solid #334155;\n }\n\n .bit-store-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n }\n .bit-store-title { margin: 0; color: #38bdf8; font-size: 14px; font-weight: bold; }\n\n .bit-badge-group { display: flex; gap: 6px; flex-wrap: wrap; }\n .bit-badge { font-size: 10px; padding: 2px 6px; border-radius: 4px; text-transform: uppercase; font-weight: bold; }\n .badge-success { background: rgba(16, 185, 129, 0.2); color: #34d399; border: 1px solid rgba(16, 185, 129, 0.2); }\n .badge-error { background: rgba(239, 68, 68, 0.2); color: #f87171; border: 1px solid rgba(239, 68, 68, 0.2); }\n .badge-warn { background: rgba(245, 158, 11, 0.2); color: #fbbf24; border: 1px solid rgba(245, 158, 11, 0.2); }\n .badge-info { background: rgba(56, 189, 248, 0.2); color: #7dd3fc; border: 1px solid rgba(56, 189, 248, 0.2); }\n\n .bit-section-title { font-size: 11px; color: #94a3b8; text-transform: uppercase; letter-spacing: 1px; margin: 12px 0 4px 0; display: block; }\n\n .bit-controls { display: flex; gap: 6px; margin-bottom: 12px; background: #0f172a; padding: 8px; border-radius: 6px; }\n .bit-action-btn { flex: 1; background: #334155; color: #e2e8f0; border: 1px solid #475569; padding: 6px 0; border-radius: 4px; cursor: pointer; font-size: 11px; display: flex; align-items: center; justify-content: center; gap: 4px; transition: all 0.2s; }\n .bit-action-btn:hover:not(:disabled) { background: #475569; }\n .bit-action-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n .bit-btn-reset { color: #fca5a5; border-color: rgba(239,68,68,0.3); }\n .bit-btn-reset:hover { background: rgba(239,68,68,0.1) !important; }\n\n pre.bit-pre { background: #020617; padding: 10px; border-radius: 4px; font-size: 11px; overflow-x: auto; border: 1px solid #1e293b; margin: 0; color: #e2e8f0; }\n pre.bit-error-box { background: rgba(239, 68, 68, 0.05); padding: 10px; border-radius: 4px; font-size: 11px; border: 1px dashed #ef4444; color: #fca5a5; margin: 0; overflow-x: auto; }\n `;\n}\n","import { getDevToolsCSS } from \"./styles\";\nimport type { DevToolsActions } from \"../types\";\n\nexport type { DevToolsActions };\n\nexport class BitFormDevToolsUI {\n private container: HTMLElement;\n private actions: DevToolsActions;\n private rootElement: HTMLDivElement;\n private currentStoresState: Record<string, any> = {};\n private isOpen: boolean = 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: Record<string, any>) {\n this.currentStoresState = storesState;\n this.render();\n }\n\n private render() {\n const storeEntries = Object.entries(this.currentStoresState);\n if (storeEntries.length === 0) {\n this.rootElement.innerHTML = \"\";\n return;\n }\n\n let panelHtml = \"\";\n\n if (this.isOpen) {\n panelHtml = `\n <div class=\"bit-devtools-panel\">\n <div class=\"bit-devtools-header\">\n <h2><span style=\"font-size: 20px;\">🛠</span> Bit-Form DevTools</h2>\n <span style=\"font-size: 11px; color: #64748b;\">v1.0.0</span>\n </div>\n `;\n\n for (const [id, state] of storeEntries) {\n const hasErrors = Object.keys(state.errors || {}).length > 0;\n\n // Lemos os metadados do histórico que o adaptador injetou\n const meta = state._meta || {\n totalSteps: 0,\n currentIndex: -1,\n canUndo: false,\n canRedo: false,\n };\n const currentStep = meta.currentIndex + 1;\n const totalSteps = meta.totalSteps;\n\n panelHtml += `\n <div class=\"bit-store-block\">\n <div class=\"bit-store-header\">\n <h3 class=\"bit-store-title\">${id}</h3>\n <div class=\"bit-badge-group\">\n <span class=\"bit-badge ${state.isValid ? \"badge-success\" : \"badge-error\"}\">\n ${state.isValid ? \"✓ Valid\" : \"✕ Invalid\"}\n </span>\n ${state.isDirty ? `<span class=\"bit-badge badge-warn\">Dirty</span>` : \"\"}\n ${state.isSubmitting ? `<span class=\"bit-badge badge-info\">⏳ Submitting</span>` : \"\"}\n </div>\n </div>\n\n <span class=\"bit-section-title\">Time Travel (${currentStep}/${totalSteps})</span>\n \n <div class=\"bit-controls\">\n <button class=\"bit-action-btn\" data-action=\"undo\" data-store=\"${id}\" ${meta.canUndo ? \"\" : \"disabled\"}>\n <span>↺</span> Undo\n </button>\n <button class=\"bit-action-btn\" data-action=\"redo\" data-store=\"${id}\" ${meta.canRedo ? \"\" : \"disabled\"}>\n <span>↻</span> Redo\n </button>\n <button class=\"bit-action-btn bit-btn-reset\" data-action=\"reset\" data-store=\"${id}\">\n <span>🗑</span> Reset\n </button>\n </div>\n `;\n\n if (hasErrors) {\n panelHtml += `\n <span class=\"bit-section-title\" style=\"color: #f87171;\">⚠️ Validations Failing</span>\n <pre class=\"bit-error-box\">${JSON.stringify(state.errors, null, 2)}</pre>\n `;\n }\n\n panelHtml += `\n <span class=\"bit-section-title\">Values</span>\n <pre class=\"bit-pre\">${JSON.stringify(state.values, null, 2)}</pre>\n </div>\n `;\n }\n\n panelHtml += `</div>`;\n }\n\n // Botão Flutuante (sempre renderizado)\n const triggerHtml = `\n <button class=\"bit-devtools-trigger\" style=\"transform: ${this.isOpen ? \"scale(0.9)\" : \"scale(1)\"};\" title=\"Abrir DevTools\">\n ${this.isOpen ? \"✖\" : \"Bit\"}\n </button>\n `;\n\n this.rootElement.innerHTML = panelHtml + triggerHtml;\n }\n}\n","import { bitBus } from \"../../core\";\nimport type { BitStoreHooksApi } from \"../../core\";\nimport { BitFormDevToolsUI } from \"../ui\";\n\nexport function setupLocalDevTools(container: HTMLElement) {\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => (bitBus.stores[id] as BitStoreHooksApi<any>)?.undo(),\n onRedo: (id) => (bitBus.stores[id] as BitStoreHooksApi<any>)?.redo(),\n onReset: (id) => (bitBus.stores[id] as BitStoreHooksApi<any>)?.reset(),\n });\n\n const getFullSnapshot = () => {\n const states: Record<string, unknown> = {};\n\n for (const [id, instance] of Object.entries(bitBus.stores)) {\n const storeInstance = instance as BitStoreHooksApi<any>;\n const state = storeInstance.getState();\n\n const historyMeta = storeInstance?.getHistoryMetadata?.() || {\n enabled: false,\n canUndo: false,\n canRedo: false,\n historyIndex: -1,\n historySize: 0,\n };\n\n states[id] = {\n ...state,\n _meta: {\n canUndo: historyMeta.canUndo,\n canRedo: historyMeta.canRedo,\n totalSteps: historyMeta.historySize,\n currentIndex: historyMeta.historyIndex,\n },\n };\n }\n return states;\n };\n\n ui.updateState(getFullSnapshot());\n\n const unsubscribe = bitBus.subscribe(() => {\n ui.updateState(getFullSnapshot());\n });\n\n return {\n ui,\n destroy: () => {\n unsubscribe();\n container.innerHTML = \"\";\n },\n };\n}\n","import { BitFormDevToolsUI } from \"../ui\";\nimport type {\n DevToolsActionMessage,\n DevToolsActionName,\n DevToolsRemoteMessage,\n DevToolsStateUpdateMessage,\n} from \"../types\";\n\nexport function setupRemoteDevTools(\n container: HTMLElement,\n url: string = \"ws://localhost:3000\",\n) {\n const socket = new WebSocket(url);\n\n const sendMessage = (message: DevToolsRemoteMessage) => {\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify(message));\n } else {\n console.warn(\n \"[bit-form] Tentativa de envio falhou. WebSocket não está aberto.\",\n );\n }\n };\n\n const sendAction = (storeId: string, action: DevToolsActionName) => {\n const message: DevToolsActionMessage = {\n type: \"ACTION\",\n payload: { storeId, action },\n };\n sendMessage(message);\n };\n\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => sendAction(id, \"undo\"),\n onRedo: (id) => sendAction(id, \"redo\"),\n onReset: (id) => sendAction(id, \"reset\"),\n });\n\n socket.addEventListener(\"open\", () => {\n 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 (data.type === \"STATE_UPDATE\") {\n ui.updateState((data as DevToolsStateUpdateMessage).payload);\n }\n } catch (e) {\n console.error(\"[bit-form] Erro ao processar mensagem do WebSocket:\", e);\n }\n });\n\n socket.addEventListener(\"error\", (err) => {\n console.error(\"[bit-form] Erro na conexão do DevTools remoto:\", err);\n });\n\n return {\n ui,\n destroy: () => {\n if (\n socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING\n ) {\n socket.close();\n }\n container.innerHTML = \"\";\n },\n };\n}\n","import { setupLocalDevTools } from \"./adapters/local\";\nimport { setupRemoteDevTools } from \"./adapters/remote\";\nimport type { BitDevToolsOptions } from \"./types\";\n\nexport type { BitDevToolsOptions };\n\nexport function initDevTools(options: BitDevToolsOptions = {}) {\n const { mode = \"local\", url } = options;\n let containerEl: HTMLElement;\n\n let isAutoCreated = false;\n\n if (typeof options.container === \"string\") {\n const el = document.querySelector<HTMLElement>(options.container);\n if (!el)\n throw new Error(\n `[bit-form] Container '${options.container}' não encontrado na página.`,\n );\n containerEl = el;\n } else if (options.container instanceof HTMLElement) {\n containerEl = options.container;\n } else {\n containerEl = document.createElement(\"div\");\n containerEl.id = \"bit-form-devtools-root\";\n containerEl.style.position = \"fixed\";\n containerEl.style.bottom = \"20px\";\n containerEl.style.right = \"20px\";\n containerEl.style.zIndex = \"9999\";\n containerEl.style.maxHeight = \"80vh\";\n containerEl.style.overflowY = \"auto\";\n containerEl.style.boxShadow = \"0 10px 25px rgba(0,0,0,0.1)\";\n document.body.appendChild(containerEl);\n isAutoCreated = true;\n }\n\n let adapterInstance: any;\n\n if (mode === \"local\") {\n console.log(\"[bit-form] DevTools iniciado em modo Local.\");\n adapterInstance = setupLocalDevTools(containerEl);\n } else if (mode === \"remote\") {\n console.log(\"[bit-form] DevTools iniciado em modo Remote.\");\n adapterInstance = setupRemoteDevTools(containerEl, url);\n } else {\n throw new Error(`[bit-form] Modo DevTools inválido: ${mode}`);\n }\n\n return {\n ...adapterInstance,\n destroy: () => {\n if (adapterInstance && typeof adapterInstance.destroy === \"function\") {\n adapterInstance.destroy();\n }\n\n if (isAutoCreated && containerEl.parentNode) {\n containerEl.parentNode.removeChild(containerEl);\n } else {\n containerEl.innerHTML = \"\";\n }\n },\n };\n}\n"],"mappings":"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","names":["getDevToolsCSS","BitFormDevToolsUI","container","actions","style","getDevToolsCSS","target","btn","action","storeId","storesState","storeEntries","panelHtml","id","state","hasErrors","meta","currentStep","totalSteps","triggerHtml","setupLocalDevTools","container","ui","BitFormDevToolsUI","id","bitBus","getFullSnapshot","states","instance","storeInstance","state","historyMeta","unsubscribe","setupRemoteDevTools","container","url","socket","sendMessage","message","sendAction","storeId","action","ui","BitFormDevToolsUI","id","msg","data","e","err","initDevTools","options","mode","url","containerEl","isAutoCreated","el","adapterInstance","setupLocalDevTools","setupRemoteDevTools"]}
|
|
1
|
+
{"version":3,"sources":["../../src/devtools/ui/styles.ts","../../src/devtools/ui/index.ts","../../src/devtools/adapters/local.ts","../../src/devtools/adapters/remote.ts","../../src/devtools/init-dev-tools.ts"],"sourcesContent":["export function getDevToolsCSS(): string {\n return `\n .bit-devtools-container {\n position: fixed;\n bottom: 20px;\n right: 20px;\n z-index: 9999;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n\n .bit-devtools-trigger {\n background: #10b981;\n color: #fff;\n border: none;\n border-radius: 50%;\n width: 48px;\n height: 48px;\n cursor: pointer;\n box-shadow: 0 4px 12px rgba(16, 185, 129, 0.4);\n font-weight: bold;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.2s;\n font-size: 16px;\n margin-top: 16px;\n }\n .bit-devtools-trigger:hover { transform: scale(1.05); }\n\n .bit-devtools-panel {\n width: 450px;\n max-height: 80vh;\n background: #0f172a;\n color: #f8fafc;\n border-radius: 8px;\n padding: 16px;\n overflow-y: auto;\n box-shadow: 0 20px 25px -5px rgba(0,0,0,0.5), 0 8px 10px -6px rgba(0,0,0,0.5);\n border: 1px solid #334155;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .bit-devtools-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 12px;\n border-bottom: 1px solid #1e293b;\n }\n .bit-devtools-header h2 { margin: 0; font-size: 16px; display: flex; align-items: center; gap: 8px; }\n\n .bit-store-block {\n background: #1e293b;\n border-radius: 6px;\n padding: 12px;\n border: 1px solid #334155;\n }\n\n .bit-store-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n }\n .bit-store-title { margin: 0; color: #38bdf8; font-size: 14px; font-weight: bold; }\n\n .bit-badge-group { display: flex; gap: 6px; flex-wrap: wrap; }\n .bit-badge { font-size: 10px; padding: 2px 6px; border-radius: 4px; text-transform: uppercase; font-weight: bold; }\n .badge-success { background: rgba(16, 185, 129, 0.2); color: #34d399; border: 1px solid rgba(16, 185, 129, 0.2); }\n .badge-error { background: rgba(239, 68, 68, 0.2); color: #f87171; border: 1px solid rgba(239, 68, 68, 0.2); }\n .badge-warn { background: rgba(245, 158, 11, 0.2); color: #fbbf24; border: 1px solid rgba(245, 158, 11, 0.2); }\n .badge-info { background: rgba(56, 189, 248, 0.2); color: #7dd3fc; border: 1px solid rgba(56, 189, 248, 0.2); }\n\n .bit-section-title { font-size: 11px; color: #94a3b8; text-transform: uppercase; letter-spacing: 1px; margin: 12px 0 4px 0; display: block; }\n\n .bit-controls { display: flex; gap: 6px; margin-bottom: 12px; background: #0f172a; padding: 8px; border-radius: 6px; }\n .bit-action-btn { flex: 1; background: #334155; color: #e2e8f0; border: 1px solid #475569; padding: 6px 0; border-radius: 4px; cursor: pointer; font-size: 11px; display: flex; align-items: center; justify-content: center; gap: 4px; transition: all 0.2s; }\n .bit-action-btn:hover:not(:disabled) { background: #475569; }\n .bit-action-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n .bit-btn-reset { color: #fca5a5; border-color: rgba(239,68,68,0.3); }\n .bit-btn-reset:hover { background: rgba(239,68,68,0.1) !important; }\n\n pre.bit-pre { background: #020617; padding: 10px; border-radius: 4px; font-size: 11px; overflow-x: auto; border: 1px solid #1e293b; margin: 0; color: #e2e8f0; }\n pre.bit-error-box { background: rgba(239, 68, 68, 0.05); padding: 10px; border-radius: 4px; font-size: 11px; border: 1px dashed #ef4444; color: #fca5a5; margin: 0; overflow-x: auto; }\n `;\n}\n","import { getDevToolsCSS } from \"./styles\";\nimport type { DevToolsActions } from \"../types\";\n\nexport type { DevToolsActions };\n\nexport class BitFormDevToolsUI {\n private container: HTMLElement;\n private actions: DevToolsActions;\n private rootElement: HTMLDivElement;\n private currentStoresState: Record<string, any> = {};\n private isOpen: boolean = 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: Record<string, any>) {\n this.currentStoresState = storesState;\n this.render();\n }\n\n private render() {\n const storeEntries = Object.entries(this.currentStoresState);\n if (storeEntries.length === 0) {\n this.rootElement.innerHTML = \"\";\n return;\n }\n\n let panelHtml = \"\";\n\n if (this.isOpen) {\n panelHtml = `\n <div class=\"bit-devtools-panel\">\n <div class=\"bit-devtools-header\">\n <h2><span style=\"font-size: 20px;\">🛠</span> Bit-Form DevTools</h2>\n <span style=\"font-size: 11px; color: #64748b;\">v1.0.0</span>\n </div>\n `;\n\n for (const [id, state] of storeEntries) {\n const hasErrors = Object.keys(state.errors || {}).length > 0;\n\n // Lemos os metadados do histórico que o adaptador injetou\n const meta = state._meta || {\n totalSteps: 0,\n currentIndex: -1,\n canUndo: false,\n canRedo: false,\n };\n const currentStep = meta.currentIndex + 1;\n const totalSteps = meta.totalSteps;\n\n panelHtml += `\n <div class=\"bit-store-block\">\n <div class=\"bit-store-header\">\n <h3 class=\"bit-store-title\">${id}</h3>\n <div class=\"bit-badge-group\">\n <span class=\"bit-badge ${state.isValid ? \"badge-success\" : \"badge-error\"}\">\n ${state.isValid ? \"✓ Valid\" : \"✕ Invalid\"}\n </span>\n ${state.isDirty ? `<span class=\"bit-badge badge-warn\">Dirty</span>` : \"\"}\n ${state.isSubmitting ? `<span class=\"bit-badge badge-info\">⏳ Submitting</span>` : \"\"}\n </div>\n </div>\n\n <span class=\"bit-section-title\">Time Travel (${currentStep}/${totalSteps})</span>\n \n <div class=\"bit-controls\">\n <button class=\"bit-action-btn\" data-action=\"undo\" data-store=\"${id}\" ${meta.canUndo ? \"\" : \"disabled\"}>\n <span>↺</span> Undo\n </button>\n <button class=\"bit-action-btn\" data-action=\"redo\" data-store=\"${id}\" ${meta.canRedo ? \"\" : \"disabled\"}>\n <span>↻</span> Redo\n </button>\n <button class=\"bit-action-btn bit-btn-reset\" data-action=\"reset\" data-store=\"${id}\">\n <span>🗑</span> Reset\n </button>\n </div>\n `;\n\n if (hasErrors) {\n panelHtml += `\n <span class=\"bit-section-title\" style=\"color: #f87171;\">⚠️ Validations Failing</span>\n <pre class=\"bit-error-box\">${JSON.stringify(state.errors, null, 2)}</pre>\n `;\n }\n\n panelHtml += `\n <span class=\"bit-section-title\">Values</span>\n <pre class=\"bit-pre\">${JSON.stringify(state.values, null, 2)}</pre>\n </div>\n `;\n }\n\n panelHtml += `</div>`;\n }\n\n // Botão Flutuante (sempre renderizado)\n const triggerHtml = `\n <button class=\"bit-devtools-trigger\" style=\"transform: ${this.isOpen ? \"scale(0.9)\" : \"scale(1)\"};\" title=\"Abrir DevTools\">\n ${this.isOpen ? \"✖\" : \"Bit\"}\n </button>\n `;\n\n this.rootElement.innerHTML = panelHtml + triggerHtml;\n }\n}\n","import { bitBus } from \"../../core\";\nimport type { BitStoreHooksApi } from \"../../core\";\nimport { BitFormDevToolsUI } from \"../ui\";\n\nexport function setupLocalDevTools(container: HTMLElement) {\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => (bitBus.stores[id] as BitStoreHooksApi<any>)?.undo(),\n onRedo: (id) => (bitBus.stores[id] as BitStoreHooksApi<any>)?.redo(),\n onReset: (id) => (bitBus.stores[id] as BitStoreHooksApi<any>)?.reset(),\n });\n\n const getFullSnapshot = () => {\n const states: Record<string, unknown> = {};\n\n for (const [id, instance] of Object.entries(bitBus.stores)) {\n const storeInstance = instance as BitStoreHooksApi<any>;\n const state = storeInstance.getState();\n\n const historyMeta = storeInstance?.getHistoryMetadata?.() || {\n enabled: false,\n canUndo: false,\n canRedo: false,\n historyIndex: -1,\n historySize: 0,\n };\n\n states[id] = {\n ...state,\n _meta: {\n canUndo: historyMeta.canUndo,\n canRedo: historyMeta.canRedo,\n totalSteps: historyMeta.historySize,\n currentIndex: historyMeta.historyIndex,\n },\n };\n }\n return states;\n };\n\n ui.updateState(getFullSnapshot());\n\n const unsubscribe = bitBus.subscribe(() => {\n ui.updateState(getFullSnapshot());\n });\n\n return {\n ui,\n destroy: () => {\n unsubscribe();\n container.innerHTML = \"\";\n },\n };\n}\n","import { BitFormDevToolsUI } from \"../ui\";\nimport type {\n DevToolsActionMessage,\n DevToolsActionName,\n DevToolsRemoteMessage,\n DevToolsStateUpdateMessage,\n} from \"../types\";\n\nexport function setupRemoteDevTools(\n container: HTMLElement,\n url: string = \"ws://localhost:3000\",\n) {\n const socket = new WebSocket(url);\n\n const sendMessage = (message: DevToolsRemoteMessage) => {\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify(message));\n } else {\n console.warn(\n \"[bit-form] Tentativa de envio falhou. WebSocket não está aberto.\",\n );\n }\n };\n\n const sendAction = (storeId: string, action: DevToolsActionName) => {\n const message: DevToolsActionMessage = {\n type: \"ACTION\",\n payload: { storeId, action },\n };\n sendMessage(message);\n };\n\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => sendAction(id, \"undo\"),\n onRedo: (id) => sendAction(id, \"redo\"),\n onReset: (id) => sendAction(id, \"reset\"),\n });\n\n socket.addEventListener(\"open\", () => {\n 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 (data.type === \"STATE_UPDATE\") {\n ui.updateState((data as DevToolsStateUpdateMessage).payload);\n }\n } catch (e) {\n console.error(\"[bit-form] Erro ao processar mensagem do WebSocket:\", e);\n }\n });\n\n socket.addEventListener(\"error\", (err) => {\n console.error(\"[bit-form] Erro na conexão do DevTools remoto:\", err);\n });\n\n return {\n ui,\n destroy: () => {\n if (\n socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING\n ) {\n socket.close();\n }\n container.innerHTML = \"\";\n },\n };\n}\n","import { setupLocalDevTools } from \"./adapters/local\";\nimport { setupRemoteDevTools } from \"./adapters/remote\";\nimport type { BitDevToolsOptions } from \"./types\";\n\nexport type { BitDevToolsOptions };\n\nexport function initDevTools(options: BitDevToolsOptions = {}) {\n const { mode = \"local\", url } = options;\n let containerEl: HTMLElement;\n\n let isAutoCreated = false;\n\n if (typeof options.container === \"string\") {\n const el = document.querySelector<HTMLElement>(options.container);\n if (!el)\n throw new Error(\n `[bit-form] Container '${options.container}' não encontrado na página.`,\n );\n containerEl = el;\n } else if (options.container instanceof HTMLElement) {\n containerEl = options.container;\n } else {\n containerEl = document.createElement(\"div\");\n containerEl.id = \"bit-form-devtools-root\";\n containerEl.style.position = \"fixed\";\n containerEl.style.bottom = \"20px\";\n containerEl.style.right = \"20px\";\n containerEl.style.zIndex = \"9999\";\n containerEl.style.maxHeight = \"80vh\";\n containerEl.style.overflowY = \"auto\";\n containerEl.style.boxShadow = \"0 10px 25px rgba(0,0,0,0.1)\";\n document.body.appendChild(containerEl);\n isAutoCreated = true;\n }\n\n let adapterInstance: any;\n\n if (mode === \"local\") {\n console.log(\"[bit-form] DevTools iniciado em modo Local.\");\n adapterInstance = setupLocalDevTools(containerEl);\n } else if (mode === \"remote\") {\n console.log(\"[bit-form] DevTools iniciado em modo Remote.\");\n adapterInstance = setupRemoteDevTools(containerEl, url);\n } else {\n throw new Error(`[bit-form] Modo DevTools inválido: ${mode}`);\n }\n\n return {\n ...adapterInstance,\n destroy: () => {\n if (adapterInstance && typeof adapterInstance.destroy === \"function\") {\n adapterInstance.destroy();\n }\n\n if (isAutoCreated && containerEl.parentNode) {\n containerEl.parentNode.removeChild(containerEl);\n } else {\n containerEl.innerHTML = \"\";\n }\n },\n };\n}\n"],"mappings":"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","names":["getDevToolsCSS","BitFormDevToolsUI","container","actions","style","getDevToolsCSS","target","btn","action","storeId","storesState","storeEntries","panelHtml","id","state","hasErrors","meta","currentStep","totalSteps","triggerHtml","setupLocalDevTools","container","ui","BitFormDevToolsUI","id","bitBus","getFullSnapshot","states","instance","storeInstance","state","historyMeta","unsubscribe","setupRemoteDevTools","container","url","socket","sendMessage","message","sendAction","storeId","action","ui","BitFormDevToolsUI","id","msg","data","e","err","initDevTools","options","mode","url","containerEl","isAutoCreated","el","adapterInstance","setupLocalDevTools","setupRemoteDevTools"]}
|
package/dist/index.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 _chunkYCSWULENcjs = require('./chunk-YCSWULEN.cjs');exports.bitBus = _chunkYCSWULENcjs.j; exports.cleanPrefixedKeys = _chunkYCSWULENcjs.g; exports.createBitStore = _chunkYCSWULENcjs.l; exports.deepClone = _chunkYCSWULENcjs.a; exports.deepEqual = _chunkYCSWULENcjs.d; exports.deepMerge = _chunkYCSWULENcjs.b; exports.extractServerErrors = _chunkYCSWULENcjs.i; exports.getDeepValue = _chunkYCSWULENcjs.e; exports.isValidationErrorShape = _chunkYCSWULENcjs.h; exports.resolveBitStoreForHooks = _chunkYCSWULENcjs.k; exports.setDeepValue = _chunkYCSWULENcjs.f; exports.valueEqual = _chunkYCSWULENcjs.c;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/index.cjs"],"names":[],"mappings":"AAAA,iIAAqH,
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/index.cjs"],"names":[],"mappings":"AAAA,iIAAqH,iiBAAkP","file":"/home/runner/work/bit-form/bit-form/dist/index.cjs"}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,53 +1,18 @@
|
|
|
1
1
|
import { B as BitMask, a as BitMaskName } from './types-D8DgIUhJ.cjs';
|
|
2
|
-
import {
|
|
3
|
-
export { w as BitFieldConditional, x as BitFieldValidation, y as BitHistoryConfig, z as BitPersistConfig, A as BitPersistMode, C as BitPersistStorageAdapter, d as BitPlugin, E as BitPluginContext, F as BitPluginErrorEvent, G as BitPluginHooks, H as BitTouched, I as BitValidationConfig, S as ScopeStatus, n as ValidateScopeResult, V as ValidatorFn, J as bitBus } from './bus-
|
|
4
|
-
import { B as BitFrameworkConfig, a as
|
|
5
|
-
export { g as BitEqualityFn } from './public-types-
|
|
2
|
+
import { o as BitComputedFn, B as BitConfig, a as BitFieldDefinition, p as BitTransformFn, e as BitState, f as BitPath, m as BitFieldState, g as BitPathValue, q as BitFieldChangeMeta, h as DeepPartial, i as BitErrors, j as BitPersistMetadata, k as BitArrayPath, l as BitArrayItem, r as BitBeforeValidateEvent, s as BitAfterValidateEvent, t as BitBeforeSubmitEvent, u as BitAfterSubmitEvent, v as BitFieldChangeEvent } from './bus-BeAeZwWu.cjs';
|
|
3
|
+
export { w as BitFieldConditional, x as BitFieldValidation, y as BitHistoryConfig, z as BitPersistConfig, A as BitPersistMode, C as BitPersistStorageAdapter, d as BitPlugin, E as BitPluginContext, F as BitPluginErrorEvent, G as BitPluginHooks, H as BitTouched, I as BitValidationConfig, S as ScopeStatus, n as ValidateScopeResult, V as ValidatorFn, J as bitBus } from './bus-BeAeZwWu.cjs';
|
|
4
|
+
import { B as BitFrameworkConfig, a as BitSelector, b as BitSelectorSubscriptionOptions, c as BitHistoryMetadata, d as BitValidationOptions, e as BitStoreApi, f as BitStoreHooksApi } from './public-types-Cd9ai20P.cjs';
|
|
5
|
+
export { g as BitEqualityFn } from './public-types-Cd9ai20P.cjs';
|
|
6
6
|
export { a as BitDeleteUploadFn, B as BitUploadFn, b as BitUploadResult } from './upload-EXnJLq8k.cjs';
|
|
7
7
|
|
|
8
|
-
interface
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
getTransformEntries: () => [string, BitTransformFn<T>][];
|
|
13
|
-
config: BitFrameworkConfig<T>;
|
|
14
|
-
updateDependencies: (changedPath: string, newValues: T) => string[];
|
|
15
|
-
isFieldHidden: (path: string) => boolean;
|
|
16
|
-
evaluateAllDependencies: (values: T) => void;
|
|
17
|
-
getHiddenFields: () => string[];
|
|
18
|
-
clearFieldValidation: (path: string) => void;
|
|
19
|
-
triggerValidation: (scopeFields?: string[]) => void;
|
|
20
|
-
handleFieldAsyncValidation: (path: string, value: any) => void;
|
|
21
|
-
cancelAllValidations: () => void;
|
|
22
|
-
validateNow: (options?: BitValidationOptions) => Promise<boolean>;
|
|
23
|
-
hasValidationsInProgress: (scopeFields?: string[]) => boolean;
|
|
24
|
-
updateDirtyForPath: (path: string, nextValues: T, baselineValues: T) => boolean;
|
|
25
|
-
rebuildDirtyState: (nextValues: T, baselineValues: T) => boolean;
|
|
26
|
-
clearDirtyState: () => void;
|
|
27
|
-
buildDirtyValues: (values: T) => Partial<T>;
|
|
28
|
-
resetHistory: (initialValues: T) => void;
|
|
29
|
-
emitFieldChange: (event: BitFieldChangeEvent<T>) => void;
|
|
30
|
-
emitBeforeSubmit: (event: BitBeforeSubmitEvent<T>) => Promise<void>;
|
|
31
|
-
emitAfterSubmit: (event: BitAfterSubmitEvent<T>) => Promise<void>;
|
|
32
|
-
emitOperationalError: (event: {
|
|
33
|
-
source: "submit";
|
|
34
|
-
error: unknown;
|
|
35
|
-
payload?: unknown;
|
|
36
|
-
}) => Promise<void>;
|
|
8
|
+
interface BitComputedEntry<T extends object> {
|
|
9
|
+
path: string;
|
|
10
|
+
compute: BitComputedFn<T>;
|
|
11
|
+
dependsOn?: readonly string[];
|
|
37
12
|
}
|
|
38
13
|
|
|
39
|
-
interface
|
|
40
|
-
|
|
41
|
-
internalUpdateState: (partial: Partial<BitState<T>>) => void;
|
|
42
|
-
setError: (path: string, message: string | undefined) => void;
|
|
43
|
-
validate: (opts: BitValidationOptions) => Promise<boolean>;
|
|
44
|
-
getFieldConfig: (path: string) => BitFieldDefinition<T> | undefined;
|
|
45
|
-
getScopeFields: (scopeName: string) => string[];
|
|
46
|
-
config: BitFrameworkConfig<T>;
|
|
47
|
-
getRequiredErrors: (values: T) => BitErrors<T>;
|
|
48
|
-
getHiddenFields: () => string[];
|
|
49
|
-
emitBeforeValidate: (event: BitBeforeValidateEvent<T>) => Promise<void>;
|
|
50
|
-
emitAfterValidate: (event: BitAfterValidateEvent<T>) => Promise<void>;
|
|
14
|
+
interface BitValidationTriggerOptions {
|
|
15
|
+
forceDebounce?: boolean;
|
|
51
16
|
}
|
|
52
17
|
|
|
53
18
|
/**
|
|
@@ -60,11 +25,18 @@ interface BitValidationStorePort<T extends object> {
|
|
|
60
25
|
* - Feature managers provide optional enhancements (history, arrays, scopes)
|
|
61
26
|
* - Query/mutation managers organize domain-specific operations
|
|
62
27
|
*/
|
|
63
|
-
declare class BitStore<T extends object = any>
|
|
28
|
+
declare class BitStore<T extends object = any> {
|
|
64
29
|
private state;
|
|
65
30
|
private readonly subscriptions;
|
|
66
31
|
private readonly effects;
|
|
67
32
|
private readonly capabilities;
|
|
33
|
+
/** Baseline for dirty tracking. Decoupled from config so that rebaseValues
|
|
34
|
+
* can update it without mutating the user-provided config object. */
|
|
35
|
+
private _initialValues;
|
|
36
|
+
/** Incremented on every registerMask() call so React hooks can track mask
|
|
37
|
+
* configuration changes via useSyncExternalStore without putting masks in
|
|
38
|
+
* BitState and triggering a full re-render of all fields. */
|
|
39
|
+
private _masksVersion;
|
|
68
40
|
config: BitFrameworkConfig<T>;
|
|
69
41
|
readonly storeId: string;
|
|
70
42
|
private readonly dependencyManager;
|
|
@@ -73,7 +45,13 @@ declare class BitStore<T extends object = any> implements BitValidationStorePort
|
|
|
73
45
|
private scopeFieldsIndex;
|
|
74
46
|
private computedEntriesCache;
|
|
75
47
|
private transformEntriesCache;
|
|
48
|
+
private batchDepth;
|
|
49
|
+
private batchedState;
|
|
50
|
+
private batchedChangedPaths;
|
|
51
|
+
private batchedValuesChanged;
|
|
76
52
|
private invalidateFieldIndexes;
|
|
53
|
+
private registerCachedFieldIndexes;
|
|
54
|
+
private unregisterCachedFieldIndexes;
|
|
77
55
|
private getCapability;
|
|
78
56
|
private get validation();
|
|
79
57
|
private get lifecycle();
|
|
@@ -86,7 +64,7 @@ declare class BitStore<T extends object = any> implements BitValidationStorePort
|
|
|
86
64
|
getConfig(): BitFrameworkConfig<T>;
|
|
87
65
|
getFieldConfig(path: string): BitFieldDefinition<T> | undefined;
|
|
88
66
|
getScopeFields(scopeName: string): string[];
|
|
89
|
-
getComputedEntries():
|
|
67
|
+
getComputedEntries(): BitComputedEntry<T>[];
|
|
90
68
|
getTransformEntries(): [string, BitTransformFn<T>][];
|
|
91
69
|
resolveMask(path: string): BitMask | undefined;
|
|
92
70
|
getState(): BitState<T>;
|
|
@@ -116,6 +94,7 @@ declare class BitStore<T extends object = any> implements BitValidationStorePort
|
|
|
116
94
|
setErrors(errors: BitErrors<T>): void;
|
|
117
95
|
setServerErrors(serverErrors: Record<string, string[] | string>): void;
|
|
118
96
|
reset(): void;
|
|
97
|
+
transaction<TResult>(callback: () => TResult): TResult;
|
|
119
98
|
submit(onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>): Promise<void>;
|
|
120
99
|
registerMask(name: BitMaskName, mask: BitMask): void;
|
|
121
100
|
getDirtyValues(): Partial<T>;
|
|
@@ -146,7 +125,7 @@ declare class BitStore<T extends object = any> implements BitValidationStorePort
|
|
|
146
125
|
payload?: unknown;
|
|
147
126
|
}): Promise<void>;
|
|
148
127
|
hasValidationsInProgress(scopeFields?: string[]): boolean;
|
|
149
|
-
triggerValidation(scopeFields?: string[]): void;
|
|
128
|
+
triggerValidation(scopeFields?: string[], options?: BitValidationTriggerOptions): void;
|
|
150
129
|
getStepStatus(scopeName: string): {
|
|
151
130
|
hasErrors: boolean;
|
|
152
131
|
isDirty: boolean;
|
|
@@ -156,7 +135,7 @@ declare class BitStore<T extends object = any> implements BitValidationStorePort
|
|
|
156
135
|
updateDependencies(changedPath: string, newValues: T): string[];
|
|
157
136
|
isFieldHidden(path: string): boolean;
|
|
158
137
|
evaluateAllDependencies(values: T): void;
|
|
159
|
-
getHiddenFields(): string
|
|
138
|
+
getHiddenFields(): ReadonlySet<string>;
|
|
160
139
|
getRequiredErrors(values: T): BitErrors<T>;
|
|
161
140
|
clearFieldValidation(path: string): void;
|
|
162
141
|
handleFieldAsyncValidation(path: string, value: any): void;
|
|
@@ -166,11 +145,27 @@ declare class BitStore<T extends object = any> implements BitValidationStorePort
|
|
|
166
145
|
rebuildDirtyState(nextValues: T, baselineValues: T): boolean;
|
|
167
146
|
clearDirtyState(): void;
|
|
168
147
|
buildDirtyValues(values: T): Partial<T>;
|
|
148
|
+
batchStateUpdates<TResult>(callback: () => TResult): TResult;
|
|
169
149
|
resetHistory(initialValues: T): void;
|
|
150
|
+
/** Current baseline used for dirty-state comparisons. */
|
|
151
|
+
get initialValues(): T;
|
|
152
|
+
/** Returns the current baseline (usable as a port method). */
|
|
153
|
+
getInitialValues(): T;
|
|
154
|
+
/**
|
|
155
|
+
* Updates the baseline used for dirty comparisons.
|
|
156
|
+
* Called by rebaseValues so that config is never mutated directly by managers.
|
|
157
|
+
* Also syncs config.initialValues so getConfig() reflects the new baseline.
|
|
158
|
+
*/
|
|
159
|
+
setInitialValues(values: T): void;
|
|
160
|
+
/** Returns a monotonically increasing counter that increments every time a
|
|
161
|
+
* mask is registered via registerMask(). Used by React components to track
|
|
162
|
+
* mask configuration changes reactively without storing masks in BitState. */
|
|
163
|
+
getMasksVersion(): number;
|
|
170
164
|
internalUpdateState(partialState: Partial<BitState<T>>, changedPaths?: string[]): void;
|
|
171
165
|
internalSaveSnapshot(): void;
|
|
172
166
|
private applyPersistedValues;
|
|
173
167
|
cleanup(): void;
|
|
168
|
+
private flushBatchedStateUpdates;
|
|
174
169
|
}
|
|
175
170
|
|
|
176
171
|
declare function resolveBitStoreForHooks<T extends object>(store: BitStoreApi<T> | BitStore<T>): BitStoreHooksApi<T>;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,53 +1,18 @@
|
|
|
1
1
|
import { B as BitMask, a as BitMaskName } from './types-D8DgIUhJ.js';
|
|
2
|
-
import {
|
|
3
|
-
export { w as BitFieldConditional, x as BitFieldValidation, y as BitHistoryConfig, z as BitPersistConfig, A as BitPersistMode, C as BitPersistStorageAdapter, d as BitPlugin, E as BitPluginContext, F as BitPluginErrorEvent, G as BitPluginHooks, H as BitTouched, I as BitValidationConfig, S as ScopeStatus, n as ValidateScopeResult, V as ValidatorFn, J as bitBus } from './bus-
|
|
4
|
-
import { B as BitFrameworkConfig, a as
|
|
5
|
-
export { g as BitEqualityFn } from './public-types-
|
|
2
|
+
import { o as BitComputedFn, B as BitConfig, a as BitFieldDefinition, p as BitTransformFn, e as BitState, f as BitPath, m as BitFieldState, g as BitPathValue, q as BitFieldChangeMeta, h as DeepPartial, i as BitErrors, j as BitPersistMetadata, k as BitArrayPath, l as BitArrayItem, r as BitBeforeValidateEvent, s as BitAfterValidateEvent, t as BitBeforeSubmitEvent, u as BitAfterSubmitEvent, v as BitFieldChangeEvent } from './bus-B4zZmB9C.js';
|
|
3
|
+
export { w as BitFieldConditional, x as BitFieldValidation, y as BitHistoryConfig, z as BitPersistConfig, A as BitPersistMode, C as BitPersistStorageAdapter, d as BitPlugin, E as BitPluginContext, F as BitPluginErrorEvent, G as BitPluginHooks, H as BitTouched, I as BitValidationConfig, S as ScopeStatus, n as ValidateScopeResult, V as ValidatorFn, J as bitBus } from './bus-B4zZmB9C.js';
|
|
4
|
+
import { B as BitFrameworkConfig, a as BitSelector, b as BitSelectorSubscriptionOptions, c as BitHistoryMetadata, d as BitValidationOptions, e as BitStoreApi, f as BitStoreHooksApi } from './public-types-DdZxD6Op.js';
|
|
5
|
+
export { g as BitEqualityFn } from './public-types-DdZxD6Op.js';
|
|
6
6
|
export { a as BitDeleteUploadFn, B as BitUploadFn, b as BitUploadResult } from './upload-EXnJLq8k.js';
|
|
7
7
|
|
|
8
|
-
interface
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
getTransformEntries: () => [string, BitTransformFn<T>][];
|
|
13
|
-
config: BitFrameworkConfig<T>;
|
|
14
|
-
updateDependencies: (changedPath: string, newValues: T) => string[];
|
|
15
|
-
isFieldHidden: (path: string) => boolean;
|
|
16
|
-
evaluateAllDependencies: (values: T) => void;
|
|
17
|
-
getHiddenFields: () => string[];
|
|
18
|
-
clearFieldValidation: (path: string) => void;
|
|
19
|
-
triggerValidation: (scopeFields?: string[]) => void;
|
|
20
|
-
handleFieldAsyncValidation: (path: string, value: any) => void;
|
|
21
|
-
cancelAllValidations: () => void;
|
|
22
|
-
validateNow: (options?: BitValidationOptions) => Promise<boolean>;
|
|
23
|
-
hasValidationsInProgress: (scopeFields?: string[]) => boolean;
|
|
24
|
-
updateDirtyForPath: (path: string, nextValues: T, baselineValues: T) => boolean;
|
|
25
|
-
rebuildDirtyState: (nextValues: T, baselineValues: T) => boolean;
|
|
26
|
-
clearDirtyState: () => void;
|
|
27
|
-
buildDirtyValues: (values: T) => Partial<T>;
|
|
28
|
-
resetHistory: (initialValues: T) => void;
|
|
29
|
-
emitFieldChange: (event: BitFieldChangeEvent<T>) => void;
|
|
30
|
-
emitBeforeSubmit: (event: BitBeforeSubmitEvent<T>) => Promise<void>;
|
|
31
|
-
emitAfterSubmit: (event: BitAfterSubmitEvent<T>) => Promise<void>;
|
|
32
|
-
emitOperationalError: (event: {
|
|
33
|
-
source: "submit";
|
|
34
|
-
error: unknown;
|
|
35
|
-
payload?: unknown;
|
|
36
|
-
}) => Promise<void>;
|
|
8
|
+
interface BitComputedEntry<T extends object> {
|
|
9
|
+
path: string;
|
|
10
|
+
compute: BitComputedFn<T>;
|
|
11
|
+
dependsOn?: readonly string[];
|
|
37
12
|
}
|
|
38
13
|
|
|
39
|
-
interface
|
|
40
|
-
|
|
41
|
-
internalUpdateState: (partial: Partial<BitState<T>>) => void;
|
|
42
|
-
setError: (path: string, message: string | undefined) => void;
|
|
43
|
-
validate: (opts: BitValidationOptions) => Promise<boolean>;
|
|
44
|
-
getFieldConfig: (path: string) => BitFieldDefinition<T> | undefined;
|
|
45
|
-
getScopeFields: (scopeName: string) => string[];
|
|
46
|
-
config: BitFrameworkConfig<T>;
|
|
47
|
-
getRequiredErrors: (values: T) => BitErrors<T>;
|
|
48
|
-
getHiddenFields: () => string[];
|
|
49
|
-
emitBeforeValidate: (event: BitBeforeValidateEvent<T>) => Promise<void>;
|
|
50
|
-
emitAfterValidate: (event: BitAfterValidateEvent<T>) => Promise<void>;
|
|
14
|
+
interface BitValidationTriggerOptions {
|
|
15
|
+
forceDebounce?: boolean;
|
|
51
16
|
}
|
|
52
17
|
|
|
53
18
|
/**
|
|
@@ -60,11 +25,18 @@ interface BitValidationStorePort<T extends object> {
|
|
|
60
25
|
* - Feature managers provide optional enhancements (history, arrays, scopes)
|
|
61
26
|
* - Query/mutation managers organize domain-specific operations
|
|
62
27
|
*/
|
|
63
|
-
declare class BitStore<T extends object = any>
|
|
28
|
+
declare class BitStore<T extends object = any> {
|
|
64
29
|
private state;
|
|
65
30
|
private readonly subscriptions;
|
|
66
31
|
private readonly effects;
|
|
67
32
|
private readonly capabilities;
|
|
33
|
+
/** Baseline for dirty tracking. Decoupled from config so that rebaseValues
|
|
34
|
+
* can update it without mutating the user-provided config object. */
|
|
35
|
+
private _initialValues;
|
|
36
|
+
/** Incremented on every registerMask() call so React hooks can track mask
|
|
37
|
+
* configuration changes via useSyncExternalStore without putting masks in
|
|
38
|
+
* BitState and triggering a full re-render of all fields. */
|
|
39
|
+
private _masksVersion;
|
|
68
40
|
config: BitFrameworkConfig<T>;
|
|
69
41
|
readonly storeId: string;
|
|
70
42
|
private readonly dependencyManager;
|
|
@@ -73,7 +45,13 @@ declare class BitStore<T extends object = any> implements BitValidationStorePort
|
|
|
73
45
|
private scopeFieldsIndex;
|
|
74
46
|
private computedEntriesCache;
|
|
75
47
|
private transformEntriesCache;
|
|
48
|
+
private batchDepth;
|
|
49
|
+
private batchedState;
|
|
50
|
+
private batchedChangedPaths;
|
|
51
|
+
private batchedValuesChanged;
|
|
76
52
|
private invalidateFieldIndexes;
|
|
53
|
+
private registerCachedFieldIndexes;
|
|
54
|
+
private unregisterCachedFieldIndexes;
|
|
77
55
|
private getCapability;
|
|
78
56
|
private get validation();
|
|
79
57
|
private get lifecycle();
|
|
@@ -86,7 +64,7 @@ declare class BitStore<T extends object = any> implements BitValidationStorePort
|
|
|
86
64
|
getConfig(): BitFrameworkConfig<T>;
|
|
87
65
|
getFieldConfig(path: string): BitFieldDefinition<T> | undefined;
|
|
88
66
|
getScopeFields(scopeName: string): string[];
|
|
89
|
-
getComputedEntries():
|
|
67
|
+
getComputedEntries(): BitComputedEntry<T>[];
|
|
90
68
|
getTransformEntries(): [string, BitTransformFn<T>][];
|
|
91
69
|
resolveMask(path: string): BitMask | undefined;
|
|
92
70
|
getState(): BitState<T>;
|
|
@@ -116,6 +94,7 @@ declare class BitStore<T extends object = any> implements BitValidationStorePort
|
|
|
116
94
|
setErrors(errors: BitErrors<T>): void;
|
|
117
95
|
setServerErrors(serverErrors: Record<string, string[] | string>): void;
|
|
118
96
|
reset(): void;
|
|
97
|
+
transaction<TResult>(callback: () => TResult): TResult;
|
|
119
98
|
submit(onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>): Promise<void>;
|
|
120
99
|
registerMask(name: BitMaskName, mask: BitMask): void;
|
|
121
100
|
getDirtyValues(): Partial<T>;
|
|
@@ -146,7 +125,7 @@ declare class BitStore<T extends object = any> implements BitValidationStorePort
|
|
|
146
125
|
payload?: unknown;
|
|
147
126
|
}): Promise<void>;
|
|
148
127
|
hasValidationsInProgress(scopeFields?: string[]): boolean;
|
|
149
|
-
triggerValidation(scopeFields?: string[]): void;
|
|
128
|
+
triggerValidation(scopeFields?: string[], options?: BitValidationTriggerOptions): void;
|
|
150
129
|
getStepStatus(scopeName: string): {
|
|
151
130
|
hasErrors: boolean;
|
|
152
131
|
isDirty: boolean;
|
|
@@ -156,7 +135,7 @@ declare class BitStore<T extends object = any> implements BitValidationStorePort
|
|
|
156
135
|
updateDependencies(changedPath: string, newValues: T): string[];
|
|
157
136
|
isFieldHidden(path: string): boolean;
|
|
158
137
|
evaluateAllDependencies(values: T): void;
|
|
159
|
-
getHiddenFields(): string
|
|
138
|
+
getHiddenFields(): ReadonlySet<string>;
|
|
160
139
|
getRequiredErrors(values: T): BitErrors<T>;
|
|
161
140
|
clearFieldValidation(path: string): void;
|
|
162
141
|
handleFieldAsyncValidation(path: string, value: any): void;
|
|
@@ -166,11 +145,27 @@ declare class BitStore<T extends object = any> implements BitValidationStorePort
|
|
|
166
145
|
rebuildDirtyState(nextValues: T, baselineValues: T): boolean;
|
|
167
146
|
clearDirtyState(): void;
|
|
168
147
|
buildDirtyValues(values: T): Partial<T>;
|
|
148
|
+
batchStateUpdates<TResult>(callback: () => TResult): TResult;
|
|
169
149
|
resetHistory(initialValues: T): void;
|
|
150
|
+
/** Current baseline used for dirty-state comparisons. */
|
|
151
|
+
get initialValues(): T;
|
|
152
|
+
/** Returns the current baseline (usable as a port method). */
|
|
153
|
+
getInitialValues(): T;
|
|
154
|
+
/**
|
|
155
|
+
* Updates the baseline used for dirty comparisons.
|
|
156
|
+
* Called by rebaseValues so that config is never mutated directly by managers.
|
|
157
|
+
* Also syncs config.initialValues so getConfig() reflects the new baseline.
|
|
158
|
+
*/
|
|
159
|
+
setInitialValues(values: T): void;
|
|
160
|
+
/** Returns a monotonically increasing counter that increments every time a
|
|
161
|
+
* mask is registered via registerMask(). Used by React components to track
|
|
162
|
+
* mask configuration changes reactively without storing masks in BitState. */
|
|
163
|
+
getMasksVersion(): number;
|
|
170
164
|
internalUpdateState(partialState: Partial<BitState<T>>, changedPaths?: string[]): void;
|
|
171
165
|
internalSaveSnapshot(): void;
|
|
172
166
|
private applyPersistedValues;
|
|
173
167
|
cleanup(): void;
|
|
168
|
+
private flushBatchedStateUpdates;
|
|
174
169
|
}
|
|
175
170
|
|
|
176
171
|
declare function resolveBitStoreForHooks<T extends object>(store: BitStoreApi<T> | BitStore<T>): BitStoreHooksApi<T>;
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as o,b as r,c as e,d as f,e as m,f as p,g as t,h as x,i as a,j as b,k as c,l as d}from"./chunk-
|
|
1
|
+
import{a as o,b as r,c as e,d as f,e as m,f as p,g as t,h as x,i as a,j as b,k as c,l as d}from"./chunk-PX6WKENM.js";export{b as bitBus,t as cleanPrefixedKeys,d as createBitStore,o as deepClone,f as deepEqual,r as deepMerge,a as extractServerErrors,m as getDeepValue,x as isValidationErrorShape,c as resolveBitStoreForHooks,p as setDeepValue,e as valueEqual};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/mask.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }require('./chunk-PFPGASVZ.cjs');var ee={"#":/\d/,A:/[a-zA-Z]/,X:/[a-zA-Z0-9]/,H:/[0-9a-fA-F]/,U:/[A-Z]/,L:/[a-z]/,"*":/./},x= exports.unmask =(s,r)=>{if(s==null||s==="")return"";let e=String(s),m=e.startsWith("-"),a=r?r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"):"",i=new RegExp(`[^a-zA-Z0-9${a}]`,"g"),p=e.replace(i,"");return m&&p&&!p.startsWith("-")?`-${p}`:p},te= exports.unmaskCurrency =(s,r=2)=>{if(typeof s=="number")return s;if(!s)return 0;let e=String(s),m=e.includes("-"),a=e.replace(/\D/g,"");if(!a)return 0;let i=parseInt(a,10)/Math.pow(10,r);return m?-i:i},n= exports.createPatternMask =(s,r)=>{let e=o=>o.split("").filter(t=>ee[t]).length,a=[...Array.isArray(s)?s:[s]].sort((o,t)=>e(o)-e(t)),i=o=>{let t=a[a.length-1];for(let c of a)if(o<=e(c)){t=c;break}return t},p=o=>{let t=x(o,_optionalChain([r, 'optionalAccess', _2 => _2.allowChars]));if(!t&&!_optionalChain([r, 'optionalAccess', _3 => _3.guide]))return"";let c=i(t.length),k=_optionalChain([r, 'optionalAccess', _4 => _4.guide])||!1,f=_optionalChain([r, 'optionalAccess', _5 => _5.placeholderChar])||"_",d="",P=0;for(let g=0;g<c.length;g++){let C=c[g],h=ee[C];if(P<t.length){let u=t[P];if(h)if(C==="U"&&(u=u.toUpperCase()),C==="L"&&(u=u.toLowerCase()),h.test(u))d+=u,P++;else if(k)d+=f;else break;else d+=C,u===C&&P++}else if(k)d+=h?f:C;else break}return d};return{format:p,parse:o=>{if(_optionalChain([r, 'optionalAccess', _6 => _6.customParse]))return r.customParse(o);let t=p(o);if(_optionalChain([r, 'optionalAccess', _7 => _7.saveRaw])){if(_optionalChain([r, 'optionalAccess', _8 => _8.guide])){let k=(r.placeholderChar||"_").replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),f=new RegExp(k,"g");return t.replace(f,"")}return t}return x(t,_optionalChain([r, 'optionalAccess', _9 => _9.allowChars]))}}},l= exports.createCurrencyMask =({prefix:s="",suffix:r="",thousand:e,decimal:m,precision:a=2,allowNegative:i=!0,saveRaw:p=!1})=>{let o=t=>{if(t==null||t==="")return"";let c="";if(typeof t=="number"?c=Math.abs(t).toFixed(a).replace(/\D/g,""):c=String(t).replace(/\D/g,""),!c&&String(t).includes("-")&&i)return"-";if(!c)return"";c=c.padStart(a+1,"0");let k=a>0?c.slice(0,-a).replace(/^0+(?=\d)/,"")||"0":c.replace(/^0+(?=\d)/,"")||"0",f=a>0?c.slice(-a):"",d=k.replace(/\B(?=(\d{3})+(?!\d))/g,e),g=(typeof t=="number"?t<0:String(t).includes("-"))&&i?"-":"";return a===0?`${g}${s}${d}${r}`:`${g}${s}${d}${m}${f}${r}`};return{format:o,parse:t=>{let c=te(t,a),k=i?c:Math.abs(c);return p?o(k):k}}},D= exports.createCreditCardMask =s=>{let r=e=>/^3[47]/.test(e)?"#### ###### #####":/^3(?:0[0-5]|[68])/.test(e)?"#### ###### ####":"#### #### #### ####";return{format:e=>{let m=x(e,_optionalChain([s, 'optionalAccess', _10 => _10.allowChars])),a=r(m);return n(a,s).format(e)},parse:e=>{let m=x(e,_optionalChain([s, 'optionalAccess', _11 => _11.allowChars])),a=r(m);return n(a,s).parse(e)}}},H= exports.createDateMask =s=>{let e=(_optionalChain([s, 'optionalAccess', _12 => _12.format])||"DD/MM/YYYY")==="YYYY-MM-DD",m=n(e?"####-##-##":"##/##/####",s);return{format:a=>{let i=x(a);if(!i)return"";let p="",o="",t="";if(e?(t=i.substring(0,4),o=i.substring(4,6),p=i.substring(6,8)):(p=i.substring(0,2),o=i.substring(2,4),t=i.substring(4,8)),p.length===2){let k=parseInt(p,10);k>31&&(p="31"),k===0&&(p="01")}if(o.length===2){let k=parseInt(o,10);k>12&&(o="12"),k===0&&(o="01")}let c=e?`${t}${o}${p}`:`${p}${o}${t}`;return m.format(c)},parse:a=>m.parse(a)}};var X=l({prefix:"R$ ",thousand:".",decimal:",",precision:2}),$= exports.maskUSD =l({prefix:"$",thousand:",",decimal:".",precision:2}),y= exports.maskEUR =l({suffix:" \u20AC",thousand:".",decimal:",",precision:2}),S= exports.maskGBP =l({prefix:"\xA3",thousand:",",decimal:".",precision:2}),B= exports.maskJPY =l({prefix:"\xA5",thousand:",",decimal:".",precision:0}),b= exports.maskPercent =l({suffix:"%",thousand:".",decimal:",",precision:1}),I= exports.maskDecimal =l({thousand:".",decimal:",",precision:2}),M= exports.maskInteger =l({thousand:".",decimal:",",precision:0}),N= exports.maskCPF =n("###.###.###-##"),U= exports.maskCNPJ =n("##.###.###/####-##"),R= exports.maskPhone =n(["(##) ####-####","(##) #####-####"]),Y= exports.maskLandline =n("(##) ####-####"),A= exports.maskCEP =n("#####-###"),V= exports.maskDate =H({format:"DD/MM/YYYY",guide:!0,customParse:s=>{let r=s.replace(/_/g,""),e=r.split("/");return e.length===3&&e[2].length===4?`${e[2]}-${e[1]}-${e[0]}`:r.replace(/\D/g,"")}}),w= exports.maskTime =n("##:##"),L= exports.maskCNH =n("###########"),Z= exports.maskRG =n("##.###.###-X"),E= exports.maskCPFCNPJ =n(["###.###.###-##","##.###.###/####-##"]),F= exports.maskPlate ={format(s){let r=String(_nullishCoalesce(s, () => (""))).replace(/[^a-zA-Z0-9]/g,"").toUpperCase().slice(0,7);if(r.length===0)return"";let e=r.slice(0,3),m=r.slice(3);return m.length===0?e:m.length>=2&&/[A-Z]/.test(m[1])?`${e}${m}`:`${e}-${m}`},parse(s){return String(_nullishCoalesce(s, () => (""))).replace(/[^a-zA-Z0-9]/g,"").toUpperCase().slice(0,7)}},J= exports.maskUSPhone =n("(###) ###-####"),O= exports.maskZipCode =n("#####-####"),z= exports.maskDateUS =n("##/##/####"),G= exports.maskSSN =n("###-##-####"),T= exports.maskCreditCard =D(),j= exports.maskCVV =n("####"),_= exports.maskDateISO =H({format:"YYYY-MM-DD",saveRaw:!0,guide:!0}),W= exports.maskMacAddress =n("HH:HH:HH:HH:HH:HH"),q= exports.maskColorHex =n("#HHHHHH"),K= exports.maskIPv4 =n("###.###.###.###"),Q= exports.maskIPv6 =n("HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH"),v= exports.maskIBAN =n("UU## XXXX XXXX XXXX XXXX XXXX XXXX XXXX XX",{allowChars:" "});var re={brl:X,usd:$,eur:y,gbp:S,jpy:B,percent:b,decimal:I,int:M,integer:M,cpf:N,cnpj:U,cpfCnpj:E,rg:Z,cep:A,cnh:L,plate:F,phone:R,landline:Y,date:V,time:w,usPhone:J,zipCode:O,dateUS:z,ssn:G,cc:T,cvv:j,dateISO:_,ip:K,ipv6:Q,mac:W,color:q,iban:v};exports.bitMasks = re; exports.createCreditCardMask = D; exports.createCurrencyMask = l; exports.createDateMask = H; exports.createPatternMask = n; exports.maskBRL = X; exports.maskCEP = A; exports.maskCNH = L; exports.maskCNPJ = U; exports.maskCPF = N; exports.maskCPFCNPJ = E; exports.maskCVV = j; exports.maskColorHex = q; exports.maskCreditCard = T; exports.maskDate = V; exports.maskDateISO = _; exports.maskDateUS = z; exports.maskDecimal = I; exports.maskEUR = y; exports.maskGBP = S; exports.maskIBAN = v; exports.maskIPv4 = K; exports.maskIPv6 = Q; exports.maskInteger = M; exports.maskJPY = B; exports.maskLandline = Y; exports.maskMacAddress = W; exports.maskPercent = b; exports.maskPhone = R; exports.maskPlate = F; exports.maskRG = Z; exports.maskSSN = G; exports.maskTime = w; exports.maskUSD = $; exports.maskUSPhone = J; exports.maskZipCode = O; exports.unmask = x; exports.unmaskCurrency = te;
|
|
2
2
|
//# sourceMappingURL=mask.cjs.map
|