@vectara/vectara-ui 17.3.1 → 18.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.
Files changed (29) hide show
  1. package/lib/components/durationBar/DurationBar.d.ts +2 -2
  2. package/lib/components/durationBar/DurationBar.js +10 -0
  3. package/lib/components/durationBar/_index.scss +10 -1
  4. package/lib/components/index.d.ts +6 -2
  5. package/lib/components/index.js +6 -2
  6. package/lib/components/menuList/VuiMenuList.d.ts +7 -0
  7. package/lib/components/menuList/VuiMenuList.js +18 -0
  8. package/lib/components/menuList/VuiMenuListButton.d.ts +13 -0
  9. package/lib/components/menuList/VuiMenuListButton.js +34 -0
  10. package/lib/components/menuList/_index.scss +53 -0
  11. package/lib/components/sideList/VuiSideList.d.ts +7 -0
  12. package/lib/components/sideList/VuiSideList.js +18 -0
  13. package/lib/components/sideList/VuiSideListButton.d.ts +12 -0
  14. package/lib/components/sideList/VuiSideListButton.js +34 -0
  15. package/lib/components/sideList/_index.scss +47 -0
  16. package/lib/components/stepsVertical/StepsVertical.d.ts +9 -2
  17. package/lib/components/stepsVertical/StepsVertical.js +7 -10
  18. package/lib/styles/index.css +101 -74
  19. package/package.json +1 -1
  20. package/src/docs/pages/durationBar/Colors.tsx +2 -2
  21. package/src/docs/pages/menuList/MenuList.tsx +46 -0
  22. package/src/docs/pages/menuList/index.tsx +15 -0
  23. package/src/docs/pages/sideList/SideList.tsx +38 -0
  24. package/src/docs/pages/sideList/index.tsx +15 -0
  25. package/src/docs/pages/stepsVertical/VerticalSteps.tsx +22 -11
  26. package/src/docs/pages.tsx +23 -16
  27. package/lib/components/stepsVertical/StepVertical.d.ts +0 -11
  28. package/lib/components/stepsVertical/StepVertical.js +0 -35
  29. package/lib/components/stepsVertical/_index.scss +0 -82
@@ -1,9 +1,9 @@
1
- import { PROGRESS_BAR_COLOR } from "../progressBar/ProgressBar";
1
+ export declare const DURATION_BAR_COLOR: readonly ["accent", "primary", "danger", "warning", "success", "neutral", "subdued", "medium"];
2
2
  type Props = {
3
3
  window: number;
4
4
  start: number;
5
5
  end: number;
6
- color: (typeof PROGRESS_BAR_COLOR)[number];
6
+ color: (typeof DURATION_BAR_COLOR)[number];
7
7
  minBarWidthPx?: number;
8
8
  className?: string;
9
9
  };
@@ -1,5 +1,15 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import classNames from "classnames";
3
+ export const DURATION_BAR_COLOR = [
4
+ "accent",
5
+ "primary",
6
+ "danger",
7
+ "warning",
8
+ "success",
9
+ "neutral",
10
+ "subdued",
11
+ "medium"
12
+ ];
3
13
  const DEFAULT_MIN_BAR_WIDTH_PX = 4;
4
14
  export const VuiDurationBar = ({ window, start, end, color, minBarWidthPx = DEFAULT_MIN_BAR_WIDTH_PX, className }) => {
5
15
  // Clamp the bar to the window boundaries.
@@ -2,11 +2,14 @@
2
2
 
3
3
  .vuiDurationBar {
4
4
  position: relative;
5
+ // Set height here to ensure the component's height
6
+ // affects the surrounding layout.
7
+ height: $sizeXs;
5
8
  }
6
9
 
7
10
  .vuiDurationBar__bar {
8
11
  position: absolute;
9
- height: $sizeXs;
12
+ height: 100%;
10
13
  }
11
14
 
12
15
  // Color
@@ -28,6 +31,12 @@ $color: (
28
31
  ),
29
32
  neutral: (
30
33
  "background-color": var(--vui-color-dark-shade)
34
+ ),
35
+ subdued: (
36
+ "background-color": var(--vui-color-subdued-shade)
37
+ ),
38
+ medium: (
39
+ "background-color": var(--vui-color-medium-shade)
31
40
  )
32
41
  );
33
42
 
@@ -27,7 +27,7 @@ import { VuiCopyButton } from "./copyButton/CopyButton";
27
27
  import { VuiDatePicker } from "./datePicker/DatePicker";
28
28
  import { VuiDateRangePicker } from "./datePicker/DateRangePicker";
29
29
  import { VuiDrawer } from "./drawer/Drawer";
30
- import { VuiDurationBar } from "./durationBar/DurationBar";
30
+ import { DURATION_BAR_COLOR, VuiDurationBar } from "./durationBar/DurationBar";
31
31
  import { VuiErrorBoundary } from "./errorBoundary/ErrorBoundary";
32
32
  import { VuiFlexContainer } from "./flex/FlexContainer";
33
33
  import { VuiFlexItem } from "./flex/FlexItem";
@@ -51,6 +51,8 @@ import { LinkProps } from "./link/types";
51
51
  import { VuiList } from "./list/List";
52
52
  import { VuiMenu } from "./menu/Menu";
53
53
  import { VuiMenuItem, MenuItem } from "./menu/MenuItem";
54
+ import { VuiMenuList } from "./menuList/VuiMenuList";
55
+ import { VuiMenuListButton } from "./menuList/VuiMenuListButton";
54
56
  import { VuiModal } from "./modal/Modal";
