@vectara/vectara-ui 15.9.6 → 16.0.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.
@@ -73,7 +73,8 @@ import { SPINNER_COLOR, SPINNER_SIZE } from "./spinner/types";
73
73
  import { Stat, VuiStatList } from "./statList/StatList";
74
74
  import { VuiStat } from "./stat/Stat";
75
75
  import { VuiStatus } from "./status/Status";
76
- import { VuiSteps, StepStatus, StepSize, VuiStepProps } from "./steps/Steps";
76
+ import { VuiSteps, StepStatus, StepSize, Steps } from "./steps/Steps";
77
+ import { VuiStepsVertical, StepsVertical, StepVerticalStatus } from "./stepsVertical/StepsVertical";
77
78
  import { SKELETON_COLOR, VuiSkeleton } from "./skeleton/Skeleton";
78
79
  import { VuiSummary, VuiSummaryCitation } from "./summary";
79
80
  import { VuiTable } from "./table/Table";
@@ -93,5 +94,5 @@ import { VuiInfoTooltip } from "./tooltip/InfoTooltip";
93
94
  import { VuiTopicButton } from "./topicButton/TopicButton";
94
95
  import { copyToClipboard } from "../utils/copyToClipboard";
95
96
  import { toRgb, toRgba } from "./context/Theme";
96
- export type { AnchorSide, AppContentPadding, ButtonColor, CalloutColor, ChatLanguage, ChatStyle, ChatTurn, CheckboxConfig, CodeEditorColorConfig, CodeEditorError, CodeLanguage, InfoListItemType, InfoListType, InfoTableColumnAlign, InfoTableRow, InfoTableRowType, LinkProps, MenuItem, OptionListItem, Pagination, RadioButtonConfig, SearchResult, SearchSuggestion, Sections, SectionItem, Stat, StepStatus, StepSize, TabSize, Tree, TreeItem, VuiStepProps };
97
- export { BADGE_COLOR, BUTTON_COLOR, BUTTON_SIZE, CALLOUT_COLOR, CALLOUT_SIZE, ICON_COLOR, ICON_SIZE, ICON_TYPE, PROGRESS_BAR_COLOR, SPACER_SIZE, SPINNER_COLOR, SKELETON_COLOR, SPINNER_SIZE, TAB_SIZE, TEXT_COLOR, TEXT_SIZE, TITLE_SIZE, addNotification, copyToClipboard, generateTokensProvider, toRgb, toRgba, VuiAccordion, VuiAccountButton, VuiAppContent, VuiAppHeader, VuiAppLayout, VuiAppSideNav, VuiAppSideNavLink, VuiAppSideNavGroup, VuiBadge, VuiButtonPrimary, VuiButtonSecondary, VuiButtonTertiary, VuiIconButton, VuiCallout, VuiCard, VuiChat, VuiCheckbox, VuiCode, VuiCodeEditor, VuiContextProvider, VuiCopyButton, VuiDatePicker, VuiDateRangePicker, VuiDrawer, VuiErrorBoundary, VuiFlexContainer, VuiFlexItem, VuiFormGroup, VuiGrid, VuiGridItem, VuiHorizontalRule, VuiIcon, VuiImage, VuiImagePreview, VuiInfoList, VuiInfoListItem, VuiInfoMenu, VuiInfoTable, VuiInfoTooltip, VuiInProgress, VuiItemsInput, VuiLabel, VuiLink, VuiLinkInternal, VuiList, VuiMenu, VuiMenuItem, VuiModal, VuiNotifications, VuiNumberInput, VuiOptionsButton, VuiOptionsList, VuiOptionsListItem, VuiPagination, VuiPanel, VuiPasswordInput, VuiPopover, VuiPortal, VuiProgressBar, VuiPrompt, VuiRadioButton, VuiScreenBlock, VuiSearchInput, VuiSearchResult, VuiSearchSelect, VuiSelect, VuiSetting, VuiSimpleCard, VuiSimpleGrid, VuiSpacer, VuiSpinner, VuiStat, VuiStatList, VuiStatus, VuiSteps, VuiSummary, VuiSkeleton, VuiSummaryCitation, VuiSuperCheckboxGroup, VuiSuperRadioGroup, VuiTable, VuiTab, VuiTabbedRoutes, VuiTabs, VuiTabsNavigator, VuiText, VuiTextArea, VuiTextColor, VuiTextInput, VuiTimeline, VuiTimelineItem, VuiTitle, VuiToggle, VuiTooltip, VuiTopicButton };
97
+ export type { AnchorSide, AppContentPadding, ButtonColor, CalloutColor, ChatLanguage, ChatStyle, ChatTurn, CheckboxConfig, CodeEditorColorConfig, CodeEditorError, CodeLanguage, InfoListItemType, InfoListType, InfoTableColumnAlign, InfoTableRow, InfoTableRowType, LinkProps, MenuItem, OptionListItem, Pagination, RadioButtonConfig, SearchResult, SearchSuggestion, Sections, SectionItem, Stat, StepStatus, StepSize, Steps, StepsVertical, StepVerticalStatus, TabSize, Tree, TreeItem };
98
+ export { BADGE_COLOR, BUTTON_COLOR, BUTTON_SIZE, CALLOUT_COLOR, CALLOUT_SIZE, ICON_COLOR, ICON_SIZE, ICON_TYPE, PROGRESS_BAR_COLOR, SPACER_SIZE, SPINNER_COLOR, SKELETON_COLOR, SPINNER_SIZE, TAB_SIZE, TEXT_COLOR, TEXT_SIZE, TITLE_SIZE, addNotification, copyToClipboard, generateTokensProvider, toRgb, toRgba, VuiAccordion, VuiAccountButton, VuiAppContent, VuiAppHeader, VuiAppLayout, VuiAppSideNav, VuiAppSideNavLink, VuiAppSideNavGroup, VuiBadge, VuiButtonPrimary, VuiButtonSecondary, VuiButtonTertiary, VuiIconButton, VuiCallout, VuiCard, VuiChat, VuiCheckbox, VuiCode, VuiCodeEditor, VuiContextProvider, VuiCopyButton, VuiDatePicker, VuiDateRangePicker, VuiDrawer, VuiErrorBoundary, VuiFlexContainer, VuiFlexItem, VuiFormGroup, VuiGrid, VuiGridItem, VuiHorizontalRule, VuiIcon, VuiImage, VuiImagePreview, VuiInfoList, VuiInfoListItem, VuiInfoMenu, VuiInfoTable, VuiInfoTooltip, VuiInProgress, VuiItemsInput, VuiLabel, VuiLink, VuiLinkInternal, VuiList, VuiMenu, VuiMenuItem, VuiModal, VuiNotifications, VuiNumberInput, VuiOptionsButton, VuiOptionsList, VuiOptionsListItem, VuiPagination, VuiPanel, VuiPasswordInput, VuiPopover, VuiPortal, VuiProgressBar, VuiPrompt, VuiRadioButton, VuiScreenBlock, VuiSearchInput, VuiSearchResult, VuiSearchSelect, VuiSelect, VuiSetting, VuiSimpleCard, VuiSimpleGrid, VuiSpacer, VuiSpinner, VuiStat, VuiStatList, VuiStatus, VuiSteps, VuiStepsVertical, VuiSummary, VuiSkeleton, VuiSummaryCitation, VuiSuperCheckboxGroup, VuiSuperRadioGroup, VuiTable, VuiTab, VuiTabbedRoutes, VuiTabs, VuiTabsNavigator, VuiText, VuiTextArea, VuiTextColor, VuiTextInput, VuiTimeline, VuiTimelineItem, VuiTitle, VuiToggle, VuiTooltip, VuiTopicButton };
@@ -67,6 +67,7 @@ import { VuiStatList } from "./statList/StatList";
67
67
  import { VuiStat } from "./stat/Stat";
