@vectara/vectara-ui 15.2.0 → 15.3.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.
Files changed (248) hide show
  1. package/lib/components/button/BaseButton.d.ts +1 -0
  2. package/lib/components/button/BaseButton.js +5 -2
  3. package/lib/components/button/baseButton.scss +6 -1
  4. package/lib/styles/index.css +6 -1
  5. package/package.json +8 -1
  6. package/src/docs/Docs.tsx +102 -0
  7. package/src/docs/Home.tsx +123 -0
  8. package/src/docs/Page.tsx +79 -0
  9. package/src/docs/components/Example.tsx +44 -0
  10. package/src/docs/components/HeaderLogo.tsx +26 -0
  11. package/src/docs/components/Subsection.tsx +22 -0
  12. package/src/docs/index.scss +3 -0
  13. package/src/docs/pages/accordion/Accordion.tsx +128 -0
  14. package/src/docs/pages/accordion/index.tsx +11 -0
  15. package/src/docs/pages/accountButton/AccountButton.tsx +46 -0
  16. package/src/docs/pages/accountButton/index.tsx +11 -0
  17. package/src/docs/pages/app/AltLayout.tsx +54 -0
  18. package/src/docs/pages/app/App.tsx +147 -0
  19. package/src/docs/pages/app/Layout.tsx +272 -0
  20. package/src/docs/pages/app/appExample.scss +57 -0
  21. package/src/docs/pages/app/index.tsx +11 -0
  22. package/src/docs/pages/badge/BadgeColors.tsx +13 -0
  23. package/src/docs/pages/badge/ClickableBadges.tsx +19 -0
  24. package/src/docs/pages/badge/DismissibleBadges.tsx +27 -0
  25. package/src/docs/pages/badge/MaxWidth.tsx +12 -0
  26. package/src/docs/pages/badge/Selection.tsx +36 -0
  27. package/src/docs/pages/badge/index.tsx +43 -0
  28. package/src/docs/pages/badge/maxWidth.scss +3 -0
  29. package/src/docs/pages/button/Colors.tsx +111 -0
  30. package/src/docs/pages/button/IconButton.tsx +114 -0
  31. package/src/docs/pages/button/Icons.tsx +25 -0
  32. package/src/docs/pages/button/Link.tsx +36 -0
  33. package/src/docs/pages/button/Sizes.tsx +76 -0
  34. package/src/docs/pages/button/Submit.tsx +16 -0
  35. package/src/docs/pages/button/Truncate.tsx +20 -0
  36. package/src/docs/pages/button/index.tsx +57 -0
  37. package/src/docs/pages/callout/Colors.tsx +51 -0
  38. package/src/docs/pages/callout/Variations.tsx +76 -0
  39. package/src/docs/pages/callout/index.tsx +22 -0
  40. package/src/docs/pages/card/Card.tsx +123 -0
  41. package/src/docs/pages/card/Expandable.tsx +153 -0
  42. package/src/docs/pages/card/Scrollable.tsx +39 -0
  43. package/src/docs/pages/card/SimpleCard.tsx +149 -0
  44. package/src/docs/pages/card/index.tsx +36 -0
  45. package/src/docs/pages/card/scrollableExample.scss +4 -0
  46. package/src/docs/pages/chat/Chat.tsx +158 -0
  47. package/src/docs/pages/chat/index.tsx +11 -0
  48. package/src/docs/pages/checkbox/WithLabel.tsx +51 -0
  49. package/src/docs/pages/checkbox/index.tsx +11 -0
  50. package/src/docs/pages/code/DisabledFeatures.tsx +46 -0
  51. package/src/docs/pages/code/FullHeight.tsx +50 -0
  52. package/src/docs/pages/code/Languages.tsx +68 -0
  53. package/src/docs/pages/code/Scrolling.tsx +51 -0
  54. package/src/docs/pages/code/index.tsx +36 -0
  55. package/src/docs/pages/codeEditor/CodeEditor.tsx +23 -0
  56. package/src/docs/pages/codeEditor/index.tsx +15 -0
  57. package/src/docs/pages/copyButton/CopyButton.tsx +33 -0
  58. package/src/docs/pages/copyButton/index.tsx +11 -0
  59. package/src/docs/pages/datePicker/DatePicker.tsx +44 -0
  60. package/src/docs/pages/datePicker/DateRangePicker.tsx +55 -0
  61. package/src/docs/pages/datePicker/Inline.tsx +8 -0
  62. package/src/docs/pages/datePicker/WithTimeSelection.tsx +30 -0
  63. package/src/docs/pages/datePicker/index.tsx +36 -0
  64. package/src/docs/pages/drawer/DangerDrawer.tsx +28 -0
  65. package/src/docs/pages/drawer/PrimaryDrawer.tsx +191 -0
  66. package/src/docs/pages/drawer/index.tsx +22 -0
  67. package/src/docs/pages/errorBoundary/ErrorBoundary.tsx +36 -0
  68. package/src/docs/pages/errorBoundary/index.tsx +12 -0
  69. package/src/docs/pages/flex/Column.tsx +10 -0
  70. package/src/docs/pages/flex/Layouts.tsx +101 -0
  71. package/src/docs/pages/flex/Spacing.tsx +18 -0
  72. package/src/docs/pages/flex/Wrap.tsx +25 -0
  73. package/src/docs/pages/flex/flexExample.scss +12 -0
  74. package/src/docs/pages/flex/index.tsx +38 -0
  75. package/src/docs/pages/formGroup/FormGroup.tsx +93 -0
  76. package/src/docs/pages/formGroup/NonFormElement.tsx +19 -0
  77. package/src/docs/pages/formGroup/Size.tsx +14 -0
  78. package/src/docs/pages/formGroup/index.tsx +29 -0
  79. package/src/docs/pages/grid/Grid.tsx +23 -0
  80. package/src/docs/pages/grid/GridAlignment.tsx +83 -0
  81. package/src/docs/pages/grid/GridResponsive.tsx +74 -0
  82. package/src/docs/pages/grid/GridSimple.tsx +41 -0
  83. package/src/docs/pages/grid/GridSpanning.tsx +86 -0
  84. package/src/docs/pages/grid/grid.scss +4 -0
  85. package/src/docs/pages/grid/index.tsx +43 -0
  86. package/src/docs/pages/horizontalRule/HorizontalRule.tsx +18 -0
  87. package/src/docs/pages/horizontalRule/index.tsx +11 -0
  88. package/src/docs/pages/icon/Colors.tsx +95 -0
  89. package/src/docs/pages/icon/InlineText.tsx +15 -0
  90. package/src/docs/pages/icon/Sizes.tsx +20 -0
  91. package/src/docs/pages/icon/index.tsx +29 -0
  92. package/src/docs/pages/image/Gallery.tsx +92 -0
  93. package/src/docs/pages/image/Image.tsx +61 -0
  94. package/src/docs/pages/image/index.tsx +22 -0
  95. package/src/docs/pages/inProgress/InProgress.tsx +5 -0
  96. package/src/docs/pages/inProgress/index.tsx +12 -0
  97. package/src/docs/pages/infoList/HorizontalList.tsx +11 -0
  98. package/src/docs/pages/infoList/InfoList.tsx +28 -0
  99. package/src/docs/pages/infoList/index.tsx +22 -0
  100. package/src/docs/pages/infoMenu/InfoMenu.tsx +62 -0
  101. package/src/docs/pages/infoMenu/index.tsx +11 -0
  102. package/src/docs/pages/infoTable/Complex.tsx +143 -0
  103. package/src/docs/pages/infoTable/Simple.tsx +155 -0
  104. package/src/docs/pages/infoTable/index.tsx +22 -0
  105. package/src/docs/pages/input/FullWidth.tsx +18 -0
  106. package/src/docs/pages/input/Large.tsx +18 -0
  107. package/src/docs/pages/input/NumberInput.tsx +20 -0
  108. package/src/docs/pages/input/PasswordInput.tsx +27 -0
  109. package/src/docs/pages/input/TextInput.tsx +18 -0
  110. package/src/docs/pages/input/index.tsx +43 -0
  111. package/src/docs/pages/itemsInput/ItemsInput.tsx +28 -0
  112. package/src/docs/pages/itemsInput/index.tsx +12 -0
  113. package/src/docs/pages/label/Label.tsx +18 -0
  114. package/src/docs/pages/label/index.tsx +11 -0
  115. package/src/docs/pages/link/Internal.tsx +19 -0
  116. package/src/docs/pages/link/Link.tsx +39 -0
  117. package/src/docs/pages/link/index.tsx +22 -0
  118. package/src/docs/pages/list/List.tsx +56 -0
  119. package/src/docs/pages/list/index.tsx +11 -0
  120. package/src/docs/pages/menu/Menu.tsx +51 -0
  121. package/src/docs/pages/menu/NoBorder.tsx +51 -0
  122. package/src/docs/pages/menu/NoTitle.tsx +30 -0
  123. package/src/docs/pages/menu/index.tsx +29 -0
  124. package/src/docs/pages/modal/DangerModal.tsx +28 -0
  125. package/src/docs/pages/modal/PrimaryModal.tsx +90 -0
  126. package/src/docs/pages/modal/index.tsx +22 -0
  127. package/src/docs/pages/notifications/Notifications.tsx +62 -0
  128. package/src/docs/pages/notifications/index.tsx +11 -0
  129. package/src/docs/pages/optionsButton/Primary.tsx +57 -0
  130. package/src/docs/pages/optionsButton/Secondary.tsx +58 -0
  131. package/src/docs/pages/optionsButton/index.tsx +22 -0
  132. package/src/docs/pages/optionsList/IconsAndColors.tsx +49 -0
  133. package/src/docs/pages/optionsList/OptionsList.tsx +32 -0
  134. package/src/docs/pages/optionsList/ScrollableOptionsList.tsx +33 -0
  135. package/src/docs/pages/optionsList/SelectableOptionsList.tsx +43 -0
  136. package/src/docs/pages/optionsList/index.tsx +36 -0
  137. package/src/docs/pages/pagination/Pagination.tsx +12 -0
  138. package/src/docs/pages/pagination/index.tsx +15 -0
  139. package/src/docs/pages/panel/Panel.tsx +220 -0
  140. package/src/docs/pages/panel/circles.png +0 -0
  141. package/src/docs/pages/panel/index.tsx +11 -0
  142. package/src/docs/pages/panel/lines.png +0 -0
  143. package/src/docs/pages/popover/IconButton.tsx +29 -0
  144. package/src/docs/pages/popover/Popover.tsx +79 -0
  145. package/src/docs/pages/popover/index.tsx +22 -0
  146. package/src/docs/pages/portalContainer/PortalContainer.tsx +36 -0
  147. package/src/docs/pages/portalContainer/index.tsx +15 -0
  148. package/src/docs/pages/progressBar/ProgressBar.tsx +32 -0
  149. package/src/docs/pages/progressBar/index.tsx +11 -0
  150. package/src/docs/pages/prompt/Prompt.tsx +3 -0
  151. package/src/docs/pages/prompt/index.tsx +11 -0
  152. package/src/docs/pages/radioButton/WithLabel.tsx +35 -0
  153. package/src/docs/pages/radioButton/index.tsx +11 -0
  154. package/src/docs/pages/searchInput/Clearable.tsx +31 -0
  155. package/src/docs/pages/searchInput/Large.tsx +29 -0
  156. package/src/docs/pages/searchInput/SearchInput.tsx +31 -0
  157. package/src/docs/pages/searchInput/Suggestions.tsx +70 -0
  158. package/src/docs/pages/searchInput/ValueSuggestions.tsx +114 -0
  159. package/src/docs/pages/searchInput/index.tsx +43 -0
  160. package/src/docs/pages/searchResult/Minimal.tsx +11 -0
  161. package/src/docs/pages/searchResult/SearchResults.tsx +76 -0
  162. package/src/docs/pages/searchResult/index.tsx +22 -0
  163. package/src/docs/pages/searchSelect/Async.tsx +153 -0
  164. package/src/docs/pages/searchSelect/FormGroup.tsx +94 -0
  165. package/src/docs/pages/searchSelect/SearchSelect.tsx +42 -0
  166. package/src/docs/pages/searchSelect/SingleSelect.tsx +44 -0
  167. package/src/docs/pages/searchSelect/WithBadges.tsx +85 -0
  168. package/src/docs/pages/searchSelect/index.scss +3 -0
  169. package/src/docs/pages/searchSelect/index.tsx +43 -0
  170. package/src/docs/pages/select/Select.tsx +15 -0
  171. package/src/docs/pages/select/index.tsx +11 -0
  172. package/src/docs/pages/setting/MinimalSetting.tsx +61 -0
  173. package/src/docs/pages/setting/Setting.tsx +64 -0
  174. package/src/docs/pages/setting/index.tsx +22 -0
  175. package/src/docs/pages/skeleton/Basic.tsx +16 -0
  176. package/src/docs/pages/skeleton/CardContent.tsx +16 -0
  177. package/src/docs/pages/skeleton/Colors.tsx +14 -0
  178. package/src/docs/pages/skeleton/Rows.tsx +25 -0
  179. package/src/docs/pages/skeleton/index.tsx +36 -0
  180. package/src/docs/pages/spacer/Spacer.tsx +20 -0
  181. package/src/docs/pages/spacer/index.tsx +13 -0
  182. package/src/docs/pages/spacer/spacerExample.scss +5 -0
  183. package/src/docs/pages/spinner/Colors.tsx +20 -0
  184. package/src/docs/pages/spinner/Inline.tsx +15 -0
  185. package/src/docs/pages/spinner/Sizes.tsx +14 -0
  186. package/src/docs/pages/spinner/_index.scss +5 -0
  187. package/src/docs/pages/spinner/index.tsx +30 -0
  188. package/src/docs/pages/stat/InCards.tsx +11 -0
  189. package/src/docs/pages/stat/Stat.tsx +5 -0
  190. package/src/docs/pages/stat/index.tsx +22 -0
  191. package/src/docs/pages/statList/StatList.tsx +29 -0
  192. package/src/docs/pages/statList/index.tsx +15 -0
  193. package/src/docs/pages/status/Status.tsx +23 -0
  194. package/src/docs/pages/status/index.tsx +15 -0
  195. package/src/docs/pages/steps/BasicSteps.tsx +25 -0
  196. package/src/docs/pages/steps/CustomSteps.tsx +78 -0
  197. package/src/docs/pages/steps/InteractiveSteps.tsx +44 -0
  198. package/src/docs/pages/steps/StepSizes.tsx +48 -0
  199. package/src/docs/pages/steps/StepStatuses.tsx +43 -0
  200. package/src/docs/pages/steps/index.tsx +43 -0
  201. package/src/docs/pages/summary/Markdown.tsx +37 -0
  202. package/src/docs/pages/summary/Rtl.tsx +15 -0
  203. package/src/docs/pages/summary/Summary.tsx +15 -0
  204. package/src/docs/pages/summary/index.tsx +29 -0
  205. package/src/docs/pages/superCheckboxGroup/LabelOnly.tsx +38 -0
  206. package/src/docs/pages/superCheckboxGroup/WithDescription.tsx +41 -0
  207. package/src/docs/pages/superCheckboxGroup/index.tsx +22 -0
  208. package/src/docs/pages/superRadioGroup/LabelOnly.tsx +38 -0
  209. package/src/docs/pages/superRadioGroup/WithDescription.tsx +41 -0
  210. package/src/docs/pages/superRadioGroup/index.tsx +22 -0
  211. package/src/docs/pages/table/Table.tsx +444 -0
  212. package/src/docs/pages/table/createFakePeople.ts +98 -0
  213. package/src/docs/pages/table/index.tsx +11 -0
  214. package/src/docs/pages/tabs/Enclosed.tsx +40 -0
  215. package/src/docs/pages/tabs/FullWidth.tsx +22 -0
  216. package/src/docs/pages/tabs/Links.tsx +30 -0
  217. package/src/docs/pages/tabs/Medium.tsx +31 -0
  218. package/src/docs/pages/tabs/Small.tsx +37 -0
  219. package/src/docs/pages/tabs/index.tsx +43 -0
  220. package/src/docs/pages/text/Text.tsx +138 -0
  221. package/src/docs/pages/text/TextColor.tsx +15 -0
  222. package/src/docs/pages/text/Title.tsx +16 -0
  223. package/src/docs/pages/text/Typography.tsx +97 -0
  224. package/src/docs/pages/text/index.tsx +36 -0
  225. package/src/docs/pages/textArea/TextArea.tsx +16 -0
  226. package/src/docs/pages/textArea/TextAreaResizeable.tsx +17 -0
  227. package/src/docs/pages/textArea/index.tsx +22 -0
  228. package/src/docs/pages/theme/Theme.tsx +54 -0
  229. package/src/docs/pages/theme/index.tsx +15 -0
  230. package/src/docs/pages/timeline/Timeline.tsx +149 -0
  231. package/src/docs/pages/timeline/index.tsx +11 -0
  232. package/src/docs/pages/toggle/Toggle.tsx +8 -0
  233. package/src/docs/pages/toggle/index.tsx +11 -0
  234. package/src/docs/pages/tooltip/Tooltip.tsx +29 -0
  235. package/src/docs/pages/tooltip/index.tsx +15 -0
  236. package/src/docs/pages/topicButton/Link.tsx +11 -0
  237. package/src/docs/pages/topicButton/index.tsx +15 -0
  238. package/src/docs/pages/truncate/TruncateString.tsx +13 -0
  239. package/src/docs/pages/truncate/index.tsx +11 -0
  240. package/src/docs/pages/validation/Validation.tsx +67 -0
  241. package/src/docs/pages/validation/index.tsx +11 -0
  242. package/src/docs/pages.tsx +152 -0
  243. package/.github/CODEOWNERS +0 -3
  244. package/.github/workflows/deploy-pages-site.yml +0 -26
  245. package/.github/workflows/deploy-pr-preview.yml +0 -25
  246. package/.github/workflows/publish-on-version-change.yml +0 -51
  247. package/CLAUDE.md +0 -11
  248. package/licenses.txt +0 -9035
