@dvrd/dvr-controls 1.0.75 → 1.0.77
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/index.ts
CHANGED
|
@@ -45,7 +45,7 @@ import SidebarMenu from './src/js/sidebarMenu/sidebarMenu';
|
|
|
45
45
|
import Info from './src/js/info/info';
|
|
46
46
|
import Media from './src/js/media/media';
|
|
47
47
|
import DvrdButton, {DvrdButtonProps} from './src/js/button/dvrdButton';
|
|
48
|
-
import DvrdDatePicker from './src/js/date/dvrdDatePicker';
|
|
48
|
+
import DvrdDatePicker, {DVRDDatePickerRef} from './src/js/date/dvrdDatePicker';
|
|
49
49
|
import DvrdInputController from './src/js/textField/dvrdInputController';
|
|
50
50
|
import DvrdNumberInput from './src/js/textField/dvrdNumberInput';
|
|
51
51
|
import DVRDPasswordInput from './src/js/textField/dvrdPasswordInput';
|
|
@@ -96,6 +96,7 @@ export {
|
|
|
96
96
|
Media,
|
|
97
97
|
DvrdButton,
|
|
98
98
|
DvrdDatePicker,
|
|
99
|
+
DVRDDatePickerRef,
|
|
99
100
|
DvrdInputController as DvrdInput,
|
|
100
101
|
DvrdNumberInput,
|
|
101
102
|
DVRDPasswordInput,
|
package/package.json
CHANGED
|
@@ -4,7 +4,17 @@
|
|
|
4
4
|
import './style/dvrdDatePicker.scss';
|
|
5
5
|
|
|
6
6
|
import classNames from 'classnames';
|
|
7
|
-
import React, {
|
|
7
|
+
import React, {
|
|
8
|
+
ForwardedRef,
|
|
9
|
+
forwardRef,
|
|
10
|
+
Fragment,
|
|
11
|
+
MouseEventHandler,
|
|
12
|
+
useEffect,
|
|
13
|
+
useImperativeHandle,
|
|
14
|
+
useMemo,
|
|
15
|
+
useRef,
|
|
16
|
+
useState
|
|
17
|
+
} from 'react';
|
|
8
18
|
import {ChangeFunction, DatePickerTimeMode, ErrorType} from '../util/interfaces';
|
|
9
19
|
import AwesomeIcon from '../icon/awesomeIcon';
|
|
10
20
|
import WithBackground from '../popup/withBackground';
|
|
@@ -31,12 +41,15 @@ interface Props {
|
|
|
31
41
|
id?: string;
|
|
32
42
|
max?: IDate | string;
|
|
33
43
|
min?: IDate | string;
|
|
44
|
+
pickersOnly?: boolean;
|
|
34
45
|
}
|
|
35
46
|
|
|
36
|
-
export
|
|
47
|
+
export type DVRDDatePickerRef = { onOpen: VoidFunction; onClose: VoidFunction; }
|
|
48
|
+
|
|
49
|
+
function DvrdDatePicker(props: Props, ref: ForwardedRef<DVRDDatePickerRef>) {
|
|
37
50
|
const {
|
|
38
51
|
onChange, className, closeOnChange, error, label, value, placeholder, disabled, alwaysShowArrows,
|
|
39
|
-
useMobileNative, max, min, timeMode
|
|
52
|
+
useMobileNative, max, min, timeMode, pickersOnly
|
|
40
53
|
} = props;
|
|
41
54
|
const [pickerOpen, setPickerOpen] = useState(false);
|
|
42
55
|
const [timePickerOpen, setTimePickerOpen] = useState(false);
|
|
@@ -91,21 +104,25 @@ export default function DvrdDatePicker(props: Props) {
|
|
|
91
104
|
)
|
|
92
105
|
}
|
|
93
106
|
|
|
107
|
+
useImperativeHandle(ref, () => ({onOpen: onClickContainer, onClose: onClosePicker}));
|
|
108
|
+
|
|
94
109
|
return (
|
|
95
110
|
<div className={classNames('dvrd-date-picker', className, error && 'error', disabled && 'disabled')}>
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
<
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
111
|
+
{!pickersOnly && <>
|
|
112
|
+
<label className='field-label'>{label}</label>
|
|
113
|
+
{renderMobilePicker()}
|
|
114
|
+
<div className={classNames('value-container', useMobileNative && 'no-mob')} onClick={onClickContainer}>
|
|
115
|
+
<label className={classNames('value', !value && 'placeholder')}>{value?.format(dateFormat) ??
|
|
116
|
+
placeholder ?? ''}</label>
|
|
117
|
+
<AwesomeIcon name='calendar-alt' className='calendar-icon'/>
|
|
118
|
+
</div>
|
|
119
|
+
</>}
|
|
103
120
|
<DatePicker onClose={onClosePicker} onChange={onChangePicker} open={pickerOpen} value={value}
|
|
104
121
|
alwaysShowArrows={alwaysShowArrows} max={max} min={min}/>
|
|
105
122
|
{!!timeMode &&
|
|
106
123
|
<TimePicker onChange={onChangeTimePicker} onClose={onClosePicker} value={value}
|
|
107
124
|
open={timePickerOpen} timeMode={timeMode} closeOnChange={closeOnChange}/>}
|
|
108
|
-
<label className='error-label'>{error}</label>
|
|
125
|
+
{!pickersOnly && <label className='error-label'>{error}</label>}
|
|
109
126
|
</div>
|
|
110
127
|
)
|
|
111
128
|
}
|
|
@@ -347,7 +364,8 @@ function DatePicker(props: DatePickerProps) {
|
|
|
347
364
|
}
|
|
348
365
|
}, [open]);
|
|
349
366
|
|
|
350
|
-
function renderDay(day: number, index: number, onClick: MouseEventHandler, className?: string,
|
|
367
|
+
function renderDay(day: number, index: number, onClick: MouseEventHandler, className?: string,
|
|
368
|
+
type?: 'prev' | 'next') {
|
|
351
369
|
let pickValue = pickerValue.clone();
|
|
352
370
|
if (type === 'prev')
|
|
353
371
|
pickValue = pickValue.subtract(1, 'month');
|
|
@@ -562,4 +580,6 @@ function TimePicker(props: TimePickerProps) {
|
|
|
562
580
|
</div>
|
|
563
581
|
</WithBackground>
|
|
564
582
|
);
|
|
565
|
-
}
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
export default forwardRef<DVRDDatePickerRef, Props>(DvrdDatePicker);
|
|
@@ -66,8 +66,8 @@
|
|
|
66
66
|
.switcher {
|
|
67
67
|
display: grid;
|
|
68
68
|
justify-content: center;
|
|
69
|
-
background-color:
|
|
70
|
-
color:
|
|
69
|
+
background-color: var(--base-color);
|
|
70
|
+
color: var(--contrast-color);
|
|
71
71
|
align-items: center;
|
|
72
72
|
grid-column-gap: .5rem;
|
|
73
73
|
|
|
@@ -247,12 +247,12 @@
|
|
|
247
247
|
}
|
|
248
248
|
|
|
249
249
|
&.selected {
|
|
250
|
-
background-color:
|
|
251
|
-
color:
|
|
250
|
+
background-color: var(--base-color);
|
|
251
|
+
color: var(--contrast-color);
|
|
252
252
|
}
|
|
253
253
|
|
|
254
254
|
&:hover {
|
|
255
|
-
background-color: rgba(
|
|
255
|
+
background-color: rgba(var(--base-color-rgb), .2);
|
|
256
256
|
}
|
|
257
257
|
|
|
258
258
|
&.disabled {
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import React, {Context, PropsWithChildren, useEffect} from 'react';
|
|
6
6
|
import {ControlVariant} from "./interfaces";
|
|
7
7
|
import defer from 'lodash.defer';
|
|
8
|
+
import {convertColor, hexToRgb} from "./colorUtil";
|
|
8
9
|
|
|
9
10
|
// noinspection JSUnusedGlobalSymbols
|
|
10
11
|
export interface ThemeContextShape {
|
|
@@ -34,8 +35,12 @@ export default function ThemeContextProvider(props: PropsWithChildren<ProviderPr
|
|
|
34
35
|
useEffect(() => {
|
|
35
36
|
defer(() => {
|
|
36
37
|
const root = document.documentElement;
|
|
38
|
+
const baseRgb = hexToRgb(convertColor(theme.baseColor));
|
|
39
|
+
const contrastRgb = hexToRgb(convertColor(theme.contrastColor));
|
|
37
40
|
root.style.setProperty('--base-color', theme.baseColor);
|
|
41
|
+
root.style.setProperty('--base-color-rgb', `${baseRgb.r}, ${baseRgb.g}, ${baseRgb.b}`);
|
|
38
42
|
root.style.setProperty('--contrast-color', theme.contrastColor);
|
|
43
|
+
root.style.setProperty('--contrast-color-rgb', `${contrastRgb.r}, ${contrastRgb.g}, ${contrastRgb.b}`);
|
|
39
44
|
});
|
|
40
45
|
}, [theme]);
|
|
41
46
|
|