@steroidsjs/bootstrap 3.0.0-beta.121 → 3.0.0-beta.123

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.
@@ -38,7 +38,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
38
38
  };
39
39
  exports.__esModule = true;
40
40
  var React = __importStar(require("react"));
41
- var moment_1 = __importDefault(require("react-day-picker/moment"));
42
41
  var react_1 = require("react");
43
42
  var hooks_1 = require("@steroidsjs/core/hooks");
44
43
  var react_day_picker_1 = __importStar(require("react-day-picker"));
@@ -81,6 +80,6 @@ function CalendarView(props) {
81
80
  else {
82
81
  onDaySelect(day);
83
82
  }
84
- }, fixedWeeks: true, month: month, firstDayOfWeek: 1, modifiers: modifiers, canChangeMonth: false, onDayClick: onDaySelect, selectedDays: selectedDays, numberOfMonths: numberOfMonths, localeUtils: moment_1["default"], locale: localeComponent.language })));
83
+ }, fixedWeeks: true, month: month, firstDayOfWeek: 1, modifiers: modifiers, canChangeMonth: false, onDayClick: onDaySelect, selectedDays: selectedDays, numberOfMonths: numberOfMonths, localeUtils: react_day_picker_1.LocaleUtils, locale: localeComponent.language })));
85
84
  }
86
85
  exports["default"] = CalendarView;
@@ -11,21 +11,37 @@ var form_1 = require("@steroidsjs/core/ui/form");
11
11
  var Text_1 = __importDefault(require("@steroidsjs/core/ui/typography/Text/Text"));
12
12
  var react_1 = __importDefault(require("react"));
13
13
  var useBem_1 = __importDefault(require("@steroidsjs/core/hooks/useBem"));
