@dxos/plugin-sheet 0.6.12-main.15a606f → 0.6.12-main.568932b

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 (161) hide show
  1. package/dist/lib/browser/{SheetContainer-V4GCCZTX.mjs → SheetContainer-T2QWJOFD.mjs} +14 -13
  2. package/dist/lib/browser/SheetContainer-T2QWJOFD.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-T3NJFTD4.mjs → chunk-5ZMVZYGB.mjs} +18 -6
  4. package/dist/lib/browser/{chunk-T3NJFTD4.mjs.map → chunk-5ZMVZYGB.mjs.map} +3 -3
  5. package/dist/lib/browser/{chunk-6ZMQVB4Z.mjs → chunk-GSV5QNLD.mjs} +220 -177
  6. package/dist/lib/browser/chunk-GSV5QNLD.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-U2JHW3L6.mjs → chunk-ZL2V5UJR.mjs} +206 -53
  8. package/dist/lib/browser/chunk-ZL2V5UJR.mjs.map +7 -0
  9. package/dist/lib/browser/graph-M4IQ76QX.mjs +33 -0
  10. package/dist/lib/browser/index.mjs +45 -21
  11. package/dist/lib/browser/index.mjs.map +4 -4
  12. package/dist/lib/browser/meta.json +1 -1
  13. package/dist/lib/browser/types.mjs +1 -1
  14. package/dist/lib/node/{SheetContainer-3ZY7MPWJ.cjs → SheetContainer-PV5ET4UJ.cjs} +21 -20
  15. package/dist/lib/node/SheetContainer-PV5ET4UJ.cjs.map +7 -0
  16. package/dist/lib/node/{chunk-OTTD7FBK.cjs → chunk-2K53Z2TU.cjs} +224 -70
  17. package/dist/lib/node/chunk-2K53Z2TU.cjs.map +7 -0
  18. package/dist/lib/node/{chunk-DD6FIXWC.cjs → chunk-5XPK2V4A.cjs} +222 -175
  19. package/dist/lib/node/chunk-5XPK2V4A.cjs.map +7 -0
  20. package/dist/lib/node/{chunk-Q3HBHPRL.cjs → chunk-STAVQ2JE.cjs} +21 -9
  21. package/dist/lib/node/{chunk-Q3HBHPRL.cjs.map → chunk-STAVQ2JE.cjs.map} +3 -3
  22. package/dist/lib/node/graph-Q3N2X26H.cjs +55 -0
  23. package/dist/lib/node/graph-Q3N2X26H.cjs.map +7 -0
  24. package/dist/lib/node/index.cjs +51 -30
  25. package/dist/lib/node/index.cjs.map +4 -4
  26. package/dist/lib/node/meta.json +1 -1
  27. package/dist/lib/node/types.cjs +8 -8
  28. package/dist/lib/node/types.cjs.map +1 -1
  29. package/dist/lib/node-esm/{SheetContainer-PXSJX6XK.mjs → SheetContainer-FOZD2WLT.mjs} +14 -13
  30. package/dist/lib/node-esm/SheetContainer-FOZD2WLT.mjs.map +7 -0
  31. package/dist/lib/node-esm/{chunk-BMNA27EX.mjs → chunk-2HAM45RC.mjs} +18 -6
  32. package/dist/lib/node-esm/{chunk-BMNA27EX.mjs.map → chunk-2HAM45RC.mjs.map} +3 -3
  33. package/dist/lib/node-esm/{chunk-D6KU5MI7.mjs → chunk-5WPZCXNS.mjs} +220 -177
  34. package/dist/lib/node-esm/chunk-5WPZCXNS.mjs.map +7 -0
  35. package/dist/lib/node-esm/{chunk-7HVSOTGA.mjs → chunk-QEUCIHIN.mjs} +206 -53
  36. package/dist/lib/node-esm/chunk-QEUCIHIN.mjs.map +7 -0
  37. package/dist/lib/node-esm/graph-SMPUMOV2.mjs +34 -0
  38. package/dist/lib/node-esm/index.mjs +45 -21
  39. package/dist/lib/node-esm/index.mjs.map +4 -4
  40. package/dist/lib/node-esm/meta.json +1 -1
  41. package/dist/lib/node-esm/types.mjs +1 -1
  42. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  43. package/dist/types/src/components/CellEditor/CellEditor.stories.d.ts.map +1 -1
  44. package/dist/types/src/components/CellEditor/extension.d.ts.map +1 -1
  45. package/dist/types/src/components/GridSheet/GridSheet.d.ts +3 -3
  46. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  47. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +1 -1
  48. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
  49. package/dist/types/src/components/GridSheet/util.d.ts +12 -2
  50. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  51. package/dist/types/src/components/Sheet/Sheet.d.ts.map +1 -1
  52. package/dist/types/src/components/Sheet/Sheet.stories.d.ts.map +1 -1
  53. package/dist/types/src/components/Sheet/sheet-context.d.ts +3 -3
  54. package/dist/types/src/components/Sheet/sheet-context.d.ts.map +1 -1
  55. package/dist/types/src/components/SheetContainer.d.ts +1 -1
  56. package/dist/types/src/components/SheetContainer.d.ts.map +1 -1
  57. package/dist/types/src/components/index.d.ts +1 -1
  58. package/dist/types/src/components/index.d.ts.map +1 -1
  59. package/dist/types/src/defs/types.d.ts.map +1 -1
  60. package/dist/types/src/defs/util.d.ts +1 -1
  61. package/dist/types/src/defs/util.d.ts.map +1 -1
  62. package/dist/types/src/extensions/compute.d.ts +3 -2
  63. package/dist/types/src/extensions/compute.d.ts.map +1 -1
  64. package/dist/types/src/extensions/compute.stories.d.ts.map +1 -1
  65. package/dist/types/src/graph/compute-graph-registry.d.ts +34 -0
  66. package/dist/types/src/graph/compute-graph-registry.d.ts.map +1 -0
  67. package/dist/types/src/graph/compute-graph.d.ts +17 -34
  68. package/dist/types/src/graph/compute-graph.d.ts.map +1 -1
  69. package/dist/types/src/graph/compute-graph.stories.d.ts.map +1 -1
  70. package/dist/types/src/graph/compute-graph.test.d.ts +2 -0
  71. package/dist/types/src/graph/compute-graph.test.d.ts.map +1 -0
  72. package/dist/types/src/graph/compute-node.d.ts +9 -2
  73. package/dist/types/src/graph/compute-node.d.ts.map +1 -1
  74. package/dist/types/src/graph/{async-function.d.ts → functions/async-function.d.ts} +13 -4
  75. package/dist/types/src/graph/functions/async-function.d.ts.map +1 -0
  76. package/dist/types/src/graph/functions/edge-function.d.ts +21 -0
  77. package/dist/types/src/graph/functions/edge-function.d.ts.map +1 -0
  78. package/dist/types/src/graph/functions/function-defs.d.ts.map +1 -0
  79. package/dist/types/src/graph/functions/index.d.ts +4 -0
  80. package/dist/types/src/graph/functions/index.d.ts.map +1 -0
  81. package/dist/types/src/graph/index.d.ts +2 -1
  82. package/dist/types/src/graph/index.d.ts.map +1 -1
  83. package/dist/types/src/graph/testing/index.d.ts +3 -0
  84. package/dist/types/src/graph/testing/index.d.ts.map +1 -0
  85. package/dist/types/src/graph/testing/test-builder.d.ts +15 -0
  86. package/dist/types/src/graph/testing/test-builder.d.ts.map +1 -0
  87. package/dist/types/src/graph/testing/test-plugin.d.ts +36 -0
  88. package/dist/types/src/graph/testing/test-plugin.d.ts.map +1 -0
  89. package/dist/types/src/hooks/useComputeGraph.d.ts.map +1 -1
  90. package/dist/types/src/hooks/useSheetModel.d.ts +2 -2
  91. package/dist/types/src/hooks/useSheetModel.d.ts.map +1 -1
  92. package/dist/types/src/model/sheet-model.d.ts +3 -3
  93. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  94. package/dist/types/src/model/sheet-model.test.d.ts +2 -0
  95. package/dist/types/src/model/sheet-model.test.d.ts.map +1 -0
  96. package/dist/types/src/testing/testing.d.ts +4 -5
  97. package/dist/types/src/testing/testing.d.ts.map +1 -1
  98. package/dist/types/src/types.d.ts +4 -3
  99. package/dist/types/src/types.d.ts.map +1 -1
  100. package/package.json +40 -39
  101. package/src/SheetPlugin.tsx +19 -15
  102. package/src/components/CellEditor/CellEditor.stories.tsx +2 -3
  103. package/src/components/CellEditor/extension.test.ts +0 -1
  104. package/src/components/CellEditor/extension.ts +4 -3
  105. package/src/components/GridSheet/GridSheet.stories.tsx +5 -4
  106. package/src/components/GridSheet/GridSheet.tsx +27 -9
  107. package/src/components/GridSheet/util.ts +93 -34
  108. package/src/components/Sheet/Sheet.stories.tsx +21 -20
  109. package/src/components/Sheet/Sheet.tsx +30 -14
  110. package/src/components/Sheet/sheet-context.tsx +4 -4
  111. package/src/components/SheetContainer.tsx +13 -15
  112. package/src/defs/types.ts +1 -0
  113. package/src/defs/util.ts +19 -3
  114. package/src/extensions/compute.stories.tsx +20 -20
  115. package/src/extensions/compute.ts +91 -42
  116. package/src/graph/compute-graph-registry.ts +90 -0
  117. package/src/graph/compute-graph.stories.tsx +4 -3
  118. package/src/graph/compute-graph.test.ts +87 -0
  119. package/src/graph/compute-graph.ts +73 -121
  120. package/src/graph/compute-node.ts +17 -5
  121. package/src/graph/{async-function.ts → functions/async-function.ts} +23 -15
  122. package/src/graph/{edge-function.ts → functions/edge-function.ts} +14 -13
  123. package/src/graph/functions/index.ts +7 -0
  124. package/src/graph/hyperformula.test.ts +1 -2
  125. package/src/graph/index.ts +2 -1
  126. package/src/graph/testing/index.ts +6 -0
  127. package/src/graph/testing/test-builder.ts +54 -0
  128. package/src/graph/{custom-function.ts → testing/test-plugin.ts} +43 -9
  129. package/src/hooks/hooks.stories.tsx +3 -3
  130. package/src/hooks/useComputeGraph.ts +9 -1
  131. package/src/hooks/useSheetModel.ts +4 -7
  132. package/src/model/sheet-model.test.ts +57 -0
  133. package/src/model/sheet-model.ts +47 -30
  134. package/src/testing/testing.tsx +17 -15
  135. package/src/types.ts +7 -7
  136. package/dist/lib/browser/SheetContainer-V4GCCZTX.mjs.map +0 -7
  137. package/dist/lib/browser/chunk-6ZMQVB4Z.mjs.map +0 -7
  138. package/dist/lib/browser/chunk-U2JHW3L6.mjs.map +0 -7
  139. package/dist/lib/browser/graph-T27BOBOV.mjs +0 -21
  140. package/dist/lib/node/SheetContainer-3ZY7MPWJ.cjs.map +0 -7
  141. package/dist/lib/node/chunk-DD6FIXWC.cjs.map +0 -7
  142. package/dist/lib/node/chunk-OTTD7FBK.cjs.map +0 -7
  143. package/dist/lib/node/graph-SPKGX7W4.cjs +0 -43
  144. package/dist/lib/node/graph-SPKGX7W4.cjs.map +0 -7
  145. package/dist/lib/node-esm/SheetContainer-PXSJX6XK.mjs.map +0 -7
  146. package/dist/lib/node-esm/chunk-7HVSOTGA.mjs.map +0 -7
  147. package/dist/lib/node-esm/chunk-D6KU5MI7.mjs.map +0 -7
  148. package/dist/lib/node-esm/graph-U67IO4UC.mjs +0 -22
  149. package/dist/types/src/graph/async-function.d.ts.map +0 -1
  150. package/dist/types/src/graph/compute-graph.browser.test.d.ts +0 -2
  151. package/dist/types/src/graph/compute-graph.browser.test.d.ts.map +0 -1
  152. package/dist/types/src/graph/custom-function.d.ts +0 -21
  153. package/dist/types/src/graph/custom-function.d.ts.map +0 -1
  154. package/dist/types/src/graph/edge-function.d.ts +0 -20
  155. package/dist/types/src/graph/edge-function.d.ts.map +0 -1
  156. package/dist/types/src/graph/function-defs.d.ts.map +0 -1
  157. package/src/graph/compute-graph.browser.test.ts +0 -104
  158. /package/dist/lib/browser/{graph-T27BOBOV.mjs.map → graph-M4IQ76QX.mjs.map} +0 -0
  159. /package/dist/lib/node-esm/{graph-U67IO4UC.mjs.map → graph-SMPUMOV2.mjs.map} +0 -0
  160. /package/dist/types/src/graph/{function-defs.d.ts → functions/function-defs.d.ts} +0 -0
  161. /package/src/graph/{function-defs.ts → functions/function-defs.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../../../src/testing/testing.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAKrD,OAAO,EAAE,KAAK,YAAY,EAAwB,MAAM,UAAU,CAAC;AACnE,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnE,eAAO,MAAM,aAAa,SAAS,CAAC;AAGpC,eAAO,MAAM,WAAW,QAAO,MAAM,CAAC,MAAM,EAAE,SAAS,CA0BrD,CAAC;AAEH,eAAO,MAAM,YAAY,WAAY,KAAK,UAAU,YAAY,YAAY,kBAAkB,6CAU7F,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,SAOhC,CAAC"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../../../src/testing/testing.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAKrD,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAwB,MAAM,UAAU,CAAC;AAC7F,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAInE,eAAO,MAAM,eAAe,QAAO,MAAM,CAAC,MAAM,EAAE,SAAS,CA0BzD,CAAC;AAEH,eAAO,MAAM,YAAY,WAAY,KAAK,UAAU,YAAY,YAAY,kBAAkB,6CAW7F,CAAC;AAEF,eAAO,MAAM,yBAAyB,aACzB,mBAAmB,KAAG,SAQhC,CAAC"}
