@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.
- package/LICENSE +202 -0
- package/README.md +12 -0
- package/dist/chunk-LS7P3J6Z.js +901 -0
- package/dist/chunk-LS7P3J6Z.js.map +1 -0
- package/dist/chunk-PAR2R2G5.js +23 -0
- package/dist/chunk-PAR2R2G5.js.map +1 -0
- package/dist/contracts/index.d.ts +71 -0
- package/dist/contracts/index.js +1 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/react/index.d.ts +92 -0
- package/dist/react/index.js +22 -0
- package/dist/react/index.js.map +1 -0
- package/dist/ui/index.d.ts +15 -0
- package/dist/ui/index.js +676 -0
- package/dist/ui/index.js.map +1 -0
- package/package.json +71 -0
|
@@ -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
|
+
}
|