@@ -25,6 +25,7 @@ export type BaseButtonProps = {
25
25
  title?: string;
26
26
  isSubmit?: boolean;
27
27
  isLoading?: boolean;
28
+ truncate?: boolean;
28
29
  };
29
30
  export declare const BaseButton: import("react").ForwardRefExoticComponent<BaseButtonProps & {
30
31
  spinnerColor?: "accent" | "primary" | "success" | "warning" | "danger" | "subdued" | "empty" | "dark" | undefined;
@@ -27,7 +27,7 @@ const sizeToSpinnerSizeMap = {
27
27
  l: "m"
28
28
  };
29
29
  export const BaseButton = forwardRef((_a, ref) => {
30
- var { children, icon, iconSide = "left", align = "center", className, size = "m", fullWidth, onClick, onMouseOver, onMouseOut, onMouseMove, tabIndex, isInert, isDisabled, href, target, track, htmlFor, isSubmit, isLoading, spinnerColor } = _a, rest = __rest(_a, ["children", "icon", "iconSide", "align", "className", "size", "fullWidth", "onClick", "onMouseOver", "onMouseOut", "onMouseMove", "tabIndex", "isInert", "isDisabled", "href", "target", "track", "htmlFor", "isSubmit", "isLoading", "spinnerColor"]);
30
+ var { children, icon, iconSide = "left", align = "center", className, size = "m", fullWidth, onClick, onMouseOver, onMouseOut, onMouseMove, tabIndex, isInert, isDisabled, href, target, track, htmlFor, isSubmit, isLoading, spinnerColor, truncate } = _a, rest = __rest(_a, ["children", "icon", "iconSide", "align", "className", "size", "fullWidth", "onClick", "onMouseOver", "onMouseOut", "onMouseMove", "tabIndex", "isInert", "isDisabled", "href", "target", "track", "htmlFor", "isSubmit", "isLoading", "spinnerColor", "truncate"]);
31
31
  const { createLink } = useVuiContext();
32
32
  const classes = classNames("vuiBaseButton", className, `vuiBaseButton--${size}`, alignToClassMap[align], {
33
33
  "vuiBaseButton-isInert": isInert,
@@ -62,10 +62,13 @@ export const BaseButton = forwardRef((_a, ref) => {
62
62
  _jsxs("button", Object.assign({ className: classes, tabIndex: -1, ref: ref }, { children: [iconContainer, children] }))), target,
63
63
  tabIndex }, rest), getTrackingProps(track)));
64
64
  }
65
+ const labelClasses = classNames({
66
+ "vuiBaseButtonLabel--truncate": truncate
67
+ });
65
68
  const props = Object.assign({ onClick,
66
69
  onMouseOver,
67
70
  onMouseOut,
68
71
  onMouseMove,
69
72
  tabIndex, type: isSubmit ? "submit" : "button", disabled: isDisabled }, rest);
70
- return (_jsxs("button", Object.assign({ className: classes }, props, { ref: ref }, { children: [iconContainer, children] })));
73
+ return (_jsxs("button", Object.assign({ className: classes }, props, { ref: ref }, { children: [iconContainer, _jsx("span", Object.assign({ className: labelClasses }, { children: children }))] })));
71
74
  });
