@moda/om 20.0.0 → 20.2.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 (61) hide show
  1. package/dist/index.cjs.js +454 -11
  2. package/dist/index.cjs.js.map +1 -1
  3. package/dist/index.esm.js +443 -12
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/src/components/LoadingItemsLavenderBlue/LoadingItems.d.ts +2 -0
  6. package/dist/src/components/LoadingItemsLavenderBlue/LoadingItems.stories.d.ts +6 -0
  7. package/dist/src/components/LoadingItemsLavenderBlue/LoadingItems1.d.ts +3 -0
  8. package/dist/src/components/LoadingItemsLavenderBlue/LoadingItems2.d.ts +3 -0
  9. package/dist/src/components/LoadingItemsLavenderBlue/LoadingItems3.d.ts +3 -0
  10. package/dist/src/components/LoadingItemsLavenderBlue/LoadingItems4.d.ts +3 -0
  11. package/dist/src/components/LoadingItemsLavenderBlue/LoadingItems5.d.ts +3 -0
  12. package/dist/src/components/LoadingItemsLavenderBlue/index.d.ts +5 -0
  13. package/dist/src/components/LoadingItemsPinkGreen/LoadingItems.d.ts +2 -0
  14. package/dist/src/components/LoadingItemsPinkGreen/LoadingItems.stories.d.ts +6 -0
  15. package/dist/src/components/LoadingItemsPinkGreen/LoadingItems1.d.ts +3 -0
  16. package/dist/src/components/LoadingItemsPinkGreen/LoadingItems2.d.ts +3 -0
  17. package/dist/src/components/LoadingItemsPinkGreen/LoadingItems3.d.ts +3 -0
  18. package/dist/src/components/LoadingItemsPinkGreen/LoadingItems4.d.ts +3 -0
  19. package/dist/src/components/LoadingItemsPinkGreen/LoadingItems5.d.ts +3 -0
  20. package/dist/src/components/LoadingItemsPinkGreen/index.d.ts +5 -0
  21. package/dist/src/components/LoadingShapesLavenderBlue/LoadingShapesLavenderBlue.d.ts +3 -0
  22. package/dist/src/components/LoadingShapesLavenderBlue/LoadingShapesLavenderBlue.stories.d.ts +6 -0
  23. package/dist/src/components/LoadingShapesLavenderBlue/index.d.ts +1 -0
  24. package/dist/src/components/LoadingShapesPinkGreen/LoadingShapesPinkGreen.d.ts +3 -0
  25. package/dist/src/components/LoadingShapesPinkGreen/LoadingShapesPinkGreen.stories.d.ts +6 -0
  26. package/dist/src/components/LoadingShapesPinkGreen/index.d.ts +1 -0
  27. package/dist/src/components/Select/Select.d.ts +1 -0
  28. package/dist/src/components/index.d.ts +4 -0
  29. package/dist/styles.css +1 -1
  30. package/package.json +1 -1
  31. package/src/components/LoadingItemsLavenderBlue/LoadingItems.stories.tsx +15 -0
  32. package/src/components/LoadingItemsLavenderBlue/LoadingItems.tsx +3 -0
  33. package/src/components/LoadingItemsLavenderBlue/LoadingItems1.tsx +28 -0
  34. package/src/components/LoadingItemsLavenderBlue/LoadingItems2.tsx +28 -0
  35. package/src/components/LoadingItemsLavenderBlue/LoadingItems3.tsx +28 -0
  36. package/src/components/LoadingItemsLavenderBlue/LoadingItems4.tsx +28 -0
  37. package/src/components/LoadingItemsLavenderBlue/LoadingItems5.tsx +28 -0
  38. package/src/components/LoadingItemsLavenderBlue/index.ts +5 -0
  39. package/src/components/LoadingItemsPinkGreen/LoadingItems.stories.tsx +15 -0
  40. package/src/components/LoadingItemsPinkGreen/LoadingItems.tsx +3 -0
  41. package/src/components/LoadingItemsPinkGreen/LoadingItems1.tsx +28 -0
  42. package/src/components/LoadingItemsPinkGreen/LoadingItems2.tsx +28 -0
  43. package/src/components/LoadingItemsPinkGreen/LoadingItems3.tsx +28 -0
  44. package/src/components/LoadingItemsPinkGreen/LoadingItems4.tsx +28 -0
  45. package/src/components/LoadingItemsPinkGreen/LoadingItems5.tsx +28 -0
  46. package/src/components/LoadingItemsPinkGreen/index.ts +5 -0
  47. package/src/components/LoadingShapesLavenderBlue/LoadingShapesLavenderBlue.scss +9 -0
  48. package/src/components/LoadingShapesLavenderBlue/LoadingShapesLavenderBlue.stories.tsx +11 -0
  49. package/src/components/LoadingShapesLavenderBlue/LoadingShapesLavenderBlue.tsx +48 -0
  50. package/src/components/LoadingShapesLavenderBlue/index.ts +1 -0
  51. package/src/components/LoadingShapesPinkGreen/LoadingShapesPinkGreen.scss +9 -0
  52. package/src/components/LoadingShapesPinkGreen/LoadingShapesPinkGreen.stories.tsx +11 -0
  53. package/src/components/LoadingShapesPinkGreen/LoadingShapesPinkGreen.tsx +42 -0
  54. package/src/components/LoadingShapesPinkGreen/index.ts +1 -0
  55. package/src/components/Select/Select.scss +2 -2
  56. package/src/components/Select/Select.stories.tsx +17 -4
  57. package/src/components/Select/Select.tsx +8 -3
  58. package/src/components/Select/SelectOption.scss +13 -0
  59. package/src/components/Select/SelectOption.tsx +17 -6
  60. package/src/components/Select/SelectOptions.tsx +4 -3
  61. package/src/components/index.ts +4 -0
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ import { LoadingItemsProps } from './LoadingItems';
3
+
4
+ export const LoadingItems4: React.FC<LoadingItemsProps> = () => (
5
+ <svg width='211' height='21' viewBox='0 0 211 21' fill='none' xmlns='http://www.w3.org/2000/svg'>
6
+ <path
7
+ fillRule='evenodd'
8
+ clipRule='evenodd'
9
+ d='M85.9155 10.414C85.9155 16.1661 81.2537 20.828 75.5015 20.828C69.7494 20.828 65.0875 16.1661 65.0875 10.414C65.0875 4.66186 69.7494 0 75.5015 0C81.2537 0 85.9155 4.66186 85.9155 10.414Z'
10
+ fill='#006F62'
11
+ />
12
+ <path
13
+ fillRule='evenodd'
14
+ clipRule='evenodd'
15
+ d='M145.023 20.828V10.0906V7.66566V7.65423C145.017 3.44429 141.874 0 138.032 0C134.192 0 131.047 3.44429 131.043 7.65423V7.66566V10.0906V20.828H145.023Z'
16
+ fill='#006F62'
17
+ />
18
+ <path
19
+ fillRule='evenodd'
20
+ clipRule='evenodd'
21
+ d='M200.468 0L190.056 20.828H210.884L200.468 0Z'
22
+ fill='#F04E98'
23
+ />
24
+ <path d='M12.5109 4.9286L22.0054 0.696629L21.9727 9.23312L12.5109 4.9286Z' fill='#006F62' />
25
+ <path d='M12.6203 4.95946L3.19629 9.27653L3.15215 0.740086L12.6203 4.95946Z' fill='#006F62' />
26
+ <rect x='3.18619' y='4.93651' width='18.8016' height='16.0635' fill='#006F62' />
27
+ </svg>
28
+ );
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ import { LoadingItemsProps } from './LoadingItems';
3
+
4
+ export const LoadingItems5: React.FC<LoadingItemsProps> = () => (
5
+ <svg width='211' height='21' viewBox='0 0 211 21' fill='none' xmlns='http://www.w3.org/2000/svg'>
6
+ <path
7
+ fillRule='evenodd'
8
+ clipRule='evenodd'
9
+ d='M85.9155 10.414C85.9155 16.1661 81.2537 20.828 75.5015 20.828C69.7494 20.828 65.0875 16.1661 65.0875 10.414C65.0875 4.66186 69.7494 0 75.5015 0C81.2537 0 85.9155 4.66186 85.9155 10.414Z'
10
+ fill='#006F62'
11
+ />
12
+ <path
13
+ fillRule='evenodd'
14
+ clipRule='evenodd'
15
+ d='M145.023 20.828V10.0906V7.66566V7.65423C145.017 3.44429 141.874 0 138.032 0C134.192 0 131.047 3.44429 131.043 7.65423V7.66566V10.0906V20.828H145.023Z'
16
+ fill='#006F62'
17
+ />
18
+ <path
19
+ fillRule='evenodd'
20
+ clipRule='evenodd'
21
+ d='M200.468 0L190.056 20.828H210.884L200.468 0Z'
22
+ fill='#006F62'
23
+ />
24
+ <path d='M12.5109 4.9286L22.0054 0.696629L21.9727 9.23312L12.5109 4.9286Z' fill='#006F62' />
25
+ <path d='M12.6203 4.95946L3.19629 9.27653L3.15215 0.740086L12.6203 4.95946Z' fill='#006F62' />
26
+ <rect x='3.18616' y='4.93651' width='18.8016' height='16.0635' fill='#006F62' />
27
+ </svg>
28
+ );
@@ -0,0 +1,5 @@
1
+ export { LoadingItems1 } from './LoadingItems1';
2
+ export { LoadingItems2 } from './LoadingItems2';
3
+ export { LoadingItems3 } from './LoadingItems3';
4
+ export { LoadingItems4 } from './LoadingItems4';
5
+ export { LoadingItems5 } from './LoadingItems5';
@@ -0,0 +1,9 @@
1
+ @use '~@moda/om';
2
+
3
+ .LoadingShapesLavenderBlue__item {
4
+ display: block;
5
+ }
6
+
7
+ .LoadingShapesLavenderBlue__item--current {
8
+ display: none;
9
+ }
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { States } from 'storybook-states';
3
+ import { LoadingShapesLavenderBlue } from './LoadingShapesLavenderBlue';
4
+
5
+ export default { title: 'Components/LoadingShapesLavenderBlue' };
6
+
7
+ export const Default = () => (
8
+ <States>
9
+ <LoadingShapesLavenderBlue />
10
+ </States>
11
+ );
@@ -0,0 +1,48 @@
1
+ import classNames from 'classnames';
2
+ import React, { useEffect } from 'react';
3
+ import { useCursor } from 'use-cursor';
4
+ import {
5
+ LoadingItemsLavenderBlue1,
6
+ LoadingItemsLavenderBlue2,
7
+ LoadingItemsLavenderBlue3,
8
+ LoadingItemsLavenderBlue4,
9
+ LoadingItemsLavenderBlue5
10
+ } from '../LoadingItemsLavenderBlue';
11
+
12
+ import './LoadingShapesLavenderBlue.scss';
13
+
14
+ const INTERVAL_MS = 250;
15
+
16
+ export const LoadingShapesLavenderBlue = () => {
17
+ const items = [
18
+ LoadingItemsLavenderBlue1,
19
+ LoadingItemsLavenderBlue2,
20
+ LoadingItemsLavenderBlue3,
21
+ LoadingItemsLavenderBlue4,
22
+ LoadingItemsLavenderBlue5
23
+ ];
24
+ const { index, handleNext } = useCursor({ max: items.length });
25
+
26
+ useEffect(() => {
27
+ const interval = setInterval(() => {
28
+ handleNext();
29
+ }, INTERVAL_MS);
30
+
31
+ return () => clearInterval(interval);
32
+ }, [handleNext]);
33
+
34
+ return (
35
+ <div>
36
+ {items.map((Item, itemIndex) => (
37
+ <div
38
+ className={classNames('LoadingShapesLavenderBlue__item', {
39
+ 'LoadingShapesLavenderBlue__item--current': itemIndex !== index
40
+ })}
41
+ key={itemIndex}
42
+ >
43
+ <Item />
44
+ </div>
45
+ ))}
46
+ </div>
47
+ );
48
+ };
@@ -0,0 +1 @@
1
+ export * from './LoadingShapesLavenderBlue';
@@ -0,0 +1,9 @@
1
+ @use '~@moda/om';
2
+
3
+ .LoadingShapesPinkGreen__item {
4
+ display: block;
5
+ }
6
+
7
+ .LoadingShapesPinkGreen__item--current {
8
+ display: none;
9
+ }
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { States } from 'storybook-states';
3
+ import { LoadingShapesPinkGreen } from './LoadingShapesPinkGreen';
4
+
5
+ export default { title: 'Components/LoadingShapesPinkGreen' };
6
+
7
+ export const Default = () => (
8
+ <States>
9
+ <LoadingShapesPinkGreen />
10
+ </States>
11
+ );
@@ -0,0 +1,42 @@
1
+ import classNames from 'classnames';
2
+ import React, { useEffect } from 'react';
3
+ import { useCursor } from 'use-cursor';
4
+ import {
5
+ LoadingItems1,
6
+ LoadingItems2,
7
+ LoadingItems3,
8
+ LoadingItems4,
9
+ LoadingItems5
10
+ } from '../LoadingItemsPinkGreen';
11
+
12
+ import './LoadingShapesPinkGreen.scss';
13
+
14
+ const INTERVAL_MS = 250;
15
+
16
+ export const LoadingShapesPinkGreen = () => {
17
+ const items = [LoadingItems1, LoadingItems2, LoadingItems3, LoadingItems4, LoadingItems5];
18
+ const { index, handleNext } = useCursor({ max: items.length });
19
+
20
+ useEffect(() => {
21
+ const interval = setInterval(() => {
22
+ handleNext();
23
+ }, INTERVAL_MS);
24
+
25
+ return () => clearInterval(interval);
26
+ }, [handleNext]);
27
+
28
+ return (
29
+ <div>
30
+ {items.map((Item, itemIndex) => (
31
+ <div
32
+ className={classNames('LoadingShapesPinkGreen__item', {
33
+ 'LoadingShapesPinkGreen__item--current': itemIndex !== index
34
+ })}
35
+ key={itemIndex}
36
+ >
37
+ <Item />
38
+ </div>
39
+ ))}
40
+ </div>
41
+ );
42
+ };
@@ -0,0 +1 @@
1
+ export * from './LoadingShapesPinkGreen';
@@ -110,9 +110,9 @@
110
110
  border-radius: 50%;
