@steroidsjs/bootstrap 3.0.29 → 3.0.30

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.
@@ -212,14 +212,6 @@ $calendar-border-color: var(--calendar-border-color);
212
212
  background-color: $day-background-color-hover;
213
213
  }
214
214
 
215
- .DayPicker-Day--today:hover {
216
- background-color: transparent;
217
-
218
- .CalendarView__day {
219
- transition: background-color 150ms ease-in-out;
220
- }
221
- }
222
-
223
215
  &__day {
224
216
  position: relative;
225
217
  z-index: 1;
@@ -45,24 +45,30 @@ $autocomplete-icon-color: var(--autocomplete-icon-color);
45
45
  &__input {
46
46
  width: 100%;
47
47
  padding: 0 8px;
48
- border: 1px solid variables.$element-border-color;
48
+ outline: 1px solid variables.$element-border-color;
49
+ border: none;
49
50
  background-color: variables.$element-field-background-color;
50
51
  color: variables.$text-color;
51
- transition: border-color 150ms ease-in-out;
52
+ transition: outline 150ms ease-in-out;
52
53
  font-size: inherit;
53
54
  line-height: inherit;
55
+
56
+ &:active {
57
+ outline-color: variables.$primary;
58
+ }
54
59
  }
55
60
 
56
61
  &_opened {
57
62
  #{$root}__input {
58
- border-color: variables.$primary;
63
+ outline-width: 4px;
64
+ outline-color: variables.$primary-light;
59
65
  }
60
66
  }
61
67
 
62
68
  &_disabled {
63
69
  #{$root}__input {
64
70
  background-color: variables.$element-background-color-disabled;
65
- border-color: transparent;
71
+ outline-color: transparent;
66
72
  cursor: not-allowed;
67
73
  }
68
74
  }
@@ -9,7 +9,7 @@ $btn-letter-spacing: 0.1em;
9
9
  .ButtonView {
10
10
  $root: &;
11
11
 
12
- transition-property: color, background-color, border-color, box-shadow;
12
+ transition-property: color, background-color, outline-color, box-shadow;
13
13
  transition-duration: variables.$transition-duration;
14
14
  transition-timing-function: ease-in-out;
15
15
 
@@ -22,8 +22,9 @@ $btn-letter-spacing: 0.1em;
22
22
  &_button {
23
23
  position: relative;
24
24
  border-radius: variables.$radius-small;
25
+ border: none;
25
26
  user-select: none;
26
- border: 3px solid transparent;
27
+ outline: 3px solid transparent;
27
28
 
28
29
  padding: 0 20px;
29
30
  display: flex;
@@ -140,7 +141,7 @@ $btn-letter-spacing: 0.1em;
140
141
  &_failed {
141
142
  &,
142
143
  &:hover {
143
- border-color: variables.$danger;
144
+ outline-color: variables.$danger;
144
145
  box-shadow: 0 0 1rem rgba(variables.$danger, 0.2);
145
146
  }
146
147
  }
@@ -53,7 +53,7 @@ function DateFieldView(props) {
53
53
  'is-invalid': !!props.errors
54
54
  }), props.className), style: props.style },
