@lumx/react 3.1.5 → 3.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 (143) hide show
  1. package/_internal/types.d.ts +16 -5
  2. package/index.d.ts +45 -4
  3. package/index.js +609 -411
  4. package/index.js.map +1 -1
  5. package/package.json +3 -3
  6. package/src/components/alert-dialog/AlertDialog.stories.tsx +96 -165
  7. package/src/components/alert-dialog/AlertDialog.test.tsx +15 -23
  8. package/src/components/avatar/Avatar.stories.tsx +91 -62
  9. package/src/components/avatar/Avatar.test.tsx +9 -24
  10. package/src/components/badge/Badge.stories.tsx +63 -38
  11. package/src/components/button/Button.stories.tsx +147 -139
  12. package/src/components/button/IconButton.stories.tsx +45 -0
  13. package/src/components/checkbox/Checkbox.stories.tsx +37 -30
  14. package/src/components/chip/Chip.stories.tsx +77 -15
  15. package/src/components/comment-block/CommentBlock.stories.tsx +90 -25
  16. package/src/components/comment-block/CommentBlock.test.tsx +12 -17
  17. package/src/components/date-picker/DatePickerField.stories.tsx +52 -83
  18. package/src/components/dialog/Dialog.stories.tsx +131 -293
  19. package/src/components/dialog/Dialog.test.tsx +0 -32
  20. package/src/components/dropdown/Dropdown.stories.tsx +1 -186
  21. package/src/components/flag/Flag.stories.tsx +33 -18
  22. package/src/components/flag/Flag.test.tsx +1 -8
  23. package/src/components/flex-box/FlexBox.stories.tsx +151 -238
  24. package/src/components/flex-box/FlexBox.test.tsx +9 -49
  25. package/src/components/generic-block/GenericBlock.stories.jsx +1 -1
  26. package/src/components/grid-column/GridColumn.stories.tsx +46 -0
  27. package/src/components/heading/Heading.stories.tsx +57 -95
  28. package/src/components/icon/Icon.stories.tsx +67 -70
  29. package/src/components/image-block/ImageBlock.stories.tsx +103 -47
  30. package/src/components/image-block/ImageBlock.test.tsx +12 -17
  31. package/src/components/inline-list/InlineList.stories.tsx +45 -29
  32. package/src/components/input-helper/InputHelper.stories.tsx +31 -25
  33. package/src/components/input-label/InputLabel.stories.tsx +33 -10
  34. package/src/components/lightbox/Lightbox.stories.tsx +39 -77
  35. package/src/components/lightbox/Lightbox.test.tsx +12 -17
  36. package/src/components/link/Link.stories.tsx +98 -128
  37. package/src/components/link-preview/LinkPreview.stories.tsx +48 -75
  38. package/src/components/list/List.stories.tsx +59 -84
  39. package/src/components/list/List.test.tsx +8 -17
  40. package/src/components/list/ListDivider.stories.tsx +9 -4
  41. package/src/components/list/ListDivider.test.tsx +12 -17
  42. package/src/components/list/ListItem.stories.tsx +97 -59
  43. package/src/components/list/ListItem.test.tsx +12 -17
  44. package/src/components/list/ListSubheader.stories.tsx +8 -5
  45. package/src/components/list/ListSubheader.test.tsx +12 -18
  46. package/src/components/message/Message.stories.tsx +51 -22
  47. package/src/components/mosaic/Mosaic.stories.tsx +78 -74
  48. package/src/components/mosaic/Mosaic.test.tsx +0 -31
  49. package/src/components/navigation/Navigation.stories.tsx +67 -0
  50. package/src/components/navigation/Navigation.test.tsx +58 -0
  51. package/src/components/navigation/Navigation.tsx +62 -0
  52. package/src/components/navigation/NavigationItem.test.tsx +37 -0
  53. package/src/components/navigation/NavigationItem.tsx +89 -0
  54. package/src/components/navigation/NavigationSection.test.tsx +126 -0
  55. package/src/components/navigation/NavigationSection.tsx +109 -0
  56. package/src/components/navigation/context.tsx +6 -0
  57. package/src/components/navigation/index.ts +1 -0
  58. package/src/components/notification/Notifications.stories.tsx +52 -47
  59. package/src/components/popover/Popover.stories.tsx +68 -201
  60. package/src/components/popover-dialog/PopoverDialog.stories.tsx +26 -65
  61. package/src/components/post-block/PostBlock.test.tsx +12 -17
  62. package/src/components/progress/ProgressCircular.stories.tsx +24 -12
  63. package/src/components/progress/ProgressLinear.stories.tsx +6 -2
  64. package/src/components/radio-button/RadioButton.stories.tsx +35 -24
  65. package/src/components/select/Select.stories.tsx +19 -23
  66. package/src/components/skeleton/SkeletonCircle.stories.tsx +37 -21
  67. package/src/components/skeleton/SkeletonCircle.test.tsx +12 -17
  68. package/src/components/skeleton/SkeletonRectangle.stories.tsx +74 -99
  69. package/src/components/skeleton/SkeletonRectangle.test.tsx +12 -17
  70. package/src/components/skeleton/SkeletonTypography.test.tsx +12 -17
  71. package/src/components/slider/Slider.stories.tsx +41 -25
  72. package/src/components/slider/Slider.test.tsx +12 -18
  73. package/src/components/slideshow/Slideshow.stories.tsx +31 -61
  74. package/src/components/slideshow/Slideshow.test.tsx +15 -23
  75. package/src/components/slideshow/SlideshowControls.stories.tsx +4 -6
  76. package/src/components/switch/Switch.stories.tsx +35 -32
  77. package/src/components/table/Table.test.tsx +12 -17
  78. package/src/components/tabs/Tabs.stories.tsx +4 -3
  79. package/src/components/text/Text.stories.tsx +130 -0
  80. package/src/components/text-field/TextField.stories.tsx +114 -148
  81. package/src/components/thumbnail/Thumbnail.stories.tsx +106 -255
  82. package/src/components/thumbnail/Thumbnail.test.tsx +12 -35
  83. package/src/components/tooltip/Tooltip.stories.tsx +51 -136
  84. package/src/components/user-block/UserBlock.stories.tsx +67 -56
  85. package/src/components/user-block/UserBlock.test.tsx +1 -5
  86. package/src/index.ts +1 -0
  87. package/src/stories/controls/color.ts +6 -0
  88. package/src/stories/controls/element.ts +6 -0
  89. package/src/stories/controls/focusPoint.ts +1 -0
  90. package/src/stories/controls/icons.ts +6 -0
  91. package/src/stories/{knobs → controls}/image.ts +6 -16
  92. package/src/stories/controls/selectArgType.ts +4 -0
  93. package/src/stories/controls/theme.ts +3 -0
  94. package/src/stories/controls/typography.ts +5 -0
  95. package/src/stories/controls/withUndefined.ts +1 -0
  96. package/src/stories/decorators/withChromaticForceScreenSize.tsx +8 -0
  97. package/src/stories/decorators/withCombinations.tsx +99 -0
  98. package/src/stories/decorators/withNestedProps.tsx +23 -0
  99. package/src/stories/{withResizableBox.tsx → decorators/withResizableBox.tsx} +6 -10
  100. package/src/stories/decorators/withValueOnChange.tsx +18 -0
  101. package/src/stories/decorators/withWrapper.tsx +19 -0
  102. package/src/stories/utils/CustomLink.tsx +8 -2
  103. package/src/stories/{knobs → utils}/lorem.ts +9 -9
  104. package/src/testing/utils/commonTestsSuiteRTL.ts +2 -3
  105. package/src/testing/utils/index.ts +0 -2
  106. package/src/untypped-modules.d.ts +0 -2
  107. package/src/utils/MaterialThemeSwitcher/MaterialThemeSwitcher.tsx +1 -1
  108. package/src/utils/ThemeContext.ts +4 -0
  109. package/src/utils/forwardRefPolymorphic.ts +9 -0
  110. package/src/utils/type.ts +28 -4
  111. package/src/components/alert-dialog/__snapshots__/AlertDialog.test.tsx.snap +0 -558
  112. package/src/components/avatar/__snapshots__/Avatar.test.tsx.snap +0 -681
  113. package/src/components/comment-block/__snapshots__/CommentBlock.test.tsx.snap +0 -92
  114. package/src/components/dialog/__snapshots__/Dialog.test.tsx.snap +0 -1133
  115. package/src/components/expansion-panel/ExpansionPanel.stories.tsx +0 -65
  116. package/src/components/flag/__snapshots__/Flag.test.tsx.snap +0 -133
  117. package/src/components/flex-box/__snapshots__/FlexBox.test.tsx.snap +0 -492
  118. package/src/components/grid-column/GridColumn.stories.jsx +0 -56
  119. package/src/components/image-block/__snapshots__/ImageBlock.test.tsx.snap +0 -64
  120. package/src/components/lightbox/__snapshots__/Lightbox.test.tsx.snap +0 -194
  121. package/src/components/list/__snapshots__/List.test.tsx.snap +0 -360
  122. package/src/components/list/__snapshots__/ListDivider.test.tsx.snap +0 -7
  123. package/src/components/list/__snapshots__/ListItem.test.tsx.snap +0 -160
  124. package/src/components/list/__snapshots__/ListSubheader.test.tsx.snap +0 -9
  125. package/src/components/mosaic/__snapshots__/Mosaic.test.tsx.snap +0 -357
  126. package/src/components/post-block/__snapshots__/PostBlock.test.tsx.snap +0 -139
  127. package/src/components/skeleton/__snapshots__/SkeletonCircle.test.tsx.snap +0 -54
  128. package/src/components/skeleton/__snapshots__/SkeletonRectangle.test.tsx.snap +0 -177
  129. package/src/components/skeleton/__snapshots__/SkeletonTypography.test.tsx.snap +0 -174
  130. package/src/components/slider/__snapshots__/Slider.test.tsx.snap +0 -122
  131. package/src/components/slideshow/__snapshots__/Slideshow.test.tsx.snap +0 -157
  132. package/src/components/table/__snapshots__/Table.test.tsx.snap +0 -263
  133. package/src/components/text/Text.stories.jsx +0 -75
  134. package/src/components/thumbnail/__snapshots__/Thumbnail.test.tsx.snap +0 -130
  135. package/src/components/user-block/__snapshots__/UserBlock.test.tsx.snap +0 -362
  136. package/src/stories/chromaticForceScreenSize.tsx +0 -7
  137. package/src/stories/knobs/buttonKnob.ts +0 -9
  138. package/src/stories/knobs/emphasisKnob.ts +0 -8
  139. package/src/stories/knobs/enumKnob.ts +0 -14
  140. package/src/stories/knobs/focusKnob.ts +0 -3
  141. package/src/stories/knobs/sizeKnob.ts +0 -5
  142. package/src/stories/knobs/thumbnailsKnob.ts +0 -9
  143. package/src/testing/utils/itShouldRenderStories.tsx +0 -103