111
111
  border-width: 1px;
112
112
  display: inline-block;
113
+ margin-left: om.space(1);
114
+ margin-right: om.space(1);
113
115
  height: om.space(4);
114
- position: absolute;
115
- right: om.space(7);
116
116
  transform: translateY(25%);
117
117
  width: om.space(4);
118
118
  }
@@ -45,12 +45,25 @@ export const Default = () => (
45
45
  export const Colored = () => (
46
46
  <States<Partial<SelectProps>>>
47
47
  <Select
48
- label='Sort by'
49
- disabled
48
+ label='Color'
50
49
  colorSwatch='strawberry'
51
- options={OPTIONS}
50
+ options={[
51
+ { value: '🍓', label: 'Strawberry', colorSwatch: 'strawberry' },
52
+ {
53
+ value: 'ink',
54
+ label: 'Ink',
55
+ disabled: true,
56
+ colorSwatch: 'ink'
57
+ },
58
+ {
59
+ value: 'money-good',
60
+ label: 'Money Good',
61
+ disabled: true,
62
+ colorSwatch: 'money-good'
63
+ }
64
+ ]}
52
65
  onChange={action('onChange')}
53
- value='high'
66
+ value='🍓'
54
67
  />
55
68
  </States>
56
69
  );
@@ -11,7 +11,12 @@ import { useSelect } from './useSelect';
11
11
 
12
12
  import './Select.scss';
13
13
 
14
- export type SelectableOption = { value: string; label: string; disabled?: boolean };
14
+ export type SelectableOption = {
15
+ value: string;
16
+ label: string;
17
+ disabled?: boolean;
18
+ colorSwatch?: TextColor;
19
+ };
15
20
 
16
21
  export type SelectProps = Omit<
17
22
  React.HTMLAttributes<HTMLDivElement>,
@@ -131,8 +136,6 @@ export const Select: React.FC<SelectProps> = ({
131
136
  hasValue={focused != null || selected != null}
132
137
  />
133
138
 
134
- {(focused ?? selected)?.label}
135
-
136
139
  {colorSwatch && (
137
140
  <div
138
141
  className='Select__selected-color'
@@ -140,6 +143,8 @@ export const Select: React.FC<SelectProps> = ({
140
143
  />
141
144
  )}
142
145
 
146
+ {(focused ?? selected)?.label}
147
+
143
148
  <span
144
149
  className={classNames('Select__icon', { 'Select__icon--shifted': shiftIconLeftwards })}
145
150
  >
@@ -26,4 +26,17 @@
26
26
  background-color: om.color('snow');
27
27
  }
28
28
  }
29
+
30
+ &__color-swatch {
31
+ border-color: om.color(ink);
32
+ border-style: solid;
33
+ border-radius: 50%;
34
+ border-width: 1px;
35
+ display: inline-block;
36
+ margin-left: om.space(1);
37
+ margin-right: om.space(1);
38
+ height: om.space(4);
39
+ transform: translateY(25%);
40
+ width: om.space(4);
41
+ }
29
42
  }
@@ -1,7 +1,9 @@
1
1
  import React, { useCallback, useRef, useEffect } from 'react';
2
2
  import classNames from 'classnames';
3
3
  import scrollIntoView from 'scroll-into-view-if-needed';
4
+ import { colors } from '@moda/tokens';
4
5
  import { SelectableOption } from './Select';
6
+
5
7
  import './SelectOption.scss';
6
8
 
7
9
  export type SelectOptionProps = Omit<React.HTMLAttributes<HTMLLIElement>, 'onClick'> & {
@@ -16,6 +18,7 @@ export const SelectOption: React.FC<SelectOptionProps> = ({
16
18
  active,
17
19
  selected,
18
20
  option,
21
+ option: { disabled, colorSwatch, label },
19
22
  onClick,
20
23
  className,
21
24
  dataTestId
@@ -25,9 +28,10 @@ export const SelectOption: React.FC<SelectOptionProps> = ({
25
28
  const handleClick = useCallback(
26
29
  (event: React.MouseEvent<HTMLLIElement>) => {
27
30
  event.preventDefault();
28
- if (!option.disabled) onClick(option);
31
+
32
+ if (!disabled) onClick(option);
29
33
  },
30
- [onClick, option]
34
+ [disabled, onClick, option]
31
35
  );
32
36
 
33
37
  useEffect(() => {
@@ -42,15 +46,22 @@ export const SelectOption: React.FC<SelectOptionProps> = ({
42
46
  className={classNames('SelectOption', className, {
43
47
  'SelectOption--active': active,
44
48
  'SelectOption--selected': selected,
45
- 'SelectOption--disabled': option.disabled
49
+ 'SelectOption--disabled': disabled
46
50
  })}
47
51
  onClick={handleClick}
48
- data-test-id={dataTestId ? `${dataTestId}--${option.label.replace(' ', '-')}` : undefined}
49
- aria-label={option.label}
52
+ data-test-id={dataTestId ? `${dataTestId}--${label.replace(' ', '-')}` : undefined}
53
+ aria-label={label}
50
54
  aria-selected={selected}
51
55
  role='option'
52
56
  >
53
- {option.label}
57
+ {colorSwatch && (
58
+ <div
59
+ className='SelectOption__color-swatch'
60
+ style={{ backgroundColor: colors.all[colorSwatch] }}
61
+ />
62
+ )}
63
+
64
+ {label}
54
65
  </li>
55
66
  );
56
67
  };
@@ -6,6 +6,7 @@ import { Text } from '../Text';
6
6
  import { SearchInput } from '../SearchInput';
7
7
  import { SelectOption } from './SelectOption';
8
8
  import { SelectableOption } from './Select';
9
+
9
10
  import './SelectOptions.scss';
10
11
 
11
12
  export type SelectOptionsProps = Omit<
@@ -70,6 +71,7 @@ export const SelectOptions: React.FC<SelectOptionsProps> = ({
70
71
  onClear={() => setSearchPhrase('')}
71
72
  />
72
73
  )}
74
+
73
75
  <ul
74
76
  className='SelectOptions__list'
75
77
  tabIndex={-1}
@@ -88,11 +90,10 @@ export const SelectOptions: React.FC<SelectOptionsProps> = ({
88
90
  active={activeOption?.value === option.value}
89
91
  selected={selectedOption?.value === option.value}
90
92
  onClick={onSelect}
91
- >
92
- {option.label}
93
- </SelectOption>
93
+ />
94
94
  ))}
95
95
  </ul>
96
+
96
97
  {options.length === 0 && (
97
98
  <Text className='SelectOptions__none' color='cement'>
98
99
  Nothing found
@@ -19,6 +19,10 @@ export * from './Label';
19
19
  export * from './Loading';
20
20
  export * from './LoadingBalls';
21
21
  export * from './LoadingShapes';
22
+ export * from './LoadingShapesPinkGreen';
23
+ export * from './LoadingItemsPinkGreen';
24
+ export * from './LoadingShapesLavenderBlue';
25
+ export * from './LoadingItemsLavenderBlue';
22
26
  export * from './Modal';
23
27
  export * from './ModalOverlay';
24
28
  export * from './NavigationPreventer';