@dxos/react-ui-stack 0.7.5-main.e9bb01b → 0.7.5-staging.2ff1350

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 (42) hide show
  1. package/dist/lib/browser/index.mjs +115 -124
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node/index.cjs +161 -169
  5. package/dist/lib/node/index.cjs.map +4 -4
  6. package/dist/lib/node/meta.json +1 -1
  7. package/dist/lib/node-esm/index.mjs +115 -124
  8. package/dist/lib/node-esm/index.mjs.map +4 -4
  9. package/dist/lib/node-esm/meta.json +1 -1
  10. package/dist/types/src/components/MenuSignifier.d.ts +2 -3
  11. package/dist/types/src/components/MenuSignifier.d.ts.map +1 -1
  12. package/dist/types/src/components/Stack.d.ts +6 -1
  13. package/dist/types/src/components/Stack.d.ts.map +1 -1
  14. package/dist/types/src/components/Stack.stories.d.ts +1 -2
  15. package/dist/types/src/components/Stack.stories.d.ts.map +1 -1
  16. package/dist/types/src/components/StackContext.d.ts +2 -1
  17. package/dist/types/src/components/StackContext.d.ts.map +1 -1
  18. package/dist/types/src/components/StackItem.d.ts +4 -3
  19. package/dist/types/src/components/StackItem.d.ts.map +1 -1
  20. package/dist/types/src/components/StackItemContent.d.ts.map +1 -1
  21. package/dist/types/src/components/StackItemDragHandle.d.ts +2 -2
  22. package/dist/types/src/components/StackItemDragHandle.d.ts.map +1 -1
  23. package/dist/types/src/components/StackItemHeading.d.ts +1 -1
  24. package/dist/types/src/components/StackItemHeading.d.ts.map +1 -1
  25. package/dist/types/src/components/StackItemResizeHandle.d.ts +1 -2
  26. package/dist/types/src/components/StackItemResizeHandle.d.ts.map +1 -1
  27. package/dist/types/src/hooks/index.d.ts +2 -0
  28. package/dist/types/src/hooks/index.d.ts.map +1 -0
  29. package/dist/types/src/hooks/useStackDropForElements.d.ts +15 -0
  30. package/dist/types/src/hooks/useStackDropForElements.d.ts.map +1 -0
  31. package/package.json +22 -20
  32. package/src/components/Stack.stories.tsx +1 -1
  33. package/src/components/Stack.tsx +44 -57
  34. package/src/components/StackContext.tsx +3 -1
  35. package/src/components/StackItem.tsx +28 -7
  36. package/src/components/StackItemContent.tsx +2 -0
  37. package/src/components/StackItemResizeHandle.tsx +10 -107
  38. package/src/hooks/index.ts +5 -0
  39. package/src/hooks/useStackDropForElements.ts +73 -0
  40. package/dist/types/src/playwright/playwright.config.d.ts +0 -3
  41. package/dist/types/src/playwright/playwright.config.d.ts.map +0 -1
  42. /package/src/playwright/{playwright.config.ts → playwright.config.cts} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/components/Stack.tsx", "../../../src/components/StackContext.tsx", "../../../src/components/StackItem.tsx", "../../../src/components/StackItemContent.tsx", "../../../src/components/StackItemDragHandle.tsx", "../../../src/components/StackItemHeading.tsx", "../../../src/components/StackItemResizeHandle.tsx", "../../../src/components/StackItemSigil.tsx", "../../../src/components/MenuSignifier.tsx", "../../../src/translations.ts", "../../../src/components/LayoutControls.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\nimport { dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { attachClosestEdge, extractClosestEdge } from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\nimport React, {\n Children,\n type CSSProperties,\n type ComponentPropsWithRef,\n forwardRef,\n useLayoutEffect,\n useState,\n} from 'react';\n\nimport { type ThemedClassName, ListItem } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type StackContextValue, StackContext, type StackItemData } from './StackContext';\n\nexport type Orientation = 'horizontal' | 'vertical';\nexport type Size = 'intrinsic' | 'contain';\n\nexport type StackProps = Omit<ThemedClassName<ComponentPropsWithRef<'div'>>, 'aria-orientation'> &\n Partial<StackContextValue> & { itemsCount?: number };\n\nexport const railGridHorizontal = 'grid-rows-[[rail-start]_var(--rail-size)_[content-start]_1fr_[content-end]]';\n\nexport const railGridVertical = 'grid-cols-[[rail-start]_var(--rail-size)_[content-start]_1fr_[content-end]]';\n\nexport const Stack = forwardRef<HTMLDivElement, StackProps>(\n (\n {\n children,\n classNames,\n style,\n orientation = 'vertical',\n rail = true,\n size = 'intrinsic',\n onRearrange,\n itemsCount = Children.count(children),\n ...props\n },\n forwardedRef,\n ) => {\n const [stackElement, stackRef] = useState<HTMLDivElement | null>(null);\n const composedItemRef = composeRefs<HTMLDivElement>(stackRef, forwardedRef);\n const [dropping, setDropping] = useState(false);\n\n const arrowNavigationGroup = useArrowNavigationGroup({ axis: orientation });\n\n const styles: CSSProperties = {\n [orientation === 'horizontal' ? 'gridTemplateColumns' : 'gridTemplateRows']: `repeat(${itemsCount}, min-content)`,\n ...style,\n };\n\n const selfDroppable = !!(itemsCount < 1 && onRearrange && props.id);\n\n useLayoutEffect(() => {\n if (!stackElement || !selfDroppable) {\n return;\n }\n const acceptSourceType = orientation === 'horizontal' ? 'column' : 'card';\n return dropTargetForElements({\n element: stackElement,\n getData: ({ input, element }) => {\n return attachClosestEdge(\n { id: props.id, type: orientation === 'horizontal' ? 'card' : 'column' },\n { input, element, allowedEdges: [orientation === 'horizontal' ? 'left' : 'top'] },\n );\n },\n onDragEnter: ({ source }) => {\n if (source.data.type === acceptSourceType) {\n setDropping(true);\n }\n },\n onDrag: ({ source }) => {\n if (source.data.type === acceptSourceType) {\n setDropping(true);\n }\n },\n onDragLeave: () => setDropping(false),\n onDrop: ({ self, source }) => {\n setDropping(false);\n if (source.data.type === acceptSourceType && selfDroppable) {\n onRearrange(source.data as StackItemData, self.data as StackItemData, extractClosestEdge(self.data));\n }\n },\n });\n }, [stackElement, selfDroppable]);\n\n return (\n <StackContext.Provider value={{ orientation, rail, size, onRearrange }}>\n <div\n {...props}\n {...arrowNavigationGroup}\n className={mx(\n 'grid relative',\n rail\n ? orientation === 'horizontal'\n ? railGridHorizontal\n : railGridVertical\n : orientation === 'horizontal'\n ? 'grid-rows-1'\n : 'grid-cols-1',\n size === 'contain' &&\n (orientation === 'horizontal'\n ? 'overflow-x-auto min-bs-0 bs-full max-bs-full'\n : 'overflow-y-auto min-is-0 is-full max-is-full'),\n classNames,\n )}\n aria-orientation={orientation}\n style={styles}\n ref={composedItemRef}\n >\n {children}\n {selfDroppable && dropping && <ListItem.DropIndicator edge={orientation === 'horizontal' ? 'left' : 'top'} />}\n </div>\n </StackContext.Provider>\n );\n },\n);\n\nexport { StackContext };\nexport type { StackContextValue };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type { Edge } from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';\nimport { createContext, useContext } from 'react';\n\nimport { type Orientation, type Size } from './Stack';\n\nexport type StackItemSize = number | 'min-content';\n\nexport type StackItemData = { id: string; type: 'column' | 'card' };\n\nexport type StackItemRearrangeHandler = (\n source: StackItemData,\n target: StackItemData,\n closestEdge: Edge | null,\n) => void;\n\nexport type StackContextValue = {\n orientation: Orientation;\n rail: boolean;\n size: Size;\n onRearrange?: StackItemRearrangeHandler;\n};\n\nexport const StackContext = createContext<StackContextValue>({\n orientation: 'vertical',\n rail: true,\n size: 'intrinsic',\n});\n\nexport const useStack = () => useContext(StackContext);\n\nexport type StackItemContextValue = {\n selfDragHandleRef: (element: HTMLDivElement | null) => void;\n size: StackItemSize;\n setSize: (nextSize: StackItemSize, commit?: boolean) => void;\n};\n\nexport const StackItemContext = createContext<StackItemContextValue>({\n selfDragHandleRef: () => {},\n size: 'min-content',\n setSize: () => {},\n});\n\nexport const useStackItem = () => useContext(StackItemContext);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { draggable, dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { preserveOffsetOnSource } from '@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source';\nimport { scrollJustEnoughIntoView } from '@atlaskit/pragmatic-drag-and-drop/element/scroll-just-enough-into-view';\nimport {\n attachClosestEdge,\n extractClosestEdge,\n type Edge,\n} from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\nimport React, { forwardRef, useLayoutEffect, useState, type ComponentPropsWithRef, useCallback } from 'react';\n\nimport { type ThemedClassName, ListItem } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { useStack, StackItemContext, type StackItemSize, type StackItemData } from './StackContext';\nimport { StackItemContent, type StackItemContentProps } from './StackItemContent';\nimport { StackItemDragHandle, type StackItemDragHandleProps } from './StackItemDragHandle';\nimport {\n StackItemHeading,\n StackItemHeadingLabel,\n type StackItemHeadingProps,\n type StackItemHeadingLabelProps,\n} from './StackItemHeading';\nimport { StackItemResizeHandle, type StackItemResizeHandleProps } from './StackItemResizeHandle';\nimport {\n StackItemSigil,\n type StackItemSigilProps,\n type StackItemSigilAction,\n type StackItemSigilButtonProps,\n StackItemSigilButton,\n} from './StackItemSigil';\n\nexport const DEFAULT_HORIZONTAL_SIZE = 44 satisfies StackItemSize;\nexport const DEFAULT_VERTICAL_SIZE = 'min-content' satisfies StackItemSize;\nexport const DEFAULT_EXTRINSIC_SIZE = DEFAULT_HORIZONTAL_SIZE satisfies StackItemSize;\n\nexport type StackItemRootProps = ThemedClassName<ComponentPropsWithRef<'div'>> & {\n item: Omit<StackItemData, 'type'>;\n order?: number;\n size?: StackItemSize;\n onSizeChange?: (nextSize: StackItemSize) => void;\n role?: 'article' | 'section';\n disableRearrange?: boolean;\n};\n\nconst StackItemRoot = forwardRef<HTMLDivElement, StackItemRootProps>(\n (\n { item, children, classNames, size: propsSize, onSizeChange, role, order, style, disableRearrange, ...props },\n forwardedRef,\n ) => {\n const [itemElement, itemRef] = useState<HTMLDivElement | null>(null);\n const [selfDragHandleElement, selfDragHandleRef] = useState<HTMLDivElement | null>(null);\n const [closestEdge, setEdge] = useState<Edge | null>(null);\n const { orientation, rail, onRearrange } = useStack();\n const [size = orientation === 'horizontal' ? DEFAULT_HORIZONTAL_SIZE : DEFAULT_VERTICAL_SIZE, setInternalSize] =\n useState(propsSize);\n\n const Root = role ?? 'div';\n\n const composedItemRef = composeRefs<HTMLDivElement>(itemRef, forwardedRef);\n\n const setSize = useCallback(\n (nextSize: StackItemSize, commit?: boolean) => {\n setInternalSize(nextSize);\n if (commit) {\n onSizeChange?.(nextSize);\n }\n },\n [onSizeChange],\n );\n\n const type = orientation === 'horizontal' ? 'column' : 'card';\n\n useLayoutEffect(() => {\n if (!itemElement || !onRearrange || disableRearrange) {\n return;\n }\n return combine(\n draggable({\n element: itemElement,\n ...(selfDragHandleElement && { dragHandle: selfDragHandleElement }),\n getInitialData: () => ({ id: item.id, type }),\n onGenerateDragPreview: ({ nativeSetDragImage, source, location }) => {\n document.body.setAttribute('data-drag-preview', 'true');\n scrollJustEnoughIntoView({ element: source.element });\n const { x, y } = preserveOffsetOnSource({ element: source.element, input: location.current.input })({\n container: (source.element.offsetParent ?? document.body) as HTMLElement,\n });\n nativeSetDragImage?.(source.element, x, y);\n },\n onDragStart: () => {\n document.body.removeAttribute('data-drag-preview');\n },\n }),\n dropTargetForElements({\n element: itemElement,\n getData: ({ input, element }) => {\n return attachClosestEdge(\n { id: item.id, type },\n { input, element, allowedEdges: orientation === 'horizontal' ? ['left', 'right'] : ['top', 'bottom'] },\n );\n },\n onDragEnter: ({ self, source }) => {\n if (source.data.type === self.data.type) {\n setEdge(extractClosestEdge(self.data));\n }\n },\n onDrag: ({ self, source }) => {\n if (source.data.type === self.data.type) {\n setEdge(extractClosestEdge(self.data));\n }\n },\n onDragLeave: () => setEdge(null),\n onDrop: ({ self, source }) => {\n setEdge(null);\n if (source.data.type === self.data.type) {\n onRearrange(source.data as StackItemData, self.data as StackItemData, extractClosestEdge(self.data));\n }\n },\n }),\n );\n }, [orientation, item, onRearrange, selfDragHandleElement, itemElement]);\n\n const focusGroupAttrs = useFocusableGroup({ tabBehavior: 'limited' });\n\n return (\n <StackItemContext.Provider value={{ selfDragHandleRef, size, setSize }}>\n <Root\n {...props}\n tabIndex={0}\n {...focusGroupAttrs}\n className={mx(\n 'group/stack-item grid relative dx-focus-ring-inset-over-all',\n size === 'min-content' && (orientation === 'horizontal' ? 'is-min' : 'bs-min'),\n orientation === 'horizontal' ? 'grid-rows-subgrid' : 'grid-cols-subgrid',\n rail && (orientation === 'horizontal' ? 'row-span-2' : 'col-span-2'),\n classNames,\n )}\n data-dx-stack-item\n style={{\n ...(size !== 'min-content' && {\n [orientation === 'horizontal' ? 'inlineSize' : 'blockSize']: `${size}rem`,\n }),\n ...(Number.isFinite(order) && {\n [orientation === 'horizontal' ? 'gridColumn' : 'gridRow']: `${order}`,\n }),\n ...style,\n }}\n ref={composedItemRef}\n >\n {children}\n {closestEdge && <ListItem.DropIndicator edge={closestEdge} />}\n </Root>\n </StackItemContext.Provider>\n );\n },\n);\n\nexport const StackItem = {\n Root: StackItemRoot,\n Content: StackItemContent,\n Heading: StackItemHeading,\n HeadingLabel: StackItemHeadingLabel,\n ResizeHandle: StackItemResizeHandle,\n DragHandle: StackItemDragHandle,\n Sigil: StackItemSigil,\n SigilButton: StackItemSigilButton,\n};\n\nexport type {\n StackItemContentProps,\n StackItemHeadingProps,\n StackItemHeadingLabelProps,\n StackItemResizeHandleProps,\n StackItemDragHandleProps,\n StackItemSigilProps,\n StackItemSigilButtonProps,\n StackItemSigilAction,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type ComponentPropsWithoutRef, forwardRef } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { useStack } from './StackContext';\n\nexport type StackItemContentProps = ThemedClassName<ComponentPropsWithoutRef<'div'>> & {\n /**\n * This flag is required in order to clarify a developer experience that seemed like it needed extra boilerplate\n * (`row-span-2`) or was buggy. See the description of the StackItem.Content component itself for more information.\n */\n toolbar: boolean;\n /**\n * Whether to provide for the layout of a statusbar after the content.\n */\n statusbar?: boolean;\n /**\n * Whether to set a certain aspect ratio on the content, including the toolbar and statusbar. This is provided for\n * convenience and consistency; it can instead be specified by the `classNames` or `style` props as needed.\n */\n size?: 'intrinsic' | 'video' | 'square';\n};\n\n/**\n * This component should be used by plugins for rendering content within a stack item, a.k.a. a “plank” or “section”.\n * The `toolbar` flag must be provided since this component provides for the layout of content with the toolbar.\n */\nexport const StackItemContent = forwardRef<HTMLDivElement, StackItemContentProps>(\n ({ children, toolbar, statusbar, classNames, size = 'intrinsic', ...props }, forwardedRef) => {\n const { size: stackItemSize } = useStack();\n\n return (\n <div\n role='none'\n {...props}\n className={mx(\n 'group grid grid-cols-[100%]',\n stackItemSize === 'contain' && 'min-bs-0 overflow-hidden',\n size === 'video' ? 'aspect-video' : size === 'square' && 'aspect-square',\n classNames,\n )}\n style={{\n gridTemplateRows: [\n ...(toolbar ? ['var(--rail-action)'] : []),\n '1fr',\n ...(statusbar ? ['var(--statusbar-size)'] : []),\n ].join(' '),\n }}\n ref={forwardedRef}\n >\n {children}\n </div>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Slot } from '@radix-ui/react-slot';\nimport React, { type ComponentPropsWithoutRef } from 'react';\n\nimport { useStackItem } from './StackContext';\n\nexport type StackItemDragHandleProps = ComponentPropsWithoutRef<'button'> & { asChild: boolean };\n\nexport const StackItemDragHandle = ({ asChild, children }: StackItemDragHandleProps) => {\n const { selfDragHandleRef } = useStackItem();\n\n const Root = asChild ? Slot : 'div';\n\n return (\n <Root ref={selfDragHandleRef} role='button'>\n {children}\n </Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport React, { type ComponentPropsWithoutRef, type ComponentPropsWithRef, forwardRef } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { useAttention, type AttendableId, type Related } from '@dxos/react-ui-attention';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { useStack } from './StackContext';\n\nexport type StackItemHeadingProps = ThemedClassName<ComponentPropsWithoutRef<'div'>>;\n\nexport const StackItemHeading = ({ children, classNames, ...props }: StackItemHeadingProps) => {\n const { orientation } = useStack();\n const focusableGroupAttrs = useFocusableGroup({ tabBehavior: 'limited' });\n return (\n <div\n role='heading'\n {...props}\n tabIndex={0}\n {...focusableGroupAttrs}\n className={mx(\n 'flex items-center dx-focus-ring-inset-over-all relative !border-is-0',\n orientation === 'horizontal' ? 'bs-[--rail-size]' : 'is-[--rail-size] flex-col',\n classNames,\n )}\n >\n {children}\n </div>\n );\n};\n\nexport type StackItemHeadingLabelProps = ThemedClassName<ComponentPropsWithRef<'h1'>> & AttendableId & Related;\n\nexport const StackItemHeadingLabel = forwardRef<HTMLHeadingElement, StackItemHeadingLabelProps>(\n ({ attendableId, related, classNames, ...props }, forwardedRef) => {\n const { hasAttention, isAncestor, isRelated } = useAttention(attendableId);\n return (\n <h1\n {...props}\n data-attention={((related && isRelated) || hasAttention || isAncestor).toString()}\n className={mx(\n 'pli-1 min-is-0 is-0 grow truncate font-medium text-baseText data-[attention=true]:text-accentText self-center',\n classNames,\n )}\n ref={forwardedRef}\n />\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { draggable } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { disableNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview';\nimport { preventUnhandled } from '@atlaskit/pragmatic-drag-and-drop/prevent-unhandled';\nimport { type DragLocationHistory } from '@atlaskit/pragmatic-drag-and-drop/types';\nimport React, { useLayoutEffect, useRef } from 'react';\n\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { useStack, useStackItem, type StackItemSize } from './StackContext';\nimport { DEFAULT_EXTRINSIC_SIZE } from './StackItem';\n\nconst REM = parseFloat(getComputedStyle(document.documentElement).fontSize);\n\nconst MIN_WIDTH = 20;\nconst MIN_HEIGHT = 3;\n\nconst measureStackItem = (element: HTMLButtonElement): { width: number; height: number } => {\n const stackItemElement = element.closest('[data-dx-stack-item]');\n return stackItemElement?.getBoundingClientRect() ?? { width: DEFAULT_EXTRINSIC_SIZE, height: DEFAULT_EXTRINSIC_SIZE };\n};\n\nconst getNextSize = (startSize: number, location: DragLocationHistory, client: 'clientX' | 'clientY') => {\n return Math.max(\n client === 'clientX' ? MIN_WIDTH : MIN_HEIGHT,\n startSize + (location.current.input[client] - location.initial.input[client]) / REM,\n );\n};\n\nexport type StackItemResizeHandleProps = {};\n\nexport const StackItemResizeHandle = () => {\n const { orientation } = useStack();\n const { setSize, size } = useStackItem();\n const buttonRef = useRef<HTMLButtonElement>(null);\n const dragStartSize = useRef<StackItemSize>(size);\n const client = orientation === 'horizontal' ? 'clientX' : 'clientY';\n\n useLayoutEffect(\n () => {\n if (!buttonRef.current || buttonRef.current.hasAttribute('draggable')) {\n return;\n }\n // TODO(thure): This should handle StackItem state vs local state better.\n draggable({\n element: buttonRef.current,\n onGenerateDragPreview: ({ nativeSetDragImage }) => {\n // We will be moving the line to indicate a drag; we can disable the native drag preview.\n disableNativeDragPreview({ nativeSetDragImage });\n // We don't want any native drop animation for when the user does not drop on a drop target.\n // We want the drag to finish immediately.\n preventUnhandled.start();\n },\n onDragStart: () => {\n dragStartSize.current =\n dragStartSize.current === 'min-content'\n ? measureStackItem(buttonRef.current!)[orientation === 'horizontal' ? 'width' : 'height'] / REM\n : dragStartSize.current;\n },\n onDrag: ({ location }) => {\n if (typeof dragStartSize.current !== 'number') {\n return;\n }\n setSize(getNextSize(dragStartSize.current, location, client));\n },\n onDrop: ({ location }) => {\n if (typeof dragStartSize.current !== 'number') {\n return;\n }\n const nextSize = getNextSize(dragStartSize.current, location, client);\n setSize(nextSize, true);\n dragStartSize.current = nextSize;\n },\n });\n },\n [\n // Note that `size` should not be a dependency here since dragging this adjusts the size.\n ],\n );\n\n return (\n <button\n ref={buttonRef}\n className={mx(\n 'group absolute',\n orientation === 'horizontal'\n ? 'cursor-col-resize is-3 bs-full inline-end-[-1px] !border-lb-0 before:inset-block-0 before:inline-end-0 before:is-1'\n : 'cursor-row-resize bs-3 is-full block-end-[-1px] !border-li-0 before:inset-inline-0 before:block-end-0 before:bs-1',\n 'before:transition-opacity before:duration-100 before:ease-in-out before:opacity-0 hover:before:opacity-100 focus-visible:before:opacity-100 active:before:opacity-100',\n 'before:absolute before:block before:bg-accentFocusIndicator',\n )}\n >\n <div\n role='none'\n className={mx(\n 'absolute flex items-center group-hover:opacity-0 group-focus-visible:opacity-0 group-active:opacity-0',\n orientation === 'horizontal'\n ? 'block-start-0 inline-end-px bs-[--rail-size]'\n : 'inline-start-0 block-end-px is-[--rail-size] flex justify-center',\n )}\n >\n <DragHandleSignifier orientation={orientation} />\n </div>\n </button>\n );\n};\n\nconst DragHandleSignifier = ({ orientation }: { orientation: 'horizontal' | 'vertical' }) => {\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 256 256'\n fill='currentColor'\n className={mx('shrink-0 bs-[1em] is-[1em] text-unAccent', orientation === 'vertical' && 'rotate-90')}\n >\n {/* two pips: <path d='M256,120c-8.8,0-16-7.2-16-16v-56c0-8.8,7.2-16,16-16v88Z' />\n <path d='M256,232c-8.8,0-16-7.2-16-16v-56c0-8.8,7.2-16,16-16v88Z' /> */}\n <path d='M256,64c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z' />\n <path d='M256,120c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z' />\n <path d='M256,176c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z' />\n <path d='M256,232c-8.8,0-16-7.2-16-16s7.2-16,16-16v32Z' />\n </svg>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { Fragment, type PropsWithChildren, forwardRef, useRef, useState } from 'react';\n\nimport { type ActionLike } from '@dxos/app-graph';\nimport { keySymbols } from '@dxos/keyboard';\nimport { Button, type ButtonProps, DropdownMenu, Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { type AttendableId, type Related, useAttention } from '@dxos/react-ui-attention';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\nimport { getHostPlatform } from '@dxos/util';\n\nimport { MenuSignifierHorizontal } from './MenuSignifier';\nimport { translationKey } from '../translations';\n\nexport type KeyBinding = {\n windows?: string;\n macos?: string;\n ios?: string;\n linux?: string;\n unknown?: string;\n};\n\nexport type StackItemSigilAction = Pick<ActionLike, 'id' | 'properties' | 'data'>;\n\nexport type StackItemSigilButtonProps = Omit<ButtonProps, 'variant'> & AttendableId & Related;\n\nexport const StackItemSigilButton = forwardRef<HTMLButtonElement, StackItemSigilButtonProps>(\n ({ attendableId, classNames, related, children, ...props }, forwardedRef) => {\n const { hasAttention, isAncestor, isRelated } = useAttention(attendableId);\n const variant = (related && isRelated) || hasAttention || isAncestor ? 'primary' : 'ghost';\n return (\n <Button\n {...props}\n variant={variant}\n classNames={['shrink-0 pli-0 min-bs-0 is-[--rail-action] bs-[--rail-action] relative app-no-drag', classNames]}\n ref={forwardedRef}\n >\n <MenuSignifierHorizontal />\n {children}\n </Button>\n );\n },\n);\n\nexport type StackItemSigilProps = PropsWithChildren<\n {\n attendableId?: string;\n triggerLabel: string;\n actions?: StackItemSigilAction[][];\n icon: string;\n onAction?: (action: StackItemSigilAction) => void;\n } & Related\n>;\n\nexport const StackItemSigil = forwardRef<HTMLButtonElement, StackItemSigilProps>(\n ({ actions: actionGroups, onAction, triggerLabel, attendableId, icon, related, children }, forwardedRef) => {\n const { t } = useTranslation(translationKey);\n const suppressNextTooltip = useRef(false);\n\n const [optionsMenuOpen, setOptionsMenuOpen] = useState(false);\n\n const hasActions = actionGroups && actionGroups.length > 0;\n\n const button = (\n <StackItemSigilButton\n attendableId={attendableId}\n related={related}\n // TODO(wittjosiah): Better disabling of interactive styles when no action are available.\n // Remove underscore icon when no actions are available?\n classNames={!hasActions && 'cursor-default'}\n >\n <span className='sr-only'>{triggerLabel}</span>\n <Icon icon={icon} size={5} />\n </StackItemSigilButton>\n );\n\n if (!hasActions) {\n return button;\n }\n\n return (\n <DropdownMenu.Root\n {...{\n open: optionsMenuOpen,\n onOpenChange: (nextOpen: boolean) => {\n if (!nextOpen) {\n suppressNextTooltip.current = true;\n }\n return setOptionsMenuOpen(nextOpen);\n },\n }}\n >\n <DropdownMenu.Trigger asChild ref={forwardedRef}>\n {button}\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content classNames='z-[31]'>\n <DropdownMenu.Viewport>\n {actionGroups?.map((actions, index) => {\n const separator = index > 0 ? <DropdownMenu.Separator /> : null;\n return (\n <Fragment key={index}>\n {separator}\n {actions.map((action) => {\n const shortcut =\n typeof action.properties.keyBinding === 'string'\n ? action.properties.keyBinding\n : action.properties.keyBinding?.[getHostPlatform()];\n\n const menuItemType = action.properties.menuItemType;\n const Root = menuItemType === 'toggle' ? DropdownMenu.CheckboxItem : DropdownMenu.Item;\n\n return (\n <Root\n key={action.id}\n onClick={(event) => {\n if (action.properties.disabled) {\n return;\n }\n event.stopPropagation();\n // TODO(thure): Why does Dialog’s modal-ness cause issues if we don’t explicitly close the menu here?\n suppressNextTooltip.current = true;\n setOptionsMenuOpen(false);\n onAction?.(action);\n }}\n classNames='gap-2'\n disabled={action.properties.disabled}\n checked={menuItemType === 'toggle' ? action.properties.isChecked : undefined}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n <Icon icon={action.properties.icon ?? 'ph--placeholder--regular'} size={4} />\n <span className='grow truncate'>{toLocalizedString(action.properties.label ?? '', t)}</span>\n {menuItemType === 'toggle' && (\n <DropdownMenu.ItemIndicator asChild>\n <Icon icon='ph--check--regular' size={4} />\n </DropdownMenu.ItemIndicator>\n )}\n {shortcut && (\n <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>\n )}\n </Root>\n );\n })}\n </Fragment>\n );\n })}\n {children}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nexport const MenuSignifierHorizontal = () => (\n <svg\n className='absolute block-end-[7px]'\n width={20}\n height={2}\n viewBox='0 0 20 2'\n stroke='currentColor'\n opacity={0.5}\n >\n <line\n x1={0.5}\n y1={0.75}\n x2={19}\n y2={0.75}\n strokeWidth={1.25}\n strokeLinecap='round'\n strokeDasharray='6 20'\n strokeDashoffset='-6.5'\n />\n </svg>\n);\n\nexport const MenuSignifierVertical = () => (\n <svg className='absolute inline-start-1' width={2} height={18} viewBox='0 0 2 18' stroke='currentColor'>\n <line x1={1} y1={3} x2={1} y2={18} strokeWidth={1.5} strokeLinecap='round' strokeDasharray='0 6' />\n </svg>\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const translationKey = 'stack';\n\nexport default [\n {\n 'en-US': {\n [translationKey]: {\n 'resize label': 'Drag to resize',\n 'pin start label': 'Pin to the left sidebar',\n 'pin end label': 'Pin to the right sidebar',\n 'increment start label': 'Move to the left',\n 'increment end label': 'Move to the right',\n 'close label': 'Close',\n 'minify label': 'Minify',\n },\n },\n },\n];\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { forwardRef } from 'react';\n\nimport {\n Button,\n ButtonGroup,\n type ButtonGroupProps,\n type ButtonProps,\n Icon,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\n\nimport { translationKey } from '../translations';\n\nexport type LayoutControlEvent = 'solo' | 'close' | `${'pin' | 'increment'}-${'start' | 'end'}`;\nexport type LayoutControlHandler = (event: LayoutControlEvent) => void;\n\nexport type LayoutCapabilities = {\n incrementStart?: boolean;\n incrementEnd?: boolean;\n solo?: boolean;\n};\n\nexport type LayoutControlsProps = Omit<ButtonGroupProps, 'onClick'> & {\n onClick?: LayoutControlHandler;\n variant?: 'hide-disabled' | 'default';\n close?: boolean | 'minify-start' | 'minify-end';\n capabilities: LayoutCapabilities;\n isSolo?: boolean;\n pin?: 'start' | 'end' | 'both';\n};\n\nconst LayoutControl = ({ icon, label, ...props }: Omit<ButtonProps, 'children'> & { label: string; icon: string }) => {\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button variant='ghost' {...props}>\n <span className='sr-only'>{label}</span>\n <Icon icon={icon} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='bottom'>{label}</Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\nexport const LayoutControls = forwardRef<HTMLDivElement, LayoutControlsProps>(\n (\n { onClick, variant = 'default', capabilities: can, isSolo, pin, close = false, children, ...props },\n forwardedRef,\n ) => {\n const { t } = useTranslation(translationKey);\n const buttonClassNames = variant === 'hide-disabled' ? 'disabled:hidden !p-1' : '!p-1';\n\n return (\n <ButtonGroup {...props} ref={forwardedRef}>\n {pin && !isSolo && ['both', 'start'].includes(pin) && (\n <LayoutControl\n label={t('pin start label')}\n variant='ghost'\n classNames={buttonClassNames}\n onClick={() => onClick?.('pin-start')}\n icon='ph--caret-line-left--regular'\n />\n )}\n\n {can.solo && (\n <LayoutControl\n label={t('solo layout label')}\n classNames={buttonClassNames}\n onClick={() => onClick?.('solo')}\n icon={isSolo ? 'ph--arrows-in--regular' : 'ph--arrows-out--regular'}\n />\n )}\n\n {!isSolo && can.solo && (\n <>\n <LayoutControl\n label={t('increment start label')}\n disabled={!can.incrementStart}\n classNames={buttonClassNames}\n onClick={() => onClick?.('increment-start')}\n icon='ph--caret-left--regular'\n />\n <LayoutControl\n label={t('increment end label')}\n disabled={!can.incrementEnd}\n classNames={buttonClassNames}\n onClick={() => onClick?.('increment-end')}\n icon='ph--caret-right--regular'\n />\n </>\n )}\n\n {pin && !isSolo && ['both', 'end'].includes(pin) && (\n <LayoutControl\n label={t('pin end label')}\n classNames={buttonClassNames}\n onClick={() => onClick?.('pin-end')}\n icon='ph--caret-line-right--regular'\n />\n )}\n\n {close && !isSolo && (\n <LayoutControl\n label={t(`${typeof close === 'string' ? 'minify' : 'close'} label`)}\n classNames={buttonClassNames}\n onClick={() => onClick?.('close')}\n data-testid='layoutHeading.close'\n icon={\n close === 'minify-start'\n ? 'ph--caret-line-left--regular'\n : close === 'minify-end'\n ? 'ph--caret-line-right--regular'\n : 'ph--x--regular'\n }\n />\n )}\n {children}\n </ButtonGroup>\n );\n },\n);\n"],
5
- "mappings": "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",
6
- "names": ["import_react", "import_adapter", "import_closest_edge", "import_react_tabster", "import_react_compose_refs", "import_react_ui", "import_react_ui_theme", "import_react_ui_attention", "StackContext", "createContext", "orientation", "rail", "size", "useStack", "useContext", "StackItemContext", "selfDragHandleRef", "setSize", "useStackItem", "railGridHorizontal", "railGridVertical", "Stack", "forwardRef", "children", "classNames", "style", "onRearrange", "itemsCount", "Children", "count", "props", "forwardedRef", "stackElement", "stackRef", "useState", "composedItemRef", "composeRefs", "dropping", "setDropping", "arrowNavigationGroup", "useArrowNavigationGroup", "axis", "styles", "selfDroppable", "id", "useLayoutEffect", "acceptSourceType", "dropTargetForElements", "element", "getData", "input", "attachClosestEdge", "type", "allowedEdges", "onDragEnter", "source", "data", "onDrag", "onDragLeave", "onDrop", "self", "extractClosestEdge", "React", "Provider", "value", "div", "className", "mx", "aria-orientation", "ref", "ListItem", "DropIndicator", "edge", "StackItemContent", "toolbar", "statusbar", "stackItemSize", "role", "gridTemplateRows", "join", "StackItemDragHandle", "asChild", "Root", "Slot", "StackItemHeading", "focusableGroupAttrs", "useFocusableGroup", "tabBehavior", "tabIndex", "StackItemHeadingLabel", "attendableId", "related", "hasAttention", "isAncestor", "isRelated", "useAttention", "h1", "data-attention", "toString", "REM", "parseFloat", "getComputedStyle", "document", "documentElement", "fontSize", "MIN_WIDTH", "MIN_HEIGHT", "measureStackItem", "stackItemElement", "closest", "getBoundingClientRect", "width", "DEFAULT_EXTRINSIC_SIZE", "height", "getNextSize", "startSize", "location", "client", "Math", "max", "current", "initial", "StackItemResizeHandle", "buttonRef", "useRef", "dragStartSize", "hasAttribute", "draggable", "onGenerateDragPreview", "nativeSetDragImage", "disableNativeDragPreview", "preventUnhandled", "start", "onDragStart", "nextSize", "button", "DragHandleSignifier", "svg", "xmlns", "viewBox", "fill", "path", "d", "MenuSignifierHorizontal", "stroke", "opacity", "line", "x1", "y1", "x2", "y2", "strokeWidth", "strokeLinecap", "strokeDasharray", "strokeDashoffset", "translationKey", "StackItemSigilButton", "variant", "Button", "StackItemSigil", "actions", "actionGroups", "onAction", "triggerLabel", "icon", "t", "useTranslation", "suppressNextTooltip", "optionsMenuOpen", "setOptionsMenuOpen", "hasActions", "length", "span", "Icon", "DropdownMenu", "open", "onOpenChange", "nextOpen", "Trigger", "Portal", "Content", "Viewport", "map", "index", "separator", "Separator", "Fragment", "key", "action", "shortcut", "properties", "keyBinding", "getHostPlatform", "menuItemType", "CheckboxItem", "Item", "onClick", "event", "disabled", "stopPropagation", "checked", "isChecked", "undefined", "testId", "toLocalizedString", "label", "ItemIndicator", "descriptionText", "keySymbols", "Arrow", "DEFAULT_HORIZONTAL_SIZE", "DEFAULT_VERTICAL_SIZE", "StackItemRoot", "item", "propsSize", "onSizeChange", "order", "disableRearrange", "itemElement", "itemRef", "selfDragHandleElement", "closestEdge", "setEdge", "setInternalSize", "useCallback", "commit", "combine", "dragHandle", "getInitialData", "body", "setAttribute", "scrollJustEnoughIntoView", "x", "y", "preserveOffsetOnSource", "container", "offsetParent", "removeAttribute", "focusGroupAttrs", "data-dx-stack-item", "Number", "isFinite", "StackItem", "Heading", "HeadingLabel", "ResizeHandle", "DragHandle", "Sigil", "SigilButton", "LayoutControl", "Tooltip", "side", "LayoutControls", "capabilities", "can", "isSolo", "pin", "close", "buttonClassNames", "ButtonGroup", "includes", "solo", "incrementStart", "incrementEnd", "data-testid"]
3
+ "sources": ["../../../src/components/Stack.tsx", "../../../src/components/StackContext.tsx", "../../../src/hooks/useStackDropForElements.ts", "../../../src/components/StackItem.tsx", "../../../src/components/StackItemContent.tsx", "../../../src/components/StackItemDragHandle.tsx", "../../../src/components/StackItemHeading.tsx", "../../../src/components/StackItemResizeHandle.tsx", "../../../src/components/StackItemSigil.tsx", "../../../src/components/MenuSignifier.tsx", "../../../src/translations.ts", "../../../src/components/LayoutControls.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\nimport React, { Children, type CSSProperties, type ComponentPropsWithRef, forwardRef, useState, useMemo } from 'react';\n\nimport { type ThemedClassName, ListItem } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type StackContextValue, StackContext } from './StackContext';\nimport { useStackDropForElements } from '../hooks';\n\nexport type Orientation = 'horizontal' | 'vertical';\nexport type Size = 'intrinsic' | 'contain' | 'contain-fit-content';\n\nexport type StackProps = Omit<ThemedClassName<ComponentPropsWithRef<'div'>>, 'aria-orientation'> &\n Partial<StackContextValue> & { itemsCount?: number };\n\nexport const railGridHorizontal = 'grid-rows-[[rail-start]_var(--rail-size)_[content-start]_1fr_[content-end]]';\nexport const railGridVertical = 'grid-cols-[[rail-start]_var(--rail-size)_[content-start]_1fr_[content-end]]';\n\n// TODO(ZaymonFC): Magic 2px to stop overflow (tabster dummies... ask @thure).\nexport const railGridHorizontalContainFitContent =\n 'grid-rows-[[rail-start]_var(--rail-size)_[content-start]_fit-content(calc(100%-var(--rail-size)*2+2px))_[content-end]]';\nexport const railGridVerticalContainFitContent =\n 'grid-cols-[[rail-start]_var(--rail-size)_[content-start]_fit-content(calc(100%-var(--rail-size)*2+2px))_[content-end]]';\n\nexport const autoScrollRootAttributes = { 'data-drag-autoscroll': 'idle' };\n\nexport const Stack = forwardRef<HTMLDivElement, StackProps>(\n (\n {\n children,\n classNames,\n style,\n orientation = 'vertical',\n rail = true,\n size = 'intrinsic',\n onRearrange,\n itemsCount = Children.count(children),\n ...props\n },\n forwardedRef,\n ) => {\n const [stackElement, stackRef] = useState<HTMLDivElement | null>(null);\n const composedItemRef = composeRefs<HTMLDivElement>(stackRef, forwardedRef);\n const arrowNavigationGroup = useArrowNavigationGroup({ axis: orientation });\n\n const styles: CSSProperties = {\n [orientation === 'horizontal' ? 'gridTemplateColumns' : 'gridTemplateRows']:\n `repeat(${itemsCount}, min-content) [tabster-dummies] 0`,\n ...style,\n };\n\n const selfDroppable = !!(itemsCount < 1 && onRearrange && props.id);\n\n const { dropping } = useStackDropForElements({\n id: props.id,\n element: stackElement,\n selfDroppable,\n orientation,\n onRearrange,\n });\n\n const gridClasses = useMemo(() => {\n if (!rail) {\n return orientation === 'horizontal' ? 'grid-rows-1 pli-1' : 'grid-cols-1 plb-1';\n }\n if (orientation === 'horizontal') {\n return size === 'contain-fit-content' ? railGridHorizontalContainFitContent : railGridHorizontal;\n } else {\n return size === 'contain-fit-content' ? railGridVerticalContainFitContent : railGridVertical;\n }\n }, [rail, orientation, size]);\n\n return (\n <StackContext.Provider value={{ orientation, rail, size, onRearrange }}>\n <div\n {...props}\n {...arrowNavigationGroup}\n className={mx(\n 'grid relative',\n gridClasses,\n (size === 'contain' || size === 'contain-fit-content') &&\n (orientation === 'horizontal'\n ? 'overflow-x-auto min-bs-0 bs-full max-bs-full'\n : 'overflow-y-auto min-is-0 is-full max-is-full'),\n classNames,\n )}\n data-rail={rail}\n aria-orientation={orientation}\n style={styles}\n ref={composedItemRef}\n >\n {children}\n {selfDroppable && dropping && (\n <ListItem.DropIndicator\n lineInset={8}\n terminalInset={-8}\n gap={-8}\n edge={orientation === 'horizontal' ? 'left' : 'top'}\n />\n )}\n </div>\n </StackContext.Provider>\n );\n },\n);\n\nexport { StackContext };\nexport type { StackContextValue };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type { Edge } from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';\nimport { createContext, useContext } from 'react';\n\nimport { type Size as DndSize } from '@dxos/react-ui-dnd';\n\nimport { type Orientation, type Size } from './Stack';\n\nexport type StackItemSize = DndSize;\n\nexport type StackItemData = { id: string; type: 'column' | 'card' };\n\nexport type StackItemRearrangeHandler = (\n source: StackItemData,\n target: StackItemData,\n closestEdge: Edge | null,\n) => void;\n\nexport type StackContextValue = {\n orientation: Orientation;\n rail: boolean;\n size: Size;\n onRearrange?: StackItemRearrangeHandler;\n};\n\nexport const StackContext = createContext<StackContextValue>({\n orientation: 'vertical',\n rail: true,\n size: 'intrinsic',\n});\n\nexport const useStack = () => useContext(StackContext);\n\nexport type StackItemContextValue = {\n selfDragHandleRef: (element: HTMLDivElement | null) => void;\n size: StackItemSize;\n setSize: (nextSize: StackItemSize, commit?: boolean) => void;\n};\n\nexport const StackItemContext = createContext<StackItemContextValue>({\n selfDragHandleRef: () => {},\n size: 'min-content',\n setSize: () => {},\n});\n\nexport const useStackItem = () => useContext(StackItemContext);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { autoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-scroll/element';\nimport { attachClosestEdge, extractClosestEdge } from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';\nimport { useLayoutEffect, useState } from 'react';\n\nimport { type Orientation } from '../components/Stack';\nimport { type StackItemRearrangeHandler, type StackItemData } from '../components/StackContext';\n\n/**\n * Hook to handle drag and drop functionality for Stack components.\n */\nexport const useStackDropForElements = ({\n element,\n selfDroppable,\n orientation,\n id,\n onRearrange,\n}: {\n element: HTMLDivElement | null;\n selfDroppable: boolean;\n orientation: Orientation;\n id?: string;\n onRearrange?: StackItemRearrangeHandler;\n}) => {\n const [dropping, setDropping] = useState(false);\n\n useLayoutEffect(() => {\n if (!element || !selfDroppable) {\n return;\n }\n\n const acceptSourceType = orientation === 'horizontal' ? 'column' : 'card';\n\n return combine(\n dropTargetForElements({\n element,\n getData: ({ input, element }) => {\n return attachClosestEdge(\n { id, type: orientation === 'horizontal' ? 'card' : 'column' },\n { input, element, allowedEdges: [orientation === 'horizontal' ? 'left' : 'top'] },\n );\n },\n onDragEnter: ({ source }) => {\n if (source.data.type === acceptSourceType) {\n setDropping(true);\n }\n },\n onDrag: ({ source }) => {\n if (source.data.type === acceptSourceType) {\n setDropping(true);\n }\n },\n onDragLeave: () => {\n return setDropping(false);\n },\n onDrop: ({ self, source }) => {\n setDropping(false);\n if (source.data.type === acceptSourceType && selfDroppable && onRearrange) {\n onRearrange(source.data as StackItemData, self.data as StackItemData, extractClosestEdge(self.data));\n }\n },\n }),\n autoScrollForElements({ element, getAllowedAxis: () => orientation }),\n );\n }, [element, selfDroppable, orientation, id, onRearrange]);\n\n return { dropping };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { draggable, dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { preserveOffsetOnSource } from '@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source';\nimport { scrollJustEnoughIntoView } from '@atlaskit/pragmatic-drag-and-drop/element/scroll-just-enough-into-view';\nimport {\n attachClosestEdge,\n extractClosestEdge,\n type Edge,\n} from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\nimport React, { forwardRef, useLayoutEffect, useState, type ComponentPropsWithRef, useCallback } from 'react';\n\nimport { type ThemedClassName, ListItem } from '@dxos/react-ui';\nimport { resizeAttributes, sizeStyle } from '@dxos/react-ui-dnd';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { useStack, StackItemContext, type StackItemSize, type StackItemData } from './StackContext';\nimport { StackItemContent, type StackItemContentProps } from './StackItemContent';\nimport { StackItemDragHandle, type StackItemDragHandleProps } from './StackItemDragHandle';\nimport {\n StackItemHeading,\n StackItemHeadingLabel,\n type StackItemHeadingProps,\n type StackItemHeadingLabelProps,\n} from './StackItemHeading';\nimport { StackItemResizeHandle, type StackItemResizeHandleProps } from './StackItemResizeHandle';\nimport {\n StackItemSigil,\n type StackItemSigilProps,\n type StackItemSigilAction,\n type StackItemSigilButtonProps,\n StackItemSigilButton,\n} from './StackItemSigil';\n\nexport const DEFAULT_HORIZONTAL_SIZE = 44 satisfies StackItemSize;\nexport const DEFAULT_VERTICAL_SIZE = 'min-content' satisfies StackItemSize;\nexport const DEFAULT_EXTRINSIC_SIZE = DEFAULT_HORIZONTAL_SIZE satisfies StackItemSize;\n\nexport type StackItemRootProps = ThemedClassName<ComponentPropsWithRef<'div'>> & {\n item: Omit<StackItemData, 'type'>;\n order?: number;\n size?: StackItemSize;\n onSizeChange?: (nextSize: StackItemSize) => void;\n role?: 'article' | 'section';\n disableRearrange?: boolean;\n focusIndicatorVariant?: 'over-all' | 'group';\n};\n\nconst StackItemRoot = forwardRef<HTMLDivElement, StackItemRootProps>(\n (\n {\n item,\n children,\n classNames,\n size: propsSize,\n onSizeChange,\n role,\n order,\n style,\n disableRearrange,\n focusIndicatorVariant = 'over-all',\n ...props\n },\n forwardedRef,\n ) => {\n const [itemElement, itemRef] = useState<HTMLDivElement | null>(null);\n const [selfDragHandleElement, selfDragHandleRef] = useState<HTMLDivElement | null>(null);\n const [closestEdge, setEdge] = useState<Edge | null>(null);\n const { orientation, rail, onRearrange } = useStack();\n const [size = orientation === 'horizontal' ? DEFAULT_HORIZONTAL_SIZE : DEFAULT_VERTICAL_SIZE, setInternalSize] =\n useState(propsSize);\n\n const Root = role ?? 'div';\n\n const composedItemRef = composeRefs<HTMLDivElement>(itemRef, forwardedRef);\n\n const setSize = useCallback(\n (nextSize: StackItemSize, commit?: boolean) => {\n setInternalSize(nextSize);\n if (commit) {\n onSizeChange?.(nextSize);\n }\n },\n [onSizeChange],\n );\n\n const type = orientation === 'horizontal' ? 'column' : 'card';\n\n useLayoutEffect(() => {\n if (!itemElement || !onRearrange || disableRearrange) {\n return;\n }\n return combine(\n draggable({\n element: itemElement,\n ...(selfDragHandleElement && { dragHandle: selfDragHandleElement }),\n getInitialData: () => ({ id: item.id, type }),\n onGenerateDragPreview: ({ nativeSetDragImage, source, location }) => {\n document.body.setAttribute('data-drag-preview', 'true');\n scrollJustEnoughIntoView({ element: source.element });\n const { x, y } = preserveOffsetOnSource({ element: source.element, input: location.current.input })({\n container: (source.element.offsetParent ?? document.body) as HTMLElement,\n });\n nativeSetDragImage?.(source.element, x, y);\n },\n onDragStart: () => {\n document.body.removeAttribute('data-drag-preview');\n itemElement?.closest('[data-drag-autoscroll]')?.setAttribute('data-drag-autoscroll', 'active');\n },\n onDrop: () => {\n itemElement?.closest('[data-drag-autoscroll]')?.setAttribute('data-drag-autoscroll', 'idle');\n },\n }),\n dropTargetForElements({\n element: itemElement,\n getData: ({ input, element }) => {\n return attachClosestEdge(\n { id: item.id, type },\n { input, element, allowedEdges: orientation === 'horizontal' ? ['left', 'right'] : ['top', 'bottom'] },\n );\n },\n onDragEnter: ({ self, source }) => {\n if (source.data.type === self.data.type) {\n setEdge(extractClosestEdge(self.data));\n }\n },\n onDrag: ({ self, source }) => {\n if (source.data.type === self.data.type) {\n setEdge(extractClosestEdge(self.data));\n }\n },\n onDragLeave: () => setEdge(null),\n onDrop: ({ self, source }) => {\n setEdge(null);\n if (source.data.type === self.data.type) {\n onRearrange(source.data as StackItemData, self.data as StackItemData, extractClosestEdge(self.data));\n }\n },\n }),\n );\n }, [orientation, item, onRearrange, selfDragHandleElement, itemElement]);\n\n const focusGroupAttrs = useFocusableGroup({ tabBehavior: 'limited' });\n\n return (\n <StackItemContext.Provider value={{ selfDragHandleRef, size, setSize }}>\n <Root\n {...props}\n tabIndex={0}\n {...focusGroupAttrs}\n className={mx(\n 'group/stack-item grid relative',\n focusIndicatorVariant === 'over-all'\n ? 'dx-focus-ring-inset-over-all'\n : orientation === 'horizontal'\n ? 'dx-focus-ring-group-x'\n : 'dx-focus-ring-group-y',\n orientation === 'horizontal' ? 'grid-rows-subgrid' : 'grid-cols-subgrid',\n rail && (orientation === 'horizontal' ? 'row-span-2' : 'col-span-2'),\n classNames,\n )}\n data-dx-stack-item\n {...resizeAttributes}\n style={{\n ...sizeStyle(size, orientation),\n ...(Number.isFinite(order) && {\n [orientation === 'horizontal' ? 'gridColumn' : 'gridRow']: `${order}`,\n }),\n ...style,\n }}\n ref={composedItemRef}\n >\n {children}\n {closestEdge && <ListItem.DropIndicator lineInset={8} terminalInset={-8} edge={closestEdge} />}\n </Root>\n </StackItemContext.Provider>\n );\n },\n);\n\nexport const StackItem = {\n Root: StackItemRoot,\n Content: StackItemContent,\n Heading: StackItemHeading,\n HeadingLabel: StackItemHeadingLabel,\n ResizeHandle: StackItemResizeHandle,\n DragHandle: StackItemDragHandle,\n Sigil: StackItemSigil,\n SigilButton: StackItemSigilButton,\n};\n\nexport type {\n StackItemContentProps,\n StackItemHeadingProps,\n StackItemHeadingLabelProps,\n StackItemResizeHandleProps,\n StackItemDragHandleProps,\n StackItemSigilProps,\n StackItemSigilButtonProps,\n StackItemSigilAction,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type ComponentPropsWithoutRef, forwardRef } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { useStack } from './StackContext';\n\nexport type StackItemContentProps = ThemedClassName<ComponentPropsWithoutRef<'div'>> & {\n /**\n * This flag is required in order to clarify a developer experience that seemed like it needed extra boilerplate\n * (`row-span-2`) or was buggy. See the description of the StackItem.Content component itself for more information.\n */\n toolbar: boolean;\n\n /**\n * Whether to provide for the layout of a statusbar after the content.\n */\n statusbar?: boolean;\n\n /**\n * Whether to set a certain aspect ratio on the content, including the toolbar and statusbar. This is provided for\n * convenience and consistency; it can instead be specified by the `classNames` or `style` props as needed.\n */\n size?: 'intrinsic' | 'video' | 'square';\n};\n\n/**\n * This component should be used by plugins for rendering content within a stack item, a.k.a. a “plank” or “section”.\n * The `toolbar` flag must be provided since this component provides for the layout of content with the toolbar.\n */\nexport const StackItemContent = forwardRef<HTMLDivElement, StackItemContentProps>(\n ({ children, toolbar, statusbar, classNames, size = 'intrinsic', ...props }, forwardedRef) => {\n const { size: stackItemSize } = useStack();\n\n return (\n <div\n role='none'\n {...props}\n className={mx(\n 'group grid grid-cols-[100%]',\n stackItemSize === 'contain' && 'min-bs-0 overflow-hidden',\n size === 'video' ? 'aspect-video' : size === 'square' && 'aspect-square',\n classNames,\n )}\n style={{\n gridTemplateRows: [\n ...(toolbar ? ['var(--rail-action)'] : []),\n '1fr',\n ...(statusbar ? ['var(--statusbar-size)'] : []),\n ].join(' '),\n }}\n ref={forwardedRef}\n >\n {children}\n </div>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Slot } from '@radix-ui/react-slot';\nimport React, { type ComponentPropsWithoutRef } from 'react';\n\nimport { useStackItem } from './StackContext';\n\nexport type StackItemDragHandleProps = ComponentPropsWithoutRef<'button'> & { asChild: boolean };\n\nexport const StackItemDragHandle = ({ asChild, children }: StackItemDragHandleProps) => {\n const { selfDragHandleRef } = useStackItem();\n\n const Root = asChild ? Slot : 'div';\n\n return (\n <Root ref={selfDragHandleRef} role='button'>\n {children}\n </Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport React, { type ComponentPropsWithoutRef, type ComponentPropsWithRef, forwardRef } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { useAttention, type AttendableId, type Related } from '@dxos/react-ui-attention';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { useStack } from './StackContext';\n\nexport type StackItemHeadingProps = ThemedClassName<ComponentPropsWithoutRef<'div'>>;\n\nexport const StackItemHeading = ({ children, classNames, ...props }: StackItemHeadingProps) => {\n const { orientation } = useStack();\n const focusableGroupAttrs = useFocusableGroup({ tabBehavior: 'limited' });\n return (\n <div\n role='heading'\n {...props}\n tabIndex={0}\n {...focusableGroupAttrs}\n className={mx(\n 'flex items-center dx-focus-ring-inset-over-all relative !border-is-0',\n orientation === 'horizontal' ? 'bs-[--rail-size]' : 'is-[--rail-size] flex-col',\n classNames,\n )}\n >\n {children}\n </div>\n );\n};\n\nexport type StackItemHeadingLabelProps = ThemedClassName<ComponentPropsWithRef<'h1'>> & AttendableId & Related;\n\nexport const StackItemHeadingLabel = forwardRef<HTMLHeadingElement, StackItemHeadingLabelProps>(\n ({ attendableId, related, classNames, ...props }, forwardedRef) => {\n const { hasAttention, isAncestor, isRelated } = useAttention(attendableId);\n return (\n <h1\n {...props}\n data-attention={((related && isRelated) || hasAttention || isAncestor).toString()}\n className={mx(\n 'pli-1 min-is-0 is-0 grow truncate font-medium text-baseText data-[attention=true]:text-accentText self-center',\n classNames,\n )}\n ref={forwardedRef}\n />\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { ResizeHandle } from '@dxos/react-ui-dnd';\n\nimport { useStack, useStackItem } from './StackContext';\nimport { DEFAULT_EXTRINSIC_SIZE } from './StackItem';\n\nconst MIN_WIDTH = 20;\nconst MIN_HEIGHT = 3;\n\nexport type StackItemResizeHandleProps = {};\n\nexport const StackItemResizeHandle = () => {\n const { orientation } = useStack();\n const { setSize, size } = useStackItem();\n\n return (\n <ResizeHandle\n side={orientation === 'horizontal' ? 'inline-end' : 'block-end'}\n fallbackSize={DEFAULT_EXTRINSIC_SIZE}\n minSize={orientation === 'horizontal' ? MIN_WIDTH : MIN_HEIGHT}\n size={size}\n onSizeChange={setSize}\n />\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { Fragment, type PropsWithChildren, forwardRef, useRef, useState } from 'react';\n\nimport { type ActionLike } from '@dxos/app-graph';\nimport { keySymbols } from '@dxos/keyboard';\nimport { Button, type ButtonProps, DropdownMenu, Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { type AttendableId, type Related, useAttention } from '@dxos/react-ui-attention';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\nimport { getHostPlatform } from '@dxos/util';\n\nimport { MenuSignifierHorizontal } from './MenuSignifier';\nimport { translationKey } from '../translations';\n\nexport type KeyBinding = {\n windows?: string;\n macos?: string;\n ios?: string;\n linux?: string;\n unknown?: string;\n};\n\nexport type StackItemSigilAction = Pick<ActionLike, 'id' | 'properties' | 'data'>;\n\nexport type StackItemSigilButtonProps = Omit<ButtonProps, 'variant'> & AttendableId & Related;\n\nexport const StackItemSigilButton = forwardRef<HTMLButtonElement, StackItemSigilButtonProps>(\n ({ attendableId, classNames, related, children, ...props }, forwardedRef) => {\n const { hasAttention, isAncestor, isRelated } = useAttention(attendableId);\n const variant = (related && isRelated) || hasAttention || isAncestor ? 'primary' : 'ghost';\n return (\n <Button\n {...props}\n variant={variant}\n classNames={['shrink-0 pli-0 min-bs-0 is-[--rail-action] bs-[--rail-action] relative app-no-drag', classNames]}\n ref={forwardedRef}\n >\n <MenuSignifierHorizontal />\n {children}\n </Button>\n );\n },\n);\n\nexport type StackItemSigilProps = PropsWithChildren<\n {\n attendableId?: string;\n triggerLabel: string;\n actions?: StackItemSigilAction[][];\n icon: string;\n onAction?: (action: StackItemSigilAction) => void;\n } & Related\n>;\n\nexport const StackItemSigil = forwardRef<HTMLButtonElement, StackItemSigilProps>(\n ({ actions: actionGroups, onAction, triggerLabel, attendableId, icon, related, children }, forwardedRef) => {\n const { t } = useTranslation(translationKey);\n const suppressNextTooltip = useRef(false);\n\n const [optionsMenuOpen, setOptionsMenuOpen] = useState(false);\n\n const hasActions = actionGroups && actionGroups.length > 0;\n\n const button = (\n <StackItemSigilButton\n attendableId={attendableId}\n related={related}\n // TODO(wittjosiah): Better disabling of interactive styles when no action are available.\n // Remove underscore icon when no actions are available?\n classNames={!hasActions && 'cursor-default'}\n >\n <span className='sr-only'>{triggerLabel}</span>\n <Icon icon={icon} size={5} />\n </StackItemSigilButton>\n );\n\n if (!hasActions) {\n return button;\n }\n\n return (\n <DropdownMenu.Root\n {...{\n open: optionsMenuOpen,\n onOpenChange: (nextOpen: boolean) => {\n if (!nextOpen) {\n suppressNextTooltip.current = true;\n }\n return setOptionsMenuOpen(nextOpen);\n },\n }}\n >\n <DropdownMenu.Trigger asChild ref={forwardedRef}>\n {button}\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content classNames='z-[31]'>\n <DropdownMenu.Viewport>\n {actionGroups?.map((actions, index) => {\n const separator = index > 0 ? <DropdownMenu.Separator /> : null;\n return (\n <Fragment key={index}>\n {separator}\n {actions.map((action) => {\n const shortcut =\n typeof action.properties.keyBinding === 'string'\n ? action.properties.keyBinding\n : action.properties.keyBinding?.[getHostPlatform()];\n\n const menuItemType = action.properties.menuItemType;\n const Root = menuItemType === 'toggle' ? DropdownMenu.CheckboxItem : DropdownMenu.Item;\n\n return (\n <Root\n key={action.id}\n onClick={(event) => {\n if (action.properties.disabled) {\n return;\n }\n event.stopPropagation();\n // TODO(thure): Why does Dialog’s modal-ness cause issues if we don’t explicitly close the menu here?\n suppressNextTooltip.current = true;\n setOptionsMenuOpen(false);\n onAction?.(action);\n }}\n classNames='gap-2'\n disabled={action.properties.disabled}\n checked={menuItemType === 'toggle' ? action.properties.isChecked : undefined}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n <Icon icon={action.properties.icon ?? 'ph--placeholder--regular'} size={4} />\n <span className='grow truncate'>{toLocalizedString(action.properties.label ?? '', t)}</span>\n {menuItemType === 'toggle' && (\n <DropdownMenu.ItemIndicator asChild>\n <Icon icon='ph--check--regular' size={4} />\n </DropdownMenu.ItemIndicator>\n )}\n {shortcut && (\n <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>\n )}\n </Root>\n );\n })}\n </Fragment>\n );\n })}\n {children}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nexport const MenuSignifierHorizontal = () => (\n <svg\n className='absolute block-end-[7px]'\n width={20}\n height={2}\n viewBox='0 0 20 2'\n stroke='currentColor'\n opacity={0.5}\n >\n <line\n x1={0.5}\n y1={0.75}\n x2={19}\n y2={0.75}\n strokeWidth={1.25}\n strokeLinecap='round'\n strokeDasharray='6 20'\n strokeDashoffset='-6.5'\n />\n </svg>\n);\n\nexport const MenuSignifierVertical = () => (\n <svg className='absolute inline-start-1' width={2} height={18} viewBox='0 0 2 18' stroke='currentColor'>\n <line x1={1} y1={3} x2={1} y2={18} strokeWidth={1.5} strokeLinecap='round' strokeDasharray='0 6' />\n </svg>\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const translationKey = 'stack';\n\nexport default [\n {\n 'en-US': {\n [translationKey]: {\n 'resize label': 'Drag to resize',\n 'pin start label': 'Pin to the left sidebar',\n 'pin end label': 'Pin to the right sidebar',\n 'increment start label': 'Move to the left',\n 'increment end label': 'Move to the right',\n 'close label': 'Close',\n 'minify label': 'Minify',\n },\n },\n },\n];\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { forwardRef } from 'react';\n\nimport {\n Button,\n ButtonGroup,\n type ButtonGroupProps,\n type ButtonProps,\n Icon,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\n\nimport { translationKey } from '../translations';\n\nexport type LayoutControlEvent = 'solo' | 'close' | `${'pin' | 'increment'}-${'start' | 'end'}`;\nexport type LayoutControlHandler = (event: LayoutControlEvent) => void;\n\nexport type LayoutCapabilities = {\n incrementStart?: boolean;\n incrementEnd?: boolean;\n solo?: boolean;\n};\n\nexport type LayoutControlsProps = Omit<ButtonGroupProps, 'onClick'> & {\n onClick?: LayoutControlHandler;\n variant?: 'hide-disabled' | 'default';\n close?: boolean | 'minify-start' | 'minify-end';\n capabilities: LayoutCapabilities;\n isSolo?: boolean;\n pin?: 'start' | 'end' | 'both';\n};\n\nconst LayoutControl = ({ icon, label, ...props }: Omit<ButtonProps, 'children'> & { label: string; icon: string }) => {\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button variant='ghost' {...props}>\n <span className='sr-only'>{label}</span>\n <Icon icon={icon} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='bottom'>{label}</Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\nexport const LayoutControls = forwardRef<HTMLDivElement, LayoutControlsProps>(\n (\n { onClick, variant = 'default', capabilities: can, isSolo, pin, close = false, children, ...props },\n forwardedRef,\n ) => {\n const { t } = useTranslation(translationKey);\n const buttonClassNames = variant === 'hide-disabled' ? 'disabled:hidden !p-1' : '!p-1';\n\n return (\n <ButtonGroup {...props} ref={forwardedRef}>\n {pin && !isSolo && ['both', 'start'].includes(pin) && (\n <LayoutControl\n label={t('pin start label')}\n variant='ghost'\n classNames={buttonClassNames}\n onClick={() => onClick?.('pin-start')}\n icon='ph--caret-line-left--regular'\n />\n )}\n\n {can.solo && (\n <LayoutControl\n label={t('solo layout label')}\n classNames={buttonClassNames}\n onClick={() => onClick?.('solo')}\n icon={isSolo ? 'ph--arrows-in--regular' : 'ph--arrows-out--regular'}\n />\n )}\n\n {!isSolo && can.solo && (\n <>\n <LayoutControl\n label={t('increment start label')}\n disabled={!can.incrementStart}\n classNames={buttonClassNames}\n onClick={() => onClick?.('increment-start')}\n icon='ph--caret-left--regular'\n />\n <LayoutControl\n label={t('increment end label')}\n disabled={!can.incrementEnd}\n classNames={buttonClassNames}\n onClick={() => onClick?.('increment-end')}\n icon='ph--caret-right--regular'\n />\n </>\n )}\n\n {pin && !isSolo && ['both', 'end'].includes(pin) && (\n <LayoutControl\n label={t('pin end label')}\n classNames={buttonClassNames}\n onClick={() => onClick?.('pin-end')}\n icon='ph--caret-line-right--regular'\n />\n )}\n\n {close && !isSolo && (\n <LayoutControl\n label={t(`${typeof close === 'string' ? 'minify' : 'close'} label`)}\n classNames={buttonClassNames}\n onClick={() => onClick?.('close')}\n data-testid='layoutHeading.close'\n icon={\n close === 'minify-start'\n ? 'ph--caret-line-left--regular'\n : close === 'minify-end'\n ? 'ph--caret-line-right--regular'\n : 'ph--x--regular'\n }\n />\n )}\n {children}\n </ButtonGroup>\n );\n },\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_combine", "import_adapter", "import_closest_edge", "import_react_tabster", "import_react_compose_refs", "import_react_ui", "import_react_ui_theme", "import_react_ui_dnd", "import_react_ui_attention", "StackContext", "createContext", "orientation", "rail", "size", "useStack", "useContext", "StackItemContext", "selfDragHandleRef", "setSize", "useStackItem", "useStackDropForElements", "element", "selfDroppable", "id", "onRearrange", "dropping", "setDropping", "useState", "useLayoutEffect", "acceptSourceType", "combine", "dropTargetForElements", "getData", "input", "attachClosestEdge", "type", "allowedEdges", "onDragEnter", "source", "data", "onDrag", "onDragLeave", "onDrop", "self", "extractClosestEdge", "autoScrollForElements", "getAllowedAxis", "railGridHorizontal", "railGridVertical", "railGridHorizontalContainFitContent", "railGridVerticalContainFitContent", "autoScrollRootAttributes", "Stack", "forwardRef", "children", "classNames", "style", "itemsCount", "Children", "count", "props", "forwardedRef", "stackElement", "stackRef", "composedItemRef", "composeRefs", "arrowNavigationGroup", "useArrowNavigationGroup", "axis", "styles", "gridClasses", "useMemo", "React", "Provider", "value", "div", "className", "mx", "data-rail", "aria-orientation", "ref", "ListItem", "DropIndicator", "lineInset", "terminalInset", "gap", "edge", "StackItemContent", "toolbar", "statusbar", "stackItemSize", "role", "gridTemplateRows", "join", "StackItemDragHandle", "asChild", "Root", "Slot", "StackItemHeading", "focusableGroupAttrs", "useFocusableGroup", "tabBehavior", "tabIndex", "StackItemHeadingLabel", "attendableId", "related", "hasAttention", "isAncestor", "isRelated", "useAttention", "h1", "data-attention", "toString", "MIN_WIDTH", "MIN_HEIGHT", "StackItemResizeHandle", "ResizeHandle", "side", "fallbackSize", "DEFAULT_EXTRINSIC_SIZE", "minSize", "onSizeChange", "MenuSignifierHorizontal", "svg", "width", "height", "viewBox", "stroke", "opacity", "line", "x1", "y1", "x2", "y2", "strokeWidth", "strokeLinecap", "strokeDasharray", "strokeDashoffset", "translationKey", "StackItemSigilButton", "variant", "Button", "StackItemSigil", "actions", "actionGroups", "onAction", "triggerLabel", "icon", "t", "useTranslation", "suppressNextTooltip", "useRef", "optionsMenuOpen", "setOptionsMenuOpen", "hasActions", "length", "button", "span", "Icon", "DropdownMenu", "open", "onOpenChange", "nextOpen", "current", "Trigger", "Portal", "Content", "Viewport", "map", "index", "separator", "Separator", "Fragment", "key", "action", "shortcut", "properties", "keyBinding", "getHostPlatform", "menuItemType", "CheckboxItem", "Item", "onClick", "event", "disabled", "stopPropagation", "checked", "isChecked", "undefined", "testId", "toLocalizedString", "label", "ItemIndicator", "descriptionText", "keySymbols", "Arrow", "DEFAULT_HORIZONTAL_SIZE", "DEFAULT_VERTICAL_SIZE", "StackItemRoot", "item", "propsSize", "order", "disableRearrange", "focusIndicatorVariant", "itemElement", "itemRef", "selfDragHandleElement", "closestEdge", "setEdge", "setInternalSize", "useCallback", "nextSize", "commit", "draggable", "dragHandle", "getInitialData", "onGenerateDragPreview", "nativeSetDragImage", "location", "document", "body", "setAttribute", "scrollJustEnoughIntoView", "x", "y", "preserveOffsetOnSource", "container", "offsetParent", "onDragStart", "removeAttribute", "closest", "focusGroupAttrs", "data-dx-stack-item", "resizeAttributes", "sizeStyle", "Number", "isFinite", "StackItem", "Heading", "HeadingLabel", "DragHandle", "Sigil", "SigilButton", "LayoutControl", "Tooltip", "LayoutControls", "capabilities", "can", "isSolo", "pin", "close", "buttonClassNames", "ButtonGroup", "includes", "solo", "incrementStart", "incrementEnd", "data-testid"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/ui/react-ui-stack/src/components/StackContext.tsx":{"bytes":3091,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-stack/src/components/Stack.tsx":{"bytes":13994,"imports":[{"path":"@atlaskit/pragmatic-drag-and-drop/element/adapter","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-compose-refs","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-stack/src/components/StackContext.tsx","kind":"import-statement","original":"./StackContext"}],"format":"esm"},"packages/ui/react-ui-stack/src/components/StackItemContent.tsx":{"bytes":5524,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-stack/src/components/StackContext.tsx","kind":"import-statement","original":"./StackContext"}],"format":"esm"},"packages/ui/react-ui-stack/src/components/StackItemDragHandle.tsx":{"bytes":2101,"imports":[{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-stack/src/components/StackContext.tsx","kind":"import-statement","original":"./StackContext"}],"format":"esm"},"packages/ui/react-ui-stack/src/components/StackItemHeading.tsx":{"bytes":5758,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-stack/src/components/StackContext.tsx","kind":"import-statement","original":"./StackContext"}],"format":"esm"},"packages/ui/react-ui-stack/src/components/StackItemResizeHandle.tsx":{"bytes":16102,"imports":[{"path":"@atlaskit/pragmatic-drag-and-drop/element/adapter","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/prevent-unhandled","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-stack/src/components/StackContext.tsx","kind":"import-statement","original":"./StackContext"},{"path":"packages/ui/react-ui-stack/src/components/StackItem.tsx","kind":"import-statement","original":"./StackItem"}],"format":"esm"},"packages/ui/react-ui-stack/src/components/MenuSignifier.tsx":{"bytes":3282,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-stack/src/translations.ts":{"bytes":1870,"imports":[],"format":"esm"},"packages/ui/react-ui-stack/src/components/StackItemSigil.tsx":{"bytes":18750,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-stack/src/components/MenuSignifier.tsx","kind":"import-statement","original":"./MenuSignifier"},{"path":"packages/ui/react-ui-stack/src/translations.ts","kind":"import-statement","original":"../translations"}],"format":"esm"},"packages/ui/react-ui-stack/src/components/StackItem.tsx":{"bytes":23131,"imports":[{"path":"@atlaskit/pragmatic-drag-and-drop/combine","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/adapter","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/scroll-just-enough-into-view","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-compose-refs","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-stack/src/components/StackContext.tsx","kind":"import-statement","original":"./StackContext"},{"path":"packages/ui/react-ui-stack/src/components/StackItemContent.tsx","kind":"import-statement","original":"./StackItemContent"},{"path":"packages/ui/react-ui-stack/src/components/StackItemDragHandle.tsx","kind":"import-statement","original":"./StackItemDragHandle"},{"path":"packages/ui/react-ui-stack/src/components/StackItemHeading.tsx","kind":"import-statement","original":"./StackItemHeading"},{"path":"packages/ui/react-ui-stack/src/components/StackItemResizeHandle.tsx","kind":"import-statement","original":"./StackItemResizeHandle"},{"path":"packages/ui/react-ui-stack/src/components/StackItemSigil.tsx","kind":"import-statement","original":"./StackItemSigil"}],"format":"esm"},"packages/ui/react-ui-stack/src/components/LayoutControls.tsx":{"bytes":11653,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-stack/src/translations.ts","kind":"import-statement","original":"../translations"}],"format":"esm"},"packages/ui/react-ui-stack/src/components/index.ts":{"bytes":801,"imports":[{"path":"packages/ui/react-ui-stack/src/components/Stack.tsx","kind":"import-statement","original":"./Stack"},{"path":"packages/ui/react-ui-stack/src/components/StackItem.tsx","kind":"import-statement","original":"./StackItem"},{"path":"packages/ui/react-ui-stack/src/components/LayoutControls.tsx","kind":"import-statement","original":"./LayoutControls"},{"path":"packages/ui/react-ui-stack/src/components/StackContext.tsx","kind":"import-statement","original":"./StackContext"}],"format":"esm"},"packages/ui/react-ui-stack/src/index.ts":{"bytes":718,"imports":[{"path":"packages/ui/react-ui-stack/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-stack/src/translations.ts","kind":"import-statement","original":"./translations"}],"format":"esm"},"packages/ui/react-ui-stack/src/testing/stack-manager.ts":{"bytes":7183,"imports":[],"format":"esm"},"packages/ui/react-ui-stack/src/testing/index.ts":{"bytes":519,"imports":[{"path":"packages/ui/react-ui-stack/src/testing/stack-manager.ts","kind":"import-statement","original":"./stack-manager"}],"format":"esm"}},"outputs":{"packages/ui/react-ui-stack/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":54972},"packages/ui/react-ui-stack/dist/lib/node/index.cjs":{"imports":[{"path":"@atlaskit/pragmatic-drag-and-drop/element/adapter","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-compose-refs","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/combine","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/adapter","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/scroll-just-enough-into-view","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-compose-refs","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/adapter","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/prevent-unhandled","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"exports":["DEFAULT_EXTRINSIC_SIZE","DEFAULT_HORIZONTAL_SIZE","DEFAULT_VERTICAL_SIZE","LayoutControls","Stack","StackContext","StackItem","StackItemContext","railGridHorizontal","railGridVertical","translations","useStack","useStackItem"],"entryPoint":"packages/ui/react-ui-stack/src/index.ts","inputs":{"packages/ui/react-ui-stack/src/components/Stack.tsx":{"bytesInOutput":3397},"packages/ui/react-ui-stack/src/components/StackContext.tsx":{"bytesInOutput":408},"packages/ui/react-ui-stack/src/components/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-stack/src/components/StackItem.tsx":{"bytesInOutput":5405},"packages/ui/react-ui-stack/src/components/StackItemContent.tsx":{"bytesInOutput":850},"packages/ui/react-ui-stack/src/components/StackItemDragHandle.tsx":{"bytesInOutput":335},"packages/ui/react-ui-stack/src/components/StackItemHeading.tsx":{"bytesInOutput":1286},"packages/ui/react-ui-stack/src/components/StackItemResizeHandle.tsx":{"bytesInOutput":4101},"packages/ui/react-ui-stack/src/components/StackItemSigil.tsx":{"bytesInOutput":4540},"packages/ui/react-ui-stack/src/components/MenuSignifier.tsx":{"bytesInOutput":442},"packages/ui/react-ui-stack/src/translations.ts":{"bytesInOutput":444},"packages/ui/react-ui-stack/src/components/LayoutControls.tsx":{"bytesInOutput":3014},"packages/ui/react-ui-stack/src/index.ts":{"bytesInOutput":0}},"bytes":25412},"packages/ui/react-ui-stack/dist/lib/node/testing/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3597},"packages/ui/react-ui-stack/dist/lib/node/testing/index.cjs":{"imports":[],"exports":["SectionManager","StackManager"],"entryPoint":"packages/ui/react-ui-stack/src/testing/index.ts","inputs":{"packages/ui/react-ui-stack/src/testing/stack-manager.ts":{"bytesInOutput":1516},"packages/ui/react-ui-stack/src/testing/index.ts":{"bytesInOutput":0}},"bytes":1655}}}
1
+ {"inputs":{"packages/ui/react-ui-stack/src/components/StackContext.tsx":{"bytes":3155,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-stack/src/hooks/useStackDropForElements.ts":{"bytes":8124,"imports":[{"path":"@atlaskit/pragmatic-drag-and-drop/combine","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/adapter","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop-auto-scroll/element","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-stack/src/hooks/index.ts":{"bytes":653,"imports":[{"path":"packages/ui/react-ui-stack/src/hooks/useStackDropForElements.ts","kind":"import-statement","original":"./useStackDropForElements"}],"format":"esm"},"packages/ui/react-ui-stack/src/components/Stack.tsx":{"bytes":12588,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-compose-refs","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-stack/src/components/StackContext.tsx","kind":"import-statement","original":"./StackContext"},{"path":"packages/ui/react-ui-stack/src/hooks/index.ts","kind":"import-statement","original":"../hooks"}],"format":"esm"},"packages/ui/react-ui-stack/src/components/StackItemContent.tsx":{"bytes":5528,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-stack/src/components/StackContext.tsx","kind":"import-statement","original":"./StackContext"}],"format":"esm"},"packages/ui/react-ui-stack/src/components/StackItemDragHandle.tsx":{"bytes":2101,"imports":[{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-stack/src/components/StackContext.tsx","kind":"import-statement","original":"./StackContext"}],"format":"esm"},"packages/ui/react-ui-stack/src/components/StackItemHeading.tsx":{"bytes":5758,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-stack/src/components/StackContext.tsx","kind":"import-statement","original":"./StackContext"}],"format":"esm"},"packages/ui/react-ui-stack/src/components/StackItemResizeHandle.tsx":{"bytes":2885,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-dnd","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-stack/src/components/StackContext.tsx","kind":"import-statement","original":"./StackContext"},{"path":"packages/ui/react-ui-stack/src/components/StackItem.tsx","kind":"import-statement","original":"./StackItem"}],"format":"esm"},"packages/ui/react-ui-stack/src/components/MenuSignifier.tsx":{"bytes":3282,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-stack/src/translations.ts":{"bytes":1870,"imports":[],"format":"esm"},"packages/ui/react-ui-stack/src/components/StackItemSigil.tsx":{"bytes":18750,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-stack/src/components/MenuSignifier.tsx","kind":"import-statement","original":"./MenuSignifier"},{"path":"packages/ui/react-ui-stack/src/translations.ts","kind":"import-statement","original":"../translations"}],"format":"esm"},"packages/ui/react-ui-stack/src/components/StackItem.tsx":{"bytes":24576,"imports":[{"path":"@atlaskit/pragmatic-drag-and-drop/combine","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/adapter","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/scroll-just-enough-into-view","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-compose-refs","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-dnd","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-stack/src/components/StackContext.tsx","kind":"import-statement","original":"./StackContext"},{"path":"packages/ui/react-ui-stack/src/components/StackItemContent.tsx","kind":"import-statement","original":"./StackItemContent"},{"path":"packages/ui/react-ui-stack/src/components/StackItemDragHandle.tsx","kind":"import-statement","original":"./StackItemDragHandle"},{"path":"packages/ui/react-ui-stack/src/components/StackItemHeading.tsx","kind":"import-statement","original":"./StackItemHeading"},{"path":"packages/ui/react-ui-stack/src/components/StackItemResizeHandle.tsx","kind":"import-statement","original":"./StackItemResizeHandle"},{"path":"packages/ui/react-ui-stack/src/components/StackItemSigil.tsx","kind":"import-statement","original":"./StackItemSigil"}],"format":"esm"},"packages/ui/react-ui-stack/src/components/LayoutControls.tsx":{"bytes":11653,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-stack/src/translations.ts","kind":"import-statement","original":"../translations"}],"format":"esm"},"packages/ui/react-ui-stack/src/components/index.ts":{"bytes":801,"imports":[{"path":"packages/ui/react-ui-stack/src/components/Stack.tsx","kind":"import-statement","original":"./Stack"},{"path":"packages/ui/react-ui-stack/src/components/StackItem.tsx","kind":"import-statement","original":"./StackItem"},{"path":"packages/ui/react-ui-stack/src/components/LayoutControls.tsx","kind":"import-statement","original":"./LayoutControls"},{"path":"packages/ui/react-ui-stack/src/components/StackContext.tsx","kind":"import-statement","original":"./StackContext"}],"format":"esm"},"packages/ui/react-ui-stack/src/index.ts":{"bytes":718,"imports":[{"path":"packages/ui/react-ui-stack/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-stack/src/translations.ts","kind":"import-statement","original":"./translations"}],"format":"esm"},"packages/ui/react-ui-stack/src/testing/stack-manager.ts":{"bytes":7183,"imports":[],"format":"esm"},"packages/ui/react-ui-stack/src/testing/index.ts":{"bytes":519,"imports":[{"path":"packages/ui/react-ui-stack/src/testing/stack-manager.ts","kind":"import-statement","original":"./stack-manager"}],"format":"esm"}},"outputs":{"packages/ui/react-ui-stack/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":52273},"packages/ui/react-ui-stack/dist/lib/node/index.cjs":{"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-compose-refs","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/combine","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/adapter","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop-auto-scroll/element","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/combine","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/adapter","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop/element/scroll-just-enough-into-view","kind":"import-statement","external":true},{"path":"@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-compose-refs","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-dnd","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-dnd","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"exports":["DEFAULT_EXTRINSIC_SIZE","DEFAULT_HORIZONTAL_SIZE","DEFAULT_VERTICAL_SIZE","LayoutControls","Stack","StackContext","StackItem","StackItemContext","autoScrollRootAttributes","railGridHorizontal","railGridHorizontalContainFitContent","railGridVertical","railGridVerticalContainFitContent","translations","useStack","useStackItem"],"entryPoint":"packages/ui/react-ui-stack/src/index.ts","inputs":{"packages/ui/react-ui-stack/src/components/Stack.tsx":{"bytesInOutput":2995},"packages/ui/react-ui-stack/src/components/StackContext.tsx":{"bytesInOutput":408},"packages/ui/react-ui-stack/src/hooks/useStackDropForElements.ts":{"bytesInOutput":1927},"packages/ui/react-ui-stack/src/hooks/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-stack/src/components/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-stack/src/components/StackItem.tsx":{"bytesInOutput":5764},"packages/ui/react-ui-stack/src/components/StackItemContent.tsx":{"bytesInOutput":850},"packages/ui/react-ui-stack/src/components/StackItemDragHandle.tsx":{"bytesInOutput":335},"packages/ui/react-ui-stack/src/components/StackItemHeading.tsx":{"bytesInOutput":1286},"packages/ui/react-ui-stack/src/components/StackItemResizeHandle.tsx":{"bytesInOutput":523},"packages/ui/react-ui-stack/src/components/StackItemSigil.tsx":{"bytesInOutput":4528},"packages/ui/react-ui-stack/src/components/MenuSignifier.tsx":{"bytesInOutput":442},"packages/ui/react-ui-stack/src/translations.ts":{"bytesInOutput":444},"packages/ui/react-ui-stack/src/components/LayoutControls.tsx":{"bytesInOutput":3014},"packages/ui/react-ui-stack/src/index.ts":{"bytesInOutput":0}},"bytes":23878},"packages/ui/react-ui-stack/dist/lib/node/testing/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3597},"packages/ui/react-ui-stack/dist/lib/node/testing/index.cjs":{"imports":[],"exports":["SectionManager","StackManager"],"entryPoint":"packages/ui/react-ui-stack/src/testing/index.ts","inputs":{"packages/ui/react-ui-stack/src/testing/stack-manager.ts":{"bytesInOutput":1516},"packages/ui/react-ui-stack/src/testing/index.ts":{"bytesInOutput":0}},"bytes":1655}}}