@dxos/plugin-sheet 0.8.4-main.e098934 → 0.8.4-main.e8ec1fe

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 (173) hide show
  1. package/dist/lib/browser/{SheetContainer-OUN6AARA.mjs → SheetContainer-67YEU5EA.mjs} +26 -27
  2. package/dist/lib/browser/SheetContainer-67YEU5EA.mjs.map +7 -0
  3. package/dist/lib/browser/anchor-sort-FCQ5OZZK.mjs +23 -0
  4. package/dist/lib/browser/anchor-sort-FCQ5OZZK.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-X4EWLDT3.mjs → chunk-6WBJDEKF.mjs} +33 -32
  6. package/dist/lib/browser/chunk-6WBJDEKF.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-KJWZUQVA.mjs → chunk-73AV3NH6.mjs} +4 -4
  8. package/dist/lib/browser/chunk-73AV3NH6.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-SSN4HYJL.mjs → chunk-7VEWYJJN.mjs} +5 -5
  10. package/dist/lib/browser/{chunk-SSN4HYJL.mjs.map → chunk-7VEWYJJN.mjs.map} +2 -2
  11. package/dist/lib/browser/{chunk-XSXUU6FO.mjs → chunk-DVJ3QW3F.mjs} +222 -221
  12. package/dist/lib/browser/chunk-DVJ3QW3F.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-FWFAAGXL.mjs +28 -0
  14. package/dist/lib/browser/chunk-FWFAAGXL.mjs.map +7 -0
  15. package/dist/lib/browser/compute-graph-registry-AP5RA7W3.mjs +21 -0
  16. package/dist/lib/browser/compute-graph-registry-AP5RA7W3.mjs.map +7 -0
  17. package/dist/lib/browser/index.mjs +20 -21
  18. package/dist/lib/browser/index.mjs.map +3 -3
  19. package/dist/lib/browser/{intent-resolver-ROEY4LHM.mjs → intent-resolver-66OAYVQF.mjs} +9 -9
  20. package/dist/lib/browser/intent-resolver-66OAYVQF.mjs.map +7 -0
  21. package/dist/lib/browser/{markdown-VOY636TS.mjs → markdown-B6VKYY2S.mjs} +6 -6
  22. package/dist/lib/browser/{markdown-VOY636TS.mjs.map → markdown-B6VKYY2S.mjs.map} +1 -1
  23. package/dist/lib/browser/meta.json +1 -1
  24. package/dist/lib/browser/{react-surface-XCNAVF2M.mjs → react-surface-HARAYCN7.mjs} +16 -15
  25. package/dist/lib/browser/react-surface-HARAYCN7.mjs.map +7 -0
  26. package/dist/lib/browser/types/index.mjs +4 -12
  27. package/dist/lib/node-esm/{SheetContainer-NFLLTGNV.mjs → SheetContainer-NJONAMYZ.mjs} +26 -27
  28. package/dist/lib/node-esm/SheetContainer-NJONAMYZ.mjs.map +7 -0
  29. package/dist/lib/node-esm/{anchor-sort-ACQDUIPU.mjs → anchor-sort-ZE7IS7SH.mjs} +10 -11
  30. package/dist/lib/node-esm/anchor-sort-ZE7IS7SH.mjs.map +7 -0
  31. package/dist/lib/node-esm/{chunk-6SK5LJ5S.mjs → chunk-44YTKTMP.mjs} +4 -4
  32. package/dist/lib/node-esm/chunk-44YTKTMP.mjs.map +7 -0
  33. package/dist/lib/node-esm/{chunk-ODP4L4OV.mjs → chunk-4H2EHVWE.mjs} +222 -221
  34. package/dist/lib/node-esm/chunk-4H2EHVWE.mjs.map +7 -0
  35. package/dist/lib/node-esm/{chunk-IK4O7FUJ.mjs → chunk-4QV4AGWK.mjs} +5 -5
  36. package/dist/lib/node-esm/{chunk-IK4O7FUJ.mjs.map → chunk-4QV4AGWK.mjs.map} +2 -2
  37. package/dist/lib/node-esm/chunk-HILDMVPL.mjs +29 -0
  38. package/dist/lib/node-esm/chunk-HILDMVPL.mjs.map +7 -0
  39. package/dist/lib/node-esm/{chunk-PYF4ZJXN.mjs → chunk-S3RJ7IY6.mjs} +33 -32
  40. package/dist/lib/node-esm/chunk-S3RJ7IY6.mjs.map +7 -0
  41. package/dist/lib/node-esm/compute-graph-registry-UMQ5UYCL.mjs +22 -0
  42. package/dist/lib/node-esm/compute-graph-registry-UMQ5UYCL.mjs.map +7 -0
  43. package/dist/lib/node-esm/index.mjs +20 -21
  44. package/dist/lib/node-esm/index.mjs.map +3 -3
  45. package/dist/lib/node-esm/{intent-resolver-HESRI2ML.mjs → intent-resolver-VNKIMQQT.mjs} +9 -9
  46. package/dist/lib/node-esm/intent-resolver-VNKIMQQT.mjs.map +7 -0
  47. package/dist/lib/node-esm/{markdown-P4CLZ24C.mjs → markdown-VKY7HXU2.mjs} +6 -6
  48. package/dist/lib/node-esm/{markdown-P4CLZ24C.mjs.map → markdown-VKY7HXU2.mjs.map} +1 -1
  49. package/dist/lib/node-esm/meta.json +1 -1
  50. package/dist/lib/node-esm/{react-surface-KE3EEVF4.mjs → react-surface-KTQWXV2L.mjs} +16 -15
  51. package/dist/lib/node-esm/react-surface-KTQWXV2L.mjs.map +7 -0
  52. package/dist/lib/node-esm/types/index.mjs +4 -12
  53. package/dist/types/src/SheetPlugin.d.ts +1 -1
  54. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  55. package/dist/types/src/capabilities/anchor-sort.d.ts +2 -4
  56. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  57. package/dist/types/src/capabilities/compute-graph-registry.d.ts.map +1 -1
  58. package/dist/types/src/capabilities/index.d.ts +1 -4
  59. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  60. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  61. package/dist/types/src/components/ComputeGraph/compute-graph.stories.d.ts +0 -1
  62. package/dist/types/src/components/ComputeGraph/compute-graph.stories.d.ts.map +1 -1
  63. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  64. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +3 -3
  65. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
  66. package/dist/types/src/components/GridSheet/SheetCellEditor.stories.d.ts +1 -2
  67. package/dist/types/src/components/GridSheet/SheetCellEditor.stories.d.ts.map +1 -1
  68. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  69. package/dist/types/src/components/RangeList/RangeList.d.ts +2 -2
  70. package/dist/types/src/components/RangeList/RangeList.d.ts.map +1 -1
  71. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +2 -2
  72. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
  73. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts +5 -5
  74. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  75. package/dist/types/src/components/SheetContext/SheetContext.d.ts +2 -2
  76. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +1 -1
  77. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts +3 -4
  78. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
  79. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts +1 -2
  80. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts.map +1 -1
  81. package/dist/types/src/extensions/compute.stories.d.ts +2 -3
  82. package/dist/types/src/extensions/compute.stories.d.ts.map +1 -1
  83. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  84. package/dist/types/src/meta.d.ts +0 -1
  85. package/dist/types/src/meta.d.ts.map +1 -1
  86. package/dist/types/src/model/sheet-model.d.ts +5 -5
  87. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  88. package/dist/types/src/model/testing.d.ts +2 -2
  89. package/dist/types/src/model/testing.d.ts.map +1 -1
  90. package/dist/types/src/model/useSheetModel.d.ts +2 -2
  91. package/dist/types/src/model/useSheetModel.d.ts.map +1 -1
  92. package/dist/types/src/serializer.d.ts +2 -2
  93. package/dist/types/src/serializer.d.ts.map +1 -1
  94. package/dist/types/src/testing/data.d.ts +2 -2
  95. package/dist/types/src/testing/data.d.ts.map +1 -1
  96. package/dist/types/src/testing/testing.d.ts +27 -3
  97. package/dist/types/src/testing/testing.d.ts.map +1 -1
  98. package/dist/types/src/translations.d.ts +2 -2
  99. package/dist/types/src/translations.d.ts.map +1 -1
  100. package/dist/types/src/types/{schema.d.ts → Sheet.d.ts} +37 -4
  101. package/dist/types/src/types/Sheet.d.ts.map +1 -0
  102. package/dist/types/src/types/index.d.ts +1 -1
  103. package/dist/types/src/types/index.d.ts.map +1 -1
  104. package/dist/types/src/types/sheet-range-types.d.ts +2 -2
  105. package/dist/types/src/types/sheet-range-types.d.ts.map +1 -1
  106. package/dist/types/src/types/types.d.ts +7 -16
  107. package/dist/types/src/types/types.d.ts.map +1 -1
  108. package/dist/types/src/types/util.d.ts +9 -10
  109. package/dist/types/src/types/util.d.ts.map +1 -1
  110. package/dist/types/tsconfig.tsbuildinfo +1 -1
  111. package/package.json +63 -62
  112. package/src/SheetPlugin.tsx +70 -61
  113. package/src/capabilities/anchor-sort.ts +7 -8
  114. package/src/capabilities/capabilities.ts +2 -2
  115. package/src/capabilities/compute-graph-registry.ts +8 -13
  116. package/src/capabilities/intent-resolver.ts +4 -4
  117. package/src/capabilities/react-surface.tsx +9 -8
  118. package/src/components/ComputeGraph/compute-graph.stories.tsx +10 -12
  119. package/src/components/FunctionEditor/FunctionEditor.tsx +2 -2
  120. package/src/components/GridSheet/GridSheet.stories.tsx +12 -9
  121. package/src/components/GridSheet/GridSheet.tsx +20 -8
  122. package/src/components/GridSheet/SheetCellEditor.stories.tsx +7 -8
  123. package/src/components/GridSheet/util.ts +9 -3
  124. package/src/components/RangeList/RangeList.tsx +8 -8
  125. package/src/components/SheetContainer/SheetContainer.stories.tsx +46 -45
  126. package/src/components/SheetContainer/SheetContainer.tsx +10 -5
  127. package/src/components/SheetContext/SheetContext.tsx +4 -4
  128. package/src/components/SheetToolbar/SheetToolbar.stories.tsx +9 -6
  129. package/src/components/SheetToolbar/SheetToolbar.tsx +17 -19
  130. package/src/components/SheetToolbar/align.ts +3 -3
  131. package/src/components/SheetToolbar/style.ts +2 -2
  132. package/src/extensions/compute.stories.tsx +17 -14
  133. package/src/integrations/thread-ranges.ts +15 -20
  134. package/src/meta.ts +7 -5
  135. package/src/model/sheet-model.test.ts +4 -4
  136. package/src/model/sheet-model.ts +4 -4
  137. package/src/model/testing.ts +4 -4
  138. package/src/model/useSheetModel.ts +2 -2
  139. package/src/sanity.test.ts +3 -4
  140. package/src/serializer.ts +3 -3
  141. package/src/testing/data.ts +2 -2
  142. package/src/testing/testing.tsx +11 -5
  143. package/src/translations.ts +2 -2
  144. package/src/types/Sheet.ts +103 -0
  145. package/src/types/index.ts +1 -1
  146. package/src/types/sheet-range-types.ts +2 -2
  147. package/src/types/types.ts +6 -16
  148. package/src/types/util.ts +10 -38
  149. package/dist/lib/browser/SheetContainer-OUN6AARA.mjs.map +0 -7
  150. package/dist/lib/browser/anchor-sort-7WD2VGXW.mjs +0 -24
  151. package/dist/lib/browser/anchor-sort-7WD2VGXW.mjs.map +0 -7
  152. package/dist/lib/browser/chunk-6AKBCBL4.mjs +0 -18
  153. package/dist/lib/browser/chunk-6AKBCBL4.mjs.map +0 -7
  154. package/dist/lib/browser/chunk-KJWZUQVA.mjs.map +0 -7
  155. package/dist/lib/browser/chunk-X4EWLDT3.mjs.map +0 -7
  156. package/dist/lib/browser/chunk-XSXUU6FO.mjs.map +0 -7
  157. package/dist/lib/browser/compute-graph-registry-6YJHXORG.mjs +0 -30
  158. package/dist/lib/browser/compute-graph-registry-6YJHXORG.mjs.map +0 -7
  159. package/dist/lib/browser/intent-resolver-ROEY4LHM.mjs.map +0 -7
  160. package/dist/lib/browser/react-surface-XCNAVF2M.mjs.map +0 -7
  161. package/dist/lib/node-esm/SheetContainer-NFLLTGNV.mjs.map +0 -7
  162. package/dist/lib/node-esm/anchor-sort-ACQDUIPU.mjs.map +0 -7
  163. package/dist/lib/node-esm/chunk-3K5VNYOF.mjs +0 -20
  164. package/dist/lib/node-esm/chunk-3K5VNYOF.mjs.map +0 -7
  165. package/dist/lib/node-esm/chunk-6SK5LJ5S.mjs.map +0 -7
  166. package/dist/lib/node-esm/chunk-ODP4L4OV.mjs.map +0 -7
  167. package/dist/lib/node-esm/chunk-PYF4ZJXN.mjs.map +0 -7
  168. package/dist/lib/node-esm/compute-graph-registry-ET5KJNLV.mjs +0 -31
  169. package/dist/lib/node-esm/compute-graph-registry-ET5KJNLV.mjs.map +0 -7
  170. package/dist/lib/node-esm/intent-resolver-HESRI2ML.mjs.map +0 -7
  171. package/dist/lib/node-esm/react-surface-KE3EEVF4.mjs.map +0 -7
  172. package/dist/types/src/types/schema.d.ts.map +0 -1
  173. package/src/types/schema.ts +0 -61
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/Sheet.ts", "../../../src/types/util.ts", "../../../src/types/sheet-range-types.ts", "../../../src/types/types.ts", "../../../src/model/sheet-model.ts", "../../../src/model/useSheetModel.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { addressFromA1Notation, isFormula } from '@dxos/compute';\nimport { Obj, Type } from '@dxos/echo';\nimport { FormAnnotation } from '@dxos/echo/internal';\n\nimport { addressToIndex, initialize, mapFormulaRefsToIndices } from './util';\n\nexport type SheetSize = {\n rows: number;\n columns: number;\n};\n\nexport const CellValue = Schema.Struct({\n // TODO(burdon): How to store dates (datetime, date, time), percentages, etc.\n // Consider import/export; natural access for other plugins. Special handling for currency (precision).\n // TODO(burdon): Automerge (long string) or short string or number.\n value: Schema.Any,\n});\n\nexport type CellValue = Schema.Schema.Type<typeof CellValue>;\n\n// TODO(burdon): IMPORTANT: Reconcile with Field definition.\nexport const Range = Schema.Struct({\n range: Schema.String,\n key: Schema.String,\n value: Schema.String,\n});\n\nexport type Range = Schema.Schema.Type<typeof Range>;\n\n// TODO(burdon): Visibility, locked, frozen, etc.\nexport const RowColumnMeta = Schema.Struct({\n size: Schema.optional(Schema.Number),\n});\n\n// TODO(burdon): Reconcile col/column (across packages).\n// TODO(burdon): Index to all updates when rows/columns are inserted/deleted.\nexport const Sheet = Schema.Struct({\n name: Schema.optional(Schema.String),\n\n // Sparse map of cells referenced by index.\n cells: Schema.Record({ key: Schema.String, value: Schema.mutable(CellValue) }).pipe(\n Schema.mutable,\n FormAnnotation.set(false),\n ),\n\n // Ordered row indices.\n rows: Schema.Array(Schema.String).pipe(Schema.mutable, FormAnnotation.set(false)),\n\n // Ordered column indices.\n columns: Schema.Array(Schema.String).pipe(Schema.mutable, FormAnnotation.set(false)),\n\n // Row metadata referenced by index.\n rowMeta: Schema.Record({ key: Schema.String, value: Schema.mutable(RowColumnMeta) }).pipe(\n Schema.mutable,\n FormAnnotation.set(false),\n ),\n\n // Column metadata referenced by index.\n columnMeta: Schema.Record({ key: Schema.String, value: Schema.mutable(RowColumnMeta) }).pipe(\n Schema.mutable,\n FormAnnotation.set(false),\n ),\n\n // Cell formatting referenced by indexed range.\n ranges: Schema.Array(Range).pipe(Schema.mutable, FormAnnotation.set(false)),\n}).pipe(\n Type.Obj({\n typename: 'dxos.org/type/Sheet',\n version: '0.1.0',\n }),\n);\n\nexport interface Sheet extends Schema.Schema.Type<typeof Sheet> {}\n\nexport type SheetProps = {\n name?: string;\n cells?: Record<string, CellValue>;\n} & Partial<SheetSize>;\n\nexport const make = ({ name, cells = {}, ...size }: SheetProps = {}) => {\n const sheet = Obj.make(Sheet, { name, cells: {}, rows: [], columns: [], rowMeta: {}, columnMeta: {}, ranges: [] });\n\n initialize(sheet, size);\n\n if (cells) {\n Object.entries(cells).forEach(([key, { value }]) => {\n const idx = addressToIndex(sheet, addressFromA1Notation(key));\n if (isFormula(value)) {\n value = mapFormulaRefsToIndices(sheet, value);\n }\n\n sheet.cells[idx] = { value };\n });\n }\n\n return sheet;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n type CellAddress,\n type CellRange,\n type CompleteCellRange,\n addressFromA1Notation,\n addressToA1Notation,\n isFormula,\n} from '@dxos/compute';\nimport { randomBytes } from '@dxos/crypto';\nimport { invariant } from '@dxos/invariant';\n\nimport { type Sheet } from '../types';\n\nexport const MAX_ROWS = 500;\nexport const MAX_COLS = 676; // 26^2;\n\nexport const DEFAULT_ROWS = 50;\nexport const DEFAULT_COLS = 26;\n\n// TODO(burdon): Factor out from dxos/protocols to new common package.\nexport class ApiError extends Error {}\n\nexport class ReadonlyException extends ApiError {}\n\nexport class RangeException extends ApiError {\n constructor(n: number) {\n super();\n }\n}\n\n/**\n * With a string length of 8, the chance of a collision is 0.02% for a sheet with 10,000 strings.\n */\nexport const createIndex = (length = 8): string => {\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n const charactersLength = characters.length;\n const randomBuffer = randomBytes(length);\n return Array.from(randomBuffer, (byte) => characters[byte % charactersLength]).join('');\n};\n\nexport const createIndices = (length: number): string[] => Array.from({ length }).map(() => createIndex());\n\nexport const insertIndices = (indices: string[], i: number, n: number, max: number) => {\n if (i + n > max) {\n throw new RangeException(i + n);\n }\n\n const idx = createIndices(n);\n indices.splice(i, 0, ...idx);\n return idx;\n};\n\nexport const initialize = (\n sheet: Sheet.Sheet,\n { rows = DEFAULT_ROWS, columns = DEFAULT_COLS }: Partial<Sheet.SheetSize> = {},\n) => {\n if (!sheet.rows.length) {\n insertIndices(sheet.rows, 0, rows, MAX_ROWS);\n }\n if (!sheet.columns.length) {\n insertIndices(sheet.columns, 0, columns, MAX_COLS);\n }\n};\n\n/**\n * E.g., \"A1\" => \"CA2@CB3\".\n */\nexport const addressToIndex = (sheet: Sheet.Sheet, cell: CellAddress): string => {\n return `${sheet.columns[cell.col]}@${sheet.rows[cell.row]}`;\n};\n\n/**\n * E.g., \"CA2@CB3\" => \"A1\".\n */\nexport const addressFromIndex = (sheet: Sheet.Sheet, idx: string): CellAddress => {\n const [column, row] = idx.split('@');\n return {\n col: sheet.columns.indexOf(column),\n row: sheet.rows.indexOf(row),\n };\n};\n\n/**\n * E.g., \"A1:B2\" => \"CA2@CB3:CC4@CD5\".\n */\nexport const rangeToIndex = (sheet: Sheet.Sheet, range: CellRange): string => {\n return [range.from, range.to ?? range.from].map((cell) => addressToIndex(sheet, cell)).join(':');\n};\n\n/**\n * E.g., \"CA2@CB3:CC4@CD5\" => \"A1:B2\".\n */\nexport const rangeFromIndex = (sheet: Sheet.Sheet, idx: string): CompleteCellRange => {\n const [from, to] = idx.split(':').map((index) => addressFromIndex(sheet, index));\n return { from, to };\n};\n\n/**\n * Compares the positions of two cell indexes in a sheet.\n * Sorts primarily by row, then by column if rows are equal.\n */\nexport const compareIndexPositions = (sheet: Sheet.Sheet, indexA: string, indexB: string): number => {\n const { row: rowA, col: columnA } = addressFromIndex(sheet, indexA);\n const { row: rowB, col: columnB } = addressFromIndex(sheet, indexB);\n\n // Sort by row first, then by column.\n if (rowA !== rowB) {\n return rowA - rowB;\n } else {\n return columnA - columnB;\n }\n};\n\n// TODO(burdon): Tests.\n\n/**\n * Map from A1 notation to indices.\n */\nexport const mapFormulaRefsToIndices = (sheet: Sheet.Sheet, formula: string): string => {\n invariant(isFormula(formula));\n return formula.replace(/([a-zA-Z]+)([0-9]+)/g, (match) => {\n return addressToIndex(sheet, addressFromA1Notation(match));\n });\n};\n\n/**\n * Map from indices to A1 notation.\n */\nexport const mapFormulaIndicesToRefs = (sheet: Sheet.Sheet, formula: string): string => {\n invariant(isFormula(formula));\n return formula.replace(/([a-zA-Z0-9]+)@([a-zA-Z0-9]+)/g, (idx) => {\n return addressToA1Notation(addressFromIndex(sheet, idx));\n });\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ClassNameValue } from '@dxos/react-ui';\n\nimport { type Sheet } from '../types';\n\nexport const alignKey = 'alignment';\nexport type AlignKey = typeof alignKey;\nexport type AlignValue = 'start' | 'center' | 'end';\n\nexport const commentKey = 'comment';\nexport type CommentKey = typeof commentKey;\nexport type CommentValue = string;\n\nexport const styleKey = 'style';\nexport type StyleKey = typeof styleKey;\nexport type StyleValue = 'highlight' | 'softwrap';\n\n// TODO(burdon): Reconcile with plugin-table.\nexport const cellClassNameForRange = ({ key, value }: Sheet.Sheet['ranges'][number]): ClassNameValue => {\n switch (key) {\n case alignKey:\n switch (value) {\n case 'start':\n return 'text-start';\n case 'center':\n return 'text-center';\n case 'end':\n return 'text-end';\n default:\n return undefined;\n }\n\n case commentKey:\n return 'bg-gridComment';\n\n case styleKey:\n switch (value) {\n case 'highlight':\n return '!bg-gridHighlight';\n case 'softwrap':\n return '!whitespace-normal';\n default:\n return undefined;\n }\n\n default:\n return undefined;\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { meta } from '../meta';\nimport { SheetModel } from '../model';\n\nimport * as Sheet from './Sheet';\n\nexport namespace SheetAction {\n const SHEET_ACTION = `${meta.id}/action`;\n\n export class Create extends Schema.TaggedClass<Create>()(`${SHEET_ACTION}/create`, {\n input: Schema.Struct({\n name: Schema.optional(Schema.String),\n }),\n output: Schema.Struct({\n object: Sheet.Sheet,\n }),\n }) {}\n\n // TODO(wittjosiah): Factor out. This is `DxGridAxis` from `@dxos/react-ui-grid`.\n const Axis = Schema.Union(Schema.Literal('row'), Schema.Literal('col'));\n\n export class InsertAxis extends Schema.TaggedClass<InsertAxis>()(`${SHEET_ACTION}/axis-insert`, {\n input: Schema.Struct({\n // TODO(wittjosiah): Schema.instanceOf(SheetModel) throws when running tests.\n model: Schema.Any.pipe(Schema.filter((model) => model instanceof SheetModel)) as Schema.Schema<SheetModel>,\n axis: Axis,\n index: Schema.Number,\n count: Schema.optional(Schema.Number),\n }),\n output: Schema.Void,\n }) {}\n\n export const RestoreAxis = Schema.Struct({\n axis: Axis,\n axisIndex: Schema.String,\n index: Schema.Number,\n axisMeta: Sheet.RowColumnMeta,\n values: Schema.Array(Schema.Any),\n });\n\n export type RestoreAxis = Schema.Schema.Type<typeof RestoreAxis>;\n\n export class DropAxis extends Schema.TaggedClass<DropAxis>()(`${SHEET_ACTION}/axis-drop`, {\n input: Schema.Struct({\n // TODO(wittjosiah): Schema.instanceOf(SheetModel) throws when running tests.\n model: Schema.Any.pipe(Schema.filter((model) => model instanceof SheetModel)) as Schema.Schema<SheetModel>,\n axis: Axis,\n axisIndex: Schema.String,\n deletionData: Schema.optional(RestoreAxis),\n }),\n output: Schema.Void,\n }) {}\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Event } from '@dxos/async';\nimport {\n type CellAddress,\n type CellRange,\n type CellScalarValue,\n type ComputeGraph,\n type ComputeNode,\n type ComputeNodeEvent,\n DetailedCellError,\n ExportedCellChange,\n type SimpleCellAddress,\n type SimpleCellRange,\n type SimpleDate,\n type SimpleDateTime,\n addressFromA1Notation,\n addressToA1Notation,\n createSheetName,\n isFormula,\n} from '@dxos/compute';\nimport { Resource } from '@dxos/context';\nimport { Obj } from '@dxos/echo';\nimport { FormatEnum, TypeEnum } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\n\nimport {\n MAX_COLS,\n MAX_ROWS,\n ReadonlyException,\n addressFromIndex,\n addressToIndex,\n initialize,\n insertIndices,\n mapFormulaIndicesToRefs,\n mapFormulaRefsToIndices,\n} from '../types';\nimport { type Sheet, type SheetAction } from '../types';\n\n// TODO(burdon): Move to compute.\n// Map sheet types to system types.\n// https://hyperformula.handsontable.com/guide/types-of-values.html\n// - https://github.com/handsontable/hyperformula/blob/master/src/Cell.ts (CellValueType)\n// - https://github.com/handsontable/hyperformula/blob/master/src/interpreter/InterpreterValue.ts (NumberType)\nconst typeMap: Record<string, { type: TypeEnum; format?: FormatEnum }> = {\n BOOLEAN: { type: TypeEnum.Boolean },\n NUMBER_RAW: { type: TypeEnum.Number },\n NUMBER_PERCENT: { type: TypeEnum.Number, format: FormatEnum.Percent },\n NUMBER_CURRENCY: { type: TypeEnum.Number, format: FormatEnum.Currency },\n NUMBER_DATETIME: { type: TypeEnum.String, format: FormatEnum.DateTime },\n NUMBER_DATE: { type: TypeEnum.String, format: FormatEnum.Date },\n NUMBER_TIME: { type: TypeEnum.String, format: FormatEnum.Time },\n};\n\nconst getTopLeft = (range: CellRange): CellAddress => {\n const to = range.to ?? range.from;\n return { row: Math.min(range.from.row, to.row), col: Math.min(range.from.col, to.col) };\n};\n\nconst toSimpleCellAddress = (sheet: number, cell: CellAddress): SimpleCellAddress => ({\n sheet,\n row: cell.row,\n col: cell.col,\n});\n\nconst toModelRange = (sheet: number, range: CellRange): SimpleCellRange => ({\n start: toSimpleCellAddress(sheet, range.from),\n end: toSimpleCellAddress(sheet, range.to ?? range.from),\n});\n\nexport type SheetModelOptions = {\n readonly?: boolean;\n};\n\n/**\n * Spreadsheet data model.\n *\n * [ComputeGraphContext] > [SheetContext]:[SheetModel] > [Sheet.Root]\n */\n// TODO(burdon): Factor out commonality with ComputeNode. Factor out HF.\nexport class SheetModel extends Resource {\n public readonly id = `model-${PublicKey.random().truncate()}`;\n\n // Wraps compute node.\n public readonly update = new Event<ComputeNodeEvent>();\n\n private _node?: ComputeNode;\n\n constructor(\n private readonly _graph: ComputeGraph,\n private readonly _sheet: Sheet.Sheet,\n private readonly _options: SheetModelOptions = {},\n ) {\n super();\n }\n\n get graph() {\n return this._graph;\n }\n\n get sheet() {\n return this._sheet;\n }\n\n get readonly() {\n return this._options.readonly;\n }\n\n get bounds() {\n return {\n rows: this._sheet.rows.length,\n columns: this._sheet.columns.length,\n };\n }\n\n /**\n * Initialize sheet and engine.\n */\n protected override async _open(): Promise<void> {\n log('initialize', { id: this.id });\n initialize(this._sheet);\n\n this._graph.update.on((event) => {\n if (event.type === 'functionsUpdated') {\n this.reset();\n }\n });\n\n // TODO(burdon): SheetModel should extend ComputeNode and be constructed via the graph.\n this._node = this._graph.getOrCreateNode(\n createSheetName({ type: Obj.getTypename(this._sheet)!, id: this._sheet.id }),\n );\n await this._node.open();\n\n // Listen for model updates (e.g., async calculations).\n const unsubscribe = this._node.update.on((event) => this.update.emit(event));\n this._ctx.onDispose(unsubscribe);\n\n this.reset();\n }\n\n /**\n * Update engine.\n * NOTE: This resets the undo history.\n * @deprecated\n */\n reset(): void {\n invariant(this._node);\n this._node.graph.hf.clearSheet(this._node.sheetId);\n Object.entries(this._sheet.cells).forEach(([key, { value }]) => {\n invariant(this._node);\n const { col, row } = addressFromIndex(this._sheet, key);\n if (isFormula(value)) {\n const binding = this._graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(this._sheet, value));\n if (binding) {\n value = this._graph.mapFormulaToNative(binding);\n } else {\n // If binding is not found, render the cell as empty.\n // This prevents the cell from momentarily rendering an error while the binding is being loaded.\n value = '';\n }\n }\n\n this._node.graph.hf.setCellContents({ sheet: this._node.sheetId, row, col }, value);\n });\n }\n\n /**\n * Recalculate formulas.\n * NOTE: This resets the undo history.\n * https://hyperformula.handsontable.com/guide/volatile-functions.html#volatile-actions\n * @deprecated\n */\n // TODO(burdon): Remove.\n recalculate(): void {\n this._node?.graph.hf.rebuildAndRecalculate();\n }\n\n insertRows(i: number, n = 1): string[] {\n const idx = insertIndices(this._sheet.rows, i, n, MAX_ROWS);\n this.reset();\n return idx;\n }\n\n insertColumns(i: number, n = 1): string[] {\n const idx = insertIndices(this._sheet.columns, i, n, MAX_COLS);\n this.reset();\n return idx;\n }\n\n dropRow(rowIndex: string): SheetAction.RestoreAxis {\n const range = {\n from: addressFromIndex(this._sheet, `${this._sheet.columns[0]}@${rowIndex}`),\n to: addressFromIndex(this._sheet, `${this._sheet.columns[this._sheet.columns.length - 1]}@${rowIndex}`),\n };\n const values = this.getCellValues(range).flat();\n const index = this._sheet.rows.indexOf(rowIndex);\n this.clear(range);\n this._sheet.rows.splice(index, 1);\n delete this._sheet.rowMeta[rowIndex];\n this.reset();\n return { axis: 'row', index, axisIndex: rowIndex, axisMeta: this._sheet.rowMeta[rowIndex], values };\n }\n\n dropColumn(colIndex: string): SheetAction.RestoreAxis {\n const range = {\n from: addressFromIndex(this._sheet, `${colIndex}@${this._sheet.rows[0]}`),\n to: addressFromIndex(this._sheet, `${colIndex}@${this._sheet.rows[this._sheet.rows.length - 1]}`),\n };\n const values = this.getCellValues(range).flat();\n const index = this._sheet.columns.indexOf(colIndex);\n this.clear(range);\n this._sheet.columns.splice(index, 1);\n delete this._sheet.columnMeta[colIndex];\n this.reset();\n return { axis: 'col', index, axisIndex: colIndex, axisMeta: this._sheet.rowMeta[colIndex], values };\n }\n\n restoreRow({ index, axisIndex, axisMeta, values }: SheetAction.RestoreAxis): void {\n this._sheet.rows.splice(index, 0, axisIndex);\n values.forEach((value, col) => {\n if (value) {\n this._sheet.cells[`${this._sheet.columns[col]}@${axisIndex}`] = { value };\n }\n });\n if (axisMeta) {\n this._sheet.rowMeta[axisIndex] = axisMeta;\n }\n this.reset();\n }\n\n restoreColumn({ index, axisIndex, axisMeta, values }: SheetAction.RestoreAxis): void {\n this._sheet.columns.splice(index, 0, axisIndex);\n values.forEach((value, row) => {\n if (value) {\n this._sheet.cells[`${axisIndex}@${this._sheet.rows[row]}`] = { value };\n }\n });\n if (axisMeta) {\n this._sheet.columnMeta[axisIndex] = axisMeta;\n }\n this.reset();\n }\n\n //\n // Undoable actions.\n // TODO(burdon): Group undoable methods; consistently update hf/sheet.\n //\n\n /**\n * Clear range of values.\n */\n clear(range: CellRange): void {\n invariant(this._node);\n const topLeft = getTopLeft(range);\n const values = this._iterRange(range, () => null);\n this._node.graph.hf.setCellContents(toSimpleCellAddress(this._node.sheetId, topLeft), values);\n this._iterRange(range, (cell) => {\n const idx = addressToIndex(this._sheet, cell);\n delete this._sheet.cells[idx];\n });\n }\n\n cut(range: CellRange): void {\n invariant(this._node);\n this._node.graph.hf.cut(toModelRange(this._node.sheetId, range));\n this._iterRange(range, (cell) => {\n const idx = addressToIndex(this._sheet, cell);\n delete this._sheet.cells[idx];\n });\n }\n\n copy(range: CellRange): void {\n invariant(this._node);\n this._node.graph.hf.copy(toModelRange(this._node.sheetId, range));\n }\n\n paste(cell: CellAddress): void {\n invariant(this._node);\n if (!this._node.graph.hf.isClipboardEmpty()) {\n const changes = this._node.graph.hf.paste(toSimpleCellAddress(this._node.sheetId, cell));\n for (const change of changes) {\n if (change instanceof ExportedCellChange) {\n const { address, newValue } = change;\n const idx = addressToIndex(this._sheet, { row: address.row, col: address.col });\n this._sheet.cells[idx] = { value: newValue };\n }\n }\n }\n }\n\n // TODO(burdon): Display undo/redo state.\n undo(): void {\n invariant(this._node);\n if (this._node.graph.hf.isThereSomethingToUndo()) {\n this._node.graph.hf.undo();\n // this.update.emit();\n }\n }\n\n redo(): void {\n invariant(this._node);\n if (this._node.graph.hf.isThereSomethingToRedo()) {\n this._node.graph.hf.redo();\n // this.update.emit();\n }\n }\n\n /**\n * Get value from sheet.\n */\n getCellValue(cell: CellAddress): CellScalarValue {\n const idx = addressToIndex(this._sheet, cell);\n return this._sheet.cells[idx]?.value ?? null;\n }\n\n /**\n * Get value as a string for editing.\n */\n getCellText(cell: CellAddress): string | undefined {\n const value = this.getCellValue(cell);\n if (value == null) {\n return undefined;\n }\n\n if (isFormula(value)) {\n return this._graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(this._sheet, value));\n } else {\n return String(value);\n }\n }\n\n /**\n * Get array of raw values from sheet.\n */\n getCellValues(range: CellRange): CellScalarValue[][] {\n return this._iterRange(range, (cell) => this.getCellValue(cell));\n }\n\n /**\n * Gets the regular or computed value from the engine.\n */\n getValue(cell: CellAddress): CellScalarValue {\n // Applies rounding and post-processing.\n invariant(this._node);\n const address = toSimpleCellAddress(this._node.sheetId, cell);\n const value = this._node.graph.hf.getCellValue(address);\n if (value instanceof DetailedCellError) {\n // TODO(wittjosiah): Error details should be shown in cell `title`.\n log.warn('cell error', { cell, error: value });\n return value.toString();\n }\n\n return value;\n }\n\n /**\n * Get value type.\n */\n getValueDescription(cell: CellAddress): { type: TypeEnum; format?: FormatEnum } | undefined {\n invariant(this._node);\n const addr = toSimpleCellAddress(this._node.sheetId, cell);\n const type = this._node.graph.hf.getCellValueDetailedType(addr);\n return typeMap[type];\n }\n\n /**\n * Sets the value, updating the sheet and engine.\n */\n setValue(cell: CellAddress, value: CellScalarValue): void {\n invariant(this._node);\n if (this._options.readonly) {\n throw new ReadonlyException();\n }\n\n // Reallocate if > current bounds.\n let refresh = false;\n if (cell.row >= this._sheet.rows.length) {\n insertIndices(this._sheet.rows, cell.row, 1, MAX_ROWS);\n refresh = true;\n }\n if (cell.col >= this._sheet.columns.length) {\n insertIndices(this._sheet.columns, cell.col, 1, MAX_COLS);\n refresh = true;\n }\n\n if (refresh) {\n // TODO(burdon): Remove.\n this.reset();\n }\n\n // Insert into engine.\n this._node.graph.hf.setCellContents({ sheet: this._node.sheetId, row: cell.row, col: cell.col }, [\n [isFormula(value) ? this._graph.mapFormulaToNative(value) : value],\n ]);\n\n // Insert into sheet.\n const idx = addressToIndex(this._sheet, cell);\n if (value === undefined || value === null) {\n delete this._sheet.cells[idx];\n } else {\n if (isFormula(value)) {\n value = this._graph.mapFunctionBindingToId(mapFormulaRefsToIndices(this._sheet, value));\n }\n\n this._sheet.cells[idx] = { value };\n }\n }\n\n /**\n * Sets values from a simple map.\n */\n setValues(values: Record<string, Sheet.CellValue>): void {\n Object.entries(values).forEach(([key, { value }]) => {\n this.setValue(addressFromA1Notation(key), value);\n });\n }\n\n /**\n * Iterate range.\n */\n private _iterRange(range: CellRange, cb: (cell: CellAddress) => CellScalarValue | void): CellScalarValue[][] {\n const to = range.to ?? range.from;\n const rowRange = [Math.min(range.from.row, to.row), Math.max(range.from.row, to.row)];\n const columnRange = [Math.min(range.from.col, to.col), Math.max(range.from.col, to.col)];\n const rows: CellScalarValue[][] = [];\n for (let row = rowRange[0]; row <= rowRange[1]; row++) {\n const rowCells: CellScalarValue[] = [];\n for (let column = columnRange[0]; column <= columnRange[1]; column++) {\n const value = cb({ row, col: column });\n if (value !== undefined) {\n rowCells.push(value);\n }\n }\n\n rows.push(rowCells);\n }\n\n return rows;\n }\n\n // TODO(burdon): Delete index.\n private _deleteIndices(indices: string[], i: number, n: number): void {\n throw new Error('Not implemented');\n }\n\n // TODO(burdon): Move. Cannot use fractional without changing. Switch back to using unique IDs?\n private _moveIndices(indices: string[], i: number, j: number, n: number): void {\n throw new Error('Not implemented');\n }\n\n /**\n * Map from indices to A1 notation.\n */\n mapFormulaIndicesToRefs(formula: string): string {\n invariant(isFormula(formula));\n return formula.replace(/([a-zA-Z0-9]+)@([a-zA-Z0-9]+)/g, (idx) => {\n return addressToA1Notation(addressFromIndex(this._sheet, idx));\n });\n }\n\n //\n // Values\n //\n\n /**\n * https://hyperformula.handsontable.com/guide/date-and-time-handling.html#example\n * https://hyperformula.handsontable.com/api/interfaces/configparams.html#nulldate\n * NOTE: TODAY() is number of FULL days since nullDate. It will typically be -1 days from NOW().\n */\n toLocalDate(num: number): Date {\n const { year, month, day, hours, minutes, seconds } = this.toDateTime(num);\n return new Date(year, month - 1, day, hours, minutes, seconds);\n }\n\n toDateTime(num: number): SimpleDateTime {\n invariant(this._node);\n return this._node.graph.hf.numberToDateTime(num) as SimpleDateTime;\n }\n\n toDate(num: number): SimpleDate {\n invariant(this._node);\n return this._node.graph.hf.numberToDate(num) as SimpleDate;\n }\n\n toTime(num: number): SimpleDate {\n invariant(this._node);\n return this._node.graph.hf.numberToTime(num) as SimpleDate;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type ComputeGraph } from '@dxos/compute';\n\nimport { SheetModel } from '../model';\nimport { type Sheet } from '../types';\n\nexport type UseSheetModelOptions = {\n readonly?: boolean;\n};\n\nexport const useSheetModel = (\n graph?: ComputeGraph,\n sheet?: Sheet.Sheet,\n { readonly }: UseSheetModelOptions = {},\n): SheetModel | undefined => {\n const [model, setModel] = useState<SheetModel>();\n useEffect(() => {\n if (!graph || !sheet) {\n return;\n }\n\n let model: SheetModel | undefined;\n const t = setTimeout(async () => {\n model = new SheetModel(graph, sheet, { readonly });\n await model.open();\n setModel(model);\n });\n\n return () => {\n clearTimeout(t);\n void model?.close();\n };\n }, [graph, sheet, readonly]);\n\n return model;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["Schema", "addressFromA1Notation", "isFormula", "Obj", "Type", "FormAnnotation", "addressFromA1Notation", "addressToA1Notation", "isFormula", "randomBytes", "invariant", "MAX_ROWS", "MAX_COLS", "DEFAULT_ROWS", "DEFAULT_COLS", "ApiError", "Error", "ReadonlyException", "RangeException", "n", "createIndex", "length", "characters", "charactersLength", "randomBuffer", "Array", "from", "byte", "join", "createIndices", "map", "insertIndices", "indices", "i", "max", "idx", "splice", "initialize", "sheet", "rows", "columns", "addressToIndex", "cell", "col", "row", "addressFromIndex", "column", "split", "indexOf", "rangeToIndex", "range", "to", "rangeFromIndex", "index", "compareIndexPositions", "indexA", "indexB", "rowA", "columnA", "rowB", "columnB", "mapFormulaRefsToIndices", "formula", "replace", "match", "mapFormulaIndicesToRefs", "CellValue", "Struct", "value", "Any", "Range", "range", "String", "key", "RowColumnMeta", "size", "optional", "Number", "Sheet", "name", "cells", "Record", "mutable", "pipe", "FormAnnotation", "set", "rows", "Array", "columns", "rowMeta", "columnMeta", "ranges", "Type", "Obj", "typename", "version", "make", "sheet", "initialize", "Object", "entries", "forEach", "idx", "addressToIndex", "addressFromA1Notation", "isFormula", "mapFormulaRefsToIndices", "alignKey", "commentKey", "styleKey", "cellClassNameForRange", "key", "value", "undefined", "Schema", "Event", "DetailedCellError", "ExportedCellChange", "addressFromA1Notation", "addressToA1Notation", "createSheetName", "isFormula", "Resource", "Obj", "FormatEnum", "TypeEnum", "invariant", "PublicKey", "log", "typeMap", "BOOLEAN", "type", "TypeEnum", "Boolean", "NUMBER_RAW", "Number", "NUMBER_PERCENT", "format", "FormatEnum", "Percent", "NUMBER_CURRENCY", "Currency", "NUMBER_DATETIME", "String", "DateTime", "NUMBER_DATE", "Date", "NUMBER_TIME", "Time", "getTopLeft", "range", "to", "from", "row", "Math", "min", "col", "toSimpleCellAddress", "sheet", "cell", "toModelRange", "start", "end", "SheetModel", "Resource", "id", "PublicKey", "random", "truncate", "update", "Event", "_node", "_graph", "_sheet", "_options", "graph", "readonly", "bounds", "rows", "length", "columns", "_open", "log", "initialize", "on", "event", "reset", "getOrCreateNode", "createSheetName", "Obj", "getTypename", "open", "unsubscribe", "emit", "_ctx", "onDispose", "invariant", "hf", "clearSheet", "sheetId", "Object", "entries", "cells", "forEach", "key", "value", "addressFromIndex", "isFormula", "binding", "mapFunctionBindingFromId", "mapFormulaIndicesToRefs", "mapFormulaToNative", "setCellContents", "recalculate", "rebuildAndRecalculate", "insertRows", "i", "n", "idx", "insertIndices", "MAX_ROWS", "insertColumns", "MAX_COLS", "dropRow", "rowIndex", "values", "getCellValues", "flat", "index", "indexOf", "clear", "splice", "rowMeta", "axis", "axisIndex", "axisMeta", "dropColumn", "colIndex", "columnMeta", "restoreRow", "restoreColumn", "topLeft", "_iterRange", "addressToIndex", "cut", "copy", "paste", "isClipboardEmpty", "changes", "change", "ExportedCellChange", "address", "newValue", "undo", "isThereSomethingToUndo", "redo", "isThereSomethingToRedo", "getCellValue", "getCellText", "undefined", "getValue", "DetailedCellError", "warn", "error", "toString", "getValueDescription", "addr", "getCellValueDetailedType", "setValue", "ReadonlyException", "refresh", "mapFunctionBindingToId", "mapFormulaRefsToIndices", "setValues", "addressFromA1Notation", "cb", "rowRange", "max", "columnRange", "rowCells", "column", "push", "_deleteIndices", "indices", "Error", "_moveIndices", "j", "formula", "replace", "addressToA1Notation", "toLocalDate", "num", "year", "month", "day", "hours", "minutes", "seconds", "toDateTime", "numberToDateTime", "toDate", "numberToDate", "toTime", "numberToTime", "useEffect", "useState", "useSheetModel", "graph", "sheet", "readonly", "model", "setModel", "useState", "useEffect", "t", "setTimeout", "SheetModel", "open", "clearTimeout", "close", "SheetAction", "SHEET_ACTION", "meta", "id", "Create", "TaggedClass", "input", "Struct", "name", "optional", "String", "output", "object", "Sheet", "Axis", "Union", "Literal", "InsertAxis", "model", "Any", "pipe", "filter", "SheetModel", "axis", "index", "Number", "count", "Void", "RestoreAxis", "axisIndex", "axisMeta", "RowColumnMeta", "values", "Array", "DropAxis", "deletionData"]
7
+ }
@@ -161,6 +161,10 @@ var rangeExtension = ({ onInit, onStateChange }) => {
161
161
  }
162
162
  };
