@rolster/react-components 19.0.0 → 19.0.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.
- package/dist/cjs/assets/{index-QCv-Uo8R.css → index-DEldF_Je.css} +203 -8
- package/dist/cjs/index.js +264 -23
- package/dist/cjs/index.js.map +1 -1
- package/dist/es/assets/{index-QCv-Uo8R.css → index-DEldF_Je.css} +203 -8
- package/dist/es/index.js +266 -27
- package/dist/es/index.js.map +1 -1
- package/dist/esm/components/atoms/Badge/Badge.css +4 -2
- package/dist/esm/components/atoms/Badge/Badge.css.map +1 -1
- package/dist/esm/components/organisms/FieldClock/FieldClock.css +71 -0
- package/dist/esm/components/organisms/FieldClock/FieldClock.css.map +1 -0
- package/dist/esm/components/organisms/FieldClock/FieldClock.d.ts +37 -0
- package/dist/esm/components/organisms/FieldClock/FieldClock.js +52 -0
- package/dist/esm/components/organisms/FieldClock/FieldClock.js.map +1 -0
- package/dist/esm/components/organisms/FieldDate/FieldDate.css +2 -2
- package/dist/esm/components/organisms/FieldDate/FieldDate.css.map +1 -1
- package/dist/esm/components/organisms/FieldDate/FieldDate.js +5 -5
- package/dist/esm/components/organisms/FieldDate/FieldDate.js.map +1 -1
- package/dist/esm/components/organisms/FieldDateRange/FieldDateRange.css +5 -2
- package/dist/esm/components/organisms/FieldDateRange/FieldDateRange.css.map +1 -1
- package/dist/esm/components/organisms/PickerClock/PickerClock.css +116 -0
- package/dist/esm/components/organisms/PickerClock/PickerClock.css.map +1 -0
- package/dist/esm/components/organisms/PickerClock/PickerClock.d.ts +13 -0
- package/dist/esm/components/organisms/PickerClock/PickerClock.js +208 -0
- package/dist/esm/components/organisms/PickerClock/PickerClock.js.map +1 -0
- package/dist/esm/components/organisms/PickerDate/PickerDate.css +3 -2
- package/dist/esm/components/organisms/PickerDate/PickerDate.css.map +1 -1
- package/dist/esm/components/organisms/PickerDate/PickerDate.js +11 -13
- package/dist/esm/components/organisms/PickerDate/PickerDate.js.map +1 -1
- package/dist/esm/components/organisms/PickerDateRange/PickerDateRange.d.ts +1 -1
- package/dist/esm/components/organisms/PickerDateRange/PickerDateRange.js +2 -2
- package/dist/esm/components/organisms/PickerDateRange/PickerDateRange.js.map +1 -1
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/esm/components/molecules/PickerClock/PickerClock.d.ts +0 -1
- package/dist/esm/components/molecules/PickerClock/PickerClock.js +0 -5
- package/dist/esm/components/molecules/PickerClock/PickerClock.js.map +0 -1
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
.rls-badge {
|
|
2
2
|
--pvt-dimension: var(--rlc-badge-dimension, var(--rls-sizing-x12));
|
|
3
|
+
--pvt-font-color: var(--rls-app-color-050);
|
|
4
|
+
--pvt-background: var(--rls-app-color-700);
|
|
3
5
|
--pvt-contrast-font-color: var(--rls-app-color-600);
|
|
4
6
|
--pvt-contrast-background: var(--rls-app-color-200);
|
|
5
7
|
position: relative;
|
|
@@ -26,10 +28,10 @@
|
|
|
26
28
|
background: var(--pvt-contrast-background);
|
|
27
29
|
}
|
|
28
30
|
.rls-badge[rls-theme] {
|
|
31
|
+
--pvt-font-color: var(--rls-theme-color-050);
|
|
32
|
+
--pvt-background: var(--rls-theme-color-500);
|
|
29
33
|
--pvt-contrast-font-color: var(--rls-theme-color-700);
|
|
30
34
|
--pvt-contrast-background: var(--rls-theme-color-100);
|
|
31
|
-
color: var(--rls-theme-color-050);
|
|
32
|
-
background: var(--rls-theme-color-500);
|
|
33
35
|
}
|
|
34
36
|
.rls-badge > span {
|
|
35
37
|
font-size: inherit;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../../../../../src/components/atoms/Badge/Badge.scss"],"names":[],"mappings":"AAOA,WACE,mEACA,oDACA,oDAEA,kBACA,qBACA,WACA,+BACA,4BACA,iCACA,4DACA,sBACA,qEACA,yEACA,kBACA,oFAIA,+BACA,oCACA,6EAEA,qBACE,qCACA,0CAGF,sBACE,
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../../../../src/components/atoms/Badge/Badge.scss"],"names":[],"mappings":"AAOA,WACE,mEACA,2CACA,2CACA,oDACA,oDAEA,kBACA,qBACA,WACA,+BACA,4BACA,iCACA,4DACA,sBACA,qEACA,yEACA,kBACA,oFAIA,+BACA,oCACA,6EAEA,qBACE,qCACA,0CAGF,sBACE,6CACA,6CACA,sDACA,sDAGF,gBACE,kBACA,uBACA","file":"Badge.css"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
.rls-field-clock {
|
|
2
|
+
--rlc-field-box-body-padding: var(--rls-sizing-x3) var(--rls-sizing-x4);
|
|
3
|
+
--pvt-font-size: var(--rlc-field-clock-font-size, var(--rls-input-font-size));
|
|
4
|
+
--pvt-letter-spacing: var(
|
|
5
|
+
--rlc-field-clock-letter-spacing,
|
|
6
|
+
var(--rls-input-letter-spacing)
|
|
7
|
+
);
|
|
8
|
+
--pvt-action-dimension: var(
|
|
9
|
+
--rlc-field-box-action-dimension,
|
|
10
|
+
var(--rls-sizing-x12)
|
|
11
|
+
);
|
|
12
|
+
--pvt-action-background: var(
|
|
13
|
+
--rlc-field-box-action-background,
|
|
14
|
+
var(--rls-app-color-200)
|
|
15
|
+
);
|
|
16
|
+
--pvt-control-width: calc(100% - var(--pvt-action-dimension));
|
|
17
|
+
position: relative;
|
|
18
|
+
width: 100%;
|
|
19
|
+
box-sizing: border-box;
|
|
20
|
+
}
|
|
21
|
+
.rls-field-clock .rls-field-box--readonly {
|
|
22
|
+
--pvt-control-width: 100%;
|
|
23
|
+
}
|
|
24
|
+
.rls-field-clock .rls-field-box__body {
|
|
25
|
+
column-gap: var(--rls-sizing-x2);
|
|
26
|
+
}
|
|
27
|
+
.rls-field-clock__control {
|
|
28
|
+
position: relative;
|
|
29
|
+
width: var(--pvt-control-width);
|
|
30
|
+
height: var(--rls-sizing-x12);
|
|
31
|
+
line-height: var(--rls-sizing-x12);
|
|
32
|
+
padding: 0rem;
|
|
33
|
+
cursor: default;
|
|
34
|
+
border: none;
|
|
35
|
+
outline: none;
|
|
36
|
+
background: rgba(0, 0, 0, 0);
|
|
37
|
+
color: var(--rls-app-color-900);
|
|
38
|
+
font-weight: var(--rls-font-weight-medium);
|
|
39
|
+
font-size: var(--pvt-font-size);
|
|
40
|
+
letter-spacing: var(--pvt-letter-spacing);
|
|
41
|
+
}
|
|
42
|
+
.rls-field-clock__control::placeholder {
|
|
43
|
+
color: var(--rls-app-color-400);
|
|
44
|
+
}
|
|
45
|
+
.rls-field-clock__control:disabled {
|
|
46
|
+
opacity: 0.5;
|
|
47
|
+
cursor: not-allowed;
|
|
48
|
+
}
|
|
49
|
+
.rls-field-clock__action {
|
|
50
|
+
--rlc-icon-dimension: calc(var(--pvt-action-dimension) - 2rem);
|
|
51
|
+
width: var(--pvt-action-dimension);
|
|
52
|
+
height: var(--pvt-action-dimension);
|
|
53
|
+
color: var(--rls-app-color-600);
|
|
54
|
+
padding: 0rem;
|
|
55
|
+
outline: none;
|
|
56
|
+
border-radius: var(--rlc-field-box-action-radius, var(--rls-sizing-x2));
|
|
57
|
+
background: var(--pvt-action-background);
|
|
58
|
+
}
|
|
59
|
+
.rls-field-clock__action:disabled {
|
|
60
|
+
opacity: 0.5;
|
|
61
|
+
background: rgba(0, 0, 0, 0);
|
|
62
|
+
}
|
|
63
|
+
.rls-field-clock__action .rls-icon {
|
|
64
|
+
margin: 1rem;
|
|
65
|
+
}
|
|
66
|
+
.rls-field-clock-modal {
|
|
67
|
+
--rlc-modal-background: transparent;
|
|
68
|
+
--rlc-modal-max-width: 150rem;
|
|
69
|
+
--rlc-picker-clock-radius: var(--rls-sizing-x4);
|
|
70
|
+
--rlc-picker-clock-background: var(--rls-app-color-050);
|
|
71
|
+
} /*# sourceMappingURL=FieldClock.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../../../../src/components/organisms/FieldClock/FieldClock.scss"],"names":[],"mappings":"AAOA,iBACE,wEAEA,8EAEA,+FAKA,uFAKA,4FAKA,8DAEA,kBACA,WACA,sBAEA,0CACE,0BAGF,sCACE,gCAGF,0BACE,kBACA,+BACA,6BACA,kCACA,aACA,eACA,YACA,aACA,yBACA,+BACA,0CACA,+BACA,yCAEA,uCACE,+BAGF,mCACE,WACA,mBAIJ,yBACE,+DAEA,kCACA,mCACA,+BACA,aACA,aACA,uEACA,wCAEA,kCACE,WACA,yBAGF,mCACE,YAKN,uBACE,oCACA,8BACA,gDACA","file":"FieldClock.css"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Time } from '@rolster/dates';
|
|
2
|
+
import { ReactControl } from '@rolster/react-forms';
|
|
3
|
+
import { ReactNode } from 'react';
|
|
4
|
+
import { RlsComponent } from '../../definitions';
|
|
5
|
+
import './FieldClock.css';
|
|
6
|
+
interface FieldClockProps extends RlsComponent {
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
formControl?: ReactControl<HTMLElement, Time> | ReactControl<HTMLElement, Time | undefined>;
|
|
9
|
+
msgErrorDisabled?: boolean;
|
|
10
|
+
onValue?: ((value?: Time) => void) | ((value: Time) => void);
|
|
11
|
+
placeholder?: string;
|
|
12
|
+
readOnly?: boolean;
|
|
13
|
+
value?: Time;
|
|
14
|
+
time?: Time;
|
|
15
|
+
}
|
|
16
|
+
interface FieldClockDefinedProps extends FieldClockProps {
|
|
17
|
+
formControl: ReactControl<HTMLElement, Time>;
|
|
18
|
+
value: Time;
|
|
19
|
+
onValue?: (value: Time) => void;
|
|
20
|
+
}
|
|
21
|
+
interface FieldClockUndefinedProps extends FieldClockProps {
|
|
22
|
+
formControl: ReactControl<HTMLElement, Time | undefined>;
|
|
23
|
+
value: undefined;
|
|
24
|
+
onValue?: (value?: Time) => void;
|
|
25
|
+
}
|
|
26
|
+
interface FieldClockVoidProps extends Omit<FieldClockProps, 'value'> {
|
|
27
|
+
formControl: ReactControl<HTMLElement, Time | undefined>;
|
|
28
|
+
onValue?: (value?: Time) => void;
|
|
29
|
+
}
|
|
30
|
+
interface FieldClockEmptyProps extends Omit<FieldClockProps, 'formControl' | 'value'> {
|
|
31
|
+
onValue?: (value?: Time) => void;
|
|
32
|
+
}
|
|
33
|
+
export declare function RlsFieldClock(props: FieldClockDefinedProps): ReactNode;
|
|
34
|
+
export declare function RlsFieldClock(props: FieldClockUndefinedProps): ReactNode;
|
|
35
|
+
export declare function RlsFieldClock(props: FieldClockVoidProps): ReactNode;
|
|
36
|
+
export declare function RlsFieldClock(props: FieldClockEmptyProps): ReactNode;
|
|
37
|
+
export {};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { PickerListenerEvent } from '@rolster/components';
|
|
3
|
+
import { useCallback, useMemo, useState } from 'react';
|
|
4
|
+
import { renderClassStatus } from '../../../helpers/css';
|
|
5
|
+
import { RlsIcon } from '../../atoms/Icon/Icon';
|
|
6
|
+
import { RlsMessageFormError } from '../../molecules/MessageFormError/MessageFormError';
|
|
7
|
+
import { RlsModal } from '../Modal/Modal';
|
|
8
|
+
import { RlsPickerClock } from '../PickerClock/PickerClock';
|
|
9
|
+
import './FieldClock.css';
|
|
10
|
+
export function RlsFieldClock({ children, disabled, formControl, identifier, msgErrorDisabled, onValue, placeholder, readOnly, rlsTheme, time, value: valueInitial }) {
|
|
11
|
+
const [value, setValue] = useState(formControl?.value ?? valueInitial);
|
|
12
|
+
const [modalIsVisible, setModalIsVisible] = useState(false);
|
|
13
|
+
const _disabled = useMemo(() => {
|
|
14
|
+
return formControl?.disabled || disabled;
|
|
15
|
+
}, [formControl?.disabled, disabled]);
|
|
16
|
+
const className = useMemo(() => {
|
|
17
|
+
return renderClassStatus('rls-field-box', {
|
|
18
|
+
disabled: _disabled,
|
|
19
|
+
readonly: readOnly
|
|
20
|
+
});
|
|
21
|
+
}, [_disabled, readOnly]);
|
|
22
|
+
const { icon, valueInput } = useMemo(() => {
|
|
23
|
+
return {
|
|
24
|
+
icon: value ? 'trash-2' : 'timer',
|
|
25
|
+
valueInput: value?.normalizeMeridiemFormat || ''
|
|
26
|
+
};
|
|
27
|
+
}, [value]);
|
|
28
|
+
const onClickInput = useCallback(() => {
|
|
29
|
+
!readOnly && setModalIsVisible(true);
|
|
30
|
+
}, [readOnly]);
|
|
31
|
+
const onChange = useCallback((value) => {
|
|
32
|
+
setValue(value);
|
|
33
|
+
onValue?.(value);
|
|
34
|
+
}, [onValue]);
|
|
35
|
+
const onClickAction = useCallback(() => {
|
|
36
|
+
if (value) {
|
|
37
|
+
formControl?.setValue(valueInitial);
|
|
38
|
+
formControl?.touch();
|
|
39
|
+
onChange(valueInitial);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
setModalIsVisible(true);
|
|
43
|
+
}
|
|
44
|
+
}, [value, formControl, valueInitial, onChange]);
|
|
45
|
+
const onListener = useCallback(({ event, value }) => {
|
|
46
|
+
event !== PickerListenerEvent.Cancel && onChange(value);
|
|
47
|
+
formControl?.touch();
|
|
48
|
+
setModalIsVisible(false);
|
|
49
|
+
}, [formControl, onChange]);
|
|
50
|
+
return (_jsxs("div", { id: identifier, className: "rls-field-date", "rls-theme": rlsTheme, children: [_jsxs("div", { className: className, children: [children && _jsx("span", { className: "rls-field-box__label", children: children }), _jsx("div", { className: "rls-field-box__component", children: _jsxs("div", { className: "rls-field-box__body", children: [_jsx("input", { className: "rls-field-date__control", type: "text", value: valueInput, readOnly: true, placeholder: placeholder, onClick: onClickInput, disabled: _disabled }), !readOnly && (_jsx("button", { className: "rls-field-date__action", onClick: onClickAction, disabled: _disabled, children: _jsx(RlsIcon, { value: icon }) }))] }) }), !msgErrorDisabled && (_jsx(RlsMessageFormError, { className: "rls-field-box__error", formControl: formControl }))] }), _jsx(RlsModal, { className: "rls-field-clock-modal", visible: modalIsVisible, rlsTheme: rlsTheme, children: _jsx(RlsPickerClock, { formControl: formControl, time: time, disabled: _disabled, onListener: onListener }) })] }));
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=FieldClock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldClock.js","sourceRoot":"","sources":["../../../../../src/components/organisms/FieldClock/FieldClock.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
.rls-field-date {
|
|
2
2
|
--rlc-field-box-body-padding: var(--rls-sizing-x3) var(--rls-sizing-x4);
|
|
3
|
-
--pvt-font-size: var(--rlc-
|
|
3
|
+
--pvt-font-size: var(--rlc-field-date-font-size, var(--rls-input-font-size));
|
|
4
4
|
--pvt-letter-spacing: var(
|
|
5
|
-
--rlc-
|
|
5
|
+
--rlc-field-date-letter-spacing,
|
|
6
6
|
var(--rls-input-letter-spacing)
|
|
7
7
|
);
|
|
8
8
|
--pvt-action-dimension: var(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../../../../../src/components/organisms/FieldDate/FieldDate.scss"],"names":[],"mappings":"AAOA,gBACE,wEAEA,
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../../../../src/components/organisms/FieldDate/FieldDate.scss"],"names":[],"mappings":"AAOA,gBACE,wEAEA,6EAEA,8FAKA,uFAKA,4FAKA,8DAEA,kBACA,WACA,sBAEA,yCACE,0BAGF,qCACE,gCAGF,yBACE,kBACA,+BACA,6BACA,kCACA,aACA,eACA,YACA,aACA,yBACA,+BACA,0CACA,+BACA,yCAEA,sCACE,+BAGF,kCACE,WACA,mBAIJ,wBACE,+DAEA,kCACA,mCACA,+BACA,aACA,aACA,uEACA,wCAEA,iCACE,WACA,yBAGF,kCACE,YAKN,sBACE,oCACA,8BACA,+CACA","file":"FieldDate.css"}
|
|
@@ -9,9 +9,9 @@ import { RlsMessageFormError } from '../../molecules/MessageFormError/MessageFor
|
|
|
9
9
|
import { RlsModal } from '../Modal/Modal';
|
|
10
10
|
import { RlsPickerDate } from '../PickerDate/PickerDate';
|
|
11
11
|
import './FieldDate.css';
|
|
12
|
-
export function RlsFieldDate({ children, date, disabled, formControl, format, identifier, maxDate, minDate, msgErrorDisabled, onValue, placeholder, readOnly, rlsTheme, value:
|
|
12
|
+
export function RlsFieldDate({ children, date, disabled, formControl, format, identifier, maxDate, minDate, msgErrorDisabled, onValue, placeholder, readOnly, rlsTheme, value: valueInitial }) {
|
|
13
13
|
const today = useRef(new Date()); // Initial current date in component
|
|
14
|
-
const [value, setValue] = useState(formControl?.value ??
|
|
14
|
+
const [value, setValue] = useState(formControl?.value ?? valueInitial);
|
|
15
15
|
const [modalIsVisible, setModalIsVisible] = useState(false);
|
|
16
16
|
const _disabled = useMemo(() => {
|
|
17
17
|
return formControl?.disabled || disabled;
|
|
@@ -46,14 +46,14 @@ export function RlsFieldDate({ children, date, disabled, formControl, format, id
|
|
|
46
46
|
}, [onValue]);
|
|
47
47
|
const onClickAction = useCallback(() => {
|
|
48
48
|
if (value) {
|
|
49
|
-
formControl?.setValue(
|
|
49
|
+
formControl?.setValue(valueInitial);
|
|
50
50
|
formControl?.touch();
|
|
51
|
-
onChange(
|
|
51
|
+
onChange(valueInitial);
|
|
52
52
|
}
|
|
53
53
|
else {
|
|
54
54
|
setModalIsVisible(true);
|
|
55
55
|
}
|
|
56
|
-
}, [value, formControl,
|
|
56
|
+
}, [value, formControl, valueInitial, onChange]);
|
|
57
57
|
const onListener = useCallback(({ event, value }) => {
|
|
58
58
|
event !== PickerListenerEvent.Cancel && onChange(value);
|
|
59
59
|
formControl?.touch();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldDate.js","sourceRoot":"","sources":["../../../../../src/components/organisms/FieldDate/FieldDate.tsx"],"names":[],"mappings":";AAAA,OAAO,EAEL,mBAAmB,EACnB,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAEL,WAAW,EACX,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,EACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mDAAmD,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,iBAAiB,CAAC;AA4CzB,MAAM,UAAU,YAAY,CAAC,EAC3B,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,MAAM,EACN,UAAU,EACV,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,OAAO,EACP,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"FieldDate.js","sourceRoot":"","sources":["../../../../../src/components/organisms/FieldDate/FieldDate.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
.rls-field-date-range {
|
|
2
2
|
--rlc-field-box-body-padding: var(--rls-sizing-x3) var(--rls-sizing-x4);
|
|
3
|
-
--pvt-font-size: var(
|
|
3
|
+
--pvt-font-size: var(
|
|
4
|
+
--rlc-field-date-range-font-size,
|
|
5
|
+
var(--rls-input-font-size)
|
|
6
|
+
);
|
|
4
7
|
--pvt-letter-spacing: var(
|
|
5
|
-
--rlc-
|
|
8
|
+
--rlc-field-date-range-letter-spacing,
|
|
6
9
|
var(--rls-input-letter-spacing)
|
|
7
10
|
);
|
|
8
11
|
--pvt-action-dimension: var(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../../../../../src/components/organisms/FieldDateRange/FieldDateRange.scss"],"names":[],"mappings":"AAOA,sBACE,wEAEA,
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../../../../src/components/organisms/FieldDateRange/FieldDateRange.scss"],"names":[],"mappings":"AAOA,sBACE,wEAEA,qFAKA,oGAKA,uFAKA,4FAKA,8DAEA,kBACA,WACA,sBAEA,+CACE,0BAGF,+BACE,kBACA,+BACA,6BACA,kCACA,aACA,eACA,YACA,aACA,yBACA,+BACA,0CACA,+BACA,yCAEA,4CACE,+BAGF,wCACE,WACA,mBAIJ,8BACE,+DAEA,kCACA,mCACA,+BACA,aACA,aACA,uEACA,wCAEA,uCACE,WACA,yBAGF,wCACE,YAKN,4BACE,oCACA,8BACA,qDACA","file":"FieldDateRange.css"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
.rls-picker-clock {
|
|
2
|
+
position: relative;
|
|
3
|
+
display: flex;
|
|
4
|
+
width: 150rem;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
row-gap: var(--rls-sizing-x8);
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
user-select: none;
|
|
9
|
+
padding: var(--rlc-picker-clock-padding, 0rem);
|
|
10
|
+
box-sizing: border-box;
|
|
11
|
+
border-radius: var(--rlc-picker-clock-radius, 0rem);
|
|
12
|
+
background: var(--rlc-picker-clock-background, transparent);
|
|
13
|
+
}
|
|
14
|
+
.rls-picker-clock__header {
|
|
15
|
+
display: flex;
|
|
16
|
+
column-gap: var(--rls-sizing-x8);
|
|
17
|
+
padding: var(--rls-sizing-x4) var(--rls-sizing-x4) 0rem var(--rls-sizing-x4);
|
|
18
|
+
box-sizing: border-box;
|
|
19
|
+
justify-content: center;
|
|
20
|
+
}
|
|
21
|
+
.rls-picker-clock__title {
|
|
22
|
+
display: flex;
|
|
23
|
+
width: auto;
|
|
24
|
+
column-gap: var(--rls-sizing-x2);
|
|
25
|
+
align-items: center;
|
|
26
|
+
}
|
|
27
|
+
.rls-picker-clock__title__value {
|
|
28
|
+
width: 16rem;
|
|
29
|
+
text-align: center;
|
|
30
|
+
font-size: var(--rls-heading4-font-size);
|
|
31
|
+
font-weight: var(--rls-font-weight-semibold);
|
|
32
|
+
color: var(--rls-app-color-600);
|
|
33
|
+
}
|
|
34
|
+
.rls-picker-clock__title__value--active {
|
|
35
|
+
color: var(--rls-theme-color-500);
|
|
36
|
+
}
|
|
37
|
+
.rls-picker-clock__title__value:hover {
|
|
38
|
+
color: var(--rls-app-color-900);
|
|
39
|
+
}
|
|
40
|
+
.rls-picker-clock__title__separator {
|
|
41
|
+
font-size: var(--rls-title-font-size);
|
|
42
|
+
font-weight: var(--rls-font-weight-semibold);
|
|
43
|
+
}
|
|
44
|
+
.rls-picker-clock__zone {
|
|
45
|
+
display: flex;
|
|
46
|
+
width: auto;
|
|
47
|
+
column-gap: var(--rls-sizing-x4);
|
|
48
|
+
align-items: center;
|
|
49
|
+
}
|
|
50
|
+
.rls-picker-clock__zone__value {
|
|
51
|
+
width: 18rem;
|
|
52
|
+
text-align: center;
|
|
53
|
+
padding: var(--rls-sizing-x1) var(--rls-sizing-x2);
|
|
54
|
+
border-radius: var(--rls-sizing-x2);
|
|
55
|
+
font-size: var(--rls-body-font-size);
|
|
56
|
+
font-weight: var(--rls-font-weight-semibold);
|
|
57
|
+
background: var(--rls-app-color-200);
|
|
58
|
+
}
|
|
59
|
+
.rls-picker-clock__zone__value--active {
|
|
60
|
+
background: var(--rls-theme-gradient-500);
|
|
61
|
+
color: var(--rls-theme-color-050);
|
|
62
|
+
}
|
|
63
|
+
.rls-picker-clock__body {
|
|
64
|
+
display: flex;
|
|
65
|
+
justify-content: center;
|
|
66
|
+
}
|
|
67
|
+
.rls-picker-clock__plate {
|
|
68
|
+
width: 120rem;
|
|
69
|
+
height: 120rem;
|
|
70
|
+
border-radius: 50%;
|
|
71
|
+
border: var(--rls-app-border-2-200);
|
|
72
|
+
box-sizing: border-box;
|
|
73
|
+
overflow: hidden;
|
|
74
|
+
}
|
|
75
|
+
.rls-picker-clock__canvas {
|
|
76
|
+
position: absolute;
|
|
77
|
+
}
|
|
78
|
+
.rls-picker-clock__canvas__line {
|
|
79
|
+
stroke: var(--rls-theme-color-500);
|
|
80
|
+
stroke-width: var(--rls-sizing-x1);
|
|
81
|
+
}
|
|
82
|
+
.rls-picker-clock__canvas__center {
|
|
83
|
+
fill: var(--rls-theme-color-500);
|
|
84
|
+
}
|
|
85
|
+
.rls-picker-clock__canvas__indicator {
|
|
86
|
+
fill: var(--rls-theme-color-300);
|
|
87
|
+
}
|
|
88
|
+
.rls-picker-clock__canvas__point {
|
|
89
|
+
fill: var(--rls-theme-color-050);
|
|
90
|
+
}
|
|
91
|
+
.rls-picker-clock__tick {
|
|
92
|
+
position: absolute;
|
|
93
|
+
width: var(--rls-sizing-x14);
|
|
94
|
+
height: var(--rls-sizing-x14);
|
|
95
|
+
line-height: var(--rls-sizing-x14);
|
|
96
|
+
text-align: center;
|
|
97
|
+
cursor: pointer;
|
|
98
|
+
font-size: var(--rls-paragraph-font-size);
|
|
99
|
+
font-weight: var(--rls-font-weight-semibold);
|
|
100
|
+
}
|
|
101
|
+
.rls-picker-clock__footer {
|
|
102
|
+
--rlc-button-width: 100%;
|
|
103
|
+
display: flex;
|
|
104
|
+
column-gap: var(--rls-sizing-x6);
|
|
105
|
+
align-items: center;
|
|
106
|
+
padding: var(--rls-sizing-x4) var(--rls-sizing-x8) var(--rls-sizing-x6)
|
|
107
|
+
var(--rls-sizing-x8);
|
|
108
|
+
overflow: hidden;
|
|
109
|
+
box-sizing: border-box;
|
|
110
|
+
}
|
|
111
|
+
.rls-picker-clock__footer--today {
|
|
112
|
+
display: flex;
|
|
113
|
+
width: var(--rls-sizing-x16);
|
|
114
|
+
align-items: center;
|
|
115
|
+
justify-content: center;
|
|
116
|
+
} /*# sourceMappingURL=PickerClock.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../../../../src/components/organisms/PickerClock/PickerClock.scss"],"names":[],"mappings":"AAOA,kBACE,kBACA,aACA,aACA,sBACA,6BACA,gBACA,iBACA,8CACA,sBACA,mDACA,2DAEA,0BACE,aACA,gCACA,4EACA,sBACA,uBAGF,yBACE,aACA,WACA,gCACA,mBAEA,gCACE,YACA,kBACA,wCACA,4CACA,+BAEA,wCACE,iCAGF,sCACE,+BAIJ,oCACE,qCACA,4CAIJ,wBACE,aACA,WACA,gCACA,mBAEA,+BACE,YACA,kBACA,kDACA,mCACA,oCACA,4CACA,oCAEA,uCACE,yCACA,iCAKN,wBACE,aACA,uBAGF,yBACE,aACA,cACA,kBACA,mCACA,sBACA,gBAGF,0BACE,kBAEA,gCACE,kCACA,kCAGF,kCACE,gCAGF,qCACE,gCAGF,iCACE,gCAIJ,wBACE,kBACA,4BACA,6BACA,kCACA,kBACA,eACA,yCACA,4CAGF,0BACE,yBAEA,aACA,gCACA,mBACA,4FAEA,gBACA,sBAEA,iCACE,aACA,4BACA,mBACA","file":"PickerClock.css"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { PickerListener } from '@rolster/components';
|
|
2
|
+
import { Time } from '@rolster/dates';
|
|
3
|
+
import { ReactControl } from '@rolster/react-forms';
|
|
4
|
+
import { RlsComponent } from '../../definitions';
|
|
5
|
+
import './PickerClock.css';
|
|
6
|
+
interface PickerClockProps extends RlsComponent {
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
formControl?: ReactControl<HTMLElement, Time> | ReactControl<HTMLElement, Time | undefined>;
|
|
9
|
+
onListener?: (listener: PickerListener<Time>) => void;
|
|
10
|
+
time?: Time;
|
|
11
|
+
}
|
|
12
|
+
export declare function RlsPickerClock({ formControl, onListener, rlsTheme, time }: PickerClockProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { PickerListenerEvent } from '@rolster/components';
|
|
3
|
+
import { Time } from '@rolster/dates';
|
|
4
|
+
import { i18nSubscribe } from '@rolster/i18n';
|
|
5
|
+
import { useCallback, useEffect, useEffectEvent, useMemo, useRef, useState } from 'react';
|
|
6
|
+
import { renderClassStatus } from '../../../helpers/css';
|
|
7
|
+
import { reactI18n } from '../../../i18n';
|
|
8
|
+
import { RlsButton } from '../../atoms/Button/Button';
|
|
9
|
+
import { RlsButtonAction } from '../../atoms/ButtonAction/ButtonAction';
|
|
10
|
+
import './PickerClock.css';
|
|
11
|
+
function formatTime(value) {
|
|
12
|
+
return String(value).padStart(2, '0');
|
|
13
|
+
}
|
|
14
|
+
const CLOCK_VALUES = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
|
|
15
|
+
const RADIUS = 48;
|
|
16
|
+
const DIAL_RADIUS = 60;
|
|
17
|
+
const TICK_RADIUS = 7;
|
|
18
|
+
function RlsPickerClockTick({ onValue, selectionIsHours, value }) {
|
|
19
|
+
const styleTick = useMemo(() => {
|
|
20
|
+
const radian = (value / 6) * Math.PI;
|
|
21
|
+
const x = Math.sin(radian) * RADIUS;
|
|
22
|
+
const y = Math.cos(radian) * RADIUS;
|
|
23
|
+
return {
|
|
24
|
+
left: `${DIAL_RADIUS + x - TICK_RADIUS - 1}rem`,
|
|
25
|
+
top: `${DIAL_RADIUS - y - TICK_RADIUS - 1}rem`
|
|
26
|
+
};
|
|
27
|
+
}, []);
|
|
28
|
+
const label = useMemo(() => {
|
|
29
|
+
if (selectionIsHours) {
|
|
30
|
+
return formatTime(value);
|
|
31
|
+
}
|
|
32
|
+
if (value === 12) {
|
|
33
|
+
return formatTime(0);
|
|
34
|
+
}
|
|
35
|
+
return formatTime(value * 5);
|
|
36
|
+
}, [selectionIsHours]);
|
|
37
|
+
const onClick = useCallback((event) => {
|
|
38
|
+
event.preventDefault();
|
|
39
|
+
onValue(value);
|
|
40
|
+
}, [onValue]);
|
|
41
|
+
return (_jsx("div", { className: "rls-picker-clock__tick", style: styleTick, onClick: onClick, children: label }));
|
|
42
|
+
}
|
|
43
|
+
export function RlsPickerClock({ formControl, onListener, rlsTheme, time }) {
|
|
44
|
+
const timeInitial = useMemo(() => {
|
|
45
|
+
return formControl?.value ?? time ?? Time.now();
|
|
46
|
+
}, [formControl?.value, time]);
|
|
47
|
+
const plateElement = useRef(null);
|
|
48
|
+
const lineElement = useRef(null);
|
|
49
|
+
const centerElement = useRef(null);
|
|
50
|
+
const indicatorElement = useRef(null);
|
|
51
|
+
const pointElement = useRef(null);
|
|
52
|
+
const [labels, setLabels] = useState({
|
|
53
|
+
timeActionCancel: reactI18n('dateActionCancel'),
|
|
54
|
+
timeActionSelect: reactI18n('dateActionSelect')
|
|
55
|
+
});
|
|
56
|
+
const [zoneIsPM, setZoneIsPM] = useState(timeInitial.hour >= 12);
|
|
57
|
+
const [hour, setHour] = useState(zoneIsPM ? timeInitial.hour - 12 : timeInitial.hour);
|
|
58
|
+
const [minute, setMinute] = useState(timeInitial.minute);
|
|
59
|
+
const [selectionIsHours, setSelectionIsHours] = useState(true);
|
|
60
|
+
const selectionIsActive = useRef(false);
|
|
61
|
+
const radianUnit = useMemo(() => {
|
|
62
|
+
return Math.PI / (selectionIsHours ? 6 : 30);
|
|
63
|
+
}, [selectionIsHours]);
|
|
64
|
+
const hourFormat = useMemo(() => {
|
|
65
|
+
return formatTime(hour === 0 ? 12 : hour);
|
|
66
|
+
}, [hour]);
|
|
67
|
+
const minuteFormat = useMemo(() => {
|
|
68
|
+
return formatTime(minute);
|
|
69
|
+
}, [minute]);
|
|
70
|
+
const classNameHour = useMemo(() => {
|
|
71
|
+
return renderClassStatus('rls-picker-clock__title__value', {
|
|
72
|
+
active: selectionIsHours
|
|
73
|
+
});
|
|
74
|
+
}, [selectionIsHours]);
|
|
75
|
+
const classNameMinute = useMemo(() => {
|
|
76
|
+
return renderClassStatus('rls-picker-clock__title__value', {
|
|
77
|
+
active: !selectionIsHours
|
|
78
|
+
});
|
|
79
|
+
}, [selectionIsHours]);
|
|
80
|
+
const classNameAM = useMemo(() => {
|
|
81
|
+
return renderClassStatus('rls-picker-clock__zone__value', {
|
|
82
|
+
active: !zoneIsPM
|
|
83
|
+
});
|
|
84
|
+
}, [zoneIsPM]);
|
|
85
|
+
const classNamePM = useMemo(() => {
|
|
86
|
+
return renderClassStatus('rls-picker-clock__zone__value', {
|
|
87
|
+
active: zoneIsPM
|
|
88
|
+
});
|
|
89
|
+
}, [zoneIsPM]);
|
|
90
|
+
const refreshClockHour = useEffectEvent(() => {
|
|
91
|
+
refreshClock(hour > 12 ? hour - 12 : hour);
|
|
92
|
+
});
|
|
93
|
+
const refreshClockMinute = useEffectEvent(() => {
|
|
94
|
+
refreshClock(minute);
|
|
95
|
+
});
|
|
96
|
+
useEffect(() => {
|
|
97
|
+
return i18nSubscribe(() => {
|
|
98
|
+
setLabels({
|
|
99
|
+
timeActionCancel: reactI18n('dateActionCancel'),
|
|
100
|
+
timeActionSelect: reactI18n('dateActionSelect')
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
}, []);
|
|
104
|
+
useEffect(() => {
|
|
105
|
+
selectionIsHours ? refreshClockHour() : refreshClockMinute();
|
|
106
|
+
}, [selectionIsHours]);
|
|
107
|
+
const refreshComponent = useCallback((clientX, clientY) => {
|
|
108
|
+
const rectangle = plateElement.current.getBoundingClientRect();
|
|
109
|
+
const centerX = rectangle.left + rectangle.width / 2;
|
|
110
|
+
const centerY = rectangle.top + rectangle.height / 2;
|
|
111
|
+
const positionX = clientX - centerX;
|
|
112
|
+
const positionY = clientY - centerY;
|
|
113
|
+
const angle = Math.atan2(-positionX, positionY) + Math.PI;
|
|
114
|
+
const value = Math.round(angle / radianUnit);
|
|
115
|
+
refreshClock(value);
|
|
116
|
+
selectionIsHours ? setHour(value === 0 ? 12 : value) : setMinute(value);
|
|
117
|
+
}, [selectionIsHours, radianUnit]);
|
|
118
|
+
const refreshClock = useCallback((value) => {
|
|
119
|
+
const angle = value * radianUnit;
|
|
120
|
+
const x2 = Math.sin(angle) * (RADIUS - TICK_RADIUS);
|
|
121
|
+
const y2 = -Math.cos(angle) * (RADIUS - TICK_RADIUS);
|
|
122
|
+
const cx = Math.sin(angle) * RADIUS;
|
|
123
|
+
const cy = -Math.cos(angle) * RADIUS;
|
|
124
|
+
lineElement.current.setAttribute('x2', `${x2 - 1}rem`);
|
|
125
|
+
lineElement.current.setAttribute('y2', `${y2 - 1}rem`);
|
|
126
|
+
indicatorElement.current.setAttribute('cx', `${cx - 1}rem`);
|
|
127
|
+
indicatorElement.current.setAttribute('cy', `${cy - 1}rem`);
|
|
128
|
+
pointElement.current.setAttribute('cx', `${cx - 1}rem`);
|
|
129
|
+
pointElement.current.setAttribute('cy', `${cy - 1}rem`);
|
|
130
|
+
pointElement.current.style.visibility =
|
|
131
|
+
selectionIsHours || value % 5 === 0 ? 'hidden' : 'visible';
|
|
132
|
+
}, [selectionIsHours, radianUnit]);
|
|
133
|
+
const onClickHour = useCallback(() => {
|
|
134
|
+
setSelectionIsHours(true);
|
|
135
|
+
}, []);
|
|
136
|
+
const onClickMinute = useCallback(() => {
|
|
137
|
+
setSelectionIsHours(false);
|
|
138
|
+
}, []);
|
|
139
|
+
const onClickAM = useCallback(() => {
|
|
140
|
+
setZoneIsPM(false);
|
|
141
|
+
}, []);
|
|
142
|
+
const onClickPM = useCallback(() => {
|
|
143
|
+
setZoneIsPM(true);
|
|
144
|
+
}, []);
|
|
145
|
+
const onActiveSelection = useCallback(() => {
|
|
146
|
+
selectionIsActive.current = true;
|
|
147
|
+
}, []);
|
|
148
|
+
const onMouseSelection = useCallback((event) => {
|
|
149
|
+
if (selectionIsActive.current) {
|
|
150
|
+
event.preventDefault();
|
|
151
|
+
refreshComponent(event.clientX, event.clientY);
|
|
152
|
+
}
|
|
153
|
+
}, [refreshComponent]);
|
|
154
|
+
const onTouchSelection = useCallback((event) => {
|
|
155
|
+
const touch = event.touches.item(0);
|
|
156
|
+
if (selectionIsActive.current && touch) {
|
|
157
|
+
refreshComponent(touch.clientX, touch.clientY);
|
|
158
|
+
}
|
|
159
|
+
}, [refreshComponent]);
|
|
160
|
+
const onInactiveSelection = useCallback(() => {
|
|
161
|
+
selectionIsActive.current = false;
|
|
162
|
+
}, []);
|
|
163
|
+
const onClickValue = useCallback((value) => {
|
|
164
|
+
if (selectionIsHours) {
|
|
165
|
+
setHour(value);
|
|
166
|
+
refreshClock(value);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
const minute = value === 12 ? 0 : value * 5;
|
|
170
|
+
setMinute(minute);
|
|
171
|
+
refreshClock(minute);
|
|
172
|
+
}
|
|
173
|
+
}, [selectionIsHours]);
|
|
174
|
+
const onCancel = useCallback(() => {
|
|
175
|
+
onListener?.({ event: PickerListenerEvent.Cancel });
|
|
176
|
+
}, [onListener]);
|
|
177
|
+
const onCurrentTime = useCallback(() => {
|
|
178
|
+
const currentTime = Time.now();
|
|
179
|
+
formControl?.setValue(currentTime);
|
|
180
|
+
setHour(currentTime.hour);
|
|
181
|
+
setMinute(currentTime.minute);
|
|
182
|
+
onListener?.({
|
|
183
|
+
event: PickerListenerEvent.Select,
|
|
184
|
+
value: currentTime
|
|
185
|
+
});
|
|
186
|
+
}, [formControl, onListener]);
|
|
187
|
+
const onSelect = useCallback(() => {
|
|
188
|
+
const hourValue = zoneIsPM
|
|
189
|
+
? hour !== 12
|
|
190
|
+
? hour + 12
|
|
191
|
+
: 12
|
|
192
|
+
: hour === 12
|
|
193
|
+
? 0
|
|
194
|
+
: hour;
|
|
195
|
+
const timeValue = new Time(hourValue, minute);
|
|
196
|
+
formControl?.setValue(timeValue);
|
|
197
|
+
onListener?.({
|
|
198
|
+
event: PickerListenerEvent.Select,
|
|
199
|
+
value: timeValue
|
|
200
|
+
});
|
|
201
|
+
}, [formControl, hour, minute, zoneIsPM, onListener]);
|
|
202
|
+
return (_jsxs("div", { className: "rls-picker-clock", "rls-theme": rlsTheme, children: [_jsxs("div", { className: "rls-picker-clock__header", children: [_jsxs("div", { className: "rls-picker-clock__title", children: [_jsx("span", { className: classNameHour, onClick: onClickHour, children: hourFormat }), _jsx("span", { className: "rls-picker-clock__title__separator", children: ":" }), _jsx("span", { className: classNameMinute, onClick: onClickMinute, children: minuteFormat })] }), _jsxs("div", { className: "rls-picker-clock__zone", children: [_jsx("span", { className: classNameAM, onClick: onClickAM, children: "AM" }), _jsx("span", { className: classNamePM, onClick: onClickPM, children: "PM" })] })] }), _jsx("div", { className: "rls-picker-clock__body", children: _jsxs("div", { className: "rls-picker-clock__plate", ref: plateElement, onMouseDown: onActiveSelection, onMouseMove: onMouseSelection, onMouseUp: onInactiveSelection, onMouseLeave: onInactiveSelection, onTouchStart: onActiveSelection, onTouchMove: onTouchSelection, onTouchEnd: onInactiveSelection, children: [_jsx("div", { className: "rls-picker-clock__canvas", children: _jsx("svg", { width: "120rem", height: "120rem", children: _jsxs("g", { style: {
|
|
203
|
+
transform: `translate(${DIAL_RADIUS}rem, ${DIAL_RADIUS}rem)`
|
|
204
|
+
}, children: [_jsx("line", { ref: lineElement, className: "rls-picker-clock__canvas__line", x1: "-1", y1: "-1" }), _jsx("circle", { ref: centerElement, className: "rls-picker-clock__canvas__center", r: "4", cx: "-1", cy: "-1" }), _jsx("circle", { ref: indicatorElement, className: "rls-picker-clock__canvas__indicator", r: `${TICK_RADIUS}rem` }), _jsx("circle", { ref: pointElement, className: "rls-picker-clock__canvas__point", r: "3.5" })] }) }) }), _jsx("div", { className: "rls-picker-clock__hours", children: CLOCK_VALUES.map((value) => {
|
|
205
|
+
return (_jsx(RlsPickerClockTick, { value: value, selectionIsHours: selectionIsHours, onValue: onClickValue }, value));
|
|
206
|
+
}) })] }) }), _jsxs("div", { className: "rls-picker-clock__footer", children: [_jsx("div", { className: "rls-picker-clock__footer--cancel", children: _jsx(RlsButton, { type: "flat", onClick: onCancel, children: labels.timeActionCancel }) }), _jsx("div", { className: "rls-picker-clock__footer--today", children: _jsx(RlsButtonAction, { icon: "timer", onClick: onCurrentTime }) }), _jsx("div", { className: "rls-picker-clock__footer--ok", children: _jsx(RlsButton, { type: "gradient", onClick: onSelect, children: labels.timeActionSelect }) })] })] }));
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=PickerClock.js.map
|