@steroidsjs/bootstrap 3.0.0-beta.12 → 3.0.0-beta.14

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 (40) hide show
  1. package/content/Accordion/AccordionItemView.d.ts +2 -0
  2. package/content/Accordion/AccordionItemView.js +96 -0
  3. package/content/Accordion/AccordionItemView.scss +200 -0
  4. package/content/Accordion/AccordionView.d.ts +2 -0
  5. package/content/{Collapse/CollapseView.js → Accordion/AccordionView.js} +3 -3
  6. package/content/Accordion/AccordionView.scss +14 -0
  7. package/content/Alert/AlertView.scss +5 -1
  8. package/content/Avatar/AvatarView.js +2 -3
  9. package/content/Avatar/AvatarView.scss +20 -34
  10. package/content/Badge/BadgeView.js +8 -6
  11. package/content/Badge/BadgeView.scss +94 -5
  12. package/content/DropDown/DropDownView.scss +59 -27
  13. package/form/Button/ButtonView.js +5 -7
  14. package/form/Button/ButtonView.scss +104 -78
  15. package/form/CheckboxField/CheckboxFieldView.js +3 -3
  16. package/form/CheckboxField/CheckboxFieldView.scss +120 -36
  17. package/icons/{fontawesome.js → index.js} +3 -0
  18. package/icons/svgs/accordion-chevron.svg +4 -0
  19. package/icons/svgs/badge-close.svg +3 -0
  20. package/icons/svgs/close.svg +4 -0
  21. package/icons/svgs/default.svg +11 -0
  22. package/icons/svgs/error.svg +12 -0
  23. package/icons/svgs/info.svg +12 -0
  24. package/icons/svgs/loader.svg +3 -0
  25. package/icons/svgs/success.svg +4 -0
  26. package/icons/svgs/warning.svg +12 -0
  27. package/index.d.ts +2 -2
  28. package/index.js +4 -4
  29. package/index.scss +2 -3
  30. package/package.json +4 -4
  31. package/scss/mixins/button.scss +49 -23
  32. package/scss/variables/common/colors.scss +47 -49
  33. package/scss/variables/common/typography.scss +0 -16
  34. package/content/Collapse/CollapseItemView.d.ts +0 -2
  35. package/content/Collapse/CollapseItemView.js +0 -65
  36. package/content/Collapse/CollapseItemView.scss +0 -88
  37. package/content/Collapse/CollapseView.d.ts +0 -2
  38. package/content/Collapse/CollapseView.scss +0 -15
  39. package/content/Icon/IconView.scss +0 -25
  40. /package/icons/{fontawesome.d.ts → index.d.ts} +0 -0
