@veracity/vui 2.5.1 → 2.6.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 (314) hide show
  1. package/dist/cjs/box/box.js +3 -4
  2. package/dist/cjs/box/box.types.d.ts +2 -0
  3. package/dist/cjs/box/box.types.d.ts.map +1 -1
  4. package/dist/cjs/button/button.types.d.ts +1 -1
  5. package/dist/cjs/button/button.types.d.ts.map +1 -1
  6. package/dist/cjs/buttonGroup/buttonGroup.d.ts.map +1 -1
  7. package/dist/cjs/buttonGroup/buttonGroup.js +0 -4
  8. package/dist/cjs/core/links.d.ts.map +1 -1
  9. package/dist/cjs/core/links.js +3 -6
  10. package/dist/cjs/dialog/dialog.js +2 -2
  11. package/dist/cjs/dialog/dialogCloseButton.d.ts.map +1 -1
  12. package/dist/cjs/dialog/dialogCloseButton.js +1 -1
  13. package/dist/cjs/footer/footer.d.ts.map +1 -1
  14. package/dist/cjs/footer/footer.js +51 -7
  15. package/dist/cjs/footer/footer.types.d.ts +1 -0
  16. package/dist/cjs/footer/footer.types.d.ts.map +1 -1
  17. package/dist/cjs/footer/footerColumn.d.ts.map +1 -1
  18. package/dist/cjs/footer/footerColumn.js +1 -1
  19. package/dist/cjs/footer/footerContent.d.ts.map +1 -1
  20. package/dist/cjs/footer/footerContent.js +1 -1
  21. package/dist/cjs/footer/footerLink.js +1 -1
  22. package/dist/cjs/footer/footerSlimColumn.d.ts +5 -0
  23. package/dist/cjs/footer/footerSlimColumn.d.ts.map +1 -0
  24. package/dist/cjs/footer/footerSlimColumn.js +28 -0
  25. package/dist/cjs/footer/footerTrademark.d.ts +1 -0
  26. package/dist/cjs/footer/footerTrademark.d.ts.map +1 -1
  27. package/dist/cjs/footer/footerTrademark.js +5 -3
  28. package/dist/cjs/footer/theme.d.ts +38 -2
  29. package/dist/cjs/footer/theme.d.ts.map +1 -1
  30. package/dist/cjs/footer/theme.js +38 -2
  31. package/dist/cjs/header/headerAccount.d.ts.map +1 -1
  32. package/dist/cjs/header/headerAccount.js +1 -1
  33. package/dist/cjs/header/headerAccountUserInfo.d.ts.map +1 -1
  34. package/dist/cjs/header/headerAccountUserInfo.js +1 -3
  35. package/dist/cjs/header/headerDivider.js +1 -1
  36. package/dist/cjs/header/headerMobileToggle.d.ts.map +1 -1
  37. package/dist/cjs/header/headerMobileToggle.js +1 -1
  38. package/dist/cjs/header/headerServices.d.ts.map +1 -1
  39. package/dist/cjs/header/headerServices.js +1 -1
  40. package/dist/cjs/heading/heading.d.ts +1 -1
  41. package/dist/cjs/heading/heading.d.ts.map +1 -1
  42. package/dist/cjs/heading/heading.js +1 -1
  43. package/dist/cjs/icons/baseIcons/cub/cubCircleFB.d.ts +4 -0
  44. package/dist/cjs/icons/baseIcons/cub/cubCircleFB.d.ts.map +1 -0
  45. package/dist/cjs/icons/baseIcons/cub/cubCircleFB.js +7 -0
  46. package/dist/cjs/icons/baseIcons/cub/cubCircleLinkedIn.d.ts +4 -0
  47. package/dist/cjs/icons/baseIcons/cub/cubCircleLinkedIn.d.ts.map +1 -0
  48. package/dist/cjs/icons/baseIcons/cub/cubCircleLinkedIn.js +8 -0
  49. package/dist/cjs/icons/baseIcons/cub/cubCircleTwitter.d.ts +4 -0
  50. package/dist/cjs/icons/baseIcons/cub/cubCircleTwitter.d.ts.map +1 -0
  51. package/dist/cjs/icons/baseIcons/cub/cubCircleTwitter.js +8 -0
  52. package/dist/cjs/icons/baseIcons/cub/cubCircleYoutube.d.ts +4 -0
  53. package/dist/cjs/icons/baseIcons/cub/cubCircleYoutube.d.ts.map +1 -0
  54. package/dist/cjs/icons/baseIcons/cub/cubCircleYoutube.js +7 -0
  55. package/dist/cjs/icons/baseIcons/icons.d.ts +4 -0
  56. package/dist/cjs/icons/baseIcons/icons.d.ts.map +1 -1
  57. package/dist/cjs/icons/baseIcons/icons.js +16 -8
  58. package/dist/cjs/icons/baseIcons/types.d.ts +1 -1
  59. package/dist/cjs/icons/baseIcons/types.d.ts.map +1 -1
  60. package/dist/cjs/input/input.d.ts +1 -0
  61. package/dist/cjs/input/input.d.ts.map +1 -1
  62. package/dist/cjs/input/input.js +40 -31
  63. package/dist/cjs/input/input.types.d.ts +2 -2
  64. package/dist/cjs/input/input.types.d.ts.map +1 -1
  65. package/dist/cjs/input/inputInput.d.ts.map +1 -1
  66. package/dist/cjs/input/inputInput.js +1 -1
  67. package/dist/cjs/link/link.types.d.ts +1 -1
  68. package/dist/cjs/link/link.types.d.ts.map +1 -1
  69. package/dist/cjs/link/theme.d.ts +20 -22
  70. package/dist/cjs/link/theme.d.ts.map +1 -1
  71. package/dist/cjs/link/theme.js +25 -31
  72. package/dist/cjs/list/list.d.ts.map +1 -1
  73. package/dist/cjs/list/list.js +2 -2
  74. package/dist/cjs/list/list.types.d.ts +2 -2
  75. package/dist/cjs/list/list.types.d.ts.map +1 -1
  76. package/dist/cjs/list/listHeading.d.ts.map +1 -1
  77. package/dist/cjs/list/listHeading.js +1 -1
  78. package/dist/cjs/list/listItem.d.ts.map +1 -1
  79. package/dist/cjs/list/listItem.js +2 -3
  80. package/dist/cjs/list/theme.d.ts +40 -35
  81. package/dist/cjs/list/theme.d.ts.map +1 -1
  82. package/dist/cjs/list/theme.js +44 -45
  83. package/dist/cjs/logo/Logo.d.ts +1 -1
  84. package/dist/cjs/logo/Logo.d.ts.map +1 -1
  85. package/dist/cjs/logo/Logo.js +1 -1
  86. package/dist/cjs/menu/menuList.js +1 -1
  87. package/dist/cjs/modal/modal.d.ts.map +1 -1
  88. package/dist/cjs/modal/modal.js +1 -1
  89. package/dist/cjs/modal/modalBackdrop.d.ts.map +1 -1
  90. package/dist/cjs/modal/modalBackdrop.js +5 -4
  91. package/dist/cjs/select/select.d.ts +1 -1
  92. package/dist/cjs/select/select.d.ts.map +1 -1
  93. package/dist/cjs/select/select.js +40 -3
  94. package/dist/cjs/select/select.types.d.ts +2 -0
  95. package/dist/cjs/select/select.types.d.ts.map +1 -1
  96. package/dist/cjs/select/selectButton.d.ts.map +1 -1
  97. package/dist/cjs/select/selectButton.js +1 -1
  98. package/dist/cjs/sidemenu/consts.d.ts +0 -4
  99. package/dist/cjs/sidemenu/consts.d.ts.map +1 -1
  100. package/dist/cjs/sidemenu/consts.js +1 -5
  101. package/dist/cjs/sidemenu/sidemenu.d.ts.map +1 -1
  102. package/dist/cjs/sidemenu/sidemenu.js +5 -7
  103. package/dist/cjs/system/effects.d.ts +1 -0
  104. package/dist/cjs/system/effects.d.ts.map +1 -1
  105. package/dist/cjs/tabs/consts.d.ts +10 -0
  106. package/dist/cjs/tabs/consts.d.ts.map +1 -0
  107. package/dist/cjs/tabs/consts.js +17 -0
  108. package/dist/cjs/tabs/tab.d.ts.map +1 -1
  109. package/dist/cjs/tabs/tab.js +1 -4
  110. package/dist/cjs/tabs/tabs.d.ts +1 -1
  111. package/dist/cjs/tabs/tabs.js +1 -1
  112. package/dist/cjs/tabs/tabs.types.d.ts +1 -0
  113. package/dist/cjs/tabs/tabs.types.d.ts.map +1 -1
  114. package/dist/cjs/tabs/tabsNavBar.d.ts.map +1 -1
  115. package/dist/cjs/tabs/tabsNavBar.js +6 -10
  116. package/dist/cjs/theme/components.d.ts +89 -45
  117. package/dist/cjs/theme/components.d.ts.map +1 -1
  118. package/dist/cjs/theme/defaultTheme.d.ts +90 -45
  119. package/dist/cjs/theme/defaultTheme.d.ts.map +1 -1
  120. package/dist/cjs/theme/foundations/index.d.ts +1 -0
  121. package/dist/cjs/theme/foundations/index.d.ts.map +1 -1
  122. package/dist/cjs/theme/foundations/shadows.d.ts +1 -0
  123. package/dist/cjs/theme/foundations/shadows.d.ts.map +1 -1
  124. package/dist/cjs/theme/foundations/shadows.js +3 -1
  125. package/dist/cjs/theme/types.d.ts +1 -0
  126. package/dist/cjs/theme/types.d.ts.map +1 -1
  127. package/dist/cjs/utils/styles.d.ts +10 -0
  128. package/dist/cjs/utils/styles.d.ts.map +1 -1
  129. package/dist/cjs/utils/styles.js +55 -2
  130. package/dist/esm/box/box.js +3 -4
  131. package/dist/esm/box/box.types.d.ts +2 -0
  132. package/dist/esm/box/box.types.d.ts.map +1 -1
  133. package/dist/esm/button/button.types.d.ts +1 -1
  134. package/dist/esm/button/button.types.d.ts.map +1 -1
  135. package/dist/esm/buttonGroup/buttonGroup.d.ts.map +1 -1
  136. package/dist/esm/buttonGroup/buttonGroup.js +0 -4
  137. package/dist/esm/core/links.d.ts.map +1 -1
  138. package/dist/esm/core/links.js +3 -6
  139. package/dist/esm/dialog/dialog.js +2 -2
  140. package/dist/esm/dialog/dialogCloseButton.d.ts.map +1 -1
  141. package/dist/esm/dialog/dialogCloseButton.js +1 -1
  142. package/dist/esm/footer/footer.d.ts.map +1 -1
  143. package/dist/esm/footer/footer.js +51 -8
  144. package/dist/esm/footer/footer.types.d.ts +1 -0
  145. package/dist/esm/footer/footer.types.d.ts.map +1 -1
  146. package/dist/esm/footer/footerColumn.d.ts.map +1 -1
  147. package/dist/esm/footer/footerColumn.js +1 -1
  148. package/dist/esm/footer/footerContent.d.ts.map +1 -1
  149. package/dist/esm/footer/footerContent.js +1 -1
  150. package/dist/esm/footer/footerLink.js +1 -1
  151. package/dist/esm/footer/footerSlimColumn.d.ts +5 -0
  152. package/dist/esm/footer/footerSlimColumn.d.ts.map +1 -0
  153. package/dist/esm/footer/footerSlimColumn.js +12 -0
  154. package/dist/esm/footer/footerTrademark.d.ts +1 -0
  155. package/dist/esm/footer/footerTrademark.d.ts.map +1 -1
  156. package/dist/esm/footer/footerTrademark.js +4 -2
  157. package/dist/esm/footer/theme.d.ts +38 -2
  158. package/dist/esm/footer/theme.d.ts.map +1 -1
  159. package/dist/esm/footer/theme.js +38 -2
  160. package/dist/esm/header/headerAccount.d.ts.map +1 -1
  161. package/dist/esm/header/headerAccount.js +1 -1
  162. package/dist/esm/header/headerAccountUserInfo.d.ts.map +1 -1
  163. package/dist/esm/header/headerAccountUserInfo.js +1 -3
  164. package/dist/esm/header/headerDivider.js +1 -1
  165. package/dist/esm/header/headerMobileToggle.d.ts.map +1 -1
  166. package/dist/esm/header/headerMobileToggle.js +1 -1
  167. package/dist/esm/header/headerServices.d.ts.map +1 -1
  168. package/dist/esm/header/headerServices.js +1 -1
  169. package/dist/esm/heading/heading.d.ts +1 -1
  170. package/dist/esm/heading/heading.d.ts.map +1 -1
  171. package/dist/esm/heading/heading.js +1 -1
  172. package/dist/esm/icons/baseIcons/cub/cubCircleFB.d.ts +4 -0
  173. package/dist/esm/icons/baseIcons/cub/cubCircleFB.d.ts.map +1 -0
  174. package/dist/esm/icons/baseIcons/cub/cubCircleFB.js +5 -0
  175. package/dist/esm/icons/baseIcons/cub/cubCircleLinkedIn.d.ts +4 -0
  176. package/dist/esm/icons/baseIcons/cub/cubCircleLinkedIn.d.ts.map +1 -0
  177. package/dist/esm/icons/baseIcons/cub/cubCircleLinkedIn.js +6 -0
  178. package/dist/esm/icons/baseIcons/cub/cubCircleTwitter.d.ts +4 -0
  179. package/dist/esm/icons/baseIcons/cub/cubCircleTwitter.d.ts.map +1 -0
  180. package/dist/esm/icons/baseIcons/cub/cubCircleTwitter.js +6 -0
  181. package/dist/esm/icons/baseIcons/cub/cubCircleYoutube.d.ts +4 -0
  182. package/dist/esm/icons/baseIcons/cub/cubCircleYoutube.d.ts.map +1 -0
  183. package/dist/esm/icons/baseIcons/cub/cubCircleYoutube.js +5 -0
  184. package/dist/esm/icons/baseIcons/icons.d.ts +4 -0
  185. package/dist/esm/icons/baseIcons/icons.d.ts.map +1 -1
  186. package/dist/esm/icons/baseIcons/icons.js +4 -0
  187. package/dist/esm/icons/baseIcons/types.d.ts +1 -1
  188. package/dist/esm/icons/baseIcons/types.d.ts.map +1 -1
  189. package/dist/esm/input/input.d.ts +1 -0
  190. package/dist/esm/input/input.d.ts.map +1 -1
  191. package/dist/esm/input/input.js +40 -31
  192. package/dist/esm/input/input.types.d.ts +2 -2
  193. package/dist/esm/input/input.types.d.ts.map +1 -1
  194. package/dist/esm/input/inputInput.d.ts.map +1 -1
  195. package/dist/esm/input/inputInput.js +1 -1
  196. package/dist/esm/link/link.types.d.ts +1 -1
  197. package/dist/esm/link/link.types.d.ts.map +1 -1
  198. package/dist/esm/link/theme.d.ts +20 -22
  199. package/dist/esm/link/theme.d.ts.map +1 -1
  200. package/dist/esm/link/theme.js +25 -31
  201. package/dist/esm/list/list.d.ts.map +1 -1
  202. package/dist/esm/list/list.js +2 -2
  203. package/dist/esm/list/list.types.d.ts +2 -2
  204. package/dist/esm/list/list.types.d.ts.map +1 -1
  205. package/dist/esm/list/listHeading.d.ts.map +1 -1
  206. package/dist/esm/list/listHeading.js +1 -1
  207. package/dist/esm/list/listItem.d.ts.map +1 -1
  208. package/dist/esm/list/listItem.js +2 -3
  209. package/dist/esm/list/theme.d.ts +40 -35
  210. package/dist/esm/list/theme.d.ts.map +1 -1
  211. package/dist/esm/list/theme.js +44 -45
  212. package/dist/esm/logo/Logo.d.ts +1 -1
  213. package/dist/esm/logo/Logo.d.ts.map +1 -1
  214. package/dist/esm/logo/Logo.js +1 -1
  215. package/dist/esm/menu/menuList.js +1 -1
  216. package/dist/esm/modal/modal.d.ts.map +1 -1
  217. package/dist/esm/modal/modal.js +1 -1
  218. package/dist/esm/modal/modalBackdrop.d.ts.map +1 -1
  219. package/dist/esm/modal/modalBackdrop.js +6 -5
  220. package/dist/esm/select/select.d.ts +1 -1
  221. package/dist/esm/select/select.d.ts.map +1 -1
  222. package/dist/esm/select/select.js +16 -3
  223. package/dist/esm/select/select.types.d.ts +2 -0
  224. package/dist/esm/select/select.types.d.ts.map +1 -1
  225. package/dist/esm/select/selectButton.d.ts.map +1 -1
  226. package/dist/esm/select/selectButton.js +1 -1
  227. package/dist/esm/sidemenu/consts.d.ts +0 -4
  228. package/dist/esm/sidemenu/consts.d.ts.map +1 -1
  229. package/dist/esm/sidemenu/consts.js +0 -4
  230. package/dist/esm/sidemenu/sidemenu.d.ts.map +1 -1
  231. package/dist/esm/sidemenu/sidemenu.js +6 -8
  232. package/dist/esm/system/effects.d.ts +1 -0
  233. package/dist/esm/system/effects.d.ts.map +1 -1
  234. package/dist/esm/tabs/consts.d.ts +10 -0
  235. package/dist/esm/tabs/consts.d.ts.map +1 -0
  236. package/dist/esm/tabs/consts.js +14 -0
  237. package/dist/esm/tabs/tab.d.ts.map +1 -1
  238. package/dist/esm/tabs/tab.js +1 -4
  239. package/dist/esm/tabs/tabs.d.ts +1 -1
  240. package/dist/esm/tabs/tabs.js +1 -1
  241. package/dist/esm/tabs/tabs.types.d.ts +1 -0
  242. package/dist/esm/tabs/tabs.types.d.ts.map +1 -1
  243. package/dist/esm/tabs/tabsNavBar.d.ts.map +1 -1
  244. package/dist/esm/tabs/tabsNavBar.js +5 -9
  245. package/dist/esm/theme/components.d.ts +89 -45
  246. package/dist/esm/theme/components.d.ts.map +1 -1
  247. package/dist/esm/theme/defaultTheme.d.ts +90 -45
  248. package/dist/esm/theme/defaultTheme.d.ts.map +1 -1
  249. package/dist/esm/theme/foundations/index.d.ts +1 -0
  250. package/dist/esm/theme/foundations/index.d.ts.map +1 -1
  251. package/dist/esm/theme/foundations/shadows.d.ts +1 -0
  252. package/dist/esm/theme/foundations/shadows.d.ts.map +1 -1
  253. package/dist/esm/theme/foundations/shadows.js +3 -1
  254. package/dist/esm/theme/types.d.ts +1 -0
  255. package/dist/esm/theme/types.d.ts.map +1 -1
  256. package/dist/esm/utils/styles.d.ts +10 -0
  257. package/dist/esm/utils/styles.d.ts.map +1 -1
  258. package/dist/esm/utils/styles.js +50 -1
  259. package/package.json +1 -1
  260. package/src/box/box.tsx +5 -5
  261. package/src/box/box.types.ts +2 -0
  262. package/src/button/button.types.ts +1 -1
  263. package/src/buttonGroup/buttonGroup.tsx +0 -4
  264. package/src/core/links.tsx +3 -8
  265. package/src/dialog/dialog.tsx +2 -2
  266. package/src/dialog/dialogCloseButton.tsx +1 -3
  267. package/src/footer/footer.tsx +100 -22
  268. package/src/footer/footer.types.ts +1 -0
  269. package/src/footer/footerColumn.tsx +3 -2
  270. package/src/footer/footerContent.tsx +2 -1
  271. package/src/footer/footerLink.tsx +1 -1
  272. package/src/footer/footerSlimColumn.tsx +30 -0
  273. package/src/footer/footerTrademark.tsx +5 -4
  274. package/src/footer/theme.ts +40 -2
  275. package/src/header/headerAccount.tsx +1 -2
  276. package/src/header/headerAccountUserInfo.tsx +1 -7
  277. package/src/header/headerDivider.tsx +1 -1
  278. package/src/header/headerMobileToggle.tsx +0 -1
  279. package/src/header/headerServices.tsx +1 -8
  280. package/src/heading/heading.tsx +1 -1
  281. package/src/icons/baseIcons/cub/cubCircleFB.ts +8 -0
  282. package/src/icons/baseIcons/cub/cubCircleLinkedIn.ts +9 -0
  283. package/src/icons/baseIcons/cub/cubCircleTwitter.ts +9 -0
  284. package/src/icons/baseIcons/cub/cubCircleYoutube.ts +8 -0
  285. package/src/icons/baseIcons/icons.ts +4 -0
  286. package/src/icons/baseIcons/types.ts +4 -0
  287. package/src/input/input.tsx +69 -46
  288. package/src/input/input.types.ts +2 -2
  289. package/src/input/inputInput.tsx +1 -0
  290. package/src/link/link.types.ts +1 -1
  291. package/src/link/theme.ts +26 -39
  292. package/src/list/list.tsx +2 -5
  293. package/src/list/list.types.ts +2 -2
  294. package/src/list/listHeading.tsx +0 -1
  295. package/src/list/listItem.tsx +2 -2
  296. package/src/list/theme.ts +43 -49
  297. package/src/logo/Logo.tsx +1 -1
  298. package/src/menu/menuList.tsx +1 -1
  299. package/src/modal/modal.tsx +3 -1
  300. package/src/modal/modalBackdrop.tsx +15 -5
  301. package/src/select/select.tsx +32 -3
  302. package/src/select/select.types.ts +2 -0
  303. package/src/select/selectButton.tsx +0 -1
  304. package/src/sidemenu/consts.ts +0 -5
  305. package/src/sidemenu/sidemenu.tsx +6 -8
  306. package/src/system/effects.ts +1 -0
  307. package/src/tabs/consts.ts +17 -0
  308. package/src/tabs/tab.tsx +5 -8
  309. package/src/tabs/tabs.tsx +1 -1
  310. package/src/tabs/tabs.types.ts +1 -0
  311. package/src/tabs/tabsNavBar.tsx +13 -14
  312. package/src/theme/foundations/shadows.ts +3 -1
  313. package/src/theme/types.ts +1 -0
  314. package/src/utils/styles.ts +57 -1
