@dxos/react-ui-mosaic 0.8.4-main.937b3ca → 0.8.4-main.bc674ce

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/{chunk-QKMUWO5X.mjs → chunk-UMBPEG4F.mjs} +347 -236
  2. package/dist/lib/browser/chunk-UMBPEG4F.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +9 -3
  4. package/dist/lib/browser/index.mjs.map +1 -1
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +78 -185
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/{chunk-BYUYHEAX.mjs → chunk-X6GV7SMK.mjs} +347 -236
  9. package/dist/lib/node-esm/chunk-X6GV7SMK.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +9 -3
  11. package/dist/lib/node-esm/index.mjs.map +1 -1
  12. package/dist/lib/node-esm/meta.json +1 -1
  13. package/dist/lib/node-esm/testing/index.mjs +78 -185
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/Card/Card.d.ts +2 -1
  16. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  17. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -1
  18. package/dist/types/src/components/Mosaic/Mosaic.d.ts +8 -1
  19. package/dist/types/src/components/Mosaic/Mosaic.d.ts.map +1 -1
  20. package/dist/types/src/components/Scrollable/Scrollable.d.ts +11 -4
  21. package/dist/types/src/components/Scrollable/Scrollable.d.ts.map +1 -1
  22. package/dist/types/src/components/Scrollable/Scrollable.stories.d.ts +6 -4
  23. package/dist/types/src/components/Scrollable/Scrollable.stories.d.ts.map +1 -1
  24. package/dist/types/src/components/Stack/Stack.d.ts +4 -6
  25. package/dist/types/src/components/Stack/Stack.d.ts.map +1 -1
  26. package/dist/types/src/index.d.ts +1 -0
  27. package/dist/types/src/index.d.ts.map +1 -1
  28. package/dist/types/src/testing/Board.d.ts.map +1 -1
  29. package/dist/types/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +22 -22
  31. package/src/components/Card/Card.tsx +25 -2
  32. package/src/components/Focus/Focus.tsx +2 -0
  33. package/src/components/Mosaic/Mosaic.tsx +32 -33
  34. package/src/components/Scrollable/Scrollable.stories.tsx +34 -8
  35. package/src/components/Scrollable/Scrollable.tsx +7 -18
  36. package/src/components/Stack/Stack.stories.tsx +8 -8
  37. package/src/components/Stack/Stack.tsx +10 -10
  38. package/src/index.ts +1 -0
  39. package/src/testing/Board.tsx +11 -11
  40. package/src/testing/Virtualizer.stories.tsx +3 -3
  41. package/dist/lib/browser/chunk-QKMUWO5X.mjs.map +0 -7
  42. package/dist/lib/node-esm/chunk-BYUYHEAX.mjs.map +0 -7
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/Card/styles.ts", "../../../src/components/Image/Image.tsx", "../../../src/components/Card/Card.tsx", "../../../src/translations.ts", "../../../src/components/Focus/styles.ts", "../../../src/components/Focus/Focus.tsx", "../../../src/components/Mosaic/styles.ts", "../../../src/components/Mosaic/extension.ts", "../../../src/hooks/useContainerDebug.tsx", "../../../src/components/Mosaic/Mosaic.tsx", "../../../src/components/Scrollable/Scrollable.tsx", "../../../src/components/Stack/Stack.tsx", "../../../src/hooks/useEventHandlerAdapter.ts", "../../../src/hooks/useVisibleItems.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ClassNameValue } from '@dxos/react-ui';\n\nexport const styles = {\n root: 'group/card relative min-bs-[--rail-item] overflow-hidden is-full card-min-width __card-max-width',\n border:\n 'bg-cardSurface border border-separator dark:border-subduedSeparator rounded-sm dx-focus-ring-group-y-indicator',\n\n /**\n * Row grid.\n * NOTE: Rows should provide their own line padding (since they may need to encapsulate buttons, etc.)\n */\n grid_3: 'grid grid-cols-[var(--rail-item)_minmax(0,1fr)_var(--rail-item)] gap-x-1',\n grid_2: 'grid grid-cols-[var(--rail-item)_minmax(0,1fr)] gap-x-1',\n\n // TODO(burdon): Address density.\n grid_3_coarse: 'grid grid-cols-[var(--l0-avatar-size)_minmax(0,1fr)_var(--rail-item)] gap-x-1',\n\n poster: 'max-bs-[200px]',\n} satisfies Record<string, ClassNameValue>;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type SyntheticEvent, useCallback, useRef, useState } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nconst cache = new Map<string, string>();\n\nexport type ImageProps = ThemedClassName<\n {\n src: string;\n alt?: string;\n crossOrigin?: 'anonymous' | 'use-credentials' | '';\n } & ColorOptions\n>;\n\n// TODO(burdon): Option for neutral background color.\nexport const Image = ({\n classNames,\n src,\n alt = '',\n crossOrigin = 'anonymous',\n sampleSize = 64,\n contrast = 0.9,\n}: ImageProps) => {\n const [crossOriginState, setCrossOriginState] = useState<ImageProps['crossOrigin']>(crossOrigin);\n const [dominantColor, setDominantColor] = useState<string | undefined>(undefined);\n const [imageLoaded, setImageLoaded] = useState<boolean>(false);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n // CORS not supported by server.\n const handleImageError = (): void => {\n setCrossOriginState(undefined);\n };\n\n const handleImageLoad = useCallback(\n ({ target }: SyntheticEvent<HTMLImageElement>): void => {\n const rgb = cache.get(src);\n if (rgb) {\n setDominantColor(rgb);\n setImageLoaded(true);\n return;\n }\n\n const img = target as HTMLImageElement;\n if (!canvasRef.current) {\n return;\n }\n\n try {\n const color = extractDominantColor(canvasRef.current, img, { sampleSize, contrast });\n if (color) {\n const rgb = `rgb(${color[0]}, ${color[1]}, ${color[2]})`;\n cache.set(src, rgb);\n setDominantColor(rgb);\n }\n } catch {\n setCrossOriginState(undefined);\n }\n\n setImageLoaded(true);\n },\n [sampleSize, contrast, src],\n );\n\n return (\n <div\n className={mx(`relative flex is-full justify-center overflow-hidden transition-all duration-700`, classNames)}\n style={{\n backgroundColor: dominantColor,\n }}\n >\n {/* Hidden canvas for color extraction. */}\n <canvas ref={canvasRef} style={{ display: 'none' }} aria-hidden='true' />\n\n {/* Background gradient overlay for smooth transition. */}\n <div\n className='absolute inset-0 pointer-events-none'\n style={{\n background: dominantColor\n ? `radial-gradient(circle at center, transparent 30%, ${dominantColor} 100%)`\n : undefined,\n transition: 'opacity 0.7s ease-in-out',\n opacity: 0.5,\n }}\n />\n\n <img\n src={src}\n alt={alt}\n crossOrigin={crossOriginState}\n onError={handleImageError}\n onLoad={handleImageLoad}\n className={mx('z-10 object-contain transition-opacity duration-500', classNames)}\n style={{\n opacity: imageLoaded ? 1 : 0,\n }}\n />\n </div>\n );\n};\n\ntype ColorOptions = {\n sampleSize?: number;\n contrast?: number;\n};\n\n/**\n * Get dominant color from image (esp. from corners).\n */\nconst extractDominantColor = (\n canvas: HTMLCanvasElement,\n img: HTMLImageElement,\n { sampleSize = 64, contrast = 0.95 }: ColorOptions,\n): [number, number, number] | null => {\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return null;\n }\n\n // Draw the image scaled down.\n canvas.width = sampleSize;\n canvas.height = sampleSize;\n ctx.drawImage(img, 0, 0, sampleSize, sampleSize);\n\n // Get image data.\n const imageData = ctx.getImageData(0, 0, sampleSize, sampleSize);\n const pixels = imageData.data;\n\n // Check for transparent background.\n if (isTransparent(pixels, sampleSize)) {\n return null;\n }\n\n let r = 0;\n let g = 0;\n let b = 0;\n let totalWeight = 0;\n\n // Define corner sampling areas (e.g., 25% of each dimension from each corner).\n const cornerSize = Math.floor(sampleSize * 0.125);\n\n // Sample only pixels in corner areas.\n for (let y = 0; y < sampleSize; y++) {\n for (let x = 0; x < sampleSize; x++) {\n // Check if pixel is in any corner area.\n const isInTopLeft = x < cornerSize && y < cornerSize;\n const isInTopRight = x >= sampleSize - cornerSize && y < cornerSize;\n const isInBottomLeft = x < cornerSize && y >= sampleSize - cornerSize;\n const isInBottomRight = x >= sampleSize - cornerSize && y >= sampleSize - cornerSize;\n if (!isInTopLeft && !isInTopRight && !isInBottomLeft && !isInBottomRight) {\n continue; // Skip pixels not in corner areas.\n }\n\n const i = (y * sampleSize + x) * 4;\n const red = pixels[i];\n const green = pixels[i + 1];\n const blue = pixels[i + 2];\n const alpha = pixels[i + 3];\n\n // Skip transparent pixels.\n if (alpha === 0) continue;\n\n // Calculate saturation to weight vibrant colors more.\n const max = Math.max(red, green, blue);\n const min = Math.min(red, green, blue);\n const saturation = max === 0 ? 0 : (max - min) / max;\n const weight = 1 + saturation * 2;\n\n r += red * weight;\n g += green * weight;\n b += blue * weight;\n totalWeight += weight;\n }\n }\n\n if (totalWeight > 0) {\n // Slightly darken the color for better contrast.\n r = Math.round(Math.round(r / totalWeight) * contrast);\n g = Math.round(Math.round(g / totalWeight) * contrast);\n b = Math.round(Math.round(b / totalWeight) * contrast);\n return [r, g, b];\n }\n\n return null;\n};\n\n/**\n * Detects if an image has a transparent background by examining edge pixels.\n * @param pixels - Image pixel data from canvas\n * @param sampleSize - Size of the sampled image\n * @param threshold - Percentage threshold for considering background transparent (default: 0.5)\n * @returns True if the image has a transparent background\n */\nconst isTransparent = (pixels: Uint8ClampedArray, sampleSize: number, threshold: number = 0.5): boolean => {\n let edgeTransparentPixels = 0;\n const edgePixels = sampleSize * 4 - 4; // Perimeter minus corners counted twice.\n\n for (let x = 0; x < sampleSize; x++) {\n // Top edge.\n const topIndex = x * 4;\n if (pixels[topIndex + 3] === 0) edgeTransparentPixels++;\n\n // Bottom edge.\n const bottomIndex = ((sampleSize - 1) * sampleSize + x) * 4;\n if (pixels[bottomIndex + 3] === 0) edgeTransparentPixels++;\n }\n\n for (let y = 1; y < sampleSize - 1; y++) {\n // Left edge.\n const leftIndex = y * sampleSize * 4;\n if (pixels[leftIndex + 3] === 0) edgeTransparentPixels++;\n\n // Right edge.\n const rightIndex = (y * sampleSize + sampleSize - 1) * 4;\n if (pixels[rightIndex + 3] === 0) edgeTransparentPixels++;\n }\n\n return edgeTransparentPixels / edgePixels > threshold;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Slot } from '@radix-ui/react-slot';\nimport React, {\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type PropsWithChildren,\n createContext,\n forwardRef,\n useContext,\n} from 'react';\n\nimport {\n Button,\n type Density,\n DropdownMenu,\n Icon,\n type IconProps,\n type ThemedClassName,\n Toolbar,\n type ToolbarRootProps,\n useTranslation,\n} from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { translationKey } from '../../translations';\nimport { Image } from '../Image';\n\nimport { styles } from './styles';\n\ntype CardSharedProps = ThemedClassName<ComponentPropsWithoutRef<'div'>> & {\n asChild?: boolean;\n className?: string;\n};\n\n//\n// Context\n//\n\ntype CardContextValue = {\n menuItems?: CardMenuItem<any>[];\n};\n\n/** @deprecated Create context for menus. */\nconst CardContext = createContext<CardContextValue>({});\n\n//\n// Root\n//\n\ntype CardRootProps = CardSharedProps & {\n id?: string;\n border?: boolean;\n fullWidth?: boolean;\n};\n\nconst CardRoot = forwardRef<HTMLDivElement, CardRootProps>(\n (\n { children, classNames, className, id, asChild, role = 'group', border = true, fullWidth, ...props },\n forwardedRef,\n ) => {\n const Root = asChild ? Slot : 'div';\n\n return (\n <Root\n {...(id && { 'data-object-id': id })}\n {...props}\n role={role}\n className={mx(styles.root, border && styles.border, fullWidth && '!max-is-none', className, classNames)}\n ref={forwardedRef}\n >\n {children}\n </Root>\n );\n },\n);\n\n//\n// Toolbar\n//\n\ntype CardToolbarProps = ToolbarRootProps & {\n // TODO(burdon): Generalize: 1. systematic across theme; 2. should affect rows, etc.\n density?: Density;\n};\n\nconst CardToolbar = forwardRef<HTMLDivElement, CardToolbarProps>(\n ({ children, classNames, density = 'fine', ...props }, forwardedRef) => {\n return (\n <Toolbar.Root\n {...props}\n classNames={[\n 'density-fine bg-transparent',\n density === 'fine' ? styles.grid_3 : styles.grid_3_coarse,\n classNames,\n ]}\n ref={forwardedRef}\n >\n {children}\n </Toolbar.Root>\n );\n },\n);\n\nconst CardToolbarIconButton = Toolbar.IconButton;\nconst CardToolbarSeparator = Toolbar.Separator;\n\n//\n// DragHandle\n//\n\ntype CardDragHandleProps = {};\n\nconst CardDragHandle = forwardRef<HTMLButtonElement, CardDragHandleProps>((_, forwardedRef) => {\n const { t } = useTranslation(translationKey);\n\n return (\n <Toolbar.IconButton\n data-testid='card-drag-handle'\n noTooltip\n iconOnly\n icon='ph--dots-six-vertical--regular'\n variant='ghost'\n label={t('drag handle label')}\n classNames='cursor-pointer'\n size={5}\n disabled={!forwardedRef}\n ref={forwardedRef}\n />\n );\n});\n\n//\n// Close\n//\n\ntype CardCloseProps = { onClick?: () => void };\n\nconst CardClose = forwardRef<HTMLButtonElement, CardCloseProps>(({ onClick }, forwardedRef) => {\n const { t } = useTranslation(translationKey);\n\n return (\n <Toolbar.IconButton\n iconOnly\n icon='ph--x--regular'\n variant='ghost'\n label={t('card close label')}\n classNames='cursor-pointer'\n size={5}\n onClick={onClick}\n ref={forwardedRef}\n />\n );\n});\n\n//\n// Menu\n//\n\ntype CardMenuItem<T extends any | void = void> = {\n label: string;\n onClick: (context: T) => void;\n};\n\ntype CardMenuProps<T extends any | void = void> = {\n context?: T;\n items?: CardMenuItem<T>[];\n};\n\nconst CardMenu = <T extends any | void = void>({ context, items }: CardMenuProps<T>) => {\n const { t } = useTranslation(translationKey);\n const { menuItems } = useContext(CardContext) ?? {};\n const combinedItems = [...(items ?? []), ...((menuItems as CardMenuItem<T>[]) ?? [])];\n\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger disabled={!combinedItems.length} asChild>\n <Card.ToolbarIconButton\n iconOnly\n variant='ghost'\n icon='ph--dots-three-vertical--regular'\n label={t('action menu label')}\n />\n </DropdownMenu.Trigger>\n {(combinedItems?.length ?? 0) > 0 && (\n <DropdownMenu.Portal>\n <DropdownMenu.Content>\n <DropdownMenu.Viewport>\n {combinedItems?.map(({ label, onClick: onSelect }, i) => (\n <DropdownMenu.Item key={i} onSelect={() => onSelect(context as T)}>\n {label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n )}\n </DropdownMenu.Root>\n );\n};\n\n//\n// Title\n//\n\ntype CardTitleProps = CardSharedProps;\n\nconst CardTitle = forwardRef<HTMLDivElement, CardTitleProps>(\n ({ children, classNames, className, asChild, role = 'heading', ...props }, forwardedRef) => {\n const Root = asChild ? Slot : 'div';\n\n return (\n <Root {...props} role={role} className={mx('grow truncate', classNames, className)} ref={forwardedRef}>\n {children}\n </Root>\n );\n },\n);\n\n//\n// Content\n// TODO(burdon): Root for card--content role (possibly multiple).\n// - Able to add menu options/set title, etc. via context.\n// TODO(burdon): Consider collapsible sections (surfaces).\n//\n\ntype CardContentProps = PropsWithChildren;\n\nconst CardContent = forwardRef<HTMLDivElement, CardContentProps>(({ children, ...props }, forwardedRef) => {\n return (\n <div role='none' className='contents [&>:last-child]:pbe-1' {...props} ref={forwardedRef}>\n {children}\n </div>\n );\n});\n\n//\n// Row\n//\n\ntype CardRowProps = CardSharedProps & { icon?: string };\n\nconst CardRow = forwardRef<HTMLDivElement, CardRowProps>(\n ({ children, classNames, className, role = 'none', icon, ...props }, forwardedRef) => {\n return (\n <div {...props} role={role} className={mx(styles.grid_2, 'pli-1', classNames, className)} ref={forwardedRef}>\n {(icon && <CardIcon classNames='text-subdued' icon={icon} />) || <div />}\n {children}\n </div>\n );\n },\n);\n\n//\n// Heading\n//\n\ntype CardHeadingProps = CardSharedProps & { variant?: 'default' | 'subtitle' };\n\nconst CardHeading = forwardRef<HTMLDivElement, CardHeadingProps>(\n ({ children, classNames, className, asChild, role = 'heading', variant = 'default', ...props }, forwardedRef) => {\n const Root = asChild ? Slot : 'div';\n // NOTE: Padding align first line of text with center of icon.\n const variantClassNames: Record<string, string> = {\n default: 'plb-1',\n subtitle: 'plb-2 text-xs text-description font-medium uppercase',\n };\n\n return (\n <Root {...props} role={role} className={mx(variantClassNames[variant], classNames, className)} ref={forwardedRef}>\n {children}\n </Root>\n );\n },\n);\n\n//\n// Text\n//\n\ntype CardTextProps = CardSharedProps & { truncate?: boolean; variant?: 'default' | 'description' };\n\nconst CardText = forwardRef<HTMLDivElement, CardTextProps>(\n (\n { children, classNames, className, asChild, role = 'none', truncate, variant = 'default', ...props },\n forwardedRef,\n ) => {\n const Root = asChild ? Slot : 'div';\n // NOTE: Padding align first line of text with center of icon.\n const variantClassNames: Record<string, { root: string; span?: string }> = {\n default: {\n root: 'plb-1',\n },\n description: {\n root: 'plb-1.5',\n span: 'text-sm text-description line-clamp-3',\n },\n };\n\n return (\n <Root\n {...props}\n role={role}\n className={mx('flex overflow-hidden', variantClassNames[variant].root, classNames, className)}\n ref={forwardedRef}\n >\n <span className={mx(variantClassNames[variant].span, truncate && 'truncate')}>{children}</span>\n </Root>\n );\n },\n);\n\n//\n// Poster\n//\n\ntype CardPosterProps = ThemedClassName<\n {\n alt: string;\n aspect?: 'video' | 'auto';\n } & Partial<{ image: string; icon: string }>\n>;\n\nconst CardPoster = (props: CardPosterProps) => {\n const aspect = props.aspect === 'auto' ? 'aspect-auto' : 'aspect-video';\n if (props.image) {\n return (\n <div role='none' className='mbe-1'>\n <Image classNames={[styles.poster, aspect, props.classNames]} src={props.image} alt={props.alt} />\n </div>\n );\n }\n\n if (props.icon) {\n return (\n <div\n role='image'\n className={mx('grid place-items-center bg-inputSurface text-subdued', styles.poster, aspect, props.classNames)}\n aria-label={props.alt}\n >\n <Icon icon={props.icon} size={10} />\n </div>\n );\n }\n};\n\n//\n// Action\n//\n\ntype CardActionProps = { icon?: string; label: string; actionIcon?: string; onClick?: () => void };\n\nconst CardAction = ({ icon, actionIcon = 'ph--arrow-right--regular', label, onClick }: CardActionProps) => {\n return (\n <div role='none' className='is-full pli-1'>\n <Button\n variant='ghost'\n classNames={mx(styles.grid_3, '!p-0 is-full text-start overflow-hidden')}\n onClick={onClick}\n >\n {icon ? <CardIcon classNames='text-subdued' icon={icon} /> : <div />}\n <span className={mx('min-is-0 flex-1 truncate', !actionIcon && 'col-span-2')}>{label}</span>\n {actionIcon && <CardIcon icon={actionIcon} />}\n </Button>\n </div>\n );\n};\n\n//\n// Link\n//\n\ntype CardLinkProps = { label: string; href: string };\n\nconst CardLink = ({ label, href }: CardLinkProps) => {\n return (\n <div role='none' className='is-full pli-1'>\n <a\n className={mx(styles.grid_3, 'group !p-0 dx-button dx-focus-ring !min-bs-1')}\n data-variant='ghost'\n href={href}\n target='_blank'\n rel='noreferrer'\n >\n <CardIcon classNames='text-subdued' icon='ph--link--regular' />\n <span className={mx('min-is-0 flex-1 truncate')}>{label}</span>\n <CardIcon classNames='invisible group-hover:visible' icon='ph--arrow-square-out--regular' />\n </a>\n </div>\n );\n};\n\n//\n// IconBlock\n//\n\nconst CardIconBlock = ({\n classNames,\n children,\n role = 'none',\n ...props\n}: ThemedClassName<PropsWithChildren<HTMLAttributes<HTMLDivElement>>>) => {\n return (\n <div\n {...props}\n role={role}\n className={mx('grid bs-[var(--rail-item)] is-[var(--rail-item)] place-items-center', classNames)}\n >\n {children}\n </div>\n );\n};\n\n//\n// Icon\n//\n\nconst CardIcon = ({ toolbar, ...props }: IconProps & { toolbar?: boolean }) => {\n return (\n <CardIconBlock>\n <Icon {...props} size={toolbar ? 5 : 4} />\n </CardIconBlock>\n );\n};\n\n//\n// Card\n//\n\nexport const Card = {\n Context: CardContext,\n Root: CardRoot,\n\n // Toolbar\n Toolbar: CardToolbar,\n ToolbarIconButton: CardToolbarIconButton,\n ToolbarSeparator: CardToolbarSeparator,\n DragHandle: CardDragHandle,\n Title: CardTitle,\n Close: CardClose,\n Menu: CardMenu,\n Icon: CardIcon,\n IconBlock: CardIconBlock,\n\n // Content\n Content: CardContent,\n Row: CardRow,\n Heading: CardHeading,\n Text: CardText,\n Poster: CardPoster,\n Action: CardAction,\n Link: CardLink,\n};\n\nexport type { CardContextValue, CardRootProps, CardToolbarProps, CardMenuProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Resource } from '@dxos/react-ui';\n\nexport const translationKey = '@dxos/react-ui-mosaic';\n\nexport const translations = [\n {\n 'en-US': {\n [translationKey]: {},\n },\n },\n] as const satisfies Resource[];\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { type ClassNameValue } from '@dxos/react-ui';\n\n// TODO(burdon): Theme?\nexport const styles = {\n container: {\n // TODO(burdon): Handle selection (aria-current?)\n // TODO(burdon): Use ring instead of border?\n root: [\n 'outline-none border border-separator rounded-sm',\n // Focus (e.g., via tabster).\n // TODO(burdon): Why is ! required?\n 'focus:!border-accentSurface',\n // Active (e.g., drop target).\n 'data-[focus-state=active]:border-neutralFocusIndicator',\n // Error\n // TODO(burdon): Error token.\n 'data-[focus-state=error]:border-rose-500',\n ],\n },\n} satisfies Record<string, Record<string, ClassNameValue>>;\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport {\n type UseArrowNavigationGroupOptions,\n useArrowNavigationGroup,\n useFocusableGroup,\n useMergedTabsterAttributes_unstable,\n} from '@fluentui/react-tabster';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Slot } from '@radix-ui/react-slot';\nimport React, { type PropsWithChildren, createContext, forwardRef, useContext, useRef, useState } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { styles } from './styles';\n\n//\n// Context\n//\n\ntype FocusState = 'active' | 'error';\n\nconst FOCUS_STATE_ATTR = 'focus-state';\n\ntype ContextValue = {\n setFocus?: (state: FocusState | undefined) => void;\n};\n\nconst FocusContext = createContext<ContextValue>({});\n\nconst useFocus = () => useContext(FocusContext);\n\n//\n// Group\n//\n\ntype GroupProps = ThemedClassName<\n PropsWithChildren<\n {\n asChild?: boolean;\n } & Pick<UseArrowNavigationGroupOptions, 'axis'>\n >\n> & { className?: string };\n\n// TODO(wittjosiah): Consider how this could integrate with with react-ui-attention.\n// Perhaps react-ui-attention comes under the mosaic umbrella as it supports selection?\nconst Group = forwardRef<HTMLDivElement, GroupProps>(\n ({ classNames, className, children, asChild, axis = 'vertical', ...props }: GroupProps, forwardedRef) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const composedRef = useComposedRefs<HTMLDivElement>(rootRef, forwardedRef);\n const Root = asChild ? Slot : Primitive.div;\n\n // TODO(burdon): Configure.\n const focusableGroupAttrs = useFocusableGroup({\n tabBehavior: 'limited-trap-focus',\n });\n const arrowNavigationAttrs = useArrowNavigationGroup({\n axis,\n memorizeCurrent: true,\n });\n const tabsterAttrs = useMergedTabsterAttributes_unstable(focusableGroupAttrs, arrowNavigationAttrs);\n const [state, setState] = useState<FocusState | undefined>();\n\n return (\n <FocusContext.Provider value={{ setFocus: setState }}>\n <Root\n tabIndex={0}\n className={mx(styles.container.root, className, classNames)}\n {...tabsterAttrs}\n {...(state && {\n [`data-${FOCUS_STATE_ATTR}`]: state,\n })}\n {...props}\n ref={composedRef}\n >\n {children}\n </Root>\n </FocusContext.Provider>\n );\n },\n);\n\n//\n// Focus\n//\n\nexport const Focus = {\n Group,\n};\n\nexport type { GroupProps as FocusGroupProps };\n\nexport { useFocus };\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { type ClassNameValue } from '@dxos/react-ui';\n\nexport const styles = {\n placeholder: {\n root: [\n 'group opacity-0',\n 'group-data-[mosaic-debug=\"true\"]:opacity-100',\n 'group-data-[mosaic-debug=\"true\"]:bg-orange-500',\n 'data-[mosaic-placeholder-state=active]:opacity-100',\n 'data-[mosaic-placeholder-axis=vertical]:plb-1',\n 'data-[mosaic-placeholder-axis=vertical]:data-[mosaic-placeholder-state=active]:plb-2.5',\n 'data-[mosaic-placeholder-axis=horizontal]:pli-1',\n 'data-[mosaic-placeholder-axis=horizontal]:data-[mosaic-placeholder-state=active]:pli-2.5',\n ],\n content: [\n 'transition-all duration-0',\n // TODO(burdon): Don't animate open if placeholder is the source.\n // TODO(burdon): Flickers when start to drag since source is removed and then the placeholder shows up.\n // - Use absolute positioning?\n // 'group-data-[mosaic-placeholder-state=active]:duration-200',\n 'group-data-[mosaic-placeholder-axis=vertical]:bs-0',\n 'group-data-[mosaic-placeholder-axis=horizontal]:is-0',\n 'group-data-[mosaic-placeholder-axis=vertical]:group-data-[mosaic-placeholder-state=active]:bs-[var(--mosaic-placeholder-height)]',\n 'group-data-[mosaic-placeholder-axis=horizontal]:group-data-[mosaic-placeholder-state=active]:is-[var(--mosaic-placeholder-width)]',\n ],\n },\n} satisfies Record<string, Record<string, ClassNameValue>>;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Extension, StateEffect, StateField } from '@codemirror/state';\nimport { Decoration, type DecorationSet, EditorView, ViewPlugin, WidgetType } from '@codemirror/view';\n\nexport type DropHandlerEvent = {\n text: string;\n url: string;\n};\n\nexport type DropHandlerOptions = {\n onDrop?: (view: EditorView, pos: number, event: DropHandlerEvent) => void;\n};\n\nexport type DropHandler = {\n extension: Extension;\n update: (position: { x: number; y: number } | null) => void;\n cancel: () => void;\n drop: (event: DropHandlerEvent) => void;\n};\n\nexport const dropHandler = ({ onDrop = handleDrop }: DropHandlerOptions = {}): DropHandler => {\n const views = new Set<EditorView>();\n let state: { view: EditorView; pos: number } | null = null;\n\n const reset = () => {\n views.forEach((view) => view.dispatch({ effects: setDrop.of(null) }));\n state = null;\n };\n\n const extension: Extension = [\n dropField,\n ViewPlugin.fromClass(\n class {\n constructor(readonly _view: EditorView) {\n views.add(_view);\n }\n\n destroy() {\n views.delete(this._view);\n }\n },\n ),\n ];\n\n return {\n extension,\n update: (position: { x: number; y: number } | null) => {\n if (!position) {\n reset();\n return;\n }\n\n views.forEach((view) => {\n const rect = view.dom.getBoundingClientRect();\n if (\n position.x >= rect.left &&\n position.x <= rect.right &&\n position.y >= rect.top &&\n position.y <= rect.bottom\n ) {\n let pos = view.posAtCoords(position);\n if (pos !== null) {\n const word = view.state.wordAt(pos);\n if (word) {\n const startDist = Math.abs(pos - word.from);\n const endDist = Math.abs(pos - word.to);\n pos = startDist < endDist ? word.from : word.to;\n }\n\n view.dispatch({ effects: setDrop.of(pos) });\n state = { view, pos };\n return;\n }\n }\n\n view.dispatch({ effects: setDrop.of(null) });\n });\n },\n cancel: () => {\n reset();\n },\n drop: ({ text, url }) => {\n if (state) {\n onDrop(state.view, state.pos, { text, url });\n }\n\n reset();\n },\n } satisfies DropHandler;\n};\n\nconst handleDrop = (view: EditorView, pos: number, event: DropHandlerEvent) => {\n const line = view.state.doc.lineAt(pos);\n if (line.text.trim() === '') {\n view.dispatch({\n changes: { from: pos, insert: `\\n![${event.text}](${event.url})\\n` },\n effects: setDrop.of(null),\n });\n } else {\n view.dispatch({\n changes: { from: pos, insert: ` [${event.text}](${event.url})` },\n effects: setDrop.of(null),\n });\n }\n};\n\nconst setDrop = StateEffect.define<number | null>();\n\nconst dropField = StateField.define<DecorationSet>({\n create: () => Decoration.none,\n update: (decorations, tr) => {\n for (const effect of tr.effects) {\n if (effect.is(setDrop)) {\n if (effect.value === null) {\n return Decoration.none;\n }\n return Decoration.set([\n Decoration.widget({\n widget: new (class extends WidgetType {\n toDOM() {\n const dom = document.createElement('span');\n dom.className = 'cm-drop-cursor';\n dom.style.borderLeft = '2px solid var(--dx-accentSurface)';\n dom.style.display = 'inline-block';\n dom.style.height = '1em';\n dom.style.verticalAlign = 'middle';\n return dom;\n }\n })(),\n side: 0,\n }).range(effect.value),\n ]);\n }\n }\n return decorations.map(tr.changes);\n },\n provide: (field) => EditorView.decorations.from(field),\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC, type ReactNode, forwardRef, useMemo, useRef } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { Json } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/ui-theme';\n\nimport { useMosaicContainer } from '../components';\n\nexport type UseContainerDebug = [FC<ThemedClassName>, (() => ReactNode) | undefined];\n\n/**\n * Hook that returns a component to be rendered in the container's viewport (within the context),\n * and a component that creates a portal in the container's debug area.\n */\nexport const useContainerDebug = (debug?: boolean): UseContainerDebug => {\n const debugRef = useRef<HTMLDivElement | null>(null);\n return useMemo(() => {\n if (!debug) {\n return [() => null, undefined];\n }\n\n return [\n ({ classNames }) => <div role='none' className={mx('overflow-hidden', classNames)} ref={debugRef} />,\n () => debugRef.current && createPortal(<ContainerInfo />, debugRef.current),\n ];\n }, [debug, debugRef]);\n};\n\nconst ContainerInfo = forwardRef<HTMLDivElement, ThemedClassName>(({ classNames }, forwardedRef) => {\n const { id, state, activeLocation, scrolling } = useMosaicContainer(ContainerInfo.displayName!);\n const counter = useRef(0);\n return (\n <Json\n data={{ id, activeLocation, scrolling, state, count: counter.current++ }}\n classNames={mx('text-xs', classNames)}\n ref={forwardedRef}\n />\n );\n});\n\nContainerInfo.displayName = 'ContainerInfo';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport {\n type ElementDragPayload,\n draggable,\n dropTargetForElements,\n monitorForElements,\n} from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { preserveOffsetOnSource } from '@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source';\nimport { setCustomNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/element/set-custom-native-drag-preview';\nimport { type DragLocationHistory, type DropTargetRecord } from '@atlaskit/pragmatic-drag-and-drop/types';\nimport { autoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-scroll/element';\nimport {\n type Edge,\n attachClosestEdge,\n extractClosestEdge,\n} from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';\nimport {\n DropIndicator as NativeDropIndicator,\n type DropIndicatorProps as NativeDropIndicatorProps,\n} from '@atlaskit/pragmatic-drag-and-drop-react-drop-indicator/box';\nimport { composeRefs, useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContext } from '@radix-ui/react-context';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Slot } from '@radix-ui/react-slot';\nimport { bind } from 'bind-event-listener';\nimport React, {\n type CSSProperties,\n type PropsWithChildren,\n type ReactNode,\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { log } from '@dxos/log';\nimport { type SlottableClassName, type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\nimport { isTruthy } from '@dxos/util';\n\nimport { useFocus } from '../Focus';\nimport { Scrollable, type ScrollableProps } from '../Scrollable';\nimport { Stack, type StackProps, VirtualStack } from '../Stack';\n\nimport {\n type AllowedAxis,\n type Axis,\n type MosaicContainerData,\n type MosaicData,\n type MosaicEventHandler,\n type MosaicPlaceholderData,\n type MosaicTileData,\n} from './types';\n\n//\n// Mosaic Drag-and-drop\n//\n// Drop targets:\n// - Placeholders exist to allow gaps but prevent deadspace when dragging within a container.\n// - When dragging over a Tile, the placeholder next to the closest edge is activated.\n// - Placeholders expand when active; event handlers are disabled while the container is scrolling.\n//\n// [Container]\n// - [Placeholder 0.5]\n// - [Tile 1 ]\n// - [Placeholder 1.5]\n// - [Tile 2 ]\n// - [Placeholder 2.5]\n// - [Tile 3 ]\n// - [Placeholder 3.5]\n//\n// Implementation Notes\n// - We use [Radix composition](https://www.radix-ui.com/primitives/docs/guides/composition) to factor out composible aspects (e.g., Focus, Mosaic, etc.)\n// - NOTE: Use Slottable only if needed to disambiguate; otherwise a suspected Radix bug causes compositional problems.\n\n//\n// Types\n//\n\nconst getSourceData = <TData = any, TLocation = any>(\n source: ElementDragPayload,\n): MosaicTileData<TData, TLocation> | null => {\n return source.data.type === 'tile' ? (source.data as MosaicTileData<TData, TLocation>) : null;\n};\n\n//\n// Context\n//\n\ntype DraggingSource = {\n data: MosaicTileData;\n handler?: MosaicEventHandler;\n container?: Element;\n};\n\ntype DraggingTarget = {\n data: MosaicData;\n handler?: MosaicEventHandler;\n};\n\ntype DraggingState = {\n source: DraggingSource;\n target?: DraggingTarget;\n};\n\ntype RootContextValue = {\n containers: Record<string, MosaicEventHandler>;\n addContainer: (container: MosaicEventHandler) => void;\n removeContainer: (id: string) => void;\n dragging?: DraggingState;\n};\n\nconst [RootContextProvider, useRootContext] = createContext<RootContextValue>('MosaicRoot');\n\n//\n// Root\n//\n\n// State attribute: [&:has(>_[data-mosaic-debug=true])]\nconst ROOT_DEBUG_ATTR = 'mosaic-debug';\n\ntype RootProps = ThemedClassName<PropsWithChildren<{ asChild?: boolean; debug?: boolean }>>;\n\nconst Root = forwardRef<HTMLDivElement, RootProps>(({ classNames, children, asChild, debug }, forwardedRef) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const composedRef = useComposedRefs<HTMLDivElement>(rootRef, forwardedRef);\n const Root = asChild ? Slot : Primitive.div;\n\n const [handlers, setHandlers] = useState<Record<string, MosaicEventHandler>>({});\n const [dragging, setDragging] = useState<DraggingState | undefined>();\n\n const getSourceHandler = useCallback(\n (source: ElementDragPayload): { data: MosaicTileData; handler?: MosaicEventHandler } => {\n const data = source.data as MosaicTileData;\n return { data, handler: handlers[data.containerId] };\n },\n [handlers],\n );\n\n const getTargetHandler = useCallback(\n (location: DragLocationHistory): { data?: MosaicData; handler?: MosaicEventHandler } => {\n for (const target of location.current.dropTargets) {\n const data = target.data as MosaicData;\n let containerId: string;\n switch (data.type) {\n case 'tile':\n case 'placeholder':\n containerId = data.containerId;\n break;\n case 'container':\n containerId = data.id;\n break;\n }\n\n const handler = handlers[containerId];\n if (handler) {\n return { data, handler };\n }\n }\n\n return {};\n },\n [handlers],\n );\n\n useEffect(() => {\n const handleChange = ({ source, location }: { source: ElementDragPayload; location: DragLocationHistory }) => {\n const { data: sourceData } = getSourceHandler(source);\n const { data: targetData, handler } = getTargetHandler(location);\n setDragging((dragging) => {\n dragging?.target?.handler?.onCancel?.();\n return {\n source: {\n data: sourceData,\n handler: handlers[sourceData.containerId],\n // TOOD(burdon): Check id matches.\n container: location.initial.dropTargets.find((target) => target.data.type === 'container')?.element,\n },\n target: targetData && {\n data: targetData,\n handler,\n },\n };\n });\n };\n\n const handleCancel = () => {\n setDragging((dragging) => {\n requestAnimationFrame(() => {\n dragging?.target?.handler?.onCancel?.();\n dragging?.source?.container?.dispatchEvent(new CustomEvent('dnd:cancel', { bubbles: true }));\n });\n\n return undefined;\n });\n };\n\n let noTargetTimeout: NodeJS.Timeout;\n\n // Main controller.\n return combine(\n monitorForElements({\n /**\n * Dragging started within any container.\n */\n onDragStart: ({ source, location }) => {\n log('Root.onDragStart', {\n source: source.data,\n location: location.current.dropTargets.map((target) => target.data),\n });\n\n handleChange({ source, location });\n },\n\n /**\n * Dragging entered a new container.\n */\n onDropTargetChange: ({ source, location }) => {\n clearTimeout(noTargetTimeout);\n log('Root.onDropTargetChange', {\n source: source.data,\n location: location.current.dropTargets.map((target) => target.data),\n });\n\n // Stop dragging if there are no drop targets (or we are cancelling).\n if (location.current.dropTargets.length === 0) {\n noTargetTimeout = setTimeout(() => setDragging(undefined), 1_000);\n } else {\n handleChange({ source, location });\n }\n },\n\n /**\n * Dragging within any container.\n */\n onDrag: ({ source, location }) => {\n const { data } = getSourceHandler(source);\n const { handler } = getTargetHandler(location);\n if (handler) {\n const { clientX: x, clientY: y } = location.current.input;\n handler.onDrag?.({ source: data, position: { x, y } });\n }\n },\n\n /**\n * Dragging ended.\n */\n onDrop: ({ source, location }) => {\n log.info('Root.onDrop', {\n source: source.data,\n location: location.current.dropTargets.map((target) => target.data),\n });\n\n // Get the source container.\n const { data: sourceData, handler: sourceHandler } = getSourceHandler(source);\n if (!sourceHandler) {\n log.warn('invalid source', {\n source: sourceData,\n handlers: Object.keys(handlers),\n });\n return;\n }\n\n // NOTE: When dragging is cancelled (e.g., user presses ESC) onDrop is only called after a subsequent event.\n // NOTE: pDND blocks ESC event propagation while dragging.\n // - ESC only flips internal state.\n // - Completion happens on the next processed input event.\n // - This avoids reentrancy and keeps pointer/keyboard behavior consistent.\n // - We set dragging to undefined in onDropTargetChange after a delay if there are no drop targets.\n try {\n if (location.current.dropTargets.length === 0) {\n log.info('cancelled');\n } else {\n // Get the target container.\n const { data: targetData, handler: targetHandler } = getTargetHandler(location);\n if (!targetHandler) {\n log.warn('invalid target', {\n source: sourceData,\n location,\n handlers: Object.keys(handlers),\n });\n return;\n }\n\n // TODO(burdon): Check object doesn't already exist in the collection.\n if (sourceHandler === targetHandler) {\n targetHandler.onDrop?.({\n source: sourceData,\n target: targetData,\n });\n } else {\n if (!sourceHandler.onTake) {\n log.warn('invalid source', { source: sourceData });\n return;\n }\n\n sourceHandler.onTake?.({ source: sourceData }, async (object) => {\n targetHandler.onDrop?.({\n source: { ...sourceData, data: object },\n target: targetData,\n });\n\n return true;\n });\n }\n }\n } finally {\n handleCancel();\n }\n },\n }),\n );\n }, [handlers, getSourceHandler, getTargetHandler]);\n\n return (\n <RootContextProvider\n containers={handlers}\n addContainer={(container) =>\n setHandlers((containers) => ({\n ...containers,\n [container.id]: container,\n }))\n }\n removeContainer={(id) =>\n setHandlers((containers) => {\n delete containers[id];\n return { ...containers };\n })\n }\n dragging={dragging}\n >\n <Root\n className={mx('group overflow-hidden', classNames)}\n {...{\n [`data-${ROOT_DEBUG_ATTR}`]: debug,\n }}\n ref={composedRef}\n >\n {children}\n </Root>\n </RootContextProvider>\n );\n});\n\n//\n// Container\n//\n\ntype ContainerState = { type: 'idle' } | { type: 'active'; bounds?: DOMRect };\n\ntype ContainerContextValue<TData = any, Location = LocationType> = {\n id: string;\n eventHandler: MosaicEventHandler<TData>;\n axis?: AllowedAxis;\n dragging?: DraggingState;\n scrolling?: boolean;\n state: ContainerState;\n\n /** Active drop location. */\n activeLocation?: Location;\n setActiveLocation: (location: Location | undefined) => void;\n};\n\nconst [ContainerContextProvider, useContainerContext] = createContext<ContainerContextValue>('MosaicContainer');\n\n// State attribute: [&:has(>_[data-mosaic-container-state=active])]\nconst CONTAINER_STATE_ATTR = 'mosaic-container-state';\n\n// CSS variables: [var(--mosaic-placeholder-xxx)]\nconst CONTAINER_PLACEHOLDER_WIDTH = '--mosaic-placeholder-width';\nconst CONTAINER_PLACEHOLDER_HEIGHT = '--mosaic-placeholder-height';\n\ntype ContainerProps = SlottableClassName<\n PropsWithChildren<\n Partial<Pick<ContainerContextValue, 'eventHandler' | 'axis'>> & {\n asChild?: boolean;\n autoScroll?: HTMLElement | null;\n withFocus?: boolean;\n debug?: () => ReactNode;\n }\n >\n>;\n\nlet counter = 0;\n\n// TODO(burdon): Make generic.\nconst Container = forwardRef<HTMLDivElement, ContainerProps>(\n (\n {\n className,\n classNames,\n children,\n eventHandler: eventHandlerProp,\n axis = 'vertical',\n asChild,\n autoScroll: autoscrollElement,\n withFocus,\n debug,\n ...props\n }: ContainerProps,\n forwardedRef,\n ) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const composedRef = useComposedRefs<HTMLDivElement>(rootRef, forwardedRef);\n const Root = asChild ? Slot : Primitive.div;\n\n // Handler.\n const eventHandler = useMemo(\n () =>\n eventHandlerProp ?? {\n id: `mosaic-container-${counter++}`,\n },\n [eventHandlerProp],\n );\n\n // State.\n const { dragging } = useRootContext(Container.displayName!);\n const [state, setState] = useState<ContainerState>({ type: 'idle' });\n const [activeLocation, setActiveLocation] = useState<LocationType | undefined>();\n const [scrolling, setScrolling] = useState(false);\n\n // Focus container.\n const { setFocus } = useFocus();\n useEffect(() => {\n if (withFocus) {\n setFocus?.(state.type === 'active' ? 'active' : undefined);\n }\n }, [setFocus, withFocus, state]);\n\n // Register handler.\n const { addContainer, removeContainer } = useRootContext(eventHandler.id);\n useEffect(() => {\n addContainer(eventHandler);\n return () => removeContainer(eventHandler.id);\n }, [eventHandler]);\n\n const data = useMemo<MosaicContainerData>(\n () =>\n ({\n type: 'container',\n id: eventHandler.id,\n }) satisfies MosaicContainerData,\n [eventHandler.id],\n );\n\n useEffect(() => {\n if (!rootRef.current) {\n return;\n }\n\n // Determine if scrolling (pause drag/drop handlers).\n let timeout: ReturnType<typeof setTimeout>;\n const handleScroll = () => {\n setScrolling(true);\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n setScrolling(false);\n }, 500);\n };\n\n return combine(\n ...[\n /**\n * Custom event for dragging cancellation.\n */\n bind(rootRef.current, {\n type: 'dnd:cancel',\n listener: () => {\n setState({ type: 'idle' });\n },\n }),\n\n // Target.\n dropTargetForElements({\n element: rootRef.current,\n getData: () => data,\n\n /**\n * Test if permitted to drop here.\n * NOTE: Contained Tile and Placeholder elements do the same.\n */\n canDrop: ({ source }) => {\n const data = getSourceData(source);\n return (data && eventHandler.canDrop?.({ source: data })) || false;\n },\n\n // TODO(burdon): Provide semantic intent to onDrop.\n // getDropEffect: () => {\n // return 'move';\n // },\n\n /**\n * Dragging started in this container.\n */\n onDragStart: ({ source }) => {\n const sourceData = source.data as MosaicTileData;\n setState({ type: 'active', bounds: sourceData.bounds });\n },\n /**\n * Dragging entered this container.\n */\n onDragEnter: ({ source }) => {\n const sourceData = source.data as MosaicTileData;\n setState({ type: 'active', bounds: sourceData.bounds });\n },\n /**\n * Dragging left this container.\n * NOTE: If the container isn't full-height, then when the dragged item is temporarily removed the container will shrink,\n * triggering `onDragLeave`, which then causes the item to be added and removed continually (flickering).\n */\n onDragLeave: ({ source }) => {\n const sourceData = source.data as MosaicTileData;\n if (sourceData.containerId !== eventHandler.id) {\n setState({ type: 'idle' });\n }\n },\n /**\n * Dropped in this container.\n */\n onDrop: () => {\n setState({ type: 'idle' });\n },\n }),\n\n // Autoscroll.\n // NOTE: When used with Scrollable we get a spurious warning (in dev mode).\n // \"Auto scrolling has been attached to an element that appears not to be scrollable.\"\n autoscrollElement && [\n autoScrollForElements({\n element: autoscrollElement,\n // canScroll: ({ element: _ }) => {\n // return true;\n // },\n getAllowedAxis: () => axis,\n getConfiguration: () => ({\n maxScrollSpeed: 'fast',\n }),\n }),\n\n bind(autoscrollElement, {\n type: 'scroll',\n listener: handleScroll,\n }),\n\n () => setScrolling(false),\n ],\n ]\n .filter(isTruthy)\n .flatMap((x) => x),\n );\n }, [rootRef, eventHandler, data, autoscrollElement]);\n\n return (\n <ContainerContextProvider\n id={eventHandler.id}\n eventHandler={eventHandler}\n axis={axis}\n state={state}\n dragging={state.type === 'active' ? dragging : undefined}\n scrolling={scrolling}\n activeLocation={activeLocation}\n setActiveLocation={setActiveLocation}\n >\n <Root\n className={mx('bs-full', className, classNames)}\n style={\n {\n [CONTAINER_PLACEHOLDER_WIDTH]:\n state.type === 'active' && state.bounds ? `${state.bounds.width}px` : '0px',\n [CONTAINER_PLACEHOLDER_HEIGHT]:\n state.type === 'active' && state.bounds ? `${state.bounds.height}px` : '0px',\n } as CSSProperties\n }\n {...props}\n {...{\n [`data-${CONTAINER_STATE_ATTR}`]: state.type,\n }}\n ref={composedRef}\n >\n {children}\n </Root>\n {debug?.()}\n </ContainerContextProvider>\n );\n },\n);\n\nContainer.displayName = 'MosaicContainer';\n\n//\n// Tile\n//\n\n/** Must implement value equivalence. */\ntype LocationType = string | number;\n\ntype TileState =\n | { type: 'idle' }\n | { type: 'preview'; container: HTMLElement; rect: DOMRect }\n | { type: 'dragging' }\n | { type: 'target'; closestEdge: Edge | null };\n\ntype TileContextValue = {\n state: TileState;\n};\n\nconst [TileContextProvider, useTileContext] = createContext<TileContextValue>('MosaicTile');\n\n// State attribute: data-[mosaic-tile-state=dragging]\nconst TILE_STATE_ATTR = 'mosaic-tile-state';\n\ntype TileProps<TData = any, TLocation = LocationType> = SlottableClassName<\n PropsWithChildren<{\n asChild?: boolean;\n dragHandle?: HTMLElement | null;\n allowedEdges?: Edge[];\n id: string;\n data: TData;\n location: TLocation;\n draggable?: boolean; // TODO(burdon): Not currently implemented.\n debug?: boolean;\n }>\n>;\n\nconst Tile = forwardRef<HTMLDivElement, TileProps>(\n (\n {\n className,\n classNames,\n children,\n asChild,\n dragHandle,\n allowedEdges: allowedEdgesProp,\n location,\n id,\n data: dataProp,\n debug: _,\n }: TileProps,\n forwardedRef,\n ) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const composedRef = composeRefs<HTMLDivElement>(rootRef, forwardedRef);\n const Root = asChild ? Slot : Primitive.div;\n\n // State.\n const {\n id: containerId,\n eventHandler,\n axis,\n scrolling,\n setActiveLocation,\n } = useContainerContext(Tile.displayName!);\n const [state, setState] = useState<TileState>({ type: 'idle' });\n\n const allowedEdges = useMemo<Edge[]>(\n () => allowedEdgesProp || (axis === 'vertical' ? ['top', 'bottom'] : ['left', 'right']),\n [allowedEdgesProp, axis],\n );\n\n const data = useMemo<MosaicTileData>(\n () =>\n ({\n type: 'tile',\n id,\n containerId,\n data: dataProp,\n location,\n }) satisfies MosaicTileData,\n [containerId, location, dataProp],\n );\n\n useLayoutEffect(() => {\n const root = rootRef.current;\n if (!root || !containerId || scrolling) {\n return;\n }\n\n const handleChange = ({ self, source }: { self: DropTargetRecord; source: ElementDragPayload }) => {\n if (source.data.id !== dataProp.id) {\n const closestEdge = extractClosestEdge(self.data);\n const location = data.location + (closestEdge === 'top' || closestEdge === 'left' ? -0.5 : 0.5);\n setActiveLocation(location);\n setState({ type: 'target', closestEdge });\n }\n };\n\n return combine(\n // Source.\n draggable({\n element: root,\n dragHandle: dragHandle && state.type !== 'preview' ? dragHandle : undefined,\n canDrag: () => true,\n getInitialData: () => data,\n onGenerateDragPreview: ({ location, nativeSetDragImage }) => {\n setCustomNativeDragPreview({\n nativeSetDragImage,\n getOffset: preserveOffsetOnSource({\n element: root,\n input: location.current.input,\n }),\n render: ({ container }) => {\n data.bounds = root.getBoundingClientRect();\n setState({\n type: 'preview',\n container,\n rect: root.getBoundingClientRect(),\n });\n return () => setState({ type: 'dragging' });\n },\n });\n },\n\n onDragStart: () => {\n setState({ type: 'dragging' });\n },\n onDrop: () => {\n setState({ type: 'idle' });\n },\n }),\n\n // Target.\n dropTargetForElements({\n element: root,\n getData: ({ input, element }) => attachClosestEdge(data, { input, element, allowedEdges }),\n canDrop: ({ source }) => {\n const data = getSourceData(source);\n return (data && eventHandler.canDrop?.({ source: data })) || false;\n },\n onDragEnter: ({ self, source }) => {\n handleChange({ self, source });\n },\n onDragLeave: () => {\n setState({ type: 'idle' });\n setActiveLocation(undefined);\n },\n onDrag: ({ self, source }) => {\n handleChange({ self, source });\n },\n onDrop: () => {\n setState({ type: 'idle' });\n setActiveLocation(undefined);\n },\n }),\n );\n }, [rootRef, dragHandle, eventHandler, data, scrolling, allowedEdges, setActiveLocation]);\n\n // NOTE: Ensure no gaps between cells (prevent drop indicators flickering).\n // NOTE: Ensure padding doesn't change position of cursor when dragging (no margins).\n return (\n <TileContextProvider state={state}>\n <Root\n {...{\n [`data-${TILE_STATE_ATTR}`]: state.type,\n }}\n role='listitem'\n className={mx('relative', className, classNames)}\n ref={composedRef}\n >\n {children}\n </Root>\n\n {state.type === 'preview' &&\n createPortal(\n <Root\n {...{\n // NOTE: Use to control appearance while dragging.\n [`data-${TILE_STATE_ATTR}`]: state.type,\n }}\n // TODO(burdon): Configure drop animation.\n className={mx('relative', className, classNames)}\n style={\n {\n width: `${state.rect.width}px`,\n height: `${state.rect.height}px`,\n } as CSSProperties\n }\n >\n {children}\n </Root>,\n state.container,\n )}\n </TileContextProvider>\n );\n },\n);\n\nTile.displayName = 'MosaicTile';\n\n//\n// Placeholder\n//\n\n// Axis: data-[mosaic-placeholder-axis=vertical]\nconst PLACEHOLDER_AXIS_ATTR = 'mosaic-placeholder-axis';\n\n// State attribute: data-[mosaic-placeholder-state=active]\nconst PLACEHOLDER_STATE_ATTR = 'mosaic-placeholder-state';\n\ntype PlaceholderProps<Location = LocationType> = ThemedClassName<\n PropsWithChildren<{\n asChild?: boolean;\n axis?: Axis;\n location: Location;\n }>\n>;\n\nconst Placeholder = <Location extends LocationType = LocationType>({\n classNames,\n children,\n asChild,\n axis = 'vertical',\n location,\n}: PlaceholderProps<Location>) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const Root = asChild ? Slot : Primitive.div;\n const {\n id: containerId,\n eventHandler,\n scrolling,\n activeLocation,\n setActiveLocation,\n } = useContainerContext(Placeholder.displayName!);\n\n const data = useMemo<MosaicPlaceholderData<Location>>(\n () =>\n ({\n type: 'placeholder',\n containerId,\n location,\n }) satisfies MosaicPlaceholderData<Location>,\n [containerId, location],\n );\n\n useLayoutEffect(() => {\n const root = rootRef.current;\n if (!root || scrolling) {\n return;\n }\n\n return dropTargetForElements({\n element: root,\n getData: () => data,\n canDrop: ({ source }) => {\n const data = getSourceData(source);\n return (data && eventHandler.canDrop?.({ source: data })) || false;\n },\n onDragEnter: () => {\n setActiveLocation(data.location);\n },\n onDragLeave: () => {\n setActiveLocation(undefined);\n },\n onDrop: () => {\n setActiveLocation(undefined);\n },\n });\n }, [rootRef, data, scrolling, setActiveLocation]);\n\n return (\n <Root\n {...{\n [`data-${PLACEHOLDER_AXIS_ATTR}`]: axis,\n [`data-${PLACEHOLDER_STATE_ATTR}`]: data.location === activeLocation ? 'active' : 'idle',\n }}\n role='none'\n className={mx('relative', classNames)}\n ref={rootRef}\n >\n {children}\n </Root>\n );\n};\n\nPlaceholder.displayName = 'MosaicPlaceholder';\n\n//\n// DropIndicator\n// TODO(burdon): Support DropIndicator or Placeholder variants.\n//\n\ntype DropIndicatorProps = Omit<NativeDropIndicatorProps, 'edge'>;\n\nconst DropIndicator = (props: DropIndicatorProps) => {\n const { state } = useTileContext(DropIndicator.displayName!);\n return state.type === 'target' && state.closestEdge ? (\n <NativeDropIndicator {...props} edge={state.closestEdge} />\n ) : null;\n};\n\nDropIndicator.displayName = 'MosaicDropIndicator';\n\n//\n// Mosaic\n//\n\nexport const Mosaic = {\n Root,\n Container,\n Tile,\n Placeholder,\n DropIndicator,\n\n // TODO(burdon): Move out of Mosaic namespace?\n Viewport: Scrollable,\n Stack,\n VirtualStack,\n};\n\nexport type {\n RootProps as MosaicRootProps,\n ContainerProps as MosaicContainerProps,\n TileProps as MosaicTileProps,\n PlaceholderProps as MosiacPlaceholderProps,\n DropIndicatorProps as MosaicDropIndicatorProps,\n\n // TODO(burdon): Move out of Mosaic namespace?\n ScrollableProps as MosaicViewportProps,\n StackProps as MosaicStackProps,\n};\n\nexport { useRootContext as useMosaic, useContainerContext as useMosaicContainer, useTileContext as useMosaicTile };\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { type EventListeners } from 'overlayscrollbars';\nimport {\n OverlayScrollbarsComponent,\n type OverlayScrollbarsComponentProps,\n type OverlayScrollbarsComponentRef,\n} from 'overlayscrollbars-react';\nimport React, { type RefCallback, forwardRef, useEffect, useImperativeHandle, useMemo, useRef } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { type Axis } from '../Mosaic';\n\nimport 'overlayscrollbars/styles/overlayscrollbars.css';\nimport './scrollable.css';\n\nconst defaultOptions: ScrollableProps['options'] = {\n scrollbars: {\n autoHide: 'leave',\n autoHideDelay: 1_000,\n autoHideSuspend: true,\n },\n};\n\nexport type ScrollableProps = ThemedClassName<Omit<OverlayScrollbarsComponentProps, 'ref'>> & {\n axis?: Axis;\n padding?: boolean;\n onScroll?: (event: Event) => void;\n viewportRef?: RefCallback<HTMLElement | null>;\n};\n\n/**\n * https://www.npmjs.com/package/overlayscrollbars-react\n */\nexport const Scrollable = forwardRef<HTMLDivElement, ScrollableProps>(\n (\n { classNames, axis = 'vertical', padding, options: optionsProp = defaultOptions, onScroll, viewportRef, ...props },\n forwardedRef,\n ) => {\n const osRef = useRef<OverlayScrollbarsComponentRef>(null);\n const options = useMemo(() => {\n const options = { ...optionsProp };\n if (axis) {\n options.overflow = {\n x: axis === 'horizontal' ? 'scroll' : 'hidden',\n y: axis === 'vertical' ? 'scroll' : 'hidden',\n };\n }\n\n return options;\n }, [axis, optionsProp]);\n\n useImperativeHandle(forwardedRef, () => osRef.current?.getElement() as HTMLDivElement, [osRef]);\n\n useEffect(() => {\n const instance = osRef.current?.osInstance();\n if (viewportRef) {\n viewportRef(instance?.elements().viewport ?? null);\n }\n }, [osRef, viewportRef]);\n\n const events = useMemo<EventListeners | null>(() => {\n if (!onScroll) {\n return null;\n }\n\n return {\n scroll: (_, event: Event) => {\n onScroll(event);\n },\n } satisfies EventListeners;\n }, [onScroll]);\n\n return (\n <OverlayScrollbarsComponent\n {...props}\n className={mx(padding && (axis === 'vertical' ? 'pli-3' : 'pbe-3'), classNames)}\n options={options}\n events={events}\n ref={osRef}\n />\n );\n },\n);\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { type ReactVirtualizerOptions, useVirtualizer } from '@tanstack/react-virtual';\nimport React, { type FC, Fragment, type ReactElement, type Ref, forwardRef } from 'react';\n\nimport { invariant } from '@dxos/invariant';\nimport { type SlottableClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { useVisibleItems } from '../../hooks';\nimport {\n type Axis,\n type GetId,\n Mosaic,\n type MosaicTileProps,\n type MosiacPlaceholderProps,\n useMosaicContainer,\n} from '../Mosaic';\nimport { mosaicStyles } from '../Mosaic';\n\ntype StackTileComponent<TData = any> = FC<MosaicTileProps<TData>>;\n\ntype StackProps<TData = any> = SlottableClassName<\n {\n Tile: StackTileComponent<TData>;\n getId: GetId<TData>;\n role?: string;\n axis?: Axis;\n items?: TData[];\n } & Pick<MosaicTileProps<TData>, 'draggable' | 'debug'>\n>;\n\n/**\n * Linear layout of Mosaic tiles.\n * NOTE: This is a low-level component and should be wrapped by a scrollable container.\n */\nconst StackInner = forwardRef<HTMLDivElement, StackProps>(\n (\n { className, classNames, role = 'list', axis = 'vertical', draggable = true, items, getId, Tile, debug, ...props },\n forwardedRef,\n ) => {\n invariant(Tile);\n const { id, dragging } = useMosaicContainer(StackInner.displayName!);\n const visibleItems = useVisibleItems({ id, items, dragging: dragging?.source.data, getId });\n\n return (\n <div\n {...props}\n role={role}\n className={mx(\n 'flex',\n axis === 'horizontal' && 'bs-full [&>*]:shrink-0',\n axis === 'vertical' && 'flex-col',\n classNames,\n className,\n )}\n ref={forwardedRef}\n >\n <Placeholder axis={axis} location={0.5} />\n {visibleItems?.map((item, index) => (\n <Fragment key={getId(item)}>\n <Tile id={getId(item)} data={item} location={index + 1} draggable={draggable} debug={debug} />\n <Placeholder axis={axis} location={index + 1.5} />\n </Fragment>\n ))}\n </div>\n );\n },\n);\n\nStackInner.displayName = 'Stack';\n\nconst Stack = StackInner as <TData = any>(props: StackProps<TData> & { ref?: Ref<HTMLDivElement> }) => ReactElement;\n\n//\n// VirtualStack\n//\n\ntype VirtualStackProps<TData = any> = StackProps<TData> &\n Pick<\n ReactVirtualizerOptions<HTMLElement, HTMLDivElement>,\n 'estimateSize' | 'getScrollElement' | 'overscan' | 'onChange'\n >;\n\nconst VirtualStackInner = forwardRef<HTMLDivElement, VirtualStackProps>(\n (\n {\n className,\n classNames,\n role = 'list',\n axis = 'vertical',\n items,\n getId,\n Tile,\n estimateSize,\n getScrollElement,\n overscan = 8,\n onChange,\n debug,\n ...props\n },\n forwardedRef,\n ) => {\n invariant(Tile);\n const { id, dragging } = useMosaicContainer(VirtualStackInner.displayName!);\n const visibleItems = useVisibleItems({ id, items, dragging: dragging?.source.data, getId });\n const virtualizer = useVirtualizer({\n count: visibleItems.length * 2 + 1,\n estimateSize,\n getScrollElement,\n overscan,\n onChange,\n });\n\n const virtualItems = virtualizer.getVirtualItems();\n\n return (\n <div\n {...props}\n role={role}\n className={mx(\n 'flex',\n axis === 'horizontal' && 'bs-full [&>*]:shrink-0',\n axis === 'vertical' && 'flex-col',\n classNames,\n className,\n )}\n style={{\n position: 'relative',\n ...(axis === 'vertical'\n ? {\n width: '100%',\n height: virtualizer.getTotalSize(),\n }\n : {\n width: virtualizer.getTotalSize(),\n height: '100%',\n }),\n }}\n ref={forwardedRef}\n >\n {virtualItems.map((virtualItem) => {\n const data = visibleItems![Math.floor(virtualItem.index / 2)];\n return (\n <div\n key={virtualItem.key}\n data-index={virtualItem.index}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n ...(axis === 'vertical'\n ? {\n width: '100%',\n transform: `translateY(${virtualItem.start}px)`,\n }\n : {\n height: '100%',\n transform: `translateX(${virtualItem.start}px)`,\n }),\n }}\n ref={virtualizer.measureElement}\n >\n {virtualItem.index % 2 === 0 ? (\n <Placeholder axis={axis} location={Math.floor(virtualItem.index / 2) + 0.5} />\n ) : (\n <Tile id={getId(data)} data={data} location={Math.floor(virtualItem.index / 2) + 1} debug={debug} />\n )}\n </div>\n );\n })}\n </div>\n );\n },\n);\n\nVirtualStackInner.displayName = 'VirtualStackInner';\n\nconst VirtualStack = VirtualStackInner as <TData = any>(\n props: VirtualStackProps<TData> & { ref?: Ref<HTMLDivElement> },\n) => ReactElement;\n\n//\n// Placeholder\n//\n\nconst Placeholder = (props: MosiacPlaceholderProps<number>) => {\n return (\n <Mosaic.Placeholder {...props} classNames={mosaicStyles.placeholder.root}>\n <div\n className={mx(\n 'flex bs-full bg-baseSurface border border-dashed border-separator rounded-sm',\n mosaicStyles.placeholder.content,\n )}\n />\n </Mosaic.Placeholder>\n );\n};\n\nPlaceholder.displayName = 'Placeholder';\n\n//\n// Stack\n//\n\nexport { Stack, VirtualStack };\n\nexport type { StackTileComponent, StackProps, VirtualStackProps };\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { type Obj } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { arrayMove } from '@dxos/util';\n\nimport { type GetId, type MosaicEventHandler } from '../components';\n\nexport type UseEventHandlerProps<TItem = any, TObject = any> = Pick<MosaicEventHandler<TItem>, 'id' | 'canDrop'> & {\n /**\n * The items to manage.\n */\n items: TItem[];\n\n /**\n * ID getter.\n */\n getId: GetId<TItem>;\n\n /**\n * Extracts the object from an item.\n */\n get: (item: TItem) => TObject;\n\n /**\n * Creates a new item from the dragged object.\n */\n make: (object: TObject) => TItem;\n\n /**\n * Optional change callback for wrapping mutations in Obj.change style.\n * When provided, all array mutations will be wrapped in this callback.\n * When not provided, mutations happen directly on the items array.\n */\n onChange?: (mutator: (items: TItem[]) => void) => void;\n};\n\n/**\n * Returns a handler for the given items.\n * NOTE: This supports arrays of objects, or arrays of refs to objects.\n */\nexport const useEventHandlerAdapter = <TItem = any, TObject extends Obj.Unknown = Obj.Unknown>({\n items,\n getId,\n get,\n make,\n onChange,\n ...props\n}: UseEventHandlerProps<TItem, TObject>): MosaicEventHandler<TItem> => {\n return useMemo<MosaicEventHandler<TItem>>(\n () => ({\n ...props,\n onTake: ({ source }, cb) => {\n log.info('onTake', { source });\n const mutate = (items: TItem[]) => {\n const from = items.findIndex((item) => getId(item) === source.id);\n if (from !== -1) {\n items.splice(from, 1);\n }\n };\n\n if (onChange) {\n onChange(mutate);\n } else {\n mutate(items);\n }\n\n void cb(source.data);\n },\n onDrop: ({ source, target }) => {\n const to = target?.type === 'tile' || target?.type === 'placeholder' ? target.location : -1;\n log.info('onDrop', { source, target, to });\n\n const mutate = (items: TItem[]) => {\n const from = items.findIndex((item) => getId(item) === source.id);\n if (to !== -1) {\n if (from !== -1) {\n arrayMove(items, from, to);\n } else {\n // TODO(burdon): This should be the responsibility of the source container.\n items.splice(to, 0, make(get(source.data)));\n }\n }\n };\n\n if (onChange) {\n onChange(mutate);\n } else {\n mutate(items);\n }\n },\n }),\n [items, onChange],\n );\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { type GetId, type MosaicTileData } from '../components';\n\nexport type UseVisibleItemsProps<TItem = any> = {\n /** Container id. */\n id: string;\n\n /** Current items. */\n items?: TItem[];\n\n /** Currently dragging item. */\n dragging: MosaicTileData<TItem> | undefined;\n\n /** ID getter */\n getId: GetId<TItem>;\n};\n\n/**\n * Returns items with the dragging item removed.\n */\nexport const useVisibleItems = <TItem = any>({ id, items, dragging, getId }: UseVisibleItemsProps<TItem>): TItem[] => {\n const visibleItems = useMemo(() => {\n if (!items || !dragging || id !== dragging.containerId) {\n return items ?? [];\n }\n\n const idx = items.findIndex((item) => getId(item) === dragging.id);\n if (idx === -1) {\n return items;\n }\n\n const visibleItems = items.slice();\n visibleItems.splice(idx, 1);\n return visibleItems;\n }, [id, items, dragging, getId]);\n\n return visibleItems;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["styles", "root", "border", "grid_3", "grid_2", "grid_3_coarse", "poster", "React", "useCallback", "useRef", "useState", "mx", "cache", "Map", "Image", "classNames", "src", "alt", "crossOrigin", "sampleSize", "contrast", "crossOriginState", "setCrossOriginState", "useState", "dominantColor", "setDominantColor", "undefined", "imageLoaded", "setImageLoaded", "canvasRef", "useRef", "handleImageError", "handleImageLoad", "useCallback", "target", "rgb", "get", "img", "current", "color", "extractDominantColor", "set", "div", "className", "mx", "style", "backgroundColor", "canvas", "ref", "display", "aria-hidden", "background", "transition", "opacity", "onError", "onLoad", "ctx", "getContext", "width", "height", "drawImage", "imageData", "getImageData", "pixels", "data", "isTransparent", "r", "g", "b", "totalWeight", "cornerSize", "Math", "floor", "y", "x", "isInTopLeft", "isInTopRight", "isInBottomLeft", "isInBottomRight", "i", "red", "green", "blue", "alpha", "max", "min", "saturation", "weight", "round", "threshold", "edgeTransparentPixels", "edgePixels", "topIndex", "bottomIndex", "leftIndex", "rightIndex", "Slot", "React", "createContext", "forwardRef", "useContext", "Button", "DropdownMenu", "Icon", "Toolbar", "useTranslation", "mx", "translationKey", "translations", "CardContext", "createContext", "CardRoot", "forwardRef", "children", "classNames", "className", "id", "asChild", "role", "border", "fullWidth", "props", "forwardedRef", "Root", "Slot", "React", "mx", "styles", "root", "ref", "CardToolbar", "density", "Toolbar", "grid_3", "grid_3_coarse", "CardToolbarIconButton", "IconButton", "CardToolbarSeparator", "Separator", "CardDragHandle", "_", "t", "useTranslation", "translationKey", "data-testid", "noTooltip", "iconOnly", "icon", "variant", "label", "size", "disabled", "CardClose", "onClick", "CardMenu", "context", "items", "menuItems", "useContext", "combinedItems", "DropdownMenu", "Trigger", "length", "Card", "ToolbarIconButton", "Portal", "Content", "Viewport", "map", "onSelect", "i", "Item", "key", "Arrow", "CardTitle", "CardContent", "div", "CardRow", "grid_2", "CardIcon", "CardHeading", "variantClassNames", "default", "subtitle", "CardText", "truncate", "description", "span", "CardPoster", "aspect", "image", "Image", "poster", "src", "alt", "aria-label", "Icon", "CardAction", "actionIcon", "Button", "CardLink", "href", "a", "data-variant", "target", "rel", "CardIconBlock", "toolbar", "Context", "ToolbarSeparator", "DragHandle", "Title", "Close", "Menu", "IconBlock", "Row", "Heading", "Text", "Poster", "Action", "Link", "styles", "container", "root", "useArrowNavigationGroup", "useFocusableGroup", "useMergedTabsterAttributes_unstable", "useComposedRefs", "Primitive", "Slot", "React", "createContext", "forwardRef", "useContext", "useRef", "useState", "mx", "FOCUS_STATE_ATTR", "FocusContext", "createContext", "useFocus", "useContext", "Group", "forwardRef", "classNames", "className", "children", "asChild", "axis", "props", "forwardedRef", "rootRef", "useRef", "composedRef", "useComposedRefs", "Root", "Slot", "Primitive", "div", "focusableGroupAttrs", "useFocusableGroup", "tabBehavior", "arrowNavigationAttrs", "useArrowNavigationGroup", "memorizeCurrent", "tabsterAttrs", "useMergedTabsterAttributes_unstable", "state", "setState", "useState", "React", "Provider", "value", "setFocus", "tabIndex", "mx", "styles", "container", "root", "ref", "Focus", "styles", "placeholder", "root", "content", "StateEffect", "StateField", "Decoration", "EditorView", "ViewPlugin", "WidgetType", "dropHandler", "onDrop", "handleDrop", "views", "Set", "state", "reset", "forEach", "view", "dispatch", "effects", "setDrop", "of", "extension", "dropField", "ViewPlugin", "fromClass", "_view", "add", "destroy", "delete", "update", "position", "rect", "dom", "getBoundingClientRect", "x", "left", "right", "y", "top", "bottom", "pos", "posAtCoords", "word", "wordAt", "startDist", "Math", "abs", "from", "endDist", "to", "cancel", "drop", "text", "url", "event", "line", "doc", "lineAt", "trim", "changes", "insert", "StateEffect", "define", "StateField", "create", "Decoration", "none", "decorations", "tr", "effect", "is", "value", "set", "widget", "WidgetType", "toDOM", "document", "createElement", "className", "style", "borderLeft", "display", "height", "verticalAlign", "side", "range", "map", "provide", "field", "EditorView", "React", "forwardRef", "useMemo", "useRef", "createPortal", "Json", "mx", "combine", "draggable", "dropTargetForElements", "monitorForElements", "preserveOffsetOnSource", "setCustomNativeDragPreview", "autoScrollForElements", "attachClosestEdge", "extractClosestEdge", "DropIndicator", "NativeDropIndicator", "composeRefs", "useComposedRefs", "createContext", "Primitive", "Slot", "bind", "React", "forwardRef", "useCallback", "useEffect", "useLayoutEffect", "useMemo", "useRef", "useState", "createPortal", "log", "mx", "isTruthy", "OverlayScrollbarsComponent", "React", "forwardRef", "useEffect", "useImperativeHandle", "useMemo", "useRef", "mx", "defaultOptions", "scrollbars", "autoHide", "autoHideDelay", "autoHideSuspend", "Scrollable", "forwardRef", "classNames", "axis", "padding", "options", "optionsProp", "onScroll", "viewportRef", "props", "forwardedRef", "osRef", "useRef", "useMemo", "overflow", "x", "y", "useImperativeHandle", "current", "getElement", "useEffect", "instance", "osInstance", "elements", "viewport", "events", "scroll", "_", "event", "React", "OverlayScrollbarsComponent", "className", "mx", "ref", "useVirtualizer", "React", "Fragment", "forwardRef", "invariant", "mx", "useMemo", "log", "arrayMove", "useEventHandlerAdapter", "items", "getId", "get", "make", "onChange", "props", "onTake", "source", "cb", "info", "mutate", "from", "findIndex", "item", "id", "splice", "data", "onDrop", "target", "to", "type", "location", "useMemo", "useVisibleItems", "id", "items", "dragging", "getId", "visibleItems", "useMemo", "containerId", "idx", "findIndex", "item", "slice", "splice", "StackInner", "forwardRef", "className", "classNames", "role", "axis", "draggable", "items", "getId", "Tile", "debug", "props", "forwardedRef", "invariant", "id", "dragging", "useMosaicContainer", "displayName", "visibleItems", "useVisibleItems", "source", "data", "React", "div", "mx", "ref", "Placeholder", "location", "map", "item", "index", "Fragment", "key", "Stack", "VirtualStackInner", "estimateSize", "getScrollElement", "overscan", "onChange", "virtualizer", "useVirtualizer", "count", "length", "virtualItems", "getVirtualItems", "style", "position", "width", "height", "getTotalSize", "virtualItem", "Math", "floor", "data-index", "top", "left", "transform", "start", "measureElement", "VirtualStack", "Mosaic", "mosaicStyles", "placeholder", "root", "content", "getSourceData", "source", "data", "type", "RootContextProvider", "useRootContext", "createContext", "ROOT_DEBUG_ATTR", "Root", "forwardRef", "classNames", "children", "asChild", "debug", "forwardedRef", "rootRef", "useRef", "composedRef", "useComposedRefs", "Slot", "Primitive", "div", "handlers", "setHandlers", "useState", "dragging", "setDragging", "getSourceHandler", "useCallback", "handler", "containerId", "getTargetHandler", "location", "target", "current", "dropTargets", "id", "useEffect", "handleChange", "sourceData", "targetData", "onCancel", "container", "initial", "find", "element", "handleCancel", "requestAnimationFrame", "dispatchEvent", "CustomEvent", "bubbles", "undefined", "noTargetTimeout", "combine", "monitorForElements", "onDragStart", "log", "map", "onDropTargetChange", "clearTimeout", "length", "setTimeout", "onDrag", "clientX", "x", "clientY", "y", "input", "position", "onDrop", "info", "sourceHandler", "warn", "Object", "keys", "targetHandler", "onTake", "object", "React", "containers", "addContainer", "removeContainer", "className", "mx", "ref", "ContainerContextProvider", "useContainerContext", "CONTAINER_STATE_ATTR", "CONTAINER_PLACEHOLDER_WIDTH", "CONTAINER_PLACEHOLDER_HEIGHT", "counter", "Container", "eventHandler", "eventHandlerProp", "axis", "autoScroll", "autoscrollElement", "withFocus", "props", "useMemo", "displayName", "state", "setState", "activeLocation", "setActiveLocation", "scrolling", "setScrolling", "setFocus", "useFocus", "timeout", "handleScroll", "bind", "listener", "dropTargetForElements", "getData", "canDrop", "bounds", "onDragEnter", "onDragLeave", "autoScrollForElements", "getAllowedAxis", "getConfiguration", "maxScrollSpeed", "filter", "isTruthy", "flatMap", "style", "width", "height", "TileContextProvider", "useTileContext", "TILE_STATE_ATTR", "Tile", "dragHandle", "allowedEdges", "allowedEdgesProp", "dataProp", "_", "composeRefs", "useLayoutEffect", "root", "self", "closestEdge", "extractClosestEdge", "draggable", "canDrag", "getInitialData", "onGenerateDragPreview", "nativeSetDragImage", "setCustomNativeDragPreview", "getOffset", "preserveOffsetOnSource", "render", "getBoundingClientRect", "rect", "attachClosestEdge", "role", "createPortal", "PLACEHOLDER_AXIS_ATTR", "PLACEHOLDER_STATE_ATTR", "Placeholder", "DropIndicator", "NativeDropIndicator", "edge", "Mosaic", "Viewport", "Scrollable", "Stack", "VirtualStack", "useContainerDebug", "debug", "debugRef", "useRef", "useMemo", "undefined", "classNames", "React", "div", "role", "className", "mx", "ref", "current", "createPortal", "ContainerInfo", "forwardRef", "forwardedRef", "id", "state", "activeLocation", "scrolling", "useMosaicContainer", "displayName", "counter", "Json", "data", "count"]
7
+ }
@@ -10,10 +10,13 @@ import {
10
10
  styles2,
11
11
  styles3,
12
12
  useContainerContext,
13
+ useContainerDebug,
14
+ useEventHandlerAdapter,
13
15
  useFocus,
14
16
  useRootContext,
15
- useTileContext
16
- } from "./chunk-QKMUWO5X.mjs";
17
+ useTileContext,
18
+ useVisibleItems
19
+ } from "./chunk-UMBPEG4F.mjs";
17
20
 