@@ -0,0 +1,2 @@
1
+ import { IAccordionCommonViewProps } from '@steroidsjs/core/ui/content/Accordion/Accordion';
2
+ export default function AccordionItemView(props: IAccordionCommonViewProps): JSX.Element;
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ exports.__esModule = true;
29
+ var React = __importStar(require("react"));
30
+ var Icon_1 = __importDefault(require("@steroidsjs/core/ui/content/Icon"));
31
+ var hooks_1 = require("@steroidsjs/core/hooks");
32
+ function AccordionItemView(props) {
33
+ var _a;
34
+ var bem = (0, hooks_1.useBem)('AccordionItemView');
35
+ React.useEffect(function () {
36
+ if (!props.toggleAccordion || !props.toggleCollapse || !props.activeKey) {
37
+ return;
38
+ }
39
+ if (props.hasOneOpenItem) {
40
+ props.toggleAccordion(props.activeKey - 1);
41
+ }
42
+ else {
43
+ props.toggleCollapse(props.activeKey - 1);
44
+ }
45
+ // eslint-disable-next-line react-hooks/exhaustive-deps
46
+ }, [props.activeKey]);
47
+ var renderIcon = React.useCallback(function () {
48
+ if (!props.icon) {
49
+ return null;
50
+ }
51
+ var openIconClassName = bem.element('open-icon');
52
+ var closeIconClassName = bem.element('close-icon');
53
+ if (typeof props.icon === 'object') {
54
+ var icons = props.icon;
55
+ return (React.createElement(React.Fragment, null,
56
+ typeof icons.open === 'string'
57
+ ? (React.createElement(Icon_1["default"], { name: icons.open, className: openIconClassName }))
58
+ : (React.createElement("span", { className: openIconClassName }, icons.open)),
59
+ typeof icons.close === 'string'
60
+ ? (React.createElement(Icon_1["default"], { name: icons.close, className: closeIconClassName }))
61
+ : (React.createElement("span", { className: closeIconClassName }, icons.close))));
62
+ }
63
+ return typeof props.icon === 'string'
64
+ ? React.createElement(Icon_1["default"], { name: props.icon })
65
+ : (React.createElement("span", { className: bem.element('custom-icon') }, props.icon));
66
+ }, [bem, props.icon]);
67
+ var handleHeaderClick = React.useCallback(function () {
68
+ if (props.disabled || !props.toggleAccordion || !props.toggleCollapse) {
69
+ return;
70
+ }
71
+ var toggleAccordion = props.toggleAccordion, toggleCollapse = props.toggleCollapse, hasOneOpenItem = props.hasOneOpenItem, childIndex = props.childIndex;
72
+ if (hasOneOpenItem) {
73
+ toggleAccordion(childIndex);
74
+ }
75
+ else {
76
+ toggleCollapse(childIndex);
77
+ }
78
+ }, [props]);
79
+ return (React.createElement("div", { className: bem(bem.block((_a = {
80
+ disable: props.disabled
81
+ },
82
+ _a["position_".concat(props.position)] = !!props.position,
83
+ _a["theme_".concat(props.theme)] = !!props.theme,
84
+ _a.opened = !props.disabled && props.isShowMore,
85
+ _a)), props.className), style: props.style },
86
+ React.createElement("div", { className: bem.element('header-container'), onClick: handleHeaderClick },
87
+ React.createElement("div", { className: bem.element('title-container') },
88
+ React.createElement("p", null, props.title)),
89
+ React.createElement("div", { className: bem.element('icon-wrapper') }, props.icon
90
+ ? renderIcon()
91
+ : (React.createElement(Icon_1["default"], { className: bem.element('icon', {
92
+ active: !props.disabled && props.isShowMore
93
+ }), name: "accordion-chevron" })))),
94
+ React.createElement("div", { className: bem.element('content', { visible: !props.disabled && props.isShowMore }) }, props.children)));
95
+ }
96
+ exports["default"] = AccordionItemView;
@@ -0,0 +1,200 @@
1
+ :root {
2
+ --accordion-background-light: #f8f8f8;
3
+ --accordion-background-intermediate: #ffffff;
4
+ --accordion-background-dark: #312c3a;
5
+ --accordion-rect-background: #ffffff;
6
+ --accordion-chevron-color: #323232;
7
+
8
+ html[data-theme="dark"] {
9
+ --accordion-background-light: #414141;
10
+ --accordion-background-intermediate: #5b5c6b;
11
+ --accordion-background-dark: #4e4f57;
12
+ --accordion-rect-background: #6f6b76;
13
+ --accordion-chevron-color: #ffffff;
14
+ }
15
+ }
16
+
17
+ $accordionBackgroundMap: (
18
+ "light": var(--accordion-background-light),
19
+ "intermediate": var(--accordion-background-intermediate),
20
+ "dark": var(--accordion-background-dark),
21
+ );
22
+
23
+ $accordion-rect-background: var(--accordion-rect-background);
24
+ $accordion-chevron-color: var(--accordion-chevron-color);
25
+
26
+ .AccordionItemView {
27
+ $root: &;
28
+
29
+ display: grid;
30
+ align-items: center;
31
+
32
+ background-color: #fff;
33
+ height: 56px;
34
+ width: 480px;
35
+ height: fit-content;
36
+ font-family: $font-family-nunito;
37
+
38
+ &_theme {
39
+ @each $theme, $backgroundColor in $accordionBackgroundMap {
40
+ &_#{$theme} {
41
+ #{$root}__header-container {
42
+ background-color: $backgroundColor;
43
+ }
44
+
45
+ #{$root}__title-container {
46
+ color: $text-color;
47
+
48
+ @if ($theme == "dark" or $is-dark == "false") {
49
+ color: $white;
50
+ }
51
+ }
52
+
53
+ #{$root}__icon {
54
+ svg {
55
+ @if ($theme == "light" or $theme == "intermediate") {
56
+ rect {
57
+ fill: $accordion-rect-background;
58
+ }
59
+ path {
60
+ stroke: $accordion-chevron-color;
61
+ }
62
+ }
63
+ }
64
+ }
65
+ }
66
+ }
67
+ }
68
+
69
+ &_position {
70
+ &_top {
71
+ #{$root}__header-container {
72
+ border-bottom: 1px solid rgba(#000, 0.1);
73
+ border-radius: $radius-large $radius-large 0 0;
74
+ }
75
+ }
76
+
77
+ &_middle {
78
+ #{$root}__header-container {
79
+ border-top: 1px solid rgba(#000, 0.1);
80
+ border-radius: 0px;
81
+ }
82
+ }
83
+
84
+ &_bottom {
85
+ #{$root}__content {
86
+ grid-row-start: 1;
87
+ grid-row-end: 1;
88
+ }
89
+
90
+ #{$root}__header-container {
91
+ border-top: 1px solid rgba(#000, 0.1);
92
+ border-radius: 0 0 $radius-large $radius-large;
93
+ grid-row-start: 2;
94
+ grid-row-end: 2;
95
+ }
96
+
97
+ #{$root}__icon {
98
+ transform: rotate(180deg);
99
+ &_active {
100
+ transform: rotate(0deg);
101
+ }
102
+ }
103
+ }
104
+ }
105
+
106
+ &_disable {
107
+ opacity: 0.4;
108
+ color: rgba(#212529, 0.7);
109
+
110
+ #{$root}__header-container {
111
+ background-color: #d7d7d7;
112
+ }
113
+ }
114
+
115
+ &_active {
116
+ margin-bottom: 16px;
117
+ }
118
+
119
+ p {
120
+ margin: 0;
121
+ }
122
+
123
+ &__icon {
124
+ box-shadow: 0px 1px 20px rgba(0, 0, 0, 0.1);
125
+ border-radius: $radius-small;
126
+
127
+ transform: rotate(0deg);
128
+ transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
129
+
130
+ &_active {
131
+ transform: rotate(180deg);
132
+ }
133
+ }
134
+
135
+ &__header-container {
136
+ display: flex;
137
+ align-items: center;
138
+ cursor: pointer;
139
+ }
140
+
141
+ &__title-container {
142
+ width: 100%;
143
+ padding: $spacing-16;
144
+ align-self: center;
145
+ font-size: $font-size-lg;
146
+ line-height: 24px;
147
+ }
148
+
149
+ &__icon-wrapper {
150
+ width: 48px;
151
+ height: 48px;
152
+
153
+ display: flex;
154
+ align-items: center;
155
+ justify-content: center;
156
+
157
+ &_not_visible {
158
+ width: 0;
159
+ opacity: 0;
160
+ }
161
+ }
162
+
163
+ &__content {
164
+ transition: all 200ms ease;
165
+ overflow: hidden;
166
+ max-height: 0;
167
+ padding: 0 $spacing-16;
168
+ color: #343a40;
169
+
170
+ &_visible {
171
+ max-height: 1024px;
172
+ padding: 18px 32px 18px $spacing-16;
173
+ border: 1px solid rgba(#000, 0.1);
174
+ }
175
+ }
176
+
177
+ &__close-icon,
178
+ &__open-icon {
179
+ transition: opacity 150ms ease-in-out;
180
+ }
181
+
182
+ &__close-icon {
183
+ position: absolute;
184
+ opacity: 0;
185
+ pointer-events: none;
186
+ }
187
+
188
+ &_opened {
189
+ #{$root}__close-icon {
190
+ position: static;
191
+ opacity: 1;
192
+ pointer-events: all;
193
+ }
194
+ #{$root}__open-icon {
195
+ position: absolute;
196
+ opacity: 0;
197
+ pointer-events: none;
198
+ }
199
+ }
200
+ }
@@ -0,0 +1,2 @@
1
+ import { IAccordionCommonViewProps } from '@steroidsjs/core/ui/content/Accordion/Accordion';
2
+ export default function AccordionView(props: IAccordionCommonViewProps): JSX.Element;
@@ -25,8 +25,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  exports.__esModule = true;
26
26
  var React = __importStar(require("react"));
