@react-ui-org/react-ui 0.57.0 → 0.59.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.
Files changed (118) hide show
  1. package/.nvmrc +1 -1
  2. package/README.md +2 -11
  3. package/dist/react-ui.css +19 -19
  4. package/dist/react-ui.development.css +1351 -963
  5. package/dist/react-ui.development.js +187 -87
  6. package/dist/react-ui.js +1 -1
  7. package/package.json +16 -5
  8. package/src/components/Alert/Alert.jsx +7 -9
  9. package/src/components/Alert/Alert.module.scss +3 -3
  10. package/src/components/Alert/README.md +18 -32
  11. package/src/components/Alert/_settings.scss +1 -2
  12. package/src/components/Badge/Badge.jsx +3 -3
  13. package/src/components/Button/Button.jsx +3 -3
  14. package/src/components/ButtonGroup/ButtonGroup.jsx +3 -3
  15. package/src/components/Card/Card.jsx +7 -7
  16. package/src/components/Card/Card.module.scss +8 -7
  17. package/src/components/Card/CardBody.jsx +2 -2
  18. package/src/components/Card/CardFooter.jsx +2 -2
  19. package/src/components/Card/README.md +20 -17
  20. package/src/components/Card/_settings.scss +1 -2
  21. package/src/components/Card/_theme.scss +1 -0
  22. package/src/components/CheckboxField/CheckboxField.jsx +11 -5
  23. package/src/components/CheckboxField/README.md +110 -5
  24. package/src/components/FileInputField/FileInputField.jsx +148 -22
  25. package/src/components/FileInputField/FileInputField.module.scss +87 -1
  26. package/src/components/FileInputField/README.md +83 -2
  27. package/src/components/FileInputField/_settings.scss +15 -0
  28. package/src/components/FormLayout/FormLayout.jsx +3 -3
  29. package/src/components/FormLayout/FormLayoutCustomField.jsx +3 -3
  30. package/src/components/FormLayout/README.md +1 -0
  31. package/src/components/Grid/Grid.jsx +2 -2
  32. package/src/components/Grid/Grid.module.scss +2 -2
  33. package/src/components/Grid/GridSpan.jsx +2 -2
  34. package/src/components/InputGroup/InputGroup.jsx +4 -4
  35. package/src/components/InputGroup/InputGroup.module.scss +12 -8
  36. package/src/components/InputGroup/README.md +1 -1
  37. package/src/components/Modal/Modal.jsx +118 -46
  38. package/src/components/Modal/Modal.module.scss +34 -18
  39. package/src/components/Modal/ModalBody.jsx +3 -3
  40. package/src/components/Modal/ModalBody.module.scss +18 -0
  41. package/src/components/Modal/ModalCloseButton.jsx +4 -6
  42. package/src/components/Modal/ModalContent.jsx +2 -2
  43. package/src/components/Modal/ModalFooter.jsx +3 -3
  44. package/src/components/Modal/ModalFooter.module.scss +6 -2
  45. package/src/components/Modal/ModalHeader.jsx +3 -3
  46. package/src/components/Modal/ModalHeader.module.scss +8 -1
  47. package/src/components/Modal/ModalTitle.jsx +2 -2
  48. package/src/components/Modal/README.md +407 -187
  49. package/src/components/Modal/_animations.scss +9 -0
  50. package/src/components/Modal/_helpers/dialogOnCancelHandler.js +28 -0
  51. package/src/components/Modal/_helpers/dialogOnClickHandler.js +46 -0
  52. package/src/components/Modal/_helpers/dialogOnCloseHandler.js +28 -0
  53. package/src/components/Modal/_helpers/dialogOnKeyDownHandler.js +62 -0
  54. package/src/components/Modal/_helpers/getPositionClassName.js +1 -1
  55. package/src/components/Modal/_hooks/useModalFocus.js +24 -91
  56. package/src/components/Modal/_settings.scss +4 -3
  57. package/src/components/Modal/_theme.scss +1 -0
  58. package/src/components/Paper/Paper.jsx +3 -3
  59. package/src/components/Popover/Popover.jsx +60 -15
  60. package/src/components/Popover/Popover.module.scss +37 -9
  61. package/src/components/Popover/PopoverWrapper.jsx +2 -2
  62. package/src/components/Popover/README.md +60 -3
  63. package/src/components/Popover/_helpers/cleanPlacementStyle.js +20 -0
  64. package/src/components/Radio/README.md +103 -0
  65. package/src/components/Radio/Radio.jsx +11 -5
  66. package/src/components/Radio/Radio.module.scss +4 -0
  67. package/src/components/ScrollView/ScrollView.jsx +5 -7
  68. package/src/components/SelectField/README.md +103 -0
  69. package/src/components/SelectField/SelectField.jsx +11 -5
  70. package/src/components/Table/Table.jsx +2 -2
  71. package/src/components/Tabs/Tabs.jsx +2 -2
  72. package/src/components/Tabs/TabsItem.jsx +3 -3
  73. package/src/components/Text/Text.jsx +3 -3
  74. package/src/components/TextArea/TextArea.jsx +3 -3
  75. package/src/components/TextField/README.md +14 -2
  76. package/src/components/TextField/TextField.jsx +3 -3
  77. package/src/components/TextLink/README.md +10 -3
  78. package/src/components/TextLink/TextLink.jsx +2 -2
  79. package/src/components/TextLink/_theme.scss +3 -3
  80. package/src/components/Toggle/README.md +83 -1
  81. package/src/components/Toggle/Toggle.jsx +11 -5
  82. package/src/components/Toolbar/Toolbar.jsx +3 -3
  83. package/src/components/Toolbar/ToolbarGroup.jsx +3 -3
  84. package/src/components/Toolbar/ToolbarItem.jsx +3 -3
  85. package/src/components/_helpers/resolveContextOrProp.js +6 -3
  86. package/src/helpers/classNames/README.md +65 -0
  87. package/src/helpers/classNames/classNames.js +11 -0
  88. package/src/helpers/classNames/index.js +1 -0
  89. package/src/helpers/transferProps/README.md +46 -0
  90. package/src/helpers/transferProps/index.js +1 -0
  91. package/src/index.js +6 -5
  92. package/src/providers/globalProps/GlobalPropsContext.jsx +5 -0
  93. package/src/providers/globalProps/GlobalPropsProvider.jsx +33 -0
  94. package/src/providers/globalProps/index.js +3 -0
  95. package/src/{provider → providers/globalProps}/withGlobalProps.jsx +16 -16
  96. package/src/providers/translations/TranslationsContext.jsx +6 -0
  97. package/src/providers/translations/TranslationsProvider.jsx +33 -0
  98. package/src/providers/translations/index.js +2 -0
  99. package/src/styles/elements/_links.scss +2 -9
  100. package/src/styles/generic/_focus.scss +1 -1
  101. package/src/styles/theme/_form-fields.scss +19 -0
  102. package/src/styles/theme/_links.scss +4 -3
  103. package/src/styles/tools/_accessibility.scss +3 -5
  104. package/src/styles/tools/_collections.scss +62 -5
  105. package/src/styles/tools/_links.scss +17 -0
  106. package/src/styles/tools/form-fields/_box-field-elements.scss +21 -9
  107. package/src/styles/tools/form-fields/_box-field-layout.scss +2 -2
  108. package/src/styles/tools/form-fields/_box-field-sizes.scss +6 -10
  109. package/src/styles/tools/form-fields/_foundation.scss +6 -4
  110. package/src/styles/tools/form-fields/_variants.scss +12 -8
  111. package/src/theme.scss +53 -2
  112. package/src/translations/en.js +5 -0
  113. package/src/provider/RUIContext.jsx +0 -9
  114. package/src/provider/RUIProvider.jsx +0 -42
  115. package/src/provider/index.js +0 -3
  116. package/src/styles/settings/_z-indexes.scss +0 -2
  117. package/src/utils/classNames.js +0 -8
  118. /package/src/{utils → helpers/transferProps}/transferProps.js +0 -0
