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