@arbidocs/blocks 0.5.96 → 0.5.97
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/README.md +8 -1
- package/dist/{ConnectedCallDock-D4DG4VDA.cjs → ConnectedCallDock-HI2KMQZ3.cjs} +12 -12
- package/dist/{ConnectedCallDock-D4DG4VDA.cjs.map → ConnectedCallDock-HI2KMQZ3.cjs.map} +1 -1
- package/dist/{ConnectedCallDock-VVZUSFFK.js → ConnectedCallDock-Y64FTKFF.js} +11 -11
- package/dist/{ConnectedCallDock-VVZUSFFK.js.map → ConnectedCallDock-Y64FTKFF.js.map} +1 -1
- package/dist/{ConnectedCallRoom-EDHNAJHA.js → ConnectedCallRoom-LEBIJGFT.js} +11 -11
- package/dist/{ConnectedCallRoom-EDHNAJHA.js.map → ConnectedCallRoom-LEBIJGFT.js.map} +1 -1
- package/dist/{ConnectedCallRoom-VDQD25QW.cjs → ConnectedCallRoom-UXIJJKNG.cjs} +12 -12
- package/dist/{ConnectedCallRoom-VDQD25QW.cjs.map → ConnectedCallRoom-UXIJJKNG.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-IS27M6FV.js → ConnectedNativeDocxComparison-6KL5XI3L.js} +10 -10
- package/dist/{ConnectedNativeDocxComparison-IS27M6FV.js.map → ConnectedNativeDocxComparison-6KL5XI3L.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-ADQURGHU.cjs → ConnectedNativeDocxComparison-P346QOX5.cjs} +11 -11
- package/dist/{ConnectedNativeDocxComparison-ADQURGHU.cjs.map → ConnectedNativeDocxComparison-P346QOX5.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-7EQ6DE3Q.cjs → ConnectedNativeDocxEditor-7JHSQ6KI.cjs} +11 -11
- package/dist/{ConnectedNativeDocxEditor-7EQ6DE3Q.cjs.map → ConnectedNativeDocxEditor-7JHSQ6KI.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-JYXGX55F.js → ConnectedNativeDocxEditor-ATZ2TG2L.js} +9 -9
- package/dist/{ConnectedNativeDocxEditor-JYXGX55F.js.map → ConnectedNativeDocxEditor-ATZ2TG2L.js.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-IYAQ2L7G.cjs → ConnectedStreamedWordArtifact-5HI3WSAJ.cjs} +11 -11
- package/dist/ConnectedStreamedWordArtifact-5HI3WSAJ.cjs.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-KLLG6W5L.js → ConnectedStreamedWordArtifact-FHSGQHXQ.js} +10 -10
- package/dist/ConnectedStreamedWordArtifact-FHSGQHXQ.js.map +1 -0
- package/dist/{DocumentReviewCard-FEVDNY6U.js → DocumentReviewCard-7UFQGDOG.js} +6 -6
- package/dist/{DocumentReviewCard-FEVDNY6U.js.map → DocumentReviewCard-7UFQGDOG.js.map} +1 -1
- package/dist/{DocumentReviewCard-3H66FMMO.cjs → DocumentReviewCard-E3HB3K2G.cjs} +6 -6
- package/dist/{DocumentReviewCard-3H66FMMO.cjs.map → DocumentReviewCard-E3HB3K2G.cjs.map} +1 -1
- package/dist/{FilesViewerDialog-DSK5HMLL.cjs → FilesViewerDialog-3KWTQARB.cjs} +12 -12
- package/dist/{FilesViewerDialog-DSK5HMLL.cjs.map → FilesViewerDialog-3KWTQARB.cjs.map} +1 -1
- package/dist/{FilesViewerDialog-HL4E57K5.js → FilesViewerDialog-EQKBFAWI.js} +10 -10
- package/dist/{FilesViewerDialog-HL4E57K5.js.map → FilesViewerDialog-EQKBFAWI.js.map} +1 -1
- package/dist/{WorkspaceTableView-X3KZ7YFI.js → WorkspaceTableView-DYABS53K.js} +6 -6
- package/dist/{WorkspaceTableView-X3KZ7YFI.js.map → WorkspaceTableView-DYABS53K.js.map} +1 -1
- package/dist/{WorkspaceTableView-5DWNJN6J.cjs → WorkspaceTableView-ZIQ7JWT5.cjs} +8 -8
- package/dist/{WorkspaceTableView-5DWNJN6J.cjs.map → WorkspaceTableView-ZIQ7JWT5.cjs.map} +1 -1
- package/dist/agents/index.cjs +255 -255
- package/dist/agents/index.js +5 -5
- package/dist/agents/workflows/WorkflowStepAction.d.ts +9 -2
- package/dist/agents/workflows/requiredLabels.d.ts +7 -2
- package/dist/calls/index.cjs +2 -2
- package/dist/calls/index.js +2 -2
- package/dist/{chunk-VSZPY4LK.js → chunk-42IVGYNL.js} +5 -5
- package/dist/{chunk-VSZPY4LK.js.map → chunk-42IVGYNL.js.map} +1 -1
- package/dist/{chunk-GEUP5IV7.js → chunk-4LTDELP2.js} +3 -3
- package/dist/{chunk-GEUP5IV7.js.map → chunk-4LTDELP2.js.map} +1 -1
- package/dist/{chunk-HA27RMKD.js → chunk-4RCLA52C.js} +7 -7
- package/dist/{chunk-HA27RMKD.js.map → chunk-4RCLA52C.js.map} +1 -1
- package/dist/{chunk-6NMLRGUJ.cjs → chunk-6IS3IRUF.cjs} +4 -4
- package/dist/{chunk-6NMLRGUJ.cjs.map → chunk-6IS3IRUF.cjs.map} +1 -1
- package/dist/{chunk-KQUFEMPP.js → chunk-76O7J6IZ.js} +3 -3
- package/dist/{chunk-KQUFEMPP.js.map → chunk-76O7J6IZ.js.map} +1 -1
- package/dist/{chunk-5YIUHRTR.cjs → chunk-AINS6VU6.cjs} +4 -4
- package/dist/{chunk-5YIUHRTR.cjs.map → chunk-AINS6VU6.cjs.map} +1 -1
- package/dist/{chunk-ZA3ZELSH.cjs → chunk-CCALU47C.cjs} +5 -5
- package/dist/{chunk-ZA3ZELSH.cjs.map → chunk-CCALU47C.cjs.map} +1 -1
- package/dist/{chunk-BAJNXRI5.cjs → chunk-DDIV3MYQ.cjs} +5 -5
- package/dist/{chunk-BAJNXRI5.cjs.map → chunk-DDIV3MYQ.cjs.map} +1 -1
- package/dist/{chunk-ZJ3NII4U.cjs → chunk-ECCV4YOL.cjs} +9 -9
- package/dist/{chunk-ZJ3NII4U.cjs.map → chunk-ECCV4YOL.cjs.map} +1 -1
- package/dist/{chunk-S2CKH2LH.js → chunk-FNGFSHVE.js} +3 -3
- package/dist/{chunk-S2CKH2LH.js.map → chunk-FNGFSHVE.js.map} +1 -1
- package/dist/{chunk-CMMFXSTS.cjs → chunk-HXWBXYVN.cjs} +3 -3
- package/dist/{chunk-CMMFXSTS.cjs.map → chunk-HXWBXYVN.cjs.map} +1 -1
- package/dist/{chunk-NRE7ZR6M.js → chunk-ITK7GW7B.js} +3 -3
- package/dist/{chunk-NRE7ZR6M.js.map → chunk-ITK7GW7B.js.map} +1 -1
- package/dist/{chunk-FAKRTCAL.cjs → chunk-J4CXF4A7.cjs} +172 -14
- package/dist/chunk-J4CXF4A7.cjs.map +1 -0
- package/dist/{chunk-AS3HX7LL.js → chunk-K6UKLIRR.js} +3 -3
- package/dist/{chunk-AS3HX7LL.js.map → chunk-K6UKLIRR.js.map} +1 -1
- package/dist/{chunk-RMJNCYPD.js → chunk-KJLHFS7T.js} +3 -3
- package/dist/{chunk-RMJNCYPD.js.map → chunk-KJLHFS7T.js.map} +1 -1
- package/dist/{chunk-4DRLOAVD.js → chunk-LZI4EGOW.js} +209 -56
- package/dist/chunk-LZI4EGOW.js.map +1 -0
- package/dist/{chunk-6OXR4R6J.cjs → chunk-MMSHLHTA.cjs} +3 -3
- package/dist/{chunk-6OXR4R6J.cjs.map → chunk-MMSHLHTA.cjs.map} +1 -1
- package/dist/{chunk-VEK64VEE.js → chunk-N77UYRV7.js} +3 -3
- package/dist/{chunk-VEK64VEE.js.map → chunk-N77UYRV7.js.map} +1 -1
- package/dist/{chunk-64KZM3RZ.cjs → chunk-NZQZ2HFU.cjs} +3 -3
- package/dist/{chunk-64KZM3RZ.cjs.map → chunk-NZQZ2HFU.cjs.map} +1 -1
- package/dist/{chunk-7XVQATK2.cjs → chunk-OXHAUVK2.cjs} +3 -3
- package/dist/{chunk-7XVQATK2.cjs.map → chunk-OXHAUVK2.cjs.map} +1 -1
- package/dist/{chunk-YIKE2IY4.js → chunk-QSBPOYWA.js} +3 -3
- package/dist/{chunk-YIKE2IY4.js.map → chunk-QSBPOYWA.js.map} +1 -1
- package/dist/{chunk-NCGJKKGR.js → chunk-RQW2CFOQ.js} +9 -9
- package/dist/{chunk-NCGJKKGR.js.map → chunk-RQW2CFOQ.js.map} +1 -1
- package/dist/{chunk-DCNBNLWC.js → chunk-RZG4ALKZ.js} +4 -4
- package/dist/{chunk-DCNBNLWC.js.map → chunk-RZG4ALKZ.js.map} +1 -1
- package/dist/{chunk-O2ATVRRO.cjs → chunk-SDXK2COQ.cjs} +27 -27
- package/dist/{chunk-O2ATVRRO.cjs.map → chunk-SDXK2COQ.cjs.map} +1 -1
- package/dist/{chunk-CVYFX7AD.js → chunk-SEBNGA3F.js} +31 -15
- package/dist/chunk-SEBNGA3F.js.map +1 -0
- package/dist/{chunk-ZBQTFA5X.cjs → chunk-SYWJNSPS.cjs} +4 -4
- package/dist/{chunk-ZBQTFA5X.cjs.map → chunk-SYWJNSPS.cjs.map} +1 -1
- package/dist/{chunk-2JXJE7Y4.js → chunk-T7LLYVOW.js} +168 -10
- package/dist/chunk-T7LLYVOW.js.map +1 -0
- package/dist/{chunk-TANZTMPL.cjs → chunk-V2CNHRLZ.cjs} +4 -4
- package/dist/{chunk-TANZTMPL.cjs.map → chunk-V2CNHRLZ.cjs.map} +1 -1
- package/dist/{chunk-IMFE6FKN.cjs → chunk-WN7XPEYK.cjs} +7 -7
- package/dist/{chunk-IMFE6FKN.cjs.map → chunk-WN7XPEYK.cjs.map} +1 -1
- package/dist/{chunk-KVKKVSBT.cjs → chunk-XM4KRGCK.cjs} +252 -99
- package/dist/chunk-XM4KRGCK.cjs.map +1 -0
- package/dist/{chunk-MB2OXZEA.cjs → chunk-XTCNETMI.cjs} +4 -4
- package/dist/{chunk-MB2OXZEA.cjs.map → chunk-XTCNETMI.cjs.map} +1 -1
- package/dist/{chunk-4HMJQ66B.js → chunk-Y7UHKEVT.js} +4 -4
- package/dist/{chunk-4HMJQ66B.js.map → chunk-Y7UHKEVT.js.map} +1 -1
- package/dist/{chunk-CIXA5A65.cjs → chunk-YZ6YOOTF.cjs} +30 -14
- package/dist/chunk-YZ6YOOTF.cjs.map +1 -0
- package/dist/{chunk-QJVDQAYQ.js → chunk-Z4IPTLRS.js} +3 -3
- package/dist/{chunk-QJVDQAYQ.js.map → chunk-Z4IPTLRS.js.map} +1 -1
- package/dist/collaboration/index.cjs +1 -1
- package/dist/collaboration/index.js +1 -1
- package/dist/connect/docx.cjs +14 -14
- package/dist/connect/docx.js +10 -10
- package/dist/connect/index.cjs +680 -677
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +43 -40
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +9 -9
- package/dist/connect/viewer.js +8 -8
- package/dist/connection/workflows/ConnectedWorkflowRunPage.d.ts +4 -3
- package/dist/connection/workflows/WorkflowRunPage.d.ts +18 -15
- package/dist/connection/workflows/index.d.ts +2 -1
- package/dist/connection/workflows/runProject.d.ts +47 -0
- package/dist/dashboards/index.cjs +1 -1
- package/dist/dashboards/index.js +1 -1
- package/dist/embed/index.cjs +19 -19
- package/dist/embed/index.js +13 -13
- package/dist/index.cjs +383 -383
- package/dist/index.js +12 -12
- package/dist/settings/index.cjs +151 -151
- package/dist/settings/index.js +2 -2
- package/dist/shell/index.cjs +33 -33
- package/dist/shell/index.js +3 -3
- package/dist/studio/index.cjs +5 -5
- package/dist/studio/index.js +4 -4
- package/dist/workflow-canvas/index.cjs +32 -32
- package/dist/workflow-canvas/index.js +17 -17
- package/dist/workspaces/index.cjs +8 -8
- package/dist/workspaces/index.js +1 -1
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-IYAQ2L7G.cjs.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-KLLG6W5L.js.map +0 -1
- package/dist/chunk-2JXJE7Y4.js.map +0 -1
- package/dist/chunk-4DRLOAVD.js.map +0 -1
- package/dist/chunk-CIXA5A65.cjs.map +0 -1
- package/dist/chunk-CVYFX7AD.js.map +0 -1
- package/dist/chunk-FAKRTCAL.cjs.map +0 -1
- package/dist/chunk-KVKKVSBT.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/workspaces/WorkspaceFormParts.tsx"],"names":["jsxs","cn","jsx","AlertCircle","entityNoun","getEntityLabel","Dialog","DialogContent","ModalHeader","Fragment","DialogTitle","DialogDescription","Select","SelectTrigger","FolderKanban","SelectValue","SelectContent","SelectItem","SelectSeparator","Plus","useId","useState","KeyValueRow","FileText","Input","AlignLeft","Globe","CreditCard"],"mappings":"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","file":"chunk-CIXA5A65.cjs","sourcesContent":["import { useState, type ReactNode, useId } from 'react'\nimport {\n AlertCircle,\n AlignLeft,\n CreditCard,\n FileText,\n FolderKanban,\n Globe,\n Plus,\n} from 'lucide-react'\nimport {\n cn,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n Input,\n Select,\n SelectContent,\n SelectItem,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n entityNoun,\n getEntityLabel,\n} from '@arbidocs/react/ui'\nimport { KeyValueRow } from '../home/KeyValueRow'\nimport { ModalHeader } from '../settings/ModalScaffold'\n\n/** Inline error strip of a form. */\nexport function FormErrorBanner({\n message,\n testId,\n className,\n id,\n}: {\n message: string\n testId?: string\n className?: string\n /** Lets a field point at this message with `aria-describedby`. */\n id?: string\n}) {\n return (\n <div\n id={id}\n role=\"alert\"\n data-slot=\"form-error\"\n data-testid={testId}\n className={cn(\n 'flex items-center gap-2 rounded-md border border-red-border bg-red-bg p-3 text-sm text-red-text',\n className\n )}\n >\n <AlertCircle className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n {message}\n </div>\n )\n}\n\n/** Right-aligned footer row of a form (Cancel + submit). */\nexport function FormActions({ className, children }: { className?: string; children: ReactNode }) {\n return (\n <div\n data-slot=\"form-actions\"\n className={cn('sticky bottom-0 flex justify-end gap-2 bg-background pt-2', className)}\n >\n {children}\n </div>\n )\n}\n\n/** Footer row of a modal body, separated by a rule. */\nexport function ModalActionRow({ children }: { children: ReactNode }) {\n return (\n <div\n data-slot=\"modal-action-row\"\n className=\"sticky bottom-0 -mx-6 -mb-6 flex flex-col-reverse gap-2 border-t border-border bg-background px-6 pb-6 pt-3 sm:flex-row sm:items-center sm:justify-end\"\n >\n {children}\n </div>\n )\n}\n\nexport interface WorkspaceFormModalProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n variant?: 'create' | 'welcome' | 'forProject'\n title?: ReactNode\n /** Icon before the title. */\n icon?: ReactNode\n /** Optional intro paragraph above the form (first-run welcome). */\n intro?: ReactNode\n testId?: string\n /** Visually hidden description. */\n description?: string\n children: ReactNode\n}\n\n/** Dialog frame of the create-workspace form: header, optional intro, scrolling body. */\nexport function WorkspaceFormModal({\n open,\n onOpenChange,\n variant = 'create',\n title,\n icon,\n intro,\n testId,\n description = `Create a new ${entityNoun('WORKSPACE')}`,\n children,\n}: WorkspaceFormModalProps) {\n const noun = entityNoun('WORKSPACE')\n const heading =\n title ??\n (variant === 'welcome'\n ? `Welcome — let's create your first ${noun}`\n : `Create New ${getEntityLabel('WORKSPACE')}`)\n const introduction =\n intro ??\n (variant === 'welcome'\n ? `A ${noun} is an encrypted vault for storing information and collaborating with AI. Give it a name to get started — you can always create more later.`\n : undefined)\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"sheet\"\n className=\"flex max-h-panel w-modal max-w-modal-vw flex-col overflow-hidden p-0\"\n data-testid={testId}\n >\n <ModalHeader>\n <ModalTitleRow icon={icon} title={heading} description={description} />\n </ModalHeader>\n <div className=\"min-h-0 flex-1 overflow-auto px-6 pb-6\">\n {introduction && <p className=\"pb-4 text-sm text-muted-foreground\">{introduction}</p>}\n {children}\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction ModalTitleRow({\n icon,\n title,\n description,\n}: {\n icon?: ReactNode\n title: ReactNode\n description: string\n}) {\n return (\n <>\n <DialogTitle>\n <div className=\"flex items-center gap-2\">\n {icon}\n <span>{title}</span>\n </div>\n </DialogTitle>\n <DialogDescription className=\"sr-only\">{description}</DialogDescription>\n </>\n )\n}\n\n/** One entry of the project picker: identity on the left, optional quota summary on the right. */\nexport function ProjectOptionRow({ identity, meta }: { identity: ReactNode; meta?: string }) {\n return (\n <div className=\"flex w-full min-w-0 items-center gap-2\">\n {identity}\n {meta && <span className=\"ml-auto truncate text-sm text-muted-foreground\">{meta}</span>}\n </div>\n )\n}\n\nexport interface ProjectPickerOption {\n id: string\n content: ReactNode\n}\n\nexport interface ProjectPickerProps {\n value?: string\n options: ProjectPickerOption[]\n onChange: (id: string) => void\n /**\n * `form` (default): the full-width field of the workspace form. `welcome`: the compact switcher\n * in the welcome dialog's quota header (muted pill, menu aligned to its end). `run`: where a\n * workflow run works (the run page's target), a taller field with the project mark, as wide as\n * a project's name needs on a desktop and the full width on a phone.\n */\n variant?: 'form' | 'welcome' | 'run'\n /** Adds a \"Create new project...\" entry. */\n onCreate?: () => void\n disabled?: boolean\n readOnly?: boolean\n className?: string\n labels?: { placeholder: string; create: string }\n /**\n * Trigger test id (default `workspace-project-select`, `welcome-modal-project-select` or\n * `workflow-run-project-select`).\n */\n testId?: string\n}\n\nconst CREATE_VALUE = '__create__'\n\n/** The one project picker: a workspace's owning project (optionally with a create entry), or the\n * welcome dialog's project switcher (`variant=\"welcome\"`). */\nexport function ProjectPicker({\n value,\n options,\n onChange,\n variant = 'form',\n onCreate,\n disabled,\n readOnly,\n className,\n labels = {\n placeholder: `Select ${entityNoun('PROJECT')}`,\n create: `Create new ${entityNoun('PROJECT')}...`,\n },\n testId,\n}: ProjectPickerProps) {\n const welcome = variant === 'welcome'\n const run = variant === 'run'\n return (\n <Select\n // A run starts on no project until one is chosen: the placeholder, not the first one.\n value={run ? value : (value ?? options[0]?.id)}\n onValueChange={(v) => (v === CREATE_VALUE ? onCreate?.() : onChange(v))}\n disabled={disabled || readOnly}\n >\n <SelectTrigger\n className={cn(\n welcome &&\n 'h-7 w-auto max-w-[9.5rem] shrink-0 gap-1 border-none bg-muted px-2 text-xs font-medium pointer-coarse:h-11',\n run && 'h-10 w-full gap-2 sm:max-w-md pointer-coarse:h-11',\n className,\n readOnly && 'cursor-not-allowed'\n )}\n data-testid={\n testId ??\n (welcome\n ? 'welcome-modal-project-select'\n : run\n ? 'workflow-run-project-select'\n : 'workspace-project-select')\n }\n >\n {run && <FolderKanban className=\"size-4 shrink-0 text-muted-foreground\" aria-hidden />}\n {welcome ? (\n <SelectValue />\n ) : run ? (\n <span className=\"min-w-0 flex-1 truncate text-left\">\n <SelectValue placeholder={labels.placeholder} />\n </span>\n ) : (\n <SelectValue placeholder={labels.placeholder} />\n )}\n </SelectTrigger>\n <SelectContent align={welcome ? 'end' : run ? 'start' : undefined}>\n {options.map((o) => (\n <SelectItem key={o.id} value={o.id}>\n {o.content}\n </SelectItem>\n ))}\n {onCreate && (\n <>\n <SelectSeparator />\n <SelectItem value={CREATE_VALUE}>\n <div className=\"flex items-center gap-1.5 text-primary\">\n <Plus className=\"size-3.5\" />\n <span>{labels.create}</span>\n </div>\n </SelectItem>\n </>\n )}\n </SelectContent>\n </Select>\n )\n}\n\nexport interface WorkspaceFieldsViewProps {\n /** `modal` (create flow) or `settings` (editing an existing workspace). */\n variant?: 'modal' | 'settings'\n name: string\n description: string\n onNameChange: (value: string) => void\n onDescriptionChange: (value: string) => void\n onNameBlur?: () => void\n onNameFocus?: () => void\n onDescriptionBlur?: () => void\n disabled?: boolean\n readOnly?: boolean\n maxNameLength?: number\n /** Id of the form's error message (a `FormErrorBanner id`): the name input is then `aria-invalid`\n * and described by it. */\n errorId?: string\n /** Content of the Visibility row (settings only); omit to hide the row. */\n visibility?: ReactNode\n /** Content of the Project row; omit to hide the row. */\n project?: ReactNode\n labels?: Partial<WorkspaceFieldsLabels>\n}\n\nexport interface WorkspaceFieldsLabels {\n readOnlyNotice: string\n name: string\n description: string\n visibility: string\n project: string\n over: (n: number) => string\n charsLeft: (n: number) => string\n}\n\nconst DEFAULT_LABELS: WorkspaceFieldsLabels = {\n readOnlyNotice: 'Read-only workspace',\n name: 'Name *',\n description: 'Description',\n visibility: 'Visibility',\n get project() {\n return getEntityLabel('PROJECT')\n },\n over: (n) => `${n} over`,\n charsLeft: (n) => `${n} chars left`,\n}\n\n/** Name / description / visibility / project rows shared by the create and settings forms. */\nexport function WorkspaceFieldsView({\n variant = 'modal',\n name,\n description,\n onNameChange,\n onDescriptionChange,\n onNameBlur,\n onNameFocus,\n onDescriptionBlur,\n disabled = false,\n readOnly = false,\n errorId,\n maxNameLength = 50,\n visibility,\n project,\n labels,\n}: WorkspaceFieldsViewProps) {\n const workspaceDescriptionId = useId()\n const workspaceNameId = useId()\n const l = { ...DEFAULT_LABELS, ...labels }\n const [nameFocused, setNameFocused] = useState(false)\n const isModal = variant === 'modal'\n const charsLeft = maxNameLength - name.length\n // The modal only surfaces the counter near the limit; settings shows it while focused.\n const counterVisible = !readOnly && nameFocused && (!isModal || charsLeft <= 10)\n const isDisabled = isModal ? disabled : disabled || readOnly\n\n return (\n <div className=\"space-y-1\" data-slot=\"workspace-fields\">\n {readOnly && (\n <div data-testid=\"workspace-form-readonly-notice\" className=\"sr-only\">\n {l.readOnlyNotice}\n </div>\n )}\n <KeyValueRow label={l.name} icon={<FileText size={14} />} htmlFor={workspaceNameId}>\n <div className=\"relative\">\n <Input\n id={workspaceNameId}\n type=\"text\"\n value={name}\n onChange={(e) => onNameChange(e.target.value)}\n onBlur={() => {\n setNameFocused(false)\n onNameBlur?.()\n }}\n onFocus={() => {\n setNameFocused(true)\n onNameFocus?.()\n }}\n maxLength={maxNameLength}\n readOnly={readOnly}\n disabled={isDisabled}\n className={cn(\n isModal ? 'bg-background' : 'capitalize',\n readOnly && 'cursor-not-allowed',\n 'pr-20'\n )}\n required\n aria-invalid={errorId ? true : undefined}\n aria-describedby={errorId}\n data-testid=\"workspace-form-name-input\"\n />\n {counterVisible && (\n <div\n className={cn(\n 'pointer-events-none absolute right-3 top-1/2 hidden -translate-y-1/2 text-sm lg:block',\n charsLeft < 0 ? 'text-red-text' : 'text-muted-foreground'\n )}\n >\n {charsLeft < 0 ? l.over(-charsLeft) : l.charsLeft(charsLeft)}\n </div>\n )}\n </div>\n </KeyValueRow>\n\n <KeyValueRow\n label={l.description}\n icon={<AlignLeft size={14} />}\n htmlFor={workspaceDescriptionId}\n >\n <Input\n id={workspaceDescriptionId}\n type=\"text\"\n dictate\n value={description}\n onChange={(e) => onDescriptionChange(e.target.value)}\n onBlur={onDescriptionBlur}\n readOnly={readOnly}\n disabled={isDisabled}\n className={cn(isModal && 'bg-background', readOnly && 'cursor-not-allowed')}\n data-testid=\"workspace-form-description-input\"\n />\n </KeyValueRow>\n\n {visibility && (\n <KeyValueRow label={l.visibility} icon={<Globe size={14} />}>\n {visibility}\n </KeyValueRow>\n )}\n {project && (\n <KeyValueRow label={l.project} icon={<CreditCard size={14} />}>\n {project}\n </KeyValueRow>\n )}\n </div>\n )\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/workspaces/WorkspaceFormParts.tsx"],"names":[],"mappings":"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","file":"chunk-CVYFX7AD.js","sourcesContent":["import { useState, type ReactNode, useId } from 'react'\nimport {\n AlertCircle,\n AlignLeft,\n CreditCard,\n FileText,\n FolderKanban,\n Globe,\n Plus,\n} from 'lucide-react'\nimport {\n cn,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n Input,\n Select,\n SelectContent,\n SelectItem,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n entityNoun,\n getEntityLabel,\n} from '@arbidocs/react/ui'\nimport { KeyValueRow } from '../home/KeyValueRow'\nimport { ModalHeader } from '../settings/ModalScaffold'\n\n/** Inline error strip of a form. */\nexport function FormErrorBanner({\n message,\n testId,\n className,\n id,\n}: {\n message: string\n testId?: string\n className?: string\n /** Lets a field point at this message with `aria-describedby`. */\n id?: string\n}) {\n return (\n <div\n id={id}\n role=\"alert\"\n data-slot=\"form-error\"\n data-testid={testId}\n className={cn(\n 'flex items-center gap-2 rounded-md border border-red-border bg-red-bg p-3 text-sm text-red-text',\n className\n )}\n >\n <AlertCircle className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n {message}\n </div>\n )\n}\n\n/** Right-aligned footer row of a form (Cancel + submit). */\nexport function FormActions({ className, children }: { className?: string; children: ReactNode }) {\n return (\n <div\n data-slot=\"form-actions\"\n className={cn('sticky bottom-0 flex justify-end gap-2 bg-background pt-2', className)}\n >\n {children}\n </div>\n )\n}\n\n/** Footer row of a modal body, separated by a rule. */\nexport function ModalActionRow({ children }: { children: ReactNode }) {\n return (\n <div\n data-slot=\"modal-action-row\"\n className=\"sticky bottom-0 -mx-6 -mb-6 flex flex-col-reverse gap-2 border-t border-border bg-background px-6 pb-6 pt-3 sm:flex-row sm:items-center sm:justify-end\"\n >\n {children}\n </div>\n )\n}\n\nexport interface WorkspaceFormModalProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n variant?: 'create' | 'welcome' | 'forProject'\n title?: ReactNode\n /** Icon before the title. */\n icon?: ReactNode\n /** Optional intro paragraph above the form (first-run welcome). */\n intro?: ReactNode\n testId?: string\n /** Visually hidden description. */\n description?: string\n children: ReactNode\n}\n\n/** Dialog frame of the create-workspace form: header, optional intro, scrolling body. */\nexport function WorkspaceFormModal({\n open,\n onOpenChange,\n variant = 'create',\n title,\n icon,\n intro,\n testId,\n description = `Create a new ${entityNoun('WORKSPACE')}`,\n children,\n}: WorkspaceFormModalProps) {\n const noun = entityNoun('WORKSPACE')\n const heading =\n title ??\n (variant === 'welcome'\n ? `Welcome — let's create your first ${noun}`\n : `Create New ${getEntityLabel('WORKSPACE')}`)\n const introduction =\n intro ??\n (variant === 'welcome'\n ? `A ${noun} is an encrypted vault for storing information and collaborating with AI. Give it a name to get started — you can always create more later.`\n : undefined)\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"sheet\"\n className=\"flex max-h-panel w-modal max-w-modal-vw flex-col overflow-hidden p-0\"\n data-testid={testId}\n >\n <ModalHeader>\n <ModalTitleRow icon={icon} title={heading} description={description} />\n </ModalHeader>\n <div className=\"min-h-0 flex-1 overflow-auto px-6 pb-6\">\n {introduction && <p className=\"pb-4 text-sm text-muted-foreground\">{introduction}</p>}\n {children}\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction ModalTitleRow({\n icon,\n title,\n description,\n}: {\n icon?: ReactNode\n title: ReactNode\n description: string\n}) {\n return (\n <>\n <DialogTitle>\n <div className=\"flex items-center gap-2\">\n {icon}\n <span>{title}</span>\n </div>\n </DialogTitle>\n <DialogDescription className=\"sr-only\">{description}</DialogDescription>\n </>\n )\n}\n\n/** One entry of the project picker: identity on the left, optional quota summary on the right. */\nexport function ProjectOptionRow({ identity, meta }: { identity: ReactNode; meta?: string }) {\n return (\n <div className=\"flex w-full min-w-0 items-center gap-2\">\n {identity}\n {meta && <span className=\"ml-auto truncate text-sm text-muted-foreground\">{meta}</span>}\n </div>\n )\n}\n\nexport interface ProjectPickerOption {\n id: string\n content: ReactNode\n}\n\nexport interface ProjectPickerProps {\n value?: string\n options: ProjectPickerOption[]\n onChange: (id: string) => void\n /**\n * `form` (default): the full-width field of the workspace form. `welcome`: the compact switcher\n * in the welcome dialog's quota header (muted pill, menu aligned to its end). `run`: where a\n * workflow run works (the run page's target), a taller field with the project mark, as wide as\n * a project's name needs on a desktop and the full width on a phone.\n */\n variant?: 'form' | 'welcome' | 'run'\n /** Adds a \"Create new project...\" entry. */\n onCreate?: () => void\n disabled?: boolean\n readOnly?: boolean\n className?: string\n labels?: { placeholder: string; create: string }\n /**\n * Trigger test id (default `workspace-project-select`, `welcome-modal-project-select` or\n * `workflow-run-project-select`).\n */\n testId?: string\n}\n\nconst CREATE_VALUE = '__create__'\n\n/** The one project picker: a workspace's owning project (optionally with a create entry), or the\n * welcome dialog's project switcher (`variant=\"welcome\"`). */\nexport function ProjectPicker({\n value,\n options,\n onChange,\n variant = 'form',\n onCreate,\n disabled,\n readOnly,\n className,\n labels = {\n placeholder: `Select ${entityNoun('PROJECT')}`,\n create: `Create new ${entityNoun('PROJECT')}...`,\n },\n testId,\n}: ProjectPickerProps) {\n const welcome = variant === 'welcome'\n const run = variant === 'run'\n return (\n <Select\n // A run starts on no project until one is chosen: the placeholder, not the first one.\n value={run ? value : (value ?? options[0]?.id)}\n onValueChange={(v) => (v === CREATE_VALUE ? onCreate?.() : onChange(v))}\n disabled={disabled || readOnly}\n >\n <SelectTrigger\n className={cn(\n welcome &&\n 'h-7 w-auto max-w-[9.5rem] shrink-0 gap-1 border-none bg-muted px-2 text-xs font-medium pointer-coarse:h-11',\n run && 'h-10 w-full gap-2 sm:max-w-md pointer-coarse:h-11',\n className,\n readOnly && 'cursor-not-allowed'\n )}\n data-testid={\n testId ??\n (welcome\n ? 'welcome-modal-project-select'\n : run\n ? 'workflow-run-project-select'\n : 'workspace-project-select')\n }\n >\n {run && <FolderKanban className=\"size-4 shrink-0 text-muted-foreground\" aria-hidden />}\n {welcome ? (\n <SelectValue />\n ) : run ? (\n <span className=\"min-w-0 flex-1 truncate text-left\">\n <SelectValue placeholder={labels.placeholder} />\n </span>\n ) : (\n <SelectValue placeholder={labels.placeholder} />\n )}\n </SelectTrigger>\n <SelectContent align={welcome ? 'end' : run ? 'start' : undefined}>\n {options.map((o) => (\n <SelectItem key={o.id} value={o.id}>\n {o.content}\n </SelectItem>\n ))}\n {onCreate && (\n <>\n <SelectSeparator />\n <SelectItem value={CREATE_VALUE}>\n <div className=\"flex items-center gap-1.5 text-primary\">\n <Plus className=\"size-3.5\" />\n <span>{labels.create}</span>\n </div>\n </SelectItem>\n </>\n )}\n </SelectContent>\n </Select>\n )\n}\n\nexport interface WorkspaceFieldsViewProps {\n /** `modal` (create flow) or `settings` (editing an existing workspace). */\n variant?: 'modal' | 'settings'\n name: string\n description: string\n onNameChange: (value: string) => void\n onDescriptionChange: (value: string) => void\n onNameBlur?: () => void\n onNameFocus?: () => void\n onDescriptionBlur?: () => void\n disabled?: boolean\n readOnly?: boolean\n maxNameLength?: number\n /** Id of the form's error message (a `FormErrorBanner id`): the name input is then `aria-invalid`\n * and described by it. */\n errorId?: string\n /** Content of the Visibility row (settings only); omit to hide the row. */\n visibility?: ReactNode\n /** Content of the Project row; omit to hide the row. */\n project?: ReactNode\n labels?: Partial<WorkspaceFieldsLabels>\n}\n\nexport interface WorkspaceFieldsLabels {\n readOnlyNotice: string\n name: string\n description: string\n visibility: string\n project: string\n over: (n: number) => string\n charsLeft: (n: number) => string\n}\n\nconst DEFAULT_LABELS: WorkspaceFieldsLabels = {\n readOnlyNotice: 'Read-only workspace',\n name: 'Name *',\n description: 'Description',\n visibility: 'Visibility',\n get project() {\n return getEntityLabel('PROJECT')\n },\n over: (n) => `${n} over`,\n charsLeft: (n) => `${n} chars left`,\n}\n\n/** Name / description / visibility / project rows shared by the create and settings forms. */\nexport function WorkspaceFieldsView({\n variant = 'modal',\n name,\n description,\n onNameChange,\n onDescriptionChange,\n onNameBlur,\n onNameFocus,\n onDescriptionBlur,\n disabled = false,\n readOnly = false,\n errorId,\n maxNameLength = 50,\n visibility,\n project,\n labels,\n}: WorkspaceFieldsViewProps) {\n const workspaceDescriptionId = useId()\n const workspaceNameId = useId()\n const l = { ...DEFAULT_LABELS, ...labels }\n const [nameFocused, setNameFocused] = useState(false)\n const isModal = variant === 'modal'\n const charsLeft = maxNameLength - name.length\n // The modal only surfaces the counter near the limit; settings shows it while focused.\n const counterVisible = !readOnly && nameFocused && (!isModal || charsLeft <= 10)\n const isDisabled = isModal ? disabled : disabled || readOnly\n\n return (\n <div className=\"space-y-1\" data-slot=\"workspace-fields\">\n {readOnly && (\n <div data-testid=\"workspace-form-readonly-notice\" className=\"sr-only\">\n {l.readOnlyNotice}\n </div>\n )}\n <KeyValueRow label={l.name} icon={<FileText size={14} />} htmlFor={workspaceNameId}>\n <div className=\"relative\">\n <Input\n id={workspaceNameId}\n type=\"text\"\n value={name}\n onChange={(e) => onNameChange(e.target.value)}\n onBlur={() => {\n setNameFocused(false)\n onNameBlur?.()\n }}\n onFocus={() => {\n setNameFocused(true)\n onNameFocus?.()\n }}\n maxLength={maxNameLength}\n readOnly={readOnly}\n disabled={isDisabled}\n className={cn(\n isModal ? 'bg-background' : 'capitalize',\n readOnly && 'cursor-not-allowed',\n 'pr-20'\n )}\n required\n aria-invalid={errorId ? true : undefined}\n aria-describedby={errorId}\n data-testid=\"workspace-form-name-input\"\n />\n {counterVisible && (\n <div\n className={cn(\n 'pointer-events-none absolute right-3 top-1/2 hidden -translate-y-1/2 text-sm lg:block',\n charsLeft < 0 ? 'text-red-text' : 'text-muted-foreground'\n )}\n >\n {charsLeft < 0 ? l.over(-charsLeft) : l.charsLeft(charsLeft)}\n </div>\n )}\n </div>\n </KeyValueRow>\n\n <KeyValueRow\n label={l.description}\n icon={<AlignLeft size={14} />}\n htmlFor={workspaceDescriptionId}\n >\n <Input\n id={workspaceDescriptionId}\n type=\"text\"\n dictate\n value={description}\n onChange={(e) => onDescriptionChange(e.target.value)}\n onBlur={onDescriptionBlur}\n readOnly={readOnly}\n disabled={isDisabled}\n className={cn(isModal && 'bg-background', readOnly && 'cursor-not-allowed')}\n data-testid=\"workspace-form-description-input\"\n />\n </KeyValueRow>\n\n {visibility && (\n <KeyValueRow label={l.visibility} icon={<Globe size={14} />}>\n {visibility}\n </KeyValueRow>\n )}\n {project && (\n <KeyValueRow label={l.project} icon={<CreditCard size={14} />}>\n {project}\n </KeyValueRow>\n )}\n </div>\n )\n}\n"]}
|