@@ -1,22 +1,18 @@
1
1
  @use "sass:map";
2
2
  @use "../../theme/form-fields" as theme;
3
3
 
4
- @mixin size($size, $has-input: true, $is-multiline: false) {
4
+ @mixin size($size, $is-multiline: false) {
5
5
  $size-properties: map.get(theme.$box-sizes, $size);
6
6
 
7
+ --rui-local-height: #{map.get($size-properties, height)};
7
8
  --rui-local-padding-y: #{map.get($size-properties, padding-y)};
8
9
  --rui-local-padding-x: #{map.get($size-properties, padding-x)};
10
+ --rui-local-font-size: #{map.get($size-properties, font-size)};
9
11
 
10
- @if $has-input {
11
- --rui-local-font-size: #{map.get($size-properties, font-size)};
12
-
12
+ @if $is-multiline {
13
13
  .input {
14
- @if $is-multiline {
15
- height: auto;
16
- min-height: map.get($size-properties, height);
17
- } @else {
18
- --rui-local-height: #{map.get($size-properties, height)};
19
- }
14
+ height: auto;
15
+ min-height: map.get($size-properties, height);
20
16
  }
21
17
  }
22
18
  }
@@ -18,12 +18,14 @@
18
18
  color: var(--rui-local-surrounding-text-color, #{theme.$label-color});
19
19
  }
20
20
 
21
- @mixin label-required() {
21
+ @mixin label-required($show-require-sign: true) {
22
22
  color: var(--rui-local-surrounding-text-color, #{theme.$required-label-color});
23
23
 
24
- &::after {
25
- content: theme.$required-sign;
26
- color: theme.$required-sign-color;
24
+ @if $show-require-sign {
25
+ &::after {
26
+ content: theme.$required-sign;
27
+ color: theme.$required-sign-color;
28
+ }
27
29
  }
28
30
  }
29
31
 
@@ -13,11 +13,6 @@
13
13
  @use "../../settings/form-fields" as settings;
14
14
  @use "../../theme/form-fields" as theme;
15
15
 
16
- @mixin _disabled-state() {
17
- opacity: theme.$disabled-opacity;
18
- cursor: theme.$disabled-cursor;
19
- }
20
-
21
16
  // 1.
22
17
  @mixin _generate-custom-properties($type, $variant, $state) {
23
18
  @if not list.index(map.keys(map.get(settings.$themeable-variant-states, $type)), $variant) {
@@ -70,7 +65,7 @@
70
65
  + "Choose one of #{map.keys(settings.$themeable-variant-states)}.";
71
66
  }
72
67
 
73
- $themeable-states: map.get(map.get(settings.$themeable-variant-states, $type), $variant);
68
+ $themeable-states: map.get(settings.$themeable-variant-states, $type, $variant);
74
69
 
75
70
  @if list.index($themeable-states, "hover") {
76
71
  @include _generate-custom-properties($type, $variant, "default");
@@ -113,11 +108,16 @@
113
108
  }
114
109
  }
115
110
 
111
+ @mixin disabled-state() {
112
+ opacity: theme.$disabled-opacity;
113
+ cursor: theme.$disabled-cursor;
114
+ }
115
+
116
116
  @mixin visual($type, $variant: "default", $has-caret: false) {
117
117
  @include _get-theme($type, $variant);
118
118
 
119
119
  .input:disabled {
120
- @include _disabled-state();
120
+ @include disabled-state();
121
121
  }
122
122
 
123
123
  @if $type == "box" and $variant == "filled" {
@@ -137,11 +137,15 @@
137
137
  }
138
138
 
139
139
  &.isRootDisabled .caret {
140
- @include _disabled-state();
140
+ @include disabled-state();
141
141
  }
142
142
  }
143
143
  }
144
144
 
145
145
  @mixin validation($variant) {
146
+ --rui-local-link-color: #{map.get(theme.$link-validation-colors, $variant, default)};
147
+ --rui-local-link-color-hover: #{map.get(theme.$link-validation-colors, $variant, hover)};
148
+ --rui-local-link-color-active: #{map.get(theme.$link-validation-colors, $variant, active)};
149
+
146
150
  @include _get-theme(validation, $variant);
147
151
  }
package/src/theme.scss CHANGED
@@ -49,7 +49,31 @@
49
49
  // Font Families
50
50
  // =============
51
51
 
52
- --rui-font-family-base: "Titillium Web", helvetica, roboto, arial, sans-serif;
52
+ // Native font stack inspired by Bootstrap.
53
+ // @see https://getbootstrap.com/docs/5.0/content/reboot/#native-font-stack
54
+ // @see https://css-tricks.com/snippets/css/system-font-stack/
55
+ --rui-font-family-base:
56
+ /* Cross-platform generic font family (default user interface font) */
57
+ system-ui,
58
+ /* Safari for macOS and iOS (San Francisco)*/
59
+ -apple-system,
60
+ /* Windows*/
61
+ "Segoe UI",
62
+ /* Android*/
63
+ roboto,
64
+ /* Basic web fallback*/
65
+ "Helvetica Neue",
66
+ arial,
67
+ /* Linux*/
68
+ "Noto Sans",
69
+ "Liberation Sans",
70
+ /* Sans serif fallback*/
71
+ sans-serif,
72
+ /* Emoji fonts*/
73
+ "Apple Color Emoji",
74
+ "Segoe UI Emoji",
75
+ "Segoe UI Symbol",
76
+ "Noto Color Emoji";
53
77
  --rui-font-family-monospace:
54
78
  "SFMono-Regular",
55
79
  "Menlo",
@@ -109,7 +133,8 @@
109
133
  --rui-line-height-small: 1.25;
110
134
 
111
135
  // Text decorations
112
- --rui-text-decoration-link: none;
136
+ --rui-underline-offset-link: 0.1875em;
137
+ --rui-text-decoration-link: underline;
113
138
  --rui-text-decoration-link-hover: underline;
114
139
  --rui-text-decoration-link-active: underline;
115
140
 
@@ -802,6 +827,7 @@
802
827
  --rui-Card__padding: var(--rui-dimension-space-4);
803
828
  --rui-Card__border-width: var(--rui-dimension-border-width-1);
804
829
  --rui-Card__border-radius: var(--rui-dimension-radius-2);
830
+ --rui-Card__background-color: var(--rui-color-background-layer-1);
805
831
  --rui-Card--dense__padding: var(--rui-dimension-space-2);
806
832
  --rui-Card--raised__box-shadow: var(--rui-shadow-layer-1);
807
833
  --rui-Card--disabled__background-color: var(--rui-color-background-disabled);
@@ -1011,6 +1037,31 @@
1011
1037
  --rui-Modal--large__width: 60rem;
1012
1038
  --rui-Modal--fullscreen__width: 100%;
1013
1039
  --rui-Modal--fullscreen__height: 100%;
1040
+ --rui-Modal__animation__duration: 0.25s;
1041
+
1042
+ // Modal: success variant
1043
+ --rui-Modal--success__border-color: var(--rui-color-feedback-success);
1044
+ --rui-Modal--success__background-color: var(--rui-color-background-success);
1045
+
1046
+ // Modal: warning variant
1047
+ --rui-Modal--warning__border-color: var(--rui-color-feedback-warning);
1048
+ --rui-Modal--warning__background-color: var(--rui-color-background-warning);
1049
+
1050
+ // Modal: danger variant
1051
+ --rui-Modal--danger__border-color: var(--rui-color-feedback-danger);
1052
+ --rui-Modal--danger__background-color: var(--rui-color-background-danger);
1053
+
1054
+ // Modal: info variant
1055
+ --rui-Modal--info__border-color: var(--rui-color-feedback-info);
1056
+ --rui-Modal--info__background-color: var(--rui-color-background-info);
1057
+
1058
+ // Modal: help variant
1059
+ --rui-Modal--help__border-color: var(--rui-color-feedback-help);
1060
+ --rui-Modal--help__background-color: var(--rui-color-background-help);
1061
+
1062
+ // Modal: note variant
1063
+ --rui-Modal--note__border-color: var(--rui-color-feedback-note);
1064
+ --rui-Modal--note__background-color: var(--rui-color-background-note);
1014
1065
 
1015
1066
  //
1016
1067
  // Paper
@@ -2,6 +2,11 @@ export default {
2
2
  Alert: {
3
3
  close: 'Close',
4
4
  },
5
+ FileInputField: {
6
+ browse: 'Browse',
7
+ drop: 'or drop file here',
8
+ filesSelected: 'files selected',
9
+ },
5
10
  ModalCloseButton: {
6
11
  close: 'Close',
7
12
  },
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- import defaultTranslations from '../translations/en';
3
-
4
- const RUIContext = React.createContext({
5
- globalProps: {},
6
- translations: defaultTranslations,
7
- });
8
-
9
- export default RUIContext;
@@ -1,42 +0,0 @@
1
- import PropTypes from 'prop-types';
2
- import React, {
3
- useContext,
4
- useMemo,
5
- } from 'react';
6
- import defaultTranslations from '../translations/en';
7
- import { mergeDeep } from '../utils/mergeDeep';
8
- import RUIContext from './RUIContext';
9
-
10
- const RUIProvider = ({
11
- children,
12
- globalProps,
13
- translations,
14
- }) => {
15
- const context = useContext(RUIContext);
16
- const childProps = useMemo(() => ({
17
- globalProps: mergeDeep(context?.globalProps || {}, globalProps),
18
- translations: mergeDeep(context?.translations || {}, translations),
19
- }), [context, globalProps, translations]);
20
-
21
- return (
22
- <RUIContext.Provider
23
- value={childProps}
24
- >
25
- {children}
26
- </RUIContext.Provider>
27
- );
28
- };
29
-
30
- RUIProvider.defaultProps = {
31
- children: null,
32
- globalProps: null,
33
- translations: defaultTranslations,
34
- };
35
-
36
- RUIProvider.propTypes = {
37
- children: PropTypes.node,
38
- globalProps: PropTypes.shape({}),
39
- translations: PropTypes.shape({}),
40
- };
41
-
42
- export default RUIProvider;
@@ -1,3 +0,0 @@
1
- export { default as RUIProvider } from './RUIProvider';
2
- export { default as RUIContext } from './RUIContext';
3
- export { default as withGlobalProps } from './withGlobalProps';
@@ -1,2 +0,0 @@
1
- $modal-backdrop: 2000;
2
- $modal: 2100;
@@ -1,8 +0,0 @@
1
- export const classNames = (...classes) => {
2
- const filteredClassNames = classes.filter(
3
- (className) => typeof className === 'string'
4
- && className.trim().length > 0,
5
- );
6
-
7
- return filteredClassNames.length > 0 ? filteredClassNames.join(' ') : undefined;
8
- };