@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.
Files changed (53) hide show
  1. package/dist/controllers/asyncSelectOptionsSource.cjs +1 -0
  2. package/dist/controllers/asyncSelectOptionsSource.d.ts +32 -0
  3. package/dist/controllers/asyncSelectOptionsSource.js +90 -0
  4. package/dist/controllers/autoHeightMeasurer.cjs +1 -1
  5. package/dist/controllers/autoHeightMeasurer.js +19 -19
  6. package/dist/controllers/clipboardController.cjs +2 -2
  7. package/dist/controllers/clipboardController.js +54 -47
  8. package/dist/controllers/columnAutosizeRunner.cjs +1 -1
  9. package/dist/controllers/columnAutosizeRunner.js +7 -7
  10. package/dist/controllers/filterPopoverController.cjs +1 -1
  11. package/dist/controllers/filterPopoverController.js +7 -7
  12. package/dist/controllers/keyboardController.cjs +1 -1
  13. package/dist/controllers/keyboardController.js +10 -4
  14. package/dist/controllers/pointerInteractionsController.cjs +1 -1
  15. package/dist/controllers/pointerInteractionsController.js +71 -71
  16. package/dist/controllers/selectOptionsCollector.cjs +1 -1
  17. package/dist/controllers/selectOptionsCollector.d.ts +4 -1
  18. package/dist/controllers/selectOptionsCollector.js +7 -7
  19. package/dist/engine/columnCommands.cjs +1 -1
  20. package/dist/engine/columnCommands.js +54 -54
  21. package/dist/engine/filterPopoverCommands.cjs +1 -1
  22. package/dist/engine/filterPopoverCommands.d.ts +5 -2
  23. package/dist/engine/filterPopoverCommands.js +12 -12
  24. package/dist/engine/gridApi.cjs +1 -1
  25. package/dist/engine/gridApi.d.ts +6 -0
  26. package/dist/engine/gridApi.js +75 -56
  27. package/dist/engine/notifiers.cjs +1 -1
  28. package/dist/engine/notifiers.d.ts +3 -1
  29. package/dist/engine/notifiers.js +11 -11
  30. package/dist/engine/rowPipeline.cjs +1 -1
  31. package/dist/engine/rowPipeline.d.ts +13 -2
  32. package/dist/engine/rowPipeline.js +51 -39
  33. package/dist/engine/verticalLayout.cjs +1 -1
  34. package/dist/engine/verticalLayout.d.ts +4 -0
  35. package/dist/engine/verticalLayout.js +40 -28
  36. package/dist/logic/exportCsv.cjs +2 -2
  37. package/dist/logic/exportCsv.d.ts +4 -1
  38. package/dist/logic/exportCsv.js +16 -11
  39. package/dist/logic/exportData.cjs +1 -1
  40. package/dist/logic/exportData.d.ts +3 -1
  41. package/dist/logic/exportData.js +29 -13
  42. package/dist/logic/gridState.cjs +1 -1
  43. package/dist/logic/gridState.d.ts +5 -0
  44. package/dist/logic/gridState.js +10 -7
  45. package/dist/logic/labelRows.cjs +1 -0
  46. package/dist/logic/labelRows.d.ts +45 -0
  47. package/dist/logic/labelRows.js +157 -0
  48. package/dist/logic/verticalGeometry.cjs +1 -1
  49. package/dist/logic/verticalGeometry.d.ts +5 -0
  50. package/dist/logic/verticalGeometry.js +39 -5
  51. package/dist/model/gridTypes.core.d.ts +50 -0
  52. package/dist/model/gridTypes.unbound.d.ts +1 -0
  53. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/valueStore.cjs"),t=require("./selectOptionsCollector.cjs");var n=[],r=new Set,i={status:`loading`,options:n,allValues:r,progress:0},a={columnKey:null,result:t.IDLE_SELECT_OPTIONS_RESULT},o=(e,t)=>{if(!(t in e))return e;let n={};for(let r of Object.keys(e))r!==t&&(n[r]=e[r]);return n},s=e=>e instanceof Error?e.message||e.name:typeof e==`string`?e:String(e),c=(e,n)=>n===null?t.IDLE_SELECT_OPTIONS_RESULT:e.columnKey===n?e.result:i,l=()=>{let t=e.createValueStore(a),c=null,l=null,u=0,d=()=>{l?.abort(),l=null},f=e=>{let{columnKey:a,column:c,fetch:f}=e;if(a===null||c===null||f===null)return;d();let p=++u,m=new AbortController;l=m,t.setSnapshot({columnKey:a,result:i});let h;try{h=Promise.resolve(f({columnKey:a,column:c,columnFilters:o(e.columnFilters,a),globalText:e.globalText,signal:m.signal}))}catch(e){h=Promise.reject(e)}h.then(e=>{if(p!==u||m.signal.aborted)return;l=null;let r=Array.isArray(e?.options)?e.options:n;t.setSnapshot({columnKey:a,result:{status:`ready`,options:r,allValues:new Set(r.map(e=>e.value)),progress:1,truncated:e?.truncated===!0}})},e=>{p!==u||m.signal.aborted||(l=null,t.setSnapshot({columnKey:a,result:{status:`error`,options:n,allValues:r,progress:0,errorMessage:s(e)}}))})};return{update:e=>{let n=c;if(c=e,n===null||n.columnKey!==e.columnKey||n.fetch===null!=(e.fetch===null)){if(e.columnKey===null||e.fetch===null){d(),u+=1,t.getSnapshot()!==a&&t.setSnapshot(a);return}f(e)}},retry:()=>{c&&f(c)},subscribe:t.subscribe,getSnapshot:t.getSnapshot,dispose:()=>{d(),u+=1,c=null}}};exports.LOADING_SELECT_OPTIONS_RESULT=i,exports.createAsyncSelectOptionsSource=l,exports.omitOwnColumnFilter=o,exports.selectAsyncOptionsResult=c;
