@pautena/react-design-system 0.0.1 → 0.1.2

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 (279) hide show
  1. package/dist/cjs/index.js +28 -28
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/components/app-bar/app-bar.types.d.ts +2 -1
  4. package/dist/cjs/types/components/content/content.d.ts +2 -0
  5. package/dist/cjs/types/components/content/content.types.d.ts +4 -0
  6. package/dist/cjs/types/components/content/index.d.ts +2 -0
  7. package/dist/cjs/types/components/header/header.d.ts +2 -61
  8. package/dist/cjs/types/components/header/header.types.d.ts +55 -0
  9. package/dist/cjs/types/components/header/index.d.ts +1 -0
  10. package/dist/cjs/types/components/index.d.ts +1 -0
  11. package/dist/cjs/types/components/tab/index.d.ts +0 -1
  12. package/dist/cjs/types/components/tab/tab-card/tab-card.d.ts +1 -2
  13. package/dist/cjs/types/components/table-list/table-list.d.ts +4 -7
  14. package/dist/cjs/types/generators/generators.mock.d.ts +22 -1
  15. package/dist/cjs/types/generators/generators.model.d.ts +5 -1
  16. package/dist/cjs/types/generators/model-form/model-form.d.ts +5 -5
  17. package/dist/cjs/types/generators/model-router/model-router.d.ts +4 -35
  18. package/dist/cjs/types/generators/model-router/model-router.types.d.ts +8 -0
  19. package/dist/cjs/types/generators/model-router/screens/add-screen.d.ts +16 -2
  20. package/dist/cjs/types/generators/model-router/screens/details-screen.d.ts +20 -2
  21. package/dist/cjs/types/generators/model-router/screens/list-screen.d.ts +30 -2
  22. package/dist/cjs/types/generators/model-router/screens/screens.types.d.ts +11 -0
  23. package/dist/cjs/types/generators/model-router/screens/update-screen.d.ts +29 -2
  24. package/dist/cjs/types/generators/model-router/stories/templates.d.ts +23 -0
  25. package/dist/cjs/types/generators/object-details/object-details.d.ts +4 -4
  26. package/dist/cjs/types/layouts/app-bar-with-drawer-layout/app-bar-with-drawer-layout.d.ts +5 -8
  27. package/dist/cjs/types/layouts/header-layout/header-layout.d.ts +4 -5
  28. package/dist/cjs/types/layouts/index.d.ts +1 -6
  29. package/dist/cjs/types/providers/index.d.ts +1 -0
  30. package/dist/cjs/types/providers/notification-center/index.d.ts +1 -0
  31. package/dist/cjs/types/providers/tab-provider/index.d.ts +2 -0
  32. package/dist/cjs/types/providers/tab-provider/tab-provider.context.d.ts +4 -0
  33. package/dist/cjs/types/providers/tab-provider/tab-provider.provider.d.ts +6 -0
  34. package/dist/cjs/types/utils/theme.d.ts +7 -4
  35. package/dist/esm/index.js +28 -28
  36. package/dist/esm/index.js.map +1 -1
  37. package/dist/esm/types/components/app-bar/app-bar.types.d.ts +2 -1
  38. package/dist/esm/types/components/content/content.d.ts +2 -0
  39. package/dist/esm/types/components/content/content.types.d.ts +4 -0
  40. package/dist/esm/types/components/content/index.d.ts +2 -0
  41. package/dist/esm/types/components/header/header.d.ts +2 -61
  42. package/dist/esm/types/components/header/header.types.d.ts +55 -0
  43. package/dist/esm/types/components/header/index.d.ts +1 -0
  44. package/dist/esm/types/components/index.d.ts +1 -0
  45. package/dist/esm/types/components/tab/index.d.ts +0 -1
  46. package/dist/esm/types/components/tab/tab-card/tab-card.d.ts +1 -2
  47. package/dist/esm/types/components/table-list/table-list.d.ts +4 -7
  48. package/dist/esm/types/generators/generators.mock.d.ts +22 -1
  49. package/dist/esm/types/generators/generators.model.d.ts +5 -1
  50. package/dist/esm/types/generators/model-form/model-form.d.ts +5 -5
  51. package/dist/esm/types/generators/model-router/model-router.d.ts +4 -35
  52. package/dist/esm/types/generators/model-router/model-router.types.d.ts +8 -0
  53. package/dist/esm/types/generators/model-router/screens/add-screen.d.ts +16 -2
  54. package/dist/esm/types/generators/model-router/screens/details-screen.d.ts +20 -2
  55. package/dist/esm/types/generators/model-router/screens/list-screen.d.ts +30 -2
  56. package/dist/esm/types/generators/model-router/screens/screens.types.d.ts +11 -0
  57. package/dist/esm/types/generators/model-router/screens/update-screen.d.ts +29 -2
  58. package/dist/esm/types/generators/model-router/stories/templates.d.ts +23 -0
  59. package/dist/esm/types/generators/object-details/object-details.d.ts +4 -4
  60. package/dist/esm/types/layouts/app-bar-with-drawer-layout/app-bar-with-drawer-layout.d.ts +5 -8
  61. package/dist/esm/types/layouts/header-layout/header-layout.d.ts +4 -5
  62. package/dist/esm/types/layouts/index.d.ts +1 -6
  63. package/dist/esm/types/providers/index.d.ts +1 -0
  64. package/dist/esm/types/providers/notification-center/index.d.ts +1 -0
  65. package/dist/esm/types/providers/tab-provider/index.d.ts +2 -0
  66. package/dist/esm/types/providers/tab-provider/tab-provider.context.d.ts +4 -0
  67. package/dist/esm/types/providers/tab-provider/tab-provider.provider.d.ts +6 -0
  68. package/dist/esm/types/utils/theme.d.ts +7 -4
  69. package/dist/index.d.ts +146 -122
  70. package/package.json +4 -1
  71. package/.eslintrc.js +0 -26
  72. package/.github/workflows/ci.yml +0 -23
  73. package/.github/workflows/deploy-storybook.yaml +0 -23
  74. package/.github/workflows/publish.yml +0 -31
  75. package/.husky/pre-commit +0 -5
  76. package/.prettierignore +0 -4
  77. package/.storybook/main.js +0 -10
  78. package/.storybook/preview.js +0 -36
  79. package/babel.config.js +0 -3
  80. package/dist/cjs/types/components/tab/tab.context.d.ts +0 -4
  81. package/dist/cjs/types/layouts/data-table-layout/data-table-layout.d.ts +0 -12
  82. package/dist/cjs/types/layouts/data-table-layout/index.d.ts +0 -1
  83. package/dist/cjs/types/layouts/details-layout/details-layout.d.ts +0 -12
  84. package/dist/cjs/types/layouts/details-layout/index.d.ts +0 -1
  85. package/dist/cjs/types/layouts/form-layout/form-layout.d.ts +0 -8
  86. package/dist/cjs/types/layouts/form-layout/index.d.ts +0 -1
  87. package/dist/cjs/types/layouts/list-layout/index.d.ts +0 -1
  88. package/dist/cjs/types/layouts/list-layout/list-layout.d.ts +0 -8
  89. package/dist/cjs/types/layouts/tab-layout/index.d.ts +0 -1
  90. package/dist/cjs/types/layouts/tab-layout/tab-layout.d.ts +0 -7
  91. package/dist/esm/types/components/tab/tab.context.d.ts +0 -4
  92. package/dist/esm/types/layouts/data-table-layout/data-table-layout.d.ts +0 -12
  93. package/dist/esm/types/layouts/data-table-layout/index.d.ts +0 -1
  94. package/dist/esm/types/layouts/details-layout/details-layout.d.ts +0 -12
  95. package/dist/esm/types/layouts/details-layout/index.d.ts +0 -1
  96. package/dist/esm/types/layouts/form-layout/form-layout.d.ts +0 -8
  97. package/dist/esm/types/layouts/form-layout/index.d.ts +0 -1
  98. package/dist/esm/types/layouts/list-layout/index.d.ts +0 -1
  99. package/dist/esm/types/layouts/list-layout/list-layout.d.ts +0 -8
  100. package/dist/esm/types/layouts/tab-layout/index.d.ts +0 -1
  101. package/dist/esm/types/layouts/tab-layout/tab-layout.d.ts +0 -7
  102. package/jest.config.js +0 -14
  103. package/jest.setup.ts +0 -5
  104. package/rollup.config.js +0 -40
  105. package/src/components/app-bar/app-bar.stories.tsx +0 -54
  106. package/src/components/app-bar/app-bar.test.tsx +0 -142
  107. package/src/components/app-bar/app-bar.tsx +0 -150
  108. package/src/components/app-bar/app-bar.types.ts +0 -16
  109. package/src/components/app-bar/index.ts +0 -3
  110. package/src/components/app-bar/mini-app-bar/index.ts +0 -1
  111. package/src/components/app-bar/mini-app-bar/mini-app-bar.tsx +0 -31
  112. package/src/components/bullet/bullet.stories.tsx +0 -43
  113. package/src/components/bullet/bullet.test.tsx +0 -24
  114. package/src/components/bullet/bullet.tsx +0 -30
  115. package/src/components/bullet/index.ts +0 -1
  116. package/src/components/center-container/center-container.stories.tsx +0 -50
  117. package/src/components/center-container/center-container.test.tsx +0 -16
  118. package/src/components/center-container/center-container.tsx +0 -32
  119. package/src/components/center-container/index.ts +0 -1
  120. package/src/components/drawer/__snapshots__/drawer.test.tsx.snap +0 -20
  121. package/src/components/drawer/drawer.context.ts +0 -20
  122. package/src/components/drawer/drawer.mixins.ts +0 -24
  123. package/src/components/drawer/drawer.mock.tsx +0 -100
  124. package/src/components/drawer/drawer.provider.tsx +0 -23
  125. package/src/components/drawer/drawer.test.tsx +0 -97
  126. package/src/components/drawer/drawer.tsx +0 -30
  127. package/src/components/drawer/drawer.types.ts +0 -53
  128. package/src/components/drawer/index.ts +0 -5
  129. package/src/components/drawer/mini-drawer/index.ts +0 -1
  130. package/src/components/drawer/mini-drawer/mini-drawer.stories.tsx +0 -34
  131. package/src/components/drawer/mini-drawer/mini-drawer.tsx +0 -67
  132. package/src/components/drawer-content/drawer-content.stories.tsx +0 -29
  133. package/src/components/drawer-content/drawer-content.test.tsx +0 -34
  134. package/src/components/drawer-content/drawer-content.tsx +0 -18
  135. package/src/components/drawer-content/index.ts +0 -1
  136. package/src/components/drawer-item/drawer-item.stories.tsx +0 -62
  137. package/src/components/drawer-item/drawer-item.test.tsx +0 -119
  138. package/src/components/drawer-item/drawer-item.tsx +0 -69
  139. package/src/components/drawer-item/index.ts +0 -1
  140. package/src/components/drawer-section/drawer-section.mock.tsx +0 -39
  141. package/src/components/drawer-section/drawer-section.stories.tsx +0 -28
  142. package/src/components/drawer-section/drawer-section.test.tsx +0 -44
  143. package/src/components/drawer-section/drawer-section.tsx +0 -40
  144. package/src/components/drawer-section/index.ts +0 -1
  145. package/src/components/header/header.dummy.ts +0 -55
  146. package/src/components/header/header.stories.tsx +0 -116
  147. package/src/components/header/header.test.tsx +0 -167
  148. package/src/components/header/header.tsx +0 -185
  149. package/src/components/header/index.ts +0 -1
  150. package/src/components/index.ts +0 -17
  151. package/src/components/label/index.ts +0 -1
  152. package/src/components/label/label.stories.tsx +0 -49
  153. package/src/components/label/label.test.tsx +0 -30
  154. package/src/components/label/label.tsx +0 -60
  155. package/src/components/link/index.ts +0 -1
  156. package/src/components/link/link.tsx +0 -17
  157. package/src/components/loading-area/index.ts +0 -1
  158. package/src/components/loading-area/loading-area.stories.tsx +0 -17
  159. package/src/components/loading-area/loading-area.test.tsx +0 -11
  160. package/src/components/loading-area/loading-area.tsx +0 -13
  161. package/src/components/placeholder/index.ts +0 -1
  162. package/src/components/placeholder/placeholder.mock.ts +0 -15
  163. package/src/components/placeholder/placeholder.stories.tsx +0 -44
  164. package/src/components/placeholder/placeholder.test.tsx +0 -76
  165. package/src/components/placeholder/placeholder.tsx +0 -75
  166. package/src/components/query-container/index.ts +0 -1
  167. package/src/components/query-container/query-container.stories.tsx +0 -68
  168. package/src/components/query-container/query-container.test.tsx +0 -95
  169. package/src/components/query-container/query-container.tsx +0 -71
  170. package/src/components/sign-in/index.ts +0 -1
  171. package/src/components/sign-in/sign-in.stories.tsx +0 -36
  172. package/src/components/sign-in/sign-in.test.tsx +0 -95
  173. package/src/components/sign-in/sign-in.tsx +0 -97
  174. package/src/components/tab/index.ts +0 -3
  175. package/src/components/tab/tab-card/index.ts +0 -1
  176. package/src/components/tab/tab-card/tab-card.dummy.tsx +0 -27
  177. package/src/components/tab/tab-card/tab-card.stories.tsx +0 -22
  178. package/src/components/tab/tab-card/tab-card.test.tsx +0 -53
  179. package/src/components/tab/tab-card/tab-card.tsx +0 -30
  180. package/src/components/tab/tab-panel/index.ts +0 -1
  181. package/src/components/tab/tab-panel/tab-panel.test.tsx +0 -26
  182. package/src/components/tab/tab-panel/tab-panel.tsx +0 -27
  183. package/src/components/tab/tab.context.ts +0 -5
  184. package/src/components/table/enhanced-remote-table/enhanced-remote-table.mock.tsx +0 -27
  185. package/src/components/table/enhanced-remote-table/enhanced-remote-table.stories.tsx +0 -24
  186. package/src/components/table/enhanced-remote-table/enhanced-remote-table.test.tsx +0 -77
  187. package/src/components/table/enhanced-remote-table/enhanced-remote-table.tsx +0 -74
  188. package/src/components/table/enhanced-remote-table/index.ts +0 -1
  189. package/src/components/table/enhanced-table/enhanced-table-head.tsx +0 -58
  190. package/src/components/table/enhanced-table/enhanced-table.mock.tsx +0 -93
  191. package/src/components/table/enhanced-table/enhanced-table.stories.tsx +0 -21
  192. package/src/components/table/enhanced-table/enhanced-table.test.tsx +0 -107
  193. package/src/components/table/enhanced-table/enhanced-table.tsx +0 -136
  194. package/src/components/table/enhanced-table/index.ts +0 -2
  195. package/src/components/table/index.ts +0 -2
  196. package/src/components/table-list/index.ts +0 -1
  197. package/src/components/table-list/table-list.stories.tsx +0 -75
  198. package/src/components/table-list/table-list.test.tsx +0 -283
  199. package/src/components/table-list/table-list.tsx +0 -131
  200. package/src/components/value-displays/group-value-card/group-value-card.mock.tsx +0 -35
  201. package/src/components/value-displays/group-value-card/group-value-card.stories.tsx +0 -26
  202. package/src/components/value-displays/group-value-card/group-value-card.test.tsx +0 -58
  203. package/src/components/value-displays/group-value-card/group-value-card.tsx +0 -65
  204. package/src/components/value-displays/group-value-card/index.ts +0 -1
  205. package/src/components/value-displays/index.ts +0 -4
  206. package/src/components/value-displays/value-boolean/index.ts +0 -1
  207. package/src/components/value-displays/value-boolean/value-boolean.stories.tsx +0 -25
  208. package/src/components/value-displays/value-boolean/value-boolean.test.tsx +0 -27
  209. package/src/components/value-displays/value-boolean/value-boolean.tsx +0 -33
  210. package/src/components/value-displays/value-card/index.ts +0 -1
  211. package/src/components/value-displays/value-card/value-card.stories.tsx +0 -22
  212. package/src/components/value-displays/value-card/value-card.test.tsx +0 -18
  213. package/src/components/value-displays/value-card/value-card.tsx +0 -12
  214. package/src/components/value-displays/value-text/index.ts +0 -1
  215. package/src/components/value-displays/value-text/value-test.test.tsx +0 -21
  216. package/src/components/value-displays/value-text/value-text.stories.tsx +0 -26
  217. package/src/components/value-displays/value-text/value-text.tsx +0 -32
  218. package/src/generators/generators.mock.ts +0 -215
  219. package/src/generators/generators.model.ts +0 -41
  220. package/src/generators/index.ts +0 -4
  221. package/src/generators/model-form/index.ts +0 -1
  222. package/src/generators/model-form/model-form.stories.tsx +0 -30
  223. package/src/generators/model-form/model-form.test.tsx +0 -98
  224. package/src/generators/model-form/model-form.tsx +0 -97
  225. package/src/generators/model-router/index.ts +0 -1
  226. package/src/generators/model-router/model-router.stories.tsx +0 -160
  227. package/src/generators/model-router/model-router.test.tsx +0 -633
  228. package/src/generators/model-router/model-router.tsx +0 -54
  229. package/src/generators/model-router/screens/add-screen.tsx +0 -52
  230. package/src/generators/model-router/screens/details-screen.tsx +0 -53
  231. package/src/generators/model-router/screens/index.ts +0 -4
  232. package/src/generators/model-router/screens/list-screen.tsx +0 -81
  233. package/src/generators/model-router/screens/update-screen.tsx +0 -62
  234. package/src/generators/object-details/index.ts +0 -1
  235. package/src/generators/object-details/object-details.stories.tsx +0 -20
  236. package/src/generators/object-details/object-details.test.tsx +0 -21
  237. package/src/generators/object-details/object-details.tsx +0 -70
  238. package/src/index.ts +0 -4
  239. package/src/layouts/app-bar-with-drawer-layout/app-bar-with-drawer-layout.stories.tsx +0 -29
  240. package/src/layouts/app-bar-with-drawer-layout/app-bar-with-drawer-layout.tsx +0 -34
  241. package/src/layouts/app-bar-with-drawer-layout/index.ts +0 -1
  242. package/src/layouts/data-table-layout/data-table-layout.stories.tsx +0 -94
  243. package/src/layouts/data-table-layout/data-table-layout.tsx +0 -30
  244. package/src/layouts/data-table-layout/index.ts +0 -1
  245. package/src/layouts/details-layout/details-layout.stories.tsx +0 -81
  246. package/src/layouts/details-layout/details-layout.tsx +0 -33
  247. package/src/layouts/details-layout/index.ts +0 -1
  248. package/src/layouts/form-layout/form-layout.stories.tsx +0 -65
  249. package/src/layouts/form-layout/form-layout.tsx +0 -18
  250. package/src/layouts/form-layout/index.ts +0 -1
  251. package/src/layouts/header-layout/header-layout.stories.tsx +0 -68
  252. package/src/layouts/header-layout/header-layout.tsx +0 -24
  253. package/src/layouts/header-layout/index.ts +0 -1
  254. package/src/layouts/index.ts +0 -7
  255. package/src/layouts/list-layout/index.ts +0 -1
  256. package/src/layouts/list-layout/list-layout.stories.tsx +0 -102
  257. package/src/layouts/list-layout/list-layout.tsx +0 -36
  258. package/src/layouts/tab-layout/index.ts +0 -1
  259. package/src/layouts/tab-layout/tab-layout.stories.tsx +0 -88
  260. package/src/layouts/tab-layout/tab-layout.tsx +0 -11
  261. package/src/providers/index.ts +0 -1
  262. package/src/providers/notification-center/index.ts +0 -1
  263. package/src/providers/notification-center/notification-center.context.ts +0 -37
  264. package/src/providers/notification-center/notification-center.provider.tsx +0 -51
  265. package/src/providers/notification-center/notification-center.stories.tsx +0 -52
  266. package/src/providers/notification-center/notification-center.test.tsx +0 -112
  267. package/src/storybook.tsx +0 -56
  268. package/src/tests/assertions.ts +0 -72
  269. package/src/tests/components.tsx +0 -60
  270. package/src/tests/content-placeholder.stories.tsx +0 -16
  271. package/src/tests/index.ts +0 -3
  272. package/src/tests/skeleton-card.stories.tsx +0 -18
  273. package/src/tests/testing-library.tsx +0 -65
  274. package/src/utils/arrays.test.ts +0 -9
  275. package/src/utils/arrays.ts +0 -7
  276. package/src/utils/index.ts +0 -2
  277. package/src/utils/theme.ts +0 -6
  278. package/tsconfig.json +0 -27
  279. package/tsconfig.rollup.json +0 -26
