@xqmsg/ui-core 0.16.7 → 0.17.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.
Files changed (116) hide show
  1. package/dist/0ec7ec81c9033f9a.svg +9 -0
  2. package/dist/35c8475f2bf403f9.svg +9 -0
  3. package/dist/components/icons/chevron/down/index.d.ts +8 -0
  4. package/dist/components/icons/chevron/right/index.d.ts +8 -0
  5. package/dist/components/icons/clock/index.d.ts +8 -0
  6. package/dist/components/icons/close/index.d.ts +9 -0
  7. package/dist/components/icons/dropdown/index.d.ts +8 -0
  8. package/dist/components/icons/error/index.d.ts +8 -0
  9. package/dist/components/icons/file/fill/index.d.ts +8 -0
  10. package/dist/components/icons/file/outline/index.d.ts +8 -0
  11. package/dist/components/icons/folder/add/fill/index.d.ts +8 -0
  12. package/dist/components/icons/folder/add/outline/index.d.ts +8 -0
  13. package/dist/components/icons/folder/fill/index.d.ts +8 -0
  14. package/dist/components/icons/folder/outline/index.d.ts +8 -0
  15. package/dist/components/icons/google/drive/index.d.ts +8 -0
  16. package/dist/components/icons/google/index.d.ts +8 -0
  17. package/dist/components/icons/group/index.d.ts +8 -0
  18. package/dist/components/icons/home/index.d.ts +8 -0
  19. package/dist/components/icons/image/index.d.ts +8 -0
  20. package/dist/components/icons/index.d.ts +28 -0
  21. package/dist/components/icons/link/index.d.ts +8 -0
  22. package/dist/components/icons/menu/index.d.ts +8 -0
  23. package/dist/components/icons/microsoft/index.d.ts +8 -0
  24. package/dist/components/icons/microsoft/onedrive/index.d.ts +8 -0
  25. package/dist/components/icons/neutral/index.d.ts +8 -0
  26. package/dist/components/icons/positive/index.d.ts +8 -0
  27. package/dist/components/icons/search/index.d.ts +8 -0
  28. package/dist/components/icons/settings/index.d.ts +8 -0
  29. package/dist/components/icons/table/fill/index.d.ts +8 -0
  30. package/dist/components/icons/table/outline/index.d.ts +8 -0
  31. package/dist/components/icons/trash/index.d.ts +8 -0
  32. package/dist/components/icons/warning/index.d.ts +8 -0
  33. package/dist/components/navigation/NavigationMenu.stories.d.ts +5 -0
  34. package/dist/components/navigation/components/header/index.d.ts +8 -0
  35. package/dist/components/navigation/components/items/index.d.ts +14 -0
  36. package/dist/components/navigation/index.d.ts +14 -0
  37. package/dist/index.d.ts +2 -0
  38. package/dist/ui-core.cjs.development.js +994 -99
  39. package/dist/ui-core.cjs.development.js.map +1 -1
  40. package/dist/ui-core.cjs.production.min.js +1 -1
  41. package/dist/ui-core.cjs.production.min.js.map +1 -1
  42. package/dist/ui-core.esm.js +969 -102
  43. package/dist/ui-core.esm.js.map +1 -1
  44. package/package.json +1 -1
  45. package/src/components/banner/index.tsx +9 -9
  46. package/src/components/button/google/index.tsx +7 -2
  47. package/src/components/button/microsoft/index.tsx +7 -2
  48. package/src/components/icons/chevron/down/chevron-down.svg +3 -0
  49. package/src/components/icons/chevron/down/index.tsx +14 -0
  50. package/src/components/icons/chevron/right/chevron-right.svg +3 -0
  51. package/src/components/icons/chevron/right/index.tsx +13 -0
  52. package/src/components/icons/clock/clock.svg +3 -0
  53. package/src/components/icons/clock/index.tsx +13 -0
  54. package/src/components/{input/components/token/assets/svg → icons/close}/close.svg +0 -0
  55. package/src/components/icons/close/index.tsx +14 -0
  56. package/src/components/{input/StackedSelect/assets/svg/subtract.svg → icons/dropdown/dropdown.svg} +0 -0
  57. package/src/components/icons/dropdown/index.tsx +13 -0
  58. package/src/components/{banner/assets/svg → icons/error}/error.svg +0 -0
  59. package/src/components/icons/error/index.tsx +13 -0
  60. package/src/components/icons/file/fill/file-fill.svg +4 -0
  61. package/src/components/icons/file/fill/index.tsx +13 -0
  62. package/src/components/icons/file/outline/file-outline.svg +3 -0
  63. package/src/components/icons/file/outline/index.tsx +13 -0
  64. package/src/components/icons/folder/add/fill/folder-add-fill.svg +3 -0
  65. package/src/components/icons/folder/add/fill/index.tsx +13 -0
  66. package/src/components/icons/folder/add/outline/folder-add-outline.svg +3 -0
  67. package/src/components/icons/folder/add/outline/index.tsx +15 -0
  68. package/src/components/icons/folder/fill/folder-fill.svg +4 -0
  69. package/src/components/icons/folder/fill/index.tsx +13 -0
  70. package/src/components/icons/folder/outline/folder-outline.svg +3 -0
  71. package/src/components/icons/folder/outline/index.tsx +13 -0
  72. package/src/components/icons/google/drive/google-drive.svg +9 -0
  73. package/src/components/icons/google/drive/index.tsx +13 -0
  74. package/src/components/{button/google/assets/GoogleLogo.svg → icons/google/google.svg} +0 -0
  75. package/src/components/icons/google/index.tsx +13 -0
  76. package/src/components/icons/group/group.svg +3 -0
  77. package/src/components/icons/group/index.tsx +13 -0
  78. package/src/components/icons/home/home.svg +3 -0
  79. package/src/components/icons/home/index.tsx +13 -0
  80. package/src/components/icons/image/image.svg +3 -0
  81. package/src/components/icons/image/index.tsx +13 -0
  82. package/src/components/icons/index.tsx +57 -0
  83. package/src/components/icons/link/index.tsx +13 -0
  84. package/src/components/icons/link/link.svg +4 -0
  85. package/src/components/icons/menu/index.tsx +13 -0
  86. package/src/components/icons/menu/menu.svg +3 -0
  87. package/src/components/icons/microsoft/index.tsx +13 -0
  88. package/src/components/{button/microsoft/assets/MicrosoftLogo.svg → icons/microsoft/microsoft.svg} +0 -0
  89. package/src/components/icons/microsoft/onedrive/index.tsx +15 -0
  90. package/src/components/icons/microsoft/onedrive/microsoft-onedrive.svg +9 -0
  91. package/src/components/icons/neutral/index.tsx +13 -0
  92. package/src/components/{banner/assets/svg → icons/neutral}/neutral.svg +0 -0
  93. package/src/components/icons/positive/index.tsx +13 -0
  94. package/src/components/{banner/assets/svg → icons/positive}/positive.svg +0 -0
  95. package/src/components/icons/search/index.tsx +13 -0
  96. package/src/components/icons/search/search.svg +3 -0
  97. package/src/components/icons/settings/index.tsx +14 -0
  98. package/src/components/icons/settings/settings.svg +6 -0
  99. package/src/components/icons/table/fill/index.tsx +13 -0
  100. package/src/components/icons/table/fill/table-fill.svg +3 -0
  101. package/src/components/icons/table/outline/index.tsx +13 -0
  102. package/src/components/icons/table/outline/table-outline.svg +3 -0
  103. package/src/components/icons/trash/index.tsx +13 -0
  104. package/src/components/icons/trash/trash.svg +3 -0
  105. package/src/components/icons/warning/index.tsx +13 -0
  106. package/src/components/{banner/assets/svg → icons/warning}/warning.svg +0 -0
  107. package/src/components/input/Input.stories.tsx +2 -56
  108. package/src/components/input/StackedMultiSelect/index.tsx +5 -7
  109. package/src/components/input/StackedPilledInput/index.tsx +20 -8
  110. package/src/components/input/StackedSelect/index.tsx +3 -9
  111. package/src/components/input/components/token/index.tsx +2 -7
  112. package/src/components/navigation/NavigationMenu.stories.tsx +85 -0
  113. package/src/components/navigation/components/header/index.tsx +26 -0
  114. package/src/components/navigation/components/items/index.tsx +62 -0
  115. package/src/components/navigation/index.tsx +59 -0
  116. package/src/index.tsx +6 -0