68
68
  import { VuiStatus } from "./status/Status";
69
69
  import { VuiSteps } from "./steps/Steps";
70
+ import { VuiStepsVertical } from "./stepsVertical/StepsVertical";
70
71
  import { SKELETON_COLOR, VuiSkeleton } from "./skeleton/Skeleton";
71
72
  import { VuiSummary, VuiSummaryCitation } from "./summary";
72
73
  import { VuiTable } from "./table/Table";
@@ -86,4 +87,4 @@ import { VuiInfoTooltip } from "./tooltip/InfoTooltip";
86
87
  import { VuiTopicButton } from "./topicButton/TopicButton";
87
88
  import { copyToClipboard } from "../utils/copyToClipboard";
88
89
  import { toRgb, toRgba } from "./context/Theme";
89
- export { BADGE_COLOR, BUTTON_COLOR, BUTTON_SIZE, CALLOUT_COLOR, CALLOUT_SIZE, ICON_COLOR, ICON_SIZE, ICON_TYPE, PROGRESS_BAR_COLOR, SPACER_SIZE, SPINNER_COLOR, SKELETON_COLOR, SPINNER_SIZE, TAB_SIZE, TEXT_COLOR, TEXT_SIZE, TITLE_SIZE, addNotification, copyToClipboard, generateTokensProvider, toRgb, toRgba, VuiAccordion, VuiAccountButton, VuiAppContent, VuiAppHeader, VuiAppLayout, VuiAppSideNav, VuiAppSideNavLink, VuiAppSideNavGroup, VuiBadge, VuiButtonPrimary, VuiButtonSecondary, VuiButtonTertiary, VuiIconButton, VuiCallout, VuiCard, VuiChat, VuiCheckbox, VuiCode, VuiCodeEditor, VuiContextProvider, VuiCopyButton, VuiDatePicker, VuiDateRangePicker, VuiDrawer, VuiErrorBoundary, VuiFlexContainer, VuiFlexItem, VuiFormGroup, VuiGrid, VuiGridItem, VuiHorizontalRule, VuiIcon, VuiImage, VuiImagePreview, VuiInfoList, VuiInfoListItem, VuiInfoMenu, VuiInfoTable, VuiInfoTooltip, VuiInProgress, VuiItemsInput, VuiLabel, VuiLink, VuiLinkInternal, VuiList, VuiMenu, VuiMenuItem, VuiModal, VuiNotifications, VuiNumberInput, VuiOptionsButton, VuiOptionsList, VuiOptionsListItem, VuiPagination, VuiPanel, VuiPasswordInput, VuiPopover, VuiPortal, VuiProgressBar, VuiPrompt, VuiRadioButton, VuiScreenBlock, VuiSearchInput, VuiSearchResult, VuiSearchSelect, VuiSelect, VuiSetting, VuiSimpleCard, VuiSimpleGrid, VuiSpacer, VuiSpinner, VuiStat, VuiStatList, VuiStatus, VuiSteps, VuiSummary, VuiSkeleton, VuiSummaryCitation, VuiSuperCheckboxGroup, VuiSuperRadioGroup, VuiTable, VuiTab, VuiTabbedRoutes, VuiTabs, VuiTabsNavigator, VuiText, VuiTextArea, VuiTextColor, VuiTextInput, VuiTimeline, VuiTimelineItem, VuiTitle, VuiToggle, VuiTooltip, VuiTopicButton };
90
+ export { BADGE_COLOR, BUTTON_COLOR, BUTTON_SIZE, CALLOUT_COLOR, CALLOUT_SIZE, ICON_COLOR, ICON_SIZE, ICON_TYPE, PROGRESS_BAR_COLOR, SPACER_SIZE, SPINNER_COLOR, SKELETON_COLOR, SPINNER_SIZE, TAB_SIZE, TEXT_COLOR, TEXT_SIZE, TITLE_SIZE, addNotification, copyToClipboard, generateTokensProvider, toRgb, toRgba, VuiAccordion, VuiAccountButton, VuiAppContent, VuiAppHeader, VuiAppLayout, VuiAppSideNav, VuiAppSideNavLink, VuiAppSideNavGroup, VuiBadge, VuiButtonPrimary, VuiButtonSecondary, VuiButtonTertiary, VuiIconButton, VuiCallout, VuiCard, VuiChat, VuiCheckbox, VuiCode, VuiCodeEditor, VuiContextProvider, VuiCopyButton, VuiDatePicker, VuiDateRangePicker, VuiDrawer, VuiErrorBoundary, VuiFlexContainer, VuiFlexItem, VuiFormGroup, VuiGrid, VuiGridItem, VuiHorizontalRule, VuiIcon, VuiImage, VuiImagePreview, VuiInfoList, VuiInfoListItem, VuiInfoMenu, VuiInfoTable, VuiInfoTooltip, VuiInProgress, VuiItemsInput, VuiLabel, VuiLink, VuiLinkInternal, VuiList, VuiMenu, VuiMenuItem, VuiModal, VuiNotifications, VuiNumberInput, VuiOptionsButton, VuiOptionsList, VuiOptionsListItem, VuiPagination, VuiPanel, VuiPasswordInput, VuiPopover, VuiPortal, VuiProgressBar, VuiPrompt, VuiRadioButton, VuiScreenBlock, VuiSearchInput, VuiSearchResult, VuiSearchSelect, VuiSelect, VuiSetting, VuiSimpleCard, VuiSimpleGrid, VuiSpacer, VuiSpinner, VuiStat, VuiStatList, VuiStatus, VuiSteps, VuiStepsVertical, VuiSummary, VuiSkeleton, VuiSummaryCitation, VuiSuperCheckboxGroup, VuiSuperRadioGroup, VuiTable, VuiTab, VuiTabbedRoutes, VuiTabs, VuiTabsNavigator, VuiText, VuiTextArea, VuiTextColor, VuiTextInput, VuiTimeline, VuiTimelineItem, VuiTitle, VuiToggle, VuiTooltip, VuiTopicButton };
@@ -1,18 +1,13 @@
1
1
  import { ReactNode } from "react";