27
27
  var hooks_1 = require("@steroidsjs/core/hooks");
28
- function CollapseView(props) {
29
- var bem = (0, hooks_1.useBem)('CollapseView');
28
+ function AccordionView(props) {
29
+ var bem = (0, hooks_1.useBem)('AccordionView');
30
30
  return (React.createElement("div", { className: bem(bem.block(), props.className) }, props.children));
31
31
  }
32
- exports["default"] = CollapseView;
32
+ exports["default"] = AccordionView;
@@ -0,0 +1,14 @@
1
+ .AccordionView {
2
+ height: fit-content;
3
+
4
+ display: grid;
5
+ grid-gap: 0;
6
+
7
+ & > :first-child {
8
+ border-radius: $radius-large $radius-large 0 0;
9
+ }
10
+
11
+ & > :last-child {
12
+ border-radius: 0 0 $radius-large $radius-large;
13
+ }
14
+ }
@@ -26,8 +26,12 @@
26
26
  }
27
27
 
28
28
  &__icon.IconView {
29
- width: 24px;
29
+ height: 24px;
30
30
  margin-right: 12px;
31
+
32
+ svg {
33
+ width: 24px;
34
+ }
31
35
  }
32
36
 
33
37
  &__icon-close.IconView {
@@ -32,13 +32,12 @@ function Avatar(props) {
32
32
  shape: props.shape,
33
33
  'has-image': !!props.src && !props.isError,
34
34
  'has-status': props.status,
35
- 'has-border-avatar': props.hasBorder && !!props.src,
36
- 'has-border-without-avatar': props.hasBorder && !props.src,
35
+ 'has-border': props.hasBorder,
37
36
  'has-custom-status': props.status && !!customSize.width
38
37
  }), props.className) },