18
21
  // src/components/Card/CardDragPreview.tsx
19
22
  import React from "react";
@@ -85,9 +88,12 @@ export {
85
88
  dropHandler,
86
89
  styles2 as focusStyles,
87
90
  styles3 as mosaicStyles,
91
+ useContainerDebug,
92
+ useEventHandlerAdapter,
88
93
  useFocus,
89
94
  useRootContext as useMosaic,
90
95
  useContainerContext as useMosaicContainer,
91
- useTileContext as useMosaicTile
96
+ useTileContext as useMosaicTile,
97
+ useVisibleItems
92
98
  };
93
99
  //# sourceMappingURL=index.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/Card/CardDragPreview.tsx", "../../../src/components/Layout/Layout.tsx"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\n\nimport { mx } from '@dxos/ui-theme';\n\nimport { styles } from './styles';\n\n// TODO(burdon): Why p-2?\nconst CardDragPreviewRoot = ({ children }: PropsWithChildren<{}>) => {\n return <div className='p-2'>{children}</div>;\n};\n\nconst CardDragPreviewContent = ({ children }: PropsWithChildren<{}>) => {\n return <div className={mx(styles.root, 'ring-focusLine ring-neutralFocusIndicator')}>{children}</div>;\n};\n\nexport const CardDragPreview = {\n Root: CardDragPreviewRoot,\n Content: CardDragPreviewContent,\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { type HTMLAttributes, type PropsWithChildren, forwardRef, useMemo } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\n//\n// Main\n//\n\ntype MainProps = ThemedClassName<\n PropsWithChildren<{\n role?: string;\n toolbar?: boolean;\n statusbar?: boolean;\n }>\n>;\n\n// TODO(burdon): Borders.\nconst Main = forwardRef<HTMLDivElement, MainProps>(\n ({ classNames, children, role, toolbar, statusbar }, forwardedRef) => {\n const style = useMemo(\n () => ({\n gridTemplateRows: [toolbar && 'var(--toolbar-size)', '1fr', statusbar && 'var(--statusbar-size)']\n .filter(Boolean)\n .join(' '),\n }),\n [toolbar, statusbar],\n );\n\n return (\n <div\n ref={forwardedRef}\n role={role ?? 'none'}\n style={style}\n className={mx(\n 'bs-full is-full grid grid-cols-[100%] overflow-hidden',\n toolbar && '[&>.dx-toolbar]:relative [&>.dx-toolbar]:border-be [&>.dx-toolbar]:border-subduedSeparator',\n classNames,\n )}\n >\n {children}\n </div>\n );\n },\n);\n\n//\n// Container\n//\n\ntype ContainerProps = ThemedClassName<\n PropsWithChildren<{\n role?: string;\n scrollable?: boolean;\n }>\n>;\n\nconst Container = forwardRef<HTMLDivElement, ContainerProps>(\n ({ classNames, children, role, scrollable }, forwardedRef) => {\n return (\n <div\n ref={forwardedRef}\n role={role ?? 'none'}\n className={mx('grid bs-full', scrollable ? 'overflow-y-auto' : 'overflow-hidden', classNames)}\n >\n {children}\n </div>\n );\n },\n);\n\n//\n// Flex\n//\n\ntype FlexProps = ThemedClassName<\n HTMLAttributes<HTMLDivElement> & {\n column?: boolean;\n grow?: boolean;\n }\n>;\n\nconst Flex = ({ children, classNames, role, column, grow }: FlexProps) => {\n return (\n <div\n role={role ?? 'none'}\n className={mx('flex', column && 'flex-col', grow && 'flex-1 overflow-hidden', classNames)}\n >\n {children}\n </div>\n );\n};\n\n//\n// Layout\n//\n\nexport const Layout = {\n Main,\n Container,\n Flex,\n};\n\nexport type { MainProps as LayoutMainProps, ContainerProps as LayoutContainerProps, FlexProps as LayoutFlexProps };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAIA,OAAOA,WAAuC;AAE9C,SAASC,UAAU;AAKnB,IAAMC,sBAAsB,CAAC,EAAEC,SAAQ,MAAyB;AAC9D,SAAO,sBAAA,cAACC,OAAAA;IAAIC,WAAU;KAAOF,QAAAA;AAC/B;AAEA,IAAMG,yBAAyB,CAAC,EAAEH,SAAQ,MAAyB;AACjE,SAAO,sBAAA,cAACC,OAAAA;IAAIC,WAAWE,GAAGC,OAAOC,MAAM,2CAAA;KAA+CN,QAAAA;AACxF;AAEO,IAAMO,kBAAkB;EAC7BC,MAAMT;EACNU,SAASN;AACX;;;AClBA,OAAOO,UAAsDC,YAAYC,eAAe;AAGxF,SAASC,MAAAA,WAAU;AAenB,IAAMC,OAAOC,2BACX,CAAC,EAAEC,YAAYC,UAAUC,MAAMC,SAASC,UAAS,GAAIC,iBAAAA;AACnD,QAAMC,QAAQC,QACZ,OAAO;IACLC,kBAAkB;MAACL,WAAW;MAAuB;MAAOC,aAAa;MACtEK,OAAOC,OAAAA,EACPC,KAAK,GAAA;EACV,IACA;IAACR;IAASC;GAAU;AAGtB,SACE,gBAAAQ,OAAA,cAACC,OAAAA;IACCC,KAAKT;IACLH,MAAMA,QAAQ;IACdI;IACAS,WAAWC,IACT,yDACAb,WAAW,8FACXH,UAAAA;KAGDC,QAAAA;AAGP,CAAA;AAcF,IAAMgB,YAAYlB,2BAChB,CAAC,EAAEC,YAAYC,UAAUC,MAAMgB,WAAU,GAAIb,iBAAAA;AAC3C,SACE,gBAAAO,OAAA,cAACC,OAAAA;IACCC,KAAKT;IACLH,MAAMA,QAAQ;IACda,WAAWC,IAAG,gBAAgBE,aAAa,oBAAoB,mBAAmBlB,UAAAA;KAEjFC,QAAAA;AAGP,CAAA;AAcF,IAAMkB,OAAO,CAAC,EAAElB,UAAUD,YAAYE,MAAMkB,QAAQC,KAAI,MAAa;AACnE,SACE,gBAAAT,OAAA,cAACC,OAAAA;IACCX,MAAMA,QAAQ;IACda,WAAWC,IAAG,QAAQI,UAAU,YAAYC,QAAQ,0BAA0BrB,UAAAA;KAE7EC,QAAAA;AAGP;AAMO,IAAMqB,SAAS;EACpBxB;EACAmB;EACAE;AACF;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;AAIA,OAAOA,WAAuC;AAE9C,SAASC,UAAU;AAKnB,IAAMC,sBAAsB,CAAC,EAAEC,SAAQ,MAAyB;AAC9D,SAAO,sBAAA,cAACC,OAAAA;IAAIC,WAAU;KAAOF,QAAAA;AAC/B;AAEA,IAAMG,yBAAyB,CAAC,EAAEH,SAAQ,MAAyB;AACjE,SAAO,sBAAA,cAACC,OAAAA;IAAIC,WAAWE,GAAGC,OAAOC,MAAM,2CAAA;KAA+CN,QAAAA;AACxF;AAEO,IAAMO,kBAAkB;EAC7BC,MAAMT;EACNU,SAASN;AACX;;;AClBA,OAAOO,UAAsDC,YAAYC,eAAe;AAGxF,SAASC,MAAAA,WAAU;AAenB,IAAMC,OAAOC,2BACX,CAAC,EAAEC,YAAYC,UAAUC,MAAMC,SAASC,UAAS,GAAIC,iBAAAA;AACnD,QAAMC,QAAQC,QACZ,OAAO;IACLC,kBAAkB;MAACL,WAAW;MAAuB;MAAOC,aAAa;MACtEK,OAAOC,OAAAA,EACPC,KAAK,GAAA;EACV,IACA;IAACR;IAASC;GAAU;AAGtB,SACE,gBAAAQ,OAAA,cAACC,OAAAA;IACCC,KAAKT;IACLH,MAAMA,QAAQ;IACdI;IACAS,WAAWC,IACT,yDACAb,WAAW,8FACXH,UAAAA;KAGDC,QAAAA;AAGP,CAAA;AAcF,IAAMgB,YAAYlB,2BAChB,CAAC,EAAEC,YAAYC,UAAUC,MAAMgB,WAAU,GAAIb,iBAAAA;AAC3C,SACE,gBAAAO,OAAA,cAACC,OAAAA;IACCC,KAAKT;IACLH,MAAMA,QAAQ;IACda,WAAWC,IAAG,gBAAgBE,aAAa,oBAAoB,mBAAmBlB,UAAAA;KAEjFC,QAAAA;AAGP,CAAA;AAcF,IAAMkB,OAAO,CAAC,EAAElB,UAAUD,YAAYE,MAAMkB,QAAQC,KAAI,MAAa;AACnE,SACE,gBAAAT,OAAA,cAACC,OAAAA;IACCX,MAAMA,QAAQ;IACda,WAAWC,IAAG,QAAQI,UAAU,YAAYC,QAAQ,0BAA0BrB,UAAAA;KAE7EC,QAAAA;AAGP;AAMO,IAAMqB,SAAS;EACpBxB;EACAmB;EACAE;AACF;",
