@ozen-ui/kit 0.2.2 → 0.3.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.
- package/CheckboxGroup/package.json +5 -0
- package/ProgressBar/package.json +5 -0
- package/__inner__/cjs/components/Checkbox/Checkbox.js +23 -2
- package/__inner__/cjs/components/Checkbox/constants.d.ts +3 -0
- package/__inner__/cjs/components/Checkbox/constants.js +6 -0
- package/__inner__/cjs/components/CheckboxGroup/CheckboxGroup.css +8 -0
- package/__inner__/cjs/components/CheckboxGroup/CheckboxGroup.d.ts +26 -0
- package/__inner__/cjs/components/CheckboxGroup/CheckboxGroup.js +46 -0
- package/__inner__/cjs/components/CheckboxGroup/CheckboxGroupContext.d.ts +9 -0
- package/__inner__/cjs/components/CheckboxGroup/CheckboxGroupContext.js +6 -0
- package/__inner__/cjs/components/CheckboxGroup/constants.d.ts +3 -0
- package/__inner__/cjs/components/CheckboxGroup/constants.js +6 -0
- package/__inner__/cjs/components/CheckboxGroup/index.d.ts +1 -0
- package/__inner__/cjs/components/CheckboxGroup/index.js +4 -0
- package/__inner__/cjs/components/Container/Container.css +4 -4
- package/__inner__/cjs/components/Grid/Grid.css +8 -8
- package/__inner__/cjs/components/IconButton/IconButton.css +11 -2
- package/__inner__/cjs/components/IconButton/IconButton.d.ts +2 -0
- package/__inner__/cjs/components/IconButton/IconButton.js +3 -2
- package/__inner__/cjs/components/ProgressBar/ProgressBar.css +40 -0
- package/__inner__/cjs/components/ProgressBar/ProgressBar.d.ts +11 -0
- package/__inner__/cjs/components/ProgressBar/ProgressBar.js +32 -0
- package/__inner__/cjs/components/ProgressBar/constants.d.ts +1 -0
- package/__inner__/cjs/components/ProgressBar/constants.js +4 -0
- package/__inner__/cjs/components/ProgressBar/index.d.ts +1 -0
- package/__inner__/cjs/components/ProgressBar/index.js +4 -0
- package/__inner__/cjs/components/Skeleton/Skeleton.css +1 -1
- package/__inner__/cjs/components/Stack/Stack.css +4 -4
- package/__inner__/cjs/components/ThemeProvider/types.d.ts +2 -0
- package/__inner__/cjs/hooks/useBoolean/useBoolean.js +3 -3
- package/__inner__/cjs/hooks/useCounter/useCounter.js +3 -3
- package/__inner__/cjs/hooks/useTimer/useTimer.js +6 -6
- package/__inner__/esm/components/Checkbox/Checkbox.js +24 -3
- package/__inner__/esm/components/Checkbox/constants.d.ts +3 -0
- package/__inner__/esm/components/Checkbox/constants.js +3 -0
- package/__inner__/esm/components/CheckboxGroup/CheckboxGroup.css +8 -0
- package/__inner__/esm/components/CheckboxGroup/CheckboxGroup.d.ts +26 -0
- package/__inner__/esm/components/CheckboxGroup/CheckboxGroup.js +43 -0
- package/__inner__/esm/components/CheckboxGroup/CheckboxGroupContext.d.ts +9 -0
- package/__inner__/esm/components/CheckboxGroup/CheckboxGroupContext.js +2 -0
- package/__inner__/esm/components/CheckboxGroup/constants.d.ts +3 -0
- package/__inner__/esm/components/CheckboxGroup/constants.js +3 -0
- package/__inner__/esm/components/CheckboxGroup/index.d.ts +1 -0
- package/__inner__/esm/components/CheckboxGroup/index.js +1 -0
- package/__inner__/esm/components/Container/Container.css +4 -4
- package/__inner__/esm/components/Grid/Grid.css +8 -8
- package/__inner__/esm/components/IconButton/IconButton.css +11 -2
- package/__inner__/esm/components/IconButton/IconButton.d.ts +2 -0
- package/__inner__/esm/components/IconButton/IconButton.js +3 -2
- package/__inner__/esm/components/ProgressBar/ProgressBar.css +40 -0
- package/__inner__/esm/components/ProgressBar/ProgressBar.d.ts +11 -0
- package/__inner__/esm/components/ProgressBar/ProgressBar.js +29 -0
- package/__inner__/esm/components/ProgressBar/constants.d.ts +1 -0
- package/__inner__/esm/components/ProgressBar/constants.js +1 -0
- package/__inner__/esm/components/ProgressBar/index.d.ts +1 -0
- package/__inner__/esm/components/ProgressBar/index.js +1 -0
- package/__inner__/esm/components/Skeleton/Skeleton.css +1 -1
- package/__inner__/esm/components/Stack/Stack.css +4 -4
- package/__inner__/esm/components/ThemeProvider/types.d.ts +2 -0
- package/__inner__/esm/hooks/useBoolean/useBoolean.js +4 -4
- package/__inner__/esm/hooks/useCounter/useCounter.js +4 -4
- package/__inner__/esm/hooks/useTimer/useTimer.js +7 -7
- package/package.json +1 -1
- package/useListState/package.json +5 -0
|
@@ -6,8 +6,10 @@ require("./Checkbox.css");
|
|
|
6
6
|
var react_1 = tslib_1.__importStar(require("react"));
|
|
7
7
|
var useThemeProps_1 = require("../../hooks/useThemeProps");
|
|
8
8
|
var classname_1 = require("../../utils/classname");
|
|
9
|
+
var CheckboxGroupContext_1 = require("../CheckboxGroup/CheckboxGroupContext");
|
|
9
10
|
var FormControlLabel_1 = require("../FormControlLabel");
|
|
10
11
|
var components_1 = require("./components");
|
|
12
|
+
var constants_1 = require("./constants");
|
|
11
13
|
exports.checkboxSizeVariant = ['2xs', 'xs', 's', 'm', 'l'];
|
|
12
14
|
exports.cnCheckbox = (0, classname_1.cn)('Checkbox');
|
|
13
15
|
exports.Checkbox = (0, react_1.forwardRef)(function (inProps, ref) {
|
|
@@ -15,7 +17,26 @@ exports.Checkbox = (0, react_1.forwardRef)(function (inProps, ref) {
|
|
|
15
17
|
props: inProps,
|
|
16
18
|
name: 'Checkbox'
|
|
17
19
|
});
|
|
18
|
-
var _a = props.align, align = _a === void 0 ?
|
|
20
|
+
var _a = props.align, align = _a === void 0 ? constants_1.CHECKBOX_DEFAULT_ALIGN : _a, _b = props.labelPlacement, labelPlacement = _b === void 0 ? constants_1.CHECKBOX_DEFAULT_LABEL_PLACEMENT : _b, _c = props.size, sizeProp = _c === void 0 ? constants_1.CHECKBOX_DEFAULT_SIZE : _c, className = props.className, label = props.label, labelProps = props.labelProps, disabled = props.disabled, checkedProp = props.checked, inputRef = props.inputRef, indeterminate = props.indeterminate, nameProp = props.name, onChangeProp = props.onChange, other = tslib_1.__rest(props, ["align", "labelPlacement", "size", "className", "label", "labelProps", "disabled", "checked", "inputRef", "indeterminate", "name", "onChange"]);
|
|
21
|
+
var checked = checkedProp;
|
|
22
|
+
var name = nameProp;
|
|
23
|
+
var size = sizeProp;
|
|
24
|
+
var checkboxGroup = (0, react_1.useContext)(CheckboxGroupContext_1.CheckboxGroupContext);
|
|
25
|
+
if (checkboxGroup) {
|
|
26
|
+
if (checked === undefined && checkboxGroup.value) {
|
|
27
|
+
checked = checkboxGroup === null || checkboxGroup === void 0 ? void 0 : checkboxGroup.value.includes(other === null || other === void 0 ? void 0 : other.value);
|
|
28
|
+
}
|
|
29
|
+
if (name === undefined && checkboxGroup.name) {
|
|
30
|
+
name = checkboxGroup.name;
|
|
31
|
+
}
|
|
32
|
+
if (inProps.size === undefined && checkboxGroup.size) {
|
|
33
|
+
size = checkboxGroup.size;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
var onChange = function (event) {
|
|
37
|
+
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(event);
|
|
38
|
+
checkboxGroup === null || checkboxGroup === void 0 ? void 0 : checkboxGroup.onChange(event);
|
|
39
|
+
};
|
|
19
40
|
return (react_1["default"].createElement(FormControlLabel_1.FormControlLabel, tslib_1.__assign({ label: label, size: size, labelPlacement: labelPlacement, disabled: disabled, align: align, className: className, ref: ref }, labelProps),
|
|
20
41
|
react_1["default"].createElement("span", { className: (0, exports.cnCheckbox)({
|
|
21
42
|
size: size,
|
|
@@ -23,7 +44,7 @@ exports.Checkbox = (0, react_1.forwardRef)(function (inProps, ref) {
|
|
|
23
44
|
checked: checked,
|
|
24
45
|
indeterminate: indeterminate
|
|
25
46
|
}) },
|
|
26
|
-
react_1["default"].createElement("input", tslib_1.__assign({ type: "checkbox", className: (0, exports.cnCheckbox)('Input'), disabled: disabled, checked: checked }, other, { ref: inputRef })),
|
|
47
|
+
react_1["default"].createElement("input", tslib_1.__assign({ type: "checkbox", className: (0, exports.cnCheckbox)('Input'), disabled: disabled, checked: checked, onChange: onChange, name: name }, other, { ref: inputRef })),
|
|
27
48
|
react_1["default"].createElement("span", { className: (0, exports.cnCheckbox)('Box') },
|
|
28
49
|
react_1["default"].createElement(components_1.CheckboxIcon, { indeterminate: indeterminate, className: (0, exports.cnCheckbox)('Icon') })))));
|
|
29
50
|
});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
exports.__esModule = true;
|
|
3
|
+
exports.CHECKBOX_DEFAULT_SIZE = exports.CHECKBOX_DEFAULT_LABEL_PLACEMENT = exports.CHECKBOX_DEFAULT_ALIGN = void 0;
|
|
4
|
+
exports.CHECKBOX_DEFAULT_ALIGN = 'center';
|
|
5
|
+
exports.CHECKBOX_DEFAULT_LABEL_PLACEMENT = 'right';
|
|
6
|
+
exports.CHECKBOX_DEFAULT_SIZE = 'm';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import './CheckboxGroup.css';
|
|
2
|
+
import type { ElementType, ReactNode } from 'react';
|
|
3
|
+
import type { FormElementSizeVariant } from '../../types/FormElementSizeVariant';
|
|
4
|
+
import { type PolymorphicComponentPropsWithoutRef } from '../../utils/polymorphicComponentWithRef';
|
|
5
|
+
import { type FormGroupProps } from '../FormGroup';
|
|
6
|
+
export type CheckboxGroupBaseProps = {
|
|
7
|
+
/** Имя группы радиокнопок (передается всем вложенным радиокнопкам) */
|
|
8
|
+
name: string;
|
|
9
|
+
/** Значение по умолчанию (неконтролируемое состояние) */
|
|
10
|
+
defaultValue?: (string | number)[];
|
|
11
|
+
/** Текущее значение */
|
|
12
|
+
value?: (string | number)[];
|
|
13
|
+
/** Заголовок группы */
|
|
14
|
+
title?: string;
|
|
15
|
+
/** Размер */
|
|
16
|
+
size?: FormElementSizeVariant;
|
|
17
|
+
/** Содержимое компонента */
|
|
18
|
+
children?: ReactNode;
|
|
19
|
+
/** Направление */
|
|
20
|
+
direction?: FormGroupProps['direction'];
|
|
21
|
+
/** Событие изменения состояния */
|
|
22
|
+
onChange?(value: (string | number)[]): void;
|
|
23
|
+
};
|
|
24
|
+
export type CheckboxGroupProps<As extends ElementType = 'div'> = PolymorphicComponentPropsWithoutRef<CheckboxGroupBaseProps, As>;
|
|
25
|
+
export declare const cnCheckboxGroup: import("@bem-react/classname").ClassNameFormatter;
|
|
26
|
+
export declare const CheckboxGroup: import("../../utils/polymorphicComponentWithRef").PolymorphicComponentWithRef<CheckboxGroupBaseProps, "div">;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
exports.__esModule = true;
|
|
3
|
+
exports.CheckboxGroup = exports.cnCheckboxGroup = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
require("./CheckboxGroup.css");
|
|
6
|
+
var react_1 = tslib_1.__importDefault(require("react"));
|
|
7
|
+
var useControlled_1 = require("../../hooks/useControlled");
|
|
8
|
+
var useThemeProps_1 = require("../../hooks/useThemeProps");
|
|
9
|
+
var classname_1 = require("../../utils/classname");
|
|
10
|
+
var polymorphicComponentWithRef_1 = require("../../utils/polymorphicComponentWithRef");
|
|
11
|
+
var FormGroup_1 = require("../FormGroup");
|
|
12
|
+
var FormTitle_1 = require("../FormTitle");
|
|
13
|
+
var CheckboxGroupContext_1 = require("./CheckboxGroupContext");
|
|
14
|
+
var constants_1 = require("./constants");
|
|
15
|
+
exports.cnCheckboxGroup = (0, classname_1.cn)('CheckboxGroup');
|
|
16
|
+
exports.CheckboxGroup = (0, polymorphicComponentWithRef_1.polymorphicComponentWithRef)(function (inProps, ref) {
|
|
17
|
+
var props = (0, useThemeProps_1.useThemeProps)({
|
|
18
|
+
props: inProps,
|
|
19
|
+
name: 'CheckboxGroup'
|
|
20
|
+
});
|
|
21
|
+
var _a = props.direction, direction = _a === void 0 ? constants_1.CHECKBOX_GROUP_DEFAULT_DIRECTION : _a, _b = props.size, size = _b === void 0 ? constants_1.CHECKBOX_GROUP_DEFAULT_SIZE : _b, _c = props.as, Tag = _c === void 0 ? constants_1.CHECKBOX_GROUP_DEFAULT_AS : _c, title = props.title, className = props.className, children = props.children, name = props.name, valueProp = props.value, defaultValue = props.defaultValue, onChange = props.onChange, other = tslib_1.__rest(props, ["direction", "size", "as", "title", "className", "children", "name", "value", "defaultValue", "onChange"]);
|
|
22
|
+
var _d = tslib_1.__read((0, useControlled_1.useControlled)({
|
|
23
|
+
value: valueProp,
|
|
24
|
+
defaultValue: defaultValue,
|
|
25
|
+
name: 'CheckboxGroup',
|
|
26
|
+
state: 'value'
|
|
27
|
+
}), 2), valueState = _d[0], setValueState = _d[1];
|
|
28
|
+
var handleChange = function (event) {
|
|
29
|
+
var itemValue = event.currentTarget.value;
|
|
30
|
+
var value = (valueState === null || valueState === void 0 ? void 0 : valueState.includes(itemValue))
|
|
31
|
+
? valueState.filter(function (item) { return item !== itemValue; })
|
|
32
|
+
: tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read((valueState || [])), false), [itemValue], false);
|
|
33
|
+
setValueState(value);
|
|
34
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(value);
|
|
35
|
+
};
|
|
36
|
+
return (react_1["default"].createElement(Tag, tslib_1.__assign({ className: (0, exports.cnCheckboxGroup)({ size: size }, [className]), role: "radiogroup" }, other, { ref: ref }),
|
|
37
|
+
react_1["default"].createElement(CheckboxGroupContext_1.CheckboxGroupContext.Provider, { value: {
|
|
38
|
+
value: valueState,
|
|
39
|
+
onChange: handleChange,
|
|
40
|
+
name: name,
|
|
41
|
+
size: size
|
|
42
|
+
} },
|
|
43
|
+
title && react_1["default"].createElement(FormTitle_1.FormTitle, { size: size }, title),
|
|
44
|
+
react_1["default"].createElement(FormGroup_1.FormGroup, { direction: direction, size: size }, children))));
|
|
45
|
+
});
|
|
46
|
+
exports.CheckboxGroup.displayName = 'CheckboxGroup';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { FormElementSizeVariant } from '../../types/FormElementSizeVariant';
|
|
3
|
+
export interface CheckboxGroupContextValue {
|
|
4
|
+
name: string | undefined;
|
|
5
|
+
onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
6
|
+
value?: (string | number)[];
|
|
7
|
+
size?: FormElementSizeVariant;
|
|
8
|
+
}
|
|
9
|
+
export declare const CheckboxGroupContext: React.Context<CheckboxGroupContextValue | undefined>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
exports.__esModule = true;
|
|
3
|
+
exports.CHECKBOX_GROUP_DEFAULT_AS = exports.CHECKBOX_GROUP_DEFAULT_SIZE = exports.CHECKBOX_GROUP_DEFAULT_DIRECTION = void 0;
|
|
4
|
+
exports.CHECKBOX_GROUP_DEFAULT_DIRECTION = 'column';
|
|
5
|
+
exports.CHECKBOX_GROUP_DEFAULT_SIZE = 'm';
|
|
6
|
+
exports.CHECKBOX_GROUP_DEFAULT_AS = 'div';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './CheckboxGroup';
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
.Container_gutters_2xl {
|
|
45
45
|
padding: 0 var(--space-2xl);
|
|
46
46
|
}
|
|
47
|
-
@media (width
|
|
47
|
+
@media (min-width: 0) {
|
|
48
48
|
.Container_gutters_xs_xs {
|
|
49
49
|
padding: 0 var(--space-xs);
|
|
50
50
|
}
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
max-inline-size: 100%;
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
|
-
@media (width
|
|
79
|
+
@media (min-width: 640px) {
|
|
80
80
|
.Container_gutters_s_xs {
|
|
81
81
|
padding: 0 var(--space-xs);
|
|
82
82
|
}
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
max-inline-size: 100%;
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
|
-
@media (width
|
|
111
|
+
@media (min-width: 1024px) {
|
|
112
112
|
.Container_gutters_m_xs {
|
|
113
113
|
padding: 0 var(--space-xs);
|
|
114
114
|
}
|
|
@@ -140,7 +140,7 @@
|
|
|
140
140
|
max-inline-size: 100%;
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
|
-
@media (width
|
|
143
|
+
@media (min-width: 1280px) {
|
|
144
144
|
.Container_gutters_l_xs {
|
|
145
145
|
padding: 0 var(--space-xs);
|
|
146
146
|
}
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
.Grid_gap_8xl {
|
|
81
81
|
grid-gap: var(--space-8xl);
|
|
82
82
|
}
|
|
83
|
-
@media (width
|
|
83
|
+
@media (min-width: 0) {
|
|
84
84
|
.Grid_gap_xs_0 {
|
|
85
85
|
grid-gap: 0;
|
|
86
86
|
}
|
|
@@ -157,7 +157,7 @@
|
|
|
157
157
|
grid-template-columns: repeat(12, 1fr);
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
|
-
@media (width
|
|
160
|
+
@media (min-width: 640px) {
|
|
161
161
|
.Grid_gap_s_0 {
|
|
162
162
|
grid-gap: 0;
|
|
163
163
|
}
|
|
@@ -234,7 +234,7 @@
|
|
|
234
234
|
grid-template-columns: repeat(12, 1fr);
|
|
235
235
|
}
|
|
236
236
|
}
|
|
237
|
-
@media (width
|
|
237
|
+
@media (min-width: 1024px) {
|
|
238
238
|
.Grid_gap_m_0 {
|
|
239
239
|
grid-gap: 0;
|
|
240
240
|
}
|
|
@@ -311,7 +311,7 @@
|
|
|
311
311
|
grid-template-columns: repeat(12, 1fr);
|
|
312
312
|
}
|
|
313
313
|
}
|
|
314
|
-
@media (width
|
|
314
|
+
@media (min-width: 1280px) {
|
|
315
315
|
.Grid_gap_l_0 {
|
|
316
316
|
grid-gap: 0;
|
|
317
317
|
}
|
|
@@ -522,7 +522,7 @@
|
|
|
522
522
|
.GridItem_rowStart_6 {
|
|
523
523
|
--grid-row-start: 6;
|
|
524
524
|
}
|
|
525
|
-
@media (width
|
|
525
|
+
@media (min-width: 0) {
|
|
526
526
|
.GridItem_col_xs_1 {
|
|
527
527
|
--grid-col-start: auto;
|
|
528
528
|
--grid-col-end: span 1;
|
|
@@ -650,7 +650,7 @@
|
|
|
650
650
|
--grid-row-start: 6;
|
|
651
651
|
}
|
|
652
652
|
}
|
|
653
|
-
@media (width
|
|
653
|
+
@media (min-width: 640px) {
|
|
654
654
|
.GridItem_col_s_1 {
|
|
655
655
|
--grid-col-start: auto;
|
|
656
656
|
--grid-col-end: span 1;
|
|
@@ -778,7 +778,7 @@
|
|
|
778
778
|
--grid-row-start: 6;
|
|
779
779
|
}
|
|
780
780
|
}
|
|
781
|
-
@media (width
|
|
781
|
+
@media (min-width: 1024px) {
|
|
782
782
|
.GridItem_col_m_1 {
|
|
783
783
|
--grid-col-start: auto;
|
|
784
784
|
--grid-col-end: span 1;
|
|
@@ -906,7 +906,7 @@
|
|
|
906
906
|
--grid-row-start: 6;
|
|
907
907
|
}
|
|
908
908
|
}
|
|
909
|
-
@media (width
|
|
909
|
+
@media (min-width: 1280px) {
|
|
910
910
|
.GridItem_col_l_1 {
|
|
911
911
|
--grid-col-start: auto;
|
|
912
912
|
--grid-col-end: span 1;
|
|
@@ -17,8 +17,10 @@
|
|
|
17
17
|
color: var(--icon-button-font-color);
|
|
18
18
|
background-color: var(--icon-button-bg-color);
|
|
19
19
|
opacity: 1;
|
|
20
|
-
transition:
|
|
21
|
-
|
|
20
|
+
transition:
|
|
21
|
+
background-color var(--transition-default),
|
|
22
|
+
box-shadow var(--transition-default),
|
|
23
|
+
opacity var(--transition-default);
|
|
22
24
|
-webkit-tap-highlight-color: transparent;
|
|
23
25
|
position: relative;
|
|
24
26
|
}
|
|
@@ -155,6 +157,13 @@
|
|
|
155
157
|
box-shadow: 0 8px 32px rgb(0 0 0 / 8%);
|
|
156
158
|
}
|
|
157
159
|
|
|
160
|
+
.IconButton_variant_contained.IconButton_rounded,
|
|
161
|
+
.IconButton_variant_outlined.IconButton_rounded,
|
|
162
|
+
.IconButton_variant_ghost.IconButton_rounded,
|
|
163
|
+
.IconButton_variant_floating.IconButton_rounded {
|
|
164
|
+
border-radius: 50%;
|
|
165
|
+
}
|
|
166
|
+
|
|
158
167
|
.IconButton_variant_contained.IconButton_disabled,
|
|
159
168
|
.IconButton_variant_contained.IconButton_loading,
|
|
160
169
|
.IconButton_variant_outlined.IconButton_disabled,
|
|
@@ -32,6 +32,8 @@ type IconButtonBaseProps = {
|
|
|
32
32
|
/** Дополнительные CSS-классы */
|
|
33
33
|
className?: string;
|
|
34
34
|
children?: never;
|
|
35
|
+
/** Если {true} делает компонент круглым */
|
|
36
|
+
rounded?: boolean;
|
|
35
37
|
};
|
|
36
38
|
export type IconButtonProps<As extends ElementType = typeof ICON_BUTTON_DEFAULT_TAG> = PolymorphicComponentPropsWithoutRef<IconButtonBaseProps, As>;
|
|
37
39
|
export declare const cnIconButton: import("@bem-react/classname").ClassNameFormatter;
|
|
@@ -32,7 +32,7 @@ exports.IconButton = (0, polymorphicComponentWithRef_1.polymorphicComponentWithR
|
|
|
32
32
|
props: inProps,
|
|
33
33
|
name: 'IconButton'
|
|
34
34
|
});
|
|
35
|
-
var _a = props.size, size = _a === void 0 ? constants_1.ICON_BUTTON_DEFAULT_SIZE : _a, _b = props.variant, variant = _b === void 0 ? constants_1.ICON_BUTTON_DEFAULT_VARIANT : _b, _c = props.color, color = _c === void 0 ? constants_1.ICON_BUTTON_DEFAULT_COLOR : _c, _d = props.as, Tag = _d === void 0 ? constants_1.ICON_BUTTON_DEFAULT_TAG : _d, iconColor = props.iconColor, compressed = props.compressed, loading = props.loading, disabled = props.disabled, className = props.className, Icon = props.icon, onClick = props.onClick, other = tslib_1.__rest(props, ["size", "variant", "color", "as", "iconColor", "compressed", "loading", "disabled", "className", "icon", "onClick"]);
|
|
35
|
+
var _a = props.size, size = _a === void 0 ? constants_1.ICON_BUTTON_DEFAULT_SIZE : _a, _b = props.variant, variant = _b === void 0 ? constants_1.ICON_BUTTON_DEFAULT_VARIANT : _b, _c = props.color, color = _c === void 0 ? constants_1.ICON_BUTTON_DEFAULT_COLOR : _c, _d = props.as, Tag = _d === void 0 ? constants_1.ICON_BUTTON_DEFAULT_TAG : _d, iconColor = props.iconColor, compressed = props.compressed, loading = props.loading, disabled = props.disabled, className = props.className, Icon = props.icon, onClick = props.onClick, rounded = props.rounded, other = tslib_1.__rest(props, ["size", "variant", "color", "as", "iconColor", "compressed", "loading", "disabled", "className", "icon", "onClick", "rounded"]);
|
|
36
36
|
var iconSize = (0, getIconSizeToFormElement_1.getIconSizeToFormElement)(size);
|
|
37
37
|
var isInteractionPrevented = disabled || loading;
|
|
38
38
|
var handleClick = function (event) {
|
|
@@ -55,7 +55,8 @@ exports.IconButton = (0, polymorphicComponentWithRef_1.polymorphicComponentWithR
|
|
|
55
55
|
color: color,
|
|
56
56
|
disabled: disabled,
|
|
57
57
|
loading: loading,
|
|
58
|
-
compressed: compressed
|
|
58
|
+
compressed: compressed,
|
|
59
|
+
rounded: rounded
|
|
59
60
|
}, [className]), disabled: isInteractionPrevented, onClick: handleClick }, (isInteractionPrevented && { tabIndex: -1 }), other, { ref: ref }), resolvedChildren));
|
|
60
61
|
});
|
|
61
62
|
exports.IconButton.displayName = 'IconButton';
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
.ProgressBar {
|
|
2
|
+
--progressbar-translate-x: translateX(0%);
|
|
3
|
+
background-color: var(--color-background-action-light);
|
|
4
|
+
position: relative;
|
|
5
|
+
block-size: 4px;
|
|
6
|
+
display: block;
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.ProgressBar-ProgressLine {
|
|
11
|
+
background-color: var(--color-content-action);
|
|
12
|
+
border-radius: 3px;
|
|
13
|
+
inline-size: 100%;
|
|
14
|
+
display: block;
|
|
15
|
+
block-size: inherit;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.ProgressBar_filled .ProgressBar-ProgressLine {
|
|
19
|
+
border-radius: 0;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.ProgressBar_indefinite .ProgressBar-ProgressLine {
|
|
23
|
+
animation: progress-bar-animation 2s linear infinite;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.ProgressBar:not(.ProgressBar_indefinite) .ProgressBar-ProgressLine {
|
|
27
|
+
transition: transform var(--transition-slow);
|
|
28
|
+
transform: var(--progressbar-translate-x);
|
|
29
|
+
transform-origin: left;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@keyframes progress-bar-animation {
|
|
33
|
+
0% {
|
|
34
|
+
transform: translateX(-125%);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
100% {
|
|
38
|
+
transform: translateX(125%);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import './ProgressBar.css';
|
|
2
|
+
import { type ElementType } from 'react';
|
|
3
|
+
import { PolymorphicComponentPropsWithoutRef } from '../../utils/polymorphicComponentWithRef';
|
|
4
|
+
import { PROGRESSBAR_DEFAULT_TAG } from './constants';
|
|
5
|
+
export declare const cnProgressBar: import("@bem-react/classname").ClassNameFormatter;
|
|
6
|
+
export type ProgressBarBaseProps = {
|
|
7
|
+
/** Значение заполненной части 0-100 */
|
|
8
|
+
value?: number;
|
|
9
|
+
};
|
|
10
|
+
export type ProgressBarProps<As extends ElementType = typeof PROGRESSBAR_DEFAULT_TAG> = PolymorphicComponentPropsWithoutRef<ProgressBarBaseProps, As>;
|
|
11
|
+
export declare const ProgressBar: import("../../utils/polymorphicComponentWithRef").PolymorphicComponentWithRef<ProgressBarBaseProps, "span">;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
exports.__esModule = true;
|
|
3
|
+
exports.ProgressBar = exports.cnProgressBar = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
require("./ProgressBar.css");
|
|
6
|
+
var react_1 = tslib_1.__importDefault(require("react"));
|
|
7
|
+
var classname_1 = require("../../utils/classname");
|
|
8
|
+
var polymorphicComponentWithRef_1 = require("../../utils/polymorphicComponentWithRef");
|
|
9
|
+
var constants_1 = require("./constants");
|
|
10
|
+
exports.cnProgressBar = (0, classname_1.cn)('ProgressBar');
|
|
11
|
+
exports.ProgressBar = (0, polymorphicComponentWithRef_1.polymorphicComponentWithRef)(function (_a, ref) {
|
|
12
|
+
var className = _a.className, _b = _a.as, Tag = _b === void 0 ? constants_1.PROGRESSBAR_DEFAULT_TAG : _b, value = _a.value, other = tslib_1.__rest(_a, ["className", "as", "value"]);
|
|
13
|
+
var isValueSet = value || value === 0;
|
|
14
|
+
var isFilled = value === 100;
|
|
15
|
+
var setProgressLineStyles = function () {
|
|
16
|
+
if (!isValueSet)
|
|
17
|
+
return undefined;
|
|
18
|
+
var translateX = Math.max(-100, Math.min(0, (value || 0) - 100));
|
|
19
|
+
return {
|
|
20
|
+
'--progressbar-translate-x': "translateX(".concat(translateX, "%)")
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
return (react_1["default"].createElement(Tag, tslib_1.__assign({}, (isValueSet && {
|
|
24
|
+
'aria-valuemin': 0,
|
|
25
|
+
'aria-valuemax': 100,
|
|
26
|
+
'aria-valuenow': value
|
|
27
|
+
}), { className: (0, exports.cnProgressBar)({ filled: isFilled, indefinite: !isValueSet }, [
|
|
28
|
+
className,
|
|
29
|
+
]), role: "progressbar" }, other, { ref: ref }),
|
|
30
|
+
react_1["default"].createElement("span", { className: (0, exports.cnProgressBar)('ProgressLine'), style: setProgressLineStyles() })));
|
|
31
|
+
});
|
|
32
|
+
exports.ProgressBar.displayName = 'ProgressBar';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const PROGRESSBAR_DEFAULT_TAG = "span";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ProgressBar';
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
.Stack_justify_spaceAround {
|
|
94
94
|
justify-content: space-around;
|
|
95
95
|
}
|
|
96
|
-
@media (width
|
|
96
|
+
@media (min-width: 0) {
|
|
97
97
|
.Stack_direction_xs_row {
|
|
98
98
|
flex-direction: row;
|
|
99
99
|
}
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
gap: var(--space-8xl);
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
|
-
@media (width
|
|
149
|
+
@media (min-width: 640px) {
|
|
150
150
|
.Stack_direction_s_row {
|
|
151
151
|
flex-direction: row;
|
|
152
152
|
}
|
|
@@ -199,7 +199,7 @@
|
|
|
199
199
|
gap: var(--space-8xl);
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
|
-
@media (width
|
|
202
|
+
@media (min-width: 1024px) {
|
|
203
203
|
.Stack_direction_m_row {
|
|
204
204
|
flex-direction: row;
|
|
205
205
|
}
|
|
@@ -252,7 +252,7 @@
|
|
|
252
252
|
gap: var(--space-8xl);
|
|
253
253
|
}
|
|
254
254
|
}
|
|
255
|
-
@media (width
|
|
255
|
+
@media (min-width: 1280px) {
|
|
256
256
|
.Stack_direction_l_row {
|
|
257
257
|
flex-direction: row;
|
|
258
258
|
}
|
|
@@ -6,6 +6,7 @@ import type { BadgeProps } from '../Badge';
|
|
|
6
6
|
import type { ButtonProps } from '../Button';
|
|
7
7
|
import type { CardProps } from '../Card';
|
|
8
8
|
import type { CheckboxProps } from '../Checkbox';
|
|
9
|
+
import type { CheckboxGroupProps } from '../CheckboxGroup';
|
|
9
10
|
import type { ChipProps } from '../Chip';
|
|
10
11
|
import type { CollapseProps } from '../Collapse';
|
|
11
12
|
import type { ContainerProps } from '../Container';
|
|
@@ -64,6 +65,7 @@ export type Theme = {
|
|
|
64
65
|
Button?: Partial<ButtonProps>;
|
|
65
66
|
Card?: Partial<CardProps>;
|
|
66
67
|
Checkbox?: Partial<CheckboxProps>;
|
|
68
|
+
CheckboxGroup?: Partial<CheckboxGroupProps>;
|
|
67
69
|
Chip?: Partial<ChipProps>;
|
|
68
70
|
Collapse?: Partial<CollapseProps>;
|
|
69
71
|
Container?: Partial<ContainerProps>;
|
|
@@ -8,9 +8,9 @@ function useBoolean(
|
|
|
8
8
|
defaultValue) {
|
|
9
9
|
if (defaultValue === void 0) { defaultValue = false; }
|
|
10
10
|
var _a = tslib_1.__read((0, react_1.useState)(defaultValue), 2), value = _a[0], setValue = _a[1];
|
|
11
|
-
var on = function () { return setValue(true); };
|
|
12
|
-
var off = function () { return setValue(false); };
|
|
13
|
-
var toggle = function () { return setValue(function (value) { return !value; }); };
|
|
11
|
+
var on = (0, react_1.useCallback)(function () { return setValue(true); }, []);
|
|
12
|
+
var off = (0, react_1.useCallback)(function () { return setValue(false); }, []);
|
|
13
|
+
var toggle = (0, react_1.useCallback)(function () { return setValue(function (value) { return !value; }); }, []);
|
|
14
14
|
return [value, { on: on, off: off, toggle: toggle }];
|
|
15
15
|
}
|
|
16
16
|
exports.useBoolean = useBoolean;
|
|
@@ -6,9 +6,9 @@ var react_1 = require("react");
|
|
|
6
6
|
function useCounter(_a) {
|
|
7
7
|
var _b = _a === void 0 ? {} : _a, _c = _b.initialValue, initialValue = _c === void 0 ? 0 : _c, _d = _b.step, step = _d === void 0 ? 1 : _d;
|
|
8
8
|
var _e = tslib_1.__read((0, react_1.useState)(initialValue), 2), count = _e[0], setCount = _e[1];
|
|
9
|
-
var increment = function () { return setCount(function (x) { return x + step; }); };
|
|
10
|
-
var decrement = function () { return setCount(function (x) { return x - step; }); };
|
|
11
|
-
var reset = function () { return setCount(initialValue); };
|
|
9
|
+
var increment = (0, react_1.useCallback)(function () { return setCount(function (x) { return x + step; }); }, [step]);
|
|
10
|
+
var decrement = (0, react_1.useCallback)(function () { return setCount(function (x) { return x - step; }); }, [step]);
|
|
11
|
+
var reset = (0, react_1.useCallback)(function () { return setCount(initialValue); }, [initialValue]);
|
|
12
12
|
return {
|
|
13
13
|
count: count,
|
|
14
14
|
increment: increment,
|
|
@@ -27,16 +27,16 @@ function useTimer(_a) {
|
|
|
27
27
|
});
|
|
28
28
|
};
|
|
29
29
|
(0, useInterval_1.useInterval)(timerCallback, state.isTimerRunning ? interval : null);
|
|
30
|
-
var resetTimer = function () {
|
|
30
|
+
var resetTimer = (0, react_1.useCallback)(function () {
|
|
31
31
|
setState(function () { return ({
|
|
32
32
|
isTimerRunning: false,
|
|
33
33
|
count: startTime
|
|
34
34
|
}); });
|
|
35
|
-
};
|
|
36
|
-
var pauseTimer = function () {
|
|
35
|
+
}, [startTime]);
|
|
36
|
+
var pauseTimer = (0, react_1.useCallback)(function () {
|
|
37
37
|
setState(function (state) { return (tslib_1.__assign(tslib_1.__assign({}, state), { isTimerRunning: false })); });
|
|
38
|
-
};
|
|
39
|
-
var startTimer = function () {
|
|
38
|
+
}, []);
|
|
39
|
+
var startTimer = (0, react_1.useCallback)(function () {
|
|
40
40
|
setState(function (_a) {
|
|
41
41
|
var count = _a.count;
|
|
42
42
|
return ({
|
|
@@ -46,7 +46,7 @@ function useTimer(_a) {
|
|
|
46
46
|
isTimerRunning: startTime !== endTime
|
|
47
47
|
});
|
|
48
48
|
});
|
|
49
|
-
};
|
|
49
|
+
}, [startTime, endTime]);
|
|
50
50
|
(0, react_1.useEffect)(function () {
|
|
51
51
|
savedOnTimerEnd.current = onTimerEnd;
|
|
52
52
|
}, [onTimerEnd]);
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { __assign, __rest } from "tslib";
|
|
2
2
|
import './Checkbox.css';
|
|
3
|
-
import React, { forwardRef } from 'react';
|
|
3
|
+
import React, { forwardRef, useContext } from 'react';
|
|
4
4
|
import { useThemeProps } from '../../hooks/useThemeProps';
|
|
5
5
|
import { cn } from '../../utils/classname';
|
|
6
|
+
import { CheckboxGroupContext } from '../CheckboxGroup/CheckboxGroupContext';
|
|
6
7
|
import { FormControlLabel, } from '../FormControlLabel';
|
|
7
8
|
import { CheckboxIcon } from './components';
|
|
9
|
+
import { CHECKBOX_DEFAULT_ALIGN, CHECKBOX_DEFAULT_LABEL_PLACEMENT, CHECKBOX_DEFAULT_SIZE, } from './constants';
|
|
8
10
|
export var checkboxSizeVariant = ['2xs', 'xs', 's', 'm', 'l'];
|
|
9
11
|
export var cnCheckbox = cn('Checkbox');
|
|
10
12
|
export var Checkbox = forwardRef(function (inProps, ref) {
|
|
@@ -12,7 +14,26 @@ export var Checkbox = forwardRef(function (inProps, ref) {
|
|
|
12
14
|
props: inProps,
|
|
13
15
|
name: 'Checkbox'
|
|
14
16
|
});
|
|
15
|
-
var _a = props.align, align = _a === void 0 ?
|
|
17
|
+
var _a = props.align, align = _a === void 0 ? CHECKBOX_DEFAULT_ALIGN : _a, _b = props.labelPlacement, labelPlacement = _b === void 0 ? CHECKBOX_DEFAULT_LABEL_PLACEMENT : _b, _c = props.size, sizeProp = _c === void 0 ? CHECKBOX_DEFAULT_SIZE : _c, className = props.className, label = props.label, labelProps = props.labelProps, disabled = props.disabled, checkedProp = props.checked, inputRef = props.inputRef, indeterminate = props.indeterminate, nameProp = props.name, onChangeProp = props.onChange, other = __rest(props, ["align", "labelPlacement", "size", "className", "label", "labelProps", "disabled", "checked", "inputRef", "indeterminate", "name", "onChange"]);
|
|
18
|
+
var checked = checkedProp;
|
|
19
|
+
var name = nameProp;
|
|
20
|
+
var size = sizeProp;
|
|
21
|
+
var checkboxGroup = useContext(CheckboxGroupContext);
|
|
22
|
+
if (checkboxGroup) {
|
|
23
|
+
if (checked === undefined && checkboxGroup.value) {
|
|
24
|
+
checked = checkboxGroup === null || checkboxGroup === void 0 ? void 0 : checkboxGroup.value.includes(other === null || other === void 0 ? void 0 : other.value);
|
|
25
|
+
}
|
|
26
|
+
if (name === undefined && checkboxGroup.name) {
|
|
27
|
+
name = checkboxGroup.name;
|
|
28
|
+
}
|
|
29
|
+
if (inProps.size === undefined && checkboxGroup.size) {
|
|
30
|
+
size = checkboxGroup.size;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
var onChange = function (event) {
|
|
34
|
+
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(event);
|
|
35
|
+
checkboxGroup === null || checkboxGroup === void 0 ? void 0 : checkboxGroup.onChange(event);
|
|
36
|
+
};
|
|
16
37
|
return (React.createElement(FormControlLabel, __assign({ label: label, size: size, labelPlacement: labelPlacement, disabled: disabled, align: align, className: className, ref: ref }, labelProps),
|
|
17
38
|
React.createElement("span", { className: cnCheckbox({
|
|
18
39
|
size: size,
|
|
@@ -20,7 +41,7 @@ export var Checkbox = forwardRef(function (inProps, ref) {
|
|
|
20
41
|
checked: checked,
|
|
21
42
|
indeterminate: indeterminate
|
|
22
43
|
}) },
|
|
23
|
-
React.createElement("input", __assign({ type: "checkbox", className: cnCheckbox('Input'), disabled: disabled, checked: checked }, other, { ref: inputRef })),
|
|
44
|
+
React.createElement("input", __assign({ type: "checkbox", className: cnCheckbox('Input'), disabled: disabled, checked: checked, onChange: onChange, name: name }, other, { ref: inputRef })),
|
|
24
45
|
React.createElement("span", { className: cnCheckbox('Box') },
|
|
25
46
|
React.createElement(CheckboxIcon, { indeterminate: indeterminate, className: cnCheckbox('Icon') })))));
|
|
26
47
|
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import './CheckboxGroup.css';
|
|
2
|
+
import type { ElementType, ReactNode } from 'react';
|
|
3
|
+
import type { FormElementSizeVariant } from '../../types/FormElementSizeVariant';
|
|
4
|
+
import { type PolymorphicComponentPropsWithoutRef } from '../../utils/polymorphicComponentWithRef';
|
|
5
|
+
import { type FormGroupProps } from '../FormGroup';
|
|
6
|
+
export type CheckboxGroupBaseProps = {
|
|
7
|
+
/** Имя группы радиокнопок (передается всем вложенным радиокнопкам) */
|
|
8
|
+
name: string;
|
|
9
|
+
/** Значение по умолчанию (неконтролируемое состояние) */
|
|
10
|
+
defaultValue?: (string | number)[];
|
|
11
|
+
/** Текущее значение */
|
|
12
|
+
value?: (string | number)[];
|
|
13
|
+
/** Заголовок группы */
|
|
14
|
+
title?: string;
|
|
15
|
+
/** Размер */
|
|
16
|
+
size?: FormElementSizeVariant;
|
|
17
|
+
/** Содержимое компонента */
|
|
18
|
+
children?: ReactNode;
|
|
19
|
+
/** Направление */
|
|
20
|
+
direction?: FormGroupProps['direction'];
|
|
21
|
+
/** Событие изменения состояния */
|
|
22
|
+
onChange?(value: (string | number)[]): void;
|
|
23
|
+
};
|
|
24
|
+
export type CheckboxGroupProps<As extends ElementType = 'div'> = PolymorphicComponentPropsWithoutRef<CheckboxGroupBaseProps, As>;
|
|
25
|
+
export declare const cnCheckboxGroup: import("@bem-react/classname").ClassNameFormatter;
|
|
26
|
+
export declare const CheckboxGroup: import("../../utils/polymorphicComponentWithRef").PolymorphicComponentWithRef<CheckboxGroupBaseProps, "div">;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { __assign, __read, __rest, __spreadArray } from "tslib";
|
|
2
|
+
import './CheckboxGroup.css';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { useControlled } from '../../hooks/useControlled';
|
|
5
|
+
import { useThemeProps } from '../../hooks/useThemeProps';
|
|
6
|
+
import { cn } from '../../utils/classname';
|
|
7
|
+
import { polymorphicComponentWithRef, } from '../../utils/polymorphicComponentWithRef';
|
|
8
|
+
import { FormGroup } from '../FormGroup';
|
|
9
|
+
import { FormTitle } from '../FormTitle';
|
|
10
|
+
import { CheckboxGroupContext } from './CheckboxGroupContext';
|
|
11
|
+
import { CHECKBOX_GROUP_DEFAULT_DIRECTION, CHECKBOX_GROUP_DEFAULT_SIZE, CHECKBOX_GROUP_DEFAULT_AS, } from './constants';
|
|
12
|
+
export var cnCheckboxGroup = cn('CheckboxGroup');
|
|
13
|
+
export var CheckboxGroup = polymorphicComponentWithRef(function (inProps, ref) {
|
|
14
|
+
var props = useThemeProps({
|
|
15
|
+
props: inProps,
|
|
16
|
+
name: 'CheckboxGroup'
|
|
17
|
+
});
|
|
18
|
+
var _a = props.direction, direction = _a === void 0 ? CHECKBOX_GROUP_DEFAULT_DIRECTION : _a, _b = props.size, size = _b === void 0 ? CHECKBOX_GROUP_DEFAULT_SIZE : _b, _c = props.as, Tag = _c === void 0 ? CHECKBOX_GROUP_DEFAULT_AS : _c, title = props.title, className = props.className, children = props.children, name = props.name, valueProp = props.value, defaultValue = props.defaultValue, onChange = props.onChange, other = __rest(props, ["direction", "size", "as", "title", "className", "children", "name", "value", "defaultValue", "onChange"]);
|
|
19
|
+
var _d = __read(useControlled({
|
|
20
|
+
value: valueProp,
|
|
21
|
+
defaultValue: defaultValue,
|
|
22
|
+
name: 'CheckboxGroup',
|
|
23
|
+
state: 'value'
|
|
24
|
+
}), 2), valueState = _d[0], setValueState = _d[1];
|
|
25
|
+
var handleChange = function (event) {
|
|
26
|
+
var itemValue = event.currentTarget.value;
|
|
27
|
+
var value = (valueState === null || valueState === void 0 ? void 0 : valueState.includes(itemValue))
|
|
28
|
+
? valueState.filter(function (item) { return item !== itemValue; })
|
|
29
|
+
: __spreadArray(__spreadArray([], __read((valueState || [])), false), [itemValue], false);
|
|
30
|
+
setValueState(value);
|
|
31
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(value);
|
|
32
|
+
};
|
|
33
|
+
return (React.createElement(Tag, __assign({ className: cnCheckboxGroup({ size: size }, [className]), role: "radiogroup" }, other, { ref: ref }),
|
|
34
|
+
React.createElement(CheckboxGroupContext.Provider, { value: {
|
|
35
|
+
value: valueState,
|
|
36
|
+
onChange: handleChange,
|
|
37
|
+
name: name,
|
|
38
|
+
size: size
|
|
39
|
+
} },
|
|
40
|
+
title && React.createElement(FormTitle, { size: size }, title),
|
|
41
|
+
React.createElement(FormGroup, { direction: direction, size: size }, children))));
|
|
42
|
+
});
|
|
43
|
+
CheckboxGroup.displayName = 'CheckboxGroup';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { FormElementSizeVariant } from '../../types/FormElementSizeVariant';
|
|
3
|
+
export interface CheckboxGroupContextValue {
|
|
4
|
+
name: string | undefined;
|
|
5
|
+
onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
6
|
+
value?: (string | number)[];
|
|
7
|
+
size?: FormElementSizeVariant;
|
|
8
|
+
}
|
|
9
|
+
export declare const CheckboxGroupContext: React.Context<CheckboxGroupContextValue | undefined>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './CheckboxGroup';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './CheckboxGroup';
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
.Container_gutters_2xl {
|
|
45
45
|
padding: 0 var(--space-2xl);
|
|
46
46
|
}
|
|
47
|
-
@media (width
|
|
47
|
+
@media (min-width: 0) {
|
|
48
48
|
.Container_gutters_xs_xs {
|
|
49
49
|
padding: 0 var(--space-xs);
|
|
50
50
|
}
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
max-inline-size: 100%;
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
|
-
@media (width
|
|
79
|
+
@media (min-width: 640px) {
|
|
80
80
|
.Container_gutters_s_xs {
|
|
81
81
|
padding: 0 var(--space-xs);
|
|
82
82
|
}
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
max-inline-size: 100%;
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
|
-
@media (width
|
|
111
|
+
@media (min-width: 1024px) {
|
|
112
112
|
.Container_gutters_m_xs {
|
|
113
113
|
padding: 0 var(--space-xs);
|
|
114
114
|
}
|
|
@@ -140,7 +140,7 @@
|
|
|
140
140
|
max-inline-size: 100%;
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
|
-
@media (width
|
|
143
|
+
@media (min-width: 1280px) {
|
|
144
144
|
.Container_gutters_l_xs {
|
|
145
145
|
padding: 0 var(--space-xs);
|
|
146
146
|
}
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
.Grid_gap_8xl {
|
|
81
81
|
grid-gap: var(--space-8xl);
|
|
82
82
|
}
|
|
83
|
-
@media (width
|
|
83
|
+
@media (min-width: 0) {
|
|
84
84
|
.Grid_gap_xs_0 {
|
|
85
85
|
grid-gap: 0;
|
|
86
86
|
}
|
|
@@ -157,7 +157,7 @@
|
|
|
157
157
|
grid-template-columns: repeat(12, 1fr);
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
|
-
@media (width
|
|
160
|
+
@media (min-width: 640px) {
|
|
161
161
|
.Grid_gap_s_0 {
|
|
162
162
|
grid-gap: 0;
|
|
163
163
|
}
|
|
@@ -234,7 +234,7 @@
|
|
|
234
234
|
grid-template-columns: repeat(12, 1fr);
|
|
235
235
|
}
|
|
236
236
|
}
|
|
237
|
-
@media (width
|
|
237
|
+
@media (min-width: 1024px) {
|
|
238
238
|
.Grid_gap_m_0 {
|
|
239
239
|
grid-gap: 0;
|
|
240
240
|
}
|
|
@@ -311,7 +311,7 @@
|
|
|
311
311
|
grid-template-columns: repeat(12, 1fr);
|
|
312
312
|
}
|
|
313
313
|
}
|
|
314
|
-
@media (width
|
|
314
|
+
@media (min-width: 1280px) {
|
|
315
315
|
.Grid_gap_l_0 {
|
|
316
316
|
grid-gap: 0;
|
|
317
317
|
}
|
|
@@ -522,7 +522,7 @@
|
|
|
522
522
|
.GridItem_rowStart_6 {
|
|
523
523
|
--grid-row-start: 6;
|
|
524
524
|
}
|
|
525
|
-
@media (width
|
|
525
|
+
@media (min-width: 0) {
|
|
526
526
|
.GridItem_col_xs_1 {
|
|
527
527
|
--grid-col-start: auto;
|
|
528
528
|
--grid-col-end: span 1;
|
|
@@ -650,7 +650,7 @@
|
|
|
650
650
|
--grid-row-start: 6;
|
|
651
651
|
}
|
|
652
652
|
}
|
|
653
|
-
@media (width
|
|
653
|
+
@media (min-width: 640px) {
|
|
654
654
|
.GridItem_col_s_1 {
|
|
655
655
|
--grid-col-start: auto;
|
|
656
656
|
--grid-col-end: span 1;
|
|
@@ -778,7 +778,7 @@
|
|
|
778
778
|
--grid-row-start: 6;
|
|
779
779
|
}
|
|
780
780
|
}
|
|
781
|
-
@media (width
|
|
781
|
+
@media (min-width: 1024px) {
|
|
782
782
|
.GridItem_col_m_1 {
|
|
783
783
|
--grid-col-start: auto;
|
|
784
784
|
--grid-col-end: span 1;
|
|
@@ -906,7 +906,7 @@
|
|
|
906
906
|
--grid-row-start: 6;
|
|
907
907
|
}
|
|
908
908
|
}
|
|
909
|
-
@media (width
|
|
909
|
+
@media (min-width: 1280px) {
|
|
910
910
|
.GridItem_col_l_1 {
|
|
911
911
|
--grid-col-start: auto;
|
|
912
912
|
--grid-col-end: span 1;
|
|
@@ -17,8 +17,10 @@
|
|
|
17
17
|
color: var(--icon-button-font-color);
|
|
18
18
|
background-color: var(--icon-button-bg-color);
|
|
19
19
|
opacity: 1;
|
|
20
|
-
transition:
|
|
21
|
-
|
|
20
|
+
transition:
|
|
21
|
+
background-color var(--transition-default),
|
|
22
|
+
box-shadow var(--transition-default),
|
|
23
|
+
opacity var(--transition-default);
|
|
22
24
|
-webkit-tap-highlight-color: transparent;
|
|
23
25
|
position: relative;
|
|
24
26
|
}
|
|
@@ -155,6 +157,13 @@
|
|
|
155
157
|
box-shadow: 0 8px 32px rgb(0 0 0 / 8%);
|
|
156
158
|
}
|
|
157
159
|
|
|
160
|
+
.IconButton_variant_contained.IconButton_rounded,
|
|
161
|
+
.IconButton_variant_outlined.IconButton_rounded,
|
|
162
|
+
.IconButton_variant_ghost.IconButton_rounded,
|
|
163
|
+
.IconButton_variant_floating.IconButton_rounded {
|
|
164
|
+
border-radius: 50%;
|
|
165
|
+
}
|
|
166
|
+
|
|
158
167
|
.IconButton_variant_contained.IconButton_disabled,
|
|
159
168
|
.IconButton_variant_contained.IconButton_loading,
|
|
160
169
|
.IconButton_variant_outlined.IconButton_disabled,
|
|
@@ -32,6 +32,8 @@ type IconButtonBaseProps = {
|
|
|
32
32
|
/** Дополнительные CSS-классы */
|
|
33
33
|
className?: string;
|
|
34
34
|
children?: never;
|
|
35
|
+
/** Если {true} делает компонент круглым */
|
|
36
|
+
rounded?: boolean;
|
|
35
37
|
};
|
|
36
38
|
export type IconButtonProps<As extends ElementType = typeof ICON_BUTTON_DEFAULT_TAG> = PolymorphicComponentPropsWithoutRef<IconButtonBaseProps, As>;
|
|
37
39
|
export declare const cnIconButton: import("@bem-react/classname").ClassNameFormatter;
|
|
@@ -29,7 +29,7 @@ export var IconButton = polymorphicComponentWithRef(function (inProps, ref) {
|
|
|
29
29
|
props: inProps,
|
|
30
30
|
name: 'IconButton'
|
|
31
31
|
});
|
|
32
|
-
var _a = props.size, size = _a === void 0 ? ICON_BUTTON_DEFAULT_SIZE : _a, _b = props.variant, variant = _b === void 0 ? ICON_BUTTON_DEFAULT_VARIANT : _b, _c = props.color, color = _c === void 0 ? ICON_BUTTON_DEFAULT_COLOR : _c, _d = props.as, Tag = _d === void 0 ? ICON_BUTTON_DEFAULT_TAG : _d, iconColor = props.iconColor, compressed = props.compressed, loading = props.loading, disabled = props.disabled, className = props.className, Icon = props.icon, onClick = props.onClick, other = __rest(props, ["size", "variant", "color", "as", "iconColor", "compressed", "loading", "disabled", "className", "icon", "onClick"]);
|
|
32
|
+
var _a = props.size, size = _a === void 0 ? ICON_BUTTON_DEFAULT_SIZE : _a, _b = props.variant, variant = _b === void 0 ? ICON_BUTTON_DEFAULT_VARIANT : _b, _c = props.color, color = _c === void 0 ? ICON_BUTTON_DEFAULT_COLOR : _c, _d = props.as, Tag = _d === void 0 ? ICON_BUTTON_DEFAULT_TAG : _d, iconColor = props.iconColor, compressed = props.compressed, loading = props.loading, disabled = props.disabled, className = props.className, Icon = props.icon, onClick = props.onClick, rounded = props.rounded, other = __rest(props, ["size", "variant", "color", "as", "iconColor", "compressed", "loading", "disabled", "className", "icon", "onClick", "rounded"]);
|
|
33
33
|
var iconSize = getIconSizeToFormElement(size);
|
|
34
34
|
var isInteractionPrevented = disabled || loading;
|
|
35
35
|
var handleClick = function (event) {
|
|
@@ -52,7 +52,8 @@ export var IconButton = polymorphicComponentWithRef(function (inProps, ref) {
|
|
|
52
52
|
color: color,
|
|
53
53
|
disabled: disabled,
|
|
54
54
|
loading: loading,
|
|
55
|
-
compressed: compressed
|
|
55
|
+
compressed: compressed,
|
|
56
|
+
rounded: rounded
|
|
56
57
|
}, [className]), disabled: isInteractionPrevented, onClick: handleClick }, (isInteractionPrevented && { tabIndex: -1 }), other, { ref: ref }), resolvedChildren));
|
|
57
58
|
});
|
|
58
59
|
IconButton.displayName = 'IconButton';
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
.ProgressBar {
|
|
2
|
+
--progressbar-translate-x: translateX(0%);
|
|
3
|
+
background-color: var(--color-background-action-light);
|
|
4
|
+
position: relative;
|
|
5
|
+
block-size: 4px;
|
|
6
|
+
display: block;
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.ProgressBar-ProgressLine {
|
|
11
|
+
background-color: var(--color-content-action);
|
|
12
|
+
border-radius: 3px;
|
|
13
|
+
inline-size: 100%;
|
|
14
|
+
display: block;
|
|
15
|
+
block-size: inherit;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.ProgressBar_filled .ProgressBar-ProgressLine {
|
|
19
|
+
border-radius: 0;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.ProgressBar_indefinite .ProgressBar-ProgressLine {
|
|
23
|
+
animation: progress-bar-animation 2s linear infinite;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.ProgressBar:not(.ProgressBar_indefinite) .ProgressBar-ProgressLine {
|
|
27
|
+
transition: transform var(--transition-slow);
|
|
28
|
+
transform: var(--progressbar-translate-x);
|
|
29
|
+
transform-origin: left;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@keyframes progress-bar-animation {
|
|
33
|
+
0% {
|
|
34
|
+
transform: translateX(-125%);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
100% {
|
|
38
|
+
transform: translateX(125%);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import './ProgressBar.css';
|
|
2
|
+
import { type ElementType } from 'react';
|
|
3
|
+
import { PolymorphicComponentPropsWithoutRef } from '../../utils/polymorphicComponentWithRef';
|
|
4
|
+
import { PROGRESSBAR_DEFAULT_TAG } from './constants';
|
|
5
|
+
export declare const cnProgressBar: import("@bem-react/classname").ClassNameFormatter;
|
|
6
|
+
export type ProgressBarBaseProps = {
|
|
7
|
+
/** Значение заполненной части 0-100 */
|
|
8
|
+
value?: number;
|
|
9
|
+
};
|
|
10
|
+
export type ProgressBarProps<As extends ElementType = typeof PROGRESSBAR_DEFAULT_TAG> = PolymorphicComponentPropsWithoutRef<ProgressBarBaseProps, As>;
|
|
11
|
+
export declare const ProgressBar: import("../../utils/polymorphicComponentWithRef").PolymorphicComponentWithRef<ProgressBarBaseProps, "span">;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { __assign, __rest } from "tslib";
|
|
2
|
+
import './ProgressBar.css';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { cn } from '../../utils/classname';
|
|
5
|
+
import { polymorphicComponentWithRef, } from '../../utils/polymorphicComponentWithRef';
|
|
6
|
+
import { PROGRESSBAR_DEFAULT_TAG } from './constants';
|
|
7
|
+
export var cnProgressBar = cn('ProgressBar');
|
|
8
|
+
export var ProgressBar = polymorphicComponentWithRef(function (_a, ref) {
|
|
9
|
+
var className = _a.className, _b = _a.as, Tag = _b === void 0 ? PROGRESSBAR_DEFAULT_TAG : _b, value = _a.value, other = __rest(_a, ["className", "as", "value"]);
|
|
10
|
+
var isValueSet = value || value === 0;
|
|
11
|
+
var isFilled = value === 100;
|
|
12
|
+
var setProgressLineStyles = function () {
|
|
13
|
+
if (!isValueSet)
|
|
14
|
+
return undefined;
|
|
15
|
+
var translateX = Math.max(-100, Math.min(0, (value || 0) - 100));
|
|
16
|
+
return {
|
|
17
|
+
'--progressbar-translate-x': "translateX(".concat(translateX, "%)")
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
return (React.createElement(Tag, __assign({}, (isValueSet && {
|
|
21
|
+
'aria-valuemin': 0,
|
|
22
|
+
'aria-valuemax': 100,
|
|
23
|
+
'aria-valuenow': value
|
|
24
|
+
}), { className: cnProgressBar({ filled: isFilled, indefinite: !isValueSet }, [
|
|
25
|
+
className,
|
|
26
|
+
]), role: "progressbar" }, other, { ref: ref }),
|
|
27
|
+
React.createElement("span", { className: cnProgressBar('ProgressLine'), style: setProgressLineStyles() })));
|
|
28
|
+
});
|
|
29
|
+
ProgressBar.displayName = 'ProgressBar';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const PROGRESSBAR_DEFAULT_TAG = "span";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export var PROGRESSBAR_DEFAULT_TAG = 'span';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ProgressBar';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ProgressBar';
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
.Stack_justify_spaceAround {
|
|
94
94
|
justify-content: space-around;
|
|
95
95
|
}
|
|
96
|
-
@media (width
|
|
96
|
+
@media (min-width: 0) {
|
|
97
97
|
.Stack_direction_xs_row {
|
|
98
98
|
flex-direction: row;
|
|
99
99
|
}
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
gap: var(--space-8xl);
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
|
-
@media (width
|
|
149
|
+
@media (min-width: 640px) {
|
|
150
150
|
.Stack_direction_s_row {
|
|
151
151
|
flex-direction: row;
|
|
152
152
|
}
|
|
@@ -199,7 +199,7 @@
|
|
|
199
199
|
gap: var(--space-8xl);
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
|
-
@media (width
|
|
202
|
+
@media (min-width: 1024px) {
|
|
203
203
|
.Stack_direction_m_row {
|
|
204
204
|
flex-direction: row;
|
|
205
205
|
}
|
|
@@ -252,7 +252,7 @@
|
|
|
252
252
|
gap: var(--space-8xl);
|
|
253
253
|
}
|
|
254
254
|
}
|
|
255
|
-
@media (width
|
|
255
|
+
@media (min-width: 1280px) {
|
|
256
256
|
.Stack_direction_l_row {
|
|
257
257
|
flex-direction: row;
|
|
258
258
|
}
|
|
@@ -6,6 +6,7 @@ import type { BadgeProps } from '../Badge';
|
|
|
6
6
|
import type { ButtonProps } from '../Button';
|
|
7
7
|
import type { CardProps } from '../Card';
|
|
8
8
|
import type { CheckboxProps } from '../Checkbox';
|
|
9
|
+
import type { CheckboxGroupProps } from '../CheckboxGroup';
|
|
9
10
|
import type { ChipProps } from '../Chip';
|
|
10
11
|
import type { CollapseProps } from '../Collapse';
|
|
11
12
|
import type { ContainerProps } from '../Container';
|
|
@@ -64,6 +65,7 @@ export type Theme = {
|
|
|
64
65
|
Button?: Partial<ButtonProps>;
|
|
65
66
|
Card?: Partial<CardProps>;
|
|
66
67
|
Checkbox?: Partial<CheckboxProps>;
|
|
68
|
+
CheckboxGroup?: Partial<CheckboxGroupProps>;
|
|
67
69
|
Chip?: Partial<ChipProps>;
|
|
68
70
|
Collapse?: Partial<CollapseProps>;
|
|
69
71
|
Container?: Partial<ContainerProps>;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { __read } from "tslib";
|
|
2
|
-
import { useState } from 'react';
|
|
2
|
+
import { useCallback, useState } from 'react';
|
|
3
3
|
export function useBoolean(
|
|
4
4
|
/** Значение по умолчанию */
|
|
5
5
|
defaultValue) {
|
|
6
6
|
if (defaultValue === void 0) { defaultValue = false; }
|
|
7
7
|
var _a = __read(useState(defaultValue), 2), value = _a[0], setValue = _a[1];
|
|
8
|
-
var on = function () { return setValue(true); };
|
|
9
|
-
var off = function () { return setValue(false); };
|
|
10
|
-
var toggle = function () { return setValue(function (value) { return !value; }); };
|
|
8
|
+
var on = useCallback(function () { return setValue(true); }, []);
|
|
9
|
+
var off = useCallback(function () { return setValue(false); }, []);
|
|
10
|
+
var toggle = useCallback(function () { return setValue(function (value) { return !value; }); }, []);
|
|
11
11
|
return [value, { on: on, off: off, toggle: toggle }];
|
|
12
12
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { __read } from "tslib";
|
|
2
|
-
import { useState } from 'react';
|
|
2
|
+
import { useCallback, useState } from 'react';
|
|
3
3
|
export function useCounter(_a) {
|
|
4
4
|
var _b = _a === void 0 ? {} : _a, _c = _b.initialValue, initialValue = _c === void 0 ? 0 : _c, _d = _b.step, step = _d === void 0 ? 1 : _d;
|
|
5
5
|
var _e = __read(useState(initialValue), 2), count = _e[0], setCount = _e[1];
|
|
6
|
-
var increment = function () { return setCount(function (x) { return x + step; }); };
|
|
7
|
-
var decrement = function () { return setCount(function (x) { return x - step; }); };
|
|
8
|
-
var reset = function () { return setCount(initialValue); };
|
|
6
|
+
var increment = useCallback(function () { return setCount(function (x) { return x + step; }); }, [step]);
|
|
7
|
+
var decrement = useCallback(function () { return setCount(function (x) { return x - step; }); }, [step]);
|
|
8
|
+
var reset = useCallback(function () { return setCount(initialValue); }, [initialValue]);
|
|
9
9
|
return {
|
|
10
10
|
count: count,
|
|
11
11
|
increment: increment,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __assign, __read } from "tslib";
|
|
2
|
-
import { useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
3
3
|
import { useInterval } from '../useInterval';
|
|
4
4
|
import { USE_TIMER_ERROR_EQ_TIME, USE_TIMER_ERROR_MULTIPLICITY_INTERVAL_TO_END_TIME, USE_TIMER_ERROR_MULTIPLICITY_INTERVAL_TO_START_TIME, } from './constants';
|
|
5
5
|
export function useTimer(_a) {
|
|
@@ -24,16 +24,16 @@ export function useTimer(_a) {
|
|
|
24
24
|
});
|
|
25
25
|
};
|
|
26
26
|
useInterval(timerCallback, state.isTimerRunning ? interval : null);
|
|
27
|
-
var resetTimer = function () {
|
|
27
|
+
var resetTimer = useCallback(function () {
|
|
28
28
|
setState(function () { return ({
|
|
29
29
|
isTimerRunning: false,
|
|
30
30
|
count: startTime
|
|
31
31
|
}); });
|
|
32
|
-
};
|
|
33
|
-
var pauseTimer = function () {
|
|
32
|
+
}, [startTime]);
|
|
33
|
+
var pauseTimer = useCallback(function () {
|
|
34
34
|
setState(function (state) { return (__assign(__assign({}, state), { isTimerRunning: false })); });
|
|
35
|
-
};
|
|
36
|
-
var startTimer = function () {
|
|
35
|
+
}, []);
|
|
36
|
+
var startTimer = useCallback(function () {
|
|
37
37
|
setState(function (_a) {
|
|
38
38
|
var count = _a.count;
|
|
39
39
|
return ({
|
|
@@ -43,7 +43,7 @@ export function useTimer(_a) {
|
|
|
43
43
|
isTimerRunning: startTime !== endTime
|
|
44
44
|
});
|
|
45
45
|
});
|
|
46
|
-
};
|
|
46
|
+
}, [startTime, endTime]);
|
|
47
47
|
useEffect(function () {
|
|
48
48
|
savedOnTimerEnd.current = onTimerEnd;
|
|
49
49
|
}, [onTimerEnd]);
|
package/package.json
CHANGED