@uipath/apollo-vertex 1.4.0 → 2.1.0

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 CHANGED
@@ -26,15 +26,10 @@ import { Button, DataTable } from "@uipath/apollo-vertex";
26
26
  Everything, including the app shell, charts, feature flags, Solution Tests and AI chat, is exported
27
27
  from the package root. Translation JSON files are available at `@uipath/apollo-vertex/locales/*`.
28
28
 
29
- npm 7+ and pnpm install the packages in `peerDependencies` automatically. Install these three
30
- yourself:
31
-
32
- - `@uipath/vs-core`
33
- - `@tanstack/react-db`
34
- - `@uipath/proteus-client`
35
-
36
- They are declared only in `peerDependenciesMeta` (as optional) so that pnpm does not try to install them
37
- in this workspace. The two `@uipath` packages are not on the public npm registry.
29
+ The Proteus feature flag adapter, `createProteusProvider`, is exported from
30
+ `@uipath/apollo-vertex/proteus` instead of the root. It needs `@uipath/proteus-client`, which is not on
31
+ the public npm registry, so it is declared only in `peerDependenciesMeta` (as optional). Install it
32
+ yourself if you import that subpath.
38
33
 
39
34
  ## Layout
40
35
 
@@ -106,7 +106,6 @@ export { FeatureFlagGuard } from "../registry/feature-flag-guard/feature-flag-gu
106
106
  export { ProtectedFeatureRoute } from "../registry/protected-feature-route/protected-feature-route";
107
107
  export { useFeatureFlag } from "../registry/use-feature-flag/use-feature-flag";
108
108
  export type { FeatureFlagProviderConfig, FeatureFlagUserContext, } from "../registry/feature-flag-provider/types";
109
- export { createProteusProvider, type FlagMapping, type ProteusFeatureFlagValues, } from "../registry/feature-flag-provider/proteus-adapter";
110
109
  export { SolutionTestsView } from "../registry/solution-tests/solution-tests-view";
111
110
  export type { SolutionTestsViewProps } from "../registry/solution-tests/solution-tests-view";
112
111
  export { SaveAsTestButton } from "../registry/solution-tests/save-as-test-button";
@@ -27,7 +27,6 @@ import { FeatureFlagContext, FeatureFlagProvider, useFeatureFlagProvider } from
27
27
  import { FeatureFlagGuard } from "../registry/feature-flag-guard/feature-flag-guard.js";
28
28
  import { ProtectedFeatureRoute } from "../registry/protected-feature-route/protected-feature-route.js";
29
29
  import { useFeatureFlag } from "../registry/use-feature-flag/use-feature-flag.js";
30
- import { createProteusProvider } from "../registry/feature-flag-provider/proteus-adapter.js";
31
30
  import { SolutionTestsView } from "../registry/solution-tests/solution-tests-view.js";
32
31
  import { SaveAsTestButton } from "../registry/solution-tests/save-as-test-button.js";
33
32
  import { SolutionTestActionError } from "../registry/solution-tests/errors.js";
@@ -145,4 +144,4 @@ export * from "../registry/ai-chat/tools/data-fabric-line/index.js";
145
144
  export * from "../registry/ai-chat/tools/data-fabric-multi-line/index.js";
146
145
  export * from "../registry/ai-chat/tools/data-fabric-table/index.js";
147
146
  export * from "../registry/ai-chat/tools/data-fabric/index.js";
