@tutti-os/workspace-file-reference 0.0.1

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.
@@ -0,0 +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"]}
package/package.json ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "@tutti-os/workspace-file-reference",
3
+ "version": "0.0.1",
4
+ "private": false,
5
+ "type": "module",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js"
11
+ },
12
+ "./contracts": {
13
+ "types": "./dist/contracts/index.d.ts",
14
+ "import": "./dist/contracts/index.js"
15
+ },
16
+ "./core": {
17
+ "types": "./dist/core/index.d.ts",
18
+ "import": "./dist/core/index.js"
19
+ },
20
+ "./react": {
21
+ "types": "./dist/react/index.d.ts",
22
+ "import": "./dist/react/index.js"
23
+ },
24
+ "./ui": {
25
+ "types": "./dist/ui/index.d.ts",
26
+ "import": "./dist/ui/index.js"
27
+ }
28
+ },
29
+ "files": [
30
+ "dist",
31
+ "README.md"
32
+ ],
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "git+https://github.com/tutti-os/tutti.git",
36
+ "directory": "packages/workspace/file-reference"
37
+ },
38
+ "dependencies": {
39
+ "@tutti-os/ui-react-hooks": "0.0.1",
40
+ "@tutti-os/ui-system": "0.0.1",
41
+ "@tutti-os/workspace-file-preview": "0.0.1",
42
+ "valtio": "^2.3.2"
43
+ },
44
+ "devDependencies": {
45
+ "@types/node": "^24.0.1",
46
+ "@types/react": "^19.1.6",
47
+ "@types/react-dom": "^19.1.5",
48
+ "jsdom": "^27.2.0",
49
+ "react": "^19.1.0",
50
+ "react-dom": "^19.1.0",
51
+ "typescript": "^5.8.3",
52
+ "valtio": "^2.3.2",
53
+ "@tutti-os/config-tsconfig": "0.0.0"
54
+ },
55
+ "peerDependencies": {
56
+ "react": "^19.1.0",
57
+ "react-dom": "^19.1.0",
58
+ "valtio": "^2.3.2"
59
+ },
60
+ "nextop": {
61
+ "tailwindSourceRoot": "src"
62
+ },
63
+ "publishConfig": {
64
+ "access": "public"
65
+ },
66
+ "scripts": {
67
+ "build": "tsup --config tsup.config.ts",
68
+ "test": "node --test --experimental-strip-types \"./src/**/*.test.ts\"",
69
+ "typecheck": "tsc --noEmit -p tsconfig.json"
70
+ }
71
+ }