55
57
  import { addNotification } from "./notification/Notification";
56
58
  import { VuiNotifications } from "./notification/Notifications";
@@ -70,6 +72,8 @@ import { SearchSuggestion } from "./searchInput/types";
70
72
  import { SearchResult, VuiSearchResult } from "./searchResult/SearchResult";
71
73
  import { VuiSearchSelect } from "./searchSelect/SearchSelect";
72
74
  import { VuiSetting } from "./setting/Setting";
75
+ import { VuiSideList } from "./sideList/VuiSideList";
76
+ import { VuiSideListButton } from "./sideList/VuiSideListButton";
73
77
  import { VuiSpacer } from "./spacer/Spacer";
74
78
  import { SPACER_SIZE } from "./spacer/types";
75
79
  import { VuiSpinner } from "./spinner/Spinner";
@@ -101,4 +105,4 @@ import { VuiTopicButton } from "./topicButton/TopicButton";
101
105
  import { copyToClipboard } from "../utils/copyToClipboard";
102
106
  import { toRgb, toRgba } from "./context/Theme";
103
107
  export type { AnchorSide, AppContentPadding, ButtonColor, CalloutColor, ChatLanguage, ChatStyle, ChatTurn, CheckboxConfig, CodeEditorColorConfig, CodeEditorError, CodeLanguage, InfoListItemType, InfoListType, InfoTableColumnAlign, InfoTableRow, InfoTableRowType, KvTableAlign, KvTableItem, KvTableItems, KvTablePadding, LinkProps, MenuItem, OptionListItem, Pagination, RadioButtonConfig, SearchResult, SearchSuggestion, Sections, SectionItem, SpansRow, Stat, StepStatus, StepSize, Steps, StepsVertical, StepVerticalStatus, TabNavigatorRoute, TabSize, Tree, TreeItem };
104
- 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, VuiComplexConfigurationButton, VuiContextProvider, VuiCopyButton, VuiDatePicker, VuiDateRangePicker, VuiDrawer, VuiDurationBar, VuiErrorBoundary, VuiFlexContainer, VuiFlexItem, VuiFormGroup, VuiGrid, VuiGridItem, VuiHorizontalRule, VuiIcon, VuiImage, VuiImagePreview, VuiInfoList, VuiInfoListItem, VuiInfoMenu, VuiInfoTable, VuiInfoTooltip, VuiKvTable, 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, VuiSpans, 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 };
108
+ export { BADGE_COLOR, BUTTON_COLOR, BUTTON_SIZE, CALLOUT_COLOR, CALLOUT_SIZE, DURATION_BAR_COLOR, 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, VuiComplexConfigurationButton, VuiContextProvider, VuiCopyButton, VuiDatePicker, VuiDateRangePicker, VuiDrawer, VuiDurationBar, VuiErrorBoundary, VuiFlexContainer, VuiFlexItem, VuiFormGroup, VuiGrid, VuiGridItem, VuiHorizontalRule, VuiIcon, VuiImage, VuiImagePreview, VuiInfoList, VuiInfoListItem, VuiInfoMenu, VuiInfoTable, VuiInfoTooltip, VuiKvTable, VuiInProgress, VuiItemsInput, VuiLabel, VuiLink, VuiLinkInternal, VuiList, VuiMenu, VuiMenuItem, VuiMenuList, VuiMenuListButton, VuiModal, VuiNotifications, VuiNumberInput, VuiOptionsButton, VuiOptionsList, VuiOptionsListItem, VuiPagination, VuiPanel, VuiPasswordInput, VuiPopover, VuiPortal, VuiProgressBar, VuiPrompt, VuiRadioButton, VuiScreenBlock, VuiSearchInput, VuiSearchResult, VuiSearchSelect, VuiSelect, VuiSetting, VuiSideList, VuiSideListButton, VuiSimpleCard, VuiSimpleGrid, VuiSpacer, VuiSpans, 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 };
@@ -23,7 +23,7 @@ import { VuiCopyButton } from "./copyButton/CopyButton";
23
23
  import { VuiDatePicker } from "./datePicker/DatePicker";
24
24
  import { VuiDateRangePicker } from "./datePicker/DateRangePicker";
25
25
  import { VuiDrawer } from "./drawer/Drawer";
26
- import { VuiDurationBar } from "./durationBar/DurationBar";
26
+ import { DURATION_BAR_COLOR, VuiDurationBar } from "./durationBar/DurationBar";
27
27
  import { VuiErrorBoundary } from "./errorBoundary/ErrorBoundary";
28
28
  import { VuiFlexContainer } from "./flex/FlexContainer";
29
29
  import { VuiFlexItem } from "./flex/FlexItem";
@@ -45,6 +45,8 @@ import { VuiLink, VuiLinkInternal } from "./link/Link";
45
45
  import { VuiList } from "./list/List";
46
46
  import { VuiMenu } from "./menu/Menu";
47
47
  import { VuiMenuItem } from "./menu/MenuItem";
48
+ import { VuiMenuList } from "./menuList/VuiMenuList";
49
+ import { VuiMenuListButton } from "./menuList/VuiMenuListButton";
48
50
  import { VuiModal } from "./modal/Modal";
49
51
  import { addNotification } from "./notification/Notification";
50
52
  import { VuiNotifications } from "./notification/Notifications";
@@ -62,6 +64,8 @@ import { VuiSearchInput } from "./searchInput/SearchInput";
62
64
  import { VuiSearchResult } from "./searchResult/SearchResult";
