@react-ui-org/react-ui 0.53.0 → 0.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -5
- package/dist/react-ui.css +36 -38
- package/dist/react-ui.development.css +10800 -0
- package/dist/react-ui.development.js +1568 -0
- package/dist/react-ui.js +1 -1
- package/package.json +7 -4
- package/src/components/Alert/Alert.jsx +1 -1
- package/src/components/Alert/Alert.module.scss +100 -0
- package/src/components/Alert/README.md +9 -7
- package/src/components/Badge/Badge.jsx +1 -1
- package/src/components/Badge/Badge.module.scss +109 -0
- package/src/components/Badge/README.md +9 -7
- package/src/components/Button/Button.jsx +1 -1
- package/src/components/Button/README.md +9 -7
- package/src/components/Button/_base.scss +117 -115
- package/src/components/Button/_priorities.scss +135 -133
- package/src/components/ButtonGroup/ButtonGroup.jsx +1 -1
- package/src/components/ButtonGroup/ButtonGroup.module.scss +35 -0
- package/src/components/ButtonGroup/README.md +10 -8
- package/src/components/Card/Card.jsx +1 -1
- package/src/components/Card/Card.module.scss +72 -0
- package/src/components/Card/CardBody.jsx +1 -1
- package/src/components/Card/CardFooter.jsx +1 -1
- package/src/components/Card/README.md +9 -7
- package/src/components/CheckboxField/CheckboxField.jsx +1 -1
- package/src/components/CheckboxField/CheckboxField.module.scss +63 -0
- package/src/components/CheckboxField/README.md +10 -8
- package/src/components/FileInputField/FileInputField.jsx +1 -1
- package/src/components/FileInputField/FileInputField.module.scss +65 -0
- package/src/components/FileInputField/README.md +10 -8
- package/src/components/FormLayout/FormLayout.jsx +1 -1
- package/src/components/FormLayout/{FormLayout.scss → FormLayout.module.scss} +30 -28
- package/src/components/FormLayout/FormLayoutCustomField.jsx +1 -1
- package/src/components/FormLayout/FormLayoutCustomField.module.scss +65 -0
- package/src/components/FormLayout/README.md +11 -9
- package/src/components/Grid/Grid.jsx +1 -1
- package/src/components/Grid/Grid.module.scss +66 -0
- package/src/components/Grid/GridSpan.jsx +1 -1
- package/src/components/Grid/README.md +11 -8
- package/src/components/InputGroup/InputGroup.jsx +9 -1
- package/src/components/InputGroup/InputGroup.module.scss +93 -0
- package/src/components/InputGroup/README.md +27 -10
- package/src/components/Modal/Modal.jsx +1 -1
- package/src/components/Modal/Modal.module.scss +80 -0
- package/src/components/Modal/ModalBody.jsx +1 -1
- package/src/components/Modal/ModalBody.module.scss +20 -0
- package/src/components/Modal/ModalCloseButton.jsx +1 -1
- package/src/components/Modal/ModalCloseButton.module.scss +20 -0
- package/src/components/Modal/ModalContent.jsx +1 -1
- package/src/components/Modal/ModalContent.module.scss +7 -0
- package/src/components/Modal/ModalFooter.jsx +1 -1
- package/src/components/Modal/ModalFooter.module.scss +37 -0
- package/src/components/Modal/ModalHeader.jsx +1 -1
- package/src/components/Modal/ModalHeader.module.scss +32 -0
- package/src/components/Modal/ModalTitle.jsx +1 -1
- package/src/components/Modal/ModalTitle.module.scss +12 -0
- package/src/components/Modal/README.md +17 -14
- package/src/components/Paper/Paper.jsx +1 -1
- package/src/components/Paper/Paper.module.scss +19 -0
- package/src/components/Paper/README.md +9 -7
- package/src/components/Popover/Popover.jsx +1 -1
- package/src/components/Popover/Popover.module.scss +238 -0
- package/src/components/Popover/PopoverWrapper.jsx +1 -2
- package/src/components/Popover/PopoverWrapper.module.scss +5 -0
- package/src/components/Popover/README.md +9 -7
- package/src/components/Radio/README.md +12 -10
- package/src/components/Radio/Radio.jsx +1 -1
- package/src/components/Radio/Radio.module.scss +85 -0
- package/src/components/ScrollView/README.md +10 -8
- package/src/components/ScrollView/ScrollView.jsx +1 -1
- package/src/components/ScrollView/ScrollView.module.scss +233 -0
- package/src/components/SelectField/README.md +10 -8
- package/src/components/SelectField/SelectField.jsx +1 -1
- package/src/components/SelectField/SelectField.module.scss +111 -0
- package/src/components/Table/README.md +10 -8
- package/src/components/Table/Table.jsx +1 -1
- package/src/components/Table/Table.module.scss +30 -0
- package/src/components/Table/_components/TableBodyCell/TableBodyCell.jsx +1 -1
- package/src/components/Table/_components/TableCell.module.scss +28 -0
- package/src/components/Table/_components/TableHeaderCell/TableHeaderCell.jsx +1 -1
- package/src/components/Tabs/README.md +16 -10
- package/src/components/Tabs/Tabs.jsx +1 -1
- package/src/components/Tabs/Tabs.module.scss +31 -0
- package/src/components/Tabs/TabsItem.jsx +1 -1
- package/src/components/Tabs/TabsItem.module.scss +119 -0
- package/src/components/Text/README.md +15 -9
- package/src/components/Text/Text.jsx +1 -1
- package/src/components/Text/Text.module.scss +42 -0
- package/src/components/TextArea/README.md +10 -8
- package/src/components/TextArea/TextArea.jsx +1 -1
- package/src/components/TextArea/TextArea.module.scss +97 -0
- package/src/components/TextField/README.md +13 -8
- package/src/components/TextField/TextField.jsx +1 -1
- package/src/components/TextField/TextField.module.scss +109 -0
- package/src/components/TextLink/README.md +10 -8
- package/src/components/TextLink/TextLink.jsx +1 -1
- package/src/components/TextLink/TextLink.module.scss +18 -0
- package/src/components/Toggle/README.md +10 -8
- package/src/components/Toggle/Toggle.jsx +1 -1
- package/src/components/Toggle/Toggle.module.scss +63 -0
- package/src/components/Toolbar/README.md +9 -7
- package/src/components/Toolbar/Toolbar.jsx +1 -1
- package/src/components/Toolbar/Toolbar.module.scss +85 -0
- package/src/components/Toolbar/ToolbarGroup.jsx +1 -1
- package/src/components/Toolbar/ToolbarItem.jsx +1 -1
- package/src/components/_helpers/transferProps.js +47 -7
- package/src/foundation.scss +22 -17
- package/src/helpers.scss +12 -8
- package/src/index.js +3 -4
- package/src/index.scss +7 -0
- package/src/layers.scss +4 -0
- package/src/styles/elements/_page.scss +0 -4
- package/src/styles/helpers/_animation.scss +2 -2
- package/src/styles/tools/_utilities.scss +1 -1
- package/src/theme.scss +1040 -1038
- package/CODEOWNERS +0 -23
- package/src/components/Alert/Alert.scss +0 -98
- package/src/components/Badge/Badge.scss +0 -107
- package/src/components/ButtonGroup/ButtonGroup.scss +0 -33
- package/src/components/Card/Card.scss +0 -70
- package/src/components/CheckboxField/CheckboxField.scss +0 -61
- package/src/components/FileInputField/FileInputField.scss +0 -63
- package/src/components/FormLayout/FormLayoutCustomField.scss +0 -63
- package/src/components/Grid/Grid.scss +0 -63
- package/src/components/InputGroup/InputGroup.scss +0 -87
- package/src/components/Modal/Modal.scss +0 -78
- package/src/components/Modal/ModalBody.scss +0 -18
- package/src/components/Modal/ModalCloseButton.scss +0 -18
- package/src/components/Modal/ModalContent.scss +0 -5
- package/src/components/Modal/ModalFooter.scss +0 -35
- package/src/components/Modal/ModalHeader.scss +0 -30
- package/src/components/Modal/ModalTitle.scss +0 -10
- package/src/components/Paper/Paper.scss +0 -17
- package/src/components/Popover/Popover.scss +0 -236
- package/src/components/Popover/PopoverWrapper.scss +0 -3
- package/src/components/Radio/Radio.scss +0 -83
- package/src/components/ScrollView/ScrollView.scss +0 -227
- package/src/components/SelectField/SelectField.scss +0 -109
- package/src/components/Table/Table.scss +0 -28
- package/src/components/Table/_components/TableCell.scss +0 -26
- package/src/components/Tabs/Tabs.scss +0 -28
- package/src/components/Tabs/TabsItem.scss +0 -117
- package/src/components/Text/Text.scss +0 -40
- package/src/components/TextArea/TextArea.scss +0 -95
- package/src/components/TextField/TextField.scss +0 -107
- package/src/components/TextLink/TextLink.scss +0 -16
- package/src/components/Toggle/Toggle.scss +0 -61
- package/src/components/Toolbar/Toolbar.scss +0 -83
- /package/src/components/Button/{Button.scss → Button.module.scss} +0 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
@use "sass:map";
|
|
2
|
+
@use "../../styles/theme/typography";
|
|
3
|
+
@use "../../styles/tools/accessibility";
|
|
4
|
+
@use "../../styles/tools/breakpoint";
|
|
5
|
+
@use "../../styles/tools/reset";
|
|
6
|
+
@use "../../styles/tools/spacing";
|
|
7
|
+
@use "settings";
|
|
8
|
+
@use "theme";
|
|
9
|
+
|
|
10
|
+
@layer components.modal {
|
|
11
|
+
.root {
|
|
12
|
+
--rui-local-outer-spacing: #{theme.$outer-spacing-xs};
|
|
13
|
+
--rui-local-max-width: calc(100% - (2 * var(--rui-local-outer-spacing)));
|
|
14
|
+
--rui-local-max-height: calc(100% - (2 * var(--rui-local-outer-spacing)));
|
|
15
|
+
|
|
16
|
+
position: fixed;
|
|
17
|
+
left: 50%;
|
|
18
|
+
z-index: settings.$z-index;
|
|
19
|
+
display: flex;
|
|
20
|
+
flex-direction: column;
|
|
21
|
+
max-width: var(--rui-local-max-width);
|
|
22
|
+
max-height: var(--rui-local-max-height);
|
|
23
|
+
overflow-y: auto;
|
|
24
|
+
overscroll-behavior: contain;
|
|
25
|
+
border-radius: settings.$border-radius;
|
|
26
|
+
background: theme.$background;
|
|
27
|
+
box-shadow: theme.$box-shadow;
|
|
28
|
+
transform: translateX(-50%);
|
|
29
|
+
|
|
30
|
+
@include breakpoint.up(sm) {
|
|
31
|
+
--rui-local-outer-spacing: #{theme.$outer-spacing-sm};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.backdrop {
|
|
36
|
+
position: fixed;
|
|
37
|
+
top: 0;
|
|
38
|
+
left: 0;
|
|
39
|
+
z-index: settings.$backdrop-z-index;
|
|
40
|
+
width: 100vw;
|
|
41
|
+
height: 100vh;
|
|
42
|
+
background: theme.$backdrop-background;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.isRootSizeSmall {
|
|
46
|
+
width: map.get(theme.$sizes, small, width);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.isRootSizeMedium {
|
|
50
|
+
width: map.get(theme.$sizes, medium, width);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.isRootSizeLarge {
|
|
54
|
+
width: map.get(theme.$sizes, large, width);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.isRootSizeFullscreen {
|
|
58
|
+
width: map.get(theme.$sizes, fullscreen, width);
|
|
59
|
+
height: map.get(theme.$sizes, fullscreen, height);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.isRootSizeFullscreen .content {
|
|
63
|
+
height: 100%;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.isRootSizeAuto {
|
|
67
|
+
width: auto;
|
|
68
|
+
min-width: min(var(--rui-local-max-width), #{map.get(theme.$sizes, auto, min-width)});
|
|
69
|
+
max-width: min(var(--rui-local-max-width), #{map.get(theme.$sizes, auto, max-width)});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.isRootPositionCenter {
|
|
73
|
+
top: 50%;
|
|
74
|
+
transform: translate(-50%, -50%);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.isRootPositionTop {
|
|
78
|
+
top: var(--rui-local-outer-spacing);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -5,7 +5,7 @@ import { transferProps } from '../_helpers/transferProps';
|
|
|
5
5
|
import { classNames } from '../../utils/classNames';
|
|
6
6
|
import { isChildrenEmpty } from '../_helpers/isChildrenEmpty';
|
|
7
7
|
import { getScrollingClassName } from './_helpers/getScrollingClassName';
|
|
8
|
-
import styles from './ModalBody.scss';
|
|
8
|
+
import styles from './ModalBody.module.scss';
|
|
9
9
|
|
|
10
10
|
export const ModalBody = ({
|
|
11
11
|
children,
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
@layer components.modal {
|
|
2
|
+
.root {
|
|
3
|
+
flex: 1 1 auto;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.isRootScrollingAuto,
|
|
7
|
+
.isRootScrollingCustom {
|
|
8
|
+
min-height: 0;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.isRootScrollingAuto {
|
|
12
|
+
overflow-y: auto;
|
|
13
|
+
overscroll-behavior: contain;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.isRootScrollingCustom {
|
|
17
|
+
display: flex;
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
withGlobalProps,
|
|
6
6
|
} from '../../provider';
|
|
7
7
|
import { transferProps } from '../_helpers/transferProps';
|
|
8
|
-
import styles from './ModalCloseButton.scss';
|
|
8
|
+
import styles from './ModalCloseButton.module.scss';
|
|
9
9
|
|
|
10
10
|
export const ModalCloseButton = React.forwardRef((props, ref) => {
|
|
11
11
|
const {
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
@use "sass:map";
|
|
2
|
+
@use "../../styles/theme/typography";
|
|
3
|
+
@use "../../styles/tools/accessibility";
|
|
4
|
+
@use "../../styles/tools/reset";
|
|
5
|
+
@use "../../styles/tools/spacing";
|
|
6
|
+
|
|
7
|
+
@layer components.modal {
|
|
8
|
+
.root {
|
|
9
|
+
@include reset.button();
|
|
10
|
+
@include accessibility.min-tap-target();
|
|
11
|
+
|
|
12
|
+
font-size: map.get(typography.$font-size-values, 4);
|
|
13
|
+
line-height: 1;
|
|
14
|
+
color: inherit;
|
|
15
|
+
|
|
16
|
+
&:disabled {
|
|
17
|
+
cursor: var(--rui-cursor-not-allowed);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -3,7 +3,7 @@ import React from 'react';
|
|
|
3
3
|
import { withGlobalProps } from '../../provider';
|
|
4
4
|
import { isChildrenEmpty } from '../_helpers/isChildrenEmpty';
|
|
5
5
|
import { transferProps } from '../_helpers/transferProps';
|
|
6
|
-
import styles from './ModalContent.scss';
|
|
6
|
+
import styles from './ModalContent.module.scss';
|
|
7
7
|
|
|
8
8
|
export const ModalContent = ({
|
|
9
9
|
children,
|
|
@@ -4,7 +4,7 @@ import { withGlobalProps } from '../../provider';
|
|
|
4
4
|
import { transferProps } from '../_helpers/transferProps';
|
|
5
5
|
import { classNames } from '../../utils/classNames';
|
|
6
6
|
import { getJustifyClassName } from './_helpers/getJustifyClassName';
|
|
7
|
-
import styles from './ModalFooter.scss';
|
|
7
|
+
import styles from './ModalFooter.module.scss';
|
|
8
8
|
|
|
9
9
|
export const ModalFooter = ({
|
|
10
10
|
children,
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
@use "settings";
|
|
2
|
+
@use "theme";
|
|
3
|
+
|
|
4
|
+
@layer components.modal {
|
|
5
|
+
.root {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex: none;
|
|
8
|
+
flex-wrap: wrap;
|
|
9
|
+
gap: theme.$footer-gap;
|
|
10
|
+
align-items: center;
|
|
11
|
+
padding: theme.$padding-y theme.$padding-x;
|
|
12
|
+
border-top: theme.$separator-width solid theme.$separator-color;
|
|
13
|
+
border-bottom-right-radius: settings.$border-radius;
|
|
14
|
+
border-bottom-left-radius: settings.$border-radius;
|
|
15
|
+
background: theme.$footer-background;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.isRootJustifiedToStart {
|
|
19
|
+
justify-content: flex-start;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.isRootJustifiedToCenter {
|
|
23
|
+
justify-content: center;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.isRootJustifiedToEnd {
|
|
27
|
+
justify-content: flex-end;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.isRootJustifiedToSpaceBetween {
|
|
31
|
+
justify-content: space-between;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.isRootJustifiedToStretch {
|
|
35
|
+
display: block;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
import { transferProps } from '../_helpers/transferProps';
|
|
7
7
|
import { classNames } from '../../utils/classNames';
|
|
8
8
|
import { getJustifyClassName } from './_helpers/getJustifyClassName';
|
|
9
|
-
import styles from './ModalHeader.scss';
|
|
9
|
+
import styles from './ModalHeader.module.scss';
|
|
10
10
|
|
|
11
11
|
export const ModalHeader = ({
|
|
12
12
|
children,
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
@use "theme";
|
|
2
|
+
|
|
3
|
+
@layer components.modal {
|
|
4
|
+
.root {
|
|
5
|
+
display: flex;
|
|
6
|
+
flex: none;
|
|
7
|
+
gap: theme.$header-gap;
|
|
8
|
+
align-items: baseline;
|
|
9
|
+
padding: theme.$padding-y theme.$padding-x;
|
|
10
|
+
border-bottom: theme.$separator-width solid theme.$separator-color;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.isRootJustifiedToStart {
|
|
14
|
+
justify-content: flex-start;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.isRootJustifiedToCenter {
|
|
18
|
+
justify-content: center;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.isRootJustifiedToEnd {
|
|
22
|
+
justify-content: flex-end;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.isRootJustifiedToSpaceBetween {
|
|
26
|
+
justify-content: space-between;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.isRootJustifiedToStretch {
|
|
30
|
+
display: block;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -1015,22 +1015,25 @@ opened.
|
|
|
1015
1015
|
## Forwarding HTML Attributes
|
|
1016
1016
|
|
|
1017
1017
|
In addition to the options below in the [component's API](#api) section, you
|
|
1018
|
-
can specify
|
|
1019
|
-
|
|
1018
|
+
can specify **any HTML attribute you like.** All attributes that don't interfere
|
|
1019
|
+
with the API of the React component are forwarded to:
|
|
1020
1020
|
|
|
1021
|
-
- `<div>` HTML element in case of the `Modal` component. This `<div>` is not
|
|
1022
|
-
root, but its first child which represents the modal window.
|
|
1023
|
-
- root `<div>` HTML element in case of `ModalHeader`, `ModalBody`, `ModalContent`
|
|
1021
|
+
- the `<div>` HTML element in case of the `Modal` component. This `<div>` is not
|
|
1022
|
+
the root, but its first child which represents the modal window.
|
|
1023
|
+
- the root `<div>` HTML element in case of `ModalHeader`, `ModalBody`, `ModalContent`
|
|
1024
1024
|
and `ModalFooter` components.
|
|
1025
|
-
- heading HTML element
|
|
1026
|
-
|
|
1027
|
-
- native HTML `<button>` in case of the `ModalCloseButton` component.
|
|
1025
|
+
- the heading (e.g. `<h1>`) HTML element in case of the `ModalTitle` component.
|
|
1026
|
+
- the native HTML `<button>` in case of the `ModalCloseButton` component.
|
|
1028
1027
|
|
|
1029
1028
|
This enables making the component interactive and helps to improve its
|
|
1030
1029
|
accessibility.
|
|
1031
1030
|
|
|
1032
|
-
👉
|
|
1033
|
-
|
|
1031
|
+
👉 For the full list of supported attributes refer to:
|
|
1032
|
+
|
|
1033
|
+
- [`<div>` HTML element attributes][div-attributes]{:target="_blank"}
|
|
1034
|
+
- [`<h1>`-`<h6>` HTML element attributes][heading-attributes]{:target="_blank"}
|
|
1035
|
+
- [`<button>` HTML element attributes][button-attributes]{:target="_blank"}
|
|
1036
|
+
- [React common props]{:target="_blank"}
|
|
1034
1037
|
|
|
1035
1038
|
## API
|
|
1036
1039
|
|
|
@@ -1084,7 +1087,7 @@ accessibility.
|
|
|
1084
1087
|
| `--rui-Modal--fullscreen__width` | Width of fullscreen modal |
|
|
1085
1088
|
| `--rui-Modal--fullscreen__height` | Height of fullscreen modal |
|
|
1086
1089
|
|
|
1087
|
-
[
|
|
1088
|
-
[div]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div#attributes
|
|
1089
|
-
[heading]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements#attributes
|
|
1090
|
-
[
|
|
1090
|
+
[button-attributes]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attributes
|
|
1091
|
+
[div-attributes]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div#attributes
|
|
1092
|
+
[heading-attributes]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements#attributes
|
|
1093
|
+
[React common props]: https://react.dev/reference/react-dom/components/common#common-props
|
|
@@ -3,7 +3,7 @@ import React from 'react';
|
|
|
3
3
|
import { withGlobalProps } from '../../provider';
|
|
4
4
|
import { classNames } from '../../utils/classNames';
|
|
5
5
|
import { transferProps } from '../_helpers/transferProps';
|
|
6
|
-
import styles from './Paper.scss';
|
|
6
|
+
import styles from './Paper.module.scss';
|
|
7
7
|
|
|
8
8
|
export const Paper = ({
|
|
9
9
|
children,
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
@use "theme";
|
|
2
|
+
|
|
3
|
+
@layer components.paper {
|
|
4
|
+
.root {
|
|
5
|
+
padding: theme.$padding;
|
|
6
|
+
border: theme.$border-width solid theme.$border-color;
|
|
7
|
+
border-radius: theme.$border-radius;
|
|
8
|
+
background-color: theme.$background-color;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.isRootMuted {
|
|
12
|
+
background-color: theme.$muted-background-color;
|
|
13
|
+
opacity: theme.$muted-opacity;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.isRootRaised {
|
|
17
|
+
box-shadow: theme.$raised-box-shadow;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -54,13 +54,15 @@ Dim background and add transparency to visually suppress the Paper.
|
|
|
54
54
|
## Forwarding HTML Attributes
|
|
55
55
|
|
|
56
56
|
In addition to the options below in the [component's API](#api) section, you
|
|
57
|
-
can specify
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
can specify **any HTML attribute you like.** All attributes that don't interfere
|
|
58
|
+
with the API of the React component are forwarded to the root `<div>` HTML
|
|
59
|
+
element. This enables making the component interactive and helps to improve
|
|
60
60
|
its accessibility.
|
|
61
61
|
|
|
62
|
-
👉
|
|
63
|
-
|
|
62
|
+
👉 For the full list of supported attributes refer to:
|
|
63
|
+
|
|
64
|
+
- [`<div>` HTML element attributes][div-attributes]{:target="_blank"}
|
|
65
|
+
- [React common props]{:target="_blank"}
|
|
64
66
|
|
|
65
67
|
## API
|
|
66
68
|
|
|
@@ -79,5 +81,5 @@ its accessibility.
|
|
|
79
81
|
| `--rui-Paper--muted__opacity` | Opacity of muted paper |
|
|
80
82
|
| `--rui-Paper--raised__box-shadow` | Box shadow of raised paper |
|
|
81
83
|
|
|
82
|
-
[
|
|
83
|
-
[
|
|
84
|
+
[div-attributes]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div#attributes
|
|
85
|
+
[React common props]: https://react.dev/reference/react-dom/components/common#common-props
|
|
@@ -6,7 +6,7 @@ import { classNames } from '../../utils/classNames';
|
|
|
6
6
|
import { transferProps } from '../_helpers/transferProps';
|
|
7
7
|
import getRootSideClassName from './_helpers/getRootSideClassName';
|
|
8
8
|
import getRootAlignmentClassName from './_helpers/getRootAlignmentClassName';
|
|
9
|
-
import styles from './Popover.scss';
|
|
9
|
+
import styles from './Popover.module.scss';
|
|
10
10
|
|
|
11
11
|
export const Popover = React.forwardRef((props, ref) => {
|
|
12
12
|
const {
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
// 1. Reset positioning for controlled variant.
|
|
2
|
+
// 2. Shift Popover so there is space for the arrow between Popover and reference element.
|
|
3
|
+
// 3. Add top offset in case it's not defined by external library.
|
|
4
|
+
|
|
5
|
+
@use "theme";
|
|
6
|
+
|
|
7
|
+
@layer components.popover {
|
|
8
|
+
.root {
|
|
9
|
+
position: absolute;
|
|
10
|
+
width: max-content;
|
|
11
|
+
max-width: theme.$max-width;
|
|
12
|
+
padding: theme.$padding;
|
|
13
|
+
text-align: left;
|
|
14
|
+
white-space: normal;
|
|
15
|
+
word-break: normal;
|
|
16
|
+
word-wrap: break-word;
|
|
17
|
+
color: theme.$color;
|
|
18
|
+
border: theme.$border-width solid theme.$border-color;
|
|
19
|
+
border-radius: theme.$border-radius;
|
|
20
|
+
background-color: theme.$background-color;
|
|
21
|
+
box-shadow: theme.$box-shadow;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.arrow {
|
|
25
|
+
position: absolute;
|
|
26
|
+
width: theme.$arrow-width;
|
|
27
|
+
height: theme.$arrow-height;
|
|
28
|
+
transform-origin: center bottom;
|
|
29
|
+
|
|
30
|
+
&::before,
|
|
31
|
+
&::after {
|
|
32
|
+
content: "";
|
|
33
|
+
position: absolute;
|
|
34
|
+
display: block;
|
|
35
|
+
border-style: solid;
|
|
36
|
+
border-color: transparent;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
&::before {
|
|
40
|
+
bottom: 0;
|
|
41
|
+
border-width: theme.$arrow-height theme.$arrow-height 0;
|
|
42
|
+
border-top-color: theme.$border-color;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
&::after {
|
|
46
|
+
bottom: theme.$border-width;
|
|
47
|
+
border-width: theme.$arrow-height theme.$arrow-height 0;
|
|
48
|
+
border-top-color: theme.$background-color;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Sides
|
|
53
|
+
.isRootAtTop {
|
|
54
|
+
bottom: 100%;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.isRootAtBottom {
|
|
58
|
+
top: 100%;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.isRootAtLeft {
|
|
62
|
+
right: 100%;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.isRootAtRight {
|
|
66
|
+
left: 100%;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Arrows
|
|
70
|
+
.isRootAtTop > .arrow {
|
|
71
|
+
top: 100%;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.isRootAtBottom > .arrow {
|
|
75
|
+
bottom: 100%;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.isRootAtLeft > .arrow {
|
|
79
|
+
left: 100%;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.isRootAtRight > .arrow {
|
|
83
|
+
right: 100%;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Side alignments: top
|
|
87
|
+
.isRootAtTop.isRootAtCenter {
|
|
88
|
+
left: 50%;
|
|
89
|
+
transform: translate(-50%, #{-1 * theme.$arrow-height});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.isRootAtTop.isRootAtStart {
|
|
93
|
+
left: 0;
|
|
94
|
+
transform: translate(0, #{-1 * theme.$arrow-height});
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.isRootAtTop.isRootAtEnd {
|
|
98
|
+
right: 0;
|
|
99
|
+
transform: translate(0, #{-1 * theme.$arrow-height});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.isRootAtTop.isRootAtCenter > .arrow {
|
|
103
|
+
left: 50%;
|
|
104
|
+
transform: translate(-50%, 0) rotateZ(0);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.isRootAtTop.isRootAtStart > .arrow {
|
|
108
|
+
left: theme.$arrow-corner-offset;
|
|
109
|
+
transform: translate(0, 0) rotateZ(0);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.isRootAtTop.isRootAtEnd > .arrow {
|
|
113
|
+
right: theme.$arrow-corner-offset;
|
|
114
|
+
transform: translate(0, 0) rotateZ(0);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Side alignments: bottom
|
|
118
|
+
.isRootAtBottom.isRootAtCenter {
|
|
119
|
+
left: 50%;
|
|
120
|
+
transform: translate(-50%, #{theme.$arrow-height});
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.isRootAtBottom.isRootAtStart {
|
|
124
|
+
left: 0;
|
|
125
|
+
transform: translate(0, #{theme.$arrow-height});
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.isRootAtBottom.isRootAtEnd {
|
|
129
|
+
right: 0;
|
|
130
|
+
transform: translate(0, #{theme.$arrow-height});
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.isRootAtBottom.isRootAtCenter > .arrow {
|
|
134
|
+
left: 50%;
|
|
135
|
+
transform: translate(-50%, -100%) rotateZ(180deg);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.isRootAtBottom.isRootAtStart > .arrow {
|
|
139
|
+
left: theme.$arrow-corner-offset;
|
|
140
|
+
transform: translate(0, -100%) rotateZ(180deg);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.isRootAtBottom.isRootAtEnd > .arrow {
|
|
144
|
+
right: theme.$arrow-corner-offset;
|
|
145
|
+
transform: translate(0, -100%) rotateZ(180deg);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Side alignments: left
|
|
149
|
+
.isRootAtLeft.isRootAtCenter {
|
|
150
|
+
top: 50%;
|
|
151
|
+
transform: translate(#{-1 * theme.$arrow-height}, -50%);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.isRootAtLeft.isRootAtStart {
|
|
155
|
+
top: 0;
|
|
156
|
+
transform: translate(#{-1 * theme.$arrow-height}, 0);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.isRootAtLeft.isRootAtEnd {
|
|
160
|
+
bottom: 0;
|
|
161
|
+
transform: translate(#{-1 * theme.$arrow-height}, 0);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.isRootAtLeft.isRootAtCenter > .arrow {
|
|
165
|
+
top: 50%;
|
|
166
|
+
transform: translate(0, -100%) rotateZ(-90deg);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.isRootAtLeft.isRootAtStart > .arrow {
|
|
170
|
+
top: theme.$arrow-corner-offset;
|
|
171
|
+
transform: translate(0, 0) rotateZ(-90deg);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.isRootAtLeft.isRootAtEnd > .arrow {
|
|
175
|
+
bottom: theme.$arrow-corner-offset;
|
|
176
|
+
transform: translate(0, -100%) rotateZ(-90deg);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Side alignments: right
|
|
180
|
+
.isRootAtRight.isRootAtCenter {
|
|
181
|
+
top: 50%;
|
|
182
|
+
transform: translate(#{theme.$arrow-height}, -50%);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.isRootAtRight.isRootAtStart {
|
|
186
|
+
top: 0;
|
|
187
|
+
transform: translate(#{theme.$arrow-height}, 0);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.isRootAtRight.isRootAtEnd {
|
|
191
|
+
bottom: 0;
|
|
192
|
+
transform: translate(#{theme.$arrow-height}, 0);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.isRootAtRight.isRootAtCenter > .arrow {
|
|
196
|
+
top: 50%;
|
|
197
|
+
transform: translate(0, -100%) rotateZ(90deg);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.isRootAtRight.isRootAtStart > .arrow {
|
|
201
|
+
top: theme.$arrow-corner-offset;
|
|
202
|
+
transform: translate(0, 0) rotateZ(90deg);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.isRootAtRight.isRootAtEnd > .arrow {
|
|
206
|
+
bottom: theme.$arrow-corner-offset;
|
|
207
|
+
transform: translate(0, -100%) rotateZ(90deg);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Controlled placement
|
|
211
|
+
.isRootControlled.isRootAtTop,
|
|
212
|
+
.isRootControlled.isRootAtBottom,
|
|
213
|
+
.isRootControlled.isRootAtLeft,
|
|
214
|
+
.isRootControlled.isRootAtRight {
|
|
215
|
+
inset: unset; // 1.
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.isRootControlled.isRootAtTop {
|
|
219
|
+
transform: translate(0, #{-1 * theme.$arrow-height}); // 2.
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.isRootControlled.isRootAtBottom {
|
|
223
|
+
transform: translate(0, #{theme.$arrow-height}); // 2.
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.isRootControlled.isRootAtLeft {
|
|
227
|
+
transform: translate(#{-1 * theme.$arrow-height}, 0); // 2.
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
.isRootControlled.isRootAtRight {
|
|
231
|
+
transform: translate(#{theme.$arrow-height}, 0); // 2.
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.isRootControlled.isRootAtLeft.isRootAtStart,
|
|
235
|
+
.isRootControlled.isRootAtRight.isRootAtStart {
|
|
236
|
+
top: 0; // 3.
|
|
237
|
+
}
|
|
238
|
+
}
|
|
@@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { withGlobalProps } from '../../provider';
|
|
4
4
|
import { transferProps } from '../_helpers/transferProps';
|
|
5
|
-
import styles from './PopoverWrapper.scss';
|
|
5
|
+
import styles from './PopoverWrapper.module.scss';
|
|
6
6
|
|
|
7
7
|
export const PopoverWrapper = ({
|
|
8
8
|
children,
|
|
@@ -36,4 +36,3 @@ PopoverWrapper.propTypes = {
|
|
|
36
36
|
export const PopoverWrapperWithContext = withGlobalProps(PopoverWrapper, 'PopoverWrapper');
|
|
37
37
|
|
|
38
38
|
export default PopoverWrapperWithContext;
|
|
39
|
-
|