@react5/ui 1.0.26 → 1.0.28

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 (188) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +2 -2
  3. package/package.json +38 -38
  4. package/packages/app/README.md +50 -50
  5. package/packages/app/eslint.config.js +28 -28
  6. package/packages/app/index.html +13 -13
  7. package/packages/app/jest.config.js +12 -12
  8. package/packages/app/package.json +36 -36
  9. package/packages/app/src/App.css +5 -5
  10. package/packages/app/src/App.tsx +35 -35
  11. package/packages/app/src/i18n/config.ts +21 -21
  12. package/packages/app/src/i18n/en/translation.json +4 -4
  13. package/packages/app/src/i18n/fr/translation.json +4 -4
  14. package/packages/app/src/i18n/index.ts +3 -3
  15. package/packages/app/src/main.tsx +16 -16
  16. package/packages/app/src/styles/1-reset.scss +72 -72
  17. package/packages/app/src/styles/2-colors.scss +11 -11
  18. package/packages/app/src/vite-env.d.ts +1 -1
  19. package/packages/app/tsconfig.app.json +26 -26
  20. package/packages/app/tsconfig.json +7 -7
  21. package/packages/app/tsconfig.node.json +24 -24
  22. package/packages/app/vite.config.ts +7 -7
  23. package/packages/lib/.babelrc +9 -9
  24. package/packages/lib/.storybook/main.js +50 -50
  25. package/packages/lib/.storybook/preview.js +13 -13
  26. package/packages/lib/declaration.d.ts +9 -9
  27. package/packages/lib/dist/esm/index.esm.css +0 -2
  28. package/packages/lib/dist/esm/index.esm.js +1 -1
  29. package/packages/lib/dist/esm/index.esm.js.map +1 -1
  30. package/packages/lib/dist/esm/index.esm.scss +1401 -1403
  31. package/packages/lib/dist/index.css +0 -2
  32. package/packages/lib/dist/index.js +1 -1
  33. package/packages/lib/dist/index.js.map +1 -1
  34. package/packages/lib/dist/index.scss +1401 -1403
  35. package/packages/lib/jest.config.js +19 -19
  36. package/packages/lib/package.json +100 -102
  37. package/packages/lib/plop/component/index.js +43 -43
  38. package/packages/lib/plop/index.js +3 -3
  39. package/packages/lib/plop/templates/component/component.hbs +19 -19
  40. package/packages/lib/plop/templates/component/index.hbs +1 -1
  41. package/packages/lib/plop/templates/component/stories.hbs +17 -17
  42. package/packages/lib/plop/templates/component/style.hbs +1 -1
  43. package/packages/lib/plop/templates/component/test.hbs +11 -11
  44. package/packages/lib/plopfile.js +1 -1
  45. package/packages/lib/rollup.config.mjs +64 -64
  46. package/packages/lib/src/components/Accordion/Accordion.scss +67 -67
  47. package/packages/lib/src/components/Accordion/Accordion.tsx +36 -36
  48. package/packages/lib/src/components/Button/Button.scss +60 -62
  49. package/packages/lib/src/components/Button/Button.stories.tsx +26 -26
  50. package/packages/lib/src/components/Button/Button.tsx +40 -40
  51. package/packages/lib/src/components/Button/index.tsx +1 -1
  52. package/packages/lib/src/components/ButtonsGroup/ButtonsGroup.scss +3 -3
  53. package/packages/lib/src/components/ButtonsGroup/ButtonsGroup.stories.tsx +17 -17
  54. package/packages/lib/src/components/ButtonsGroup/ButtonsGroup.test.tsx +11 -11
  55. package/packages/lib/src/components/ButtonsGroup/ButtonsGroup.tsx +17 -17
  56. package/packages/lib/src/components/ButtonsGroup/index.tsx +1 -1
  57. package/packages/lib/src/components/CheckBox/CheckBox.scss +63 -63
  58. package/packages/lib/src/components/CheckBox/CheckBox.stories.tsx +22 -22
  59. package/packages/lib/src/components/CheckBox/CheckBox.tsx +42 -42
  60. package/packages/lib/src/components/CheckBox/index.tsx +1 -1
  61. package/packages/lib/src/components/DialogPrompt/DialogPrompt.scss +6 -6
  62. package/packages/lib/src/components/DialogPrompt/DialogPrompt.stories.tsx +17 -17
  63. package/packages/lib/src/components/DialogPrompt/DialogPrompt.test.tsx +11 -11
  64. package/packages/lib/src/components/DialogPrompt/DialogPrompt.tsx +41 -41
  65. package/packages/lib/src/components/DialogPrompt/index.tsx +1 -1
  66. package/packages/lib/src/components/Divider/Divider.scss +22 -22
  67. package/packages/lib/src/components/Divider/Divider.tsx +20 -20
  68. package/packages/lib/src/components/DropDown/DropDown.scss +70 -70
  69. package/packages/lib/src/components/DropDown/DropDown.stories.tsx +45 -45
  70. package/packages/lib/src/components/DropDown/DropDown.tsx +61 -61
  71. package/packages/lib/src/components/DropDown/index.tsx +1 -1
  72. package/packages/lib/src/components/Form/Form.scss +3 -3
  73. package/packages/lib/src/components/Form/Form.stories.tsx +20 -20
  74. package/packages/lib/src/components/Form/Form.tsx +25 -25
  75. package/packages/lib/src/components/FormButtons/FormButtons.scss +5 -5
  76. package/packages/lib/src/components/FormButtons/FormButtons.tsx +18 -18
  77. package/packages/lib/src/components/HeaderButtons/HeaderButtons.scss +6 -6
  78. package/packages/lib/src/components/HeaderButtons/HeaderButtons.stories.tsx +17 -17
  79. package/packages/lib/src/components/HeaderButtons/HeaderButtons.test.tsx +11 -11
  80. package/packages/lib/src/components/HeaderButtons/HeaderButtons.tsx +28 -28
  81. package/packages/lib/src/components/HeaderButtons/index.tsx +1 -1
  82. package/packages/lib/src/components/IconButton/IconButton.scss +64 -64
  83. package/packages/lib/src/components/IconButton/IconButton.tsx +44 -44
  84. package/packages/lib/src/components/MenuItem/MenuItem.scss +13 -13
  85. package/packages/lib/src/components/MenuItem/MenuItem.tsx +36 -36
  86. package/packages/lib/src/components/Modal/Modal.scss +71 -71
  87. package/packages/lib/src/components/Modal/Modal.tsx +60 -60
  88. package/packages/lib/src/components/Navbar/Navbar.scss +52 -52
  89. package/packages/lib/src/components/Navbar/Navbar.stories.tsx +25 -25
  90. package/packages/lib/src/components/Navbar/Navbar.tsx +38 -38
  91. package/packages/lib/src/components/NavbarLink/NavbarLink.scss +15 -15
  92. package/packages/lib/src/components/NavbarLink/NavbarLink.tsx +34 -34
  93. package/packages/lib/src/components/NavbarMenu/NavbarMenu.scss +156 -156
  94. package/packages/lib/src/components/NavbarMenu/NavbarMenu.stories.tsx +24 -24
  95. package/packages/lib/src/components/NavbarMenu/NavbarMenu.tsx +72 -72
  96. package/packages/lib/src/components/Panel/Panel.scss +29 -29
  97. package/packages/lib/src/components/Panel/Panel.stories.tsx +32 -32
  98. package/packages/lib/src/components/Panel/Panel.test.tsx +11 -11
  99. package/packages/lib/src/components/Panel/Panel.tsx +29 -29
  100. package/packages/lib/src/components/Panel/index.tsx +1 -1
  101. package/packages/lib/src/components/Paper/Paper.scss +5 -5
  102. package/packages/lib/src/components/Paper/Paper.stories.tsx +18 -18
  103. package/packages/lib/src/components/Paper/Paper.tsx +18 -18
  104. package/packages/lib/src/components/Paper/index.tsx +1 -1
  105. package/packages/lib/src/components/RangeSlider/RangeSlider.scss +83 -83
  106. package/packages/lib/src/components/RangeSlider/RangeSlider.stories.tsx +24 -24
  107. package/packages/lib/src/components/RangeSlider/RangeSlider.tsx +150 -150
  108. package/packages/lib/src/components/ResponsiveBar/ResponsiveBar.scss +72 -72
  109. package/packages/lib/src/components/ResponsiveBar/ResponsiveBar.tsx +38 -38
  110. package/packages/lib/src/components/ScrollView/ScrollView.scss +20 -20
  111. package/packages/lib/src/components/ScrollView/ScrollView.stories.tsx +17 -17
  112. package/packages/lib/src/components/ScrollView/ScrollView.test.tsx +11 -11
  113. package/packages/lib/src/components/ScrollView/ScrollView.tsx +19 -19
  114. package/packages/lib/src/components/ScrollView/index.tsx +1 -1
  115. package/packages/lib/src/components/Section/Section.scss +17 -17
  116. package/packages/lib/src/components/Section/Section.tsx +26 -26
  117. package/packages/lib/src/components/SelectField/SelectField.scss +42 -42
  118. package/packages/lib/src/components/SelectField/SelectField.stories.tsx +14 -14
  119. package/packages/lib/src/components/SelectField/SelectField.tsx +54 -54
  120. package/packages/lib/src/components/SelectField/index.tsx +1 -1
  121. package/packages/lib/src/components/Spacer/Spacer.scss +2 -2
  122. package/packages/lib/src/components/Spacer/Spacer.tsx +6 -6
  123. package/packages/lib/src/components/StackPanel/StackPanel.scss +8 -8
  124. package/packages/lib/src/components/StackPanel/StackPanel.stories.tsx +17 -17
  125. package/packages/lib/src/components/StackPanel/StackPanel.test.tsx +11 -11
  126. package/packages/lib/src/components/StackPanel/StackPanel.tsx +31 -31
  127. package/packages/lib/src/components/StackPanel/index.tsx +1 -1
  128. package/packages/lib/src/components/Submenu/Submenu.scss +55 -55
  129. package/packages/lib/src/components/Submenu/Submenu.stories.tsx +45 -45
  130. package/packages/lib/src/components/Submenu/Submenu.tsx +59 -59
  131. package/packages/lib/src/components/Submenu/index.tsx +1 -1
  132. package/packages/lib/src/components/SuccessCongratulation/SuccessCongratulation.scss +75 -75
  133. package/packages/lib/src/components/SuccessCongratulation/SuccessCongratulation.stories.tsx +17 -17
  134. package/packages/lib/src/components/SuccessCongratulation/SuccessCongratulation.test.tsx +11 -11
  135. package/packages/lib/src/components/SuccessCongratulation/SuccessCongratulation.tsx +63 -63
  136. package/packages/lib/src/components/SuccessCongratulation/index.tsx +1 -1
  137. package/packages/lib/src/components/TextArea/TextArea.scss +41 -41
  138. package/packages/lib/src/components/TextArea/TextArea.stories.tsx +14 -14
  139. package/packages/lib/src/components/TextArea/TextArea.tsx +50 -50
  140. package/packages/lib/src/components/TextArea/index.tsx +1 -1
  141. package/packages/lib/src/components/TextField/TextField.scss +56 -56
  142. package/packages/lib/src/components/TextField/TextField.stories.tsx +14 -14
  143. package/packages/lib/src/components/TextField/TextField.tsx +89 -89
  144. package/packages/lib/src/components/TextField/index.tsx +1 -1
  145. package/packages/lib/src/components/TitleEdit/TitleEdit.scss +17 -17
  146. package/packages/lib/src/components/TitleEdit/TitleEdit.tsx +69 -69
  147. package/packages/lib/src/components/Toast/Toast.scss +32 -32
  148. package/packages/lib/src/components/Toast/Toast.tsx +29 -29
  149. package/packages/lib/src/components/ToggleButton/ToggleButton.scss +47 -47
  150. package/packages/lib/src/components/ToggleButton/ToggleButton.stories.tsx +22 -22
  151. package/packages/lib/src/components/ToggleButton/ToggleButton.tsx +41 -41
  152. package/packages/lib/src/components/ToggleButton/index.tsx +1 -1
  153. package/packages/lib/src/components/Toolbar/Toolbar.scss +16 -16
  154. package/packages/lib/src/components/Toolbar/Toolbar.stories.tsx +17 -17
  155. package/packages/lib/src/components/Toolbar/Toolbar.test.tsx +11 -11
  156. package/packages/lib/src/components/Toolbar/Toolbar.tsx +20 -20
  157. package/packages/lib/src/components/Toolbar/index.tsx +1 -1
  158. package/packages/lib/src/components/Typography/Typography.scss +51 -51
  159. package/packages/lib/src/components/Typography/Typography.stories.tsx +18 -18
  160. package/packages/lib/src/components/Typography/Typography.tsx +19 -19
  161. package/packages/lib/src/components/index.tsx +34 -34
  162. package/packages/lib/src/hooks/index.tsx +3 -3
  163. package/packages/lib/src/hooks/use-click-outside.tsx +19 -19
  164. package/packages/lib/src/hooks/use-form.tsx +107 -107
  165. package/packages/lib/src/hooks/use-keys-enteresc.tsx +25 -25
  166. package/packages/lib/src/hooks/use-set-startup-focus.tsx +8 -8
  167. package/packages/lib/src/i18n/config.ts +8 -8
  168. package/packages/lib/src/i18n/en/translation.json +11 -11
  169. package/packages/lib/src/i18n/fr/translation.json +11 -11
  170. package/packages/lib/src/i18n/index.ts +11 -11
  171. package/packages/lib/src/index.tsx +7 -7
  172. package/packages/lib/src/stories/Intrduction.mdx +171 -171
  173. package/packages/lib/src/stories/assets/github.svg +3 -3
  174. package/packages/lib/src/styles/1-color-vars.scss +51 -51
  175. package/packages/lib/src/styles/2-font-variables.scss +2 -2
  176. package/packages/lib/src/styles/variables.scss +1 -1
  177. package/packages/lib/src/test/i18n.ts +17 -17
  178. package/packages/lib/src/utils/bem.ts +4 -4
  179. package/packages/lib/src/utils/formatError.ts +5 -5
  180. package/packages/lib/src/utils/index.ts +1 -1
  181. package/packages/lib/src/utils/interfaces.ts +5 -5
  182. package/packages/lib/tsconfig.json +26 -25
  183. package/packages/lib/vite.config.js +18 -18
  184. package/packages/ui-test/package-lock.json +97 -97
  185. package/packages/ui-test/package.json +19 -19
  186. package/packages/ui-test/playwright.config.ts +80 -80
  187. package/packages/ui-test/tests/example.spec.ts +18 -18
  188. package/packages/ui-test/tests-examples/demo-todo-app.spec.ts +437 -437
