@lehnihon/bit-form 2.2.2 → 2.2.4
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 +7 -6
- package/dist/angular/index.d.ts +7 -6
- package/dist/angular/index.js +1 -1
- package/dist/angular/index.js.map +1 -1
- package/dist/{types-DqeN9Kq_.d.ts → bus-BQI1FIOs.d.ts} +34 -35
- package/dist/{types-DqeN9Kq_.d.cts → bus-a_GA51Qw.d.cts} +34 -35
- package/dist/chunk-4XLU5ZCX.js +2 -0
- package/dist/chunk-4XLU5ZCX.js.map +1 -0
- package/dist/chunk-66DIO2SH.js +2 -0
- package/dist/chunk-66DIO2SH.js.map +1 -0
- package/dist/chunk-7LMNIQTT.js +2 -0
- package/dist/chunk-7LMNIQTT.js.map +1 -0
- package/dist/chunk-AE4G32HS.js +2 -0
- package/dist/chunk-AE4G32HS.js.map +1 -0
- package/dist/chunk-BMHK77NL.js +2 -0
- package/dist/chunk-BMHK77NL.js.map +1 -0
- package/dist/chunk-CFFLDMLG.cjs +2 -0
- package/dist/chunk-CFFLDMLG.cjs.map +1 -0
- package/dist/chunk-EI5L5L3R.cjs +2 -0
- package/dist/chunk-EI5L5L3R.cjs.map +1 -0
- package/dist/chunk-FQLJOSF7.js +1 -0
- package/dist/chunk-IV32WXCF.cjs +2 -0
- package/dist/chunk-IV32WXCF.cjs.map +1 -0
- package/dist/chunk-K5NZDYAT.js +2 -0
- package/dist/chunk-K5NZDYAT.js.map +1 -0
- package/dist/chunk-KYM7JG2G.cjs +2 -0
- package/dist/chunk-KYM7JG2G.cjs.map +1 -0
- package/dist/chunk-LOYB7TTM.cjs +2 -0
- package/dist/chunk-LOYB7TTM.cjs.map +1 -0
- package/dist/chunk-MBTLLIBM.js +2 -0
- package/dist/chunk-MBTLLIBM.js.map +1 -0
- package/dist/chunk-MFSDDSVG.cjs +1 -0
- package/dist/chunk-MFSDDSVG.cjs.map +1 -0
- package/dist/chunk-MQX4YS6D.cjs +2 -0
- package/dist/chunk-MQX4YS6D.cjs.map +1 -0
- package/dist/chunk-O5UPA33R.js +2 -0
- package/dist/chunk-O5UPA33R.js.map +1 -0
- package/dist/chunk-RFFMBY7M.cjs +2 -0
- package/dist/chunk-RFFMBY7M.cjs.map +1 -0
- package/dist/chunk-YEXRRTI3.cjs +2 -0
- package/dist/chunk-YEXRRTI3.cjs.map +1 -0
- package/dist/chunk-YGAD4ZZW.js +2 -0
- package/dist/chunk-YGAD4ZZW.js.map +1 -0
- package/dist/chunk-ZO3GXKF3.cjs +2 -0
- package/dist/chunk-ZO3GXKF3.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/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/field-binding-BXw0Ku2c.d.cts +12 -0
- package/dist/field-binding-BXw0Ku2c.d.ts +12 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +192 -82
- package/dist/index.d.ts +192 -82
- package/dist/index.js +1 -1
- package/dist/mask.cjs +2 -0
- package/dist/mask.cjs.map +1 -0
- package/dist/mask.d.cts +86 -0
- package/dist/mask.d.ts +86 -0
- package/dist/mask.js +2 -0
- package/dist/{public-types-CLIDR8aC.d.cts → public-types-D14VY_4o.d.cts} +5 -7
- package/dist/{public-types-Bl94ECPb.d.ts → public-types-D3WIiMGu.d.ts} +5 -7
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +8 -7
- package/dist/react/index.d.ts +8 -7
- 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 +6 -5
- package/dist/react-native/index.d.ts +6 -5
- package/dist/react-native/index.js +1 -1
- package/dist/resolvers/index.cjs +2 -0
- package/dist/resolvers/index.cjs.map +1 -0
- package/dist/resolvers/index.d.cts +9 -0
- package/dist/resolvers/index.d.ts +9 -0
- package/dist/resolvers/index.js +2 -0
- package/dist/resolvers/index.js.map +1 -0
- package/dist/resolvers/joi.cjs +1 -1
- package/dist/resolvers/joi.cjs.map +1 -1
- package/dist/resolvers/joi.d.cts +2 -2
- package/dist/resolvers/joi.d.ts +2 -2
- package/dist/resolvers/joi.js +1 -1
- package/dist/resolvers/joi.js.map +1 -1
- package/dist/resolvers/types.cjs +2 -1
- package/dist/resolvers/types.cjs.map +1 -1
- package/dist/resolvers/types.js +1 -0
- package/dist/resolvers/yup.cjs +1 -1
- package/dist/resolvers/yup.cjs.map +1 -1
- package/dist/resolvers/yup.d.cts +2 -2
- package/dist/resolvers/yup.d.ts +2 -2
- package/dist/resolvers/yup.js +1 -1
- package/dist/resolvers/yup.js.map +1 -1
- package/dist/resolvers/zod.cjs +1 -1
- package/dist/resolvers/zod.cjs.map +1 -1
- package/dist/resolvers/zod.d.cts +2 -2
- package/dist/resolvers/zod.d.ts +2 -2
- package/dist/resolvers/zod.js +1 -1
- package/dist/resolvers/zod.js.map +1 -1
- package/dist/types-D8DgIUhJ.d.cts +27 -0
- package/dist/types-D8DgIUhJ.d.ts +27 -0
- package/dist/{types-C2mpfhp1.d.cts → upload-EXnJLq8k.d.cts} +1 -1
- package/dist/{types-C2mpfhp1.d.ts → upload-EXnJLq8k.d.ts} +1 -1
- package/dist/{use-bit-persist-JtinX6Vy.d.ts → use-bit-persist-CNtQ3Gaq.d.ts} +6 -6
- package/dist/{use-bit-persist-BgFBg8lQ.d.cts → use-bit-persist-Dt4zIl2u.d.cts} +6 -6
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.d.cts +4 -4
- package/dist/vue/index.d.ts +4 -4
- package/dist/vue/index.js +1 -1
- package/dist/vue/index.js.map +1 -1
- package/package.json +10 -5
- package/dist/bus-B1my-s_o.d.ts +0 -16
- package/dist/bus-BI29cKpD.d.cts +0 -16
- package/dist/chunk-2UVV7SU4.js +0 -2
- package/dist/chunk-2UVV7SU4.js.map +0 -1
- package/dist/chunk-676WXU4S.cjs +0 -2
- package/dist/chunk-676WXU4S.cjs.map +0 -1
- package/dist/chunk-7MBRAKBL.js +0 -2
- package/dist/chunk-7MBRAKBL.js.map +0 -1
- package/dist/chunk-AD7T42HJ.js +0 -1
- package/dist/chunk-C4BYXZGB.cjs +0 -1
- package/dist/chunk-C4BYXZGB.cjs.map +0 -1
- package/dist/chunk-ER2DNS7T.cjs +0 -2
- package/dist/chunk-ER2DNS7T.cjs.map +0 -1
- package/dist/chunk-NWPA4F3B.cjs +0 -2
- package/dist/chunk-NWPA4F3B.cjs.map +0 -1
- package/dist/chunk-O5RRLZR7.js +0 -2
- package/dist/chunk-O5RRLZR7.js.map +0 -1
- package/dist/chunk-TRPMTJ35.js +0 -2
- package/dist/chunk-TRPMTJ35.js.map +0 -1
- package/dist/chunk-VSWCUQAF.cjs +0 -2
- package/dist/chunk-VSWCUQAF.cjs.map +0 -1
- package/dist/core/light.cjs +0 -2
- package/dist/core/light.cjs.map +0 -1
- package/dist/core/light.d.cts +0 -29
- package/dist/core/light.d.ts +0 -29
- package/dist/core/light.js +0 -2
- /package/dist/{chunk-AD7T42HJ.js.map → chunk-FQLJOSF7.js.map} +0 -0
- /package/dist/{core/light.js.map → mask.js.map} +0 -0
|
@@ -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 { BitStore } from \"../../core/store\";\nimport { BitFormDevToolsUI } from \"../ui\";\n\nexport function setupLocalDevTools(container: HTMLElement) {\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => (bitBus.stores[id] as BitStore<any>)?.undo(),\n onRedo: (id) => (bitBus.stores[id] as BitStore<any>)?.redo(),\n onReset: (id) => (bitBus.stores[id] as BitStore<any>)?.reset(),\n });\n\n const getFullSnapshot = () => {\n const states: Record<string, any> = {};\n\n for (const [id, instance] of Object.entries(bitBus.stores)) {\n const storeInstance = instance as 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"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tipo de entrada aceito pelos handlers de campo.
|
|
3
|
+
* Cobre eventos nativos (`e.target.value`), eventos sintéticos e valores diretos.
|
|
4
|
+
* Definido aqui para ser compartilhado entre todos os frameworks.
|
|
5
|
+
*/
|
|
6
|
+
type BitFieldInputEvent = {
|
|
7
|
+
target?: {
|
|
8
|
+
value?: string | number | null;
|
|
9
|
+
};
|
|
10
|
+
} | string | number | null | undefined;
|
|
11
|
+
|
|
12
|
+
export type { BitFieldInputEvent as B };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tipo de entrada aceito pelos handlers de campo.
|
|
3
|
+
* Cobre eventos nativos (`e.target.value`), eventos sintéticos e valores diretos.
|
|
4
|
+
* Definido aqui para ser compartilhado entre todos os frameworks.
|
|
5
|
+
*/
|
|
6
|
+
type BitFieldInputEvent = {
|
|
7
|
+
target?: {
|
|
8
|
+
value?: string | number | null;
|
|
9
|
+
};
|
|
10
|
+
} | string | number | null | undefined;
|
|
11
|
+
|
|
12
|
+
export type { BitFieldInputEvent as B };
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkLOYB7TTMcjs = require('./chunk-LOYB7TTM.cjs');require('./chunk-EI5L5L3R.cjs');exports.bitBus = _chunkLOYB7TTMcjs.j; exports.cleanPrefixedKeys = _chunkLOYB7TTMcjs.g; exports.createBitStore = _chunkLOYB7TTMcjs.l; exports.deepClone = _chunkLOYB7TTMcjs.a; exports.deepEqual = _chunkLOYB7TTMcjs.d; exports.deepMerge = _chunkLOYB7TTMcjs.b; exports.extractServerErrors = _chunkLOYB7TTMcjs.i; exports.getDeepValue = _chunkLOYB7TTMcjs.e; exports.isValidationErrorShape = _chunkLOYB7TTMcjs.h; exports.resolveBitStoreForHooks = _chunkLOYB7TTMcjs.k; exports.setDeepValue = _chunkLOYB7TTMcjs.f; exports.valueEqual = _chunkLOYB7TTMcjs.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,
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/index.cjs"],"names":[],"mappings":"AAAA,iIAAqH,gCAA6B,iiBAAkP","file":"/home/runner/work/bit-form/bit-form/dist/index.cjs"}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,90 +1,200 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export {
|
|
4
|
-
import {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
1
|
+
import { B as BitMask, a as BitMaskName } from './types-D8DgIUhJ.cjs';
|
|
2
|
+
import { e as BitState, o as BitTransformFn, p as BitFieldChangeEvent, q as BitBeforeSubmitEvent, r as BitAfterSubmitEvent, a as BitFieldDefinition, i as BitErrors, s as BitBeforeValidateEvent, t as BitAfterValidateEvent, B as BitConfig, u as BitComputedFn, f as BitPath, m as BitFieldState, g as BitPathValue, v as BitFieldChangeMeta, h as DeepPartial, j as BitPersistMetadata, k as BitArrayPath, l as BitArrayItem } from './bus-a_GA51Qw.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-a_GA51Qw.cjs';
|
|
4
|
+
import { B as BitFrameworkConfig, a as BitValidationOptions, b as BitSelector, c as BitSelectorSubscriptionOptions, d as BitHistoryMetadata, e as BitStoreApi, f as BitStoreHooksApi } from './public-types-D14VY_4o.cjs';
|
|
5
|
+
export { g as BitEqualityFn } from './public-types-D14VY_4o.cjs';
|
|
6
|
+
export { a as BitDeleteUploadFn, B as BitUploadFn, b as BitUploadResult } from './upload-EXnJLq8k.cjs';
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
interface BitLifecycleStorePort<T extends object> {
|
|
9
|
+
getState: () => BitState<T>;
|
|
10
|
+
internalUpdateState: (partial: Partial<BitState<T>>, changedPaths?: string[]) => void;
|
|
11
|
+
internalSaveSnapshot: () => void;
|
|
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>;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
interface BitValidationStorePort<T extends object> {
|
|
40
|
+
getState: () => BitState<T>;
|
|
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>;
|
|
51
|
+
}
|
|
14
52
|
|
|
15
|
-
/** BRL - Real Brasileiro (R$ 1.000,00) */
|
|
16
|
-
declare const maskBRL: BitMask;
|
|
17
|
-
/** USD - Dólar Americano ($1,000.00) */
|
|
18
|
-
declare const maskUSD: BitMask;
|
|
19
|
-
/** EUR - Euro Padrão (€ 1.000,00) - Sufixo comum na Europa */
|
|
20
|
-
declare const maskEUR: BitMask;
|
|
21
|
-
/** GBP - Libra Esterlina (£1,000.00) */
|
|
22
|
-
declare const maskGBP: BitMask;
|
|
23
|
-
/** JPY - Iene Japonês (¥1,000) - Geralmente sem decimais */
|
|
24
|
-
declare const maskJPY: BitMask;
|
|
25
|
-
/** Porcentagem PT-BR (10,5%) */
|
|
26
|
-
declare const maskPercent: BitMask;
|
|
27
|
-
/** Decimal Genérico PT-BR (1.000,00) - Sem símbolo */
|
|
28
|
-
declare const maskDecimal: BitMask;
|
|
29
|
-
/** Inteiro (1.000) - Apenas separador de milhar */
|
|
30
|
-
declare const maskInteger: BitMask;
|
|
31
|
-
/** CPF (000.000.000-00) */
|
|
32
|
-
declare const maskCPF: BitMask;
|
|
33
|
-
/** CNPJ (00.000.000/0000-00) */
|
|
34
|
-
declare const maskCNPJ: BitMask;
|
|
35
|
-
declare const maskPhone: BitMask;
|
|
36
|
-
/** Telefone Fixo BR (11) 0000-0000 */
|
|
37
|
-
declare const maskLandline: BitMask;
|
|
38
|
-
/** CEP (00000-000) */
|
|
39
|
-
declare const maskCEP: BitMask;
|
|
40
|
-
/** Data PT/BR com correção automática de dia/mês */
|
|
41
|
-
declare const maskDate: BitMask;
|
|
42
|
-
/** Hora Curta (HH:MM) */
|
|
43
|
-
declare const maskTime: BitMask;
|
|
44
|
-
/** CNH (Carteira de Motorista - 11 dígitos) */
|
|
45
|
-
declare const maskCNH: BitMask;
|
|
46
|
-
/** RG (00.000.000-X) - Suporta o 'X' como dígito verificador */
|
|
47
|
-
declare const maskRG: BitMask;
|
|
48
53
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
54
|
+
* BitStore
|
|
55
|
+
*
|
|
56
|
+
* The core orchestrator of form state management.
|
|
57
|
+
*
|
|
58
|
+
* This store coordinates multiple managers to provide comprehensive form handling:
|
|
59
|
+
* - Core managers handle essential state and validation
|
|
60
|
+
* - Feature managers provide optional enhancements (history, arrays, scopes)
|
|
61
|
+
* - Query/mutation managers organize domain-specific operations
|
|
52
62
|
*/
|
|
53
|
-
declare
|
|
63
|
+
declare class BitStore<T extends object = any> implements BitValidationStorePort<T>, BitLifecycleStorePort<T> {
|
|
64
|
+
private state;
|
|
65
|
+
private readonly subscriptions;
|
|
66
|
+
private readonly effects;
|
|
67
|
+
private readonly capabilities;
|
|
68
|
+
config: BitFrameworkConfig<T>;
|
|
69
|
+
readonly storeId: string;
|
|
70
|
+
private readonly dependencyManager;
|
|
71
|
+
private readonly computedManager;
|
|
72
|
+
private readonly dirtyManager;
|
|
73
|
+
private scopeFieldsIndex;
|
|
74
|
+
private computedEntriesCache;
|
|
75
|
+
private transformEntriesCache;
|
|
76
|
+
private invalidateFieldIndexes;
|
|
77
|
+
private getCapability;
|
|
78
|
+
private get validation();
|
|
79
|
+
private get lifecycle();
|
|
80
|
+
private get history();
|
|
81
|
+
private get arrays();
|
|
82
|
+
private get scope();
|
|
83
|
+
private get query();
|
|
84
|
+
private get error();
|
|
85
|
+
constructor(config?: BitConfig<T>);
|
|
86
|
+
getConfig(): BitFrameworkConfig<T>;
|
|
87
|
+
getFieldConfig(path: string): BitFieldDefinition<T> | undefined;
|
|
88
|
+
getScopeFields(scopeName: string): string[];
|
|
89
|
+
getComputedEntries(): [string, BitComputedFn<T>][];
|
|
90
|
+
getTransformEntries(): [string, BitTransformFn<T>][];
|
|
91
|
+
resolveMask(path: string): BitMask | undefined;
|
|
92
|
+
getState(): BitState<T>;
|
|
93
|
+
getFieldState<P extends BitPath<T>>(path: P): BitFieldState<T, BitPathValue<T, P>>;
|
|
94
|
+
get isValid(): boolean;
|
|
95
|
+
get isSubmitting(): boolean;
|
|
96
|
+
get isDirty(): boolean;
|
|
97
|
+
registerField(path: string, config: BitFieldDefinition<T>): void;
|
|
98
|
+
unregisterField(path: string): void;
|
|
99
|
+
unregisterPrefix(prefix: string): void;
|
|
100
|
+
isHidden<P extends BitPath<T>>(path: P): boolean;
|
|
101
|
+
isRequired<P extends BitPath<T>>(path: P): boolean;
|
|
102
|
+
isFieldDirty(path: string): boolean;
|
|
103
|
+
isFieldValidating(path: string): boolean;
|
|
104
|
+
subscribe(listener: () => void): () => void;
|
|
105
|
+
subscribeSelector<TSlice>(selector: BitSelector<T, TSlice>, listener: (slice: TSlice) => void, options?: BitSelectorSubscriptionOptions<TSlice>): () => void;
|
|
106
|
+
subscribePath<P extends BitPath<T>>(path: P, listener: (value: BitPathValue<T, P>) => void, options?: BitSelectorSubscriptionOptions<BitPathValue<T, P>>): () => void;
|
|
107
|
+
watch<P extends BitPath<T>>(path: P, callback: (value: BitPathValue<T, P>) => void): () => void;
|
|
108
|
+
setField<P extends BitPath<T>>(path: P, value: BitPathValue<T, P>): void;
|
|
109
|
+
setFieldWithMeta(path: string, value: any, meta?: BitFieldChangeMeta): void;
|
|
110
|
+
blurField<P extends BitPath<T>>(path: P): void;
|
|
111
|
+
markFieldsTouched(paths: string[]): void;
|
|
112
|
+
replaceValues(newValues: T): void;
|
|
113
|
+
hydrate(values: DeepPartial<T>): void;
|
|
114
|
+
rebase(newValues: T): void;
|
|
115
|
+
setError(path: string, message: string | undefined): void;
|
|
116
|
+
setErrors(errors: BitErrors<T>): void;
|
|
117
|
+
setServerErrors(serverErrors: Record<string, string[] | string>): void;
|
|
118
|
+
reset(): void;
|
|
119
|
+
submit(onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>): Promise<void>;
|
|
120
|
+
registerMask(name: BitMaskName, mask: BitMask): void;
|
|
121
|
+
getDirtyValues(): Partial<T>;
|
|
122
|
+
getPersistMetadata(): BitPersistMetadata;
|
|
123
|
+
restorePersisted(): Promise<boolean>;
|
|
124
|
+
forceSave(): Promise<void>;
|
|
125
|
+
clearPersisted(): Promise<void>;
|
|
126
|
+
pushItem<P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>): void;
|
|
127
|
+
prependItem<P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>): void;
|
|
128
|
+
insertItem<P extends BitArrayPath<T>>(path: P, index: number, value: BitArrayItem<BitPathValue<T, P>>): void;
|
|
129
|
+
removeItem<P extends BitArrayPath<T>>(path: P, index: number): void;
|
|
130
|
+
swapItems<P extends BitArrayPath<T>>(path: P, indexA: number, indexB: number): void;
|
|
131
|
+
moveItem<P extends BitArrayPath<T>>(path: P, from: number, to: number): void;
|
|
132
|
+
get canUndo(): boolean;
|
|
133
|
+
get canRedo(): boolean;
|
|
134
|
+
undo(): void;
|
|
135
|
+
redo(): void;
|
|
136
|
+
getHistoryMetadata(): BitHistoryMetadata;
|
|
137
|
+
validate(options?: BitValidationOptions): Promise<boolean>;
|
|
138
|
+
emitBeforeValidate(event: BitBeforeValidateEvent<T>): Promise<void>;
|
|
139
|
+
emitAfterValidate(event: BitAfterValidateEvent<T>): Promise<void>;
|
|
140
|
+
emitBeforeSubmit(event: BitBeforeSubmitEvent<T>): Promise<void>;
|
|
141
|
+
emitAfterSubmit(event: BitAfterSubmitEvent<T>): Promise<void>;
|
|
142
|
+
emitFieldChange(event: BitFieldChangeEvent<T>): void;
|
|
143
|
+
emitOperationalError(event: {
|
|
144
|
+
source: "submit";
|
|
145
|
+
error: unknown;
|
|
146
|
+
payload?: unknown;
|
|
147
|
+
}): Promise<void>;
|
|
148
|
+
hasValidationsInProgress(scopeFields?: string[]): boolean;
|
|
149
|
+
triggerValidation(scopeFields?: string[]): void;
|
|
150
|
+
getStepStatus(scopeName: string): {
|
|
151
|
+
hasErrors: boolean;
|
|
152
|
+
isDirty: boolean;
|
|
153
|
+
errors: Record<string, string>;
|
|
154
|
+
};
|
|
155
|
+
getStepErrors(scopeName: string): Record<string, string>;
|
|
156
|
+
updateDependencies(changedPath: string, newValues: T): string[];
|
|
157
|
+
isFieldHidden(path: string): boolean;
|
|
158
|
+
evaluateAllDependencies(values: T): void;
|
|
159
|
+
getHiddenFields(): string[];
|
|
160
|
+
getRequiredErrors(values: T): BitErrors<T>;
|
|
161
|
+
clearFieldValidation(path: string): void;
|
|
162
|
+
handleFieldAsyncValidation(path: string, value: any): void;
|
|
163
|
+
cancelAllValidations(): void;
|
|
164
|
+
validateNow(options?: BitValidationOptions): Promise<boolean>;
|
|
165
|
+
updateDirtyForPath(path: string, nextValues: T, baselineValues: T): boolean;
|
|
166
|
+
rebuildDirtyState(nextValues: T, baselineValues: T): boolean;
|
|
167
|
+
clearDirtyState(): void;
|
|
168
|
+
buildDirtyValues(values: T): Partial<T>;
|
|
169
|
+
resetHistory(initialValues: T): void;
|
|
170
|
+
internalUpdateState(partialState: Partial<BitState<T>>, changedPaths?: string[]): void;
|
|
171
|
+
internalSaveSnapshot(): void;
|
|
172
|
+
private applyPersistedValues;
|
|
173
|
+
cleanup(): void;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
declare function resolveBitStoreForHooks<T extends object>(store: BitStoreApi<T> | BitStore<T>): BitStoreHooksApi<T>;
|
|
177
|
+
declare function createBitStore<T extends object = any>(config?: BitConfig<T>): BitStoreApi<T>;
|
|
178
|
+
|
|
179
|
+
declare function deepClone<T>(obj: T): T;
|
|
180
|
+
declare function deepMerge<T>(target: T, source: any): T;
|
|
54
181
|
/**
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
* - Mercosul → ABC1D23 (posição 5 é letra)
|
|
182
|
+
* Fast equality for single values. Uses === for primitives, deepEqual for objects/arrays.
|
|
183
|
+
* Prefer over deepEqual when comparing a single field value (e.g. isFieldDirty, getStepStatus).
|
|
58
184
|
*/
|
|
59
|
-
declare
|
|
60
|
-
|
|
61
|
-
declare
|
|
62
|
-
|
|
63
|
-
declare
|
|
64
|
-
/**
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
declare const maskSSN: BitMask;
|
|
68
|
-
/** Cartão de Crédito Inteligente (Detecta Visa/Master, Amex e Diners) */
|
|
69
|
-
declare const maskCreditCard: BitMask;
|
|
70
|
-
/** CVV (3 ou 4 dígitos) */
|
|
71
|
-
declare const maskCVV: BitMask;
|
|
72
|
-
/** Data ISO (Ideal para base de dados: YYYY-MM-DD) */
|
|
73
|
-
declare const maskDateISO: BitMask;
|
|
74
|
-
/** Endereço MAC (HH:HH:HH:HH:HH:HH) - Usa o token Hexadecimal */
|
|
75
|
-
declare const maskMacAddress: BitMask;
|
|
76
|
-
/** Cor Hexadecimal (#HHHHHH) */
|
|
77
|
-
declare const maskColorHex: BitMask;
|
|
78
|
-
/** IPv4 (000.000.000.000) - Formato de blocos fixos */
|
|
79
|
-
declare const maskIPv4: BitMask;
|
|
80
|
-
/** IPv6 (HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH) */
|
|
81
|
-
declare const maskIPv6: BitMask;
|
|
82
|
-
/** * IBAN Internacional
|
|
83
|
-
* Força as duas primeiras letras para maiúsculas e agrupa de 4 em 4.
|
|
84
|
-
* O tamanho máximo cobre os 34 caracteres do padrão IBAN.
|
|
185
|
+
declare function valueEqual(a: any, b: any): boolean;
|
|
186
|
+
declare function deepEqual(a: any, b: any): boolean;
|
|
187
|
+
declare function getDeepValue(obj: any, path: string): any;
|
|
188
|
+
declare function setDeepValue(obj: any, path: string, value: any): any;
|
|
189
|
+
declare function cleanPrefixedKeys(obj: Record<string, any>, prefix: string): Record<string, any>;
|
|
190
|
+
/**
|
|
191
|
+
* Checks if a value looks like a server validation error response.
|
|
192
|
+
* Handles shapes like { email: "Taken" }, { errors: { email: ["Taken"] } }, etc.
|
|
85
193
|
*/
|
|
86
|
-
declare
|
|
87
|
-
|
|
88
|
-
|
|
194
|
+
declare function isValidationErrorShape(x: unknown): x is Record<string, string | string[]>;
|
|
195
|
+
/**
|
|
196
|
+
* Extracts server errors in the format expected by setServerErrors.
|
|
197
|
+
*/
|
|
198
|
+
declare function extractServerErrors(x: unknown): Record<string, string | string[]>;
|
|
89
199
|
|
|
90
|
-
export {
|
|
200
|
+
export { BitAfterSubmitEvent, BitAfterValidateEvent, BitArrayItem, BitArrayPath, BitBeforeSubmitEvent, BitBeforeValidateEvent, BitComputedFn, BitConfig, BitErrors, BitFieldChangeEvent, BitFieldChangeMeta, BitFieldDefinition, BitFieldState, BitFrameworkConfig, BitHistoryMetadata, BitPath, BitPathValue, BitPersistMetadata, BitSelector, BitSelectorSubscriptionOptions, BitState, BitStoreApi, BitStoreHooksApi, BitTransformFn, BitValidationOptions, DeepPartial, cleanPrefixedKeys, createBitStore, deepClone, deepEqual, deepMerge, extractServerErrors, getDeepValue, isValidationErrorShape, resolveBitStoreForHooks, setDeepValue, valueEqual };
|