@react-ui-org/react-ui 0.52.1 → 0.53.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (260) hide show
  1. package/CODEOWNERS +23 -0
  2. package/README.md +10 -7
  3. package/dist/react-ui.css +5 -3
  4. package/dist/react-ui.js +1 -1
  5. package/package.json +64 -77
  6. package/src/{lib/components → components}/Alert/Alert.jsx +1 -1
  7. package/src/{lib/components/Alert/README.mdx → components/Alert/README.md} +84 -100
  8. package/src/{lib/components → components}/Badge/Badge.jsx +1 -1
  9. package/src/{lib/components → components}/Badge/Badge.scss +1 -1
  10. package/src/components/Badge/README.md +103 -0
  11. package/src/{lib/components → components}/Button/Button.jsx +1 -1
  12. package/src/components/Button/README.md +580 -0
  13. package/src/{lib/components → components}/ButtonGroup/ButtonGroup.jsx +11 -9
  14. package/src/{lib/components/ButtonGroup/README.mdx → components/ButtonGroup/README.md} +128 -134
  15. package/src/{lib/components → components}/Card/Card.jsx +1 -1
  16. package/src/components/Card/README.md +314 -0
  17. package/src/{lib/components/CheckboxField/README.mdx → components/CheckboxField/README.md} +96 -108
  18. package/src/{lib/components/FileInputField/README.mdx → components/FileInputField/README.md} +83 -95
  19. package/src/{lib/components → components}/FormLayout/FormLayout.jsx +4 -4
  20. package/src/components/FormLayout/README.md +462 -0
  21. package/src/{lib/components → components}/Grid/Grid.jsx +2 -2
  22. package/src/components/Grid/README.md +281 -0
  23. package/src/{lib/components → components}/InputGroup/InputGroup.jsx +20 -19
  24. package/src/{lib/components → components}/InputGroup/InputGroup.scss +0 -5
  25. package/src/{lib/components/InputGroup/README.mdx → components/InputGroup/README.md} +145 -163
  26. package/src/{lib/components → components}/Modal/Modal.jsx +6 -6
  27. package/src/components/Modal/README.md +1090 -0
  28. package/src/components/Modal/_hooks/useModalScrollPrevention.js +37 -0
  29. package/src/{lib/components/Paper/README.mdx → components/Paper/README.md} +18 -30
  30. package/src/{lib/components/Popover/README.mdx → components/Popover/README.md} +102 -132
  31. package/src/{lib/components/Radio/README.mdx → components/Radio/README.md} +122 -134
  32. package/src/{lib/components → components}/Radio/Radio.jsx +11 -12
  33. package/src/{lib/components → components}/Radio/Radio.scss +0 -5
  34. package/src/components/ScrollView/README.md +503 -0
  35. package/src/{lib/components → components}/ScrollView/ScrollView.jsx +12 -3
  36. package/src/components/SelectField/README.md +681 -0
  37. package/src/components/Table/README.md +259 -0
  38. package/src/{lib/components → components}/Table/Table.jsx +4 -1
  39. package/src/{lib/components → components}/Table/_components/TableHeaderCell/TableHeaderCell.jsx +1 -1
  40. package/src/{lib/components/Tabs/README.mdx → components/Tabs/README.md} +117 -134
  41. package/src/{lib/components → components}/Tabs/TabsItem.jsx +3 -3
  42. package/src/components/Text/README.md +220 -0
  43. package/src/components/TextArea/README.md +359 -0
  44. package/src/{lib/components/TextField/README.mdx → components/TextField/README.md} +336 -342
  45. package/src/{lib/components/TextLink/README.mdx → components/TextLink/README.md} +19 -31
  46. package/src/{lib/components/Toggle/README.mdx → components/Toggle/README.md} +98 -110
  47. package/src/components/Toolbar/README.md +359 -0
  48. package/src/{lib/components → components}/Toolbar/_helpers/getAlignClassName.js +12 -4
  49. package/src/components/_helpers/getRootPriorityClassName.js +15 -0
  50. package/src/{lib/index.js → index.js} +6 -0
  51. package/src/{lib/provider → provider}/RUIProvider.jsx +17 -11
  52. package/src/{lib/styles → styles}/tools/_caret.scss +1 -1
  53. package/src/{lib/styles → styles}/tools/form-fields/_box-field-elements.scss +1 -1
  54. package/src/{lib/styles → styles}/tools/form-fields/_inline-field-elements.scss +2 -2
  55. package/src/{lib/theme.scss → theme.scss} +4 -3
  56. package/CONTRIBUTING.md +0 -137
  57. package/dist/lib.development.js +0 -3179
  58. package/dist/lib.js +0 -1
  59. package/public/racom.svg +0 -11
  60. package/src/lib/components/Badge/README.mdx +0 -126
  61. package/src/lib/components/Button/README.mdx +0 -581
  62. package/src/lib/components/Card/README.mdx +0 -326
  63. package/src/lib/components/FormLayout/README.mdx +0 -501
  64. package/src/lib/components/Grid/README.mdx +0 -299
  65. package/src/lib/components/Modal/README.mdx +0 -1360
  66. package/src/lib/components/Modal/_hooks/useModalScrollPrevention.js +0 -35
  67. package/src/lib/components/ScrollView/README.mdx +0 -521
  68. package/src/lib/components/SelectField/README.mdx +0 -693
  69. package/src/lib/components/Table/README.mdx +0 -275
  70. package/src/lib/components/Text/README.mdx +0 -241
  71. package/src/lib/components/TextArea/README.mdx +0 -366
  72. package/src/lib/components/Toolbar/README.mdx +0 -386
  73. package/src/{lib/components → components}/Alert/Alert.scss +0 -0
  74. package/src/{lib/components → components}/Alert/_settings.scss +0 -0
  75. package/src/{lib/components → components}/Alert/_theme.scss +0 -0
  76. package/src/{lib/components → components}/Alert/_tools.scss +0 -0
  77. package/src/{lib/components → components}/Alert/index.js +0 -0
  78. package/src/{lib/components → components}/Badge/index.js +0 -0
  79. package/src/{lib/components → components}/Button/Button.scss +0 -0
  80. package/src/{lib/components → components}/Button/_base.scss +0 -0
  81. package/src/{lib/components → components}/Button/_priorities.scss +0 -0
  82. package/src/{lib/components → components}/Button/_settings.scss +0 -0
  83. package/src/{lib/components → components}/Button/_theme.scss +0 -0
  84. package/src/{lib/components → components}/Button/_tools.scss +0 -0
  85. package/src/{lib/components → components}/Button/helpers/getRootLabelVisibilityClassName.js +0 -0
  86. package/src/{lib/components/_helpers → components/Button/helpers}/getRootPriorityClassName.js +0 -0
  87. package/src/{lib/components → components}/Button/index.js +0 -0
  88. package/src/{lib/components → components}/ButtonGroup/ButtonGroup.scss +0 -0
  89. package/src/{lib/components → components}/ButtonGroup/ButtonGroupContext.js +0 -0
  90. package/src/{lib/components → components}/ButtonGroup/_theme.scss +0 -0
  91. package/src/{lib/components → components}/ButtonGroup/index.js +0 -0
  92. package/src/{lib/components → components}/Card/Card.scss +0 -0
  93. package/src/{lib/components → components}/Card/CardBody.jsx +0 -0
  94. package/src/{lib/components → components}/Card/CardFooter.jsx +0 -0
  95. package/src/{lib/components → components}/Card/_theme.scss +0 -0
  96. package/src/{lib/components → components}/Card/_tools.scss +0 -0
  97. package/src/{lib/components → components}/Card/index.js +0 -0
  98. package/src/{lib/components → components}/CheckboxField/CheckboxField.jsx +0 -0
  99. package/src/{lib/components → components}/CheckboxField/CheckboxField.scss +0 -0
  100. package/src/{lib/components → components}/CheckboxField/index.js +0 -0
  101. package/src/{lib/components → components}/FileInputField/FileInputField.jsx +0 -0
  102. package/src/{lib/components → components}/FileInputField/FileInputField.scss +0 -0
  103. package/src/{lib/components → components}/FileInputField/index.js +0 -0
  104. package/src/{lib/components → components}/FormLayout/FormLayout.scss +0 -0
  105. package/src/{lib/components → components}/FormLayout/FormLayoutContext.js +0 -0
  106. package/src/{lib/components → components}/FormLayout/FormLayoutCustomField.jsx +4 -4
  107. package/src/{lib/components → components}/FormLayout/FormLayoutCustomField.scss +0 -0
  108. package/src/{lib/components → components}/FormLayout/_theme.scss +0 -0
  109. package/src/{lib/components → components}/FormLayout/index.js +0 -0
  110. package/src/{lib/components → components}/Grid/Grid.scss +0 -0
  111. package/src/{lib/components → components}/Grid/GridSpan.jsx +0 -0
  112. package/src/{lib/components → components}/Grid/_helpers/generateResponsiveCustomProperties.js +0 -0
  113. package/src/{lib/components → components}/Grid/_settings.scss +0 -0
  114. package/src/{lib/components → components}/Grid/_tools.scss +0 -0
  115. package/src/{lib/components → components}/Grid/index.js +0 -0
  116. package/src/{lib/components → components}/InputGroup/InputGroupContext.js +0 -0
  117. package/src/{lib/components → components}/InputGroup/_theme.scss +0 -0
  118. package/src/{lib/components → components}/InputGroup/index.js +0 -0
  119. package/src/{lib/components → components}/Modal/Modal.scss +0 -0
  120. package/src/{lib/components → components}/Modal/ModalBody.jsx +0 -0
  121. package/src/{lib/components → components}/Modal/ModalBody.scss +0 -0
  122. package/src/{lib/components → components}/Modal/ModalCloseButton.jsx +1 -1
  123. package/src/{lib/components → components}/Modal/ModalCloseButton.scss +0 -0
  124. package/src/{lib/components → components}/Modal/ModalContent.jsx +0 -0
  125. package/src/{lib/components → components}/Modal/ModalContent.scss +0 -0
  126. package/src/{lib/components → components}/Modal/ModalFooter.jsx +0 -0
  127. package/src/{lib/components → components}/Modal/ModalFooter.scss +0 -0
  128. package/src/{lib/components → components}/Modal/ModalHeader.jsx +0 -0
  129. package/src/{lib/components → components}/Modal/ModalHeader.scss +0 -0
  130. package/src/{lib/components → components}/Modal/ModalTitle.jsx +0 -0
  131. package/src/{lib/components → components}/Modal/ModalTitle.scss +0 -0
  132. package/src/{lib/components → components}/Modal/_helpers/getJustifyClassName.js +0 -0
  133. package/src/{lib/components → components}/Modal/_helpers/getPositionClassName.js +0 -0
  134. package/src/{lib/components → components}/Modal/_helpers/getScrollingClassName.js +0 -0
  135. package/src/{lib/components → components}/Modal/_helpers/getSizeClassName.js +0 -0
  136. package/src/{lib/components → components}/Modal/_hooks/useModalFocus.js +0 -0
  137. package/src/{lib/components → components}/Modal/_settings.scss +0 -0
  138. package/src/{lib/components → components}/Modal/_theme.scss +0 -0
  139. package/src/{lib/components → components}/Modal/index.js +0 -0
  140. package/src/{lib/components → components}/Paper/Paper.jsx +0 -0
  141. package/src/{lib/components → components}/Paper/Paper.scss +0 -0
  142. package/src/{lib/components → components}/Paper/_theme.scss +0 -0
  143. package/src/{lib/components → components}/Paper/index.js +0 -0
  144. package/src/{lib/components → components}/Popover/Popover.jsx +0 -0
  145. package/src/{lib/components → components}/Popover/Popover.scss +0 -0
  146. package/src/{lib/components → components}/Popover/PopoverWrapper.jsx +0 -0
  147. package/src/{lib/components → components}/Popover/PopoverWrapper.scss +0 -0
  148. package/src/{lib/components → components}/Popover/_helpers/getRootAlignmentClassName.js +0 -0
  149. package/src/{lib/components → components}/Popover/_helpers/getRootSideClassName.js +0 -0
  150. package/src/{lib/components → components}/Popover/_theme.scss +0 -0
  151. package/src/{lib/components → components}/Popover/index.js +0 -0
  152. package/src/{lib/components → components}/Radio/index.js +0 -0
  153. package/src/{lib/components → components}/ScrollView/ScrollView.scss +0 -0
  154. package/src/{lib/components → components}/ScrollView/_helpers/getElementsPositionDifference.js +0 -0
  155. package/src/{lib/components → components}/ScrollView/_hooks/useLoadResizeHook.js +0 -0
  156. package/src/{lib/components → components}/ScrollView/_hooks/useScrollPositionHook.js +0 -0
  157. package/src/{lib/components → components}/ScrollView/index.js +0 -0
  158. package/src/{lib/components → components}/SelectField/SelectField.jsx +0 -0
  159. package/src/{lib/components → components}/SelectField/SelectField.scss +0 -0
  160. package/src/{lib/components → components}/SelectField/_components/Option/Option.jsx +0 -0
  161. package/src/{lib/components → components}/SelectField/_components/Option/index.js +0 -0
  162. package/src/{lib/components → components}/SelectField/index.js +0 -0
  163. package/src/{lib/components → components}/Table/Table.scss +0 -0
  164. package/src/{lib/components → components}/Table/_components/TableBodyCell/TableBodyCell.jsx +0 -0
  165. package/src/{lib/components → components}/Table/_components/TableBodyCell/index.js +0 -0
  166. package/src/{lib/components → components}/Table/_components/TableCell.scss +0 -0
  167. package/src/{lib/components → components}/Table/_components/TableHeaderCell/index.js +0 -0
  168. package/src/{lib/components → components}/Table/_settings.scss +0 -0
  169. package/src/{lib/components → components}/Table/index.js +0 -0
  170. package/src/{lib/components → components}/Tabs/Tabs.jsx +0 -0
  171. package/src/{lib/components → components}/Tabs/Tabs.scss +0 -0
  172. package/src/{lib/components → components}/Tabs/TabsItem.scss +0 -0
  173. package/src/{lib/components → components}/Tabs/_theme.scss +0 -0
  174. package/src/{lib/components → components}/Tabs/index.js +0 -0
  175. package/src/{lib/components → components}/Text/Text.jsx +0 -0
  176. package/src/{lib/components → components}/Text/Text.scss +0 -0
  177. package/src/{lib/components → components}/Text/_helpers/getRootClampClassName.js +0 -0
  178. package/src/{lib/components → components}/Text/_helpers/getRootHyphensClassName.js +0 -0
  179. package/src/{lib/components → components}/Text/_helpers/getRootWordWrappingClassName.js +0 -0
  180. package/src/{lib/components → components}/Text/index.js +0 -0
  181. package/src/{lib/components → components}/TextArea/TextArea.jsx +0 -0
  182. package/src/{lib/components → components}/TextArea/TextArea.scss +0 -0
  183. package/src/{lib/components → components}/TextArea/index.js +0 -0
  184. package/src/{lib/components → components}/TextField/TextField.jsx +0 -0
  185. package/src/{lib/components → components}/TextField/TextField.scss +0 -0
  186. package/src/{lib/components → components}/TextField/index.js +0 -0
  187. package/src/{lib/components → components}/TextLink/TextLink.jsx +1 -1
  188. /package/src/{lib/components → components}/TextLink/TextLink.scss +0 -0
  189. /package/src/{lib/components → components}/TextLink/_theme.scss +0 -0
  190. /package/src/{lib/components → components}/TextLink/index.js +0 -0
  191. /package/src/{lib/components → components}/Toggle/Toggle.jsx +0 -0
  192. /package/src/{lib/components → components}/Toggle/Toggle.scss +0 -0
  193. /package/src/{lib/components → components}/Toggle/index.js +0 -0
  194. /package/src/{lib/components → components}/Toolbar/Toolbar.jsx +0 -0
  195. /package/src/{lib/components → components}/Toolbar/Toolbar.scss +0 -0
  196. /package/src/{lib/components → components}/Toolbar/ToolbarGroup.jsx +0 -0
  197. /package/src/{lib/components → components}/Toolbar/ToolbarItem.jsx +0 -0
  198. /package/src/{lib/components → components}/Toolbar/_helpers/getJustifyClassName.js +0 -0
  199. /package/src/{lib/components → components}/Toolbar/_theme.scss +0 -0
  200. /package/src/{lib/components → components}/Toolbar/index.js +0 -0
  201. /package/src/{lib/components → components}/_helpers/getRootColorClassName.js +0 -0
  202. /package/src/{lib/components → components}/_helpers/getRootSizeClassName.js +0 -0
  203. /package/src/{lib/components → components}/_helpers/getRootValidationStateClassName.js +0 -0
  204. /package/src/{lib/components → components}/_helpers/isChildrenEmpty.js +0 -0
  205. /package/src/{lib/components → components}/_helpers/resolveContextOrProp.js +0 -0
  206. /package/src/{lib/components → components}/_helpers/transferProps.js +0 -0
  207. /package/src/{lib/foundation.scss → foundation.scss} +0 -0
  208. /package/src/{lib/helpers.scss → helpers.scss} +0 -0
  209. /package/src/{lib/provider → provider}/RUIContext.jsx +0 -0
  210. /package/src/{lib/provider → provider}/index.js +0 -0
  211. /package/src/{lib/provider → provider}/withGlobalProps.jsx +0 -0
  212. /package/src/{lib/styles → styles}/_utilities.scss +0 -0
  213. /package/src/{lib/styles → styles}/elements/_code.scss +0 -0
  214. /package/src/{lib/styles → styles}/elements/_links.scss +0 -0
  215. /package/src/{lib/styles → styles}/elements/_lists.scss +0 -0
  216. /package/src/{lib/styles → styles}/elements/_page.scss +0 -0
  217. /package/src/{lib/styles → styles}/elements/_rulers.scss +0 -0
  218. /package/src/{lib/styles → styles}/elements/_small.scss +0 -0
  219. /package/src/{lib/styles → styles}/generic/_box-sizing.scss +0 -0
  220. /package/src/{lib/styles → styles}/generic/_focus.scss +0 -0
  221. /package/src/{lib/styles → styles}/generic/_forms.scss +0 -0
  222. /package/src/{lib/styles → styles}/generic/_reset.scss +0 -0
  223. /package/src/{lib/styles → styles}/generic/_shared.scss +0 -0
  224. /package/src/{lib/styles → styles}/helpers/_animation.scss +0 -0
  225. /package/src/{lib/styles → styles}/settings/_animations.scss +0 -0
  226. /package/src/{lib/styles → styles}/settings/_breakpoints.scss +0 -0
  227. /package/src/{lib/styles → styles}/settings/_escaped-characters.scss +0 -0
  228. /package/src/{lib/styles → styles}/settings/_form-fields.scss +0 -0
  229. /package/src/{lib/styles → styles}/settings/_forms.scss +0 -0
  230. /package/src/{lib/styles → styles}/settings/_utilities.scss +0 -0
  231. /package/src/{lib/styles → styles}/settings/_z-indexes.scss +0 -0
  232. /package/src/{lib/styles → styles}/theme/_accessibility.scss +0 -0
  233. /package/src/{lib/styles → styles}/theme/_borders.scss +0 -0
  234. /package/src/{lib/styles → styles}/theme/_code.scss +0 -0
  235. /package/src/{lib/styles → styles}/theme/_form-fields.scss +0 -0
  236. /package/src/{lib/styles → styles}/theme/_links.scss +0 -0
  237. /package/src/{lib/styles → styles}/theme/_lists.scss +0 -0
  238. /package/src/{lib/styles → styles}/theme/_page.scss +0 -0
  239. /package/src/{lib/styles → styles}/theme/_spacing.scss +0 -0
  240. /package/src/{lib/styles → styles}/theme/_typography.scss +0 -0
  241. /package/src/{lib/styles → styles}/theme-constants/_breakpoints.scss +0 -0
  242. /package/src/{lib/styles → styles}/theme-constants/_colors.scss +0 -0
  243. /package/src/{lib/styles → styles}/theme-constants/_svg.scss +0 -0
  244. /package/src/{lib/styles → styles}/tools/_accessibility.scss +0 -0
  245. /package/src/{lib/styles → styles}/tools/_breakpoint.scss +0 -0
  246. /package/src/{lib/styles → styles}/tools/_colors.scss +0 -0
  247. /package/src/{lib/styles → styles}/tools/_reset.scss +0 -0
  248. /package/src/{lib/styles → styles}/tools/_scrollbar.scss +0 -0
  249. /package/src/{lib/styles → styles}/tools/_spacing.scss +0 -0
  250. /package/src/{lib/styles → styles}/tools/_string.scss +0 -0
  251. /package/src/{lib/styles → styles}/tools/_svg.scss +0 -0
  252. /package/src/{lib/styles → styles}/tools/_transition.scss +0 -0
  253. /package/src/{lib/styles → styles}/tools/_utilities.scss +0 -0
  254. /package/src/{lib/styles → styles}/tools/form-fields/_box-field-layout.scss +0 -0
  255. /package/src/{lib/styles → styles}/tools/form-fields/_box-field-sizes.scss +0 -0
  256. /package/src/{lib/styles → styles}/tools/form-fields/_foundation.scss +0 -0
  257. /package/src/{lib/styles → styles}/tools/form-fields/_inline-field-layout.scss +0 -0
  258. /package/src/{lib/styles → styles}/tools/form-fields/_variants.scss +0 -0
  259. /package/src/{lib/translations → translations}/en.js +0 -0
  260. /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