@@ -1,169 +1,135 @@
1
1
  import React from 'react';
2
2
  import { mdiTranslate } from '@lumx/icons/';
3
- import { Emphasis, IconButton, Size, TextField } from '@lumx/react';
4
- import { boolean, number, text } from '@storybook/addon-knobs';
5
- import { buttonSize } from '@lumx/react/stories/knobs/buttonKnob';
6
- import { emphasis } from '@lumx/react/stories/knobs/emphasisKnob';
3
+ import { Chip, IconButton, TextField } from '@lumx/react';
4
+ import { withValueOnChange } from '@lumx/react/stories/decorators/withValueOnChange';
5
+ import { loremIpsum } from '@lumx/react/stories/utils/lorem';
7
6
 
8
- export default { title: 'LumX components/text-field/TextField' };
7
+ export default {
8
+ title: 'LumX components/text-field/TextField',
9
+ component: TextField,
10
+ args: TextField.defaultProps,
11
+ argTypes: {
12
+ clearButtonProps: { control: false },
13
+ chips: { control: false },
14
+ afterElement: { control: false },
15
+ },
16
+ decorators: [withValueOnChange({})],
17
+ };
18
+
19
+ /**
20
+ * Default text field
21
+ */
22
+ export const Default = {
23
+ args: {
24
+ value: '',
25
+ },
26
+ };
27
+
28
+ /**
29
+ * With placeholder
30
+ */
31
+ export const Placeholder = {
32
+ args: {
33
+ value: '',
34
+ placeholder: 'Texfield placeholder',
35
+ },
36
+ };
9
37
 