148
- export { AiChat, AiChatEmptyState, AiChatLoading, AiChatMarkdown, AiChatThinking, ApolloShell, AuthContext, AutopilotGradientIcon, BaselineCompare, CASE_EVALUATION_EVALUATOR_ID, CASE_EVALUATION_OUTPUT_RENDERER, CaseEvaluationDetailsSchema, CaseEvaluationOutputResult, CaseEvaluationOutputSchema, CheckboxField, EvaluationPairStatus, ExpandedAgents, ExpandedAgentsView, ExpandedRunTests, ExpandedRunTestsView, FeatureFlagContext, FeatureFlagGuard, FeatureFlagProvider, FieldError as FormFieldError, GENERIC_RENDERER, GroupMembershipGuard, IXP_EXTRACTION_EVALUATOR_ID, IXP_OUTPUT_RENDERER, IxpDetailsSchema, IxpDocStatus, IxpOutputResult, IxpOutputSchema, IxpVerdict, JSON_SIMILARITY_EVALUATOR_ID, JobRole, LLM_JUDGE_EVALUATOR_ID, LocaleProvider, MembershipDenied, NoDataMessage, ProcessOutputView, ProtectedFeatureRoute, RadioGroupField, Role, RunDetails, RunDetailsView, RunResultStatus, RunStatus, STALE_TIME_MS, STORAGE_KEYS, SUPPORTED_LOCALES, SaveAsTestButton, SelectField, ShellAuthProvider, ShellLayout, ShellLogin, ShellSidebar, ShellUserProvider, SolutionTestActionError, SolutionTestStatus, SolutionTests, SolutionTestsProvider, SolutionTestsView, SubmitButton, SummaryVerdict, SwitchField, TOKEN_QUERY_KEY, TextField, TextareaField, ThemeProvider, VerifyingMembership, VersionDeltaGlyph, addVertexTranslations, assertDateOrString, assertString, cn, configurei18n, createAgentHubConnection, createConversationalAgentConnection, createProteusProvider, ensureValidToken, genericRenderer, getStoredIdToken, getTokenQueryKey, login, logout, makeProcessOutputRenderer, makeRenderer, resolveEvaluatorRenderer, resolveProcessOutputRenderer, resolveReturnPath, toCodedAppFilePath, useAccessToken, useAdoptJob, useAppForm, useAuth, useBaselineJobs, useCreateTest, useDataTable, useDeleteTest, useEntityColumns, useEntityDataTable, useFeatureFlag, useFeatureFlagProvider, useFieldContext, useForceStopBatch, useForceStopRun, useFormContext, useGroupId, useGroupMembers, useIsGroupMember, useIsMobile, useJobExpectedOutput, useRemoveJobBaseline, useResultAttachment, useRunResults, useRunTests, useSolutionTestBatchRuns, useSolutionTestRuns, useSolutionTests, useSolutionTestsConfig, useSolutionTestsContext, useTheme, useToggleTestActive, useTranslatedErrors, useUpdateBaseline, useUser, versionDelta, withForm };
147
+ export { AiChat, AiChatEmptyState, AiChatLoading, AiChatMarkdown, AiChatThinking, ApolloShell, AuthContext, AutopilotGradientIcon, BaselineCompare, CASE_EVALUATION_EVALUATOR_ID, CASE_EVALUATION_OUTPUT_RENDERER, CaseEvaluationDetailsSchema, CaseEvaluationOutputResult, CaseEvaluationOutputSchema, CheckboxField, EvaluationPairStatus, ExpandedAgents, ExpandedAgentsView, ExpandedRunTests, ExpandedRunTestsView, FeatureFlagContext, FeatureFlagGuard, FeatureFlagProvider, FieldError as FormFieldError, GENERIC_RENDERER, GroupMembershipGuard, IXP_EXTRACTION_EVALUATOR_ID, IXP_OUTPUT_RENDERER, IxpDetailsSchema, IxpDocStatus, IxpOutputResult, IxpOutputSchema, IxpVerdict, JSON_SIMILARITY_EVALUATOR_ID, JobRole, LLM_JUDGE_EVALUATOR_ID, LocaleProvider, MembershipDenied, NoDataMessage, ProcessOutputView, ProtectedFeatureRoute, RadioGroupField, Role, RunDetails, RunDetailsView, RunResultStatus, RunStatus, STALE_TIME_MS, STORAGE_KEYS, SUPPORTED_LOCALES, SaveAsTestButton, SelectField, ShellAuthProvider, ShellLayout, ShellLogin, ShellSidebar, ShellUserProvider, SolutionTestActionError, SolutionTestStatus, SolutionTests, SolutionTestsProvider, SolutionTestsView, SubmitButton, SummaryVerdict, SwitchField, TOKEN_QUERY_KEY, TextField, TextareaField, ThemeProvider, VerifyingMembership, VersionDeltaGlyph, addVertexTranslations, assertDateOrString, assertString, cn, configurei18n, createAgentHubConnection, createConversationalAgentConnection, ensureValidToken, genericRenderer, getStoredIdToken, getTokenQueryKey, login, logout, makeProcessOutputRenderer, makeRenderer, resolveEvaluatorRenderer, resolveProcessOutputRenderer, resolveReturnPath, toCodedAppFilePath, useAccessToken, useAdoptJob, useAppForm, useAuth, useBaselineJobs, useCreateTest, useDataTable, useDeleteTest, useEntityColumns, useEntityDataTable, useFeatureFlag, useFeatureFlagProvider, useFieldContext, useForceStopBatch, useForceStopRun, useFormContext, useGroupId, useGroupMembers, useIsGroupMember, useIsMobile, useJobExpectedOutput, useRemoveJobBaseline, useResultAttachment, useRunResults, useRunTests, useSolutionTestBatchRuns, useSolutionTestRuns, useSolutionTests, useSolutionTestsConfig, useSolutionTestsContext, useTheme, useToggleTestActive, useTranslatedErrors, useUpdateBaseline, useUser, versionDelta, withForm };
@@ -0,0 +1 @@
1
+ export { createProteusProvider, type FlagMapping, type ProteusFeatureFlagValues, } from "../registry/feature-flag-provider/proteus-adapter";
@@ -0,0 +1,2 @@
1
+ import { createProteusProvider } from "../registry/feature-flag-provider/proteus-adapter.js";
2
+ export { createProteusProvider };
@@ -4,6 +4,7 @@
4
4
  * outside a SolutionProvider or when the named collection is not registered.
5
5
  */
6
6
  import type { Collection } from "@tanstack/react-db";
7
+ import { useSolution } from "@uipath/vs-core";
7
8
  import { ENTITY } from "./constants";
8
9
  import type { SolutionTest, SolutionTestBatchRun, SolutionTestJob, SolutionTestRun, SolutionTestRunResult } from "./types";
9
10
  /** Row type stored in each Solution Tests collection, keyed by its entity name. */
@@ -14,5 +15,9 @@ type SolutionTestRow = {
14
15
  [ENTITY.jobs]: SolutionTestJob;
15
16
  [ENTITY.runResults]: SolutionTestRunResult;
16
17
  };
17
- export declare function useSolutionTestCollection<K extends keyof SolutionTestRow>(entity: K): Collection<SolutionTestRow[K]>;
18
+ type SolutionTestCollection<T extends object> = Collection<T, string, {
19
+ refetch: () => Promise<void>;
20
+ }>;
21
+ export declare function getSolutionTestCollection<K extends keyof SolutionTestRow>(solution: ReturnType<typeof useSolution>, entity: K): SolutionTestCollection<SolutionTestRow[K]> | undefined;
22
+ export declare function useSolutionTestCollection<K extends keyof SolutionTestRow>(entity: K): SolutionTestCollection<SolutionTestRow[K]>;
18
23
  export {};
@@ -1,11 +1,14 @@
1
1
  "use client";
2
2
  import { useSolution } from "@uipath/vs-core";
3
+ function getSolutionTestCollection(solution, entity) {
4
+ const collections = solution.api.collections.solutionTests;
5
+ return collections[entity];
6
+ }
3
7
  function useSolutionTestCollection(entity) {
4
8
  const solution = useSolution();
5
9
  if (!solution) throw new Error("useSolutionTestCollection must be used within a SolutionProvider.");
6
- const selected = solution.api.collections.solutionTests[entity];
7
- const collection = selected;
10
+ const collection = getSolutionTestCollection(solution, entity);
8
11
  if (!collection) throw new Error(`Solution Tests collection "${entity}" is unavailable.`);
9
12
  return collection;
10
13
  }
11
- export { useSolutionTestCollection };
14
+ export { getSolutionTestCollection, useSolutionTestCollection };
@@ -4,7 +4,7 @@ import { useMutation } from "@tanstack/react-query";
4
4
  import { useSolution } from "@uipath/vs-core";
5
5
  import { ENTITY } from "./constants.js";