39
38
  react_1["default"].createElement("span", { className: bem.element('body'), style: __assign(__assign({}, props.style), customSize) },
40
39
  react_1["default"].createElement(react_1["default"].Fragment, null,
41
- (props.src && renderImage()) || (react_1["default"].createElement("span", null, props.formattedTitle)),
40
+ (props.src && renderImage()) || (react_1["default"].createElement("span", { className: bem.element('formattedTitle') }, props.formattedTitle)),
42
41
  props.children))));
43
42
  }
44
43
  exports["default"] = Avatar;
@@ -1,18 +1,17 @@
1
1
  :root {
2
2
  --border-width-small: 1px;
3
- --border-width-medium: 1.5px;
3
+ --border-width-medium: 2px;
4
4
  --border-width-large: 2px;
5
5
  --border-width: var(--border-width-large);
6
6
 
7
- --status-border-width-small: 2px;
8
- --status-border-width-medium: 3px;
7
+ --status-border-width-small: 1px;
8
+ --status-border-width-medium: 2px;
9
9
  --status-border-width-large: 4px;
10
10
  --status-border-width: var(--status-border-width-large);
11
11
 
12
12
  --status-size-small: 8px;
13
- --status-size-medium: 10px;
14
- --status-size-large: 12px;
15
- --status-size-x-large: 14px;
13
+ --status-size-medium: 12px;
14
+ --status-size-large: 14px;
16
15
  --status-size: var(--status-size-x-large);
17
16
  }
