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":["../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-VBAZ77Q4.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,319 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkUC7PHDM6_cjs = require('./chunk-UC7PHDM6.cjs');
|
|
4
|
+
var chunk3HP3HQCW_cjs = require('./chunk-3HP3HQCW.cjs');
|
|
5
|
+
var React2 = require('react');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
|
|
8
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
|
|
10
|
+
var React2__default = /*#__PURE__*/_interopDefault(React2);
|
|
11
|
+
|
|
12
|
+
// ui/a11y/gridRoles.ts
|
|
13
|
+
var ARIA_HEADER_ROW_INDEX = 1;
|
|
14
|
+
function ariaColIndex(visibleIndex) {
|
|
15
|
+
return visibleIndex + 1;
|
|
16
|
+
}
|
|
17
|
+
function ariaDataRowIndex(absoluteIndex, pinnedTopCount = 0) {
|
|
18
|
+
return absoluteIndex + 2 + pinnedTopCount;
|
|
19
|
+
}
|
|
20
|
+
function ariaPinnedTopRowIndex(indexInPinned) {
|
|
21
|
+
return indexInPinned + 2;
|
|
22
|
+
}
|
|
23
|
+
function ariaPinnedBottomRowIndex(indexInPinned, dataRowCount, pinnedTopCount = 0) {
|
|
24
|
+
return pinnedTopCount + dataRowCount + 2 + indexInPinned;
|
|
25
|
+
}
|
|
26
|
+
function ariaFooterRowIndex(dataRowCount, pinnedTopCount = 0, pinnedBottomCount = 0) {
|
|
27
|
+
return dataRowCount + pinnedTopCount + pinnedBottomCount + 2;
|
|
28
|
+
}
|
|
29
|
+
function ariaGridRowCount(dataRowCount, hasFooter, pinnedTopCount = 0, pinnedBottomCount = 0) {
|
|
30
|
+
const footerRows = typeof hasFooter === "number" ? hasFooter : hasFooter ? 1 : 0;
|
|
31
|
+
return 1 + pinnedTopCount + dataRowCount + pinnedBottomCount + footerRows;
|
|
32
|
+
}
|
|
33
|
+
function ariaToken(value) {
|
|
34
|
+
return value.replace(/[^A-Za-z0-9_-]/g, "_");
|
|
35
|
+
}
|
|
36
|
+
function gridCellDomId(tableKey, rowId, columnId) {
|
|
37
|
+
return `erp-cell-${ariaToken(tableKey)}-${rowId}-${ariaToken(columnId)}`;
|
|
38
|
+
}
|
|
39
|
+
function isAriaSelectedCell(active, rowId, columnId) {
|
|
40
|
+
return !!active && active.rowId === rowId && active.columnId === columnId;
|
|
41
|
+
}
|
|
42
|
+
function gridCellA11y(tableKey, rowId, columnId, active) {
|
|
43
|
+
return {
|
|
44
|
+
id: gridCellDomId(tableKey, rowId, columnId),
|
|
45
|
+
"aria-selected": isAriaSelectedCell(active, rowId, columnId)
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ui/columnPin.ts
|
|
50
|
+
function columnPinSide(column) {
|
|
51
|
+
const pin = chunkUC7PHDM6_cjs.resolveColumnPinned(column);
|
|
52
|
+
if (pin === "start" || pin === "end") return pin;
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
function columnPinClassName(column) {
|
|
56
|
+
if (chunkUC7PHDM6_cjs.isIndexColumn(column)) return "erp-col-pin-start erp-col-pin-index";
|
|
57
|
+
const side = columnPinSide(column);
|
|
58
|
+
if (side === "start") return "erp-col-pin-start";
|
|
59
|
+
if (side === "end") return "erp-col-pin-end";
|
|
60
|
+
return "";
|
|
61
|
+
}
|
|
62
|
+
function indexPinClassName(column) {
|
|
63
|
+
return columnPinClassName(column);
|
|
64
|
+
}
|
|
65
|
+
function columnPinDataAttr(column) {
|
|
66
|
+
if (chunkUC7PHDM6_cjs.isIndexColumn(column)) return "index";
|
|
67
|
+
return columnPinSide(column) ?? void 0;
|
|
68
|
+
}
|
|
69
|
+
function indexPinDataAttr(column) {
|
|
70
|
+
const attr = columnPinDataAttr(column);
|
|
71
|
+
return attr === "index" ? "index" : void 0;
|
|
72
|
+
}
|
|
73
|
+
function columnPinStyle(column, startOffsets, endOffsets) {
|
|
74
|
+
const side = columnPinSide(column);
|
|
75
|
+
if (side === "start") {
|
|
76
|
+
const offset = startOffsets[column.fieldName];
|
|
77
|
+
if (offset === void 0) return void 0;
|
|
78
|
+
return { insetInlineStart: offset };
|
|
79
|
+
}
|
|
80
|
+
if (side === "end") {
|
|
81
|
+
const offset = endOffsets[column.fieldName];
|
|
82
|
+
if (offset === void 0) return void 0;
|
|
83
|
+
return { insetInlineEnd: offset };
|
|
84
|
+
}
|
|
85
|
+
return void 0;
|
|
86
|
+
}
|
|
87
|
+
function columnPinCellProps(column, startOffsets, endOffsets) {
|
|
88
|
+
return {
|
|
89
|
+
className: columnPinClassName(column),
|
|
90
|
+
"data-erp-col-pin": columnPinDataAttr(column),
|
|
91
|
+
style: columnPinStyle(column, startOffsets, endOffsets)
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
var EMPTY = {
|
|
95
|
+
allVisible: [],
|
|
96
|
+
pinnedStart: [],
|
|
97
|
+
pinned: [],
|
|
98
|
+
pinnedEnd: [],
|
|
99
|
+
scrollable: [],
|
|
100
|
+
scrollableAbsIndices: [],
|
|
101
|
+
spacerStart: 0,
|
|
102
|
+
spacerEnd: 0,
|
|
103
|
+
pinnedStartWidth: 0,
|
|
104
|
+
pinnedWidth: 0,
|
|
105
|
+
pinnedEndWidth: 0,
|
|
106
|
+
startPinOffsets: {},
|
|
107
|
+
endPinOffsets: {},
|
|
108
|
+
totalWidth: 0,
|
|
109
|
+
layoutWidths: {},
|
|
110
|
+
mountedScrollableCount: 0
|
|
111
|
+
};
|
|
112
|
+
var ColumnWindowContext = React2.createContext(EMPTY);
|
|
113
|
+
function scrollOffsetFromInlineStart(el, direction) {
|
|
114
|
+
const { scrollLeft, scrollWidth, clientWidth } = el;
|
|
115
|
+
if (direction === "ltr") return Math.max(0, scrollLeft);
|
|
116
|
+
if (scrollLeft < 0) return Math.max(0, -scrollLeft);
|
|
117
|
+
const max = Math.max(0, scrollWidth - clientWidth);
|
|
118
|
+
return Math.max(0, max - scrollLeft);
|
|
119
|
+
}
|
|
120
|
+
function buildColumnWindowModel(allVisible, columnWidths, scrollOffset, viewportSize, overscan = 1, flexContainerWidth = viewportSize) {
|
|
121
|
+
const layoutWidths = chunkUC7PHDM6_cjs.computeLayoutColumnWidths(
|
|
122
|
+
allVisible,
|
|
123
|
+
columnWidths,
|
|
124
|
+
flexContainerWidth
|
|
125
|
+
);
|
|
126
|
+
const widthOf = (col) => layoutWidths[col.fieldName] ?? chunkUC7PHDM6_cjs.resolveColumnWidth(col, columnWidths);
|
|
127
|
+
const { pinnedStart, scrollable: scrollableAll, pinnedEnd, scrollableAbs } = chunkUC7PHDM6_cjs.partitionColumnsByPin(allVisible);
|
|
128
|
+
const pinnedStartWidth = chunkUC7PHDM6_cjs.sumColumnWidths(pinnedStart, widthOf);
|
|
129
|
+
const pinnedEndWidth = chunkUC7PHDM6_cjs.sumColumnWidths(pinnedEnd, widthOf);
|
|
130
|
+
const scrollableWidths = scrollableAll.map(widthOf);
|
|
131
|
+
const range = chunkUC7PHDM6_cjs.ViewportCalculator.calculateColumns(
|
|
132
|
+
scrollableWidths,
|
|
133
|
+
scrollOffset,
|
|
134
|
+
viewportSize,
|
|
135
|
+
pinnedStartWidth,
|
|
136
|
+
overscan,
|
|
137
|
+
pinnedEndWidth
|
|
138
|
+
);
|
|
139
|
+
const scrollable = scrollableAll.slice(range.startIndex, range.endIndex);
|
|
140
|
+
const scrollableAbsIndices = scrollableAbs.slice(
|
|
141
|
+
range.startIndex,
|
|
142
|
+
range.endIndex
|
|
143
|
+
);
|
|
144
|
+
const totalScrollable = range.totalScrollableWidth;
|
|
145
|
+
const spacerCells = (range.spacerStart > 0 ? 1 : 0) + (range.spacerEnd > 0 ? 1 : 0);
|
|
146
|
+
let startCursor = 0;
|
|
147
|
+
const startPinOffsets = {};
|
|
148
|
+
for (const col of pinnedStart) {
|
|
149
|
+
startPinOffsets[col.fieldName] = startCursor;
|
|
150
|
+
startCursor += widthOf(col);
|
|
151
|
+
}
|
|
152
|
+
let endCursor = 0;
|
|
153
|
+
const endPinOffsets = {};
|
|
154
|
+
for (let i = pinnedEnd.length - 1; i >= 0; i -= 1) {
|
|
155
|
+
const col = pinnedEnd[i];
|
|
156
|
+
endPinOffsets[col.fieldName] = endCursor;
|
|
157
|
+
endCursor += widthOf(col);
|
|
158
|
+
}
|
|
159
|
+
return {
|
|
160
|
+
allVisible,
|
|
161
|
+
pinnedStart,
|
|
162
|
+
pinned: pinnedStart,
|
|
163
|
+
pinnedEnd,
|
|
164
|
+
scrollable,
|
|
165
|
+
scrollableAbsIndices,
|
|
166
|
+
spacerStart: range.spacerStart,
|
|
167
|
+
spacerEnd: range.spacerEnd,
|
|
168
|
+
pinnedStartWidth,
|
|
169
|
+
pinnedWidth: pinnedStartWidth,
|
|
170
|
+
pinnedEndWidth,
|
|
171
|
+
startPinOffsets,
|
|
172
|
+
endPinOffsets,
|
|
173
|
+
totalWidth: pinnedStartWidth + totalScrollable + pinnedEndWidth,
|
|
174
|
+
layoutWidths,
|
|
175
|
+
mountedScrollableCount: scrollable.length + spacerCells
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
function ColumnWindowProvider({
|
|
179
|
+
scrollRef,
|
|
180
|
+
columns,
|
|
181
|
+
columnWidths,
|
|
182
|
+
overscan = 1,
|
|
183
|
+
onViewportWidthChange,
|
|
184
|
+
children
|
|
185
|
+
}) {
|
|
186
|
+
const direction = chunk3HP3HQCW_cjs.useDirection();
|
|
187
|
+
const [scrollOffset, setScrollOffset] = React2.useState(0);
|
|
188
|
+
const [viewportSize, setViewportSize] = React2.useState(1024);
|
|
189
|
+
const allVisible = React2.useMemo(
|
|
190
|
+
() => columns.filter((c) => !c.hidden),
|
|
191
|
+
[columns]
|
|
192
|
+
);
|
|
193
|
+
React2.useEffect(() => {
|
|
194
|
+
const el = scrollRef.current;
|
|
195
|
+
if (!el) return;
|
|
196
|
+
const update = () => {
|
|
197
|
+
setScrollOffset(scrollOffsetFromInlineStart(el, direction));
|
|
198
|
+
const w = el.clientWidth || 1024;
|
|
199
|
+
setViewportSize(w);
|
|
200
|
+
onViewportWidthChange?.(w);
|
|
201
|
+
};
|
|
202
|
+
update();
|
|
203
|
+
el.addEventListener("scroll", update, { passive: true });
|
|
204
|
+
const ro = typeof ResizeObserver !== "undefined" ? new ResizeObserver(() => update()) : null;
|
|
205
|
+
ro?.observe(el);
|
|
206
|
+
return () => {
|
|
207
|
+
el.removeEventListener("scroll", update);
|
|
208
|
+
ro?.disconnect();
|
|
209
|
+
};
|
|
210
|
+
}, [scrollRef, direction, allVisible.length, columnWidths, onViewportWidthChange]);
|
|
211
|
+
const value = React2.useMemo(
|
|
212
|
+
() => buildColumnWindowModel(
|
|
213
|
+
allVisible,
|
|
214
|
+
columnWidths,
|
|
215
|
+
scrollOffset,
|
|
216
|
+
viewportSize,
|
|
217
|
+
overscan
|
|
218
|
+
),
|
|
219
|
+
[allVisible, columnWidths, scrollOffset, viewportSize, overscan]
|
|
220
|
+
);
|
|
221
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ColumnWindowContext.Provider, { value, children });
|
|
222
|
+
}
|
|
223
|
+
function useColumnWindowOrAll(columns, columnWidths) {
|
|
224
|
+
const ctx = React2.useContext(ColumnWindowContext);
|
|
225
|
+
const allVisible = columns.filter((c) => !c.hidden);
|
|
226
|
+
if (ctx.allVisible.length > 0) return ctx;
|
|
227
|
+
return buildColumnWindowModel(allVisible, columnWidths, 0, 1e9, 0, 0);
|
|
228
|
+
}
|
|
229
|
+
function renderPinnedColumns(cols, model, renderColumn, keyPrefix) {
|
|
230
|
+
const nodes = [];
|
|
231
|
+
for (const col of cols) {
|
|
232
|
+
const abs = model.allVisible.findIndex((c) => c.fieldName === col.fieldName);
|
|
233
|
+
nodes.push(
|
|
234
|
+
/* @__PURE__ */ jsxRuntime.jsx(React2__default.default.Fragment, { children: renderColumn(col, abs >= 0 ? abs : 0) }, `${keyPrefix}-${col.fieldName}`)
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
return nodes;
|
|
238
|
+
}
|
|
239
|
+
function ColumnWindowCells({
|
|
240
|
+
window: model,
|
|
241
|
+
renderColumn,
|
|
242
|
+
spacerElement: Spacer,
|
|
243
|
+
spacerRole = "presentation",
|
|
244
|
+
spacerStyle
|
|
245
|
+
}) {
|
|
246
|
+
const nodes = [];
|
|
247
|
+
nodes.push(
|
|
248
|
+
...renderPinnedColumns(model.pinnedStart, model, renderColumn, "pin-start")
|
|
249
|
+
);
|
|
250
|
+
if (model.spacerStart > 0) {
|
|
251
|
+
nodes.push(
|
|
252
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
253
|
+
Spacer,
|
|
254
|
+
{
|
|
255
|
+
"aria-hidden": true,
|
|
256
|
+
role: spacerRole,
|
|
257
|
+
"data-pdg-col-spacer": "start",
|
|
258
|
+
style: {
|
|
259
|
+
width: model.spacerStart,
|
|
260
|
+
minWidth: model.spacerStart,
|
|
261
|
+
padding: 0,
|
|
262
|
+
border: "none",
|
|
263
|
+
...spacerStyle
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
"pdg-col-spacer-start"
|
|
267
|
+
)
|
|
268
|
+
);
|
|
269
|
+
}
|
|
270
|
+
model.scrollable.forEach((col, i) => {
|
|
271
|
+
const abs = model.scrollableAbsIndices[i] ?? i;
|
|
272
|
+
nodes.push(
|
|
273
|
+
/* @__PURE__ */ jsxRuntime.jsx(React2__default.default.Fragment, { children: renderColumn(col, abs) }, `scr-${col.fieldName}`)
|
|
274
|
+
);
|
|
275
|
+
});
|
|
276
|
+
if (model.spacerEnd > 0) {
|
|
277
|
+
nodes.push(
|
|
278
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
279
|
+
Spacer,
|
|
280
|
+
{
|
|
281
|
+
"aria-hidden": true,
|
|
282
|
+
role: spacerRole,
|
|
283
|
+
"data-pdg-col-spacer": "end",
|
|
284
|
+
style: {
|
|
285
|
+
width: model.spacerEnd,
|
|
286
|
+
minWidth: model.spacerEnd,
|
|
287
|
+
padding: 0,
|
|
288
|
+
border: "none",
|
|
289
|
+
...spacerStyle
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
"pdg-col-spacer-end"
|
|
293
|
+
)
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
nodes.push(
|
|
297
|
+
...renderPinnedColumns(model.pinnedEnd, model, renderColumn, "pin-end")
|
|
298
|
+
);
|
|
299
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: nodes });
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
exports.ARIA_HEADER_ROW_INDEX = ARIA_HEADER_ROW_INDEX;
|
|
303
|
+
exports.ColumnWindowCells = ColumnWindowCells;
|
|
304
|
+
exports.ColumnWindowProvider = ColumnWindowProvider;
|
|
305
|
+
exports.ariaColIndex = ariaColIndex;
|
|
306
|
+
exports.ariaDataRowIndex = ariaDataRowIndex;
|
|
307
|
+
exports.ariaFooterRowIndex = ariaFooterRowIndex;
|
|
308
|
+
exports.ariaGridRowCount = ariaGridRowCount;
|
|
309
|
+
exports.ariaPinnedBottomRowIndex = ariaPinnedBottomRowIndex;
|
|
310
|
+
exports.ariaPinnedTopRowIndex = ariaPinnedTopRowIndex;
|
|
311
|
+
exports.columnPinCellProps = columnPinCellProps;
|
|
312
|
+
exports.columnPinClassName = columnPinClassName;
|
|
313
|
+
exports.gridCellA11y = gridCellA11y;
|
|
314
|
+
exports.gridCellDomId = gridCellDomId;
|
|
315
|
+
exports.indexPinClassName = indexPinClassName;
|
|
316
|
+
exports.indexPinDataAttr = indexPinDataAttr;
|
|
317
|
+
exports.useColumnWindowOrAll = useColumnWindowOrAll;
|
|
318
|
+
//# sourceMappingURL=chunk-VSAFQTW5.cjs.map
|
|
319
|
+
//# sourceMappingURL=chunk-VSAFQTW5.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../ui/a11y/gridRoles.ts","../ui/columnPin.ts","../ui/virtual/columnWindow.tsx","../ui/virtual/ColumnWindowCells.tsx"],"names":["resolveColumnPinned","isIndexColumn","createContext","computeLayoutColumnWidths","resolveColumnWidth","partitionColumnsByPin","sumColumnWidths","ViewportCalculator","useDirection","useState","useMemo","useEffect","jsx","useContext","React","Fragment"],"mappings":"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","file":"chunk-VSAFQTW5.cjs","sourcesContent":["/** Header occupies ARIA row 1. Data rows start at 2 (or after pinned top). */\r\nexport const ARIA_HEADER_ROW_INDEX = 1;\r\n\r\n/** 1-based `aria-colindex` from 0-based visible column order. */\r\nexport function ariaColIndex(visibleIndex: number): number {\r\n return visibleIndex + 1;\r\n}\r\n\r\n/**\r\n * 1-based `aria-rowindex` for a data row.\r\n * `absoluteIndex` is 0-based in the full collection (not the mounted DOM window).\r\n * `pinnedTopCount` shifts indices when pinned-top rows occupy slots after the header (PR-116).\r\n */\r\nexport function ariaDataRowIndex(\r\n absoluteIndex: number,\r\n pinnedTopCount = 0,\r\n): number {\r\n return absoluteIndex + 2 + pinnedTopCount;\r\n}\r\n\r\n/** Pinned-top rows sit immediately after the header (PR-116). */\r\nexport function ariaPinnedTopRowIndex(indexInPinned: number): number {\r\n return indexInPinned + 2;\r\n}\r\n\r\n/** Pinned-bottom rows sit after all data rows (PR-116). */\r\nexport function ariaPinnedBottomRowIndex(\r\n indexInPinned: number,\r\n dataRowCount: number,\r\n pinnedTopCount = 0,\r\n): number {\r\n return pinnedTopCount + dataRowCount + 2 + indexInPinned;\r\n}\r\n\r\nexport function ariaFooterRowIndex(\r\n dataRowCount: number,\r\n pinnedTopCount = 0,\r\n pinnedBottomCount = 0,\r\n): number {\r\n return dataRowCount + pinnedTopCount + pinnedBottomCount + 2;\r\n}\r\n\r\nexport function ariaGridRowCount(\r\n dataRowCount: number,\r\n hasFooter: boolean | number,\r\n pinnedTopCount = 0,\r\n pinnedBottomCount = 0,\r\n): number {\r\n const footerRows =\r\n typeof hasFooter === 'number' ? hasFooter : hasFooter ? 1 : 0;\r\n return (\r\n 1 +\r\n pinnedTopCount +\r\n dataRowCount +\r\n pinnedBottomCount +\r\n footerRows\r\n );\r\n}\r\n\r\nfunction ariaToken(value: string): string {\r\n return value.replace(/[^A-Za-z0-9_-]/g, '_');\r\n}\r\n\r\n/** Stable DOM id for `aria-activedescendant` on the grid. */\r\nexport function gridCellDomId(\r\n tableKey: string,\r\n rowId: number,\r\n columnId: string,\r\n): string {\r\n return `erp-cell-${ariaToken(tableKey)}-${rowId}-${ariaToken(columnId)}`;\r\n}\r\n\r\nexport function isAriaSelectedCell(\r\n active: { rowId: number; columnId: string } | null | undefined,\r\n rowId: number,\r\n columnId: string,\r\n): boolean {\r\n return !!active && active.rowId === rowId && active.columnId === columnId;\r\n}\r\n\r\nexport function gridCellA11y(\r\n tableKey: string,\r\n rowId: number,\r\n columnId: string,\r\n active: { rowId: number; columnId: string } | null | undefined,\r\n): { id: string; 'aria-selected': boolean } {\r\n return {\r\n id: gridCellDomId(tableKey, rowId, columnId),\r\n 'aria-selected': isAriaSelectedCell(active, rowId, columnId),\r\n };\r\n}\r\n","import type { CSSProperties } from 'react';\r\n\r\nimport type { ColumnSchema } from '../bootstrap/type';\r\nimport {\r\n computeEndPinOffsets,\r\n computePinOffsets,\r\n resolveColumnPinned,\r\n type ColumnPinSide,\r\n} from '../engine/dataOps/columnPin';\r\nimport { isIndexColumn, type ColumnWidthHint } from '../engine/columnWidth';\r\n\r\n/** D19: any column may pin; index always pins at inline-start. */\r\nexport function columnPinSide(column: ColumnSchema): ColumnPinSide | null {\r\n const pin = resolveColumnPinned(column);\r\n if (pin === 'start' || pin === 'end') return pin;\r\n return null;\r\n}\r\n\r\nexport function columnPinClassName(column: ColumnWidthHint): string {\r\n if (isIndexColumn(column)) return 'erp-col-pin-start erp-col-pin-index';\r\n const side = columnPinSide(column as ColumnSchema);\r\n if (side === 'start') return 'erp-col-pin-start';\r\n if (side === 'end') return 'erp-col-pin-end';\r\n return '';\r\n}\r\n\r\n/** @deprecated Use `columnPinDataAttr` — kept for existing DOM hooks. */\r\nexport function indexPinClassName(column: ColumnWidthHint): string {\r\n return columnPinClassName(column);\r\n}\r\n\r\nexport function columnPinDataAttr(\r\n column: ColumnWidthHint,\r\n): ColumnPinSide | 'index' | undefined {\r\n if (isIndexColumn(column)) return 'index';\r\n return columnPinSide(column as ColumnSchema) ?? undefined;\r\n}\r\n\r\n/** @deprecated Use `columnPinDataAttr`. */\r\nexport function indexPinDataAttr(\r\n column: ColumnWidthHint,\r\n): 'index' | undefined {\r\n const attr = columnPinDataAttr(column);\r\n return attr === 'index' ? 'index' : undefined;\r\n}\r\n\r\nexport function columnPinStyle(\r\n column: ColumnSchema,\r\n startOffsets: Record<string, number>,\r\n endOffsets: Record<string, number>,\r\n): CSSProperties | undefined {\r\n const side = columnPinSide(column);\r\n if (side === 'start') {\r\n const offset = startOffsets[column.fieldName];\r\n if (offset === undefined) return undefined;\r\n return { insetInlineStart: offset };\r\n }\r\n if (side === 'end') {\r\n const offset = endOffsets[column.fieldName];\r\n if (offset === undefined) return undefined;\r\n return { insetInlineEnd: offset };\r\n }\r\n return undefined;\r\n}\r\n\r\nexport function columnPinCellProps(\r\n column: ColumnSchema,\r\n startOffsets: Record<string, number>,\r\n endOffsets: Record<string, number>,\r\n): {\r\n className: string;\r\n 'data-erp-col-pin': ReturnType<typeof columnPinDataAttr>;\r\n style: CSSProperties | undefined;\r\n} {\r\n return {\r\n className: columnPinClassName(column),\r\n 'data-erp-col-pin': columnPinDataAttr(column),\r\n style: columnPinStyle(column, startOffsets, endOffsets),\r\n };\r\n}\r\n\r\nexport function buildPinOffsetMaps(\r\n pinnedStart: readonly ColumnSchema[],\r\n pinnedEnd: readonly ColumnSchema[],\r\n resolveWidth: (col: ColumnSchema) => number,\r\n): {\r\n startOffsets: Record<string, number>;\r\n endOffsets: Record<string, number>;\r\n} {\r\n return {\r\n startOffsets: computePinOffsets(pinnedStart, resolveWidth),\r\n endOffsets: computeEndPinOffsets(pinnedEnd, resolveWidth),\r\n };\r\n}\r\n","\"use client\";\r\n\r\n\r\n\r\nimport React, {\r\n\r\n createContext,\r\n\r\n useContext,\r\n\r\n useEffect,\r\n\r\n useMemo,\r\n\r\n useState,\r\n\r\n type ReactNode,\r\n\r\n type RefObject,\r\n\r\n} from 'react';\r\n\r\n\r\n\r\nimport type { ColumnSchema } from '../../bootstrap/type';\r\n\r\nimport { partitionColumnsByPin, sumColumnWidths } from '../../engine/dataOps/columnPin';\r\nimport { computeLayoutColumnWidths } from '../../engine/dataOps/columnLayout';\r\nimport { resolveColumnWidth } from '../../engine/columnWidth';\r\n\r\nimport { ViewportCalculator } from '../../engine/ViewportCalculator';\r\n\r\nimport { useDirection } from '../host';\r\n\r\n\r\n\r\nexport type ColumnWindowModel = {\r\n\r\n /** Full non-hidden column list (document order). */\r\n\r\n allVisible: ColumnSchema[];\r\n\r\n /** Inline-start pinned columns (includes index). */\r\n\r\n pinnedStart: ColumnSchema[];\r\n\r\n /** @deprecated alias for pinnedStart */\r\n\r\n pinned: ColumnSchema[];\r\n\r\n pinnedEnd: ColumnSchema[];\r\n\r\n /** Visible scrollable slice only. */\r\n\r\n scrollable: ColumnSchema[];\r\n\r\n /** Absolute indices into `allVisible` for scrollable slice entries. */\r\n\r\n scrollableAbsIndices: number[];\r\n\r\n spacerStart: number;\r\n\r\n spacerEnd: number;\r\n\r\n pinnedStartWidth: number;\r\n\r\n /** @deprecated alias for pinnedStartWidth */\r\n\r\n pinnedWidth: number;\r\n\r\n pinnedEndWidth: number;\r\n\r\n startPinOffsets: Record<string, number>;\r\n\r\n endPinOffsets: Record<string, number>;\r\n\r\n totalWidth: number;\r\n\r\n /** Effective widths after flex distribution (PR-112). */\r\n layoutWidths: Record<string, number>;\r\n\r\n /** Number of `<th>` / data cells that should mount (pins + slice + spacers). */\r\n\r\n mountedScrollableCount: number;\r\n\r\n};\r\n\r\n\r\n\r\nconst EMPTY: ColumnWindowModel = {\r\n\r\n allVisible: [],\r\n\r\n pinnedStart: [],\r\n\r\n pinned: [],\r\n\r\n pinnedEnd: [],\r\n\r\n scrollable: [],\r\n\r\n scrollableAbsIndices: [],\r\n\r\n spacerStart: 0,\r\n\r\n spacerEnd: 0,\r\n\r\n pinnedStartWidth: 0,\r\n\r\n pinnedWidth: 0,\r\n\r\n pinnedEndWidth: 0,\r\n\r\n startPinOffsets: {},\r\n\r\n endPinOffsets: {},\r\n\r\n totalWidth: 0,\r\n\r\n layoutWidths: {},\r\n\r\n mountedScrollableCount: 0,\r\n\r\n};\r\n\r\n\r\n\r\nconst ColumnWindowContext = createContext<ColumnWindowModel>(EMPTY);\r\n\r\n\r\n\r\n/** Normalize scroll position to distance from inline-start (px ≥ 0). */\r\n\r\nexport function scrollOffsetFromInlineStart(\r\n\r\n el: HTMLElement,\r\n\r\n direction: 'rtl' | 'ltr',\r\n\r\n): number {\r\n\r\n const { scrollLeft, scrollWidth, clientWidth } = el;\r\n\r\n if (direction === 'ltr') return Math.max(0, scrollLeft);\r\n\r\n if (scrollLeft < 0) return Math.max(0, -scrollLeft);\r\n\r\n const max = Math.max(0, scrollWidth - clientWidth);\r\n\r\n return Math.max(0, max - scrollLeft);\r\n\r\n}\r\n\r\n\r\n\r\nexport function buildColumnWindowModel(\r\n\r\n allVisible: ColumnSchema[],\r\n\r\n columnWidths: Record<string, number> | undefined,\r\n\r\n scrollOffset: number,\r\n\r\n viewportSize: number,\r\n\r\n overscan = 1,\r\n\r\n flexContainerWidth = viewportSize,\r\n\r\n): ColumnWindowModel {\r\n\r\n const layoutWidths = computeLayoutColumnWidths(\r\n allVisible,\r\n columnWidths,\r\n flexContainerWidth,\r\n );\r\n\r\n const widthOf = (col: ColumnSchema) =>\r\n layoutWidths[col.fieldName] ?? resolveColumnWidth(col, columnWidths);\r\n\r\n\r\n\r\n const { pinnedStart, scrollable: scrollableAll, pinnedEnd, scrollableAbs } =\r\n\r\n partitionColumnsByPin(allVisible);\r\n\r\n\r\n\r\n const pinnedStartWidth = sumColumnWidths(pinnedStart, widthOf);\r\n\r\n const pinnedEndWidth = sumColumnWidths(pinnedEnd, widthOf);\r\n\r\n\r\n\r\n const scrollableWidths = scrollableAll.map(widthOf);\r\n\r\n const range = ViewportCalculator.calculateColumns(\r\n\r\n scrollableWidths,\r\n\r\n scrollOffset,\r\n\r\n viewportSize,\r\n\r\n pinnedStartWidth,\r\n\r\n overscan,\r\n\r\n pinnedEndWidth,\r\n\r\n );\r\n\r\n const scrollable = scrollableAll.slice(range.startIndex, range.endIndex);\r\n\r\n const scrollableAbsIndices = scrollableAbs.slice(\r\n\r\n range.startIndex,\r\n\r\n range.endIndex,\r\n\r\n );\r\n\r\n const totalScrollable = range.totalScrollableWidth;\r\n\r\n const spacerCells =\r\n\r\n (range.spacerStart > 0 ? 1 : 0) + (range.spacerEnd > 0 ? 1 : 0);\r\n\r\n\r\n\r\n let startCursor = 0;\r\n\r\n const startPinOffsets: Record<string, number> = {};\r\n\r\n for (const col of pinnedStart) {\r\n\r\n startPinOffsets[col.fieldName] = startCursor;\r\n\r\n startCursor += widthOf(col);\r\n\r\n }\r\n\r\n\r\n\r\n let endCursor = 0;\r\n\r\n const endPinOffsets: Record<string, number> = {};\r\n\r\n for (let i = pinnedEnd.length - 1; i >= 0; i -= 1) {\r\n\r\n const col = pinnedEnd[i]!;\r\n\r\n endPinOffsets[col.fieldName] = endCursor;\r\n\r\n endCursor += widthOf(col);\r\n\r\n }\r\n\r\n\r\n\r\n return {\r\n\r\n allVisible,\r\n\r\n pinnedStart,\r\n\r\n pinned: pinnedStart,\r\n\r\n pinnedEnd,\r\n\r\n scrollable,\r\n\r\n scrollableAbsIndices,\r\n\r\n spacerStart: range.spacerStart,\r\n\r\n spacerEnd: range.spacerEnd,\r\n\r\n pinnedStartWidth,\r\n\r\n pinnedWidth: pinnedStartWidth,\r\n\r\n pinnedEndWidth,\r\n\r\n startPinOffsets: startPinOffsets,\r\n\r\n endPinOffsets,\r\n\r\n totalWidth: pinnedStartWidth + totalScrollable + pinnedEndWidth,\r\n\r\n layoutWidths,\r\n\r\n mountedScrollableCount: scrollable.length + spacerCells,\r\n\r\n };\r\n\r\n}\r\n\r\n\r\n\r\ntype ProviderProps = {\r\n\r\n scrollRef: RefObject<HTMLElement | null>;\r\n\r\n columns: ColumnSchema[];\r\n\r\n columnWidths?: Record<string, number>;\r\n\r\n overscan?: number;\r\n\r\n onViewportWidthChange?: (width: number) => void;\r\n\r\n children: ReactNode;\r\n\r\n};\r\n\r\n\r\n\r\nexport function ColumnWindowProvider({\r\n\r\n scrollRef,\r\n\r\n columns,\r\n\r\n columnWidths,\r\n\r\n overscan = 1,\r\n\r\n onViewportWidthChange,\r\n\r\n children,\r\n\r\n}: ProviderProps) {\r\n\r\n const direction = useDirection();\r\n\r\n const [scrollOffset, setScrollOffset] = useState(0);\r\n\r\n const [viewportSize, setViewportSize] = useState(1024);\r\n\r\n\r\n\r\n const allVisible = useMemo(\r\n\r\n () => columns.filter((c) => !c.hidden),\r\n\r\n [columns],\r\n\r\n );\r\n\r\n\r\n\r\n useEffect(() => {\r\n\r\n const el = scrollRef.current;\r\n\r\n if (!el) return;\r\n\r\n\r\n\r\n const update = () => {\r\n\r\n setScrollOffset(scrollOffsetFromInlineStart(el, direction));\r\n\r\n const w = el.clientWidth || 1024;\r\n\r\n setViewportSize(w);\r\n\r\n onViewportWidthChange?.(w);\r\n\r\n };\r\n\r\n update();\r\n\r\n el.addEventListener('scroll', update, { passive: true });\r\n\r\n const ro =\r\n\r\n typeof ResizeObserver !== 'undefined'\r\n\r\n ? new ResizeObserver(() => update())\r\n\r\n : null;\r\n\r\n ro?.observe(el);\r\n\r\n return () => {\r\n\r\n el.removeEventListener('scroll', update);\r\n\r\n ro?.disconnect();\r\n\r\n };\r\n\r\n }, [scrollRef, direction, allVisible.length, columnWidths, onViewportWidthChange]);\r\n\r\n\r\n\r\n const value = useMemo(\r\n\r\n () =>\r\n\r\n buildColumnWindowModel(\r\n\r\n allVisible,\r\n\r\n columnWidths,\r\n\r\n scrollOffset,\r\n\r\n viewportSize,\r\n\r\n overscan,\r\n\r\n ),\r\n\r\n [allVisible, columnWidths, scrollOffset, viewportSize, overscan],\r\n\r\n );\r\n\r\n\r\n\r\n return (\r\n\r\n <ColumnWindowContext.Provider value={value}>\r\n\r\n {children}\r\n\r\n </ColumnWindowContext.Provider>\r\n\r\n );\r\n\r\n}\r\n\r\n\r\n\r\nexport function useColumnWindow(): ColumnWindowModel {\r\n\r\n return useContext(ColumnWindowContext);\r\n\r\n}\r\n\r\n\r\n\r\n/** Fallback when provider is absent: render every visible column. */\r\n\r\nexport function useColumnWindowOrAll(\r\n\r\n columns: ColumnSchema[],\r\n\r\n columnWidths?: Record<string, number>,\r\n\r\n): ColumnWindowModel {\r\n\r\n const ctx = useContext(ColumnWindowContext);\r\n\r\n const allVisible = columns.filter((c) => !c.hidden);\r\n\r\n if (ctx.allVisible.length > 0) return ctx;\r\n\r\n return buildColumnWindowModel(allVisible, columnWidths, 0, 1e9, 0, 0);\r\n\r\n}\r\n\r\n\r\n","\"use client\";\r\n\r\n\r\n\r\nimport React, { type CSSProperties, type ReactNode } from 'react';\r\n\r\n\r\n\r\nimport type { ColumnSchema } from '../../bootstrap/type';\r\n\r\nimport type { ColumnWindowModel } from './columnWindow';\r\n\r\n\r\n\r\ntype SpacerKind = 'start' | 'end';\r\n\r\n\r\n\r\ntype Props = {\r\n\r\n window: ColumnWindowModel;\r\n\r\n /** Render a real pinned / scrollable column cell. */\r\n\r\n renderColumn: (col: ColumnSchema, absoluteIndex: number) => ReactNode;\r\n\r\n /** Element type for horizontal spacers (`th` in header, `td` elsewhere). */\r\n\r\n spacerElement: 'th' | 'td';\r\n\r\n spacerRole?: 'columnheader' | 'presentation' | 'gridcell';\r\n\r\n spacerStyle?: CSSProperties;\r\n\r\n};\r\n\r\n\r\n\r\nfunction renderPinnedColumns(\r\n\r\n cols: ColumnSchema[],\r\n\r\n model: ColumnWindowModel,\r\n\r\n renderColumn: Props['renderColumn'],\r\n\r\n keyPrefix: string,\r\n\r\n) {\r\n\r\n const nodes: ReactNode[] = [];\r\n\r\n for (const col of cols) {\r\n\r\n const abs = model.allVisible.findIndex((c) => c.fieldName === col.fieldName);\r\n\r\n nodes.push(\r\n\r\n <React.Fragment key={`${keyPrefix}-${col.fieldName}`}>\r\n\r\n {renderColumn(col, abs >= 0 ? abs : 0)}\r\n\r\n </React.Fragment>,\r\n\r\n );\r\n\r\n }\r\n\r\n return nodes;\r\n\r\n}\r\n\r\n\r\n\r\n/**\r\n\r\n * Shared column chrome for header / body / footer (PR-98 / PR-110):\r\n\r\n * pin start → spacerStart → scrollable window → spacerEnd → pin end.\r\n\r\n */\r\n\r\nexport function ColumnWindowCells({\r\n\r\n window: model,\r\n\r\n renderColumn,\r\n\r\n spacerElement: Spacer,\r\n\r\n spacerRole = 'presentation',\r\n\r\n spacerStyle,\r\n\r\n}: Props) {\r\n\r\n const nodes: ReactNode[] = [];\r\n\r\n\r\n\r\n nodes.push(\r\n\r\n ...renderPinnedColumns(model.pinnedStart, model, renderColumn, 'pin-start'),\r\n\r\n );\r\n\r\n\r\n\r\n if (model.spacerStart > 0) {\r\n\r\n nodes.push(\r\n\r\n <Spacer\r\n\r\n key=\"pdg-col-spacer-start\"\r\n\r\n aria-hidden\r\n\r\n role={spacerRole}\r\n\r\n data-pdg-col-spacer=\"start\"\r\n\r\n style={{\r\n\r\n width: model.spacerStart,\r\n\r\n minWidth: model.spacerStart,\r\n\r\n padding: 0,\r\n\r\n border: 'none',\r\n\r\n ...spacerStyle,\r\n\r\n }}\r\n\r\n />,\r\n\r\n );\r\n\r\n }\r\n\r\n\r\n\r\n model.scrollable.forEach((col, i) => {\r\n\r\n const abs = model.scrollableAbsIndices[i] ?? i;\r\n\r\n nodes.push(\r\n\r\n <React.Fragment key={`scr-${col.fieldName}`}>\r\n\r\n {renderColumn(col, abs)}\r\n\r\n </React.Fragment>,\r\n\r\n );\r\n\r\n });\r\n\r\n\r\n\r\n if (model.spacerEnd > 0) {\r\n\r\n nodes.push(\r\n\r\n <Spacer\r\n\r\n key=\"pdg-col-spacer-end\"\r\n\r\n aria-hidden\r\n\r\n role={spacerRole}\r\n\r\n data-pdg-col-spacer=\"end\"\r\n\r\n style={{\r\n\r\n width: model.spacerEnd,\r\n\r\n minWidth: model.spacerEnd,\r\n\r\n padding: 0,\r\n\r\n border: 'none',\r\n\r\n ...spacerStyle,\r\n\r\n }}\r\n\r\n />,\r\n\r\n );\r\n\r\n }\r\n\r\n\r\n\r\n nodes.push(\r\n\r\n ...renderPinnedColumns(model.pinnedEnd, model, renderColumn, 'pin-end'),\r\n\r\n );\r\n\r\n\r\n\r\n return <>{nodes}</>;\r\n\r\n}\r\n\r\n\r\n\r\nexport type { SpacerKind };\r\n\r\n\r\n"]}
|