@dxos/plugin-sheet 0.7.2-main.f1adc9f → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/lib/browser/{SheetContainer-DBDIZU6U.mjs → SheetContainer-YAMIOFC6.mjs} +3 -4
  2. package/dist/lib/browser/{SheetContainer-DBDIZU6U.mjs.map → SheetContainer-YAMIOFC6.mjs.map} +3 -3
  3. package/dist/lib/browser/{chunk-IXA5HC36.mjs → chunk-QHQFM7LV.mjs} +22 -48
  4. package/dist/lib/browser/{chunk-IXA5HC36.mjs.map → chunk-QHQFM7LV.mjs.map} +4 -4
  5. package/dist/lib/browser/index.mjs +13 -8
  6. package/dist/lib/browser/index.mjs.map +3 -3
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/node/{SheetContainer-3373SORI.cjs → SheetContainer-BSDHHYXE.cjs} +15 -16
  9. package/dist/lib/node/{SheetContainer-3373SORI.cjs.map → SheetContainer-BSDHHYXE.cjs.map} +3 -3
  10. package/dist/lib/node/{chunk-TS6IBEPZ.cjs → chunk-J5ZFWMOD.cjs} +10 -34
  11. package/dist/lib/node/{chunk-TS6IBEPZ.cjs.map → chunk-J5ZFWMOD.cjs.map} +4 -4
  12. package/dist/lib/node/index.cjs +15 -10
  13. package/dist/lib/node/index.cjs.map +3 -3
  14. package/dist/lib/node/meta.json +1 -1
  15. package/dist/lib/node-esm/{SheetContainer-CH2RYBXJ.mjs → SheetContainer-T47T2NYJ.mjs} +3 -4
  16. package/dist/lib/node-esm/{SheetContainer-CH2RYBXJ.mjs.map → SheetContainer-T47T2NYJ.mjs.map} +3 -3
  17. package/dist/lib/node-esm/{chunk-7F3BRKP7.mjs → chunk-6GSTEN7N.mjs} +22 -48
  18. package/dist/lib/node-esm/{chunk-7F3BRKP7.mjs.map → chunk-6GSTEN7N.mjs.map} +4 -4
  19. package/dist/lib/node-esm/index.mjs +13 -8
  20. package/dist/lib/node-esm/index.mjs.map +3 -3
  21. package/dist/lib/node-esm/meta.json +1 -1
  22. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  23. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  24. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +0 -1
  25. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
  26. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts +0 -2
  27. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  28. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  29. package/dist/types/src/components/index.d.ts +0 -1
  30. package/dist/types/src/components/index.d.ts.map +1 -1
  31. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  32. package/package.json +37 -39
  33. package/src/SheetPlugin.tsx +13 -5
  34. package/src/components/GridSheet/GridSheet.stories.tsx +0 -2
  35. package/src/components/GridSheet/GridSheet.tsx +3 -12
  36. package/src/components/SheetContainer/SheetContainer.stories.tsx +2 -44
  37. package/src/components/Toolbar/Toolbar.tsx +1 -7
  38. package/src/components/index.ts +0 -1
  39. package/src/integrations/thread-ranges.ts +0 -2
  40. package/dist/types/src/components/SheetObjectSettings.d.ts +0 -7
  41. package/dist/types/src/components/SheetObjectSettings.d.ts.map +0 -1
  42. package/dist/types/src/testing/playwright/playwright.config.d.ts +0 -3
  43. package/dist/types/src/testing/playwright/playwright.config.d.ts.map +0 -1
  44. package/dist/types/src/testing/playwright/sheet-manager.d.ts +0 -24
  45. package/dist/types/src/testing/playwright/sheet-manager.d.ts.map +0 -1
  46. package/dist/types/src/testing/playwright/sheet.spec.d.ts +0 -2
  47. package/dist/types/src/testing/playwright/sheet.spec.d.ts.map +0 -1
  48. package/src/components/SheetObjectSettings.tsx +0 -38
  49. package/src/testing/playwright/playwright.config.ts +0 -18
  50. package/src/testing/playwright/sheet-manager.ts +0 -91
  51. package/src/testing/playwright/sheet.spec.ts +0 -78
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/SheetContainer/SheetContainer.tsx", "../../../src/components/FunctionEditor/FunctionEditor.tsx", "../../../src/components/Toolbar/Toolbar.tsx", "../../../src/components/SheetContainer/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { type SheetType } from '../../types';\nimport { useComputeGraph } from '../ComputeGraph';\nimport { FunctionEditor } from '../FunctionEditor';\nimport { GridSheet } from '../GridSheet';\nimport { SheetProvider } from '../SheetContext';\nimport { Toolbar } from '../Toolbar';\n\nexport const SheetContainer = ({\n space,\n sheet,\n role,\n ignoreAttention,\n}: {\n space: Space;\n sheet: SheetType;\n role?: string;\n ignoreAttention?: boolean;\n}) => {\n const graph = useComputeGraph(space);\n\n return graph ? (\n <SheetProvider sheet={sheet} graph={graph} ignoreAttention={ignoreAttention}>\n <StackItem.Content toolbar statusbar {...(role === 'section' && { classNames: 'aspect-video' })}>\n <Toolbar.Root role={role}>\n <Toolbar.Styles />\n <Toolbar.Alignment />\n <Toolbar.Separator />\n <Toolbar.Actions />\n </Toolbar.Root>\n <GridSheet />\n <FunctionEditor />\n </StackItem.Content>\n </SheetProvider>\n ) : null;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Icon } from '@dxos/react-ui';\n\nimport { addressToA1Notation, isFormula, rangeToA1Notation } from '../../defs';\nimport { useSheetContext } from '../SheetContext';\n\nexport const FunctionEditor = () => {\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(model.mapFormulaIndicesToRefs(value));\n formula = true;\n } else if (value != null) {\n value = String(value);\n }\n }\n\n return (\n <div className='flex shrink-0 justify-between items-center px-4 py-1 text-sm attention-surface border-bs !border-separator'>\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-greenText', 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 { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren, useCallback } from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport {\n Icon,\n type ThemedClassName,\n Toolbar as NaturalToolbar,\n type ToolbarButtonProps as NaturalToolbarButtonProps,\n type ToolbarToggleGroupItemProps as NaturalToolbarToggleGroupItemProps,\n type ToolbarToggleProps as NaturalToolbarToggleProps,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport { nonNullable } from '@dxos/util';\n\nimport {\n alignKey,\n type AlignKey,\n type AlignValue,\n type CommentKey,\n type CommentValue,\n inRange,\n rangeFromIndex,\n rangeToIndex,\n styleKey,\n type StyleKey,\n type StyleValue,\n} from '../../defs';\nimport { completeCellRangeToThreadCursor } from '../../integrations';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type SheetType } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\n//\n// Buttons\n//\n\nconst buttonStyles = 'min-bs-0 p-2';\nconst tooltipProps = { side: 'bottom' as const, classNames: 'z-10' };\n\nconst ToolbarSeparator = () => <div role='separator' className='grow' />;\n\n//\n// ToolbarItem\n//\n\ntype ToolbarItemProps =\n | (NaturalToolbarButtonProps & { itemType: 'button'; icon: string })\n | (NaturalToolbarToggleGroupItemProps & { itemType: 'toggleGroupItem'; icon: string })\n | (NaturalToolbarToggleProps & { itemType: 'toggle'; icon: string });\n\nexport const ToolbarItem = ({ itemType, icon, children, ...props }: ToolbarItemProps) => {\n const Invoker =\n itemType === 'toggleGroupItem'\n ? NaturalToolbar.ToggleGroupItem\n : itemType === 'toggle'\n ? NaturalToolbar.Toggle\n : NaturalToolbar.Button;\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n {/* TODO(thure): type the props spread better. */}\n <Invoker variant='ghost' {...(props as any)} classNames={buttonStyles}>\n <Icon icon={icon} size={5} />\n <span className='sr-only'>{children}</span>\n </Invoker>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content {...tooltipProps}>\n {children}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\n//\n// Root\n//\n\ntype AlignAction = { key: AlignKey; value: AlignValue };\ntype CommentAction = { key: CommentKey; value: CommentValue; cellContent?: string };\ntype StyleAction = { key: StyleKey; value: StyleValue };\n\nexport type ToolbarAction = StyleAction | AlignAction | CommentAction;\nexport type ToolbarActionAnnotated = ToolbarAction & { unset?: boolean };\n\nexport type ToolbarActionType = ToolbarAction['key'];\n\nexport type ToolbarActionHandler = (action: ToolbarActionAnnotated) => void;\n\nexport type ToolbarProps = ThemedClassName<\n PropsWithChildren<{\n role?: string;\n }>\n>;\n\nconst [ToolbarContextProvider, useToolbarContext] = createContext<{\n onAction: (action: ToolbarActionAnnotated) => void;\n}>('Toolbar');\n\ntype Range = SheetType['ranges'][number];\n\nconst ToolbarRoot = ({ children, role, classNames }: ToolbarProps) => {\n const { id, model, cursorFallbackRange, cursor } = useSheetContext();\n const { hasAttention } = useAttention(id);\n const dispatch = useIntentDispatcher();\n\n // TODO(Zan): Externalize the toolbar action handler. E.g., Toolbar/keys should both fire events.\n const handleAction = useCallback(\n (action: ToolbarActionAnnotated) => {\n switch (action.key) {\n case 'alignment':\n if (cursorFallbackRange) {\n const index =\n model.sheet.ranges?.findIndex(\n (range) =>\n range.key === action.key &&\n inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n ) ?? -1;\n const nextRangeEntity = {\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: action.key,\n value: action.value,\n };\n if (index < 0) {\n model.sheet.ranges?.push(nextRangeEntity);\n } else if (model.sheet.ranges![index].value === action.value) {\n model.sheet.ranges?.splice(index, 1);\n } else {\n model.sheet.ranges?.splice(index, 1, nextRangeEntity);\n }\n }\n break;\n case 'style':\n if (action.unset) {\n const index = model.sheet.ranges?.findIndex(\n (range) =>\n range.key === action.key &&\n cursorFallbackRange &&\n inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n );\n if (index >= 0) {\n model.sheet.ranges?.splice(index, 1);\n }\n } else if (cursorFallbackRange) {\n model.sheet.ranges?.push({\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: action.key,\n value: action.value,\n });\n }\n break;\n case 'comment': {\n // TODO(Zan): We shouldn't hardcode the action ID.\n if (cursorFallbackRange) {\n void dispatch({\n action: 'dxos.org/plugin/thread/action/create',\n data: {\n cursor: completeCellRangeToThreadCursor(cursorFallbackRange),\n name: action.cellContent,\n subject: model.sheet,\n },\n });\n }\n }\n }\n },\n [model.sheet, cursorFallbackRange, cursor, dispatch],\n );\n\n return (\n <ToolbarContextProvider onAction={handleAction}>\n <NaturalToolbar.Root classNames={['pli-0.5 attention-surface', !hasAttention && 'opacity-20', classNames]}>\n {children}\n </NaturalToolbar.Root>\n </ToolbarContextProvider>\n );\n};\n\n// TODO(burdon): Generalize.\n// TODO(burdon): Detect and display current state.\ntype ButtonProps<T> = {\n value: T;\n icon: string;\n disabled?: (state: Range) => boolean;\n};\n\n//\n// Alignment\n//\n\nconst alignmentOptions: ButtonProps<AlignValue>[] = [\n { value: 'start', icon: 'ph--text-align-left--regular' },\n { value: 'center', icon: 'ph--text-align-center--regular' },\n { value: 'end', icon: 'ph--text-align-right--regular' },\n];\n\nconst Alignment = () => {\n const { cursor, model } = useSheetContext();\n const { onAction } = useToolbarContext('Alignment');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n // TODO(thure): Can this O(n) call be memoized?\n const value = cursor\n ? model.sheet.ranges?.findLast(\n ({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor),\n )?.value\n : undefined;\n\n return (\n <NaturalToolbar.ToggleGroup\n type='single'\n value={\n // TODO(thure): providing `undefined` leaves the last item active which was active rather than showing none.\n value ?? 'never'\n }\n onValueChange={(value: AlignValue) => onAction?.({ key: alignKey, value })}\n >\n {alignmentOptions.map(({ value, icon }) => (\n <ToolbarItem\n itemType='toggleGroupItem'\n key={value}\n value={value}\n icon={icon}\n data-testid={`grid.toolbar.${alignKey}.${value}`}\n >\n {t('toolbar action label', {\n key: t(`range key ${alignKey} label`),\n value: t(`range value ${value} label`),\n })}\n </ToolbarItem>\n ))}\n </NaturalToolbar.ToggleGroup>\n );\n};\n\nconst styleOptions: ButtonProps<StyleValue>[] = [\n { value: 'highlight', icon: 'ph--highlighter--regular' },\n { value: 'softwrap', icon: 'ph--paragraph--regular' },\n];\n\nconst Styles = () => {\n const { cursorFallbackRange, model } = useSheetContext();\n const { onAction } = useToolbarContext('Styles');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n // TODO(thure): Can this O(n) call be memoized?\n const activeValues = cursorFallbackRange\n ? model.sheet.ranges\n ?.filter(\n ({ range, key }) => key === 'style' && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from),\n )\n .reduce((acc, { value }) => {\n acc.add(value);\n return acc;\n }, new Set())\n : undefined;\n\n return (\n <>\n {styleOptions.map(({ value, icon }) => (\n <ToolbarItem\n itemType='toggle'\n key={value}\n pressed={activeValues?.has(value)}\n onPressedChange={(nextPressed: boolean) => {\n onAction?.({ key: 'style', value, unset: !nextPressed });\n }}\n icon={icon}\n >\n {t('toolbar action label', {\n key: t(`range key ${styleKey} label`),\n value: t(`range value ${value} label`),\n })}\n </ToolbarItem>\n ))}\n </>\n );\n};\n\n//\n// Actions\n//\n\nconst Actions = () => {\n const { onAction } = useToolbarContext('Actions');\n const { cursorFallbackRange, cursor, model } = useSheetContext();\n const { t } = useTranslation(SHEET_PLUGIN);\n\n // TODO(thure): Can this O(n) call be memoized?\n const overlapsCommentAnchor = (model.sheet.threads ?? [])\n .filter(nonNullable)\n .filter((thread) => thread.status !== 'resolved')\n .some((thread) => {\n if (!cursorFallbackRange) {\n return false;\n }\n return rangeToIndex(model.sheet, cursorFallbackRange) === thread.anchor;\n });\n\n const tooltipLabelKey = !cursor\n ? 'no cursor label'\n : overlapsCommentAnchor\n ? 'selection overlaps existing comment label'\n : 'comment label';\n\n return (\n <ToolbarItem\n itemType='button'\n value='comment'\n icon='ph--chat-text--regular'\n data-testid='editor.toolbar.comment'\n onClick={() => {\n if (!cursorFallbackRange) {\n return;\n }\n return onAction?.({\n key: 'comment',\n value: rangeToIndex(model.sheet, cursorFallbackRange),\n cellContent: model.getCellText(cursorFallbackRange.from),\n });\n }}\n disabled={!cursorFallbackRange || overlapsCommentAnchor}\n >\n {t(tooltipLabelKey)}\n </ToolbarItem>\n );\n};\n\nexport const Toolbar = {\n Root: ToolbarRoot,\n Separator: ToolbarSeparator,\n Alignment,\n Styles,\n Actions,\n};\n\nexport { useToolbarContext };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { SheetContainer } from './SheetContainer';\n\nexport default SheetContainer;\n"],
5
- "mappings": "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",
6
- "names": ["import_react", "import_react_ui", "FunctionEditor", "model", "cursor", "range", "useSheetContext", "value", "formula", "getCellValue", "isFormula", "graph", "mapFunctionBindingFromId", "mapFormulaIndicesToRefs", "String", "React", "div", "className", "rangeToA1Notation", "addressToA1Notation", "Icon", "icon", "classNames", "span", "buttonStyles", "tooltipProps", "side", "ToolbarSeparator", "role", "ToolbarItem", "itemType", "children", "props", "Invoker", "NaturalToolbar", "ToggleGroupItem", "Toggle", "Button", "Tooltip", "Root", "Trigger", "asChild", "variant", "size", "Portal", "Content", "Arrow", "ToolbarContextProvider", "useToolbarContext", "createContext", "ToolbarRoot", "id", "cursorFallbackRange", "hasAttention", "useAttention", "dispatch", "useIntentDispatcher", "handleAction", "useCallback", "action", "key", "index", "sheet", "ranges", "findIndex", "inRange", "rangeFromIndex", "from", "nextRangeEntity", "rangeToIndex", "push", "splice", "unset", "data", "completeCellRangeToThreadCursor", "name", "cellContent", "subject", "onAction", "alignmentOptions", "Alignment", "t", "useTranslation", "SHEET_PLUGIN", "findLast", "alignKey", "undefined", "ToggleGroup", "type", "onValueChange", "map", "data-testid", "styleOptions", "Styles", "activeValues", "filter", "reduce", "acc", "add", "Set", "pressed", "has", "onPressedChange", "nextPressed", "styleKey", "Actions", "overlapsCommentAnchor", "threads", "nonNullable", "thread", "status", "some", "anchor", "tooltipLabelKey", "onClick", "getCellText", "disabled", "Toolbar", "Separator", "SheetContainer", "space", "ignoreAttention", "useComputeGraph", "SheetProvider", "StackItem", "toolbar", "statusbar", "GridSheet"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { type SheetType } from '../../types';\nimport { useComputeGraph } from '../ComputeGraph';\nimport { FunctionEditor } from '../FunctionEditor';\nimport { GridSheet } from '../GridSheet';\nimport { SheetProvider } from '../SheetContext';\nimport { Toolbar } from '../Toolbar';\n\nexport const SheetContainer = ({\n space,\n sheet,\n role,\n ignoreAttention,\n}: {\n space: Space;\n sheet: SheetType;\n role?: string;\n ignoreAttention?: boolean;\n}) => {\n const graph = useComputeGraph(space);\n\n return graph ? (\n <SheetProvider sheet={sheet} graph={graph} ignoreAttention={ignoreAttention}>\n <StackItem.Content toolbar statusbar {...(role === 'section' && { classNames: 'aspect-video' })}>\n <Toolbar.Root role={role}>\n <Toolbar.Styles />\n <Toolbar.Alignment />\n <Toolbar.Separator />\n <Toolbar.Actions />\n </Toolbar.Root>\n <GridSheet />\n <FunctionEditor />\n </StackItem.Content>\n </SheetProvider>\n ) : null;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Icon } from '@dxos/react-ui';\n\nimport { addressToA1Notation, isFormula, rangeToA1Notation } from '../../defs';\nimport { useSheetContext } from '../SheetContext';\n\nexport const FunctionEditor = () => {\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(model.mapFormulaIndicesToRefs(value));\n formula = true;\n } else if (value != null) {\n value = String(value);\n }\n }\n\n return (\n <div className='flex shrink-0 justify-between items-center px-4 py-1 text-sm attention-surface border-bs !border-separator'>\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-greenText', 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 { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren, useCallback } from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport {\n Icon,\n type ThemedClassName,\n Toolbar as NaturalToolbar,\n type ToolbarButtonProps as NaturalToolbarButtonProps,\n type ToolbarToggleGroupItemProps as NaturalToolbarToggleGroupItemProps,\n type ToolbarToggleProps as NaturalToolbarToggleProps,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport { nonNullable } from '@dxos/util';\n\nimport {\n alignKey,\n type AlignKey,\n type AlignValue,\n type CommentKey,\n type CommentValue,\n inRange,\n rangeFromIndex,\n rangeToIndex,\n styleKey,\n type StyleKey,\n type StyleValue,\n} from '../../defs';\nimport { completeCellRangeToThreadCursor } from '../../integrations';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type SheetType } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\n//\n// Buttons\n//\n\nconst buttonStyles = 'min-bs-0 p-2';\nconst tooltipProps = { side: 'bottom' as const, classNames: 'z-10' };\n\nconst ToolbarSeparator = () => <div role='separator' className='grow' />;\n\n//\n// ToolbarItem\n//\n\ntype ToolbarItemProps =\n | (NaturalToolbarButtonProps & { itemType: 'button'; icon: string })\n | (NaturalToolbarToggleGroupItemProps & { itemType: 'toggleGroupItem'; icon: string })\n | (NaturalToolbarToggleProps & { itemType: 'toggle'; icon: string });\n\nexport const ToolbarItem = ({ itemType, icon, children, ...props }: ToolbarItemProps) => {\n const Invoker =\n itemType === 'toggleGroupItem'\n ? NaturalToolbar.ToggleGroupItem\n : itemType === 'toggle'\n ? NaturalToolbar.Toggle\n : NaturalToolbar.Button;\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n {/* TODO(thure): type the props spread better. */}\n <Invoker variant='ghost' {...(props as any)} classNames={buttonStyles}>\n <Icon icon={icon} size={5} />\n <span className='sr-only'>{children}</span>\n </Invoker>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content {...tooltipProps}>\n {children}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\n//\n// Root\n//\n\ntype AlignAction = { key: AlignKey; value: AlignValue };\ntype CommentAction = { key: CommentKey; value: CommentValue; cellContent?: string };\ntype StyleAction = { key: StyleKey; value: StyleValue };\n\nexport type ToolbarAction = StyleAction | AlignAction | CommentAction;\nexport type ToolbarActionAnnotated = ToolbarAction & { unset?: boolean };\n\nexport type ToolbarActionType = ToolbarAction['key'];\n\nexport type ToolbarActionHandler = (action: ToolbarActionAnnotated) => void;\n\nexport type ToolbarProps = ThemedClassName<\n PropsWithChildren<{\n role?: string;\n }>\n>;\n\nconst [ToolbarContextProvider, useToolbarContext] = createContext<{\n onAction: (action: ToolbarActionAnnotated) => void;\n}>('Toolbar');\n\ntype Range = SheetType['ranges'][number];\n\nconst ToolbarRoot = ({ children, role, classNames }: ToolbarProps) => {\n const { id, model, cursorFallbackRange, cursor } = useSheetContext();\n const { hasAttention } = useAttention(id);\n const dispatch = useIntentDispatcher();\n\n // TODO(Zan): Externalize the toolbar action handler. E.g., Toolbar/keys should both fire events.\n const handleAction = useCallback(\n (action: ToolbarActionAnnotated) => {\n switch (action.key) {\n case 'alignment':\n if (cursorFallbackRange) {\n const index =\n model.sheet.ranges?.findIndex(\n (range) =>\n range.key === action.key &&\n inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n ) ?? -1;\n const nextRangeEntity = {\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: action.key,\n value: action.value,\n };\n if (index < 0) {\n model.sheet.ranges?.push(nextRangeEntity);\n } else if (model.sheet.ranges![index].value === action.value) {\n model.sheet.ranges?.splice(index, 1);\n } else {\n model.sheet.ranges?.splice(index, 1, nextRangeEntity);\n }\n }\n break;\n case 'style':\n if (action.unset) {\n const index = model.sheet.ranges?.findIndex(\n (range) =>\n range.key === action.key &&\n cursorFallbackRange &&\n inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n );\n if (index >= 0) {\n model.sheet.ranges?.splice(index, 1);\n }\n } else if (cursorFallbackRange) {\n model.sheet.ranges?.push({\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: action.key,\n value: action.value,\n });\n }\n break;\n case 'comment': {\n // TODO(Zan): We shouldn't hardcode the action ID.\n if (cursorFallbackRange) {\n void dispatch({\n action: 'dxos.org/plugin/thread/action/create',\n data: {\n cursor: completeCellRangeToThreadCursor(cursorFallbackRange),\n name: action.cellContent,\n subject: model.sheet,\n },\n });\n }\n }\n }\n },\n [model.sheet, cursorFallbackRange, cursor, dispatch],\n );\n\n return (\n <ToolbarContextProvider onAction={handleAction}>\n <NaturalToolbar.Root classNames={['pli-0.5 attention-surface', !hasAttention && 'opacity-20', classNames]}>\n {children}\n </NaturalToolbar.Root>\n </ToolbarContextProvider>\n );\n};\n\n// TODO(burdon): Generalize.\n// TODO(burdon): Detect and display current state.\ntype ButtonProps<T> = {\n value: T;\n icon: string;\n disabled?: (state: Range) => boolean;\n};\n\n//\n// Alignment\n//\n\nconst alignmentOptions: ButtonProps<AlignValue>[] = [\n { value: 'start', icon: 'ph--text-align-left--regular' },\n { value: 'center', icon: 'ph--text-align-center--regular' },\n { value: 'end', icon: 'ph--text-align-right--regular' },\n];\n\nconst Alignment = () => {\n const { cursor, model } = useSheetContext();\n const { onAction } = useToolbarContext('Alignment');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n // TODO(thure): Can this O(n) call be memoized?\n const value = cursor\n ? model.sheet.ranges?.findLast(\n ({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor),\n )?.value\n : undefined;\n\n return (\n <NaturalToolbar.ToggleGroup\n type='single'\n value={\n // TODO(thure): providing `undefined` leaves the last item active which was active rather than showing none.\n value ?? 'never'\n }\n onValueChange={(value: AlignValue) => onAction?.({ key: alignKey, value })}\n >\n {alignmentOptions.map(({ value, icon }) => (\n <ToolbarItem itemType='toggleGroupItem' key={value} value={value} icon={icon}>\n {t('toolbar action label', {\n key: t(`range key ${alignKey} label`),\n value: t(`range value ${value} label`),\n })}\n </ToolbarItem>\n ))}\n </NaturalToolbar.ToggleGroup>\n );\n};\n\nconst styleOptions: ButtonProps<StyleValue>[] = [\n { value: 'highlight', icon: 'ph--highlighter--regular' },\n { value: 'softwrap', icon: 'ph--paragraph--regular' },\n];\n\nconst Styles = () => {\n const { cursorFallbackRange, model } = useSheetContext();\n const { onAction } = useToolbarContext('Styles');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n // TODO(thure): Can this O(n) call be memoized?\n const activeValues = cursorFallbackRange\n ? model.sheet.ranges\n ?.filter(\n ({ range, key }) => key === 'style' && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from),\n )\n .reduce((acc, { value }) => {\n acc.add(value);\n return acc;\n }, new Set())\n : undefined;\n\n return (\n <>\n {styleOptions.map(({ value, icon }) => (\n <ToolbarItem\n itemType='toggle'\n key={value}\n pressed={activeValues?.has(value)}\n onPressedChange={(nextPressed: boolean) => {\n onAction?.({ key: 'style', value, unset: !nextPressed });\n }}\n icon={icon}\n >\n {t('toolbar action label', {\n key: t(`range key ${styleKey} label`),\n value: t(`range value ${value} label`),\n })}\n </ToolbarItem>\n ))}\n </>\n );\n};\n\n//\n// Actions\n//\n\nconst Actions = () => {\n const { onAction } = useToolbarContext('Actions');\n const { cursorFallbackRange, cursor, model } = useSheetContext();\n const { t } = useTranslation(SHEET_PLUGIN);\n\n // TODO(thure): Can this O(n) call be memoized?\n const overlapsCommentAnchor = (model.sheet.threads ?? [])\n .filter(nonNullable)\n .filter((thread) => thread.status !== 'resolved')\n .some((thread) => {\n if (!cursorFallbackRange) {\n return false;\n }\n return rangeToIndex(model.sheet, cursorFallbackRange) === thread.anchor;\n });\n\n const tooltipLabelKey = !cursor\n ? 'no cursor label'\n : overlapsCommentAnchor\n ? 'selection overlaps existing comment label'\n : 'comment label';\n\n return (\n <ToolbarItem\n itemType='button'\n value='comment'\n icon='ph--chat-text--regular'\n data-testid='editor.toolbar.comment'\n onClick={() => {\n if (!cursorFallbackRange) {\n return;\n }\n return onAction?.({\n key: 'comment',\n value: rangeToIndex(model.sheet, cursorFallbackRange),\n cellContent: model.getCellText(cursorFallbackRange.from),\n });\n }}\n disabled={!cursorFallbackRange || overlapsCommentAnchor}\n >\n {t(tooltipLabelKey)}\n </ToolbarItem>\n );\n};\n\nexport const Toolbar = {\n Root: ToolbarRoot,\n Separator: ToolbarSeparator,\n Alignment,\n Styles,\n Actions,\n};\n\nexport { useToolbarContext };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { SheetContainer } from './SheetContainer';\n\nexport default SheetContainer;\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_react_ui", "FunctionEditor", "model", "cursor", "range", "useSheetContext", "value", "formula", "getCellValue", "isFormula", "graph", "mapFunctionBindingFromId", "mapFormulaIndicesToRefs", "String", "React", "div", "className", "rangeToA1Notation", "addressToA1Notation", "Icon", "icon", "classNames", "span", "buttonStyles", "tooltipProps", "side", "ToolbarSeparator", "role", "ToolbarItem", "itemType", "children", "props", "Invoker", "NaturalToolbar", "ToggleGroupItem", "Toggle", "Button", "Tooltip", "Root", "Trigger", "asChild", "variant", "size", "Portal", "Content", "Arrow", "ToolbarContextProvider", "useToolbarContext", "createContext", "ToolbarRoot", "id", "cursorFallbackRange", "hasAttention", "useAttention", "dispatch", "useIntentDispatcher", "handleAction", "useCallback", "action", "key", "index", "sheet", "ranges", "findIndex", "inRange", "rangeFromIndex", "from", "nextRangeEntity", "rangeToIndex", "push", "splice", "unset", "data", "completeCellRangeToThreadCursor", "name", "cellContent", "subject", "onAction", "alignmentOptions", "Alignment", "t", "useTranslation", "SHEET_PLUGIN", "findLast", "alignKey", "undefined", "ToggleGroup", "type", "onValueChange", "map", "styleOptions", "Styles", "activeValues", "filter", "reduce", "acc", "add", "Set", "pressed", "has", "onPressedChange", "nextPressed", "styleKey", "Actions", "overlapsCommentAnchor", "threads", "nonNullable", "thread", "status", "some", "anchor", "tooltipLabelKey", "data-testid", "onClick", "getCellText", "disabled", "Toolbar", "Separator", "SheetContainer", "space", "ignoreAttention", "useComputeGraph", "SheetProvider", "StackItem", "toolbar", "statusbar", "GridSheet"]
7
7
  }
