@steroidsjs/bootstrap 2.1.0-beta.5 → 2.1.2

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 (33) hide show
  1. package/README.md +7 -0
  2. package/form/Button/ButtonView.js +1 -1
  3. package/form/Button/ButtonView.scss +1 -1
  4. package/form/CheckboxField/CheckboxFieldView.js +1 -1
  5. package/form/CheckboxField/CheckboxFieldView.scss +40 -6
  6. package/form/CheckboxListField/CheckboxListFieldView.js +4 -5
  7. package/form/CheckboxListField/CheckboxListFieldView.scss +45 -1
  8. package/form/DropDownField/DropDownFieldView.js +8 -15
  9. package/form/DropDownField/DropDownFieldView.scss +0 -1
  10. package/form/FieldList/FieldListItemView.d.ts +1 -1
  11. package/form/FieldList/FieldListItemView.js +1 -1
  12. package/form/FieldList/FieldListView.js +2 -2
  13. package/form/FieldList/FieldListView.scss +1 -6
  14. package/form/Form/FormView.js +4 -1
  15. package/form/Form/FormView.scss +16 -2
  16. package/form/ImageField/{ImageFieldModalVIew.d.ts → ImageFieldModalView.d.ts} +1 -1
  17. package/form/ImageField/{ImageFieldModalVIew.js → ImageFieldModalView.js} +4 -4
  18. package/form/ImageField/{ImageFieldModalVIew.scss → ImageFieldModalView.scss} +1 -1
  19. package/form/ImageField/ImageFieldView.d.ts +1 -1
  20. package/form/ImageField/ImageFieldView.js +10 -10
  21. package/form/NumberField/NumberFieldView.js +2 -2
  22. package/form/NumberField/NumberFieldView.scss +28 -11
  23. package/form/SliderField/SliderFieldView.js +29 -9
  24. package/form/SliderField/SliderFieldView.scss +39 -20
  25. package/form/TextField/TextFieldView.scss +3 -2
  26. package/layout/Skeleton/SkeletonView.d.ts +1 -1
  27. package/layout/Skeleton/SkeletonView.js +1 -1
  28. package/layout/Skeleton/SkeletonView.scss +2 -1
  29. package/layout/Tooltip/TooltipView.scss +1 -0
  30. package/list/List/ListView.js +3 -0
  31. package/nav/Nav/NavIconView.js +1 -1
  32. package/package.json +3 -3
  33. package/scss/variables/colors.scss +40 -38
