@steroidsjs/bootstrap 2.1.0-beta.4 → 2.1.1

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/CheckboxField/CheckboxFieldView.js +1 -1
  4. package/form/CheckboxField/CheckboxFieldView.scss +40 -6
  5. package/form/CheckboxListField/CheckboxListFieldView.js +4 -5
  6. package/form/CheckboxListField/CheckboxListFieldView.scss +45 -1
  7. package/form/DropDownField/DropDownFieldView.js +8 -15
  8. package/form/DropDownField/DropDownFieldView.scss +0 -1
  9. package/form/FieldList/FieldListItemView.d.ts +1 -1
  10. package/form/FieldList/FieldListItemView.js +1 -1
  11. package/form/FieldList/FieldListView.js +2 -2
  12. package/form/FieldList/FieldListView.scss +1 -6
  13. package/form/Form/FormView.js +4 -1
  14. package/form/Form/FormView.scss +16 -2
  15. package/form/ImageField/{ImageFieldModalVIew.d.ts → ImageFieldModalView.d.ts} +1 -1
  16. package/form/ImageField/{ImageFieldModalVIew.js → ImageFieldModalView.js} +4 -4
  17. package/form/ImageField/{ImageFieldModalVIew.scss → ImageFieldModalView.scss} +1 -1
  18. package/form/ImageField/ImageFieldView.d.ts +1 -1
  19. package/form/ImageField/ImageFieldView.js +10 -10
  20. package/form/NumberField/NumberFieldView.js +2 -2
  21. package/form/NumberField/NumberFieldView.scss +28 -11
  22. package/form/SliderField/SliderFieldView.js +29 -9
  23. package/form/SliderField/SliderFieldView.scss +39 -20
  24. package/form/TextField/TextFieldView.scss +3 -2
  25. package/index.scss +0 -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 +3 -1
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
  }
@@ -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
+ }
package/index.scss CHANGED
@@ -47,10 +47,8 @@
47
47
  @import './layout/ProgressBar/LineProgressBarView';
48
48
  @import './layout/ProgressBar/CircleProgressBarView';
49
49
  @import './layout/Skeleton/SkeletonView';
50
- @import './list/Accordion/AccordionView';
51
50
  @import './list/ControlsColumnView/ControlsColumnView';
52
51
  @import './list/CheckboxColumn/CheckboxColumnView';
53
- @import './list/Detail/DetailView';
54
52
  @import './list/Empty/EmptyView';
55
53
  @import './list/Grid/GridView';
56
54
  @import './list/List/ListView';
@@ -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.4",
3
+ "version": "2.1.1",
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.1.1",
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,6 +1,6 @@
1
1
  $primary: #651FFF;
2
2
  $primary-dark: #410FAD;
3
- $primary-light: #F0EAFF;
3
+ $primary-light: #D8CCF7;
4
4
 
5
5
  $secondary: #97A7C8;
6
6
  $secondary-dark: #596886;
@@ -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
+