@@ -1,45 +1,45 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
-
3
- import { DropDown } from './DropDown';
4
-
5
- const meta: Meta<typeof DropDown> = {
6
- component: DropDown,
7
- };
8
-
9
- export default meta;
10
- type Story = StoryObj<typeof DropDown>;
11
-
12
- /*
13
- *👇 Render functions are a framework specific feature to allow you control on how the component renders.
14
- * See https://storybook.js.org/docs/react/api/csf
15
- * to learn how to use render functions.
16
- */
17
- const items = [
18
- {
19
- label: 'Item 1',
20
- value: 'item1',
21
- },
22
- {
23
- label: 'Item 2',
24
- value: 'item2',
25
- },
26
- {
27
- label: 'Item 3',
28
- value: 'item3',
29
- },
30
- {
31
- label: 'Item 4',
32
- value: 'item4',
33
- },
34
- {
35
- label: 'Item 5',
36
- value: 'item5',
37
- },
38
- ];
39
- export const Primary: Story = {
40
- render: () => (
41
- <div style={{ backgroundColor: '#333' }}>
42
- <DropDown items={items} selectedItem={items[1]} />
43
- </div>
44
- ),
45
- };
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+
3
+ import { DropDown } from './DropDown';
4
+
5
+ const meta: Meta<typeof DropDown> = {
6
+ component: DropDown,
7
+ };
8
+
9
+ export default meta;
10
+ type Story = StoryObj<typeof DropDown>;
11
+
12
+ /*
13
+ *👇 Render functions are a framework specific feature to allow you control on how the component renders.
14
+ * See https://storybook.js.org/docs/react/api/csf
15
+ * to learn how to use render functions.
16
+ */
17
+ const items = [
18
+ {
19
+ label: 'Item 1',
20
+ value: 'item1',
21
+ },
22
+ {
23
+ label: 'Item 2',
24
+ value: 'item2',
25
+ },
26
+ {
27
+ label: 'Item 3',
28
+ value: 'item3',
29
+ },
30
+ {
31
+ label: 'Item 4',
32
+ value: 'item4',
33
+ },
34
+ {
35
+ label: 'Item 5',
36
+ value: 'item5',
37
+ },
38
+ ];
39
+ export const Primary: Story = {
40
+ render: () => (
41
+ <div style={{ backgroundColor: '#333' }}>
42
+ <DropDown items={items} selectedItem={items[1]} />
43
+ </div>
44
+ ),
45
+ };
@@ -1,62 +1,62 @@
1
- import { useState, useRef, useEffect } from "react"
2
- import './DropDown.scss'
3
- import { Button } from "../Button";
4
- import { bem } from '../../utils/bem';
5
- import clsx from "clsx";
6
-
7
- export interface IDropDownItem {
8
- label: string
9
- value: string
10
- }
11
- export interface IDropDownProps {
12
- items: IDropDownItem[]
13
- selectedItem?: IDropDownItem
14
- className?: string
15
- onChange?: (item: IDropDownItem) => void
16
- direction?: "up" | "down" | "left" | "right",
17
- variant?: "primary" | "secondary" | "link"
18
- }
19
- const b = bem("dropdown");
20
- export const DropDown = ({items, selectedItem, direction="down", variant="primary", onChange, className}: IDropDownProps) => {
21
- const [isOpen, setIsOpen] = useState(false);
22
- const dropdownRef: any = useRef(null);
23
-
24
- useEffect(() => {
25
- const handleClickOutside = (event: MouseEvent) => {
26
- if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
27
- setIsOpen(false);
28
- }
29
- };
30
- document.addEventListener('mousedown', handleClickOutside);
31
- return () => {
32
- document.removeEventListener('mousedown', handleClickOutside);
33
- };
34
- }, []);
35
-
36
- const toggleDropdown = () => setIsOpen((prevIsOpen: boolean) => !prevIsOpen);
37
- const handleChange = (item: IDropDownItem) => () => {
38
- onChange && onChange(item);
39
- setIsOpen(false);
40
- }
41
-
42
- const listClass = `${b("list")} ${b("list", direction)}`;
43
-
44
- return (<div className={clsx(b(), className)} ref={dropdownRef}>
45
- <Button className={b("button", direction)} variant={variant} onClick={toggleDropdown}>
46
- {selectedItem?.label || ""}
47
- <span className={clsx(b("indicator"), b(`indicator-${variant}`),
48
- b("indicator", direction), isOpen && b("indicator", "open"))}
49
- />
50
- </Button>
51
- {isOpen && (
52
- <ul className={listClass}>
53
- {
54
- items.map((c, i) => (
55
- <li key={i} className={b("item")} onClick={handleChange(c)}>{c.label}</li>
56
- ))
57
- }
58
- </ul>
59
- )}
60
- </div>
61
- )
1
+ import { useState, useRef, useEffect } from "react"
2
+ import './DropDown.scss'
3
+ import { Button } from "../Button";
4
+ import { bem } from '../../utils/bem';
5
+ import clsx from "clsx";
6
+
7
+ export interface IDropDownItem {
8
+ label: string
9
+ value: string
10
+ }
11
+ export interface IDropDownProps {
12
+ items: IDropDownItem[]
13
+ selectedItem?: IDropDownItem
14
+ className?: string
15
+ onChange?: (item: IDropDownItem) => void
16
+ direction?: "up" | "down" | "left" | "right",
17
+ variant?: "primary" | "secondary" | "link"
18
+ }
19
+ const b = bem("dropdown");
20
+ export const DropDown = ({items, selectedItem, direction="down", variant="primary", onChange, className}: IDropDownProps) => {
21
+ const [isOpen, setIsOpen] = useState(false);
22
+ const dropdownRef: any = useRef(null);
23
+
24
+ useEffect(() => {
25
+ const handleClickOutside = (event: MouseEvent) => {
26
+ if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
27
+ setIsOpen(false);
28
+ }
29
+ };
30
+ document.addEventListener('mousedown', handleClickOutside);
31
+ return () => {
32
+ document.removeEventListener('mousedown', handleClickOutside);
33
+ };
34
+ }, []);
35
+
36
+ const toggleDropdown = () => setIsOpen((prevIsOpen: boolean) => !prevIsOpen);
37
+ const handleChange = (item: IDropDownItem) => () => {
38
+ onChange && onChange(item);
39
+ setIsOpen(false);
40
+ }
41
+
42
+ const listClass = `${b("list")} ${b("list", direction)}`;
43
+
44
+ return (<div className={clsx(b(), className)} ref={dropdownRef}>
45
+ <Button className={b("button", direction)} variant={variant} onClick={toggleDropdown}>
46
+ {selectedItem?.label || ""}
47
+ <span className={clsx(b("indicator"), b(`indicator-${variant}`),
48
+ b("indicator", direction), isOpen && b("indicator", "open"))}
49
+ />
50
+ </Button>
51
+ {isOpen && (
52
+ <ul className={listClass}>
53
+ {
54
+ items.map((c, i) => (
55
+ <li key={i} className={b("item")} onClick={handleChange(c)}>{c.label}</li>
56
+ ))
57
+ }
58
+ </ul>
59
+ )}
60
+ </div>
61
+ )
62
62
  }