163
163
  return ViewPlugin2.fromClass(class {
164
+ constructor(_view) {
165
+ view = _view;
166
+ onInit?.(notifier);
167
+ }
164
168
  update(view2) {
165
169
  const { anchor } = view2.state.selection.ranges[0];
166
170
  activeRange = void 0;
@@ -210,10 +214,6 @@ var rangeExtension = ({ onInit, onStateChange }) => {
210
214
  activeRange: activeRange ? view2.state.doc.sliceString(activeRange.from, activeRange.to) : void 0
211
215
  });
212
216
  }
213
- constructor(_view) {
214
- view = _view;
215
- onInit?.(notifier);
216
- }
217
217
  });
218
218
  };
219
219
  var visitTree = (node, callback) => {
@@ -233,4 +233,4 @@ export {
233
233
  sheetExtension,
234
234
  rangeExtension
235
235
  };
236
- //# sourceMappingURL=chunk-IK4O7FUJ.mjs.map
236
+ //# sourceMappingURL=chunk-4QV4AGWK.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/extensions/compute.ts", "../../../src/extensions/editor/sheet-extension.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { syntaxTree } from '@codemirror/language';\nimport {\n type EditorState,\n type Extension,\n type RangeSet,\n RangeSetBuilder,\n StateEffect,\n StateField,\n type Transaction,\n} from '@codemirror/state';\nimport { Decoration, EditorView, ViewPlugin, WidgetType } from '@codemirror/view';\n\nimport { type CleanupFn, debounce } from '@dxos/async';\nimport {\n type CellAddress,\n type CellScalarValue,\n type ComputeGraph,\n type ComputeNode,\n createSheetName,\n} from '@dxos/compute';\nimport { invariant } from '@dxos/invariant';\nimport { documentId, singleValueFacet } from '@dxos/react-ui-editor';\n\nconst LANGUAGE_TAG = 'dx';\n\n// TODO(burdon): Create marker just for our decorator?\nconst updateAllDecorations = StateEffect.define<void>();\n\nexport const computeGraphFacet = singleValueFacet<ComputeGraph>();\n\nexport type ComputeOptions = {};\n\nexport const compute = (_options: ComputeOptions = {}): Extension => {\n let computeNode: ComputeNode | undefined;\n\n const update = (state: EditorState, current?: RangeSet<Decoration>) => {\n const builder = new RangeSetBuilder<Decoration>();\n if (computeNode) {\n computeNode.clear();\n syntaxTree(state).iterate({\n enter: (node) => {\n switch (node.name) {\n case 'FencedCode': {\n const cursor = state.selection.main.head;\n if (state.readOnly || cursor < node.from || cursor > node.to) {\n const info = node.node.getChild('CodeInfo');\n if (info) {\n const type = state.sliceDoc(info.from, info.to);\n const text = node.node.getChild('CodeText');\n if (type === LANGUAGE_TAG && text) {\n const formula = state.sliceDoc(text.from, text.to);\n const iter = current?.iter(node.node.from);\n if (iter?.value && iter?.value.spec.formula === formula) {\n // Add existing widget.\n builder.add(node.from, node.to, iter.value);\n } else {\n // TODO(burdon): Create ordered list of cells on each decoration run.\n const cell: CellAddress = { col: node.node.from, row: 0 };\n invariant(computeNode);\n // NOTE: This triggers re-render (below).\n computeNode.setValue(cell, formula);\n const value = computeNode.getValue(cell);\n builder.add(\n node.from,\n node.to,\n Decoration.replace({\n widget: new ComputeWidget(formula, value),\n formula,\n }),\n );\n }\n }\n }\n }\n\n break;\n }\n }\n },\n });\n }\n\n return builder.finish();\n };\n\n return [\n ViewPlugin.fromClass(\n class {\n // Graph subscription.\n private _subscription?: CleanupFn;\n constructor(view: EditorView) {\n const id = view.state.facet(documentId);\n const computeGraph = view.state.facet(computeGraphFacet);\n if (id && computeGraph) {\n queueMicrotask(async () => {\n computeNode = computeGraph.getOrCreateNode(createSheetName({ type: '', id }));\n await computeNode.open();\n\n // Trigger re-render if values updated.\n // TODO(burdon): Trigger only if formula value updated (currently triggered during render).\n this._subscription = computeNode.update.on(\n debounce(({ type, ...rest }) => {\n if (type === 'valuesUpdated') {\n view.dispatch({\n effects: updateAllDecorations.of(),\n });\n }\n }, 250),\n );\n });\n }\n }\n\n destroy() {\n this._subscription?.();\n void computeNode?.close();\n computeNode = undefined;\n }\n },\n ),\n\n StateField.define<RangeSet<Decoration>>({\n create: (state) => update(state),\n update: (rangeSet: RangeSet<Decoration>, tr: Transaction) => update(tr.state, rangeSet),\n provide: (field) => EditorView.decorations.from(field),\n }),\n ];\n};\n\n// TODO(burdon): Click to edit.\nclass ComputeWidget extends WidgetType {\n constructor(\n private readonly formula: string,\n private readonly value: CellScalarValue,\n ) {\n super();\n }\n\n override toDOM(_view: EditorView): HTMLDivElement {\n const div = document.createElement('div');\n div.setAttribute('title', this.formula);\n div.innerText = String(this.value);\n return div;\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport {\n type Completion,\n type CompletionContext,\n type CompletionResult,\n acceptCompletion,\n autocompletion,\n completionStatus,\n startCompletion,\n} from '@codemirror/autocomplete';\nimport { HighlightStyle, type Language, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension } from '@codemirror/state';\nimport { type EditorView, ViewPlugin, type ViewUpdate, keymap } from '@codemirror/view';\nimport { type SyntaxNode } from '@lezer/common';\nimport { tags } from '@lezer/highlight';\nimport { spreadsheet } from 'codemirror-lang-spreadsheet';\n\nimport { type FunctionDefinition } from '@dxos/compute';\nimport { RANGE_NOTATION } from '@dxos/compute';\nimport { singleValueFacet } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\n/**\n * https://codemirror.net/examples/styling\n * https://lezer.codemirror.net/docs/ref/#highlight\n * https://github.com/luizzappa/codemirror-lang-spreadsheet/blob/main/src/index.ts#L28 (mapping)\n */\n// TODO(burdon): Define light/dark.\nconst highlightStyles = HighlightStyle.define([\n // Function.\n {\n tag: tags.name,\n class: 'text-accentText',\n },\n // Range.\n {\n tag: tags.tagName,\n class: 'text-pinkText',\n },\n // Values.\n {\n tag: tags.number,\n class: 'text-tealText',\n },\n {\n tag: tags.bool,\n class: 'text-tealText',\n },\n {\n tag: tags.string,\n class: 'text-tealText',\n },\n // Error.\n {\n tag: tags.invalid,\n class: 'text-unAccent',\n },\n]);\n\nconst languageFacet = singleValueFacet<Language>();\n\nexport type SheetExtensionOptions = {\n debug?: boolean;\n functions?: FunctionDefinition[];\n};\n\n/**\n * Spreadsheet formula extension and parser.\n * https://github.com/luizzappa/codemirror-lang-spreadsheet\n * https://github.com/luizzappa/codemirror-app-spreadsheet/blob/master/src/editor.ts\n * https://github.com/codemirror/lang-example\n * https://hyperformula.handsontable.com/guide/key-concepts.html#grammar\n */\nexport const sheetExtension = ({ debug, functions = [] }: SheetExtensionOptions): Extension => {\n const { extension, language } = spreadsheet({ idiom: 'en-US', decimalSeparator: '.' });\n\n const createCompletion = (name: string) => {\n const { section = 'Custom', description, syntax } = functions.find((value) => value.name === name) ?? {};\n\n return {\n section,\n label: name,\n info: () => {\n if (!description && !syntax) {\n return null;\n }\n\n // TODO(burdon): Standardize color styles.\n const root = document.createElement('div');\n root.className = 'flex flex-col gap-2 text-sm';\n\n const title = document.createElement('h2');\n title.innerText = name;\n title.className = 'text-lg font-mono text-accentText';\n root.appendChild(title);\n\n if (description) {\n const info = document.createElement('p');\n info.innerText = description;\n info.className = 'text-subdued';\n root.appendChild(info);\n }\n\n if (syntax) {\n const detail = document.createElement('pre');\n detail.innerText = syntax;\n detail.className = 'whitespace-pre-wrap text-greenText';\n root.appendChild(detail);\n }\n\n return root;\n },\n apply: (view, completion, from, to) => {\n const insertParens = to === view.state.doc.toString().length;\n view.dispatch(\n view.state.update({\n changes: {\n from,\n to,\n insert: completion.label + (insertParens ? '()' : ''),\n },\n selection: {\n anchor: from + completion.label.length + 1,\n },\n }),\n );\n },\n } satisfies Completion;\n };\n\n return [\n extension,\n languageFacet.of(language),\n language.data.of({\n autocomplete: (context: CompletionContext): CompletionResult | null => {\n if (context.state.doc.toString()[0] !== '=') {\n return null;\n }\n const match = context.matchBefore(/\\w*/);\n if (!match || match.from === match.to) {\n return null;\n }\n\n const text = match.text.toUpperCase();\n if (!context.explicit && match.text.length < 2) {\n return null;\n }\n\n return {\n from: match.from,\n options:\n functions?.filter(({ name }) => name.startsWith(text)).map(({ name }) => createCompletion(name)) ?? [],\n };\n },\n }),\n\n syntaxHighlighting(highlightStyles),\n autocompletion({\n aboveCursor: false,\n defaultKeymap: true,\n activateOnTyping: true,\n closeOnBlur: !debug,\n icons: false,\n tooltipClass: () =>\n mx(\n '!-left-[1px] !top-[33px] !-m-0 border !border-t-0 [&>ul]:!min-w-[198px]',\n '[&>ul>li[aria-selected]]:!bg-accentSurface',\n 'border-separator',\n ),\n }),\n keymap.of([\n {\n key: 'Tab',\n run: (view) => {\n return completionStatus(view.state) === 'active' ? acceptCompletion(view) : startCompletion(view);\n },\n },\n ]),\n\n // Parsing.\n // StateField.define({\n // create: (state) => {},\n // update: (value, tr) => {\n // log.info('update');\n // syntaxTree(tr.state).iterate({\n // enter: ({ type, from, to }) => {\n // log.info('node', { type: type.name, from, to });\n // },\n // });\n // },\n // }),\n ];\n};\n\nexport type SelectionRange = { from: number; to: number };\n\nexport interface RangeController {\n setRange(range: string): void;\n}\n\nexport type RangeExtensionOptions = {\n /**\n * Provides controller callback when extension is initialized.\n */\n onInit?: (controller: RangeController) => void;\n /**\n * Called when the active range changes.\n * @param state The current state.\n * @param state.activeRange undefined if no range is active, otherwise a possibly partially defined range.\n */\n onStateChange?: (state: { activeRange: string | undefined }) => void;\n};\n\n/**\n * Tracks the currently active cell within a formula and provides a callback to modify it.\n */\nexport const rangeExtension = ({ onInit, onStateChange }: RangeExtensionOptions): Extension => {\n let view: EditorView;\n let activeRange: SelectionRange | undefined;\n\n // Called externally to provide current range.\n const notifier: RangeController = {\n setRange: (range: string) => {\n if (activeRange) {\n view.dispatch(\n view.state.update({\n changes: { ...activeRange, insert: range.toString() },\n selection: { anchor: activeRange.from + range.length },\n }),\n );\n }\n\n view.focus();\n },\n };\n\n return ViewPlugin.fromClass(\n class {\n constructor(_view: EditorView) {\n view = _view;\n onInit?.(notifier);\n }\n\n update(view: ViewUpdate) {\n const { anchor } = view.state.selection.ranges[0];\n\n // Find first Range or cell at cursor.\n activeRange = undefined;\n const language = view.state.facet(languageFacet);\n const { topNode } = language.parser.parse(view.state.doc.toString());\n visitTree(topNode, ({ type, from, to }) => {\n if (from <= anchor && to >= anchor) {\n switch (type.name) {\n case 'Function':\n // Mark but keep looking.\n activeRange = { from: to, to };\n break;\n\n case 'CloseParen':\n // Mark but keep looking.\n activeRange = { from, to: from };\n break;\n\n case 'RangeToken':\n case 'CellToken':\n activeRange = { from, to };\n return true;\n }\n }\n\n return false;\n });\n\n // Allow start of formula.\n if (!activeRange && view.state.doc.toString()[0] === '=') {\n const str = view.state.doc.sliceString(1);\n if (RANGE_NOTATION.test(str)) {\n activeRange = { from: 1, to: str.length + 1 };\n } else {\n activeRange = { from: str.length + 1, to: str.length + 1 };\n }\n }\n\n onStateChange?.({\n activeRange: activeRange ? view.state.doc.sliceString(activeRange.from, activeRange.to) : undefined,\n });\n }\n },\n );\n};\n\n/**\n * Lezer parse result visitor.\n */\nconst visitTree = (node: SyntaxNode, callback: (node: SyntaxNode) => boolean): boolean => {\n if (callback(node)) {\n return true;\n }\n\n for (let child = node.firstChild; child !== null; child = child.nextSibling) {\n if (visitTree(child, callback)) {\n return true;\n }\n }\n\n return false;\n};\n"],
5
- "mappings": "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",
6
- "names": ["syntaxTree", "RangeSetBuilder", "StateEffect", "StateField", "Decoration", "EditorView", "ViewPlugin", "WidgetType", "debounce", "createSheetName", "invariant", "documentId", "singleValueFacet", "updateAllDecorations", "StateEffect", "define", "computeGraphFacet", "singleValueFacet", "acceptCompletion", "autocompletion", "completionStatus", "startCompletion", "HighlightStyle", "syntaxHighlighting", "ViewPlugin", "keymap", "tags", "spreadsheet", "RANGE_NOTATION", "singleValueFacet", "mx", "highlightStyles", "HighlightStyle", "define", "tag", "tags", "name", "class", "tagName", "number", "bool", "string", "invalid", "languageFacet", "singleValueFacet", "sheetExtension", "debug", "functions", "extension", "language", "spreadsheet", "idiom", "decimalSeparator", "createCompletion", "section", "description", "syntax", "find", "value", "label", "info", "root", "document", "createElement", "className", "title", "innerText", "appendChild", "detail", "apply", "view", "completion", "from", "to", "insertParens", "state", "doc", "toString", "length", "dispatch", "update", "changes", "insert", "selection", "anchor", "of", "data", "autocomplete", "context", "match", "matchBefore", "text", "toUpperCase", "explicit", "options", "filter", "startsWith", "map", "syntaxHighlighting", "autocompletion", "aboveCursor", "defaultKeymap", "activateOnTyping", "closeOnBlur", "icons", "tooltipClass", "mx", "keymap", "key", "run", "completionStatus", "acceptCompletion", "startCompletion", "rangeExtension", "onInit", "onStateChange", "activeRange", "notifier", "setRange", "range", "focus", "ViewPlugin", "fromClass", "ranges", "undefined", "facet", "topNode", "parser", "parse", "visitTree", "type", "str", "sliceString", "RANGE_NOTATION", "test", "_view", "node", "callback", "child", "firstChild", "nextSibling"]
5
+ "mappings": "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",
6
+ "names": ["syntaxTree", "RangeSetBuilder", "StateEffect", "StateField", "Decoration", "EditorView", "ViewPlugin", "WidgetType", "debounce", "createSheetName", "invariant", "documentId", "singleValueFacet", "updateAllDecorations", "StateEffect", "define", "computeGraphFacet", "singleValueFacet", "acceptCompletion", "autocompletion", "completionStatus", "startCompletion", "HighlightStyle", "syntaxHighlighting", "ViewPlugin", "keymap", "tags", "spreadsheet", "RANGE_NOTATION", "singleValueFacet", "mx", "highlightStyles", "HighlightStyle", "define", "tag", "tags", "name", "class", "tagName", "number", "bool", "string", "invalid", "languageFacet", "singleValueFacet", "sheetExtension", "debug", "functions", "extension", "language", "spreadsheet", "idiom", "decimalSeparator", "createCompletion", "section", "description", "syntax", "find", "value", "label", "info", "root", "document", "createElement", "className", "title", "innerText", "appendChild", "detail", "apply", "view", "completion", "from", "to", "insertParens", "state", "doc", "toString", "length", "dispatch", "update", "changes", "insert", "selection", "anchor", "of", "data", "autocomplete", "context", "match", "matchBefore", "text", "toUpperCase", "explicit", "options", "filter", "startsWith", "map", "syntaxHighlighting", "autocompletion", "aboveCursor", "defaultKeymap", "activateOnTyping", "closeOnBlur", "icons", "tooltipClass", "mx", "keymap", "key", "run", "completionStatus", "acceptCompletion", "startCompletion", "rangeExtension", "onInit", "onStateChange", "activeRange", "notifier", "setRange", "range", "focus", "ViewPlugin", "fromClass", "_view", "ranges", "undefined", "facet", "topNode", "parser", "parse", "visitTree", "type", "str", "sliceString", "RANGE_NOTATION", "test", "node", "callback", "child", "firstChild", "nextSibling"]
7
7
  }