@@ -0,0 +1,32 @@
1
+ import type { ColumnFilterValue, GetFilterOptionsResult, GridColumn } from '../model/gridTypes.unbound';
2
+ import { type ColumnSelectOptionsResult } from './selectOptionsCollector';
3
+ export type AsyncSelectOptionsFetchParams<T> = {
4
+ columnKey: string;
5
+ column: GridColumn<T>;
6
+ columnFilters: Record<string, ColumnFilterValue>;
7
+ globalText: string;
8
+ signal: AbortSignal;
9
+ };
10
+ export type AsyncSelectOptionsFetch<T> = (params: AsyncSelectOptionsFetchParams<T>) => Promise<GetFilterOptionsResult>;
11
+ export type AsyncSelectOptionsSourceArgs<T> = {
12
+ columnKey: string | null;
13
+ column: GridColumn<T> | null;
14
+ columnFilters: Record<string, ColumnFilterValue>;
15
+ globalText: string;
16
+ fetch: AsyncSelectOptionsFetch<T> | null;
17
+ };
18
+ export type AsyncSelectOptionsSnapshot = {
19
+ columnKey: string | null;
20
+ result: ColumnSelectOptionsResult;
21
+ };
22
+ export type AsyncSelectOptionsSource<T> = {
23
+ update: (args: AsyncSelectOptionsSourceArgs<T>) => void;
24
+ retry: () => void;
25
+ subscribe: (listener: () => void) => () => void;
26
+ getSnapshot: () => AsyncSelectOptionsSnapshot;
27
+ dispose: () => void;
28
+ };
29
+ export declare const LOADING_SELECT_OPTIONS_RESULT: ColumnSelectOptionsResult;
30
+ export declare const omitOwnColumnFilter: (columnFilters: Record<string, ColumnFilterValue>, columnKey: string) => Record<string, ColumnFilterValue>;
31
+ export declare const selectAsyncOptionsResult: (snapshot: AsyncSelectOptionsSnapshot, columnKey: string | null) => ColumnSelectOptionsResult;
32
+ export declare const createAsyncSelectOptionsSource: <T>() => AsyncSelectOptionsSource<T>;
@@ -0,0 +1,90 @@
1
+ import { createValueStore as e } from "../logic/valueStore.js";
2
+ import { IDLE_SELECT_OPTIONS_RESULT as t } from "./selectOptionsCollector.js";
3
+ //#region src/controllers/asyncSelectOptionsSource.ts
4
+ var n = [], r = /* @__PURE__ */ new Set(), i = {
5
+ status: "loading",
6
+ options: n,
7
+ allValues: r,
8
+ progress: 0
9
+ }, a = {
10
+ columnKey: null,
11
+ result: t
12
+ }, o = (e, t) => {
13
+ if (!(t in e)) return e;
14
+ let n = {};
15
+ for (let r of Object.keys(e)) r !== t && (n[r] = e[r]);
16
+ return n;
17
+ }, s = (e) => e instanceof Error ? e.message || e.name : typeof e == "string" ? e : String(e), c = (e, n) => n === null ? t : e.columnKey === n ? e.result : i, l = () => {
18
+ let t = e(a), c = null, l = null, u = 0, d = () => {
19
+ l?.abort(), l = null;
20
+ }, f = (e) => {
21
+ let { columnKey: a, column: c, fetch: f } = e;
22
+ if (a === null || c === null || f === null) return;
23
+ d();
24
+ let p = ++u, m = new AbortController();
25
+ l = m, t.setSnapshot({
26
+ columnKey: a,
27
+ result: i
28
+ });
29
+ let h;
30
+ try {
31
+ h = Promise.resolve(f({
32
+ columnKey: a,
33
+ column: c,
34
+ columnFilters: o(e.columnFilters, a),
35
+ globalText: e.globalText,
36
+ signal: m.signal
37
+ }));
38
+ } catch (e) {
39
+ h = Promise.reject(e);
40
+ }
41
+ h.then((e) => {
42
+ if (p !== u || m.signal.aborted) return;
43
+ l = null;
44
+ let r = Array.isArray(e?.options) ? e.options : n;
45
+ t.setSnapshot({
46
+ columnKey: a,
47
+ result: {
48
+ status: "ready",
49
+ options: r,
50
+ allValues: new Set(r.map((e) => e.value)),
51
+ progress: 1,
52
+ truncated: e?.truncated === !0
53
+ }
54
+ });
55
+ }, (e) => {
56
+ p !== u || m.signal.aborted || (l = null, t.setSnapshot({
57
+ columnKey: a,
58
+ result: {
59
+ status: "error",
60
+ options: n,
61
+ allValues: r,
62
+ progress: 0,
63
+ errorMessage: s(e)
64
+ }
65
+ }));
66
+ });
67
+ };
68
+ return {
69
+ update: (e) => {
70
+ let n = c;
71
+ if (c = e, n === null || n.columnKey !== e.columnKey || n.fetch === null != (e.fetch === null)) {
72
+ if (e.columnKey === null || e.fetch === null) {
73
+ d(), u += 1, t.getSnapshot() !== a && t.setSnapshot(a);
74
+ return;
75
+ }
76
+ f(e);
77
+ }
78
+ },
79
+ retry: () => {
80
+ c && f(c);
81
+ },
82
+ subscribe: t.subscribe,
83
+ getSnapshot: t.getSnapshot,
84
+ dispose: () => {
85
+ d(), u += 1, c = null;
86
+ }
87
+ };
88
+ };
89
+ //#endregion
90
+ export { i as LOADING_SELECT_OPTIONS_RESULT, l as createAsyncSelectOptionsSource, o as omitOwnColumnFilter, c as selectAsyncOptionsResult };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/rowHeightStore.cjs"),t=require("../logic/detailRow.cjs"),n=require("../logic/valueStore.cjs");var r=(e,t)=>e.autoHeightActive===t.autoHeightActive&&e.rowHeightStore===t.rowHeightStore&&e.rowMetrics===t.rowMetrics&&e.rowModel===t.rowModel&&e.virtualRows===t.virtualRows&&e.viewportHeight===t.viewportHeight&&e.version===t.version&&e.nonce===t.nonce,i=()=>{let i=n.createValueStore({version:0,nonce:0}),a=new Map,o=null,s=new Set,c=null,l=()=>{o?.disconnect(),o=null,s.clear()},u=()=>{let e=i.getSnapshot();i.setSnapshot({...e,version:e.version+1})},d=()=>{let e=i.getSnapshot();i.setSnapshot({...e,nonce:e.nonce+1})},f=n=>{let{autoHeightActive:r,rowHeightStore:i,rowMetrics:a,rowModel:c}=n,f=n.scrollContainerRef.current;if(!r||!i){l();return}if(!f)return;let p=f.querySelectorAll(`[data-autoheight-cell]`);if(p.length>0){let n=new Map;p.forEach(e=>{if(t.isInsideDetailCardOf(f,e))return;let r=e.closest(`[data-row-index]`);if(!r)return;let i=Number(r.dataset.rowIndex);if(!Number.isFinite(i))return;let a=Math.ceil(e.getBoundingClientRect().height),o=n.get(i);(o===void 0||a>o)&&n.set(i,a)});let r=!1,o=1/0;if(n.forEach((t,n)=>{let a=c.getRowKey(n)??n;e.setMeasuredRowHeight(i,n,a,t)&&(r=!0,n<o&&(o=n))}),r){let t=f.scrollTop,n=a.rowAtContentY(t),r=t-a.rowTop(n);e.rebuildPrefixFrom(i,o),f.scrollTop=i.prefix[n]+r,u()}}o===null&&(o=new ResizeObserver(d));let m=o,h=new Set;p.forEach(e=>{h.add(e),s.has(e)||(m.observe(e),s.add(e))});let g=[];s.forEach(e=>{h.has(e)||g.push(e)}),g.forEach(e=>{m.unobserve(e),s.delete(e)})};return{update:e=>{c!==null&&r(c,e)||(c=e,f(e))},getSnapshot:i.getSnapshot,subscribe:i.subscribe,measuredHeights:a,dispose:l}};exports.createAutoHeightMeasurer=i;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/valueStore.cjs"),t=require("../logic/rowHeightStore.cjs"),n=require("../logic/detailRow.cjs");var r=(e,t)=>e.autoHeightActive===t.autoHeightActive&&e.rowHeightStore===t.rowHeightStore&&e.rowMetrics===t.rowMetrics&&e.rowModel===t.rowModel&&e.virtualRows===t.virtualRows&&e.viewportHeight===t.viewportHeight&&e.version===t.version&&e.nonce===t.nonce,i=()=>{let i=e.createValueStore({version:0,nonce:0}),a=new Map,o=null,s=new Set,c=null,l=()=>{o?.disconnect(),o=null,s.clear()},u=()=>{let e=i.getSnapshot();i.setSnapshot({...e,version:e.version+1})},d=()=>{let e=i.getSnapshot();i.setSnapshot({...e,nonce:e.nonce+1})},f=e=>{let{autoHeightActive:r,rowHeightStore:i,rowMetrics:a,rowModel:c}=e,f=e.scrollContainerRef.current;if(!r||!i){l();return}if(!f)return;let p=f.querySelectorAll(`[data-autoheight-cell]`);if(p.length>0){let e=new Map;p.forEach(t=>{if(n.isInsideDetailCardOf(f,t))return;let r=t.closest(`[data-row-index]`);if(!r)return;let i=Number(r.dataset.rowIndex);if(!Number.isFinite(i))return;let a=Math.ceil(t.getBoundingClientRect().height),o=e.get(i);(o===void 0||a>o)&&e.set(i,a)});let r=!1,o=1/0;if(e.forEach((e,n)=>{let a=c.getRowKey(n)??n;t.setMeasuredRowHeight(i,n,a,e)&&(r=!0,n<o&&(o=n))}),r){let e=f.scrollTop,n=a.rowAtContentY(e),r=e-a.rowTop(n);t.rebuildPrefixFrom(i,o),f.scrollTop=i.prefix[n]+r,u()}}o===null&&(o=new ResizeObserver(d));let m=o,h=new Set;p.forEach(e=>{h.add(e),s.has(e)||(m.observe(e),s.add(e))});let g=[];s.forEach(e=>{h.has(e)||g.push(e)}),g.forEach(e=>{m.unobserve(e),s.delete(e)})};return{update:e=>{c!==null&&r(c,e)||(c=e,f(e))},getSnapshot:i.getSnapshot,subscribe:i.subscribe,measuredHeights:a,dispose:l}};exports.createAutoHeightMeasurer=i;
@@ -1,9 +1,9 @@
1
- import { rebuildPrefixFrom as e, setMeasuredRowHeight as t } from "../logic/rowHeightStore.js";
2
- import { isInsideDetailCardOf as n } from "../logic/detailRow.js";
3
- import { createValueStore as r } from "../logic/valueStore.js";
1
+ import { createValueStore as e } from "../logic/valueStore.js";
2
+ import { rebuildPrefixFrom as t, setMeasuredRowHeight as n } from "../logic/rowHeightStore.js";
3
+ import { isInsideDetailCardOf as r } from "../logic/detailRow.js";
4
4
  //#region src/controllers/autoHeightMeasurer.ts
