@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.
- package/lib/components/durationBar/DurationBar.d.ts +2 -2
- package/lib/components/durationBar/DurationBar.js +10 -0
- package/lib/components/durationBar/_index.scss +10 -1
- package/lib/components/index.d.ts +6 -2
- package/lib/components/index.js +6 -2
- package/lib/components/menuList/VuiMenuList.d.ts +7 -0
- package/lib/components/menuList/VuiMenuList.js +18 -0
- package/lib/components/menuList/VuiMenuListButton.d.ts +13 -0
- package/lib/components/menuList/VuiMenuListButton.js +34 -0
- package/lib/components/menuList/_index.scss +53 -0
- package/lib/components/sideList/VuiSideList.d.ts +7 -0
- package/lib/components/sideList/VuiSideList.js +18 -0
- package/lib/components/sideList/VuiSideListButton.d.ts +12 -0
- package/lib/components/sideList/VuiSideListButton.js +34 -0
- package/lib/components/sideList/_index.scss +47 -0
- package/lib/components/stepsVertical/StepsVertical.d.ts +9 -2
- package/lib/components/stepsVertical/StepsVertical.js +7 -10
- package/lib/styles/index.css +101 -74
- package/package.json +1 -1
- package/src/docs/pages/durationBar/Colors.tsx +2 -2
- package/src/docs/pages/menuList/MenuList.tsx +46 -0
- package/src/docs/pages/menuList/index.tsx +15 -0
- package/src/docs/pages/sideList/SideList.tsx +38 -0
- package/src/docs/pages/sideList/index.tsx +15 -0
- package/src/docs/pages/stepsVertical/VerticalSteps.tsx +22 -11
- package/src/docs/pages.tsx +23 -16
- package/lib/components/stepsVertical/StepVertical.d.ts +0 -11
- package/lib/components/stepsVertical/StepVertical.js +0 -35
- package/lib/components/stepsVertical/_index.scss +0 -82
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
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
|
|
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:
|
|
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 };
|
package/lib/components/index.js
CHANGED
|
@@ -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,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,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 =
|
|
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
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
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
|
-
|
|
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
|
|
22
|
-
|
|
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
|
};
|
package/lib/styles/index.css
CHANGED
|
@@ -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:
|
|
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,10 +1,10 @@
|
|
|
1
1
|
import { Fragment } from "react";
|
|
2
|
-
import {
|
|
2
|
+
import { DURATION_BAR_COLOR, VuiDurationBar, VuiSpacer } from "../../../lib";
|
|
3
3
|
|
|
4
4
|
export const Colors = () => {
|
|
5
5
|
return (
|
|
6
6
|
<>
|
|
7
|
-
{
|
|
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
|
-
|
|
13
|
+
hasErrors: true,
|
|
11
14
|
isActive: currentStep === 0,
|
|
12
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
43
|
+
onSelect: () => setCurrentStep(4)
|
|
37
44
|
}
|
|
38
45
|
];
|
|
39
46
|
|
|
40
|
-
return
|
|
47
|
+
return (
|
|
48
|
+
<div style={{ maxWidth: "300px" }}>
|
|
49
|
+
<VuiStepsVertical steps={steps} />
|
|
50
|
+
</div>
|
|
51
|
+
);
|
|
41
52
|
};
|
package/src/docs/pages.tsx
CHANGED
|
@@ -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
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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: [
|
|
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
|
-
}
|