@@ -0,0 +1,29 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ var __defProp = Object.defineProperty;
3
+ var __export = (target, all) => {
4
+ for (var name in all)
5
+ __defProp(target, name, { get: all[name], enumerable: true });
6
+ };
7
+
8
+ // src/meta.ts
9
+ import { trim } from "@dxos/util";
10
+ var meta = {
11
+ id: "dxos.org/plugin/sheet",
12
+ name: "Sheet",
13
+ description: trim`
14
+ Full-featured spreadsheet application with over 400 built-in formulas for calculations and data analysis.
15
+ Create custom JavaScript functions and integrate with AI agents for advanced automation.
16
+ `,
17
+ icon: "ph--grid-nine--regular",
18
+ iconHue: "indigo",
19
+ source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-sheet",
20
+ screenshots: [
21
+ "https://dxos.network/plugin-details-sheet-dark.png"
22
+ ]
23
+ };
24
+
25
+ export {
26
+ __export,
27
+ meta
28
+ };
29
+ //# sourceMappingURL=chunk-HILDMVPL.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/sheet',\n name: 'Sheet',\n description: trim`\n Full-featured spreadsheet application with over 400 built-in formulas for calculations and data analysis.\n Create custom JavaScript functions and integrate with AI agents for advanced automation.\n `,\n icon: 'ph--grid-nine--regular',\n iconHue: 'indigo',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-sheet',\n screenshots: ['https://dxos.network/plugin-details-sheet-dark.png'],\n};\n"],
5
+ "mappings": ";;;;;;;;AAKA,SAASA,YAAY;AAEd,IAAMC,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;EAIbC,MAAM;EACNC,SAAS;EACTC,QAAQ;EACRC,aAAa;IAAC;;AAChB;",
6
+ "names": ["trim", "meta", "id", "name", "description", "trim", "icon", "iconHue", "source", "screenshots"]
7
+ }
@@ -2,19 +2,19 @@ import { createRequire } from 'node:module';const require = createRequire(import
2
2
  import {
3
3
  DEFAULT_COLS,
4
4
  DEFAULT_ROWS,
5
- Range,
6
5
  SheetAction,
6
+ Sheet_exports,
7
7
  cellClassNameForRange,
8
8
  rangeFromIndex,
9
9
  useSheetModel
10
- } from "./chunk-ODP4L4OV.mjs";
10
+ } from "./chunk-4H2EHVWE.mjs";
11
11
  import {
12
12
  rangeExtension,
13
13
  sheetExtension
14
- } from "./chunk-IK4O7FUJ.mjs";
14
+ } from "./chunk-4QV4AGWK.mjs";
15
15
  import {
16
- SHEET_PLUGIN
17
- } from "./chunk-3K5VNYOF.mjs";
16
+ meta
17
+ } from "./chunk-HILDMVPL.mjs";
18
18
 