6
6
  "names": ["React", "mx", "CardDragPreviewRoot", "children", "div", "className", "CardDragPreviewContent", "mx", "styles", "root", "CardDragPreview", "Root", "Content", "React", "forwardRef", "useMemo", "mx", "Main", "forwardRef", "classNames", "children", "role", "toolbar", "statusbar", "forwardedRef", "style", "useMemo", "gridTemplateRows", "filter", "Boolean", "join", "React", "div", "ref", "className", "mx", "Container", "scrollable", "Flex", "column", "grow", "Layout"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"src/components/Card/styles.ts":{"bytes":2466,"imports":[],"format":"esm"},"src/translations.ts":{"bytes":1059,"imports":[],"format":"esm"},"src/components/Image/Image.tsx":{"bytes":22239,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true}],"format":"esm"},"src/components/Image/index.ts":{"bytes":464,"imports":[{"path":"src/components/Image/Image.tsx","kind":"import-statement","original":"./Image"}],"format":"esm"},"src/components/Card/Card.tsx":{"bytes":33430,"imports":[{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/translations.ts","kind":"import-statement","original":"../../translations"},{"path":"src/components/Image/index.ts","kind":"import-statement","original":"../Image"},{"path":"src/components/Card/styles.ts","kind":"import-statement","original":"./styles"}],"format":"esm"},"src/components/Card/CardDragPreview.tsx":{"bytes":2399,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/components/Card/styles.ts","kind":"import-statement","original":"./styles"}],"format":"esm"},"src/components/Card/index.ts":{"bytes":758,"imports":[{"path":"src/components/Card/styles.ts","kind":"import-statement","original":"./styles"},{"path":"src/components/Card/Card.tsx","kind":"import-statement","original":"./Card"},{"path":"src/components/Card/CardDragPreview.tsx","kind":"import-statement","original":"./CardDragPreview"}],"format":"esm"},"src/components/Focus/styles.ts":{"bytes":2242,"imports":[],"format":"esm"},"src/components/Focus/Focus.tsx":{"bytes":7662,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-compose-refs","kind":"import-statement","external":true},{"path":"@radix-ui/react-primitive","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/components/Focus/styles.ts","kind":"import-statement","original":"./styles"}],"format":"esm"},"src/components/Focus/index.ts":{"bytes":658,"imports":[{"path":"src/components/Focus/styles.ts","kind":"import-statement","original":"./styles"},{"path":"src/components/Focus/Focus.tsx","kind":"import-statement","original":"./Focus"}],"format":"esm"},"src/components/Layout/Layout.tsx":{"bytes":6547,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true}],"format":"esm"},"src/components/Layout/index.ts":{"bytes":470,"imports":[{"path":"src/components/Layout/Layout.tsx","kind":"import-statement","original":"./Layout"}],"format":"esm"},"src/components/Mosaic/styles.ts":{"bytes":4082,"imports":[],"format":"esm"},"src/components/Mosaic/extension.ts":{"bytes":14399,"imports":[{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true}],"format":"esm"},"src/components/Mosaic/types.ts":{"bytes":3507,"imports":[],"format":"esm"},"src/components/Scrollable/scrollable.css":{"bytes":736,"imports":[]},"src/components/Scrollable/Scrollable.tsx":{"bytes":8533,"imports":[{"path":"overlayscrollbars-react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"overlayscrollbars/styles/overlayscrollbars.css","kind":"import-statement","external":true},{"path":"src/components/Scrollable/scrollable.css","kind":"import-statement","original":"./scrollable.css"}],"format":"esm"},"src/components/Scrollable/index.ts":{"bytes":482,"imports":[{"path":"src/components/Scrollable/Scrollable.tsx","kind":"import-statement","original":"./Scrollable"}],"format":"esm"},"src/hooks/useContainerDebug.tsx":{"bytes":5641,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"react-dom","kind":"import-statement","external":true},{"path":"@dxos/react-ui-syntax-highlighter","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/components/index.ts","kind":"import-statement","original":"../components"}],"format":"esm"},"src/hooks/useEventHandlerAdapter.ts":{"bytes":8069,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/useVisibleItems.ts":{"bytes":3168,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/index.ts":{"bytes":714,"imports":[{"path":"src/hooks/useContainerDebug.tsx","kind":"import-statement","original":"./useContainerDebug"},{"path":"src/hooks/useEventHandlerAdapter.ts","kind":"import-statement","original":"./useEventHandlerAdapter"},{"path":"src/hooks/useVisibleItems.ts","kind":"import-statement","original":"./useVisibleItems"}],"format":"esm"},"src/components/Stack/Stack.tsx":{"bytes":17753,"imports":[{"path":"@tanstack/react-virtual","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/hooks/index.ts","kind":"import-statement","original":"../../hooks"},{"path":"src/components/Mosaic/index.ts","kind":"import-statement","original":"../Mosaic"},{"path":"src/components/Mosaic/index.ts","kind":"import-statement","original":"../Mosaic"}],"format":"esm"},"src/components/Stack/index.ts":{"bytes":464,"imports":[{"path":"src/components/Stack/Stack.tsx","kind":"import-statement","original":"./Stack"}],"format":"esm"},"src/components/Mosaic/Mosaic.tsx":{"bytes":85928,"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/set-custom-native-drag-preview","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":"@atlaskit/pragmatic-drag-and-drop-react-drop-indicator/box","kind":"import-statement","external":true},{"path":"@radix-ui/react-compose-refs","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"@radix-ui/react-primitive","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"bind-event-listener","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/components/Focus/index.ts","kind":"import-statement","original":"../Focus"},{"path":"src/components/Scrollable/index.ts","kind":"import-statement","original":"../Scrollable"},{"path":"src/components/Stack/index.ts","kind":"import-statement","original":"../Stack"}],"format":"esm"},"src/components/Mosaic/index.ts":{"bytes":839,"imports":[{"path":"src/components/Mosaic/styles.ts","kind":"import-statement","original":"./styles"},{"path":"src/components/Mosaic/extension.ts","kind":"import-statement","original":"./extension"},{"path":"src/components/Mosaic/types.ts","kind":"import-statement","original":"./types"},{"path":"src/components/Mosaic/Mosaic.tsx","kind":"import-statement","original":"./Mosaic"}],"format":"esm"},"src/components/index.ts":{"bytes":868,"imports":[{"path":"src/components/Card/index.ts","kind":"import-statement","original":"./Card"},{"path":"src/components/Focus/index.ts","kind":"import-statement","original":"./Focus"},{"path":"src/components/Image/index.ts","kind":"import-statement","original":"./Image"},{"path":"src/components/Layout/index.ts","kind":"import-statement","original":"./Layout"},{"path":"src/components/Mosaic/index.ts","kind":"import-statement","original":"./Mosaic"},{"path":"src/components/Stack/index.ts","kind":"import-statement","original":"./Stack"}],"format":"esm"},"src/index.ts":{"bytes":460,"imports":[{"path":"src/components/index.ts","kind":"import-statement","original":"./components"}],"format":"esm"},"src/testing/decorator.tsx":{"bytes":1207,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"src/components/index.ts","kind":"import-statement","original":"../components"}],"format":"esm"},"src/testing/Board.tsx":{"bytes":27496,"imports":[{"path":"@radix-ui/react-compose-refs","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-syntax-highlighter","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/components/index.ts","kind":"import-statement","original":"../components"},{"path":"src/hooks/index.ts","kind":"import-statement","original":"../hooks"}],"format":"esm"},"src/testing/CardContainer.tsx":{"bytes":7835,"imports":[{"path":"@radix-ui/react-use-controllable-state","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}],"format":"esm"},"src/testing/DefaultStackTile.tsx":{"bytes":4268,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-syntax-highlighter","kind":"import-statement","external":true},{"path":"src/components/index.ts","kind":"import-statement","original":"../components"}],"format":"esm"},"src/testing/index.ts":{"bytes":761,"imports":[{"path":"src/testing/decorator.tsx","kind":"import-statement","original":"./decorator"},{"path":"src/testing/Board.tsx","kind":"import-statement","original":"./Board"},{"path":"src/testing/CardContainer.tsx","kind":"import-statement","original":"./CardContainer"},{"path":"src/testing/DefaultStackTile.tsx","kind":"import-statement","original":"./DefaultStackTile"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":4807},"dist/lib/browser/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-QKMUWO5X.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true}],"exports":["Card","CardDragPreview","Focus","Image","Layout","Mosaic","Stack","VirtualStack","cardStyles","dropHandler","focusStyles","mosaicStyles","useFocus","useMosaic","useMosaicContainer","useMosaicTile"],"entryPoint":"src/index.ts","cssBundle":"dist/lib/browser/index.css","inputs":{"src/components/Card/index.ts":{"bytesInOutput":0},"src/components/Card/CardDragPreview.tsx":{"bytesInOutput":492},"src/components/Layout/Layout.tsx":{"bytesInOutput":1395},"src/index.ts":{"bytesInOutput":0}},"bytes":2537},"dist/lib/browser/testing/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":28452},"dist/lib/browser/testing/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-QKMUWO5X.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom","kind":"import-statement","external":true},{"path":"@dxos/react-ui-syntax-highlighter","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@radix-ui/react-compose-refs","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-syntax-highlighter","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","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":"react","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-syntax-highlighter","kind":"import-statement","external":true}],"exports":["Board","CardContainer","Debug","DefaultStackTile","IntrinsicCardContainer","PopoverCardContainer","TestColumn","TestItem","withMosaic"],"entryPoint":"src/testing/index.ts","cssBundle":"dist/lib/browser/testing/index.css","inputs":{"src/testing/decorator.tsx":{"bytesInOutput":184},"src/hooks/useContainerDebug.tsx":{"bytesInOutput":1247},"src/hooks/useEventHandlerAdapter.ts":{"bytesInOutput":1620},"src/testing/index.ts":{"bytesInOutput":0},"src/testing/Board.tsx":{"bytesInOutput":7200},"src/testing/CardContainer.tsx":{"bytesInOutput":1961},"src/testing/DefaultStackTile.tsx":{"bytesInOutput":1086}},"bytes":13851},"dist/lib/browser/chunk-QKMUWO5X.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":103879},"dist/lib/browser/chunk-QKMUWO5X.mjs":{"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/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":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","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":"@radix-ui/react-primitive","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"@tanstack/react-virtual","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","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/set-custom-native-drag-preview","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":"@atlaskit/pragmatic-drag-and-drop-react-drop-indicator/box","kind":"import-statement","external":true},{"path":"@radix-ui/react-compose-refs","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"@radix-ui/react-primitive","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"bind-event-listener","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"overlayscrollbars-react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"overlayscrollbars/styles/overlayscrollbars.css","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"exports":["Card","Focus","Image","Mosaic","Stack","VirtualStack","dropHandler","styles","styles2","styles3","useContainerContext","useFocus","useRootContext","useTileContext"],"inputs":{"src/components/Card/styles.ts":{"bytesInOutput":695},"src/components/Image/Image.tsx":{"bytesInOutput":4776},"src/components/Card/Card.tsx":{"bytesInOutput":8570},"src/translations.ts":{"bytesInOutput":126},"src/components/Focus/styles.ts":{"bytesInOutput":532},"src/components/Focus/Focus.tsx":{"bytesInOutput":1677},"src/components/Focus/index.ts":{"bytesInOutput":0},"src/components/Mosaic/styles.ts":{"bytesInOutput":1303},"src/components/Mosaic/extension.ts":{"bytesInOutput":3256},"src/components/Stack/Stack.tsx":{"bytesInOutput":4188},"src/components/Mosaic/index.ts":{"bytesInOutput":0},"src/components/Mosaic/Mosaic.tsx":{"bytesInOutput":20494},"src/components/Scrollable/Scrollable.tsx":{"bytesInOutput":1806},"src/components/Scrollable/scrollable.css":{"bytesInOutput":0},"src/hooks/useVisibleItems.ts":{"bytesInOutput":542}},"bytes":48725},"dist/lib/browser/index.css.map":{"imports":[],"exports":[],"inputs":{},"bytes":1137},"dist/lib/browser/index.css":{"imports":[],"inputs":{"src/components/Scrollable/scrollable.css":{"bytesInOutput":354}},"bytes":439},"dist/lib/browser/testing/index.css.map":{"imports":[],"exports":[],"inputs":{},"bytes":1140},"dist/lib/browser/testing/index.css":{"imports":[],"inputs":{"src/components/Scrollable/scrollable.css":{"bytesInOutput":354}},"bytes":439}}}
1
+ {"inputs":{"src/components/Card/styles.ts":{"bytes":2466,"imports":[],"format":"esm"},"src/translations.ts":{"bytes":1059,"imports":[],"format":"esm"},"src/components/Image/Image.tsx":{"bytes":22239,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true}],"format":"esm"},"src/components/Image/index.ts":{"bytes":464,"imports":[{"path":"src/components/Image/Image.tsx","kind":"import-statement","original":"./Image"}],"format":"esm"},"src/components/Card/Card.tsx":{"bytes":34464,"imports":[{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/translations.ts","kind":"import-statement","original":"../../translations"},{"path":"src/components/Image/index.ts","kind":"import-statement","original":"../Image"},{"path":"src/components/Card/styles.ts","kind":"import-statement","original":"./styles"}],"format":"esm"},"src/components/Card/CardDragPreview.tsx":{"bytes":2399,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/components/Card/styles.ts","kind":"import-statement","original":"./styles"}],"format":"esm"},"src/components/Card/index.ts":{"bytes":758,"imports":[{"path":"src/components/Card/styles.ts","kind":"import-statement","original":"./styles"},{"path":"src/components/Card/Card.tsx","kind":"import-statement","original":"./Card"},{"path":"src/components/Card/CardDragPreview.tsx","kind":"import-statement","original":"./CardDragPreview"}],"format":"esm"},"src/components/Focus/styles.ts":{"bytes":2242,"imports":[],"format":"esm"},"src/components/Focus/Focus.tsx":{"bytes":8109,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@radix-ui/react-compose-refs","kind":"import-statement","external":true},{"path":"@radix-ui/react-primitive","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/components/Focus/styles.ts","kind":"import-statement","original":"./styles"}],"format":"esm"},"src/components/Focus/index.ts":{"bytes":658,"imports":[{"path":"src/components/Focus/styles.ts","kind":"import-statement","original":"./styles"},{"path":"src/components/Focus/Focus.tsx","kind":"import-statement","original":"./Focus"}],"format":"esm"},"src/components/Layout/Layout.tsx":{"bytes":6547,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true}],"format":"esm"},"src/components/Layout/index.ts":{"bytes":470,"imports":[{"path":"src/components/Layout/Layout.tsx","kind":"import-statement","original":"./Layout"}],"format":"esm"},"src/components/Mosaic/styles.ts":{"bytes":4082,"imports":[],"format":"esm"},"src/components/Mosaic/extension.ts":{"bytes":14399,"imports":[{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true}],"format":"esm"},"src/components/Mosaic/types.ts":{"bytes":3507,"imports":[],"format":"esm"},"src/components/Scrollable/scrollable.css":{"bytes":736,"imports":[]},"src/components/Scrollable/Scrollable.tsx":{"bytes":7659,"imports":[{"path":"overlayscrollbars-react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"overlayscrollbars/styles/overlayscrollbars.css","kind":"import-statement","external":true},{"path":"src/components/Scrollable/scrollable.css","kind":"import-statement","original":"./scrollable.css"}],"format":"esm"},"src/components/Scrollable/index.ts":{"bytes":482,"imports":[{"path":"src/components/Scrollable/Scrollable.tsx","kind":"import-statement","original":"./Scrollable"}],"format":"esm"},"src/hooks/useContainerDebug.tsx":{"bytes":5641,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"react-dom","kind":"import-statement","external":true},{"path":"@dxos/react-ui-syntax-highlighter","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/components/index.ts","kind":"import-statement","original":"../components"}],"format":"esm"},"src/hooks/useEventHandlerAdapter.ts":{"bytes":8069,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/useVisibleItems.ts":{"bytes":3168,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/index.ts":{"bytes":714,"imports":[{"path":"src/hooks/useContainerDebug.tsx","kind":"import-statement","original":"./useContainerDebug"},{"path":"src/hooks/useEventHandlerAdapter.ts","kind":"import-statement","original":"./useEventHandlerAdapter"},{"path":"src/hooks/useVisibleItems.ts","kind":"import-statement","original":"./useVisibleItems"}],"format":"esm"},"src/components/Stack/Stack.tsx":{"bytes":17785,"imports":[{"path":"@tanstack/react-virtual","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/hooks/index.ts","kind":"import-statement","original":"../../hooks"},{"path":"src/components/Mosaic/index.ts","kind":"import-statement","original":"../Mosaic"},{"path":"src/components/Mosaic/index.ts","kind":"import-statement","original":"../Mosaic"}],"format":"esm"},"src/components/Stack/index.ts":{"bytes":464,"imports":[{"path":"src/components/Stack/Stack.tsx","kind":"import-statement","original":"./Stack"}],"format":"esm"},"src/components/Mosaic/Mosaic.tsx":{"bytes":85824,"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/set-custom-native-drag-preview","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":"@atlaskit/pragmatic-drag-and-drop-react-drop-indicator/box","kind":"import-statement","external":true},{"path":"@radix-ui/react-compose-refs","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"@radix-ui/react-primitive","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"bind-event-listener","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/components/Focus/index.ts","kind":"import-statement","original":"../Focus"},{"path":"src/components/Scrollable/index.ts","kind":"import-statement","original":"../Scrollable"},{"path":"src/components/Stack/index.ts","kind":"import-statement","original":"../Stack"}],"format":"esm"},"src/components/Mosaic/index.ts":{"bytes":839,"imports":[{"path":"src/components/Mosaic/styles.ts","kind":"import-statement","original":"./styles"},{"path":"src/components/Mosaic/extension.ts","kind":"import-statement","original":"./extension"},{"path":"src/components/Mosaic/types.ts","kind":"import-statement","original":"./types"},{"path":"src/components/Mosaic/Mosaic.tsx","kind":"import-statement","original":"./Mosaic"}],"format":"esm"},"src/components/index.ts":{"bytes":868,"imports":[{"path":"src/components/Card/index.ts","kind":"import-statement","original":"./Card"},{"path":"src/components/Focus/index.ts","kind":"import-statement","original":"./Focus"},{"path":"src/components/Image/index.ts","kind":"import-statement","original":"./Image"},{"path":"src/components/Layout/index.ts","kind":"import-statement","original":"./Layout"},{"path":"src/components/Mosaic/index.ts","kind":"import-statement","original":"./Mosaic"},{"path":"src/components/Stack/index.ts","kind":"import-statement","original":"./Stack"}],"format":"esm"},"src/index.ts":{"bytes":541,"imports":[{"path":"src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"src/hooks/index.ts","kind":"import-statement","original":"./hooks"}],"format":"esm"},"src/testing/decorator.tsx":{"bytes":1207,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"src/components/index.ts","kind":"import-statement","original":"../components"}],"format":"esm"},"src/testing/Board.tsx":{"bytes":27666,"imports":[{"path":"@radix-ui/react-compose-refs","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-syntax-highlighter","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/components/index.ts","kind":"import-statement","original":"../components"},{"path":"src/hooks/index.ts","kind":"import-statement","original":"../hooks"}],"format":"esm"},"src/testing/CardContainer.tsx":{"bytes":7835,"imports":[{"path":"@radix-ui/react-use-controllable-state","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}],"format":"esm"},"src/testing/DefaultStackTile.tsx":{"bytes":4268,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-syntax-highlighter","kind":"import-statement","external":true},{"path":"src/components/index.ts","kind":"import-statement","original":"../components"}],"format":"esm"},"src/testing/index.ts":{"bytes":761,"imports":[{"path":"src/testing/decorator.tsx","kind":"import-statement","original":"./decorator"},{"path":"src/testing/Board.tsx","kind":"import-statement","original":"./Board"},{"path":"src/testing/CardContainer.tsx","kind":"import-statement","original":"./CardContainer"},{"path":"src/testing/DefaultStackTile.tsx","kind":"import-statement","original":"./DefaultStackTile"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":4810},"dist/lib/browser/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-UMBPEG4F.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true}],"exports":["Card","CardDragPreview","Focus","Image","Layout","Mosaic","Stack","VirtualStack","cardStyles","dropHandler","focusStyles","mosaicStyles","useContainerDebug","useEventHandlerAdapter","useFocus","useMosaic","useMosaicContainer","useMosaicTile","useVisibleItems"],"entryPoint":"src/index.ts","cssBundle":"dist/lib/browser/index.css","inputs":{"src/components/Card/index.ts":{"bytesInOutput":0},"src/components/Card/CardDragPreview.tsx":{"bytesInOutput":492},"src/components/Layout/Layout.tsx":{"bytesInOutput":1395},"src/index.ts":{"bytesInOutput":0}},"bytes":2669},"dist/lib/browser/testing/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":21659},"dist/lib/browser/testing/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-UMBPEG4F.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@radix-ui/react-compose-refs","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-syntax-highlighter","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","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":"react","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-syntax-highlighter","kind":"import-statement","external":true}],"exports":["Board","CardContainer","Debug","DefaultStackTile","IntrinsicCardContainer","PopoverCardContainer","TestColumn","TestItem","withMosaic"],"entryPoint":"src/testing/index.ts","cssBundle":"dist/lib/browser/testing/index.css","inputs":{"src/testing/decorator.tsx":{"bytesInOutput":181},"src/testing/index.ts":{"bytesInOutput":0},"src/testing/Board.tsx":{"bytesInOutput":7192},"src/testing/CardContainer.tsx":{"bytesInOutput":1961},"src/testing/DefaultStackTile.tsx":{"bytesInOutput":1100}},"bytes":10905},"dist/lib/browser/chunk-UMBPEG4F.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":111159},"dist/lib/browser/chunk-UMBPEG4F.mjs":{"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/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":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","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":"@radix-ui/react-primitive","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"@codemirror/state","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom","kind":"import-statement","external":true},{"path":"@dxos/react-ui-syntax-highlighter","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","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/set-custom-native-drag-preview","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":"@atlaskit/pragmatic-drag-and-drop-react-drop-indicator/box","kind":"import-statement","external":true},{"path":"@radix-ui/react-compose-refs","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"@radix-ui/react-primitive","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"bind-event-listener","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"overlayscrollbars-react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"overlayscrollbars/styles/overlayscrollbars.css","kind":"import-statement","external":true},{"path":"@tanstack/react-virtual","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"exports":["Card","Focus","Image","Mosaic","Stack","VirtualStack","dropHandler","styles","styles2","styles3","useContainerContext","useContainerDebug","useEventHandlerAdapter","useFocus","useRootContext","useTileContext","useVisibleItems"],"inputs":{"src/components/Card/styles.ts":{"bytesInOutput":695},"src/components/Image/Image.tsx":{"bytesInOutput":4776},"src/components/Card/Card.tsx":{"bytesInOutput":8779},"src/translations.ts":{"bytesInOutput":126},"src/components/Focus/styles.ts":{"bytesInOutput":532},"src/components/Focus/Focus.tsx":{"bytesInOutput":1677},"src/components/Focus/index.ts":{"bytesInOutput":0},"src/components/Mosaic/styles.ts":{"bytesInOutput":1303},"src/components/Mosaic/extension.ts":{"bytesInOutput":3256},"src/hooks/useContainerDebug.tsx":{"bytesInOutput":1322},"src/components/Mosaic/index.ts":{"bytesInOutput":0},"src/components/Mosaic/Mosaic.tsx":{"bytesInOutput":20600},"src/components/Scrollable/Scrollable.tsx":{"bytesInOutput":1634},"src/components/Scrollable/scrollable.css":{"bytesInOutput":0},"src/components/Stack/Stack.tsx":{"bytesInOutput":4183},"src/hooks/useEventHandlerAdapter.ts":{"bytesInOutput":1620},"src/hooks/useVisibleItems.ts":{"bytesInOutput":542}},"bytes":51983},"dist/lib/browser/index.css.map":{"imports":[],"exports":[],"inputs":{},"bytes":1137},"dist/lib/browser/index.css":{"imports":[],"inputs":{"src/components/Scrollable/scrollable.css":{"bytesInOutput":354}},"bytes":439},"dist/lib/browser/testing/index.css.map":{"imports":[],"exports":[],"inputs":{},"bytes":1140},"dist/lib/browser/testing/index.css":{"imports":[],"inputs":{"src/components/Scrollable/scrollable.css":{"bytesInOutput":354}},"bytes":439}}}