vastgrid 0.1.0 → 0.2.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 (312) hide show
  1. package/README.md +175 -13
  2. package/dist/canvas/geometry.d.ts +92 -0
  3. package/dist/canvas/geometry.d.ts.map +1 -0
  4. package/dist/canvas/geometry.js +197 -0
  5. package/dist/canvas/geometry.js.map +1 -0
  6. package/dist/canvas/grid-canvas.d.ts +161 -0
  7. package/dist/canvas/grid-canvas.d.ts.map +1 -0
  8. package/dist/canvas/grid-canvas.js +1146 -0
  9. package/dist/canvas/grid-canvas.js.map +1 -0
  10. package/dist/canvas/hooks.d.ts +61 -0
  11. package/dist/canvas/hooks.d.ts.map +1 -0
  12. package/dist/canvas/hooks.js +2 -0
  13. package/dist/canvas/hooks.js.map +1 -0
  14. package/dist/canvas/keys.d.ts +26 -0
  15. package/dist/canvas/keys.d.ts.map +1 -0
  16. package/dist/canvas/keys.js +133 -0
  17. package/dist/canvas/keys.js.map +1 -0
  18. package/dist/canvas/layout.d.ts +26 -0
  19. package/dist/canvas/layout.d.ts.map +1 -0
  20. package/dist/canvas/layout.js +73 -0
  21. package/dist/canvas/layout.js.map +1 -0
  22. package/dist/canvas/scroll.d.ts +31 -0
  23. package/dist/canvas/scroll.d.ts.map +1 -0
  24. package/dist/canvas/scroll.js +111 -0
  25. package/dist/canvas/scroll.js.map +1 -0
  26. package/dist/canvas/text.d.ts +23 -0
  27. package/dist/canvas/text.d.ts.map +1 -0
  28. package/dist/canvas/text.js +142 -0
  29. package/dist/canvas/text.js.map +1 -0
  30. package/dist/{theme.d.ts → canvas/theme.d.ts} +8 -0
  31. package/dist/canvas/theme.d.ts.map +1 -0
  32. package/dist/canvas/theme.js +62 -0
  33. package/dist/canvas/theme.js.map +1 -0
  34. package/dist/core/cache.d.ts +48 -0
  35. package/dist/core/cache.d.ts.map +1 -0
  36. package/dist/core/cache.js +222 -0
  37. package/dist/core/cache.js.map +1 -0
  38. package/dist/core/checked.d.ts +20 -0
  39. package/dist/core/checked.d.ts.map +1 -0
  40. package/dist/core/checked.js +61 -0
  41. package/dist/core/checked.js.map +1 -0
  42. package/dist/core/client.d.ts +33 -0
  43. package/dist/core/client.d.ts.map +1 -0
  44. package/dist/core/client.js +103 -0
  45. package/dist/core/client.js.map +1 -0
  46. package/dist/core/conditions.d.ts +48 -0
  47. package/dist/core/conditions.d.ts.map +1 -0
  48. package/dist/core/conditions.js +105 -0
  49. package/dist/core/conditions.js.map +1 -0
  50. package/dist/core/evaluate.d.ts +20 -0
  51. package/dist/core/evaluate.d.ts.map +1 -0
  52. package/dist/core/evaluate.js +210 -0
  53. package/dist/core/evaluate.js.map +1 -0
  54. package/dist/core/filters.d.ts +51 -0
  55. package/dist/core/filters.d.ts.map +1 -0
  56. package/dist/core/filters.js +303 -0
  57. package/dist/core/filters.js.map +1 -0
  58. package/dist/core/format.d.ts +14 -0
  59. package/dist/core/format.d.ts.map +1 -0
  60. package/dist/core/format.js +303 -0
  61. package/dist/core/format.js.map +1 -0
  62. package/dist/core/measures.d.ts +26 -0
  63. package/dist/core/measures.d.ts.map +1 -0
  64. package/dist/core/measures.js +105 -0
  65. package/dist/core/measures.js.map +1 -0
  66. package/dist/core/request-ids.d.ts +20 -0
  67. package/dist/core/request-ids.d.ts.map +1 -0
  68. package/dist/core/request-ids.js +55 -0
  69. package/dist/core/request-ids.js.map +1 -0
  70. package/dist/core/rows.d.ts +79 -0
  71. package/dist/core/rows.d.ts.map +1 -0
  72. package/dist/core/rows.js +173 -0
  73. package/dist/core/rows.js.map +1 -0
  74. package/dist/core/store.d.ts +233 -0
  75. package/dist/core/store.d.ts.map +1 -0
  76. package/dist/core/store.js +1162 -0
  77. package/dist/core/store.js.map +1 -0
  78. package/dist/core/totals.d.ts +24 -0
  79. package/dist/core/totals.d.ts.map +1 -0
  80. package/dist/core/totals.js +49 -0
  81. package/dist/core/totals.js.map +1 -0
  82. package/dist/core/trace.d.ts +7 -0
  83. package/dist/core/trace.d.ts.map +1 -0
  84. package/dist/core/trace.js +26 -0
  85. package/dist/core/trace.js.map +1 -0
  86. package/dist/core/transports.d.ts +50 -0
  87. package/dist/core/transports.d.ts.map +1 -0
  88. package/dist/core/transports.js +160 -0
  89. package/dist/core/transports.js.map +1 -0
  90. package/dist/core/types.d.ts +150 -0
  91. package/dist/core/types.d.ts.map +1 -0
  92. package/dist/core/types.js +45 -0
  93. package/dist/core/types.js.map +1 -0
  94. package/dist/core.d.ts +12 -0
  95. package/dist/core.d.ts.map +1 -0
  96. package/dist/core.js +11 -0
  97. package/dist/core.js.map +1 -0
  98. package/dist/index.d.ts +15 -6
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +13 -7
  101. package/dist/index.js.map +1 -1
  102. package/dist/react/accessible-rows.d.ts +13 -0
  103. package/dist/react/accessible-rows.d.ts.map +1 -0
  104. package/dist/react/accessible-rows.js +320 -0
  105. package/dist/react/accessible-rows.js.map +1 -0
  106. package/dist/react/cell-editor.d.ts +22 -0
  107. package/dist/react/cell-editor.d.ts.map +1 -0
  108. package/dist/react/cell-editor.js +431 -0
  109. package/dist/react/cell-editor.js.map +1 -0
  110. package/dist/react/cell-menu.d.ts +18 -0
  111. package/dist/react/cell-menu.d.ts.map +1 -0
  112. package/dist/react/cell-menu.js +299 -0
  113. package/dist/react/cell-menu.js.map +1 -0
  114. package/dist/react/column-menu.d.ts +16 -0
  115. package/dist/react/column-menu.d.ts.map +1 -0
  116. package/dist/react/column-menu.js +1311 -0
  117. package/dist/react/column-menu.js.map +1 -0
  118. package/dist/react/columns-menu.d.ts +7 -0
  119. package/dist/react/columns-menu.d.ts.map +1 -0
  120. package/dist/react/columns-menu.js +249 -0
  121. package/dist/react/columns-menu.js.map +1 -0
  122. package/dist/react/conditions-menu.d.ts +10 -0
  123. package/dist/react/conditions-menu.d.ts.map +1 -0
  124. package/dist/react/conditions-menu.js +795 -0
  125. package/dist/react/conditions-menu.js.map +1 -0
  126. package/dist/react/context.d.ts +29 -0
  127. package/dist/react/context.d.ts.map +1 -0
  128. package/dist/react/context.js +18 -0
  129. package/dist/react/context.js.map +1 -0
  130. package/dist/react/data-grid.d.ts +79 -0
  131. package/dist/react/data-grid.d.ts.map +1 -0
  132. package/dist/react/data-grid.js +653 -0
  133. package/dist/react/data-grid.js.map +1 -0
  134. package/dist/react/detail-panel.d.ts +22 -0
  135. package/dist/react/detail-panel.d.ts.map +1 -0
  136. package/dist/react/detail-panel.js +242 -0
  137. package/dist/react/detail-panel.js.map +1 -0
  138. package/dist/react/export-menu.d.ts +11 -0
  139. package/dist/react/export-menu.d.ts.map +1 -0
  140. package/dist/react/export-menu.js +304 -0
  141. package/dist/react/export-menu.js.map +1 -0
  142. package/dist/react/find-bar.d.ts +11 -0
  143. package/dist/react/find-bar.d.ts.map +1 -0
  144. package/dist/react/find-bar.js +303 -0
  145. package/dist/react/find-bar.js.map +1 -0
  146. package/dist/react/format-form.d.ts +12 -0
  147. package/dist/react/format-form.d.ts.map +1 -0
  148. package/dist/react/format-form.js +863 -0
  149. package/dist/react/format-form.js.map +1 -0
  150. package/dist/react/formula-menu.d.ts +6 -0
  151. package/dist/react/formula-menu.d.ts.map +1 -0
  152. package/dist/react/formula-menu.js +343 -0
  153. package/dist/react/formula-menu.js.map +1 -0
  154. package/dist/react/grid-body.d.ts +33 -0
  155. package/dist/react/grid-body.d.ts.map +1 -0
  156. package/dist/react/grid-body.js +1389 -0
  157. package/dist/react/grid-body.js.map +1 -0
  158. package/dist/react/group-menu.d.ts +7 -0
  159. package/dist/react/group-menu.d.ts.map +1 -0
  160. package/dist/react/group-menu.js +508 -0
  161. package/dist/react/group-menu.js.map +1 -0
  162. package/dist/react/hooks.d.ts +33 -0
  163. package/dist/react/hooks.d.ts.map +1 -0
  164. package/dist/react/hooks.js +161 -0
  165. package/dist/react/hooks.js.map +1 -0
  166. package/dist/react/messages.d.ts +180 -0
  167. package/dist/react/messages.d.ts.map +1 -0
  168. package/dist/react/messages.js +414 -0
  169. package/dist/react/messages.js.map +1 -0
  170. package/dist/react/save.d.ts +9 -0
  171. package/dist/react/save.d.ts.map +1 -0
  172. package/dist/react/save.js +102 -0
  173. package/dist/react/save.js.map +1 -0
  174. package/dist/react/static-rows.d.ts +9 -0
  175. package/dist/react/static-rows.d.ts.map +1 -0
  176. package/dist/react/static-rows.js +176 -0
  177. package/dist/react/static-rows.js.map +1 -0
  178. package/dist/react/status-bar.d.ts +12 -0
  179. package/dist/react/status-bar.d.ts.map +1 -0
  180. package/dist/react/status-bar.js +413 -0
  181. package/dist/react/status-bar.js.map +1 -0
  182. package/dist/react/toolbar-popover.d.ts +14 -0
  183. package/dist/react/toolbar-popover.d.ts.map +1 -0
  184. package/dist/react/toolbar-popover.js +143 -0
  185. package/dist/react/toolbar-popover.js.map +1 -0
  186. package/dist/react/toolbar.d.ts +13 -0
  187. package/dist/react/toolbar.d.ts.map +1 -0
  188. package/dist/react/toolbar.js +344 -0
  189. package/dist/react/toolbar.js.map +1 -0
  190. package/dist/server.d.ts +22 -0
  191. package/dist/server.d.ts.map +1 -0
  192. package/dist/server.js +45 -0
  193. package/dist/server.js.map +1 -0
  194. package/dist/styles.css +496 -316
  195. package/package.json +43 -18
  196. package/src/canvas/geometry.ts +197 -0
  197. package/src/canvas/grid-canvas.ts +1222 -0
  198. package/src/canvas/hooks.ts +61 -0
  199. package/src/canvas/keys.ts +96 -0
  200. package/src/canvas/layout.ts +77 -0
  201. package/src/canvas/scroll.ts +120 -0
  202. package/src/canvas/text.ts +155 -0
  203. package/src/{theme.ts → canvas/theme.ts} +14 -1
  204. package/src/core/cache.ts +247 -0
  205. package/src/core/checked.ts +64 -0
  206. package/src/core/client.ts +103 -0
  207. package/src/core/conditions.ts +89 -0
  208. package/src/core/evaluate.ts +221 -0
  209. package/src/core/filters.ts +268 -0
  210. package/src/core/format.ts +309 -0
  211. package/src/core/measures.ts +99 -0
  212. package/src/core/request-ids.ts +54 -0
  213. package/src/core/rows.ts +213 -0
  214. package/src/core/store.ts +1122 -0
  215. package/src/core/totals.ts +59 -0
  216. package/src/core/trace.ts +44 -0
  217. package/src/core/transports.ts +177 -0
  218. package/src/core/types.ts +168 -0
  219. package/src/core.ts +39 -0
  220. package/src/index.ts +24 -12
  221. package/src/react/accessible-rows.tsx +242 -0
  222. package/src/react/cell-editor.tsx +216 -0
  223. package/src/react/cell-menu.tsx +166 -0
  224. package/src/react/column-menu.tsx +619 -0
  225. package/src/react/columns-menu.tsx +116 -0
  226. package/src/react/conditions-menu.tsx +289 -0
  227. package/src/react/context.ts +33 -0
  228. package/src/react/data-grid.tsx +286 -0
  229. package/src/react/detail-panel.tsx +92 -0
  230. package/src/react/export-menu.tsx +112 -0
  231. package/src/react/find-bar.tsx +112 -0
  232. package/src/react/format-form.tsx +421 -0
  233. package/src/react/formula-menu.tsx +163 -0
  234. package/src/react/grid-body.tsx +744 -0
  235. package/src/react/group-menu.tsx +214 -0
  236. package/src/react/hooks.ts +104 -0
  237. package/src/react/messages.ts +556 -0
  238. package/src/react/save.ts +42 -0
  239. package/src/react/static-rows.tsx +59 -0
  240. package/src/react/status-bar.tsx +175 -0
  241. package/src/react/toolbar-popover.tsx +69 -0
  242. package/src/react/toolbar.tsx +152 -0
  243. package/src/server.ts +58 -0
  244. package/src/styles.css +496 -316
  245. package/dist/components/bars.d.ts +0 -14
  246. package/dist/components/bars.d.ts.map +0 -1
  247. package/dist/components/bars.js +0 -67
  248. package/dist/components/bars.js.map +0 -1
  249. package/dist/components/cell-inspector.d.ts +0 -11
  250. package/dist/components/cell-inspector.d.ts.map +0 -1
  251. package/dist/components/cell-inspector.js +0 -37
  252. package/dist/components/cell-inspector.js.map +0 -1
  253. package/dist/components/columns-panel.d.ts +0 -12
  254. package/dist/components/columns-panel.d.ts.map +0 -1
  255. package/dist/components/columns-panel.js +0 -11
  256. package/dist/components/columns-panel.js.map +0 -1
  257. package/dist/components/filter-panel.d.ts +0 -17
  258. package/dist/components/filter-panel.d.ts.map +0 -1
  259. package/dist/components/filter-panel.js +0 -165
  260. package/dist/components/filter-panel.js.map +0 -1
  261. package/dist/components/find-bar.d.ts +0 -9
  262. package/dist/components/find-bar.d.ts.map +0 -1
  263. package/dist/components/find-bar.js +0 -46
  264. package/dist/components/find-bar.js.map +0 -1
  265. package/dist/components/popover.d.ts +0 -38
  266. package/dist/components/popover.d.ts.map +0 -1
  267. package/dist/components/popover.js +0 -104
  268. package/dist/components/popover.js.map +0 -1
  269. package/dist/components/stats-panel.d.ts +0 -12
  270. package/dist/components/stats-panel.d.ts.map +0 -1
  271. package/dist/components/stats-panel.js +0 -40
  272. package/dist/components/stats-panel.js.map +0 -1
  273. package/dist/controller.d.ts +0 -218
  274. package/dist/controller.d.ts.map +0 -1
  275. package/dist/controller.js +0 -788
  276. package/dist/controller.js.map +0 -1
  277. package/dist/data-grid.d.ts +0 -51
  278. package/dist/data-grid.d.ts.map +0 -1
  279. package/dist/data-grid.js +0 -698
  280. package/dist/data-grid.js.map +0 -1
  281. package/dist/labels.d.ts +0 -9
  282. package/dist/labels.d.ts.map +0 -1
  283. package/dist/labels.js +0 -38
  284. package/dist/labels.js.map +0 -1
  285. package/dist/messages.d.ts +0 -99
  286. package/dist/messages.d.ts.map +0 -1
  287. package/dist/messages.js +0 -276
  288. package/dist/messages.js.map +0 -1
  289. package/dist/renderer.d.ts +0 -52
  290. package/dist/renderer.d.ts.map +0 -1
  291. package/dist/renderer.js +0 -522
  292. package/dist/renderer.js.map +0 -1
  293. package/dist/text.d.ts +0 -14
  294. package/dist/text.d.ts.map +0 -1
  295. package/dist/text.js +0 -63
  296. package/dist/text.js.map +0 -1
  297. package/dist/theme.d.ts.map +0 -1
  298. package/dist/theme.js +0 -54
  299. package/dist/theme.js.map +0 -1
  300. package/src/components/bars.tsx +0 -179
  301. package/src/components/cell-inspector.tsx +0 -70
  302. package/src/components/columns-panel.tsx +0 -59
  303. package/src/components/filter-panel.tsx +0 -290
  304. package/src/components/find-bar.tsx +0 -104
  305. package/src/components/popover.tsx +0 -194
  306. package/src/components/stats-panel.tsx +0 -153
  307. package/src/controller.ts +0 -887
  308. package/src/data-grid.tsx +0 -1029
  309. package/src/labels.ts +0 -46
  310. package/src/messages.ts +0 -390
  311. package/src/renderer.ts +0 -535
  312. package/src/text.ts +0 -55
