@react5/ui 1.0.27 → 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 (186) 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.js +1 -1
  28. package/packages/lib/dist/esm/index.esm.js.map +1 -1
  29. package/packages/lib/dist/esm/index.esm.scss +1401 -1401
  30. package/packages/lib/dist/index.js +1 -1
  31. package/packages/lib/dist/index.js.map +1 -1
  32. package/packages/lib/dist/index.scss +1401 -1401
  33. package/packages/lib/jest.config.js +19 -19
  34. package/packages/lib/package.json +100 -102
  35. package/packages/lib/plop/component/index.js +43 -43
  36. package/packages/lib/plop/index.js +3 -3
  37. package/packages/lib/plop/templates/component/component.hbs +19 -19
  38. package/packages/lib/plop/templates/component/index.hbs +1 -1
  39. package/packages/lib/plop/templates/component/stories.hbs +17 -17
  40. package/packages/lib/plop/templates/component/style.hbs +1 -1
  41. package/packages/lib/plop/templates/component/test.hbs +11 -11
  42. package/packages/lib/plopfile.js +1 -1
  43. package/packages/lib/rollup.config.mjs +64 -64
  44. package/packages/lib/src/components/Accordion/Accordion.scss +67 -67
  45. package/packages/lib/src/components/Accordion/Accordion.tsx +36 -36
  46. package/packages/lib/src/components/Button/Button.scss +60 -60
  47. package/packages/lib/src/components/Button/Button.stories.tsx +26 -26
  48. package/packages/lib/src/components/Button/Button.tsx +40 -40
  49. package/packages/lib/src/components/Button/index.tsx +1 -1
  50. package/packages/lib/src/components/ButtonsGroup/ButtonsGroup.scss +3 -3
  51. package/packages/lib/src/components/ButtonsGroup/ButtonsGroup.stories.tsx +17 -17
  52. package/packages/lib/src/components/ButtonsGroup/ButtonsGroup.test.tsx +11 -11
  53. package/packages/lib/src/components/ButtonsGroup/ButtonsGroup.tsx +17 -17
  54. package/packages/lib/src/components/ButtonsGroup/index.tsx +1 -1
  55. package/packages/lib/src/components/CheckBox/CheckBox.scss +63 -63
  56. package/packages/lib/src/components/CheckBox/CheckBox.stories.tsx +22 -22
  57. package/packages/lib/src/components/CheckBox/CheckBox.tsx +42 -42
  58. package/packages/lib/src/components/CheckBox/index.tsx +1 -1
  59. package/packages/lib/src/components/DialogPrompt/DialogPrompt.scss +6 -6
  60. package/packages/lib/src/components/DialogPrompt/DialogPrompt.stories.tsx +17 -17
  61. package/packages/lib/src/components/DialogPrompt/DialogPrompt.test.tsx +11 -11
  62. package/packages/lib/src/components/DialogPrompt/DialogPrompt.tsx +41 -41
  63. package/packages/lib/src/components/DialogPrompt/index.tsx +1 -1
  64. package/packages/lib/src/components/Divider/Divider.scss +22 -22
  65. package/packages/lib/src/components/Divider/Divider.tsx +20 -20
  66. package/packages/lib/src/components/DropDown/DropDown.scss +70 -70
  67. package/packages/lib/src/components/DropDown/DropDown.stories.tsx +45 -45
  68. package/packages/lib/src/components/DropDown/DropDown.tsx +61 -61
  69. package/packages/lib/src/components/DropDown/index.tsx +1 -1
  70. package/packages/lib/src/components/Form/Form.scss +3 -3
  71. package/packages/lib/src/components/Form/Form.stories.tsx +20 -20
  72. package/packages/lib/src/components/Form/Form.tsx +25 -25
  73. package/packages/lib/src/components/FormButtons/FormButtons.scss +5 -5
  74. package/packages/lib/src/components/FormButtons/FormButtons.tsx +18 -18
  75. package/packages/lib/src/components/HeaderButtons/HeaderButtons.scss +6 -6
  76. package/packages/lib/src/components/HeaderButtons/HeaderButtons.stories.tsx +17 -17
  77. package/packages/lib/src/components/HeaderButtons/HeaderButtons.test.tsx +11 -11
  78. package/packages/lib/src/components/HeaderButtons/HeaderButtons.tsx +28 -28
  79. package/packages/lib/src/components/HeaderButtons/index.tsx +1 -1
  80. package/packages/lib/src/components/IconButton/IconButton.scss +64 -64
  81. package/packages/lib/src/components/IconButton/IconButton.tsx +44 -44
  82. package/packages/lib/src/components/MenuItem/MenuItem.scss +13 -13
  83. package/packages/lib/src/components/MenuItem/MenuItem.tsx +36 -36
  84. package/packages/lib/src/components/Modal/Modal.scss +71 -71
  85. package/packages/lib/src/components/Modal/Modal.tsx +60 -60
  86. package/packages/lib/src/components/Navbar/Navbar.scss +52 -52
  87. package/packages/lib/src/components/Navbar/Navbar.stories.tsx +25 -25
  88. package/packages/lib/src/components/Navbar/Navbar.tsx +38 -38
  89. package/packages/lib/src/components/NavbarLink/NavbarLink.scss +15 -15
  90. package/packages/lib/src/components/NavbarLink/NavbarLink.tsx +34 -34
  91. package/packages/lib/src/components/NavbarMenu/NavbarMenu.scss +156 -156
  92. package/packages/lib/src/components/NavbarMenu/NavbarMenu.stories.tsx +24 -24
  93. package/packages/lib/src/components/NavbarMenu/NavbarMenu.tsx +72 -72
  94. package/packages/lib/src/components/Panel/Panel.scss +29 -29
  95. package/packages/lib/src/components/Panel/Panel.stories.tsx +32 -32
  96. package/packages/lib/src/components/Panel/Panel.test.tsx +11 -11
  97. package/packages/lib/src/components/Panel/Panel.tsx +29 -29
  98. package/packages/lib/src/components/Panel/index.tsx +1 -1
  99. package/packages/lib/src/components/Paper/Paper.scss +5 -5
  100. package/packages/lib/src/components/Paper/Paper.stories.tsx +18 -18
  101. package/packages/lib/src/components/Paper/Paper.tsx +18 -18
  102. package/packages/lib/src/components/Paper/index.tsx +1 -1
  103. package/packages/lib/src/components/RangeSlider/RangeSlider.scss +83 -83
  104. package/packages/lib/src/components/RangeSlider/RangeSlider.stories.tsx +24 -24
  105. package/packages/lib/src/components/RangeSlider/RangeSlider.tsx +150 -150
  106. package/packages/lib/src/components/ResponsiveBar/ResponsiveBar.scss +72 -72
  107. package/packages/lib/src/components/ResponsiveBar/ResponsiveBar.tsx +38 -38
  108. package/packages/lib/src/components/ScrollView/ScrollView.scss +20 -20
  109. package/packages/lib/src/components/ScrollView/ScrollView.stories.tsx +17 -17
  110. package/packages/lib/src/components/ScrollView/ScrollView.test.tsx +11 -11
  111. package/packages/lib/src/components/ScrollView/ScrollView.tsx +19 -19
  112. package/packages/lib/src/components/ScrollView/index.tsx +1 -1
  113. package/packages/lib/src/components/Section/Section.scss +17 -17
  114. package/packages/lib/src/components/Section/Section.tsx +26 -26
  115. package/packages/lib/src/components/SelectField/SelectField.scss +42 -42
  116. package/packages/lib/src/components/SelectField/SelectField.stories.tsx +14 -14
  117. package/packages/lib/src/components/SelectField/SelectField.tsx +54 -54
  118. package/packages/lib/src/components/SelectField/index.tsx +1 -1
  119. package/packages/lib/src/components/Spacer/Spacer.scss +2 -2
  120. package/packages/lib/src/components/Spacer/Spacer.tsx +6 -6
  121. package/packages/lib/src/components/StackPanel/StackPanel.scss +8 -8
  122. package/packages/lib/src/components/StackPanel/StackPanel.stories.tsx +17 -17
  123. package/packages/lib/src/components/StackPanel/StackPanel.test.tsx +11 -11
  124. package/packages/lib/src/components/StackPanel/StackPanel.tsx +31 -31
  125. package/packages/lib/src/components/StackPanel/index.tsx +1 -1
  126. package/packages/lib/src/components/Submenu/Submenu.scss +55 -55
  127. package/packages/lib/src/components/Submenu/Submenu.stories.tsx +45 -45
  128. package/packages/lib/src/components/Submenu/Submenu.tsx +59 -59
  129. package/packages/lib/src/components/Submenu/index.tsx +1 -1
  130. package/packages/lib/src/components/SuccessCongratulation/SuccessCongratulation.scss +75 -75
  131. package/packages/lib/src/components/SuccessCongratulation/SuccessCongratulation.stories.tsx +17 -17
  132. package/packages/lib/src/components/SuccessCongratulation/SuccessCongratulation.test.tsx +11 -11
  133. package/packages/lib/src/components/SuccessCongratulation/SuccessCongratulation.tsx +63 -63
  134. package/packages/lib/src/components/SuccessCongratulation/index.tsx +1 -1
  135. package/packages/lib/src/components/TextArea/TextArea.scss +41 -41
  136. package/packages/lib/src/components/TextArea/TextArea.stories.tsx +14 -14
  137. package/packages/lib/src/components/TextArea/TextArea.tsx +50 -50
  138. package/packages/lib/src/components/TextArea/index.tsx +1 -1
  139. package/packages/lib/src/components/TextField/TextField.scss +56 -56
  140. package/packages/lib/src/components/TextField/TextField.stories.tsx +14 -14
  141. package/packages/lib/src/components/TextField/TextField.tsx +89 -89
  142. package/packages/lib/src/components/TextField/index.tsx +1 -1
  143. package/packages/lib/src/components/TitleEdit/TitleEdit.scss +17 -17
  144. package/packages/lib/src/components/TitleEdit/TitleEdit.tsx +69 -69
  145. package/packages/lib/src/components/Toast/Toast.scss +32 -32
  146. package/packages/lib/src/components/Toast/Toast.tsx +29 -29
  147. package/packages/lib/src/components/ToggleButton/ToggleButton.scss +47 -47
  148. package/packages/lib/src/components/ToggleButton/ToggleButton.stories.tsx +22 -22
  149. package/packages/lib/src/components/ToggleButton/ToggleButton.tsx +41 -41
  150. package/packages/lib/src/components/ToggleButton/index.tsx +1 -1
  151. package/packages/lib/src/components/Toolbar/Toolbar.scss +16 -16
  152. package/packages/lib/src/components/Toolbar/Toolbar.stories.tsx +17 -17
  153. package/packages/lib/src/components/Toolbar/Toolbar.test.tsx +11 -11
  154. package/packages/lib/src/components/Toolbar/Toolbar.tsx +20 -20
  155. package/packages/lib/src/components/Toolbar/index.tsx +1 -1
  156. package/packages/lib/src/components/Typography/Typography.scss +51 -51
  157. package/packages/lib/src/components/Typography/Typography.stories.tsx +18 -18
  158. package/packages/lib/src/components/Typography/Typography.tsx +19 -19
  159. package/packages/lib/src/components/index.tsx +34 -34
  160. package/packages/lib/src/hooks/index.tsx +3 -3
  161. package/packages/lib/src/hooks/use-click-outside.tsx +19 -19
  162. package/packages/lib/src/hooks/use-form.tsx +107 -107
  163. package/packages/lib/src/hooks/use-keys-enteresc.tsx +25 -25
  164. package/packages/lib/src/hooks/use-set-startup-focus.tsx +8 -8
  165. package/packages/lib/src/i18n/config.ts +8 -8
  166. package/packages/lib/src/i18n/en/translation.json +11 -11
  167. package/packages/lib/src/i18n/fr/translation.json +11 -11
  168. package/packages/lib/src/i18n/index.ts +11 -11
  169. package/packages/lib/src/index.tsx +7 -7
  170. package/packages/lib/src/stories/Intrduction.mdx +171 -171
  171. package/packages/lib/src/stories/assets/github.svg +3 -3
  172. package/packages/lib/src/styles/1-color-vars.scss +51 -51
  173. package/packages/lib/src/styles/2-font-variables.scss +2 -2
  174. package/packages/lib/src/styles/variables.scss +1 -1
  175. package/packages/lib/src/test/i18n.ts +17 -17
  176. package/packages/lib/src/utils/bem.ts +4 -4
  177. package/packages/lib/src/utils/formatError.ts +5 -5
  178. package/packages/lib/src/utils/index.ts +1 -1
  179. package/packages/lib/src/utils/interfaces.ts +5 -5
  180. package/packages/lib/tsconfig.json +26 -25
  181. package/packages/lib/vite.config.js +18 -18
  182. package/packages/ui-test/package-lock.json +97 -97
  183. package/packages/ui-test/package.json +19 -19
  184. package/packages/ui-test/playwright.config.ts +80 -80
  185. package/packages/ui-test/tests/example.spec.ts +18 -18
  186. 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
  }