@os-design/core 1.0.163 → 1.0.164
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 +7 -37
- package/dist/cjs/DatePicker/DatePickerCalendar.js.map +1 -1
- package/dist/cjs/DatePicker/index.js +65 -53
- package/dist/cjs/DatePicker/index.js.map +1 -1
- package/dist/cjs/TimePicker/index.js +38 -78
- package/dist/cjs/TimePicker/index.js.map +1 -1
- package/dist/esm/DatePicker/DatePickerCalendar.js +6 -32
- package/dist/esm/DatePicker/DatePickerCalendar.js.map +1 -1
- package/dist/esm/DatePicker/index.js +62 -47
- package/dist/esm/DatePicker/index.js.map +1 -1
- package/dist/esm/TimePicker/index.js +41 -71
- package/dist/esm/TimePicker/index.js.map +1 -1
- package/dist/types/DatePicker/DatePickerCalendar.d.ts +1 -2
- package/dist/types/DatePicker/DatePickerCalendar.d.ts.map +1 -1
- 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
|
@@ -1 +1 @@
|
|
|
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 (notation === '12-hour' || 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 {right}\n </>\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
|
+
{"version":3,"file":"index.js","names":["TimePicker","forwardRef","ref","notation","value","defaultValue","onChange","onSelect","onKeyDown","disabled","right","rest","useForwardedRef","inputRef","mergedInputRef","useForwardedState","forwardedValue","setForwardedValue","useState","start","end","selection","setSelection","useTime","time","isPm","changePeriod","keyHandler","rightComponent","useMemo","keyDownHandler","useCallback","e","key","metaKey","preventDefault","useEffect","current","setSelectionRange","selectHandler","currentTarget","selectionStart","selectionEnd","displayName"],"sources":["../../../src/TimePicker/index.tsx"],"sourcesContent":["import { useTime } 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 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 { time, isPm, changePeriod, keyHandler } = useTime({\n notation,\n selection,\n setSelection,\n forwardedValue,\n setForwardedValue,\n });\n\n const rightComponent = useMemo(() => {\n if (notation !== '12-hour' && !right) return null;\n return (\n <>\n {notation === '12-hour' && (\n <Button\n type='ghost'\n wide='never'\n size='small'\n disabled={disabled}\n onClick={changePeriod}\n >\n {isPm ? 'PM' : 'AM'}\n </Button>\n )}\n {right}\n </>\n );\n }, [changePeriod, disabled, isPm, notation, right]);\n\n const keyDownHandler = useCallback(\n (e) => {\n keyHandler(e.key, e.metaKey);\n onKeyDown(e);\n e.preventDefault();\n },\n [keyHandler, onKeyDown]\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 selectHandler = useCallback(\n (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 [onSelect]\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={rightComponent}\n onSelect={selectHandler}\n onKeyDown={keyDownHandler}\n {...rest}\n ref={mergedInputRef}\n />\n );\n }\n);\n\nTimePicker.displayName = 'TimePicker';\n\nexport default TimePicker;\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAOA;AACA;AAA6C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+B7C;AACA;AACA;AACA,IAAMA,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,QAAQ,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,eAAiD,IAAAC,wBAAO,EAAC;MACvDpB,QAAQ,EAARA,QAAQ;MACRkB,SAAS,EAATA,SAAS;MACTC,YAAY,EAAZA,YAAY;MACZN,cAAc,EAAdA,cAAc;MACdC,iBAAiB,EAAjBA;IACF,CAAC,CAAC;IANMO,IAAI,YAAJA,IAAI;IAAEC,IAAI,YAAJA,IAAI;IAAEC,YAAY,YAAZA,YAAY;IAAEC,UAAU,YAAVA,UAAU;EAQ5C,IAAMC,cAAc,GAAG,IAAAC,cAAO,EAAC,YAAM;IACnC,IAAI1B,QAAQ,KAAK,SAAS,IAAI,CAACO,KAAK,EAAE,OAAO,IAAI;IACjD,oBACE,kEACGP,QAAQ,KAAK,SAAS,iBACrB,gCAAC,kBAAM;MACL,IAAI,EAAC,OAAO;MACZ,IAAI,EAAC,OAAO;MACZ,IAAI,EAAC,OAAO;MACZ,QAAQ,EAAEM,QAAS;MACnB,OAAO,EAAEiB;IAAa,GAErBD,IAAI,GAAG,IAAI,GAAG,IAAI,CAEtB,EACAf,KAAK,CACL;EAEP,CAAC,EAAE,CAACgB,YAAY,EAAEjB,QAAQ,EAAEgB,IAAI,EAAEtB,QAAQ,EAAEO,KAAK,CAAC,CAAC;EAEnD,IAAMoB,cAAc,GAAG,IAAAC,kBAAW,EAChC,UAACC,CAAC,EAAK;IACLL,UAAU,CAACK,CAAC,CAACC,GAAG,EAAED,CAAC,CAACE,OAAO,CAAC;IAC5B1B,SAAS,CAACwB,CAAC,CAAC;IACZA,CAAC,CAACG,cAAc,EAAE;EACpB,CAAC,EACD,CAACR,UAAU,EAAEnB,SAAS,CAAC,CACxB;;EAED;EACA,IAAA4B,gBAAS,EAAC,YAAM;IACd,IAAI,CAACvB,QAAQ,CAACwB,OAAO,EAAE;IACvBxB,QAAQ,CAACwB,OAAO,CAACC,iBAAiB,CAACjB,SAAS,CAACF,KAAK,EAAEE,SAAS,CAACD,GAAG,CAAC;EACpE,CAAC,EAAE,CAACP,QAAQ,EAAEQ,SAAS,CAAC,CAAC;EAEzB,IAAMkB,aAAa,GAAG,IAAAR,kBAAW,EAC/B,UAACC,CAAC,EAAK;IACL;IACA,uBAAyCA,CAAC,CAACQ,aAAa;MAAhDC,cAAc,oBAAdA,cAAc;MAAEC,YAAY,oBAAZA,YAAY;IACpCpB,YAAY,CAAC;MAAEH,KAAK,EAAEsB,cAAc,IAAI,CAAC;MAAErB,GAAG,EAAEsB,YAAY,IAAI;IAAE,CAAC,CAAC;IACpEnC,QAAQ,CAACyB,CAAC,CAAC;EACb,CAAC,EACD,CAACzB,QAAQ,CAAC,CACX;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,EAAEE,QAAS;IACnB,KAAK,EAAEe,IAAK;IACZ,KAAK,EAAEI,cAAe;IACtB,QAAQ,EAAEW,aAAc;IACxB,SAAS,EAAET;EAAe,GACtBnB,IAAI;IACR,GAAG,EAAEG;EAAe,GACpB;AAEN,CAAC,CACF;AAEDd,UAAU,CAAC2C,WAAW,GAAG,YAAY;AAAC,eAEvB3C,UAAU;AAAA"}
|
|
@@ -72,46 +72,20 @@ const SelectedDay = styled(Day)`
|
|
|
72
72
|
const DayInRange = styled(Day)`
|
|
73
73
|
background-color: ${p => clr([...p.theme.colorText.slice(0, 3), (p.theme.colorText[3] || 1) * 0.05])};
|
|
74
74
|
`;
|
|
75
|
-
const createDate = (date, time) => {
|
|
76
|
-
const 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 (time) {
|
|
83
|
-
d.setHours(time.getHours());
|
|
84
|
-
d.setMinutes(time.getMinutes());
|
|
85
|
-
}
|
|
86
|
-
return d;
|
|
87
|
-
};
|
|
88
75
|
const DatePickerCalendar = ({
|
|
89
76
|
firstDayOfWeek,
|
|
90
77
|
locale,
|
|
91
|
-
range,
|
|
92
78
|
value,
|
|
93
|
-
|
|
79
|
+
onSelect = () => {}
|
|
94
80
|
}) => {
|
|
95
81
|
const valueRef = useRef(value);
|
|
96
82
|
useEffect(() => {
|
|
97
83
|
valueRef.current = value;
|
|
98
84
|
}, [value]);
|
|
99
|
-
const
|
|
100
|
-
const changeHandler = useCallback(date => {
|
|
101
|
-
if (range) {
|
|
102
|
-
const dateWithoutTime = createDate(date);
|
|
103
|
-
const dateIndex = rangeStartedRef.current ? 1 : 0;
|
|
104
|
-
const nextValue = valueRef.current && Array.isArray(valueRef.current) && rangeStartedRef.current ? valueRef.current.map((item, index) => index === dateIndex ? createDate(date, item) : new Date(item.getTime())).sort((a, b) => a.getTime() - b.getTime()) : [dateWithoutTime, dateWithoutTime];
|
|
105
|
-
rangeStartedRef.current = !rangeStartedRef.current;
|
|
106
|
-
onChange(nextValue);
|
|
107
|
-
} else if (!Array.isArray(valueRef.current)) {
|
|
108
|
-
onChange(createDate(date, valueRef.current));
|
|
109
|
-
}
|
|
110
|
-
}, [onChange, range]);
|
|
111
|
-
const changeHandlerRef = useRef(changeHandler);
|
|
85
|
+
const onSelectRef = useRef(onSelect);
|
|
112
86
|
useEffect(() => {
|
|
113
|
-
|
|
114
|
-
}, [
|
|
87
|
+
onSelectRef.current = onSelect;
|
|
88
|
+
}, [onSelect]);
|
|
115
89
|
const {
|
|
116
90
|
selectedMonth,
|
|
117
91
|
updateMonth,
|
|
@@ -125,11 +99,11 @@ const DatePickerCalendar = ({
|
|
|
125
99
|
role: 'button',
|
|
126
100
|
'aria-label': getAccessibilityDateLabel(date, locale),
|
|
127
101
|
onClick: () => {
|
|
128
|
-
|
|
102
|
+
onSelectRef.current(date);
|
|
129
103
|
},
|
|
130
104
|
onKeyDown: e => {
|
|
131
105
|
if (['Enter', ' '].includes(e.key)) {
|
|
132
|
-
|
|
106
|
+
onSelectRef.current(date);
|
|
133
107
|
e.preventDefault();
|
|
134
108
|
}
|
|
135
109
|
},
|
|
@@ -1 +1 @@
|
|
|
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","DayInRange","colorText","slice","createDate","date","time","d","Date","setFullYear","getFullYear","setMonth","getMonth","setDate","getDate","setHours","setMinutes","getHours","getMinutes","DatePickerCalendar","firstDayOfWeek","locale","range","value","onChange","valueRef","current","rangeStartedRef","changeHandler","dateWithoutTime","dateIndex","nextValue","Array","isArray","map","item","index","getTime","sort","a","b","changeHandlerRef","selectedMonth","updateMonth","days","getDayProps","tabIndex","role","onClick","onKeyDown","e","includes","key","preventDefault","onMouseDown","prevMonthLabel","months","month","year","nextMonthLabel","shortDaysOfWeek","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, Color } 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 range: boolean;\n value?: Date | [Date, Date] | null;\n onChange?: (value: Date | [Date, 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 DayInRange = styled(Day)`\n background-color: ${(p) =>\n clr([\n ...p.theme.colorText.slice(0, 3),\n (p.theme.colorText[3] || 1) * 0.05,\n ] as Color)};\n`;\n\nconst createDate = (date: Date, time?: Date | null) => {\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 (time) {\n d.setHours(time.getHours());\n d.setMinutes(time.getMinutes());\n }\n return d;\n};\n\nconst DatePickerCalendar: React.FC<DatePickerCalendarProps> = ({\n firstDayOfWeek,\n locale,\n range,\n value,\n onChange = () => {},\n}) => {\n const valueRef = useRef(value);\n useEffect(() => {\n valueRef.current = value;\n }, [value]);\n\n const rangeStartedRef = useRef(false);\n\n const changeHandler = useCallback(\n (date: Date) => {\n if (range) {\n const dateWithoutTime = createDate(date);\n const dateIndex = rangeStartedRef.current ? 1 : 0;\n const nextValue =\n valueRef.current &&\n Array.isArray(valueRef.current) &&\n rangeStartedRef.current\n ? valueRef.current\n .map((item, index) =>\n index === dateIndex\n ? createDate(date, item)\n : new Date(item.getTime())\n )\n .sort((a, b) => a.getTime() - b.getTime())\n : [dateWithoutTime, dateWithoutTime];\n rangeStartedRef.current = !rangeStartedRef.current;\n onChange(nextValue as [Date, Date]);\n } else if (!Array.isArray(valueRef.current)) {\n onChange(createDate(date, valueRef.current));\n }\n },\n [onChange, range]\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 === 'dayInRange') {\n return (\n <DayInRange key={date.toISOString()} {...getDayProps(date)}>\n {date.getDate()}\n </DayInRange>\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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"}
|
|
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","DayInRange","colorText","slice","DatePickerCalendar","firstDayOfWeek","locale","value","onSelect","valueRef","current","onSelectRef","selectedMonth","updateMonth","days","getDayProps","date","tabIndex","role","onClick","onKeyDown","e","includes","key","preventDefault","onMouseDown","prevMonthLabel","months","month","year","nextMonthLabel","shortDaysOfWeek","map","item","type","toISOString","getDate"],"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, Color } 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 | [Date, Date] | null;\n onSelect?: (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 DayInRange = styled(Day)`\n background-color: ${(p) =>\n clr([\n ...p.theme.colorText.slice(0, 3),\n (p.theme.colorText[3] || 1) * 0.05,\n ] as Color)};\n`;\n\nconst DatePickerCalendar: React.FC<DatePickerCalendarProps> = ({\n firstDayOfWeek,\n locale,\n value,\n onSelect = () => {},\n}) => {\n const valueRef = useRef(value);\n useEffect(() => {\n valueRef.current = value;\n }, [value]);\n\n const onSelectRef = useRef(onSelect);\n useEffect(() => {\n onSelectRef.current = onSelect;\n }, [onSelect]);\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 onSelectRef.current(date);\n },\n onKeyDown: (e) => {\n if (['Enter', ' '].includes(e.key)) {\n onSelectRef.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 === 'dayInRange') {\n return (\n <DayInRange key={date.toISOString()} {...getDayProps(date)}>\n {date.getDate()}\n </DayInRange>\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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"}
|
|
@@ -1,11 +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
2
|
import styled from '@emotion/styled';
|
|
3
|
-
import { defaultLocale, getAccessibilityDateLabel } from '@os-design/date-picker-utils';
|
|
3
|
+
import { defaultLocale, getAccessibilityDateLabel, useFormattedValue } from '@os-design/date-picker-utils';
|
|
4
4
|
import { Down, Up } from '@os-design/icons';
|
|
5
5
|
import { useIsMinWidth } from '@os-design/media';
|
|
6
6
|
import { ThemeOverrider } from '@os-design/theming';
|
|
7
7
|
import { useForwardedRef, useForwardedState, useKeyPress } from '@os-design/utils';
|
|
8
|
-
import React, { forwardRef, useCallback, useMemo, useRef, useState } from 'react';
|
|
8
|
+
import React, { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
9
9
|
import Button from '../Button';
|
|
10
10
|
import Modal from '../Modal';
|
|
11
11
|
import Popover from '../Popover';
|
|
@@ -29,6 +29,24 @@ const StyledTimePicker = styled(TimePicker)`
|
|
|
29
29
|
width: 2.5em;
|
|
30
30
|
text-align: center;
|
|
31
31
|
`;
|
|
32
|
+
const timePickerStyle = {
|
|
33
|
+
style: {
|
|
34
|
+
width: 'auto'
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const createDate = (date, time) => {
|
|
38
|
+
const d = new Date(0);
|
|
39
|
+
d.setFullYear(date.getFullYear());
|
|
40
|
+
d.setMonth(date.getMonth());
|
|
41
|
+
d.setDate(date.getDate());
|
|
42
|
+
d.setHours(0);
|
|
43
|
+
d.setMinutes(0);
|
|
44
|
+
if (time) {
|
|
45
|
+
d.setHours(time.getHours());
|
|
46
|
+
d.setMinutes(time.getMinutes());
|
|
47
|
+
}
|
|
48
|
+
return d;
|
|
49
|
+
};
|
|
32
50
|
|
|
33
51
|
/**
|
|
34
52
|
* The component to choose a date.
|
|
@@ -40,7 +58,7 @@ const DatePicker = /*#__PURE__*/forwardRef(({
|
|
|
40
58
|
rightHasPadding = false,
|
|
41
59
|
placeholder,
|
|
42
60
|
disabled = false,
|
|
43
|
-
format
|
|
61
|
+
format,
|
|
44
62
|
firstDayOfWeek = 'sunday',
|
|
45
63
|
locale = defaultLocale,
|
|
46
64
|
showTime = false,
|
|
@@ -60,30 +78,22 @@ const DatePicker = /*#__PURE__*/forwardRef(({
|
|
|
60
78
|
defaultValue,
|
|
61
79
|
onChange
|
|
62
80
|
});
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
...(showTime ? {
|
|
70
|
-
hour: '2-digit',
|
|
71
|
-
minute: '2-digit',
|
|
72
|
-
hour12: timeNotation === '12-hour'
|
|
73
|
-
} : {})
|
|
74
|
-
});
|
|
75
|
-
return v => Array.isArray(v) ? v.map(item => dateToStr(item)).join(' - ') : dateToStr(v);
|
|
76
|
-
}, [formatFn, showTime, timeNotation]);
|
|
77
|
-
const formattedValue = useMemo(() => {
|
|
78
|
-
if (!forwardedValue) return null;
|
|
79
|
-
return format(forwardedValue);
|
|
80
|
-
}, [forwardedValue, format]);
|
|
81
|
+
const formattedValue = useFormattedValue({
|
|
82
|
+
forwardedValue,
|
|
83
|
+
format,
|
|
84
|
+
showTime,
|
|
85
|
+
timeNotation
|
|
86
|
+
});
|
|
81
87
|
const closeHandler = useCallback(() => {
|
|
82
88
|
setOpened(false);
|
|
83
89
|
}, []);
|
|
84
90
|
useKeyPress(typeof window !== 'undefined' ? window : undefined, 'Escape', closeHandler);
|
|
85
91
|
const isMinXs = useIsMinWidth('xs');
|
|
86
92
|
const valueIsSpecified = useMemo(() => formattedValue !== undefined && formattedValue !== null, [formattedValue]);
|
|
93
|
+
const rightHasPaddingValue = useMemo(() => {
|
|
94
|
+
if (valueIsSpecified) return false;
|
|
95
|
+
return right ? rightHasPadding : true;
|
|
96
|
+
}, [right, rightHasPadding, valueIsSpecified]);
|
|
87
97
|
const rightValue = useMemo(() => {
|
|
88
98
|
if (valueIsSpecified) {
|
|
89
99
|
return /*#__PURE__*/React.createElement("div", {
|
|
@@ -112,40 +122,52 @@ const DatePicker = /*#__PURE__*/forwardRef(({
|
|
|
112
122
|
}
|
|
113
123
|
return right || /*#__PURE__*/React.createElement(IconContainer, null, opened ? /*#__PURE__*/React.createElement(Up, null) : /*#__PURE__*/React.createElement(Down, null));
|
|
114
124
|
}, [containerRef, disabled, locale.clearLabel, opened, right, setForwardedValue, valueIsSpecified]);
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
125
|
+
const firstTimePickerRef = useRef(null);
|
|
126
|
+
const secondTimePickerRef = useRef(null);
|
|
127
|
+
const rangeStartedRef = useRef(false);
|
|
128
|
+
useEffect(() => {
|
|
129
|
+
rangeStartedRef.current = false;
|
|
130
|
+
}, [opened]);
|
|
131
|
+
const changeHandler = useCallback(date => {
|
|
132
|
+
setForwardedValue(prev => {
|
|
133
|
+
if (!range) return createDate(date, prev);
|
|
134
|
+
const d = createDate(date);
|
|
135
|
+
const nextValue = prev && Array.isArray(prev) && rangeStartedRef.current ? [new Date(prev[0].getTime()), createDate(date, prev[1])] : [d, d];
|
|
136
|
+
rangeStartedRef.current = !rangeStartedRef.current;
|
|
137
|
+
return nextValue.sort((a, b) => a.getTime() - b.getTime());
|
|
138
|
+
});
|
|
139
|
+
}, [range, setForwardedValue]);
|
|
119
140
|
const calendarComponent = useMemo(() => /*#__PURE__*/React.createElement(DatePickerCalendar, {
|
|
120
141
|
firstDayOfWeek: firstDayOfWeek,
|
|
121
142
|
locale: locale,
|
|
122
|
-
range: range,
|
|
123
143
|
value: forwardedValue,
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
144
|
+
onSelect: v => {
|
|
145
|
+
changeHandler(v);
|
|
146
|
+
firstTimePickerRef.current?.focus();
|
|
147
|
+
if (!showTime && (!range || !rangeStartedRef.current)) {
|
|
127
148
|
closeHandler();
|
|
128
149
|
}
|
|
129
150
|
}
|
|
130
|
-
}), [closeHandler, firstDayOfWeek, forwardedValue, locale, range,
|
|
131
|
-
const secondTimePickerRef = useRef(null);
|
|
151
|
+
}), [changeHandler, closeHandler, firstDayOfWeek, forwardedValue, locale, range, showTime]);
|
|
132
152
|
const tabOnInputComplete = useCallback(e => {
|
|
133
153
|
if (e.target.selectionStart < 5) return;
|
|
134
154
|
secondTimePickerRef.current?.focus();
|
|
135
|
-
|
|
155
|
+
setForwardedValue(([from]) => {
|
|
156
|
+
const nextTo = new Date(from.getTime());
|
|
157
|
+
nextTo.setHours(nextTo.getHours() + 1);
|
|
158
|
+
return [from, nextTo];
|
|
159
|
+
});
|
|
160
|
+
}, [setForwardedValue]);
|
|
136
161
|
const closeOnInputComplete = useCallback(e => {
|
|
137
162
|
if (e.target.selectionStart < 5) return;
|
|
138
163
|
closeHandler();
|
|
139
164
|
}, [closeHandler]);
|
|
140
165
|
const timeComponent = useMemo(() => showTime && forwardedValue ? /*#__PURE__*/React.createElement(TimeContainer, null, Array.isArray(forwardedValue) ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StyledTimePicker, {
|
|
166
|
+
ref: firstTimePickerRef,
|
|
141
167
|
autoFocus: true,
|
|
142
168
|
disabled: disabled,
|
|
143
169
|
notation: timeNotation,
|
|
144
|
-
containerProps:
|
|
145
|
-
style: {
|
|
146
|
-
width: 'auto'
|
|
147
|
-
}
|
|
148
|
-
},
|
|
170
|
+
containerProps: timePickerStyle,
|
|
149
171
|
value: forwardedValue[0],
|
|
150
172
|
onChange: v => setForwardedValue([v, forwardedValue[1]]),
|
|
151
173
|
onKeyDown: e => {
|
|
@@ -159,11 +181,7 @@ const DatePicker = /*#__PURE__*/forwardRef(({
|
|
|
159
181
|
ref: secondTimePickerRef,
|
|
160
182
|
disabled: disabled,
|
|
161
183
|
notation: timeNotation,
|
|
162
|
-
containerProps:
|
|
163
|
-
style: {
|
|
164
|
-
width: 'auto'
|
|
165
|
-
}
|
|
166
|
-
},
|
|
184
|
+
containerProps: timePickerStyle,
|
|
167
185
|
value: forwardedValue[1],
|
|
168
186
|
onChange: v => setForwardedValue([forwardedValue[0], v]),
|
|
169
187
|
onKeyDown: e => {
|
|
@@ -174,14 +192,11 @@ const DatePicker = /*#__PURE__*/forwardRef(({
|
|
|
174
192
|
},
|
|
175
193
|
onKeyUp: closeOnInputComplete
|
|
176
194
|
})) : /*#__PURE__*/React.createElement(StyledTimePicker, {
|
|
195
|
+
ref: firstTimePickerRef,
|
|
177
196
|
autoFocus: true,
|
|
178
197
|
disabled: disabled,
|
|
179
198
|
notation: timeNotation,
|
|
180
|
-
containerProps:
|
|
181
|
-
style: {
|
|
182
|
-
width: 'auto'
|
|
183
|
-
}
|
|
184
|
-
},
|
|
199
|
+
containerProps: timePickerStyle,
|
|
185
200
|
value: forwardedValue,
|
|
186
201
|
onChange: setForwardedValue,
|
|
187
202
|
onKeyDown: e => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["styled","defaultLocale","getAccessibilityDateLabel","Down","Up","useIsMinWidth","ThemeOverrider","useForwardedRef","useForwardedState","useKeyPress","React","forwardRef","useCallback","useMemo","useRef","useState","Button","Modal","Popover","SelectContainer","ClearIcon","Content","IconContainer","LeftAddon","Placeholder","RightAddon","Title","TimePicker","DatePickerCalendar","StyledPopover","p","theme","datePickerPadding","TimeContainer","div","Dash","baseHeight","StyledTimePicker","DatePicker","left","leftHasPadding","right","rightHasPadding","placeholder","disabled","format","formatFn","firstDayOfWeek","locale","showTime","timeNotation","range","value","defaultValue","onChange","size","rest","ref","containerRef","mergedContainerRef","opened","setOpened","forwardedValue","setForwardedValue","dateToStr","date","toLocaleString","undefined","year","month","day","hour","minute","hour12","v","Array","isArray","map","item","join","formattedValue","closeHandler","window","isMinXs","valueIsSpecified","rightValue","e","stopPropagation","includes","key","current","focus","preventDefault","clearLabel","rightHasPaddingValue","calendarComponent","secondTimePickerRef","tabOnInputComplete","target","selectionStart","closeOnInputComplete","timeComponent","style","width","t","buttonPaddingHorizontal","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, {\n forwardRef,\n useCallback,\n useMemo,\n useRef,\n useState,\n} 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>;\ninterface BaseDatePickerProps<T> 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?: (value: T) => 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?: T | null;\n /**\n * The default value.\n * @default undefined\n */\n defaultValue?: T | null;\n /**\n * The change event handler.\n * @default undefined\n */\n onChange?: (value: T | null) => void;\n}\ninterface DateNotRangePickerProps extends BaseDatePickerProps<Date> {\n /**\n * Whether the value is a range.\n * @default false\n */\n range?: false;\n}\ninterface DateRangePickerProps extends BaseDatePickerProps<[Date, Date]> {\n /**\n * Whether the value is a range.\n * @default false\n */\n range: true;\n}\nexport type DatePickerProps = DateNotRangePickerProps | DateRangePickerProps;\n\nconst StyledPopover = styled(Popover)`\n padding: ${(p) => p.theme.datePickerPadding}em;\n`;\n\nconst TimeContainer = styled.div`\n display: flex;\n justify-content: center;\n margin-top: 0.5em;\n`;\n\nconst Dash = styled.div`\n margin: 0 0.5em;\n line-height: ${(p) => p.theme.baseHeight}em;\n`;\n\nconst StyledTimePicker = styled(TimePicker)`\n width: 2.5em;\n text-align: center;\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 range = false,\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const [forwardedValue, setForwardedValue] = useForwardedState<any>({\n value,\n defaultValue,\n onChange,\n });\n\n const format = useMemo(() => {\n if (formatFn) return formatFn;\n\n const dateToStr = (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\n return (v: Date | [Date, Date]) =>\n Array.isArray(v)\n ? v.map((item) => dateToStr(item)).join(' - ')\n : dateToStr(v);\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 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 calendarComponent = useMemo(\n () => (\n <DatePickerCalendar\n firstDayOfWeek={firstDayOfWeek}\n locale={locale}\n range={range}\n value={forwardedValue}\n onChange={(v) => {\n setForwardedValue(v);\n if (!showTime && !range) {\n closeHandler();\n }\n }}\n />\n ),\n [\n closeHandler,\n firstDayOfWeek,\n forwardedValue,\n locale,\n range,\n setForwardedValue,\n showTime,\n ]\n );\n\n const secondTimePickerRef = useRef<HTMLInputElement>(null);\n\n const tabOnInputComplete = useCallback((e) => {\n if (e.target.selectionStart < 5) return;\n secondTimePickerRef.current?.focus();\n }, []);\n\n const closeOnInputComplete = useCallback(\n (e) => {\n if (e.target.selectionStart < 5) return;\n closeHandler();\n },\n [closeHandler]\n );\n\n const timeComponent = useMemo(\n () =>\n showTime && forwardedValue ? (\n <TimeContainer>\n {Array.isArray(forwardedValue) ? (\n <>\n <StyledTimePicker\n autoFocus\n disabled={disabled}\n notation={timeNotation}\n containerProps={{ style: { width: 'auto' } }}\n value={forwardedValue[0]}\n onChange={(v) => setForwardedValue([v, forwardedValue[1]])}\n onKeyDown={(e) => {\n if (disabled) return;\n if (e.key === 'Enter') {\n setOpened(!opened);\n }\n }}\n onKeyUp={tabOnInputComplete}\n />\n <Dash>–</Dash>\n <StyledTimePicker\n ref={secondTimePickerRef}\n disabled={disabled}\n notation={timeNotation}\n containerProps={{ style: { width: 'auto' } }}\n value={forwardedValue[1]}\n onChange={(v) => setForwardedValue([forwardedValue[0], v])}\n onKeyDown={(e) => {\n if (disabled) return;\n if (e.key === 'Enter') {\n setOpened(!opened);\n }\n }}\n onKeyUp={closeOnInputComplete}\n />\n </>\n ) : (\n <StyledTimePicker\n autoFocus\n disabled={disabled}\n notation={timeNotation}\n containerProps={{ style: { width: 'auto' } }}\n value={forwardedValue}\n onChange={setForwardedValue}\n onKeyDown={(e) => {\n if (disabled) return;\n if (e.key === 'Enter') {\n setOpened(!opened);\n }\n }}\n onKeyUp={closeOnInputComplete}\n />\n )}\n </TimeContainer>\n ) : null,\n [\n closeOnInputComplete,\n disabled,\n forwardedValue,\n opened,\n setForwardedValue,\n showTime,\n tabOnInputComplete,\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 {calendarComponent}\n {timeComponent}\n </StyledPopover>\n ) : (\n <Modal\n title={placeholder}\n header={null}\n footer={null}\n visible={opened}\n onClose={closeHandler}\n size={size}\n >\n {calendarComponent}\n {timeComponent}\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","useFormattedValue","Down","Up","useIsMinWidth","ThemeOverrider","useForwardedRef","useForwardedState","useKeyPress","React","forwardRef","useCallback","useEffect","useMemo","useRef","useState","Button","Modal","Popover","SelectContainer","ClearIcon","Content","IconContainer","LeftAddon","Placeholder","RightAddon","Title","TimePicker","DatePickerCalendar","StyledPopover","p","theme","datePickerPadding","TimeContainer","div","Dash","baseHeight","StyledTimePicker","timePickerStyle","style","width","createDate","date","time","d","Date","setFullYear","getFullYear","setMonth","getMonth","setDate","getDate","setHours","setMinutes","getHours","getMinutes","DatePicker","left","leftHasPadding","right","rightHasPadding","placeholder","disabled","format","firstDayOfWeek","locale","showTime","timeNotation","range","value","defaultValue","onChange","size","rest","ref","containerRef","mergedContainerRef","opened","setOpened","forwardedValue","setForwardedValue","formattedValue","closeHandler","window","undefined","isMinXs","valueIsSpecified","rightHasPaddingValue","rightValue","e","stopPropagation","includes","key","current","focus","preventDefault","clearLabel","firstTimePickerRef","secondTimePickerRef","rangeStartedRef","changeHandler","prev","nextValue","Array","isArray","getTime","sort","a","b","calendarComponent","v","tabOnInputComplete","target","selectionStart","from","nextTo","closeOnInputComplete","timeComponent","t","buttonPaddingHorizontal","selectToggleListItemHeight","sizes","small","displayName"],"sources":["../../../src/DatePicker/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport {\n DatePickerLocale,\n defaultLocale,\n getAccessibilityDateLabel,\n useFormattedValue,\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, {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} 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>;\ninterface BaseDatePickerProps<T> 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?: (value: T) => 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?: T | null;\n /**\n * The default value.\n * @default undefined\n */\n defaultValue?: T | null;\n /**\n * The change event handler.\n * @default undefined\n */\n onChange?: (value: T | null) => void;\n}\ninterface DateNotRangePickerProps extends BaseDatePickerProps<Date> {\n /**\n * Whether the value is a range.\n * @default false\n */\n range?: false;\n}\ninterface DateRangePickerProps extends BaseDatePickerProps<[Date, Date]> {\n /**\n * Whether the value is a range.\n * @default false\n */\n range: true;\n}\nexport type DatePickerProps = DateNotRangePickerProps | DateRangePickerProps;\n\nconst StyledPopover = styled(Popover)`\n padding: ${(p) => p.theme.datePickerPadding}em;\n`;\n\nconst TimeContainer = styled.div`\n display: flex;\n justify-content: center;\n margin-top: 0.5em;\n`;\n\nconst Dash = styled.div`\n margin: 0 0.5em;\n line-height: ${(p) => p.theme.baseHeight}em;\n`;\n\nconst StyledTimePicker = styled(TimePicker)`\n width: 2.5em;\n text-align: center;\n`;\n\nconst timePickerStyle = { style: { width: 'auto' } };\n\nconst createDate = (date: Date, time?: Date | null) => {\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 (time) {\n d.setHours(time.getHours());\n d.setMinutes(time.getMinutes());\n }\n return d;\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,\n firstDayOfWeek = 'sunday',\n locale = defaultLocale,\n showTime = false,\n timeNotation = '12-hour',\n range = false,\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const [forwardedValue, setForwardedValue] = useForwardedState<any>({\n value,\n defaultValue,\n onChange,\n });\n\n const formattedValue = useFormattedValue({\n forwardedValue,\n format,\n showTime,\n timeNotation,\n });\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 valueIsSpecified = useMemo(\n () => formattedValue !== undefined && formattedValue !== null,\n [formattedValue]\n );\n\n const rightHasPaddingValue = useMemo(() => {\n if (valueIsSpecified) return false;\n return right ? rightHasPadding : true;\n }, [right, rightHasPadding, valueIsSpecified]);\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 firstTimePickerRef = useRef<HTMLInputElement>(null);\n const secondTimePickerRef = useRef<HTMLInputElement>(null);\n const rangeStartedRef = useRef(false);\n\n useEffect(() => {\n rangeStartedRef.current = false;\n }, [opened]);\n\n const changeHandler = useCallback(\n (date: Date) => {\n setForwardedValue((prev) => {\n if (!range) return createDate(date, prev);\n\n const d = createDate(date);\n const nextValue =\n prev && Array.isArray(prev) && rangeStartedRef.current\n ? [new Date(prev[0].getTime()), createDate(date, prev[1])]\n : [d, d];\n\n rangeStartedRef.current = !rangeStartedRef.current;\n return nextValue.sort(\n (a: Date, b: Date) => a.getTime() - b.getTime()\n );\n });\n },\n [range, setForwardedValue]\n );\n\n const calendarComponent = useMemo(\n () => (\n <DatePickerCalendar\n firstDayOfWeek={firstDayOfWeek}\n locale={locale}\n value={forwardedValue}\n onSelect={(v) => {\n changeHandler(v);\n firstTimePickerRef.current?.focus();\n if (!showTime && (!range || !rangeStartedRef.current)) {\n closeHandler();\n }\n }}\n />\n ),\n [\n changeHandler,\n closeHandler,\n firstDayOfWeek,\n forwardedValue,\n locale,\n range,\n showTime,\n ]\n );\n\n const tabOnInputComplete = useCallback(\n (e) => {\n if (e.target.selectionStart < 5) return;\n secondTimePickerRef.current?.focus();\n setForwardedValue(([from]) => {\n const nextTo = new Date(from.getTime());\n nextTo.setHours(nextTo.getHours() + 1);\n return [from, nextTo];\n });\n },\n [setForwardedValue]\n );\n\n const closeOnInputComplete = useCallback(\n (e) => {\n if (e.target.selectionStart < 5) return;\n closeHandler();\n },\n [closeHandler]\n );\n\n const timeComponent = useMemo(\n () =>\n showTime && forwardedValue ? (\n <TimeContainer>\n {Array.isArray(forwardedValue) ? (\n <>\n <StyledTimePicker\n ref={firstTimePickerRef}\n autoFocus\n disabled={disabled}\n notation={timeNotation}\n containerProps={timePickerStyle}\n value={forwardedValue[0]}\n onChange={(v) => setForwardedValue([v, forwardedValue[1]])}\n onKeyDown={(e) => {\n if (disabled) return;\n if (e.key === 'Enter') {\n setOpened(!opened);\n }\n }}\n onKeyUp={tabOnInputComplete}\n />\n <Dash>–</Dash>\n <StyledTimePicker\n ref={secondTimePickerRef}\n disabled={disabled}\n notation={timeNotation}\n containerProps={timePickerStyle}\n value={forwardedValue[1]}\n onChange={(v) => setForwardedValue([forwardedValue[0], v])}\n onKeyDown={(e) => {\n if (disabled) return;\n if (e.key === 'Enter') {\n setOpened(!opened);\n }\n }}\n onKeyUp={closeOnInputComplete}\n />\n </>\n ) : (\n <StyledTimePicker\n ref={firstTimePickerRef}\n autoFocus\n disabled={disabled}\n notation={timeNotation}\n containerProps={timePickerStyle}\n value={forwardedValue}\n onChange={setForwardedValue}\n onKeyDown={(e) => {\n if (disabled) return;\n if (e.key === 'Enter') {\n setOpened(!opened);\n }\n }}\n onKeyUp={closeOnInputComplete}\n />\n )}\n </TimeContainer>\n ) : null,\n [\n closeOnInputComplete,\n disabled,\n forwardedValue,\n opened,\n setForwardedValue,\n showTime,\n tabOnInputComplete,\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 {calendarComponent}\n {timeComponent}\n </StyledPopover>\n ) : (\n <Modal\n title={placeholder}\n header={null}\n footer={null}\n visible={opened}\n onClose={closeHandler}\n size={size}\n >\n {calendarComponent}\n {timeComponent}\n </Modal>\n )}\n </>\n );\n }\n);\n\nDatePicker.displayName = 'DatePicker';\n\nexport default DatePicker;\n"],"mappings":"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"}
|
|
@@ -1,12 +1,9 @@
|
|
|
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 { useTime } from '@os-design/time-picker-utils';
|
|
3
3
|
import { useForwardedRef, useForwardedState } from '@os-design/utils';
|
|
4
|
-
import React, { forwardRef, useCallback, useEffect, useMemo,
|
|
4
|
+
import React, { forwardRef, useCallback, useEffect, useMemo, 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
|
-
|
|
10
7
|
/**
|
|
11
8
|
* The component to choose a time.
|
|
12
9
|
*/
|
|
@@ -31,61 +28,51 @@ const TimePicker = /*#__PURE__*/forwardRef(({
|
|
|
31
28
|
start: 0,
|
|
32
29
|
end: 0
|
|
33
30
|
});
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
const
|
|
47
|
-
if (
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
31
|
+
const {
|
|
32
|
+
time,
|
|
33
|
+
isPm,
|
|
34
|
+
changePeriod,
|
|
35
|
+
keyHandler
|
|
36
|
+
} = useTime({
|
|
37
|
+
notation,
|
|
38
|
+
selection,
|
|
39
|
+
setSelection,
|
|
40
|
+
forwardedValue,
|
|
41
|
+
setForwardedValue
|
|
42
|
+
});
|
|
43
|
+
const rightComponent = useMemo(() => {
|
|
44
|
+
if (notation !== '12-hour' && !right) return null;
|
|
45
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, notation === '12-hour' && /*#__PURE__*/React.createElement(Button, {
|
|
46
|
+
type: "ghost",
|
|
47
|
+
wide: "never",
|
|
48
|
+
size: "small",
|
|
49
|
+
disabled: disabled,
|
|
50
|
+
onClick: changePeriod
|
|
51
|
+
}, isPm ? 'PM' : 'AM'), right);
|
|
52
|
+
}, [changePeriod, disabled, isPm, notation, right]);
|
|
53
|
+
const keyDownHandler = useCallback(e => {
|
|
54
|
+
keyHandler(e.key, e.metaKey);
|
|
55
|
+
onKeyDown(e);
|
|
56
|
+
e.preventDefault();
|
|
57
|
+
}, [keyHandler, onKeyDown]);
|
|
57
58
|
|
|
58
59
|
// Update the selection
|
|
59
60
|
useEffect(() => {
|
|
60
61
|
if (!inputRef.current) return;
|
|
61
62
|
inputRef.current.setSelectionRange(selection.start, selection.end);
|
|
62
63
|
}, [inputRef, selection]);
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
} else if (e.key === 'ArrowLeft') {
|
|
70
|
-
nextCaret = selection.start > 0 ? selection.start - 1 : 0;
|
|
71
|
-
} else if (e.key === 'ArrowRight') {
|
|
72
|
-
nextCaret = selection.start < 5 ? selection.start + 1 : 5;
|
|
73
|
-
} else if (e.key === 'Backspace') {
|
|
74
|
-
setTimeRef.current('00:00');
|
|
75
|
-
nextCaret = 0;
|
|
76
|
-
} else if (isDigitKey(e.key)) {
|
|
77
|
-
let pos = selection.start === 2 ? 3 : selection.start;
|
|
78
|
-
if (pos === 5) pos = 0;
|
|
79
|
-
setTimeRef.current(replaceChar(time, pos, e.key));
|
|
80
|
-
nextCaret = pos < 5 ? pos + 1 : 5;
|
|
81
|
-
}
|
|
64
|
+
const selectHandler = useCallback(e => {
|
|
65
|
+
// Update the selection state.
|
|
66
|
+
const {
|
|
67
|
+
selectionStart,
|
|
68
|
+
selectionEnd
|
|
69
|
+
} = e.currentTarget;
|
|
82
70
|
setSelection({
|
|
83
|
-
start:
|
|
84
|
-
end:
|
|
71
|
+
start: selectionStart || 0,
|
|
72
|
+
end: selectionEnd || 0
|
|
85
73
|
});
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}, [onKeyDown, selection.start, time]);
|
|
74
|
+
onSelect(e);
|
|
75
|
+
}, [onSelect]);
|
|
89
76
|
return /*#__PURE__*/React.createElement(Input, _extends({
|
|
90
77
|
type: "text",
|
|
91
78
|
inputMode: "decimal",
|
|
@@ -94,25 +81,8 @@ const TimePicker = /*#__PURE__*/forwardRef(({
|
|
|
94
81
|
maxLength: 5,
|
|
95
82
|
disabled: disabled,
|
|
96
83
|
value: time,
|
|
97
|
-
right:
|
|
98
|
-
|
|
99
|
-
wide: "never",
|
|
100
|
-
size: "small",
|
|
101
|
-
disabled: disabled,
|
|
102
|
-
onClick: () => changePeriod(!isPm)
|
|
103
|
-
}, isPm ? 'PM' : 'AM'), right),
|
|
104
|
-
onSelect: e => {
|
|
105
|
-
// Update the selection state.
|
|
106
|
-
const {
|
|
107
|
-
selectionStart,
|
|
108
|
-
selectionEnd
|
|
109
|
-
} = e.currentTarget;
|
|
110
|
-
setSelection({
|
|
111
|
-
start: selectionStart || 0,
|
|
112
|
-
end: selectionEnd || 0
|
|
113
|
-
});
|
|
114
|
-
onSelect(e);
|
|
115
|
-
},
|
|
84
|
+
right: rightComponent,
|
|
85
|
+
onSelect: selectHandler,
|
|
116
86
|
onKeyDown: keyDownHandler
|
|
117
87
|
}, rest, {
|
|
118
88
|
ref: mergedInputRef
|