10
- export const TextField_ = ({ theme }: any) => {
11
- const [value, onChange] = React.useState('Value');
12
- return (
13
- <TextField
14
- value={value}
15
- onChange={onChange}
16
- label={text('Label', 'Label')}
17
- placeholder={text('Placeholder', 'Placeholder')}
18
- theme={theme}
19
- />
20
- );
38
+ /**
39
+ * With label and helper
40
+ */
41
+ export const LabelAndHelper = {
42
+ args: {
43
+ ...Default.args,
44
+ label: 'Textfield label',
45
+ helper: loremIpsum('tiny'),
46
+ },
21
47
  };
22
48
 
23
- export const Clearable = ({ theme }: any) => {
24
- const [value, onChange] = React.useState('Value');
25
- return (
26
- <TextField
27
- value={value}
28
- onChange={onChange}
29
- label={text('Label', 'Label')}
30
- clearButtonProps={{ label: 'Clear' }}
31
- theme={theme}
32
- />
33
- );
49
+ /**
50
+ * With clear button
51
+ */
52
+ export const Clearable = {
53
+ args: {
54
+ value: 'Some value',
55
+ clearButtonProps: { label: 'Clear' },
56
+ },
34
57
  };
35
58
 
36
- export const States = ({ theme }: any) => {
37
- const [value1, onChange1] = React.useState('Value');
38
- const [value2, onChange2] = React.useState('Value');
39
- return (
40
- <>
41
- <TextField
42
- label="Has error"
43
- hasError
44
- error="Error message"
45
- theme={theme}
46
- value={value1}
47
- onChange={onChange1}
48
- />
49
- <TextField label="Is valid" isValid theme={theme} value={value2} onChange={onChange2} />
50
- </>
51
- );
59
+ /**
60
+ * As number field
61
+ */
62
+ export const NumberField = {
63
+ args: {
64
+ value: '0',
65
+ type: 'number',
66
+ },
52
67
  };
53
68
 
54
- export const NumberField = ({ theme }: any) => {
55
- const [value, onChange] = React.useState('0');
56
- return <TextField value={value} onChange={onChange} label={text('Label', 'Label')} theme={theme} type="number" />;
69
+ /**
70
+ * Multiline textarea
71
+ */
72
+ export const TextareaField = {
73
+ args: {
74
+ value: loremIpsum('tiny'),
75
+ multiline: true,
76
+ minimumRows: 2,
77
+ },
57
78
  };
58
79
 
59
- export const WithHelper = ({ theme }: any) => {
60
- const [value, onChange] = React.useState('Value');
61
- return (
62
- <TextField
63
- value={value}
64
- onChange={onChange}
65
- label={text('Label', 'Label')}
66
- placeholder={text('Placeholder', 'Placeholder')}
67
- theme={theme}
68
- helper={<span>{text('Helper', 'Helper')}</span>}
69
- />
70
- );
80
+ /**
81
+ * Error state
82
+ */
83
+ export const Error = {
84
+ args: {
85
+ ...LabelAndHelper.args,
86
+ hasError: true,
87
+ error: 'Error message',
88
+ },
71
89
  };
72
90
 
73
- export const TextArea = ({ theme }: any) => {
74
- const [value, setValue] = React.useState('Value');
75
- return (
76
- <TextField
77
- value={value}
78
- label={text('Label', 'Label')}
79
- placeholder={text('Placeholder', 'Placeholder')}
80
- multiline
81
- minimumRows={number('Minimum number of rows', 1, { min: 0, max: 100 })}
82
- theme={theme}
83
- onChange={setValue}
84
- helper={<span>{text('Helper', 'Helper')}</span>}
85
- />
86
- );
91
+ /**
92
+ * Valid state
93
+ */
94
+ export const Valid = {
95
+ args: {
96
+ ...LabelAndHelper.args,
97
+ isValid: true,
98
+ },
87
99
  };
88
100
 
89
- export const TextAreaWithManyLines = ({ theme }: any) => {
90
- const myvalue = `I
91
- am
92
- a
93
- multiline
94
- text`;
95
- const [value, setValue] = React.useState(myvalue);
96
- return (
97
- <TextField
98
- value={value}
99
- label={text('Label', 'Label')}
100
- placeholder={text('Placeholder', 'Placeholder')}
101
- multiline
102
- minimumRows={number('Minimum number of rows', 2, { min: 0, max: 100 })}
103
- theme={theme}
104
- onChange={setValue}
105
- helper={<span>{text('Helper', 'Helper')}</span>}
106
- />
107
- );
101
+ /**
102
+ * Max length with character counter
103
+ */
104
+ export const MaxLength = {
105
+ args: {
106
+ ...LabelAndHelper.args,
107
+ value: 'Textfield value',
108
+ maxLength: 195,
109
+ },
108
110
  };
109
111
 
110
- export const WithAfterElement = ({ theme }: any) => {
111
- const [value, onChange] = React.useState('Value');
112
- const multiline = boolean('Multiline', true);
113
- const minimumRows = number('Minimum number of rows', 2, { min: 0, max: 100 });
114
- const isClearable = boolean('Clearable', true);
115
- const hasError = boolean('Has error', true);
116
- return (
117
- <TextField
118
- value={value}
119
- label={text('Label', 'Label')}
120
- placeholder={text('Placeholder', 'Placeholder')}
121
- theme={theme}
122
- onChange={onChange}
123
- multiline={multiline}
124
- minimumRows={minimumRows}
125
- hasError={hasError}
126
- maxLength={200}
127
- clearButtonProps={isClearable ? { label: 'Clear' } : undefined}
128
- helper={<span>{text('Helper', 'Helper')}</span>}
129
- afterElement={
130
- <IconButton
131
- label="foo"
132
- emphasis={emphasis('Button emphasis', Emphasis.medium, 'After element')}
133
- size={buttonSize('Button size', Size.s, 'After element')}
134
- icon={mdiTranslate}
135
- />
136
- }
137
- />
138
- );
112
+ /**
113
+ * Custom element at the end
114
+ */
115
+ export const WithAfterElement = {
116
+ args: {
117
+ value: '',
118
+ afterElement: <IconButton label="translate" emphasis="medium" size="s" icon={mdiTranslate} />,
119
+ },
139
120
  };
140
121
 
141
- export const WithMaxLengthNoLabel = ({ theme }: any) => {
142
- const [value, onChange] = React.useState('Value');
143
- const multiline = boolean('Multiline', true);
144
- const minimumRows = number('Minimum number of rows', 2, { min: 0, max: 100 });
145
- const isClearable = boolean('Clearable', true);
146
- const hasError = boolean('Has error', true);
147
- return (
148
- <TextField
149
- value={value}
150
- placeholder={text('Placeholder', 'Placeholder')}
151
- theme={theme}
152
- onChange={onChange}
153
- multiline={multiline}
154
- minimumRows={minimumRows}
155
- hasError={hasError}
156
- maxLength={200}
157
- clearButtonProps={isClearable ? { label: 'Clear' } : undefined}
158
- helper={<span>{text('Helper', 'Helper')}</span>}
159
- afterElement={
160
- <IconButton
161
- label="foo"
162
- emphasis={emphasis('Button emphasis', Emphasis.medium, 'After element')}
163
- size={buttonSize('Button size', Size.s, 'After element')}
164
- icon={mdiTranslate}
165
- />
166
- }
167
- />
168
- );
122
+ /**
123
+ * Chips at the start
124
+ */
125
+ export const WithChips = {
126
+ args: {
127
+ value: '',
128
+ chips: (
129
+ <>
130
+ <Chip size="s">Chip 1</Chip>
131
+ <Chip size="s">Chip 2</Chip>
132
+ </>
133
+ ),
134
+ },
169
135
  };