@dxos/plugin-sheet 0.9.1-main.c7dcc2e112 → 0.9.1-staging.ee54ba693a
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.
- package/dist/lib/neutral/{RangeList-7NS3MU5O.mjs → RangeList-EIJTFS7P.mjs} +2 -2
- package/dist/lib/neutral/{RangeList-7NS3MU5O.mjs.map → RangeList-EIJTFS7P.mjs.map} +2 -2
- package/dist/lib/neutral/SheetPlugin.mjs +3 -5
- package/dist/lib/neutral/SheetPlugin.mjs.map +3 -3
- package/dist/lib/neutral/capabilities/index.mjs +4 -6
- package/dist/lib/neutral/capabilities/index.mjs.map +3 -3
- package/dist/lib/neutral/{chunk-2EZJRMC4.mjs → chunk-HY4DM35G.mjs} +98 -6
- package/dist/lib/neutral/chunk-HY4DM35G.mjs.map +7 -0
- package/dist/lib/neutral/chunk-TDGEOMRG.mjs +8 -0
- package/dist/lib/neutral/{chunk-ZJEI77EI.mjs.map → chunk-TDGEOMRG.mjs.map} +2 -2
- package/dist/lib/neutral/{comment-config-WGXXX5FG.mjs → comment-config-4CIQFYM2.mjs} +1 -1
- package/dist/lib/neutral/comment-config-4CIQFYM2.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +7 -7
- package/dist/lib/neutral/components/index.mjs.map +3 -3
- package/dist/lib/neutral/containers/index.mjs +1 -1
- package/dist/lib/neutral/create-I3TKMPQO.mjs +30 -0
- package/dist/lib/neutral/create-I3TKMPQO.mjs.map +7 -0
- package/dist/lib/neutral/{create-object-RR5OBY5H.mjs → create-object-5WEY5XZJ.mjs} +2 -6
- package/dist/lib/neutral/create-object-5WEY5XZJ.mjs.map +7 -0
- package/dist/lib/neutral/{drop-axis-PRINKF5X.mjs → drop-axis-JPFU5CJO.mjs} +2 -2
- package/dist/lib/neutral/get-values-7YWQTH65.mjs +92 -0
- package/dist/lib/neutral/get-values-7YWQTH65.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +2 -8
- package/dist/lib/neutral/{insert-axis-FCSVF6OW.mjs → insert-axis-WD6ZC3UA.mjs} +2 -2
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/operations/index.mjs +1 -1
- package/dist/lib/neutral/plugin.mjs +1 -1
- package/dist/lib/neutral/{restore-axis-2RUGHTNA.mjs → restore-axis-RLPX7P3G.mjs} +2 -2
- package/dist/lib/neutral/{scroll-to-anchor-7BAFVTIM.mjs → scroll-to-anchor-6FJJQWZC.mjs} +2 -2
- package/dist/lib/neutral/set-values-5DVOVLJH.mjs +30 -0
- package/dist/lib/neutral/set-values-5DVOVLJH.mjs.map +7 -0
- package/dist/lib/neutral/skill-definition-U3KQCFOI.mjs +12 -0
- package/dist/lib/neutral/skill-definition-U3KQCFOI.mjs.map +7 -0
- package/dist/lib/neutral/types/index.mjs +1 -1
- package/dist/types/src/SheetPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/anchor-sort.d.ts +1 -2
- package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
- package/dist/types/src/capabilities/comment-config.d.ts +1 -2
- package/dist/types/src/capabilities/comment-config.d.ts.map +1 -1
- package/dist/types/src/capabilities/compute-graph-registry.d.ts +1 -1
- package/dist/types/src/capabilities/create-object.d.ts +1 -7
- package/dist/types/src/capabilities/create-object.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +1 -2
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/markdown-extension.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +1 -1
- package/dist/types/src/capabilities/skill-definition.d.ts +5 -0
- package/dist/types/src/capabilities/skill-definition.d.ts.map +1 -0
- package/dist/types/src/capabilities/state.d.ts +1 -2
- package/dist/types/src/capabilities/state.d.ts.map +1 -1
- package/dist/types/src/capabilities/undo-mappings.d.ts +2 -2
- package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -1
- package/dist/types/src/components/Sheet/Sheet.d.ts +1 -1
- package/dist/types/src/components/Sheet/Sheet.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +0 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +4 -0
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/model/sheet-model.d.ts +1 -25
- package/dist/types/src/model/sheet-model.d.ts.map +1 -1
- package/dist/types/src/operations/create.d.ts +5 -0
- package/dist/types/src/operations/create.d.ts.map +1 -0
- package/dist/types/src/operations/get-values.d.ts +5 -0
- package/dist/types/src/operations/get-values.d.ts.map +1 -0
- package/dist/types/src/operations/index.d.ts.map +1 -1
- package/dist/types/src/operations/set-values.d.ts +5 -0
- package/dist/types/src/operations/set-values.d.ts.map +1 -0
- package/dist/types/src/skills/index.d.ts +2 -0
- package/dist/types/src/skills/index.d.ts.map +1 -0
- package/dist/types/src/skills/sheet-skill.d.ts +4 -0
- package/dist/types/src/skills/sheet-skill.d.ts.map +1 -0
- package/dist/types/src/testing/testing.d.ts +1 -25
- package/dist/types/src/testing/testing.d.ts.map +1 -1
- package/dist/types/src/types/Sheet.d.ts +7 -28
- package/dist/types/src/types/Sheet.d.ts.map +1 -1
- package/dist/types/src/types/SheetOperation.d.ts +22 -0
- package/dist/types/src/types/SheetOperation.d.ts.map +1 -1
- package/dist/types/src/types/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +60 -54
- package/src/SheetPlugin.tsx +3 -5
- package/src/capabilities/comment-config.ts +1 -6
- package/src/capabilities/create-object.ts +1 -4
- package/src/capabilities/index.ts +1 -2
- package/src/capabilities/skill-definition.ts +14 -0
- package/src/components/Sheet/Sheet.tsx +1 -1
- package/src/components/SheetContent/SheetCellEditor.stories.tsx +2 -2
- package/src/components/SheetContent/util.ts +4 -4
- package/src/containers/RangeList/RangeList.tsx +1 -1
- package/src/index.ts +0 -1
- package/src/operations/create.ts +24 -0
- package/src/operations/get-values.ts +83 -0
- package/src/operations/index.ts +3 -0
- package/src/operations/set-values.ts +29 -0
- package/src/skills/index.ts +5 -0
- package/src/skills/sheet-skill.ts +46 -0
- package/src/types/Sheet.ts +26 -21
- package/src/types/SheetOperation.ts +61 -0
- package/src/types/util.ts +8 -1
- package/dist/lib/neutral/app-graph-builder-PXTENKOB.mjs +0 -66
- package/dist/lib/neutral/app-graph-builder-PXTENKOB.mjs.map +0 -7
- package/dist/lib/neutral/chunk-2EZJRMC4.mjs.map +0 -7
- package/dist/lib/neutral/chunk-QT3L3OR2.mjs +0 -10
- package/dist/lib/neutral/chunk-QT3L3OR2.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ZJEI77EI.mjs +0 -8
- package/dist/lib/neutral/comment-config-WGXXX5FG.mjs.map +0 -7
- package/dist/lib/neutral/create-object-RR5OBY5H.mjs.map +0 -7
- package/dist/lib/neutral/navigation-resolver-F5LR3IIW.mjs +0 -14
- package/dist/lib/neutral/navigation-resolver-F5LR3IIW.mjs.map +0 -7
- package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -6
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
- package/dist/types/src/capabilities/navigation-resolver.d.ts +0 -6
- package/dist/types/src/capabilities/navigation-resolver.d.ts.map +0 -1
- package/dist/types/src/paths.d.ts +0 -3
- package/dist/types/src/paths.d.ts.map +0 -1
- package/src/capabilities/app-graph-builder.ts +0 -61
- package/src/capabilities/navigation-resolver.ts +0 -19
- package/src/paths.ts +0 -11
- /package/dist/lib/neutral/{drop-axis-PRINKF5X.mjs.map → drop-axis-JPFU5CJO.mjs.map} +0 -0
- /package/dist/lib/neutral/{insert-axis-FCSVF6OW.mjs.map → insert-axis-WD6ZC3UA.mjs.map} +0 -0
- /package/dist/lib/neutral/{restore-axis-2RUGHTNA.mjs.map → restore-axis-RLPX7P3G.mjs.map} +0 -0
- /package/dist/lib/neutral/{scroll-to-anchor-7BAFVTIM.mjs.map → scroll-to-anchor-6FJJQWZC.mjs.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/ComputeGraph/ComputeGraphContextProvider.tsx", "../../../../src/components/SheetContent/SheetContent.tsx", "../../../../src/components/SheetRoot/SheetRoot.tsx", "../../../../src/model/sheet-model.ts", "../../../../src/model/useSheetModel.ts", "../../../../src/components/SheetContent/util.ts", "../../../../src/components/SheetStatusbar/SheetStatusbar.tsx", "../../../../src/components/SheetToolbar/SheetToolbar.tsx", "../../../../src/components/SheetToolbar/align.ts", "../../../../src/components/SheetToolbar/style.ts", "../../../../src/components/SheetToolbar/useToolbarState.ts", "../../../../src/components/Sheet/Sheet.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type PropsWithChildren, createContext, useContext } from 'react';\n\nimport { type ComputeGraph, type ComputeGraphRegistry } from '@dxos/compute-hyperformula';\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, {\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type WheelEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { useCapabilities, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { type CellRange, rangeToA1Notation } from '@dxos/compute-hyperformula';\nimport { Obj } from '@dxos/echo';\nimport { defaultColSize, defaultRowSize } from '@dxos/lit-grid';\nimport { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';\nimport { composable, composableProps } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport {\n type DxGridCellIndex,\n type DxGridElement,\n type DxGridPosition,\n type EditorBlurHandler,\n type EditorKeyHandler,\n Grid,\n GridCellEditor,\n type GridContentProps,\n closestCell,\n editorKeys,\n parseCellIndex,\n} from '@dxos/react-ui-grid';\n\nimport { meta } from '#meta';\nimport { SheetOperation } from '#types';\nimport { DEFAULT_COLS, DEFAULT_ROWS, SheetCapabilities } from '#types';\n\nimport { type RangeController, rangeExtension, sheetExtension } from '../../extensions';\nimport { useSelectThreadOnCellFocus } from '../../integrations';\nimport { useSheetContext } from '../SheetRoot';\nimport { colLabelCell, rowLabelCell, useSheetModelDxGridProps } from './util';\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, focusUnfurl: false },\n grid: { size: defaultColSize, resizeable: true },\n};\nconst sheetRowDefault = {\n frozenRowsStart: { size: defaultRowSize, readonly: true, focusUnfurl: false },\n grid: { size: defaultRowSize, resizeable: true },\n};\n\nexport type SheetContentProps = {};\n\nexport const SheetContent = composable<HTMLDivElement, SheetContentProps>((props, forwardedRef) => {\n const { t } = useTranslation(meta.profile.key);\n const {\n id,\n attendableId,\n model,\n editing,\n setCursor,\n setRange,\n cursor,\n cursorFallbackRange,\n activeRefs,\n setActiveRefs,\n ignoreAttention,\n } = useSheetContext();\n\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 { invokePromise } = useOperationInvoker();\n const rangeController = useRef<RangeController>(null);\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 Obj.update(model.sheet, (sheet) => {\n if (axis === 'row') {\n const rowId = sheet.rows[parseInt(numericIndex)];\n sheet.rowMeta[rowId] ??= {};\n sheet.rowMeta[rowId].size = size;\n } else {\n const columnId = sheet.columns[parseInt(numericIndex)];\n sheet.columnMeta[columnId] ??= {};\n sheet.columnMeta[columnId].size = size;\n }\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: {\n col: pos.col,\n row: model.sheet.rows.length - 1,\n plane: 'grid',\n },\n });\n case 'frozenColsStart':\n return dxGrid?.setSelection({\n start: { row: pos.row, col: 0, plane: 'grid' },\n end: {\n row: pos.row,\n col: model.sheet.columns.length - 1,\n plane: 'grid',\n },\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 invokePromise(SheetOperation.InsertAxis, {\n model,\n axis: contextMenuAxis,\n index: contextMenuOpen![contextMenuAxis] + (operation === 'insert-before' ? 0 : 1),\n });\n case 'drop':\n return invokePromise(SheetOperation.DropAxis, {\n model,\n axis: contextMenuAxis,\n axisIndex: model.sheet[contextMenuAxis === 'row' ? 'rows' : 'columns'][contextMenuOpen![contextMenuAxis]],\n });\n }\n },\n [contextMenuAxis, contextMenuOpen, model, invokePromise],\n );\n\n const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);\n\n const extensions = useMemo(\n () => [\n editorKeys({\n onClose: handleClose,\n ...(editing?.initialContent && { onNav: handleClose }),\n }),\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 const [gridInstances] = useCapabilities(SheetCapabilities.GridInstances);\n useEffect(() => {\n if (dxGrid && gridInstances) {\n gridInstances.register(attendableId, dxGrid, setActiveRefs);\n return () => gridInstances.unregister(attendableId);\n }\n }, [dxGrid, gridInstances, attendableId, setActiveRefs]);\n\n useSelectThreadOnCellFocus();\n\n return (\n <div ref={forwardedRef} {...composableProps(props, { classNames: 'relative min-h-0' })}>\n <GridCellEditor getCellContent={getCellContent} extensions={extensions} onBlur={handleBlur} />\n <Grid.Content\n className='[--dx-grid-base:var(--base-surface)] [&_.dx-grid]:absolute [&_.dx-grid]:inset-0'\n initialCells={initialCells}\n limitColumns={DEFAULT_COLS}\n limitRows={DEFAULT_ROWS}\n columns={columns}\n rows={rows}\n columnDefault={sheetColDefault}\n rowDefault={sheetRowDefault}\n activeRefs={activeRefs}\n frozen={frozen}\n overscroll='trap'\n onAxisResize={handleAxisResize}\n onSelect={handleSelect}\n onFocus={handleFocus}\n onWheelCapture={handleWheel}\n onKeyDown={handleKeyDown}\n onContextMenu={handleContextMenu}\n onClick={handleClick}\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 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 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 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 React, { type PropsWithChildren, createContext, useCallback, useContext, useState } from 'react';\n\nimport {\n type CellAddress,\n type CellRange,\n type CompleteCellRange,\n type ComputeGraph,\n} from '@dxos/compute-hyperformula';\nimport { raise } from '@dxos/debug';\nimport {\n Grid,\n type GridContentProps,\n type GridEditing,\n type GridScopedProps,\n useGridContext,\n} from '@dxos/react-ui-grid';\n\nimport { type Sheet } from '#types';\n\nimport { type SheetModel, useSheetModel } from '../../model';\n\nexport type SheetContextValue = {\n id: string;\n attendableId: string;\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 // Flags\n ignoreAttention?: boolean;\n\n // Events.\n // TODO(burdon): Generalize.\n onInfo?: () => void;\n};\n\n// TODO(burdon): Use radix context.\nconst SheetContext = createContext<SheetContextValue | undefined>(undefined);\n\nexport const useSheetContext = (): SheetContextValue => {\n return useContext(SheetContext) ?? raise(new Error('Missing SheetContext'));\n};\n\nexport type SheetRootProps = {\n graph: ComputeGraph;\n sheet: Sheet.Sheet;\n attendableId: string;\n readonly?: boolean;\n ignoreAttention?: boolean;\n} & Pick<SheetContextValue, 'onInfo'>;\n\nexport const SheetRoot = ({\n children,\n graph,\n sheet,\n attendableId,\n readonly,\n ignoreAttention,\n onInfo,\n}: PropsWithChildren<SheetRootProps>) => {\n const model = useSheetModel(graph, sheet, { readonly });\n if (!model) {\n return null;\n }\n\n return (\n <Grid.Root id={attendableId}>\n <SheetProviderImpl model={model} attendableId={attendableId} onInfo={onInfo} ignoreAttention={ignoreAttention}>\n {children}\n </SheetProviderImpl>\n </Grid.Root>\n );\n};\n\nconst SheetProviderImpl = ({\n __gridScope,\n children,\n attendableId,\n ignoreAttention,\n model,\n onInfo,\n}: GridScopedProps<\n PropsWithChildren<Pick<SheetContextValue, 'attendableId' | 'ignoreAttention' | 'model' | 'onInfo'>>\n>) => {\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 attendableId,\n model,\n editing,\n setEditing,\n cursor,\n setCursor,\n range,\n setRange,\n cursorFallbackRange,\n activeRefs,\n setActiveRefs,\n ignoreAttention,\n // TODO(burdon): Change to event.\n onInfo,\n }}\n >\n {children}\n </SheetContext.Provider>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Event } from '@dxos/async';\nimport {\n type CellAddress,\n type CellRange,\n type CellScalarValue,\n type ComputeGraph,\n type ComputeNode,\n type ComputeNodeEvent,\n DetailedCellError,\n ExportedCellChange,\n type SimpleCellAddress,\n type SimpleCellRange,\n type SimpleDate,\n type SimpleDateTime,\n addressFromA1Notation,\n addressToA1Notation,\n createSheetName,\n isFormula,\n} from '@dxos/compute-hyperformula';\nimport { Resource } from '@dxos/context';\nimport { Obj } from '@dxos/echo';\nimport { Format, TypeEnum } from '@dxos/echo/Format';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\n\nimport {\n MAX_COLS,\n MAX_ROWS,\n ReadonlyException,\n addressFromIndex,\n addressToIndex,\n initialize,\n insertIndices,\n mapFormulaIndicesToRefs,\n mapFormulaRefsToIndices,\n} from '#types';\nimport { type Sheet, type SheetAction } from '#types';\n\n// TODO(burdon): Move to compute.\n// Map sheet types to system types.\n// https://hyperformula.handsontable.com/guide/types-of-values.html\n// - https://github.com/handsontable/hyperformula/blob/master/src/Cell.ts (CellValueType)\n// - https://github.com/handsontable/hyperformula/blob/master/src/interpreter/InterpreterValue.ts (NumberType)\nconst typeMap: Record<string, { type: TypeEnum; format?: Format.TypeFormat }> = {\n BOOLEAN: { type: TypeEnum.Boolean },\n NUMBER_RAW: { type: TypeEnum.Number },\n NUMBER_PERCENT: { type: TypeEnum.Number, format: Format.TypeFormat.Percent },\n NUMBER_CURRENCY: { type: TypeEnum.Number, format: Format.TypeFormat.Currency },\n NUMBER_DATETIME: { type: TypeEnum.String, format: Format.TypeFormat.DateTime },\n NUMBER_DATE: { type: TypeEnum.String, format: Format.TypeFormat.Date },\n NUMBER_TIME: { type: TypeEnum.String, format: Format.TypeFormat.Time },\n};\n\nconst getTopLeft = (range: CellRange): CellAddress => {\n const to = range.to ?? range.from;\n return { row: Math.min(range.from.row, to.row), col: Math.min(range.from.col, to.col) };\n};\n\nconst toSimpleCellAddress = (sheet: number, cell: CellAddress): SimpleCellAddress => ({\n sheet,\n row: cell.row,\n col: cell.col,\n});\n\nconst toModelRange = (sheet: number, range: CellRange): SimpleCellRange => ({\n start: toSimpleCellAddress(sheet, range.from),\n end: toSimpleCellAddress(sheet, range.to ?? range.from),\n});\n\nexport type SheetModelOptions = {\n readonly?: boolean;\n};\n\n/**\n * Spreadsheet data model.\n *\n * [ComputeGraphContext] > [SheetContext]:[SheetModel] > [Sheet.Root]\n */\n// TODO(burdon): Factor out commonality with ComputeNode. Factor out HF.\nexport class SheetModel extends Resource {\n public readonly id = `model-${PublicKey.random().truncate()}`;\n\n // Wraps compute node.\n public readonly update = new Event<ComputeNodeEvent>();\n\n private _node?: ComputeNode;\n\n constructor(\n private readonly _graph: ComputeGraph,\n private readonly _sheet: Sheet.Sheet,\n private readonly _options: SheetModelOptions = {},\n ) {\n super();\n }\n\n get graph() {\n return this._graph;\n }\n\n get sheet() {\n return this._sheet;\n }\n\n get readonly() {\n return this._options.readonly;\n }\n\n get bounds() {\n return {\n rows: this._sheet.rows.length,\n columns: this._sheet.columns.length,\n };\n }\n\n /**\n * Initialize sheet and engine.\n */\n protected override async _open(): Promise<void> {\n log('initialize', { id: this.id });\n Obj.update(this._sheet, (obj) => {\n initialize(obj);\n });\n\n this._graph.update.on((event) => {\n if (event.type === 'functionsUpdated') {\n this.reset();\n }\n });\n\n // TODO(burdon): SheetModel should extend ComputeNode and be constructed via the graph.\n this._node = this._graph.getOrCreateNode(\n createSheetName({ type: Obj.getTypename(this._sheet)!, id: this._sheet.id }),\n );\n await this._node.open();\n\n // Listen for model updates (e.g., async calculations).\n const unsubscribe = this._node.update.on((event) => this.update.emit(event));\n this._ctx.onDispose(unsubscribe);\n\n this.reset();\n }\n\n /**\n * Update engine.\n * NOTE: This resets the undo history.\n * @deprecated\n */\n reset(): void {\n invariant(this._node);\n this._node.graph.hf.clearSheet(this._node.sheetId);\n Object.entries(this._sheet.cells).forEach(([key, { value }]) => {\n invariant(this._node);\n const { col, row } = addressFromIndex(this._sheet, key);\n if (isFormula(value)) {\n const binding = this._graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(this._sheet, value));\n if (binding) {\n value = this._graph.mapFormulaToNative(binding);\n } else {\n // If binding is not found, render the cell as empty.\n // This prevents the cell from momentarily rendering an error while the binding is being loaded.\n value = '';\n }\n }\n\n this._node.graph.hf.setCellContents({ sheet: this._node.sheetId, row, col }, value);\n });\n }\n\n /**\n * Recalculate formulas.\n * NOTE: This resets the undo history.\n * https://hyperformula.handsontable.com/guide/volatile-functions.html#volatile-actions\n * @deprecated\n */\n // TODO(burdon): Remove.\n recalculate(): void {\n this._node?.graph.hf.rebuildAndRecalculate();\n }\n\n insertRows(i: number, n = 1): string[] {\n let idx: string[] = [];\n Obj.update(this._sheet, (obj) => {\n idx = insertIndices(obj.rows, i, n, MAX_ROWS);\n });\n this.reset();\n return idx;\n }\n\n insertColumns(i: number, n = 1): string[] {\n let idx: string[] = [];\n Obj.update(this._sheet, (obj) => {\n idx = insertIndices(obj.columns, i, n, MAX_COLS);\n });\n this.reset();\n return idx;\n }\n\n dropRow(rowIndex: string): SheetAction.RestoreAxis {\n const range = {\n from: addressFromIndex(this._sheet, `${this._sheet.columns[0]}@${rowIndex}`),\n to: addressFromIndex(this._sheet, `${this._sheet.columns[this._sheet.columns.length - 1]}@${rowIndex}`),\n };\n const values = this.getCellValues(range).flat();\n const index = this._sheet.rows.indexOf(rowIndex);\n this.clear(range);\n Obj.update(this._sheet, (obj) => {\n obj.rows.splice(index, 1);\n delete obj.rowMeta[rowIndex];\n });\n this.reset();\n return { axis: 'row', index, axisIndex: rowIndex, axisMeta: this._sheet.rowMeta[rowIndex], values };\n }\n\n dropColumn(colIndex: string): SheetAction.RestoreAxis {\n const range = {\n from: addressFromIndex(this._sheet, `${colIndex}@${this._sheet.rows[0]}`),\n to: addressFromIndex(this._sheet, `${colIndex}@${this._sheet.rows[this._sheet.rows.length - 1]}`),\n };\n const values = this.getCellValues(range).flat();\n const index = this._sheet.columns.indexOf(colIndex);\n this.clear(range);\n Obj.update(this._sheet, (obj) => {\n obj.columns.splice(index, 1);\n delete obj.columnMeta[colIndex];\n });\n this.reset();\n return { axis: 'col', index, axisIndex: colIndex, axisMeta: this._sheet.rowMeta[colIndex], values };\n }\n\n restoreRow({ index, axisIndex, axisMeta, values }: SheetAction.RestoreAxis): void {\n Obj.update(this._sheet, (obj) => {\n obj.rows.splice(index, 0, axisIndex);\n values.forEach((value, col) => {\n if (value) {\n obj.cells[`${obj.columns[col]}@${axisIndex}`] = { value };\n }\n });\n\n if (axisMeta) {\n obj.rowMeta[axisIndex] = axisMeta;\n }\n });\n this.reset();\n }\n\n restoreColumn({ index, axisIndex, axisMeta, values }: SheetAction.RestoreAxis): void {\n Obj.update(this._sheet, (obj) => {\n obj.columns.splice(index, 0, axisIndex);\n values.forEach((value, row) => {\n if (value) {\n obj.cells[`${axisIndex}@${obj.rows[row]}`] = { value };\n }\n });\n\n if (axisMeta) {\n obj.columnMeta[axisIndex] = axisMeta;\n }\n });\n this.reset();\n }\n\n //\n // Undoable actions.\n // TODO(burdon): Group undoable methods; consistently update hf/sheet.\n //\n\n /**\n * Clear range of values.\n */\n clear(range: CellRange): void {\n invariant(this._node);\n const topLeft = getTopLeft(range);\n const values = this._iterRange(range, () => null);\n this._node.graph.hf.setCellContents(toSimpleCellAddress(this._node.sheetId, topLeft), values);\n Obj.update(this._sheet, (obj) => {\n this._iterRange(range, (cell) => {\n const idx = addressToIndex(this._sheet, cell);\n delete obj.cells[idx];\n });\n });\n }\n\n cut(range: CellRange): void {\n invariant(this._node);\n this._node.graph.hf.cut(toModelRange(this._node.sheetId, range));\n Obj.update(this._sheet, (obj) => {\n this._iterRange(range, (cell) => {\n const idx = addressToIndex(this._sheet, cell);\n delete obj.cells[idx];\n });\n });\n }\n\n copy(range: CellRange): void {\n invariant(this._node);\n this._node.graph.hf.copy(toModelRange(this._node.sheetId, range));\n }\n\n paste(cell: CellAddress): void {\n invariant(this._node);\n if (!this._node.graph.hf.isClipboardEmpty()) {\n const changes = this._node.graph.hf.paste(toSimpleCellAddress(this._node.sheetId, cell));\n Obj.update(this._sheet, (obj) => {\n for (const change of changes) {\n if (change instanceof ExportedCellChange) {\n const { address, newValue } = change;\n const idx = addressToIndex(this._sheet, { row: address.row, col: address.col });\n obj.cells[idx] = { value: newValue };\n }\n }\n });\n }\n }\n\n // TODO(burdon): Display undo/redo state.\n undo(): void {\n invariant(this._node);\n if (this._node.graph.hf.isThereSomethingToUndo()) {\n this._node.graph.hf.undo();\n // this.update.emit();\n }\n }\n\n redo(): void {\n invariant(this._node);\n if (this._node.graph.hf.isThereSomethingToRedo()) {\n this._node.graph.hf.redo();\n // this.update.emit();\n }\n }\n\n /**\n * Get value from sheet.\n */\n getCellValue(cell: CellAddress): CellScalarValue {\n const idx = addressToIndex(this._sheet, cell);\n return this._sheet.cells[idx]?.value ?? null;\n }\n\n /**\n * Get value as a string for editing.\n */\n getCellText(cell: CellAddress): string | undefined {\n const value = this.getCellValue(cell);\n if (value == null) {\n return undefined;\n }\n\n if (isFormula(value)) {\n return this._graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(this._sheet, value));\n } else {\n return String(value);\n }\n }\n\n /**\n * Get array of raw values from sheet.\n */\n getCellValues(range: CellRange): CellScalarValue[][] {\n return this._iterRange(range, (cell) => this.getCellValue(cell));\n }\n\n /**\n * Gets the regular or computed value from the engine.\n */\n getValue(cell: CellAddress): CellScalarValue {\n // Applies rounding and post-processing.\n invariant(this._node);\n const address = toSimpleCellAddress(this._node.sheetId, cell);\n const value = this._node.graph.hf.getCellValue(address);\n if (value instanceof DetailedCellError) {\n // TODO(wittjosiah): Error details should be shown in cell `title`.\n log.warn('cell error', { cell, error: value });\n return value.toString();\n }\n\n return value;\n }\n\n /**\n * Get value type.\n */\n getValueDescription(cell: CellAddress): { type: TypeEnum; format?: Format.TypeFormat } | undefined {\n invariant(this._node);\n const addr = toSimpleCellAddress(this._node.sheetId, cell);\n const type = this._node.graph.hf.getCellValueDetailedType(addr);\n return typeMap[type];\n }\n\n /**\n * Sets the value, updating the sheet and engine.\n */\n setValue(cell: CellAddress, value: CellScalarValue): void {\n invariant(this._node);\n if (this._options.readonly) {\n throw new ReadonlyException();\n }\n\n // Reallocate if > current bounds.\n let refresh = false;\n if (cell.row >= this._sheet.rows.length) {\n Obj.update(this._sheet, (obj) => {\n insertIndices(obj.rows, cell.row, 1, MAX_ROWS);\n });\n refresh = true;\n }\n if (cell.col >= this._sheet.columns.length) {\n Obj.update(this._sheet, (obj) => {\n insertIndices(obj.columns, cell.col, 1, MAX_COLS);\n });\n refresh = true;\n }\n\n if (refresh) {\n // TODO(burdon): Remove.\n this.reset();\n }\n\n // Insert into engine.\n this._node.graph.hf.setCellContents({ sheet: this._node.sheetId, row: cell.row, col: cell.col }, [\n [isFormula(value) ? this._graph.mapFormulaToNative(value) : value],\n ]);\n\n // Insert into sheet.\n const idx = addressToIndex(this._sheet, cell);\n if (value === undefined || value === null) {\n Obj.update(this._sheet, (obj) => {\n delete obj.cells[idx];\n });\n } else {\n if (isFormula(value)) {\n value = this._graph.mapFunctionBindingToId(mapFormulaRefsToIndices(this._sheet, value));\n }\n\n Obj.update(this._sheet, (obj) => {\n obj.cells[idx] = { value };\n });\n }\n }\n\n /**\n * Sets values from a simple map.\n */\n setValues(values: Record<string, Sheet.CellValue>): void {\n Object.entries(values).forEach(([key, { value }]) => {\n this.setValue(addressFromA1Notation(key), value);\n });\n }\n\n /**\n * Iterate range.\n */\n private _iterRange(range: CellRange, cb: (cell: CellAddress) => CellScalarValue | void): CellScalarValue[][] {\n const to = range.to ?? range.from;\n const rowRange = [Math.min(range.from.row, to.row), Math.max(range.from.row, to.row)];\n const columnRange = [Math.min(range.from.col, to.col), Math.max(range.from.col, to.col)];\n const rows: CellScalarValue[][] = [];\n for (let row = rowRange[0]; row <= rowRange[1]; row++) {\n const rowCells: CellScalarValue[] = [];\n for (let column = columnRange[0]; column <= columnRange[1]; column++) {\n const value = cb({ row, col: column });\n if (value !== undefined) {\n rowCells.push(value);\n }\n }\n\n rows.push(rowCells);\n }\n\n return rows;\n }\n\n // TODO(burdon): Delete index.\n private _deleteIndices(indices: string[], i: number, n: number): void {\n throw new Error('Not implemented');\n }\n\n // TODO(burdon): Move. Cannot use fractional without changing. Switch back to using unique IDs?\n private _moveIndices(indices: string[], i: number, j: number, n: number): void {\n throw new Error('Not implemented');\n }\n\n /**\n * Map from indices to A1 notation.\n */\n mapFormulaIndicesToRefs(formula: string): string {\n assertArgument(isFormula(formula), 'formula');\n return formula.replace(/([a-zA-Z0-9]+)@([a-zA-Z0-9]+)/g, (idx) => {\n return addressToA1Notation(addressFromIndex(this._sheet, idx));\n });\n }\n\n //\n // Values\n //\n\n /**\n * https://hyperformula.handsontable.com/guide/date-and-time-handling.html#example\n * https://hyperformula.handsontable.com/api/interfaces/configparams.html#nulldate\n * NOTE: TODAY() is number of FULL days since nullDate. It will typically be -1 days from NOW().\n */\n toLocalDate(num: number): Date {\n const { year, month, day, hours, minutes, seconds } = this.toDateTime(num);\n return new Date(year, month - 1, day, hours, minutes, seconds);\n }\n\n toDateTime(num: number): SimpleDateTime {\n invariant(this._node);\n return this._node.graph.hf.numberToDateTime(num) as SimpleDateTime;\n }\n\n toDate(num: number): SimpleDate {\n invariant(this._node);\n return this._node.graph.hf.numberToDate(num) as SimpleDate;\n }\n\n toTime(num: number): SimpleDate {\n invariant(this._node);\n return this._node.graph.hf.numberToTime(num) as SimpleDate;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type ComputeGraph } from '@dxos/compute-hyperformula';\n\nimport { type Sheet } from '#types';\n\nimport { SheetModel } from '../model';\n\nexport type UseSheetModelOptions = {\n readonly?: boolean;\n};\n\nexport const useSheetModel = (\n graph?: ComputeGraph,\n sheet?: Sheet.Sheet,\n { readonly }: UseSheetModelOptions = {},\n): SheetModel | undefined => {\n const [model, setModel] = useState<SheetModel>();\n useEffect(() => {\n if (!graph || !sheet) {\n return;\n }\n\n let model: SheetModel | undefined;\n const t = setTimeout(async () => {\n model = new SheetModel(graph, sheet, { readonly });\n await model.open();\n setModel(model);\n });\n\n return () => {\n clearTimeout(t);\n void model?.close();\n };\n }, [graph, sheet, readonly]);\n\n return model;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { inRange } from '@dxos/compute-hyperformula';\nimport { createDocAccessor } from '@dxos/echo-client';\nimport { cellClassesForFieldType, parseValue } from '@dxos/react-ui-form';\nimport {\n type DxGridAxisMeta,\n type DxGridCellValue,\n type DxGridElement,\n type DxGridPlane,\n type DxGridPlaneCells,\n type DxGridPlaneRange,\n type GridContentProps,\n colToA1Notation,\n commentedClassName,\n rowToA1Notation,\n} from '@dxos/react-ui-grid';\nimport { mx } from '@dxos/ui-theme';\n\nimport { cellClassNameForRange, rangeFromIndex } from '#types';\n\nimport { type SheetModel } from '../../model';\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] = {\n size: model.sheet.columnMeta[columnId].size,\n resizeable: true,\n };\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] = {\n size: model.sheet.rowMeta[rowId].size,\n resizeable: true,\n };\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) => Obj.getURI(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-axis-surface! text-axis-text text-end pe-1',\n resizeHandle: 'row',\n});\n\nexport const colLabelCell = (col: number) => ({\n value: colToA1Notation(col),\n className: 'bg-axis-surface! text-axis-text',\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-axis-surface!' },\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 React from 'react';\n\nimport { addressToA1Notation, isFormula, rangeToA1Notation } from '@dxos/compute-hyperformula';\nimport { Icon } from '@dxos/react-ui';\nimport { composable, composableProps } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { mapFormulaIndicesToRefs } from '#types';\n\nimport { useSheetContext } from '../SheetRoot';\n\nexport type SheetStatusbarProps = {};\n\nexport const SheetStatusbar = composable<HTMLDivElement, SheetStatusbarProps>((props, forwardedRef) => {\n const { className, ...rest } = composableProps(props);\n const { model, cursor, range } = useSheetContext();\n\n let value;\n let formula = false;\n if (cursor) {\n value = model.getCellValue(cursor);\n if (isFormula(value)) {\n value = model.graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(model.sheet, value));\n formula = true;\n } else if (value != null) {\n value = String(value);\n }\n }\n\n return (\n <div\n ref={forwardedRef}\n {...rest}\n className={mx(\n 'flex shrink-0 justify-between items-center px-4 py-1 text-sm bg-toolbar-surface border-y !border-subdued-separator',\n className,\n )}\n >\n <div className='flex gap-4 items-center'>\n <div className='flex w-16 items-center font-mono'>\n {(range && rangeToA1Notation(range)) || (cursor && addressToA1Notation(cursor))}\n </div>\n <div className='flex gap-2 items-center'>\n <Icon icon='ph--function--regular' classNames={['text-green-text', formula ? 'visible' : 'invisible']} />\n <span className='font-mono'>{value}</span>\n </div>\n </div>\n </div>\n );\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Atom, type Registry, RegistryContext } from '@effect-atom/atom-react';\nimport React, { useContext, useMemo } from 'react';\n\nimport { useAppGraph } from '@dxos/app-toolkit/ui';\nimport { type CompleteCellRange } from '@dxos/compute-hyperformula';\nimport { composable, composableProps } from '@dxos/react-ui';\nimport { type ActionGraphProps, Menu, createGapSeparator, useMenuActions } from '@dxos/react-ui-menu';\n\nimport { type SheetModel } from '../../model';\nimport { useSheetContext } from '../SheetRoot';\nimport { createAlign, useAlignState } from './align';\nimport { createStyle, useStyleState } from './style';\nimport { type ToolbarStateAtom, useToolbarState } from './useToolbarState';\n\ntype ToolbarActionsContext = {\n model: SheetModel;\n stateAtom: ToolbarStateAtom;\n registry: Registry.Registry;\n cursorFallbackRange?: CompleteCellRange;\n customActions?: Atom.Atom<ActionGraphProps>;\n};\n\nconst createToolbarActions = ({\n model,\n stateAtom,\n registry,\n cursorFallbackRange,\n customActions,\n}: ToolbarActionsContext): Atom.Atom<ActionGraphProps> => {\n return Atom.make((get) => {\n const state = get(stateAtom);\n const context = { model, state, stateAtom, registry, cursorFallbackRange };\n const align = createAlign(context);\n const style = createStyle(context);\n const gap = createGapSeparator();\n\n const graph: ActionGraphProps = {\n nodes: [...align.nodes, ...style.nodes, ...gap.nodes],\n edges: [...align.edges, ...style.edges, ...gap.edges],\n };\n\n if (customActions) {\n const custom = get(customActions);\n graph.nodes.push(...custom.nodes);\n graph.edges.push(...custom.edges);\n }\n\n return graph;\n });\n};\n\nexport type SheetToolbarProps = {};\n\nexport const SheetToolbar = composable<HTMLDivElement, SheetToolbarProps>((props, forwardedRef) => {\n const { attendableId, model, cursorFallbackRange } = useSheetContext();\n const stateAtom = useToolbarState({});\n const registry = useContext(RegistryContext);\n useAlignState(stateAtom);\n useStyleState(stateAtom);\n\n const { graph } = useAppGraph();\n const customActions = useMemo(() => {\n return Atom.make((get) => {\n const actions = get(graph.actions(attendableId));\n const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');\n return {\n nodes,\n edges: nodes.map((node) => ({ source: 'root', target: node.id, relation: 'child' })),\n };\n });\n }, [graph, attendableId]);\n\n const actionsCreator = useMemo(\n () => createToolbarActions({ model, stateAtom, registry, cursorFallbackRange, customActions }),\n [model, stateAtom, registry, cursorFallbackRange, customActions],\n );\n const menuActions = useMenuActions(actionsCreator);\n\n return (\n <Menu.Root {...menuActions} attendableId={attendableId}>\n <Menu.Toolbar {...composableProps(props)} ref={forwardedRef} />\n </Menu.Root>\n );\n});\n\nSheetToolbar.displayName = 'SheetToolbar';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Registry, RegistryContext } from '@effect-atom/atom-react';\nimport { useContext, useEffect } from 'react';\n\nimport { type CompleteCellRange, inRange } from '@dxos/compute-hyperformula';\nimport { Obj } from '@dxos/echo';\nimport {\n type ActionGraphProps,\n type ToolbarMenuActionGroupProperties,\n createMenuAction,\n createMenuItemGroup,\n} from '@dxos/react-ui-menu';\n\nimport { meta } from '#meta';\nimport { type AlignKey, type AlignValue, alignKey, rangeFromIndex, rangeToIndex } from '#types';\n\nimport { type SheetModel } from '../../model';\nimport { useSheetContext } from '../SheetRoot';\nimport { type ToolbarState, type ToolbarStateAtom } from './useToolbarState';\n\nexport type AlignAction = { key: AlignKey; value: AlignValue };\n\nexport type AlignState = { [alignKey]: AlignValue | undefined };\n\nconst aligns: Record<AlignValue, string> = {\n start: 'ph--text-align-left--regular',\n center: 'ph--text-align-center--regular',\n end: 'ph--text-align-right--regular',\n};\n\nexport const useAlignState = (stateAtom: ToolbarStateAtom) => {\n const registry = useContext(RegistryContext);\n const { cursor, model } = useSheetContext();\n useEffect(() => {\n // TODO(thure): Can this O(n) call be memoized?\n const alignValue = (\n cursor\n ? model.sheet.ranges?.findLast(\n ({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor),\n )?.value\n : undefined\n ) as AlignValue | undefined;\n const prev = registry.get(stateAtom);\n registry.set(stateAtom, { ...prev, [alignKey]: alignValue });\n }, [cursor, model.sheet, registry, stateAtom]);\n};\n\nconst createAlignGroupAction = (value?: AlignValue) =>\n createMenuItemGroup('align', {\n label: ['align.label', { ns: meta.profile.key }],\n variant: 'toggleGroup',\n selectCardinality: 'single',\n value: `${alignKey}--${value}`,\n } as ToolbarMenuActionGroupProperties);\n\ntype AlignActionsContext = {\n model: SheetModel;\n state: ToolbarState;\n stateAtom: ToolbarStateAtom;\n registry: Registry.Registry;\n cursorFallbackRange?: CompleteCellRange;\n};\n\nconst createAlignActions = ({ model, state, stateAtom, registry, cursorFallbackRange }: AlignActionsContext) =>\n Object.entries(aligns).map(([alignValue, icon]) => {\n return createMenuAction<AlignAction>(\n `${alignKey}--${alignValue}`,\n () => {\n if (!cursorFallbackRange) {\n return;\n }\n const index =\n model.sheet.ranges?.findIndex(\n (range) =>\n range.key === alignKey && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n ) ?? -1;\n const nextRangeEntity = {\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: alignKey,\n value: alignValue as AlignValue,\n };\n const currentState = registry.get(stateAtom);\n if (index < 0) {\n Obj.update(model.sheet, (obj) => {\n obj.ranges?.push(nextRangeEntity);\n });\n registry.set(stateAtom, { ...currentState, [alignKey]: nextRangeEntity.value });\n } else if (model.sheet.ranges![index].value === nextRangeEntity.value) {\n Obj.update(model.sheet, (obj) => {\n obj.ranges?.splice(index, 1);\n });\n registry.set(stateAtom, { ...currentState, [alignKey]: undefined });\n } else {\n Obj.update(model.sheet, (obj) => {\n obj.ranges?.splice(index, 1, nextRangeEntity);\n });\n registry.set(stateAtom, { ...currentState, [alignKey]: nextRangeEntity.value });\n }\n },\n {\n key: alignKey,\n value: alignValue as AlignValue,\n checked: state[alignKey] === alignValue,\n label: [`range-value.${alignValue}.label`, { ns: meta.profile.key }],\n icon,\n testId: `grid.toolbar.${alignKey}.${alignValue}`,\n },\n );\n });\n\nexport const createAlign = (context: AlignActionsContext): ActionGraphProps => {\n const alignGroup = createAlignGroupAction(context.state[alignKey]);\n const alignActions = createAlignActions(context);\n return {\n nodes: [alignGroup, ...alignActions],\n edges: [\n { source: 'root', target: 'align', relation: 'child' },\n ...alignActions.map(({ id }) => ({ source: alignGroup.id, target: id, relation: 'child' })),\n ],\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Registry, RegistryContext } from '@effect-atom/atom-react';\nimport { useContext, useEffect } from 'react';\n\nimport { type CompleteCellRange, inRange } from '@dxos/compute-hyperformula';\nimport { Obj } from '@dxos/echo';\nimport {\n type ActionGraphProps,\n type ToolbarMenuActionGroupProperties,\n createMenuAction,\n createMenuItemGroup,\n} from '@dxos/react-ui-menu';\n\nimport { meta } from '#meta';\nimport { type StyleKey, type StyleValue, rangeFromIndex, rangeToIndex } from '#types';\n\nimport { type SheetModel } from '../../model';\nimport { useSheetContext } from '../SheetRoot';\nimport { type ToolbarState, type ToolbarStateAtom } from './useToolbarState';\n\nexport type StyleState = Partial<Record<StyleValue, boolean>>;\n\nexport type StyleAction = { key: StyleKey; value: StyleValue };\n\nconst styles: Record<StyleValue, string> = {\n highlight: 'ph--highlighter--regular',\n softwrap: 'ph--paragraph--regular',\n};\n\nexport const useStyleState = (stateAtom: ToolbarStateAtom) => {\n const registry = useContext(RegistryContext);\n const { cursorFallbackRange, model } = useSheetContext();\n\n useEffect(() => {\n let highlight = false;\n let softwrap = false;\n if (cursorFallbackRange && model.sheet.ranges) {\n model.sheet.ranges\n .filter(\n ({ range, key }) => key === 'style' && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from),\n )\n .forEach(({ value }) => {\n if (value === 'highlight') {\n highlight = true;\n }\n if (value === 'softwrap') {\n softwrap = true;\n }\n });\n }\n const prev = registry.get(stateAtom);\n registry.set(stateAtom, { ...prev, highlight, softwrap });\n }, [cursorFallbackRange, model.sheet, registry, stateAtom]);\n};\n\nconst createStyleGroup = (state: StyleState) => {\n return createMenuItemGroup('style', {\n variant: 'toggleGroup',\n selectCardinality: 'multiple',\n value: Object.keys(styles)\n .filter((key) => !!state[key as StyleValue])\n .map((styleValue) => `style--${styleValue}`),\n } as ToolbarMenuActionGroupProperties);\n};\n\ntype StyleActionsContext = {\n model: SheetModel;\n state: ToolbarState;\n stateAtom: ToolbarStateAtom;\n registry: Registry.Registry;\n cursorFallbackRange?: CompleteCellRange;\n};\n\nconst createStyleActions = ({ model, state, stateAtom, registry, cursorFallbackRange }: StyleActionsContext) =>\n Object.entries(styles).map(([styleValue, icon]) => {\n return createMenuAction<StyleAction>(\n `style--${styleValue}`,\n () => {\n if (!cursorFallbackRange) {\n return;\n }\n const index =\n model.sheet.ranges?.findIndex(\n (range) =>\n range.key === 'style' && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n ) ?? -1;\n const nextRangeEntity = {\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: 'style',\n value: styleValue as StyleValue,\n };\n const currentState = registry.get(stateAtom);\n if (\n model.sheet.ranges\n .filter(\n ({ range, key: rangeKey }) =>\n rangeKey === 'style' && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from),\n )\n .some(({ value: rangeValue }) => rangeValue === styleValue)\n ) {\n // this value should be unset\n if (index >= 0) {\n Obj.update(model.sheet, (obj) => {\n obj.ranges?.splice(index, 1);\n });\n }\n registry.set(stateAtom, { ...currentState, [nextRangeEntity.value]: false });\n } else {\n Obj.update(model.sheet, (obj) => {\n obj.ranges?.push(nextRangeEntity);\n });\n registry.set(stateAtom, { ...currentState, [nextRangeEntity.value]: true });\n }\n },\n {\n key: 'style',\n value: styleValue as StyleValue,\n icon,\n label: [`range-value.${styleValue}.label`, { ns: meta.profile.key }],\n checked: !!state[styleValue as StyleValue],\n },\n );\n });\n\nexport const createStyle = (context: StyleActionsContext): ActionGraphProps => {\n const styleGroupAction = createStyleGroup(context.state);\n const styleActions = createStyleActions(context);\n return {\n nodes: [styleGroupAction, ...styleActions],\n edges: [\n { source: 'root', target: 'style', relation: 'child' },\n ...styleActions.map(({ id }) => ({ source: styleGroupAction.id, target: id, relation: 'child' })),\n ],\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom, type Registry, RegistryContext, useAtomValue } from '@effect-atom/atom-react';\nimport { useContext, useMemo } from 'react';\n\nimport { type AlignState } from './align';\nimport { type StyleState } from './style';\n\nexport type ToolbarState = Partial<StyleState & AlignState>;\nexport type ToolbarStateAtom = Atom.Writable<ToolbarState>;\n\n/**\n * Creates a reactive toolbar state Atom.\n */\nexport const useToolbarState = (initialState: ToolbarState = {}): ToolbarStateAtom => {\n return useMemo(() => Atom.make<ToolbarState>(initialState).pipe(Atom.keepAlive), []);\n};\n\n/**\n * Hook to read the current toolbar state value.\n */\nexport const useToolbarStateValue = (stateAtom: ToolbarStateAtom): ToolbarState => {\n return useAtomValue(stateAtom);\n};\n\n/**\n * Hook to get the registry for updating toolbar state.\n */\nexport const useToolbarStateRegistry = (): Registry.Registry => {\n return useContext(RegistryContext);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { SheetContent } from '../SheetContent';\nimport { SheetRoot } from '../SheetRoot';\nimport { SheetStatusbar } from '../SheetStatusbar';\nimport { SheetToolbar } from '../SheetToolbar';\n\nexport { useSheetContext, type SheetContextValue, type SheetRootProps } from '../SheetRoot';\nexport { type SheetContentProps } from '../SheetContent';\nexport { type SheetToolbarProps } from '../SheetToolbar';\nexport { type SheetStatusbarProps } from '../SheetStatusbar';\n\nexport const Sheet = {\n Root: SheetRoot,\n Toolbar: SheetToolbar,\n Content: SheetContent,\n Statusbar: SheetStatusbar,\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["React", "createContext", "useContext", "raise", "useAsyncState", "ComputeGraphContext", "undefined", "ComputeGraphContextProvider", "registry", "children", "Provider", "value", "useComputeGraph", "space", "Error", "graph", "getOrCreateGraph", "open", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "useCapabilities", "useOperationInvoker", "rangeToA1Notation", "Obj", "defaultColSize", "defaultRowSize", "DropdownMenu", "Icon", "useTranslation", "composable", "composableProps", "useAttention", "Grid", "GridCellEditor", "closestCell", "editorKeys", "parseCellIndex", "meta", "SheetOperation", "DEFAULT_COLS", "DEFAULT_ROWS", "SheetCapabilities", "React", "createContext", "useCallback", "useContext", "useState", "raise", "Grid", "useGridContext", "Event", "DetailedCellError", "ExportedCellChange", "addressFromA1Notation", "addressToA1Notation", "createSheetName", "isFormula", "Resource", "Obj", "Format", "TypeEnum", "assertArgument", "invariant", "PublicKey", "log", "MAX_COLS", "MAX_ROWS", "ReadonlyException", "addressFromIndex", "addressToIndex", "initialize", "insertIndices", "mapFormulaIndicesToRefs", "mapFormulaRefsToIndices", "NUMBER_RAW", "NUMBER_PERCENT", "NUMBER_CURRENCY", "NUMBER_DATETIME", "NUMBER_DATE", "NUMBER_TIME", "row", "Math", "range", "col", "toModelRange", "toSimpleCellAddress", "sheet", "id", "update", "_graph", "graph", "readonly", "bounds", "rows", "columns", "obj", "_sheet", "_node", "open", "unsubscribe", "reset", "Object", "entries", "cells", "forEach", "value", "key", "binding", "mapFunctionBindingFromId", "mapFormulaToNative", "insertRows", "n", "idx", "insertColumns", "dropRow", "rowIndex", "from", "to", "values", "getCellValues", "flat", "clear", "splice", "rowMeta", "axis", "index", "axisIndex", "axisMeta", "dropColumn", "columnMeta", "colIndex", "restoreRow", "restoreColumn", "topLeft", "_iterRange", "setCellContents", "cell", "copy", "paste", "changes", "sheetId", "change", "address", "newValue", "undo", "hf", "redo", "undefined", "String", "getCellValue", "error", "type", "getCellValueDetailedType", "addr", "typeMap", "_options", "refresh", "setValue", "rowRange", "min", "columnRange", "rowCells", "column", "cb", "_deleteIndices", "_moveIndices", "Date", "toDateTime", "num", "toDate", "toTime", "useEffect", "useState", "useSheetModel", "graph", "sheet", "readonly", "model", "setModel", "useState", "useEffect", "t", "setTimeout", "SheetModel", "open", "clearTimeout", "close", "SheetContext", "createContext", "undefined", "useSheetContext", "useContext", "raise", "Error", "SheetRoot", "children", "graph", "sheet", "attendableId", "readonly", "ignoreAttention", "onInfo", "model", "useSheetModel", "React", "Grid", "Root", "id", "SheetProviderImpl", "__gridScope", "editing", "setEditing", "useGridContext", "cursor", "setCursorInternal", "useState", "range", "setRangeInternal", "cursorFallbackRange", "setCursorFallbackRange", "activeRefs", "setActiveRefs", "setCursor", "useCallback", "nextCursor", "to", "from", "setRange", "nextRange", "Provider", "value", "useEffect", "useState", "inRange", "createDocAccessor", "cellClassesForFieldType", "parseValue", "colToA1Notation", "commentedClassName", "rowToA1Notation", "mx", "cellClassNameForRange", "rangeFromIndex", "createDxGridColumns", "model", "sheet", "columns", "reduce", "acc", "columnId", "numericIndex", "columnMeta", "size", "grid", "resizeable", "createDxGridRows", "rows", "rowId", "rowMeta", "projectCellProps", "col", "row", "address", "rawValue", "getValue", "ranges", "filter", "range", "threadRefs", "undefined", "description", "getValueDescription", "type", "format", "classNames", "map", "reverse", "value", "className", "dataRefs", "gridCellGetter", "cachedGridCells", "nextBounds", "Array", "end", "start", "forEach", "_", "c0", "r0", "rowLabelCell", "resizeHandle", "colLabelCell", "cellGetter", "getGridCells", "plane", "r", "c", "useSheetModelDxGridProps", "dxGrid", "setColumns", "setRows", "cellsAccessor", "getCells", "handleCellsUpdate", "requestUpdate", "handle", "addListener", "unsubscribe", "graph", "update", "on", "removeListener", "columnMetaAccessor", "rowMetaAccessor", "handleColumnMetaUpdate", "handleRowMetaUpdate", "inertPosition", "plane", "col", "row", "initialCells", "grid", "frozenColsStart", "Array", "reduce", "acc", "_", "i", "rowLabelCell", "frozenRowsStart", "colLabelCell", "frozen", "sheetColDefault", "size", "readonly", "focusUnfurl", "defaultColSize", "resizeable", "sheetRowDefault", "defaultRowSize", "SheetContent", "composable", "props", "forwardedRef", "t", "useTranslation", "meta", "profile", "key", "id", "attendableId", "model", "editing", "setCursor", "setRange", "cursor", "cursorFallbackRange", "activeRefs", "setActiveRefs", "ignoreAttention", "useSheetContext", "dxGrid", "setDxGrid", "useState", "extraplanarFocus", "setExtraplanarFocus", "invokePromise", "useOperationInvoker", "rangeController", "useRef", "hasAttention", "useAttention", "handleFocus", "useCallback", "event", "cell", "closestCell", "target", "handleClose", "_value", "shift", "axis", "includes", "undefined", "delta", "startsWith", "refocus", "handleBlur", "value", "setValue", "parseCellIndex", "index", "handleAxisResize", "numericIndex", "Obj", "update", "sheet", "rowId", "rows", "parseInt", "rowMeta", "columnId", "columns", "columnMeta", "handleSelect", "minCol", "maxCol", "minRow", "maxRow", "range", "from", "to", "current", "rangeToA1Notation", "handleWheel", "stopPropagation", "selectEntireAxis", "pos", "setSelection", "start", "end", "length", "handleClick", "handleKeyDown", "preventDefault", "clear", "metaKey", "ctrlKey", "cut", "copy", "paste", "shiftKey", "redo", "undo", "contextMenuAnchorRef", "contextMenuOpen", "setContextMenuOpen", "contextMenuAxis", "handleContextMenu", "handleAxisMenuAction", "operation", "SheetOperation", "InsertAxis", "DropAxis", "axisIndex", "useSheetModelDxGridProps", "extensions", "useMemo", "editorKeys", "onClose", "initialContent", "onNav", "sheetExtension", "functions", "graph", "getFunctions", "rangeExtension", "onInit", "fn", "onStateChange", "state", "mode", "activeRange", "getCellContent", "getCellText", "gridInstances", "useCapabilities", "SheetCapabilities", "GridInstances", "useEffect", "register", "unregister", "useSelectThreadOnCellFocus", "React", "div", "ref", "composableProps", "classNames", "GridCellEditor", "onBlur", "Grid", "Content", "className", "limitColumns", "DEFAULT_COLS", "limitRows", "DEFAULT_ROWS", "columnDefault", "rowDefault", "overscroll", "onAxisResize", "onSelect", "onFocus", "onWheelCapture", "onKeyDown", "onContextMenu", "onClick", "DropdownMenu", "Root", "modal", "open", "onOpenChange", "nextOpen", "VirtualTrigger", "virtualRef", "side", "sideOffset", "collisionPadding", "Viewport", "Item", "data-testid", "Icon", "icon", "span", "Arrow", "React", "addressToA1Notation", "isFormula", "rangeToA1Notation", "Icon", "composable", "composableProps", "mx", "mapFormulaIndicesToRefs", "SheetStatusbar", "composable", "props", "forwardedRef", "className", "rest", "composableProps", "model", "cursor", "range", "useSheetContext", "value", "formula", "getCellValue", "isFormula", "graph", "mapFunctionBindingFromId", "mapFormulaIndicesToRefs", "sheet", "String", "React", "div", "ref", "mx", "rangeToA1Notation", "addressToA1Notation", "Icon", "icon", "classNames", "span", "Atom", "RegistryContext", "React", "useContext", "useMemo", "useAppGraph", "composable", "composableProps", "Menu", "createGapSeparator", "useMenuActions", "RegistryContext", "useContext", "useEffect", "inRange", "Obj", "createMenuAction", "createMenuItemGroup", "meta", "alignKey", "rangeFromIndex", "rangeToIndex", "aligns", "start", "center", "end", "useAlignState", "stateAtom", "registry", "useContext", "RegistryContext", "cursor", "model", "useSheetContext", "useEffect", "alignValue", "sheet", "ranges", "findLast", "range", "key", "alignKey", "inRange", "rangeFromIndex", "value", "undefined", "prev", "get", "set", "createAlignGroupAction", "createMenuItemGroup", "label", "ns", "meta", "profile", "variant", "selectCardinality", "createAlignActions", "state", "cursorFallbackRange", "Object", "entries", "map", "icon", "createMenuAction", "index", "findIndex", "from", "nextRangeEntity", "rangeToIndex", "currentState", "Obj", "update", "obj", "push", "splice", "checked", "testId", "createAlign", "context", "alignGroup", "alignActions", "nodes", "edges", "source", "target", "relation", "id", "RegistryContext", "useContext", "useEffect", "inRange", "Obj", "createMenuAction", "createMenuItemGroup", "meta", "rangeFromIndex", "rangeToIndex", "styles", "highlight", "softwrap", "useStyleState", "stateAtom", "registry", "useContext", "RegistryContext", "cursorFallbackRange", "model", "useSheetContext", "useEffect", "sheet", "ranges", "filter", "range", "key", "inRange", "rangeFromIndex", "from", "forEach", "value", "prev", "get", "set", "createStyleGroup", "state", "createMenuItemGroup", "variant", "selectCardinality", "Object", "keys", "map", "styleValue", "createStyleActions", "entries", "icon", "createMenuAction", "index", "findIndex", "nextRangeEntity", "rangeToIndex", "currentState", "rangeKey", "some", "rangeValue", "Obj", "update", "obj", "splice", "push", "label", "ns", "meta", "profile", "checked", "createStyle", "context", "styleGroupAction", "styleActions", "nodes", "edges", "source", "target", "relation", "id", "Atom", "RegistryContext", "useAtomValue", "useContext", "useMemo", "useToolbarState", "initialState", "make", "pipe", "keepAlive", "createToolbarActions", "model", "stateAtom", "registry", "cursorFallbackRange", "customActions", "Atom", "make", "get", "state", "context", "align", "createAlign", "style", "createStyle", "gap", "createGapSeparator", "graph", "nodes", "edges", "custom", "push", "SheetToolbar", "composable", "props", "forwardedRef", "attendableId", "useSheetContext", "useToolbarState", "useContext", "RegistryContext", "useAlignState", "useStyleState", "useAppGraph", "useMemo", "actions", "filter", "action", "properties", "disposition", "map", "node", "source", "target", "id", "relation", "actionsCreator", "menuActions", "useMenuActions", "React", "Menu", "Root", "Toolbar", "composableProps", "ref", "displayName", "Sheet", "Root", "SheetRoot", "Toolbar", "SheetToolbar", "Content", "SheetContent", "Statusbar", "SheetStatusbar"]
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type PropsWithChildren, createContext, useContext } from 'react';\n\nimport { type ComputeGraph, type ComputeGraphRegistry } from '@dxos/compute-hyperformula';\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, {\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type WheelEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { useCapabilities, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { type CellRange, rangeToA1Notation } from '@dxos/compute-hyperformula';\nimport { Obj } from '@dxos/echo';\nimport { defaultColSize, defaultRowSize } from '@dxos/lit-grid';\nimport { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';\nimport { composable, composableProps } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport {\n type DxGridCellIndex,\n type DxGridElement,\n type DxGridPosition,\n type EditorBlurHandler,\n type EditorKeyHandler,\n Grid,\n GridCellEditor,\n type GridContentProps,\n closestCell,\n editorKeys,\n parseCellIndex,\n} from '@dxos/react-ui-grid';\n\nimport { meta } from '#meta';\nimport { SheetOperation } from '#types';\nimport { DEFAULT_COLS, DEFAULT_ROWS, SheetCapabilities } from '#types';\n\nimport { type RangeController, rangeExtension, sheetExtension } from '../../extensions';\nimport { useSelectThreadOnCellFocus } from '../../integrations';\nimport { useSheetContext } from '../SheetRoot';\nimport { colLabelCell, rowLabelCell, useSheetModelDxGridProps } from './util';\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, focusUnfurl: false },\n grid: { size: defaultColSize, resizeable: true },\n};\nconst sheetRowDefault = {\n frozenRowsStart: { size: defaultRowSize, readonly: true, focusUnfurl: false },\n grid: { size: defaultRowSize, resizeable: true },\n};\n\nexport type SheetContentProps = {};\n\nexport const SheetContent = composable<HTMLDivElement, SheetContentProps>((props, forwardedRef) => {\n const { t } = useTranslation(meta.profile.key);\n const {\n id,\n attendableId,\n model,\n editing,\n setCursor,\n setRange,\n cursor,\n cursorFallbackRange,\n activeRefs,\n setActiveRefs,\n ignoreAttention,\n } = useSheetContext();\n\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 { invokePromise } = useOperationInvoker();\n const rangeController = useRef<RangeController>(null);\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 Obj.update(model.sheet, (sheet) => {\n if (axis === 'row') {\n const rowId = sheet.rows[parseInt(numericIndex)];\n sheet.rowMeta[rowId] ??= {};\n sheet.rowMeta[rowId].size = size;\n } else {\n const columnId = sheet.columns[parseInt(numericIndex)];\n sheet.columnMeta[columnId] ??= {};\n sheet.columnMeta[columnId].size = size;\n }\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: {\n col: pos.col,\n row: model.sheet.rows.length - 1,\n plane: 'grid',\n },\n });\n case 'frozenColsStart':\n return dxGrid?.setSelection({\n start: { row: pos.row, col: 0, plane: 'grid' },\n end: {\n row: pos.row,\n col: model.sheet.columns.length - 1,\n plane: 'grid',\n },\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 invokePromise(SheetOperation.InsertAxis, {\n model,\n axis: contextMenuAxis,\n index: contextMenuOpen![contextMenuAxis] + (operation === 'insert-before' ? 0 : 1),\n });\n case 'drop':\n return invokePromise(SheetOperation.DropAxis, {\n model,\n axis: contextMenuAxis,\n axisIndex: model.sheet[contextMenuAxis === 'row' ? 'rows' : 'columns'][contextMenuOpen![contextMenuAxis]],\n });\n }\n },\n [contextMenuAxis, contextMenuOpen, model, invokePromise],\n );\n\n const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);\n\n const extensions = useMemo(\n () => [\n editorKeys({\n onClose: handleClose,\n ...(editing?.initialContent && { onNav: handleClose }),\n }),\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 const [gridInstances] = useCapabilities(SheetCapabilities.GridInstances);\n useEffect(() => {\n if (dxGrid && gridInstances) {\n gridInstances.register(attendableId, dxGrid, setActiveRefs);\n return () => gridInstances.unregister(attendableId);\n }\n }, [dxGrid, gridInstances, attendableId, setActiveRefs]);\n\n useSelectThreadOnCellFocus();\n\n return (\n <div ref={forwardedRef} {...composableProps(props, { classNames: 'relative min-h-0' })}>\n <GridCellEditor getCellContent={getCellContent} extensions={extensions} onBlur={handleBlur} />\n <Grid.Content\n className='[--dx-grid-base:var(--base-surface)] [&_.dx-grid]:absolute [&_.dx-grid]:inset-0'\n initialCells={initialCells}\n limitColumns={DEFAULT_COLS}\n limitRows={DEFAULT_ROWS}\n columns={columns}\n rows={rows}\n columnDefault={sheetColDefault}\n rowDefault={sheetRowDefault}\n activeRefs={activeRefs}\n frozen={frozen}\n overscroll='trap'\n onAxisResize={handleAxisResize}\n onSelect={handleSelect}\n onFocus={handleFocus}\n onWheelCapture={handleWheel}\n onKeyDown={handleKeyDown}\n onContextMenu={handleContextMenu}\n onClick={handleClick}\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 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 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 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 React, { type PropsWithChildren, createContext, useCallback, useContext, useState } from 'react';\n\nimport {\n type CellAddress,\n type CellRange,\n type CompleteCellRange,\n type ComputeGraph,\n} from '@dxos/compute-hyperformula';\nimport { raise } from '@dxos/debug';\nimport {\n Grid,\n type GridContentProps,\n type GridEditing,\n type GridScopedProps,\n useGridContext,\n} from '@dxos/react-ui-grid';\n\nimport { type Sheet } from '#types';\n\nimport { type SheetModel, useSheetModel } from '../../model';\n\nexport type SheetContextValue = {\n id: string;\n attendableId: string;\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 // Flags\n ignoreAttention?: boolean;\n\n // Events.\n // TODO(burdon): Generalize.\n onInfo?: () => void;\n};\n\n// TODO(burdon): Use radix context.\nconst SheetContext = createContext<SheetContextValue | undefined>(undefined);\n\nexport const useSheetContext = (): SheetContextValue => {\n return useContext(SheetContext) ?? raise(new Error('Missing SheetContext'));\n};\n\nexport type SheetRootProps = {\n graph: ComputeGraph;\n sheet: Sheet.Sheet;\n attendableId: string;\n readonly?: boolean;\n ignoreAttention?: boolean;\n} & Pick<SheetContextValue, 'onInfo'>;\n\nexport const SheetRoot = ({\n children,\n graph,\n sheet,\n attendableId,\n readonly,\n ignoreAttention,\n onInfo,\n}: PropsWithChildren<SheetRootProps>) => {\n const model = useSheetModel(graph, sheet, { readonly });\n if (!model) {\n return null;\n }\n\n return (\n <Grid.Root id={attendableId}>\n <SheetProviderImpl model={model} attendableId={attendableId} onInfo={onInfo} ignoreAttention={ignoreAttention}>\n {children}\n </SheetProviderImpl>\n </Grid.Root>\n );\n};\n\nconst SheetProviderImpl = ({\n __gridScope,\n children,\n attendableId,\n ignoreAttention,\n model,\n onInfo,\n}: GridScopedProps<\n PropsWithChildren<Pick<SheetContextValue, 'attendableId' | 'ignoreAttention' | 'model' | 'onInfo'>>\n>) => {\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 attendableId,\n model,\n editing,\n setEditing,\n cursor,\n setCursor,\n range,\n setRange,\n cursorFallbackRange,\n activeRefs,\n setActiveRefs,\n ignoreAttention,\n // TODO(burdon): Change to event.\n onInfo,\n }}\n >\n {children}\n </SheetContext.Provider>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Event } from '@dxos/async';\nimport {\n type CellAddress,\n type CellRange,\n type CellScalarValue,\n type ComputeGraph,\n type ComputeNode,\n type ComputeNodeEvent,\n DetailedCellError,\n ExportedCellChange,\n type SimpleCellAddress,\n type SimpleCellRange,\n type SimpleDate,\n type SimpleDateTime,\n addressFromA1Notation,\n addressToA1Notation,\n createSheetName,\n isFormula,\n} from '@dxos/compute-hyperformula';\nimport { Resource } from '@dxos/context';\nimport { Obj } from '@dxos/echo';\nimport { Format, TypeEnum } from '@dxos/echo/Format';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\n\nimport {\n MAX_COLS,\n MAX_ROWS,\n ReadonlyException,\n addressFromIndex,\n addressToIndex,\n initialize,\n insertIndices,\n mapFormulaIndicesToRefs,\n mapFormulaRefsToIndices,\n} from '#types';\nimport { type Sheet, type SheetAction } from '#types';\n\n// TODO(burdon): Move to compute.\n// Map sheet types to system types.\n// https://hyperformula.handsontable.com/guide/types-of-values.html\n// - https://github.com/handsontable/hyperformula/blob/master/src/Cell.ts (CellValueType)\n// - https://github.com/handsontable/hyperformula/blob/master/src/interpreter/InterpreterValue.ts (NumberType)\nconst typeMap: Record<string, { type: TypeEnum; format?: Format.TypeFormat }> = {\n BOOLEAN: { type: TypeEnum.Boolean },\n NUMBER_RAW: { type: TypeEnum.Number },\n NUMBER_PERCENT: { type: TypeEnum.Number, format: Format.TypeFormat.Percent },\n NUMBER_CURRENCY: { type: TypeEnum.Number, format: Format.TypeFormat.Currency },\n NUMBER_DATETIME: { type: TypeEnum.String, format: Format.TypeFormat.DateTime },\n NUMBER_DATE: { type: TypeEnum.String, format: Format.TypeFormat.Date },\n NUMBER_TIME: { type: TypeEnum.String, format: Format.TypeFormat.Time },\n};\n\nconst getTopLeft = (range: CellRange): CellAddress => {\n const to = range.to ?? range.from;\n return { row: Math.min(range.from.row, to.row), col: Math.min(range.from.col, to.col) };\n};\n\nconst toSimpleCellAddress = (sheet: number, cell: CellAddress): SimpleCellAddress => ({\n sheet,\n row: cell.row,\n col: cell.col,\n});\n\nconst toModelRange = (sheet: number, range: CellRange): SimpleCellRange => ({\n start: toSimpleCellAddress(sheet, range.from),\n end: toSimpleCellAddress(sheet, range.to ?? range.from),\n});\n\nexport type SheetModelOptions = {\n readonly?: boolean;\n};\n\n/**\n * Spreadsheet data model.\n *\n * [ComputeGraphContext] > [SheetContext]:[SheetModel] > [Sheet.Root]\n */\n// TODO(burdon): Factor out commonality with ComputeNode. Factor out HF.\nexport class SheetModel extends Resource {\n public readonly id = `model-${PublicKey.random().truncate()}`;\n\n // Wraps compute node.\n public readonly update = new Event<ComputeNodeEvent>();\n\n private _node?: ComputeNode;\n\n constructor(\n private readonly _graph: ComputeGraph,\n private readonly _sheet: Sheet.Sheet,\n private readonly _options: SheetModelOptions = {},\n ) {\n super();\n }\n\n get graph() {\n return this._graph;\n }\n\n get sheet() {\n return this._sheet;\n }\n\n get readonly() {\n return this._options.readonly;\n }\n\n get bounds() {\n return {\n rows: this._sheet.rows.length,\n columns: this._sheet.columns.length,\n };\n }\n\n /**\n * Initialize sheet and engine.\n */\n protected override async _open(): Promise<void> {\n log('initialize', { id: this.id });\n Obj.update(this._sheet, (obj) => {\n initialize(obj);\n });\n\n this._graph.update.on((event) => {\n if (event.type === 'functionsUpdated') {\n this.reset();\n }\n });\n\n // TODO(burdon): SheetModel should extend ComputeNode and be constructed via the graph.\n this._node = this._graph.getOrCreateNode(\n createSheetName({ type: Obj.getTypename(this._sheet)!, id: this._sheet.id }),\n );\n await this._node.open();\n\n // Listen for model updates (e.g., async calculations).\n const unsubscribe = this._node.update.on((event) => this.update.emit(event));\n this._ctx.onDispose(unsubscribe);\n\n this.reset();\n }\n\n /**\n * Update engine.\n * NOTE: This resets the undo history.\n * @deprecated\n */\n reset(): void {\n invariant(this._node);\n this._node.graph.hf.clearSheet(this._node.sheetId);\n Object.entries(this._sheet.cells).forEach(([key, { value }]) => {\n invariant(this._node);\n const { col, row } = addressFromIndex(this._sheet, key);\n if (isFormula(value)) {\n const binding = this._graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(this._sheet, value));\n if (binding) {\n value = this._graph.mapFormulaToNative(binding);\n } else {\n // If binding is not found, render the cell as empty.\n // This prevents the cell from momentarily rendering an error while the binding is being loaded.\n value = '';\n }\n }\n\n this._node.graph.hf.setCellContents({ sheet: this._node.sheetId, row, col }, value);\n });\n }\n\n /**\n * Recalculate formulas.\n * NOTE: This resets the undo history.\n * https://hyperformula.handsontable.com/guide/volatile-functions.html#volatile-actions\n * @deprecated\n */\n // TODO(burdon): Remove.\n recalculate(): void {\n this._node?.graph.hf.rebuildAndRecalculate();\n }\n\n insertRows(i: number, n = 1): string[] {\n let idx: string[] = [];\n Obj.update(this._sheet, (obj) => {\n idx = insertIndices(obj.rows, i, n, MAX_ROWS);\n });\n this.reset();\n return idx;\n }\n\n insertColumns(i: number, n = 1): string[] {\n let idx: string[] = [];\n Obj.update(this._sheet, (obj) => {\n idx = insertIndices(obj.columns, i, n, MAX_COLS);\n });\n this.reset();\n return idx;\n }\n\n dropRow(rowIndex: string): SheetAction.RestoreAxis {\n const range = {\n from: addressFromIndex(this._sheet, `${this._sheet.columns[0]}@${rowIndex}`),\n to: addressFromIndex(this._sheet, `${this._sheet.columns[this._sheet.columns.length - 1]}@${rowIndex}`),\n };\n const values = this.getCellValues(range).flat();\n const index = this._sheet.rows.indexOf(rowIndex);\n this.clear(range);\n Obj.update(this._sheet, (obj) => {\n obj.rows.splice(index, 1);\n delete obj.rowMeta[rowIndex];\n });\n this.reset();\n return { axis: 'row', index, axisIndex: rowIndex, axisMeta: this._sheet.rowMeta[rowIndex], values };\n }\n\n dropColumn(colIndex: string): SheetAction.RestoreAxis {\n const range = {\n from: addressFromIndex(this._sheet, `${colIndex}@${this._sheet.rows[0]}`),\n to: addressFromIndex(this._sheet, `${colIndex}@${this._sheet.rows[this._sheet.rows.length - 1]}`),\n };\n const values = this.getCellValues(range).flat();\n const index = this._sheet.columns.indexOf(colIndex);\n this.clear(range);\n Obj.update(this._sheet, (obj) => {\n obj.columns.splice(index, 1);\n delete obj.columnMeta[colIndex];\n });\n this.reset();\n return { axis: 'col', index, axisIndex: colIndex, axisMeta: this._sheet.rowMeta[colIndex], values };\n }\n\n restoreRow({ index, axisIndex, axisMeta, values }: SheetAction.RestoreAxis): void {\n Obj.update(this._sheet, (obj) => {\n obj.rows.splice(index, 0, axisIndex);\n values.forEach((value, col) => {\n if (value) {\n obj.cells[`${obj.columns[col]}@${axisIndex}`] = { value };\n }\n });\n\n if (axisMeta) {\n obj.rowMeta[axisIndex] = axisMeta;\n }\n });\n this.reset();\n }\n\n restoreColumn({ index, axisIndex, axisMeta, values }: SheetAction.RestoreAxis): void {\n Obj.update(this._sheet, (obj) => {\n obj.columns.splice(index, 0, axisIndex);\n values.forEach((value, row) => {\n if (value) {\n obj.cells[`${axisIndex}@${obj.rows[row]}`] = { value };\n }\n });\n\n if (axisMeta) {\n obj.columnMeta[axisIndex] = axisMeta;\n }\n });\n this.reset();\n }\n\n //\n // Undoable actions.\n // TODO(burdon): Group undoable methods; consistently update hf/sheet.\n //\n\n /**\n * Clear range of values.\n */\n clear(range: CellRange): void {\n invariant(this._node);\n const topLeft = getTopLeft(range);\n const values = this._iterRange(range, () => null);\n this._node.graph.hf.setCellContents(toSimpleCellAddress(this._node.sheetId, topLeft), values);\n Obj.update(this._sheet, (obj) => {\n this._iterRange(range, (cell) => {\n const idx = addressToIndex(this._sheet, cell);\n delete obj.cells[idx];\n });\n });\n }\n\n cut(range: CellRange): void {\n invariant(this._node);\n this._node.graph.hf.cut(toModelRange(this._node.sheetId, range));\n Obj.update(this._sheet, (obj) => {\n this._iterRange(range, (cell) => {\n const idx = addressToIndex(this._sheet, cell);\n delete obj.cells[idx];\n });\n });\n }\n\n copy(range: CellRange): void {\n invariant(this._node);\n this._node.graph.hf.copy(toModelRange(this._node.sheetId, range));\n }\n\n paste(cell: CellAddress): void {\n invariant(this._node);\n if (!this._node.graph.hf.isClipboardEmpty()) {\n const changes = this._node.graph.hf.paste(toSimpleCellAddress(this._node.sheetId, cell));\n Obj.update(this._sheet, (obj) => {\n for (const change of changes) {\n if (change instanceof ExportedCellChange) {\n const { address, newValue } = change;\n const idx = addressToIndex(this._sheet, { row: address.row, col: address.col });\n obj.cells[idx] = { value: newValue };\n }\n }\n });\n }\n }\n\n // TODO(burdon): Display undo/redo state.\n undo(): void {\n invariant(this._node);\n if (this._node.graph.hf.isThereSomethingToUndo()) {\n this._node.graph.hf.undo();\n // this.update.emit();\n }\n }\n\n redo(): void {\n invariant(this._node);\n if (this._node.graph.hf.isThereSomethingToRedo()) {\n this._node.graph.hf.redo();\n // this.update.emit();\n }\n }\n\n /**\n * Get value from sheet.\n */\n getCellValue(cell: CellAddress): CellScalarValue {\n const idx = addressToIndex(this._sheet, cell);\n return this._sheet.cells[idx]?.value ?? null;\n }\n\n /**\n * Get value as a string for editing.\n */\n getCellText(cell: CellAddress): string | undefined {\n const value = this.getCellValue(cell);\n if (value == null) {\n return undefined;\n }\n\n if (isFormula(value)) {\n return this._graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(this._sheet, value));\n } else {\n return String(value);\n }\n }\n\n /**\n * Get array of raw values from sheet.\n */\n getCellValues(range: CellRange): CellScalarValue[][] {\n return this._iterRange(range, (cell) => this.getCellValue(cell));\n }\n\n /**\n * Gets the regular or computed value from the engine.\n */\n getValue(cell: CellAddress): CellScalarValue {\n // Applies rounding and post-processing.\n invariant(this._node);\n const address = toSimpleCellAddress(this._node.sheetId, cell);\n const value = this._node.graph.hf.getCellValue(address);\n if (value instanceof DetailedCellError) {\n // TODO(wittjosiah): Error details should be shown in cell `title`.\n log.warn('cell error', { cell, error: value });\n return value.toString();\n }\n\n return value;\n }\n\n /**\n * Get value type.\n */\n getValueDescription(cell: CellAddress): { type: TypeEnum; format?: Format.TypeFormat } | undefined {\n invariant(this._node);\n const addr = toSimpleCellAddress(this._node.sheetId, cell);\n const type = this._node.graph.hf.getCellValueDetailedType(addr);\n return typeMap[type];\n }\n\n /**\n * Sets the value, updating the sheet and engine.\n */\n setValue(cell: CellAddress, value: CellScalarValue): void {\n invariant(this._node);\n if (this._options.readonly) {\n throw new ReadonlyException();\n }\n\n // Reallocate if > current bounds.\n let refresh = false;\n if (cell.row >= this._sheet.rows.length) {\n Obj.update(this._sheet, (obj) => {\n insertIndices(obj.rows, cell.row, 1, MAX_ROWS);\n });\n refresh = true;\n }\n if (cell.col >= this._sheet.columns.length) {\n Obj.update(this._sheet, (obj) => {\n insertIndices(obj.columns, cell.col, 1, MAX_COLS);\n });\n refresh = true;\n }\n\n if (refresh) {\n // TODO(burdon): Remove.\n this.reset();\n }\n\n // Insert into engine.\n this._node.graph.hf.setCellContents({ sheet: this._node.sheetId, row: cell.row, col: cell.col }, [\n [isFormula(value) ? this._graph.mapFormulaToNative(value) : value],\n ]);\n\n // Insert into sheet.\n const idx = addressToIndex(this._sheet, cell);\n if (value === undefined || value === null) {\n Obj.update(this._sheet, (obj) => {\n delete obj.cells[idx];\n });\n } else {\n if (isFormula(value)) {\n value = this._graph.mapFunctionBindingToId(mapFormulaRefsToIndices(this._sheet, value));\n }\n\n Obj.update(this._sheet, (obj) => {\n obj.cells[idx] = { value };\n });\n }\n }\n\n /**\n * Sets values from a simple map.\n */\n setValues(values: Record<string, Sheet.CellValue>): void {\n Object.entries(values).forEach(([key, { value }]) => {\n this.setValue(addressFromA1Notation(key), value);\n });\n }\n\n /**\n * Iterate range.\n */\n private _iterRange(range: CellRange, cb: (cell: CellAddress) => CellScalarValue | void): CellScalarValue[][] {\n const to = range.to ?? range.from;\n const rowRange = [Math.min(range.from.row, to.row), Math.max(range.from.row, to.row)];\n const columnRange = [Math.min(range.from.col, to.col), Math.max(range.from.col, to.col)];\n const rows: CellScalarValue[][] = [];\n for (let row = rowRange[0]; row <= rowRange[1]; row++) {\n const rowCells: CellScalarValue[] = [];\n for (let column = columnRange[0]; column <= columnRange[1]; column++) {\n const value = cb({ row, col: column });\n if (value !== undefined) {\n rowCells.push(value);\n }\n }\n\n rows.push(rowCells);\n }\n\n return rows;\n }\n\n // TODO(burdon): Delete index.\n private _deleteIndices(indices: string[], i: number, n: number): void {\n throw new Error('Not implemented');\n }\n\n // TODO(burdon): Move. Cannot use fractional without changing. Switch back to using unique IDs?\n private _moveIndices(indices: string[], i: number, j: number, n: number): void {\n throw new Error('Not implemented');\n }\n\n /**\n * Map from indices to A1 notation.\n */\n mapFormulaIndicesToRefs(formula: string): string {\n assertArgument(isFormula(formula), 'formula');\n return formula.replace(/([a-zA-Z0-9]+)@([a-zA-Z0-9]+)/g, (idx) => {\n return addressToA1Notation(addressFromIndex(this._sheet, idx));\n });\n }\n\n //\n // Values\n //\n\n /**\n * https://hyperformula.handsontable.com/guide/date-and-time-handling.html#example\n * https://hyperformula.handsontable.com/api/interfaces/configparams.html#nulldate\n * NOTE: TODAY() is number of FULL days since nullDate. It will typically be -1 days from NOW().\n */\n toLocalDate(num: number): Date {\n const { year, month, day, hours, minutes, seconds } = this.toDateTime(num);\n return new Date(year, month - 1, day, hours, minutes, seconds);\n }\n\n toDateTime(num: number): SimpleDateTime {\n invariant(this._node);\n return this._node.graph.hf.numberToDateTime(num) as SimpleDateTime;\n }\n\n toDate(num: number): SimpleDate {\n invariant(this._node);\n return this._node.graph.hf.numberToDate(num) as SimpleDate;\n }\n\n toTime(num: number): SimpleDate {\n invariant(this._node);\n return this._node.graph.hf.numberToTime(num) as SimpleDate;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type ComputeGraph } from '@dxos/compute-hyperformula';\n\nimport { type Sheet } from '#types';\n\nimport { SheetModel } from '../model';\n\nexport type UseSheetModelOptions = {\n readonly?: boolean;\n};\n\nexport const useSheetModel = (\n graph?: ComputeGraph,\n sheet?: Sheet.Sheet,\n { readonly }: UseSheetModelOptions = {},\n): SheetModel | undefined => {\n const [model, setModel] = useState<SheetModel>();\n useEffect(() => {\n if (!graph || !sheet) {\n return;\n }\n\n let model: SheetModel | undefined;\n const t = setTimeout(async () => {\n model = new SheetModel(graph, sheet, { readonly });\n await model.open();\n setModel(model);\n });\n\n return () => {\n clearTimeout(t);\n void model?.close();\n };\n }, [graph, sheet, readonly]);\n\n return model;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { inRange } from '@dxos/compute-hyperformula';\nimport { Doc } from '@dxos/echo-doc';\nimport { cellClassesForFieldType, parseValue } from '@dxos/react-ui-form';\nimport {\n type DxGridAxisMeta,\n type DxGridCellValue,\n type DxGridElement,\n type DxGridPlane,\n type DxGridPlaneCells,\n type DxGridPlaneRange,\n type GridContentProps,\n colToA1Notation,\n commentedClassName,\n rowToA1Notation,\n} from '@dxos/react-ui-grid';\nimport { mx } from '@dxos/ui-theme';\n\nimport { cellClassNameForRange, rangeFromIndex } from '#types';\n\nimport { type SheetModel } from '../../model';\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] = {\n size: model.sheet.columnMeta[columnId].size,\n resizeable: true,\n };\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] = {\n size: model.sheet.rowMeta[rowId].size,\n resizeable: true,\n };\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) => Obj.getURI(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-axis-surface! text-axis-text text-end pe-1',\n resizeHandle: 'row',\n});\n\nexport const colLabelCell = (col: number) => ({\n value: colToA1Notation(col),\n className: 'bg-axis-surface! text-axis-text',\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-axis-surface!' },\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 = Doc.createAccessor(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 = Doc.createAccessor(model.sheet, ['columnMeta']);\n const rowMetaAccessor = Doc.createAccessor(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 React from 'react';\n\nimport { addressToA1Notation, isFormula, rangeToA1Notation } from '@dxos/compute-hyperformula';\nimport { Icon } from '@dxos/react-ui';\nimport { composable, composableProps } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { mapFormulaIndicesToRefs } from '#types';\n\nimport { useSheetContext } from '../SheetRoot';\n\nexport type SheetStatusbarProps = {};\n\nexport const SheetStatusbar = composable<HTMLDivElement, SheetStatusbarProps>((props, forwardedRef) => {\n const { className, ...rest } = composableProps(props);\n const { model, cursor, range } = useSheetContext();\n\n let value;\n let formula = false;\n if (cursor) {\n value = model.getCellValue(cursor);\n if (isFormula(value)) {\n value = model.graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(model.sheet, value));\n formula = true;\n } else if (value != null) {\n value = String(value);\n }\n }\n\n return (\n <div\n ref={forwardedRef}\n {...rest}\n className={mx(\n 'flex shrink-0 justify-between items-center px-4 py-1 text-sm bg-toolbar-surface border-y !border-subdued-separator',\n className,\n )}\n >\n <div className='flex gap-4 items-center'>\n <div className='flex w-16 items-center font-mono'>\n {(range && rangeToA1Notation(range)) || (cursor && addressToA1Notation(cursor))}\n </div>\n <div className='flex gap-2 items-center'>\n <Icon icon='ph--function--regular' classNames={['text-green-text', formula ? 'visible' : 'invisible']} />\n <span className='font-mono'>{value}</span>\n </div>\n </div>\n </div>\n );\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Atom, type Registry, RegistryContext } from '@effect-atom/atom-react';\nimport React, { useContext, useMemo } from 'react';\n\nimport { useAppGraph } from '@dxos/app-toolkit/ui';\nimport { type CompleteCellRange } from '@dxos/compute-hyperformula';\nimport { composable, composableProps } from '@dxos/react-ui';\nimport { type ActionGraphProps, Menu, createGapSeparator, useMenuActions } from '@dxos/react-ui-menu';\n\nimport { type SheetModel } from '../../model';\nimport { useSheetContext } from '../SheetRoot';\nimport { createAlign, useAlignState } from './align';\nimport { createStyle, useStyleState } from './style';\nimport { type ToolbarStateAtom, useToolbarState } from './useToolbarState';\n\ntype ToolbarActionsContext = {\n model: SheetModel;\n stateAtom: ToolbarStateAtom;\n registry: Registry.Registry;\n cursorFallbackRange?: CompleteCellRange;\n customActions?: Atom.Atom<ActionGraphProps>;\n};\n\nconst createToolbarActions = ({\n model,\n stateAtom,\n registry,\n cursorFallbackRange,\n customActions,\n}: ToolbarActionsContext): Atom.Atom<ActionGraphProps> => {\n return Atom.make((get) => {\n const state = get(stateAtom);\n const context = { model, state, stateAtom, registry, cursorFallbackRange };\n const align = createAlign(context);\n const style = createStyle(context);\n const gap = createGapSeparator();\n\n const graph: ActionGraphProps = {\n nodes: [...align.nodes, ...style.nodes, ...gap.nodes],\n edges: [...align.edges, ...style.edges, ...gap.edges],\n };\n\n if (customActions) {\n const custom = get(customActions);\n graph.nodes.push(...custom.nodes);\n graph.edges.push(...custom.edges);\n }\n\n return graph;\n });\n};\n\nexport type SheetToolbarProps = {};\n\nexport const SheetToolbar = composable<HTMLDivElement, SheetToolbarProps>((props, forwardedRef) => {\n const { attendableId, model, cursorFallbackRange } = useSheetContext();\n const stateAtom = useToolbarState({});\n const registry = useContext(RegistryContext);\n useAlignState(stateAtom);\n useStyleState(stateAtom);\n\n const { graph } = useAppGraph();\n const customActions = useMemo(() => {\n return Atom.make((get) => {\n const actions = get(graph.actions(attendableId));\n const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');\n return {\n nodes,\n edges: nodes.map((node) => ({ source: 'root', target: node.id, relation: 'child' })),\n };\n });\n }, [graph, attendableId]);\n\n const actionsCreator = useMemo(\n () => createToolbarActions({ model, stateAtom, registry, cursorFallbackRange, customActions }),\n [model, stateAtom, registry, cursorFallbackRange, customActions],\n );\n const menuActions = useMenuActions(actionsCreator);\n\n return (\n <Menu.Root {...menuActions} attendableId={attendableId}>\n <Menu.Toolbar {...composableProps(props)} ref={forwardedRef} />\n </Menu.Root>\n );\n});\n\nSheetToolbar.displayName = 'SheetToolbar';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Registry, RegistryContext } from '@effect-atom/atom-react';\nimport { useContext, useEffect } from 'react';\n\nimport { type CompleteCellRange, inRange } from '@dxos/compute-hyperformula';\nimport { Obj } from '@dxos/echo';\nimport {\n type ActionGraphProps,\n type ToolbarMenuActionGroupProperties,\n createMenuAction,\n createMenuItemGroup,\n} from '@dxos/react-ui-menu';\n\nimport { meta } from '#meta';\nimport { type AlignKey, type AlignValue, alignKey, rangeFromIndex, rangeToIndex } from '#types';\n\nimport { type SheetModel } from '../../model';\nimport { useSheetContext } from '../SheetRoot';\nimport { type ToolbarState, type ToolbarStateAtom } from './useToolbarState';\n\nexport type AlignAction = { key: AlignKey; value: AlignValue };\n\nexport type AlignState = { [alignKey]: AlignValue | undefined };\n\nconst aligns: Record<AlignValue, string> = {\n start: 'ph--text-align-left--regular',\n center: 'ph--text-align-center--regular',\n end: 'ph--text-align-right--regular',\n};\n\nexport const useAlignState = (stateAtom: ToolbarStateAtom) => {\n const registry = useContext(RegistryContext);\n const { cursor, model } = useSheetContext();\n useEffect(() => {\n // TODO(thure): Can this O(n) call be memoized?\n const alignValue = (\n cursor\n ? model.sheet.ranges?.findLast(\n ({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor),\n )?.value\n : undefined\n ) as AlignValue | undefined;\n const prev = registry.get(stateAtom);\n registry.set(stateAtom, { ...prev, [alignKey]: alignValue });\n }, [cursor, model.sheet, registry, stateAtom]);\n};\n\nconst createAlignGroupAction = (value?: AlignValue) =>\n createMenuItemGroup('align', {\n label: ['align.label', { ns: meta.profile.key }],\n variant: 'toggleGroup',\n selectCardinality: 'single',\n value: `${alignKey}--${value}`,\n } as ToolbarMenuActionGroupProperties);\n\ntype AlignActionsContext = {\n model: SheetModel;\n state: ToolbarState;\n stateAtom: ToolbarStateAtom;\n registry: Registry.Registry;\n cursorFallbackRange?: CompleteCellRange;\n};\n\nconst createAlignActions = ({ model, state, stateAtom, registry, cursorFallbackRange }: AlignActionsContext) =>\n Object.entries(aligns).map(([alignValue, icon]) => {\n return createMenuAction<AlignAction>(\n `${alignKey}--${alignValue}`,\n () => {\n if (!cursorFallbackRange) {\n return;\n }\n const index =\n model.sheet.ranges?.findIndex(\n (range) =>\n range.key === alignKey && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n ) ?? -1;\n const nextRangeEntity = {\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: alignKey,\n value: alignValue as AlignValue,\n };\n const currentState = registry.get(stateAtom);\n if (index < 0) {\n Obj.update(model.sheet, (obj) => {\n obj.ranges?.push(nextRangeEntity);\n });\n registry.set(stateAtom, { ...currentState, [alignKey]: nextRangeEntity.value });\n } else if (model.sheet.ranges![index].value === nextRangeEntity.value) {\n Obj.update(model.sheet, (obj) => {\n obj.ranges?.splice(index, 1);\n });\n registry.set(stateAtom, { ...currentState, [alignKey]: undefined });\n } else {\n Obj.update(model.sheet, (obj) => {\n obj.ranges?.splice(index, 1, nextRangeEntity);\n });\n registry.set(stateAtom, { ...currentState, [alignKey]: nextRangeEntity.value });\n }\n },\n {\n key: alignKey,\n value: alignValue as AlignValue,\n checked: state[alignKey] === alignValue,\n label: [`range-value.${alignValue}.label`, { ns: meta.profile.key }],\n icon,\n testId: `grid.toolbar.${alignKey}.${alignValue}`,\n },\n );\n });\n\nexport const createAlign = (context: AlignActionsContext): ActionGraphProps => {\n const alignGroup = createAlignGroupAction(context.state[alignKey]);\n const alignActions = createAlignActions(context);\n return {\n nodes: [alignGroup, ...alignActions],\n edges: [\n { source: 'root', target: 'align', relation: 'child' },\n ...alignActions.map(({ id }) => ({ source: alignGroup.id, target: id, relation: 'child' })),\n ],\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Registry, RegistryContext } from '@effect-atom/atom-react';\nimport { useContext, useEffect } from 'react';\n\nimport { type CompleteCellRange, inRange } from '@dxos/compute-hyperformula';\nimport { Obj } from '@dxos/echo';\nimport {\n type ActionGraphProps,\n type ToolbarMenuActionGroupProperties,\n createMenuAction,\n createMenuItemGroup,\n} from '@dxos/react-ui-menu';\n\nimport { meta } from '#meta';\nimport { type StyleKey, type StyleValue, rangeFromIndex, rangeToIndex } from '#types';\n\nimport { type SheetModel } from '../../model';\nimport { useSheetContext } from '../SheetRoot';\nimport { type ToolbarState, type ToolbarStateAtom } from './useToolbarState';\n\nexport type StyleState = Partial<Record<StyleValue, boolean>>;\n\nexport type StyleAction = { key: StyleKey; value: StyleValue };\n\nconst styles: Record<StyleValue, string> = {\n highlight: 'ph--highlighter--regular',\n softwrap: 'ph--paragraph--regular',\n};\n\nexport const useStyleState = (stateAtom: ToolbarStateAtom) => {\n const registry = useContext(RegistryContext);\n const { cursorFallbackRange, model } = useSheetContext();\n\n useEffect(() => {\n let highlight = false;\n let softwrap = false;\n if (cursorFallbackRange && model.sheet.ranges) {\n model.sheet.ranges\n .filter(\n ({ range, key }) => key === 'style' && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from),\n )\n .forEach(({ value }) => {\n if (value === 'highlight') {\n highlight = true;\n }\n if (value === 'softwrap') {\n softwrap = true;\n }\n });\n }\n const prev = registry.get(stateAtom);\n registry.set(stateAtom, { ...prev, highlight, softwrap });\n }, [cursorFallbackRange, model.sheet, registry, stateAtom]);\n};\n\nconst createStyleGroup = (state: StyleState) => {\n return createMenuItemGroup('style', {\n variant: 'toggleGroup',\n selectCardinality: 'multiple',\n value: Object.keys(styles)\n .filter((key) => !!state[key as StyleValue])\n .map((styleValue) => `style--${styleValue}`),\n } as ToolbarMenuActionGroupProperties);\n};\n\ntype StyleActionsContext = {\n model: SheetModel;\n state: ToolbarState;\n stateAtom: ToolbarStateAtom;\n registry: Registry.Registry;\n cursorFallbackRange?: CompleteCellRange;\n};\n\nconst createStyleActions = ({ model, state, stateAtom, registry, cursorFallbackRange }: StyleActionsContext) =>\n Object.entries(styles).map(([styleValue, icon]) => {\n return createMenuAction<StyleAction>(\n `style--${styleValue}`,\n () => {\n if (!cursorFallbackRange) {\n return;\n }\n const index =\n model.sheet.ranges?.findIndex(\n (range) =>\n range.key === 'style' && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n ) ?? -1;\n const nextRangeEntity = {\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: 'style',\n value: styleValue as StyleValue,\n };\n const currentState = registry.get(stateAtom);\n if (\n model.sheet.ranges\n .filter(\n ({ range, key: rangeKey }) =>\n rangeKey === 'style' && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from),\n )\n .some(({ value: rangeValue }) => rangeValue === styleValue)\n ) {\n // this value should be unset\n if (index >= 0) {\n Obj.update(model.sheet, (obj) => {\n obj.ranges?.splice(index, 1);\n });\n }\n registry.set(stateAtom, { ...currentState, [nextRangeEntity.value]: false });\n } else {\n Obj.update(model.sheet, (obj) => {\n obj.ranges?.push(nextRangeEntity);\n });\n registry.set(stateAtom, { ...currentState, [nextRangeEntity.value]: true });\n }\n },\n {\n key: 'style',\n value: styleValue as StyleValue,\n icon,\n label: [`range-value.${styleValue}.label`, { ns: meta.profile.key }],\n checked: !!state[styleValue as StyleValue],\n },\n );\n });\n\nexport const createStyle = (context: StyleActionsContext): ActionGraphProps => {\n const styleGroupAction = createStyleGroup(context.state);\n const styleActions = createStyleActions(context);\n return {\n nodes: [styleGroupAction, ...styleActions],\n edges: [\n { source: 'root', target: 'style', relation: 'child' },\n ...styleActions.map(({ id }) => ({ source: styleGroupAction.id, target: id, relation: 'child' })),\n ],\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom, type Registry, RegistryContext, useAtomValue } from '@effect-atom/atom-react';\nimport { useContext, useMemo } from 'react';\n\nimport { type AlignState } from './align';\nimport { type StyleState } from './style';\n\nexport type ToolbarState = Partial<StyleState & AlignState>;\nexport type ToolbarStateAtom = Atom.Writable<ToolbarState>;\n\n/**\n * Creates a reactive toolbar state Atom.\n */\nexport const useToolbarState = (initialState: ToolbarState = {}): ToolbarStateAtom => {\n return useMemo(() => Atom.make<ToolbarState>(initialState).pipe(Atom.keepAlive), []);\n};\n\n/**\n * Hook to read the current toolbar state value.\n */\nexport const useToolbarStateValue = (stateAtom: ToolbarStateAtom): ToolbarState => {\n return useAtomValue(stateAtom);\n};\n\n/**\n * Hook to get the registry for updating toolbar state.\n */\nexport const useToolbarStateRegistry = (): Registry.Registry => {\n return useContext(RegistryContext);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { SheetContent } from '../SheetContent';\nimport { SheetRoot } from '../SheetRoot';\nimport { SheetStatusbar } from '../SheetStatusbar';\nimport { SheetToolbar } from '../SheetToolbar';\n\nexport { type SheetContextValue, type SheetRootProps, useSheetContext } from '../SheetRoot';\nexport { type SheetContentProps } from '../SheetContent';\nexport { type SheetToolbarProps } from '../SheetToolbar';\nexport { type SheetStatusbarProps } from '../SheetStatusbar';\n\nexport const Sheet = {\n Root: SheetRoot,\n Toolbar: SheetToolbar,\n Content: SheetContent,\n Statusbar: SheetStatusbar,\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "createContext", "useContext", "raise", "useAsyncState", "ComputeGraphContext", "undefined", "ComputeGraphContextProvider", "registry", "children", "Provider", "value", "useComputeGraph", "space", "Error", "graph", "getOrCreateGraph", "open", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "useCapabilities", "useOperationInvoker", "rangeToA1Notation", "Obj", "defaultColSize", "defaultRowSize", "DropdownMenu", "Icon", "useTranslation", "composable", "composableProps", "useAttention", "Grid", "GridCellEditor", "closestCell", "editorKeys", "parseCellIndex", "meta", "SheetOperation", "DEFAULT_COLS", "DEFAULT_ROWS", "SheetCapabilities", "React", "createContext", "useCallback", "useContext", "useState", "raise", "Grid", "useGridContext", "Event", "DetailedCellError", "ExportedCellChange", "addressFromA1Notation", "addressToA1Notation", "createSheetName", "isFormula", "Resource", "Obj", "Format", "TypeEnum", "assertArgument", "invariant", "PublicKey", "log", "MAX_COLS", "MAX_ROWS", "ReadonlyException", "addressFromIndex", "addressToIndex", "initialize", "insertIndices", "mapFormulaIndicesToRefs", "mapFormulaRefsToIndices", "NUMBER_RAW", "NUMBER_PERCENT", "NUMBER_CURRENCY", "NUMBER_DATETIME", "NUMBER_DATE", "NUMBER_TIME", "row", "Math", "range", "col", "toModelRange", "toSimpleCellAddress", "sheet", "id", "update", "_graph", "graph", "readonly", "bounds", "rows", "columns", "obj", "_sheet", "_node", "open", "unsubscribe", "reset", "Object", "entries", "cells", "forEach", "value", "key", "binding", "mapFunctionBindingFromId", "mapFormulaToNative", "insertRows", "n", "idx", "insertColumns", "dropRow", "rowIndex", "from", "to", "values", "getCellValues", "flat", "clear", "splice", "rowMeta", "axis", "index", "axisIndex", "axisMeta", "dropColumn", "columnMeta", "colIndex", "restoreRow", "restoreColumn", "topLeft", "_iterRange", "setCellContents", "cell", "copy", "paste", "changes", "sheetId", "change", "address", "newValue", "undo", "hf", "redo", "undefined", "String", "getCellValue", "error", "type", "getCellValueDetailedType", "addr", "typeMap", "_options", "refresh", "setValue", "rowRange", "min", "columnRange", "rowCells", "column", "cb", "_deleteIndices", "_moveIndices", "Date", "toDateTime", "num", "toDate", "toTime", "useEffect", "useState", "useSheetModel", "graph", "sheet", "readonly", "model", "setModel", "useState", "useEffect", "t", "setTimeout", "SheetModel", "open", "clearTimeout", "close", "SheetContext", "createContext", "undefined", "useSheetContext", "useContext", "raise", "Error", "SheetRoot", "children", "graph", "sheet", "attendableId", "readonly", "ignoreAttention", "onInfo", "model", "useSheetModel", "React", "Grid", "Root", "id", "SheetProviderImpl", "__gridScope", "editing", "setEditing", "useGridContext", "cursor", "setCursorInternal", "useState", "range", "setRangeInternal", "cursorFallbackRange", "setCursorFallbackRange", "activeRefs", "setActiveRefs", "setCursor", "useCallback", "nextCursor", "to", "from", "setRange", "nextRange", "Provider", "value", "useEffect", "useState", "inRange", "Doc", "cellClassesForFieldType", "parseValue", "colToA1Notation", "commentedClassName", "rowToA1Notation", "mx", "cellClassNameForRange", "rangeFromIndex", "createDxGridColumns", "model", "sheet", "columns", "reduce", "acc", "columnId", "numericIndex", "columnMeta", "size", "grid", "resizeable", "createDxGridRows", "rows", "rowId", "rowMeta", "projectCellProps", "col", "row", "address", "rawValue", "getValue", "ranges", "filter", "range", "threadRefs", "undefined", "description", "getValueDescription", "type", "format", "classNames", "map", "reverse", "value", "className", "dataRefs", "gridCellGetter", "cachedGridCells", "nextBounds", "Array", "end", "start", "forEach", "_", "c0", "r0", "rowLabelCell", "resizeHandle", "colLabelCell", "cellGetter", "getGridCells", "plane", "r", "c", "useSheetModelDxGridProps", "dxGrid", "setColumns", "setRows", "cellsAccessor", "createAccessor", "getCells", "handleCellsUpdate", "requestUpdate", "handle", "addListener", "unsubscribe", "graph", "update", "on", "removeListener", "columnMetaAccessor", "rowMetaAccessor", "handleColumnMetaUpdate", "handleRowMetaUpdate", "inertPosition", "plane", "col", "row", "initialCells", "grid", "frozenColsStart", "Array", "reduce", "acc", "_", "i", "rowLabelCell", "frozenRowsStart", "colLabelCell", "frozen", "sheetColDefault", "size", "readonly", "focusUnfurl", "defaultColSize", "resizeable", "sheetRowDefault", "defaultRowSize", "SheetContent", "composable", "props", "forwardedRef", "t", "useTranslation", "meta", "profile", "key", "id", "attendableId", "model", "editing", "setCursor", "setRange", "cursor", "cursorFallbackRange", "activeRefs", "setActiveRefs", "ignoreAttention", "useSheetContext", "dxGrid", "setDxGrid", "useState", "extraplanarFocus", "setExtraplanarFocus", "invokePromise", "useOperationInvoker", "rangeController", "useRef", "hasAttention", "useAttention", "handleFocus", "useCallback", "event", "cell", "closestCell", "target", "handleClose", "_value", "shift", "axis", "includes", "undefined", "delta", "startsWith", "refocus", "handleBlur", "value", "setValue", "parseCellIndex", "index", "handleAxisResize", "numericIndex", "Obj", "update", "sheet", "rowId", "rows", "parseInt", "rowMeta", "columnId", "columns", "columnMeta", "handleSelect", "minCol", "maxCol", "minRow", "maxRow", "range", "from", "to", "current", "rangeToA1Notation", "handleWheel", "stopPropagation", "selectEntireAxis", "pos", "setSelection", "start", "end", "length", "handleClick", "handleKeyDown", "preventDefault", "clear", "metaKey", "ctrlKey", "cut", "copy", "paste", "shiftKey", "redo", "undo", "contextMenuAnchorRef", "contextMenuOpen", "setContextMenuOpen", "contextMenuAxis", "handleContextMenu", "handleAxisMenuAction", "operation", "SheetOperation", "InsertAxis", "DropAxis", "axisIndex", "useSheetModelDxGridProps", "extensions", "useMemo", "editorKeys", "onClose", "initialContent", "onNav", "sheetExtension", "functions", "graph", "getFunctions", "rangeExtension", "onInit", "fn", "onStateChange", "state", "mode", "activeRange", "getCellContent", "getCellText", "gridInstances", "useCapabilities", "SheetCapabilities", "GridInstances", "useEffect", "register", "unregister", "useSelectThreadOnCellFocus", "React", "div", "ref", "composableProps", "classNames", "GridCellEditor", "onBlur", "Grid", "Content", "className", "limitColumns", "DEFAULT_COLS", "limitRows", "DEFAULT_ROWS", "columnDefault", "rowDefault", "overscroll", "onAxisResize", "onSelect", "onFocus", "onWheelCapture", "onKeyDown", "onContextMenu", "onClick", "DropdownMenu", "Root", "modal", "open", "onOpenChange", "nextOpen", "VirtualTrigger", "virtualRef", "side", "sideOffset", "collisionPadding", "Viewport", "Item", "data-testid", "Icon", "icon", "span", "Arrow", "React", "addressToA1Notation", "isFormula", "rangeToA1Notation", "Icon", "composable", "composableProps", "mx", "mapFormulaIndicesToRefs", "SheetStatusbar", "composable", "props", "forwardedRef", "className", "rest", "composableProps", "model", "cursor", "range", "useSheetContext", "value", "formula", "getCellValue", "isFormula", "graph", "mapFunctionBindingFromId", "mapFormulaIndicesToRefs", "sheet", "String", "React", "div", "ref", "mx", "rangeToA1Notation", "addressToA1Notation", "Icon", "icon", "classNames", "span", "Atom", "RegistryContext", "React", "useContext", "useMemo", "useAppGraph", "composable", "composableProps", "Menu", "createGapSeparator", "useMenuActions", "RegistryContext", "useContext", "useEffect", "inRange", "Obj", "createMenuAction", "createMenuItemGroup", "meta", "alignKey", "rangeFromIndex", "rangeToIndex", "aligns", "start", "center", "end", "useAlignState", "stateAtom", "registry", "useContext", "RegistryContext", "cursor", "model", "useSheetContext", "useEffect", "alignValue", "sheet", "ranges", "findLast", "range", "key", "alignKey", "inRange", "rangeFromIndex", "value", "undefined", "prev", "get", "set", "createAlignGroupAction", "createMenuItemGroup", "label", "ns", "meta", "profile", "variant", "selectCardinality", "createAlignActions", "state", "cursorFallbackRange", "Object", "entries", "map", "icon", "createMenuAction", "index", "findIndex", "from", "nextRangeEntity", "rangeToIndex", "currentState", "Obj", "update", "obj", "push", "splice", "checked", "testId", "createAlign", "context", "alignGroup", "alignActions", "nodes", "edges", "source", "target", "relation", "id", "RegistryContext", "useContext", "useEffect", "inRange", "Obj", "createMenuAction", "createMenuItemGroup", "meta", "rangeFromIndex", "rangeToIndex", "styles", "highlight", "softwrap", "useStyleState", "stateAtom", "registry", "useContext", "RegistryContext", "cursorFallbackRange", "model", "useSheetContext", "useEffect", "sheet", "ranges", "filter", "range", "key", "inRange", "rangeFromIndex", "from", "forEach", "value", "prev", "get", "set", "createStyleGroup", "state", "createMenuItemGroup", "variant", "selectCardinality", "Object", "keys", "map", "styleValue", "createStyleActions", "entries", "icon", "createMenuAction", "index", "findIndex", "nextRangeEntity", "rangeToIndex", "currentState", "rangeKey", "some", "rangeValue", "Obj", "update", "obj", "splice", "push", "label", "ns", "meta", "profile", "checked", "createStyle", "context", "styleGroupAction", "styleActions", "nodes", "edges", "source", "target", "relation", "id", "Atom", "RegistryContext", "useAtomValue", "useContext", "useMemo", "useToolbarState", "initialState", "make", "pipe", "keepAlive", "createToolbarActions", "model", "stateAtom", "registry", "cursorFallbackRange", "customActions", "Atom", "make", "get", "state", "context", "align", "createAlign", "style", "createStyle", "gap", "createGapSeparator", "graph", "nodes", "edges", "custom", "push", "SheetToolbar", "composable", "props", "forwardedRef", "attendableId", "useSheetContext", "useToolbarState", "useContext", "RegistryContext", "useAlignState", "useStyleState", "useAppGraph", "useMemo", "actions", "filter", "action", "properties", "disposition", "map", "node", "source", "target", "id", "relation", "actionsCreator", "menuActions", "useMenuActions", "React", "Menu", "Root", "Toolbar", "composableProps", "ref", "displayName", "Sheet", "Root", "SheetRoot", "Toolbar", "SheetToolbar", "Content", "SheetContent", "Statusbar", "SheetStatusbar"]
|
|
7
7
|
}
|
|
@@ -2,7 +2,7 @@ import "../chunk-J5LGTIGS.mjs";
|
|
|
2
2
|
|
|
3
3
|
// src/containers/index.ts
|
|
4
4
|
import { lazy } from "react";
|
|
5
|
-
var RangeList = lazy(() => import("../RangeList-
|
|
5
|
+
var RangeList = lazy(() => import("../RangeList-EIJTFS7P.mjs"));
|
|
6
6
|
var SheetArticle = lazy(() => import("../SheetArticle-IUPQYGUU.mjs"));
|
|
7
7
|
export {
|
|
8
8
|
RangeList,
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SheetOperation_exports,
|
|
3
|
+
Sheet_exports
|
|
4
|
+
} from "./chunk-HY4DM35G.mjs";
|
|
5
|
+
import "./chunk-J5LGTIGS.mjs";
|
|
6
|
+
|
|
7
|
+
// src/operations/create.ts
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import { CollectionModel } from "@dxos/app-toolkit";
|
|
10
|
+
import { Operation } from "@dxos/compute";
|
|
11
|
+
import { Database, Obj } from "@dxos/echo";
|
|
12
|
+
var handler = SheetOperation_exports.Create.pipe(Operation.withHandler(Effect.fn(function* ({ name, rows, columns }) {
|
|
13
|
+
const object = yield* Database.add(Sheet_exports.make({
|
|
14
|
+
name,
|
|
15
|
+
rows,
|
|
16
|
+
columns
|
|
17
|
+
}));
|
|
18
|
+
yield* CollectionModel.add({
|
|
19
|
+
object
|
|
20
|
+
}).pipe(Effect.catchTag("EntityNotFoundError", () => Effect.void));
|
|
21
|
+
yield* Database.flush();
|
|
22
|
+
return {
|
|
23
|
+
id: Obj.getURI(object)
|
|
24
|
+
};
|
|
25
|
+
})));
|
|
26
|
+
var create_default = handler;
|
|
27
|
+
export {
|
|
28
|
+
create_default as default
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=create-I3TKMPQO.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/operations/create.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { CollectionModel } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\nimport { Database, Obj } from '@dxos/echo';\n\nimport { Sheet, SheetOperation } from '../types';\n\nconst handler: Operation.WithHandler<typeof SheetOperation.Create> = SheetOperation.Create.pipe(\n Operation.withHandler(\n Effect.fn(function* ({ name, rows, columns }) {\n const object = yield* Database.add(Sheet.make({ name, rows, columns }));\n yield* CollectionModel.add({ object }).pipe(Effect.catchTag('EntityNotFoundError', () => Effect.void));\n yield* Database.flush();\n return { id: Obj.getURI(object) };\n }),\n ),\n);\n\nexport default handler;\n"],
|
|
5
|
+
"mappings": ";;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,uBAAuB;AAChC,SAASC,iBAAiB;AAC1B,SAASC,UAAUC,WAAW;AAI9B,IAAMC,UAA+DC,uBAAeC,OAAOC,KACzFC,UAAUC,YACDC,UAAG,WAAW,EAAEC,MAAMC,MAAMC,QAAO,GAAE;AAC1C,QAAMC,SAAS,OAAOC,SAASC,IAAIC,cAAMC,KAAK;IAAEP;IAAMC;IAAMC;EAAQ,CAAA,CAAA;AACpE,SAAOM,gBAAgBH,IAAI;IAAEF;EAAO,CAAA,EAAGP,KAAYa,gBAAS,uBAAuB,MAAaC,WAAI,CAAA;AACpG,SAAON,SAASO,MAAK;AACrB,SAAO;IAAEC,IAAIC,IAAIC,OAAOX,MAAAA;EAAQ;AAClC,CAAA,CAAA,CAAA;AAIJ,IAAA,iBAAeV;",
|
|
6
|
+
"names": ["Effect", "CollectionModel", "Operation", "Database", "Obj", "handler", "SheetOperation", "Create", "pipe", "Operation", "withHandler", "fn", "name", "rows", "columns", "object", "Database", "add", "Sheet", "make", "CollectionModel", "catchTag", "void", "flush", "id", "Obj", "getURI"]
|
|
7
|
+
}
|