@dxos/plugin-sheet 0.7.5-main.9d26e3a → 0.7.5-main.e9bb01b

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 (187) hide show
  1. package/dist/lib/browser/SheetContainer-QE32GHSA.mjs +370 -0
  2. package/dist/lib/browser/SheetContainer-QE32GHSA.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-5IP6N25X.mjs +18 -0
  4. package/dist/lib/browser/chunk-5IP6N25X.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-A374JPWV.mjs → chunk-EEN6LQ77.mjs} +157 -391
  6. package/dist/lib/browser/chunk-EEN6LQ77.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-FOO6NGBM.mjs +229 -0
  8. package/dist/lib/browser/chunk-FOO6NGBM.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-Q4XS4YWF.mjs → chunk-MW7L2R23.mjs} +2 -2
  10. package/dist/lib/browser/chunk-MW7L2R23.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-NA2WJTDQ.mjs +15 -0
  12. package/dist/lib/browser/chunk-NA2WJTDQ.mjs.map +7 -0
  13. package/dist/lib/browser/compute-graph-registry-5PSCPAJC.mjs +27 -0
  14. package/dist/lib/browser/compute-graph-registry-5PSCPAJC.mjs.map +7 -0
  15. package/dist/lib/browser/index.mjs +80 -218
  16. package/dist/lib/browser/index.mjs.map +4 -4
  17. package/dist/lib/browser/intent-resolver-BIOB22P2.mjs +56 -0
  18. package/dist/lib/browser/intent-resolver-BIOB22P2.mjs.map +7 -0
  19. package/dist/lib/browser/markdown-ZXHPFU4B.mjs +26 -0
  20. package/dist/lib/browser/markdown-ZXHPFU4B.mjs.map +7 -0
  21. package/dist/lib/browser/meta.json +1 -1
  22. package/dist/lib/browser/react-surface-DUNHY5TJ.mjs +52 -0
  23. package/dist/lib/browser/react-surface-DUNHY5TJ.mjs.map +7 -0
  24. package/dist/lib/browser/thread-RSI66HGQ.mjs +17 -0
  25. package/dist/lib/browser/thread-RSI66HGQ.mjs.map +7 -0
  26. package/dist/lib/browser/types/index.mjs +2 -2
  27. package/dist/lib/node/SheetContainer-63QTAGQQ.cjs +364 -0
  28. package/dist/lib/node/SheetContainer-63QTAGQQ.cjs.map +7 -0
  29. package/dist/lib/node/{chunk-TQOJ7DG2.cjs → chunk-6BZ2TACG.cjs} +6 -6
  30. package/dist/lib/node/chunk-6BZ2TACG.cjs.map +7 -0
  31. package/dist/lib/node/{meta.cjs → chunk-6G6HHJOM.cjs} +12 -8
  32. package/dist/lib/node/chunk-6G6HHJOM.cjs.map +7 -0
  33. package/dist/lib/node/{chunk-2ZVZI2KJ.cjs → chunk-AUC5XQEN.cjs} +12 -9
  34. package/dist/lib/node/chunk-AUC5XQEN.cjs.map +7 -0
  35. package/dist/lib/node/{chunk-FDEQ2PGJ.cjs → chunk-K4VMHOR2.cjs} +198 -428
  36. package/dist/lib/node/chunk-K4VMHOR2.cjs.map +7 -0
  37. package/dist/lib/node/chunk-P4KSGZSS.cjs +251 -0
  38. package/dist/lib/node/chunk-P4KSGZSS.cjs.map +7 -0
  39. package/dist/lib/node/compute-graph-registry-IKYGA5ZC.cjs +53 -0
  40. package/dist/lib/node/compute-graph-registry-IKYGA5ZC.cjs.map +7 -0
  41. package/dist/lib/node/index.cjs +81 -215
  42. package/dist/lib/node/index.cjs.map +4 -4
  43. package/dist/lib/node/intent-resolver-EN5ZMUUF.cjs +69 -0
  44. package/dist/lib/node/intent-resolver-EN5ZMUUF.cjs.map +7 -0
  45. package/dist/lib/node/markdown-7NVPUDWI.cjs +40 -0
  46. package/dist/lib/node/markdown-7NVPUDWI.cjs.map +7 -0
  47. package/dist/lib/node/meta.json +1 -1
  48. package/dist/lib/node/react-surface-YGALRCRL.cjs +70 -0
  49. package/dist/lib/node/react-surface-YGALRCRL.cjs.map +7 -0
  50. package/dist/lib/node/thread-7KJVRDUE.cjs +32 -0
  51. package/dist/lib/node/thread-7KJVRDUE.cjs.map +7 -0
  52. package/dist/lib/node/types/index.cjs +30 -30
  53. package/dist/lib/node/types/index.cjs.map +1 -1
  54. package/dist/lib/node-esm/SheetContainer-EUR47CP5.mjs +371 -0
  55. package/dist/lib/node-esm/SheetContainer-EUR47CP5.mjs.map +7 -0
  56. package/dist/lib/node-esm/chunk-6C53G45G.mjs +16 -0
  57. package/dist/lib/node-esm/chunk-6C53G45G.mjs.map +7 -0
  58. package/dist/lib/node-esm/chunk-JFUKD7N4.mjs +20 -0
  59. package/dist/lib/node-esm/chunk-JFUKD7N4.mjs.map +7 -0
  60. package/dist/lib/node-esm/{chunk-NYYIDVR7.mjs → chunk-LGQMXD6K.mjs} +2 -2
  61. package/dist/lib/node-esm/chunk-LGQMXD6K.mjs.map +7 -0
  62. package/dist/lib/node-esm/chunk-PTOI45NK.mjs +231 -0
  63. package/dist/lib/node-esm/chunk-PTOI45NK.mjs.map +7 -0
  64. package/dist/lib/node-esm/{chunk-L5PQHVTX.mjs → chunk-RFGJUSHF.mjs} +157 -391
  65. package/dist/lib/node-esm/chunk-RFGJUSHF.mjs.map +7 -0
  66. package/dist/lib/node-esm/compute-graph-registry-ZSLEFSS5.mjs +28 -0
  67. package/dist/lib/node-esm/compute-graph-registry-ZSLEFSS5.mjs.map +7 -0
  68. package/dist/lib/node-esm/index.mjs +80 -218
  69. package/dist/lib/node-esm/index.mjs.map +4 -4
  70. package/dist/lib/node-esm/intent-resolver-6BCKQA5A.mjs +57 -0
  71. package/dist/lib/node-esm/intent-resolver-6BCKQA5A.mjs.map +7 -0
  72. package/dist/lib/node-esm/markdown-LRZEUBKN.mjs +27 -0
  73. package/dist/lib/node-esm/markdown-LRZEUBKN.mjs.map +7 -0
  74. package/dist/lib/node-esm/meta.json +1 -1
  75. package/dist/lib/node-esm/react-surface-AAT56ZBA.mjs +53 -0
  76. package/dist/lib/node-esm/react-surface-AAT56ZBA.mjs.map +7 -0
  77. package/dist/lib/node-esm/thread-U3RIKVMB.mjs +18 -0
  78. package/dist/lib/node-esm/thread-U3RIKVMB.mjs.map +7 -0
  79. package/dist/lib/node-esm/types/index.mjs +2 -2
  80. package/dist/types/src/SheetPlugin.d.ts +1 -3
  81. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/capabilities.d.ts +5 -0
  83. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  84. package/dist/types/src/capabilities/compute-graph-registry.d.ts +4 -0
  85. package/dist/types/src/capabilities/compute-graph-registry.d.ts.map +1 -0
  86. package/dist/types/src/capabilities/index.d.ts +12 -0
  87. package/dist/types/src/capabilities/index.d.ts.map +1 -0
  88. package/dist/types/src/capabilities/intent-resolver.d.ts +4 -0
  89. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
  90. package/dist/types/src/capabilities/markdown.d.ts +6 -0
  91. package/dist/types/src/capabilities/markdown.d.ts.map +1 -0
  92. package/dist/types/src/capabilities/react-surface.d.ts +4 -0
  93. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  94. package/dist/types/src/capabilities/thread.d.ts +6 -0
  95. package/dist/types/src/capabilities/thread.d.ts.map +1 -0
  96. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
  97. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
  98. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  99. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts +7 -0
  100. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -0
  101. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts +6 -0
  102. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts.map +1 -0
  103. package/dist/types/src/components/SheetToolbar/align.d.ts +28 -0
  104. package/dist/types/src/components/SheetToolbar/align.d.ts.map +1 -0
  105. package/dist/types/src/components/SheetToolbar/comment.d.ts +23 -0
  106. package/dist/types/src/components/SheetToolbar/comment.d.ts.map +1 -0
  107. package/dist/types/src/components/SheetToolbar/index.d.ts +2 -0
  108. package/dist/types/src/components/SheetToolbar/index.d.ts.map +1 -0
  109. package/dist/types/src/components/SheetToolbar/style.d.ts +26 -0
  110. package/dist/types/src/components/SheetToolbar/style.d.ts.map +1 -0
  111. package/dist/types/src/components/SheetToolbar/useToolbarAction.d.ts +8 -0
  112. package/dist/types/src/components/SheetToolbar/useToolbarAction.d.ts.map +1 -0
  113. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts +6 -0
  114. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts.map +1 -0
  115. package/dist/types/src/components/index.d.ts +1 -2
  116. package/dist/types/src/components/index.d.ts.map +1 -1
  117. package/dist/types/src/index.d.ts +2 -3
  118. package/dist/types/src/index.d.ts.map +1 -1
  119. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  120. package/dist/types/src/meta.d.ts +2 -2
  121. package/dist/types/src/meta.d.ts.map +1 -1
  122. package/dist/types/src/testing/testing.d.ts +1 -1
  123. package/dist/types/src/testing/testing.d.ts.map +1 -1
  124. package/dist/types/src/types/sheet-range-types.d.ts +1 -1
  125. package/dist/types/src/types/sheet-range-types.d.ts.map +1 -1
  126. package/dist/types/src/types/types.d.ts +0 -11
  127. package/dist/types/src/types/types.d.ts.map +1 -1
  128. package/dist/types/tsconfig.tsbuildinfo +1 -1
  129. package/package.json +45 -52
  130. package/src/SheetPlugin.tsx +55 -103
  131. package/src/capabilities/capabilities.ts +14 -0
  132. package/src/capabilities/compute-graph-registry.ts +25 -0
  133. package/src/capabilities/index.ts +13 -0
  134. package/src/capabilities/intent-resolver.ts +38 -0
  135. package/src/capabilities/markdown.ts +22 -0
  136. package/src/capabilities/react-surface.tsx +37 -0
  137. package/src/capabilities/thread.ts +14 -0
  138. package/src/components/GridSheet/GridSheet.stories.tsx +2 -0
  139. package/src/components/GridSheet/util.ts +1 -1
  140. package/src/components/SheetContainer/SheetContainer.stories.tsx +28 -22
  141. package/src/components/SheetContainer/SheetContainer.tsx +3 -8
  142. package/src/components/{Toolbar/Toolbar.stories.tsx → SheetToolbar/SheetToolbar.stories.tsx} +4 -8
  143. package/src/components/SheetToolbar/SheetToolbar.tsx +48 -0
  144. package/src/components/SheetToolbar/align.ts +68 -0
  145. package/src/components/SheetToolbar/comment.ts +56 -0
  146. package/src/components/{Toolbar → SheetToolbar}/index.ts +1 -1
  147. package/src/components/SheetToolbar/style.ts +72 -0
  148. package/src/components/SheetToolbar/useToolbarAction.ts +87 -0
  149. package/src/components/SheetToolbar/useToolbarState.ts +17 -0
  150. package/src/components/index.ts +0 -1
  151. package/src/index.ts +2 -5
  152. package/src/integrations/thread-ranges.ts +21 -10
  153. package/src/meta.ts +3 -2
  154. package/src/types/sheet-range-types.ts +1 -1
  155. package/src/types/types.ts +0 -26
  156. package/dist/lib/browser/SheetContainer-S4NCLUYL.mjs +0 -290
  157. package/dist/lib/browser/SheetContainer-S4NCLUYL.mjs.map +0 -7
  158. package/dist/lib/browser/chunk-A374JPWV.mjs.map +0 -7
  159. package/dist/lib/browser/chunk-Q4XS4YWF.mjs.map +0 -7
  160. package/dist/lib/browser/chunk-RABELMEQ.mjs +0 -15
  161. package/dist/lib/browser/chunk-RABELMEQ.mjs.map +0 -7
  162. package/dist/lib/browser/meta.mjs +0 -9
  163. package/dist/lib/browser/meta.mjs.map +0 -7
  164. package/dist/lib/node/SheetContainer-TP4GYXZB.cjs +0 -296
  165. package/dist/lib/node/SheetContainer-TP4GYXZB.cjs.map +0 -7
  166. package/dist/lib/node/chunk-2ZVZI2KJ.cjs.map +0 -7
  167. package/dist/lib/node/chunk-FDEQ2PGJ.cjs.map +0 -7
  168. package/dist/lib/node/chunk-TQOJ7DG2.cjs.map +0 -7
  169. package/dist/lib/node/meta.cjs.map +0 -7
  170. package/dist/lib/node-esm/SheetContainer-YB3JBVPZ.mjs +0 -291
  171. package/dist/lib/node-esm/SheetContainer-YB3JBVPZ.mjs.map +0 -7
  172. package/dist/lib/node-esm/chunk-BM2Q3FFC.mjs +0 -17
  173. package/dist/lib/node-esm/chunk-BM2Q3FFC.mjs.map +0 -7
  174. package/dist/lib/node-esm/chunk-L5PQHVTX.mjs.map +0 -7
  175. package/dist/lib/node-esm/chunk-NYYIDVR7.mjs.map +0 -7
  176. package/dist/lib/node-esm/meta.mjs +0 -10
  177. package/dist/lib/node-esm/meta.mjs.map +0 -7
  178. package/dist/types/src/components/SheetObjectSettings.d.ts +0 -7
  179. package/dist/types/src/components/SheetObjectSettings.d.ts.map +0 -1
  180. package/dist/types/src/components/Toolbar/Toolbar.d.ts +0 -48
  181. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +0 -1
  182. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +0 -7
  183. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +0 -1
  184. package/dist/types/src/components/Toolbar/index.d.ts +0 -2
  185. package/dist/types/src/components/Toolbar/index.d.ts.map +0 -1
  186. package/src/components/SheetObjectSettings.tsx +0 -38
  187. package/src/components/Toolbar/Toolbar.tsx +0 -344
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ComputeGraph/ComputeGraphContextProvider.tsx", "../../../src/components/RangeList/RangeList.tsx", "../../../src/components/index.ts", "../../../src/components/GridSheet/GridSheet.tsx", "../../../src/components/GridSheet/util.ts", "../../../src/integrations/thread-ranges.ts", "../../../src/components/SheetContext/SheetContext.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { createContext, type PropsWithChildren, useContext } from 'react';\n\nimport { type ComputeGraph, type ComputeGraphRegistry } from '@dxos/compute';\nimport { raise } from '@dxos/debug';\nimport { type Space } from '@dxos/react-client/echo';\nimport { useAsyncState } from '@dxos/react-hooks';\n\nexport type ComputeGraphContextType = {\n registry: ComputeGraphRegistry;\n};\n\n/**\n * The compute graph context manages a ComputeGraph for each space.\n */\nexport const ComputeGraphContext = createContext<ComputeGraphContextType | undefined>(undefined);\n\nexport const ComputeGraphContextProvider = ({ registry, children }: PropsWithChildren<ComputeGraphContextType>) => {\n return <ComputeGraphContext.Provider value={{ registry }}>{children}</ComputeGraphContext.Provider>;\n};\n\nexport const useComputeGraph = (space?: Space): ComputeGraph | undefined => {\n const { registry } = useContext(ComputeGraphContext) ?? raise(new Error('Missing ComputeGraphContext'));\n const [graph] = useAsyncState(async () => {\n if (space) {\n const graph = registry.getOrCreateGraph(space);\n await graph.open();\n return graph;\n }\n }, [space, registry]);\n\n return graph;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { rangeToA1Notation } from '@dxos/compute';\nimport { S } from '@dxos/echo-schema';\nimport { useTranslation } from '@dxos/react-ui';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover } from '@dxos/react-ui-theme';\n\nimport { SHEET_PLUGIN } from '../../meta';\nimport { rangeFromIndex } from '../../types';\nimport { Range, type SheetType } from '../../types';\n\nexport type RangeListProps = {\n sheet: SheetType;\n};\n\nexport const RangeList = ({ sheet }: RangeListProps) => {\n const { t } = useTranslation(SHEET_PLUGIN);\n // TODO(thure): Implement similar to comments, #8121\n const handleSelectRange = (range: Range) => {};\n const handleDeleteRange = useCallback(\n (range: Range) => {\n const index = sheet.ranges.findIndex((sheetRange) => sheetRange === range);\n sheet.ranges.splice(index, 1);\n },\n [sheet],\n );\n return (\n <>\n <h2 className='p-2 text-sm font-semibold'>{t('range list heading')}</h2>\n <List.Root<Range> items={sheet.ranges} isItem={S.is(Range)}>\n {({ items: ranges }) =>\n ranges.map((range, i) => (\n <List.Item key={i} item={range} classNames={['p-2', ghostHover]}>\n <List.ItemDragHandle />\n <List.ItemTitle onClick={() => handleSelectRange(range)}>\n {t('range title', {\n position: rangeToA1Notation(rangeFromIndex(sheet, range.range)),\n key: t(`range key ${range.key} label`),\n value: t(`range value ${range.value} label`),\n })}\n </List.ItemTitle>\n <List.ItemDeleteButton onClick={() => handleDeleteRange(range)} />\n </List.Item>\n ))\n }\n </List.Root>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './ComputeGraph';\nexport * from './GridSheet';\nexport * from './RangeList';\nexport * from './SheetContext';\n\nexport const SheetContainer = lazy(() => import('./SheetContainer'));\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, {\n useCallback,\n useMemo,\n useRef,\n type FocusEvent,\n type KeyboardEvent,\n type WheelEvent,\n type MouseEvent,\n useState,\n} from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { rangeToA1Notation, type CellRange } from '@dxos/compute';\nimport { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport {\n closestCell,\n defaultSizeRow,\n editorKeys,\n Grid,\n GridCellEditor,\n type DxGridElement,\n type DxGridPosition,\n type DxGridCellIndex,\n type EditorKeyHandler,\n type EditorBlurHandler,\n type GridContentProps,\n parseCellIndex,\n} from '@dxos/react-ui-grid';\n\nimport { colLabelCell, rowLabelCell, useSheetModelDxGridProps } from './util';\nimport { rangeExtension, sheetExtension, type RangeController } from '../../extensions';\nimport { useSelectThreadOnCellFocus, useUpdateFocusedCellOnThreadSelection } from '../../integrations';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { DEFAULT_COLS, DEFAULT_ROWS, SheetAction } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nconst inertPosition: DxGridPosition = { plane: 'grid', col: 0, row: 0 };\n\nconst initialCells = {\n grid: {},\n frozenColsStart: [...Array(64)].reduce((acc, _, i) => {\n acc[`0,${i}`] = rowLabelCell(i);\n return acc;\n }, {}),\n frozenRowsStart: [...Array(12)].reduce((acc, _, i) => {\n acc[`${i},0`] = colLabelCell(i);\n return acc;\n }, {}),\n};\n\nconst frozen = {\n frozenColsStart: 1,\n frozenRowsStart: 1,\n};\n\nconst sheetRowDefault = {\n frozenRowsStart: { size: defaultSizeRow, readonly: true },\n grid: { size: defaultSizeRow, resizeable: true },\n};\nconst sheetColDefault = { frozenColsStart: { size: 48, readonly: true }, grid: { size: 180, resizeable: true } };\n\nexport const GridSheet = () => {\n const { t } = useTranslation(SHEET_PLUGIN);\n const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs, ignoreAttention } =\n useSheetContext();\n // NOTE(thure): using `useState` instead of `useRef` works with refs provided by `@lit/react` and gives us\n // a reliable dependency for `useEffect` whereas `useLayoutEffect` does not guarantee the element will be defined.\n const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);\n const [extraplanarFocus, setExtraplanarFocus] = useState<DxGridPosition | null>(null);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const rangeController = useRef<RangeController>();\n const { hasAttention } = useAttention(id);\n\n const handleFocus = useCallback(\n (event: FocusEvent) => {\n if (!editing) {\n const cell = closestCell(event.target);\n if (cell) {\n if (cell.plane === 'grid') {\n setCursor({ col: cell.col, row: cell.row });\n setExtraplanarFocus(null);\n } else {\n setExtraplanarFocus(cell);\n }\n } else {\n setExtraplanarFocus(null);\n }\n }\n },\n [editing],\n );\n\n // TODO(burdon): Validate formula before closing: hf.validateFormula();\n const handleClose = useCallback<EditorKeyHandler>(\n (_value, event) => {\n if (event) {\n const { key, shift } = event;\n const axis = ['Enter', 'ArrowUp', 'ArrowDown'].includes(key)\n ? 'row'\n : ['Tab', 'ArrowLeft', 'ArrowRight'].includes(key)\n ? 'col'\n : undefined;\n const delta = key.startsWith('Arrow') ? (['ArrowUp', 'ArrowLeft'].includes(key) ? -1 : 1) : shift ? -1 : 1;\n dxGrid?.refocus(axis, delta);\n }\n },\n [model, editing, dxGrid],\n );\n\n const handleBlur = useCallback<EditorBlurHandler>(\n (value) => {\n if (value !== undefined) {\n model.setValue(parseCellIndex(editing!.index), value);\n }\n },\n [model, editing],\n );\n\n const handleAxisResize = useCallback<NonNullable<GridContentProps['onAxisResize']>>(\n ({ axis, size, index: numericIndex }) => {\n if (axis === 'row') {\n const rowId = model.sheet.rows[parseInt(numericIndex)];\n model.sheet.rowMeta[rowId] ??= {};\n model.sheet.rowMeta[rowId].size = size;\n } else {\n const columnId = model.sheet.columns[parseInt(numericIndex)];\n model.sheet.columnMeta[columnId] ??= {};\n model.sheet.columnMeta[columnId].size = size;\n }\n },\n [model],\n );\n\n const handleSelect = useCallback<NonNullable<GridContentProps['onSelect']>>(\n ({ minCol, maxCol, minRow, maxRow }) => {\n const range: CellRange = { from: { col: minCol, row: minRow } };\n if (minCol !== maxCol || minRow !== maxRow) {\n range.to = { col: maxCol, row: maxRow };\n }\n if (editing) {\n // Update range selection in formula.\n rangeController.current?.setRange(rangeToA1Notation(range));\n } else {\n // Setting range while editing causes focus to move to null, avoid doing so.\n setRange(range.to ? range : undefined);\n }\n },\n [editing],\n );\n const handleWheel = useCallback(\n (event: WheelEvent) => {\n if (!ignoreAttention && !hasAttention) {\n event.stopPropagation();\n }\n },\n [hasAttention, ignoreAttention],\n );\n\n const selectEntireAxis = useCallback(\n (pos: DxGridPosition) => {\n switch (pos.plane) {\n case 'frozenRowsStart':\n return dxGrid?.setSelection({\n start: { col: pos.col, row: 0, plane: 'grid' },\n end: { col: pos.col, row: model.sheet.rows.length - 1, plane: 'grid' },\n });\n case 'frozenColsStart':\n return dxGrid?.setSelection({\n start: { row: pos.row, col: 0, plane: 'grid' },\n end: { row: pos.row, col: model.sheet.columns.length - 1, plane: 'grid' },\n });\n }\n },\n [dxGrid, model.sheet],\n );\n\n const handleClick = useCallback(\n (event: MouseEvent) => {\n const cell = closestCell(event.target);\n if (cell) {\n selectEntireAxis(cell);\n }\n },\n [selectEntireAxis],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n switch (event.key) {\n case 'Backspace':\n case 'Delete':\n event.preventDefault();\n return cursorFallbackRange && model.clear(cursorFallbackRange);\n case 'Enter':\n case 'Space':\n if (dxGrid && extraplanarFocus) {\n switch (extraplanarFocus.plane) {\n case 'frozenRowsStart':\n case 'frozenColsStart':\n event.preventDefault();\n return selectEntireAxis(extraplanarFocus);\n }\n }\n }\n if (event.metaKey || event.ctrlKey) {\n switch (event.key) {\n case 'x':\n case 'X':\n event.preventDefault();\n return cursorFallbackRange && model.cut(cursorFallbackRange);\n case 'c':\n case 'C':\n event.preventDefault();\n return cursorFallbackRange && model.copy(cursorFallbackRange);\n case 'v':\n case 'V':\n event.preventDefault();\n return cursor && model.paste(cursor);\n case 'z':\n event.preventDefault();\n return event.shiftKey ? model.redo() : model.undo();\n case 'Z':\n case 'y':\n event.preventDefault();\n return model.redo();\n }\n }\n },\n [cursorFallbackRange, model, cursor, extraplanarFocus, selectEntireAxis],\n );\n\n const contextMenuAnchorRef = useRef<HTMLButtonElement | null>(null);\n const [contextMenuOpen, setContextMenuOpen] = useState<DxGridPosition | null>(null);\n const contextMenuAxis = contextMenuOpen?.plane.startsWith('frozenRows') ? 'col' : 'row';\n\n const handleContextMenu = useCallback((event: MouseEvent) => {\n const cell = closestCell(event.target);\n if (cell && cell.plane.startsWith('frozen')) {\n event.preventDefault();\n contextMenuAnchorRef.current = event.target as HTMLButtonElement;\n setContextMenuOpen(cell);\n }\n }, []);\n\n const handleAxisMenuAction = useCallback(\n (operation: 'insert-before' | 'insert-after' | 'drop') => {\n switch (operation) {\n case 'insert-before':\n case 'insert-after':\n return dispatch(\n createIntent(SheetAction.InsertAxis, {\n model,\n axis: contextMenuAxis,\n index: contextMenuOpen![contextMenuAxis] + (operation === 'insert-before' ? 0 : 1),\n }),\n );\n case 'drop':\n return dispatch(\n createIntent(SheetAction.DropAxis, {\n model,\n axis: contextMenuAxis,\n axisIndex: model.sheet[contextMenuAxis === 'row' ? 'rows' : 'columns'][contextMenuOpen![contextMenuAxis]],\n }),\n );\n }\n },\n [contextMenuAxis, contextMenuOpen, model, dispatch],\n );\n\n const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);\n\n const extension = useMemo(\n () => [\n editorKeys({ onClose: handleClose, ...(editing?.initialContent && { onNav: handleClose }) }),\n sheetExtension({ functions: model.graph.getFunctions() }),\n rangeExtension({\n onInit: (fn) => (rangeController.current = fn),\n onStateChange: (state) => {\n if (dxGrid) {\n // This can’t dispatch a setState in this component, otherwise the cell editor remounts and loses focus.\n dxGrid.mode = typeof state.activeRange === 'undefined' ? 'edit' : 'edit-select';\n }\n },\n }),\n ],\n [model, handleClose, editing],\n );\n\n const getCellContent = useCallback(\n (index: DxGridCellIndex) => {\n return model.getCellText(parseCellIndex(index));\n },\n [model],\n );\n\n useUpdateFocusedCellOnThreadSelection(dxGrid);\n useSelectThreadOnCellFocus();\n\n return (\n <div role='none' className='relative min-bs-0'>\n <GridCellEditor getCellContent={getCellContent} extension={extension} onBlur={handleBlur} />\n <Grid.Content\n initialCells={initialCells}\n limitColumns={DEFAULT_COLS}\n limitRows={DEFAULT_ROWS}\n columns={columns}\n rows={rows}\n onAxisResize={handleAxisResize}\n onSelect={handleSelect}\n rowDefault={sheetRowDefault}\n columnDefault={sheetColDefault}\n frozen={frozen}\n onFocus={handleFocus}\n onWheelCapture={handleWheel}\n onKeyDown={handleKeyDown}\n onContextMenu={handleContextMenu}\n onClick={handleClick}\n overscroll='trap'\n className='[--dx-grid-base:var(--surface-bg)] [&_.dx-grid]:border-bs [&_.dx-grid]:absolute [&_.dx-grid]:inset-0 [&_.dx-grid]:border-separator'\n activeRefs={activeRefs}\n ref={setDxGrid}\n />\n <DropdownMenu.Root\n modal={false}\n open={!!contextMenuOpen}\n onOpenChange={(nextOpen) => setContextMenuOpen(nextOpen ? inertPosition : null)}\n >\n <DropdownMenu.VirtualTrigger virtualRef={contextMenuAnchorRef} />\n <DropdownMenu.Content side={contextMenuAxis === 'col' ? 'bottom' : 'right'} sideOffset={4} collisionPadding={8}>\n <DropdownMenu.Viewport>\n <DropdownMenu.Item\n onClick={() => handleAxisMenuAction('insert-before')}\n data-testid={`grid.${contextMenuAxis}.insert-before`}\n >\n <Icon\n size={5}\n icon={contextMenuAxis === 'col' ? 'ph--columns-plus-left--regular' : 'ph--rows-plus-top--regular'}\n />\n <span>{t(`add ${contextMenuAxis} before label`)}</span>\n </DropdownMenu.Item>\n <DropdownMenu.Item\n onClick={() => handleAxisMenuAction('insert-after')}\n data-testid={`grid.${contextMenuAxis}.insert-after`}\n >\n <Icon\n size={5}\n icon={contextMenuAxis === 'col' ? 'ph--columns-plus-right--regular' : 'ph--rows-plus-bottom--regular'}\n />\n <span>{t(`add ${contextMenuAxis} after label`)}</span>\n </DropdownMenu.Item>\n <DropdownMenu.Item\n onClick={() => handleAxisMenuAction('drop')}\n data-testid={`grid.${contextMenuAxis}.drop`}\n >\n <Icon size={5} icon='ph--backspace--regular' />\n <span>{t(`delete ${contextMenuAxis} label`)}</span>\n </DropdownMenu.Item>\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { inRange } from '@dxos/compute';\nimport { createDocAccessor, fullyQualifiedId } from '@dxos/react-client/echo';\nimport { parseValue, cellClassesForFieldType } from '@dxos/react-ui-form';\nimport {\n type GridContentProps,\n type DxGridElement,\n type DxGridAxisMeta,\n type DxGridPlane,\n type DxGridPlaneRange,\n type DxGridPlaneCells,\n type DxGridCellValue,\n colToA1Notation,\n rowToA1Notation,\n commentedClassName,\n} from '@dxos/react-ui-grid';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { parseThreadAnchorAsCellRange } from '../../integrations';\nimport { type SheetModel } from '../../model';\nimport { cellClassNameForRange, rangeFromIndex } from '../../types';\n\nconst createDxGridColumns = (model: SheetModel): DxGridAxisMeta => {\n return model.sheet.columns.reduce(\n (acc: DxGridAxisMeta, columnId, numericIndex) => {\n if (model.sheet.columnMeta[columnId] && model.sheet.columnMeta[columnId].size) {\n acc.grid[numericIndex] = { size: model.sheet.columnMeta[columnId].size, resizeable: true };\n }\n return acc;\n },\n { grid: {} },\n );\n};\n\nconst createDxGridRows = (model: SheetModel): DxGridAxisMeta => {\n return model.sheet.rows.reduce(\n (acc: DxGridAxisMeta, rowId, numericIndex) => {\n if (model.sheet.rowMeta[rowId] && model.sheet.rowMeta[rowId].size) {\n acc.grid[numericIndex] = { size: model.sheet.rowMeta[rowId].size, resizeable: true };\n }\n return acc;\n },\n { grid: {} },\n );\n};\n\nconst projectCellProps = (model: SheetModel, col: number, row: number): DxGridCellValue => {\n const address = { col, row };\n const rawValue = model.getValue(address);\n const ranges = model.sheet.ranges?.filter(({ range }) => inRange(rangeFromIndex(model.sheet, range), address));\n const threadRefs = model.sheet.threads\n ?.filter((thread) => {\n const range = thread.target?.anchor && parseThreadAnchorAsCellRange(thread.target!.anchor);\n return thread && range ? inRange(range, address) : false;\n })\n .map((thread) => fullyQualifiedId(thread!))\n .join(' ');\n\n const description = model.getValueDescription(address);\n const type = description?.type;\n const format = description?.format;\n const classNames = ranges?.map(cellClassNameForRange).reverse();\n\n return {\n value: parseValue({ type, format, value: rawValue }),\n className: mx(cellClassesForFieldType({ type, format }), threadRefs && commentedClassName, classNames),\n dataRefs: threadRefs,\n };\n};\nconst gridCellGetter = (model: SheetModel) => {\n // TODO(thure): Actually use the cache.\n const cachedGridCells: DxGridPlaneCells = {};\n return (nextBounds: DxGridPlaneRange): DxGridPlaneCells => {\n [...Array(nextBounds.end.col - nextBounds.start.col)].forEach((_, c0) => {\n return [...Array(nextBounds.end.row - nextBounds.start.row)].forEach((_, r0) => {\n const col = nextBounds.start.col + c0;\n const row = nextBounds.start.row + r0;\n cachedGridCells[`${col},${row}`] = projectCellProps(model, col, row);\n });\n });\n return cachedGridCells;\n };\n};\n\nexport const rowLabelCell = (row: number) => ({\n value: rowToA1Notation(row),\n className: 'text-end pie-1 text-subdued',\n resizeHandle: 'row',\n});\n\nexport const colLabelCell = (col: number) => ({\n value: colToA1Notation(col),\n className: 'text-subdued',\n resizeHandle: 'col',\n});\n\nconst cellGetter = (model: SheetModel) => {\n const getGridCells = gridCellGetter(model);\n return (nextBounds: DxGridPlaneRange, plane: DxGridPlane): DxGridPlaneCells => {\n switch (plane) {\n case 'grid':\n return getGridCells(nextBounds);\n case 'frozenColsStart':\n return [...Array(nextBounds.end.row - nextBounds.start.row)].reduce((acc, _, r0) => {\n const r = nextBounds.start.row + r0;\n acc[`0,${r}`] = rowLabelCell(r);\n return acc;\n }, {});\n case 'frozenRowsStart':\n return [...Array(nextBounds.end.col - nextBounds.start.col)].reduce((acc, _, c0) => {\n const c = nextBounds.start.col + c0;\n acc[`${c},0`] = colLabelCell(c);\n return acc;\n }, {});\n default:\n return {};\n }\n };\n};\n\nexport const useSheetModelDxGridProps = (\n dxGrid: DxGridElement | null,\n model: SheetModel,\n): Pick<GridContentProps, 'columns' | 'rows'> => {\n const [columns, setColumns] = useState<DxGridAxisMeta>(createDxGridColumns(model));\n const [rows, setRows] = useState<DxGridAxisMeta>(createDxGridRows(model));\n\n useEffect(() => {\n const cellsAccessor = createDocAccessor(model.sheet, ['cells']);\n if (dxGrid) {\n dxGrid.getCells = cellGetter(model);\n }\n const handleCellsUpdate = () => {\n dxGrid?.requestUpdate('initialCells');\n };\n cellsAccessor.handle.addListener('change', handleCellsUpdate);\n const unsubscribe = model.graph.update.on(handleCellsUpdate);\n return () => {\n cellsAccessor.handle.removeListener('change', handleCellsUpdate);\n unsubscribe();\n };\n }, [model, dxGrid]);\n\n useEffect(() => {\n const columnMetaAccessor = createDocAccessor(model.sheet, ['columnMeta']);\n const rowMetaAccessor = createDocAccessor(model.sheet, ['rowMeta']);\n const handleColumnMetaUpdate = () => {\n setColumns(createDxGridColumns(model));\n };\n const handleRowMetaUpdate = () => {\n setRows(createDxGridRows(model));\n };\n columnMetaAccessor.handle.addListener('change', handleColumnMetaUpdate);\n rowMetaAccessor.handle.addListener('change', handleRowMetaUpdate);\n return () => {\n columnMetaAccessor.handle.removeListener('change', handleColumnMetaUpdate);\n rowMetaAccessor.handle.removeListener('change', handleRowMetaUpdate);\n };\n }, [model, dxGrid]);\n\n return { columns, rows };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo } from 'react';\n\nimport {\n createIntent,\n createResolver,\n LayoutAction,\n useIntentResolver,\n useIntentDispatcher,\n} from '@dxos/app-framework';\nimport { debounce } from '@dxos/async';\nimport { type CellAddress, type CompleteCellRange, inRange } from '@dxos/compute';\nimport { S } from '@dxos/echo-schema';\nimport { ThreadAction } from '@dxos/plugin-thread/types';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { type DxGridElement, type DxGridPosition, type GridContentProps } from '@dxos/react-ui-grid';\n\nimport { useSheetContext } from '../components';\nimport { SHEET_PLUGIN } from '../meta';\n\nexport const completeCellRangeToThreadCursor = (range: CompleteCellRange): string => {\n return `${range.from.col},${range.from.row},${range.to.col},${range.to.row}`;\n};\n\nexport const parseThreadAnchorAsCellRange = (cursor: string): CompleteCellRange | null => {\n const coords = cursor.split(',');\n if (coords.length !== 4) {\n return null;\n } else {\n const [fromCol, fromRow, toCol, toRow] = coords;\n return {\n from: { col: parseInt(fromCol), row: parseInt(fromRow) },\n to: { col: parseInt(toCol), row: parseInt(toRow) },\n };\n }\n};\n\nexport const useUpdateFocusedCellOnThreadSelection = (grid: DxGridElement | null) => {\n const { model, setActiveRefs } = useSheetContext();\n const scrollIntoViewResolver = useMemo(\n () =>\n createResolver({\n intent: LayoutAction.ScrollIntoView,\n position: 'hoist',\n filter: (\n data,\n ): data is {\n part: 'current';\n subject: string;\n options: { cursor: string; ref: GridContentProps['activeRefs'] };\n } => {\n if (!S.is(LayoutAction.ScrollIntoView.fields.input)(data)) {\n return false;\n }\n\n return data.subject === fullyQualifiedId(model.sheet) && !!data.options?.cursor;\n },\n resolve: ({ options: { cursor, ref } }) => {\n setActiveRefs(ref);\n // TODO(Zan): Everywhere we refer to the cursor in a thread context should change to `anchor`.\n const range = parseThreadAnchorAsCellRange(cursor!);\n range && grid?.setFocus({ ...range.to, plane: 'grid' }, true);\n },\n }),\n [model.sheet, setActiveRefs],\n );\n\n useIntentResolver(SHEET_PLUGIN, scrollIntoViewResolver);\n};\n\nexport const useSelectThreadOnCellFocus = () => {\n const { model, cursor } = useSheetContext();\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const threads = useMemo(\n () => model.sheet.threads?.filter((thread): thread is NonNullable<typeof thread> => !!thread) ?? [],\n [\n // TODO(thure): Surely we can find a better dependency for this…\n JSON.stringify(model.sheet.threads),\n ],\n );\n\n const selectClosestThread = useCallback(\n (cellAddress: CellAddress) => {\n if (!cellAddress || !threads) {\n return;\n }\n\n const closestThread = threads?.find((ref) => {\n if (ref.target?.anchor) {\n const range = parseThreadAnchorAsCellRange(ref.target!.anchor);\n return range ? inRange(range, cellAddress) : false;\n } else {\n return false;\n }\n });\n\n if (closestThread) {\n void dispatch(createIntent(ThreadAction.Select, { current: fullyQualifiedId(closestThread) }));\n }\n },\n [dispatch, threads],\n );\n\n const debounced = useMemo(() => {\n return debounce((cellCoords: DxGridPosition) => requestAnimationFrame(() => selectClosestThread(cellCoords)), 50);\n }, [selectClosestThread]);\n\n useEffect(() => {\n if (!cursor) {\n return;\n }\n debounced(cursor);\n }, [cursor, debounced]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type PropsWithChildren, createContext, useCallback, useContext, useState } from 'react';\n\nimport { type ComputeGraph, type CellAddress, type CellRange, type CompleteCellRange } from '@dxos/compute';\nimport { invariant } from '@dxos/invariant';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport {\n Grid,\n type GridContentProps,\n type GridEditing,\n type GridScopedProps,\n useGridContext,\n} from '@dxos/react-ui-grid';\n\nimport { type SheetModel, useSheetModel } from '../../model';\nimport { type SheetType } from '../../types';\n\nexport type SheetContextValue = {\n id: string;\n\n model: SheetModel;\n\n // Cursor state.\n // TODO(burdon): Cursor and range should use indices.\n cursor?: CellAddress;\n setCursor: (cell: CellAddress | undefined) => void;\n range?: CellRange;\n setRange: (range: CellRange | undefined) => void;\n cursorFallbackRange?: CompleteCellRange;\n\n // Editing state (undefined if not editing).\n editing: GridEditing;\n setEditing: (editing: GridEditing) => void;\n\n // Active refs\n activeRefs: GridContentProps['activeRefs'];\n setActiveRefs: (activeRefs: GridContentProps['activeRefs']) => void;\n\n // Events.\n // TODO(burdon): Generalize.\n onInfo?: () => void;\n\n // Flags\n ignoreAttention?: boolean;\n};\n\nconst SheetContext = createContext<SheetContextValue | undefined>(undefined);\n\nexport const useSheetContext = (): SheetContextValue => {\n const context = useContext(SheetContext);\n invariant(context);\n return context;\n};\n\nconst SheetProviderImpl = ({\n model,\n onInfo,\n ignoreAttention,\n children,\n __gridScope,\n}: GridScopedProps<PropsWithChildren<Pick<SheetContextValue, 'onInfo' | 'model' | 'ignoreAttention'>>>) => {\n const { id, editing, setEditing } = useGridContext('SheetProvider', __gridScope);\n\n const [cursor, setCursorInternal] = useState<CellAddress>();\n const [range, setRangeInternal] = useState<CellRange>();\n const [cursorFallbackRange, setCursorFallbackRange] = useState<CompleteCellRange>();\n const [activeRefs, setActiveRefs] = useState<GridContentProps['activeRefs']>('');\n\n const setCursor = useCallback(\n (nextCursor?: CellAddress) => {\n setCursorInternal(nextCursor);\n setCursorFallbackRange(\n range?.to ? (range as CompleteCellRange) : nextCursor ? { from: nextCursor!, to: nextCursor! } : undefined,\n );\n },\n [range],\n );\n const setRange = useCallback(\n (nextRange?: CellRange) => {\n setRangeInternal(nextRange);\n setCursorFallbackRange(\n nextRange?.to ? (nextRange as CompleteCellRange) : cursor ? { from: cursor!, to: cursor! } : undefined,\n );\n },\n [cursor],\n );\n\n return (\n <SheetContext.Provider\n value={{\n id,\n model,\n editing,\n setEditing,\n cursor,\n setCursor,\n range,\n setRange,\n cursorFallbackRange,\n activeRefs,\n setActiveRefs,\n // TODO(burdon): Change to event.\n onInfo,\n ignoreAttention,\n }}\n >\n {children}\n </SheetContext.Provider>\n );\n};\n\nexport type SheetProviderProps = {\n graph: ComputeGraph;\n sheet: SheetType;\n readonly?: boolean;\n ignoreAttention?: boolean;\n} & Pick<SheetContextValue, 'onInfo'>;\n\nexport const SheetProvider = ({\n children,\n graph,\n sheet,\n readonly,\n ignoreAttention,\n onInfo,\n}: PropsWithChildren<SheetProviderProps>) => {\n const model = useSheetModel(graph, sheet, { readonly });\n\n return !model ? null : (\n <Grid.Root id={fullyQualifiedId(sheet)}>\n <SheetProviderImpl model={model} onInfo={onInfo} ignoreAttention={ignoreAttention}>\n {children}\n </SheetProviderImpl>\n </Grid.Root>\n );\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAAyE;AAGzE,mBAAsB;AAEtB,yBAA8B;ACL9B,IAAAA,gBAAmC;AAEnC,qBAAkC;AAClC,yBAAkB;AAClB,sBAA+B;AAC/B,2BAAqB;AACrB,4BAA2B;ACN3B,IAAAA,gBAAqB;ACArB,IAAAA,gBASO;AAEP,2BAAkD;AAClD,IAAAC,kBAAkD;AAClD,IAAAC,mBAAmD;AACnD,gCAA6B;AAC7B,2BAaO;AC5BP,IAAAF,gBAAoC;AAEpC,IAAAC,kBAAwB;AACxB,kBAAoD;AACpD,2BAAoD;AACpD,IAAAE,wBAWO;AACP,IAAAC,yBAAmB;ACjBnB,IAAAJ,gBAAgD;AAEhD,IAAAK,wBAMO;AACP,mBAAyB;AACzB,IAAAJ,kBAAkE;AAClE,IAAAK,sBAAkB;AAClB,mBAA6B;AAC7B,IAAAC,eAAiC;ACbjC,IAAAP,gBAAgG;AAGhG,uBAA0B;AAC1B,IAAAO,eAAiC;AACjC,IAAAJ,wBAMO;ANGA,IAAMK,sBAAsBC,gDAAmDC,MAAAA;AAE/E,IAAMC,8BAA8B,CAAC,EAAEC,UAAUC,SAAQ,MAA8C;AAC5G,SAAO,6BAAAC,QAAA,cAACN,oBAAoBO,UAAQ;IAACC,OAAO;MAAEJ;IAAS;KAAIC,QAAAA;AAC7D;AAEO,IAAMI,kBAAkB,CAACC,UAAAA;AAC9B,QAAM,EAAEN,SAAQ,QAAKO,yBAAWX,mBAAAA,SAAwBY,oBAAM,IAAIC,MAAM,6BAAA,CAAA;AACxE,QAAM,CAACC,KAAAA,QAASC,kCAAc,YAAA;AAC5B,QAAIL,OAAO;AACT,YAAMI,SAAQV,SAASY,iBAAiBN,KAAAA;AACxC,YAAMI,OAAMG,KAAI;AAChB,aAAOH;IACT;EACF,GAAG;IAACJ;IAAON;GAAS;AAEpB,SAAOU;AACT;ACfO,IAAMI,YAAY,CAAC,EAAEC,MAAK,MAAkB;AACjD,QAAM,EAAEC,EAAC,QAAKC,gCAAeC,kCAAAA;AAE7B,QAAMC,oBAAoB,CAACC,UAAAA;EAAkB;AAC7C,QAAMC,wBAAoBC,2BACxB,CAACF,UAAAA;AACC,UAAMG,QAAQR,MAAMS,OAAOC,UAAU,CAACC,eAAeA,eAAeN,KAAAA;AACpEL,UAAMS,OAAOG,OAAOJ,OAAO,CAAA;EAC7B,GACA;IAACR;GAAM;AAET,SACEb,8BAAAA,QAAA,cAAAA,cAAAA,QAAA,UAAA,MACEA,8BAAAA,QAAA,cAAC0B,MAAAA;IAAGC,WAAU;KAA6Bb,EAAE,oBAAA,CAAA,GAC7Cd,8BAAAA,QAAA,cAAC4B,0BAAKC,MAAI;IAAQC,OAAOjB,MAAMS;IAAQS,QAAQC,qBAAEC,GAAGC,2BAAAA;KACjD,CAAC,EAAEJ,OAAOR,OAAM,MACfA,OAAOa,IAAI,CAACjB,OAAOkB,MACjBpC,8BAAAA,QAAA,cAAC4B,0BAAKS,MAAI;IAACC,KAAKF;IAAGG,MAAMrB;IAAOsB,YAAY;MAAC;MAAOC;;KAClDzC,8BAAAA,QAAA,cAAC4B,0BAAKc,gBAAc,IAAA,GACpB1C,8BAAAA,QAAA,cAAC4B,0BAAKe,WAAS;IAACC,SAAS,MAAM3B,kBAAkBC,KAAAA;KAC9CJ,EAAE,eAAe;IAChB+B,cAAUC,sCAAkBC,sCAAelC,OAAOK,MAAMA,KAAK,CAAA;IAC7DoB,KAAKxB,EAAE,aAAaI,MAAMoB,GAAG,QAAQ;IACrCpC,OAAOY,EAAE,eAAeI,MAAMhB,KAAK,QAAQ;EAC7C,CAAA,CAAA,GAEFF,8BAAAA,QAAA,cAAC4B,0BAAKoB,kBAAgB;IAACJ,SAAS,MAAMzB,kBAAkBD,KAAAA;;AAOtE;AI9BO,IAAM+B,kCAAkC,CAAC/B,UAAAA;AAC9C,SAAO,GAAGA,MAAMgC,KAAKC,GAAG,IAAIjC,MAAMgC,KAAKE,GAAG,IAAIlC,MAAMmC,GAAGF,GAAG,IAAIjC,MAAMmC,GAAGD,GAAG;AAC5E;AAEO,IAAME,+BAA+B,CAACC,WAAAA;AAC3C,QAAMC,SAASD,OAAOE,MAAM,GAAA;AAC5B,MAAID,OAAOE,WAAW,GAAG;AACvB,WAAO;EACT,OAAO;AACL,UAAM,CAACC,SAASC,SAASC,OAAOC,KAAAA,IAASN;AACzC,WAAO;MACLN,MAAM;QAAEC,KAAKY,SAASJ,OAAAA;QAAUP,KAAKW,SAASH,OAAAA;MAAS;MACvDP,IAAI;QAAEF,KAAKY,SAASF,KAAAA;QAAQT,KAAKW,SAASD,KAAAA;MAAO;IACnD;EACF;AACF;AAEO,IAAME,wCAAwC,CAACC,SAAAA;AACpD,QAAM,EAAEC,OAAOC,cAAa,IAAKC,gBAAAA;AACjC,QAAMC,6BAAyBC,uBAC7B,UACEC,sCAAe;IACbC,QAAQC,mCAAaC;IACrB7B,UAAU;IACV8B,QAAQ,CACNC,SAAAA;AAMA,UAAI,CAAC5C,oBAAAA,EAAEC,GAAGwC,mCAAaC,eAAeG,OAAOC,KAAK,EAAEF,IAAAA,GAAO;AACzD,eAAO;MACT;AAEA,aAAOA,KAAKG,gBAAYC,+BAAiBd,MAAMrD,KAAK,KAAK,CAAC,CAAC+D,KAAKK,SAAS1B;IAC3E;IACA2B,SAAS,CAAC,EAAED,SAAS,EAAE1B,QAAQ4B,IAAG,EAAE,MAAE;AACpChB,oBAAcgB,GAAAA;AAEd,YAAMjE,QAAQoC,6BAA6BC,MAAAA;AAC3CrC,eAAS+C,MAAMmB,SAAS;QAAE,GAAGlE,MAAMmC;QAAIgC,OAAO;MAAO,GAAG,IAAA;IAC1D;EACF,CAAA,GACF;IAACnB,MAAMrD;IAAOsD;GAAc;AAG9BmB,+CAAkBtE,oCAAcqD,sBAAAA;AAClC;AAEO,IAAMkB,6BAA6B,MAAA;AACxC,QAAM,EAAErB,OAAOX,OAAM,IAAKa,gBAAAA;AAC1B,QAAM,EAAEoB,iBAAiBC,SAAQ,QAAKC,2CAAAA;AAEtC,QAAMC,cAAUrB,uBACd,MAAMJ,MAAMrD,MAAM8E,SAAShB,OAAO,CAACiB,WAAiD,CAAC,CAACA,MAAAA,KAAW,CAAA,GACjG;;IAEEC,KAAKC,UAAU5B,MAAMrD,MAAM8E,OAAO;GACnC;AAGH,QAAMI,0BAAsB3E,cAAAA,aAC1B,CAAC4E,gBAAAA;AACC,QAAI,CAACA,eAAe,CAACL,SAAS;AAC5B;IACF;AAEA,UAAMM,gBAAgBN,SAASO,KAAK,CAACf,QAAAA;AACnC,UAAIA,IAAIgB,QAAQC,QAAQ;AACtB,cAAMlF,QAAQoC,6BAA6B6B,IAAIgB,OAAQC,MAAM;AAC7D,eAAOlF,YAAQmF,yBAAQnF,OAAO8E,WAAAA,IAAe;MAC/C,OAAO;AACL,eAAO;MACT;IACF,CAAA;AAEA,QAAIC,eAAe;AACjB,WAAKR,aAASa,oCAAaC,0BAAaC,QAAQ;QAAEC,aAASzB,+BAAiBiB,aAAAA;MAAe,CAAA,CAAA;IAC7F;EACF,GACA;IAACR;IAAUE;GAAQ;AAGrB,QAAMe,gBAAYpC,uBAAQ,MAAA;AACxB,eAAOqC,uBAAS,CAACC,eAA+BC,sBAAsB,MAAMd,oBAAoBa,UAAAA,CAAAA,GAAc,EAAA;EAChH,GAAG;IAACb;GAAoB;AAExBe,+BAAU,MAAA;AACR,QAAI,CAACvD,QAAQ;AACX;IACF;AACAmD,cAAUnD,MAAAA;EACZ,GAAG;IAACA;IAAQmD;GAAU;AACxB;AD1FA,IAAMK,sBAAsB,CAAC7C,UAAAA;AAC3B,SAAOA,MAAMrD,MAAMmG,QAAQC,OACzB,CAACC,KAAqBC,UAAUC,iBAAAA;AAC9B,QAAIlD,MAAMrD,MAAMwG,WAAWF,QAAAA,KAAajD,MAAMrD,MAAMwG,WAAWF,QAAAA,EAAUG,MAAM;AAC7EJ,UAAIjD,KAAKmD,YAAAA,IAAgB;QAAEE,MAAMpD,MAAMrD,MAAMwG,WAAWF,QAAAA,EAAUG;QAAMC,YAAY;MAAK;IAC3F;AACA,WAAOL;EACT,GACA;IAAEjD,MAAM,CAAC;EAAE,CAAA;AAEf;AAEA,IAAMuD,mBAAmB,CAACtD,UAAAA;AACxB,SAAOA,MAAMrD,MAAM4G,KAAKR,OACtB,CAACC,KAAqBQ,OAAON,iBAAAA;AAC3B,QAAIlD,MAAMrD,MAAM8G,QAAQD,KAAAA,KAAUxD,MAAMrD,MAAM8G,QAAQD,KAAAA,EAAOJ,MAAM;AACjEJ,UAAIjD,KAAKmD,YAAAA,IAAgB;QAAEE,MAAMpD,MAAMrD,MAAM8G,QAAQD,KAAAA,EAAOJ;QAAMC,YAAY;MAAK;IACrF;AACA,WAAOL;EACT,GACA;IAAEjD,MAAM,CAAC;EAAE,CAAA;AAEf;AAEA,IAAM2D,mBAAmB,CAAC1D,OAAmBf,KAAaC,QAAAA;AACxD,QAAMyE,UAAU;IAAE1E;IAAKC;EAAI;AAC3B,QAAM0E,WAAW5D,MAAM6D,SAASF,OAAAA;AAChC,QAAMvG,SAAS4C,MAAMrD,MAAMS,QAAQqD,OAAO,CAAC,EAAEzD,MAAK,UAAOmF,gBAAAA,aAAQtD,sCAAemB,MAAMrD,OAAOK,KAAAA,GAAQ2G,OAAAA,CAAAA;AACrG,QAAMG,aAAa9D,MAAMrD,MAAM8E,SAC3BhB,OAAO,CAACiB,WAAAA;AACR,UAAM1E,QAAQ0E,OAAOO,QAAQC,UAAU9C,6BAA6BsC,OAAOO,OAAQC,MAAM;AACzF,WAAOR,UAAU1E,YAAQmF,gBAAAA,SAAQnF,OAAO2G,OAAAA,IAAW;EACrD,CAAA,EACC1F,IAAI,CAACyD,eAAWZ,YAAAA,kBAAiBY,MAAAA,CAAAA,EACjCqC,KAAK,GAAA;AAER,QAAMC,cAAchE,MAAMiE,oBAAoBN,OAAAA;AAC9C,QAAMO,OAAOF,aAAaE;AAC1B,QAAMC,SAASH,aAAaG;AAC5B,QAAM7F,aAAalB,QAAQa,IAAImG,2CAAAA,EAAuBC,QAAAA;AAEtD,SAAO;IACLrI,WAAOsI,iCAAW;MAAEJ;MAAMC;MAAQnI,OAAO4H;IAAS,CAAA;IAClDnG,eAAW8G,+BAAGC,8CAAwB;MAAEN;MAAMC;IAAO,CAAA,GAAIL,cAAcW,0CAAoBnG,UAAAA;IAC3FoG,UAAUZ;EACZ;AACF;AACA,IAAMa,iBAAiB,CAAC3E,UAAAA;AAEtB,QAAM4E,kBAAoC,CAAC;AAC3C,SAAO,CAACC,eAAAA;AACN;SAAIC,MAAMD,WAAWE,IAAI9F,MAAM4F,WAAWG,MAAM/F,GAAG;MAAGgG,QAAQ,CAACC,GAAGC,OAAAA;AAChE,aAAO;WAAIL,MAAMD,WAAWE,IAAI7F,MAAM2F,WAAWG,MAAM9F,GAAG;QAAG+F,QAAQ,CAACC,IAAGE,OAAAA;AACvE,cAAMnG,MAAM4F,WAAWG,MAAM/F,MAAMkG;AACnC,cAAMjG,MAAM2F,WAAWG,MAAM9F,MAAMkG;AACnCR,wBAAgB,GAAG3F,GAAAA,IAAOC,GAAAA,EAAK,IAAIwE,iBAAiB1D,OAAOf,KAAKC,GAAAA;MAClE,CAAA;IACF,CAAA;AACA,WAAO0F;EACT;AACF;AAEO,IAAMS,eAAe,CAACnG,SAAiB;EAC5ClD,WAAOsJ,uCAAgBpG,GAAAA;EACvBzB,WAAW;EACX8H,cAAc;AAChB;AAEO,IAAMC,eAAe,CAACvG,SAAiB;EAC5CjD,WAAOyJ,uCAAgBxG,GAAAA;EACvBxB,WAAW;EACX8H,cAAc;AAChB;AAEA,IAAMG,aAAa,CAAC1F,UAAAA;AAClB,QAAM2F,eAAehB,eAAe3E,KAAAA;AACpC,SAAO,CAAC6E,YAA8B1D,UAAAA;AACpC,YAAQA,OAAAA;MACN,KAAK;AACH,eAAOwE,aAAad,UAAAA;MACtB,KAAK;AACH,eAAO;aAAIC,MAAMD,WAAWE,IAAI7F,MAAM2F,WAAWG,MAAM9F,GAAG;UAAG6D,OAAO,CAACC,KAAKkC,GAAGE,OAAAA;AAC3E,gBAAMQ,IAAIf,WAAWG,MAAM9F,MAAMkG;AACjCpC,cAAI,KAAK4C,CAAAA,EAAG,IAAIP,aAAaO,CAAAA;AAC7B,iBAAO5C;QACT,GAAG,CAAC,CAAA;MACN,KAAK;AACH,eAAO;aAAI8B,MAAMD,WAAWE,IAAI9F,MAAM4F,WAAWG,MAAM/F,GAAG;UAAG8D,OAAO,CAACC,KAAKkC,GAAGC,OAAAA;AAC3E,gBAAMU,IAAIhB,WAAWG,MAAM/F,MAAMkG;AACjCnC,cAAI,GAAG6C,CAAAA,IAAK,IAAIL,aAAaK,CAAAA;AAC7B,iBAAO7C;QACT,GAAG,CAAC,CAAA;MACN;AACE,eAAO,CAAC;IACZ;EACF;AACF;AAEO,IAAM8C,2BAA2B,CACtCC,QACA/F,UAAAA;AAEA,QAAM,CAAC8C,SAASkD,UAAAA,QAAcC,wBAAyBpD,oBAAoB7C,KAAAA,CAAAA;AAC3E,QAAM,CAACuD,MAAM2C,OAAAA,QAAWD,wBAAyB3C,iBAAiBtD,KAAAA,CAAAA;AAElE4C,oBAAAA,WAAU,MAAA;AACR,UAAMuD,oBAAgBC,+BAAkBpG,MAAMrD,OAAO;MAAC;KAAQ;AAC9D,QAAIoJ,QAAQ;AACVA,aAAOM,WAAWX,WAAW1F,KAAAA;IAC/B;AACA,UAAMsG,oBAAoB,MAAA;AACxBP,cAAQQ,cAAc,cAAA;IACxB;AACAJ,kBAAcK,OAAOC,YAAY,UAAUH,iBAAAA;AAC3C,UAAMI,cAAc1G,MAAM1D,MAAMqK,OAAOC,GAAGN,iBAAAA;AAC1C,WAAO,MAAA;AACLH,oBAAcK,OAAOK,eAAe,UAAUP,iBAAAA;AAC9CI,kBAAAA;IACF;EACF,GAAG;IAAC1G;IAAO+F;GAAO;AAElBnD,oBAAAA,WAAU,MAAA;AACR,UAAMkE,yBAAqBV,+BAAkBpG,MAAMrD,OAAO;MAAC;KAAa;AACxE,UAAMoK,sBAAkBX,+BAAkBpG,MAAMrD,OAAO;MAAC;KAAU;AAClE,UAAMqK,yBAAyB,MAAA;AAC7BhB,iBAAWnD,oBAAoB7C,KAAAA,CAAAA;IACjC;AACA,UAAMiH,sBAAsB,MAAA;AAC1Bf,cAAQ5C,iBAAiBtD,KAAAA,CAAAA;IAC3B;AACA8G,uBAAmBN,OAAOC,YAAY,UAAUO,sBAAAA;AAChDD,oBAAgBP,OAAOC,YAAY,UAAUQ,mBAAAA;AAC7C,WAAO,MAAA;AACLH,yBAAmBN,OAAOK,eAAe,UAAUG,sBAAAA;AACnDD,sBAAgBP,OAAOK,eAAe,UAAUI,mBAAAA;IAClD;EACF,GAAG;IAACjH;IAAO+F;GAAO;AAElB,SAAO;IAAEjD;IAASS;EAAK;AACzB;;AErHA,IAAM2D,eAAezL,kCAAAA,eAA6CC,MAAAA;AAE3D,IAAMwE,kBAAkB,MAAA;AAC7B,QAAMiH,cAAUhL,cAAAA,YAAW+K,YAAAA;AAC3BE,kCAAUD,SAAAA,QAAAA;;;;;;;;;AACV,SAAOA;AACT;AAEA,IAAME,oBAAoB,CAAC,EACzBrH,OACAsH,QACAC,iBACA1L,UACA2L,YAAW,MACyF;AACpG,QAAM,EAAEC,IAAIC,SAASC,WAAU,QAAKC,sCAAe,iBAAiBJ,WAAAA;AAEpE,QAAM,CAACnI,QAAQwI,iBAAAA,QAAqB5B,cAAAA,UAAAA;AACpC,QAAM,CAACjJ,OAAO8K,gBAAAA,QAAoB7B,cAAAA,UAAAA;AAClC,QAAM,CAAC8B,qBAAqBC,sBAAAA,QAA0B/B,cAAAA,UAAAA;AACtD,QAAM,CAACgC,YAAYhI,aAAAA,QAAiBgG,cAAAA,UAAyC,EAAA;AAE7E,QAAMiC,gBAAYhL,cAAAA,aAChB,CAACiL,eAAAA;AACCN,sBAAkBM,UAAAA;AAClBH,2BACEhL,OAAOmC,KAAMnC,QAA8BmL,aAAa;MAAEnJ,MAAMmJ;MAAahJ,IAAIgJ;IAAY,IAAIzM,MAAAA;EAErG,GACA;IAACsB;GAAM;AAET,QAAMoL,eAAWlL,cAAAA,aACf,CAACmL,cAAAA;AACCP,qBAAiBO,SAAAA;AACjBL,2BACEK,WAAWlJ,KAAMkJ,YAAkChJ,SAAS;MAAEL,MAAMK;MAASF,IAAIE;IAAQ,IAAI3D,MAAAA;EAEjG,GACA;IAAC2D;GAAO;AAGV,SACEvD,8BAAAA,QAAA,cAACoL,aAAanL,UAAQ;IACpBC,OAAO;MACLyL;MACAzH;MACA0H;MACAC;MACAtI;MACA6I;MACAlL;MACAoL;MACAL;MACAE;MACAhI;;MAEAqH;MACAC;IACF;KAEC1L,QAAAA;AAGP;AASO,IAAMyM,gBAAgB,CAAC,EAC5BzM,UACAS,OACAK,OACA4L,UACAhB,iBACAD,OAAM,MACgC;AACtC,QAAMtH,YAAQwI,qCAAclM,OAAOK,OAAO;IAAE4L;EAAS,CAAA;AAErD,SAAO,CAACvI,QAAQ,OACdlE,8BAAAA,QAAA,cAAC2M,2BAAK9K,MAAI;IAAC8J,QAAI3G,aAAAA,kBAAiBnE,KAAAA;KAC9Bb,8BAAAA,QAAA,cAACuL,mBAAAA;IAAkBrH;IAAcsH;IAAgBC;KAC9C1L,QAAAA,CAAAA;AAIT;AHjGA,IAAM6M,gBAAgC;EAAEvH,OAAO;EAAQlC,KAAK;EAAGC,KAAK;AAAE;AAEtE,IAAMyJ,eAAe;EACnB5I,MAAM,CAAC;EACP6I,iBAAiB;OAAI9D,MAAM,EAAA;IAAK/B,OAAO,CAACC,KAAKkC,GAAGhH,MAAAA;AAC9C8E,QAAI,KAAK9E,CAAAA,EAAG,IAAImH,aAAanH,CAAAA;AAC7B,WAAO8E;EACT,GAAG,CAAC,CAAA;EACJ6F,iBAAiB;OAAI/D,MAAM,EAAA;IAAK/B,OAAO,CAACC,KAAKkC,GAAGhH,MAAAA;AAC9C8E,QAAI,GAAG9E,CAAAA,IAAK,IAAIsH,aAAatH,CAAAA;AAC7B,WAAO8E;EACT,GAAG,CAAC,CAAA;AACN;AAEA,IAAM8F,SAAS;EACbF,iBAAiB;EACjBC,iBAAiB;AACnB;AAEA,IAAME,kBAAkB;EACtBF,iBAAiB;IAAEzF,MAAM4F;IAAgBT,UAAU;EAAK;EACxDxI,MAAM;IAAEqD,MAAM4F;IAAgB3F,YAAY;EAAK;AACjD;AACA,IAAM4F,kBAAkB;EAAEL,iBAAiB;IAAExF,MAAM;IAAImF,UAAU;EAAK;EAAGxI,MAAM;IAAEqD,MAAM;IAAKC,YAAY;EAAK;AAAE;AAExG,IAAM6F,YAAY,MAAA;AACvB,QAAM,EAAEtM,EAAC,QAAKC,iBAAAA,gBAAeC,kCAAAA;AAC7B,QAAM,EAAE2K,IAAIzH,OAAO0H,SAASQ,WAAWE,UAAU/I,QAAQ0I,qBAAqBE,YAAYV,gBAAe,IACvGrH,gBAAAA;AAGF,QAAM,CAAC6F,QAAQoD,SAAAA,QAAalD,cAAAA,UAA+B,IAAA;AAC3D,QAAM,CAACmD,kBAAkBC,mBAAAA,QAAuBpD,cAAAA,UAAgC,IAAA;AAChF,QAAM,EAAE3E,iBAAiBC,SAAQ,QAAKC,qBAAAA,qBAAAA;AACtC,QAAM8H,sBAAkBC,sBAAAA;AACxB,QAAM,EAAEC,aAAY,QAAKC,wCAAahC,EAAAA;AAEtC,QAAMiC,kBAAcxM,cAAAA,aAClB,CAACyM,UAAAA;AACC,QAAI,CAACjC,SAAS;AACZ,YAAMkC,WAAOC,kCAAYF,MAAM1H,MAAM;AACrC,UAAI2H,MAAM;AACR,YAAIA,KAAKzI,UAAU,QAAQ;AACzB+G,oBAAU;YAAEjJ,KAAK2K,KAAK3K;YAAKC,KAAK0K,KAAK1K;UAAI,CAAA;AACzCmK,8BAAoB,IAAA;QACtB,OAAO;AACLA,8BAAoBO,IAAAA;QACtB;MACF,OAAO;AACLP,4BAAoB,IAAA;MACtB;IACF;EACF,GACA;IAAC3B;GAAQ;AAIX,QAAMoC,kBAAc5M,cAAAA,aAClB,CAAC6M,QAAQJ,UAAAA;AACP,QAAIA,OAAO;AACT,YAAM,EAAEvL,KAAK4L,MAAK,IAAKL;AACvB,YAAMM,OAAO;QAAC;QAAS;QAAW;QAAaC,SAAS9L,GAAAA,IACpD,QACA;QAAC;QAAO;QAAa;QAAc8L,SAAS9L,GAAAA,IAC1C,QACA1C;AACN,YAAMyO,QAAQ/L,IAAIgM,WAAW,OAAA,IAAY;QAAC;QAAW;QAAaF,SAAS9L,GAAAA,IAAO,KAAK,IAAK4L,QAAQ,KAAK;AACzGjE,cAAQsE,QAAQJ,MAAME,KAAAA;IACxB;EACF,GACA;IAACnK;IAAO0H;IAAS3B;GAAO;AAG1B,QAAMuE,iBAAapN,cAAAA,aACjB,CAAClB,UAAAA;AACC,QAAIA,UAAUN,QAAW;AACvBsE,YAAMuK,aAASC,qCAAe9C,QAASvK,KAAK,GAAGnB,KAAAA;IACjD;EACF,GACA;IAACgE;IAAO0H;GAAQ;AAGlB,QAAM+C,uBAAmBvN,cAAAA,aACvB,CAAC,EAAE+M,MAAM7G,MAAMjG,OAAO+F,aAAY,MAAE;AAClC,QAAI+G,SAAS,OAAO;AAClB,YAAMzG,QAAQxD,MAAMrD,MAAM4G,KAAK1D,SAASqD,YAAAA,CAAAA;AACxClD,YAAMrD,MAAM8G,QAAQD,KAAAA,MAAW,CAAC;AAChCxD,YAAMrD,MAAM8G,QAAQD,KAAAA,EAAOJ,OAAOA;IACpC,OAAO;AACL,YAAMH,WAAWjD,MAAMrD,MAAMmG,QAAQjD,SAASqD,YAAAA,CAAAA;AAC9ClD,YAAMrD,MAAMwG,WAAWF,QAAAA,MAAc,CAAC;AACtCjD,YAAMrD,MAAMwG,WAAWF,QAAAA,EAAUG,OAAOA;IAC1C;EACF,GACA;IAACpD;GAAM;AAGT,QAAM0K,mBAAexN,cAAAA,aACnB,CAAC,EAAEyN,QAAQC,QAAQC,QAAQC,OAAM,MAAE;AACjC,UAAM9N,QAAmB;MAAEgC,MAAM;QAAEC,KAAK0L;QAAQzL,KAAK2L;MAAO;IAAE;AAC9D,QAAIF,WAAWC,UAAUC,WAAWC,QAAQ;AAC1C9N,YAAMmC,KAAK;QAAEF,KAAK2L;QAAQ1L,KAAK4L;MAAO;IACxC;AACA,QAAIpD,SAAS;AAEX4B,sBAAgB/G,SAAS6F,aAASxJ,gBAAAA,mBAAkB5B,KAAAA,CAAAA;IACtD,OAAO;AAELoL,eAASpL,MAAMmC,KAAKnC,QAAQtB,MAAAA;IAC9B;EACF,GACA;IAACgM;GAAQ;AAEX,QAAMqD,kBAAc7N,cAAAA,aAClB,CAACyM,UAAAA;AACC,QAAI,CAACpC,mBAAmB,CAACiC,cAAc;AACrCG,YAAMqB,gBAAe;IACvB;EACF,GACA;IAACxB;IAAcjC;GAAgB;AAGjC,QAAM0D,uBAAmB/N,cAAAA,aACvB,CAACgO,QAAAA;AACC,YAAQA,IAAI/J,OAAK;MACf,KAAK;AACH,eAAO4E,QAAQoF,aAAa;UAC1BnG,OAAO;YAAE/F,KAAKiM,IAAIjM;YAAKC,KAAK;YAAGiC,OAAO;UAAO;UAC7C4D,KAAK;YAAE9F,KAAKiM,IAAIjM;YAAKC,KAAKc,MAAMrD,MAAM4G,KAAK/D,SAAS;YAAG2B,OAAO;UAAO;QACvE,CAAA;MACF,KAAK;AACH,eAAO4E,QAAQoF,aAAa;UAC1BnG,OAAO;YAAE9F,KAAKgM,IAAIhM;YAAKD,KAAK;YAAGkC,OAAO;UAAO;UAC7C4D,KAAK;YAAE7F,KAAKgM,IAAIhM;YAAKD,KAAKe,MAAMrD,MAAMmG,QAAQtD,SAAS;YAAG2B,OAAO;UAAO;QAC1E,CAAA;IACJ;EACF,GACA;IAAC4E;IAAQ/F,MAAMrD;GAAM;AAGvB,QAAMyO,kBAAclO,cAAAA,aAClB,CAACyM,UAAAA;AACC,UAAMC,WAAOC,kCAAYF,MAAM1H,MAAM;AACrC,QAAI2H,MAAM;AACRqB,uBAAiBrB,IAAAA;IACnB;EACF,GACA;IAACqB;GAAiB;AAGpB,QAAMI,oBAAgBnO,cAAAA,aACpB,CAACyM,UAAAA;AACC,YAAQA,MAAMvL,KAAG;MACf,KAAK;MACL,KAAK;AACHuL,cAAM2B,eAAc;AACpB,eAAOvD,uBAAuB/H,MAAMuL,MAAMxD,mBAAAA;MAC5C,KAAK;MACL,KAAK;AACH,YAAIhC,UAAUqD,kBAAkB;AAC9B,kBAAQA,iBAAiBjI,OAAK;YAC5B,KAAK;YACL,KAAK;AACHwI,oBAAM2B,eAAc;AACpB,qBAAOL,iBAAiB7B,gBAAAA;UAC5B;QACF;IACJ;AACA,QAAIO,MAAM6B,WAAW7B,MAAM8B,SAAS;AAClC,cAAQ9B,MAAMvL,KAAG;QACf,KAAK;QACL,KAAK;AACHuL,gBAAM2B,eAAc;AACpB,iBAAOvD,uBAAuB/H,MAAM0L,IAAI3D,mBAAAA;QAC1C,KAAK;QACL,KAAK;AACH4B,gBAAM2B,eAAc;AACpB,iBAAOvD,uBAAuB/H,MAAM2L,KAAK5D,mBAAAA;QAC3C,KAAK;QACL,KAAK;AACH4B,gBAAM2B,eAAc;AACpB,iBAAOjM,UAAUW,MAAM4L,MAAMvM,MAAAA;QAC/B,KAAK;AACHsK,gBAAM2B,eAAc;AACpB,iBAAO3B,MAAMkC,WAAW7L,MAAM8L,KAAI,IAAK9L,MAAM+L,KAAI;QACnD,KAAK;QACL,KAAK;AACHpC,gBAAM2B,eAAc;AACpB,iBAAOtL,MAAM8L,KAAI;MACrB;IACF;EACF,GACA;IAAC/D;IAAqB/H;IAAOX;IAAQ+J;IAAkB6B;GAAiB;AAG1E,QAAMe,2BAAuBzC,sBAAiC,IAAA;AAC9D,QAAM,CAAC0C,iBAAiBC,kBAAAA,QAAsBjG,cAAAA,UAAgC,IAAA;AAC9E,QAAMkG,kBAAkBF,iBAAiB9K,MAAMiJ,WAAW,YAAA,IAAgB,QAAQ;AAElF,QAAMgC,wBAAoBlP,cAAAA,aAAY,CAACyM,UAAAA;AACrC,UAAMC,WAAOC,kCAAYF,MAAM1H,MAAM;AACrC,QAAI2H,QAAQA,KAAKzI,MAAMiJ,WAAW,QAAA,GAAW;AAC3CT,YAAM2B,eAAc;AACpBU,2BAAqBzJ,UAAUoH,MAAM1H;AACrCiK,yBAAmBtC,IAAAA;IACrB;EACF,GAAG,CAAA,CAAE;AAEL,QAAMyC,2BAAuBnP,cAAAA,aAC3B,CAACoP,cAAAA;AACC,YAAQA,WAAAA;MACN,KAAK;MACL,KAAK;AACH,eAAO/K,aACLa,qBAAAA,cAAamK,kCAAYC,YAAY;UACnCxM;UACAiK,MAAMkC;UACNhP,OAAO8O,gBAAiBE,eAAAA,KAAoBG,cAAc,kBAAkB,IAAI;QAClF,CAAA,CAAA;MAEJ,KAAK;AACH,eAAO/K,aACLa,qBAAAA,cAAamK,kCAAYE,UAAU;UACjCzM;UACAiK,MAAMkC;UACNO,WAAW1M,MAAMrD,MAAMwP,oBAAoB,QAAQ,SAAS,SAAA,EAAWF,gBAAiBE,eAAAA,CAAgB;QAC1G,CAAA,CAAA;IAEN;EACF,GACA;IAACA;IAAiBF;IAAiBjM;IAAOuB;GAAS;AAGrD,QAAM,EAAEuB,SAASS,KAAI,IAAKuC,yBAAyBC,QAAQ/F,KAAAA;AAE3D,QAAM2M,gBAAYvM,cAAAA,SAChB,MAAM;QACJwM,iCAAW;MAAEC,SAAS/C;MAAa,GAAIpC,SAASoF,kBAAkB;QAAEC,OAAOjD;MAAY;IAAG,CAAA;QAC1FkD,sCAAe;MAAEC,WAAWjN,MAAM1D,MAAM4Q,aAAY;IAAG,CAAA;QACvDC,sCAAe;MACbC,QAAQ,CAACC,OAAQ/D,gBAAgB/G,UAAU8K;MAC3CC,eAAe,CAACC,UAAAA;AACd,YAAIxH,QAAQ;AAEVA,iBAAOyH,OAAO,OAAOD,MAAME,gBAAgB,cAAc,SAAS;QACpE;MACF;IACF,CAAA;KAEF;IAACzN;IAAO8J;IAAapC;GAAQ;AAG/B,QAAMgG,qBAAiBxQ,cAAAA,aACrB,CAACC,UAAAA;AACC,WAAO6C,MAAM2N,gBAAYnD,qCAAerN,KAAAA,CAAAA;EAC1C,GACA;IAAC6C;GAAM;AAGTF,wCAAsCiG,MAAAA;AACtC1E,6BAAAA;AAEA,SACEvF,8BAAAA,QAAA,cAAC8R,OAAAA;IAAIC,MAAK;IAAOpQ,WAAU;KACzB3B,8BAAAA,QAAA,cAACgS,qCAAAA;IAAeJ;IAAgCf;IAAsBoB,QAAQzD;MAC9ExO,8BAAAA,QAAA,cAAC2M,qBAAAA,KAAKuF,SAAO;IACXrF;IACAsF,cAAcC;IACdC,WAAWC;IACXtL;IACAS;IACA8K,cAAc5D;IACd6D,UAAU5D;IACV6D,YAAYxF;IACZyF,eAAevF;IACfH;IACA2F,SAAS/E;IACTgF,gBAAgB3D;IAChB4D,WAAWtD;IACXuD,eAAexC;IACf1N,SAAS0M;IACTyD,YAAW;IACXpR,WAAU;IACVwK;IACAhH,KAAKkI;MAEPrN,8BAAAA,QAAA,cAACgT,8BAAanR,MAAI;IAChBoR,OAAO;IACPtS,MAAM,CAAC,CAACwP;IACR+C,cAAc,CAACC,aAAa/C,mBAAmB+C,WAAWvG,gBAAgB,IAAA;KAE1E5M,8BAAAA,QAAA,cAACgT,8BAAaI,gBAAc;IAACC,YAAYnD;MACzClQ,8BAAAA,QAAA,cAACgT,8BAAad,SAAO;IAACoB,MAAMjD,oBAAoB,QAAQ,WAAW;IAASkD,YAAY;IAAGC,kBAAkB;KAC3GxT,8BAAAA,QAAA,cAACgT,8BAAaS,UAAQ,MACpBzT,8BAAAA,QAAA,cAACgT,8BAAa3Q,MAAI;IAChBO,SAAS,MAAM2N,qBAAqB,eAAA;IACpCmD,eAAa,QAAQrD,eAAAA;KAErBrQ,8BAAAA,QAAA,cAAC2T,uBAAAA;IACCrM,MAAM;IACNsM,MAAMvD,oBAAoB,QAAQ,mCAAmC;MAEvErQ,8BAAAA,QAAA,cAAC6T,QAAAA,MAAM/S,EAAE,OAAOuP,eAAAA,eAA8B,CAAA,CAAA,GAEhDrQ,8BAAAA,QAAA,cAACgT,8BAAa3Q,MAAI;IAChBO,SAAS,MAAM2N,qBAAqB,cAAA;IACpCmD,eAAa,QAAQrD,eAAAA;KAErBrQ,8BAAAA,QAAA,cAAC2T,uBAAAA;IACCrM,MAAM;IACNsM,MAAMvD,oBAAoB,QAAQ,oCAAoC;MAExErQ,8BAAAA,QAAA,cAAC6T,QAAAA,MAAM/S,EAAE,OAAOuP,eAAAA,cAA6B,CAAA,CAAA,GAE/CrQ,8BAAAA,QAAA,cAACgT,8BAAa3Q,MAAI;IAChBO,SAAS,MAAM2N,qBAAqB,MAAA;IACpCmD,eAAa,QAAQrD,eAAAA;KAErBrQ,8BAAAA,QAAA,cAAC2T,uBAAAA;IAAKrM,MAAM;IAAGsM,MAAK;MACpB5T,8BAAAA,QAAA,cAAC6T,QAAAA,MAAM/S,EAAE,UAAUuP,eAAAA,QAAuB,CAAA,CAAA,CAAA,GAG9CrQ,8BAAAA,QAAA,cAACgT,8BAAac,OAAK,IAAA,CAAA,CAAA,CAAA;AAK7B;ADrWO,IAAMC,qBAAiBC,oBAAK,MAAM,OAAO,+BAAA,CAAA;",
6
+ "names": ["import_react", "import_compute", "import_react_ui", "import_react_ui_grid", "import_react_ui_theme", "import_app_framework", "import_echo_schema", "import_echo", "ComputeGraphContext", "createContext", "undefined", "ComputeGraphContextProvider", "registry", "children", "React", "Provider", "value", "useComputeGraph", "space", "useContext", "raise", "Error", "graph", "useAsyncState", "getOrCreateGraph", "open", "RangeList", "sheet", "t", "useTranslation", "SHEET_PLUGIN", "handleSelectRange", "range", "handleDeleteRange", "useCallback", "index", "ranges", "findIndex", "sheetRange", "splice", "h2", "className", "List", "Root", "items", "isItem", "S", "is", "Range", "map", "i", "Item", "key", "item", "classNames", "ghostHover", "ItemDragHandle", "ItemTitle", "onClick", "position", "rangeToA1Notation", "rangeFromIndex", "ItemDeleteButton", "completeCellRangeToThreadCursor", "from", "col", "row", "to", "parseThreadAnchorAsCellRange", "cursor", "coords", "split", "length", "fromCol", "fromRow", "toCol", "toRow", "parseInt", "useUpdateFocusedCellOnThreadSelection", "grid", "model", "setActiveRefs", "useSheetContext", "scrollIntoViewResolver", "useMemo", "createResolver", "intent", "LayoutAction", "ScrollIntoView", "filter", "data", "fields", "input", "subject", "fullyQualifiedId", "options", "resolve", "ref", "setFocus", "plane", "useIntentResolver", "useSelectThreadOnCellFocus", "dispatchPromise", "dispatch", "useIntentDispatcher", "threads", "thread", "JSON", "stringify", "selectClosestThread", "cellAddress", "closestThread", "find", "target", "anchor", "inRange", "createIntent", "ThreadAction", "Select", "current", "debounced", "debounce", "cellCoords", "requestAnimationFrame", "useEffect", "createDxGridColumns", "columns", "reduce", "acc", "columnId", "numericIndex", "columnMeta", "size", "resizeable", "createDxGridRows", "rows", "rowId", "rowMeta", "projectCellProps", "address", "rawValue", "getValue", "threadRefs", "join", "description", "getValueDescription", "type", "format", "cellClassNameForRange", "reverse", "parseValue", "mx", "cellClassesForFieldType", "commentedClassName", "dataRefs", "gridCellGetter", "cachedGridCells", "nextBounds", "Array", "end", "start", "forEach", "_", "c0", "r0", "rowLabelCell", "rowToA1Notation", "resizeHandle", "colLabelCell", "colToA1Notation", "cellGetter", "getGridCells", "r", "c", "useSheetModelDxGridProps", "dxGrid", "setColumns", "useState", "setRows", "cellsAccessor", "createDocAccessor", "getCells", "handleCellsUpdate", "requestUpdate", "handle", "addListener", "unsubscribe", "update", "on", "removeListener", "columnMetaAccessor", "rowMetaAccessor", "handleColumnMetaUpdate", "handleRowMetaUpdate", "SheetContext", "context", "invariant", "SheetProviderImpl", "onInfo", "ignoreAttention", "__gridScope", "id", "editing", "setEditing", "useGridContext", "setCursorInternal", "setRangeInternal", "cursorFallbackRange", "setCursorFallbackRange", "activeRefs", "setCursor", "nextCursor", "setRange", "nextRange", "SheetProvider", "readonly", "useSheetModel", "Grid", "inertPosition", "initialCells", "frozenColsStart", "frozenRowsStart", "frozen", "sheetRowDefault", "defaultSizeRow", "sheetColDefault", "GridSheet", "setDxGrid", "extraplanarFocus", "setExtraplanarFocus", "rangeController", "useRef", "hasAttention", "useAttention", "handleFocus", "event", "cell", "closestCell", "handleClose", "_value", "shift", "axis", "includes", "delta", "startsWith", "refocus", "handleBlur", "setValue", "parseCellIndex", "handleAxisResize", "handleSelect", "minCol", "maxCol", "minRow", "maxRow", "handleWheel", "stopPropagation", "selectEntireAxis", "pos", "setSelection", "handleClick", "handleKeyDown", "preventDefault", "clear", "metaKey", "ctrlKey", "cut", "copy", "paste", "shiftKey", "redo", "undo", "contextMenuAnchorRef", "contextMenuOpen", "setContextMenuOpen", "contextMenuAxis", "handleContextMenu", "handleAxisMenuAction", "operation", "SheetAction", "InsertAxis", "DropAxis", "axisIndex", "extension", "editorKeys", "onClose", "initialContent", "onNav", "sheetExtension", "functions", "getFunctions", "rangeExtension", "onInit", "fn", "onStateChange", "state", "mode", "activeRange", "getCellContent", "getCellText", "div", "role", "GridCellEditor", "onBlur", "Content", "limitColumns", "DEFAULT_COLS", "limitRows", "DEFAULT_ROWS", "onAxisResize", "onSelect", "rowDefault", "columnDefault", "onFocus", "onWheelCapture", "onKeyDown", "onContextMenu", "overscroll", "DropdownMenu", "modal", "onOpenChange", "nextOpen", "VirtualTrigger", "virtualRef", "side", "sideOffset", "collisionPadding", "Viewport", "data-testid", "Icon", "icon", "span", "Arrow", "SheetContainer", "lazy"]
7
+ }
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var chunk_P4KSGZSS_exports = {};
20
+ __export(chunk_P4KSGZSS_exports, {
21
+ computeGraphFacet: () => computeGraphFacet,
22
+ rangeExtension: () => rangeExtension,
23
+ sheetExtension: () => sheetExtension
24
+ });
25
+ module.exports = __toCommonJS(chunk_P4KSGZSS_exports);
26
+ var import_language = require("@codemirror/language");
27
+ var import_state = require("@codemirror/state");
28
+ var import_view = require("@codemirror/view");
29
+ var import_async = require("@dxos/async");
30
+ var import_compute = require("@dxos/compute");
31
+ var import_invariant = require("@dxos/invariant");
32
+ var import_react_ui_editor = require("@dxos/react-ui-editor");
33
+ var import_autocomplete = require("@codemirror/autocomplete");
34
+ var import_language2 = require("@codemirror/language");
35
+ var import_view2 = require("@codemirror/view");
36
+ var import_highlight = require("@lezer/highlight");
37
+ var import_codemirror_lang_spreadsheet = require("codemirror-lang-spreadsheet");
38
+ var import_compute2 = require("@dxos/compute");
39
+ var import_react_ui_editor2 = require("@dxos/react-ui-editor");
40
+ var import_react_ui_theme = require("@dxos/react-ui-theme");
41
+ var updateAllDecorations = import_state.StateEffect.define();
42
+ var computeGraphFacet = (0, import_react_ui_editor.singleValueFacet)();
43
+ var highlightStyles = import_language2.HighlightStyle.define([
44
+ // Function.
45
+ {
46
+ tag: import_highlight.tags.name,
47
+ class: "text-accentText"
48
+ },
49
+ // Range.
50
+ {
51
+ tag: import_highlight.tags.tagName,
52
+ class: "text-pinkText"
53
+ },
54
+ // Values.
55
+ {
56
+ tag: import_highlight.tags.number,
57
+ class: "text-tealText"
58
+ },
59
+ {
60
+ tag: import_highlight.tags.bool,
61
+ class: "text-tealText"
62
+ },
63
+ {
64
+ tag: import_highlight.tags.string,
65
+ class: "text-tealText"
66
+ },
67
+ // Error.
68
+ {
69
+ tag: import_highlight.tags.invalid,
70
+ class: "text-unAccent"
71
+ }
72
+ ]);
73
+ var languageFacet = (0, import_react_ui_editor2.singleValueFacet)();
74
+ var sheetExtension = ({ debug, functions = [] }) => {
75
+ const { extension, language } = (0, import_codemirror_lang_spreadsheet.spreadsheet)({
76
+ idiom: "en-US",
77
+ decimalSeparator: "."
78
+ });
79
+ const createCompletion = (name) => {
80
+ const { section = "Custom", description, syntax } = functions.find((value) => value.name === name) ?? {};
81
+ return {
82
+ section,
83
+ label: name,
84
+ info: () => {
85
+ if (!description && !syntax) {
86
+ return null;
87
+ }
88
+ const root = document.createElement("div");
89
+ root.className = "flex flex-col gap-2 text-sm";
90
+ const title = document.createElement("h2");
91
+ title.innerText = name;
92
+ title.className = "text-lg font-mono text-accentText";
93
+ root.appendChild(title);
94
+ if (description) {
95
+ const info = document.createElement("p");
96
+ info.innerText = description;
97
+ info.className = "text-subdued";
98
+ root.appendChild(info);
99
+ }
100
+ if (syntax) {
101
+ const detail = document.createElement("pre");
102
+ detail.innerText = syntax;
103
+ detail.className = "whitespace-pre-wrap text-greenText";
104
+ root.appendChild(detail);
105
+ }
106
+ return root;
107
+ },
108
+ apply: (view, completion, from, to) => {
109
+ const insertParens = to === view.state.doc.toString().length;
110
+ view.dispatch(view.state.update({
111
+ changes: {
112
+ from,
113
+ to,
114
+ insert: completion.label + (insertParens ? "()" : "")
115
+ },
116
+ selection: {
117
+ anchor: from + completion.label.length + 1
118
+ }
119
+ }));
120
+ }
121
+ };
122
+ };
123
+ return [
124
+ extension,
125
+ languageFacet.of(language),
126
+ language.data.of({
127
+ autocomplete: (context) => {
128
+ if (context.state.doc.toString()[0] !== "=") {
129
+ return null;
130
+ }
131
+ const match = context.matchBefore(/\w*/);
132
+ if (!match || match.from === match.to) {
133
+ return null;
134
+ }
135
+ const text = match.text.toUpperCase();
136
+ if (!context.explicit && match.text.length < 2) {
137
+ return null;
138
+ }
139
+ return {
140
+ from: match.from,
141
+ options: functions?.filter(({ name }) => name.startsWith(text)).map(({ name }) => createCompletion(name)) ?? []
142
+ };
143
+ }
144
+ }),
145
+ (0, import_language2.syntaxHighlighting)(highlightStyles),
146
+ (0, import_autocomplete.autocompletion)({
147
+ aboveCursor: false,
148
+ defaultKeymap: true,
149
+ activateOnTyping: true,
150
+ closeOnBlur: !debug,
151
+ icons: false,
152
+ tooltipClass: () => (0, import_react_ui_theme.mx)("!-left-[1px] !top-[33px] !-m-0 border !border-t-0 [&>ul]:!min-w-[198px]", "[&>ul>li[aria-selected]]:!bg-accentSurface", "border-separator")
153
+ }),
154
+ import_view2.keymap.of([
155
+ {
156
+ key: "Tab",
157
+ run: (view) => {
158
+ return (0, import_autocomplete.completionStatus)(view.state) === "active" ? (0, import_autocomplete.acceptCompletion)(view) : (0, import_autocomplete.startCompletion)(view);
159
+ }
160
+ }
161
+ ])
162
+ ];
163
+ };
164
+ var rangeExtension = ({ onInit, onStateChange }) => {
165
+ let view;
166
+ let activeRange;
167
+ const notifier = {
168
+ setRange: (range) => {
169
+ if (activeRange) {
170
+ view.dispatch(view.state.update({
171
+ changes: {
172
+ ...activeRange,
173
+ insert: range.toString()
174
+ },
175
+ selection: {
176
+ anchor: activeRange.from + range.length
177
+ }
178
+ }));
179
+ }
180
+ view.focus();
181
+ }
182
+ };
183
+ return import_view2.ViewPlugin.fromClass(class {
184
+ constructor(_view) {
185
+ view = _view;
186
+ onInit?.(notifier);
187
+ }
188
+ update(view2) {
189
+ const { anchor } = view2.state.selection.ranges[0];
190
+ activeRange = void 0;
191
+ const language = view2.state.facet(languageFacet);
192
+ const { topNode } = language.parser.parse(view2.state.doc.toString());
193
+ visitTree(topNode, ({ type, from, to }) => {
194
+ if (from <= anchor && to >= anchor) {
195
+ switch (type.name) {
196
+ case "Function":
197
+ activeRange = {
198
+ from: to,
199
+ to
200
+ };
201
+ break;
202
+ case "CloseParen":
203
+ activeRange = {
204
+ from,
205
+ to: from
206
+ };
207
+ break;
208
+ case "RangeToken":
209
+ case "CellToken":
210
+ activeRange = {
211
+ from,
212
+ to
213
+ };
214
+ return true;
215
+ }
216
+ }
217
+ return false;
218
+ });
219
+ if (!activeRange && view2.state.doc.toString()[0] === "=") {
220
+ const str = view2.state.doc.sliceString(1);
221
+ if (import_compute2.RANGE_NOTATION.test(str)) {
222
+ activeRange = {
223
+ from: 1,
224
+ to: str.length + 1
225
+ };
226
+ }
227
+ }
228
+ onStateChange?.({
229
+ activeRange: activeRange ? view2.state.doc.sliceString(activeRange.from, activeRange.to) : void 0
230
+ });
231
+ }
232
+ });
233
+ };
234
+ var visitTree = (node, callback) => {
235
+ if (callback(node)) {
236
+ return true;
237
+ }
238
+ for (let child = node.firstChild; child !== null; child = child.nextSibling) {
239
+ if (visitTree(child, callback)) {
240
+ return true;
241
+ }
242
+ }
243
+ return false;
244
+ };
245
+ // Annotate the CommonJS export names for ESM import in node:
246
+ 0 && (module.exports = {
247
+ computeGraphFacet,
248
+ rangeExtension,
249
+ sheetExtension
250
+ });
251
+ //# sourceMappingURL=chunk-P4KSGZSS.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/extensions/compute.ts", "../../../src/extensions/editor/extension.ts"],
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 UnsubscribeCallback, debounce } from '@dxos/async';\nimport {\n createSheetName,\n type CellAddress,\n type CellScalarValue,\n type ComputeGraph,\n type ComputeNode,\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\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?: UnsubscribeCallback;\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) {\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 }\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": ["import_language", "import_view", "import_compute", "import_react_ui_editor", "updateAllDecorations", "StateEffect", "define", "computeGraphFacet", "singleValueFacet", "highlightStyles", "HighlightStyle", "tag", "tags", "name", "class", "tagName", "number", "bool", "string", "invalid", "languageFacet", "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", "constructor", "_view", "ranges", "undefined", "facet", "topNode", "parser", "parse", "visitTree", "type", "str", "sliceString", "RANGE_NOTATION", "test", "node", "callback", "child", "firstChild", "nextSibling"]
7
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var compute_graph_registry_IKYGA5ZC_exports = {};
30
+ __export(compute_graph_registry_IKYGA5ZC_exports, {
31
+ default: () => compute_graph_registry_default
32
+ });
33
+ module.exports = __toCommonJS(compute_graph_registry_IKYGA5ZC_exports);
34
+ var import_chunk_6G6HHJOM = require("./chunk-6G6HHJOM.cjs");
35
+ var import_chunk_AUC5XQEN = require("./chunk-AUC5XQEN.cjs");
36
+ var import_app_framework = require("@dxos/app-framework");
37
+ var import_plugin_client = require("@dxos/plugin-client");
38
+ var compute_graph_registry_default = async (context) => {
39
+ const client = context.requestCapability(import_plugin_client.ClientCapabilities.Client);
40
+ let remoteFunctionUrl;
41
+ if (client.config.values.runtime?.services?.edge?.url) {
42
+ const url = new URL("/functions", client.config.values.runtime?.services?.edge?.url);
43
+ url.protocol = "https";
44
+ remoteFunctionUrl = url.toString();
45
+ }
46
+ const { defaultPlugins, ComputeGraphRegistry } = await import("@dxos/compute");
47
+ const computeGraphRegistry = new ComputeGraphRegistry({
48
+ plugins: defaultPlugins,
49
+ remoteFunctionUrl
50
+ });
51
+ return (0, import_app_framework.contributes)(import_chunk_6G6HHJOM.SheetCapabilities.ComputeGraphRegistry, computeGraphRegistry);
52
+ };
53
+ //# sourceMappingURL=compute-graph-registry-IKYGA5ZC.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/compute-graph-registry.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes, type PluginsContext } from '@dxos/app-framework';\nimport { ClientCapabilities } from '@dxos/plugin-client';\n\nimport { SheetCapabilities } from './capabilities';\n\nexport default async (context: PluginsContext) => {\n const client = context.requestCapability(ClientCapabilities.Client);\n let remoteFunctionUrl: string | undefined;\n if (client.config.values.runtime?.services?.edge?.url) {\n const url = new URL('/functions', client.config.values.runtime?.services?.edge?.url);\n url.protocol = 'https';\n remoteFunctionUrl = url.toString();\n }\n\n // TODO(wittjosiah): This can probably be a module level import now due to lazy capability loading.\n // Async import removes direct dependency on hyperformula.\n const { defaultPlugins, ComputeGraphRegistry } = await import('@dxos/compute');\n const computeGraphRegistry = new ComputeGraphRegistry({ plugins: defaultPlugins, remoteFunctionUrl });\n\n return contributes(SheetCapabilities.ComputeGraphRegistry, computeGraphRegistry);\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,2BAAiD;AACjD,2BAAmC;AAInC,IAAA,iCAAe,OAAOA,YAAAA;AACpB,QAAMC,SAASD,QAAQE,kBAAkBC,wCAAmBC,MAAM;AAClE,MAAIC;AACJ,MAAIJ,OAAOK,OAAOC,OAAOC,SAASC,UAAUC,MAAMC,KAAK;AACrD,UAAMA,MAAM,IAAIC,IAAI,cAAcX,OAAOK,OAAOC,OAAOC,SAASC,UAAUC,MAAMC,GAAAA;AAChFA,QAAIE,WAAW;AACfR,wBAAoBM,IAAIG,SAAQ;EAClC;AAIA,QAAM,EAAEC,gBAAgBC,qBAAoB,IAAK,MAAM,OAAO,eAAA;AAC9D,QAAMC,uBAAuB,IAAID,qBAAqB;IAAEE,SAASH;IAAgBV;EAAkB,CAAA;AAEnG,aAAOc,kCAAYC,wCAAkBJ,sBAAsBC,oBAAAA;AAC7D;",
6
+ "names": ["context", "client", "requestCapability", "ClientCapabilities", "Client", "remoteFunctionUrl", "config", "values", "runtime", "services", "edge", "url", "URL", "protocol", "toString", "defaultPlugins", "ComputeGraphRegistry", "computeGraphRegistry", "plugins", "contributes", "SheetCapabilities"]
7
+ }