@react-ui-org/react-ui 0.52.1 → 0.54.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.
- package/README.md +10 -7
- package/dist/react-ui.css +5 -3
- package/dist/react-ui.development.css +11302 -0
- package/dist/react-ui.development.js +1588 -0
- package/dist/react-ui.js +1 -1
- package/package.json +66 -77
- package/src/{lib/components → components}/Alert/Alert.jsx +1 -1
- package/src/{lib/components/Alert/README.mdx → components/Alert/README.md} +84 -100
- package/src/{lib/components → components}/Badge/Badge.jsx +1 -1
- package/src/{lib/components → components}/Badge/Badge.scss +1 -1
- package/src/components/Badge/README.md +103 -0
- package/src/{lib/components → components}/Button/Button.jsx +1 -1
- package/src/components/Button/README.md +580 -0
- package/src/{lib/components → components}/ButtonGroup/ButtonGroup.jsx +11 -9
- package/src/{lib/components/ButtonGroup/README.mdx → components/ButtonGroup/README.md} +128 -134
- package/src/{lib/components → components}/Card/Card.jsx +1 -1
- package/src/components/Card/README.md +314 -0
- package/src/{lib/components/CheckboxField/README.mdx → components/CheckboxField/README.md} +96 -108
- package/src/{lib/components/FileInputField/README.mdx → components/FileInputField/README.md} +83 -95
- package/src/{lib/components → components}/FormLayout/FormLayout.jsx +4 -4
- package/src/components/FormLayout/README.md +462 -0
- package/src/{lib/components → components}/Grid/Grid.jsx +2 -2
- package/src/components/Grid/README.md +281 -0
- package/src/{lib/components → components}/InputGroup/InputGroup.jsx +28 -19
- package/src/{lib/components → components}/InputGroup/InputGroup.scss +4 -5
- package/src/{lib/components/InputGroup/README.mdx → components/InputGroup/README.md} +162 -165
- package/src/{lib/components → components}/Modal/Modal.jsx +6 -6
- package/src/components/Modal/README.md +1090 -0
- package/src/components/Modal/_hooks/useModalScrollPrevention.js +37 -0
- package/src/{lib/components/Paper/README.mdx → components/Paper/README.md} +18 -30
- package/src/{lib/components/Popover/README.mdx → components/Popover/README.md} +102 -132
- package/src/{lib/components/Radio/README.mdx → components/Radio/README.md} +122 -134
- package/src/{lib/components → components}/Radio/Radio.jsx +11 -12
- package/src/{lib/components → components}/Radio/Radio.scss +0 -5
- package/src/components/ScrollView/README.md +503 -0
- package/src/{lib/components → components}/ScrollView/ScrollView.jsx +12 -3
- package/src/components/SelectField/README.md +681 -0
- package/src/components/Table/README.md +259 -0
- package/src/{lib/components → components}/Table/Table.jsx +4 -1
- package/src/{lib/components → components}/Table/_components/TableHeaderCell/TableHeaderCell.jsx +1 -1
- package/src/{lib/components/Tabs/README.mdx → components/Tabs/README.md} +117 -134
- package/src/{lib/components → components}/Tabs/TabsItem.jsx +3 -3
- package/src/components/Text/README.md +220 -0
- package/src/components/TextArea/README.md +359 -0
- package/src/{lib/components/TextField/README.mdx → components/TextField/README.md} +336 -342
- package/src/{lib/components/TextLink/README.mdx → components/TextLink/README.md} +19 -31
- package/src/{lib/components/Toggle/README.mdx → components/Toggle/README.md} +98 -110
- package/src/components/Toolbar/README.md +359 -0
- package/src/{lib/components → components}/Toolbar/_helpers/getAlignClassName.js +12 -4
- package/src/components/_helpers/getRootPriorityClassName.js +15 -0
- package/src/{lib/index.js → index.js} +6 -0
- package/src/{lib/provider → provider}/RUIProvider.jsx +17 -11
- package/src/{lib/styles → styles}/tools/_caret.scss +1 -1
- package/src/{lib/styles → styles}/tools/form-fields/_box-field-elements.scss +1 -1
- package/src/{lib/styles → styles}/tools/form-fields/_inline-field-elements.scss +2 -2
- package/src/{lib/theme.scss → theme.scss} +4 -3
- package/CONTRIBUTING.md +0 -137
- package/dist/lib.development.js +0 -3179
- package/dist/lib.js +0 -1
- package/public/racom.svg +0 -11
- package/src/lib/components/Badge/README.mdx +0 -126
- package/src/lib/components/Button/README.mdx +0 -581
- package/src/lib/components/Card/README.mdx +0 -326
- package/src/lib/components/FormLayout/README.mdx +0 -501
- package/src/lib/components/Grid/README.mdx +0 -299
- package/src/lib/components/Modal/README.mdx +0 -1360
- package/src/lib/components/Modal/_hooks/useModalScrollPrevention.js +0 -35
- package/src/lib/components/ScrollView/README.mdx +0 -521
- package/src/lib/components/SelectField/README.mdx +0 -693
- package/src/lib/components/Table/README.mdx +0 -275
- package/src/lib/components/Text/README.mdx +0 -241
- package/src/lib/components/TextArea/README.mdx +0 -366
- package/src/lib/components/Toolbar/README.mdx +0 -386
- package/src/{lib/components → components}/Alert/Alert.scss +0 -0
- package/src/{lib/components → components}/Alert/_settings.scss +0 -0
- package/src/{lib/components → components}/Alert/_theme.scss +0 -0
- package/src/{lib/components → components}/Alert/_tools.scss +0 -0
- package/src/{lib/components → components}/Alert/index.js +0 -0
- package/src/{lib/components → components}/Badge/index.js +0 -0
- package/src/{lib/components → components}/Button/Button.scss +0 -0
- package/src/{lib/components → components}/Button/_base.scss +0 -0
- package/src/{lib/components → components}/Button/_priorities.scss +0 -0
- package/src/{lib/components → components}/Button/_settings.scss +0 -0
- package/src/{lib/components → components}/Button/_theme.scss +0 -0
- package/src/{lib/components → components}/Button/_tools.scss +0 -0
- package/src/{lib/components → components}/Button/helpers/getRootLabelVisibilityClassName.js +0 -0
- package/src/{lib/components/_helpers → components/Button/helpers}/getRootPriorityClassName.js +0 -0
- package/src/{lib/components → components}/Button/index.js +0 -0
- package/src/{lib/components → components}/ButtonGroup/ButtonGroup.scss +0 -0
- package/src/{lib/components → components}/ButtonGroup/ButtonGroupContext.js +0 -0
- package/src/{lib/components → components}/ButtonGroup/_theme.scss +0 -0
- package/src/{lib/components → components}/ButtonGroup/index.js +0 -0
- package/src/{lib/components → components}/Card/Card.scss +0 -0
- package/src/{lib/components → components}/Card/CardBody.jsx +0 -0
- package/src/{lib/components → components}/Card/CardFooter.jsx +0 -0
- package/src/{lib/components → components}/Card/_theme.scss +0 -0
- package/src/{lib/components → components}/Card/_tools.scss +0 -0
- package/src/{lib/components → components}/Card/index.js +0 -0
- package/src/{lib/components → components}/CheckboxField/CheckboxField.jsx +0 -0
- package/src/{lib/components → components}/CheckboxField/CheckboxField.scss +0 -0
- package/src/{lib/components → components}/CheckboxField/index.js +0 -0
- package/src/{lib/components → components}/FileInputField/FileInputField.jsx +0 -0
- package/src/{lib/components → components}/FileInputField/FileInputField.scss +0 -0
- package/src/{lib/components → components}/FileInputField/index.js +0 -0
- package/src/{lib/components → components}/FormLayout/FormLayout.scss +0 -0
- package/src/{lib/components → components}/FormLayout/FormLayoutContext.js +0 -0
- package/src/{lib/components → components}/FormLayout/FormLayoutCustomField.jsx +4 -4
- package/src/{lib/components → components}/FormLayout/FormLayoutCustomField.scss +0 -0
- package/src/{lib/components → components}/FormLayout/_theme.scss +0 -0
- package/src/{lib/components → components}/FormLayout/index.js +0 -0
- package/src/{lib/components → components}/Grid/Grid.scss +0 -0
- package/src/{lib/components → components}/Grid/GridSpan.jsx +0 -0
- package/src/{lib/components → components}/Grid/_helpers/generateResponsiveCustomProperties.js +0 -0
- package/src/{lib/components → components}/Grid/_settings.scss +0 -0
- package/src/{lib/components → components}/Grid/_tools.scss +0 -0
- package/src/{lib/components → components}/Grid/index.js +0 -0
- package/src/{lib/components → components}/InputGroup/InputGroupContext.js +0 -0
- package/src/{lib/components → components}/InputGroup/_theme.scss +0 -0
- package/src/{lib/components → components}/InputGroup/index.js +0 -0
- package/src/{lib/components → components}/Modal/Modal.scss +0 -0
- package/src/{lib/components → components}/Modal/ModalBody.jsx +0 -0
- package/src/{lib/components → components}/Modal/ModalBody.scss +0 -0
- package/src/{lib/components → components}/Modal/ModalCloseButton.jsx +1 -1
- package/src/{lib/components → components}/Modal/ModalCloseButton.scss +0 -0
- package/src/{lib/components → components}/Modal/ModalContent.jsx +0 -0
- package/src/{lib/components → components}/Modal/ModalContent.scss +0 -0
- package/src/{lib/components → components}/Modal/ModalFooter.jsx +0 -0
- package/src/{lib/components → components}/Modal/ModalFooter.scss +0 -0
- package/src/{lib/components → components}/Modal/ModalHeader.jsx +0 -0
- package/src/{lib/components → components}/Modal/ModalHeader.scss +0 -0
- package/src/{lib/components → components}/Modal/ModalTitle.jsx +0 -0
- package/src/{lib/components → components}/Modal/ModalTitle.scss +0 -0
- package/src/{lib/components → components}/Modal/_helpers/getJustifyClassName.js +0 -0
- package/src/{lib/components → components}/Modal/_helpers/getPositionClassName.js +0 -0
- package/src/{lib/components → components}/Modal/_helpers/getScrollingClassName.js +0 -0
- package/src/{lib/components → components}/Modal/_helpers/getSizeClassName.js +0 -0
- package/src/{lib/components → components}/Modal/_hooks/useModalFocus.js +0 -0
- package/src/{lib/components → components}/Modal/_settings.scss +0 -0
- package/src/{lib/components → components}/Modal/_theme.scss +0 -0
- package/src/{lib/components → components}/Modal/index.js +0 -0
- package/src/{lib/components → components}/Paper/Paper.jsx +0 -0
- package/src/{lib/components → components}/Paper/Paper.scss +0 -0
- package/src/{lib/components → components}/Paper/_theme.scss +0 -0
- package/src/{lib/components → components}/Paper/index.js +0 -0
- package/src/{lib/components → components}/Popover/Popover.jsx +0 -0
- package/src/{lib/components → components}/Popover/Popover.scss +0 -0
- package/src/{lib/components → components}/Popover/PopoverWrapper.jsx +0 -0
- package/src/{lib/components → components}/Popover/PopoverWrapper.scss +0 -0
- package/src/{lib/components → components}/Popover/_helpers/getRootAlignmentClassName.js +0 -0
- package/src/{lib/components → components}/Popover/_helpers/getRootSideClassName.js +0 -0
- package/src/{lib/components → components}/Popover/_theme.scss +0 -0
- package/src/{lib/components → components}/Popover/index.js +0 -0
- package/src/{lib/components → components}/Radio/index.js +0 -0
- package/src/{lib/components → components}/ScrollView/ScrollView.scss +0 -0
- package/src/{lib/components → components}/ScrollView/_helpers/getElementsPositionDifference.js +0 -0
- package/src/{lib/components → components}/ScrollView/_hooks/useLoadResizeHook.js +0 -0
- package/src/{lib/components → components}/ScrollView/_hooks/useScrollPositionHook.js +0 -0
- package/src/{lib/components → components}/ScrollView/index.js +0 -0
- package/src/{lib/components → components}/SelectField/SelectField.jsx +0 -0
- package/src/{lib/components → components}/SelectField/SelectField.scss +0 -0
- package/src/{lib/components → components}/SelectField/_components/Option/Option.jsx +0 -0
- package/src/{lib/components → components}/SelectField/_components/Option/index.js +0 -0
- package/src/{lib/components → components}/SelectField/index.js +0 -0
- package/src/{lib/components → components}/Table/Table.scss +0 -0
- package/src/{lib/components → components}/Table/_components/TableBodyCell/TableBodyCell.jsx +0 -0
- package/src/{lib/components → components}/Table/_components/TableBodyCell/index.js +0 -0
- package/src/{lib/components → components}/Table/_components/TableCell.scss +0 -0
- package/src/{lib/components → components}/Table/_components/TableHeaderCell/index.js +0 -0
- package/src/{lib/components → components}/Table/_settings.scss +0 -0
- package/src/{lib/components → components}/Table/index.js +0 -0
- package/src/{lib/components → components}/Tabs/Tabs.jsx +0 -0
- package/src/{lib/components → components}/Tabs/Tabs.scss +0 -0
- package/src/{lib/components → components}/Tabs/TabsItem.scss +0 -0
- package/src/{lib/components → components}/Tabs/_theme.scss +0 -0
- package/src/{lib/components → components}/Tabs/index.js +0 -0
- package/src/{lib/components → components}/Text/Text.jsx +0 -0
- package/src/{lib/components → components}/Text/Text.scss +0 -0
- package/src/{lib/components → components}/Text/_helpers/getRootClampClassName.js +0 -0
- package/src/{lib/components → components}/Text/_helpers/getRootHyphensClassName.js +0 -0
- package/src/{lib/components → components}/Text/_helpers/getRootWordWrappingClassName.js +0 -0
- package/src/{lib/components → components}/Text/index.js +0 -0
- package/src/{lib/components → components}/TextArea/TextArea.jsx +0 -0
- package/src/{lib/components → components}/TextArea/TextArea.scss +0 -0
- package/src/{lib/components → components}/TextArea/index.js +0 -0
- package/src/{lib/components → components}/TextField/TextField.jsx +0 -0
- package/src/{lib/components → components}/TextField/TextField.scss +0 -0
- package/src/{lib/components → components}/TextField/index.js +0 -0
- package/src/{lib/components → components}/TextLink/TextLink.jsx +1 -1
- /package/src/{lib/components → components}/TextLink/TextLink.scss +0 -0
- /package/src/{lib/components → components}/TextLink/_theme.scss +0 -0
- /package/src/{lib/components → components}/TextLink/index.js +0 -0
- /package/src/{lib/components → components}/Toggle/Toggle.jsx +0 -0
- /package/src/{lib/components → components}/Toggle/Toggle.scss +0 -0
- /package/src/{lib/components → components}/Toggle/index.js +0 -0
- /package/src/{lib/components → components}/Toolbar/Toolbar.jsx +0 -0
- /package/src/{lib/components → components}/Toolbar/Toolbar.scss +0 -0
- /package/src/{lib/components → components}/Toolbar/ToolbarGroup.jsx +0 -0
- /package/src/{lib/components → components}/Toolbar/ToolbarItem.jsx +0 -0
- /package/src/{lib/components → components}/Toolbar/_helpers/getJustifyClassName.js +0 -0
- /package/src/{lib/components → components}/Toolbar/_theme.scss +0 -0
- /package/src/{lib/components → components}/Toolbar/index.js +0 -0
- /package/src/{lib/components → components}/_helpers/getRootColorClassName.js +0 -0
- /package/src/{lib/components → components}/_helpers/getRootSizeClassName.js +0 -0
- /package/src/{lib/components → components}/_helpers/getRootValidationStateClassName.js +0 -0
- /package/src/{lib/components → components}/_helpers/isChildrenEmpty.js +0 -0
- /package/src/{lib/components → components}/_helpers/resolveContextOrProp.js +0 -0
- /package/src/{lib/components → components}/_helpers/transferProps.js +0 -0
- /package/src/{lib/foundation.scss → foundation.scss} +0 -0
- /package/src/{lib/helpers.scss → helpers.scss} +0 -0
- /package/src/{lib/provider → provider}/RUIContext.jsx +0 -0
- /package/src/{lib/provider → provider}/index.js +0 -0
- /package/src/{lib/provider → provider}/withGlobalProps.jsx +0 -0
- /package/src/{lib/styles → styles}/_utilities.scss +0 -0
- /package/src/{lib/styles → styles}/elements/_code.scss +0 -0
- /package/src/{lib/styles → styles}/elements/_links.scss +0 -0
- /package/src/{lib/styles → styles}/elements/_lists.scss +0 -0
- /package/src/{lib/styles → styles}/elements/_page.scss +0 -0
- /package/src/{lib/styles → styles}/elements/_rulers.scss +0 -0
- /package/src/{lib/styles → styles}/elements/_small.scss +0 -0
- /package/src/{lib/styles → styles}/generic/_box-sizing.scss +0 -0
- /package/src/{lib/styles → styles}/generic/_focus.scss +0 -0
- /package/src/{lib/styles → styles}/generic/_forms.scss +0 -0
- /package/src/{lib/styles → styles}/generic/_reset.scss +0 -0
- /package/src/{lib/styles → styles}/generic/_shared.scss +0 -0
- /package/src/{lib/styles → styles}/helpers/_animation.scss +0 -0
- /package/src/{lib/styles → styles}/settings/_animations.scss +0 -0
- /package/src/{lib/styles → styles}/settings/_breakpoints.scss +0 -0
- /package/src/{lib/styles → styles}/settings/_escaped-characters.scss +0 -0
- /package/src/{lib/styles → styles}/settings/_form-fields.scss +0 -0
- /package/src/{lib/styles → styles}/settings/_forms.scss +0 -0
- /package/src/{lib/styles → styles}/settings/_utilities.scss +0 -0
- /package/src/{lib/styles → styles}/settings/_z-indexes.scss +0 -0
- /package/src/{lib/styles → styles}/theme/_accessibility.scss +0 -0
- /package/src/{lib/styles → styles}/theme/_borders.scss +0 -0
- /package/src/{lib/styles → styles}/theme/_code.scss +0 -0
- /package/src/{lib/styles → styles}/theme/_form-fields.scss +0 -0
- /package/src/{lib/styles → styles}/theme/_links.scss +0 -0
- /package/src/{lib/styles → styles}/theme/_lists.scss +0 -0
- /package/src/{lib/styles → styles}/theme/_page.scss +0 -0
- /package/src/{lib/styles → styles}/theme/_spacing.scss +0 -0
- /package/src/{lib/styles → styles}/theme/_typography.scss +0 -0
- /package/src/{lib/styles → styles}/theme-constants/_breakpoints.scss +0 -0
- /package/src/{lib/styles → styles}/theme-constants/_colors.scss +0 -0
- /package/src/{lib/styles → styles}/theme-constants/_svg.scss +0 -0
- /package/src/{lib/styles → styles}/tools/_accessibility.scss +0 -0
- /package/src/{lib/styles → styles}/tools/_breakpoint.scss +0 -0
- /package/src/{lib/styles → styles}/tools/_colors.scss +0 -0
- /package/src/{lib/styles → styles}/tools/_reset.scss +0 -0
- /package/src/{lib/styles → styles}/tools/_scrollbar.scss +0 -0
- /package/src/{lib/styles → styles}/tools/_spacing.scss +0 -0
- /package/src/{lib/styles → styles}/tools/_string.scss +0 -0
- /package/src/{lib/styles → styles}/tools/_svg.scss +0 -0
- /package/src/{lib/styles → styles}/tools/_transition.scss +0 -0
- /package/src/{lib/styles → styles}/tools/_utilities.scss +0 -0
- /package/src/{lib/styles → styles}/tools/form-fields/_box-field-layout.scss +0 -0
- /package/src/{lib/styles → styles}/tools/form-fields/_box-field-sizes.scss +0 -0
- /package/src/{lib/styles → styles}/tools/form-fields/_foundation.scss +0 -0
- /package/src/{lib/styles → styles}/tools/form-fields/_inline-field-layout.scss +0 -0
- /package/src/{lib/styles → styles}/tools/form-fields/_variants.scss +0 -0
- /package/src/{lib/translations → translations}/en.js +0 -0
- /package/src/{lib/utils → utils}/classNames.js +0 -0
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
# Table
|
|
2
|
+
|
|
3
|
+
Table presents complex tabular data in an easy-to-scan way.
|
|
4
|
+
|
|
5
|
+
## Basic Usage
|
|
6
|
+
|
|
7
|
+
To implement the Table component, you need to import it first:
|
|
8
|
+
|
|
9
|
+
```js
|
|
10
|
+
import { Table } from '@react-ui-org/react-ui';
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
And use it:
|
|
14
|
+
|
|
15
|
+
```docoff-react-preview
|
|
16
|
+
<Table
|
|
17
|
+
columns={[
|
|
18
|
+
{
|
|
19
|
+
label: 'ID',
|
|
20
|
+
name: 'id',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
label: 'Name',
|
|
24
|
+
name: 'name',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
format: (date) => date.toLocaleDateString('en-GB'),
|
|
28
|
+
label: 'Date of birth',
|
|
29
|
+
name: 'dateOfBirth',
|
|
30
|
+
},
|
|
31
|
+
]}
|
|
32
|
+
rows={[
|
|
33
|
+
{
|
|
34
|
+
dateOfBirth: new Date(1940, 10, 9),
|
|
35
|
+
id: 1,
|
|
36
|
+
name: 'John Lennon',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
dateOfBirth: new Date(1942, 6, 18),
|
|
40
|
+
id: 2,
|
|
41
|
+
name: 'Paul McCartney',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
dateOfBirth: new Date(1943, 2, 25),
|
|
45
|
+
id: 3,
|
|
46
|
+
name: 'George Harrison',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
dateOfBirth: new Date(1940, 7, 7),
|
|
50
|
+
id: 4,
|
|
51
|
+
name: 'Richard Starkey (Ringo Starr)',
|
|
52
|
+
},
|
|
53
|
+
]}
|
|
54
|
+
/>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
See [API](#api) for all available options.
|
|
58
|
+
|
|
59
|
+
## General Guidelines
|
|
60
|
+
|
|
61
|
+
- **Keep headers short** so users can quickly scan the content of the table.
|
|
62
|
+
Just one or two words should be enough.
|
|
63
|
+
|
|
64
|
+
- Tables are **good for displaying complex tabular data.** For simpler data sets
|
|
65
|
+
or even plain key-value pairs, consider using the
|
|
66
|
+
[Grid](/components/Grid) component.
|
|
67
|
+
|
|
68
|
+
- Tables make **lots of information easier to scan and compare.** If you have
|
|
69
|
+
fewer sections and want to emphasize each group more, consider using
|
|
70
|
+
[Cards](/components/Card).
|
|
71
|
+
|
|
72
|
+
## Responsive Tables
|
|
73
|
+
|
|
74
|
+
The easiest way to make tables responsive is to wrap them with the
|
|
75
|
+
[ScrollView](/components/ScrollView) component in the horizontal mode.
|
|
76
|
+
|
|
77
|
+
```docoff-react-preview
|
|
78
|
+
<ScrollView direction="horizontal">
|
|
79
|
+
<Table
|
|
80
|
+
columns={[
|
|
81
|
+
{
|
|
82
|
+
label: 'ID',
|
|
83
|
+
name: 'id',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
format: (name) => (
|
|
87
|
+
<span style={{ whiteSpace: 'nowrap' }}>{name}</span>
|
|
88
|
+
),
|
|
89
|
+
label: 'Name',
|
|
90
|
+
name: 'name',
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
format: (note) => (
|
|
94
|
+
<span style={{ whiteSpace: 'nowrap' }}>{note}</span>
|
|
95
|
+
),
|
|
96
|
+
label: 'Note',
|
|
97
|
+
name: 'note',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
format: (date) => date.toLocaleDateString('en-GB'),
|
|
101
|
+
label: 'Date of birth',
|
|
102
|
+
name: 'dateOfBirth',
|
|
103
|
+
},
|
|
104
|
+
]}
|
|
105
|
+
rows={[
|
|
106
|
+
{
|
|
107
|
+
dateOfBirth: new Date(1940, 10, 9),
|
|
108
|
+
id: 1,
|
|
109
|
+
name: 'John Lennon',
|
|
110
|
+
note: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. '
|
|
111
|
+
+ 'Aenean commodo ligula eget dolor. Aenean massa. Cum sociis '
|
|
112
|
+
+ 'natoque penatibus et magnis dis parturient montes, nascetur '
|
|
113
|
+
+ 'ridiculus mus. Donec quam felis, ultricies nec, pellentesque '
|
|
114
|
+
+ 'eu, pretium quis, sem.',
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
dateOfBirth: new Date(1942, 6, 18),
|
|
118
|
+
id: 2,
|
|
119
|
+
name: 'Paul McCartney',
|
|
120
|
+
note: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. '
|
|
121
|
+
+ 'Aenean commodo ligula eget dolor. Aenean massa. Cum sociis '
|
|
122
|
+
+ 'natoque penatibus et magnis dis parturient montes, nascetur '
|
|
123
|
+
+ 'ridiculus mus. Donec quam felis, ultricies nec, pellentesque '
|
|
124
|
+
+ 'eu, pretium quis, sem.',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
dateOfBirth: new Date(1943, 2, 25),
|
|
128
|
+
id: 3,
|
|
129
|
+
name: 'George Harrison',
|
|
130
|
+
note: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. '
|
|
131
|
+
+ 'Aenean commodo ligula eget dolor. Aenean massa. Cum sociis '
|
|
132
|
+
+ 'natoque penatibus et magnis dis parturient montes, nascetur '
|
|
133
|
+
+ 'ridiculus mus. Donec quam felis, ultricies nec, pellentesque '
|
|
134
|
+
+ 'eu, pretium quis, sem.',
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
dateOfBirth: new Date(1940, 7, 7),
|
|
138
|
+
id: 4,
|
|
139
|
+
name: 'Richard Starkey (Ringo Starr)',
|
|
140
|
+
note: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. '
|
|
141
|
+
+ 'Aenean commodo ligula eget dolor. Aenean massa. Cum sociis '
|
|
142
|
+
+ 'natoque penatibus et magnis dis parturient montes, nascetur '
|
|
143
|
+
+ 'ridiculus mus. Donec quam felis, ultricies nec, pellentesque '
|
|
144
|
+
+ 'eu, pretium quis, sem.',
|
|
145
|
+
},
|
|
146
|
+
]}
|
|
147
|
+
/>
|
|
148
|
+
</ScrollView>
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Sortable Columns
|
|
152
|
+
|
|
153
|
+
The Table supports sorting indicators by adding a simple configuration.
|
|
154
|
+
|
|
155
|
+
⚠️ The Table component only provides necessary visual support for sorting. Aside
|
|
156
|
+
from icons, you must **provide the comparing functionality yourself** if you
|
|
157
|
+
aren't rendering **already sorted data.** The reason for this decision is that
|
|
158
|
+
client often does not have access to the full dataset.
|
|
159
|
+
|
|
160
|
+
The following is an example of custom sorting function executed on the client.
|
|
161
|
+
|
|
162
|
+
```docoff-react-preview
|
|
163
|
+
React.createElement(() => {
|
|
164
|
+
const [tableSortColumn, setTableSortColumn] = React.useState('id');
|
|
165
|
+
const [tableSortDirection, setTableSortDirection] = React.useState('asc');
|
|
166
|
+
const [rows, setRows] = React.useState([
|
|
167
|
+
{
|
|
168
|
+
dateOfBirth: new Date(1940, 10, 9),
|
|
169
|
+
id: 1,
|
|
170
|
+
name: 'John Lennon',
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
dateOfBirth: new Date(1942, 6, 18),
|
|
174
|
+
id: 2,
|
|
175
|
+
name: 'Paul McCartney',
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
dateOfBirth: new Date(1943, 2, 25),
|
|
179
|
+
id: 3,
|
|
180
|
+
name: 'George Harrison',
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
dateOfBirth: new Date(1940, 7, 7),
|
|
184
|
+
id: 4,
|
|
185
|
+
name: 'Richard Starkey (Ringo Starr)',
|
|
186
|
+
},
|
|
187
|
+
]);
|
|
188
|
+
const compare = (items, key, direction) => {
|
|
189
|
+
const sortedItems = [...items];
|
|
190
|
+
if (key === 'id' || key === 'dateOfBirth') {
|
|
191
|
+
sortedItems.sort((a, b) => b[key] - a[key]);
|
|
192
|
+
} else if (key === 'name') {
|
|
193
|
+
sortedItems.sort((a, b) => {
|
|
194
|
+
if (a.name > b.name) {
|
|
195
|
+
return -1;
|
|
196
|
+
}
|
|
197
|
+
if (a.name < b.name) {
|
|
198
|
+
return 1;
|
|
199
|
+
}
|
|
200
|
+
return 0;
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
return direction === 'desc' ? sortedItems.reverse() : sortedItems;
|
|
204
|
+
};
|
|
205
|
+
const columns = [
|
|
206
|
+
{
|
|
207
|
+
isSortable: true,
|
|
208
|
+
label: 'ID',
|
|
209
|
+
name: 'id',
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
isSortable: true,
|
|
213
|
+
label: 'Name',
|
|
214
|
+
name: 'name',
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
format: (date) => date.toISOString(),
|
|
218
|
+
isSortable: true,
|
|
219
|
+
label: 'Date of birth',
|
|
220
|
+
name: 'dateOfBirth',
|
|
221
|
+
},
|
|
222
|
+
];
|
|
223
|
+
return (
|
|
224
|
+
<Table
|
|
225
|
+
columns={columns}
|
|
226
|
+
rows={rows}
|
|
227
|
+
sort={{
|
|
228
|
+
ascendingIcon: <rui-icon icon="up" />,
|
|
229
|
+
column: tableSortColumn,
|
|
230
|
+
descendingIcon: <rui-icon icon="down" />,
|
|
231
|
+
direction: tableSortDirection,
|
|
232
|
+
onClick: (column, direction) => {
|
|
233
|
+
setTableSortColumn(column);
|
|
234
|
+
setTableSortDirection(direction === 'asc' ? 'desc' : 'asc');
|
|
235
|
+
setRows(compare(rows, column, direction));
|
|
236
|
+
},
|
|
237
|
+
}}
|
|
238
|
+
/>
|
|
239
|
+
);
|
|
240
|
+
});
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## Forwarding HTML Attributes
|
|
244
|
+
|
|
245
|
+
In addition to the options below in the [component's API](#api) section, you
|
|
246
|
+
can specify [React synthetic events] or **any HTML attribute you like.** All
|
|
247
|
+
attributes that don't interfere with the API are forwarded to the `<table>` HTML
|
|
248
|
+
element. This enables making the component interactive and helps to improve its
|
|
249
|
+
accessibility.
|
|
250
|
+
|
|
251
|
+
👉 Refer to the MDN reference for the full list of supported attributes of the
|
|
252
|
+
[table] element.
|
|
253
|
+
|
|
254
|
+
## API
|
|
255
|
+
|
|
256
|
+
<docoff-react-props src="/components/Table/Table.jsx"></docoff-react-props>
|
|
257
|
+
|
|
258
|
+
[React synthetic events]: https://reactjs.org/docs/events.html
|
|
259
|
+
[table]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table#attributes
|
|
@@ -1,22 +1,5 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Tabs
|
|
3
|
-
menu: 'Miscellaneous'
|
|
4
|
-
route: /components/tabs
|
|
5
|
-
---
|
|
6
|
-
|
|
7
1
|
# Tabs
|
|
8
2
|
|
|
9
|
-
import {
|
|
10
|
-
Playground,
|
|
11
|
-
Props,
|
|
12
|
-
} from 'docz'
|
|
13
|
-
import { Icon } from '../../../docs/_components/Icon/Icon'
|
|
14
|
-
import {
|
|
15
|
-
ScrollView,
|
|
16
|
-
Tabs,
|
|
17
|
-
TabsItem,
|
|
18
|
-
} from '../..'
|
|
19
|
-
|
|
20
3
|
Tabs separate related content into groups within a single context.
|
|
21
4
|
|
|
22
5
|
## Basic Usage
|
|
@@ -29,37 +12,37 @@ import { Tabs, TabsItem } from '@react-ui-org/react-ui';
|
|
|
29
12
|
|
|
30
13
|
And use it:
|
|
31
14
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
15
|
+
```docoff-react-preview
|
|
16
|
+
React.createElement(() => {
|
|
17
|
+
const [activeTab, setActiveTab] = React.useState(1);
|
|
18
|
+
const navigate = (event, tab) => {
|
|
19
|
+
setActiveTab(tab);
|
|
20
|
+
event.preventDefault();
|
|
21
|
+
};
|
|
22
|
+
return (
|
|
23
|
+
<Tabs>
|
|
24
|
+
<TabsItem
|
|
25
|
+
href="#design"
|
|
26
|
+
isActive={activeTab === 1}
|
|
27
|
+
label="Design"
|
|
28
|
+
onClick={(e) => navigate(e, 1)}
|
|
29
|
+
/>
|
|
30
|
+
<TabsItem
|
|
31
|
+
href="#code"
|
|
32
|
+
isActive={activeTab === 2}
|
|
33
|
+
label="Code"
|
|
34
|
+
onClick={(e) => navigate(e, 2)}
|
|
35
|
+
/>
|
|
36
|
+
<TabsItem
|
|
37
|
+
href="#resources"
|
|
38
|
+
isActive={activeTab === 3}
|
|
39
|
+
label="Resources"
|
|
40
|
+
onClick={(e) => navigate(e, 3)}
|
|
41
|
+
/>
|
|
42
|
+
</Tabs>
|
|
43
|
+
);
|
|
44
|
+
})
|
|
45
|
+
```
|
|
63
46
|
|
|
64
47
|
See [API](#api) for all available options.
|
|
65
48
|
|
|
@@ -82,101 +65,101 @@ See [API](#api) for all available options.
|
|
|
82
65
|
Tab titles can be accompanied by icons. Once you decide to have icons, use one
|
|
83
66
|
for each tab and don't leave some tabs without an icon.
|
|
84
67
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
68
|
+
```docoff-react-preview
|
|
69
|
+
React.createElement(() => {
|
|
70
|
+
const [activeTab, setActiveTab] = React.useState(1);
|
|
71
|
+
const navigate = (event, tab) => {
|
|
72
|
+
setActiveTab(tab);
|
|
73
|
+
event.preventDefault();
|
|
74
|
+
};
|
|
75
|
+
return (
|
|
76
|
+
<Tabs>
|
|
77
|
+
<TabsItem
|
|
78
|
+
beforeLabel={<rui-icon icon="pencil" />}
|
|
79
|
+
href="#design"
|
|
80
|
+
isActive={activeTab === 1}
|
|
81
|
+
label="Design"
|
|
82
|
+
onClick={(e) => navigate(e, 1)}
|
|
83
|
+
/>
|
|
84
|
+
<TabsItem
|
|
85
|
+
beforeLabel={<rui-icon icon="code" />}
|
|
86
|
+
href="#code"
|
|
87
|
+
isActive={activeTab === 2}
|
|
88
|
+
label="Code"
|
|
89
|
+
onClick={(e) => navigate(e, 2)}
|
|
90
|
+
/>
|
|
91
|
+
<TabsItem
|
|
92
|
+
beforeLabel={<rui-icon icon="star" />}
|
|
93
|
+
href="#resources"
|
|
94
|
+
isActive={activeTab === 3}
|
|
95
|
+
label="Resources"
|
|
96
|
+
onClick={(e) => navigate(e, 3)}
|
|
97
|
+
/>
|
|
98
|
+
</Tabs>
|
|
99
|
+
);
|
|
100
|
+
});
|
|
101
|
+
```
|
|
119
102
|
|
|
120
103
|
## Scrollable Tabs
|
|
121
104
|
|
|
122
105
|
If you have more than a few tabs, you may need to make sure they will be all
|
|
123
106
|
accessible no matter the space they have around. Wrap Tabs into
|
|
124
|
-
[ScrollView](/components/
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
107
|
+
[ScrollView](/components/ScrollView) to make them scrollable if necessary.
|
|
108
|
+
|
|
109
|
+
```docoff-react-preview
|
|
110
|
+
React.createElement(() => {
|
|
111
|
+
const [activeTab, setActiveTab] = React.useState(1);
|
|
112
|
+
const navigate = (event, tab) => {
|
|
113
|
+
setActiveTab(tab);
|
|
114
|
+
event.preventDefault();
|
|
115
|
+
};
|
|
116
|
+
return (
|
|
117
|
+
<div style={{ width: '19rem' }}>
|
|
118
|
+
<ScrollView direction="horizontal">
|
|
119
|
+
<Tabs>
|
|
120
|
+
<TabsItem
|
|
121
|
+
href="#design"
|
|
122
|
+
isActive={activeTab === 1}
|
|
123
|
+
label="Design"
|
|
124
|
+
onClick={(e) => navigate(e, 1)}
|
|
125
|
+
/>
|
|
126
|
+
<TabsItem
|
|
127
|
+
href="#code"
|
|
128
|
+
isActive={activeTab === 2}
|
|
129
|
+
label="Code"
|
|
130
|
+
onClick={(e) => navigate(e, 2)}
|
|
131
|
+
/>
|
|
132
|
+
<TabsItem
|
|
133
|
+
href="#resources"
|
|
134
|
+
isActive={activeTab === 3}
|
|
135
|
+
label="Resources"
|
|
136
|
+
onClick={(e) => navigate(e, 3)}
|
|
137
|
+
/>
|
|
138
|
+
<TabsItem
|
|
139
|
+
href="#other"
|
|
140
|
+
isActive={activeTab === 4}
|
|
141
|
+
label="Other"
|
|
142
|
+
onClick={(e) => navigate(e, 4)}
|
|
143
|
+
/>
|
|
144
|
+
<TabsItem
|
|
145
|
+
href="#more"
|
|
146
|
+
isActive={activeTab === 5}
|
|
147
|
+
label="More"
|
|
148
|
+
onClick={(e) => navigate(e, 5)}
|
|
149
|
+
/>
|
|
150
|
+
</Tabs>
|
|
151
|
+
</ScrollView>
|
|
152
|
+
</div>
|
|
153
|
+
);
|
|
154
|
+
})
|
|
155
|
+
```
|
|
173
156
|
|
|
174
157
|
## Forwarding HTML Attributes
|
|
175
158
|
|
|
176
159
|
In addition to the options below in the [component's API](#api) section, you
|
|
177
160
|
can specify [React synthetic events] or **any HTML attribute you like.** All
|
|
178
161
|
attributes that don't interfere with the API are forwarded to the `<nav>` HTML
|
|
179
|
-
element in case of `Tabs` component and to the `<
|
|
162
|
+
element in case of `Tabs` component and to the `<a>` HTML element in
|
|
180
163
|
case of `TabsItem`. This enables making the component interactive and helps
|
|
181
164
|
to improve its accessibility.
|
|
182
165
|
|
|
@@ -185,11 +168,11 @@ to improve its accessibility.
|
|
|
185
168
|
|
|
186
169
|
## API
|
|
187
170
|
|
|
188
|
-
<
|
|
171
|
+
<docoff-react-props src="/components/Tabs/Tabs.jsx"></docoff-react-props>
|
|
189
172
|
|
|
190
173
|
### TabsItem
|
|
191
174
|
|
|
192
|
-
<
|
|
175
|
+
<docoff-react-props src="/components/Tabs/TabsItem.jsx"></docoff-react-props>
|
|
193
176
|
|
|
194
177
|
## Theming
|
|
195
178
|
|
|
@@ -16,7 +16,6 @@ export const TabsItem = ({
|
|
|
16
16
|
...restProps
|
|
17
17
|
}) => (
|
|
18
18
|
<li
|
|
19
|
-
{...transferProps(restProps)}
|
|
20
19
|
className={classNames(
|
|
21
20
|
styles.root,
|
|
22
21
|
isActive && styles.isRootActive,
|
|
@@ -25,10 +24,11 @@ export const TabsItem = ({
|
|
|
25
24
|
key={href}
|
|
26
25
|
>
|
|
27
26
|
<a
|
|
28
|
-
|
|
29
|
-
onClick={onClick}
|
|
27
|
+
{...transferProps(restProps)}
|
|
30
28
|
className={styles.link}
|
|
29
|
+
href={href}
|
|
31
30
|
id={id && `${id}__link`}
|
|
31
|
+
onClick={onClick}
|
|
32
32
|
>
|
|
33
33
|
<span className={styles.linkContent}>
|
|
34
34
|
{beforeLabel}
|