6
6
  import { useSolutionTestsActions, useSolutionTestsConfig } from "./context.js";
7
- import { useSolutionTestCollection } from "./use-solution-test-collection.js";
7
+ import { getSolutionTestCollection, useSolutionTestCollection } from "./use-solution-test-collection.js";
8
8
  function useSolutionTests() {
9
9
  const collection = useSolutionTestCollection(ENTITY.tests);
10
10
  const { data, isLoading } = useLiveQuery((q)=>q.from({
@@ -47,7 +47,7 @@ function useToggleTestActive() {
47
47
  const { track } = useSolutionTestsConfig();
48
48
  return useMutation({
49
49
  mutationFn: async ({ testId, isActive })=>{
50
- const collection = solution?.api.collections.solutionTests[ENTITY.tests];
50
+ const collection = solution && getSolutionTestCollection(solution, ENTITY.tests);
51
51
  if (!collection) throw new Error("Solution Tests collection is unavailable.");
52
52
  const transaction = collection.update(testId, (draft)=>{
53
53
  draft.IsActive = isActive;
@@ -2,7 +2,6 @@
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import { CircleCheckIcon, InfoIcon, Loader2Icon, OctagonXIcon, TriangleAlertIcon } from "lucide-react";
4
4
  import { Toaster } from "sonner";
5
- import { useTheme } from "../shell/shell-theme-provider.js";
6
5
  const iconAlign = "[&>[data-icon]]:!items-start [&>[data-icon]>svg]:!mt-0.5";
7
6
  const statusTextClasses = "[&>[data-icon]>svg]:!text-[oklch(0.166_0.0283_203.34)] dark:[&>[data-icon]>svg]:!text-foreground [&_[data-title]]:!text-[oklch(0.166_0.0283_203.34)] dark:[&_[data-title]]:!text-foreground [&_[data-description]]:!text-[oklch(0.166_0.0283_203.34)] dark:[&_[data-description]]:!text-foreground [&_[data-close-button]]:!text-[oklch(0.166_0.0283_203.34)] dark:[&_[data-close-button]]:!text-foreground";
8
7
  const apolloToastClassNames = {
@@ -10,12 +9,11 @@ const apolloToastClassNames = {
10
9
  success: `!border-success !bg-[color-mix(in_srgb,var(--success)_25%,var(--card)_75%)] dark:!bg-[color-mix(in_srgb,var(--success)_25%,var(--popover)_75%)] ${statusTextClasses} ${iconAlign}`,
11
10
  warning: `!border-warning !bg-[color-mix(in_srgb,var(--warning)_60%,var(--card)_40%)] dark:!bg-[color-mix(in_srgb,var(--warning)_60%,var(--popover)_40%)] ${statusTextClasses} ${iconAlign}`,
12
11
  error: `!border-destructive !bg-[color-mix(in_srgb,var(--destructive)_50%,var(--card)_50%)] dark:!bg-[color-mix(in_srgb,var(--destructive)_50%,var(--popover)_50%)] ${statusTextClasses} ${iconAlign}`,
13
- closeButton: "!left-auto !right-2 !top-2 !transform-none !border-none !bg-transparent !rounded-sm"
12
+ description: "!text-popover-foreground",
13
+ cancelButton: "dark:!bg-white/30",
14
+ closeButton: "!left-auto !right-2 !top-2 !transform-none !border-none !bg-transparent !rounded-sm !text-popover-foreground"
14
15
  };
15
- const sonner_Toaster = ({ theme: _theme, ...props })=>{
16
- const { resolvedTheme } = useTheme();
17
- return /*#__PURE__*/ jsx(Toaster, {
18
- theme: resolvedTheme,
16
+ const sonner_Toaster = ({ theme: _theme, ...props })=>/*#__PURE__*/ jsx(Toaster, {
19
17
  className: "toaster group",
20
18
  position: "top-center",
21
19
  duration: 5000,
@@ -48,5 +46,4 @@ const sonner_Toaster = ({ theme: _theme, ...props })=>{
48
46
  },
49
47
  ...props
50
48
  });
51
- };
52
49
  export { sonner_Toaster as Toaster, apolloToastClassNames };
@@ -10,7 +10,12 @@ export interface UseEntityDataTableOptions<TRecord extends EntityRecord = Entity
10
10
  columnOverrides?: Record<string, (baseDef: ColumnDefWithAccessorKey<TRecord>) => ColumnDefWithAccessorKey<TRecord>>;
11
11
  }
12
12
  export declare function useEntityDataTable<TRecord extends EntityRecord = EntityRecord>({ entity, storageKey: storageKeyProp, initialVisibleColumnCount, systemFields, columnOrder: columnOrderProp, extraColumns, columnOverrides, }: UseEntityDataTableOptions<TRecord>): {
13
- data: Record<string, unknown>[];
13
+ data: {
14
+ readonly $synced: boolean;
15
+ readonly $origin: import("@tanstack/react-db").VirtualOrigin;
16
+ readonly $key: string;
17
+ readonly $collectionId: string;
18
+ }[];
14
19
  isLoading: boolean;
15
20
  columns: import("../data-table").ColumnDef<TRecord>[];
16
21
  sorting: import("@tanstack/react-table").SortingState;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uipath/apollo-vertex",
3
- "version": "1.4.0",
3
+ "version": "2.1.0",
4
4
  "description": "UiPath Apollo Vertex design system components",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -17,6 +17,10 @@
17
17
  "types": "./dist/entries/index.d.ts",
18
18
  "default": "./dist/entries/index.js"
19
19
  },
20
+ "./proteus": {
21
+ "types": "./dist/entries/proteus.d.ts",
22
+ "default": "./dist/entries/proteus.js"
23
+ },
20
24
  "./theme.css": "./dist/theme.css",
21
25
  "./tailwind.css": "./dist/tailwind.css",
22
26
  "./locales/*": "./dist/locales/*"
@@ -80,10 +84,12 @@
80
84
  "peerDependencies": {
81
85
  "@tanstack/ai": "^0.14.0",
82
86
  "@tanstack/ai-client": "^0.8.0",
87
+ "@tanstack/react-db": "^0.1.83",
83
88
  "@tanstack/react-query": "^5.90.21",
84
89
  "@tanstack/react-router": "^1.132.31",
85
90
  "@ts-rest/core": "^3.53.0-rc.1",
86
91
  "@uipath/uipath-typescript": "^1.7.1",
92
+ "@uipath/vs-core": "^4.4.0",
87
93
  "eventsource-parser": "^3.0.6",
88
94
  "highlight.js": "^11.11.1",
89
95
  "i18next": "^25.8.1 || ^26.0.0",
@@ -100,14 +106,8 @@
100
106
  "tailwindcss": "^4.0.0"
101
107
  },
102
108
  "peerDependenciesMeta": {
103
- "@tanstack/react-db": {
104
- "optional": true
105
- },
106
109
  "@uipath/proteus-client": {
107
110
  "optional": true
108
- },
109
- "@uipath/vs-core": {
110
- "optional": true
111
111
  }
112
112
  },
113
113
  "devDependencies": {
@@ -116,8 +116,11 @@
116
116
  "@rslib/core": "^0.19.6",
117
117
  "@tanstack/ai": "0.14.0",
118
118
  "@tanstack/ai-client": "0.8.0",
119
+ "@tanstack/db": "0.6.5",
119
120
  "@tanstack/intent": "0.4.0",
120
- "@tanstack/react-query": "^5.104.0",
121
+ "@tanstack/query-db-collection": "1.0.36",
122
+ "@tanstack/react-db": "0.1.83",
123
+ "@tanstack/react-query": "^5.104.1",
121
124
  "@tanstack/react-router": "^1.170.40",
122
125
  "@testing-library/dom": "^10.4.1",
123
126
  "@testing-library/react": "^16.3.0",
@@ -126,6 +129,7 @@
126
129
  "@types/react": "^19.2.6",
127
130
  "@types/react-dom": "^19.2.2",
128
131
  "@uipath/uipath-typescript": "^1.8.0",
132
+ "@uipath/vs-core": "^4.5.0",
129
133
  "@vitest/coverage-v8": "^4.1.5",
130
134
  "dependency-cruiser": "^17.3.6",
131
135
  "eslint-plugin-react": "^7.37.5",
@@ -30,14 +30,16 @@ Install `@uipath/apollo-vertex` if the project doesn't have it yet.
30
30
 
31
31
  Then read `peerDependencies` in
32
32
  `node_modules/@uipath/apollo-vertex/package.json` and make sure the app has
33
- every package listed there, in a version that matches the range. Also install
34
- every package listed in `peerDependenciesMeta`, even the ones marked optional
35
- or missing from `peerDependencies`: the package entry imports them, so the
36
- app's bundler fails to resolve the entry without them.
33
+ every package listed there, in a version that matches the range. Install
34
+ `@uipath/proteus-client` only if the app uses Proteus feature flags (it imports
35
+ `@uipath/apollo-vertex/proteus`).
37
36
 
38
37
  - If the app already has a peer in a version outside the range, tell the user
39
38
  about the conflict instead of upgrading it on your own.
40
- - Some `@uipath` peers are not on the public npm registry. If installing one
39
+ - Pick the `@tanstack/react-db` release whose `@tanstack/db` dependency matches
40
+ the one `@tanstack/query-db-collection` uses in the app. Each release pins an
41
+ exact `@tanstack/db`, and two copies do not work together.
42
+ - `@uipath/proteus-client` is not on the public npm registry. If installing it
41
43
  fails with a 404 or an authentication error, stop and ask the user for access
42
44
  to UiPath's package registry. Do not install look-alike packages from npm.
43
45
  - If the app doesn't use Tailwind yet, set it up for the app's bundler with
@@ -2,12 +2,11 @@
2
2
  name: use-vertex-components
3
3
  description: >
4
4
  Build all new UI from @uipath/apollo-vertex components instead of writing
5
- new ones. Covers which Vertex component to use for common needs (buttons,
6
- forms, dialogs, tables, page headers, empty states, charts, toasts), how to
7
- adapt them with variants, className and composition, and what not to do:
8
- hand-rolled primitives, raw Radix or other UI libraries, or copied shadcn
9
- code. Load before building or changing any UI in an app that uses Apollo
10
- Vertex.
5
+ new ones. Covers how to adapt them with variants, className and
6
+ composition, and what not to do: hand-rolled primitives, raw Radix or other
7
+ UI libraries, or copied shadcn code. Load before building or changing any
8
+ UI in an app that uses Apollo Vertex, together with
9
+ vertex-component-catalog to pick the component.
11
10
  metadata:
12
11
  type: core
13
12
  library: '@uipath/apollo-vertex'
@@ -41,23 +40,9 @@ components.
41
40
 
42
41
  ## Pick the component
43
42
 
44
- | Need | Use |
45
- | --- | --- |
46
- | Actions | `Button`, `ButtonGroup`, `Toggle`, `ToggleGroup` |
47
- | Text and choice inputs | `Input`, `InputGroup`, `Textarea`, `Select`, `Combobox`, `Checkbox`, `RadioGroup`, `Switch`, `Slider`, `InputOTP` |
48
- | Dates | `DatePicker`, `Calendar` |
49
- | Form layout, labels and errors | `Field`, `FieldGroup`, `FieldLabel`, `FieldDescription`, `FieldError`, `Label` |
50
- | Multi-step forms | `FormWizard`, `Stepper` |
51
- | Overlays | `Dialog`, `AlertDialog`, `Sheet`, `Drawer`, `Popover`, `HoverCard`, `Tooltip` |
52
- | Menus | `DropdownMenu`, `ContextMenu`, `Menubar`, `Command`, `NavigationMenu` |
53
- | Page structure | `PageHeader`, `Breadcrumb`, `Tabs`, `Card`, `Separator`, `ResizablePanelGroup`, `ScrollArea`, `Sidebar` |
54
- | Lists and tables | `DataTable` with `useDataTable`, `Table`, `Item`, `Pagination` |
55
- | Status and feedback | `Badge`, `Alert`, `Toaster`, `Progress`, `Spinner`, `Skeleton`, `Empty` |
56
- | Metrics and charts | `MetricCard`, plus `BarChart`, `LineChart`, `KpiChart` and the other charts |
57
- | AI content | `AiMark`, `AiGlow`, `AiCaveat`, `ConfidenceSignal`, `FeedbackVoteWidget` |
58
- | Misc | `Avatar`, `Accordion`, `Collapsible`, `Carousel`, `TimelineRowLayout`, `Kbd`, `AspectRatio` |
59
-
60
- Import all of them from `@uipath/apollo-vertex`.
43
+ Load the `vertex-component-catalog` skill to choose the component. It lists
44
+ every documented Vertex component by need, with its exports, when to use it
45
+ and what to use instead. Import all of them from `@uipath/apollo-vertex`.
61
46
 
62
47
  ## Adapting a component
63
48
 
@@ -0,0 +1,213 @@
1
+ ---
2
+ name: vertex-component-catalog
3
+ description: >
4
+ Catalog of every documented @uipath/apollo-vertex component and pattern,
5
+ grouped by need (actions, inputs, forms, overlays, menus, layout, data
6
+ display, feedback, charts), with the names to import, when to use each one
7
+ and which component to use instead. Load when choosing which Vertex
8
+ component to build a screen, form, dialog, table or state from.
9
+ metadata:
10
+ type: core
11
+ library: '@uipath/apollo-vertex'
12
+ sources:
13
+ - 'UiPath/apollo-ui:apps/apollo-vertex/content/docs/components/*.mdx'
14
+ - 'UiPath/apollo-ui:apps/apollo-vertex/content/docs/components/meta.json'
15
+ - 'UiPath/apollo-ui:apps/apollo-vertex/content/docs/patterns/*.mdx'
16
+ - 'UiPath/apollo-ui:apps/apollo-vertex/content/docs/patterns/meta.json'
17
+ - 'UiPath/apollo-ui:packages/apollo-vertex/entries/index.ts'
18
+ ---
19
+
20
+ <!-- Generated by apps/apollo-vertex/scripts/generate-component-skill.ts from the
21
+ docs pages. Do not edit by hand. -->
22
+
23
+ # Apollo Vertex component catalog
24
+
25
+ Import every name below from `@uipath/apollo-vertex`. Follow the
26
+ `use-vertex-components` skill for how to use and adapt them.
27
+
28
+ ## Actions
29
+
30
+ - **Button**: Displays a button or a component that looks like a button. Exports: `Button`, `buttonVariants`.
31
+ - Use when the user triggers an action, such as submitting a form, saving or opening a dialog.
32
+ - Avoid when the control turns a setting on or off. Use **Switch** instead.
33
+ - Avoid when the user picks one of a few modes or views. Use **Toggle Group** instead.
34
+ - **Button Group**: Groups multiple buttons together with proper styling and spacing. Exports: `ButtonGroup`, `ButtonGroupSeparator`, `ButtonGroupText`, `buttonGroupVariants`.
35
+ - **Toggle**: A two-state button that can be either on or off. Exports: `Toggle`, `toggleVariants`.
36
+ - **Toggle Group**: A set of two-state buttons that can be toggled on or off. Exports: `ToggleGroup`, `ToggleGroupItem`.
37
+
38
+ ## Inputs
39
+
40
+ - **Input**: Displays a form input field or a component that looks like an input field. Exports: `Input`.
41
+ - **Input Group**: Groups input elements with addons and buttons. Exports: `InputGroup`, `InputGroupAddon`, `InputGroupButton`, `InputGroupInput`, `InputGroupText`, `InputGroupTextarea`.
42
+ - **Textarea**: Displays a form textarea or a component that looks like a textarea. Exports: `Textarea`.
43
+ - **Select**: Displays a list of options for the user to pick from—triggered by a button. Exports: `Select`, `SelectContent`, `SelectGroup`, `SelectItem`, `SelectLabel`, `SelectScrollDownButton`, `SelectScrollUpButton`, `SelectSeparator`, `SelectTrigger`, `SelectValue`.
44
+ - **Combobox**: An autocomplete input with a filterable list, supporting single and multi-select with badges. Exports: `Combobox`, `ComboboxBadge`, `ComboboxBadgeList`, `ComboboxContent`, `ComboboxEmpty`, `ComboboxGroup`, `ComboboxInput`, `ComboboxItem`, `ComboboxList`, `ComboboxTrigger`.
45
+ - **Checkbox**: A control that allows the user to toggle between checked and not checked. Exports: `Checkbox`.
46
+ - **Radio Group**: A set of checkable buttons—known as radio buttons—where no more than one can be checked. Exports: `RadioGroup`, `RadioGroupItem`.
47
+ - **Switch**: A control that allows the user to toggle between on and off. Exports: `Switch`.
48
+ - **Slider**: An input where the user selects a value from within a given range. Exports: `Slider`.
49
+ - **Input OTP**: Accessible one-time password component with copy paste functionality. Exports: `InputOTP`, `InputOTPGroup`, `InputOTPSeparator`, `InputOTPSlot`.
50
+ - **Calendar**: A date field component that allows users to enter and edit dates. Exports: `Calendar`, `CalendarDayButton`.
51
+ - **Date Picker**: A date picker component that allows users to select a date from a calendar popover. Exports: `DatePicker`.
52
+ - **Filter Dropdown**: A versatile filter dropdown supporting multi-select, single-select, built-in search, and optional TanStack Table column integration. Use it in data table toolbars or as a standalone page-level filter. Exports: `FilterDropdown`.
53
+
54
+ ## Forms
55
+
56
+ - **Form**: Exports: `CheckboxField`, `FormFieldError`, `RadioGroupField`, `SelectField`, `SubmitButton`, `SwitchField`, `TextareaField`, `TextField`, `useAppForm`, `useFieldContext`, `useFormContext`, `useTranslatedErrors`, `withForm`.
57
+ - **Field**: A form field component with label, input, and description. Exports: `Field`, `FieldContent`, `FieldDescription`, `FieldError`, `FieldGroup`, `FieldLabel`, `FieldLegend`, `FieldSeparator`, `FieldSet`, `FieldTitle`.
58
+ - **Label**: Renders an accessible label associated with controls. Exports: `Label`.
59
+ - **Form Wizard**: Exports: `FormWizard`, `FormWizardNav`, `FormWizardStep`, `FormWizardSteps`, `getVisibleSteps`, `useFormWizard`, `useFormWizardContext`.
60
+
61
+ ## Overlays
62
+
63
+ - **Dialog**: A modal dialog that appears in front of app content to provide critical information. Exports: `Dialog`, `DialogClose`, `DialogContent`, `DialogDescription`, `DialogFooter`, `DialogHeader`, `DialogOverlay`, `DialogPortal`, `DialogTitle`, `DialogTrigger`.
64
+ - Use when the user must finish or dismiss a short, focused task before returning to the page, such as a small form or a single choice.
65
+ - Avoid when the content is a long form or a record's details, or the user needs to keep the page in view. Use **Sheet** instead.
66
+ - Avoid when the user confirms a destructive or irreversible action. Use **Alert Dialog** instead.
67
+ - Avoid when the content is a few extra controls or details anchored to a trigger. Use **Popover** instead.
68
+
69
+ ```tsx
70
+ import {
71
+ Button,
72
+ Dialog,
73
+ DialogContent,
74
+ DialogDescription,
75
+ DialogFooter,
76
+ DialogHeader,
77
+ DialogTitle,
78
+ DialogTrigger,
79
+ } from "@uipath/apollo-vertex";
80
+
81
+ <Dialog>
82
+ <DialogTrigger asChild>
83
+ <Button variant="outline">Rename</Button>
84
+ </DialogTrigger>
85
+ <DialogContent>
86
+ <DialogHeader>
87
+ <DialogTitle>Rename invoice</DialogTitle>
88
+ <DialogDescription>Everyone in the workspace sees the new name.</DialogDescription>
89
+ </DialogHeader>
90
+ {/* form fields */}
91
+ <DialogFooter>
92
+ <Button type="submit">Save</Button>
93
+ </DialogFooter>
94
+ </DialogContent>
95
+ </Dialog>
96
+ ```
97
+
98
+ - **Alert Dialog**: A modal dialog that interrupts the user with important content and expects a response. Exports: `AlertDialog`, `AlertDialogAction`, `AlertDialogCancel`, `AlertDialogContent`, `AlertDialogDescription`, `AlertDialogFooter`, `AlertDialogHeader`, `AlertDialogOverlay`, `AlertDialogPortal`, `AlertDialogTitle`, `AlertDialogTrigger`.
99
+ - Use when the user must confirm or cancel an action that is destructive or cannot be undone, such as deleting a record.
100
+ - Avoid when the dialog holds a form or other content beyond a confirm or cancel choice. Use **Dialog** instead.
101
+ - **Sheet**: Extends the Dialog component to display content that complements the main content. Exports: `Sheet`, `SheetClose`, `SheetContent`, `SheetDescription`, `SheetFooter`, `SheetHeader`, `SheetTitle`, `SheetTrigger`.
102
+ - Use when the user views or edits a record, a long form, filters or settings in a side panel while the page stays in context.
103
+ - Avoid when the task is short and needs the user's full attention. Use **Dialog** instead.
104
+ - Avoid when the panel is for small screens and should slide up from the bottom and be dismissed with a swipe. Use **Drawer** instead.
105
+ - **Drawer**: A drawer component that slides in from the edge of the screen. Exports: `Drawer`, `DrawerClose`, `DrawerContent`, `DrawerDescription`, `DrawerFooter`, `DrawerHeader`, `DrawerOverlay`, `DrawerPortal`, `DrawerTitle`, `DrawerTrigger`.
106
+ - Use when the screen is small and the panel should slide up from the bottom edge and close with a swipe.
107
+ - Avoid when the layout is for desktop and needs a side panel for details or a form. Use **Sheet** instead.
108
+ - **Popover**: Displays rich content in a portal, triggered by a button. Exports: `Popover`, `PopoverAnchor`, `PopoverContent`, `PopoverTrigger`.
109
+ - **Hover Card**: For sighted users to preview content available behind a link. Exports: `HoverCard`, `HoverCardContent`, `HoverCardTrigger`.
110
+ - **Tooltip**: A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it. Exports: `Tooltip`, `TooltipContent`, `TooltipProvider`, `TooltipTrigger`.
111
+
112
+ ## Menus
113
+
114
+ - **Dropdown Menu**: Displays a menu to the user triggered by a button. Exports: `DropdownMenu`, `DropdownMenuCheckboxItem`, `DropdownMenuContent`, `DropdownMenuGroup`, `DropdownMenuItem`, `DropdownMenuLabel`, `DropdownMenuPortal`, `DropdownMenuRadioGroup`, `DropdownMenuRadioItem`, `DropdownMenuSeparator`, `DropdownMenuShortcut`, `DropdownMenuSub`, `DropdownMenuSubContent`, `DropdownMenuSubTrigger`, `DropdownMenuTrigger`.
115
+ - **Context Menu**: Displays a menu to the user triggered by a right-click or long-press. Exports: `ContextMenu`, `ContextMenuCheckboxItem`, `ContextMenuContent`, `ContextMenuGroup`, `ContextMenuItem`, `ContextMenuLabel`, `ContextMenuPortal`, `ContextMenuRadioGroup`, `ContextMenuRadioItem`, `ContextMenuSeparator`, `ContextMenuShortcut`, `ContextMenuSub`, `ContextMenuSubContent`, `ContextMenuSubTrigger`, `ContextMenuTrigger`.
116
+ - **Menubar**: A visually persistent menu common in desktop applications. Exports: `Menubar`, `MenubarCheckboxItem`, `MenubarContent`, `MenubarGroup`, `MenubarItem`, `MenubarLabel`, `MenubarMenu`, `MenubarPortal`, `MenubarRadioGroup`, `MenubarRadioItem`, `MenubarSeparator`, `MenubarShortcut`, `MenubarSub`, `MenubarSubContent`, `MenubarSubTrigger`, `MenubarTrigger`.
117
+ - **Command**: Fast, composable, unstyled command menu for React. Exports: `Command`, `CommandDialog`, `CommandEmpty`, `CommandGroup`, `CommandInput`, `CommandItem`, `CommandList`, `CommandSeparator`, `CommandShortcut`.
118
+ - **Navigation Menu**: A collection of links for navigating websites. Exports: `NavigationMenu`, `NavigationMenuContent`, `NavigationMenuIndicator`, `NavigationMenuItem`, `NavigationMenuLink`, `NavigationMenuList`, `NavigationMenuTrigger`, `navigationMenuTriggerStyle`, `NavigationMenuViewport`.
119
+
120
+ ## Layout and navigation
121
+
122
+ - **Card**: Exports: `Card`, `CardAction`, `CardContent`, `CardDescription`, `CardFooter`, `CardHeader`, `CardTitle`, `cardVariants`, `GLASS_CLASSES`.
123
+ - **Tabs**: A set of layered sections of content—known as tab panels—that are displayed one at a time. Exports: `Tabs`, `TabsContent`, `TabsList`, `TabsTrigger`.
124
+ - **Breadcrumb**: Displays the path to the current resource using a hierarchy of links. Exports: `Breadcrumb`, `BreadcrumbEllipsis`, `BreadcrumbItem`, `BreadcrumbLink`, `BreadcrumbList`, `BreadcrumbPage`, `BreadcrumbSeparator`.
125
+ - **Sidebar**: A composable, themeable and customizable sidebar component. Exports: `Sidebar`, `SidebarContent`, `SidebarFooter`, `SidebarGroup`, `SidebarGroupAction`, `SidebarGroupContent`, `SidebarGroupLabel`, `SidebarHeader`, `SidebarInput`, `SidebarInset`, `SidebarMenu`, `SidebarMenuAction`, `SidebarMenuBadge`, `SidebarMenuButton`, `sidebarMenuButtonVariants`, `SidebarMenuItem`, `SidebarMenuSkeleton`, `SidebarMenuSub`, `SidebarMenuSubButton`, `SidebarMenuSubItem`, `SidebarProvider`, `SidebarRail`, `SidebarSeparator`, `SidebarTrigger`, `useSidebar`.
126
+ - **Accordion**: A vertically stacked set of interactive headings that each reveal a section of content. Exports: `Accordion`, `AccordionContent`, `AccordionItem`, `AccordionTrigger`.
127
+ - **Collapsible**: An interactive component which expands/collapses a panel. Exports: `Collapsible`, `CollapsibleContent`, `CollapsibleTrigger`.
128
+ - **Separator**: Visually or semantically separates content. Exports: `Separator`.
129
+ - **Resizable**: Accessible resizable panel groups and layouts with keyboard support. Exports: `ResizableHandle`, `ResizablePanel`, `ResizablePanelGroup`.
130
+ - **Scroll Area**: Augments native scroll functionality for custom, cross-browser styling. Exports: `ScrollArea`, `ScrollBar`.
131
+ - **Aspect Ratio**: Displays content within a desired ratio. Exports: `AspectRatio`.
132
+
133
+ ## Data display
134
+
135
+ - **Data Table**: A data table built on TanStack Table with sorting, filtering, pagination and row selection. Exports: `DataTable`, `DataTableCell`, `DataTableColumnHeader`, `dataTableFacetedFilterFn`, `dataTableGlobalFilterFn`, `DataTablePagination`, `DataTableRow`, `DataTableSearch`, `DataTableSkeleton`, `DataTableToolbar`, `DataTableViewOptions`, `useDataTable`, `useEntityColumns`, `useEntityDataTable`.
136
+ - Use when a list of records needs sorting, filtering, search, pagination, row selection or column visibility.
137
+ - Avoid when the data is a small, static table with no interaction. Use **Table** instead.
138
+
139
+ ```tsx
140
+ import { type ColumnDef, DataTable, useDataTable } from "@uipath/apollo-vertex";
141
+
142
+ const columns: ColumnDef<Invoice>[] = [
143
+ { accessorKey: "number", header: "Number" },
144
+ { accessorKey: "amount", header: "Amount" },
145
+ ];
146
+
147
+ function InvoicesTable({ data }: { data: Invoice[] }) {
148
+ const tableState = useDataTable({ data, columns, storageKey: "invoices" });
149
+ return <DataTable {...tableState} />;
150
+ }
151
+ ```
152
+
153
+ - **Table**: A responsive table component for displaying data. Exports: `Table`, `TableBody`, `TableCaption`, `TableCell`, `TableFooter`, `TableHead`, `TableHeader`, `TableRow`.
154
+ - Use when the data is small and static, such as a summary or a comparison, and needs no sorting, filtering or pagination.
155
+ - Avoid when users sort, filter, search, page through or select rows. Use **Data Table** instead.
156
+ - **Pagination**: Pagination with page navigation, next and previous links. Exports: `Pagination`, `PaginationContent`, `PaginationEllipsis`, `PaginationItem`, `PaginationLink`, `PaginationNext`, `PaginationPrevious`.
157
+ - **Item**: A versatile list item component for displaying content in lists. Exports: `Item`, `ItemActions`, `ItemContent`, `ItemDescription`, `ItemFooter`, `ItemGroup`, `ItemHeader`, `ItemMedia`, `ItemSeparator`, `ItemTitle`.
158
+ - **Timeline**: Primitives for building an activity timeline: a status marker (the dot) and the row layout (the connecting line and dot slot a row sits in). Together they render a mixed trail of human and agent steps, without knowing anything about your domain. Exports: `TimelineMarker`, `TimelineRowLayout`.
159
+ - **Avatar**: An image element with a fallback for representing the user. Exports: `Avatar`, `AvatarFallback`, `AvatarImage`.
160
+ - **Badge**: Displays a badge or a component that looks like a badge. Exports: `Badge`, `badgeVariants`.
161
+ - **Kbd**: The keyboard key component is used to display keyboard shortcuts. Exports: `Kbd`, `KbdGroup`.
162
+ - **Carousel**: A carousel with motion and swipe built using Embla. Exports: `Carousel`, `CarouselContent`, `CarouselItem`, `CarouselNext`, `CarouselPrevious`.
163
+
164
+ ## Feedback
165
+
166
+ - **Alert**: Displays a callout for user attention. Exports: `Alert`, `AlertDescription`, `AlertTitle`, `alertVariants`.
167
+ - Use when feedback must stay visible in context, such as validation errors, warnings or a blocking error.
168
+ - Use when the user must act on the message, or the system raised it without a user action. With no related UI to anchor it to, show it as a persistent full-width banner below the main header.
169
+ - Avoid when the message only confirms that an action the user just took succeeded. Use **Sonner** instead.
170
+ - **Sonner**: An opinionated toast component for React. Exports: `apolloToastClassNames`, `Toaster`.
171
+ - Use when the message briefly confirms an action the user just took and asks nothing of them, such as "Changes saved".
172
+ - Avoid when the message is a blocking error or a validation error, needs user input, or was raised by the system without a user action. Use **Alert** instead.
173
+
174
+ ```tsx
175
+ // Render <Toaster /> once in the root layout. toast comes from the sonner package.
176
+ import { Toaster } from "@uipath/apollo-vertex";
177
+ import { toast } from "sonner";
178
+
179
+ <Toaster />
180
+
181
+ toast.success("Changes saved", { description: "Your updates have been applied." });
182
+ ```
183
+
184
+ - **Empty**: An empty state component for when there is no data to display. Exports: `Empty`, `EmptyContent`, `EmptyDescription`, `EmptyHeader`, `EmptyMedia`, `EmptyTitle`.
185
+ - Use when a list, table, search result or page has nothing to show. Say why it is empty and offer the next action when there is one.
186
+ - Avoid when the content is still loading. Use **Skeleton** instead.
187
+ - Avoid when loading the content failed. Use **Alert** instead.
188
+ - **Skeleton**: Use to show a placeholder while content is loading. Exports: `Skeleton`.
189
+ - **Spinner**: A loading spinner component to indicate loading state. Exports: `Spinner`.
190
+ - **Progress**: Displays an indicator showing the completion progress of a task. Exports: `Progress`.
191
+ - **Confidence Signal**: A single chip for communicating AI confidence — used everywhere the system needs to say "can you act on this, or should you pause?" Exports: `ConfidenceSignal`, `SignalBars`.
192
+
193
+ ## Charts
194
+
195
+ - **Chart**: Beautiful charts using Recharts with consistent theming and styling. Exports: `ChartContainer`, `ChartLegend`, `ChartLegendContent`, `ChartStyle`, `ChartTooltip`, `ChartTooltipContent`.
196
+ - **Line Chart**: A time-series line chart over a datetime dimension. Exports: `LineChart`, `LineChartWithAdapter`.
197
+ - **Multi-Line Chart**: Two metrics on a shared datetime axis with independent left and right Y axes. Exports: `MultiLineChart`, `MultiLineChartWithAdapter`.
198
+ - **Bar Chart**: A metric broken down by a categorical dimension. Exports: `BarChart`, `BarChartWithAdapter`.
199
+ - **Distribution Chart**: A histogram over a numeric or datetime dimension. Bins are computed by the adapter and rendered as bars. Exports: `DistributionChart`, `DistributionChartWithAdapter`.
200
+ - **KPI Chart**: A single scalar metric. No dimension, no breakdown — just a label and a formatted value. Exports: `KpiChart`, `KpiChartWithAdapter`.
201
+ - **Table Chart**: A sortable table of entity rows. Use for record-level views — no aggregation, just listing. Exports: `TableChart`, `TableChartWithAdapter`.
202
+
203
+ ## Utilities
204
+
205
+ - **Feature Flags**: A generic feature flag system with a provider pattern, reactive hook, and guard components. Designed for Proteus SDK integration but supports any backend via adapters. Exports: `createProteusProvider`, `FeatureFlagContext`, `FeatureFlagGuard`, `FeatureFlagProvider`, `ProtectedFeatureRoute`, `useFeatureFlag`, `useFeatureFlagProvider`.
206
+
207
+ ## Patterns
208
+
209
+ - **AI Chat**: Exports: `AiChat`, `AiChatEmptyState`, `AutopilotGradientIcon`, `CHOICES_TOOL_PROMPT`, `createAgentHubConnection`, `createConversationalAgentConnection`, `createDataFabricBarTool`, `createDataFabricDistributionTool`, `createDataFabricKpiTool`, `createDataFabricLineTool`, `createDataFabricMultiLineTool`, `createDataFabricTableTool`, `dataFabricBarClient`, `dataFabricDistributionClient`, `dataFabricKpiClient`, `dataFabricLineClient`, `dataFabricMultiLineClient`, `dataFabricTableClient`, `generateEntityFieldsDocs`, `NoDataMessage`, `presentChoicesClient`, `renderChoices`.
210
+ - **Feedback Vote Widget**: Exports: `FeedbackVoteWidget`.
211
+ - **Metric Card**: Displays a labeled metric with a value, optional trend direction, and percentage change badge. Includes a skeleton loading state for consistent UX during data fetches. Exports: `MetricCard`, `MetricCardSkeleton`.
212
+ - **Page Header**: A compound page header with back navigation, title, metadata fields, and collapsible action buttons that automatically overflow into a dropdown when space is tight. Exports: `PageHeader`, `PageHeaderActions`, `PageHeaderActionsOverflow`, `PageHeaderBackButton`, `PageHeaderCollapsibleActions`, `PageHeaderContent`, `PageHeaderDescription`, `PageHeaderField`, `PageHeaderFieldLabel`, `PageHeaderFieldValue`, `PageHeaderNav`, `PageHeaderTitle`, `PageHeaderTitleGroup`, `pageHeaderTitleVariants`, `pageHeaderVariants`.
213
+ - **Shell**: A component with a collapsible sidebar, theme and language toggles, and optional OAuth2 authentication. Exports: `ApolloShell`, `AuthContext`, `GroupMembershipGuard`, `LocaleProvider`, `MembershipDenied`, `Role`, `ShellAuthProvider`, `ShellLayout`, `ShellLogin`, `ShellSidebar`, `ShellUserProvider`, `STALE_TIME_MS`, `ThemeProvider`, `useAccessToken`, `useAuth`, `useGroupId`, `useGroupMembers`, `useIsGroupMember`, `useTheme`, `useUser`, `VerifyingMembership`.