@dxos/react-ui-list 0.8.4-main.d05673bc65 → 0.8.4-main.e00bdcdb52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/lib/browser/index.mjs +42 -48
  2. package/dist/lib/browser/index.mjs.map +3 -3
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node-esm/index.mjs +42 -48
  5. package/dist/lib/node-esm/index.mjs.map +3 -3
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/types/src/components/Accordion/Accordion.d.ts +1 -1
  8. package/dist/types/src/components/Accordion/Accordion.d.ts.map +1 -1
  9. package/dist/types/src/components/Accordion/Accordion.stories.d.ts.map +1 -1
  10. package/dist/types/src/components/Accordion/AccordionItem.d.ts.map +1 -1
  11. package/dist/types/src/components/Accordion/AccordionRoot.d.ts +1 -1
  12. package/dist/types/src/components/Accordion/AccordionRoot.d.ts.map +1 -1
  13. package/dist/types/src/components/List/List.d.ts +5 -3
  14. package/dist/types/src/components/List/List.d.ts.map +1 -1
  15. package/dist/types/src/components/List/List.stories.d.ts +2 -2
  16. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  17. package/dist/types/src/components/List/ListItem.d.ts +7 -7
  18. package/dist/types/src/components/List/ListItem.d.ts.map +1 -1
  19. package/dist/types/src/components/List/ListRoot.d.ts.map +1 -1
  20. package/dist/types/src/components/List/testing.d.ts.map +1 -1
  21. package/dist/types/src/components/Tree/Tree.d.ts.map +1 -1
  22. package/dist/types/src/components/Tree/Tree.stories.d.ts.map +1 -1
  23. package/dist/types/src/components/Tree/TreeItem.d.ts.map +1 -1
  24. package/dist/types/src/components/Tree/TreeItemHeading.d.ts.map +1 -1
  25. package/dist/types/src/components/Tree/helpers.d.ts.map +1 -1
  26. package/dist/types/src/components/Tree/testing.d.ts.map +1 -1
  27. package/dist/types/src/util/path.d.ts.map +1 -1
  28. package/dist/types/tsconfig.tsbuildinfo +1 -1
  29. package/package.json +17 -20
  30. package/src/components/Accordion/Accordion.stories.tsx +3 -3
  31. package/src/components/Accordion/AccordionItem.tsx +0 -1
  32. package/src/components/List/List.stories.tsx +3 -3
  33. package/src/components/List/List.tsx +2 -7
  34. package/src/components/List/ListItem.tsx +32 -30
  35. package/src/components/List/ListRoot.tsx +1 -1
  36. package/src/components/List/testing.ts +4 -4
  37. package/src/components/Tree/Tree.stories.tsx +4 -5
  38. package/src/components/Tree/TreeItem.tsx +12 -4
  39. package/src/components/Tree/TreeItemHeading.tsx +1 -4
  40. package/src/components/Tree/TreeItemToggle.tsx +3 -3
  41. package/src/components/Tree/testing.ts +5 -5
@@ -69,10 +69,10 @@ var Accordion = {
69
69
  };
70
70
 
71
71
  // src/components/List/ListItem.tsx
72
+ import { attachClosestEdge, extractClosestEdge as extractClosestEdge2 } from "@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge";
72
73
  import { combine } from "@atlaskit/pragmatic-drag-and-drop/combine";
73
74
  import { draggable, dropTargetForElements } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
74
75
  import { setCustomNativeDragPreview } from "@atlaskit/pragmatic-drag-and-drop/element/set-custom-native-drag-preview";
75
- import { attachClosestEdge, extractClosestEdge as extractClosestEdge2 } from "@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge";
76
76
  import { createContext as createContext4 } from "@radix-ui/react-context";
77
77
  import { Slot } from "@radix-ui/react-slot";
78
78
  import React4, { useEffect as useEffect2, useRef, useState as useState2 } from "react";
