@os-design/core 1.0.159 → 1.0.161
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/DatePicker/DatePickerCalendar.js +36 -25
- package/dist/cjs/DatePicker/DatePickerCalendar.js.map +1 -1
- package/dist/cjs/DatePicker/index.js +54 -10
- package/dist/cjs/DatePicker/index.js.map +1 -1
- package/dist/cjs/TimePicker/index.js +48 -24
- package/dist/cjs/TimePicker/index.js.map +1 -1
- package/dist/esm/DatePicker/DatePickerCalendar.js +26 -18
- package/dist/esm/DatePicker/DatePickerCalendar.js.map +1 -1
- package/dist/esm/DatePicker/index.js +45 -8
- package/dist/esm/DatePicker/index.js.map +1 -1
- package/dist/esm/TimePicker/index.js +40 -22
- package/dist/esm/TimePicker/index.js.map +1 -1
- package/dist/types/DatePicker/DatePickerCalendar.d.ts +1 -1
- package/dist/types/DatePicker/DatePickerCalendar.d.ts.map +1 -1
- package/dist/types/DatePicker/index.d.ts +2 -0
- package/dist/types/DatePicker/index.d.ts.map +1 -1
- package/dist/types/TimePicker/index.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -5,18 +5,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports["default"] = void 0;
|
|
8
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
9
8
|
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
10
|
-
var
|
|
9
|
+
var _datePickerUtils = require("@os-design/date-picker-utils");
|
|
11
10
|
var _icons = require("@os-design/icons");
|
|
11
|
+
var _styles = require("@os-design/styles");
|
|
12
12
|
var _theming = require("@os-design/theming");
|
|
13
|
-
var
|
|
14
|
-
var _datePickerUtils = require("@os-design/date-picker-utils");
|
|
13
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
15
14
|
var _Button = _interopRequireDefault(require("../Button"));
|
|
16
|
-
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8
|
|
17
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
15
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
|
|
18
16
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
19
17
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
20
19
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
21
20
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
22
21
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
@@ -25,22 +24,19 @@ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symb
|
|
|
25
24
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
26
25
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
27
26
|
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
28
|
-
var
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
var MonthContainer = _styled["default"].div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n margin-bottom: 0.5em;\n"])));
|
|
32
|
-
var Month = _styled["default"].div(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n flex-grow: 1;\n font-weight: 500;\n text-align: center;\n padding: 0 0.4em;\n ", ";\n"])), _styles.ellipsisStyles);
|
|
33
|
-
var Calendar = _styled["default"].div(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n display: grid;\n grid-template-columns: repeat(7, ", "em);\n grid-auto-rows: ", "em;\n justify-content: space-between;\n overflow-x: auto;\n"])), function (p) {
|
|
27
|
+
var MonthContainer = _styled["default"].div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n margin-bottom: 0.5em;\n"])));
|
|
28
|
+
var Month = _styled["default"].div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n flex-grow: 1;\n font-weight: 500;\n text-align: center;\n padding: 0 0.4em;\n ", ";\n"])), _styles.ellipsisStyles);
|
|
29
|
+
var Calendar = _styled["default"].div(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n display: grid;\n grid-template-columns: repeat(7, ", "em);\n grid-auto-rows: ", "em;\n justify-content: space-between;\n overflow-x: auto;\n"])), function (p) {
|
|
34
30
|
return p.theme.datePickerCellSize;
|
|
35
31
|
}, function (p) {
|
|
36
32
|
return p.theme.datePickerCellSize;
|
|
37
33
|
});
|
|
38
|
-
var DayOfWeek = _styled["default"].div(
|
|
34
|
+
var DayOfWeek = _styled["default"].div(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n justify-self: center;\n align-self: center;\n color: ", ";\n font-size: ", "em;\n"])), function (p) {
|
|
39
35
|
return (0, _theming.clr)(p.theme.datePickerDayOfWeekColorText);
|
|
40
36
|
}, function (p) {
|
|
41
37
|
return p.theme.sizes.small;
|
|
42
38
|
});
|
|
43
|
-
var Day = _styled["default"].div(
|
|
39
|
+
var Day = _styled["default"].div(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n ", ";\n justify-self: center;\n align-self: center;\n\n width: ", "em;\n height: ", "em;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n border-radius: ", "em;\n cursor: pointer;\n\n @media (hover: hover) {\n &:hover,\n &:focus {\n background-color: ", ";\n color: ", ";\n }\n }\n\n ", ";\n"])), _styles.resetFocusStyles, function (p) {
|
|
44
40
|
return p.theme.datePickerDaySize;
|
|
45
41
|
}, function (p) {
|
|
46
42
|
return p.theme.datePickerDaySize;
|
|
@@ -51,17 +47,17 @@ var Day = _styled["default"].div(_templateObject6 || (_templateObject6 = _tagged
|
|
|
51
47
|
}, function (p) {
|
|
52
48
|
return (0, _theming.clr)(p.theme.datePickerDayColorTextHover);
|
|
53
49
|
}, (0, _styles.transitionStyles)('background-color', 'color'));
|
|
54
|
-
var DayAnotherMonth = (0, _styled["default"])(Day)(
|
|
50
|
+
var DayAnotherMonth = (0, _styled["default"])(Day)(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n color: ", ";\n"])), function (p) {
|
|
55
51
|
return (0, _theming.clr)(p.theme.datePickerDayAnotherMonthColorText);
|
|
56
52
|
});
|
|
57
|
-
var Today = (0, _styled["default"])(Day)(
|
|
53
|
+
var Today = (0, _styled["default"])(Day)(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n background-color: ", ";\n color: ", ";\n border: 1px solid ", ";\n box-sizing: border-box;\n"])), function (p) {
|
|
58
54
|
return (0, _theming.clr)(p.theme.datePickerTodayColorBg);
|
|
59
55
|
}, function (p) {
|
|
60
56
|
return (0, _theming.clr)(p.theme.datePickerTodayColorText);
|
|
61
57
|
}, function (p) {
|
|
62
58
|
return (0, _theming.clr)(p.theme.datePickerTodayColorBorder);
|
|
63
59
|
});
|
|
64
|
-
var SelectedDay = (0, _styled["default"])(Day)(
|
|
60
|
+
var SelectedDay = (0, _styled["default"])(Day)(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n background-color: ", ";\n color: ", ";\n"])), function (p) {
|
|
65
61
|
return (0, _theming.clr)(p.theme.datePickerSelectedDayColorBg);
|
|
66
62
|
}, function (p) {
|
|
67
63
|
return (0, _theming.clr)(p.theme.datePickerSelectedDayColorText);
|
|
@@ -72,10 +68,27 @@ var DatePickerCalendar = function DatePickerCalendar(_ref) {
|
|
|
72
68
|
value = _ref.value,
|
|
73
69
|
_ref$onChange = _ref.onChange,
|
|
74
70
|
onChange = _ref$onChange === void 0 ? function () {} : _ref$onChange;
|
|
75
|
-
var
|
|
76
|
-
(0, _react.
|
|
77
|
-
|
|
71
|
+
var valueRef = (0, _react.useRef)(value);
|
|
72
|
+
(0, _react.useEffect)(function () {
|
|
73
|
+
valueRef.current = value;
|
|
74
|
+
}, [value]);
|
|
75
|
+
var changeHandler = (0, _react.useCallback)(function (date) {
|
|
76
|
+
var d = new Date(0);
|
|
77
|
+
d.setFullYear(date.getFullYear());
|
|
78
|
+
d.setMonth(date.getMonth());
|
|
79
|
+
d.setDate(date.getDate());
|
|
80
|
+
d.setHours(0);
|
|
81
|
+
d.setMinutes(0);
|
|
82
|
+
if (valueRef.current) {
|
|
83
|
+
d.setHours(valueRef.current.getHours());
|
|
84
|
+
d.setMinutes(valueRef.current.getMinutes());
|
|
85
|
+
}
|
|
86
|
+
onChange(d);
|
|
78
87
|
}, [onChange]);
|
|
88
|
+
var changeHandlerRef = (0, _react.useRef)(changeHandler);
|
|
89
|
+
(0, _react.useEffect)(function () {
|
|
90
|
+
changeHandlerRef.current = changeHandler;
|
|
91
|
+
}, [changeHandler]);
|
|
79
92
|
var _useDatePickerCalenda = (0, _datePickerUtils.useDatePickerCalendar)({
|
|
80
93
|
value: value,
|
|
81
94
|
firstDayOfWeek: firstDayOfWeek
|
|
@@ -89,13 +102,11 @@ var DatePickerCalendar = function DatePickerCalendar(_ref) {
|
|
|
89
102
|
role: 'button',
|
|
90
103
|
'aria-label': (0, _datePickerUtils.getAccessibilityDateLabel)(date, locale),
|
|
91
104
|
onClick: function onClick() {
|
|
92
|
-
|
|
93
|
-
onChangeRef.current(date);
|
|
105
|
+
changeHandlerRef.current(date);
|
|
94
106
|
},
|
|
95
107
|
onKeyDown: function onKeyDown(e) {
|
|
96
|
-
if (!onChangeRef.current) return;
|
|
97
108
|
if (['Enter', ' '].includes(e.key)) {
|
|
98
|
-
|
|
109
|
+
changeHandlerRef.current(date);
|
|
99
110
|
e.preventDefault();
|
|
100
111
|
}
|
|
101
112
|
},
|
|
@@ -104,7 +115,7 @@ var DatePickerCalendar = function DatePickerCalendar(_ref) {
|
|
|
104
115
|
}
|
|
105
116
|
};
|
|
106
117
|
}, [locale]);
|
|
107
|
-
return /*#__PURE__*/_react["default"].createElement(
|
|
118
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(MonthContainer, null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
108
119
|
type: "ghost",
|
|
109
120
|
wide: "never",
|
|
110
121
|
size: "small",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePickerCalendar.js","names":["Container","styled","div","m","min","xs","p","theme","datePickerPadding","MonthContainer","Month","ellipsisStyles","Calendar","datePickerCellSize","DayOfWeek","clr","datePickerDayOfWeekColorText","sizes","small","Day","resetFocusStyles","datePickerDaySize","borderRadius","datePickerDayColorBgHover","datePickerDayColorTextHover","transitionStyles","DayAnotherMonth","datePickerDayAnotherMonthColorText","Today","datePickerTodayColorBg","datePickerTodayColorText","datePickerTodayColorBorder","SelectedDay","datePickerSelectedDayColorBg","datePickerSelectedDayColorText","DatePickerCalendar","firstDayOfWeek","locale","value","onChange","onChangeRef","useRef","useCallback","current","useDatePickerCalendar","selectedMonth","updateMonth","days","getDayProps","date","tabIndex","role","getAccessibilityDateLabel","onClick","onKeyDown","e","includes","key","preventDefault","onMouseDown","prevMonthLabel","months","month","year","nextMonthLabel","shortDaysOfWeek","slice","map","item","type","toISOString","getDate"],"sources":["../../../src/DatePicker/DatePickerCalendar.tsx"],"sourcesContent":["import React, { HTMLAttributes, useCallback, useRef } from 'react';\nimport styled from '@emotion/styled';\nimport {\n ellipsisStyles,\n resetFocusStyles,\n transitionStyles,\n} from '@os-design/styles';\nimport { Left, Right } from '@os-design/icons';\nimport { clr } from '@os-design/theming';\nimport { m } from '@os-design/media';\nimport {\n DatePickerLocale,\n getAccessibilityDateLabel,\n useDatePickerCalendar,\n} from '@os-design/date-picker-utils';\nimport Button from '../Button';\n\ninterface DatePickerCalendarProps {\n firstDayOfWeek: 'sunday' | 'monday';\n locale: DatePickerLocale;\n value?: Date | null;\n onChange?: (value: Date) => void;\n}\n\nconst Container = styled.div`\n // For popover\n ${m.min.xs} {\n padding: ${(p) => p.theme.datePickerPadding}em;\n }\n`;\n\nconst MonthContainer = styled.div`\n display: flex;\n align-items: center;\n margin-bottom: 0.5em;\n`;\n\nconst Month = styled.div`\n flex-grow: 1;\n font-weight: 500;\n text-align: center;\n padding: 0 0.4em;\n ${ellipsisStyles};\n`;\n\nconst Calendar = styled.div`\n display: grid;\n grid-template-columns: repeat(7, ${(p) => p.theme.datePickerCellSize}em);\n grid-auto-rows: ${(p) => p.theme.datePickerCellSize}em;\n justify-content: space-between;\n overflow-x: auto;\n`;\n\nconst DayOfWeek = styled.div`\n justify-self: center;\n align-self: center;\n color: ${(p) => clr(p.theme.datePickerDayOfWeekColorText)};\n font-size: ${(p) => p.theme.sizes.small}em;\n`;\n\nconst Day = styled.div`\n ${resetFocusStyles};\n justify-self: center;\n align-self: center;\n\n width: ${(p) => p.theme.datePickerDaySize}em;\n height: ${(p) => p.theme.datePickerDaySize}em;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n border-radius: ${(p) => p.theme.borderRadius}em;\n cursor: pointer;\n\n @media (hover: hover) {\n &:hover,\n &:focus {\n background-color: ${(p) => clr(p.theme.datePickerDayColorBgHover)};\n color: ${(p) => clr(p.theme.datePickerDayColorTextHover)};\n }\n }\n\n ${transitionStyles('background-color', 'color')};\n`;\n\nconst DayAnotherMonth = styled(Day)`\n color: ${(p) => clr(p.theme.datePickerDayAnotherMonthColorText)};\n`;\n\nconst Today = styled(Day)`\n background-color: ${(p) => clr(p.theme.datePickerTodayColorBg)};\n color: ${(p) => clr(p.theme.datePickerTodayColorText)};\n border: 1px solid ${(p) => clr(p.theme.datePickerTodayColorBorder)};\n box-sizing: border-box;\n`;\n\nconst SelectedDay = styled(Day)`\n background-color: ${(p) => clr(p.theme.datePickerSelectedDayColorBg)};\n color: ${(p) => clr(p.theme.datePickerSelectedDayColorText)};\n`;\n\nconst DatePickerCalendar: React.FC<DatePickerCalendarProps> = ({\n firstDayOfWeek,\n locale,\n value,\n onChange = () => {},\n}) => {\n const onChangeRef = useRef(onChange);\n\n useCallback(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const { selectedMonth, updateMonth, days } = useDatePickerCalendar({\n value,\n firstDayOfWeek,\n });\n\n const getDayProps = useCallback<\n (date: Date) => HTMLAttributes<HTMLDivElement>\n >(\n (date: Date) => ({\n tabIndex: 0,\n role: 'button',\n 'aria-label': getAccessibilityDateLabel(date, locale),\n onClick: () => {\n if (!onChangeRef.current) return;\n onChangeRef.current(date);\n },\n onKeyDown: (e) => {\n if (!onChangeRef.current) return;\n if (['Enter', ' '].includes(e.key)) {\n onChangeRef.current(date);\n e.preventDefault();\n }\n },\n onMouseDown: (e) => e.preventDefault(),\n }),\n [locale]\n );\n\n return (\n <Container>\n <MonthContainer>\n <Button\n type='ghost'\n wide='never'\n size='small'\n onClick={() => updateMonth(-1)}\n aria-label={locale.prevMonthLabel}\n >\n <Left />\n </Button>\n <Month>\n {locale.months[selectedMonth.month]} {selectedMonth.year}\n </Month>\n <Button\n type='ghost'\n wide='never'\n size='small'\n onClick={() => updateMonth(1)}\n aria-label={locale.nextMonthLabel}\n >\n <Right />\n </Button>\n </MonthContainer>\n\n <Calendar>\n {(firstDayOfWeek === 'sunday'\n ? locale.shortDaysOfWeek\n : [...locale.shortDaysOfWeek.slice(1), locale.shortDaysOfWeek[0]]\n ).map((item) => (\n <DayOfWeek key={item}>{item}</DayOfWeek>\n ))}\n\n {days.map(({ type, date }) => {\n if (type === 'dayAnotherMonth') {\n return (\n <DayAnotherMonth key={date.toISOString()} {...getDayProps(date)}>\n {date.getDate()}\n </DayAnotherMonth>\n );\n }\n if (type === 'selectedDay') {\n return (\n <SelectedDay key={date.toISOString()} {...getDayProps(date)}>\n {date.getDate()}\n </SelectedDay>\n );\n }\n if (type === 'today') {\n return (\n <Today key={date.toISOString()} {...getDayProps(date)}>\n {date.getDate()}\n </Today>\n );\n }\n return (\n <Day key={date.toISOString()} {...getDayProps(date)}>\n {date.getDate()}\n </Day>\n );\n })}\n </Calendar>\n </Container>\n );\n};\n\nexport default DatePickerCalendar;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DatePickerCalendar.js","names":["MonthContainer","styled","div","Month","ellipsisStyles","Calendar","p","theme","datePickerCellSize","DayOfWeek","clr","datePickerDayOfWeekColorText","sizes","small","Day","resetFocusStyles","datePickerDaySize","borderRadius","datePickerDayColorBgHover","datePickerDayColorTextHover","transitionStyles","DayAnotherMonth","datePickerDayAnotherMonthColorText","Today","datePickerTodayColorBg","datePickerTodayColorText","datePickerTodayColorBorder","SelectedDay","datePickerSelectedDayColorBg","datePickerSelectedDayColorText","DatePickerCalendar","firstDayOfWeek","locale","value","onChange","valueRef","useRef","useEffect","current","changeHandler","useCallback","date","d","Date","setFullYear","getFullYear","setMonth","getMonth","setDate","getDate","setHours","setMinutes","getHours","getMinutes","changeHandlerRef","useDatePickerCalendar","selectedMonth","updateMonth","days","getDayProps","tabIndex","role","getAccessibilityDateLabel","onClick","onKeyDown","e","includes","key","preventDefault","onMouseDown","prevMonthLabel","months","month","year","nextMonthLabel","shortDaysOfWeek","slice","map","item","type","toISOString"],"sources":["../../../src/DatePicker/DatePickerCalendar.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport {\n DatePickerLocale,\n getAccessibilityDateLabel,\n useDatePickerCalendar,\n} from '@os-design/date-picker-utils';\nimport { Left, Right } from '@os-design/icons';\nimport {\n ellipsisStyles,\n resetFocusStyles,\n transitionStyles,\n} from '@os-design/styles';\nimport { clr } from '@os-design/theming';\nimport React, { HTMLAttributes, useCallback, useEffect, useRef } from 'react';\nimport Button from '../Button';\n\ninterface DatePickerCalendarProps {\n firstDayOfWeek: 'sunday' | 'monday';\n locale: DatePickerLocale;\n value?: Date | null;\n onChange?: (value: Date) => void;\n}\n\nconst MonthContainer = styled.div`\n display: flex;\n align-items: center;\n margin-bottom: 0.5em;\n`;\n\nconst Month = styled.div`\n flex-grow: 1;\n font-weight: 500;\n text-align: center;\n padding: 0 0.4em;\n ${ellipsisStyles};\n`;\n\nconst Calendar = styled.div`\n display: grid;\n grid-template-columns: repeat(7, ${(p) => p.theme.datePickerCellSize}em);\n grid-auto-rows: ${(p) => p.theme.datePickerCellSize}em;\n justify-content: space-between;\n overflow-x: auto;\n`;\n\nconst DayOfWeek = styled.div`\n justify-self: center;\n align-self: center;\n color: ${(p) => clr(p.theme.datePickerDayOfWeekColorText)};\n font-size: ${(p) => p.theme.sizes.small}em;\n`;\n\nconst Day = styled.div`\n ${resetFocusStyles};\n justify-self: center;\n align-self: center;\n\n width: ${(p) => p.theme.datePickerDaySize}em;\n height: ${(p) => p.theme.datePickerDaySize}em;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n border-radius: ${(p) => p.theme.borderRadius}em;\n cursor: pointer;\n\n @media (hover: hover) {\n &:hover,\n &:focus {\n background-color: ${(p) => clr(p.theme.datePickerDayColorBgHover)};\n color: ${(p) => clr(p.theme.datePickerDayColorTextHover)};\n }\n }\n\n ${transitionStyles('background-color', 'color')};\n`;\n\nconst DayAnotherMonth = styled(Day)`\n color: ${(p) => clr(p.theme.datePickerDayAnotherMonthColorText)};\n`;\n\nconst Today = styled(Day)`\n background-color: ${(p) => clr(p.theme.datePickerTodayColorBg)};\n color: ${(p) => clr(p.theme.datePickerTodayColorText)};\n border: 1px solid ${(p) => clr(p.theme.datePickerTodayColorBorder)};\n box-sizing: border-box;\n`;\n\nconst SelectedDay = styled(Day)`\n background-color: ${(p) => clr(p.theme.datePickerSelectedDayColorBg)};\n color: ${(p) => clr(p.theme.datePickerSelectedDayColorText)};\n`;\n\nconst DatePickerCalendar: React.FC<DatePickerCalendarProps> = ({\n firstDayOfWeek,\n locale,\n value,\n onChange = () => {},\n}) => {\n const valueRef = useRef(value);\n useEffect(() => {\n valueRef.current = value;\n }, [value]);\n\n const changeHandler = useCallback(\n (date: Date) => {\n const d = new Date(0);\n d.setFullYear(date.getFullYear());\n d.setMonth(date.getMonth());\n d.setDate(date.getDate());\n d.setHours(0);\n d.setMinutes(0);\n if (valueRef.current) {\n d.setHours(valueRef.current.getHours());\n d.setMinutes(valueRef.current.getMinutes());\n }\n onChange(d);\n },\n [onChange]\n );\n\n const changeHandlerRef = useRef(changeHandler);\n useEffect(() => {\n changeHandlerRef.current = changeHandler;\n }, [changeHandler]);\n\n const { selectedMonth, updateMonth, days } = useDatePickerCalendar({\n value,\n firstDayOfWeek,\n });\n\n const getDayProps = useCallback<\n (date: Date) => HTMLAttributes<HTMLDivElement>\n >(\n (date: Date) => ({\n tabIndex: 0,\n role: 'button',\n 'aria-label': getAccessibilityDateLabel(date, locale),\n onClick: () => {\n changeHandlerRef.current(date);\n },\n onKeyDown: (e) => {\n if (['Enter', ' '].includes(e.key)) {\n changeHandlerRef.current(date);\n e.preventDefault();\n }\n },\n onMouseDown: (e) => e.preventDefault(),\n }),\n [locale]\n );\n\n return (\n <>\n <MonthContainer>\n <Button\n type='ghost'\n wide='never'\n size='small'\n onClick={() => updateMonth(-1)}\n aria-label={locale.prevMonthLabel}\n >\n <Left />\n </Button>\n <Month>\n {locale.months[selectedMonth.month]} {selectedMonth.year}\n </Month>\n <Button\n type='ghost'\n wide='never'\n size='small'\n onClick={() => updateMonth(1)}\n aria-label={locale.nextMonthLabel}\n >\n <Right />\n </Button>\n </MonthContainer>\n\n <Calendar>\n {(firstDayOfWeek === 'sunday'\n ? locale.shortDaysOfWeek\n : [...locale.shortDaysOfWeek.slice(1), locale.shortDaysOfWeek[0]]\n ).map((item) => (\n <DayOfWeek key={item}>{item}</DayOfWeek>\n ))}\n\n {days.map(({ type, date }) => {\n if (type === 'dayAnotherMonth') {\n return (\n <DayAnotherMonth key={date.toISOString()} {...getDayProps(date)}>\n {date.getDate()}\n </DayAnotherMonth>\n );\n }\n if (type === 'selectedDay') {\n return (\n <SelectedDay key={date.toISOString()} {...getDayProps(date)}>\n {date.getDate()}\n </SelectedDay>\n );\n }\n if (type === 'today') {\n return (\n <Today key={date.toISOString()} {...getDayProps(date)}>\n {date.getDate()}\n </Today>\n );\n }\n return (\n <Day key={date.toISOString()} {...getDayProps(date)}>\n {date.getDate()}\n </Day>\n );\n })}\n </Calendar>\n </>\n );\n};\n\nexport default DatePickerCalendar;\n"],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports["default"] = void 0;
|
|
8
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
8
9
|
var _datePickerUtils = require("@os-design/date-picker-utils");
|
|
9
10
|
var _icons = require("@os-design/icons");
|
|
10
11
|
var _media = require("@os-design/media");
|
|
@@ -16,12 +17,17 @@ var _Modal = _interopRequireDefault(require("../Modal"));
|
|
|
16
17
|
var _Popover = _interopRequireDefault(require("../Popover"));
|
|
17
18
|
var _Select = require("../Select");
|
|
18
19
|
var _SelectToggle = require("../Select/SelectToggle");
|
|
20
|
+
var _TimePicker = _interopRequireDefault(require("../TimePicker"));
|
|
19
21
|
var _DatePickerCalendar = _interopRequireDefault(require("./DatePickerCalendar"));
|
|
20
|
-
var _excluded = ["left", "leftHasPadding", "right", "rightHasPadding", "placeholder", "disabled", "format", "firstDayOfWeek", "locale", "value", "defaultValue", "onChange", "size"];
|
|
21
|
-
|
|
22
|
+
var _excluded = ["left", "leftHasPadding", "right", "rightHasPadding", "placeholder", "disabled", "format", "firstDayOfWeek", "locale", "showTime", "timeNotation", "value", "defaultValue", "onChange", "size"];
|
|
23
|
+
var _templateObject, _templateObject2;
|
|
22
24
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
23
25
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
26
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
24
27
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
28
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
29
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
30
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
25
31
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
26
32
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
27
33
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
@@ -30,6 +36,12 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
|
|
|
30
36
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
31
37
|
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
32
38
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
39
|
+
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
40
|
+
var StyledPopover = (0, _styled["default"])(_Popover["default"])(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n padding: ", "em;\n"])), function (p) {
|
|
41
|
+
return p.theme.datePickerPadding;
|
|
42
|
+
});
|
|
43
|
+
var TimeContainer = _styled["default"].div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n margin-top: 0.5em;\n"])));
|
|
44
|
+
|
|
33
45
|
/**
|
|
34
46
|
* The component to choose a date.
|
|
35
47
|
*/
|
|
@@ -43,12 +55,15 @@ var DatePicker = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
43
55
|
placeholder = _ref.placeholder,
|
|
44
56
|
_ref$disabled = _ref.disabled,
|
|
45
57
|
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
46
|
-
|
|
47
|
-
format = _ref$format === void 0 ? _datePickerUtils.defaultFormat : _ref$format,
|
|
58
|
+
formatFn = _ref.format,
|
|
48
59
|
_ref$firstDayOfWeek = _ref.firstDayOfWeek,
|
|
49
60
|
firstDayOfWeek = _ref$firstDayOfWeek === void 0 ? 'sunday' : _ref$firstDayOfWeek,
|
|
50
61
|
_ref$locale = _ref.locale,
|
|
51
62
|
locale = _ref$locale === void 0 ? _datePickerUtils.defaultLocale : _ref$locale,
|
|
63
|
+
_ref$showTime = _ref.showTime,
|
|
64
|
+
showTime = _ref$showTime === void 0 ? false : _ref$showTime,
|
|
65
|
+
_ref$timeNotation = _ref.timeNotation,
|
|
66
|
+
timeNotation = _ref$timeNotation === void 0 ? '12-hour' : _ref$timeNotation,
|
|
52
67
|
value = _ref.value,
|
|
53
68
|
defaultValue = _ref.defaultValue,
|
|
54
69
|
onChange = _ref.onChange,
|
|
@@ -70,10 +85,24 @@ var DatePicker = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
70
85
|
_useForwardedState2 = _slicedToArray(_useForwardedState, 2),
|
|
71
86
|
forwardedValue = _useForwardedState2[0],
|
|
72
87
|
setForwardedValue = _useForwardedState2[1];
|
|
88
|
+
var format = (0, _react.useMemo)(function () {
|
|
89
|
+
if (formatFn) return formatFn;
|
|
90
|
+
return function (date) {
|
|
91
|
+
return date.toLocaleString(undefined, _objectSpread({
|
|
92
|
+
year: 'numeric',
|
|
93
|
+
month: '2-digit',
|
|
94
|
+
day: '2-digit'
|
|
95
|
+
}, showTime ? {
|
|
96
|
+
hour: '2-digit',
|
|
97
|
+
minute: '2-digit',
|
|
98
|
+
hour12: timeNotation === '12-hour'
|
|
99
|
+
} : {}));
|
|
100
|
+
};
|
|
101
|
+
}, [formatFn, showTime, timeNotation]);
|
|
73
102
|
var formattedValue = (0, _react.useMemo)(function () {
|
|
74
103
|
if (!forwardedValue) return null;
|
|
75
|
-
return format(forwardedValue
|
|
76
|
-
}, [forwardedValue, format
|
|
104
|
+
return format(forwardedValue);
|
|
105
|
+
}, [forwardedValue, format]);
|
|
77
106
|
var closeHandler = (0, _react.useCallback)(function () {
|
|
78
107
|
setOpened(false);
|
|
79
108
|
}, []);
|
|
@@ -85,7 +114,7 @@ var DatePicker = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
85
114
|
value: forwardedValue,
|
|
86
115
|
onChange: function onChange(v) {
|
|
87
116
|
setForwardedValue(v);
|
|
88
|
-
closeHandler();
|
|
117
|
+
if (!showTime) closeHandler();
|
|
89
118
|
}
|
|
90
119
|
});
|
|
91
120
|
var valueIsSpecified = (0, _react.useMemo)(function () {
|
|
@@ -123,6 +152,21 @@ var DatePicker = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
123
152
|
if (valueIsSpecified) return false;
|
|
124
153
|
return right ? rightHasPadding : true;
|
|
125
154
|
}, [right, rightHasPadding, valueIsSpecified]);
|
|
155
|
+
var timeComponent = (0, _react.useMemo)(function () {
|
|
156
|
+
return showTime && forwardedValue ? /*#__PURE__*/_react["default"].createElement(TimeContainer, null, /*#__PURE__*/_react["default"].createElement(_TimePicker["default"], {
|
|
157
|
+
autoFocus: true,
|
|
158
|
+
disabled: disabled,
|
|
159
|
+
notation: timeNotation,
|
|
160
|
+
value: forwardedValue,
|
|
161
|
+
onChange: setForwardedValue,
|
|
162
|
+
onKeyDown: function onKeyDown(e) {
|
|
163
|
+
if (disabled) return;
|
|
164
|
+
if (e.key === 'Enter') {
|
|
165
|
+
setOpened(!opened);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
})) : null;
|
|
169
|
+
}, [disabled, forwardedValue, opened, setForwardedValue, showTime, timeNotation]);
|
|
126
170
|
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Select.SelectContainer, _extends({
|
|
127
171
|
opened: opened,
|
|
128
172
|
disabled: disabled,
|
|
@@ -171,19 +215,19 @@ var DatePicker = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
171
215
|
}
|
|
172
216
|
}, /*#__PURE__*/_react["default"].createElement(_SelectToggle.RightAddon, {
|
|
173
217
|
hasPadding: rightHasPaddingValue
|
|
174
|
-
}, rightValue))), isMinXs ? /*#__PURE__*/_react["default"].createElement(
|
|
218
|
+
}, rightValue))), isMinXs ? /*#__PURE__*/_react["default"].createElement(StyledPopover, {
|
|
175
219
|
trigger: containerRef,
|
|
176
220
|
placement: "bottom-start",
|
|
177
221
|
visible: opened,
|
|
178
222
|
onClose: closeHandler,
|
|
179
223
|
size: size
|
|
180
|
-
}, calendar) : /*#__PURE__*/_react["default"].createElement(_Modal["default"], {
|
|
224
|
+
}, calendar, timeComponent) : /*#__PURE__*/_react["default"].createElement(_Modal["default"], {
|
|
181
225
|
title: placeholder,
|
|
182
226
|
footer: null,
|
|
183
227
|
visible: opened,
|
|
184
228
|
onClose: closeHandler,
|
|
185
229
|
size: size
|
|
186
|
-
}, calendar));
|
|
230
|
+
}, calendar, timeComponent));
|
|
187
231
|
});
|
|
188
232
|
DatePicker.displayName = 'DatePicker';
|
|
189
233
|
var _default = DatePicker;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["DatePicker","forwardRef","ref","left","leftHasPadding","right","rightHasPadding","placeholder","disabled","format","defaultFormat","firstDayOfWeek","locale","defaultLocale","value","defaultValue","onChange","size","rest","useForwardedRef","containerRef","mergedContainerRef","useState","opened","setOpened","useForwardedState","forwardedValue","setForwardedValue","formattedValue","useMemo","closeHandler","useCallback","useKeyPress","window","undefined","isMinXs","useIsMinWidth","calendar","v","valueIsSpecified","rightValue","e","stopPropagation","includes","key","current","focus","preventDefault","clearLabel","rightHasPaddingValue","getAccessibilityDateLabel","t","buttonPaddingHorizontal","baseHeight","selectToggleListItemHeight","sizes","small","displayName"],"sources":["../../../src/DatePicker/index.tsx"],"sourcesContent":["import {\n DatePickerLocale,\n defaultFormat,\n defaultLocale,\n getAccessibilityDateLabel,\n} from '@os-design/date-picker-utils';\nimport { Down, Up } from '@os-design/icons';\nimport { useIsMinWidth } from '@os-design/media';\nimport { WithSize } from '@os-design/styles';\nimport { ThemeOverrider } from '@os-design/theming';\nimport {\n useForwardedRef,\n useForwardedState,\n useKeyPress,\n} from '@os-design/utils';\nimport React, { forwardRef, useCallback, useMemo, useState } from 'react';\nimport Button from '../Button';\nimport Modal from '../Modal';\nimport Popover from '../Popover';\nimport { SelectContainer } from '../Select';\nimport {\n ClearIcon,\n Content,\n IconContainer,\n LeftAddon,\n Placeholder,\n RightAddon,\n Title,\n} from '../Select/SelectToggle';\nimport DatePickerCalendar from './DatePickerCalendar';\n\ntype JsxDivProps = Omit<\n JSX.IntrinsicElements['div'],\n 'value' | 'defaultValue' | 'onChange' | 'ref'\n>;\nexport interface DatePickerProps extends JsxDivProps, WithSize {\n /**\n * The component located on the left side.\n * @default undefined\n */\n left?: React.ReactNode;\n /**\n * Adds padding to the left component.\n * It can be useful when passing an icon or text in the left component.\n * @default false\n */\n leftHasPadding?: boolean;\n /**\n * The component located on the right side.\n * @default undefined\n */\n right?: React.ReactNode;\n /**\n * Adds padding to the right component.\n * It can be useful when passing an icon or text in the right component.\n * @default false\n */\n rightHasPadding?: boolean;\n /**\n * The placeholder of the date picker.\n * @default undefined\n */\n placeholder?: string;\n /**\n * Whether the date picker is disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * The format of the date.\n * @default undefined\n */\n format?: (date: Date) => string;\n /**\n * The first day of the week.\n * @default sunday\n */\n firstDayOfWeek?: 'sunday' | 'monday';\n /**\n * The locale of the date picker.\n * @default undefined\n */\n locale?: DatePickerLocale;\n /**\n * Selected timestamp.\n * @default undefined\n */\n value?: Date | null;\n /**\n * The default value.\n * @default undefined\n */\n defaultValue?: Date | null;\n /**\n * The change event handler.\n * @default undefined\n */\n onChange?: (value: Date | null) => void;\n}\n\n/**\n * The component to choose a date.\n */\nconst DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(\n (\n {\n left,\n leftHasPadding = false,\n right,\n rightHasPadding = false,\n placeholder,\n disabled = false,\n format = defaultFormat,\n firstDayOfWeek = 'sunday',\n locale = defaultLocale,\n value,\n defaultValue,\n onChange,\n size,\n ...rest\n },\n ref\n ) => {\n const [containerRef, mergedContainerRef] = useForwardedRef(ref);\n const [opened, setOpened] = useState(false);\n const [forwardedValue, setForwardedValue] = useForwardedState({\n value,\n defaultValue,\n onChange,\n });\n\n const formattedValue = useMemo(() => {\n if (!forwardedValue) return null;\n return format(forwardedValue, locale);\n }, [forwardedValue, format, locale]);\n\n const closeHandler = useCallback(() => {\n setOpened(false);\n }, []);\n\n useKeyPress(\n (typeof window !== 'undefined' ? window : undefined) as EventTarget,\n 'Escape',\n closeHandler\n );\n const isMinXs = useIsMinWidth('xs');\n\n const calendar = (\n <DatePickerCalendar\n firstDayOfWeek={firstDayOfWeek}\n locale={locale}\n value={forwardedValue}\n onChange={(v) => {\n setForwardedValue(v);\n closeHandler();\n }}\n />\n );\n\n const valueIsSpecified = useMemo(\n () => formattedValue !== undefined && formattedValue !== null,\n [formattedValue]\n );\n\n const rightValue = useMemo(() => {\n if (valueIsSpecified) {\n return (\n <div aria-hidden>\n <Button\n type='ghost'\n wide='never'\n size='small'\n disabled={disabled}\n onClick={(e) => {\n setForwardedValue(null);\n e.stopPropagation();\n }}\n onKeyDown={(e) => {\n if (disabled) return;\n if (['Enter', ' '].includes(e.key)) {\n setForwardedValue(null);\n if (!containerRef.current) return;\n containerRef.current.focus();\n e.preventDefault();\n e.stopPropagation();\n }\n }}\n aria-label={locale.clearLabel}\n >\n <ClearIcon />\n </Button>\n </div>\n );\n }\n return (\n right || <IconContainer>{opened ? <Up /> : <Down />}</IconContainer>\n );\n }, [\n containerRef,\n disabled,\n locale.clearLabel,\n opened,\n right,\n setForwardedValue,\n valueIsSpecified,\n ]);\n\n const rightHasPaddingValue = useMemo(() => {\n if (valueIsSpecified) return false;\n return right ? rightHasPadding : true;\n }, [right, rightHasPadding, valueIsSpecified]);\n\n return (\n <>\n <SelectContainer\n opened={opened}\n disabled={disabled}\n size={size}\n tabIndex={!disabled ? 0 : -1}\n onClick={() => {\n if (disabled) return;\n setOpened(!opened);\n }}\n onKeyDown={(e) => {\n if (disabled) return;\n if (['Enter', ' '].includes(e.key)) {\n setOpened(!opened);\n e.preventDefault();\n }\n }}\n onMouseDown={(e) => e.preventDefault()}\n role='combobox'\n aria-label={\n forwardedValue\n ? getAccessibilityDateLabel(forwardedValue, locale)\n : undefined\n }\n aria-disabled={disabled}\n {...rest}\n ref={mergedContainerRef}\n >\n {left && (\n <ThemeOverrider\n overrides={(t) => ({\n buttonPaddingHorizontal: 0.8,\n baseHeight: t.selectToggleListItemHeight / t.sizes.small,\n })}\n >\n <LeftAddon hasPadding={leftHasPadding}>{left}</LeftAddon>\n </ThemeOverrider>\n )}\n\n <Content hasLeft={!!left} hasRight={!!right}>\n {valueIsSpecified ? (\n <Title disabled={disabled} aria-hidden>\n {formattedValue}\n </Title>\n ) : (\n <Placeholder>{placeholder}</Placeholder>\n )}\n </Content>\n\n {rightValue && (\n <ThemeOverrider\n overrides={(t) => ({\n buttonPaddingHorizontal: 0.8,\n baseHeight: t.selectToggleListItemHeight / t.sizes.small,\n })}\n >\n <RightAddon hasPadding={rightHasPaddingValue}>\n {rightValue}\n </RightAddon>\n </ThemeOverrider>\n )}\n </SelectContainer>\n\n {isMinXs ? (\n <Popover\n trigger={containerRef}\n placement='bottom-start'\n visible={opened}\n onClose={closeHandler}\n size={size}\n >\n {calendar}\n </Popover>\n ) : (\n <Modal\n title={placeholder}\n footer={null}\n visible={opened}\n onClose={closeHandler}\n size={size}\n >\n {calendar}\n </Modal>\n )}\n </>\n );\n }\n);\n\nDatePicker.displayName = 'DatePicker';\n\nexport default DatePicker;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["StyledPopover","styled","Popover","p","theme","datePickerPadding","TimeContainer","div","DatePicker","forwardRef","ref","left","leftHasPadding","right","rightHasPadding","placeholder","disabled","formatFn","format","firstDayOfWeek","locale","defaultLocale","showTime","timeNotation","value","defaultValue","onChange","size","rest","useForwardedRef","containerRef","mergedContainerRef","useState","opened","setOpened","useForwardedState","forwardedValue","setForwardedValue","useMemo","date","toLocaleString","undefined","year","month","day","hour","minute","hour12","formattedValue","closeHandler","useCallback","useKeyPress","window","isMinXs","useIsMinWidth","calendar","v","valueIsSpecified","rightValue","e","stopPropagation","includes","key","current","focus","preventDefault","clearLabel","rightHasPaddingValue","timeComponent","getAccessibilityDateLabel","t","buttonPaddingHorizontal","baseHeight","selectToggleListItemHeight","sizes","small","displayName"],"sources":["../../../src/DatePicker/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport {\n DatePickerLocale,\n defaultLocale,\n getAccessibilityDateLabel,\n} from '@os-design/date-picker-utils';\nimport { Down, Up } from '@os-design/icons';\nimport { useIsMinWidth } from '@os-design/media';\nimport { WithSize } from '@os-design/styles';\nimport { ThemeOverrider } from '@os-design/theming';\nimport {\n useForwardedRef,\n useForwardedState,\n useKeyPress,\n} from '@os-design/utils';\nimport React, { forwardRef, useCallback, useMemo, useState } from 'react';\nimport Button from '../Button';\nimport Modal from '../Modal';\nimport Popover from '../Popover';\nimport { SelectContainer } from '../Select';\nimport {\n ClearIcon,\n Content,\n IconContainer,\n LeftAddon,\n Placeholder,\n RightAddon,\n Title,\n} from '../Select/SelectToggle';\nimport TimePicker from '../TimePicker';\nimport DatePickerCalendar from './DatePickerCalendar';\n\ntype JsxDivProps = Omit<\n JSX.IntrinsicElements['div'],\n 'value' | 'defaultValue' | 'onChange' | 'ref'\n>;\nexport interface DatePickerProps extends JsxDivProps, WithSize {\n /**\n * The component located on the left side.\n * @default undefined\n */\n left?: React.ReactNode;\n /**\n * Adds padding to the left component.\n * It can be useful when passing an icon or text in the left component.\n * @default false\n */\n leftHasPadding?: boolean;\n /**\n * The component located on the right side.\n * @default undefined\n */\n right?: React.ReactNode;\n /**\n * Adds padding to the right component.\n * It can be useful when passing an icon or text in the right component.\n * @default false\n */\n rightHasPadding?: boolean;\n /**\n * The placeholder of the date picker.\n * @default undefined\n */\n placeholder?: string;\n /**\n * Whether the date picker is disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * The format of the date.\n * @default undefined\n */\n format?: (date: Date) => string;\n /**\n * The first day of the week.\n * @default sunday\n */\n firstDayOfWeek?: 'sunday' | 'monday';\n /**\n * The locale of the date picker.\n * @default undefined\n */\n locale?: DatePickerLocale;\n /**\n * Whether the time is shown.\n * @default false\n */\n showTime?: boolean;\n /**\n * The time notation.\n * @default 12-hour\n */\n timeNotation?: '12-hour' | '24-hour';\n /**\n * Selected date.\n * @default undefined\n */\n value?: Date | null;\n /**\n * The default value.\n * @default undefined\n */\n defaultValue?: Date | null;\n /**\n * The change event handler.\n * @default undefined\n */\n onChange?: (value: Date | null) => void;\n}\n\nconst StyledPopover = styled(Popover)`\n padding: ${(p) => p.theme.datePickerPadding}em;\n`;\n\nconst TimeContainer = styled.div`\n margin-top: 0.5em;\n`;\n\n/**\n * The component to choose a date.\n */\nconst DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(\n (\n {\n left,\n leftHasPadding = false,\n right,\n rightHasPadding = false,\n placeholder,\n disabled = false,\n format: formatFn,\n firstDayOfWeek = 'sunday',\n locale = defaultLocale,\n showTime = false,\n timeNotation = '12-hour',\n value,\n defaultValue,\n onChange,\n size,\n ...rest\n },\n ref\n ) => {\n const [containerRef, mergedContainerRef] = useForwardedRef(ref);\n const [opened, setOpened] = useState(false);\n const [forwardedValue, setForwardedValue] = useForwardedState({\n value,\n defaultValue,\n onChange,\n });\n\n const format = useMemo(() => {\n if (formatFn) return formatFn;\n return (date: Date) =>\n date.toLocaleString(undefined, {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n ...(showTime\n ? {\n hour: '2-digit',\n minute: '2-digit',\n hour12: timeNotation === '12-hour',\n }\n : {}),\n });\n }, [formatFn, showTime, timeNotation]);\n\n const formattedValue = useMemo(() => {\n if (!forwardedValue) return null;\n return format(forwardedValue);\n }, [forwardedValue, format]);\n\n const closeHandler = useCallback(() => {\n setOpened(false);\n }, []);\n\n useKeyPress(\n (typeof window !== 'undefined' ? window : undefined) as EventTarget,\n 'Escape',\n closeHandler\n );\n const isMinXs = useIsMinWidth('xs');\n\n const calendar = (\n <DatePickerCalendar\n firstDayOfWeek={firstDayOfWeek}\n locale={locale}\n value={forwardedValue}\n onChange={(v) => {\n setForwardedValue(v);\n if (!showTime) closeHandler();\n }}\n />\n );\n\n const valueIsSpecified = useMemo(\n () => formattedValue !== undefined && formattedValue !== null,\n [formattedValue]\n );\n\n const rightValue = useMemo(() => {\n if (valueIsSpecified) {\n return (\n <div aria-hidden>\n <Button\n type='ghost'\n wide='never'\n size='small'\n disabled={disabled}\n onClick={(e) => {\n setForwardedValue(null);\n e.stopPropagation();\n }}\n onKeyDown={(e) => {\n if (disabled) return;\n if (['Enter', ' '].includes(e.key)) {\n setForwardedValue(null);\n if (!containerRef.current) return;\n containerRef.current.focus();\n e.preventDefault();\n e.stopPropagation();\n }\n }}\n aria-label={locale.clearLabel}\n >\n <ClearIcon />\n </Button>\n </div>\n );\n }\n return (\n right || <IconContainer>{opened ? <Up /> : <Down />}</IconContainer>\n );\n }, [\n containerRef,\n disabled,\n locale.clearLabel,\n opened,\n right,\n setForwardedValue,\n valueIsSpecified,\n ]);\n\n const rightHasPaddingValue = useMemo(() => {\n if (valueIsSpecified) return false;\n return right ? rightHasPadding : true;\n }, [right, rightHasPadding, valueIsSpecified]);\n\n const timeComponent = useMemo(\n () =>\n showTime && forwardedValue ? (\n <TimeContainer>\n <TimePicker\n autoFocus\n disabled={disabled}\n notation={timeNotation}\n value={forwardedValue}\n onChange={setForwardedValue}\n onKeyDown={(e) => {\n if (disabled) return;\n if (e.key === 'Enter') {\n setOpened(!opened);\n }\n }}\n />\n </TimeContainer>\n ) : null,\n [\n disabled,\n forwardedValue,\n opened,\n setForwardedValue,\n showTime,\n timeNotation,\n ]\n );\n\n return (\n <>\n <SelectContainer\n opened={opened}\n disabled={disabled}\n size={size}\n tabIndex={!disabled ? 0 : -1}\n onClick={() => {\n if (disabled) return;\n setOpened(!opened);\n }}\n onKeyDown={(e) => {\n if (disabled) return;\n if (['Enter', ' '].includes(e.key)) {\n setOpened(!opened);\n e.preventDefault();\n }\n }}\n onMouseDown={(e) => e.preventDefault()}\n role='combobox'\n aria-label={\n forwardedValue\n ? getAccessibilityDateLabel(forwardedValue, locale)\n : undefined\n }\n aria-disabled={disabled}\n {...rest}\n ref={mergedContainerRef}\n >\n {left && (\n <ThemeOverrider\n overrides={(t) => ({\n buttonPaddingHorizontal: 0.8,\n baseHeight: t.selectToggleListItemHeight / t.sizes.small,\n })}\n >\n <LeftAddon hasPadding={leftHasPadding}>{left}</LeftAddon>\n </ThemeOverrider>\n )}\n\n <Content hasLeft={!!left} hasRight={!!right}>\n {valueIsSpecified ? (\n <Title disabled={disabled} aria-hidden>\n {formattedValue}\n </Title>\n ) : (\n <Placeholder>{placeholder}</Placeholder>\n )}\n </Content>\n\n {rightValue && (\n <ThemeOverrider\n overrides={(t) => ({\n buttonPaddingHorizontal: 0.8,\n baseHeight: t.selectToggleListItemHeight / t.sizes.small,\n })}\n >\n <RightAddon hasPadding={rightHasPaddingValue}>\n {rightValue}\n </RightAddon>\n </ThemeOverrider>\n )}\n </SelectContainer>\n\n {isMinXs ? (\n <StyledPopover\n trigger={containerRef}\n placement='bottom-start'\n visible={opened}\n onClose={closeHandler}\n size={size}\n >\n {calendar}\n {timeComponent}\n </StyledPopover>\n ) : (\n <Modal\n title={placeholder}\n footer={null}\n visible={opened}\n onClose={closeHandler}\n size={size}\n >\n {calendar}\n {timeComponent}\n </Modal>\n )}\n </>\n );\n }\n);\n\nDatePicker.displayName = 'DatePicker';\n\nexport default DatePicker;\n"],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ var _utils = require("@os-design/utils");
|
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _Button = _interopRequireDefault(require("../Button"));
|
|
12
12
|
var _Input = _interopRequireDefault(require("../Input"));
|
|
13
|
-
var _excluded = ["notation", "value", "defaultValue", "onChange", "onSelect", "right"];
|
|
13
|
+
var _excluded = ["notation", "value", "defaultValue", "onChange", "onSelect", "onKeyDown", "disabled", "right"];
|
|
14
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
15
15
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
16
16
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -23,6 +23,11 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
|
|
|
23
23
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
24
24
|
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
25
25
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
26
|
+
var pad = function pad(n) {
|
|
27
|
+
return n.toString().padStart(2, '0');
|
|
28
|
+
};
|
|
29
|
+
var HOURS_12 = 12 * 60 * 60 * 1000;
|
|
30
|
+
|
|
26
31
|
/**
|
|
27
32
|
* The component to choose a time.
|
|
28
33
|
*/
|
|
@@ -35,6 +40,10 @@ var TimePicker = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
35
40
|
onChange = _ref$onChange === void 0 ? function () {} : _ref$onChange,
|
|
36
41
|
_ref$onSelect = _ref.onSelect,
|
|
37
42
|
_onSelect = _ref$onSelect === void 0 ? function () {} : _ref$onSelect,
|
|
43
|
+
_ref$onKeyDown = _ref.onKeyDown,
|
|
44
|
+
onKeyDown = _ref$onKeyDown === void 0 ? function () {} : _ref$onKeyDown,
|
|
45
|
+
_ref$disabled = _ref.disabled,
|
|
46
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
38
47
|
right = _ref.right,
|
|
39
48
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
40
49
|
var _useForwardedRef = (0, _utils.useForwardedRef)(ref),
|
|
@@ -56,28 +65,41 @@ var TimePicker = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
56
65
|
_useState2 = _slicedToArray(_useState, 2),
|
|
57
66
|
selection = _useState2[0],
|
|
58
67
|
setSelection = _useState2[1];
|
|
59
|
-
var
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
68
|
+
var isPm = (0, _react.useMemo)(function () {
|
|
69
|
+
return !!forwardedValue && forwardedValue.getHours() >= 12;
|
|
70
|
+
}, [forwardedValue]);
|
|
71
|
+
var setTime = (0, _react.useCallback)(function (time) {
|
|
72
|
+
var _parseTime = (0, _timePickerUtils.parseTime)(time, notation, isPm),
|
|
73
|
+
_parseTime2 = _slicedToArray(_parseTime, 2),
|
|
74
|
+
h = _parseTime2[0],
|
|
75
|
+
m = _parseTime2[1];
|
|
76
|
+
var nextValue = new Date(forwardedValue ? forwardedValue.getTime() : 0);
|
|
77
|
+
nextValue.setHours(h);
|
|
78
|
+
nextValue.setMinutes(m);
|
|
79
|
+
setForwardedValue(nextValue);
|
|
80
|
+
}, [forwardedValue, isPm, notation, setForwardedValue]);
|
|
81
|
+
var setTimeRef = (0, _react.useRef)(setTime);
|
|
63
82
|
(0, _react.useEffect)(function () {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
83
|
+
setTimeRef.current = setTime;
|
|
84
|
+
}, [setTime]);
|
|
85
|
+
var time = (0, _react.useMemo)(function () {
|
|
86
|
+
if (!forwardedValue) return notation === '12-hour' ? '12:00' : '00:00';
|
|
87
|
+
var hour = notation === '12-hour' ? forwardedValue.getHours() % 12 || 12 : forwardedValue.getHours();
|
|
88
|
+
var minute = forwardedValue.getMinutes();
|
|
89
|
+
return "".concat(pad(hour), ":").concat(pad(minute));
|
|
90
|
+
}, [forwardedValue, notation]);
|
|
91
|
+
var changePeriod = (0, _react.useCallback)(function (nextIsPm) {
|
|
92
|
+
if (!forwardedValue) return;
|
|
93
|
+
var nextValue = new Date(forwardedValue.getTime() + HOURS_12 * (nextIsPm ? 1 : -1));
|
|
94
|
+
setForwardedValue(nextValue);
|
|
95
|
+
}, [forwardedValue, setForwardedValue]);
|
|
68
96
|
|
|
69
97
|
// Update the selection
|
|
70
98
|
(0, _react.useEffect)(function () {
|
|
71
99
|
if (!inputRef.current) return;
|
|
72
100
|
inputRef.current.setSelectionRange(selection.start, selection.end);
|
|
73
101
|
}, [inputRef, selection]);
|
|
74
|
-
var
|
|
75
|
-
if (!forwardedValue) return notation === '12-hour' ? '12:00' : '00:00';
|
|
76
|
-
var hour = forwardedValue.getHours().toString().padStart(2, '0');
|
|
77
|
-
var minute = forwardedValue.getMinutes().toString().padStart(2, '0');
|
|
78
|
-
return "".concat(hour, ":").concat(minute);
|
|
79
|
-
}, [forwardedValue, notation]);
|
|
80
|
-
var onKeyDown = (0, _react.useCallback)(function (e) {
|
|
102
|
+
var keyDownHandler = (0, _react.useCallback)(function (e) {
|
|
81
103
|
var nextCaret = selection.start;
|
|
82
104
|
if (e.key === 'ArrowUp' || e.key === 'ArrowLeft' && e.metaKey) {
|
|
83
105
|
nextCaret = 0;
|
|
@@ -88,36 +110,38 @@ var TimePicker = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
88
110
|
} else if (e.key === 'ArrowRight') {
|
|
89
111
|
nextCaret = selection.start < 5 ? selection.start + 1 : 5;
|
|
90
112
|
} else if (e.key === 'Backspace') {
|
|
91
|
-
|
|
113
|
+
setTimeRef.current('00:00');
|
|
92
114
|
nextCaret = 0;
|
|
93
115
|
} else if ((0, _timePickerUtils.isDigitKey)(e.key)) {
|
|
94
116
|
var pos = selection.start === 2 ? 3 : selection.start;
|
|
95
117
|
if (pos === 5) pos = 0;
|
|
96
|
-
|
|
97
|
-
setForwardedValue((0, _timePickerUtils.timeToDate)(nextTime, period));
|
|
118
|
+
setTimeRef.current((0, _timePickerUtils.replaceChar)(time, pos, e.key));
|
|
98
119
|
nextCaret = pos < 5 ? pos + 1 : 5;
|
|
99
120
|
}
|
|
100
121
|
setSelection({
|
|
101
122
|
start: nextCaret,
|
|
102
123
|
end: nextCaret
|
|
103
124
|
});
|
|
125
|
+
onKeyDown(e);
|
|
104
126
|
e.preventDefault();
|
|
105
|
-
}, [
|
|
127
|
+
}, [onKeyDown, selection.start, time]);
|
|
106
128
|
return /*#__PURE__*/_react["default"].createElement(_Input["default"], _extends({
|
|
107
129
|
type: "text",
|
|
108
130
|
inputMode: "decimal",
|
|
109
131
|
role: "spinbutton",
|
|
110
132
|
minLength: 5,
|
|
111
133
|
maxLength: 5,
|
|
134
|
+
disabled: disabled,
|
|
112
135
|
value: time,
|
|
113
|
-
right: /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
136
|
+
right: /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, notation === '12-hour' && /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
114
137
|
type: "ghost",
|
|
115
138
|
wide: "never",
|
|
116
139
|
size: "small",
|
|
140
|
+
disabled: disabled,
|
|
117
141
|
onClick: function onClick() {
|
|
118
|
-
return
|
|
142
|
+
return changePeriod(!isPm);
|
|
119
143
|
}
|
|
120
|
-
},
|
|
144
|
+
}, isPm ? 'PM' : 'AM'), right),
|
|
121
145
|
onSelect: function onSelect(e) {
|
|
122
146
|
// Update the selection state.
|
|
123
147
|
var _e$currentTarget = e.currentTarget,
|
|
@@ -129,7 +153,7 @@ var TimePicker = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
129
153
|
});
|
|
130
154
|
_onSelect(e);
|
|
131
155
|
},
|
|
132
|
-
onKeyDown:
|
|
156
|
+
onKeyDown: keyDownHandler
|
|
133
157
|
}, rest, {
|
|
134
158
|
ref: mergedInputRef
|
|
135
159
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["TimePicker","forwardRef","ref","notation","value","defaultValue","onChange","onSelect","right","rest","useForwardedRef","inputRef","mergedInputRef","useForwardedState","forwardedValue","setForwardedValue","useState","start","end","selection","setSelection","period","setPeriod","useEffect","current","setSelectionRange","time","useMemo","hour","getHours","toString","padStart","minute","getMinutes","onKeyDown","useCallback","e","nextCaret","key","metaKey","timeToDate","isDigitKey","pos","nextTime","replaceChar","preventDefault","currentTarget","selectionStart","selectionEnd","displayName"],"sources":["../../../src/TimePicker/index.tsx"],"sourcesContent":["import {\n isDigitKey,\n replaceChar,\n timeToDate,\n} from '@os-design/time-picker-utils';\nimport { useForwardedRef, useForwardedState } from '@os-design/utils';\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport Button from '../Button';\nimport Input, { InputProps } from '../Input';\n\nexport interface TimePickerProps\n extends Omit<InputProps, 'type' | 'value' | 'defaultValue' | 'onChange'> {\n /**\n * The time notation.\n * @default 12-hour\n */\n notation?: '12-hour' | '24-hour';\n /**\n * The selected date.\n * @default undefined\n */\n value?: Date;\n /**\n * The default value.\n * @default undefined\n */\n defaultValue?: Date;\n /**\n * The change event handler.\n * @default undefined\n */\n onChange?: (value: Date) => void;\n}\n\ninterface Selection {\n start: number;\n end: number;\n}\n\n/**\n * The component to choose a time.\n */\nconst TimePicker = forwardRef<HTMLInputElement, TimePickerProps>(\n (\n {\n notation = '12-hour',\n value,\n defaultValue,\n onChange = () => {},\n onSelect = () => {},\n right,\n ...rest\n },\n ref\n ) => {\n const [inputRef, mergedInputRef] = useForwardedRef(ref);\n const [forwardedValue, setForwardedValue] = useForwardedState({\n value,\n defaultValue,\n onChange,\n });\n const [selection, setSelection] = useState<Selection>({ start: 0, end: 0 });\n const [period, setPeriod] = useState<'AM' | 'PM' | null>(null);\n\n useEffect(() => {\n if (notation === '12-hour') {\n setPeriod('AM');\n }\n }, [notation]);\n\n // Update the selection\n useEffect(() => {\n if (!inputRef.current) return;\n inputRef.current.setSelectionRange(selection.start, selection.end);\n }, [inputRef, selection]);\n\n const time = useMemo(() => {\n if (!forwardedValue) return notation === '12-hour' ? '12:00' : '00:00';\n const hour = forwardedValue.getHours().toString().padStart(2, '0');\n const minute = forwardedValue.getMinutes().toString().padStart(2, '0');\n return `${hour}:${minute}`;\n }, [forwardedValue, notation]);\n\n const onKeyDown = useCallback(\n (e) => {\n let nextCaret = selection.start;\n if (e.key === 'ArrowUp' || (e.key === 'ArrowLeft' && e.metaKey)) {\n nextCaret = 0;\n } else if (\n e.key === 'ArrowDown' ||\n (e.key === 'ArrowRight' && e.metaKey)\n ) {\n nextCaret = 5;\n } else if (e.key === 'ArrowLeft') {\n nextCaret = selection.start > 0 ? selection.start - 1 : 0;\n } else if (e.key === 'ArrowRight') {\n nextCaret = selection.start < 5 ? selection.start + 1 : 5;\n } else if (e.key === 'Backspace') {\n setForwardedValue(timeToDate('00:00', period));\n nextCaret = 0;\n } else if (isDigitKey(e.key)) {\n let pos = selection.start === 2 ? 3 : selection.start;\n if (pos === 5) pos = 0;\n const nextTime = replaceChar(time, pos, e.key);\n setForwardedValue(timeToDate(nextTime, period));\n nextCaret = pos < 5 ? pos + 1 : 5;\n }\n setSelection({ start: nextCaret, end: nextCaret });\n e.preventDefault();\n },\n [period, selection.start, setForwardedValue, time]\n );\n\n return (\n <Input\n type='text'\n inputMode='decimal'\n role='spinbutton'\n minLength={5}\n maxLength={5}\n value={time}\n right={\n <>\n <Button\n type='ghost'\n wide='never'\n size='small'\n onClick={() => setPeriod(period === 'AM' ? 'PM' : 'AM')}\n >\n {period}\n </Button>\n {right}\n </>\n }\n onSelect={(e) => {\n // Update the selection state.\n const { selectionStart, selectionEnd } = e.currentTarget;\n setSelection({ start: selectionStart || 0, end: selectionEnd || 0 });\n onSelect(e);\n }}\n onKeyDown={onKeyDown}\n {...rest}\n ref={mergedInputRef}\n />\n );\n }\n);\n\nTimePicker.displayName = 'TimePicker';\n\nexport default TimePicker;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["pad","n","toString","padStart","HOURS_12","TimePicker","forwardRef","ref","notation","value","defaultValue","onChange","onSelect","onKeyDown","disabled","right","rest","useForwardedRef","inputRef","mergedInputRef","useForwardedState","forwardedValue","setForwardedValue","useState","start","end","selection","setSelection","isPm","useMemo","getHours","setTime","useCallback","time","parseTime","h","m","nextValue","Date","getTime","setHours","setMinutes","setTimeRef","useRef","useEffect","current","hour","minute","getMinutes","changePeriod","nextIsPm","setSelectionRange","keyDownHandler","e","nextCaret","key","metaKey","isDigitKey","pos","replaceChar","preventDefault","currentTarget","selectionStart","selectionEnd","displayName"],"sources":["../../../src/TimePicker/index.tsx"],"sourcesContent":["import {\n isDigitKey,\n replaceChar,\n parseTime,\n} from '@os-design/time-picker-utils';\nimport { useForwardedRef, useForwardedState } from '@os-design/utils';\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Button from '../Button';\nimport Input, { InputProps } from '../Input';\n\nexport interface TimePickerProps\n extends Omit<InputProps, 'type' | 'value' | 'defaultValue' | 'onChange'> {\n /**\n * The time notation.\n * @default 12-hour\n */\n notation?: '12-hour' | '24-hour';\n /**\n * The selected date.\n * @default undefined\n */\n value?: Date;\n /**\n * The default value.\n * @default undefined\n */\n defaultValue?: Date;\n /**\n * The change event handler.\n * @default undefined\n */\n onChange?: (value: Date) => void;\n}\n\ninterface Selection {\n start: number;\n end: number;\n}\n\nconst pad = (n: number) => n.toString().padStart(2, '0');\nconst HOURS_12 = 12 * 60 * 60 * 1000;\n\n/**\n * The component to choose a time.\n */\nconst TimePicker = forwardRef<HTMLInputElement, TimePickerProps>(\n (\n {\n notation = '12-hour',\n value,\n defaultValue,\n onChange = () => {},\n onSelect = () => {},\n onKeyDown = () => {},\n disabled = false,\n right,\n ...rest\n },\n ref\n ) => {\n const [inputRef, mergedInputRef] = useForwardedRef(ref);\n const [forwardedValue, setForwardedValue] = useForwardedState({\n value,\n defaultValue,\n onChange,\n });\n const [selection, setSelection] = useState<Selection>({ start: 0, end: 0 });\n\n const isPm = useMemo(\n () => !!forwardedValue && forwardedValue.getHours() >= 12,\n [forwardedValue]\n );\n\n const setTime = useCallback(\n (time: string) => {\n const [h, m] = parseTime(time, notation, isPm);\n const nextValue = new Date(\n forwardedValue ? forwardedValue.getTime() : 0\n );\n nextValue.setHours(h);\n nextValue.setMinutes(m);\n setForwardedValue(nextValue);\n },\n [forwardedValue, isPm, notation, setForwardedValue]\n );\n\n const setTimeRef = useRef(setTime);\n useEffect(() => {\n setTimeRef.current = setTime;\n }, [setTime]);\n\n const time = useMemo(() => {\n if (!forwardedValue) return notation === '12-hour' ? '12:00' : '00:00';\n const hour =\n notation === '12-hour'\n ? forwardedValue.getHours() % 12 || 12\n : forwardedValue.getHours();\n const minute = forwardedValue.getMinutes();\n return `${pad(hour)}:${pad(minute)}`;\n }, [forwardedValue, notation]);\n\n const changePeriod = useCallback(\n (nextIsPm: boolean) => {\n if (!forwardedValue) return;\n const nextValue = new Date(\n forwardedValue.getTime() + HOURS_12 * (nextIsPm ? 1 : -1)\n );\n setForwardedValue(nextValue);\n },\n [forwardedValue, setForwardedValue]\n );\n\n // Update the selection\n useEffect(() => {\n if (!inputRef.current) return;\n inputRef.current.setSelectionRange(selection.start, selection.end);\n }, [inputRef, selection]);\n\n const keyDownHandler = useCallback(\n (e) => {\n let nextCaret = selection.start;\n if (e.key === 'ArrowUp' || (e.key === 'ArrowLeft' && e.metaKey)) {\n nextCaret = 0;\n } else if (\n e.key === 'ArrowDown' ||\n (e.key === 'ArrowRight' && e.metaKey)\n ) {\n nextCaret = 5;\n } else if (e.key === 'ArrowLeft') {\n nextCaret = selection.start > 0 ? selection.start - 1 : 0;\n } else if (e.key === 'ArrowRight') {\n nextCaret = selection.start < 5 ? selection.start + 1 : 5;\n } else if (e.key === 'Backspace') {\n setTimeRef.current('00:00');\n nextCaret = 0;\n } else if (isDigitKey(e.key)) {\n let pos = selection.start === 2 ? 3 : selection.start;\n if (pos === 5) pos = 0;\n setTimeRef.current(replaceChar(time, pos, e.key));\n nextCaret = pos < 5 ? pos + 1 : 5;\n }\n setSelection({ start: nextCaret, end: nextCaret });\n onKeyDown(e);\n e.preventDefault();\n },\n [onKeyDown, selection.start, time]\n );\n\n return (\n <Input\n type='text'\n inputMode='decimal'\n role='spinbutton'\n minLength={5}\n maxLength={5}\n disabled={disabled}\n value={time}\n right={\n <>\n {notation === '12-hour' && (\n <Button\n type='ghost'\n wide='never'\n size='small'\n disabled={disabled}\n onClick={() => changePeriod(!isPm)}\n >\n {isPm ? 'PM' : 'AM'}\n </Button>\n )}\n\n {right}\n </>\n }\n onSelect={(e) => {\n // Update the selection state.\n const { selectionStart, selectionEnd } = e.currentTarget;\n setSelection({ start: selectionStart || 0, end: selectionEnd || 0 });\n onSelect(e);\n }}\n onKeyDown={keyDownHandler}\n {...rest}\n ref={mergedInputRef}\n />\n );\n }\n);\n\nTimePicker.displayName = 'TimePicker';\n\nexport default TimePicker;\n"],"mappings":";;;;;;;AAAA;AAKA;AACA;AAQA;AACA;AAA6C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+B7C,IAAMA,GAAG,GAAG,SAANA,GAAG,CAAIC,CAAS;EAAA,OAAKA,CAAC,CAACC,QAAQ,EAAE,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAAA;AACxD,IAAMC,QAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;;AAEpC;AACA;AACA;AACA,IAAMC,UAAU,gBAAG,IAAAC,iBAAU,EAC3B,gBAYEC,GAAG,EACA;EAAA,yBAXDC,QAAQ;IAARA,QAAQ,8BAAG,SAAS;IACpBC,KAAK,QAALA,KAAK;IACLC,YAAY,QAAZA,YAAY;IAAA,qBACZC,QAAQ;IAARA,QAAQ,8BAAG,YAAM,CAAC,CAAC;IAAA,qBACnBC,QAAQ;IAARA,SAAQ,8BAAG,YAAM,CAAC,CAAC;IAAA,sBACnBC,SAAS;IAATA,SAAS,+BAAG,YAAM,CAAC,CAAC;IAAA,qBACpBC,QAAQ;IAARA,QAAQ,8BAAG,KAAK;IAChBC,KAAK,QAALA,KAAK;IACFC,IAAI;EAIT,uBAAmC,IAAAC,sBAAe,EAACV,GAAG,CAAC;IAAA;IAAhDW,QAAQ;IAAEC,cAAc;EAC/B,yBAA4C,IAAAC,wBAAiB,EAAC;MAC5DX,KAAK,EAALA,KAAK;MACLC,YAAY,EAAZA,YAAY;MACZC,QAAQ,EAARA;IACF,CAAC,CAAC;IAAA;IAJKU,cAAc;IAAEC,iBAAiB;EAKxC,gBAAkC,IAAAC,eAAQ,EAAY;MAAEC,KAAK,EAAE,CAAC;MAAEC,GAAG,EAAE;IAAE,CAAC,CAAC;IAAA;IAApEC,SAAS;IAAEC,YAAY;EAE9B,IAAMC,IAAI,GAAG,IAAAC,cAAO,EAClB;IAAA,OAAM,CAAC,CAACR,cAAc,IAAIA,cAAc,CAACS,QAAQ,EAAE,IAAI,EAAE;EAAA,GACzD,CAACT,cAAc,CAAC,CACjB;EAED,IAAMU,OAAO,GAAG,IAAAC,kBAAW,EACzB,UAACC,IAAY,EAAK;IAChB,iBAAe,IAAAC,0BAAS,EAACD,IAAI,EAAEzB,QAAQ,EAAEoB,IAAI,CAAC;MAAA;MAAvCO,CAAC;MAAEC,CAAC;IACX,IAAMC,SAAS,GAAG,IAAIC,IAAI,CACxBjB,cAAc,GAAGA,cAAc,CAACkB,OAAO,EAAE,GAAG,CAAC,CAC9C;IACDF,SAAS,CAACG,QAAQ,CAACL,CAAC,CAAC;IACrBE,SAAS,CAACI,UAAU,CAACL,CAAC,CAAC;IACvBd,iBAAiB,CAACe,SAAS,CAAC;EAC9B,CAAC,EACD,CAAChB,cAAc,EAAEO,IAAI,EAAEpB,QAAQ,EAAEc,iBAAiB,CAAC,CACpD;EAED,IAAMoB,UAAU,GAAG,IAAAC,aAAM,EAACZ,OAAO,CAAC;EAClC,IAAAa,gBAAS,EAAC,YAAM;IACdF,UAAU,CAACG,OAAO,GAAGd,OAAO;EAC9B,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAEb,IAAME,IAAI,GAAG,IAAAJ,cAAO,EAAC,YAAM;IACzB,IAAI,CAACR,cAAc,EAAE,OAAOb,QAAQ,KAAK,SAAS,GAAG,OAAO,GAAG,OAAO;IACtE,IAAMsC,IAAI,GACRtC,QAAQ,KAAK,SAAS,GAClBa,cAAc,CAACS,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GACpCT,cAAc,CAACS,QAAQ,EAAE;IAC/B,IAAMiB,MAAM,GAAG1B,cAAc,CAAC2B,UAAU,EAAE;IAC1C,iBAAUhD,GAAG,CAAC8C,IAAI,CAAC,cAAI9C,GAAG,CAAC+C,MAAM,CAAC;EACpC,CAAC,EAAE,CAAC1B,cAAc,EAAEb,QAAQ,CAAC,CAAC;EAE9B,IAAMyC,YAAY,GAAG,IAAAjB,kBAAW,EAC9B,UAACkB,QAAiB,EAAK;IACrB,IAAI,CAAC7B,cAAc,EAAE;IACrB,IAAMgB,SAAS,GAAG,IAAIC,IAAI,CACxBjB,cAAc,CAACkB,OAAO,EAAE,GAAGnC,QAAQ,IAAI8C,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAC1D;IACD5B,iBAAiB,CAACe,SAAS,CAAC;EAC9B,CAAC,EACD,CAAChB,cAAc,EAAEC,iBAAiB,CAAC,CACpC;;EAED;EACA,IAAAsB,gBAAS,EAAC,YAAM;IACd,IAAI,CAAC1B,QAAQ,CAAC2B,OAAO,EAAE;IACvB3B,QAAQ,CAAC2B,OAAO,CAACM,iBAAiB,CAACzB,SAAS,CAACF,KAAK,EAAEE,SAAS,CAACD,GAAG,CAAC;EACpE,CAAC,EAAE,CAACP,QAAQ,EAAEQ,SAAS,CAAC,CAAC;EAEzB,IAAM0B,cAAc,GAAG,IAAApB,kBAAW,EAChC,UAACqB,CAAC,EAAK;IACL,IAAIC,SAAS,GAAG5B,SAAS,CAACF,KAAK;IAC/B,IAAI6B,CAAC,CAACE,GAAG,KAAK,SAAS,IAAKF,CAAC,CAACE,GAAG,KAAK,WAAW,IAAIF,CAAC,CAACG,OAAQ,EAAE;MAC/DF,SAAS,GAAG,CAAC;IACf,CAAC,MAAM,IACLD,CAAC,CAACE,GAAG,KAAK,WAAW,IACpBF,CAAC,CAACE,GAAG,KAAK,YAAY,IAAIF,CAAC,CAACG,OAAQ,EACrC;MACAF,SAAS,GAAG,CAAC;IACf,CAAC,MAAM,IAAID,CAAC,CAACE,GAAG,KAAK,WAAW,EAAE;MAChCD,SAAS,GAAG5B,SAAS,CAACF,KAAK,GAAG,CAAC,GAAGE,SAAS,CAACF,KAAK,GAAG,CAAC,GAAG,CAAC;IAC3D,CAAC,MAAM,IAAI6B,CAAC,CAACE,GAAG,KAAK,YAAY,EAAE;MACjCD,SAAS,GAAG5B,SAAS,CAACF,KAAK,GAAG,CAAC,GAAGE,SAAS,CAACF,KAAK,GAAG,CAAC,GAAG,CAAC;IAC3D,CAAC,MAAM,IAAI6B,CAAC,CAACE,GAAG,KAAK,WAAW,EAAE;MAChCb,UAAU,CAACG,OAAO,CAAC,OAAO,CAAC;MAC3BS,SAAS,GAAG,CAAC;IACf,CAAC,MAAM,IAAI,IAAAG,2BAAU,EAACJ,CAAC,CAACE,GAAG,CAAC,EAAE;MAC5B,IAAIG,GAAG,GAAGhC,SAAS,CAACF,KAAK,KAAK,CAAC,GAAG,CAAC,GAAGE,SAAS,CAACF,KAAK;MACrD,IAAIkC,GAAG,KAAK,CAAC,EAAEA,GAAG,GAAG,CAAC;MACtBhB,UAAU,CAACG,OAAO,CAAC,IAAAc,4BAAW,EAAC1B,IAAI,EAAEyB,GAAG,EAAEL,CAAC,CAACE,GAAG,CAAC,CAAC;MACjDD,SAAS,GAAGI,GAAG,GAAG,CAAC,GAAGA,GAAG,GAAG,CAAC,GAAG,CAAC;IACnC;IACA/B,YAAY,CAAC;MAAEH,KAAK,EAAE8B,SAAS;MAAE7B,GAAG,EAAE6B;IAAU,CAAC,CAAC;IAClDzC,SAAS,CAACwC,CAAC,CAAC;IACZA,CAAC,CAACO,cAAc,EAAE;EACpB,CAAC,EACD,CAAC/C,SAAS,EAAEa,SAAS,CAACF,KAAK,EAAES,IAAI,CAAC,CACnC;EAED,oBACE,gCAAC,iBAAK;IACJ,IAAI,EAAC,MAAM;IACX,SAAS,EAAC,SAAS;IACnB,IAAI,EAAC,YAAY;IACjB,SAAS,EAAE,CAAE;IACb,SAAS,EAAE,CAAE;IACb,QAAQ,EAAEnB,QAAS;IACnB,KAAK,EAAEmB,IAAK;IACZ,KAAK,eACH,kEACGzB,QAAQ,KAAK,SAAS,iBACrB,gCAAC,kBAAM;MACL,IAAI,EAAC,OAAO;MACZ,IAAI,EAAC,OAAO;MACZ,IAAI,EAAC,OAAO;MACZ,QAAQ,EAAEM,QAAS;MACnB,OAAO,EAAE;QAAA,OAAMmC,YAAY,CAAC,CAACrB,IAAI,CAAC;MAAA;IAAC,GAElCA,IAAI,GAAG,IAAI,GAAG,IAAI,CAEtB,EAEAb,KAAK,CAET;IACD,QAAQ,EAAE,kBAACsC,CAAC,EAAK;MACf;MACA,uBAAyCA,CAAC,CAACQ,aAAa;QAAhDC,cAAc,oBAAdA,cAAc;QAAEC,YAAY,oBAAZA,YAAY;MACpCpC,YAAY,CAAC;QAAEH,KAAK,EAAEsC,cAAc,IAAI,CAAC;QAAErC,GAAG,EAAEsC,YAAY,IAAI;MAAE,CAAC,CAAC;MACpEnD,SAAQ,CAACyC,CAAC,CAAC;IACb,CAAE;IACF,SAAS,EAAED;EAAe,GACtBpC,IAAI;IACR,GAAG,EAAEG;EAAe,GACpB;AAEN,CAAC,CACF;AAEDd,UAAU,CAAC2D,WAAW,GAAG,YAAY;AAAC,eAEvB3D,UAAU;AAAA"}
|
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
-
import React, { useCallback, useRef } from 'react';
|
|
3
2
|
import styled from '@emotion/styled';
|
|
4
|
-
import {
|
|
3
|
+
import { getAccessibilityDateLabel, useDatePickerCalendar } from '@os-design/date-picker-utils';
|
|
5
4
|
import { Left, Right } from '@os-design/icons';
|
|
5
|
+
import { ellipsisStyles, resetFocusStyles, transitionStyles } from '@os-design/styles';
|
|
6
6
|
import { clr } from '@os-design/theming';
|
|
7
|
-
import {
|
|
8
|
-
import { getAccessibilityDateLabel, useDatePickerCalendar } from '@os-design/date-picker-utils';
|
|
7
|
+
import React, { useCallback, useEffect, useRef } from 'react';
|
|
9
8
|
import Button from '../Button';
|
|
10
|
-
const Container = styled.div`
|
|
11
|
-
// For popover
|
|
12
|
-
${m.min.xs} {
|
|
13
|
-
padding: ${p => p.theme.datePickerPadding}em;
|
|
14
|
-
}
|
|
15
|
-
`;
|
|
16
9
|
const MonthContainer = styled.div`
|
|
17
10
|
display: flex;
|
|
18
11
|
align-items: center;
|
|
@@ -82,10 +75,27 @@ const DatePickerCalendar = ({
|
|
|
82
75
|
value,
|
|
83
76
|
onChange = () => {}
|
|
84
77
|
}) => {
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
78
|
+
const valueRef = useRef(value);
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
valueRef.current = value;
|
|
81
|
+
}, [value]);
|
|
82
|
+
const changeHandler = useCallback(date => {
|
|
83
|
+
const d = new Date(0);
|
|
84
|
+
d.setFullYear(date.getFullYear());
|
|
85
|
+
d.setMonth(date.getMonth());
|
|
86
|
+
d.setDate(date.getDate());
|
|
87
|
+
d.setHours(0);
|
|
88
|
+
d.setMinutes(0);
|
|
89
|
+
if (valueRef.current) {
|
|
90
|
+
d.setHours(valueRef.current.getHours());
|
|
91
|
+
d.setMinutes(valueRef.current.getMinutes());
|
|
92
|
+
}
|
|
93
|
+
onChange(d);
|
|
88
94
|
}, [onChange]);
|
|
95
|
+
const changeHandlerRef = useRef(changeHandler);
|
|
96
|
+
useEffect(() => {
|
|
97
|
+
changeHandlerRef.current = changeHandler;
|
|
98
|
+
}, [changeHandler]);
|
|
89
99
|
const {
|
|
90
100
|
selectedMonth,
|
|
91
101
|
updateMonth,
|
|
@@ -99,19 +109,17 @@ const DatePickerCalendar = ({
|
|
|
99
109
|
role: 'button',
|
|
100
110
|
'aria-label': getAccessibilityDateLabel(date, locale),
|
|
101
111
|
onClick: () => {
|
|
102
|
-
|
|
103
|
-
onChangeRef.current(date);
|
|
112
|
+
changeHandlerRef.current(date);
|
|
104
113
|
},
|
|
105
114
|
onKeyDown: e => {
|
|
106
|
-
if (!onChangeRef.current) return;
|
|
107
115
|
if (['Enter', ' '].includes(e.key)) {
|
|
108
|
-
|
|
116
|
+
changeHandlerRef.current(date);
|
|
109
117
|
e.preventDefault();
|
|
110
118
|
}
|
|
111
119
|
},
|
|
112
120
|
onMouseDown: e => e.preventDefault()
|
|
113
121
|
}), [locale]);
|
|
114
|
-
return /*#__PURE__*/React.createElement(
|
|
122
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(MonthContainer, null, /*#__PURE__*/React.createElement(Button, {
|
|
115
123
|
type: "ghost",
|
|
116
124
|
wide: "never",
|
|
117
125
|
size: "small",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePickerCalendar.js","names":["React","useCallback","useRef","styled","ellipsisStyles","resetFocusStyles","transitionStyles","Left","Right","clr","m","getAccessibilityDateLabel","useDatePickerCalendar","Button","Container","div","min","xs","p","theme","datePickerPadding","MonthContainer","Month","Calendar","datePickerCellSize","DayOfWeek","datePickerDayOfWeekColorText","sizes","small","Day","datePickerDaySize","borderRadius","datePickerDayColorBgHover","datePickerDayColorTextHover","DayAnotherMonth","datePickerDayAnotherMonthColorText","Today","datePickerTodayColorBg","datePickerTodayColorText","datePickerTodayColorBorder","SelectedDay","datePickerSelectedDayColorBg","datePickerSelectedDayColorText","DatePickerCalendar","firstDayOfWeek","locale","value","onChange","onChangeRef","current","selectedMonth","updateMonth","days","getDayProps","date","tabIndex","role","onClick","onKeyDown","e","includes","key","preventDefault","onMouseDown","prevMonthLabel","months","month","year","nextMonthLabel","shortDaysOfWeek","slice","map","item","type","toISOString","getDate"],"sources":["../../../src/DatePicker/DatePickerCalendar.tsx"],"sourcesContent":["import React, { HTMLAttributes, useCallback, useRef } from 'react';\nimport styled from '@emotion/styled';\nimport {\n ellipsisStyles,\n resetFocusStyles,\n transitionStyles,\n} from '@os-design/styles';\nimport { Left, Right } from '@os-design/icons';\nimport { clr } from '@os-design/theming';\nimport { m } from '@os-design/media';\nimport {\n DatePickerLocale,\n getAccessibilityDateLabel,\n useDatePickerCalendar,\n} from '@os-design/date-picker-utils';\nimport Button from '../Button';\n\ninterface DatePickerCalendarProps {\n firstDayOfWeek: 'sunday' | 'monday';\n locale: DatePickerLocale;\n value?: Date | null;\n onChange?: (value: Date) => void;\n}\n\nconst Container = styled.div`\n // For popover\n ${m.min.xs} {\n padding: ${(p) => p.theme.datePickerPadding}em;\n }\n`;\n\nconst MonthContainer = styled.div`\n display: flex;\n align-items: center;\n margin-bottom: 0.5em;\n`;\n\nconst Month = styled.div`\n flex-grow: 1;\n font-weight: 500;\n text-align: center;\n padding: 0 0.4em;\n ${ellipsisStyles};\n`;\n\nconst Calendar = styled.div`\n display: grid;\n grid-template-columns: repeat(7, ${(p) => p.theme.datePickerCellSize}em);\n grid-auto-rows: ${(p) => p.theme.datePickerCellSize}em;\n justify-content: space-between;\n overflow-x: auto;\n`;\n\nconst DayOfWeek = styled.div`\n justify-self: center;\n align-self: center;\n color: ${(p) => clr(p.theme.datePickerDayOfWeekColorText)};\n font-size: ${(p) => p.theme.sizes.small}em;\n`;\n\nconst Day = styled.div`\n ${resetFocusStyles};\n justify-self: center;\n align-self: center;\n\n width: ${(p) => p.theme.datePickerDaySize}em;\n height: ${(p) => p.theme.datePickerDaySize}em;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n border-radius: ${(p) => p.theme.borderRadius}em;\n cursor: pointer;\n\n @media (hover: hover) {\n &:hover,\n &:focus {\n background-color: ${(p) => clr(p.theme.datePickerDayColorBgHover)};\n color: ${(p) => clr(p.theme.datePickerDayColorTextHover)};\n }\n }\n\n ${transitionStyles('background-color', 'color')};\n`;\n\nconst DayAnotherMonth = styled(Day)`\n color: ${(p) => clr(p.theme.datePickerDayAnotherMonthColorText)};\n`;\n\nconst Today = styled(Day)`\n background-color: ${(p) => clr(p.theme.datePickerTodayColorBg)};\n color: ${(p) => clr(p.theme.datePickerTodayColorText)};\n border: 1px solid ${(p) => clr(p.theme.datePickerTodayColorBorder)};\n box-sizing: border-box;\n`;\n\nconst SelectedDay = styled(Day)`\n background-color: ${(p) => clr(p.theme.datePickerSelectedDayColorBg)};\n color: ${(p) => clr(p.theme.datePickerSelectedDayColorText)};\n`;\n\nconst DatePickerCalendar: React.FC<DatePickerCalendarProps> = ({\n firstDayOfWeek,\n locale,\n value,\n onChange = () => {},\n}) => {\n const onChangeRef = useRef(onChange);\n\n useCallback(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const { selectedMonth, updateMonth, days } = useDatePickerCalendar({\n value,\n firstDayOfWeek,\n });\n\n const getDayProps = useCallback<\n (date: Date) => HTMLAttributes<HTMLDivElement>\n >(\n (date: Date) => ({\n tabIndex: 0,\n role: 'button',\n 'aria-label': getAccessibilityDateLabel(date, locale),\n onClick: () => {\n if (!onChangeRef.current) return;\n onChangeRef.current(date);\n },\n onKeyDown: (e) => {\n if (!onChangeRef.current) return;\n if (['Enter', ' '].includes(e.key)) {\n onChangeRef.current(date);\n e.preventDefault();\n }\n },\n onMouseDown: (e) => e.preventDefault(),\n }),\n [locale]\n );\n\n return (\n <Container>\n <MonthContainer>\n <Button\n type='ghost'\n wide='never'\n size='small'\n onClick={() => updateMonth(-1)}\n aria-label={locale.prevMonthLabel}\n >\n <Left />\n </Button>\n <Month>\n {locale.months[selectedMonth.month]} {selectedMonth.year}\n </Month>\n <Button\n type='ghost'\n wide='never'\n size='small'\n onClick={() => updateMonth(1)}\n aria-label={locale.nextMonthLabel}\n >\n <Right />\n </Button>\n </MonthContainer>\n\n <Calendar>\n {(firstDayOfWeek === 'sunday'\n ? locale.shortDaysOfWeek\n : [...locale.shortDaysOfWeek.slice(1), locale.shortDaysOfWeek[0]]\n ).map((item) => (\n <DayOfWeek key={item}>{item}</DayOfWeek>\n ))}\n\n {days.map(({ type, date }) => {\n if (type === 'dayAnotherMonth') {\n return (\n <DayAnotherMonth key={date.toISOString()} {...getDayProps(date)}>\n {date.getDate()}\n </DayAnotherMonth>\n );\n }\n if (type === 'selectedDay') {\n return (\n <SelectedDay key={date.toISOString()} {...getDayProps(date)}>\n {date.getDate()}\n </SelectedDay>\n );\n }\n if (type === 'today') {\n return (\n <Today key={date.toISOString()} {...getDayProps(date)}>\n {date.getDate()}\n </Today>\n );\n }\n return (\n <Day key={date.toISOString()} {...getDayProps(date)}>\n {date.getDate()}\n </Day>\n );\n })}\n </Calendar>\n </Container>\n );\n};\n\nexport default DatePickerCalendar;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DatePickerCalendar.js","names":["styled","getAccessibilityDateLabel","useDatePickerCalendar","Left","Right","ellipsisStyles","resetFocusStyles","transitionStyles","clr","React","useCallback","useEffect","useRef","Button","MonthContainer","div","Month","Calendar","p","theme","datePickerCellSize","DayOfWeek","datePickerDayOfWeekColorText","sizes","small","Day","datePickerDaySize","borderRadius","datePickerDayColorBgHover","datePickerDayColorTextHover","DayAnotherMonth","datePickerDayAnotherMonthColorText","Today","datePickerTodayColorBg","datePickerTodayColorText","datePickerTodayColorBorder","SelectedDay","datePickerSelectedDayColorBg","datePickerSelectedDayColorText","DatePickerCalendar","firstDayOfWeek","locale","value","onChange","valueRef","current","changeHandler","date","d","Date","setFullYear","getFullYear","setMonth","getMonth","setDate","getDate","setHours","setMinutes","getHours","getMinutes","changeHandlerRef","selectedMonth","updateMonth","days","getDayProps","tabIndex","role","onClick","onKeyDown","e","includes","key","preventDefault","onMouseDown","prevMonthLabel","months","month","year","nextMonthLabel","shortDaysOfWeek","slice","map","item","type","toISOString"],"sources":["../../../src/DatePicker/DatePickerCalendar.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport {\n DatePickerLocale,\n getAccessibilityDateLabel,\n useDatePickerCalendar,\n} from '@os-design/date-picker-utils';\nimport { Left, Right } from '@os-design/icons';\nimport {\n ellipsisStyles,\n resetFocusStyles,\n transitionStyles,\n} from '@os-design/styles';\nimport { clr } from '@os-design/theming';\nimport React, { HTMLAttributes, useCallback, useEffect, useRef } from 'react';\nimport Button from '../Button';\n\ninterface DatePickerCalendarProps {\n firstDayOfWeek: 'sunday' | 'monday';\n locale: DatePickerLocale;\n value?: Date | null;\n onChange?: (value: Date) => void;\n}\n\nconst MonthContainer = styled.div`\n display: flex;\n align-items: center;\n margin-bottom: 0.5em;\n`;\n\nconst Month = styled.div`\n flex-grow: 1;\n font-weight: 500;\n text-align: center;\n padding: 0 0.4em;\n ${ellipsisStyles};\n`;\n\nconst Calendar = styled.div`\n display: grid;\n grid-template-columns: repeat(7, ${(p) => p.theme.datePickerCellSize}em);\n grid-auto-rows: ${(p) => p.theme.datePickerCellSize}em;\n justify-content: space-between;\n overflow-x: auto;\n`;\n\nconst DayOfWeek = styled.div`\n justify-self: center;\n align-self: center;\n color: ${(p) => clr(p.theme.datePickerDayOfWeekColorText)};\n font-size: ${(p) => p.theme.sizes.small}em;\n`;\n\nconst Day = styled.div`\n ${resetFocusStyles};\n justify-self: center;\n align-self: center;\n\n width: ${(p) => p.theme.datePickerDaySize}em;\n height: ${(p) => p.theme.datePickerDaySize}em;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n border-radius: ${(p) => p.theme.borderRadius}em;\n cursor: pointer;\n\n @media (hover: hover) {\n &:hover,\n &:focus {\n background-color: ${(p) => clr(p.theme.datePickerDayColorBgHover)};\n color: ${(p) => clr(p.theme.datePickerDayColorTextHover)};\n }\n }\n\n ${transitionStyles('background-color', 'color')};\n`;\n\nconst DayAnotherMonth = styled(Day)`\n color: ${(p) => clr(p.theme.datePickerDayAnotherMonthColorText)};\n`;\n\nconst Today = styled(Day)`\n background-color: ${(p) => clr(p.theme.datePickerTodayColorBg)};\n color: ${(p) => clr(p.theme.datePickerTodayColorText)};\n border: 1px solid ${(p) => clr(p.theme.datePickerTodayColorBorder)};\n box-sizing: border-box;\n`;\n\nconst SelectedDay = styled(Day)`\n background-color: ${(p) => clr(p.theme.datePickerSelectedDayColorBg)};\n color: ${(p) => clr(p.theme.datePickerSelectedDayColorText)};\n`;\n\nconst DatePickerCalendar: React.FC<DatePickerCalendarProps> = ({\n firstDayOfWeek,\n locale,\n value,\n onChange = () => {},\n}) => {\n const valueRef = useRef(value);\n useEffect(() => {\n valueRef.current = value;\n }, [value]);\n\n const changeHandler = useCallback(\n (date: Date) => {\n const d = new Date(0);\n d.setFullYear(date.getFullYear());\n d.setMonth(date.getMonth());\n d.setDate(date.getDate());\n d.setHours(0);\n d.setMinutes(0);\n if (valueRef.current) {\n d.setHours(valueRef.current.getHours());\n d.setMinutes(valueRef.current.getMinutes());\n }\n onChange(d);\n },\n [onChange]\n );\n\n const changeHandlerRef = useRef(changeHandler);\n useEffect(() => {\n changeHandlerRef.current = changeHandler;\n }, [changeHandler]);\n\n const { selectedMonth, updateMonth, days } = useDatePickerCalendar({\n value,\n firstDayOfWeek,\n });\n\n const getDayProps = useCallback<\n (date: Date) => HTMLAttributes<HTMLDivElement>\n >(\n (date: Date) => ({\n tabIndex: 0,\n role: 'button',\n 'aria-label': getAccessibilityDateLabel(date, locale),\n onClick: () => {\n changeHandlerRef.current(date);\n },\n onKeyDown: (e) => {\n if (['Enter', ' '].includes(e.key)) {\n changeHandlerRef.current(date);\n e.preventDefault();\n }\n },\n onMouseDown: (e) => e.preventDefault(),\n }),\n [locale]\n );\n\n return (\n <>\n <MonthContainer>\n <Button\n type='ghost'\n wide='never'\n size='small'\n onClick={() => updateMonth(-1)}\n aria-label={locale.prevMonthLabel}\n >\n <Left />\n </Button>\n <Month>\n {locale.months[selectedMonth.month]} {selectedMonth.year}\n </Month>\n <Button\n type='ghost'\n wide='never'\n size='small'\n onClick={() => updateMonth(1)}\n aria-label={locale.nextMonthLabel}\n >\n <Right />\n </Button>\n </MonthContainer>\n\n <Calendar>\n {(firstDayOfWeek === 'sunday'\n ? locale.shortDaysOfWeek\n : [...locale.shortDaysOfWeek.slice(1), locale.shortDaysOfWeek[0]]\n ).map((item) => (\n <DayOfWeek key={item}>{item}</DayOfWeek>\n ))}\n\n {days.map(({ type, date }) => {\n if (type === 'dayAnotherMonth') {\n return (\n <DayAnotherMonth key={date.toISOString()} {...getDayProps(date)}>\n {date.getDate()}\n </DayAnotherMonth>\n );\n }\n if (type === 'selectedDay') {\n return (\n <SelectedDay key={date.toISOString()} {...getDayProps(date)}>\n {date.getDate()}\n </SelectedDay>\n );\n }\n if (type === 'today') {\n return (\n <Today key={date.toISOString()} {...getDayProps(date)}>\n {date.getDate()}\n </Today>\n );\n }\n return (\n <Day key={date.toISOString()} {...getDayProps(date)}>\n {date.getDate()}\n </Day>\n );\n })}\n </Calendar>\n </>\n );\n};\n\nexport default DatePickerCalendar;\n"],"mappings":";AAAA,OAAOA,MAAM,MAAM,iBAAiB;AACpC,SAEEC,yBAAyB,EACzBC,qBAAqB,QAChB,8BAA8B;AACrC,SAASC,IAAI,EAAEC,KAAK,QAAQ,kBAAkB;AAC9C,SACEC,cAAc,EACdC,gBAAgB,EAChBC,gBAAgB,QACX,mBAAmB;AAC1B,SAASC,GAAG,QAAQ,oBAAoB;AACxC,OAAOC,KAAK,IAAoBC,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAC7E,OAAOC,MAAM,MAAM,WAAW;AAS9B,MAAMC,cAAc,GAAGd,MAAM,CAACe,GAAI;AAClC;AACA;AACA;AACA,CAAC;AAED,MAAMC,KAAK,GAAGhB,MAAM,CAACe,GAAI;AACzB;AACA;AACA;AACA;AACA,IAAIV,cAAe;AACnB,CAAC;AAED,MAAMY,QAAQ,GAAGjB,MAAM,CAACe,GAAI;AAC5B;AACA,qCAAsCG,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACC,kBAAmB;AACvE,oBAAqBF,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACC,kBAAmB;AACtD;AACA;AACA,CAAC;AAED,MAAMC,SAAS,GAAGrB,MAAM,CAACe,GAAI;AAC7B;AACA;AACA,WAAYG,CAAC,IAAKV,GAAG,CAACU,CAAC,CAACC,KAAK,CAACG,4BAA4B,CAAE;AAC5D,eAAgBJ,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACI,KAAK,CAACC,KAAM;AAC1C,CAAC;AAED,MAAMC,GAAG,GAAGzB,MAAM,CAACe,GAAI;AACvB,IAAIT,gBAAiB;AACrB;AACA;AACA;AACA,WAAYY,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACO,iBAAkB;AAC5C,YAAaR,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACO,iBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA,mBAAoBR,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACQ,YAAa;AAC/C;AACA;AACA;AACA;AACA;AACA,0BAA2BT,CAAC,IAAKV,GAAG,CAACU,CAAC,CAACC,KAAK,CAACS,yBAAyB,CAAE;AACxE,eAAgBV,CAAC,IAAKV,GAAG,CAACU,CAAC,CAACC,KAAK,CAACU,2BAA2B,CAAE;AAC/D;AACA;AACA;AACA,IAAItB,gBAAgB,CAAC,kBAAkB,EAAE,OAAO,CAAE;AAClD,CAAC;AAED,MAAMuB,eAAe,GAAG9B,MAAM,CAACyB,GAAG,CAAE;AACpC,WAAYP,CAAC,IAAKV,GAAG,CAACU,CAAC,CAACC,KAAK,CAACY,kCAAkC,CAAE;AAClE,CAAC;AAED,MAAMC,KAAK,GAAGhC,MAAM,CAACyB,GAAG,CAAE;AAC1B,sBAAuBP,CAAC,IAAKV,GAAG,CAACU,CAAC,CAACC,KAAK,CAACc,sBAAsB,CAAE;AACjE,WAAYf,CAAC,IAAKV,GAAG,CAACU,CAAC,CAACC,KAAK,CAACe,wBAAwB,CAAE;AACxD,sBAAuBhB,CAAC,IAAKV,GAAG,CAACU,CAAC,CAACC,KAAK,CAACgB,0BAA0B,CAAE;AACrE;AACA,CAAC;AAED,MAAMC,WAAW,GAAGpC,MAAM,CAACyB,GAAG,CAAE;AAChC,sBAAuBP,CAAC,IAAKV,GAAG,CAACU,CAAC,CAACC,KAAK,CAACkB,4BAA4B,CAAE;AACvE,WAAYnB,CAAC,IAAKV,GAAG,CAACU,CAAC,CAACC,KAAK,CAACmB,8BAA8B,CAAE;AAC9D,CAAC;AAED,MAAMC,kBAAqD,GAAG,CAAC;EAC7DC,cAAc;EACdC,MAAM;EACNC,KAAK;EACLC,QAAQ,GAAG,MAAM,CAAC;AACpB,CAAC,KAAK;EACJ,MAAMC,QAAQ,GAAGhC,MAAM,CAAC8B,KAAK,CAAC;EAC9B/B,SAAS,CAAC,MAAM;IACdiC,QAAQ,CAACC,OAAO,GAAGH,KAAK;EAC1B,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEX,MAAMI,aAAa,GAAGpC,WAAW,CAC9BqC,IAAU,IAAK;IACd,MAAMC,CAAC,GAAG,IAAIC,IAAI,CAAC,CAAC,CAAC;IACrBD,CAAC,CAACE,WAAW,CAACH,IAAI,CAACI,WAAW,EAAE,CAAC;IACjCH,CAAC,CAACI,QAAQ,CAACL,IAAI,CAACM,QAAQ,EAAE,CAAC;IAC3BL,CAAC,CAACM,OAAO,CAACP,IAAI,CAACQ,OAAO,EAAE,CAAC;IACzBP,CAAC,CAACQ,QAAQ,CAAC,CAAC,CAAC;IACbR,CAAC,CAACS,UAAU,CAAC,CAAC,CAAC;IACf,IAAIb,QAAQ,CAACC,OAAO,EAAE;MACpBG,CAAC,CAACQ,QAAQ,CAACZ,QAAQ,CAACC,OAAO,CAACa,QAAQ,EAAE,CAAC;MACvCV,CAAC,CAACS,UAAU,CAACb,QAAQ,CAACC,OAAO,CAACc,UAAU,EAAE,CAAC;IAC7C;IACAhB,QAAQ,CAACK,CAAC,CAAC;EACb,CAAC,EACD,CAACL,QAAQ,CAAC,CACX;EAED,MAAMiB,gBAAgB,GAAGhD,MAAM,CAACkC,aAAa,CAAC;EAC9CnC,SAAS,CAAC,MAAM;IACdiD,gBAAgB,CAACf,OAAO,GAAGC,aAAa;EAC1C,CAAC,EAAE,CAACA,aAAa,CAAC,CAAC;EAEnB,MAAM;IAAEe,aAAa;IAAEC,WAAW;IAAEC;EAAK,CAAC,GAAG7D,qBAAqB,CAAC;IACjEwC,KAAK;IACLF;EACF,CAAC,CAAC;EAEF,MAAMwB,WAAW,GAAGtD,WAAW,CAG5BqC,IAAU,KAAM;IACfkB,QAAQ,EAAE,CAAC;IACXC,IAAI,EAAE,QAAQ;IACd,YAAY,EAAEjE,yBAAyB,CAAC8C,IAAI,EAAEN,MAAM,CAAC;IACrD0B,OAAO,EAAE,MAAM;MACbP,gBAAgB,CAACf,OAAO,CAACE,IAAI,CAAC;IAChC,CAAC;IACDqB,SAAS,EAAGC,CAAC,IAAK;MAChB,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAACC,QAAQ,CAACD,CAAC,CAACE,GAAG,CAAC,EAAE;QAClCX,gBAAgB,CAACf,OAAO,CAACE,IAAI,CAAC;QAC9BsB,CAAC,CAACG,cAAc,EAAE;MACpB;IACF,CAAC;IACDC,WAAW,EAAGJ,CAAC,IAAKA,CAAC,CAACG,cAAc;EACtC,CAAC,CAAC,EACF,CAAC/B,MAAM,CAAC,CACT;EAED,oBACE,uDACE,oBAAC,cAAc,qBACb,oBAAC,MAAM;IACL,IAAI,EAAC,OAAO;IACZ,IAAI,EAAC,OAAO;IACZ,IAAI,EAAC,OAAO;IACZ,OAAO,EAAE,MAAMqB,WAAW,CAAC,CAAC,CAAC,CAAE;IAC/B,cAAYrB,MAAM,CAACiC;EAAe,gBAElC,oBAAC,IAAI,OAAG,CACD,eACT,oBAAC,KAAK,QACHjC,MAAM,CAACkC,MAAM,CAACd,aAAa,CAACe,KAAK,CAAC,OAAGf,aAAa,CAACgB,IAAI,CAClD,eACR,oBAAC,MAAM;IACL,IAAI,EAAC,OAAO;IACZ,IAAI,EAAC,OAAO;IACZ,IAAI,EAAC,OAAO;IACZ,OAAO,EAAE,MAAMf,WAAW,CAAC,CAAC,CAAE;IAC9B,cAAYrB,MAAM,CAACqC;EAAe,gBAElC,oBAAC,KAAK,OAAG,CACF,CACM,eAEjB,oBAAC,QAAQ,QACN,CAACtC,cAAc,KAAK,QAAQ,GACzBC,MAAM,CAACsC,eAAe,GACtB,CAAC,GAAGtC,MAAM,CAACsC,eAAe,CAACC,KAAK,CAAC,CAAC,CAAC,EAAEvC,MAAM,CAACsC,eAAe,CAAC,CAAC,CAAC,CAAC,EACjEE,GAAG,CAAEC,IAAI,iBACT,oBAAC,SAAS;IAAC,GAAG,EAAEA;EAAK,GAAEA,IAAI,CAC5B,CAAC,EAEDnB,IAAI,CAACkB,GAAG,CAAC,CAAC;IAAEE,IAAI;IAAEpC;EAAK,CAAC,KAAK;IAC5B,IAAIoC,IAAI,KAAK,iBAAiB,EAAE;MAC9B,oBACE,oBAAC,eAAe;QAAC,GAAG,EAAEpC,IAAI,CAACqC,WAAW;MAAG,GAAKpB,WAAW,CAACjB,IAAI,CAAC,GAC5DA,IAAI,CAACQ,OAAO,EAAE,CACC;IAEtB;IACA,IAAI4B,IAAI,KAAK,aAAa,EAAE;MAC1B,oBACE,oBAAC,WAAW;QAAC,GAAG,EAAEpC,IAAI,CAACqC,WAAW;MAAG,GAAKpB,WAAW,CAACjB,IAAI,CAAC,GACxDA,IAAI,CAACQ,OAAO,EAAE,CACH;IAElB;IACA,IAAI4B,IAAI,KAAK,OAAO,EAAE;MACpB,oBACE,oBAAC,KAAK;QAAC,GAAG,EAAEpC,IAAI,CAACqC,WAAW;MAAG,GAAKpB,WAAW,CAACjB,IAAI,CAAC,GAClDA,IAAI,CAACQ,OAAO,EAAE,CACT;IAEZ;IACA,oBACE,oBAAC,GAAG;MAAC,GAAG,EAAER,IAAI,CAACqC,WAAW;IAAG,GAAKpB,WAAW,CAACjB,IAAI,CAAC,GAChDA,IAAI,CAACQ,OAAO,EAAE,CACX;EAEV,CAAC,CAAC,CACO,CACV;AAEP,CAAC;AAED,eAAehB,kBAAkB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
-
import
|
|
2
|
+
import styled from '@emotion/styled';
|
|
3
|
+
import { defaultLocale, getAccessibilityDateLabel } from '@os-design/date-picker-utils';
|
|
3
4
|
import { Down, Up } from '@os-design/icons';
|
|
4
5
|
import { useIsMinWidth } from '@os-design/media';
|
|
5
6
|
import { ThemeOverrider } from '@os-design/theming';
|
|
@@ -10,7 +11,15 @@ import Modal from '../Modal';
|
|
|
10
11
|
import Popover from '../Popover';
|
|
11
12
|
import { SelectContainer } from '../Select';
|
|
12
13
|
import { ClearIcon, Content, IconContainer, LeftAddon, Placeholder, RightAddon, Title } from '../Select/SelectToggle';
|
|
14
|
+
import TimePicker from '../TimePicker';
|
|
13
15
|
import DatePickerCalendar from './DatePickerCalendar';
|
|
16
|
+
const StyledPopover = styled(Popover)`
|
|
17
|
+
padding: ${p => p.theme.datePickerPadding}em;
|
|
18
|
+
`;
|
|
19
|
+
const TimeContainer = styled.div`
|
|
20
|
+
margin-top: 0.5em;
|
|
21
|
+
`;
|
|
22
|
+
|
|
14
23
|
/**
|
|
15
24
|
* The component to choose a date.
|
|
16
25
|
*/
|
|
@@ -21,9 +30,11 @@ const DatePicker = /*#__PURE__*/forwardRef(({
|
|
|
21
30
|
rightHasPadding = false,
|
|
22
31
|
placeholder,
|
|
23
32
|
disabled = false,
|
|
24
|
-
format
|
|
33
|
+
format: formatFn,
|
|
25
34
|
firstDayOfWeek = 'sunday',
|
|
26
35
|
locale = defaultLocale,
|
|
36
|
+
showTime = false,
|
|
37
|
+
timeNotation = '12-hour',
|
|
27
38
|
value,
|
|
28
39
|
defaultValue,
|
|
29
40
|
onChange,
|
|
@@ -37,10 +48,23 @@ const DatePicker = /*#__PURE__*/forwardRef(({
|
|
|
37
48
|
defaultValue,
|
|
38
49
|
onChange
|
|
39
50
|
});
|
|
51
|
+
const format = useMemo(() => {
|
|
52
|
+
if (formatFn) return formatFn;
|
|
53
|
+
return date => date.toLocaleString(undefined, {
|
|
54
|
+
year: 'numeric',
|
|
55
|
+
month: '2-digit',
|
|
56
|
+
day: '2-digit',
|
|
57
|
+
...(showTime ? {
|
|
58
|
+
hour: '2-digit',
|
|
59
|
+
minute: '2-digit',
|
|
60
|
+
hour12: timeNotation === '12-hour'
|
|
61
|
+
} : {})
|
|
62
|
+
});
|
|
63
|
+
}, [formatFn, showTime, timeNotation]);
|
|
40
64
|
const formattedValue = useMemo(() => {
|
|
41
65
|
if (!forwardedValue) return null;
|
|
42
|
-
return format(forwardedValue
|
|
43
|
-
}, [forwardedValue, format
|
|
66
|
+
return format(forwardedValue);
|
|
67
|
+
}, [forwardedValue, format]);
|
|
44
68
|
const closeHandler = useCallback(() => {
|
|
45
69
|
setOpened(false);
|
|
46
70
|
}, []);
|
|
@@ -52,7 +76,7 @@ const DatePicker = /*#__PURE__*/forwardRef(({
|
|
|
52
76
|
value: forwardedValue,
|
|
53
77
|
onChange: v => {
|
|
54
78
|
setForwardedValue(v);
|
|
55
|
-
closeHandler();
|
|
79
|
+
if (!showTime) closeHandler();
|
|
56
80
|
}
|
|
57
81
|
});
|
|
58
82
|
const valueIsSpecified = useMemo(() => formattedValue !== undefined && formattedValue !== null, [formattedValue]);
|
|
@@ -88,6 +112,19 @@ const DatePicker = /*#__PURE__*/forwardRef(({
|
|
|
88
112
|
if (valueIsSpecified) return false;
|
|
89
113
|
return right ? rightHasPadding : true;
|
|
90
114
|
}, [right, rightHasPadding, valueIsSpecified]);
|
|
115
|
+
const timeComponent = useMemo(() => showTime && forwardedValue ? /*#__PURE__*/React.createElement(TimeContainer, null, /*#__PURE__*/React.createElement(TimePicker, {
|
|
116
|
+
autoFocus: true,
|
|
117
|
+
disabled: disabled,
|
|
118
|
+
notation: timeNotation,
|
|
119
|
+
value: forwardedValue,
|
|
120
|
+
onChange: setForwardedValue,
|
|
121
|
+
onKeyDown: e => {
|
|
122
|
+
if (disabled) return;
|
|
123
|
+
if (e.key === 'Enter') {
|
|
124
|
+
setOpened(!opened);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
})) : null, [disabled, forwardedValue, opened, setForwardedValue, showTime, timeNotation]);
|
|
91
128
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SelectContainer, _extends({
|
|
92
129
|
opened: opened,
|
|
93
130
|
disabled: disabled,
|
|
@@ -130,19 +167,19 @@ const DatePicker = /*#__PURE__*/forwardRef(({
|
|
|
130
167
|
})
|
|
131
168
|
}, /*#__PURE__*/React.createElement(RightAddon, {
|
|
132
169
|
hasPadding: rightHasPaddingValue
|
|
133
|
-
}, rightValue))), isMinXs ? /*#__PURE__*/React.createElement(
|
|
170
|
+
}, rightValue))), isMinXs ? /*#__PURE__*/React.createElement(StyledPopover, {
|
|
134
171
|
trigger: containerRef,
|
|
135
172
|
placement: "bottom-start",
|
|
136
173
|
visible: opened,
|
|
137
174
|
onClose: closeHandler,
|
|
138
175
|
size: size
|
|
139
|
-
}, calendar) : /*#__PURE__*/React.createElement(Modal, {
|
|
176
|
+
}, calendar, timeComponent) : /*#__PURE__*/React.createElement(Modal, {
|
|
140
177
|
title: placeholder,
|
|
141
178
|
footer: null,
|
|
142
179
|
visible: opened,
|
|
143
180
|
onClose: closeHandler,
|
|
144
181
|
size: size
|
|
145
|
-
}, calendar));
|
|
182
|
+
}, calendar, timeComponent));
|
|
146
183
|
});
|
|
147
184
|
DatePicker.displayName = 'DatePicker';
|
|
148
185
|
export default DatePicker;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["defaultFormat","defaultLocale","getAccessibilityDateLabel","Down","Up","useIsMinWidth","ThemeOverrider","useForwardedRef","useForwardedState","useKeyPress","React","forwardRef","useCallback","useMemo","useState","Button","Modal","Popover","SelectContainer","ClearIcon","Content","IconContainer","LeftAddon","Placeholder","RightAddon","Title","DatePickerCalendar","DatePicker","left","leftHasPadding","right","rightHasPadding","placeholder","disabled","format","firstDayOfWeek","locale","value","defaultValue","onChange","size","rest","ref","containerRef","mergedContainerRef","opened","setOpened","forwardedValue","setForwardedValue","formattedValue","closeHandler","window","undefined","isMinXs","calendar","v","valueIsSpecified","rightValue","e","stopPropagation","includes","key","current","focus","preventDefault","clearLabel","rightHasPaddingValue","t","buttonPaddingHorizontal","baseHeight","selectToggleListItemHeight","sizes","small","displayName"],"sources":["../../../src/DatePicker/index.tsx"],"sourcesContent":["import {\n DatePickerLocale,\n defaultFormat,\n defaultLocale,\n getAccessibilityDateLabel,\n} from '@os-design/date-picker-utils';\nimport { Down, Up } from '@os-design/icons';\nimport { useIsMinWidth } from '@os-design/media';\nimport { WithSize } from '@os-design/styles';\nimport { ThemeOverrider } from '@os-design/theming';\nimport {\n useForwardedRef,\n useForwardedState,\n useKeyPress,\n} from '@os-design/utils';\nimport React, { forwardRef, useCallback, useMemo, useState } from 'react';\nimport Button from '../Button';\nimport Modal from '../Modal';\nimport Popover from '../Popover';\nimport { SelectContainer } from '../Select';\nimport {\n ClearIcon,\n Content,\n IconContainer,\n LeftAddon,\n Placeholder,\n RightAddon,\n Title,\n} from '../Select/SelectToggle';\nimport DatePickerCalendar from './DatePickerCalendar';\n\ntype JsxDivProps = Omit<\n JSX.IntrinsicElements['div'],\n 'value' | 'defaultValue' | 'onChange' | 'ref'\n>;\nexport interface DatePickerProps extends JsxDivProps, WithSize {\n /**\n * The component located on the left side.\n * @default undefined\n */\n left?: React.ReactNode;\n /**\n * Adds padding to the left component.\n * It can be useful when passing an icon or text in the left component.\n * @default false\n */\n leftHasPadding?: boolean;\n /**\n * The component located on the right side.\n * @default undefined\n */\n right?: React.ReactNode;\n /**\n * Adds padding to the right component.\n * It can be useful when passing an icon or text in the right component.\n * @default false\n */\n rightHasPadding?: boolean;\n /**\n * The placeholder of the date picker.\n * @default undefined\n */\n placeholder?: string;\n /**\n * Whether the date picker is disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * The format of the date.\n * @default undefined\n */\n format?: (date: Date) => string;\n /**\n * The first day of the week.\n * @default sunday\n */\n firstDayOfWeek?: 'sunday' | 'monday';\n /**\n * The locale of the date picker.\n * @default undefined\n */\n locale?: DatePickerLocale;\n /**\n * Selected timestamp.\n * @default undefined\n */\n value?: Date | null;\n /**\n * The default value.\n * @default undefined\n */\n defaultValue?: Date | null;\n /**\n * The change event handler.\n * @default undefined\n */\n onChange?: (value: Date | null) => void;\n}\n\n/**\n * The component to choose a date.\n */\nconst DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(\n (\n {\n left,\n leftHasPadding = false,\n right,\n rightHasPadding = false,\n placeholder,\n disabled = false,\n format = defaultFormat,\n firstDayOfWeek = 'sunday',\n locale = defaultLocale,\n value,\n defaultValue,\n onChange,\n size,\n ...rest\n },\n ref\n ) => {\n const [containerRef, mergedContainerRef] = useForwardedRef(ref);\n const [opened, setOpened] = useState(false);\n const [forwardedValue, setForwardedValue] = useForwardedState({\n value,\n defaultValue,\n onChange,\n });\n\n const formattedValue = useMemo(() => {\n if (!forwardedValue) return null;\n return format(forwardedValue, locale);\n }, [forwardedValue, format, locale]);\n\n const closeHandler = useCallback(() => {\n setOpened(false);\n }, []);\n\n useKeyPress(\n (typeof window !== 'undefined' ? window : undefined) as EventTarget,\n 'Escape',\n closeHandler\n );\n const isMinXs = useIsMinWidth('xs');\n\n const calendar = (\n <DatePickerCalendar\n firstDayOfWeek={firstDayOfWeek}\n locale={locale}\n value={forwardedValue}\n onChange={(v) => {\n setForwardedValue(v);\n closeHandler();\n }}\n />\n );\n\n const valueIsSpecified = useMemo(\n () => formattedValue !== undefined && formattedValue !== null,\n [formattedValue]\n );\n\n const rightValue = useMemo(() => {\n if (valueIsSpecified) {\n return (\n <div aria-hidden>\n <Button\n type='ghost'\n wide='never'\n size='small'\n disabled={disabled}\n onClick={(e) => {\n setForwardedValue(null);\n e.stopPropagation();\n }}\n onKeyDown={(e) => {\n if (disabled) return;\n if (['Enter', ' '].includes(e.key)) {\n setForwardedValue(null);\n if (!containerRef.current) return;\n containerRef.current.focus();\n e.preventDefault();\n e.stopPropagation();\n }\n }}\n aria-label={locale.clearLabel}\n >\n <ClearIcon />\n </Button>\n </div>\n );\n }\n return (\n right || <IconContainer>{opened ? <Up /> : <Down />}</IconContainer>\n );\n }, [\n containerRef,\n disabled,\n locale.clearLabel,\n opened,\n right,\n setForwardedValue,\n valueIsSpecified,\n ]);\n\n const rightHasPaddingValue = useMemo(() => {\n if (valueIsSpecified) return false;\n return right ? rightHasPadding : true;\n }, [right, rightHasPadding, valueIsSpecified]);\n\n return (\n <>\n <SelectContainer\n opened={opened}\n disabled={disabled}\n size={size}\n tabIndex={!disabled ? 0 : -1}\n onClick={() => {\n if (disabled) return;\n setOpened(!opened);\n }}\n onKeyDown={(e) => {\n if (disabled) return;\n if (['Enter', ' '].includes(e.key)) {\n setOpened(!opened);\n e.preventDefault();\n }\n }}\n onMouseDown={(e) => e.preventDefault()}\n role='combobox'\n aria-label={\n forwardedValue\n ? getAccessibilityDateLabel(forwardedValue, locale)\n : undefined\n }\n aria-disabled={disabled}\n {...rest}\n ref={mergedContainerRef}\n >\n {left && (\n <ThemeOverrider\n overrides={(t) => ({\n buttonPaddingHorizontal: 0.8,\n baseHeight: t.selectToggleListItemHeight / t.sizes.small,\n })}\n >\n <LeftAddon hasPadding={leftHasPadding}>{left}</LeftAddon>\n </ThemeOverrider>\n )}\n\n <Content hasLeft={!!left} hasRight={!!right}>\n {valueIsSpecified ? (\n <Title disabled={disabled} aria-hidden>\n {formattedValue}\n </Title>\n ) : (\n <Placeholder>{placeholder}</Placeholder>\n )}\n </Content>\n\n {rightValue && (\n <ThemeOverrider\n overrides={(t) => ({\n buttonPaddingHorizontal: 0.8,\n baseHeight: t.selectToggleListItemHeight / t.sizes.small,\n })}\n >\n <RightAddon hasPadding={rightHasPaddingValue}>\n {rightValue}\n </RightAddon>\n </ThemeOverrider>\n )}\n </SelectContainer>\n\n {isMinXs ? (\n <Popover\n trigger={containerRef}\n placement='bottom-start'\n visible={opened}\n onClose={closeHandler}\n size={size}\n >\n {calendar}\n </Popover>\n ) : (\n <Modal\n title={placeholder}\n footer={null}\n visible={opened}\n onClose={closeHandler}\n size={size}\n >\n {calendar}\n </Modal>\n )}\n </>\n );\n }\n);\n\nDatePicker.displayName = 'DatePicker';\n\nexport default DatePicker;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["styled","defaultLocale","getAccessibilityDateLabel","Down","Up","useIsMinWidth","ThemeOverrider","useForwardedRef","useForwardedState","useKeyPress","React","forwardRef","useCallback","useMemo","useState","Button","Modal","Popover","SelectContainer","ClearIcon","Content","IconContainer","LeftAddon","Placeholder","RightAddon","Title","TimePicker","DatePickerCalendar","StyledPopover","p","theme","datePickerPadding","TimeContainer","div","DatePicker","left","leftHasPadding","right","rightHasPadding","placeholder","disabled","format","formatFn","firstDayOfWeek","locale","showTime","timeNotation","value","defaultValue","onChange","size","rest","ref","containerRef","mergedContainerRef","opened","setOpened","forwardedValue","setForwardedValue","date","toLocaleString","undefined","year","month","day","hour","minute","hour12","formattedValue","closeHandler","window","isMinXs","calendar","v","valueIsSpecified","rightValue","e","stopPropagation","includes","key","current","focus","preventDefault","clearLabel","rightHasPaddingValue","timeComponent","t","buttonPaddingHorizontal","baseHeight","selectToggleListItemHeight","sizes","small","displayName"],"sources":["../../../src/DatePicker/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport {\n DatePickerLocale,\n defaultLocale,\n getAccessibilityDateLabel,\n} from '@os-design/date-picker-utils';\nimport { Down, Up } from '@os-design/icons';\nimport { useIsMinWidth } from '@os-design/media';\nimport { WithSize } from '@os-design/styles';\nimport { ThemeOverrider } from '@os-design/theming';\nimport {\n useForwardedRef,\n useForwardedState,\n useKeyPress,\n} from '@os-design/utils';\nimport React, { forwardRef, useCallback, useMemo, useState } from 'react';\nimport Button from '../Button';\nimport Modal from '../Modal';\nimport Popover from '../Popover';\nimport { SelectContainer } from '../Select';\nimport {\n ClearIcon,\n Content,\n IconContainer,\n LeftAddon,\n Placeholder,\n RightAddon,\n Title,\n} from '../Select/SelectToggle';\nimport TimePicker from '../TimePicker';\nimport DatePickerCalendar from './DatePickerCalendar';\n\ntype JsxDivProps = Omit<\n JSX.IntrinsicElements['div'],\n 'value' | 'defaultValue' | 'onChange' | 'ref'\n>;\nexport interface DatePickerProps extends JsxDivProps, WithSize {\n /**\n * The component located on the left side.\n * @default undefined\n */\n left?: React.ReactNode;\n /**\n * Adds padding to the left component.\n * It can be useful when passing an icon or text in the left component.\n * @default false\n */\n leftHasPadding?: boolean;\n /**\n * The component located on the right side.\n * @default undefined\n */\n right?: React.ReactNode;\n /**\n * Adds padding to the right component.\n * It can be useful when passing an icon or text in the right component.\n * @default false\n */\n rightHasPadding?: boolean;\n /**\n * The placeholder of the date picker.\n * @default undefined\n */\n placeholder?: string;\n /**\n * Whether the date picker is disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * The format of the date.\n * @default undefined\n */\n format?: (date: Date) => string;\n /**\n * The first day of the week.\n * @default sunday\n */\n firstDayOfWeek?: 'sunday' | 'monday';\n /**\n * The locale of the date picker.\n * @default undefined\n */\n locale?: DatePickerLocale;\n /**\n * Whether the time is shown.\n * @default false\n */\n showTime?: boolean;\n /**\n * The time notation.\n * @default 12-hour\n */\n timeNotation?: '12-hour' | '24-hour';\n /**\n * Selected date.\n * @default undefined\n */\n value?: Date | null;\n /**\n * The default value.\n * @default undefined\n */\n defaultValue?: Date | null;\n /**\n * The change event handler.\n * @default undefined\n */\n onChange?: (value: Date | null) => void;\n}\n\nconst StyledPopover = styled(Popover)`\n padding: ${(p) => p.theme.datePickerPadding}em;\n`;\n\nconst TimeContainer = styled.div`\n margin-top: 0.5em;\n`;\n\n/**\n * The component to choose a date.\n */\nconst DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(\n (\n {\n left,\n leftHasPadding = false,\n right,\n rightHasPadding = false,\n placeholder,\n disabled = false,\n format: formatFn,\n firstDayOfWeek = 'sunday',\n locale = defaultLocale,\n showTime = false,\n timeNotation = '12-hour',\n value,\n defaultValue,\n onChange,\n size,\n ...rest\n },\n ref\n ) => {\n const [containerRef, mergedContainerRef] = useForwardedRef(ref);\n const [opened, setOpened] = useState(false);\n const [forwardedValue, setForwardedValue] = useForwardedState({\n value,\n defaultValue,\n onChange,\n });\n\n const format = useMemo(() => {\n if (formatFn) return formatFn;\n return (date: Date) =>\n date.toLocaleString(undefined, {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n ...(showTime\n ? {\n hour: '2-digit',\n minute: '2-digit',\n hour12: timeNotation === '12-hour',\n }\n : {}),\n });\n }, [formatFn, showTime, timeNotation]);\n\n const formattedValue = useMemo(() => {\n if (!forwardedValue) return null;\n return format(forwardedValue);\n }, [forwardedValue, format]);\n\n const closeHandler = useCallback(() => {\n setOpened(false);\n }, []);\n\n useKeyPress(\n (typeof window !== 'undefined' ? window : undefined) as EventTarget,\n 'Escape',\n closeHandler\n );\n const isMinXs = useIsMinWidth('xs');\n\n const calendar = (\n <DatePickerCalendar\n firstDayOfWeek={firstDayOfWeek}\n locale={locale}\n value={forwardedValue}\n onChange={(v) => {\n setForwardedValue(v);\n if (!showTime) closeHandler();\n }}\n />\n );\n\n const valueIsSpecified = useMemo(\n () => formattedValue !== undefined && formattedValue !== null,\n [formattedValue]\n );\n\n const rightValue = useMemo(() => {\n if (valueIsSpecified) {\n return (\n <div aria-hidden>\n <Button\n type='ghost'\n wide='never'\n size='small'\n disabled={disabled}\n onClick={(e) => {\n setForwardedValue(null);\n e.stopPropagation();\n }}\n onKeyDown={(e) => {\n if (disabled) return;\n if (['Enter', ' '].includes(e.key)) {\n setForwardedValue(null);\n if (!containerRef.current) return;\n containerRef.current.focus();\n e.preventDefault();\n e.stopPropagation();\n }\n }}\n aria-label={locale.clearLabel}\n >\n <ClearIcon />\n </Button>\n </div>\n );\n }\n return (\n right || <IconContainer>{opened ? <Up /> : <Down />}</IconContainer>\n );\n }, [\n containerRef,\n disabled,\n locale.clearLabel,\n opened,\n right,\n setForwardedValue,\n valueIsSpecified,\n ]);\n\n const rightHasPaddingValue = useMemo(() => {\n if (valueIsSpecified) return false;\n return right ? rightHasPadding : true;\n }, [right, rightHasPadding, valueIsSpecified]);\n\n const timeComponent = useMemo(\n () =>\n showTime && forwardedValue ? (\n <TimeContainer>\n <TimePicker\n autoFocus\n disabled={disabled}\n notation={timeNotation}\n value={forwardedValue}\n onChange={setForwardedValue}\n onKeyDown={(e) => {\n if (disabled) return;\n if (e.key === 'Enter') {\n setOpened(!opened);\n }\n }}\n />\n </TimeContainer>\n ) : null,\n [\n disabled,\n forwardedValue,\n opened,\n setForwardedValue,\n showTime,\n timeNotation,\n ]\n );\n\n return (\n <>\n <SelectContainer\n opened={opened}\n disabled={disabled}\n size={size}\n tabIndex={!disabled ? 0 : -1}\n onClick={() => {\n if (disabled) return;\n setOpened(!opened);\n }}\n onKeyDown={(e) => {\n if (disabled) return;\n if (['Enter', ' '].includes(e.key)) {\n setOpened(!opened);\n e.preventDefault();\n }\n }}\n onMouseDown={(e) => e.preventDefault()}\n role='combobox'\n aria-label={\n forwardedValue\n ? getAccessibilityDateLabel(forwardedValue, locale)\n : undefined\n }\n aria-disabled={disabled}\n {...rest}\n ref={mergedContainerRef}\n >\n {left && (\n <ThemeOverrider\n overrides={(t) => ({\n buttonPaddingHorizontal: 0.8,\n baseHeight: t.selectToggleListItemHeight / t.sizes.small,\n })}\n >\n <LeftAddon hasPadding={leftHasPadding}>{left}</LeftAddon>\n </ThemeOverrider>\n )}\n\n <Content hasLeft={!!left} hasRight={!!right}>\n {valueIsSpecified ? (\n <Title disabled={disabled} aria-hidden>\n {formattedValue}\n </Title>\n ) : (\n <Placeholder>{placeholder}</Placeholder>\n )}\n </Content>\n\n {rightValue && (\n <ThemeOverrider\n overrides={(t) => ({\n buttonPaddingHorizontal: 0.8,\n baseHeight: t.selectToggleListItemHeight / t.sizes.small,\n })}\n >\n <RightAddon hasPadding={rightHasPaddingValue}>\n {rightValue}\n </RightAddon>\n </ThemeOverrider>\n )}\n </SelectContainer>\n\n {isMinXs ? (\n <StyledPopover\n trigger={containerRef}\n placement='bottom-start'\n visible={opened}\n onClose={closeHandler}\n size={size}\n >\n {calendar}\n {timeComponent}\n </StyledPopover>\n ) : (\n <Modal\n title={placeholder}\n footer={null}\n visible={opened}\n onClose={closeHandler}\n size={size}\n >\n {calendar}\n {timeComponent}\n </Modal>\n )}\n </>\n );\n }\n);\n\nDatePicker.displayName = 'DatePicker';\n\nexport default DatePicker;\n"],"mappings":"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"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
-
import { isDigitKey, replaceChar,
|
|
2
|
+
import { isDigitKey, replaceChar, parseTime } from '@os-design/time-picker-utils';
|
|
3
3
|
import { useForwardedRef, useForwardedState } from '@os-design/utils';
|
|
4
|
-
import React, { forwardRef, useCallback, useEffect, useMemo, useState } from 'react';
|
|
4
|
+
import React, { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
5
5
|
import Button from '../Button';
|
|
6
6
|
import Input from '../Input';
|
|
7
|
+
const pad = n => n.toString().padStart(2, '0');
|
|
8
|
+
const HOURS_12 = 12 * 60 * 60 * 1000;
|
|
9
|
+
|
|
7
10
|
/**
|
|
8
11
|
* The component to choose a time.
|
|
9
12
|
*/
|
|
@@ -13,6 +16,8 @@ const TimePicker = /*#__PURE__*/forwardRef(({
|
|
|
13
16
|
defaultValue,
|
|
14
17
|
onChange = () => {},
|
|
15
18
|
onSelect = () => {},
|
|
19
|
+
onKeyDown = () => {},
|
|
20
|
+
disabled = false,
|
|
16
21
|
right,
|
|
17
22
|
...rest
|
|
18
23
|
}, ref) => {
|
|
@@ -26,25 +31,36 @@ const TimePicker = /*#__PURE__*/forwardRef(({
|
|
|
26
31
|
start: 0,
|
|
27
32
|
end: 0
|
|
28
33
|
});
|
|
29
|
-
const
|
|
34
|
+
const isPm = useMemo(() => !!forwardedValue && forwardedValue.getHours() >= 12, [forwardedValue]);
|
|
35
|
+
const setTime = useCallback(time => {
|
|
36
|
+
const [h, m] = parseTime(time, notation, isPm);
|
|
37
|
+
const nextValue = new Date(forwardedValue ? forwardedValue.getTime() : 0);
|
|
38
|
+
nextValue.setHours(h);
|
|
39
|
+
nextValue.setMinutes(m);
|
|
40
|
+
setForwardedValue(nextValue);
|
|
41
|
+
}, [forwardedValue, isPm, notation, setForwardedValue]);
|
|
42
|
+
const setTimeRef = useRef(setTime);
|
|
30
43
|
useEffect(() => {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
44
|
+
setTimeRef.current = setTime;
|
|
45
|
+
}, [setTime]);
|
|
46
|
+
const time = useMemo(() => {
|
|
47
|
+
if (!forwardedValue) return notation === '12-hour' ? '12:00' : '00:00';
|
|
48
|
+
const hour = notation === '12-hour' ? forwardedValue.getHours() % 12 || 12 : forwardedValue.getHours();
|
|
49
|
+
const minute = forwardedValue.getMinutes();
|
|
50
|
+
return `${pad(hour)}:${pad(minute)}`;
|
|
51
|
+
}, [forwardedValue, notation]);
|
|
52
|
+
const changePeriod = useCallback(nextIsPm => {
|
|
53
|
+
if (!forwardedValue) return;
|
|
54
|
+
const nextValue = new Date(forwardedValue.getTime() + HOURS_12 * (nextIsPm ? 1 : -1));
|
|
55
|
+
setForwardedValue(nextValue);
|
|
56
|
+
}, [forwardedValue, setForwardedValue]);
|
|
35
57
|
|
|
36
58
|
// Update the selection
|
|
37
59
|
useEffect(() => {
|
|
38
60
|
if (!inputRef.current) return;
|
|
39
61
|
inputRef.current.setSelectionRange(selection.start, selection.end);
|
|
40
62
|
}, [inputRef, selection]);
|
|
41
|
-
const
|
|
42
|
-
if (!forwardedValue) return notation === '12-hour' ? '12:00' : '00:00';
|
|
43
|
-
const hour = forwardedValue.getHours().toString().padStart(2, '0');
|
|
44
|
-
const minute = forwardedValue.getMinutes().toString().padStart(2, '0');
|
|
45
|
-
return `${hour}:${minute}`;
|
|
46
|
-
}, [forwardedValue, notation]);
|
|
47
|
-
const onKeyDown = useCallback(e => {
|
|
63
|
+
const keyDownHandler = useCallback(e => {
|
|
48
64
|
let nextCaret = selection.start;
|
|
49
65
|
if (e.key === 'ArrowUp' || e.key === 'ArrowLeft' && e.metaKey) {
|
|
50
66
|
nextCaret = 0;
|
|
@@ -55,34 +71,36 @@ const TimePicker = /*#__PURE__*/forwardRef(({
|
|
|
55
71
|
} else if (e.key === 'ArrowRight') {
|
|
56
72
|
nextCaret = selection.start < 5 ? selection.start + 1 : 5;
|
|
57
73
|
} else if (e.key === 'Backspace') {
|
|
58
|
-
|
|
74
|
+
setTimeRef.current('00:00');
|
|
59
75
|
nextCaret = 0;
|
|
60
76
|
} else if (isDigitKey(e.key)) {
|
|
61
77
|
let pos = selection.start === 2 ? 3 : selection.start;
|
|
62
78
|
if (pos === 5) pos = 0;
|
|
63
|
-
|
|
64
|
-
setForwardedValue(timeToDate(nextTime, period));
|
|
79
|
+
setTimeRef.current(replaceChar(time, pos, e.key));
|
|
65
80
|
nextCaret = pos < 5 ? pos + 1 : 5;
|
|
66
81
|
}
|
|
67
82
|
setSelection({
|
|
68
83
|
start: nextCaret,
|
|
69
84
|
end: nextCaret
|
|
70
85
|
});
|
|
86
|
+
onKeyDown(e);
|
|
71
87
|
e.preventDefault();
|
|
72
|
-
}, [
|
|
88
|
+
}, [onKeyDown, selection.start, time]);
|
|
73
89
|
return /*#__PURE__*/React.createElement(Input, _extends({
|
|
74
90
|
type: "text",
|
|
75
91
|
inputMode: "decimal",
|
|
76
92
|
role: "spinbutton",
|
|
77
93
|
minLength: 5,
|
|
78
94
|
maxLength: 5,
|
|
95
|
+
disabled: disabled,
|
|
79
96
|
value: time,
|
|
80
|
-
right: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {
|
|
97
|
+
right: /*#__PURE__*/React.createElement(React.Fragment, null, notation === '12-hour' && /*#__PURE__*/React.createElement(Button, {
|
|
81
98
|
type: "ghost",
|
|
82
99
|
wide: "never",
|
|
83
100
|
size: "small",
|
|
84
|
-
|
|
85
|
-
|
|
101
|
+
disabled: disabled,
|
|
102
|
+
onClick: () => changePeriod(!isPm)
|
|
103
|
+
}, isPm ? 'PM' : 'AM'), right),
|
|
86
104
|
onSelect: e => {
|
|
87
105
|
// Update the selection state.
|
|
88
106
|
const {
|
|
@@ -95,7 +113,7 @@ const TimePicker = /*#__PURE__*/forwardRef(({
|
|
|
95
113
|
});
|
|
96
114
|
onSelect(e);
|
|
97
115
|
},
|
|
98
|
-
onKeyDown:
|
|
116
|
+
onKeyDown: keyDownHandler
|
|
99
117
|
}, rest, {
|
|
100
118
|
ref: mergedInputRef
|
|
101
119
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["isDigitKey","replaceChar","timeToDate","useForwardedRef","useForwardedState","React","forwardRef","useCallback","useEffect","useMemo","useState","Button","Input","TimePicker","notation","value","defaultValue","onChange","onSelect","right","rest","ref","inputRef","mergedInputRef","forwardedValue","setForwardedValue","selection","setSelection","start","end","period","setPeriod","current","setSelectionRange","time","hour","getHours","toString","padStart","minute","getMinutes","onKeyDown","e","nextCaret","key","metaKey","pos","nextTime","preventDefault","selectionStart","selectionEnd","currentTarget","displayName"],"sources":["../../../src/TimePicker/index.tsx"],"sourcesContent":["import {\n isDigitKey,\n replaceChar,\n timeToDate,\n} from '@os-design/time-picker-utils';\nimport { useForwardedRef, useForwardedState } from '@os-design/utils';\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport Button from '../Button';\nimport Input, { InputProps } from '../Input';\n\nexport interface TimePickerProps\n extends Omit<InputProps, 'type' | 'value' | 'defaultValue' | 'onChange'> {\n /**\n * The time notation.\n * @default 12-hour\n */\n notation?: '12-hour' | '24-hour';\n /**\n * The selected date.\n * @default undefined\n */\n value?: Date;\n /**\n * The default value.\n * @default undefined\n */\n defaultValue?: Date;\n /**\n * The change event handler.\n * @default undefined\n */\n onChange?: (value: Date) => void;\n}\n\ninterface Selection {\n start: number;\n end: number;\n}\n\n/**\n * The component to choose a time.\n */\nconst TimePicker = forwardRef<HTMLInputElement, TimePickerProps>(\n (\n {\n notation = '12-hour',\n value,\n defaultValue,\n onChange = () => {},\n onSelect = () => {},\n right,\n ...rest\n },\n ref\n ) => {\n const [inputRef, mergedInputRef] = useForwardedRef(ref);\n const [forwardedValue, setForwardedValue] = useForwardedState({\n value,\n defaultValue,\n onChange,\n });\n const [selection, setSelection] = useState<Selection>({ start: 0, end: 0 });\n const [period, setPeriod] = useState<'AM' | 'PM' | null>(null);\n\n useEffect(() => {\n if (notation === '12-hour') {\n setPeriod('AM');\n }\n }, [notation]);\n\n // Update the selection\n useEffect(() => {\n if (!inputRef.current) return;\n inputRef.current.setSelectionRange(selection.start, selection.end);\n }, [inputRef, selection]);\n\n const time = useMemo(() => {\n if (!forwardedValue) return notation === '12-hour' ? '12:00' : '00:00';\n const hour = forwardedValue.getHours().toString().padStart(2, '0');\n const minute = forwardedValue.getMinutes().toString().padStart(2, '0');\n return `${hour}:${minute}`;\n }, [forwardedValue, notation]);\n\n const onKeyDown = useCallback(\n (e) => {\n let nextCaret = selection.start;\n if (e.key === 'ArrowUp' || (e.key === 'ArrowLeft' && e.metaKey)) {\n nextCaret = 0;\n } else if (\n e.key === 'ArrowDown' ||\n (e.key === 'ArrowRight' && e.metaKey)\n ) {\n nextCaret = 5;\n } else if (e.key === 'ArrowLeft') {\n nextCaret = selection.start > 0 ? selection.start - 1 : 0;\n } else if (e.key === 'ArrowRight') {\n nextCaret = selection.start < 5 ? selection.start + 1 : 5;\n } else if (e.key === 'Backspace') {\n setForwardedValue(timeToDate('00:00', period));\n nextCaret = 0;\n } else if (isDigitKey(e.key)) {\n let pos = selection.start === 2 ? 3 : selection.start;\n if (pos === 5) pos = 0;\n const nextTime = replaceChar(time, pos, e.key);\n setForwardedValue(timeToDate(nextTime, period));\n nextCaret = pos < 5 ? pos + 1 : 5;\n }\n setSelection({ start: nextCaret, end: nextCaret });\n e.preventDefault();\n },\n [period, selection.start, setForwardedValue, time]\n );\n\n return (\n <Input\n type='text'\n inputMode='decimal'\n role='spinbutton'\n minLength={5}\n maxLength={5}\n value={time}\n right={\n <>\n <Button\n type='ghost'\n wide='never'\n size='small'\n onClick={() => setPeriod(period === 'AM' ? 'PM' : 'AM')}\n >\n {period}\n </Button>\n {right}\n </>\n }\n onSelect={(e) => {\n // Update the selection state.\n const { selectionStart, selectionEnd } = e.currentTarget;\n setSelection({ start: selectionStart || 0, end: selectionEnd || 0 });\n onSelect(e);\n }}\n onKeyDown={onKeyDown}\n {...rest}\n ref={mergedInputRef}\n />\n );\n }\n);\n\nTimePicker.displayName = 'TimePicker';\n\nexport default TimePicker;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["isDigitKey","replaceChar","parseTime","useForwardedRef","useForwardedState","React","forwardRef","useCallback","useEffect","useMemo","useRef","useState","Button","Input","pad","n","toString","padStart","HOURS_12","TimePicker","notation","value","defaultValue","onChange","onSelect","onKeyDown","disabled","right","rest","ref","inputRef","mergedInputRef","forwardedValue","setForwardedValue","selection","setSelection","start","end","isPm","getHours","setTime","time","h","m","nextValue","Date","getTime","setHours","setMinutes","setTimeRef","current","hour","minute","getMinutes","changePeriod","nextIsPm","setSelectionRange","keyDownHandler","e","nextCaret","key","metaKey","pos","preventDefault","selectionStart","selectionEnd","currentTarget","displayName"],"sources":["../../../src/TimePicker/index.tsx"],"sourcesContent":["import {\n isDigitKey,\n replaceChar,\n parseTime,\n} from '@os-design/time-picker-utils';\nimport { useForwardedRef, useForwardedState } from '@os-design/utils';\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Button from '../Button';\nimport Input, { InputProps } from '../Input';\n\nexport interface TimePickerProps\n extends Omit<InputProps, 'type' | 'value' | 'defaultValue' | 'onChange'> {\n /**\n * The time notation.\n * @default 12-hour\n */\n notation?: '12-hour' | '24-hour';\n /**\n * The selected date.\n * @default undefined\n */\n value?: Date;\n /**\n * The default value.\n * @default undefined\n */\n defaultValue?: Date;\n /**\n * The change event handler.\n * @default undefined\n */\n onChange?: (value: Date) => void;\n}\n\ninterface Selection {\n start: number;\n end: number;\n}\n\nconst pad = (n: number) => n.toString().padStart(2, '0');\nconst HOURS_12 = 12 * 60 * 60 * 1000;\n\n/**\n * The component to choose a time.\n */\nconst TimePicker = forwardRef<HTMLInputElement, TimePickerProps>(\n (\n {\n notation = '12-hour',\n value,\n defaultValue,\n onChange = () => {},\n onSelect = () => {},\n onKeyDown = () => {},\n disabled = false,\n right,\n ...rest\n },\n ref\n ) => {\n const [inputRef, mergedInputRef] = useForwardedRef(ref);\n const [forwardedValue, setForwardedValue] = useForwardedState({\n value,\n defaultValue,\n onChange,\n });\n const [selection, setSelection] = useState<Selection>({ start: 0, end: 0 });\n\n const isPm = useMemo(\n () => !!forwardedValue && forwardedValue.getHours() >= 12,\n [forwardedValue]\n );\n\n const setTime = useCallback(\n (time: string) => {\n const [h, m] = parseTime(time, notation, isPm);\n const nextValue = new Date(\n forwardedValue ? forwardedValue.getTime() : 0\n );\n nextValue.setHours(h);\n nextValue.setMinutes(m);\n setForwardedValue(nextValue);\n },\n [forwardedValue, isPm, notation, setForwardedValue]\n );\n\n const setTimeRef = useRef(setTime);\n useEffect(() => {\n setTimeRef.current = setTime;\n }, [setTime]);\n\n const time = useMemo(() => {\n if (!forwardedValue) return notation === '12-hour' ? '12:00' : '00:00';\n const hour =\n notation === '12-hour'\n ? forwardedValue.getHours() % 12 || 12\n : forwardedValue.getHours();\n const minute = forwardedValue.getMinutes();\n return `${pad(hour)}:${pad(minute)}`;\n }, [forwardedValue, notation]);\n\n const changePeriod = useCallback(\n (nextIsPm: boolean) => {\n if (!forwardedValue) return;\n const nextValue = new Date(\n forwardedValue.getTime() + HOURS_12 * (nextIsPm ? 1 : -1)\n );\n setForwardedValue(nextValue);\n },\n [forwardedValue, setForwardedValue]\n );\n\n // Update the selection\n useEffect(() => {\n if (!inputRef.current) return;\n inputRef.current.setSelectionRange(selection.start, selection.end);\n }, [inputRef, selection]);\n\n const keyDownHandler = useCallback(\n (e) => {\n let nextCaret = selection.start;\n if (e.key === 'ArrowUp' || (e.key === 'ArrowLeft' && e.metaKey)) {\n nextCaret = 0;\n } else if (\n e.key === 'ArrowDown' ||\n (e.key === 'ArrowRight' && e.metaKey)\n ) {\n nextCaret = 5;\n } else if (e.key === 'ArrowLeft') {\n nextCaret = selection.start > 0 ? selection.start - 1 : 0;\n } else if (e.key === 'ArrowRight') {\n nextCaret = selection.start < 5 ? selection.start + 1 : 5;\n } else if (e.key === 'Backspace') {\n setTimeRef.current('00:00');\n nextCaret = 0;\n } else if (isDigitKey(e.key)) {\n let pos = selection.start === 2 ? 3 : selection.start;\n if (pos === 5) pos = 0;\n setTimeRef.current(replaceChar(time, pos, e.key));\n nextCaret = pos < 5 ? pos + 1 : 5;\n }\n setSelection({ start: nextCaret, end: nextCaret });\n onKeyDown(e);\n e.preventDefault();\n },\n [onKeyDown, selection.start, time]\n );\n\n return (\n <Input\n type='text'\n inputMode='decimal'\n role='spinbutton'\n minLength={5}\n maxLength={5}\n disabled={disabled}\n value={time}\n right={\n <>\n {notation === '12-hour' && (\n <Button\n type='ghost'\n wide='never'\n size='small'\n disabled={disabled}\n onClick={() => changePeriod(!isPm)}\n >\n {isPm ? 'PM' : 'AM'}\n </Button>\n )}\n\n {right}\n </>\n }\n onSelect={(e) => {\n // Update the selection state.\n const { selectionStart, selectionEnd } = e.currentTarget;\n setSelection({ start: selectionStart || 0, end: selectionEnd || 0 });\n onSelect(e);\n }}\n onKeyDown={keyDownHandler}\n {...rest}\n ref={mergedInputRef}\n />\n );\n }\n);\n\nTimePicker.displayName = 'TimePicker';\n\nexport default TimePicker;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePickerCalendar.d.ts","sourceRoot":"","sources":["../../../src/DatePicker/DatePickerCalendar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DatePickerCalendar.d.ts","sourceRoot":"","sources":["../../../src/DatePicker/DatePickerCalendar.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAGjB,MAAM,8BAA8B,CAAC;AAQtC,OAAO,KAAyD,MAAM,OAAO,CAAC;AAG9E,UAAU,uBAAuB;IAC/B,cAAc,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACpC,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;CAClC;AAyED,QAAA,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA4HzD,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -12,6 +12,8 @@ export interface DatePickerProps extends JsxDivProps, WithSize {
|
|
|
12
12
|
format?: (date: Date) => string;
|
|
13
13
|
firstDayOfWeek?: 'sunday' | 'monday';
|
|
14
14
|
locale?: DatePickerLocale;
|
|
15
|
+
showTime?: boolean;
|
|
16
|
+
timeNotation?: '12-hour' | '24-hour';
|
|
15
17
|
value?: Date | null;
|
|
16
18
|
defaultValue?: Date | null;
|
|
17
19
|
onChange?: (value: Date | null) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/DatePicker/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/DatePicker/index.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAGjB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAO7C,OAAO,KAAqD,MAAM,OAAO,CAAC;AAiB1E,aAAK,WAAW,GAAG,IAAI,CACrB,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAC5B,OAAO,GAAG,cAAc,GAAG,UAAU,GAAG,KAAK,CAC9C,CAAC;AACF,MAAM,WAAW,eAAgB,SAAQ,WAAW,EAAE,QAAQ;IAK5D,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAMvB,cAAc,CAAC,EAAE,OAAO,CAAC;IAKzB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAMxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAK1B,WAAW,CAAC,EAAE,MAAM,CAAC;IAKrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAKnB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IAKhC,cAAc,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAKrC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAK1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IAKnB,YAAY,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAKrC,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAKpB,YAAY,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAK3B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;CACzC;AAaD,QAAA,MAAM,UAAU,wFAuPf,CAAC;AAIF,eAAe,UAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/TimePicker/index.tsx"],"names":[],"mappings":"AAMA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/TimePicker/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAON,MAAM,OAAO,CAAC;AAEf,OAAc,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,eACf,SAAQ,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,CAAC;IAKxE,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAKjC,KAAK,CAAC,EAAE,IAAI,CAAC;IAKb,YAAY,CAAC,EAAE,IAAI,CAAC;IAKpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;CAClC;AAaD,QAAA,MAAM,UAAU,0FA6If,CAAC;AAIF,eAAe,UAAU,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@os-design/core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.161",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"repository": "git@gitlab.com:os-team/libs/os-design.git",
|
|
6
6
|
"main": "dist/cjs/index.js",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"access": "public"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@os-design/date-picker-utils": "^1.0.
|
|
32
|
+
"@os-design/date-picker-utils": "^1.0.11",
|
|
33
33
|
"@os-design/icons": "^1.0.41",
|
|
34
34
|
"@os-design/input-number-utils": "^1.0.16",
|
|
35
35
|
"@os-design/media": "^1.0.15",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"@os-design/portal": "^1.0.6",
|
|
38
38
|
"@os-design/styles": "^1.0.39",
|
|
39
39
|
"@os-design/theming": "^1.0.37",
|
|
40
|
-
"@os-design/time-picker-utils": "^1.0.
|
|
40
|
+
"@os-design/time-picker-utils": "^1.0.2",
|
|
41
41
|
"@os-design/utils": "^1.0.55",
|
|
42
42
|
"@os-team/password-score": "^1.0.3",
|
|
43
43
|
"facepaint": "^1.2.1",
|
|
@@ -58,5 +58,5 @@
|
|
|
58
58
|
"react": ">=18",
|
|
59
59
|
"react-dom": ">=18"
|
|
60
60
|
},
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "31c4695c79833264fa8193e19e317c7fcf59efaa"
|
|
62
62
|
}
|