@dxos/react-ui-list 0.8.4-main.a4bbb77 → 0.8.4-main.abd8ff62ef
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/index.mjs +1349 -718
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +1349 -718
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/components/Accordion/Accordion.d.ts +1 -1
- package/dist/types/src/components/Accordion/Accordion.d.ts.map +1 -1
- package/dist/types/src/components/Accordion/Accordion.stories.d.ts +0 -3
- package/dist/types/src/components/Accordion/Accordion.stories.d.ts.map +1 -1
- package/dist/types/src/components/Accordion/AccordionItem.d.ts.map +1 -1
- package/dist/types/src/components/Accordion/AccordionRoot.d.ts +1 -1
- package/dist/types/src/components/Accordion/AccordionRoot.d.ts.map +1 -1
- package/dist/types/src/components/Combobox/Combobox.d.ts +105 -0
- package/dist/types/src/components/Combobox/Combobox.d.ts.map +1 -0
- package/dist/types/src/components/Combobox/Combobox.stories.d.ts +12 -0
- package/dist/types/src/components/Combobox/Combobox.stories.d.ts.map +1 -0
- package/dist/types/src/components/Combobox/index.d.ts +2 -0
- package/dist/types/src/components/Combobox/index.d.ts.map +1 -0
- package/dist/types/src/components/List/List.d.ts +19 -8
- package/dist/types/src/components/List/List.d.ts.map +1 -1
- package/dist/types/src/components/List/List.stories.d.ts +2 -2
- package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/ListItem.d.ts +10 -8
- package/dist/types/src/components/List/ListItem.d.ts.map +1 -1
- package/dist/types/src/components/List/ListRoot.d.ts +2 -2
- package/dist/types/src/components/List/ListRoot.d.ts.map +1 -1
- package/dist/types/src/components/List/testing.d.ts +1 -1
- package/dist/types/src/components/List/testing.d.ts.map +1 -1
- package/dist/types/src/components/Listbox/Listbox.d.ts +27 -0
- package/dist/types/src/components/Listbox/Listbox.d.ts.map +1 -0
- package/dist/types/src/components/Listbox/Listbox.stories.d.ts +12 -0
- package/dist/types/src/components/Listbox/Listbox.stories.d.ts.map +1 -0
- package/dist/types/src/components/Listbox/index.d.ts +2 -0
- package/dist/types/src/components/Listbox/index.d.ts.map +1 -0
- package/dist/types/src/components/Picker/Picker.d.ts +49 -0
- package/dist/types/src/components/Picker/Picker.d.ts.map +1 -0
- package/dist/types/src/components/Picker/Picker.stories.d.ts +28 -0
- package/dist/types/src/components/Picker/Picker.stories.d.ts.map +1 -0
- package/dist/types/src/components/Picker/context.d.ts +29 -0
- package/dist/types/src/components/Picker/context.d.ts.map +1 -0
- package/dist/types/src/components/Picker/index.d.ts +3 -0
- package/dist/types/src/components/Picker/index.d.ts.map +1 -0
- package/dist/types/src/components/RowList/RowList.d.ts +61 -0
- package/dist/types/src/components/RowList/RowList.d.ts.map +1 -0
- package/dist/types/src/components/RowList/RowList.stories.d.ts +35 -0
- package/dist/types/src/components/RowList/RowList.stories.d.ts.map +1 -0
- package/dist/types/src/components/RowList/index.d.ts +3 -0
- package/dist/types/src/components/RowList/index.d.ts.map +1 -0
- package/dist/types/src/components/Tree/Tree.d.ts +10 -6
- package/dist/types/src/components/Tree/Tree.d.ts.map +1 -1
- package/dist/types/src/components/Tree/Tree.stories.d.ts +9 -28
- package/dist/types/src/components/Tree/Tree.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tree/TreeContext.d.ts +24 -10
- package/dist/types/src/components/Tree/TreeContext.d.ts.map +1 -1
- package/dist/types/src/components/Tree/TreeItem.d.ts +25 -4
- package/dist/types/src/components/Tree/TreeItem.d.ts.map +1 -1
- package/dist/types/src/components/Tree/TreeItemHeading.d.ts +4 -3
- package/dist/types/src/components/Tree/TreeItemHeading.d.ts.map +1 -1
- package/dist/types/src/components/Tree/TreeItemToggle.d.ts +3 -3
- package/dist/types/src/components/Tree/TreeItemToggle.d.ts.map +1 -1
- package/dist/types/src/components/Tree/helpers.d.ts.map +1 -1
- package/dist/types/src/components/Tree/index.d.ts +2 -0
- package/dist/types/src/components/Tree/index.d.ts.map +1 -1
- package/dist/types/src/components/Tree/testing.d.ts +3 -3
- package/dist/types/src/components/Tree/testing.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +4 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/util/path.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +34 -31
- package/src/components/Accordion/Accordion.stories.tsx +5 -8
- package/src/components/Accordion/AccordionItem.tsx +3 -4
- package/src/components/Accordion/AccordionRoot.tsx +1 -1
- package/src/components/Combobox/Combobox.stories.tsx +60 -0
- package/src/components/Combobox/Combobox.tsx +387 -0
- package/src/components/Combobox/index.ts +5 -0
- package/src/components/List/List.stories.tsx +34 -22
- package/src/components/List/List.tsx +14 -10
- package/src/components/List/ListItem.tsx +60 -40
- package/src/components/List/ListRoot.tsx +3 -3
- package/src/components/List/testing.ts +7 -7
- package/src/components/Listbox/Listbox.stories.tsx +48 -0
- package/src/components/Listbox/Listbox.tsx +201 -0
- package/src/components/Listbox/index.ts +5 -0
- package/src/components/Picker/Picker.stories.tsx +131 -0
- package/src/components/Picker/Picker.tsx +439 -0
- package/src/components/Picker/context.ts +43 -0
- package/src/components/Picker/index.ts +6 -0
- package/src/components/RowList/RowList.stories.tsx +163 -0
- package/src/components/RowList/RowList.tsx +353 -0
- package/src/components/RowList/index.ts +6 -0
- package/src/components/Tree/Tree.stories.tsx +153 -64
- package/src/components/Tree/Tree.tsx +43 -40
- package/src/components/Tree/TreeContext.tsx +21 -9
- package/src/components/Tree/TreeItem.tsx +214 -127
- package/src/components/Tree/TreeItemHeading.tsx +10 -8
- package/src/components/Tree/TreeItemToggle.tsx +29 -18
- package/src/components/Tree/index.ts +2 -0
- package/src/components/Tree/testing.ts +10 -9
- package/src/components/index.ts +4 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/Accordion/AccordionItem.tsx", "../../../src/components/Accordion/AccordionRoot.tsx", "../../../src/components/Accordion/Accordion.tsx", "../../../src/components/List/ListItem.tsx", "../../../src/components/List/ListRoot.tsx", "../../../src/components/List/List.tsx", "../../../src/components/Tree/Tree.tsx", "../../../src/components/Tree/TreeContext.tsx", "../../../src/components/Tree/TreeItem.tsx", "../../../src/components/Tree/helpers.ts", "../../../src/components/Tree/TreeItemHeading.tsx", "../../../src/components/Tree/TreeItemToggle.tsx", "../../../src/util/path.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren } from 'react';\n\nimport { Icon, type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type ListItemRecord } from '../List';\n\nimport { useAccordionContext } from './AccordionRoot';\n\nconst ACCORDION_ITEM_NAME = 'AccordionItem';\n\ntype AccordionItemContext<T extends ListItemRecord> = {\n item: T;\n};\n\n// TODO(wittjosiah): This seems to be conflicting with something in the bundle.\n// Perhaps @radix-ui/react-accordion?\nexport const [AccordionItemProvider, useDxAccordionItemContext] =\n createContext<AccordionItemContext<any>>(ACCORDION_ITEM_NAME);\n\nexport type AccordionItemProps<T extends ListItemRecord> = ThemedClassName<PropsWithChildren<{ item: T }>>;\n\nexport const AccordionItem = <T extends ListItemRecord>({ children, classNames, item }: AccordionItemProps<T>) => {\n const { getId } = useAccordionContext(ACCORDION_ITEM_NAME);\n\n return (\n <AccordionItemProvider {...{ item }}>\n <AccordionPrimitive.Item value={getId(item)} className={mx('overflow-hidden', classNames)}>\n {children}\n </AccordionPrimitive.Item>\n </AccordionItemProvider>\n );\n};\n\nexport type AccordionItemHeaderProps = ThemedClassName<AccordionPrimitive.AccordionHeaderProps>;\n\nexport const AccordionItemHeader = ({ classNames, children, ...props }: AccordionItemHeaderProps) => {\n return (\n <AccordionPrimitive.Header {...props} className={mx(classNames)}>\n <AccordionPrimitive.Trigger className='group flex items-center p-2 dx-focus-ring-inset is-full text-start'>\n {children}\n <Icon\n icon='ph--caret-right--regular'\n size={4}\n classNames='transition-transform duration-200 group-data-[state=open]:rotate-90'\n />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n};\n\nexport type AccordionItemBodyProps = ThemedClassName<PropsWithChildren>;\n\nexport const AccordionItemBody = ({ children, classNames }: AccordionItemBodyProps) => {\n return (\n <AccordionPrimitive.Content className='overflow-hidden data-[state=closed]:animate-slideUp data-[state=open]:animate-slideDown'>\n <div role='none' className={mx('p-2', classNames)}>\n {children}\n </div>\n </AccordionPrimitive.Content>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type ReactNode } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type ListItemRecord } from '../List';\n\ntype AccordionContext<T extends ListItemRecord> = {\n getId: (item: T) => string;\n};\n\nconst ACCORDION_NAME = 'Accordion';\n\nexport const [AccordionProvider, useAccordionContext] = createContext<AccordionContext<any>>(ACCORDION_NAME);\n\nexport type AccordionRendererProps<T extends ListItemRecord> = {\n items: T[];\n};\n\nconst defaultGetId = <T extends ListItemRecord>(item: T) => (item as any)?.id;\n\nexport type AccordionRootProps<T extends ListItemRecord> = ThemedClassName<\n {\n children?: (props: AccordionRendererProps<T>) => ReactNode;\n items?: T[];\n } & Partial<Pick<AccordionContext<T>, 'getId'>>\n>;\n\nexport const AccordionRoot = <T extends ListItemRecord>({\n classNames,\n items,\n getId = defaultGetId,\n children,\n value,\n defaultValue,\n onValueChange,\n}: AccordionRootProps<T> &\n Pick<AccordionPrimitive.AccordionMultipleProps, 'value' | 'defaultValue' | 'onValueChange'>) => {\n return (\n <AccordionProvider {...{ getId }}>\n <AccordionPrimitive.Root\n type='multiple'\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n className={mx(classNames)}\n >\n {children?.({ items: items ?? [] })}\n </AccordionPrimitive.Root>\n </AccordionProvider>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { AccordionItem, AccordionItemBody, AccordionItemHeader } from './AccordionItem';\nimport { AccordionRoot } from './AccordionRoot';\n\n// TODO(burdon): Next iteration should be based on Radix UI Accordion:\n// https://www.radix-ui.com/primitives/docs/components/accordion\n// TODO(burdon): Support key navigation.\n\nexport const Accordion = {\n Root: AccordionRoot,\n Item: AccordionItem,\n ItemHeader: AccordionItemHeader,\n ItemBody: AccordionItemBody,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { draggable, dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { setCustomNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/element/set-custom-native-drag-preview';\nimport {\n type Edge,\n attachClosestEdge,\n extractClosestEdge,\n} from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';\nimport { createContext } from '@radix-ui/react-context';\nimport React, {\n type ComponentProps,\n type HTMLAttributes,\n type MutableRefObject,\n type PropsWithChildren,\n type ReactNode,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { invariant } from '@dxos/invariant';\nimport {\n IconButton,\n type IconButtonProps,\n ListItem as NaturalListItem,\n type ThemedClassName,\n useTranslation,\n} from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { useListContext } from './ListRoot';\n\nexport type ListItemRecord = any;\n\nexport type ItemDragState =\n | {\n type: 'idle';\n }\n | {\n type: 'preview';\n container: HTMLElement;\n }\n | {\n type: 'is-dragging';\n }\n | {\n type: 'is-dragging-over';\n closestEdge: Edge | null;\n };\n\nexport const idle: ItemDragState = { type: 'idle' };\n\nconst stateStyles: { [Key in ItemDragState['type']]?: HTMLAttributes<HTMLDivElement>['className'] } = {\n 'is-dragging': 'opacity-50',\n};\n\ntype ListItemContext<T extends ListItemRecord> = {\n item: T;\n dragHandleRef: MutableRefObject<HTMLElement | null>;\n};\n\n/**\n * Default context defined for ListItemDragPreview, which is defined outside of ListItem.\n */\nconst defaultContext: ListItemContext<any> = {} as any;\n\nconst LIST_ITEM_NAME = 'ListItem';\n\nexport const [ListItemProvider, useListItemContext] = createContext<ListItemContext<any>>(\n LIST_ITEM_NAME,\n defaultContext,\n);\n\nexport type ListItemProps<T extends ListItemRecord> = ThemedClassName<\n PropsWithChildren<\n {\n item: T;\n } & HTMLAttributes<HTMLDivElement>\n >\n>;\n\n/**\n * Draggable list item.\n */\nexport const ListItem = <T extends ListItemRecord>({ children, classNames, item, ...props }: ListItemProps<T>) => {\n const { isItem, readonly, dragPreview, setState: setRootState } = useListContext(LIST_ITEM_NAME);\n const ref = useRef<HTMLDivElement | null>(null);\n const dragHandleRef = useRef<HTMLElement | null>(null);\n const [state, setState] = useState<ItemDragState>(idle);\n\n useEffect(() => {\n const element = ref.current;\n invariant(element);\n return combine(\n //\n // https://atlassian.design/components/pragmatic-drag-and-drop/core-package/adapters/element/about#draggable\n //\n draggable({\n element,\n dragHandle: dragHandleRef.current!,\n canDrag: () => !readonly,\n getInitialData: () => item as any,\n onGenerateDragPreview: dragPreview\n ? ({ nativeSetDragImage, source }) => {\n const rect = source.element.getBoundingClientRect();\n setCustomNativeDragPreview({\n nativeSetDragImage,\n getOffset: ({ container }) => {\n const { height } = container.getBoundingClientRect();\n return { x: 20, y: height / 2 };\n },\n render: ({ container }) => {\n container.style.width = rect.width + 'px';\n setState({ type: 'preview', container });\n setRootState({ type: 'preview', container, item });\n return () => {}; // TODO(burdon): Cleanup.\n },\n });\n }\n : undefined,\n onDragStart: () => {\n setState({ type: 'is-dragging' });\n setRootState({ type: 'is-dragging', item });\n },\n onDrop: () => {\n setState(idle);\n setRootState(idle);\n },\n }),\n\n //\n // https://atlassian.design/components/pragmatic-drag-and-drop/core-package/adapters/element/about#drop-target-for-elements\n //\n dropTargetForElements({\n element,\n canDrop: ({ source }) => {\n return (source.element !== element && isItem?.(source.data)) ?? false;\n },\n getData: ({ input }) => {\n return attachClosestEdge(item as any, { element, input, allowedEdges: ['top', 'bottom'] });\n },\n getIsSticky: () => true,\n onDragEnter: ({ self }) => {\n const closestEdge = extractClosestEdge(self.data);\n setState({ type: 'is-dragging-over', closestEdge });\n },\n onDragLeave: () => {\n setState(idle);\n },\n onDrag: ({ self }) => {\n const closestEdge = extractClosestEdge(self.data);\n setState((current) => {\n if (current.type === 'is-dragging-over' && current.closestEdge === closestEdge) {\n return current;\n }\n return { type: 'is-dragging-over', closestEdge };\n });\n },\n onDrop: () => {\n setState(idle);\n },\n }),\n );\n }, [item]);\n\n return (\n <ListItemProvider item={item} dragHandleRef={dragHandleRef}>\n <div ref={ref} role='listitem' className={mx('flex relative', classNames, stateStyles[state.type])} {...props}>\n {children}\n {state.type === 'is-dragging-over' && state.closestEdge && (\n <NaturalListItem.DropIndicator edge={state.closestEdge} />\n )}\n </div>\n </ListItemProvider>\n );\n};\n\n//\n// List item components\n//\n\nexport const ListItemDeleteButton = ({\n autoHide = true,\n classNames,\n disabled,\n icon = 'ph--x--regular',\n label,\n ...props\n}: Partial<Pick<IconButtonProps, 'icon'>> &\n Omit<IconButtonProps, 'icon' | 'label'> & { autoHide?: boolean; label?: string }) => {\n const { state } = useListContext('DELETE_BUTTON');\n const isDisabled = state.type !== 'idle' || disabled;\n const { t } = useTranslation('os');\n return (\n <IconButton\n iconOnly\n variant='ghost'\n {...props}\n icon={icon}\n disabled={isDisabled}\n label={label ?? t('delete label')}\n classNames={[classNames, autoHide && disabled && 'hidden']}\n />\n );\n};\n\nexport const ListItemButton = ({\n autoHide = true,\n iconOnly = true,\n variant = 'ghost',\n classNames,\n disabled,\n ...props\n}: IconButtonProps & { autoHide?: boolean }) => {\n const { state } = useListContext('ITEM_BUTTON');\n const isDisabled = state.type !== 'idle' || disabled;\n return (\n <IconButton\n {...props}\n disabled={isDisabled}\n iconOnly={iconOnly}\n variant={variant}\n classNames={[classNames, autoHide && disabled && 'hidden']}\n />\n );\n};\n\nexport const ListItemDragHandle = ({ disabled }: Pick<IconButtonProps, 'disabled'>) => {\n const { dragHandleRef } = useListItemContext('DRAG_HANDLE');\n const { t } = useTranslation('os');\n return (\n <IconButton\n iconOnly\n variant='ghost'\n label={t('drag handle label')}\n ref={dragHandleRef as any}\n icon='ph--dots-six-vertical--regular'\n disabled={disabled}\n />\n );\n};\n\nexport const ListItemDragPreview = <T extends ListItemRecord>({\n children,\n}: {\n children: ({ item }: { item: T }) => ReactNode;\n}) => {\n const { state } = useListContext('DRAG_PREVIEW');\n return state?.type === 'preview' ? createPortal(children({ item: state.item }), state.container) : null;\n};\n\nexport const ListItemWrapper = ({ classNames, children }: ThemedClassName<PropsWithChildren>) => (\n <div className={mx('flex is-full gap-2', classNames)}>{children}</div>\n);\n\nexport const ListItemTitle = ({\n classNames,\n children,\n ...props\n}: ThemedClassName<PropsWithChildren<ComponentProps<'div'>>>) => (\n <div className={mx('flex grow items-center truncate', classNames)} {...props}>\n {children}\n </div>\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { extractClosestEdge } from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';\nimport { getReorderDestinationIndex } from '@atlaskit/pragmatic-drag-and-drop-hitbox/util/get-reorder-destination-index';\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type ReactNode, useCallback, useEffect, useState } from 'react';\n\nimport { type ItemDragState, type ListItemRecord, idle } from './ListItem';\n\ntype ListContext<T extends ListItemRecord> = {\n // TODO(burdon): Rename drag state.\n state: ItemDragState & { item?: T };\n setState: (state: ItemDragState & { item?: T }) => void;\n readonly?: boolean;\n dragPreview?: boolean;\n isItem?: (item: any) => boolean;\n getId?: (item: T) => string; // TODO(burdon): Require if T doesn't conform to type.\n};\n\nconst LIST_NAME = 'List';\n\nexport const [ListProvider, useListContext] = createContext<ListContext<any>>(LIST_NAME);\n\nexport type ListRendererProps<T extends ListItemRecord> = {\n state: ListContext<T>['state'];\n items: T[];\n};\n\nconst defaultGetId = <T extends ListItemRecord>(item: T) => (item as any)?.id;\n\nexport type ListRootProps<T extends ListItemRecord> = {\n children?: (props: ListRendererProps<T>) => ReactNode;\n items?: T[];\n onMove?: (fromIndex: number, toIndex: number) => void;\n} & Pick<ListContext<T>, 'isItem' | 'getId' | 'readonly' | 'dragPreview'>;\n\nexport const ListRoot = <T extends ListItemRecord>({\n children,\n items,\n isItem,\n getId = defaultGetId,\n onMove,\n ...props\n}: ListRootProps<T>) => {\n const isEqual = useCallback(\n (a: T, b: T) => {\n const idA = getId?.(a);\n const idB = getId?.(b);\n\n if (idA !== undefined && idB !== undefined) {\n return idA === idB;\n } else {\n // Fallback for primitive values or when getId fails.\n // NOTE(ZaymonFC): After drag and drop, pragmatic internally serializes drop targets which breaks reference equality.\n // You must provide an `getId` function that returns a stable identifier for your items.\n return a === b;\n }\n },\n [getId],\n );\n\n const [state, setState] = useState<ListContext<T>['state']>(idle);\n useEffect(() => {\n if (!items) {\n return;\n }\n\n return monitorForElements({\n canMonitor: ({ source }) => isItem?.(source.data) ?? false,\n onDrop: ({ location, source }) => {\n const target = location.current.dropTargets[0];\n if (!target) {\n return;\n }\n\n const sourceData = source.data;\n const targetData = target.data;\n if (!isItem?.(sourceData) || !isItem?.(targetData)) {\n return;\n }\n\n const sourceIdx = items.findIndex((item) => isEqual(item, sourceData as T));\n const targetIdx = items.findIndex((item) => isEqual(item, targetData as T));\n if (targetIdx < 0 || sourceIdx < 0) {\n return;\n }\n const closestEdgeOfTarget = extractClosestEdge(targetData);\n const destinationIndex = getReorderDestinationIndex({\n closestEdgeOfTarget,\n startIndex: sourceIdx,\n indexOfTarget: targetIdx,\n axis: 'vertical',\n });\n\n onMove?.(sourceIdx, destinationIndex);\n },\n });\n }, [items, isEqual, onMove]);\n\n return (\n <ListProvider {...{ state, setState, isItem, ...props }}>{children?.({ state, items: items ?? [] })}</ListProvider>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n ListItem,\n ListItemButton,\n ListItemDeleteButton,\n ListItemDragHandle,\n ListItemDragPreview,\n type ListItemProps,\n type ListItemRecord,\n ListItemTitle,\n ListItemWrapper,\n} from './ListItem';\nimport { ListRoot, type ListRootProps } from './ListRoot';\n\n// TODO(burdon): Multi-select model.\n// TODO(burdon): Key nav.\n// TODO(burdon): Animation.\n// TODO(burdon): Constrain axis.\n// TODO(burdon): Tree view.\n// TODO(burdon): Fix autoscroll while dragging.\n\n/**\n * Draggable list.\n * Ref: https://github.com/atlassian/pragmatic-drag-and-drop\n * Ref: https://github.com/alexreardon/pdnd-react-tailwind/blob/main/src/task.tsx\n */\nexport const List = {\n Root: ListRoot,\n Item: ListItem,\n ItemDragPreview: ListItemDragPreview,\n ItemWrapper: ListItemWrapper,\n ItemDragHandle: ListItemDragHandle,\n ItemDeleteButton: ListItemDeleteButton,\n ItemButton: ListItemButton,\n ItemTitle: ListItemTitle,\n};\n\ntype ListItem = ListItemRecord;\n\nexport type { ListRootProps, ListItemProps, ListItem, ListItemRecord };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type HasId } from '@dxos/echo-schema';\nimport { Treegrid, type TreegridRootProps } from '@dxos/react-ui';\n\nimport { type TreeContextType, TreeProvider } from './TreeContext';\nimport { TreeItem, type TreeItemProps } from './TreeItem';\n\nexport type TreeProps<T extends HasId = any, O = any> = {\n root?: T;\n path?: string[];\n id: string;\n} & TreeContextType<T, O> &\n Partial<Pick<TreegridRootProps, 'gridTemplateColumns' | 'classNames'>> &\n Pick<TreeItemProps<T>, 'draggable' | 'renderColumns' | 'canDrop' | 'onOpenChange' | 'onSelect' | 'levelOffset'>;\n\nexport const Tree = <T extends HasId = any, O = any>({\n root,\n path,\n id,\n useItems,\n getProps,\n isOpen,\n isCurrent,\n draggable = false,\n gridTemplateColumns = '[tree-row-start] 1fr min-content [tree-row-end]',\n classNames,\n levelOffset,\n renderColumns,\n canDrop,\n onOpenChange,\n onSelect,\n}: TreeProps<T, O>) => {\n const context = useMemo(\n () => ({\n useItems,\n getProps,\n isOpen,\n isCurrent,\n }),\n [useItems, getProps, isOpen, isCurrent],\n );\n const items = useItems(root);\n const treePath = useMemo(() => (path ? [...path, id] : [id]), [id, path]);\n\n return (\n <Treegrid.Root gridTemplateColumns={gridTemplateColumns} classNames={classNames}>\n <TreeProvider value={context}>\n {items.map((item, index) => (\n <TreeItem\n key={item.id}\n item={item}\n last={index === items.length - 1}\n path={treePath}\n levelOffset={levelOffset}\n draggable={draggable}\n renderColumns={renderColumns}\n canDrop={canDrop}\n onOpenChange={onOpenChange}\n onSelect={onSelect}\n />\n ))}\n </TreeProvider>\n </Treegrid.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { createContext, useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\nimport { type Label } from '@dxos/react-ui';\n\nexport type TreeItemDataProps = {\n id: string;\n label: Label;\n parentOf?: string[];\n icon?: string;\n disabled?: boolean;\n className?: string;\n headingClassName?: string;\n testId?: string;\n};\n\nexport type TreeContextType<T = any, O = any> = {\n useItems: (parent?: T, options?: O) => T[];\n getProps: (item: T, parent: string[]) => TreeItemDataProps;\n isOpen: (path: string[], item: T) => boolean;\n isCurrent: (path: string[], item: T) => boolean;\n};\n\nconst TreeContext = createContext<null | TreeContextType>(null);\n\nexport const TreeProvider = TreeContext.Provider;\n\nexport const useTree = () => useContext(TreeContext) ?? raise(new Error('TreeContext not found'));\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { draggable, dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport {\n type Instruction,\n type ItemMode,\n attachInstruction,\n extractInstruction,\n} from '@atlaskit/pragmatic-drag-and-drop-hitbox/tree-item';\nimport { Schema } from 'effect';\nimport React, { type FC, type KeyboardEvent, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { type HasId } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { TreeItem as NaturalTreeItem, Treegrid } from '@dxos/react-ui';\nimport {\n ghostHover,\n hoverableControls,\n hoverableFocusedKeyboardControls,\n hoverableFocusedWithinControls,\n} from '@dxos/react-ui-theme';\n\nimport { DEFAULT_INDENTATION, paddingIndentation } from './helpers';\nimport { useTree } from './TreeContext';\nimport { TreeItemHeading } from './TreeItemHeading';\nimport { TreeItemToggle } from './TreeItemToggle';\n\ntype TreeItemState = 'idle' | 'dragging' | 'preview' | 'parent-of-instruction';\n\nconst hoverableDescriptionIcons =\n '[--icons-color:inherit] hover-hover:[--icons-color:var(--description-text)] hover-hover:hover:[--icons-color:inherit] focus-within:[--icons-color:inherit]';\n\nexport const TreeDataSchema = Schema.Struct({\n id: Schema.String,\n path: Schema.Array(Schema.String),\n item: Schema.Any,\n});\n\nexport type TreeData = Schema.Schema.Type<typeof TreeDataSchema>;\nexport const isTreeData = (data: unknown): data is TreeData => Schema.is(TreeDataSchema)(data);\n\nexport type ColumnRenderer<T extends HasId = any> = FC<{\n item: T;\n path: string[];\n open: boolean;\n menuOpen: boolean;\n setMenuOpen: (open: boolean) => void;\n}>;\n\nexport type TreeItemProps<T extends HasId = any> = {\n item: T;\n path: string[];\n levelOffset?: number;\n last: boolean;\n draggable?: boolean;\n renderColumns?: ColumnRenderer<T>;\n canDrop?: (params: { source: TreeData; target: TreeData }) => boolean;\n onOpenChange?: (params: { item: T; path: string[]; open: boolean }) => void;\n onSelect?: (params: { item: T; path: string[]; current: boolean; option: boolean }) => void;\n};\n\nconst RawTreeItem = <T extends HasId = any>({\n item,\n path: _path,\n last,\n draggable: _draggable,\n renderColumns: Columns,\n canDrop,\n onOpenChange,\n onSelect,\n levelOffset = 2,\n}: TreeItemProps<T>) => {\n const rowRef = useRef<HTMLDivElement | null>(null);\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n const openRef = useRef(false);\n const cancelExpandRef = useRef<NodeJS.Timeout | null>(null);\n const [_state, setState] = useState<TreeItemState>('idle');\n const [instruction, setInstruction] = useState<Instruction | null>(null);\n const [menuOpen, setMenuOpen] = useState(false);\n\n const { useItems, getProps, isOpen, isCurrent } = useTree();\n const items = useItems(item);\n const { id, label, parentOf, icon, disabled, className, headingClassName, testId } = getProps(item, _path);\n const path = useMemo(() => [..._path, id], [_path, id]);\n const open = isOpen(path, item);\n const current = isCurrent(path, item);\n const level = path.length - levelOffset;\n const isBranch = !!parentOf;\n const mode: ItemMode = last ? 'last-in-group' : open ? 'expanded' : 'standard';\n\n const cancelExpand = useCallback(() => {\n if (cancelExpandRef.current) {\n clearTimeout(cancelExpandRef.current);\n cancelExpandRef.current = null;\n }\n }, []);\n\n useEffect(() => {\n if (!_draggable) {\n return;\n }\n\n invariant(buttonRef.current);\n\n const data = { id, path, item } satisfies TreeData;\n\n // https://atlassian.design/components/pragmatic-drag-and-drop/core-package/adapters/element/about\n return combine(\n draggable({\n element: buttonRef.current,\n getInitialData: () => data,\n onDragStart: () => {\n setState('dragging');\n if (open) {\n openRef.current = true;\n onOpenChange?.({ item, path, open: false });\n }\n },\n onDrop: () => {\n setState('idle');\n if (openRef.current) {\n onOpenChange?.({ item, path, open: true });\n }\n },\n }),\n // https://github.com/atlassian/pragmatic-drag-and-drop/blob/main/packages/hitbox/constellation/index/about.mdx\n dropTargetForElements({\n element: buttonRef.current,\n getData: ({ input, element }) => {\n return attachInstruction(data, {\n input,\n element,\n indentPerLevel: DEFAULT_INDENTATION,\n currentLevel: level,\n mode,\n block: isBranch ? [] : ['make-child'],\n });\n },\n canDrop: ({ source }) => {\n const _canDrop = canDrop ?? (() => true);\n return source.element !== buttonRef.current && _canDrop({ source: source.data as TreeData, target: data });\n },\n getIsSticky: () => true,\n onDrag: ({ self, source }) => {\n const instruction = extractInstruction(self.data);\n\n if (source.data.id !== id) {\n if (instruction?.type === 'make-child' && isBranch && !open && !cancelExpandRef.current) {\n cancelExpandRef.current = setTimeout(() => {\n onOpenChange?.({ item, path, open: true });\n }, 500);\n }\n\n if (instruction?.type !== 'make-child') {\n cancelExpand();\n }\n\n setInstruction(instruction);\n } else if (instruction?.type === 'reparent') {\n // TODO(wittjosiah): This is not occurring in the current implementation.\n setInstruction(instruction);\n } else {\n setInstruction(null);\n }\n },\n onDragLeave: () => {\n cancelExpand();\n setInstruction(null);\n },\n onDrop: () => {\n cancelExpand();\n setInstruction(null);\n },\n }),\n );\n }, [_draggable, item, id, mode, path, open, canDrop]);\n\n // Cancel expand on unmount.\n useEffect(() => () => cancelExpand(), [cancelExpand]);\n\n const handleOpenChange = useCallback(\n () => onOpenChange?.({ item, path, open: !open }),\n [onOpenChange, item, path, open],\n );\n\n const handleSelect = useCallback(\n (option = false) => {\n if (isBranch) {\n handleOpenChange();\n } else {\n rowRef.current?.focus();\n onSelect?.({ item, path, current: !current, option });\n }\n },\n [item, path, current, isBranch, handleOpenChange, onSelect],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowRight':\n isBranch && !open && handleOpenChange();\n break;\n case 'ArrowLeft':\n isBranch && open && handleOpenChange();\n break;\n case ' ':\n handleSelect(event.altKey);\n break;\n }\n },\n [isBranch, open, handleOpenChange, handleSelect],\n );\n\n return (\n <>\n <Treegrid.Row\n ref={rowRef}\n key={id}\n id={id}\n aria-labelledby={`${id}__label`}\n parentOf={parentOf?.join(Treegrid.PARENT_OF_SEPARATOR)}\n classNames={[\n 'grid grid-cols-subgrid col-[tree-row] mbs-0.5 aria-[current]:bg-activeSurface',\n hoverableControls,\n hoverableFocusedKeyboardControls,\n hoverableFocusedWithinControls,\n hoverableDescriptionIcons,\n ghostHover,\n className,\n ]}\n data-itemid={id}\n data-testid={testId}\n // NOTE(thure): This is intentionally an empty string to for descendents to select by in the CSS\n // without alerting the user (except for in the correct link element). See also:\n // https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current#description\n aria-current={current ? ('' as 'page') : undefined}\n onKeyDown={handleKeyDown}\n onContextMenu={(event) => {\n event.preventDefault();\n setMenuOpen(true);\n }}\n >\n <Treegrid.Cell\n indent\n classNames='relative grid grid-cols-subgrid col-[tree-row]'\n style={paddingIndentation(level)}\n >\n <div role='none' className='flex items-center'>\n <TreeItemToggle isBranch={isBranch} open={open} onToggle={handleOpenChange} />\n <TreeItemHeading\n ref={buttonRef}\n label={label}\n icon={icon}\n className={headingClassName}\n disabled={disabled}\n current={current}\n onSelect={handleSelect}\n />\n </div>\n {Columns && <Columns item={item} path={path} open={open} menuOpen={menuOpen} setMenuOpen={setMenuOpen} />}\n {instruction && <NaturalTreeItem.DropIndicator instruction={instruction} gap={2} />}\n </Treegrid.Cell>\n </Treegrid.Row>\n {open &&\n items.map((item, index) => (\n <TreeItem\n key={item.id}\n item={item}\n path={path}\n last={index === items.length - 1}\n draggable={_draggable}\n renderColumns={Columns}\n canDrop={canDrop}\n onOpenChange={onOpenChange}\n onSelect={onSelect}\n />\n ))}\n </>\n );\n};\n\nexport const TreeItem = memo(RawTreeItem) as FC<TreeItemProps>;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const DEFAULT_INDENTATION = 8;\n\nexport const paddingIndentation = (level: number, indentation = DEFAULT_INDENTATION) => ({\n paddingInlineStart: `${(level - 1) * indentation}px`,\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type KeyboardEvent, type MouseEvent, forwardRef, memo, useCallback } from 'react';\n\nimport { Button, Icon, type Label, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { TextTooltip } from '@dxos/react-ui-text-tooltip';\n\n// TODO(wittjosiah): Consider whether there should be a separate disabled prop which was visually distinct\n// rather than just making the item unselectable.\nexport type NavTreeItemHeadingProps = {\n label: Label;\n icon?: string;\n className?: string;\n disabled?: boolean;\n current?: boolean;\n onSelect?: (option: boolean) => void;\n};\n\nexport const TreeItemHeading = memo(\n forwardRef<HTMLButtonElement, NavTreeItemHeadingProps>(\n ({ label, icon, className, disabled, current, onSelect }, forwardedRef) => {\n const { t } = useTranslation();\n\n const handleSelect = useCallback(\n (event: MouseEvent) => {\n onSelect?.(event.altKey);\n },\n [onSelect],\n );\n\n const handleButtonKeydown = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n onSelect?.(event.altKey);\n }\n },\n [onSelect],\n );\n\n return (\n <TextTooltip\n text={toLocalizedString(label, t)}\n side='bottom'\n truncateQuery='span[data-tooltip]'\n onlyWhenTruncating\n asChild\n ref={forwardedRef}\n >\n <Button\n data-testid='treeItem.heading'\n variant='ghost'\n density='fine'\n classNames={[\n 'grow gap-2 pis-0.5 hover:bg-transparent dark:hover:bg-transparent',\n 'disabled:cursor-default disabled:opacity-100',\n className,\n ]}\n disabled={disabled}\n onClick={handleSelect}\n onKeyDown={handleButtonKeydown}\n {...(current && { 'aria-current': 'location' })}\n >\n {icon && <Icon icon={icon ?? 'ph--placeholder--regular'} size={5} classNames='mlb-1' />}\n <span className='flex-1 is-0 truncate text-start text-sm font-normal' data-tooltip>\n {toLocalizedString(label, t)}\n </span>\n </Button>\n </TextTooltip>\n );\n },\n ),\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { forwardRef, memo } from 'react';\n\nimport { Button, Icon } from '@dxos/react-ui';\n\nexport type TreeItemToggleProps = {\n open?: boolean;\n isBranch?: boolean;\n onToggle?: () => void;\n hidden?: boolean;\n};\n\nexport const TreeItemToggle = memo(\n forwardRef<HTMLButtonElement, TreeItemToggleProps>(({ open, isBranch, hidden, onToggle }, forwardedRef) => {\n return (\n <Button\n ref={forwardedRef}\n data-testid='treeItem.toggle'\n aria-expanded={open}\n variant='ghost'\n density='fine'\n classNames={['is-6 pli-0 dx-focus-ring-inset', hidden ? 'hidden' : !isBranch && 'invisible']}\n onClick={onToggle}\n >\n <Icon icon='ph--caret-right--bold' size={3} classNames={['transition duration-200', open && 'rotate-90']} />\n </Button>\n );\n }),\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nconst SEPARATOR = '+';\n\nexport const Path = {\n create: (...args: string[]) => args.join(SEPARATOR),\n\n parts: (path: string) => path.split(SEPARATOR),\n length: (path: string) => path.split(SEPARATOR).length,\n first: (path: string) => path.split(SEPARATOR)[0] ?? path,\n last: (path: string) => path.split(SEPARATOR).at(-1) ?? path,\n parent: (path: string) => path.split(SEPARATOR).slice(0, -1).join(SEPARATOR),\n\n hasRoot: (path: string, id: string) => Path.first(path) === id,\n hasChild: (path: string, compare: string) => Path.parent(compare) === path,\n hasDescendent: (path: string, compare: string) => compare !== path && compare.startsWith(path),\n siblings: (path: string, compare: string) => Path.parent(path) === Path.parent(compare),\n onPath: (path: string, id: string) => Path.parts(path).includes(id),\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["AccordionPrimitive", "createContext", "React", "Icon", "mx", "AccordionPrimitive", "createContext", "React", "mx", "ACCORDION_NAME", "AccordionProvider", "useAccordionContext", "createContext", "defaultGetId", "item", "id", "AccordionRoot", "classNames", "items", "getId", "children", "value", "defaultValue", "onValueChange", "Root", "type", "className", "mx", "ACCORDION_ITEM_NAME", "AccordionItemProvider", "useDxAccordionItemContext", "createContext", "AccordionItem", "children", "classNames", "item", "getId", "useAccordionContext", "React", "Item", "value", "className", "mx", "AccordionItemHeader", "props", "Header", "Trigger", "Icon", "icon", "size", "AccordionItemBody", "Content", "div", "role", "Accordion", "Root", "AccordionRoot", "Item", "AccordionItem", "ItemHeader", "AccordionItemHeader", "ItemBody", "AccordionItemBody", "combine", "draggable", "dropTargetForElements", "setCustomNativeDragPreview", "attachClosestEdge", "extractClosestEdge", "createContext", "React", "useEffect", "useRef", "useState", "createPortal", "invariant", "IconButton", "ListItem", "NaturalListItem", "useTranslation", "mx", "monitorForElements", "extractClosestEdge", "getReorderDestinationIndex", "createContext", "React", "useCallback", "useEffect", "useState", "LIST_NAME", "ListProvider", "useListContext", "createContext", "defaultGetId", "item", "id", "ListRoot", "children", "items", "isItem", "getId", "onMove", "props", "isEqual", "useCallback", "a", "b", "idA", "idB", "undefined", "state", "setState", "useState", "idle", "useEffect", "monitorForElements", "canMonitor", "source", "data", "onDrop", "location", "target", "current", "dropTargets", "sourceData", "targetData", "sourceIdx", "findIndex", "targetIdx", "closestEdgeOfTarget", "extractClosestEdge", "destinationIndex", "getReorderDestinationIndex", "startIndex", "indexOfTarget", "axis", "React", "idle", "type", "stateStyles", "defaultContext", "LIST_ITEM_NAME", "ListItemProvider", "useListItemContext", "createContext", "ListItem", "children", "classNames", "item", "props", "isItem", "readonly", "dragPreview", "setState", "setRootState", "useListContext", "ref", "useRef", "dragHandleRef", "state", "useState", "useEffect", "element", "current", "invariant", "combine", "draggable", "dragHandle", "canDrag", "getInitialData", "onGenerateDragPreview", "nativeSetDragImage", "source", "rect", "getBoundingClientRect", "setCustomNativeDragPreview", "getOffset", "container", "height", "x", "y", "render", "style", "width", "undefined", "onDragStart", "onDrop", "dropTargetForElements", "canDrop", "data", "getData", "input", "attachClosestEdge", "allowedEdges", "getIsSticky", "onDragEnter", "self", "closestEdge", "extractClosestEdge", "onDragLeave", "onDrag", "React", "div", "role", "className", "mx", "NaturalListItem", "DropIndicator", "edge", "ListItemDeleteButton", "autoHide", "disabled", "icon", "label", "isDisabled", "t", "useTranslation", "IconButton", "iconOnly", "variant", "ListItemButton", "ListItemDragHandle", "ListItemDragPreview", "createPortal", "ListItemWrapper", "ListItemTitle", "List", "Root", "ListRoot", "Item", "ListItem", "ItemDragPreview", "ListItemDragPreview", "ItemWrapper", "ListItemWrapper", "ItemDragHandle", "ListItemDragHandle", "ItemDeleteButton", "ListItemDeleteButton", "ItemButton", "ListItemButton", "ItemTitle", "ListItemTitle", "React", "useMemo", "Treegrid", "createContext", "useContext", "raise", "TreeContext", "createContext", "TreeProvider", "Provider", "useTree", "useContext", "raise", "Error", "combine", "draggable", "dropTargetForElements", "attachInstruction", "extractInstruction", "Schema", "React", "memo", "useCallback", "useEffect", "useMemo", "useRef", "useState", "invariant", "TreeItem", "NaturalTreeItem", "Treegrid", "ghostHover", "hoverableControls", "hoverableFocusedKeyboardControls", "hoverableFocusedWithinControls", "DEFAULT_INDENTATION", "paddingIndentation", "level", "indentation", "paddingInlineStart", "React", "forwardRef", "memo", "useCallback", "Button", "Icon", "toLocalizedString", "useTranslation", "TextTooltip", "TreeItemHeading", "memo", "forwardRef", "label", "icon", "className", "disabled", "current", "onSelect", "forwardedRef", "t", "useTranslation", "handleSelect", "useCallback", "event", "altKey", "handleButtonKeydown", "key", "preventDefault", "stopPropagation", "React", "TextTooltip", "text", "toLocalizedString", "side", "truncateQuery", "onlyWhenTruncating", "asChild", "ref", "Button", "data-testid", "variant", "density", "classNames", "onClick", "onKeyDown", "Icon", "size", "span", "data-tooltip", "React", "forwardRef", "memo", "Button", "Icon", "TreeItemToggle", "memo", "forwardRef", "open", "isBranch", "hidden", "onToggle", "forwardedRef", "React", "Button", "ref", "data-testid", "aria-expanded", "variant", "density", "classNames", "onClick", "Icon", "icon", "size", "hoverableDescriptionIcons", "TreeDataSchema", "Schema", "Struct", "id", "String", "path", "Array", "item", "Any", "isTreeData", "data", "is", "RawTreeItem", "_path", "last", "draggable", "_draggable", "renderColumns", "Columns", "canDrop", "onOpenChange", "onSelect", "levelOffset", "rowRef", "useRef", "buttonRef", "openRef", "cancelExpandRef", "_state", "setState", "useState", "instruction", "setInstruction", "menuOpen", "setMenuOpen", "useItems", "getProps", "isOpen", "isCurrent", "useTree", "items", "label", "parentOf", "icon", "disabled", "className", "headingClassName", "testId", "useMemo", "open", "current", "level", "length", "isBranch", "mode", "cancelExpand", "useCallback", "clearTimeout", "useEffect", "invariant", "combine", "element", "getInitialData", "onDragStart", "onDrop", "dropTargetForElements", "getData", "input", "attachInstruction", "indentPerLevel", "DEFAULT_INDENTATION", "currentLevel", "block", "source", "_canDrop", "target", "getIsSticky", "onDrag", "self", "extractInstruction", "type", "setTimeout", "onDragLeave", "handleOpenChange", "handleSelect", "option", "focus", "handleKeyDown", "event", "key", "altKey", "React", "Treegrid", "Row", "ref", "aria-labelledby", "join", "PARENT_OF_SEPARATOR", "classNames", "hoverableControls", "hoverableFocusedKeyboardControls", "hoverableFocusedWithinControls", "ghostHover", "data-itemid", "data-testid", "aria-current", "undefined", "onKeyDown", "onContextMenu", "preventDefault", "Cell", "indent", "style", "paddingIndentation", "div", "role", "TreeItemToggle", "onToggle", "TreeItemHeading", "NaturalTreeItem", "DropIndicator", "gap", "map", "index", "TreeItem", "memo", "Tree", "root", "path", "id", "useItems", "getProps", "isOpen", "isCurrent", "draggable", "gridTemplateColumns", "classNames", "levelOffset", "renderColumns", "canDrop", "onOpenChange", "onSelect", "context", "useMemo", "items", "treePath", "React", "Treegrid", "Root", "TreeProvider", "value", "map", "item", "index", "TreeItem", "key", "last", "length", "SEPARATOR", "Path", "create", "args", "join", "parts", "path", "split", "length", "first", "last", "at", "parent", "slice", "hasRoot", "id", "hasChild", "compare", "hasDescendent", "startsWith", "siblings", "onPath", "includes"]
|
|
3
|
+
"sources": ["../../../src/components/Accordion/AccordionItem.tsx", "../../../src/components/Accordion/AccordionRoot.tsx", "../../../src/components/Accordion/Accordion.tsx", "../../../src/components/Combobox/Combobox.tsx", "../../../src/components/Picker/Picker.tsx", "../../../src/components/Picker/context.ts", "../../../src/components/List/ListItem.tsx", "../../../src/components/List/ListRoot.tsx", "../../../src/components/List/List.tsx", "../../../src/components/Listbox/Listbox.tsx", "../../../src/components/RowList/RowList.tsx", "../../../src/components/Tree/Tree.tsx", "../../../src/components/Tree/TreeContext.tsx", "../../../src/components/Tree/TreeItem.tsx", "../../../src/components/Tree/helpers.ts", "../../../src/components/Tree/TreeItemHeading.tsx", "../../../src/components/Tree/TreeItemToggle.tsx", "../../../src/util/path.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren } from 'react';\n\nimport { Icon, type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { type ListItemRecord } from '../List';\nimport { useAccordionContext } from './AccordionRoot';\n\nconst ACCORDION_ITEM_NAME = 'AccordionItem';\n\ntype AccordionItemContext<T extends ListItemRecord> = {\n item: T;\n};\n\n// TODO(wittjosiah): This seems to be conflicting with something in the bundle.\n// Perhaps @radix-ui/react-accordion?\nexport const [AccordionItemProvider, useDxAccordionItemContext] =\n createContext<AccordionItemContext<any>>(ACCORDION_ITEM_NAME);\n\nexport type AccordionItemProps<T extends ListItemRecord> = ThemedClassName<PropsWithChildren<{ item: T }>>;\n\nexport const AccordionItem = <T extends ListItemRecord>({ children, classNames, item }: AccordionItemProps<T>) => {\n const { getId } = useAccordionContext(ACCORDION_ITEM_NAME);\n\n return (\n <AccordionItemProvider {...{ item }}>\n <AccordionPrimitive.Item value={getId(item)} className={mx('overflow-hidden', classNames)}>\n {children}\n </AccordionPrimitive.Item>\n </AccordionItemProvider>\n );\n};\n\nexport type AccordionItemHeaderProps = ThemedClassName<AccordionPrimitive.AccordionHeaderProps>;\n\nexport const AccordionItemHeader = ({ classNames, children, ...props }: AccordionItemHeaderProps) => {\n return (\n <AccordionPrimitive.Header {...props} className={mx(classNames)}>\n <AccordionPrimitive.Trigger className='group flex items-center p-2 dx-focus-ring-inset w-full text-start'>\n {children}\n <Icon\n icon='ph--caret-right--regular'\n size={4}\n classNames='transition-transform duration-200 group-data-[state=open]:rotate-90'\n />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n};\n\nexport type AccordionItemBodyProps = ThemedClassName<PropsWithChildren>;\n\nexport const AccordionItemBody = ({ children, classNames }: AccordionItemBodyProps) => {\n return (\n <AccordionPrimitive.Content className='overflow-hidden data-[state=closed]:animate-slide-up data-[state=open]:animate-slide-down'>\n <div role='none' className={mx('p-2', classNames)}>\n {children}\n </div>\n </AccordionPrimitive.Content>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type ReactNode } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { type ListItemRecord } from '../List';\n\ntype AccordionContext<T extends ListItemRecord> = {\n getId: (item: T) => string;\n};\n\nconst ACCORDION_NAME = 'Accordion';\n\nexport const [AccordionProvider, useAccordionContext] = createContext<AccordionContext<any>>(ACCORDION_NAME);\n\nexport type AccordionRendererProps<T extends ListItemRecord> = {\n items: T[];\n};\n\nconst defaultGetId = <T extends ListItemRecord>(item: T) => (item as any)?.id;\n\nexport type AccordionRootProps<T extends ListItemRecord> = ThemedClassName<\n {\n children?: (props: AccordionRendererProps<T>) => ReactNode;\n items?: T[];\n } & Partial<Pick<AccordionContext<T>, 'getId'>>\n>;\n\nexport const AccordionRoot = <T extends ListItemRecord>({\n classNames,\n items,\n getId = defaultGetId,\n children,\n value,\n defaultValue,\n onValueChange,\n}: AccordionRootProps<T> &\n Pick<AccordionPrimitive.AccordionMultipleProps, 'value' | 'defaultValue' | 'onValueChange'>) => {\n return (\n <AccordionProvider {...{ getId }}>\n <AccordionPrimitive.Root\n type='multiple'\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n className={mx(classNames)}\n >\n {children?.({ items: items ?? [] })}\n </AccordionPrimitive.Root>\n </AccordionProvider>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { AccordionItem, AccordionItemBody, AccordionItemHeader } from './AccordionItem';\nimport { AccordionRoot } from './AccordionRoot';\n\n// TODO(burdon): Next iteration should be based on Radix UI Accordion:\n// https://www.radix-ui.com/primitives/docs/components/accordion\n// TODO(burdon): Support key navigation.\n\nexport const Accordion = {\n Root: AccordionRoot,\n Item: AccordionItem,\n ItemHeader: AccordionItemHeader,\n ItemBody: AccordionItemBody,\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// `Combobox` — popover-list with text input. Generic; no search-domain\n// dependencies. Built on `Picker` (this same package) for the\n// listbox-with-input pattern (registry, virtual highlight, keyboard\n// nav, the two performance-split contexts) and `Popover` from\n// `@dxos/react-ui` for the trigger/content/arrow.\n//\n// Filtering is the caller's responsibility — render only the matching\n// `<Combobox.Item>` children. For fuzzy / search-domain filtering,\n// pair with `useSearchListResults` from `@dxos/react-ui-search`.\n//\n// https://www.w3.org/WAI/ARIA/apg/patterns/combobox\n\nimport { createContext } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, {\n type ComponentPropsWithoutRef,\n type ComponentPropsWithRef,\n type PropsWithChildren,\n forwardRef,\n useCallback,\n} from 'react';\n\nimport {\n Button,\n type ButtonProps,\n Icon,\n type IconProps,\n Popover,\n type PopoverArrowProps,\n type PopoverContentProps,\n type PopoverVirtualTriggerProps,\n ScrollArea,\n type ThemedClassName,\n useId,\n} from '@dxos/react-ui';\nimport { composable, composableProps, mx } from '@dxos/ui-theme';\n\nimport { Picker, type PickerInputProps, type PickerItemProps } from '../Picker';\n\nconst COMBOBOX_NAME = 'Combobox';\nconst COMBOBOX_CONTENT_NAME = 'ComboboxContent';\nconst COMBOBOX_ITEM_NAME = 'ComboboxItem';\nconst COMBOBOX_TRIGGER_NAME = 'ComboboxTrigger';\n\n//\n// Context — open/value state shared with Trigger and Item.\n//\n\ntype ComboboxContextValue = {\n modalId: string;\n isCombobox: true;\n placeholder?: string;\n open: boolean;\n onOpenChange: (nextOpen: boolean) => void;\n value: string;\n onValueChange: (nextValue: string) => void;\n};\n\nconst [ComboboxProvider, useComboboxContext] = createContext<Partial<ComboboxContextValue>>(COMBOBOX_NAME, {});\n\n//\n// Root\n//\n\ntype ComboboxRootProps = PropsWithChildren<\n Partial<\n ComboboxContextValue & {\n modal: boolean;\n defaultOpen: boolean;\n defaultValue: string;\n placeholder: string;\n }\n >\n>;\n\nconst ComboboxRoot = ({\n children,\n modal,\n modalId: modalIdProp,\n open: openProp,\n defaultOpen,\n onOpenChange: propsOnOpenChange,\n value: valueProp,\n defaultValue,\n onValueChange: propsOnValueChange,\n placeholder,\n}: ComboboxRootProps) => {\n const modalId = useId(COMBOBOX_NAME, modalIdProp);\n const [open = false, onOpenChange] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: propsOnOpenChange,\n });\n const [value = '', onValueChange] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue,\n onChange: propsOnValueChange,\n });\n\n return (\n <Popover.Root open={open} onOpenChange={onOpenChange} modal={modal}>\n <ComboboxProvider\n isCombobox\n modalId={modalId}\n placeholder={placeholder}\n open={open}\n onOpenChange={onOpenChange}\n value={value}\n onValueChange={onValueChange}\n >\n {children}\n </ComboboxProvider>\n </Popover.Root>\n );\n};\n\n//\n// Content — Popover.Content + Picker.Root.\n//\n// Filtering is caller-driven: pass already-matching <Combobox.Item> children.\n//\n\ntype ComboboxContentProps = PopoverContentProps;\n\nconst ComboboxContent = composable<HTMLDivElement, ComboboxContentProps>(({ children, ...props }, forwardedRef) => {\n const { modalId } = useComboboxContext(COMBOBOX_CONTENT_NAME);\n\n return (\n <Popover.Content {...composableProps(props, { id: modalId })} ref={forwardedRef}>\n <Popover.Viewport classNames='w-(--radix-popover-trigger-width)'>\n <Picker.Root>{children}</Picker.Root>\n </Popover.Viewport>\n </Popover.Content>\n );\n});\n\nComboboxContent.displayName = COMBOBOX_CONTENT_NAME;\n\n//\n// Trigger — the button that opens the popover.\n//\n\ntype ComboboxTriggerProps = ButtonProps;\n\nconst ComboboxTrigger = forwardRef<HTMLButtonElement, ComboboxTriggerProps>(\n ({ children, onClick, ...props }, forwardedRef) => {\n const { modalId, open, onOpenChange, placeholder, value } = useComboboxContext(COMBOBOX_TRIGGER_NAME);\n const handleClick = useCallback(\n (event: Parameters<Exclude<ButtonProps['onClick'], undefined>>[0]) => {\n onClick?.(event);\n onOpenChange?.(true);\n },\n [onClick, onOpenChange],\n );\n\n return (\n <Popover.Trigger asChild>\n <Button\n {...props}\n role='combobox'\n aria-expanded={open}\n aria-controls={modalId}\n aria-haspopup='dialog'\n onClick={handleClick}\n ref={forwardedRef}\n >\n {children ?? (\n <>\n <span className={mx('font-normal text-start flex-1 min-w-0 truncate me-2', !value && 'text-subdued')}>\n {value || placeholder}\n </span>\n <Icon icon='ph--caret-down--bold' size={3} />\n </>\n )}\n </Button>\n </Popover.Trigger>\n );\n },\n);\n\nComboboxTrigger.displayName = COMBOBOX_TRIGGER_NAME;\n\n//\n// VirtualTrigger\n//\n\ntype ComboboxVirtualTriggerProps = PopoverVirtualTriggerProps;\n\nconst ComboboxVirtualTrigger = Popover.VirtualTrigger;\n\n//\n// Input — text input wired to Picker.Input. Caller controls value.\n//\n\ntype ComboboxInputProps = ThemedClassName<\n Omit<ComponentPropsWithRef<'input'>, 'value'> & Pick<PickerInputProps, 'value' | 'onValueChange'>\n>;\n\nconst ComboboxInput = forwardRef<HTMLInputElement, ComboboxInputProps>(({ classNames, ...props }, forwardedRef) => {\n return (\n <Picker.Input\n {...props}\n classNames={['m-form-chrome mb-0 w-[calc(100%-2*var(--spacing-form-chrome))]', classNames]}\n ref={forwardedRef}\n />\n );\n});\n\nComboboxInput.displayName = 'Combobox.Input';\n\n//\n// List — scroll wrapper around items.\n//\n\ntype ComboboxListProps = PropsWithChildren<{ classNames?: string | string[] }>;\n\nconst ComboboxList = forwardRef<HTMLDivElement, ComboboxListProps>(\n ({ classNames, children, ...props }, forwardedRef) => {\n return (\n <ScrollArea.Root\n {...composableProps(props, { classNames: ['py-form-chrome', classNames] })}\n role='listbox'\n centered\n padding\n thin\n ref={forwardedRef}\n >\n <ScrollArea.Viewport>{children}</ScrollArea.Viewport>\n </ScrollArea.Root>\n );\n },\n);\n\nComboboxList.displayName = 'Combobox.List';\n\n//\n// Item — wraps Picker.Item; commits value + closes popover on select.\n//\n\ntype ComboboxItemProps = ThemedClassName<\n PropsWithChildren<{\n /** Unique identifier. */\n value: string;\n /** Display label (used when `children` are not provided). */\n label?: string;\n /** Optional icon id (Phosphor) shown before the label. */\n icon?: string;\n /** Additional class names for the icon. */\n iconClassNames?: IconProps['classNames'];\n /** Show a check icon on the right (commonly used for confirming the picked item). */\n checked?: boolean;\n /** Suffix text after the label. */\n suffix?: string;\n /** Disabled. */\n disabled?: boolean;\n /** Caller-supplied select handler in addition to value-commit. */\n onSelect?: () => void;\n /** Whether to close the popover when this item is selected. Defaults to true. */\n closeOnSelect?: boolean;\n }>\n>;\n\nconst ComboboxItem = forwardRef<HTMLDivElement, ComboboxItemProps>(\n (\n {\n classNames,\n onSelect,\n value,\n label,\n icon,\n iconClassNames,\n checked,\n suffix,\n disabled,\n closeOnSelect = true,\n children,\n },\n forwardedRef,\n ) => {\n const { onValueChange, onOpenChange } = useComboboxContext(COMBOBOX_ITEM_NAME);\n const handleSelect = useCallback<NonNullable<PickerItemProps['onSelect']>>(() => {\n onSelect?.();\n if (value !== undefined) {\n onValueChange?.(value);\n }\n if (closeOnSelect) {\n onOpenChange?.(false);\n }\n }, [onSelect, onValueChange, onOpenChange, value, closeOnSelect]);\n\n return (\n <Picker.Item\n value={value}\n disabled={disabled}\n onSelect={handleSelect}\n ref={forwardedRef}\n classNames={[\n // Full width inside the viewport (no horizontal margin).\n // `px-3 py-1`, `cursor-pointer`, `select-none` and the\n // `dx-hover` / `dx-selected` pairing come from `Picker.Item`'s\n // defaults; we only add the row-shape (flex / icons + label)\n // and the disabled overrides on top.\n 'flex w-full gap-2 items-center',\n disabled && 'hover:bg-transparent data-[selected=true]:bg-transparent',\n classNames,\n ]}\n >\n {children ?? (\n <>\n {icon && <Icon icon={icon} classNames={iconClassNames} />}\n <span className='w-0 grow truncate'>{label}</span>\n {suffix && <span className='shrink-0 text-description'>{suffix}</span>}\n {checked && <Icon icon='ph--check--regular' />}\n </>\n )}\n </Picker.Item>\n );\n },\n);\n\nComboboxItem.displayName = COMBOBOX_ITEM_NAME;\n\n//\n// Arrow\n//\n\ntype ComboboxArrowProps = PopoverArrowProps;\n\nconst ComboboxArrow = Popover.Arrow;\n\n//\n// Empty — passthrough placeholder. No translation; caller supplies copy.\n//\n\ntype ComboboxEmptyProps = ThemedClassName<PropsWithChildren>;\n\nconst ComboboxEmpty = forwardRef<HTMLDivElement, ComboboxEmptyProps>(({ classNames, children }, forwardedRef) => {\n return (\n <div ref={forwardedRef} role='status' className={mx(classNames)}>\n {children}\n </div>\n );\n});\n\nComboboxEmpty.displayName = 'Combobox.Empty';\n\n//\n// Portal\n//\n\ntype ComboboxPortalProps = ComponentPropsWithoutRef<typeof Popover.Portal>;\n\nconst ComboboxPortal = Popover.Portal;\n\n//\n// Combobox\n//\n\nexport const Combobox = {\n Root: ComboboxRoot,\n Portal: ComboboxPortal,\n Content: ComboboxContent,\n Trigger: ComboboxTrigger,\n VirtualTrigger: ComboboxVirtualTrigger,\n Input: ComboboxInput,\n List: ComboboxList,\n Item: ComboboxItem,\n Arrow: ComboboxArrow,\n Empty: ComboboxEmpty,\n};\n\nexport type {\n ComboboxRootProps,\n ComboboxPortalProps,\n ComboboxContentProps,\n ComboboxTriggerProps,\n ComboboxVirtualTriggerProps,\n ComboboxInputProps,\n ComboboxListProps,\n ComboboxItemProps,\n ComboboxArrowProps,\n ComboboxEmptyProps,\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\n// `Picker` — generic listbox-with-input compound (the WAI-ARIA combobox\n// keyboard pattern, sans the search-domain bits).\n//\n// Owns:\n// - The virtual-highlight selection model (`selectedValue` updated by\n// arrow keys; items don't receive browser focus, the input retains it).\n// - An item registry (`registerItem` / `unregisterItem`) used by the\n// input's keyboard handler to walk DOM-order siblings.\n// - Auto-select-first-when-items-change behaviour.\n// - `triggerSelect` so Enter from the input fires the highlighted\n// item's `onSelect`.\n//\n// Does NOT own:\n// - Query / search state (`query`, `onSearch`, `debounceMs`) — that\n// lives in `@dxos/react-ui-search`'s `SearchList`, which composes\n// `Picker` + adds the search-themed wrapper.\n// - Filtering / ranking — same, see `useSearchListResults`.\n// - The `<ul role='listbox'>` wrapper. Caller provides one (today's\n// `SearchList.Viewport` / future `Combobox.Content` puts the role\n// on the scroll surface).\n// - Translations.\n//\n// Compound shape (matches Radix Select / Combobox patterns):\n//\n// <Picker.Root>\n// <Picker.Input value={query} onValueChange={setQuery} />\n// <YourScrollWrapper role='listbox'>\n// {items.map(item => (\n// <Picker.Item key={item.id} value={item.id} onSelect={…}>\n// {item.label}\n// </Picker.Item>\n// ))}\n// </YourScrollWrapper>\n// </Picker.Root>\n//\n// Why two contexts (Item / Input) — performance: items don't re-render\n// when the input value changes; the input doesn't re-render when an\n// item registers / unregisters.\n\nimport { Slot } from '@radix-ui/react-slot';\nimport React, {\n type ChangeEvent,\n type ComponentPropsWithRef,\n type KeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type PropsWithChildren,\n type ReactNode,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { type Density, type Elevation, Input, type ThemedClassName, useThemeContext } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport {\n PickerInputContextProvider,\n PickerItemContextProvider,\n usePickerInputContext,\n usePickerItemContext,\n} from './context';\n\n//\n// Internal types.\n//\n\ntype ItemData = {\n element: HTMLElement;\n disabled?: boolean;\n onSelect?: () => void;\n};\n\n//\n// Root — context provider; renders no DOM.\n//\n\ntype PickerRootProps = PropsWithChildren<{}>;\n\nconst PickerRoot = ({ children }: PickerRootProps) => {\n const [selectedValue, setSelectedValue] = useState<string | undefined>(undefined);\n\n // Item registry: value → { element, onSelect, disabled }.\n const itemsRef = useRef<Map<string, ItemData>>(new Map());\n\n // Bumped on every (un)register so the auto-select-first effect can fire.\n const [itemVersion, setItemVersion] = useState(0);\n\n // Auto-select first non-disabled item when the registry changes and the\n // current selection is no longer valid (gone or disabled).\n useEffect(() => {\n const current = selectedValue !== undefined ? itemsRef.current.get(selectedValue) : undefined;\n const isValid = current !== undefined && !current.disabled;\n if (!isValid && itemsRef.current.size > 0) {\n const entries = Array.from(itemsRef.current.entries()).filter(([, data]) => !data.disabled);\n if (entries.length > 0) {\n entries.sort(([, a], [, b]) => {\n const position = a.element.compareDocumentPosition(b.element);\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n return -1;\n }\n if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n return 1;\n }\n return 0;\n });\n const firstValue = entries[0]?.[0];\n if (firstValue !== undefined && firstValue !== selectedValue) {\n setSelectedValue(firstValue);\n }\n } else if (selectedValue !== undefined) {\n setSelectedValue(undefined);\n }\n }\n }, [itemVersion, selectedValue]);\n\n const registerItem = useCallback(\n (value: string, element: HTMLElement | null, onSelect: (() => void) | undefined, disabled?: boolean) => {\n if (element) {\n itemsRef.current.set(value, { element, onSelect, disabled });\n setItemVersion((v) => v + 1);\n }\n },\n [],\n );\n\n const unregisterItem = useCallback((value: string) => {\n itemsRef.current.delete(value);\n setItemVersion((v) => v + 1);\n }, []);\n\n // DOM-order traversal of registered items (excludes disabled).\n const getItemValues = useCallback(() => {\n return Array.from(itemsRef.current.entries())\n .filter(([, data]) => !data.disabled)\n .sort(([, a], [, b]) => {\n const position = a.element.compareDocumentPosition(b.element);\n return position & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : position & Node.DOCUMENT_POSITION_PRECEDING ? 1 : 0;\n })\n .map(([value]) => value);\n }, []);\n\n const triggerSelect = useCallback(() => {\n if (selectedValue !== undefined) {\n const item = itemsRef.current.get(selectedValue);\n item?.onSelect?.();\n }\n }, [selectedValue]);\n\n // Stable: items subscribe to this. Excludes the volatile bits (input\n // helpers) that change with every keystroke.\n const itemContextValue = useMemo(\n () => ({\n selectedValue,\n onSelectedValueChange: setSelectedValue,\n registerItem,\n unregisterItem,\n }),\n [selectedValue, registerItem, unregisterItem],\n );\n\n // Volatile: input subscribes to this. Includes the keyboard helpers.\n const inputContextValue = useMemo(\n () => ({\n selectedValue,\n onSelectedValueChange: setSelectedValue,\n getItemValues,\n triggerSelect,\n }),\n [selectedValue, getItemValues, triggerSelect],\n );\n\n return (\n <PickerInputContextProvider {...inputContextValue}>\n <PickerItemContextProvider {...itemContextValue}>{children}</PickerItemContextProvider>\n </PickerInputContextProvider>\n );\n};\n\nPickerRoot.displayName = 'Picker.Root';\n\n//\n// Input — text input with virtual-highlight keyboard handling.\n//\n\ntype InputVariant = 'default' | 'subdued';\n\ntype PickerInputProps = ThemedClassName<\n Omit<ComponentPropsWithRef<'input'>, 'value'> & {\n /** Controlled input value. Caller owns this — e.g. binds to query state. */\n value?: string;\n /** Called on every keystroke with the new input string. */\n onValueChange?: (value: string) => void;\n density?: Density;\n elevation?: Elevation;\n variant?: InputVariant;\n }\n>;\n\nconst PickerInput = forwardRef<HTMLInputElement, PickerInputProps>(\n ({ value, onValueChange, onChange, onKeyDown, autoFocus, ...props }, forwardedRef) => {\n const { hasIosKeyboard } = useThemeContext();\n const { selectedValue, onSelectedValueChange, getItemValues, triggerSelect } =\n usePickerInputContext('Picker.Input');\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n onValueChange?.(event.target.value);\n onChange?.(event);\n },\n [onValueChange, onChange],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) {\n return;\n }\n const values = getItemValues();\n if (values.length === 0) {\n if (event.key === 'Escape') {\n onValueChange?.('');\n }\n return;\n }\n\n const currentIndex = selectedValue !== undefined ? values.indexOf(selectedValue) : -1;\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n const nextIndex = currentIndex === -1 ? 0 : Math.min(currentIndex + 1, values.length - 1);\n const nextValue = values[nextIndex];\n if (nextValue !== undefined) {\n onSelectedValueChange(nextValue);\n }\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n const prevIndex = currentIndex === -1 ? values.length - 1 : Math.max(currentIndex - 1, 0);\n const prevValue = values[prevIndex];\n if (prevValue !== undefined) {\n onSelectedValueChange(prevValue);\n }\n break;\n }\n case 'Enter': {\n if (selectedValue !== undefined) {\n event.preventDefault();\n triggerSelect();\n }\n break;\n }\n case 'Home': {\n event.preventDefault();\n const firstValue = values[0];\n if (firstValue !== undefined) {\n onSelectedValueChange(firstValue);\n }\n break;\n }\n case 'End': {\n event.preventDefault();\n const lastValue = values[values.length - 1];\n if (lastValue !== undefined) {\n onSelectedValueChange(lastValue);\n }\n break;\n }\n case 'Escape': {\n event.preventDefault();\n if (selectedValue !== undefined) {\n onSelectedValueChange(undefined);\n } else {\n onValueChange?.('');\n }\n break;\n }\n }\n },\n [selectedValue, onSelectedValueChange, getItemValues, triggerSelect, onValueChange, onKeyDown],\n );\n\n // Spread `value` only when defined: a caller that wants a\n // controlled input passes `value` + `onValueChange`; a caller that\n // just wants the keyboard pattern (Default story) passes neither\n // and gets an uncontrolled input that accepts keystrokes normally.\n // Without this guard `value={value ?? ''}` would force-control the\n // input, swallowing every keystroke when no `onValueChange` is\n // wired (input visually accepts characters then re-renders empty).\n return (\n <Input.Root>\n <Input.TextInput\n {...props}\n autoFocus={autoFocus && !hasIosKeyboard}\n {...(value !== undefined && { value })}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n ref={forwardedRef}\n />\n </Input.Root>\n );\n },\n);\n\nPickerInput.displayName = 'Picker.Input';\n\n//\n// Item — option that registers in the parent's registry.\n//\n\ntype PickerItemProps = ThemedClassName<{\n /** Unique identifier; used by the registry and DOM-order traversal. */\n value: string;\n /** Callback when the item is committed (click, or Enter while highlighted). */\n onSelect?: () => void;\n /** Disable the item — registry-visible but not focusable, not navigable, not clickable. */\n disabled?: boolean;\n asChild?: boolean;\n children?: ReactNode;\n}>;\n\nconst PickerItem = forwardRef<HTMLDivElement, PickerItemProps>(\n ({ classNames, value, onSelect, disabled, asChild, children, ...props }, forwardedRef) => {\n const { selectedValue, onSelectedValueChange, registerItem, unregisterItem } = usePickerItemContext('Picker.Item');\n const internalRef = useRef<HTMLDivElement>(null);\n\n const isSelected = selectedValue === value && !disabled;\n\n // Register on mount, unregister on unmount.\n useEffect(() => {\n const element = internalRef.current;\n if (element) {\n registerItem(value, element, onSelect, disabled);\n }\n return () => unregisterItem(value);\n }, [value, onSelect, disabled, registerItem, unregisterItem]);\n\n // Smooth-scroll the selected option into view.\n useEffect(() => {\n if (isSelected && internalRef.current) {\n internalRef.current.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }\n }, [isSelected]);\n\n const handleClick = useCallback(() => {\n if (disabled) {\n return;\n }\n // Move the virtual highlight to the clicked item so subsequent\n // arrow keys continue from here, then fire the caller's select.\n onSelectedValueChange(value);\n onSelect?.();\n }, [disabled, value, onSelectedValueChange, onSelect]);\n\n // Prevent the mousedown from moving focus off `Picker.Input` —\n // browsers focus an element with any `tabIndex` (including `-1`) on\n // click, which would steal focus from the input and break the\n // input's arrow-key handler. Cancelling on `mousedown` keeps focus\n // on the input while still letting the subsequent `click` fire.\n const handleMouseDown = useCallback((event: ReactMouseEvent<HTMLElement>) => {\n event.preventDefault();\n }, []);\n\n const Comp: any = asChild ? Slot : 'div';\n\n // Default styling: pair `aria-selected` with `dx-selected` and add\n // `dx-hover` for the standard hover affordance. Same grammar `Row`\n // uses (see `ui-theme/src/css/components/selected.md`). Horizontal\n // padding follows `--gutter` so item text aligns with sibling\n // `Column.Center` content (input, status row); falls back to\n // `0.75rem` (≈ `px-3`) when not nested under `Column.Root`. Vertical\n // padding and the pointer cursor are baked in so callsites don't\n // have to repeat them; callers can still append / override via\n // `classNames`. `dx-selected` only fires when `aria-selected=\"true\"`,\n // which we set below from the virtual highlight — so unfocused\n // items render plain.\n return (\n <Comp\n {...props}\n ref={(node: HTMLDivElement | null) => {\n internalRef.current = node;\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n }}\n role='option'\n aria-selected={isSelected}\n aria-disabled={disabled}\n data-selected={isSelected}\n data-disabled={disabled}\n data-value={value}\n // tabIndex={-1} — combobox pattern keeps browser focus on the\n // input; the selected option is highlighted via `aria-selected`,\n // not via DOM focus. Differs from `Row` (listbox pattern,\n // tabIndex={0}). See header comment.\n tabIndex={-1}\n className={mx(\n 'dx-hover dx-selected px-[var(--gutter,0.75rem)] py-1 cursor-pointer select-none',\n disabled && 'opacity-50 cursor-not-allowed',\n classNames,\n )}\n onMouseDown={handleMouseDown}\n onClick={handleClick}\n >\n {children}\n </Comp>\n );\n },\n);\n\nPickerItem.displayName = 'Picker.Item';\n\n//\n// Public namespace.\n//\n\nexport const Picker = {\n Root: PickerRoot,\n Input: PickerInput,\n Item: PickerItem,\n};\n\nexport type { PickerRootProps, PickerInputProps, PickerItemProps };\n\n// Re-export context hooks for higher layers (SearchList) that need to\n// compose: `useSearchListInputContext` etc. previously read these\n// values; they now route through Picker.\nexport { usePickerInputContext, usePickerItemContext } from './context';\n", "//\n// Copyright 2026 DXOS.org\n//\n\n// Two contexts (Item / Input) instead of one — performance optimization\n// from the original SearchList: items don't subscribe to query / input\n// state, so typing in the input doesn't re-render every option.\n\nimport { createContext } from '@radix-ui/react-context';\n\n/** Stable: items subscribe to selection, registry. Doesn't change on query. */\nexport type PickerItemContextValue = {\n /** Currently highlighted item value (virtual; not browser focus). */\n selectedValue: string | undefined;\n /** Update the highlighted value (e.g. arrow keys, hover). */\n onSelectedValueChange: (value: string | undefined) => void;\n /** Register an item for keyboard nav + DOM-order traversal. */\n registerItem: (\n value: string,\n element: HTMLElement | null,\n onSelect: (() => void) | undefined,\n disabled?: boolean,\n ) => void;\n /** Unregister an item. */\n unregisterItem: (value: string) => void;\n};\n\n/** Volatile: input subscribes to selection + the input keyboard helpers. */\nexport type PickerInputContextValue = {\n /** Currently highlighted item value. */\n selectedValue: string | undefined;\n /** Update the highlighted value. */\n onSelectedValueChange: (value: string | undefined) => void;\n /** Get registered item values in DOM order (excludes disabled). */\n getItemValues: () => string[];\n /** Trigger the highlighted item's `onSelect`. */\n triggerSelect: () => void;\n};\n\nexport const [PickerItemContextProvider, usePickerItemContext] = createContext<PickerItemContextValue>('PickerItem');\n\nexport const [PickerInputContextProvider, usePickerInputContext] =\n createContext<PickerInputContextValue>('PickerInput');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n type Edge,\n attachClosestEdge,\n extractClosestEdge,\n} from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { draggable, dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { setCustomNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/element/set-custom-native-drag-preview';\nimport { createContext } from '@radix-ui/react-context';\nimport { Slot } from '@radix-ui/react-slot';\nimport React, {\n type ComponentProps,\n type HTMLAttributes,\n type PropsWithChildren,\n type ReactNode,\n RefObject,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { invariant } from '@dxos/invariant';\nimport {\n IconButton,\n type IconButtonProps,\n ListItem as NaturalListItem,\n type ThemedClassName,\n useTranslation,\n} from '@dxos/react-ui';\nimport { mx, osTranslations } from '@dxos/ui-theme';\n\nimport { useListContext } from './ListRoot';\n\nexport type ListItemRecord = any;\n\nexport type ItemDragState =\n | {\n type: 'idle';\n }\n | {\n type: 'preview';\n container: HTMLElement;\n }\n | {\n type: 'is-dragging';\n }\n | {\n type: 'is-dragging-over';\n closestEdge: Edge | null;\n };\n\nexport const idle: ItemDragState = { type: 'idle' };\n\nconst stateStyles: { [Key in ItemDragState['type']]?: HTMLAttributes<HTMLDivElement>['className'] } = {\n 'is-dragging': 'opacity-50',\n};\n\ntype ListItemContext<T extends ListItemRecord> = {\n item: T;\n dragHandleRef: RefObject<HTMLButtonElement | null>;\n};\n\n/**\n * Default context defined for ListItemDragPreview, which is defined outside of ListItem.\n */\nconst defaultContext: ListItemContext<any> = {} as any;\n\nconst LIST_ITEM_NAME = 'ListItem';\n\nexport const [ListItemProvider, useListItemContext] = createContext<ListItemContext<any>>(\n LIST_ITEM_NAME,\n defaultContext,\n);\n\nexport type ListItemProps<T extends ListItemRecord> = ThemedClassName<\n PropsWithChildren<\n {\n item: T;\n asChild?: boolean;\n selected?: boolean;\n } & HTMLAttributes<HTMLDivElement>\n >\n>;\n\n/**\n * Draggable list item.\n */\nexport const ListItem = <T extends ListItemRecord>({\n children,\n classNames,\n item,\n asChild,\n selected,\n ...props\n}: ListItemProps<T>) => {\n const Comp = asChild ? Slot : 'div';\n const { isItem, readonly, dragPreview, setState: setRootState } = useListContext(LIST_ITEM_NAME);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const dragHandleRef = useRef<HTMLButtonElement | null>(null);\n const [state, setState] = useState<ItemDragState>(idle);\n\n useEffect(() => {\n const element = rootRef.current;\n invariant(element);\n return combine(\n //\n // https://atlassian.design/components/pragmatic-drag-and-drop/core-package/adapters/element/about#draggable\n //\n draggable({\n element,\n dragHandle: dragHandleRef.current!,\n canDrag: () => !readonly,\n getInitialData: () => item as any,\n onGenerateDragPreview: dragPreview\n ? ({ nativeSetDragImage, source }) => {\n const rect = source.element.getBoundingClientRect();\n setCustomNativeDragPreview({\n nativeSetDragImage,\n getOffset: ({ container }) => {\n const { height } = container.getBoundingClientRect();\n return { x: 20, y: height / 2 };\n },\n render: ({ container }) => {\n container.style.width = rect.width + 'px';\n setState({ type: 'preview', container });\n setRootState({ type: 'preview', container, item });\n return () => {}; // TODO(burdon): Cleanup.\n },\n });\n }\n : undefined,\n onDragStart: () => {\n setState({ type: 'is-dragging' });\n setRootState({ type: 'is-dragging', item });\n },\n onDrop: () => {\n setState(idle);\n setRootState(idle);\n },\n }),\n\n //\n // https://atlassian.design/components/pragmatic-drag-and-drop/core-package/adapters/element/about#drop-target-for-elements\n //\n dropTargetForElements({\n element,\n canDrop: ({ source }) => {\n return (source.element !== element && isItem?.(source.data)) ?? false;\n },\n getData: ({ input }) => {\n return attachClosestEdge(item as any, { element, input, allowedEdges: ['top', 'bottom'] });\n },\n getIsSticky: () => true,\n onDragEnter: ({ self }) => {\n const closestEdge = extractClosestEdge(self.data);\n setState({ type: 'is-dragging-over', closestEdge });\n },\n onDragLeave: () => {\n setState(idle);\n },\n onDrag: ({ self }) => {\n const closestEdge = extractClosestEdge(self.data);\n setState((current) => {\n if (current.type === 'is-dragging-over' && current.closestEdge === closestEdge) {\n return current;\n }\n return { type: 'is-dragging-over', closestEdge };\n });\n },\n onDrop: () => {\n setState(idle);\n },\n }),\n );\n }, [item]);\n\n return (\n <ListItemProvider item={item} dragHandleRef={dragHandleRef}>\n <Comp\n {...props}\n role='listitem'\n aria-selected={selected}\n className={mx('relative p-1 dx-selected dx-hover', classNames, stateStyles[state.type])}\n ref={rootRef}\n >\n {children}\n </Comp>\n {state.type === 'is-dragging-over' && state.closestEdge && (\n <NaturalListItem.DropIndicator edge={state.closestEdge} />\n )}\n </ListItemProvider>\n );\n};\n\n//\n// List item components\n//\n\nexport const ListItemIconButton = ({\n autoHide = true,\n iconOnly = true,\n variant = 'ghost',\n classNames,\n disabled,\n ...props\n}: IconButtonProps & { autoHide?: boolean }) => {\n const { state } = useListContext('ITEM_BUTTON');\n const isDisabled = state.type !== 'idle' || disabled;\n return (\n <IconButton\n {...props}\n disabled={isDisabled}\n iconOnly={iconOnly}\n variant={variant}\n classNames={[classNames, autoHide && disabled && 'hidden']}\n />\n );\n};\n\n// TODO(burdon): Generalize to action button.\nexport const ListItemDeleteButton = ({\n autoHide = true,\n classNames,\n disabled,\n icon = 'ph--x--regular',\n label,\n ...props\n}: Partial<Pick<IconButtonProps, 'icon'>> &\n Omit<IconButtonProps, 'icon' | 'label'> & { autoHide?: boolean; label?: string }) => {\n const { state } = useListContext('DELETE_BUTTON');\n const isDisabled = state.type !== 'idle' || disabled;\n const { t } = useTranslation(osTranslations);\n return (\n <IconButton\n {...props}\n variant='ghost'\n disabled={isDisabled}\n icon={icon}\n iconOnly\n label={label ?? t('delete.label')}\n classNames={[classNames, autoHide && disabled && 'hidden']}\n />\n );\n};\n\nexport const ListItemDragHandle = ({ disabled }: Pick<IconButtonProps, 'disabled'>) => {\n const { dragHandleRef } = useListItemContext('DRAG_HANDLE');\n const { t } = useTranslation(osTranslations);\n return (\n <IconButton\n variant='ghost'\n disabled={disabled}\n icon='ph--dots-six-vertical--regular'\n iconOnly\n label={t('drag-handle.label')}\n ref={dragHandleRef}\n />\n );\n};\n\nexport const ListItemDragPreview = <T extends ListItemRecord>({\n children,\n}: {\n children: ({ item }: { item: T }) => ReactNode;\n}) => {\n const { state } = useListContext('DRAG_PREVIEW');\n return state?.type === 'preview' ? createPortal(children({ item: state.item }), state.container) : null;\n};\n\nexport const ListItemWrapper = ({ classNames, children }: ThemedClassName<PropsWithChildren>) => (\n <div role='none' className={mx('flex w-full gap-2', classNames)}>\n {children}\n </div>\n);\n\nexport const ListItemTitle = ({\n classNames,\n children,\n ...props\n}: ThemedClassName<PropsWithChildren<ComponentProps<'div'>>>) => (\n <div role='none' className={mx('flex grow items-center truncate', classNames)} {...props}>\n {children}\n </div>\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { extractClosestEdge } from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';\nimport { getReorderDestinationIndex } from '@atlaskit/pragmatic-drag-and-drop-hitbox/util/get-reorder-destination-index';\nimport { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type ReactNode, useCallback, useEffect, useState } from 'react';\n\nimport { type ItemDragState, type ListItemRecord, idle } from './ListItem';\n\ntype ListContext<T extends ListItemRecord> = {\n // TODO(burdon): Rename drag state.\n state: ItemDragState & { item?: T };\n setState: (state: ItemDragState & { item?: T }) => void;\n readonly?: boolean;\n dragPreview?: boolean;\n isItem?: (item: any) => boolean;\n getId?: (item: T) => string; // TODO(burdon): Require if T doesn't conform to type.\n};\n\nconst LIST_NAME = 'List';\n\nexport const [ListProvider, useListContext] = createContext<ListContext<any>>(LIST_NAME);\n\nexport type ListRendererProps<T extends ListItemRecord> = {\n state: ListContext<T>['state'];\n items: readonly T[];\n};\n\nconst defaultGetId = <T extends ListItemRecord>(item: T) => (item as any)?.id;\n\nexport type ListRootProps<T extends ListItemRecord> = {\n children?: (props: ListRendererProps<T>) => ReactNode;\n items?: readonly T[];\n onMove?: (fromIndex: number, toIndex: number) => void;\n} & Pick<ListContext<T>, 'isItem' | 'getId' | 'readonly' | 'dragPreview'>;\n\nexport const ListRoot = <T extends ListItemRecord>({\n children,\n items,\n isItem,\n getId = defaultGetId,\n onMove,\n ...props\n}: ListRootProps<T>) => {\n const isEqual = useCallback(\n (a: T, b: T) => {\n const idA = getId?.(a);\n const idB = getId?.(b);\n\n if (idA !== undefined && idB !== undefined) {\n return idA === idB;\n } else {\n // Fallback for primitive values or when getId fails.\n // NOTE(ZaymonFC): After drag and drop, pragmatic internally serializes drop targets which breaks reference equality.\n // You must provide an `getId` function that returns a stable identifier for your items.\n return a === b;\n }\n },\n [getId],\n );\n\n const [state, setState] = useState<ListContext<T>['state']>(idle);\n useEffect(() => {\n if (!items) {\n return;\n }\n\n return monitorForElements({\n canMonitor: ({ source }) => isItem?.(source.data) ?? false,\n onDrop: ({ location, source }) => {\n const target = location.current.dropTargets[0];\n if (!target) {\n return;\n }\n\n const sourceData = source.data;\n const targetData = target.data;\n if (!isItem?.(sourceData) || !isItem?.(targetData)) {\n return;\n }\n\n const sourceIdx = items.findIndex((item) => isEqual(item, sourceData as T));\n const targetIdx = items.findIndex((item) => isEqual(item, targetData as T));\n if (targetIdx < 0 || sourceIdx < 0) {\n return;\n }\n const closestEdgeOfTarget = extractClosestEdge(targetData);\n const destinationIndex = getReorderDestinationIndex({\n closestEdgeOfTarget,\n startIndex: sourceIdx,\n indexOfTarget: targetIdx,\n axis: 'vertical',\n });\n\n onMove?.(sourceIdx, destinationIndex);\n },\n });\n }, [items, isEqual, onMove]);\n\n return (\n <ListProvider {...{ state, setState, isItem, ...props }}>{children?.({ state, items: items ?? [] })}</ListProvider>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n ListItem,\n ListItemIconButton,\n ListItemDeleteButton,\n ListItemDragHandle,\n ListItemDragPreview,\n type ListItemProps,\n type ListItemRecord,\n ListItemTitle,\n ListItemWrapper,\n} from './ListItem';\nimport { ListRoot, type ListRootProps } from './ListRoot';\n\n/**\n * Draggable list with per-row drag handles and delete buttons.\n * Ref: https://github.com/atlassian/pragmatic-drag-and-drop\n * Ref: https://github.com/alexreardon/pdnd-react-tailwind/blob/main/src/task.tsx\n *\n * @deprecated New code should use one of:\n *\n * - `RowList` / `CardList` from this same package — for selectable\n * pickers (master/detail). Correct ARIA + dx-* by construction.\n * - `Mosaic.Stack` / `Mosaic.VirtualStack` from `@dxos/react-ui-mosaic`\n * — for virtualized or drag-reorderable card stacks.\n *\n * This component is retained for the existing reorder-with-delete-button\n * use cases (plugin-meeting, plugin-automation, plugin-zen, etc.) until\n * each is migrated; see `AUDIT.md` Phase 6 for the migration plan.\n */\nexport const List = {\n Root: ListRoot,\n Item: ListItem,\n ItemDragPreview: ListItemDragPreview,\n ItemWrapper: ListItemWrapper,\n ItemDragHandle: ListItemDragHandle,\n ItemIconButton: ListItemIconButton,\n ItemDeleteButton: ListItemDeleteButton,\n ItemTitle: ListItemTitle,\n};\n\ntype ListItem = ListItemRecord;\n\nexport type { ListRootProps, ListItemProps, ListItem, ListItemRecord };\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// `Listbox` — single-select listbox with optional check indicator.\n//\n// Internally composes `RowList` from this same package: `Listbox.Root`\n// is `RowList.Root` + `RowList.Content`, and `Listbox.Option` is `Row`.\n// The compound API (`Listbox.Root` / `.Option` / `.OptionLabel` /\n// `.OptionIndicator`) is preserved so existing call sites keep working.\n//\n// Why this shape (when `RowList` is right there): `Listbox` historically\n// rendered as a flat `<ul>` with no `ScrollArea` wrapper — it's used\n// inside dialogs / popovers / panels that own their own scroll. Skipping\n// `RowList.Viewport` keeps that behaviour. If a caller wants the styled\n// scroll surface, they wrap the listbox in `RowList.Viewport` themselves.\n\nimport { type Scope, createContextScope } from '@radix-ui/react-context';\nimport React, { type ComponentPropsWithRef, type ReactNode, forwardRef } from 'react';\n\nimport { Icon, type IconProps, type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { Row, RowList, createRowListScope, useRowListSelection } from '../RowList';\n\nconst commandItem = 'flex items-center overflow-hidden';\n\nconst LISTBOX_NAME = 'Listbox';\nconst LISTBOX_OPTION_NAME = 'ListboxOption';\nconst LISTBOX_OPTION_LABEL_NAME = 'ListboxOptionLabel';\nconst LISTBOX_OPTION_INDICATOR_NAME = 'ListboxOptionIndicator';\n\n//\n// Context — only used to thread `value` through to `OptionIndicator` so\n// it knows whether to show the checkmark. Selection state itself lives\n// in `RowList`'s context (we delegate to it via composition).\n//\n\ntype ListboxScopedProps<P> = P & { __listboxScope?: Scope };\ntype ListboxOptionScopedProps<P> = P & { __listboxOptionScope?: Scope };\n\nconst [createListboxContext, createListboxScope] = createContextScope(LISTBOX_NAME, [createRowListScope]);\nconst [createListboxOptionContext, createListboxOptionScope] = createContextScope(LISTBOX_OPTION_NAME, [\n createListboxScope,\n]);\n\ntype ListboxOptionContextValue = {\n value: string;\n isSelected: boolean;\n};\n\nconst [ListboxOptionProvider, useListboxOptionContext] =\n createListboxOptionContext<ListboxOptionContextValue>(LISTBOX_OPTION_NAME);\n\n//\n// Root — composes `RowList.Root` + `RowList.Content`.\n//\n// Maps the public `value` / `onValueChange` API to RowList's\n// `selectedId` / `onSelectChange` so existing consumers don't change.\n//\n\ntype ListboxRootProps = ThemedClassName<ComponentPropsWithRef<'ul'>> & {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n /** Reserved — autoFocus on mount. RowList's focus-on-entry covers the typical case. */\n autoFocus?: boolean;\n};\n\nconst ListboxRoot = forwardRef<HTMLUListElement, ListboxRootProps>(\n (props: ListboxScopedProps<ListboxRootProps>, forwardedRef) => {\n const {\n __listboxScope: _scope,\n children,\n classNames,\n value,\n defaultValue,\n onValueChange,\n autoFocus: _autoFocus,\n ...rootProps\n } = props;\n\n return (\n <RowList.Root selectedId={value} defaultSelectedId={defaultValue} onSelectChange={onValueChange}>\n <RowList.Content {...rootProps} classNames={mx('w-full', classNames)} ref={forwardedRef}>\n {children}\n </RowList.Content>\n </RowList.Root>\n );\n },\n);\n\nListboxRoot.displayName = LISTBOX_NAME;\n\n//\n// Option — composes `Row`. Adds the listbox-specific styling and\n// publishes `{ value, isSelected }` so `OptionIndicator` can render a\n// checkmark.\n//\n\ntype ListboxOptionProps = ThemedClassName<ComponentPropsWithRef<'li'>> & {\n value: string;\n};\n\nconst ListboxOption = forwardRef<HTMLLIElement, ListboxOptionProps>(\n (props: ListboxScopedProps<ListboxOptionProps>, forwardedRef) => {\n const { __listboxScope, children, classNames, value, ...rootProps } = props;\n\n // Selection state is read inside `ListboxOptionProviderHost` via\n // the public `useRowListSelection` hook and republished on the\n // listbox-option scope so `OptionIndicator` can render its\n // checkmark synchronously.\n return (\n <Row\n id={value}\n {...rootProps}\n classNames={mx('dx-focus-ring rounded-xs', commandItem, classNames)}\n ref={forwardedRef}\n >\n <ListboxOptionProviderHost value={value}>{children}</ListboxOptionProviderHost>\n </Row>\n );\n },\n);\n\nListboxOption.displayName = LISTBOX_OPTION_NAME;\n\n// Reads selection state from RowList's context (via `useRowListSelection`)\n// and publishes it on the listbox-option scope so `OptionIndicator` can\n// render its checkmark. Tiny adapter — keeps Listbox's public option API\n// intact while delegating the actual state to RowList.\nconst ListboxOptionProviderHost = ({\n value,\n children,\n}: ListboxScopedProps<{ value: string; children?: ReactNode }>) => {\n const isSelected = useRowListSelection(value);\n return (\n <ListboxOptionProvider scope={undefined} value={value} isSelected={isSelected}>\n {children}\n </ListboxOptionProvider>\n );\n};\n\n//\n// OptionLabel\n//\n\nconst ListboxOptionLabel = forwardRef<HTMLDivElement, ThemedClassName<ComponentPropsWithRef<'div'>>>(\n ({ children, classNames, ...rootProps }, forwardedRef) => {\n return (\n <span {...rootProps} className={mx('grow truncate', classNames)} ref={forwardedRef}>\n {children}\n </span>\n );\n },\n);\n\nListboxOptionLabel.displayName = LISTBOX_OPTION_LABEL_NAME;\n\n//\n// OptionIndicator — checkmark for the selected option.\n//\n// Reads `isSelected` from the option context. The visual indicator is\n// also covered by `dx-selected` on the row, so the checkmark is purely\n// confirmatory.\n//\n\ntype ListboxOptionIndicatorProps = Omit<IconProps, 'icon'> & Partial<Pick<IconProps, 'icon'>>;\n\nconst ListboxOptionIndicator = forwardRef<SVGSVGElement, ListboxOptionIndicatorProps>(\n (props: ListboxOptionScopedProps<ListboxOptionIndicatorProps>, forwardedRef) => {\n const { __listboxOptionScope, classNames, ...rootProps } = props;\n const { isSelected } = useListboxOptionContext(LISTBOX_OPTION_INDICATOR_NAME, __listboxOptionScope);\n\n return (\n <Icon\n icon='ph--check--regular'\n {...rootProps}\n classNames={mx(!isSelected && 'invisible', classNames)}\n ref={forwardedRef}\n />\n );\n },\n);\n\nListboxOptionIndicator.displayName = LISTBOX_OPTION_INDICATOR_NAME;\n\n//\n// Listbox\n//\n\nexport const Listbox = {\n Root: ListboxRoot,\n Option: ListboxOption,\n OptionLabel: ListboxOptionLabel,\n OptionIndicator: ListboxOptionIndicator,\n};\n\nexport { createListboxScope };\n\nexport type { ListboxRootProps, ListboxOptionProps, ListboxScopedProps };\n", "//\n// Copyright 2026 DXOS.org\n//\n\n// `RowList` — Radix-style compound listbox / single-select picker.\n//\n// Compound shape (matches Radix Select / Toolbar / Tabs):\n//\n// <RowList.Root selectedId={…} onSelectChange={…}>\n// <RowList.Viewport thin padding>\n// <RowList.Content aria-label='Tools'>\n// <Row id='a'>…</Row>\n// <Row id='b'>…</Row>\n// </RowList.Content>\n// </RowList.Viewport>\n// </RowList.Root>\n//\n// - `Root` — headless context provider (no DOM). Owns the\n// single-select `selectedId` model.\n// - `Viewport` — `ScrollArea.Root` + `ScrollArea.Viewport`. Always\n// scrolls. Forwards ScrollArea knobs (`thin`, `padding`,\n// `centered`).\n// - `Content` — the `<ul role=\"listbox\">` holding the items. Carries\n// the tabster arrow-nav group and the `aria-label`.\n// - `Row` — `<li role=\"option\">` with `aria-selected` on the\n// selected row, paired with `dx-selected` styling. See\n// `ui-theme/src/css/components/selected.md`.\n//\n// Single visual variant. Card-style rendering, denser/wider rows,\n// dividers, etc. are styling concerns layered on via `classNames` —\n// not separate components.\n//\n// Selection model:\n//\n// This layer ships single-select (`selectedId: string | undefined`).\n// Selection follows focus, so arrow keys + click both update it. This\n// matches the codebase's existing `useSelected(_, 'single')` convention\n// from `@dxos/react-ui-attention`.\n//\n// Multi-select (`selectedIds: ReadonlySet<string>` + per-row checkbox\n// affordance) is a future expansion point. When it lands it'll likely\n// plumb through `react-ui-attention`'s `SelectionManager` for\n// cross-context state sharing — but RowList itself can stay\n// provider-agnostic, with consumers wiring it as they need.\n//\n// Composability:\n//\n// `Viewport`, `Content`, and `Row` are all `composable()` from\n// `@dxos/ui-theme` — they merge `classNames` + parent-Slot\n// `className` via `composableProps()` and accept any standard HTML\n// attributes. None expose `asChild`: Viewport can't (two nested\n// elements, no coherent slot target), and Content / Row would need\n// to abandon the `@dxos/react-list` primitive's context to honor it\n// — not worth the complexity for this layer. If a consumer needs a\n// `<button>`-as-row or a `<div>`-as-listbox, drop down to\n// `@dxos/react-list` directly.\n//\n// Keyboard:\n//\n// `useArrowNavigationGroup({ axis: 'vertical', memorizeCurrent: true })`\n// from `@fluentui/react-tabster` is applied to `Content`. Tabster\n// auto-initializes (`useTabster` lazy-creates the runtime) so no\n// provider setup is required at the app/storybook level. ArrowUp /\n// ArrowDown move focus among options.\n//\n// When focus first lands on the `<ul>` itself (e.g. user tabs in),\n// `Content` redirects focus into the selected option (or the first\n// one) so arrow keys have an immediate starting point.\n//\n// What this layer deliberately does NOT do:\n//\n// - Virtualization or drag-and-drop. Reach for `@dxos/react-ui-mosaic`.\n// - Multi-select (see \"Selection model\" above; future expansion).\n\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, { type FocusEvent, type ForwardedRef, type MouseEvent, type PropsWithChildren, useCallback } from 'react';\n\nimport { List, ListItem } from '@dxos/react-list';\nimport { ScrollArea, type ScrollAreaRootProps } from '@dxos/react-ui';\nimport { composable, composableProps } from '@dxos/ui-theme';\n\nconst ROW_LIST_NAME = 'RowList';\nconst ROW_LIST_ROOT_NAME = 'RowList.Root';\nconst ROW_LIST_VIEWPORT_NAME = 'RowList.Viewport';\nconst ROW_LIST_CONTENT_NAME = 'RowList.Content';\nconst ROW_NAME = 'List.Row';\n\n//\n// Context — Radix-scoped so future composition (a tree of nested\n// RowLists, or a parent like a Combobox embedding RowList) can read\n// the right scope.\n//\n\ntype RowListContextValue = {\n /** The currently-selected option id. */\n selectedId?: string;\n /** Set the selected option (called from click, arrow nav, focus). */\n setSelected: (id: string) => void;\n};\n\nconst [createRowListContext, createRowListScope] = createContextScope(ROW_LIST_NAME, []);\nconst [RowListProvider, useRowListContext] = createRowListContext<RowListContextValue>(ROW_LIST_NAME);\n\n//\n// Root — headless context provider. Renders no DOM.\n//\n\ntype RootProps = PropsWithChildren<{\n /** Currently-selected option id (controlled). */\n selectedId?: string;\n /** Initial selected option for uncontrolled mode. */\n defaultSelectedId?: string;\n /**\n * Called when the user picks a different option (click, arrow keys,\n * focus). Receives the option's `id` prop.\n */\n onSelectChange?: (id: string) => void;\n}>;\n\nconst Root = ({ selectedId, defaultSelectedId, onSelectChange, children }: RootProps) => {\n // `useControllableState`'s `onChange` is typed `(state: string | undefined) => void`,\n // but our public `onSelectChange` is `(id: string) => void` (an `id` is always\n // a string when emitted). Wrap to satisfy the type without leaking\n // `undefined` to callers.\n const [resolved, setResolved] = useControllableState<string | undefined>({\n prop: selectedId,\n defaultProp: defaultSelectedId,\n onChange: (next) => {\n if (next !== undefined) {\n onSelectChange?.(next);\n }\n },\n });\n\n const setSelected = useCallback((id: string) => setResolved(id), [setResolved]);\n\n return (\n <RowListProvider scope={undefined} selectedId={resolved} setSelected={setSelected}>\n {children}\n </RowListProvider>\n );\n};\n\nRoot.displayName = ROW_LIST_ROOT_NAME;\n\n//\n// Viewport — ScrollArea wrapper. Always scrolls; forwards ScrollArea knobs.\n//\n\n// Subset of ScrollArea.Root props that make sense on a list viewport.\n// `orientation` is fixed to 'vertical' — for other knobs (autoHide,\n// snap, …) build your own ScrollArea wrapper and skip Viewport.\n//\n// `Viewport` is `composable()` rather than `slottable()` because there\n// is no coherent `asChild` semantic for a wrapper that always renders\n// two nested elements (`ScrollArea.Root` containing `ScrollArea.Viewport`).\ntype ViewportProps = Pick<ScrollAreaRootProps, 'thin' | 'padding' | 'centered'>;\n\nconst Viewport = composable<HTMLDivElement, ViewportProps>((props, forwardedRef) => {\n const { thin, padding, centered, children, ...rest } = props as PropsWithChildren<\n ViewportProps & Record<string, unknown>\n >;\n const composed = composableProps<HTMLDivElement>(rest, { classNames: 'dx-container' });\n return (\n <ScrollArea.Root\n orientation='vertical'\n thin={thin}\n padding={padding}\n centered={centered}\n {...composed}\n ref={forwardedRef}\n >\n <ScrollArea.Viewport>{children}</ScrollArea.Viewport>\n </ScrollArea.Root>\n );\n});\n\nViewport.displayName = ROW_LIST_VIEWPORT_NAME;\n\n//\n// Content — the listbox `<ul>` (tabster arrow group + aria-label).\n//\n\ntype ContentProps = {\n /**\n * Accessible label for the listbox. Strongly recommended; assistive\n * tech announces this when focus enters the list.\n */\n 'aria-label'?: string;\n};\n\n// Find the first non-disabled `role='option'` descendant in DOM order.\n// Used as the focus-on-entry target so we don't land on a disabled row.\nconst firstEnabledOption = (ul: HTMLElement | null): HTMLLIElement | null => {\n if (!ul) {\n return null;\n }\n return ul.querySelector<HTMLLIElement>('[role=\"option\"]:not([aria-disabled=\"true\"])');\n};\n\nconst Content = composable<HTMLUListElement, ContentProps>((props, forwardedRef) => {\n // Touch the context so Content fails loudly if used outside Root.\n useRowListContext(ROW_LIST_CONTENT_NAME, undefined);\n\n // Tabster arrow-key navigation. `useTabster` auto-initializes the\n // runtime on first call, so no app/storybook-level setup is required.\n // The data attributes returned here go onto the focusable container —\n // the `<ul>` rendered by the primitive `<List>`.\n const arrowGroup = useArrowNavigationGroup({ axis: 'vertical', memorizeCurrent: true });\n\n const { children, ...rest } = props as PropsWithChildren<ContentProps & Record<string, unknown>>;\n\n // When focus first enters the `<ul>` itself (e.g. user tabs in),\n // redirect into the selected option (or the first enabled one) so\n // arrow keys have an immediate starting point. Tabster doesn't do\n // this — it manages traversal once focus is already on a child.\n const handleFocus = useCallback((event: FocusEvent<HTMLUListElement>) => {\n if (event.target !== event.currentTarget) {\n return;\n }\n const ul = event.currentTarget;\n const selected = ul.querySelector<HTMLLIElement>(\n '[role=\"option\"][aria-selected=\"true\"]:not([aria-disabled=\"true\"])',\n );\n const target = selected ?? firstEnabledOption(ul);\n target?.focus();\n }, []);\n\n // Render via the primitive `<List>` so descendant `<ListItem>`s\n // satisfy their Radix context-scope check. We don't pass `selectable`\n // — we set `role='listbox'` and `aria-selected` ourselves in `Row`,\n // so the primitive's listbox-mode plumbing isn't needed.\n const composed = composableProps<HTMLUListElement>(rest, { classNames: 'flex flex-col' });\n return (\n <List\n variant='unordered'\n {...composed}\n {...arrowGroup}\n role='listbox'\n onFocus={handleFocus}\n ref={forwardedRef as unknown as ForwardedRef<HTMLOListElement>}\n >\n {children}\n </List>\n );\n});\n\nContent.displayName = ROW_LIST_CONTENT_NAME;\n\n//\n// Row — option item.\n//\n\ntype RowProps = PropsWithChildren<{\n /** Stable identifier; matched against the parent's `selectedId`. */\n id: string;\n /** Disable the row — focusable but doesn't update selection, dimmed. */\n disabled?: boolean;\n /** Optional click handler in addition to selection. */\n onClick?: (event: MouseEvent<HTMLLIElement>) => void;\n /** Optional focus handler in addition to selection-follows-focus. */\n onFocus?: (event: FocusEvent<HTMLLIElement>) => void;\n}>;\n\n// `dx-selected` pairs with `aria-selected=\"true\"` (set per-option below);\n// see `ui-theme/src/css/components/selected.md`.\nconst ROW_BASE = 'dx-hover dx-selected px-3 py-2 cursor-pointer outline-none border-b border-separator last:border-b-0';\n\nconst Row = composable<HTMLLIElement, RowProps>((props, forwardedRef) => {\n const { id, disabled, onClick, onFocus, children, ...rest } = props as RowProps & Record<string, unknown>;\n const { selectedId, setSelected } = useRowListContext(ROW_NAME, undefined);\n const isSelected = selectedId === id;\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLLIElement>) => {\n if (disabled) {\n return;\n }\n setSelected(id);\n onClick?.(event);\n },\n [disabled, id, setSelected, onClick],\n );\n\n // Selection-follows-focus: arrow nav (and any focus path) updates\n // `selectedId` so the model stays in sync with what the user is\n // looking at. Disabled rows are still focusable for screen-reader\n // announcement but don't update the selection model.\n const handleFocus = useCallback(\n (event: FocusEvent<HTMLLIElement>) => {\n if (!disabled && selectedId !== id) {\n setSelected(id);\n }\n onFocus?.(event);\n },\n [disabled, selectedId, id, setSelected, onFocus],\n );\n\n const composed = composableProps<HTMLLIElement>(rest, {\n classNames: [ROW_BASE, disabled && 'opacity-50 cursor-not-allowed'],\n });\n\n // Per WAI-ARIA APG listbox guidance, disabled options remain\n // keyboard-navigable for SR announcement; the selection model is not\n // updated for disabled rows (see `handleFocus` / `handleClick` above).\n return (\n <ListItem\n {...composed}\n role='option'\n tabIndex={0}\n aria-selected={isSelected}\n aria-disabled={disabled || undefined}\n onClick={handleClick}\n onFocus={handleFocus}\n ref={forwardedRef}\n >\n {children}\n </ListItem>\n );\n});\n\nRow.displayName = ROW_NAME;\n\n/**\n * Read selection state for a single id, from inside any descendant of\n * `<RowList.Root>`. Returns `true` when the row is currently selected.\n * Lets composing components (e.g. `Listbox.OptionIndicator`) react to\n * selection without re-rendering on unrelated changes.\n */\nconst useRowListSelection = (id: string): boolean => {\n const { selectedId } = useRowListContext('useRowListSelection', undefined);\n return selectedId === id;\n};\n\n//\n// Public namespace.\n//\n\nconst RowList = {\n Root,\n Viewport,\n Content,\n};\n\nexport { RowList, Row, createRowListScope, useRowListSelection };\nexport type {\n RootProps as RowListRootProps,\n ViewportProps as RowListViewportProps,\n ContentProps as RowListContentProps,\n RowProps,\n};\n", "//\n// Copyright 2024 DXOS.org\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport React, { useMemo } from 'react';\n\nimport { Treegrid, type TreegridRootProps } from '@dxos/react-ui';\n\nimport { type TreeModel, TreeProvider } from './TreeContext';\nimport { TreeItemById, type TreeItemByIdProps, type TreeItemProps } from './TreeItem';\n\nexport type TreeProps<T extends { id: string } = any> = {\n model: TreeModel<T>;\n rootId?: string;\n path?: string[];\n id: string;\n} & Partial<Pick<TreegridRootProps, 'gridTemplateColumns' | 'classNames'>> &\n Pick<\n TreeItemProps<T>,\n | 'draggable'\n | 'renderColumns'\n | 'blockInstruction'\n | 'canDrop'\n | 'canSelect'\n | 'onOpenChange'\n | 'onSelect'\n | 'onItemHover'\n | 'levelOffset'\n >;\n\nexport const Tree = <T extends { id: string } = any>({\n model,\n rootId,\n path,\n id,\n draggable = false,\n gridTemplateColumns = '[tree-row-start] 1fr min-content [tree-row-end]',\n classNames,\n levelOffset,\n renderColumns,\n blockInstruction,\n canDrop,\n canSelect,\n onOpenChange,\n onSelect,\n onItemHover,\n}: TreeProps<T>) => {\n const childIds = useAtomValue(model.childIds(rootId));\n const treePath = useMemo(() => (path ? [...path, id] : [id]), [id, path]);\n\n const childProps: Omit<TreeItemByIdProps, 'id' | 'last'> = {\n path: treePath,\n levelOffset,\n draggable,\n renderColumns,\n blockInstruction,\n canDrop,\n canSelect,\n onOpenChange,\n onSelect,\n onItemHover,\n };\n\n return (\n <Treegrid.Root gridTemplateColumns={gridTemplateColumns} classNames={classNames}>\n <TreeProvider value={model}>\n {childIds.map((childId, index) => (\n <TreeItemById key={childId} id={childId} last={index === childIds.length - 1} {...childProps} />\n ))}\n </TreeProvider>\n </Treegrid.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Atom } from '@effect-atom/atom-react';\nimport { createContext, useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\nimport { type Label } from '@dxos/react-ui';\n\nexport type TreeItemDataProps = {\n id: string;\n label: Label;\n parentOf?: string[];\n /** When `false`, the item cannot be dragged (overrides tree-level `draggable`). */\n draggable?: boolean;\n /** When `false`, the item does not participate as a drop target. */\n droppable?: boolean;\n className?: string;\n headingClassName?: string;\n icon?: string;\n iconHue?: string;\n disabled?: boolean;\n testId?: string;\n};\n\nexport interface TreeModel<T extends { id: string } = any> {\n /** Atom family: resolve item by ID (content). */\n item: (id: string) => Atom.Atom<T | undefined>;\n /** Atom family: open state keyed by path. */\n itemOpen: (path: string[]) => Atom.Atom<boolean>;\n /** Atom family: current (selected) state keyed by path. */\n itemCurrent: (path: string[]) => Atom.Atom<boolean>;\n /** Atom family: display props for an item at a given path (path includes item's own ID at end). */\n itemProps: (path: string[]) => Atom.Atom<TreeItemDataProps>;\n /** Atom family: outbound child IDs for a parent ID (topology). Undefined = root. */\n childIds: (parentId?: string) => Atom.Atom<string[]>;\n}\n\nconst TreeContext = createContext<TreeModel | null>(null);\n\nexport const TreeProvider = TreeContext.Provider;\n\nexport const useTree = () => useContext(TreeContext) ?? raise(new Error('TreeContext not found'));\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n type Instruction,\n type ItemMode,\n attachInstruction,\n extractInstruction,\n} from '@atlaskit/pragmatic-drag-and-drop-hitbox/tree-item';\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { draggable, dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport * as Schema from 'effect/Schema';\nimport React, {\n type FC,\n type KeyboardEvent,\n type MouseEvent,\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { invariant } from '@dxos/invariant';\nimport { TreeItem as NaturalTreeItem, Treegrid, TREEGRID_PARENT_OF_SEPARATOR } from '@dxos/react-ui';\nimport {\n ghostFocusWithin,\n ghostHover,\n hoverableControls,\n hoverableFocusedKeyboardControls,\n hoverableFocusedWithinControls,\n mx,\n} from '@dxos/ui-theme';\n\nimport { DEFAULT_INDENTATION, paddingIndentation } from './helpers';\nimport { useTree } from './TreeContext';\nimport { TreeItemHeading } from './TreeItemHeading';\nimport { TreeItemToggle } from './TreeItemToggle';\n\nconst hoverableDescriptionIcons =\n '[--icons-color:inherit] hover-hover:[--icons-color:var(--description-text)] hover-hover:hover:[--icons-color:inherit] focus-within:[--icons-color:inherit]';\n\ntype TreeItemDragState = 'idle' | 'dragging' | 'preview' | 'parent-of-instruction';\n\nexport const TreeDataSchema = Schema.Struct({\n id: Schema.String,\n path: Schema.Array(Schema.String),\n item: Schema.Any,\n});\n\nexport type TreeData = Schema.Schema.Type<typeof TreeDataSchema>;\nexport const isTreeData = (data: unknown): data is TreeData => Schema.is(TreeDataSchema)(data);\n\nexport type ColumnRenderer<T extends { id: string } = any> = FC<{\n item: T;\n path: string[];\n open: boolean;\n menuOpen: boolean;\n setMenuOpen: (open: boolean) => void;\n}>;\n\nexport type TreeItemProps<T extends { id: string } = any> = {\n item: T;\n path: string[];\n levelOffset?: number;\n last: boolean;\n draggable?: boolean;\n renderColumns?: ColumnRenderer<T>;\n blockInstruction?: (params: { instruction: Instruction; source: TreeData; target: TreeData }) => boolean;\n canDrop?: (params: { source: TreeData; target: TreeData }) => boolean;\n canSelect?: (params: { item: T; path: string[] }) => boolean;\n onOpenChange?: (params: { item: T; path: string[]; open: boolean }) => void;\n onSelect?: (params: { item: T; path: string[]; current: boolean; option: boolean }) => void;\n onItemHover?: (params: { item: T }) => void;\n};\n\nconst RawTreeItem = <T extends { id: string } = any>({\n item,\n path: pathProp,\n levelOffset = 2,\n last,\n draggable: draggableProp,\n renderColumns: Columns,\n blockInstruction,\n canDrop,\n canSelect,\n onOpenChange,\n onSelect,\n onItemHover,\n}: TreeItemProps<T>) => {\n const rowRef = useRef<HTMLDivElement | null>(null);\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n const openRef = useRef(false);\n const cancelExpandRef = useRef<NodeJS.Timeout | null>(null);\n const [_state, setState] = useState<TreeItemDragState>('idle');\n const [instruction, setInstruction] = useState<Instruction | null>(null);\n const [menuOpen, setMenuOpen] = useState(false);\n\n const {\n itemProps: itemPropsAtom,\n childIds: childIdsAtom,\n itemOpen: itemOpenAtom,\n itemCurrent: itemCurrentAtom,\n } = useTree();\n const path = useMemo(() => [...pathProp, item.id], [pathProp, item.id]);\n\n const {\n id,\n parentOf,\n draggable: itemDraggable,\n droppable: itemDroppable,\n label,\n className,\n headingClassName,\n icon,\n iconHue,\n disabled,\n testId,\n } = useAtomValue(itemPropsAtom(path));\n const childIds = useAtomValue(childIdsAtom(item.id));\n const open = useAtomValue(itemOpenAtom(path));\n const current = useAtomValue(itemCurrentAtom(path));\n\n const level = path.length - levelOffset;\n const isBranch = !!parentOf;\n const mode: ItemMode = last ? 'last-in-group' : open ? 'expanded' : 'standard';\n const canSelectItem = canSelect?.({ item, path }) ?? true;\n const data = { id, path, item } satisfies TreeData;\n const shouldSeedNativeDragData = typeof document !== 'undefined' && document.body.hasAttribute('data-platform');\n\n const cancelExpand = useCallback(() => {\n if (cancelExpandRef.current) {\n clearTimeout(cancelExpandRef.current);\n cancelExpandRef.current = null;\n }\n }, []);\n\n const isItemDraggable = draggableProp && itemDraggable !== false;\n const isItemDroppable = itemDroppable !== false;\n const nativeDragText = id;\n\n useEffect(() => {\n if (!draggableProp) {\n return;\n }\n\n invariant(buttonRef.current);\n\n const makeDraggable = () =>\n draggable({\n element: buttonRef.current!,\n getInitialData: () => data,\n getInitialDataForExternal: () => {\n if (!shouldSeedNativeDragData) {\n return {};\n }\n return { 'text/plain': nativeDragText };\n },\n onDragStart: () => {\n setState('dragging');\n if (open) {\n openRef.current = true;\n onOpenChange?.({ item, path, open: false });\n }\n },\n onDrop: () => {\n setState('idle');\n if (openRef.current) {\n onOpenChange?.({ item, path, open: true });\n }\n },\n });\n\n if (!isItemDroppable) {\n return isItemDraggable ? makeDraggable() : undefined;\n }\n\n const dropTarget = dropTargetForElements({\n element: buttonRef.current,\n getData: ({ input, element }) => {\n return attachInstruction(data, {\n input,\n element,\n indentPerLevel: DEFAULT_INDENTATION,\n currentLevel: level,\n mode,\n block: isBranch ? [] : ['make-child'],\n });\n },\n canDrop: ({ source }) => {\n const _canDrop = canDrop ?? (() => true);\n return source.element !== buttonRef.current && _canDrop({ source: source.data as TreeData, target: data });\n },\n getIsSticky: () => true,\n onDrag: ({ self, source }) => {\n const desired = extractInstruction(self.data);\n const block =\n desired && blockInstruction?.({ instruction: desired, source: source.data as TreeData, target: data });\n const instruction: Instruction | null =\n block && desired.type !== 'instruction-blocked' ? { type: 'instruction-blocked', desired } : desired;\n\n if (source.data.id !== id) {\n if (instruction?.type === 'make-child' && isBranch && !open && !cancelExpandRef.current) {\n cancelExpandRef.current = setTimeout(() => {\n onOpenChange?.({ item, path, open: true });\n }, 500);\n }\n\n if (instruction?.type !== 'make-child') {\n cancelExpand();\n }\n\n setInstruction(instruction);\n } else if (instruction?.type === 'reparent') {\n // TODO(wittjosiah): This is not occurring in the current implementation.\n setInstruction(instruction);\n } else {\n setInstruction(null);\n }\n },\n onDragLeave: () => {\n cancelExpand();\n setInstruction(null);\n },\n onDrop: () => {\n cancelExpand();\n setInstruction(null);\n },\n });\n\n if (!isItemDraggable) {\n return dropTarget;\n }\n\n // https://atlassian.design/components/pragmatic-drag-and-drop/core-package/adapters/element/about\n return combine(makeDraggable(), dropTarget);\n }, [draggableProp, isItemDraggable, isItemDroppable, item, id, mode, path, open, blockInstruction, canDrop]);\n\n // Cancel expand on unmount.\n useEffect(() => () => cancelExpand(), [cancelExpand]);\n\n const handleOpenToggle = useCallback(\n () => onOpenChange?.({ item, path, open: !open }),\n [onOpenChange, item, path, open],\n );\n\n const handleSelect = useCallback(\n (option = false) => {\n // If the item is a branch, toggle it if:\n // - also holding down the option key\n // - or the item is currently selected\n if (isBranch && (option || current)) {\n handleOpenToggle();\n } else if (canSelectItem) {\n canSelect?.({ item, path });\n rowRef.current?.focus();\n onSelect?.({ item, path, current: !current, option });\n }\n },\n [item, path, current, isBranch, canSelectItem, handleOpenToggle, onSelect],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowLeft':\n isBranch && handleOpenToggle();\n break;\n }\n },\n [isBranch, open, handleOpenToggle, handleSelect],\n );\n\n const handleItemHover = useCallback(() => {\n onItemHover?.({ item });\n }, [onItemHover, item]);\n\n const handleContextMenu = useCallback(\n (event: MouseEvent) => {\n event.preventDefault();\n setMenuOpen(true);\n },\n [setMenuOpen],\n );\n\n const childProps = {\n draggable: draggableProp,\n renderColumns: Columns,\n blockInstruction,\n canDrop,\n canSelect,\n onItemHover,\n onOpenChange,\n onSelect,\n };\n\n return (\n <>\n <Treegrid.Row\n ref={rowRef}\n key={id}\n id={id}\n aria-labelledby={`${id}__label`}\n parentOf={parentOf?.join(TREEGRID_PARENT_OF_SEPARATOR)}\n data-object-id={id}\n data-testid={testId}\n // NOTE(thure): This is intentionally an empty string to for descendents to select by in the CSS\n // without alerting the user (except for in the correct link element). See also:\n // https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current#description\n aria-current={current ? ('' as 'page') : undefined}\n classNames={mx(\n 'grid grid-cols-subgrid col-[tree-row] mt-0.5 is-current:bg-active-surface',\n hoverableControls,\n hoverableFocusedKeyboardControls,\n hoverableFocusedWithinControls,\n hoverableDescriptionIcons,\n ghostFocusWithin,\n ghostHover,\n className,\n )}\n onKeyDown={handleKeyDown}\n onMouseEnter={handleItemHover}\n onContextMenu={handleContextMenu}\n >\n <div\n role='none'\n className='indent relative grid grid-cols-subgrid col-[tree-row]'\n style={paddingIndentation(level)}\n >\n <Treegrid.Cell classNames='flex items-center'>\n <TreeItemToggle isBranch={isBranch} open={open} onClick={handleOpenToggle} />\n <TreeItemHeading\n disabled={disabled}\n current={current}\n label={label}\n className={headingClassName}\n icon={icon}\n iconHue={iconHue}\n onSelect={handleSelect}\n ref={buttonRef}\n />\n </Treegrid.Cell>\n {Columns && <Columns item={item} path={path} open={open} menuOpen={menuOpen} setMenuOpen={setMenuOpen} />}\n {instruction && <NaturalTreeItem.DropIndicator instruction={instruction} gap={2} />}\n </div>\n </Treegrid.Row>\n {open &&\n childIds.map((childId, index) => (\n <TreeItemById key={childId} id={childId} path={path} last={index === childIds.length - 1} {...childProps} />\n ))}\n </>\n );\n};\n\nexport const TreeItem = memo(RawTreeItem) as FC<TreeItemProps>;\n\n/** Resolves a child ID to an item via the `item` atom and renders a TreeItem. */\nexport type TreeItemByIdProps = Omit<TreeItemProps, 'item'> & { id: string };\n\nconst RawTreeItemById = <T extends { id: string } = any>({ id, ...props }: TreeItemByIdProps) => {\n const { item: itemAtom } = useTree();\n const item = useAtomValue(itemAtom(id)) as T | undefined;\n if (!item) {\n return null;\n }\n return <TreeItem item={item} {...props} />;\n};\n\nexport const TreeItemById = memo(RawTreeItemById) as FC<TreeItemByIdProps>;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const DEFAULT_INDENTATION = 8;\n\nexport const paddingIndentation = (level: number, indentation = DEFAULT_INDENTATION) => ({\n paddingInlineStart: `${(level - 1) * indentation}px`,\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type KeyboardEvent, type MouseEvent, forwardRef, memo, useCallback } from 'react';\n\nimport { Button, Icon, type Label, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { TextTooltip } from '@dxos/react-ui-text-tooltip';\nimport { getStyles } from '@dxos/ui-theme';\n\n// TODO(wittjosiah): Consider whether there should be a separate disabled prop which was visually distinct\n// rather than just making the item unselectable.\nexport type TreeItemHeadingProps = {\n label: Label;\n className?: string;\n icon?: string;\n iconHue?: string;\n disabled?: boolean;\n current?: boolean;\n onSelect?: (option: boolean) => void;\n};\n\nexport const TreeItemHeading = memo(\n forwardRef<HTMLButtonElement, TreeItemHeadingProps>(\n ({ label, className, icon, iconHue, disabled, current, onSelect }, forwardedRef) => {\n const { t } = useTranslation();\n const styles = iconHue ? getStyles(iconHue) : undefined;\n\n const handleSelect = useCallback(\n (event: MouseEvent) => {\n onSelect?.(event.altKey);\n },\n [onSelect],\n );\n\n const handleButtonKeydown = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n onSelect?.(event.altKey);\n }\n },\n [onSelect],\n );\n\n return (\n <TextTooltip\n text={toLocalizedString(label, t)}\n side='bottom'\n truncateQuery='span[data-tooltip]'\n onlyWhenTruncating\n asChild\n ref={forwardedRef}\n >\n <Button\n data-testid='treeItem.heading'\n variant='ghost'\n classNames={[\n 'grow gap-2 ps-0.5 hover:bg-transparent dark:hover:bg-transparent',\n 'disabled:cursor-default disabled:opacity-100',\n className,\n ]}\n disabled={disabled}\n onClick={handleSelect}\n onKeyDown={handleButtonKeydown}\n {...(current && { 'aria-current': 'location' })}\n >\n {icon && <Icon icon={icon ?? 'ph--placeholder--regular'} classNames={['my-1', styles?.surfaceText]} />}\n <span className='flex-1 w-0 truncate text-start font-normal' data-tooltip>\n {toLocalizedString(label, t)}\n </span>\n </Button>\n </TextTooltip>\n );\n },\n ),\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { forwardRef, memo } from 'react';\n\nimport { IconButton, type IconButtonProps } from '@dxos/react-ui';\n\nexport type TreeItemToggleProps = Omit<IconButtonProps, 'icon' | 'size' | 'label'> & {\n open?: boolean;\n isBranch?: boolean;\n hidden?: boolean;\n};\n\nexport const TreeItemToggle = memo(\n forwardRef<HTMLButtonElement, TreeItemToggleProps>(\n ({ classNames, open, isBranch, hidden, ...props }, forwardedRef) => {\n return (\n <IconButton\n ref={forwardedRef}\n data-testid='treeItem.toggle'\n aria-expanded={open}\n variant='ghost'\n density='fine'\n classNames={[\n 'h-full w-6 px-0',\n '[&_svg]:transition-transform [&_svg]:duration-200',\n open ? '[&_svg]:rotate-90' : '[&_svg]:rotate-0',\n hidden ? 'hidden' : !isBranch && 'invisible',\n classNames,\n ]}\n size={3}\n icon='ph--caret-right--bold'\n iconOnly\n noTooltip\n label={open ? 'Click to close' : 'Click to open'}\n tabIndex={-1}\n {...props}\n />\n );\n },\n ),\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nconst SEPARATOR = '+';\n\nexport const Path = {\n create: (...args: string[]) => args.join(SEPARATOR),\n\n parts: (path: string) => path.split(SEPARATOR),\n length: (path: string) => path.split(SEPARATOR).length,\n first: (path: string) => path.split(SEPARATOR)[0] ?? path,\n last: (path: string) => path.split(SEPARATOR).at(-1) ?? path,\n parent: (path: string) => path.split(SEPARATOR).slice(0, -1).join(SEPARATOR),\n\n hasRoot: (path: string, id: string) => Path.first(path) === id,\n hasChild: (path: string, compare: string) => Path.parent(compare) === path,\n hasDescendent: (path: string, compare: string) => compare !== path && compare.startsWith(path),\n siblings: (path: string, compare: string) => Path.parent(path) === Path.parent(compare),\n onPath: (path: string, id: string) => Path.parts(path).includes(id),\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["AccordionPrimitive", "createContext", "React", "Icon", "mx", "AccordionPrimitive", "createContext", "React", "mx", "ACCORDION_NAME", "AccordionProvider", "useAccordionContext", "defaultGetId", "item", "id", "AccordionRoot", "classNames", "items", "getId", "children", "value", "defaultValue", "onValueChange", "Root", "type", "className", "ACCORDION_ITEM_NAME", "AccordionItemProvider", "useDxAccordionItemContext", "createContext", "AccordionItem", "children", "classNames", "item", "getId", "useAccordionContext", "React", "Item", "value", "className", "mx", "AccordionItemHeader", "props", "Header", "Trigger", "Icon", "icon", "size", "AccordionItemBody", "Content", "div", "role", "Accordion", "Root", "AccordionRoot", "Item", "AccordionItem", "ItemHeader", "AccordionItemHeader", "ItemBody", "AccordionItemBody", "createContext", "useControllableState", "React", "forwardRef", "useCallback", "Button", "Icon", "Popover", "ScrollArea", "useId", "composable", "composableProps", "mx", "Slot", "React", "forwardRef", "useCallback", "useEffect", "useMemo", "useRef", "useState", "Input", "useThemeContext", "mx", "createContext", "PickerItemContextProvider", "usePickerItemContext", "PickerInputContextProvider", "usePickerInputContext", "PickerRoot", "children", "selectedValue", "setSelectedValue", "useState", "undefined", "itemsRef", "useRef", "Map", "itemVersion", "setItemVersion", "useEffect", "current", "get", "isValid", "disabled", "size", "entries", "Array", "from", "filter", "data", "length", "sort", "a", "b", "position", "element", "compareDocumentPosition", "Node", "DOCUMENT_POSITION_FOLLOWING", "DOCUMENT_POSITION_PRECEDING", "firstValue", "registerItem", "useCallback", "value", "onSelect", "set", "v", "unregisterItem", "delete", "getItemValues", "map", "triggerSelect", "item", "itemContextValue", "useMemo", "onSelectedValueChange", "inputContextValue", "React", "PickerInputContextProvider", "PickerItemContextProvider", "displayName", "PickerInput", "forwardRef", "onValueChange", "onChange", "onKeyDown", "autoFocus", "props", "forwardedRef", "hasIosKeyboard", "useThemeContext", "usePickerInputContext", "handleChange", "event", "target", "handleKeyDown", "defaultPrevented", "values", "key", "currentIndex", "indexOf", "preventDefault", "nextIndex", "Math", "min", "nextValue", "prevIndex", "max", "prevValue", "lastValue", "Input", "Root", "TextInput", "ref", "PickerItem", "classNames", "asChild", "usePickerItemContext", "internalRef", "isSelected", "scrollIntoView", "block", "behavior", "handleClick", "handleMouseDown", "Comp", "Slot", "node", "role", "aria-selected", "aria-disabled", "data-selected", "data-disabled", "data-value", "tabIndex", "className", "mx", "onMouseDown", "onClick", "Picker", "Item", "COMBOBOX_NAME", "COMBOBOX_CONTENT_NAME", "COMBOBOX_ITEM_NAME", "COMBOBOX_TRIGGER_NAME", "ComboboxProvider", "useComboboxContext", "createContext", "ComboboxRoot", "children", "modal", "modalId", "modalIdProp", "open", "openProp", "defaultOpen", "onOpenChange", "propsOnOpenChange", "value", "valueProp", "defaultValue", "onValueChange", "propsOnValueChange", "placeholder", "useId", "useControllableState", "prop", "defaultProp", "onChange", "React", "Popover", "Root", "isCombobox", "ComboboxContent", "composable", "props", "forwardedRef", "Content", "composableProps", "id", "ref", "Viewport", "classNames", "Picker", "displayName", "ComboboxTrigger", "forwardRef", "onClick", "handleClick", "useCallback", "event", "Trigger", "asChild", "Button", "role", "aria-expanded", "aria-controls", "aria-haspopup", "span", "className", "mx", "Icon", "icon", "size", "ComboboxVirtualTrigger", "VirtualTrigger", "ComboboxInput", "Input", "ComboboxList", "ScrollArea", "centered", "padding", "thin", "ComboboxItem", "onSelect", "label", "iconClassNames", "checked", "suffix", "disabled", "closeOnSelect", "handleSelect", "undefined", "Item", "ComboboxArrow", "Arrow", "ComboboxEmpty", "div", "ComboboxPortal", "Portal", "Combobox", "List", "Empty", "attachClosestEdge", "extractClosestEdge", "combine", "draggable", "dropTargetForElements", "setCustomNativeDragPreview", "createContext", "Slot", "React", "useEffect", "useRef", "useState", "createPortal", "invariant", "IconButton", "ListItem", "NaturalListItem", "useTranslation", "mx", "osTranslations", "extractClosestEdge", "getReorderDestinationIndex", "monitorForElements", "createContext", "React", "useCallback", "useEffect", "useState", "LIST_NAME", "ListProvider", "useListContext", "createContext", "defaultGetId", "item", "id", "ListRoot", "children", "items", "isItem", "getId", "onMove", "props", "isEqual", "useCallback", "a", "b", "idA", "idB", "undefined", "state", "setState", "useState", "idle", "useEffect", "monitorForElements", "canMonitor", "source", "data", "onDrop", "location", "target", "current", "dropTargets", "sourceData", "targetData", "sourceIdx", "findIndex", "targetIdx", "closestEdgeOfTarget", "extractClosestEdge", "destinationIndex", "getReorderDestinationIndex", "startIndex", "indexOfTarget", "axis", "React", "idle", "stateStyles", "ListItemProvider", "isItem", "dragPreview", "setRootState", "useListContext", "LIST_ITEM_NAME", "rootRef", "Slot", "dragHandleRef", "useRef", "setState", "useState", "useEffect", "element", "invariant", "dragHandle", "canDrag", "getInitialData", "item", "onGenerateDragPreview", "rect", "source", "setCustomNativeDragPreview", "nativeSetDragImage", "x", "height", "render", "container", "undefined", "onDragStart", "type", "onDrop", "getData", "input", "allowedEdges", "getIsSticky", "onDragEnter", "closestEdge", "extractClosestEdge", "onDragLeave", "onDrag", "self", "current", "React", "aria-selected", "className", "ref", "children", "state", "edge", "isDisabled", "disabled", "IconButton", "iconOnly", "variant", "classNames", "autoHide", "t", "useTranslation", "osTranslations", "props", "icon", "label", "ListItemWrapper", "ListItemTitle", "mx", "List", "Root", "ListRoot", "Item", "ListItem", "ItemDragPreview", "ListItemDragPreview", "ItemWrapper", "ListItemWrapper", "ItemDragHandle", "ListItemDragHandle", "ItemIconButton", "ListItemIconButton", "ItemDeleteButton", "ListItemDeleteButton", "ItemTitle", "ListItemTitle", "createContextScope", "React", "forwardRef", "Icon", "mx", "useArrowNavigationGroup", "createContextScope", "useControllableState", "React", "useCallback", "List", "ListItem", "ScrollArea", "composable", "composableProps", "ROW_LIST_NAME", "ROW_LIST_ROOT_NAME", "ROW_LIST_VIEWPORT_NAME", "ROW_LIST_CONTENT_NAME", "ROW_NAME", "createRowListContext", "createRowListScope", "RowListProvider", "useRowListContext", "Root", "selectedId", "defaultSelectedId", "onSelectChange", "children", "resolved", "setResolved", "prop", "defaultProp", "onChange", "next", "undefined", "setSelected", "id", "scope", "displayName", "Viewport", "props", "forwardedRef", "thin", "padding", "centered", "rest", "composed", "classNames", "orientation", "ref", "firstEnabledOption", "ul", "querySelector", "Content", "arrowGroup", "axis", "memorizeCurrent", "handleFocus", "event", "target", "currentTarget", "selected", "focus", "variant", "role", "onFocus", "ROW_BASE", "Row", "disabled", "onClick", "isSelected", "handleClick", "tabIndex", "aria-selected", "aria-disabled", "useRowListSelection", "RowList", "commandItem", "LISTBOX_NAME", "LISTBOX_OPTION_NAME", "LISTBOX_OPTION_LABEL_NAME", "LISTBOX_OPTION_INDICATOR_NAME", "createListboxContext", "createListboxScope", "createContextScope", "createRowListScope", "createListboxOptionContext", "createListboxOptionScope", "ListboxOptionProvider", "useListboxOptionContext", "ListboxRoot", "forwardRef", "props", "forwardedRef", "__listboxScope", "_scope", "children", "classNames", "value", "defaultValue", "onValueChange", "autoFocus", "_autoFocus", "rootProps", "React", "RowList", "Root", "selectedId", "defaultSelectedId", "onSelectChange", "Content", "mx", "ref", "displayName", "ListboxOption", "Row", "id", "ListboxOptionProviderHost", "isSelected", "useRowListSelection", "scope", "undefined", "ListboxOptionLabel", "span", "className", "ListboxOptionIndicator", "__listboxOptionScope", "Icon", "icon", "Listbox", "Option", "OptionLabel", "OptionIndicator", "useAtomValue", "React", "useMemo", "Treegrid", "createContext", "useContext", "raise", "TreeContext", "TreeProvider", "Provider", "useTree", "Error", "attachInstruction", "extractInstruction", "combine", "draggable", "dropTargetForElements", "useAtomValue", "Schema", "React", "memo", "useCallback", "useEffect", "useMemo", "useRef", "useState", "invariant", "TreeItem", "NaturalTreeItem", "Treegrid", "TREEGRID_PARENT_OF_SEPARATOR", "ghostFocusWithin", "ghostHover", "hoverableControls", "hoverableFocusedKeyboardControls", "hoverableFocusedWithinControls", "mx", "DEFAULT_INDENTATION", "paddingIndentation", "level", "indentation", "paddingInlineStart", "React", "forwardRef", "memo", "useCallback", "Button", "Icon", "toLocalizedString", "useTranslation", "TextTooltip", "getStyles", "TreeItemHeading", "label", "className", "icon", "iconHue", "disabled", "current", "onSelect", "forwardedRef", "t", "styles", "undefined", "handleSelect", "event", "altKey", "handleButtonKeydown", "key", "preventDefault", "stopPropagation", "text", "side", "truncateQuery", "onlyWhenTruncating", "asChild", "ref", "data-testid", "variant", "classNames", "onClick", "onKeyDown", "surfaceText", "span", "data-tooltip", "React", "forwardRef", "memo", "IconButton", "TreeItemToggle", "classNames", "open", "isBranch", "hidden", "props", "forwardedRef", "ref", "data-testid", "aria-expanded", "variant", "density", "size", "icon", "iconOnly", "noTooltip", "label", "tabIndex", "__dxlog_file", "hoverableDescriptionIcons", "id", "path", "Schema", "item", "isTreeData", "rowRef", "buttonRef", "useRef", "openRef", "cancelExpandRef", "setState", "useState", "setInstruction", "menuOpen", "setMenuOpen", "itemPropsAtom", "childIds", "childIdsAtom", "useMemo", "pathProp", "open", "useAtomValue", "itemOpenAtom", "current", "itemCurrentAtom", "level", "levelOffset", "isBranch", "parentOf", "mode", "last", "canSelectItem", "nativeDragText", "useEffect", "draggableProp", "invariant", "element", "getInitialData", "draggable", "data", "getInitialDataForExternal", "shouldSeedNativeDragData", "onDragStart", "onOpenChange", "onDrop", "isItemDroppable", "dropTarget", "dropTargetForElements", "getData", "input", "attachInstruction", "indentPerLevel", "currentLevel", "block", "canDrop", "source", "target", "getIsSticky", "onDrag", "desired", "instruction", "onDragLeave", "blockInstruction", "useCallback", "canSelect", "onSelect", "option", "handleOpenToggle", "handleSelect", "onItemHover", "renderColumns", "Columns", "aria-labelledby", "data-object-id", "data-testid", "testId", "onKeyDown", "handleKeyDown", "onMouseEnter", "handleItemHover", "onContextMenu", "role", "React", "style", "classNames", "TreeItemToggle", "onClick", "disabled", "label", "className", "icon", "iconHue", "ref", "gap", "key", "childId", "useTree", "itemAtom", "Tree", "model", "rootId", "path", "id", "draggable", "gridTemplateColumns", "classNames", "levelOffset", "renderColumns", "blockInstruction", "canDrop", "canSelect", "onOpenChange", "onSelect", "onItemHover", "childIds", "useAtomValue", "treePath", "useMemo", "childProps", "React", "Treegrid", "Root", "TreeProvider", "value", "map", "childId", "index", "TreeItemById", "key", "last", "length", "SEPARATOR", "Path", "create", "args", "join", "parts", "path", "split", "length", "first", "last", "at", "parent", "slice", "hasRoot", "id", "hasChild", "compare", "hasDescendent", "startsWith", "siblings", "onPath", "includes"]
|
|
7
7
|
}
|