@@ -1,9 +1,11 @@
1
- import React from 'react'
1
+ import React, { useEffect, useState } from 'react'
2
2
 
3
+ import { Box } from '../box'
4
+ import { Input } from '../input'
3
5
  import { Popover } from '../popover'
4
6
  import { __DEV__ } from '../utils'
5
7
  import { SelectProvider } from './context'
6
- import { SelectProps } from './select.types'
8
+ import { SelectOptionData, SelectProps } from './select.types'
7
9
  import SelectButton from './selectButton'
8
10
  import SelectContent from './selectContent'
9
11
  import SelectGroup from './selectGroup'
@@ -29,6 +31,7 @@ export function Select(props: SelectProps) {
29
31
  placeholder = 'Please select',
30
32
  readOnly,
31
33
  selectButton,
34
+ showOptionsFilter,
32
35
  size,
33
36
  value,
34
37
  variant,
@@ -41,6 +44,9 @@ export function Select(props: SelectProps) {
41
44
  console.error('<Select /> is used with isMultiple but its value is not an array: ', value)
42
45
  }
43
46
 
47
+ const [query, setQuery] = useState<string>('')
48
+ const [filteredOptions, setFilteredOptions] = useState(options)
49
+
44
50
  const context = {
45
51
  disabled,
46
52
  isInvalid,
@@ -53,6 +59,16 @@ export function Select(props: SelectProps) {
53
59
  variant,
54
60
  ...selectProps
55
61
  }
62
+ const onQueryChange = (e: any) => {
63
+ setQuery(e.target.value?.toLowerCase())
64
+ }
65
+
66
+ const filterOptions = (i: SelectOptionData) =>
67
+ !showOptionsFilter || !query?.length ? true : i?.text?.toLowerCase()?.includes(query)
68
+
69
+ useEffect(() => {
70
+ setFilteredOptions(options?.filter(filterOptions))
71
+ }, [query])
56
72
 
57
73
  return (
58
74
  <SelectProvider value={context}>
@@ -60,9 +76,22 @@ export function Select(props: SelectProps) {
60
76
  <>
61
77
  {selectButton ?? <SelectButton />}
62
78
  <SelectContent>
79
+ {showOptionsFilter && (
80
+ <Box mr={2}>
81
+ <Input
82
+ iconLeft="culFilterAlt"
83
+ m={1}
84
+ mt={0}
85
+ onChange={onQueryChange}
86
+ placeholder="Filter…"
87
+ size="sm"
88
+ value={query}
89
+ />
90
+ </Box>
91
+ )}
63
92
  <SelectGroup maxH={maxHeight} tabIndex={1000}>
64
93
  {children ??
65
- options?.map?.(option => <SelectOption key={option.value} title={option.text} {...option} />)}
94
+ filteredOptions?.map?.(option => <SelectOption key={option.value} title={option.text} {...option} />)}
66
95
  </SelectGroup>
67
96
  </SelectContent>
68
97
  </>
@@ -38,6 +38,8 @@ export type SelectProps = ThemingProps<'Select'> &
38
38
  readOnly?: boolean
39
39
  /** Custom select button slot. */
40
40
  selectButton?: ReactNode
41
+ /** Displays a filter input to limit the number of options. */
42
+ showOptionsFilter?: boolean
41
43
  }
42
44
 
43
45
  export type SelectOptionData = {
@@ -45,7 +45,6 @@ export const SelectButton = vui<'button', SelectButtonProps>((props, ref) => {
45
45
  as={LineButton}
46
46
  bg="white"
47
47
  className={cs('vui-selectButton', className)}
48
- colorScheme="prussian"
49
48
  disabled={disabled}
50
49
  focusRing={2}
51
50
  fontWeight="regular"
@@ -1,8 +1,3 @@
1
1
  export const border = '1px solid lightgray'
2
2
 
3
3
  export const expandedWidth = 64
4
-
5
- export const right = {
6
- expanded: 16,
7
- collapsed: 34
8
- }
@@ -5,7 +5,7 @@ import Button from '../button'
5
5
  import { styled, useStyleConfig, vui, VuiComponent } from '../core'
6
6
  import Icon from '../icon'
7
7
  import { cs, filterUndefined } from '../utils'
8
- import { border, expandedWidth, right } from './consts'
8
+ import { border, expandedWidth } from './consts'
9
9
  import { SidemenuProvider } from './context'
10
10
  import { SidemenuItemProps, SidemenuProps } from './sidemenu.types'
11
11
  import SidemenuItem from './sidemenuItem'
@@ -32,13 +32,11 @@ export const Sidemenu = vui<'div', SidemenuProps>((props, ref) => {
32
32
  setIsExpandedInternal(isExpanded)
33
33
  }, [isExpanded])
34
34
 
35
- const toggle = () => {
36
- setIsExpandedInternal(!isExpandedInternal)
37
- }
35
+ const onToggle = () => setIsExpandedInternal(!isExpandedInternal)
38
36
 
39
37
  const w = isExpandedInternal ? width : expandedWidth
40
- const icon = isExpandedInternal ? 'falArrowLeft' : 'falArrowRight'
41
- const iconRight = isExpandedInternal ? right.expanded : right.collapsed
38
+ const icon = `falArrow${isExpandedInternal ? 'Left' : 'Right'}`
39
+ const justifyContent = isExpandedInternal ? 'flex-end' : 'center'
42
40
 
43
41
  return (
44
42
  <SidemenuProvider value={context}>
@@ -49,8 +47,8 @@ export const Sidemenu = vui<'div', SidemenuProps>((props, ref) => {
49
47
  : children}
50
48
  </Box>
51
49
  <Box borderTop={border} className="vui-sidemenu-bottom" w="100%">
52
- <Button borderRadius={0} onClick={toggle} variant="tertiaryDark" w="100%">
53
- <Icon name={icon} position="absolute" right={iconRight} />
50
+ <Button borderRadius={0} justifyContent={justifyContent} onClick={onToggle} variant="tertiaryDark" w="100%">
51
+ <Icon name={icon} />
54
52
  </Button>
55
53
  </Box>
56
54
  </SidemenuBase>
@@ -15,6 +15,7 @@ export type OpacityProps = {
15
15
  type BoxShadowProp = SystemProp<ShadowGetter | AnyString, VuiTheme>
16
16
  export type BoxShadowProps = {
17
17
  boxShadow?: BoxShadowProp
18
+ elevation?: BoxShadowProp
18
19
  hoverBoxShadow?: BoxShadowProp
19
20
  }
20
21
 
@@ -0,0 +1,17 @@
1
+ import { Dict } from '../utils'
2
+
3
+ export const tabsColors = {
4
+ activeBg: 'skyBlue.main',
5
+ border: 'sandstone.main',
6
+ color: 'sandstone.10',
7
+ hover: 'skyBlue.hover',
8
+ main: 'seaBlue.main'
9
+ }
10
+
11
+ export const iconSizeMapper: Dict = {
12
+ sm: 'xs',
13
+ md: 'sm',
14
+ lg: 'md',
15
+ xl: 'lg',
16
+ xxl: 'xl'
17
+ }
package/src/tabs/tab.tsx CHANGED
@@ -11,13 +11,10 @@ export const TabBase = styled.divBox`
11
11
  /**
12
12
  * Implements a Tab component
13
13
  */
14
- export const Tab = vui<'div', TabProps>((props, ref) => {
15
- const { children, className } = props
16
- return (
17
- <TabBase className={cs('vui-tab', className)} ref={ref}>
18
- {children}
19
- </TabBase>
20
- )
21
- })
14
+ export const Tab = vui<'div', TabProps>(({ children, className }, ref) => (
15
+ <TabBase className={cs('vui-tab', className)} ref={ref}>
16
+ {children}
17
+ </TabBase>
18
+ ))
22
19
 
23
20
  export default Tab
package/src/tabs/tabs.tsx CHANGED
@@ -13,7 +13,7 @@ export const TabsBase = styled.divBox<TabsProps>`
13
13
  `
14
14
 
15
15
  /**
16
- * Implements Tabs navigation to switch between views.
16
+ * Implements Tabs navigation to switch between views. Implements Tabs navigation to switch between views. **Do not use as a top menu in a page!**
17
17
  */
18
18
  export const Tabs = vui<'div', TabsProps>((props, ref) => {
19
19
  const { activeTabId, showBorder = true, children, className, size, onTabClick, ...rest } = props
@@ -24,6 +24,7 @@ export type TabProps = SystemProps &
24
24
  id?: number
25
25
  title: ReactNode
26
26
  disabled?: boolean
27
+ className?: string
27
28
  onClick?: () => void
28
29
  }
29
30
 
@@ -5,16 +5,11 @@ import { vui } from '../core'
5
5
  import { Icon } from '../icon'
6
6
  import { List, ListItem } from '../list'
7
7
  import { cs, Dict } from '../utils'
8
- import { NavBarIconSize, TabNavBarProps } from './tabs.types'
8
+ import { iconSizeMapper, tabsColors } from './consts'
9
+ import { NavBarIconSize, TabNavBarProps, TabProps } from './tabs.types'
9
10
  import theme from './theme'
10
11
 
11
- const iconSizeMapper: Dict = {
12
- sm: 'xs',
13
- md: 'sm',
14
- lg: 'md',
15
- xl: 'lg',
16
- xxl: 'xl'
17
- }
12
+ const { activeBg, border, color, hover, main } = tabsColors
18
13
 
19
14
  export const TabsNavBar = vui<'div', TabNavBarProps>((props, ref) => {
20
15
  const { tabs, onNavItemClick, activeNavItem, animationDirection, showBorder, size = 'md' } = props
@@ -28,9 +23,11 @@ export const TabsNavBar = vui<'div', TabNavBarProps>((props, ref) => {
28
23
  const py = sizes[size ?? 'md'].tabsNavBar.py
29
24
  const iconMarginRight = size === 'xxl' ? '16px' : '8px'
30
25
 
26
+ const isActive = (tab: TabProps) => !tab.disabled && tab.id === activeNavItem
27
+
31
28
  return (
32
29
  <List
33
- borderBottom={showBorder ? '1px solid sandstone.79' : 'none'}
30
+ borderBottom={showBorder ? `1px solid ${border}` : 'none'}
34
31
  className={cs('vui-tabsNavBar')}
35
32
  display="flex"
36
33
  isInteractive
@@ -40,14 +37,16 @@ export const TabsNavBar = vui<'div', TabNavBarProps>((props, ref) => {
40
37
  >
41
38
  {tabs?.map?.(tab => (
42
39
  <ListItem
43
- activeBg="skyBlue.90"
40
+ activeBg={tab.disabled ? undefined : activeBg}
41
+ bg="white"
44
42
  className={`vui-tabsNavBarItem vui-tabsNavBarItem-${tab?.id}`}
45
- color="seaBlue.main"
43
+ color={isActive(tab) ? main : color}
46
44
  disabled={tab.disabled}
47
45
  display="inline-flex"
48
46
  fontSize={fontSize}
47
+ fontWeight={500}
49
48
  h={h}
50
- hoverBg="skyBlue.85"
49
+ hoverBg={tab.disabled ? undefined : hover}
51
50
  key={tab.id}
52
51
  onClick={() => onNavItemClick?.(tab.id || 0)}
53
52
  position="relative"
@@ -58,10 +57,10 @@ export const TabsNavBar = vui<'div', TabNavBarProps>((props, ref) => {
58
57
  {!!tab.icon && <Icon mr={iconMarginRight} name={tab.icon} size={iconSize} />}
59
58
  {tab.title}
60
59
  </Box>
61
- {!tab.disabled && tab.id === activeNavItem && (
60
+ {isActive(tab) && (
62
61
  <Box
63
62
  animation={animationDirection}
64
- bg="seaBlue.main"
63
+ bg={main}
65
64
  bottom="-1px"
66
65
  h={borderWidth}
67
66
  left={0}
@@ -3,6 +3,7 @@ import { grey } from './colors'
3
3
 
4
4
  const greyLight = hexToRGBA(grey[80], 0.4)
5
5
  const greyDark = hexToRGBA(grey[80], 0.6)
6
+ const modal = hexToRGBA('#000000', 0.15)
6
7
 
7
8
  export default {
8
9
  '0': `0 0 0 0 #fff`,
@@ -21,5 +22,6 @@ export default {
21
22
  l1: `-2px 0 5px 0 ${greyLight}`,
22
23
  l2: `-4px 0 12px 0 ${greyLight}`,
23
24
  l3: `-7px 0 20px 0 ${greyDark}`,
24
- l4: `-12px 0 30px 0 ${greyDark}`
25
+ l4: `-12px 0 30px 0 ${greyDark}`,
26
+ modal: `0 12px 30px 0 ${modal}`
25
27
  }
@@ -4,6 +4,7 @@ export type Animation = keyof VuiTheme['animations']
4
4
  export type Border = keyof VuiTheme['borders']
5
5
  export type Color = keyof VuiTheme['colors']
6
6
  export type Component = keyof VuiTheme['components']
7
+ export type Elevation = keyof VuiTheme['shadows']
7
8
  export type Font = keyof VuiTheme['fonts']
8
9
  export type FontSize = keyof VuiTheme['fontSizes']
9
10
  export type FontWeight = keyof VuiTheme['fontWeights']
@@ -5,6 +5,17 @@ export function cs(...classNames: any[]) {
5
5
  return classNames.filter(Boolean).join(' ')
6
6
  }
7
7
 
8
+ /** Parses HSL color code. */
9
+ export function parseHSL(color: string) {
10
+ const regexp = /hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g
11
+ const res = regexp?.exec?.(color)?.slice?.(1)
12
+ return { h: Number(res?.[0]) || 0, s: Number(res?.[1]) || 0, l: Number(res?.[2]) || 0 }
13
+ }
14
+
15
+ /** Builds RGBA string. */
16
+ export const buildRGBA = (r: number, g: number, b: number, alpha?: number) =>
17
+ alpha !== undefined ? `rgba(${r}, ${g}, ${b}, ${alpha})` : `rgb(${r}, ${g}, ${b})`
18
+
8
19
  /** Converts hex color value to rgb with optional alpha property. */
9
20
  export function hexToRGBA(hex: string, alpha?: number) {
10
21
  let hexStr = hex
@@ -21,7 +32,52 @@ export function hexToRGBA(hex: string, alpha?: number) {
21
32
  const g = parseInt(hexStr.slice(2, 4), 16)
22
33
  const b = parseInt(hexStr.slice(4, 6), 16)
23
34
 
24
- return alpha !== undefined ? `rgba(${r}, ${g}, ${b}, ${alpha})` : `rgb(${r}, ${g}, ${b})`
35
+ return buildRGBA(r, g, b, alpha)
36
+ }
37
+
38
+ /** Converts hsl color value to rgb with optional alpha property. */
39
+ export function HSLToRGBA(h: number, s: number, l: number, alpha?: number) {
40
+ s /= 100
41
+ l /= 100
42
+
43
+ const c = (1 - Math.abs(2 * l - 1)) * s,
44
+ x = c * (1 - Math.abs(((h / 60) % 2) - 1)),
45
+ m = l - c / 2
46
+
47
+ let r = 0,
48
+ g = 0,
49
+ b = 0
50
+
51
+ if (0 <= h && h < 60) {
52
+ r = c
53
+ g = x
54
+ b = 0
55
+ } else if (60 <= h && h < 120) {
56
+ r = x
57
+ g = c
58
+ b = 0
59
+ } else if (120 <= h && h < 180) {
60
+ r = 0
61
+ g = c
62
+ b = x
63
+ } else if (180 <= h && h < 240) {
64
+ r = 0
65
+ g = x
66
+ b = c
67
+ } else if (240 <= h && h < 300) {
68
+ r = x
69
+ g = 0
70
+ b = c
71
+ } else if (300 <= h && h < 360) {
72
+ r = c
73
+ g = 0
74
+ b = x
75
+ }
76
+ r = Math.round((r + m) * 255)
77
+ g = Math.round((g + m) * 255)
78
+ b = Math.round((b + m) * 255)
79
+
80
+ return buildRGBA(r, g, b, alpha)
25
81
  }
26
82
 
27
83
  /** Styling to add ellipsis for long texts. */