@skbkontur/react-ui 4.0.3 → 4.0.6
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/CHANGELOG.md +42 -0
- package/cjs/components/Autocomplete/Autocomplete.d.ts +0 -1
- package/cjs/components/Autocomplete/Autocomplete.js +2 -9
- package/cjs/components/Autocomplete/Autocomplete.js.map +1 -1
- package/cjs/components/Button/Button.d.ts +2 -2
- package/cjs/components/Button/Button.js.map +1 -1
- package/cjs/components/Button/Button.styles.js +1 -1
- package/cjs/components/Button/Button.styles.js.map +1 -1
- package/cjs/components/Checkbox/Checkbox.d.ts +2 -2
- package/cjs/components/Checkbox/Checkbox.js.map +1 -1
- package/cjs/components/ComboBox/ComboBox.d.ts +3 -3
- package/cjs/components/ComboBox/ComboBox.js.map +1 -1
- package/cjs/components/CurrencyInput/CurrencyInput.d.ts +1 -1
- package/cjs/components/CurrencyInput/CurrencyInput.js +3 -3
- package/cjs/components/CurrencyInput/CurrencyInput.js.map +1 -1
- package/cjs/components/DateInput/DateInput.d.ts +2 -2
- package/cjs/components/DateInput/DateInput.js.map +1 -1
- package/cjs/components/DateInput/DateInput.styles.js +2 -2
- package/cjs/components/DateInput/DateInput.styles.js.map +1 -1
- package/cjs/components/DatePicker/DatePicker.d.ts +3 -3
- package/cjs/components/DatePicker/DatePicker.js.map +1 -1
- package/cjs/components/Dropdown/Dropdown.d.ts +2 -2
- package/cjs/components/Dropdown/Dropdown.js.map +1 -1
- package/cjs/components/Hint/Hint.d.ts +6 -2
- package/cjs/components/Hint/Hint.js +9 -1
- package/cjs/components/Hint/Hint.js.map +1 -1
- package/cjs/components/Input/Input.d.ts +3 -3
- package/cjs/components/Input/Input.js +1 -1
- package/cjs/components/Input/Input.js.map +1 -1
- package/cjs/components/Loader/Loader.js +7 -7
- package/cjs/components/Loader/Loader.js.map +1 -1
- package/cjs/components/Modal/Modal.d.ts +1 -1
- package/cjs/components/Modal/Modal.js +1 -1
- package/cjs/components/Modal/Modal.js.map +1 -1
- package/cjs/components/Modal/ModalFooter.js +0 -1
- package/cjs/components/Modal/ModalFooter.js.map +1 -1
- package/cjs/components/Modal/ModalHeader.js +0 -1
- package/cjs/components/Modal/ModalHeader.js.map +1 -1
- package/cjs/components/Radio/Radio.d.ts +2 -2
- package/cjs/components/Radio/Radio.js.map +1 -1
- package/cjs/components/RadioGroup/RadioGroup.d.ts +2 -2
- package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
- package/cjs/components/ResponsiveLayout/ResponsiveLayoutEvents.d.ts +1 -1
- package/cjs/components/ResponsiveLayout/ResponsiveLayoutEvents.js.map +1 -1
- package/cjs/components/ScrollContainer/ScrollContainer.js +3 -2
- package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
- package/cjs/components/Select/Select.d.ts +10 -8
- package/cjs/components/Select/Select.js +12 -2
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/SidePage/SidePage.d.ts +0 -1
- package/cjs/components/SidePage/SidePage.js +1 -15
- package/cjs/components/SidePage/SidePage.js.map +1 -1
- package/cjs/components/SidePage/SidePageFooter.js +4 -3
- package/cjs/components/SidePage/SidePageFooter.js.map +1 -1
- package/cjs/components/SidePage/SidePageHeader.js +3 -2
- package/cjs/components/SidePage/SidePageHeader.js.map +1 -1
- package/cjs/components/Sticky/Sticky.js +4 -3
- package/cjs/components/Sticky/Sticky.js.map +1 -1
- package/cjs/components/Switcher/Switcher.d.ts +2 -1
- package/cjs/components/Switcher/Switcher.js +1 -0
- package/cjs/components/Switcher/Switcher.js.map +1 -1
- package/cjs/components/Tabs/Indicator.js +2 -1
- package/cjs/components/Tabs/Indicator.js.map +1 -1
- package/cjs/components/Tabs/Tab.d.ts +2 -2
- package/cjs/components/Tabs/Tab.js.map +1 -1
- package/cjs/components/Tabs/Tabs.d.ts +3 -1
- package/cjs/components/Tabs/Tabs.js +8 -4
- package/cjs/components/Tabs/Tabs.js.map +1 -1
- package/cjs/components/Textarea/Textarea.d.ts +4 -4
- package/cjs/components/Textarea/Textarea.js.map +1 -1
- package/cjs/components/Toggle/Toggle.d.ts +2 -2
- package/cjs/components/Toggle/Toggle.js.map +1 -1
- package/cjs/components/Token/Token.d.ts +2 -2
- package/cjs/components/Token/Token.js.map +1 -1
- package/cjs/components/TokenInput/TextWidthHelper.js +2 -1
- package/cjs/components/TokenInput/TextWidthHelper.js.map +1 -1
- package/cjs/components/TokenInput/TokenInput.d.ts +2 -2
- package/cjs/components/TokenInput/TokenInput.js +1 -1
- package/cjs/components/TokenInput/TokenInput.js.map +1 -1
- package/cjs/components/Tooltip/Tooltip.d.ts +4 -2
- package/cjs/components/Tooltip/Tooltip.js +10 -7
- package/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/cjs/internal/BGRuler.js +3 -1
- package/cjs/internal/BGRuler.js.map +1 -1
- package/cjs/internal/CommonWrapper/CommonWrapper.d.ts +1 -0
- package/cjs/internal/CommonWrapper/CommonWrapper.js +15 -1
- package/cjs/internal/CommonWrapper/CommonWrapper.js.map +1 -1
- package/cjs/internal/ComponentTable.d.ts +4 -2
- package/cjs/internal/ComponentTable.js +1 -0
- package/cjs/internal/ComponentTable.js.map +1 -1
- package/cjs/internal/DateSelect/DateSelect.js +2 -1
- package/cjs/internal/DateSelect/DateSelect.js.map +1 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.js +5 -10
- package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
- package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js +3 -2
- package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js.map +1 -1
- package/cjs/internal/InternalMenu/InternalMenu.js +3 -2
- package/cjs/internal/InternalMenu/InternalMenu.js.map +1 -1
- package/cjs/internal/Popup/Popup.d.ts +1 -2
- package/cjs/internal/Popup/Popup.js +16 -13
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/cjs/internal/Popup/PopupHelper.js +4 -2
- package/cjs/internal/Popup/PopupHelper.js.map +1 -1
- package/cjs/internal/RenderContainer/RenderContainer.js +9 -0
- package/cjs/internal/RenderContainer/RenderContainer.js.map +1 -1
- package/cjs/internal/RenderContainer/RenderContainerTypes.d.ts +1 -0
- package/cjs/internal/TextWidthHelper/TextWidthHelper.js +3 -1
- package/cjs/internal/TextWidthHelper/TextWidthHelper.js.map +1 -1
- package/cjs/internal/ThemePlayground/CheckboxPlayground.js +1 -0
- package/cjs/internal/ThemePlayground/CheckboxPlayground.js.map +1 -1
- package/cjs/internal/ThemePlayground/RadioPlayground.js.map +1 -1
- package/cjs/internal/ThemePlayground/ThemeContextPlayground.js +3 -12
- package/cjs/internal/ThemePlayground/ThemeContextPlayground.js.map +1 -1
- package/cjs/internal/ThemePlayground/ThemeEditor.js +2 -0
- package/cjs/internal/ThemePlayground/ThemeEditor.js.map +1 -1
- package/cjs/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
- package/cjs/internal/themes/DefaultTheme.d.ts +1 -0
- package/cjs/internal/themes/DefaultTheme.js +3 -0
- package/cjs/internal/themes/DefaultTheme.js.map +1 -1
- package/cjs/lib/ConditionalHandler.d.ts +3 -2
- package/cjs/lib/ConditionalHandler.js +5 -3
- package/cjs/lib/ConditionalHandler.js.map +1 -1
- package/cjs/lib/InstanceWithAnchorElement.d.ts +5 -0
- package/cjs/lib/InstanceWithAnchorElement.js +9 -0
- package/cjs/lib/InstanceWithAnchorElement.js.map +1 -0
- package/cjs/lib/ModalStack.d.ts +1 -1
- package/cjs/lib/ModalStack.js.map +1 -1
- package/cjs/lib/SSRSafe.d.ts +1 -0
- package/cjs/lib/SSRSafe.js +9 -1
- package/cjs/lib/SSRSafe.js.map +1 -1
- package/cjs/lib/dom/getDOMRect.d.ts +5 -2
- package/cjs/lib/dom/getDOMRect.js +30 -18
- package/cjs/lib/dom/getDOMRect.js.map +1 -1
- package/cjs/lib/events/keyboard/KeyboardMapKeys.d.ts +2 -1
- package/cjs/lib/events/keyboard/KeyboardMapKeys.js +1 -0
- package/cjs/lib/events/keyboard/KeyboardMapKeys.js.map +1 -1
- package/cjs/lib/events/keyboard/extractCode.js.map +1 -1
- package/cjs/lib/rootNode/getRootNode.js +12 -9
- package/cjs/lib/rootNode/getRootNode.js.map +1 -1
- package/cjs/lib/rootNode/rootNodeDecorator.d.ts +11 -0
- package/cjs/lib/rootNode/rootNodeDecorator.js +32 -4
- package/cjs/lib/rootNode/rootNodeDecorator.js.map +1 -1
- package/cjs/lib/theming/ThemeFactory.d.ts +1 -1
- package/cjs/lib/theming/ThemeFactory.js +4 -3
- package/cjs/lib/theming/ThemeFactory.js.map +1 -1
- package/cjs/lib/theming/ThemeHelpers.d.ts +1 -0
- package/cjs/lib/theming/ThemeHelpers.js +11 -2
- package/cjs/lib/theming/ThemeHelpers.js.map +1 -1
- package/components/Autocomplete/Autocomplete/Autocomplete.js +2 -9
- package/components/Autocomplete/Autocomplete/Autocomplete.js.map +1 -1
- package/components/Autocomplete/Autocomplete.d.ts +0 -1
- package/components/Button/Button/Button.js.map +1 -1
- package/components/Button/Button.d.ts +2 -2
- package/components/Button/Button.styles/Button.styles.js +1 -1
- package/components/Button/Button.styles/Button.styles.js.map +1 -1
- package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
- package/components/Checkbox/Checkbox.d.ts +2 -2
- package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
- package/components/ComboBox/ComboBox.d.ts +3 -3
- package/components/CurrencyInput/CurrencyInput/CurrencyInput.js +3 -3
- package/components/CurrencyInput/CurrencyInput/CurrencyInput.js.map +1 -1
- package/components/CurrencyInput/CurrencyInput.d.ts +1 -1
- package/components/DateInput/DateInput/DateInput.js.map +1 -1
- package/components/DateInput/DateInput.d.ts +2 -2
- package/components/DateInput/DateInput.styles/DateInput.styles.js +2 -2
- package/components/DateInput/DateInput.styles/DateInput.styles.js.map +1 -1
- package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +3 -3
- package/components/Dropdown/Dropdown/Dropdown.js.map +1 -1
- package/components/Dropdown/Dropdown.d.ts +2 -2
- package/components/Hint/Hint/Hint.js +9 -1
- package/components/Hint/Hint/Hint.js.map +1 -1
- package/components/Hint/Hint.d.ts +6 -2
- package/components/Input/Input/Input.js +1 -1
- package/components/Input/Input/Input.js.map +1 -1
- package/components/Input/Input.d.ts +3 -3
- package/components/Loader/Loader/Loader.js +11 -12
- package/components/Loader/Loader/Loader.js.map +1 -1
- package/components/Modal/Modal/Modal.js +1 -1
- package/components/Modal/Modal/Modal.js.map +1 -1
- package/components/Modal/Modal.d.ts +1 -1
- package/components/Modal/ModalFooter/ModalFooter.js +1 -1
- package/components/Modal/ModalFooter/ModalFooter.js.map +1 -1
- package/components/Modal/ModalHeader/ModalHeader.js +1 -1
- package/components/Modal/ModalHeader/ModalHeader.js.map +1 -1
- package/components/Radio/Radio/Radio.js.map +1 -1
- package/components/Radio/Radio.d.ts +2 -2
- package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
- package/components/RadioGroup/RadioGroup.d.ts +2 -2
- package/components/ResponsiveLayout/ResponsiveLayoutEvents/ResponsiveLayoutEvents.js.map +1 -1
- package/components/ResponsiveLayout/ResponsiveLayoutEvents.d.ts +1 -1
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +3 -2
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
- package/components/Select/Select/Select.js +12 -6
- package/components/Select/Select/Select.js.map +1 -1
- package/components/Select/Select.d.ts +10 -8
- package/components/SidePage/SidePage/SidePage.js +0 -19
- package/components/SidePage/SidePage/SidePage.js.map +1 -1
- package/components/SidePage/SidePage.d.ts +0 -1
- package/components/SidePage/SidePageFooter/SidePageFooter.js +4 -4
- package/components/SidePage/SidePageFooter/SidePageFooter.js.map +1 -1
- package/components/SidePage/SidePageHeader/SidePageHeader.js +3 -3
- package/components/SidePage/SidePageHeader/SidePageHeader.js.map +1 -1
- package/components/Sticky/Sticky/Sticky.js +9 -8
- package/components/Sticky/Sticky/Sticky.js.map +1 -1
- package/components/Switcher/Switcher/Switcher.js.map +1 -1
- package/components/Switcher/Switcher.d.ts +2 -1
- package/components/Tabs/Indicator/Indicator.js +2 -1
- package/components/Tabs/Indicator/Indicator.js.map +1 -1
- package/components/Tabs/Tab/Tab.js.map +1 -1
- package/components/Tabs/Tab.d.ts +2 -2
- package/components/Tabs/Tabs/Tabs.js.map +1 -1
- package/components/Tabs/Tabs.d.ts +3 -1
- package/components/Textarea/Textarea/Textarea.js.map +1 -1
- package/components/Textarea/Textarea.d.ts +4 -4
- package/components/Toggle/Toggle/Toggle.js.map +1 -1
- package/components/Toggle/Toggle.d.ts +2 -2
- package/components/Token/Token/Token.js.map +1 -1
- package/components/Token/Token.d.ts +2 -2
- package/components/TokenInput/TextWidthHelper/TextWidthHelper.js +3 -2
- package/components/TokenInput/TextWidthHelper/TextWidthHelper.js.map +1 -1
- package/components/TokenInput/TokenInput/TokenInput.js +1 -1
- package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
- package/components/TokenInput/TokenInput.d.ts +2 -2
- package/components/Tooltip/Tooltip/Tooltip.js +11 -8
- package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
- package/components/Tooltip/Tooltip.d.ts +4 -2
- package/internal/BGRuler/BGRuler.js +2 -1
- package/internal/BGRuler/BGRuler.js.map +1 -1
- package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js +17 -3
- package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js.map +1 -1
- package/internal/CommonWrapper/CommonWrapper.d.ts +1 -0
- package/internal/ComponentTable/ComponentTable.js.map +1 -1
- package/internal/ComponentTable.d.ts +4 -2
- package/internal/DateSelect/DateSelect/DateSelect.js +2 -1
- package/internal/DateSelect/DateSelect/DateSelect.js.map +1 -1
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js +5 -12
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js +3 -2
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js.map +1 -1
- package/internal/InternalMenu/InternalMenu/InternalMenu.js +2 -1
- package/internal/InternalMenu/InternalMenu/InternalMenu.js.map +1 -1
- package/internal/Popup/Popup/Popup.js +22 -21
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/internal/Popup/Popup.d.ts +1 -2
- package/internal/Popup/PopupHelper/PopupHelper.js +3 -1
- package/internal/Popup/PopupHelper/PopupHelper.js.map +1 -1
- package/internal/RenderContainer/RenderContainer/RenderContainer.js +9 -0
- package/internal/RenderContainer/RenderContainer/RenderContainer.js.map +1 -1
- package/internal/RenderContainer/RenderContainerTypes.d.ts +1 -0
- package/internal/TextWidthHelper/TextWidthHelper/TextWidthHelper.js +3 -4
- package/internal/TextWidthHelper/TextWidthHelper/TextWidthHelper.js.map +1 -1
- package/internal/ThemePlayground/CheckboxPlayground/CheckboxPlayground.js.map +1 -1
- package/internal/ThemePlayground/RadioPlayground/RadioPlayground.js.map +1 -1
- package/internal/ThemePlayground/ThemeContextPlayground/ThemeContextPlayground.js +2 -11
- package/internal/ThemePlayground/ThemeContextPlayground/ThemeContextPlayground.js.map +1 -1
- package/internal/ThemePlayground/ThemeEditor/ThemeEditor.js.map +1 -1
- package/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
- package/internal/themes/DefaultTheme/DefaultTheme.js +5 -0
- package/internal/themes/DefaultTheme/DefaultTheme.js.map +1 -1
- package/internal/themes/DefaultTheme.d.ts +1 -0
- package/lib/ConditionalHandler/ConditionalHandler.js.map +1 -1
- package/lib/ConditionalHandler.d.ts +3 -2
- package/lib/InstanceWithAnchorElement/InstanceWithAnchorElement.js +3 -0
- package/lib/InstanceWithAnchorElement/InstanceWithAnchorElement.js.map +1 -0
- package/lib/InstanceWithAnchorElement/package.json +6 -0
- package/lib/InstanceWithAnchorElement.d.ts +5 -0
- package/lib/ModalStack/ModalStack.js.map +1 -1
- package/lib/ModalStack.d.ts +1 -1
- package/lib/SSRSafe/SSRSafe.js +7 -0
- package/lib/SSRSafe/SSRSafe.js.map +1 -1
- package/lib/SSRSafe.d.ts +1 -0
- package/lib/dom/getDOMRect/getDOMRect.js +32 -15
- package/lib/dom/getDOMRect/getDOMRect.js.map +1 -1
- package/lib/dom/getDOMRect.d.ts +5 -2
- package/lib/events/keyboard/KeyboardMapKeys/KeyboardMapKeys.js.map +1 -1
- package/lib/events/keyboard/KeyboardMapKeys.d.ts +2 -1
- package/lib/events/keyboard/extractCode/extractCode.js.map +1 -1
- package/lib/rootNode/getRootNode/getRootNode.js +10 -10
- package/lib/rootNode/getRootNode/getRootNode.js.map +1 -1
- package/lib/rootNode/rootNodeDecorator/rootNodeDecorator.js +24 -2
- package/lib/rootNode/rootNodeDecorator/rootNodeDecorator.js.map +1 -1
- package/lib/rootNode/rootNodeDecorator.d.ts +11 -0
- package/lib/theming/ThemeFactory/ThemeFactory.js +3 -2
- package/lib/theming/ThemeFactory/ThemeFactory.js.map +1 -1
- package/lib/theming/ThemeFactory.d.ts +1 -1
- package/lib/theming/ThemeHelpers/ThemeHelpers.js +10 -1
- package/lib/theming/ThemeHelpers/ThemeHelpers.js.map +1 -1
- package/lib/theming/ThemeHelpers.d.ts +1 -0
- package/package.json +4 -2
package/cjs/internal/BGRuler.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.BGRuler = void 0;var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _react = _interopRequireDefault(require("react"));
|
|
2
2
|
|
|
3
|
+
var _getDOMRect = require("../lib/dom/getDOMRect");
|
|
4
|
+
|
|
3
5
|
/**
|
|
4
6
|
* Компонент рисует пиксельную линейку на заднем фоне.
|
|
5
7
|
* Помогает контролировать размеры элементов при скриншотном тестировании.
|
|
@@ -125,4 +127,4 @@ BGRuler = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default)
|
|
|
125
127
|
|
|
126
128
|
iframeRef = function (ref) {
|
|
127
129
|
_this.iframe = ref;
|
|
128
|
-
};return _this;}var _proto = BGRuler.prototype;_proto.render = function render() {var _this$props = this.props,width = _this$props.width,height = _this$props.height,color = _this$props.color,top = _this$props.top,bottom = _this$props.bottom,left = _this$props.left,right = _this$props.right;var wrapper = { position: 'absolute', width: width, height: height, top: top, bottom: bottom, left: left, right: right, overflow: 'hidden' };var iframe = { position: 'absolute', width: '100%', height: '100%', border: 0, visibility: 'hidden' };var marks = { position: 'absolute', top: 0, left: 0, width: '100%', backgroundSize: '100px 20px', backgroundRepeat: 'repeat-x' };var highMarks = (0, _extends2.default)({}, marks, { height: '100%', backgroundImage: "linear-gradient(90deg, " + color + " 0, " + color + " 1px, transparent 1px)" });var middleMarks = (0, _extends2.default)({}, marks, { height: '75%', backgroundImage: "linear-gradient(90deg, transparent 0, transparent 49px, " + color + " 49px, " + color + " 50px, transparent 50px)" });var shortMarks = (0, _extends2.default)({}, marks, { height: '40%', backgroundImage: "\n linear-gradient(90deg, transparent 0, transparent 9px, " + color + " 9px, " + color + " 10px, transparent 10px),\n linear-gradient(90deg, transparent 0, transparent 19px, " + color + " 19px, " + color + " 20px, transparent 20px),\n linear-gradient(90deg, transparent 0, transparent 29px, " + color + " 29px, " + color + " 30px, transparent 30px),\n linear-gradient(90deg, transparent 0, transparent 39px, " + color + " 39px, " + color + " 40px, transparent 40px),\n linear-gradient(90deg, transparent 0, transparent 59px, " + color + " 59px, " + color + " 60px, transparent 60px),\n linear-gradient(90deg, transparent 0, transparent 69px, " + color + " 69px, " + color + " 70px, transparent 70px),\n linear-gradient(90deg, transparent 0, transparent 79px, " + color + " 79px, " + color + " 80px, transparent 80px),\n linear-gradient(90deg, transparent 0, transparent 89px, " + color + " 89px, " + color + " 90px, transparent 90px)\n " });var rulerWidth =
|
|
130
|
+
};return _this;}var _proto = BGRuler.prototype;_proto.render = function render() {var _this$props = this.props,width = _this$props.width,height = _this$props.height,color = _this$props.color,top = _this$props.top,bottom = _this$props.bottom,left = _this$props.left,right = _this$props.right;var wrapper = { position: 'absolute', width: width, height: height, top: top, bottom: bottom, left: left, right: right, overflow: 'hidden' };var iframe = { position: 'absolute', width: '100%', height: '100%', border: 0, visibility: 'hidden' };var marks = { position: 'absolute', top: 0, left: 0, width: '100%', backgroundSize: '100px 20px', backgroundRepeat: 'repeat-x' };var highMarks = (0, _extends2.default)({}, marks, { height: '100%', backgroundImage: "linear-gradient(90deg, " + color + " 0, " + color + " 1px, transparent 1px)" });var middleMarks = (0, _extends2.default)({}, marks, { height: '75%', backgroundImage: "linear-gradient(90deg, transparent 0, transparent 49px, " + color + " 49px, " + color + " 50px, transparent 50px)" });var shortMarks = (0, _extends2.default)({}, marks, { height: '40%', backgroundImage: "\n linear-gradient(90deg, transparent 0, transparent 9px, " + color + " 9px, " + color + " 10px, transparent 10px),\n linear-gradient(90deg, transparent 0, transparent 19px, " + color + " 19px, " + color + " 20px, transparent 20px),\n linear-gradient(90deg, transparent 0, transparent 29px, " + color + " 29px, " + color + " 30px, transparent 30px),\n linear-gradient(90deg, transparent 0, transparent 39px, " + color + " 39px, " + color + " 40px, transparent 40px),\n linear-gradient(90deg, transparent 0, transparent 59px, " + color + " 59px, " + color + " 60px, transparent 60px),\n linear-gradient(90deg, transparent 0, transparent 69px, " + color + " 69px, " + color + " 70px, transparent 70px),\n linear-gradient(90deg, transparent 0, transparent 79px, " + color + " 79px, " + color + " 80px, transparent 80px),\n linear-gradient(90deg, transparent 0, transparent 89px, " + color + " 89px, " + color + " 90px, transparent 90px)\n " });var rulerWidth = (0, _getDOMRect.getDOMRect)(this.iframe).width;var labels = Array(Math.ceil(rulerWidth / 100) + 1).fill(null).map(function (value, index) {var label = { position: 'absolute', fontFamily: 'Arial', fontSize: 10, lineHeight: 1, color: color, bottom: -1, left: index * 100 + 5 };return /*#__PURE__*/_react.default.createElement("span", { key: index, style: label }, index * 100);});return /*#__PURE__*/_react.default.createElement("div", { style: wrapper }, /*#__PURE__*/_react.default.createElement("div", { style: highMarks }), /*#__PURE__*/_react.default.createElement("div", { style: middleMarks }), /*#__PURE__*/_react.default.createElement("div", { style: shortMarks }), labels, /*#__PURE__*/_react.default.createElement("iframe", { title: "BGRuler", style: iframe, ref: this.iframeRef }));};return BGRuler;}(_react.default.Component);exports.BGRuler = BGRuler;BGRuler.defaultProps = { height: 20, top: 0, left: 0, right: 0, color: '#333' };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["BGRuler.tsx"],"names":["BGRuler","iframe","componentDidMount","contentWindow","addEventListener","update","componentWillUnmount","removeEventListener","forceUpdate","iframeRef","ref","render","props","width","height","color","top","bottom","left","right","wrapper","position","overflow","border","visibility","marks","backgroundSize","backgroundRepeat","highMarks","backgroundImage","middleMarks","shortMarks","rulerWidth","
|
|
1
|
+
{"version":3,"sources":["BGRuler.tsx"],"names":["BGRuler","iframe","componentDidMount","contentWindow","addEventListener","update","componentWillUnmount","removeEventListener","forceUpdate","iframeRef","ref","render","props","width","height","color","top","bottom","left","right","wrapper","position","overflow","border","visibility","marks","backgroundSize","backgroundRepeat","highMarks","backgroundImage","middleMarks","shortMarks","rulerWidth","labels","Array","Math","ceil","fill","map","value","index","label","fontFamily","fontSize","lineHeight","React","Component","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { getDOMRect } from '../lib/dom/getDOMRect';\n\n/**\n * Компонент рисует пиксельную линейку на заднем фоне.\n * Помогает контролировать размеры элементов при скриншотном тестировании.\n *\n * @see FxInput/__stories__/FxInput.stories.tsx\n */\nexport class BGRuler extends React.Component<{\n width?: string | number;\n height?: string | number;\n top?: string | number;\n bottom?: string | number;\n right?: string | number;\n left?: string | number;\n color?: string;\n}> {\n public static defaultProps = {\n height: 20,\n top: 0,\n left: 0,\n right: 0,\n color: '#333',\n };\n\n private iframe: HTMLIFrameElement | null = null;\n\n public componentDidMount = () => {\n if (this.iframe && this.iframe.contentWindow) {\n this.iframe.contentWindow.addEventListener('resize', this.update, true);\n }\n this.update();\n };\n\n public componentWillUnmount = () => {\n if (this.iframe && this.iframe.contentWindow) {\n this.iframe.contentWindow.removeEventListener('resize', this.update, true);\n }\n };\n\n public update = () => {\n this.forceUpdate();\n };\n\n public render() {\n const { width, height, color, top, bottom, left, right } = this.props;\n const wrapper: React.CSSProperties = {\n position: 'absolute',\n width,\n height,\n top,\n bottom,\n left,\n right,\n overflow: 'hidden',\n };\n const iframe: React.CSSProperties = {\n position: 'absolute',\n width: '100%',\n height: '100%',\n border: 0,\n visibility: 'hidden',\n };\n const marks: React.CSSProperties = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n backgroundSize: '100px 20px',\n backgroundRepeat: 'repeat-x',\n };\n const highMarks: React.CSSProperties = {\n ...marks,\n height: '100%',\n backgroundImage: `linear-gradient(90deg, ${color} 0, ${color} 1px, transparent 1px)`,\n };\n const middleMarks: React.CSSProperties = {\n ...marks,\n height: '75%',\n backgroundImage: `linear-gradient(90deg, transparent 0, transparent 49px, ${color} 49px, ${color} 50px, transparent 50px)`,\n };\n const shortMarks: React.CSSProperties = {\n ...marks,\n height: '40%',\n backgroundImage: `\n linear-gradient(90deg, transparent 0, transparent 9px, ${color} 9px, ${color} 10px, transparent 10px),\n linear-gradient(90deg, transparent 0, transparent 19px, ${color} 19px, ${color} 20px, transparent 20px),\n linear-gradient(90deg, transparent 0, transparent 29px, ${color} 29px, ${color} 30px, transparent 30px),\n linear-gradient(90deg, transparent 0, transparent 39px, ${color} 39px, ${color} 40px, transparent 40px),\n linear-gradient(90deg, transparent 0, transparent 59px, ${color} 59px, ${color} 60px, transparent 60px),\n linear-gradient(90deg, transparent 0, transparent 69px, ${color} 69px, ${color} 70px, transparent 70px),\n linear-gradient(90deg, transparent 0, transparent 79px, ${color} 79px, ${color} 80px, transparent 80px),\n linear-gradient(90deg, transparent 0, transparent 89px, ${color} 89px, ${color} 90px, transparent 90px)\n `,\n };\n const rulerWidth = getDOMRect(this.iframe).width;\n const labels = Array(Math.ceil(rulerWidth / 100) + 1)\n .fill(null)\n .map((value, index) => {\n const label: React.CSSProperties = {\n position: 'absolute',\n fontFamily: 'Arial',\n fontSize: 10,\n lineHeight: 1,\n color,\n bottom: -1,\n left: index * 100 + 5,\n };\n return (\n <span key={index} style={label}>\n {index * 100}\n </span>\n );\n });\n return (\n <div style={wrapper}>\n <div style={highMarks} />\n <div style={middleMarks} />\n <div style={shortMarks} />\n {labels}\n <iframe title=\"BGRuler\" style={iframe} ref={this.iframeRef} />\n </div>\n );\n }\n\n private iframeRef = (ref: HTMLIFrameElement | null) => {\n this.iframe = ref;\n };\n}\n"]}
|
|
@@ -25,6 +25,7 @@ export declare type CommonWrapperRestProps<P> = Omit<NotCommonProps<P>, 'childre
|
|
|
25
25
|
export declare class CommonWrapper<P extends CommonProps & CommonPropsRootNodeRef> extends React.Component<CommonWrapperProps<P> & CommonPropsRootNodeRef> {
|
|
26
26
|
private child;
|
|
27
27
|
private setRootNode;
|
|
28
|
+
private rootNodeSubscription;
|
|
28
29
|
render(): React.ReactNode;
|
|
29
30
|
private ref;
|
|
30
31
|
}
|
|
@@ -38,6 +38,7 @@ CommonWrapper = (0, _rootNode.rootNode)(_class = /*#__PURE__*/function (_React$C
|
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
|
|
41
|
+
rootNodeSubscription = null;_this.
|
|
41
42
|
|
|
42
43
|
|
|
43
44
|
|
|
@@ -55,9 +56,22 @@ CommonWrapper = (0, _rootNode.rootNode)(_class = /*#__PURE__*/function (_React$C
|
|
|
55
56
|
|
|
56
57
|
|
|
57
58
|
|
|
58
|
-
ref = function (instance) {var _this$child;
|
|
59
|
+
ref = function (instance) {var _this$rootNodeSubscri, _this$child;
|
|
59
60
|
_this.setRootNode(instance);
|
|
60
61
|
_this.props.rootNodeRef == null ? void 0 : _this.props.rootNodeRef((0, _rootNode.getRootNode)(instance));
|
|
62
|
+
|
|
63
|
+
// refs are called when instances change
|
|
64
|
+
// so we have to renew or remove old subscription
|
|
65
|
+
(_this$rootNodeSubscri = _this.rootNodeSubscription) == null ? void 0 : _this$rootNodeSubscri.remove();
|
|
66
|
+
_this.rootNodeSubscription = null;
|
|
67
|
+
|
|
68
|
+
if (instance && (0, _rootNode.isInstanceWithRootNode)(instance)) {
|
|
69
|
+
_this.rootNodeSubscription = instance.addRootNodeChangeListener == null ? void 0 : instance.addRootNodeChangeListener(function (node) {
|
|
70
|
+
_this.setRootNode(node);
|
|
71
|
+
_this.props.rootNodeRef == null ? void 0 : _this.props.rootNodeRef(node);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
61
75
|
var originalRef = (_this$child = _this.child) == null ? void 0 : _this$child.ref;
|
|
62
76
|
originalRef && (0, _callChildRef.callChildRef)(originalRef, instance);
|
|
63
77
|
};return _this;}var _proto = CommonWrapper.prototype;_proto.render = function render() {var _extractCommonProps = extractCommonProps(this.props),_extractCommonProps$ = _extractCommonProps[0],className = _extractCommonProps$.className,style = _extractCommonProps$.style,rootNodeRef = _extractCommonProps$.rootNodeRef,dataProps = (0, _objectWithoutPropertiesLoose2.default)(_extractCommonProps$, _excluded),_extractCommonProps$2 = _extractCommonProps[1],children = _extractCommonProps$2.children,rest = (0, _objectWithoutPropertiesLoose2.default)(_extractCommonProps$2, _excluded2);this.child = (0, _utils.isFunction)(children) ? children(rest) : children;return /*#__PURE__*/_react.default.isValidElement(this.child) ? /*#__PURE__*/_react.default.cloneElement(this.child, (0, _extends2.default)({ ref: (0, _utils.isRefableElement)(this.child) ? this.ref : null, className: (0, _Emotion.cx)(this.child.props.className, className), style: (0, _extends2.default)({}, this.child.props.style, style) }, dataProps)) : this.child;};return CommonWrapper;}(_react.default.Component)) || _class;exports.CommonWrapper = CommonWrapper;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["CommonWrapper.tsx"],"names":["CommonWrapper","rootNode","ref","instance","setRootNode","props","rootNodeRef","originalRef","child","render","extractCommonProps","className","style","dataProps","children","rest","isValidElement","React","cloneElement","Component","common","key","isCommonProp","name","indexOf"],"mappings":"ucAAA;;AAEA;AACA;;AAEA;AACA,mE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BaA,a,OADZC,kB
|
|
1
|
+
{"version":3,"sources":["CommonWrapper.tsx"],"names":["CommonWrapper","rootNode","rootNodeSubscription","ref","instance","setRootNode","props","rootNodeRef","remove","addRootNodeChangeListener","node","originalRef","child","render","extractCommonProps","className","style","dataProps","children","rest","isValidElement","React","cloneElement","Component","common","key","isCommonProp","name","indexOf"],"mappings":"ucAAA;;AAEA;AACA;;AAEA;AACA,mE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BaA,a,OADZC,kB;;;;;AAMSC,IAAAA,oB,GAAwD,I;;;;;;;;;;;;;;;;;;AAkBxDC,IAAAA,G,GAAM,UAACC,QAAD,EAA6C;AACzD,YAAKC,WAAL,CAAiBD,QAAjB;AACA,YAAKE,KAAL,CAAWC,WAAX,0BAAKD,KAAL,CAAWC,WAAX,CAAyB,2BAAYH,QAAZ,CAAzB;;AAEA;AACA;AACA,qCAAKF,oBAAL,2CAA2BM,MAA3B;AACA,YAAKN,oBAAL,GAA4B,IAA5B;;AAEA,UAAIE,QAAQ,IAAI,sCAAuBA,QAAvB,CAAhB,EAAkD;AAChD,cAAKF,oBAAL,GAA4BE,QAAQ,CAACK,yBAArC,oBAA4BL,QAAQ,CAACK,yBAAT,CAAqC,UAACC,IAAD,EAAU;AACzE,gBAAKL,WAAL,CAAiBK,IAAjB;AACA,gBAAKJ,KAAL,CAAWC,WAAX,0BAAKD,KAAL,CAAWC,WAAX,CAAyBG,IAAzB;AACD,SAH2B,CAA5B;AAID;;AAED,UAAMC,WAAW,kBAAI,MAAKC,KAAT,qBAAG,YAA0CT,GAA9D;AACAQ,MAAAA,WAAW,IAAI,gCAAaA,WAAb,EAA0BP,QAA1B,CAAf;AACD,K,2DAlCDS,M,GAAA,kBAAS,CACP,0BAAiFC,kBAAkB,CAAC,KAAKR,KAAN,CAAnG,+CAASS,SAAT,wBAASA,SAAT,CAAoBC,KAApB,wBAAoBA,KAApB,CAA2BT,WAA3B,wBAA2BA,WAA3B,CAA2CU,SAA3C,+HAA0DC,QAA1D,yBAA0DA,QAA1D,CAAuEC,IAAvE,kFACA,KAAKP,KAAL,GAAa,uBAAWM,QAAX,IAAuBA,QAAQ,CAACC,IAAD,CAA/B,GAAwCD,QAArD,CACA,OAAO,4BAAME,cAAN,CAA6D,KAAKR,KAAlE,iBACHS,eAAMC,YAAN,CAAmB,KAAKV,KAAxB,2BACET,GAAG,EAAE,6BAAiB,KAAKS,KAAtB,IAA+B,KAAKT,GAApC,GAA0C,IADjD,EAEEY,SAAS,EAAE,iBAAG,KAAKH,KAAL,CAAWN,KAAX,CAAiBS,SAApB,EAA+BA,SAA/B,CAFb,EAGEC,KAAK,6BACA,KAAKJ,KAAL,CAAWN,KAAX,CAAiBU,KADjB,EAEAA,KAFA,CAHP,IAOKC,SAPL,EADG,GAUH,KAAKL,KAVT,CAWD,C,wBArBgFS,eAAME,S;;;AA4CzF,IAAMT,kBAAkB,GAAG,SAArBA,kBAAqB;AACzBR,KADyB;AAEqC;AAC9D,MAAMkB,MAAM,GAAG,EAAf;AACA,MAAML,IAAI,GAAG,EAAb;;AAEA,OAAK,IAAMM,GAAX,IAAkBnB,KAAlB,EAAyB;AACvB,QAAIoB,YAAY,CAACD,GAAD,CAAhB,EAAuB;AACrB;AACAD,MAAAA,MAAM,CAACC,GAAD,CAAN,GAAcnB,KAAK,CAACmB,GAAD,CAAnB;AACD,KAHD,MAGO;AACL;AACAN,MAAAA,IAAI,CAACM,GAAD,CAAJ,GAAYnB,KAAK,CAACmB,GAAD,CAAjB;AACD;AACF;;AAED,SAAO,CAACD,MAAD,EAASL,IAAT,CAAP;AACD,CAjBD;;AAmBA,IAAMO,YAAY,GAAG,SAAfA,YAAe,CAACC,IAAD,EAAkB;AACrC,UAAQ,IAAR;AACE,SAAKA,IAAI,IAAI,WAAb;AACA,SAAKA,IAAI,IAAI,OAAb;AACA,SAAKA,IAAI,IAAI,aAAb;AACA,SAAKA,IAAI,CAACC,OAAL,CAAa,OAAb,MAA0B,CAA/B,EAAkC;AAChC,aAAO,IAAP;AACF;AACE,aAAO,KAAP,CAPJ;;AASD,CAVD","sourcesContent":["import React from 'react';\n\nimport { isFunction, isRefableElement } from '../../lib/utils';\nimport { cx } from '../../lib/theming/Emotion';\nimport { Nullable } from '../../typings/utility-types';\nimport { getRootNode, rootNode, TSetRootNode, TRootNodeSubscription, isInstanceWithRootNode } from '../../lib/rootNode';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\n\nexport interface CommonProps {\n /**\n * HTML-атрибут `class`.\n */\n className?: React.HTMLAttributes<HTMLElement>['className'];\n /**\n * HTML-атрибут `style`.\n */\n style?: React.HTMLAttributes<HTMLElement>['style'];\n /**\n * На равне с data-tid транслируются любые data-атрибуты. Они попадают на корневой элемент.\n */\n 'data-tid'?: string;\n}\n\ninterface CommonPropsRootNodeRef {\n rootNodeRef?: (instance: Nullable<HTMLElement>) => void;\n}\n\nexport type NotCommonProps<P> = Omit<P, keyof CommonProps>;\n\nexport type CommonWrapperProps<P> = P & {\n children: React.ReactNode | ((rest: CommonWrapperRestProps<P>) => React.ReactNode);\n};\nexport type CommonWrapperRestProps<P> = Omit<NotCommonProps<P>, 'children'>;\n\n@rootNode\nexport class CommonWrapper<P extends CommonProps & CommonPropsRootNodeRef> extends React.Component<\n CommonWrapperProps<P> & CommonPropsRootNodeRef\n> {\n private child: React.ReactNode;\n private setRootNode!: TSetRootNode;\n private rootNodeSubscription: Nullable<TRootNodeSubscription> = null;\n\n render() {\n const [{ className, style, rootNodeRef, ...dataProps }, { children, ...rest }] = extractCommonProps(this.props);\n this.child = isFunction(children) ? children(rest) : children;\n return React.isValidElement<CommonProps & React.RefAttributes<any>>(this.child)\n ? React.cloneElement(this.child, {\n ref: isRefableElement(this.child) ? this.ref : null,\n className: cx(this.child.props.className, className),\n style: {\n ...this.child.props.style,\n ...style,\n },\n ...dataProps,\n })\n : this.child;\n }\n\n private ref = (instance: Nullable<React.ReactInstance>) => {\n this.setRootNode(instance);\n this.props.rootNodeRef?.(getRootNode(instance));\n\n // refs are called when instances change\n // so we have to renew or remove old subscription\n this.rootNodeSubscription?.remove();\n this.rootNodeSubscription = null;\n\n if (instance && isInstanceWithRootNode(instance)) {\n this.rootNodeSubscription = instance.addRootNodeChangeListener?.((node) => {\n this.setRootNode(node);\n this.props.rootNodeRef?.(node);\n });\n }\n\n const originalRef = (this.child as React.RefAttributes<any>)?.ref;\n originalRef && callChildRef(originalRef, instance);\n };\n}\n\nconst extractCommonProps = <P extends CommonProps & CommonPropsRootNodeRef>(\n props: P,\n): [CommonProps & CommonPropsRootNodeRef, NotCommonProps<P>] => {\n const common = {} as CommonProps & CommonPropsRootNodeRef;\n const rest = {} as NotCommonProps<P>;\n\n for (const key in props) {\n if (isCommonProp(key)) {\n // @ts-ignore\n common[key] = props[key];\n } else {\n // @ts-ignore\n rest[key] = props[key];\n }\n }\n\n return [common, rest];\n};\n\nconst isCommonProp = (name: string) => {\n switch (true) {\n case name == 'className':\n case name == 'style':\n case name == 'rootNodeRef':\n case name.indexOf('data-') === 0: // все data-атрибуты\n return true;\n default:\n return false;\n }\n};\n"]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { DefaultizeProps } from '../lib/utils';
|
|
3
|
-
|
|
3
|
+
declare type StatePropsObject<P, S> = {
|
|
4
4
|
props?: Partial<P>;
|
|
5
5
|
state?: Partial<S>;
|
|
6
|
-
}
|
|
6
|
+
};
|
|
7
|
+
export declare type StatePropsCombinations<P, S> = Array<StatePropsObject<P, S>>;
|
|
7
8
|
export declare type StateType<C> = C extends React.Component<any, infer S> | React.ComponentClass<any, infer S> ? S : never;
|
|
8
9
|
export interface ComponentTableProps<C, P, S> {
|
|
9
10
|
rows?: StatePropsCombinations<P, S>;
|
|
@@ -19,3 +20,4 @@ export declare class ComponentTable<T extends React.Component<any, any, any>, C
|
|
|
19
20
|
};
|
|
20
21
|
render(): JSX.Element;
|
|
21
22
|
}
|
|
23
|
+
export {};
|
|
@@ -40,6 +40,7 @@ var renderPropsDesc = function renderPropsDesc(props) {
|
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
|
|
43
|
+
|
|
43
44
|
// Known limitation: Don't work when component have `propTypes` static field
|
|
44
45
|
var ComponentTable = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default)(ComponentTable, _React$Component);function ComponentTable() {return _React$Component.apply(this, arguments) || this;}var _proto = ComponentTable.prototype;_proto.
|
|
45
46
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ComponentTable.tsx"],"names":["renderPropsDesc","props","Object","keys","map","key","value","React","isValidElement","createElement","JSON","stringify","node","index","nodes","length","ComponentTable","render","rows","cols","presetProps","presetState","Component","borderSpacing","marginBottom","captionSide","i","colProps","whiteSpace","rowIndex","rowProps","state","rowState","colIndex","colState","undefined","el","setState","defaultProps"],"mappings":"4UAAA;;AAEA;;AAEA;AACA,IAAMA,eAAe,GAAG,SAAlBA,eAAkB,CAAgCC,KAAhC,EAA8D;AACpF,SAAOC,MAAM,CAACC,IAAP,CAAYF,KAAZ;AACJG,EAAAA,GADI,CACA,UAACC,GAAD,EAAS;AACZ,QAAMC,KAAK,GAAGL,KAAK,CAACI,GAAD,CAAnB;AACA,YAAQ,OAAOC,KAAf;AACE,WAAK,SAAL;AACE,eAAOA,KAAK,GAAGD,GAAH,GAAYA,GAAZ,YAAZ;AACF,WAAK,QAAL;AACE,eAAUA,GAAV,YAAmBC,KAAnB;AACF,WAAK,QAAL;AACE,0BAAIC,eAAMC,cAAN,CAAqBF,KAArB,CAAJ,EAAiC;AAC/B,8BAAOC,eAAME,aAAN,CAAoB,MAApB,EAA4B,EAA5B,EAAgC,CAAIJ,GAAJ,SAAaC,KAAb,CAAhC,CAAP;AACD;AACD,eAAUD,GAAV,UAAkBK,IAAI,CAACC,SAAL,CAAeL,KAAf,CAAlB;AACF;AACE,eAAUD,GAAV,UAAkBC,KAAlB,CAXJ;;AAaD,GAhBI;AAiBJF,EAAAA,GAjBI,CAiBA,UAACQ,IAAD,EAAOC,KAAP,EAAcC,KAAd;AACH,6CAAM,GAAG,EAAED,KAAX;AACGD,MAAAA,IADH,OACUC,KAAK,GAAG,CAAR,GAAYC,KAAK,CAACC,MAAlB,GAA2B,IAA3B,GAAkC,IAD5C,CADG,GAjBA,CAAP;;;AAsBD,CAvBD
|
|
1
|
+
{"version":3,"sources":["ComponentTable.tsx"],"names":["renderPropsDesc","props","Object","keys","map","key","value","React","isValidElement","createElement","JSON","stringify","node","index","nodes","length","ComponentTable","render","rows","cols","presetProps","presetState","Component","borderSpacing","marginBottom","captionSide","i","colProps","whiteSpace","rowIndex","rowProps","state","rowState","colIndex","colState","undefined","el","setState","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { isFunctionalComponent, DefaultizeProps } from '../lib/utils';\n\n// TODO We should output state too\nconst renderPropsDesc = <P extends Record<string, any>>(props: P): React.ReactNode => {\n return Object.keys(props)\n .map((key) => {\n const value = props[key];\n switch (typeof value) {\n case 'boolean':\n return value ? key : `${key}: false`;\n case 'string':\n return `${key}: \"${value}\"`;\n case 'object':\n if (React.isValidElement(value)) {\n return React.createElement('span', {}, [`${key}: `, value]);\n }\n return `${key}: ${JSON.stringify(value)}`;\n default:\n return `${key}: ${value}`;\n }\n })\n .map((node, index, nodes) => (\n <span key={index}>\n {node} {index + 1 < nodes.length ? ', ' : null}\n </span>\n ));\n};\n\ntype StatePropsObject<P, S> = { props?: Partial<P>; state?: Partial<S> };\nexport type StatePropsCombinations<P, S> = Array<StatePropsObject<P, S>>;\n\nexport type StateType<C> = C extends React.Component<any, infer S> | React.ComponentClass<any, infer S> ? S : never;\n\nexport interface ComponentTableProps<C, P, S> {\n rows?: StatePropsCombinations<P, S>;\n cols?: StatePropsCombinations<P, S>;\n presetProps: DefaultizeProps<C, P>;\n presetState: Partial<S>;\n Component: C;\n}\n\n// Known limitation: Don't work when component have `propTypes` static field\nexport class ComponentTable<\n T extends React.Component<any, any, any>,\n C extends React.ComponentType<any>,\n P extends React.ComponentProps<C>,\n> extends React.Component<\n ComponentTableProps<C extends React.ComponentClass<P, any> ? React.ClassType<P, T, C> : C, P, StateType<C>>\n> {\n public static defaultProps = { presetProps: {}, presetState: {} };\n\n public render() {\n const { rows = [], cols = [], presetProps, presetState, Component } = this.props;\n return (\n <table style={{ borderSpacing: 10, marginBottom: 20 }}>\n <caption style={{ captionSide: 'bottom' }}>{renderPropsDesc(presetProps)}</caption>\n <thead>\n <tr>\n <th />\n {cols.map(({ props: colProps = {} }, i) => (\n <th style={{ whiteSpace: 'nowrap' }} key={i}>\n {renderPropsDesc(colProps)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map(({ props: rowProps = {}, state: rowState = {} }, rowIndex) => (\n <tr key={rowIndex}>\n <td style={{ whiteSpace: 'nowrap' }}>{renderPropsDesc(rowProps)}</td>\n {cols.map(({ props: colProps = {}, state: colState = {} }, colIndex) => (\n <td key={colIndex}>\n {/* Defaultized props incompatible with JSX.LibraryManagedAttributes so just ignore it\n // @ts-ignore */}\n <Component\n {...presetProps}\n {...rowProps}\n {...colProps}\n ref={\n // NOTE Call setState from outside is bad practice, but here it needed for test state combinations\n isFunctionalComponent(Component)\n ? undefined\n : (el: React.Component<P, StateType<C>>) =>\n el &&\n el.setState((state: StateType<C>) => ({\n ...state,\n ...presetState,\n ...rowState,\n ...colState,\n }))\n }\n />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n }\n}\n"]}
|
|
@@ -13,6 +13,7 @@ var _ThemeContext = require("../../lib/theming/ThemeContext");
|
|
|
13
13
|
var _px = require("../icons/16px");
|
|
14
14
|
var _client = require("../../lib/client");
|
|
15
15
|
var _Emotion = require("../../lib/theming/Emotion");
|
|
16
|
+
var _getDOMRect = require("../../lib/dom/getDOMRect");
|
|
16
17
|
|
|
17
18
|
var _DateSelect = require("./DateSelect.styles");var _dec, _class, _class2, _temp;function _getRequireWildcardCache(nodeInterop) {if (typeof WeakMap !== "function") return null;var cacheBabelInterop = new WeakMap();var cacheNodeInterop = new WeakMap();return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {return nodeInterop ? cacheNodeInterop : cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj, nodeInterop) {if (!nodeInterop && obj && obj.__esModule) {return obj;}if (obj === null || typeof obj !== "object" && typeof obj !== "function") {return { default: obj };}var cache = _getRequireWildcardCache(nodeInterop);if (cache && cache.has(obj)) {return cache.get(obj);}var newObj = {};var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;for (var key in obj) {if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;if (desc && (desc.get || desc.set)) {Object.defineProperty(newObj, key, desc);} else {newObj[key] = obj[key];}}}newObj.default = obj;if (cache) {cache.set(obj, newObj);}return newObj;}
|
|
18
19
|
|
|
@@ -202,7 +203,7 @@ DateSelect = (_dec = (0, _decorators.locale)('DatePicker', _locale.DatePickerLoc
|
|
|
202
203
|
}
|
|
203
204
|
_this.timeout = setTimeout(function () {return (
|
|
204
205
|
_this.setState({
|
|
205
|
-
nodeTop:
|
|
206
|
+
nodeTop: (0, _getDOMRect.getDOMRect)(root).top }));});
|
|
206
207
|
|
|
207
208
|
|
|
208
209
|
};_this.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["DateSelect.tsx"],"names":["itemHeight","visibleYearsCount","itemsToMoveCount","monthsCount","defaultMinYear","defaultMaxYear","DateSelect","DatePickerLocaleHelper","state","botCapped","current","height","opened","pos","top","topCapped","nodeTop","Infinity","root","itemsContainer","longClickTimer","setPositionRepeatTimer","yearStep","touchStartY","open","props","disabled","setPosition","setState","close","refRoot","element","setNodeTop","timeout","clearTimeout","setTimeout","getBoundingClientRect","refItemsContainer","addEventListener","handleWheel","passive","removeEventListener","isMobile","handleTouchStart","handleTouchMove","handleLongClickUp","event","preventDefault","window","setInterval","handleLongClickDown","handleLongClickStop","getAnchor","WheelEvent","stopPropagation","deltaY","deltaMode","TouchEvent","targetTouches","clientY","changedTouches","pixelRatio","devicePixelRatio","handleItemClick","shift","e","value","onValueChange","handleKey","handleUp","handleDown","componentDidUpdate","componentDidMount","listener","LayoutEvents","addListener","componentWillUnmount","remove","render","theme","renderMain","width","rootProps","className","styles","Boolean","style","ref","caption","getItem","arrow","arrowDisabled","renderMenu","disableItems","index","maxValue","minValue","from","to","Math","ceil","items","i","menuItem","menuItemSelected","menuItemActive","menuItemDisabled","clickHandler","onMouseDown","onClick","push","left","right","shiftStyle","position","holderClass","menuHolder","isTopCapped","isBotCapped","dropdownOffset","overflowOffsetDelta","menu","menuUp","itemsHolder","menuDown","type","locale","months","minPos","getMinPos","maxPos","getMaxPos","React","PureComponent","__KONTUR_REACT_UI__","propTypes","PropTypes","bool","string","number","isRequired","oneOfType","func","defaultProps","minMonth","maxMonth"],"mappings":"wUAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,iD;;AAEA,IAAMA,UAAU,GAAG,EAAnB;AACA,IAAMC,iBAAiB,GAAG,EAA1B;AACA,IAAMC,gBAAgB,GAAG,CAAC,CAA1B;AACA,IAAMC,WAAW,GAAG,EAApB;AACA,IAAMC,cAAc,GAAG,IAAvB;AACA,IAAMC,cAAc,GAAG,IAAvB,C;;;;;;;;;;;;;;;;;;;;;;;;AAwBaC,U,WADZ,wBAAO,YAAP,EAAqBC,8BAArB,C;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BQC,IAAAA,K,GAAQ;AACbC,MAAAA,SAAS,EAAE,KADE;AAEbC,MAAAA,OAAO,EAAE,CAFI;AAGbC,MAAAA,MAAM,EAAE,CAHK;AAIbC,MAAAA,MAAM,EAAE,KAJK;AAKbC,MAAAA,GAAG,EAAE,CALQ;AAMbC,MAAAA,GAAG,EAAE,CANQ;AAObC,MAAAA,SAAS,EAAE,KAPE;AAQbC,MAAAA,OAAO,EAAEC,QARI,E;;;;;AAaPC,IAAAA,I,GAA2B,I;AAC3BC,IAAAA,c,GAAqC,I;;;AAGrCC,IAAAA,c,GAAiB,C;AACjBC,IAAAA,sB,GAAyB,C;AACzBC,IAAAA,Q,GAAW,C;AACXC,IAAAA,W,GAAgC,I;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BjCC,IAAAA,I,GAAO,YAAM;AAClB,UAAI,MAAKC,KAAL,CAAWC,QAAf,EAAyB;AACvB;AACD;;AAED,UAAI,MAAKlB,KAAL,CAAWI,MAAf,EAAuB;AACrB;AACD;;AAED,YAAKe,WAAL,CAAiB,CAAjB;AACA,YAAKC,QAAL,CAAc;AACZhB,QAAAA,MAAM,EAAE,IADI;AAEZF,QAAAA,OAAO,EAAE,CAFG,EAAd;;AAID,K;;;;;AAKMmB,IAAAA,K,GAAQ,YAAM;AACnB,UAAI,CAAC,MAAKrB,KAAL,CAAWI,MAAhB,EAAwB;AACtB;AACD;;AAED,YAAKgB,QAAL,CAAc,EAAEhB,MAAM,EAAE,KAAV,EAAd;AACD,K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCOkB,IAAAA,O,GAAU,UAACC,OAAD,EAAiC;AACjD,YAAKb,IAAL,GAAYa,OAAZ;AACD,K;;AAEOC,IAAAA,U,GAAa,YAAM;AACzB,UAAMd,IAAI,GAAG,MAAKA,IAAlB;AACA,UAAI,CAACA,IAAL,EAAW;AACT;AACD;AACD,UAAI,MAAKe,OAAT,EAAkB;AAChBC,QAAAA,YAAY,CAAC,MAAKD,OAAN,CAAZ;AACD;AACD,YAAKA,OAAL,GAAeE,UAAU,CAAC;AACxB,gBAAKP,QAAL,CAAc;AACZZ,YAAAA,OAAO,EAAEE,IAAI,CAACkB,qBAAL,GAA6BtB,GAD1B,EAAd,CADwB,GAAD,CAAzB;;;AAKD,K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgIOuB,IAAAA,iB,GAAoB,UAACN,OAAD,EAAiC;AAC3D,UAAI,CAAC,MAAKZ,cAAN,IAAwBY,OAA5B,EAAqC;AACnCA,QAAAA,OAAO,CAACO,gBAAR,CAAyB,OAAzB,EAAkC,MAAKC,WAAvC,EAAoD,EAAEC,OAAO,EAAE,KAAX,EAApD;AACD;AACD,UAAI,MAAKrB,cAAL,IAAuB,CAACY,OAA5B,EAAqC;AACnC,cAAKZ,cAAL,CAAoBsB,mBAApB,CAAwC,OAAxC,EAAiD,MAAKF,WAAtD;AACD;;AAED,UAAIG,gBAAJ,EAAc;AACZ,YAAI,CAAC,MAAKvB,cAAN,IAAwBY,OAA5B,EAAqC;AACnCA,UAAAA,OAAO,CAACO,gBAAR,CAAyB,YAAzB,EAAuC,MAAKK,gBAA5C;AACAZ,UAAAA,OAAO,CAACO,gBAAR,CAAyB,WAAzB,EAAsC,MAAKM,eAA3C;AACD;AACD,YAAI,MAAKzB,cAAL,IAAuB,CAACY,OAA5B,EAAqC;AACnC,gBAAKZ,cAAL,CAAoBsB,mBAApB,CAAwC,YAAxC,EAAsD,MAAKE,gBAA3D;AACA,gBAAKxB,cAAL,CAAoBsB,mBAApB,CAAwC,WAAxC,EAAqD,MAAKG,eAA1D;AACD;AACF;;AAED,YAAKzB,cAAL,GAAsBY,OAAtB;AACD,K;;AAEOc,IAAAA,iB,GAAoB,UAACC,KAAD,EAAgD;AAC1EA,MAAAA,KAAK,CAACC,cAAN;AACA,YAAK3B,cAAL,GAAsB4B,MAAM,CAACb,UAAP,CAAkB,YAAM;AAC5C,cAAKd,sBAAL,GAA8B2B,MAAM,CAACC,WAAP,CAAmB,oBAAM,MAAKtB,WAAL,CAAiB,MAAKnB,KAAL,CAAWK,GAAX,GAAiBb,UAAlC,CAAN,EAAnB,EAAwE,GAAxE,CAA9B;AACD,OAFqB,EAEnB,GAFmB,CAAtB;AAGD,K;;AAEOkD,IAAAA,mB,GAAsB,UAACJ,KAAD,EAAgD;AAC5EA,MAAAA,KAAK,CAACC,cAAN;AACA,YAAK3B,cAAL,GAAsB4B,MAAM,CAACb,UAAP,CAAkB,YAAM;AAC5C,cAAKd,sBAAL,GAA8B2B,MAAM,CAACC,WAAP,CAAmB,oBAAM,MAAKtB,WAAL,CAAiB,MAAKnB,KAAL,CAAWK,GAAX,GAAiBb,UAAlC,CAAN,EAAnB,EAAwE,GAAxE,CAA9B;AACD,OAFqB,EAEnB,GAFmB,CAAtB;AAGD,K;;AAEOmD,IAAAA,mB,GAAsB,YAAM;AAClCjB,MAAAA,YAAY,CAAC,MAAKd,cAAN,CAAZ;AACAc,MAAAA,YAAY,CAAC,MAAKb,sBAAN,CAAZ;AACD,K;;AAEO+B,IAAAA,S,GAAY,oBAAM,MAAKlC,IAAX,E;;AAEZqB,IAAAA,W,GAAc,UAACO,KAAD,EAAkB;AACtC,UAAI,EAAEA,KAAK,YAAYO,UAAnB,CAAJ,EAAoC;AAClC;AACD;AACDP,MAAAA,KAAK,CAACC,cAAN;AACAD,MAAAA,KAAK,CAACQ,eAAN;;AAEA,UAAIC,MAAM,GAAGT,KAAK,CAACS,MAAnB;AACA,UAAIT,KAAK,CAACU,SAAN,KAAoB,CAAxB,EAA2B;AACzBD,QAAAA,MAAM,IAAIvD,UAAV;AACD,OAFD,MAEO,IAAI8C,KAAK,CAACU,SAAN,KAAoB,CAAxB,EAA2B;AAChCD,QAAAA,MAAM,IAAIvD,UAAU,GAAG,CAAvB;AACD;AACD,UAAMa,GAAG,GAAG,MAAKL,KAAL,CAAWK,GAAX,GAAiB0C,MAA7B;AACA,YAAK5B,WAAL,CAAiBd,GAAjB;AACD,K;;AAEO8B,IAAAA,gB,GAAmB,UAACG,KAAD,EAAkB;AAC3C,UAAI,EAAEA,KAAK,YAAYW,UAAnB,CAAJ,EAAoC;AAClC;AACD;;AAED,YAAKlC,WAAL,GAAmBuB,KAAK,CAACY,aAAN,CAAoB,CAApB,EAAuBC,OAA1C;AACD,K;;AAEOf,IAAAA,e,GAAkB,UAACE,KAAD,EAAkB;AAC1C,UAAI,EAAEA,KAAK,YAAYW,UAAnB,CAAJ,EAAoC;AAClC;AACD;;AAED,UAAQE,OAAR,GAAoBb,KAAK,CAACc,cAAN,CAAqB,CAArB,CAApB,CAAQD,OAAR;AACA,UAAME,UAAU,GAAGb,MAAM,CAACc,gBAA1B;;AAEA,UAAMP,MAAM,GAAG,CAAC,CAAC,MAAKhC,WAAL,IAAoB,CAArB,IAA0BoC,OAA3B,IAAsCE,UAArD;AACA,UAAMhD,GAAG,GAAG,MAAKL,KAAL,CAAWK,GAAX,GAAiB0C,MAAjB,GAA0BA,MAAM,GAAGvD,UAA/C;;AAEA,YAAKuB,WAAL,GAAmBoC,OAAnB;;AAEA,YAAKhC,WAAL,CAAiBd,GAAjB;AACD,K;;AAEOkD,IAAAA,e,GAAkB,UAACC,KAAD,EAAmB;AAC3C,aAAO,UAACC,CAAD,EAAsC;AAC3C,YAAMC,KAAK,GAAG,MAAKzC,KAAL,CAAWyC,KAAX,GAAmBF,KAAjC;AACA,YAAI,MAAKvC,KAAL,CAAW0C,aAAf,EAA8B;AAC5B,gBAAK1C,KAAL,CAAW0C,aAAX,CAAyBD,KAAzB;AACD;AACD,cAAKtC,QAAL,CAAc,EAAEhB,MAAM,EAAE,KAAV,EAAd;AACD,OAND;AAOD,K;;AAEOwD,IAAAA,S,GAAY,UAACH,CAAD,EAAsB;AACxC,UAAI,MAAKzD,KAAL,CAAWI,MAAX,IAAqB,8BAAYqD,CAAZ,CAAzB,EAAyC;AACvCA,QAAAA,CAAC,CAAClB,cAAF;AACA,cAAKlB,KAAL;AACAoC,QAAAA,CAAC,CAACX,eAAF;AACD;AACF,K;;AAEOe,IAAAA,Q,GAAW,UAACvB,KAAD,EAA6B;AAC9CA,MAAAA,KAAK,CAACC,cAAN;AACA,YAAKpB,WAAL,CAAiB,MAAKnB,KAAL,CAAWK,GAAX,GAAiBb,UAAU,GAAG,MAAKsB,QAApD;AACD,K;;AAEOgD,IAAAA,U,GAAa,UAACxB,KAAD,EAA6B;AAChDA,MAAAA,KAAK,CAACC,cAAN;AACA,YAAKpB,WAAL,CAAiB,MAAKnB,KAAL,CAAWK,GAAX,GAAiBb,UAAU,GAAG,MAAKsB,QAApD;AACD,K,wDA9VMiD,kB,GAAP,8BAA4B,CAC1B,KAAKvC,UAAL,GACD,C,QAEMwC,iB,GAAP,6BAA2B,CACzB,KAAKC,QAAL,GAAgBC,YAAY,CAACC,WAAb,CAAyB,KAAK3C,UAA9B,CAAhB,CACA,KAAKA,UAAL,GACAgB,MAAM,CAACV,gBAAP,CAAwB,SAAxB,EAAmC,KAAK8B,SAAxC,EACD,C,QAEMQ,oB,GAAP,gCAA8B,CAC5B,IAAI,KAAKH,QAAT,EAAmB,CACjB,KAAKA,QAAL,CAAcI,MAAd,GACD,CACD,IAAI,KAAK5C,OAAT,EAAkB,CAChBC,YAAY,CAAC,KAAKD,OAAN,CAAZ,CACD,CACD,IAAI,KAAKb,cAAT,EAAyB,CACvBc,YAAY,CAAC,KAAKd,cAAN,CAAZ,CACD,CACD,IAAI,KAAKC,sBAAT,EAAiC,CAC/Ba,YAAY,CAAC,KAAKb,sBAAN,CAAZ,CACD,CACD2B,MAAM,CAACP,mBAAP,CAA2B,SAA3B,EAAsC,KAAK2B,SAA3C,EACD,C,CAED;AACF;AACA,K,QA4BSU,M,GAAP,kBAAgB,mBACd,oBACE,6BAAC,0BAAD,CAAc,QAAd,QACG,UAACC,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,OAAO,MAAI,CAACC,UAAL,EAAP,CACD,CAJH,CADF,CAQD,C,QAEOA,U,GAAR,sBAAqB,eACnB,kBAA4B,KAAKvD,KAAjC,CAAQwD,KAAR,eAAQA,KAAR,CAAevD,QAAf,eAAeA,QAAf,CACA,IAAMwD,SAAS,GAAG,EAChBC,SAAS,EAAE,gCACRC,mBAAOlE,IAAP,CAAY,KAAK6D,KAAjB,CADQ,IACkB,IADlB,MAERK,mBAAO1D,QAAP,EAFQ,IAEY2D,OAAO,CAAC3D,QAAD,CAFnB,OADK,EAKhB4D,KAAK,EAAE,EAAEL,KAAK,EAALA,KAAF,EALS,EAMhBM,GAAG,EAAE,KAAKzD,OANM,EAAlB,CAQA,oBACE,qCAAUoD,SAAV,eACE,sCAAK,YAAS,qBAAd,EAAoC,SAAS,EAAEE,mBAAOI,OAAP,EAA/C,EAAiE,OAAO,EAAE,KAAKhE,IAA/E,IACG,KAAKiE,OAAL,CAAa,CAAb,CADH,eAEE,sCACE,SAAS,EAAE,kCACRL,mBAAOM,KAAP,CAAa,KAAKX,KAAlB,CADQ,IACmB,IADnB,OAERK,mBAAOO,aAAP,EAFQ,IAEiBN,OAAO,CAAC3D,QAAD,CAFxB,QADb,iBAME,6BAAC,2BAAD,IAAyB,IAAI,EAAE,EAA/B,GANF,CAFF,CADF,EAYG,KAAKlB,KAAL,CAAWI,MAAX,IAAqB,KAAKgF,UAAL,EAZxB,CADF,CAgBD,C,QAqBOC,Y,GAAR,sBAAqBC,KAArB,EAAoC,CAClC,IAAM5B,KAAK,GAAG,KAAKzC,KAAL,CAAWyC,KAAX,GAAmB4B,KAAjC,CACA,IAAI,KAAKrE,KAAL,CAAWsE,QAAX,IAAuB,IAAvB,IAA+B,KAAKtE,KAAL,CAAWuE,QAAX,IAAuB,IAA1D,EAAgE,CAC9D,OAAO9B,KAAK,GAAG,KAAKzC,KAAL,CAAWsE,QAAnB,IAA+B7B,KAAK,GAAG,KAAKzC,KAAL,CAAWuE,QAAzD,CACD,CACD,IAAI,KAAKvE,KAAL,CAAWuE,QAAX,IAAuB,IAA3B,EAAiC,CAC/B,OAAO9B,KAAK,GAAG,KAAKzC,KAAL,CAAWuE,QAA1B,CACD,CACD,IAAI,KAAKvE,KAAL,CAAWsE,QAAX,IAAuB,IAA3B,EAAiC,CAC/B,OAAO7B,KAAK,GAAG,KAAKzC,KAAL,CAAWsE,QAA1B,CACD,CACF,C,QAEOH,U,GAAR,sBAAsC,wBACpC,kBAAiC,KAAKpF,KAAtC,CAAQM,GAAR,eAAQA,GAAR,CAAaH,MAAb,eAAaA,MAAb,CAAqBK,OAArB,eAAqBA,OAArB,CAEA,IAAIgD,KAAK,GAAG,KAAKxD,KAAL,CAAWK,GAAX,GAAiBb,UAA7B,CACA,IAAIgE,KAAK,GAAG,CAAZ,EAAe,CACbA,KAAK,IAAIhE,UAAT,CACD,CAED,IAAMiG,IAAI,GAAG,CAAC,KAAKzF,KAAL,CAAWK,GAAX,GAAiBmD,KAAjB,GAAyBlD,GAA1B,IAAiCd,UAA9C,CACA,IAAMkG,EAAE,GAAGD,IAAI,GAAGE,IAAI,CAACC,IAAL,CAAU,CAACzF,MAAM,GAAGqD,KAAV,IAAmBhE,UAA7B,CAAlB,CACA,IAAMqG,KAAK,GAAG,EAAd,CAVoC,2BAY3BC,CAZ2B,YAalC,IAAMT,YAAY,GAAG,MAAI,CAACA,YAAL,CAAkBS,CAAlB,KAAwB,KAA7C,CACA,IAAMnB,SAAS,GAAG,kCACfC,mBAAOmB,QAAP,CAAgB,MAAI,CAACxB,KAArB,CADe,IACe,IADf,OAEfK,mBAAOoB,gBAAP,CAAwB,MAAI,CAACzB,KAA7B,CAFe,IAEuBuB,CAAC,KAAK,CAF7B,OAGflB,mBAAOqB,cAAP,CAAsB,MAAI,CAAC1B,KAA3B,CAHe,IAGqBuB,CAAC,KAAK,MAAI,CAAC9F,KAAL,CAAWE,OAHtC,OAIf0E,mBAAOsB,gBAAP,CAAwB,MAAI,CAAC3B,KAA7B,CAJe,IAIuBc,YAJvB,QAAlB,CAMA,IAAMc,YAAY,GAAG,EACnBC,WAAW,EAAE7D,cADM,EAEnB8D,OAAO,EAAE,MAAI,CAAC9C,eAAL,CAAqBuC,CAArB,CAFU,EAArB,CAIAD,KAAK,CAACS,IAAN,eACE,6DACE,YAAS,sBADX,EAEE,sBAAoBjB,YAFtB,EAGE,GAAG,EAAES,CAHP,EAIE,SAAS,EAAEnB,SAJb,EAKE,YAAY,EAAE,gCAAM,MAAI,CAACvD,QAAL,CAAc,EAAElB,OAAO,EAAE4F,CAAX,EAAd,CAAN,EALhB,EAME,YAAY,EAAE,gCAAM,MAAI,CAAC1E,QAAL,CAAc,EAAElB,OAAO,EAAE,IAAX,EAAd,CAAN,EANhB,IAOMiG,YAPN,GASG,MAAI,CAAClB,OAAL,CAAaa,CAAb,CATH,CADF,EAxBkC,EAYpC,KAAK,IAAIA,CAAC,GAAGL,IAAb,EAAmBK,CAAC,GAAGJ,EAAvB,EAA2B,EAAEI,CAA7B,EAAgC,OAAvBA,CAAuB,EAyB/B,CACD,IAAMhB,KAKL,GAAG,EACFxE,GAAG,EAAEA,GAAG,GAAG,CADT,EAEFiG,IAAI,EAAE,CAFJ,EAGFC,KAAK,EAAE,CAHL,EALJ,CAWA,IAAMC,UAA+B,GAAG,EACtCC,QAAQ,EAAE,UAD4B,EAEtCpG,GAAG,EAAE,CAACkD,KAFgC,EAAxC,CAKA,IAAMmD,WAAW,GAAG,kCACjB/B,mBAAOgC,UAAP,CAAkB,KAAKrC,KAAvB,CADiB,IACe,IADf,OAEjBK,mBAAOiC,WAAP,EAFiB,IAEM,KAAK7G,KAAL,CAAWO,SAFjB,OAGjBqE,mBAAOkC,WAAP,EAHiB,IAGM,KAAK9G,KAAL,CAAWC,SAHjB,QAApB,CAMA,IAAI8G,cAAc,GAAG,CAACvH,UAAtB,CACA,IAAIgB,OAAO,GAAG,CAACF,GAAf,EAAoB,CAClB,IAAM0G,mBAAmB,GAAG,KAAKhH,KAAL,CAAWO,SAAX,GAAuB,CAAvB,GAA2B,EAAvD,CACAwG,cAAc,IAAIvG,OAAO,GAAGF,GAAV,GAAgB0G,mBAAlC,CACD,CAED,oBACE,6BAAC,wBAAD,IAAa,cAAc,EAAE,KAAK3F,KAAlC,EAAyC,cAAc,EAAE,KAAKA,KAA9D,EAAqE,MAAM,MAA3E,iBACE,uDACE,6BAAC,oCAAD,IAAmB,SAAS,EAAE,KAAKuB,SAAnC,EAA8C,OAAO,EAAEmE,cAAvD,EAAuE,OAAO,EAAE,CAAC,EAAjF,iBACE,sCAAK,SAAS,EAAEJ,WAAhB,EAA6B,KAAK,EAAE7B,KAApC,IACG,CAAC,KAAK9E,KAAL,CAAWO,SAAZ,iBACC,sCACE,SAAS,EAAE,iBAAGqE,mBAAOqC,IAAP,CAAY,KAAK1C,KAAjB,CAAH,EAA4BK,mBAAOsC,MAAP,EAA5B,CADb,EAEE,OAAO,EAAE,KAAKrD,QAFhB,EAGE,WAAW,EAAE,KAAKxB,iBAHpB,EAIE,SAAS,EAAE,KAAKM,mBAJlB,EAKE,YAAY,EAAE,KAAKA,mBALrB,EAME,YAAY,EAAE,KAAKN,iBANrB,EAOE,UAAU,EAAE,KAAKM,mBAPnB,iBASE,wDACE,6BAAC,sBAAD,OADF,CATF,CAFJ,eAgBE,sCAAK,SAAS,EAAEiC,mBAAOuC,WAAP,EAAhB,EAAsC,KAAK,EAAE,EAAEhH,MAAM,EAANA,MAAF,EAA7C,iBACE,sCAAK,GAAG,EAAE,KAAK0B,iBAAf,EAAkC,KAAK,EAAE4E,UAAzC,IACGZ,KADH,CADF,CAhBF,EAqBG,CAAC,KAAK7F,KAAL,CAAWC,SAAZ,iBACC,sCACE,SAAS,EAAE,iBAAG2E,mBAAOqC,IAAP,CAAY,KAAK1C,KAAjB,CAAH,EAA4BK,mBAAOwC,QAAP,EAA5B,CADb,EAEE,OAAO,EAAE,KAAKtD,UAFhB,EAGE,WAAW,EAAE,KAAKpB,mBAHpB,EAIE,SAAS,EAAE,KAAKC,mBAJlB,EAKE,YAAY,EAAE,KAAKA,mBALrB,EAME,YAAY,EAAE,KAAKD,mBANrB,EAOE,UAAU,EAAE,KAAKC,mBAPnB,iBASE,wDACE,6BAAC,wBAAD,OADF,CATF,CAtBJ,CADF,CADF,CADF,CADF,CA6CD,C,QAkHOsC,O,GAAR,iBAAgBK,KAAhB,EAA+B;AAC7B,QAAM5B,KAAK,GAAG,KAAKzC,KAAL,CAAWyC,KAAX,GAAmB4B,KAAjC;AACA,QAAI,KAAKrE,KAAL,CAAWoG,IAAX,KAAoB,OAAxB,EAAiC;AAC/B,aAAO,KAAKC,MAAL,CAAYC,MAAZ,CAAmB7D,KAAnB,CAAP;AACD;AACD,WAAOA,KAAP;AACD,G;;AAEOvC,EAAAA,W,GAAR,qBAAoBd,GAApB,EAAiC;AAC/B,QAAIC,GAAG,GAAGZ,gBAAgB,GAAGF,UAA7B;AACA,QAAIW,MAAM,GAAGV,iBAAiB,GAAGD,UAAjC;AACA,QAAI,KAAKyB,KAAL,CAAWoG,IAAX,KAAoB,OAAxB,EAAiC;AAC/B/G,MAAAA,GAAG,GAAG,CAAC,KAAKW,KAAL,CAAWyC,KAAZ,GAAoBlE,UAA1B;AACAW,MAAAA,MAAM,GAAGR,WAAW,GAAGH,UAAvB;AACD;;AAED,QAAMgI,MAAM,GAAG,KAAKC,SAAL,KAAmBnH,GAAlC;AACA,QAAMoH,MAAM,GAAG,KAAKC,SAAL,KAAmBrH,GAAnB,GAAyBH,MAAzB,GAAkCX,UAAjD;AACA,QAAIgI,MAAM,IAAInH,GAAd,EAAmB;AACjBA,MAAAA,GAAG,GAAGmH,MAAN;AACD;AACD,QAAIE,MAAM,IAAIrH,GAAd,EAAmB;AACjBA,MAAAA,GAAG,GAAGqH,MAAN;AACD;AACD,QAAMnH,SAAS,GAAGF,GAAG,IAAImH,MAAzB;AACA,QAAMvH,SAAS,GAAGI,GAAG,IAAIqH,MAAzB;;AAEA,SAAKtG,QAAL,CAAc,EAAEf,GAAG,EAAHA,GAAF,EAAOC,GAAG,EAAHA,GAAP,EAAYH,MAAM,EAANA,MAAZ,EAAoBI,SAAS,EAATA,SAApB,EAA+BN,SAAS,EAATA,SAA/B,EAAd;AACD,G;;AAEOwH,EAAAA,S,GAAR,qBAAoB;AAClB,QAAI,KAAKxG,KAAL,CAAWoG,IAAX,KAAoB,OAAxB,EAAiC;AAC/B,aAAO,CAAC,KAAKpG,KAAL,CAAWyC,KAAZ,GAAoBlE,UAA3B;AACD,KAFD,MAEO,IAAI,KAAKyB,KAAL,CAAWoG,IAAX,KAAoB,MAAxB,EAAgC;AACrC,aAAO,CAAC,CAAC,KAAKpG,KAAL,CAAWuE,QAAX,IAAuB5F,cAAxB,IAA0C,KAAKqB,KAAL,CAAWyC,KAAtD,IAA+DlE,UAAtE;AACD;AACD,WAAO,CAACiB,QAAR,CANkB,CAMA;AACnB,G;;AAEOkH,EAAAA,S,GAAR,qBAAoB;AAClB,QAAI,KAAK1G,KAAL,CAAWoG,IAAX,KAAoB,OAAxB,EAAiC;AAC/B,aAAO,CAAC5H,iBAAiB,GAAG,KAAKwB,KAAL,CAAWyC,KAAhC,IAAyClE,UAAhD;AACD,KAFD,MAEO,IAAI,KAAKyB,KAAL,CAAWoG,IAAX,KAAoB,MAAxB,EAAgC;AACrC,aAAO,CAAC,CAAC,KAAKpG,KAAL,CAAWsE,QAAX,IAAuB1F,cAAxB,IAA0C,KAAKoB,KAAL,CAAWyC,KAAtD,IAA+DlE,UAAtE;AACD;AACD,WAAOiB,QAAP,CANkB,CAMD;AAClB,G,qBA9b6BmH,eAAMC,a,WACtBC,mB,GAAsB,Y,UAEtBC,S,GAAY,EACxB7G,QAAQ,EAAE8G,mBAAUC,IADI,EAGxBZ,IAAI,EAAEW,mBAAUE,MAHQ,EAKxBxE,KAAK,EAAEsE,mBAAUG,MAAV,CAAiBC,UALA,EAOxB3D,KAAK,EAAEuD,mBAAUK,SAAV,CAAoB,CAACL,mBAAUG,MAAX,EAAmBH,mBAAUE,MAA7B,CAApB,CAPiB,EASxBvE,aAAa,EAAEqE,mBAAUM,IATD,EAWxB9C,QAAQ,EAAEwC,mBAAUG,MAXI,EAaxB5C,QAAQ,EAAEyC,mBAAUG,MAbI,E,UAgBZI,Y,GAAe,EAC3BlB,IAAI,EAAE,MADqB,EAE3BmB,QAAQ,EAAE,CAFiB,EAG3BC,QAAQ,EAAE,EAHiB,EAI3BhE,KAAK,EAAE,MAJoB,E;;;AA8a/B,SAASlC,cAAT,CAAwBkB,CAAxB,EAAiD;AAC/CA,EAAAA,CAAC,CAAClB,cAAF;AACD","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport { DatePickerLocale, DatePickerLocaleHelper } from '../../components/DatePicker/locale';\nimport { locale } from '../../lib/locale/decorators';\nimport { RenderLayer } from '../RenderLayer';\nimport { DropdownContainer } from '../DropdownContainer';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { Nullable } from '../../typings/utility-types';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ArrowTriangleUpDownIcon, ArrowChevronDownIcon, ArrowChevronUpIcon } from '../icons/16px';\nimport { isMobile } from '../../lib/client';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles } from './DateSelect.styles';\n\nconst itemHeight = 24;\nconst visibleYearsCount = 11;\nconst itemsToMoveCount = -5;\nconst monthsCount = 12;\nconst defaultMinYear = 1900;\nconst defaultMaxYear = 2100;\n\nexport interface DateSelectProps {\n disabled?: boolean | null;\n onValueChange: (value: number) => void;\n type?: 'month' | 'year';\n value: number;\n width?: number | string;\n minValue?: number;\n maxValue?: number;\n}\n\nexport interface DateSelectState {\n botCapped: boolean;\n current: Nullable<number>;\n height: number;\n opened: boolean;\n pos: number;\n top: number;\n topCapped: boolean;\n nodeTop: number;\n}\n\n@locale('DatePicker', DatePickerLocaleHelper)\nexport class DateSelect extends React.PureComponent<DateSelectProps, DateSelectState> {\n public static __KONTUR_REACT_UI__ = 'DateSelect';\n\n public static propTypes = {\n disabled: PropTypes.bool,\n\n type: PropTypes.string,\n\n value: PropTypes.number.isRequired,\n\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n onValueChange: PropTypes.func,\n\n minValue: PropTypes.number,\n\n maxValue: PropTypes.number,\n };\n\n public static defaultProps = {\n type: 'year',\n minMonth: 0,\n maxMonth: 11,\n width: 'auto',\n };\n\n public state = {\n botCapped: false,\n current: 0,\n height: 0,\n opened: false,\n pos: 0,\n top: 0,\n topCapped: false,\n nodeTop: Infinity,\n };\n\n private theme!: Theme;\n private readonly locale!: DatePickerLocale;\n private root: HTMLElement | null = null;\n private itemsContainer: HTMLElement | null = null;\n private listener: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private timeout: NodeJS.Timeout | undefined;\n private longClickTimer = 0;\n private setPositionRepeatTimer = 0;\n private yearStep = 3;\n private touchStartY: Nullable<number> = null;\n\n public componentDidUpdate() {\n this.setNodeTop();\n }\n\n public componentDidMount() {\n this.listener = LayoutEvents.addListener(this.setNodeTop);\n this.setNodeTop();\n window.addEventListener('keydown', this.handleKey);\n }\n\n public componentWillUnmount() {\n if (this.listener) {\n this.listener.remove();\n }\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n if (this.longClickTimer) {\n clearTimeout(this.longClickTimer);\n }\n if (this.setPositionRepeatTimer) {\n clearTimeout(this.setPositionRepeatTimer);\n }\n window.removeEventListener('keydown', this.handleKey);\n }\n\n /**\n * @public\n */\n public open = () => {\n if (this.props.disabled) {\n return;\n }\n\n if (this.state.opened) {\n return;\n }\n\n this.setPosition(0);\n this.setState({\n opened: true,\n current: 0,\n });\n };\n\n /**\n * @public\n */\n public close = () => {\n if (!this.state.opened) {\n return;\n }\n\n this.setState({ opened: false });\n };\n\n public render() {\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 { width, disabled } = this.props;\n const rootProps = {\n className: cx({\n [styles.root(this.theme)]: true,\n [styles.disabled()]: Boolean(disabled),\n }),\n style: { width },\n ref: this.refRoot,\n };\n return (\n <span {...rootProps}>\n <div data-tid=\"DateSelect__caption\" className={styles.caption()} onClick={this.open}>\n {this.getItem(0)}\n <div\n className={cx({\n [styles.arrow(this.theme)]: true,\n [styles.arrowDisabled()]: Boolean(disabled),\n })}\n >\n <ArrowTriangleUpDownIcon size={12} />\n </div>\n </div>\n {this.state.opened && this.renderMenu()}\n </span>\n );\n }\n\n private refRoot = (element: HTMLElement | null) => {\n this.root = element;\n };\n\n private setNodeTop = () => {\n const root = this.root;\n if (!root) {\n return;\n }\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n this.timeout = setTimeout(() =>\n this.setState({\n nodeTop: root.getBoundingClientRect().top,\n }),\n );\n };\n\n private disableItems(index: number) {\n const value = this.props.value + index;\n if (this.props.maxValue != null && this.props.minValue != null) {\n return value > this.props.maxValue || value < this.props.minValue;\n }\n if (this.props.minValue != null) {\n return value < this.props.minValue;\n }\n if (this.props.maxValue != null) {\n return value > this.props.maxValue;\n }\n }\n\n private renderMenu(): React.ReactNode {\n const { top, height, nodeTop } = this.state;\n\n let shift = this.state.pos % itemHeight;\n if (shift < 0) {\n shift += itemHeight;\n }\n\n const from = (this.state.pos - shift + top) / itemHeight;\n const to = from + Math.ceil((height + shift) / itemHeight);\n const items = [];\n\n for (let i = from; i < to; ++i) {\n const disableItems = this.disableItems(i) || false;\n const className = cx({\n [styles.menuItem(this.theme)]: true,\n [styles.menuItemSelected(this.theme)]: i === 0,\n [styles.menuItemActive(this.theme)]: i === this.state.current,\n [styles.menuItemDisabled(this.theme)]: disableItems,\n });\n const clickHandler = {\n onMouseDown: preventDefault,\n onClick: this.handleItemClick(i),\n };\n items.push(\n <div\n data-tid=\"DateSelect__menuItem\"\n data-prop-disabled={disableItems}\n key={i}\n className={className}\n onMouseEnter={() => this.setState({ current: i })}\n onMouseLeave={() => this.setState({ current: null })}\n {...clickHandler}\n >\n {this.getItem(i)}\n </div>,\n );\n }\n const style: {\n left?: number | string;\n right?: number | string;\n top: number;\n width?: number | string;\n } = {\n top: top - 5,\n left: 0,\n right: 0,\n };\n\n const shiftStyle: React.CSSProperties = {\n position: 'relative',\n top: -shift,\n };\n\n const holderClass = cx({\n [styles.menuHolder(this.theme)]: true,\n [styles.isTopCapped()]: this.state.topCapped,\n [styles.isBotCapped()]: this.state.botCapped,\n });\n\n let dropdownOffset = -itemHeight;\n if (nodeTop < -top) {\n const overflowOffsetDelta = this.state.topCapped ? 6 : 17;\n dropdownOffset -= nodeTop + top - overflowOffsetDelta;\n }\n\n return (\n <RenderLayer onClickOutside={this.close} onFocusOutside={this.close} active>\n <div>\n <DropdownContainer getParent={this.getAnchor} offsetY={dropdownOffset} offsetX={-10}>\n <div className={holderClass} style={style}>\n {!this.state.topCapped && (\n <div\n className={cx(styles.menu(this.theme), styles.menuUp())}\n onClick={this.handleUp}\n onMouseDown={this.handleLongClickUp}\n onMouseUp={this.handleLongClickStop}\n onMouseLeave={this.handleLongClickStop}\n onTouchStart={this.handleLongClickUp}\n onTouchEnd={this.handleLongClickStop}\n >\n <span>\n <ArrowChevronUpIcon />\n </span>\n </div>\n )}\n <div className={styles.itemsHolder()} style={{ height }}>\n <div ref={this.refItemsContainer} style={shiftStyle}>\n {items}\n </div>\n </div>\n {!this.state.botCapped && (\n <div\n className={cx(styles.menu(this.theme), styles.menuDown())}\n onClick={this.handleDown}\n onMouseDown={this.handleLongClickDown}\n onMouseUp={this.handleLongClickStop}\n onMouseLeave={this.handleLongClickStop}\n onTouchStart={this.handleLongClickDown}\n onTouchEnd={this.handleLongClickStop}\n >\n <span>\n <ArrowChevronDownIcon />\n </span>\n </div>\n )}\n </div>\n </DropdownContainer>\n </div>\n </RenderLayer>\n );\n }\n\n private refItemsContainer = (element: HTMLElement | null) => {\n if (!this.itemsContainer && element) {\n element.addEventListener('wheel', this.handleWheel, { passive: false });\n }\n if (this.itemsContainer && !element) {\n this.itemsContainer.removeEventListener('wheel', this.handleWheel);\n }\n\n if (isMobile) {\n if (!this.itemsContainer && element) {\n element.addEventListener('touchstart', this.handleTouchStart);\n element.addEventListener('touchmove', this.handleTouchMove);\n }\n if (this.itemsContainer && !element) {\n this.itemsContainer.removeEventListener('touchstart', this.handleTouchStart);\n this.itemsContainer.removeEventListener('touchmove', this.handleTouchMove);\n }\n }\n\n this.itemsContainer = element;\n };\n\n private handleLongClickUp = (event: React.MouseEvent | React.TouchEvent) => {\n event.preventDefault();\n this.longClickTimer = window.setTimeout(() => {\n this.setPositionRepeatTimer = window.setInterval(() => this.setPosition(this.state.pos - itemHeight), 100);\n }, 200);\n };\n\n private handleLongClickDown = (event: React.MouseEvent | React.TouchEvent) => {\n event.preventDefault();\n this.longClickTimer = window.setTimeout(() => {\n this.setPositionRepeatTimer = window.setInterval(() => this.setPosition(this.state.pos + itemHeight), 100);\n }, 200);\n };\n\n private handleLongClickStop = () => {\n clearTimeout(this.longClickTimer);\n clearTimeout(this.setPositionRepeatTimer);\n };\n\n private getAnchor = () => this.root;\n\n private handleWheel = (event: Event) => {\n if (!(event instanceof WheelEvent)) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n\n let deltaY = event.deltaY;\n if (event.deltaMode === 1) {\n deltaY *= itemHeight;\n } else if (event.deltaMode === 2) {\n deltaY *= itemHeight * 4;\n }\n const pos = this.state.pos + deltaY;\n this.setPosition(pos);\n };\n\n private handleTouchStart = (event: Event) => {\n if (!(event instanceof TouchEvent)) {\n return;\n }\n\n this.touchStartY = event.targetTouches[0].clientY;\n };\n\n private handleTouchMove = (event: Event) => {\n if (!(event instanceof TouchEvent)) {\n return;\n }\n\n const { clientY } = event.changedTouches[0];\n const pixelRatio = window.devicePixelRatio;\n\n const deltaY = ((this.touchStartY || 0) - clientY) / pixelRatio;\n const pos = this.state.pos + deltaY + deltaY / itemHeight;\n\n this.touchStartY = clientY;\n\n this.setPosition(pos);\n };\n\n private handleItemClick = (shift: number) => {\n return (e: React.MouseEvent<HTMLElement>) => {\n const value = this.props.value + shift;\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n this.setState({ opened: false });\n };\n };\n\n private handleKey = (e: KeyboardEvent) => {\n if (this.state.opened && isKeyEscape(e)) {\n e.preventDefault();\n this.close();\n e.stopPropagation();\n }\n };\n\n private handleUp = (event: React.MouseEvent) => {\n event.preventDefault();\n this.setPosition(this.state.pos - itemHeight * this.yearStep);\n };\n\n private handleDown = (event: React.MouseEvent) => {\n event.preventDefault();\n this.setPosition(this.state.pos + itemHeight * this.yearStep);\n };\n\n private getItem(index: number) {\n const value = this.props.value + index;\n if (this.props.type === 'month') {\n return this.locale.months[value];\n }\n return value;\n }\n\n private setPosition(pos: number) {\n let top = itemsToMoveCount * itemHeight;\n let height = visibleYearsCount * itemHeight;\n if (this.props.type === 'month') {\n top = -this.props.value * itemHeight;\n height = monthsCount * itemHeight;\n }\n\n const minPos = this.getMinPos() - top;\n const maxPos = this.getMaxPos() - top - height + itemHeight;\n if (minPos >= pos) {\n pos = minPos;\n }\n if (maxPos <= pos) {\n pos = maxPos;\n }\n const topCapped = pos <= minPos;\n const botCapped = pos >= maxPos;\n\n this.setState({ pos, top, height, topCapped, botCapped });\n }\n\n private getMinPos() {\n if (this.props.type === 'month') {\n return -this.props.value * itemHeight;\n } else if (this.props.type === 'year') {\n return ((this.props.minValue || defaultMinYear) - this.props.value) * itemHeight;\n }\n return -Infinity; // Be defensive.\n }\n\n private getMaxPos() {\n if (this.props.type === 'month') {\n return (visibleYearsCount - this.props.value) * itemHeight;\n } else if (this.props.type === 'year') {\n return ((this.props.maxValue || defaultMaxYear) - this.props.value) * itemHeight;\n }\n return Infinity; // Be defensive.\n }\n}\n\nfunction preventDefault(e: React.SyntheticEvent) {\n e.preventDefault();\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["DateSelect.tsx"],"names":["itemHeight","visibleYearsCount","itemsToMoveCount","monthsCount","defaultMinYear","defaultMaxYear","DateSelect","DatePickerLocaleHelper","state","botCapped","current","height","opened","pos","top","topCapped","nodeTop","Infinity","root","itemsContainer","longClickTimer","setPositionRepeatTimer","yearStep","touchStartY","open","props","disabled","setPosition","setState","close","refRoot","element","setNodeTop","timeout","clearTimeout","setTimeout","refItemsContainer","addEventListener","handleWheel","passive","removeEventListener","isMobile","handleTouchStart","handleTouchMove","handleLongClickUp","event","preventDefault","window","setInterval","handleLongClickDown","handleLongClickStop","getAnchor","WheelEvent","stopPropagation","deltaY","deltaMode","TouchEvent","targetTouches","clientY","changedTouches","pixelRatio","devicePixelRatio","handleItemClick","shift","e","value","onValueChange","handleKey","handleUp","handleDown","componentDidUpdate","componentDidMount","listener","LayoutEvents","addListener","componentWillUnmount","remove","render","theme","renderMain","width","rootProps","className","styles","Boolean","style","ref","caption","getItem","arrow","arrowDisabled","renderMenu","disableItems","index","maxValue","minValue","from","to","Math","ceil","items","i","menuItem","menuItemSelected","menuItemActive","menuItemDisabled","clickHandler","onMouseDown","onClick","push","left","right","shiftStyle","position","holderClass","menuHolder","isTopCapped","isBotCapped","dropdownOffset","overflowOffsetDelta","menu","menuUp","itemsHolder","menuDown","type","locale","months","minPos","getMinPos","maxPos","getMaxPos","React","PureComponent","__KONTUR_REACT_UI__","propTypes","PropTypes","bool","string","number","isRequired","oneOfType","func","defaultProps","minMonth","maxMonth"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport { DatePickerLocale, DatePickerLocaleHelper } from '../../components/DatePicker/locale';\nimport { locale } from '../../lib/locale/decorators';\nimport { RenderLayer } from '../RenderLayer';\nimport { DropdownContainer } from '../DropdownContainer';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { Nullable } from '../../typings/utility-types';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ArrowTriangleUpDownIcon, ArrowChevronDownIcon, ArrowChevronUpIcon } from '../icons/16px';\nimport { isMobile } from '../../lib/client';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\n\nimport { styles } from './DateSelect.styles';\n\nconst itemHeight = 24;\nconst visibleYearsCount = 11;\nconst itemsToMoveCount = -5;\nconst monthsCount = 12;\nconst defaultMinYear = 1900;\nconst defaultMaxYear = 2100;\n\nexport interface DateSelectProps {\n disabled?: boolean | null;\n onValueChange: (value: number) => void;\n type?: 'month' | 'year';\n value: number;\n width?: number | string;\n minValue?: number;\n maxValue?: number;\n}\n\nexport interface DateSelectState {\n botCapped: boolean;\n current: Nullable<number>;\n height: number;\n opened: boolean;\n pos: number;\n top: number;\n topCapped: boolean;\n nodeTop: number;\n}\n\n@locale('DatePicker', DatePickerLocaleHelper)\nexport class DateSelect extends React.PureComponent<DateSelectProps, DateSelectState> {\n public static __KONTUR_REACT_UI__ = 'DateSelect';\n\n public static propTypes = {\n disabled: PropTypes.bool,\n\n type: PropTypes.string,\n\n value: PropTypes.number.isRequired,\n\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n onValueChange: PropTypes.func,\n\n minValue: PropTypes.number,\n\n maxValue: PropTypes.number,\n };\n\n public static defaultProps = {\n type: 'year',\n minMonth: 0,\n maxMonth: 11,\n width: 'auto',\n };\n\n public state = {\n botCapped: false,\n current: 0,\n height: 0,\n opened: false,\n pos: 0,\n top: 0,\n topCapped: false,\n nodeTop: Infinity,\n };\n\n private theme!: Theme;\n private readonly locale!: DatePickerLocale;\n private root: HTMLElement | null = null;\n private itemsContainer: HTMLElement | null = null;\n private listener: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private timeout: NodeJS.Timeout | undefined;\n private longClickTimer = 0;\n private setPositionRepeatTimer = 0;\n private yearStep = 3;\n private touchStartY: Nullable<number> = null;\n\n public componentDidUpdate() {\n this.setNodeTop();\n }\n\n public componentDidMount() {\n this.listener = LayoutEvents.addListener(this.setNodeTop);\n this.setNodeTop();\n window.addEventListener('keydown', this.handleKey);\n }\n\n public componentWillUnmount() {\n if (this.listener) {\n this.listener.remove();\n }\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n if (this.longClickTimer) {\n clearTimeout(this.longClickTimer);\n }\n if (this.setPositionRepeatTimer) {\n clearTimeout(this.setPositionRepeatTimer);\n }\n window.removeEventListener('keydown', this.handleKey);\n }\n\n /**\n * @public\n */\n public open = () => {\n if (this.props.disabled) {\n return;\n }\n\n if (this.state.opened) {\n return;\n }\n\n this.setPosition(0);\n this.setState({\n opened: true,\n current: 0,\n });\n };\n\n /**\n * @public\n */\n public close = () => {\n if (!this.state.opened) {\n return;\n }\n\n this.setState({ opened: false });\n };\n\n public render() {\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 { width, disabled } = this.props;\n const rootProps = {\n className: cx({\n [styles.root(this.theme)]: true,\n [styles.disabled()]: Boolean(disabled),\n }),\n style: { width },\n ref: this.refRoot,\n };\n return (\n <span {...rootProps}>\n <div data-tid=\"DateSelect__caption\" className={styles.caption()} onClick={this.open}>\n {this.getItem(0)}\n <div\n className={cx({\n [styles.arrow(this.theme)]: true,\n [styles.arrowDisabled()]: Boolean(disabled),\n })}\n >\n <ArrowTriangleUpDownIcon size={12} />\n </div>\n </div>\n {this.state.opened && this.renderMenu()}\n </span>\n );\n }\n\n private refRoot = (element: HTMLElement | null) => {\n this.root = element;\n };\n\n private setNodeTop = () => {\n const root = this.root;\n if (!root) {\n return;\n }\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n this.timeout = setTimeout(() =>\n this.setState({\n nodeTop: getDOMRect(root).top,\n }),\n );\n };\n\n private disableItems(index: number) {\n const value = this.props.value + index;\n if (this.props.maxValue != null && this.props.minValue != null) {\n return value > this.props.maxValue || value < this.props.minValue;\n }\n if (this.props.minValue != null) {\n return value < this.props.minValue;\n }\n if (this.props.maxValue != null) {\n return value > this.props.maxValue;\n }\n }\n\n private renderMenu(): React.ReactNode {\n const { top, height, nodeTop } = this.state;\n\n let shift = this.state.pos % itemHeight;\n if (shift < 0) {\n shift += itemHeight;\n }\n\n const from = (this.state.pos - shift + top) / itemHeight;\n const to = from + Math.ceil((height + shift) / itemHeight);\n const items = [];\n\n for (let i = from; i < to; ++i) {\n const disableItems = this.disableItems(i) || false;\n const className = cx({\n [styles.menuItem(this.theme)]: true,\n [styles.menuItemSelected(this.theme)]: i === 0,\n [styles.menuItemActive(this.theme)]: i === this.state.current,\n [styles.menuItemDisabled(this.theme)]: disableItems,\n });\n const clickHandler = {\n onMouseDown: preventDefault,\n onClick: this.handleItemClick(i),\n };\n items.push(\n <div\n data-tid=\"DateSelect__menuItem\"\n data-prop-disabled={disableItems}\n key={i}\n className={className}\n onMouseEnter={() => this.setState({ current: i })}\n onMouseLeave={() => this.setState({ current: null })}\n {...clickHandler}\n >\n {this.getItem(i)}\n </div>,\n );\n }\n const style: {\n left?: number | string;\n right?: number | string;\n top: number;\n width?: number | string;\n } = {\n top: top - 5,\n left: 0,\n right: 0,\n };\n\n const shiftStyle: React.CSSProperties = {\n position: 'relative',\n top: -shift,\n };\n\n const holderClass = cx({\n [styles.menuHolder(this.theme)]: true,\n [styles.isTopCapped()]: this.state.topCapped,\n [styles.isBotCapped()]: this.state.botCapped,\n });\n\n let dropdownOffset = -itemHeight;\n if (nodeTop < -top) {\n const overflowOffsetDelta = this.state.topCapped ? 6 : 17;\n dropdownOffset -= nodeTop + top - overflowOffsetDelta;\n }\n\n return (\n <RenderLayer onClickOutside={this.close} onFocusOutside={this.close} active>\n <div>\n <DropdownContainer getParent={this.getAnchor} offsetY={dropdownOffset} offsetX={-10}>\n <div className={holderClass} style={style}>\n {!this.state.topCapped && (\n <div\n className={cx(styles.menu(this.theme), styles.menuUp())}\n onClick={this.handleUp}\n onMouseDown={this.handleLongClickUp}\n onMouseUp={this.handleLongClickStop}\n onMouseLeave={this.handleLongClickStop}\n onTouchStart={this.handleLongClickUp}\n onTouchEnd={this.handleLongClickStop}\n >\n <span>\n <ArrowChevronUpIcon />\n </span>\n </div>\n )}\n <div className={styles.itemsHolder()} style={{ height }}>\n <div ref={this.refItemsContainer} style={shiftStyle}>\n {items}\n </div>\n </div>\n {!this.state.botCapped && (\n <div\n className={cx(styles.menu(this.theme), styles.menuDown())}\n onClick={this.handleDown}\n onMouseDown={this.handleLongClickDown}\n onMouseUp={this.handleLongClickStop}\n onMouseLeave={this.handleLongClickStop}\n onTouchStart={this.handleLongClickDown}\n onTouchEnd={this.handleLongClickStop}\n >\n <span>\n <ArrowChevronDownIcon />\n </span>\n </div>\n )}\n </div>\n </DropdownContainer>\n </div>\n </RenderLayer>\n );\n }\n\n private refItemsContainer = (element: HTMLElement | null) => {\n if (!this.itemsContainer && element) {\n element.addEventListener('wheel', this.handleWheel, { passive: false });\n }\n if (this.itemsContainer && !element) {\n this.itemsContainer.removeEventListener('wheel', this.handleWheel);\n }\n\n if (isMobile) {\n if (!this.itemsContainer && element) {\n element.addEventListener('touchstart', this.handleTouchStart);\n element.addEventListener('touchmove', this.handleTouchMove);\n }\n if (this.itemsContainer && !element) {\n this.itemsContainer.removeEventListener('touchstart', this.handleTouchStart);\n this.itemsContainer.removeEventListener('touchmove', this.handleTouchMove);\n }\n }\n\n this.itemsContainer = element;\n };\n\n private handleLongClickUp = (event: React.MouseEvent | React.TouchEvent) => {\n event.preventDefault();\n this.longClickTimer = window.setTimeout(() => {\n this.setPositionRepeatTimer = window.setInterval(() => this.setPosition(this.state.pos - itemHeight), 100);\n }, 200);\n };\n\n private handleLongClickDown = (event: React.MouseEvent | React.TouchEvent) => {\n event.preventDefault();\n this.longClickTimer = window.setTimeout(() => {\n this.setPositionRepeatTimer = window.setInterval(() => this.setPosition(this.state.pos + itemHeight), 100);\n }, 200);\n };\n\n private handleLongClickStop = () => {\n clearTimeout(this.longClickTimer);\n clearTimeout(this.setPositionRepeatTimer);\n };\n\n private getAnchor = () => this.root;\n\n private handleWheel = (event: Event) => {\n if (!(event instanceof WheelEvent)) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n\n let deltaY = event.deltaY;\n if (event.deltaMode === 1) {\n deltaY *= itemHeight;\n } else if (event.deltaMode === 2) {\n deltaY *= itemHeight * 4;\n }\n const pos = this.state.pos + deltaY;\n this.setPosition(pos);\n };\n\n private handleTouchStart = (event: Event) => {\n if (!(event instanceof TouchEvent)) {\n return;\n }\n\n this.touchStartY = event.targetTouches[0].clientY;\n };\n\n private handleTouchMove = (event: Event) => {\n if (!(event instanceof TouchEvent)) {\n return;\n }\n\n const { clientY } = event.changedTouches[0];\n const pixelRatio = window.devicePixelRatio;\n\n const deltaY = ((this.touchStartY || 0) - clientY) / pixelRatio;\n const pos = this.state.pos + deltaY + deltaY / itemHeight;\n\n this.touchStartY = clientY;\n\n this.setPosition(pos);\n };\n\n private handleItemClick = (shift: number) => {\n return (e: React.MouseEvent<HTMLElement>) => {\n const value = this.props.value + shift;\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n this.setState({ opened: false });\n };\n };\n\n private handleKey = (e: KeyboardEvent) => {\n if (this.state.opened && isKeyEscape(e)) {\n e.preventDefault();\n this.close();\n e.stopPropagation();\n }\n };\n\n private handleUp = (event: React.MouseEvent) => {\n event.preventDefault();\n this.setPosition(this.state.pos - itemHeight * this.yearStep);\n };\n\n private handleDown = (event: React.MouseEvent) => {\n event.preventDefault();\n this.setPosition(this.state.pos + itemHeight * this.yearStep);\n };\n\n private getItem(index: number) {\n const value = this.props.value + index;\n if (this.props.type === 'month') {\n return this.locale.months[value];\n }\n return value;\n }\n\n private setPosition(pos: number) {\n let top = itemsToMoveCount * itemHeight;\n let height = visibleYearsCount * itemHeight;\n if (this.props.type === 'month') {\n top = -this.props.value * itemHeight;\n height = monthsCount * itemHeight;\n }\n\n const minPos = this.getMinPos() - top;\n const maxPos = this.getMaxPos() - top - height + itemHeight;\n if (minPos >= pos) {\n pos = minPos;\n }\n if (maxPos <= pos) {\n pos = maxPos;\n }\n const topCapped = pos <= minPos;\n const botCapped = pos >= maxPos;\n\n this.setState({ pos, top, height, topCapped, botCapped });\n }\n\n private getMinPos() {\n if (this.props.type === 'month') {\n return -this.props.value * itemHeight;\n } else if (this.props.type === 'year') {\n return ((this.props.minValue || defaultMinYear) - this.props.value) * itemHeight;\n }\n return -Infinity; // Be defensive.\n }\n\n private getMaxPos() {\n if (this.props.type === 'month') {\n return (visibleYearsCount - this.props.value) * itemHeight;\n } else if (this.props.type === 'year') {\n return ((this.props.maxValue || defaultMaxYear) - this.props.value) * itemHeight;\n }\n return Infinity; // Be defensive.\n }\n}\n\nfunction preventDefault(e: React.SyntheticEvent) {\n e.preventDefault();\n}\n"]}
|
|
@@ -7,6 +7,7 @@ var _createPropsGetter = require("../../lib/createPropsGetter");
|
|
|
7
7
|
|
|
8
8
|
var _Emotion = require("../../lib/theming/Emotion");
|
|
9
9
|
var _client = require("../../lib/client");
|
|
10
|
+
var _getDOMRect = require("../../lib/dom/getDOMRect");
|
|
10
11
|
|
|
11
12
|
var _DropdownContainer = require("./DropdownContainer.styles");function _getRequireWildcardCache(nodeInterop) {if (typeof WeakMap !== "function") return null;var cacheBabelInterop = new WeakMap();var cacheNodeInterop = new WeakMap();return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {return nodeInterop ? cacheNodeInterop : cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj, nodeInterop) {if (!nodeInterop && obj && obj.__esModule) {return obj;}if (obj === null || typeof obj !== "object" && typeof obj !== "function") {return { default: obj };}var cache = _getRequireWildcardCache(nodeInterop);if (cache && cache.has(obj)) {return cache.get(obj);}var newObj = {};var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;for (var key in obj) {if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;if (desc && (desc.get || desc.set)) {Object.defineProperty(newObj, key, desc);} else {newObj[key] = obj[key];}}}newObj.default = obj;if (cache) {cache.set(obj, newObj);}return newObj;}var
|
|
12
13
|
|
|
@@ -112,7 +113,7 @@ DropdownContainer = /*#__PURE__*/function (_React$PureComponent) {(0, _inheritsL
|
|
|
112
113
|
var dom = _this.dom;
|
|
113
114
|
|
|
114
115
|
if (target && _this.isElement(target) && dom) {
|
|
115
|
-
var targetRect =
|
|
116
|
+
var targetRect = (0, _getDOMRect.getDOMRect)(target);
|
|
116
117
|
var _document = document,body = _document.body,docEl = _document.documentElement;
|
|
117
118
|
|
|
118
119
|
if (!docEl) {
|
|
@@ -165,18 +166,12 @@ DropdownContainer = /*#__PURE__*/function (_React$PureComponent) {(0, _inheritsL
|
|
|
165
166
|
return 0;
|
|
166
167
|
}
|
|
167
168
|
var child = _this.dom.children.item(0);
|
|
168
|
-
|
|
169
|
-
return 0;
|
|
170
|
-
}
|
|
171
|
-
return child.getBoundingClientRect().height;
|
|
169
|
+
return (0, _getDOMRect.getDOMRect)(child).height;
|
|
172
170
|
};_this.
|
|
173
171
|
|
|
174
172
|
getMinWidth = function () {
|
|
175
173
|
var target = _this.props.getParent();
|
|
176
|
-
|
|
177
|
-
return 0;
|
|
178
|
-
}
|
|
179
|
-
return target.getBoundingClientRect().width;
|
|
174
|
+
return (0, _getDOMRect.getDOMRect)(target).width;
|
|
180
175
|
};_this.
|
|
181
176
|
|
|
182
177
|
convertToRelativePosition = function (position) {
|
|
@@ -184,7 +179,7 @@ DropdownContainer = /*#__PURE__*/function (_React$PureComponent) {(0, _inheritsL
|
|
|
184
179
|
var _this$props = _this.props,_this$props$offsetX = _this$props.offsetX,offsetX = _this$props$offsetX === void 0 ? 0 : _this$props$offsetX,_this$props$offsetY2 = _this$props.offsetY,offsetY = _this$props$offsetY2 === void 0 ? 0 : _this$props$offsetY2;
|
|
185
180
|
var top = position.top,bottom = position.bottom,left = position.left,right = position.right;
|
|
186
181
|
if (target && _this.isElement(target)) {
|
|
187
|
-
var targetHeight =
|
|
182
|
+
var targetHeight = (0, _getDOMRect.getDOMRect)(target).height;
|
|
188
183
|
return {
|
|
189
184
|
top: top !== null ? targetHeight + offsetY : null,
|
|
190
185
|
bottom: bottom !== null ? targetHeight + offsetY : null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["DropdownContainer.tsx"],"names":["DropdownContainer","props","getProps","defaultProps","ZIndexRef","element","dom","isElement","node","Element","position","target","getParent","targetRect","getBoundingClientRect","document","body","docEl","documentElement","Error","scrollX","window","pageXOffset","scrollLeft","scrollY","pageYOffset","scrollTop","left","right","align","docWidth","offsetWidth","offsetX","offsetY","bottom","top","distanceToBottom","clientHeight","dropdownHeight","getHeight","state","isDocumentElementRoot","scrollHeight","setState","minWidth","getMinWidth","disablePortal","convertToRelativePosition","child","children","item","height","width","targetHeight","getIsDocumentElementRoot","componentDidMount","layoutSub","LayoutEvents","addListener","componentWillUnmount","remove","render","style","undefined","maxWidth","hasFixedWidth","content","styles","alignRight","isIE11","React","PureComponent","__KONTUR_REACT_UI__","htmlPosition","getComputedStyle","bodyPosition","hasLimitedHeightRoot","hasStaticRoot"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { RenderContainer } from '../RenderContainer';\nimport { ZIndex } from '../ZIndex';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\n\nimport { styles } from './DropdownContainer.styles';\n\nexport interface DropdownContainerPosition {\n top: Nullable<number>;\n bottom: Nullable<number>;\n left: Nullable<number>;\n right: Nullable<number>;\n}\n\nexport interface DropdownContainerProps {\n align?: 'left' | 'right';\n getParent: () => Nullable<HTMLElement>;\n children?: React.ReactNode;\n disablePortal?: boolean;\n offsetY?: number;\n offsetX?: number;\n hasFixedWidth?: boolean;\n}\n\nexport interface DropdownContainerState {\n position: Nullable<DropdownContainerPosition>;\n minWidth: number;\n isDocumentElementRoot?: boolean;\n}\n\nexport class DropdownContainer extends React.PureComponent<DropdownContainerProps, DropdownContainerState> {\n public static __KONTUR_REACT_UI__ = 'DropdownContainer';\n\n public static defaultProps = {\n align: 'left',\n disablePortal: false,\n offsetX: 0,\n offsetY: -1,\n };\n\n private getProps = createPropsGetter(DropdownContainer.defaultProps);\n\n private dom: Nullable<HTMLDivElement>;\n private layoutSub: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n\n constructor(props: DropdownContainerProps) {\n super(props);\n\n this.state = { position: null, minWidth: 0, isDocumentElementRoot: getIsDocumentElementRoot() };\n }\n\n public componentDidMount() {\n this.position();\n this.layoutSub = LayoutEvents.addListener(this.position);\n }\n\n public componentWillUnmount() {\n if (this.layoutSub) {\n this.layoutSub.remove();\n }\n }\n\n public render() {\n let style: React.CSSProperties = {\n position: 'absolute',\n top: '0',\n };\n if (this.state.position) {\n const { top, bottom, left, right } = this.state.position;\n style = {\n ...style,\n top: top !== null ? top : undefined,\n bottom: bottom !== null ? bottom : undefined,\n left: left !== null ? left : undefined,\n right: right !== null ? right : undefined,\n minWidth: this.state.minWidth,\n maxWidth: this.props.hasFixedWidth ? this.state.minWidth : undefined,\n };\n }\n\n const content = (\n <ZIndex\n priority={'DropdownContainer'}\n wrapperRef={this.ZIndexRef}\n style={style}\n className={cx({\n [styles.alignRight()]: this.props.align === 'right' && !isIE11,\n })}\n >\n {this.props.children}\n </ZIndex>\n );\n\n return this.props.disablePortal ? content : <RenderContainer>{content}</RenderContainer>;\n }\n\n private ZIndexRef = (element: Nullable<HTMLDivElement>) => {\n this.dom = element;\n };\n\n private isElement = (node: Nullable<Element>): node is Element => {\n return node instanceof Element;\n };\n\n public position = () => {\n const target = this.props.getParent();\n const dom = this.dom;\n\n if (target && this.isElement(target) && dom) {\n const targetRect = target.getBoundingClientRect();\n const { body, documentElement: docEl } = document;\n\n if (!docEl) {\n throw Error('There is no \"documentElement\" in \"document\"');\n }\n\n const scrollX = window.pageXOffset || docEl.scrollLeft || 0;\n const scrollY = window.pageYOffset || docEl.scrollTop || 0;\n\n let left = null;\n let right = null;\n\n if (this.props.align === 'right') {\n const docWidth = docEl.offsetWidth || 0;\n right = docWidth - (targetRect.right + scrollX) + this.getProps().offsetX;\n } else {\n left = targetRect.left + scrollX + this.getProps().offsetX;\n }\n\n const { offsetY = 0 } = this.props;\n let bottom = null;\n let top: number | null = targetRect.bottom + scrollY + offsetY;\n\n const distanceToBottom = docEl.clientHeight - targetRect.bottom;\n const dropdownHeight = this.getHeight();\n\n if (distanceToBottom < dropdownHeight && targetRect.top > dropdownHeight) {\n const clientHeight = this.state.isDocumentElementRoot ? docEl.clientHeight : body.scrollHeight;\n\n top = null;\n bottom = clientHeight + offsetY - scrollY - targetRect.top;\n }\n\n const position = {\n top,\n left,\n right,\n bottom,\n };\n\n this.setState({\n minWidth: this.getMinWidth(),\n position: this.props.disablePortal ? this.convertToRelativePosition(position) : position,\n });\n }\n };\n\n private getHeight = () => {\n if (!this.isElement(this.dom)) {\n return 0;\n }\n const child = this.dom.children.item(0);\n if (!child) {\n return 0;\n }\n return child.getBoundingClientRect().height;\n };\n\n private getMinWidth = () => {\n const target = this.props.getParent();\n if (!target || !this.isElement(target)) {\n return 0;\n }\n return target.getBoundingClientRect().width;\n };\n\n private convertToRelativePosition = (position: DropdownContainerPosition): DropdownContainerPosition => {\n const target = this.props.getParent();\n const { offsetX = 0, offsetY = 0 } = this.props;\n const { top, bottom, left, right } = position;\n if (target && this.isElement(target)) {\n const targetHeight = target.getBoundingClientRect().height;\n return {\n top: top !== null ? targetHeight + offsetY : null,\n bottom: bottom !== null ? targetHeight + offsetY : null,\n left: left !== null ? offsetX : null,\n right: right !== null ? offsetX : null,\n };\n }\n return {\n top: offsetY,\n bottom: null,\n left: offsetX,\n right: null,\n };\n };\n}\n\nconst getIsDocumentElementRoot = () => {\n const { body, documentElement } = document;\n const htmlPosition = getComputedStyle(documentElement).position;\n const bodyPosition = getComputedStyle(body).position;\n\n const hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;\n const hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';\n return hasLimitedHeightRoot || hasStaticRoot;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["DropdownContainer.tsx"],"names":["DropdownContainer","props","getProps","defaultProps","ZIndexRef","element","dom","isElement","node","Element","position","target","getParent","targetRect","document","body","docEl","documentElement","Error","scrollX","window","pageXOffset","scrollLeft","scrollY","pageYOffset","scrollTop","left","right","align","docWidth","offsetWidth","offsetX","offsetY","bottom","top","distanceToBottom","clientHeight","dropdownHeight","getHeight","state","isDocumentElementRoot","scrollHeight","setState","minWidth","getMinWidth","disablePortal","convertToRelativePosition","child","children","item","height","width","targetHeight","getIsDocumentElementRoot","componentDidMount","layoutSub","LayoutEvents","addListener","componentWillUnmount","remove","render","style","undefined","maxWidth","hasFixedWidth","content","styles","alignRight","isIE11","React","PureComponent","__KONTUR_REACT_UI__","htmlPosition","getComputedStyle","bodyPosition","hasLimitedHeightRoot","hasStaticRoot"],"mappings":"+UAAA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+D;;;;;;;;;;;;;;;;;;;;;;;;;AAyBaA,iB;;;;;;;;;;;;;;;AAeX,6BAAYC,KAAZ,EAA2C;AACzC,4CAAMA,KAAN,UADyC,MALnCC,QAKmC,GALxB,0CAAkBF,iBAAiB,CAACG,YAApC,CAKwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDnCC,IAAAA,SAnDmC,GAmDvB,UAACC,OAAD,EAAuC;AACzD,YAAKC,GAAL,GAAWD,OAAX;AACD,KArD0C;;AAuDnCE,IAAAA,SAvDmC,GAuDvB,UAACC,IAAD,EAA8C;AAChE,aAAOA,IAAI,YAAYC,OAAvB;AACD,KAzD0C;;AA2DpCC,IAAAA,QA3DoC,GA2DzB,YAAM;AACtB,UAAMC,MAAM,GAAG,MAAKV,KAAL,CAAWW,SAAX,EAAf;AACA,UAAMN,GAAG,GAAG,MAAKA,GAAjB;;AAEA,UAAIK,MAAM,IAAI,MAAKJ,SAAL,CAAeI,MAAf,CAAV,IAAoCL,GAAxC,EAA6C;AAC3C,YAAMO,UAAU,GAAG,4BAAWF,MAAX,CAAnB;AACA,wBAAyCG,QAAzC,CAAQC,IAAR,aAAQA,IAAR,CAA+BC,KAA/B,aAAcC,eAAd;;AAEA,YAAI,CAACD,KAAL,EAAY;AACV,gBAAME,KAAK,CAAC,6CAAD,CAAX;AACD;;AAED,YAAMC,OAAO,GAAGC,MAAM,CAACC,WAAP,IAAsBL,KAAK,CAACM,UAA5B,IAA0C,CAA1D;AACA,YAAMC,OAAO,GAAGH,MAAM,CAACI,WAAP,IAAsBR,KAAK,CAACS,SAA5B,IAAyC,CAAzD;;AAEA,YAAIC,IAAI,GAAG,IAAX;AACA,YAAIC,KAAK,GAAG,IAAZ;;AAEA,YAAI,MAAK1B,KAAL,CAAW2B,KAAX,KAAqB,OAAzB,EAAkC;AAChC,cAAMC,QAAQ,GAAGb,KAAK,CAACc,WAAN,IAAqB,CAAtC;AACAH,UAAAA,KAAK,GAAGE,QAAQ,IAAIhB,UAAU,CAACc,KAAX,GAAmBR,OAAvB,CAAR,GAA0C,MAAKjB,QAAL,GAAgB6B,OAAlE;AACD,SAHD,MAGO;AACLL,UAAAA,IAAI,GAAGb,UAAU,CAACa,IAAX,GAAkBP,OAAlB,GAA4B,MAAKjB,QAAL,GAAgB6B,OAAnD;AACD;;AAED,kCAAwB,MAAK9B,KAA7B,CAAQ+B,OAAR,CAAQA,OAAR,oCAAkB,CAAlB;AACA,YAAIC,MAAM,GAAG,IAAb;AACA,YAAIC,GAAkB,GAAGrB,UAAU,CAACoB,MAAX,GAAoBV,OAApB,GAA8BS,OAAvD;;AAEA,YAAMG,gBAAgB,GAAGnB,KAAK,CAACoB,YAAN,GAAqBvB,UAAU,CAACoB,MAAzD;AACA,YAAMI,cAAc,GAAG,MAAKC,SAAL,EAAvB;;AAEA,YAAIH,gBAAgB,GAAGE,cAAnB,IAAqCxB,UAAU,CAACqB,GAAX,GAAiBG,cAA1D,EAA0E;AACxE,cAAMD,YAAY,GAAG,MAAKG,KAAL,CAAWC,qBAAX,GAAmCxB,KAAK,CAACoB,YAAzC,GAAwDrB,IAAI,CAAC0B,YAAlF;;AAEAP,UAAAA,GAAG,GAAG,IAAN;AACAD,UAAAA,MAAM,GAAGG,YAAY,GAAGJ,OAAf,GAAyBT,OAAzB,GAAmCV,UAAU,CAACqB,GAAvD;AACD;;AAED,YAAMxB,QAAQ,GAAG;AACfwB,UAAAA,GAAG,EAAHA,GADe;AAEfR,UAAAA,IAAI,EAAJA,IAFe;AAGfC,UAAAA,KAAK,EAALA,KAHe;AAIfM,UAAAA,MAAM,EAANA,MAJe,EAAjB;;;AAOA,cAAKS,QAAL,CAAc;AACZC,UAAAA,QAAQ,EAAE,MAAKC,WAAL,EADE;AAEZlC,UAAAA,QAAQ,EAAE,MAAKT,KAAL,CAAW4C,aAAX,GAA2B,MAAKC,yBAAL,CAA+BpC,QAA/B,CAA3B,GAAsEA,QAFpE,EAAd;;AAID;AACF,KA9G0C;;AAgHnC4B,IAAAA,SAhHmC,GAgHvB,YAAM;AACxB,UAAI,CAAC,MAAK/B,SAAL,CAAe,MAAKD,GAApB,CAAL,EAA+B;AAC7B,eAAO,CAAP;AACD;AACD,UAAMyC,KAAK,GAAG,MAAKzC,GAAL,CAAS0C,QAAT,CAAkBC,IAAlB,CAAuB,CAAvB,CAAd;AACA,aAAO,4BAAWF,KAAX,EAAkBG,MAAzB;AACD,KAtH0C;;AAwHnCN,IAAAA,WAxHmC,GAwHrB,YAAM;AAC1B,UAAMjC,MAAM,GAAG,MAAKV,KAAL,CAAWW,SAAX,EAAf;AACA,aAAO,4BAAWD,MAAX,EAAmBwC,KAA1B;AACD,KA3H0C;;AA6HnCL,IAAAA,yBA7HmC,GA6HP,UAACpC,QAAD,EAAoE;AACtG,UAAMC,MAAM,GAAG,MAAKV,KAAL,CAAWW,SAAX,EAAf;AACA,wBAAqC,MAAKX,KAA1C,mCAAQ8B,OAAR,CAAQA,OAAR,oCAAkB,CAAlB,0DAAqBC,OAArB,CAAqBA,OAArB,qCAA+B,CAA/B;AACA,UAAQE,GAAR,GAAqCxB,QAArC,CAAQwB,GAAR,CAAaD,MAAb,GAAqCvB,QAArC,CAAauB,MAAb,CAAqBP,IAArB,GAAqChB,QAArC,CAAqBgB,IAArB,CAA2BC,KAA3B,GAAqCjB,QAArC,CAA2BiB,KAA3B;AACA,UAAIhB,MAAM,IAAI,MAAKJ,SAAL,CAAeI,MAAf,CAAd,EAAsC;AACpC,YAAMyC,YAAY,GAAG,4BAAWzC,MAAX,EAAmBuC,MAAxC;AACA,eAAO;AACLhB,UAAAA,GAAG,EAAEA,GAAG,KAAK,IAAR,GAAekB,YAAY,GAAGpB,OAA9B,GAAwC,IADxC;AAELC,UAAAA,MAAM,EAAEA,MAAM,KAAK,IAAX,GAAkBmB,YAAY,GAAGpB,OAAjC,GAA2C,IAF9C;AAGLN,UAAAA,IAAI,EAAEA,IAAI,KAAK,IAAT,GAAgBK,OAAhB,GAA0B,IAH3B;AAILJ,UAAAA,KAAK,EAAEA,KAAK,KAAK,IAAV,GAAiBI,OAAjB,GAA2B,IAJ7B,EAAP;;AAMD;AACD,aAAO;AACLG,QAAAA,GAAG,EAAEF,OADA;AAELC,QAAAA,MAAM,EAAE,IAFH;AAGLP,QAAAA,IAAI,EAAEK,OAHD;AAILJ,QAAAA,KAAK,EAAE,IAJF,EAAP;;AAMD,KAhJ0C,CAGzC,MAAKY,KAAL,GAAa,EAAE7B,QAAQ,EAAE,IAAZ,EAAkBiC,QAAQ,EAAE,CAA5B,EAA+BH,qBAAqB,EAAEa,wBAAwB,EAA9E,EAAb,CAHyC,aAI1C,C,gDAEMC,iB,GAAP,6BAA2B,CACzB,KAAK5C,QAAL,GACA,KAAK6C,SAAL,GAAiBC,YAAY,CAACC,WAAb,CAAyB,KAAK/C,QAA9B,CAAjB,CACD,C,QAEMgD,oB,GAAP,gCAA8B,CAC5B,IAAI,KAAKH,SAAT,EAAoB,CAClB,KAAKA,SAAL,CAAeI,MAAf,GACD,CACF,C,QAEMC,M,GAAP,kBAAgB,SACd,IAAIC,KAA0B,GAAG,EAC/BnD,QAAQ,EAAE,UADqB,EAE/BwB,GAAG,EAAE,GAF0B,EAAjC,CAIA,IAAI,KAAKK,KAAL,CAAW7B,QAAf,EAAyB,CACvB,2BAAqC,KAAK6B,KAAL,CAAW7B,QAAhD,CAAQwB,GAAR,wBAAQA,GAAR,CAAaD,MAAb,wBAAaA,MAAb,CAAqBP,IAArB,wBAAqBA,IAArB,CAA2BC,KAA3B,wBAA2BA,KAA3B,CACAkC,KAAK,8BACAA,KADA,IAEH3B,GAAG,EAAEA,GAAG,KAAK,IAAR,GAAeA,GAAf,GAAqB4B,SAFvB,EAGH7B,MAAM,EAAEA,MAAM,KAAK,IAAX,GAAkBA,MAAlB,GAA2B6B,SAHhC,EAIHpC,IAAI,EAAEA,IAAI,KAAK,IAAT,GAAgBA,IAAhB,GAAuBoC,SAJ1B,EAKHnC,KAAK,EAAEA,KAAK,KAAK,IAAV,GAAiBA,KAAjB,GAAyBmC,SAL7B,EAMHnB,QAAQ,EAAE,KAAKJ,KAAL,CAAWI,QANlB,EAOHoB,QAAQ,EAAE,KAAK9D,KAAL,CAAW+D,aAAX,GAA2B,KAAKzB,KAAL,CAAWI,QAAtC,GAAiDmB,SAPxD,GAAL,CASD,CAED,IAAMG,OAAO,gBACX,6BAAC,cAAD,IACE,QAAQ,EAAE,mBADZ,EAEE,UAAU,EAAE,KAAK7D,SAFnB,EAGE,KAAK,EAAEyD,KAHT,EAIE,SAAS,EAAE,gCACRK,0BAAOC,UAAP,EADQ,IACc,KAAKlE,KAAL,CAAW2B,KAAX,KAAqB,OAArB,IAAgC,CAACwC,cAD/C,OAJb,IAQG,KAAKnE,KAAL,CAAW+C,QARd,CADF,CAaA,OAAO,KAAK/C,KAAL,CAAW4C,aAAX,GAA2BoB,OAA3B,gBAAqC,6BAAC,gCAAD,QAAkBA,OAAlB,CAA5C,CACD,C,4BAhEoCI,eAAMC,a,gDAAhCtE,iB,CACGuE,mB,GAAsB,mB,CADzBvE,iB,CAGGG,Y,GAAe,EAC3ByB,KAAK,EAAE,MADoB,EAE3BiB,aAAa,EAAE,KAFY,EAG3Bd,OAAO,EAAE,CAHkB,EAI3BC,OAAO,EAAE,CAAC,CAJiB,E;;;AA+J/B,IAAMqB,wBAAwB,GAAG,SAA3BA,wBAA2B,GAAM;AACrC,mBAAkCvC,QAAlC,CAAQC,IAAR,cAAQA,IAAR,CAAcE,eAAd,cAAcA,eAAd;AACA,MAAMuD,YAAY,GAAGC,gBAAgB,CAACxD,eAAD,CAAhB,CAAkCP,QAAvD;AACA,MAAMgE,YAAY,GAAGD,gBAAgB,CAAC1D,IAAD,CAAhB,CAAuBL,QAA5C;;AAEA,MAAMiE,oBAAoB,GAAG5D,IAAI,CAAC0B,YAAL,GAAoB1B,IAAI,CAACqB,YAAtD;AACA,MAAMwC,aAAa,GAAGJ,YAAY,KAAK,QAAjB,IAA6BE,YAAY,KAAK,QAApE;AACA,SAAOC,oBAAoB,IAAIC,aAA/B;AACD,CARD","sourcesContent":["import React from 'react';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { RenderContainer } from '../RenderContainer';\nimport { ZIndex } from '../ZIndex';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\n\nimport { styles } from './DropdownContainer.styles';\n\nexport interface DropdownContainerPosition {\n top: Nullable<number>;\n bottom: Nullable<number>;\n left: Nullable<number>;\n right: Nullable<number>;\n}\n\nexport interface DropdownContainerProps {\n align?: 'left' | 'right';\n getParent: () => Nullable<HTMLElement>;\n children?: React.ReactNode;\n disablePortal?: boolean;\n offsetY?: number;\n offsetX?: number;\n hasFixedWidth?: boolean;\n}\n\nexport interface DropdownContainerState {\n position: Nullable<DropdownContainerPosition>;\n minWidth: number;\n isDocumentElementRoot?: boolean;\n}\n\nexport class DropdownContainer extends React.PureComponent<DropdownContainerProps, DropdownContainerState> {\n public static __KONTUR_REACT_UI__ = 'DropdownContainer';\n\n public static defaultProps = {\n align: 'left',\n disablePortal: false,\n offsetX: 0,\n offsetY: -1,\n };\n\n private getProps = createPropsGetter(DropdownContainer.defaultProps);\n\n private dom: Nullable<HTMLDivElement>;\n private layoutSub: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n\n constructor(props: DropdownContainerProps) {\n super(props);\n\n this.state = { position: null, minWidth: 0, isDocumentElementRoot: getIsDocumentElementRoot() };\n }\n\n public componentDidMount() {\n this.position();\n this.layoutSub = LayoutEvents.addListener(this.position);\n }\n\n public componentWillUnmount() {\n if (this.layoutSub) {\n this.layoutSub.remove();\n }\n }\n\n public render() {\n let style: React.CSSProperties = {\n position: 'absolute',\n top: '0',\n };\n if (this.state.position) {\n const { top, bottom, left, right } = this.state.position;\n style = {\n ...style,\n top: top !== null ? top : undefined,\n bottom: bottom !== null ? bottom : undefined,\n left: left !== null ? left : undefined,\n right: right !== null ? right : undefined,\n minWidth: this.state.minWidth,\n maxWidth: this.props.hasFixedWidth ? this.state.minWidth : undefined,\n };\n }\n\n const content = (\n <ZIndex\n priority={'DropdownContainer'}\n wrapperRef={this.ZIndexRef}\n style={style}\n className={cx({\n [styles.alignRight()]: this.props.align === 'right' && !isIE11,\n })}\n >\n {this.props.children}\n </ZIndex>\n );\n\n return this.props.disablePortal ? content : <RenderContainer>{content}</RenderContainer>;\n }\n\n private ZIndexRef = (element: Nullable<HTMLDivElement>) => {\n this.dom = element;\n };\n\n private isElement = (node: Nullable<Element>): node is Element => {\n return node instanceof Element;\n };\n\n public position = () => {\n const target = this.props.getParent();\n const dom = this.dom;\n\n if (target && this.isElement(target) && dom) {\n const targetRect = getDOMRect(target);\n const { body, documentElement: docEl } = document;\n\n if (!docEl) {\n throw Error('There is no \"documentElement\" in \"document\"');\n }\n\n const scrollX = window.pageXOffset || docEl.scrollLeft || 0;\n const scrollY = window.pageYOffset || docEl.scrollTop || 0;\n\n let left = null;\n let right = null;\n\n if (this.props.align === 'right') {\n const docWidth = docEl.offsetWidth || 0;\n right = docWidth - (targetRect.right + scrollX) + this.getProps().offsetX;\n } else {\n left = targetRect.left + scrollX + this.getProps().offsetX;\n }\n\n const { offsetY = 0 } = this.props;\n let bottom = null;\n let top: number | null = targetRect.bottom + scrollY + offsetY;\n\n const distanceToBottom = docEl.clientHeight - targetRect.bottom;\n const dropdownHeight = this.getHeight();\n\n if (distanceToBottom < dropdownHeight && targetRect.top > dropdownHeight) {\n const clientHeight = this.state.isDocumentElementRoot ? docEl.clientHeight : body.scrollHeight;\n\n top = null;\n bottom = clientHeight + offsetY - scrollY - targetRect.top;\n }\n\n const position = {\n top,\n left,\n right,\n bottom,\n };\n\n this.setState({\n minWidth: this.getMinWidth(),\n position: this.props.disablePortal ? this.convertToRelativePosition(position) : position,\n });\n }\n };\n\n private getHeight = () => {\n if (!this.isElement(this.dom)) {\n return 0;\n }\n const child = this.dom.children.item(0);\n return getDOMRect(child).height;\n };\n\n private getMinWidth = () => {\n const target = this.props.getParent();\n return getDOMRect(target).width;\n };\n\n private convertToRelativePosition = (position: DropdownContainerPosition): DropdownContainerPosition => {\n const target = this.props.getParent();\n const { offsetX = 0, offsetY = 0 } = this.props;\n const { top, bottom, left, right } = position;\n if (target && this.isElement(target)) {\n const targetHeight = getDOMRect(target).height;\n return {\n top: top !== null ? targetHeight + offsetY : null,\n bottom: bottom !== null ? targetHeight + offsetY : null,\n left: left !== null ? offsetX : null,\n right: right !== null ? offsetX : null,\n };\n }\n return {\n top: offsetY,\n bottom: null,\n left: offsetX,\n right: null,\n };\n };\n}\n\nconst getIsDocumentElementRoot = () => {\n const { body, documentElement } = document;\n const htmlPosition = getComputedStyle(documentElement).position;\n const bodyPosition = getComputedStyle(body).position;\n\n const hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;\n const hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';\n return hasLimitedHeightRoot || hasStaticRoot;\n};\n"]}
|
|
@@ -14,6 +14,7 @@ var _identifiers = require("../../../lib/events/keyboard/identifiers");
|
|
|
14
14
|
|
|
15
15
|
var _Hint = require("../../../components/Hint");
|
|
16
16
|
var _Tooltip = require("../../../components/Tooltip");
|
|
17
|
+
var _getDOMRect = require("../../../lib/dom/getDOMRect");
|
|
17
18
|
|
|
18
19
|
var _FileUploaderFile = require("./FileUploaderFile.styles");function _getRequireWildcardCache(nodeInterop) {if (typeof WeakMap !== "function") return null;var cacheBabelInterop = new WeakMap();var cacheNodeInterop = new WeakMap();return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {return nodeInterop ? cacheNodeInterop : cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj, nodeInterop) {if (!nodeInterop && obj && obj.__esModule) {return obj;}if (obj === null || typeof obj !== "object" && typeof obj !== "function") {return { default: obj };}var cache = _getRequireWildcardCache(nodeInterop);if (cache && cache.has(obj)) {return cache.get(obj);}var newObj = {};var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;for (var key in obj) {if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;if (desc && (desc.get || desc.set)) {Object.defineProperty(newObj, key, desc);} else {newObj[key] = obj[key];}}}newObj.default = obj;if (cache) {cache.set(obj, newObj);}return newObj;}
|
|
19
20
|
|
|
@@ -57,9 +58,9 @@ var FileUploaderFile = function FileUploaderFile(props) {var _cx, _cx2;
|
|
|
57
58
|
var formattedSize = (0, _react.useMemo)(function () {return (0, _utils.formatBytes)(size, 1);}, [size]);
|
|
58
59
|
|
|
59
60
|
// важно запустить после рендера, чтобы успели проставиться рефы
|
|
60
|
-
(0, _react.useEffect)(function () {var _textHelperRef$curren
|
|
61
|
+
(0, _react.useEffect)(function () {var _textHelperRef$curren;
|
|
61
62
|
var fileNameWidth = ((_textHelperRef$curren = textHelperRef.current) == null ? void 0 : _textHelperRef$curren.getTextWidth()) || 0;
|
|
62
|
-
var fileNameElementWidth = ((
|
|
63
|
+
var fileNameElementWidth = (0, _getDOMRect.getDOMRect)(fileNameElementRef.current).width;
|
|
63
64
|
var truncatedName = getTruncatedName(fileNameWidth, fileNameElementWidth, name);
|
|
64
65
|
|
|
65
66
|
setTruncatedFileName(truncatedName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["FileUploaderFile.tsx"],"names":["getTruncatedName","fileNameWidth","fileNameElementWidth","name","charWidth","Math","ceil","length","maxCharsCountInSpan","FileUploaderFile","props","file","showSize","error","id","originalFile","status","validationResult","size","hovered","setHovered","focusedByTab","setFocusedByTab","truncatedFileName","setTruncatedFileName","textHelperRef","fileNameElementRef","FileUploaderControlContext","removeFile","theme","ThemeContext","formattedSize","current","getTextWidth","getBoundingClientRect","width","truncatedName","removeUploadFile","handleRemove","event","preventDefault","stopPropagation","isValid","message","isInvalid","icon","deleteIcon","jsStyles","FileUploaderFileStatus","Loading","Uploaded","fileUploaderIconColor","renderTooltipContent","contentClassNames","content","handleMouseEnter","handleMouseLeave","handleFocus","requestAnimationFrame","keyListener","isTabPressed","handleBlur","handleIconKeyDown","e","iconClassNames","focusedIcon","isTruncated","root","displayName"],"mappings":"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","sourcesContent":["import React, { ReactNode, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { FileUploaderAttachedFile, FileUploaderFileStatus } from '../fileUtils';\nimport { formatBytes } from '../../../lib/utils';\nimport { TextWidthHelper } from '../../../internal/TextWidthHelper/TextWidthHelper';\nimport { truncate } from '../../../lib/stringUtils';\nimport { Spinner } from '../../../components/Spinner';\nimport { FileUploaderControlContext } from '../FileUploaderControlContext';\nimport { cx } from '../../../lib/theming/Emotion';\nimport { ThemeContext } from '../../../lib/theming/ThemeContext';\nimport { DeleteIcon, ErrorIcon, OkIcon } from '../../icons/16px';\nimport { keyListener } from '../../../lib/events/keyListener';\nimport { isKeyEnter } from '../../../lib/events/keyboard/identifiers';\nimport { Nullable } from '../../../typings/utility-types';\nimport { Hint } from '../../../components/Hint';\nimport { Tooltip } from '../../../components/Tooltip';\n\nimport { jsStyles } from './FileUploaderFile.styles';\n\ninterface FileUploaderFileProps {\n file: FileUploaderAttachedFile;\n showSize?: boolean;\n /** Состояние ошибки контрола файла */\n error?: boolean;\n}\n\nconst getTruncatedName = (fileNameWidth: number, fileNameElementWidth: number, name: string) => {\n if (!fileNameWidth && !fileNameElementWidth) {\n return null;\n }\n\n if (fileNameWidth <= fileNameElementWidth) {\n return name;\n }\n\n const charWidth = Math.ceil(fileNameWidth / name.length);\n const maxCharsCountInSpan = Math.ceil(fileNameElementWidth / charWidth);\n\n return truncate(name, maxCharsCountInSpan);\n};\n\nexport const FileUploaderFile = (props: FileUploaderFileProps) => {\n const { file, showSize, error } = props;\n const { id, originalFile, status, validationResult } = file;\n const { name, size } = originalFile;\n\n const [hovered, setHovered] = useState<boolean>(false);\n const [focusedByTab, setFocusedByTab] = useState(false);\n const [truncatedFileName, setTruncatedFileName] = useState<Nullable<string>>(null);\n\n const textHelperRef = useRef<TextWidthHelper>(null);\n const fileNameElementRef = useRef<HTMLSpanElement>(null);\n\n const { removeFile } = useContext(FileUploaderControlContext);\n const theme = useContext(ThemeContext);\n\n const formattedSize = useMemo(() => formatBytes(size, 1), [size]);\n\n // важно запустить после рендера, чтобы успели проставиться рефы\n useEffect(() => {\n const fileNameWidth = textHelperRef.current?.getTextWidth() || 0;\n const fileNameElementWidth = fileNameElementRef.current?.getBoundingClientRect().width || 0;\n const truncatedName = getTruncatedName(fileNameWidth, fileNameElementWidth, name);\n\n setTruncatedFileName(truncatedName);\n }, [name]);\n\n const removeUploadFile = useCallback(() => {\n removeFile(id);\n }, [removeFile, id]);\n\n const handleRemove = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n removeUploadFile();\n },\n [removeUploadFile],\n );\n\n const { isValid, message } = validationResult;\n\n const isInvalid = error || !isValid;\n\n const icon: ReactNode = useMemo(() => {\n const deleteIcon = <DeleteIcon className={jsStyles.deleteIcon(theme)} />;\n\n if (hovered || focusedByTab) {\n return deleteIcon;\n }\n\n if (isInvalid) {\n return <ErrorIcon />;\n }\n\n switch (status) {\n case FileUploaderFileStatus.Loading:\n return <Spinner type=\"mini\" dimmed caption=\"\" />;\n case FileUploaderFileStatus.Uploaded:\n return <OkIcon color={theme.fileUploaderIconColor} />;\n default:\n return deleteIcon;\n }\n }, [hovered, status, isInvalid, theme, focusedByTab]);\n\n const renderTooltipContent = useCallback((): ReactNode => {\n return !isValid && !error && message ? message : null;\n }, [isValid, error, message]);\n\n const contentClassNames = cx(jsStyles.content(), {\n [jsStyles.error(theme)]: isInvalid,\n });\n\n const handleMouseEnter = useCallback(() => {\n setHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setHovered(false);\n }, []);\n\n const handleFocus = useCallback(() => {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n requestAnimationFrame(() => {\n if (keyListener.isTabPressed) {\n setFocusedByTab(true);\n }\n });\n }, []);\n\n const handleBlur = useCallback(() => {\n setFocusedByTab(false);\n }, []);\n\n const handleIconKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLElement>) => {\n if (isKeyEnter(e)) {\n removeUploadFile();\n }\n },\n [removeUploadFile],\n );\n\n const iconClassNames = cx(jsStyles.icon(theme), {\n [jsStyles.focusedIcon(theme)]: focusedByTab,\n });\n\n const isTruncated = truncatedFileName !== name;\n\n return (\n <div\n data-tid=\"FileUploader__file\"\n className={jsStyles.root()}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <Tooltip data-tid=\"FileUploader__fileTooltip\" pos=\"right middle\" render={renderTooltipContent}>\n <div className={contentClassNames}>\n <TextWidthHelper ref={textHelperRef} text={name} />\n <Hint maxWidth={'100%'} text={isTruncated ? name : null}>\n <span data-tid=\"FileUploader__fileName\" ref={fileNameElementRef} className={jsStyles.name()}>\n {truncatedFileName}\n </span>\n </Hint>\n {!!showSize && formattedSize && (\n <span data-tid=\"FileUploader__fileSize\" className={jsStyles.size()}>\n {formattedSize}\n </span>\n )}\n <div\n className={iconClassNames}\n data-tid=\"FileUploader__fileIcon\"\n tabIndex={0}\n onClick={handleRemove}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleIconKeyDown}\n >\n {icon}\n </div>\n </div>\n </Tooltip>\n </div>\n );\n};\n\nFileUploaderFile.displayName = 'FileUploaderFile';\n"]}
|
|
1
|
+
{"version":3,"sources":["FileUploaderFile.tsx"],"names":["getTruncatedName","fileNameWidth","fileNameElementWidth","name","charWidth","Math","ceil","length","maxCharsCountInSpan","FileUploaderFile","props","file","showSize","error","id","originalFile","status","validationResult","size","hovered","setHovered","focusedByTab","setFocusedByTab","truncatedFileName","setTruncatedFileName","textHelperRef","fileNameElementRef","FileUploaderControlContext","removeFile","theme","ThemeContext","formattedSize","current","getTextWidth","width","truncatedName","removeUploadFile","handleRemove","event","preventDefault","stopPropagation","isValid","message","isInvalid","icon","deleteIcon","jsStyles","FileUploaderFileStatus","Loading","Uploaded","fileUploaderIconColor","renderTooltipContent","contentClassNames","content","handleMouseEnter","handleMouseLeave","handleFocus","requestAnimationFrame","keyListener","isTabPressed","handleBlur","handleIconKeyDown","e","iconClassNames","focusedIcon","isTruncated","root","displayName"],"mappings":"yEAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6D;;;;;;;;;AASA,IAAMA,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,aAAD,EAAwBC,oBAAxB,EAAsDC,IAAtD,EAAuE;AAC9F,MAAI,CAACF,aAAD,IAAkB,CAACC,oBAAvB,EAA6C;AAC3C,WAAO,IAAP;AACD;;AAED,MAAID,aAAa,IAAIC,oBAArB,EAA2C;AACzC,WAAOC,IAAP;AACD;;AAED,MAAMC,SAAS,GAAGC,IAAI,CAACC,IAAL,CAAUL,aAAa,GAAGE,IAAI,CAACI,MAA/B,CAAlB;AACA,MAAMC,mBAAmB,GAAGH,IAAI,CAACC,IAAL,CAAUJ,oBAAoB,GAAGE,SAAjC,CAA5B;;AAEA,SAAO,2BAASD,IAAT,EAAeK,mBAAf,CAAP;AACD,CAbD;;AAeO,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,KAAD,EAAkC;AAChE,MAAQC,IAAR,GAAkCD,KAAlC,CAAQC,IAAR,CAAcC,QAAd,GAAkCF,KAAlC,CAAcE,QAAd,CAAwBC,KAAxB,GAAkCH,KAAlC,CAAwBG,KAAxB;AACA,MAAQC,EAAR,GAAuDH,IAAvD,CAAQG,EAAR,CAAYC,YAAZ,GAAuDJ,IAAvD,CAAYI,YAAZ,CAA0BC,MAA1B,GAAuDL,IAAvD,CAA0BK,MAA1B,CAAkCC,gBAAlC,GAAuDN,IAAvD,CAAkCM,gBAAlC;AACA,MAAQd,IAAR,GAAuBY,YAAvB,CAAQZ,IAAR,CAAce,IAAd,GAAuBH,YAAvB,CAAcG,IAAd;;AAEA,kBAA8B,qBAAkB,KAAlB,CAA9B,CAAOC,OAAP,gBAAgBC,UAAhB;AACA,mBAAwC,qBAAS,KAAT,CAAxC,CAAOC,YAAP,iBAAqBC,eAArB;AACA,mBAAkD,qBAA2B,IAA3B,CAAlD,CAAOC,iBAAP,iBAA0BC,oBAA1B;;AAEA,MAAMC,aAAa,GAAG,mBAAwB,IAAxB,CAAtB;AACA,MAAMC,kBAAkB,GAAG,mBAAwB,IAAxB,CAA3B;;AAEA,oBAAuB,uBAAWC,sDAAX,CAAvB,CAAQC,UAAR,eAAQA,UAAR;AACA,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;;AAEA,MAAMC,aAAa,GAAG,oBAAQ,oBAAM,wBAAYb,IAAZ,EAAkB,CAAlB,CAAN,EAAR,EAAoC,CAACA,IAAD,CAApC,CAAtB;;AAEA;AACA,wBAAU,YAAM;AACd,QAAMjB,aAAa,GAAG,0BAAAwB,aAAa,CAACO,OAAd,2CAAuBC,YAAvB,OAAyC,CAA/D;AACA,QAAM/B,oBAAoB,GAAG,4BAAWwB,kBAAkB,CAACM,OAA9B,EAAuCE,KAApE;AACA,QAAMC,aAAa,GAAGnC,gBAAgB,CAACC,aAAD,EAAgBC,oBAAhB,EAAsCC,IAAtC,CAAtC;;AAEAqB,IAAAA,oBAAoB,CAACW,aAAD,CAApB;AACD,GAND,EAMG,CAAChC,IAAD,CANH;;AAQA,MAAMiC,gBAAgB,GAAG,wBAAY,YAAM;AACzCR,IAAAA,UAAU,CAACd,EAAD,CAAV;AACD,GAFwB,EAEtB,CAACc,UAAD,EAAad,EAAb,CAFsB,CAAzB;;AAIA,MAAMuB,YAAY,GAAG;AACnB,YAACC,KAAD,EAA0C;AACxCA,IAAAA,KAAK,CAACC,cAAN;AACAD,IAAAA,KAAK,CAACE,eAAN;AACAJ,IAAAA,gBAAgB;AACjB,GALkB;AAMnB,GAACA,gBAAD,CANmB,CAArB;;;AASA,MAAQK,OAAR,GAA6BxB,gBAA7B,CAAQwB,OAAR,CAAiBC,OAAjB,GAA6BzB,gBAA7B,CAAiByB,OAAjB;;AAEA,MAAMC,SAAS,GAAG9B,KAAK,IAAI,CAAC4B,OAA5B;;AAEA,MAAMG,IAAe,GAAG,oBAAQ,YAAM;AACpC,QAAMC,UAAU,gBAAG,6BAAC,cAAD,IAAY,SAAS,EAAEC,2BAASD,UAAT,CAAoBhB,KAApB,CAAvB,GAAnB;;AAEA,QAAIV,OAAO,IAAIE,YAAf,EAA6B;AAC3B,aAAOwB,UAAP;AACD;;AAED,QAAIF,SAAJ,EAAe;AACb,0BAAO,6BAAC,aAAD,OAAP;AACD;;AAED,YAAQ3B,MAAR;AACE,WAAK+B,kCAAuBC,OAA5B;AACE,4BAAO,6BAAC,gBAAD,IAAS,IAAI,EAAC,MAAd,EAAqB,MAAM,MAA3B,EAA4B,OAAO,EAAC,EAApC,GAAP;AACF,WAAKD,kCAAuBE,QAA5B;AACE,4BAAO,6BAAC,UAAD,IAAQ,KAAK,EAAEpB,KAAK,CAACqB,qBAArB,GAAP;AACF;AACE,eAAOL,UAAP,CANJ;;AAQD,GAnBuB,EAmBrB,CAAC1B,OAAD,EAAUH,MAAV,EAAkB2B,SAAlB,EAA6Bd,KAA7B,EAAoCR,YAApC,CAnBqB,CAAxB;;AAqBA,MAAM8B,oBAAoB,GAAG,wBAAY,YAAiB;AACxD,WAAO,CAACV,OAAD,IAAY,CAAC5B,KAAb,IAAsB6B,OAAtB,GAAgCA,OAAhC,GAA0C,IAAjD;AACD,GAF4B,EAE1B,CAACD,OAAD,EAAU5B,KAAV,EAAiB6B,OAAjB,CAF0B,CAA7B;;AAIA,MAAMU,iBAAiB,GAAG,iBAAGN,2BAASO,OAAT,EAAH;AACvBP,6BAASjC,KAAT,CAAegB,KAAf,CADuB,IACCc,SADD,OAA1B;;;AAIA,MAAMW,gBAAgB,GAAG,wBAAY,YAAM;AACzClC,IAAAA,UAAU,CAAC,IAAD,CAAV;AACD,GAFwB,EAEtB,EAFsB,CAAzB;;AAIA,MAAMmC,gBAAgB,GAAG,wBAAY,YAAM;AACzCnC,IAAAA,UAAU,CAAC,KAAD,CAAV;AACD,GAFwB,EAEtB,EAFsB,CAAzB;;AAIA,MAAMoC,WAAW,GAAG,wBAAY,YAAM;AACpC;AACA;AACAC,IAAAA,qBAAqB,CAAC,YAAM;AAC1B,UAAIC,yBAAYC,YAAhB,EAA8B;AAC5BrC,QAAAA,eAAe,CAAC,IAAD,CAAf;AACD;AACF,KAJoB,CAArB;AAKD,GARmB,EAQjB,EARiB,CAApB;;AAUA,MAAMsC,UAAU,GAAG,wBAAY,YAAM;AACnCtC,IAAAA,eAAe,CAAC,KAAD,CAAf;AACD,GAFkB,EAEhB,EAFgB,CAAnB;;AAIA,MAAMuC,iBAAiB,GAAG;AACxB,YAACC,CAAD,EAAyC;AACvC,QAAI,6BAAWA,CAAX,CAAJ,EAAmB;AACjB1B,MAAAA,gBAAgB;AACjB;AACF,GALuB;AAMxB,GAACA,gBAAD,CANwB,CAA1B;;;AASA,MAAM2B,cAAc,GAAG,iBAAGjB,2BAASF,IAAT,CAAcf,KAAd,CAAH;AACpBiB,6BAASkB,WAAT,CAAqBnC,KAArB,CADoB,IACUR,YADV,QAAvB;;;AAIA,MAAM4C,WAAW,GAAG1C,iBAAiB,KAAKpB,IAA1C;;AAEA;AACE;AACE,kBAAS,oBADX;AAEE,MAAA,SAAS,EAAE2C,2BAASoB,IAAT,EAFb;AAGE,MAAA,YAAY,EAAEZ,gBAHhB;AAIE,MAAA,YAAY,EAAEC,gBAJhB;;AAME,iCAAC,gBAAD,IAAS,YAAS,2BAAlB,EAA8C,GAAG,EAAC,cAAlD,EAAiE,MAAM,EAAEJ,oBAAzE;AACE,0CAAK,SAAS,EAAEC,iBAAhB;AACE,iCAAC,gCAAD,IAAiB,GAAG,EAAE3B,aAAtB,EAAqC,IAAI,EAAEtB,IAA3C,GADF;AAEE,iCAAC,UAAD,IAAM,QAAQ,EAAE,MAAhB,EAAwB,IAAI,EAAE8D,WAAW,GAAG9D,IAAH,GAAU,IAAnD;AACE,2CAAM,YAAS,wBAAf,EAAwC,GAAG,EAAEuB,kBAA7C,EAAiE,SAAS,EAAEoB,2BAAS3C,IAAT,EAA5E;AACGoB,IAAAA,iBADH,CADF,CAFF;;;AAOG,KAAC,CAACX,QAAF,IAAcmB,aAAd;AACC,2CAAM,YAAS,wBAAf,EAAwC,SAAS,EAAEe,2BAAS5B,IAAT,EAAnD;AACGa,IAAAA,aADH,CARJ;;;AAYE;AACE,MAAA,SAAS,EAAEgC,cADb;AAEE,kBAAS,wBAFX;AAGE,MAAA,QAAQ,EAAE,CAHZ;AAIE,MAAA,OAAO,EAAE1B,YAJX;AAKE,MAAA,OAAO,EAAEmB,WALX;AAME,MAAA,MAAM,EAAEI,UANV;AAOE,MAAA,SAAS,EAAEC,iBAPb;;AASGjB,IAAAA,IATH,CAZF,CADF,CANF,CADF;;;;;;AAmCD,CAhJM,C;;AAkJPnC,gBAAgB,CAAC0D,WAAjB,GAA+B,kBAA/B","sourcesContent":["import React, { ReactNode, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { FileUploaderAttachedFile, FileUploaderFileStatus } from '../fileUtils';\nimport { formatBytes } from '../../../lib/utils';\nimport { TextWidthHelper } from '../../../internal/TextWidthHelper/TextWidthHelper';\nimport { truncate } from '../../../lib/stringUtils';\nimport { Spinner } from '../../../components/Spinner';\nimport { FileUploaderControlContext } from '../FileUploaderControlContext';\nimport { cx } from '../../../lib/theming/Emotion';\nimport { ThemeContext } from '../../../lib/theming/ThemeContext';\nimport { DeleteIcon, ErrorIcon, OkIcon } from '../../icons/16px';\nimport { keyListener } from '../../../lib/events/keyListener';\nimport { isKeyEnter } from '../../../lib/events/keyboard/identifiers';\nimport { Nullable } from '../../../typings/utility-types';\nimport { Hint } from '../../../components/Hint';\nimport { Tooltip } from '../../../components/Tooltip';\nimport { getDOMRect } from '../../../lib/dom/getDOMRect';\n\nimport { jsStyles } from './FileUploaderFile.styles';\n\ninterface FileUploaderFileProps {\n file: FileUploaderAttachedFile;\n showSize?: boolean;\n /** Состояние ошибки контрола файла */\n error?: boolean;\n}\n\nconst getTruncatedName = (fileNameWidth: number, fileNameElementWidth: number, name: string) => {\n if (!fileNameWidth && !fileNameElementWidth) {\n return null;\n }\n\n if (fileNameWidth <= fileNameElementWidth) {\n return name;\n }\n\n const charWidth = Math.ceil(fileNameWidth / name.length);\n const maxCharsCountInSpan = Math.ceil(fileNameElementWidth / charWidth);\n\n return truncate(name, maxCharsCountInSpan);\n};\n\nexport const FileUploaderFile = (props: FileUploaderFileProps) => {\n const { file, showSize, error } = props;\n const { id, originalFile, status, validationResult } = file;\n const { name, size } = originalFile;\n\n const [hovered, setHovered] = useState<boolean>(false);\n const [focusedByTab, setFocusedByTab] = useState(false);\n const [truncatedFileName, setTruncatedFileName] = useState<Nullable<string>>(null);\n\n const textHelperRef = useRef<TextWidthHelper>(null);\n const fileNameElementRef = useRef<HTMLSpanElement>(null);\n\n const { removeFile } = useContext(FileUploaderControlContext);\n const theme = useContext(ThemeContext);\n\n const formattedSize = useMemo(() => formatBytes(size, 1), [size]);\n\n // важно запустить после рендера, чтобы успели проставиться рефы\n useEffect(() => {\n const fileNameWidth = textHelperRef.current?.getTextWidth() || 0;\n const fileNameElementWidth = getDOMRect(fileNameElementRef.current).width;\n const truncatedName = getTruncatedName(fileNameWidth, fileNameElementWidth, name);\n\n setTruncatedFileName(truncatedName);\n }, [name]);\n\n const removeUploadFile = useCallback(() => {\n removeFile(id);\n }, [removeFile, id]);\n\n const handleRemove = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n removeUploadFile();\n },\n [removeUploadFile],\n );\n\n const { isValid, message } = validationResult;\n\n const isInvalid = error || !isValid;\n\n const icon: ReactNode = useMemo(() => {\n const deleteIcon = <DeleteIcon className={jsStyles.deleteIcon(theme)} />;\n\n if (hovered || focusedByTab) {\n return deleteIcon;\n }\n\n if (isInvalid) {\n return <ErrorIcon />;\n }\n\n switch (status) {\n case FileUploaderFileStatus.Loading:\n return <Spinner type=\"mini\" dimmed caption=\"\" />;\n case FileUploaderFileStatus.Uploaded:\n return <OkIcon color={theme.fileUploaderIconColor} />;\n default:\n return deleteIcon;\n }\n }, [hovered, status, isInvalid, theme, focusedByTab]);\n\n const renderTooltipContent = useCallback((): ReactNode => {\n return !isValid && !error && message ? message : null;\n }, [isValid, error, message]);\n\n const contentClassNames = cx(jsStyles.content(), {\n [jsStyles.error(theme)]: isInvalid,\n });\n\n const handleMouseEnter = useCallback(() => {\n setHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setHovered(false);\n }, []);\n\n const handleFocus = useCallback(() => {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n requestAnimationFrame(() => {\n if (keyListener.isTabPressed) {\n setFocusedByTab(true);\n }\n });\n }, []);\n\n const handleBlur = useCallback(() => {\n setFocusedByTab(false);\n }, []);\n\n const handleIconKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLElement>) => {\n if (isKeyEnter(e)) {\n removeUploadFile();\n }\n },\n [removeUploadFile],\n );\n\n const iconClassNames = cx(jsStyles.icon(theme), {\n [jsStyles.focusedIcon(theme)]: focusedByTab,\n });\n\n const isTruncated = truncatedFileName !== name;\n\n return (\n <div\n data-tid=\"FileUploader__file\"\n className={jsStyles.root()}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <Tooltip data-tid=\"FileUploader__fileTooltip\" pos=\"right middle\" render={renderTooltipContent}>\n <div className={contentClassNames}>\n <TextWidthHelper ref={textHelperRef} text={name} />\n <Hint maxWidth={'100%'} text={isTruncated ? name : null}>\n <span data-tid=\"FileUploader__fileName\" ref={fileNameElementRef} className={jsStyles.name()}>\n {truncatedFileName}\n </span>\n </Hint>\n {!!showSize && formattedSize && (\n <span data-tid=\"FileUploader__fileSize\" className={jsStyles.size()}>\n {formattedSize}\n </span>\n )}\n <div\n className={iconClassNames}\n data-tid=\"FileUploader__fileIcon\"\n tabIndex={0}\n onClick={handleRemove}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleIconKeyDown}\n >\n {icon}\n </div>\n </div>\n </Tooltip>\n </div>\n );\n};\n\nFileUploaderFile.displayName = 'FileUploaderFile';\n"]}
|