@skbkontur/react-ui 6.0.5 → 6.0.7-b5d2c.0

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 (177) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/components/Calendar/Calendar.d.ts +14 -14
  3. package/components/Calendar/Calendar.js +2 -2
  4. package/components/Calendar/Calendar.js.map +1 -1
  5. package/components/Calendar/CalendarDay.d.ts +2 -2
  6. package/components/Calendar/CalendarDay.js +1 -1
  7. package/components/Calendar/CalendarDay.js.map +1 -1
  8. package/components/Center/Center.d.ts +3 -3
  9. package/components/Center/Center.js +2 -2
  10. package/components/Center/Center.js.map +1 -1
  11. package/components/Checkbox/Checkbox.d.ts +11 -14
  12. package/components/Checkbox/Checkbox.js +3 -6
  13. package/components/Checkbox/Checkbox.js.map +1 -1
  14. package/components/ComboBox/ComboBox.d.ts +5 -3
  15. package/components/ComboBox/ComboBox.js.map +1 -1
  16. package/components/DateInput/DateInput.d.ts +15 -15
  17. package/components/DateInput/DateInput.js +1 -1
  18. package/components/DateInput/DateInput.js.map +1 -1
  19. package/components/DatePicker/DatePicker.d.ts +14 -16
  20. package/components/DatePicker/DatePicker.js +4 -5
  21. package/components/DatePicker/DatePicker.js.map +1 -1
  22. package/components/DateRangePicker/DateRangePicker.d.ts +4 -3
  23. package/components/DateRangePicker/DateRangePicker.js +5 -3
  24. package/components/DateRangePicker/DateRangePicker.js.map +1 -1
  25. package/components/DateRangePicker/DateRangePickerInput.js +6 -4
  26. package/components/DateRangePicker/DateRangePickerInput.js.map +1 -1
  27. package/components/Dropdown/Dropdown.d.ts +10 -15
  28. package/components/Dropdown/Dropdown.js +2 -8
  29. package/components/Dropdown/Dropdown.js.map +1 -1
  30. package/components/DropdownMenu/DropdownMenu.d.ts +17 -15
  31. package/components/DropdownMenu/DropdownMenu.js +4 -1
  32. package/components/DropdownMenu/DropdownMenu.js.map +1 -1
  33. package/components/FileUploader/FileUploader.d.ts +4 -6
  34. package/components/FileUploader/FileUploader.js +1 -3
  35. package/components/FileUploader/FileUploader.js.map +1 -1
  36. package/components/FileUploader/FileUploaderFile.d.ts +3 -3
  37. package/components/FileUploader/FileUploaderFile.js +1 -1
  38. package/components/FileUploader/FileUploaderFile.js.map +1 -1
  39. package/components/Input/Input.d.ts +2 -2
  40. package/components/Input/Input.js.map +1 -1
  41. package/components/MenuFooter/MenuFooter.d.ts +4 -8
  42. package/components/MenuFooter/MenuFooter.js +1 -5
  43. package/components/MenuFooter/MenuFooter.js.map +1 -1
  44. package/components/MenuHeader/MenuHeader.d.ts +4 -8
  45. package/components/MenuHeader/MenuHeader.js +1 -5
  46. package/components/MenuHeader/MenuHeader.js.map +1 -1
  47. package/components/MenuItem/MenuItem.d.ts +11 -13
  48. package/components/MenuItem/MenuItem.js +1 -3
  49. package/components/MenuItem/MenuItem.js.map +1 -1
  50. package/components/MenuSeparator/MenuSeparator.d.ts +1 -3
  51. package/components/MenuSeparator/MenuSeparator.js +1 -3
  52. package/components/MenuSeparator/MenuSeparator.js.map +1 -1
  53. package/components/MiniModal/MiniModal.d.ts +1 -1
  54. package/components/MiniModal/MiniModal.js +1 -1
  55. package/components/MiniModal/MiniModal.js.map +1 -1
  56. package/components/MiniModal/MiniModalBody.d.ts +1 -1
  57. package/components/MiniModal/MiniModalBody.js +1 -1
  58. package/components/MiniModal/MiniModalBody.js.map +1 -1
  59. package/components/MiniModal/MiniModalFooter.d.ts +1 -1
  60. package/components/MiniModal/MiniModalFooter.js +1 -1
  61. package/components/MiniModal/MiniModalFooter.js.map +1 -1
  62. package/components/MiniModal/MiniModalHeader.d.ts +1 -1
  63. package/components/MiniModal/MiniModalHeader.js +1 -1
  64. package/components/MiniModal/MiniModalHeader.js.map +1 -1
  65. package/components/Paging/Paging.d.ts +2 -2
  66. package/components/Paging/Paging.js.map +1 -1
  67. package/components/Radio/Radio.d.ts +7 -7
  68. package/components/Radio/Radio.js.map +1 -1
  69. package/components/RadioGroup/RadioGroup.d.ts +2 -2
  70. package/components/RadioGroup/RadioGroup.js.map +1 -1
  71. package/components/ResponsiveLayout/ResponsiveLayout.d.ts +2 -2
  72. package/components/ResponsiveLayout/ResponsiveLayout.js +1 -1
  73. package/components/ResponsiveLayout/ResponsiveLayout.js.map +1 -1
  74. package/components/ScrollContainer/ScrollBar.d.ts +4 -4
  75. package/components/ScrollContainer/ScrollBar.js.map +1 -1
  76. package/components/ScrollContainer/ScrollContainer.d.ts +17 -12
  77. package/components/ScrollContainer/ScrollContainer.js +6 -1
  78. package/components/ScrollContainer/ScrollContainer.js.map +1 -1
  79. package/components/Select/Select.d.ts +6 -4
  80. package/components/Select/Select.js +2 -2
  81. package/components/Select/Select.js.map +1 -1
  82. package/components/SingleToast/SingleToast.d.ts +1 -6
  83. package/components/SingleToast/SingleToast.js +1 -6
  84. package/components/SingleToast/SingleToast.js.map +1 -1
  85. package/components/Spinner/Spinner.d.ts +1 -1
  86. package/components/Spinner/Spinner.js +1 -1
  87. package/components/Spinner/Spinner.js.map +1 -1
  88. package/components/Sticky/Sticky.d.ts +0 -4
  89. package/components/Sticky/Sticky.js +0 -4
  90. package/components/Sticky/Sticky.js.map +1 -1
  91. package/components/Switcher/Switcher.d.ts +8 -10
  92. package/components/Switcher/Switcher.js +1 -3
  93. package/components/Switcher/Switcher.js.map +1 -1
  94. package/components/Tabs/Indicator.styles.d.ts +0 -1
  95. package/components/Tabs/Indicator.styles.js +1 -4
  96. package/components/Tabs/Indicator.styles.js.map +1 -1
  97. package/components/TimePicker/TimeClockIcon.d.ts +3 -0
  98. package/components/TimePicker/TimeClockIcon.js +11 -0
  99. package/components/TimePicker/TimeClockIcon.js.map +1 -0
  100. package/components/TimePicker/TimeFragmentsView.d.ts +15 -0
  101. package/components/TimePicker/TimeFragmentsView.js +72 -0
  102. package/components/TimePicker/TimeFragmentsView.js.map +1 -0
  103. package/components/TimePicker/TimeFragmentsView.styles.d.ts +12 -0
  104. package/components/TimePicker/TimeFragmentsView.styles.js +43 -0
  105. package/components/TimePicker/TimeFragmentsView.styles.js.map +1 -0
  106. package/components/TimePicker/TimeInput.d.ts +23 -0
  107. package/components/TimePicker/TimeInput.js +86 -0
  108. package/components/TimePicker/TimeInput.js.map +1 -0
  109. package/components/TimePicker/TimePicker.d.ts +27 -0
  110. package/components/TimePicker/TimePicker.js +351 -0
  111. package/components/TimePicker/TimePicker.js.map +1 -0
  112. package/components/TimePicker/TimePicker.styles.d.ts +12 -0
  113. package/components/TimePicker/TimePicker.styles.js +39 -0
  114. package/components/TimePicker/TimePicker.styles.js.map +1 -0
  115. package/components/TimePicker/helpers/TimePicker.constants.d.ts +19 -0
  116. package/components/TimePicker/helpers/TimePicker.constants.js +42 -0
  117. package/components/TimePicker/helpers/TimePicker.constants.js.map +1 -0
  118. package/components/TimePicker/helpers/TimePicker.editing.d.ts +6 -0
  119. package/components/TimePicker/helpers/TimePicker.editing.js +77 -0
  120. package/components/TimePicker/helpers/TimePicker.editing.js.map +1 -0
  121. package/components/TimePicker/helpers/TimePicker.layout.d.ts +7 -0
  122. package/components/TimePicker/helpers/TimePicker.layout.js +17 -0
  123. package/components/TimePicker/helpers/TimePicker.layout.js.map +1 -0
  124. package/components/TimePicker/helpers/TimePicker.selection.d.ts +7 -0
  125. package/components/TimePicker/helpers/TimePicker.selection.js +51 -0
  126. package/components/TimePicker/helpers/TimePicker.selection.js.map +1 -0
  127. package/components/TimePicker/helpers/TimePicker.shared.d.ts +24 -0
  128. package/components/TimePicker/helpers/TimePicker.shared.js +50 -0
  129. package/components/TimePicker/helpers/TimePicker.shared.js.map +1 -0
  130. package/components/TimePicker/helpers/TimePicker.value.d.ts +10 -0
  131. package/components/TimePicker/helpers/TimePicker.value.js +47 -0
  132. package/components/TimePicker/helpers/TimePicker.value.js.map +1 -0
  133. package/components/TimePicker/helpers/scrollSelectedSlotIntoView.d.ts +1 -0
  134. package/components/TimePicker/helpers/scrollSelectedSlotIntoView.js +21 -0
  135. package/components/TimePicker/helpers/scrollSelectedSlotIntoView.js.map +1 -0
  136. package/components/TimePicker/hooks/useTimePickerDropdown.d.ts +17 -0
  137. package/components/TimePicker/hooks/useTimePickerDropdown.js +62 -0
  138. package/components/TimePicker/hooks/useTimePickerDropdown.js.map +1 -0
  139. package/components/TimePicker/hooks/useTimePickerSelection.d.ts +15 -0
  140. package/components/TimePicker/hooks/useTimePickerSelection.js +43 -0
  141. package/components/TimePicker/hooks/useTimePickerSelection.js.map +1 -0
  142. package/components/TimePicker/hooks/useTimePickerValue.d.ts +18 -0
  143. package/components/TimePicker/hooks/useTimePickerValue.js +47 -0
  144. package/components/TimePicker/hooks/useTimePickerValue.js.map +1 -0
  145. package/components/TimePicker/index.d.ts +2 -0
  146. package/components/TimePicker/index.js +2 -0
  147. package/components/TimePicker/index.js.map +1 -0
  148. package/components/Tooltip/Tooltip.d.ts +4 -4
  149. package/components/Tooltip/Tooltip.js.map +1 -1
  150. package/components/TooltipMenu/TooltipMenu.d.ts +13 -19
  151. package/components/TooltipMenu/TooltipMenu.js +2 -8
  152. package/components/TooltipMenu/TooltipMenu.js.map +1 -1
  153. package/index.d.ts +1 -0
  154. package/index.js +1 -0
  155. package/index.js.map +1 -1
  156. package/internal/CustomComboBox/ComboBoxMenu.d.ts +1 -0
  157. package/internal/CustomComboBox/ComboBoxMenu.js +2 -2
  158. package/internal/CustomComboBox/ComboBoxMenu.js.map +1 -1
  159. package/internal/CustomComboBox/ComboBoxView.d.ts +1 -0
  160. package/internal/CustomComboBox/ComboBoxView.js +2 -2
  161. package/internal/CustomComboBox/ComboBoxView.js.map +1 -1
  162. package/internal/CustomComboBox/CustomComboBox.d.ts +1 -0
  163. package/internal/CustomComboBox/CustomComboBox.js +1 -0
  164. package/internal/CustomComboBox/CustomComboBox.js.map +1 -1
  165. package/internal/icons2022/TimeClockIcon/TimeClockIcon16Light.d.ts +2 -0
  166. package/internal/icons2022/TimeClockIcon/TimeClockIcon16Light.js +20 -0
  167. package/internal/icons2022/TimeClockIcon/TimeClockIcon16Light.js.map +1 -0
  168. package/internal/icons2022/TimeClockIcon/TimeClockIcon20Light.d.ts +2 -0
  169. package/internal/icons2022/TimeClockIcon/TimeClockIcon20Light.js +20 -0
  170. package/internal/icons2022/TimeClockIcon/TimeClockIcon20Light.js.map +1 -0
  171. package/internal/icons2022/TimeClockIcon/TimeClockIcon24Regular.d.ts +2 -0
  172. package/internal/icons2022/TimeClockIcon/TimeClockIcon24Regular.js +20 -0
  173. package/internal/icons2022/TimeClockIcon/TimeClockIcon24Regular.js.map +1 -0
  174. package/internal/themes/BasicTheme.d.ts +3 -0
  175. package/internal/themes/BasicTheme.js +33 -0
  176. package/internal/themes/BasicTheme.js.map +1 -1
  177. package/package.json +5 -2