package/README.md CHANGED
@@ -0,0 +1,7 @@
1
+
2
+ # Bootstrap views for Steroids
3
+
4
+ Эта библиотека содержит представления (views) для компонентов из [Steroids](https://github.com/steroids/react/),
5
+ стилизованные под UI-фреймворк [Bootstrap](https://getbootstrap.com/).
6
+
7
+ Подробнее о том как создавать и использовать эти view-файлы можно узнать в [документации Steroids](https://github.com/steroids/react/blob/master/docs/index.md)
@@ -64,7 +64,7 @@ function ButtonView(props) {
64
64
  renderLabel(),
65
65
  renderBadge()));
66
66
  }
67
- return (React.createElement("button", { type: props.type, disabled: props.disabled, onClick: props.onClick, style: props.style, className: className },
67
+ return (React.createElement("button", { title: props.hint, type: props.type, disabled: props.disabled, onClick: props.onClick, style: props.style, className: className },
68
68
  renderLabel(),
69
69
  renderBadge()));
70
70
  }
@@ -59,7 +59,7 @@
59
59
 
60
60
  &_link {
61
61
  justify-content: flex-start;
62
- background-color: #fff;
62
+ background-color: transparent;
63
63
  }
64
64
 
65
65
  &__icon {
@@ -39,7 +39,7 @@ var useUniqueId_1 = __importDefault(require("@steroidsjs/core/hooks/useUniqueId"
39
39
  function CheckboxFieldView(props) {
40
40
  var bem = hooks_1.useBem('CheckboxFieldView');
41
41
  var id = useUniqueId_1["default"]('checkbox');
42
- return (React.createElement("div", { className: bem(bem.block(), 'custom-control', 'custom-checkbox') },
42
+ return (React.createElement("div", { className: bem(bem.block({ 'is-invalid': !!props.errors }), 'custom-control', 'custom-checkbox') },
43
43
  React.createElement("input", __assign({ className: bem(bem.element('input'), 'custom-control-input', !!props.errors && 'is-invalid', props.className), id: id }, props.inputProps, { disabled: props.disabled, required: props.required })),
44
44
  React.createElement("label", { className: bem(bem.element('label'), 'custom-control-label'), htmlFor: id },
45
45
  React.createElement("span", { className: bem.element('label-text', { required: props.required }) }, props.label))));
@@ -1,12 +1,46 @@
1
1
  .CheckboxFieldView {
2
2
  display: inline-block;
3
3
 
4
- &__label-text {
5
- &_required:after {
6
- display: inline-block;
7
- content: '*';
8
- color: $danger;
9
- margin: 0 0 0 3px;
4
+ &__label {
5
+ &-text {
6
+ &_required:after {
7
+ display: inline-block;
8
+ content: '*';
9
+ color: $danger;
10
+ margin: 0 0 0 3px;
11
+ }
12
+ }
13
+ }
14
+ .custom-control-label {
15
+ &::before, &::after {
16
+ top: 0;
17
+ }
18
+ }
19
+
20
+ .custom-control-input {
21
+ &:checked ~ .custom-control-label {
22
+ &::before {
23
+ border-color: $primary;
24
+ background: $primary;
25
+ }
26
+ &:hover {
27
+ &::before {
28
+ background: $primary-dark;
29
+ }
30
+ }
31
+ &:active {
32
+ &::before {
33
+ background: $primary-light;
34
+ }
35
+ }
36
+ }
37
+ &:disabled ~ .custom-control-label {
38
+ color: $border-default;
39
+
40
+ &::before {
41
+ border: unset;
42
+ background-color: $back-disabled;
43
+ }
10
44
  }
11
45
  }
12
46
  }
@@ -39,10 +39,9 @@ var useUniqueId_1 = __importDefault(require("@steroidsjs/core/hooks/useUniqueId"
39
39
  function CheckboxListFieldView(props) {
40
40
  var bem = hooks_1.useBem('CheckboxListFieldView');
41
41
  var prefix = useUniqueId_1["default"]('checkbox');
42
- return (React.createElement("div", { className: bem(bem.block(), props.className) }, props.items.map(function (item) { return (React.createElement("div", { key: item.id, className: "custom-control custom-checkbox" },
43
- React.createElement("input", __assign({}, props.inputProps, { id: prefix + "_" + item.id, className: bem(bem.element('input'), 'custom-control-input', !!props.errors && 'is-invalid'), checked: props.selectedIds.includes(item.id), disabled: props.disabled, onChange: function () {
44
- props.onItemSelect(item.id);
45
- }, onMouseOver: function () { return props.onItemHover(item.id); } })),
46
- React.createElement("label", { className: "custom-control-label", htmlFor: prefix + "_" + item.id }, item.label))); })));
42
+ return (React.createElement("div", { className: bem(bem.block({ 'is-invalid': !!props.errors }), props.className) }, props.items.map(function (item) { return (React.createElement("div", { key: item.id, className: "custom-control custom-checkbox" },
43
+ React.createElement("input", __assign({}, props.inputProps, { disabled: props.disabled, required: props.required, id: prefix + "_" + item.id, className: bem(bem.element('input'), 'custom-control-input', !!props.errors && 'is-invalid'), checked: props.selectedIds.includes(item.id), onChange: function () { return props.onItemSelect(item.id); }, onMouseOver: function () { return props.onItemHover(item.id); } })),
44
+ React.createElement("label", { className: bem(bem.element('label'), 'custom-control-label'), htmlFor: prefix + "_" + item.id },
45
+ React.createElement("span", { className: bem.element('label-text', { required: props.required }) }, item.label)))); })));
47
46
  }
48
47
  exports["default"] = CheckboxListFieldView;
@@ -1,3 +1,47 @@
1
1
  .CheckboxListFieldView {
2
+ &__label {
3
+ &-text {
4
+ &_required:after {
5
+ display: inline-block;
6
+ content: '*';
7
+ color: $danger;
8
+ margin: 0 0 0 3px;
9
+ }
10
+ }
11
+ }
2
12
 
3
- }
13
+ .custom-control-label {
14
+ &::before, &::after {
15
+ border-color: $border-default;
16
+ top: 0;
17
+ }
18
+ }
19
+
20
+ .custom-control-input {
21
+ &:checked ~ .custom-control-label {
22
+ &::before {
23
+ border-color: $primary;
24
+ background: $primary;
25
+ }
26
+ &:hover {
27
+ &::before {
28
+ background: $primary-dark;
29
+ }
30
+ }
31
+ &:active {
32
+ &::before {
33
+ background: $primary-light;
34
+ }
35
+ }
36
+ }
37
+ &:disabled ~ .custom-control-label {
38
+ color: $border-default;
39
+
40
+ &::before {
41
+ border: unset;
42
+ background-color: $back-disabled;
43
+ }
44
+ }
45
+ }
46
+
47
+ }
@@ -31,23 +31,16 @@ var __importStar = (this && this.__importStar) || function (mod) {
31
31
  };
32
32
  exports.__esModule = true;
33
33
  var React = __importStar(require("react"));
34
+ var react_1 = require("react");
34
35
  var hooks_1 = require("@steroidsjs/core/hooks");
35
36
  function DropDownFieldView(props) {
36
- /* TODO Move to core component
37
- static defaultProps = {
38
- searchAutoFocus: true,
39
- };
40
-
41
- componentDidUpdate(prevProps) {
42
- // Auto focus on search
43
- if (props.searchAutoFocus && props.autoComplete && !prevProps.isOpened && props.isOpened) {
44
- const element: any = findDOMNode(this);
45
- const input = element.querySelector('.' + props.bem.element('search-input'));
46
- if (input) {
47
- input.focus();
48
- }
37
+ var inputRef = react_1.useRef(null);
38
+ // Auto focus on search
39
+ react_1.useEffect(function () {
40
+ if (props.isSearchAutoFocus && props.isAutoComplete && props.isOpened && (inputRef === null || inputRef === void 0 ? void 0 : inputRef.current)) {
41
+ inputRef.current.focus();
49
42
  }
50
- }*/
43
+ }, [props.isAutoComplete, props.isOpened, props.isSearchAutoFocus]);
51
44
  var bem = hooks_1.useBem('DropDownFieldView');
52
45
  return (React.createElement("div", { ref: props.forwardedRef, className: bem(bem.block({ size: props.size }), props.className), style: props.style },
53
46
  React.createElement("div", { className: bem.element('selected-items', {
@@ -79,7 +72,7 @@ function DropDownFieldView(props) {
79
72
  props.showReset && props.selectedIds.length > 0 && (React.createElement("button", { className: bem.element('reset'), onClick: props.onReset, "aria-label": __('Сбросить') })),
80
73
  props.isOpened && (React.createElement("div", { className: bem.element('drop-down') },
81
74
  props.isAutoComplete && (React.createElement("div", { className: bem.element('search') },
82
- React.createElement("input", __assign({}, props.searchInputProps, { onChange: function (e) { return props.searchInputProps.onChange(e.target.value); }, className: bem('form-control', 'form-control-' + props.size, bem.element('search-input'), props.searchInputProps.className) })))),
75
+ React.createElement("input", __assign({}, props.searchInputProps, { ref: inputRef, onChange: function (e) { return props.searchInputProps.onChange(e.target.value); }, className: bem('form-control', 'form-control-' + props.size, bem.element('search-input'), props.searchInputProps.className) })))),
83
76
  React.createElement("div", { className: bem.element('drop-down-list') }, props.items.map(function (item) { return (React.createElement("button", { key: String(item[props.primaryKey]), type: 'button', className: bem.element('drop-down-item', {
84
77
  hover: props.hoveredId === item[props.primaryKey],
85
78
  select: props.selectedIds.includes(item[props.primaryKey])
@@ -21,7 +21,6 @@
21
21
  background-clip: padding-box;
22
22
 
23
23
  background-color: #fff;
24
- box-shadow: 0 0 30px rgba(0, 0, 0, 0.1);
25
24
  border: 1px solid $border-default;
26
25
  border-radius: 0.25rem;
27
26
  color: $heading;
@@ -1,4 +1,4 @@
1
1
  import * as React from 'react';
2
2
  import { IFieldListItemViewProps } from '@steroidsjs/core/ui/form/FieldList/FieldList';
3
- declare const _default: React.NamedExoticComponent<IFieldListItemViewProps>;
3
+ declare const _default: React.MemoExoticComponent<(props: IFieldListItemViewProps) => JSX.Element>;
4
4
  export default _default;
@@ -33,7 +33,7 @@ exports.__esModule = true;
33
33
  var React = __importStar(require("react"));
34
34
  var hooks_1 = require("@steroidsjs/core/hooks");
35
35
  var form_1 = require("@steroidsjs/core/ui/form");
36
- exports["default"] = React.memo(function FieldListItemView(props) {
36
+ exports["default"] = React.memo(function (props) {
37
37
  var bem = hooks_1.useBem('FieldListItemView');
38
38
  return (React.createElement("tr", null,
39
39
  props.items.map(function (field, index) { return (React.createElement("td", { key: index, className: bem(bem.element('table-cell'), field.className) },
@@ -21,6 +21,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
21
21
  exports.__esModule = true;
22
22
  var React = __importStar(require("react"));
23
23
  var hooks_1 = require("@steroidsjs/core/hooks");
24
+ var form_1 = require("@steroidsjs/core/ui/form");
24
25
  function FieldListView(props) {
25
26
  var bem = hooks_1.useBem('FieldListView');
26
27
  return (React.createElement("div", { className: bem(bem.block(), props.className), style: props.style, ref: props.forwardedRef },
@@ -32,10 +33,9 @@ function FieldListView(props) {
32
33
  // eslint-disable-next-line jsx-a11y/control-has-associated-label
33
34
  React.createElement("th", null)))),
34
35
  React.createElement("tbody", null, props.children)),
35
- props.showAdd && !props.disabled && (React.createElement("button", { className: bem.element('link-add'), onClick: function (e) {
36
+ props.showAdd && !props.disabled && (React.createElement(form_1.Button, { formId: false, layout: false, color: 'secondary', className: bem.element('button-add'), onClick: function (e) {
36
37
  e.preventDefault();
37
38
  props.onAdd();
38
39
  } }, __('Добавить ещё')))));
39
40
  }
40
41
  exports["default"] = FieldListView;
41
- ;
@@ -25,13 +25,8 @@
25
25
  color: $danger;
26
26
  }
27
27
 
28
- &__link-add {
28
+ &__button-add {
29
29
  margin-left: 0.75rem;
30
- border-bottom: 1px dashed $link-color;
31
-
32
- &:hover {
33
- text-decoration: none;
34
- }
35
30
  }
36
31
 
37
32
  .FileFieldView__files {
@@ -40,7 +40,10 @@ var Field_1 = __importDefault(require("@steroidsjs/core/ui/form/Field"));
40
40
  var Button_1 = __importDefault(require("@steroidsjs/core/ui/form/Button"));
41
41
  function FormView(props) {
42
42
  var bem = hooks_1.useBem('FormView');
43
- return (React.createElement("form", { className: bem(bem.block(), props.className, props.layout.layout === 'horizontal' && 'form-horizontal'), onSubmit: props.onSubmit, style: props.style },
43
+ return (React.createElement("form", { className: bem(bem.block({
44
+ border: props.isBordered,
45
+ inline: props.layout.layout === 'inline'
46
+ }), props.className, props.layout.layout === 'horizontal' && 'form-horizontal'), onSubmit: props.onSubmit, style: props.style },
44
47
  props.children,
45
48
  (props.fields || []).map(function (field, index) { return (React.createElement(Field_1["default"], __assign({ key: index }, (isString_1["default"](field) ? { attribute: field } : field)))); }),
46
49
  props.submitLabel && (React.createElement(Button_1["default"], { type: 'submit', label: props.submitLabel }))));
@@ -1,3 +1,17 @@
1
1
  .FormView {
2
-
3
- }
2
+ &_border {
3
+ padding: 20px;
4
+ border: 1px solid $border-default;
5
+ box-sizing: border-box;
6
+ box-shadow: $shadow-default;
7
+ border-radius: 0.5rem;
8
+ }
9
+ &_inline {
10
+ display: flex;
11
+ grid-gap: 20px;
12
+ align-items: flex-start;
13
+ }
14
+ .form-control {
15
+ display: flex;
16
+ }
17
+ }
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
2
  import { IImageFieldModalViewProps } from '@steroidsjs/core/ui/form/ImageField/ImageField';
3
3
  import 'react-image-crop/dist/ReactCrop.css';
4
- export default function ImageFieldModalVIew(props: IImageFieldModalViewProps): JSX.Element;
4
+ export default function ImageFieldModalView(props: IImageFieldModalViewProps): JSX.Element;
@@ -39,8 +39,8 @@ var react_1 = require("react");
39
39
  var react_image_crop_1 = __importDefault(require("react-image-crop"));
40
40
  var Modal_1 = __importDefault(require("@steroidsjs/core/ui/modal/Modal"));
41
41
  require("react-image-crop/dist/ReactCrop.css");
42
- function ImageFieldModalVIew(props) {
43
- var bem = hooks_1.useBem('ImageFieldModalVIew');
42
+ function ImageFieldModalView(props) {
43
+ var bem = hooks_1.useBem('ImageFieldModalView');
44
44
  var _a = react_1.useState(props.crop.initialValues), crop = _a[0], setCrop = _a[1];
45
45
  return (React.createElement(Modal_1["default"], { className: bem.block(), title: props.title || __('Выберите область изображения'), onClose: props.onClose, controls: [{
46
46
  label: __(('Сохранить')),
@@ -50,6 +50,6 @@ function ImageFieldModalVIew(props) {
50
50
  }
51
51
  }] },
52
52
  React.createElement("div", { className: 'mb-3' },
53
- React.createElement(react_image_crop_1["default"], __assign({}, props.crop.reactImageCropProps, { className: bem.element('crop'), src: props.image.url, crop: crop, onChange: setCrop })))));
53
+ React.createElement(react_image_crop_1["default"], __assign({}, props.crop.reactImageCropProps, { className: bem.element('crop'), src: props.image && props.image.url, crop: crop, onChange: setCrop })))));
54
54
  }
55
- exports["default"] = ImageFieldModalVIew;
55
+ exports["default"] = ImageFieldModalView;
@@ -1,4 +1,4 @@
1
- .ImageFieldModalVIew {
1
+ .ImageFieldModalView {
2
2
  &__crop img {
3
3
  display: block;
4
4
  width: 100%;
@@ -1,3 +1,3 @@
1
1
  /// <reference types="react" />
2
- import { IImageFieldViewProps } from '@steroidsjs/core/ui/form/ImageField/ImageField';
2
+ import { IImageFieldViewProps } from "@steroidsjs/core/ui/form/ImageField/ImageField";
3
3
  export default function ImageFieldView(props: IImageFieldViewProps): JSX.Element;
@@ -26,18 +26,18 @@ var React = __importStar(require("react"));
26
26
  var hooks_1 = require("@steroidsjs/core/hooks");
27
27
  var Icon_1 = __importDefault(require("@steroidsjs/core/ui/icon/Icon"));
28
28
  function ImageFieldView(props) {
29
- var bem = hooks_1.useBem('ImageFieldView');
29
+ var bem = hooks_1.useBem("ImageFieldView");
30
30
  var item = props.item;
31
- return (React.createElement("div", { className: bem.block() }, !item.image ? (React.createElement("button", { className: bem.element('button', {
32
- loading: item.progress
31
+ return (React.createElement("div", { className: bem.block() }, !item || !item.image ? (React.createElement("button", { className: bem.element("button", {
32
+ loading: item ? item.progress : false
33
33
  }), onClick: props.onClick },
34
- !item.progress ? (React.createElement(Icon_1["default"], { className: bem.element('button-icon'), name: 'plus' })) : (React.createElement("div", { className: bem.element('progress-bar') },
35
- React.createElement("div", { className: bem.element('progress-slider'), style: {
36
- width: item.progress.percent + "%"
34
+ !item || !item.progress ? (React.createElement(Icon_1["default"], { className: bem.element("button-icon"), name: 'plus' })) : (React.createElement("div", { className: bem.element("progress-bar") },
35
+ React.createElement("div", { className: bem.element("progress-slider"), style: {
36
+ width: (item ? item.progress.percent : 0) + "%"
37
37
  } }))),
38
- React.createElement("span", { className: bem.element('button-label') }, !item.progress ? props.label : 'Uploading...'))) : (React.createElement("div", { className: bem.element('content') },
39
- React.createElement("img", { className: bem.element('image'), src: item.image.url, width: item.image.width, height: item.image.height, alt: item.title }),
40
- React.createElement("div", { className: bem.element('image-controls') },
41
- React.createElement(Icon_1["default"], { className: bem.element('delete-icon'), name: 'trash', onClick: item.onRemove }))))));
38
+ React.createElement("span", { className: bem.element("button-label") }, !item || !item.progress ? props.label : "Uploading..."))) : (React.createElement("div", { className: bem.element("content") },
39
+ React.createElement("img", { className: bem.element("image"), src: item.image.url, width: item.image.width, height: item.image.height, alt: item.title }),
40
+ React.createElement("div", { className: bem.element("image-controls") },
41
+ React.createElement(Icon_1["default"], { className: bem.element("delete-icon"), name: 'trash', onClick: item.onRemove }))))));
42
42
  }
43
43
  exports["default"] = ImageFieldView;
@@ -58,11 +58,11 @@ function NumberFieldView(props) {
58
58
  disabled: props.inputProps.max && value >= props.inputProps.max
59
59
  }), onClick: onStepUp },
60
60
  React.createElement("svg", { viewBox: '64 64 896 896', width: '1em', height: '1em' },
61
- React.createElement("path", { d: 'M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5\n 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39\n 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z' }))),
61
+ React.createElement("path", { d: 'M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140\n 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1\n 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z' }))),
62
62
  React.createElement("button", { className: bem.element('arrow', {
63
63
  disabled: props.inputProps.min && value <= props.inputProps.min
64
64
  }), onClick: onStepDown },
65
65
  React.createElement("svg", { viewBox: '64 64 896 896', width: '1em', height: '1em' },
66
- React.createElement("path", { d: 'M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140\n 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1\n 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z' })))))));
66
+ React.createElement("path", { d: 'M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5\n 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39\n 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z' })))))));
67
67
  }
68
68
  exports["default"] = NumberFieldView;
@@ -1,15 +1,30 @@
1
1
  .NumberFieldView {
2
2
  display: flex;
3
+ overflow: hidden;
3
4
  flex-flow: row nowrap;
4
5
  align-items: stretch;
5
6
  padding: 0;
7
+ border: $input-border;
6
8
 
9
+ &:hover {
10
+ border-color: $border-hover;
11
+ }
12
+ &:active {
13
+ border-color: $border-action;
14
+ box-shadow: 0 0 0 4px $border-typing;
15
+ }
7
16
 
8
17
  &_disabled {
9
18
  color: rgba(0, 0, 0, .25);
10
19
  background-color: $back-disabled;
20
+ border: unset;
11
21
  cursor: not-allowed;
12
22
 
23
+ &:active, &:hover {
24
+ border: unset;
25
+ box-shadow: unset;
26
+ }
27
+
13
28
  input {
14
29
  cursor: inherit;
15
30
  }
@@ -33,13 +48,16 @@
33
48
  border: none;
34
49
  outline: none;
35
50
  background-color: transparent;
51
+ color: $heading;
36
52
 
53
+ width: inherit;
37
54
  padding: $input-padding-y $input-padding-x;
38
55
  }
39
56
 
40
57
  &__arrows-container{
41
58
  display: flex;
42
59
  flex-flow: column;
60
+ grid-gap: 2px;
43
61
  font-size: .6em;
44
62
 
45
63
  opacity: 0;
@@ -60,13 +78,17 @@
60
78
  align-items: center;
61
79
  justify-content: center;
62
80
 
63
- &:nth-child(1){
64
- border-left: 1px solid #CCCCCC;
65
- }
66
- &:nth-child(2){
67
- border-top: 1px solid #CCCCCC;
68
- border-left: 1px solid #CCCCCC;
81
+ &:nth-child(1), &:nth-child(2) {
82
+ background-color: $grey-lighter;
83
+ &:active, &:hover {
84
+ background-color: $border-default;
85
+ fill: $white;
86
+ svg {
87
+ fill: $white;
88
+ }
89
+ }
69
90
  }
91
+
70
92
  &_disabled{
71
93
  cursor: not-allowed;
72
94
  }
@@ -75,11 +97,6 @@
75
97
  transition: fill .1s;
76
98
  }
77
99
 
78
- &:hover{
79
- svg{
80
- fill: #4a90e2;
81
- }
82
- }
83
100
  }
84
101
  }
85
102
 
@@ -29,19 +29,39 @@ var __importStar = (this && this.__importStar) || function (mod) {
29
29
  __setModuleDefault(result, mod);
30
30
  return result;
31
31
  };
32
- var __importDefault = (this && this.__importDefault) || function (mod) {
33
- return (mod && mod.__esModule) ? mod : { "default": mod };
34
- };
35
32
  exports.__esModule = true;
36
33
  var React = __importStar(require("react"));
37
- var rc_slider_1 = __importDefault(require("rc-slider"));
38
34
  var hooks_1 = require("@steroidsjs/core/hooks");
35
+ var rc_slider_1 = __importStar(require("rc-slider"));
36
+ var createRangeWithTooltip = rc_slider_1["default"].createSliderWithTooltip;
37
+ var createSliderWithTooltip = rc_slider_1["default"].createSliderWithTooltip;
38
+ var RangeComponent = createRangeWithTooltip(rc_slider_1.Range);
39
+ var SliderComponent = createSliderWithTooltip(rc_slider_1["default"]);
39
40
  function SliderFieldView(props) {
40
41
  var bem = hooks_1.useBem('SliderFieldView');
41
- var SliderComponent = rc_slider_1["default"]; // TODO Fix error https://github.com/react-component/slider/issues/656
42
- return (React.createElement("div", { className: bem(bem.block({
43
- size: props.size
44
- }), props.className) },
45
- React.createElement(SliderComponent, __assign({}, props.slider, { className: bem.element('slider') }))));
42
+ var handle = function (prevProps) {
43
+ var value = prevProps.value;
44
+ return (React.createElement(rc_slider_1.SliderTooltip, { prefixCls: 'rc-slider-tooltip', placement: 'top', overlay: "" + value },
45
+ React.createElement(rc_slider_1.Handle, { value: value })));
46
+ };
47
+ var commonProps = {
48
+ slider: props.slider,
49
+ className: props.className,
50
+ min: props.min,
51
+ max: props.max,
52
+ step: props.step,
53
+ marks: props.marks,
54
+ onChange: props.onChange,
55
+ onAfterChange: props.onAfterChange,
56
+ defaultValue: props.defaultValue
57
+ ? props.defaultValue
58
+ : (props.isRange ? props.rangeDefaultValue : props.sliderDefaultValue),
59
+ disabled: props.disabled,
60
+ tipFormatter: function (value) { return "" + (value + props.valuePostfix); },
61
+ handle: handle
62
+ };
63
+ var RangeField = (React.createElement(RangeComponent, __assign({}, commonProps, { draggableTrack: true, areaDisabled: true, pushable: true })));
64
+ var SliderField = (React.createElement(SliderComponent, __assign({}, commonProps)));
65
+ return (React.createElement("div", { className: bem(bem.block(), props.className) }, props.isRange ? RangeField : SliderField));
46
66
  }
47
67
  exports["default"] = SliderFieldView;
@@ -1,14 +1,23 @@
1
1
  .SliderFieldView {
2
+ $root: &;
3
+
4
+ &_hidden {
5
+ display: unset;
6
+ }
2
7
 
3
8
  .rc-slider {
4
9
  position: relative;
5
10
  height: 6px;
6
11
  width: 100%;
7
12
  border-radius: 6px;
8
- background-color: #e9e9e9;
13
+ background-color: $primary-light;
9
14
  box-sizing: border-box;
10
15
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
11
16
  }
17
+ .rc-slider-rail {
18
+ background-color: $primary;
19
+ }
20
+
12
21
  .rc-slider * {
13
22
  box-sizing: border-box;
14
23
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
@@ -18,27 +27,29 @@
18
27
  left: 0;
19
28
  height: 6px;
20
29
  border-radius: 6px;
21
- background-color: $primary;
30
+ background-color: rgba($primary, .7);
22
31
  z-index: 1;
23
32
  }
24
33
  .rc-slider-handle {
25
34
  position: absolute;
26
- margin-left: -10px;
35
+ margin-left: 0;
27
36
  margin-top: -8px;
28
37
  width: 20px;
29
38
  height: 20px;
30
39
  cursor: pointer;
31
40
  border-radius: 50%;
32
- border: solid 3px $primary;
33
- background-color: #fff;
41
+ background-color: $primary;
42
+ box-shadow: $primary-dark 0 0 5px;
34
43
  z-index: 2;
35
- }
36
- .rc-slider-handle:hover {
37
- border-color: $primary;
38
- }
39
- .rc-slider-handle-active:active {
40
- border-color: $primary;
41
- box-shadow: 0 0 5px $primary;
44
+ transition: box-shadow 300ms;
45
+ outline: none;
46
+
47
+ &:hover {
48
+ box-shadow: 0 0 0 10px rgba($primary-light, .3);
49
+ }
50
+ &:active {
51
+ box-shadow: 0 0 0 15px rgba($primary, .3);
52
+ }
42
53
  }
43
54
  .rc-slider-mark {
44
55
  position: absolute;
@@ -89,6 +100,11 @@
89
100
  }
90
101
  .rc-slider-disabled {
91
102
  background-color: #e9e9e9;
103
+
104
+ .rc-slider-handle, .rc-slider-dot {
105
+ box-shadow: 0 0 4px $border-default;
106
+ background-color: #ccc;
107
+ }
92
108
  }
93
109
  .rc-slider-disabled .rc-slider-track {
94
110
  background-color: #ccc;
@@ -238,7 +254,10 @@
238
254
  transform: scale(0, 0);
239
255
  }
240
256
  }
241
- .rc-tooltip {
257
+ .rc-slider-tooltip {
258
+ display: inline-block;
259
+ }
260
+ .rc-slider-tooltip {
242
261
  position: absolute;
243
262
  left: -9999px;
244
263
  top: -9999px;
@@ -247,17 +266,17 @@
247
266
  box-sizing: border-box;
248
267
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
249
268
  }
250
- .rc-tooltip * {
269
+ .rc-slider-tooltip * {
251
270
  box-sizing: border-box;
252
271
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
253
272
  }
254
- .rc-tooltip-hidden {
273
+ .rc-slider-tooltip-hidden {
255
274
  display: none;
256
275
  }
257
- .rc-tooltip-placement-top {
276
+ .rc-slider-tooltip-placement-top {
258
277
  padding: 4px 0 8px 0;
259
278
  }
260
- .rc-tooltip-inner {
279
+ .rc-slider-tooltip-inner {
261
280
  padding: 6px 2px;
262
281
  min-width: 24px;
263
282
  height: 24px;
@@ -270,18 +289,18 @@
270
289
  border-radius: 6px;
271
290
  box-shadow: 0 0 4px #d9d9d9;
272
291
  }
273
- .rc-tooltip-arrow {
292
+ .rc-slider-tooltip-arrow {
274
293
  position: absolute;
275
294
  width: 0;
276
295
  height: 0;
277
296
  border-color: transparent;
278
297
  border-style: solid;
279
298
  }
280
- .rc-tooltip-placement-top .rc-tooltip-arrow {
299
+ .rc-slider-tooltip-placement-top .rc-slider-tooltip-arrow {
281
300
  bottom: 4px;
282
301
  left: 50%;
283
302
  margin-left: -4px;
284
303
  border-width: 4px 4px 0;
285
304
  border-top-color: #6c6c6c;
286
305
  }
287
- }
306
+ }
@@ -1,3 +1,4 @@
1
1
  .TextFieldView {
2
-
3
- }
2
+ min-height: 38px;
3
+ box-sizing: border-box;
4
+ }
@@ -1,3 +1,3 @@
1
1
  /// <reference types="react" />
2
- import { ISkeletonViewProps } from "@steroidsjs/core/ui/layout/Skeleton/Skeleton";
2
+ import { ISkeletonViewProps } from '@steroidsjs/core/ui/layout/Skeleton/Skeleton';
3
3
  export default function SkeletonView(props: ISkeletonViewProps): JSX.Element;
@@ -22,7 +22,7 @@ exports.__esModule = true;
22
22
  var React = __importStar(require("react"));
23
23
  var hooks_1 = require("@steroidsjs/core/hooks");
24
24
  function SkeletonView(props) {
25
- var bem = hooks_1.useBem("SkeletonView");
25
+ var bem = hooks_1.useBem('SkeletonView');
26
26
  return (React.createElement("span", { className: bem(props.className, bem.block({
27
27
  type: props.children ? null : props.type,
28
28
  animation: props.animation
@@ -23,6 +23,7 @@
23
23
  }
24
24
 
25
25
  &_circle{
26
+ height: 100%;
26
27
  border-radius: 50%;
27
28
  }
28
29
  }
@@ -67,4 +68,4 @@
67
68
  }
68
69
  }
69
70
  }
70
- }
71
+ }
@@ -15,6 +15,7 @@ $tooltip-arrow-offset-vertical-bottom: 7px;
15
15
  transform: translate(0,0);
16
16
  opacity: 0;
17
17
  transition: opacity .15s ease-in, transform .15s ease-in;
18
+ z-index: 150;
18
19
 
19
20
  &_show {
20
21
  opacity: 1;
@@ -23,6 +23,9 @@ var React = __importStar(require("react"));
23
23
  var hooks_1 = require("@steroidsjs/core/hooks");
24
24
  function ListView(props) {
25
25
  var bem = hooks_1.useBem('ListView');
26
+ if (!props.list) {
27
+ return null;
28
+ }
26
29
  var renderPagination = function (pagination, paginationSize, layout) {
27
30
  if (!pagination && !paginationSize && !layout) {
28
31
  return null;
@@ -39,7 +39,7 @@ var hooks_1 = require("@steroidsjs/core/hooks");
39
39
  function NavIconView(props) {
40
40
  var bem = hooks_1.useBem('NavIconView');
41
41
  return (React.createElement("div", { className: bem(bem.block(), props.className) },
42
- props.items.map(function (item, index) { return (React.createElement(Button_1["default"], __assign({ key: item.id || index, link: true, onClick: function () { return props.onClick(item, index); } }, item, { label: null, hint: item.hint || item.label || null }))); }),
42
+ props.items.map(function (item, index) { return (React.createElement(Button_1["default"], __assign({ icon: props.icon ? props.icon : 'circle-notch', key: item.id || index, link: true, onClick: function () { return props.onClick(item, index); } }, item, { label: null, hint: item.hint || item.label || null }))); }),
43
43
  props.children));
44
44
  }
45
45
  exports["default"] = NavIconView;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/bootstrap",
3
- "version": "2.1.0-beta.5",
3
+ "version": "2.1.2",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
@@ -19,11 +19,11 @@
19
19
  "dependencies": {
20
20
  "@ckeditor/ckeditor5-react": "^3.0.2",
21
21
  "@steroidsjs/ckeditor5": "^27.0.2-rc.2",
22
- "@steroidsjs/core": "^2.1.0-beta.21",
22
+ "@steroidsjs/core": "^2.2.8",
23
23
  "bootstrap": "^4.5.2",
24
24
  "lodash": "^4.17.20",
25
25
  "lodash-es": "^4.17.20",
26
- "rc-slider": "^9.3.1",
26
+ "rc-slider": "^9.7.4",
27
27
  "react": "^17.0.2",
28
28
  "react-collapse": "^5.0.1",
29
29
  "react-day-picker": "^7.4.8",
@@ -1,52 +1,52 @@
1
- $primary: #651FFF;
2
- $primary-dark: #410FAD;
3
- $primary-light: #F0EAFF;
1
+ $primary: #651FFF !default;
2
+ $primary-dark: darken($primary, 25) !default;
3
+ $primary-light: lighten($primary, 50) !default;
4
4
 
5
- $secondary: #97A7C8;
6
- $secondary-dark: #596886;
7
- $secondary-light: #E3EAF9;
5
+ $secondary: #97A7C8 !default;
6
+ $secondary-dark: darken($secondary, 25) !default;
7
+ $secondary-light: lighten($secondary, 50) !default;
8
8
 
9
- $heading: #152536;
10
- $body: #68717A;
11
- $white: #FFFFFF;
9
+ $success: #64D03E !default;
10
+ $success-dark: darken($success, 25) !default;
11
+ $success-light: lighten($success, 50) !default;
12
12
 
13
- $success: #64D03E;
14
- $success-dark: #218838;
15
- $success-light: #ABED94;
13
+ $danger: #FF4557 !default;
14
+ $danger-dark: darken($danger, 25) !default;
15
+ $danger-light: lighten($danger, 50) !default;
16
16
 
17
- $danger: #FF4557;
18
- $danger-dark: #DA2839;
19
- $danger-light: #ff99a3;
17
+ $warning: #fad826 !default;
18
+ $warning-dark: darken($warning, 25) !default;
19
+ $warning-light: lighten($warning, 50) !default;
20
20
 
21
- $warning: #fad826;
22
- $warning-dark: #dcc131;
23
- $warning-light: #fff3b2;
21
+ $info: #39bbd8 !default;
22
+ $info-dark: darken($info, 25) !default;
23
+ $info-light: lighten($info, 50) !default;
24
24
 
25
- $info: #39bbd8;
26
- $info-dark: #2796af;
27
- $info-light: #a7efff;
25
+ $light: #f8f9fa !default;
26
+ $light-dark: darken($light, 25) !default;
27
+ $light-light: lighten($light, 50) !default;
28
28
 
29
- $light: #f8f9fa;
30
- $light-dark: #e2e6ea;
31
- $light-light: #fafafa;
29
+ $dark: #343a40 !default;
30
+ $dark-dark: darken($dark, 25) !default;
31
+ $dark-light: lighten($dark, 50) !default;
32
32
 
33
- $dark: #343a40;
34
- $dark-dark: #1a1c1e;
35
- $dark-light: #acacac;
33
+ $heading: #152536 !default;
34
+ $body: #68717A !default;
35
+ $white: #FFFFFF !default;
36
36
 
37
37
  $color-themes: () !default;
38
38
  $color-themes: map-merge(
39
- (
40
- "primary": ("color": $primary, "color-dark": $primary-dark, "color-light": $primary-light, "text-color": $white),
41
- "secondary": ("color": $secondary, "color-dark": $secondary-dark, "color-light": $secondary-light, "text-color": $white),
42
- "success": ("color": $success, "color-dark": $success-dark, "color-light": $success-light, "text-color": $white),
43
- "danger": ("color": $danger, "color-dark": $danger-dark, "color-light": $danger-light, "text-color": $white),
44
- "warning": ("color": $warning, "color-dark": $warning-dark, "color-light": $warning-light, "text-color": $dark),
45
- "info": ("color": $info, "color-dark": $info-dark, "color-light": $info-light, "text-color": $white),
46
- "light": ("color": $light, "color-dark": $light-dark, "color-light": $light-light, "text-color": $dark),
47
- "dark": ("color": $dark, "color-dark": $dark-dark, "color-light": $dark-light, "text-color": $white)
48
- ),
49
- $color-themes
39
+ (
40
+ "primary": ("color": $primary, "color-dark": $primary-dark, "color-light": $primary-light, "text-color": $white),
41
+ "secondary": ("color": $secondary, "color-dark": $secondary-dark, "color-light": $secondary-light, "text-color": $white),
42
+ "success": ("color": $success, "color-dark": $success-dark, "color-light": $success-light, "text-color": $white),
43
+ "danger": ("color": $danger, "color-dark": $danger-dark, "color-light": $danger-light, "text-color": $white),
44
+ "warning": ("color": $warning, "color-dark": $warning-dark, "color-light": $warning-light, "text-color": $dark),
45
+ "info": ("color": $info, "color-dark": $info-dark, "color-light": $info-light, "text-color": $white),
46
+ "light": ("color": $light, "color-dark": $light-dark, "color-light": $light-light, "text-color": $dark),
47
+ "dark": ("color": $dark, "color-dark": $dark-dark, "color-light": $dark-light, "text-color": $white)
48
+ ),
49
+ $color-themes
50
50
  );
51
51
 
52
52
  $grey-light: #D9D9D9;
@@ -70,3 +70,5 @@ $border-error: #FF4557;
70
70
  $back-info: #ECFCFF;
71
71
  $back-warning: #FFFCEA;
72
72
 
73
+ $shadow-default: 0px 0px 30px rgba(0, 0, 0, 0.1);
74
+