@tutti-os/workspace-user-project 0.0.11 → 0.0.13

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
@@ -159,6 +159,7 @@ function WorkspaceUserProjectSelect({
159
159
  const [isApiLoading, setIsApiLoading] = useState(false);
160
160
  const [isApiUnavailable, setIsApiUnavailable] = useState(!effectiveApi);
161
161
  const [isProjectDialogOpen, setIsProjectDialogOpen] = useState(false);
162
+ const [isSelectOpen, setIsSelectOpen] = useState(false);
162
163
  const [draftProjectName, setDraftProjectName] = useState("");
163
164
  const [projectCreationError, setProjectCreationError] = useState(null);
164
165
  const [isCreatingProject, setIsCreatingProject] = useState(false);
@@ -181,6 +182,12 @@ function WorkspaceUserProjectSelect({
181
182
  const triggerLabel = shouldShowMissingProjectNotice ? resolvedLabels.projectMissingTitle : isSelectedNoProjectPath ? resolvedLabels.noProject : shouldShowLockedProjectPath ? selectedPathLabel : selectedProject ? selectedProjectLabel : selectedPath ? unlistedProjectLabel || selectedPathLabel : isLoading ? resolvedLabels.loadingProjects : resolvedLabels.noProject;
182
183
  const shouldDisableWhileLoading = showKnownProjectOptions || shouldApplyPreparedSelection;
183
184
  const disabled = disabledProp || projectLocked || shouldDisableWhileLoading && isLoading || !effectiveApi;
185
+ useEffect(() => {
186
+ if (!disabled || !isSelectOpen) {
187
+ return;
188
+ }
189
+ setIsSelectOpen(false);
190
+ }, [disabled, isSelectOpen]);
184
191
  useEffect(() => {
185
192
  onProjectMissingChange?.(shouldShowMissingProjectNotice);
186
193
  }, [onProjectMissingChange, shouldShowMissingProjectNotice]);
@@ -383,7 +390,9 @@ function WorkspaceUserProjectSelect({
383
390
  Select,
384
391
  {
385
392
  disabled,
393
+ open: isSelectOpen,
386
394
  value: selectValue,
395
+ onOpenChange: setIsSelectOpen,
387
396
  onValueChange: handleProjectValueChange,
388
397
  children: [
389
398
  /* @__PURE__ */ jsx(
@@ -412,7 +421,7 @@ function WorkspaceUserProjectSelect({
412
421
  )
413
422
  }
414
423
  ),
415
- /* @__PURE__ */ jsxs(
424
+ isSelectOpen ? /* @__PURE__ */ jsxs(
416
425
  SelectContent,
417
426
  {
418
427
  align: contentAlign,
@@ -486,7 +495,7 @@ function WorkspaceUserProjectSelect({
486
495
  ) : null
487
496
  ]
488
497
  }
489
- )
498
+ ) : null
490
499
  ]
491
500
  }
492
501
  ),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/internal/project/WorkspaceUserProjectSelect.tsx"],"sourcesContent":["import {\n type FormEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useEffectEvent,\n useMemo,\n useRef,\n useState\n} from \"react\";\nimport { useSnapshot } from \"valtio\";\nimport { proxy } from \"valtio/vanilla\";\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n FolderIcon,\n Input,\n LinkIcon,\n NewWorkspaceLinedIcon,\n NoWorkspaceLinedIcon,\n Select,\n SelectContent,\n SelectItem,\n SelectSeparator,\n SelectTrigger,\n cn\n} from \"@tutti-os/ui-system\";\nimport type {\n WorkspaceUserProject,\n WorkspaceUserProjectApi,\n WorkspaceUserProjectSelectionPreparation,\n WorkspaceUserProjectSelectionPreparationInput,\n WorkspaceUserProjectService\n} from \"../../../contracts/index.ts\";\nimport {\n basenameWorkspaceUserProjectPath,\n getWorkspaceUserProjectErrorCode,\n prepareWorkspaceUserProjectSelection,\n resolveWorkspaceUserProjectDisplayLabel,\n upsertWorkspaceUserProject\n} from \"../../../core/index.ts\";\nimport {\n createDefaultWorkspaceUserProjectI18nRuntime,\n type WorkspaceUserProjectI18nRuntime\n} from \"../../../i18n/index.ts\";\n\nexport type WorkspaceUserProjectSelectLabels = {\n addProject: string;\n createProjectCancel: string;\n createProjectConfirm: string;\n createProjectDocumentsUnavailable: string;\n createProjectFailed: string;\n createProjectNameConflict: string;\n createProjectNameInvalid: string;\n createProjectNameLabel: string;\n createProjectNamePlaceholder: string;\n createProjectNameRequired: string;\n createProjectPermissionDenied: string;\n createProjectTitle: string;\n linkExistingProject: string;\n loadingProjects: string;\n noProject: string;\n projectLabel: string;\n projectLocked: string;\n projectMissingTitle: string;\n projectUnavailable: string;\n};\n\nexport type WorkspaceUserProjectSelectLabelOverrides =\n Partial<WorkspaceUserProjectSelectLabels>;\n\nexport interface WorkspaceUserProjectSelectClassNames {\n content?: string;\n item?: string;\n trigger?: string;\n}\n\nexport type WorkspaceUserProjectSelectChangeAction =\n | \"clear\"\n | \"create_new\"\n | \"select_existing\";\n\nexport interface WorkspaceUserProjectSelectProps {\n api?: WorkspaceUserProjectApi | null;\n classNames?: WorkspaceUserProjectSelectClassNames;\n contentAlign?: \"center\" | \"end\" | \"start\";\n contentSide?: \"bottom\" | \"left\" | \"right\" | \"top\";\n contentSideOffset?: number;\n disabled?: boolean;\n i18n?: WorkspaceUserProjectI18nRuntime;\n labels?: WorkspaceUserProjectSelectLabelOverrides;\n onProjectMissingChange?: (isMissing: boolean) => void;\n onProjectPathChange: (\n path: string | null,\n metadata?: { action: WorkspaceUserProjectSelectChangeAction }\n ) => void;\n projectLocked?: boolean;\n renderAddProjectIcon?: () => ReactNode;\n shouldApplyPreparedSelection?: boolean;\n showKnownProjectOptions?: boolean;\n service?: WorkspaceUserProjectService | null;\n selectedProjectPath?: string | null;\n showCreateProjectAction?: boolean;\n showNoProjectAction?: boolean;\n unlistedProjectLabel?: string;\n}\n\nconst noProjectOptionValue = \"__tutti_no_project__\";\nconst addProjectOptionValue = \"__tutti_add_project__\";\nconst linkExistingProjectOptionValue = \"__tutti_link_existing_project__\";\nconst workspaceUserProjectOverflowLabelStyle = `\n@keyframes workspace-user-project-label-marquee {\n 0% {\n transform: translateX(0);\n }\n\n 44%,\n 56% {\n transform: translateX(var(--workspace-user-project-label-marquee-distance, 0px));\n }\n\n 88%,\n 100% {\n transform: translateX(0);\n }\n}\n\n.workspace-user-project-overflow-label {\n --workspace-user-project-label-marquee-distance: 0px;\n container-type: normal;\n display: block;\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n}\n\n.workspace-user-project-trigger-label {\n align-items: center;\n display: flex;\n flex: 1 1 auto;\n gap: 0.5rem;\n min-width: 0;\n}\n\n.workspace-user-project-overflow-label__content {\n display: block;\n max-width: 100%;\n min-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n transform: translateX(0);\n white-space: nowrap;\n width: max-content;\n}\n\n.workspace-user-project-overflow-label[data-overflow=\"true\"]:hover\n .workspace-user-project-overflow-label__content,\n[data-slot=\"select-item\"]:hover\n .workspace-user-project-overflow-label[data-overflow=\"true\"]\n .workspace-user-project-overflow-label__content {\n animation: workspace-user-project-label-marquee 14s linear infinite;\n max-width: none;\n overflow: visible;\n text-overflow: clip;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .workspace-user-project-overflow-label[data-overflow=\"true\"]:hover\n .workspace-user-project-overflow-label__content,\n [data-slot=\"select-item\"]:hover\n .workspace-user-project-overflow-label[data-overflow=\"true\"]\n .workspace-user-project-overflow-label__content {\n animation: none;\n }\n}\n`;\nconst defaultWorkspaceUserProjectSelectI18n =\n createDefaultWorkspaceUserProjectI18nRuntime();\nconst emptyWorkspaceUserProjectServiceSnapshot = proxy({\n error: null,\n initialized: false,\n isLoading: false,\n projects: [],\n revision: 0\n});\n\nexport function WorkspaceUserProjectSelect({\n api,\n classNames,\n contentAlign = \"start\",\n contentSide = \"top\",\n contentSideOffset = 4,\n disabled: disabledProp = false,\n i18n = defaultWorkspaceUserProjectSelectI18n,\n labels,\n onProjectMissingChange,\n onProjectPathChange,\n projectLocked = false,\n renderAddProjectIcon,\n shouldApplyPreparedSelection = true,\n showKnownProjectOptions = true,\n service,\n selectedProjectPath,\n showCreateProjectAction = hasWorkspaceUserProjectMethod(\n service,\n \"createProject\"\n ) || hasWorkspaceUserProjectMethod(api, \"create\"),\n showNoProjectAction = true,\n unlistedProjectLabel\n}: WorkspaceUserProjectSelectProps): React.JSX.Element {\n \"use memo\";\n const serviceSnapshot = useSnapshot(\n service?.store ?? emptyWorkspaceUserProjectServiceSnapshot\n );\n const effectiveApi = useMemo(\n () => createWorkspaceUserProjectApiAdapter(api, service),\n [api, service]\n );\n const resolvedLabels = useMemo(\n () => resolveWorkspaceUserProjectSelectLabels(i18n, labels),\n [i18n, labels]\n );\n const [apiProjects, setApiProjects] = useState<WorkspaceUserProject[]>([]);\n const [isApiLoading, setIsApiLoading] = useState(false);\n const [isApiUnavailable, setIsApiUnavailable] = useState(!effectiveApi);\n const [isProjectDialogOpen, setIsProjectDialogOpen] = useState(false);\n const [draftProjectName, setDraftProjectName] = useState(\"\");\n const [projectCreationError, setProjectCreationError] = useState<\n string | null\n >(null);\n const [isCreatingProject, setIsCreatingProject] = useState(false);\n const [suppressedSelectedPath, setSuppressedSelectedPath] = useState<\n string | null\n >(null);\n const [hasPinnedNoProjectSelection, setHasPinnedNoProjectSelection] =\n useState(false);\n const [isSelectedPathMissing, setIsSelectedPathMissing] = useState(false);\n const rawSelectedPath = selectedProjectPath?.trim() ?? \"\";\n const selectedPath =\n rawSelectedPath && rawSelectedPath === suppressedSelectedPath\n ? \"\"\n : rawSelectedPath;\n const projects = service ? [...serviceSnapshot.projects] : apiProjects;\n const visibleProjects = showKnownProjectOptions ? projects : [];\n const isLoading = service\n ? serviceSnapshot.isLoading && !serviceSnapshot.initialized\n : isApiLoading;\n const isUnavailable = service\n ? Boolean(serviceSnapshot.error) && !serviceSnapshot.initialized\n : isApiUnavailable;\n const selectedPathLabel =\n basenameWorkspaceUserProjectPath(selectedPath) || selectedPath;\n const selectedProject = showKnownProjectOptions\n ? (projects.find((project) => project.path === selectedPath) ?? null)\n : null;\n const selectedProjectLabel = selectedProject\n ? resolveWorkspaceUserProjectDisplayLabel(selectedProject)\n : \"\";\n const isSelectedNoProjectPath =\n projectLocked &&\n Boolean(selectedPath) &&\n Boolean(effectiveApi?.isNoProjectPath?.({ path: selectedPath }));\n const shouldShowMissingProjectNotice = isSelectedPathMissing;\n const shouldShowLockedProjectPath =\n projectLocked &&\n selectedPath !== \"\" &&\n !isSelectedNoProjectPath &&\n !selectedProject &&\n !isSelectedPathMissing;\n const selectValue = selectedProject\n ? selectedProject.path\n : noProjectOptionValue;\n const triggerLabel = shouldShowMissingProjectNotice\n ? resolvedLabels.projectMissingTitle\n : isSelectedNoProjectPath\n ? resolvedLabels.noProject\n : shouldShowLockedProjectPath\n ? selectedPathLabel\n : selectedProject\n ? selectedProjectLabel\n : selectedPath\n ? unlistedProjectLabel || selectedPathLabel\n : isLoading\n ? resolvedLabels.loadingProjects\n : resolvedLabels.noProject;\n const shouldDisableWhileLoading =\n showKnownProjectOptions || shouldApplyPreparedSelection;\n const disabled =\n disabledProp ||\n projectLocked ||\n (shouldDisableWhileLoading && isLoading) ||\n !effectiveApi;\n\n useEffect(() => {\n onProjectMissingChange?.(shouldShowMissingProjectNotice);\n }, [onProjectMissingChange, shouldShowMissingProjectNotice]);\n\n useEffect(() => {\n if (rawSelectedPath) {\n setHasPinnedNoProjectSelection(false);\n }\n if (\n suppressedSelectedPath &&\n (!rawSelectedPath || rawSelectedPath !== suppressedSelectedPath)\n ) {\n setSuppressedSelectedPath(null);\n }\n }, [rawSelectedPath, suppressedSelectedPath]);\n\n const applyPreparedSelection = useEffectEvent(\n (prepared: WorkspaceUserProjectSelectionPreparation): void => {\n if (!service) {\n setApiProjects(prepared.projects);\n }\n setIsSelectedPathMissing(prepared.isSelectedPathMissing);\n if (!shouldApplyPreparedSelection) {\n return;\n }\n if (prepared.selection.kind === \"clear\") {\n setHasPinnedNoProjectSelection(true);\n setSuppressedSelectedPath(prepared.selection.suppressedPath);\n onProjectPathChange(null);\n return;\n }\n if (prepared.selection.kind === \"select\") {\n setHasPinnedNoProjectSelection(false);\n onProjectPathChange(prepared.selection.path);\n }\n }\n );\n\n useEffect(() => {\n let canceled = false;\n if (!effectiveApi) {\n setApiUnavailableUnlessService(setIsApiUnavailable, service);\n return;\n }\n if (hasPinnedNoProjectSelection) {\n return;\n }\n setIsApiLoading(true);\n setApiUnavailableUnlessService(setIsApiUnavailable, service, false);\n const input = {\n projectLocked,\n selectedPath\n } satisfies WorkspaceUserProjectSelectionPreparationInput;\n void prepareWorkspaceUserProjectSelection(effectiveApi, input)\n .then((prepared) => {\n if (!canceled) {\n applyPreparedSelection(prepared);\n }\n })\n .catch(() => {\n if (!canceled) {\n setApiUnavailableUnlessService(setIsApiUnavailable, service);\n }\n })\n .finally(() => {\n if (!canceled) {\n setIsApiLoading(false);\n }\n });\n return () => {\n canceled = true;\n };\n }, [\n effectiveApi,\n hasPinnedNoProjectSelection,\n projectLocked,\n selectedPath,\n serviceSnapshot.revision,\n service\n ]);\n\n const refreshPreparedSelection = useCallback((): void => {\n if (!effectiveApi) {\n return;\n }\n const input = {\n projectLocked,\n selectedPath\n } satisfies WorkspaceUserProjectSelectionPreparationInput;\n void prepareWorkspaceUserProjectSelection(effectiveApi, input).then(\n applyPreparedSelection,\n () => {\n setApiUnavailableUnlessService(setIsApiUnavailable, service);\n }\n );\n }, [\n effectiveApi,\n projectLocked,\n selectedPath,\n service,\n shouldApplyPreparedSelection\n ]);\n\n const useProjectPath = useCallback(\n async (\n path: string,\n action: WorkspaceUserProjectSelectChangeAction\n ): Promise<void> => {\n if (!effectiveApi) {\n setApiUnavailableUnlessService(setIsApiUnavailable, service);\n return;\n }\n try {\n const project =\n (await effectiveApi.use?.({ path })) ??\n ({\n id: path,\n label: path,\n path\n } satisfies WorkspaceUserProject);\n setApiProjects((current) =>\n upsertWorkspaceUserProject(current, project)\n );\n setHasPinnedNoProjectSelection(false);\n onProjectPathChange(project.path, { action });\n refreshPreparedSelection();\n } catch {\n setApiUnavailableUnlessService(setIsApiUnavailable, service);\n }\n },\n [effectiveApi, onProjectPathChange, refreshPreparedSelection, service]\n );\n\n const createProject = useCallback(async (): Promise<void> => {\n const name = draftProjectName.trim();\n if (!effectiveApi?.create) {\n setProjectCreationError(resolvedLabels.createProjectFailed);\n setApiUnavailableUnlessService(setIsApiUnavailable, service);\n return;\n }\n if (!name) {\n setProjectCreationError(resolvedLabels.createProjectNameRequired);\n return;\n }\n setIsCreatingProject(true);\n setProjectCreationError(null);\n try {\n const project = await effectiveApi.create({ name });\n setApiProjects((current) => upsertWorkspaceUserProject(current, project));\n setHasPinnedNoProjectSelection(false);\n onProjectPathChange(project.path, { action: \"create_new\" });\n setDraftProjectName(\"\");\n setIsProjectDialogOpen(false);\n refreshPreparedSelection();\n } catch (error) {\n setProjectCreationError(\n resolveProjectCreationErrorLabel(error, resolvedLabels)\n );\n } finally {\n setIsCreatingProject(false);\n }\n }, [\n effectiveApi,\n draftProjectName,\n onProjectPathChange,\n refreshPreparedSelection,\n resolvedLabels,\n service\n ]);\n\n const submitProjectDialog = (event: FormEvent<HTMLFormElement>): void => {\n event.preventDefault();\n void createProject();\n };\n\n const closeProjectDialog = (): void => {\n setIsProjectDialogOpen(false);\n setProjectCreationError(null);\n };\n\n const handleProjectValueChange = (nextValue: string): void => {\n if (!effectiveApi || projectLocked) {\n return;\n }\n if (nextValue === noProjectOptionValue) {\n void effectiveApi.rememberDefaultSelection?.({ path: null });\n setHasPinnedNoProjectSelection(true);\n onProjectPathChange(null, { action: \"clear\" });\n return;\n }\n if (nextValue === addProjectOptionValue) {\n setDraftProjectName(\"\");\n setProjectCreationError(null);\n setIsProjectDialogOpen(true);\n return;\n }\n if (nextValue === linkExistingProjectOptionValue) {\n void Promise.resolve(effectiveApi.selectDirectory?.())\n .then((selection) => {\n const path = selection?.path?.trim() ?? \"\";\n if (!path) {\n return;\n }\n void useProjectPath(path, \"select_existing\");\n })\n .catch(() => {});\n return;\n }\n const knownProject = projects.find((project) => project.path === nextValue);\n if (knownProject) {\n void effectiveApi.rememberDefaultSelection?.({ path: knownProject.path });\n setHasPinnedNoProjectSelection(false);\n onProjectPathChange(knownProject.path, { action: \"select_existing\" });\n return;\n }\n void useProjectPath(nextValue, \"select_existing\");\n };\n\n return (\n <>\n <style>{workspaceUserProjectOverflowLabelStyle}</style>\n <Select\n disabled={disabled}\n value={selectValue}\n onValueChange={handleProjectValueChange}\n >\n <SelectTrigger\n aria-label={\n projectLocked\n ? resolvedLabels.projectLocked\n : isUnavailable\n ? resolvedLabels.projectUnavailable\n : resolvedLabels.projectLabel\n }\n className={classNames?.trigger}\n >\n <span\n className=\"workspace-user-project-trigger-label\"\n data-workspace-user-project-trigger-label=\"true\"\n >\n {selectedProject || shouldShowLockedProjectPath ? (\n <FolderIcon aria-hidden className=\"shrink-0\" size={15} />\n ) : (\n <NoWorkspaceLinedIcon\n aria-hidden\n className=\"shrink-0\"\n data-agent-project-trigger-no-workspace-icon=\"true\"\n size={15}\n />\n )}\n <WorkspaceUserProjectOverflowLabel label={triggerLabel} />\n </span>\n </SelectTrigger>\n <SelectContent\n align={contentAlign}\n className={classNames?.content}\n collisionPadding={16}\n side={contentSide}\n sideOffset={contentSideOffset}\n >\n {visibleProjects.map((project) => {\n const projectLabel =\n resolveWorkspaceUserProjectDisplayLabel(project);\n return (\n <SelectItem\n className={classNames?.item}\n key={project.id || project.path}\n value={project.path}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n <FolderIcon aria-hidden size={15} />\n <WorkspaceUserProjectOverflowLabel label={projectLabel} />\n </span>\n </SelectItem>\n );\n })}\n {visibleProjects.length > 0 ? <SelectSeparator /> : null}\n {effectiveApi?.selectDirectory ? (\n <SelectItem\n className={classNames?.item}\n value={linkExistingProjectOptionValue}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n <LinkIcon aria-hidden size={15} />\n <span className=\"truncate\">\n {resolvedLabels.linkExistingProject}\n </span>\n </span>\n </SelectItem>\n ) : null}\n {showCreateProjectAction ? (\n <SelectItem\n className={classNames?.item}\n value={addProjectOptionValue}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n {renderAddProjectIcon?.() ?? (\n <NewWorkspaceLinedIcon\n aria-hidden\n data-workspace-user-project-add-icon=\"true\"\n size={15}\n />\n )}\n <span className=\"truncate\">{resolvedLabels.addProject}</span>\n </span>\n </SelectItem>\n ) : null}\n {showNoProjectAction ? (\n <SelectItem\n className={classNames?.item}\n value={noProjectOptionValue}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n <NoWorkspaceLinedIcon\n aria-hidden\n data-agent-project-no-workspace-icon=\"true\"\n size={15}\n />\n <span className=\"truncate\">{resolvedLabels.noProject}</span>\n </span>\n </SelectItem>\n ) : null}\n </SelectContent>\n </Select>\n {isProjectDialogOpen ? (\n <Dialog\n open\n onOpenChange={(nextOpen) => !nextOpen && closeProjectDialog()}\n >\n <DialogContent\n className=\"w-[480px] max-w-[calc(100vw-32px)] sm:max-w-[480px]\"\n showCloseButton={false}\n >\n <form className=\"grid gap-4\" onSubmit={submitProjectDialog}>\n <DialogHeader>\n <DialogTitle>{resolvedLabels.createProjectTitle}</DialogTitle>\n <DialogDescription>\n {resolvedLabels.createProjectNameLabel}\n </DialogDescription>\n </DialogHeader>\n <label className=\"grid gap-1.5\">\n <span className=\"sr-only\">\n {resolvedLabels.createProjectNameLabel}\n </span>\n <Input\n autoFocus\n className=\"h-10\"\n disabled={isCreatingProject}\n placeholder={resolvedLabels.createProjectNamePlaceholder}\n value={draftProjectName}\n onChange={(event) => {\n setDraftProjectName(event.target.value);\n if (projectCreationError) {\n setProjectCreationError(null);\n }\n }}\n />\n </label>\n {projectCreationError ? (\n <p className=\"text-[13px] text-[var(--state-danger)]\">\n {projectCreationError}\n </p>\n ) : null}\n <DialogFooter>\n <Button\n disabled={isCreatingProject}\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={closeProjectDialog}\n onPointerDown={(event) => {\n if (event.button === 0 && !isCreatingProject) {\n closeProjectDialog();\n }\n }}\n >\n {resolvedLabels.createProjectCancel}\n </Button>\n <Button\n disabled={isCreatingProject || !draftProjectName.trim()}\n size=\"dialog\"\n type=\"submit\"\n >\n {resolvedLabels.createProjectConfirm}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n ) : null}\n </>\n );\n}\n\nfunction WorkspaceUserProjectOverflowLabel({\n className,\n label\n}: {\n className?: string;\n label: string;\n}): React.JSX.Element {\n const rootRef = useRef<HTMLSpanElement | null>(null);\n const contentRef = useRef<HTMLSpanElement | null>(null);\n const updateMarqueeDistance = useCallback(() => {\n const root = rootRef.current;\n const content = contentRef.current;\n if (!root || !content) {\n return;\n }\n const overflowDistance = content.scrollWidth - root.clientWidth;\n if (overflowDistance <= 1) {\n root.style.setProperty(\n \"--workspace-user-project-label-marquee-distance\",\n \"0px\"\n );\n root.removeAttribute(\"data-overflow\");\n return;\n }\n root.style.setProperty(\n \"--workspace-user-project-label-marquee-distance\",\n `${-overflowDistance}px`\n );\n root.setAttribute(\"data-overflow\", \"true\");\n }, []);\n\n useEffect(() => {\n updateMarqueeDistance();\n\n const root = rootRef.current;\n const content = contentRef.current;\n if (!root || !content || typeof globalThis.ResizeObserver === \"undefined\") {\n return;\n }\n\n const observer = new globalThis.ResizeObserver(updateMarqueeDistance);\n observer.observe(root);\n observer.observe(content);\n return () => observer.disconnect();\n }, [label, updateMarqueeDistance]);\n\n return (\n <span\n ref={rootRef}\n className={cn(\"workspace-user-project-overflow-label\", className)}\n data-workspace-user-project-overflow-label=\"true\"\n onFocus={updateMarqueeDistance}\n onPointerEnter={updateMarqueeDistance}\n >\n <span\n ref={contentRef}\n className=\"workspace-user-project-overflow-label__content\"\n >\n {label}\n </span>\n </span>\n );\n}\n\nfunction createWorkspaceUserProjectApiAdapter(\n api: WorkspaceUserProjectApi | null | undefined,\n service: WorkspaceUserProjectService | null | undefined\n): WorkspaceUserProjectApi | null {\n if (!service) {\n return api ?? null;\n }\n const apiCheckPath = hasWorkspaceUserProjectMethod(api, \"checkPath\")\n ? (input: { path: string }) => api!.checkPath!(input)\n : undefined;\n const apiCreate = hasWorkspaceUserProjectMethod(api, \"create\")\n ? (input: { name: string }) => api!.create!(input)\n : undefined;\n const apiGetDefaultSelection = hasWorkspaceUserProjectMethod(\n api,\n \"getDefaultSelection\"\n )\n ? () => api!.getDefaultSelection!()\n : undefined;\n const apiIsNoProjectPath = hasWorkspaceUserProjectMethod(\n api,\n \"isNoProjectPath\"\n )\n ? (input: { path: string }) => api!.isNoProjectPath!(input)\n : undefined;\n const apiRememberDefaultSelection = hasWorkspaceUserProjectMethod(\n api,\n \"rememberDefaultSelection\"\n )\n ? (input: { path: string | null }) => api!.rememberDefaultSelection!(input)\n : undefined;\n const apiSelectDirectory = hasWorkspaceUserProjectMethod(\n api,\n \"selectDirectory\"\n )\n ? () => api!.selectDirectory!()\n : undefined;\n const apiUse = hasWorkspaceUserProjectMethod(api, \"use\")\n ? (input: { path: string }) => api!.use!(input)\n : undefined;\n return {\n checkPath: hasWorkspaceUserProjectMethod(service, \"checkProjectPath\")\n ? ({ path }) => service.checkProjectPath!(path)\n : apiCheckPath,\n create: hasWorkspaceUserProjectMethod(service, \"createProject\")\n ? ({ name }) => service.createProject!(name)\n : apiCreate,\n getDefaultSelection: hasWorkspaceUserProjectMethod(\n service,\n \"getDefaultSelection\"\n )\n ? () => service.getDefaultSelection!()\n : apiGetDefaultSelection,\n isNoProjectPath: hasWorkspaceUserProjectMethod(service, \"isNoProjectPath\")\n ? ({ path }) => service.isNoProjectPath!(path)\n : apiIsNoProjectPath,\n list: async () => {\n await (service.ensureLoaded?.() ?? service.refresh());\n return { projects: [...service.store.projects] };\n },\n prepareSelection: (input) => service.prepareSelection(input),\n rememberDefaultSelection: hasWorkspaceUserProjectMethod(\n service,\n \"rememberDefaultSelection\"\n )\n ? ({ path }) => service.rememberDefaultSelection!({ path })\n : apiRememberDefaultSelection,\n selectDirectory: hasWorkspaceUserProjectMethod(service, \"selectDirectory\")\n ? () => service.selectDirectory!()\n : apiSelectDirectory,\n use: hasWorkspaceUserProjectMethod(service, \"registerProjectPath\")\n ? ({ path }) => service.registerProjectPath!(path)\n : apiUse\n };\n}\n\nfunction hasWorkspaceUserProjectMethod(\n value: object | null | undefined,\n key: string\n): boolean {\n return value ? typeof Reflect.get(value, key) === \"function\" : false;\n}\n\nfunction setApiUnavailableUnlessService(\n setIsApiUnavailable: (value: boolean) => void,\n service: WorkspaceUserProjectService | null | undefined,\n value = true\n): void {\n if (!service) {\n setIsApiUnavailable(value);\n }\n}\n\nexport function resolveWorkspaceUserProjectSelectLabels(\n i18n: WorkspaceUserProjectI18nRuntime = defaultWorkspaceUserProjectSelectI18n,\n overrides?: WorkspaceUserProjectSelectLabelOverrides\n): WorkspaceUserProjectSelectLabels {\n return {\n addProject: overrides?.addProject ?? i18n.t(\"projectSelect.addProject\"),\n createProjectCancel:\n overrides?.createProjectCancel ??\n i18n.t(\"projectSelect.createProjectCancel\"),\n createProjectConfirm:\n overrides?.createProjectConfirm ??\n i18n.t(\"projectSelect.createProjectConfirm\"),\n createProjectDocumentsUnavailable:\n overrides?.createProjectDocumentsUnavailable ??\n i18n.t(\"projectSelect.createProjectDocumentsUnavailable\"),\n createProjectFailed:\n overrides?.createProjectFailed ??\n i18n.t(\"projectSelect.createProjectFailed\"),\n createProjectNameConflict:\n overrides?.createProjectNameConflict ??\n i18n.t(\"projectSelect.createProjectNameConflict\"),\n createProjectNameInvalid:\n overrides?.createProjectNameInvalid ??\n i18n.t(\"projectSelect.createProjectNameInvalid\"),\n createProjectNameLabel:\n overrides?.createProjectNameLabel ??\n i18n.t(\"projectSelect.createProjectNameLabel\"),\n createProjectNamePlaceholder:\n overrides?.createProjectNamePlaceholder ??\n i18n.t(\"projectSelect.createProjectNamePlaceholder\"),\n createProjectNameRequired:\n overrides?.createProjectNameRequired ??\n i18n.t(\"projectSelect.createProjectNameRequired\"),\n createProjectPermissionDenied:\n overrides?.createProjectPermissionDenied ??\n i18n.t(\"projectSelect.createProjectPermissionDenied\"),\n createProjectTitle:\n overrides?.createProjectTitle ??\n i18n.t(\"projectSelect.createProjectTitle\"),\n linkExistingProject:\n overrides?.linkExistingProject ??\n i18n.t(\"projectSelect.linkExistingProject\"),\n loadingProjects:\n overrides?.loadingProjects ?? i18n.t(\"projectSelect.loadingProjects\"),\n noProject: overrides?.noProject ?? i18n.t(\"projectSelect.noProject\"),\n projectLabel:\n overrides?.projectLabel ?? i18n.t(\"projectSelect.projectLabel\"),\n projectLocked:\n overrides?.projectLocked ?? i18n.t(\"projectSelect.projectLocked\"),\n projectMissingTitle:\n overrides?.projectMissingTitle ??\n i18n.t(\"projectSelect.projectMissingTitle\"),\n projectUnavailable:\n overrides?.projectUnavailable ??\n i18n.t(\"projectSelect.projectUnavailable\")\n };\n}\n\nfunction resolveProjectCreationErrorLabel(\n error: unknown,\n labels: WorkspaceUserProjectSelectLabels\n): string {\n switch (getWorkspaceUserProjectErrorCode(error)) {\n case \"EEXIST\":\n case \"project_directory_already_exists\":\n return labels.createProjectNameConflict;\n case \"project_name_invalid\":\n return labels.createProjectNameInvalid;\n case \"EACCES\":\n case \"EPERM\":\n case \"project_directory_permission_denied\":\n return labels.createProjectPermissionDenied;\n case \"ENOENT\":\n case \"project_documents_unavailable\":\n return labels.createProjectDocumentsUnavailable;\n default:\n return labels.createProjectFailed;\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/ui/internal/project/WorkspaceUserProjectSelect.tsx"],"sourcesContent":["import {\n type FormEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useEffectEvent,\n useMemo,\n useRef,\n useState\n} from \"react\";\nimport { useSnapshot } from \"valtio\";\nimport { proxy } from \"valtio/vanilla\";\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n FolderIcon,\n Input,\n LinkIcon,\n NewWorkspaceLinedIcon,\n NoWorkspaceLinedIcon,\n Select,\n SelectContent,\n SelectItem,\n SelectSeparator,\n SelectTrigger,\n cn\n} from \"@tutti-os/ui-system\";\nimport type {\n WorkspaceUserProject,\n WorkspaceUserProjectApi,\n WorkspaceUserProjectSelectionPreparation,\n WorkspaceUserProjectSelectionPreparationInput,\n WorkspaceUserProjectService\n} from \"../../../contracts/index.ts\";\nimport {\n basenameWorkspaceUserProjectPath,\n getWorkspaceUserProjectErrorCode,\n prepareWorkspaceUserProjectSelection,\n resolveWorkspaceUserProjectDisplayLabel,\n upsertWorkspaceUserProject\n} from \"../../../core/index.ts\";\nimport {\n createDefaultWorkspaceUserProjectI18nRuntime,\n type WorkspaceUserProjectI18nRuntime\n} from \"../../../i18n/index.ts\";\n\nexport type WorkspaceUserProjectSelectLabels = {\n addProject: string;\n createProjectCancel: string;\n createProjectConfirm: string;\n createProjectDocumentsUnavailable: string;\n createProjectFailed: string;\n createProjectNameConflict: string;\n createProjectNameInvalid: string;\n createProjectNameLabel: string;\n createProjectNamePlaceholder: string;\n createProjectNameRequired: string;\n createProjectPermissionDenied: string;\n createProjectTitle: string;\n linkExistingProject: string;\n loadingProjects: string;\n noProject: string;\n projectLabel: string;\n projectLocked: string;\n projectMissingTitle: string;\n projectUnavailable: string;\n};\n\nexport type WorkspaceUserProjectSelectLabelOverrides =\n Partial<WorkspaceUserProjectSelectLabels>;\n\nexport interface WorkspaceUserProjectSelectClassNames {\n content?: string;\n item?: string;\n trigger?: string;\n}\n\nexport type WorkspaceUserProjectSelectChangeAction =\n | \"clear\"\n | \"create_new\"\n | \"select_existing\";\n\nexport interface WorkspaceUserProjectSelectProps {\n api?: WorkspaceUserProjectApi | null;\n classNames?: WorkspaceUserProjectSelectClassNames;\n contentAlign?: \"center\" | \"end\" | \"start\";\n contentSide?: \"bottom\" | \"left\" | \"right\" | \"top\";\n contentSideOffset?: number;\n disabled?: boolean;\n i18n?: WorkspaceUserProjectI18nRuntime;\n labels?: WorkspaceUserProjectSelectLabelOverrides;\n onProjectMissingChange?: (isMissing: boolean) => void;\n onProjectPathChange: (\n path: string | null,\n metadata?: { action: WorkspaceUserProjectSelectChangeAction }\n ) => void;\n projectLocked?: boolean;\n renderAddProjectIcon?: () => ReactNode;\n shouldApplyPreparedSelection?: boolean;\n showKnownProjectOptions?: boolean;\n service?: WorkspaceUserProjectService | null;\n selectedProjectPath?: string | null;\n showCreateProjectAction?: boolean;\n showNoProjectAction?: boolean;\n unlistedProjectLabel?: string;\n}\n\nconst noProjectOptionValue = \"__tutti_no_project__\";\nconst addProjectOptionValue = \"__tutti_add_project__\";\nconst linkExistingProjectOptionValue = \"__tutti_link_existing_project__\";\nconst workspaceUserProjectOverflowLabelStyle = `\n@keyframes workspace-user-project-label-marquee {\n 0% {\n transform: translateX(0);\n }\n\n 44%,\n 56% {\n transform: translateX(var(--workspace-user-project-label-marquee-distance, 0px));\n }\n\n 88%,\n 100% {\n transform: translateX(0);\n }\n}\n\n.workspace-user-project-overflow-label {\n --workspace-user-project-label-marquee-distance: 0px;\n container-type: normal;\n display: block;\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n}\n\n.workspace-user-project-trigger-label {\n align-items: center;\n display: flex;\n flex: 1 1 auto;\n gap: 0.5rem;\n min-width: 0;\n}\n\n.workspace-user-project-overflow-label__content {\n display: block;\n max-width: 100%;\n min-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n transform: translateX(0);\n white-space: nowrap;\n width: max-content;\n}\n\n.workspace-user-project-overflow-label[data-overflow=\"true\"]:hover\n .workspace-user-project-overflow-label__content,\n[data-slot=\"select-item\"]:hover\n .workspace-user-project-overflow-label[data-overflow=\"true\"]\n .workspace-user-project-overflow-label__content {\n animation: workspace-user-project-label-marquee 14s linear infinite;\n max-width: none;\n overflow: visible;\n text-overflow: clip;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .workspace-user-project-overflow-label[data-overflow=\"true\"]:hover\n .workspace-user-project-overflow-label__content,\n [data-slot=\"select-item\"]:hover\n .workspace-user-project-overflow-label[data-overflow=\"true\"]\n .workspace-user-project-overflow-label__content {\n animation: none;\n }\n}\n`;\nconst defaultWorkspaceUserProjectSelectI18n =\n createDefaultWorkspaceUserProjectI18nRuntime();\nconst emptyWorkspaceUserProjectServiceSnapshot = proxy({\n error: null,\n initialized: false,\n isLoading: false,\n projects: [],\n revision: 0\n});\n\nexport function WorkspaceUserProjectSelect({\n api,\n classNames,\n contentAlign = \"start\",\n contentSide = \"top\",\n contentSideOffset = 4,\n disabled: disabledProp = false,\n i18n = defaultWorkspaceUserProjectSelectI18n,\n labels,\n onProjectMissingChange,\n onProjectPathChange,\n projectLocked = false,\n renderAddProjectIcon,\n shouldApplyPreparedSelection = true,\n showKnownProjectOptions = true,\n service,\n selectedProjectPath,\n showCreateProjectAction = hasWorkspaceUserProjectMethod(\n service,\n \"createProject\"\n ) || hasWorkspaceUserProjectMethod(api, \"create\"),\n showNoProjectAction = true,\n unlistedProjectLabel\n}: WorkspaceUserProjectSelectProps): React.JSX.Element {\n \"use memo\";\n const serviceSnapshot = useSnapshot(\n service?.store ?? emptyWorkspaceUserProjectServiceSnapshot\n );\n const effectiveApi = useMemo(\n () => createWorkspaceUserProjectApiAdapter(api, service),\n [api, service]\n );\n const resolvedLabels = useMemo(\n () => resolveWorkspaceUserProjectSelectLabels(i18n, labels),\n [i18n, labels]\n );\n const [apiProjects, setApiProjects] = useState<WorkspaceUserProject[]>([]);\n const [isApiLoading, setIsApiLoading] = useState(false);\n const [isApiUnavailable, setIsApiUnavailable] = useState(!effectiveApi);\n const [isProjectDialogOpen, setIsProjectDialogOpen] = useState(false);\n const [isSelectOpen, setIsSelectOpen] = useState(false);\n const [draftProjectName, setDraftProjectName] = useState(\"\");\n const [projectCreationError, setProjectCreationError] = useState<\n string | null\n >(null);\n const [isCreatingProject, setIsCreatingProject] = useState(false);\n const [suppressedSelectedPath, setSuppressedSelectedPath] = useState<\n string | null\n >(null);\n const [hasPinnedNoProjectSelection, setHasPinnedNoProjectSelection] =\n useState(false);\n const [isSelectedPathMissing, setIsSelectedPathMissing] = useState(false);\n const rawSelectedPath = selectedProjectPath?.trim() ?? \"\";\n const selectedPath =\n rawSelectedPath && rawSelectedPath === suppressedSelectedPath\n ? \"\"\n : rawSelectedPath;\n const projects = service ? [...serviceSnapshot.projects] : apiProjects;\n const visibleProjects = showKnownProjectOptions ? projects : [];\n const isLoading = service\n ? serviceSnapshot.isLoading && !serviceSnapshot.initialized\n : isApiLoading;\n const isUnavailable = service\n ? Boolean(serviceSnapshot.error) && !serviceSnapshot.initialized\n : isApiUnavailable;\n const selectedPathLabel =\n basenameWorkspaceUserProjectPath(selectedPath) || selectedPath;\n const selectedProject = showKnownProjectOptions\n ? (projects.find((project) => project.path === selectedPath) ?? null)\n : null;\n const selectedProjectLabel = selectedProject\n ? resolveWorkspaceUserProjectDisplayLabel(selectedProject)\n : \"\";\n const isSelectedNoProjectPath =\n projectLocked &&\n Boolean(selectedPath) &&\n Boolean(effectiveApi?.isNoProjectPath?.({ path: selectedPath }));\n const shouldShowMissingProjectNotice = isSelectedPathMissing;\n const shouldShowLockedProjectPath =\n projectLocked &&\n selectedPath !== \"\" &&\n !isSelectedNoProjectPath &&\n !selectedProject &&\n !isSelectedPathMissing;\n const selectValue = selectedProject\n ? selectedProject.path\n : noProjectOptionValue;\n const triggerLabel = shouldShowMissingProjectNotice\n ? resolvedLabels.projectMissingTitle\n : isSelectedNoProjectPath\n ? resolvedLabels.noProject\n : shouldShowLockedProjectPath\n ? selectedPathLabel\n : selectedProject\n ? selectedProjectLabel\n : selectedPath\n ? unlistedProjectLabel || selectedPathLabel\n : isLoading\n ? resolvedLabels.loadingProjects\n : resolvedLabels.noProject;\n const shouldDisableWhileLoading =\n showKnownProjectOptions || shouldApplyPreparedSelection;\n const disabled =\n disabledProp ||\n projectLocked ||\n (shouldDisableWhileLoading && isLoading) ||\n !effectiveApi;\n\n useEffect(() => {\n if (!disabled || !isSelectOpen) {\n return;\n }\n setIsSelectOpen(false);\n }, [disabled, isSelectOpen]);\n\n useEffect(() => {\n onProjectMissingChange?.(shouldShowMissingProjectNotice);\n }, [onProjectMissingChange, shouldShowMissingProjectNotice]);\n\n useEffect(() => {\n if (rawSelectedPath) {\n setHasPinnedNoProjectSelection(false);\n }\n if (\n suppressedSelectedPath &&\n (!rawSelectedPath || rawSelectedPath !== suppressedSelectedPath)\n ) {\n setSuppressedSelectedPath(null);\n }\n }, [rawSelectedPath, suppressedSelectedPath]);\n\n const applyPreparedSelection = useEffectEvent(\n (prepared: WorkspaceUserProjectSelectionPreparation): void => {\n if (!service) {\n setApiProjects(prepared.projects);\n }\n setIsSelectedPathMissing(prepared.isSelectedPathMissing);\n if (!shouldApplyPreparedSelection) {\n return;\n }\n if (prepared.selection.kind === \"clear\") {\n setHasPinnedNoProjectSelection(true);\n setSuppressedSelectedPath(prepared.selection.suppressedPath);\n onProjectPathChange(null);\n return;\n }\n if (prepared.selection.kind === \"select\") {\n setHasPinnedNoProjectSelection(false);\n onProjectPathChange(prepared.selection.path);\n }\n }\n );\n\n useEffect(() => {\n let canceled = false;\n if (!effectiveApi) {\n setApiUnavailableUnlessService(setIsApiUnavailable, service);\n return;\n }\n if (hasPinnedNoProjectSelection) {\n return;\n }\n setIsApiLoading(true);\n setApiUnavailableUnlessService(setIsApiUnavailable, service, false);\n const input = {\n projectLocked,\n selectedPath\n } satisfies WorkspaceUserProjectSelectionPreparationInput;\n void prepareWorkspaceUserProjectSelection(effectiveApi, input)\n .then((prepared) => {\n if (!canceled) {\n applyPreparedSelection(prepared);\n }\n })\n .catch(() => {\n if (!canceled) {\n setApiUnavailableUnlessService(setIsApiUnavailable, service);\n }\n })\n .finally(() => {\n if (!canceled) {\n setIsApiLoading(false);\n }\n });\n return () => {\n canceled = true;\n };\n }, [\n effectiveApi,\n hasPinnedNoProjectSelection,\n projectLocked,\n selectedPath,\n serviceSnapshot.revision,\n service\n ]);\n\n const refreshPreparedSelection = useCallback((): void => {\n if (!effectiveApi) {\n return;\n }\n const input = {\n projectLocked,\n selectedPath\n } satisfies WorkspaceUserProjectSelectionPreparationInput;\n void prepareWorkspaceUserProjectSelection(effectiveApi, input).then(\n applyPreparedSelection,\n () => {\n setApiUnavailableUnlessService(setIsApiUnavailable, service);\n }\n );\n }, [\n effectiveApi,\n projectLocked,\n selectedPath,\n service,\n shouldApplyPreparedSelection\n ]);\n\n const useProjectPath = useCallback(\n async (\n path: string,\n action: WorkspaceUserProjectSelectChangeAction\n ): Promise<void> => {\n if (!effectiveApi) {\n setApiUnavailableUnlessService(setIsApiUnavailable, service);\n return;\n }\n try {\n const project =\n (await effectiveApi.use?.({ path })) ??\n ({\n id: path,\n label: path,\n path\n } satisfies WorkspaceUserProject);\n setApiProjects((current) =>\n upsertWorkspaceUserProject(current, project)\n );\n setHasPinnedNoProjectSelection(false);\n onProjectPathChange(project.path, { action });\n refreshPreparedSelection();\n } catch {\n setApiUnavailableUnlessService(setIsApiUnavailable, service);\n }\n },\n [effectiveApi, onProjectPathChange, refreshPreparedSelection, service]\n );\n\n const createProject = useCallback(async (): Promise<void> => {\n const name = draftProjectName.trim();\n if (!effectiveApi?.create) {\n setProjectCreationError(resolvedLabels.createProjectFailed);\n setApiUnavailableUnlessService(setIsApiUnavailable, service);\n return;\n }\n if (!name) {\n setProjectCreationError(resolvedLabels.createProjectNameRequired);\n return;\n }\n setIsCreatingProject(true);\n setProjectCreationError(null);\n try {\n const project = await effectiveApi.create({ name });\n setApiProjects((current) => upsertWorkspaceUserProject(current, project));\n setHasPinnedNoProjectSelection(false);\n onProjectPathChange(project.path, { action: \"create_new\" });\n setDraftProjectName(\"\");\n setIsProjectDialogOpen(false);\n refreshPreparedSelection();\n } catch (error) {\n setProjectCreationError(\n resolveProjectCreationErrorLabel(error, resolvedLabels)\n );\n } finally {\n setIsCreatingProject(false);\n }\n }, [\n effectiveApi,\n draftProjectName,\n onProjectPathChange,\n refreshPreparedSelection,\n resolvedLabels,\n service\n ]);\n\n const submitProjectDialog = (event: FormEvent<HTMLFormElement>): void => {\n event.preventDefault();\n void createProject();\n };\n\n const closeProjectDialog = (): void => {\n setIsProjectDialogOpen(false);\n setProjectCreationError(null);\n };\n\n const handleProjectValueChange = (nextValue: string): void => {\n if (!effectiveApi || projectLocked) {\n return;\n }\n if (nextValue === noProjectOptionValue) {\n void effectiveApi.rememberDefaultSelection?.({ path: null });\n setHasPinnedNoProjectSelection(true);\n onProjectPathChange(null, { action: \"clear\" });\n return;\n }\n if (nextValue === addProjectOptionValue) {\n setDraftProjectName(\"\");\n setProjectCreationError(null);\n setIsProjectDialogOpen(true);\n return;\n }\n if (nextValue === linkExistingProjectOptionValue) {\n void Promise.resolve(effectiveApi.selectDirectory?.())\n .then((selection) => {\n const path = selection?.path?.trim() ?? \"\";\n if (!path) {\n return;\n }\n void useProjectPath(path, \"select_existing\");\n })\n .catch(() => {});\n return;\n }\n const knownProject = projects.find((project) => project.path === nextValue);\n if (knownProject) {\n void effectiveApi.rememberDefaultSelection?.({ path: knownProject.path });\n setHasPinnedNoProjectSelection(false);\n onProjectPathChange(knownProject.path, { action: \"select_existing\" });\n return;\n }\n void useProjectPath(nextValue, \"select_existing\");\n };\n\n return (\n <>\n <style>{workspaceUserProjectOverflowLabelStyle}</style>\n <Select\n disabled={disabled}\n open={isSelectOpen}\n value={selectValue}\n onOpenChange={setIsSelectOpen}\n onValueChange={handleProjectValueChange}\n >\n <SelectTrigger\n aria-label={\n projectLocked\n ? resolvedLabels.projectLocked\n : isUnavailable\n ? resolvedLabels.projectUnavailable\n : resolvedLabels.projectLabel\n }\n className={classNames?.trigger}\n >\n <span\n className=\"workspace-user-project-trigger-label\"\n data-workspace-user-project-trigger-label=\"true\"\n >\n {selectedProject || shouldShowLockedProjectPath ? (\n <FolderIcon aria-hidden className=\"shrink-0\" size={15} />\n ) : (\n <NoWorkspaceLinedIcon\n aria-hidden\n className=\"shrink-0\"\n data-agent-project-trigger-no-workspace-icon=\"true\"\n size={15}\n />\n )}\n <WorkspaceUserProjectOverflowLabel label={triggerLabel} />\n </span>\n </SelectTrigger>\n {isSelectOpen ? (\n <SelectContent\n align={contentAlign}\n className={classNames?.content}\n collisionPadding={16}\n side={contentSide}\n sideOffset={contentSideOffset}\n >\n {visibleProjects.map((project) => {\n const projectLabel =\n resolveWorkspaceUserProjectDisplayLabel(project);\n return (\n <SelectItem\n className={classNames?.item}\n key={project.id || project.path}\n value={project.path}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n <FolderIcon aria-hidden size={15} />\n <WorkspaceUserProjectOverflowLabel label={projectLabel} />\n </span>\n </SelectItem>\n );\n })}\n {visibleProjects.length > 0 ? <SelectSeparator /> : null}\n {effectiveApi?.selectDirectory ? (\n <SelectItem\n className={classNames?.item}\n value={linkExistingProjectOptionValue}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n <LinkIcon aria-hidden size={15} />\n <span className=\"truncate\">\n {resolvedLabels.linkExistingProject}\n </span>\n </span>\n </SelectItem>\n ) : null}\n {showCreateProjectAction ? (\n <SelectItem\n className={classNames?.item}\n value={addProjectOptionValue}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n {renderAddProjectIcon?.() ?? (\n <NewWorkspaceLinedIcon\n aria-hidden\n data-workspace-user-project-add-icon=\"true\"\n size={15}\n />\n )}\n <span className=\"truncate\">{resolvedLabels.addProject}</span>\n </span>\n </SelectItem>\n ) : null}\n {showNoProjectAction ? (\n <SelectItem\n className={classNames?.item}\n value={noProjectOptionValue}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n <NoWorkspaceLinedIcon\n aria-hidden\n data-agent-project-no-workspace-icon=\"true\"\n size={15}\n />\n <span className=\"truncate\">{resolvedLabels.noProject}</span>\n </span>\n </SelectItem>\n ) : null}\n </SelectContent>\n ) : null}\n </Select>\n {isProjectDialogOpen ? (\n <Dialog\n open\n onOpenChange={(nextOpen) => !nextOpen && closeProjectDialog()}\n >\n <DialogContent\n className=\"w-[480px] max-w-[calc(100vw-32px)] sm:max-w-[480px]\"\n showCloseButton={false}\n >\n <form className=\"grid gap-4\" onSubmit={submitProjectDialog}>\n <DialogHeader>\n <DialogTitle>{resolvedLabels.createProjectTitle}</DialogTitle>\n <DialogDescription>\n {resolvedLabels.createProjectNameLabel}\n </DialogDescription>\n </DialogHeader>\n <label className=\"grid gap-1.5\">\n <span className=\"sr-only\">\n {resolvedLabels.createProjectNameLabel}\n </span>\n <Input\n autoFocus\n className=\"h-10\"\n disabled={isCreatingProject}\n placeholder={resolvedLabels.createProjectNamePlaceholder}\n value={draftProjectName}\n onChange={(event) => {\n setDraftProjectName(event.target.value);\n if (projectCreationError) {\n setProjectCreationError(null);\n }\n }}\n />\n </label>\n {projectCreationError ? (\n <p className=\"text-[13px] text-[var(--state-danger)]\">\n {projectCreationError}\n </p>\n ) : null}\n <DialogFooter>\n <Button\n disabled={isCreatingProject}\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={closeProjectDialog}\n onPointerDown={(event) => {\n if (event.button === 0 && !isCreatingProject) {\n closeProjectDialog();\n }\n }}\n >\n {resolvedLabels.createProjectCancel}\n </Button>\n <Button\n disabled={isCreatingProject || !draftProjectName.trim()}\n size=\"dialog\"\n type=\"submit\"\n >\n {resolvedLabels.createProjectConfirm}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n ) : null}\n </>\n );\n}\n\nfunction WorkspaceUserProjectOverflowLabel({\n className,\n label\n}: {\n className?: string;\n label: string;\n}): React.JSX.Element {\n const rootRef = useRef<HTMLSpanElement | null>(null);\n const contentRef = useRef<HTMLSpanElement | null>(null);\n const updateMarqueeDistance = useCallback(() => {\n const root = rootRef.current;\n const content = contentRef.current;\n if (!root || !content) {\n return;\n }\n const overflowDistance = content.scrollWidth - root.clientWidth;\n if (overflowDistance <= 1) {\n root.style.setProperty(\n \"--workspace-user-project-label-marquee-distance\",\n \"0px\"\n );\n root.removeAttribute(\"data-overflow\");\n return;\n }\n root.style.setProperty(\n \"--workspace-user-project-label-marquee-distance\",\n `${-overflowDistance}px`\n );\n root.setAttribute(\"data-overflow\", \"true\");\n }, []);\n\n useEffect(() => {\n updateMarqueeDistance();\n\n const root = rootRef.current;\n const content = contentRef.current;\n if (!root || !content || typeof globalThis.ResizeObserver === \"undefined\") {\n return;\n }\n\n const observer = new globalThis.ResizeObserver(updateMarqueeDistance);\n observer.observe(root);\n observer.observe(content);\n return () => observer.disconnect();\n }, [label, updateMarqueeDistance]);\n\n return (\n <span\n ref={rootRef}\n className={cn(\"workspace-user-project-overflow-label\", className)}\n data-workspace-user-project-overflow-label=\"true\"\n onFocus={updateMarqueeDistance}\n onPointerEnter={updateMarqueeDistance}\n >\n <span\n ref={contentRef}\n className=\"workspace-user-project-overflow-label__content\"\n >\n {label}\n </span>\n </span>\n );\n}\n\nfunction createWorkspaceUserProjectApiAdapter(\n api: WorkspaceUserProjectApi | null | undefined,\n service: WorkspaceUserProjectService | null | undefined\n): WorkspaceUserProjectApi | null {\n if (!service) {\n return api ?? null;\n }\n const apiCheckPath = hasWorkspaceUserProjectMethod(api, \"checkPath\")\n ? (input: { path: string }) => api!.checkPath!(input)\n : undefined;\n const apiCreate = hasWorkspaceUserProjectMethod(api, \"create\")\n ? (input: { name: string }) => api!.create!(input)\n : undefined;\n const apiGetDefaultSelection = hasWorkspaceUserProjectMethod(\n api,\n \"getDefaultSelection\"\n )\n ? () => api!.getDefaultSelection!()\n : undefined;\n const apiIsNoProjectPath = hasWorkspaceUserProjectMethod(\n api,\n \"isNoProjectPath\"\n )\n ? (input: { path: string }) => api!.isNoProjectPath!(input)\n : undefined;\n const apiRememberDefaultSelection = hasWorkspaceUserProjectMethod(\n api,\n \"rememberDefaultSelection\"\n )\n ? (input: { path: string | null }) => api!.rememberDefaultSelection!(input)\n : undefined;\n const apiSelectDirectory = hasWorkspaceUserProjectMethod(\n api,\n \"selectDirectory\"\n )\n ? () => api!.selectDirectory!()\n : undefined;\n const apiUse = hasWorkspaceUserProjectMethod(api, \"use\")\n ? (input: { path: string }) => api!.use!(input)\n : undefined;\n return {\n checkPath: hasWorkspaceUserProjectMethod(service, \"checkProjectPath\")\n ? ({ path }) => service.checkProjectPath!(path)\n : apiCheckPath,\n create: hasWorkspaceUserProjectMethod(service, \"createProject\")\n ? ({ name }) => service.createProject!(name)\n : apiCreate,\n getDefaultSelection: hasWorkspaceUserProjectMethod(\n service,\n \"getDefaultSelection\"\n )\n ? () => service.getDefaultSelection!()\n : apiGetDefaultSelection,\n isNoProjectPath: hasWorkspaceUserProjectMethod(service, \"isNoProjectPath\")\n ? ({ path }) => service.isNoProjectPath!(path)\n : apiIsNoProjectPath,\n list: async () => {\n await (service.ensureLoaded?.() ?? service.refresh());\n return { projects: [...service.store.projects] };\n },\n prepareSelection: (input) => service.prepareSelection(input),\n rememberDefaultSelection: hasWorkspaceUserProjectMethod(\n service,\n \"rememberDefaultSelection\"\n )\n ? ({ path }) => service.rememberDefaultSelection!({ path })\n : apiRememberDefaultSelection,\n selectDirectory: hasWorkspaceUserProjectMethod(service, \"selectDirectory\")\n ? () => service.selectDirectory!()\n : apiSelectDirectory,\n use: hasWorkspaceUserProjectMethod(service, \"registerProjectPath\")\n ? ({ path }) => service.registerProjectPath!(path)\n : apiUse\n };\n}\n\nfunction hasWorkspaceUserProjectMethod(\n value: object | null | undefined,\n key: string\n): boolean {\n return value ? typeof Reflect.get(value, key) === \"function\" : false;\n}\n\nfunction setApiUnavailableUnlessService(\n setIsApiUnavailable: (value: boolean) => void,\n service: WorkspaceUserProjectService | null | undefined,\n value = true\n): void {\n if (!service) {\n setIsApiUnavailable(value);\n }\n}\n\nexport function resolveWorkspaceUserProjectSelectLabels(\n i18n: WorkspaceUserProjectI18nRuntime = defaultWorkspaceUserProjectSelectI18n,\n overrides?: WorkspaceUserProjectSelectLabelOverrides\n): WorkspaceUserProjectSelectLabels {\n return {\n addProject: overrides?.addProject ?? i18n.t(\"projectSelect.addProject\"),\n createProjectCancel:\n overrides?.createProjectCancel ??\n i18n.t(\"projectSelect.createProjectCancel\"),\n createProjectConfirm:\n overrides?.createProjectConfirm ??\n i18n.t(\"projectSelect.createProjectConfirm\"),\n createProjectDocumentsUnavailable:\n overrides?.createProjectDocumentsUnavailable ??\n i18n.t(\"projectSelect.createProjectDocumentsUnavailable\"),\n createProjectFailed:\n overrides?.createProjectFailed ??\n i18n.t(\"projectSelect.createProjectFailed\"),\n createProjectNameConflict:\n overrides?.createProjectNameConflict ??\n i18n.t(\"projectSelect.createProjectNameConflict\"),\n createProjectNameInvalid:\n overrides?.createProjectNameInvalid ??\n i18n.t(\"projectSelect.createProjectNameInvalid\"),\n createProjectNameLabel:\n overrides?.createProjectNameLabel ??\n i18n.t(\"projectSelect.createProjectNameLabel\"),\n createProjectNamePlaceholder:\n overrides?.createProjectNamePlaceholder ??\n i18n.t(\"projectSelect.createProjectNamePlaceholder\"),\n createProjectNameRequired:\n overrides?.createProjectNameRequired ??\n i18n.t(\"projectSelect.createProjectNameRequired\"),\n createProjectPermissionDenied:\n overrides?.createProjectPermissionDenied ??\n i18n.t(\"projectSelect.createProjectPermissionDenied\"),\n createProjectTitle:\n overrides?.createProjectTitle ??\n i18n.t(\"projectSelect.createProjectTitle\"),\n linkExistingProject:\n overrides?.linkExistingProject ??\n i18n.t(\"projectSelect.linkExistingProject\"),\n loadingProjects:\n overrides?.loadingProjects ?? i18n.t(\"projectSelect.loadingProjects\"),\n noProject: overrides?.noProject ?? i18n.t(\"projectSelect.noProject\"),\n projectLabel:\n overrides?.projectLabel ?? i18n.t(\"projectSelect.projectLabel\"),\n projectLocked:\n overrides?.projectLocked ?? i18n.t(\"projectSelect.projectLocked\"),\n projectMissingTitle:\n overrides?.projectMissingTitle ??\n i18n.t(\"projectSelect.projectMissingTitle\"),\n projectUnavailable:\n overrides?.projectUnavailable ??\n i18n.t(\"projectSelect.projectUnavailable\")\n };\n}\n\nfunction resolveProjectCreationErrorLabel(\n error: unknown,\n labels: WorkspaceUserProjectSelectLabels\n): string {\n switch (getWorkspaceUserProjectErrorCode(error)) {\n case \"EEXIST\":\n case \"project_directory_already_exists\":\n return labels.createProjectNameConflict;\n case \"project_name_invalid\":\n return labels.createProjectNameInvalid;\n case \"EACCES\":\n case \"EPERM\":\n case \"project_directory_permission_denied\":\n return labels.createProjectPermissionDenied;\n case \"ENOENT\":\n case \"project_documents_unavailable\":\n return labels.createProjectDocumentsUnavailable;\n default:\n return labels.createProjectFailed;\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tutti-os/workspace-user-project",
3
- "version": "0.0.11",
3
+ "version": "0.0.13",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -36,8 +36,8 @@
36
36
  "directory": "packages/workspace/user-project"
37
37
  },
38
38
  "dependencies": {
39
- "@tutti-os/ui-i18n-runtime": "0.0.11",
40
- "@tutti-os/ui-system": "0.0.11",
39
+ "@tutti-os/ui-i18n-runtime": "0.0.13",
40
+ "@tutti-os/ui-system": "0.0.13",
41
41
  "valtio": "^2.3.2"
42
42
  },
43
43
  "devDependencies": {