@@ -26,19 +26,19 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_TS6IBEPZ_exports = {};
30
- __export(chunk_TS6IBEPZ_exports, {
29
+ var chunk_J5ZFWMOD_exports = {};
30
+ __export(chunk_J5ZFWMOD_exports, {
31
31
  ComputeGraphContextProvider: () => ComputeGraphContextProvider,
32
32
  GridSheet: () => GridSheet,
33
+ RangeList: () => RangeList,
33
34
  SheetContainer: () => SheetContainer,
34
- SheetObjectSettings: () => SheetObjectSettings,
35
35
  SheetProvider: () => SheetProvider,
36
36
  completeCellRangeToThreadCursor: () => completeCellRangeToThreadCursor,
37
37
  computeGraphFacet: () => computeGraphFacet,
38
38
  useComputeGraph: () => useComputeGraph,
39
39
  useSheetContext: () => useSheetContext
40
40
  });
41
- module.exports = __toCommonJS(chunk_TS6IBEPZ_exports);
41
+ module.exports = __toCommonJS(chunk_J5ZFWMOD_exports);
42
42
  var import_chunk_O7XR4R7Y = require("./chunk-O7XR4R7Y.cjs");
43
43
  var import_chunk_AWKOWDMI = require("./chunk-AWKOWDMI.cjs");
44
44
  var import_chunk_2ZVZI2KJ = require("./chunk-2ZVZI2KJ.cjs");
@@ -90,9 +90,6 @@ var import_echo_schema2 = require("@dxos/echo-schema");
90
90
  var import_react_ui2 = require("@dxos/react-ui");
91
91
  var import_react_ui_list = require("@dxos/react-ui-list");
92
92
  var import_react_ui_theme3 = require("@dxos/react-ui-theme");
93
- var import_react9 = __toESM(require("react"));
94
- var import_meta = require("@dxos/plugin-space/meta");
95
- var import_react_ui3 = require("@dxos/react-ui");
96
93
  var ComputeGraphContext = /* @__PURE__ */ (0, import_react.createContext)(void 0);
97
94
  var ComputeGraphContextProvider = ({ registry, children }) => {
98
95
  return /* @__PURE__ */ import_react.default.createElement(ComputeGraphContext.Provider, {
@@ -1032,22 +1029,7 @@ var RangeList = ({ sheet }) => {
1032
1029
  onClick: () => handleDeleteRange(range)
1033
1030
  })))));