18
17
 
@@ -24,7 +23,7 @@
24
23
  top: 50%;
25
24
  left: 50%;
26
25
  transform: translate(-50%, -50%);
27
- padding: 55%;
26
+ padding: 53%;
28
27
  border-radius: 100%;
29
28
  border: var(--border-width) solid transparent;
30
29
  background: $background border-box;
@@ -47,39 +46,28 @@
47
46
  }
48
47
 
49
48
  &_size {
50
- &_x-large {
49
+
50
+ &_large {
51
51
  #{$root}__body {
52
52
  height: 64px;
53
53
  width: 64px;
54
54
  line-height: 64px;
55
- font-size: 20px;
55
+ font-size: $font-size-base;
56
56
  }
57
57
  --border-width: var(--border-width-large);
58
58
  --status-border-width: var(--status-border-width-large);
59
- --status-size: var(--status-size-x-large);
59
+ --status-size: var(--status-size-large);
60
60
  }
61
61
 
62
- &_large {
62
+ &_middle {
63
63
  #{$root}__body {
64
64
  height: 46px;
65
65
  width: 46px;
66
66
  line-height: 46px;
67
- font-size: $font-size-base;
68
- }
69
- --border-width: var(--border-width-large);
70
- --status-border-width: var(--status-border-width-medium);
71
- --status-size: var(--status-size-large);
72
- }
73
-
74
- &_middle {
75
- #{$root}__body {
76
- height: 36px;
77
- width: 36px;
78
- line-height: 36px;
79
67
  font-size: $font-size-sm;
80
68
  }
81
69
  --border-width: var(--border-width-medium);
82
- --status-border-width: var(--status-border-width-small);
70
+ --status-border-width: var(--status-border-width-medium);
83
71
  --status-size: var(--status-size-medium);
84
72
  }
85
73
 
@@ -121,8 +109,8 @@
121
109
  content: "";
122
110
  position: absolute;
123
111
  box-sizing: content-box;
124
- right: -7%;
125
- bottom: -7%;
112
+ right: -6%;
113
+ bottom: -6%;
126
114
  width: var(--status-size);
127
115
  height: var(--status-size);
128
116
  z-index: 10;
@@ -136,12 +124,8 @@
136
124
  }
137
125
  }
138
126
 
139
- &_has-border-avatar {
140
- @include border($gradient-purple);
141
- }
142
-
143
- &_has-border-without-avatar {
144
- @include border($gradient-red);
127
+ &_has-border {
128
+ @include border($gradient-blue);
145
129
  }
146
130
 
147
131
  &__body {
@@ -153,12 +137,14 @@
153
137
  vertical-align: middle;
154
138
 
155
139
  color: $white;
156
- background: $gradient-purple border-box;
140
+ background: $gradient-blue border-box;
157
141
  border: 1px solid #fff;
158
142
 
159
143
  span {
160
144
  display: block;
161
- transform: translateY(-2px);
145
+ font-family: $font-family-nunito;
146
+ font-weight: 800;
147
+ letter-spacing: 0.1em;
162
148
  }
163
149
 
164
150
  img {
@@ -12,12 +12,14 @@ function BadgeView(props) {
12
12
  var bem = (0, useBem_1["default"])('BadgeView');
13
13
  return (props.isExist && (react_1["default"].createElement("div", { className: bem(bem.block((_a = {},
14
14
  _a[props.type] = !!props.type,
15
+ _a[props.size] = !!props.size,
16
+ _a[props.roundingStyle] = !!props.roundingStyle,
17
+ _a['has-counter'] = !!props.counter,
15
18
  _a)), props.className), style: props.style },
16
- react_1["default"].createElement("div", { className: bem.element('content-wrapper') },
17
- react_1["default"].createElement("span", { className: bem.element('content') }, props.message),
18
- props.showClose && (react_1["default"].createElement(Icon_1["default"], { name: 'close', onClick: props.onClose })),
19
- props.counter
20
- && (react_1["default"].createElement("div", { className: bem.element('chip') }, typeof props.counter === 'object'
21
- && props.counter.content))))));
19
+ react_1["default"].createElement("div", { className: bem.element('wrapper') },
20
+ react_1["default"].createElement("div", { className: bem.element('content') },
21
+ react_1["default"].createElement("span", { className: bem.element('message') }, props.message),
22
+ props.counter && (react_1["default"].createElement("span", { className: bem.element('counter') }, typeof props.counter === 'object' && (react_1["default"].createElement("span", { className: bem.element('counter-content') }, props.counter.content)))),
23
+ props.showClose && (react_1["default"].createElement(Icon_1["default"], { onClick: props.onClose, className: bem.element('close'), name: 'badge-close' })))))));
22
24
  }
