@vectara/vectara-ui 16.5.1 → 16.6.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.
@@ -0,0 +1,11 @@
1
+ import { PROGRESS_BAR_COLOR } from "../progressBar/ProgressBar";
2
+ type Props = {
3
+ window: number;
4
+ start: number;
5
+ end: number;
6
+ color: (typeof PROGRESS_BAR_COLOR)[number];
7
+ minBarWidthPx?: number;
8
+ className?: string;
9
+ };
10
+ export declare const VuiDurationBar: ({ window, start, end, color, minBarWidthPx, className }: Props) => import("react/jsx-runtime").JSX.Element;
11
+ export {};
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import classNames from "classnames";
3
+ const DEFAULT_MIN_BAR_WIDTH_PX = 4;
4
+ export const VuiDurationBar = ({ window, start, end, color, minBarWidthPx = DEFAULT_MIN_BAR_WIDTH_PX, className }) => {
5
+ // Clamp the bar to the window boundaries.
6
+ const clampedStart = Math.max(0, Math.min(start, window));
7
+ const clampedEnd = Math.max(0, Math.min(end, window));
8
+ const leftPercent = (clampedStart / window) * 100;
9
+ const widthPercent = Math.max(0, ((clampedEnd - clampedStart) / window) * 100);
10
+ const classes = classNames(className, "vuiDurationBar", `vuiDurationBar--${color}`);
11
+ return (_jsx("div", Object.assign({ className: classes }, { children: _jsx("div", { className: "vuiDurationBar__bar", style: { left: `${leftPercent}%`, width: `max(${widthPercent}%, ${minBarWidthPx}px)` } }) })));
12
+ };
@@ -0,0 +1,40 @@
1
+ @use "sass:map";
2
+
3
+ .vuiDurationBar {
4
+ position: relative;
5
+ }
6
+
7
+ .vuiDurationBar__bar {
8
+ position: absolute;
9
+ height: $sizeXs;
10
+ }
11
+
12
+ // Color
13
+ $color: (
14
+ accent: (
15
+ "background-color": var(--vui-color-accent-shade)
16
+ ),
17
+ primary: (
18
+ "background-color": var(--vui-color-primary-shade)
19
+ ),
20
+ success: (
21
+ "background-color": var(--vui-color-success-shade)
22
+ ),
23
+ warning: (
24
+ "background-color": var(--vui-color-warning-shade)
25
+ ),
26
+ danger: (
27
+ "background-color": var(--vui-color-danger-shade)
28
+ ),
29
+ neutral: (
30
+ "background-color": var(--vui-color-dark-shade)
31
+ )
32
+ );
33
+
34
+ @each $colorName, $colorValue in $color {
35
+ .vuiDurationBar--#{$colorName} {
36
+ .vuiDurationBar__bar {
37
+ background-color: #{map.get($colorValue, "background-color")};
38
+ }
39
+ }
40
+ }
@@ -27,6 +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
31
  import { VuiErrorBoundary } from "./errorBoundary/ErrorBoundary";
31
32
  import { VuiFlexContainer } from "./flex/FlexContainer";
32
33
  import { VuiFlexItem } from "./flex/FlexItem";
@@ -100,4 +101,4 @@ import { VuiTopicButton } from "./topicButton/TopicButton";
100
101
  import { copyToClipboard } from "../utils/copyToClipboard";
101
102
  import { toRgb, toRgba } from "./context/Theme";
102
103
  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, TabSize, Tree, TreeItem };
103
- 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, 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 };
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 };
@@ -23,6 +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
27
  import { VuiErrorBoundary } from "./errorBoundary/ErrorBoundary";
27
28
  import { VuiFlexContainer } from "./flex/FlexContainer";
28
29
  import { VuiFlexItem } from "./flex/FlexItem";
@@ -90,4 +91,4 @@ import { VuiInfoTooltip } from "./tooltip/InfoTooltip";
90
91
  import { VuiTopicButton } from "./topicButton/TopicButton";
91
92
  import { copyToClipboard } from "../utils/copyToClipboard";
92
93
  import { toRgb, toRgba } from "./context/Theme";
93
- 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, 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 };
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 };
@@ -2499,6 +2499,39 @@ h2.react-datepicker__current-month {
2499
2499
  color: var(--vui-color-danger-shade);
2500
2500
  }
2501
2501
 