@@ -32,7 +32,10 @@ export const Table = ({
32
32
  </thead>
33
33
  <tbody>
34
34
  {rows.map((row) => (
35
- <tr key={row.id} className={styles.tableRow}>
35
+ <tr
36
+ className={styles.tableRow}
37
+ key={row.id}
38
+ >
36
39
  {columns.map((column) => (
37
40
  <TableBodyCell
38
41
  format={column.format}
@@ -1,6 +1,6 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
- import { Button } from '../../../..';
3
+ import { Button } from '../../../Button';
4
4
  import styles from '../TableCell.scss';
5
5
 
6
6
  export const TableHeaderCell = ({
@@ -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
- <Playground>
33
- {() => {
34
- const [activeTab, setActiveTab] = React.useState(1);
35
- const navigate = (event, tab) => {
36
- setActiveTab(tab);
37
- event.preventDefault();
38
- };
39
- return (
40
- <Tabs>
41
- <TabsItem
42
- href="#design"
43
- isActive={activeTab === 1}
44
- label="Design"
45
- onClick={(e) => navigate(e, 1)}
46
- />
47
- <TabsItem
48
- href="#code"
49
- isActive={activeTab === 2}
50
- label="Code"
51
- onClick={(e) => navigate(e, 2)}
52
- />
53
- <TabsItem
54
- href="#resources"
55
- isActive={activeTab === 3}
56
- label="Resources"
57
- onClick={(e) => navigate(e, 3)}
58
- />
59
- </Tabs>
60
- );
61
- }}
62
- </Playground>
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
- <Playground>
86
- {() => {
87
- const [activeTab, setActiveTab] = React.useState(1);
88
- const navigate = (event, tab) => {
89
- setActiveTab(tab);
90
- event.preventDefault();
91
- };
92
- return (
93
- <Tabs>
94
- <TabsItem
95
- beforeLabel={<Icon icon="pencil" />}
96
- href="#design"
97
- isActive={activeTab === 1}
98
- label="Design"
99
- onClick={(e) => navigate(e, 1)}
100
- />
101
- <TabsItem
102
- beforeLabel={<Icon icon="code" />}
103
- href="#code"
104
- isActive={activeTab === 2}
105
- label="Code"
106
- onClick={(e) => navigate(e, 2)}
107
- />
108
- <TabsItem
109
- beforeLabel={<Icon icon="star" />}
110
- href="#resources"
111
- isActive={activeTab === 3}
112
- label="Resources"
113
- onClick={(e) => navigate(e, 3)}
114
- />
115
- </Tabs>
116
- );
117
- }}
118
- </Playground>
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/scroll-view) to make them scrollable if necessary.
125
-
126
- <Playground>
127
- {() => {
128
- const [activeTab, setActiveTab] = React.useState(1);
129
- const navigate = (event, tab) => {
130
- setActiveTab(tab);
131
- event.preventDefault();
132
- };
133
- return (
134
- <div style={{ width: '19rem' }}>
135
- <ScrollView direction="horizontal">
136
- <Tabs>
137
- <TabsItem
138
- href="#design"
139
- isActive={activeTab === 1}
140
- label="Design"
141
- onClick={(e) => navigate(e, 1)}
142
- />
143
- <TabsItem
144
- href="#code"
145
- isActive={activeTab === 2}
146
- label="Code"
147
- onClick={(e) => navigate(e, 2)}
148
- />
149
- <TabsItem
150
- href="#resources"
151
- isActive={activeTab === 3}
152
- label="Resources"
153
- onClick={(e) => navigate(e, 3)}
154
- />
155
- <TabsItem
156
- href="#other"
157
- isActive={activeTab === 4}
158
- label="Other"
159
- onClick={(e) => navigate(e, 4)}
160
- />
161
- <TabsItem
162
- href="#more"
163
- isActive={activeTab === 5}
164
- label="More"
165
- onClick={(e) => navigate(e, 5)}
166
- />
167
- </Tabs>
168
- </ScrollView>
169
- </div>
170
- );
171
- }}
172
- </Playground>
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 `<li>` HTML element in
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
- <Props table of={Tabs} />
171
+ <docoff-react-props src="/components/Tabs/Tabs.jsx"></docoff-react-props>
189
172
 
190
173
  ### TabsItem
191
174
 
192
- <Props table of={TabsItem} />
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
- href={href}
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}