14
+ var hooks_1 = require("@steroidsjs/core/hooks");
15
+ var form_2 = require("@steroidsjs/core/actions/form");
16
+ var ADD_EVENT_FORM_ID = 'AddEventForm';
14
17
  function CalendarSystemModalView(props) {
15
18
  var bem = (0, useBem_1["default"])('CalendarSystemModalView');
19
+ var dispatch = (0, hooks_1.useDispatch)();
16
20
  var eventInitialValues = react_1["default"].useMemo(function () { return props.eventInitialValues; }, [props.eventInitialValues]);
17
21
  var callOnEventSubmit = function (fields) {
18
22
  return eventInitialValues && !props.isCreate ? props.onEventSubmit(fields, eventInitialValues) : props.onEventSubmit(fields);
19
23
  };
20
- return (react_1["default"].createElement(Modal_1["default"], { title: props.isCreate ? __('Новое событие') : __('Редактирование события'), onClose: props.onClose, className: bem.block(), shouldCloseOnEsc: true, shouldCloseOnOverlayClick: true },
21
- react_1["default"].createElement(form_1.Form, { className: bem.element('default-form'), onSubmit: function (fields) {
24
+ var onCloseModal = react_1["default"].useCallback(function () {
25
+ props.onClose();
26
+ dispatch((0, form_2.formSetErrors)(ADD_EVENT_FORM_ID, {}));
27
+ }, []);
28
+ return (react_1["default"].createElement(Modal_1["default"], { title: props.isCreate ? __('Новое событие') : __('Редактирование события'), onClose: onCloseModal, className: bem.block(), shouldCloseOnEsc: true, shouldCloseOnOverlayClick: true },
29
+ react_1["default"].createElement(form_1.Form, { className: bem.element('default-form'), formId: ADD_EVENT_FORM_ID, onBeforeSubmit: function (data) {
30
+ if (!data.eventGroupId) {
31
+ dispatch((0, form_2.formSetErrors)(ADD_EVENT_FORM_ID, {
32
+ eventGroupId: [__('Поле обязательно для заполнения')]
33
+ }));
34
+ return false;
35
+ }
36
+ return data;
37
+ }, onSubmit: function (fields) {
22
38
  callOnEventSubmit(fields);
23
- props.onClose();
24
- }, initialValues: eventInitialValues !== null && eventInitialValues !== void 0 ? eventInitialValues : null, submitLabel: props.isCreate ? __('Создать') : __('Сохранить') },
39
+ onCloseModal();
40
+ }, initialValues: eventInitialValues !== null && eventInitialValues !== void 0 ? eventInitialValues : null, submitLabel: props.isCreate ? __('Создать') : __('Сохранить'), useRedux: true },
25
41
  react_1["default"].createElement("div", null,
26
42
  react_1["default"].createElement(Text_1["default"], { content: __('Наименование'), className: bem.element('label') }),
27
43
  react_1["default"].createElement(form_1.InputField, { attribute: 'title', required: true, className: bem.element('name-field') }),
28
- react_1["default"].createElement(form_1.DropDownField, { attribute: 'eventGroupId', items: props.eventGroups, outline: true, placeholder: '\u0413\u0440\u0443\u043F\u043F\u0430', color: "primary", required: true, itemsContent: {
44
+ react_1["default"].createElement(form_1.DropDownField, { attribute: 'eventGroupId', items: props.eventGroups, outline: true, placeholder: '\u0413\u0440\u0443\u043F\u043F\u0430', color: "primary", itemsContent: {
29
45
  type: 'checkbox'
30
46
  } })),
31
47
  react_1["default"].createElement("div", null,
@@ -28,7 +28,7 @@
28
28
  > div {
29
29
  display: flex;
30
30
  flex-flow: row nowrap;
31
- align-items: center;
31
+ align-items: flex-start;
32
32
 
33
33
  gap: 12px;
34
34
 
@@ -26,18 +26,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  exports.__esModule = true;
29
- var isFunction_1 = __importDefault(require("lodash-es/isFunction"));
30
29
  var React = __importStar(require("react"));
31
- var react_use_1 = require("react-use");
30
+ var isFunction_1 = __importDefault(require("lodash-es/isFunction"));
32
31
  var hooks_1 = require("@steroidsjs/core/hooks");
33
32
  var react_1 = require("react");
34
33
  function DropDownView(props) {
35
- var _a;
36
34
  var bem = (0, hooks_1.useBem)('DropDownView');
37
35
  var ui = (0, hooks_1.useComponents)().ui;
38
- (0, react_use_1.useMount)(function () {
39
- props.calculatePosition(props.forwardedRef.current.getBoundingClientRect());
40
- });
36
+ var arrowRef = (0, react_1.useRef)(null);
37
+ (0, react_1.useEffect)(function () {
38
+ props.calculatePosition(props.forwardedRef.current.getBoundingClientRect(), props.hasArrow ? arrowRef.current.getBoundingClientRect() : null);
39
+ }, [props.calculatePosition]);
41
40
  var contentProps = (0, react_1.useMemo)(function () { return ({
42
41
  onClose: props.onClose
43
42
  }); }, [props.onClose]);
@@ -48,11 +47,12 @@ function DropDownView(props) {
48
47
  content = ui.renderView(content, contentProps);
49
48
  }
50
49
  }
51
- return (React.createElement("div", { ref: props.forwardedRef, className: bem(bem.block((_a = {
52
- show: props.isComponentVisible
53
- },
54
- _a["position-".concat(props.position)] = !!props.position,
55
- _a.hasArrow = props.hasArrow,
56
- _a)), props.className), style: props.style }, content));
50
+ return (React.createElement("div", { ref: props.forwardedRef, className: bem(bem.block({
51
+ show: props.isComponentVisible,
52
+ position: props.position
53
+ }), props.className), style: props.style },
54
+ props.hasArrow && (React.createElement("div", { ref: arrowRef, className: bem.element('arrow', { position: props.position }), style: props.arrowPosition })),
55
+ React.createElement("div", { className: bem.element('content') },
56
+ React.createElement("span", null, content))));
57
57
  }
58
58
  exports["default"] = DropDownView;
@@ -1,212 +1,71 @@
1
+ @use 'sass:math';
1
2
  @use "../../scss/variables";
3
+ @use '../../scss/mixins';
2
4
 
3
5
  :root {
4
- --dropdown-background: #fff;
5
- --dropdown-border: #dbe2e6;
6
- --dropdown-triangle-svg: url("data:image/svg+xml,%3Csvg width='21' height='11' viewBox='0 0 21 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M19.0416 0.5L10.1719 10.2567L1.30215 0.499998L19.0416 0.5Z' fill='white' stroke='%23dbe2e6'/%3E%3C/svg%3E%0A");
6
+ --dropdown-background-color: #fff;
7
+ --dropdown-border-color: #dbe2e6;
7
8
  }
8
9
 
9
10
  html[data-theme="dark"] {
10
- --dropdown-background: var(--gray-dark);
11
- --dropdown-border: transparent;
12
- --dropdown-triangle-svg: url("data:image/svg+xml,%3Csvg width='21' height='12' viewBox='0 0 21 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.5859 11.222L0.585938 0.222044L20.5859 0.222046L10.5859 11.222Z' fill='%23272A37'/%3E%3C/svg%3E");
11
+ --dropdown-background-color: var(--gray-dark);
12
+ --dropdown-border-color: transparent;
13
13
  }
14
14
 
15
- $dropdown-background: var(--dropdown-background);
16
- $dropdown-border: var(--dropdown-border);
17
- $dropdown-triangle-svg: var(--dropdown-triangle-svg);
15
+ $dropdown-background-color: var(--dropdown-background-color);
16
+ $dropdown-border-color: var(--dropdown-border-color);
18
17
 
18
+ $dropdown-arrow-width: 10px;
19
+ $dropdown-arrow-height: 10px;
20
+ $dropdown-arrow-border: math.div($dropdown-arrow-width, 2);
19
21
  $gap: 12px;
20
22
 
21
- %triangle {
22
- content: "";
23
- position: absolute;
24
- width: 20px;
25
- height: 11px;
26
- z-index: 2;
27
- background-image: $dropdown-triangle-svg;
28
- }
29
-
30
- %borderShaper {
31
- content: "";
32
- position: absolute;
33
- z-index: 3;
34
-
35
- width: 16px;
36
- height: 1px;
37
- background-color: $dropdown-background;
38
- border-left: 2px solid $dropdown-border;
39
- border-right: 2px solid $dropdown-border;
40
- }
41
-
42
- @mixin drop($edge, $padding) {
43
- @if ($edge == "top") {
44
- &::before {
45
- @extend %triangle;
46
-
47
- top: 100%;
48
- left: $padding;
49
- transform: translateX(-50%);
50
- }
51
-
52
- &::after {
53
- @extend %borderShaper;
54
-
55
- top: 100%;
56
- left: $padding;
57
- transform: translateX(-50%);
58
- }
59
- } @else if ($edge == "bottom") {
60
- &::before {
61
- @extend %triangle;
62
-
63
- top: 0;
64
- left: $padding;
65
- top: -11px;
66
- transform: translateX(-50%) rotate(180deg);
67
- }
68
-
69
- &::after {
70
- @extend %borderShaper;
71
-
72
- transform: translateX(-50%);
73
- top: -1px;
74
- left: $padding;
75
- }
76
- } @else if($edge == "left") {
77
- &::before {
78
- @extend %triangle;
79
-
80
- left: 100%;
81
- top: $padding;
82
- transform: translateX(-22.5%) rotate(-90deg);
83
- }
84
-
85
- &::after {
86
- @extend %borderShaper;
87
-
88
- left: 100%;
89
- top: $padding;
90
- transform: rotate(-90deg) translate(-30%, -7.5px);
91
- }
92
- } @else if($edge == "right") {
93
- &::before {
94
- @extend %triangle;
95
-
96
- right: 100%;
97
- top: $padding;
98
- transform: translateX(22.5%) rotate(90deg);
99
- }
100
-
101
- &::after {
102
- @extend %borderShaper;
103
-
104
- right: 100%;
105
- top: $padding;
106
- transform: rotate(-90deg) translate(-30%, 7.5px);
107
- }
108
- }
109
- }
23
+ $dropdown-arrow-offset-horizontal: 20px;
24
+ $dropdown-arrow-offset-vertical-top: 15px;
25
+ $dropdown-arrow-offset-vertical-bottom: 7px;
110
26
 
111
27
  .DropDownView {
112
- $root: &;
113
-
114
- z-index: 1000;
115
28
  position: absolute;
116
29
  color: variables.$text-color;
117
30
 
118
31
  transform: translate(0, 0);
119
32
  opacity: 0;
120
33
  transition: opacity 0.15s ease-in, transform 0.15s ease-in;
121
-
122
34
  z-index: 4;
35
+
123
36
  min-width: 200px;
124
37
  padding: 12px;
125
38
  border-radius: variables.$radius-large;
126
- background-color: $dropdown-background;
127
- border: 1px solid $dropdown-border;
39
+ background-color: $dropdown-background-color;
40
+ border: 1px solid $dropdown-border-color;
128
41
 
129
42
  &_show {
130
43
  opacity: 1;
131
44
  }
132
- &_position-top,
133
- &_position-topLeft,
134
- &_position-topRight {
135
- transform: translateY(-$gap);
136
- }
137
- &_position-bottom,
138
- &_position-bottomLeft,
139
- &_position-bottomRight {
140
- transform: translateY($gap);
141
- }
142
- &_position-left,
143
- &_position-leftTop,
144
- &_position-leftBottom {
145
- transform: translateX(-$gap);
146
- }
147
- &_position-right,
148
- &_position-rightTop,
149
- &_position-rightBottom {
150
- transform: translateX($gap);
151
- }
152
45
 
153
- &_position-top {
154
- @include drop("top", 50%);
155
- }
46
+ @include mixins.absolute-position($gap);
156
47
 
157
- &_position-topLeft {
158
- @include drop("top", 15%);
159
- }
160
-
161
- &_position-topRight {
162
- @include drop("top", 85%);
163
- }
164
-
165
- &_position-bottom {
166
- @include drop("bottom", 50%);
167
- }
168
-
169
- &_position-bottomLeft {
170
- @include drop("bottom", 15%);
171
- }
172
-
173
- &_position-bottomRight {
174
- @include drop("bottom", 85%);
175
- }
48
+ &__arrow {
49
+ position: absolute;
50
+ z-index: 1;
51
+ display: block;
52
+ pointer-events: none;
53
+ width: $dropdown-arrow-width;
54
+ height: $dropdown-arrow-height;
55
+ overflow: hidden;
56
+ border: 1px solid $dropdown-border-color;
57
+ background-color: $dropdown-background-color;
176
58
 
177
- &_position-left {
178
- @include drop("left", 46.5%);
179
- }
180
-
181
- &_position-leftTop {
182
- @include drop("left", 12.5%);
183
- }
184
-
185
- &_position-leftBottom {
186
- @include drop("left", 80%);
187
- }
188
-
189
- &_position-right {
190
- @include drop("right", 46.5%);
191
- }
192
-
193
- &_position-rightTop {
194
- @include drop("right", 12.5%);
195
- }
196
-
197
- &_position-rightBottom {
198
- @include drop("right", 80%);
59
+ @include mixins.arrow-position(
60
+ $dropdown-arrow-border,
61
+ $dropdown-arrow-offset-horizontal,
62
+ $dropdown-arrow-offset-vertical-top,
63
+ $dropdown-arrow-offset-vertical-bottom
64
+ );
199
65
  }
200
66
 
201
67
  &::before,
202
68
  &::after {
203
69
  opacity: 0;
204
70
  }
205
-
206
- &_hasArrow {
207
- &::before,
208
- &::after {
209
- opacity: 1;
210
- }
211
- }
212
71
  }
@@ -64,10 +64,11 @@ function DropDownFieldView(props) {
64
64
  _a["".concat(props.color)] = !!props.color && !props.outline,
65
65
  _a["outline_".concat(props.color)] = props.outline,
66
66
  _a.opened = props.isOpened,
67
- _a)), props.className), onKeyPress: function (e) { return e.key === 'Enter' && props.onOpen(); }, style: props.style, role: "button", tabIndex: 0 },
67
+ _a['is-invalid'] = !!props.errors,
68
+ _a.disabled = props.disabled,
69
+ _a)), props.className), onKeyPress: function (e) { return e.key === 'Enter' && !props.disabled && props.onOpen(); }, style: props.style, role: "button", tabIndex: 0 },
68
70
  React.createElement("div", { className: bem.element('selected-items', {
69
- reset: props.showReset,
70
- disabled: props.disabled
71
+ reset: props.showReset
71
72
  }), onClick: props.onOpen, tabIndex: -1, role: 'button' },
72
73
  renderPlaceholder(),
73
74
  React.createElement("span", { className: bem.element('selected-items') }, props.showEllipses
@@ -422,6 +422,15 @@ $drop-down-color-themes: map.merge(
422
422
  svg > * {
423
423
  stroke: variables.$text-color
424
424
  }
425
+ }
426
+
427
+ &_is-invalid {
428
+ border: 1px solid variables.$danger !important;
429
+ }
425
430
 
431
+ &_disabled {
432
+ background-color: variables.$element-background-color-disabled;
433
+ border-color: transparent;
434
+ pointer-events: none;
426
435
  }
427
436
  }
@@ -27,12 +27,12 @@ var React = __importStar(require("react"));
27
27
  var react_1 = require("react");
28
28
  var hooks_1 = require("@steroidsjs/core/hooks");
29
29
  function TooltipView(props) {
30
+ var bem = (0, hooks_1.useBem)('TooltipView');
30
31
  var tooltipRef = (0, react_1.useRef)(null);
31
32
  var arrowRef = (0, react_1.useRef)(null);
32
33
  (0, react_1.useEffect)(function () {
33
34
  props.calculatePosition(tooltipRef.current.getBoundingClientRect(), arrowRef.current.getBoundingClientRect());
34
35
  }, [props.calculatePosition]);
35
- var bem = (0, hooks_1.useBem)('TooltipView');
36
36
  return (React.createElement("div", { ref: tooltipRef, className: bem(bem.block({
37
37
  show: props.isTooltipVisible,
38
38
  position: props.position
@@ -1,5 +1,6 @@
1
1
  @use 'sass:math';
2
2
  @use "../../scss/variables";
3
+ @use '../../scss/mixins';
3
4
 
4
5
  $tooltip-arrow-width: 10px;
5
6
  $tooltip-arrow-height: 10px;
@@ -17,6 +18,7 @@ $tooltip-background-color: rgba(65, 65, 65, 0.95);
17
18
  top: 0;
18
19
  left: 0;
19
20
  max-width: 300px;
21
+ width: fit-content;
20
22
  word-break: break-all;
21
23
  padding: 8px 12px;
22
24
  border-radius: 6px;
@@ -31,27 +33,11 @@ $tooltip-background-color: rgba(65, 65, 65, 0.95);
31
33
  opacity: 1;
32
34
  }
33
35
 
34
- &_position{
35
- &_top, &_topLeft, &_topRight {
36
- transform: translateY(-$tooltip-gap);
37
- }
38
-
39
- &_bottom, &_bottomLeft, &_bottomRight {
40
- transform: translateY($tooltip-gap);
41
- }
42
-
43
- &_left, &_leftTop, &_leftBottom {
44
- transform: translateX(-$tooltip-gap);
45
- }
46
-
47
- &_right, &_rightTop, &_rightBottom {
48
- transform: translateX($tooltip-gap);
49
- }
50
- }
36
+ @include mixins.absolute-position($tooltip-gap);
51
37
 
52
38
  &__arrow{
53
39
  position: absolute;
54
-
40
+
55
41
  width: $tooltip-arrow-width;
56
42
  height: $tooltip-arrow-height;
57
43
 
@@ -60,65 +46,12 @@ $tooltip-background-color: rgba(65, 65, 65, 0.95);
60
46
  border-color: $tooltip-background-color;
61
47
  box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07);
62
48
 
63
- &_position_top, &_position_topLeft, &_position_topRight{
64
- bottom: -$tooltip-arrow-border;
65
- left: 50%;
66
- border-top-color: transparent;
67
- border-left-color: transparent;
68
- transform: translateX(-50%) rotate(45deg);
69
- }
70
- &_position_topLeft{
71
- left: $tooltip-arrow-offset-horizontal;
72
- }
73
- &_position_topRight{
74
- left: unset;
75
- right: $tooltip-arrow-offset-horizontal;
76
- }
77
-
78
- &_position_bottom, &_position_bottomLeft, &_position_bottomRight{
79
- top: -$tooltip-arrow-border;
80
- left: 50%;
81
- border-right-color: transparent;
82
- border-bottom-color: transparent;
83
- transform: translateX(-50%) rotate(45deg);
84
- }
85
- &_position_bottomLeft{
86
- left: $tooltip-arrow-offset-horizontal;
87
- }
88
- &_position_bottomRight{
89
- left: unset;
90
- right: $tooltip-arrow-offset-horizontal;
91
- }
92
-
93
- &_position_left, &_position_leftTop, &_position_leftBottom{
94
- right: -$tooltip-arrow-border;
95
- top: 50%;
96
- border-left-color: transparent;
97
- border-bottom-color: transparent;
98
- transform: translateY(-50%) rotate(45deg);
99
- }
100
- &_position_leftTop{
101
- top: $tooltip-arrow-offset-vertical-top;
102
- }
103
- &_position_leftBottom{
104
- top: unset;
105
- bottom: $tooltip-arrow-offset-vertical-bottom;
106
- }
107
-
108
- &_position_right, &_position_rightTop, &_position_rightBottom{
109
- left: -$tooltip-arrow-border;
110
- top: 50%;
111
- border-top-color: transparent;
112
- border-right-color: transparent;
113
- transform: translateY(-50%) rotate(45deg);
114
- }
115
- &_position_rightTop{
116
- top: $tooltip-arrow-offset-vertical-top;
117
- }
118
- &_position_rightBottom{
119
- top: unset;
120
- bottom: $tooltip-arrow-offset-vertical-bottom;
121
- }
49
+ @include mixins.arrow-position(
50
+ $tooltip-arrow-border,
51
+ $tooltip-arrow-offset-horizontal,
52
+ $tooltip-arrow-offset-vertical-top,
53
+ $tooltip-arrow-offset-vertical-bottom
54
+ );
122
55
  }
123
56
 
124
57
  &__content{
@@ -18,24 +18,23 @@ var react_1 = __importDefault(require("react"));
18
18
  var hooks_1 = require("@steroidsjs/core/hooks");
19
19
  var Format_1 = __importDefault(require("@steroidsjs/core/ui/format/Format"));
20
20
  var content_1 = require("@steroidsjs/core/ui/content");
21
- var DEFAULT_PADDING_LEFT = 32;
22
21
  var PADDING_WITH_ICON = 0;
23
22
  var PADDING_WITHOUT_ICON = 24;
24
23
  function TreeColumnView(props) {
25
24
  var bem = (0, hooks_1.useBem)('TreeColumnView');
26
- var levelPadding = props.levelPadding || DEFAULT_PADDING_LEFT;
27
25
  var paddingBasedOnIcon = props.item.hasItems ? PADDING_WITH_ICON : PADDING_WITHOUT_ICON;
28
26
  var renderFormat = function () { return (react_1["default"].createElement(Format_1["default"], __assign({}, props, (props.formatter || {}), { attribute: props.attribute }))); };
29
27
  var renderValue = function () { return (react_1["default"].createElement("span", { className: bem.element('value') }, renderFormat())); };
30
28
  return (react_1["default"].createElement("div", { className: bem.block(bem.block({
31
- size: props.size
32
- })) },
29
+ size: props.size,
30
+ 'has-items': props.item.hasItems
31
+ })), onClick: props.item.onClick, onKeyDown: function (e) { return e.key === 'Enter' && props.item.onClick(); }, role: 'button', tabIndex: 0 },
33
32
  react_1["default"].createElement("div", { className: bem.element('data'), style: {
34
- paddingLeft: "".concat(props.item.level * levelPadding + paddingBasedOnIcon, "px")
33
+ paddingLeft: "".concat(props.item.level * props.levelPadding + paddingBasedOnIcon, "px")
35
34
  } },
36
35
  props.item.hasItems && (react_1["default"].createElement(content_1.Icon, { name: 'expand_right', className: bem.element('icon', {
37
36
  opened: props.item.isOpened
38
- }), onClick: function () { return props.item.onTreeItemClick(props.item.uniqueId, props.item); } })),
37
+ }), tabIndex: -1 })),
39
38
  renderValue())));
40
39
  }
41
40
  exports["default"] = TreeColumnView;
@@ -11,6 +11,11 @@ html[data-theme="dark"] {
11
11
  $grid-icon-color: var(--grid-icon-color);
12
12
 
13
13
  .TreeColumnView {
14
+
15
+ &_has-items {
16
+ cursor: pointer;
17
+ }
18
+
14
19
  &__data {
15
20
  display: flex;
16
21
  align-items: center;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/bootstrap",
3
- "version": "3.0.0-beta.121",
3
+ "version": "3.0.0-beta.123",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
@@ -37,7 +37,7 @@
37
37
  "react-use": "^17.4.0"
38
38
  },
39
39
  "devDependencies": {
40
- "@steroidsjs/core": "^3.0 || >=3.0.0-beta.103",
40
+ "@steroidsjs/core": "^3.0 || >=3.0.0-beta.105",
41
41
  "@steroidsjs/eslint-config": "^2.1.4",
42
42
  "@types/enzyme": "^3.10.8",
43
43
  "@types/googlemaps": "^3.43.3",
@@ -1,4 +1,46 @@
1
1
  // margin
2
+ .m-1 {
3
+ margin: 0.25rem;
4
+ }
5
+
6
+ .m-2 {
7
+ margin: 0.5rem;
8
+ }
9
+
10
+ .m-3 {
11
+ margin: 1rem;
12
+ }
13
+
14
+ .m-horizontal-1 {
15
+ margin-left: 0.25rem;
16
+ margin-right: 0.25rem;
17
+ }
18
+
19
+ .m-horizontal-2 {
20
+ margin-left: 0.5rem;
21
+ margin-right: 0.5rem;
22
+ }
23
+
24
+ .m-horizontal-3 {
25
+ margin-left: 1rem;
26
+ margin-right: 1rem;
27
+ }
28
+
29
+ .m-vertical-1 {
30
+ margin-top: 0.25rem;
31
+ margin-bottom: 0.25rem;
32
+ }
33
+
34
+ .m-vertical-2 {
35
+ margin-top: 0.5rem;
36
+ margin-bottom: 0.5rem;
37
+ }
38
+
39
+ .m-vertical-3 {
40
+ margin-top: 1rem;
41
+ margin-bottom: 1rem;
42
+ }
43
+
2
44
  .mb-1 {
3
45
  margin-bottom: 0.25rem;
4
46
  }
@@ -48,6 +90,48 @@
48
90
  }
49
91
 
50
92
  // padding
93
+ .p-1 {
94
+ padding: 0.25rem;
95
+ }
96
+
97
+ .p-2 {
98
+ padding: 0.5rem;
99
+ }
100
+
101
+ .p-3 {
102
+ padding: 1rem;
103
+ }
104
+
105
+ .p-horizontal-1 {
106
+ padding-left: 0.25rem;
107
+ padding-right: 0.25rem;
108
+ }
109
+
110
+ .p-horizontal-2 {
111
+ padding-left: 0.5rem;
112
+ padding-right: 0.5rem;
113
+ }
114
+
115
+ .p-horizontal-3 {
116
+ padding-left: 1rem;
117
+ padding-right: 1rem;
118
+ }
119
+
120
+ .p-vertical-1 {
121
+ padding-top: 0.25rem;
122
+ padding-bottom: 0.25rem;
123
+ }
124
+
125
+ .p-vertical-2 {
126
+ padding-top: 0.5rem;
127
+ padding-bottom: 0.5rem;
128
+ }
129
+
130
+ .p-vertical-3 {
131
+ padding-top: 1rem;
132
+ padding-bottom: 1rem;
133
+ }
134
+
51
135
  .pb-1 {
52
136
  padding-bottom: 0.25rem;
53
137
  }
@@ -1,3 +1,4 @@
1
+ @use 'sass:math';
1
2
  @use "../variables/index" as variables;
2
3
 
3
4
  :root {
@@ -21,3 +22,92 @@ $tooltip-background-color: var(--tooltip-background-color);
21
22
  color: variables.$text-color;
22
23
  }
23
24
  }
25
+
26
+ @mixin absolute-position($gap) {
27
+ &_position{
28
+ &_top, &_topLeft, &_topRight {
29
+ transform: translateY(-$gap);
30
+ }
31
+
32
+ &_bottom, &_bottomLeft, &_bottomRight {
33
+ transform: translateY($gap);
34
+ }
35
+
36
+ &_left, &_leftTop, &_leftBottom {
37
+ transform: translateX(-$gap);
38
+ }
39
+
40
+ &_right, &_rightTop, &_rightBottom {
41
+ transform: translateX($gap);
42
+ }
43
+ }
44
+ }
45
+
46
+ @mixin arrow-position(
47
+ $arrow-border,
48
+ $arrow-offset-horizontal,
49
+ $arrow-offset-vertical-top,
50
+ $arrow-offset-vertical-bottom
51
+ ) {
52
+ &_position{
53
+ &_top, &_topLeft, &_topRight {
54
+ bottom: -$arrow-border;
55
+ left: 50%;
56
+ border-top-color: transparent;
57
+ border-left-color: transparent;
58
+ transform: translateX(-50%) rotate(45deg);
59
+ }
60
+ &_topLeft{
61
+ left: $arrow-offset-horizontal;
62
+ }
63
+ &_topRight{
64
+ left: unset;
65
+ right: $arrow-offset-horizontal;
66
+ }
67
+
68
+ &_bottom, &_bottomLeft, &_bottomRight {
69
+ top: -$arrow-border;
70
+ left: 50%;
71
+ border-right-color: transparent;
72
+ border-bottom-color: transparent;
73
+ transform: translateX(-50%) rotate(45deg);
74
+ }
75
+ &_bottomLeft{
76
+ left: $arrow-offset-horizontal;
77
+ }
78
+ &_bottomRight{
79
+ left: unset;
80
+ right: $arrow-offset-horizontal;
81
+ }
82
+
83
+ &_left, &_leftTop, &_leftBottom {
84
+ right: -$arrow-border;
85
+ top: 50%;
86
+ border-left-color: transparent;
87
+ border-bottom-color: transparent;
88
+ transform: translateY(-50%) rotate(45deg);
89
+ }
90
+ &_leftTop{
91
+ top: $arrow-offset-vertical-top;
92
+ }
93
+ &_leftBottom{
94
+ top: unset;
95
+ bottom: $arrow-offset-vertical-bottom;
96
+ }
97
+
98
+ &_right, &_rightTop, &_rightBottom {
99
+ left: -$arrow-border;
100
+ top: 50%;
101
+ border-top-color: transparent;
102
+ border-right-color: transparent;
103
+ transform: translateY(-50%) rotate(45deg);
104
+ }
105
+ &_rightTop{
106
+ top: $arrow-offset-vertical-top;
107
+ }
108
+ &_rightBottom{
109
+ top: unset;
110
+ bottom: $arrow-offset-vertical-bottom;
111
+ }
112
+ }
113
+ }