@@ -21,9 +21,9 @@ export declare const DateRangePickerDataTids: {
21
21
  };
22
22
  export interface DateRangePickerProps extends CommonProps, Pick<AriaAttributes, 'aria-describedby' | 'aria-label' | 'aria-labelledby'>, Pick<DatePickerProps, 'size' | 'width' | 'renderDay' | 'menuPos' | 'menuAlign' | 'useMobileNativeDatePicker' | 'enableTodayLink' | 'onMonthChange'> {
23
23
  /**
24
- * Элемент относительно которого открывается календарь,
25
- * Если передать значение `focused` - меню будет открываться у зафокусированного элемента.
26
- * Если передать ссылку на DOM элемент или ref - меню откроется относительно переданного элемента.
24
+ * Элемент, относительно которого открывается календарь.
25
+ * Если передать значение `focused` меню будет открываться у зафокусированного элемента.
26
+ * Если передать ссылку на DOM элемент или ref меню откроется относительно переданного элемента.
27
27
  */
28
28
  menuAnchorElement?: 'focused' | Element | React.ReactNode | React.RefObject<any>;
29
29
  /**
@@ -40,6 +40,7 @@ export interface DateRangePickerRef extends InstanceWithRootNode {
40
40
  scrollToMonth: (month: number, year: number) => void;
41
41
  }
42
42
  export type DateRangePicker = DateRangePickerRef;
43
+ /** Поле выбора периода дат. */
43
44
  export declare const DateRangePicker: {
44
45
  Start: import("../../lib/forwardRefAndName.js").ReactUIComponentWithRef<DateInput, {
45
46
  style?: React.CSSProperties | undefined;
@@ -58,6 +58,7 @@ export var DateRangePickerDataTids = {
58
58
  rangeEnd: 'DateRangePicker__rangeEnd',
59
59
  };
60
60
  var DayDateAttribute = 'data-date-range-picker-day';
61
+ /** Поле выбора периода дат. */
61
62
  export var DateRangePicker = Object.assign({
62
63
  Start: DateRangePickerStart,
63
64
  End: DateRangePickerEnd,
@@ -145,7 +146,7 @@ export var DateRangePicker = Object.assign({
145
146
  return;
146
147
  }
147
148
  // fix DateInput flushSync warning in React 18
148
- setTimeout(function () {
149
+ var timeoutId = setTimeout(function () {
149
150
  var _a, _b, _c, _d;
150
151
  var isStart = focusInput === 'start';
151
152
  var currentFieldRef;
@@ -171,7 +172,8 @@ export var DateRangePicker = Object.assign({
171
172
  currentFieldRef = isStart ? startRef : endRef;
172
173
  (_d = currentFieldRef.current) === null || _d === void 0 ? void 0 : _d.focus();
173
174
  });
174
- }, [focusInput]);
175
+ return function () { return clearTimeout(timeoutId); };
176
+ }, [focusInput, isMobile, props.useMobileNativeDatePicker]);
175
177
  var dateRangePickerContextProps = {
176
178
  startValue: startValue,
177
179
  startOptional: startOptional,
@@ -234,7 +236,7 @@ export var DateRangePicker = Object.assign({
234
236
  }
235
237
  return getRootNode(startRef.current) || getRootNode(endRef.current) || getRootNode(dateRangePickerRef.current);
236
238
  };
237
- var renderDesktopCalendar = function (theme) { return (React.createElement(Popup, { opened: true, hasShadow: true, priority: ZIndex.priorities.PopupMenu, positions: getMenuPositions(props.menuPos, props.menuAlign), "data-tid": DateRangePickerDataTids.root, anchorElement: getAnchorElement(), margin: parseInt(theme.datePickerMenuOffsetY) },
239
+ var renderDesktopCalendar = function (theme) { return (React.createElement(Popup, { opened: true, hasShadow: true, priority: ZIndex.priorities.PopupMenu, positions: getMenuPositions(props.menuPos, props.menuAlign), "data-tid": DateRangePickerDataTids.popup, anchorElement: getAnchorElement(), margin: parseInt(theme.datePickerMenuOffsetY) },
238
240
  React.createElement("div", { className: styles.calendarWrapper(theme), onMouseDown: function (e) { return e.preventDefault(); }, onMouseMove: handleCalendarRangeMouseMove },
239
241
  renderCalendar(theme),
240
242
  renderButtons()))); };
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangePicker.js","sourceRoot":"","sources":["../../../components/DateRangePicker/DateRangePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type AriaAttributes, useImperativeHandle, useLayoutEffect, useRef, useState } from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { ArrowAUpIcon16Light } from '../../internal/icons2022/ArrowAUpIcon/ArrowAUp16Light.js';\nimport { MobilePopup } from '../../internal/MobilePopup/index.js';\nimport { NativeDateInput } from '../../internal/NativeDateInput/index.js';\nimport { Popup } from '../../internal/Popup/index.js';\nimport { ZIndex } from '../../internal/ZIndex/index.js';\nimport { isIOS } from '../../lib/client.js';\nimport { isBetween, isGreater, isGreaterOrEqual, isLess, isLessOrEqual } from '../../lib/date/comparison.js';\nimport { InternalDate } from '../../lib/date/InternalDate.js';\nimport { InternalDateGetter } from '../../lib/date/InternalDateGetter.js';\nimport { forwardRefAndName } from '../../lib/forwardRefAndName.js';\nimport { getMenuPositions } from '../../lib/getMenuPositions.js';\nimport { LocaleContext } from '../../lib/locale/index.js';\nimport { useLocaleForControl } from '../../lib/locale/useLocaleForControl.js';\nimport { useEmotion, useStyles } from '../../lib/renderEnvironment/index.js';\nimport type { InstanceWithRootNode } from '../../lib/rootNode/index.js';\nimport { getRootNode } from '../../lib/rootNode/index.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { Button } from '../Button/index.js';\nimport { Calendar, CalendarDay } from '../Calendar/index.js';\nimport type { CalendarDayProps } from '../Calendar/index.js';\nimport { DateInput } from '../DateInput/index.js';\nimport type { DatePickerProps } from '../DatePicker/index.js';\nimport { useResponsiveLayout } from '../ResponsiveLayout/index.js';\nimport { getFontSize, getStyles } from './DateRangePicker.styles.js';\nimport { DateRangePickerContext } from './DateRangePickerContext.js';\nimport type { DateRangePickerContextProps } from './DateRangePickerContext.js';\nimport { DateRangePickerEnd, DateRangePickerStart } from './DateRangePickerInput.js';\nimport type { DateRangePickerInputType } from './DateRangePickerInput.js';\nimport { DateRangePickerSeparator } from './DateRangePickerSeparator.js';\nimport { getDateRangePickerTheme, getMobileDateRangePickerTheme } from './DateRangePickerTheme.js';\nimport { getStateForValue } from './helpers/getStateForValue.js';\nimport { validateDateRangePicker } from './helpers/validateDateRangePicker.js';\nimport { DateRangePickerLocaleHelper } from './locale/index.js';\n\nexport const DateRangePickerDataTids = {\n root: 'DateRangePicker__root',\n start: 'DateRangePicker__start',\n end: 'DateRangePicker__end',\n popup: 'DateRangePicker__popup',\n calendar: 'DateRangePicker__calendar',\n todayButton: 'DateRangePicker__todayButton',\n startOptionalButton: 'DateRangePicker__startOptionalButton',\n endOptionalButton: 'DateRangePicker__endOptionalButton',\n mobileStart: 'DateRangePicker__mobileStart',\n mobileEnd: 'DateRangePicker__mobileEnd',\n rangeStart: 'DateRangePicker__rangeStart',\n rangeEnd: 'DateRangePicker__rangeEnd',\n} as const;\n\nconst DayDateAttribute = 'data-date-range-picker-day';\n\nexport interface DateRangePickerProps\n extends\n CommonProps,\n Pick<AriaAttributes, 'aria-describedby' | 'aria-label' | 'aria-labelledby'>,\n Pick<\n DatePickerProps,\n | 'size'\n | 'width'\n | 'renderDay'\n | 'menuPos'\n | 'menuAlign'\n | 'useMobileNativeDatePicker'\n | 'enableTodayLink'\n | 'onMonthChange'\n > {\n /**\n * Элемент относительно которого открывается календарь,\n * Если передать значение `focused` - меню будет открываться у зафокусированного элемента.\n * Если передать ссылку на DOM элемент или ref - меню откроется относительно переданного элемента.\n */\n menuAnchorElement?: 'focused' | Element | React.ReactNode | React.RefObject<any>;\n /**\n * Элементы DateRangePicker:\n * `<DateRangePicker.Start />`\n * `<DateRangePicker.Separator />`\n * `<DateRangePicker.End />`\n */\n children: React.ReactNode;\n}\n\nexport interface DateRangePickerRef extends InstanceWithRootNode {\n open: (inputType?: DateRangePickerInputType) => void;\n close: () => void;\n scrollToMonth: (month: number, year: number) => void;\n}\n\nexport type DateRangePicker = DateRangePickerRef;\n\nexport const DateRangePicker = Object.assign(\n {\n Start: DateRangePickerStart,\n End: DateRangePickerEnd,\n Separator: DateRangePickerSeparator,\n validate: validateDateRangePicker,\n },\n forwardRefAndName<DateRangePickerRef, DateRangePickerProps>('DateRangePicker', (props: DateRangePickerProps, ref) => {\n const { css, cx } = useEmotion();\n const styles = useStyles(getStyles);\n const { isMobile } = useResponsiveLayout();\n const locale = useLocaleForControl('DateRangePicker', DateRangePickerLocaleHelper);\n\n const [startValue, setStartValue] = useState<string>();\n const [startOptional, setStartOptional] = useState(false);\n const [startDisabled, setStartDisabled] = useState(false);\n\n const [endValue, setEndValue] = useState<string>();\n const [endOptional, setEndOptional] = useState(false);\n const [endDisabled, setEndDisabled] = useState(false);\n\n const [minDate, setMinDate] = useState('');\n const [maxDate, setMaxDate] = useState('');\n\n const [hoveredDay, setHoveredDay] = useState<string | null>(null);\n const [showCalendar, setShowCalendar] = useState<boolean>(false);\n const [focusInput, setFocusInput] = useState<DateRangePickerInputType | null>(null);\n\n const dateRangePickerRef = useRef<HTMLDivElement>(null);\n const calendarRef = useRef<Calendar>(null);\n const startRef = useRef<DateInput>(null);\n const endRef = useRef<DateInput>(null);\n const mobileStartRef = useRef<DateInput>(null);\n const mobileEndRef = useRef<DateInput>(null);\n const mobileNativeStartRef = useRef<NativeDateInput>(null);\n const mobileNativeEndRef = useRef<NativeDateInput>(null);\n const isCalendarOpen = !startDisabled && !endDisabled && showCalendar;\n\n const updateDateRangeValues = (value = '') => {\n const currentValues = {\n currentStart: startValue,\n currentEnd: endValue,\n minDate,\n maxDate,\n };\n const updatedState = getStateForValue(focusInput, value, currentValues);\n\n setStartValue(updatedState.start);\n setEndValue(updatedState.end);\n\n if (updatedState.isOpen && updatedState.focus) {\n focus(updatedState.focus);\n }\n\n if (!updatedState.isOpen) {\n close();\n }\n };\n\n const open = (inputType: DateRangePickerInputType = 'start') => {\n setFocusInput(inputType);\n setShowCalendar(true);\n };\n\n const close = () => {\n setShowCalendar(false);\n setHoveredDay(null);\n };\n\n const focus = (inputType: DateRangePickerInputType = 'start') => {\n setFocusInput(inputType);\n };\n\n const setEmpty = (type: DateRangePickerInputType) => {\n switch (type) {\n case 'start':\n setStartValue('');\n focus('end');\n break;\n\n case 'end':\n setEndValue('');\n close();\n break;\n }\n };\n\n useImperativeHandle(\n ref,\n () => ({\n open,\n close,\n scrollToMonth: (month, year) => {\n calendarRef.current?.scrollToMonth?.(month, year);\n },\n getRootNode: () => dateRangePickerRef.current,\n }),\n [],\n );\n\n useLayoutEffect(() => {\n if (!focusInput) {\n return;\n }\n\n // fix DateInput flushSync warning in React 18\n setTimeout(() => {\n const isStart = focusInput === 'start';\n let currentFieldRef;\n\n // Mobile Native Picker\n if (isMobile && props.useMobileNativeDatePicker) {\n currentFieldRef = isStart ? mobileNativeStartRef : mobileNativeEndRef;\n if (isIOS) {\n currentFieldRef.current?.focus();\n } else {\n // Android open native datepicker only via click\n currentFieldRef.current?.click();\n }\n return;\n }\n\n // Mobile\n if (isMobile) {\n currentFieldRef = isStart ? mobileStartRef : mobileEndRef;\n currentFieldRef.current?.focus();\n return;\n }\n\n // Desktop\n currentFieldRef = isStart ? startRef : endRef;\n currentFieldRef.current?.focus();\n });\n }, [focusInput]);\n\n const dateRangePickerContextProps: DateRangePickerContextProps = {\n startValue,\n startOptional,\n startDisabled,\n endValue,\n endOptional,\n endDisabled,\n minDate,\n maxDate,\n size: props.size,\n setStartValue,\n setStartOptional,\n setStartDisabled,\n setEndValue,\n setEndOptional,\n setEndDisabled,\n setMinDate,\n setMaxDate,\n setFocusInput,\n open,\n close,\n dateRangePickerRef,\n startRef,\n endRef,\n };\n\n const renderCalendar = (theme: Theme, widthAuto = false) => (\n <LocaleContext.Provider\n value={{\n locale: {\n Calendar: {\n months: locale.months,\n dayCellChooseDateAriaLabel: locale.dayCellChooseDateAriaLabel,\n selectMonthAriaLabel: locale.selectMonthAriaLabel,\n selectYearAriaLabel: locale.selectYearAriaLabel,\n selectChosenAriaLabel: locale.selectChosenAriaLabel,\n },\n },\n }}\n >\n <Calendar\n value={focusInput === 'start' ? startValue : endValue}\n minDate={minDate}\n maxDate={maxDate}\n renderDay={(dayProps) => renderCalendarRange(dayProps, theme, props.renderDay)}\n onValueChange={(value) => updateDateRangeValues(value)}\n ref={calendarRef}\n onMonthChange={props.onMonthChange}\n className={cx({ [styles.calendarWidthAuto()]: widthAuto })}\n />\n </LocaleContext.Provider>\n );\n\n const renderMobileCalendar = (theme: Theme) => (\n <MobilePopup\n opened\n headerChildComponent={\n <div className={cx(styles.root(theme), styles.inputWrapperWidthFull())}>\n <DateInput\n withIcon\n value={startValue}\n width=\"auto\"\n size=\"medium\"\n className={cx({ [styles.inputVisuallyFocus(theme)]: focusInput === 'start' })}\n disabled={startDisabled}\n onValueChange={setStartValue}\n onFocus={() => setFocusInput('start')}\n ref={mobileStartRef}\n data-tid={DateRangePickerDataTids.mobileStart}\n />\n <DateRangePicker.Separator />\n <DateInput\n withIcon\n value={endValue}\n width=\"auto\"\n size=\"medium\"\n className={cx({ [styles.inputVisuallyFocus(theme)]: focusInput === 'end' })}\n disabled={endDisabled}\n onValueChange={setEndValue}\n onFocus={() => setFocusInput('end')}\n ref={mobileEndRef}\n data-tid={DateRangePickerDataTids.mobileEnd}\n />\n </div>\n }\n onCloseRequest={() => close()}\n footerChildComponent={renderButtons()}\n >\n <ThemeContext.Provider value={getMobileDateRangePickerTheme(theme)}>\n {renderCalendar(theme, true)}\n </ThemeContext.Provider>\n </MobilePopup>\n );\n\n const getAnchorElement = () => {\n const { menuAnchorElement } = props;\n if (menuAnchorElement === 'focused') {\n return getRootNode(focusInput === 'start' ? startRef.current : endRef.current);\n }\n\n if (React.isValidElement(menuAnchorElement)) {\n return menuAnchorElement;\n }\n\n if (menuAnchorElement && typeof menuAnchorElement === 'object' && 'current' in menuAnchorElement) {\n return getRootNode(menuAnchorElement.current);\n }\n\n return getRootNode(startRef.current) || getRootNode(endRef.current) || getRootNode(dateRangePickerRef.current);\n };\n\n const renderDesktopCalendar = (theme: Theme) => (\n <Popup\n opened\n hasShadow\n priority={ZIndex.priorities.PopupMenu}\n positions={getMenuPositions(props.menuPos, props.menuAlign)}\n data-tid={DateRangePickerDataTids.root}\n anchorElement={getAnchorElement()}\n margin={parseInt(theme.datePickerMenuOffsetY)}\n >\n <div\n className={styles.calendarWrapper(theme)}\n onMouseDown={(e) => e.preventDefault()}\n onMouseMove={handleCalendarRangeMouseMove}\n >\n {renderCalendar(theme)}\n {renderButtons()}\n </div>\n </Popup>\n );\n\n const renderButtons = () => {\n const today = new InternalDate(locale)\n .setComponents(InternalDateGetter.getTodayComponents())\n .toString({ withPad: true, withSeparator: true });\n\n const hasOptionalButtons = startOptional || endOptional;\n return (\n <div className={cx(styles.buttonWrap())}>\n {hasOptionalButtons && (\n <>\n {focusInput === 'start' && startOptional && (\n <Button\n width=\"100%\"\n data-tid={DateRangePickerDataTids.startOptionalButton}\n onClick={() => setEmpty('start')}\n >\n {locale.startDateEmpty}\n </Button>\n )}\n {focusInput === 'end' && endOptional && (\n <Button\n width=\"100%\"\n data-tid={DateRangePickerDataTids.endOptionalButton}\n onClick={() => setEmpty('end')}\n >\n {locale.endDateEmpty}\n </Button>\n )}\n </>\n )}\n\n {props.enableTodayLink && (\n <Button\n icon={<ArrowAUpIcon16Light />}\n aria-label={locale.todayAriaLabel}\n data-tid={DateRangePickerDataTids.todayButton}\n onClick={() => updateDateRangeValues(today)}\n >\n {!hasOptionalButtons && locale.today}\n </Button>\n )}\n </div>\n );\n };\n\n const renderMobileNativeDateInput = () => (\n <>\n <NativeDateInput\n value={startValue}\n minDate={minDate}\n maxDate={maxDate}\n onValueChange={setStartValue}\n disabled={startDisabled}\n ref={mobileNativeStartRef}\n />\n <NativeDateInput\n value={endValue}\n minDate={minDate}\n maxDate={maxDate}\n onValueChange={setEndValue}\n disabled={endDisabled}\n ref={mobileNativeEndRef}\n />\n </>\n );\n\n return (\n <ThemeContext.Consumer>\n {(theme) => (\n <ThemeContext.Provider value={getDateRangePickerTheme(theme)}>\n <DateRangePickerContext.Provider value={dateRangePickerContextProps}>\n <CommonWrapper {...props}>\n <div\n className={cx(\n styles.root(theme),\n styles.inputWrapperWidth(theme),\n css`\n font-size: ${getFontSize(theme, props.size)};\n `,\n )}\n role=\"group\"\n aria-describedby={props['aria-describedby']}\n aria-label={props['aria-label']}\n aria-labelledby={props['aria-labelledby']}\n data-tid={DateRangePickerDataTids.root}\n ref={dateRangePickerRef}\n style={{ width: props.width }}\n >\n {props.children}\n\n {props.useMobileNativeDatePicker && isMobile\n ? renderMobileNativeDateInput()\n : isCalendarOpen && (isMobile ? renderMobileCalendar(theme) : renderDesktopCalendar(theme))}\n </div>\n </CommonWrapper>\n </DateRangePickerContext.Provider>\n </ThemeContext.Provider>\n )}\n </ThemeContext.Consumer>\n );\n\n // Use parent mousemove event instead each CalendarDay's mouseenter / mouseover\n function handleCalendarRangeMouseMove(e: React.MouseEvent<HTMLDivElement, MouseEvent>) {\n if (!startValue && !endValue) {\n return;\n }\n\n const hoveredElement = e.target as HTMLElement;\n if (!hoveredElement.hasAttribute(DayDateAttribute) && hoveredDay === null) {\n return;\n }\n\n const date = String(hoveredElement?.getAttribute(DayDateAttribute)) || null;\n setHoveredDay(date);\n }\n\n function renderCalendarRange(\n props: CalendarDayProps,\n t: Theme,\n renderDayFn: ((props: CalendarDayProps) => React.ReactElement<unknown>) | undefined,\n ) {\n const day = props.date;\n\n const isDayFirst = startValue === day;\n const isDayLast = endValue === day;\n const isDayInPeriod = Boolean(startValue && endValue && isBetween(day, startValue, endValue));\n\n const hasHoveredDay = hoveredDay !== null;\n const isDayInHoveredPeriod =\n hasHoveredDay &&\n Boolean(\n (focusInput === 'start' && endValue && isBetween(day, hoveredDay, endValue)) ||\n (focusInput === 'end' && startValue && isBetween(day, startValue, hoveredDay)),\n );\n\n let hasLeftRoundings;\n let hasRightRoundings;\n\n if (hasHoveredDay) {\n const isDayBeforeFirstInPeriod = startValue ? isLess(hoveredDay, startValue) : endValue;\n const isDayAfterLastInPeriod = endValue ? isGreater(hoveredDay, endValue) : startValue;\n\n if (isDayFirst && (isGreaterOrEqual(hoveredDay, startValue) || focusInput === 'end')) {\n hasLeftRoundings = true;\n }\n\n if (isDayLast && (isLessOrEqual(hoveredDay, endValue) || focusInput === 'start')) {\n hasRightRoundings = true;\n }\n\n const isDayHovered = hoveredDay === day;\n if (isDayHovered) {\n if (isDayBeforeFirstInPeriod) {\n hasLeftRoundings = true;\n }\n\n if (isDayAfterLastInPeriod) {\n hasRightRoundings = true;\n }\n }\n } else {\n if (isDayFirst) {\n hasLeftRoundings = true;\n }\n\n if (isDayLast) {\n hasRightRoundings = true;\n }\n }\n\n const renderDayProps = {\n ...props,\n [DayDateAttribute]: props.date,\n };\n\n let dataTid = null;\n if (isDayFirst) {\n dataTid = DateRangePickerDataTids.rangeStart;\n } else if (isDayLast) {\n dataTid = DateRangePickerDataTids.rangeEnd;\n }\n\n return (\n <div\n className={cx(\n styles.rangeCalendarDay(),\n css`\n background: ${isDayInPeriod && t.rangeCalendarCellBg};\n border-top-left-radius: ${hasLeftRoundings && t.calendarCellBorderRadius};\n border-bottom-left-radius: ${hasLeftRoundings && t.calendarCellBorderRadius};\n border-top-right-radius: ${hasRightRoundings && t.calendarCellBorderRadius};\n border-bottom-right-radius: ${hasRightRoundings && t.calendarCellBorderRadius};\n `,\n {\n [styles.rangeCalendarDayEnd(t)]: isDayFirst || isDayLast,\n [styles.rangeCalendarDayHoverInPeriod(t)]: isDayInPeriod,\n [styles.rangeCalendarDayInHoveredPeriod(t)]: isDayInHoveredPeriod,\n },\n )}\n data-tid={dataTid}\n >\n {renderDayFn ? renderDayFn(renderDayProps) : <CalendarDay {...renderDayProps} />}\n </div>\n );\n }\n }),\n);\n"]}
1
+ {"version":3,"file":"DateRangePicker.js","sourceRoot":"","sources":["../../../components/DateRangePicker/DateRangePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type AriaAttributes, useImperativeHandle, useLayoutEffect, useRef, useState } from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { ArrowAUpIcon16Light } from '../../internal/icons2022/ArrowAUpIcon/ArrowAUp16Light.js';\nimport { MobilePopup } from '../../internal/MobilePopup/index.js';\nimport { NativeDateInput } from '../../internal/NativeDateInput/index.js';\nimport { Popup } from '../../internal/Popup/index.js';\nimport { ZIndex } from '../../internal/ZIndex/index.js';\nimport { isIOS } from '../../lib/client.js';\nimport { isBetween, isGreater, isGreaterOrEqual, isLess, isLessOrEqual } from '../../lib/date/comparison.js';\nimport { InternalDate } from '../../lib/date/InternalDate.js';\nimport { InternalDateGetter } from '../../lib/date/InternalDateGetter.js';\nimport { forwardRefAndName } from '../../lib/forwardRefAndName.js';\nimport { getMenuPositions } from '../../lib/getMenuPositions.js';\nimport { LocaleContext } from '../../lib/locale/index.js';\nimport { useLocaleForControl } from '../../lib/locale/useLocaleForControl.js';\nimport { useEmotion, useStyles } from '../../lib/renderEnvironment/index.js';\nimport type { InstanceWithRootNode } from '../../lib/rootNode/index.js';\nimport { getRootNode } from '../../lib/rootNode/index.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { Button } from '../Button/index.js';\nimport { Calendar, CalendarDay } from '../Calendar/index.js';\nimport type { CalendarDayProps } from '../Calendar/index.js';\nimport { DateInput } from '../DateInput/index.js';\nimport type { DatePickerProps } from '../DatePicker/index.js';\nimport { useResponsiveLayout } from '../ResponsiveLayout/index.js';\nimport { getFontSize, getStyles } from './DateRangePicker.styles.js';\nimport { DateRangePickerContext } from './DateRangePickerContext.js';\nimport type { DateRangePickerContextProps } from './DateRangePickerContext.js';\nimport { DateRangePickerEnd, DateRangePickerStart } from './DateRangePickerInput.js';\nimport type { DateRangePickerInputType } from './DateRangePickerInput.js';\nimport { DateRangePickerSeparator } from './DateRangePickerSeparator.js';\nimport { getDateRangePickerTheme, getMobileDateRangePickerTheme } from './DateRangePickerTheme.js';\nimport { getStateForValue } from './helpers/getStateForValue.js';\nimport { validateDateRangePicker } from './helpers/validateDateRangePicker.js';\nimport { DateRangePickerLocaleHelper } from './locale/index.js';\n\nexport const DateRangePickerDataTids = {\n root: 'DateRangePicker__root',\n start: 'DateRangePicker__start',\n end: 'DateRangePicker__end',\n popup: 'DateRangePicker__popup',\n calendar: 'DateRangePicker__calendar',\n todayButton: 'DateRangePicker__todayButton',\n startOptionalButton: 'DateRangePicker__startOptionalButton',\n endOptionalButton: 'DateRangePicker__endOptionalButton',\n mobileStart: 'DateRangePicker__mobileStart',\n mobileEnd: 'DateRangePicker__mobileEnd',\n rangeStart: 'DateRangePicker__rangeStart',\n rangeEnd: 'DateRangePicker__rangeEnd',\n} as const;\n\nconst DayDateAttribute = 'data-date-range-picker-day';\n\nexport interface DateRangePickerProps\n extends\n CommonProps,\n Pick<AriaAttributes, 'aria-describedby' | 'aria-label' | 'aria-labelledby'>,\n Pick<\n DatePickerProps,\n | 'size'\n | 'width'\n | 'renderDay'\n | 'menuPos'\n | 'menuAlign'\n | 'useMobileNativeDatePicker'\n | 'enableTodayLink'\n | 'onMonthChange'\n > {\n /**\n * Элемент, относительно которого открывается календарь.\n * Если передать значение `focused` — меню будет открываться у зафокусированного элемента.\n * Если передать ссылку на DOM элемент или ref — меню откроется относительно переданного элемента.\n */\n menuAnchorElement?: 'focused' | Element | React.ReactNode | React.RefObject<any>;\n /**\n * Элементы DateRangePicker:\n * `<DateRangePicker.Start />`\n * `<DateRangePicker.Separator />`\n * `<DateRangePicker.End />`\n */\n children: React.ReactNode;\n}\n\nexport interface DateRangePickerRef extends InstanceWithRootNode {\n open: (inputType?: DateRangePickerInputType) => void;\n close: () => void;\n scrollToMonth: (month: number, year: number) => void;\n}\n\nexport type DateRangePicker = DateRangePickerRef;\n\n/** Поле выбора периода дат. */\nexport const DateRangePicker = Object.assign(\n {\n Start: DateRangePickerStart,\n End: DateRangePickerEnd,\n Separator: DateRangePickerSeparator,\n validate: validateDateRangePicker,\n },\n forwardRefAndName<DateRangePickerRef, DateRangePickerProps>('DateRangePicker', (props: DateRangePickerProps, ref) => {\n const { css, cx } = useEmotion();\n const styles = useStyles(getStyles);\n const { isMobile } = useResponsiveLayout();\n const locale = useLocaleForControl('DateRangePicker', DateRangePickerLocaleHelper);\n\n const [startValue, setStartValue] = useState<string>();\n const [startOptional, setStartOptional] = useState(false);\n const [startDisabled, setStartDisabled] = useState(false);\n\n const [endValue, setEndValue] = useState<string>();\n const [endOptional, setEndOptional] = useState(false);\n const [endDisabled, setEndDisabled] = useState(false);\n\n const [minDate, setMinDate] = useState('');\n const [maxDate, setMaxDate] = useState('');\n\n const [hoveredDay, setHoveredDay] = useState<string | null>(null);\n const [showCalendar, setShowCalendar] = useState<boolean>(false);\n const [focusInput, setFocusInput] = useState<DateRangePickerInputType | null>(null);\n\n const dateRangePickerRef = useRef<HTMLDivElement>(null);\n const calendarRef = useRef<Calendar>(null);\n const startRef = useRef<DateInput>(null);\n const endRef = useRef<DateInput>(null);\n const mobileStartRef = useRef<DateInput>(null);\n const mobileEndRef = useRef<DateInput>(null);\n const mobileNativeStartRef = useRef<NativeDateInput>(null);\n const mobileNativeEndRef = useRef<NativeDateInput>(null);\n const isCalendarOpen = !startDisabled && !endDisabled && showCalendar;\n\n const updateDateRangeValues = (value = '') => {\n const currentValues = {\n currentStart: startValue,\n currentEnd: endValue,\n minDate,\n maxDate,\n };\n const updatedState = getStateForValue(focusInput, value, currentValues);\n\n setStartValue(updatedState.start);\n setEndValue(updatedState.end);\n\n if (updatedState.isOpen && updatedState.focus) {\n focus(updatedState.focus);\n }\n\n if (!updatedState.isOpen) {\n close();\n }\n };\n\n const open = (inputType: DateRangePickerInputType = 'start') => {\n setFocusInput(inputType);\n setShowCalendar(true);\n };\n\n const close = () => {\n setShowCalendar(false);\n setHoveredDay(null);\n };\n\n const focus = (inputType: DateRangePickerInputType = 'start') => {\n setFocusInput(inputType);\n };\n\n const setEmpty = (type: DateRangePickerInputType) => {\n switch (type) {\n case 'start':\n setStartValue('');\n focus('end');\n break;\n\n case 'end':\n setEndValue('');\n close();\n break;\n }\n };\n\n useImperativeHandle(\n ref,\n () => ({\n open,\n close,\n scrollToMonth: (month, year) => {\n calendarRef.current?.scrollToMonth?.(month, year);\n },\n getRootNode: () => dateRangePickerRef.current,\n }),\n [],\n );\n\n useLayoutEffect(() => {\n if (!focusInput) {\n return;\n }\n\n // fix DateInput flushSync warning in React 18\n const timeoutId = setTimeout(() => {\n const isStart = focusInput === 'start';\n let currentFieldRef;\n\n // Mobile Native Picker\n if (isMobile && props.useMobileNativeDatePicker) {\n currentFieldRef = isStart ? mobileNativeStartRef : mobileNativeEndRef;\n if (isIOS) {\n currentFieldRef.current?.focus();\n } else {\n // Android open native datepicker only via click\n currentFieldRef.current?.click();\n }\n return;\n }\n\n // Mobile\n if (isMobile) {\n currentFieldRef = isStart ? mobileStartRef : mobileEndRef;\n currentFieldRef.current?.focus();\n return;\n }\n\n // Desktop\n currentFieldRef = isStart ? startRef : endRef;\n currentFieldRef.current?.focus();\n });\n\n return () => clearTimeout(timeoutId);\n }, [focusInput, isMobile, props.useMobileNativeDatePicker]);\n\n const dateRangePickerContextProps: DateRangePickerContextProps = {\n startValue,\n startOptional,\n startDisabled,\n endValue,\n endOptional,\n endDisabled,\n minDate,\n maxDate,\n size: props.size,\n setStartValue,\n setStartOptional,\n setStartDisabled,\n setEndValue,\n setEndOptional,\n setEndDisabled,\n setMinDate,\n setMaxDate,\n setFocusInput,\n open,\n close,\n dateRangePickerRef,\n startRef,\n endRef,\n };\n\n const renderCalendar = (theme: Theme, widthAuto = false) => (\n <LocaleContext.Provider\n value={{\n locale: {\n Calendar: {\n months: locale.months,\n dayCellChooseDateAriaLabel: locale.dayCellChooseDateAriaLabel,\n selectMonthAriaLabel: locale.selectMonthAriaLabel,\n selectYearAriaLabel: locale.selectYearAriaLabel,\n selectChosenAriaLabel: locale.selectChosenAriaLabel,\n },\n },\n }}\n >\n <Calendar\n value={focusInput === 'start' ? startValue : endValue}\n minDate={minDate}\n maxDate={maxDate}\n renderDay={(dayProps) => renderCalendarRange(dayProps, theme, props.renderDay)}\n onValueChange={(value) => updateDateRangeValues(value)}\n ref={calendarRef}\n onMonthChange={props.onMonthChange}\n className={cx({ [styles.calendarWidthAuto()]: widthAuto })}\n />\n </LocaleContext.Provider>\n );\n\n const renderMobileCalendar = (theme: Theme) => (\n <MobilePopup\n opened\n headerChildComponent={\n <div className={cx(styles.root(theme), styles.inputWrapperWidthFull())}>\n <DateInput\n withIcon\n value={startValue}\n width=\"auto\"\n size=\"medium\"\n className={cx({ [styles.inputVisuallyFocus(theme)]: focusInput === 'start' })}\n disabled={startDisabled}\n onValueChange={setStartValue}\n onFocus={() => setFocusInput('start')}\n ref={mobileStartRef}\n data-tid={DateRangePickerDataTids.mobileStart}\n />\n <DateRangePicker.Separator />\n <DateInput\n withIcon\n value={endValue}\n width=\"auto\"\n size=\"medium\"\n className={cx({ [styles.inputVisuallyFocus(theme)]: focusInput === 'end' })}\n disabled={endDisabled}\n onValueChange={setEndValue}\n onFocus={() => setFocusInput('end')}\n ref={mobileEndRef}\n data-tid={DateRangePickerDataTids.mobileEnd}\n />\n </div>\n }\n onCloseRequest={() => close()}\n footerChildComponent={renderButtons()}\n >\n <ThemeContext.Provider value={getMobileDateRangePickerTheme(theme)}>\n {renderCalendar(theme, true)}\n </ThemeContext.Provider>\n </MobilePopup>\n );\n\n const getAnchorElement = () => {\n const { menuAnchorElement } = props;\n if (menuAnchorElement === 'focused') {\n return getRootNode(focusInput === 'start' ? startRef.current : endRef.current);\n }\n\n if (React.isValidElement(menuAnchorElement)) {\n return menuAnchorElement;\n }\n\n if (menuAnchorElement && typeof menuAnchorElement === 'object' && 'current' in menuAnchorElement) {\n return getRootNode(menuAnchorElement.current);\n }\n\n return getRootNode(startRef.current) || getRootNode(endRef.current) || getRootNode(dateRangePickerRef.current);\n };\n\n const renderDesktopCalendar = (theme: Theme) => (\n <Popup\n opened\n hasShadow\n priority={ZIndex.priorities.PopupMenu}\n positions={getMenuPositions(props.menuPos, props.menuAlign)}\n data-tid={DateRangePickerDataTids.popup}\n anchorElement={getAnchorElement()}\n margin={parseInt(theme.datePickerMenuOffsetY)}\n >\n <div\n className={styles.calendarWrapper(theme)}\n onMouseDown={(e) => e.preventDefault()}\n onMouseMove={handleCalendarRangeMouseMove}\n >\n {renderCalendar(theme)}\n {renderButtons()}\n </div>\n </Popup>\n );\n\n const renderButtons = () => {\n const today = new InternalDate(locale)\n .setComponents(InternalDateGetter.getTodayComponents())\n .toString({ withPad: true, withSeparator: true });\n\n const hasOptionalButtons = startOptional || endOptional;\n return (\n <div className={cx(styles.buttonWrap())}>\n {hasOptionalButtons && (\n <>\n {focusInput === 'start' && startOptional && (\n <Button\n width=\"100%\"\n data-tid={DateRangePickerDataTids.startOptionalButton}\n onClick={() => setEmpty('start')}\n >\n {locale.startDateEmpty}\n </Button>\n )}\n {focusInput === 'end' && endOptional && (\n <Button\n width=\"100%\"\n data-tid={DateRangePickerDataTids.endOptionalButton}\n onClick={() => setEmpty('end')}\n >\n {locale.endDateEmpty}\n </Button>\n )}\n </>\n )}\n\n {props.enableTodayLink && (\n <Button\n icon={<ArrowAUpIcon16Light />}\n aria-label={locale.todayAriaLabel}\n data-tid={DateRangePickerDataTids.todayButton}\n onClick={() => updateDateRangeValues(today)}\n >\n {!hasOptionalButtons && locale.today}\n </Button>\n )}\n </div>\n );\n };\n\n const renderMobileNativeDateInput = () => (\n <>\n <NativeDateInput\n value={startValue}\n minDate={minDate}\n maxDate={maxDate}\n onValueChange={setStartValue}\n disabled={startDisabled}\n ref={mobileNativeStartRef}\n />\n <NativeDateInput\n value={endValue}\n minDate={minDate}\n maxDate={maxDate}\n onValueChange={setEndValue}\n disabled={endDisabled}\n ref={mobileNativeEndRef}\n />\n </>\n );\n\n return (\n <ThemeContext.Consumer>\n {(theme) => (\n <ThemeContext.Provider value={getDateRangePickerTheme(theme)}>\n <DateRangePickerContext.Provider value={dateRangePickerContextProps}>\n <CommonWrapper {...props}>\n <div\n className={cx(\n styles.root(theme),\n styles.inputWrapperWidth(theme),\n css`\n font-size: ${getFontSize(theme, props.size)};\n `,\n )}\n role=\"group\"\n aria-describedby={props['aria-describedby']}\n aria-label={props['aria-label']}\n aria-labelledby={props['aria-labelledby']}\n data-tid={DateRangePickerDataTids.root}\n ref={dateRangePickerRef}\n style={{ width: props.width }}\n >\n {props.children}\n\n {props.useMobileNativeDatePicker && isMobile\n ? renderMobileNativeDateInput()\n : isCalendarOpen && (isMobile ? renderMobileCalendar(theme) : renderDesktopCalendar(theme))}\n </div>\n </CommonWrapper>\n </DateRangePickerContext.Provider>\n </ThemeContext.Provider>\n )}\n </ThemeContext.Consumer>\n );\n\n // Use parent mousemove event instead each CalendarDay's mouseenter / mouseover\n function handleCalendarRangeMouseMove(e: React.MouseEvent<HTMLDivElement, MouseEvent>) {\n if (!startValue && !endValue) {\n return;\n }\n\n const hoveredElement = e.target as HTMLElement;\n if (!hoveredElement.hasAttribute(DayDateAttribute) && hoveredDay === null) {\n return;\n }\n\n const date = String(hoveredElement?.getAttribute(DayDateAttribute)) || null;\n setHoveredDay(date);\n }\n\n function renderCalendarRange(\n props: CalendarDayProps,\n t: Theme,\n renderDayFn: ((props: CalendarDayProps) => React.ReactElement<unknown>) | undefined,\n ) {\n const day = props.date;\n\n const isDayFirst = startValue === day;\n const isDayLast = endValue === day;\n const isDayInPeriod = Boolean(startValue && endValue && isBetween(day, startValue, endValue));\n\n const hasHoveredDay = hoveredDay !== null;\n const isDayInHoveredPeriod =\n hasHoveredDay &&\n Boolean(\n (focusInput === 'start' && endValue && isBetween(day, hoveredDay, endValue)) ||\n (focusInput === 'end' && startValue && isBetween(day, startValue, hoveredDay)),\n );\n\n let hasLeftRoundings;\n let hasRightRoundings;\n\n if (hasHoveredDay) {\n const isDayBeforeFirstInPeriod = startValue ? isLess(hoveredDay, startValue) : endValue;\n const isDayAfterLastInPeriod = endValue ? isGreater(hoveredDay, endValue) : startValue;\n\n if (isDayFirst && (isGreaterOrEqual(hoveredDay, startValue) || focusInput === 'end')) {\n hasLeftRoundings = true;\n }\n\n if (isDayLast && (isLessOrEqual(hoveredDay, endValue) || focusInput === 'start')) {\n hasRightRoundings = true;\n }\n\n const isDayHovered = hoveredDay === day;\n if (isDayHovered) {\n if (isDayBeforeFirstInPeriod) {\n hasLeftRoundings = true;\n }\n\n if (isDayAfterLastInPeriod) {\n hasRightRoundings = true;\n }\n }\n } else {\n if (isDayFirst) {\n hasLeftRoundings = true;\n }\n\n if (isDayLast) {\n hasRightRoundings = true;\n }\n }\n\n const renderDayProps = {\n ...props,\n [DayDateAttribute]: props.date,\n };\n\n let dataTid = null;\n if (isDayFirst) {\n dataTid = DateRangePickerDataTids.rangeStart;\n } else if (isDayLast) {\n dataTid = DateRangePickerDataTids.rangeEnd;\n }\n\n return (\n <div\n className={cx(\n styles.rangeCalendarDay(),\n css`\n background: ${isDayInPeriod && t.rangeCalendarCellBg};\n border-top-left-radius: ${hasLeftRoundings && t.calendarCellBorderRadius};\n border-bottom-left-radius: ${hasLeftRoundings && t.calendarCellBorderRadius};\n border-top-right-radius: ${hasRightRoundings && t.calendarCellBorderRadius};\n border-bottom-right-radius: ${hasRightRoundings && t.calendarCellBorderRadius};\n `,\n {\n [styles.rangeCalendarDayEnd(t)]: isDayFirst || isDayLast,\n [styles.rangeCalendarDayHoverInPeriod(t)]: isDayInPeriod,\n [styles.rangeCalendarDayInHoveredPeriod(t)]: isDayInHoveredPeriod,\n },\n )}\n data-tid={dataTid}\n >\n {renderDayFn ? renderDayFn(renderDayProps) : <CalendarDay {...renderDayProps} />}\n </div>\n );\n }\n }),\n);\n"]}
@@ -19,7 +19,7 @@ import { DateRangePickerDataTids } from './DateRangePicker.js';
19
19
  import { DateRangePickerContext } from './DateRangePickerContext.js';
20
20
  import { DateRangePickerLocaleHelper } from './locale/index.js';
21
21
  var DateRangePickerInput = forwardRef(function (props, ref) {
22
- var _a = useContext(DateRangePickerContext), minDate = _a.minDate, maxDate = _a.maxDate, startValue = _a.startValue, endValue = _a.endValue, size = _a.size, setStartValue = _a.setStartValue, setStartOptional = _a.setStartOptional, setStartDisabled = _a.setStartDisabled, setEndValue = _a.setEndValue, setEndOptional = _a.setEndOptional, setEndDisabled = _a.setEndDisabled, setMinDate = _a.setMinDate, setMaxDate = _a.setMaxDate, setFocusInput = _a.setFocusInput, open = _a.open, close = _a.close, dateRangePickerRef = _a.dateRangePickerRef, startRef = _a.startRef, endRef = _a.endRef;
22
+ var _a = useContext(DateRangePickerContext), minDate = _a.minDate, maxDate = _a.maxDate, startValue = _a.startValue, endValue = _a.endValue, size = _a.size, setStartValue = _a.setStartValue, setStartOptional = _a.setStartOptional, setStartDisabled = _a.setStartDisabled, setEndValue = _a.setEndValue, setEndOptional = _a.setEndOptional, setEndDisabled = _a.setEndDisabled, setMinDate = _a.setMinDate, setMaxDate = _a.setMaxDate, setFocusInput = _a.setFocusInput, open = _a.open, close = _a.close, startRef = _a.startRef, endRef = _a.endRef;
23
23
  var isStart = props.type === 'start';
24
24
  var isEnd = props.type === 'end';
25
25
  var locale = useLocaleForControl('DateRangePicker', DateRangePickerLocaleHelper);
@@ -76,16 +76,18 @@ var DateRangePickerInput = forwardRef(function (props, ref) {
76
76
  open(props.type);
77
77
  (_a = props.onFocus) === null || _a === void 0 ? void 0 : _a.call(props, e);
78
78
  }, onBlur: function (e) {
79
- var _a, _b;
79
+ var _a, _b, _c, _d, _e;
80
80
  (_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, e);
81
81
  if (isMobile) {
82
82
  return;
83
83
  }
84
84
  var nextFocusedElement = e.relatedTarget;
85
- if (!((_b = dateRangePickerRef.current) === null || _b === void 0 ? void 0 : _b.contains(nextFocusedElement))) {
85
+ var isFocusStart = (_c = (_b = startRef.current) === null || _b === void 0 ? void 0 : _b.getRootNode()) === null || _c === void 0 ? void 0 : _c.contains(nextFocusedElement);
86
+ var isFocusEnd = (_e = (_d = endRef.current) === null || _d === void 0 ? void 0 : _d.getRootNode()) === null || _e === void 0 ? void 0 : _e.contains(nextFocusedElement);
87
+ if (!isFocusStart && !isFocusEnd) {
86
88
  close();
89
+ setFocusInput(null);
87
90
  }
88
- setFocusInput(null);
89
91
  } });
90
92
  switch (props.type) {
91
93
  case 'start':
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangePickerInput.js","sourceRoot":"","sources":["../../../components/DateRangePicker/DateRangePickerInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { forwardRef, useContext, useEffect, useImperativeHandle } from 'react';\nimport type { Ref } from 'react';\n\nimport { forwardRefAndName } from '../../lib/forwardRefAndName.js';\nimport { useLocaleForControl } from '../../lib/locale/useLocaleForControl.js';\nimport { isNonNullable } from '../../lib/utils.js';\nimport { DateInput } from '../DateInput/index.js';\nimport type { DateInputProps } from '../DateInput/index.js';\nimport { useResponsiveLayout } from '../ResponsiveLayout/index.js';\nimport { DateRangePickerDataTids } from './DateRangePicker.js';\nimport { DateRangePickerContext } from './DateRangePickerContext.js';\nimport { DateRangePickerLocaleHelper } from './locale/index.js';\n\nexport type DateRangePickerInputType = 'start' | 'end';\n\nexport interface DateRangePickerInputProps extends Omit<DateInputProps, 'value'> {\n type: DateRangePickerInputType;\n value?: string | null;\n optional?: boolean;\n}\n\ntype DateRangePickerInputWithoutType = Omit<DateRangePickerInputProps, 'type'>;\n\nconst DateRangePickerInput = forwardRef((props: DateRangePickerInputProps, ref: Ref<DateInput | null>) => {\n const {\n minDate,\n maxDate,\n startValue,\n endValue,\n size,\n setStartValue,\n setStartOptional,\n setStartDisabled,\n setEndValue,\n setEndOptional,\n setEndDisabled,\n setMinDate,\n setMaxDate,\n setFocusInput,\n open,\n close,\n dateRangePickerRef,\n startRef,\n endRef,\n } = useContext(DateRangePickerContext);\n const isStart = props.type === 'start';\n const isEnd = props.type === 'end';\n const locale = useLocaleForControl('DateRangePicker', DateRangePickerLocaleHelper);\n\n const { isMobile } = useResponsiveLayout();\n\n useImperativeHandle<DateInput | null, DateInput | null>(ref, () => (isStart ? startRef.current : endRef.current), []);\n\n useEffect(() => {\n if (isStart && startValue !== props.value) {\n setStartValue(props.value || '');\n } else if (isEnd && endValue !== props.value) {\n setEndValue(props.value || '');\n }\n }, [props.value]);\n\n useEffect(() => {\n if (isStart) {\n setStartOptional(props.optional || false);\n setStartDisabled(props.disabled || false);\n setMinDate(props.minDate || '');\n } else if (isEnd) {\n setEndOptional(props.optional || false);\n setEndDisabled(props.disabled || false);\n setMaxDate(props.maxDate || '');\n }\n }, [props.optional, props.disabled, props.minDate, props.maxDate]);\n\n useEffect(() => {\n if (isStart && startValue !== props.value && isNonNullable(startValue)) {\n props.onValueChange?.(startValue);\n }\n }, [startValue]);\n\n useEffect(() => {\n if (isEnd && endValue !== props.value && isNonNullable(endValue)) {\n props.onValueChange?.(endValue);\n }\n }, [endValue]);\n\n const commonProps: DateRangePickerInputProps = {\n withIcon: true,\n size,\n minDate,\n maxDate,\n ...props,\n onValueChange: (value) => {\n if (isStart) {\n setStartValue(value || '');\n } else if (isEnd) {\n setEndValue(value || '');\n }\n },\n onClick: (e) => {\n if (props.disabled) {\n return;\n }\n open(props.type);\n props.onClick?.(e);\n },\n onFocus: (e) => {\n open(props.type);\n props.onFocus?.(e);\n },\n onBlur: (e) => {\n props.onBlur?.(e);\n\n if (isMobile) {\n return;\n }\n const nextFocusedElement = e.relatedTarget;\n if (!dateRangePickerRef.current?.contains(nextFocusedElement)) {\n close();\n }\n setFocusInput(null);\n },\n };\n\n switch (props.type) {\n case 'start':\n return (\n <DateInput\n {...commonProps}\n value={props.value || ''}\n data-tid={props['data-tid'] || DateRangePickerDataTids.start}\n aria-label={props['aria-label'] || locale.startDateLabel}\n ref={startRef}\n />\n );\n case 'end':\n return (\n <DateInput\n {...commonProps}\n value={props.value || ''}\n data-tid={props['data-tid'] || DateRangePickerDataTids.end}\n aria-label={props['aria-label'] || locale.endDateLabel}\n ref={endRef}\n />\n );\n }\n});\n\nexport const DateRangePickerStart = forwardRefAndName(\n 'DateRangePickerStart',\n (props: DateRangePickerInputWithoutType, ref: Ref<DateInput>) => (\n <DateRangePickerInput type=\"start\" {...props} ref={ref} />\n ),\n);\n\nexport const DateRangePickerEnd = forwardRefAndName(\n 'DateRangePickerEnd',\n (props: DateRangePickerInputWithoutType, ref: Ref<DateInput>) => (\n <DateRangePickerInput type=\"end\" {...props} ref={ref} />\n ),\n);\n"]}
1
+ {"version":3,"file":"DateRangePickerInput.js","sourceRoot":"","sources":["../../../components/DateRangePicker/DateRangePickerInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { forwardRef, useContext, useEffect, useImperativeHandle } from 'react';\nimport type { Ref } from 'react';\n\nimport { forwardRefAndName } from '../../lib/forwardRefAndName.js';\nimport { useLocaleForControl } from '../../lib/locale/useLocaleForControl.js';\nimport { isNonNullable } from '../../lib/utils.js';\nimport { DateInput } from '../DateInput/index.js';\nimport type { DateInputProps } from '../DateInput/index.js';\nimport { useResponsiveLayout } from '../ResponsiveLayout/index.js';\nimport { DateRangePickerDataTids } from './DateRangePicker.js';\nimport { DateRangePickerContext } from './DateRangePickerContext.js';\nimport { DateRangePickerLocaleHelper } from './locale/index.js';\n\nexport type DateRangePickerInputType = 'start' | 'end';\n\nexport interface DateRangePickerInputProps extends Omit<DateInputProps, 'value'> {\n type: DateRangePickerInputType;\n value?: string | null;\n optional?: boolean;\n}\n\ntype DateRangePickerInputWithoutType = Omit<DateRangePickerInputProps, 'type'>;\n\nconst DateRangePickerInput = forwardRef((props: DateRangePickerInputProps, ref: Ref<DateInput | null>) => {\n const {\n minDate,\n maxDate,\n startValue,\n endValue,\n size,\n setStartValue,\n setStartOptional,\n setStartDisabled,\n setEndValue,\n setEndOptional,\n setEndDisabled,\n setMinDate,\n setMaxDate,\n setFocusInput,\n open,\n close,\n startRef,\n endRef,\n } = useContext(DateRangePickerContext);\n const isStart = props.type === 'start';\n const isEnd = props.type === 'end';\n const locale = useLocaleForControl('DateRangePicker', DateRangePickerLocaleHelper);\n\n const { isMobile } = useResponsiveLayout();\n\n useImperativeHandle<DateInput | null, DateInput | null>(ref, () => (isStart ? startRef.current : endRef.current), []);\n\n useEffect(() => {\n if (isStart && startValue !== props.value) {\n setStartValue(props.value || '');\n } else if (isEnd && endValue !== props.value) {\n setEndValue(props.value || '');\n }\n }, [props.value]);\n\n useEffect(() => {\n if (isStart) {\n setStartOptional(props.optional || false);\n setStartDisabled(props.disabled || false);\n setMinDate(props.minDate || '');\n } else if (isEnd) {\n setEndOptional(props.optional || false);\n setEndDisabled(props.disabled || false);\n setMaxDate(props.maxDate || '');\n }\n }, [props.optional, props.disabled, props.minDate, props.maxDate]);\n\n useEffect(() => {\n if (isStart && startValue !== props.value && isNonNullable(startValue)) {\n props.onValueChange?.(startValue);\n }\n }, [startValue]);\n\n useEffect(() => {\n if (isEnd && endValue !== props.value && isNonNullable(endValue)) {\n props.onValueChange?.(endValue);\n }\n }, [endValue]);\n\n const commonProps: DateRangePickerInputProps = {\n withIcon: true,\n size,\n minDate,\n maxDate,\n ...props,\n onValueChange: (value) => {\n if (isStart) {\n setStartValue(value || '');\n } else if (isEnd) {\n setEndValue(value || '');\n }\n },\n onClick: (e) => {\n if (props.disabled) {\n return;\n }\n open(props.type);\n props.onClick?.(e);\n },\n onFocus: (e) => {\n open(props.type);\n props.onFocus?.(e);\n },\n onBlur: (e) => {\n props.onBlur?.(e);\n\n if (isMobile) {\n return;\n }\n\n const nextFocusedElement = e.relatedTarget;\n const isFocusStart = startRef.current?.getRootNode()?.contains(nextFocusedElement);\n const isFocusEnd = endRef.current?.getRootNode()?.contains(nextFocusedElement);\n\n if (!isFocusStart && !isFocusEnd) {\n close();\n setFocusInput(null);\n }\n },\n };\n\n switch (props.type) {\n case 'start':\n return (\n <DateInput\n {...commonProps}\n value={props.value || ''}\n data-tid={props['data-tid'] || DateRangePickerDataTids.start}\n aria-label={props['aria-label'] || locale.startDateLabel}\n ref={startRef}\n />\n );\n case 'end':\n return (\n <DateInput\n {...commonProps}\n value={props.value || ''}\n data-tid={props['data-tid'] || DateRangePickerDataTids.end}\n aria-label={props['aria-label'] || locale.endDateLabel}\n ref={endRef}\n />\n );\n }\n});\n\nexport const DateRangePickerStart = forwardRefAndName(\n 'DateRangePickerStart',\n (props: DateRangePickerInputWithoutType, ref: Ref<DateInput>) => (\n <DateRangePickerInput type=\"start\" {...props} ref={ref} />\n ),\n);\n\nexport const DateRangePickerEnd = forwardRefAndName(\n 'DateRangePickerEnd',\n (props: DateRangePickerInputWithoutType, ref: Ref<DateInput>) => (\n <DateRangePickerInput type=\"end\" {...props} ref={ref} />\n ),\n);\n"]}
@@ -18,9 +18,9 @@ export interface DropdownProps extends Pick<AriaAttributes, 'aria-label' | 'aria
18
18
  disablePortal?: boolean;
19
19
  /** Блокирует компонент. */
20
20
  disabled?: boolean;
21
- /** Показывает состояние ошибки. */
21
+ /** Переводит кнопку-меню в состояние ошибки. */
22
22
  error?: boolean;
23
- /** Показывает состояние предупреждения. */
23
+ /** Переводит кнопку-меню в состояние предупреждения. */
24
24
  warning?: boolean;
25
25
  /** Ограничивает максимальную высоту раскрывающегося меню. */
26
26
  maxMenuHeight?: number;
@@ -36,29 +36,24 @@ export interface DropdownProps extends Pick<AriaAttributes, 'aria-label' | 'aria
36
36
  use?: ButtonUse;
37
37
  /** @ignore */
38
38
  corners?: React.CSSProperties;
39
- /** Вызывается при закрытии раскрывающегося меню. */
39
+ /** Событие закрытия раскрывающегося меню. */
40
40
  onClose?: () => void;
41
- /** Вызывается при открытии раскрывающегося меню. */
41
+ /** Событие открытия раскрывающегося меню. */
42
42
  onOpen?: () => void;
43
- /** Вызывается при наведении курсора (событие `onmouseenter`). Разницу с `onMouseOver` смотрите в [документации](https://learn.javascript.ru/mousemove-mouseover-mouseout-mouseenter-mouseleave). */
43
+ /** Событие наведения курсора (событие `onmouseenter`). Разницу с `onMouseOver` смотрите в [документации](https://learn.javascript.ru/mousemove-mouseover-mouseout-mouseenter-mouseleave). */
44
44
  onMouseEnter?: (event: React.MouseEvent<HTMLElement>) => void;
45
- /** Вызывается при уходе курсора с элемента (событие `onmouseleave`). */
45
+ /** Событие ухода курсора с элемента (событие `onmouseleave`). */
46
46
  onMouseLeave?: (event: React.MouseEvent<HTMLElement>) => void;
47
- /** Вызывается при движении курсора над элементом (событие `onmouseover`). */
47
+ /** Событие движения курсора над элементом (событие `onmouseover`). */
48
48
  onMouseOver?: (event: React.MouseEvent<HTMLElement>) => void;
49
+ /** Отключает выравнивание текста пунктов меню относительно иконок в других пунктах. */
50
+ preventIconsOffset?: boolean;
49
51
  }
50
52
  export declare const DropdownDataTids: {
51
53
  readonly root: "Dropdown__root";
52
54
  };
53
55
  /**
54
- * Кнопка-меню `Dropdown` открывает раскрывающееся меню с командами, объединенными по смыслу.
55
- *
56
- * Используйте кнопку-меню:
57
- * * когда не хватает места для нескольких кнопок.
58
- * * когда названия действий очень длинные.
59
- * * когда действия редко используются или объединены по смыслу.
60
- *
61
- * Не используйте `Dropdown` для выбора значения из набора вариантов. В таком случае воспользуйтесь компонентом `Select`.
56
+ * Кнопка-меню содержит несколько команд, объединенных по смыслу..
62
57
  */
63
58
  export declare class Dropdown extends React.Component<DropdownProps> {
64
59
  static __KONTUR_REACT_UI__: string;
@@ -71,6 +71,7 @@ var PASS_PROPS = {
71
71
  menuPos: true,
72
72
  corners: true,
73
73
  id: true,
74
+ preventIconsOffset: true,
74
75
  'aria-describedby': true,
75
76
  'aria-label': true,
76
77
  };
@@ -78,14 +79,7 @@ export var DropdownDataTids = {
78
79
  root: 'Dropdown__root',
79
80
  };
80
81
  /**
81
- * Кнопка-меню `Dropdown` открывает раскрывающееся меню с командами, объединенными по смыслу.
82
- *
83
- * Используйте кнопку-меню:
84
- * * когда не хватает места для нескольких кнопок.
85
- * * когда названия действий очень длинные.
86
- * * когда действия редко используются или объединены по смыслу.
87
- *
88
- * Не используйте `Dropdown` для выбора значения из набора вариантов. В таком случае воспользуйтесь компонентом `Select`.
82
+ * Кнопка-меню содержит несколько команд, объединенных по смыслу..
89
83
  */
90
84
  var Dropdown = /** @class */ (function (_super) {
91
85
  __extends(Dropdown, _super);
@@ -1 +1 @@
1
- {"version":3,"file":"Dropdown.js","sourceRoot":"","sources":["../../../components/Dropdown/Dropdown.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAIjE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,IAAM,UAAU,GAAG;IACjB,aAAa,EAAE,IAAI;IACnB,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;IACd,aAAa,EAAE,IAAI;IACnB,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,aAAa,EAAE,IAAI;IACnB,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;IAClB,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;IACb,EAAE,EAAE,IAAI;IACR,kBAAkB,EAAE,IAAI;IACxB,YAAY,EAAE,IAAI;CACnB,CAAC;AAsEF,MAAM,CAAC,IAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,gBAAgB;CACd,CAAC;AAEX;;;;;;;;;GASG;AAEH;IAA8B,4BAA8B;IAA5D;;QAwBS,gBAAU,GAAG;YAClB,IAAM,KAA6B,KAAI,CAAC,KAAK,EAArC,OAAO,aAAA,EAAE,IAAI,UAAA,EAAK,IAAI,cAAxB,mBAA0B,CAAa,CAAC;YAC9C,IAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAC,IAAI,IAAK,OAAA,IAAI,EAAJ,CAAI,CAAC,IAAI,EAAE,CAAC;YAE5E,OAAO,CACL,oBAAC,aAAa,aAAC,WAAW,EAAE,KAAI,CAAC,WAAW,IAAM,IAAI;gBACpD,oBAAC,MAAM,yBACK,gBAAgB,CAAC,IAAI,EAC/B,GAAG,EAAE,KAAI,CAAC,UAAU,IAChB,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,IACjC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,IAAI,EACX,WAAW,EAAE,WAAW,IACxB,CACY,CACjB,CAAC;QACJ,CAAC,CAAC;QAoBM,gBAAU,GAAG,UAAC,OAA2B;YAC/C,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACzB,CAAC,CAAC;;IACJ,CAAC;IAnDQ,yBAAM,GAAb;QAAA,iBASC;QARC,OAAO,CACL,oBAAC,YAAY,CAAC,QAAQ,QACnB,UAAC,KAAK;YACL,KAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACrC,OAAO,oBAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAI,CAAC,KAAK,IAAG,KAAI,CAAC,UAAU,EAAE,CAAyB,CAAC;QAC/F,CAAC,CACqB,CACzB,CAAC;IACJ,CAAC;IAqBD;;OAEG;IACI,uBAAI,GAAX;QACE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED;;OAEG;IACI,wBAAK,GAAZ;QACE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IA1Da,4BAAmB,GAAG,UAAU,AAAb,CAAc;IACjC,oBAAW,GAAG,UAAU,AAAb,CAAc;IAEzB,eAAM,GAAG,UAAU,AAAb,CAAc;IACpB,iBAAQ,GAAG,QAAQ,AAAX,CAAY;IACpB,kBAAS,GAAG,aAAa,AAAhB,CAAiB;IAN7B,QAAQ;QADpB,QAAQ;OACI,QAAQ,CAgEpB;IAAD,eAAC;CAAA,AAhED,CAA8B,KAAK,CAAC,SAAS,GAgE5C;SAhEY,QAAQ;AAkErB,SAAS,WAAW,CAAC,KAAU;IAC7B,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import type { AriaAttributes, HTMLAttributes, JSX } from 'react';\nimport React from 'react';\n\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport type { CommonProps } from '../../internal/CommonWrapper/types.js';\nimport { filterProps } from '../../lib/filterProps.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode//rootNodeDecorator.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport type { SizeProp } from '../../lib/types/props.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport type { ButtonUse } from '../Button/index.js';\nimport { MenuHeader } from '../MenuHeader/index.js';\nimport { MenuItem } from '../MenuItem/index.js';\nimport { MenuSeparator } from '../MenuSeparator/index.js';\nimport { Select } from '../Select/index.js';\nimport { getDropdownTheme } from './getDropdownTheme.js';\n\nconst PASS_PROPS = {\n _renderButton: true,\n error: true,\n disabled: true,\n disablePortal: true,\n menuAlign: true,\n menuWidth: true,\n maxMenuHeight: true,\n use: true,\n size: true,\n warning: true,\n width: true,\n onOpen: true,\n onClose: true,\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n menuPos: true,\n corners: true,\n id: true,\n 'aria-describedby': true,\n 'aria-label': true,\n};\n\nexport interface DropdownProps\n extends\n Pick<AriaAttributes, 'aria-label' | 'aria-describedby'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n CommonProps {\n /** Текст кнопки-меню. */\n caption: React.ReactNode;\n\n /** Добавляет иконку слева от текста кнопки. */\n icon?: React.ReactElement;\n\n /** Ширина кнопки-меню. Если `menuWidth` не задан, такая же минимальная ширина применяется к раскрывающемуся меню. */\n width?: React.CSSProperties['width'];\n\n /** @ignore */\n _renderButton?: (params: any) => JSX.Element;\n\n /** Отключает использование портала. */\n disablePortal?: boolean;\n\n /** Блокирует компонент. */\n disabled?: boolean;\n\n /** Показывает состояние ошибки. */\n error?: boolean;\n\n /** Показывает состояние предупреждения. */\n warning?: boolean;\n\n /** Ограничивает максимальную высоту раскрывающегося меню. */\n maxMenuHeight?: number;\n\n /** Фиксирует положение раскрывающегося меню относительно кнопки-меню. */\n menuPos?: 'top' | 'bottom';\n\n /** Выравнивает раскрывающееся меню относительно кнопки-меню. */\n menuAlign?: 'left' | 'right';\n\n /** Ширина раскрывающегося меню. */\n menuWidth?: number | string;\n\n /** Размер кнопки-меню. */\n size?: SizeProp;\n\n /** Визуальный стиль кнопки-меню. */\n use?: ButtonUse;\n\n /** @ignore */\n corners?: React.CSSProperties;\n\n /** Вызывается при закрытии раскрывающегося меню. */\n onClose?: () => void;\n\n /** Вызывается при открытии раскрывающегося меню. */\n onOpen?: () => void;\n\n /** Вызывается при наведении курсора (событие `onmouseenter`). Разницу с `onMouseOver` смотрите в [документации](https://learn.javascript.ru/mousemove-mouseover-mouseout-mouseenter-mouseleave). */\n onMouseEnter?: (event: React.MouseEvent<HTMLElement>) => void;\n\n /** Вызывается при уходе курсора с элемента (событие `onmouseleave`). */\n onMouseLeave?: (event: React.MouseEvent<HTMLElement>) => void;\n\n /** Вызывается при движении курсора над элементом (событие `onmouseover`). */\n onMouseOver?: (event: React.MouseEvent<HTMLElement>) => void;\n}\n\ntype DropdownSelectType = Select<React.ReactNode, React.ReactNode>;\n\nexport const DropdownDataTids = {\n root: 'Dropdown__root',\n} as const;\n\n/**\n * Кнопка-меню `Dropdown` открывает раскрывающееся меню с командами, объединенными по смыслу.\n *\n * Используйте кнопку-меню:\n * * когда не хватает места для нескольких кнопок.\n * * когда названия действий очень длинные.\n * * когда действия редко используются или объединены по смыслу.\n *\n * Не используйте `Dropdown` для выбора значения из набора вариантов. В таком случае воспользуйтесь компонентом `Select`.\n */\n@rootNode\nexport class Dropdown extends React.Component<DropdownProps> {\n public static __KONTUR_REACT_UI__ = 'Dropdown';\n public static displayName = 'Dropdown';\n\n public static Header = MenuHeader;\n public static MenuItem = MenuItem;\n public static Separator = MenuSeparator;\n\n private _select: Nullable<DropdownSelectType>;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private theme!: Theme;\n\n public render(): React.JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getDropdownTheme(theme);\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain = (): React.JSX.Element => {\n const { caption, icon, ...rest } = this.props;\n const items = React.Children.map(this.props.children, (item) => item) || [];\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...rest}>\n <Select<React.ReactNode, React.ReactNode>\n data-tid={DropdownDataTids.root}\n ref={this._refSelect}\n {...filterProps(rest, PASS_PROPS)}\n value={caption}\n items={items}\n _icon={icon}\n renderValue={renderValue}\n />\n </CommonWrapper>\n );\n };\n\n /**\n * @public\n */\n public open(): void {\n if (this._select) {\n this._select.open();\n }\n }\n\n /**\n * @public\n */\n public close(): void {\n if (this._select) {\n this._select.close();\n }\n }\n\n private _refSelect = (element: DropdownSelectType): void => {\n this._select = element;\n };\n}\n\nfunction renderValue(value: any) {\n return value;\n}\n"]}
1
+ {"version":3,"file":"Dropdown.js","sourceRoot":"","sources":["../../../components/Dropdown/Dropdown.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { AriaAttributes, HTMLAttributes, JSX } from 'react';\nimport React from 'react';\n\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport type { CommonProps } from '../../internal/CommonWrapper/types.js';\nimport { filterProps } from '../../lib/filterProps.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode//rootNodeDecorator.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport type { SizeProp } from '../../lib/types/props.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport type { ButtonUse } from '../Button/index.js';\nimport { MenuHeader } from '../MenuHeader/index.js';\nimport { MenuItem } from '../MenuItem/index.js';\nimport { MenuSeparator } from '../MenuSeparator/index.js';\nimport { Select } from '../Select/index.js';\nimport { getDropdownTheme } from './getDropdownTheme.js';\n\nconst PASS_PROPS = {\n _renderButton: true,\n error: true,\n disabled: true,\n disablePortal: true,\n menuAlign: true,\n menuWidth: true,\n maxMenuHeight: true,\n use: true,\n size: true,\n warning: true,\n width: true,\n onOpen: true,\n onClose: true,\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n menuPos: true,\n corners: true,\n id: true,\n preventIconsOffset: true,\n 'aria-describedby': true,\n 'aria-label': true,\n};\n\nexport interface DropdownProps\n extends\n Pick<AriaAttributes, 'aria-label' | 'aria-describedby'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n CommonProps {\n /** Текст кнопки-меню. */\n caption: React.ReactNode;\n\n /** Добавляет иконку слева от текста кнопки. */\n icon?: React.ReactElement;\n\n /** Ширина кнопки-меню. Если `menuWidth` не задан, такая же минимальная ширина применяется к раскрывающемуся меню. */\n width?: React.CSSProperties['width'];\n\n /** @ignore */\n _renderButton?: (params: any) => JSX.Element;\n\n /** Отключает использование портала. */\n disablePortal?: boolean;\n\n /** Блокирует компонент. */\n disabled?: boolean;\n\n /** Переводит кнопку-меню в состояние ошибки. */\n error?: boolean;\n\n /** Переводит кнопку-меню в состояние предупреждения. */\n warning?: boolean;\n\n /** Ограничивает максимальную высоту раскрывающегося меню. */\n maxMenuHeight?: number;\n\n /** Фиксирует положение раскрывающегося меню относительно кнопки-меню. */\n menuPos?: 'top' | 'bottom';\n\n /** Выравнивает раскрывающееся меню относительно кнопки-меню. */\n menuAlign?: 'left' | 'right';\n\n /** Ширина раскрывающегося меню. */\n menuWidth?: number | string;\n\n /** Размер кнопки-меню. */\n size?: SizeProp;\n\n /** Визуальный стиль кнопки-меню. */\n use?: ButtonUse;\n\n /** @ignore */\n corners?: React.CSSProperties;\n\n /** Событие закрытия раскрывающегося меню. */\n onClose?: () => void;\n\n /** Событие открытия раскрывающегося меню. */\n onOpen?: () => void;\n\n /** Событие наведения курсора (событие `onmouseenter`). Разницу с `onMouseOver` смотрите в [документации](https://learn.javascript.ru/mousemove-mouseover-mouseout-mouseenter-mouseleave). */\n onMouseEnter?: (event: React.MouseEvent<HTMLElement>) => void;\n\n /** Событие ухода курсора с элемента (событие `onmouseleave`). */\n onMouseLeave?: (event: React.MouseEvent<HTMLElement>) => void;\n\n /** Событие движения курсора над элементом (событие `onmouseover`). */\n onMouseOver?: (event: React.MouseEvent<HTMLElement>) => void;\n\n /** Отключает выравнивание текста пунктов меню относительно иконок в других пунктах. */\n preventIconsOffset?: boolean;\n}\n\ntype DropdownSelectType = Select<React.ReactNode, React.ReactNode>;\n\nexport const DropdownDataTids = {\n root: 'Dropdown__root',\n} as const;\n\n/**\n * Кнопка-меню содержит несколько команд, объединенных по смыслу..\n */\n@rootNode\nexport class Dropdown extends React.Component<DropdownProps> {\n public static __KONTUR_REACT_UI__ = 'Dropdown';\n public static displayName = 'Dropdown';\n\n public static Header = MenuHeader;\n public static MenuItem = MenuItem;\n public static Separator = MenuSeparator;\n\n private _select: Nullable<DropdownSelectType>;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private theme!: Theme;\n\n public render(): React.JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getDropdownTheme(theme);\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain = (): React.JSX.Element => {\n const { caption, icon, ...rest } = this.props;\n const items = React.Children.map(this.props.children, (item) => item) || [];\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...rest}>\n <Select<React.ReactNode, React.ReactNode>\n data-tid={DropdownDataTids.root}\n ref={this._refSelect}\n {...filterProps(rest, PASS_PROPS)}\n value={caption}\n items={items}\n _icon={icon}\n renderValue={renderValue}\n />\n </CommonWrapper>\n );\n };\n\n /**\n * @public\n */\n public open(): void {\n if (this._select) {\n this._select.open();\n }\n }\n\n /**\n * @public\n */\n public close(): void {\n if (this._select) {\n this._select.close();\n }\n }\n\n private _refSelect = (element: DropdownSelectType): void => {\n this._select = element;\n };\n}\n\nfunction renderValue(value: any) {\n return value;\n}\n"]}
@@ -5,42 +5,41 @@ import type { PopupPositionsType } from '../../internal/Popup/index.js';
5
5
  import type { PopupMenuProps } from '../../internal/PopupMenu/index.js';
6
6
  import type { TGetRootNode } from '../../lib/rootNode//rootNodeDecorator.js';
7
7
  export interface DropdownMenuProps extends Pick<AriaAttributes, 'aria-label'>, Pick<HTMLAttributes<HTMLElement>, 'id'>, Pick<PopupMenuProps, 'onOpen' | 'onClose' | 'popupMenuId' | 'preventIconsOffset'>, CommonProps {
8
- /** Максимальная высота меню */
8
+ /** Максимальная высота меню. */
9
9
  menuMaxHeight?: React.CSSProperties['maxWidth'];
10
- /** Ширина меню */
10
+ /** Ширина раскрывающегося меню. */
11
11
  menuWidth?: React.CSSProperties['width'];
12
- /** Ширина caption */
12
+ /** Ширина контейнера с `caption`. */
13
13
  width?: React.CSSProperties['width'];
14
14
  /**
15
- * Элемент или функция возвращающая элемент,
16
- * если передана, используется вместо `caption`,
17
- * в таком случае управлять открытием и закрытием меню
18
- * придется в этой функции
15
+ * Элемент или render-функция, по которым открывается меню.
16
+ *
17
+ * Если передать функцию, ей нужно самостоятельно вызвать `openMenu`, `closeMenu` или `toggleMenu`.
19
18
  */
20
19
  caption: PopupMenuProps['caption'];
21
20
  /**
22
- * Произвольный элемент, который будет отрендерен в шапке меню.
21
+ * Рендерит произвольный элемент в шапке меню.
23
22
  *
24
- * _Примечание_: контрол MenuHeader передаётся только в `children` меню-контролов. Не стоит передавать `MenuHeader` в `header`.
23
+ * _Примечание_: `MenuHeader` передается только в `children` меню-контролов. Не передавайте `MenuHeader` в `header`.
25
24
  */
26
25
  header?: React.ReactNode;
27
26
  /**
28
- * Произвольный элемент, который будет отрендерен в подвале меню.
27
+ * Рендерит произвольный элемент в подвале меню.
29
28
  *
30
- * Перед элементом переданным в `footer` будет отрендерен MenuSeparator.
29
+ * Перед элементом из `footer` автоматически добавляется `MenuSeparator`.
31
30
  */
32
31
  footer?: React.ReactNode;
33
32
  /**
34
- * Список позиций доступных для расположения выпадашки относительно `caption`.
33
+ * Список допустимых положений раскрывающегося меню относительно `caption`.
35
34
  *
36
- * Если во всех позициях выпадашка вылезает за пределы `viewport`, будет использована первая из этого списка.
35
+ * Если меню выходит за пределы `viewport` во всех положениях, будет использовано первое положение из списка.
37
36
  *
38
37
  * **Возможные значения**: `top left`, `top center`, `top right`, `right top`, `right middle`, `right bottom`, `bottom left`, `bottom center`, `bottom right`, `left top`, `left middle`, `left bottom`
39
38
  * @default ['bottom left', 'bottom right', 'top left', 'top right']
40
39
  */
41
40
  positions?: PopupPositionsType[];
42
41
  /**
43
- * Не показывать анимацию
42
+ * Отключает анимацию раскрывающегося меню.
44
43
  */
45
44
  disableAnimations?: boolean;
46
45
  /** @ignore */
@@ -48,7 +47,10 @@ export interface DropdownMenuProps extends Pick<AriaAttributes, 'aria-label'>, P
48
47
  }
49
48
  type DefaultProps = Required<Pick<DropdownMenuProps, 'disableAnimations' | 'positions'>>;
50
49
  /**
51
- * Выпадающее меню `DropdownMenu` раскрывается по клику на переданный в `caption` элемент.
50
+ * Раскрывающееся меню.
51
+ *
52
+ * Раскрывается по клику на переданный в `caption` элемент.
53
+ * Поддерживает настройку `header`, `footer`, позиций открытия `positions` и другие настройки внешнего вида.
52
54
  */
53
55
  export declare class DropdownMenu extends React.Component<DropdownMenuProps> {
54
56
  static __KONTUR_REACT_UI__: string;
@@ -40,7 +40,10 @@ import { rootNode } from '../../lib/rootNode/index.js';
40
40
  import { ThemeContext } from '../../lib/theming/ThemeContext.js';
41
41
  import { getDropdownMenuTheme } from './getDropdownMenuTheme.js';
42
42
  /**
43
- * Выпадающее меню `DropdownMenu` раскрывается по клику на переданный в `caption` элемент.
43
+ * Раскрывающееся меню.
44
+ *
45
+ * Раскрывается по клику на переданный в `caption` элемент.
46
+ * Поддерживает настройку `header`, `footer`, позиций открытия `positions` и другие настройки внешнего вида.
44
47
  */
45
48
  var DropdownMenu = /** @class */ (function (_super) {
46
49
  __extends(DropdownMenu, _super);
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMenu.js","sourceRoot":"","sources":["../../../components/DropdownMenu/DropdownMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { AriaAttributes, HTMLAttributes } from 'react';\nimport React from 'react';\nimport warning from 'warning';\n\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport type { CommonProps } from '../../internal/CommonWrapper/types.js';\nimport type { PopupPositionsType } from '../../internal/Popup/index.js';\nimport { PopupMenu } from '../../internal/PopupMenu/index.js';\nimport type { PopupMenuProps } from '../../internal/PopupMenu/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { isTestEnv } from '../../lib/currentEnvironment.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode//rootNodeDecorator.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { getDropdownMenuTheme } from './getDropdownMenuTheme.js';\n\nexport interface DropdownMenuProps\n extends\n Pick<AriaAttributes, 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n Pick<PopupMenuProps, 'onOpen' | 'onClose' | 'popupMenuId' | 'preventIconsOffset'>,\n CommonProps {\n /** Максимальная высота меню */\n menuMaxHeight?: React.CSSProperties['maxWidth'];\n /** Ширина меню */\n menuWidth?: React.CSSProperties['width'];\n /** Ширина caption */\n width?: React.CSSProperties['width'];\n\n /**\n * Элемент или функция возвращающая элемент,\n * если передана, используется вместо `caption`,\n * в таком случае управлять открытием и закрытием меню\n * придется в этой функции\n */\n caption: PopupMenuProps['caption'];\n\n /**\n * Произвольный элемент, который будет отрендерен в шапке меню.\n *\n * _Примечание_: контрол MenuHeader передаётся только в `children` меню-контролов. Не стоит передавать `MenuHeader` в `header`.\n */\n header?: React.ReactNode;\n /**\n * Произвольный элемент, который будет отрендерен в подвале меню.\n *\n * Перед элементом переданным в `footer` будет отрендерен MenuSeparator.\n */\n footer?: React.ReactNode;\n /**\n * Список позиций доступных для расположения выпадашки относительно `caption`.\n *\n * Если во всех позициях выпадашка вылезает за пределы `viewport`, будет использована первая из этого списка.\n *\n * **Возможные значения**: `top left`, `top center`, `top right`, `right top`, `right middle`, `right bottom`, `bottom left`, `bottom center`, `bottom right`, `left top`, `left middle`, `left bottom`\n * @default ['bottom left', 'bottom right', 'top left', 'top right']\n */\n positions?: PopupPositionsType[];\n\n /**\n * Не показывать анимацию\n */\n disableAnimations?: boolean;\n\n /** @ignore */\n corners?: React.CSSProperties;\n}\n\ntype DefaultProps = Required<Pick<DropdownMenuProps, 'disableAnimations' | 'positions'>>;\n\n/**\n * Выпадающее меню `DropdownMenu` раскрывается по клику на переданный в `caption` элемент.\n */\n@rootNode\nexport class DropdownMenu extends React.Component<DropdownMenuProps> {\n public static __KONTUR_REACT_UI__ = 'DropdownMenu';\n public static displayName = 'DropdownMenu';\n\n public static defaultProps: DefaultProps = {\n disableAnimations: isTestEnv,\n positions: ['bottom left', 'bottom right', 'top left', 'top right'],\n };\n\n private getProps = createPropsGetter(DropdownMenu.defaultProps);\n\n private popupMenu: Nullable<PopupMenu> = null;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n constructor(props: DropdownMenuProps) {\n super(props);\n\n if (!props.caption) {\n warning(false, 'Prop \"caption\" is required!!!');\n }\n }\n\n public render(): React.JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n return <ThemeContext.Provider value={getDropdownMenuTheme(theme)}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain(): React.JSX.Element | null {\n if (!this.props.caption) {\n return null;\n }\n const { positions, disableAnimations } = this.getProps();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <PopupMenu\n id={this.props.id}\n aria-label={this.props['aria-label']}\n ref={this.refPopupMenu}\n caption={this.props.caption}\n menuMaxHeight={this.props.menuMaxHeight}\n menuWidth={this.props.menuWidth}\n preventIconsOffset={this.props.preventIconsOffset}\n popupHasPin={false}\n positions={positions}\n disableAnimations={disableAnimations}\n header={this.props.header}\n footer={this.props.footer}\n width={this.props.width}\n corners={this.props.corners}\n onClose={this.props.onClose}\n onOpen={this.props.onOpen}\n popupMenuId={this.props.popupMenuId}\n >\n {this.props.children}\n </PopupMenu>\n </CommonWrapper>\n );\n }\n\n public open = (): void => {\n if (this.popupMenu) {\n this.popupMenu.open();\n }\n };\n\n public close = (): void => {\n if (this.popupMenu) {\n this.popupMenu.close();\n }\n };\n\n private refPopupMenu = (ref: Nullable<PopupMenu>) => {\n this.popupMenu = ref;\n };\n}\n"]}
1
+ {"version":3,"file":"DropdownMenu.js","sourceRoot":"","sources":["../../../components/DropdownMenu/DropdownMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { AriaAttributes, HTMLAttributes } from 'react';\nimport React from 'react';\nimport warning from 'warning';\n\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport type { CommonProps } from '../../internal/CommonWrapper/types.js';\nimport type { PopupPositionsType } from '../../internal/Popup/index.js';\nimport { PopupMenu } from '../../internal/PopupMenu/index.js';\nimport type { PopupMenuProps } from '../../internal/PopupMenu/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { isTestEnv } from '../../lib/currentEnvironment.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode//rootNodeDecorator.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { getDropdownMenuTheme } from './getDropdownMenuTheme.js';\n\nexport interface DropdownMenuProps\n extends\n Pick<AriaAttributes, 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n Pick<PopupMenuProps, 'onOpen' | 'onClose' | 'popupMenuId' | 'preventIconsOffset'>,\n CommonProps {\n /** Максимальная высота меню. */\n menuMaxHeight?: React.CSSProperties['maxWidth'];\n /** Ширина раскрывающегося меню. */\n menuWidth?: React.CSSProperties['width'];\n /** Ширина контейнера с `caption`. */\n width?: React.CSSProperties['width'];\n\n /**\n * Элемент или render-функция, по которым открывается меню.\n *\n * Если передать функцию, ей нужно самостоятельно вызвать `openMenu`, `closeMenu` или `toggleMenu`.\n */\n caption: PopupMenuProps['caption'];\n\n /**\n * Рендерит произвольный элемент в шапке меню.\n *\n * _Примечание_: `MenuHeader` передается только в `children` меню-контролов. Не передавайте `MenuHeader` в `header`.\n */\n header?: React.ReactNode;\n /**\n * Рендерит произвольный элемент в подвале меню.\n *\n * Перед элементом из `footer` автоматически добавляется `MenuSeparator`.\n */\n footer?: React.ReactNode;\n /**\n * Список допустимых положений раскрывающегося меню относительно `caption`.\n *\n * Если меню выходит за пределы `viewport` во всех положениях, будет использовано первое положение из списка.\n *\n * **Возможные значения**: `top left`, `top center`, `top right`, `right top`, `right middle`, `right bottom`, `bottom left`, `bottom center`, `bottom right`, `left top`, `left middle`, `left bottom`\n * @default ['bottom left', 'bottom right', 'top left', 'top right']\n */\n positions?: PopupPositionsType[];\n\n /**\n * Отключает анимацию раскрывающегося меню.\n */\n disableAnimations?: boolean;\n\n /** @ignore */\n corners?: React.CSSProperties;\n}\n\ntype DefaultProps = Required<Pick<DropdownMenuProps, 'disableAnimations' | 'positions'>>;\n\n/**\n * Раскрывающееся меню.\n *\n * Раскрывается по клику на переданный в `caption` элемент.\n * Поддерживает настройку `header`, `footer`, позиций открытия `positions` и другие настройки внешнего вида.\n */\n@rootNode\nexport class DropdownMenu extends React.Component<DropdownMenuProps> {\n public static __KONTUR_REACT_UI__ = 'DropdownMenu';\n public static displayName = 'DropdownMenu';\n\n public static defaultProps: DefaultProps = {\n disableAnimations: isTestEnv,\n positions: ['bottom left', 'bottom right', 'top left', 'top right'],\n };\n\n private getProps = createPropsGetter(DropdownMenu.defaultProps);\n\n private popupMenu: Nullable<PopupMenu> = null;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n constructor(props: DropdownMenuProps) {\n super(props);\n\n if (!props.caption) {\n warning(false, 'Prop \"caption\" is required!!!');\n }\n }\n\n public render(): React.JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n return <ThemeContext.Provider value={getDropdownMenuTheme(theme)}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain(): React.JSX.Element | null {\n if (!this.props.caption) {\n return null;\n }\n const { positions, disableAnimations } = this.getProps();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <PopupMenu\n id={this.props.id}\n aria-label={this.props['aria-label']}\n ref={this.refPopupMenu}\n caption={this.props.caption}\n menuMaxHeight={this.props.menuMaxHeight}\n menuWidth={this.props.menuWidth}\n preventIconsOffset={this.props.preventIconsOffset}\n popupHasPin={false}\n positions={positions}\n disableAnimations={disableAnimations}\n header={this.props.header}\n footer={this.props.footer}\n width={this.props.width}\n corners={this.props.corners}\n onClose={this.props.onClose}\n onOpen={this.props.onOpen}\n popupMenuId={this.props.popupMenuId}\n >\n {this.props.children}\n </PopupMenu>\n </CommonWrapper>\n );\n }\n\n public open = (): void => {\n if (this.popupMenu) {\n this.popupMenu.open();\n }\n };\n\n public close = (): void => {\n if (this.popupMenu) {\n this.popupMenu.close();\n }\n };\n\n private refPopupMenu = (ref: Nullable<PopupMenu>) => {\n this.popupMenu = ref;\n };\n}\n"]}