@@ -47,7 +47,7 @@ export declare const RowColumnMeta: S.Struct<{
47
47
  size: S.optional<typeof S.Number>;
48
48
  }>;
49
49
  declare const SheetType_base: import("@dxos/echo-schema").AbstractTypedObject<{
50
- title?: string | undefined;
50
+ name?: string | undefined;
51
51
  cells: {
52
52
  [x: string]: {
53
53
  value: any;
@@ -109,7 +109,7 @@ declare const SheetType_base: import("@dxos/echo-schema").AbstractTypedObject<{
109
109
  } & {
110
110
  id: string;
111
111
  }, S.Struct.Encoded<{
112
- title: S.optional<typeof S.String>;
112
+ name: S.optional<typeof S.String>;
113
113
  cells: S.mutable<S.Record$<typeof S.String, S.mutable<S.Struct<{
114
114
  value: typeof S.Any;
115
115
  }>>>>;
@@ -168,7 +168,8 @@ export type SheetSize = {
168
168
  columns: number;
169
169
  };
170
170
  export type CreateSheetOptions = {
171
- title?: string;
171
+ name?: string;
172
+ cells?: Record<string, CellValue>;
172
173
  } & Partial<SheetSize>;
173
174
  export {};
174
175
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,EAAe,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMxD,oBAAY,WAAW;IACrB,MAAM,wCAA2B;CAClC;AAKD,KAAK,cAAc,CAAC,CAAC,IAAI;IACvB,MAAM,EAAE;QACN,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;QAClC,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC;KAC9F,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAC/C,sBAAsB,GACtB,oBAAoB,GACpB,yBAAyB,GACzB,uBAAuB,GACvB,oBAAoB,GACpB,cAAc,GACd,iBAAiB,GACjB,aAAa,GACb,cAAc,CAAC,SAAS,CAAC,CAAC;AAE5B,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAE/D,eAAO,MAAM,SAAS;;EAMpB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,CAAC;AAExD;;GAEG;AAEH,oBAAY,aAAa;IACvB,IAAI,IAAI;IACR,MAAM,IAAI;IACV,OAAO,IAAI;IACX,MAAM,IAAI;IAGV,OAAO,KAAK;IACZ,QAAQ,KAAK;IAGb,QAAQ,KAAK;IACb,IAAI,KAAK;IACT,IAAI,KAAK;IAIT,GAAG,KAAK;IACR,GAAG,KAAK;CACT;AAED,eAAO,MAAM,SAAS,+BAAyB,CAAC;AAEhD,eAAO,MAAM,UAAU;;;;;EAKrB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,UAAU,CAAC,CAAC;AAG1D,eAAO,MAAM,aAAa;;EAExB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuBiC,CAAC;;oBACY,CAAC;uBAE5B,CAAC;wBACiB,CAAC;;;;;;;;2BAYH,CAAC;qBAAuC,CAAC;;iBAA8C,CAAC;sBAA4E,CAAC;;;mBAAwE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAhBhP,CAAC;;oBACY,CAAC;uBAE5B,CAAC;wBACiB,CAAC;;;;;;;;2BAYH,CAAC;qBAAuC,CAAC;;iBAA8C,CAAC;sBAA4E,CAAC;;;mBAAwE,CAAC;;;;;;;;AAlCpR,qBAAa,SAAU,SAAQ,cAuB7B;CAAG;AAEL,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAE/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,EAAe,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMxD,oBAAY,WAAW;IACrB,MAAM,wCAA2B;CAClC;AAKD,KAAK,cAAc,CAAC,CAAC,IAAI;IACvB,MAAM,EAAE;QACN,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;QAClC,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC;KAC9F,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAC/C,sBAAsB,GACtB,oBAAoB,GACpB,yBAAyB,GACzB,uBAAuB,GACvB,oBAAoB,GACpB,cAAc,GACd,iBAAiB,GACjB,aAAa,GACb,cAAc,CAAC,SAAS,CAAC,CAAC;AAE5B,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAE/D,eAAO,MAAM,SAAS;;EAMpB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,CAAC;AAExD;;GAEG;AAEH,oBAAY,aAAa;IACvB,IAAI,IAAI;IACR,MAAM,IAAI;IACV,OAAO,IAAI;IACX,MAAM,IAAI;IAGV,OAAO,KAAK;IACZ,QAAQ,KAAK;IAGb,QAAQ,KAAK;IACb,IAAI,KAAK;IACT,IAAI,KAAK;IAIT,GAAG,KAAK;IACR,GAAG,KAAK;CACT;AAED,eAAO,MAAM,SAAS,+BAAyB,CAAC;AAEhD,eAAO,MAAM,UAAU;;;;;EAKrB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,UAAU,CAAC,CAAC;AAG1D,eAAO,MAAM,aAAa;;EAExB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqB0E,CAAC;;oBAG5E,CAAC;uBAAyC,CAAC;wBAE7B,CAAC;;;;;;;;2BAYb,CAAA;qBACe,CAAC;;iBAA8C,CAAC;sBAA4E,CAAC;;;mBAAwE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAlB5I,CAAC;;oBAG5E,CAAC;uBAAyC,CAAC;wBAE7B,CAAC;;;;;;;;2BAYb,CAAA;qBACe,CAAC;;iBAA8C,CAAC;sBAA4E,CAAC;;;mBAAwE,CAAC;;;;;;;;AAlCzN,qBAAa,SAAU,SAAQ,cAuB7B;CAAG;AAEL,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACnC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-sheet",
3
- "version": "0.6.12-main.15a606f",
3
+ "version": "0.6.12-main.568932b",
4
4
  "description": "Braneframe sketch plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -57,16 +57,17 @@
57
57
  "src"
58
58
  ],
59
59
  "dependencies": {
60
- "@codemirror/autocomplete": "^6.18.0",
61
- "@codemirror/language": "^6.10.2",
60
+ "@codemirror/autocomplete": "^6.18.1",
61
+ "@codemirror/language": "^6.10.3",
62
62
  "@codemirror/state": "^6.4.1",
63
- "@codemirror/view": "^6.29.1",
63
+ "@codemirror/view": "^6.34.1",
64
64
  "@dnd-kit/core": "^6.0.5",
65
65
  "@dnd-kit/modifiers": "^6.0.0",
66
66
  "@dnd-kit/sortable": "^7.0.1",
67
67
  "@dnd-kit/utilities": "^3.2.0",
68
- "@lezer/common": "^1.2.1",
69
- "@lezer/highlight": "^1.2.0",
68
+ "@effect/schema": "^0.75.1",
69
+ "@lezer/common": "^1.2.2",
70
+ "@lezer/highlight": "^1.2.1",
70
71
  "@lezer/lezer": "^1.1.2",
71
72
  "@lezer/lr": "^1.4.2",
72
73
  "@preact/signals-core": "^1.6.0",
@@ -78,29 +79,29 @@
78
79
  "re-resizable": "^6.9.17",
79
80
  "react-markdown": "^8.0.5",
80
81
  "react-resize-detector": "^11.0.1",
81
- "@dxos/app-framework": "0.6.12-main.15a606f",
82
- "@dxos/async": "0.6.12-main.15a606f",
83
- "@dxos/client": "0.6.12-main.15a606f",
84
- "@dxos/crypto": "0.6.12-main.15a606f",
85
- "@dxos/context": "0.6.12-main.15a606f",
86
- "@dxos/debug": "0.6.12-main.15a606f",
87
- "@dxos/echo-schema": "0.6.12-main.15a606f",
88
- "@dxos/invariant": "0.6.12-main.15a606f",
89
- "@dxos/keys": "0.6.12-main.15a606f",
90
- "@dxos/plugin-attention": "0.6.12-main.15a606f",
91
- "@dxos/log": "0.6.12-main.15a606f",
92
- "@dxos/plugin-client": "0.6.12-main.15a606f",
93
- "@dxos/plugin-graph": "0.6.12-main.15a606f",
94
- "@dxos/plugin-markdown": "0.6.12-main.15a606f",
95
- "@dxos/plugin-script": "0.6.12-main.15a606f",
96
- "@dxos/plugin-space": "0.6.12-main.15a606f",
97
- "@dxos/react-client": "0.6.12-main.15a606f",
98
- "@dxos/plugin-stack": "0.6.12-main.15a606f",
99
- "@dxos/react-hooks": "0.6.12-main.15a606f",
100
- "@dxos/react-ui-attention": "0.6.12-main.15a606f",
101
- "@dxos/react-ui-editor": "0.6.12-main.15a606f",
102
- "@dxos/react-ui-grid": "0.6.12-main.15a606f",
103
- "@dxos/util": "0.6.12-main.15a606f"
82
+ "@dxos/app-framework": "0.6.12-main.568932b",
83
+ "@dxos/async": "0.6.12-main.568932b",
84
+ "@dxos/client": "0.6.12-main.568932b",
85
+ "@dxos/crypto": "0.6.12-main.568932b",
86
+ "@dxos/context": "0.6.12-main.568932b",
87
+ "@dxos/debug": "0.6.12-main.568932b",
88
+ "@dxos/echo-schema": "0.6.12-main.568932b",
89
+ "@dxos/invariant": "0.6.12-main.568932b",
90
+ "@dxos/plugin-attention": "0.6.12-main.568932b",
91
+ "@dxos/keys": "0.6.12-main.568932b",
92
+ "@dxos/log": "0.6.12-main.568932b",
93
+ "@dxos/plugin-client": "0.6.12-main.568932b",
94
+ "@dxos/plugin-graph": "0.6.12-main.568932b",
95
+ "@dxos/plugin-markdown": "0.6.12-main.568932b",
96
+ "@dxos/plugin-space": "0.6.12-main.568932b",
97
+ "@dxos/react-client": "0.6.12-main.568932b",
98
+ "@dxos/plugin-stack": "0.6.12-main.568932b",
99
+ "@dxos/react-hooks": "0.6.12-main.568932b",
100
+ "@dxos/react-ui-editor": "0.6.12-main.568932b",
101
+ "@dxos/react-ui-attention": "0.6.12-main.568932b",
102
+ "@dxos/plugin-script": "0.6.12-main.568932b",
103
+ "@dxos/react-ui-grid": "0.6.12-main.568932b",
104
+ "@dxos/util": "0.6.12-main.568932b"
104
105
  },
105
106
  "devDependencies": {
106
107
  "@lezer/generator": "^1.7.1",
@@ -113,20 +114,20 @@
113
114
  "react": "~18.2.0",
114
115
  "react-dom": "~18.2.0",
115
116
  "vite": "5.4.7",
116
- "@dxos/echo-generator": "0.6.12-main.15a606f",
117
- "@dxos/random": "0.6.12-main.15a606f",
118
- "@dxos/react-ui": "0.6.12-main.15a606f",
119
- "@dxos/react-ui-syntax-highlighter": "0.6.12-main.15a606f",
120
- "@dxos/react-ui-types": "0.6.12-main.15a606f",
121
- "@dxos/react-ui-theme": "0.6.12-main.15a606f",
122
- "@dxos/storybook-utils": "0.6.12-main.15a606f"
117
+ "@dxos/echo-generator": "0.6.12-main.568932b",
118
+ "@dxos/random": "0.6.12-main.568932b",
119
+ "@dxos/react-ui": "0.6.12-main.568932b",
120
+ "@dxos/react-ui-syntax-highlighter": "0.6.12-main.568932b",
121
+ "@dxos/react-ui-theme": "0.6.12-main.568932b",
122
+ "@dxos/react-ui-types": "0.6.12-main.568932b",
123
+ "@dxos/storybook-utils": "0.6.12-main.568932b"
123
124
  },
124
- "optionalDependencies": {
125
+ "peerDependencies": {
125
126
  "@phosphor-icons/react": "^2.1.5",
126
127
  "react": "~18.2.0",
127
128
  "react-dom": "~18.2.0",
128
- "@dxos/react-ui": "0.6.12-main.15a606f",
129
- "@dxos/react-ui-theme": "0.6.12-main.15a606f"
129
+ "@dxos/react-ui": "0.6.12-main.568932b",
130
+ "@dxos/react-ui-theme": "0.6.12-main.568932b"
130
131
  },
131
132
  "publishConfig": {
132
133
  "access": "public"
@@ -15,13 +15,15 @@ import { getSpace, isEchoObject } from '@dxos/react-client/echo';
15
15
 
16
16
  import { ComputeGraphContextProvider, SheetContainer } from './components';
17
17
  import { compareIndexPositions, createSheet } from './defs';
18
+ import { computeGraphFacet } from './extensions';
18
19
  import { type ComputeGraphRegistry } from './graph';
20
+ import { useComputeGraph } from './hooks';
19
21
  import meta, { SHEET_PLUGIN } from './meta';
20
22
  import translations from './translations';
21
23
  import { SheetAction, SheetType, type SheetPluginProvides } from './types';
22
24
 
23
25
  export const SheetPlugin = (): PluginDefinition<SheetPluginProvides> => {
24
- let graphRegistry: ComputeGraphRegistry | undefined;
26
+ let computeGraphRegistry: ComputeGraphRegistry | undefined;
25
27
 
26
28
  return {
27
29
  meta,
@@ -36,18 +38,18 @@ export const SheetPlugin = (): PluginDefinition<SheetPluginProvides> => {
36
38
  }
37
39
 
38
40
  // Async import removes direct dependency on hyperformula.
39
- const { createComputeGraphRegistry } = await import('./graph');
40
- graphRegistry = createComputeGraphRegistry({ remoteFunctionUrl });
41
+ const { ComputeGraphRegistry } = await import('./graph');
42
+ computeGraphRegistry = new ComputeGraphRegistry({ remoteFunctionUrl });
41
43
  },
42
44
  provides: {
43
45
  context: ({ children }) => {
44
- invariant(graphRegistry);
45
- return <ComputeGraphContextProvider registry={graphRegistry}>{children}</ComputeGraphContextProvider>;
46
+ invariant(computeGraphRegistry);
47
+ return <ComputeGraphContextProvider registry={computeGraphRegistry}>{children}</ComputeGraphContextProvider>;
46
48
  },
47
49
  metadata: {
48
50
  records: {
49
51
  [SheetType.typename]: {
50
- label: (object: any) => (object instanceof SheetType ? object.title : undefined),
52
+ label: (object: any) => (object instanceof SheetType ? object.name : undefined),
51
53
  placeholder: ['sheet title placeholder', { ns: SHEET_PLUGIN }],
52
54
  icon: 'ph--grid-nine--regular',
53
55
  },
@@ -108,12 +110,13 @@ export const SheetPlugin = (): PluginDefinition<SheetPluginProvides> => {
108
110
  },
109
111
  },
110
112
  markdown: {
111
- // TODO(burdon): Construct compute node.
112
- extensions: ({ document }) => {
113
- return undefined;
114
- // return [
115
- // compute(document)
116
- // ];
113
+ extensions: ({ document: doc }) => {
114
+ invariant(computeGraphRegistry);
115
+ const space = getSpace(doc);
116
+ if (space) {
117
+ const computeGraph = computeGraphRegistry.getOrCreateGraph(space);
118
+ return computeGraphFacet.of(computeGraph);
119
+ }
117
120
  },
118
121
  },
119
122
  stack: {
@@ -138,12 +141,13 @@ export const SheetPlugin = (): PluginDefinition<SheetPluginProvides> => {
138
141
  },
139
142
  surface: {
140
143
  component: ({ data, role }) => {
141
- const space = isEchoObject(data.object) && getSpace(data.object);
142
- if (space && data.object instanceof SheetType) {
144
+ const space = isEchoObject(data.object) ? getSpace(data.object) : undefined;
145
+ const graph = useComputeGraph(space);
146
+ if (graph && data.object instanceof SheetType) {
143
147
  switch (role) {
144
148
  case 'article':
145
149
  case 'section': {
146
- return <SheetContainer sheet={data.object} space={space} role={role} />;
150
+ return <SheetContainer graph={graph} sheet={data.object} role={role} />;
147
151
  }
148
152
  }
149
153
  }
@@ -42,14 +42,13 @@ const AutomergeStory = ({ value, ...props }: StoryProps) => {
42
42
  const [object, setObject] = useState<EchoReactiveObject<SheetType>>();
43
43
  useEffect(() => {
44
44
  setTimeout(async () => {
45
- const client = new Client();
45
+ const client = new Client({ types: [SheetType] });
46
46
  await client.initialize();
47
47
  await client.halo.createIdentity();
48
48
  const space = await client.spaces.create();
49
- client.addTypes([SheetType]);
50
49
 
51
50
  const sheet = createSheet();
52
- sheet.title = 'Test';
51
+ sheet.name = 'Test';
53
52
  sheet.cells[cell] = { value };
54
53
  space.db.add(sheet);
55
54
  setObject(sheet);
@@ -4,7 +4,6 @@
4
4
 
5
5
  import { CompletionContext, type CompletionSource } from '@codemirror/autocomplete';
6
6
  import { EditorState } from '@codemirror/state';
7
- // @ts-ignore
8
7
  import { testTree } from '@lezer/generator/test';
9
8
  import { spreadsheet } from 'codemirror-lang-spreadsheet';
10
9
  import { describe, expect, test } from 'vitest';
@@ -12,12 +12,13 @@ import {
12
12
  startCompletion,
13
13
  } from '@codemirror/autocomplete';
14
14
  import { HighlightStyle, type Language, syntaxHighlighting } from '@codemirror/language';
15
- import { type Extension, Facet } from '@codemirror/state';
15
+ import { type Extension } from '@codemirror/state';
16
16
  import { type EditorView, ViewPlugin, type ViewUpdate, keymap } from '@codemirror/view';
17
17
  import { type SyntaxNode } from '@lezer/common';
18
18
  import { tags } from '@lezer/highlight';
19
19
  import { spreadsheet } from 'codemirror-lang-spreadsheet';
20
20
 
21
+ import { singleValueFacet } from '@dxos/react-ui-editor/state';
21
22
  import { mx } from '@dxos/react-ui-theme';
22
23
 
23
24
  import { type FunctionDefinition } from '../../graph';
@@ -59,7 +60,7 @@ const highlightStyles = HighlightStyle.define([
59
60
  },
60
61
  ]);
61
62
 
62
- const languageFacet = Facet.define<Language>();
63
+ const languageFacet = singleValueFacet<Language>();
63
64
 
64
65
  export type SheetExtensionOptions = {
65
66
  functions?: FunctionDefinition[];
@@ -229,7 +230,7 @@ export const rangeExtension = (onInit: (notifier: CellRangeNotifier) => void): E
229
230
 
230
231
  // Find first Range or cell at cursor.
231
232
  activeRange = undefined;
232
- const [language] = view.state.facet(languageFacet);
233
+ const language = view.state.facet(languageFacet);
233
234
  const { topNode } = language.parser.parse(view.state.doc.toString());
234
235
  visitTree(topNode, ({ type, from, to }) => {
235
236
  if (from <= anchor && to >= anchor) {
@@ -10,14 +10,15 @@ import { withTheme, withLayout } from '@dxos/storybook-utils';
10
10
 
11
11
  import { GridSheet } from './GridSheet';
12
12
  import { useComputeGraph } from '../../hooks';
13
- import { useTestSheet, withGraphDecorator } from '../../testing';
13
+ import { useTestSheet, withComputeGraphDecorator } from '../../testing';
14
+ import { SheetType } from '../../types';
14
15
 
15
16
  export default {
16
17
  title: 'plugin-sheet/GridSheet',
17
18
  component: GridSheet,
18
19
  decorators: [
19
- withClientProvider({ createSpace: true }),
20
- withGraphDecorator,
20
+ withClientProvider({ types: [SheetType], createSpace: true }),
21
+ withComputeGraphDecorator(),
21
22
  withTheme,
22
23
  withLayout({ fullscreen: true, tooltips: true }),
23
24
  ],
@@ -31,5 +32,5 @@ export const Basic = () => {
31
32
  return null;
32
33
  }
33
34
 
34
- return <GridSheet space={space} sheet={sheet} />;
35
+ return <GridSheet graph={graph} sheet={sheet} />;
35
36
  };
@@ -4,7 +4,6 @@
4
4
 
5
5
  import React, { useCallback, useMemo, useRef } from 'react';
6
6
 
7
- import { type Space } from '@dxos/client/echo';
8
7
  import {
9
8
  type DxGridElement,
10
9
  Grid,
@@ -13,8 +12,9 @@ import {
13
12
  useGridContext,
14
13
  } from '@dxos/react-ui-grid';
15
14
 
16
- import { dxGridCellIndexToSheetCellAddress, useSheetModelDxGridProps } from './util';
15
+ import { colLabelCell, dxGridCellIndexToSheetCellAddress, rowLabelCell, useSheetModelDxGridProps } from './util';
17
16
  import { rangeToA1Notation, type CellRange } from '../../defs';
17
+ import { type ComputeGraph } from '../../graph';
18
18
  import { useFormattingModel, useSheetModel, type UseSheetModelOptions } from '../../hooks';
19
19
  import { type SheetModel, type FormattingModel } from '../../model';
20
20
  import { type SheetType } from '../../types';
@@ -49,8 +49,25 @@ const GridSheetCellEditor = ({
49
49
  ) : null;
50
50
  };
51
51
 
52
- const sheetRowDefault = { size: 32, resizeable: true };
53
- const sheetColDefault = { size: 180, resizeable: true };
52
+ const initialCells = {
53
+ grid: {},
54
+ frozenColsStart: [...Array(64)].reduce((acc, _, i) => {
55
+ acc[`0,${i}`] = rowLabelCell(i);
56
+ return acc;
57
+ }, {}),
58
+ frozenRowsStart: [...Array(12)].reduce((acc, _, i) => {
59
+ acc[`${i},0`] = colLabelCell(i);
60
+ return acc;
61
+ }, {}),
62
+ };
63
+
64
+ const frozen = {
65
+ frozenColsStart: 1,
66
+ frozenRowsStart: 1,
67
+ };
68
+
69
+ const sheetRowDefault = { grid: { size: 32, resizeable: true } };
70
+ const sheetColDefault = { frozenColsStart: { size: 48 }, grid: { size: 180, resizeable: true } };
54
71
 
55
72
  const GridSheetImpl = ({
56
73
  model,
@@ -108,7 +125,7 @@ const GridSheetImpl = ({
108
125
  [editing],
109
126
  );
110
127
 
111
- const { cells, columns, rows } = useSheetModelDxGridProps(model, formatting);
128
+ const { columns, rows } = useSheetModelDxGridProps(dxGrid, model, formatting);
112
129
 
113
130
  const extension = useMemo(
114
131
  () => [
@@ -123,23 +140,24 @@ const GridSheetImpl = ({
123
140
  <>
124
141
  <GridSheetCellEditor model={model} extension={extension} />
125
142
  <Grid.Content
126
- cells={cells}
143
+ initialCells={initialCells}
127
144
  columns={columns}
128
145
  rows={rows}
129
146
  onAxisResize={handleAxisResize}
130
147
  onSelect={handleSelect}
131
148
  rowDefault={sheetRowDefault}
132
149
  columnDefault={sheetColDefault}
150
+ frozen={frozen}
133
151
  ref={dxGrid}
134
152
  />
135
153
  </>
136
154
  );
137
155
  };
138
156
 
139
- export type GridSheetProps = { space?: Space; sheet?: SheetType } & UseSheetModelOptions;
157
+ export type GridSheetProps = { graph?: ComputeGraph; sheet?: SheetType } & UseSheetModelOptions;
140
158
 
141
- export const GridSheet = ({ space, sheet, ...options }: GridSheetProps) => {
142
- const model = useSheetModel(space, sheet, options);
159
+ export const GridSheet = ({ graph, sheet, ...options }: GridSheetProps) => {
160
+ const model = useSheetModel(graph, sheet, options);
143
161
  const formatting = useFormattingModel(model);
144
162
  if (!model || !formatting) {
145
163
  return null;
@@ -2,13 +2,23 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { useEffect, useState } from 'react';
5
+ import { type MutableRefObject, useEffect, useLayoutEffect, useState } from 'react';
6
6
 
7
7
  import { createDocAccessor } from '@dxos/react-client/echo';
8
- import { type GridEditing, type GridContentProps } from '@dxos/react-ui-grid';
8
+ import {
9
+ type GridEditing,
10
+ type GridContentProps,
11
+ type DxGridElement,
12
+ type DxGridAxisMeta,
13
+ type DxGridPlane,
14
+ type DxGridPlaneRange,
15
+ type DxGridPlaneCells,
16
+ colToA1Notation,
17
+ rowToA1Notation,
18
+ } from '@dxos/react-ui-grid';
9
19
  import { mx } from '@dxos/react-ui-theme';
10
20
 
11
- import { addressFromIndex, type CellAddress } from '../../defs';
21
+ import { type CellAddress } from '../../defs';
12
22
  import { type SheetModel, type FormattingModel } from '../../model';
13
23
 
14
24
  export const dxGridCellIndexToSheetCellAddress = (gridEditing: GridEditing): CellAddress | null => {
@@ -22,47 +32,96 @@ export const dxGridCellIndexToSheetCellAddress = (gridEditing: GridEditing): Cel
22
32
  };
23
33
  };
24
34
 
25
- const createDxGridCells = (model: SheetModel, formatting: FormattingModel) => {
26
- return Object.keys(model.sheet.cells).reduce((acc: NonNullable<GridContentProps['cells']>, sheetCellIndex) => {
27
- const address = addressFromIndex(model.sheet, sheetCellIndex);
28
- const cell = formatting.getFormatting(address);
29
- if (cell.value) {
30
- acc[`${address.col},${address.row}`] = { value: cell.value, className: mx(cell.classNames) };
31
- }
32
- return acc;
33
- }, {});
35
+ const createDxGridColumns = (model: SheetModel): DxGridAxisMeta => {
36
+ return model.sheet.columns.reduce(
37
+ (acc: DxGridAxisMeta, columnId, numericIndex) => {
38
+ if (model.sheet.columnMeta[columnId] && model.sheet.columnMeta[columnId].size) {
39
+ acc.grid[numericIndex] = { size: model.sheet.columnMeta[columnId].size, resizeable: true };
40
+ }
41
+ return acc;
42
+ },
43
+ { grid: {} },
44
+ );
34
45
  };
35
46
 
36
- const createDxGridColumns = (model: SheetModel): GridContentProps['columns'] => {
37
- return model.sheet.columns.reduce((acc: NonNullable<GridContentProps['columns']>, columnId, numericIndex) => {
38
- if (model.sheet.columnMeta[columnId] && model.sheet.columnMeta[columnId].size) {
39
- acc[numericIndex] = { size: model.sheet.columnMeta[columnId].size, resizeable: true };
40
- }
41
- return acc;
42
- }, {});
47
+ const createDxGridRows = (model: SheetModel): DxGridAxisMeta => {
48
+ return model.sheet.rows.reduce(
49
+ (acc: DxGridAxisMeta, rowId, numericIndex) => {
50
+ if (model.sheet.rowMeta[rowId] && model.sheet.rowMeta[rowId].size) {
51
+ acc.grid[numericIndex] = { size: model.sheet.rowMeta[rowId].size, resizeable: true };
52
+ }
53
+ return acc;
54
+ },
55
+ { grid: {} },
56
+ );
57
+ };
58
+
59
+ const gridCellGetter = (model: SheetModel, formatting: FormattingModel) => {
60
+ // TODO(thure): Actually use the cache.
61
+ const cachedGridCells: DxGridPlaneCells = {};
62
+ return (nextBounds: DxGridPlaneRange): DxGridPlaneCells => {
63
+ [...Array(nextBounds.end.col - nextBounds.start.col)].forEach((_, c0) => {
64
+ return [...Array(nextBounds.end.row - nextBounds.start.row)].forEach((_, r0) => {
65
+ const col = nextBounds.start.col + c0;
66
+ const row = nextBounds.start.row + r0;
67
+ const cell = formatting.getFormatting({ col, row });
68
+ if (cell.value) {
69
+ cachedGridCells;
70
+ cachedGridCells[`${col},${row}`] = { value: cell.value, className: mx(cell.classNames) };
71
+ }
72
+ });
73
+ });
74
+ return cachedGridCells;
75
+ };
43
76
  };
44
77
 
45
- const createDxGridRows = (model: SheetModel): GridContentProps['rows'] => {
46
- return model.sheet.rows.reduce((acc: NonNullable<GridContentProps['rows']>, rowId, numericIndex) => {
47
- if (model.sheet.rowMeta[rowId] && model.sheet.rowMeta[rowId].size) {
48
- acc[numericIndex] = { size: model.sheet.rowMeta[rowId].size, resizeable: true };
78
+ export const rowLabelCell = (row: number) => ({
79
+ value: rowToA1Notation(row),
80
+ className: 'text-end !pie-1',
81
+ resizeHandle: 'row',
82
+ });
83
+
84
+ export const colLabelCell = (col: number) => ({ value: colToA1Notation(col), resizeHandle: 'col' });
85
+
86
+ const cellGetter = (model: SheetModel, formatting: FormattingModel) => {
87
+ const getGridCells = gridCellGetter(model, formatting);
88
+ return (nextBounds: DxGridPlaneRange, plane: DxGridPlane): DxGridPlaneCells => {
89
+ switch (plane) {
90
+ case 'grid':
91
+ return getGridCells(nextBounds);
92
+ case 'frozenColsStart':
93
+ return [...Array(nextBounds.end.row - nextBounds.start.row)].reduce((acc, _, r0) => {
94
+ const r = nextBounds.start.row + r0;
95
+ acc[`0,${r}`] = rowLabelCell(r);
96
+ return acc;
97
+ }, {});
98
+ case 'frozenRowsStart':
99
+ return [...Array(nextBounds.end.col - nextBounds.start.col)].reduce((acc, _, c0) => {
100
+ const c = nextBounds.start.col + c0;
101
+ acc[`${c},0`] = colLabelCell(c);
102
+ return acc;
103
+ }, {});
104
+ default:
105
+ return {};
49
106
  }
50
- return acc;
51
- }, {});
107
+ };
52
108
  };
53
109
 
54
110
  export const useSheetModelDxGridProps = (
111
+ dxGridRef: MutableRefObject<DxGridElement | null>,
55
112
  model: SheetModel,
56
113
  formatting: FormattingModel,
57
- ): Pick<GridContentProps, 'cells' | 'columns' | 'rows'> => {
58
- const [dxGridCells, setDxGridCells] = useState<GridContentProps['cells']>(createDxGridCells(model, formatting));
59
- const [dxGridColumns, setDxGridColumns] = useState<GridContentProps['columns']>(createDxGridColumns(model));
60
- const [dxGridRows, setDxGridRows] = useState<GridContentProps['rows']>(createDxGridColumns(model));
114
+ ): Pick<GridContentProps, 'columns' | 'rows'> => {
115
+ const [columns, setColumns] = useState<DxGridAxisMeta>(createDxGridColumns(model));
116
+ const [rows, setRows] = useState<DxGridAxisMeta>(createDxGridColumns(model));
61
117
 
62
- useEffect(() => {
118
+ useLayoutEffect(() => {
63
119
  const cellsAccessor = createDocAccessor(model.sheet, ['cells']);
120
+ if (dxGridRef.current) {
121
+ dxGridRef.current.getCells = cellGetter(model, formatting);
122
+ }
64
123
  const handleCellsUpdate = () => {
65
- setDxGridCells(createDxGridCells(model, formatting));
124
+ dxGridRef.current?.requestUpdate('initialCells');
66
125
  };
67
126
  cellsAccessor.handle.addListener('change', handleCellsUpdate);
68
127
  return () => cellsAccessor.handle.removeListener('change', handleCellsUpdate);
@@ -72,10 +131,10 @@ export const useSheetModelDxGridProps = (
72
131
  const columnMetaAccessor = createDocAccessor(model.sheet, ['columnMeta']);
73
132
  const rowMetaAccessor = createDocAccessor(model.sheet, ['rowMeta']);
74
133
  const handleColumnMetaUpdate = () => {
75
- setDxGridColumns(createDxGridColumns(model));
134
+ setColumns(createDxGridColumns(model));
76
135
  };
77
136
  const handleRowMetaUpdate = () => {
78
- setDxGridRows(createDxGridRows(model));
137
+ setRows(createDxGridRows(model));
79
138
  };
80
139
  columnMetaAccessor.handle.addListener('change', handleColumnMetaUpdate);
81
140
  rowMetaAccessor.handle.addListener('change', handleRowMetaUpdate);
@@ -85,5 +144,5 @@ export const useSheetModelDxGridProps = (
85
144
  };
86
145
  }, [model]);
87
146
 
88
- return { cells: dxGridCells, columns: dxGridColumns, rows: dxGridRows };
147
+ return { columns, rows };
89
148
  };