@@ -1 +1 @@
1
- export * from "./DropDown"
1
+ export * from "./DropDown"
@@ -1,4 +1,4 @@
1
- .r5ui-form {
2
- display: flex;
3
- flex-direction: column;
1
+ .r5ui-form {
2
+ display: flex;
3
+ flex-direction: column;
4
4
  }
@@ -1,20 +1,20 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
-
3
- import { Form } from './Form';
4
-
5
- const meta: Meta<typeof Form> = {
6
- component: Form,
7
- };
8
-
9
- export default meta;
10
- type Story = StoryObj<typeof Form>;
11
-
12
- export const Primary: Story = {
13
- render: () => (
14
- <div style={{ backgroundColor: '#333' }}>
15
- <Form>
16
- <a href="#">Link</a>
17
- </Form>
18
- </div>
19
- ),
20
- };
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+
3
+ import { Form } from './Form';
4
+
5
+ const meta: Meta<typeof Form> = {
6
+ component: Form,
7
+ };
8
+
9
+ export default meta;
10
+ type Story = StoryObj<typeof Form>;
11
+
12
+ export const Primary: Story = {
13
+ render: () => (
14
+ <div style={{ backgroundColor: '#333' }}>
15
+ <Form>
16
+ <a href="#">Link</a>
17
+ </Form>
18
+ </div>
19
+ ),
20
+ };
@@ -1,25 +1,25 @@
1
- import clsx from "clsx";
2
- import "./Form.scss";
3
- import type { FormEvent, ReactNode } from "react";
4
- import { bem } from '../../utils/bem';
5
-
6
- export interface IFormProps {
7
- className?: string;
8
- children: ReactNode;
9
- onSubmit?: (event: FormEvent<HTMLFormElement>) => void;
10
- }
11
-
12
- const b = bem("form");
13
- export const Form = ({children, onSubmit, className}: IFormProps) => {
14
- const handleSubmit = (e: FormEvent<HTMLFormElement>) => {
15
- if(onSubmit) {
16
- e.preventDefault();
17
- onSubmit(e);
18
- }
19
- }
20
- return (<form method="post" onSubmit={handleSubmit} className={clsx(b(), className)}>
21
- {children}
22
- </form>)
23
- }
24
-
25
- export default Form
1
+ import clsx from "clsx";
2
+ import "./Form.scss";
3
+ import type { FormEvent, ReactNode } from "react";
4
+ import { bem } from '../../utils/bem';
5
+
6
+ export interface IFormProps {
7
+ className?: string;
8
+ children: ReactNode;
9
+ onSubmit?: (event: FormEvent<HTMLFormElement>) => void;
10
+ }
11
+
12
+ const b = bem("form");
13
+ export const Form = ({children, onSubmit, className}: IFormProps) => {
14
+ const handleSubmit = (e: FormEvent<HTMLFormElement>) => {
15
+ if(onSubmit) {
16
+ e.preventDefault();
17
+ onSubmit(e);
18
+ }
19
+ }
20
+ return (<form method="post" onSubmit={handleSubmit} className={clsx(b(), className)}>
21
+ {children}
22
+ </form>)
23
+ }
24
+
25
+ export default Form
@@ -1,6 +1,6 @@
1
- .r5ui-form-buttons {
2
- display: block;
3
- text-align: right;
4
- color: $page_text_color;
5
- margin-top: auto;
1
+ .r5ui-form-buttons {
2
+ display: block;
3
+ text-align: right;
4
+ color: $page_text_color;
5
+ margin-top: auto;
6
6
  }
@@ -1,18 +1,18 @@
1
- import clsx from "clsx";
2
- import "./FormButtons.scss";
3
- import type { ReactNode } from "react";
4
- import { bem } from '../../utils/bem';
5
-
6
- export interface IFormButtonsProps {
7
- className?: string;
8
- children: ReactNode;
9
- }
10
-
11
- const b = bem("form-buttons");
12
- export const FormButtons = ({children, className}: IFormButtonsProps) => {
13
- return (<div className={clsx(b(), className)}>
14
- {children}
15
- </div>)
16
- }
17
-
18
- export default FormButtons
1
+ import clsx from "clsx";
2
+ import "./FormButtons.scss";
3
+ import type { ReactNode } from "react";
4
+ import { bem } from '../../utils/bem';
5
+
6
+ export interface IFormButtonsProps {
7
+ className?: string;
8
+ children: ReactNode;
9
+ }
10
+
11
+ const b = bem("form-buttons");
12
+ export const FormButtons = ({children, className}: IFormButtonsProps) => {
13
+ return (<div className={clsx(b(), className)}>
14
+ {children}
15
+ </div>)
16
+ }
17
+
18
+ export default FormButtons
@@ -1,6 +1,6 @@
1
- .r5ui-header-buttons {
2
- position: absolute;
3
- top: 0;
4
- right: 0;
5
- margin: 0.4rem 0.4rem 0 0;
6
- }
1
+ .r5ui-header-buttons {
2
+ position: absolute;
3
+ top: 0;
4
+ right: 0;
5
+ margin: 0.4rem 0.4rem 0 0;
6
+ }
@@ -1,17 +1,17 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- import { HeaderButtons } from './HeaderButtons';
3
-
4
- const meta: Meta<typeof HeaderButtons> = {
5
- title: 'Example/HeaderButtons',
6
- component: HeaderButtons,
7
- argTypes: {
8
- backgroundColor: { control: 'color' },
9
- },
10
- } as Meta;
11
- export default meta;
12
-
13
- type Story = StoryObj<typeof HeaderButtons>;
14
-
15
- export const TextHeaderButtons: Story = {
16
- render: () => <HeaderButtons></HeaderButtons>,
17
- };
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { HeaderButtons } from './HeaderButtons';
3
+
4
+ const meta: Meta<typeof HeaderButtons> = {
5
+ title: 'Example/HeaderButtons',
6
+ component: HeaderButtons,
7
+ argTypes: {
8
+ backgroundColor: { control: 'color' },
9
+ },
10
+ } as Meta;
11
+ export default meta;
12
+
13
+ type Story = StoryObj<typeof HeaderButtons>;
14
+
15
+ export const TextHeaderButtons: Story = {
16
+ render: () => <HeaderButtons></HeaderButtons>,
17
+ };
@@ -1,12 +1,12 @@
1
- import React from 'react';
2
- import { render, screen, fireEvent } from '@testing-library/react';
3
- import '@testing-library/jest-dom';
4
- import { HeaderButtons } from './HeaderButtons';
5
-
6
- describe('HeaderButtons Component', () => {
7
- test('renders the button with the correct label', () => {
8
- render(<HeaderButtons onClose={jest.fn()} ></HeaderButtons>);
9
- const div = screen.getByRole('HeaderButtons', { name: /click me/i });
10
- expect(div).toBeInTheDocument();
11
- });
1
+ import React from 'react';
2
+ import { render, screen, fireEvent } from '@testing-library/react';
3
+ import '@testing-library/jest-dom';
4
+ import { HeaderButtons } from './HeaderButtons';
5
+
6
+ describe('HeaderButtons Component', () => {
7
+ test('renders the button with the correct label', () => {
8
+ render(<HeaderButtons onClose={jest.fn()} ></HeaderButtons>);
9
+ const div = screen.getByRole('HeaderButtons', { name: /click me/i });
10
+ expect(div).toBeInTheDocument();
11
+ });
12
12
  });
@@ -1,29 +1,29 @@
1
- import './HeaderButtons.scss'
2
- import clsx from 'clsx';
3
- import { bem } from "../../utils/bem";
4
- import { IconButton } from '../IconButton';
5
- import { FaPen, FaXmark } from 'react-icons/fa6';
6
- import { Toolbar } from '../Toolbar';
7
-
8
- interface HeaderButtonsProps {
9
- className?: string;
10
- onClose?: () => void;
11
- onEdit?: () => void;
12
- }
13
- const b = bem("header-buttons");
14
- export const HeaderButtons = ({onClose, onEdit, className}: HeaderButtonsProps) => {
15
- return (
16
- <Toolbar className={clsx(b(), className)} align='right'>
17
- {onEdit &&
18
- <IconButton className={b("close")} variant='round-outlined' onClick={onEdit}>
19
- <FaPen/>
20
- </IconButton>
21
- }
22
- {onClose &&
23
- <IconButton className={b("close")} variant='round-outlined' onClick={onClose}>
24
- <FaXmark/>
25
- </IconButton>
26
- }</Toolbar>
27
- )
28
- }
1
+ import './HeaderButtons.scss'
2
+ import clsx from 'clsx';
3
+ import { bem } from "../../utils/bem";
4
+ import { IconButton } from '../IconButton';
5
+ import { FaPen, FaXmark } from 'react-icons/fa6';
6
+ import { Toolbar } from '../Toolbar';
7
+
8
+ interface HeaderButtonsProps {
9
+ className?: string;
10
+ onClose?: () => void;
11
+ onEdit?: () => void;
12
+ }
13
+ const b = bem("header-buttons");
14
+ export const HeaderButtons = ({onClose, onEdit, className}: HeaderButtonsProps) => {
15
+ return (
16
+ <Toolbar className={clsx(b(), className)} align='right'>
17
+ {onEdit &&
18
+ <IconButton className={b("close")} variant='round-outlined' onClick={onEdit}>
19
+ <FaPen/>
20
+ </IconButton>
21
+ }
22
+ {onClose &&
23
+ <IconButton className={b("close")} variant='round-outlined' onClick={onClose}>
24
+ <FaXmark/>
25
+ </IconButton>
26
+ }</Toolbar>
27
+ )
28
+ }
29
29
  export default HeaderButtons
@@ -1 +1 @@
1
- export * from "./HeaderButtons";
1
+ export * from "./HeaderButtons";
@@ -1,65 +1,65 @@
1
- .r5ui-icon-button {
2
- display: flex;
3
- align-items: center;
4
- justify-content: center;
5
- margin: 0; //.5em 0 0 .5em;
6
- padding: 0;
7
- border: 0;
8
- background-color: transparent;
9
- color: $link_color;
10
- font-weight: bold;
11
- text-align: center;
12
- text-decoration: none;
13
- transition: color 0.3s ease;
14
- cursor: pointer;
15
- gap: 10px;
16
-
17
- &:disabled {
18
- cursor: not-allowed;
19
- }
20
-
21
- &:hover {
22
- color: $link_color_highlight;
23
- }
24
- svg {
25
- vertical-align: middle;
26
- }
27
-
28
- &__rounded {
29
- display: flex;
30
- align-items: center;
31
- gap: 0.5rem;
32
- border-radius: 1em;
33
- height: 2rem;
34
- padding: 0 1rem;
35
- margin-left: 0;
36
- background-color: $primary_bg_color;
37
- color: $primary_text_color;
38
-
39
- // > * {
40
- // margin-left: 0.5em;
41
- // }
42
-
43
- &:disabled {
44
- color: $primary_text_color_disabled;
45
- }
46
- }
47
- &__round {
48
- border-radius: 1rem;
49
- height: 2rem;
50
- width: 2rem;
51
- padding: 0 6px;
52
- margin-left: 0;
53
- background-color: $primary_bg_color;
54
- color: $primary_text_color;
55
- }
56
- &__round-outlined {
57
- border-radius: 1rem;
58
- height: 2rem;
59
- width: 2rem;
60
- padding: 0 6px;
61
- margin-left: 0;
62
- border: 1px solid $page_text_color;
63
- color: $page_text_color;
64
- }
1
+ .r5ui-icon-button {
2
+ display: flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ margin: 0; //.5em 0 0 .5em;
6
+ padding: 0;
7
+ border: 0;
8
+ background-color: transparent;
9
+ color: $link_color;
10
+ font-weight: bold;
11
+ text-align: center;
12
+ text-decoration: none;
13
+ transition: color 0.3s ease;
14
+ cursor: pointer;
15
+ gap: 10px;
16
+
17
+ &:disabled {
18
+ cursor: not-allowed;
19
+ }
20
+
21
+ &:hover {
22
+ color: $link_color_highlight;
23
+ }
24
+ svg {
25
+ vertical-align: middle;
26
+ }
27
+
28
+ &__rounded {
29
+ display: flex;
30
+ align-items: center;
31
+ gap: 0.5rem;
32
+ border-radius: 1em;
33
+ height: 2rem;
34
+ padding: 0 1rem;
35
+ margin-left: 0;
36
+ background-color: $primary_bg_color;
37
+ color: $primary_text_color;
38
+
39
+ // > * {
40
+ // margin-left: 0.5em;
41
+ // }
42
+
43
+ &:disabled {
44
+ color: $primary_text_color_disabled;
45
+ }
46
+ }
47
+ &__round {
48
+ border-radius: 1rem;
49
+ height: 2rem;
50
+ width: 2rem;
51
+ padding: 0 6px;
52
+ margin-left: 0;
53
+ background-color: $primary_bg_color;
54
+ color: $primary_text_color;
55
+ }
56
+ &__round-outlined {
57
+ border-radius: 1rem;
58
+ height: 2rem;
59
+ width: 2rem;
60
+ padding: 0 6px;
61
+ margin-left: 0;
62
+ border: 1px solid $page_text_color;
63
+ color: $page_text_color;
64
+ }
65
65
  }