@@ -25,7 +25,7 @@
25
25
  font-weight: 500;
26
26
  box-shadow: $shadowSmallStart;
27
27
  transition: all $transitionSpeed;
28
- line-height: 1;
28
+ line-height: 1.2;
29
29
  cursor: pointer;
30
30
  }
31
31
 
@@ -94,3 +94,8 @@
94
94
  padding: $sizeS $sizeL;
95
95
  height: 47px;
96
96
  }
97
+
98
+ .vuiBaseButtonLabel--truncate {
99
+ overflow: hidden;
100
+ text-overflow: ellipsis;
101
+ }
@@ -705,7 +705,7 @@ fieldset {
705
705
  font-weight: 500;
706
706
  box-shadow: rgba(60, 64, 67, 0.3) 0px 0px 0px 0px, rgba(60, 64, 67, 0.15) 0px 0px 0px 0px;
707
707
  transition: all 0.2s;
708
- line-height: 1;
708
+ line-height: 1.2;
709
709
  cursor: pointer;
710
710
  }
711
711
 
@@ -771,6 +771,11 @@ fieldset {
771
771
  height: 47px;
772
772
  }
773
773
 
774
+ .vuiBaseButtonLabel--truncate {
775
+ overflow: hidden;
776
+ text-overflow: ellipsis;
777
+ }
778
+
774
779
  .vuiButtonPrimary:hover {
775
780
  box-shadow: rgba(60, 64, 67, 0.3) 0px 1px 2px 0px, rgba(60, 64, 67, 0.15) 0px 2px 6px 2px;
776
781
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vectara/vectara-ui",
3
- "version": "15.2.0",
3
+ "version": "15.3.1",
4
4
  "homepage": "./",
5
5
  "description": "Vectara's design system, codified as a React and Sass component library",
6
6
  "author": "Vectara",
@@ -23,6 +23,13 @@
23
23
  "module": "lib/index.js",
24
24
  "main": "lib/index.js",
25
25
  "types": "lib/index.d.ts",
26
+ "files": [
27
+ "lib/",
28
+ "src/docs/",
29
+ "README.md",
30
+ "NO_LICENSE",
31
+ "CHANGELOG.md"
32
+ ],
26
33
  "scripts": {
27
34
  "start": "PORT=2000 react-scripts start",
28
35
  "buildDocs": "BUILD_PATH='./docs/public' PUBLIC_URL='.' react-scripts build",
@@ -0,0 +1,102 @@
1
+ import { Link, Navigate, Route, HashRouter as Router, Routes, useLocation } from "react-router-dom";
2
+ import { BiLogoGithub } from "react-icons/bi";
3
+ import {
4
+ VuiAppHeader,
5
+ VuiIconButton,
6
+ VuiFlexContainer,
7
+ VuiFlexItem,
8
+ VuiIcon,
9
+ VuiTitle,
10
+ VuiAppLayout,
11
+ VuiButtonSecondary,
12
+ VuiContextProvider,
13
+ LinkProps
14
+ } from "../lib";
15
+ import { HeaderLogo } from "./components/HeaderLogo";
16
+ import { categories } from "./pages";
17
+ import { Home } from "./Home";
18
+ import { Page } from "./Page";
19
+ import "./index.scss";
20
+
21
+ export const Docs = () => {
22
+ return (
23
+ <Router>
24
+ <DocsContent />
25
+ </Router>
26
+ );
27
+ };
28
+
29
+ const DocsContent = () => {
30
+ const location = useLocation();
31
+
32
+ const routes: React.ReactNode[] = [];
33
+
34
+ categories.forEach(({ pages }) => {
35
+ pages.forEach((page) => {
36
+ const { name, path } = page;
37
+ routes.push(<Route key={name} path={path} element={<Page page={page} />} />);
38
+ });
39
+ });
40
+
41
+ const linkProvider = (linkConfig: LinkProps) => {
42
+ const { className, href, onClick, children, ...rest } = linkConfig;
43
+
44
+ return (
45
+ <Link className={className} to={href ?? ""} onClick={onClick} {...rest}>
46
+ {children}
47
+ </Link>
48
+ );
49
+ };
50
+
51
+ const pathProvider = () => {
52
+ return location.pathname;
53
+ };
54
+
55
+ return (
56
+ <VuiContextProvider linkProvider={linkProvider} pathProvider={pathProvider}>
57
+ <VuiAppHeader
58
+ left={
59
+ <VuiFlexContainer spacing="m" alignItems="center">
60
+ <VuiFlexItem grow={false} shrink={false}>
61
+ <HeaderLogo />
62
+ </VuiFlexItem>
63
+
64
+ <VuiFlexItem grow={false} shrink={false}>
65
+ <VuiTitle size="xs">
66
+ <h1>Vectara UI Library</h1>
67
+ </VuiTitle>
68
+ </VuiFlexItem>
69
+
70
+ <VuiFlexItem grow={false} shrink={false}>
71
+ <VuiButtonSecondary size="s" color="neutral" href="/">
72
+ Home
73
+ </VuiButtonSecondary>
74
+ </VuiFlexItem>
75
+ </VuiFlexContainer>
76
+ }
77
+ right={
78
+ <VuiIconButton
79
+ href="https://github.com/vectara/vectara-ui"
80
+ target="_blank"
81
+ color="neutral"
82
+ size="m"
83
+ aria-label="Vectara UI GitHub repository"
84
+ icon={
85
+ <VuiIcon>
86
+ <BiLogoGithub />
87
+ </VuiIcon>
88
+ }
89
+ />
90
+ }
91
+ />
92
+
93
+ <VuiAppLayout navItems={categories}>
94
+ <Routes>
95
+ <Route path="/" element={<Home />} />
96
+ {routes}
97
+ <Route path="*" element={<Navigate replace to="/" />} />
98
+ </Routes>
99
+ </VuiAppLayout>
100
+ </VuiContextProvider>
101
+ );
102
+ };
@@ -0,0 +1,123 @@
1
+ import { BiLinkExternal } from "react-icons/bi";
2
+ import {
3
+ VuiTitle,
4
+ VuiAppContent,
5
+ VuiSpacer,
6
+ VuiCard,
7
+ VuiFlexContainer,
8
+ VuiFlexItem,
9
+ VuiText,
10
+ VuiLink,
11
+ VuiIcon,
12
+ VuiHorizontalRule
13
+ } from "../lib";
14
+
15
+ export const Home = () => {
16
+ return (
17
+ <VuiAppContent padding="l">
18
+ <VuiFlexContainer alignItems="center" justifyContent="center">
19
+ <VuiFlexItem className="homeCard">
20
+ <VuiCard
21
+ header={
22
+ <VuiTitle size="m">
23
+ <h2>Vectara UI Library</h2>
24
+ </VuiTitle>
25
+ }
26
+ body={
27
+ <>
28
+ <VuiFlexContainer alignItems="start" justifyContent="center">
29
+ <VuiFlexItem shrink={false} grow={false}>
30
+ <VuiText size="l">
31
+ <p>✨</p>
32
+ </VuiText>
33
+ </VuiFlexItem>
34
+
35
+ <VuiFlexItem grow={1}>
36
+ <VuiText size="m">
37
+ <p>The Vectara UI Library is a React component library built with TypeScript and SCSS.</p>
38
+ </VuiText>
39
+ </VuiFlexItem>
40
+ </VuiFlexContainer>
41
+
42
+ <VuiSpacer size="m" />
43
+
44
+ <VuiFlexContainer alignItems="start" justifyContent="center">
45
+ <VuiFlexItem shrink={false} grow={false}>
46
+ <VuiText size="l">
47
+ <p>🚨</p>
48
+ </VuiText>
49
+ </VuiFlexItem>
50
+
51
+ <VuiFlexItem grow={1}>
52
+ <VuiText size="m">
53
+ <p>
54
+ We solely intend this library for internal use by{" "}
55
+ <VuiLink href="http://vectara.com/">Vectara</VuiLink>. Vectara, Inc. reserves all rights. For
56
+ more information, see the{" "}
57
+ <VuiLink href="https://github.com/vectara/vectara-ui/blob/main/README.md">README</VuiLink> and{" "}
58
+ <VuiLink href="https://github.com/vectara/vectara-ui/blob/main/NO_LICENSE">NO_LICENSE</VuiLink>.
59
+ </p>
60
+ </VuiText>
61
+ </VuiFlexItem>
62
+ </VuiFlexContainer>
63
+
64
+ <VuiSpacer size="m" />
65
+
66
+ <VuiFlexContainer alignItems="start" justifyContent="center">
67
+ <VuiFlexItem shrink={false} grow={false}>
68
+ <VuiText size="l">
69
+ <p>🙌</p>
70
+ </VuiText>
71
+ </VuiFlexItem>
72
+
73
+ <VuiFlexItem grow={1}>
74
+ <VuiText size="m">
75
+ <p>
76
+ That said, we welcome bug reports and feature requests on our{" "}
77
+ <VuiLink href="https://github.com/vectara/vectara-ui" target="_blank">
78
+ GitHub repo{" "}
79
+ <VuiIcon inline size="s">
80
+ <BiLinkExternal />
81
+ </VuiIcon>
82
+ </VuiLink>
83
+ .
84
+ </p>
85
+ </VuiText>
86
+ </VuiFlexItem>
87
+ </VuiFlexContainer>
88
+
89
+ <VuiSpacer size="m" />
90
+ <VuiHorizontalRule />
91
+ <VuiSpacer size="m" />
92
+
93
+ <VuiTitle size="s">
94
+ <h3>Dependencies</h3>
95
+ </VuiTitle>
96
+
97
+ <VuiSpacer size="s" />
98
+
99
+ <VuiText>
100
+ <ul>
101
+ <li>
102
+ <strong>
103
+ <VuiLink href="https://react-icons.github.io/react-icons/icons/bi/">BoxIcons</VuiLink>
104
+ </strong>{" "}
105
+ for icons
106
+ </li>
107
+
108
+ <li>
109
+ <strong>
110
+ <VuiLink href="https://prismjs.com/">PrismJS</VuiLink>
111
+ </strong>{" "}
112
+ for syntax highlighting
113
+ </li>
114
+ </ul>
115
+ </VuiText>
116
+ </>
117
+ }
118
+ />
119
+ </VuiFlexItem>
120
+ </VuiFlexContainer>
121
+ </VuiAppContent>
122
+ );
123
+ };
@@ -0,0 +1,79 @@
1
+ import { useLocation, useNavigate } from "react-router-dom";
2
+ import { BiRightArrowAlt, BiLeftArrowAlt } from "react-icons/bi";
3
+ import { VuiIconButton, VuiFlexContainer, VuiFlexItem, VuiIcon, VuiTitle, VuiAppContent, VuiSpacer } from "../lib";
4
+ import { Page as PageType, paths } from "./pages";
5
+ import { Example } from "./components/Example";
6
+ import React from "react";
7
+
8
+ export const Page = ({ page }: { page: PageType }) => {
9
+ const { name, example, examples } = page;
10
+ const location = useLocation();
11
+ const navigate = useNavigate();
12
+ const currentPageIndex = paths.list.findIndex((page) => page.path === location.pathname);
13
+
14
+ const navigateToPreviousPage = () => {
15
+ const prevIndex = currentPageIndex === 0 ? paths.list.length - 1 : currentPageIndex - 1;
16
+ navigate(paths.list[prevIndex].path);
17
+ };
18
+
19
+ const navigateToNextPage = () => {
20
+ const nextIndex = currentPageIndex === paths.list.length - 1 ? 0 : currentPageIndex + 1;
21
+ navigate(paths.list[nextIndex].path);
22
+ };
23
+ return (
24
+ <VuiAppContent padding="l">
25
+ <VuiFlexContainer alignItems="center" justifyContent="spaceBetween">
26
+ <VuiFlexItem grow={false}>
27
+ <VuiTitle size="m">
28
+ <h2>{name}</h2>
29
+ </VuiTitle>
30
+ </VuiFlexItem>
31
+
32
+ <VuiFlexItem>
33
+ <VuiFlexContainer alignItems="center" spacing="xxs">
34
+ <VuiFlexItem grow={false}>
35
+ <VuiIconButton
36
+ aria-label="Go to previous example"
37
+ icon={
38
+ <VuiIcon>
39
+ <BiLeftArrowAlt />
40
+ </VuiIcon>
41
+ }
42
+ color="neutral"
43
+ onClick={() => navigateToPreviousPage()}
44
+ />
45
+ </VuiFlexItem>
46
+
47
+ <VuiFlexItem>
48
+ <VuiIconButton
49
+ aria-label="Go to next example"
50
+ icon={
51
+ <VuiIcon>
52
+ <BiRightArrowAlt />
53
+ </VuiIcon>
54
+ }
55
+ color="neutral"
56
+ onClick={() => navigateToNextPage()}
57
+ />
58
+ </VuiFlexItem>
59
+ </VuiFlexContainer>
60
+ </VuiFlexItem>
61
+ </VuiFlexContainer>
62
+
63
+ <VuiSpacer size="m" />
64
+
65
+ <>
66
+ {example ? (
67
+ <Example name={undefined} component={example.component} source={example.source} />
68
+ ) : (
69
+ examples?.map(({ name: exampleName, component, source }) => (
70
+ <React.Fragment key={`example-${name}-${exampleName}`}>
71
+ <Example name={exampleName} component={component} source={source} />
72
+ <VuiSpacer size="l" />
73
+ </React.Fragment>
74
+ ))
75
+ )}
76
+ </>
77
+ </VuiAppContent>
78
+ );
79
+ };
@@ -0,0 +1,44 @@
1
+ import { useState } from "react";
2
+ import { VuiCode, VuiSpacer, VuiTab, VuiTabs, VuiTitle } from "../../lib";
3
+
4
+ type Props = {
5
+ name?: string;
6
+ component: React.ReactNode;
7
+ source: string;
8
+ };
9
+
10
+ export const Example = ({ name, component, source }: Props) => {
11
+ const [tab, setTab] = useState<"example" | "source">("example");
12
+
13
+ return (
14
+ <>
15
+ {name && (
16
+ <VuiTitle size="s">
17
+ <h3>{name}</h3>
18
+ </VuiTitle>
19
+ )}
20
+
21
+ <VuiSpacer size="xs" />
22
+
23
+ <VuiTabs>
24
+ <VuiTab isActive={tab === "example"} onClick={() => setTab("example")}>
25
+ Example
26
+ </VuiTab>
27
+
28
+ <VuiTab isActive={tab === "source"} onClick={() => setTab("source")}>
29
+ Source
30
+ </VuiTab>
31
+ </VuiTabs>
32
+
33
+ {tab === "example" && (
34
+ <>
35
+ <VuiSpacer size="m" />
36
+ {component}
37
+ </>
38
+ )}
39
+ {tab === "source" && <VuiCode language="tsx">{source}</VuiCode>}
40
+
41
+ <VuiSpacer size="l" />
42
+ </>
43
+ );
44
+ };