@skbkontur/react-ui 6.0.6 → 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.
- package/components/Calendar/Calendar.d.ts +14 -14
- package/components/Calendar/Calendar.js +2 -2
- package/components/Calendar/Calendar.js.map +1 -1
- package/components/Calendar/CalendarDay.d.ts +2 -2
- package/components/Calendar/CalendarDay.js +1 -1
- package/components/Calendar/CalendarDay.js.map +1 -1
- package/components/Center/Center.d.ts +3 -3
- package/components/Center/Center.js +2 -2
- package/components/Center/Center.js.map +1 -1
- package/components/Checkbox/Checkbox.d.ts +11 -14
- package/components/Checkbox/Checkbox.js +3 -6
- package/components/Checkbox/Checkbox.js.map +1 -1
- package/components/ComboBox/ComboBox.d.ts +3 -3
- package/components/ComboBox/ComboBox.js.map +1 -1
- package/components/DateInput/DateInput.d.ts +15 -15
- package/components/DateInput/DateInput.js +1 -1
- package/components/DateInput/DateInput.js.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +14 -16
- package/components/DatePicker/DatePicker.js +4 -5
- package/components/DatePicker/DatePicker.js.map +1 -1
- package/components/DateRangePicker/DateRangePicker.d.ts +4 -3
- package/components/DateRangePicker/DateRangePicker.js +5 -3
- package/components/DateRangePicker/DateRangePicker.js.map +1 -1
- package/components/DateRangePicker/DateRangePickerInput.js +6 -4
- package/components/DateRangePicker/DateRangePickerInput.js.map +1 -1
- package/components/Dropdown/Dropdown.d.ts +8 -15
- package/components/Dropdown/Dropdown.js +1 -8
- package/components/Dropdown/Dropdown.js.map +1 -1
- package/components/DropdownMenu/DropdownMenu.d.ts +2 -1
- package/components/DropdownMenu/DropdownMenu.js +2 -1
- package/components/DropdownMenu/DropdownMenu.js.map +1 -1
- package/components/FileUploader/FileUploader.d.ts +4 -6
- package/components/FileUploader/FileUploader.js +1 -3
- package/components/FileUploader/FileUploader.js.map +1 -1
- package/components/FileUploader/FileUploaderFile.d.ts +3 -3
- package/components/FileUploader/FileUploaderFile.js +1 -1
- package/components/FileUploader/FileUploaderFile.js.map +1 -1
- package/components/Input/Input.d.ts +2 -2
- package/components/Input/Input.js.map +1 -1
- package/components/MenuFooter/MenuFooter.d.ts +1 -1
- package/components/MenuFooter/MenuFooter.js +1 -1
- package/components/MenuFooter/MenuFooter.js.map +1 -1
- package/components/MenuHeader/MenuHeader.d.ts +2 -2
- package/components/MenuHeader/MenuHeader.js +1 -1
- package/components/MenuHeader/MenuHeader.js.map +1 -1
- package/components/MenuSeparator/MenuSeparator.d.ts +1 -1
- package/components/MenuSeparator/MenuSeparator.js +1 -1
- package/components/MenuSeparator/MenuSeparator.js.map +1 -1
- package/components/MiniModal/MiniModal.d.ts +1 -1
- package/components/MiniModal/MiniModal.js +1 -1
- package/components/MiniModal/MiniModal.js.map +1 -1
- package/components/MiniModal/MiniModalBody.d.ts +1 -1
- package/components/MiniModal/MiniModalBody.js +1 -1
- package/components/MiniModal/MiniModalBody.js.map +1 -1
- package/components/MiniModal/MiniModalFooter.d.ts +1 -1
- package/components/MiniModal/MiniModalFooter.js +1 -1
- package/components/MiniModal/MiniModalFooter.js.map +1 -1
- package/components/MiniModal/MiniModalHeader.d.ts +1 -1
- package/components/MiniModal/MiniModalHeader.js +1 -1
- package/components/MiniModal/MiniModalHeader.js.map +1 -1
- package/components/Paging/Paging.d.ts +2 -2
- package/components/Paging/Paging.js.map +1 -1
- package/components/Radio/Radio.d.ts +7 -7
- package/components/Radio/Radio.js.map +1 -1
- package/components/RadioGroup/RadioGroup.d.ts +2 -2
- package/components/RadioGroup/RadioGroup.js.map +1 -1
- package/components/Select/Select.d.ts +4 -4
- package/components/Select/Select.js.map +1 -1
- package/components/SingleToast/SingleToast.d.ts +1 -6
- package/components/SingleToast/SingleToast.js +1 -6
- package/components/SingleToast/SingleToast.js.map +1 -1
- package/components/Spinner/Spinner.d.ts +1 -1
- package/components/Spinner/Spinner.js +1 -1
- package/components/Spinner/Spinner.js.map +1 -1
- package/components/Sticky/Sticky.d.ts +0 -4
- package/components/Sticky/Sticky.js +0 -4
- package/components/Sticky/Sticky.js.map +1 -1
- package/components/Switcher/Switcher.d.ts +8 -10
- package/components/Switcher/Switcher.js +1 -3
- package/components/Switcher/Switcher.js.map +1 -1
- package/components/Tabs/Indicator.styles.d.ts +0 -1
- package/components/Tabs/Indicator.styles.js +1 -4
- package/components/Tabs/Indicator.styles.js.map +1 -1
- package/components/TimePicker/TimeClockIcon.d.ts +3 -0
- package/components/TimePicker/TimeClockIcon.js +11 -0
- package/components/TimePicker/TimeClockIcon.js.map +1 -0
- package/components/TimePicker/TimeFragmentsView.d.ts +15 -0
- package/components/TimePicker/TimeFragmentsView.js +72 -0
- package/components/TimePicker/TimeFragmentsView.js.map +1 -0
- package/components/TimePicker/TimeFragmentsView.styles.d.ts +12 -0
- package/components/TimePicker/TimeFragmentsView.styles.js +43 -0
- package/components/TimePicker/TimeFragmentsView.styles.js.map +1 -0
- package/components/TimePicker/TimeInput.d.ts +23 -0
- package/components/TimePicker/TimeInput.js +86 -0
- package/components/TimePicker/TimeInput.js.map +1 -0
- package/components/TimePicker/TimePicker.d.ts +27 -0
- package/components/TimePicker/TimePicker.js +351 -0
- package/components/TimePicker/TimePicker.js.map +1 -0
- package/components/TimePicker/TimePicker.styles.d.ts +12 -0
- package/components/TimePicker/TimePicker.styles.js +39 -0
- package/components/TimePicker/TimePicker.styles.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.constants.d.ts +19 -0
- package/components/TimePicker/helpers/TimePicker.constants.js +42 -0
- package/components/TimePicker/helpers/TimePicker.constants.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.editing.d.ts +6 -0
- package/components/TimePicker/helpers/TimePicker.editing.js +77 -0
- package/components/TimePicker/helpers/TimePicker.editing.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.layout.d.ts +7 -0
- package/components/TimePicker/helpers/TimePicker.layout.js +17 -0
- package/components/TimePicker/helpers/TimePicker.layout.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.selection.d.ts +7 -0
- package/components/TimePicker/helpers/TimePicker.selection.js +51 -0
- package/components/TimePicker/helpers/TimePicker.selection.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.shared.d.ts +24 -0
- package/components/TimePicker/helpers/TimePicker.shared.js +50 -0
- package/components/TimePicker/helpers/TimePicker.shared.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.value.d.ts +10 -0
- package/components/TimePicker/helpers/TimePicker.value.js +47 -0
- package/components/TimePicker/helpers/TimePicker.value.js.map +1 -0
- package/components/TimePicker/helpers/scrollSelectedSlotIntoView.d.ts +1 -0
- package/components/TimePicker/helpers/scrollSelectedSlotIntoView.js +21 -0
- package/components/TimePicker/helpers/scrollSelectedSlotIntoView.js.map +1 -0
- package/components/TimePicker/hooks/useTimePickerDropdown.d.ts +17 -0
- package/components/TimePicker/hooks/useTimePickerDropdown.js +62 -0
- package/components/TimePicker/hooks/useTimePickerDropdown.js.map +1 -0
- package/components/TimePicker/hooks/useTimePickerSelection.d.ts +15 -0
- package/components/TimePicker/hooks/useTimePickerSelection.js +43 -0
- package/components/TimePicker/hooks/useTimePickerSelection.js.map +1 -0
- package/components/TimePicker/hooks/useTimePickerValue.d.ts +18 -0
- package/components/TimePicker/hooks/useTimePickerValue.js +47 -0
- package/components/TimePicker/hooks/useTimePickerValue.js.map +1 -0
- package/components/TimePicker/index.d.ts +2 -0
- package/components/TimePicker/index.js +2 -0
- package/components/TimePicker/index.js.map +1 -0
- package/components/Tooltip/Tooltip.d.ts +4 -4
- package/components/Tooltip/Tooltip.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/internal/icons2022/TimeClockIcon/TimeClockIcon16Light.d.ts +2 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon16Light.js +20 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon16Light.js.map +1 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon20Light.d.ts +2 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon20Light.js +20 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon20Light.js.map +1 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon24Regular.d.ts +2 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon24Regular.js +20 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon24Regular.js.map +1 -0
- package/internal/themes/BasicTheme.d.ts +3 -0
- package/internal/themes/BasicTheme.js +33 -0
- package/internal/themes/BasicTheme.js.map +1 -1
- package/package.json +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioGroup.js","sourceRoot":"","sources":["../../../components/RadioGroup/RadioGroup.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport invariant from 'invariant';\nimport type { AriaAttributes, JSX } from 'react';\nimport React from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes.js';\nimport { FocusTrap } from '../../internal/FocusTrap/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport { getRandomID, isNonNullable } from '../../lib/utils.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { Radio } from '../Radio/index.js';\nimport { Prevent } from './Prevent.js';\nimport { getStyles } from './RadioGroup.styles.js';\nimport { RadioGroupContext } from './RadioGroupContext.js';\nimport type { RadioGroupContextType } from './RadioGroupContext.js';\n\nexport interface RadioGroupProps<T = string | number> extends CommonProps {\n /** Значение по умолчанию. Должно быть одним из значений дочерних радиокнопок или значений из `items`. */\n defaultValue?: T;\n\n /** Значение группы радиокнопок. Должно быть одним из значений радиокнопок.\n * Если не указано, то компонент будет работать как неконтролируемый. */\n value?: T;\n\n /** Массив параметров радиокнопок. Может быть типа `Array<Value>` или `Array<[Value, Data]>`,\n * где тип `Value` — значение радиокнопки, а `Data` — значение которое будет использовано вторым параметром в `renderItem`.\n * Тип `Array<Value>` будет приведен к типу `Array<[Value, Value]>`.\n * Может быть использовано, если не передан `children`. */\n items?: T[] | Array<[T, React.ReactNode]>;\n\n /** Устанавливает атрибут `name` для дочерних радиокнопок. Если не указан, то сгенерируется случайное имя. */\n name?: string;\n\n /** Получает уникальный ключ по элементу.\n * @param item - элемент, по которому нужно получить ключ. */\n toKey?: (item: T) => string | number;\n\n /** Блокирует все радиокнопки в группе. */\n disabled?: boolean;\n\n /** Меняет визуальное отображение всех радиокнопок на состояние «предупреждение». */\n warning?: boolean;\n\n /** Меняет визуальное отображение всех радиокнопок на состояние «ошибка». */\n error?: boolean;\n\n /** Размещает радиокнопки в строку. Работает только со значениями, переданными через `items`, не работает с `children`. */\n inline?: boolean;\n\n /** Ширина радиогруппы. Работает только со значениями, переданными через `items`, не работает с `children`. */\n width?: React.CSSProperties['width'];\n\n /** Отрисовывает контент радиокнопки. Работает только со значениями, переданными через `items`, не работает с `children`.\n * @param {Value} itemValue - значение радиокнопки.\n * @param {Data} data - значение для отрисовки радиокнопки. */\n renderItem?: (itemValue: T, data: React.ReactNode) => React.ReactNode;\n\n /** @ignore */\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\n\n /** Событие изменения `value`. */\n onValueChange?: (value: T) => void;\n\n /** Событие потери радиогруппой фокуса. */\n onBlur?: (event: FocusEvent) => void;\n\n /** Событие ухода мышки с объекта (событие `onmouseleave`). */\n onMouseLeave?: () => any;\n\n /** Событие наведения мышкой (событие `onmouseover`). */\n onMouseOver?: () => any;\n\n /** Событие наведения мышкой (событие `onmouseenter`). Смотрите разницу с `onMouseOver` в [документации](https://learn.javascript.ru/mousemove-mouseover-mouseout-mouseenter-mouseleave) */\n onMouseEnter?: () => any;\n}\n\nexport interface RadioGroupState<T> {\n activeItem?: T;\n}\n\nexport const RadioGroupDataTids = {\n root: 'RadioGroup__root',\n} as const;\n\ntype DefaultProps = Required<Pick<RadioGroupProps<unknown>, 'renderItem'>>;\n\n/** Группирует радиокнопки. Контейнер для компонента [Radio](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_input-data-radio--docs). */\n@withRenderEnvironment\n@rootNode\nexport class RadioGroup<T> extends React.Component<RadioGroupProps<T>, RadioGroupState<T>> {\n public static __KONTUR_REACT_UI__ = 'RadioGroup';\n public static displayName = 'RadioGroup';\n\n public static defaultProps: DefaultProps = {\n renderItem,\n };\n\n public static Prevent = Prevent;\n\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private node: Nullable<HTMLSpanElement>;\n private name = getRandomID();\n private getProps = createPropsGetter(RadioGroup.defaultProps);\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n constructor(props: RadioGroupProps<T>) {\n super(props);\n\n this.state = {\n activeItem: this.props.defaultValue,\n };\n }\n\n private getRadioGroupContextValue = (): RadioGroupContextType<T> => {\n return {\n activeItem: this.getValue(),\n onSelect: this.handleSelect,\n name: this.getName(),\n disabled: this.props.disabled,\n error: this.props.error,\n warning: this.props.warning,\n };\n };\n\n public render(): React.JSX.Element {\n const {\n width,\n onMouseLeave,\n onMouseOver,\n onMouseEnter,\n onBlur,\n 'aria-describedby': ariaDescribedby,\n disabled,\n } = this.props;\n const style = {\n width: width ?? 'auto',\n };\n const handlers = {\n onMouseOver,\n onMouseEnter,\n onMouseLeave,\n };\n this.styles = getStyles(this.emotion);\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props} {...getVisualStateDataAttributes({ disabled })}>\n <FocusTrap onBlur={onBlur}>\n <span\n data-tid={RadioGroupDataTids.root}\n ref={this.ref}\n style={style}\n className={this.cx({\n [this.styles.root()]: true,\n })}\n role=\"radiogroup\"\n {...handlers}\n aria-describedby={ariaDescribedby}\n >\n <RadioGroupContext.Provider value={this.getRadioGroupContextValue()}>\n {this.renderChildren()}\n </RadioGroupContext.Provider>\n </span>\n </FocusTrap>\n </CommonWrapper>\n );\n }\n\n /** Программно устанавливает фокус на радиокнопку. Появляется фокусная обводка, элемент получает клавиатурные события и воспринимается как текущий элемент для чтения скринридерами.\n * @public\n */\n public focus(): void {\n const node = this.node;\n if (!node) {\n return;\n }\n\n let radio = node.querySelector('input[type=\"radio\"]:checked') as Nullable<HTMLInputElement>;\n\n // If no checked radios, try get first radio\n if (!radio || radio.disabled) {\n radio = node.querySelector('input[type=\"radio\"]:not([disabled])') as Nullable<HTMLInputElement>;\n }\n\n if (radio) {\n radio.focus();\n }\n }\n\n private getValue = () => (this.isControlled() ? this.props.value : this.state.activeItem);\n\n private getName = () => this.props.name || this.name;\n\n private isControlled = () => isNonNullable(this.props.value);\n\n private handleSelect = (value: T) => {\n if (!this.isControlled()) {\n this.setState({ activeItem: value });\n }\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private renderChildren() {\n const { items, children } = this.props;\n invariant((!items && children) || (items && !children), 'Either items or children must be passed, not both');\n return items ? mapItems<T>(this.renderRadio, items) : children;\n }\n\n private renderRadio = (itemValue: T, data: React.ReactNode, index: number): JSX.Element => {\n const itemProps = {\n key: this.getKeyByItem(itemValue),\n className: this.cx({\n [this.styles.item()]: true,\n [this.styles.itemFirst()]: index === 0,\n [this.styles.itemInline()]: !!this.props.inline,\n }),\n };\n\n return (\n <span {...itemProps} role=\"presentation\">\n <Radio value={itemValue}>{this.getProps().renderItem(itemValue, data)}</Radio>\n </span>\n );\n };\n\n private getKeyByItem = (itemValue: T) => {\n if (this.props.toKey) {\n return this.props.toKey(itemValue);\n }\n return typeof itemValue === 'string' || typeof itemValue === 'number' ? itemValue : undefined;\n };\n\n private ref = (element: HTMLSpanElement) => {\n this.node = element;\n };\n}\n\nfunction renderItem<T>(_value: T, data: React.ReactNode) {\n return data;\n}\n\nfunction mapItems<T>(\n fn: (value: T, data: React.ReactNode, index: number) => React.ReactNode,\n items: T[] | Array<[T, React.ReactNode]>,\n) {\n const result: React.ReactNode[] = [];\n let index = 0;\n for (const entry of items) {\n const [value, data] = normalizeEntry<T>(entry);\n result.push(fn(value, data, index));\n ++index;\n }\n return result;\n}\n\nfunction normalizeEntry<T>(entry: T | [T, React.ReactNode]): [T, React.ReactNode] {\n if (!Array.isArray(entry)) {\n return [entry, entry as unknown as React.ReactNode];\n }\n return entry;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RadioGroup.js","sourceRoot":"","sources":["../../../components/RadioGroup/RadioGroup.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport invariant from 'invariant';\nimport type { AriaAttributes, JSX } from 'react';\nimport React from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes.js';\nimport { FocusTrap } from '../../internal/FocusTrap/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport { getRandomID, isNonNullable } from '../../lib/utils.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { Radio } from '../Radio/index.js';\nimport { Prevent } from './Prevent.js';\nimport { getStyles } from './RadioGroup.styles.js';\nimport { RadioGroupContext } from './RadioGroupContext.js';\nimport type { RadioGroupContextType } from './RadioGroupContext.js';\n\nexport interface RadioGroupProps<T = string | number> extends CommonProps {\n /** Значение по умолчанию. Должно быть одним из значений дочерних радиокнопок или значений из `items`. */\n defaultValue?: T;\n\n /** Значение группы радиокнопок. Должно быть одним из значений радиокнопок.\n * Если не указано, то компонент будет работать как неконтролируемый. */\n value?: T;\n\n /** Массив параметров радиокнопок. Может быть типа `Array<Value>` или `Array<[Value, Data]>`,\n * где тип `Value` — значение радиокнопки, а `Data` — значение которое будет использовано вторым параметром в `renderItem`.\n * Тип `Array<Value>` будет приведен к типу `Array<[Value, Value]>`.\n * Может быть использовано, если не передан `children`. */\n items?: T[] | Array<[T, React.ReactNode]>;\n\n /** Устанавливает атрибут `name` для дочерних радиокнопок. Если не указан, то сгенерируется случайное имя. */\n name?: string;\n\n /** Получает уникальный ключ по элементу.\n * @param item - элемент, по которому нужно получить ключ. */\n toKey?: (item: T) => string | number;\n\n /** Блокирует все радиокнопки в группе. */\n disabled?: boolean;\n\n /** Переводит контрол в состояние предупреждения. */\n warning?: boolean;\n\n /** Переводит контрол в состояние ошибки. */\n error?: boolean;\n\n /** Размещает радиокнопки в строку. Работает только со значениями, переданными через `items`, не работает с `children`. */\n inline?: boolean;\n\n /** Ширина радиогруппы. Работает только со значениями, переданными через `items`, не работает с `children`. */\n width?: React.CSSProperties['width'];\n\n /** Отрисовывает контент радиокнопки. Работает только со значениями, переданными через `items`, не работает с `children`.\n * @param {Value} itemValue - значение радиокнопки.\n * @param {Data} data - значение для отрисовки радиокнопки. */\n renderItem?: (itemValue: T, data: React.ReactNode) => React.ReactNode;\n\n /** @ignore */\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\n\n /** Событие изменения `value`. */\n onValueChange?: (value: T) => void;\n\n /** Событие потери радиогруппой фокуса. */\n onBlur?: (event: FocusEvent) => void;\n\n /** Событие ухода мышки с объекта (событие `onmouseleave`). */\n onMouseLeave?: () => any;\n\n /** Событие наведения мышкой (событие `onmouseover`). */\n onMouseOver?: () => any;\n\n /** Событие наведения мышкой (событие `onmouseenter`). Смотрите разницу с `onMouseOver` в [документации](https://learn.javascript.ru/mousemove-mouseover-mouseout-mouseenter-mouseleave) */\n onMouseEnter?: () => any;\n}\n\nexport interface RadioGroupState<T> {\n activeItem?: T;\n}\n\nexport const RadioGroupDataTids = {\n root: 'RadioGroup__root',\n} as const;\n\ntype DefaultProps = Required<Pick<RadioGroupProps<unknown>, 'renderItem'>>;\n\n/** Группирует радиокнопки. Контейнер для компонента [Radio](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_input-data-radio--docs). */\n@withRenderEnvironment\n@rootNode\nexport class RadioGroup<T> extends React.Component<RadioGroupProps<T>, RadioGroupState<T>> {\n public static __KONTUR_REACT_UI__ = 'RadioGroup';\n public static displayName = 'RadioGroup';\n\n public static defaultProps: DefaultProps = {\n renderItem,\n };\n\n public static Prevent = Prevent;\n\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private node: Nullable<HTMLSpanElement>;\n private name = getRandomID();\n private getProps = createPropsGetter(RadioGroup.defaultProps);\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n constructor(props: RadioGroupProps<T>) {\n super(props);\n\n this.state = {\n activeItem: this.props.defaultValue,\n };\n }\n\n private getRadioGroupContextValue = (): RadioGroupContextType<T> => {\n return {\n activeItem: this.getValue(),\n onSelect: this.handleSelect,\n name: this.getName(),\n disabled: this.props.disabled,\n error: this.props.error,\n warning: this.props.warning,\n };\n };\n\n public render(): React.JSX.Element {\n const {\n width,\n onMouseLeave,\n onMouseOver,\n onMouseEnter,\n onBlur,\n 'aria-describedby': ariaDescribedby,\n disabled,\n } = this.props;\n const style = {\n width: width ?? 'auto',\n };\n const handlers = {\n onMouseOver,\n onMouseEnter,\n onMouseLeave,\n };\n this.styles = getStyles(this.emotion);\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props} {...getVisualStateDataAttributes({ disabled })}>\n <FocusTrap onBlur={onBlur}>\n <span\n data-tid={RadioGroupDataTids.root}\n ref={this.ref}\n style={style}\n className={this.cx({\n [this.styles.root()]: true,\n })}\n role=\"radiogroup\"\n {...handlers}\n aria-describedby={ariaDescribedby}\n >\n <RadioGroupContext.Provider value={this.getRadioGroupContextValue()}>\n {this.renderChildren()}\n </RadioGroupContext.Provider>\n </span>\n </FocusTrap>\n </CommonWrapper>\n );\n }\n\n /** Программно устанавливает фокус на радиокнопку. Появляется фокусная обводка, элемент получает клавиатурные события и воспринимается как текущий элемент для чтения скринридерами.\n * @public\n */\n public focus(): void {\n const node = this.node;\n if (!node) {\n return;\n }\n\n let radio = node.querySelector('input[type=\"radio\"]:checked') as Nullable<HTMLInputElement>;\n\n // If no checked radios, try get first radio\n if (!radio || radio.disabled) {\n radio = node.querySelector('input[type=\"radio\"]:not([disabled])') as Nullable<HTMLInputElement>;\n }\n\n if (radio) {\n radio.focus();\n }\n }\n\n private getValue = () => (this.isControlled() ? this.props.value : this.state.activeItem);\n\n private getName = () => this.props.name || this.name;\n\n private isControlled = () => isNonNullable(this.props.value);\n\n private handleSelect = (value: T) => {\n if (!this.isControlled()) {\n this.setState({ activeItem: value });\n }\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private renderChildren() {\n const { items, children } = this.props;\n invariant((!items && children) || (items && !children), 'Either items or children must be passed, not both');\n return items ? mapItems<T>(this.renderRadio, items) : children;\n }\n\n private renderRadio = (itemValue: T, data: React.ReactNode, index: number): JSX.Element => {\n const itemProps = {\n key: this.getKeyByItem(itemValue),\n className: this.cx({\n [this.styles.item()]: true,\n [this.styles.itemFirst()]: index === 0,\n [this.styles.itemInline()]: !!this.props.inline,\n }),\n };\n\n return (\n <span {...itemProps} role=\"presentation\">\n <Radio value={itemValue}>{this.getProps().renderItem(itemValue, data)}</Radio>\n </span>\n );\n };\n\n private getKeyByItem = (itemValue: T) => {\n if (this.props.toKey) {\n return this.props.toKey(itemValue);\n }\n return typeof itemValue === 'string' || typeof itemValue === 'number' ? itemValue : undefined;\n };\n\n private ref = (element: HTMLSpanElement) => {\n this.node = element;\n };\n}\n\nfunction renderItem<T>(_value: T, data: React.ReactNode) {\n return data;\n}\n\nfunction mapItems<T>(\n fn: (value: T, data: React.ReactNode, index: number) => React.ReactNode,\n items: T[] | Array<[T, React.ReactNode]>,\n) {\n const result: React.ReactNode[] = [];\n let index = 0;\n for (const entry of items) {\n const [value, data] = normalizeEntry<T>(entry);\n result.push(fn(value, data, index));\n ++index;\n }\n return result;\n}\n\nfunction normalizeEntry<T>(entry: T | [T, React.ReactNode]): [T, React.ReactNode] {\n if (!Array.isArray(entry)) {\n return [entry, entry as unknown as React.ReactNode];\n }\n return entry;\n}\n"]}
|
|
@@ -14,9 +14,9 @@ export interface ButtonParams extends Pick<AriaAttributes, 'aria-describedby' |
|
|
|
14
14
|
disabled?: boolean;
|
|
15
15
|
/** Задаёт лейбл. */
|
|
16
16
|
label: React.ReactNode;
|
|
17
|
-
/**
|
|
17
|
+
/** Событие нажатия на компонент. */
|
|
18
18
|
onClick: () => void;
|
|
19
|
-
/**
|
|
19
|
+
/** Событие нажатия кнопки на клавиатуре. */
|
|
20
20
|
onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;
|
|
21
21
|
/** Определяет, открыто ли выпадающее меню. */
|
|
22
22
|
opened: boolean;
|
|
@@ -46,7 +46,7 @@ export interface SelectProps<TValue, TItem> extends CommonProps, Pick<AriaAttrib
|
|
|
46
46
|
disablePortal?: boolean;
|
|
47
47
|
/** Блокирует раскрывающийся список. */
|
|
48
48
|
disabled?: boolean;
|
|
49
|
-
/**
|
|
49
|
+
/** Переводит компонент в состояние ошибки. */
|
|
50
50
|
error?: boolean;
|
|
51
51
|
/** Отфильтровывает элементы по заданному паттерну. */
|
|
52
52
|
filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;
|
|
@@ -116,7 +116,7 @@ export interface SelectProps<TValue, TItem> extends CommonProps, Pick<AriaAttrib
|
|
|
116
116
|
theme?: ThemeIn | Theme;
|
|
117
117
|
/** Ширина раскрывающегося списка. */
|
|
118
118
|
width?: number | string;
|
|
119
|
-
/**
|
|
119
|
+
/** Переводит компонент в состояние предупреждения. */
|
|
120
120
|
warning?: boolean;
|
|
121
121
|
/** Стиль кнопки. Примеры стилей смотрите [в документации компонента Button](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_button-button--docs). */
|
|
122
122
|
use?: ButtonUse;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../components/Select/Select.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport invariant from 'invariant';\nimport debounce from 'lodash.debounce';\nimport type { AriaAttributes, HTMLAttributes, ReactNode, ReactPortal } from 'react';\nimport React from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { Menu } from '../../internal/Menu/index.js';\nimport { MobilePopup } from '../../internal/MobilePopup/index.js';\nimport { Popup, type PopupPositionsType } from '../../internal/Popup/index.js';\nimport { RenderLayer } from '../../internal/RenderLayer/index.js';\nimport { ZIndex } from '../../internal/ZIndex/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers.js';\nimport { filterProps } from '../../lib/filterProps.js';\nimport { getMenuPositions } from '../../lib/getMenuPositions.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { locale } from '../../lib/locale/decorators.js';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { getRootNode, rootNode } from '../../lib/rootNode/index.js';\nimport { withSize } from '../../lib/size/SizeDecorator.js';\nimport type { Theme, ThemeIn } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory.js';\nimport type { SizeProp } from '../../lib/types/props.js';\nimport { getRandomID, isFunction, isNonNullable, isReactUINode } from '../../lib/utils.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport type { ButtonProps, ButtonUse } from '../Button/index.js';\nimport { Button } from '../Button/index.js';\nimport { Input } from '../Input/index.js';\nimport { getStyles as getLinkStyles } from '../Link/Link.styles.js';\nimport type { MenuHeaderProps } from '../MenuHeader/index.js';\nimport { MenuItem } from '../MenuItem/index.js';\nimport type { MenuItemProps } from '../MenuItem/index.js';\nimport { MenuSeparator } from '../MenuSeparator/index.js';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator.js';\nimport { ArrowDownIcon } from './ArrowDownIcon.js';\nimport { Item } from './Item.js';\nimport type { SelectLocale } from './locale/index.js';\nimport { SelectLocaleHelper } from './locale/index.js';\nimport { getStyles } from './Select.styles.js';\nimport { getSelectTheme } from './selectTheme.js';\nimport { SelectDataTids } from './tids.js';\n\nexport * from './tids.js';\n\nexport interface ButtonParams extends Pick<\n AriaAttributes,\n 'aria-describedby' | 'aria-controls' | 'aria-label' | 'aria-expanded'\n> {\n /** Блокирует компонент. */\n disabled?: boolean;\n\n /** Задаёт лейбл. */\n label: React.ReactNode;\n\n /** Задаёт функцию, которая вызывается при клике на компонент. */\n onClick: () => void;\n\n /** Задает функцию, которая вызывается при нажатии кнопки на клавиатуре. */\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n /** Определяет, открыто ли выпадающее меню. */\n opened: boolean;\n\n /** Определяет, есть ли Placeholder. */\n isPlaceholder: boolean;\n\n /** Задает размер контрола. */\n size: SizeProp;\n}\n\nconst PASS_BUTTON_PROPS = {\n id: true,\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n corners: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport const SelectIds = {\n menu: SelectDataTids.menu,\n} as const;\n\ntype SelectItem<TValue, TItem> =\n | [TValue, TItem, React.ReactNode?]\n | TItem\n | TValue\n | React.ReactElement\n | (() => React.ReactElement);\n\nexport interface SelectProps<TValue, TItem>\n extends\n CommonProps,\n Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'> {\n /** @ignore */\n _icon?: React.ReactNode;\n\n /** Отрисовывает кнопку. */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n\n /** @ignore */\n corners?: React.CSSProperties;\n\n /** Значение по умолчанию. */\n defaultValue?: TValue;\n\n /** Смещение списка относительно поля по горизонтали. При нуле смещения нет, при положительном значении — список сдвигается вправо, при отрицательном — влево.\n * @default 0\n */\n menuOffset?: number;\n\n /** По умолчанию список рендерится через [паттерн Portal](https://react.dev/reference/react-dom/createPortal). Проп отключает использование Portal и список рендерится как обычный блок с абсолютным позиционированием внутри компонента. */\n disablePortal?: boolean;\n\n /** Блокирует раскрывающийся список. */\n disabled?: boolean;\n\n /** Меняет визуальное отображение раскрывающегося списка на состояние ошибки. Может быть полезен при разработке собственной валидации, если вы не используете пакет [React UI Validations](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui-validations_displaying-getting-started--docs). */\n error?: boolean;\n\n /** Отфильтровывает элементы по заданному паттерну. */\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n\n /** Набор значений. Поддерживаются любые перечисляемые типы, в том числе `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом:\n * - если элемент — это массив, то первый элемент является значением, второй — отображается в списке, а третий – комментарий;\n * - если элемент не является массивом, то он используется и для отображения, и для значения.\n *\n * Для вставки разделителя между значениями можно использовать `Select.SEP`.\n *\n * @example\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.staticElement(() => <div>My Element</div>)]}\n * />\n * ```\n * @example\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ``` */\n items?: Array<SelectItem<TValue, TItem>>;\n\n /** Максимальная высота раскрывающегося списка. */\n maxMenuHeight?: number;\n\n /** Максимальная ширина кнопки. */\n maxWidth?: React.CSSProperties['maxWidth'];\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 positions?: PopupPositionsType[];\n\n /** Фиксирует расположение списка относительно кнопки. */\n menuPos?: 'top' | 'bottom' | 'middle';\n\n /** Выравнивание списка. */\n menuAlign?: 'left' | 'right';\n\n /** Ширина списка. */\n menuWidth?: React.CSSProperties['width'];\n\n /** Событие изменения значения (`value`) в поле. */\n onValueChange?: (value: TValue) => void;\n\n /** Событие закрытия меню. */\n onClose?: () => void;\n\n /** Событие наведения мышкой (событие `onmouseenter`). Смотрите разницу с `onMouseOver` в [документации](https://learn.javascript.ru/mousemove-mouseover-mouseout-mouseenter-mouseleave). */\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /** Событие ухода мышки с объекта (событие `onmouseleave`). */\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /** Событие наведения мышкой (событие `onmouseover`). */\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /** Событие нажатия кнопки на клавиатуре. */\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n\n /** Событие открытия меню. */\n onOpen?: () => void;\n\n /** Текст, который отображается если не введено никакое значение. */\n placeholder?: React.ReactNode;\n\n /** Отрисовывает элементы в списке. */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n\n /** Отрисовывает выбранный элемент. */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n\n /** Сравнивает `value` с элементом из `items`. */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n\n /** Отображает строчку поиска в списке значений. */\n search?: boolean;\n\n /** Задаёт значение. */\n value?: TValue;\n\n /** Объект с переменными темы. */\n theme?: ThemeIn | Theme;\n\n /** Ширина раскрывающегося списка. */\n width?: number | string;\n\n /** Меняет визуальное отображение поля на состояние предупреждения. Может быть полезен при разработке собственной валидации, если вы не используете пакет [React UI Validations](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui-validations_displaying-getting-started--docs). */\n warning?: boolean;\n\n /** Стиль кнопки. Примеры стилей смотрите [в документации компонента Button](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_button-button--docs). */\n use?: ButtonUse;\n\n /** Размер раскрывающегося списка.\n * @default small\n */\n size?: SizeProp;\n\n /** HTML-событие `onfocus`. */\n onFocus?: React.FocusEventHandler<HTMLElement>;\n\n /** HTML-событие `onblur`. */\n onBlur?: React.FocusEventHandler<HTMLElement>;\n\n /** Текст заголовка списка в мобильной версии. */\n mobileMenuHeaderText?: string;\n\n /** Отключает выравнивание текста элементов в списке относительно иконок в других элементах. */\n preventIconsOffset?: boolean;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<unknown> {\n focus: (event?: unknown) => void;\n}\n\ntype DefaultProps<TValue, TItem> = Required<\n Pick<SelectProps<TValue, TItem>, 'renderValue' | 'renderItem' | 'areValuesEqual' | 'filterItem' | 'use'>\n>;\n\n/**\n * Раскрывающийся список позволяет выбрать значение из заранее известного набора вариантов.\n */\n@withRenderEnvironment\n@responsiveLayout\n@rootNode\n@locale('Select', SelectLocaleHelper)\n@withSize\n// Suggested solutions break current behavior\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n public static displayName = 'Select';\n\n public static defaultProps: DefaultProps<unknown, ReactNode | ReactPortal> = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n };\n\n public static Item = Item;\n public static SEP = (): React.JSX.Element => <MenuSeparator />;\n\n public static staticElement = (\n element: React.ReactElement | (() => React.ReactElement),\n ): React.ReactElement | (() => React.ReactElement) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.staticElement(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private linkStyles!: ReturnType<typeof getLinkStyles>;\n private styles!: ReturnType<typeof getStyles>;\n private theme!: Theme;\n private size!: SizeProp;\n private isMobileLayout!: boolean;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private menuId = SelectIds.menu + getRandomID();\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n this.globalObject.addEventListener?.('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n this.globalObject.removeEventListener?.('popstate', this.close);\n }\n }\n\n public render(): React.JSX.Element {\n this.linkStyles = getLinkStyles(this.emotion);\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = ThemeFactory.create(\n {\n menuOffsetY: theme.selectMenuOffsetY,\n },\n theme,\n );\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /** Открывает раскрывающийся список.\n * @public\n */\n public open = (): void => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /** Закрывает раскрывающийся список.\n * @public\n */\n public close = (): void => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /** Программно устанавливает фокус на кнопку.\n * Появляется фокусная рамка, элемент получает клавиатурные события и воспринимается как текущий элемент для чтения скринридерами.\n * @public\n */\n public focus = (): void => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private getMenuRenderer() {\n if (this.props.disabled) {\n return null;\n }\n\n if (this.isMobileLayout) {\n return this.renderMobileMenu();\n }\n\n if (this.state.opened) {\n return this.renderMenu();\n }\n\n return null;\n }\n\n private renderMain() {\n const buttonParams = this.getDefaultButtonParams();\n const dataTid = this.getProps()['data-tid'] ?? SelectDataTids.root;\n const button = (\n <ThemeContext.Provider value={getSelectTheme(this.theme, this.props)}>\n {this.getButton(buttonParams)}\n </ThemeContext.Provider>\n );\n\n const isMobile = this.isMobileLayout;\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const root = (\n <span\n data-tid={dataTid}\n className={this.cx({ [this.styles.root()]: true, [this.styles.rootMobile(this.theme)]: isMobile })}\n style={style}\n >\n {button}\n {this.getMenuRenderer()}\n </span>\n );\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.close}\n onFocusOutside={this.close}\n active={isMobile ? false : this.state.opened}\n >\n {root}\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private getDefaultButtonParams = (): ButtonParams => {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n size: this.size,\n disabled: this.getProps().disabled,\n };\n\n return buttonParams;\n };\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (isNonNullable(value)) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder ?? this.locale?.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: SizeProp | undefined) {\n if (this.getProps().use === 'link') {\n return this.styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return this.styles.leftIconLarge(this.theme);\n case 'medium':\n return this.styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return this.styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n size: params.size,\n };\n const use = this.getProps().use;\n\n const labelProps = {\n 'data-tid': SelectDataTids.label,\n className: this.cx({\n [this.styles.label()]: use !== 'link',\n [this.styles.placeholder(this.theme)]: params.isPlaceholder,\n [this.styles.customUsePlaceholder()]: params.isPlaceholder && use !== 'default',\n [this.styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = use !== 'default';\n\n const icon = <ArrowDownIcon size={this.size} />;\n\n return (\n <Button {...buttonProps}>\n <div\n className={this.cx(this.styles.selectButtonContainer(), {\n [this.linkStyles.root(this.theme)]: use === 'link',\n })}\n >\n {this.props._icon && <div className={this.getLeftIconClass(this.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={this.cx(this.styles.arrowWrap(this.theme), {\n [this.styles.arrowDisabled(this.theme)]: this.props.disabled,\n [this.styles.customUseArrow()]: useIsCustom,\n })}\n >\n {icon}\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? this.getSearch() : null;\n\n const value = this.getValue();\n const { menuWidth, menuPos, menuAlign, positions, preventIconsOffset } = this.getProps();\n\n return (\n <Popup\n opened\n hasShadow\n id={this.menuId}\n data-tid={SelectDataTids.menu}\n positions={positions ?? getMenuPositions(menuPos, menuAlign)}\n anchorElement={this.popupGetParent()}\n priority={ZIndex.priorities.PopupMenu}\n disablePortal={this.props.disablePortal}\n margin={parseInt(this.theme.menuOffsetY) - 1}\n width={menuWidth}\n minWidth={menuWidth === undefined ? '100%' : undefined}\n popupOffset={this.props.menuOffset}\n >\n <Menu\n hasMargin={false}\n ref={this.refMenu}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n align={menuAlign}\n preventIconsOffset={preventIconsOffset}\n >\n {search}\n {this.getMenuItems(value)}\n </Menu>\n </Popup>\n );\n }\n\n private getSearch = () => {\n return (\n <div className={this.styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.debouncedFocusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n );\n };\n\n private renderMobileMenu(): React.ReactNode {\n const search = this.props.search ? this.getMobileSearch() : null;\n const value = this.getValue();\n\n return (\n <MobilePopup\n headerChildComponent={search}\n caption={this.props.mobileMenuHeaderText}\n onCloseRequest={this.close}\n opened={this.state.opened}\n >\n <Menu onItemClick={this.close} disableScrollContainer maxHeight={'auto'}>\n {this.getMenuItems(value)}\n </Menu>\n </MobilePopup>\n );\n }\n\n private getMobileSearch = () => {\n return (\n <Input\n autoFocus\n value={this.state.searchPattern}\n ref={this.debouncedFocusInput}\n onValueChange={this.handleSearch}\n width=\"100%\"\n />\n );\n };\n\n private getMenuItems = (value: Nullable<TValue>) => {\n const isMobile = this.isMobileLayout;\n const size = this.size;\n\n return this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i, isMobile, size } as MenuItemProps);\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n if (isReactUINode('MenuItem', item)) {\n return React.cloneElement(item, { key: i, isMobile, size } as MenuItemProps);\n }\n if (isReactUINode('MenuHeader', item)) {\n return React.cloneElement(item, { size } as MenuHeaderProps);\n }\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n isMobile={isMobile}\n size={this.size}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n );\n };\n\n private popupGetParent = () => {\n return getRootNode(this);\n };\n\n // fix cases when an Input is rendered in portal\n // https://github.com/skbkontur/retail-ui/issues/1995\n private focusInput = (input: Input) => input?.focus();\n private debouncedFocusInput = debounce(this.focusInput);\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n this.setState({ searchPattern: value });\n this.menu?.highlightItem(0);\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (!this.areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange?.(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNode[] = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private areValuesEqual(value1: Nullable<TValue>, value2: Nullable<TValue>) {\n return isNonNullable(value1) && isNonNullable(value2) && this.getProps().areValuesEqual(value1, value2);\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement<any>, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n size: this.size,\n 'aria-describedby': this.props['aria-describedby'],\n 'aria-expanded': this.state.opened ? 'true' : 'false',\n 'aria-controls': this.menuId,\n 'aria-label': (buttonElement as React.ReactElement<any>).props['aria-label'] ?? this.props['aria-label'],\n })\n : buttonElement;\n };\n}\n\nfunction renderValue<TValue, TItem>(value: TValue, item: Nullable<TItem>) {\n return item;\n}\n\nfunction renderItem<TValue, TItem>(value: TValue, item?: TItem) {\n return item;\n}\n\nfunction areValuesEqual<TValue>(value1: TValue, value2: TValue) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: unknown) {\n if (Array.isArray(entry)) {\n return entry;\n }\n\n return [entry, entry, undefined];\n}\n\nconst getTextFromItem = (item: string | React.ReactNode | (() => React.ReactNode) | number): string => {\n if (typeof item === 'string') {\n return item;\n }\n\n if (isFunction(item)) {\n return getTextFromItem(item());\n }\n\n if (React.isValidElement(item)) {\n return reactGetTextContent(item);\n }\n\n if (typeof item === 'number') {\n return item.toString(10);\n }\n\n return '';\n};\n\nfunction filterItem<TValue>(value: TValue, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n\n const itemText = getTextFromItem(item);\n\n if (!itemText) {\n return false;\n }\n\n return itemText.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../components/Select/Select.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport invariant from 'invariant';\nimport debounce from 'lodash.debounce';\nimport type { AriaAttributes, HTMLAttributes, ReactNode, ReactPortal } from 'react';\nimport React from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { Menu } from '../../internal/Menu/index.js';\nimport { MobilePopup } from '../../internal/MobilePopup/index.js';\nimport { Popup, type PopupPositionsType } from '../../internal/Popup/index.js';\nimport { RenderLayer } from '../../internal/RenderLayer/index.js';\nimport { ZIndex } from '../../internal/ZIndex/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers.js';\nimport { filterProps } from '../../lib/filterProps.js';\nimport { getMenuPositions } from '../../lib/getMenuPositions.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { locale } from '../../lib/locale/decorators.js';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { getRootNode, rootNode } from '../../lib/rootNode/index.js';\nimport { withSize } from '../../lib/size/SizeDecorator.js';\nimport type { Theme, ThemeIn } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory.js';\nimport type { SizeProp } from '../../lib/types/props.js';\nimport { getRandomID, isFunction, isNonNullable, isReactUINode } from '../../lib/utils.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport type { ButtonProps, ButtonUse } from '../Button/index.js';\nimport { Button } from '../Button/index.js';\nimport { Input } from '../Input/index.js';\nimport { getStyles as getLinkStyles } from '../Link/Link.styles.js';\nimport type { MenuHeaderProps } from '../MenuHeader/index.js';\nimport { MenuItem } from '../MenuItem/index.js';\nimport type { MenuItemProps } from '../MenuItem/index.js';\nimport { MenuSeparator } from '../MenuSeparator/index.js';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator.js';\nimport { ArrowDownIcon } from './ArrowDownIcon.js';\nimport { Item } from './Item.js';\nimport type { SelectLocale } from './locale/index.js';\nimport { SelectLocaleHelper } from './locale/index.js';\nimport { getStyles } from './Select.styles.js';\nimport { getSelectTheme } from './selectTheme.js';\nimport { SelectDataTids } from './tids.js';\n\nexport * from './tids.js';\n\nexport interface ButtonParams extends Pick<\n AriaAttributes,\n 'aria-describedby' | 'aria-controls' | 'aria-label' | 'aria-expanded'\n> {\n /** Блокирует компонент. */\n disabled?: boolean;\n\n /** Задаёт лейбл. */\n label: React.ReactNode;\n\n /** Событие нажатия на компонент. */\n onClick: () => void;\n\n /** Событие нажатия кнопки на клавиатуре. */\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n /** Определяет, открыто ли выпадающее меню. */\n opened: boolean;\n\n /** Определяет, есть ли Placeholder. */\n isPlaceholder: boolean;\n\n /** Задает размер контрола. */\n size: SizeProp;\n}\n\nconst PASS_BUTTON_PROPS = {\n id: true,\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n corners: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport const SelectIds = {\n menu: SelectDataTids.menu,\n} as const;\n\ntype SelectItem<TValue, TItem> =\n | [TValue, TItem, React.ReactNode?]\n | TItem\n | TValue\n | React.ReactElement\n | (() => React.ReactElement);\n\nexport interface SelectProps<TValue, TItem>\n extends\n CommonProps,\n Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'> {\n /** @ignore */\n _icon?: React.ReactNode;\n\n /** Отрисовывает кнопку. */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n\n /** @ignore */\n corners?: React.CSSProperties;\n\n /** Значение по умолчанию. */\n defaultValue?: TValue;\n\n /** Смещение списка относительно поля по горизонтали. При нуле смещения нет, при положительном значении — список сдвигается вправо, при отрицательном — влево.\n * @default 0\n */\n menuOffset?: number;\n\n /** По умолчанию список рендерится через [паттерн Portal](https://react.dev/reference/react-dom/createPortal). Проп отключает использование Portal и список рендерится как обычный блок с абсолютным позиционированием внутри компонента. */\n disablePortal?: boolean;\n\n /** Блокирует раскрывающийся список. */\n disabled?: boolean;\n\n /** Переводит компонент в состояние ошибки. */\n error?: boolean;\n\n /** Отфильтровывает элементы по заданному паттерну. */\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n\n /** Набор значений. Поддерживаются любые перечисляемые типы, в том числе `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом:\n * - если элемент — это массив, то первый элемент является значением, второй — отображается в списке, а третий – комментарий;\n * - если элемент не является массивом, то он используется и для отображения, и для значения.\n *\n * Для вставки разделителя между значениями можно использовать `Select.SEP`.\n *\n * @example\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.staticElement(() => <div>My Element</div>)]}\n * />\n * ```\n * @example\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ``` */\n items?: Array<SelectItem<TValue, TItem>>;\n\n /** Максимальная высота раскрывающегося списка. */\n maxMenuHeight?: number;\n\n /** Максимальная ширина кнопки. */\n maxWidth?: React.CSSProperties['maxWidth'];\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 positions?: PopupPositionsType[];\n\n /** Фиксирует расположение списка относительно кнопки. */\n menuPos?: 'top' | 'bottom' | 'middle';\n\n /** Выравнивание списка. */\n menuAlign?: 'left' | 'right';\n\n /** Ширина списка. */\n menuWidth?: React.CSSProperties['width'];\n\n /** Событие изменения значения (`value`) в поле. */\n onValueChange?: (value: TValue) => void;\n\n /** Событие закрытия меню. */\n onClose?: () => void;\n\n /** Событие наведения мышкой (событие `onmouseenter`). Смотрите разницу с `onMouseOver` в [документации](https://learn.javascript.ru/mousemove-mouseover-mouseout-mouseenter-mouseleave). */\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /** Событие ухода мышки с объекта (событие `onmouseleave`). */\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /** Событие наведения мышкой (событие `onmouseover`). */\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /** Событие нажатия кнопки на клавиатуре. */\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n\n /** Событие открытия меню. */\n onOpen?: () => void;\n\n /** Текст, который отображается если не введено никакое значение. */\n placeholder?: React.ReactNode;\n\n /** Отрисовывает элементы в списке. */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n\n /** Отрисовывает выбранный элемент. */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n\n /** Сравнивает `value` с элементом из `items`. */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n\n /** Отображает строчку поиска в списке значений. */\n search?: boolean;\n\n /** Задаёт значение. */\n value?: TValue;\n\n /** Объект с переменными темы. */\n theme?: ThemeIn | Theme;\n\n /** Ширина раскрывающегося списка. */\n width?: number | string;\n\n /** Переводит компонент в состояние предупреждения. */\n warning?: boolean;\n\n /** Стиль кнопки. Примеры стилей смотрите [в документации компонента Button](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_button-button--docs). */\n use?: ButtonUse;\n\n /** Размер раскрывающегося списка.\n * @default small\n */\n size?: SizeProp;\n\n /** HTML-событие `onfocus`. */\n onFocus?: React.FocusEventHandler<HTMLElement>;\n\n /** HTML-событие `onblur`. */\n onBlur?: React.FocusEventHandler<HTMLElement>;\n\n /** Текст заголовка списка в мобильной версии. */\n mobileMenuHeaderText?: string;\n\n /** Отключает выравнивание текста элементов в списке относительно иконок в других элементах. */\n preventIconsOffset?: boolean;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<unknown> {\n focus: (event?: unknown) => void;\n}\n\ntype DefaultProps<TValue, TItem> = Required<\n Pick<SelectProps<TValue, TItem>, 'renderValue' | 'renderItem' | 'areValuesEqual' | 'filterItem' | 'use'>\n>;\n\n/**\n * Раскрывающийся список позволяет выбрать значение из заранее известного набора вариантов.\n */\n@withRenderEnvironment\n@responsiveLayout\n@rootNode\n@locale('Select', SelectLocaleHelper)\n@withSize\n// Suggested solutions break current behavior\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n public static displayName = 'Select';\n\n public static defaultProps: DefaultProps<unknown, ReactNode | ReactPortal> = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n };\n\n public static Item = Item;\n public static SEP = (): React.JSX.Element => <MenuSeparator />;\n\n public static staticElement = (\n element: React.ReactElement | (() => React.ReactElement),\n ): React.ReactElement | (() => React.ReactElement) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.staticElement(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private linkStyles!: ReturnType<typeof getLinkStyles>;\n private styles!: ReturnType<typeof getStyles>;\n private theme!: Theme;\n private size!: SizeProp;\n private isMobileLayout!: boolean;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private menuId = SelectIds.menu + getRandomID();\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n this.globalObject.addEventListener?.('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n this.globalObject.removeEventListener?.('popstate', this.close);\n }\n }\n\n public render(): React.JSX.Element {\n this.linkStyles = getLinkStyles(this.emotion);\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = ThemeFactory.create(\n {\n menuOffsetY: theme.selectMenuOffsetY,\n },\n theme,\n );\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /** Открывает раскрывающийся список.\n * @public\n */\n public open = (): void => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /** Закрывает раскрывающийся список.\n * @public\n */\n public close = (): void => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /** Программно устанавливает фокус на кнопку.\n * Появляется фокусная рамка, элемент получает клавиатурные события и воспринимается как текущий элемент для чтения скринридерами.\n * @public\n */\n public focus = (): void => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private getMenuRenderer() {\n if (this.props.disabled) {\n return null;\n }\n\n if (this.isMobileLayout) {\n return this.renderMobileMenu();\n }\n\n if (this.state.opened) {\n return this.renderMenu();\n }\n\n return null;\n }\n\n private renderMain() {\n const buttonParams = this.getDefaultButtonParams();\n const dataTid = this.getProps()['data-tid'] ?? SelectDataTids.root;\n const button = (\n <ThemeContext.Provider value={getSelectTheme(this.theme, this.props)}>\n {this.getButton(buttonParams)}\n </ThemeContext.Provider>\n );\n\n const isMobile = this.isMobileLayout;\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const root = (\n <span\n data-tid={dataTid}\n className={this.cx({ [this.styles.root()]: true, [this.styles.rootMobile(this.theme)]: isMobile })}\n style={style}\n >\n {button}\n {this.getMenuRenderer()}\n </span>\n );\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.close}\n onFocusOutside={this.close}\n active={isMobile ? false : this.state.opened}\n >\n {root}\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private getDefaultButtonParams = (): ButtonParams => {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n size: this.size,\n disabled: this.getProps().disabled,\n };\n\n return buttonParams;\n };\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (isNonNullable(value)) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder ?? this.locale?.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: SizeProp | undefined) {\n if (this.getProps().use === 'link') {\n return this.styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return this.styles.leftIconLarge(this.theme);\n case 'medium':\n return this.styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return this.styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n size: params.size,\n };\n const use = this.getProps().use;\n\n const labelProps = {\n 'data-tid': SelectDataTids.label,\n className: this.cx({\n [this.styles.label()]: use !== 'link',\n [this.styles.placeholder(this.theme)]: params.isPlaceholder,\n [this.styles.customUsePlaceholder()]: params.isPlaceholder && use !== 'default',\n [this.styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = use !== 'default';\n\n const icon = <ArrowDownIcon size={this.size} />;\n\n return (\n <Button {...buttonProps}>\n <div\n className={this.cx(this.styles.selectButtonContainer(), {\n [this.linkStyles.root(this.theme)]: use === 'link',\n })}\n >\n {this.props._icon && <div className={this.getLeftIconClass(this.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={this.cx(this.styles.arrowWrap(this.theme), {\n [this.styles.arrowDisabled(this.theme)]: this.props.disabled,\n [this.styles.customUseArrow()]: useIsCustom,\n })}\n >\n {icon}\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? this.getSearch() : null;\n\n const value = this.getValue();\n const { menuWidth, menuPos, menuAlign, positions, preventIconsOffset } = this.getProps();\n\n return (\n <Popup\n opened\n hasShadow\n id={this.menuId}\n data-tid={SelectDataTids.menu}\n positions={positions ?? getMenuPositions(menuPos, menuAlign)}\n anchorElement={this.popupGetParent()}\n priority={ZIndex.priorities.PopupMenu}\n disablePortal={this.props.disablePortal}\n margin={parseInt(this.theme.menuOffsetY) - 1}\n width={menuWidth}\n minWidth={menuWidth === undefined ? '100%' : undefined}\n popupOffset={this.props.menuOffset}\n >\n <Menu\n hasMargin={false}\n ref={this.refMenu}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n align={menuAlign}\n preventIconsOffset={preventIconsOffset}\n >\n {search}\n {this.getMenuItems(value)}\n </Menu>\n </Popup>\n );\n }\n\n private getSearch = () => {\n return (\n <div className={this.styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.debouncedFocusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n );\n };\n\n private renderMobileMenu(): React.ReactNode {\n const search = this.props.search ? this.getMobileSearch() : null;\n const value = this.getValue();\n\n return (\n <MobilePopup\n headerChildComponent={search}\n caption={this.props.mobileMenuHeaderText}\n onCloseRequest={this.close}\n opened={this.state.opened}\n >\n <Menu onItemClick={this.close} disableScrollContainer maxHeight={'auto'}>\n {this.getMenuItems(value)}\n </Menu>\n </MobilePopup>\n );\n }\n\n private getMobileSearch = () => {\n return (\n <Input\n autoFocus\n value={this.state.searchPattern}\n ref={this.debouncedFocusInput}\n onValueChange={this.handleSearch}\n width=\"100%\"\n />\n );\n };\n\n private getMenuItems = (value: Nullable<TValue>) => {\n const isMobile = this.isMobileLayout;\n const size = this.size;\n\n return this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i, isMobile, size } as MenuItemProps);\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n if (isReactUINode('MenuItem', item)) {\n return React.cloneElement(item, { key: i, isMobile, size } as MenuItemProps);\n }\n if (isReactUINode('MenuHeader', item)) {\n return React.cloneElement(item, { size } as MenuHeaderProps);\n }\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n isMobile={isMobile}\n size={this.size}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n );\n };\n\n private popupGetParent = () => {\n return getRootNode(this);\n };\n\n // fix cases when an Input is rendered in portal\n // https://github.com/skbkontur/retail-ui/issues/1995\n private focusInput = (input: Input) => input?.focus();\n private debouncedFocusInput = debounce(this.focusInput);\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n this.setState({ searchPattern: value });\n this.menu?.highlightItem(0);\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (!this.areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange?.(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNode[] = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private areValuesEqual(value1: Nullable<TValue>, value2: Nullable<TValue>) {\n return isNonNullable(value1) && isNonNullable(value2) && this.getProps().areValuesEqual(value1, value2);\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement<any>, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n size: this.size,\n 'aria-describedby': this.props['aria-describedby'],\n 'aria-expanded': this.state.opened ? 'true' : 'false',\n 'aria-controls': this.menuId,\n 'aria-label': (buttonElement as React.ReactElement<any>).props['aria-label'] ?? this.props['aria-label'],\n })\n : buttonElement;\n };\n}\n\nfunction renderValue<TValue, TItem>(value: TValue, item: Nullable<TItem>) {\n return item;\n}\n\nfunction renderItem<TValue, TItem>(value: TValue, item?: TItem) {\n return item;\n}\n\nfunction areValuesEqual<TValue>(value1: TValue, value2: TValue) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: unknown) {\n if (Array.isArray(entry)) {\n return entry;\n }\n\n return [entry, entry, undefined];\n}\n\nconst getTextFromItem = (item: string | React.ReactNode | (() => React.ReactNode) | number): string => {\n if (typeof item === 'string') {\n return item;\n }\n\n if (isFunction(item)) {\n return getTextFromItem(item());\n }\n\n if (React.isValidElement(item)) {\n return reactGetTextContent(item);\n }\n\n if (typeof item === 'number') {\n return item.toString(10);\n }\n\n return '';\n};\n\nfunction filterItem<TValue>(value: TValue, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n\n const itemText = getTextFromItem(item);\n\n if (!itemText) {\n return false;\n }\n\n return itemText.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
|
|
@@ -2,13 +2,8 @@ import React from 'react';
|
|
|
2
2
|
import type { ToastClose, ToastProps, ToastPushApi } from '../Toast/index.js';
|
|
3
3
|
import { Toast } from '../Toast/index.js';
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Короткое немодальное уведомление, которое сообщает пользователю о результате выполнения его команды.
|
|
6
6
|
* Результат может быть положительным, отрицательным или нейтральным.
|
|
7
|
-
*
|
|
8
|
-
* Позволяет вызывать тосты с помощью статических методов.
|
|
9
|
-
*
|
|
10
|
-
* ##### Особенности компонента SingleToast
|
|
11
|
-
* Для корректной работы `<SingleToast />` должен быть отрисован только **один раз** на странице. После чего его можно вызывать из любого места приложения методом `SingleToast.push()`. Однако, переданные в компонент пропсы, такие как `theme`, `onPush` и остальные, будут применяться ко всем вызовам.
|
|
12
7
|
*/
|
|
13
8
|
export declare class SingleToast extends React.Component<ToastProps> {
|
|
14
9
|
static __KONTUR_REACT_UI__: string;
|
|
@@ -29,13 +29,8 @@ import ReactDOM from 'react-dom';
|
|
|
29
29
|
import { REACT_MAJOR_VERSION } from '../../lib/react-is.js';
|
|
30
30
|
import { Toast } from '../Toast/index.js';
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
32
|
+
* Короткое немодальное уведомление, которое сообщает пользователю о результате выполнения его команды.
|
|
33
33
|
* Результат может быть положительным, отрицательным или нейтральным.
|
|
34
|
-
*
|
|
35
|
-
* Позволяет вызывать тосты с помощью статических методов.
|
|
36
|
-
*
|
|
37
|
-
* ##### Особенности компонента SingleToast
|
|
38
|
-
* Для корректной работы `<SingleToast />` должен быть отрисован только **один раз** на странице. После чего его можно вызывать из любого места приложения методом `SingleToast.push()`. Однако, переданные в компонент пропсы, такие как `theme`, `onPush` и остальные, будут применяться ко всем вызовам.
|
|
39
34
|
*/
|
|
40
35
|
var SingleToast = /** @class */ (function (_super) {
|
|
41
36
|
__extends(SingleToast, _super);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SingleToast.js","sourceRoot":"","sources":["../../../components/SingleToast/SingleToast.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C
|
|
1
|
+
{"version":3,"file":"SingleToast.js","sourceRoot":"","sources":["../../../components/SingleToast/SingleToast.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C;;;GAGG;AACH;IAAiC,+BAA2B;IAA5D;;QA6BE,YAAM,GAAG,cAAyB,OAAA,oBAAC,KAAK,aAAC,GAAG,EAAE,WAAW,CAAC,GAAG,IAAM,KAAI,CAAC,KAAK,EAAI,EAA/C,CAA+C,CAAC;;IACpF,CAAC;IA7Be,+BAAmB,GAAG,aAAa,AAAhB,CAAiB;IACpC,uBAAW,GAAG,aAAa,AAAhB,CAAiB;IAC5B,eAAG,GAAG,KAAK,CAAC,SAAS,EAAS,AAA3B,CAA4B;IAE/B,iBAAK,GAAe;;QAChC,IAAI,mBAAmB,IAAI,EAAE,EAAE,CAAC;YAC9B,QAAQ,CAAC,SAAS,CAAC,sBAAM,OAAA,MAAA,WAAW,CAAC,GAAG,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAA,EAAA,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,MAAA,WAAW,CAAC,GAAG,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAC;QACnC,CAAC;IACH,CAAC,AANkB,CAMjB;IAEF;;;;;;;;;;OAUG;IACW,gBAAI,GAAiB,UAAC,YAA6B,EAAE,MAAwB;;QACzF,WAAW,CAAC,KAAK,EAAE,CAAC;QACpB,MAAA,WAAW,CAAC,GAAG,CAAC,OAAO,0CAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC,AAHiB,CAGhB;IAGJ,kBAAC;CAAA,AA9BD,CAAiC,KAAK,CAAC,SAAS,GA8B/C;SA9BY,WAAW","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { REACT_MAJOR_VERSION } from '../../lib/react-is.js';\nimport type { ToastClose, ToastProps, ToastPushApi, ToastPushConfig } from '../Toast/index.js';\nimport { Toast } from '../Toast/index.js';\n\n/**\n * Короткое немодальное уведомление, которое сообщает пользователю о результате выполнения его команды.\n * Результат может быть положительным, отрицательным или нейтральным.\n */\nexport class SingleToast extends React.Component<ToastProps> {\n public static __KONTUR_REACT_UI__ = 'SingleToast';\n public static displayName = 'SingleToast';\n public static ref = React.createRef<Toast>();\n\n public static close: ToastClose = () => {\n if (REACT_MAJOR_VERSION >= 18) {\n ReactDOM.flushSync(() => SingleToast.ref.current?.close());\n } else {\n SingleToast.ref.current?.close();\n }\n };\n\n /**\n * Показывает тост с `notification` в качестве сообщения.\n * Тост автоматически скрывается через 3 или 7 секунд,\n * в зависимости от наличия у него кнопки `action` внутри config-а.\n * Время показа можно задать вручную, передав `showTime` внутри config-а.\n *\n * @public\n * @param {React.ReactNode} notification\n * @param {ToastPushConfig} config объект с конфигурацией отображения компонента Toast\n *\n */\n public static push: ToastPushApi = (notification: React.ReactNode, config?: ToastPushConfig): void => {\n SingleToast.close();\n SingleToast.ref.current?.push(notification, config);\n };\n\n render = (): React.JSX.Element => <Toast ref={SingleToast.ref} {...this.props} />;\n}\n"]}
|
|
@@ -42,7 +42,7 @@ export declare const SpinnerDataTids: {
|
|
|
42
42
|
};
|
|
43
43
|
type DefaultProps = Required<Pick<SpinnerProps, 'type'>>;
|
|
44
44
|
/**
|
|
45
|
-
*
|
|
45
|
+
* Зацикленный индикатор, не отображающий прогресс выполнения задачи.
|
|
46
46
|
*/
|
|
47
47
|
export declare class Spinner extends React.Component<SpinnerProps> {
|
|
48
48
|
static __KONTUR_REACT_UI__: string;
|
|
@@ -52,7 +52,7 @@ export var SpinnerDataTids = {
|
|
|
52
52
|
root: 'Spinner__root',
|
|
53
53
|
};
|
|
54
54
|
/**
|
|
55
|
-
*
|
|
55
|
+
* Зацикленный индикатор, не отображающий прогресс выполнения задачи.
|
|
56
56
|
*/
|
|
57
57
|
var Spinner = /** @class */ (function (_super) {
|
|
58
58
|
__extends(Spinner, _super);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Spinner.js","sourceRoot":"","sources":["../../../components/Spinner/Spinner.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport React from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { SpinnerIcon } from '../../internal/SpinnerIcon/SpinnerIcon.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { getStyles } from './Spinner.styles.js';\n\nconst types = ['big', 'mini', 'normal'] as const;\n\nexport type SpinnerType = (typeof types)[number];\n\nexport interface SpinnerProps extends CommonProps {\n /**\n * Подпись спиннера\n */\n caption?: React.ReactNode;\n\n /**\n * Размер индикатора и текста\n *\n * @default normal\n */\n type?: SpinnerType;\n\n /**\n * Одноцветный режим. Удобная альтернатива пропа `dimmed`\n */\n color?: React.CSSProperties['color'];\n\n /**\n * Уменьшает размер индикатора для работы в строках. Если задан, то размер индикитора из `type` игнорируется\n *\n * @default false\n */\n inline?: boolean;\n\n /**\n * Толщина индикатора в пикселях.\n *\n * @default 2\n */\n width?: number;\n\n /**\n * Одноцветный режим. Цвет спиннера не переливается. Можно кастомизировать переменной `spinnerDimmedColor`\n *\n * @default false\n */\n dimmed?: boolean;\n}\n\nexport const SpinnerDataTids = {\n root: 'Spinner__root',\n} as const;\n\ntype DefaultProps = Required<Pick<SpinnerProps, 'type'>>;\n\n/**\n *
|
|
1
|
+
{"version":3,"file":"Spinner.js","sourceRoot":"","sources":["../../../components/Spinner/Spinner.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport React from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { SpinnerIcon } from '../../internal/SpinnerIcon/SpinnerIcon.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { getStyles } from './Spinner.styles.js';\n\nconst types = ['big', 'mini', 'normal'] as const;\n\nexport type SpinnerType = (typeof types)[number];\n\nexport interface SpinnerProps extends CommonProps {\n /**\n * Подпись спиннера\n */\n caption?: React.ReactNode;\n\n /**\n * Размер индикатора и текста\n *\n * @default normal\n */\n type?: SpinnerType;\n\n /**\n * Одноцветный режим. Удобная альтернатива пропа `dimmed`\n */\n color?: React.CSSProperties['color'];\n\n /**\n * Уменьшает размер индикатора для работы в строках. Если задан, то размер индикитора из `type` игнорируется\n *\n * @default false\n */\n inline?: boolean;\n\n /**\n * Толщина индикатора в пикселях.\n *\n * @default 2\n */\n width?: number;\n\n /**\n * Одноцветный режим. Цвет спиннера не переливается. Можно кастомизировать переменной `spinnerDimmedColor`\n *\n * @default false\n */\n dimmed?: boolean;\n}\n\nexport const SpinnerDataTids = {\n root: 'Spinner__root',\n} as const;\n\ntype DefaultProps = Required<Pick<SpinnerProps, 'type'>>;\n\n/**\n * Зацикленный индикатор, не отображающий прогресс выполнения задачи.\n */\n@withRenderEnvironment\n@rootNode\nexport class Spinner extends React.Component<SpinnerProps> {\n public static __KONTUR_REACT_UI__ = 'Spinner';\n public static displayName = 'Spinner';\n\n public static defaultProps: DefaultProps = {\n type: 'normal',\n };\n\n private getProps = createPropsGetter(Spinner.defaultProps);\n\n public static Types: Record<SpinnerType, SpinnerType> = Object.assign({}, ...types.map((type) => ({ [type]: type })));\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private theme!: Theme;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public render(): React.JSX.Element {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { caption = null, dimmed, inline } = this.props;\n const type = this.getProps().type;\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={SpinnerDataTids.root} className={this.styles.spinner()}>\n <span className={this.styles.inner()}>{this.renderSpinner(type, dimmed, inline)}</span>\n {caption && this.renderCaption(type, caption)}\n </div>\n </CommonWrapper>\n );\n }\n\n private renderSpinner = (type: SpinnerType, dimmed?: boolean, inline?: boolean) => {\n return (\n <SpinnerIcon\n size={type}\n className={this.cx({\n [this.styles.circle(this.theme)]: !dimmed && !this.props.color,\n [this.styles.circleDimmedColor(this.theme)]: dimmed,\n [this.styles.circleWithoutColorAnimation()]: dimmed || !!this.props.color,\n })}\n width={this.props.width}\n color={this.props.color}\n inline={inline}\n />\n );\n };\n\n private renderCaption = (type: SpinnerType, caption: React.ReactNode) => (\n <span className={this.cx(this.styles[type](this.theme), this.styles.captionColor(this.theme))}>{caption}</span>\n );\n}\n"]}
|
|
@@ -29,10 +29,6 @@ type DefaultProps = Required<Pick<StickyProps, 'offset'>>;
|
|
|
29
29
|
/**
|
|
30
30
|
* `Sticky` позволяет закреплять элемент интерфейса в определенной позиции на экране при прокрутке страницы.
|
|
31
31
|
* Это полезно для создания «прилипающих» элементов, которые должны оставаться видимыми при прокрутке содержимого.
|
|
32
|
-
*
|
|
33
|
-
* - `side` определяет край, к которому будет закрепляться элемент.
|
|
34
|
-
* - `offset` задаёт отступ от края экрана в пикселях, на который сдвигается элемент в закреплённом состоянии.
|
|
35
|
-
* - `getStop` задаёт функцию, которая возвращает DOM-элемент, который нельзя пересекать.
|
|
36
32
|
*/
|
|
37
33
|
export declare class Sticky extends React.Component<StickyProps, StickyState> {
|
|
38
34
|
static __KONTUR_REACT_UI__: string;
|
|
@@ -49,10 +49,6 @@ export var StickyDataTids = {
|
|
|
49
49
|
/**
|
|
50
50
|
* `Sticky` позволяет закреплять элемент интерфейса в определенной позиции на экране при прокрутке страницы.
|
|
51
51
|
* Это полезно для создания «прилипающих» элементов, которые должны оставаться видимыми при прокрутке содержимого.
|
|
52
|
-
*
|
|
53
|
-
* - `side` определяет край, к которому будет закрепляться элемент.
|
|
54
|
-
* - `offset` задаёт отступ от края экрана в пикселях, на который сдвигается элемент в закреплённом состоянии.
|
|
55
|
-
* - `getStop` задаёт функцию, которая возвращает DOM-элемент, который нельзя пересекать.
|
|
56
52
|
*/
|
|
57
53
|
var Sticky = /** @class */ (function (_super) {
|
|
58
54
|
__extends(Sticky, _super);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sticky.js","sourceRoot":"","sources":["../../../components/Sticky/Sticky.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,YAAY,MAAM,cAAc,CAAC;AACxC,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,KAAK,YAAY,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,IAAM,kBAAkB,GAAG,CAAC,CAAC;AA2B7B,MAAM,CAAC,IAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,cAAc;CACZ,CAAC;AAIX;;;;;;;GAOG;AAGH;IAA4B,0BAAyC;IAArE;;QAMU,cAAQ,GAAG,iBAAiB,CAAC,QAAM,CAAC,YAAY,CAAC,CAAC;QAEnD,WAAK,GAAgB;YAC1B,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,CAAC;SACf,CAAC;QAQM,wBAAkB,GAAqC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACxE,mBAAa,GAAG,CAAC,CAAC;QA2ElB,gBAAU,GAAG,UAAC,GAA0B;YAC9C,KAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACrB,CAAC,CAAC;QAEM,cAAQ,GAAG,UAAC,GAA0B;YAC5C,KAAI,CAAC,KAAK,GAAG,GAAG,CAAC;QACnB,CAAC,CAAC;QAEF;;;;WAIG;QACI,YAAM,GAAG;;YACd,IAAI,CAAC,CAAA,MAAA,KAAI,CAAC,YAAY,CAAC,QAAQ,0CAAE,eAAe,CAAA,EAAE,CAAC;gBACjD,OAAO,CAAC,KAAK,EAAE,2CAA2C,CAAC,CAAC;gBAC5D,OAAO;YACT,CAAC;YAED,IAAM,YAAY,GAAG,KAAI,CAAC,YAAY,CAAC,WAAW,IAAI,KAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC;YAC9G,IAAI,CAAC,KAAI,CAAC,OAAO,IAAI,CAAC,KAAI,CAAC,KAAK,EAAE,CAAC;gBACjC,OAAO;YACT,CAAC;YACK,IAAA,KAA+B,UAAU,CAAC,KAAI,CAAC,OAAO,CAAC,EAArD,GAAG,SAAA,EAAE,MAAM,YAAA,EAAE,IAAI,UAAA,EAAE,KAAK,WAA6B,CAAC;YACtD,IAAA,MAAM,GAAK,UAAU,CAAC,KAAI,CAAC,KAAK,CAAC,OAA3B,CAA4B;YACpC,IAAA,KAAoB,KAAI,CAAC,KAAK,EAA5B,OAAO,aAAA,EAAE,IAAI,UAAe,CAAC;YAC/B,IAAA,KAAoD,KAAI,CAAC,KAAK,EAArD,SAAS,WAAA,EAAE,cAA2B,EAAnB,UAAU,mBAAG,MAAM,KAAe,CAAC;YACrE,IAAM,MAAM,GAAG,KAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;YACtC,IAAM,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,YAAY,GAAG,MAAM,CAAC;YAEpG,KAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,OAAA,EAAE,IAAI,MAAA,EAAE,CAAC,CAAC;YAE/B,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;gBACxB,KAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAAC,CAAC;YACnC,CAAC;YAED,IAAI,KAAK,EAAE,CAAC;gBACV,KAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,OAAA,EAAE,CAAC,CAAC;gBACzB,IAAM,MAAI,GAAG,OAAO,IAAI,OAAO,EAAE,CAAC;gBAClC,IAAI,MAAI,EAAE,CAAC;oBACT,IAAM,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;oBACxC,IAAM,QAAQ,GAAG,UAAU,CAAC,MAAI,CAAC,CAAC;oBAClC,IAAM,aAAW,GAAG,MAAM,GAAG,MAAM,CAAC;oBACpC,IAAI,OAAO,GAAG,KAAK,CAAC;oBACpB,IAAI,WAAW,GAAG,CAAC,CAAC;oBAEpB,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;wBACnB,OAAO,GAAG,QAAQ,CAAC,GAAG,GAAG,aAAW,GAAG,CAAC,CAAC;wBACzC,WAAW,GAAG,QAAQ,CAAC,GAAG,GAAG,UAAU,GAAG,GAAG,CAAC;oBAChD,CAAC;yBAAM,CAAC;wBACN,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,aAAW,GAAG,YAAY,CAAC;wBACvD,WAAW,GAAG,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;oBACtC,CAAC;oBAED,KAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,aAAA,EAAE,WAAW,aAAA,EAAE,OAAO,SAAA,EAAE,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;QACH,CAAC,CAAC;;IACJ,CAAC;eA3JY,MAAM;IA0BV,kCAAiB,GAAxB;QACE,IAAI,CAAC,MAAM,EAAE,CAAC;QAEd,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACrF,CAAC;IAEM,qCAAoB,GAA3B;QACE,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;YACnC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IAEM,mCAAkB,GAAzB,UAA0B,SAAsB,EAAE,SAAsB;QACtE,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACjF,IAAI,IAAI,CAAC,aAAa,GAAG,kBAAkB,EAAE,CAAC;gBAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;gBACxB,OAAO;YACT,CAAC;QACH,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IACzB,CAAC;IAEM,uBAAM,GAAb;QACE,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;IAEO,2BAAU,GAAlB;;QACQ,IAAA,QAAQ,GAAK,IAAI,CAAC,KAAK,SAAf,CAAgB;QACtB,IAAA,IAAI,GAAK,IAAI,CAAC,KAAK,KAAf,CAAgB;QAC5B,IAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;QAChC,IAAA,KAAoE,IAAI,CAAC,KAAK,EAA5E,KAAK,WAAA,EAAE,OAAO,aAAA,EAAE,WAAW,iBAAA,EAAE,WAAW,iBAAA,EAAE,KAAK,WAAA,EAAE,MAAM,YAAA,EAAE,IAAI,UAAe,CAAC;QACrF,IAAM,UAAU,GAAwB,EAAE,CAAC;QAE3C,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,OAAO,EAAE,CAAC;gBACZ,UAAU,CAAC,GAAG,GAAG,WAAW,CAAC;gBAC7B,UAAU,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,WAAW,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;gBACzB,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;gBAC1B,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;YACzB,CAAC;QACH,CAAC;QAED,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,CACL,oBAAC,aAAa,aAAC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAM,IAAI,CAAC,KAAK;YAC1D,yCAAe,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;gBACxF,oBAAC,MAAM,IACL,QAAQ,EAAC,QAAQ,EACjB,WAAW,EAAE,KAAK,EAClB,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;wBACpC,GAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAG,KAAK,IAAI,CAAC,OAAO;wBACxC,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAG,OAAO;4BAChC,EACF,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,IAAI,CAAC,QAAQ;oBAEzB,6BAAK,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAG,QAAQ,CAAO,CAClD;gBACR,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,6BAAK,KAAK,EAAE,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,GAAI,CAAC,CAAC,CAAC,IAAI,CACzD,CACQ,CACjB,CAAC;IACJ,CAAC;;IA9Fa,0BAAmB,GAAG,QAAQ,AAAX,CAAY;IAC/B,kBAAW,GAAG,QAAQ,AAAX,CAAY;IAEvB,mBAAY,GAAiB,EAAE,MAAM,EAAE,CAAC,EAAE,AAA9B,CAA+B;IAJ9C,MAAM;QAFlB,qBAAqB;QACrB,QAAQ;OACI,MAAM,CA2JlB;IAAD,aAAC;CAAA,AA3JD,CAA4B,KAAK,CAAC,SAAS,GA2J1C;SA3JY,MAAM","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport React from 'react';\nimport shallowEqual from 'shallowequal';\nimport warning from 'warning';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { ZIndex } from '../../internal/ZIndex/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { getDOMRect } from '../../lib/dom/getDOMRect.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport * as LayoutEvents from '../../lib/LayoutEvents.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport { isFunction } from '../../lib/utils.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { getStyles } from './Sticky.styles.js';\n\nconst MAX_REFLOW_RETRIES = 5;\n\nexport interface StickyProps extends Omit<CommonProps, 'children'> {\n /** Край, к которому будет закреплен элемент. */\n side: 'top' | 'bottom';\n\n /** Отступ от края экрана в пикселях, на который сдвигается элемент в закреплённом состоянии.\n * @default 0 */\n offset?: number;\n\n /** Задаёт функцию, которая возвращает DOM-элемент, который нельзя пересекать. */\n getStop?: () => Nullable<HTMLElement>;\n\n /** @ignore */\n children?: React.ReactNode | ((fixed: boolean) => React.ReactNode);\n}\n\nexport interface StickyState {\n fixed: boolean;\n deltaHeight: number;\n height?: number;\n width?: number;\n left?: number;\n stopped: boolean;\n relativeTop: number;\n}\n\nexport const StickyDataTids = {\n root: 'Sticky__root',\n} as const;\n\ntype DefaultProps = Required<Pick<StickyProps, 'offset'>>;\n\n/**\n * `Sticky` позволяет закреплять элемент интерфейса в определенной позиции на экране при прокрутке страницы.\n * Это полезно для создания «прилипающих» элементов, которые должны оставаться видимыми при прокрутке содержимого.\n *\n * - `side` определяет край, к которому будет закрепляться элемент.\n * - `offset` задаёт отступ от края экрана в пикселях, на который сдвигается элемент в закреплённом состоянии.\n * - `getStop` задаёт функцию, которая возвращает DOM-элемент, который нельзя пересекать.\n */\n@withRenderEnvironment\n@rootNode\nexport class Sticky extends React.Component<StickyProps, StickyState> {\n public static __KONTUR_REACT_UI__ = 'Sticky';\n public static displayName = 'Sticky';\n\n public static defaultProps: DefaultProps = { offset: 0 };\n\n private getProps = createPropsGetter(Sticky.defaultProps);\n\n public state: StickyState = {\n fixed: false,\n deltaHeight: 0,\n stopped: false,\n relativeTop: 0,\n };\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private wrapper: Nullable<HTMLElement>;\n private inner: Nullable<HTMLElement>;\n private layoutSubscription: { remove: Nullable<() => void> } = { remove: null };\n private reflowCounter = 0;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n this.reflow();\n\n this.layoutSubscription = LayoutEvents.addListener(this.reflow, this.globalObject);\n }\n\n public componentWillUnmount() {\n if (this.layoutSubscription.remove) {\n this.layoutSubscription.remove();\n }\n }\n\n public componentDidUpdate(prevProps: StickyProps, prevState: StickyState) {\n if (!shallowEqual(prevProps, this.props) || !shallowEqual(prevState, this.state)) {\n if (this.reflowCounter < MAX_REFLOW_RETRIES) {\n this.reflow();\n this.reflowCounter += 1;\n return;\n }\n }\n this.reflowCounter = 0;\n }\n\n public render(): React.JSX.Element {\n this.styles = getStyles(this.emotion);\n return this.renderMain();\n }\n\n private renderMain() {\n let { children } = this.props;\n const { side } = this.props;\n const offset = this.getProps().offset;\n const { fixed, stopped, relativeTop, deltaHeight, width, height, left } = this.state;\n const innerStyle: React.CSSProperties = {};\n\n if (fixed) {\n if (stopped) {\n innerStyle.top = relativeTop;\n innerStyle[side === 'top' ? 'marginTop' : 'marginBottom'] = deltaHeight;\n } else {\n innerStyle.width = width;\n innerStyle[side] = offset;\n innerStyle.left = left;\n }\n }\n\n if (isFunction(children)) {\n children = children(fixed);\n }\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={StickyDataTids.root} ref={this.refWrapper} className={this.styles.wrapper()}>\n <ZIndex\n priority=\"Sticky\"\n applyZIndex={fixed}\n className={this.cx(this.styles.inner(), {\n [this.styles.fixed()]: fixed && !stopped,\n [this.styles.stopped()]: stopped,\n })}\n style={innerStyle}\n wrapperRef={this.refInner}\n >\n <div className={this.styles.container()}>{children}</div>\n </ZIndex>\n {fixed && !stopped ? <div style={{ width, height }} /> : null}\n </div>\n </CommonWrapper>\n );\n }\n\n private refWrapper = (ref: Nullable<HTMLElement>) => {\n this.wrapper = ref;\n };\n\n private refInner = (ref: Nullable<HTMLElement>) => {\n this.inner = ref;\n };\n\n /**\n * Пересчитать габариты и позицию залипшего элемента\n *\n * @public\n */\n public reflow = (): void => {\n if (!this.globalObject.document?.documentElement) {\n warning(false, 'There is no \"documentElement\" in document');\n return;\n }\n\n const windowHeight = this.globalObject.innerHeight || this.globalObject.document.documentElement.clientHeight;\n if (!this.wrapper || !this.inner) {\n return;\n }\n const { top, bottom, left, width } = getDOMRect(this.wrapper);\n const { height } = getDOMRect(this.inner);\n const { getStop, side } = this.props;\n const { fixed: prevFixed, height: prevHeight = height } = this.state;\n const offset = this.getProps().offset;\n const fixed = side === 'top' ? Math.ceil(top) < offset : Math.floor(bottom) > windowHeight - offset;\n\n this.setState({ fixed, left });\n\n if (fixed && !prevFixed) {\n this.setState({ width, height });\n }\n\n if (fixed) {\n this.setState({ width });\n const stop = getStop && getStop();\n if (stop) {\n const deltaHeight = prevHeight - height;\n const stopRect = getDOMRect(stop);\n const outerHeight = height + offset;\n let stopped = false;\n let relativeTop = 0;\n\n if (side === 'top') {\n stopped = stopRect.top - outerHeight < 0;\n relativeTop = stopRect.top - prevHeight - top;\n } else {\n stopped = stopRect.bottom + outerHeight > windowHeight;\n relativeTop = stopRect.bottom - top;\n }\n\n this.setState({ relativeTop, deltaHeight, stopped });\n }\n }\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Sticky.js","sourceRoot":"","sources":["../../../components/Sticky/Sticky.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport React from 'react';\nimport shallowEqual from 'shallowequal';\nimport warning from 'warning';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { ZIndex } from '../../internal/ZIndex/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { getDOMRect } from '../../lib/dom/getDOMRect.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport * as LayoutEvents from '../../lib/LayoutEvents.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport { isFunction } from '../../lib/utils.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { getStyles } from './Sticky.styles.js';\n\nconst MAX_REFLOW_RETRIES = 5;\n\nexport interface StickyProps extends Omit<CommonProps, 'children'> {\n /** Край, к которому будет закреплен элемент. */\n side: 'top' | 'bottom';\n\n /** Отступ от края экрана в пикселях, на который сдвигается элемент в закреплённом состоянии.\n * @default 0 */\n offset?: number;\n\n /** Задаёт функцию, которая возвращает DOM-элемент, который нельзя пересекать. */\n getStop?: () => Nullable<HTMLElement>;\n\n /** @ignore */\n children?: React.ReactNode | ((fixed: boolean) => React.ReactNode);\n}\n\nexport interface StickyState {\n fixed: boolean;\n deltaHeight: number;\n height?: number;\n width?: number;\n left?: number;\n stopped: boolean;\n relativeTop: number;\n}\n\nexport const StickyDataTids = {\n root: 'Sticky__root',\n} as const;\n\ntype DefaultProps = Required<Pick<StickyProps, 'offset'>>;\n\n/**\n * `Sticky` позволяет закреплять элемент интерфейса в определенной позиции на экране при прокрутке страницы.\n * Это полезно для создания «прилипающих» элементов, которые должны оставаться видимыми при прокрутке содержимого.\n */\n@withRenderEnvironment\n@rootNode\nexport class Sticky extends React.Component<StickyProps, StickyState> {\n public static __KONTUR_REACT_UI__ = 'Sticky';\n public static displayName = 'Sticky';\n\n public static defaultProps: DefaultProps = { offset: 0 };\n\n private getProps = createPropsGetter(Sticky.defaultProps);\n\n public state: StickyState = {\n fixed: false,\n deltaHeight: 0,\n stopped: false,\n relativeTop: 0,\n };\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private wrapper: Nullable<HTMLElement>;\n private inner: Nullable<HTMLElement>;\n private layoutSubscription: { remove: Nullable<() => void> } = { remove: null };\n private reflowCounter = 0;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n this.reflow();\n\n this.layoutSubscription = LayoutEvents.addListener(this.reflow, this.globalObject);\n }\n\n public componentWillUnmount() {\n if (this.layoutSubscription.remove) {\n this.layoutSubscription.remove();\n }\n }\n\n public componentDidUpdate(prevProps: StickyProps, prevState: StickyState) {\n if (!shallowEqual(prevProps, this.props) || !shallowEqual(prevState, this.state)) {\n if (this.reflowCounter < MAX_REFLOW_RETRIES) {\n this.reflow();\n this.reflowCounter += 1;\n return;\n }\n }\n this.reflowCounter = 0;\n }\n\n public render(): React.JSX.Element {\n this.styles = getStyles(this.emotion);\n return this.renderMain();\n }\n\n private renderMain() {\n let { children } = this.props;\n const { side } = this.props;\n const offset = this.getProps().offset;\n const { fixed, stopped, relativeTop, deltaHeight, width, height, left } = this.state;\n const innerStyle: React.CSSProperties = {};\n\n if (fixed) {\n if (stopped) {\n innerStyle.top = relativeTop;\n innerStyle[side === 'top' ? 'marginTop' : 'marginBottom'] = deltaHeight;\n } else {\n innerStyle.width = width;\n innerStyle[side] = offset;\n innerStyle.left = left;\n }\n }\n\n if (isFunction(children)) {\n children = children(fixed);\n }\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={StickyDataTids.root} ref={this.refWrapper} className={this.styles.wrapper()}>\n <ZIndex\n priority=\"Sticky\"\n applyZIndex={fixed}\n className={this.cx(this.styles.inner(), {\n [this.styles.fixed()]: fixed && !stopped,\n [this.styles.stopped()]: stopped,\n })}\n style={innerStyle}\n wrapperRef={this.refInner}\n >\n <div className={this.styles.container()}>{children}</div>\n </ZIndex>\n {fixed && !stopped ? <div style={{ width, height }} /> : null}\n </div>\n </CommonWrapper>\n );\n }\n\n private refWrapper = (ref: Nullable<HTMLElement>) => {\n this.wrapper = ref;\n };\n\n private refInner = (ref: Nullable<HTMLElement>) => {\n this.inner = ref;\n };\n\n /**\n * Пересчитать габариты и позицию залипшего элемента\n *\n * @public\n */\n public reflow = (): void => {\n if (!this.globalObject.document?.documentElement) {\n warning(false, 'There is no \"documentElement\" in document');\n return;\n }\n\n const windowHeight = this.globalObject.innerHeight || this.globalObject.document.documentElement.clientHeight;\n if (!this.wrapper || !this.inner) {\n return;\n }\n const { top, bottom, left, width } = getDOMRect(this.wrapper);\n const { height } = getDOMRect(this.inner);\n const { getStop, side } = this.props;\n const { fixed: prevFixed, height: prevHeight = height } = this.state;\n const offset = this.getProps().offset;\n const fixed = side === 'top' ? Math.ceil(top) < offset : Math.floor(bottom) > windowHeight - offset;\n\n this.setState({ fixed, left });\n\n if (fixed && !prevFixed) {\n this.setState({ width, height });\n }\n\n if (fixed) {\n this.setState({ width });\n const stop = getStop && getStop();\n if (stop) {\n const deltaHeight = prevHeight - height;\n const stopRect = getDOMRect(stop);\n const outerHeight = height + offset;\n let stopped = false;\n let relativeTop = 0;\n\n if (side === 'top') {\n stopped = stopRect.top - outerHeight < 0;\n relativeTop = stopRect.top - prevHeight - top;\n } else {\n stopped = stopRect.bottom + outerHeight > windowHeight;\n relativeTop = stopRect.bottom - top;\n }\n\n this.setState({ relativeTop, deltaHeight, stopped });\n }\n }\n };\n}\n"]}
|