5
5
  var i = (e, t) => e.autoHeightActive === t.autoHeightActive && e.rowHeightStore === t.rowHeightStore && e.rowMetrics === t.rowMetrics && e.rowModel === t.rowModel && e.virtualRows === t.virtualRows && e.viewportHeight === t.viewportHeight && e.version === t.version && e.nonce === t.nonce, a = () => {
6
- let a = r({
6
+ let a = e({
7
7
  version: 0,
8
8
  nonce: 0
9
9
  }), o = /* @__PURE__ */ new Map(), s = null, c = /* @__PURE__ */ new Set(), l = null, u = () => {
@@ -20,8 +20,8 @@ var i = (e, t) => e.autoHeightActive === t.autoHeightActive && e.rowHeightStore
20
20
  ...e,
21
21
  nonce: e.nonce + 1
22
22
  });
23
- }, p = (r) => {
24
- let { autoHeightActive: i, rowHeightStore: a, rowMetrics: o, rowModel: l } = r, p = r.scrollContainerRef.current;
23
+ }, p = (e) => {
24
+ let { autoHeightActive: i, rowHeightStore: a, rowMetrics: o, rowModel: l } = e, p = e.scrollContainerRef.current;
25
25
  if (!i || !a) {
26
26
  u();
27
27
  return;
@@ -29,23 +29,23 @@ var i = (e, t) => e.autoHeightActive === t.autoHeightActive && e.rowHeightStore
29
29
  if (!p) return;
30
30
  let m = p.querySelectorAll("[data-autoheight-cell]");
31
31
  if (m.length > 0) {
32
- let r = /* @__PURE__ */ new Map();
33
- m.forEach((e) => {
34
- if (n(p, e)) return;
35
- let t = e.closest("[data-row-index]");
36
- if (!t) return;
37
- let i = Number(t.dataset.rowIndex);
32
+ let e = /* @__PURE__ */ new Map();
33
+ m.forEach((t) => {
34
+ if (r(p, t)) return;
35
+ let n = t.closest("[data-row-index]");
36
+ if (!n) return;
37
+ let i = Number(n.dataset.rowIndex);
38
38
  if (!Number.isFinite(i)) return;
39
- let a = Math.ceil(e.getBoundingClientRect().height), o = r.get(i);
40
- (o === void 0 || a > o) && r.set(i, a);
39
+ let a = Math.ceil(t.getBoundingClientRect().height), o = e.get(i);
40
+ (o === void 0 || a > o) && e.set(i, a);
41
41
  });
42
42
  let i = !1, s = Infinity;
43
- if (r.forEach((e, n) => {
44
- let r = l.getRowKey(n) ?? n;
45
- t(a, n, r, e) && (i = !0, n < s && (s = n));
43
+ if (e.forEach((e, t) => {
44
+ let r = l.getRowKey(t) ?? t;
45
+ n(a, t, r, e) && (i = !0, t < s && (s = t));
46
46
  }), i) {
47
- let t = p.scrollTop, n = o.rowAtContentY(t), r = t - o.rowTop(n);
48
- e(a, s), p.scrollTop = a.prefix[n] + r, d();
47
+ let e = p.scrollTop, n = o.rowAtContentY(e), r = e - o.rowTop(n);
48
+ t(a, s), p.scrollTop = a.prefix[n] + r, d();
49
49
  }
50
50
  }
51
51
  s === null && (s = new ResizeObserver(f));
@@ -1,2 +1,2 @@
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("../utils/clipboard.cjs");var i=(e,t,n)=>{if(t===0||n===0||e?.type!==`cell`)return!1;let{start:r,end:i}=e.range,a=Math.min(r.row,i.row),o=Math.min(r.col,i.col),s=Math.max(r.row,i.row),c=Math.max(r.col,i.col);return a===0&&o===0&&s===t-1&&c===n-1},a=()=>{let a=null,o=e=>{a=e},s=e=>{let{isRowExportable:t,rowModel:n}=e;if(t)return(e,r)=>t(e,{viewRowIndex:r,rowKey:n.getRowKey(r)??r})},c=t=>{let{rowModel:n,visibleColumns:r}=t,i=n.getRowCount();if(i===0||r.length===0)return``;let a=s(t),o=[];for(let t=0;t<i;t+=1){let i=n.getRow(t);if(!i||a&&!a(i,t))continue;let s=r.map(t=>{let n=e.getCellValue(i,t);return t.formatClipboardValue?t.formatClipboardValue(n,i):String(n??``)});o.push(s.join(` `))}return o.join(`
2
- `)};return{update:o,handleCopy:async()=>{if(a===null)return;let e=a,{rowModel:t,visibleColumns:n,uiState:o}=e,l=i(o.selection,t.getRowCount(),n.length)?c(e):r.serializeSelectionToTsv(t.getRow,t.getRowCount(),n,o.selection,s(e));l&&await r.writeTextToClipboard(l)},handlePaste:i=>{if(a===null)return;let{rows:o,rowModel:s,visibleColumns:c,uiState:l,readOnly:u,canEditCell:d,createRow:f,createOverflowColumn:p,onRowsChange:m,onColumnsChange:h,applyServerSideCellEdits:g,dispatch:_}=a;if(u||!m&&!g||!l.activeCell)return;let v=i.clipboardData?.getData(`text/plain`)??``;if(!v)return;i.preventDefault();let y=r.parseClipboardText(v);if(y.length===0)return;let b=y.reduce((e,t)=>Math.max(e,t.length),0);if(b===0)return;let x=l.activeCell.row,S=l.activeCell.col;if(g){let i=r.buildClipboardCellEdits(e=>s.getRow(e),c,y,x,S,(t,n,r,i)=>e.isCellEditable({readOnly:u,canEditCell:d},t,n,r,i));i.length>0&&g(i);let a=n.clamp(l.activeCell.row+Math.max(y.length-1,0),0,Math.max(s.getRowCount()-1,0)),o=n.clamp(l.activeCell.col+Math.max(b-1,0),0,Math.max(c.length-1,0));_(t.gridActions.startSelection(l.activeCell)),_(t.gridActions.updateSelection({row:a,col:o})),_(t.gridActions.endSelection()),_(t.gridActions.activateCell(l.activeCell));return}if(!m)return;let C=s.getSourceIndex(x);if(C===void 0)return;let w=l.activeCell.col,T=[...o],E=[...c],D=s.getRowCount(),O=T.length,k=e=>e<D?s.getSourceIndex(e):O+(e-D),A=C+y.length;if(A>T.length&&f)for(;T.length<A;)T.push(f());let j=w+b;if(j>E.length&&h&&p){for(;E.length<j;)E.push(p(E.length));h(E)}let M=r.applyClipboardMatrixToRows(T,k,E,y,x,w,(t,n,r,i)=>e.isCellEditable({readOnly:u,canEditCell:d},t,n,r,i)),N=n.clamp(l.activeCell.row+Math.max(y.length-1,0),0,Math.max(Math.max(s.getRowCount()-1,0),x+y.length-1)),P=n.clamp(l.activeCell.col+Math.max((y[0]?.length??1)-1,0),0,Math.max(Math.max(E.length-1,0),w+b-1));m(M),_(t.gridActions.startSelection(l.activeCell)),_(t.gridActions.updateSelection({row:N,col:P})),_(t.gridActions.endSelection()),_(t.gridActions.activateCell(l.activeCell))}}};exports.computeIsWholeGridSelected=i,exports.createClipboardController=a;
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("../utils/clipboard.cjs"),i=require("../logic/labelRows.cjs");var a=(e,t,n)=>{if(t===0||n===0||e?.type!==`cell`)return!1;let{start:r,end:i}=e.range,a=Math.min(r.row,i.row),o=Math.min(r.col,i.col),s=Math.max(r.row,i.row),c=Math.max(r.col,i.col);return a===0&&o===0&&s===t-1&&c===n-1},o=()=>{let o=null,s=e=>{o=e},c=e=>{let{isRowExportable:t,rowModel:n}=e;if(t)return(e,r)=>t(e,{viewRowIndex:r,rowKey:n.getRowKey(r)??r})},l=t=>{let{rowModel:n,visibleColumns:r}=t,i=n.getRowCount();if(i===0||r.length===0)return``;let a=c(t),o=[];for(let t=0;t<i;t+=1){let i=n.getRow(t);if(!i||a&&!a(i,t))continue;let s=r.map(t=>{let n=e.getCellValue(i,t);return t.formatClipboardValue?t.formatClipboardValue(n,i):String(n??``)});o.push(s.join(` `))}return o.join(`
2
+ `)};return{update:s,handleCopy:async()=>{if(o===null)return;let e=o,{rowModel:t,visibleColumns:n,uiState:i}=e,s=a(i.selection,t.getRowCount(),n.length)?l(e):r.serializeSelectionToTsv(t.getRow,t.getRowCount(),n,i.selection,c(e));s&&await r.writeTextToClipboard(s)},handlePaste:a=>{if(o===null)return;let{rows:s,rowModel:c,visibleColumns:l,uiState:u,readOnly:d,canEditCell:f,createRow:p,createOverflowColumn:m,onRowsChange:h,onColumnsChange:g,applyServerSideCellEdits:_,dispatch:v}=o;if(d||!h&&!_||!u.activeCell)return;let y=a.clipboardData?.getData(`text/plain`)??``;if(!y)return;a.preventDefault();let b=r.parseClipboardText(y);if(b.length===0)return;let x=b.reduce((e,t)=>Math.max(e,t.length),0);if(x===0)return;let S=u.activeCell.row,C=u.activeCell.col,w=c.getLabelRow===void 0?null:i.resolvePasteTargetViewIndexes(c,S,b.length),T=e=>w?w[e-S]:e,E=w?w[w.length-1]:u.activeCell.row+Math.max(b.length-1,0);if(_){let i=r.buildClipboardCellEdits(e=>c.getRow(T(e)),l,b,S,C,(t,n,r,i)=>e.isCellEditable({readOnly:d,canEditCell:f},T(t),n,r,i)).map(e=>({...e,viewIndex:T(e.viewIndex)}));i.length>0&&_(i);let a=n.clamp(E,0,Math.max(c.getRowCount()-1,0)),o=n.clamp(u.activeCell.col+Math.max(x-1,0),0,Math.max(l.length-1,0));v(t.gridActions.startSelection(u.activeCell)),v(t.gridActions.updateSelection({row:a,col:o})),v(t.gridActions.endSelection()),v(t.gridActions.activateCell(u.activeCell));return}if(!h)return;let D=c.getSourceIndex(S);if(D===void 0)return;let O=u.activeCell.col,k=[...s],A=[...l],j=c.getRowCount(),M=k.length,N=e=>{let t=T(e);return t<j?c.getSourceIndex(t):M+(t-j)},P=Math.max(E+1-j,0),F=w?k.length+P:D+b.length;if(F>k.length&&p)for(;k.length<F;)k.push(p());let I=O+x;if(I>A.length&&g&&m){for(;A.length<I;)A.push(m(A.length));g(A)}let L=r.applyClipboardMatrixToRows(k,N,A,b,S,O,(t,n,r,i)=>e.isCellEditable({readOnly:d,canEditCell:f},t,n,r,i)),R=n.clamp(E,0,Math.max(Math.max(c.getRowCount()-1,0),E)),z=n.clamp(u.activeCell.col+Math.max((b[0]?.length??1)-1,0),0,Math.max(Math.max(A.length-1,0),O+x-1));h(L),v(t.gridActions.startSelection(u.activeCell)),v(t.gridActions.updateSelection({row:R,col:z})),v(t.gridActions.endSelection()),v(t.gridActions.activateCell(u.activeCell))}}};exports.computeIsWholeGridSelected=a,exports.createClipboardController=o;
@@ -2,24 +2,25 @@ import { getCellValue as e, isCellEditable as t } from "../utils/permissions.js"
2
2
  import { gridActions as n } from "../model/gridActions.js";
3
3
  import { clamp as r } from "../logic/geometry.js";
4
4
  import { applyClipboardMatrixToRows as i, buildClipboardCellEdits as a, parseClipboardText as o, serializeSelectionToTsv as s, writeTextToClipboard as c } from "../utils/clipboard.js";
5
+ import { resolvePasteTargetViewIndexes as l } from "../logic/labelRows.js";
5
6
  //#region src/controllers/clipboardController.ts
6
- var l = (e, t, n) => {
7
+ var u = (e, t, n) => {
7
8
  if (t === 0 || n === 0 || e?.type !== "cell") return !1;
8
9
  let { start: r, end: i } = e.range, a = Math.min(r.row, i.row), o = Math.min(r.col, i.col), s = Math.max(r.row, i.row), c = Math.max(r.col, i.col);
9
10
  return a === 0 && o === 0 && s === t - 1 && c === n - 1;
10
- }, u = () => {
11
- let u = null, d = (e) => {
12
- u = e;
13
- }, f = (e) => {
11
+ }, d = () => {
12
+ let d = null, f = (e) => {
13
+ d = e;
14
+ }, p = (e) => {
14
15
  let { isRowExportable: t, rowModel: n } = e;
15
16
  if (t) return (e, r) => t(e, {
16
17
  viewRowIndex: r,
17
18
  rowKey: n.getRowKey(r) ?? r
18
19
  });
19
- }, p = (t) => {
20
+ }, m = (t) => {
20
21
  let { rowModel: n, visibleColumns: r } = t, i = n.getRowCount();
21
22
  if (i === 0 || r.length === 0) return "";
22
- let a = f(t), o = [];
23
+ let a = p(t), o = [];
23
24
  for (let t = 0; t < i; t += 1) {
24
25
  let i = n.getRow(t);
25
26
  if (!i || a && !a(i, t)) continue;
@@ -32,57 +33,63 @@ var l = (e, t, n) => {
32
33
  return o.join("\n");
33
34
  };
34
35
  return {
35
- update: d,
36
+ update: f,
36
37
  handleCopy: async () => {
37
- if (u === null) return;
38
- let e = u, { rowModel: t, visibleColumns: n, uiState: r } = e, i = l(r.selection, t.getRowCount(), n.length) ? p(e) : s(t.getRow, t.getRowCount(), n, r.selection, f(e));
38
+ if (d === null) return;
39
+ let e = d, { rowModel: t, visibleColumns: n, uiState: r } = e, i = u(r.selection, t.getRowCount(), n.length) ? m(e) : s(t.getRow, t.getRowCount(), n, r.selection, p(e));
39
40
  i && await c(i);
40
41
  },
41
42
  handlePaste: (e) => {
42
- if (u === null) return;
43
- let { rows: s, rowModel: c, visibleColumns: l, uiState: d, readOnly: f, canEditCell: p, createRow: m, createOverflowColumn: h, onRowsChange: g, onColumnsChange: _, applyServerSideCellEdits: v, dispatch: y } = u;
44
- if (f || !g && !v || !d.activeCell) return;
45
- let b = e.clipboardData?.getData("text/plain") ?? "";
46
- if (!b) return;
43
+ if (d === null) return;
44
+ let { rows: s, rowModel: c, visibleColumns: u, uiState: f, readOnly: p, canEditCell: m, createRow: h, createOverflowColumn: g, onRowsChange: _, onColumnsChange: v, applyServerSideCellEdits: y, dispatch: b } = d;
45
+ if (p || !_ && !y || !f.activeCell) return;
46
+ let x = e.clipboardData?.getData("text/plain") ?? "";
47
+ if (!x) return;
47
48
  e.preventDefault();
48
- let x = o(b);
49
- if (x.length === 0) return;
50
- let S = x.reduce((e, t) => Math.max(e, t.length), 0);
51
- if (S === 0) return;
52
- let C = d.activeCell.row, w = d.activeCell.col;
53
- if (v) {
54
- let e = a((e) => c.getRow(e), l, x, C, w, (e, n, r, i) => t({
55
- readOnly: f,
56
- canEditCell: p
57
- }, e, n, r, i));
58
- e.length > 0 && v(e);
59
- let i = r(d.activeCell.row + Math.max(x.length - 1, 0), 0, Math.max(c.getRowCount() - 1, 0)), o = r(d.activeCell.col + Math.max(S - 1, 0), 0, Math.max(l.length - 1, 0));
60
- y(n.startSelection(d.activeCell)), y(n.updateSelection({
49
+ let S = o(x);
50
+ if (S.length === 0) return;
51
+ let C = S.reduce((e, t) => Math.max(e, t.length), 0);
52
+ if (C === 0) return;
53
+ let w = f.activeCell.row, T = f.activeCell.col, E = c.getLabelRow === void 0 ? null : l(c, w, S.length), D = (e) => E ? E[e - w] : e, O = E ? E[E.length - 1] : f.activeCell.row + Math.max(S.length - 1, 0);
54
+ if (y) {
55
+ let e = a((e) => c.getRow(D(e)), u, S, w, T, (e, n, r, i) => t({
56
+ readOnly: p,
57
+ canEditCell: m
58
+ }, D(e), n, r, i)).map((e) => ({
59
+ ...e,
60
+ viewIndex: D(e.viewIndex)
61
+ }));
62
+ e.length > 0 && y(e);
63
+ let i = r(O, 0, Math.max(c.getRowCount() - 1, 0)), o = r(f.activeCell.col + Math.max(C - 1, 0), 0, Math.max(u.length - 1, 0));
64
+ b(n.startSelection(f.activeCell)), b(n.updateSelection({
61
65
  row: i,
62
66
  col: o
63
- })), y(n.endSelection()), y(n.activateCell(d.activeCell));
67
+ })), b(n.endSelection()), b(n.activateCell(f.activeCell));
64
68
  return;
65
69
  }
66
- if (!g) return;
67
- let T = c.getSourceIndex(C);
68
- if (T === void 0) return;
69
- let E = d.activeCell.col, D = [...s], O = [...l], k = c.getRowCount(), A = D.length, j = (e) => e < k ? c.getSourceIndex(e) : A + (e - k), M = T + x.length;
70
- if (M > D.length && m) for (; D.length < M;) D.push(m());
71
- let N = E + S;
72
- if (N > O.length && _ && h) {
73
- for (; O.length < N;) O.push(h(O.length));
74
- _(O);
70
+ if (!_) return;
71
+ let k = c.getSourceIndex(w);
72
+ if (k === void 0) return;
73
+ let A = f.activeCell.col, j = [...s], M = [...u], N = c.getRowCount(), P = j.length, F = (e) => {
74
+ let t = D(e);
75
+ return t < N ? c.getSourceIndex(t) : P + (t - N);
76
+ }, I = Math.max(O + 1 - N, 0), L = E ? j.length + I : k + S.length;
77
+ if (L > j.length && h) for (; j.length < L;) j.push(h());
78
+ let R = A + C;
79
+ if (R > M.length && v && g) {
80
+ for (; M.length < R;) M.push(g(M.length));
81
+ v(M);
75
82
  }
76
- let P = i(D, j, O, x, C, E, (e, n, r, i) => t({
77
- readOnly: f,
78
- canEditCell: p
79
- }, e, n, r, i)), F = r(d.activeCell.row + Math.max(x.length - 1, 0), 0, Math.max(Math.max(c.getRowCount() - 1, 0), C + x.length - 1)), I = r(d.activeCell.col + Math.max((x[0]?.length ?? 1) - 1, 0), 0, Math.max(Math.max(O.length - 1, 0), E + S - 1));
80
- g(P), y(n.startSelection(d.activeCell)), y(n.updateSelection({
81
- row: F,
82
- col: I
83
- })), y(n.endSelection()), y(n.activateCell(d.activeCell));
83
+ let z = i(j, F, M, S, w, A, (e, n, r, i) => t({
84
+ readOnly: p,
85
+ canEditCell: m
86
+ }, e, n, r, i)), B = r(O, 0, Math.max(Math.max(c.getRowCount() - 1, 0), O)), V = r(f.activeCell.col + Math.max((S[0]?.length ?? 1) - 1, 0), 0, Math.max(Math.max(M.length - 1, 0), A + C - 1));
87
+ _(z), b(n.startSelection(f.activeCell)), b(n.updateSelection({
88
+ row: B,
89
+ col: V
90
+ })), b(n.endSelection()), b(n.activateCell(f.activeCell));
84
91
  }
85
92
  };
86
93
  };
87
94
  //#endregion
88
- export { l as computeIsWholeGridSelected, u as createClipboardController };
95
+ export { u as computeIsWholeGridSelected, d as createClipboardController };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/valueStore.cjs"),t=require("../model/gridActions.cjs"),n=require("../logic/columnAutosize.cjs"),r=require("../logic/chunkedLoop.cjs"),i=require("../logic/autoSizeOnData.cjs");var a=180,o=()=>{let i=null,o=e.createValueStore(!1),s=0,c=null,l=()=>{c!==null&&(clearTimeout(c),c=null)};return{update:e=>{i=e},runAutosize:async e=>{if(i===null||e.length===0||!n.canMeasureAutosize())return;let{rowModel:u,gridRootRef:d,columnWidths:f,dispatch:p}=i,m=s+=1;l();let h=u.getRowCount(),g=d.current,_=n.createColumnWidthAccumulator(e);c=setTimeout(()=>{s===m&&o.setSnapshot(!0)},a);try{if(!await r.runChunked(h,e=>{let t=u.getRow(e);t&&_.collect(t)},{isCancelled:()=>s!==m||i?.rowModel!==u}))return;let e=_.finalize({gridRoot:g,currentWidths:f});Object.keys(e).length>0&&p(t.gridActions.syncColumnWidths(e))}finally{s===m&&(l(),o.setSnapshot(!1))}},subscribe:o.subscribe,getSnapshot:o.getSnapshot,dispose:()=>{s+=1,l()}}},s=()=>{let e=null,t=!1;return{update:n=>{if(e!==null&&e.mode===n.mode&&e.isServerSide===n.isServerSide&&e.rows===n.rows&&e.runAutosize===n.runAutosize){e=n;return}e=n;let{shouldRun:r,nextHasAutoSizedOnMount:a}=i.resolveAutoSizeOnData({mode:n.mode,isServerSide:n.isServerSide,rowCount:n.rows.length,hasAutoSizedOnMount:t});t=a,r&&n.runAutosize(n.visibleColumns)}}};exports.createAutoSizeOnDataTrigger=s,exports.createColumnAutosizeRunner=o;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/valueStore.cjs"),t=require("../logic/chunkedLoop.cjs"),n=require("../model/gridActions.cjs"),r=require("../logic/columnAutosize.cjs"),i=require("../logic/autoSizeOnData.cjs");var a=180,o=()=>{let i=null,o=e.createValueStore(!1),s=0,c=null,l=()=>{c!==null&&(clearTimeout(c),c=null)};return{update:e=>{i=e},runAutosize:async e=>{if(i===null||e.length===0||!r.canMeasureAutosize())return;let{rowModel:u,gridRootRef:d,columnWidths:f,dispatch:p}=i,m=s+=1;l();let h=u.getRowCount(),g=d.current,_=r.createColumnWidthAccumulator(e);c=setTimeout(()=>{s===m&&o.setSnapshot(!0)},a);try{if(!await t.runChunked(h,e=>{let t=u.getRow(e);t&&_.collect(t)},{isCancelled:()=>s!==m||i?.rowModel!==u}))return;let e=_.finalize({gridRoot:g,currentWidths:f});Object.keys(e).length>0&&p(n.gridActions.syncColumnWidths(e))}finally{s===m&&(l(),o.setSnapshot(!1))}},subscribe:o.subscribe,getSnapshot:o.getSnapshot,dispose:()=>{s+=1,l()}}},s=()=>{let e=null,t=!1;return{update:n=>{if(e!==null&&e.mode===n.mode&&e.isServerSide===n.isServerSide&&e.rows===n.rows&&e.runAutosize===n.runAutosize){e=n;return}e=n;let{shouldRun:r,nextHasAutoSizedOnMount:a}=i.resolveAutoSizeOnData({mode:n.mode,isServerSide:n.isServerSide,rowCount:n.rows.length,hasAutoSizedOnMount:t});t=a,r&&n.runAutosize(n.visibleColumns)}}};exports.createAutoSizeOnDataTrigger=s,exports.createColumnAutosizeRunner=o;
@@ -1,7 +1,7 @@
1
1
  import { createValueStore as e } from "../logic/valueStore.js";
2
- import { gridActions as t } from "../model/gridActions.js";
3
- import { canMeasureAutosize as n, createColumnWidthAccumulator as r } from "../logic/columnAutosize.js";
4
- import { runChunked as i } from "../logic/chunkedLoop.js";
2
+ import { runChunked as t } from "../logic/chunkedLoop.js";
3
+ import { gridActions as n } from "../model/gridActions.js";
4
+ import { canMeasureAutosize as r, createColumnWidthAccumulator as i } from "../logic/columnAutosize.js";
5
5
  import { resolveAutoSizeOnData as a } from "../logic/autoSizeOnData.js";
6
6
  //#region src/controllers/columnAutosizeRunner.ts
7
7
  var o = 180, s = () => {
@@ -13,15 +13,15 @@ var o = 180, s = () => {
13
13
  a = e;
14
14
  },
15
15
  runAutosize: async (e) => {
16
- if (a === null || e.length === 0 || !n()) return;
16
+ if (a === null || e.length === 0 || !r()) return;
17
17
  let { rowModel: d, gridRootRef: f, columnWidths: p, dispatch: m } = a, h = c += 1;
18
18
  u();
19
- let g = d.getRowCount(), _ = f.current, v = r(e);
19
+ let g = d.getRowCount(), _ = f.current, v = i(e);
20
20
  l = setTimeout(() => {
21
21
  c === h && s.setSnapshot(!0);
22
22
  }, o);
23
23
  try {
24
- if (!await i(g, (e) => {
24
+ if (!await t(g, (e) => {
25
25
  let t = d.getRow(e);
26
26
  t && v.collect(t);
27
27
  }, { isCancelled: () => c !== h || a?.rowModel !== d })) return;
@@ -29,7 +29,7 @@ var o = 180, s = () => {
29
29
  gridRoot: _,
30
30
  currentWidths: p
31
31
  });
32
- Object.keys(e).length > 0 && m(t.syncColumnWidths(e));
32
+ Object.keys(e).length > 0 && m(n.syncColumnWidths(e));
33
33
  } finally {
34
34
  c === h && (u(), s.setSnapshot(!1));
35
35
  }
@@ -1 +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;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/valueStore.cjs"),t=require("../logic/detailRow.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,_=e.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=e=>{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===e.key&&!t.isInsideDetailCardOf(u,n))??null:null;let f=e.filterType===`auto`&&c?c(e):e.filterType??`text`,p=l[e.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:e.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;
@@ -1,5 +1,5 @@
1
- import { isInsideDetailCardOf as e } from "../logic/detailRow.js";
2
- import { createValueStore as t } from "../logic/valueStore.js";
1
+ import { createValueStore as e } from "../logic/valueStore.js";
2
+ import { isInsideDetailCardOf as t } from "../logic/detailRow.js";
3
3
  import { blurForPopover as n, createPopoverWindowBindings as r, restoreGridFocus as i } from "./popoverSupport.js";
4
4
  import { columnFilterValueToDraftText as a, isDateSetColumnFilterValue as o, isNumberColumnFilterValue as s, isNumberSetColumnFilterValue as c, isTextSetColumnFilterValue as l } from "../logic/filtering.js";
5
5
  import { numberFilterValueToConditionDraft as u, parsedNumberFilterToConditionDraft as d } from "../logic/numberFilterCondition.js";
@@ -16,7 +16,7 @@ var g = 240, _ = 8, v = 8, y = 230, b = 340, x = 480, S = (e, t) => {
16
16
  filterType: t.filterType
17
17
  };
18
18
  }, C = () => {
19
- let C = null, w = t({
19
+ let C = null, w = e({
20
20
  state: null,
21
21
  layout: null
22
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) => {
@@ -61,17 +61,17 @@ var g = 240, _ = 8, v = 8, y = 230, b = 340, x = 480, S = (e, t) => {
61
61
  onScroll: R,
62
62
  isInside: (e) => !h(e, T.current),
63
63
  onOutsidePointerDown: V
64
- }), U = (t) => {
64
+ }), U = (e) => {
65
65
  if (C === null || !C.enableColumnFilter) return;
66
66
  let { gridRootRef: r, resolveColumnFilterType: i, columnFilterValues: m } = C;
67
67
  n(r.current);
68
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;
69
+ O = h && g ? Array.from(g).find((n) => n.dataset.ssgColKey === e.key && !t(h, n)) ?? null : null;
70
+ let _ = e.filterType === "auto" && i ? i(e) : e.filterType ?? "text", v = m[e.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
71
  w.setSnapshot({
72
72
  ...w.getSnapshot(),
73
73
  state: {
74
- columnKey: t.key,
74
+ columnKey: e.key,
75
75
  filterType: _,
76
76
  draftValue: a(v),
77
77
  numberDraft: y,
@@ -1 +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;
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=n.clamp(d.row+e,0,u-1);if(e!==0&&s.getLabelRow){let t=e>0?1:-1,n=f;for(;n>=0&&n<u&&s.getLabelRow(n);)n+=t;f=n>=0&&n<u?n:d.row}let p={row:f,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(p)),l(t.gridActions.endSelection()),l(t.gridActions.activateCell(p));return}l(t.gridActions.startSelection(p)),l(t.gridActions.endSelection()),l(t.gridActions.activateCell(p))};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;
@@ -13,16 +13,22 @@ var a = () => {
13
13
  let d = o.activeCell ?? {
14
14
  row: 0,
15
15
  col: 0
16
- }, f = {
17
- row: n(d.row + e, 0, u - 1),
16
+ }, f = n(d.row + e, 0, u - 1);
17
+ if (e !== 0 && s.getLabelRow) {
18
+ let t = e > 0 ? 1 : -1, n = f;
19
+ for (; n >= 0 && n < u && s.getLabelRow(n);) n += t;
20
+ f = n >= 0 && n < u ? n : d.row;
21
+ }
22
+ let p = {
23
+ row: f,
18
24
  col: n(d.col + r, 0, c.length - 1)
19
25
  };
20
26
  if (i) {
21
27
  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));
28
+ l(t.startSelection(e)), l(t.updateSelection(p)), l(t.endSelection()), l(t.activateCell(p));
23
29
  return;
24
30
  }
25
- l(t.startSelection(f)), l(t.endSelection()), l(t.activateCell(f));
31
+ l(t.startSelection(p)), l(t.endSelection()), l(t.activateCell(p));
26
32
  };
27
33
  return {
28
34
  update: o,
@@ -1 +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;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/sorting.cjs"),t=require("../logic/detailRow.cjs"),n=require("../model/gridActions.cjs"),r=require("../logic/geometry.cjs"),i=require("../logic/autoScrollGeometry.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:n,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=n.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 n=e-t.left-f;x=r.findLogicalIndexFromPaneOffset(d.left,n)}}let C=c.current;if(x===null&&C&&d.right.entries.length>0){let t=C.getBoundingClientRect();if(e>=t.left){let n=e-t.left-m;x=r.findLogicalIndexFromPaneOffset(d.right,n)}}if(x===null&&d.center.entries.length>0){let t=v.scrollLeft+e-y.left-p;x=r.findLogicalIndexFromPaneOffset(d.center,Math.max(t,0))}return x===null?null:{row:b,col:r.clamp(x,0,u-1)}},v=(e,t)=>{let r=g();if(o===null||!r||r.type!==`selection`)return;let i=_(e,t);if(i){if(r.selectionKind===`cell`){o.dispatch(n.gridActions.updateSelection(i));return}if(r.selectionKind===`row`){o.dispatch(n.gridActions.updateRowSelection(i.row));return}r.selectionKind===`col`&&o.dispatch(n.gridActions.updateColumnSelection(i.col))}},y=(e,t)=>{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&&t-e.time<300){u=null,l.current(d.cell);return}u={cell:d.cell,time:t},i(n.gridActions.activateCell(d.cell)),a&&(i(n.gridActions.startSelection(d.cell)),i(n.gridActions.endSelection()));return}if(u=null,d.kind===`row`){if(s){c(d.rowIndex,{shiftKey:!1});return}i(n.gridActions.startRowSelection(d.rowIndex)),i(n.gridActions.endSelection());return}i(n.gridActions.startColumnSelection(d.colIndex)),i(n.gridActions.endSelection())},b=()=>{o!==null&&(c=!1,o.dispatch(n.gridActions.endSelection()),o.dispatch(n.gridActions.endColumnResize()))},x=e=>{o!==null&&(o.pointerClientRef.current={x:e.clientX,y:e.clientY},g()?.type===`columnResize`&&o.dispatch(n.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,r=e.current,a=t.current;if(!r||!a){n.current=requestAnimationFrame(D);return}if(!m){let e=p;if(e&&!i.hasPointerLeftActivationRadius(e,a,6)){n.current=requestAnimationFrame(D);return}m=!0}let s=r.getBoundingClientRect(),c=i.resolveScrollContentBox({rectLeft:s.left,rectTop:s.top,clientLeft:r.clientLeft,clientTop:r.clientTop,clientWidth:r.clientWidth,clientHeight:r.clientHeight}),l=g(),u=l?.type===`selection`&&l.selectionKind===`col`,d=l?.type===`selection`&&l.selectionKind===`row`,f=u?0:i.resolveAutoScrollAxisDirection(a.y,c.top,c.bottom,24),_=d?0:i.resolveAutoScrollAxisDirection(a.x,c.left,c.right,24),y=i.computeNextScrollPosition(r.scrollTop,f,18,r.scrollHeight-r.clientHeight),b=i.computeNextScrollPosition(r.scrollLeft,_,18,r.scrollWidth-r.clientWidth);(y!==r.scrollTop||b!==r.scrollLeft)&&(r.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:r}=o,a=t.current,s=n.current;if(!a||!s){f=requestAnimationFrame(e);return}if(!m){let t=p;if(t&&!i.hasPointerLeftActivationRadius(t,s,6)){f=requestAnimationFrame(e);return}m=!0}let l=a.getBoundingClientRect(),u=i.resolveScrollContentBox({rectLeft:l.left,rectTop:l.top,clientLeft:a.clientLeft,clientTop:a.clientTop,clientWidth:a.clientWidth,clientHeight:a.clientHeight}),d=i.resolveAutoScrollAxisDirection(s.y,u.top,u.bottom,24),h=i.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&&r(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,t)=>{!A(t,{kind:`cell`,cell:e})||o===null||(o.dispatch(n.gridActions.activateCell(e)),o.enableRangeSelection&&o.dispatch(n.gridActions.startSelection(e)))},handleCellDoubleClick:e=>{d===`touch`||o===null||o.onCellDoubleClickRef.current(e)},handleCellPointerEnter:(e,t)=>{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:t.clientX,y:t.clientY},o.dispatch(n.gridActions.updateSelection(e)))},handleNativeDragStart:e=>{e.preventDefault()},handleRowHeaderPointerDown:(e,t)=>{if(!(!A(t,{kind:`row`,rowIndex:e})||o===null)){if(o.enableRowSelection){c=!0,o.onGutterRowSelect(e,{shiftKey:t.shiftKey}),k();return}o.dispatch(n.gridActions.startRowSelection(e))}},handleRowHeaderPointerEnter:(e,t)=>{if(o===null)return;if(o.enableRowHover&&o.setHoveredRowIndex(e),c){o.pointerClientRef.current={x:t.clientX,y:t.clientY},o.onGutterRowSelectDrag(e);return}let r=g();r?.type!==`selection`||r.selectionKind!==`row`||(o.pointerClientRef.current={x:t.clientX,y:t.clientY},o.dispatch(n.gridActions.updateRowSelection(e)))},handleColumnHeaderPointerDown:(r,i)=>{if(!(!A(i,{kind:`col`,colIndex:r})||o===null)){if(i.shiftKey&&o.enableSorting){let i=o.orderedColumns[r];if(i&&!t.isSyntheticColumnKey(i.key)){let t=o.uiState.sort,r=t.find(e=>e.columnKey===i.key)?.direction?`desc`:`asc`,a=e.nextSortEntries(t,i.key,r,!0);o.dispatch(a.length===0?n.gridActions.clearSort():n.gridActions.setSort(a))}return}o.dispatch(n.gridActions.startColumnSelection(r))}},handleColumnHeaderPointerEnter:(e,t)=>{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:t.clientX,y:t.clientY},o.dispatch(n.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;