19
19
  // src/components/ComputeGraph/ComputeGraphContextProvider.tsx
20
20
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
@@ -51,7 +51,7 @@ var useComputeGraph = (space) => {
51
51
 
52
52
  // src/components/RangeList/RangeList.tsx
53
53
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
54
- import { Schema } from "effect";
54
+ import * as Schema from "effect/Schema";
55
55
  import React2, { useCallback } from "react";
56
56
  import { rangeToA1Notation } from "@dxos/compute";
57
57
  import { Callout, useTranslation } from "@dxos/react-ui";
@@ -60,7 +60,7 @@ import { ghostHover } from "@dxos/react-ui-theme";
60
60
  var RangeList = ({ sheet }) => {
61
61
  var _effect = _useSignals2();
62
62
  try {
63
- const { t } = useTranslation(SHEET_PLUGIN);
63
+ const { t } = useTranslation(meta.id);
64
64
  const handleSelectRange = (range) => {
65
65
  };
66
66
  const handleDeleteRange = useCallback((range) => {
@@ -73,7 +73,7 @@ var RangeList = ({ sheet }) => {
73
73
  className: "mbs-cardSpacingBlock mbe-labelSpacingBlock text-sm font-semibold"
74
74
  }, t("range list heading")), sheet.ranges.length < 1 ? /* @__PURE__ */ React2.createElement(Callout.Root, null, /* @__PURE__ */ React2.createElement(Callout.Title, null, t("no ranges message"))) : /* @__PURE__ */ React2.createElement(List.Root, {
75
75
  items: sheet.ranges,
76
- isItem: Schema.is(Range)
76
+ isItem: Schema.is(Sheet_exports.Range)
77
77
  }, ({ items: ranges }) => ranges.map((range, i) => /* @__PURE__ */ React2.createElement(List.Item, {
78
78
  key: i,
79
79
  item: range,
@@ -101,7 +101,8 @@ import { lazy } from "react";
101
101
  // src/components/GridSheet/GridSheet.tsx
102
102
  import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
103
103
  import React4, { useCallback as useCallback4, useMemo as useMemo2, useRef, useState as useState3 } from "react";
104
- import { createIntent as createIntent2, useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework";
104
+ import { createIntent as createIntent2 } from "@dxos/app-framework";
105
+ import { useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework/react";
105
106
  import { rangeToA1Notation as rangeToA1Notation2 } from "@dxos/compute";
106
107
  import { defaultColSize, defaultRowSize } from "@dxos/lit-grid";
107
108
  import { DropdownMenu, Icon, useTranslation as useTranslation2 } from "@dxos/react-ui";
@@ -109,16 +110,18 @@ import { useAttention } from "@dxos/react-ui-attention";
109
110
  import { Grid as Grid2, GridCellEditor, closestCell, editorKeys, parseCellIndex } from "@dxos/react-ui-grid";
110
111
 
111
112
  // src/integrations/thread-ranges.ts
112
- import { Schema as Schema2, pipe } from "effect";
113
+ import * as Function from "effect/Function";
114
+ import * as Schema2 from "effect/Schema";
113
115
  import { useCallback as useCallback2, useEffect, useMemo } from "react";
114
- import { LayoutAction, chain, createIntent, createResolver, useIntentDispatcher, useIntentResolver } from "@dxos/app-framework";
116
+ import { LayoutAction, chain, createIntent, createResolver } from "@dxos/app-framework";
117
+ import { useIntentDispatcher, useIntentResolver } from "@dxos/app-framework/react";
115
118
  import { debounce } from "@dxos/async";
116
119
  import { inRange } from "@dxos/compute";
117
120
  import { Obj, Relation } from "@dxos/echo";
118
121
  import { ATTENDABLE_PATH_SEPARATOR, DeckAction } from "@dxos/plugin-deck/types";
119
- import { ThreadAction, ThreadType } from "@dxos/plugin-thread/types";
120
- import { Filter, Query, fullyQualifiedId, getSpace, useQuery } from "@dxos/react-client/echo";
121
- import { AnchoredTo } from "@dxos/schema";
122
+ import { ThreadAction } from "@dxos/plugin-thread/types";
123
+ import { Filter, Query, getSpace, useQuery } from "@dxos/react-client/echo";
124
+ import { AnchoredTo, Thread } from "@dxos/types";
122
125
  var parseThreadAnchorAsCellRange = (cursor) => {
123
126
  const coords = cursor.split(",");
124
127
  if (coords.length !== 4) {
@@ -146,7 +149,7 @@ var useUpdateFocusedCellOnThreadSelection = (grid) => {
146
149
  if (!Schema2.is(LayoutAction.ScrollIntoView.fields.input)(data)) {
147
150
  return false;
148
151
  }
149
- return data.subject === fullyQualifiedId(model.sheet) && !!data.options?.cursor;
152
+ return data.subject === Obj.getDXN(model.sheet).toString() && !!data.options?.cursor;
150
153
  },
151
154
  resolve: ({ options: { cursor, ref } }) => {
152
155
  setActiveRefs(ref);
@@ -160,20 +163,20 @@ var useUpdateFocusedCellOnThreadSelection = (grid) => {
160
163
  model.sheet,
161
164
  setActiveRefs
162
165
  ]);
163
- useIntentResolver(SHEET_PLUGIN, scrollIntoViewResolver);
166
+ useIntentResolver(meta.id, scrollIntoViewResolver);
164
167
  };
165
168
  var useSelectThreadOnCellFocus = () => {
166
169
  const { model, cursor } = useSheetContext();
167
170
  const { dispatchPromise: dispatch } = useIntentDispatcher();
168
171
  const space = getSpace(model.sheet);
169
- const anchors = useQuery(space, Query.select(Filter.ids(model.sheet.id)).targetOf(AnchoredTo));
172
+ const anchors = useQuery(space, Query.select(Filter.ids(model.sheet.id)).targetOf(AnchoredTo.AnchoredTo));
170
173
  const selectClosestThread = useCallback2((cellAddress) => {
171
174
  if (!cellAddress) {
172
175
  return;
173
176
  }
174
177
  const closestThread = anchors.find((anchor) => {
175
178
  const source = Relation.getSource(anchor);
176
- if (anchor.anchor && Obj.instanceOf(ThreadType, source)) {
179
+ if (anchor.anchor && Obj.instanceOf(Thread.Thread, source)) {
177
180
  const range = parseThreadAnchorAsCellRange(anchor.anchor);
178
181
  return range ? inRange(range, cellAddress) : false;
179
182
  } else {
@@ -181,9 +184,9 @@ var useSelectThreadOnCellFocus = () => {
181
184
  }
182
185
  });
183
186
  if (closestThread) {
184
- const primary = fullyQualifiedId(model.sheet);
185
- const intent = pipe(createIntent(ThreadAction.Select, {
186
- current: fullyQualifiedId(closestThread)
187
+ const primary = Obj.getDXN(model.sheet).toString();
188
+ const intent = Function.pipe(createIntent(ThreadAction.Select, {
189
+ current: Obj.getDXN(closestThread).toString()
187
190
  }), chain(DeckAction.ChangeCompanion, {
188
191
  primary,
189
192
  companion: `${primary}${ATTENDABLE_PATH_SEPARATOR}comments`
@@ -213,8 +216,8 @@ var useSelectThreadOnCellFocus = () => {
213
216
  // src/components/SheetContext/SheetContext.tsx
214
217
  import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
215
218
  import React3, { createContext as createContext2, useCallback as useCallback3, useContext as useContext2, useState } from "react";
219
+ import { Obj as Obj2 } from "@dxos/echo";
216
220
  import { invariant } from "@dxos/invariant";
217
- import { fullyQualifiedId as fullyQualifiedId2 } from "@dxos/react-client/echo";
218
221
  import { Grid, useGridContext } from "@dxos/react-ui-grid";
219
222
  var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-sheet/src/components/SheetContext/SheetContext.tsx";
220
223
  var SheetContext = /* @__PURE__ */ createContext2(void 0);
@@ -286,7 +289,7 @@ var SheetProvider = ({ children, graph, sheet, readonly, ignoreAttention, onInfo
286
289
  readonly
287
290
  });
288
291
  return !model ? null : /* @__PURE__ */ React3.createElement(Grid.Root, {
289
- id: fullyQualifiedId2(sheet)
292
+ id: Obj2.getDXN(sheet).toString()
290
293
  }, /* @__PURE__ */ React3.createElement(SheetProviderImpl, {
291
294
  model,
292
295
  onInfo,
@@ -518,12 +521,12 @@ var sheetRowDefault = {
518
521
  var GridSheet = () => {
519
522
  var _effect = _useSignals4();
520
523
  try {
521
- const { t } = useTranslation2(SHEET_PLUGIN);
524
+ const { t } = useTranslation2(meta.id);
522
525
  const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs, ignoreAttention } = useSheetContext();
523
526
  const [dxGrid, setDxGrid] = useState3(null);
524
527
  const [extraplanarFocus, setExtraplanarFocus] = useState3(null);
525
528
  const { dispatchPromise: dispatch } = useIntentDispatcher2();
526
- const rangeController = useRef();
529
+ const rangeController = useRef(null);
527
530
  const { hasAttention } = useAttention(id);
528
531
  const handleFocus = useCallback4((event) => {
529
532
  if (!editing) {
@@ -578,14 +581,12 @@ var GridSheet = () => {
578
581
  ]);
579
582
  const handleAxisResize = useCallback4(({ axis, size, index: numericIndex }) => {
580
583
  if (axis === "row") {
581
- var _model_sheet_rowMeta, _rowId;
582
584
  const rowId = model.sheet.rows[parseInt(numericIndex)];
583
- (_model_sheet_rowMeta = model.sheet.rowMeta)[_rowId = rowId] ?? (_model_sheet_rowMeta[_rowId] = {});
585
+ model.sheet.rowMeta[rowId] ??= {};
584
586
  model.sheet.rowMeta[rowId].size = size;
585
587
  } else {
586
- var _model_sheet_columnMeta, _columnId;
587
588
  const columnId = model.sheet.columns[parseInt(numericIndex)];
588
- (_model_sheet_columnMeta = model.sheet.columnMeta)[_columnId = columnId] ?? (_model_sheet_columnMeta[_columnId] = {});
589
+ model.sheet.columnMeta[columnId] ??= {};
589
590
  model.sheet.columnMeta[columnId].size = size;
590
591
  }
591
592
  }, [
@@ -776,7 +777,7 @@ var GridSheet = () => {
776
777
  // TODO(thure): Why are Table’s and Sheet’s editor boxes off by 1px?
777
778
  /* @__PURE__ */ React4.createElement("div", {
778
779
  role: "none",
779
- className: "relative min-bs-0 [&_.cm-editor]:!border-lb [&_.cm-editor]:!border-transparent "
780
+ className: "relative min-bs-0 [&_.cm-editor]:!border-lb [&_.cm-editor]:!border-transparent"
780
781
  }, /* @__PURE__ */ React4.createElement(GridCellEditor, {
781
782
  getCellContent,
782
783
  extensions,
@@ -838,7 +839,7 @@ var GridSheet = () => {
838
839
  };
839
840
 
840
841
  // src/components/index.ts
841
- var SheetContainer = lazy(() => import("./SheetContainer-NFLLTGNV.mjs"));
842
+ var SheetContainer = lazy(() => import("./SheetContainer-NJONAMYZ.mjs"));
842
843
 
843
844
  export {
844
845
  ComputeGraphContextProvider,
@@ -849,4 +850,4 @@ export {
849
850
  RangeList,
850
851
  SheetContainer
851
852
  };
852
- //# sourceMappingURL=chunk-PYF4ZJXN.mjs.map
853
+ //# sourceMappingURL=chunk-S3RJ7IY6.mjs.map