@dxos/react-ui-mosaic 0.8.4-main.bc674ce → 0.8.4-main.ef1bc66f44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{chunk-UMBPEG4F.mjs → chunk-Y6GU2CCU.mjs} +833 -992
- package/dist/lib/browser/chunk-Y6GU2CCU.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +407 -45
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +28 -218
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/node-esm/{chunk-X6GV7SMK.mjs → chunk-KTLFCRVA.mjs} +833 -992
- package/dist/lib/node-esm/chunk-KTLFCRVA.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +407 -45
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +28 -218
- package/dist/lib/node-esm/testing/index.mjs.map +4 -4
- package/dist/types/src/components/Board/Board.d.ts +65 -0
- package/dist/types/src/components/Board/Board.d.ts.map +1 -0
- package/dist/types/src/components/{Mosaic/Mosaic.stories.d.ts → Board/Board.stories.d.ts} +9 -1
- package/dist/types/src/components/Board/Board.stories.d.ts.map +1 -0
- package/dist/types/src/components/Board/Column.d.ts +29 -0
- package/dist/types/src/components/Board/Column.d.ts.map +1 -0
- package/dist/types/src/components/Board/Item.d.ts +9 -0
- package/dist/types/src/components/Board/Item.d.ts.map +1 -0
- package/dist/types/src/components/Board/index.d.ts +2 -0
- package/dist/types/src/components/Board/index.d.ts.map +1 -0
- package/dist/types/src/components/Card/Card.d.ts +5 -3
- package/dist/types/src/components/Card/Card.d.ts.map +1 -1
- package/dist/types/src/components/Focus/Focus.d.ts +5 -4
- package/dist/types/src/components/Focus/Focus.d.ts.map +1 -1
- package/dist/types/src/components/Focus/styles.d.ts.map +1 -1
- package/dist/types/src/components/Mosaic/Mosaic.d.ts +8 -17
- package/dist/types/src/components/Mosaic/Mosaic.d.ts.map +1 -1
- package/dist/types/src/components/Mosaic/styles.d.ts.map +1 -1
- package/dist/types/src/components/Mosaic/types.d.ts +0 -2
- package/dist/types/src/components/Mosaic/types.d.ts.map +1 -1
- package/dist/types/src/components/Stack/Stack.d.ts +3 -3
- package/dist/types/src/components/Stack/Stack.d.ts.map +1 -1
- package/dist/types/src/components/Stack/Stack.stories.d.ts.map +1 -1
- package/dist/types/src/{testing/Virtualizer.stories.d.ts → components/Stack/virtualizer.stories.d.ts} +2 -2
- package/dist/types/src/components/Stack/virtualizer.stories.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +1 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/testing/CardContainer.d.ts +1 -1
- package/dist/types/src/testing/CardContainer.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +1 -1
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/types.d.ts +21 -0
- package/dist/types/src/testing/types.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +4 -1
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +24 -26
- package/src/components/{Mosaic/Mosaic.stories.tsx → Board/Board.stories.tsx} +52 -8
- package/src/components/Board/Board.tsx +166 -0
- package/src/components/Board/Column.tsx +253 -0
- package/src/components/Board/Item.tsx +80 -0
- package/src/components/{Layout → Board}/index.ts +1 -1
- package/src/components/Card/Card.stories.tsx +1 -1
- package/src/components/Card/styles.ts +1 -1
- package/src/components/Focus/Focus.tsx +7 -9
- package/src/components/Focus/styles.ts +3 -6
- package/src/components/Image/Image.stories.tsx +1 -1
- package/src/components/Mosaic/Mosaic.tsx +40 -39
- package/src/components/Mosaic/styles.ts +9 -8
- package/src/components/Mosaic/types.ts +0 -4
- package/src/components/Stack/Stack.stories.tsx +23 -19
- package/src/components/Stack/Stack.tsx +34 -25
- package/src/{testing/Virtualizer.stories.tsx → components/Stack/virtualizer.stories.tsx} +47 -37
- package/src/components/index.ts +1 -1
- package/src/hooks/useContainerDebug.tsx +4 -2
- package/src/testing/CardContainer.tsx +12 -7
- package/src/testing/index.ts +1 -1
- package/src/testing/types.ts +38 -0
- package/src/translations.ts +4 -1
- package/dist/lib/browser/chunk-UMBPEG4F.mjs.map +0 -7
- package/dist/lib/browser/index.css +0 -13
- package/dist/lib/browser/index.css.map +0 -7
- package/dist/lib/browser/testing/index.css +0 -13
- package/dist/lib/browser/testing/index.css.map +0 -7
- package/dist/lib/node-esm/chunk-X6GV7SMK.mjs.map +0 -7
- package/dist/lib/node-esm/index.css +0 -13
- package/dist/lib/node-esm/index.css.map +0 -7
- package/dist/lib/node-esm/testing/index.css +0 -13
- package/dist/lib/node-esm/testing/index.css.map +0 -7
- package/dist/types/src/components/Layout/Layout.d.ts +0 -33
- package/dist/types/src/components/Layout/Layout.d.ts.map +0 -1
- package/dist/types/src/components/Layout/Layout.stories.d.ts +0 -10
- package/dist/types/src/components/Layout/Layout.stories.d.ts.map +0 -1
- package/dist/types/src/components/Layout/index.d.ts +0 -2
- package/dist/types/src/components/Layout/index.d.ts.map +0 -1
- package/dist/types/src/components/Mosaic/Mosaic.stories.d.ts.map +0 -1
- package/dist/types/src/components/Scrollable/Scrollable.d.ts +0 -24
- package/dist/types/src/components/Scrollable/Scrollable.d.ts.map +0 -1
- package/dist/types/src/components/Scrollable/Scrollable.stories.d.ts +0 -10
- package/dist/types/src/components/Scrollable/Scrollable.stories.d.ts.map +0 -1
- package/dist/types/src/components/Scrollable/index.d.ts +0 -2
- package/dist/types/src/components/Scrollable/index.d.ts.map +0 -1
- package/dist/types/src/testing/Board.d.ts +0 -45
- package/dist/types/src/testing/Board.d.ts.map +0 -1
- package/dist/types/src/testing/Slot.stories.d.ts +0 -14
- package/dist/types/src/testing/Slot.stories.d.ts.map +0 -1
- package/dist/types/src/testing/Virtualizer.stories.d.ts.map +0 -1
- package/src/components/Layout/Layout.stories.tsx +0 -59
- package/src/components/Layout/Layout.tsx +0 -108
- package/src/components/Scrollable/Scrollable.stories.tsx +0 -59
- package/src/components/Scrollable/Scrollable.tsx +0 -88
- package/src/components/Scrollable/index.ts +0 -5
- package/src/components/Scrollable/scrollable.css +0 -20
- package/src/testing/Board.tsx +0 -278
- package/src/testing/Slot.stories.tsx +0 -101
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/hooks/useVisibleItems.ts", "../../../src/components/Focus/styles.ts", "../../../src/components/Focus/Focus.tsx", "../../../src/components/Mosaic/styles.ts", "../../../src/components/Mosaic/extension.ts", "../../../src/components/Stack/Stack.tsx", "../../../src/components/Mosaic/Mosaic.tsx", "../../../src/translations.ts", "../../../src/components/Card/styles.ts", "../../../src/components/Card/Card.tsx", "../../../src/components/Image/Image.tsx"],
|
|
4
|
+
"sourcesContent": ["//\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", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { type ClassNameValue } from '@dxos/react-ui';\n\n// TODO(burdon): Create theme for component.\nexport const styles = {\n container: {\n root: [\n // TODO(burdon): Option for border/rounded; ring/outline vs border?\n 'outline-none border border-separator md:rounded-sm',\n // Focus (e.g., via tabster).\n 'focus:!border-accentSurface',\n // Active (e.g., drop target).\n 'data-[focus-state=active]:border-neutralFocusIndicator',\n // Error\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 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 Axis, 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 asChild?: boolean;\n orientation?: 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, orientation = '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: orientation,\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-orientation=vertical]:snap-start', // TODO(burdon): Option.\n 'data-[mosaic-placeholder-orientation=vertical]:plb-1',\n 'data-[mosaic-placeholder-orientation=vertical]:data-[mosaic-placeholder-state=active]:plb-2.5',\n 'data-[mosaic-placeholder-orientation=horizontal]:pli-1',\n 'data-[mosaic-placeholder-orientation=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-orientation=vertical]:bs-0',\n 'group-data-[mosaic-placeholder-orientation=vertical]:group-data-[mosaic-placeholder-state=active]:bs-[var(--mosaic-placeholder-height)]',\n 'group-data-[mosaic-placeholder-orientation=horizontal]:is-0',\n 'group-data-[mosaic-placeholder-orientation=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\\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 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 Axis, type SlottableClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { useVisibleItems } from '../../hooks';\nimport { type GetId, Mosaic, type MosaicTileProps, type MosiacPlaceholderProps, useMosaicContainer } from '../Mosaic';\nimport { mosaicStyles } from '../Mosaic';\n\nconst STACK_NAME = 'Stack';\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 orientation?: 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 {\n className,\n classNames,\n role = 'list',\n orientation: orientationProp = 'vertical',\n draggable = true,\n items,\n getId,\n Tile,\n debug,\n ...props\n },\n forwardedRef,\n ) => {\n invariant(Tile);\n const { id, orientation = orientationProp, dragging } = useMosaicContainer(STACK_NAME);\n const visibleItems = useVisibleItems({ id, items, dragging: dragging?.source.data, getId });\n invariant(orientation === 'vertical' || orientation === 'horizontal', `Invalid orientation: ${orientation}`);\n\n return (\n <div\n {...props}\n role={role}\n className={mx(\n 'flex',\n orientation === 'horizontal' && 'bs-full [&>*]:shrink-0',\n orientation === 'vertical' && 'flex-col',\n classNames,\n className,\n )}\n ref={forwardedRef}\n >\n <Placeholder orientation={orientation} 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 orientation={orientation} location={index + 1.5} />\n </Fragment>\n ))}\n </div>\n );\n },\n);\n\nStackInner.displayName = STACK_NAME;\n\nconst Stack = StackInner as <TData = any>(props: StackProps<TData> & { ref?: Ref<HTMLDivElement> }) => ReactElement;\n\n//\n// VirtualStack\n//\n\nconst VIRTUAL_STACK_NAME = 'VirtualStackInner';\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 orientation = '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(VIRTUAL_STACK_NAME);\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 orientation === 'horizontal' && 'bs-full [&>*]:shrink-0',\n orientation === 'vertical' && 'flex-col',\n classNames,\n className,\n )}\n style={{\n position: 'relative',\n ...(orientation === '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 ...(orientation === '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 orientation={orientation} 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 = VIRTUAL_STACK_NAME;\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 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 AllowedAxis, type Axis, 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 { Stack, type StackProps, VirtualStack } from '../Stack';\n\nimport {\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\nconst ROOT_NAME = 'Mosaic.Root';\n\n// State attribute: [&:has(>_[data-mosaic-debug=true])]\nconst ROOT_DEBUG_ATTR = 'mosaic-debug';\n\ntype RootProps = ThemedClassName<\n PropsWithChildren<{\n asChild?: boolean;\n debug?: boolean;\n }>\n>;\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', classNames)}\n {...{\n [`data-${ROOT_DEBUG_ATTR}`]: debug,\n }}\n ref={composedRef}\n >\n {children}\n </Root>\n </RootContextProvider>\n );\n});\n\nRoot.displayName = ROOT_NAME;\n\n//\n// Container\n//\n\nconst CONTAINER_NAME = 'Mosaic.Container';\n\ntype ContainerState = { type: 'idle' } | { type: 'active'; bounds?: DOMRect };\n\ntype ContainerContextValue<TData = any, Location = LocationType> = {\n id: string;\n eventHandler: MosaicEventHandler<TData>;\n orientation?: 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' | 'orientation'>> & {\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 orientation = '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_NAME);\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: () => orientation,\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 orientation={orientation}\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 = CONTAINER_NAME;\n\n//\n// Tile\n//\n\nconst TILE_NAME = 'Mosaic.Tile';\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 { id: containerId, eventHandler, orientation, scrolling, setActiveLocation } = useContainerContext(TILE_NAME);\n const [state, setState] = useState<TileState>({ type: 'idle' });\n\n const allowedEdges = useMemo<Edge[]>(\n () => allowedEdgesProp || (orientation === 'vertical' ? ['top', 'bottom'] : ['left', 'right']),\n [allowedEdgesProp, orientation],\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 = TILE_NAME;\n\n//\n// Placeholder\n//\n\nconst PLACEHOLDER_NAME = 'Mosaic.Placeholder';\n\n// Orientation: data-[mosaic-placeholder-orientation=vertical]\nconst PLACEHOLDER_ORIENTATION_ATTR = 'mosaic-placeholder-orientation';\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 orientation?: Axis;\n location: Location;\n }>\n>;\n\nconst Placeholder = <Location extends LocationType = LocationType>({\n classNames,\n children,\n asChild,\n orientation = '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_NAME);\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_ORIENTATION_ATTR}`]: orientation,\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 = PLACEHOLDER_NAME;\n\n//\n// DropIndicator\n// TODO(burdon): Support DropIndicator or Placeholder variants.\n//\n\nconst DROP_INDICATOR_NAME = 'Mosaic.DropIndicator';\n\ntype DropIndicatorProps = Omit<NativeDropIndicatorProps, 'edge'>;\n\nconst DropIndicator = (props: DropIndicatorProps) => {\n const { state } = useTileContext(DROP_INDICATOR_NAME);\n return state.type === 'target' && state.closestEdge ? (\n <NativeDropIndicator {...props} edge={state.closestEdge} />\n ) : null;\n};\n\nDropIndicator.displayName = DROP_INDICATOR_NAME;\n\n//\n// Mosaic\n//\n\nexport const Mosaic = {\n Root,\n Container,\n Tile,\n Placeholder,\n DropIndicator,\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 StackProps as MosaicStackProps,\n};\n\nexport { useRootContext as useMosaic, useContainerContext as useMosaicContainer, useTileContext as useMosaicTile };\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 'add item label': 'Add item',\n 'delete menu label': 'Delete',\n },\n },\n },\n] as const satisfies Resource[];\n", "//\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] is-full card-min-width overflow-hidden',\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 { 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 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"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["useMemo", "useVisibleItems", "id", "items", "dragging", "getId", "visibleItems", "useMemo", "containerId", "idx", "findIndex", "item", "slice", "splice", "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", "orientation", "props", "forwardedRef", "rootRef", "useRef", "composedRef", "useComposedRefs", "Root", "Slot", "Primitive", "div", "focusableGroupAttrs", "useFocusableGroup", "tabBehavior", "arrowNavigationAttrs", "useArrowNavigationGroup", "axis", "memorizeCurrent", "tabsterAttrs", "useMergedTabsterAttributes_unstable", "state", "setState", "useState", "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", "useVirtualizer", "React", "Fragment", "forwardRef", "invariant", "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", "getSourceData", "source", "data", "type", "RootContextProvider", "useRootContext", "createContext", "ROOT_NAME", "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", "displayName", "CONTAINER_NAME", "ContainerContextProvider", "useContainerContext", "CONTAINER_STATE_ATTR", "CONTAINER_PLACEHOLDER_WIDTH", "CONTAINER_PLACEHOLDER_HEIGHT", "counter", "Container", "eventHandler", "eventHandlerProp", "orientation", "autoScroll", "autoscrollElement", "withFocus", "props", "useMemo", "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", "TILE_NAME", "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_NAME", "PLACEHOLDER_ORIENTATION_ATTR", "PLACEHOLDER_STATE_ATTR", "Placeholder", "DROP_INDICATOR_NAME", "DropIndicator", "NativeDropIndicator", "edge", "Mosaic", "Stack", "VirtualStack", "translationKey", "translations", "styles", "root", "border", "grid_3", "grid_2", "grid_3_coarse", "poster", "Slot", "React", "createContext", "forwardRef", "useContext", "Button", "DropdownMenu", "Icon", "Toolbar", "useTranslation", "mx", "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", "React", "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", "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", "STACK_NAME", "StackInner", "forwardRef", "className", "classNames", "role", "orientation", "orientationProp", "draggable", "items", "getId", "Tile", "debug", "props", "forwardedRef", "invariant", "id", "dragging", "useMosaicContainer", "visibleItems", "useVisibleItems", "source", "data", "React", "div", "mx", "ref", "Placeholder", "location", "map", "item", "index", "Fragment", "key", "displayName", "Stack", "VIRTUAL_STACK_NAME", "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"]
|
|
7
|
+
}
|