@@ -82,9 +82,9 @@ import { IconButton, ListItem as NaturalListItem, useTranslation } from "@dxos/r
82
82
  import { mx as mx3, osTranslations } from "@dxos/ui-theme";
83
83
 
84
84
  // src/components/List/ListRoot.tsx
85
- import { monitorForElements } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
86
85
  import { extractClosestEdge } from "@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge";
87
86
  import { getReorderDestinationIndex } from "@atlaskit/pragmatic-drag-and-drop-hitbox/util/get-reorder-destination-index";
87
+ import { monitorForElements } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
88
88
  import { createContext as createContext3 } from "@radix-ui/react-context";
89
89
  import React3, { useCallback, useEffect, useState } from "react";
90
90
  var LIST_NAME = "List";
@@ -156,7 +156,7 @@ var idle = {
156
156
  type: "idle"
157
157
  };
158
158
  var stateStyles = {
159
- "w-dragging": "opacity-50"
159
+ "is-dragging": "opacity-50"
160
160
  };
161
161
  var defaultContext = {};
162
162
  var LIST_ITEM_NAME = "ListItem";
@@ -164,20 +164,12 @@ var [ListItemProvider, useListItemContext] = createContext4(LIST_ITEM_NAME, defa
164
164
  var ListItem = ({ children, classNames, item, asChild, selected, ...props }) => {
165
165
  const Comp = asChild ? Slot : "div";
166
166
  const { isItem, readonly, dragPreview, setState: setRootState } = useListContext(LIST_ITEM_NAME);
167
- const ref = useRef(null);
167
+ const rootRef = useRef(null);
168
168
  const dragHandleRef = useRef(null);
169
169
  const [state, setState] = useState2(idle);
170
170
  useEffect2(() => {
171
- const element = ref.current;
172
- invariant(element, void 0, {
173
- F: __dxlog_file,
174
- L: 109,
175
- S: void 0,
176
- A: [
177
- "element",
178
- ""
179
- ]
180
- });
171
+ const element = rootRef.current;
172
+ invariant(element, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 37, S: void 0, A: ["element", ""] });
181
173
  return combine(
182
174
  //
183
175
  // https://atlassian.design/components/pragmatic-drag-and-drop/core-package/adapters/element/about#draggable
@@ -216,10 +208,10 @@ var ListItem = ({ children, classNames, item, asChild, selected, ...props }) =>
216
208
  } : void 0,
217
209
  onDragStart: () => {
218
210
  setState({
219
- type: "w-dragging"
211
+ type: "is-dragging"
220
212
  });
221
213
  setRootState({
222
- type: "w-dragging",
214
+ type: "is-dragging",
223
215
  item
224
216
  });
225
217
  },
@@ -250,7 +242,7 @@ var ListItem = ({ children, classNames, item, asChild, selected, ...props }) =>
250
242
  onDragEnter: ({ self }) => {
251
243
  const closestEdge = extractClosestEdge2(self.data);
252
244
  setState({
253
- type: "w-dragging-over",
245
+ type: "is-dragging-over",
254
246
  closestEdge
255
247
  });
256
248
  },
@@ -260,11 +252,11 @@ var ListItem = ({ children, classNames, item, asChild, selected, ...props }) =>
260
252
  onDrag: ({ self }) => {
261
253
  const closestEdge = extractClosestEdge2(self.data);
262
254
  setState((current) => {
263
- if (current.type === "w-dragging-over" && current.closestEdge === closestEdge) {
255
+ if (current.type === "is-dragging-over" && current.closestEdge === closestEdge) {
264
256
  return current;
265
257
  }
266
258
  return {
267
- type: "w-dragging-over",
259
+ type: "is-dragging-over",
268
260
  closestEdge
269
261
  };
270
262
  });
@@ -281,12 +273,12 @@ var ListItem = ({ children, classNames, item, asChild, selected, ...props }) =>
281
273
  item,
282
274
  dragHandleRef
283
275
  }, /* @__PURE__ */ React4.createElement(Comp, {
284
- ref,
276
+ ...props,
285
277
  role: "listitem",
286
278
  "aria-selected": selected,
287
- className: mx3("relative dx-selected", classNames, stateStyles[state.type]),
288
- ...props
289
- }, children), state.type === "w-dragging-over" && state.closestEdge && /* @__PURE__ */ React4.createElement(NaturalListItem.DropIndicator, {
279
+ className: mx3("relative p-1 dx-selected dx-hover", classNames, stateStyles[state.type]),
280
+ ref: rootRef
281
+ }, children), state.type === "is-dragging-over" && state.closestEdge && /* @__PURE__ */ React4.createElement(NaturalListItem.DropIndicator, {
290
282
  edge: state.closestEdge
291
283
  }));
292
284
  };
@@ -309,12 +301,12 @@ var ListItemDeleteButton = ({ autoHide = true, classNames, disabled, icon = "ph-
309
301
  const isDisabled = state.type !== "idle" || disabled;
310
302
  const { t } = useTranslation(osTranslations);
311
303
  return /* @__PURE__ */ React4.createElement(IconButton, {
312
- iconOnly: true,
313
- variant: "ghost",
314
304
  ...props,
315
- icon,
305
+ variant: "ghost",
316
306
  disabled: isDisabled,
317
- label: label ?? t("delete label"),
307
+ icon,
308
+ iconOnly: true,
309
+ label: label ?? t("delete.label"),
318
310
  classNames: [
319
311
  classNames,
320
312
  autoHide && disabled && "hidden"
@@ -325,12 +317,12 @@ var ListItemDragHandle = ({ disabled }) => {
325
317
  const { dragHandleRef } = useListItemContext("DRAG_HANDLE");
326
318
  const { t } = useTranslation(osTranslations);
327
319
  return /* @__PURE__ */ React4.createElement(IconButton, {
328
- iconOnly: true,
329
320
  variant: "ghost",
330
- label: t("drag handle label"),
331
- ref: dragHandleRef,
321
+ disabled,
332
322
  icon: "ph--dots-six-vertical--regular",
333
- disabled
323
+ iconOnly: true,
324
+ label: t("drag-handle.label"),
325
+ ref: dragHandleRef
334
326
  });
335
327
  };
336
328
  var ListItemDragPreview = ({ children }) => {
@@ -340,9 +332,11 @@ var ListItemDragPreview = ({ children }) => {
340
332
  }), state.container) : null;
341
333
  };
342
334
  var ListItemWrapper = ({ classNames, children }) => /* @__PURE__ */ React4.createElement("div", {
335
+ role: "none",
343
336
  className: mx3("flex w-full gap-2", classNames)
344
337
  }, children);
345
338
  var ListItemTitle = ({ classNames, children, ...props }) => /* @__PURE__ */ React4.createElement("div", {
339
+ role: "none",
346
340
  className: mx3("flex grow items-center truncate", classNames),
347
341
  ...props
348
342
  }, children);
@@ -372,14 +366,14 @@ var TreeProvider = TreeContext.Provider;
372
366
  var useTree = () => useContext(TreeContext) ?? raise(new Error("TreeContext not found"));
373
367
 
374
368
  // src/components/Tree/TreeItem.tsx
369
+ import { attachInstruction, extractInstruction } from "@atlaskit/pragmatic-drag-and-drop-hitbox/tree-item";
375
370
  import { combine as combine2 } from "@atlaskit/pragmatic-drag-and-drop/combine";
376
371
  import { draggable as draggable2, dropTargetForElements as dropTargetForElements2 } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
377
- import { attachInstruction, extractInstruction } from "@atlaskit/pragmatic-drag-and-drop-hitbox/tree-item";
378
372
  import { useAtomValue } from "@effect-atom/atom-react";
379
373
  import * as Schema from "effect/Schema";
380
374
  import React7, { memo as memo3, useCallback as useCallback3, useEffect as useEffect3, useMemo, useRef as useRef2, useState as useState3 } from "react";
381
375
  import { invariant as invariant2 } from "@dxos/invariant";
382
- import { TreeItem as NaturalTreeItem, Treegrid } from "@dxos/react-ui";
376
+ import { TreeItem as NaturalTreeItem, Treegrid, TREEGRID_PARENT_OF_SEPARATOR } from "@dxos/react-ui";
383
377
  import { ghostFocusWithin, ghostHover, hoverableControls, hoverableFocusedKeyboardControls, hoverableFocusedWithinControls, mx as mx4 } from "@dxos/ui-theme";
384
378
 
385
379
  // src/components/Tree/helpers.ts
@@ -420,7 +414,6 @@ var TreeItemHeading = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef(({ label,
420
414
  }, /* @__PURE__ */ React5.createElement(Button, {
421
415
  "data-testid": "treeItem.heading",
422
416
  variant: "ghost",
423
- density: "fine",
424
417
  classNames: [
425
418
  "grow gap-2 ps-0.5 hover:bg-transparent dark:hover:bg-transparent",
426
419
  "disabled:cursor-default disabled:opacity-100",
@@ -434,7 +427,6 @@ var TreeItemHeading = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef(({ label,
434
427
  }
435
428
  }, icon && /* @__PURE__ */ React5.createElement(Icon2, {
436
429
  icon: icon ?? "ph--placeholder--regular",
437
- size: 5,
438
430
  classNames: [
439
431
  "my-1",
440
432
  styles?.surfaceText
@@ -448,7 +440,7 @@ var TreeItemHeading = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef(({ label,
448
440
  // src/components/Tree/TreeItemToggle.tsx
449
441
  import React6, { forwardRef as forwardRef2, memo as memo2 } from "react";
450
442
  import { IconButton as IconButton2 } from "@dxos/react-ui";
451
- var TreeItemToggle = /* @__PURE__ */ memo2(/* @__PURE__ */ forwardRef2(({ open, isBranch, hidden, classNames, ...props }, forwardedRef) => {
443
+ var TreeItemToggle = /* @__PURE__ */ memo2(/* @__PURE__ */ forwardRef2(({ classNames, open, isBranch, hidden, ...props }, forwardedRef) => {
452
444
  return /* @__PURE__ */ React6.createElement(IconButton2, {
453
445
  ref: forwardedRef,
454
446
  "data-testid": "treeItem.toggle",
@@ -457,8 +449,8 @@ var TreeItemToggle = /* @__PURE__ */ memo2(/* @__PURE__ */ forwardRef2(({ open,
457
449
  density: "fine",
458
450
  classNames: [
459
451
  "h-full w-6 px-0",
460
- "[&_svg]:transition-[transform] [&_svg]:duration-200",
461
- open && "[&_svg]:rotate-90",
452
+ "[&_svg]:transition-transform [&_svg]:duration-200",
453
+ open ? "[&_svg]:rotate-90" : "[&_svg]:rotate-0",
462
454
  hidden ? "hidden" : !isBranch && "invisible",
463
455
  classNames
464
456
  ],
@@ -513,6 +505,7 @@ var RawTreeItem = ({ item, path: pathProp, levelOffset = 2, last, draggable: dra
513
505
  path,
514
506
  item
515
507
  };
508
+ const shouldSeedNativeDragData = typeof document !== "undefined" && document.body.hasAttribute("data-platform");
516
509
  const cancelExpand = useCallback3(() => {
517
510
  if (cancelExpandRef.current) {
518
511
  clearTimeout(cancelExpandRef.current);
@@ -521,22 +514,23 @@ var RawTreeItem = ({ item, path: pathProp, levelOffset = 2, last, draggable: dra
521
514
  }, []);
522
515
  const isItemDraggable = draggableProp && itemDraggable !== false;
523
516
  const isItemDroppable = itemDroppable !== false;
517
+ const nativeDragText = id;
524
518
  useEffect3(() => {
525
519
  if (!draggableProp) {
526
520
  return;
527
521
  }
528
- invariant2(buttonRef.current, void 0, {
529
- F: __dxlog_file2,
530
- L: 148,
531
- S: void 0,
532
- A: [
533
- "buttonRef.current",
534
- ""
535
- ]
536
- });
522
+ invariant2(buttonRef.current, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 70, S: void 0, A: ["buttonRef.current", ""] });
537
523
  const makeDraggable = () => draggable2({
538
524
  element: buttonRef.current,
539
525
  getInitialData: () => data,
526
+ getInitialDataForExternal: () => {
527
+ if (!shouldSeedNativeDragData) {
528
+ return {};
529
+ }
530
+ return {
531
+ "text/plain": nativeDragText
532
+ };
533
+ },
540
534
  onDragStart: () => {
541
535
  setState("dragging");
542
536
  if (open) {
@@ -720,7 +714,7 @@ var RawTreeItem = ({ item, path: pathProp, levelOffset = 2, last, draggable: dra
720
714
  key: id,
721
715
  id,
722
716
  "aria-labelledby": `${id}__label`,
723
- parentOf: parentOf?.join(Treegrid.PARENT_OF_SEPARATOR),
717
+ parentOf: parentOf?.join(TREEGRID_PARENT_OF_SEPARATOR),
724
718
  "data-object-id": id,
725
719
  "data-testid": testId,
726
720
  // NOTE(thure): This is intentionally an empty string to for descendents to select by in the CSS
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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/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 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 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 { Slot } from '@radix-ui/react-slot';\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, 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: 'w-dragging';\n }\n | {\n type: 'w-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 'w-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 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 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: 'w-dragging' });\n setRootState({ type: 'w-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: 'w-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 === 'w-dragging-over' && current.closestEdge === closestEdge) {\n return current;\n }\n return { type: 'w-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 ref={ref}\n role='listitem'\n aria-selected={selected}\n className={mx('relative dx-selected', classNames, stateStyles[state.type])}\n {...props}\n >\n {children}\n </Comp>\n {state.type === 'w-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 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 ListItemDragHandle = ({ disabled }: Pick<IconButtonProps, 'disabled'>) => {\n const { dragHandleRef } = useListItemContext('DRAG_HANDLE');\n const { t } = useTranslation(osTranslations);\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 w-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: 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// 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 ItemIconButton: ListItemIconButton,\n ItemDeleteButton: ListItemDeleteButton,\n ItemTitle: ListItemTitle,\n};\n\ntype ListItem = ListItemRecord;\n\nexport type { ListRootProps, ListItemProps, ListItem, ListItemRecord };\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 { 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 { 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 } 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\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\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 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 density='fine'\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 && (\n <Icon icon={icon ?? 'ph--placeholder--regular'} size={5} classNames={['my-1', styles?.surfaceText]} />\n )}\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 ({ open, isBranch, hidden, classNames, ...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',\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", "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", "Slot", "React", "useEffect", "useRef", "useState", "createPortal", "invariant", "IconButton", "ListItem", "NaturalListItem", "useTranslation", "mx", "osTranslations", "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", "asChild", "selected", "props", "Comp", "Slot", "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", "role", "aria-selected", "className", "mx", "NaturalListItem", "DropIndicator", "edge", "ListItemIconButton", "autoHide", "iconOnly", "variant", "disabled", "isDisabled", "IconButton", "ListItemDeleteButton", "icon", "label", "t", "useTranslation", "osTranslations", "ListItemDragHandle", "ListItemDragPreview", "createPortal", "ListItemWrapper", "div", "ListItemTitle", "List", "Root", "ListRoot", "Item", "ListItem", "ItemDragPreview", "ListItemDragPreview", "ItemWrapper", "ListItemWrapper", "ItemDragHandle", "ListItemDragHandle", "ItemIconButton", "ListItemIconButton", "ItemDeleteButton", "ListItemDeleteButton", "ItemTitle", "ListItemTitle", "useAtomValue", "React", "useMemo", "Treegrid", "createContext", "useContext", "raise", "TreeContext", "createContext", "TreeProvider", "Provider", "useTree", "useContext", "raise", "Error", "combine", "draggable", "dropTargetForElements", "attachInstruction", "extractInstruction", "useAtomValue", "Schema", "React", "memo", "useCallback", "useEffect", "useMemo", "useRef", "useState", "invariant", "TreeItem", "NaturalTreeItem", "Treegrid", "ghostFocusWithin", "ghostHover", "hoverableControls", "hoverableFocusedKeyboardControls", "hoverableFocusedWithinControls", "mx", "DEFAULT_INDENTATION", "paddingIndentation", "level", "indentation", "paddingInlineStart", "React", "forwardRef", "memo", "useCallback", "Button", "Icon", "toLocalizedString", "useTranslation", "TextTooltip", "getStyles", "TreeItemHeading", "memo", "forwardRef", "label", "className", "icon", "iconHue", "disabled", "current", "onSelect", "forwardedRef", "t", "useTranslation", "styles", "getStyles", "undefined", "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", "surfaceText", "span", "data-tooltip", "React", "forwardRef", "memo", "IconButton", "TreeItemToggle", "memo", "forwardRef", "open", "isBranch", "hidden", "classNames", "props", "forwardedRef", "React", "IconButton", "ref", "data-testid", "aria-expanded", "variant", "density", "size", "icon", "iconOnly", "noTooltip", "label", "tabIndex", "hoverableDescriptionIcons", "TreeDataSchema", "Struct", "id", "String", "path", "Array", "item", "Any", "isTreeData", "data", "is", "RawTreeItem", "pathProp", "levelOffset", "last", "draggable", "draggableProp", "renderColumns", "Columns", "blockInstruction", "canDrop", "canSelect", "onOpenChange", "onSelect", "onItemHover", "rowRef", "useRef", "buttonRef", "openRef", "cancelExpandRef", "_state", "setState", "useState", "instruction", "setInstruction", "menuOpen", "setMenuOpen", "itemProps", "itemPropsAtom", "childIds", "childIdsAtom", "itemOpen", "itemOpenAtom", "itemCurrent", "itemCurrentAtom", "useTree", "useMemo", "parentOf", "itemDraggable", "droppable", "itemDroppable", "label", "className", "headingClassName", "icon", "iconHue", "disabled", "testId", "useAtomValue", "open", "current", "level", "length", "isBranch", "mode", "canSelectItem", "cancelExpand", "useCallback", "clearTimeout", "isItemDraggable", "isItemDroppable", "useEffect", "invariant", "makeDraggable", "element", "getInitialData", "onDragStart", "onDrop", "undefined", "dropTarget", "dropTargetForElements", "getData", "input", "attachInstruction", "indentPerLevel", "DEFAULT_INDENTATION", "currentLevel", "block", "source", "_canDrop", "target", "getIsSticky", "onDrag", "self", "desired", "extractInstruction", "type", "setTimeout", "onDragLeave", "combine", "handleOpenToggle", "handleSelect", "option", "focus", "handleKeyDown", "event", "key", "handleItemHover", "handleContextMenu", "preventDefault", "childProps", "React", "Treegrid", "Row", "ref", "aria-labelledby", "join", "PARENT_OF_SEPARATOR", "data-object-id", "data-testid", "aria-current", "classNames", "mx", "hoverableControls", "hoverableFocusedKeyboardControls", "hoverableFocusedWithinControls", "ghostFocusWithin", "ghostHover", "onKeyDown", "onMouseEnter", "onContextMenu", "div", "role", "style", "paddingIndentation", "Cell", "TreeItemToggle", "onClick", "TreeItemHeading", "NaturalTreeItem", "DropIndicator", "gap", "map", "childId", "index", "TreeItemById", "TreeItem", "memo", "RawTreeItemById", "props", "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"]
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 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.\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 Use react-ui-mosaic.\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 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", "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", "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", "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
  }