@@ -0,0 +1 @@
1
+ {"version":3,"names":["columnsOf","partsOf","textOf","allState","checkState","compileRule","formatterFor","now","track","CHECK_WIDTH","Geometry","MENU_WIDTH","ColumnLayout","fitFrozen","TextFitter","cssLength","resolveTheme","PADDING","MIN_WIDTH","MAX_AUTO_WIDTH","DEFAULT_WRAP_LINES","SETTLE_MS","isNumeric","column","type","defaultWidth","depthOf","groups","depth","item","Math","max","children","groupPaths","columns","rows","paths","Map","id","walk","items","path","has","set","name","map","get","Array","from","length","_","level","GridCanvas","geometry","dropX","wrapLines","hooks","baseRowHeight","locale","undefined","formatters","rules","ruleColumns","store","elements","context","theme","cellText","headerText","ratio","frame","snapshot","index","measured","resizing","texts","textsView","settled","top","left","right","version","settledListeners","Set","scrolling","lastActive","lastScroll","lastView","durations","frameListeners","constructor","options","previewDrop","x","schedule","previewWidth","width","round","relayout","setHooks","clear","setColumnGroups","groupHeight","groupHeaderHeight","refreshTheme","setWrapLines","lines","next","floor","setCheckboxes","on","checkboxes","setLocale","wrappedHeight","wraps","some","setting","format","wrap","lineHeight","ceil","setSizes","rowHeight","headerHeight","attach","canvas","getContext","alpha","getSnapshot","session","active","scroll","scroller","resize","clientWidth","height","clientHeight","observer","ResizeObserver","observe","onScroll","addEventListener","passive","stopState","subscribe","onState","stopRows","subscribeRows","onRows","media","matchMedia","refresh","themeObserver","MutationObserver","marks","attributes","attributeFilter","document","documentElement","body","grid","root","closest","fonts","ready","then","scrollToRow","row","disconnect","removeEventListener","clearTimeout","settleTimer","cancelAnimationFrame","font","headerFont","nameHeight","groupRows","groupTop","previous","displayed","view","rowCount","totals","measure","topRow","reveal","bumpSettled","position","widths","layout","read","formatter","styles","flatMap","style","compiled","when","add","rule","color","background","description","filter","pin","plan","aggregate","total","footer","digits","String","gutterWidth","fitted","frozenLeft","frozenRight","scrollY","scrollX","sizer","updateViewport","first","last","visibleScrollColumns","fitter","header","visibleRows","changed","forEach","before","loaded","widest","label","min","value","cell","text","slice","totalText","onNativeScroll","scrollLeft","scrollTop","setTimeout","reportScroll","names","push","rightStart","includes","setViewport","place","bottom","y","target","scrollTo","start","frozenWidth","room","frozenRightWidth","current","dispatch","command","getSettled","subscribeSettled","listener","delete","key","kept","shown","size","subscribeFrames","requestAnimationFrame","draw","started","paint","duration","shift","frameTimes","resizeCanvas","devicePixelRatio","pixelWidth","pixelHeight","setTransform","snap","ctx","fillStyle","fillRect","scrollRight","regions","x0","x1","to","clipped","drawCells","drawLines","drawSelection","drawHeaders","drawGutter","drawTotals","headerBackground","all","checked","drawCheck","strokeStyle","lineStrong","lineWidth","beginPath","headerLine","moveTo","lineTo","gutterLine","edge","stroke","pending","globalAlpha","columnX","accent","save","rect","clip","restore","numeric","align","textBaseline","textAlign","textX","rowY","placeholder","cellStyleOf","action","actionOf","drawDefault","isCut","kind","link","fit","line","middle","fillText","fontSize","drawCell","ranges","selection","visible","y0","y1","range","area","single","selectionBorder","strokeRect","activeBorder","sort","filtered","part","where","nameMiddle","at","findIndex","mark","direction","space","center","muted","closePath","fill","drawGroups","groupSpan","region","groupNames","group","gutterBackground","headerActive","gutterText","rowKey","hook","cellStyle","styleOf","cellAction","actionAt","columnIndex","find","state","accentText","values"],"sources":["grid-canvas.ts"],"sourcesContent":["import { type Column, columnsOf, type DisplayedColumn, type JsonValue, partsOf, textOf } from \"vastgrid-spec\";\nimport { allState, checkState } from \"../core/checked.js\";\nimport { compileRule, type Rule } from \"../core/evaluate.js\";\nimport { formatterFor } from \"../core/format.js\";\nimport type { GridStore } from \"../core/store.js\";\nimport { now, track } from \"../core/trace.js\";\nimport type { GridSnapshot } from \"../core/types.js\";\nimport { CHECK_WIDTH, Geometry, MENU_WIDTH } from \"./geometry.js\";\nimport type { CellAction, CellHooks, CellStyle, ColumnGroup, GridCell } from \"./hooks.js\";\nimport { ColumnLayout, fitFrozen } from \"./layout.js\";\nimport { TextFitter } from \"./text.js\";\nimport { cssLength, type GridTheme, resolveTheme } from \"./theme.js\";\n\nconst PADDING = 8;\nconst MIN_WIDTH = 40;\nconst MAX_AUTO_WIDTH = 360;\n/** Lines of a row while a displayed column wraps its text (§5.1 of the specification). */\nconst DEFAULT_WRAP_LINES = 2;\n/** How long scrolling must pause before the accessibility rows and the session follow (§6.1 of react.md). */\nconst SETTLE_MS = 150;\n\n/** The rows on screen once scrolling pauses, for the accessibility rows. */\nexport interface Settled {\n top: number;\n rows: number;\n /** The first and last display positions on screen. */\n left: number;\n right: number;\n version: number;\n}\n\nexport interface CanvasElements {\n root: HTMLElement;\n canvas: HTMLCanvasElement;\n scroller: HTMLElement;\n sizer: HTMLElement;\n}\n\nexport interface CanvasOptions {\n rowHeight?: number;\n headerHeight?: number;\n groupHeaderHeight?: number;\n}\n\nfunction isNumeric(column: Column) {\n return column.type === \"integer\" || column.type === \"bigint\" || column.type === \"decimal\" || column.type === \"float\";\n}\n\n/** The width a column starts with before its values are measured. */\nfunction defaultWidth(column: Column) {\n switch (column.type) {\n case \"boolean\":\n return 72;\n case \"integer\":\n case \"bigint\":\n case \"float\":\n case \"decimal\":\n return 104;\n case \"date\":\n case \"time\":\n return 112;\n case \"timestamp\":\n case \"timestamptz\":\n return 176;\n default:\n return 160;\n }\n}\n\n/** The rows of groups that a list of groups needs: the depth of its nesting. */\nfunction depthOf(groups: readonly (string | ColumnGroup)[]): number {\n let depth = 0;\n for (const item of groups) if (typeof item !== \"string\") depth = Math.max(depth, 1 + depthOf(item.children));\n return depth;\n}\n\n/**\n * The group of each displayed column in each of `rows` rows of groups, the innermost group in the row just above the\n * names. A column named in several groups takes the first.\n */\nfunction groupPaths(\n groups: readonly ColumnGroup[],\n columns: readonly DisplayedColumn[],\n rows: number,\n): ({ id: number; name: string } | null)[][] {\n const paths = new Map<string, { id: number; name: string }[]>();\n let id = 0;\n const walk = (items: readonly (string | ColumnGroup)[], path: { id: number; name: string }[]) => {\n for (const item of items) {\n if (typeof item === \"string\") {\n if (!paths.has(item)) paths.set(item, path);\n } else {\n walk(item.children, [...path, { id: id++, name: item.name }]);\n }\n }\n };\n walk(groups, []);\n return columns.map((item) => {\n const path = paths.get(item.column.name) ?? [];\n return Array.from({ length: rows }, (_, level) => path[level - (rows - path.length)] ?? null);\n });\n}\n\n/**\n * Draws the view on screen of a store onto a canvas and scrolls it, without React (§1 and §6 of react.md):\n * cells, headers, row numbers, the selection and the columns pinned at each side, at most once per frame and only\n * what is on screen. It tells the store which rows it shows, so that the store reads them.\n */\nexport class GridCanvas {\n readonly geometry = new Geometry();\n /** Where dragged columns would go, while a header is dragged. */\n private dropX: number | null = null;\n private wrapLines = DEFAULT_WRAP_LINES;\n private hooks: CellHooks = {};\n private groups: readonly ColumnGroup[] = [];\n /** The row height of the theme or the props; rows are taller while a column wraps. */\n private baseRowHeight = 24;\n private locale: string | undefined = undefined;\n /** By column name: the text of its values by its format, and its style rules (§5.1). */\n private formatters = new Map<string, (value: JsonValue) => string | null>();\n private rules = new Map<string, { rule: Rule; color?: string; background?: string; description?: string }[]>();\n /** Columns that the style rules read besides those on screen. */\n private ruleColumns: string[] = [];\n private store: GridStore | null = null;\n private elements: CanvasElements | null = null;\n private context: CanvasRenderingContext2D | null = null;\n private theme: GridTheme | null = null;\n private cellText: TextFitter | null = null;\n private headerText: TextFitter | null = null;\n private ratio = 1;\n private frame = 0;\n private snapshot: GridSnapshot | null = null;\n private columns: readonly DisplayedColumn[] = [];\n private index = new Map<string, number>();\n private readonly measured = new Map<string, number>();\n private resizing: { column: number; width: number } | null = null;\n private texts = new Map<string, { value: JsonValue; text: string }>();\n private textsView: unknown = null;\n private settleTimer: ReturnType<typeof setTimeout> | undefined;\n private settled: Settled = { top: 0, rows: 0, left: 0, right: -1, version: 0 };\n private readonly settledListeners = new Set<() => void>();\n private scrolling = false;\n private lastActive: unknown = null;\n private lastScroll: unknown = null;\n private lastView: unknown = null;\n private durations: number[] = [];\n private readonly frameListeners = new Set<() => void>();\n\n constructor(private options: CanvasOptions = {}) {}\n\n /** Shows where dragged columns would go, a line at `x`, or nothing. */\n previewDrop(x: number | null) {\n if (this.dropX === x) return;\n this.dropX = x;\n this.schedule();\n }\n\n /** Shows a column at a width while it is dragged, before the command that sets it. */\n previewWidth(column: number, width: number | null) {\n this.resizing = width === null ? null : { column, width: Math.max(MIN_WIDTH, Math.round(width)) };\n this.relayout();\n }\n\n /** Text, colors, drawing and actions of cells from the host (§5.1: they win over the document). */\n setHooks(hooks: CellHooks) {\n this.hooks = hooks;\n this.texts.clear();\n this.schedule();\n }\n\n /** Groups of columns in header rows above the names, each `groupHeight` pixels high (or the CSS's). */\n setColumnGroups(groups: readonly ColumnGroup[] | undefined, groupHeight: number | undefined) {\n this.groups = groups ?? [];\n this.options = { ...this.options, groupHeaderHeight: groupHeight };\n this.refreshTheme();\n this.relayout();\n }\n\n /** How many lines rows have while a displayed column wraps its text. */\n setWrapLines(lines: number | undefined) {\n const next = Math.max(1, Math.floor(lines ?? DEFAULT_WRAP_LINES));\n if (next === this.wrapLines) return;\n this.wrapLines = next;\n this.relayout();\n }\n\n /** Shows a check box for each row in the gutter, and one for every row in the corner. */\n setCheckboxes(on: boolean) {\n if (this.geometry.checkboxes === on) return;\n this.geometry.checkboxes = on;\n this.relayout();\n }\n\n /** The language that formats show numbers and dates in (§5.1). */\n setLocale(locale: string | undefined) {\n if (this.locale === locale) return;\n this.locale = locale;\n this.relayout();\n }\n\n /** The row height for displayed columns: room for `WRAP_LINES` lines when one of them wraps. */\n private wrappedHeight(columns: readonly DisplayedColumn[]) {\n const wraps = columns.some((item) => item.setting.format?.wrap === true);\n const lineHeight = this.theme?.lineHeight ?? 16;\n return wraps ? Math.max(this.baseRowHeight, Math.ceil(lineHeight * this.wrapLines + 8)) : this.baseRowHeight;\n }\n\n /** Row and header heights given as props, instead of the CSS custom properties. */\n setSizes(rowHeight: number | undefined, headerHeight: number | undefined) {\n if (this.options.rowHeight === rowHeight && this.options.headerHeight === headerHeight) return;\n this.options = { ...this.options, rowHeight, headerHeight };\n this.refreshTheme();\n this.relayout();\n }\n\n // ----- attaching -----\n\n /** Draws `store` into the elements and follows both; gives the function that stops it. */\n attach(elements: CanvasElements, store: GridStore): () => void {\n this.elements = elements;\n this.store = store;\n const context = elements.canvas.getContext(\"2d\", { alpha: false });\n this.context = context;\n this.refreshTheme();\n this.snapshot = store.getSnapshot();\n this.lastActive = this.snapshot.session.active;\n this.lastScroll = this.snapshot.session.scroll;\n this.relayout();\n const { scroller } = elements;\n const resize = () => {\n this.geometry.width = scroller.clientWidth;\n this.geometry.height = scroller.clientHeight;\n this.relayout();\n };\n resize();\n const observer = typeof ResizeObserver === \"undefined\" ? null : new ResizeObserver(resize);\n observer?.observe(scroller);\n const onScroll = () => this.onScroll();\n scroller.addEventListener(\"scroll\", onScroll, { passive: true });\n const stopState = store.subscribe(() => this.onState());\n const stopRows = store.subscribeRows(() => this.onRows());\n const media = typeof matchMedia === \"undefined\" ? null : matchMedia(\"(prefers-color-scheme: dark)\");\n const refresh = () => {\n this.refreshTheme();\n this.relayout();\n };\n media?.addEventListener(\"change\", refresh);\n const themeObserver = typeof MutationObserver === \"undefined\" ? null : new MutationObserver(refresh);\n // Pages mark their theme on the root element, and hosts on the body too: VS Code's webviews by a class\n // (`vscode-dark`), JupyterLab by `data-jp-theme-light`.\n const marks = { attributes: true, attributeFilter: [\"class\", \"style\", \"data-theme\", \"data-jp-theme-light\"] };\n themeObserver?.observe(document.documentElement, marks);\n if (document.body) themeObserver?.observe(document.body, marks);\n // And the grid's own class and style, as `className` and `style` of DataGrid set them.\n const grid = elements.root.closest(\".vg-root\") ?? elements.root;\n themeObserver?.observe(grid, { attributes: true, attributeFilter: [\"class\", \"style\"] });\n void document.fonts?.ready.then(refresh);\n // The session's place (§5.2) when the grid starts.\n const scroll = this.snapshot.session.scroll;\n if (scroll) this.scrollToRow(scroll.row, \"top\");\n this.schedule();\n return () => {\n observer?.disconnect();\n scroller.removeEventListener(\"scroll\", onScroll);\n stopState();\n stopRows();\n media?.removeEventListener(\"change\", refresh);\n themeObserver?.disconnect();\n clearTimeout(this.settleTimer);\n if (this.frame) cancelAnimationFrame(this.frame);\n this.frame = 0;\n this.elements = null;\n this.store = null;\n this.context = null;\n };\n }\n\n /** Reads the theme again, after the grid's class or style changed. */\n refreshTheme() {\n const elements = this.elements;\n if (!elements || !this.context) return;\n const theme = resolveTheme(elements.root);\n this.theme = theme;\n this.cellText = new TextFitter(this.context, theme.font);\n this.headerText = new TextFitter(this.context, theme.headerFont);\n this.baseRowHeight = this.options.rowHeight ?? cssLength(elements.root, \"--vg-row-height\", 24);\n this.geometry.rowHeight = this.wrappedHeight(this.columns);\n this.geometry.nameHeight = this.options.headerHeight ?? cssLength(elements.root, \"--vg-header-height\", 32);\n this.geometry.groupHeight =\n this.options.groupHeaderHeight ?? cssLength(elements.root, \"--vg-group-header-height\", 24);\n this.geometry.groupRows = depthOf(this.groups);\n this.geometry.headerHeight = this.geometry.groupTop + this.geometry.nameHeight;\n this.texts.clear();\n this.schedule();\n }\n\n // ----- following the store -----\n\n private onState() {\n const store = this.store;\n if (!store) return;\n const previous = this.snapshot;\n const snapshot = store.getSnapshot();\n this.snapshot = snapshot;\n if (snapshot.displayed !== previous?.displayed || snapshot.view?.rowCount !== previous?.view?.rowCount) {\n this.relayout();\n }\n // Totals that come widen their columns as rows do.\n if (snapshot.totals !== previous?.totals) this.measure();\n if (snapshot.view !== this.lastView) {\n this.lastView = snapshot.view;\n this.texts.clear();\n }\n const session = snapshot.session;\n if (session.scroll !== this.lastScroll) {\n this.lastScroll = session.scroll;\n // A place set by a command or by view.update (§5.4), not the one this canvas reported.\n if (session.scroll && session.scroll.row !== this.geometry.topRow()) this.scrollToRow(session.scroll.row, \"top\");\n }\n if (session.active !== this.lastActive) {\n this.lastActive = session.active;\n if (session.active) {\n const column = this.index.get(session.active.column);\n if (column !== undefined) this.reveal(session.active.row, column);\n }\n }\n this.schedule();\n }\n\n private onRows() {\n this.measure();\n if (!this.scrolling) this.bumpSettled();\n this.schedule();\n }\n\n /** The columns and their widths for the displayed columns of the snapshot. */\n relayout() {\n const snapshot = this.snapshot;\n const columns = snapshot?.displayed ?? [];\n this.columns = columns;\n this.index = new Map(columns.map((item, position) => [item.column.name, position]));\n const widths = columns.map((item, position) =>\n this.resizing?.column === position\n ? this.resizing.width\n : (item.setting.width ?? this.measured.get(item.column.name) ?? defaultWidth(item.column)),\n );\n this.geometry.layout = new ColumnLayout(widths);\n this.geometry.rowHeight = this.wrappedHeight(columns);\n this.formatters = new Map();\n this.rules = new Map();\n const read = new Set<string>();\n const view = snapshot?.view?.columns ?? [];\n for (const item of columns) {\n const format = item.setting.format;\n const formatter = formatterFor(item.column, format, this.locale);\n if (formatter) this.formatters.set(item.column.name, formatter);\n const rules = (format?.styles ?? []).flatMap((style) => {\n // A rule whose `when` the grid does not evaluate over the view is skipped (§5.1).\n const compiled = compileRule(style.when, view);\n if (!compiled) return [];\n for (const name of compiled.columns) read.add(name);\n return [\n { rule: compiled.rule, color: style.color, background: style.background, description: style.description },\n ];\n });\n if (rules.length > 0) this.rules.set(item.column.name, rules);\n }\n this.ruleColumns = [...read];\n this.geometry.groupPaths = groupPaths(this.groups, columns, this.geometry.groupRows);\n this.texts.clear();\n const left = columns.filter((item) => item.setting.pin === \"left\").length;\n const right = columns.filter((item) => item.setting.pin === \"right\").length;\n const rowCount = snapshot?.view?.rowCount ?? 0;\n this.geometry.rowCount = rowCount;\n const totals = !snapshot?.document.plan?.aggregate && columns.some((item) => item.setting.total !== undefined);\n this.geometry.footer = totals ? this.geometry.rowHeight : 0;\n const digits = String(Math.max(1, rowCount)).length;\n this.geometry.gutterWidth =\n Math.max(40, Math.ceil(digits * 8 + PADDING * 2)) + (this.geometry.checkboxes ? CHECK_WIDTH : 0);\n const fitted = fitFrozen(this.geometry.layout, left, right, this.geometry.width - this.geometry.gutterWidth);\n this.geometry.frozenLeft = fitted.left;\n this.geometry.frozenRight = fitted.right;\n const elements = this.elements;\n if (elements) {\n const height = this.geometry.scrollY.resize(\n this.geometry.headerHeight + rowCount * this.geometry.rowHeight + this.geometry.footer,\n this.geometry.height,\n );\n const width = this.geometry.scrollX.resize(\n this.geometry.gutterWidth + this.geometry.layout.total,\n this.geometry.width,\n );\n elements.sizer.style.width = `${width}px`;\n elements.sizer.style.height = `${height}px`;\n }\n this.updateViewport();\n // Columns that came or went (a derived column, a hidden one) change the columns on screen.\n const [first, last] = this.geometry.visibleScrollColumns();\n if (!this.scrolling && (first !== this.settled.left || last !== this.settled.right)) this.bumpSettled();\n this.schedule();\n }\n\n /** Fits the columns without a width to the values on screen, growing them only. */\n private measure() {\n const store = this.store;\n const fitter = this.cellText;\n const header = this.headerText;\n const context = this.context;\n if (!store || !fitter || !header || !context) return;\n const [first, last] = this.geometry.visibleRows();\n let changed = false;\n this.columns.forEach((item) => {\n const name = item.column.name;\n if (item.setting.width !== undefined) return;\n const before = this.measured.get(name);\n if (before !== undefined && before >= MAX_AUTO_WIDTH) return;\n let loaded = false;\n context.font = header.font;\n let widest = Math.max(\n before ?? 0,\n header.width(item.setting.format?.label ?? name) + PADDING * 2 + 18 + MENU_WIDTH,\n );\n context.font = fitter.font;\n for (let row = first; row < Math.min(last, first + 200); row++) {\n const value = store.cell(row, name);\n if (value === undefined) continue;\n loaded = true;\n const text = this.text(row, item.column, value);\n if (text) widest = Math.max(widest, fitter.width(text.length > 120 ? text.slice(0, 120) : text) + PADDING * 2);\n }\n const total = this.totalText(item.column.name);\n if (total) widest = Math.max(widest, fitter.width(total) + PADDING * 2);\n if (!loaded) return;\n // Columns grow to fit the rows that come on screen, and never shrink while the view stays.\n const width = Math.min(MAX_AUTO_WIDTH, Math.max(MIN_WIDTH, Math.ceil(widest)));\n if (width === before) return;\n this.measured.set(name, width);\n changed = true;\n });\n if (changed) this.relayout();\n }\n\n // ----- scrolling -----\n\n private onScroll() {\n const scroller = this.elements?.scroller;\n if (!scroller) return;\n this.geometry.scrollX.onNativeScroll(scroller.scrollLeft);\n this.geometry.scrollY.onNativeScroll(scroller.scrollTop);\n this.scrolling = true;\n this.updateViewport();\n this.schedule();\n clearTimeout(this.settleTimer);\n this.settleTimer = setTimeout(() => {\n this.scrolling = false;\n this.bumpSettled();\n this.reportScroll();\n }, SETTLE_MS);\n }\n\n private updateViewport() {\n const store = this.store;\n if (!store) return;\n const [first, last] = this.geometry.visibleRows();\n const [left, right] = this.geometry.visibleScrollColumns();\n const names: string[] = [];\n for (let column = 0; column < this.geometry.frozenLeft; column++) names.push(this.columns[column].column.name);\n for (let column = left; column <= right; column++) names.push(this.columns[column].column.name);\n for (let column = this.geometry.rightStart; column < this.columns.length; column++) {\n names.push(this.columns[column].column.name);\n }\n for (const name of this.ruleColumns) if (!names.includes(name)) names.push(name);\n store.setViewport({ top: first, rows: Math.max(1, last - first), columns: names });\n }\n\n /** Scrolls so that a row is at the top, or just visible. */\n scrollToRow(row: number, place: \"top\" | \"nearest\") {\n const scroller = this.elements?.scroller;\n if (!scroller) return;\n const body = Math.max(this.geometry.rowHeight, this.geometry.bottom - this.geometry.headerHeight);\n const y = row * this.geometry.rowHeight;\n let target = this.geometry.scrollY.position;\n if (place === \"top\") target = y;\n else if (y < target) target = y;\n else if (y + this.geometry.rowHeight > target + body) target = y + this.geometry.rowHeight - body;\n if (target === this.geometry.scrollY.position) return;\n scroller.scrollTop = this.geometry.scrollY.scrollTo(target);\n this.updateViewport();\n this.schedule();\n }\n\n /** Scrolls so that a cell is on screen. */\n reveal(row: number, column: number) {\n this.scrollToRow(row, \"nearest\");\n const scroller = this.elements?.scroller;\n if (!scroller || column < this.geometry.frozenLeft || column >= this.geometry.rightStart) return;\n const left = this.geometry.layout.left(column);\n const right = this.geometry.layout.right(column);\n const start = this.geometry.frozenWidth + this.geometry.scrollX.position;\n const room = this.geometry.width - this.geometry.gutterWidth - this.geometry.frozenRightWidth;\n let target = this.geometry.scrollX.position;\n if (left < start) target = left - this.geometry.frozenWidth;\n else if (right > this.geometry.scrollX.position + room) target = right - room;\n if (target !== this.geometry.scrollX.position) {\n scroller.scrollLeft = this.geometry.scrollX.scrollTo(target);\n this.updateViewport();\n this.schedule();\n }\n }\n\n /** Puts the place on screen in the session (§5.2) once scrolling pauses. */\n private reportScroll() {\n const store = this.store;\n const snapshot = this.snapshot;\n if (!store || !snapshot?.view || this.columns.length === 0) return;\n const row = this.geometry.topRow();\n const [left] = this.geometry.visibleScrollColumns();\n const column = this.columns[Math.max(left, 0)]?.column.name;\n const current = snapshot.session.scroll;\n if (current?.row === row && current.column === column) return;\n void store.dispatch(column === undefined ? { command: \"scroll.to\", row } : { command: \"scroll.to\", row, column });\n }\n\n // ----- the accessibility rows -----\n\n getSettled = (): Settled => this.settled;\n\n subscribeSettled = (listener: () => void): (() => void) => {\n this.settledListeners.add(listener);\n return () => {\n this.settledListeners.delete(listener);\n };\n };\n\n private bumpSettled() {\n const [top, last] = this.geometry.visibleRows();\n const [left, right] = this.geometry.visibleScrollColumns();\n this.settled = { top, rows: last - top, left, right, version: this.settled.version + 1 };\n for (const listener of this.settledListeners) listener();\n }\n\n /** The text of a cell as the grid shows it: the value's text form (§2.4). */\n text(row: number, column: Column, value: JsonValue): string {\n if (value === null) return \"\";\n if (this.textsView !== this.snapshot?.view) {\n this.textsView = this.snapshot?.view;\n this.texts.clear();\n }\n const key = `${row}\\u0000${column.name}`;\n // Kept with its value: a cell shows another value while a write of it is being answered.\n const kept = this.texts.get(key);\n if (kept !== undefined && kept.value === value) return kept.text;\n const shown = this.formatters.get(column.name)?.(value) ?? textOf(value, column) ?? \"\";\n const text = this.hooks.cellText?.({ row, column, value, text: shown }) ?? shown;\n if (this.texts.size > 50_000) this.texts.clear();\n this.texts.set(key, { value, text });\n return text;\n }\n\n /** Follows the frames the canvas draws, for what is placed over it (the cell editor). */\n subscribeFrames = (listener: () => void): (() => void) => {\n this.frameListeners.add(listener);\n return () => {\n this.frameListeners.delete(listener);\n };\n };\n\n // ----- drawing -----\n\n schedule() {\n if (this.frame || !this.elements) return;\n this.frame = requestAnimationFrame(() => {\n this.frame = 0;\n this.draw();\n });\n }\n\n /** Draws now, as layout effects do before the browser paints. */\n draw() {\n if (!this.context || !this.theme || !this.elements) return;\n const started = now();\n this.paint(this.context, this.theme);\n const duration = now() - started;\n this.durations.push(duration);\n if (this.durations.length > 240) this.durations.shift();\n track(\"frame\", started, \"canvas\", \"secondary\");\n for (const listener of this.frameListeners) listener();\n }\n\n /** Durations of the recent frames in milliseconds, for the bench. */\n frameTimes(): readonly number[] {\n return this.durations;\n }\n\n private resizeCanvas(context: CanvasRenderingContext2D) {\n const canvas = context.canvas;\n const ratio = typeof devicePixelRatio === \"number\" ? devicePixelRatio : 1;\n const pixelWidth = Math.max(1, Math.round(this.geometry.width * ratio));\n const pixelHeight = Math.max(1, Math.round(this.geometry.height * ratio));\n if (canvas.width !== pixelWidth || canvas.height !== pixelHeight || this.ratio !== ratio) {\n canvas.width = pixelWidth;\n canvas.height = pixelHeight;\n canvas.style.width = `${this.geometry.width}px`;\n canvas.style.height = `${this.geometry.height}px`;\n this.ratio = ratio;\n }\n context.setTransform(ratio, 0, 0, ratio, 0, 0);\n }\n\n /** A position for a line one device pixel wide. */\n private snap(value: number) {\n return (Math.round(value * this.ratio) + 0.5) / this.ratio;\n }\n\n private paint(ctx: CanvasRenderingContext2D, theme: GridTheme) {\n this.resizeCanvas(ctx);\n ctx.fillStyle = theme.background;\n ctx.fillRect(0, 0, this.geometry.width, this.geometry.height);\n const snapshot = this.snapshot;\n const store = this.store;\n if (!snapshot?.view || !store || this.columns.length === 0) return;\n const [first, last] = this.geometry.visibleRows();\n const [left, right] = this.geometry.visibleScrollColumns();\n const top = this.geometry.headerHeight;\n const scrollLeft = this.geometry.gutterWidth + this.geometry.frozenWidth;\n const scrollRight = this.geometry.width - this.geometry.frozenRightWidth;\n const regions: [number, number, number, number][] = [\n [scrollLeft, scrollRight, left, right],\n [this.geometry.gutterWidth, scrollLeft, 0, this.geometry.frozenLeft - 1],\n [scrollRight, this.geometry.width, this.geometry.rightStart, this.columns.length - 1],\n ];\n for (const [x0, x1, from, to] of regions) {\n if (x1 <= x0 || to < from) continue;\n this.clipped(ctx, x0, top, x1 - x0, this.geometry.bottom - top, () => {\n for (let column = from; column <= to; column++) this.drawCells(ctx, theme, store, column, first, last);\n this.drawLines(ctx, theme, from, to, first, last);\n this.drawSelection(ctx, theme, snapshot, from, to);\n });\n }\n this.drawHeaders(ctx, theme, snapshot, left, right);\n this.drawGutter(ctx, theme, snapshot, first, last);\n if (this.geometry.footer > 0) this.drawTotals(ctx, theme, snapshot, left, right);\n ctx.fillStyle = theme.headerBackground;\n ctx.fillRect(0, 0, this.geometry.gutterWidth, top);\n if (this.geometry.checkboxes) {\n const all = allState(snapshot.session.checked, snapshot.document.plan, snapshot.view.rowCount);\n this.drawCheck(\n ctx,\n theme,\n this.geometry.groupTop + this.geometry.nameHeight / 2,\n all === \"all\" ? \"checked\" : all === \"none\" ? \"unchecked\" : \"unknown\",\n );\n }\n ctx.strokeStyle = theme.lineStrong;\n ctx.lineWidth = 1;\n ctx.beginPath();\n const headerLine = this.snap(top) - 0.5 / this.ratio;\n ctx.moveTo(0, headerLine);\n ctx.lineTo(this.geometry.width, headerLine);\n const gutterLine = this.snap(this.geometry.gutterWidth) - 0.5 / this.ratio;\n ctx.moveTo(gutterLine, 0);\n ctx.lineTo(gutterLine, this.geometry.height);\n for (const edge of [\n this.geometry.frozenLeft > 0 ? scrollLeft : -1,\n this.geometry.frozenRight > 0 ? scrollRight : -1,\n ]) {\n if (edge < 0) continue;\n const x = this.snap(edge) - 0.5 / this.ratio;\n ctx.moveTo(x, 0);\n ctx.lineTo(x, this.geometry.height);\n }\n ctx.stroke();\n if (snapshot.pending) {\n // The view on screen stays until the new one's first rows arrive (§4.2 of react.md).\n ctx.fillStyle = theme.background;\n ctx.globalAlpha = 0.45;\n ctx.fillRect(\n this.geometry.gutterWidth,\n top,\n this.geometry.width - this.geometry.gutterWidth,\n this.geometry.bottom - top,\n );\n ctx.globalAlpha = 1;\n }\n if (this.resizing) {\n const x = this.geometry.columnX(this.resizing.column) + this.geometry.layout.width(this.resizing.column);\n ctx.fillStyle = theme.accent;\n ctx.fillRect(x - 1, 0, 2, this.geometry.height);\n }\n if (this.dropX !== null) {\n ctx.fillStyle = theme.accent;\n ctx.fillRect(this.dropX - 1.5, 0, 3, this.geometry.height);\n }\n }\n\n private clipped(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n width: number,\n height: number,\n draw: () => void,\n ) {\n if (width <= 0 || height <= 0) return;\n ctx.save();\n ctx.beginPath();\n ctx.rect(x, y, width, height);\n ctx.clip();\n draw();\n ctx.restore();\n }\n\n private drawCells(\n ctx: CanvasRenderingContext2D,\n theme: GridTheme,\n store: GridStore,\n column: number,\n first: number,\n last: number,\n ) {\n const item = this.columns[column];\n const fitter = this.cellText;\n if (!item || !fitter) return;\n const x = this.geometry.columnX(column);\n const width = this.geometry.layout.width(column);\n const numeric = isNumeric(item.column);\n const align =\n item.setting.format?.align ?? (numeric ? \"right\" : item.column.type === \"boolean\" ? \"center\" : \"left\");\n const wrap = item.setting.format?.wrap === true;\n ctx.font = fitter.font;\n ctx.textBaseline = \"middle\";\n ctx.textAlign = align;\n const textX = align === \"right\" ? x + width - PADDING : align === \"center\" ? x + width / 2 : x + PADDING;\n for (let row = first; row < last; row++) {\n const y = this.geometry.rowY(row);\n const value = store.cell(row, item.column.name);\n if (value === undefined) {\n ctx.fillStyle = theme.placeholder;\n ctx.fillRect(\n x + PADDING,\n y + this.geometry.rowHeight / 2 - 4,\n Math.max(0, Math.min(width - PADDING * 2, 64)),\n 8,\n );\n continue;\n }\n const style = this.cellStyleOf(row, item.column, value);\n const text = value === null ? \"\" : this.text(row, item.column, value);\n const action = value === null ? null : this.actionOf(row, item.column, value, text);\n const drawDefault = () => {\n if (style?.background) {\n ctx.fillStyle = style.background;\n ctx.fillRect(x, y, width, this.geometry.rowHeight);\n }\n if (value === null) return;\n const shown = store.isCut(row, item.column.name) ? `${text}…` : text;\n ctx.fillStyle = style?.color ?? (action?.kind === \"link\" ? theme.link : theme.text);\n const lines = wrap\n ? fitter.lines(\n shown,\n width - PADDING * 2,\n Math.max(1, Math.floor((this.geometry.rowHeight - 4) / theme.lineHeight)),\n )\n : [fitter.fit(shown, width - PADDING * 2)];\n const lineHeight = wrap ? theme.lineHeight : this.geometry.rowHeight;\n const top = y + (this.geometry.rowHeight - lines.length * lineHeight) / 2 + lineHeight / 2;\n lines.forEach((line, index) => {\n if (!line) return;\n const middle = top + index * lineHeight;\n ctx.fillText(line, textX, middle);\n // Links are underlined.\n if (action?.kind !== \"link\") return;\n const lineWidth = fitter.width(line);\n const start = align === \"right\" ? textX - lineWidth : align === \"center\" ? textX - lineWidth / 2 : textX;\n ctx.fillRect(start, middle + theme.fontSize / 2, lineWidth, 1);\n });\n };\n const draw = this.hooks.drawCell;\n if (!draw || value === null) {\n drawDefault();\n continue;\n }\n ctx.save();\n draw({\n row,\n column: item.column,\n value,\n text,\n ctx,\n rect: { x, y, width, height: this.geometry.rowHeight },\n style: style ?? null,\n theme,\n drawDefault,\n });\n ctx.restore();\n ctx.font = fitter.font;\n ctx.textBaseline = \"middle\";\n ctx.textAlign = align;\n }\n ctx.textAlign = \"left\";\n }\n\n private drawLines(\n ctx: CanvasRenderingContext2D,\n theme: GridTheme,\n from: number,\n to: number,\n first: number,\n last: number,\n ) {\n ctx.strokeStyle = theme.line;\n ctx.lineWidth = 1;\n ctx.beginPath();\n for (let column = from; column <= to; column++) {\n const x = this.snap(this.geometry.columnX(column) + this.geometry.layout.width(column)) - 0.5 / this.ratio;\n ctx.moveTo(x, this.geometry.headerHeight);\n ctx.lineTo(x, Math.min(this.geometry.height, this.geometry.rowY(last)));\n }\n for (let row = first; row <= last; row++) {\n const y = this.snap(this.geometry.rowY(row)) - 0.5 / this.ratio;\n if (y < this.geometry.headerHeight) continue;\n ctx.moveTo(this.geometry.gutterWidth, y);\n ctx.lineTo(this.geometry.width, y);\n }\n ctx.stroke();\n }\n\n /** The selected ranges (§5.2) and the active cell, within the display positions `[from, to]`. */\n private drawSelection(\n ctx: CanvasRenderingContext2D,\n theme: GridTheme,\n snapshot: GridSnapshot,\n from: number,\n to: number,\n ) {\n const session = snapshot.session;\n const rowCount = snapshot.view?.rowCount ?? 0;\n if (rowCount === 0) return;\n const ranges = session.selection ?? [];\n const rect = (rows: [number, number], columns: number[]) => {\n const visible = columns.filter((column) => column >= from && column <= to);\n if (visible.length === 0) return null;\n const x0 = Math.min(...visible.map((column) => this.geometry.columnX(column)));\n const x1 = Math.max(\n ...visible.map((column) => this.geometry.columnX(column) + this.geometry.layout.width(column)),\n );\n const y0 = this.geometry.rowY(rows[0]);\n const y1 = this.geometry.rowY(rows[1]);\n return { x: x0, y: y0, width: x1 - x0, height: y1 - y0 };\n };\n ranges.forEach((range, position) => {\n const rows: [number, number] =\n range.rows === \"all\" ? [0, rowCount] : [range.rows[0], Math.min(range.rows[1], rowCount)];\n const columns =\n range.columns === \"all\"\n ? this.columns.map((_, index) => index)\n : range.columns.flatMap((name) => this.index.get(name) ?? []);\n const area = rect(rows, columns);\n if (!area) return;\n const single = rows[1] - rows[0] === 1 && columns.length === 1 && ranges.length === 1;\n if (!single) {\n ctx.fillStyle = theme.selection;\n ctx.fillRect(area.x, area.y, area.width, area.height);\n }\n if (position === ranges.length - 1 && !single) {\n ctx.strokeStyle = theme.selectionBorder;\n ctx.lineWidth = 1;\n ctx.strokeRect(this.snap(area.x), this.snap(area.y), area.width - 1, area.height - 1);\n }\n });\n const active = session.active ?? (this.columns.length > 0 ? { row: 0, column: this.columns[0].column.name } : null);\n if (!active) return;\n const column = this.index.get(active.column);\n if (column === undefined || column < from || column > to || active.row >= rowCount) return;\n const x = this.geometry.columnX(column);\n const y = this.geometry.rowY(active.row);\n ctx.strokeStyle = theme.activeBorder;\n ctx.lineWidth = 2;\n ctx.strokeRect(x + 1, y + 1, this.geometry.layout.width(column) - 2, this.geometry.rowHeight - 2);\n }\n\n private drawHeaders(\n ctx: CanvasRenderingContext2D,\n theme: GridTheme,\n snapshot: GridSnapshot,\n left: number,\n right: number,\n ) {\n const fitter = this.headerText;\n if (!fitter) return;\n const sort = snapshot.document.plan?.sort ?? [];\n // Columns with conditions of their own (§6.2.1) show a funnel instead of the menu's arrow.\n const filtered = new Set<string>();\n for (const part of partsOf(snapshot.document.plan?.where)) {\n if (\"search\" in part) continue;\n const names = columnsOf(part);\n if (names.size === 1) for (const name of names) filtered.add(name);\n }\n const draw = (column: number) => {\n const item = this.columns[column];\n const x = this.geometry.columnX(column);\n const width = this.geometry.layout.width(column);\n ctx.fillStyle = theme.headerBackground;\n ctx.fillRect(x, 0, width, this.geometry.headerHeight);\n const nameMiddle = this.geometry.groupTop + this.geometry.nameHeight / 2;\n const at = sort.findIndex((key) => key.column === item.column.name);\n const mark = at < 0 ? \"\" : `${sort[at].direction === \"asc\" ? \"▲\" : \"▼\"}${sort.length > 1 ? at + 1 : \"\"}`;\n ctx.font = fitter.font;\n ctx.textBaseline = \"middle\";\n ctx.fillStyle = theme.headerText;\n ctx.textAlign = \"left\";\n const space = width - PADDING * 2 - MENU_WIDTH - (mark ? 18 : 0);\n ctx.fillText(fitter.fit(item.setting.format?.label ?? item.column.name, space), x + PADDING, nameMiddle);\n if (mark) {\n ctx.fillStyle = theme.accent;\n ctx.textAlign = \"right\";\n ctx.fillText(mark, x + width - PADDING - MENU_WIDTH, nameMiddle);\n ctx.textAlign = \"left\";\n }\n const middle = nameMiddle;\n const center = x + width - PADDING / 2 - MENU_WIDTH / 2;\n ctx.beginPath();\n if (filtered.has(item.column.name)) {\n ctx.fillStyle = theme.accent;\n ctx.moveTo(center - 5, middle - 4);\n ctx.lineTo(center + 5, middle - 4);\n ctx.lineTo(center + 1, middle + 1);\n ctx.lineTo(center + 1, middle + 5);\n ctx.lineTo(center - 1, middle + 5);\n ctx.lineTo(center - 1, middle + 1);\n } else {\n ctx.fillStyle = theme.muted;\n ctx.moveTo(center - 4, middle - 2);\n ctx.lineTo(center + 4, middle - 2);\n ctx.lineTo(center, middle + 3);\n }\n ctx.closePath();\n ctx.fill();\n ctx.strokeStyle = theme.line;\n ctx.lineWidth = 1;\n ctx.beginPath();\n const edge = this.snap(x + width) - 0.5 / this.ratio;\n ctx.moveTo(edge, this.geometry.groupTop + 6);\n ctx.lineTo(edge, this.geometry.headerHeight - 6);\n ctx.stroke();\n };\n const groups = (from: number, to: number) => {\n if (this.geometry.groupRows > 0 && to >= from) this.drawGroups(ctx, theme, from, to);\n };\n const scrollLeft = this.geometry.gutterWidth + this.geometry.frozenWidth;\n const scrollRight = this.geometry.width - this.geometry.frozenRightWidth;\n this.clipped(ctx, scrollLeft, 0, scrollRight - scrollLeft, this.geometry.headerHeight, () => {\n for (let column = left; column <= right; column++) draw(column);\n groups(left, right);\n });\n this.clipped(ctx, this.geometry.gutterWidth, 0, this.geometry.frozenWidth, this.geometry.headerHeight, () => {\n for (let column = 0; column < this.geometry.frozenLeft; column++) draw(column);\n groups(0, this.geometry.frozenLeft - 1);\n });\n this.clipped(ctx, scrollRight, 0, this.geometry.frozenRightWidth, this.geometry.headerHeight, () => {\n for (let column = this.geometry.rightStart; column < this.columns.length; column++) draw(column);\n groups(this.geometry.rightStart, this.columns.length - 1);\n });\n }\n\n /** The columns of a group header: the run of display positions next to `column` in the same group. */\n groupSpan(column: number, level: number): [number, number] | null {\n const id = this.geometry.groupPaths[column]?.[level]?.id;\n if (id === undefined) return null;\n const region = (at: number) => (at < this.geometry.frozenLeft ? 0 : at >= this.geometry.rightStart ? 2 : 1);\n let first = column;\n let last = column;\n while (first > 0 && this.geometry.groupPaths[first - 1]?.[level]?.id === id && region(first - 1) === region(column))\n first--;\n while (\n last < this.columns.length - 1 &&\n this.geometry.groupPaths[last + 1]?.[level]?.id === id &&\n region(last + 1) === region(column)\n ) {\n last++;\n }\n return [first, last];\n }\n\n /** The names of a column's groups, from the outermost, for screen readers. */\n groupNames(column: number): string[] {\n return (this.geometry.groupPaths[column] ?? []).flatMap((group) => (group ? [group.name] : []));\n }\n\n /**\n * The rows of groups over display positions `[from, to]` of one region: each group over the run of its columns\n * that are next to each other there, so a group whose columns were moved apart, hidden or pinned is split, and\n * each part shows its name.\n */\n private drawGroups(ctx: CanvasRenderingContext2D, theme: GridTheme, from: number, to: number) {\n const fitter = this.headerText;\n if (!fitter) return;\n ctx.font = fitter.font;\n ctx.textBaseline = \"middle\";\n ctx.textAlign = \"left\";\n ctx.lineWidth = 1;\n for (let level = 0; level < this.geometry.groupRows; level++) {\n const top = level * this.geometry.groupHeight;\n let column = from;\n while (column <= to) {\n const group = this.geometry.groupPaths[column]?.[level];\n let last = column;\n while (last < to && group && this.geometry.groupPaths[last + 1]?.[level]?.id === group.id) last++;\n if (group) {\n const x = this.geometry.columnX(column);\n const width = this.geometry.columnX(last) + this.geometry.layout.width(last) - x;\n ctx.fillStyle = theme.headerText;\n ctx.fillText(fitter.fit(group.name, width - PADDING * 2), x + PADDING, top + this.geometry.groupHeight / 2);\n ctx.strokeStyle = theme.line;\n ctx.beginPath();\n const bottom = this.snap(top + this.geometry.groupHeight) - 0.5 / this.ratio;\n ctx.moveTo(x + 4, bottom);\n ctx.lineTo(x + width - 4, bottom);\n const edge = this.snap(x + width) - 0.5 / this.ratio;\n ctx.moveTo(edge, top + 4);\n ctx.lineTo(edge, top + this.geometry.groupHeight);\n ctx.stroke();\n }\n column = last + 1;\n }\n }\n }\n\n private drawGutter(\n ctx: CanvasRenderingContext2D,\n theme: GridTheme,\n snapshot: GridSnapshot,\n first: number,\n last: number,\n ) {\n const fitter = this.cellText;\n if (!fitter) return;\n const active = snapshot.session.active?.row ?? 0;\n this.clipped(\n ctx,\n 0,\n this.geometry.headerHeight,\n this.geometry.gutterWidth,\n this.geometry.bottom - this.geometry.headerHeight,\n () => {\n ctx.fillStyle = theme.gutterBackground;\n ctx.fillRect(\n 0,\n this.geometry.headerHeight,\n this.geometry.gutterWidth,\n this.geometry.bottom - this.geometry.headerHeight,\n );\n ctx.font = fitter.font;\n ctx.textBaseline = \"middle\";\n ctx.textAlign = \"right\";\n for (let row = first; row < last; row++) {\n const y = this.geometry.rowY(row);\n if (row === active) {\n ctx.fillStyle = theme.headerActive;\n ctx.fillRect(0, y, this.geometry.gutterWidth, this.geometry.rowHeight);\n }\n ctx.fillStyle = row === active ? theme.headerText : theme.gutterText;\n ctx.fillText(String(row + 1), this.geometry.gutterWidth - PADDING, y + this.geometry.rowHeight / 2);\n const key = this.geometry.checkboxes ? this.store?.rowKey(row) : undefined;\n if (key) {\n this.drawCheck(\n ctx,\n theme,\n y + this.geometry.rowHeight / 2,\n checkState(snapshot.session.checked, snapshot.document.plan, key),\n );\n ctx.textAlign = \"right\";\n }\n }\n ctx.textAlign = \"left\";\n },\n );\n }\n\n /** The colors of a cell: the host's `cellStyle`, or else the column's style rules. */\n private cellStyleOf(row: number, column: Column, value: JsonValue): CellStyle | undefined {\n const hook = this.hooks.cellStyle;\n if (hook) {\n const style = hook({ row, column, value, text: value === null ? \"\" : this.text(row, column, value) });\n if (style) return style;\n }\n return this.styleOf(row, column.name);\n }\n\n /** What a cell does, by the host's `cellAction`. */\n private actionOf(row: number, column: Column, value: JsonValue, text: string): CellAction | null {\n return this.hooks.cellAction?.({ row, column, value, text }) ?? null;\n }\n\n /** The action of a cell at a display position, while its value is read; null for plain cells. */\n actionAt(row: number, columnIndex: number): { action: CellAction; cell: GridCell } | null {\n const column = this.columns[columnIndex]?.column;\n const store = this.store;\n if (!column || !store || !this.hooks.cellAction) return null;\n const value = store.cell(row, column.name);\n if (value === undefined || value === null) return null;\n const text = this.text(row, column, value);\n const action = this.actionOf(row, column, value, text);\n return action ? { action, cell: { row, column, value, text } } : null;\n }\n\n /** The style rule that colors a cell: the first whose `when` is true for its row (§5.1); undefined for none. */\n styleOf(row: number, name: string): CellStyle | undefined {\n const rules = this.rules.get(name);\n const store = this.store;\n if (!rules || !store) return undefined;\n const read = (column: string) => store.cell(row, column);\n return rules.find((item) => item.rule(read) === true);\n }\n\n /** A check box in the gutter, centered at `middle`: checked, not checked, or unknown (a dash). */\n private drawCheck(\n ctx: CanvasRenderingContext2D,\n theme: GridTheme,\n middle: number,\n state: \"checked\" | \"unchecked\" | \"unknown\",\n ) {\n const size = 12;\n const x = Math.round((CHECK_WIDTH - size) / 2) + 2;\n const y = Math.round(middle - size / 2);\n ctx.lineWidth = 1;\n if (state === \"unchecked\") {\n ctx.strokeStyle = theme.gutterText;\n ctx.strokeRect(x + 0.5, y + 0.5, size - 1, size - 1);\n return;\n }\n ctx.fillStyle = theme.accent;\n ctx.fillRect(x, y, size, size);\n ctx.strokeStyle = theme.accentText;\n ctx.lineWidth = 1.75;\n ctx.beginPath();\n if (state === \"checked\") {\n ctx.moveTo(x + 2.5, y + 6);\n ctx.lineTo(x + 5, y + 8.5);\n ctx.lineTo(x + 9.5, y + 3.5);\n } else {\n ctx.moveTo(x + 3, y + 6);\n ctx.lineTo(x + 9, y + 6);\n }\n ctx.stroke();\n }\n\n /** The text of a column's total; undefined while it is read. */\n private totalText(name: string): string | undefined {\n const totals = this.snapshot?.totals;\n const value = totals?.values[name];\n const type = totals?.columns[name];\n if (value === undefined || !type) return undefined;\n return textOf(value, type) ?? \"\";\n }\n\n /**\n * The totals row, at the bottom: each displayed column's total (§5.1), in the column's format and alignment, a\n * placeholder while it is read, and Σ in the gutter.\n */\n private drawTotals(\n ctx: CanvasRenderingContext2D,\n theme: GridTheme,\n snapshot: GridSnapshot,\n left: number,\n right: number,\n ) {\n const fitter = this.cellText;\n if (!fitter) return;\n const top = this.geometry.bottom;\n const middle = top + this.geometry.footer / 2;\n ctx.fillStyle = theme.headerBackground;\n ctx.fillRect(0, top, this.geometry.width, this.geometry.footer);\n ctx.font = fitter.font;\n ctx.textBaseline = \"middle\";\n const totals = snapshot.totals;\n const draw = (column: number) => {\n const item = this.columns[column];\n if (!item?.setting.total) return;\n const x = this.geometry.columnX(column);\n const width = this.geometry.layout.width(column);\n const text = this.totalText(item.column.name);\n if (text === undefined) {\n ctx.fillStyle = theme.placeholder;\n ctx.fillRect(x + PADDING, middle - 4, Math.max(0, Math.min(width - PADDING * 2, 64)), 8);\n return;\n }\n const type = totals?.columns[item.column.name] ?? item.column;\n const fitted = fitter.fit(text, width - PADDING * 2);\n ctx.fillStyle = theme.headerText;\n const align = item.setting.format?.align ?? (isNumeric(type) ? \"right\" : \"left\");\n ctx.textAlign = align;\n ctx.fillText(\n fitted,\n align === \"right\" ? x + width - PADDING : align === \"center\" ? x + width / 2 : x + PADDING,\n middle,\n );\n };\n const scrollLeft = this.geometry.gutterWidth + this.geometry.frozenWidth;\n const scrollRight = this.geometry.width - this.geometry.frozenRightWidth;\n this.clipped(ctx, scrollLeft, top, scrollRight - scrollLeft, this.geometry.footer, () => {\n for (let column = left; column <= right; column++) draw(column);\n });\n this.clipped(ctx, this.geometry.gutterWidth, top, this.geometry.frozenWidth, this.geometry.footer, () => {\n for (let column = 0; column < this.geometry.frozenLeft; column++) draw(column);\n });\n this.clipped(ctx, scrollRight, top, this.geometry.frozenRightWidth, this.geometry.footer, () => {\n for (let column = this.geometry.rightStart; column < this.columns.length; column++) draw(column);\n });\n ctx.fillStyle = theme.gutterText;\n ctx.textAlign = \"right\";\n ctx.fillText(\"Σ\", this.geometry.gutterWidth - PADDING, middle);\n ctx.textAlign = \"left\";\n ctx.strokeStyle = theme.lineStrong;\n ctx.lineWidth = 1;\n ctx.beginPath();\n const line = this.snap(top) - 0.5 / this.ratio;\n ctx.moveTo(0, line);\n ctx.lineTo(this.geometry.width, line);\n ctx.stroke();\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * What a host adds to the drawing of the grid through props (§5.1 of the specification: functions are not state, and
3
+ * they win over the document's formats and styles), and the column groups of the header.
4
+ */
5
+ import type { Column, JsonValue } from "vastgrid-spec";
6
+ import type { GridTheme } from "./theme.js";
7
+ /** A cell of the view that the grid shows. */
8
+ export interface GridCell {
9
+ /** The view position of its row. */
10
+ row: number;
11
+ column: Column;
12
+ value: JsonValue;
13
+ /** The text the grid shows: by the column's format, or the text form (§2.4). */
14
+ text: string;
15
+ }
16
+ /** The colors of a cell, and what they mean for screen readers. */
17
+ export interface CellStyle {
18
+ color?: string;
19
+ background?: string;
20
+ description?: string;
21
+ }
22
+ /** What a cell does when it is clicked or Space is pressed on it: a link goes somewhere, a button acts in place. */
23
+ export interface CellAction {
24
+ kind: "link" | "button";
25
+ /** The name for screen readers, instead of the cell's text. */
26
+ label?: string;
27
+ /** The CSS cursor over the cell; `pointer` by default. */
28
+ cursor?: string;
29
+ }
30
+ /** The cell, its box and the canvas, for `drawCell`. */
31
+ export interface DrawCellArgs extends GridCell {
32
+ /** The canvas in CSS pixels, with the cell font, `textBaseline = "middle"` and the column's alignment. */
33
+ ctx: CanvasRenderingContext2D;
34
+ rect: {
35
+ x: number;
36
+ y: number;
37
+ width: number;
38
+ height: number;
39
+ };
40
+ style: CellStyle | null;
41
+ theme: GridTheme;
42
+ /** Draws the cell as the grid does. */
43
+ drawDefault(): void;
44
+ }
45
+ export interface CellHooks {
46
+ /** The text of a cell instead of the grid's; null or undefined keeps the grid's. */
47
+ cellText?: (cell: GridCell) => string | null | undefined;
48
+ /** The colors of a cell instead of the column's style rules; null or undefined keeps them. */
49
+ cellStyle?: (cell: GridCell) => CellStyle | null | undefined;
50
+ /** Draws a cell on the canvas; the canvas's state is restored afterwards. */
51
+ drawCell?: (args: DrawCellArgs) => void;
52
+ /** Makes cells links or buttons; null or undefined for plain cells. */
53
+ cellAction?: (cell: GridCell) => CellAction | null | undefined;
54
+ }
55
+ /** A group of columns named in a header row above the column names; nested groups add rows. */
56
+ export interface ColumnGroup {
57
+ name: string;
58
+ /** Column names of the view, and groups. */
59
+ children: (string | ColumnGroup)[];
60
+ }
61
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/canvas/hooks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,8CAA8C;AAC9C,MAAM,WAAW,QAAQ;IACvB,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mEAAmE;AACnE,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,oHAAoH;AACpH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wDAAwD;AACxD,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,0GAA0G;IAC1G,GAAG,EAAE,wBAAwB,CAAC;IAC9B,IAAI,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,SAAS,CAAC;IACjB,uCAAuC;IACvC,WAAW,IAAI,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzD,8FAA8F;IAC9F,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;IAC7D,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,uEAAuE;IACvE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC;CAChE;AAED,+FAA+F;AAC/F,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,QAAQ,EAAE,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC;CACpC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["hooks.ts"],"sourcesContent":["/**\n * What a host adds to the drawing of the grid through props (§5.1 of the specification: functions are not state, and\n * they win over the document's formats and styles), and the column groups of the header.\n */\nimport type { Column, JsonValue } from \"vastgrid-spec\";\nimport type { GridTheme } from \"./theme.js\";\n\n/** A cell of the view that the grid shows. */\nexport interface GridCell {\n /** The view position of its row. */\n row: number;\n column: Column;\n value: JsonValue;\n /** The text the grid shows: by the column's format, or the text form (§2.4). */\n text: string;\n}\n\n/** The colors of a cell, and what they mean for screen readers. */\nexport interface CellStyle {\n color?: string;\n background?: string;\n description?: string;\n}\n\n/** What a cell does when it is clicked or Space is pressed on it: a link goes somewhere, a button acts in place. */\nexport interface CellAction {\n kind: \"link\" | \"button\";\n /** The name for screen readers, instead of the cell's text. */\n label?: string;\n /** The CSS cursor over the cell; `pointer` by default. */\n cursor?: string;\n}\n\n/** The cell, its box and the canvas, for `drawCell`. */\nexport interface DrawCellArgs extends GridCell {\n /** The canvas in CSS pixels, with the cell font, `textBaseline = \"middle\"` and the column's alignment. */\n ctx: CanvasRenderingContext2D;\n rect: { x: number; y: number; width: number; height: number };\n style: CellStyle | null;\n theme: GridTheme;\n /** Draws the cell as the grid does. */\n drawDefault(): void;\n}\n\nexport interface CellHooks {\n /** The text of a cell instead of the grid's; null or undefined keeps the grid's. */\n cellText?: (cell: GridCell) => string | null | undefined;\n /** The colors of a cell instead of the column's style rules; null or undefined keeps them. */\n cellStyle?: (cell: GridCell) => CellStyle | null | undefined;\n /** Draws a cell on the canvas; the canvas's state is restored afterwards. */\n drawCell?: (args: DrawCellArgs) => void;\n /** Makes cells links or buttons; null or undefined for plain cells. */\n cellAction?: (cell: GridCell) => CellAction | null | undefined;\n}\n\n/** A group of columns named in a header row above the column names; nested groups add rows. */\nexport interface ColumnGroup {\n name: string;\n /** Column names of the view, and groups. */\n children: (string | ColumnGroup)[];\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ import type { GridCommand } from "vastgrid-spec";
2
+ /** The members of a keyboard event that the grid reads. */
3
+ export interface KeyInput {
4
+ key: string;
5
+ shiftKey: boolean;
6
+ altKey: boolean;
7
+ ctrlKey: boolean;
8
+ metaKey: boolean;
9
+ }
10
+ /** Whether the platform's primary modifier is ⌘ (Apple platforms) rather than Ctrl. */
11
+ export declare function isApple(): boolean;
12
+ /**
13
+ * The command of a key on the grid (§6.4 of the specification, the grid pattern of the ARIA Authoring
14
+ * Practices): arrows move, with Shift extend and with the primary modifier jump to the end; Page Up and Page
15
+ * Down move by a page; Home and End go to the first and last column (with the modifier, also row); Tab and
16
+ * Enter walk through the selection; the modifier and A selects everything. Delete and Backspace clear the selected
17
+ * cells, F2 edits the active cell, the modifier and Z undoes (with Shift, or Ctrl+Y off Apple platforms,
18
+ * redoes), the modifier and D or R fills down or right, and the modifier and S saves. Null for other keys: a key that types text starts editing (`typesText`).
19
+ */
20
+ export declare function keyCommand(event: KeyInput, apple: boolean): GridCommand | null;
21
+ /** Whether a key types text, a character or the start of an IME composition, which starts editing the cell. */
22
+ export declare function typesText(event: KeyInput & {
23
+ keyCode?: number;
24
+ isComposing?: boolean;
25
+ }): boolean;
26
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/canvas/keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,2DAA2D;AAC3D,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,uFAAuF;AACvF,wBAAgB,OAAO,IAAI,OAAO,CAIjC;AASD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAsD9E;AAED,+GAA+G;AAC/G,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAKhG"}
@@ -0,0 +1,133 @@
1
+ /** The members of a keyboard event that the grid reads. */
2
+
3
+ /** Whether the platform's primary modifier is ⌘ (Apple platforms) rather than Ctrl. */
4
+ export function isApple() {
5
+ if (typeof navigator === "undefined") return false;
6
+ const platform = navigator.userAgentData?.platform;
7
+ return /mac|iphone|ipad|ipod/i.test(platform ?? navigator.platform ?? "");
8
+ }
9
+ const ARROWS = {
10
+ ArrowUp: "up",
11
+ ArrowDown: "down",
12
+ ArrowLeft: "left",
13
+ ArrowRight: "right"
14
+ };
15
+
16
+ /**
17
+ * The command of a key on the grid (§6.4 of the specification, the grid pattern of the ARIA Authoring
18
+ * Practices): arrows move, with Shift extend and with the primary modifier jump to the end; Page Up and Page
19
+ * Down move by a page; Home and End go to the first and last column (with the modifier, also row); Tab and
20
+ * Enter walk through the selection; the modifier and A selects everything. Delete and Backspace clear the selected
21
+ * cells, F2 edits the active cell, the modifier and Z undoes (with Shift, or Ctrl+Y off Apple platforms,
22
+ * redoes), the modifier and D or R fills down or right, and the modifier and S saves. Null for other keys: a key that types text starts editing (`typesText`).
23
+ */
24
+ export function keyCommand(event, apple) {
25
+ const primary = apple ? event.metaKey : event.ctrlKey;
26
+ if (event.altKey) return null;
27
+ const flags = (extend, jump) => ({
28
+ ...(extend ? {
29
+ extend: true
30
+ } : {}),
31
+ ...(jump ? {
32
+ jump: true
33
+ } : {})
34
+ });
35
+ const direction = ARROWS[event.key];
36
+ if (direction) return {
37
+ command: "move",
38
+ direction,
39
+ ...flags(event.shiftKey, primary)
40
+ };
41
+ switch (event.key) {
42
+ case "PageUp":
43
+ case "PageDown":
44
+ return {
45
+ command: "move",
46
+ direction: event.key === "PageUp" ? "up" : "down",
47
+ page: true,
48
+ ...flags(event.shiftKey, false)
49
+ };
50
+ case "Home":
51
+ return {
52
+ command: "move.home",
53
+ ...flags(event.shiftKey, primary)
54
+ };
55
+ case "End":
56
+ return {
57
+ command: "move.end",
58
+ ...flags(event.shiftKey, primary)
59
+ };
60
+ case "Tab":
61
+ return primary ? null : {
62
+ command: "advance",
63
+ axis: "column",
64
+ ...(event.shiftKey ? {
65
+ back: true
66
+ } : {})
67
+ };
68
+ case "Enter":
69
+ return primary ? null : {
70
+ command: "advance",
71
+ axis: "row",
72
+ ...(event.shiftKey ? {
73
+ back: true
74
+ } : {})
75
+ };
76
+ case "a":
77
+ case "A":
78
+ return primary && !event.shiftKey ? {
79
+ command: "select.all"
80
+ } : null;
81
+ case "Delete":
82
+ case "Backspace":
83
+ return primary ? null : {
84
+ command: "edit.clear"
85
+ };
86
+ case "F2":
87
+ return {
88
+ command: "edit.begin"
89
+ };
90
+ case "z":
91
+ case "Z":
92
+ if (!primary) return null;
93
+ return event.shiftKey ? {
94
+ command: "history.redo"
95
+ } : {
96
+ command: "history.undo"
97
+ };
98
+ case "y":
99
+ case "Y":
100
+ return primary && !apple ? {
101
+ command: "history.redo"
102
+ } : null;
103
+ case "s":
104
+ case "S":
105
+ return primary && !event.shiftKey ? {
106
+ command: "save"
107
+ } : null;
108
+ // Fill down and right from the first row or column of the selection (§6.5).
109
+ case "d":
110
+ case "D":
111
+ return primary && !event.shiftKey ? {
112
+ command: "edit.fill",
113
+ direction: "down"
114
+ } : null;
115
+ case "r":
116
+ case "R":
117
+ return primary && !event.shiftKey ? {
118
+ command: "edit.fill",
119
+ direction: "right"
120
+ } : null;
121
+ default:
122
+ return null;
123
+ }
124
+ }
125
+
126
+ /** Whether a key types text, a character or the start of an IME composition, which starts editing the cell. */
127
+ export function typesText(event) {
128
+ if (event.key === "Process" || event.keyCode === 229 || event.isComposing === true) return true;
129
+ // AltGr gives Ctrl+Alt on Windows; Option gives characters on Apple platforms.
130
+ const shortcut = event.metaKey || event.ctrlKey && !event.altKey;
131
+ return [...event.key].length === 1 && event.key !== " " && !shortcut;
132
+ }
133
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isApple","navigator","platform","userAgentData","test","ARROWS","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","keyCommand","event","apple","primary","metaKey","ctrlKey","altKey","flags","extend","jump","direction","key","command","shiftKey","page","axis","back","typesText","keyCode","isComposing","shortcut","length"],"sources":["keys.ts"],"sourcesContent":["import type { GridCommand } from \"vastgrid-spec\";\n\n/** The members of a keyboard event that the grid reads. */\nexport interface KeyInput {\n key: string;\n shiftKey: boolean;\n altKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n}\n\n/** Whether the platform's primary modifier is ⌘ (Apple platforms) rather than Ctrl. */\nexport function isApple(): boolean {\n if (typeof navigator === \"undefined\") return false;\n const platform = (navigator as Navigator & { userAgentData?: { platform?: string } }).userAgentData?.platform;\n return /mac|iphone|ipad|ipod/i.test(platform ?? navigator.platform ?? \"\");\n}\n\nconst ARROWS: Record<string, \"up\" | \"down\" | \"left\" | \"right\"> = {\n ArrowUp: \"up\",\n ArrowDown: \"down\",\n ArrowLeft: \"left\",\n ArrowRight: \"right\",\n};\n\n/**\n * The command of a key on the grid (§6.4 of the specification, the grid pattern of the ARIA Authoring\n * Practices): arrows move, with Shift extend and with the primary modifier jump to the end; Page Up and Page\n * Down move by a page; Home and End go to the first and last column (with the modifier, also row); Tab and\n * Enter walk through the selection; the modifier and A selects everything. Delete and Backspace clear the selected\n * cells, F2 edits the active cell, the modifier and Z undoes (with Shift, or Ctrl+Y off Apple platforms,\n * redoes), the modifier and D or R fills down or right, and the modifier and S saves. Null for other keys: a key that types text starts editing (`typesText`).\n */\nexport function keyCommand(event: KeyInput, apple: boolean): GridCommand | null {\n const primary = apple ? event.metaKey : event.ctrlKey;\n if (event.altKey) return null;\n const flags = (extend: boolean, jump: boolean) => ({\n ...(extend ? { extend: true } : {}),\n ...(jump ? { jump: true } : {}),\n });\n const direction = ARROWS[event.key];\n if (direction) return { command: \"move\", direction, ...flags(event.shiftKey, primary) };\n switch (event.key) {\n case \"PageUp\":\n case \"PageDown\":\n return {\n command: \"move\",\n direction: event.key === \"PageUp\" ? \"up\" : \"down\",\n page: true,\n ...flags(event.shiftKey, false),\n };\n case \"Home\":\n return { command: \"move.home\", ...flags(event.shiftKey, primary) };\n case \"End\":\n return { command: \"move.end\", ...flags(event.shiftKey, primary) };\n case \"Tab\":\n return primary ? null : { command: \"advance\", axis: \"column\", ...(event.shiftKey ? { back: true } : {}) };\n case \"Enter\":\n return primary ? null : { command: \"advance\", axis: \"row\", ...(event.shiftKey ? { back: true } : {}) };\n case \"a\":\n case \"A\":\n return primary && !event.shiftKey ? { command: \"select.all\" } : null;\n case \"Delete\":\n case \"Backspace\":\n return primary ? null : { command: \"edit.clear\" };\n case \"F2\":\n return { command: \"edit.begin\" };\n case \"z\":\n case \"Z\":\n if (!primary) return null;\n return event.shiftKey ? { command: \"history.redo\" } : { command: \"history.undo\" };\n case \"y\":\n case \"Y\":\n return primary && !apple ? { command: \"history.redo\" } : null;\n case \"s\":\n case \"S\":\n return primary && !event.shiftKey ? { command: \"save\" } : null;\n // Fill down and right from the first row or column of the selection (§6.5).\n case \"d\":\n case \"D\":\n return primary && !event.shiftKey ? { command: \"edit.fill\", direction: \"down\" } : null;\n case \"r\":\n case \"R\":\n return primary && !event.shiftKey ? { command: \"edit.fill\", direction: \"right\" } : null;\n default:\n return null;\n }\n}\n\n/** Whether a key types text, a character or the start of an IME composition, which starts editing the cell. */\nexport function typesText(event: KeyInput & { keyCode?: number; isComposing?: boolean }): boolean {\n if (event.key === \"Process\" || event.keyCode === 229 || event.isComposing === true) return true;\n // AltGr gives Ctrl+Alt on Windows; Option gives characters on Apple platforms.\n const shortcut = event.metaKey || (event.ctrlKey && !event.altKey);\n return [...event.key].length === 1 && event.key !== \" \" && !shortcut;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ /** Positions of columns laid out side by side. Lookups are O(1) by index and O(log n) by x. */
2
+ export declare class ColumnLayout {
3
+ /** `offsets[i]` is the left edge of column `i`; `offsets[count]` is the total width. */
4
+ readonly offsets: Float64Array;
5
+ constructor(widths: ArrayLike<number>);
6
+ get count(): number;
7
+ get total(): number;
8
+ left(index: number): number;
9
+ right(index: number): number;
10
+ width(index: number): number;
11
+ /** The column containing `x`, clamped to the existing columns. Returns -1 when there are none. */
12
+ indexAt(x: number): number;
13
+ }
14
+ /** Where a column is frozen: at the left, at the right, or not (`null`, it scrolls). */
15
+ export type ColumnPin = "left" | "right" | null;
16
+ /**
17
+ * The columns drawn frozen at each side: the first `left` and the last `right` columns of `layout`, fewer
18
+ * when together they are wider than `MAX_FROZEN_SHARE` of `available` (the body's width). Columns frozen
19
+ * at the right give way first, then those at the left, each from the scrolling side. With an unknown
20
+ * width (`available` 0 or less) every frozen column stays frozen.
21
+ */
22
+ export declare function fitFrozen(layout: ColumnLayout, left: number, right: number, available: number): {
23
+ left: number;
24
+ right: number;
25
+ };
26
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/canvas/layout.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,qBAAa,YAAY;IACvB,wFAAwF;IACxF,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAE/B,YAAY,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,EAKpC;IAED,IAAI,KAAK,WAER;IAED,IAAI,KAAK,WAER;IAED,IAAI,CAAC,KAAK,EAAE,MAAM,UAEjB;IAED,KAAK,CAAC,KAAK,EAAE,MAAM,UAElB;IAED,KAAK,CAAC,KAAK,EAAE,MAAM,UAElB;IAED,kGAAkG;IAClG,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAazB;CACF;AAED,wFAAwF;AACxF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAShD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAUnF,IAAI;IAAc,KAAK;EACjC"}