@@ -64,11 +64,10 @@ const StackedPilledInput = React.forwardRef<
64
64
 
65
65
  const onHandleKeyDown = (e: React.KeyboardEvent) => {
66
66
  if (
67
- (e.key === ' ' ||
68
- e.key === 'Enter' ||
69
- e.key === ',' ||
70
- e.key === 'Tab') &&
71
- localValue.length
67
+ e.key === ' ' ||
68
+ e.key === 'Enter' ||
69
+ e.key === ',' ||
70
+ e.key === 'Tab'
72
71
  ) {
73
72
  if (
74
73
  e.key === 'Enter' &&
@@ -221,7 +220,13 @@ const StackedPilledInput = React.forwardRef<
221
220
  setIsFocussed(false);
222
221
  };
223
222
 
224
- useOutsideClick({ ref: inputWrapperRef, handler: onBlur });
223
+ useOutsideClick({
224
+ ref: inputWrapperRef,
225
+ handler: () => {
226
+ onBlur();
227
+ console.log('hi');
228
+ },
229
+ });
225
230
 
226
231
  return (
227
232
  <Box position="relative">
@@ -234,6 +239,10 @@ const StackedPilledInput = React.forwardRef<
234
239
  alignItems="center"
235
240
  justifyContent="space-between"
236
241
  onClick={() => {
242
+ if (isFocussed && tokenIndex !== null) {
243
+ setTokenIndex(null);
244
+ }
245
+
237
246
  if (!disabled) {
238
247
  inputRef.current?.focus();
239
248
  }
@@ -270,7 +279,7 @@ const StackedPilledInput = React.forwardRef<
270
279
  : 'none'
271
280
  }
272
281
  borderRadius="full"
273
- onClick={() => isFocussed && setTokenIndex(index)}
282
+ onClick={() => setTokenIndex(index)}
274
283
  width="100%"
275
284
  id={`${name}_token_${index}`}
276
285
  >
@@ -313,7 +322,10 @@ const StackedPilledInput = React.forwardRef<
313
322
  }
314
323
  ref={inputRef}
315
324
  onFocus={() => setIsFocussed(true)}
316
- onBlur={() => setIsFocussed(false)}
325
+ onBlur={() => {
326
+ setIsFocussed(false);
327
+ return setTokenIndex(null);
328
+ }}
317
329
  />
318
330
  </Flex>
319
331
  </Flex>
@@ -5,21 +5,15 @@ import React, {
5
5
  useMemo,
6
6
  useState,
7
7
  } from 'react';
8
- import {
9
- Box,
10
- Image,
11
- Input,
12
- InputGroup,
13
- InputRightElement,
14
- } from '@chakra-ui/react';
8
+ import { Box, Input, InputGroup, InputRightElement } from '@chakra-ui/react';
15
9
  import { FieldOptions } from '../InputTypes';
16
10
  import { StackedInputProps } from '../StackedInput/StackedInput';
17
11
  import colors from '../../../theme/foundations/colors';
18
12
  import { UseFormSetValue, FieldValues, Control } from 'react-hook-form';
19
- import SubtractIcon from './assets/svg/subtract.svg';
20
13
  import { Dropdown } from '../components/dropdown';
21
14
  import useDidMountEffect from '../../../hooks/useDidMountEffect';
22
15
  import { useOnClickOutside } from '../../../hooks/useOnOutsideClick';
16
+ import { Dropdown as DropdownIcon } from '../../icons/dropdown';
23
17
  import { debounce } from 'lodash';
24
18
 
25
19
  export interface StackedSelectProps extends StackedInputProps {
@@ -216,7 +210,7 @@ const StackedSelect = React.forwardRef<HTMLInputElement, StackedSelectProps>(
216
210
  cursor={disabled ? 'not-allowed' : 'pointer'}
217
211
  onClick={() => !disabled && setIsFocussed(!isFocussed)}
218
212
  >
219
- <Image src={SubtractIcon} alt="subtract" boxSize="16px" />
213
+ <DropdownIcon boxSize="16px" />
220
214
  </InputRightElement>
221
215
  </InputGroup>
222
216
  {isFocussed && (
@@ -1,8 +1,8 @@
1
1
  import { Flex, Text } from '@chakra-ui/react';
2
2
  import { truncate } from 'lodash';
3
3
  import React from 'react';
4
+ import { Close } from 'src/components/icons/close';
4
5
  import colors from '../../../../../src/theme/foundations/colors';
5
- import { ReactComponent as CloseIcon } from './assets/svg/close.svg';
6
6
 
7
7
  export interface TokenProps {
8
8
  label: any;
@@ -36,12 +36,7 @@ const Token: React.FC<TokenProps> = ({ label, onDelete }) => {
36
36
  omission: '...',
37
37
  })}
38
38
  </Text>
39
- <CloseIcon
40
- width="11px"
41
- height="11px"
42
- onClick={onDelete}
43
- cursor="pointer"
44
- />
39
+ <Close boxSize="11px" onClick={onDelete} />
45
40
  </Flex>
46
41
  );
47
42
  };
@@ -0,0 +1,85 @@
1
+ import React from 'react';
2
+ import { Meta, Story } from '@storybook/react';
3
+ import { NavigationMenu, NavigationMenuProps } from '.';
4
+ import {
5
+ Clock,
6
+ GoogleDrive,
7
+ Group,
8
+ Home,
9
+ Link,
10
+ MicrosoftOneDrive,
11
+ Settings,
12
+ Trash,
13
+ } from '../icons';
14
+ import { Box } from '@chakra-ui/react';
15
+
16
+ const meta: Meta<NavigationMenuProps> = {
17
+ title: 'Navigation Menu example',
18
+ component: NavigationMenu,
19
+ argTypes: {},
20
+ parameters: {
21
+ controls: { expanded: true },
22
+ },
23
+ };
24
+ export default meta;
25
+ const Template: Story<NavigationMenuProps> = args => (
26
+ <Box bg="white" height="100%">
27
+ <NavigationMenu {...args} />
28
+ </Box>
29
+ );
30
+
31
+ export const Default = Template.bind({});
32
+ Default.args = {
33
+ defaultSelectedMenuItem: 'Settings',
34
+ groupedMenuItems: [
35
+ {
36
+ sortValue: 0,
37
+ groupMenuItems: [
38
+ {
39
+ leftIcon: <Settings boxSize="18px" />,
40
+ label: 'Settings',
41
+ },
42
+ {
43
+ leftIcon: <Settings boxSize="18px" />,
44
+ label: 'Services',
45
+ rightIcon: <Link boxSize="18px" />,
46
+ },
47
+ ],
48
+ },
49
+ {
50
+ sortValue: 1,
51
+ groupHeader: 'Files',
52
+ groupMenuItems: [
53
+ {
54
+ leftIcon: <Home boxSize="18px" />,
55
+ label: 'All Files',
56
+ },
57
+ {
58
+ leftIcon: <Clock boxSize="18px" />,
59
+ label: 'Recent',
60
+ },
61
+ {
62
+ leftIcon: <Group boxSize="18px" />,
63
+ label: 'Shared With Me',
64
+ },
65
+ {
66
+ leftIcon: <Trash boxSize="18px" />,
67
+ label: 'Deleted',
68
+ },
69
+ ],
70
+ },
71
+ {
72
+ sortValue: 2,
73
+ groupMenuItems: [
74
+ {
75
+ leftIcon: <MicrosoftOneDrive boxSize="18px" />,
76
+ label: 'Microsoft One Drive',
77
+ },
78
+ {
79
+ leftIcon: <GoogleDrive boxSize="18px" />,
80
+ label: 'Google Drive',
81
+ },
82
+ ],
83
+ },
84
+ ],
85
+ };
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import { Flex } from '@chakra-ui/react';
3
+ import colors from '../../../../theme/foundations/colors';
4
+
5
+ export interface NavigationMenuHeaderProps {
6
+ label: string;
7
+ }
8
+
9
+ /**
10
+ * A functional React component utilized to render the `NavigationMenuHeader` component
11
+ */
12
+ export const NavigationMenuHeader: React.FC<NavigationMenuHeaderProps> = ({
13
+ label,
14
+ }) => {
15
+ return (
16
+ <Flex
17
+ alignItems="center"
18
+ height="26px"
19
+ width="204px"
20
+ fontSize="12px"
21
+ color={colors.label.secondary.light}
22
+ >
23
+ {label}
24
+ </Flex>
25
+ );
26
+ };
@@ -0,0 +1,62 @@
1
+ import React from 'react';
2
+ import { Box, Flex, Link } from '@chakra-ui/react';
3
+ import colors from 'src/theme/foundations/colors';
4
+
5
+ export interface NavigationMenuItemProps {
6
+ leftIcon: JSX.Element;
7
+ label: string;
8
+ href?: string;
9
+ isSelected: boolean;
10
+ onClick: () => void;
11
+ rightIcon?: JSX.Element;
12
+ isExternal?: boolean;
13
+ }
14
+
15
+ /**
16
+ * A functional React component utilized to render the `NavigationMenuItem` component
17
+ */
18
+ export const NavigationMenuItem: React.FC<NavigationMenuItemProps> = ({
19
+ label,
20
+ leftIcon,
21
+ href,
22
+ rightIcon,
23
+ isExternal,
24
+ isSelected,
25
+ onClick,
26
+ }) => {
27
+ let additionalProps = {};
28
+
29
+ if (isExternal) {
30
+ additionalProps = {
31
+ ...additionalProps,
32
+ referrerPolicy: 'no-referrer',
33
+ target: '_blank',
34
+ };
35
+ }
36
+
37
+ return (
38
+ <Link
39
+ href={href}
40
+ {...additionalProps}
41
+ onClick={onClick}
42
+ display="flex"
43
+ alignItems="center"
44
+ justifyContent="space-between"
45
+ py="5px"
46
+ px="4px"
47
+ height="26px"
48
+ width="204px"
49
+ color={colors.label.primary}
50
+ bg={isSelected ? colors.fill.light.tertiary : 'transparent'}
51
+ borderRadius="4px"
52
+ fontSize="13px"
53
+ textDecoration="none"
54
+ _hover={{ textDecoration: 'none' }}
55
+ >
56
+ <Flex alignItems="center">
57
+ <Box mr="4px">{leftIcon}</Box> {label}
58
+ </Flex>
59
+ {rightIcon}
60
+ </Link>
61
+ );
62
+ };
@@ -0,0 +1,59 @@
1
+ import React, { useMemo, useState } from 'react';
2
+ import { Box } from '@chakra-ui/react';
3
+ import { NavigationMenuHeader } from './components/header';
4
+ import {
5
+ NavigationMenuItem,
6
+ NavigationMenuItemProps,
7
+ } from './components/items';
8
+
9
+ export interface NavigationMenuProps {
10
+ groupedMenuItems: {
11
+ groupSortValue: number;
12
+ groupHeader?: string;
13
+ groupMenuItems: NavigationMenuItemProps[];
14
+ }[];
15
+ defaultSelectedMenuItem?: string;
16
+ }
17
+
18
+ /**
19
+ * A functional React component utilized to render the `NavigationMenu` component
20
+ */
21
+ export const NavigationMenu: React.FC<NavigationMenuProps> = ({
22
+ groupedMenuItems,
23
+ defaultSelectedMenuItem = '',
24
+ }) => {
25
+ const sortedGroupedMenuItems = useMemo(
26
+ () => groupedMenuItems?.sort((a, b) => a.groupSortValue - b.groupSortValue),
27
+ [groupedMenuItems]
28
+ );
29
+
30
+ const [selectedMenuItem, setSelectedMenuItem] = useState<string>(
31
+ defaultSelectedMenuItem
32
+ );
33
+
34
+ return (
35
+ <Box
36
+ bg="#7474800D"
37
+ py="32px"
38
+ px="8px"
39
+ height="100%"
40
+ overflowY="auto"
41
+ width="220px"
42
+ >
43
+ {sortedGroupedMenuItems?.map(menuItemGroup => (
44
+ <Box>
45
+ {menuItemGroup.groupHeader && (
46
+ <NavigationMenuHeader label={menuItemGroup.groupHeader} />
47
+ )}
48
+ {menuItemGroup.groupMenuItems.map(item => (
49
+ <NavigationMenuItem
50
+ {...item}
51
+ isSelected={selectedMenuItem === item.label}
52
+ onClick={() => setSelectedMenuItem(item.label)}
53
+ />
54
+ ))}
55
+ </Box>
56
+ ))}
57
+ </Box>
58
+ );
59
+ };
package/src/index.tsx CHANGED
@@ -24,6 +24,9 @@ export * from './components/form';
24
24
  // Form Section
25
25
  export * from './components/form/section';
26
26
 
27
+ // Icons
28
+ export * from './components/icons';
29
+
27
30
  // Input
28
31
  export * from './components/input';
29
32
 
@@ -33,6 +36,9 @@ export * from './components/layout';
33
36
  // Loading
34
37
  export * from './components/loading';
35
38
 
39
+ // Navigation Menu
40
+ export * from './components/navigation';
41
+
36
42
  // Table
37
43
  export * from './components/table';
38
44