@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.
Files changed (305) hide show
  1. package/LICENSE +21 -0
  2. package/dist/controllers/autoHeightMeasurer.cjs +1 -0
  3. package/dist/controllers/autoHeightMeasurer.d.ts +30 -0
  4. package/dist/controllers/autoHeightMeasurer.js +74 -0
  5. package/dist/controllers/clipboardController.cjs +2 -0
  6. package/dist/controllers/clipboardController.d.ts +31 -0
  7. package/dist/controllers/clipboardController.js +88 -0
  8. package/dist/controllers/columnAutosizeRunner.cjs +1 -0
  9. package/dist/controllers/columnAutosizeRunner.d.ts +31 -0
  10. package/dist/controllers/columnAutosizeRunner.js +61 -0
  11. package/dist/controllers/columnHeaderDragController.cjs +1 -0
  12. package/dist/controllers/columnHeaderDragController.d.ts +44 -0
  13. package/dist/controllers/columnHeaderDragController.js +256 -0
  14. package/dist/controllers/columnMenuController.cjs +1 -0
  15. package/dist/controllers/columnMenuController.d.ts +49 -0
  16. package/dist/controllers/columnMenuController.js +110 -0
  17. package/dist/controllers/contextMenuController.cjs +1 -0
  18. package/dist/controllers/contextMenuController.d.ts +30 -0
  19. package/dist/controllers/contextMenuController.js +65 -0
  20. package/dist/controllers/debouncedValueStore.cjs +1 -0
  21. package/dist/controllers/debouncedValueStore.d.ts +11 -0
  22. package/dist/controllers/debouncedValueStore.js +22 -0
  23. package/dist/controllers/editController.cjs +1 -0
  24. package/dist/controllers/editController.d.ts +27 -0
  25. package/dist/controllers/editController.js +76 -0
  26. package/dist/controllers/filterPopoverController.cjs +1 -0
  27. package/dist/controllers/filterPopoverController.d.ts +53 -0
  28. package/dist/controllers/filterPopoverController.js +146 -0
  29. package/dist/controllers/globalFilteredOrder.cjs +1 -0
  30. package/dist/controllers/globalFilteredOrder.d.ts +38 -0
  31. package/dist/controllers/globalFilteredOrder.js +78 -0
  32. package/dist/controllers/historyController.cjs +1 -0
  33. package/dist/controllers/historyController.d.ts +28 -0
  34. package/dist/controllers/historyController.js +52 -0
  35. package/dist/controllers/keyboardController.cjs +1 -0
  36. package/dist/controllers/keyboardController.d.ts +36 -0
  37. package/dist/controllers/keyboardController.js +111 -0
  38. package/dist/controllers/panelHeaderDragController.cjs +1 -0
  39. package/dist/controllers/panelHeaderDragController.d.ts +21 -0
  40. package/dist/controllers/panelHeaderDragController.js +32 -0
  41. package/dist/controllers/pointerInteractionsController.cjs +1 -0
  42. package/dist/controllers/pointerInteractionsController.d.ts +74 -0
  43. package/dist/controllers/pointerInteractionsController.js +262 -0
  44. package/dist/controllers/popoverSupport.cjs +1 -0
  45. package/dist/controllers/popoverSupport.d.ts +18 -0
  46. package/dist/controllers/popoverSupport.js +25 -0
  47. package/dist/controllers/rowDragController.cjs +1 -0
  48. package/dist/controllers/rowDragController.d.ts +40 -0
  49. package/dist/controllers/rowDragController.js +192 -0
  50. package/dist/controllers/scrollSyncController.cjs +1 -0
  51. package/dist/controllers/scrollSyncController.d.ts +17 -0
  52. package/dist/controllers/scrollSyncController.js +51 -0
  53. package/dist/controllers/selectOptionsCollector.cjs +1 -0
  54. package/dist/controllers/selectOptionsCollector.d.ts +31 -0
  55. package/dist/controllers/selectOptionsCollector.js +88 -0
  56. package/dist/controllers/serverSideRowModel.cjs +1 -0
  57. package/dist/controllers/serverSideRowModel.d.ts +36 -0
  58. package/dist/controllers/serverSideRowModel.js +153 -0
  59. package/dist/controllers/systemColorSchemeStore.cjs +1 -0
  60. package/dist/controllers/systemColorSchemeStore.d.ts +5 -0
  61. package/dist/controllers/systemColorSchemeStore.js +18 -0
  62. package/dist/controllers/toolPanelController.cjs +1 -0
  63. package/dist/controllers/toolPanelController.d.ts +36 -0
  64. package/dist/controllers/toolPanelController.js +112 -0
  65. package/dist/controllers/tooltipController.cjs +1 -0
  66. package/dist/controllers/tooltipController.d.ts +6 -0
  67. package/dist/controllers/tooltipController.js +75 -0
  68. package/dist/controllers/viewportSyncController.cjs +1 -0
  69. package/dist/controllers/viewportSyncController.d.ts +30 -0
  70. package/dist/controllers/viewportSyncController.js +40 -0
  71. package/dist/engine/columnCommands.cjs +1 -0
  72. package/dist/engine/columnCommands.d.ts +56 -0
  73. package/dist/engine/columnCommands.js +199 -0
  74. package/dist/engine/columnLayout.cjs +1 -0
  75. package/dist/engine/columnLayout.d.ts +43 -0
  76. package/dist/engine/columnLayout.js +91 -0
  77. package/dist/engine/createGridEngine.cjs +1 -0
  78. package/dist/engine/createGridEngine.d.ts +46 -0
  79. package/dist/engine/createGridEngine.js +52 -0
  80. package/dist/engine/filterPopoverCommands.cjs +1 -0
  81. package/dist/engine/filterPopoverCommands.d.ts +56 -0
  82. package/dist/engine/filterPopoverCommands.js +303 -0
  83. package/dist/engine/gridApi.cjs +1 -0
  84. package/dist/engine/gridApi.d.ts +61 -0
  85. package/dist/engine/gridApi.js +389 -0
  86. package/dist/engine/memo.cjs +1 -0
  87. package/dist/engine/memo.d.ts +2 -0
  88. package/dist/engine/memo.js +18 -0
  89. package/dist/engine/notifiers.cjs +1 -0
  90. package/dist/engine/notifiers.d.ts +35 -0
  91. package/dist/engine/notifiers.js +34 -0
  92. package/dist/engine/rowPipeline.cjs +1 -0
  93. package/dist/engine/rowPipeline.d.ts +50 -0
  94. package/dist/engine/rowPipeline.js +84 -0
  95. package/dist/engine/rowSelectionCommands.cjs +1 -0
  96. package/dist/engine/rowSelectionCommands.d.ts +21 -0
  97. package/dist/engine/rowSelectionCommands.js +57 -0
  98. package/dist/engine/verticalLayout.cjs +1 -0
  99. package/dist/engine/verticalLayout.d.ts +52 -0
  100. package/dist/engine/verticalLayout.js +60 -0
  101. package/dist/index.cjs +1 -0
  102. package/dist/index.d.ts +8 -0
  103. package/dist/index.js +5 -0
  104. package/dist/logic/aggregation.cjs +1 -0
  105. package/dist/logic/aggregation.d.ts +13 -0
  106. package/dist/logic/aggregation.js +28 -0
  107. package/dist/logic/autoScrollGeometry.cjs +1 -0
  108. package/dist/logic/autoScrollGeometry.d.ts +27 -0
  109. package/dist/logic/autoScrollGeometry.js +19 -0
  110. package/dist/logic/autoSizeOnData.cjs +1 -0
  111. package/dist/logic/autoSizeOnData.d.ts +10 -0
  112. package/dist/logic/autoSizeOnData.js +19 -0
  113. package/dist/logic/cellOverflowTooltip.cjs +1 -0
  114. package/dist/logic/cellOverflowTooltip.d.ts +5 -0
  115. package/dist/logic/cellOverflowTooltip.js +4 -0
  116. package/dist/logic/checkboxEditor.cjs +1 -0
  117. package/dist/logic/checkboxEditor.d.ts +12 -0
  118. package/dist/logic/checkboxEditor.js +17 -0
  119. package/dist/logic/chunkedLoop.cjs +1 -0
  120. package/dist/logic/chunkedLoop.d.ts +8 -0
  121. package/dist/logic/chunkedLoop.js +18 -0
  122. package/dist/logic/clearCells.cjs +1 -0
  123. package/dist/logic/clearCells.d.ts +31 -0
  124. package/dist/logic/clearCells.js +91 -0
  125. package/dist/logic/columnAutosize.cjs +1 -0
  126. package/dist/logic/columnAutosize.d.ts +18 -0
  127. package/dist/logic/columnAutosize.js +150 -0
  128. package/dist/logic/columnFlex.cjs +1 -0
  129. package/dist/logic/columnFlex.d.ts +4 -0
  130. package/dist/logic/columnFlex.js +60 -0
  131. package/dist/logic/columnReset.cjs +1 -0
  132. package/dist/logic/columnReset.d.ts +7 -0
  133. package/dist/logic/columnReset.js +25 -0
  134. package/dist/logic/contextMenuTarget.cjs +1 -0
  135. package/dist/logic/contextMenuTarget.d.ts +4 -0
  136. package/dist/logic/contextMenuTarget.js +18 -0
  137. package/dist/logic/cx.cjs +1 -0
  138. package/dist/logic/cx.d.ts +1 -0
  139. package/dist/logic/cx.js +6 -0
  140. package/dist/logic/dateFilterCondition.cjs +1 -0
  141. package/dist/logic/dateFilterCondition.d.ts +26 -0
  142. package/dist/logic/dateFilterCondition.js +110 -0
  143. package/dist/logic/dateFilterPresets.cjs +1 -0
  144. package/dist/logic/dateFilterPresets.d.ts +13 -0
  145. package/dist/logic/dateFilterPresets.js +30 -0
  146. package/dist/logic/dateFilterTree.cjs +1 -0
  147. package/dist/logic/dateFilterTree.d.ts +17 -0
  148. package/dist/logic/dateFilterTree.js +75 -0
  149. package/dist/logic/datePickerCalendar.cjs +1 -0
  150. package/dist/logic/datePickerCalendar.d.ts +12 -0
  151. package/dist/logic/datePickerCalendar.js +41 -0
  152. package/dist/logic/detailRow.cjs +1 -0
  153. package/dist/logic/detailRow.d.ts +38 -0
  154. package/dist/logic/detailRow.js +78 -0
  155. package/dist/logic/domGuards.cjs +1 -0
  156. package/dist/logic/domGuards.d.ts +7 -0
  157. package/dist/logic/domGuards.js +4 -0
  158. package/dist/logic/editorValues.cjs +1 -0
  159. package/dist/logic/editorValues.d.ts +5 -0
  160. package/dist/logic/editorValues.js +32 -0
  161. package/dist/logic/exportCsv.cjs +3 -0
  162. package/dist/logic/exportCsv.d.ts +12 -0
  163. package/dist/logic/exportCsv.js +19 -0
  164. package/dist/logic/exportData.cjs +1 -0
  165. package/dist/logic/exportData.d.ts +9 -0
  166. package/dist/logic/exportData.js +24 -0
  167. package/dist/logic/exportScope.cjs +1 -0
  168. package/dist/logic/exportScope.d.ts +3 -0
  169. package/dist/logic/exportScope.js +4 -0
  170. package/dist/logic/filterPopoverLayout.cjs +1 -0
  171. package/dist/logic/filterPopoverLayout.d.ts +17 -0
  172. package/dist/logic/filterPopoverLayout.js +13 -0
  173. package/dist/logic/filterPopoverOutsideClick.cjs +1 -0
  174. package/dist/logic/filterPopoverOutsideClick.d.ts +2 -0
  175. package/dist/logic/filterPopoverOutsideClick.js +4 -0
  176. package/dist/logic/filterSummary.cjs +1 -0
  177. package/dist/logic/filterSummary.d.ts +3 -0
  178. package/dist/logic/filterSummary.js +22 -0
  179. package/dist/logic/filtering.cjs +1 -0
  180. package/dist/logic/filtering.d.ts +33 -0
  181. package/dist/logic/filtering.js +313 -0
  182. package/dist/logic/geometry.cjs +1 -0
  183. package/dist/logic/geometry.d.ts +72 -0
  184. package/dist/logic/geometry.js +161 -0
  185. package/dist/logic/gridState.cjs +1 -0
  186. package/dist/logic/gridState.d.ts +13 -0
  187. package/dist/logic/gridState.js +165 -0
  188. package/dist/logic/grouping.cjs +1 -0
  189. package/dist/logic/grouping.d.ts +34 -0
  190. package/dist/logic/grouping.js +93 -0
  191. package/dist/logic/history.cjs +1 -0
  192. package/dist/logic/history.d.ts +16 -0
  193. package/dist/logic/history.js +34 -0
  194. package/dist/logic/inferFilterType.cjs +1 -0
  195. package/dist/logic/inferFilterType.d.ts +19 -0
  196. package/dist/logic/inferFilterType.js +54 -0
  197. package/dist/logic/numberFilterCondition.cjs +1 -0
  198. package/dist/logic/numberFilterCondition.d.ts +21 -0
  199. package/dist/logic/numberFilterCondition.js +130 -0
  200. package/dist/logic/panelDragGeometry.cjs +1 -0
  201. package/dist/logic/panelDragGeometry.d.ts +13 -0
  202. package/dist/logic/panelDragGeometry.js +10 -0
  203. package/dist/logic/rowHeightStore.cjs +1 -0
  204. package/dist/logic/rowHeightStore.d.ts +13 -0
  205. package/dist/logic/rowHeightStore.js +41 -0
  206. package/dist/logic/rowReorder.cjs +1 -0
  207. package/dist/logic/rowReorder.d.ts +18 -0
  208. package/dist/logic/rowReorder.js +22 -0
  209. package/dist/logic/rowSelection.cjs +1 -0
  210. package/dist/logic/rowSelection.d.ts +16 -0
  211. package/dist/logic/rowSelection.js +49 -0
  212. package/dist/logic/scrollHint.cjs +1 -0
  213. package/dist/logic/scrollHint.d.ts +41 -0
  214. package/dist/logic/scrollHint.js +66 -0
  215. package/dist/logic/scrollTargets.cjs +1 -0
  216. package/dist/logic/scrollTargets.d.ts +22 -0
  217. package/dist/logic/scrollTargets.js +24 -0
  218. package/dist/logic/selectEditorState.cjs +1 -0
  219. package/dist/logic/selectEditorState.d.ts +28 -0
  220. package/dist/logic/selectEditorState.js +31 -0
  221. package/dist/logic/selectOptions.cjs +1 -0
  222. package/dist/logic/selectOptions.d.ts +9 -0
  223. package/dist/logic/selectOptions.js +23 -0
  224. package/dist/logic/serverSideBlocks.cjs +1 -0
  225. package/dist/logic/serverSideBlocks.d.ts +2 -0
  226. package/dist/logic/serverSideBlocks.js +14 -0
  227. package/dist/logic/serverSideCache.cjs +1 -0
  228. package/dist/logic/serverSideCache.d.ts +14 -0
  229. package/dist/logic/serverSideCache.js +42 -0
  230. package/dist/logic/serverSideEdits.cjs +1 -0
  231. package/dist/logic/serverSideEdits.d.ts +16 -0
  232. package/dist/logic/serverSideEdits.js +47 -0
  233. package/dist/logic/serverSideQuery.cjs +1 -0
  234. package/dist/logic/serverSideQuery.d.ts +7 -0
  235. package/dist/logic/serverSideQuery.js +21 -0
  236. package/dist/logic/setFilterSearch.cjs +1 -0
  237. package/dist/logic/setFilterSearch.d.ts +14 -0
  238. package/dist/logic/setFilterSearch.js +14 -0
  239. package/dist/logic/setFilterSelection.cjs +1 -0
  240. package/dist/logic/setFilterSelection.d.ts +5 -0
  241. package/dist/logic/setFilterSelection.js +4 -0
  242. package/dist/logic/slotDom.cjs +1 -0
  243. package/dist/logic/slotDom.d.ts +8 -0
  244. package/dist/logic/slotDom.js +22 -0
  245. package/dist/logic/slotProps.cjs +1 -0
  246. package/dist/logic/slotProps.d.ts +18 -0
  247. package/dist/logic/slotProps.js +63 -0
  248. package/dist/logic/sorting.cjs +1 -0
  249. package/dist/logic/sorting.d.ts +11 -0
  250. package/dist/logic/sorting.js +96 -0
  251. package/dist/logic/textFilterCondition.cjs +1 -0
  252. package/dist/logic/textFilterCondition.d.ts +18 -0
  253. package/dist/logic/textFilterCondition.js +55 -0
  254. package/dist/logic/theme.cjs +1 -0
  255. package/dist/logic/theme.d.ts +3 -0
  256. package/dist/logic/theme.js +4 -0
  257. package/dist/logic/tooltipGeometry.cjs +1 -0
  258. package/dist/logic/tooltipGeometry.d.ts +19 -0
  259. package/dist/logic/tooltipGeometry.js +16 -0
  260. package/dist/logic/validation.cjs +1 -0
  261. package/dist/logic/validation.d.ts +14 -0
  262. package/dist/logic/validation.js +47 -0
  263. package/dist/logic/valueFormatters.cjs +1 -0
  264. package/dist/logic/valueFormatters.d.ts +9 -0
  265. package/dist/logic/valueFormatters.js +17 -0
  266. package/dist/logic/valueStore.cjs +1 -0
  267. package/dist/logic/valueStore.d.ts +6 -0
  268. package/dist/logic/valueStore.js +18 -0
  269. package/dist/logic/verticalGeometry.cjs +1 -0
  270. package/dist/logic/verticalGeometry.d.ts +58 -0
  271. package/dist/logic/verticalGeometry.js +90 -0
  272. package/dist/model/gridActions.cjs +1 -0
  273. package/dist/model/gridActions.d.ts +125 -0
  274. package/dist/model/gridActions.js +114 -0
  275. package/dist/model/gridReducer.cjs +1 -0
  276. package/dist/model/gridReducer.d.ts +4 -0
  277. package/dist/model/gridReducer.js +247 -0
  278. package/dist/model/gridSelectors.cjs +1 -0
  279. package/dist/model/gridSelectors.d.ts +40 -0
  280. package/dist/model/gridSelectors.js +68 -0
  281. package/dist/model/gridStore.cjs +1 -0
  282. package/dist/model/gridStore.d.ts +24 -0
  283. package/dist/model/gridStore.js +38 -0
  284. package/dist/model/gridTypes.core.cjs +1 -0
  285. package/dist/model/gridTypes.core.d.ts +797 -0
  286. package/dist/model/gridTypes.core.js +0 -0
  287. package/dist/model/gridTypes.unbound.cjs +1 -0
  288. package/dist/model/gridTypes.unbound.d.ts +31 -0
  289. package/dist/model/gridTypes.unbound.js +0 -0
  290. package/dist/testing/index.cjs +1 -0
  291. package/dist/testing/index.d.ts +5 -0
  292. package/dist/testing/index.js +51 -0
  293. package/dist/utils/clipboard.cjs +7 -0
  294. package/dist/utils/clipboard.d.ts +29 -0
  295. package/dist/utils/clipboard.js +110 -0
  296. package/dist/utils/excelColumnName.cjs +1 -0
  297. package/dist/utils/excelColumnName.d.ts +1 -0
  298. package/dist/utils/excelColumnName.js +9 -0
  299. package/dist/utils/permissions.cjs +1 -0
  300. package/dist/utils/permissions.d.ts +4 -0
  301. package/dist/utils/permissions.js +7 -0
  302. package/dist/utils/scheduler.cjs +1 -0
  303. package/dist/utils/scheduler.d.ts +1 -0
  304. package/dist/utils/scheduler.js +13 -0
  305. package/package.json +58 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Yuki Sakakibara
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +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;
@@ -0,0 +1,30 @@
1
+ import type { GridRowKey, RowModel } from '../model/gridTypes.unbound';
2
+ import { type RowHeightStore } from '../logic/rowHeightStore';
3
+ import type { RowMetrics, VerticalGeometry } from '../logic/verticalGeometry';
4
+ type ReadonlyRef<V> = {
5
+ readonly current: V;
6
+ };
7
+ export type AutoHeightMeasureArgs<T> = {
8
+ scrollContainerRef: ReadonlyRef<HTMLElement | null>;
9
+ autoHeightActive: boolean;
10
+ rowHeightStore: RowHeightStore | null;
11
+ rowMetrics: RowMetrics;
12
+ rowModel: RowModel<T>;
13
+ virtualRows: VerticalGeometry['rows'];
14
+ viewportHeight: number;
15
+ version: number;
16
+ nonce: number;
17
+ };
18
+ export type AutoHeightMeasureSnapshot = {
19
+ version: number;
20
+ nonce: number;
21
+ };
22
+ export type AutoHeightMeasurer<T> = {
23
+ update: (args: AutoHeightMeasureArgs<T>) => void;
24
+ getSnapshot: () => AutoHeightMeasureSnapshot;
25
+ subscribe: (listener: () => void) => () => void;
26
+ measuredHeights: Map<GridRowKey, number>;
27
+ dispose: () => void;
28
+ };
29
+ export declare const createAutoHeightMeasurer: <T>() => AutoHeightMeasurer<T>;
30
+ export {};
@@ -0,0 +1,74 @@
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";
4
+ //#region src/controllers/autoHeightMeasurer.ts
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({
7
+ version: 0,
8
+ nonce: 0
9
+ }), o = /* @__PURE__ */ new Map(), s = null, c = /* @__PURE__ */ new Set(), l = null, u = () => {
10
+ s?.disconnect(), s = null, c.clear();
11
+ }, d = () => {
12
+ let e = a.getSnapshot();
13
+ a.setSnapshot({
14
+ ...e,
15
+ version: e.version + 1
16
+ });
17
+ }, f = () => {
18
+ let e = a.getSnapshot();
19
+ a.setSnapshot({
20
+ ...e,
21
+ nonce: e.nonce + 1
22
+ });
23
+ }, p = (r) => {
24
+ let { autoHeightActive: i, rowHeightStore: a, rowMetrics: o, rowModel: l } = r, p = r.scrollContainerRef.current;
25
+ if (!i || !a) {
26
+ u();
27
+ return;
28
+ }
29
+ if (!p) return;
30
+ let m = p.querySelectorAll("[data-autoheight-cell]");
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);
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);
41
+ });
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));
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();
49
+ }
50
+ }
51
+ s === null && (s = new ResizeObserver(f));
52
+ let h = s, g = /* @__PURE__ */ new Set();
53
+ m.forEach((e) => {
54
+ g.add(e), c.has(e) || (h.observe(e), c.add(e));
55
+ });
56
+ let _ = [];
57
+ c.forEach((e) => {
58
+ g.has(e) || _.push(e);
59
+ }), _.forEach((e) => {
60
+ h.unobserve(e), c.delete(e);
61
+ });
62
+ };
63
+ return {
64
+ update: (e) => {
65
+ l !== null && i(l, e) || (l = e, p(e));
66
+ },
67
+ getSnapshot: a.getSnapshot,
68
+ subscribe: a.subscribe,
69
+ measuredHeights: o,
70
+ dispose: u
71
+ };
72
+ };
73
+ //#endregion
74
+ export { a as createAutoHeightMeasurer };
@@ -0,0 +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;
@@ -0,0 +1,31 @@
1
+ import { type GridUiAction } from '../model/gridActions';
2
+ import type { GridColumn, GridSelection, GridUiState, RowModel, SpreadsheetGridProps } from '../model/gridTypes.unbound';
3
+ import type { ServerSideCellEditInput } from '../logic/serverSideEdits';
4
+ export type ClipboardEventLike = {
5
+ clipboardData: {
6
+ getData: (type: string) => string;
7
+ } | null;
8
+ preventDefault: () => void;
9
+ };
10
+ export type ClipboardControllerArgs<T extends object> = {
11
+ rows: T[];
12
+ rowModel: RowModel<T>;
13
+ visibleColumns: GridColumn<T>[];
14
+ uiState: GridUiState;
15
+ readOnly: boolean;
16
+ canEditCell: SpreadsheetGridProps<T>['canEditCell'];
17
+ createRow?: () => T;
18
+ createOverflowColumn?: (columnIndex: number) => GridColumn<T>;
19
+ onRowsChange?: (nextRows: T[]) => void;
20
+ onColumnsChange?: (nextColumns: GridColumn<T>[]) => void;
21
+ applyServerSideCellEdits?: (edits: ServerSideCellEditInput<T>[]) => number;
22
+ isRowExportable?: SpreadsheetGridProps<T>['isRowExportable'];
23
+ dispatch: (action: GridUiAction) => void;
24
+ };
25
+ export type ClipboardController<T extends object> = {
26
+ update: (args: ClipboardControllerArgs<T>) => void;
27
+ handleCopy: () => Promise<void>;
28
+ handlePaste: (event: ClipboardEventLike) => void;
29
+ };
30
+ export declare const computeIsWholeGridSelected: (selection: GridSelection, viewRowCount: number, columnCount: number) => boolean;
31
+ export declare const createClipboardController: <T extends object>() => ClipboardController<T>;
@@ -0,0 +1,88 @@
1
+ import { getCellValue as e, isCellEditable as t } from "../utils/permissions.js";
2
+ import { gridActions as n } from "../model/gridActions.js";
3
+ import { clamp as r } from "../logic/geometry.js";
4
+ import { applyClipboardMatrixToRows as i, buildClipboardCellEdits as a, parseClipboardText as o, serializeSelectionToTsv as s, writeTextToClipboard as c } from "../utils/clipboard.js";
5
+ //#region src/controllers/clipboardController.ts
6
+ var l = (e, t, n) => {
7
+ if (t === 0 || n === 0 || e?.type !== "cell") return !1;
8
+ 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
+ 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) => {
14
+ let { isRowExportable: t, rowModel: n } = e;
15
+ if (t) return (e, r) => t(e, {
16
+ viewRowIndex: r,
17
+ rowKey: n.getRowKey(r) ?? r
18
+ });
19
+ }, p = (t) => {
20
+ let { rowModel: n, visibleColumns: r } = t, i = n.getRowCount();
21
+ if (i === 0 || r.length === 0) return "";
22
+ let a = f(t), o = [];
23
+ for (let t = 0; t < i; t += 1) {
24
+ let i = n.getRow(t);
25
+ if (!i || a && !a(i, t)) continue;
26
+ let s = r.map((t) => {
27
+ let n = e(i, t);
28
+ return t.formatClipboardValue ? t.formatClipboardValue(n, i) : String(n ?? "");
29
+ });
30
+ o.push(s.join(" "));
31
+ }
32
+ return o.join("\n");
33
+ };
34
+ return {
35
+ update: d,
36
+ 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));
39
+ i && await c(i);
40
+ },
41
+ 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;
47
+ 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({
61
+ row: i,
62
+ col: o
63
+ })), y(n.endSelection()), y(n.activateCell(d.activeCell));
64
+ return;
65
+ }
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);
75
+ }
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));
84
+ }
85
+ };
86
+ };
87
+ //#endregion
88
+ export { l as computeIsWholeGridSelected, u as createClipboardController };
@@ -0,0 +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;
@@ -0,0 +1,31 @@
1
+ import { gridActions } from '../model/gridActions';
2
+ import type { AutoSizeColumnsMode, GridColumn, RowModel } from '../model/gridTypes.unbound';
3
+ type ReadonlyRef<V> = {
4
+ readonly current: V;
5
+ };
6
+ export type ColumnAutosizeRunnerArgs<T> = {
7
+ rowModel: RowModel<T>;
8
+ gridRootRef: ReadonlyRef<HTMLElement | null>;
9
+ columnWidths: Record<string, number>;
10
+ dispatch: (action: ReturnType<typeof gridActions.syncColumnWidths>) => void;
11
+ };
12
+ export type ColumnAutosizeRunner<T> = {
13
+ update: (args: ColumnAutosizeRunnerArgs<T>) => void;
14
+ runAutosize: (columns: GridColumn<T>[]) => Promise<void>;
15
+ subscribe: (listener: () => void) => () => void;
16
+ getSnapshot: () => boolean;
17
+ dispose: () => void;
18
+ };
19
+ export declare const createColumnAutosizeRunner: <T>() => ColumnAutosizeRunner<T>;
20
+ export type AutoSizeOnDataArgs<T> = {
21
+ mode: AutoSizeColumnsMode;
22
+ isServerSide: boolean;
23
+ rows: T[];
24
+ visibleColumns: GridColumn<T>[];
25
+ runAutosize: (columns: GridColumn<T>[]) => Promise<void>;
26
+ };
27
+ export type AutoSizeOnDataTrigger<T> = {
28
+ update: (args: AutoSizeOnDataArgs<T>) => void;
29
+ };
30
+ export declare const createAutoSizeOnDataTrigger: <T>() => AutoSizeOnDataTrigger<T>;
31
+ export {};
@@ -0,0 +1,61 @@
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";
5
+ import { resolveAutoSizeOnData as a } from "../logic/autoSizeOnData.js";
6
+ //#region src/controllers/columnAutosizeRunner.ts
7
+ var o = 180, s = () => {
8
+ let a = null, s = e(!1), c = 0, l = null, u = () => {
9
+ l !== null && (clearTimeout(l), l = null);
10
+ };
11
+ return {
12
+ update: (e) => {
13
+ a = e;
14
+ },
15
+ runAutosize: async (e) => {
16
+ if (a === null || e.length === 0 || !n()) return;
17
+ let { rowModel: d, gridRootRef: f, columnWidths: p, dispatch: m } = a, h = c += 1;
18
+ u();
19
+ let g = d.getRowCount(), _ = f.current, v = r(e);
20
+ l = setTimeout(() => {
21
+ c === h && s.setSnapshot(!0);
22
+ }, o);
23
+ try {
24
+ if (!await i(g, (e) => {
25
+ let t = d.getRow(e);
26
+ t && v.collect(t);
27
+ }, { isCancelled: () => c !== h || a?.rowModel !== d })) return;
28
+ let e = v.finalize({
29
+ gridRoot: _,
30
+ currentWidths: p
31
+ });
32
+ Object.keys(e).length > 0 && m(t.syncColumnWidths(e));
33
+ } finally {
34
+ c === h && (u(), s.setSnapshot(!1));
35
+ }
36
+ },
37
+ subscribe: s.subscribe,
38
+ getSnapshot: s.getSnapshot,
39
+ dispose: () => {
40
+ c += 1, u();
41
+ }
42
+ };
43
+ }, c = () => {
44
+ let e = null, t = !1;
45
+ return { update: (n) => {
46
+ if (e !== null && e.mode === n.mode && e.isServerSide === n.isServerSide && e.rows === n.rows && e.runAutosize === n.runAutosize) {
47
+ e = n;
48
+ return;
49
+ }
50
+ e = n;
51
+ let { shouldRun: r, nextHasAutoSizedOnMount: i } = a({
52
+ mode: n.mode,
53
+ isServerSide: n.isServerSide,
54
+ rowCount: n.rows.length,
55
+ hasAutoSizedOnMount: t
56
+ });
57
+ t = i, r && n.runAutosize(n.visibleColumns);
58
+ } };
59
+ };
60
+ //#endregion
61
+ export { c as createAutoSizeOnDataTrigger, s as createColumnAutosizeRunner };
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/detailRow.cjs"),t=require("../logic/geometry.cjs"),n=require("../logic/autoScrollGeometry.cjs"),r=require("../logic/slotDom.cjs");function i(e,n,r,i){let a=e.find(e=>e.key===n);if(!a)return null;let o=t.getColumnPane(a),s={left:[],center:[],right:[]},c=new Map;for(let n of e)s[t.getColumnPane(n)].push(n.key),c.set(n.key,n.visible!==!1);let l=s[r].filter(e=>c.get(e)).indexOf(n),u=s[o].indexOf(n);if(u<0)return null;s[o].splice(u,1);let d=i;o===r&&l>=0&&d>l&&--d;let f=s[r].filter(e=>c.get(e));if(d=Math.max(0,Math.min(d,f.length)),o===r&&l>=0&&d===l)return null;let p;return p=d>=f.length?s[r].length:s[r].indexOf(f[d]),s[r].splice(p,0,n),[...s.left,...s.center,...s.right]}var a=32,o=2,s=14,c=12,l=`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="5 9 2 12 5 15"/><polyline points="9 5 12 2 15 5"/><polyline points="15 19 12 22 9 19"/><polyline points="19 9 22 12 19 15"/><line x1="2" y1="12" x2="22" y2="12"/><line x1="12" y1="2" x2="12" y2="22"/></svg>`,u=`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="17" x2="12" y2="22"/><path d="M5 17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6h1a2 2 0 0 0 0-4H8a2 2 0 0 0 0 4h1v4.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24Z"/></svg>`,d=`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="4.9" y1="4.9" x2="19.1" y2="19.1"/></svg>`,f=`0.5`,p=200,m=`cubic-bezier(0.2, 0.7, 0.3, 1)`,h=()=>typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`).matches,g=t=>{if(!t)return null;let n=new Map;return t.querySelectorAll(`[data-ssg-col-key]`).forEach(r=>{if(e.isInsideDetailCardOf(t,r))return;let i=r.dataset.ssgColKey;i&&!n.has(i)&&n.set(i,r.getBoundingClientRect().left)}),n},_=()=>{let _=null,v=null,y=null,b=null,x={x:0,y:0},S=null,C=!1,w=null,T=null,E=null,D=null,O=null,k=()=>({left:_?.leftIndicatorRef.current??null,center:_?.centerIndicatorRef.current??null,right:_?.rightIndicatorRef.current??null}),A=()=>{for(let e of Object.values(k()))e&&(e.style.display=`none`)},j=e=>{if(E)return;let t=document.createElement(`div`);t.setAttribute(`data-grid-drag-ghost`,``),_?.scrollContainerRef.current?.closest(`.ssg-theme-dark`)!=null&&t.classList.add(`ssg-theme-dark`),t.style.cssText=[`position:fixed`,`top:0`,`left:0`,`display:inline-flex`,`align-items:center`,`gap:7px`,`padding:7px 12px 7px 10px`,`border-radius:9px`,`border:1px solid var(--ssg-ghost-border)`,`background:var(--ssg-ghost-bg)`,`color:var(--ssg-ghost-text)`,`font-size:12px`,`font-weight:600`,`line-height:1`,`white-space:nowrap`,`box-shadow:var(--ssg-ghost-shadow)`,`pointer-events:none`,`user-select:none`,`z-index:9999`,`will-change:transform`,`transform:translate(-9999px,-9999px)`].join(`;`),r.applySlotToElement(t,_?.ghostSlot);let n=document.createElement(`span`);n.style.cssText=`display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;flex:none`;let i=document.createElement(`span`);i.textContent=e,t.appendChild(n),t.appendChild(i),document.body.appendChild(t),E=t,D=n,O=null},M=e=>{let t=E;if(!t)return;t.style.transform=`translate(`+(x.x+s)+`px,`+(x.y+c)+`px)`;let n=e??`out`;if(O===n)return;O=n;let r=D;n===`out`?(t.style.opacity=f,r&&(r.innerHTML=d)):(t.style.opacity=`1`,r&&(r.innerHTML=n===`center`?l:u))},N=()=>{E&&E.parentNode&&E.parentNode.removeChild(E),E=null,D=null,O=null},P=(e,n)=>{if(_===null)return null;let{paneLayout:r,leftPaneScrollRef:i,rightPaneScrollRef:s,bodyScrollRef:c,scrollContainerRef:l,leftLeadingWidth:u,centerLeadingWidth:d,rightLeadingWidth:f}=_,p=l.current;if(p){let t=p.getBoundingClientRect();if(e<t.left||e>t.right||n<t.top||n>t.bottom)return null}let m=i.current,h=s.current;if(m&&r.left.entries.length===0&&e<=m.getBoundingClientRect().left+a)return{pane:`left`,slot:0,leftPx:o};if(m&&r.left.entries.length>0){let n=m.getBoundingClientRect();if(e<n.right){let i=e-n.left-u,a=t.findPaneDropSlot(r.left,i);return{pane:`left`,slot:a,leftPx:u+t.paneDropSlotBoundaryX(r.left,a)}}}if(h&&r.right.entries.length===0&&e>=h.getBoundingClientRect().left-a)return{pane:`right`,slot:0,leftPx:-2};if(h&&r.right.entries.length>0){let n=h.getBoundingClientRect();if(e>=n.left){let i=e-n.left-f,a=t.findPaneDropSlot(r.right,i);return{pane:`right`,slot:a,leftPx:f+t.paneDropSlotBoundaryX(r.right,a)}}}let g=c.current;if(g&&r.center.entries.length>0){let n=g.getBoundingClientRect(),i=g.scrollLeft+e-n.left-d,a=t.findPaneDropSlot(r.center,Math.max(i,0));return{pane:`center`,slot:a,leftPx:d+t.paneDropSlotBoundaryX(r.center,a)}}return null},F=()=>{let e=P(x.x,x.y);if(M(e?e.pane:null),!e){y=null,A();return}y={pane:e.pane,slot:e.slot};let t=k();for(let n of[`left`,`center`,`right`]){let r=t[n];r&&(n===e.pane?(r.style.left=`${e.leftPx}px`,r.style.display=`block`):r.style.display=`none`)}},I=()=>{if(v===null){T=null;return}let e=_?.scrollContainerRef.current??null;if(e&&(C||(!S||n.hasPointerLeftActivationRadius(S,x,6))&&(C=!0),C)){let t=e.getBoundingClientRect(),r=n.resolveScrollContentBox({rectLeft:t.left,rectTop:t.top,clientLeft:e.clientLeft,clientTop:e.clientTop,clientWidth:e.clientWidth,clientHeight:e.clientHeight}),i=n.resolveAutoScrollAxisDirection(x.x,r.left,r.right,24),a=n.computeNextScrollPosition(e.scrollLeft,i,18,e.scrollWidth-e.clientWidth);a!==e.scrollLeft&&e.scrollTo({left:a,behavior:`auto`})}F(),T=requestAnimationFrame(I)},L=e=>{T!==null&&(cancelAnimationFrame(T),T=null),document.body.style.cursor=``,A(),N();let n=v,r=y;if(v=null,y=null,!e||!n||!r||_===null)return;let{columns:a,applyColumnOrderAndPin:o,scrollContainerRef:s}=_,c=i(a,n,r.pane,r.slot);if(!c)return;let l=a.find(e=>e.key===n),u=l?t.getColumnPane(l):null;b=u!==null&&u===r.pane&&!h()?g(s.current):null,o(c,new Map([[n,r.pane===`center`?void 0:r.pane]]))};return{update:e=>{_=e},onColumnDragHandlePointerDown:(e,t)=>{if(_===null||!_.enabled||t.button!==0)return;t.stopPropagation(),t.preventDefault(),v=e.key,x={x:t.clientX,y:t.clientY},S={x:t.clientX,y:t.clientY},C=!1,document.body.style.cursor=`grabbing`,j(e.title||e.key);let n=t.currentTarget,r=t.pointerId;try{n.setPointerCapture(r)}catch{}let i=e=>{e.pointerId===r&&(x={x:e.clientX,y:e.clientY},F())},a=()=>{window.removeEventListener(`pointermove`,i),window.removeEventListener(`pointerup`,o),window.removeEventListener(`pointercancel`,s),w=null;try{n.releasePointerCapture(r)}catch{}};function o(e){e.pointerId===r&&(a(),L(!0))}function s(e){e.pointerId===r&&(a(),L(!1))}window.addEventListener(`pointermove`,i),window.addEventListener(`pointerup`,o),window.addEventListener(`pointercancel`,s),w=a,F(),T=requestAnimationFrame(I)},applyReorderSettle:()=>{let t=b;if(b=null,!t)return;let n=_?.scrollContainerRef.current??null;if(!n)return;let r=new Map,i=new Map;n.querySelectorAll(`[data-ssg-col-key]`).forEach(a=>{if(e.isInsideDetailCardOf(n,a))return;let o=a.dataset.ssgColKey;if(!o||!t.has(o))return;let s=r.get(o);s?s.push(a):(r.set(o,[a]),i.set(o,a.getBoundingClientRect().left))});let a=[];if(r.forEach((e,n)=>{let r=t.get(n),o=i.get(n);if(r===void 0||o===void 0)return;let s=r-o;if(!(Math.abs(s)<.5))for(let t of e)t.style.transition=`none`,t.style.transform=`translateX(${s}px)`,t.style.willChange=`transform`,a.push(t)}),a.length!==0){n.getBoundingClientRect();for(let e of a)e.style.transition=`transform ${p}ms ${m}`,e.style.transform=`translateX(0)`;window.setTimeout(()=>{for(let e of a)e.style.transition=``,e.style.transform=``,e.style.willChange=``},280)}},dispose:()=>{w?.(),w=null,T!==null&&(cancelAnimationFrame(T),T=null),v=null,y=null,document.body.style.cursor=``,N()}}};exports.computeHeaderReorderedKeys=i,exports.createColumnHeaderDragController=_;
@@ -0,0 +1,44 @@
1
+ import type { GridColumn, GridColumnPinned, GridResolvedSlot } from '../model/gridTypes.unbound';
2
+ import { type ColumnPane, type GridPaneLayout } from '../logic/geometry';
3
+ type ApplyColumnOrderAndPin = (orderedKeys: string[], pinOverride?: Map<string, GridColumnPinned | undefined>) => void;
4
+ export declare function computeHeaderReorderedKeys<T>(columns: GridColumn<T>[], draggedKey: string, targetPane: ColumnPane, slotInTargetVisible: number): string[] | null;
5
+ type ReadonlyRef<V> = {
6
+ readonly current: V;
7
+ };
8
+ export type ColumnHeaderDragArgs<T> = {
9
+ enabled: boolean;
10
+ columns: GridColumn<T>[];
11
+ paneLayout: GridPaneLayout<T>;
12
+ leftPaneScrollRef: ReadonlyRef<HTMLElement | null>;
13
+ rightPaneScrollRef: ReadonlyRef<HTMLElement | null>;
14
+ bodyScrollRef: ReadonlyRef<HTMLElement | null>;
15
+ scrollContainerRef: ReadonlyRef<HTMLElement | null>;
16
+ leftIndicatorRef: ReadonlyRef<HTMLElement | null>;
17
+ centerIndicatorRef: ReadonlyRef<HTMLElement | null>;
18
+ rightIndicatorRef: ReadonlyRef<HTMLElement | null>;
19
+ leftLeadingWidth: number;
20
+ centerLeadingWidth: number;
21
+ rightLeadingWidth: number;
22
+ applyColumnOrderAndPin: ApplyColumnOrderAndPin;
23
+ ghostSlot?: GridResolvedSlot;
24
+ };
25
+ export type ColumnDragHandlePointerEvent = {
26
+ button: number;
27
+ pointerId: number;
28
+ clientX: number;
29
+ clientY: number;
30
+ currentTarget: {
31
+ setPointerCapture: (pointerId: number) => void;
32
+ releasePointerCapture: (pointerId: number) => void;
33
+ };
34
+ preventDefault: () => void;
35
+ stopPropagation: () => void;
36
+ };
37
+ export type ColumnHeaderDragController<T> = {
38
+ update: (args: ColumnHeaderDragArgs<T>) => void;
39
+ onColumnDragHandlePointerDown: (column: GridColumn<T>, event: ColumnDragHandlePointerEvent) => void;
40
+ applyReorderSettle: () => void;
41
+ dispose: () => void;
42
+ };
43
+ export declare const createColumnHeaderDragController: <T>() => ColumnHeaderDragController<T>;
44
+ export {};