55
55
  React.createElement("div", { className: bem.element('body') },
56
- React.createElement("input", __assign({}, props.inputProps, { ref: props.maskInputRef, onInput: function (e) {
56
+ React.createElement("input", __assign({}, props.inputProps, { id: props.id, ref: props.maskInputRef, onInput: function (e) {
57
57
  props.inputProps.onChange(e.currentTarget.value);
58
58
  }, className: bem(bem.element('input'), props.inputProps.className) })),
59
59
  React.createElement("div", { className: bem.element('icon-container') },
@@ -54,7 +54,7 @@ function DateRangeFieldView(props) {
54
54
  'is-invalid': !!props.errors
55
55
  }), props.className), style: props.style },
56
56
  React.createElement("div", { className: bem.element('body') },
57
- React.createElement("input", __assign({}, props.inputPropsFrom, { className: bem(bem.element('input', {})), onInput: function (e) { return props.inputPropsFrom.onChange(e.currentTarget.value); } })),
57
+ React.createElement("input", __assign({}, props.inputPropsFrom, { id: props.id, className: bem(bem.element('input', {})), onInput: function (e) { return props.inputPropsFrom.onChange(e.currentTarget.value); } })),
58
58
  React.createElement("input", __assign({}, props.inputPropsTo, { className: bem.element('input'), onInput: function (e) { return props.inputPropsTo.onChange(e.currentTarget.value); } })),
59
59
  React.createElement("div", { className: bem.element('icon-container') },
60
60
  props.icon && !hasValue && (React.createElement(Icon_1["default"], { className: bem.element('date-icon'), name: typeof props.icon === 'string' ? props.icon : 'calendar_range', tabIndex: -1 })),
@@ -57,7 +57,7 @@ function DateTimeFieldView(props) {
57
57
  'is-invalid': !!props.errors
58
58
  }), props.className), style: props.style },
59
59
  React.createElement("div", { className: bem.element('body') },
60
- React.createElement("input", __assign({}, props.inputProps, { placeholder: props.placeholder
60
+ React.createElement("input", __assign({}, props.inputProps, { id: props.id, placeholder: props.placeholder
61
61
  ? props.placeholder
62
62
  : props.inputProps.placeholder, className: bem(bem.element('input', {
63
63
  size: props.size
@@ -58,7 +58,7 @@ function DateTimeRangeFieldView(props) {
58
58
  'is-invalid': !!props.errors
59
59
  }), props.className), style: props.style },
60
60
  React.createElement("div", { className: bem.element('body') },
61
- React.createElement("input", __assign({}, props.inputPropsFrom, { className: bem(bem.element('input', {
61
+ React.createElement("input", __assign({}, props.inputPropsFrom, { id: props.id, className: bem(bem.element('input', {
62
62
  size: props.size
63
63
  })), onInput: function (e) { return props.inputPropsFrom.onChange(e.currentTarget.value); } })),
64
64
  React.createElement("input", __assign({}, props.inputPropsTo, { className: bem(bem.element('input', {
@@ -152,19 +152,23 @@ $eye-filled-color: var(--eye-filled-color);
152
152
  }
153
153
 
154
154
  &__security-bar {
155
- position: relative;
155
+ position: absolute;
156
156
  width: 100%;
157
157
  height: 4px;
158
158
  border-radius: 4px;
159
- margin-top: 8px;
159
+
160
+ bottom: -12px;
160
161
 
161
162
  background-color: $security-bar-background;
162
163
 
164
+ opacity: 0;
165
+ transition: 0.15s ease opacity;
166
+
163
167
  &::before {
164
168
  content: "";
165
169
  position: absolute;
166
170
  width: 0%;
167
- height: 4px;
171
+ height: 100%;
168
172
  border-radius: 4px;
169
173
  transition: width 1s ease-in-out;
170
174
  }
@@ -184,6 +188,11 @@ $eye-filled-color: var(--eye-filled-color);
184
188
  background-color: variables.$success;
185
189
  }
186
190
  }
191
+ &:focus-within {
192
+ #{$root}__security-bar {
193
+ opacity: 1;
194
+ }
195
+ }
187
196
 
188
197
  &__icon-eye {
189
198
  outline: none;
@@ -54,7 +54,7 @@ function TimeFieldView(props) {
54
54
  'is-invalid': !!props.errors
55
55
  }), props.className), style: props.style },
56
56
  React.createElement("div", { className: bem.element('body') },
57
- React.createElement("input", __assign({}, props.inputProps, { className: bem(bem.element('input'), props.inputProps.className), onChange: function (e) { return props.inputProps.onChange(e.target.value); } })),
57
+ React.createElement("input", __assign({}, props.inputProps, { id: props.id, className: bem(bem.element('input'), props.inputProps.className), onChange: function (e) { return props.inputProps.onChange(e.target.value); } })),
58
58
  React.createElement("div", { className: bem.element('icon-container') },
59
59
  !props.inputProps.value && props.icon && (React.createElement(Icon_1["default"], { className: bem.element('date-icon'), name: typeof props.icon === 'string' ? props.icon : 'calendar_range', tabIndex: -1 })),
60
60
  props.showRemove && props.inputProps.value && props.icon !== false && (React.createElement(Icon_1["default"], { className: bem.element('close-icon'), onClick: function (e) {
@@ -18,6 +18,8 @@
18
18
  &__dropdown {
19
19
  background: variables.$element-background-color;
20
20
 
21
+ min-width: unset;
22
+
21
23
  @include mixins.calendar-border();
22
24
  }
23
25
 
@@ -30,7 +32,23 @@
30
32
  padding-top: 10px;
31
33
  display: flex;
32
34
  flex-flow: row nowrap;
33
- column-gap: 10px;
35
+ column-gap: 10px;
36
+ }
37
+
38
+ &:has(.TimePanelView__button_now) {
39
+ .TimePanelView {
40
+ display: flex;
41
+ flex-direction: column;
42
+ align-items: center;
43
+
44
+ &__button_now {
45
+ margin-bottom: 6px;
46
+ }
47
+ }
48
+ .TimePanelView__footer {
49
+ flex-direction: column;
50
+ }
51
+
34
52
  }
35
53
  }
36
54
  }
@@ -1,5 +1,10 @@
1
1
  /// <reference types="react" />
2
2
  import { ITimePanelViewProps } from '@steroidsjs/core/ui/form/TimeField/TimeField';
3
+ export interface ITimePanelColumn {
4
+ values: string[];
5
+ currentValueKey: string;
6
+ onUpdate: (value: string) => void;
7
+ }
3
8
  declare function TimePanelView(props: ITimePanelViewProps): JSX.Element;
4
9
  declare namespace TimePanelView {
5
10
  var defaultProps: {
@@ -29,6 +29,7 @@ exports.__esModule = true;
29
29
  var React = __importStar(require("react"));
30
30
  var hooks_1 = require("@steroidsjs/core/hooks");
31
31
  var padStart_1 = __importDefault(require("lodash-es/padStart"));
32
+ var TimePanelColumn_1 = __importDefault(require("./views/TimePanelColumn"));
32
33
  var getHours = function () {
33
34
  var result = [];
34
35
  for (var i = 0; i < 24; i += 1) {
@@ -48,29 +49,26 @@ var getMinutes = function () {
48
49
  function TimePanelView(props) {
49
50
  var bem = (0, hooks_1.useBem)('TimePanelView');
50
51
  var _a = props.value ? props.value.split(':') : ['00', '00'], hours = _a[0], minutes = _a[1];
52
+ var currentValues = {
53
+ hours: hours,
54
+ minutes: minutes
55
+ };
56
+ var COLUMNS = [{
57
+ values: getHours(),
58
+ currentValueKey: 'hours',
59
+ onUpdate: function (value) {
60
+ props.onSelect(value + ':' + minutes);
61
+ }
62
+ }, {
63
+ values: getMinutes(),
64
+ currentValueKey: 'minutes',
65
+ onUpdate: function (value) {
66
+ props.onSelect(hours + ':' + value);
67
+ }
68
+ }];
51
69
  return (React.createElement("div", { className: bem(bem.block(), props.className) },
52
- props.showHeader && (React.createElement("div", { className: bem.element('header') }, props.value && ("".concat(hours, ":").concat(minutes)))),
53
- React.createElement("div", { className: bem.element('body') },
54
- React.createElement("div", { className: bem.element('column') }, getHours().map(function (value, index) { return (React.createElement("div", { key: index, className: bem.element('cell', {
55
- selected: value === hours
56
- }), onKeyPress: function (e) {
57
- e.preventDefault();
58
- props.onSelect(value + ':' + minutes);
59
- }, onClick: function (e) {
60
- e.preventDefault();
61
- props.onSelect(value + ':' + minutes);
62
- }, role: 'button', tabIndex: 0 },
63
- React.createElement("div", { className: bem.element('cell-value') }, value))); })),
64
- React.createElement("div", { className: bem.element('column') }, getMinutes().map(function (value, index) { return (React.createElement("div", { key: index, className: bem.element('cell', {
65
- selected: value === minutes
66
- }), onKeyPress: function (e) {
67
- e.preventDefault();
68
- props.onSelect(hours + ':' + value);
69
- }, onClick: function (e) {
70
- e.preventDefault();
71
- props.onSelect(hours + ':' + value);
72
- }, role: 'button', tabIndex: 0 },
73
- React.createElement("div", { className: bem.element('cell-value') }, value))); }))),
70
+ props.showHeader && (React.createElement("div", { className: bem.element('header') }, props.value && ("".concat(currentValues.hours, ":").concat(currentValues.minutes)))),
71
+ React.createElement("div", { className: bem.element('body') }, COLUMNS.map(function (column) { return (React.createElement(TimePanelColumn_1["default"], { key: column.currentValueKey, column: column, currentValue: currentValues[column.currentValueKey] })); })),
74
72
  React.createElement("div", { className: bem.element('footer', { 'to-end': !props.showNow }) },
75
73
  props.showNow && (React.createElement("button", { className: bem.element('button', 'now'), onClick: function (e) {
76
74
  e.preventDefault();
@@ -21,29 +21,6 @@
21
21
  border-radius: variables.$input-border-radius;
22
22
  }
23
23
 
24
- &__column {
25
- height: 220px;
26
- overflow-y: auto;
27
- list-style: none;
28
- padding: 0;
29
- margin: 0;
30
- @include mixins.scrollWrapper(298px, 0, variables.$scroll-thumb-color, variables.$scroll-track-color);
31
- }
32
-
33
- &__cell {
34
- padding: 5px 20px;
35
- cursor: pointer;
36
-
37
- &_selected {
38
- background-color: variables.$primary-light;
39
- }
40
-
41
- transition: background-color 0.1s ease-in;
42
- &:hover {
43
- background-color: variables.$back-disabled;
44
- }
45
- }
46
-
47
24
  &__footer {
48
25
  display: flex;
49
26
  align-items: center;
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { ITimePanelColumn } from '../../TimePanelView';
3
+ import './TimePanelColumn.scss';
4
+ export interface ITimePanelColumnProps {
5
+ column: ITimePanelColumn;
6
+ currentValue: string;
7
+ }
8
+ export default function TimePanelColumn(props: ITimePanelColumnProps): JSX.Element;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ exports.__esModule = true;
6
+ var react_1 = __importDefault(require("react"));
7
+ var hooks_1 = require("@steroidsjs/core/hooks");
8
+ require("./TimePanelColumn.scss");
9
+ function TimePanelColumn(props) {
10
+ var bem = (0, hooks_1.useBem)('TimePanelColumn');
11
+ var onUpdate = function (value) { return function () {
12
+ props.column.onUpdate(value);
13
+ }; };
14
+ return (react_1["default"].createElement("div", { className: bem.block() },
15
+ react_1["default"].createElement("div", { className: bem.element('column') }, props.column.values.map(function (value, index) { return (react_1["default"].createElement("div", { key: index, className: bem.element('cell', {
16
+ selected: value === props.currentValue
17
+ }), onKeyPress: onUpdate(value), onClick: onUpdate(value), role: 'button', tabIndex: 0 },
18
+ react_1["default"].createElement("div", { className: bem.element('cell-value') }, value))); }))));
19
+ }
20
+ exports["default"] = TimePanelColumn;
@@ -0,0 +1,53 @@
1
+ @use "../../../../scss/variables";
2
+ @use '../../../../scss/mixins';
3
+
4
+ $color: var(--element-background-color);
5
+ $color-hidden: rgb(from var(--element-background-color) r g b / 0%);
6
+ $background-linear-gradient: linear-gradient(to top, $color-hidden 0%, $color 100%);
7
+
8
+ .TimePanelColumn {
9
+ position: relative;
10
+
11
+ &__column {
12
+ height: 220px;
13
+ overflow-y: auto;
14
+ list-style: none;
15
+ padding: 39px 0;
16
+ margin: 0;
17
+ @include mixins.scrollWrapper(298px, 0, variables.$scroll-thumb-color, variables.$scroll-track-color);
18
+ }
19
+
20
+ &__cell {
21
+ padding: 5px 20px;
22
+ cursor: pointer;
23
+
24
+ transition: background-color 0.1s ease-in;
25
+
26
+ &_selected {
27
+ background-color: variables.$primary-light;
28
+ }
29
+
30
+ &:hover {
31
+ background-color: variables.$back-disabled;
32
+ }
33
+ }
34
+
35
+ &::before,
36
+ &::after {
37
+ content: '';
38
+ position: absolute;
39
+ top: 0;
40
+ left: 0;
41
+ height: 39px;
42
+ width: 100%;
43
+
44
+ background: $background-linear-gradient;
45
+
46
+ pointer-events: none;
47
+ }
48
+ &::after {
49
+ bottom: 0;
50
+ top: unset;
51
+ transform: rotateZ(180deg);
52
+ }
53
+ }
@@ -0,0 +1,2 @@
1
+ import TimePanelColumn from './TimePanelColumn';
2
+ export default TimePanelColumn;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ exports.__esModule = true;
6
+ var TimePanelColumn_1 = __importDefault(require("./TimePanelColumn"));
7
+ exports["default"] = TimePanelColumn_1["default"];
@@ -54,7 +54,7 @@ function TimeRangeFieldView(props) {
54
54
  'is-invalid': !!props.errors
55
55
  }), props.className), style: props.style },
56
56
  react_1["default"].createElement("div", { className: bem.element('body') },
57
- react_1["default"].createElement("input", __assign({}, props.inputPropsFrom, { className: bem(bem.element('input')), onChange: function (e) { return props.inputPropsFrom.onChange(e.target.value); } })),
57
+ react_1["default"].createElement("input", __assign({}, props.inputPropsFrom, { id: props.id, className: bem(bem.element('input')), onChange: function (e) { return props.inputPropsFrom.onChange(e.target.value); } })),
58
58
  react_1["default"].createElement("input", __assign({}, props.inputPropsTo, { className: bem.element('input'), onChange: function (e) { return props.inputPropsTo.onChange(e.target.value); } })),
59
59
  react_1["default"].createElement("div", { className: bem.element('icon-container') },
60
60
  props.icon && !hasValue && (react_1["default"].createElement(content_1.Icon, { className: bem.element('date-icon'), name: typeof props.icon === 'string' ? props.icon : 'calendar_range', tabIndex: -1 })),
@@ -50,6 +50,12 @@
50
50
  flex-flow: row nowrap;
51
51
  column-gap: 47px;
52
52
 
53
+ .TimePanelView {
54
+ display: flex;
55
+ flex-direction: column;
56
+ align-items: center;
57
+ }
58
+
53
59
  .TimePanelView__footer {
54
60
  padding: 0;
55
61
  padding-top: 10px;
@@ -1,3 +1,4 @@
1
+ @use "sass:map";
1
2
  @use "../../../../scss/variables";
2
3
 
3
4
  .DiagramColumnView {
@@ -68,8 +69,8 @@
68
69
  &_color {
69
70
  @each $color, $color-map in variables.$diagram-colors {
70
71
  &_#{$color} {
71
- background-color: map-get($color-map, color-themed);
72
- border-right: 1px solid map-get($color-map, color);
72
+ background-color: map.get($color-map, color-themed);
73
+ border-right: 1px solid map.get($color-map, color);
73
74
  }
74
75
  }
75
76
  }
@@ -107,8 +108,8 @@
107
108
  &_color {
108
109
  @each $color, $color-map in variables.$diagram-colors {
109
110
  &_#{$color} {
110
- background-color: map-get($color-map, color-themed);
111
- border-top: 1px solid map-get($color-map, color);
111
+ background-color: map.get($color-map, color-themed);
112
+ border-top: 1px solid map.get($color-map, color);
112
113
  }
113
114
  }
114
115
  }
@@ -152,7 +153,7 @@
152
153
  &_color {
153
154
  @each $color, $color-map in variables.$diagram-colors {
154
155
  &_#{$color} {
155
- border: 2px solid map-get($color-map, color);
156
+ border: 2px solid map.get($color-map, color);
156
157
  }
157
158
  }
158
159
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/bootstrap",
3
- "version": "3.0.29",
3
+ "version": "3.0.30",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
@@ -35,7 +35,7 @@
35
35
  "react-use": "^17.4.0"
36
36
  },
37
37
  "devDependencies": {
38
- "@steroidsjs/core": "3.0.49",
38
+ "@steroidsjs/core": "3.0.52",
39
39
  "@steroidsjs/eslint-config": "^2.1.6",
40
40
  "@types/enzyme": "^3.10.8",
41
41
  "@types/googlemaps": "^3.43.3",
@@ -57,25 +57,25 @@
57
57
  background-color: transparent;
58
58
  color: map.get($colorMap, color);
59
59
  stroke: map.get($colorMap, color);
60
- border: 1px solid map.get($colorMap, color);
60
+ outline: 1px solid map.get($colorMap, color);
61
61
 
62
62
  @include svg-color(map.get($colorMap, text-color));
63
63
 
64
64
  &:hover {
65
65
  @include svg-color(map.get($colorMap, color-dark));
66
66
  color: map.get($colorMap, color-dark);
67
- border-color: map.get($colorMap, color-dark);
67
+ outline-color: map.get($colorMap, color-dark);
68
68
  }
69
69
  &:focus {
70
70
  box-shadow:
71
71
  0 0 0 4px map.get($colorMap, color-light),
72
72
  0 0 0 4px map.get($colorMap, color-light);
73
- border: 1px solid transparent;
73
+ outline: 1px solid transparent;
74
74
  }
75
75
  &:active {
76
76
  @include svg-color(map.get($colorMap, color-light));
77
77
  color: map.get($colorMap, color-light);
78
- border-color: map.get($colorMap, color-light);
78
+ outline-color: map.get($colorMap, color-light);
79
79
  stroke: map.get($colorMap, color-light);
80
80
  box-shadow: none;
81
81
  }
@@ -84,7 +84,7 @@
84
84
  background-color: transparent;
85
85
  @include svg-color(map.get($colorMap, color));
86
86
  color: map.get($colorMap, color);
87
- border: 1px solid map.get($colorMap, color);
87
+ outline: 1px solid map.get($colorMap, color);
88
88
  }
89
89
 
90
90
  @if ($colorName == "basic") {
@@ -387,7 +387,7 @@ $date-sizes: map.merge(
387
387
  margin-top: 2px;
388
388
  }
389
389
 
390
- .TimePanelView__column {
390
+ .TimePanelView .TimePanelColumn__column {
391
391
  height: 298px;
392
392
  row-gap: 2px;
393
393
  border: none;
@@ -405,7 +405,7 @@ $date-sizes: map.merge(
405
405
  height: 0px;
406
406
  }
407
407
 
408
- .TimePanelView__cell {
408
+ .TimePanelColumn__cell {
409
409
  padding: 0;
410
410
  border-radius: variables.$radius-large;
411
411