@dbcdk/react-components 0.0.23 → 0.0.24
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.
|
@@ -52,7 +52,7 @@ function defaultFormatRange(s, e, opts) {
|
|
|
52
52
|
return '';
|
|
53
53
|
}
|
|
54
54
|
const cx = (...classes) => classes.filter(Boolean).join(' ');
|
|
55
|
-
export const DateTimePicker = forwardRef(function DateTimePicker({ mode = 'single', value, onChange, enableTime = false, timeStep = 15, min, max, locale = typeof navigator !== 'undefined' ? navigator.language : 'da-DK', weekStartsOn = 1, presets, inputProps, formatDate = defaultFormatDate, formatRange = defaultFormatRange, }, _ref) {
|
|
55
|
+
export const DateTimePicker = forwardRef(function DateTimePicker({ mode = 'single', value, onChange, enableTime = false, timeStep = 15, min, max, locale = typeof navigator !== 'undefined' ? navigator.language : 'da-DK', weekStartsOn = 1, presets, inputProps, formatDate = defaultFormatDate, formatRange = defaultFormatRange, onOpenChange, }, _ref) {
|
|
56
56
|
void formatDate;
|
|
57
57
|
void formatRange;
|
|
58
58
|
const popRef = useRef(null);
|
|
@@ -314,6 +314,19 @@ export const DateTimePicker = forwardRef(function DateTimePicker({ mode = 'singl
|
|
|
314
314
|
setDirty(false);
|
|
315
315
|
}
|
|
316
316
|
}, [text, mode, enableTime, onChangeDateOnly, onChangeIso, onChangeRange]);
|
|
317
|
+
const emitTimeChange = useCallback((nextHH, nextMM) => {
|
|
318
|
+
if (mode !== 'single' || !enableTime)
|
|
319
|
+
return;
|
|
320
|
+
if (typeof value !== 'string')
|
|
321
|
+
return;
|
|
322
|
+
const current = localDateFromIso(value);
|
|
323
|
+
if (!current)
|
|
324
|
+
return;
|
|
325
|
+
const iso = isoFromLocalParts(current.getFullYear(), current.getMonth(), current.getDate(), nextHH, nextMM);
|
|
326
|
+
if (!iso)
|
|
327
|
+
return;
|
|
328
|
+
onChangeIso(iso);
|
|
329
|
+
}, [mode, enableTime, value, onChangeIso]);
|
|
317
330
|
const clear = useCallback(() => {
|
|
318
331
|
if (mode === 'single') {
|
|
319
332
|
if (enableTime)
|
|
@@ -328,7 +341,7 @@ export const DateTimePicker = forwardRef(function DateTimePicker({ mode = 'singl
|
|
|
328
341
|
setText('');
|
|
329
342
|
}, [mode, enableTime, onChangeDateOnly, onChangeIso, onChangeRange]);
|
|
330
343
|
const fallbackPlaceholder = mode === 'single' ? 'Vælg dato' : 'Vælg interval';
|
|
331
|
-
return (_jsx(Popover, { matchTriggerWidth: false, ref: popRef, trigger: toggle => {
|
|
344
|
+
return (_jsx(Popover, { matchTriggerWidth: false, ref: popRef, onOpenChange: onOpenChange, trigger: toggle => {
|
|
332
345
|
var _a, _b;
|
|
333
346
|
return (_jsx("div", { onClick: toggle, className: styles.triggerWrap, children: _jsx(Input, { ...inputProps, autoComplete: "off", autoCorrect: "off", autoCapitalize: "off", spellCheck: "false", placeholder: (_a = inputProps === null || inputProps === void 0 ? void 0 : inputProps.placeholder) !== null && _a !== void 0 ? _a : fallbackPlaceholder, value: dirty ? text : formatted, onInput: e => {
|
|
334
347
|
setDirty(true);
|
|
@@ -374,6 +387,14 @@ export const DateTimePicker = forwardRef(function DateTimePicker({ mode = 'singl
|
|
|
374
387
|
}
|
|
375
388
|
const dayNum = utcDay.getUTCDate();
|
|
376
389
|
return (_jsx("button", { role: "gridcell", "aria-selected": selected, "aria-disabled": disabledDay, onMouseEnter: () => setHoverUTC(utcDay), onClick: () => selectDay(utcDay), disabled: disabledDay, className: cx(styles.dayCell, inThisMonth ? styles.dayInMonth : styles.dayOutside, selected && styles.daySelected, inRange && styles.dayInRange, isToday && !selected && styles.dayToday, disabledDay && styles.dayDisabled), title: new Date(utcDay).toLocaleDateString(locale), children: dayNum }, idx));
|
|
377
|
-
}) }), enableTime && mode === 'single' && (_jsxs("div", { className: styles.timeRow, children: [_jsxs("div", { className: styles.timeLabel, children: [_jsx(Clock, { size: 14 }), " Tid"] }), _jsx("select", { value: timeHH, onChange: e =>
|
|
390
|
+
}) }), enableTime && mode === 'single' && (_jsxs("div", { className: styles.timeRow, children: [_jsxs("div", { className: styles.timeLabel, children: [_jsx(Clock, { size: 14 }), " Tid"] }), _jsx("select", { value: timeHH, onChange: e => {
|
|
391
|
+
const nextHH = parseInt(e.target.value, 10);
|
|
392
|
+
setTimeHH(nextHH);
|
|
393
|
+
emitTimeChange(nextHH, timeMM);
|
|
394
|
+
}, className: styles.timeSelect, children: hours.map(h => (_jsx("option", { value: h, children: String(h).padStart(2, '0') }, h))) }), _jsx("select", { value: timeMM, onChange: e => {
|
|
395
|
+
const nextMM = parseInt(e.target.value, 10);
|
|
396
|
+
setTimeMM(nextMM);
|
|
397
|
+
emitTimeChange(timeHH, nextMM);
|
|
398
|
+
}, className: styles.timeSelect, children: minutes.map(m => (_jsx("option", { value: m, children: String(m).padStart(2, '0') }, m))) })] })), mode === 'range' && (_jsxs("div", { className: styles.footer, children: [_jsx(Button, { variant: "outlined", size: "sm", onClick: clear, icon: _jsx(X, { size: 14 }), children: "Ryd" }), _jsx(Button, { variant: "primary", size: "sm", onClick: () => { var _a; return (_a = popRef.current) === null || _a === void 0 ? void 0 : _a.close(); }, children: "OK" })] }))] })] }) }));
|
|
378
399
|
});
|
|
379
400
|
DateTimePicker.displayName = 'DateTimePicker';
|
|
@@ -56,7 +56,7 @@ function OperatorDropdown({ value, onChange, operators, size = 'sm', disabled, }
|
|
|
56
56
|
setActiveIndex(operators.indexOf(op));
|
|
57
57
|
(_a = popRef.current) === null || _a === void 0 ? void 0 : _a.close();
|
|
58
58
|
};
|
|
59
|
-
return (_jsx(Popover, { ref: popRef, minWidth: "220px", trigger: (toggle, icon) => (_jsxs("button", { type: "button", onClick: toggle, disabled: disabled, "aria-label": "
|
|
59
|
+
return (_jsx(Popover, { ref: popRef, minWidth: "220px", trigger: (toggle, icon) => (_jsxs("button", { type: "button", onClick: toggle, disabled: disabled, "aria-label": "Skift operator", className: `${styles.operatorTrigger} ${styles[size]}`, children: [_jsx("span", { className: styles.operatorText, children: LABELS[value] }), icon] })), children: _jsx(Menu, { children: operators.map(op => {
|
|
60
60
|
const selected = op === value;
|
|
61
61
|
return (_jsx(Menu.Item, { active: selected, children: _jsxs("button", { type: "button", onClick: () => handleSelect(op), disabled: disabled, children: [_jsx("span", { style: { width: 16, display: 'inline-flex', justifyContent: 'center' }, children: selected ? _jsx(Check, { size: 16 }) : null }), LABELS[op]] }) }, op));
|
|
62
62
|
}) }) }));
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
border-color var(--transition-fast) var(--ease-standard),
|
|
16
16
|
box-shadow var(--transition-fast) var(--ease-standard),
|
|
17
17
|
color var(--transition-fast) var(--ease-standard);
|
|
18
|
+
line-height: 20px;
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
/* =========================
|
|
@@ -264,6 +265,10 @@
|
|
|
264
265
|
);
|
|
265
266
|
}
|
|
266
267
|
|
|
268
|
+
.operatorTrigger svg {
|
|
269
|
+
height: var(--component-size-xxs);
|
|
270
|
+
width: var(--component-size-xxs);
|
|
271
|
+
}
|
|
267
272
|
/* =========================
|
|
268
273
|
VALUE WRAPPER
|
|
269
274
|
========================= */
|
|
@@ -302,6 +307,8 @@
|
|
|
302
307
|
|
|
303
308
|
.filterField .operatorText {
|
|
304
309
|
white-space: nowrap;
|
|
310
|
+
font-family: var(--font-family-mono);
|
|
311
|
+
font-size: var(--font-size-xs);
|
|
305
312
|
}
|
|
306
313
|
|
|
307
314
|
.filterField input::placeholder {
|