@ishibashi0112/spreadsheet-grid-core 0.39.0 → 0.41.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/dist/controllers/asyncSelectOptionsSource.cjs +1 -0
- package/dist/controllers/asyncSelectOptionsSource.d.ts +32 -0
- package/dist/controllers/asyncSelectOptionsSource.js +90 -0
- package/dist/controllers/autoHeightMeasurer.cjs +1 -1
- package/dist/controllers/autoHeightMeasurer.js +19 -19
- package/dist/controllers/clipboardController.cjs +2 -2
- package/dist/controllers/clipboardController.js +54 -47
- package/dist/controllers/columnAutosizeRunner.cjs +1 -1
- package/dist/controllers/columnAutosizeRunner.js +7 -7
- package/dist/controllers/filterPopoverController.cjs +1 -1
- package/dist/controllers/filterPopoverController.js +7 -7
- package/dist/controllers/keyboardController.cjs +1 -1
- package/dist/controllers/keyboardController.js +10 -4
- package/dist/controllers/pointerInteractionsController.cjs +1 -1
- package/dist/controllers/pointerInteractionsController.js +71 -71
- package/dist/controllers/selectOptionsCollector.cjs +1 -1
- package/dist/controllers/selectOptionsCollector.d.ts +4 -1
- package/dist/controllers/selectOptionsCollector.js +7 -7
- package/dist/engine/columnCommands.cjs +1 -1
- package/dist/engine/columnCommands.js +54 -54
- package/dist/engine/filterPopoverCommands.cjs +1 -1
- package/dist/engine/filterPopoverCommands.d.ts +5 -2
- package/dist/engine/filterPopoverCommands.js +12 -12
- package/dist/engine/gridApi.cjs +1 -1
- package/dist/engine/gridApi.d.ts +6 -0
- package/dist/engine/gridApi.js +75 -56
- package/dist/engine/notifiers.cjs +1 -1
- package/dist/engine/notifiers.d.ts +3 -1
- package/dist/engine/notifiers.js +11 -11
- package/dist/engine/rowPipeline.cjs +1 -1
- package/dist/engine/rowPipeline.d.ts +13 -2
- package/dist/engine/rowPipeline.js +51 -39
- package/dist/engine/verticalLayout.cjs +1 -1
- package/dist/engine/verticalLayout.d.ts +4 -0
- package/dist/engine/verticalLayout.js +40 -28
- package/dist/logic/exportCsv.cjs +2 -2
- package/dist/logic/exportCsv.d.ts +4 -1
- package/dist/logic/exportCsv.js +16 -11
- package/dist/logic/exportData.cjs +1 -1
- package/dist/logic/exportData.d.ts +3 -1
- package/dist/logic/exportData.js +29 -13
- package/dist/logic/gridState.cjs +1 -1
- package/dist/logic/gridState.d.ts +5 -0
- package/dist/logic/gridState.js +10 -7
- package/dist/logic/labelRows.cjs +1 -0
- package/dist/logic/labelRows.d.ts +45 -0
- package/dist/logic/labelRows.js +157 -0
- package/dist/logic/verticalGeometry.cjs +1 -1
- package/dist/logic/verticalGeometry.d.ts +5 -0
- package/dist/logic/verticalGeometry.js +39 -5
- package/dist/model/gridTypes.core.d.ts +50 -0
- package/dist/model/gridTypes.unbound.d.ts +1 -0
- package/package.json +1 -1
|
@@ -195,22 +195,22 @@ var h = (e, t) => {
|
|
|
195
195
|
return;
|
|
196
196
|
}
|
|
197
197
|
a(e.setColumnFilter(o, n(s)));
|
|
198
|
-
}, D = (e) => {
|
|
199
|
-
let { updateNumberDraft:
|
|
200
|
-
if (
|
|
201
|
-
let
|
|
202
|
-
E(
|
|
198
|
+
}, D = (e, t) => {
|
|
199
|
+
let { updateNumberDraft: n, openedFilterType: r } = m();
|
|
200
|
+
if (n(e), r !== "numberSet" || t?.commit === !1) return;
|
|
201
|
+
let i = s(e);
|
|
202
|
+
E(i !== null, (e) => ({
|
|
203
203
|
kind: "numberSet",
|
|
204
|
-
condition:
|
|
204
|
+
condition: i,
|
|
205
205
|
set: e
|
|
206
206
|
}));
|
|
207
|
-
}, O = (e) => {
|
|
208
|
-
let { updateTextDraft:
|
|
209
|
-
if (
|
|
210
|
-
let
|
|
211
|
-
E(
|
|
207
|
+
}, O = (e, t) => {
|
|
208
|
+
let { updateTextDraft: n, openedFilterType: r } = m();
|
|
209
|
+
if (n(e), r !== "textSet" || t?.commit === !1) return;
|
|
210
|
+
let i = l(e);
|
|
211
|
+
E(i !== null, (e) => ({
|
|
212
212
|
kind: "textSet",
|
|
213
|
-
condition:
|
|
213
|
+
condition: i,
|
|
214
214
|
set: e
|
|
215
215
|
}));
|
|
216
216
|
}, k = (e) => {
|
package/dist/engine/gridApi.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/grouping.cjs"),t=require("../logic/detailRow.cjs"),n=require("../model/gridActions.cjs"),r=require("../logic/geometry.cjs"),i=require("../model/gridSelectors.cjs"),a=require("../logic/validation.cjs"),o=require("../logic/verticalGeometry.cjs"),s=require("../logic/rowSelection.cjs"),c=require("../logic/gridState.cjs"),l=require("../logic/scrollTargets.cjs"),u=require("../logic/exportCsv.cjs"),d=require("../logic/exportData.cjs"),f=require("../logic/exportScope.cjs");var p=()=>{let p=null,m=(e,t,n=`auto`)=>{let r=Math.max(e.scrollHeight-e.clientHeight,0),i=Math.max(e.scrollWidth-e.clientWidth,0),a=Math.min(Math.max(t.top,0),r),o=Math.min(Math.max(t.left,0),i);(Math.round(a)!==Math.round(e.scrollTop)||Math.round(o)!==Math.round(e.scrollLeft))&&p?.markApiScroll(),e.scrollTo({top:a,left:o,behavior:n})},h=(e,t)=>{let n=p?.scrollContainerRef.current??null,r=p;!n||!r||m(n,{top:e===null?n.scrollTop:o.logicalToPhysicalScrollTop(e,r.verticalScaleFactor),left:t===null?n.scrollLeft:t})},g=(e,t)=>{let n=p?.scrollContainerRef.current??null,r=p;if(!n||!r||r.viewRowCount===0)return null;let i=Math.min(Math.max(e,0),r.viewRowCount-1);return l.computeVerticalScrollTarget({rowTop:r.rowMetrics.rowTop(i),rowHeight:r.rowMetrics.cellHeight(i),headerHeight:r.headerHeight,viewportHeight:n.clientHeight,currentScrollTop:o.physicalToLogicalScrollTop(n.scrollTop,r.verticalScaleFactor),align:t})},_=(e,t)=>{let n=p?.scrollContainerRef.current??null,i=p;if(!n||!i)return null;let a=r.computeSinglePaneColumnExtent(i.paneLayout,e);return!a||a.pane!==`center`?null:l.computeHorizontalScrollTarget({cellLeft:i.leftPaneTotalWidth+i.centerLeadingWidth+a.extent.start,cellWidth:a.extent.width,leftPaneWidth:i.leftPaneTotalWidth,rightPaneWidth:i.rightPaneTotalWidth,viewportWidth:n.clientWidth,currentScrollLeft:n.scrollLeft,align:t})},v=(e,t,n)=>{h(g(e,n),_(t,n))},y=e=>{let t=p;if(!t)return null;let n=e=>t.rowModel.getRow(e),r=t.isRowExportable,a=r?(e,n)=>r(e,{viewRowIndex:n,rowKey:t.rowModel.getRowKey(n)??n}):void 0,o=r?(e,n)=>r(e,{viewRowIndex:n,rowKey:t.resolvedRowKeyGetter(e,n)}):void 0,s=f.normalizeExportScope(e);if(s===`raw`)return t.isServerSide?(console.warn(`SpreadsheetGrid: scope 'raw' は serverSide では未ロード行を取得できないため、'view'(ロード済みビュー行)として扱います。全件エクスポートはサーバ側での実施を推奨します。`),{getRow:n,startRow:0,endRow:t.viewRowCount,columns:t.orderedColumns,isRowIncluded:a}):{getRow:e=>t.rows[e],startRow:0,endRow:t.rows.length,columns:t.orderedColumns,isRowIncluded:o};if(s===`rendered`)return{getRow:n,startRow:t.windowFirstRow,endRow:t.windowLastRow>=t.windowFirstRow?t.windowLastRow+1:t.windowFirstRow,columns:t.orderedColumns,isRowIncluded:a};if(s===`selection`){let e=t.uiState.selection;if(!e)return null;if(e.type===`cell`){let r=i.normalizeCellRange(e.range);return{getRow:n,startRow:r.start.row,endRow:r.end.row+1,columns:t.orderedColumns.slice(r.start.col,r.end.col+1),isRowIncluded:a}}if(e.type===`row`){let r=i.normalizeRowRange(e.startRow,e.endRow);return{getRow:n,startRow:r.startRow,endRow:r.endRow+1,columns:t.orderedColumns,isRowIncluded:a}}let r=i.normalizeColumnRange(e.startCol,e.endCol);return{getRow:n,startRow:0,endRow:t.viewRowCount,columns:t.orderedColumns.slice(r.startCol,r.endCol+1),isRowIncluded:a}}return{getRow:n,startRow:0,endRow:t.viewRowCount,columns:t.orderedColumns,isRowIncluded:a}},b=e=>e.filter(e=>!t.isSyntheticColumnKey(e.key)),x=e=>{let t=y(e?.scope??`view`);return t?u.serializeRowsToCsv({getRow:t.getRow,startRow:t.startRow,endRow:t.endRow,columns:b(t.columns),delimiter:e?.delimiter,includeHeaders:e?.includeHeaders,bom:e?.bom,isRowIncluded:t.isRowIncluded}):e?.bom?``:``},S=e=>{let t=y(e?.scope??`view`);return t?d.buildGridExportData({getRow:t.getRow,startRow:t.startRow,endRow:t.endRow,columns:b(t.columns),isRowIncluded:t.isRowIncluded}):{columns:[],rows:[]}};return{update:e=>{p=e},handle:{scrollToRow:(e,t)=>h(g(e,t?.align??`auto`),null),scrollToCell:(e,t,n)=>v(e,t,n?.align??`auto`),scrollToTop:()=>{let e=p?.scrollContainerRef.current??null;e&&m(e,{top:0,left:e.scrollLeft})},scrollToBottom:()=>{let e=p?.scrollContainerRef.current??null,t=p;!e||!t||m(e,{top:Math.max(t.headerHeight+t.physicalBodyHeight-e.clientHeight,0),left:e.scrollLeft})},getScrollPosition:()=>{let e=p?.scrollContainerRef.current??null;return e?{top:e.scrollTop,left:e.scrollLeft}:null},setScrollPosition:(e,t)=>{let n=p?.scrollContainerRef.current??null;n&&m(n,{top:e.top??n.scrollTop,left:e.left??n.scrollLeft},t?.behavior??`auto`)},getVisibleRowRange:()=>{let e=p;return!e||e.windowLastRow<e.windowFirstRow?null:{startIndex:e.windowFirstRow,endIndex:e.windowLastRow+1}},getActiveCell:()=>{let e=p?.uiState.activeCell;return e?{row:e.row,col:e.col}:null},setActiveCell:(e,t)=>{let r=p;r&&(r.dispatch(n.gridActions.activateCell(e)),e&&t?.scrollIntoView&&v(e.row,e.col,`auto`))},getSelection:()=>p?.uiState.selection??null,selectCell:(e,t,r)=>{let i=p;if(!i)return;let a={row:e,col:t};i.dispatch(n.gridActions.startSelection(a)),i.dispatch(n.gridActions.endSelection()),r?.scrollIntoView&&v(e,t,`auto`)},selectRange:(e,t)=>{let r=p;r&&(r.dispatch(n.gridActions.startSelection(e.start)),r.dispatch(n.gridActions.updateSelection(e.end)),r.dispatch(n.gridActions.endSelection()),t?.scrollIntoView&&v(e.end.row,e.end.col,`auto`))},clearSelection:()=>{p?.dispatch(n.gridActions.clearSelection())},getSelectedRows:()=>{let e=p;if(!e)return[];let t=e.uiState.selection;if(!t)return[];let n=[],r=t=>{let r=e.rowModel.getRow(t);r&&n.push(r)};if(t.type===`cell`){let e=i.normalizeCellRange(t.range);for(let t=e.start.row;t<=e.end.row;t+=1)r(t)}else if(t.type===`row`){let e=i.normalizeRowRange(t.startRow,t.endRow);for(let t=e.startRow;t<=e.endRow;t+=1)r(t)}else for(let t=0;t<e.viewRowCount;t+=1)r(t);return n},exportCsv:e=>x(e),downloadCsv:(e,t)=>{if(typeof document>`u`)return;let n=x({...t,bom:t?.bom??!0}),r=new Blob([n],{type:`text/csv;charset=utf-8;`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e??`export.csv`,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)},getExportData:e=>S(e),getState:()=>{let e=p;return e?c.buildGridState(e.uiState.columnWidths,e.uiState.filters,e.uiState.sort,c.extractColumnState(e.columns)):c.buildGridState({},{globalText:``,columnFilters:{}},[],[])},applyState:e=>{let t=p;if(!t)return;let r=c.migrateGridState(e);t.onColumnsChange&&r.columns&&t.onColumnsChange(c.applyColumnState(t.columns,r.columns,r.columnWidths)),t.dispatch(n.gridActions.resetColumnWidths(r.columnWidths)),t.dispatch(n.gridActions.setAllFilters(r.filters)),t.dispatch(n.gridActions.setSort(r.sort))},getRowSelection:()=>{let e=p;return e?s.rowSelectionToModel(e.uiState.rowSelection):{type:`include`,rowKeys:[]}},setRowSelection:e=>{p?.commitRowSelection(s.rowSelectionFromModel(e))},getSelectedRowKeys:()=>{let e=p;if(!e)return[];let t=e.uiState.rowSelection;if(t.mode===`include`)return Array.from(t.keys);let n=[],r=e.rowModel.getRowCount();for(let i=0;i<r;i+=1){if(!e.rowModel.getRow(i))continue;let r=e.rowModel.getRowKey(i)??i;t.keys.has(r)||n.push(r)}return n},getSelectedRowData:()=>{let e=p;if(!e)return[];let t=e.uiState.rowSelection,n=[],r=e.rowModel.getRowCount();for(let i=0;i<r;i+=1){let r=e.rowModel.getRow(i);r&&s.resolveIsRowSelected(t,e.rowModel.getRowKey(i)??i)&&n.push(r)}return n},getSelectedRowCount:()=>{let e=p;return e?s.countSelectedRows(e.uiState.rowSelection,e.leafRowCount):0},isRowSelected:e=>{let t=p;return t?s.resolveIsRowSelected(t.uiState.rowSelection,e):!1},selectAllRows:()=>{p?.commitRowSelection(s.selectAllRows())},clearRowSelection:()=>{p?.commitRowSelection(s.clearRowSelection())},undo:()=>{p?.undoRows()},redo:()=>{p?.redoRows()},canUndo:()=>p?.canUndoRows()??!1,canRedo:()=>p?.canRedoRows()??!1,clearUndoHistory:()=>{p?.clearUndoHistory()},setGroupCollapsed:(e,t)=>{p?.dispatch(n.gridActions.setGroupCollapsed(e,t))},expandAllGroups:()=>{p?.dispatch(n.gridActions.setCollapsedGroupKeys(new Set))},collapseAllGroups:()=>{let t=p;!t||!t.groupTree||t.dispatch(n.gridActions.setCollapsedGroupKeys(new Set(e.collectAllGroupKeys(t.groupTree))))},getGroupRows:()=>{let t=p;return t?.groupTree?e.collectAllGroupRows(t.groupTree):[]},setDetailRowExpanded:(e,r)=>{let i=p;if(!(!i||!i.detailRowEnabled)){if(r&&i.detailIsExpandable){let n=t.findDetailRowIndex(i.rowModel,e,i.detailIndexCacheRef.current,!i.isServerSide);if(n>=0){let t=i.rowModel.getRow(n);if(t!=null&&!i.detailIsExpandable(t,{rowKey:e,sourceRowIndex:i.rowModel.getSourceIndex(n)}))return}}i.dispatch(n.gridActions.setDetailRowExpanded(e,r))}},getExpandedDetailRowKeys:()=>{let e=p;return e&&e.detailRowEnabled?Array.from(e.uiState.expandedDetailRowKeys):[]},collapseAllDetailRows:()=>{let e=p;!e||!e.detailRowEnabled||e.dispatch(n.gridActions.setExpandedDetailRowKeys(new Set))},moveRow:(e,t)=>{p?.moveRowByKey(e,t)},getInvalidCells:()=>{let e=p;return e?e.isServerSide?(console.warn(`[SpreadsheetGrid] getInvalidCells は serverSide モードでは利用できません(空配列を返します)。`),[]):a.scanInvalidCells(e.rows,e.columns,e.resolvedRowKeyGetter):[]},refreshServerSide:()=>{let e=p;if(e){if(!e.isServerSide){console.warn(`[SpreadsheetGrid] refreshServerSide は clientSide(rows)モードでは何もしません(dataSource 指定時のみ有効です)。`);return}e.serverSideRefresh()}},openFilterManager:()=>{p?.openToolPanel(`filter`)},closeFilterManager:()=>{let e=p;e&&e.activeToolPanelTab===`filter`&&e.closeToolPanel()}},applyScroll:h,verticalTargetFor:g,horizontalTargetFor:_,scrollToCellInternal:v}};exports.createGridApi=p;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/grouping.cjs"),t=require("../logic/detailRow.cjs"),n=require("../model/gridActions.cjs"),r=require("../logic/geometry.cjs"),i=require("../model/gridSelectors.cjs"),a=require("../logic/validation.cjs"),o=require("../logic/verticalGeometry.cjs"),s=require("../logic/rowSelection.cjs"),c=require("../logic/gridState.cjs"),l=require("../logic/scrollTargets.cjs"),u=require("../logic/exportCsv.cjs"),d=require("../logic/exportData.cjs"),f=require("../logic/exportScope.cjs");var p=()=>{let p=null,m=(e,t,n=`auto`)=>{let r=Math.max(e.scrollHeight-e.clientHeight,0),i=Math.max(e.scrollWidth-e.clientWidth,0),a=Math.min(Math.max(t.top,0),r),o=Math.min(Math.max(t.left,0),i);(Math.round(a)!==Math.round(e.scrollTop)||Math.round(o)!==Math.round(e.scrollLeft))&&p?.markApiScroll(),e.scrollTo({top:a,left:o,behavior:n})},h=(e,t)=>{let n=p?.scrollContainerRef.current??null,r=p;!n||!r||m(n,{top:e===null?n.scrollTop:o.logicalToPhysicalScrollTop(e,r.verticalScaleFactor),left:t===null?n.scrollLeft:t})},g=(e,t)=>{let n=p?.scrollContainerRef.current??null,r=p;if(!n||!r||r.viewRowCount===0)return null;let i=Math.min(Math.max(e,0),r.viewRowCount-1);return l.computeVerticalScrollTarget({rowTop:r.rowMetrics.rowTop(i),rowHeight:r.rowMetrics.cellHeight(i),headerHeight:r.headerHeight,viewportHeight:n.clientHeight,currentScrollTop:o.physicalToLogicalScrollTop(n.scrollTop,r.verticalScaleFactor),align:t})},_=(e,t)=>{let n=p?.scrollContainerRef.current??null,i=p;if(!n||!i)return null;let a=r.computeSinglePaneColumnExtent(i.paneLayout,e);return!a||a.pane!==`center`?null:l.computeHorizontalScrollTarget({cellLeft:i.leftPaneTotalWidth+i.centerLeadingWidth+a.extent.start,cellWidth:a.extent.width,leftPaneWidth:i.leftPaneTotalWidth,rightPaneWidth:i.rightPaneTotalWidth,viewportWidth:n.clientWidth,currentScrollLeft:n.scrollLeft,align:t})},v=(e,t,n)=>{h(g(e,n),_(t,n))},y=(e,t=!1)=>{let n=p;if(!n)return null;let r=e=>n.rowModel.getRow(e),a=n.labelRowExport,o=e=>{if(!a)return[];let t=a.exportText?a.exportText(e):a.getLabel(e);return typeof t==`string`?[t]:t},s=t&&a&&n.rowModel.getLabelRow?e=>{let t=n.rowModel.getLabelRow?.(e);return t?o(t.row):void 0}:void 0,c=n.isRowExportable,l=c?(e,t)=>c(e,{viewRowIndex:t,rowKey:n.rowModel.getRowKey(t)??t}):void 0,u=c?(e,t)=>c(e,{viewRowIndex:t,rowKey:n.resolvedRowKeyGetter(e,t)}):void 0,d=f.normalizeExportScope(e);if(d===`raw`){if(n.isServerSide)return console.warn(`SpreadsheetGrid: scope 'raw' は serverSide では未ロード行を取得できないため、'view'(ロード済みビュー行)として扱います。全件エクスポートはサーバ側での実施を推奨します。`),{getRow:r,startRow:0,endRow:n.viewRowCount,columns:n.orderedColumns,isRowIncluded:l};let e=e=>a!==void 0&&n.rows[e]!==void 0&&a.isLabelRow(n.rows[e],e);return{getRow:t=>e(t)?void 0:n.rows[t],startRow:0,endRow:n.rows.length,columns:n.orderedColumns,isRowIncluded:u,getLabelLine:t&&a?t=>e(t)?o(n.rows[t]):void 0:void 0}}if(d===`rendered`)return{getRow:r,startRow:n.windowFirstRow,endRow:n.windowLastRow>=n.windowFirstRow?n.windowLastRow+1:n.windowFirstRow,columns:n.orderedColumns,isRowIncluded:l,getLabelLine:s};if(d===`selection`){let e=n.uiState.selection;if(!e)return null;if(e.type===`cell`){let t=i.normalizeCellRange(e.range);return{getRow:r,startRow:t.start.row,endRow:t.end.row+1,columns:n.orderedColumns.slice(t.start.col,t.end.col+1),isRowIncluded:l,getLabelLine:s}}if(e.type===`row`){let t=i.normalizeRowRange(e.startRow,e.endRow);return{getRow:r,startRow:t.startRow,endRow:t.endRow+1,columns:n.orderedColumns,isRowIncluded:l,getLabelLine:s}}let t=i.normalizeColumnRange(e.startCol,e.endCol);return{getRow:r,startRow:0,endRow:n.viewRowCount,columns:n.orderedColumns.slice(t.startCol,t.endCol+1),isRowIncluded:l,getLabelLine:s}}return{getRow:r,startRow:0,endRow:n.viewRowCount,columns:n.orderedColumns,isRowIncluded:l,getLabelLine:s}},b=e=>e.filter(e=>!t.isSyntheticColumnKey(e.key)),x=e=>{let t=y(e?.scope??`view`,e?.includeLabelRows===!0);return t?u.serializeRowsToCsv({getRow:t.getRow,startRow:t.startRow,endRow:t.endRow,columns:b(t.columns),delimiter:e?.delimiter,includeHeaders:e?.includeHeaders,bom:e?.bom,isRowIncluded:t.isRowIncluded,getLabelLine:t.getLabelLine}):e?.bom?``:``},S=e=>{let t=y(e?.scope??`view`,e?.includeLabelRows===!0);return t?d.buildGridExportData({getRow:t.getRow,startRow:t.startRow,endRow:t.endRow,columns:b(t.columns),isRowIncluded:t.isRowIncluded,getLabelLine:t.getLabelLine}):{columns:[],rows:[]}};return{update:e=>{p=e},handle:{scrollToRow:(e,t)=>h(g(e,t?.align??`auto`),null),scrollToCell:(e,t,n)=>v(e,t,n?.align??`auto`),scrollToTop:()=>{let e=p?.scrollContainerRef.current??null;e&&m(e,{top:0,left:e.scrollLeft})},scrollToBottom:()=>{let e=p?.scrollContainerRef.current??null,t=p;!e||!t||m(e,{top:Math.max(t.headerHeight+t.physicalBodyHeight-e.clientHeight,0),left:e.scrollLeft})},getScrollPosition:()=>{let e=p?.scrollContainerRef.current??null;return e?{top:e.scrollTop,left:e.scrollLeft}:null},setScrollPosition:(e,t)=>{let n=p?.scrollContainerRef.current??null;n&&m(n,{top:e.top??n.scrollTop,left:e.left??n.scrollLeft},t?.behavior??`auto`)},getVisibleRowRange:()=>{let e=p;return!e||e.windowLastRow<e.windowFirstRow?null:{startIndex:e.windowFirstRow,endIndex:e.windowLastRow+1}},getActiveCell:()=>{let e=p?.uiState.activeCell;return e?{row:e.row,col:e.col}:null},setActiveCell:(e,t)=>{let r=p;r&&(r.dispatch(n.gridActions.activateCell(e)),e&&t?.scrollIntoView&&v(e.row,e.col,`auto`))},getSelection:()=>p?.uiState.selection??null,selectCell:(e,t,r)=>{let i=p;if(!i)return;let a={row:e,col:t};i.dispatch(n.gridActions.startSelection(a)),i.dispatch(n.gridActions.endSelection()),r?.scrollIntoView&&v(e,t,`auto`)},selectRange:(e,t)=>{let r=p;r&&(r.dispatch(n.gridActions.startSelection(e.start)),r.dispatch(n.gridActions.updateSelection(e.end)),r.dispatch(n.gridActions.endSelection()),t?.scrollIntoView&&v(e.end.row,e.end.col,`auto`))},clearSelection:()=>{p?.dispatch(n.gridActions.clearSelection())},getSelectedRows:()=>{let e=p;if(!e)return[];let t=e.uiState.selection;if(!t)return[];let n=[],r=t=>{let r=e.rowModel.getRow(t);r&&n.push(r)};if(t.type===`cell`){let e=i.normalizeCellRange(t.range);for(let t=e.start.row;t<=e.end.row;t+=1)r(t)}else if(t.type===`row`){let e=i.normalizeRowRange(t.startRow,t.endRow);for(let t=e.startRow;t<=e.endRow;t+=1)r(t)}else for(let t=0;t<e.viewRowCount;t+=1)r(t);return n},exportCsv:e=>x(e),downloadCsv:(e,t)=>{if(typeof document>`u`)return;let n=x({...t,bom:t?.bom??!0}),r=new Blob([n],{type:`text/csv;charset=utf-8;`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e??`export.csv`,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)},getExportData:e=>S(e),getState:()=>{let e=p;return e?c.buildGridState(e.uiState.columnWidths,e.uiState.filters,e.uiState.sort,c.extractColumnState(e.columns)):c.buildGridState({},{globalText:``,columnFilters:{}},[],[])},applyState:e=>{let t=p;if(!t)return;let r=c.migrateGridState(e);t.onColumnsChange&&r.columns&&t.onColumnsChange(c.applyColumnState(t.columns,r.columns,r.columnWidths)),t.dispatch(n.gridActions.resetColumnWidths(r.columnWidths)),t.dispatch(n.gridActions.setAllFilters(r.filters)),t.dispatch(n.gridActions.setSort(r.sort))},getRowSelection:()=>{let e=p;return e?s.rowSelectionToModel(e.uiState.rowSelection):{type:`include`,rowKeys:[]}},setRowSelection:e=>{p?.commitRowSelection(s.rowSelectionFromModel(e))},getSelectedRowKeys:()=>{let e=p;if(!e)return[];let t=e.uiState.rowSelection;if(t.mode===`include`)return Array.from(t.keys);let n=[],r=e.rowModel.getRowCount();for(let i=0;i<r;i+=1){if(!e.rowModel.getRow(i))continue;let r=e.rowModel.getRowKey(i)??i;t.keys.has(r)||n.push(r)}return n},getSelectedRowData:()=>{let e=p;if(!e)return[];let t=e.uiState.rowSelection,n=[],r=e.rowModel.getRowCount();for(let i=0;i<r;i+=1){let r=e.rowModel.getRow(i);r&&s.resolveIsRowSelected(t,e.rowModel.getRowKey(i)??i)&&n.push(r)}return n},getSelectedRowCount:()=>{let e=p;return e?s.countSelectedRows(e.uiState.rowSelection,e.leafRowCount):0},isRowSelected:e=>{let t=p;return t?s.resolveIsRowSelected(t.uiState.rowSelection,e):!1},selectAllRows:()=>{p?.commitRowSelection(s.selectAllRows())},clearRowSelection:()=>{p?.commitRowSelection(s.clearRowSelection())},undo:()=>{p?.undoRows()},redo:()=>{p?.redoRows()},canUndo:()=>p?.canUndoRows()??!1,canRedo:()=>p?.canRedoRows()??!1,clearUndoHistory:()=>{p?.clearUndoHistory()},setGroupCollapsed:(e,t)=>{p?.dispatch(n.gridActions.setGroupCollapsed(e,t))},expandAllGroups:()=>{p?.dispatch(n.gridActions.setCollapsedGroupKeys(new Set))},collapseAllGroups:()=>{let t=p;!t||!t.groupTree||t.dispatch(n.gridActions.setCollapsedGroupKeys(new Set(e.collectAllGroupKeys(t.groupTree))))},getGroupRows:()=>{let t=p;return t?.groupTree?e.collectAllGroupRows(t.groupTree):[]},setDetailRowExpanded:(e,r)=>{let i=p;if(!(!i||!i.detailRowEnabled)){if(r&&i.detailIsExpandable){let n=t.findDetailRowIndex(i.rowModel,e,i.detailIndexCacheRef.current,!i.isServerSide);if(n>=0){let t=i.rowModel.getRow(n);if(t!=null&&!i.detailIsExpandable(t,{rowKey:e,sourceRowIndex:i.rowModel.getSourceIndex(n)}))return}}i.dispatch(n.gridActions.setDetailRowExpanded(e,r))}},getExpandedDetailRowKeys:()=>{let e=p;return e&&e.detailRowEnabled?Array.from(e.uiState.expandedDetailRowKeys):[]},collapseAllDetailRows:()=>{let e=p;!e||!e.detailRowEnabled||e.dispatch(n.gridActions.setExpandedDetailRowKeys(new Set))},moveRow:(e,t)=>{p?.moveRowByKey(e,t)},getInvalidCells:()=>{let e=p;return e?e.isServerSide?(console.warn(`[SpreadsheetGrid] getInvalidCells は serverSide モードでは利用できません(空配列を返します)。`),[]):a.scanInvalidCells(e.rows,e.columns,e.resolvedRowKeyGetter):[]},refreshServerSide:()=>{let e=p;if(e){if(!e.isServerSide){console.warn(`[SpreadsheetGrid] refreshServerSide は clientSide(rows)モードでは何もしません(dataSource 指定時のみ有効です)。`);return}e.serverSideRefresh()}},openFilterManager:()=>{p?.openToolPanel(`filter`)},closeFilterManager:()=>{let e=p;e&&e.activeToolPanelTab===`filter`&&e.closeToolPanel()}},applyScroll:h,verticalTargetFor:g,horizontalTargetFor:_,scrollToCellInternal:v}};exports.createGridApi=p;
|
package/dist/engine/gridApi.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { type GridPaneLayout } from '../logic/geometry';
|
|
|
4
4
|
import { type RowMetrics } from '../logic/verticalGeometry';
|
|
5
5
|
import { type DetailIndexCache } from '../logic/detailRow';
|
|
6
6
|
import { type GroupTree } from '../logic/grouping';
|
|
7
|
+
import { type LabelExportLine } from '../logic/exportCsv';
|
|
7
8
|
import type { ToolPanelTab } from '../controllers/toolPanelController';
|
|
8
9
|
type ReadonlyRef<V> = {
|
|
9
10
|
readonly current: V;
|
|
@@ -34,6 +35,11 @@ export type GridApiArgs<T> = {
|
|
|
34
35
|
serverSideRefresh: () => void;
|
|
35
36
|
resolvedRowKeyGetter: (row: T, sourceRowIndex: number) => GridRowKey;
|
|
36
37
|
isRowExportable: SpreadsheetGridProps<T>['isRowExportable'];
|
|
38
|
+
labelRowExport?: {
|
|
39
|
+
isLabelRow: (row: T, sourceIndex: number) => boolean;
|
|
40
|
+
getLabel: (row: T) => string;
|
|
41
|
+
exportText: ((row: T) => string | LabelExportLine) | undefined;
|
|
42
|
+
} | undefined;
|
|
37
43
|
activeToolPanelTab: ToolPanelTab | null;
|
|
38
44
|
openToolPanel: (tab: ToolPanelTab) => void;
|
|
39
45
|
closeToolPanel: () => void;
|
package/dist/engine/gridApi.js
CHANGED
|
@@ -53,77 +53,94 @@ var D = () => {
|
|
|
53
53
|
});
|
|
54
54
|
}, M = (e, t, n) => {
|
|
55
55
|
k(A(e, n), j(t, n));
|
|
56
|
-
}, N = (e) => {
|
|
57
|
-
let
|
|
58
|
-
if (!
|
|
59
|
-
let
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}) :
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
56
|
+
}, N = (e, t = !1) => {
|
|
57
|
+
let n = D;
|
|
58
|
+
if (!n) return null;
|
|
59
|
+
let r = (e) => n.rowModel.getRow(e), i = n.labelRowExport, a = (e) => {
|
|
60
|
+
if (!i) return [];
|
|
61
|
+
let t = i.exportText ? i.exportText(e) : i.getLabel(e);
|
|
62
|
+
return typeof t == "string" ? [t] : t;
|
|
63
|
+
}, l = t && i && n.rowModel.getLabelRow ? (e) => {
|
|
64
|
+
let t = n.rowModel.getLabelRow?.(e);
|
|
65
|
+
return t ? a(t.row) : void 0;
|
|
66
|
+
} : void 0, u = n.isRowExportable, d = u ? (e, t) => u(e, {
|
|
67
|
+
viewRowIndex: t,
|
|
68
|
+
rowKey: n.rowModel.getRowKey(t) ?? t
|
|
69
|
+
}) : void 0, f = u ? (e, t) => u(e, {
|
|
70
|
+
viewRowIndex: t,
|
|
71
|
+
rowKey: n.resolvedRowKeyGetter(e, t)
|
|
72
|
+
}) : void 0, p = E(e);
|
|
73
|
+
if (p === "raw") {
|
|
74
|
+
if (n.isServerSide) return console.warn("SpreadsheetGrid: scope 'raw' は serverSide では未ロード行を取得できないため、'view'(ロード済みビュー行)として扱います。全件エクスポートはサーバ側での実施を推奨します。"), {
|
|
75
|
+
getRow: r,
|
|
76
|
+
startRow: 0,
|
|
77
|
+
endRow: n.viewRowCount,
|
|
78
|
+
columns: n.orderedColumns,
|
|
79
|
+
isRowIncluded: d
|
|
80
|
+
};
|
|
81
|
+
let e = (e) => i !== void 0 && n.rows[e] !== void 0 && i.isLabelRow(n.rows[e], e);
|
|
82
|
+
return {
|
|
83
|
+
getRow: (t) => e(t) ? void 0 : n.rows[t],
|
|
84
|
+
startRow: 0,
|
|
85
|
+
endRow: n.rows.length,
|
|
86
|
+
columns: n.orderedColumns,
|
|
87
|
+
isRowIncluded: f,
|
|
88
|
+
getLabelLine: t && i ? (t) => e(t) ? a(n.rows[t]) : void 0 : void 0
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
if (p === "rendered") return {
|
|
92
|
+
getRow: r,
|
|
93
|
+
startRow: n.windowFirstRow,
|
|
94
|
+
endRow: n.windowLastRow >= n.windowFirstRow ? n.windowLastRow + 1 : n.windowFirstRow,
|
|
95
|
+
columns: n.orderedColumns,
|
|
96
|
+
isRowIncluded: d,
|
|
97
|
+
getLabelLine: l
|
|
85
98
|
};
|
|
86
|
-
if (
|
|
87
|
-
let e =
|
|
99
|
+
if (p === "selection") {
|
|
100
|
+
let e = n.uiState.selection;
|
|
88
101
|
if (!e) return null;
|
|
89
102
|
if (e.type === "cell") {
|
|
90
|
-
let
|
|
103
|
+
let t = o(e.range);
|
|
91
104
|
return {
|
|
92
|
-
getRow:
|
|
93
|
-
startRow:
|
|
94
|
-
endRow:
|
|
95
|
-
columns:
|
|
96
|
-
isRowIncluded:
|
|
105
|
+
getRow: r,
|
|
106
|
+
startRow: t.start.row,
|
|
107
|
+
endRow: t.end.row + 1,
|
|
108
|
+
columns: n.orderedColumns.slice(t.start.col, t.end.col + 1),
|
|
109
|
+
isRowIncluded: d,
|
|
110
|
+
getLabelLine: l
|
|
97
111
|
};
|
|
98
112
|
}
|
|
99
113
|
if (e.type === "row") {
|
|
100
|
-
let
|
|
114
|
+
let t = c(e.startRow, e.endRow);
|
|
101
115
|
return {
|
|
102
|
-
getRow:
|
|
103
|
-
startRow:
|
|
104
|
-
endRow:
|
|
105
|
-
columns:
|
|
106
|
-
isRowIncluded:
|
|
116
|
+
getRow: r,
|
|
117
|
+
startRow: t.startRow,
|
|
118
|
+
endRow: t.endRow + 1,
|
|
119
|
+
columns: n.orderedColumns,
|
|
120
|
+
isRowIncluded: d,
|
|
121
|
+
getLabelLine: l
|
|
107
122
|
};
|
|
108
123
|
}
|
|
109
|
-
let
|
|
124
|
+
let t = s(e.startCol, e.endCol);
|
|
110
125
|
return {
|
|
111
|
-
getRow:
|
|
126
|
+
getRow: r,
|
|
112
127
|
startRow: 0,
|
|
113
|
-
endRow:
|
|
114
|
-
columns:
|
|
115
|
-
isRowIncluded:
|
|
128
|
+
endRow: n.viewRowCount,
|
|
129
|
+
columns: n.orderedColumns.slice(t.startCol, t.endCol + 1),
|
|
130
|
+
isRowIncluded: d,
|
|
131
|
+
getLabelLine: l
|
|
116
132
|
};
|
|
117
133
|
}
|
|
118
134
|
return {
|
|
119
|
-
getRow:
|
|
135
|
+
getRow: r,
|
|
120
136
|
startRow: 0,
|
|
121
|
-
endRow:
|
|
122
|
-
columns:
|
|
123
|
-
isRowIncluded:
|
|
137
|
+
endRow: n.viewRowCount,
|
|
138
|
+
columns: n.orderedColumns,
|
|
139
|
+
isRowIncluded: d,
|
|
140
|
+
getLabelLine: l
|
|
124
141
|
};
|
|
125
142
|
}, P = (e) => e.filter((e) => !r(e.key)), F = (e) => {
|
|
126
|
-
let t = N(e?.scope ?? "view");
|
|
143
|
+
let t = N(e?.scope ?? "view", e?.includeLabelRows === !0);
|
|
127
144
|
return t ? w({
|
|
128
145
|
getRow: t.getRow,
|
|
129
146
|
startRow: t.startRow,
|
|
@@ -132,16 +149,18 @@ var D = () => {
|
|
|
132
149
|
delimiter: e?.delimiter,
|
|
133
150
|
includeHeaders: e?.includeHeaders,
|
|
134
151
|
bom: e?.bom,
|
|
135
|
-
isRowIncluded: t.isRowIncluded
|
|
152
|
+
isRowIncluded: t.isRowIncluded,
|
|
153
|
+
getLabelLine: t.getLabelLine
|
|
136
154
|
}) : e?.bom ? "" : "";
|
|
137
155
|
}, I = (e) => {
|
|
138
|
-
let t = N(e?.scope ?? "view");
|
|
156
|
+
let t = N(e?.scope ?? "view", e?.includeLabelRows === !0);
|
|
139
157
|
return t ? T({
|
|
140
158
|
getRow: t.getRow,
|
|
141
159
|
startRow: t.startRow,
|
|
142
160
|
endRow: t.endRow,
|
|
143
161
|
columns: P(t.columns),
|
|
144
|
-
isRowIncluded: t.isRowIncluded
|
|
162
|
+
isRowIncluded: t.isRowIncluded,
|
|
163
|
+
getLabelLine: t.getLabelLine
|
|
145
164
|
}) : {
|
|
146
165
|
columns: [],
|
|
147
166
|
rows: []
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/gridState.cjs");var t=()=>{let e=null,t=null;return{update:t=>{e=t},applyHoveredRowChange:n=>{if(e===null||!e.enableRowHover)return;let r=t,i=typeof n==`function`?n(r):n;i!==r&&(t=i,e.isHoverControlled||e.setHoveredRowIndex(i),e.onHoveredRowChange?.(i,{source:`pointer`}))}}},n=()=>{let e=null;return{update:({expandedKeys:t,onChange:n})=>{if(e===null){e=t;return}Object.is(e,t)||(e=t,n?.(Array.from(t)))}}},r=()=>{let t=null,n=null,r=(e,t)=>Object.is(e.columnWidths,t.columnWidths)&&Object.is(e.filters,t.filters)&&Object.is(e.sort,t.sort)&&Object.is(e.dragState,t.dragState)&&Object.is(e.columns,t.columns);return{update:i=>{let a=t===null||!r(
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/gridState.cjs");var t=()=>{let e=null,t=null;return{update:t=>{e=t},applyHoveredRowChange:n=>{if(e===null||!e.enableRowHover)return;let r=t,i=typeof n==`function`?n(r):n;i!==r&&(t=i,e.isHoverControlled||e.setHoveredRowIndex(i),e.onHoveredRowChange?.(i,{source:`pointer`}))}}},n=()=>{let e=null;return{update:({expandedKeys:t,onChange:n})=>{if(e===null){e=t;return}Object.is(e,t)||(e=t,n?.(Array.from(t)))}}},r=()=>{let t=null,n=null,r=(e,t)=>Object.is(e.columnWidths,t.columnWidths)&&Object.is(e.filters,t.filters)&&Object.is(e.sort,t.sort)&&Object.is(e.dragState,t.dragState)&&Object.is(e.columns,t.columns);return{update:i=>{let a=t,o=a===null||!r(a,i);if(t=i,!o||(a!==null&&(i.onFiltersChange&&!Object.is(a.filters,i.filters)&&!e.isSameFilterState(a.filters,i.filters)&&i.onFiltersChange(e.cloneFilterState(i.filters)),i.onSortChange&&!Object.is(a.sort,i.sort)&&!e.isSameSortState(a.sort,i.sort)&&i.onSortChange(e.cloneSortState(i.sort))),!i.onStateChange))return;let s=e.buildGridState(i.columnWidths,i.filters,i.sort,e.extractColumnState(i.columns)),c=e.decideStateChangeEmit(n,s,i.dragState!==null);n=c.nextLast,c.emit&&i.onStateChange(s)}}};exports.createDetailKeysNotifier=n,exports.createHoverRowNotifier=t,exports.createStateChangeNotifier=r;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { GridColumn, GridRowKey, GridSortState, GridState, GridUiState } from '../model/gridTypes.unbound';
|
|
1
|
+
import type { GridColumn, GridFilterState, GridRowKey, GridSortState, GridState, GridUiState } from '../model/gridTypes.unbound';
|
|
2
2
|
export type HoverRowNotifierArgs = {
|
|
3
3
|
enableRowHover: boolean;
|
|
4
4
|
isHoverControlled: boolean;
|
|
@@ -28,6 +28,8 @@ export type StateChangeNotifierArgs<T> = {
|
|
|
28
28
|
dragState: GridUiState['dragState'];
|
|
29
29
|
columns: GridColumn<T>[];
|
|
30
30
|
onStateChange: ((state: GridState) => void) | undefined;
|
|
31
|
+
onFiltersChange?: ((filters: GridFilterState) => void) | undefined;
|
|
32
|
+
onSortChange?: ((sort: GridSortState) => void) | undefined;
|
|
31
33
|
};
|
|
32
34
|
export type StateChangeNotifier<T> = {
|
|
33
35
|
update: (args: StateChangeNotifierArgs<T>) => void;
|
package/dist/engine/notifiers.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { buildGridState as e,
|
|
1
|
+
import { buildGridState as e, cloneFilterState as t, cloneSortState as n, decideStateChangeEmit as r, extractColumnState as i, isSameFilterState as a, isSameSortState as o } from "../logic/gridState.js";
|
|
2
2
|
//#region src/engine/notifiers.ts
|
|
3
|
-
var
|
|
3
|
+
var s = () => {
|
|
4
4
|
let e = null, t = null;
|
|
5
5
|
return {
|
|
6
6
|
update: (t) => {
|
|
@@ -12,7 +12,7 @@ var r = () => {
|
|
|
12
12
|
i !== r && (t = i, e.isHoverControlled || e.setHoveredRowIndex(i), e.onHoveredRowChange?.(i, { source: "pointer" }));
|
|
13
13
|
}
|
|
14
14
|
};
|
|
15
|
-
},
|
|
15
|
+
}, c = () => {
|
|
16
16
|
let e = null;
|
|
17
17
|
return { update: ({ expandedKeys: t, onChange: n }) => {
|
|
18
18
|
if (e === null) {
|
|
@@ -21,14 +21,14 @@ var r = () => {
|
|
|
21
21
|
}
|
|
22
22
|
Object.is(e, t) || (e = t, n?.(Array.from(t)));
|
|
23
23
|
} };
|
|
24
|
-
},
|
|
25
|
-
let
|
|
26
|
-
return { update: (
|
|
27
|
-
let s =
|
|
28
|
-
if (
|
|
29
|
-
let
|
|
30
|
-
|
|
24
|
+
}, l = () => {
|
|
25
|
+
let s = null, c = null, l = (e, t) => Object.is(e.columnWidths, t.columnWidths) && Object.is(e.filters, t.filters) && Object.is(e.sort, t.sort) && Object.is(e.dragState, t.dragState) && Object.is(e.columns, t.columns);
|
|
26
|
+
return { update: (u) => {
|
|
27
|
+
let d = s, f = d === null || !l(d, u);
|
|
28
|
+
if (s = u, !f || (d !== null && (u.onFiltersChange && !Object.is(d.filters, u.filters) && !a(d.filters, u.filters) && u.onFiltersChange(t(u.filters)), u.onSortChange && !Object.is(d.sort, u.sort) && !o(d.sort, u.sort) && u.onSortChange(n(u.sort))), !u.onStateChange)) return;
|
|
29
|
+
let p = e(u.columnWidths, u.filters, u.sort, i(u.columns)), m = r(c, p, u.dragState !== null);
|
|
30
|
+
c = m.nextLast, m.emit && u.onStateChange(p);
|
|
31
31
|
} };
|
|
32
32
|
};
|
|
33
33
|
//#endregion
|
|
34
|
-
export {
|
|
34
|
+
export { c as createDetailKeysNotifier, s as createHoverRowNotifier, l as createStateChangeNotifier };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils/permissions.cjs"),t=require("../logic/
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils/permissions.cjs"),t=require("../logic/sorting.cjs"),n=require("../logic/grouping.cjs"),r=require("../logic/rowReorder.cjs"),i=require("../logic/labelRows.cjs"),a=require("../logic/filtering.cjs"),o=require("./memo.cjs"),s=require("../logic/serverSideQuery.cjs");var c={},l={},u=[],d=`\0`,f=()=>{let f=o.createMemo(e=>a.createSourceOrder(e)),p=o.createMemo((e,t)=>t?i.resolveLabelRowLayout(e,t):null),m=o.createMemo((e,t)=>i.createLabelFreeOrder(e,t)),h=o.createMemo((e,t)=>{let n=[];for(let r of e)a.columnFilterUsesNumericKey(t[r.key])&&n.push(r.key);return n.join(d)}),g=o.createMemo((t,n,r)=>{let i=new Map;if(r.length===0)return i;let o=new Set(r.split(d)),s=t.length;for(let r of n){if(!o.has(r.key))continue;let n=new Float64Array(s);for(let i=0;i<s;i+=1)n[i]=a.coerceNumberFilterCellValue(e.getCellValue(t[i],r));i.set(r.key,n)}return i}),_=o.createMemo((e,t,n,r,i)=>a.filterOrderByColumns(e,t,n,r,i)),v=o.createMemo((e,n,r,i)=>t.sortOrder(e,n,r,i)),y=o.createMemo((e,t,n)=>e&&r.isIdentityOrder(t,n)),b=o.createMemo((e,t,n)=>e&&i.isSameOrder(t,n)),x=o.createMemo((e,t,r,i,a)=>e?n.buildGroupTree(t,r,i,a):null),S=o.createMemo((e,t)=>e?n.flattenGroupTree(e,t):null),C=o.createMemo((e,t,n,r,a,o,s)=>e&&s?i.buildLabelDisplay({rows:t,order:n,layout:e,sortMode:r,keepEmptySections:a,sortActive:o,getLabel:s}):null),w=o.createMemo((e,t,r,a,o)=>{if(t)return i.createLabelRowModel(t,a,o);if(e){let{displayOrder:t,groups:r}=e;return{getRowCount:()=>t.length,getRow:e=>a[t[e]],getSourceIndex:e=>{let n=t[e];return n>=0?n:void 0},getRowKey:e=>{let i=t[e];return n.isGroupOrderValue(i)?n.groupRowKey(r[n.groupIndexOfOrderValue(i)]):o(a[i],i)},getGroupRow:e=>{let i=t[e];return n.isGroupOrderValue(i)?r[n.groupIndexOfOrderValue(i)]:void 0}}}return{getRowCount:()=>r.length,getRow:e=>a[r[e]],getSourceIndex:e=>r[e],getRowKey:e=>o(a[r[e]],r[e])}}),T=o.createMemo((e,t,n,r,i,a,o)=>e?s.buildServerSideQuery({globalText:t?n:``,columnFilters:r?i:l,sort:a?o:u}):c),E=o.createMemo((e,t)=>e?s.serializeServerSideQuery(t):``),D=o.createMemo((e,t)=>({query:e,queryKey:t}));return{resolveLabelRowLayout:(e,t)=>p(e,t),resolveBaseOrder:(e,t)=>t?m(t,e):f(e),resolveOrder:e=>{let{rows:t,visibleColumns:n,globalFilteredOrder:i,rowDragAvailable:a,labelLayout:o}=e,s=e.manualFiltering?l:e.columnFilters,c=e.manualSorting?u:e.sort,d=h(n,s),f=g(t,n,d),p=_(t,i,n,s,f),x=v(t,p,n,c),S=o?b(a,x,m(o,t.length)):y(a,x,t.length);return{order:x,orderIsIdentity:S,rowDragOperable:r.isRowDragOperable(a,S)}},resolveClientSideRowModel:e=>{let{rows:t,order:n,rowGroupingActive:r,groupColumns:i,aggColumns:a,collapsedGroupKeys:o,rowKeyGetter:s,labelLayout:c,labelSortMode:l=`section`,keepEmptySections:u=!1,sortActive:d=!1,getLabel:f}=e,p=x(r,t,n,i,a),m=S(p,o),h=C(r?null:c??null,t,n,l,u,d,f);return{groupTree:p,groupedDisplay:m,labelDisplay:h,rowModel:w(m,h,n,t,s)}},resolveServerSideQuery:e=>{let{isServerSide:t,globalFilterEnabled:n,globalText:r,columnFilterEnabled:i,columnFilters:a,sortingEnabled:o,sort:s}=e,c=T(t,n,r,i,a,o,s);return D(c,E(t,c))}}};exports.createRowPipelineResolver=f;
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
import type { ColumnFilterValue, GridColumn, GridRowKey, GridSortState, RowModel, ServerSideQuery } from '../model/gridTypes.unbound';
|
|
1
|
+
import type { ColumnFilterValue, GridColumn, GridRowKey, GridSortState, LabelRowSortMode, RowModel, ServerSideQuery } from '../model/gridTypes.unbound';
|
|
2
2
|
import { type RowOrder } from '../logic/filtering';
|
|
3
3
|
import { type GroupTree, type GroupedDisplay } from '../logic/grouping';
|
|
4
|
+
import { type LabelDisplay, type LabelRowLayout } from '../logic/labelRows';
|
|
4
5
|
export type RowOrderInputs<T> = {
|
|
5
6
|
rows: T[];
|
|
7
|
+
labelLayout?: LabelRowLayout | null;
|
|
6
8
|
visibleColumns: GridColumn<T>[];
|
|
7
9
|
columnFilters: Record<string, ColumnFilterValue>;
|
|
8
10
|
globalFilteredOrder: RowOrder;
|
|
9
11
|
sort: GridSortState;
|
|
10
12
|
rowDragAvailable: boolean;
|
|
13
|
+
manualFiltering?: boolean;
|
|
14
|
+
manualSorting?: boolean;
|
|
11
15
|
};
|
|
12
16
|
export type RowOrderResolution = {
|
|
13
17
|
order: RowOrder;
|
|
@@ -18,6 +22,11 @@ export type ClientSideRowModelInputs<T> = {
|
|
|
18
22
|
rows: T[];
|
|
19
23
|
order: RowOrder;
|
|
20
24
|
rowGroupingActive: boolean;
|
|
25
|
+
labelLayout?: LabelRowLayout | null;
|
|
26
|
+
labelSortMode?: LabelRowSortMode;
|
|
27
|
+
keepEmptySections?: boolean;
|
|
28
|
+
sortActive?: boolean;
|
|
29
|
+
getLabel?: (row: T) => string;
|
|
21
30
|
groupColumns: GridColumn<T>[];
|
|
22
31
|
aggColumns: GridColumn<T>[];
|
|
23
32
|
collapsedGroupKeys: ReadonlySet<string>;
|
|
@@ -26,6 +35,7 @@ export type ClientSideRowModelInputs<T> = {
|
|
|
26
35
|
export type ClientSideRowModelResolution<T> = {
|
|
27
36
|
groupTree: GroupTree<T> | null;
|
|
28
37
|
groupedDisplay: GroupedDisplay | null;
|
|
38
|
+
labelDisplay: LabelDisplay<T> | null;
|
|
29
39
|
rowModel: RowModel<T>;
|
|
30
40
|
};
|
|
31
41
|
export type ServerSideQueryInputs = {
|
|
@@ -42,7 +52,8 @@ export type ServerSideQueryResolution = {
|
|
|
42
52
|
queryKey: string;
|
|
43
53
|
};
|
|
44
54
|
export declare const createRowPipelineResolver: <T>() => {
|
|
45
|
-
|
|
55
|
+
resolveLabelRowLayout: (rows: T[], isLabelRow: ((row: T, sourceIndex: number) => boolean) | undefined) => LabelRowLayout | null;
|
|
56
|
+
resolveBaseOrder: (rowCount: number, labelLayout?: LabelRowLayout | null) => RowOrder;
|
|
46
57
|
resolveOrder: (inputs: RowOrderInputs<T>) => RowOrderResolution;
|
|
47
58
|
resolveClientSideRowModel: (inputs: ClientSideRowModelInputs<T>) => ClientSideRowModelResolution<T>;
|
|
48
59
|
resolveServerSideQuery: (inputs: ServerSideQueryInputs) => ServerSideQueryResolution;
|
|
@@ -1,84 +1,96 @@
|
|
|
1
1
|
import { getCellValue as e } from "../utils/permissions.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
2
|
+
import { sortOrder as t } from "../logic/sorting.js";
|
|
3
|
+
import { buildGroupTree as n, flattenGroupTree as r, groupIndexOfOrderValue as i, groupRowKey as a, isGroupOrderValue as o } from "../logic/grouping.js";
|
|
4
|
+
import { isIdentityOrder as s, isRowDragOperable as c } from "../logic/rowReorder.js";
|
|
5
|
+
import { buildLabelDisplay as l, createLabelFreeOrder as u, createLabelRowModel as d, isSameOrder as f, resolveLabelRowLayout as p } from "../logic/labelRows.js";
|
|
6
|
+
import { coerceNumberFilterCellValue as m, columnFilterUsesNumericKey as h, createSourceOrder as g, filterOrderByColumns as _ } from "../logic/filtering.js";
|
|
7
|
+
import { createMemo as v } from "./memo.js";
|
|
8
|
+
import { buildServerSideQuery as y, serializeServerSideQuery as b } from "../logic/serverSideQuery.js";
|
|
8
9
|
//#region src/engine/rowPipeline.ts
|
|
9
|
-
var
|
|
10
|
-
let
|
|
10
|
+
var x = {}, S = {}, C = [], w = "\0", T = () => {
|
|
11
|
+
let T = v((e) => g(e)), E = v((e, t) => t ? p(e, t) : null), D = v((e, t) => u(e, t)), O = v((e, t) => {
|
|
11
12
|
let n = [];
|
|
12
|
-
for (let r of e)
|
|
13
|
-
return n.join(
|
|
14
|
-
}),
|
|
13
|
+
for (let r of e) h(t[r.key]) && n.push(r.key);
|
|
14
|
+
return n.join(w);
|
|
15
|
+
}), k = v((t, n, r) => {
|
|
15
16
|
let i = /* @__PURE__ */ new Map();
|
|
16
17
|
if (r.length === 0) return i;
|
|
17
|
-
let a = new Set(r.split(
|
|
18
|
+
let a = new Set(r.split(w)), o = t.length;
|
|
18
19
|
for (let r of n) {
|
|
19
20
|
if (!a.has(r.key)) continue;
|
|
20
21
|
let n = new Float64Array(o);
|
|
21
|
-
for (let i = 0; i < o; i += 1) n[i] =
|
|
22
|
+
for (let i = 0; i < o; i += 1) n[i] = m(e(t[i], r));
|
|
22
23
|
i.set(r.key, n);
|
|
23
24
|
}
|
|
24
25
|
return i;
|
|
25
|
-
}),
|
|
26
|
+
}), A = v((e, t, n, r, i) => _(e, t, n, r, i)), j = v((e, n, r, i) => t(e, n, r, i)), M = v((e, t, n) => e && s(t, n)), N = v((e, t, n) => e && f(t, n)), P = v((e, t, r, i, a) => e ? n(t, r, i, a) : null), F = v((e, t) => e ? r(e, t) : null), I = v((e, t, n, r, i, a, o) => e && o ? l({
|
|
27
|
+
rows: t,
|
|
28
|
+
order: n,
|
|
29
|
+
layout: e,
|
|
30
|
+
sortMode: r,
|
|
31
|
+
keepEmptySections: i,
|
|
32
|
+
sortActive: a,
|
|
33
|
+
getLabel: o
|
|
34
|
+
}) : null), L = v((e, t, n, r, s) => {
|
|
35
|
+
if (t) return d(t, r, s);
|
|
26
36
|
if (e) {
|
|
27
|
-
let { displayOrder: t, groups:
|
|
37
|
+
let { displayOrder: t, groups: n } = e;
|
|
28
38
|
return {
|
|
29
39
|
getRowCount: () => t.length,
|
|
30
|
-
getRow: (e) =>
|
|
40
|
+
getRow: (e) => r[t[e]],
|
|
31
41
|
getSourceIndex: (e) => {
|
|
32
42
|
let n = t[e];
|
|
33
43
|
return n >= 0 ? n : void 0;
|
|
34
44
|
},
|
|
35
45
|
getRowKey: (e) => {
|
|
36
46
|
let c = t[e];
|
|
37
|
-
return
|
|
47
|
+
return o(c) ? a(n[i(c)]) : s(r[c], c);
|
|
38
48
|
},
|
|
39
49
|
getGroupRow: (e) => {
|
|
40
|
-
let
|
|
41
|
-
return
|
|
50
|
+
let r = t[e];
|
|
51
|
+
return o(r) ? n[i(r)] : void 0;
|
|
42
52
|
}
|
|
43
53
|
};
|
|
44
54
|
}
|
|
45
55
|
return {
|
|
46
|
-
getRowCount: () =>
|
|
47
|
-
getRow: (e) => n[
|
|
48
|
-
getSourceIndex: (e) =>
|
|
49
|
-
getRowKey: (e) =>
|
|
56
|
+
getRowCount: () => n.length,
|
|
57
|
+
getRow: (e) => r[n[e]],
|
|
58
|
+
getSourceIndex: (e) => n[e],
|
|
59
|
+
getRowKey: (e) => s(r[n[e]], n[e])
|
|
50
60
|
};
|
|
51
|
-
}),
|
|
61
|
+
}), R = v((e, t, n, r, i, a, o) => e ? y({
|
|
52
62
|
globalText: t ? n : "",
|
|
53
|
-
columnFilters: r ? i :
|
|
54
|
-
sort: a ? o :
|
|
55
|
-
}) :
|
|
63
|
+
columnFilters: r ? i : S,
|
|
64
|
+
sort: a ? o : C
|
|
65
|
+
}) : x), z = v((e, t) => e ? b(t) : ""), B = v((e, t) => ({
|
|
56
66
|
query: e,
|
|
57
67
|
queryKey: t
|
|
58
68
|
}));
|
|
59
69
|
return {
|
|
60
|
-
|
|
70
|
+
resolveLabelRowLayout: (e, t) => E(e, t),
|
|
71
|
+
resolveBaseOrder: (e, t) => t ? D(t, e) : T(e),
|
|
61
72
|
resolveOrder: (e) => {
|
|
62
|
-
let { rows: t, visibleColumns: n,
|
|
73
|
+
let { rows: t, visibleColumns: n, globalFilteredOrder: r, rowDragAvailable: i, labelLayout: a } = e, o = e.manualFiltering ? S : e.columnFilters, s = e.manualSorting ? C : e.sort, l = O(n, o), u = k(t, n, l), d = A(t, r, n, o, u), f = j(t, d, n, s), p = a ? N(i, f, D(a, t.length)) : M(i, f, t.length);
|
|
63
74
|
return {
|
|
64
|
-
order:
|
|
65
|
-
orderIsIdentity:
|
|
66
|
-
rowDragOperable:
|
|
75
|
+
order: f,
|
|
76
|
+
orderIsIdentity: p,
|
|
77
|
+
rowDragOperable: c(i, p)
|
|
67
78
|
};
|
|
68
79
|
},
|
|
69
80
|
resolveClientSideRowModel: (e) => {
|
|
70
|
-
let { rows: t, order: n, rowGroupingActive: r, groupColumns: i, aggColumns: a, collapsedGroupKeys: o, rowKeyGetter: s } = e,
|
|
81
|
+
let { rows: t, order: n, rowGroupingActive: r, groupColumns: i, aggColumns: a, collapsedGroupKeys: o, rowKeyGetter: s, labelLayout: c, labelSortMode: l = "section", keepEmptySections: u = !1, sortActive: d = !1, getLabel: f } = e, p = P(r, t, n, i, a), m = F(p, o), h = I(r ? null : c ?? null, t, n, l, u, d, f);
|
|
71
82
|
return {
|
|
72
|
-
groupTree:
|
|
73
|
-
groupedDisplay:
|
|
74
|
-
|
|
83
|
+
groupTree: p,
|
|
84
|
+
groupedDisplay: m,
|
|
85
|
+
labelDisplay: h,
|
|
86
|
+
rowModel: L(m, h, n, t, s)
|
|
75
87
|
};
|
|
76
88
|
},
|
|
77
89
|
resolveServerSideQuery: (e) => {
|
|
78
|
-
let { isServerSide: t, globalFilterEnabled: n, globalText: r, columnFilterEnabled: i, columnFilters: a, sortingEnabled: o, sort: s } = e, c =
|
|
79
|
-
return
|
|
90
|
+
let { isServerSide: t, globalFilterEnabled: n, globalText: r, columnFilterEnabled: i, columnFilters: a, sortingEnabled: o, sort: s } = e, c = R(t, n, r, i, a, o, s);
|
|
91
|
+
return B(c, z(t, c));
|
|
80
92
|
}
|
|
81
93
|
};
|
|
82
94
|
};
|
|
83
95
|
//#endregion
|
|
84
|
-
export {
|
|
96
|
+
export { T as createRowPipelineResolver };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/rowHeightStore.cjs"),t=require("../logic/detailRow.cjs"),n=require("../logic/verticalGeometry.cjs"),r=require("./memo.cjs");var i=[],a=[],o=
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/rowHeightStore.cjs"),t=require("../logic/detailRow.cjs"),n=require("../logic/verticalGeometry.cjs"),r=require("./memo.cjs");var i=[],a=[],o=[],s=20,c=()=>{let c=r.createMemo(e=>e.some(e=>e.autoHeight===!0)),l=r.createMemo((t,n,r,i,a)=>t?e.buildRowHeightStore(n,r,i.getRowKey,a):null),u=r.createMemo((t,r,i,a,o)=>t&&r?e.createAutoHeightRowMetrics(r):n.createUniformRowMetrics(a,o)),d=r.createMemo((e,n,r,a,o,s,c)=>e?t.resolveDetailRowExtras({expandedKeys:n,rowModel:r,height:a,isExpandable:o,cache:s.current,allowScan:!c}):i),f=r.createMemo((e,t)=>{if(!e||t===void 0||e.labels.length===0)return a;let n=[];for(let r=0;r<e.labels.length;r+=1){let i=e.labels[r];n.push({index:e.labelViewIndexes[r],height:typeof t==`function`?t(i.row):t})}return n}),p=r.createMemo((e,t)=>t.length>0?n.createRowHeightOverrideMetrics(e,t):e),m=r.createMemo((e,t,r)=>e?n.createDetailRowMetrics(t,r):t),h=r.createMemo((e,t,r,i,a,o,c)=>e?n.computeAutoHeightVerticalGeometry({headerHeight:a,viewportHeight:o,scrollTop:c,overscan:s},t):n.computeVerticalGeometry({rowCount:r,rowHeight:i,headerHeight:a,viewportHeight:o,scrollTop:c,overscan:s,maxBodyPx:n.MAX_BODY_PX})),g=r.createMemo((e,t,n)=>{if(!e)return o;let r=[];for(let e of t)e.detailSize!==void 0&&e.detailSize>0&&r.push({rowKey:n.getRowKey(e.index)??e.index,virtualRow:e});return r});return e=>{let{isServerSide:t,autoHeight:r,visibleColumns:i,viewRowCount:a,estimateRowHeight:o,rowHeight:s,headerHeight:_,viewportHeight:v,scrollTop:y,rowModel:b,measuredHeights:x,autoHeightVersion:S,detailRowEnabled:C,expandedDetailRowKeys:w,detailHeight:T,detailIsExpandable:E,detailIndexCacheRef:D,labelDisplay:O,labelRowHeight:k}=e,A=c(i),j=!t&&n.shouldUseAutoHeight(r,A,a,5e4),M=l(j,a,o,b,x),N=u(j,M,S,a,s),P=d(C,w,b,T,E,D,t),F=f(t?null:O,k),I=p(N,F),L=I!==N&&I.totalBodyHeight<=15e6,R=L?I:N,z=P.length>0&&R.totalBodyHeight+P.reduce((e,t)=>e+t.height,0)<=15e6,B=m(z,R,P),V=h(j||z||L,B,a,s,_,v,y),H=V.rows,U=g(z,H,b);return{hasAutoHeightColumn:A,autoHeightActive:j,rowHeightStore:M,baseRowMetrics:N,labelHeightActive:L,detailExtras:P,detailActive:z,rowMetrics:B,verticalGeometry:V,virtualRows:H,virtualRowIndexes:V.rowIndexSet,detailEntries:U,windowFirstRow:H.length>0?H[0].index:0,windowLastRow:H.length>0?H[H.length-1].index:-1,physicalBodyHeight:V.physicalBodyHeight,bodyLayerTransform:V.translateY===0?void 0:`translateY(${V.translateY}px)`,verticalScaleFactor:V.scaleFactor,overlayBaseOffset:V.windowBaseOffsetPx}}};exports.createVerticalLayoutResolver=c;
|
|
@@ -2,6 +2,7 @@ import type { GridColumn, GridRowKey, RowModel } from '../model/gridTypes.unboun
|
|
|
2
2
|
import { type DetailRowExtra, type RowMetrics, type VerticalGeometry, type VerticalRow } from '../logic/verticalGeometry';
|
|
3
3
|
import { type RowHeightStore } from '../logic/rowHeightStore';
|
|
4
4
|
import { resolveDetailRowExtras, type DetailIndexCache } from '../logic/detailRow';
|
|
5
|
+
import type { LabelDisplay } from '../logic/labelRows';
|
|
5
6
|
type ReadonlyRef<V> = {
|
|
6
7
|
readonly current: V;
|
|
7
8
|
};
|
|
@@ -28,12 +29,15 @@ export type VerticalLayoutInputs<T> = {
|
|
|
28
29
|
detailHeight: number;
|
|
29
30
|
detailIsExpandable: DetailIsExpandable<T>;
|
|
30
31
|
detailIndexCacheRef: ReadonlyRef<DetailIndexCache>;
|
|
32
|
+
labelDisplay?: LabelDisplay<T> | null;
|
|
33
|
+
labelRowHeight?: number | ((row: T) => number);
|
|
31
34
|
};
|
|
32
35
|
export type VerticalLayoutResolution = {
|
|
33
36
|
hasAutoHeightColumn: boolean;
|
|
34
37
|
autoHeightActive: boolean;
|
|
35
38
|
rowHeightStore: RowHeightStore | null;
|
|
36
39
|
baseRowMetrics: RowMetrics;
|
|
40
|
+
labelHeightActive: boolean;
|
|
37
41
|
detailExtras: readonly DetailRowExtra[];
|
|
38
42
|
detailActive: boolean;
|
|
39
43
|
rowMetrics: RowMetrics;
|