@ishibashi0112/spreadsheet-grid-core 0.39.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/LICENSE +21 -0
- package/dist/controllers/autoHeightMeasurer.cjs +1 -0
- package/dist/controllers/autoHeightMeasurer.d.ts +30 -0
- package/dist/controllers/autoHeightMeasurer.js +74 -0
- package/dist/controllers/clipboardController.cjs +2 -0
- package/dist/controllers/clipboardController.d.ts +31 -0
- package/dist/controllers/clipboardController.js +88 -0
- package/dist/controllers/columnAutosizeRunner.cjs +1 -0
- package/dist/controllers/columnAutosizeRunner.d.ts +31 -0
- package/dist/controllers/columnAutosizeRunner.js +61 -0
- package/dist/controllers/columnHeaderDragController.cjs +1 -0
- package/dist/controllers/columnHeaderDragController.d.ts +44 -0
- package/dist/controllers/columnHeaderDragController.js +256 -0
- package/dist/controllers/columnMenuController.cjs +1 -0
- package/dist/controllers/columnMenuController.d.ts +49 -0
- package/dist/controllers/columnMenuController.js +110 -0
- package/dist/controllers/contextMenuController.cjs +1 -0
- package/dist/controllers/contextMenuController.d.ts +30 -0
- package/dist/controllers/contextMenuController.js +65 -0
- package/dist/controllers/debouncedValueStore.cjs +1 -0
- package/dist/controllers/debouncedValueStore.d.ts +11 -0
- package/dist/controllers/debouncedValueStore.js +22 -0
- package/dist/controllers/editController.cjs +1 -0
- package/dist/controllers/editController.d.ts +27 -0
- package/dist/controllers/editController.js +76 -0
- package/dist/controllers/filterPopoverController.cjs +1 -0
- package/dist/controllers/filterPopoverController.d.ts +53 -0
- package/dist/controllers/filterPopoverController.js +146 -0
- package/dist/controllers/globalFilteredOrder.cjs +1 -0
- package/dist/controllers/globalFilteredOrder.d.ts +38 -0
- package/dist/controllers/globalFilteredOrder.js +78 -0
- package/dist/controllers/historyController.cjs +1 -0
- package/dist/controllers/historyController.d.ts +28 -0
- package/dist/controllers/historyController.js +52 -0
- package/dist/controllers/keyboardController.cjs +1 -0
- package/dist/controllers/keyboardController.d.ts +36 -0
- package/dist/controllers/keyboardController.js +111 -0
- package/dist/controllers/panelHeaderDragController.cjs +1 -0
- package/dist/controllers/panelHeaderDragController.d.ts +21 -0
- package/dist/controllers/panelHeaderDragController.js +32 -0
- package/dist/controllers/pointerInteractionsController.cjs +1 -0
- package/dist/controllers/pointerInteractionsController.d.ts +74 -0
- package/dist/controllers/pointerInteractionsController.js +262 -0
- package/dist/controllers/popoverSupport.cjs +1 -0
- package/dist/controllers/popoverSupport.d.ts +18 -0
- package/dist/controllers/popoverSupport.js +25 -0
- package/dist/controllers/rowDragController.cjs +1 -0
- package/dist/controllers/rowDragController.d.ts +40 -0
- package/dist/controllers/rowDragController.js +192 -0
- package/dist/controllers/scrollSyncController.cjs +1 -0
- package/dist/controllers/scrollSyncController.d.ts +17 -0
- package/dist/controllers/scrollSyncController.js +51 -0
- package/dist/controllers/selectOptionsCollector.cjs +1 -0
- package/dist/controllers/selectOptionsCollector.d.ts +31 -0
- package/dist/controllers/selectOptionsCollector.js +88 -0
- package/dist/controllers/serverSideRowModel.cjs +1 -0
- package/dist/controllers/serverSideRowModel.d.ts +36 -0
- package/dist/controllers/serverSideRowModel.js +153 -0
- package/dist/controllers/systemColorSchemeStore.cjs +1 -0
- package/dist/controllers/systemColorSchemeStore.d.ts +5 -0
- package/dist/controllers/systemColorSchemeStore.js +18 -0
- package/dist/controllers/toolPanelController.cjs +1 -0
- package/dist/controllers/toolPanelController.d.ts +36 -0
- package/dist/controllers/toolPanelController.js +112 -0
- package/dist/controllers/tooltipController.cjs +1 -0
- package/dist/controllers/tooltipController.d.ts +6 -0
- package/dist/controllers/tooltipController.js +75 -0
- package/dist/controllers/viewportSyncController.cjs +1 -0
- package/dist/controllers/viewportSyncController.d.ts +30 -0
- package/dist/controllers/viewportSyncController.js +40 -0
- package/dist/engine/columnCommands.cjs +1 -0
- package/dist/engine/columnCommands.d.ts +56 -0
- package/dist/engine/columnCommands.js +199 -0
- package/dist/engine/columnLayout.cjs +1 -0
- package/dist/engine/columnLayout.d.ts +43 -0
- package/dist/engine/columnLayout.js +91 -0
- package/dist/engine/createGridEngine.cjs +1 -0
- package/dist/engine/createGridEngine.d.ts +46 -0
- package/dist/engine/createGridEngine.js +52 -0
- package/dist/engine/filterPopoverCommands.cjs +1 -0
- package/dist/engine/filterPopoverCommands.d.ts +56 -0
- package/dist/engine/filterPopoverCommands.js +303 -0
- package/dist/engine/gridApi.cjs +1 -0
- package/dist/engine/gridApi.d.ts +61 -0
- package/dist/engine/gridApi.js +389 -0
- package/dist/engine/memo.cjs +1 -0
- package/dist/engine/memo.d.ts +2 -0
- package/dist/engine/memo.js +18 -0
- package/dist/engine/notifiers.cjs +1 -0
- package/dist/engine/notifiers.d.ts +35 -0
- package/dist/engine/notifiers.js +34 -0
- package/dist/engine/rowPipeline.cjs +1 -0
- package/dist/engine/rowPipeline.d.ts +50 -0
- package/dist/engine/rowPipeline.js +84 -0
- package/dist/engine/rowSelectionCommands.cjs +1 -0
- package/dist/engine/rowSelectionCommands.d.ts +21 -0
- package/dist/engine/rowSelectionCommands.js +57 -0
- package/dist/engine/verticalLayout.cjs +1 -0
- package/dist/engine/verticalLayout.d.ts +52 -0
- package/dist/engine/verticalLayout.js +60 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +5 -0
- package/dist/logic/aggregation.cjs +1 -0
- package/dist/logic/aggregation.d.ts +13 -0
- package/dist/logic/aggregation.js +28 -0
- package/dist/logic/autoScrollGeometry.cjs +1 -0
- package/dist/logic/autoScrollGeometry.d.ts +27 -0
- package/dist/logic/autoScrollGeometry.js +19 -0
- package/dist/logic/autoSizeOnData.cjs +1 -0
- package/dist/logic/autoSizeOnData.d.ts +10 -0
- package/dist/logic/autoSizeOnData.js +19 -0
- package/dist/logic/cellOverflowTooltip.cjs +1 -0
- package/dist/logic/cellOverflowTooltip.d.ts +5 -0
- package/dist/logic/cellOverflowTooltip.js +4 -0
- package/dist/logic/checkboxEditor.cjs +1 -0
- package/dist/logic/checkboxEditor.d.ts +12 -0
- package/dist/logic/checkboxEditor.js +17 -0
- package/dist/logic/chunkedLoop.cjs +1 -0
- package/dist/logic/chunkedLoop.d.ts +8 -0
- package/dist/logic/chunkedLoop.js +18 -0
- package/dist/logic/clearCells.cjs +1 -0
- package/dist/logic/clearCells.d.ts +31 -0
- package/dist/logic/clearCells.js +91 -0
- package/dist/logic/columnAutosize.cjs +1 -0
- package/dist/logic/columnAutosize.d.ts +18 -0
- package/dist/logic/columnAutosize.js +150 -0
- package/dist/logic/columnFlex.cjs +1 -0
- package/dist/logic/columnFlex.d.ts +4 -0
- package/dist/logic/columnFlex.js +60 -0
- package/dist/logic/columnReset.cjs +1 -0
- package/dist/logic/columnReset.d.ts +7 -0
- package/dist/logic/columnReset.js +25 -0
- package/dist/logic/contextMenuTarget.cjs +1 -0
- package/dist/logic/contextMenuTarget.d.ts +4 -0
- package/dist/logic/contextMenuTarget.js +18 -0
- package/dist/logic/cx.cjs +1 -0
- package/dist/logic/cx.d.ts +1 -0
- package/dist/logic/cx.js +6 -0
- package/dist/logic/dateFilterCondition.cjs +1 -0
- package/dist/logic/dateFilterCondition.d.ts +26 -0
- package/dist/logic/dateFilterCondition.js +110 -0
- package/dist/logic/dateFilterPresets.cjs +1 -0
- package/dist/logic/dateFilterPresets.d.ts +13 -0
- package/dist/logic/dateFilterPresets.js +30 -0
- package/dist/logic/dateFilterTree.cjs +1 -0
- package/dist/logic/dateFilterTree.d.ts +17 -0
- package/dist/logic/dateFilterTree.js +75 -0
- package/dist/logic/datePickerCalendar.cjs +1 -0
- package/dist/logic/datePickerCalendar.d.ts +12 -0
- package/dist/logic/datePickerCalendar.js +41 -0
- package/dist/logic/detailRow.cjs +1 -0
- package/dist/logic/detailRow.d.ts +38 -0
- package/dist/logic/detailRow.js +78 -0
- package/dist/logic/domGuards.cjs +1 -0
- package/dist/logic/domGuards.d.ts +7 -0
- package/dist/logic/domGuards.js +4 -0
- package/dist/logic/editorValues.cjs +1 -0
- package/dist/logic/editorValues.d.ts +5 -0
- package/dist/logic/editorValues.js +32 -0
- package/dist/logic/exportCsv.cjs +3 -0
- package/dist/logic/exportCsv.d.ts +12 -0
- package/dist/logic/exportCsv.js +19 -0
- package/dist/logic/exportData.cjs +1 -0
- package/dist/logic/exportData.d.ts +9 -0
- package/dist/logic/exportData.js +24 -0
- package/dist/logic/exportScope.cjs +1 -0
- package/dist/logic/exportScope.d.ts +3 -0
- package/dist/logic/exportScope.js +4 -0
- package/dist/logic/filterPopoverLayout.cjs +1 -0
- package/dist/logic/filterPopoverLayout.d.ts +17 -0
- package/dist/logic/filterPopoverLayout.js +13 -0
- package/dist/logic/filterPopoverOutsideClick.cjs +1 -0
- package/dist/logic/filterPopoverOutsideClick.d.ts +2 -0
- package/dist/logic/filterPopoverOutsideClick.js +4 -0
- package/dist/logic/filterSummary.cjs +1 -0
- package/dist/logic/filterSummary.d.ts +3 -0
- package/dist/logic/filterSummary.js +22 -0
- package/dist/logic/filtering.cjs +1 -0
- package/dist/logic/filtering.d.ts +33 -0
- package/dist/logic/filtering.js +313 -0
- package/dist/logic/geometry.cjs +1 -0
- package/dist/logic/geometry.d.ts +72 -0
- package/dist/logic/geometry.js +161 -0
- package/dist/logic/gridState.cjs +1 -0
- package/dist/logic/gridState.d.ts +13 -0
- package/dist/logic/gridState.js +165 -0
- package/dist/logic/grouping.cjs +1 -0
- package/dist/logic/grouping.d.ts +34 -0
- package/dist/logic/grouping.js +93 -0
- package/dist/logic/history.cjs +1 -0
- package/dist/logic/history.d.ts +16 -0
- package/dist/logic/history.js +34 -0
- package/dist/logic/inferFilterType.cjs +1 -0
- package/dist/logic/inferFilterType.d.ts +19 -0
- package/dist/logic/inferFilterType.js +54 -0
- package/dist/logic/numberFilterCondition.cjs +1 -0
- package/dist/logic/numberFilterCondition.d.ts +21 -0
- package/dist/logic/numberFilterCondition.js +130 -0
- package/dist/logic/panelDragGeometry.cjs +1 -0
- package/dist/logic/panelDragGeometry.d.ts +13 -0
- package/dist/logic/panelDragGeometry.js +10 -0
- package/dist/logic/rowHeightStore.cjs +1 -0
- package/dist/logic/rowHeightStore.d.ts +13 -0
- package/dist/logic/rowHeightStore.js +41 -0
- package/dist/logic/rowReorder.cjs +1 -0
- package/dist/logic/rowReorder.d.ts +18 -0
- package/dist/logic/rowReorder.js +22 -0
- package/dist/logic/rowSelection.cjs +1 -0
- package/dist/logic/rowSelection.d.ts +16 -0
- package/dist/logic/rowSelection.js +49 -0
- package/dist/logic/scrollHint.cjs +1 -0
- package/dist/logic/scrollHint.d.ts +41 -0
- package/dist/logic/scrollHint.js +66 -0
- package/dist/logic/scrollTargets.cjs +1 -0
- package/dist/logic/scrollTargets.d.ts +22 -0
- package/dist/logic/scrollTargets.js +24 -0
- package/dist/logic/selectEditorState.cjs +1 -0
- package/dist/logic/selectEditorState.d.ts +28 -0
- package/dist/logic/selectEditorState.js +31 -0
- package/dist/logic/selectOptions.cjs +1 -0
- package/dist/logic/selectOptions.d.ts +9 -0
- package/dist/logic/selectOptions.js +23 -0
- package/dist/logic/serverSideBlocks.cjs +1 -0
- package/dist/logic/serverSideBlocks.d.ts +2 -0
- package/dist/logic/serverSideBlocks.js +14 -0
- package/dist/logic/serverSideCache.cjs +1 -0
- package/dist/logic/serverSideCache.d.ts +14 -0
- package/dist/logic/serverSideCache.js +42 -0
- package/dist/logic/serverSideEdits.cjs +1 -0
- package/dist/logic/serverSideEdits.d.ts +16 -0
- package/dist/logic/serverSideEdits.js +47 -0
- package/dist/logic/serverSideQuery.cjs +1 -0
- package/dist/logic/serverSideQuery.d.ts +7 -0
- package/dist/logic/serverSideQuery.js +21 -0
- package/dist/logic/setFilterSearch.cjs +1 -0
- package/dist/logic/setFilterSearch.d.ts +14 -0
- package/dist/logic/setFilterSearch.js +14 -0
- package/dist/logic/setFilterSelection.cjs +1 -0
- package/dist/logic/setFilterSelection.d.ts +5 -0
- package/dist/logic/setFilterSelection.js +4 -0
- package/dist/logic/slotDom.cjs +1 -0
- package/dist/logic/slotDom.d.ts +8 -0
- package/dist/logic/slotDom.js +22 -0
- package/dist/logic/slotProps.cjs +1 -0
- package/dist/logic/slotProps.d.ts +18 -0
- package/dist/logic/slotProps.js +63 -0
- package/dist/logic/sorting.cjs +1 -0
- package/dist/logic/sorting.d.ts +11 -0
- package/dist/logic/sorting.js +96 -0
- package/dist/logic/textFilterCondition.cjs +1 -0
- package/dist/logic/textFilterCondition.d.ts +18 -0
- package/dist/logic/textFilterCondition.js +55 -0
- package/dist/logic/theme.cjs +1 -0
- package/dist/logic/theme.d.ts +3 -0
- package/dist/logic/theme.js +4 -0
- package/dist/logic/tooltipGeometry.cjs +1 -0
- package/dist/logic/tooltipGeometry.d.ts +19 -0
- package/dist/logic/tooltipGeometry.js +16 -0
- package/dist/logic/validation.cjs +1 -0
- package/dist/logic/validation.d.ts +14 -0
- package/dist/logic/validation.js +47 -0
- package/dist/logic/valueFormatters.cjs +1 -0
- package/dist/logic/valueFormatters.d.ts +9 -0
- package/dist/logic/valueFormatters.js +17 -0
- package/dist/logic/valueStore.cjs +1 -0
- package/dist/logic/valueStore.d.ts +6 -0
- package/dist/logic/valueStore.js +18 -0
- package/dist/logic/verticalGeometry.cjs +1 -0
- package/dist/logic/verticalGeometry.d.ts +58 -0
- package/dist/logic/verticalGeometry.js +90 -0
- package/dist/model/gridActions.cjs +1 -0
- package/dist/model/gridActions.d.ts +125 -0
- package/dist/model/gridActions.js +114 -0
- package/dist/model/gridReducer.cjs +1 -0
- package/dist/model/gridReducer.d.ts +4 -0
- package/dist/model/gridReducer.js +247 -0
- package/dist/model/gridSelectors.cjs +1 -0
- package/dist/model/gridSelectors.d.ts +40 -0
- package/dist/model/gridSelectors.js +68 -0
- package/dist/model/gridStore.cjs +1 -0
- package/dist/model/gridStore.d.ts +24 -0
- package/dist/model/gridStore.js +38 -0
- package/dist/model/gridTypes.core.cjs +1 -0
- package/dist/model/gridTypes.core.d.ts +797 -0
- package/dist/model/gridTypes.core.js +0 -0
- package/dist/model/gridTypes.unbound.cjs +1 -0
- package/dist/model/gridTypes.unbound.d.ts +31 -0
- package/dist/model/gridTypes.unbound.js +0 -0
- package/dist/testing/index.cjs +1 -0
- package/dist/testing/index.d.ts +5 -0
- package/dist/testing/index.js +51 -0
- package/dist/utils/clipboard.cjs +7 -0
- package/dist/utils/clipboard.d.ts +29 -0
- package/dist/utils/clipboard.js +110 -0
- package/dist/utils/excelColumnName.cjs +1 -0
- package/dist/utils/excelColumnName.d.ts +1 -0
- package/dist/utils/excelColumnName.js +9 -0
- package/dist/utils/permissions.cjs +1 -0
- package/dist/utils/permissions.d.ts +4 -0
- package/dist/utils/permissions.js +7 -0
- package/dist/utils/scheduler.cjs +1 -0
- package/dist/utils/scheduler.d.ts +1 -0
- package/dist/utils/scheduler.js +13 -0
- package/package.json +58 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/detailRow.cjs"),t=require("../logic/valueStore.cjs"),n=require("./popoverSupport.cjs"),r=require("../logic/filtering.cjs"),i=require("../logic/numberFilterCondition.cjs"),a=require("../logic/textFilterCondition.cjs"),o=require("../logic/dateFilterCondition.cjs"),s=require("../logic/filterPopoverLayout.cjs"),c=require("../logic/filterPopoverOutsideClick.cjs");var l=240,u=8,d=8,f=230,p=340,m=480,h=(e,t)=>{if(!t)return null;let n=e.find(e=>e.key===t.columnKey)??null;return!n||n.filterType===t.filterType?n:{...n,filterType:t.filterType}},g=()=>{let g=null,_=t.createValueStore({state:null,layout:null}),v={current:null},y={current:null},b={current:null},x=null,S=null,C=null,w=null,T=null,E=null,D=null,O=null,k=e=>{let t=_.getSnapshot(),n=t.layout;n===e||n!==null&&e!==null&&n.top===e.top&&n.left===e.left&&n.width===e.width&&n.maxHeight===e.maxHeight||_.setSnapshot({...t,layout:e})},A=()=>g===null?null:h(g.visibleColumns,_.getSnapshot().state),j=()=>{if(!_.getSnapshot().state||!x){k(null);return}let e=x.getBoundingClientRect(),t=A()?.filterType,n=t===`numberSet`||t===`textSet`||t===`dateSet`?m:t===`set`?p:f,{top:r,left:i,maxHeight:a}=s.computeFilterPopoverPlacement({anchorTop:e.top,anchorBottom:e.bottom,anchorRight:e.right,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,popupWidth:l,popupHeight:S??n,offsetY:d,viewportMargin:u});k({top:r,left:i,width:l,maxHeight:a})},M=()=>{T!==null&&(cancelAnimationFrame(T),T=null),E!==null&&(cancelAnimationFrame(E),E=null)},N=()=>{C?.disconnect(),C=null,w=null},P=()=>{_.setSnapshot({state:null,layout:null}),x=null,y.current=null,b.current=null,S=null,F.detach(),N(),M(),D=null,g!==null&&n.restoreGridFocus(g.gridRootRef)},F=n.createPopoverWindowBindings({onResize:j,onScroll:j,isInside:e=>!c.isFilterPopoverOutsideTarget(e,v.current),onOutsidePointerDown:P}),I=t=>{if(g===null||!g.enableColumnFilter)return;let{gridRootRef:s,resolveColumnFilterType:c,columnFilterValues:l}=g;n.blurForPopover(s.current);let u=s.current,d=u?.querySelectorAll(`[data-ssg-col-key]`);x=u&&d?Array.from(d).find(n=>n.dataset.ssgColKey===t.key&&!e.isInsideDetailCardOf(u,n))??null:null;let f=t.filterType===`auto`&&c?c(t):t.filterType??`text`,p=l[t.key],m=f===`number`?i.numberFilterValueToConditionDraft(r.isNumberColumnFilterValue(p)?p:void 0):f===`numberSet`?i.parsedNumberFilterToConditionDraft(r.isNumberSetColumnFilterValue(p)?p.condition:void 0):null,h=f===`textSet`?a.parsedTextFilterToConditionDraft(r.isTextSetColumnFilterValue(p)?p.condition:void 0):null,v=f===`dateSet`?o.parsedDateFilterToConditionDraft(r.isDateSetColumnFilterValue(p)?p.condition:void 0):null;_.setSnapshot({..._.getSnapshot(),state:{columnKey:t.key,filterType:f,draftValue:r.columnFilterValueToDraftText(p),numberDraft:m,textDraft:h,dateDraft:v}}),j(),F.attach()},L=e=>{let t=_.getSnapshot();t.state&&_.setSnapshot({...t,state:{...t.state,...e}})},R=()=>{let e=v.current;if(!(_.getSnapshot().layout!==null&&e!==null)||typeof ResizeObserver>`u`){N();return}w!==e&&(N(),C=new ResizeObserver(()=>{let e=v.current?.getBoundingClientRect().height??null;e===null||e===S||(S=e,j())}),C.observe(e),w=e)},z=()=>{let{state:e,layout:t}=_.getSnapshot(),n=A();if(!e||!n||!t){M(),D=null;return}let r=O!==g?.visibleColumns,i=`${e.columnKey}|${e.filterType}|${t.top}|${t.left}|${t.width}`;if(!r&&D===i)return;D=i,O=g?.visibleColumns??null,M();let a=n.filterType??`text`;T=requestAnimationFrame(()=>{T=null,E=requestAnimationFrame(()=>{if(E=null,a===`select`){b.current?.focus();return}let e=y.current;if(e&&(e.focus(),e.type===`text`)){let t=e.value.length;e.setSelectionRange(t,t)}})})};return{update:e=>{g=e,R(),z()},subscribe:_.subscribe,getSnapshot:_.getSnapshot,panelRef:v,textInputRef:y,selectRef:b,open:I,close:P,updateDraft:e=>L({draftValue:e}),updateNumberDraft:e=>L({numberDraft:e}),updateTextDraft:e=>L({textDraft:e}),updateDateDraft:e=>L({dateDraft:e}),dispose:()=>{F.detach(),N(),M()}}};exports.createFilterPopoverController=g,exports.resolveOpenedFilterColumn=h;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { ColumnFilterUiType, ColumnFilterValue, GridColumn } from '../model/gridTypes.unbound';
|
|
2
|
+
import { type NumberFilterConditionDraft } from '../logic/numberFilterCondition';
|
|
3
|
+
import { type TextFilterConditionDraft } from '../logic/textFilterCondition';
|
|
4
|
+
import { type DateFilterConditionDraft } from '../logic/dateFilterCondition';
|
|
5
|
+
import { type ReadonlyElementRef } from './popoverSupport';
|
|
6
|
+
export type HeaderFilterPopoverState = {
|
|
7
|
+
columnKey: string;
|
|
8
|
+
filterType: ColumnFilterUiType;
|
|
9
|
+
draftValue: string;
|
|
10
|
+
numberDraft: NumberFilterConditionDraft | null;
|
|
11
|
+
textDraft: TextFilterConditionDraft | null;
|
|
12
|
+
dateDraft: DateFilterConditionDraft | null;
|
|
13
|
+
};
|
|
14
|
+
export type FilterPopoverLayout = {
|
|
15
|
+
top: number;
|
|
16
|
+
left: number;
|
|
17
|
+
width: number;
|
|
18
|
+
maxHeight: number;
|
|
19
|
+
};
|
|
20
|
+
export type FilterPopoverSnapshot = {
|
|
21
|
+
state: HeaderFilterPopoverState | null;
|
|
22
|
+
layout: FilterPopoverLayout | null;
|
|
23
|
+
};
|
|
24
|
+
export type FilterPopoverControllerArgs<T> = {
|
|
25
|
+
visibleColumns: GridColumn<T>[];
|
|
26
|
+
columnFilterValues: Record<string, ColumnFilterValue>;
|
|
27
|
+
enableColumnFilter: boolean;
|
|
28
|
+
gridRootRef: ReadonlyElementRef;
|
|
29
|
+
resolveColumnFilterType?: (column: GridColumn<T>) => ColumnFilterUiType;
|
|
30
|
+
};
|
|
31
|
+
export type FilterPopoverController<T> = {
|
|
32
|
+
update: (args: FilterPopoverControllerArgs<T>) => void;
|
|
33
|
+
subscribe: (listener: () => void) => () => void;
|
|
34
|
+
getSnapshot: () => FilterPopoverSnapshot;
|
|
35
|
+
panelRef: {
|
|
36
|
+
current: HTMLDivElement | null;
|
|
37
|
+
};
|
|
38
|
+
textInputRef: {
|
|
39
|
+
current: HTMLInputElement | null;
|
|
40
|
+
};
|
|
41
|
+
selectRef: {
|
|
42
|
+
current: HTMLSelectElement | null;
|
|
43
|
+
};
|
|
44
|
+
open: (column: GridColumn<T>) => void;
|
|
45
|
+
close: () => void;
|
|
46
|
+
updateDraft: (value: string) => void;
|
|
47
|
+
updateNumberDraft: (draft: NumberFilterConditionDraft) => void;
|
|
48
|
+
updateTextDraft: (draft: TextFilterConditionDraft) => void;
|
|
49
|
+
updateDateDraft: (draft: DateFilterConditionDraft) => void;
|
|
50
|
+
dispose: () => void;
|
|
51
|
+
};
|
|
52
|
+
export declare const resolveOpenedFilterColumn: <T>(visibleColumns: GridColumn<T>[], state: HeaderFilterPopoverState | null) => GridColumn<T> | null;
|
|
53
|
+
export declare const createFilterPopoverController: <T>() => FilterPopoverController<T>;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { isInsideDetailCardOf as e } from "../logic/detailRow.js";
|
|
2
|
+
import { createValueStore as t } from "../logic/valueStore.js";
|
|
3
|
+
import { blurForPopover as n, createPopoverWindowBindings as r, restoreGridFocus as i } from "./popoverSupport.js";
|
|
4
|
+
import { columnFilterValueToDraftText as a, isDateSetColumnFilterValue as o, isNumberColumnFilterValue as s, isNumberSetColumnFilterValue as c, isTextSetColumnFilterValue as l } from "../logic/filtering.js";
|
|
5
|
+
import { numberFilterValueToConditionDraft as u, parsedNumberFilterToConditionDraft as d } from "../logic/numberFilterCondition.js";
|
|
6
|
+
import { parsedTextFilterToConditionDraft as f } from "../logic/textFilterCondition.js";
|
|
7
|
+
import { parsedDateFilterToConditionDraft as p } from "../logic/dateFilterCondition.js";
|
|
8
|
+
import { computeFilterPopoverPlacement as m } from "../logic/filterPopoverLayout.js";
|
|
9
|
+
import { isFilterPopoverOutsideTarget as h } from "../logic/filterPopoverOutsideClick.js";
|
|
10
|
+
//#region src/controllers/filterPopoverController.ts
|
|
11
|
+
var g = 240, _ = 8, v = 8, y = 230, b = 340, x = 480, S = (e, t) => {
|
|
12
|
+
if (!t) return null;
|
|
13
|
+
let n = e.find((e) => e.key === t.columnKey) ?? null;
|
|
14
|
+
return !n || n.filterType === t.filterType ? n : {
|
|
15
|
+
...n,
|
|
16
|
+
filterType: t.filterType
|
|
17
|
+
};
|
|
18
|
+
}, C = () => {
|
|
19
|
+
let C = null, w = t({
|
|
20
|
+
state: null,
|
|
21
|
+
layout: null
|
|
22
|
+
}), T = { current: null }, E = { current: null }, D = { current: null }, O = null, k = null, A = null, j = null, M = null, N = null, P = null, F = null, I = (e) => {
|
|
23
|
+
let t = w.getSnapshot(), n = t.layout;
|
|
24
|
+
n === e || n !== null && e !== null && n.top === e.top && n.left === e.left && n.width === e.width && n.maxHeight === e.maxHeight || w.setSnapshot({
|
|
25
|
+
...t,
|
|
26
|
+
layout: e
|
|
27
|
+
});
|
|
28
|
+
}, L = () => C === null ? null : S(C.visibleColumns, w.getSnapshot().state), R = () => {
|
|
29
|
+
if (!w.getSnapshot().state || !O) {
|
|
30
|
+
I(null);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
let e = O.getBoundingClientRect(), t = L()?.filterType, n = t === "numberSet" || t === "textSet" || t === "dateSet" ? x : t === "set" ? b : y, { top: r, left: i, maxHeight: a } = m({
|
|
34
|
+
anchorTop: e.top,
|
|
35
|
+
anchorBottom: e.bottom,
|
|
36
|
+
anchorRight: e.right,
|
|
37
|
+
viewportWidth: window.innerWidth,
|
|
38
|
+
viewportHeight: window.innerHeight,
|
|
39
|
+
popupWidth: g,
|
|
40
|
+
popupHeight: k ?? n,
|
|
41
|
+
offsetY: v,
|
|
42
|
+
viewportMargin: _
|
|
43
|
+
});
|
|
44
|
+
I({
|
|
45
|
+
top: r,
|
|
46
|
+
left: i,
|
|
47
|
+
width: g,
|
|
48
|
+
maxHeight: a
|
|
49
|
+
});
|
|
50
|
+
}, z = () => {
|
|
51
|
+
M !== null && (cancelAnimationFrame(M), M = null), N !== null && (cancelAnimationFrame(N), N = null);
|
|
52
|
+
}, B = () => {
|
|
53
|
+
A?.disconnect(), A = null, j = null;
|
|
54
|
+
}, V = () => {
|
|
55
|
+
w.setSnapshot({
|
|
56
|
+
state: null,
|
|
57
|
+
layout: null
|
|
58
|
+
}), O = null, E.current = null, D.current = null, k = null, H.detach(), B(), z(), P = null, C !== null && i(C.gridRootRef);
|
|
59
|
+
}, H = r({
|
|
60
|
+
onResize: R,
|
|
61
|
+
onScroll: R,
|
|
62
|
+
isInside: (e) => !h(e, T.current),
|
|
63
|
+
onOutsidePointerDown: V
|
|
64
|
+
}), U = (t) => {
|
|
65
|
+
if (C === null || !C.enableColumnFilter) return;
|
|
66
|
+
let { gridRootRef: r, resolveColumnFilterType: i, columnFilterValues: m } = C;
|
|
67
|
+
n(r.current);
|
|
68
|
+
let h = r.current, g = h?.querySelectorAll("[data-ssg-col-key]");
|
|
69
|
+
O = h && g ? Array.from(g).find((n) => n.dataset.ssgColKey === t.key && !e(h, n)) ?? null : null;
|
|
70
|
+
let _ = t.filterType === "auto" && i ? i(t) : t.filterType ?? "text", v = m[t.key], y = _ === "number" ? u(s(v) ? v : void 0) : _ === "numberSet" ? d(c(v) ? v.condition : void 0) : null, b = _ === "textSet" ? f(l(v) ? v.condition : void 0) : null, x = _ === "dateSet" ? p(o(v) ? v.condition : void 0) : null;
|
|
71
|
+
w.setSnapshot({
|
|
72
|
+
...w.getSnapshot(),
|
|
73
|
+
state: {
|
|
74
|
+
columnKey: t.key,
|
|
75
|
+
filterType: _,
|
|
76
|
+
draftValue: a(v),
|
|
77
|
+
numberDraft: y,
|
|
78
|
+
textDraft: b,
|
|
79
|
+
dateDraft: x
|
|
80
|
+
}
|
|
81
|
+
}), R(), H.attach();
|
|
82
|
+
}, W = (e) => {
|
|
83
|
+
let t = w.getSnapshot();
|
|
84
|
+
t.state && w.setSnapshot({
|
|
85
|
+
...t,
|
|
86
|
+
state: {
|
|
87
|
+
...t.state,
|
|
88
|
+
...e
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}, G = () => {
|
|
92
|
+
let e = T.current;
|
|
93
|
+
if (!(w.getSnapshot().layout !== null && e !== null) || typeof ResizeObserver > "u") {
|
|
94
|
+
B();
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
j !== e && (B(), A = new ResizeObserver(() => {
|
|
98
|
+
let e = T.current?.getBoundingClientRect().height ?? null;
|
|
99
|
+
e === null || e === k || (k = e, R());
|
|
100
|
+
}), A.observe(e), j = e);
|
|
101
|
+
}, K = () => {
|
|
102
|
+
let { state: e, layout: t } = w.getSnapshot(), n = L();
|
|
103
|
+
if (!e || !n || !t) {
|
|
104
|
+
z(), P = null;
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
let r = F !== C?.visibleColumns, i = `${e.columnKey}|${e.filterType}|${t.top}|${t.left}|${t.width}`;
|
|
108
|
+
if (!r && P === i) return;
|
|
109
|
+
P = i, F = C?.visibleColumns ?? null, z();
|
|
110
|
+
let a = n.filterType ?? "text";
|
|
111
|
+
M = requestAnimationFrame(() => {
|
|
112
|
+
M = null, N = requestAnimationFrame(() => {
|
|
113
|
+
if (N = null, a === "select") {
|
|
114
|
+
D.current?.focus();
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
let e = E.current;
|
|
118
|
+
if (e && (e.focus(), e.type === "text")) {
|
|
119
|
+
let t = e.value.length;
|
|
120
|
+
e.setSelectionRange(t, t);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
return {
|
|
126
|
+
update: (e) => {
|
|
127
|
+
C = e, G(), K();
|
|
128
|
+
},
|
|
129
|
+
subscribe: w.subscribe,
|
|
130
|
+
getSnapshot: w.getSnapshot,
|
|
131
|
+
panelRef: T,
|
|
132
|
+
textInputRef: E,
|
|
133
|
+
selectRef: D,
|
|
134
|
+
open: U,
|
|
135
|
+
close: V,
|
|
136
|
+
updateDraft: (e) => W({ draftValue: e }),
|
|
137
|
+
updateNumberDraft: (e) => W({ numberDraft: e }),
|
|
138
|
+
updateTextDraft: (e) => W({ textDraft: e }),
|
|
139
|
+
updateDateDraft: (e) => W({ dateDraft: e }),
|
|
140
|
+
dispose: () => {
|
|
141
|
+
H.detach(), B(), z();
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
//#endregion
|
|
146
|
+
export { C as createFilterPopoverController, S as resolveOpenedFilterColumn };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/valueStore.cjs"),t=require("../logic/chunkedLoop.cjs"),n=require("../logic/filtering.cjs");var r=5e4,i=(e,t,r)=>r&&e.needle.length>0?e.rows.length<=5e4?{order:n.filterOrderByGlobalText(e.rows,e.baseOrder,e.columns,t),status:`ready`,progress:1}:null:{order:e.baseOrder,status:`idle`,progress:1},a=(e,t)=>e.rows===t.rows&&e.baseOrder===t.baseOrder&&e.columns===t.columns&&e.needle===t.needle,o=(e,t,n)=>{if(e)return e;let{ready:r,progress:i}=t;return r!==null&&a(r,n)?{order:r.order,status:`ready`,progress:1}:{order:r!==null&&r.rowsLength===n.rows.length?r.order:n.baseOrder,status:`filtering`,progress:i!==null&&a(i,n)?i.progress:0}},s=()=>{let r=e.createValueStore({ready:null,progress:null}),i=null,o=null,s=e=>{let i={rows:e.rows,baseOrder:e.baseOrder,columns:e.columns,needle:e.needle},a=i.baseOrder.length,s=new Int32Array(a),c=0,l=!1;o=()=>{l=!0},t.runChunked(a,e=>{let t=i.baseOrder[e];n.rowMatchesGlobalText(i.rows[t],i.columns,i.needle)&&(s[c]=t,c+=1)},{isCancelled:()=>l,onYield:(e,t)=>{r.setSnapshot({...r.getSnapshot(),progress:{...i,progress:e/t}})}}).then(e=>{if(!e)return;let t=c===a?i.baseOrder:s.slice(0,c);r.setSnapshot({...r.getSnapshot(),ready:{...i,order:t,rowsLength:i.rows.length}})})};return{update:e=>{let t=i===null||i.needsAsync!==e.needsAsync||!a(i,e);i=e,t&&(o?.(),o=null,e.needsAsync&&s(e))},subscribe:r.subscribe,getSnapshot:r.getSnapshot,dispose:()=>{o?.(),o=null}}};exports.ASYNC_GLOBAL_FILTER_ROW_THRESHOLD=r,exports.createGlobalFilteredOrderRunner=s,exports.resolveSyncGlobalFilteredOrder=i,exports.selectGlobalFilteredOrderResult=o;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { GlobalFilterStatus, GridColumn } from '../model/gridTypes.unbound';
|
|
2
|
+
import { type RowOrder } from '../logic/filtering';
|
|
3
|
+
export declare const ASYNC_GLOBAL_FILTER_ROW_THRESHOLD = 50000;
|
|
4
|
+
export type GlobalFilteredOrderResult = {
|
|
5
|
+
order: RowOrder;
|
|
6
|
+
status: GlobalFilterStatus;
|
|
7
|
+
progress: number;
|
|
8
|
+
};
|
|
9
|
+
export type GlobalFilterKey<T> = {
|
|
10
|
+
rows: T[];
|
|
11
|
+
baseOrder: RowOrder;
|
|
12
|
+
columns: GridColumn<T>[];
|
|
13
|
+
needle: string;
|
|
14
|
+
};
|
|
15
|
+
export declare const resolveSyncGlobalFilteredOrder: <T>(key: GlobalFilterKey<T>, deferredText: string, enabled: boolean) => GlobalFilteredOrderResult | null;
|
|
16
|
+
export type GlobalFilteredOrderArgs<T> = GlobalFilterKey<T> & {
|
|
17
|
+
needsAsync: boolean;
|
|
18
|
+
};
|
|
19
|
+
type ReadyState<T> = GlobalFilterKey<T> & {
|
|
20
|
+
order: RowOrder;
|
|
21
|
+
rowsLength: number;
|
|
22
|
+
};
|
|
23
|
+
type ProgressState<T> = GlobalFilterKey<T> & {
|
|
24
|
+
progress: number;
|
|
25
|
+
};
|
|
26
|
+
export type GlobalFilteredOrderSnapshot<T> = {
|
|
27
|
+
ready: ReadyState<T> | null;
|
|
28
|
+
progress: ProgressState<T> | null;
|
|
29
|
+
};
|
|
30
|
+
export declare const selectGlobalFilteredOrderResult: <T>(syncResult: GlobalFilteredOrderResult | null, snapshot: GlobalFilteredOrderSnapshot<T>, key: GlobalFilterKey<T>) => GlobalFilteredOrderResult;
|
|
31
|
+
export type GlobalFilteredOrderRunner<T> = {
|
|
32
|
+
update: (args: GlobalFilteredOrderArgs<T>) => void;
|
|
33
|
+
subscribe: (listener: () => void) => () => void;
|
|
34
|
+
getSnapshot: () => GlobalFilteredOrderSnapshot<T>;
|
|
35
|
+
dispose: () => void;
|
|
36
|
+
};
|
|
37
|
+
export declare const createGlobalFilteredOrderRunner: <T>() => GlobalFilteredOrderRunner<T>;
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { createValueStore as e } from "../logic/valueStore.js";
|
|
2
|
+
import { runChunked as t } from "../logic/chunkedLoop.js";
|
|
3
|
+
import { filterOrderByGlobalText as n, rowMatchesGlobalText as r } from "../logic/filtering.js";
|
|
4
|
+
//#region src/controllers/globalFilteredOrder.ts
|
|
5
|
+
var i = 5e4, a = (e, t, r) => r && e.needle.length > 0 ? e.rows.length <= 5e4 ? {
|
|
6
|
+
order: n(e.rows, e.baseOrder, e.columns, t),
|
|
7
|
+
status: "ready",
|
|
8
|
+
progress: 1
|
|
9
|
+
} : null : {
|
|
10
|
+
order: e.baseOrder,
|
|
11
|
+
status: "idle",
|
|
12
|
+
progress: 1
|
|
13
|
+
}, o = (e, t) => e.rows === t.rows && e.baseOrder === t.baseOrder && e.columns === t.columns && e.needle === t.needle, s = (e, t, n) => {
|
|
14
|
+
if (e) return e;
|
|
15
|
+
let { ready: r, progress: i } = t;
|
|
16
|
+
return r !== null && o(r, n) ? {
|
|
17
|
+
order: r.order,
|
|
18
|
+
status: "ready",
|
|
19
|
+
progress: 1
|
|
20
|
+
} : {
|
|
21
|
+
order: r !== null && r.rowsLength === n.rows.length ? r.order : n.baseOrder,
|
|
22
|
+
status: "filtering",
|
|
23
|
+
progress: i !== null && o(i, n) ? i.progress : 0
|
|
24
|
+
};
|
|
25
|
+
}, c = () => {
|
|
26
|
+
let n = e({
|
|
27
|
+
ready: null,
|
|
28
|
+
progress: null
|
|
29
|
+
}), i = null, a = null, s = (e) => {
|
|
30
|
+
let i = {
|
|
31
|
+
rows: e.rows,
|
|
32
|
+
baseOrder: e.baseOrder,
|
|
33
|
+
columns: e.columns,
|
|
34
|
+
needle: e.needle
|
|
35
|
+
}, o = i.baseOrder.length, s = new Int32Array(o), c = 0, l = !1;
|
|
36
|
+
a = () => {
|
|
37
|
+
l = !0;
|
|
38
|
+
}, t(o, (e) => {
|
|
39
|
+
let t = i.baseOrder[e];
|
|
40
|
+
r(i.rows[t], i.columns, i.needle) && (s[c] = t, c += 1);
|
|
41
|
+
}, {
|
|
42
|
+
isCancelled: () => l,
|
|
43
|
+
onYield: (e, t) => {
|
|
44
|
+
n.setSnapshot({
|
|
45
|
+
...n.getSnapshot(),
|
|
46
|
+
progress: {
|
|
47
|
+
...i,
|
|
48
|
+
progress: e / t
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}).then((e) => {
|
|
53
|
+
if (!e) return;
|
|
54
|
+
let t = c === o ? i.baseOrder : s.slice(0, c);
|
|
55
|
+
n.setSnapshot({
|
|
56
|
+
...n.getSnapshot(),
|
|
57
|
+
ready: {
|
|
58
|
+
...i,
|
|
59
|
+
order: t,
|
|
60
|
+
rowsLength: i.rows.length
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
return {
|
|
66
|
+
update: (e) => {
|
|
67
|
+
let t = i === null || i.needsAsync !== e.needsAsync || !o(i, e);
|
|
68
|
+
i = e, t && (a?.(), a = null, e.needsAsync && s(e));
|
|
69
|
+
},
|
|
70
|
+
subscribe: n.subscribe,
|
|
71
|
+
getSnapshot: n.getSnapshot,
|
|
72
|
+
dispose: () => {
|
|
73
|
+
a?.(), a = null;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
//#endregion
|
|
78
|
+
export { i as ASYNC_GLOBAL_FILTER_ROW_THRESHOLD, c as createGlobalFilteredOrderRunner, a as resolveSyncGlobalFilteredOrder, s as selectGlobalFilteredOrderResult };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../model/gridActions.cjs"),t=require("../logic/history.cjs");var n=()=>{let n=null,r=t.createHistoryStack(),i=null,a=null,o={canUndo:!1,canRedo:!1},s=()=>n!==null&&n.enabled&&n.onRowsChange!=null,c=()=>s()&&t.canUndoHistory(r),l=()=>s()&&t.canRedoHistory(r),u=()=>{let e={canUndo:c(),canRedo:l()};e.canUndo===o.canUndo&&e.canRedo===o.canRedo||(o=e,n?.onUndoRedoStateChange?.(e))},d=e=>{n=e,a===null?a=e.rows:e.rows!==a&&(a=e.rows,i===e.rows?i=null:(i=null,r=t.createHistoryStack())),u()},f=t=>{if(n===null)return;let{dispatch:r}=n,i=t.selection;i?.type===`cell`?(r(e.gridActions.startSelection(i.range.start)),r(e.gridActions.updateSelection(i.range.end)),r(e.gridActions.endSelection())):i?.type===`row`?(r(e.gridActions.startRowSelection(i.startRow)),r(e.gridActions.updateRowSelection(i.endRow)),r(e.gridActions.endSelection())):i?.type===`col`?(r(e.gridActions.startColumnSelection(i.startCol)),r(e.gridActions.updateColumnSelection(i.endCol)),r(e.gridActions.endSelection())):r(e.gridActions.clearSelection()),r(e.gridActions.activateCell(t.activeCell))},p=e=>{n===null||!n.onRowsChange||(n.enabled&&(r=t.pushHistory(r,{rows:n.rows,selection:n.selection,activeCell:n.activeCell},n.limit),i=e,u()),n.onRowsChange(e))},m=e=>{e===null||n===null||!n.onRowsChange||(r=e.stack,i=e.snapshot.rows,n.onRowsChange(e.snapshot.rows),f(e.snapshot),n.onAfterRestore?.(e.snapshot.activeCell),u())},h=()=>n===null?null:{rows:n.rows,selection:n.selection,activeCell:n.activeCell};return{update:d,handleRowsChange:p,undo:()=>{let e=h();!s()||e===null||m(t.undoHistory(r,e))},redo:()=>{let e=h();!s()||e===null||m(t.redoHistory(r,e))},canUndo:c,canRedo:l,clearHistory:()=>{r=t.createHistoryStack(),u()}}};exports.createHistoryController=n;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type GridUiAction } from '../model/gridActions';
|
|
2
|
+
import type { CellCoord, GridSelection, UndoRedoState } from '../model/gridTypes.unbound';
|
|
3
|
+
export type GridHistoryEntry<T> = {
|
|
4
|
+
rows: T[];
|
|
5
|
+
selection: GridSelection;
|
|
6
|
+
activeCell: CellCoord | null;
|
|
7
|
+
};
|
|
8
|
+
export type HistoryControllerArgs<T> = {
|
|
9
|
+
rows: T[];
|
|
10
|
+
selection: GridSelection;
|
|
11
|
+
activeCell: CellCoord | null;
|
|
12
|
+
onRowsChange?: (nextRows: T[]) => void;
|
|
13
|
+
dispatch: (action: GridUiAction) => void;
|
|
14
|
+
enabled: boolean;
|
|
15
|
+
limit: number;
|
|
16
|
+
onUndoRedoStateChange?: (state: UndoRedoState) => void;
|
|
17
|
+
onAfterRestore?: (activeCell: CellCoord | null) => void;
|
|
18
|
+
};
|
|
19
|
+
export type HistoryController<T> = {
|
|
20
|
+
update: (args: HistoryControllerArgs<T>) => void;
|
|
21
|
+
handleRowsChange: (nextRows: T[]) => void;
|
|
22
|
+
undo: () => void;
|
|
23
|
+
redo: () => void;
|
|
24
|
+
canUndo: () => boolean;
|
|
25
|
+
canRedo: () => boolean;
|
|
26
|
+
clearHistory: () => void;
|
|
27
|
+
};
|
|
28
|
+
export declare const createHistoryController: <T>() => HistoryController<T>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { gridActions as e } from "../model/gridActions.js";
|
|
2
|
+
import { canRedoHistory as t, canUndoHistory as n, createHistoryStack as r, pushHistory as i, redoHistory as a, undoHistory as o } from "../logic/history.js";
|
|
3
|
+
//#region src/controllers/historyController.ts
|
|
4
|
+
var s = () => {
|
|
5
|
+
let s = null, c = r(), l = null, u = null, d = {
|
|
6
|
+
canUndo: !1,
|
|
7
|
+
canRedo: !1
|
|
8
|
+
}, f = () => s !== null && s.enabled && s.onRowsChange != null, p = () => f() && n(c), m = () => f() && t(c), h = () => {
|
|
9
|
+
let e = {
|
|
10
|
+
canUndo: p(),
|
|
11
|
+
canRedo: m()
|
|
12
|
+
};
|
|
13
|
+
e.canUndo === d.canUndo && e.canRedo === d.canRedo || (d = e, s?.onUndoRedoStateChange?.(e));
|
|
14
|
+
}, g = (e) => {
|
|
15
|
+
s = e, u === null ? u = e.rows : e.rows !== u && (u = e.rows, l === e.rows ? l = null : (l = null, c = r())), h();
|
|
16
|
+
}, _ = (t) => {
|
|
17
|
+
if (s === null) return;
|
|
18
|
+
let { dispatch: n } = s, r = t.selection;
|
|
19
|
+
r?.type === "cell" ? (n(e.startSelection(r.range.start)), n(e.updateSelection(r.range.end)), n(e.endSelection())) : r?.type === "row" ? (n(e.startRowSelection(r.startRow)), n(e.updateRowSelection(r.endRow)), n(e.endSelection())) : r?.type === "col" ? (n(e.startColumnSelection(r.startCol)), n(e.updateColumnSelection(r.endCol)), n(e.endSelection())) : n(e.clearSelection()), n(e.activateCell(t.activeCell));
|
|
20
|
+
}, v = (e) => {
|
|
21
|
+
s === null || !s.onRowsChange || (s.enabled && (c = i(c, {
|
|
22
|
+
rows: s.rows,
|
|
23
|
+
selection: s.selection,
|
|
24
|
+
activeCell: s.activeCell
|
|
25
|
+
}, s.limit), l = e, h()), s.onRowsChange(e));
|
|
26
|
+
}, y = (e) => {
|
|
27
|
+
e === null || s === null || !s.onRowsChange || (c = e.stack, l = e.snapshot.rows, s.onRowsChange(e.snapshot.rows), _(e.snapshot), s.onAfterRestore?.(e.snapshot.activeCell), h());
|
|
28
|
+
}, b = () => s === null ? null : {
|
|
29
|
+
rows: s.rows,
|
|
30
|
+
selection: s.selection,
|
|
31
|
+
activeCell: s.activeCell
|
|
32
|
+
};
|
|
33
|
+
return {
|
|
34
|
+
update: g,
|
|
35
|
+
handleRowsChange: v,
|
|
36
|
+
undo: () => {
|
|
37
|
+
let e = b();
|
|
38
|
+
!f() || e === null || y(o(c, e));
|
|
39
|
+
},
|
|
40
|
+
redo: () => {
|
|
41
|
+
let e = b();
|
|
42
|
+
!f() || e === null || y(a(c, e));
|
|
43
|
+
},
|
|
44
|
+
canUndo: p,
|
|
45
|
+
canRedo: m,
|
|
46
|
+
clearHistory: () => {
|
|
47
|
+
c = r(), h();
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
//#endregion
|
|
52
|
+
export { s as createHistoryController };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils/permissions.cjs"),t=require("../model/gridActions.cjs"),n=require("../logic/geometry.cjs"),r=require("../logic/domGuards.cjs");var i=()=>{let i=null,a=e=>{i=e},o=(e,r,a)=>{if(i===null)return;let{uiState:o,rowModel:s,visibleColumns:c,dispatch:l}=i,u=s.getRowCount();if(u===0||c.length===0)return;let d=o.activeCell??{row:0,col:0},f={row:n.clamp(d.row+e,0,u-1),col:n.clamp(d.col+r,0,c.length-1)};if(a){let e=o.selection?.type===`cell`?o.selection.range.start:d;l(t.gridActions.startSelection(e)),l(t.gridActions.updateSelection(f)),l(t.gridActions.endSelection()),l(t.gridActions.activateCell(f));return}l(t.gridActions.startSelection(f)),l(t.gridActions.endSelection()),l(t.gridActions.activateCell(f))};return{update:a,handleKeyDown:async n=>{if(i===null)return;let{uiState:a,rowModel:s,visibleColumns:c,readOnly:l,canEditCell:u,setEditorInitialValue:d,dispatch:f,handleCopy:p,handleCellDoubleClick:m,isWholeGridSelected:h,selectEntireGrid:g,onUndo:_,onRedo:v,onClearSelection:y,enableClearOnDelete:b,onToggleCheckboxCell:x,onToggleGroup:S}=i;if(!r.shouldIgnoreGridKeydown(n.target)&&!a.editingCell){if((n.ctrlKey||n.metaKey)&&n.key.toLowerCase()===`c`){n.preventDefault(),await p();return}if((n.ctrlKey||n.metaKey)&&n.key.toLowerCase()===`a`){if(n.preventDefault(),h){f(t.gridActions.clearSelection()),f(t.gridActions.activateCell(null));return}g();return}if((n.ctrlKey||n.metaKey)&&!n.isComposing){if(n.key.toLowerCase()===`z`){n.preventDefault(),n.shiftKey?v():_();return}if(n.key.toLowerCase()===`y`&&!n.shiftKey){n.preventDefault(),v();return}}if(n.key===`ArrowUp`){n.preventDefault(),o(-1,0,n.shiftKey);return}if(n.key===`ArrowDown`){n.preventDefault(),o(1,0,n.shiftKey);return}if(n.key===`ArrowLeft`){n.preventDefault(),o(0,-1,n.shiftKey);return}if(n.key===`ArrowRight`){n.preventDefault(),o(0,1,n.shiftKey);return}if(n.key===`Tab`){n.preventDefault(),o(0,n.shiftKey?-1:1,!1);return}if(n.key===`Escape`){n.preventDefault(),f(t.gridActions.clearSelection());return}if((n.key===`Delete`||n.key===`Backspace`)&&b){n.preventDefault(),y();return}if((n.key===`Enter`||n.key===` `)&&a.activeCell){let e=s.getGroupRow?.(a.activeCell.row);if(e){n.preventDefault(),S(e.groupKey);return}}if(n.key===`Enter`||n.key===`F2`){n.preventDefault(),a.activeCell&&m(a.activeCell);return}if(r.isPrintableKey(n)&&a.activeCell){let r=s.getRow(a.activeCell.row),i=c[a.activeCell.col];if(!r||!i||!e.isCellEditable({readOnly:l,canEditCell:u},a.activeCell.row,a.activeCell.col,r,i))return;if(i.editor?.type===`checkbox`){n.preventDefault(),n.key===` `&&x(a.activeCell);return}n.preventDefault(),d(n.key),f(t.gridActions.startEdit(a.activeCell))}}}}};exports.createKeyboardController=i;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type GridUiAction } from '../model/gridActions';
|
|
2
|
+
import type { CellCoord, GridColumn, GridUiState, RowModel, SpreadsheetGridProps } from '../model/gridTypes.unbound';
|
|
3
|
+
export type GridKeyboardEventLike = {
|
|
4
|
+
key: string;
|
|
5
|
+
ctrlKey: boolean;
|
|
6
|
+
metaKey: boolean;
|
|
7
|
+
shiftKey: boolean;
|
|
8
|
+
altKey: boolean;
|
|
9
|
+
isComposing: boolean;
|
|
10
|
+
target: EventTarget | null;
|
|
11
|
+
preventDefault: () => void;
|
|
12
|
+
};
|
|
13
|
+
export type KeyboardControllerArgs<T> = {
|
|
14
|
+
uiState: GridUiState;
|
|
15
|
+
rowModel: RowModel<T>;
|
|
16
|
+
visibleColumns: GridColumn<T>[];
|
|
17
|
+
readOnly: boolean;
|
|
18
|
+
canEditCell: SpreadsheetGridProps<T>['canEditCell'];
|
|
19
|
+
setEditorInitialValue: (value: string) => void;
|
|
20
|
+
dispatch: (action: GridUiAction) => void;
|
|
21
|
+
handleCopy: () => Promise<void>;
|
|
22
|
+
handleCellDoubleClick: (cell: CellCoord) => void;
|
|
23
|
+
isWholeGridSelected: boolean;
|
|
24
|
+
selectEntireGrid: () => void;
|
|
25
|
+
onUndo: () => void;
|
|
26
|
+
onRedo: () => void;
|
|
27
|
+
onClearSelection: () => void;
|
|
28
|
+
enableClearOnDelete: boolean;
|
|
29
|
+
onToggleCheckboxCell: (cell: CellCoord) => void;
|
|
30
|
+
onToggleGroup: (groupKey: string) => void;
|
|
31
|
+
};
|
|
32
|
+
export type KeyboardController<T> = {
|
|
33
|
+
update: (args: KeyboardControllerArgs<T>) => void;
|
|
34
|
+
handleKeyDown: (event: GridKeyboardEventLike) => Promise<void>;
|
|
35
|
+
};
|
|
36
|
+
export declare const createKeyboardController: <T>() => KeyboardController<T>;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { isCellEditable as e } from "../utils/permissions.js";
|
|
2
|
+
import { gridActions as t } from "../model/gridActions.js";
|
|
3
|
+
import { clamp as n } from "../logic/geometry.js";
|
|
4
|
+
import { isPrintableKey as r, shouldIgnoreGridKeydown as i } from "../logic/domGuards.js";
|
|
5
|
+
//#region src/controllers/keyboardController.ts
|
|
6
|
+
var a = () => {
|
|
7
|
+
let a = null, o = (e) => {
|
|
8
|
+
a = e;
|
|
9
|
+
}, s = (e, r, i) => {
|
|
10
|
+
if (a === null) return;
|
|
11
|
+
let { uiState: o, rowModel: s, visibleColumns: c, dispatch: l } = a, u = s.getRowCount();
|
|
12
|
+
if (u === 0 || c.length === 0) return;
|
|
13
|
+
let d = o.activeCell ?? {
|
|
14
|
+
row: 0,
|
|
15
|
+
col: 0
|
|
16
|
+
}, f = {
|
|
17
|
+
row: n(d.row + e, 0, u - 1),
|
|
18
|
+
col: n(d.col + r, 0, c.length - 1)
|
|
19
|
+
};
|
|
20
|
+
if (i) {
|
|
21
|
+
let e = o.selection?.type === "cell" ? o.selection.range.start : d;
|
|
22
|
+
l(t.startSelection(e)), l(t.updateSelection(f)), l(t.endSelection()), l(t.activateCell(f));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
l(t.startSelection(f)), l(t.endSelection()), l(t.activateCell(f));
|
|
26
|
+
};
|
|
27
|
+
return {
|
|
28
|
+
update: o,
|
|
29
|
+
handleKeyDown: async (n) => {
|
|
30
|
+
if (a === null) return;
|
|
31
|
+
let { uiState: o, rowModel: c, visibleColumns: l, readOnly: u, canEditCell: d, setEditorInitialValue: f, dispatch: p, handleCopy: m, handleCellDoubleClick: h, isWholeGridSelected: g, selectEntireGrid: _, onUndo: v, onRedo: y, onClearSelection: b, enableClearOnDelete: x, onToggleCheckboxCell: S, onToggleGroup: C } = a;
|
|
32
|
+
if (!i(n.target) && !o.editingCell) {
|
|
33
|
+
if ((n.ctrlKey || n.metaKey) && n.key.toLowerCase() === "c") {
|
|
34
|
+
n.preventDefault(), await m();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if ((n.ctrlKey || n.metaKey) && n.key.toLowerCase() === "a") {
|
|
38
|
+
if (n.preventDefault(), g) {
|
|
39
|
+
p(t.clearSelection()), p(t.activateCell(null));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
_();
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if ((n.ctrlKey || n.metaKey) && !n.isComposing) {
|
|
46
|
+
if (n.key.toLowerCase() === "z") {
|
|
47
|
+
n.preventDefault(), n.shiftKey ? y() : v();
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (n.key.toLowerCase() === "y" && !n.shiftKey) {
|
|
51
|
+
n.preventDefault(), y();
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (n.key === "ArrowUp") {
|
|
56
|
+
n.preventDefault(), s(-1, 0, n.shiftKey);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (n.key === "ArrowDown") {
|
|
60
|
+
n.preventDefault(), s(1, 0, n.shiftKey);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (n.key === "ArrowLeft") {
|
|
64
|
+
n.preventDefault(), s(0, -1, n.shiftKey);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (n.key === "ArrowRight") {
|
|
68
|
+
n.preventDefault(), s(0, 1, n.shiftKey);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (n.key === "Tab") {
|
|
72
|
+
n.preventDefault(), s(0, n.shiftKey ? -1 : 1, !1);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (n.key === "Escape") {
|
|
76
|
+
n.preventDefault(), p(t.clearSelection());
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if ((n.key === "Delete" || n.key === "Backspace") && x) {
|
|
80
|
+
n.preventDefault(), b();
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if ((n.key === "Enter" || n.key === " ") && o.activeCell) {
|
|
84
|
+
let e = c.getGroupRow?.(o.activeCell.row);
|
|
85
|
+
if (e) {
|
|
86
|
+
n.preventDefault(), C(e.groupKey);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (n.key === "Enter" || n.key === "F2") {
|
|
91
|
+
n.preventDefault(), o.activeCell && h(o.activeCell);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (r(n) && o.activeCell) {
|
|
95
|
+
let r = c.getRow(o.activeCell.row), i = l[o.activeCell.col];
|
|
96
|
+
if (!r || !i || !e({
|
|
97
|
+
readOnly: u,
|
|
98
|
+
canEditCell: d
|
|
99
|
+
}, o.activeCell.row, o.activeCell.col, r, i)) return;
|
|
100
|
+
if (i.editor?.type === "checkbox") {
|
|
101
|
+
n.preventDefault(), n.key === " " && S(o.activeCell);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
n.preventDefault(), f(n.key), p(t.startEdit(o.activeCell));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
//#endregion
|
|
111
|
+
export { a as createKeyboardController };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=`button, input, select, textarea`,t=()=>{let t=null;return{startFromPointerDown:(n,{layout:r,onMove:i})=>{if(n.button!==0||r===null||t!==null)return!1;let a=n.target;if(a instanceof Element&&a.closest(e))return!1;n.preventDefault();let o={pointerId:n.pointerId,startX:n.clientX,startY:n.clientY,startTop:r.top,startLeft:r.left},s=e=>{e.pointerId===o.pointerId&&i(o.startTop+(e.clientY-o.startY),o.startLeft+(e.clientX-o.startX))},c=e=>{e.pointerId===o.pointerId&&t?.()};return window.addEventListener(`pointermove`,s),window.addEventListener(`pointerup`,c),window.addEventListener(`pointercancel`,c),t=()=>{window.removeEventListener(`pointermove`,s),window.removeEventListener(`pointerup`,c),window.removeEventListener(`pointercancel`,c),t=null},!0},isActive:()=>t!==null,dispose:()=>{t?.()}}};exports.createPanelHeaderDragController=t;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type PanelHeaderDragPointerDown = {
|
|
2
|
+
button: number;
|
|
3
|
+
pointerId: number;
|
|
4
|
+
clientX: number;
|
|
5
|
+
clientY: number;
|
|
6
|
+
target: EventTarget | null;
|
|
7
|
+
preventDefault: () => void;
|
|
8
|
+
};
|
|
9
|
+
export type PanelHeaderDragStartArgs = {
|
|
10
|
+
layout: {
|
|
11
|
+
top: number;
|
|
12
|
+
left: number;
|
|
13
|
+
} | null;
|
|
14
|
+
onMove: (top: number, left: number) => void;
|
|
15
|
+
};
|
|
16
|
+
export type PanelHeaderDragController = {
|
|
17
|
+
startFromPointerDown: (event: PanelHeaderDragPointerDown, args: PanelHeaderDragStartArgs) => boolean;
|
|
18
|
+
isActive: () => boolean;
|
|
19
|
+
dispose: () => void;
|
|
20
|
+
};
|
|
21
|
+
export declare const createPanelHeaderDragController: () => PanelHeaderDragController;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//#region src/controllers/panelHeaderDragController.ts
|
|
2
|
+
var e = () => {
|
|
3
|
+
let e = null;
|
|
4
|
+
return {
|
|
5
|
+
startFromPointerDown: (t, { layout: n, onMove: r }) => {
|
|
6
|
+
if (t.button !== 0 || n === null || e !== null) return !1;
|
|
7
|
+
let i = t.target;
|
|
8
|
+
if (i instanceof Element && i.closest("button, input, select, textarea")) return !1;
|
|
9
|
+
t.preventDefault();
|
|
10
|
+
let a = {
|
|
11
|
+
pointerId: t.pointerId,
|
|
12
|
+
startX: t.clientX,
|
|
13
|
+
startY: t.clientY,
|
|
14
|
+
startTop: n.top,
|
|
15
|
+
startLeft: n.left
|
|
16
|
+
}, o = (e) => {
|
|
17
|
+
e.pointerId === a.pointerId && r(a.startTop + (e.clientY - a.startY), a.startLeft + (e.clientX - a.startX));
|
|
18
|
+
}, s = (t) => {
|
|
19
|
+
t.pointerId === a.pointerId && e?.();
|
|
20
|
+
};
|
|
21
|
+
return window.addEventListener("pointermove", o), window.addEventListener("pointerup", s), window.addEventListener("pointercancel", s), e = () => {
|
|
22
|
+
window.removeEventListener("pointermove", o), window.removeEventListener("pointerup", s), window.removeEventListener("pointercancel", s), e = null;
|
|
23
|
+
}, !0;
|
|
24
|
+
},
|
|
25
|
+
isActive: () => e !== null,
|
|
26
|
+
dispose: () => {
|
|
27
|
+
e?.();
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
//#endregion
|
|
32
|
+
export { e as createPanelHeaderDragController };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/detailRow.cjs"),t=require("../model/gridActions.cjs"),n=require("../logic/geometry.cjs"),r=require("../logic/autoScrollGeometry.cjs"),i=require("../logic/sorting.cjs"),a=require("../logic/verticalGeometry.cjs");var o=10,s=300,c=()=>{let o=null,s=!1,c=!1,l=null,u=null,d=`mouse`,f=null,p=null,m=!1,h=!1,g=()=>o?.uiState.dragState??null,_=(e,t)=>{if(o===null)return null;let{bodyScrollRef:r,scrollContainerRef:i,leftPaneScrollRef:s,rightPaneScrollRef:c,filteredRowsLength:l,visibleColumnsLength:u,paneLayout:d,leftLeadingWidth:f,centerLeadingWidth:p,rightLeadingWidth:m,headerHeight:h,rowMetrics:g,verticalScaleFactor:_}=o,v=r.current;if(!v||l===0||u===0)return null;let y=v.getBoundingClientRect(),b=a.clientYToRowIndex(v.scrollTop+t-y.top-h,i.current?.scrollTop??0,_,g),x=null,S=s.current;if(x===null&&S&&d.left.entries.length>0){let t=S.getBoundingClientRect();if(e<t.right){let r=e-t.left-f;x=n.findLogicalIndexFromPaneOffset(d.left,r)}}let C=c.current;if(x===null&&C&&d.right.entries.length>0){let t=C.getBoundingClientRect();if(e>=t.left){let r=e-t.left-m;x=n.findLogicalIndexFromPaneOffset(d.right,r)}}if(x===null&&d.center.entries.length>0){let t=v.scrollLeft+e-y.left-p;x=n.findLogicalIndexFromPaneOffset(d.center,Math.max(t,0))}return x===null?null:{row:b,col:n.clamp(x,0,u-1)}},v=(e,n)=>{let r=g();if(o===null||!r||r.type!==`selection`)return;let i=_(e,n);if(i){if(r.selectionKind===`cell`){o.dispatch(t.gridActions.updateSelection(i));return}if(r.selectionKind===`row`){o.dispatch(t.gridActions.updateRowSelection(i.row));return}r.selectionKind===`col`&&o.dispatch(t.gridActions.updateColumnSelection(i.col))}},y=(e,n)=>{if(o===null)return;let{gridRootRef:r,dispatch:i,enableRangeSelection:a,enableRowSelection:s,onGutterRowSelect:c,onCellDoubleClickRef:l}=o;r.current?.focus({preventScroll:!0});let{target:d}=e;if(d.kind===`cell`){let e=u;if(e&&e.cell.row===d.cell.row&&e.cell.col===d.cell.col&&n-e.time<300){u=null,l.current(d.cell);return}u={cell:d.cell,time:n},i(t.gridActions.activateCell(d.cell)),a&&(i(t.gridActions.startSelection(d.cell)),i(t.gridActions.endSelection()));return}if(u=null,d.kind===`row`){if(s){c(d.rowIndex,{shiftKey:!1});return}i(t.gridActions.startRowSelection(d.rowIndex)),i(t.gridActions.endSelection());return}i(t.gridActions.startColumnSelection(d.colIndex)),i(t.gridActions.endSelection())},b=()=>{o!==null&&(c=!1,o.dispatch(t.gridActions.endSelection()),o.dispatch(t.gridActions.endColumnResize()))},x=e=>{o!==null&&(o.pointerClientRef.current={x:e.clientX,y:e.clientY},g()?.type===`columnResize`&&o.dispatch(t.gridActions.updateColumnResize(e.clientX)))},S=e=>{let t=l;t&&(l=null,e.pointerId===t.pointerId&&Math.abs(e.clientX-t.x)<10&&Math.abs(e.clientY-t.y)<10&&y(t,e.timeStamp)),b()},C=()=>{l=null,b()},w=()=>{s||(s=!0,window.addEventListener(`pointermove`,x),window.addEventListener(`pointerup`,S),window.addEventListener(`pointercancel`,C))},T=()=>{s&&(s=!1,window.removeEventListener(`pointermove`,x),window.removeEventListener(`pointerup`,S),window.removeEventListener(`pointercancel`,C))},E=()=>{h=!1,o!==null&&o.autoScrollFrameRef.current!==null&&(cancelAnimationFrame(o.autoScrollFrameRef.current),o.autoScrollFrameRef.current=null)},D=()=>{if(o===null||!h)return;let{scrollContainerRef:e,pointerClientRef:t,autoScrollFrameRef:n}=o,i=e.current,a=t.current;if(!i||!a){n.current=requestAnimationFrame(D);return}if(!m){let e=p;if(e&&!r.hasPointerLeftActivationRadius(e,a,6)){n.current=requestAnimationFrame(D);return}m=!0}let s=i.getBoundingClientRect(),c=r.resolveScrollContentBox({rectLeft:s.left,rectTop:s.top,clientLeft:i.clientLeft,clientTop:i.clientTop,clientWidth:i.clientWidth,clientHeight:i.clientHeight}),l=g(),u=l?.type===`selection`&&l.selectionKind===`col`,d=l?.type===`selection`&&l.selectionKind===`row`,f=u?0:r.resolveAutoScrollAxisDirection(a.y,c.top,c.bottom,24),_=d?0:r.resolveAutoScrollAxisDirection(a.x,c.left,c.right,24),y=r.computeNextScrollPosition(i.scrollTop,f,18,i.scrollHeight-i.clientHeight),b=r.computeNextScrollPosition(i.scrollLeft,_,18,i.scrollWidth-i.clientWidth);(y!==i.scrollTop||b!==i.scrollLeft)&&(i.scrollTo({top:y,left:b,behavior:`auto`}),v(a.x,a.y)),n.current=requestAnimationFrame(D)},O=()=>{let e=g()?.type===`selection`;e&&!h?(h=!0,o!==null&&(o.autoScrollFrameRef.current=requestAnimationFrame(D))):!e&&h&&E()},k=()=>{if(f!==null)return;let e=()=>{if(!c||o===null){f=null;return}let{scrollContainerRef:t,pointerClientRef:n,onGutterRowSelectDrag:i}=o,a=t.current,s=n.current;if(!a||!s){f=requestAnimationFrame(e);return}if(!m){let t=p;if(t&&!r.hasPointerLeftActivationRadius(t,s,6)){f=requestAnimationFrame(e);return}m=!0}let l=a.getBoundingClientRect(),u=r.resolveScrollContentBox({rectLeft:l.left,rectTop:l.top,clientLeft:a.clientLeft,clientTop:a.clientTop,clientWidth:a.clientWidth,clientHeight:a.clientHeight}),d=r.resolveAutoScrollAxisDirection(s.y,u.top,u.bottom,24),h=r.computeNextScrollPosition(a.scrollTop,d,18,a.scrollHeight-a.clientHeight);if(h!==a.scrollTop){a.scrollTo({top:h,left:a.scrollLeft,behavior:`auto`});let e=_(s.x,s.y);e&&i(e.row)}f=requestAnimationFrame(e)};f=requestAnimationFrame(e)},A=(e,t)=>(e.preventDefault(),o===null||e.button!==0?!1:(d=e.pointerType,e.pointerType===`touch`?(l={pointerId:e.pointerId,x:e.clientX,y:e.clientY,target:t},!1):(o.gridRootRef.current?.focus({preventScroll:!0}),o.pointerClientRef.current={x:e.clientX,y:e.clientY},p={x:e.clientX,y:e.clientY},m=!1,!0)));return{update:e=>{o=e,w(),O()},updateSelectionFromPointer:v,handleCellPointerDown:(e,n)=>{!A(n,{kind:`cell`,cell:e})||o===null||(o.dispatch(t.gridActions.activateCell(e)),o.enableRangeSelection&&o.dispatch(t.gridActions.startSelection(e)))},handleCellDoubleClick:e=>{d===`touch`||o===null||o.onCellDoubleClickRef.current(e)},handleCellPointerEnter:(e,n)=>{if(o===null||(o.enableRowHover&&o.setHoveredRowIndex(e.row),!o.enableRangeSelection))return;let r=g();r?.type!==`selection`||r.selectionKind!==`cell`||(o.pointerClientRef.current={x:n.clientX,y:n.clientY},o.dispatch(t.gridActions.updateSelection(e)))},handleNativeDragStart:e=>{e.preventDefault()},handleRowHeaderPointerDown:(e,n)=>{if(!(!A(n,{kind:`row`,rowIndex:e})||o===null)){if(o.enableRowSelection){c=!0,o.onGutterRowSelect(e,{shiftKey:n.shiftKey}),k();return}o.dispatch(t.gridActions.startRowSelection(e))}},handleRowHeaderPointerEnter:(e,n)=>{if(o===null)return;if(o.enableRowHover&&o.setHoveredRowIndex(e),c){o.pointerClientRef.current={x:n.clientX,y:n.clientY},o.onGutterRowSelectDrag(e);return}let r=g();r?.type!==`selection`||r.selectionKind!==`row`||(o.pointerClientRef.current={x:n.clientX,y:n.clientY},o.dispatch(t.gridActions.updateRowSelection(e)))},handleColumnHeaderPointerDown:(n,r)=>{if(!(!A(r,{kind:`col`,colIndex:n})||o===null)){if(r.shiftKey&&o.enableSorting){let r=o.orderedColumns[n];if(r&&!e.isSyntheticColumnKey(r.key)){let e=o.uiState.sort,n=e.find(e=>e.columnKey===r.key)?.direction?`desc`:`asc`,a=i.nextSortEntries(e,r.key,n,!0);o.dispatch(a.length===0?t.gridActions.clearSort():t.gridActions.setSort(a))}return}o.dispatch(t.gridActions.startColumnSelection(n))}},handleColumnHeaderPointerEnter:(e,n)=>{if(o===null)return;o.setHoveredRowIndex(null),o.enableColumnHeaderHover&&o.setHoveredColumnIndex(e);let r=g();r?.type!==`selection`||r.selectionKind!==`col`||(o.pointerClientRef.current={x:n.clientX,y:n.clientY},o.dispatch(t.gridActions.updateColumnSelection(e)))},dispose:()=>{T(),E(),f!==null&&(cancelAnimationFrame(f),f=null)}}};exports.TOUCH_DOUBLE_TAP_MS=s,exports.TOUCH_TAP_SLOP_PX=o,exports.createPointerInteractionsController=c;
|