@vectara/vectara-ui 17.4.0 → 18.0.1

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.
@@ -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, 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, 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 };
@@ -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, 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, 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,16 @@ 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
+ const stepTestId = (_a = step["data-testid"]) !== null && _a !== void 0 ? _a : `${dataTestId}-step-${id}`;
23
+ return (_jsx(VuiMenuListButton, Object.assign({ isActive: isActive, onClick: () => onSelect(), "data-testid": stepTestId, icon: icon, append: hasErrors && (_jsx(VuiIcon, Object.assign({ size: "s", color: "danger", "data-testid": `${stepTestId}-error` }, { children: _jsx(BiError, {}) }))) }, { children: title }), id));
26
24
  }) })));
27
25
  };
@@ -4135,6 +4135,54 @@ h2.react-datepicker__current-month {
4135
4135
  line-height: 1.4;
4136
4136
  }
4137
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
+
4138
4186
  .vuiModalContainer {
4139
4187
  position: fixed;
4140
4188
  top: 0;
@@ -4913,6 +4961,49 @@ h2.react-datepicker__current-month {
4913
4961
  padding: 4px 8px;
4914
4962
  }
4915
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
+
4916
5007
  .vuiSpacer {
4917
5008
  flex-shrink: 0;
4918
5009
  }
@@ -5352,79 +5443,6 @@ h2.react-datepicker__current-month {
5352
5443
  color: var(--vui-color-medium-shade);
5353
5444
  }
5354
5445
 
5355
- .vuiStepsVertical {
5356
- display: flex;
5357
- flex-direction: column;
5358
- align-items: stretch;
5359
- max-width: 280px;
5360
- }
5361
-
5362
- .vuiStepVerticalContainer {
5363
- padding-left: 12px;
5364
- border-left: 1px solid var(--vui-color-medium-shade);
5365
- transition: border-left-color 0.2s;
5366
- }
5367
-
5368
- .vuiStepVerticalContainer-isActive {
5369
- padding-left: 11px;
5370
- border-left-width: 2px;
5371
- border-left-color: var(--vui-color-primary-shade);
5372
- }
5373
-
5374
- .vuiStepVerticalContainer {
5375
- flex-grow: 1;
5376
- display: flex;
5377
- align-items: center;
5378
- gap: 12px;
5379
- }
5380
-
5381
- .vuiStepVertical {
5382
- flex-grow: 1;
5383
- display: flex;
5384
- gap: 12px;
5385
- align-items: center;
5386
- padding: 8px 12px 8px 16px;
5387
- font-size: 14px;
5388
- color: var(--vui-color-text);
5389
- background-color: var(--vui-color-empty-shade);
5390
- border-radius: 4px;
5391
- width: 100%;
5392
- }
5393
- .vuiStepVertical:focus {
5394
- z-index: 2;
5395
- }
5396
- .vuiStepVertical:hover, .vuiStepVertical.vuiStepVertical-isActive {
5397
- background-color: var(--vui-color-light-shade);
5398
- }
5399
- .vuiStepVertical:hover .vuiStepVerticalContainer__icon .vuiIcon--token, .vuiStepVertical.vuiStepVertical-isActive .vuiStepVerticalContainer__icon .vuiIcon--token {
5400
- box-shadow: rgba(60, 64, 67, 0.3) 0px 1px 2px 0px, rgba(60, 64, 67, 0.15) 0px 2px 6px 2px;
5401
- }
5402
-
5403
- .vuiStepVertical__index {
5404
- flex-shrink: 0;
5405
- flex-grow: 0;
5406
- width: 26px;
5407
- text-align: left;
5408
- }
5409
-
5410
- .vuiStepVertical__content {
5411
- flex-grow: 1;
5412
- display: flex;
5413
- align-items: center;
5414
- justify-content: space-between;
5415
- gap: 8px;
5416
- }
5417
-
5418
- .vuiStepVerticalContainer__icon {
5419
- height: 20px;
5420
- flex-shrink: 0;
5421
- flex-grow: 0;
5422
- }
5423
- .vuiStepVerticalContainer__icon .vuiIcon--token {
5424
- box-shadow: rgba(60, 64, 67, 0.3) 0px 0px 0px 0px, rgba(60, 64, 67, 0.15) 0px 0px 0px 0px;
5425
- transition: box-shadow 0.2s;
5426
- }
5427
-
5428
5446
  .vuiSummary {
5429
5447
  font-size: 16px;
5430
5448
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vectara/vectara-ui",
3
- "version": "17.4.0",
3
+ "version": "18.0.1",
4
4
  "homepage": "./",
5
5
  "description": "Vectara's design system, codified as a React and Sass component library",
6
6
  "author": "Vectara",
@@ -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
- }