@@ -1,167 +0,0 @@
1
- import React from "react";
2
- import { render, screen } from "../../tests";
3
- import userEvent from "@testing-library/user-event";
4
- import {
5
- Header,
6
- HeaderAction,
7
- HeaderActionVariant,
8
- HeaderBreadcrumb,
9
- HeaderPreset,
10
- HeaderTab,
11
- } from "./header";
12
- import { breadcrumbs, actions as actionsData, tabs } from "./header.dummy";
13
-
14
- const actions = actionsData.map((a) => ({ ...a, onClick: a.onClick && jest.fn() }));
15
-
16
- function renderInstance({
17
- title = "Lorem ipsum",
18
- subtitle,
19
- preset = "default",
20
- breadcrumbs,
21
- actions,
22
- actionsVariant,
23
- tabs,
24
- selectedTab,
25
- }: {
26
- title?: string;
27
- subtitle?: string | undefined;
28
- preset?: HeaderPreset;
29
- breadcrumbs?: HeaderBreadcrumb[];
30
- actions?: HeaderAction[];
31
- actionsVariant?: HeaderActionVariant;
32
- tabs?: HeaderTab[];
33
- selectedTab?: number;
34
- }) {
35
- const onChangeTab = jest.fn();
36
-
37
- const instance = render(
38
- <Header
39
- title={title}
40
- subtitle={subtitle}
41
- preset={preset}
42
- breadcrumbs={breadcrumbs}
43
- actions={actions}
44
- actionsVariant={actionsVariant}
45
- tabs={tabs}
46
- selectedTab={selectedTab}
47
- onChangeTab={onChangeTab}
48
- />,
49
- );
50
-
51
- return { ...instance, onChangeTab };
52
- }
53
-
54
- describe("Header", () => {
55
- it("renders the title", () => {
56
- renderInstance({ title: "Lorem ipsum" });
57
-
58
- expect(screen.getByRole("heading", { level: 1, name: /lorem ipsum/i })).toBeInTheDocument();
59
- });
60
-
61
- describe("subtitle", () => {
62
- it("would renders when is set", () => {
63
- renderInstance({ subtitle: "sit amet" });
64
-
65
- expect(screen.queryByRole("heading", { level: 2, name: /sit amet/i })).toBeInTheDocument();
66
- });
67
-
68
- it("wouldn't render if it is not set", () => {
69
- renderInstance({ subtitle: undefined });
70
-
71
- expect(screen.queryByRole("heading", { level: 2 })).not.toBeInTheDocument();
72
- });
73
- });
74
-
75
- describe("breadcrumbs", () => {
76
- it("would render a list of links", () => {
77
- renderInstance({ breadcrumbs });
78
-
79
- expect(screen.getByRole("link", { name: /items/i })).toBeInTheDocument();
80
- expect(screen.getByRole("link", { name: /item 1/i })).toBeInTheDocument();
81
- });
82
-
83
- it("would navigate to a breadcrumb when is", async () => {
84
- const { history } = renderInstance({ breadcrumbs });
85
-
86
- await userEvent.click(screen.getByRole("link", { name: /items/i }));
87
-
88
- expect(history.location.pathname).toBe("/items");
89
- });
90
- });
91
-
92
- describe("actions", () => {
93
- it("would render a list of buttons", () => {
94
- renderInstance({ actions });
95
-
96
- expect(screen.getByRole("button", { name: /add/i })).toBeInTheDocument();
97
- expect(screen.getByRole("button", { name: /edit/i })).toBeInTheDocument();
98
- expect(screen.getByRole("button", { name: /disabled/i })).toBeInTheDocument();
99
- expect(screen.getByRole("button", { name: /delete/i })).toBeInTheDocument();
100
- });
101
-
102
- it("clicks an action with an onClick defined it will be called", async () => {
103
- renderInstance({ actions });
104
-
105
- const button = actions[1];
106
-
107
- await userEvent.click(screen.getByRole("button", { name: button.text }));
108
-
109
- expect(button.onClick).toHaveBeenCalledTimes(1);
110
- });
111
-
112
- it("wouldn't be possible to click a disabled action", async () => {
113
- renderInstance({ actions });
114
-
115
- expect(screen.getByRole("button", { name: /disabled/i })).toBeDisabled();
116
- });
117
-
118
- it("would redirect to the expected url when click an action with an href", async () => {
119
- const { history } = renderInstance({ actions });
120
-
121
- await userEvent.click(screen.getByRole("button", { name: /add/i }));
122
-
123
- expect(history.location.pathname).toBe("/items/add");
124
- });
125
- });
126
-
127
- describe("tabs", () => {
128
- it("would render a list of tabs", () => {
129
- renderInstance({ tabs, selectedTab: 2 });
130
-
131
- expect(screen.getByRole("tab", { name: /tab 1/i })).toBeInTheDocument();
132
- expect(screen.getByRole("tab", { name: /tab 2/i })).toBeInTheDocument();
133
- expect(screen.getByRole("tab", { name: /tab 3/i })).toBeInTheDocument();
134
- });
135
-
136
- it("would mark as active the selectedTab", () => {
137
- renderInstance({ tabs, selectedTab: 2 });
138
-
139
- expect(screen.getByRole("tab", { name: /tab 1/i, selected: false })).toBeInTheDocument();
140
- expect(screen.getByRole("tab", { name: /tab 2/i, selected: false })).toBeInTheDocument();
141
- expect(screen.getByRole("tab", { name: /tab 3/i, selected: true })).toBeInTheDocument();
142
- });
143
-
144
- it("wouldn't be possible to click a disabled tab", () => {
145
- renderInstance({ tabs, selectedTab: 2 });
146
-
147
- expect(screen.getByRole("tab", { name: /tab 2/i })).toBeDisabled();
148
- });
149
-
150
- it("would call onChangeTab when a tab is clicked", async () => {
151
- const { onChangeTab } = renderInstance({ tabs, selectedTab: 0 });
152
-
153
- await userEvent.click(screen.getByRole("tab", { name: /tab 3/i }));
154
-
155
- expect(onChangeTab).toHaveBeenCalledTimes(1);
156
- expect(onChangeTab).toHaveBeenCalledWith(tabs[2], 2);
157
- });
158
-
159
- it("wouldn't call onChangeTab when the clicked tab is the selectedTab", async () => {
160
- const { onChangeTab } = renderInstance({ tabs, selectedTab: 2 });
161
-
162
- await userEvent.click(screen.getByRole("tab", { name: /tab 3/i }));
163
-
164
- expect(onChangeTab).not.toHaveBeenCalled();
165
- });
166
- });
167
- });
@@ -1,185 +0,0 @@
1
- import React from "react";
2
- import {
3
- Breadcrumbs,
4
- Typography,
5
- Container,
6
- useTheme,
7
- Box,
8
- Tabs,
9
- Tab,
10
- Button,
11
- } from "@mui/material";
12
- import { Link } from "../link";
13
- import { PropTypes } from "@mui/material";
14
- import { useGetDefaultThemeColor } from "../../utils";
15
-
16
- export type HeaderPreset = PropTypes.Color | "transparent";
17
- export type HeaderActionVariant = "text" | "outlined" | "contained";
18
-
19
- export type HeaderAction = {
20
- id: string;
21
- text: string;
22
- disabled?: boolean;
23
- href?: string;
24
- onClick?: () => void;
25
- };
26
-
27
- export interface HeaderBreadcrumb {
28
- id: string;
29
- text: string;
30
- link: string;
31
- }
32
-
33
- export interface HeaderTab {
34
- id: string;
35
- label: string;
36
- disabled?: boolean;
37
- }
38
-
39
- export type HeaderProps = {
40
- /**
41
- * Title of the header
42
- */
43
- title: string;
44
- /**
45
- * Subtitle of the header
46
- */
47
- subtitle?: string;
48
- /**
49
- * Color palete used to render the component
50
- */
51
- preset: HeaderPreset;
52
- /**
53
- * List of breadcumbs to represent the path to reach
54
- * the page that we are
55
- */
56
- breadcrumbs?: HeaderBreadcrumb[];
57
- /**
58
- * List of actions that can be performed by the user.
59
- * Each action will be a button in the header.
60
- */
61
- actions?: HeaderAction[];
62
- /**
63
- * Variant used to render the actions
64
- */
65
- actionsVariant?: HeaderActionVariant;
66
- /**
67
- * If is set, a list of tabs is dispayed at the bottom
68
- */
69
- tabs?: HeaderTab[];
70
- /**
71
- * Tab that has to be marked as selected
72
- */
73
- selectedTab?: number;
74
- /**
75
- * Callback executed when the user click a tab
76
- */
77
- onChangeTab?: (tab: HeaderTab, index: number) => void;
78
- };
79
-
80
- /**
81
- * Section used to explain give basic information about the page
82
- * and put the main actions
83
- */
84
- export const Header = ({
85
- title,
86
- subtitle,
87
- preset = "default",
88
- actionsVariant = "outlined",
89
- breadcrumbs,
90
- actions,
91
- tabs,
92
- selectedTab,
93
- onChangeTab = () => null,
94
- }: HeaderProps) => {
95
- const { palette } = useTheme();
96
- const defaultColor = useGetDefaultThemeColor();
97
-
98
- const bgColorPresets: Record<HeaderPreset, string> = {
99
- default: defaultColor,
100
- primary: palette.primary.main,
101
- secondary: palette.secondary.main,
102
- inherit: "inherit",
103
- transparent: "transparent",
104
- };
105
- const bgColor = bgColorPresets[preset];
106
- const textColorPresets: Record<HeaderPreset, string> = {
107
- default: palette.getContrastText(bgColorPresets.default),
108
- primary: palette.primary.contrastText,
109
- secondary: palette.secondary.contrastText,
110
- inherit: "inherit",
111
- transparent: palette.text.primary,
112
- };
113
- const textColor = textColorPresets[preset];
114
-
115
- return (
116
- <Box bgcolor={bgColor} color={textColor}>
117
- <Container>
118
- <Box sx={{ py: 3, display: "flex", flexDirection: "row", justifyContent: "space-between" }}>
119
- <Box>
120
- {breadcrumbs?.length && (
121
- <Breadcrumbs
122
- color="inherit"
123
- separator="›"
124
- aria-label="breadcrumb"
125
- sx={{ marginTop: 1 }}
126
- >
127
- {breadcrumbs.map(({ id, link, text }) => (
128
- <Link
129
- key={id}
130
- underline="hover"
131
- color="inherit"
132
- href={link}
133
- variant="body2"
134
- role="link"
135
- >
136
- {text}
137
- </Link>
138
- ))}
139
- </Breadcrumbs>
140
- )}
141
- <Typography variant="h4" role="heading" aria-level={1}>
142
- {title}
143
- </Typography>
144
- {subtitle && (
145
- <Typography variant="body1" role="heading" aria-level={2}>
146
- {subtitle}
147
- </Typography>
148
- )}
149
- </Box>
150
- {actions && (
151
- <Box>
152
- {actions.map(({ disabled, id, href, onClick, text }, i) => (
153
- <Button
154
- component={href ? Link : "button"}
155
- role="button"
156
- color="inherit"
157
- disabled={disabled}
158
- key={id}
159
- variant={actionsVariant}
160
- size="small"
161
- href={href}
162
- onClick={onClick}
163
- sx={{ mr: i != actions.length - 1 ? 1 : 0 }}
164
- >
165
- {text}
166
- </Button>
167
- ))}
168
- </Box>
169
- )}
170
- </Box>
171
- {tabs && (
172
- <Tabs
173
- value={selectedTab}
174
- textColor="inherit"
175
- onChange={(_, index) => onChangeTab(tabs[index], index)}
176
- >
177
- {tabs.map(({ id, label, disabled }) => (
178
- <Tab key={id} label={label} disabled={disabled} />
179
- ))}
180
- </Tabs>
181
- )}
182
- </Container>
183
- </Box>
184
- );
185
- };
@@ -1 +0,0 @@
1
- export * from "./header";
@@ -1,17 +0,0 @@
1
- export * from "./header";
2
- export * from "./link";
3
- export * from "./query-container";
4
- export * from "./sign-in";
5
- export * from "./tab";
6
- export * from "./table";
7
- export * from "./app-bar";
8
- export * from "./drawer";
9
- export * from "./table-list";
10
- export * from "./placeholder";
11
- export * from "./label";
12
- export * from "./bullet";
13
- export * from "./drawer-content";
14
- export * from "./drawer-section";
15
- export * from "./drawer-item";
16
- export * from "./center-container";
17
- export * from "./value-displays";
@@ -1 +0,0 @@
1
- export * from "./label";
@@ -1,49 +0,0 @@
1
- import { ComponentMeta } from "@storybook/react";
2
- import { createTemplate } from "../../storybook";
3
- import { Label } from "./label";
4
-
5
- export default {
6
- title: "Data Display/Label",
7
- component: Label,
8
- parameters: {
9
- layout: "centered",
10
- },
11
- } as ComponentMeta<typeof Label>;
12
-
13
- const Template = createTemplate(Label);
14
-
15
- export const Default = Template.bind({});
16
- Default.args = {
17
- text: "lorem",
18
- variant: "default",
19
- };
20
-
21
- export const Primary = Template.bind({});
22
- Primary.args = {
23
- text: "lorem",
24
- variant: "primary",
25
- };
26
-
27
- export const Secondary = Template.bind({});
28
- Secondary.args = {
29
- text: "lorem",
30
- variant: "secondary",
31
- };
32
-
33
- export const Info = Template.bind({});
34
- Info.args = {
35
- text: "lorem",
36
- variant: "info",
37
- };
38
-
39
- export const Warning = Template.bind({});
40
- Warning.args = {
41
- text: "lorem",
42
- variant: "warning",
43
- };
44
-
45
- export const Error = Template.bind({});
46
- Error.args = {
47
- text: "lorem",
48
- variant: "error",
49
- };
@@ -1,30 +0,0 @@
1
- import React from "react";
2
- import { Label, LabelVariant } from "./label";
3
- import { render, screen } from "../../tests";
4
-
5
- describe("Label", () => {
6
- const renderComponent = (variant: LabelVariant | undefined = undefined) => {
7
- return render(<Label variant={variant} text="lorem ipsum" />);
8
- };
9
-
10
- it("renders the label text", () => {
11
- renderComponent();
12
-
13
- expect(screen.getByText("LOREM IPSUM")).toBeInTheDocument();
14
- });
15
-
16
- it("renders as default without a variant", () => {
17
- renderComponent(undefined);
18
-
19
- expect(screen.getByRole("label")).toHaveAttribute("aria-describedby", "default");
20
- });
21
-
22
- it.each([["primary"], ["secondary"], ["default"], ["info"], ["warning"], ["error"]])(
23
- "renders correctly with variant %s",
24
- (variant: string) => {
25
- renderComponent(variant as LabelVariant);
26
-
27
- expect(screen.getByRole("label")).toHaveAttribute("aria-describedby", variant);
28
- },
29
- );
30
- });
@@ -1,60 +0,0 @@
1
- import { Box, Typography, useTheme } from "@mui/material";
2
- import React from "react";
3
-
4
- export type LabelVariant = "primary" | "secondary" | "default" | "info" | "warning" | "error";
5
-
6
- export const labelClasses = {
7
- root: "RdsLabel-root",
8
- };
9
-
10
- export interface LabelProps {
11
- /**
12
- * Content of the component
13
- */
14
- text: string;
15
- /**
16
- * Color palette used to draw the component
17
- */
18
- variant?: LabelVariant;
19
- }
20
-
21
- /**
22
- * Compact element to represent a text
23
- */
24
- export const Label = ({ text, variant = "default" }: LabelProps) => {
25
- const { palette } = useTheme();
26
-
27
- const backgroundColor: Record<LabelVariant, string> = {
28
- default: palette.mode === "light" ? palette.grey[100] : palette.grey[900],
29
- primary: palette.primary.main,
30
- secondary: palette.secondary.main,
31
- info: palette.info.main,
32
- warning: palette.warning.main,
33
- error: palette.error.main,
34
- };
35
-
36
- const textColor: Record<LabelVariant, string> = {
37
- default: palette.getContrastText(backgroundColor.default),
38
- primary: palette.primary.contrastText,
39
- secondary: palette.secondary.contrastText,
40
- info: palette.info.contrastText,
41
- warning: palette.warning.contrastText,
42
- error: palette.error.contrastText,
43
- };
44
-
45
- return (
46
- <Box
47
- px={1}
48
- sx={{ backgroundColor: backgroundColor[variant] }}
49
- borderRadius={1}
50
- color={textColor[variant]}
51
- className={labelClasses.root}
52
- role="label"
53
- aria-describedby={variant}
54
- >
55
- <Typography variant="caption" fontWeight={700}>
56
- {text.toUpperCase()}
57
- </Typography>
58
- </Box>
59
- );
60
- };
@@ -1 +0,0 @@
1
- export * from "./link";
@@ -1,17 +0,0 @@
1
- import React from "react";
2
- import { Link as RouterLink, LinkProps as RouterLinkProps } from "react-router-dom";
3
- import { forwardRef } from "react";
4
- import { LinkProps, Link as MuiLink } from "@mui/material";
5
-
6
- // eslint-disable-next-line react/display-name, @typescript-eslint/no-explicit-any
7
- export const LinkBehaviour = forwardRef<
8
- any,
9
- Omit<RouterLinkProps, "to"> & { href: RouterLinkProps["to"] }
10
- >((props, ref) => {
11
- const { href, ...other } = props;
12
- return <RouterLink ref={ref} to={href} {...other} />;
13
- });
14
-
15
- export const Link = forwardRef<any, LinkProps>((props, _) => {
16
- return <MuiLink {...props} component={LinkBehaviour} />;
17
- });
@@ -1 +0,0 @@
1
- export * from "./loading-area";
@@ -1,17 +0,0 @@
1
- import { ComponentMeta } from "@storybook/react";
2
- import { createTemplate, withContainer } from "../../storybook";
3
- import { LoadingArea } from "./loading-area";
4
-
5
- export default {
6
- title: "Components/LoadingArea",
7
- component: LoadingArea,
8
- decorators: [withContainer({ height: 300 })],
9
- parameters: {
10
- layout: "fullscreen",
11
- },
12
- } as ComponentMeta<typeof LoadingArea>;
13
-
14
- const Template = createTemplate(LoadingArea);
15
-
16
- export const Default = Template.bind({});
17
- Default.args = {};
@@ -1,11 +0,0 @@
1
- import React from "react";
2
- import { render, expectProgressIndicator } from "../../tests";
3
- import { LoadingArea } from "./loading-area";
4
-
5
- describe("LoadingArea", () => {
6
- it("would render a loading icon", () => {
7
- render(<LoadingArea />);
8
-
9
- expectProgressIndicator();
10
- });
11
- });
@@ -1,13 +0,0 @@
1
- import { CircularProgress, Box } from "@mui/material";
2
- import React from "react";
3
-
4
- /**
5
- * Displays a centered loading indicator
6
- */
7
- export const LoadingArea = () => {
8
- return (
9
- <Box width={1} height={1} display="flex" justifyContent="center" alignItems="center">
10
- <CircularProgress />
11
- </Box>
12
- );
13
- };
@@ -1 +0,0 @@
1
- export * from "./placeholder";
@@ -1,15 +0,0 @@
1
- import { PlaceholderAction } from "./placeholder";
2
- import { action } from "@storybook/addon-actions";
3
-
4
- export const actions: PlaceholderAction[] = [
5
- {
6
- id: "add",
7
- text: "Add",
8
- href: "/placeholders/add",
9
- },
10
- {
11
- id: "edit",
12
- text: "Edit",
13
- onClick: action("on click edit action"),
14
- },
15
- ];
@@ -1,44 +0,0 @@
1
- import React from "react";
2
- import { ComponentMeta } from "@storybook/react";
3
- import { createTemplate } from "../../storybook";
4
- import { Placeholder, PlaceholderIconArgs } from "./placeholder";
5
- import SearchIcon from "@mui/icons-material/Search";
6
- import { actions } from "./placeholder.mock";
7
-
8
- export default {
9
- title: "Components/Placeholder",
10
- component: Placeholder,
11
- parameters: {
12
- layout: "fullscreen",
13
- },
14
- } as ComponentMeta<typeof Placeholder>;
15
-
16
- const Template = createTemplate(Placeholder);
17
-
18
- export const Default = Template.bind({});
19
- Default.args = {
20
- title: "Lorem ipsum dolor sit amet",
21
- subtitle:
22
- "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi eleifend at libero in tristique. Pellentesque bibendum arcu eget augue commodo, non convallis eros porttitor",
23
- };
24
-
25
- export const WithIcon = Template.bind({});
26
- WithIcon.args = {
27
- icon: ({ size, color }: PlaceholderIconArgs) => (
28
- <SearchIcon color={color} sx={{ fontSize: size }} />
29
- ),
30
- title: "Lorem ipsum dolor sit amet",
31
- subtitle:
32
- "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi eleifend at libero in tristique. Pellentesque bibendum arcu eget augue commodo, non convallis eros porttitor",
33
- };
34
-
35
- export const WithActions = Template.bind({});
36
- WithActions.args = {
37
- icon: ({ size, color }: PlaceholderIconArgs) => (
38
- <SearchIcon color={color} sx={{ fontSize: size }} />
39
- ),
40
- title: "Lorem ipsum dolor sit amet",
41
- subtitle:
42
- "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi eleifend at libero in tristique. Pellentesque bibendum arcu eget augue commodo, non convallis eros porttitor",
43
- actions,
44
- };