@tutti-os/workspace-file-reference 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ui/index.js CHANGED
@@ -158,7 +158,7 @@ function WorkspaceFileReferencePickerTreeEntry({
158
158
  const childContent = shouldBuildChildContent ? childState?.loading ? /* @__PURE__ */ jsxs(
159
159
  "div",
160
160
  {
161
- className: "flex items-center gap-2 px-2 py-2 text-xs text-[var(--text-secondary)]",
161
+ className: "flex items-center gap-2 px-2 py-2 text-[11px] text-[var(--text-secondary)]",
162
162
  style: {
163
163
  paddingLeft: `${childDepth * workspaceFileReferenceTreeIndent + 12}px`
164
164
  },
@@ -185,7 +185,7 @@ function WorkspaceFileReferencePickerTreeEntry({
185
185
  )) }) : childState?.loaded ? /* @__PURE__ */ jsx(
186
186
  "div",
187
187
  {
188
- className: "px-2 py-2 text-xs text-[var(--text-secondary)]",
188
+ className: "px-2 py-2 text-[11px] text-[var(--text-secondary)]",
189
189
  style: {
190
190
  paddingLeft: `${childDepth * workspaceFileReferenceTreeIndent + 12}px`
191
191
  },
@@ -240,7 +240,7 @@ function WorkspaceFileReferencePickerTreeEntry({
240
240
  },
241
241
  children: [
242
242
  isFolder ? /* @__PURE__ */ jsx(FolderFilledIcon, { className: "size-4 shrink-0 text-[var(--rich-text-folder)]" }) : /* @__PURE__ */ jsx(FileIcon, { className: "size-4 shrink-0 text-[var(--text-tertiary)]" }),
243
- /* @__PURE__ */ jsx("span", { className: "truncate text-sm text-[var(--text-primary)]", children: resolveWorkspaceFileReferenceLabel(entry) })
243
+ /* @__PURE__ */ jsx("span", { className: "truncate text-[13px] text-[var(--text-primary)]", children: resolveWorkspaceFileReferenceLabel(entry) })
244
244
  ]
245
245
  }
246
246
  ),
@@ -317,8 +317,8 @@ function WorkspaceFileReferencePickerSearchEntry({
317
317
  children: [
318
318
  /* @__PURE__ */ jsx("span", { className: "grid size-9 shrink-0 place-items-center rounded-lg bg-[var(--transparency-block)] text-[var(--text-tertiary)]", children: isFolder ? /* @__PURE__ */ jsx(FolderFilledIcon, { className: "size-4 text-[var(--rich-text-folder)]" }) : /* @__PURE__ */ jsx(FileIcon, { className: "size-4 text-[var(--text-tertiary)]" }) }),
319
319
  /* @__PURE__ */ jsxs("span", { className: "min-w-0", children: [
320
- /* @__PURE__ */ jsx("span", { className: "block truncate text-sm font-medium text-[var(--text-primary)]", children: resolveWorkspaceFileReferenceLabel(entry) }),
321
- /* @__PURE__ */ jsx("span", { className: "block truncate text-xs text-[var(--text-secondary)]", children: entry.path })
320
+ /* @__PURE__ */ jsx("span", { className: "block truncate text-[13px] font-medium text-[var(--text-primary)]", children: resolveWorkspaceFileReferenceLabel(entry) }),
321
+ /* @__PURE__ */ jsx("span", { className: "block truncate text-[11px] text-[var(--text-secondary)]", children: entry.path })
322
322
  ] })
323
323
  ]
324
324
  }
@@ -347,7 +347,7 @@ function WorkspaceFileReferencePickerSearchEntry({
347
347
  function WorkspaceFileReferencePickerFeedback({
348
348
  children
349
349
  }) {
350
- return /* @__PURE__ */ jsx("div", { className: "grid min-h-0 flex-1 place-items-center px-4 text-center text-sm text-[var(--text-secondary)]", children });
350
+ return /* @__PURE__ */ jsx("div", { className: "grid min-h-0 flex-1 place-items-center px-4 text-center text-[13px] text-[var(--text-secondary)]", children });
351
351
  }
352
352
  function resolveWorkspaceFileReferenceLabel(ref) {
353
353
  return ref.displayName || ref.path.split("/").filter(Boolean).at(-1) || ref.path;
@@ -373,7 +373,7 @@ function WorkspaceFileReferencePickerPreviewPane({
373
373
  ),
374
374
  /* @__PURE__ */ jsx2("div", { className: "space-y-2 px-2 lg:space-y-3", children: /* @__PURE__ */ jsxs2("div", { className: "space-y-1.5", children: [
375
375
  /* @__PURE__ */ jsx2("p", { className: "truncate text-[15px] font-semibold text-[var(--text-primary)]", children: resolveWorkspaceFileReferenceLabel(focusedEntry) }),
376
- /* @__PURE__ */ jsx2("p", { className: "line-clamp-3 text-sm text-[var(--text-secondary)] [overflow-wrap:anywhere]", children: focusedEntry.path })
376
+ /* @__PURE__ */ jsx2("p", { className: "line-clamp-3 text-[13px] text-[var(--text-secondary)] [overflow-wrap:anywhere]", children: focusedEntry.path })
377
377
  ] }) })
378
378
  ] }) : /* @__PURE__ */ jsx2(WorkspaceFileReferencePickerFeedback2, { children: mode === "search" ? copy.t("referencePicker.emptySearch") : copy.t("referencePicker.emptyDirectory") }) }) });
379
379
  }
@@ -392,14 +392,14 @@ function WorkspaceFileReferencePreviewSurface({
392
392
  imageFrameClassName: "p-3",
393
393
  loadingIndicator: /* @__PURE__ */ jsx2("span", { className: "mx-auto grid size-11 place-items-center rounded-[6px] bg-[var(--transparency-block)]", children: /* @__PURE__ */ jsx2(LoadingIcon, { className: "size-4 animate-spin" }) }),
394
394
  loadingMessage: copy.t("referencePicker.previewLoading"),
395
- messageClassName: "mx-auto max-w-[24ch] text-sm leading-5 text-[var(--text-secondary)] [overflow-wrap:anywhere]",
395
+ messageClassName: "mx-auto max-w-[24ch] text-[13px] leading-5 text-[var(--text-secondary)] [overflow-wrap:anywhere]",
396
396
  renderIcon: (entry) => entry.kind === "folder" ? /* @__PURE__ */ jsx2(FolderFilledIcon2, { className: "mx-auto size-9 text-[var(--rich-text-folder)]" }) : /* @__PURE__ */ jsx2(FileIcon2, { className: "mx-auto size-9 text-[var(--text-tertiary)]" }),
397
397
  state: resolveWorkspaceFileReferenceSurfaceState(
398
398
  copy,
399
399
  focusedEntry,
400
400
  previewState
401
401
  ),
402
- textClassName: "h-full overflow-auto p-3 text-left text-xs leading-5 whitespace-pre-wrap break-words text-[var(--text-primary)]",
402
+ textClassName: "h-full overflow-auto p-3 text-left text-[11px] leading-5 whitespace-pre-wrap break-words text-[var(--text-primary)]",
403
403
  textFrameClassName: "items-stretch justify-stretch"
404
404
  }
405
405
  );
