@dxos/plugin-sheet 0.8.2 → 0.8.3-main.672df60

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 (27) hide show
  1. package/dist/lib/browser/{SheetContainer-GXPG3ZDN.mjs → SheetContainer-N5RBUMWO.mjs} +2 -2
  2. package/dist/lib/browser/{chunk-AYMJXZFS.mjs → chunk-PQXY4IK7.mjs} +5 -4
  3. package/dist/lib/browser/{chunk-AYMJXZFS.mjs.map → chunk-PQXY4IK7.mjs.map} +3 -3
  4. package/dist/lib/browser/index.mjs +1 -1
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/{react-surface-KI6T5M2X.mjs → react-surface-RDKCGE6K.mjs} +2 -2
  7. package/dist/lib/node/{SheetContainer-UUDOHLZR.cjs → SheetContainer-TPB2ZBQF.cjs} +12 -12
  8. package/dist/lib/node/{chunk-BXBNSNDK.cjs → chunk-GBCCPMOO.cjs} +15 -14
  9. package/dist/lib/node/{chunk-BXBNSNDK.cjs.map → chunk-GBCCPMOO.cjs.map} +3 -3
  10. package/dist/lib/node/index.cjs +1 -1
  11. package/dist/lib/node/meta.json +1 -1
  12. package/dist/lib/node/{react-surface-QHAPOAR2.cjs → react-surface-HFKXE4IS.cjs} +8 -8
  13. package/dist/lib/node-esm/{SheetContainer-44KHKMPI.mjs → SheetContainer-F5POTD67.mjs} +2 -2
  14. package/dist/lib/node-esm/{chunk-GCCM7R45.mjs → chunk-THXJQL4R.mjs} +5 -4
  15. package/dist/lib/node-esm/{chunk-GCCM7R45.mjs.map → chunk-THXJQL4R.mjs.map} +3 -3
  16. package/dist/lib/node-esm/index.mjs +1 -1
  17. package/dist/lib/node-esm/meta.json +1 -1
  18. package/dist/lib/node-esm/{react-surface-XT2J3S67.mjs → react-surface-2FV5HNNF.mjs} +2 -2
  19. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  20. package/package.json +47 -47
  21. package/src/integrations/thread-ranges.ts +3 -2
  22. /package/dist/lib/browser/{SheetContainer-GXPG3ZDN.mjs.map → SheetContainer-N5RBUMWO.mjs.map} +0 -0
  23. /package/dist/lib/browser/{react-surface-KI6T5M2X.mjs.map → react-surface-RDKCGE6K.mjs.map} +0 -0
  24. /package/dist/lib/node/{SheetContainer-UUDOHLZR.cjs.map → SheetContainer-TPB2ZBQF.cjs.map} +0 -0
  25. /package/dist/lib/node/{react-surface-QHAPOAR2.cjs.map → react-surface-HFKXE4IS.cjs.map} +0 -0
  26. /package/dist/lib/node-esm/{SheetContainer-44KHKMPI.mjs.map → SheetContainer-F5POTD67.mjs.map} +0 -0
  27. /package/dist/lib/node-esm/{react-surface-XT2J3S67.mjs.map → react-surface-2FV5HNNF.mjs.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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 { Schema } from 'effect';\nimport React, { useCallback } from 'react';\n\nimport { rangeToA1Notation } from '@dxos/compute';\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={Schema.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 useState,\n type FocusEvent,\n type KeyboardEvent,\n type WheelEvent,\n type MouseEvent,\n} from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { rangeToA1Notation, type CellRange } from '@dxos/compute';\nimport { defaultColSize, defaultRowSize } from '@dxos/lit-grid';\nimport { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport {\n closestCell,\n editorKeys,\n parseCellIndex,\n Grid,\n GridCellEditor,\n type DxGridElement,\n type DxGridPosition,\n type DxGridCellIndex,\n type EditorKeyHandler,\n type EditorBlurHandler,\n type GridContentProps,\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 sheetColDefault = {\n frozenColsStart: { size: 48, readonly: true },\n grid: { size: defaultColSize, resizeable: true },\n};\nconst sheetRowDefault = {\n frozenRowsStart: { size: defaultRowSize, readonly: true },\n grid: { size: defaultRowSize, resizeable: true },\n};\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\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 // TODO(thure): Why are Table’s and Sheet’s editor boxes off by 1px?\n <div role='none' className='relative min-bs-0 [&_.cm-editor]:!border-lb [&_.cm-editor]:!border-transparent '>\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 // TODO(burdon): `col` vs. `column`?\n columnDefault={sheetColDefault}\n rowDefault={sheetRowDefault}\n frozen={frozen}\n onAxisResize={handleAxisResize}\n onSelect={handleSelect}\n onFocus={handleFocus}\n onWheelCapture={handleWheel}\n onKeyDown={handleKeyDown}\n onContextMenu={handleContextMenu}\n onClick={handleClick}\n overscroll='trap'\n className='[--dx-grid-base:var(--baseSurface)] [&_.dx-grid]:border-bs [&_.dx-grid]:border-be [&_.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 } 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 { 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 = undefined;\n // TODO(wittjosiah): Update this to get threads via relations.\n // 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: '!bg-toolbarSurface text-subdued text-end pie-1',\n resizeHandle: 'row',\n});\n\nexport const colLabelCell = (col: number) => ({\n value: colToA1Notation(col),\n className: '!bg-toolbarSurface 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 'fixedStartStart': {\n return {\n '0,0': { className: '!bg-toolbarSurface' },\n };\n }\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 { Schema, pipe } from 'effect';\nimport { useCallback, useEffect, useMemo } from 'react';\n\nimport {\n createIntent,\n createResolver,\n LayoutAction,\n useIntentResolver,\n useIntentDispatcher,\n chain,\n} from '@dxos/app-framework';\nimport { debounce } from '@dxos/async';\nimport { type CellAddress, type CompleteCellRange, inRange } from '@dxos/compute';\nimport { isInstanceOf, RelationSourceId } from '@dxos/echo-schema';\nimport { ATTENDABLE_PATH_SEPARATOR, DeckAction } from '@dxos/plugin-deck/types';\nimport { ThreadAction, ThreadType } from '@dxos/plugin-thread/types';\nimport { Filter, fullyQualifiedId, getSpace, Query, useQuery } from '@dxos/react-client/echo';\nimport { type DxGridElement, type DxGridPosition, type GridContentProps } from '@dxos/react-ui-grid';\nimport { AnchoredTo } from '@dxos/schema';\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 (!Schema.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 space = getSpace(model.sheet);\n const anchors = useQuery(space, Query.select(Filter.ids(model.sheet.id)).targetOf(AnchoredTo));\n\n const selectClosestThread = useCallback(\n (cellAddress: CellAddress) => {\n if (!cellAddress) {\n return;\n }\n\n const closestThread = anchors.find((anchor) => {\n const source = anchor[RelationSourceId];\n if (anchor.anchor && isInstanceOf(ThreadType, source)) {\n const range = parseThreadAnchorAsCellRange(anchor.anchor);\n return range ? inRange(range, cellAddress) : false;\n } else {\n return false;\n }\n });\n\n if (closestThread) {\n const primary = fullyQualifiedId(model.sheet);\n const intent = pipe(\n createIntent(ThreadAction.Select, { current: fullyQualifiedId(closestThread) }),\n chain(DeckAction.ChangeCompanion, { primary, companion: `${primary}${ATTENDABLE_PATH_SEPARATOR}comments` }),\n );\n void dispatch(intent);\n }\n },\n [dispatch, anchors],\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": "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",
6
- "names": ["import_react", "import_compute", "import_react_ui", "import_react_ui_grid", "import_react_ui_theme", "import_effect", "import_app_framework", "import_types", "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", "Schema", "is", "Range", "map", "i", "Item", "key", "item", "classNames", "ghostHover", "ItemDragHandle", "ItemTitle", "onClick", "position", "rangeToA1Notation", "rangeFromIndex", "ItemDeleteButton", "createDxGridColumns", "model", "columns", "reduce", "acc", "columnId", "numericIndex", "columnMeta", "size", "grid", "resizeable", "createDxGridRows", "rows", "rowId", "rowMeta", "projectCellProps", "col", "row", "address", "rawValue", "getValue", "filter", "inRange", "threadRefs", "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", "plane", "r", "c", "useSheetModelDxGridProps", "dxGrid", "setColumns", "useState", "setRows", "useEffect", "cellsAccessor", "createDocAccessor", "getCells", "handleCellsUpdate", "requestUpdate", "handle", "addListener", "unsubscribe", "update", "on", "removeListener", "columnMetaAccessor", "rowMetaAccessor", "handleColumnMetaUpdate", "handleRowMetaUpdate", "parseThreadAnchorAsCellRange", "cursor", "coords", "split", "length", "fromCol", "fromRow", "toCol", "toRow", "from", "parseInt", "to", "useUpdateFocusedCellOnThreadSelection", "setActiveRefs", "useSheetContext", "scrollIntoViewResolver", "useMemo", "createResolver", "intent", "LayoutAction", "ScrollIntoView", "data", "fields", "input", "subject", "fullyQualifiedId", "options", "resolve", "ref", "setFocus", "useIntentResolver", "useSelectThreadOnCellFocus", "dispatchPromise", "dispatch", "useIntentDispatcher", "getSpace", "anchors", "useQuery", "Query", "select", "Filter", "ids", "id", "targetOf", "AnchoredTo", "selectClosestThread", "cellAddress", "closestThread", "find", "anchor", "source", "RelationSourceId", "isInstanceOf", "ThreadType", "primary", "pipe", "createIntent", "ThreadAction", "Select", "current", "chain", "DeckAction", "ChangeCompanion", "companion", "ATTENDABLE_PATH_SEPARATOR", "debounced", "debounce", "cellCoords", "requestAnimationFrame", "SheetContext", "context", "invariant", "SheetProviderImpl", "onInfo", "ignoreAttention", "__gridScope", "editing", "setEditing", "useGridContext", "setCursorInternal", "setRangeInternal", "cursorFallbackRange", "setCursorFallbackRange", "activeRefs", "setCursor", "nextCursor", "setRange", "nextRange", "SheetProvider", "readonly", "useSheetModel", "Grid", "inertPosition", "initialCells", "frozenColsStart", "frozenRowsStart", "frozen", "sheetColDefault", "defaultColSize", "sheetRowDefault", "defaultRowSize", "GridSheet", "setDxGrid", "extraplanarFocus", "setExtraplanarFocus", "rangeController", "useRef", "hasAttention", "useAttention", "handleFocus", "event", "cell", "closestCell", "target", "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", "columnDefault", "rowDefault", "onAxisResize", "onSelect", "onFocus", "onWheelCapture", "onKeyDown", "onContextMenu", "overscroll", "DropdownMenu", "modal", "onOpenChange", "nextOpen", "VirtualTrigger", "virtualRef", "side", "sideOffset", "collisionPadding", "Viewport", "data-testid", "Icon", "icon", "span", "Arrow", "SheetContainer", "lazy"]
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 { Schema } from 'effect';\nimport React, { useCallback } from 'react';\n\nimport { rangeToA1Notation } from '@dxos/compute';\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={Schema.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 useState,\n type FocusEvent,\n type KeyboardEvent,\n type WheelEvent,\n type MouseEvent,\n} from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { rangeToA1Notation, type CellRange } from '@dxos/compute';\nimport { defaultColSize, defaultRowSize } from '@dxos/lit-grid';\nimport { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport {\n closestCell,\n editorKeys,\n parseCellIndex,\n Grid,\n GridCellEditor,\n type DxGridElement,\n type DxGridPosition,\n type DxGridCellIndex,\n type EditorKeyHandler,\n type EditorBlurHandler,\n type GridContentProps,\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 sheetColDefault = {\n frozenColsStart: { size: 48, readonly: true },\n grid: { size: defaultColSize, resizeable: true },\n};\nconst sheetRowDefault = {\n frozenRowsStart: { size: defaultRowSize, readonly: true },\n grid: { size: defaultRowSize, resizeable: true },\n};\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\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 // TODO(thure): Why are Table’s and Sheet’s editor boxes off by 1px?\n <div role='none' className='relative min-bs-0 [&_.cm-editor]:!border-lb [&_.cm-editor]:!border-transparent '>\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 // TODO(burdon): `col` vs. `column`?\n columnDefault={sheetColDefault}\n rowDefault={sheetRowDefault}\n frozen={frozen}\n onAxisResize={handleAxisResize}\n onSelect={handleSelect}\n onFocus={handleFocus}\n onWheelCapture={handleWheel}\n onKeyDown={handleKeyDown}\n onContextMenu={handleContextMenu}\n onClick={handleClick}\n overscroll='trap'\n className='[--dx-grid-base:var(--baseSurface)] [&_.dx-grid]:border-bs [&_.dx-grid]:border-be [&_.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 } 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 { 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 = undefined;\n // TODO(wittjosiah): Update this to get threads via relations.\n // 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: '!bg-toolbarSurface text-subdued text-end pie-1',\n resizeHandle: 'row',\n});\n\nexport const colLabelCell = (col: number) => ({\n value: colToA1Notation(col),\n className: '!bg-toolbarSurface 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 'fixedStartStart': {\n return {\n '0,0': { className: '!bg-toolbarSurface' },\n };\n }\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 { Schema, pipe } from 'effect';\nimport { useCallback, useEffect, useMemo } from 'react';\n\nimport {\n createIntent,\n createResolver,\n LayoutAction,\n useIntentResolver,\n useIntentDispatcher,\n chain,\n} from '@dxos/app-framework';\nimport { debounce } from '@dxos/async';\nimport { type CellAddress, type CompleteCellRange, inRange } from '@dxos/compute';\nimport { Relation } from '@dxos/echo';\nimport { isInstanceOf } from '@dxos/echo-schema';\nimport { ATTENDABLE_PATH_SEPARATOR, DeckAction } from '@dxos/plugin-deck/types';\nimport { ThreadAction, ThreadType } from '@dxos/plugin-thread/types';\nimport { Filter, fullyQualifiedId, getSpace, Query, useQuery } from '@dxos/react-client/echo';\nimport { type DxGridElement, type DxGridPosition, type GridContentProps } from '@dxos/react-ui-grid';\nimport { AnchoredTo } from '@dxos/schema';\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 (!Schema.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 space = getSpace(model.sheet);\n const anchors = useQuery(space, Query.select(Filter.ids(model.sheet.id)).targetOf(AnchoredTo));\n\n const selectClosestThread = useCallback(\n (cellAddress: CellAddress) => {\n if (!cellAddress) {\n return;\n }\n\n const closestThread = anchors.find((anchor) => {\n const source = Relation.getSource(anchor);\n if (anchor.anchor && isInstanceOf(ThreadType, source)) {\n const range = parseThreadAnchorAsCellRange(anchor.anchor);\n return range ? inRange(range, cellAddress) : false;\n } else {\n return false;\n }\n });\n\n if (closestThread) {\n const primary = fullyQualifiedId(model.sheet);\n const intent = pipe(\n createIntent(ThreadAction.Select, { current: fullyQualifiedId(closestThread) }),\n chain(DeckAction.ChangeCompanion, { primary, companion: `${primary}${ATTENDABLE_PATH_SEPARATOR}comments` }),\n );\n void dispatch(intent);\n }\n },\n [dispatch, anchors],\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": "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",
6
+ "names": ["import_react", "import_compute", "import_react_ui", "import_react_ui_grid", "import_react_ui_theme", "import_effect", "import_app_framework", "import_echo", "import_types", "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", "Schema", "is", "Range", "map", "i", "Item", "key", "item", "classNames", "ghostHover", "ItemDragHandle", "ItemTitle", "onClick", "position", "rangeToA1Notation", "rangeFromIndex", "ItemDeleteButton", "createDxGridColumns", "model", "columns", "reduce", "acc", "columnId", "numericIndex", "columnMeta", "size", "grid", "resizeable", "createDxGridRows", "rows", "rowId", "rowMeta", "projectCellProps", "col", "row", "address", "rawValue", "getValue", "filter", "inRange", "threadRefs", "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", "plane", "r", "c", "useSheetModelDxGridProps", "dxGrid", "setColumns", "useState", "setRows", "useEffect", "cellsAccessor", "createDocAccessor", "getCells", "handleCellsUpdate", "requestUpdate", "handle", "addListener", "unsubscribe", "update", "on", "removeListener", "columnMetaAccessor", "rowMetaAccessor", "handleColumnMetaUpdate", "handleRowMetaUpdate", "parseThreadAnchorAsCellRange", "cursor", "coords", "split", "length", "fromCol", "fromRow", "toCol", "toRow", "from", "parseInt", "to", "useUpdateFocusedCellOnThreadSelection", "setActiveRefs", "useSheetContext", "scrollIntoViewResolver", "useMemo", "createResolver", "intent", "LayoutAction", "ScrollIntoView", "data", "fields", "input", "subject", "fullyQualifiedId", "options", "resolve", "ref", "setFocus", "useIntentResolver", "useSelectThreadOnCellFocus", "dispatchPromise", "dispatch", "useIntentDispatcher", "getSpace", "anchors", "useQuery", "Query", "select", "Filter", "ids", "id", "targetOf", "AnchoredTo", "selectClosestThread", "cellAddress", "closestThread", "find", "anchor", "source", "Relation", "getSource", "isInstanceOf", "ThreadType", "primary", "pipe", "createIntent", "ThreadAction", "Select", "current", "chain", "DeckAction", "ChangeCompanion", "companion", "ATTENDABLE_PATH_SEPARATOR", "debounced", "debounce", "cellCoords", "requestAnimationFrame", "SheetContext", "context", "invariant", "SheetProviderImpl", "onInfo", "ignoreAttention", "__gridScope", "editing", "setEditing", "useGridContext", "setCursorInternal", "setRangeInternal", "cursorFallbackRange", "setCursorFallbackRange", "activeRefs", "setCursor", "nextCursor", "setRange", "nextRange", "SheetProvider", "readonly", "useSheetModel", "Grid", "inertPosition", "initialCells", "frozenColsStart", "frozenRowsStart", "frozen", "sheetColDefault", "defaultColSize", "sheetRowDefault", "defaultRowSize", "GridSheet", "setDxGrid", "extraplanarFocus", "setExtraplanarFocus", "rangeController", "useRef", "hasAttention", "useAttention", "handleFocus", "event", "cell", "closestCell", "target", "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", "columnDefault", "rowDefault", "onAxisResize", "onSelect", "onFocus", "onWheelCapture", "onKeyDown", "onContextMenu", "overscroll", "DropdownMenu", "modal", "onOpenChange", "nextOpen", "VirtualTrigger", "virtualRef", "side", "sideOffset", "collisionPadding", "Viewport", "data-testid", "Icon", "icon", "span", "Arrow", "SheetContainer", "lazy"]
7
7
  }
@@ -48,7 +48,7 @@ var AnchorSort = (0, import_app_framework.lazy)(() => import("./anchor-sort-LTLY
48
48
  var ComputeGraphRegistry = (0, import_app_framework.lazy)(() => import("./compute-graph-registry-ARLDHPFW.cjs"));
49
49
  var IntentResolver = (0, import_app_framework.lazy)(() => import("./intent-resolver-EVLGL7VZ.cjs"));
50
50
  var Markdown = (0, import_app_framework.lazy)(() => import("./markdown-DBPOAYI7.cjs"));
51
- var ReactSurface = (0, import_app_framework.lazy)(() => import("./react-surface-QHAPOAR2.cjs"));
51
+ var ReactSurface = (0, import_app_framework.lazy)(() => import("./react-surface-HFKXE4IS.cjs"));
52
52
  var serializer = {
53
53
  serialize: async ({ object }) => {
54
54
  return JSON.stringify(object, null, 2);