23
25
  exports["default"] = BadgeView;
@@ -1,12 +1,101 @@
1
- .BadgeView {
2
-
1
+ @import "../../scss/variables";
2
+
3
+ .BadgeView {
3
4
  $root: &;
5
+
4
6
  display: inline-block;
5
7
  position: relative;
8
+ width: fit-content;
6
9
 
7
10
  font-family: $font-family-nunito;
11
+ color: $white;
12
+ font-weight: $font-weight-sm;
13
+
14
+ &__content {
15
+ display: flex;
16
+ flex-direction: row;
17
+ align-items: center;
18
+
19
+ #{$root}__message {
20
+ margin-right: 4px;
21
+ }
22
+ }
23
+
24
+ $badge-types: (
25
+ "primary": $primary,
26
+ "secondary": $secondary,
27
+ "success": $success,
28
+ "danger": $danger,
29
+ "warning": $warning,
30
+ "info": $info,
31
+ );
32
+
33
+ @each $type, $color in $badge-types {
34
+ &_#{$type} {
35
+ background-color: $color;
36
+
37
+ @if ($type == "warning" or $type == "info") {
38
+ color: $text-color;
39
+
40
+ #{$root}__close {
41
+ svg {
42
+ path {
43
+ stroke: #000;
44
+ }
45
+ }
46
+ }
47
+ }
48
+ }
49
+ }
50
+
51
+ &_squarer {
52
+ border-radius: $radius-small;
53
+ }
54
+
55
+ &_rounder {
56
+ border-radius: $radius-xlarge;
57
+ }
58
+
59
+ &_large {
60
+ padding: $spacing-4 $spacing-8;
61
+ }
62
+
63
+ &_medium {
64
+ padding: $spacing-2 $spacing-8;
65
+ }
66
+
67
+ &_small {
68
+ padding: 0 $spacing-8;
69
+ }
70
+
71
+ &_has-counter {
72
+ border: 1px solid #e9e9e9;
73
+ border-radius: 100px;
74
+
75
+ background: $light-gray;
76
+ color: $text-color;
77
+ padding: $spacing-4 12px;
78
+
79
+ #{$root}__counter-content {
80
+ background: $white;
81
+ padding: $spacing-2 5px;
82
+ border-radius: 20px;
83
+ }
84
+
85
+ #{$root}__message {
86
+ margin-right: 8px;
87
+ }
88
+
89
+ #{$root}__counter {
90
+ margin-right: 8px;
91
+ }
8
92
 
9
- &_primary {
10
- background-color: var(--primary);
93
+ #{$root}__close {
94
+ svg {
95
+ path {
96
+ stroke: #000;
97
+ }
98
+ }
99
+ }
11
100
  }
12
- }
101
+ }