@@ -484,7 +484,7 @@ function WorkspaceFileReferencePickerFooter({
484
484
  }) {
485
485
  return /* @__PURE__ */ jsxs2("div", { className: "nodrag flex flex-col gap-3 border-t border-[var(--line-1)] px-4 py-4 [-webkit-app-region:no-drag] sm:px-6 lg:flex-row lg:items-center lg:justify-between", children: [
486
486
  /* @__PURE__ */ jsxs2("div", { className: "flex min-w-0 flex-wrap items-center gap-2 lg:flex-1", children: [
487
- /* @__PURE__ */ jsx2("span", { className: "text-sm text-[var(--text-secondary)]", children: copy.t("referencePicker.selectedCount", {
487
+ /* @__PURE__ */ jsx2("span", { className: "text-[13px] text-[var(--text-secondary)]", children: copy.t("referencePicker.selectedCount", {
488
488
  count: selectedRefs.length
489
489
  }) }),
490
490
  selectedRefs.slice(0, 2).map((ref) => /* @__PURE__ */ jsx2(
@@ -535,7 +535,7 @@ function WorkspaceFileReferencePickerFooter({
535
535
  function WorkspaceFileReferencePickerFeedback2({
536
536
  children
537
537
  }) {
538
- return /* @__PURE__ */ jsx2("div", { className: "grid min-h-0 flex-1 place-items-center px-4 text-center text-sm text-[var(--text-secondary)]", children });
538
+ return /* @__PURE__ */ jsx2("div", { className: "grid min-h-0 flex-1 place-items-center px-4 text-center text-[13px] text-[var(--text-secondary)]", children });
539
539
  }
540
540
 
541
541
  // src/ui/internal/reference/WorkspaceFileReferencePicker.tsx
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/internal/reference/WorkspaceFileReferencePicker.tsx","../../src/ui/internal/reference/WorkspaceFileReferencePickerSections.tsx","../../src/ui/internal/reference/WorkspaceFileReferencePickerTree.tsx"],"sourcesContent":["import { useId } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n CloseIcon,\n cn\n} from \"@tutti-os/ui-system\";\nimport type {\n WorkspaceFileReferenceAdapter,\n WorkspaceFileReference,\n WorkspaceFileReferenceCopy\n} from \"../../../contracts/index.ts\";\nimport { useWorkspaceFileReferencePickerView } from \"../../../react/index.ts\";\nimport {\n WorkspaceFileReferencePickerFooter,\n WorkspaceFileReferencePickerPreviewPane\n} from \"./WorkspaceFileReferencePickerSections.tsx\";\nimport { WorkspaceFileReferencePickerBrowserPane } from \"./WorkspaceFileReferencePickerTree.tsx\";\n\nexport interface WorkspaceFileReferencePickerProps {\n copy: WorkspaceFileReferenceCopy;\n fileAdapter?: WorkspaceFileReferenceAdapter;\n initialPath?: string | null;\n onClose: () => void;\n onConfirm: (refs: WorkspaceFileReference[]) => void;\n open: boolean;\n workspaceId: string;\n}\n\nconst workspaceFileReferencePickerBackdropMotionClassName =\n \"motion-safe:animate-in motion-safe:fade-in-0 motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:animate-none\";\n\nconst workspaceFileReferencePickerPanelMotionClassName =\n \"motion-safe:animate-in motion-safe:fade-in-0 motion-safe:zoom-in-[0.96] motion-safe:duration-[250ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:animate-none\";\n\nexport function WorkspaceFileReferencePicker({\n copy,\n fileAdapter,\n initialPath,\n onClose,\n onConfirm,\n open,\n workspaceId\n}: WorkspaceFileReferencePickerProps) {\n const titleId = useId();\n const {\n browseRootEntries,\n directoryStateByPath,\n expandedFolderPaths,\n focusedEntry,\n focusedPath,\n isLoading,\n mode,\n previewState,\n searchQuery,\n selectedRefs,\n visibleEntries,\n setFocusedPath,\n setSearchQuery,\n toggleFolder,\n toggleRef\n } = useWorkspaceFileReferencePickerView({\n fileAdapter,\n initialPath,\n onClose,\n onConfirm,\n open,\n workspaceId\n });\n\n if (!open) {\n return null;\n }\n\n const dialog = (\n <div\n className={cn(\n \"nodrag fixed inset-0 grid place-items-center bg-[var(--backdrop)] px-3 py-4 backdrop-blur-md [-webkit-app-region:no-drag] sm:px-6 sm:py-8\",\n workspaceFileReferencePickerBackdropMotionClassName\n )}\n style={{ zIndex: \"var(--z-panel)\" }}\n onClick={onClose}\n >\n <Card\n aria-labelledby={titleId}\n aria-modal=\"true\"\n className={cn(\n \"nodrag flex h-[min(88vh,44rem)] w-full max-w-5xl origin-center flex-col gap-0 overflow-hidden border-[var(--line-1)] bg-[var(--background-fronted)] py-0 text-[var(--text-primary)] shadow-panel [-webkit-app-region:no-drag] sm:h-[min(82vh,44rem)]\",\n workspaceFileReferencePickerPanelMotionClassName\n )}\n role=\"dialog\"\n onClick={(event) => event.stopPropagation()}\n >\n <CardHeader\n className=\"border-b px-4 py-4 sm:px-6 sm:py-5\"\n style={{ borderBottomColor: \"var(--line-1)\" }}\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0\">\n <CardTitle id={titleId}>\n {copy.t(\"referencePicker.title\")}\n </CardTitle>\n </div>\n <Button\n aria-label={copy.t(\"actions.cancel\")}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={onClose}\n >\n <CloseIcon size={16} />\n </Button>\n </div>\n </CardHeader>\n <CardContent className=\"grid min-h-0 flex-1 grid-rows-[minmax(0,1fr)_auto] gap-0 overflow-hidden p-0 lg:grid-cols-[minmax(0,1.15fr)_minmax(20rem,0.85fr)] lg:grid-rows-1\">\n <WorkspaceFileReferencePickerBrowserPane\n browseRootEntries={browseRootEntries}\n copy={copy}\n directoryStateByPath={directoryStateByPath}\n expandedFolderPaths={expandedFolderPaths}\n focusedPath={focusedPath}\n isLoading={isLoading}\n mode={mode}\n searchQuery={searchQuery}\n selectedRefs={selectedRefs}\n setSearchQuery={setSearchQuery}\n visibleEntries={visibleEntries}\n onFocusPath={setFocusedPath}\n onToggleFolder={toggleFolder}\n onToggleRef={toggleRef}\n />\n <WorkspaceFileReferencePickerPreviewPane\n copy={copy}\n focusedEntry={focusedEntry}\n mode={mode}\n previewState={previewState}\n />\n </CardContent>\n <WorkspaceFileReferencePickerFooter\n copy={copy}\n onClose={onClose}\n onConfirm={() => onConfirm(selectedRefs)}\n selectedRefs={selectedRefs}\n />\n </Card>\n </div>\n );\n\n if (typeof document === \"undefined\") {\n return dialog;\n }\n return createPortal(dialog, document.body);\n}\n","import type { JSX, ReactNode } from \"react\";\nimport {\n Badge,\n Button,\n FileIcon,\n FolderFilledIcon,\n LoadingIcon\n} from \"@tutti-os/ui-system\";\nimport { formatWorkspacePreviewByteLimit } from \"@tutti-os/workspace-file-preview\";\nimport { WorkspaceFilePreviewSurface as SharedWorkspaceFilePreviewSurface } from \"@tutti-os/workspace-file-preview/react\";\nimport type {\n WorkspaceFileReference,\n WorkspaceFileReferenceCopy\n} from \"../../../contracts/index.ts\";\nimport type { WorkspaceFileReferencePreviewState } from \"../../../react/internal/reference/useWorkspaceFileReferencePickerView.ts\";\nimport { resolveWorkspaceFileReferenceLabel } from \"./WorkspaceFileReferencePickerTree.tsx\";\n\nconst workspaceFileReferencePickerSelectedBadgeClassName =\n \"max-w-[14rem] rounded-[4px] border-transparent bg-[var(--transparency-block)] text-[var(--text-primary)]\";\n\nexport function WorkspaceFileReferencePickerPreviewPane({\n copy,\n focusedEntry,\n mode,\n previewState\n}: {\n copy: WorkspaceFileReferenceCopy;\n focusedEntry: WorkspaceFileReference | null;\n mode: \"browse\" | \"search\";\n previewState: WorkspaceFileReferencePreviewState;\n}): JSX.Element {\n return (\n <aside className=\"flex shrink-0 flex-col border-t border-[var(--line-1)] bg-[var(--background-fronted)] lg:min-h-0 lg:flex-1 lg:border-t-0\">\n <div className=\"flex min-h-0 flex-1 flex-col p-2\">\n {focusedEntry ? (\n <div className=\"flex min-h-0 flex-col gap-4 lg:flex-1 lg:gap-5\">\n <WorkspaceFileReferencePreviewSurface\n copy={copy}\n focusedEntry={focusedEntry}\n previewState={previewState}\n />\n <div className=\"space-y-2 px-2 lg:space-y-3\">\n <div className=\"space-y-1.5\">\n <p className=\"truncate text-[15px] font-semibold text-[var(--text-primary)]\">\n {resolveWorkspaceFileReferenceLabel(focusedEntry)}\n </p>\n <p className=\"line-clamp-3 text-sm text-[var(--text-secondary)] [overflow-wrap:anywhere]\">\n {focusedEntry.path}\n </p>\n </div>\n </div>\n </div>\n ) : (\n <WorkspaceFileReferencePickerFeedback>\n {mode === \"search\"\n ? copy.t(\"referencePicker.emptySearch\")\n : copy.t(\"referencePicker.emptyDirectory\")}\n </WorkspaceFileReferencePickerFeedback>\n )}\n </div>\n </aside>\n );\n}\n\nfunction WorkspaceFileReferencePreviewSurface({\n copy,\n focusedEntry,\n previewState\n}: {\n copy: WorkspaceFileReferenceCopy;\n focusedEntry: WorkspaceFileReference;\n previewState: WorkspaceFileReferencePreviewState;\n}): JSX.Element {\n return (\n <SharedWorkspaceFilePreviewSurface\n directoryMessage={copy.t(\"referencePicker.previewFolder\")}\n emptyMessage={copy.t(\"referencePicker.previewUnavailable\")}\n frameClassName=\"flex aspect-[3/2] w-full flex-col items-center justify-center overflow-hidden rounded-[8px] border border-[var(--line-2,var(--border-2))] bg-[var(--transparency-block)] p-0 text-center\"\n imageAlt={resolveWorkspaceFileReferenceLabel}\n imageFrameClassName=\"p-3\"\n loadingIndicator={\n <span className=\"mx-auto grid size-11 place-items-center rounded-[6px] bg-[var(--transparency-block)]\">\n <LoadingIcon className=\"size-4 animate-spin\" />\n </span>\n }\n loadingMessage={copy.t(\"referencePicker.previewLoading\")}\n messageClassName=\"mx-auto max-w-[24ch] text-sm leading-5 text-[var(--text-secondary)] [overflow-wrap:anywhere]\"\n renderIcon={(entry) =>\n entry.kind === \"folder\" ? (\n <FolderFilledIcon className=\"mx-auto size-9 text-[var(--rich-text-folder)]\" />\n ) : (\n <FileIcon className=\"mx-auto size-9 text-[var(--text-tertiary)]\" />\n )\n }\n state={resolveWorkspaceFileReferenceSurfaceState(\n copy,\n focusedEntry,\n previewState\n )}\n textClassName=\"h-full overflow-auto p-3 text-left text-xs leading-5 whitespace-pre-wrap break-words text-[var(--text-primary)]\"\n textFrameClassName=\"items-stretch justify-stretch\"\n />\n );\n}\n\nfunction resolveWorkspaceFileReferenceSurfaceState(\n copy: WorkspaceFileReferenceCopy,\n focusedEntry: WorkspaceFileReference,\n previewState: WorkspaceFileReferencePreviewState\n) {\n if (focusedEntry.kind === \"folder\") {\n return {\n entry: focusedEntry,\n status: \"directory\" as const\n };\n }\n\n if (\n !(\"reference\" in previewState) ||\n previewState.reference.path !== focusedEntry.path\n ) {\n return {\n entry: focusedEntry,\n message: focusedEntry.path,\n status: \"unsupported\" as const\n };\n }\n\n switch (previewState.status) {\n case \"loading\":\n case \"image\":\n case \"text\":\n return {\n ...previewState,\n entry: focusedEntry\n };\n case \"readonly\":\n return {\n entry: focusedEntry,\n message: resolveWorkspaceFileReferencePreviewReadonlyMessage(\n copy,\n previewState\n ),\n status: \"readonly\" as const\n };\n case \"error\":\n return {\n entry: focusedEntry,\n message: copy.t(\"referencePicker.previewError\"),\n status: \"error\" as const\n };\n case \"unsupported\":\n return {\n entry: focusedEntry,\n message: copy.t(\"referencePicker.previewUnsupported\"),\n status: \"unsupported\" as const\n };\n case \"unavailable\":\n return {\n entry: focusedEntry,\n message: copy.t(\"referencePicker.previewUnavailable\"),\n status: \"unsupported\" as const\n };\n case \"directory\":\n return {\n entry: focusedEntry,\n status: \"directory\" as const\n };\n }\n}\n\nfunction resolveWorkspaceFileReferencePreviewReadonlyMessage(\n copy: WorkspaceFileReferenceCopy,\n previewState: Extract<\n WorkspaceFileReferencePreviewState,\n { status: \"readonly\" }\n >\n): string {\n switch (previewState.reason) {\n case \"binary\":\n return copy.t(\"referencePicker.previewBinary\");\n case \"decode_failed\":\n return copy.t(\"referencePicker.previewDecodeFailed\");\n case \"file_too_large\":\n return copy.t(\"referencePicker.previewFileTooLarge\", {\n maxSize: formatWorkspacePreviewByteLimit(previewState.maxSizeBytes ?? 0)\n });\n case \"text_too_large\":\n return copy.t(\"referencePicker.previewTextTooLarge\", {\n maxSize: formatWorkspacePreviewByteLimit(previewState.maxSizeBytes ?? 0)\n });\n }\n}\n\nexport function WorkspaceFileReferencePickerFooter({\n copy,\n onClose,\n onConfirm,\n selectedRefs\n}: {\n copy: WorkspaceFileReferenceCopy;\n onClose: () => void;\n onConfirm: () => void;\n selectedRefs: readonly WorkspaceFileReference[];\n}): JSX.Element {\n return (\n <div className=\"nodrag flex flex-col gap-3 border-t border-[var(--line-1)] px-4 py-4 [-webkit-app-region:no-drag] sm:px-6 lg:flex-row lg:items-center lg:justify-between\">\n <div className=\"flex min-w-0 flex-wrap items-center gap-2 lg:flex-1\">\n <span className=\"text-sm text-[var(--text-secondary)]\">\n {copy.t(\"referencePicker.selectedCount\", {\n count: selectedRefs.length\n })}\n </span>\n {selectedRefs.slice(0, 2).map((ref) => (\n <Badge\n className={workspaceFileReferencePickerSelectedBadgeClassName}\n key={ref.path}\n variant=\"secondary\"\n >\n <span className=\"truncate\">\n {resolveWorkspaceFileReferenceLabel(ref)}\n </span>\n </Badge>\n ))}\n {selectedRefs.length > 2 ? (\n <Badge\n className={workspaceFileReferencePickerSelectedBadgeClassName}\n variant=\"secondary\"\n >\n +{selectedRefs.length - 2}\n </Badge>\n ) : null}\n </div>\n <div className=\"flex w-full items-center justify-end gap-2 lg:w-auto lg:shrink-0\">\n <Button\n className=\"nodrag [-webkit-app-region:no-drag]\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onClose}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n className=\"nodrag [-webkit-app-region:no-drag]\"\n disabled={selectedRefs.length === 0}\n type=\"button\"\n onClick={onConfirm}\n >\n {copy.t(\"referencePicker.confirm\")}\n </Button>\n </div>\n </div>\n );\n}\n\nfunction WorkspaceFileReferencePickerFeedback({\n children\n}: {\n children: ReactNode;\n}): JSX.Element {\n return (\n <div className=\"grid min-h-0 flex-1 place-items-center px-4 text-center text-sm text-[var(--text-secondary)]\">\n {children}\n </div>\n );\n}\n","import { useEffect, useState, type JSX, type ReactNode } from \"react\";\nimport { useComposedInputValue } from \"@tutti-os/ui-react-hooks\";\nimport {\n ArrowRightIcon,\n Button,\n CheckIcon,\n FileIcon,\n FolderFilledIcon,\n Input,\n ScrollArea,\n SearchIcon,\n Spinner,\n cn\n} from \"@tutti-os/ui-system\";\nimport { AddIcon as AddLinedIcon } from \"@tutti-os/ui-system/icons\";\nimport type {\n WorkspaceFileReference,\n WorkspaceFileReferenceCopy\n} from \"../../../contracts/index.ts\";\nimport {\n normalizeDirectoryPath,\n type WorkspaceFileReferenceDirectoryState\n} from \"../../../react/index.ts\";\n\nconst workspaceFileReferenceTreeIndent = 24;\nconst workspaceFileReferenceTreeCollapseDurationMs = 200;\n\nexport function WorkspaceFileReferencePickerBrowserPane({\n browseRootEntries,\n copy,\n directoryStateByPath,\n expandedFolderPaths,\n focusedPath,\n isLoading,\n mode,\n searchQuery,\n selectedRefs,\n setSearchQuery,\n visibleEntries,\n onFocusPath,\n onToggleFolder,\n onToggleRef\n}: {\n browseRootEntries: readonly WorkspaceFileReference[];\n copy: WorkspaceFileReferenceCopy;\n directoryStateByPath: Record<string, WorkspaceFileReferenceDirectoryState>;\n expandedFolderPaths: Record<string, boolean>;\n focusedPath: string | null;\n isLoading: boolean;\n mode: \"browse\" | \"search\";\n searchQuery: string;\n selectedRefs: readonly WorkspaceFileReference[];\n setSearchQuery: (query: string) => void;\n visibleEntries: readonly WorkspaceFileReference[];\n onFocusPath: (path: string) => void;\n onToggleFolder: (entry: WorkspaceFileReference) => void;\n onToggleRef: (entry: WorkspaceFileReference) => void;\n}): JSX.Element {\n return (\n <section className=\"nodrag flex min-h-0 flex-col border-b border-[var(--line-1)] [-webkit-app-region:no-drag] lg:border-r lg:border-b-0\">\n <div className=\"border-b border-[var(--line-1)] p-3\">\n <WorkspaceFileReferencePickerSearchInput\n placeholder={copy.t(\"referencePicker.searchPlaceholder\")}\n value={searchQuery}\n onChange={setSearchQuery}\n />\n </div>\n {isLoading ? (\n <WorkspaceFileReferencePickerFeedback>\n <Spinner className=\"text-[var(--text-secondary)]\" size={16} />\n </WorkspaceFileReferencePickerFeedback>\n ) : visibleEntries.length === 0 ? (\n <WorkspaceFileReferencePickerFeedback>\n {mode === \"search\"\n ? copy.t(\"referencePicker.emptySearch\")\n : copy.t(\"referencePicker.emptyDirectory\")}\n </WorkspaceFileReferencePickerFeedback>\n ) : (\n <ScrollArea className=\"min-h-0 flex-1\">\n <div className=\"flex flex-col gap-[2px] p-3\">\n {mode === \"browse\" ? (\n <div className=\"space-y-0.5\">\n {browseRootEntries.map((entry) => (\n <WorkspaceFileReferencePickerTreeEntry\n childDepth={1}\n copy={copy}\n directoryStateByPath={directoryStateByPath}\n entry={entry}\n expandedFolderPaths={expandedFolderPaths}\n focusedPath={focusedPath}\n key={entry.path}\n selectedRefs={selectedRefs}\n onFocusPath={onFocusPath}\n onToggleFolder={onToggleFolder}\n onToggleRef={onToggleRef}\n />\n ))}\n </div>\n ) : (\n visibleEntries.map((entry) => (\n <WorkspaceFileReferencePickerSearchEntry\n entry={entry}\n focused={focusedPath === entry.path}\n key={entry.path}\n selected={selectedRefs.some(\n (item) => item.path === entry.path\n )}\n onFocusPath={onFocusPath}\n onToggleRef={onToggleRef}\n />\n ))\n )}\n </div>\n </ScrollArea>\n )}\n </section>\n );\n}\n\nfunction WorkspaceFileReferencePickerSearchInput({\n onChange,\n placeholder,\n value\n}: {\n onChange: (value: string) => void;\n placeholder: string;\n value: string;\n}): JSX.Element {\n const searchInput = useComposedInputValue({ onCommit: onChange, value });\n\n return (\n <div className=\"relative\">\n <SearchIcon className=\"pointer-events-none absolute top-1/2 left-3 size-4 -translate-y-1/2 text-[var(--text-tertiary)]\" />\n <Input\n className=\"pl-9\"\n placeholder={placeholder}\n value={searchInput.value}\n onBlur={searchInput.onBlur}\n onChange={searchInput.onChange}\n onCompositionEnd={searchInput.onCompositionEnd}\n onCompositionStart={searchInput.onCompositionStart}\n />\n </div>\n );\n}\n\nfunction WorkspaceFileReferencePickerTreeEntry({\n childDepth,\n copy,\n directoryStateByPath,\n entry,\n expandedFolderPaths,\n focusedPath,\n selectedRefs,\n onFocusPath,\n onToggleFolder,\n onToggleRef\n}: {\n childDepth: number;\n copy: WorkspaceFileReferenceCopy;\n directoryStateByPath: Record<string, WorkspaceFileReferenceDirectoryState>;\n entry: WorkspaceFileReference;\n expandedFolderPaths: Record<string, boolean>;\n focusedPath: string | null;\n selectedRefs: readonly WorkspaceFileReference[];\n onFocusPath: (path: string) => void;\n onToggleFolder: (entry: WorkspaceFileReference) => void;\n onToggleRef: (entry: WorkspaceFileReference) => void;\n}): JSX.Element {\n const selected = selectedRefs.some((item) => item.path === entry.path);\n const focused = focusedPath === entry.path;\n const isFolder = entry.kind === \"folder\";\n const folderKey = normalizeDirectoryPath(entry.path);\n const expanded = expandedFolderPaths[folderKey] ?? false;\n const childState = directoryStateByPath[folderKey];\n const childEntries = childState?.entries ?? [];\n const [shouldRenderChildContent, setShouldRenderChildContent] =\n useState(expanded);\n\n useEffect(() => {\n if (expanded) {\n setShouldRenderChildContent(true);\n return;\n }\n\n const timeoutId = window.setTimeout(() => {\n setShouldRenderChildContent(false);\n }, workspaceFileReferenceTreeCollapseDurationMs);\n\n return () => window.clearTimeout(timeoutId);\n }, [expanded]);\n\n const shouldBuildChildContent = expanded || shouldRenderChildContent;\n const childContent = shouldBuildChildContent ? (\n childState?.loading ? (\n <div\n className=\"flex items-center gap-2 px-2 py-2 text-xs text-[var(--text-secondary)]\"\n style={{\n paddingLeft: `${childDepth * workspaceFileReferenceTreeIndent + 12}px`\n }}\n >\n <Spinner className=\"text-[var(--text-secondary)]\" size={14} />\n <span>{copy.t(\"referencePicker.loading\")}</span>\n </div>\n ) : childEntries.length > 0 ? (\n <div className=\"space-y-0.5\">\n {childEntries.map((childEntry) => (\n <WorkspaceFileReferencePickerTreeEntry\n childDepth={childDepth + 1}\n copy={copy}\n directoryStateByPath={directoryStateByPath}\n entry={childEntry}\n expandedFolderPaths={expandedFolderPaths}\n focusedPath={focusedPath}\n key={childEntry.path}\n selectedRefs={selectedRefs}\n onFocusPath={onFocusPath}\n onToggleFolder={onToggleFolder}\n onToggleRef={onToggleRef}\n />\n ))}\n </div>\n ) : childState?.loaded ? (\n <div\n className=\"px-2 py-2 text-xs text-[var(--text-secondary)]\"\n style={{\n paddingLeft: `${childDepth * workspaceFileReferenceTreeIndent + 12}px`\n }}\n >\n {copy.t(\"referencePicker.emptyDirectory\")}\n </div>\n ) : null\n ) : null;\n\n return (\n <div>\n <div\n className={cn(\n \"grid grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2 rounded-[6px] py-1.5 pr-1 pl-2 transition-colors\",\n \"nodrag [-webkit-app-region:no-drag]\",\n focused || selected\n ? \"bg-transparency-block\"\n : \"hover:bg-transparency-block\"\n )}\n style={{\n paddingLeft: `${(childDepth - 1) * workspaceFileReferenceTreeIndent + 8}px`\n }}\n >\n {isFolder ? (\n <button\n aria-label={resolveWorkspaceFileReferenceLabel(entry)}\n className=\"nodrag grid size-5 shrink-0 place-items-center rounded-sm text-[var(--text-secondary)] [-webkit-app-region:no-drag] hover:bg-[var(--transparency-hover)]\"\n type=\"button\"\n onClick={(event) => {\n event.stopPropagation();\n onToggleFolder(entry);\n }}\n >\n <ArrowRightIcon\n className={cn(\n \"size-3.5 transition-transform\",\n expanded && \"rotate-90\"\n )}\n />\n </button>\n ) : (\n <span className=\"block size-5 shrink-0\" />\n )}\n <button\n className=\"nodrag flex min-w-0 items-center gap-2 text-left [-webkit-app-region:no-drag]\"\n type=\"button\"\n onClick={(event) => {\n event.stopPropagation();\n onFocusPath(entry.path);\n if (entry.kind === \"folder\") {\n onToggleFolder(entry);\n }\n }}\n >\n {isFolder ? (\n <FolderFilledIcon className=\"size-4 shrink-0 text-[var(--rich-text-folder)]\" />\n ) : (\n <FileIcon className=\"size-4 shrink-0 text-[var(--text-tertiary)]\" />\n )}\n <span className=\"truncate text-sm text-[var(--text-primary)]\">\n {resolveWorkspaceFileReferenceLabel(entry)}\n </span>\n </button>\n <Button\n aria-label={resolveWorkspaceFileReferenceLabel(entry)}\n aria-pressed={selected}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n className=\"nodrag [-webkit-app-region:no-drag]\"\n onClick={(event) => {\n event.stopPropagation();\n onFocusPath(entry.path);\n onToggleRef(entry);\n }}\n >\n {selected ? (\n <CheckIcon size={14} />\n ) : (\n <AddLinedIcon className=\"text-[var(--text-secondary)]\" size={16} />\n )}\n </Button>\n </div>\n {isFolder ? (\n <div\n className={cn(\n \"grid transition-[grid-template-rows] duration-200 ease-out motion-reduce:transition-none\",\n expanded ? \"grid-rows-[1fr]\" : \"grid-rows-[0fr]\",\n childContent && \"mt-[2px]\"\n )}\n >\n <div\n aria-hidden={expanded ? undefined : \"true\"}\n className={cn(\n \"min-h-0 overflow-hidden transition-[opacity,transform] duration-200 ease-out motion-reduce:transition-none\",\n expanded\n ? \"translate-y-0 opacity-100\"\n : \"-translate-y-1 opacity-0\"\n )}\n inert={expanded ? undefined : true}\n >\n {childContent}\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction WorkspaceFileReferencePickerSearchEntry({\n entry,\n focused,\n selected,\n onFocusPath,\n onToggleRef\n}: {\n entry: WorkspaceFileReference;\n focused: boolean;\n selected: boolean;\n onFocusPath: (path: string) => void;\n onToggleRef: (entry: WorkspaceFileReference) => void;\n}): JSX.Element {\n const isFolder = entry.kind === \"folder\";\n\n return (\n <div\n className={cn(\n \"grid grid-cols-[minmax(0,1fr)_auto] items-center gap-3 rounded-[6px] border py-2.5 pr-1 pl-3 transition-colors\",\n \"nodrag [-webkit-app-region:no-drag]\",\n focused || selected\n ? \"border-border bg-transparency-block\"\n : \"border-transparent bg-transparent hover:border-border/70 hover:bg-transparency-block\"\n )}\n >\n <button\n className=\"nodrag flex min-w-0 items-center gap-3 text-left [-webkit-app-region:no-drag]\"\n type=\"button\"\n onClick={(event) => {\n event.stopPropagation();\n onFocusPath(entry.path);\n }}\n >\n <span className=\"grid size-9 shrink-0 place-items-center rounded-lg bg-[var(--transparency-block)] text-[var(--text-tertiary)]\">\n {isFolder ? (\n <FolderFilledIcon className=\"size-4 text-[var(--rich-text-folder)]\" />\n ) : (\n <FileIcon className=\"size-4 text-[var(--text-tertiary)]\" />\n )}\n </span>\n <span className=\"min-w-0\">\n <span className=\"block truncate text-sm font-medium text-[var(--text-primary)]\">\n {resolveWorkspaceFileReferenceLabel(entry)}\n </span>\n <span className=\"block truncate text-xs text-[var(--text-secondary)]\">\n {entry.path}\n </span>\n </span>\n </button>\n <Button\n aria-label={resolveWorkspaceFileReferenceLabel(entry)}\n aria-pressed={selected}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n className=\"nodrag [-webkit-app-region:no-drag]\"\n onClick={(event) => {\n event.stopPropagation();\n onFocusPath(entry.path);\n onToggleRef(entry);\n }}\n >\n {selected ? (\n <CheckIcon size={14} />\n ) : (\n <AddLinedIcon className=\"text-[var(--text-secondary)]\" size={16} />\n )}\n </Button>\n </div>\n );\n}\n\nfunction WorkspaceFileReferencePickerFeedback({\n children\n}: {\n children: ReactNode;\n}): JSX.Element {\n return (\n <div className=\"grid min-h-0 flex-1 place-items-center px-4 text-center text-sm text-[var(--text-secondary)]\">\n {children}\n </div>\n );\n}\n\nexport function resolveWorkspaceFileReferenceLabel(\n ref: WorkspaceFileReference\n): string {\n return (\n ref.displayName || ref.path.split(\"/\").filter(Boolean).at(-1) || ref.path\n );\n}\n"],"mappings":"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","names":["Button","cn","Button","FileIcon","FolderFilledIcon","jsx","jsxs","WorkspaceFileReferencePickerFeedback","FolderFilledIcon","FileIcon","Button","jsx","jsxs","cn","Button"]}
1
+ {"version":3,"sources":["../../src/ui/internal/reference/WorkspaceFileReferencePicker.tsx","../../src/ui/internal/reference/WorkspaceFileReferencePickerSections.tsx","../../src/ui/internal/reference/WorkspaceFileReferencePickerTree.tsx"],"sourcesContent":["import { useId } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n CloseIcon,\n cn\n} from \"@tutti-os/ui-system\";\nimport type {\n WorkspaceFileReferenceAdapter,\n WorkspaceFileReference,\n WorkspaceFileReferenceCopy\n} from \"../../../contracts/index.ts\";\nimport { useWorkspaceFileReferencePickerView } from \"../../../react/index.ts\";\nimport {\n WorkspaceFileReferencePickerFooter,\n WorkspaceFileReferencePickerPreviewPane\n} from \"./WorkspaceFileReferencePickerSections.tsx\";\nimport { WorkspaceFileReferencePickerBrowserPane } from \"./WorkspaceFileReferencePickerTree.tsx\";\n\nexport interface WorkspaceFileReferencePickerProps {\n copy: WorkspaceFileReferenceCopy;\n fileAdapter?: WorkspaceFileReferenceAdapter;\n initialPath?: string | null;\n onClose: () => void;\n onConfirm: (refs: WorkspaceFileReference[]) => void;\n open: boolean;\n workspaceId: string;\n}\n\nconst workspaceFileReferencePickerBackdropMotionClassName =\n \"motion-safe:animate-in motion-safe:fade-in-0 motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:animate-none\";\n\nconst workspaceFileReferencePickerPanelMotionClassName =\n \"motion-safe:animate-in motion-safe:fade-in-0 motion-safe:zoom-in-[0.96] motion-safe:duration-[250ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:animate-none\";\n\nexport function WorkspaceFileReferencePicker({\n copy,\n fileAdapter,\n initialPath,\n onClose,\n onConfirm,\n open,\n workspaceId\n}: WorkspaceFileReferencePickerProps) {\n const titleId = useId();\n const {\n browseRootEntries,\n directoryStateByPath,\n expandedFolderPaths,\n focusedEntry,\n focusedPath,\n isLoading,\n mode,\n previewState,\n searchQuery,\n selectedRefs,\n visibleEntries,\n setFocusedPath,\n setSearchQuery,\n toggleFolder,\n toggleRef\n } = useWorkspaceFileReferencePickerView({\n fileAdapter,\n initialPath,\n onClose,\n onConfirm,\n open,\n workspaceId\n });\n\n if (!open) {\n return null;\n }\n\n const dialog = (\n <div\n className={cn(\n \"nodrag fixed inset-0 grid place-items-center bg-[var(--backdrop)] px-3 py-4 backdrop-blur-md [-webkit-app-region:no-drag] sm:px-6 sm:py-8\",\n workspaceFileReferencePickerBackdropMotionClassName\n )}\n style={{ zIndex: \"var(--z-panel)\" }}\n onClick={onClose}\n >\n <Card\n aria-labelledby={titleId}\n aria-modal=\"true\"\n className={cn(\n \"nodrag flex h-[min(88vh,44rem)] w-full max-w-5xl origin-center flex-col gap-0 overflow-hidden border-[var(--line-1)] bg-[var(--background-fronted)] py-0 text-[var(--text-primary)] shadow-panel [-webkit-app-region:no-drag] sm:h-[min(82vh,44rem)]\",\n workspaceFileReferencePickerPanelMotionClassName\n )}\n role=\"dialog\"\n onClick={(event) => event.stopPropagation()}\n >\n <CardHeader\n className=\"border-b px-4 py-4 sm:px-6 sm:py-5\"\n style={{ borderBottomColor: \"var(--line-1)\" }}\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0\">\n <CardTitle id={titleId}>\n {copy.t(\"referencePicker.title\")}\n </CardTitle>\n </div>\n <Button\n aria-label={copy.t(\"actions.cancel\")}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={onClose}\n >\n <CloseIcon size={16} />\n </Button>\n </div>\n </CardHeader>\n <CardContent className=\"grid min-h-0 flex-1 grid-rows-[minmax(0,1fr)_auto] gap-0 overflow-hidden p-0 lg:grid-cols-[minmax(0,1.15fr)_minmax(20rem,0.85fr)] lg:grid-rows-1\">\n <WorkspaceFileReferencePickerBrowserPane\n browseRootEntries={browseRootEntries}\n copy={copy}\n directoryStateByPath={directoryStateByPath}\n expandedFolderPaths={expandedFolderPaths}\n focusedPath={focusedPath}\n isLoading={isLoading}\n mode={mode}\n searchQuery={searchQuery}\n selectedRefs={selectedRefs}\n setSearchQuery={setSearchQuery}\n visibleEntries={visibleEntries}\n onFocusPath={setFocusedPath}\n onToggleFolder={toggleFolder}\n onToggleRef={toggleRef}\n />\n <WorkspaceFileReferencePickerPreviewPane\n copy={copy}\n focusedEntry={focusedEntry}\n mode={mode}\n previewState={previewState}\n />\n </CardContent>\n <WorkspaceFileReferencePickerFooter\n copy={copy}\n onClose={onClose}\n onConfirm={() => onConfirm(selectedRefs)}\n selectedRefs={selectedRefs}\n />\n </Card>\n </div>\n );\n\n if (typeof document === \"undefined\") {\n return dialog;\n }\n return createPortal(dialog, document.body);\n}\n","import type { JSX, ReactNode } from \"react\";\nimport {\n Badge,\n Button,\n FileIcon,\n FolderFilledIcon,\n LoadingIcon\n} from \"@tutti-os/ui-system\";\nimport { formatWorkspacePreviewByteLimit } from \"@tutti-os/workspace-file-preview\";\nimport { WorkspaceFilePreviewSurface as SharedWorkspaceFilePreviewSurface } from \"@tutti-os/workspace-file-preview/react\";\nimport type {\n WorkspaceFileReference,\n WorkspaceFileReferenceCopy\n} from \"../../../contracts/index.ts\";\nimport type { WorkspaceFileReferencePreviewState } from \"../../../react/internal/reference/useWorkspaceFileReferencePickerView.ts\";\nimport { resolveWorkspaceFileReferenceLabel } from \"./WorkspaceFileReferencePickerTree.tsx\";\n\nconst workspaceFileReferencePickerSelectedBadgeClassName =\n \"max-w-[14rem] rounded-[4px] border-transparent bg-[var(--transparency-block)] text-[var(--text-primary)]\";\n\nexport function WorkspaceFileReferencePickerPreviewPane({\n copy,\n focusedEntry,\n mode,\n previewState\n}: {\n copy: WorkspaceFileReferenceCopy;\n focusedEntry: WorkspaceFileReference | null;\n mode: \"browse\" | \"search\";\n previewState: WorkspaceFileReferencePreviewState;\n}): JSX.Element {\n return (\n <aside className=\"flex shrink-0 flex-col border-t border-[var(--line-1)] bg-[var(--background-fronted)] lg:min-h-0 lg:flex-1 lg:border-t-0\">\n <div className=\"flex min-h-0 flex-1 flex-col p-2\">\n {focusedEntry ? (\n <div className=\"flex min-h-0 flex-col gap-4 lg:flex-1 lg:gap-5\">\n <WorkspaceFileReferencePreviewSurface\n copy={copy}\n focusedEntry={focusedEntry}\n previewState={previewState}\n />\n <div className=\"space-y-2 px-2 lg:space-y-3\">\n <div className=\"space-y-1.5\">\n <p className=\"truncate text-[15px] font-semibold text-[var(--text-primary)]\">\n {resolveWorkspaceFileReferenceLabel(focusedEntry)}\n </p>\n <p className=\"line-clamp-3 text-[13px] text-[var(--text-secondary)] [overflow-wrap:anywhere]\">\n {focusedEntry.path}\n </p>\n </div>\n </div>\n </div>\n ) : (\n <WorkspaceFileReferencePickerFeedback>\n {mode === \"search\"\n ? copy.t(\"referencePicker.emptySearch\")\n : copy.t(\"referencePicker.emptyDirectory\")}\n </WorkspaceFileReferencePickerFeedback>\n )}\n </div>\n </aside>\n );\n}\n\nfunction WorkspaceFileReferencePreviewSurface({\n copy,\n focusedEntry,\n previewState\n}: {\n copy: WorkspaceFileReferenceCopy;\n focusedEntry: WorkspaceFileReference;\n previewState: WorkspaceFileReferencePreviewState;\n}): JSX.Element {\n return (\n <SharedWorkspaceFilePreviewSurface\n directoryMessage={copy.t(\"referencePicker.previewFolder\")}\n emptyMessage={copy.t(\"referencePicker.previewUnavailable\")}\n frameClassName=\"flex aspect-[3/2] w-full flex-col items-center justify-center overflow-hidden rounded-[8px] border border-[var(--line-2,var(--border-2))] bg-[var(--transparency-block)] p-0 text-center\"\n imageAlt={resolveWorkspaceFileReferenceLabel}\n imageFrameClassName=\"p-3\"\n loadingIndicator={\n <span className=\"mx-auto grid size-11 place-items-center rounded-[6px] bg-[var(--transparency-block)]\">\n <LoadingIcon className=\"size-4 animate-spin\" />\n </span>\n }\n loadingMessage={copy.t(\"referencePicker.previewLoading\")}\n messageClassName=\"mx-auto max-w-[24ch] text-[13px] leading-5 text-[var(--text-secondary)] [overflow-wrap:anywhere]\"\n renderIcon={(entry) =>\n entry.kind === \"folder\" ? (\n <FolderFilledIcon className=\"mx-auto size-9 text-[var(--rich-text-folder)]\" />\n ) : (\n <FileIcon className=\"mx-auto size-9 text-[var(--text-tertiary)]\" />\n )\n }\n state={resolveWorkspaceFileReferenceSurfaceState(\n copy,\n focusedEntry,\n previewState\n )}\n textClassName=\"h-full overflow-auto p-3 text-left text-[11px] leading-5 whitespace-pre-wrap break-words text-[var(--text-primary)]\"\n textFrameClassName=\"items-stretch justify-stretch\"\n />\n );\n}\n\nfunction resolveWorkspaceFileReferenceSurfaceState(\n copy: WorkspaceFileReferenceCopy,\n focusedEntry: WorkspaceFileReference,\n previewState: WorkspaceFileReferencePreviewState\n) {\n if (focusedEntry.kind === \"folder\") {\n return {\n entry: focusedEntry,\n status: \"directory\" as const\n };\n }\n\n if (\n !(\"reference\" in previewState) ||\n previewState.reference.path !== focusedEntry.path\n ) {\n return {\n entry: focusedEntry,\n message: focusedEntry.path,\n status: \"unsupported\" as const\n };\n }\n\n switch (previewState.status) {\n case \"loading\":\n case \"image\":\n case \"text\":\n return {\n ...previewState,\n entry: focusedEntry\n };\n case \"readonly\":\n return {\n entry: focusedEntry,\n message: resolveWorkspaceFileReferencePreviewReadonlyMessage(\n copy,\n previewState\n ),\n status: \"readonly\" as const\n };\n case \"error\":\n return {\n entry: focusedEntry,\n message: copy.t(\"referencePicker.previewError\"),\n status: \"error\" as const\n };\n case \"unsupported\":\n return {\n entry: focusedEntry,\n message: copy.t(\"referencePicker.previewUnsupported\"),\n status: \"unsupported\" as const\n };\n case \"unavailable\":\n return {\n entry: focusedEntry,\n message: copy.t(\"referencePicker.previewUnavailable\"),\n status: \"unsupported\" as const\n };\n case \"directory\":\n return {\n entry: focusedEntry,\n status: \"directory\" as const\n };\n }\n}\n\nfunction resolveWorkspaceFileReferencePreviewReadonlyMessage(\n copy: WorkspaceFileReferenceCopy,\n previewState: Extract<\n WorkspaceFileReferencePreviewState,\n { status: \"readonly\" }\n >\n): string {\n switch (previewState.reason) {\n case \"binary\":\n return copy.t(\"referencePicker.previewBinary\");\n case \"decode_failed\":\n return copy.t(\"referencePicker.previewDecodeFailed\");\n case \"file_too_large\":\n return copy.t(\"referencePicker.previewFileTooLarge\", {\n maxSize: formatWorkspacePreviewByteLimit(previewState.maxSizeBytes ?? 0)\n });\n case \"text_too_large\":\n return copy.t(\"referencePicker.previewTextTooLarge\", {\n maxSize: formatWorkspacePreviewByteLimit(previewState.maxSizeBytes ?? 0)\n });\n }\n}\n\nexport function WorkspaceFileReferencePickerFooter({\n copy,\n onClose,\n onConfirm,\n selectedRefs\n}: {\n copy: WorkspaceFileReferenceCopy;\n onClose: () => void;\n onConfirm: () => void;\n selectedRefs: readonly WorkspaceFileReference[];\n}): JSX.Element {\n return (\n <div className=\"nodrag flex flex-col gap-3 border-t border-[var(--line-1)] px-4 py-4 [-webkit-app-region:no-drag] sm:px-6 lg:flex-row lg:items-center lg:justify-between\">\n <div className=\"flex min-w-0 flex-wrap items-center gap-2 lg:flex-1\">\n <span className=\"text-[13px] text-[var(--text-secondary)]\">\n {copy.t(\"referencePicker.selectedCount\", {\n count: selectedRefs.length\n })}\n </span>\n {selectedRefs.slice(0, 2).map((ref) => (\n <Badge\n className={workspaceFileReferencePickerSelectedBadgeClassName}\n key={ref.path}\n variant=\"secondary\"\n >\n <span className=\"truncate\">\n {resolveWorkspaceFileReferenceLabel(ref)}\n </span>\n </Badge>\n ))}\n {selectedRefs.length > 2 ? (\n <Badge\n className={workspaceFileReferencePickerSelectedBadgeClassName}\n variant=\"secondary\"\n >\n +{selectedRefs.length - 2}\n </Badge>\n ) : null}\n </div>\n <div className=\"flex w-full items-center justify-end gap-2 lg:w-auto lg:shrink-0\">\n <Button\n className=\"nodrag [-webkit-app-region:no-drag]\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onClose}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n className=\"nodrag [-webkit-app-region:no-drag]\"\n disabled={selectedRefs.length === 0}\n type=\"button\"\n onClick={onConfirm}\n >\n {copy.t(\"referencePicker.confirm\")}\n </Button>\n </div>\n </div>\n );\n}\n\nfunction WorkspaceFileReferencePickerFeedback({\n children\n}: {\n children: ReactNode;\n}): JSX.Element {\n return (\n <div className=\"grid min-h-0 flex-1 place-items-center px-4 text-center text-[13px] text-[var(--text-secondary)]\">\n {children}\n </div>\n );\n}\n","import { useEffect, useState, type JSX, type ReactNode } from \"react\";\nimport { useComposedInputValue } from \"@tutti-os/ui-react-hooks\";\nimport {\n ArrowRightIcon,\n Button,\n CheckIcon,\n FileIcon,\n FolderFilledIcon,\n Input,\n ScrollArea,\n SearchIcon,\n Spinner,\n cn\n} from \"@tutti-os/ui-system\";\nimport { AddIcon as AddLinedIcon } from \"@tutti-os/ui-system/icons\";\nimport type {\n WorkspaceFileReference,\n WorkspaceFileReferenceCopy\n} from \"../../../contracts/index.ts\";\nimport {\n normalizeDirectoryPath,\n type WorkspaceFileReferenceDirectoryState\n} from \"../../../react/index.ts\";\n\nconst workspaceFileReferenceTreeIndent = 24;\nconst workspaceFileReferenceTreeCollapseDurationMs = 200;\n\nexport function WorkspaceFileReferencePickerBrowserPane({\n browseRootEntries,\n copy,\n directoryStateByPath,\n expandedFolderPaths,\n focusedPath,\n isLoading,\n mode,\n searchQuery,\n selectedRefs,\n setSearchQuery,\n visibleEntries,\n onFocusPath,\n onToggleFolder,\n onToggleRef\n}: {\n browseRootEntries: readonly WorkspaceFileReference[];\n copy: WorkspaceFileReferenceCopy;\n directoryStateByPath: Record<string, WorkspaceFileReferenceDirectoryState>;\n expandedFolderPaths: Record<string, boolean>;\n focusedPath: string | null;\n isLoading: boolean;\n mode: \"browse\" | \"search\";\n searchQuery: string;\n selectedRefs: readonly WorkspaceFileReference[];\n setSearchQuery: (query: string) => void;\n visibleEntries: readonly WorkspaceFileReference[];\n onFocusPath: (path: string) => void;\n onToggleFolder: (entry: WorkspaceFileReference) => void;\n onToggleRef: (entry: WorkspaceFileReference) => void;\n}): JSX.Element {\n return (\n <section className=\"nodrag flex min-h-0 flex-col border-b border-[var(--line-1)] [-webkit-app-region:no-drag] lg:border-r lg:border-b-0\">\n <div className=\"border-b border-[var(--line-1)] p-3\">\n <WorkspaceFileReferencePickerSearchInput\n placeholder={copy.t(\"referencePicker.searchPlaceholder\")}\n value={searchQuery}\n onChange={setSearchQuery}\n />\n </div>\n {isLoading ? (\n <WorkspaceFileReferencePickerFeedback>\n <Spinner className=\"text-[var(--text-secondary)]\" size={16} />\n </WorkspaceFileReferencePickerFeedback>\n ) : visibleEntries.length === 0 ? (\n <WorkspaceFileReferencePickerFeedback>\n {mode === \"search\"\n ? copy.t(\"referencePicker.emptySearch\")\n : copy.t(\"referencePicker.emptyDirectory\")}\n </WorkspaceFileReferencePickerFeedback>\n ) : (\n <ScrollArea className=\"min-h-0 flex-1\">\n <div className=\"flex flex-col gap-[2px] p-3\">\n {mode === \"browse\" ? (\n <div className=\"space-y-0.5\">\n {browseRootEntries.map((entry) => (\n <WorkspaceFileReferencePickerTreeEntry\n childDepth={1}\n copy={copy}\n directoryStateByPath={directoryStateByPath}\n entry={entry}\n expandedFolderPaths={expandedFolderPaths}\n focusedPath={focusedPath}\n key={entry.path}\n selectedRefs={selectedRefs}\n onFocusPath={onFocusPath}\n onToggleFolder={onToggleFolder}\n onToggleRef={onToggleRef}\n />\n ))}\n </div>\n ) : (\n visibleEntries.map((entry) => (\n <WorkspaceFileReferencePickerSearchEntry\n entry={entry}\n focused={focusedPath === entry.path}\n key={entry.path}\n selected={selectedRefs.some(\n (item) => item.path === entry.path\n )}\n onFocusPath={onFocusPath}\n onToggleRef={onToggleRef}\n />\n ))\n )}\n </div>\n </ScrollArea>\n )}\n </section>\n );\n}\n\nfunction WorkspaceFileReferencePickerSearchInput({\n onChange,\n placeholder,\n value\n}: {\n onChange: (value: string) => void;\n placeholder: string;\n value: string;\n}): JSX.Element {\n const searchInput = useComposedInputValue({ onCommit: onChange, value });\n\n return (\n <div className=\"relative\">\n <SearchIcon className=\"pointer-events-none absolute top-1/2 left-3 size-4 -translate-y-1/2 text-[var(--text-tertiary)]\" />\n <Input\n className=\"pl-9\"\n placeholder={placeholder}\n value={searchInput.value}\n onBlur={searchInput.onBlur}\n onChange={searchInput.onChange}\n onCompositionEnd={searchInput.onCompositionEnd}\n onCompositionStart={searchInput.onCompositionStart}\n />\n </div>\n );\n}\n\nfunction WorkspaceFileReferencePickerTreeEntry({\n childDepth,\n copy,\n directoryStateByPath,\n entry,\n expandedFolderPaths,\n focusedPath,\n selectedRefs,\n onFocusPath,\n onToggleFolder,\n onToggleRef\n}: {\n childDepth: number;\n copy: WorkspaceFileReferenceCopy;\n directoryStateByPath: Record<string, WorkspaceFileReferenceDirectoryState>;\n entry: WorkspaceFileReference;\n expandedFolderPaths: Record<string, boolean>;\n focusedPath: string | null;\n selectedRefs: readonly WorkspaceFileReference[];\n onFocusPath: (path: string) => void;\n onToggleFolder: (entry: WorkspaceFileReference) => void;\n onToggleRef: (entry: WorkspaceFileReference) => void;\n}): JSX.Element {\n const selected = selectedRefs.some((item) => item.path === entry.path);\n const focused = focusedPath === entry.path;\n const isFolder = entry.kind === \"folder\";\n const folderKey = normalizeDirectoryPath(entry.path);\n const expanded = expandedFolderPaths[folderKey] ?? false;\n const childState = directoryStateByPath[folderKey];\n const childEntries = childState?.entries ?? [];\n const [shouldRenderChildContent, setShouldRenderChildContent] =\n useState(expanded);\n\n useEffect(() => {\n if (expanded) {\n setShouldRenderChildContent(true);\n return;\n }\n\n const timeoutId = window.setTimeout(() => {\n setShouldRenderChildContent(false);\n }, workspaceFileReferenceTreeCollapseDurationMs);\n\n return () => window.clearTimeout(timeoutId);\n }, [expanded]);\n\n const shouldBuildChildContent = expanded || shouldRenderChildContent;\n const childContent = shouldBuildChildContent ? (\n childState?.loading ? (\n <div\n className=\"flex items-center gap-2 px-2 py-2 text-[11px] text-[var(--text-secondary)]\"\n style={{\n paddingLeft: `${childDepth * workspaceFileReferenceTreeIndent + 12}px`\n }}\n >\n <Spinner className=\"text-[var(--text-secondary)]\" size={14} />\n <span>{copy.t(\"referencePicker.loading\")}</span>\n </div>\n ) : childEntries.length > 0 ? (\n <div className=\"space-y-0.5\">\n {childEntries.map((childEntry) => (\n <WorkspaceFileReferencePickerTreeEntry\n childDepth={childDepth + 1}\n copy={copy}\n directoryStateByPath={directoryStateByPath}\n entry={childEntry}\n expandedFolderPaths={expandedFolderPaths}\n focusedPath={focusedPath}\n key={childEntry.path}\n selectedRefs={selectedRefs}\n onFocusPath={onFocusPath}\n onToggleFolder={onToggleFolder}\n onToggleRef={onToggleRef}\n />\n ))}\n </div>\n ) : childState?.loaded ? (\n <div\n className=\"px-2 py-2 text-[11px] text-[var(--text-secondary)]\"\n style={{\n paddingLeft: `${childDepth * workspaceFileReferenceTreeIndent + 12}px`\n }}\n >\n {copy.t(\"referencePicker.emptyDirectory\")}\n </div>\n ) : null\n ) : null;\n\n return (\n <div>\n <div\n className={cn(\n \"grid grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2 rounded-[6px] py-1.5 pr-1 pl-2 transition-colors\",\n \"nodrag [-webkit-app-region:no-drag]\",\n focused || selected\n ? \"bg-transparency-block\"\n : \"hover:bg-transparency-block\"\n )}\n style={{\n paddingLeft: `${(childDepth - 1) * workspaceFileReferenceTreeIndent + 8}px`\n }}\n >\n {isFolder ? (\n <button\n aria-label={resolveWorkspaceFileReferenceLabel(entry)}\n className=\"nodrag grid size-5 shrink-0 place-items-center rounded-sm text-[var(--text-secondary)] [-webkit-app-region:no-drag] hover:bg-[var(--transparency-hover)]\"\n type=\"button\"\n onClick={(event) => {\n event.stopPropagation();\n onToggleFolder(entry);\n }}\n >\n <ArrowRightIcon\n className={cn(\n \"size-3.5 transition-transform\",\n expanded && \"rotate-90\"\n )}\n />\n </button>\n ) : (\n <span className=\"block size-5 shrink-0\" />\n )}\n <button\n className=\"nodrag flex min-w-0 items-center gap-2 text-left [-webkit-app-region:no-drag]\"\n type=\"button\"\n onClick={(event) => {\n event.stopPropagation();\n onFocusPath(entry.path);\n if (entry.kind === \"folder\") {\n onToggleFolder(entry);\n }\n }}\n >\n {isFolder ? (\n <FolderFilledIcon className=\"size-4 shrink-0 text-[var(--rich-text-folder)]\" />\n ) : (\n <FileIcon className=\"size-4 shrink-0 text-[var(--text-tertiary)]\" />\n )}\n <span className=\"truncate text-[13px] text-[var(--text-primary)]\">\n {resolveWorkspaceFileReferenceLabel(entry)}\n </span>\n </button>\n <Button\n aria-label={resolveWorkspaceFileReferenceLabel(entry)}\n aria-pressed={selected}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n className=\"nodrag [-webkit-app-region:no-drag]\"\n onClick={(event) => {\n event.stopPropagation();\n onFocusPath(entry.path);\n onToggleRef(entry);\n }}\n >\n {selected ? (\n <CheckIcon size={14} />\n ) : (\n <AddLinedIcon className=\"text-[var(--text-secondary)]\" size={16} />\n )}\n </Button>\n </div>\n {isFolder ? (\n <div\n className={cn(\n \"grid transition-[grid-template-rows] duration-200 ease-out motion-reduce:transition-none\",\n expanded ? \"grid-rows-[1fr]\" : \"grid-rows-[0fr]\",\n childContent && \"mt-[2px]\"\n )}\n >\n <div\n aria-hidden={expanded ? undefined : \"true\"}\n className={cn(\n \"min-h-0 overflow-hidden transition-[opacity,transform] duration-200 ease-out motion-reduce:transition-none\",\n expanded\n ? \"translate-y-0 opacity-100\"\n : \"-translate-y-1 opacity-0\"\n )}\n inert={expanded ? undefined : true}\n >\n {childContent}\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction WorkspaceFileReferencePickerSearchEntry({\n entry,\n focused,\n selected,\n onFocusPath,\n onToggleRef\n}: {\n entry: WorkspaceFileReference;\n focused: boolean;\n selected: boolean;\n onFocusPath: (path: string) => void;\n onToggleRef: (entry: WorkspaceFileReference) => void;\n}): JSX.Element {\n const isFolder = entry.kind === \"folder\";\n\n return (\n <div\n className={cn(\n \"grid grid-cols-[minmax(0,1fr)_auto] items-center gap-3 rounded-[6px] border py-2.5 pr-1 pl-3 transition-colors\",\n \"nodrag [-webkit-app-region:no-drag]\",\n focused || selected\n ? \"border-border bg-transparency-block\"\n : \"border-transparent bg-transparent hover:border-border/70 hover:bg-transparency-block\"\n )}\n >\n <button\n className=\"nodrag flex min-w-0 items-center gap-3 text-left [-webkit-app-region:no-drag]\"\n type=\"button\"\n onClick={(event) => {\n event.stopPropagation();\n onFocusPath(entry.path);\n }}\n >\n <span className=\"grid size-9 shrink-0 place-items-center rounded-lg bg-[var(--transparency-block)] text-[var(--text-tertiary)]\">\n {isFolder ? (\n <FolderFilledIcon className=\"size-4 text-[var(--rich-text-folder)]\" />\n ) : (\n <FileIcon className=\"size-4 text-[var(--text-tertiary)]\" />\n )}\n </span>\n <span className=\"min-w-0\">\n <span className=\"block truncate text-[13px] font-medium text-[var(--text-primary)]\">\n {resolveWorkspaceFileReferenceLabel(entry)}\n </span>\n <span className=\"block truncate text-[11px] text-[var(--text-secondary)]\">\n {entry.path}\n </span>\n </span>\n </button>\n <Button\n aria-label={resolveWorkspaceFileReferenceLabel(entry)}\n aria-pressed={selected}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n className=\"nodrag [-webkit-app-region:no-drag]\"\n onClick={(event) => {\n event.stopPropagation();\n onFocusPath(entry.path);\n onToggleRef(entry);\n }}\n >\n {selected ? (\n <CheckIcon size={14} />\n ) : (\n <AddLinedIcon className=\"text-[var(--text-secondary)]\" size={16} />\n )}\n </Button>\n </div>\n );\n}\n\nfunction WorkspaceFileReferencePickerFeedback({\n children\n}: {\n children: ReactNode;\n}): JSX.Element {\n return (\n <div className=\"grid min-h-0 flex-1 place-items-center px-4 text-center text-[13px] text-[var(--text-secondary)]\">\n {children}\n </div>\n );\n}\n\nexport function resolveWorkspaceFileReferenceLabel(\n ref: WorkspaceFileReference\n): string {\n return (\n ref.displayName || ref.path.split(\"/\").filter(Boolean).at(-1) || ref.path\n );\n}\n"],"mappings":"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","names":["Button","cn","Button","FileIcon","FolderFilledIcon","jsx","jsxs","WorkspaceFileReferencePickerFeedback","FolderFilledIcon","FileIcon","Button","jsx","jsxs","cn","Button"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tutti-os/workspace-file-reference",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -36,9 +36,9 @@
36
36
  "directory": "packages/workspace/file-reference"
37
37
  },
38
38
  "dependencies": {
39
- "@tutti-os/ui-react-hooks": "0.0.2",
40
- "@tutti-os/ui-system": "0.0.2",
41
- "@tutti-os/workspace-file-preview": "0.0.2",
39
+ "@tutti-os/ui-react-hooks": "0.0.3",
40
+ "@tutti-os/ui-system": "0.0.3",
41
+ "@tutti-os/workspace-file-preview": "0.0.3",
42
42
  "valtio": "^2.3.2"
43
43
  },
44
44
  "devDependencies": {