@pega/cosmos-react-core 4.0.0-dev.19.0 → 4.0.0-dev.19.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/lib/components/AppShell/AppShell.d.ts.map +1 -1
  2. package/lib/components/AppShell/AppShell.js +18 -31
  3. package/lib/components/AppShell/AppShell.js.map +1 -1
  4. package/lib/components/AppShell/Drawer.d.ts.map +1 -1
  5. package/lib/components/AppShell/Drawer.js +25 -12
  6. package/lib/components/AppShell/Drawer.js.map +1 -1
  7. package/lib/components/DateTime/DateTime.test-ids.d.ts +12 -0
  8. package/lib/components/DateTime/DateTime.test-ids.d.ts.map +1 -0
  9. package/lib/components/DateTime/DateTime.test-ids.js +80 -0
  10. package/lib/components/DateTime/DateTime.test-ids.js.map +1 -0
  11. package/lib/components/DateTime/DateTime.types.d.ts +2 -2
  12. package/lib/components/DateTime/DateTime.types.d.ts.map +1 -1
  13. package/lib/components/DateTime/DateTime.types.js.map +1 -1
  14. package/lib/components/DateTime/Input/DateInput.d.ts +4 -2
  15. package/lib/components/DateTime/Input/DateInput.d.ts.map +1 -1
  16. package/lib/components/DateTime/Input/DateInput.js +14 -11
  17. package/lib/components/DateTime/Input/DateInput.js.map +1 -1
  18. package/lib/components/DateTime/Input/DateRangeInput.d.ts +4 -2
  19. package/lib/components/DateTime/Input/DateRangeInput.d.ts.map +1 -1
  20. package/lib/components/DateTime/Input/DateRangeInput.js +8 -5
  21. package/lib/components/DateTime/Input/DateRangeInput.js.map +1 -1
  22. package/lib/components/DateTime/Input/DateTimeInput.d.ts +4 -2
  23. package/lib/components/DateTime/Input/DateTimeInput.d.ts.map +1 -1
  24. package/lib/components/DateTime/Input/DateTimeInput.js +19 -16
  25. package/lib/components/DateTime/Input/DateTimeInput.js.map +1 -1
  26. package/lib/components/DateTime/Input/DayOfWeekInput.d.ts +6 -4
  27. package/lib/components/DateTime/Input/DayOfWeekInput.d.ts.map +1 -1
  28. package/lib/components/DateTime/Input/DayOfWeekInput.js +7 -4
  29. package/lib/components/DateTime/Input/DayOfWeekInput.js.map +1 -1
  30. package/lib/components/DateTime/Input/Duration/DurationInput.d.ts +4 -2
  31. package/lib/components/DateTime/Input/Duration/DurationInput.d.ts.map +1 -1
  32. package/lib/components/DateTime/Input/Duration/DurationInput.js +8 -4
  33. package/lib/components/DateTime/Input/Duration/DurationInput.js.map +1 -1
  34. package/lib/components/DateTime/Input/Duration/DurationInput.types.d.ts +2 -1
  35. package/lib/components/DateTime/Input/Duration/DurationInput.types.d.ts.map +1 -1
  36. package/lib/components/DateTime/Input/Duration/DurationInput.types.js.map +1 -1
  37. package/lib/components/DateTime/Input/Duration/NumberUnit.d.ts.map +1 -1
  38. package/lib/components/DateTime/Input/Duration/NumberUnit.js +5 -3
  39. package/lib/components/DateTime/Input/Duration/NumberUnit.js.map +1 -1
  40. package/lib/components/DateTime/Input/Duration/Time.d.ts.map +1 -1
  41. package/lib/components/DateTime/Input/Duration/Time.js +6 -4
  42. package/lib/components/DateTime/Input/Duration/Time.js.map +1 -1
  43. package/lib/components/DateTime/Input/MonthInput.d.ts +4 -2
  44. package/lib/components/DateTime/Input/MonthInput.d.ts.map +1 -1
  45. package/lib/components/DateTime/Input/MonthInput.js +20 -8
  46. package/lib/components/DateTime/Input/MonthInput.js.map +1 -1
  47. package/lib/components/DateTime/Input/QuarterInput.d.ts +4 -2
  48. package/lib/components/DateTime/Input/QuarterInput.d.ts.map +1 -1
  49. package/lib/components/DateTime/Input/QuarterInput.js +20 -8
  50. package/lib/components/DateTime/Input/QuarterInput.js.map +1 -1
  51. package/lib/components/DateTime/Input/TimeInput.d.ts +4 -2
  52. package/lib/components/DateTime/Input/TimeInput.d.ts.map +1 -1
  53. package/lib/components/DateTime/Input/TimeInput.js +13 -10
  54. package/lib/components/DateTime/Input/TimeInput.js.map +1 -1
  55. package/lib/components/DateTime/Input/TimeRangeInput.d.ts +4 -2
  56. package/lib/components/DateTime/Input/TimeRangeInput.d.ts.map +1 -1
  57. package/lib/components/DateTime/Input/TimeRangeInput.js +10 -7
  58. package/lib/components/DateTime/Input/TimeRangeInput.js.map +1 -1
  59. package/lib/components/DateTime/Input/WeekInput.d.ts +4 -2
  60. package/lib/components/DateTime/Input/WeekInput.d.ts.map +1 -1
  61. package/lib/components/DateTime/Input/WeekInput.js +21 -9
  62. package/lib/components/DateTime/Input/WeekInput.js.map +1 -1
  63. package/lib/components/DateTime/Picker/Calendar.d.ts +2 -2
  64. package/lib/components/DateTime/Picker/Calendar.d.ts.map +1 -1
  65. package/lib/components/DateTime/Picker/Calendar.js +2 -2
  66. package/lib/components/DateTime/Picker/Calendar.js.map +1 -1
  67. package/lib/components/DateTime/Picker/DatePicker.d.ts +4 -2
  68. package/lib/components/DateTime/Picker/DatePicker.d.ts.map +1 -1
  69. package/lib/components/DateTime/Picker/DatePicker.js +11 -8
  70. package/lib/components/DateTime/Picker/DatePicker.js.map +1 -1
  71. package/lib/components/DateTime/Picker/DatePicker.types.d.ts +2 -2
  72. package/lib/components/DateTime/Picker/DatePicker.types.d.ts.map +1 -1
  73. package/lib/components/DateTime/Picker/DatePicker.types.js.map +1 -1
  74. package/lib/components/DateTime/Picker/TimePicker.d.ts +2 -2
  75. package/lib/components/DateTime/Picker/TimePicker.d.ts.map +1 -1
  76. package/lib/components/DateTime/Picker/TimePicker.js +2 -2
  77. package/lib/components/DateTime/Picker/TimePicker.js.map +1 -1
  78. package/lib/components/DateTime/utils.d.ts +8 -4
  79. package/lib/components/DateTime/utils.d.ts.map +1 -1
  80. package/lib/components/DateTime/utils.js +129 -67
  81. package/lib/components/DateTime/utils.js.map +1 -1
  82. package/lib/components/Menu/Menu.d.ts.map +1 -1
  83. package/lib/components/Menu/Menu.js +8 -2
  84. package/lib/components/Menu/Menu.js.map +1 -1
  85. package/lib/components/Menu/Menu.styles.d.ts.map +1 -1
  86. package/lib/components/Menu/Menu.styles.js +5 -0
  87. package/lib/components/Menu/Menu.styles.js.map +1 -1
  88. package/lib/theme/themes/aries2023DarkTheme.json +1 -0
  89. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TimeRangeInput.js","sourceRoot":"","sources":["../../../../src/components/DateTime/Input/TimeRangeInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n forwardRef,\n FunctionComponent,\n Ref,\n useCallback,\n useImperativeHandle,\n useReducer,\n useRef\n} from 'react';\n\nimport Flex from '../../Flex';\nimport { FormControlProps, HandleValue } from '../../FormControl';\nimport { useConsolidatedRef, useFocusWithin, useI18n } from '../../../hooks';\nimport DateTimeProps, {\n DateRangeCallbackParameter,\n DateTimeCallbackParameter,\n DateTimeProperties\n} from '../DateTime.types';\nimport { ForwardProps } from '../../../types';\nimport { StyledRangeInputContainer } from '../../Input/Input.styles';\nimport { MinuteInterval } from '../Picker/DatePicker.types';\nimport FormField from '../../FormField';\n\nimport { ClockFormat, parseToDate } from './utils';\nimport TimeInput from './TimeInput';\nimport DateTimeInput from './DateTimeInput';\n\nexport interface TimeRangeInputProps extends DateTimeProperties {\n /** Object of range boundaries. */\n value?: { start?: DateTimeProps['value']; end?: DateTimeProps['value'] };\n /** Callback fired when inputs value changes. */\n onChange: (value: DateRangeCallbackParameter) => void;\n /** Callback fired when the component gets focused. */\n onFocus?: (value: DateRangeCallbackParameter) => void;\n /** Callback fired when the component loses focus. */\n onBlur?: (value: DateRangeCallbackParameter) => void;\n /** Pass a string or a fragment with an Icon and string for first part of TimeRangeInput. */\n fromLabel?: FormControlProps['label'];\n /** Pass a string or a fragment with an Icon and string for second part of TimeRangeInput. */\n toLabel?: FormControlProps['label'];\n /** Pass an object with \"heading\" and \"content\" properties to show AdditionalInfo for second part of DataRangeInput. */\n toAdditionalInfo?: FormControlProps['additionalInfo'];\n /** Pass an object with \"heading\" and \"content\" properties to show AdditionalInfo for first part of DataRangeInput. */\n fromAdditionalInfo?: FormControlProps['additionalInfo'];\n /** Controls which input is displayed */\n mode: 'time' | 'datetime';\n /**\n * Display the time with seconds.\n * @default false\n */\n withSeconds?: boolean;\n /**\n * Defines interval for time picker options (in minutes).\n * @default 30\n */\n pickerInterval?: MinuteInterval;\n /** Defines clock format that overrides locale based format */\n clockFormat?: ClockFormat;\n /** Imperative handle */\n handle?: Ref<HandleValue>;\n}\n\ntype DateRangeAction = { type: 'start' | 'end'; value?: number };\ntype State = { start?: number; end?: number };\n\nconst reducer = (prevState: State, { type, value }: DateRangeAction): State => {\n switch (type) {\n case 'start': {\n return { ...prevState, start: value };\n }\n case 'end': {\n return { ...prevState, end: value };\n }\n default:\n return prevState;\n }\n};\n\nconst convertToCallbackParameter = (v?: number): DateTimeCallbackParameter => {\n return {\n valueAsISOString: v === undefined || Number.isNaN(v) ? undefined : new Date(v).toISOString(),\n valueAsTimestamp: v\n };\n};\n\nconst TimeRangeInput: FunctionComponent<TimeRangeInputProps & ForwardProps> = forwardRef(\n (\n {\n value = {},\n onChange,\n onFocus,\n onBlur,\n label,\n fromLabel,\n toLabel,\n labelHidden,\n required,\n readOnly,\n disabled,\n min,\n max,\n withSeconds,\n pickerInterval,\n clockFormat,\n mode,\n status,\n fromAdditionalInfo,\n toAdditionalInfo,\n autoFocus,\n handle,\n ...restProps\n }: TimeRangeInputProps,\n ref: Ref<HTMLDivElement>\n ) => {\n const t = useI18n();\n\n const startTimeInputRef = useRef<HTMLFieldSetElement>(null);\n const endTimeInputRef = useRef<HTMLFieldSetElement>(null);\n\n const startTimeClearHandle = useRef<HandleValue>(null);\n const endTimeClearHandle = useRef<HandleValue>(null);\n\n const [state, dispatch] = useReducer(reducer, {\n start: value.start ? parseToDate(value.start).getTime() : undefined,\n end: value.end ? parseToDate(value.end).getTime() : undefined\n });\n\n const startTimeRef = useRef<DateTimeCallbackParameter>(convertToCallbackParameter(state.start));\n const endTimeRef = useRef<DateTimeCallbackParameter>(convertToCallbackParameter(state.end));\n\n useImperativeHandle(\n handle,\n () => ({\n clear: () => {\n startTimeClearHandle.current?.clear();\n endTimeClearHandle.current?.clear();\n const emptyCallbackParameter = convertToCallbackParameter(undefined);\n startTimeRef.current = emptyCallbackParameter;\n endTimeRef.current = emptyCallbackParameter;\n dispatch({ type: 'start', value: undefined });\n dispatch({ type: 'end', value: undefined });\n onChange({\n start: emptyCallbackParameter,\n end: emptyCallbackParameter\n });\n }\n }),\n [onChange]\n );\n\n const onFocusChange = useCallback(\n (focused: boolean) => {\n (focused ? onFocus : onBlur)?.({\n start: startTimeRef.current,\n end: endTimeRef.current\n });\n },\n [onFocus, onBlur]\n );\n\n const containerRef = useConsolidatedRef(ref);\n useFocusWithin([containerRef], onFocusChange);\n\n const commonProps = {\n required,\n readOnly,\n disabled,\n min,\n max,\n status,\n withSeconds,\n pickerInterval,\n clockFormat\n };\n\n return (\n <FormField\n as='fieldset'\n {...restProps}\n container={{ wrap: 'nowrap' }}\n ref={containerRef}\n labelAs='legend'\n label={label}\n labelHidden={labelHidden}\n disabled={disabled}\n required={required}\n readOnly={readOnly}\n status={status}\n >\n <Flex container as={StyledRangeInputContainer}>\n {mode === 'time' ? (\n <>\n <TimeInput\n {...commonProps}\n value={state.start}\n onBlur={changedValue => {\n dispatch({\n type: 'start',\n value: changedValue.state ? undefined : changedValue.valueAsTimestamp\n });\n\n startTimeRef.current = changedValue;\n onChange({\n start: changedValue,\n end: convertToCallbackParameter(state.end)\n });\n }}\n label={fromLabel}\n aria-label={`${t('range_from_datetime') + (label ? ` - ${label}` : '')}`}\n additionalInfo={fromAdditionalInfo}\n autoFocus={autoFocus}\n ref={startTimeInputRef}\n handle={startTimeClearHandle}\n />\n <TimeInput\n {...commonProps}\n value={state.end}\n onBlur={changedValue => {\n dispatch({\n type: 'end',\n value: changedValue.state ? undefined : changedValue.valueAsTimestamp\n });\n\n endTimeRef.current = changedValue;\n onChange({\n start: convertToCallbackParameter(state.start),\n end: changedValue\n });\n }}\n label={toLabel}\n aria-label={`${t('range_to_datetime') + (label ? ` - ${label}` : '')}`}\n additionalInfo={toAdditionalInfo}\n ref={endTimeInputRef}\n handle={endTimeClearHandle}\n />\n </>\n ) : (\n <>\n <DateTimeInput\n {...commonProps}\n value={state.start}\n onBlur={changedValue => {\n dispatch({\n type: 'start',\n value: changedValue.state ? undefined : changedValue.valueAsTimestamp\n });\n\n startTimeRef.current = changedValue;\n onChange({\n start: changedValue,\n end: convertToCallbackParameter(state.end)\n });\n }}\n label={fromLabel}\n aria-label={`${t('range_from_datetime') + (label ? ` - ${label}` : '')}`}\n additionalInfo={fromAdditionalInfo}\n ref={startTimeInputRef}\n handle={startTimeClearHandle}\n />\n <DateTimeInput\n {...commonProps}\n value={state.end}\n onBlur={changedValue => {\n dispatch({\n type: 'end',\n value: changedValue.state ? undefined : changedValue.valueAsTimestamp\n });\n\n endTimeRef.current = changedValue;\n onChange({\n start: convertToCallbackParameter(state.start),\n end: changedValue\n });\n }}\n label={toLabel}\n aria-label={`${t('range_to_datetime') + (label ? ` - ${label}` : '')}`}\n additionalInfo={toAdditionalInfo}\n ref={endTimeInputRef}\n handle={endTimeClearHandle}\n />\n </>\n )}\n </Flex>\n </FormField>\n );\n }\n);\nexport default TimeRangeInput;\n"]}