2502
+ .vuiDurationBar {
2503
+ position: relative;
2504
+ }
2505
+
2506
+ .vuiDurationBar__bar {
2507
+ position: absolute;
2508
+ height: 8px;
2509
+ }
2510
+
2511
+ .vuiDurationBar--accent .vuiDurationBar__bar {
2512
+ background-color: var(--vui-color-accent-shade);
2513
+ }
2514
+
2515
+ .vuiDurationBar--primary .vuiDurationBar__bar {
2516
+ background-color: var(--vui-color-primary-shade);
2517
+ }
2518
+
2519
+ .vuiDurationBar--success .vuiDurationBar__bar {
2520
+ background-color: var(--vui-color-success-shade);
2521
+ }
2522
+
2523
+ .vuiDurationBar--warning .vuiDurationBar__bar {
2524
+ background-color: var(--vui-color-warning-shade);
2525
+ }
2526
+
2527
+ .vuiDurationBar--danger .vuiDurationBar__bar {
2528
+ background-color: var(--vui-color-danger-shade);
2529
+ }
2530
+
2531
+ .vuiDurationBar--neutral .vuiDurationBar__bar {
2532
+ background-color: var(--vui-color-dark-shade);
2533
+ }
2534
+
2502
2535
  .vuiFlexContainer {
2503
2536
  display: flex;
2504
2537
  align-items: stretch;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vectara/vectara-ui",
3
- "version": "16.5.1",
3
+ "version": "16.6.0",
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,15 @@
1
+ import { Fragment } from "react";
2
+ import { PROGRESS_BAR_COLOR, VuiDurationBar, VuiSpacer } from "../../../lib";
3
+
4
+ export const Colors = () => {
5
+ return (
6
+ <>
7
+ {PROGRESS_BAR_COLOR.map((color) => (
8
+ <Fragment key={color}>
9
+ <VuiDurationBar window={100} start={10} end={70} color={color} />
10
+ <VuiSpacer size="s" />
11
+ </Fragment>
12
+ ))}
13
+ </>
14
+ );
15
+ };
@@ -0,0 +1,25 @@
1
+ import { VuiDurationBar, VuiSpacer, VuiText } from "../../../lib";
2
+
3
+ export const MinBarWidth = () => {
4
+ return (
5
+ <>
6
+ <VuiText>
7
+ <p>Default minBarWidthPx (4px) for a near-zero-width bar:</p>
8
+ </VuiText>
9
+
10
+ <VuiSpacer size="s" />
11
+
12
+ <VuiDurationBar window={10000} start={5000} end={5001} color="accent" />
13
+
14
+ <VuiSpacer size="m" />
15
+
16
+ <VuiText>
17
+ <p>Custom minBarWidthPx (16px) for the same bar:</p>
18
+ </VuiText>
19
+
20
+ <VuiSpacer size="s" />
21
+
22
+ <VuiDurationBar window={10000} start={5000} end={5001} color="accent" minBarWidthPx={16} />
23
+ </>
24
+ );
25
+ };
@@ -0,0 +1,43 @@
1
+ import { PROGRESS_BAR_COLOR, VuiDurationBar, VuiFlexContainer, VuiFlexItem, VuiText } from "../../../lib";
2
+
3
+ const WINDOW = 12480;
4
+
5
+ type Bar = {
6
+ label: string;
7
+ start: number;
8
+ end: number;
9
+ color: (typeof PROGRESS_BAR_COLOR)[number];
10
+ };
11
+
12
+ const bars: Bar[] = [
13
+ { label: "12.48s", start: 0, end: 12480, color: "neutral" },
14
+ { label: "1.85s", start: 0, end: 1850, color: "neutral" },
15
+ { label: "3.20s", start: 1850, end: 5050, color: "neutral" },
16
+ { label: "880ms", start: 5700, end: 6580, color: "neutral" },
17
+ { label: "2.40s", start: 6200, end: 8600, color: "neutral" },
18
+ { label: "80ms", start: 8700, end: 8780, color: "neutral" },
19
+ { label: "3.20s", start: 8900, end: 12100, color: "neutral" },
20
+ { label: "540ms", start: 11400, end: 11940, color: "neutral" }
21
+ ];
22
+
23
+ export const Timeline = () => {
24
+ return (
25
+ <>
26
+ {bars.map((bar) => (
27
+ <VuiFlexContainer key={bar.label} alignItems="center" spacing="m">
28
+ <VuiFlexItem grow={false} shrink={false}>
29
+ <div style={{ width: 60, textAlign: "right" }}>
30
+ <VuiText>
31
+ <p>{bar.label}</p>
32
+ </VuiText>
33
+ </div>
34
+ </VuiFlexItem>
35
+
36
+ <VuiFlexItem grow={1}>
37
+ <VuiDurationBar window={WINDOW} start={bar.start} end={bar.end} color={bar.color} />
38
+ </VuiFlexItem>
39
+ </VuiFlexContainer>
40
+ ))}
41
+ </>
42
+ );
43
+ };
@@ -0,0 +1,29 @@
1
+ import { Timeline } from "./Timeline";
2
+ import { Colors } from "./Colors";
3
+ import { MinBarWidth } from "./MinBarWidth";
4
+
5
+ const TimelineSource = require("!!raw-loader!./Timeline");
6
+ const ColorsSource = require("!!raw-loader!./Colors");
7
+ const MinBarWidthSource = require("!!raw-loader!./MinBarWidth");
8
+
9
+ export const durationBar = {
10
+ name: "Duration Bar",
11
+ path: "/durationBar",
12
+ examples: [
13
+ {
14
+ name: "Timeline",
15
+ component: <Timeline />,
16
+ source: TimelineSource.default.toString()
17
+ },
18
+ {
19
+ name: "Colors",
20
+ component: <Colors />,
21
+ source: ColorsSource.default.toString()
22
+ },
23
+ {
24
+ name: "Minimum bar width",
25
+ component: <MinBarWidth />,
26
+ source: MinBarWidthSource.default.toString()
27
+ }
28
+ ]
29
+ };
@@ -14,6 +14,7 @@ import { complexConfigurationButton } from "./pages/complexConfigurationButton";
14
14
  import { copyButton } from "./pages/copyButton";
15
15
  import { datePicker } from "./pages/datePicker";
16
16
  import { drawer } from "./pages/drawer";
17
+ import { durationBar } from "./pages/durationBar";
17
18
  import { errorBoundary } from "./pages/errorBoundary";
18
19
  import { flex } from "./pages/flex";
19
20
  import { formGroup } from "./pages/formGroup";
@@ -111,7 +112,7 @@ export const categories: Category[] = [
111
112
  },
112
113
  {
113
114
  name: "Content",
114
- pages: [badge, status, callout, code, icon, image, inProgress, spinner, skeleton, stat, progressBar, text, tooltip]
115
+ pages: [badge, status, callout, code, durationBar, icon, image, inProgress, progressBar, spinner, skeleton, stat, text, tooltip]
115
116
  },
116
117
  {
117
118
  name: "Form",