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":["../engine/columnWidth.ts","../engine/ColumnViewport.ts","../engine/ViewportCalculator.ts","../engine/dataOps/columnPin.ts","../engine/dataOps/columnLayout.ts"],"names":["sum"],"mappings":"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","file":"chunk-IPPIXOVQ.js","sourcesContent":["export const DEFAULT_COLUMN_MIN_WIDTH = 144;\r\nexport const INDEX_COLUMN_DEFAULT_WIDTH = 168;\r\n\r\nexport type ColumnWidthHint = {\r\n fieldName?: string;\r\n fieldType?: string;\r\n minWidth?: number;\r\n};\r\n\r\nexport function isIndexColumn(column: ColumnWidthHint): boolean {\r\n return column.fieldType === 'index' || column.fieldName === 'index';\r\n}\r\n\r\nexport function columnWidthFloor(column?: ColumnWidthHint): number {\r\n const schemaMin = column?.minWidth ?? 0;\r\n if (column && isIndexColumn(column)) {\r\n return Math.max(INDEX_COLUMN_DEFAULT_WIDTH, schemaMin);\r\n }\r\n return Math.max(DEFAULT_COLUMN_MIN_WIDTH, schemaMin);\r\n}\r\n\r\nexport function clampColumnWidth(\r\n width: number,\r\n column?: ColumnWidthHint,\r\n): number {\r\n const floor = columnWidthFloor(column);\r\n if (!Number.isFinite(width)) return floor;\r\n return Math.max(floor, Math.round(width));\r\n}\r\n\r\nexport function resolveColumnWidth(\r\n column: ColumnWidthHint & { fieldName: string },\r\n columnWidths: Record<string, number> | undefined,\r\n): number {\r\n const stored = columnWidths?.[column.fieldName];\r\n if (typeof stored === 'number' && Number.isFinite(stored)) {\r\n return clampColumnWidth(stored, column);\r\n }\r\n if (isIndexColumn(column)) {\r\n return INDEX_COLUMN_DEFAULT_WIDTH;\r\n }\r\n return column.minWidth ?? DEFAULT_COLUMN_MIN_WIDTH;\r\n}\r\n\r\nexport function columnSizeStyle(\r\n column: ColumnWidthHint & { fieldName: string },\r\n columnWidths: Record<string, number> | undefined,\r\n layoutWidths?: Record<string, number>,\r\n): { width: number; minWidth: number } {\r\n const width =\r\n layoutWidths?.[column.fieldName] ??\r\n resolveColumnWidth(column, columnWidths);\r\n return { width, minWidth: width };\r\n}\r\n\r\n/** Apply a stored session width on top of a surface-specific fallback (mobile). */\r\nexport function overlayStoredColumnWidth(\r\n column: ColumnWidthHint & { fieldName: string },\r\n columnWidths: Record<string, number> | undefined,\r\n base: { width?: number; minWidth?: number; maxWidth?: number },\r\n): { width?: number; minWidth?: number; maxWidth?: number } {\r\n const stored = columnWidths?.[column.fieldName];\r\n if (typeof stored !== 'number' || !Number.isFinite(stored)) {\r\n return base;\r\n }\r\n const width = clampColumnWidth(stored, column);\r\n return { width, minWidth: width };\r\n}\r\n","/**\r\n * Horizontal column window (PR-98).\r\n * Variable-width columns via cumulative widths + binary search.\r\n * Pinned columns are excluded from the scrollable slice (always rendered by the host).\r\n */\r\n\r\nexport type ColumnVisibleRange = {\r\n /** Inclusive start into the scrollable-widths array. */\r\n startIndex: number;\r\n /** Exclusive end into the scrollable-widths array. */\r\n endIndex: number;\r\n /** px before the first visible scrollable column. */\r\n spacerStart: number;\r\n /** px after the last visible scrollable column. */\r\n spacerEnd: number;\r\n totalScrollableWidth: number;\r\n visibleCount: number;\r\n};\r\n\r\n/** Prefix sums: `cum[i]` = sum(widths[0..i)). Length = widths.length + 1. */\r\nexport function buildCumulativeWidths(widths: readonly number[]): number[] {\r\n const cum = new Array<number>(widths.length + 1);\r\n cum[0] = 0;\r\n for (let i = 0; i < widths.length; i += 1) {\r\n const w = widths[i] ?? 0;\r\n cum[i + 1] = cum[i]! + (Number.isFinite(w) && w > 0 ? w : 0);\r\n }\r\n return cum;\r\n}\r\n\r\n/** First index `i` where `cum[i] > value` (cum is non-decreasing). */\r\nexport function upperBoundCumulative(cum: readonly number[], value: number): number {\r\n let lo = 0;\r\n let hi = cum.length;\r\n while (lo < hi) {\r\n const mid = (lo + hi) >> 1;\r\n if ((cum[mid] ?? 0) > value) hi = mid;\r\n else lo = mid + 1;\r\n }\r\n return lo;\r\n}\r\n\r\n/**\r\n * First scrollable column whose end exceeds `viewStart` (absolute px from table start).\r\n * `cum` is relative to the scrollable region (starts at 0).\r\n */\r\nexport function findStartColumnIndex(\r\n cum: readonly number[],\r\n viewStartInScrollable: number,\r\n): number {\r\n if (cum.length <= 1) return 0;\r\n // first i where cum[i+1] > viewStart ⇔ upperBound(cum, viewStart) - 1, clamped\r\n const idx = upperBoundCumulative(cum, viewStartInScrollable) - 1;\r\n return Math.max(0, Math.min(cum.length - 2, idx));\r\n}\r\n\r\n/** First column index whose start is >= viewEnd (exclusive end). */\r\nexport function findEndColumnIndex(\r\n cum: readonly number[],\r\n viewEndInScrollable: number,\r\n): number {\r\n if (cum.length <= 1) return 0;\r\n const idx = upperBoundCumulative(cum, viewEndInScrollable - Number.EPSILON);\r\n // upperBound returns first cum[i] > viewEnd-ε; we want first start >= viewEnd\r\n // If cum[i] is start of column i, first i with cum[i] >= viewEnd:\r\n let lo = 0;\r\n let hi = cum.length - 1;\r\n while (lo < hi) {\r\n const mid = (lo + hi) >> 1;\r\n if ((cum[mid] ?? 0) >= viewEndInScrollable) hi = mid;\r\n else lo = mid + 1;\r\n }\r\n return Math.max(0, Math.min(cum.length - 1, lo));\r\n}\r\n\r\n/**\r\n * @param scrollableWidths widths of non-pinned columns in document order\r\n * @param scrollOffset absolute scroll from table inline-start (px)\r\n * @param viewportSize visible width of the scrollport (px)\r\n * @param pinnedStartWidth total width of inline-start pinned columns (px)\r\n * @param overscan extra columns on each side\r\n * @param pinnedEndWidth total width of inline-end pinned columns (px)\r\n */\r\nexport function calculateColumnViewport(\r\n scrollableWidths: readonly number[],\r\n scrollOffset: number,\r\n viewportSize: number,\r\n pinnedStartWidth = 0,\r\n overscan = 1,\r\n pinnedEndWidth = 0,\r\n): ColumnVisibleRange {\r\n const cum = buildCumulativeWidths(scrollableWidths);\r\n const totalScrollableWidth = cum[cum.length - 1] ?? 0;\r\n const n = scrollableWidths.length;\r\n\r\n if (n === 0 || viewportSize <= 0) {\r\n return {\r\n startIndex: 0,\r\n endIndex: 0,\r\n spacerStart: 0,\r\n spacerEnd: 0,\r\n totalScrollableWidth,\r\n visibleCount: 0,\r\n };\r\n }\r\n\r\n const maxScroll = Math.max(\r\n 0,\r\n pinnedStartWidth + totalScrollableWidth + pinnedEndWidth - viewportSize,\r\n );\r\n const clampedScroll = Math.min(Math.max(0, scrollOffset), maxScroll);\r\n const scrollableViewport = Math.max(\r\n 0,\r\n viewportSize - pinnedStartWidth - pinnedEndWidth,\r\n );\r\n\r\n const relStart = Math.max(0, clampedScroll - pinnedStartWidth);\r\n const relEnd = relStart + scrollableViewport;\r\n\r\n let startIndex = findStartColumnIndex(cum, relStart);\r\n let endIndex = findEndColumnIndex(cum, relEnd);\r\n\r\n startIndex = Math.max(0, startIndex - overscan);\r\n endIndex = Math.min(n, endIndex + overscan);\r\n if (endIndex < startIndex) endIndex = startIndex;\r\n\r\n const spacerStart = cum[startIndex] ?? 0;\r\n const spacerEnd = Math.max(0, totalScrollableWidth - (cum[endIndex] ?? 0));\r\n\r\n return {\r\n startIndex,\r\n endIndex,\r\n spacerStart,\r\n spacerEnd,\r\n totalScrollableWidth,\r\n visibleCount: Math.max(0, endIndex - startIndex),\r\n };\r\n}\r\n\r\nexport function projectColumnSlice<T>(\r\n items: readonly T[],\r\n range: ColumnVisibleRange,\r\n): T[] {\r\n return items.slice(range.startIndex, range.endIndex);\r\n}\r\n","import { Viewport, type VisibleRange } from '../domain/value-objects/Viewport';\r\nimport {\r\n calculateColumnViewport,\r\n projectColumnSlice,\r\n type ColumnVisibleRange,\r\n} from './ColumnViewport';\r\n\r\nexport type { ColumnVisibleRange } from './ColumnViewport';\r\nexport {\r\n buildCumulativeWidths,\r\n calculateColumnViewport,\r\n projectColumnSlice,\r\n} from './ColumnViewport';\r\n\r\n/**\r\n * Pure virtual-window calculator — no DOM / window / document.\r\n * Vertical: totalRows + Viewport → VisibleRange.\r\n * Horizontal (PR-98): scrollable widths + scroll → ColumnVisibleRange.\r\n */\r\nexport class ViewportCalculator {\r\n static calculate(totalRows: number, viewport: Viewport): VisibleRange {\r\n const safeTotal = Math.max(0, Math.floor(totalRows));\r\n const { scrollOffset, viewportSize, rowHeight, overscan } = viewport;\r\n const totalHeight = safeTotal * rowHeight;\r\n\r\n if (safeTotal === 0) {\r\n return {\r\n startIndex: 0,\r\n endIndex: 0,\r\n startOffset: 0,\r\n endOffset: 0,\r\n totalHeight: 0,\r\n visibleCount: 0,\r\n };\r\n }\r\n\r\n const maxOffset = Math.max(0, totalHeight - viewportSize);\r\n const clampedScroll = Math.min(scrollOffset, maxOffset);\r\n\r\n const rawStart = Math.floor(clampedScroll / rowHeight);\r\n const rawEnd = Math.ceil((clampedScroll + viewportSize) / rowHeight);\r\n\r\n const startIndex = Math.max(0, rawStart - overscan);\r\n const endIndex = Math.min(safeTotal, rawEnd + overscan);\r\n\r\n return {\r\n startIndex,\r\n endIndex,\r\n startOffset: startIndex * rowHeight,\r\n endOffset: Math.max(0, totalHeight - endIndex * rowHeight),\r\n totalHeight,\r\n visibleCount: Math.max(0, endIndex - startIndex),\r\n };\r\n }\r\n\r\n /** Contiguous index list for the visible window. */\r\n static indices(range: VisibleRange): number[] {\r\n const out: number[] = [];\r\n for (let i = range.startIndex; i < range.endIndex; i += 1) {\r\n out.push(i);\r\n }\r\n return out;\r\n }\r\n\r\n /** Slice a dense array by VisibleRange (O(window), not O(n)). */\r\n static projectRows<T>(rows: readonly T[], range: VisibleRange): T[] {\r\n return rows.slice(range.startIndex, range.endIndex);\r\n }\r\n\r\n /**\r\n * Project from sparse structure: ordered id list + Map by id.\r\n * Suitable for 100k+ tables without materializing full UI rows.\r\n */\r\n static projectByIndex<T>(\r\n orderedIds: readonly number[],\r\n byId: ReadonlyMap<number, T>,\r\n range: VisibleRange,\r\n ): T[] {\r\n const out: T[] = [];\r\n const end = Math.min(range.endIndex, orderedIds.length);\r\n for (let i = range.startIndex; i < end; i += 1) {\r\n const id = orderedIds[i];\r\n const row = byId.get(id);\r\n if (row !== undefined) out.push(row);\r\n }\r\n return out;\r\n }\r\n\r\n /** Horizontal column window (PR-98). */\r\n static calculateColumns(\r\n scrollableWidths: readonly number[],\r\n scrollOffset: number,\r\n viewportSize: number,\r\n pinnedStartWidth = 0,\r\n overscan = 1,\r\n pinnedEndWidth = 0,\r\n ): ColumnVisibleRange {\r\n return calculateColumnViewport(\r\n scrollableWidths,\r\n scrollOffset,\r\n viewportSize,\r\n pinnedStartWidth,\r\n overscan,\r\n pinnedEndWidth,\r\n );\r\n }\r\n\r\n static projectColumns<T>(\r\n items: readonly T[],\r\n range: ColumnVisibleRange,\r\n ): T[] {\r\n return projectColumnSlice(items, range);\r\n }\r\n}\r\n","/**\r\n * Column pin partitioning (PR-110 / D19).\r\n * Pure — no React/DOM.\r\n */\r\n\r\nimport type { ColumnPinned } from '../../domain/types/ColumnDef';\r\nimport type { ColumnSchema } from '../../domain/types/ColumnSchema';\r\nimport { isIndexColumn } from '../columnWidth';\r\n\r\nexport type ColumnPinSide = 'start' | 'end';\r\n\r\nexport type ColumnPinPartition = {\r\n pinnedStart: ColumnSchema[];\r\n scrollable: ColumnSchema[];\r\n pinnedEnd: ColumnSchema[];\r\n /** Absolute index in the full visible list for each entry. */\r\n pinnedStartAbs: number[];\r\n scrollableAbs: number[];\r\n pinnedEndAbs: number[];\r\n};\r\n\r\n/** Index column is always pinned at inline-start (D19 supersedes D10). */\r\nexport function resolveColumnPinned(\r\n column: ColumnSchema,\r\n): ColumnPinned {\r\n if (isIndexColumn(column)) return 'start';\r\n const pinned = column.columnDef?.pinned;\r\n if (pinned === 'start' || pinned === 'end') return pinned;\r\n return null;\r\n}\r\n\r\nexport function isPinnedColumn(column: ColumnSchema): boolean {\r\n return resolveColumnPinned(column) != null;\r\n}\r\n\r\nexport function partitionColumnsByPin(\r\n columns: readonly ColumnSchema[],\r\n): ColumnPinPartition {\r\n const pinnedStart: ColumnSchema[] = [];\r\n const scrollable: ColumnSchema[] = [];\r\n const pinnedEnd: ColumnSchema[] = [];\r\n const pinnedStartAbs: number[] = [];\r\n const scrollableAbs: number[] = [];\r\n const pinnedEndAbs: number[] = [];\r\n\r\n columns.forEach((col, abs) => {\r\n const pin = resolveColumnPinned(col);\r\n if (pin === 'start') {\r\n pinnedStart.push(col);\r\n pinnedStartAbs.push(abs);\r\n } else if (pin === 'end') {\r\n pinnedEnd.push(col);\r\n pinnedEndAbs.push(abs);\r\n } else {\r\n scrollable.push(col);\r\n scrollableAbs.push(abs);\r\n }\r\n });\r\n\r\n return {\r\n pinnedStart,\r\n scrollable,\r\n pinnedEnd,\r\n pinnedStartAbs,\r\n scrollableAbs,\r\n pinnedEndAbs,\r\n };\r\n}\r\n\r\nexport function computePinOffsets(\r\n columns: readonly ColumnSchema[],\r\n resolveWidth: (col: ColumnSchema) => number,\r\n): Record<string, number> {\r\n const offsets: Record<string, number> = {};\r\n let cursor = 0;\r\n for (const col of columns) {\r\n offsets[col.fieldName] = cursor;\r\n cursor += resolveWidth(col);\r\n }\r\n return offsets;\r\n}\r\n\r\nexport function computeEndPinOffsets(\r\n columns: readonly ColumnSchema[],\r\n resolveWidth: (col: ColumnSchema) => number,\r\n): Record<string, number> {\r\n const offsets: Record<string, number> = {};\r\n let cursor = 0;\r\n for (let i = columns.length - 1; i >= 0; i -= 1) {\r\n const col = columns[i]!;\r\n offsets[col.fieldName] = cursor;\r\n cursor += resolveWidth(col);\r\n }\r\n return offsets;\r\n}\r\n\r\nexport function sumColumnWidths(\r\n columns: readonly ColumnSchema[],\r\n resolveWidth: (col: ColumnSchema) => number,\r\n): number {\r\n return columns.reduce((sum, col) => sum + resolveWidth(col), 0);\r\n}\r\n","import {\r\n clampColumnWidth,\r\n columnWidthFloor,\r\n resolveColumnWidth,\r\n type ColumnWidthHint,\r\n} from '../columnWidth';\r\n\r\nexport type ColumnFlexHint = ColumnWidthHint & {\r\n fieldName: string;\r\n columnDef?: { flex?: number };\r\n};\r\n\r\n/** Flex weight from `ColumnDef.flex` (via `columnDef` bridge). */\r\nexport function getColumnFlex(column: ColumnFlexHint): number {\r\n const flex = column.columnDef?.flex;\r\n if (typeof flex === 'number' && flex > 0 && Number.isFinite(flex)) return flex;\r\n return 0;\r\n}\r\n\r\n/** Flex applies only when the column has flex and no explicit session width. */\r\nexport function isFlexColumn(\r\n column: ColumnFlexHint,\r\n columnWidths: Record<string, number> | undefined,\r\n): boolean {\r\n if (getColumnFlex(column) <= 0) return false;\r\n const stored = columnWidths?.[column.fieldName];\r\n return !(typeof stored === 'number' && Number.isFinite(stored));\r\n}\r\n\r\n/**\r\n * Distribute remaining container width to flex columns (PR-112).\r\n * Fixed columns keep `resolveColumnWidth`; flex columns grow from their floor.\r\n */\r\nexport function computeLayoutColumnWidths(\r\n columns: readonly ColumnFlexHint[],\r\n columnWidths: Record<string, number> | undefined,\r\n containerWidth: number,\r\n): Record<string, number> {\r\n const visible = columns.filter((c) => !('hidden' in c && c.hidden));\r\n if (visible.length === 0) return {};\r\n\r\n const entries = visible.map((col) => ({\r\n col,\r\n fieldName: col.fieldName,\r\n flex: isFlexColumn(col, columnWidths) ? getColumnFlex(col) : 0,\r\n baseWidth: resolveColumnWidth(col, columnWidths),\r\n floor: columnWidthFloor(col),\r\n }));\r\n\r\n const out: Record<string, number> = {};\r\n const hasFlex = entries.some((e) => e.flex > 0);\r\n\r\n if (!hasFlex || containerWidth <= 0) {\r\n for (const e of entries) out[e.fieldName] = e.baseWidth;\r\n return out;\r\n }\r\n\r\n let fixedSum = 0;\r\n let flexMinSum = 0;\r\n let totalFlex = 0;\r\n for (const e of entries) {\r\n if (e.flex > 0) {\r\n flexMinSum += e.floor;\r\n totalFlex += e.flex;\r\n } else {\r\n fixedSum += e.baseWidth;\r\n }\r\n }\r\n\r\n const remaining = containerWidth - fixedSum - flexMinSum;\r\n\r\n for (const e of entries) {\r\n if (e.flex <= 0) {\r\n out[e.fieldName] = e.baseWidth;\r\n } else if (remaining <= 0 || totalFlex <= 0) {\r\n out[e.fieldName] = e.floor;\r\n } else {\r\n const share = remaining * (e.flex / totalFlex);\r\n out[e.fieldName] = clampColumnWidth(e.floor + share, e.col);\r\n }\r\n }\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Scale visible column widths proportionally to fit `containerWidth` (PR-112).\r\n */\r\nexport function sizeColumnsToFitWidths(\r\n columns: readonly ColumnFlexHint[],\r\n columnWidths: Record<string, number> | undefined,\r\n containerWidth: number,\r\n): Record<string, number> {\r\n const visible = columns.filter((c) => !('hidden' in c && c.hidden));\r\n if (visible.length === 0 || containerWidth <= 0) return {};\r\n\r\n const current = visible.map((col) => ({\r\n col,\r\n colId: col.fieldName,\r\n width: resolveColumnWidth(col, columnWidths),\r\n }));\r\n\r\n const total = current.reduce((sum, c) => sum + c.width, 0);\r\n if (total <= 0) return {};\r\n\r\n const scale = containerWidth / total;\r\n const out: Record<string, number> = {};\r\n for (const c of current) {\r\n out[c.colId] = clampColumnWidth(c.width * scale, c.col);\r\n }\r\n\r\n const sum = Object.values(out).reduce((a, b) => a + b, 0);\r\n const delta = containerWidth - sum;\r\n if (delta !== 0 && visible.length > 0) {\r\n const last = visible[visible.length - 1]!;\r\n out[last.fieldName] = clampColumnWidth(\r\n (out[last.fieldName] ?? 0) + delta,\r\n last,\r\n );\r\n }\r\n\r\n return out;\r\n}\r\n"]}
|