1034
1031
  };
1035
- var SheetObjectSettings = ({ sheet }) => {
1036
- const { t } = (0, import_react_ui3.useTranslation)(import_meta.SPACE_PLUGIN);
1037
- return /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement("div", {
1038
- role: "form",
1039
- className: "flex flex-col w-full p-2 gap-1"
1040
- }, /* @__PURE__ */ import_react9.default.createElement(import_react_ui3.Input.Root, null, /* @__PURE__ */ import_react9.default.createElement(import_react_ui3.Input.Label, null, t("name label")), /* @__PURE__ */ import_react9.default.createElement(import_react_ui3.Input.TextInput, {
1041
- placeholder: t("name placeholder"),
1042
- value: sheet.name ?? "",
1043
- onChange: (event) => {
1044
- sheet.name = event.target.value;
1045
- }
1046
- }))), /* @__PURE__ */ import_react9.default.createElement(RangeList, {
1047
- sheet
1048
- }));
1049
- };
1050
- var SheetContainer = (0, import_react7.lazy)(() => import("./SheetContainer-3373SORI.cjs"));
1032
+ var SheetContainer = (0, import_react7.lazy)(() => import("./SheetContainer-BSDHHYXE.cjs"));
1051
1033
  var completeCellRangeToThreadCursor = (range) => {
1052
1034
  return `${range.from.col},${range.from.row},${range.to.col},${range.to.row}`;
1053
1035
  };