1
+ {"version":3,"file":"TimeRangeInput.js","sourceRoot":"","sources":["../../../../src/components/DateTime/Input/TimeRangeInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n forwardRef,\n FunctionComponent,\n Ref,\n useCallback,\n useImperativeHandle,\n useReducer,\n useRef\n} from 'react';\n\nimport Flex from '../../Flex';\nimport { FormControlProps, HandleValue } from '../../FormControl';\nimport { useConsolidatedRef, useFocusWithin, useI18n, useTestIds } from '../../../hooks';\nimport DateTimeProps, {\n DateRangeCallbackParameter,\n DateTimeCallbackParameter,\n DateTimeProperties\n} from '../DateTime.types';\nimport { ForwardProps } from '../../../types';\nimport { StyledRangeInputContainer } from '../../Input/Input.styles';\nimport { MinuteInterval } from '../Picker/DatePicker.types';\nimport FormField from '../../FormField';\nimport { getTimeRangeInputTestIds } from '../DateTime.test-ids';\nimport { withTestIds } from '../../../utils';\n\nimport { ClockFormat, parseToDate } from './utils';\nimport TimeInput from './TimeInput';\nimport DateTimeInput from './DateTimeInput';\n\nexport interface TimeRangeInputProps extends DateTimeProperties {\n /** Object of range boundaries. */\n value?: { start?: DateTimeProps['value']; end?: DateTimeProps['value'] };\n /** Callback fired when inputs value changes. */\n onChange: (value: DateRangeCallbackParameter) => void;\n /** Callback fired when the component gets focused. */\n onFocus?: (value: DateRangeCallbackParameter) => void;\n /** Callback fired when the component loses focus. */\n onBlur?: (value: DateRangeCallbackParameter) => void;\n /** Pass a string or a fragment with an Icon and string for first part of TimeRangeInput. */\n fromLabel?: FormControlProps['label'];\n /** Pass a string or a fragment with an Icon and string for second part of TimeRangeInput. */\n toLabel?: FormControlProps['label'];\n /** Pass an object with \"heading\" and \"content\" properties to show AdditionalInfo for second part of DataRangeInput. */\n toAdditionalInfo?: FormControlProps['additionalInfo'];\n /** Pass an object with \"heading\" and \"content\" properties to show AdditionalInfo for first part of DataRangeInput. */\n fromAdditionalInfo?: FormControlProps['additionalInfo'];\n /** Controls which input is displayed */\n mode: 'time' | 'datetime';\n /**\n * Display the time with seconds.\n * @default false\n */\n withSeconds?: boolean;\n /**\n * Defines interval for time picker options (in minutes).\n * @default 30\n */\n pickerInterval?: MinuteInterval;\n /** Defines clock format that overrides locale based format */\n clockFormat?: ClockFormat;\n /** Imperative handle */\n handle?: Ref<HandleValue>;\n}\n\ntype DateRangeAction = { type: 'start' | 'end'; value?: number };\ntype State = { start?: number; end?: number };\n\nconst reducer = (prevState: State, { type, value }: DateRangeAction): State => {\n switch (type) {\n case 'start': {\n return { ...prevState, start: value };\n }\n case 'end': {\n return { ...prevState, end: value };\n }\n default:\n return prevState;\n }\n};\n\nconst convertToCallbackParameter = (v?: number): DateTimeCallbackParameter => {\n return {\n valueAsISOString: v === undefined || Number.isNaN(v) ? undefined : new Date(v).toISOString(),\n valueAsTimestamp: v\n };\n};\n\nconst TimeRangeInput: FunctionComponent<TimeRangeInputProps & ForwardProps> = forwardRef(\n (\n {\n testId,\n value = {},\n onChange,\n onFocus,\n onBlur,\n label,\n fromLabel,\n toLabel,\n labelHidden,\n required,\n readOnly,\n disabled,\n min,\n max,\n withSeconds,\n pickerInterval,\n clockFormat,\n mode,\n status,\n fromAdditionalInfo,\n toAdditionalInfo,\n autoFocus,\n handle,\n ...restProps\n }: TimeRangeInputProps,\n ref: Ref<HTMLDivElement>\n ) => {\n const testIds = useTestIds(testId, getTimeRangeInputTestIds);\n\n const t = useI18n();\n\n const startTimeInputRef = useRef<HTMLFieldSetElement>(null);\n const endTimeInputRef = useRef<HTMLFieldSetElement>(null);\n\n const startTimeClearHandle = useRef<HandleValue>(null);\n const endTimeClearHandle = useRef<HandleValue>(null);\n\n const [state, dispatch] = useReducer(reducer, {\n start: value.start ? parseToDate(value.start).getTime() : undefined,\n end: value.end ? parseToDate(value.end).getTime() : undefined\n });\n\n const startTimeRef = useRef<DateTimeCallbackParameter>(convertToCallbackParameter(state.start));\n const endTimeRef = useRef<DateTimeCallbackParameter>(convertToCallbackParameter(state.end));\n\n useImperativeHandle(\n handle,\n () => ({\n clear: () => {\n startTimeClearHandle.current?.clear();\n endTimeClearHandle.current?.clear();\n const emptyCallbackParameter = convertToCallbackParameter(undefined);\n startTimeRef.current = emptyCallbackParameter;\n endTimeRef.current = emptyCallbackParameter;\n dispatch({ type: 'start', value: undefined });\n dispatch({ type: 'end', value: undefined });\n onChange({\n start: emptyCallbackParameter,\n end: emptyCallbackParameter\n });\n }\n }),\n [onChange]\n );\n\n const onFocusChange = useCallback(\n (focused: boolean) => {\n (focused ? onFocus : onBlur)?.({\n start: startTimeRef.current,\n end: endTimeRef.current\n });\n },\n [onFocus, onBlur]\n );\n\n const containerRef = useConsolidatedRef(ref);\n useFocusWithin([containerRef], onFocusChange);\n\n const commonProps = {\n required,\n readOnly,\n disabled,\n min,\n max,\n status,\n withSeconds,\n pickerInterval,\n clockFormat\n };\n\n return (\n <FormField\n testId={testIds}\n as='fieldset'\n {...restProps}\n container={{ wrap: 'nowrap' }}\n ref={containerRef}\n labelAs='legend'\n label={label}\n labelHidden={labelHidden}\n disabled={disabled}\n required={required}\n readOnly={readOnly}\n status={status}\n >\n <Flex container as={StyledRangeInputContainer}>\n {mode === 'time' ? (\n <>\n <TimeInput\n {...commonProps}\n testId={testIds.fromTime}\n value={state.start}\n onBlur={changedValue => {\n dispatch({\n type: 'start',\n value: changedValue.state ? undefined : changedValue.valueAsTimestamp\n });\n\n startTimeRef.current = changedValue;\n onChange({\n start: changedValue,\n end: convertToCallbackParameter(state.end)\n });\n }}\n label={fromLabel}\n aria-label={`${t('range_from_datetime') + (label ? ` - ${label}` : '')}`}\n additionalInfo={fromAdditionalInfo}\n autoFocus={autoFocus}\n ref={startTimeInputRef}\n handle={startTimeClearHandle}\n />\n <TimeInput\n {...commonProps}\n testId={testIds.toTime}\n value={state.end}\n onBlur={changedValue => {\n dispatch({\n type: 'end',\n value: changedValue.state ? undefined : changedValue.valueAsTimestamp\n });\n\n endTimeRef.current = changedValue;\n onChange({\n start: convertToCallbackParameter(state.start),\n end: changedValue\n });\n }}\n label={toLabel}\n aria-label={`${t('range_to_datetime') + (label ? ` - ${label}` : '')}`}\n additionalInfo={toAdditionalInfo}\n ref={endTimeInputRef}\n handle={endTimeClearHandle}\n />\n </>\n ) : (\n <>\n <DateTimeInput\n {...commonProps}\n testId={testIds.fromDateTime}\n value={state.start}\n onBlur={changedValue => {\n dispatch({\n type: 'start',\n value: changedValue.state ? undefined : changedValue.valueAsTimestamp\n });\n\n startTimeRef.current = changedValue;\n onChange({\n start: changedValue,\n end: convertToCallbackParameter(state.end)\n });\n }}\n label={fromLabel}\n aria-label={`${t('range_from_datetime') + (label ? ` - ${label}` : '')}`}\n additionalInfo={fromAdditionalInfo}\n ref={startTimeInputRef}\n handle={startTimeClearHandle}\n />\n <DateTimeInput\n testId={testIds.toDateTime}\n {...commonProps}\n value={state.end}\n onBlur={changedValue => {\n dispatch({\n type: 'end',\n value: changedValue.state ? undefined : changedValue.valueAsTimestamp\n });\n\n endTimeRef.current = changedValue;\n onChange({\n start: convertToCallbackParameter(state.start),\n end: changedValue\n });\n }}\n label={toLabel}\n aria-label={`${t('range_to_datetime') + (label ? ` - ${label}` : '')}`}\n additionalInfo={toAdditionalInfo}\n ref={endTimeInputRef}\n handle={endTimeClearHandle}\n />\n </>\n )}\n </Flex>\n </FormField>\n );\n }\n);\nexport default withTestIds(TimeRangeInput, getTimeRangeInputTestIds);\n"]}
@@ -5,6 +5,8 @@ import DateTimeProps from '../DateTime.types';
5
5
  export interface WeekInputProps extends OmitStrict<FormControlProps, 'value' | 'defaultValue'>, DateTimeProps {
6
6
  }
7
7
  export declare const StyledWeekInput: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, WeekInputProps, never>;
8
- declare const WeekInput: FunctionComponent<WeekInputProps & ForwardProps>;
9
- export default WeekInput;
8
+ declare const _default: FunctionComponent<WeekInputProps & ForwardProps> & {
9
+ getTestIds: (testIdProp?: string | undefined) => import("../../../types").TestIdsRecord<readonly ["control-week", "control-year", "open-close-picker", "label", "info", "additional-info", "suggestion-accept", "suggestion-reject"]>;
10
+ };
11
+ export default _default;
10
12
  //# sourceMappingURL=WeekInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WeekInput.d.ts","sourceRoot":"","sources":["../../../../src/components/DateTime/Input/WeekInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA4C,MAAM,OAAO,CAAC;AAIpF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAc1D,OAAO,EAAE,gBAAgB,EAAqB,MAAM,mBAAmB,CAAC;AAExE,OAAO,aAA4C,MAAM,mBAAmB,CAAC;AAsB7E,MAAM,WAAW,cACf,SAAQ,UAAU,CAAC,gBAAgB,EAAE,OAAO,GAAG,cAAc,CAAC,EAC5D,aAAa;CAAG;AAEpB,eAAO,MAAM,eAAe,qHAY1B,CAAC;AA6BH,QAAA,MAAM,SAAS,EAAE,iBAAiB,CAAC,cAAc,GAAG,YAAY,CAiN/D,CAAC;AAEF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"WeekInput.d.ts","sourceRoot":"","sources":["../../../../src/components/DateTime/Input/WeekInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA4C,MAAM,OAAO,CAAC;AAIpF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAe1D,OAAO,EAAE,gBAAgB,EAAqB,MAAM,mBAAmB,CAAC;AAExE,OAAO,aAA4C,MAAM,mBAAmB,CAAC;AAuB7E,MAAM,WAAW,cACf,SAAQ,UAAU,CAAC,gBAAgB,EAAE,OAAO,GAAG,cAAc,CAAC,EAC5D,aAAa;CAAG;AAEpB,eAAO,MAAM,eAAe,qHAY1B,CAAC;;;;AAkQH,wBAA2D"}
@@ -2,8 +2,8 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
2
2
  import { forwardRef, useRef } from 'react';
3
3
  import styled, { css } from 'styled-components';
4
4
  import { defaultThemeProp } from '../../../theme';
5
- import { useConfiguration, useConsolidatedRef, useFocusWithin, useI18n, useOuterEvent } from '../../../hooks';
6
- import { cap } from '../../../utils';
5
+ import { useConfiguration, useConsolidatedRef, useFocusWithin, useI18n, useOuterEvent, useTestIds } from '../../../hooks';
6
+ import { cap, withTestIds } from '../../../utils';
7
7
  import FormField from '../../FormField';
8
8
  import Button from '../../Button';
9
9
  import Icon, { registerIcon } from '../../Icon';
@@ -12,6 +12,7 @@ import Flex from '../../Flex';
12
12
  import { StyledFormControl } from '../../FormControl';
13
13
  import DatePicker from '../Picker/DatePicker';
14
14
  import Dialog from '../../Dialog/Dialog';
15
+ import { getWeekInputTestIds } from '../DateTime.test-ids';
15
16
  import { parseToDate, getWeekYear, getWeek, generatePickerButtonAriaLabel, convertWeekYearToDate } from './utils';
16
17
  import StyledDateTime, { BareInput, StyledDialogContent, StyledInputContainer } from './DateTime.styles';
17
18
  import usePickerButton from './usePickerButton';
@@ -51,7 +52,8 @@ const convertToCallbackParameter = (date, parts) => {
51
52
  };
52
53
  };