2
2
  import { StepSize, StepStatus } from "./types";
3
- export type VuiStepProps = {
3
+ export type StepProps = {
4
4
  title: React.ReactNode;
5
5
  status?: StepStatus;
6
6
  subTitle?: React.ReactNode;
7
7
  onClick?: () => void;
8
- value?: string | number;
9
- icon?: ReactNode;
10
8
  className?: string;
11
9
  ["data-testid"]?: string;
12
- };
13
- type StepProps = Omit<VuiStepProps, "step" | "icon"> & {
14
10
  size?: StepSize;
15
11
  stepNode: ReactNode;
16
12
  };
17
13
  export declare const VuiStep: ({ title, status, subTitle, onClick, stepNode, size, className, "data-testid": dataTestId }: StepProps) => import("react/jsx-runtime").JSX.Element;
18
- export {};
@@ -7,18 +7,12 @@ const statusToClassMap = {
7
7
  complete: "complete",
8
8
  current: "current",
9
9
  incomplete: "incomplete",
10
- disabled: "disabled",
11
10
  warning: "warning",
12
- danger: "danger",
13
- loading: "loading"
11
+ danger: "danger"
14
12
  };
15
13
  export const VuiStep = ({ title, status = "incomplete", subTitle, onClick, stepNode, size = "s", className, "data-testid": dataTestId }) => {
16
- const isClickable = onClick && status !== "disabled";
17
- const stepContainerClasses = classNames("vuiStep", className, {
18
- "vuiStep--clickable": isClickable
19
- });
14
+ const stepContainerClasses = classNames("vuiStep", className);
20
15
  const numberClasses = classNames("vuiStep__number", `vuiStep__number--${statusToClassMap[status]}`, {
21
- "vuiStep__number--clickable": isClickable,
22
16
  [`vuiStep__number--${size}`]: size
23
17
  });
24
18
  const titleClasses = classNames("vuiStep__title", {
@@ -27,20 +21,14 @@ export const VuiStep = ({ title, status = "incomplete", subTitle, onClick, stepN
27
21
  const subTitleClasses = classNames("vuiStep__subTitle", {
28
22
  "vuiStep__subTitle--current": status === "current"
29
23
  });
30
- const handleClick = () => {
31
- if (isClickable) {
32
- onClick();
33
- }
34
- };
35
24
  const handleKeyDown = (event) => {
36
- if (isClickable && (event.key === "Enter" || event.key === " ")) {
25
+ if (!onClick)
26
+ return;
27
+ if (event.key === "Enter" || event.key === " ") {
37
28
  event.preventDefault();
38
29
  onClick();
39
30
  }
40
31
  };
41
32
  const stepContent = (_jsxs(_Fragment, { children: [_jsx("div", Object.assign({ className: "vuiSteps__circleWrapper" }, { children: _jsx("div", Object.assign({ className: numberClasses }, { children: stepNode })) })), _jsx("div", Object.assign({ className: "vuiSteps__contentWrapper" }, { children: _jsx(VuiFlexContainer, Object.assign({ direction: "column", alignItems: "center", spacing: "xs" }, { children: _jsxs(VuiFlexItem, Object.assign({ grow: false }, { children: [_jsx(VuiText, Object.assign({ size: "s", className: titleClasses }, { children: _jsx("div", Object.assign({ className: "vuiStep__titleText" }, { children: title })) })), subTitle && _jsx("div", Object.assign({ className: subTitleClasses }, { children: subTitle }))] })) })) }))] }));
42
- if (isClickable) {
43
- return (_jsx("button", Object.assign({ className: stepContainerClasses, onKeyDown: handleKeyDown, onClick: handleClick, type: "button", "aria-current": status === "current" ? "step" : undefined, "data-testid": dataTestId, "data-status": status }, { children: stepContent })));
44
- }
45
- return (_jsx("div", Object.assign({ className: stepContainerClasses, "aria-current": status === "current" ? "step" : undefined, "data-testid": dataTestId }, { children: stepContent })));
33
+ return (_jsx("button", Object.assign({ className: stepContainerClasses, onKeyDown: handleKeyDown, onClick: onClick, type: "button", "aria-current": status === "current" ? "step" : undefined, "data-testid": dataTestId, "data-status": status }, { children: stepContent })));
46
34
  };
@@ -1,8 +1,11 @@
1
- import { VuiStepProps } from "./Step";
1
+ import { StepProps } from "./Step";
2
2
  import { StepSize, StepStatus } from "./types";
3
- export type { VuiStepProps, StepSize, StepStatus };
3
+ export type { StepSize, StepStatus };
4
+ export type Steps = Array<Omit<StepProps & {
5
+ icon?: React.ReactNode;
6
+ }, "stepNode">>;
4
7
  type Props = {
5
- steps: VuiStepProps[];
8
+ steps: Steps;
6
9
  className?: string;
7
10
  size?: StepSize;
8
11
  "data-testid"?: string;
@@ -13,16 +13,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
13
  import classNames from "classnames";
14
14
  import { BiCheck, BiError, BiSolidHand } from "react-icons/bi";
15
15
  import { VuiIcon } from "../icon/Icon";
16
- import { VuiSpinner } from "../spinner/Spinner";
17
16
  import { VuiStep } from "./Step";
18
17
  const statusToColor = {
19
18
  complete: "success",
20
19
  current: "primary",
21
20
  incomplete: "subdued",
22
- disabled: "neutral",
23
21
  warning: "warning",
24
- danger: "danger",
25
- loading: "accent"
22
+ danger: "danger"
26
23
  };
27
24
  export const VuiSteps = (_a) => {
28
25
  var { steps, className, size = "s", "data-testid": dataTestId } = _a, rest = __rest(_a, ["steps", "className", "size", "data-testid"]);
@@ -32,7 +29,7 @@ export const VuiSteps = (_a) => {
32
29
  const totalSteps = steps.length;
33
30
  const currentStepIndex = steps.findIndex((step) => step.status === "current");
34
31
  return (_jsx("div", Object.assign({ className: classes, "data-testid": dataTestId }, rest, { children: _jsx("div", Object.assign({ className: "vuiSteps__container" }, { children: steps.map((step, index) => {
35
- var _a, _b, _c, _d;
32
+ var _a, _b, _c;
36
33
  const isFirstStep = index === 0;
37
34
  const isLastStep = index === totalSteps - 1;
38
35
  const stepContainerClasses = classNames("vuiSteps__stepContainer", {
@@ -42,6 +39,6 @@ export const VuiSteps = (_a) => {
42
39
  const icon = (_a = step.icon) !== null && _a !== void 0 ? _a : (step.status === "complete" ? (_jsx(BiCheck, {})) : step.status === "danger" ? (_jsx(BiError, {})) : step.status === "warning" ? (_jsx(BiSolidHand, {})) : null);
43
40
  return (_jsxs("div", Object.assign({ className: stepContainerClasses }, { children: [!isLastStep && (_jsx("div", { className: classNames("vuiSteps__connector", {
44
41
  "vuiSteps__connector--complete": index < currentStepIndex
45
- }) })), _jsx(VuiStep, { title: step.title, status: step.status, onClick: step.onClick, "data-testid": (_b = step["data-testid"]) !== null && _b !== void 0 ? _b : `${dataTestId}-step-${index}`, stepNode: step.status === "loading" ? (_jsx("div", { children: _jsx(VuiSpinner, {}) })) : icon ? (_jsx(VuiIcon, Object.assign({ color: statusToColor[(_c = step.status) !== null && _c !== void 0 ? _c : "incomplete"], size: size === "xs" ? undefined : size }, { children: icon }))) : size === "xs" ? null : (_jsx("span", Object.assign({ className: "vuiStep__numberText" }, { children: (_d = step.value) !== null && _d !== void 0 ? _d : index + 1 }))), size: size, subTitle: step.subTitle })] }), index));
42
+ }) })), _jsx(VuiStep, { title: step.title, status: step.status, onClick: step.onClick, "data-testid": (_b = step["data-testid"]) !== null && _b !== void 0 ? _b : `${dataTestId}-step-${index}`, stepNode: icon ? (_jsx(VuiIcon, Object.assign({ color: statusToColor[(_c = step.status) !== null && _c !== void 0 ? _c : "incomplete"], size: size === "xs" ? undefined : size }, { children: icon }))) : size === "xs" ? null : (_jsx("span", Object.assign({ className: "vuiStep__numberText" }, { children: index + 1 }))), size: size, subTitle: step.subTitle })] }), index));
46
43
  }) })) })));
47
44
  };
@@ -82,10 +82,6 @@ $stepSizeM: 36px;
82
82
  border-radius: $sizeXxs;
83
83
  transition: all 0.2s ease;
84
84
 
85
- &--clickable {
86
- cursor: pointer;
87
- }
88
-
89
85
  .vuiSpinner {
90
86
  width: var(--step-size);
91
87
  height: var(--step-size);
@@ -144,15 +140,6 @@ $stepSizeM: 36px;
144
140
  &--danger {
145
141
  background-color: var(--vui-color-danger-lighter-shade);
146
142
  }
147
-
148
- &--disabled {
149
- background-color: var(--vui-color-light-shade);
150
- color: var(--vui-color-dark-shade);
151
- }
152
-
153
- &--clickable {
154
- cursor: pointer;
155
- }
156
143
  }
157
144
 
158
145
  .vuiStep__numberText {
@@ -1,2 +1,2 @@
1
- export type StepStatus = "complete" | "current" | "incomplete" | "disabled" | "warning" | "danger" | "loading";
1
+ export type StepStatus = "complete" | "current" | "incomplete" | "warning" | "danger";
2
2
  export type StepSize = "xs" | "s" | "m";
@@ -0,0 +1,11 @@
1
+ import { StepVerticalStatus } from "./types";
2
+ export type Props = {
3
+ title: React.ReactNode;
4
+ status: StepVerticalStatus;
5
+ isActive?: boolean;
6
+ onClick: () => void;
7
+ index: number;
8
+ icon?: React.ReactNode;
9
+ ["data-testid"]?: string;
10
+ };
11
+ export declare const VuiStepVertical: ({ title, status, isActive, onClick, index, icon, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,35 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import classNames from "classnames";
14
+ import { VuiIcon } from "../icon/Icon";
15
+ const statusToColor = {
16
+ complete: "success",
17
+ current: "primary",
18
+ incomplete: "subdued",
19
+ warning: "warning",
20
+ danger: "danger"
21
+ };
22
+ const statusToClassMap = {
23
+ complete: "complete",
24
+ incomplete: "incomplete",
25
+ warning: "warning",
26
+ danger: "danger"
27
+ };
28
+ export const VuiStepVertical = (_a) => {
29
+ var { title, status, isActive, onClick, index, icon } = _a, rest = __rest(_a, ["title", "status", "isActive", "onClick", "index", "icon"]);
30
+ const classes = classNames("vuiStepVertical", `vuiStepVertical--${statusToClassMap[status]}`, {
31
+ "vuiStepVertical-isActive": isActive
32
+ });
33
+ const finalIcon = (_jsx("div", Object.assign({ className: "vuiStepVerticalContainer__icon" }, { children: icon && (_jsx(VuiIcon, Object.assign({ size: "s", type: "token", color: statusToColor[status !== null && status !== void 0 ? status : "incomplete"] }, { children: icon }))) })));
34
+ return (_jsxs("button", Object.assign({ className: classes, onClick: onClick }, rest, { children: [_jsxs("div", Object.assign({ className: "vuiStepVertical__index" }, { children: [index, "."] })), _jsx("div", Object.assign({ className: "vuiStepVertical__content" }, { children: _jsx("div", { children: title }) })), finalIcon] })));
35
+ };
@@ -0,0 +1,9 @@
1
+ import { Props as StepVerticalProps } from "./StepVertical";
2
+ export type { StepVerticalStatus } from "./types";
3
+ export type StepsVertical = Omit<StepVerticalProps, "index" | "icon">[];
4
+ type Props = {
5
+ steps: StepsVertical;
6
+ className?: string;
7
+ "data-testid"?: string;
8
+ };
9
+ export declare const VuiStepsVertical: ({ steps, className, "data-testid": dataTestId, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,27 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import classNames from "classnames";
14
+ import { VuiStepVertical } from "./StepVertical";
15
+ import { BiCheck, BiError, BiSolidHand } from "react-icons/bi";
16
+ export const VuiStepsVertical = (_a) => {
17
+ var { steps, className, "data-testid": dataTestId } = _a, rest = __rest(_a, ["steps", "className", "data-testid"]);
18
+ const classes = classNames("vuiStepsVertical", className);
19
+ return (_jsx("div", Object.assign({ className: classes, "data-testid": dataTestId }, rest, { children: steps.map((step, index) => {
20
+ var _a;
21
+ const icon = step.status === "complete" ? (_jsx(BiCheck, {})) : step.status === "danger" ? (_jsx(BiError, {})) : step.status === "warning" ? (_jsx(BiSolidHand, {})) : null;
22
+ const stepContainerClasses = classNames("vuiStepVerticalContainer", {
23
+ "vuiStepVerticalContainer-isActive": step.isActive
24
+ });
25
+ return (_jsx("div", Object.assign({ className: stepContainerClasses }, { children: _jsx(VuiStepVertical, { title: step.title, status: step.status, isActive: step.isActive, onClick: step.onClick, "data-testid": (_a = step["data-testid"]) !== null && _a !== void 0 ? _a : `${dataTestId}-step-${index}`, index: index + 1, icon: icon }) }), index));
26
+ }) })));
27
+ };
@@ -0,0 +1,81 @@
1
+ .vuiStepsVertical {
2
+ display: flex;
3
+ flex-direction: column;
4
+ align-items: stretch;
5
+ max-width: 280px;
6
+ }
7
+
8
+ .vuiStepVerticalContainer {
9
+ padding-left: $sizeS;
10
+ border-left: 1px solid var(--vui-color-medium-shade);
11
+ }
12
+
13
+ .vuiStepVerticalContainer-isActive {
14
+ padding-left: $sizeS - 1px;
15
+ border-left: 2px solid var(--vui-color-primary-shade);
16
+ }
17
+
18
+ .vuiStepVerticalContainer {
19
+ flex-grow: 1;
20
+ display: flex;
21
+ align-items: center;
22
+ gap: $sizeS;
23
+ }
24
+
25
+ .vuiStepVertical {
26
+ flex-grow: 1;
27
+ display: flex;
28
+ gap: $sizeS;
29
+ align-items: center;
30
+ padding: $sizeXs $sizeS $sizeXs $sizeM;
31
+ font-size: $fontSizeStandard;
32
+ color: var(--vui-color-text);
33
+ background-color: var(--vui-color-empty-shade);
34
+ border-radius: $sizeXxs;
35
+ width: 100%;
36
+
37
+ &:focus {
38
+ // Ensures focus ring is visible.
39
+ z-index: 2;
40
+ }
41
+
42
+ &:hover,
43
+ &.vuiStepVertical-isActive {
44
+ background-color: var(--vui-color-light-shade);
45
+
46
+ .vuiStepVerticalContainer__icon {
47
+ .vuiIcon--token {
48
+ // border-color: var(--vui-color-medium-shade);
49
+ box-shadow: $shadowSmallEnd;
50
+ }
51
+ }
52
+ }
53
+ }
54
+
55
+ .vuiStepVertical__index {
56
+ flex-shrink: 0;
57
+ flex-grow: 0;
58
+ width: 26px;
59
+ text-align: left;
60
+ }
61
+
62
+ .vuiStepVertical__content {
63
+ flex-grow: 1;
64
+ display: flex;
65
+ align-items: center;
66
+ justify-content: space-between;
67
+ gap: $sizeXs;
68
+ }
69
+
70
+ .vuiStepVerticalContainer__icon {
71
+ // Set consistent size so that empty icons still take up space
72
+ // and the button height doesn't change when there's no icon.
73
+ height: 20px;
74
+ flex-shrink: 0;
75
+ flex-grow: 0;
76
+
77
+ .vuiIcon--token {
78
+ box-shadow: $shadowSmallStart;
79
+ transition: box-shadow $transitionSpeed;
80
+ }
81
+ }
@@ -0,0 +1 @@
1
+ export type StepVerticalStatus = "complete" | "incomplete" | "warning" | "danger";
@@ -0,0 +1 @@
1
+ export {};
@@ -4993,9 +4993,6 @@ h2.react-datepicker__current-month {
4993
4993
  border-radius: 4px;
4994
4994
  transition: all 0.2s ease;
4995
4995
  }
4996
- .vuiStep--clickable {
4997
- cursor: pointer;
4998
- }
4999
4996
  .vuiStep .vuiSpinner {
5000
4997
  width: var(--step-size);
5001
4998
  height: var(--step-size);
@@ -5044,13 +5041,6 @@ h2.react-datepicker__current-month {
5044
5041
  .vuiStep__number--danger {
5045
5042
  background-color: var(--vui-color-danger-lighter-shade);
5046
5043
  }
5047
- .vuiStep__number--disabled {
5048
- background-color: var(--vui-color-light-shade);
5049
- color: var(--vui-color-dark-shade);
5050
- }
5051
- .vuiStep__number--clickable {
5052
- cursor: pointer;
5053
- }
5054
5044
 
5055
5045
  .vuiStep__numberText {
5056
5046
  line-height: 1;
@@ -5084,6 +5074,77 @@ h2.react-datepicker__current-month {
5084
5074
  color: var(--vui-color-medium-shade);
5085
5075
  }
5086
5076
 
5077
+ .vuiStepsVertical {
5078
+ display: flex;
5079
+ flex-direction: column;
5080
+ align-items: stretch;
5081
+ max-width: 280px;
5082
+ }
5083
+
5084
+ .vuiStepVerticalContainer {
5085
+ padding-left: 12px;
5086
+ border-left: 1px solid var(--vui-color-medium-shade);
5087
+ }
5088
+
5089
+ .vuiStepVerticalContainer-isActive {
5090
+ padding-left: 11px;
5091
+ border-left: 2px solid var(--vui-color-primary-shade);
5092
+ }
5093
+
5094
+ .vuiStepVerticalContainer {
5095
+ flex-grow: 1;
5096
+ display: flex;
5097
+ align-items: center;
5098
+ gap: 12px;
5099
+ }
5100
+
5101
+ .vuiStepVertical {
5102
+ flex-grow: 1;
5103
+ display: flex;
5104
+ gap: 12px;
5105
+ align-items: center;
5106
+ padding: 8px 12px 8px 16px;
5107
+ font-size: 14px;
5108
+ color: var(--vui-color-text);
5109
+ background-color: var(--vui-color-empty-shade);
5110
+ border-radius: 4px;
5111
+ width: 100%;
5112
+ }
5113
+ .vuiStepVertical:focus {
5114
+ z-index: 2;
5115
+ }
5116
+ .vuiStepVertical:hover, .vuiStepVertical.vuiStepVertical-isActive {
5117
+ background-color: var(--vui-color-light-shade);
5118
+ }
5119
+ .vuiStepVertical:hover .vuiStepVerticalContainer__icon .vuiIcon--token, .vuiStepVertical.vuiStepVertical-isActive .vuiStepVerticalContainer__icon .vuiIcon--token {
5120
+ box-shadow: rgba(60, 64, 67, 0.3) 0px 1px 2px 0px, rgba(60, 64, 67, 0.15) 0px 2px 6px 2px;
5121
+ }
5122
+
5123
+ .vuiStepVertical__index {
5124
+ flex-shrink: 0;
5125
+ flex-grow: 0;
5126
+ width: 26px;
5127
+ text-align: left;
5128
+ }
5129
+
5130
+ .vuiStepVertical__content {
5131
+ flex-grow: 1;
5132
+ display: flex;
5133
+ align-items: center;
5134
+ justify-content: space-between;
5135
+ gap: 8px;
5136
+ }
5137
+
5138
+ .vuiStepVerticalContainer__icon {
5139
+ height: 20px;
5140
+ flex-shrink: 0;
5141
+ flex-grow: 0;
5142
+ }
5143
+ .vuiStepVerticalContainer__icon .vuiIcon--token {
5144
+ box-shadow: rgba(60, 64, 67, 0.3) 0px 0px 0px 0px, rgba(60, 64, 67, 0.15) 0px 0px 0px 0px;
5145
+ transition: box-shadow 0.2s;
5146
+ }
5147
+
5087
5148
  .vuiSummary {
5088
5149
  font-size: 16px;
5089
5150
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vectara/vectara-ui",
3
- "version": "15.9.6",
3
+ "version": "16.0.0",
4
4
  "homepage": "./",
5
5
  "description": "Vectara's design system, codified as a React and Sass component library",
6
6
  "author": "Vectara",
@@ -1,9 +1,9 @@
1
- import { VuiSteps, VuiStepProps } from "../../../lib";
1
+ import { VuiSteps, Steps } from "../../../lib";
2
2
  import { BiUser, BiCog, BiCheck, BiPlanet, BiRocket, BiStar } from "react-icons/bi";
3
3
  import { Subsection } from "../../components/Subsection";
4
4
 
5
5
  export const CustomSteps = () => {
6
- const customIconSteps: VuiStepProps[] = [
6
+ const customIconSteps: Steps = [
7
7
  {
8
8
  title: "User Registration",
9
9
  subTitle: "Create your account",
@@ -39,40 +39,11 @@ export const CustomSteps = () => {
39
39
  }
40
40
  ];
41
41
 
42
- const customStepValues: VuiStepProps[] = [
43
- {
44
- title: "Initialize",
45
- subTitle: "Setting up environment",
46
- status: "complete",
47
- value: "A"
48
- },
49
- {
50
- title: "Configure",
51
- subTitle: "Applying settings",
52
- status: "current",
53
- value: "B"
54
- },
55
- {
56
- title: "Deploy",
57
- subTitle: "Launching application",
58
- value: "C"
59
- },
60
- {
61
- title: "Monitor",
62
- subTitle: "Tracking performance",
63
- value: "D"
64
- }
65
- ];
66
-
67
42
  return (
68
43
  <>
69
44
  <Subsection title="Custom icons">
70
45
  <VuiSteps steps={customIconSteps} />
71
46
  </Subsection>
72
-
73
- <Subsection title="Custom step values">
74
- <VuiSteps steps={customStepValues} />
75
- </Subsection>
76
47
  </>
77
48
  );
78
49
  };
@@ -1,5 +1,5 @@
1
1
  import { useState } from "react";
2
- import { VuiSteps, VuiStepProps, StepStatus } from "../../../lib";
2
+ import { VuiSteps, Steps, StepStatus } from "../../../lib";
3
3
 
4
4
  export const InteractiveSteps = () => {
5
5
  const [currentStep, setCurrentStep] = useState(1);
@@ -13,7 +13,7 @@ export const InteractiveSteps = () => {
13
13
  return "incomplete";
14
14
  };
15
15
 
16
- const dynamicSteps: VuiStepProps[] = [
16
+ const dynamicSteps: Steps = [
17
17
  {
18
18
  title: "Account Setup",
19
19
  status: getStepStatus(0, "danger"),
@@ -34,7 +34,7 @@ export const InteractiveSteps = () => {
34
34
  },
35
35
  {
36
36
  title: "Complete",
37
- status: getStepStatus(3, "complete"),
37
+ status: "incomplete",
38
38
  subTitle: "Finish setup",
39
39
  onClick: () => setCurrentStep(3)
40
40
  }
@@ -1,8 +1,8 @@
1
- import { VuiSteps, VuiStepProps } from "../../../lib";
1
+ import { VuiSteps, Steps } from "../../../lib";
2
2
  import { Subsection } from "../../components/Subsection";
3
3
 
4
4
  export const StepSizes = () => {
5
- const basicSteps: VuiStepProps[] = [
5
+ const basicSteps: Steps = [
6
6
  {
7
7
  title: "Completed step",
8
8
  status: "complete"
@@ -14,10 +14,6 @@ export const StepSizes = () => {
14
14
  {
15
15
  title: "Incomplete step which will wrap to the next line",
16
16
  status: "incomplete"
17
- },
18
- {
19
- title: "Disabled step",
20
- status: "disabled"
21
17
  }
22
18
  ];
23
19
 
@@ -1,7 +1,7 @@
1
- import { VuiSteps, VuiStepProps } from "../../../lib";
1
+ import { VuiSteps, Steps } from "../../../lib";
2
2
 
3
3
  export const StepStatuses = () => {
4
- const statusSteps: VuiStepProps[] = [
4
+ const statusSteps: Steps = [
5
5
  {
6
6
  title: "Complete Step",
7
7
  subTitle: "This step has been completed",
@@ -17,11 +17,6 @@ export const StepStatuses = () => {
17
17
  subTitle: "This step is not yet completed",
18
18
  status: "incomplete"
19
19
  },
20
- {
21
- title: "Disabled Step",
22
- subTitle: "This step is disabled",
23
- status: "disabled"
24
- },
25
20
  {
26
21
  title: "Warning Step",
27
22
  subTitle: "This step has a warning",
@@ -31,11 +26,6 @@ export const StepStatuses = () => {
31
26
  title: "Danger Step",
32
27
  subTitle: "This step has an error",
33
28
  status: "danger"
34
- },
35
- {
36
- title: "Loading Step",
37
- subTitle: "This step is processing",
38
- status: "loading"
39
29
  }
40
30
  ];
41
31
 
@@ -1,10 +1,8 @@
1
- import { BasicSteps } from "./BasicSteps";
2
1
  import { InteractiveSteps } from "./InteractiveSteps";
3
2
  import { StepStatuses } from "./StepStatuses";
4
3
  import { StepSizes } from "./StepSizes";
5
4
  import { CustomSteps } from "./CustomSteps";
6
5
 
7
- const BasicStepsSource = require("!!raw-loader!./BasicSteps");
8
6
  const InteractiveStepsSource = require("!!raw-loader!./InteractiveSteps");
9
7
  const StepStatusesSource = require("!!raw-loader!./StepStatuses");
10
8
  const StepSizesSource = require("!!raw-loader!./StepSizes");
@@ -14,11 +12,6 @@ export const steps = {
14
12
  name: "Steps",
15
13
  path: "/steps",
16
14
  examples: [
17
- {
18
- name: "Basic steps",
19
- component: <BasicSteps />,
20
- source: BasicStepsSource.default.toString()
21
- },
22
15
  {
23
16
  name: "Interactive steps",
24
17
  component: <InteractiveSteps />,
@@ -0,0 +1,41 @@
1
+ import { useState } from "react";
2
+ import { VuiStepsVertical, StepsVertical } from "../../../lib";
3
+
4
+ export const VerticalSteps = () => {
5
+ const [currentStep, setCurrentStep] = useState(1);
6
+
7
+ const steps: StepsVertical = [
8
+ {
9
+ title: "General",
10
+ status: "danger",
11
+ isActive: currentStep === 0,
12
+ onClick: () => setCurrentStep(0)
13
+ },
14
+ {
15
+ title: "Model",
16
+ status: "complete",
17
+ isActive: currentStep === 1,
18
+ onClick: () => setCurrentStep(1)
19
+ },
20
+ {
21
+ title: "Abilities",
22
+ status: "incomplete",
23
+ isActive: currentStep === 2,
24
+ onClick: () => setCurrentStep(2)
25
+ },
26
+ {
27
+ title: "Instructions",
28
+ status: "incomplete",
29
+ isActive: currentStep === 3,
30
+ onClick: () => setCurrentStep(3)
31
+ },
32
+ {
33
+ title: "Advanced",
34
+ status: "warning",
35
+ isActive: currentStep === 4,
36
+ onClick: () => setCurrentStep(4)
37
+ }
38
+ ];
39
+
40
+ return <VuiStepsVertical steps={steps} />;
41
+ };
@@ -0,0 +1,15 @@
1
+ import { VerticalSteps } from "./VerticalSteps";
2
+
3
+ const VerticalStepsSource = require("!!raw-loader!./VerticalSteps");
4
+
5
+ export const stepsVertical = {
6
+ name: "Vertical Steps",
7
+ path: "/verticalSteps",
8
+ examples: [
9
+ {
10
+ name: "Vertical steps",
11
+ component: <VerticalSteps />,
12
+ source: VerticalStepsSource.default.toString()
13
+ }
14
+ ]
15
+ };
@@ -51,6 +51,7 @@ import { stat } from "./pages/stat";
51
51
  import { status } from "./pages/status";
52
52
  import { statList } from "./pages/statList";
53
53
  import { steps } from "./pages/steps";
54
+ import { stepsVertical } from "./pages/stepsVertical";
54
55
  import { summary } from "./pages/summary";
55
56
  import { skeleton } from "./pages/skeleton";
56
57
  import { superCheckboxGroup } from "./pages/superCheckboxGroup";
@@ -89,7 +90,21 @@ export const categories: Category[] = [
89
90
  },
90
91
  {
91
92
  name: "Layout",
92
- pages: [tabs, timeline, accordion, steps, popover, infoMenu, flex, grid, spacer, card, panel, horizontalRule]
93
+ pages: [
94
+ tabs,
95
+ timeline,
96
+ accordion,
97
+ stepsVertical,
98
+ steps,
99
+ popover,
100
+ infoMenu,
101
+ flex,
102
+ grid,
103
+ spacer,
104
+ card,
105
+ panel,
106
+ horizontalRule
107
+ ]
93
108
  },
94
109
  {
95
110
  name: "Content",
@@ -1,25 +0,0 @@
1
- import { VuiSteps, VuiStepProps } from "../../../lib";
2
-
3
- export const BasicSteps = () => {
4
- const basicSteps: VuiStepProps[] = [
5
- {
6
- title: "Completed step",
7
- status: "complete",
8
- "data-testid": "customDataTestId"
9
- },
10
- {
11
- title: "Selected step",
12
- status: "current"
13
- },
14
- {
15
- title: "Incomplete step which will wrap to the next line",
16
- status: "incomplete"
17
- },
18
- {
19
- title: "Disabled step",
20
- status: "disabled"
21
- }
22
- ];
23
-
24
- return <VuiSteps steps={basicSteps} data-testid="steps" />;
25
- };