63
65
  import { VuiSearchSelect } from "./searchSelect/SearchSelect";
64
66
  import { VuiSetting } from "./setting/Setting";
67
+ import { VuiSideList } from "./sideList/VuiSideList";
68
+ import { VuiSideListButton } from "./sideList/VuiSideListButton";
65
69
  import { VuiSpacer } from "./spacer/Spacer";
66
70
  import { SPACER_SIZE } from "./spacer/types";
67
71
  import { VuiSpinner } from "./spinner/Spinner";
@@ -91,4 +95,4 @@ import { VuiInfoTooltip } from "./tooltip/InfoTooltip";
91
95
  import { VuiTopicButton } from "./topicButton/TopicButton";
92
96
  import { copyToClipboard } from "../utils/copyToClipboard";
93
97
  import { toRgb, toRgba } from "./context/Theme";
94
- 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, VuiComplexConfigurationButton, VuiContextProvider, VuiCopyButton, VuiDatePicker, VuiDateRangePicker, VuiDrawer, VuiDurationBar, VuiErrorBoundary, VuiFlexContainer, VuiFlexItem, VuiFormGroup, VuiGrid, VuiGridItem, VuiHorizontalRule, VuiIcon, VuiImage, VuiImagePreview, VuiInfoList, VuiInfoListItem, VuiInfoMenu, VuiInfoTable, VuiInfoTooltip, VuiKvTable, 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, VuiSpans, 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 };
98
+ export { BADGE_COLOR, BUTTON_COLOR, BUTTON_SIZE, CALLOUT_COLOR, CALLOUT_SIZE, DURATION_BAR_COLOR, 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, VuiComplexConfigurationButton, VuiContextProvider, VuiCopyButton, VuiDatePicker, VuiDateRangePicker, VuiDrawer, VuiDurationBar, VuiErrorBoundary, VuiFlexContainer, VuiFlexItem, VuiFormGroup, VuiGrid, VuiGridItem, VuiHorizontalRule, VuiIcon, VuiImage, VuiImagePreview, VuiInfoList, VuiInfoListItem, VuiInfoMenu, VuiInfoTable, VuiInfoTooltip, VuiKvTable, VuiInProgress, VuiItemsInput, VuiLabel, VuiLink, VuiLinkInternal, VuiList, VuiMenu, VuiMenuItem, VuiMenuList, VuiMenuListButton, VuiModal, VuiNotifications, VuiNumberInput, VuiOptionsButton, VuiOptionsList, VuiOptionsListItem, VuiPagination, VuiPanel, VuiPasswordInput, VuiPopover, VuiPortal, VuiProgressBar, VuiPrompt, VuiRadioButton, VuiScreenBlock, VuiSearchInput, VuiSearchResult, VuiSearchSelect, VuiSelect, VuiSetting, VuiSideList, VuiSideListButton, VuiSimpleCard, VuiSimpleGrid, VuiSpacer, VuiSpans, 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 };
@@ -0,0 +1,7 @@
1
+ type Props = {
2
+ className?: string;
3
+ children?: React.ReactNode;
4
+ "data-testid"?: string;
5
+ };
6
+ export declare const VuiMenuList: ({ className, children, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,18 @@
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
+ export const VuiMenuList = (_a) => {
15
+ var { className, children } = _a, rest = __rest(_a, ["className", "children"]);
16
+ const classes = classNames("vuiMenuList", className);
17
+ return (_jsx("ul", Object.assign({ className: classes }, rest, { children: children })));
18
+ };
@@ -0,0 +1,13 @@
1
+ type Props = {
2
+ className?: string;
3
+ children?: React.ReactNode;
4
+ "data-testid"?: string;
5
+ isActive?: boolean;
6
+ onClick?: () => void;
7
+ href?: string;
8
+ icon?: React.ReactNode;
9
+ append?: React.ReactNode;
10
+ disabled?: boolean;
11
+ };
12
+ export declare const VuiMenuListButton: ({ className, isActive, onClick, href, icon, children, append, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
13
+ export {};
@@ -0,0 +1,34 @@
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, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import classNames from "classnames";
14
+ import { VuiIcon } from "../icon/Icon";
15
+ import { useVuiContext } from "../context/Context";
16
+ export const VuiMenuListButton = (_a) => {
17
+ var { className, isActive, onClick, href, icon, children, append } = _a, rest = __rest(_a, ["className", "isActive", "onClick", "href", "icon", "children", "append"]);
18
+ const { createLink } = useVuiContext();
19
+ const classes = classNames("vuiMenuListButton", className, {
20
+ "vuiMenuListButton-isActive": isActive
21
+ });
22
+ const content = (_jsxs(_Fragment, { children: [icon && _jsx(VuiIcon, Object.assign({ size: "s" }, { children: icon })), children && _jsx("span", Object.assign({ className: "vuiMenuListButton__label" }, { children: children })), append] }));
23
+ let button;
24
+ if (href && !rest.disabled) {
25
+ button = createLink(Object.assign({ href,
26
+ onClick, children: (
27
+ //* Wrap a button otherwise the flex layout breaks */}
28
+ _jsx("button", Object.assign({ className: classes, tabIndex: -1 }, { children: content }))) }, rest));
29
+ }
30
+ else {
31
+ button = (_jsx("button", Object.assign({ type: "button", className: classes, onClick: () => onClick === null || onClick === void 0 ? void 0 : onClick() }, rest, { children: content })));
32
+ }
33
+ return button;
34
+ };
@@ -0,0 +1,53 @@
1
+ // TODO: Migrate to using VUI vars.
2
+
3
+ .vuiMenuList {
4
+ list-style: none;
5
+ margin: 0;
6
+ padding: 0;
7
+ display: flex;
8
+ flex-direction: column;
9
+ gap: 2px;
10
+ }
11
+
12
+ .vuiMenuListButton {
13
+ display: inline-flex;
14
+ align-items: center;
15
+ gap: 8px;
16
+ width: 100%;
17
+ padding: 6px 8px;
18
+ border: none;
19
+ border-radius: 6px;
20
+ background-color: transparent;
21
+ color: #4b5563;
22
+ font: inherit;
23
+ font-size: 13px;
24
+ // Ensure button height doesn't shift when icons are added and removed.
25
+ line-height: 1.3;
26
+ text-align: left;
27
+ cursor: pointer;
28
+
29
+ &:hover {
30
+ background-color: #f3f4f6;
31
+ color: #111827;
32
+ }
33
+
34
+ &:disabled {
35
+ color: #9ca3af;
36
+ cursor: not-allowed;
37
+ background-color: transparent;
38
+ }
39
+ }
40
+
41
+ .vuiMenuListButton-isActive {
42
+ background-color: rgba(37, 99, 235, 0.08);
43
+ color: #1d4ed8;
44
+
45
+ &:hover {
46
+ background-color: rgba(37, 99, 235, 0.12);
47
+ color: #1d4ed8;
48
+ }
49
+ }
50
+
51
+ .vuiMenuListButton__label {
52
+ flex: 1 1 auto;
53
+ }
@@ -0,0 +1,7 @@
1
+ type Props = {
2
+ className?: string;
3
+ children?: React.ReactNode;
4
+ "data-testid"?: string;
5
+ };
6
+ export declare const VuiSideList: ({ className, children, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,18 @@
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
+ export const VuiSideList = (_a) => {
15
+ var { className, children } = _a, rest = __rest(_a, ["className", "children"]);
16
+ const classes = classNames("vuiSideList", className);
17
+ return (_jsx("ul", Object.assign({ className: classes }, rest, { children: children })));
18
+ };
@@ -0,0 +1,12 @@
1
+ type Props = {
2
+ className?: string;
3
+ children?: React.ReactNode;
4
+ "data-testid"?: string;
5
+ isActive?: boolean;
6
+ onClick?: () => void;
7
+ href?: string;
8
+ icon?: React.ReactNode;
9
+ append?: React.ReactNode;
10
+ };
11
+ export declare const VuiSideListButton: ({ className, isActive, onClick, href, icon, children, append, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
12
+ export {};
@@ -0,0 +1,34 @@
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, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import classNames from "classnames";
14
+ import { VuiIcon } from "../icon/Icon";
15
+ import { useVuiContext } from "../context/Context";
16
+ export const VuiSideListButton = (_a) => {
17
+ var { className, isActive, onClick, href, icon, children, append } = _a, rest = __rest(_a, ["className", "isActive", "onClick", "href", "icon", "children", "append"]);
18
+ const { createLink } = useVuiContext();
19
+ const classes = classNames("vuiSideListButton", className, {
20
+ "vuiSideListButton-isActive": isActive
21
+ });
22
+ const content = (_jsxs(_Fragment, { children: [icon && _jsx(VuiIcon, Object.assign({ size: "s" }, { children: icon })), children && _jsx("span", Object.assign({ className: "vuiSideListButton__label" }, { children: children })), append] }));
23
+ let button;
24
+ if (href) {
25
+ button = createLink(Object.assign({ href,
26
+ onClick, children: (
27
+ //* Wrap a button otherwise the flex layout breaks */}
28
+ _jsx("button", Object.assign({ className: classes, tabIndex: -1 }, { children: content }))) }, rest));
29
+ }
30
+ else {
31
+ button = (_jsx("button", Object.assign({ type: "button", className: classes, onClick: () => onClick === null || onClick === void 0 ? void 0 : onClick() }, rest, { children: content })));
32
+ }
33
+ return button;
34
+ };
@@ -0,0 +1,47 @@
1
+ // TODO: Migrate to using VUI vars.
2
+
3
+ .vuiSideList {
4
+ list-style: none;
5
+ margin: 0;
6
+ padding: 0;
7
+ display: flex;
8
+ flex-direction: column;
9
+ gap: 2px;
10
+ }
11
+
12
+ .vuiSideListButton {
13
+ display: inline-flex;
14
+ align-items: center;
15
+ gap: 8px;
16
+ width: 100%;
17
+ padding: 6px 8px;
18
+ border: none;
19
+ border-radius: 6px;
20
+ background-color: transparent;
21
+ color: #4b5563;
22
+ font: inherit;
23
+ font-size: 13px;
24
+ // Ensure button height doesn't shift when icons are added and removed.
25
+ line-height: 1.3;
26
+ text-align: left;
27
+ cursor: pointer;
28
+
29
+ &:hover {
30
+ background-color: #f3f4f6;
31
+ color: #111827;
32
+ }
33
+ }
34
+
35
+ .vuiSideListButton-isActive {
36
+ background-color: rgba(37, 99, 235, 0.08);
37
+ color: #1d4ed8;
38
+
39
+ &:hover {
40
+ background-color: rgba(37, 99, 235, 0.12);
41
+ color: #1d4ed8;
42
+ }
43
+ }
44
+
45
+ .vuiSideListButton__label {
46
+ flex: 1 1 auto;
47
+ }
@@ -1,6 +1,13 @@
1
- import { Props as StepVerticalProps } from "./StepVertical";
2
1
  export type { StepVerticalStatus } from "./types";
3
- export type StepsVertical = Omit<StepVerticalProps, "index" | "icon">[];
2
+ export type StepsVertical = {
3
+ id: string;
4
+ title: string;
5
+ isActive?: boolean;
6
+ hasErrors?: boolean;
7
+ icon: React.ReactNode;
8
+ onSelect: () => void;
9
+ "data-testid"?: string;
10
+ }[];
4
11
  type Props = {
5
12
  steps: StepsVertical;
6
13
  className?: string;
@@ -10,18 +10,15 @@ var __rest = (this && this.__rest) || function (s, e) {
10
10
  return t;
11
11
  };
12
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";
13
+ import { BiError } from "react-icons/bi";
14
+ import { VuiIcon } from "../icon/Icon";
15
+ import { VuiMenuList } from "../menuList/VuiMenuList";
16
+ import { VuiMenuListButton } from "../menuList/VuiMenuListButton";
16
17
  export const VuiStepsVertical = (_a) => {
17
18
  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) => {
19
+ return (_jsx(VuiMenuList, Object.assign({ className: className, "data-testid": dataTestId }, rest, { children: steps.map((step) => {
20
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));
21
+ const { id, title, isActive, hasErrors, icon, onSelect } = step;
22
+ return (_jsx(VuiMenuListButton, Object.assign({ isActive: isActive, onClick: () => onSelect(), "data-testid": (_a = step["data-testid"]) !== null && _a !== void 0 ? _a : `${dataTestId}-step-${id}`, icon: icon, append: hasErrors && (_jsx(VuiIcon, Object.assign({ size: "s", color: "danger", "data-testid": `studioAgentSectionError-${id}` }, { children: _jsx(BiError, {}) }))) }, { children: title }), id));
26
23
  }) })));
27
24
  };
@@ -2523,11 +2523,12 @@ h2.react-datepicker__current-month {
2523
2523
 
2524
2524
  .vuiDurationBar {
2525
2525
  position: relative;
2526
+ height: 8px;
2526
2527
  }
2527
2528
 
2528
2529
  .vuiDurationBar__bar {
2529
2530
  position: absolute;
2530
- height: 8px;
2531
+ height: 100%;
2531
2532
  }
2532
2533
 
2533
2534
  .vuiDurationBar--accent .vuiDurationBar__bar {
@@ -2554,6 +2555,14 @@ h2.react-datepicker__current-month {
2554
2555
  background-color: var(--vui-color-dark-shade);
2555
2556
  }
2556
2557
 
2558
+ .vuiDurationBar--subdued .vuiDurationBar__bar {
2559
+ background-color: var(--vui-color-subdued-shade);
2560
+ }
2561
+
2562
+ .vuiDurationBar--medium .vuiDurationBar__bar {
2563
+ background-color: var(--vui-color-medium-shade);
2564
+ }
2565
+
2557
2566
  .vuiFlexContainer {
2558
2567
  display: flex;
2559
2568
  align-items: stretch;
@@ -4126,6 +4135,54 @@ h2.react-datepicker__current-month {
4126
4135
  line-height: 1.4;
4127
4136
  }
4128
4137
 
4138
+ .vuiMenuList {
4139
+ list-style: none;
4140
+ margin: 0;
4141
+ padding: 0;
4142
+ display: flex;
4143
+ flex-direction: column;
4144
+ gap: 2px;
4145
+ }
4146
+
4147
+ .vuiMenuListButton {
4148
+ display: inline-flex;
4149
+ align-items: center;
4150
+ gap: 8px;
4151
+ width: 100%;
4152
+ padding: 6px 8px;
4153
+ border: none;
4154
+ border-radius: 6px;
4155
+ background-color: transparent;
4156
+ color: #4b5563;
4157
+ font: inherit;
4158
+ font-size: 13px;
4159
+ line-height: 1.3;
4160
+ text-align: left;
4161
+ cursor: pointer;
4162
+ }
4163
+ .vuiMenuListButton:hover {
4164
+ background-color: #f3f4f6;
4165
+ color: #111827;
4166
+ }
4167
+ .vuiMenuListButton:disabled {
4168
+ color: #9ca3af;
4169
+ cursor: not-allowed;
4170
+ background-color: transparent;
4171
+ }
4172
+
4173
+ .vuiMenuListButton-isActive {
4174
+ background-color: rgba(37, 99, 235, 0.08);
4175
+ color: #1d4ed8;
4176
+ }
4177
+ .vuiMenuListButton-isActive:hover {
4178
+ background-color: rgba(37, 99, 235, 0.12);
4179
+ color: #1d4ed8;
4180
+ }
4181
+
4182
+ .vuiMenuListButton__label {
4183
+ flex: 1 1 auto;
4184
+ }
4185
+
4129
4186
  .vuiModalContainer {
4130
4187
  position: fixed;
4131
4188
  top: 0;
@@ -4904,6 +4961,49 @@ h2.react-datepicker__current-month {
4904
4961
  padding: 4px 8px;
4905
4962
  }
4906
4963
 
4964
+ .vuiSideList {
4965
+ list-style: none;
4966
+ margin: 0;
4967
+ padding: 0;
4968
+ display: flex;
4969
+ flex-direction: column;
4970
+ gap: 2px;
4971
+ }
4972
+
4973
+ .vuiSideListButton {
4974
+ display: inline-flex;
4975
+ align-items: center;
4976
+ gap: 8px;
4977
+ width: 100%;
4978
+ padding: 6px 8px;
4979
+ border: none;
4980
+ border-radius: 6px;
4981
+ background-color: transparent;
4982
+ color: #4b5563;
4983
+ font: inherit;
4984
+ font-size: 13px;
4985
+ line-height: 1.3;
4986
+ text-align: left;
4987
+ cursor: pointer;
4988
+ }
4989
+ .vuiSideListButton:hover {
4990
+ background-color: #f3f4f6;
4991
+ color: #111827;
4992
+ }
4993
+
4994
+ .vuiSideListButton-isActive {
4995
+ background-color: rgba(37, 99, 235, 0.08);
4996
+ color: #1d4ed8;
4997
+ }
4998
+ .vuiSideListButton-isActive:hover {
4999
+ background-color: rgba(37, 99, 235, 0.12);
5000
+ color: #1d4ed8;
5001
+ }
5002
+
5003
+ .vuiSideListButton__label {
5004
+ flex: 1 1 auto;
5005
+ }
5006
+
4907
5007
  .vuiSpacer {
4908
5008
  flex-shrink: 0;
4909
5009
  }
@@ -5343,79 +5443,6 @@ h2.react-datepicker__current-month {
5343
5443
  color: var(--vui-color-medium-shade);
5344
5444
  }
5345
5445
 
5346
- .vuiStepsVertical {
5347
- display: flex;
5348
- flex-direction: column;
5349
- align-items: stretch;
5350
- max-width: 280px;
5351
- }
5352
-
5353
- .vuiStepVerticalContainer {
5354
- padding-left: 12px;
5355
- border-left: 1px solid var(--vui-color-medium-shade);
5356
- transition: border-left-color 0.2s;
5357
- }
5358
-
5359
- .vuiStepVerticalContainer-isActive {
5360
- padding-left: 11px;
5361
- border-left-width: 2px;
5362
- border-left-color: var(--vui-color-primary-shade);
5363
- }
5364
-
5365
- .vuiStepVerticalContainer {
5366
- flex-grow: 1;
5367
- display: flex;
5368
- align-items: center;
5369
- gap: 12px;
5370
- }
5371
-
5372
- .vuiStepVertical {
5373
- flex-grow: 1;
5374
- display: flex;
5375
- gap: 12px;
5376
- align-items: center;
5377
- padding: 8px 12px 8px 16px;
5378
- font-size: 14px;
5379
- color: var(--vui-color-text);
5380
- background-color: var(--vui-color-empty-shade);
5381
- border-radius: 4px;
5382
- width: 100%;
5383
- }
5384
- .vuiStepVertical:focus {
5385
- z-index: 2;
5386
- }
5387
- .vuiStepVertical:hover, .vuiStepVertical.vuiStepVertical-isActive {
5388
- background-color: var(--vui-color-light-shade);
5389
- }
5390
- .vuiStepVertical:hover .vuiStepVerticalContainer__icon .vuiIcon--token, .vuiStepVertical.vuiStepVertical-isActive .vuiStepVerticalContainer__icon .vuiIcon--token {
5391
- box-shadow: rgba(60, 64, 67, 0.3) 0px 1px 2px 0px, rgba(60, 64, 67, 0.15) 0px 2px 6px 2px;
5392
- }
5393
-
5394
- .vuiStepVertical__index {
5395
- flex-shrink: 0;
5396
- flex-grow: 0;
5397
- width: 26px;
5398
- text-align: left;
5399
- }
5400
-
5401
- .vuiStepVertical__content {
5402
- flex-grow: 1;
5403
- display: flex;
5404
- align-items: center;
5405
- justify-content: space-between;
5406
- gap: 8px;
5407
- }
5408
-
5409
- .vuiStepVerticalContainer__icon {
5410
- height: 20px;
5411
- flex-shrink: 0;
5412
- flex-grow: 0;
5413
- }
5414
- .vuiStepVerticalContainer__icon .vuiIcon--token {
5415
- box-shadow: rgba(60, 64, 67, 0.3) 0px 0px 0px 0px, rgba(60, 64, 67, 0.15) 0px 0px 0px 0px;
5416
- transition: box-shadow 0.2s;
5417
- }
5418
-
5419
5446
  .vuiSummary {
5420
5447
  font-size: 16px;
5421
5448
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vectara/vectara-ui",
3
- "version": "17.3.1",
3
+ "version": "18.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,10 +1,10 @@
1
1
  import { Fragment } from "react";
2
- import { PROGRESS_BAR_COLOR, VuiDurationBar, VuiSpacer } from "../../../lib";
2
+ import { DURATION_BAR_COLOR, VuiDurationBar, VuiSpacer } from "../../../lib";
3
3
 
4
4
  export const Colors = () => {
5
5
  return (
6
6
  <>
7
- {PROGRESS_BAR_COLOR.map((color) => (
7
+ {DURATION_BAR_COLOR.map((color) => (
8
8
  <Fragment key={color}>
9
9
  <VuiDurationBar window={100} start={10} end={70} color={color} />
10
10
  <VuiSpacer size="s" />
@@ -0,0 +1,46 @@
1
+ import { useState } from "react";
2
+ import { BiAlarm, BiError } from "react-icons/bi";
3
+ import { VuiIcon, VuiMenuList, VuiMenuListButton } from "../../../lib";
4
+
5
+ export const MenuList = () => {
6
+ const [isSelected, setIsSelected] = useState(false);
7
+ const [hasIcon, setHasIcon] = useState(true);
8
+ const [hasAppend, setHasAppend] = useState(true);
9
+
10
+ return (
11
+ <div style={{ maxWidth: "300px" }}>
12
+ <VuiMenuList>
13
+ <VuiMenuListButton onClick={() => setIsSelected((prev) => !prev)} isActive={isSelected}>
14
+ Click me to toggle active state
15
+ </VuiMenuListButton>
16
+
17
+ <VuiMenuListButton href="http://www.vectara.com">I'm a link</VuiMenuListButton>
18
+
19
+ <VuiMenuListButton onClick={() => setHasIcon((prev) => !prev)} icon={hasIcon && <BiAlarm />}>
20
+ Set notification time
21
+ </VuiMenuListButton>
22
+
23
+ <VuiMenuListButton
24
+ onClick={() => setHasAppend((prev) => !prev)}
25
+ append={
26
+ hasAppend && (
27
+ <VuiIcon color="danger" size="s">
28
+ <BiError />
29
+ </VuiIcon>
30
+ )
31
+ }
32
+ >
33
+ Appended content
34
+ </VuiMenuListButton>
35
+
36
+ <VuiMenuListButton href="http://www.vectara.com" disabled>
37
+ I'm a disabled link
38
+ </VuiMenuListButton>
39
+
40
+ <VuiMenuListButton onClick={() => alert("You shouldn't be able to see this")} disabled>
41
+ I'm a disabled button
42
+ </VuiMenuListButton>
43
+ </VuiMenuList>
44
+ </div>
45
+ );
46
+ };
@@ -0,0 +1,15 @@
1
+ import { MenuList } from "./MenuList";
2
+
3
+ const MenuListSource = require("!!raw-loader!./MenuList");
4
+
5
+ export const menuList = {
6
+ name: "Menu List",
7
+ path: "/menuList",
8
+ examples: [
9
+ {
10
+ name: "Menu List",
11
+ component: <MenuList />,
12
+ source: MenuListSource.default.toString()
13
+ }
14
+ ]
15
+ };
@@ -0,0 +1,38 @@
1
+ import { useState } from "react";
2
+ import { BiAlarm, BiError } from "react-icons/bi";
3
+ import { VuiIcon, VuiSideList, VuiSideListButton } from "../../../lib";
4
+
5
+ export const SideList = () => {
6
+ const [isSelected, setIsSelected] = useState(false);
7
+ const [hasIcon, setHasIcon] = useState(true);
8
+ const [hasAppend, setHasAppend] = useState(true);
9
+
10
+ return (
11
+ <div style={{ maxWidth: "300px" }}>
12
+ <VuiSideList>
13
+ <VuiSideListButton onClick={() => setIsSelected((prev) => !prev)} isActive={isSelected}>
14
+ Click me to toggle active state
15
+ </VuiSideListButton>
16
+
17
+ <VuiSideListButton href="http://www.vectara.com">I'm a link</VuiSideListButton>
18
+
19
+ <VuiSideListButton onClick={() => setHasIcon((prev) => !prev)} icon={hasIcon && <BiAlarm />}>
20
+ Set notification time
21
+ </VuiSideListButton>
22
+
23
+ <VuiSideListButton
24
+ onClick={() => setHasAppend((prev) => !prev)}
25
+ append={
26
+ hasAppend && (
27
+ <VuiIcon color="danger" size="s">
28
+ <BiError />
29
+ </VuiIcon>
30
+ )
31
+ }
32
+ >
33
+ Appended content
34
+ </VuiSideListButton>
35
+ </VuiSideList>
36
+ </div>
37
+ );
38
+ };
@@ -0,0 +1,15 @@
1
+ import { SideList } from "./SideList";
2
+
3
+ const SideListSource = require("!!raw-loader!./SideList");
4
+
5
+ export const sideList = {
6
+ name: "Side List",
7
+ path: "/sideList",
8
+ examples: [
9
+ {
10
+ name: "Side List",
11
+ component: <SideList />,
12
+ source: SideListSource.default.toString()
13
+ }
14
+ ]
15
+ };
@@ -1,41 +1,52 @@
1
1
  import { useState } from "react";
2
2
  import { VuiStepsVertical, StepsVertical } from "../../../lib";
3
+ import { BiChat, BiChip, BiCog, BiInfoCircle, BiWrench } from "react-icons/bi";
3
4
 
4
5
  export const VerticalSteps = () => {
5
6
  const [currentStep, setCurrentStep] = useState(1);
6
7
 
7
8
  const steps: StepsVertical = [
8
9
  {
10
+ id: "general",
11
+ icon: <BiInfoCircle />,
9
12
  title: "General",
10
- status: "danger",
13
+ hasErrors: true,
11
14
  isActive: currentStep === 0,
12
- onClick: () => setCurrentStep(0)
15
+ onSelect: () => setCurrentStep(0)
13
16
  },
14
17
  {
18
+ id: "model",
19
+ icon: <BiChip />,
15
20
  title: "Model",
16
- status: "complete",
17
21
  isActive: currentStep === 1,
18
- onClick: () => setCurrentStep(1)
22
+ onSelect: () => setCurrentStep(1)
19
23
  },
20
24
  {
25
+ id: "abilities",
26
+ icon: <BiWrench />,
21
27
  title: "Abilities",
22
- status: "incomplete",
23
28
  isActive: currentStep === 2,
24
- onClick: () => setCurrentStep(2)
29
+ onSelect: () => setCurrentStep(2)
25
30
  },
26
31
  {
32
+ id: "instructions",
33
+ icon: <BiChat />,
27
34
  title: "Instructions",
28
- status: "incomplete",
29
35
  isActive: currentStep === 3,
30
- onClick: () => setCurrentStep(3)
36
+ onSelect: () => setCurrentStep(3)
31
37
  },
32
38
  {
39
+ id: "advanced",
40
+ icon: <BiCog />,
33
41
  title: "Advanced",
34
- status: "warning",
35
42
  isActive: currentStep === 4,
36
- onClick: () => setCurrentStep(4)
43
+ onSelect: () => setCurrentStep(4)
37
44
  }
38
45
  ];
39
46
 
40
- return <VuiStepsVertical steps={steps} />;
47
+ return (
48
+ <div style={{ maxWidth: "300px" }}>
49
+ <VuiStepsVertical steps={steps} />
50
+ </div>
51
+ );
41
52
  };
@@ -48,6 +48,7 @@ import { searchResult } from "./pages/searchResult";
48
48
  import { searchSelect } from "./pages/searchSelect";
49
49
  import { select } from "./pages/select";
50
50
  import { setting } from "./pages/setting";
51
+ import { menuList } from "./pages/menuList";
51
52
  import { spacer } from "./pages/spacer";
52
53
  import { spinner } from "./pages/spinner";
53
54
  import { stat } from "./pages/stat";
@@ -94,25 +95,30 @@ export const categories: Category[] = [
94
95
  },
95
96
  {
96
97
  name: "Layout",
97
- pages: [
98
- tabs,
99
- timeline,
100
- accordion,
101
- stepsVertical,
102
- steps,
103
- popover,
104
- infoMenu,
105
- flex,
106
- grid,
107
- spacer,
108
- card,
109
- panel,
110
- horizontalRule
111
- ]
98
+ pages: [timeline, accordion, popover, infoMenu, flex, grid, spacer, card, panel, horizontalRule]
99
+ },
100
+ {
101
+ name: "Navigation",
102
+ pages: [tabs, stepsVertical, steps]
112
103
  },
113
104
  {
114
105
  name: "Content",
115
- pages: [badge, status, callout, code, durationBar, icon, image, inProgress, progressBar, spinner, skeleton, stat, text, tooltip]
106
+ pages: [
107
+ badge,
108
+ status,
109
+ callout,
110
+ code,
111
+ durationBar,
112
+ icon,
113
+ image,
114
+ inProgress,
115
+ progressBar,
116
+ spinner,
117
+ skeleton,
118
+ stat,
119
+ text,
120
+ tooltip
121
+ ]
116
122
  },
117
123
  {
118
124
  name: "Form",
@@ -142,6 +148,7 @@ export const categories: Category[] = [
142
148
  copyButton,
143
149
  link,
144
150
  topicButton,
151
+ menuList,
145
152
  menu,
146
153
  optionsButton,
147
154
  optionsList,
@@ -1,11 +0,0 @@
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;
@@ -1,35 +0,0 @@
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
- };
@@ -1,82 +0,0 @@
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
- transition: border-left-color $transitionSpeed;
12
- }
13
-
14
- .vuiStepVerticalContainer-isActive {
15
- padding-left: $sizeS - 1px;
16
- border-left-width: 2px;
17
- border-left-color: var(--vui-color-primary-shade);
18
- }
19
-
20
- .vuiStepVerticalContainer {
21
- flex-grow: 1;
22
- display: flex;
23
- align-items: center;
24
- gap: $sizeS;
25
- }
26
-
27
- .vuiStepVertical {
28
- flex-grow: 1;
29
- display: flex;
30
- gap: $sizeS;
31
- align-items: center;
32
- padding: $sizeXs $sizeS $sizeXs $sizeM;
33
- font-size: $fontSizeStandard;
34
- color: var(--vui-color-text);
35
- background-color: var(--vui-color-empty-shade);
36
- border-radius: $sizeXxs;
37
- width: 100%;
38
-
39
- &:focus {
40
- // Ensures focus ring is visible.
41
- z-index: 2;
42
- }
43
-
44
- &:hover,
45
- &.vuiStepVertical-isActive {
46
- background-color: var(--vui-color-light-shade);
47
-
48
- .vuiStepVerticalContainer__icon {
49
- .vuiIcon--token {
50
- box-shadow: $shadowSmallEnd;
51
- }
52
- }
53
- }
54
- }
55
-
56
- .vuiStepVertical__index {
57
- flex-shrink: 0;
58
- flex-grow: 0;
59
- width: 26px;
60
- text-align: left;
61
- }
62
-
63
- .vuiStepVertical__content {
64
- flex-grow: 1;
65
- display: flex;
66
- align-items: center;
67
- justify-content: space-between;
68
- gap: $sizeXs;
69
- }
70
-
71
- .vuiStepVerticalContainer__icon {
72
- // Set consistent size so that empty icons still take up space
73
- // and the button height doesn't change when there's no icon.
74
- height: 20px;
75
- flex-shrink: 0;
76
- flex-grow: 0;
77
-
78
- .vuiIcon--token {
79
- box-shadow: $shadowSmallStart;
80
- transition: box-shadow $transitionSpeed;
81
- }
82
- }