53
54
  const WeekInput = forwardRef((props, ref) => {
54
- const { value, min, max, id, label, labelHidden, status, info, required, readOnly, disabled, onChange, onFocus, onBlur, autoFocus, additionalInfo, ...restProps } = props;
55
+ const { testId, value, min, max, id, label, labelHidden, status, info, required, readOnly, disabled, onChange, onFocus, onBlur, autoFocus, additionalInfo, ...restProps } = props;
56
+ const testIds = useTestIds(testId, getWeekInputTestIds);
55
57
  const { locale } = useConfiguration();
56
58
  const t = useI18n();
57
59
  const containerRef = useConsolidatedRef(ref);
@@ -102,10 +104,10 @@ const WeekInput = forwardRef((props, ref) => {
102
104
  style: 'long',
103
105
  type: 'dateTimeField'
104
106
  });
105
- const WeekNumberInput = (_jsx(PartInput, { placeholder: t('week_placeholder'), "aria-label": displayNames.of('weekOfYear'), value: date ? getWeek(date) : undefined, onChange: onInputChange, size: 2, maxLength: 2, min: 1, max: 53, readOnly: readOnly, ref: weekInputRef, autoFocus: autoFocus }, 'week'));
106
- const YearInput = (_jsx(PartInput, { placeholder: t('year_placeholder'), "aria-label": displayNames.of('year'), value: date ? getWeekYear(date) : undefined, onChange: onInputChange, size: 4, maxLength: 4, min: 1, readOnly: readOnly, ref: yearInputRef }, 'year'));
107
+ const WeekNumberInput = (_jsx(PartInput, { "data-testid": testIds.controlWeek, placeholder: t('week_placeholder'), "aria-label": displayNames.of('weekOfYear'), value: date ? getWeek(date) : undefined, onChange: onInputChange, size: 2, maxLength: 2, min: 1, max: 53, readOnly: readOnly, ref: weekInputRef, autoFocus: autoFocus }, 'week'));
108
+ const YearInput = (_jsx(PartInput, { "data-testid": testIds.controlYear, placeholder: t('year_placeholder'), "aria-label": displayNames.of('year'), value: date ? getWeekYear(date) : undefined, onChange: onInputChange, size: 4, maxLength: 4, min: 1, readOnly: readOnly, ref: yearInputRef }, 'year'));
107
109
  useFocusWithin([containerRef], onFocusChange);
108
- const Picker = (_jsxs(_Fragment, { children: [_jsx(Button, { variant: 'simple', icon: true, ref: setButtonEl, onClick: () => setOpen(cur => !cur), "aria-label": generatePickerButtonAriaLabel(currentlySelectedDate(), 'week', locale, t, open), readOnly: readOnly, disabled: disabled, children: _jsx(Icon, { name: 'calendar' }) }), open && buttonEl && (_jsx(Dialog, { ref: setPopoverRef, target: buttonEl, ariaLabel: t('choose_week'), children: _jsx(Flex, { container: { direction: 'column' }, as: StyledDialogContent, children: _jsx(DatePicker, { selected: currentlySelectedDate(), onChange: selected => {
110
+ const Picker = (_jsxs(_Fragment, { children: [_jsx(Button, { "data-testid": testIds.openClosePicker, variant: 'simple', icon: true, ref: setButtonEl, onClick: () => setOpen(cur => !cur), "aria-label": generatePickerButtonAriaLabel(currentlySelectedDate(), 'week', locale, t, open), readOnly: readOnly, disabled: disabled, children: _jsx(Icon, { name: 'calendar' }) }), open && buttonEl && (_jsx(Dialog, { ref: setPopoverRef, target: buttonEl, ariaLabel: t('choose_week'), children: _jsx(Flex, { container: { direction: 'column' }, as: StyledDialogContent, children: _jsx(DatePicker, { testId: testIds.root, selected: currentlySelectedDate(), onChange: selected => {
109
111
  weekInputRef.current.value =
110
112
  (selected && getWeek(selected).toString().padStart(2, '0')) || '';
111
113
  yearInputRef.current.value =
@@ -114,11 +116,21 @@ const WeekInput = forwardRef((props, ref) => {
114
116
  setTimeout(() => buttonEl?.focus());
115
117
  onInputChange();
116
118
  }, min: min, max: max, mode: 'week' }) }) }))] }));
117
- const Comp = (_jsxs(Flex, { as: StyledWeekInput, forwardedAs: StyledFormControl, container: { alignItems: 'center', wrap: 'nowrap' }, status: status, readOnly: readOnly, disabled: disabled, ref: containerRef, onClick: (e) => {
119
+ const Comp = (_jsxs(Flex, { "data-testid": testIds.root, as: StyledWeekInput, forwardedAs: StyledFormControl, container: { alignItems: 'center', wrap: 'nowrap' }, status: status, readOnly: readOnly, disabled: disabled, ref: containerRef, onClick: (e) => {
118
120
  if (e.target === containerRef.current)
119
121
  weekInputRef.current?.focus();
120
122
  }, ...restProps, children: [_jsxs(Flex, { ref: inputContainerRef, as: StyledInputContainer, container: { alignItems: 'center', wrap: 'wrap' }, children: [cap(displayNames.of('weekOfYear')), " ", WeekNumberInput, ",", YearInput] }), !readOnly && Picker] }));
121
- return label ? (_jsx(FormField, { as: 'fieldset', labelAs: 'legend', ...{ label, labelHidden, id, info, status, required, disabled, additionalInfo }, ref: ref, children: Comp })) : (Comp);
123
+ return label ? (_jsx(FormField, { as: 'fieldset', labelAs: 'legend', ...{
124
+ testId: testIds,
125
+ label,
126
+ labelHidden,
127
+ id,
128
+ info,
129
+ status,
130
+ required,
131
+ disabled,
132
+ additionalInfo
133
+ }, ref: ref, children: Comp })) : (Comp);
122
134
  });
123
- export default WeekInput;
135
+ export default withTestIds(WeekInput, getWeekInputTestIds);
124
136
  //# sourceMappingURL=WeekInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WeekInput.js","sourceRoot":"","sources":["../../../../src/components/DateTime/Input/WeekInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FunctionComponent, forwardRef, PropsWithoutRef, Ref, useRef } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { defaultThemeProp } from '../../../theme';\nimport { ForwardProps, OmitStrict } from '../../../types';\nimport {\n useConfiguration,\n useConsolidatedRef,\n useFocusWithin,\n useI18n,\n useOuterEvent\n} from '../../../hooks';\nimport { cap } from '../../../utils';\nimport FormField from '../../FormField';\nimport Button from '../../Button';\nimport Icon, { registerIcon } from '../../Icon';\nimport * as calendarIcon from '../../Icon/icons/calendar.icon';\nimport Flex from '../../Flex';\nimport { FormControlProps, StyledFormControl } from '../../FormControl';\nimport DatePicker from '../Picker/DatePicker';\nimport DateTimeProps, { DateTimeCallbackParameter } from '../DateTime.types';\nimport Dialog from '../../Dialog/Dialog';\n\nimport {\n parseToDate,\n getWeekYear,\n getWeek,\n generatePickerButtonAriaLabel,\n convertWeekYearToDate\n} from './utils';\nimport StyledDateTime, {\n BareInput,\n StyledDialogContent,\n StyledInputContainer\n} from './DateTime.styles';\nimport usePickerButton from './usePickerButton';\nimport PartInput from './PartInput';\nimport useAutoFocusNextInput from './useAutoFocusNextInput';\nimport type { DateParts } from './DateTimeInput.types';\n\nregisterIcon(calendarIcon);\n\nexport interface WeekInputProps\n extends OmitStrict<FormControlProps, 'value' | 'defaultValue'>,\n DateTimeProps {}\n\nexport const StyledWeekInput = styled(StyledDateTime)<WeekInputProps>(props => {\n const {\n theme: { base }\n } = props;\n\n return css`\n padding-inline-end: 0;\n\n ${StyledInputContainer} > ${BareInput}:first-of-type {\n margin-inline-start: ${base.spacing};\n }\n `;\n});\n\nStyledWeekInput.defaultProps = defaultThemeProp;\n\nconst convertToCallbackParameter = (\n date: Date,\n parts: DateParts<string | undefined>\n): DateTimeCallbackParameter => {\n if ([parts.week, parts.year].every(Boolean)) {\n const { year, month, day } = convertWeekYearToDate(parts) ?? {};\n date.setUTCFullYear(Number(year), Number(month), Number(day));\n return {\n valueAsISOString: date.toISOString(),\n valueAsTimestamp: date.getTime()\n };\n }\n if ([parts.week, parts.year].every(p => !p)) {\n return {\n valueAsISOString: undefined,\n valueAsTimestamp: undefined\n };\n }\n return {\n valueAsISOString: '',\n valueAsTimestamp: NaN,\n state: 'incomplete'\n };\n};\n\nconst WeekInput: FunctionComponent<WeekInputProps & ForwardProps> = forwardRef(\n (props: PropsWithoutRef<WeekInputProps>, ref: Ref<HTMLFieldSetElement>) => {\n const {\n value,\n min,\n max,\n id,\n label,\n labelHidden,\n status,\n info,\n required,\n readOnly,\n disabled,\n onChange,\n onFocus,\n onBlur,\n autoFocus,\n additionalInfo,\n ...restProps\n } = props;\n\n const { locale } = useConfiguration();\n const t = useI18n();\n const containerRef = useConsolidatedRef(ref);\n\n const date = value !== undefined ? parseToDate(value) : undefined;\n\n const [weekInputRef, yearInputRef] = [\n useRef<HTMLInputElement>(null),\n useRef<HTMLInputElement>(null)\n ];\n\n useAutoFocusNextInput([weekInputRef, yearInputRef]);\n\n const pickParts = (): DateParts<string | undefined> => {\n return {\n week: weekInputRef.current?.value || undefined,\n year: yearInputRef.current?.value || undefined\n };\n };\n\n const currentlySelectedDate = () => {\n const dateParts = convertWeekYearToDate(pickParts());\n if (dateParts) {\n const year = Number(dateParts.year);\n const month = Number(dateParts.month);\n const day = Number(dateParts.day);\n\n const current = date ?? new Date();\n return new Date(\n current.setUTCFullYear(\n year ?? current.getUTCFullYear(),\n month ?? current.getUTCMonth(),\n day ?? current.getUTCDate()\n )\n );\n }\n };\n\n const inputContainerRef = useRef<HTMLDivElement>(null);\n\n const onFocusChange = (focused: boolean) => {\n const callbackParam = convertToCallbackParameter(\n date ? new Date(date) : new Date(),\n pickParts()\n );\n if (onFocus && focused) onFocus(callbackParam);\n if (!focused) {\n if (inputContainerRef.current) inputContainerRef.current.scrollTop = 0;\n onBlur?.(callbackParam);\n }\n };\n\n const [open, setOpen, , setPopoverRef, buttonEl, setButtonEl] = usePickerButton();\n\n const onInputChange = () => {\n onChange?.(convertToCallbackParameter(date ? new Date(date) : new Date(), pickParts()));\n buttonEl?.setAttribute(\n 'aria-label',\n generatePickerButtonAriaLabel(currentlySelectedDate(), 'week', locale, t, open)\n );\n };\n\n // autoclose picker on focusing out\n useOuterEvent('focusin', [containerRef], e => {\n if (containerRef.current?.contains(e.relatedTarget as HTMLElement)) setOpen(false);\n });\n\n const displayNames = new Intl.DisplayNames(locale, {\n style: 'long',\n type: 'dateTimeField'\n }) as Intl.DateTimeDisplayNames;\n\n const WeekNumberInput = (\n <PartInput\n key='week'\n placeholder={t('week_placeholder')}\n aria-label={displayNames.of('weekOfYear')}\n value={date ? getWeek(date) : undefined}\n onChange={onInputChange}\n size={2}\n maxLength={2}\n min={1}\n max={53}\n readOnly={readOnly}\n ref={weekInputRef}\n autoFocus={autoFocus}\n />\n );\n\n const YearInput = (\n <PartInput\n key='year'\n placeholder={t('year_placeholder')}\n aria-label={displayNames.of('year')}\n value={date ? getWeekYear(date) : undefined}\n onChange={onInputChange}\n size={4}\n maxLength={4}\n min={1}\n readOnly={readOnly}\n ref={yearInputRef}\n />\n );\n\n useFocusWithin([containerRef], onFocusChange);\n\n const Picker = (\n <>\n <Button\n variant='simple'\n icon\n ref={setButtonEl}\n onClick={() => setOpen(cur => !cur)}\n aria-label={generatePickerButtonAriaLabel(\n currentlySelectedDate(),\n 'week',\n locale,\n t,\n open\n )}\n readOnly={readOnly}\n disabled={disabled}\n >\n <Icon name='calendar' />\n </Button>\n {open && buttonEl && (\n <Dialog ref={setPopoverRef} target={buttonEl} ariaLabel={t('choose_week')}>\n <Flex container={{ direction: 'column' }} as={StyledDialogContent}>\n <DatePicker\n selected={currentlySelectedDate()}\n onChange={selected => {\n weekInputRef.current!.value =\n (selected && getWeek(selected).toString().padStart(2, '0')) || '';\n yearInputRef.current!.value =\n (selected && getWeekYear(selected).toString()) || '';\n setOpen(false);\n setTimeout(() => buttonEl?.focus());\n onInputChange();\n }}\n min={min}\n max={max}\n mode='week'\n />\n </Flex>\n </Dialog>\n )}\n </>\n );\n\n const Comp = (\n <Flex\n as={StyledWeekInput}\n forwardedAs={StyledFormControl}\n container={{ alignItems: 'center', wrap: 'nowrap' }}\n status={status}\n readOnly={readOnly}\n disabled={disabled}\n ref={containerRef}\n onClick={(e: MouseEvent) => {\n if (e.target === containerRef.current) weekInputRef.current?.focus();\n }}\n {...restProps}\n >\n <Flex\n ref={inputContainerRef}\n as={StyledInputContainer}\n container={{ alignItems: 'center', wrap: 'wrap' }}\n >\n {cap(displayNames.of('weekOfYear'))} {WeekNumberInput},{YearInput}\n </Flex>\n {!readOnly && Picker}\n </Flex>\n );\n\n return label ? (\n <FormField\n as='fieldset'\n labelAs='legend'\n {...{ label, labelHidden, id, info, status, required, disabled, additionalInfo }}\n ref={ref}\n >\n {Comp}\n </FormField>\n ) : (\n Comp\n );\n }\n);\n\nexport default WeekInput;\n"]}
1
+ {"version":3,"file":"WeekInput.js","sourceRoot":"","sources":["../../../../src/components/DateTime/Input/WeekInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FunctionComponent, forwardRef, PropsWithoutRef, Ref, useRef } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { defaultThemeProp } from '../../../theme';\nimport { ForwardProps, OmitStrict } from '../../../types';\nimport {\n useConfiguration,\n useConsolidatedRef,\n useFocusWithin,\n useI18n,\n useOuterEvent,\n useTestIds\n} from '../../../hooks';\nimport { cap, withTestIds } from '../../../utils';\nimport FormField from '../../FormField';\nimport Button from '../../Button';\nimport Icon, { registerIcon } from '../../Icon';\nimport * as calendarIcon from '../../Icon/icons/calendar.icon';\nimport Flex from '../../Flex';\nimport { FormControlProps, StyledFormControl } from '../../FormControl';\nimport DatePicker from '../Picker/DatePicker';\nimport DateTimeProps, { DateTimeCallbackParameter } from '../DateTime.types';\nimport Dialog from '../../Dialog/Dialog';\nimport { getWeekInputTestIds } from '../DateTime.test-ids';\n\nimport {\n parseToDate,\n getWeekYear,\n getWeek,\n generatePickerButtonAriaLabel,\n convertWeekYearToDate\n} from './utils';\nimport StyledDateTime, {\n BareInput,\n StyledDialogContent,\n StyledInputContainer\n} from './DateTime.styles';\nimport usePickerButton from './usePickerButton';\nimport PartInput from './PartInput';\nimport useAutoFocusNextInput from './useAutoFocusNextInput';\nimport type { DateParts } from './DateTimeInput.types';\n\nregisterIcon(calendarIcon);\n\nexport interface WeekInputProps\n extends OmitStrict<FormControlProps, 'value' | 'defaultValue'>,\n DateTimeProps {}\n\nexport const StyledWeekInput = styled(StyledDateTime)<WeekInputProps>(props => {\n const {\n theme: { base }\n } = props;\n\n return css`\n padding-inline-end: 0;\n\n ${StyledInputContainer} > ${BareInput}:first-of-type {\n margin-inline-start: ${base.spacing};\n }\n `;\n});\n\nStyledWeekInput.defaultProps = defaultThemeProp;\n\nconst convertToCallbackParameter = (\n date: Date,\n parts: DateParts<string | undefined>\n): DateTimeCallbackParameter => {\n if ([parts.week, parts.year].every(Boolean)) {\n const { year, month, day } = convertWeekYearToDate(parts) ?? {};\n date.setUTCFullYear(Number(year), Number(month), Number(day));\n return {\n valueAsISOString: date.toISOString(),\n valueAsTimestamp: date.getTime()\n };\n }\n if ([parts.week, parts.year].every(p => !p)) {\n return {\n valueAsISOString: undefined,\n valueAsTimestamp: undefined\n };\n }\n return {\n valueAsISOString: '',\n valueAsTimestamp: NaN,\n state: 'incomplete'\n };\n};\n\nconst WeekInput: FunctionComponent<WeekInputProps & ForwardProps> = forwardRef(\n (props: PropsWithoutRef<WeekInputProps>, ref: Ref<HTMLFieldSetElement>) => {\n const {\n testId,\n value,\n min,\n max,\n id,\n label,\n labelHidden,\n status,\n info,\n required,\n readOnly,\n disabled,\n onChange,\n onFocus,\n onBlur,\n autoFocus,\n additionalInfo,\n ...restProps\n } = props;\n\n const testIds = useTestIds(testId, getWeekInputTestIds);\n\n const { locale } = useConfiguration();\n const t = useI18n();\n const containerRef = useConsolidatedRef(ref);\n\n const date = value !== undefined ? parseToDate(value) : undefined;\n\n const [weekInputRef, yearInputRef] = [\n useRef<HTMLInputElement>(null),\n useRef<HTMLInputElement>(null)\n ];\n\n useAutoFocusNextInput([weekInputRef, yearInputRef]);\n\n const pickParts = (): DateParts<string | undefined> => {\n return {\n week: weekInputRef.current?.value || undefined,\n year: yearInputRef.current?.value || undefined\n };\n };\n\n const currentlySelectedDate = () => {\n const dateParts = convertWeekYearToDate(pickParts());\n if (dateParts) {\n const year = Number(dateParts.year);\n const month = Number(dateParts.month);\n const day = Number(dateParts.day);\n\n const current = date ?? new Date();\n return new Date(\n current.setUTCFullYear(\n year ?? current.getUTCFullYear(),\n month ?? current.getUTCMonth(),\n day ?? current.getUTCDate()\n )\n );\n }\n };\n\n const inputContainerRef = useRef<HTMLDivElement>(null);\n\n const onFocusChange = (focused: boolean) => {\n const callbackParam = convertToCallbackParameter(\n date ? new Date(date) : new Date(),\n pickParts()\n );\n if (onFocus && focused) onFocus(callbackParam);\n if (!focused) {\n if (inputContainerRef.current) inputContainerRef.current.scrollTop = 0;\n onBlur?.(callbackParam);\n }\n };\n\n const [open, setOpen, , setPopoverRef, buttonEl, setButtonEl] = usePickerButton();\n\n const onInputChange = () => {\n onChange?.(convertToCallbackParameter(date ? new Date(date) : new Date(), pickParts()));\n buttonEl?.setAttribute(\n 'aria-label',\n generatePickerButtonAriaLabel(currentlySelectedDate(), 'week', locale, t, open)\n );\n };\n\n // autoclose picker on focusing out\n useOuterEvent('focusin', [containerRef], e => {\n if (containerRef.current?.contains(e.relatedTarget as HTMLElement)) setOpen(false);\n });\n\n const displayNames = new Intl.DisplayNames(locale, {\n style: 'long',\n type: 'dateTimeField'\n }) as Intl.DateTimeDisplayNames;\n\n const WeekNumberInput = (\n <PartInput\n data-testid={testIds.controlWeek}\n key='week'\n placeholder={t('week_placeholder')}\n aria-label={displayNames.of('weekOfYear')}\n value={date ? getWeek(date) : undefined}\n onChange={onInputChange}\n size={2}\n maxLength={2}\n min={1}\n max={53}\n readOnly={readOnly}\n ref={weekInputRef}\n autoFocus={autoFocus}\n />\n );\n\n const YearInput = (\n <PartInput\n data-testid={testIds.controlYear}\n key='year'\n placeholder={t('year_placeholder')}\n aria-label={displayNames.of('year')}\n value={date ? getWeekYear(date) : undefined}\n onChange={onInputChange}\n size={4}\n maxLength={4}\n min={1}\n readOnly={readOnly}\n ref={yearInputRef}\n />\n );\n\n useFocusWithin([containerRef], onFocusChange);\n\n const Picker = (\n <>\n <Button\n data-testid={testIds.openClosePicker}\n variant='simple'\n icon\n ref={setButtonEl}\n onClick={() => setOpen(cur => !cur)}\n aria-label={generatePickerButtonAriaLabel(\n currentlySelectedDate(),\n 'week',\n locale,\n t,\n open\n )}\n readOnly={readOnly}\n disabled={disabled}\n >\n <Icon name='calendar' />\n </Button>\n {open && buttonEl && (\n <Dialog ref={setPopoverRef} target={buttonEl} ariaLabel={t('choose_week')}>\n <Flex container={{ direction: 'column' }} as={StyledDialogContent}>\n <DatePicker\n testId={testIds.root}\n selected={currentlySelectedDate()}\n onChange={selected => {\n weekInputRef.current!.value =\n (selected && getWeek(selected).toString().padStart(2, '0')) || '';\n yearInputRef.current!.value =\n (selected && getWeekYear(selected).toString()) || '';\n setOpen(false);\n setTimeout(() => buttonEl?.focus());\n onInputChange();\n }}\n min={min}\n max={max}\n mode='week'\n />\n </Flex>\n </Dialog>\n )}\n </>\n );\n\n const Comp = (\n <Flex\n data-testid={testIds.root}\n as={StyledWeekInput}\n forwardedAs={StyledFormControl}\n container={{ alignItems: 'center', wrap: 'nowrap' }}\n status={status}\n readOnly={readOnly}\n disabled={disabled}\n ref={containerRef}\n onClick={(e: MouseEvent) => {\n if (e.target === containerRef.current) weekInputRef.current?.focus();\n }}\n {...restProps}\n >\n <Flex\n ref={inputContainerRef}\n as={StyledInputContainer}\n container={{ alignItems: 'center', wrap: 'wrap' }}\n >\n {cap(displayNames.of('weekOfYear'))} {WeekNumberInput},{YearInput}\n </Flex>\n {!readOnly && Picker}\n </Flex>\n );\n\n return label ? (\n <FormField\n as='fieldset'\n labelAs='legend'\n {...{\n testId: testIds,\n label,\n labelHidden,\n id,\n info,\n status,\n required,\n disabled,\n additionalInfo\n }}\n ref={ref}\n >\n {Comp}\n </FormField>\n ) : (\n Comp\n );\n }\n);\n\nexport default withTestIds(WeekInput, getWeekInputTestIds);\n"]}
@@ -1,7 +1,7 @@
1
1
  import { FunctionComponent } from 'react';
2
- import { ForwardProps } from '../../../types';
2
+ import { ForwardProps, TestIdProp } from '../../../types';
3
3
  import { FormControlProps } from '../../FormControl';
4
- export interface CalendarProps {
4
+ export interface CalendarProps extends TestIdProp {
5
5
  /**
6
6
  * Sets DOM id for the control and associates label element via 'for' attribute.
7
7
  * If an id is not pass, a random id will be generated for any render.
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../../../src/components/DateTime/Picker/Calendar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EAQlB,MAAM,OAAO,CAAC;AAYf,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAerD,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,EAAE,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC5B,yFAAyF;IACzF,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB;;;OAGG;IACH,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,oFAAoF;IACpF,aAAa,CAAC,EAAE;QAAE,SAAS,EAAE,IAAI,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,IAAI,GAAG,SAAS,CAAA;KAAE,CAAC;IAC3E,gEAAgE;IAChE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAChC,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/B,uGAAuG;IACvG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7B,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAID,QAAA,MAAM,QAAQ,EAAE,iBAAiB,CAAC,aAAa,GAAG,YAAY,CAsU7D,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../../../src/components/DateTime/Picker/Calendar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EAQlB,MAAM,OAAO,CAAC;AAYf,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAerD,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C;;;OAGG;IACH,EAAE,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC5B,yFAAyF;IACzF,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB;;;OAGG;IACH,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,oFAAoF;IACpF,aAAa,CAAC,EAAE;QAAE,SAAS,EAAE,IAAI,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,IAAI,GAAG,SAAS,CAAA;KAAE,CAAC;IAC3E,gEAAgE;IAChE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAChC,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/B,uGAAuG;IACvG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7B,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAID,QAAA,MAAM,QAAQ,EAAE,iBAAiB,CAAC,aAAa,GAAG,YAAY,CAwU7D,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -9,7 +9,7 @@ import VisuallyHiddenText from '../../VisuallyHiddenText';
9
9
  import { getDaysOfMonth, getLocalizedDays, getWeeksOfMonth } from './utils';
10
10
  import { StyledColumnLabel, StyledPick, StyledDay, StyledCalendar, StyledWeekGrid, StyledWeekLabel, StyledWeekNumber } from './Calendar.styles';
11
11
  const ariaOpts = { day: 'numeric', month: 'long', year: 'numeric' };
12
- const Calendar = forwardRef(({ selected, current = selected ? new Date(selected.getTime()) : new Date(), selectedRange, showHighlight, mode = 'date', showWeekNumber, calendarType: calendar = CALENDAR_TYPES.ISO_8601, onSelect, onFocus, disabled, min: minProp, max: maxProp }, ref) => {
12
+ const Calendar = forwardRef(({ testId, selected, current = selected ? new Date(selected.getTime()) : new Date(), selectedRange, showHighlight, mode = 'date', showWeekNumber, calendarType: calendar = CALENDAR_TYPES.ISO_8601, onSelect, onFocus, disabled, min: minProp, max: maxProp }, ref) => {
13
13
  const { locale } = useConfiguration();
14
14
  const min = minProp ? parseToDate(minProp) : -Infinity;
15
15
  const max = maxProp ? parseToDate(maxProp) : Infinity;
@@ -164,7 +164,7 @@ const Calendar = forwardRef(({ selected, current = selected ? new Date(selected.
164
164
  _jsx("tr", { children: _jsx("td", { children: week }) }, `week-${index}`));
165
165
  });
166
166
  const weeksGrid = (_jsxs(StyledWeekGrid, { role: 'grid', onKeyDown: onKeyDown, ref: containerRef, children: [_jsx("thead", { children: _jsx("tr", { children: _jsx("th", { children: weekLabel }) }) }), _jsx("tbody", { children: weeksCells })] }));
167
- return (_jsxs(_Fragment, { children: [mode === 'week' && weeksGrid, _jsxs(StyledCalendar, { ref: mode === 'date' ? containerRef : undefined, "aria-label": current.toLocaleString(locale, {
167
+ return (_jsxs(_Fragment, { children: [mode === 'week' && weeksGrid, _jsxs(StyledCalendar, { "data-testid": testId, ref: mode === 'date' ? containerRef : undefined, "aria-label": current.toLocaleString(locale, {
168
168
  month: 'long',
169
169
  year: 'numeric',
170
170
  timeZone: 'UTC'
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.js","sourceRoot":"","sources":["../../../../src/components/DateTime/Picker/Calendar.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,OAAO,EAGP,QAAQ,EACR,UAAU,EAGV,SAAS,EACT,WAAW,EACZ,MAAM,OAAO,CAAC;AAEf,OAAO,IAAI,MAAM,YAAY,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,OAAO,EACP,WAAW,EACX,eAAe,EAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAG/F,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EACf,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAwC3B,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAW,CAAC;AAE7E,MAAM,QAAQ,GAAoD,UAAU,CAC1E,CACE,EACE,QAAQ,EACR,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAC9D,aAAa,EACb,aAAa,EACb,IAAI,GAAG,MAAM,EACb,cAAc,EACd,YAAY,EAAE,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAChD,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,OAAO,EACmB,EACjC,GAA0B,EAC1B,EAAE;IACF,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAEtC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACvD,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEtD,IAAI,GAAG,YAAY,IAAI;QAAE,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC1F,IAAI,GAAG,YAAY,IAAI;QAAE,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAE1F,MAAM,aAAa,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC;IAC/D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACtD,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAEtD,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,QAAQ,IAAI,yBAAyB,CAAC,MAAM,CAAC,EACnD,CAAC,MAAM,EAAE,QAAQ,CAAC,CACnB,CAAC;IAEF,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,EAAQ,CAAC;IAEnE,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,CAA6B,EAAE,EAAE;QAChC,IACE,CAAC,IAAI,KAAK,MAAM;YACd,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC;YACrD,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAC3B,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EACjB;YACA,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;YACxC,QAAQ,CAAC,CAAC,GAAG,EAAE;gBACb,KAAK,SAAS;oBACZ,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;oBACnD,MAAM;gBACR,KAAK,WAAW;oBACd,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;oBACnD,MAAM;gBACR,KAAK,YAAY;oBACf,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;oBACnD,MAAM;gBACR,KAAK,WAAW;oBACd,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;oBACnD,MAAM;gBACR,QAAQ;aACT;YACD,IAAI,UAAU,GAAG,GAAG,IAAI,UAAU,GAAG,GAAG;gBAAE,OAAO;YACjD,aAAa,CAAC,UAAU,CAAC,CAAC;YAC1B,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC;YACtB,oBAAoB,CAAC,UAAU,CAAC,CAAC;SAClC;QACD,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE;YACrB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC;SACxB;IACH,CAAC,EACD,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CACtC,CAAC;IAEF,MAAM,YAAY,GAAG,kBAAkB,CAAmB,GAAG,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IAEhD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAE1C,MAAM,UAAU,GAAG,CAAC,GAAS,EAAE,EAAE;QAC/B,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAE7E,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1E,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,GAAS,EAAE,EAAE;QAC/B,OAAO;YACL,QAAQ,IAAI,eAAe,CAAC,QAAQ,CAAC;YACrC,aAAa,EAAE,SAAS,IAAI,eAAe,CAAC,aAAa,EAAE,SAAS,CAAC;YACrE,aAAa,EAAE,OAAO,IAAI,eAAe,CAAC,aAAa,EAAE,OAAO,CAAC;SAClE,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,GAAS,EAAE,EAAE;QACnC,OAAO,CACL,QAAQ;YACR,eAAe,CAAC,GAAG,CAAC;gBAClB,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAC7F,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,GAAS,EAAE,EAAE;QAC9B,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,eAAe,CAAC,UAAU,CAAC,CAAC;IAC9D,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,GAAS,EAAE,EAAE;QAClC,OAAO,CACL,eAAe,CAAC,GAAG,CAAC;YACpB,eAAe,CACb,gBAAgB,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAC9E,CACF,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,GAAS,EAAE,EAAE;QAC9B,OAAO,CACL,aAAa;YACb,aAAa,CAAC,SAAS;YACvB,aAAa,CAAC,OAAO;YACrB,GAAG,IAAI,aAAa,CAAC,SAAS;YAC9B,GAAG,IAAI,aAAa,CAAC,OAAO,CAC7B,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,GAAS,EAAE,EAAE;QAClC,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,IAAI,CAAC,iBAAiB;YAAE,OAAO,KAAK,CAAC;QACzE,MAAM,2BAA2B,GAAG,CAAC,iBAA0C,EAAE,EAAE;YACjF,MAAM,aAAa,GAAG,aAAa,CAAC,iBAAiB,CAAC,CAAC;YACvD,IAAI,CAAC,aAAa;gBAAE,OAAO,KAAK,CAAC;YACjC,OAAO,CAAC,CAAC,CACP,aAAa;gBACb,CAAC,CAAC,GAAG,IAAI,aAAa,IAAI,GAAG,IAAI,iBAAiB,CAAC;oBACjD,CAAC,GAAG,IAAI,aAAa,IAAI,GAAG,IAAI,iBAAiB,CAAC,CAAC,CACtD,CAAC;QACJ,CAAC,CAAC;QACF,OAAO,2BAA2B,CAAC,WAAW,CAAC,IAAI,2BAA2B,CAAC,SAAS,CAAC,CAAC;IAC5F,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ;YACV,YAAY,CAAC,OAAO,EAAE,aAAa,CAAoB,sBAAsB,CAAC,EAAE,KAAK,EAAE,CAAC;IAC5F,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAE3B,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,EAAE,YAAY,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACtF,OAAO,CACL,KAAC,SAAS,IAER,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC,QAAQ,EAAE,QAAQ,IAAI,IAAI,KAAK,MAAM,IAAI,UAAU,CAAC,GAAG,CAAC,EACxD,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,KAAK,KAAK,EACvC,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,mBAClC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,kBAC7B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAClD,mBAAmB,EAAE,GAAG,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,gBACpD,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EACvE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,EACxE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAC7E,OAAO,EAAE,GAAG,EAAE;gBACZ,aAAa,CAAC,GAAG,CAAC,CAAC;gBACnB,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;gBACf,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC,YAEA,GAAG,CAAC,UAAU,EAAE,IAjBZ,GAAG,CAAC,OAAO,EAAE,CAkBR,CACb,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAE5F,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IAEpB,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QACjD,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,eAAe;KACtB,CAA8B,CAAC;IAChC,MAAM,iBAAiB,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QACtD,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,eAAe;KACtB,CAA8B,CAAC;IAEhC,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAChE,OAAO,CACL,8BACE,KAAC,IAAI,IAAC,EAAE,EAAE,gBAAgB,iBAA2B,MAAM,YACxD,MAAM,CAAC,QAAQ,EAAE,IADa,MAAM,CAEhC,EACP,KAAC,kBAAkB,cAChB,GAAG,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,IAAI,OAAO;yBAC9D,cAAc,EAAE;yBAChB,QAAQ,EAAE,EAAE,GACI,IACpB,CACJ,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QACvE,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QACzE,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9C,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QACnD,OAAO,CACL,MAAC,UAAU,IAET,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC/C,QAAQ,EAAE,QAAQ,IAAI,IAAI,KAAK,MAAM,IAAI,UAAU,CAAC,aAAa,CAAC,mBACnD,cAAc,CAAC,aAAa,CAAC,IAAI,SAAS,gBAC7C,GAAG,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,IAAI,eAAe,CAClF,aAAa,EACb,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CACtC,MAAM,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,kBAChE,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAC/D,WAAW,EAAE,GAAG,EAAE;gBAChB,aAAa,CAAC,aAAa,CAAC,CAAC;gBAC7B,OAAO,EAAE,CAAC,aAAa,CAAC,CAAC;gBACzB,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC;YAC5B,CAAC,aAEA,GAAG,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,GAAG,EACxC,MAAM,CAAC,QAAQ,EAAE,KAhBb,MAAM,CAiBA,CACd,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GACb,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAChB,8BACE,KAAC,IAAI,IACH,EAAE,EAAE,eAAe,EACnB,WAAW,EAAC,MAAM,EAClB,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,iBAC7B,MAAM,YAEjB,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,GACnC,EACP,KAAC,kBAAkB,cAAE,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,GAAsB,IACvE,CACJ,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,EAAE,EAAE,eAAe,YAAG,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,GAAQ,CACvE,CAAC;IAEJ,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAC/C,cAAI,IAAI,EAAC,cAAc,aACrB,KAAC,IAAI,IAAC,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAC,MAAM,EAAY,KAAK,EAAE,IAAI,iBAAc,MAAM,YACvF,IAAI,IAD8C,IAAI,CAElD,EACP,KAAC,kBAAkB,cAAE,IAAI,GAAsB,KAJpB,IAAI,CAK5B,CACN,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,CAAC,WAA4B,EAAE,IAAiB,EAAE,KAAa,EAAE,EAAE;QACtF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAEzC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;YAC5B,WAAW,CAAC,UAAU,CAAC,GAAG,EAAmB,CAAC;SAC/C;QAED,WAAW,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC9D,MAAM,SAAS,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;QACL,oDAAoD;QACpD,yBACG,aAAa,IAAI,aAAI,KAAK,EAAC,KAAK,YAAE,SAAS,GAAM,EACjD,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;oBAC1B,oDAAoD;oBACpD,OAAO,uBAA6B,GAAG,IAAvB,OAAO,QAAQ,EAAE,CAAY,CAAC;gBAChD,CAAC,CAAC,KALK,QAAQ,KAAK,EAAE,CAMnB,CACN,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAClD,OAAO;QACL,oDAAoD;QACpD,uBACE,uBAAK,IAAI,GAAM,IADR,QAAQ,KAAK,EAAE,CAEnB,CACN,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,CAChB,MAAC,cAAc,IAAC,IAAI,EAAC,MAAM,EAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,aACjE,0BACE,uBACE,uBAAK,SAAS,GAAM,GACjB,GACC,EACR,0BAAQ,UAAU,GAAS,IACZ,CAClB,CAAC;IAEF,OAAO,CACL,8BACG,IAAI,KAAK,MAAM,IAAI,SAAS,EAC7B,MAAC,cAAc,IACb,GAAG,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,gBACnC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE;oBACzC,KAAK,EAAE,MAAM;oBACb,IAAI,EAAE,SAAS;oBACf,QAAQ,EAAE,KAAK;iBAChB,CAAC,EACF,SAAS,EAAE,SAAS,iBACP,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAC/C,IAAI,EAAC,MAAM,aAEX,0BACE,yBACG,aAAa,IAAI,uBAAK,SAAS,GAAM,EACrC,YAAY,IACV,GACC,EACR,0BAAQ,KAAK,GAAS,IACP,EACjB,KAAC,kBAAkB,iBAAW,QAAQ,EAAC,IAAI,EAAC,OAAO,YAChD,CAAC,CAAC,iBAAiB,CAAC,GACF,IACpB,CACJ,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,QAAQ,CAAC","sourcesContent":["import {\n useMemo,\n FunctionComponent,\n KeyboardEvent,\n useState,\n forwardRef,\n PropsWithoutRef,\n Ref,\n useEffect,\n useCallback\n} from 'react';\n\nimport Text from '../../Text';\nimport { CALENDAR_TYPES } from '../Input/local';\nimport {\n getCalendarTypeFromLocale,\n getDateOfISOWeek,\n getWeek,\n parseToDate,\n toUTCDateString\n} from '../Input/utils';\nimport { useConfiguration, useConsolidatedRef, useFocusWithin, useI18n } from '../../../hooks';\nimport { ForwardProps } from '../../../types';\nimport { FormControlProps } from '../../FormControl';\nimport { cap } from '../../../utils';\nimport VisuallyHiddenText from '../../VisuallyHiddenText';\n\nimport { getDaysOfMonth, getLocalizedDays, getWeeksOfMonth } from './utils';\nimport {\n StyledColumnLabel,\n StyledPick,\n StyledDay,\n StyledCalendar,\n StyledWeekGrid,\n StyledWeekLabel,\n StyledWeekNumber\n} from './Calendar.styles';\n\nexport interface CalendarProps {\n /**\n * Sets DOM id for the control and associates label element via 'for' attribute.\n * If an id is not pass, a random id will be generated for any render.\n */\n id?: FormControlProps['id'];\n /** Defines default date that will be selected initially when the Calendar is visible. */\n selected?: Date;\n /**\n * Defines currently visible month.\n * @default new Date()\n */\n current?: Date;\n /** Defines dates range with start date and end date that can be set by the user. */\n selectedRange?: { startDate: Date | undefined; endDate: Date | undefined };\n /** Defines if days should be highlighted for range selection */\n showHighlight?: boolean;\n /** Defines if week numbers should be displayed in calendar */\n showWeekNumber?: boolean;\n /**\n * The mode of the calendar that will be rendered, ie. whether single date or week are selectable.\n * @default 'date'\n */\n mode?: 'date' | 'week';\n /** Callback fired when new day is selected. */\n onSelect?: (date: Date) => void;\n /** Callback fired when user focuses new day. */\n onFocus?: (date: Date) => void;\n /** Sets the type of calendar to be used. This will be determined by locale if no value is provided. */\n calendarType?: string;\n /** Defines minimum available value that can be selected by the user. */\n min?: string | number | Date;\n /** Defines maximum available value that can be selected by the user. */\n max?: string | number | Date;\n /** Set the calendar to disabled state, ie. non-interactive. */\n disabled?: boolean;\n}\n\nconst ariaOpts = { day: 'numeric', month: 'long', year: 'numeric' } as const;\n\nconst Calendar: FunctionComponent<CalendarProps & ForwardProps> = forwardRef(\n (\n {\n selected,\n current = selected ? new Date(selected.getTime()) : new Date(),\n selectedRange,\n showHighlight,\n mode = 'date',\n showWeekNumber,\n calendarType: calendar = CALENDAR_TYPES.ISO_8601,\n onSelect,\n onFocus,\n disabled,\n min: minProp,\n max: maxProp\n }: PropsWithoutRef<CalendarProps>,\n ref: Ref<HTMLTableElement>\n ) => {\n const { locale } = useConfiguration();\n\n const min = minProp ? parseToDate(minProp) : -Infinity;\n const max = maxProp ? parseToDate(maxProp) : Infinity;\n\n if (min instanceof Date) min.setUTCMinutes(min.getUTCMinutes() - min.getTimezoneOffset());\n if (max instanceof Date) max.setUTCMinutes(max.getUTCMinutes() - max.getTimezoneOffset());\n\n const showWeekLabel = mode === 'week' ? false : showWeekNumber;\n const [focusedDay, setFocusedDay] = useState(current);\n useEffect(() => {\n setFocusedDay(current);\n }, [current.getUTCFullYear(), current.getUTCMonth()]);\n\n const calendarType = useMemo(\n () => calendar ?? getCalendarTypeFromLocale(locale),\n [locale, calendar]\n );\n\n const [highlightBoundary, setHighlightBoundary] = useState<Date>();\n\n const onKeyDown = useCallback(\n (e: KeyboardEvent<HTMLElement>) => {\n if (\n (mode === 'date'\n ? ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight']\n : ['ArrowUp', 'ArrowDown']\n ).includes(e.key)\n ) {\n e.preventDefault();\n const newFocused = new Date(focusedDay);\n switch (e.key) {\n case 'ArrowUp':\n newFocused.setUTCDate(focusedDay.getUTCDate() - 7);\n break;\n case 'ArrowDown':\n newFocused.setUTCDate(focusedDay.getUTCDate() + 7);\n break;\n case 'ArrowRight':\n newFocused.setUTCDate(focusedDay.getUTCDate() + 1);\n break;\n case 'ArrowLeft':\n newFocused.setUTCDate(focusedDay.getUTCDate() - 1);\n break;\n default:\n }\n if (newFocused < min || newFocused > max) return;\n setFocusedDay(newFocused);\n onFocus?.(newFocused);\n setHighlightBoundary(newFocused);\n }\n if (e.key === 'Enter') {\n e.preventDefault();\n onSelect?.(focusedDay);\n }\n },\n [mode, focusedDay, onFocus, onSelect]\n );\n\n const containerRef = useConsolidatedRef<HTMLTableElement>(ref);\n const hasFocus = useFocusWithin([containerRef]);\n\n const today = toUTCDateString(new Date());\n\n const isDisabled = (day: Date) => {\n const maxDate = new Date(max);\n maxDate.setUTCMinutes(maxDate.getUTCMinutes() - maxDate.getTimezoneOffset());\n\n return Number(min) > day.getTime() || day.getTime() > maxDate.getTime();\n };\n\n const isSelected = (day: Date) => {\n return [\n selected && toUTCDateString(selected),\n selectedRange?.startDate && toUTCDateString(selectedRange?.startDate),\n selectedRange?.endDate && toUTCDateString(selectedRange?.endDate)\n ].includes(toUTCDateString(day));\n };\n\n const isWeekSelected = (day: Date) => {\n return (\n selected &&\n toUTCDateString(day) ===\n toUTCDateString(getDateOfISOWeek(getWeek(selected, calendarType), selected.getFullYear()))\n );\n };\n\n const isFocused = (day: Date) => {\n return toUTCDateString(day) === toUTCDateString(focusedDay);\n };\n\n const isWeekFocused = (day: Date) => {\n return (\n toUTCDateString(day) ===\n toUTCDateString(\n getDateOfISOWeek(getWeek(focusedDay, calendarType), focusedDay.getFullYear())\n )\n );\n };\n\n const isInRange = (day: Date) => {\n return (\n selectedRange &&\n selectedRange.startDate &&\n selectedRange.endDate &&\n day >= selectedRange.startDate &&\n day <= selectedRange.endDate\n );\n };\n\n const isHighlighted = (day: Date) => {\n if (!selectedRange || !showHighlight || !highlightBoundary) return false;\n const betweenHighlightAndBoundary = (rangeBoundaryType: 'startDate' | 'endDate') => {\n const rangeBoundary = selectedRange[rangeBoundaryType];\n if (!rangeBoundary) return false;\n return !!(\n rangeBoundary &&\n ((day >= rangeBoundary && day <= highlightBoundary) ||\n (day <= rangeBoundary && day >= highlightBoundary))\n );\n };\n return betweenHighlightAndBoundary('startDate') || betweenHighlightAndBoundary('endDate');\n };\n\n useEffect(() => {\n if (hasFocus)\n containerRef.current?.querySelector<HTMLButtonElement>('button[tabindex=\"0\"]')?.focus();\n }, [hasFocus, focusedDay]);\n\n const days = getDaysOfMonth(current, calendarType ?? CALENDAR_TYPES.ISO_8601).map(day => {\n return (\n <StyledDay\n key={day.getTime()}\n tabIndex={isFocused(day) ? 0 : -1}\n disabled={disabled || mode === 'week' || isDisabled(day)}\n current={toUTCDateString(day) === today}\n highlighted={isInRange(day) || isHighlighted(day)}\n aria-selected={isSelected(day) || undefined}\n aria-current={isSelected(day) ? 'date' : undefined}\n dayInNexOrPrevMonth={day.getUTCMonth() !== current.getUTCMonth()}\n aria-label={toUTCDateString(day, Intl.DateTimeFormat(locale, ariaOpts))}\n onMouseOver={showHighlight ? () => setHighlightBoundary(day) : undefined}\n onMouseOut={showHighlight ? () => setHighlightBoundary(undefined) : undefined}\n onClick={() => {\n setFocusedDay(day);\n onFocus?.(day);\n onSelect?.(day);\n }}\n >\n {day.getUTCDate()}\n </StyledDay>\n );\n });\n\n const names = useMemo(() => getLocalizedDays(calendarType, locale), [locale, calendarType]);\n\n const t = useI18n();\n\n const displayNames = new Intl.DisplayNames(locale, {\n style: 'long',\n type: 'dateTimeField'\n }) as Intl.DateTimeDisplayNames;\n const displayNamesShort = new Intl.DisplayNames(locale, {\n style: 'short',\n type: 'dateTimeField'\n }) as Intl.DateTimeDisplayNames;\n\n const weeks = getWeeksOfMonth(current, calendarType).map(weekNo => {\n return (\n <>\n <Text as={StyledWeekNumber} key={weekNo} aria-hidden='true'>\n {weekNo.toString()}\n </Text>\n <VisuallyHiddenText>\n {`${displayNames.of('weekOfYear')} ${weekNo.toString()} ${current\n .getUTCFullYear()\n .toString()}`}\n </VisuallyHiddenText>\n </>\n );\n });\n\n const weeksButtons = getWeeksOfMonth(current, calendarType).map(weekNo => {\n const dateOfISOWeek = getDateOfISOWeek(weekNo, current.getUTCFullYear());\n const lastDayOfWeek = new Date(dateOfISOWeek);\n lastDayOfWeek.setDate(dateOfISOWeek.getDate() + 6);\n return (\n <StyledPick\n key={weekNo}\n tabIndex={isWeekFocused(dateOfISOWeek) ? 0 : -1}\n disabled={disabled || mode === 'date' || isDisabled(dateOfISOWeek)}\n aria-selected={isWeekSelected(dateOfISOWeek) || undefined}\n aria-label={`${displayNames.of('weekOfYear')} ${weekNo.toString()} ${toUTCDateString(\n dateOfISOWeek,\n Intl.DateTimeFormat(locale, ariaOpts)\n )} - ${toUTCDateString(lastDayOfWeek, Intl.DateTimeFormat(locale, ariaOpts))}`}\n aria-current={isWeekFocused(dateOfISOWeek) ? 'date' : undefined}\n onMouseDown={() => {\n setFocusedDay(dateOfISOWeek);\n onFocus?.(dateOfISOWeek);\n onSelect?.(dateOfISOWeek);\n }}\n >\n {`${cap(displayNames.of('weekOfYear'))} `}\n {weekNo.toString()}\n </StyledPick>\n );\n });\n\n const weekLabel =\n mode === 'date' ? (\n <>\n <Text\n as={StyledWeekLabel}\n forwardedAs='abbr'\n title={cap(displayNames.of('weekOfYear'))}\n aria-hidden='true'\n >\n {cap(displayNamesShort.of('weekOfYear'))}\n </Text>\n <VisuallyHiddenText>{displayNames.of('weekOfYear')}</VisuallyHiddenText>\n </>\n ) : (\n <Text as={StyledWeekLabel}>{cap(displayNames.of('weekOfYear'))}</Text>\n );\n\n const headerLabels = names.map(([name, abbr]) => (\n <th role='columnheader' key={name}>\n <Text as={StyledColumnLabel} forwardedAs='abbr' key={name} title={name} aria-hidden='true'>\n {abbr}\n </Text>\n <VisuallyHiddenText>{name}</VisuallyHiddenText>\n </th>\n ));\n\n const splitToWeeks = (resultArray: JSX.Element[][], item: JSX.Element, index: number) => {\n const chunkIndex = Math.floor(index / 7);\n\n if (!resultArray[chunkIndex]) {\n resultArray[chunkIndex] = [] as JSX.Element[];\n }\n\n resultArray[chunkIndex].push(item);\n return resultArray;\n };\n\n const cells = days.reduce(splitToWeeks, []).map((week, index) => {\n const rowHeader = mode === 'week' ? weeksButtons[index] : weeks[index];\n return (\n // eslint-disable-next-line react/no-array-index-key\n <tr key={`week-${index}`}>\n {showWeekLabel && <th scope='row'>{rowHeader}</th>}\n {week.map((day, dayIndex) => {\n // eslint-disable-next-line react/no-array-index-key\n return <td key={`day-${dayIndex}`}>{day}</td>;\n })}\n </tr>\n );\n });\n\n const weeksCells = weeksButtons.map((week, index) => {\n return (\n // eslint-disable-next-line react/no-array-index-key\n <tr key={`week-${index}`}>\n <td>{week}</td>\n </tr>\n );\n });\n\n const weeksGrid = (\n <StyledWeekGrid role='grid' onKeyDown={onKeyDown} ref={containerRef}>\n <thead>\n <tr>\n <th>{weekLabel}</th>\n </tr>\n </thead>\n <tbody>{weeksCells}</tbody>\n </StyledWeekGrid>\n );\n\n return (\n <>\n {mode === 'week' && weeksGrid}\n <StyledCalendar\n ref={mode === 'date' ? containerRef : undefined}\n aria-label={current.toLocaleString(locale, {\n month: 'long',\n year: 'numeric',\n timeZone: 'UTC'\n })}\n onKeyDown={onKeyDown}\n aria-hidden={mode === 'week' ? true : undefined}\n role='grid'\n >\n <thead>\n <tr>\n {showWeekLabel && <th>{weekLabel}</th>}\n {headerLabels}\n </tr>\n </thead>\n <tbody>{cells}</tbody>\n </StyledCalendar>\n <VisuallyHiddenText aria-live='polite' role='alert'>\n {t('calendar_assist')}\n </VisuallyHiddenText>\n </>\n );\n }\n);\n\nexport default Calendar;\n"]}
1
+ {"version":3,"file":"Calendar.js","sourceRoot":"","sources":["../../../../src/components/DateTime/Picker/Calendar.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n useMemo,\n FunctionComponent,\n KeyboardEvent,\n useState,\n forwardRef,\n PropsWithoutRef,\n Ref,\n useEffect,\n useCallback\n} from 'react';\n\nimport Text from '../../Text';\nimport { CALENDAR_TYPES } from '../Input/local';\nimport {\n getCalendarTypeFromLocale,\n getDateOfISOWeek,\n getWeek,\n parseToDate,\n toUTCDateString\n} from '../Input/utils';\nimport { useConfiguration, useConsolidatedRef, useFocusWithin, useI18n } from '../../../hooks';\nimport { ForwardProps, TestIdProp } from '../../../types';\nimport { FormControlProps } from '../../FormControl';\nimport { cap } from '../../../utils';\nimport VisuallyHiddenText from '../../VisuallyHiddenText';\n\nimport { getDaysOfMonth, getLocalizedDays, getWeeksOfMonth } from './utils';\nimport {\n StyledColumnLabel,\n StyledPick,\n StyledDay,\n StyledCalendar,\n StyledWeekGrid,\n StyledWeekLabel,\n StyledWeekNumber\n} from './Calendar.styles';\n\nexport interface CalendarProps extends TestIdProp {\n /**\n * Sets DOM id for the control and associates label element via 'for' attribute.\n * If an id is not pass, a random id will be generated for any render.\n */\n id?: FormControlProps['id'];\n /** Defines default date that will be selected initially when the Calendar is visible. */\n selected?: Date;\n /**\n * Defines currently visible month.\n * @default new Date()\n */\n current?: Date;\n /** Defines dates range with start date and end date that can be set by the user. */\n selectedRange?: { startDate: Date | undefined; endDate: Date | undefined };\n /** Defines if days should be highlighted for range selection */\n showHighlight?: boolean;\n /** Defines if week numbers should be displayed in calendar */\n showWeekNumber?: boolean;\n /**\n * The mode of the calendar that will be rendered, ie. whether single date or week are selectable.\n * @default 'date'\n */\n mode?: 'date' | 'week';\n /** Callback fired when new day is selected. */\n onSelect?: (date: Date) => void;\n /** Callback fired when user focuses new day. */\n onFocus?: (date: Date) => void;\n /** Sets the type of calendar to be used. This will be determined by locale if no value is provided. */\n calendarType?: string;\n /** Defines minimum available value that can be selected by the user. */\n min?: string | number | Date;\n /** Defines maximum available value that can be selected by the user. */\n max?: string | number | Date;\n /** Set the calendar to disabled state, ie. non-interactive. */\n disabled?: boolean;\n}\n\nconst ariaOpts = { day: 'numeric', month: 'long', year: 'numeric' } as const;\n\nconst Calendar: FunctionComponent<CalendarProps & ForwardProps> = forwardRef(\n (\n {\n testId,\n selected,\n current = selected ? new Date(selected.getTime()) : new Date(),\n selectedRange,\n showHighlight,\n mode = 'date',\n showWeekNumber,\n calendarType: calendar = CALENDAR_TYPES.ISO_8601,\n onSelect,\n onFocus,\n disabled,\n min: minProp,\n max: maxProp\n }: PropsWithoutRef<CalendarProps>,\n ref: Ref<HTMLTableElement>\n ) => {\n const { locale } = useConfiguration();\n\n const min = minProp ? parseToDate(minProp) : -Infinity;\n const max = maxProp ? parseToDate(maxProp) : Infinity;\n\n if (min instanceof Date) min.setUTCMinutes(min.getUTCMinutes() - min.getTimezoneOffset());\n if (max instanceof Date) max.setUTCMinutes(max.getUTCMinutes() - max.getTimezoneOffset());\n\n const showWeekLabel = mode === 'week' ? false : showWeekNumber;\n const [focusedDay, setFocusedDay] = useState(current);\n useEffect(() => {\n setFocusedDay(current);\n }, [current.getUTCFullYear(), current.getUTCMonth()]);\n\n const calendarType = useMemo(\n () => calendar ?? getCalendarTypeFromLocale(locale),\n [locale, calendar]\n );\n\n const [highlightBoundary, setHighlightBoundary] = useState<Date>();\n\n const onKeyDown = useCallback(\n (e: KeyboardEvent<HTMLElement>) => {\n if (\n (mode === 'date'\n ? ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight']\n : ['ArrowUp', 'ArrowDown']\n ).includes(e.key)\n ) {\n e.preventDefault();\n const newFocused = new Date(focusedDay);\n switch (e.key) {\n case 'ArrowUp':\n newFocused.setUTCDate(focusedDay.getUTCDate() - 7);\n break;\n case 'ArrowDown':\n newFocused.setUTCDate(focusedDay.getUTCDate() + 7);\n break;\n case 'ArrowRight':\n newFocused.setUTCDate(focusedDay.getUTCDate() + 1);\n break;\n case 'ArrowLeft':\n newFocused.setUTCDate(focusedDay.getUTCDate() - 1);\n break;\n default:\n }\n if (newFocused < min || newFocused > max) return;\n setFocusedDay(newFocused);\n onFocus?.(newFocused);\n setHighlightBoundary(newFocused);\n }\n if (e.key === 'Enter') {\n e.preventDefault();\n onSelect?.(focusedDay);\n }\n },\n [mode, focusedDay, onFocus, onSelect]\n );\n\n const containerRef = useConsolidatedRef<HTMLTableElement>(ref);\n const hasFocus = useFocusWithin([containerRef]);\n\n const today = toUTCDateString(new Date());\n\n const isDisabled = (day: Date) => {\n const maxDate = new Date(max);\n maxDate.setUTCMinutes(maxDate.getUTCMinutes() - maxDate.getTimezoneOffset());\n\n return Number(min) > day.getTime() || day.getTime() > maxDate.getTime();\n };\n\n const isSelected = (day: Date) => {\n return [\n selected && toUTCDateString(selected),\n selectedRange?.startDate && toUTCDateString(selectedRange?.startDate),\n selectedRange?.endDate && toUTCDateString(selectedRange?.endDate)\n ].includes(toUTCDateString(day));\n };\n\n const isWeekSelected = (day: Date) => {\n return (\n selected &&\n toUTCDateString(day) ===\n toUTCDateString(getDateOfISOWeek(getWeek(selected, calendarType), selected.getFullYear()))\n );\n };\n\n const isFocused = (day: Date) => {\n return toUTCDateString(day) === toUTCDateString(focusedDay);\n };\n\n const isWeekFocused = (day: Date) => {\n return (\n toUTCDateString(day) ===\n toUTCDateString(\n getDateOfISOWeek(getWeek(focusedDay, calendarType), focusedDay.getFullYear())\n )\n );\n };\n\n const isInRange = (day: Date) => {\n return (\n selectedRange &&\n selectedRange.startDate &&\n selectedRange.endDate &&\n day >= selectedRange.startDate &&\n day <= selectedRange.endDate\n );\n };\n\n const isHighlighted = (day: Date) => {\n if (!selectedRange || !showHighlight || !highlightBoundary) return false;\n const betweenHighlightAndBoundary = (rangeBoundaryType: 'startDate' | 'endDate') => {\n const rangeBoundary = selectedRange[rangeBoundaryType];\n if (!rangeBoundary) return false;\n return !!(\n rangeBoundary &&\n ((day >= rangeBoundary && day <= highlightBoundary) ||\n (day <= rangeBoundary && day >= highlightBoundary))\n );\n };\n return betweenHighlightAndBoundary('startDate') || betweenHighlightAndBoundary('endDate');\n };\n\n useEffect(() => {\n if (hasFocus)\n containerRef.current?.querySelector<HTMLButtonElement>('button[tabindex=\"0\"]')?.focus();\n }, [hasFocus, focusedDay]);\n\n const days = getDaysOfMonth(current, calendarType ?? CALENDAR_TYPES.ISO_8601).map(day => {\n return (\n <StyledDay\n key={day.getTime()}\n tabIndex={isFocused(day) ? 0 : -1}\n disabled={disabled || mode === 'week' || isDisabled(day)}\n current={toUTCDateString(day) === today}\n highlighted={isInRange(day) || isHighlighted(day)}\n aria-selected={isSelected(day) || undefined}\n aria-current={isSelected(day) ? 'date' : undefined}\n dayInNexOrPrevMonth={day.getUTCMonth() !== current.getUTCMonth()}\n aria-label={toUTCDateString(day, Intl.DateTimeFormat(locale, ariaOpts))}\n onMouseOver={showHighlight ? () => setHighlightBoundary(day) : undefined}\n onMouseOut={showHighlight ? () => setHighlightBoundary(undefined) : undefined}\n onClick={() => {\n setFocusedDay(day);\n onFocus?.(day);\n onSelect?.(day);\n }}\n >\n {day.getUTCDate()}\n </StyledDay>\n );\n });\n\n const names = useMemo(() => getLocalizedDays(calendarType, locale), [locale, calendarType]);\n\n const t = useI18n();\n\n const displayNames = new Intl.DisplayNames(locale, {\n style: 'long',\n type: 'dateTimeField'\n }) as Intl.DateTimeDisplayNames;\n const displayNamesShort = new Intl.DisplayNames(locale, {\n style: 'short',\n type: 'dateTimeField'\n }) as Intl.DateTimeDisplayNames;\n\n const weeks = getWeeksOfMonth(current, calendarType).map(weekNo => {\n return (\n <>\n <Text as={StyledWeekNumber} key={weekNo} aria-hidden='true'>\n {weekNo.toString()}\n </Text>\n <VisuallyHiddenText>\n {`${displayNames.of('weekOfYear')} ${weekNo.toString()} ${current\n .getUTCFullYear()\n .toString()}`}\n </VisuallyHiddenText>\n </>\n );\n });\n\n const weeksButtons = getWeeksOfMonth(current, calendarType).map(weekNo => {\n const dateOfISOWeek = getDateOfISOWeek(weekNo, current.getUTCFullYear());\n const lastDayOfWeek = new Date(dateOfISOWeek);\n lastDayOfWeek.setDate(dateOfISOWeek.getDate() + 6);\n return (\n <StyledPick\n key={weekNo}\n tabIndex={isWeekFocused(dateOfISOWeek) ? 0 : -1}\n disabled={disabled || mode === 'date' || isDisabled(dateOfISOWeek)}\n aria-selected={isWeekSelected(dateOfISOWeek) || undefined}\n aria-label={`${displayNames.of('weekOfYear')} ${weekNo.toString()} ${toUTCDateString(\n dateOfISOWeek,\n Intl.DateTimeFormat(locale, ariaOpts)\n )} - ${toUTCDateString(lastDayOfWeek, Intl.DateTimeFormat(locale, ariaOpts))}`}\n aria-current={isWeekFocused(dateOfISOWeek) ? 'date' : undefined}\n onMouseDown={() => {\n setFocusedDay(dateOfISOWeek);\n onFocus?.(dateOfISOWeek);\n onSelect?.(dateOfISOWeek);\n }}\n >\n {`${cap(displayNames.of('weekOfYear'))} `}\n {weekNo.toString()}\n </StyledPick>\n );\n });\n\n const weekLabel =\n mode === 'date' ? (\n <>\n <Text\n as={StyledWeekLabel}\n forwardedAs='abbr'\n title={cap(displayNames.of('weekOfYear'))}\n aria-hidden='true'\n >\n {cap(displayNamesShort.of('weekOfYear'))}\n </Text>\n <VisuallyHiddenText>{displayNames.of('weekOfYear')}</VisuallyHiddenText>\n </>\n ) : (\n <Text as={StyledWeekLabel}>{cap(displayNames.of('weekOfYear'))}</Text>\n );\n\n const headerLabels = names.map(([name, abbr]) => (\n <th role='columnheader' key={name}>\n <Text as={StyledColumnLabel} forwardedAs='abbr' key={name} title={name} aria-hidden='true'>\n {abbr}\n </Text>\n <VisuallyHiddenText>{name}</VisuallyHiddenText>\n </th>\n ));\n\n const splitToWeeks = (resultArray: JSX.Element[][], item: JSX.Element, index: number) => {\n const chunkIndex = Math.floor(index / 7);\n\n if (!resultArray[chunkIndex]) {\n resultArray[chunkIndex] = [] as JSX.Element[];\n }\n\n resultArray[chunkIndex].push(item);\n return resultArray;\n };\n\n const cells = days.reduce(splitToWeeks, []).map((week, index) => {\n const rowHeader = mode === 'week' ? weeksButtons[index] : weeks[index];\n return (\n // eslint-disable-next-line react/no-array-index-key\n <tr key={`week-${index}`}>\n {showWeekLabel && <th scope='row'>{rowHeader}</th>}\n {week.map((day, dayIndex) => {\n // eslint-disable-next-line react/no-array-index-key\n return <td key={`day-${dayIndex}`}>{day}</td>;\n })}\n </tr>\n );\n });\n\n const weeksCells = weeksButtons.map((week, index) => {\n return (\n // eslint-disable-next-line react/no-array-index-key\n <tr key={`week-${index}`}>\n <td>{week}</td>\n </tr>\n );\n });\n\n const weeksGrid = (\n <StyledWeekGrid role='grid' onKeyDown={onKeyDown} ref={containerRef}>\n <thead>\n <tr>\n <th>{weekLabel}</th>\n </tr>\n </thead>\n <tbody>{weeksCells}</tbody>\n </StyledWeekGrid>\n );\n\n return (\n <>\n {mode === 'week' && weeksGrid}\n <StyledCalendar\n data-testid={testId}\n ref={mode === 'date' ? containerRef : undefined}\n aria-label={current.toLocaleString(locale, {\n month: 'long',\n year: 'numeric',\n timeZone: 'UTC'\n })}\n onKeyDown={onKeyDown}\n aria-hidden={mode === 'week' ? true : undefined}\n role='grid'\n >\n <thead>\n <tr>\n {showWeekLabel && <th>{weekLabel}</th>}\n {headerLabels}\n </tr>\n </thead>\n <tbody>{cells}</tbody>\n </StyledCalendar>\n <VisuallyHiddenText aria-live='polite' role='alert'>\n {t('calendar_assist')}\n </VisuallyHiddenText>\n </>\n );\n }\n);\n\nexport default Calendar;\n"]}
@@ -1,5 +1,7 @@
1
1
  import { FunctionComponent } from 'react';
2
2
  import DatePickerProps from './DatePicker.types';
3
- declare const DatePicker: FunctionComponent<DatePickerProps>;
4
- export default DatePicker;
3
+ declare const _default: FunctionComponent<DatePickerProps> & {
4
+ getTestIds: (testIdProp?: string | undefined) => import("../../..").TestIdsRecord<readonly ["previous-month", "month", "next-month", "calendar", "time"]>;
5
+ };
6
+ export default _default;
5
7
  //# sourceMappingURL=DatePicker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.d.ts","sourceRoot":"","sources":["../../../../src/components/DateTime/Picker/DatePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA+B,MAAM,OAAO,CAAC;AAevE,OAAO,eAAe,MAAM,oBAAoB,CAAC;AAMjD,QAAA,MAAM,UAAU,EAAE,iBAAiB,CAAC,eAAe,CA+JlD,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"DatePicker.d.ts","sourceRoot":"","sources":["../../../../src/components/DateTime/Picker/DatePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA+B,MAAM,OAAO,CAAC;AAiBvE,OAAO,eAAe,MAAM,oBAAoB,CAAC;;;;AAoLjD,wBAA6D"}
@@ -6,16 +6,19 @@ import Button from '../../Button';
6
6
  import Icon, { registerIcon } from '../../Icon';
7
7
  import * as caretLeftIcon from '../../Icon/icons/caret-left.icon';
8
8
  import * as caretRightIcon from '../../Icon/icons/caret-right.icon';
9
- import { useConfiguration, useDirection, useI18n } from '../../../hooks';
9
+ import { useConfiguration, useDirection, useI18n, useTestIds } from '../../../hooks';
10
10
  import { getCalendarTypeFromLocale, parseToDate } from '../Input/utils';
11
11
  import { CALENDAR_TYPES } from '../Input/local';
12
12
  import TimeInput from '../Input/TimeInput';
13
13
  import VisuallyHiddenText from '../../VisuallyHiddenText';
14
+ import { getDatePickerTestIds } from '../DateTime.test-ids';
15
+ import { withTestIds } from '../../../utils';
14
16
  import Calendar from './Calendar';
15
17
  import { isValidDate, toDateTimeString } from './utils';
16
18
  import { StyledDatePicker, StyledMonthPicker } from './DatePicker.styles';
17
19
  registerIcon(caretLeftIcon, caretRightIcon);
18
- const DatePicker = ({ selected: initial, onChange, min, max, mode = 'date', showWeekNumber, withSeconds, pickerInterval, clockFormat, ...restProps }) => {
20
+ const DatePicker = ({ testId, selected: initial, onChange, min, max, mode = 'date', showWeekNumber, withSeconds, pickerInterval, clockFormat, ...restProps }) => {
21
+ const testIds = useTestIds(testId, getDatePickerTestIds);
19
22
  const { locale } = useConfiguration();
20
23
  const t = useI18n();
21
24
  const [selected, setSelected] = useState(initial);
@@ -35,7 +38,7 @@ const DatePicker = ({ selected: initial, onChange, min, max, mode = 'date', show
35
38
  }, []);
36
39
  const calendarType = getCalendarTypeFromLocale(locale);
37
40
  const { start, end } = useDirection();
38
- return (_jsxs(StyledDatePicker, { "aria-label": t('calendar'), role: 'region', ...restProps, children: [_jsxs(Flex, { as: StyledMonthPicker, container: { justify: 'between', alignItems: 'center' }, children: [_jsx(Button, { variant: 'simple', icon: true, onClick: () => {
41
+ return (_jsxs(StyledDatePicker, { "data-testid": testIds.root, "aria-label": t('calendar'), role: 'region', ...restProps, children: [_jsxs(Flex, { as: StyledMonthPicker, container: { justify: 'between', alignItems: 'center' }, children: [_jsx(Button, { "data-testid": testIds.previousMonth, variant: 'simple', icon: true, onClick: () => {
39
42
  const newCurrent = new Date(current);
40
43
  newCurrent.setUTCMonth(newCurrent.getUTCMonth() - 1);
41
44
  setCurrent(newCurrent);
@@ -43,7 +46,7 @@ const DatePicker = ({ selected: initial, onChange, min, max, mode = 'date', show
43
46
  const newCurrent = new Date(current);
44
47
  newCurrent.setUTCDate(1);
45
48
  return Boolean(min && min > newCurrent);
46
- })(), "aria-label": t('picker_prev_month'), children: _jsx(Icon, { name: `caret-${start}` }) }), _jsx(MonthInput, { value: current, required: true, role: 'group', "aria-label": t('picker_jump_to_month_and_year'), onChange: ({ valueAsTimestamp }) => {
49
+ })(), "aria-label": t('picker_prev_month'), children: _jsx(Icon, { name: `caret-${start}` }) }), _jsx(MonthInput, { testId: testIds.month, value: current, required: true, role: 'group', "aria-label": t('picker_jump_to_month_and_year'), onChange: ({ valueAsTimestamp }) => {
47
50
  let newCurrent = new Date(valueAsTimestamp);
48
51
  newCurrent.setUTCDate(current.getUTCDate());
49
52
  if (max) {
@@ -59,7 +62,7 @@ const DatePicker = ({ selected: initial, onChange, min, max, mode = 'date', show
59
62
  newCurrent = minDate;
60
63
  }
61
64
  setCurrent(newCurrent);
62
- }, min: min, max: max }), _jsx(VisuallyHiddenText, { "aria-live": 'polite', role: 'alert', children: current.toLocaleString(locale, { month: 'long', year: 'numeric', timeZone: 'UTC' }) }), _jsx(Button, { variant: 'simple', icon: true, onClick: () => {
65
+ }, min: min, max: max }), _jsx(VisuallyHiddenText, { "aria-live": 'polite', role: 'alert', children: current.toLocaleString(locale, { month: 'long', year: 'numeric', timeZone: 'UTC' }) }), _jsx(Button, { "data-testid": testIds.nextMonth, variant: 'simple', icon: true, onClick: () => {
63
66
  const newCurrent = new Date(current);
64
67
  newCurrent.setUTCMonth(newCurrent.getUTCMonth() + 1);
65
68
  setCurrent(newCurrent);
@@ -68,7 +71,7 @@ const DatePicker = ({ selected: initial, onChange, min, max, mode = 'date', show
68
71
  newCurrent.setUTCMonth(newCurrent.getUTCMonth() + 1);
69
72
  newCurrent.setUTCDate(0);
70
73
  return Boolean(max && max < newCurrent);
71
- })(), "aria-label": t('picker_next_month'), children: _jsx(Icon, { name: `caret-${end}` }) })] }), _jsx(Flex, { container: { wrap: 'nowrap' }, dir: 'ltr', children: _jsx(Calendar, { ref: calendarRef, selected: selected && isValidDate(selected) ? selected : undefined, current: current, calendarType: mode === 'date' ? calendarType : CALENDAR_TYPES.ISO_8601, showWeekNumber: showWeekNumber, mode: mode === 'datetime' ? 'date' : mode, onFocus: setCurrent, onSelect: selectedDate => {
74
+ })(), "aria-label": t('picker_next_month'), children: _jsx(Icon, { name: `caret-${end}` }) })] }), _jsx(Flex, { container: { wrap: 'nowrap' }, dir: 'ltr', children: _jsx(Calendar, { testId: testIds.calendar, ref: calendarRef, selected: selected && isValidDate(selected) ? selected : undefined, current: current, calendarType: mode === 'date' ? calendarType : CALENDAR_TYPES.ISO_8601, showWeekNumber: showWeekNumber, mode: mode === 'datetime' ? 'date' : mode, onFocus: setCurrent, onSelect: selectedDate => {
72
75
  const newDate = new Date(selectedDate);
73
76
  if (selected) {
74
77
  newDate.setUTCHours(selected.getUTCHours());
@@ -78,7 +81,7 @@ const DatePicker = ({ selected: initial, onChange, min, max, mode = 'date', show
78
81
  setCurrent(newDate);
79
82
  setSelected(newDate);
80
83
  onChange?.(newDate);
81
- }, min: min, max: max }) }), mode === 'datetime' && (_jsx(TimeInput, { label: t('time_text'), value: selected, pickerInterval: pickerInterval, withSeconds: withSeconds, clockFormat: clockFormat, onChange: selectedTime => {
84
+ }, min: min, max: max }) }), mode === 'datetime' && (_jsx(TimeInput, { testId: testIds.time, label: t('time_text'), value: selected, pickerInterval: pickerInterval, withSeconds: withSeconds, clockFormat: clockFormat, onChange: selectedTime => {
82
85
  if (selectedTime.state || !selectedTime.valueAsISOString) {
83
86
  return;
84
87
  }
@@ -91,5 +94,5 @@ const DatePicker = ({ selected: initial, onChange, min, max, mode = 'date', show
91
94
  onChange?.(newDate);
92
95
  }, min: min, max: max }))] }));
93
96
  };
94
- export default DatePicker;
97
+ export default withTestIds(DatePicker, getDatePickerTestIds);
95
98
  //# sourceMappingURL=DatePicker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.js","sourceRoot":"","sources":["../../../../src/components/DateTime/Picker/DatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FunctionComponent, useState, useEffect, useRef } from 'react';\n\nimport Flex from '../../Flex';\nimport MonthInput from '../Input/MonthInput';\nimport Button from '../../Button';\nimport Icon, { registerIcon } from '../../Icon';\nimport * as caretLeftIcon from '../../Icon/icons/caret-left.icon';\nimport * as caretRightIcon from '../../Icon/icons/caret-right.icon';\nimport { useConfiguration, useDirection, useI18n } from '../../../hooks';\nimport { getCalendarTypeFromLocale, parseToDate } from '../Input/utils';\nimport { CALENDAR_TYPES } from '../Input/local';\nimport TimeInput from '../Input/TimeInput';\nimport VisuallyHiddenText from '../../VisuallyHiddenText';\n\nimport Calendar from './Calendar';\nimport DatePickerProps from './DatePicker.types';\nimport { isValidDate, toDateTimeString } from './utils';\nimport { StyledDatePicker, StyledMonthPicker } from './DatePicker.styles';\n\nregisterIcon(caretLeftIcon, caretRightIcon);\n\nconst DatePicker: FunctionComponent<DatePickerProps> = ({\n selected: initial,\n onChange,\n min,\n max,\n mode = 'date',\n showWeekNumber,\n withSeconds,\n pickerInterval,\n clockFormat,\n ...restProps\n}: DatePickerProps) => {\n const { locale } = useConfiguration();\n const t = useI18n();\n\n const [selected, setSelected] = useState(initial);\n const [current, setCurrent] = useState(selected && isValidDate(selected) ? selected : new Date());\n\n useEffect(() => {\n if (toDateTimeString(initial, mode) !== toDateTimeString(selected, mode)) {\n setSelected(initial);\n setCurrent(initial || new Date());\n }\n }, [toDateTimeString(initial, mode)]);\n\n const calendarRef = useRef<HTMLTableElement>(null);\n useEffect(() => {\n // need to postpone focusing to make sure onFocusWithin has been attached\n setTimeout(() => {\n calendarRef.current?.querySelector<HTMLElement>('button[tabindex=\"0\"]:enabled')?.focus();\n });\n }, []);\n\n const calendarType = getCalendarTypeFromLocale(locale);\n const { start, end } = useDirection();\n\n return (\n <StyledDatePicker aria-label={t('calendar')} role='region' {...restProps}>\n <Flex as={StyledMonthPicker} container={{ justify: 'between', alignItems: 'center' }}>\n <Button\n variant='simple'\n icon\n onClick={() => {\n const newCurrent = new Date(current);\n newCurrent.setUTCMonth(newCurrent.getUTCMonth() - 1);\n setCurrent(newCurrent);\n }}\n disabled={(() => {\n const newCurrent = new Date(current);\n newCurrent.setUTCDate(1);\n\n return Boolean(min && min > newCurrent);\n })()}\n aria-label={t('picker_prev_month')}\n >\n <Icon name={`caret-${start}`} />\n </Button>\n <MonthInput\n value={current}\n required\n role='group'\n aria-label={t('picker_jump_to_month_and_year')}\n onChange={({ valueAsTimestamp }) => {\n let newCurrent = new Date(valueAsTimestamp!);\n newCurrent.setUTCDate(current.getUTCDate());\n\n if (max) {\n const maxDate = parseToDate(max);\n maxDate.setUTCMinutes(maxDate.getUTCMinutes() - maxDate.getTimezoneOffset());\n if (newCurrent > maxDate) newCurrent = maxDate;\n }\n\n if (min) {\n const minDate = parseToDate(min);\n minDate.setUTCMinutes(minDate.getUTCMinutes() - minDate.getTimezoneOffset());\n if (newCurrent < minDate) newCurrent = minDate;\n }\n\n setCurrent(newCurrent);\n }}\n min={min}\n max={max}\n />\n <VisuallyHiddenText aria-live='polite' role='alert'>\n {current.toLocaleString(locale, { month: 'long', year: 'numeric', timeZone: 'UTC' })}\n </VisuallyHiddenText>\n <Button\n variant='simple'\n icon\n onClick={() => {\n const newCurrent = new Date(current);\n newCurrent.setUTCMonth(newCurrent.getUTCMonth() + 1);\n setCurrent(newCurrent);\n }}\n disabled={(() => {\n const newCurrent = new Date(current);\n newCurrent.setUTCMonth(newCurrent.getUTCMonth() + 1);\n newCurrent.setUTCDate(0);\n\n return Boolean(max && max < newCurrent);\n })()}\n aria-label={t('picker_next_month')}\n >\n <Icon name={`caret-${end}`} />\n </Button>\n </Flex>\n <Flex container={{ wrap: 'nowrap' }} dir='ltr'>\n <Calendar\n ref={calendarRef}\n selected={selected && isValidDate(selected) ? selected : undefined}\n current={current}\n calendarType={mode === 'date' ? calendarType : CALENDAR_TYPES.ISO_8601}\n showWeekNumber={showWeekNumber}\n mode={mode === 'datetime' ? 'date' : mode}\n onFocus={setCurrent}\n onSelect={selectedDate => {\n const newDate = new Date(selectedDate);\n\n if (selected) {\n newDate.setUTCHours(selected.getUTCHours());\n newDate.setUTCMinutes(selected.getUTCMinutes());\n newDate.setUTCSeconds(selected.getUTCSeconds());\n }\n\n setCurrent(newDate);\n setSelected(newDate);\n onChange?.(newDate);\n }}\n min={min}\n max={max}\n />\n </Flex>\n\n {mode === 'datetime' && (\n <TimeInput\n label={t('time_text')}\n value={selected}\n pickerInterval={pickerInterval}\n withSeconds={withSeconds}\n clockFormat={clockFormat}\n onChange={selectedTime => {\n if (selectedTime.state || !selectedTime.valueAsISOString) {\n return;\n }\n const newDate = selected ? new Date(selected) : new Date();\n const selectedTimeDateObject = new Date(selectedTime.valueAsISOString);\n newDate.setUTCHours(selectedTimeDateObject.getUTCHours());\n newDate.setUTCMinutes(selectedTimeDateObject.getUTCMinutes());\n newDate.setUTCSeconds(selectedTimeDateObject.getUTCSeconds());\n\n setSelected(newDate);\n onChange?.(newDate);\n }}\n min={min}\n max={max}\n />\n )}\n </StyledDatePicker>\n );\n};\n\nexport default DatePicker;\n"]}
1
+ {"version":3,"file":"DatePicker.js","sourceRoot":"","sources":["../../../../src/components/DateTime/Picker/DatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FunctionComponent, useState, useEffect, useRef } from 'react';\n\nimport Flex from '../../Flex';\nimport MonthInput from '../Input/MonthInput';\nimport Button from '../../Button';\nimport Icon, { registerIcon } from '../../Icon';\nimport * as caretLeftIcon from '../../Icon/icons/caret-left.icon';\nimport * as caretRightIcon from '../../Icon/icons/caret-right.icon';\nimport { useConfiguration, useDirection, useI18n, useTestIds } from '../../../hooks';\nimport { getCalendarTypeFromLocale, parseToDate } from '../Input/utils';\nimport { CALENDAR_TYPES } from '../Input/local';\nimport TimeInput from '../Input/TimeInput';\nimport VisuallyHiddenText from '../../VisuallyHiddenText';\nimport { getDatePickerTestIds } from '../DateTime.test-ids';\nimport { withTestIds } from '../../../utils';\n\nimport Calendar from './Calendar';\nimport DatePickerProps from './DatePicker.types';\nimport { isValidDate, toDateTimeString } from './utils';\nimport { StyledDatePicker, StyledMonthPicker } from './DatePicker.styles';\n\nregisterIcon(caretLeftIcon, caretRightIcon);\n\nconst DatePicker: FunctionComponent<DatePickerProps> = ({\n testId,\n selected: initial,\n onChange,\n min,\n max,\n mode = 'date',\n showWeekNumber,\n withSeconds,\n pickerInterval,\n clockFormat,\n ...restProps\n}: DatePickerProps) => {\n const testIds = useTestIds(testId, getDatePickerTestIds);\n\n const { locale } = useConfiguration();\n const t = useI18n();\n\n const [selected, setSelected] = useState(initial);\n const [current, setCurrent] = useState(selected && isValidDate(selected) ? selected : new Date());\n\n useEffect(() => {\n if (toDateTimeString(initial, mode) !== toDateTimeString(selected, mode)) {\n setSelected(initial);\n setCurrent(initial || new Date());\n }\n }, [toDateTimeString(initial, mode)]);\n\n const calendarRef = useRef<HTMLTableElement>(null);\n useEffect(() => {\n // need to postpone focusing to make sure onFocusWithin has been attached\n setTimeout(() => {\n calendarRef.current?.querySelector<HTMLElement>('button[tabindex=\"0\"]:enabled')?.focus();\n });\n }, []);\n\n const calendarType = getCalendarTypeFromLocale(locale);\n const { start, end } = useDirection();\n\n return (\n <StyledDatePicker\n data-testid={testIds.root}\n aria-label={t('calendar')}\n role='region'\n {...restProps}\n >\n <Flex as={StyledMonthPicker} container={{ justify: 'between', alignItems: 'center' }}>\n <Button\n data-testid={testIds.previousMonth}\n variant='simple'\n icon\n onClick={() => {\n const newCurrent = new Date(current);\n newCurrent.setUTCMonth(newCurrent.getUTCMonth() - 1);\n setCurrent(newCurrent);\n }}\n disabled={(() => {\n const newCurrent = new Date(current);\n newCurrent.setUTCDate(1);\n\n return Boolean(min && min > newCurrent);\n })()}\n aria-label={t('picker_prev_month')}\n >\n <Icon name={`caret-${start}`} />\n </Button>\n <MonthInput\n testId={testIds.month}\n value={current}\n required\n role='group'\n aria-label={t('picker_jump_to_month_and_year')}\n onChange={({ valueAsTimestamp }) => {\n let newCurrent = new Date(valueAsTimestamp!);\n newCurrent.setUTCDate(current.getUTCDate());\n\n if (max) {\n const maxDate = parseToDate(max);\n maxDate.setUTCMinutes(maxDate.getUTCMinutes() - maxDate.getTimezoneOffset());\n if (newCurrent > maxDate) newCurrent = maxDate;\n }\n\n if (min) {\n const minDate = parseToDate(min);\n minDate.setUTCMinutes(minDate.getUTCMinutes() - minDate.getTimezoneOffset());\n if (newCurrent < minDate) newCurrent = minDate;\n }\n\n setCurrent(newCurrent);\n }}\n min={min}\n max={max}\n />\n <VisuallyHiddenText aria-live='polite' role='alert'>\n {current.toLocaleString(locale, { month: 'long', year: 'numeric', timeZone: 'UTC' })}\n </VisuallyHiddenText>\n <Button\n data-testid={testIds.nextMonth}\n variant='simple'\n icon\n onClick={() => {\n const newCurrent = new Date(current);\n newCurrent.setUTCMonth(newCurrent.getUTCMonth() + 1);\n setCurrent(newCurrent);\n }}\n disabled={(() => {\n const newCurrent = new Date(current);\n newCurrent.setUTCMonth(newCurrent.getUTCMonth() + 1);\n newCurrent.setUTCDate(0);\n\n return Boolean(max && max < newCurrent);\n })()}\n aria-label={t('picker_next_month')}\n >\n <Icon name={`caret-${end}`} />\n </Button>\n </Flex>\n <Flex container={{ wrap: 'nowrap' }} dir='ltr'>\n <Calendar\n testId={testIds.calendar}\n ref={calendarRef}\n selected={selected && isValidDate(selected) ? selected : undefined}\n current={current}\n calendarType={mode === 'date' ? calendarType : CALENDAR_TYPES.ISO_8601}\n showWeekNumber={showWeekNumber}\n mode={mode === 'datetime' ? 'date' : mode}\n onFocus={setCurrent}\n onSelect={selectedDate => {\n const newDate = new Date(selectedDate);\n\n if (selected) {\n newDate.setUTCHours(selected.getUTCHours());\n newDate.setUTCMinutes(selected.getUTCMinutes());\n newDate.setUTCSeconds(selected.getUTCSeconds());\n }\n\n setCurrent(newDate);\n setSelected(newDate);\n onChange?.(newDate);\n }}\n min={min}\n max={max}\n />\n </Flex>\n\n {mode === 'datetime' && (\n <TimeInput\n testId={testIds.time}\n label={t('time_text')}\n value={selected}\n pickerInterval={pickerInterval}\n withSeconds={withSeconds}\n clockFormat={clockFormat}\n onChange={selectedTime => {\n if (selectedTime.state || !selectedTime.valueAsISOString) {\n return;\n }\n const newDate = selected ? new Date(selected) : new Date();\n const selectedTimeDateObject = new Date(selectedTime.valueAsISOString);\n newDate.setUTCHours(selectedTimeDateObject.getUTCHours());\n newDate.setUTCMinutes(selectedTimeDateObject.getUTCMinutes());\n newDate.setUTCSeconds(selectedTimeDateObject.getUTCSeconds());\n\n setSelected(newDate);\n onChange?.(newDate);\n }}\n min={min}\n max={max}\n />\n )}\n </StyledDatePicker>\n );\n};\n\nexport default withTestIds(DatePicker, getDatePickerTestIds);\n"]}
@@ -1,7 +1,7 @@
1
- import { BaseProps } from '../../../types';
1
+ import { BaseProps, TestIdProp } from '../../../types';
2
2
  import { TimeInputProps } from '../Input/TimeInput';
3
3
  export type MinuteInterval = 15 | 30 | 60;
4
- export default interface DatePickerProps extends BaseProps {
4
+ export default interface DatePickerProps extends BaseProps, TestIdProp {
5
5
  /** Defines default date that will be selected when the Date Picker is opened. */
6
6
  selected?: Date;
7
7
  /** Callback fired when selected value changes. */