persian-data-grid 0.5.0 → 0.7.0
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/OFL.txt +93 -0
- package/README.md +179 -22
- package/dist/ERPTableGroupRow-E5Q6FYDS.js +125 -0
- package/dist/ERPTableGroupRow-E5Q6FYDS.js.map +1 -0
- package/dist/ERPTableGroupRow-F2IPDYL5.cjs +131 -0
- package/dist/ERPTableGroupRow-F2IPDYL5.cjs.map +1 -0
- package/dist/GridPlugin-Bewn0X51.d.ts +57 -0
- package/dist/GridPlugin-DewWufGZ.d.cts +57 -0
- package/dist/GridPresenceService-GEH6535Q.js +3 -0
- package/dist/GridPresenceService-GEH6535Q.js.map +1 -0
- package/dist/GridPresenceService-RDN5FXHQ.cjs +12 -0
- package/dist/GridPresenceService-RDN5FXHQ.cjs.map +1 -0
- package/dist/GridSession-CeIfVFck.d.ts +2625 -0
- package/dist/GridSession-CmQn2RnL.d.cts +2625 -0
- package/dist/GridSyncService-3JQLEY65.cjs +12 -0
- package/dist/GridSyncService-3JQLEY65.cjs.map +1 -0
- package/dist/GridSyncService-GECXGEKL.js +3 -0
- package/dist/GridSyncService-GECXGEKL.js.map +1 -0
- package/dist/PdfRenderer-B9FJaCo_.d.cts +22 -0
- package/dist/PdfRenderer-bN7ca_Aj.d.ts +22 -0
- package/dist/RemoteApi-CCQxiSf1.d.cts +28 -0
- package/dist/RemoteApi-CCQxiSf1.d.ts +28 -0
- package/dist/SelectImpl-NM4O4IGW.js +447 -0
- package/dist/SelectImpl-NM4O4IGW.js.map +1 -0
- package/dist/SelectImpl-W2EI4T7O.cjs +453 -0
- package/dist/SelectImpl-W2EI4T7O.cjs.map +1 -0
- package/dist/UITableController-C71LXBiX.d.ts +678 -0
- package/dist/UITableController-CIwnHIw8.d.cts +678 -0
- package/dist/VazirmatnPdfRenderer-CpCqA-Wh.d.cts +96 -0
- package/dist/VazirmatnPdfRenderer-D46smncn.d.ts +96 -0
- package/dist/adapters/arian-erp.cjs +89 -0
- package/dist/adapters/arian-erp.cjs.map +1 -0
- package/dist/adapters/arian-erp.d.cts +62 -0
- package/dist/adapters/arian-erp.d.ts +62 -0
- package/dist/adapters/arian-erp.js +79 -0
- package/dist/adapters/arian-erp.js.map +1 -0
- package/dist/appendAtEnd-RHIQRG2W.cjs +35 -0
- package/dist/appendAtEnd-RHIQRG2W.cjs.map +1 -0
- package/dist/appendAtEnd-TJEABLGD.js +33 -0
- package/dist/appendAtEnd-TJEABLGD.js.map +1 -0
- package/dist/applyImportedRows-C2fWYoPy.d.cts +135 -0
- package/dist/applyImportedRows-Cqh_N_0k.d.ts +135 -0
- package/dist/applyRowVisibilityHandler-Q64ZFC7A.cjs +86 -0
- package/dist/applyRowVisibilityHandler-Q64ZFC7A.cjs.map +1 -0
- package/dist/applyRowVisibilityHandler-ZLZXQEGY.js +84 -0
- package/dist/applyRowVisibilityHandler-ZLZXQEGY.js.map +1 -0
- package/dist/broadcastChannelTransport-FHUMV76O.cjs +12 -0
- package/dist/broadcastChannelTransport-FHUMV76O.cjs.map +1 -0
- package/dist/broadcastChannelTransport-MIH53VNZ.js +3 -0
- package/dist/broadcastChannelTransport-MIH53VNZ.js.map +1 -0
- package/dist/callbackRemoteApi-BYLjmSI6.d.ts +51 -0
- package/dist/callbackRemoteApi-Cv26MmSD.d.cts +51 -0
- package/dist/cellRenderContext-BaNh4qn_.d.ts +42 -0
- package/dist/cellRenderContext-DvngkptV.d.cts +42 -0
- package/dist/chunk-27ALJSZP.js +12187 -0
- package/dist/chunk-27ALJSZP.js.map +1 -0
- package/dist/chunk-3HP3HQCW.cjs +688 -0
- package/dist/chunk-3HP3HQCW.cjs.map +1 -0
- package/dist/chunk-3Y3KKGEC.js +3 -0
- package/dist/chunk-3Y3KKGEC.js.map +1 -0
- package/dist/chunk-52LFOPXD.cjs +588 -0
- package/dist/chunk-52LFOPXD.cjs.map +1 -0
- package/dist/chunk-5ALMNLUR.cjs +1408 -0
- package/dist/chunk-5ALMNLUR.cjs.map +1 -0
- package/dist/chunk-5HKVMPBD.js +937 -0
- package/dist/chunk-5HKVMPBD.js.map +1 -0
- package/dist/chunk-72IVAOTK.cjs +38 -0
- package/dist/chunk-72IVAOTK.cjs.map +1 -0
- package/dist/chunk-77UXAJII.js +112 -0
- package/dist/chunk-77UXAJII.js.map +1 -0
- package/dist/chunk-7GWV5HGO.js +36 -0
- package/dist/chunk-7GWV5HGO.js.map +1 -0
- package/dist/chunk-7T6AWRPU.js +581 -0
- package/dist/chunk-7T6AWRPU.js.map +1 -0
- package/dist/chunk-AU3RDJYQ.js +243 -0
- package/dist/chunk-AU3RDJYQ.js.map +1 -0
- package/dist/chunk-CILNIWYW.cjs +100 -0
- package/dist/chunk-CILNIWYW.cjs.map +1 -0
- package/dist/chunk-CMQ4VLCW.cjs +840 -0
- package/dist/chunk-CMQ4VLCW.cjs.map +1 -0
- package/dist/chunk-DFFP7SJ6.cjs +257 -0
- package/dist/chunk-DFFP7SJ6.cjs.map +1 -0
- package/dist/chunk-E2J533UH.cjs +53 -0
- package/dist/chunk-E2J533UH.cjs.map +1 -0
- package/dist/chunk-EBV6HGZB.cjs +33 -0
- package/dist/chunk-EBV6HGZB.cjs.map +1 -0
- package/dist/chunk-F4PYOYHR.js +112 -0
- package/dist/chunk-F4PYOYHR.js.map +1 -0
- package/dist/chunk-F6EMC75A.cjs +34 -0
- package/dist/chunk-F6EMC75A.cjs.map +1 -0
- package/dist/chunk-GKE33FOJ.js +32 -0
- package/dist/chunk-GKE33FOJ.js.map +1 -0
- package/dist/chunk-GQEDLUMB.js +168 -0
- package/dist/chunk-GQEDLUMB.js.map +1 -0
- package/dist/chunk-HLOHWFOA.js +645 -0
- package/dist/chunk-HLOHWFOA.js.map +1 -0
- package/dist/chunk-IMPCRWYP.cjs +251 -0
- package/dist/chunk-IMPCRWYP.cjs.map +1 -0
- package/dist/chunk-IPPIXOVQ.js +317 -0
- package/dist/chunk-IPPIXOVQ.js.map +1 -0
- package/dist/chunk-J4XJ4UBC.js +1404 -0
- package/dist/chunk-J4XJ4UBC.js.map +1 -0
- package/dist/chunk-J7CPPFXT.cjs +89 -0
- package/dist/chunk-J7CPPFXT.cjs.map +1 -0
- package/dist/chunk-JOICD47Q.cjs +41 -0
- package/dist/chunk-JOICD47Q.cjs.map +1 -0
- package/dist/chunk-KCNTKYUY.js +206 -0
- package/dist/chunk-KCNTKYUY.js.map +1 -0
- package/dist/chunk-KHMG6EI2.js +13 -0
- package/dist/chunk-KHMG6EI2.js.map +1 -0
- package/dist/chunk-KMRURD5J.cjs +15 -0
- package/dist/chunk-KMRURD5J.cjs.map +1 -0
- package/dist/chunk-KRJG3KMP.cjs +174 -0
- package/dist/chunk-KRJG3KMP.cjs.map +1 -0
- package/dist/chunk-LY27YAXE.cjs +208 -0
- package/dist/chunk-LY27YAXE.cjs.map +1 -0
- package/dist/chunk-MT3KLB2Q.cjs +944 -0
- package/dist/chunk-MT3KLB2Q.cjs.map +1 -0
- package/dist/chunk-MUQQKPWR.js +84 -0
- package/dist/chunk-MUQQKPWR.js.map +1 -0
- package/dist/chunk-N7SJTINL.cjs +4 -0
- package/dist/chunk-N7SJTINL.cjs.map +1 -0
- package/dist/chunk-NB5GCGHL.js +833 -0
- package/dist/chunk-NB5GCGHL.js.map +1 -0
- package/dist/chunk-NQUVAJQA.js +298 -0
- package/dist/chunk-NQUVAJQA.js.map +1 -0
- package/dist/chunk-NTV2UUAJ.cjs +149 -0
- package/dist/chunk-NTV2UUAJ.cjs.map +1 -0
- package/dist/chunk-PJQWHF6T.js +31 -0
- package/dist/chunk-PJQWHF6T.js.map +1 -0
- package/dist/chunk-PQY54EL5.js +248 -0
- package/dist/chunk-PQY54EL5.js.map +1 -0
- package/dist/chunk-Q7TBBUTX.cjs +110 -0
- package/dist/chunk-Q7TBBUTX.cjs.map +1 -0
- package/dist/chunk-QZN7R2WP.cjs +114 -0
- package/dist/chunk-QZN7R2WP.cjs.map +1 -0
- package/dist/chunk-RKVSJU46.js +35 -0
- package/dist/chunk-RKVSJU46.js.map +1 -0
- package/dist/chunk-SVO62ZV2.js +50 -0
- package/dist/chunk-SVO62ZV2.js.map +1 -0
- package/dist/chunk-SX4VQXAA.cjs +114 -0
- package/dist/chunk-SX4VQXAA.cjs.map +1 -0
- package/dist/chunk-SZ7BLAY3.js +92 -0
- package/dist/chunk-SZ7BLAY3.js.map +1 -0
- package/dist/chunk-TN4MG6FY.js +112 -0
- package/dist/chunk-TN4MG6FY.js.map +1 -0
- package/dist/chunk-UC7PHDM6.cjs +331 -0
- package/dist/chunk-UC7PHDM6.cjs.map +1 -0
- package/dist/chunk-UXVLYUUW.js +108 -0
- package/dist/chunk-UXVLYUUW.js.map +1 -0
- package/dist/chunk-VBAZ77Q4.js +932 -0
- package/dist/chunk-VBAZ77Q4.js.map +1 -0
- package/dist/chunk-VSAFQTW5.cjs +319 -0
- package/dist/chunk-VSAFQTW5.cjs.map +1 -0
- package/dist/chunk-VYJQ2HTA.cjs +936 -0
- package/dist/chunk-VYJQ2HTA.cjs.map +1 -0
- package/dist/chunk-W5256BJ4.js +56 -0
- package/dist/chunk-W5256BJ4.js.map +1 -0
- package/dist/chunk-WTHTVKVI.cjs +12299 -0
- package/dist/chunk-WTHTVKVI.cjs.map +1 -0
- package/dist/chunk-WUMOSOEK.cjs +62 -0
- package/dist/chunk-WUMOSOEK.cjs.map +1 -0
- package/dist/chunk-XLRE2J25.js +140 -0
- package/dist/chunk-XLRE2J25.js.map +1 -0
- package/dist/chunk-Z4QPZ3Z3.cjs +114 -0
- package/dist/chunk-Z4QPZ3Z3.cjs.map +1 -0
- package/dist/createEngineGridQuery-BBkud5oE.d.ts +939 -0
- package/dist/createEngineGridQuery-D-fgO_jg.d.cts +939 -0
- package/dist/date-picker-jalali.cjs +263 -0
- package/dist/date-picker-jalali.cjs.map +1 -0
- package/dist/date-picker-jalali.d.cts +62 -0
- package/dist/date-picker-jalali.d.ts +62 -0
- package/dist/date-picker-jalali.js +256 -0
- package/dist/date-picker-jalali.js.map +1 -0
- package/dist/finance.cjs +205 -0
- package/dist/finance.cjs.map +1 -0
- package/dist/finance.d.cts +90 -0
- package/dist/finance.d.ts +90 -0
- package/dist/finance.js +157 -0
- package/dist/finance.js.map +1 -0
- package/dist/foldedColumn-IHDT4ARZ.cjs +66 -0
- package/dist/foldedColumn-IHDT4ARZ.cjs.map +1 -0
- package/dist/foldedColumn-TFURUKFG.js +64 -0
- package/dist/foldedColumn-TFURUKFG.js.map +1 -0
- package/dist/headless.cjs +729 -0
- package/dist/headless.cjs.map +1 -0
- package/dist/headless.d.cts +508 -0
- package/dist/headless.d.ts +508 -0
- package/dist/headless.js +226 -0
- package/dist/headless.js.map +1 -0
- package/dist/index-DN8M8Jkq.d.cts +14 -0
- package/dist/index-DmzL-F_o.d.ts +14 -0
- package/dist/index.cjs +8060 -11409
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +457 -2305
- package/dist/index.d.ts +457 -2305
- package/dist/index.js +7302 -11084
- package/dist/index.js.map +1 -1
- package/dist/locales/ar.cjs +12 -0
- package/dist/locales/ar.cjs.map +1 -0
- package/dist/locales/ar.d.cts +6 -0
- package/dist/locales/ar.d.ts +6 -0
- package/dist/locales/ar.js +3 -0
- package/dist/locales/ar.js.map +1 -0
- package/dist/locales/en.cjs +12 -0
- package/dist/locales/en.cjs.map +1 -0
- package/dist/locales/en.d.cts +6 -0
- package/dist/locales/en.d.ts +6 -0
- package/dist/locales/en.js +3 -0
- package/dist/locales/en.js.map +1 -0
- package/dist/locales/fa.cjs +12 -0
- package/dist/locales/fa.cjs.map +1 -0
- package/dist/locales/fa.d.cts +6 -0
- package/dist/locales/fa.d.ts +6 -0
- package/dist/locales/fa.js +3 -0
- package/dist/locales/fa.js.map +1 -0
- package/dist/locales/index.cjs +51 -0
- package/dist/locales/index.cjs.map +1 -0
- package/dist/locales/index.d.cts +5 -0
- package/dist/locales/index.d.ts +5 -0
- package/dist/locales/index.js +6 -0
- package/dist/locales/index.js.map +1 -0
- package/dist/memoryRecords-AWDKUJ2F.cjs +50 -0
- package/dist/memoryRecords-AWDKUJ2F.cjs.map +1 -0
- package/dist/memoryRecords-OJTGXLRH.js +47 -0
- package/dist/memoryRecords-OJTGXLRH.js.map +1 -0
- package/dist/pagedFooterTotals-DXCGDO6F.cjs +27 -0
- package/dist/pagedFooterTotals-DXCGDO6F.cjs.map +1 -0
- package/dist/pagedFooterTotals-ORWKUNE7.js +25 -0
- package/dist/pagedFooterTotals-ORWKUNE7.js.map +1 -0
- package/dist/pagedKit-MFGAJFSK.cjs +134 -0
- package/dist/pagedKit-MFGAJFSK.cjs.map +1 -0
- package/dist/pagedKit-WYWY4LRV.js +127 -0
- package/dist/pagedKit-WYWY4LRV.js.map +1 -0
- package/dist/pagedSearch-HCPJW7VM.js +38 -0
- package/dist/pagedSearch-HCPJW7VM.js.map +1 -0
- package/dist/pagedSearch-U3WCG4GN.cjs +42 -0
- package/dist/pagedSearch-U3WCG4GN.cjs.map +1 -0
- package/dist/plugins/csv.cjs +124 -0
- package/dist/plugins/csv.cjs.map +1 -0
- package/dist/plugins/csv.d.cts +44 -0
- package/dist/plugins/csv.d.ts +44 -0
- package/dist/plugins/csv.js +120 -0
- package/dist/plugins/csv.js.map +1 -0
- package/dist/plugins/excel.cjs +52 -0
- package/dist/plugins/excel.cjs.map +1 -0
- package/dist/plugins/excel.d.cts +14 -0
- package/dist/plugins/excel.d.ts +14 -0
- package/dist/plugins/excel.js +7 -0
- package/dist/plugins/excel.js.map +1 -0
- package/dist/plugins/pdf/fonts/vazirmatn.cjs +50 -0
- package/dist/plugins/pdf/fonts/vazirmatn.cjs.map +1 -0
- package/dist/plugins/pdf/fonts/vazirmatn.d.cts +24 -0
- package/dist/plugins/pdf/fonts/vazirmatn.d.ts +24 -0
- package/dist/plugins/pdf/fonts/vazirmatn.js +39 -0
- package/dist/plugins/pdf/fonts/vazirmatn.js.map +1 -0
- package/dist/plugins/pdf.cjs +24 -0
- package/dist/plugins/pdf.cjs.map +1 -0
- package/dist/plugins/pdf.d.cts +21 -0
- package/dist/plugins/pdf.d.ts +21 -0
- package/dist/plugins/pdf.js +7 -0
- package/dist/plugins/pdf.js.map +1 -0
- package/dist/presence.cjs +56 -0
- package/dist/presence.cjs.map +1 -0
- package/dist/presence.d.cts +17 -0
- package/dist/presence.d.ts +17 -0
- package/dist/presence.js +54 -0
- package/dist/presence.js.map +1 -0
- package/dist/rebuildRowVisibility-66EAZ356.cjs +21 -0
- package/dist/rebuildRowVisibility-66EAZ356.cjs.map +1 -0
- package/dist/rebuildRowVisibility-6TYM5BP2.js +19 -0
- package/dist/rebuildRowVisibility-6TYM5BP2.js.map +1 -0
- package/dist/styles.css +1440 -0
- package/dist/sync.cjs +148 -0
- package/dist/sync.cjs.map +1 -0
- package/dist/sync.d.cts +17 -0
- package/dist/sync.d.ts +17 -0
- package/dist/sync.js +146 -0
- package/dist/sync.js.map +1 -0
- package/dist/types-D__47BKv.d.cts +23 -0
- package/dist/types-D__47BKv.d.ts +23 -0
- package/package.json +185 -29
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../infrastructure/sync/InMemorySyncHub.ts","../infrastructure/presence/InMemoryPresenceHub.ts","../infrastructure/document/documentGridMapping.ts"],"names":[],"mappings":"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","file":"headless.cjs","sourcesContent":["import type { GridEvent } from '../../domain/types/GridEvent';\r\nimport type { SyncTransport } from '../../application/ports/SyncPort';\r\n\r\ntype ClientInbox = {\r\n events: GridEvent[];\r\n delivered: Set<string>;\r\n};\r\n\r\n/**\r\n * Shared in-memory sync hub for tests / demos (PR-138).\r\n * Each client gets a transport bound to a clientId.\r\n */\r\nexport class InMemorySyncHub {\r\n private log: GridEvent[] = [];\r\n private readonly clients = new Map<string, ClientInbox>();\r\n\r\n transportFor(clientId: string): SyncTransport {\r\n if (!this.clients.has(clientId)) {\r\n this.clients.set(clientId, { events: [], delivered: new Set() });\r\n }\r\n return {\r\n push: async (events) => this.push(clientId, events),\r\n pull: async (afterCursor) => this.pull(clientId, afterCursor),\r\n };\r\n }\r\n\r\n private async push(\r\n clientId: string,\r\n events: readonly GridEvent[],\r\n ): Promise<{ acceptedIds: readonly string[] }> {\r\n const acceptedIds: string[] = [];\r\n for (const event of events) {\r\n if (this.log.some((e) => e.eventId === event.eventId)) {\r\n acceptedIds.push(event.eventId);\r\n continue;\r\n }\r\n this.log.push(event);\r\n acceptedIds.push(event.eventId);\r\n for (const [id, inbox] of this.clients) {\r\n if (id === clientId) continue;\r\n inbox.events.push(event);\r\n }\r\n }\r\n return { acceptedIds };\r\n }\r\n\r\n private async pull(\r\n clientId: string,\r\n afterCursor: number,\r\n ): Promise<{ events: readonly GridEvent[]; cursor: number }> {\r\n void afterCursor;\r\n const inbox = this.clients.get(clientId);\r\n if (!inbox) {\r\n return { events: [], cursor: this.log.length };\r\n }\r\n const fresh = inbox.events.filter((e) => !inbox.delivered.has(e.eventId));\r\n for (const e of fresh) inbox.delivered.add(e.eventId);\r\n return { events: fresh, cursor: this.log.length };\r\n }\r\n\r\n /** Test helper: all events currently on the hub. */\r\n getLog(): readonly GridEvent[] {\r\n return this.log;\r\n }\r\n}\r\n","import type {\r\n PresenceMessage,\r\n PresenceTransport,\r\n} from '../../application/ports/PresencePort';\r\n\r\ntype Client = {\r\n listener: ((message: PresenceMessage) => void) | null;\r\n};\r\n\r\n/**\r\n * Shared in-memory presence hub for tests / Node (PR-139).\r\n * Mirrors BroadcastChannel semantics without DOM.\r\n */\r\nexport class InMemoryPresenceHub {\r\n private readonly clients = new Map<string, Client>();\r\n\r\n transportFor(clientId: string): PresenceTransport {\r\n if (!this.clients.has(clientId)) {\r\n this.clients.set(clientId, { listener: null });\r\n }\r\n return {\r\n publish: (message) => {\r\n for (const [id, client] of this.clients) {\r\n if (id === clientId) continue;\r\n client.listener?.(message);\r\n }\r\n },\r\n subscribe: (listener) => {\r\n const client = this.clients.get(clientId)!;\r\n client.listener = listener;\r\n return () => {\r\n if (client.listener === listener) client.listener = null;\r\n };\r\n },\r\n };\r\n }\r\n}\r\n","/**\r\n * Document-grid mapping (header + detail lines) — pure, framework-free.\r\n *\r\n * Extracted from the arianERP form host hook so the project keeps ZERO table\r\n * logic: the host only injects I/O (fetch, save, page state) and calls these\r\n * functions. Nothing here knows Redux, Next.js, or any backend URL.\r\n */\r\nimport type { RowInput } from '../../bootstrap/type';\r\nimport type { TableSnapShot } from '../../engine/type';\r\nimport { RowStateEnum } from '../../domain/value-objects';\r\n\r\n/** Columns the grid owns — never sent back as detail data. */\r\nconst GRID_INTERNAL_COLUMNS = new Set(['collection', 'rowType', 'ChangeFields']);\r\n\r\nexport type SnapshotToDetailsOptions = {\r\n /** Server primary-key field of a detail line (sent for non-new rows when updating). */\r\n detailFieldKey: string;\r\n /** True when the document already exists (edit); false for add / copy. */\r\n isUpdate: boolean;\r\n /** Body key used when every row belongs to the default collection. Default `Details`. */\r\n defaultKey?: string;\r\n /** Name of the default collection. Default `default`. */\r\n defaultCollection?: string;\r\n /** Detail field that receives the grid row number (`index` column). Default `RowNum`. */\r\n rowNumberField?: string;\r\n};\r\n\r\nexport type DetailLine = Record<string, unknown>;\r\n\r\n/**\r\n * Maps a grid snapshot to the server body fragment.\r\n * - Rows with `RowState === 'None'` (unchanged) are skipped.\r\n * - Single default collection → `{ [defaultKey]: DetailLine[] }`.\r\n * - Any custom collection → `{ [collection]: DetailLine[] }` per collection.\r\n */\r\nexport function mapSnapshotToDetails(\r\n snapshot: TableSnapShot | null | undefined,\r\n options: SnapshotToDetailsOptions,\r\n): Record<string, DetailLine[]> {\r\n const {\r\n detailFieldKey,\r\n isUpdate,\r\n defaultKey = 'Details',\r\n defaultCollection = 'default',\r\n rowNumberField = 'RowNum',\r\n } = options;\r\n\r\n const changed = (snapshot?.rows ?? []).filter(\r\n (row) => row.rowState !== RowStateEnum.Unchanged,\r\n );\r\n\r\n const mapped = changed.map((row) => {\r\n const detail: DetailLine = {\r\n RowState: row.rowState,\r\n ChangeFields: row.changeFields,\r\n };\r\n\r\n if (isUpdate && row.rowState !== RowStateEnum.Added) {\r\n detail[detailFieldKey] = row.id;\r\n }\r\n if (row.isSaveDescription) {\r\n detail.isSaveDescription = row.isSaveDescription;\r\n }\r\n\r\n for (const [col, cell] of Object.entries(row.cells ?? {})) {\r\n if (cell == null) continue;\r\n if (GRID_INTERNAL_COLUMNS.has(col)) continue;\r\n if (col === 'index') {\r\n detail[rowNumberField] = cell;\r\n continue;\r\n }\r\n detail[col] =\r\n typeof cell === 'object' && 'value' in (cell as object)\r\n ? (cell as { value: unknown }).value\r\n : cell;\r\n }\r\n\r\n return { detail, collection: row.collection || defaultCollection };\r\n });\r\n\r\n const hasCustomCollection = mapped.some(\r\n (r) => r.collection && r.collection !== defaultCollection,\r\n );\r\n if (!hasCustomCollection) {\r\n return { [defaultKey]: mapped.map((r) => r.detail) };\r\n }\r\n\r\n const byCollection: Record<string, DetailLine[]> = {};\r\n for (const r of mapped) {\r\n (byCollection[r.collection] ??= []).push(r.detail);\r\n }\r\n return byCollection;\r\n}\r\n\r\nexport type DetailsToRowInputsOptions = {\r\n /** Server primary-key field of a detail line. */\r\n detailFieldKey: string;\r\n /** Grid collection the rows belong to. */\r\n collection: string;\r\n /** Copy-from-document: clear the PK and mark every row as new. */\r\n isCopy?: boolean;\r\n /** Generates a client row id for copied rows. Default: random integer. */\r\n newRowId?: () => number;\r\n};\r\n\r\n/**\r\n * Maps server detail lines to grid `RowInput`s (initial seed).\r\n * Copy mode strips the primary key and marks lines `Added`.\r\n */\r\nexport function mapDetailsToRowInputs(\r\n items: readonly DetailLine[],\r\n options: DetailsToRowInputsOptions,\r\n): RowInput[] {\r\n const {\r\n detailFieldKey,\r\n collection,\r\n isCopy = false,\r\n newRowId = () => Math.floor(Math.random() * 100000),\r\n } = options;\r\n\r\n return items.map((item) => {\r\n if (isCopy) {\r\n const rest = { ...item };\r\n delete rest[detailFieldKey];\r\n return {\r\n id: newRowId(),\r\n values: {\r\n ...rest,\r\n [detailFieldKey]: undefined,\r\n RowState: RowStateEnum.Added,\r\n collection,\r\n },\r\n };\r\n }\r\n return {\r\n id: item[detailFieldKey] as number,\r\n values: { ...item, collection },\r\n };\r\n });\r\n}\r\n\r\n/** One header (form) field as the host keeps it. */\r\nexport type DocumentHeaderField = {\r\n name: string;\r\n value?: unknown;\r\n originalValue?: unknown;\r\n type?: string;\r\n caption?: string;\r\n [key: string]: unknown;\r\n};\r\n\r\nexport type BuildDocumentPayloadOptions = {\r\n headerFields: readonly DocumentHeaderField[];\r\n /** Server primary-key field of the header. */\r\n headerFieldKey: string;\r\n /** Existing document id (0 / undefined for a new document). */\r\n recordId?: number;\r\n /** Result of {@link mapSnapshotToDetails}. */\r\n details: Record<string, DetailLine[]>;\r\n /** Header fields that must be sent as numbers even when typed as text. */\r\n numericFieldNames?: readonly string[];\r\n};\r\n\r\n/**\r\n * Builds the save body: header values (empty string → null, numeric coercion),\r\n * `ChangeFields` of the header on update, and the detail lines.\r\n */\r\nexport function buildDocumentPayload(\r\n options: BuildDocumentPayloadOptions,\r\n): Record<string, unknown> {\r\n const {\r\n headerFields,\r\n headerFieldKey,\r\n recordId = 0,\r\n details,\r\n numericFieldNames = [],\r\n } = options;\r\n const numeric = new Set<string>([headerFieldKey, ...numericFieldNames]);\r\n\r\n const formValues = Object.fromEntries(\r\n headerFields.map((field) => {\r\n let value = field.value;\r\n if (value === '') value = null;\r\n if (value != null && (field.type === 'number' || numeric.has(field.name))) {\r\n const n = Number(value);\r\n value = Number.isNaN(n) ? null : n;\r\n }\r\n return [field.name, value];\r\n }),\r\n );\r\n\r\n const isUpdate = recordId !== 0 && recordId != null;\r\n const changeFields = headerFields\r\n .filter((field) => field.value !== field.originalValue)\r\n .map((field) => field.name);\r\n\r\n return {\r\n ...formValues,\r\n ChangeFields: isUpdate ? changeFields : undefined,\r\n ...details,\r\n [headerFieldKey]: isUpdate ? recordId : undefined,\r\n };\r\n}\r\n\r\n/**\r\n * Re-seeds header fields from the server record.\r\n * Copy mode clears identity fields (PK + auto-generated numbers).\r\n */\r\nexport function mapServerHeaderToFields(\r\n fields: readonly DocumentHeaderField[],\r\n serverRecord: Record<string, unknown> | null | undefined,\r\n options: {\r\n headerFieldKey: string;\r\n recordId: number;\r\n isCopy?: boolean;\r\n /** Header fields cleared on copy besides the PK. Default none. */\r\n copyResetFields?: readonly string[];\r\n /** Values already edited locally (take precedence over the server). */\r\n storedFields?: readonly DocumentHeaderField[];\r\n /** Field caption that marks the primary-key field (`MainIdField`). */\r\n mainIdCaption?: string;\r\n },\r\n): DocumentHeaderField[] {\r\n const {\r\n headerFieldKey,\r\n recordId,\r\n isCopy = false,\r\n copyResetFields = [],\r\n storedFields,\r\n mainIdCaption = 'MainIdField',\r\n } = options;\r\n const reset = new Set<string>([headerFieldKey, ...copyResetFields]);\r\n\r\n const mapped: DocumentHeaderField[] = fields.map((field) => {\r\n const isIdentity =\r\n isCopy && (reset.has(field.name) || field.caption === mainIdCaption);\r\n const stored = storedFields?.find((f) => f.name === field.name)?.value;\r\n const fromServer = serverRecord\r\n ? (serverRecord[field.name] ?? undefined)\r\n : undefined;\r\n const current = stored !== undefined ? stored : fromServer;\r\n return {\r\n ...field,\r\n value: isIdentity ? null : current,\r\n originalValue: isIdentity ? null : fromServer,\r\n isTitleField: field.name === headerFieldKey,\r\n };\r\n });\r\n\r\n mapped.push({\r\n name: headerFieldKey,\r\n value: isCopy ? null : recordId,\r\n originalValue: isCopy ? null : recordId,\r\n type: 'hidden',\r\n });\r\n return mapped;\r\n}\r\n"]}
|
|
@@ -0,0 +1,508 @@
|
|
|
1
|
+
import { R as RowInput } from './createEngineGridQuery-D-fgO_jg.cjs';
|
|
2
|
+
export { A as AggAccumulator, a as AggregateSnapshot, C as CATALOG_TO_HOST_CALLBACKS, b as CellFocusedEvent, c as CellValueChangedEvent, d as CollectionRowMap, e as ColumnAggIndex, f as ColumnAggSpec, g as ColumnDefinition, H as ColumnSchema, h as ColumnViewBinding, i as ColumnVisibleRange, j as CreateERPTableConfig, k as CreateERPTableResult, l as CreateGridApiInput, m as CreateGridConfig, n as CreateGridResult, D as DEFAULT_EVENT_STORE_PREFIX, o as DEFAULT_GRID_ACTOR, p as DEFAULT_MEMORY_STORE, E as EVENT_CATALOG, q as EventCatalogEntry, r as ExportDataAsExcelOptions, G as GetRowId, s as GridApi, t as GridColumnState, u as GridDatasource, v as GridDatasourceGetRowsParams, w as GridDatasourceGetRowsResult, x as GridRowNode, I as InMemoryEventStore, y as InMemorySnapshotStore, z as IndexedDbEventStore, K as KvDatabase, B as KvStore, L as LEGACY_EVENT_STORE_PREFIX, M as MemoryKvDatabase, N as NoopRemoteApi, P as PluginHost, Q as QuickFilterBlobAccessor, F as QuickFilterIndex, J as ROW_DATA_UPDATED_CATALOG_TYPES, O as RequestExportOptions, S as RequestImportOptions, T as RowDataUpdatedEvent, U as RowValueChangedEvent, V as SelectionChangedEvent, W as SnapshotStore, X as SnapshotStrategy, Y as StartEditingCellParams, Z as ViewportCalculator, _ as accumulateAdd, $ as accumulateRemove, a0 as applyAgg, a1 as applyQuickFilter, a2 as buildCumulativeWidths, a3 as buildQuickFilterBlob, a4 as calculateColumnViewport, a5 as columnDefFieldName, a6 as createAccumulator, a7 as createERPTable, a8 as createEngineGridQuery, a9 as createGrid, aa as createGridApi, ab as createGridTableKey, ac as dispatchCatalogHostEvent, ad as eventStoreDbName, ae as getEventCatalogEntry, af as isAggFuncName, ag as isCustomAggFunc, ah as listUndoableEventTypes, ai as mapColumnDefs, aj as mapColumnSchemas, ak as mapColumnSchemasToDefs, al as normalizeQuickFilterText, am as openIndexedDbDatabase, an as readAccumulator, ao as resolveColumnAggSpecs, ap as resolveCreateGridDefaults, aq as subscribeCatalogHostEvents, ar as toColumnDef, as as toColumnDefinition, at as toColumnSchema, au as toColumnViewBinding, av as toMinorUnits } from './createEngineGridQuery-D-fgO_jg.cjs';
|
|
3
|
+
import { w as CellAddress, d as CellRange, x as FieldType, e as TableEngine, E as EventStore, G as GridEvent, T as TableSnapShot, W as WindowedTableRepository, f as Table, c as CollectionScope, R as Row } from './GridSession-CmQn2RnL.cjs';
|
|
4
|
+
export { A as AggFunc, y as AggFuncName, z as AppendResult, B as AriaSortValue, I as ArrowDirection, J as BooleanColumnFilter, K as BooleanFilterOp, L as BuiltinFilterKind, N as CellRangeBounds, O as CellRangeSelection, l as ColumnDef, P as ColumnDefBridge, Q as ColumnField, S as ColumnFilter, X as ColumnPinned, Y as CombinedColumnFilter, Z as CustomColumnFilter, _ as CustomFilterFn, $ as CycleSortModelOptions, a0 as DateColumnFilter, a1 as DateFilterOp, a2 as FilterAccessor, a3 as FilterDef, a4 as FilterJoin, F as FilterModel, b as GridSession, a5 as HEADER_SORT_CLICK_MAX_MOVE_PX, a6 as INDEX_COL_ID, a7 as ItemType, a8 as NumberColumnFilter, a9 as NumberFilterOp, aa as PersistedRowRecord, ab as RowModelType, ac as RowStateEnum, ad as SetColumnFilter, ae as SetFilterOp, af as SimpleColumnFilter, ag as SortAccessor, ah as SortDirection, ai as SortModel, aj as SortModelItem, ak as SortValueComparator, al as SparseRowIndex, k as TableViewState, am as TextColumnFilter, an as TextFilterOp, V as ValidCell, ao as ViewIntent, ap as Viewport, aq as VisibleRange, ar as applyFilter, as as applyHostRowDataToTable, at as applySort, au as ariaSortForColumn, av as clampColIndex, aw as clampRowIndex, ax as clickCell, ay as colIndex, az as collectUniqueFilterValues, aA as compareSortValues, aB as compareTypedValues, aC as createEmptyCellRangeSelection, aD as ctrlClickCell, aE as cycleSortModel, aF as defaultGetRowId, aG as ensureIndexColumnDef, aH as isBlankSortValue, aI as isCellInRange, aJ as isColumnFilterActive, aK as isHeaderColumnSortable, aL as isServerRowModel, aM as isWindowedRepository, aN as mapRowDataToRowInputs, aO as mergeCellRanges, aP as moveCellAddress, aQ as normalizeCellRange, aR as normalizeDigits, aS as normalizeFilterText, aT as pageWindow, aU as rangeFromAnchorFocus, aV as rangesOverlap, aW as resolveBuiltinFilterKind, aX as selectAllCellRanges, aY as shiftArrowCell, aZ as shiftClickCell, a_ as shouldCommitHeaderSortClick, a$ as sortPriorityForColumn } from './GridSession-CmQn2RnL.cjs';
|
|
5
|
+
export { R as RemoteApi } from './RemoteApi-CCQxiSf1.cjs';
|
|
6
|
+
import { G as GridClipboardRuntimeOptions, j as PasteGridResult, g as SyncPort, O as OfflineStatus, i as SyncTransport, e as SyncConflictPolicy, S as SyncConflict, h as SyncResult, M as ManualResolution, c as PresencePort, d as PresenceTransport, P as PresenceLocalState, b as PresencePeer } from './UITableController-CIwnHIw8.cjs';
|
|
7
|
+
export { C as ClipboardCellSnapshot, k as ClipboardColumnMeta, l as ClipboardCopyBuildOptions, m as ClipboardCopyEvent, n as ClipboardPasteEvent, o as ClipboardPayload, p as ClipboardRowSnapshot, q as GridPasteRuntimeOptions, a as PresenceMessage, r as ProcessCellForClipboardParams, f as SyncConflictSide, U as UITableController, s as buildClipboardPayload, t as copyGridSelectionToClipboard, u as cutGridSelectionToClipboard, v as pasteGridFromClipboard, w as readSystemClipboardText, x as resolveCopyRanges, y as writeSystemClipboard } from './UITableController-CIwnHIw8.cjs';
|
|
8
|
+
export { E as ExportSource, G as GridPlugin, a as GridPluginContext, c as GridQueryPort } from './GridPlugin-DewWufGZ.cjs';
|
|
9
|
+
export { P as PdfRenderer } from './PdfRenderer-B9FJaCo_.cjs';
|
|
10
|
+
export { C as CallbackRemoteApi, R as RemoteApiRequest } from './callbackRemoteApi-Cv26MmSD.cjs';
|
|
11
|
+
import 'react';
|
|
12
|
+
|
|
13
|
+
type CellRangeEdgeFlags = {
|
|
14
|
+
inRange: boolean;
|
|
15
|
+
top: boolean;
|
|
16
|
+
bottom: boolean;
|
|
17
|
+
left: boolean;
|
|
18
|
+
right: boolean;
|
|
19
|
+
};
|
|
20
|
+
/** Which edges of a cell should show range chrome (PR-105). */
|
|
21
|
+
declare function resolveCellRangePresentation(cell: CellAddress, ranges: readonly CellRange[]): CellRangeEdgeFlags;
|
|
22
|
+
declare function cellRangeEdgeAttr(flags: CellRangeEdgeFlags): string | undefined;
|
|
23
|
+
declare function cellRangeClassName(flags: CellRangeEdgeFlags): string;
|
|
24
|
+
|
|
25
|
+
/** Strip grouping separators and normalize Persian decimal (٫) to `.`. */
|
|
26
|
+
declare function normalizePersianNumberText(text: string): string;
|
|
27
|
+
declare function parseClipboardNumber(text: string): number | null;
|
|
28
|
+
declare function parseClipboardDate(text: string): string;
|
|
29
|
+
type CoercePastedCellResult = {
|
|
30
|
+
ok: true;
|
|
31
|
+
value: unknown;
|
|
32
|
+
} | {
|
|
33
|
+
ok: false;
|
|
34
|
+
reason: string;
|
|
35
|
+
};
|
|
36
|
+
declare function coercePastedCellValue(fieldType: FieldType | undefined, rawText: string): CoercePastedCellResult;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Pure clipboard paste parse + target tiling (PR-107).
|
|
40
|
+
* No DOM / React.
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
type PasteTarget = {
|
|
44
|
+
rowIndex: number;
|
|
45
|
+
colId: string;
|
|
46
|
+
rawText: string;
|
|
47
|
+
};
|
|
48
|
+
type SkippedPasteTarget = PasteTarget & {
|
|
49
|
+
reason: string;
|
|
50
|
+
};
|
|
51
|
+
type PasteColumnMeta = {
|
|
52
|
+
id: string;
|
|
53
|
+
editable?: boolean;
|
|
54
|
+
/** Skip paste into index chrome columns by default. */
|
|
55
|
+
fieldType?: string;
|
|
56
|
+
};
|
|
57
|
+
type BuildPastePlanInput = {
|
|
58
|
+
text: string;
|
|
59
|
+
ranges: readonly CellRange[];
|
|
60
|
+
activeCell?: {
|
|
61
|
+
rowIndex: number;
|
|
62
|
+
colId: string;
|
|
63
|
+
} | null;
|
|
64
|
+
columnOrder: readonly string[];
|
|
65
|
+
columns: readonly PasteColumnMeta[];
|
|
66
|
+
pasteAddsRows?: boolean;
|
|
67
|
+
rowCount: number;
|
|
68
|
+
};
|
|
69
|
+
type PastePlan = {
|
|
70
|
+
matrix: readonly (readonly string[])[];
|
|
71
|
+
targets: readonly PasteTarget[];
|
|
72
|
+
skipped: readonly SkippedPasteTarget[];
|
|
73
|
+
rowsToAdd: number;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Parse TSV/CSV including quoted fields and embedded newlines.
|
|
77
|
+
*/
|
|
78
|
+
declare function parseDelimitedClipboardText(text: string, delimiter?: string): string[][];
|
|
79
|
+
declare function buildPastePlan(input: BuildPastePlanInput): PastePlan | null;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Pure fill-handle series + target builder (PR-108).
|
|
83
|
+
*/
|
|
84
|
+
|
|
85
|
+
type FillSeriesKind = 'number' | 'jalali' | 'copy';
|
|
86
|
+
type FillTarget = {
|
|
87
|
+
rowIndex: number;
|
|
88
|
+
colId: string;
|
|
89
|
+
rawText: string;
|
|
90
|
+
};
|
|
91
|
+
type FillCorner = {
|
|
92
|
+
rowIndex: number;
|
|
93
|
+
colId: string;
|
|
94
|
+
colIndex: number;
|
|
95
|
+
};
|
|
96
|
+
declare function addJalaliMonths(parts: {
|
|
97
|
+
y: number;
|
|
98
|
+
m: number;
|
|
99
|
+
d: number;
|
|
100
|
+
}, months: number): {
|
|
101
|
+
y: number;
|
|
102
|
+
m: number;
|
|
103
|
+
d: number;
|
|
104
|
+
};
|
|
105
|
+
declare function detectFillSeries(values: readonly string[]): {
|
|
106
|
+
kind: FillSeriesKind;
|
|
107
|
+
numberStep?: number;
|
|
108
|
+
};
|
|
109
|
+
declare function extendSeriesValue(kind: FillSeriesKind, sourceValues: readonly string[], offset: number, numberStep?: number): string;
|
|
110
|
+
declare function resolveFillCorner(ranges: readonly CellRange[], columnOrder: readonly string[]): FillCorner | null;
|
|
111
|
+
declare function buildFillUpdates(input: {
|
|
112
|
+
sourceRange: CellRange;
|
|
113
|
+
extendToRowIndex: number;
|
|
114
|
+
extendToColIndex: number;
|
|
115
|
+
columnOrder: readonly string[];
|
|
116
|
+
getSourceText: (rowIndex: number, colId: string) => string;
|
|
117
|
+
copyOnly: boolean;
|
|
118
|
+
}): FillTarget[];
|
|
119
|
+
|
|
120
|
+
declare function applyFillHandleDrag(engine: TableEngine, store: string, tableKey: string, extendTo: {
|
|
121
|
+
rowIndex: number;
|
|
122
|
+
colIndex: number;
|
|
123
|
+
}, copyOnly: boolean, options?: GridClipboardRuntimeOptions): Promise<PasteGridResult>;
|
|
124
|
+
|
|
125
|
+
type GridSyncServiceOptions = {
|
|
126
|
+
readonly tableId: string;
|
|
127
|
+
readonly eventStore: EventStore;
|
|
128
|
+
readonly offlineStatus: OfflineStatus;
|
|
129
|
+
readonly transport: SyncTransport;
|
|
130
|
+
/** Apply a winning remote CELL_CHANGED into the local domain. */
|
|
131
|
+
readonly applyCellValue: (rowId: number, columnId: string, value: unknown) => Promise<void>;
|
|
132
|
+
/** Initial pull cursor (default 0). */
|
|
133
|
+
readonly initialCursor?: number;
|
|
134
|
+
readonly policy?: SyncConflictPolicy;
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* SyncPort implementation over EventStore + OfflineStatus + SyncTransport (PR-138).
|
|
138
|
+
*/
|
|
139
|
+
declare class GridSyncService implements SyncPort {
|
|
140
|
+
private readonly options;
|
|
141
|
+
private policy;
|
|
142
|
+
private cursor;
|
|
143
|
+
private openConflicts;
|
|
144
|
+
private readonly conflictListeners;
|
|
145
|
+
/** Remote events waiting on manual resolution (by conflict id). */
|
|
146
|
+
private readonly deferredRemote;
|
|
147
|
+
private disposed;
|
|
148
|
+
constructor(options: GridSyncServiceOptions);
|
|
149
|
+
getPolicy(): SyncConflictPolicy;
|
|
150
|
+
setPolicy(policy: SyncConflictPolicy): void;
|
|
151
|
+
getOpenConflicts(): readonly SyncConflict[];
|
|
152
|
+
subscribeConflicts(listener: (conflicts: readonly SyncConflict[]) => void): () => void;
|
|
153
|
+
/** Drop listeners and deferred conflicts; later sync() calls are no-ops. */
|
|
154
|
+
dispose(): void;
|
|
155
|
+
private emptyResult;
|
|
156
|
+
sync(): Promise<SyncResult>;
|
|
157
|
+
resolveConflict(conflictId: string, choice: ManualResolution): Promise<void>;
|
|
158
|
+
private applyRemoteCell;
|
|
159
|
+
private ingestRemote;
|
|
160
|
+
private emitConflicts;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Shared in-memory sync hub for tests / demos (PR-138).
|
|
165
|
+
* Each client gets a transport bound to a clientId.
|
|
166
|
+
*/
|
|
167
|
+
declare class InMemorySyncHub {
|
|
168
|
+
private log;
|
|
169
|
+
private readonly clients;
|
|
170
|
+
transportFor(clientId: string): SyncTransport;
|
|
171
|
+
private push;
|
|
172
|
+
private pull;
|
|
173
|
+
/** Test helper: all events currently on the hub. */
|
|
174
|
+
getLog(): readonly GridEvent[];
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
type GridPresenceServiceOptions = {
|
|
178
|
+
readonly tableId: string;
|
|
179
|
+
readonly actorId: string;
|
|
180
|
+
readonly label?: string;
|
|
181
|
+
readonly transport: PresenceTransport;
|
|
182
|
+
readonly peerId?: string;
|
|
183
|
+
readonly color?: string;
|
|
184
|
+
/** Drop peers quieter than this (ms). Default 15s. */
|
|
185
|
+
readonly staleMs?: number;
|
|
186
|
+
};
|
|
187
|
+
/**
|
|
188
|
+
* PresencePort: broadcast local cursor/selection; track remote peers (PR-139).
|
|
189
|
+
* Does not merge cell values — editing different cells stays conflict-free.
|
|
190
|
+
*/
|
|
191
|
+
declare class GridPresenceService implements PresencePort {
|
|
192
|
+
private readonly options;
|
|
193
|
+
private readonly local;
|
|
194
|
+
private peers;
|
|
195
|
+
private readonly listeners;
|
|
196
|
+
private unsub;
|
|
197
|
+
private disposed;
|
|
198
|
+
private readonly staleMs;
|
|
199
|
+
constructor(options: GridPresenceServiceOptions);
|
|
200
|
+
getLocal(): PresenceLocalState;
|
|
201
|
+
getPeers(): readonly PresencePeer[];
|
|
202
|
+
setActiveCell(rowId: number | null, columnId: string | null): void;
|
|
203
|
+
dispose(): void;
|
|
204
|
+
subscribe(listener: (peers: readonly PresencePeer[]) => void): () => void;
|
|
205
|
+
private broadcast;
|
|
206
|
+
private onMessage;
|
|
207
|
+
private pruneStale;
|
|
208
|
+
private emit;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Shared in-memory presence hub for tests / Node (PR-139).
|
|
213
|
+
* Mirrors BroadcastChannel semantics without DOM.
|
|
214
|
+
*/
|
|
215
|
+
declare class InMemoryPresenceHub {
|
|
216
|
+
private readonly clients;
|
|
217
|
+
transportFor(clientId: string): PresenceTransport;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Browser BroadcastChannel presence transport (PR-139).
|
|
222
|
+
* Channel name should be scoped per table: `pdg-presence:{store}:{tableKey}`.
|
|
223
|
+
*/
|
|
224
|
+
declare function createBroadcastChannelPresenceTransport(channelName: string): PresenceTransport;
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Document-grid mapping (header + detail lines) — pure, framework-free.
|
|
228
|
+
*
|
|
229
|
+
* Extracted from the arianERP form host hook so the project keeps ZERO table
|
|
230
|
+
* logic: the host only injects I/O (fetch, save, page state) and calls these
|
|
231
|
+
* functions. Nothing here knows Redux, Next.js, or any backend URL.
|
|
232
|
+
*/
|
|
233
|
+
|
|
234
|
+
type SnapshotToDetailsOptions = {
|
|
235
|
+
/** Server primary-key field of a detail line (sent for non-new rows when updating). */
|
|
236
|
+
detailFieldKey: string;
|
|
237
|
+
/** True when the document already exists (edit); false for add / copy. */
|
|
238
|
+
isUpdate: boolean;
|
|
239
|
+
/** Body key used when every row belongs to the default collection. Default `Details`. */
|
|
240
|
+
defaultKey?: string;
|
|
241
|
+
/** Name of the default collection. Default `default`. */
|
|
242
|
+
defaultCollection?: string;
|
|
243
|
+
/** Detail field that receives the grid row number (`index` column). Default `RowNum`. */
|
|
244
|
+
rowNumberField?: string;
|
|
245
|
+
};
|
|
246
|
+
type DetailLine = Record<string, unknown>;
|
|
247
|
+
/**
|
|
248
|
+
* Maps a grid snapshot to the server body fragment.
|
|
249
|
+
* - Rows with `RowState === 'None'` (unchanged) are skipped.
|
|
250
|
+
* - Single default collection → `{ [defaultKey]: DetailLine[] }`.
|
|
251
|
+
* - Any custom collection → `{ [collection]: DetailLine[] }` per collection.
|
|
252
|
+
*/
|
|
253
|
+
declare function mapSnapshotToDetails(snapshot: TableSnapShot | null | undefined, options: SnapshotToDetailsOptions): Record<string, DetailLine[]>;
|
|
254
|
+
type DetailsToRowInputsOptions = {
|
|
255
|
+
/** Server primary-key field of a detail line. */
|
|
256
|
+
detailFieldKey: string;
|
|
257
|
+
/** Grid collection the rows belong to. */
|
|
258
|
+
collection: string;
|
|
259
|
+
/** Copy-from-document: clear the PK and mark every row as new. */
|
|
260
|
+
isCopy?: boolean;
|
|
261
|
+
/** Generates a client row id for copied rows. Default: random integer. */
|
|
262
|
+
newRowId?: () => number;
|
|
263
|
+
};
|
|
264
|
+
/**
|
|
265
|
+
* Maps server detail lines to grid `RowInput`s (initial seed).
|
|
266
|
+
* Copy mode strips the primary key and marks lines `Added`.
|
|
267
|
+
*/
|
|
268
|
+
declare function mapDetailsToRowInputs(items: readonly DetailLine[], options: DetailsToRowInputsOptions): RowInput[];
|
|
269
|
+
/** One header (form) field as the host keeps it. */
|
|
270
|
+
type DocumentHeaderField = {
|
|
271
|
+
name: string;
|
|
272
|
+
value?: unknown;
|
|
273
|
+
originalValue?: unknown;
|
|
274
|
+
type?: string;
|
|
275
|
+
caption?: string;
|
|
276
|
+
[key: string]: unknown;
|
|
277
|
+
};
|
|
278
|
+
type BuildDocumentPayloadOptions = {
|
|
279
|
+
headerFields: readonly DocumentHeaderField[];
|
|
280
|
+
/** Server primary-key field of the header. */
|
|
281
|
+
headerFieldKey: string;
|
|
282
|
+
/** Existing document id (0 / undefined for a new document). */
|
|
283
|
+
recordId?: number;
|
|
284
|
+
/** Result of {@link mapSnapshotToDetails}. */
|
|
285
|
+
details: Record<string, DetailLine[]>;
|
|
286
|
+
/** Header fields that must be sent as numbers even when typed as text. */
|
|
287
|
+
numericFieldNames?: readonly string[];
|
|
288
|
+
};
|
|
289
|
+
/**
|
|
290
|
+
* Builds the save body: header values (empty string → null, numeric coercion),
|
|
291
|
+
* `ChangeFields` of the header on update, and the detail lines.
|
|
292
|
+
*/
|
|
293
|
+
declare function buildDocumentPayload(options: BuildDocumentPayloadOptions): Record<string, unknown>;
|
|
294
|
+
/**
|
|
295
|
+
* Re-seeds header fields from the server record.
|
|
296
|
+
* Copy mode clears identity fields (PK + auto-generated numbers).
|
|
297
|
+
*/
|
|
298
|
+
declare function mapServerHeaderToFields(fields: readonly DocumentHeaderField[], serverRecord: Record<string, unknown> | null | undefined, options: {
|
|
299
|
+
headerFieldKey: string;
|
|
300
|
+
recordId: number;
|
|
301
|
+
isCopy?: boolean;
|
|
302
|
+
/** Header fields cleared on copy besides the PK. Default none. */
|
|
303
|
+
copyResetFields?: readonly string[];
|
|
304
|
+
/** Values already edited locally (take precedence over the server). */
|
|
305
|
+
storedFields?: readonly DocumentHeaderField[];
|
|
306
|
+
/** Field caption that marks the primary-key field (`MainIdField`). */
|
|
307
|
+
mainIdCaption?: string;
|
|
308
|
+
}): DocumentHeaderField[];
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* RAM = current page window only.
|
|
312
|
+
* IndexedDB = source of truth for all rows.
|
|
313
|
+
*
|
|
314
|
+
* After `clearLocal` (page leave / dispose), all IDB ops for that table are
|
|
315
|
+
* skipped until the table is opened again via getById/replaceAll.
|
|
316
|
+
*/
|
|
317
|
+
declare class PagedCachedTableRepository implements WindowedTableRepository {
|
|
318
|
+
private localRepo;
|
|
319
|
+
private indexedRepo;
|
|
320
|
+
private persistChain;
|
|
321
|
+
/** Tables closed by dispose — block further IDB rebuild/load until reopened */
|
|
322
|
+
private closedKeys;
|
|
323
|
+
constructor();
|
|
324
|
+
private queueKey;
|
|
325
|
+
private isClosed;
|
|
326
|
+
private reopen;
|
|
327
|
+
private enqueuePersist;
|
|
328
|
+
flush(store: string, tableKey: string): Promise<void>;
|
|
329
|
+
getById(store: string, tableKey: string): Promise<Table>;
|
|
330
|
+
save(store: string, table: Table): Promise<void>;
|
|
331
|
+
replaceAll(store: string, table: Table): Promise<void>;
|
|
332
|
+
loadPage(store: string, tableKey: string, page: number, pageSize?: number): Promise<Table | null>;
|
|
333
|
+
/**
|
|
334
|
+
* Collection switch: swap the RAM window with page 1 of the NEW collection
|
|
335
|
+
* (loaded from IndexedDB) and persist the switch in meta. Rows of other
|
|
336
|
+
* collections are never touched.
|
|
337
|
+
*/
|
|
338
|
+
setActiveCollection(store: string, tableKey: string, collection: string): Promise<Table | null>;
|
|
339
|
+
/** ColumnSchema holds functions — never come back from IndexedDB; keep RAM handlers. */
|
|
340
|
+
private restoreLiveColumns;
|
|
341
|
+
getAllRows(store: string, tableKey: string, collectionScope?: CollectionScope): Promise<Row[]>;
|
|
342
|
+
getAllRowIds(store: string, tableKey: string, collectionScope?: CollectionScope): Promise<number[]>;
|
|
343
|
+
clearLocal(store: string, tableKey: string): void;
|
|
344
|
+
delete(store: string, tableKey: string): Promise<void>;
|
|
345
|
+
resetTable(store: string, tableKey: string): Promise<void>;
|
|
346
|
+
exists(store: string, tableKey: string): Promise<boolean>;
|
|
347
|
+
/** Stream row records in batches (never the whole dataset in heap). */
|
|
348
|
+
iterateRowRecords(store: string, tableKey: string, collectionScope: CollectionScope, onBatch: Parameters<WindowedTableRepository['iterateRowRecords']>[3], batchSize?: number): Promise<void>;
|
|
349
|
+
removeRows(store: string, tableKey: string, rowIds: number[]): Promise<void>;
|
|
350
|
+
/**
|
|
351
|
+
* Bulk delete straight on IndexedDB records (Memory Iron Rule: no full
|
|
352
|
+
* hydration, no replaceAll). After the persisted delete, the RAM window is
|
|
353
|
+
* reloaded from IndexedDB so pagination/rows stay consistent.
|
|
354
|
+
*/
|
|
355
|
+
softDeleteRows(store: string, tableKey: string, rowIds: number[]): Promise<{
|
|
356
|
+
softDeleted: number;
|
|
357
|
+
hardRemoved: number;
|
|
358
|
+
remaining: number;
|
|
359
|
+
}>;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
declare class PagedIndexedDbTableRepository implements WindowedTableRepository {
|
|
363
|
+
private dbPromise;
|
|
364
|
+
constructor();
|
|
365
|
+
private bindDb;
|
|
366
|
+
/**
|
|
367
|
+
* Open at the *existing* DB version (no fixed version number).
|
|
368
|
+
* ensureStores() bumps version only when new object stores are needed.
|
|
369
|
+
* A fixed open(version) would throw VersionError after lazy upgrades.
|
|
370
|
+
*/
|
|
371
|
+
private initDb;
|
|
372
|
+
private getDb;
|
|
373
|
+
private metaStore;
|
|
374
|
+
private rowsStore;
|
|
375
|
+
private ensureStores;
|
|
376
|
+
private serializeRow;
|
|
377
|
+
private deserializeRow;
|
|
378
|
+
private serializeColumn;
|
|
379
|
+
private buildMetaFromTable;
|
|
380
|
+
private buildTableFromPage;
|
|
381
|
+
private readMeta;
|
|
382
|
+
private isLegacy;
|
|
383
|
+
private migrateLegacy;
|
|
384
|
+
private putMeta;
|
|
385
|
+
private putRows;
|
|
386
|
+
/** Put already-serialized row records directly (no domain Row round-trip). */
|
|
387
|
+
private putRowRecords;
|
|
388
|
+
private deleteAllRowsForTable;
|
|
389
|
+
/**
|
|
390
|
+
* Single cursor pass over the byTableCollectionSort index, yielding batches.
|
|
391
|
+
* The index gives collection-sorted order — no in-memory sort needed.
|
|
392
|
+
* Falls back to a full scan when the index is missing (legacy stores).
|
|
393
|
+
* onBatch may return false to stop early.
|
|
394
|
+
*/
|
|
395
|
+
private iterateRows;
|
|
396
|
+
/**
|
|
397
|
+
* Page-window read via cursor + offset on the sorted index.
|
|
398
|
+
* Only `pageSize` records cross the heap — not the whole collection.
|
|
399
|
+
*/
|
|
400
|
+
private queryPageRows;
|
|
401
|
+
private queryAllRowRecords;
|
|
402
|
+
private ensureMeta;
|
|
403
|
+
/**
|
|
404
|
+
* One-time re-key: `table::rowId` → `table::collection::rowId`.
|
|
405
|
+
* Old-format records may collide (same PK in different collections overwrote
|
|
406
|
+
* each other); after re-keying, per-collection counts in meta are re-derived
|
|
407
|
+
* from the actual records so pagination stops being scrambled.
|
|
408
|
+
*/
|
|
409
|
+
private migrateToCollectionScopedKeys;
|
|
410
|
+
getById(storeName: string, tableId: string): Promise<Table>;
|
|
411
|
+
save(storeName: string, table: Table): Promise<void>;
|
|
412
|
+
replaceAll(storeName: string, table: Table): Promise<void>;
|
|
413
|
+
loadPage(storeName: string, tableId: string, page: number, pageSize?: number): Promise<Table | null>;
|
|
414
|
+
/**
|
|
415
|
+
* Persist the new active collection (page back to 1) and return a RAM window
|
|
416
|
+
* holding page 1 of that collection only. Rows of other collections stay
|
|
417
|
+
* untouched in IndexedDB — the returned Table contains no other-collection rows.
|
|
418
|
+
*/
|
|
419
|
+
setActiveCollection(storeName: string, tableId: string, collection: string): Promise<Table | null>;
|
|
420
|
+
getAllRows(storeName: string, tableId: string, collectionScope?: CollectionScope): Promise<Row[]>;
|
|
421
|
+
getAllRowIds(storeName: string, tableId: string, collectionScope?: CollectionScope): Promise<number[]>;
|
|
422
|
+
clearLocal(_store: string, _tableKey: string): void;
|
|
423
|
+
flush(_store: string, _tableKey: string): Promise<void>;
|
|
424
|
+
exists(storeName: string, tableId: string): Promise<boolean>;
|
|
425
|
+
delete(storeName: string, tableId: string): Promise<void>;
|
|
426
|
+
resetTable(storeName: string, tableId: string): Promise<void>;
|
|
427
|
+
/**
|
|
428
|
+
* Port: stream serialized row records in bounded batches (cursor over the
|
|
429
|
+
* sorted index). 'active' → index cursor on the active collection;
|
|
430
|
+
* 'all'/array → full scan filtered in-memory per batch. Heap = one batch.
|
|
431
|
+
*/
|
|
432
|
+
iterateRowRecords(storeName: string, tableId: string, collectionScope: CollectionScope | undefined, onBatch: (records: {
|
|
433
|
+
rowId: number;
|
|
434
|
+
collection: string;
|
|
435
|
+
sortIndex: number;
|
|
436
|
+
rowState: string;
|
|
437
|
+
cells: Record<string, {
|
|
438
|
+
value: unknown;
|
|
439
|
+
originalValue: unknown;
|
|
440
|
+
display: unknown;
|
|
441
|
+
}>;
|
|
442
|
+
}[], ordinalBase: number) => Promise<boolean | void>, batchSize?: number): Promise<void>;
|
|
443
|
+
/**
|
|
444
|
+
* Bulk soft/hard delete directly on persisted records in ONE readwrite
|
|
445
|
+
* transaction — cursor over the `byTable` index (no full hydration, heap
|
|
446
|
+
* stays O(1)). `Added` → hard delete; others → cursor.update to Deleted;
|
|
447
|
+
* already-Deleted → untouched. Never goes through replaceAll.
|
|
448
|
+
*/
|
|
449
|
+
softDeleteRows(storeName: string, tableId: string, rowIds: number[]): Promise<{
|
|
450
|
+
softDeleted: number;
|
|
451
|
+
hardRemoved: number;
|
|
452
|
+
remaining: number;
|
|
453
|
+
}>;
|
|
454
|
+
removeRows(storeName: string, tableId: string, rowIds: number[]): Promise<void>;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
/**
|
|
458
|
+
* RAM window only — holds at most the current page of rows for each table.
|
|
459
|
+
* IndexedDB is the source of truth; this never stores the full dataset.
|
|
460
|
+
*/
|
|
461
|
+
declare class PagedLocalTableRepository implements WindowedTableRepository {
|
|
462
|
+
private tables;
|
|
463
|
+
exists(_store: string, tableKey: string): Promise<boolean>;
|
|
464
|
+
getById(_store: string, tableKey: string): Promise<Table>;
|
|
465
|
+
save(_store: string, table: Table): Promise<void>;
|
|
466
|
+
replaceAll(_store: string, table: Table): Promise<void>;
|
|
467
|
+
loadPage(_store: string, tableKey: string, _page: number, _pageSize?: number): Promise<Table | null>;
|
|
468
|
+
/**
|
|
469
|
+
* RAM window: a switch replaces the window with the one returned by the
|
|
470
|
+
* IndexedDB layer, so nothing to persist here — just keep the new table.
|
|
471
|
+
*/
|
|
472
|
+
setActiveCollection(_store: string, tableKey: string, collection: string): Promise<Table | null>;
|
|
473
|
+
getAllRows(_store: string, tableKey: string, collectionScope?: CollectionScope): Promise<Row[]>;
|
|
474
|
+
getAllRowIds(_store: string, tableKey: string, collectionScope?: CollectionScope): Promise<number[]>;
|
|
475
|
+
clearLocal(_store: string, tableKey: string): void;
|
|
476
|
+
flush(): Promise<void>;
|
|
477
|
+
delete(_store: string, tableKey: string): Promise<void>;
|
|
478
|
+
resetTable(_store: string, tableKey: string): Promise<void>;
|
|
479
|
+
/**
|
|
480
|
+
* RAM window only — streams the current page's rows as a single batch.
|
|
481
|
+
* (The full dataset lives in IndexedDB, not here.)
|
|
482
|
+
*/
|
|
483
|
+
iterateRowRecords(_store: string, tableKey: string, collectionScope: CollectionScope, onBatch: (records: {
|
|
484
|
+
rowId: number;
|
|
485
|
+
collection: string;
|
|
486
|
+
sortIndex: number;
|
|
487
|
+
rowState: string;
|
|
488
|
+
cells: Record<string, {
|
|
489
|
+
value: unknown;
|
|
490
|
+
originalValue: unknown;
|
|
491
|
+
display: unknown;
|
|
492
|
+
}>;
|
|
493
|
+
}[], ordinalBase: number) => Promise<boolean | void>): Promise<void>;
|
|
494
|
+
removeRows(): Promise<void>;
|
|
495
|
+
/**
|
|
496
|
+
* RAM-window bulk delete (Memory Iron Rule compliant): only the current
|
|
497
|
+
* page's rows are mutated — Added hard-removed, others soft-deleted via
|
|
498
|
+
* domain Row state; already-Deleted untouched. Remaining counts come from
|
|
499
|
+
* pagination totals minus this operation's effects (no full-dataset scan).
|
|
500
|
+
*/
|
|
501
|
+
softDeleteRows(_store: string, tableKey: string, rowIds: number[]): Promise<{
|
|
502
|
+
softDeleted: number;
|
|
503
|
+
hardRemoved: number;
|
|
504
|
+
remaining: number;
|
|
505
|
+
}>;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
export { type BuildDocumentPayloadOptions, CellAddress, CellRange, type CellRangeEdgeFlags, type CoercePastedCellResult, type DetailLine, type DetailsToRowInputsOptions, type DocumentHeaderField, EventStore, FieldType, type FillCorner, type FillSeriesKind, type FillTarget, GridClipboardRuntimeOptions, GridPresenceService, GridSyncService, InMemoryPresenceHub, InMemorySyncHub, ManualResolution, PagedCachedTableRepository, PagedIndexedDbTableRepository, PagedLocalTableRepository, type PasteColumnMeta, PasteGridResult, type PastePlan, type PasteTarget, PresenceLocalState, PresencePeer, PresencePort, PresenceTransport, RowInput, type SkippedPasteTarget, type SnapshotToDetailsOptions, SyncConflict, SyncConflictPolicy, SyncPort, SyncResult, SyncTransport, TableEngine, TableSnapShot, WindowedTableRepository, addJalaliMonths, applyFillHandleDrag, buildDocumentPayload, buildFillUpdates, buildPastePlan, cellRangeClassName, cellRangeEdgeAttr, coercePastedCellValue, createBroadcastChannelPresenceTransport, detectFillSeries, extendSeriesValue, mapDetailsToRowInputs, mapServerHeaderToFields, mapSnapshotToDetails, normalizePersianNumberText, parseClipboardDate, parseClipboardNumber, parseDelimitedClipboardText, resolveCellRangePresentation, resolveFillCorner };
|