@@ -1083,9 +1065,6 @@ var useUpdateFocusedCellOnThreadSelection = (grid) => {
1083
1065
  ...range.to,
1084
1066
  plane: "grid"
1085
1067
  }, true);
1086
- return {
1087
- data: true
1088
- };
1089
1068
  }
1090
1069
  }
1091
1070
  }, [
@@ -1651,20 +1630,17 @@ var GridSheet = () => {
1651
1630
  sideOffset: 4,
1652
1631
  collisionPadding: 8
1653
1632
  }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui.DropdownMenu.Viewport, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui.DropdownMenu.Item, {
1654
- onClick: () => handleAxisMenuAction("insert-before"),
1655
- "data-testid": `grid.${contextMenuAxis}.insert-before`
1633
+ onClick: () => handleAxisMenuAction("insert-before")
1656
1634
  }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui.Icon, {
1657
1635
  size: 5,
1658
1636
  icon: contextMenuAxis === "col" ? "ph--columns-plus-left--regular" : "ph--rows-plus-top--regular"
1659
1637
  }), /* @__PURE__ */ import_react4.default.createElement("span", null, t(`add ${contextMenuAxis} before label`))), /* @__PURE__ */ import_react4.default.createElement(import_react_ui.DropdownMenu.Item, {
1660
- onClick: () => handleAxisMenuAction("insert-after"),
1661
- "data-testid": `grid.${contextMenuAxis}.insert-after`
1638
+ onClick: () => handleAxisMenuAction("insert-after")
1662
1639
  }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui.Icon, {
1663
1640
  size: 5,
1664
1641
  icon: contextMenuAxis === "col" ? "ph--columns-plus-right--regular" : "ph--rows-plus-bottom--regular"
1665
1642
  }), /* @__PURE__ */ import_react4.default.createElement("span", null, t(`add ${contextMenuAxis} after label`))), /* @__PURE__ */ import_react4.default.createElement(import_react_ui.DropdownMenu.Item, {
1666
- onClick: () => handleAxisMenuAction("drop"),
1667
- "data-testid": `grid.${contextMenuAxis}.drop`
1643
+ onClick: () => handleAxisMenuAction("drop")
1668
1644
  }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui.Icon, {
1669
1645
  size: 5,
1670
1646
  icon: "ph--backspace--regular"
@@ -1674,12 +1650,12 @@ var GridSheet = () => {
1674
1650
  0 && (module.exports = {
1675
1651
  ComputeGraphContextProvider,
1676
1652
  GridSheet,
1653
+ RangeList,
1677
1654
  SheetContainer,
1678
- SheetObjectSettings,
1679
1655
  SheetProvider,
1680
1656
  completeCellRangeToThreadCursor,
1681
1657
  computeGraphFacet,
1682
1658
  useComputeGraph,
1683
1659
  useSheetContext
1684
1660
  });
1685
- //# sourceMappingURL=chunk-TS6IBEPZ.cjs.map
1661
+ //# sourceMappingURL=chunk-J5ZFWMOD.cjs.map