persian-data-grid 0.5.0 → 0.6.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-J5Z2LRC5.cjs +131 -0
- package/dist/ERPTableGroupRow-J5Z2LRC5.cjs.map +1 -0
- package/dist/ERPTableGroupRow-PSAPAHGL.js +125 -0
- package/dist/ERPTableGroupRow-PSAPAHGL.js.map +1 -0
- package/dist/GridPlugin-CJCaYnlw.d.ts +57 -0
- package/dist/GridPlugin-oxhq8AsM.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-B-9lLcoB.d.cts +2492 -0
- package/dist/GridSession-Bc7UIawO.d.ts +2492 -0
- package/dist/GridSyncService-KTLB4KP3.js +3 -0
- package/dist/GridSyncService-KTLB4KP3.js.map +1 -0
- package/dist/GridSyncService-TAPAHABV.cjs +12 -0
- package/dist/GridSyncService-TAPAHABV.cjs.map +1 -0
- package/dist/PdfRenderer-1HFh6UeR.d.ts +22 -0
- package/dist/PdfRenderer-CBg7hWNS.d.cts +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-Cuwq481K.d.cts +632 -0
- package/dist/UITableController-DU8RopUM.d.ts +632 -0
- package/dist/VazirmatnPdfRenderer-BCMpC1zy.d.cts +96 -0
- package/dist/VazirmatnPdfRenderer-Dz_G-m3c.d.ts +96 -0
- package/dist/adapters/arian-erp.cjs +77 -0
- package/dist/adapters/arian-erp.cjs.map +1 -0
- package/dist/adapters/arian-erp.d.cts +60 -0
- package/dist/adapters/arian-erp.d.ts +60 -0
- package/dist/adapters/arian-erp.js +71 -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-BO6yxoAN.d.cts +135 -0
- package/dist/applyImportedRows-D4zVY8uD.d.ts +135 -0
- package/dist/applyRowVisibilityHandler-KS6TMCBN.js +83 -0
- package/dist/applyRowVisibilityHandler-KS6TMCBN.js.map +1 -0
- package/dist/applyRowVisibilityHandler-LXCOGESZ.cjs +85 -0
- package/dist/applyRowVisibilityHandler-LXCOGESZ.cjs.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-BlXO5NJz.d.ts +30 -0
- package/dist/callbackRemoteApi-DgnXH-i0.d.cts +30 -0
- package/dist/cellRenderContext-DB7V_mlu.d.ts +42 -0
- package/dist/cellRenderContext-DG5BOlxK.d.cts +42 -0
- package/dist/chunk-2BJCRYOS.cjs +936 -0
- package/dist/chunk-2BJCRYOS.cjs.map +1 -0
- package/dist/chunk-3Y3KKGEC.js +3 -0
- package/dist/chunk-3Y3KKGEC.js.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-633KP74Z.js +189 -0
- package/dist/chunk-633KP74Z.js.map +1 -0
- package/dist/chunk-6XBXZPBW.js +298 -0
- package/dist/chunk-6XBXZPBW.js.map +1 -0
- package/dist/chunk-77UXAJII.js +112 -0
- package/dist/chunk-77UXAJII.js.map +1 -0
- package/dist/chunk-ASPTRYRD.cjs +21 -0
- package/dist/chunk-ASPTRYRD.cjs.map +1 -0
- package/dist/chunk-AU3RDJYQ.js +243 -0
- package/dist/chunk-AU3RDJYQ.js.map +1 -0
- package/dist/chunk-BHDRUZH5.cjs +33 -0
- package/dist/chunk-BHDRUZH5.cjs.map +1 -0
- package/dist/chunk-BLYVOV3G.cjs +191 -0
- package/dist/chunk-BLYVOV3G.cjs.map +1 -0
- package/dist/chunk-CILNIWYW.cjs +100 -0
- package/dist/chunk-CILNIWYW.cjs.map +1 -0
- package/dist/chunk-DFFP7SJ6.cjs +257 -0
- package/dist/chunk-DFFP7SJ6.cjs.map +1 -0
- package/dist/chunk-DXRCYW42.cjs +568 -0
- package/dist/chunk-DXRCYW42.cjs.map +1 -0
- package/dist/chunk-EBV6HGZB.cjs +33 -0
- package/dist/chunk-EBV6HGZB.cjs.map +1 -0
- package/dist/chunk-EHHHC5JV.js +832 -0
- package/dist/chunk-EHHHC5JV.js.map +1 -0
- package/dist/chunk-F4PYOYHR.js +112 -0
- package/dist/chunk-F4PYOYHR.js.map +1 -0
- package/dist/chunk-GQEDLUMB.js +168 -0
- package/dist/chunk-GQEDLUMB.js.map +1 -0
- package/dist/chunk-H2LESGMX.cjs +319 -0
- package/dist/chunk-H2LESGMX.cjs.map +1 -0
- package/dist/chunk-HTNJT2QU.js +11674 -0
- package/dist/chunk-HTNJT2QU.js.map +1 -0
- package/dist/chunk-IIISFUW4.cjs +11786 -0
- package/dist/chunk-IIISFUW4.cjs.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-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-KUBVDIF7.cjs +653 -0
- package/dist/chunk-KUBVDIF7.cjs.map +1 -0
- package/dist/chunk-KYAOSBQN.js +31 -0
- package/dist/chunk-KYAOSBQN.js.map +1 -0
- package/dist/chunk-LJ7LMEXO.js +36 -0
- package/dist/chunk-LJ7LMEXO.js.map +1 -0
- package/dist/chunk-MT3KLB2Q.cjs +944 -0
- package/dist/chunk-MT3KLB2Q.cjs.map +1 -0
- package/dist/chunk-MU3RY46O.js +932 -0
- package/dist/chunk-MU3RY46O.js.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-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-PXCHPZTP.cjs +839 -0
- package/dist/chunk-PXCHPZTP.cjs.map +1 -0
- package/dist/chunk-Q7TBBUTX.cjs +110 -0
- package/dist/chunk-Q7TBBUTX.cjs.map +1 -0
- package/dist/chunk-QQMU44KJ.js +612 -0
- package/dist/chunk-QQMU44KJ.js.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-RM6ZWNT3.js +561 -0
- package/dist/chunk-RM6ZWNT3.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-VVGYRZ7S.cjs +38 -0
- package/dist/chunk-VVGYRZ7S.cjs.map +1 -0
- package/dist/chunk-W5256BJ4.js +56 -0
- package/dist/chunk-W5256BJ4.js.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-Y6W5V2CI.js +19 -0
- package/dist/chunk-Y6W5V2CI.js.map +1 -0
- package/dist/chunk-Z4QPZ3Z3.cjs +114 -0
- package/dist/chunk-Z4QPZ3Z3.cjs.map +1 -0
- package/dist/createEngineGridQuery-Dmq3i5v3.d.cts +884 -0
- package/dist/createEngineGridQuery-Mt1hc33m.d.ts +884 -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 +504 -0
- package/dist/headless.d.ts +504 -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 +8002 -11409
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +437 -2305
- package/dist/index.d.ts +437 -2305
- package/dist/index.js +7244 -11083
- 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 +184 -28
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../packages/plugins/pdf/src/TextPdfRenderer.ts","../packages/plugins/pdf/src/PdfExportPlugin.ts","../packages/plugins/pdf/src/pdfBuilder.ts","../packages/plugins/pdf/src/parseTtf.ts","../packages/plugins/pdf/src/shapeRtl.ts","../packages/plugins/pdf/src/VazirmatnPdfRenderer.ts"],"names":[],"mappings":"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","file":"chunk-MU3RY46O.js","sourcesContent":["import type { ExportSource } from '../../../../application/plugins/GridPlugin';\r\nimport type { PdfRenderer } from '../../../../application/ports/PdfRenderer';\r\nimport { formatExportValue } from '../../excel/src/formatExportValue';\r\n\r\n/**\r\n * Legacy Helvetica PDF (8 columns × 40 rows). Kept for tests and Host opt-in.\r\n * Product default is {@link VazirmatnPdfRenderer}.\r\n *\r\n * @deprecated Use VazirmatnPdfRenderer.\r\n */\r\nexport class TextPdfRenderer implements PdfRenderer {\r\n async render(\r\n source: ExportSource,\r\n options?: { title?: string },\r\n ): Promise<Blob> {\r\n const lines: string[] = [options?.title ?? 'Export'];\r\n const columns = source.columns.slice(0, 8);\r\n lines.push(columns.map((c) => c.fieldCaption ?? c.fieldName).join(' | '));\r\n\r\n for (const row of source.rows.slice(0, 40)) {\r\n const prefix = row.kind === 'group' ? '▸ ' : '';\r\n lines.push(\r\n prefix +\r\n columns\r\n .map((col) => {\r\n const cell = row.cells[col.fieldName];\r\n const raw = cell?.display ?? cell?.value ?? '';\r\n return formatExportValue(raw, col.fieldType).slice(0, 24);\r\n })\r\n .join(' | '),\r\n );\r\n }\r\n\r\n const content = lines\r\n .map((line, i) => {\r\n const safe = line.replace(/[()\\\\]/g, ' ');\r\n const y = 750 - i * 14;\r\n return `BT /F1 10 Tf 40 ${y} Td (${safe}) Tj ET`;\r\n })\r\n .join('\\n');\r\n\r\n const stream = content;\r\n const objects = [\r\n '1 0 obj<< /Type /Catalog /Pages 2 0 R >>endobj\\n',\r\n '2 0 obj<< /Type /Pages /Kids [3 0 R] /Count 1 >>endobj\\n',\r\n '3 0 obj<< /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] /Contents 4 0 R /Resources<< /Font<< /F1 5 0 R >> >> >>endobj\\n',\r\n `4 0 obj<< /Length ${stream.length} >>stream\\n${stream}\\nendstream\\nendobj\\n`,\r\n '5 0 obj<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>endobj\\n',\r\n ];\r\n\r\n let body = '%PDF-1.1\\n';\r\n const offsets: number[] = [0];\r\n for (const obj of objects) {\r\n offsets.push(body.length);\r\n body += obj;\r\n }\r\n const xrefStart = body.length;\r\n body += `xref\\n0 ${objects.length + 1}\\n`;\r\n body += '0000000000 65535 f \\n';\r\n for (let i = 1; i <= objects.length; i += 1) {\r\n body += `${String(offsets[i]).padStart(10, '0')} 00000 n \\n`;\r\n }\r\n body += `trailer<< /Size ${objects.length + 1} /Root 1 0 R >>\\n`;\r\n body += `startxref\\n${xrefStart}\\n%%EOF\\n`;\r\n\r\n return new Blob([body], { type: 'application/pdf' });\r\n }\r\n}\r\n","import type {\r\n ExportRequestedPayload,\r\n GridEvent,\r\n} from '../../../../domain/types/GridEvent';\r\nimport type {\r\n GridPlugin,\r\n GridPluginContext,\r\n} from '../../../../application/plugins/GridPlugin';\r\nimport type { PdfRenderer } from '../../../../application/ports/PdfRenderer';\r\nimport type { DocumentPdfTemplate } from './documentTemplate';\r\nimport { TextPdfRenderer } from './TextPdfRenderer';\r\nimport { downloadBlob } from '../../excel/src/buildXlsxBlob';\r\n\r\nexport type PdfExportPluginOptions = {\r\n renderer?: PdfRenderer;\r\n download?: boolean;\r\n /** Document chrome for VazirmatnPdfRenderer (PR-141). */\r\n template?: DocumentPdfTemplate;\r\n onBlob?: (blob: Blob, meta: { fileName: string; rowCount: number }) => void;\r\n};\r\n\r\n/**\r\n * Subscribes to EXPORT_REQUESTED (format=pdf); Domain stays untouched.\r\n *\r\n * Default renderer is legacy `TextPdfRenderer` so `./plugins/pdf` stays free of\r\n * font bytes (PR-76 / D15). For Persian PDF:\r\n * `import { createVazirmatnPdfExportPlugin } from 'persian-data-grid/plugins/pdf/fonts/vazirmatn'`.\r\n */\r\nexport class PdfExportPlugin implements GridPlugin {\r\n readonly name = 'pdf-export';\r\n private unsub: (() => void) | null = null;\r\n private readonly renderer: PdfRenderer;\r\n\r\n constructor(private readonly options: PdfExportPluginOptions = {}) {\r\n this.renderer = options.renderer ?? new TextPdfRenderer();\r\n }\r\n\r\n register(ctx: GridPluginContext): void {\r\n this.unsub = ctx.bus.subscribeAll((event) => {\r\n void this.onEvent(ctx, event);\r\n });\r\n }\r\n\r\n dispose(): void {\r\n this.unsub?.();\r\n this.unsub = null;\r\n }\r\n\r\n private async onEvent(\r\n ctx: GridPluginContext,\r\n event: GridEvent,\r\n ): Promise<void> {\r\n if (event.type !== 'EXPORT_REQUESTED') return;\r\n if (event.tableId !== ctx.tableId) return;\r\n\r\n const payload = event.payload as ExportRequestedPayload;\r\n if (payload.format !== 'pdf') return;\r\n\r\n try {\r\n const source = ctx.query.getExportSource(\r\n payload.collectionScope ?? 'active',\r\n );\r\n if (!source) {\r\n throw new Error('NO_EXPORT_SOURCE');\r\n }\r\n\r\n const blob = await this.renderer.render(source, {\r\n title: payload.fileName ?? 'Export',\r\n direction: payload.direction,\r\n template: this.options.template,\r\n });\r\n\r\n const fileName =\r\n payload.fileName ??\r\n `export-${new Date().toISOString().slice(0, 10)}.pdf`;\r\n const rowCount = source.rows.length;\r\n\r\n if (this.options.download !== false) {\r\n downloadBlob(blob, fileName);\r\n }\r\n this.options.onBlob?.(blob, { fileName, rowCount });\r\n\r\n await ctx.bus.publish({\r\n eventId: `${Date.now()}-pdf-ok`,\r\n type: 'PDF_EXPORT_COMPLETED',\r\n tableId: ctx.tableId,\r\n streamId: `table/${ctx.tableId}/view`,\r\n version: 0,\r\n occurredAt: Date.now(),\r\n actorId: event.actorId,\r\n correlationId: event.correlationId,\r\n causationId: event.eventId,\r\n payload: {\r\n format: 'pdf' as const,\r\n rowCount,\r\n blobId: fileName,\r\n },\r\n });\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : String(err);\r\n await ctx.bus.publish({\r\n eventId: `${Date.now()}-pdf-fail`,\r\n type: 'PDF_EXPORT_FAILED',\r\n tableId: ctx.tableId,\r\n streamId: `table/${ctx.tableId}/view`,\r\n version: 0,\r\n occurredAt: Date.now(),\r\n actorId: event.actorId,\r\n correlationId: event.correlationId,\r\n causationId: event.eventId,\r\n payload: {\r\n format: 'pdf' as const,\r\n code: message === 'NO_EXPORT_SOURCE' ? message : 'EXPORT_FAILED',\r\n message,\r\n },\r\n });\r\n }\r\n }\r\n}\r\n","import { deflateSync } from 'fflate';\r\n\r\nconst encoder = new TextEncoder();\r\n\r\nfunction concat(chunks: Uint8Array[]): Uint8Array {\r\n let total = 0;\r\n for (const c of chunks) total += c.length;\r\n const out = new Uint8Array(total);\r\n let o = 0;\r\n for (const c of chunks) {\r\n out.set(c, o);\r\n o += c.length;\r\n }\r\n return out;\r\n}\r\n\r\nfunction pad10(n: number): string {\r\n return String(n).padStart(10, '0');\r\n}\r\n\r\nexport class PdfBuilder {\r\n private readonly objects: Uint8Array[] = [];\r\n\r\n addAscii(body: string): number {\r\n this.objects.push(encoder.encode(body));\r\n return this.objects.length;\r\n }\r\n\r\n replaceAscii(objNum: number, body: string): void {\r\n this.objects[objNum - 1] = encoder.encode(body);\r\n }\r\n\r\n addFlate(uncompressed: Uint8Array, extraDict = ''): number {\r\n const compressed = deflateSync(uncompressed, { level: 9 });\r\n const dict = `<< /Filter /FlateDecode /Length ${compressed.length} ${extraDict}>>`;\r\n const header = encoder.encode(`${dict}stream\\n`);\r\n const tail = encoder.encode('\\nendstream\\n');\r\n this.objects.push(concat([header, compressed, tail]));\r\n return this.objects.length;\r\n }\r\n\r\n /** Raw stream (e.g. JPEG with `/Filter /DCTDecode`). `dict` is a full `<< … >>`. */\r\n addRawStream(data: Uint8Array, dict: string): number {\r\n const header = encoder.encode(`${dict}\\nstream\\n`);\r\n const tail = encoder.encode('\\nendstream\\n');\r\n this.objects.push(concat([header, data, tail]));\r\n return this.objects.length;\r\n }\r\n\r\n build(): Uint8Array {\r\n const parts: Uint8Array[] = [encoder.encode('%PDF-1.4\\n%\\x80\\x80\\x80\\x80\\n')];\r\n const offsets = [0];\r\n let pos = parts[0].length;\r\n for (let i = 0; i < this.objects.length; i += 1) {\r\n offsets.push(pos);\r\n const head = encoder.encode(`${i + 1} 0 obj\\n`);\r\n const tail = encoder.encode('endobj\\n');\r\n const body = this.objects[i];\r\n parts.push(head, body, tail);\r\n pos += head.length + body.length + tail.length;\r\n }\r\n const xrefStart = pos;\r\n let xref = `xref\\n0 ${this.objects.length + 1}\\n0000000000 65535 f \\n`;\r\n for (let i = 1; i <= this.objects.length; i += 1) {\r\n xref += `${pad10(offsets[i] ?? 0)} 00000 n \\n`;\r\n }\r\n xref += `trailer<< /Size ${this.objects.length + 1} /Root 1 0 R >>\\n`;\r\n xref += `startxref\\n${xrefStart}\\n%%EOF\\n`;\r\n parts.push(encoder.encode(xref));\r\n return concat(parts);\r\n }\r\n}\r\n\r\nexport function pdfEscapeTextHex(gids: readonly number[]): string {\r\n return gids.map((g) => g.toString(16).padStart(4, '0')).join('');\r\n}\r\n","/** Minimal TrueType reader for CIDFontType2 embedding (cmap + metrics). */\r\n\r\nexport type TtfMetrics = {\r\n unitsPerEm: number;\r\n xMin: number;\r\n yMin: number;\r\n xMax: number;\r\n yMax: number;\r\n ascent: number;\r\n descent: number;\r\n italicAngle: number;\r\n numGlyphs: number;\r\n};\r\n\r\nexport type ParsedTtf = {\r\n bytes: Uint8Array;\r\n metrics: TtfMetrics;\r\n glyphId: (codePoint: number) => number;\r\n advance: (glyphId: number) => number;\r\n};\r\n\r\nfunction u16(buf: Uint8Array, offset: number): number {\r\n return (buf[offset] << 8) | buf[offset + 1];\r\n}\r\n\r\nfunction u32(buf: Uint8Array, offset: number): number {\r\n return (\r\n ((buf[offset] << 24) | (buf[offset + 1] << 16) | (buf[offset + 2] << 8) | buf[offset + 3]) >>>\r\n 0\r\n );\r\n}\r\n\r\nfunction i16(buf: Uint8Array, offset: number): number {\r\n const v = u16(buf, offset);\r\n return v > 32767 ? v - 65536 : v;\r\n}\r\n\r\nfunction tagAt(buf: Uint8Array, offset: number): string {\r\n return String.fromCharCode(buf[offset], buf[offset + 1], buf[offset + 2], buf[offset + 3]);\r\n}\r\n\r\nfunction tableMap(buf: Uint8Array): Map<string, { offset: number; length: number }> {\r\n const numTables = u16(buf, 4);\r\n const tables = new Map<string, { offset: number; length: number }>();\r\n for (let i = 0; i < numTables; i += 1) {\r\n const o = 12 + i * 16;\r\n tables.set(tagAt(buf, o), { offset: u32(buf, o + 8), length: u32(buf, o + 12) });\r\n }\r\n return tables;\r\n}\r\n\r\nfunction parseCmap(buf: Uint8Array, cmapOffset: number): (code: number) => number {\r\n const numTables = u16(buf, cmapOffset + 2);\r\n let format4 = -1;\r\n let format12 = -1;\r\n for (let i = 0; i < numTables; i += 1) {\r\n const rec = cmapOffset + 4 + i * 8;\r\n const platform = u16(buf, rec);\r\n const encoding = u16(buf, rec + 2);\r\n const offset = cmapOffset + u32(buf, rec + 4);\r\n const format = u16(buf, offset);\r\n if (format === 12 && (platform === 3 || platform === 0)) format12 = offset;\r\n if (format === 4 && (platform === 3 || platform === 0) && encoding <= 1) {\r\n format4 = offset;\r\n }\r\n }\r\n\r\n if (format12 >= 0) {\r\n const nGroups = u32(buf, format12 + 12);\r\n const groups: Array<{ start: number; end: number; glyph: number }> = [];\r\n for (let i = 0; i < nGroups; i += 1) {\r\n const o = format12 + 16 + i * 12;\r\n groups.push({\r\n start: u32(buf, o),\r\n end: u32(buf, o + 4),\r\n glyph: u32(buf, o + 8),\r\n });\r\n }\r\n return (code: number) => {\r\n for (const g of groups) {\r\n if (code >= g.start && code <= g.end) return g.glyph + (code - g.start);\r\n }\r\n return 0;\r\n };\r\n }\r\n\r\n if (format4 < 0) {\r\n return () => 0;\r\n }\r\n\r\n const segCount = u16(buf, format4 + 6) / 2;\r\n const endCodes = format4 + 14;\r\n const startCodes = endCodes + 2 + segCount * 2;\r\n const idDeltas = startCodes + segCount * 2;\r\n const idRangeOffsets = idDeltas + segCount * 2;\r\n\r\n return (code: number) => {\r\n for (let i = 0; i < segCount; i += 1) {\r\n const end = u16(buf, endCodes + i * 2);\r\n if (code > end) continue;\r\n const start = u16(buf, startCodes + i * 2);\r\n if (code < start) return 0;\r\n const rangeOffset = u16(buf, idRangeOffsets + i * 2);\r\n const delta = i16(buf, idDeltas + i * 2);\r\n if (rangeOffset === 0) return (code + delta) & 0xffff;\r\n const glyphOffset =\r\n idRangeOffsets + i * 2 + rangeOffset + (code - start) * 2;\r\n const glyph = u16(buf, glyphOffset);\r\n if (glyph === 0) return 0;\r\n return (glyph + delta) & 0xffff;\r\n }\r\n return 0;\r\n };\r\n}\r\n\r\nexport function parseTtf(bytes: Uint8Array): ParsedTtf {\r\n const tables = tableMap(bytes);\r\n const head = tables.get('head');\r\n const hhea = tables.get('hhea');\r\n const hmtx = tables.get('hmtx');\r\n const maxp = tables.get('maxp');\r\n const cmap = tables.get('cmap');\r\n if (!head || !hhea || !hmtx || !maxp || !cmap) {\r\n throw new Error('VAZIRMATN_TTF_TABLES');\r\n }\r\n\r\n const unitsPerEm = u16(bytes, head.offset + 18);\r\n const metrics: TtfMetrics = {\r\n unitsPerEm,\r\n xMin: i16(bytes, head.offset + 36),\r\n yMin: i16(bytes, head.offset + 38),\r\n xMax: i16(bytes, head.offset + 40),\r\n yMax: i16(bytes, head.offset + 42),\r\n ascent: i16(bytes, hhea.offset + 4),\r\n descent: i16(bytes, hhea.offset + 6),\r\n italicAngle: 0,\r\n numGlyphs: u16(bytes, maxp.offset + 4),\r\n };\r\n\r\n const numberOfHMetrics = u16(bytes, hhea.offset + 34);\r\n const advances = new Uint16Array(metrics.numGlyphs);\r\n for (let i = 0; i < numberOfHMetrics; i += 1) {\r\n advances[i] = u16(bytes, hmtx.offset + i * 4);\r\n }\r\n const lastAdvance = advances[numberOfHMetrics - 1] ?? metrics.unitsPerEm;\r\n for (let i = numberOfHMetrics; i < metrics.numGlyphs; i += 1) {\r\n advances[i] = lastAdvance;\r\n }\r\n\r\n const glyphId = parseCmap(bytes, cmap.offset);\r\n return {\r\n bytes,\r\n metrics,\r\n glyphId,\r\n advance: (gid) => advances[gid] ?? lastAdvance,\r\n };\r\n}\r\n\r\nexport function pdfWidth(advance: number, unitsPerEm: number): number {\r\n return (advance * 1000) / unitsPerEm;\r\n}\r\n","/**\r\n * Arabic presentation-form shaping + a simple RTL visual order.\r\n * Isolated letters are readable; this joins Persian letters for PDF.\r\n */\r\n\r\ntype Forms = readonly [isolated: number, final: number, initial: number, medial: number];\r\n\r\nconst FORMS: Record<number, Forms> = {\r\n 0x0627: [0xfe8d, 0xfe8e, 0xfe8d, 0xfe8e],\r\n 0x0628: [0xfe8f, 0xfe90, 0xfe91, 0xfe92],\r\n 0x067e: [0xfb56, 0xfb57, 0xfb58, 0xfb59],\r\n 0x062a: [0xfe95, 0xfe96, 0xfe97, 0xfe98],\r\n 0x062b: [0xfe99, 0xfe9a, 0xfe9b, 0xfe9c],\r\n 0x062c: [0xfe9d, 0xfe9e, 0xfe9f, 0xfea0],\r\n 0x0686: [0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d],\r\n 0x062d: [0xfea1, 0xfea2, 0xfea3, 0xfea4],\r\n 0x062e: [0xfea5, 0xfea6, 0xfea7, 0xfea8],\r\n 0x062f: [0xfea9, 0xfeaa, 0xfea9, 0xfeaa],\r\n 0x0630: [0xfeab, 0xfeac, 0xfeab, 0xfeac],\r\n 0x0631: [0xfead, 0xfeae, 0xfead, 0xfeae],\r\n 0x0632: [0xfeaf, 0xfeb0, 0xfeaf, 0xfeb0],\r\n 0x0698: [0xfb8a, 0xfb8b, 0xfb8a, 0xfb8b],\r\n 0x0633: [0xfeb1, 0xfeb2, 0xfeb3, 0xfeb4],\r\n 0x0634: [0xfeb5, 0xfeb6, 0xfeb7, 0xfeb8],\r\n 0x0635: [0xfeb9, 0xfeba, 0xfebb, 0xfebc],\r\n 0x0636: [0xfebd, 0xfebe, 0xfebf, 0xfec0],\r\n 0x0637: [0xfec1, 0xfec2, 0xfec3, 0xfec4],\r\n 0x0638: [0xfec5, 0xfec6, 0xfec7, 0xfec8],\r\n 0x0639: [0xfec9, 0xfeca, 0xfecb, 0xfecc],\r\n 0x063a: [0xfecd, 0xfece, 0xfecf, 0xfed0],\r\n 0x0641: [0xfed1, 0xfed2, 0xfed3, 0xfed4],\r\n 0x0642: [0xfed5, 0xfed6, 0xfed7, 0xfed8],\r\n 0x06a9: [0xfb8e, 0xfb8f, 0xfb90, 0xfb91],\r\n 0x0643: [0xfed9, 0xfeda, 0xfedb, 0xfedc],\r\n 0x06af: [0xfb92, 0xfb93, 0xfb94, 0xfb95],\r\n 0x0644: [0xfedd, 0xfede, 0xfedf, 0xfee0],\r\n 0x0645: [0xfee1, 0xfee2, 0xfee3, 0xfee4],\r\n 0x0646: [0xfee5, 0xfee6, 0xfee7, 0xfee8],\r\n 0x0647: [0xfee9, 0xfeea, 0xfeeb, 0xfeec],\r\n 0x0648: [0xfeed, 0xfeee, 0xfeed, 0xfeee],\r\n 0x06cc: [0xfbfc, 0xfbfd, 0xfbfe, 0xfbff],\r\n 0x064a: [0xfef1, 0xfef2, 0xfef3, 0xfef4],\r\n 0x0622: [0xfe81, 0xfe82, 0xfe81, 0xfe82],\r\n 0x0629: [0xfe93, 0xfe94, 0xfe93, 0xfe94],\r\n};\r\n\r\nconst RIGHT_ONLY = new Set([\r\n 0x0622, 0x0627, 0x0629, 0x062f, 0x0630, 0x0631, 0x0632, 0x0698, 0x0648,\r\n]);\r\n\r\nfunction canConnect(cp: number, side: 'left' | 'right'): boolean {\r\n if (!FORMS[cp]) return false;\r\n if (RIGHT_ONLY.has(cp)) return side === 'right';\r\n return true;\r\n}\r\n\r\nfunction isLetter(cp: number): boolean {\r\n return cp in FORMS;\r\n}\r\n\r\nexport function shapeArabic(input: string): string {\r\n const cps = [...input].map((ch) => ch.codePointAt(0) ?? 0);\r\n const out: number[] = [];\r\n for (let i = 0; i < cps.length; i += 1) {\r\n const cp = cps[i] ?? 0;\r\n const forms = FORMS[cp];\r\n if (!forms) {\r\n out.push(cp);\r\n continue;\r\n }\r\n let prev = i - 1;\r\n while (prev >= 0 && (cps[prev] === 0x0640 || cps[prev] === 0x200c)) prev -= 1;\r\n let next = i + 1;\r\n while (next < cps.length && (cps[next] === 0x0640 || cps[next] === 0x200d)) next += 1;\r\n const joinsPrev = prev >= 0 && isLetter(cps[prev] ?? 0) && canConnect(cps[prev] ?? 0, 'left');\r\n const joinsNext =\r\n next < cps.length && isLetter(cps[next] ?? 0) && canConnect(cp, 'left');\r\n const form = joinsPrev && joinsNext ? 3 : joinsNext ? 2 : joinsPrev ? 1 : 0;\r\n out.push(forms[form] ?? cp);\r\n }\r\n return String.fromCodePoint(...out);\r\n}\r\n\r\nconst LTR_RE = /^[0-9A-Za-z۰-۹.,:%/+-]+$/;\r\n\r\nfunction reverseGraphemes(s: string): string {\r\n return [...s].reverse().join('');\r\n}\r\n\r\n/** Visual order for an RTL line (Persian + Latin/digit islands). */\r\nexport function rtlVisual(input: string): string {\r\n const shaped = shapeArabic(input);\r\n const parts = shaped.split(/([0-9A-Za-z۰-۹.,:%/+-]+)/);\r\n const visual: string[] = [];\r\n for (let i = parts.length - 1; i >= 0; i -= 1) {\r\n const part = parts[i] ?? '';\r\n if (!part) continue;\r\n visual.push(LTR_RE.test(part) ? part : reverseGraphemes(part));\r\n }\r\n return visual.join('');\r\n}\r\n","import type { ExportSource } from '../../../../application/plugins/GridPlugin';\r\nimport type {\r\n PdfRenderOptions,\r\n PdfRenderer,\r\n} from '../../../../application/ports/PdfRenderer';\r\nimport { formatExportValue } from '../../excel/src/formatExportValue';\r\nimport type { DocumentPdfTemplate } from './documentTemplate';\r\nimport { PdfBuilder, pdfEscapeTextHex } from './pdfBuilder';\r\nimport { parseTtf, pdfWidth, type ParsedTtf } from './parseTtf';\r\nimport { rtlVisual } from './shapeRtl';\r\n\r\nconst PAGE_W = 595;\r\nconst PAGE_H = 842;\r\nconst MARGIN = 36;\r\nconst TITLE_SIZE = 12;\r\nconst SUB_SIZE = 9;\r\nconst CELL_SIZE = 8;\r\nconst ROW_H = 16;\r\nconst HEADER_H = 18;\r\nconst FOOTER_H = 22;\r\nconst SIGN_H = 56;\r\n\r\nfunction cellText(raw: unknown, fieldType?: string): string {\r\n if (fieldType === 'checkbox') {\r\n return raw ? 'بله' : 'خیر';\r\n }\r\n return formatExportValue(raw, fieldType);\r\n}\r\n\r\nfunction measure(font: ParsedTtf, text: string, size: number): number {\r\n let w = 0;\r\n for (const ch of text) {\r\n const cp = ch.codePointAt(0) ?? 0;\r\n const gid = font.glyphId(cp);\r\n w += pdfWidth(font.advance(gid), font.metrics.unitsPerEm);\r\n }\r\n return (w * size) / 1000;\r\n}\r\n\r\nfunction fitText(\r\n font: ParsedTtf,\r\n text: string,\r\n size: number,\r\n maxWidth: number,\r\n): string {\r\n if (measure(font, text, size) <= maxWidth) return text;\r\n const ellipsis = '...';\r\n let lo = 0;\r\n let hi = [...text].length;\r\n while (lo < hi) {\r\n const mid = Math.ceil((lo + hi) / 2);\r\n const slice = [...text].slice(0, mid).join('') + ellipsis;\r\n if (measure(font, slice, size) <= maxWidth) lo = mid;\r\n else hi = mid - 1;\r\n }\r\n if (lo <= 0) return ellipsis;\r\n return [...text].slice(0, lo).join('') + ellipsis;\r\n}\r\n\r\nfunction toGids(font: ParsedTtf, text: string): number[] {\r\n const gids: number[] = [];\r\n for (const ch of text) {\r\n const cp = ch.codePointAt(0) ?? 0;\r\n gids.push(font.glyphId(cp));\r\n }\r\n return gids;\r\n}\r\n\r\nfunction toUnicodeCmap(pairs: Array<{ gid: number; unicode: number }>): string {\r\n const unique = new Map<number, number>();\r\n for (const p of pairs) {\r\n if (!unique.has(p.gid)) unique.set(p.gid, p.unicode);\r\n }\r\n const entries = [...unique.entries()];\r\n const chunks: string[] = [];\r\n for (let i = 0; i < entries.length; i += 100) {\r\n const slice = entries.slice(i, i + 100);\r\n chunks.push(`${slice.length} beginbfchar`);\r\n for (const [gid, uni] of slice) {\r\n const g = gid.toString(16).padStart(4, '0');\r\n const u = uni.toString(16).padStart(uni > 0xffff ? 8 : 4, '0');\r\n chunks.push(`<${g}> <${u}>`);\r\n }\r\n chunks.push('endbfchar');\r\n }\r\n return `%!PS-Adobe-3.0 Resource-CMap\r\n%%BeginResource: CMap (Vazirmatn-UCS)\r\n/CIDInit /ProcSet findresource begin\r\n12 dict begin\r\nbegincmap\r\n/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> def\r\n/CMapName /Vazirmatn-UCS def\r\n/CMapType 2 def\r\n1 begincodespacerange\r\n<0000> <FFFF>\r\nendcodespacerange\r\n${chunks.join('\\n')}\r\nendcmap\r\nCMapName currentdict /CMap defineresource pop\r\nend\r\nend\r\n%%EndResource\r\n`;\r\n}\r\n\r\nfunction toSumNumber(raw: unknown): number | null {\r\n if (typeof raw === 'number' && Number.isFinite(raw)) return Math.trunc(raw);\r\n if (typeof raw === 'bigint') {\r\n const n = Number(raw);\r\n return Number.isSafeInteger(n) ? n : null;\r\n }\r\n if (typeof raw === 'string') {\r\n const n = Number(\r\n raw\r\n .trim()\r\n .replace(/[۰-۹]/g, (d) => String('۰۱۲۳۴۵۶۷۸۹'.indexOf(d)))\r\n .replace(/,/g, ''),\r\n );\r\n return Number.isFinite(n) ? Math.trunc(n) : null;\r\n }\r\n return null;\r\n}\r\n\r\nfunction readJpegSize(bytes: Uint8Array): { w: number; h: number } | null {\r\n if (bytes.length < 4 || bytes[0] !== 0xff || bytes[1] !== 0xd8) return null;\r\n let i = 2;\r\n while (i + 9 < bytes.length) {\r\n if (bytes[i] !== 0xff) {\r\n i += 1;\r\n continue;\r\n }\r\n const marker = bytes[i + 1]!;\r\n const len = (bytes[i + 2]! << 8) | bytes[i + 3]!;\r\n if (marker === 0xc0 || marker === 0xc1 || marker === 0xc2) {\r\n const h = (bytes[i + 5]! << 8) | bytes[i + 6]!;\r\n const w = (bytes[i + 7]! << 8) | bytes[i + 8]!;\r\n return { w, h };\r\n }\r\n i += 2 + len;\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Persian table PDF: embeds Vazirmatn (OFL) as CIDFontType2, RTL grid, no 8×40 cap.\r\n * PR-141: optional {@link DocumentPdfTemplate} for document chrome.\r\n */\r\nexport class VazirmatnPdfRenderer implements PdfRenderer {\r\n constructor(private readonly fontBytes: Uint8Array) {\r\n if (!fontBytes?.byteLength) {\r\n throw new Error(\r\n 'VazirmatnPdfRenderer requires font bytes from persian-data-grid/plugins/pdf/fonts/vazirmatn',\r\n );\r\n }\r\n }\r\n\r\n async render(\r\n source: ExportSource,\r\n options?: PdfRenderOptions,\r\n ): Promise<Blob> {\r\n const font = parseTtf(this.fontBytes);\r\n const rtl = options?.direction !== 'ltr';\r\n const template = options?.template as DocumentPdfTemplate | undefined;\r\n const title =\r\n template?.header?.title ?? options?.title ?? 'اقلام سند';\r\n const columns = source.columns.filter((c) => c.fieldName !== 'index');\r\n const colCount = Math.max(1, columns.length);\r\n const tableWidth = PAGE_W - MARGIN * 2;\r\n const colW = tableWidth / colCount;\r\n const used: Array<{ gid: number; unicode: number }> = [];\r\n\r\n const note = (text: string) => {\r\n const visual = rtl ? rtlVisual(text) : text;\r\n for (const ch of visual) {\r\n const cp = ch.codePointAt(0) ?? 0;\r\n used.push({ gid: font.glyphId(cp), unicode: cp });\r\n }\r\n return visual;\r\n };\r\n\r\n const titleVisual = note(title);\r\n const subtitleVisual = template?.header?.subtitle\r\n ? note(template.header.subtitle)\r\n : null;\r\n const metaVisuals = (template?.header?.meta ?? []).map((m) => note(m));\r\n const footerTextVisual = template?.footer?.text\r\n ? note(template.footer.text)\r\n : null;\r\n const pageFmt = template?.footer?.pageNumberFormat ?? '{page} / {pages}';\r\n const showPageNumber =\r\n template != null && template.footer?.showPageNumber !== false;\r\n const repeatHeader = template == null || template.repeatTableHeader !== false;\r\n const totalsLabelVisual = template?.pageTotals\r\n ? note(template.pageTotals.label ?? 'جمع صفحه')\r\n : null;\r\n const signLabelVisual = template?.signature\r\n ? note(template.signature.label ?? 'امضا')\r\n : null;\r\n const stampLabelVisual = template?.stamp\r\n ? note(template.stamp.label ?? 'مهر')\r\n : null;\r\n\r\n // Pre-register digits / separators used in page numbers & totals\r\n note('0123456789 /');\r\n\r\n const headers = columns.map((c) =>\r\n note(c.fieldCaption ?? c.fieldName),\r\n );\r\n const body = source.rows.map((row) =>\r\n columns.map((col) => {\r\n const cell = row.cells[col.fieldName];\r\n const raw = cell?.display ?? cell?.value ?? '';\r\n return note(cellText(raw, col.fieldType));\r\n }),\r\n );\r\n const bodyNums = source.rows.map((row) => {\r\n const map = new Map<string, number | null>();\r\n for (const col of columns) {\r\n const cell = row.cells[col.fieldName];\r\n const raw = cell?.value ?? cell?.display ?? '';\r\n map.set(col.fieldName, toSumNumber(raw));\r\n }\r\n return map;\r\n });\r\n\r\n let logoDrawW = template?.logo?.width ?? 64;\r\n let logoDrawH = template?.logo?.height ?? 48;\r\n if (template?.logo?.jpegBytes?.byteLength) {\r\n const size = readJpegSize(template.logo.jpegBytes);\r\n if (size && template.logo.height == null) {\r\n logoDrawH = Math.round((logoDrawW * size.h) / Math.max(1, size.w));\r\n }\r\n }\r\n\r\n const headerBand = template\r\n ? Math.max(\r\n logoDrawH,\r\n 28 + (subtitleVisual ? 14 : 0) + metaVisuals.length * 12,\r\n ) + 12\r\n : TITLE_SIZE + 16;\r\n const footerBand =\r\n template && (footerTextVisual || showPageNumber) ? FOOTER_H + 8 : 0;\r\n const signBand =\r\n template && (signLabelVisual || stampLabelVisual) ? SIGN_H + 8 : 0;\r\n const totalsBand = template?.pageTotals ? ROW_H + 4 : 0;\r\n\r\n const usable = (withSign: boolean) =>\r\n PAGE_H -\r\n MARGIN * 2 -\r\n headerBand -\r\n footerBand -\r\n (repeatHeader ? HEADER_H : 0) -\r\n totalsBand -\r\n (withSign ? signBand : 0);\r\n\r\n const pageRowCounts: number[] = [];\r\n let remaining = body.length;\r\n if (remaining === 0) {\r\n pageRowCounts.push(0);\r\n } else {\r\n while (remaining > 0) {\r\n const isLikelyLast = remaining <= Math.floor(usable(false) / ROW_H);\r\n const budget = Math.max(\r\n 1,\r\n Math.floor(usable(isLikelyLast && signBand > 0) / ROW_H),\r\n );\r\n const take = Math.min(remaining, budget);\r\n pageRowCounts.push(take);\r\n remaining -= take;\r\n if (pageRowCounts.length > 10_000) break;\r\n }\r\n if (signBand > 0) {\r\n const lastBudget = Math.max(1, Math.floor(usable(true) / ROW_H));\r\n const lastIdx = pageRowCounts.length - 1;\r\n if ((pageRowCounts[lastIdx] ?? 0) > lastBudget) {\r\n const overflow = (pageRowCounts[lastIdx] ?? 0) - lastBudget;\r\n pageRowCounts[lastIdx] = lastBudget;\r\n pageRowCounts.push(overflow);\r\n }\r\n }\r\n }\r\n const pageCount = Math.max(1, pageRowCounts.length);\r\n\r\n // Register page-number & totals glyph strings before embedding the font\r\n const pageLabels = Array.from({ length: pageCount }, (_, p) =>\r\n note(\r\n pageFmt\r\n .replace('{page}', String(p + 1))\r\n .replace('{pages}', String(pageCount)),\r\n ),\r\n );\r\n const pageTotalCells: string[][] = pageRowCounts.map((take, p) => {\r\n if (!template?.pageTotals || !totalsLabelVisual) return [];\r\n const start = pageRowCounts\r\n .slice(0, p)\r\n .reduce((a, n) => a + n, 0);\r\n const numSlice = bodyNums.slice(start, start + take);\r\n const sums = new Map<string, number>();\r\n for (const colId of template.pageTotals.columns) {\r\n let s = 0;\r\n for (const row of numSlice) {\r\n const n = row.get(colId);\r\n if (n != null) s += n;\r\n }\r\n sums.set(colId, s);\r\n }\r\n return columns.map((col, colIdx) => {\r\n const isTotalCol = template.pageTotals!.columns.includes(col.fieldName);\r\n if (isTotalCol) return note(String(sums.get(col.fieldName) ?? 0));\r\n const labelCol = columns.findIndex(\r\n (c) => !template.pageTotals!.columns.includes(c.fieldName),\r\n );\r\n if (colIdx === (labelCol >= 0 ? labelCol : 0)) return totalsLabelVisual;\r\n return '';\r\n });\r\n });\r\n\r\n const metrics = font.metrics;\r\n const scale = 1000 / metrics.unitsPerEm;\r\n const bbox = [\r\n Math.round(metrics.xMin * scale),\r\n Math.round(metrics.yMin * scale),\r\n Math.round(metrics.xMax * scale),\r\n Math.round(metrics.yMax * scale),\r\n ];\r\n const ascent = Math.round(metrics.ascent * scale);\r\n const descent = Math.round(metrics.descent * scale);\r\n\r\n const usedGids = [...new Set(used.map((u) => u.gid))].sort((a, b) => a - b);\r\n const wParts = usedGids.map((gid) => {\r\n const w = Math.round(pdfWidth(font.advance(gid), metrics.unitsPerEm));\r\n return `${gid} [${w}]`;\r\n });\r\n\r\n const pdf = new PdfBuilder();\r\n pdf.addAscii('<< /Type /Catalog /Pages 2 0 R >>\\n');\r\n const pagesObj = 2;\r\n pdf.addAscii('<< /Type /Pages /Kids [] /Count 0 >>\\n');\r\n\r\n const fontFile = pdf.addFlate(\r\n font.bytes,\r\n `/Length1 ${font.bytes.length} `,\r\n );\r\n const descriptor = pdf.addAscii(\r\n `<< /Type /FontDescriptor /FontName /Vazirmatn /Flags 32 /FontBBox [${bbox.join(' ')}] /ItalicAngle 0 /Ascent ${ascent} /Descent ${descent} /CapHeight ${ascent} /StemV 80 /FontFile2 ${fontFile} 0 R >>\\n`,\r\n );\r\n const cidFont = pdf.addAscii(\r\n `<< /Type /Font /Subtype /CIDFontType2 /BaseFont /Vazirmatn /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> /FontDescriptor ${descriptor} 0 R /DW 500 /W [${wParts.join(' ')}] /CIDToGIDMap /Identity >>\\n`,\r\n );\r\n const toUnicode = pdf.addFlate(\r\n new TextEncoder().encode(toUnicodeCmap(used)),\r\n );\r\n const type0 = pdf.addAscii(\r\n `<< /Type /Font /Subtype /Type0 /BaseFont /Vazirmatn /Encoding /Identity-H /DescendantFonts [${cidFont} 0 R] /ToUnicode ${toUnicode} 0 R >>\\n`,\r\n );\r\n\r\n let logoXObject: number | null = null;\r\n if (template?.logo?.jpegBytes?.byteLength) {\r\n const jpeg = template.logo.jpegBytes;\r\n const size = readJpegSize(jpeg) ?? { w: logoDrawW, h: logoDrawH };\r\n logoXObject = pdf.addRawStream(\r\n jpeg,\r\n `<< /Type /XObject /Subtype /Image /Width ${size.w} /Height ${size.h} /ColorSpace /DeviceRGB /BitsPerComponent 8 /Filter /DCTDecode /Length ${jpeg.length} >>`,\r\n );\r\n }\r\n\r\n const pageObjNums: number[] = [];\r\n\r\n const drawText = (\r\n ops: string[],\r\n text: string,\r\n size: number,\r\n x: number,\r\n y: number,\r\n ) => {\r\n ops.push('BT');\r\n ops.push(`/F1 ${size} Tf`);\r\n ops.push(`${x.toFixed(2)} ${y.toFixed(2)} Td`);\r\n ops.push(`<${pdfEscapeTextHex(toGids(font, text))}> Tj`);\r\n ops.push('ET');\r\n };\r\n\r\n const drawCell = (\r\n ops: string[],\r\n col: number,\r\n top: number,\r\n height: number,\r\n text: string,\r\n header: boolean,\r\n ) => {\r\n const x = rtl\r\n ? PAGE_W - MARGIN - (col + 1) * colW\r\n : MARGIN + col * colW;\r\n if (header) {\r\n ops.push('0.92 g');\r\n ops.push(\r\n `${x.toFixed(2)} ${(top - height).toFixed(2)} ${colW.toFixed(2)} ${height.toFixed(2)} re f`,\r\n );\r\n ops.push('0 g');\r\n }\r\n ops.push('0.55 w 0.35 g');\r\n ops.push(\r\n `${x.toFixed(2)} ${(top - height).toFixed(2)} ${colW.toFixed(2)} ${height.toFixed(2)} re S`,\r\n );\r\n ops.push('0 g');\r\n if (!text) return;\r\n const fitted = fitText(font, text, CELL_SIZE, colW - 6);\r\n const tw = measure(font, fitted, CELL_SIZE);\r\n const tx = rtl ? x + colW - 3 - tw : x + 3;\r\n const ty = top - height + 4.5;\r\n drawText(ops, fitted, CELL_SIZE, tx, ty);\r\n };\r\n\r\n let rowCursor = 0;\r\n for (let p = 0; p < pageCount; p += 1) {\r\n const ops: string[] = [];\r\n const isLast = p === pageCount - 1;\r\n let y = PAGE_H - MARGIN;\r\n\r\n if (template) {\r\n if (logoXObject != null) {\r\n const lx = rtl ? PAGE_W - MARGIN - logoDrawW : MARGIN;\r\n const ly = y - logoDrawH;\r\n ops.push('q');\r\n ops.push(\r\n `${logoDrawW} 0 0 ${logoDrawH} ${lx.toFixed(2)} ${ly.toFixed(2)} cm /Im1 Do`,\r\n );\r\n ops.push('Q');\r\n }\r\n const textOriginX = rtl\r\n ? PAGE_W -\r\n MARGIN -\r\n (logoXObject != null ? logoDrawW + 10 : 0)\r\n : MARGIN + (logoXObject != null ? logoDrawW + 10 : 0);\r\n let ty = y - 12;\r\n const tw = measure(font, titleVisual, TITLE_SIZE);\r\n drawText(\r\n ops,\r\n titleVisual,\r\n TITLE_SIZE,\r\n rtl ? textOriginX - tw : textOriginX,\r\n ty,\r\n );\r\n ty -= 14;\r\n if (subtitleVisual) {\r\n const sw = measure(font, subtitleVisual, SUB_SIZE);\r\n drawText(\r\n ops,\r\n subtitleVisual,\r\n SUB_SIZE,\r\n rtl ? textOriginX - sw : textOriginX,\r\n ty,\r\n );\r\n ty -= 12;\r\n }\r\n for (const meta of metaVisuals) {\r\n const mw = measure(font, meta, SUB_SIZE);\r\n drawText(\r\n ops,\r\n meta,\r\n SUB_SIZE,\r\n rtl ? textOriginX - mw : textOriginX,\r\n ty,\r\n );\r\n ty -= 12;\r\n }\r\n y = PAGE_H - MARGIN - headerBand;\r\n } else {\r\n const titleW = measure(font, titleVisual, TITLE_SIZE);\r\n drawText(\r\n ops,\r\n titleVisual,\r\n TITLE_SIZE,\r\n rtl ? PAGE_W - MARGIN - titleW : MARGIN,\r\n y - 12,\r\n );\r\n y = PAGE_H - MARGIN - headerBand;\r\n }\r\n\r\n if (repeatHeader || p === 0) {\r\n headers.forEach((h, col) => drawCell(ops, col, y, HEADER_H, h, true));\r\n y -= HEADER_H;\r\n }\r\n\r\n const take = pageRowCounts[p] ?? 0;\r\n const slice = body.slice(rowCursor, rowCursor + take);\r\n for (const row of slice) {\r\n row.forEach((cell, col) => drawCell(ops, col, y, ROW_H, cell, false));\r\n y -= ROW_H;\r\n }\r\n\r\n const totalRow = pageTotalCells[p];\r\n if (totalRow && totalRow.length > 0) {\r\n totalRow.forEach((text, colIdx) =>\r\n drawCell(ops, colIdx, y, ROW_H, text, true),\r\n );\r\n y -= ROW_H;\r\n }\r\n\r\n if (isLast && (signLabelVisual || stampLabelVisual)) {\r\n const boxW = (tableWidth - 12) / 2;\r\n const boxH = SIGN_H - 8;\r\n const by = MARGIN + footerBand + 4;\r\n const boxes: Array<{ label: string; x: number }> = [];\r\n if (rtl) {\r\n if (signLabelVisual) {\r\n boxes.push({ label: signLabelVisual, x: PAGE_W - MARGIN - boxW });\r\n }\r\n if (stampLabelVisual) {\r\n boxes.push({\r\n label: stampLabelVisual,\r\n x: PAGE_W - MARGIN - boxW * 2 - 12,\r\n });\r\n }\r\n } else {\r\n if (signLabelVisual) boxes.push({ label: signLabelVisual, x: MARGIN });\r\n if (stampLabelVisual) {\r\n boxes.push({ label: stampLabelVisual, x: MARGIN + boxW + 12 });\r\n }\r\n }\r\n for (const box of boxes) {\r\n ops.push('0.55 w 0.35 g');\r\n ops.push(\r\n `${box.x.toFixed(2)} ${by.toFixed(2)} ${boxW.toFixed(2)} ${boxH.toFixed(2)} re S`,\r\n );\r\n ops.push('0 g');\r\n const lw = measure(font, box.label, SUB_SIZE);\r\n drawText(\r\n ops,\r\n box.label,\r\n SUB_SIZE,\r\n rtl ? box.x + boxW - 6 - lw : box.x + 6,\r\n by + boxH - 14,\r\n );\r\n const lineCount = template?.signature?.lines ?? 2;\r\n for (let li = 0; li < lineCount; li += 1) {\r\n const ly = by + 10 + li * 14;\r\n ops.push('0.4 w 0.6 g');\r\n ops.push(\r\n `${(box.x + 8).toFixed(2)} ${ly.toFixed(2)} m ${(box.x + boxW - 8).toFixed(2)} ${ly.toFixed(2)} l S`,\r\n );\r\n ops.push('0 g');\r\n }\r\n }\r\n }\r\n\r\n if (footerBand > 0) {\r\n const fy = MARGIN + 6;\r\n if (footerTextVisual) {\r\n const fw = measure(font, footerTextVisual, SUB_SIZE);\r\n drawText(\r\n ops,\r\n footerTextVisual,\r\n SUB_SIZE,\r\n rtl ? PAGE_W - MARGIN - fw : MARGIN,\r\n fy,\r\n );\r\n }\r\n if (showPageNumber) {\r\n const label = pageLabels[p]!;\r\n const pw = measure(font, label, SUB_SIZE);\r\n drawText(\r\n ops,\r\n label,\r\n SUB_SIZE,\r\n rtl ? MARGIN : PAGE_W - MARGIN - pw,\r\n fy,\r\n );\r\n }\r\n }\r\n\r\n const content = pdf.addFlate(\r\n new TextEncoder().encode(ops.join('\\n') + '\\n'),\r\n );\r\n const xobjRes =\r\n logoXObject != null ? `/XObject << /Im1 ${logoXObject} 0 R >>` : '';\r\n const pageNo = pdf.addAscii(\r\n `<< /Type /Page /Parent ${pagesObj} 0 R /MediaBox [0 0 ${PAGE_W} ${PAGE_H}] /Contents ${content} 0 R /Resources << /Font << /F1 ${type0} 0 R >> ${xobjRes} >> >>\\n`,\r\n );\r\n pageObjNums.push(pageNo);\r\n rowCursor += take;\r\n }\r\n\r\n const kids = pageObjNums.map((n) => `${n} 0 R`).join(' ');\r\n pdf.replaceAscii(\r\n pagesObj,\r\n `<< /Type /Pages /Kids [${kids}] /Count ${pageObjNums.length} >>\\n`,\r\n );\r\n\r\n const bytes = pdf.build();\r\n return new Blob([bytes] as BlobPart[], { type: 'application/pdf' });\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// application/events/hostGridEvents.ts
|
|
2
|
+
var ROW_DATA_UPDATED_CATALOG_TYPES = [
|
|
3
|
+
"ROW_ADDED",
|
|
4
|
+
"NEW_ROW_ADDED",
|
|
5
|
+
"ROW_DELETED",
|
|
6
|
+
"NEW_ROW_REMOVED",
|
|
7
|
+
"ROW_RESTORED",
|
|
8
|
+
"ROW_REORDERED"
|
|
9
|
+
];
|
|
10
|
+
var CATALOG_TO_HOST_CALLBACKS = {
|
|
11
|
+
CELL_CHANGED: ["onCellValueChanged", "onRowValueChanged"],
|
|
12
|
+
ROW_ADDED: ["onRowDataUpdated"],
|
|
13
|
+
NEW_ROW_ADDED: ["onRowDataUpdated"],
|
|
14
|
+
ROW_DELETED: ["onRowDataUpdated"],
|
|
15
|
+
NEW_ROW_REMOVED: ["onRowDataUpdated"],
|
|
16
|
+
ROW_RESTORED: ["onRowDataUpdated"],
|
|
17
|
+
ROW_REORDERED: ["onRowDataUpdated"]
|
|
18
|
+
};
|
|
19
|
+
function isRecord(value) {
|
|
20
|
+
return typeof value === "object" && value !== null;
|
|
21
|
+
}
|
|
22
|
+
function readNumber(value) {
|
|
23
|
+
if (typeof value === "number" && Number.isFinite(value)) return value;
|
|
24
|
+
if (typeof value === "string" && value.trim() !== "") {
|
|
25
|
+
const n = Number(value);
|
|
26
|
+
if (Number.isFinite(n)) return n;
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
function readCellChanged(event) {
|
|
31
|
+
if (event.type !== "CELL_CHANGED") return null;
|
|
32
|
+
const payload = isRecord(event.payload) ? event.payload : {};
|
|
33
|
+
const rowId = readNumber(payload.rowId);
|
|
34
|
+
const colId = typeof payload.columnId === "string" && payload.columnId.length > 0 ? payload.columnId : typeof payload.colId === "string" && payload.colId.length > 0 ? payload.colId : null;
|
|
35
|
+
if (rowId == null || colId == null) return null;
|
|
36
|
+
return {
|
|
37
|
+
rowId,
|
|
38
|
+
colId,
|
|
39
|
+
newValue: payload.newValue,
|
|
40
|
+
oldValue: payload.previousValue
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function isRowDataUpdatedType(type) {
|
|
44
|
+
return ROW_DATA_UPDATED_CATALOG_TYPES.includes(type);
|
|
45
|
+
}
|
|
46
|
+
function dispatchCatalogHostEvent(event, ctx, handlers) {
|
|
47
|
+
if (event.tableId !== ctx.tableId) return 0;
|
|
48
|
+
let count = 0;
|
|
49
|
+
const cell = readCellChanged(event);
|
|
50
|
+
if (cell) {
|
|
51
|
+
const data = ctx.getRowData(cell.rowId);
|
|
52
|
+
handlers.onCellValueChanged?.({
|
|
53
|
+
oldValue: cell.oldValue,
|
|
54
|
+
newValue: cell.newValue,
|
|
55
|
+
colId: cell.colId,
|
|
56
|
+
rowId: cell.rowId,
|
|
57
|
+
data
|
|
58
|
+
});
|
|
59
|
+
count += 1;
|
|
60
|
+
handlers.onRowValueChanged?.({
|
|
61
|
+
rowId: cell.rowId,
|
|
62
|
+
data
|
|
63
|
+
});
|
|
64
|
+
count += 1;
|
|
65
|
+
return count;
|
|
66
|
+
}
|
|
67
|
+
if (isRowDataUpdatedType(event.type)) {
|
|
68
|
+
handlers.onRowDataUpdated?.({
|
|
69
|
+
rowData: ctx.getAllRowData(),
|
|
70
|
+
source: event.type
|
|
71
|
+
});
|
|
72
|
+
return 1;
|
|
73
|
+
}
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
function subscribeCatalogHostEvents(eventStore, ctx, handlers) {
|
|
77
|
+
return eventStore.subscribeAll((event) => {
|
|
78
|
+
dispatchCatalogHostEvent(event, ctx, handlers);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export { CATALOG_TO_HOST_CALLBACKS, ROW_DATA_UPDATED_CATALOG_TYPES, dispatchCatalogHostEvent, subscribeCatalogHostEvents };
|
|
83
|
+
//# sourceMappingURL=chunk-MUQQKPWR.js.map
|
|
84
|
+
//# sourceMappingURL=chunk-MUQQKPWR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../application/events/hostGridEvents.ts"],"names":[],"mappings":"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","file":"chunk-MUQQKPWR.js","sourcesContent":["import type { EventStore, Unsubscribe } from '../ports/EventStore';\r\nimport type { GridEvent } from '../../domain/types/GridEvent';\r\n\r\n/**\r\n * Catalog types that map to `onRowDataUpdated` (PR-85).\r\n * Keep in sync with `EVENT_CATALOG` — do not invent a parallel bus.\r\n */\r\nexport const ROW_DATA_UPDATED_CATALOG_TYPES = [\r\n 'ROW_ADDED',\r\n 'NEW_ROW_ADDED',\r\n 'ROW_DELETED',\r\n 'NEW_ROW_REMOVED',\r\n 'ROW_RESTORED',\r\n 'ROW_REORDERED',\r\n] as const;\r\n\r\nexport type RowDataUpdatedCatalogType =\r\n (typeof ROW_DATA_UPDATED_CATALOG_TYPES)[number];\r\n\r\n/** Single mapping table: EVENT_CATALOG token → React callback names. */\r\nexport const CATALOG_TO_HOST_CALLBACKS: Readonly<\r\n Record<string, readonly string[]>\r\n> = {\r\n CELL_CHANGED: ['onCellValueChanged', 'onRowValueChanged'],\r\n ROW_ADDED: ['onRowDataUpdated'],\r\n NEW_ROW_ADDED: ['onRowDataUpdated'],\r\n ROW_DELETED: ['onRowDataUpdated'],\r\n NEW_ROW_REMOVED: ['onRowDataUpdated'],\r\n ROW_RESTORED: ['onRowDataUpdated'],\r\n ROW_REORDERED: ['onRowDataUpdated'],\r\n};\r\n\r\nexport type CellValueChangedEvent<TRow = unknown> = {\r\n oldValue: unknown;\r\n newValue: unknown;\r\n colId: string;\r\n rowId: number;\r\n data: TRow | undefined;\r\n};\r\n\r\nexport type RowValueChangedEvent<TRow = unknown> = {\r\n rowId: number;\r\n data: TRow | undefined;\r\n};\r\n\r\nexport type RowDataUpdatedEvent<TRow = unknown> = {\r\n rowData: TRow[];\r\n source: string;\r\n};\r\n\r\nexport type SelectionChangedEvent<TRow = unknown> = {\r\n selectedRowIds: number[];\r\n selectedRows: TRow[];\r\n};\r\n\r\nexport type CellFocusedEvent = {\r\n rowId: number | null;\r\n colId: string | null;\r\n};\r\n\r\nexport type CatalogHostEventHandlers<TRow = unknown> = {\r\n onCellValueChanged?: (event: CellValueChangedEvent<TRow>) => void;\r\n onRowValueChanged?: (event: RowValueChangedEvent<TRow>) => void;\r\n onRowDataUpdated?: (event: RowDataUpdatedEvent<TRow>) => void;\r\n};\r\n\r\nexport type CatalogHostEventContext<TRow = unknown> = {\r\n tableId: string;\r\n getRowData: (rowId: number) => TRow | undefined;\r\n getAllRowData: () => TRow[];\r\n};\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return typeof value === 'object' && value !== null;\r\n}\r\n\r\nfunction readNumber(value: unknown): number | null {\r\n if (typeof value === 'number' && Number.isFinite(value)) return value;\r\n if (typeof value === 'string' && value.trim() !== '') {\r\n const n = Number(value);\r\n if (Number.isFinite(n)) return n;\r\n }\r\n return null;\r\n}\r\n\r\nfunction readCellChanged(event: GridEvent): {\r\n rowId: number;\r\n colId: string;\r\n newValue: unknown;\r\n oldValue: unknown;\r\n} | null {\r\n if (event.type !== 'CELL_CHANGED') return null;\r\n const payload = isRecord(event.payload) ? event.payload : {};\r\n const rowId = readNumber(payload.rowId);\r\n const colId =\r\n typeof payload.columnId === 'string' && payload.columnId.length > 0\r\n ? payload.columnId\r\n : typeof payload.colId === 'string' && payload.colId.length > 0\r\n ? payload.colId\r\n : null;\r\n if (rowId == null || colId == null) return null;\r\n return {\r\n rowId,\r\n colId,\r\n newValue: payload.newValue,\r\n oldValue: payload.previousValue,\r\n };\r\n}\r\n\r\nfunction isRowDataUpdatedType(type: string): type is RowDataUpdatedCatalogType {\r\n return (ROW_DATA_UPDATED_CATALOG_TYPES as readonly string[]).includes(type);\r\n}\r\n\r\n/**\r\n * Map one `EVENT_CATALOG` GridEvent onto host React callbacks.\r\n * Returns how many host notifications were emitted (0–2 for CELL_CHANGED).\r\n */\r\nexport function dispatchCatalogHostEvent<TRow = unknown>(\r\n event: GridEvent,\r\n ctx: CatalogHostEventContext<TRow>,\r\n handlers: CatalogHostEventHandlers<TRow>,\r\n): number {\r\n if (event.tableId !== ctx.tableId) return 0;\r\n let count = 0;\r\n\r\n const cell = readCellChanged(event);\r\n if (cell) {\r\n const data = ctx.getRowData(cell.rowId);\r\n handlers.onCellValueChanged?.({\r\n oldValue: cell.oldValue,\r\n newValue: cell.newValue,\r\n colId: cell.colId,\r\n rowId: cell.rowId,\r\n data,\r\n });\r\n count += 1;\r\n handlers.onRowValueChanged?.({\r\n rowId: cell.rowId,\r\n data,\r\n });\r\n count += 1;\r\n return count;\r\n }\r\n\r\n if (isRowDataUpdatedType(event.type)) {\r\n handlers.onRowDataUpdated?.({\r\n rowData: ctx.getAllRowData(),\r\n source: event.type,\r\n });\r\n return 1;\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nexport function subscribeCatalogHostEvents<TRow = unknown>(\r\n eventStore: EventStore,\r\n ctx: CatalogHostEventContext<TRow>,\r\n handlers: CatalogHostEventHandlers<TRow>,\r\n): Unsubscribe {\r\n return eventStore.subscribeAll((event) => {\r\n dispatchCatalogHostEvent(event, ctx, handlers);\r\n });\r\n}\r\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-N7SJTINL.cjs"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// domain/value-objects/Viewport.ts
|
|
4
|
+
var Viewport = class _Viewport {
|
|
5
|
+
constructor(scrollOffset, viewportSize, rowHeight, overscan = 2) {
|
|
6
|
+
this.scrollOffset = scrollOffset;
|
|
7
|
+
this.viewportSize = viewportSize;
|
|
8
|
+
this.rowHeight = rowHeight;
|
|
9
|
+
this.overscan = overscan;
|
|
10
|
+
if (viewportSize <= 0) throw new Error("Viewport.viewportSize must be > 0");
|
|
11
|
+
if (rowHeight <= 0) throw new Error("Viewport.rowHeight must be > 0");
|
|
12
|
+
if (overscan < 0) throw new Error("Viewport.overscan must be >= 0");
|
|
13
|
+
if (scrollOffset < 0) throw new Error("Viewport.scrollOffset must be >= 0");
|
|
14
|
+
}
|
|
15
|
+
equals(other) {
|
|
16
|
+
return this.scrollOffset === other.scrollOffset && this.viewportSize === other.viewportSize && this.rowHeight === other.rowHeight && this.overscan === other.overscan;
|
|
17
|
+
}
|
|
18
|
+
withScrollOffset(scrollOffset) {
|
|
19
|
+
return new _Viewport(
|
|
20
|
+
Math.max(0, scrollOffset),
|
|
21
|
+
this.viewportSize,
|
|
22
|
+
this.rowHeight,
|
|
23
|
+
this.overscan
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
withViewportSize(viewportSize) {
|
|
27
|
+
return new _Viewport(
|
|
28
|
+
this.scrollOffset,
|
|
29
|
+
viewportSize,
|
|
30
|
+
this.rowHeight,
|
|
31
|
+
this.overscan
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
toJSON() {
|
|
35
|
+
return {
|
|
36
|
+
scrollOffset: this.scrollOffset,
|
|
37
|
+
viewportSize: this.viewportSize,
|
|
38
|
+
rowHeight: this.rowHeight,
|
|
39
|
+
overscan: this.overscan
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// domain/value-objects/index.ts
|
|
45
|
+
var CellValue = class {
|
|
46
|
+
constructor(value) {
|
|
47
|
+
this.value = value;
|
|
48
|
+
}
|
|
49
|
+
equals(other) {
|
|
50
|
+
return this.value === other.value;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
var CellDisplay = class {
|
|
54
|
+
constructor(value) {
|
|
55
|
+
this.value = value;
|
|
56
|
+
}
|
|
57
|
+
equals(other) {
|
|
58
|
+
return this.value === other.value;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
var _ColumnId = class _ColumnId {
|
|
62
|
+
constructor(value) {
|
|
63
|
+
this.value = value;
|
|
64
|
+
}
|
|
65
|
+
/** Shared instance per field name (PR-101) — avoids 100k×cols ColumnId objects. */
|
|
66
|
+
static for(value) {
|
|
67
|
+
let id = _ColumnId.interned.get(value);
|
|
68
|
+
if (!id) {
|
|
69
|
+
id = new _ColumnId(value);
|
|
70
|
+
_ColumnId.interned.set(value, id);
|
|
71
|
+
}
|
|
72
|
+
return id;
|
|
73
|
+
}
|
|
74
|
+
equals(other) {
|
|
75
|
+
return this.value === other.value;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
_ColumnId.interned = /* @__PURE__ */ new Map();
|
|
79
|
+
var ColumnId = _ColumnId;
|
|
80
|
+
var RowId = class {
|
|
81
|
+
constructor(value) {
|
|
82
|
+
this.value = value;
|
|
83
|
+
}
|
|
84
|
+
equals(other) {
|
|
85
|
+
return this.value === other.value;
|
|
86
|
+
}
|
|
87
|
+
set(id) {
|
|
88
|
+
this.value = id.value;
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
var RowState = class {
|
|
92
|
+
constructor(value) {
|
|
93
|
+
this.value = value;
|
|
94
|
+
}
|
|
95
|
+
equals(other) {
|
|
96
|
+
return this.value === other;
|
|
97
|
+
}
|
|
98
|
+
set(rowState) {
|
|
99
|
+
this.value = rowState;
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
var RowStateEnum = /* @__PURE__ */ ((RowStateEnum2) => {
|
|
103
|
+
RowStateEnum2["Added"] = "Add";
|
|
104
|
+
RowStateEnum2["Modified"] = "Update";
|
|
105
|
+
RowStateEnum2["Deleted"] = "Delete";
|
|
106
|
+
RowStateEnum2["Unchanged"] = "None";
|
|
107
|
+
return RowStateEnum2;
|
|
108
|
+
})(RowStateEnum || {});
|
|
109
|
+
var Pagination = class _Pagination {
|
|
110
|
+
constructor(page, pageSize, totalRows) {
|
|
111
|
+
this.page = page;
|
|
112
|
+
this.pageSize = pageSize;
|
|
113
|
+
this.totalRows = totalRows;
|
|
114
|
+
this.totalPages = Math.max(1, Math.ceil(totalRows / pageSize));
|
|
115
|
+
this.canPrev = page > 1;
|
|
116
|
+
this.canNext = page < this.totalPages;
|
|
117
|
+
}
|
|
118
|
+
changePage(page) {
|
|
119
|
+
return new _Pagination(page, this.pageSize, this.totalRows);
|
|
120
|
+
}
|
|
121
|
+
changePageSize(size) {
|
|
122
|
+
return new _Pagination(
|
|
123
|
+
Math.min(this.page, Math.ceil(this.totalRows / size)),
|
|
124
|
+
size,
|
|
125
|
+
this.totalRows
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
toJSON() {
|
|
129
|
+
return {
|
|
130
|
+
page: this.page,
|
|
131
|
+
pageSize: this.pageSize,
|
|
132
|
+
totalRows: this.totalRows,
|
|
133
|
+
totalPages: this.totalPages,
|
|
134
|
+
canPrev: this.canPrev,
|
|
135
|
+
canNext: this.canNext
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
exports.CellDisplay = CellDisplay;
|
|
141
|
+
exports.CellValue = CellValue;
|
|
142
|
+
exports.ColumnId = ColumnId;
|
|
143
|
+
exports.Pagination = Pagination;
|
|
144
|
+
exports.RowId = RowId;
|
|
145
|
+
exports.RowState = RowState;
|
|
146
|
+
exports.RowStateEnum = RowStateEnum;
|
|
147
|
+
exports.Viewport = Viewport;
|
|
148
|
+
//# sourceMappingURL=chunk-NTV2UUAJ.cjs.map
|
|
149
|
+
//# sourceMappingURL=chunk-NTV2UUAJ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../domain/value-objects/Viewport.ts","../domain/value-objects/index.ts"],"names":["RowStateEnum"],"mappings":"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","file":"chunk-NTV2UUAJ.cjs","sourcesContent":["/**\r\n * View-state value object for virtual scrolling.\r\n * Lives in Domain types but is NOT an accounting invariant — Adapters drive it.\r\n */\r\nexport class Viewport {\r\n constructor(\r\n /** Vertical scroll offset in pixels. */\r\n public readonly scrollOffset: number,\r\n /** Visible viewport height in pixels. */\r\n public readonly viewportSize: number,\r\n /** Fixed row height in pixels (variable-height later). */\r\n public readonly rowHeight: number,\r\n /** Extra rows rendered above/below the window. */\r\n public readonly overscan: number = 2,\r\n ) {\r\n if (viewportSize <= 0) throw new Error('Viewport.viewportSize must be > 0');\r\n if (rowHeight <= 0) throw new Error('Viewport.rowHeight must be > 0');\r\n if (overscan < 0) throw new Error('Viewport.overscan must be >= 0');\r\n if (scrollOffset < 0) throw new Error('Viewport.scrollOffset must be >= 0');\r\n }\r\n\r\n equals(other: Viewport): boolean {\r\n return (\r\n this.scrollOffset === other.scrollOffset &&\r\n this.viewportSize === other.viewportSize &&\r\n this.rowHeight === other.rowHeight &&\r\n this.overscan === other.overscan\r\n );\r\n }\r\n\r\n withScrollOffset(scrollOffset: number): Viewport {\r\n return new Viewport(\r\n Math.max(0, scrollOffset),\r\n this.viewportSize,\r\n this.rowHeight,\r\n this.overscan,\r\n );\r\n }\r\n\r\n withViewportSize(viewportSize: number): Viewport {\r\n return new Viewport(\r\n this.scrollOffset,\r\n viewportSize,\r\n this.rowHeight,\r\n this.overscan,\r\n );\r\n }\r\n\r\n toJSON() {\r\n return {\r\n scrollOffset: this.scrollOffset,\r\n viewportSize: this.viewportSize,\r\n rowHeight: this.rowHeight,\r\n overscan: this.overscan,\r\n };\r\n }\r\n}\r\n\r\n/** Inclusive start, exclusive end — indices into the ordered row list. */\r\nexport type VisibleRange = {\r\n readonly startIndex: number;\r\n readonly endIndex: number;\r\n readonly startOffset: number;\r\n readonly endOffset: number;\r\n readonly totalHeight: number;\r\n readonly visibleCount: number;\r\n};\r\n","//domain/value-object\r\nexport class CellValue {\r\n constructor(public readonly value: unknown) {}\r\n\r\n equals(other: CellValue) {\r\n return this.value === other.value;\r\n }\r\n}\r\nexport class CellDisplay {\r\n constructor(public readonly value: unknown) {}\r\n\r\n equals(other: CellDisplay) {\r\n return this.value === other.value;\r\n }\r\n}\r\n\r\nexport class ColumnId {\r\n private static readonly interned = new Map<string, ColumnId>();\r\n\r\n constructor(public readonly value: string) { }\r\n\r\n /** Shared instance per field name (PR-101) — avoids 100k×cols ColumnId objects. */\r\n static for(value: string): ColumnId {\r\n let id = ColumnId.interned.get(value);\r\n if (!id) {\r\n id = new ColumnId(value);\r\n ColumnId.interned.set(value, id);\r\n }\r\n return id;\r\n }\r\n\r\n equals(other: ColumnId) {\r\n return this.value === other.value;\r\n }\r\n}\r\nexport type SelectOption = {\r\n label: string;\r\n value: string | number;\r\n};\r\nexport type KeyValue = {\r\n key: string;\r\n value: unknown;\r\n display: unknown;\r\n};\r\n\r\nexport type IRule = {\r\n type?:\r\n | string\r\n | \"array\"\r\n | \"object\"\r\n | \"enum\"\r\n | \"date\"\r\n | \"number\"\r\n | \"integer\"\r\n | \"float\"\r\n | \"boolean\"\r\n | \"email\"\r\n | \"url\"\r\n | \"hex\"\r\n | RegExp;\r\n required?: boolean;\r\n requiredIf?: () => boolean;\r\n whitespace?: boolean;\r\n message?: string;\r\n transform?: (value: unknown) => unknown;\r\n pattern?: string | RegExp;\r\n min?: number;\r\n max?: number;\r\n len?: number;\r\n enum?: unknown[];\r\n validator?: (rule: IRule, value: unknown, callback: (error?: string[]) => void) => void | Promise<void>;\r\n asyncValidator?: (rule: IRule, value: unknown) => Promise<void>;\r\n warningOnly?: boolean;\r\n validateTrigger?: string | string[];\r\n};\r\nexport class RowId {\r\n constructor(public value: number) {}\r\n equals(other: RowId) {\r\n return this.value === other.value;\r\n }\r\n set(id: RowId) {\r\n this.value = id.value;\r\n }\r\n}\r\nexport class TableId {\r\n constructor(public value: string) {}\r\n equals(other: TableId) {\r\n return this.value === other.value;\r\n }\r\n set(id: TableId) {\r\n this.value = id.value;\r\n }\r\n}\r\nexport class RowState {\r\n constructor(public value: RowStateEnum) {}\r\n equals(other: RowStateEnum) {\r\n return this.value === other;\r\n }\r\n set(rowState: RowStateEnum) {\r\n this.value = rowState;\r\n }\r\n}\r\n\r\nexport enum RowStateEnum {\r\n Added = \"Add\",\r\n Modified = \"Update\",\r\n Deleted = \"Delete\",\r\n Unchanged = \"None\",\r\n}\r\nexport enum RowOriginEnum {\r\n Persisted = \"Add\",\r\n New = \"Update\",\r\n}\r\nexport type TableActions = \"copy\" | \"cut\" | \"paste\" | \"pasteInsert\" | null\r\n\r\nexport { Viewport } from './Viewport';\r\nexport type { VisibleRange } from './Viewport';\r\n\r\nexport class Pagination {\r\n public readonly totalRows: number;\r\n public readonly totalPages: number;\r\n public readonly canPrev: boolean;\r\n public readonly canNext: boolean;\r\n\r\n constructor(\r\n public readonly page: number,\r\n public readonly pageSize: number,\r\n totalRows: number,\r\n ) {\r\n this.totalRows = totalRows;\r\n this.totalPages = Math.max(1, Math.ceil(totalRows / pageSize));\r\n this.canPrev = page > 1;\r\n this.canNext = page < this.totalPages;\r\n }\r\n\r\n changePage(page: number): Pagination {\r\n return new Pagination(page, this.pageSize, this.totalRows);\r\n }\r\n changePageSize(size: number): Pagination {\r\n return new Pagination(\r\n Math.min(this.page, Math.ceil(this.totalRows / size)),\r\n size,\r\n this.totalRows,\r\n );\r\n }\r\n\r\n toJSON() {\r\n return {\r\n page: this.page,\r\n pageSize: this.pageSize,\r\n totalRows: this.totalRows,\r\n totalPages: this.totalPages,\r\n canPrev: this.canPrev,\r\n canNext: this.canNext,\r\n };\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// infrastructure/presence/broadcastChannelTransport.ts
|
|
2
|
+
function createBroadcastChannelPresenceTransport(channelName) {
|
|
3
|
+
if (typeof BroadcastChannel === "undefined") {
|
|
4
|
+
return {
|
|
5
|
+
publish: () => {
|
|
6
|
+
},
|
|
7
|
+
subscribe: () => () => {
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
const channel = new BroadcastChannel(channelName);
|
|
12
|
+
return {
|
|
13
|
+
publish(message) {
|
|
14
|
+
channel.postMessage(message);
|
|
15
|
+
},
|
|
16
|
+
subscribe(listener) {
|
|
17
|
+
const onMessage = (event) => {
|
|
18
|
+
listener(event.data);
|
|
19
|
+
};
|
|
20
|
+
channel.addEventListener("message", onMessage);
|
|
21
|
+
return () => {
|
|
22
|
+
channel.removeEventListener("message", onMessage);
|
|
23
|
+
channel.close();
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { createBroadcastChannelPresenceTransport };
|
|
30
|
+
//# sourceMappingURL=chunk-PJQWHF6T.js.map
|
|
31
|
+
//# sourceMappingURL=chunk-PJQWHF6T.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../infrastructure/presence/broadcastChannelTransport.ts"],"names":[],"mappings":";AASO,SAAS,wCACd,WAAA,EACmB;AACnB,EAAA,IAAI,OAAO,qBAAqB,WAAA,EAAa;AAC3C,IAAA,OAAO;AAAA,MACL,SAAS,MAAM;AAAA,MAAC,CAAA;AAAA,MAChB,SAAA,EAAW,MAAM,MAAM;AAAA,MAAC;AAAA,KAC1B;AAAA,EACF;AACA,EAAA,MAAM,OAAA,GAAU,IAAI,gBAAA,CAAiB,WAAW,CAAA;AAChD,EAAA,OAAO;AAAA,IACL,QAAQ,OAAA,EAAS;AACf,MAAA,OAAA,CAAQ,YAAY,OAAO,CAAA;AAAA,IAC7B,CAAA;AAAA,IACA,UAAU,QAAA,EAAU;AAClB,MAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAyC;AAC1D,QAAA,QAAA,CAAS,MAAM,IAAI,CAAA;AAAA,MACrB,CAAA;AACA,MAAA,OAAA,CAAQ,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC7C,MAAA,OAAO,MAAM;AACX,QAAA,OAAA,CAAQ,mBAAA,CAAoB,WAAW,SAAS,CAAA;AAChD,QAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,MAChB,CAAA;AAAA,IACF;AAAA,GACF;AACF","file":"chunk-PJQWHF6T.js","sourcesContent":["import type {\r\n PresenceMessage,\r\n PresenceTransport,\r\n} from '../../application/ports/PresencePort';\r\n\r\n/**\r\n * Browser BroadcastChannel presence transport (PR-139).\r\n * Channel name should be scoped per table: `pdg-presence:{store}:{tableKey}`.\r\n */\r\nexport function createBroadcastChannelPresenceTransport(\r\n channelName: string,\r\n): PresenceTransport {\r\n if (typeof BroadcastChannel === 'undefined') {\r\n return {\r\n publish: () => {},\r\n subscribe: () => () => {},\r\n };\r\n }\r\n const channel = new BroadcastChannel(channelName);\r\n return {\r\n publish(message) {\r\n channel.postMessage(message);\r\n },\r\n subscribe(listener) {\r\n const onMessage = (event: MessageEvent<PresenceMessage>) => {\r\n listener(event.data);\r\n };\r\n channel.addEventListener('message', onMessage);\r\n return () => {\r\n channel.removeEventListener('message', onMessage);\r\n channel.close();\r\n };\r\n },\r\n };\r\n}\r\n"]}
|