@vkontakte/vkui 5.0.2 → 5.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js +2 -2
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cjs/components/CustomScrollView/CustomScrollView.js +3 -1
- package/dist/cjs/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/cjs/components/CustomSelectOption/CustomSelectOption.d.ts +1 -0
- package/dist/cjs/components/CustomSelectOption/CustomSelectOption.js +2 -1
- package/dist/cjs/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
- package/dist/cjs/components/FocusVisible/FocusVisible.js +2 -2
- package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.js +3 -4
- package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/cjs/components/Popover/Popover.js +10 -1
- package/dist/cjs/components/Popover/Popover.js.map +1 -1
- package/dist/cjs/components/SplitCol/SplitCol.js +43 -26
- package/dist/cjs/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.d.ts +4 -0
- package/dist/cjs/components/Tooltip/Tooltip.js +3 -2
- package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/cjs/hooks/useEventListener.js +6 -4
- package/dist/cjs/hooks/useEventListener.js.map +1 -1
- package/dist/cjs/hooks/useMediaQueries.js +1 -0
- package/dist/cjs/hooks/useMediaQueries.js.map +1 -1
- package/dist/cjs/lib/adaptivity/types.d.ts +1 -1
- package/dist/cjs/lib/adaptivity/types.js.map +1 -1
- package/dist/cjs/lib/browser.js +0 -1
- package/dist/cjs/lib/browser.js.map +1 -1
- package/dist/cjs/shared/breakpoints.d.ts +1 -0
- package/dist/cjs/shared/breakpoints.js +1 -0
- package/dist/cjs/shared/breakpoints.js.map +1 -1
- package/dist/components/ChipsSelect/ChipsSelect.js +2 -2
- package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/components/CustomScrollView/CustomScrollView.js +3 -1
- package/dist/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/components/CustomSelectOption/CustomSelectOption.d.ts +1 -0
- package/dist/components/CustomSelectOption/CustomSelectOption.js +2 -1
- package/dist/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
- package/dist/components/FocusVisible/FocusVisible.js +2 -2
- package/dist/components/PanelHeaderButton/PanelHeaderButton.js +3 -4
- package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/components/Popover/Popover.js +10 -1
- package/dist/components/Popover/Popover.js.map +1 -1
- package/dist/components/SplitCol/SplitCol.js +43 -26
- package/dist/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts +4 -0
- package/dist/components/Tooltip/Tooltip.js +3 -2
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components.css +4 -4
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/Alert/Alert.module.css +1 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js +2 -2
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.module.css +1 -1
- package/dist/cssm/components/CustomScrollView/CustomScrollView.js +3 -1
- package/dist/cssm/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.module.css +1 -1
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.d.ts +1 -0
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.js +2 -1
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
- package/dist/cssm/components/FocusVisible/FocusVisible.js +2 -2
- package/dist/cssm/components/FocusVisible/FocusVisible.module.css +1 -1
- package/dist/cssm/components/FormField/FormField.module.css +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScrollArrow.module.css +1 -1
- package/dist/cssm/components/Input/Input.module.css +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js +3 -4
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +1 -1
- package/dist/cssm/components/Popover/Popover.js +10 -1
- package/dist/cssm/components/Popover/Popover.js.map +1 -1
- package/dist/cssm/components/SimpleCell/SimpleCell.module.css +1 -1
- package/dist/cssm/components/SplitCol/SplitCol.js +43 -26
- package/dist/cssm/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/cssm/components/Tappable/Tappable.module.css +1 -1
- package/dist/cssm/components/Textarea/Textarea.module.css +1 -1
- package/dist/cssm/components/Tooltip/Tooltip.d.ts +4 -0
- package/dist/cssm/components/Tooltip/Tooltip.js +3 -2
- package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/cssm/components/WriteBar/WriteBar.module.css +1 -1
- package/dist/cssm/hooks/useEventListener.js +6 -4
- package/dist/cssm/hooks/useEventListener.js.map +1 -1
- package/dist/cssm/hooks/useMediaQueries.js +1 -0
- package/dist/cssm/hooks/useMediaQueries.js.map +1 -1
- package/dist/cssm/lib/adaptivity/types.d.ts +1 -1
- package/dist/cssm/lib/adaptivity/types.js.map +1 -1
- package/dist/cssm/lib/browser.js +0 -1
- package/dist/cssm/lib/browser.js.map +1 -1
- package/dist/cssm/shared/breakpoints.d.ts +1 -0
- package/dist/cssm/shared/breakpoints.js +1 -0
- package/dist/cssm/shared/breakpoints.js.map +1 -1
- package/dist/cssm/styles/components.css +4 -4
- package/dist/hooks/useEventListener.js +6 -4
- package/dist/hooks/useEventListener.js.map +1 -1
- package/dist/hooks/useMediaQueries.js +1 -0
- package/dist/hooks/useMediaQueries.js.map +1 -1
- package/dist/lib/adaptivity/types.d.ts +1 -1
- package/dist/lib/adaptivity/types.js.map +1 -1
- package/dist/lib/browser.js +0 -1
- package/dist/lib/browser.js.map +1 -1
- package/dist/shared/breakpoints.d.ts +1 -0
- package/dist/shared/breakpoints.js +1 -0
- package/dist/shared/breakpoints.js.map +1 -1
- package/dist/vkui.css +4 -4
- package/dist/vkui.css.map +1 -1
- package/package.json +1 -1
|
@@ -242,7 +242,7 @@ var ChipsSelect = function ChipsSelect(props) {
|
|
|
242
242
|
return !prevOpened;
|
|
243
243
|
});
|
|
244
244
|
};
|
|
245
|
-
return /*#__PURE__*/React.createElement(_FormField.FormField, {
|
|
245
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_FormField.FormField, {
|
|
246
246
|
getRootRef: rootRef,
|
|
247
247
|
style: style,
|
|
248
248
|
className: (0, _classNames.classNamesString)("vkuiChipsSelect", opened && (isPopperDirectionTop ? "vkuiChipsSelect--pop-up" : "vkuiChipsSelect--pop-down"), className),
|
|
@@ -277,7 +277,7 @@ var ChipsSelect = function ChipsSelect(props) {
|
|
|
277
277
|
getRef: getRef,
|
|
278
278
|
disabled: disabled,
|
|
279
279
|
onInputChange: handleInputChange
|
|
280
|
-
})), opened && /*#__PURE__*/React.createElement(_CustomSelectDropdown.CustomSelectDropdown, {
|
|
280
|
+
}))), opened && /*#__PURE__*/React.createElement(_CustomSelectDropdown.CustomSelectDropdown, {
|
|
281
281
|
targetRef: rootRef,
|
|
282
282
|
placement: popupDirection,
|
|
283
283
|
scrollBoxRef: scrollBoxRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChipsSelect.js","names":["FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","chipsSelectDefaultProps","chipsInputDefaultProps","emptyText","creatableText","onChangeStart","noop","creatable","fetching","showSelected","closeAfterSelect","options","filterFn","defaultFilterFn","renderOption","props","ChipsSelect","propsWithDefault","style","onFocus","onKeyDown","className","getRef","getRootRef","disabled","placeholder","tabIndex","getOptionValue","getOptionLabel","getNewOptionData","renderChip","popupDirection","inputValue","before","fixDropdownWidth","forceDropdownPortal","restProps","useDOM","document","React","useState","undefined","popperPlacement","setPopperPlacement","scrollBoxRef","useRef","rootRef","useExternRef","useChipsSelect","fieldValue","selectedOptions","opened","setOpened","addOptionFromInput","filteredOptions","addOption","handleInputChange","clearInput","focusedOption","setFocusedOption","focusedOptionIndex","setFocusedOptionIndex","showCreatable","Boolean","length","handleFocus","e","handleClickOutside","target","current","contains","chipsSelectOptions","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","handleKeyDown","key","defaultPrevented","preventDefault","option","includes","useEffect","findIndex","value","useGlobalEventListener","renderChipWrapper","renderChipProps","onRemoveWrapper","stopPropagation","onRemove","isPopperDirectionTop","onPlacementChange","useCallback","placement","onDropdownMouseLeave","observableRefs","useMemo","toggleOpened","prevOpened","classNamesString","readOnly","map","label","hovered","selected","find","selectedOption","children","onMouseDown","onMouseEnter"],"sources":["../../../../src/components/ChipsSelect/ChipsSelect.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { DropdownIcon } from \"../DropdownIcon/DropdownIcon\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { ChipOption, ChipValue, RenderChip } from \"../Chip/Chip\";\nimport { ChipsInputProps } from \"../ChipsInput/ChipsInput\";\nimport {\n ChipsInputBase,\n chipsInputDefaultProps,\n} from \"../ChipsInputBase/ChipsInputBase\";\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from \"../CustomSelectOption/CustomSelectOption\";\nimport { useChipsSelect } from \"../../hooks/useChipsSelect\";\nimport { noop } from \"../../lib/utils\";\nimport { useDOM } from \"../../lib/dom\";\nimport { Footnote } from \"../Typography/Footnote/Footnote\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { defaultFilterFn } from \"../../lib/select\";\nimport { Placement } from \"../Popper/Popper\";\nimport { CustomSelectDropdown } from \"../CustomSelectDropdown/CustomSelectDropdown\";\nimport { FormField } from \"../FormField/FormField\";\nimport { IconButton } from \"../IconButton/IconButton\";\nimport styles from \"./ChipsSelect.module.css\";\n\nexport interface ChipsSelectProps<Option extends ChipOption>\n extends Omit<ChipsInputProps<Option>, \"after\"> {\n popupDirection?: \"top\" | \"bottom\";\n options?: Option[];\n filterFn?:\n | false\n | ((\n value?: string,\n option?: Option,\n getOptionLabel?: Pick<\n ChipsInputProps<Option>,\n \"getOptionLabel\"\n >[\"getOptionLabel\"]\n ) => boolean);\n /**\n * Возможность создавать чипы которых нет в списке (по enter или с помощью пункта в меню, см creatableText)\n */\n creatable?: boolean;\n /**\n * Отрисовка лоадера вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Показывать или скрывать уже выбранные опции\n */\n showSelected?: boolean;\n /**\n * Текст для пункта создающего чипы при клике, так же отвечает за то будет ли показан этот пункт (показывается после того как в списке не отсанется опций)\n */\n creatableText?: string;\n /**\n * Текст который показывается если список опций пуст\n */\n emptyText?: string;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (\n e: React.MouseEvent | React.KeyboardEvent,\n option: Option\n ) => void;\n /**\n * Закрытие выпадающего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n}\n\ntype FocusActionType = \"next\" | \"prev\";\n\nconst FOCUS_ACTION_NEXT: FocusActionType = \"next\";\nconst FOCUS_ACTION_PREV: FocusActionType = \"prev\";\n\nconst chipsSelectDefaultProps: ChipsSelectProps<any> = {\n ...chipsInputDefaultProps,\n emptyText: \"Ничего не найдено\",\n creatableText: \"Создать значение\",\n onChangeStart: noop,\n creatable: false,\n fetching: false,\n showSelected: true,\n closeAfterSelect: true,\n options: [],\n filterFn: defaultFilterFn,\n renderOption(props) {\n return <CustomSelectOption {...props} />;\n },\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ChipsSelect\n */\nexport const ChipsSelect = <Option extends ChipOption>(\n props: ChipsSelectProps<Option>\n) => {\n const propsWithDefault = { ...chipsSelectDefaultProps, ...props };\n const {\n style,\n onFocus,\n onKeyDown,\n className,\n fetching,\n renderOption,\n emptyText,\n getRef,\n getRootRef,\n disabled,\n placeholder,\n tabIndex,\n getOptionValue,\n getOptionLabel,\n showSelected,\n getNewOptionData,\n renderChip,\n popupDirection,\n creatable,\n filterFn,\n inputValue,\n creatableText,\n closeAfterSelect,\n onChangeStart,\n before,\n options,\n fixDropdownWidth,\n forceDropdownPortal,\n ...restProps\n } = propsWithDefault;\n\n const { document } = useDOM();\n\n const [popperPlacement, setPopperPlacement] = React.useState<\n Placement | undefined\n >(undefined);\n\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const rootRef = useExternRef(getRef);\n const {\n fieldValue,\n selectedOptions = [],\n opened,\n setOpened,\n addOptionFromInput,\n filteredOptions,\n addOption,\n handleInputChange,\n clearInput,\n focusedOption,\n setFocusedOption,\n focusedOptionIndex,\n setFocusedOptionIndex,\n } = useChipsSelect(propsWithDefault);\n\n const showCreatable = Boolean(\n creatable && creatableText && !filteredOptions.length && fieldValue\n );\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setOpened(true);\n setFocusedOptionIndex(0);\n onFocus!(e);\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n e.target !== rootRef.current &&\n !rootRef.current?.contains(e.target as Node)\n ) {\n setOpened(false);\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = chipsSelectOptions[index];\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n };\n\n const focusOptionByIndex = (index: number, oldIndex: number) => {\n const { length } = filteredOptions;\n\n if (index < 0) {\n index = length - 1;\n } else if (index >= length) {\n index = 0;\n }\n\n if (index === oldIndex) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number | null, type: FocusActionType) => {\n let index = typeof nextIndex !== \"number\" ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n index = index + 1;\n } else if (type === FOCUS_ACTION_PREV) {\n index = index - 1;\n }\n\n if (focusedOptionIndex != null) {\n focusOptionByIndex(index, focusedOptionIndex);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown!(e);\n\n if (e.key === \"ArrowUp\" && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_PREV);\n }\n }\n\n if (e.key === \"ArrowDown\" && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_NEXT);\n }\n }\n\n if (\n e.key === \"Enter\" &&\n !e.defaultPrevented &&\n opened &&\n focusedOptionIndex != null\n ) {\n const option = filteredOptions[focusedOptionIndex];\n\n if (option) {\n onChangeStart!(e, option);\n\n if (!e.defaultPrevented) {\n addOption(option);\n setFocusedOptionIndex(null);\n clearInput();\n closeAfterSelect && setOpened(false);\n e.preventDefault();\n }\n } else if (!creatable) {\n e.preventDefault();\n }\n }\n\n if ([\"Escape\", \"Tab\"].includes(e.key) && !e.defaultPrevented && opened) {\n setOpened(false);\n }\n };\n\n React.useEffect(() => {\n if (focusedOptionIndex != null && filteredOptions[focusedOptionIndex]) {\n setFocusedOption(filteredOptions[focusedOptionIndex]);\n } else if (focusedOptionIndex === null || focusedOptionIndex === 0) {\n setFocusedOption(null);\n }\n }, [focusedOptionIndex, filteredOptions, setFocusedOption]);\n\n React.useEffect(() => {\n const index = focusedOption\n ? filteredOptions.findIndex(({ value }) => value === focusedOption.value)\n : -1;\n\n if (\n index === -1 &&\n !!filteredOptions.length &&\n !showCreatable &&\n closeAfterSelect\n ) {\n setFocusedOption(filteredOptions[0]);\n }\n }, [\n filteredOptions,\n focusedOption,\n showCreatable,\n closeAfterSelect,\n setFocusedOption,\n ]);\n\n useGlobalEventListener(document, \"click\", handleClickOutside);\n\n const renderChipWrapper = (\n renderChipProps: RenderChip<Option> | undefined\n ) => {\n if (renderChipProps === undefined) {\n return null;\n }\n const onRemoveWrapper = (\n e: React.MouseEvent | undefined,\n value: ChipValue | undefined\n ) => {\n e?.preventDefault();\n e?.stopPropagation();\n\n renderChipProps.onRemove?.(e, value);\n };\n\n return renderChip!({\n ...renderChipProps,\n onRemove: onRemoveWrapper,\n });\n };\n\n const isPopperDirectionTop = popperPlacement?.includes(\"top\");\n\n const onPlacementChange = React.useCallback(\n (placement?: Placement) => {\n setPopperPlacement(placement);\n },\n [setPopperPlacement]\n );\n\n const onDropdownMouseLeave = React.useCallback(() => {\n setFocusedOptionIndex(null);\n }, [setFocusedOptionIndex]);\n\n const observableRefs = React.useMemo(\n () => [scrollBoxRef, rootRef],\n [rootRef, scrollBoxRef]\n );\n\n const toggleOpened = () => {\n setOpened((prevOpened) => !prevOpened);\n };\n\n return (\n <FormField\n getRootRef={rootRef}\n style={style}\n className={classNamesString(\n styles[\"ChipsSelect\"],\n opened &&\n (isPopperDirectionTop\n ? styles[\"ChipsSelect--pop-up\"]\n : styles[\"ChipsSelect--pop-down\"]),\n className\n )}\n disabled={disabled}\n role=\"application\"\n aria-disabled={disabled}\n aria-readonly={restProps.readOnly}\n after={\n <IconButton\n className={styles[\"ChipsSelect__dropdown\"]}\n activeMode=\"\"\n hoverMode=\"\"\n // TODO: add label customization\n aria-label={opened ? \"Скрыть\" : \"Развернуть\"}\n onClick={toggleOpened}\n >\n <DropdownIcon\n className={styles[\"ChipsSelect__icon\"]}\n opened={opened}\n />\n </IconButton>\n }\n before={before}\n >\n <ChipsInputBase\n {...restProps}\n tabIndex={tabIndex}\n value={selectedOptions}\n inputValue={fieldValue}\n getNewOptionData={getNewOptionData}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n renderChip={renderChipWrapper}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n getRef={getRef}\n disabled={disabled}\n onInputChange={handleInputChange}\n />\n {opened && (\n <CustomSelectDropdown\n targetRef={rootRef}\n placement={popupDirection}\n scrollBoxRef={scrollBoxRef}\n observableRefs={observableRefs}\n onPlacementChange={onPlacementChange}\n onMouseLeave={onDropdownMouseLeave}\n fetching={fetching}\n className={styles[\"ChipsSelect__options\"]}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n >\n {showCreatable && (\n <CustomSelectOption\n hovered={focusedOptionIndex === 0}\n onMouseDown={addOptionFromInput}\n onMouseEnter={() => setFocusedOptionIndex(0)}\n >\n {creatableText}\n </CustomSelectOption>\n )}\n {!filteredOptions?.length && !showCreatable && emptyText ? (\n <Footnote className={styles[\"ChipsSelect__empty\"]}>\n {emptyText}\n </Footnote>\n ) : (\n filteredOptions.map((option: Option, index: number) => {\n const label = getOptionLabel!(option);\n const hovered =\n focusedOption &&\n getOptionValue!(option) === getOptionValue!(focusedOption);\n const selected = selectedOptions.find(\n (selectedOption: Option) => {\n return (\n getOptionValue!(selectedOption) === getOptionValue!(option)\n );\n }\n );\n const value = getOptionValue!(option);\n\n return (\n <React.Fragment key={`${typeof value}-${value}`}>\n {renderOption!({\n className: styles[\"ChipsSelect__option\"],\n option,\n hovered: Boolean(hovered),\n children: label,\n selected: !!selected,\n getRootRef: (e) => {\n if (e) {\n return (chipsSelectOptions[index] = e);\n }\n return undefined;\n },\n onMouseDown: (e: React.MouseEvent<HTMLDivElement>) => {\n onChangeStart?.(e, option);\n\n if (!e.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter: () => setFocusedOptionIndex(index),\n })}\n </React.Fragment>\n );\n })\n )}\n </CustomSelectDropdown>\n )}\n </FormField>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChipsSelect.js","names":["FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","chipsSelectDefaultProps","chipsInputDefaultProps","emptyText","creatableText","onChangeStart","noop","creatable","fetching","showSelected","closeAfterSelect","options","filterFn","defaultFilterFn","renderOption","props","ChipsSelect","propsWithDefault","style","onFocus","onKeyDown","className","getRef","getRootRef","disabled","placeholder","tabIndex","getOptionValue","getOptionLabel","getNewOptionData","renderChip","popupDirection","inputValue","before","fixDropdownWidth","forceDropdownPortal","restProps","useDOM","document","React","useState","undefined","popperPlacement","setPopperPlacement","scrollBoxRef","useRef","rootRef","useExternRef","useChipsSelect","fieldValue","selectedOptions","opened","setOpened","addOptionFromInput","filteredOptions","addOption","handleInputChange","clearInput","focusedOption","setFocusedOption","focusedOptionIndex","setFocusedOptionIndex","showCreatable","Boolean","length","handleFocus","e","handleClickOutside","target","current","contains","chipsSelectOptions","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","handleKeyDown","key","defaultPrevented","preventDefault","option","includes","useEffect","findIndex","value","useGlobalEventListener","renderChipWrapper","renderChipProps","onRemoveWrapper","stopPropagation","onRemove","isPopperDirectionTop","onPlacementChange","useCallback","placement","onDropdownMouseLeave","observableRefs","useMemo","toggleOpened","prevOpened","classNamesString","readOnly","map","label","hovered","selected","find","selectedOption","children","onMouseDown","onMouseEnter"],"sources":["../../../../src/components/ChipsSelect/ChipsSelect.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { DropdownIcon } from \"../DropdownIcon/DropdownIcon\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { ChipOption, ChipValue, RenderChip } from \"../Chip/Chip\";\nimport { ChipsInputProps } from \"../ChipsInput/ChipsInput\";\nimport {\n ChipsInputBase,\n chipsInputDefaultProps,\n} from \"../ChipsInputBase/ChipsInputBase\";\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from \"../CustomSelectOption/CustomSelectOption\";\nimport { useChipsSelect } from \"../../hooks/useChipsSelect\";\nimport { noop } from \"../../lib/utils\";\nimport { useDOM } from \"../../lib/dom\";\nimport { Footnote } from \"../Typography/Footnote/Footnote\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { defaultFilterFn } from \"../../lib/select\";\nimport { Placement } from \"../Popper/Popper\";\nimport { CustomSelectDropdown } from \"../CustomSelectDropdown/CustomSelectDropdown\";\nimport { FormField } from \"../FormField/FormField\";\nimport { IconButton } from \"../IconButton/IconButton\";\nimport styles from \"./ChipsSelect.module.css\";\n\nexport interface ChipsSelectProps<Option extends ChipOption>\n extends Omit<ChipsInputProps<Option>, \"after\"> {\n popupDirection?: \"top\" | \"bottom\";\n options?: Option[];\n filterFn?:\n | false\n | ((\n value?: string,\n option?: Option,\n getOptionLabel?: Pick<\n ChipsInputProps<Option>,\n \"getOptionLabel\"\n >[\"getOptionLabel\"]\n ) => boolean);\n /**\n * Возможность создавать чипы которых нет в списке (по enter или с помощью пункта в меню, см creatableText)\n */\n creatable?: boolean;\n /**\n * Отрисовка лоадера вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Показывать или скрывать уже выбранные опции\n */\n showSelected?: boolean;\n /**\n * Текст для пункта создающего чипы при клике, так же отвечает за то будет ли показан этот пункт (показывается после того как в списке не отсанется опций)\n */\n creatableText?: string;\n /**\n * Текст который показывается если список опций пуст\n */\n emptyText?: string;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (\n e: React.MouseEvent | React.KeyboardEvent,\n option: Option\n ) => void;\n /**\n * Закрытие выпадающего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n}\n\ntype FocusActionType = \"next\" | \"prev\";\n\nconst FOCUS_ACTION_NEXT: FocusActionType = \"next\";\nconst FOCUS_ACTION_PREV: FocusActionType = \"prev\";\n\nconst chipsSelectDefaultProps: ChipsSelectProps<any> = {\n ...chipsInputDefaultProps,\n emptyText: \"Ничего не найдено\",\n creatableText: \"Создать значение\",\n onChangeStart: noop,\n creatable: false,\n fetching: false,\n showSelected: true,\n closeAfterSelect: true,\n options: [],\n filterFn: defaultFilterFn,\n renderOption(props) {\n return <CustomSelectOption {...props} />;\n },\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ChipsSelect\n */\nexport const ChipsSelect = <Option extends ChipOption>(\n props: ChipsSelectProps<Option>\n) => {\n const propsWithDefault = { ...chipsSelectDefaultProps, ...props };\n const {\n style,\n onFocus,\n onKeyDown,\n className,\n fetching,\n renderOption,\n emptyText,\n getRef,\n getRootRef,\n disabled,\n placeholder,\n tabIndex,\n getOptionValue,\n getOptionLabel,\n showSelected,\n getNewOptionData,\n renderChip,\n popupDirection,\n creatable,\n filterFn,\n inputValue,\n creatableText,\n closeAfterSelect,\n onChangeStart,\n before,\n options,\n fixDropdownWidth,\n forceDropdownPortal,\n ...restProps\n } = propsWithDefault;\n\n const { document } = useDOM();\n\n const [popperPlacement, setPopperPlacement] = React.useState<\n Placement | undefined\n >(undefined);\n\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const rootRef = useExternRef(getRef);\n const {\n fieldValue,\n selectedOptions = [],\n opened,\n setOpened,\n addOptionFromInput,\n filteredOptions,\n addOption,\n handleInputChange,\n clearInput,\n focusedOption,\n setFocusedOption,\n focusedOptionIndex,\n setFocusedOptionIndex,\n } = useChipsSelect(propsWithDefault);\n\n const showCreatable = Boolean(\n creatable && creatableText && !filteredOptions.length && fieldValue\n );\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setOpened(true);\n setFocusedOptionIndex(0);\n onFocus!(e);\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n e.target !== rootRef.current &&\n !rootRef.current?.contains(e.target as Node)\n ) {\n setOpened(false);\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = chipsSelectOptions[index];\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n };\n\n const focusOptionByIndex = (index: number, oldIndex: number) => {\n const { length } = filteredOptions;\n\n if (index < 0) {\n index = length - 1;\n } else if (index >= length) {\n index = 0;\n }\n\n if (index === oldIndex) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number | null, type: FocusActionType) => {\n let index = typeof nextIndex !== \"number\" ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n index = index + 1;\n } else if (type === FOCUS_ACTION_PREV) {\n index = index - 1;\n }\n\n if (focusedOptionIndex != null) {\n focusOptionByIndex(index, focusedOptionIndex);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown!(e);\n\n if (e.key === \"ArrowUp\" && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_PREV);\n }\n }\n\n if (e.key === \"ArrowDown\" && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_NEXT);\n }\n }\n\n if (\n e.key === \"Enter\" &&\n !e.defaultPrevented &&\n opened &&\n focusedOptionIndex != null\n ) {\n const option = filteredOptions[focusedOptionIndex];\n\n if (option) {\n onChangeStart!(e, option);\n\n if (!e.defaultPrevented) {\n addOption(option);\n setFocusedOptionIndex(null);\n clearInput();\n closeAfterSelect && setOpened(false);\n e.preventDefault();\n }\n } else if (!creatable) {\n e.preventDefault();\n }\n }\n\n if ([\"Escape\", \"Tab\"].includes(e.key) && !e.defaultPrevented && opened) {\n setOpened(false);\n }\n };\n\n React.useEffect(() => {\n if (focusedOptionIndex != null && filteredOptions[focusedOptionIndex]) {\n setFocusedOption(filteredOptions[focusedOptionIndex]);\n } else if (focusedOptionIndex === null || focusedOptionIndex === 0) {\n setFocusedOption(null);\n }\n }, [focusedOptionIndex, filteredOptions, setFocusedOption]);\n\n React.useEffect(() => {\n const index = focusedOption\n ? filteredOptions.findIndex(({ value }) => value === focusedOption.value)\n : -1;\n\n if (\n index === -1 &&\n !!filteredOptions.length &&\n !showCreatable &&\n closeAfterSelect\n ) {\n setFocusedOption(filteredOptions[0]);\n }\n }, [\n filteredOptions,\n focusedOption,\n showCreatable,\n closeAfterSelect,\n setFocusedOption,\n ]);\n\n useGlobalEventListener(document, \"click\", handleClickOutside);\n\n const renderChipWrapper = (\n renderChipProps: RenderChip<Option> | undefined\n ) => {\n if (renderChipProps === undefined) {\n return null;\n }\n const onRemoveWrapper = (\n e: React.MouseEvent | undefined,\n value: ChipValue | undefined\n ) => {\n e?.preventDefault();\n e?.stopPropagation();\n\n renderChipProps.onRemove?.(e, value);\n };\n\n return renderChip!({\n ...renderChipProps,\n onRemove: onRemoveWrapper,\n });\n };\n\n const isPopperDirectionTop = popperPlacement?.includes(\"top\");\n\n const onPlacementChange = React.useCallback(\n (placement?: Placement) => {\n setPopperPlacement(placement);\n },\n [setPopperPlacement]\n );\n\n const onDropdownMouseLeave = React.useCallback(() => {\n setFocusedOptionIndex(null);\n }, [setFocusedOptionIndex]);\n\n const observableRefs = React.useMemo(\n () => [scrollBoxRef, rootRef],\n [rootRef, scrollBoxRef]\n );\n\n const toggleOpened = () => {\n setOpened((prevOpened) => !prevOpened);\n };\n\n return (\n <>\n <FormField\n getRootRef={rootRef}\n style={style}\n className={classNamesString(\n styles[\"ChipsSelect\"],\n opened &&\n (isPopperDirectionTop\n ? styles[\"ChipsSelect--pop-up\"]\n : styles[\"ChipsSelect--pop-down\"]),\n className\n )}\n disabled={disabled}\n role=\"application\"\n aria-disabled={disabled}\n aria-readonly={restProps.readOnly}\n after={\n <IconButton\n className={styles[\"ChipsSelect__dropdown\"]}\n activeMode=\"\"\n hoverMode=\"\"\n // TODO: add label customization\n aria-label={opened ? \"Скрыть\" : \"Развернуть\"}\n onClick={toggleOpened}\n >\n <DropdownIcon\n className={styles[\"ChipsSelect__icon\"]}\n opened={opened}\n />\n </IconButton>\n }\n before={before}\n >\n <ChipsInputBase\n {...restProps}\n tabIndex={tabIndex}\n value={selectedOptions}\n inputValue={fieldValue}\n getNewOptionData={getNewOptionData}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n renderChip={renderChipWrapper}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n getRef={getRef}\n disabled={disabled}\n onInputChange={handleInputChange}\n />\n </FormField>\n {opened && (\n <CustomSelectDropdown\n targetRef={rootRef}\n placement={popupDirection}\n scrollBoxRef={scrollBoxRef}\n observableRefs={observableRefs}\n onPlacementChange={onPlacementChange}\n onMouseLeave={onDropdownMouseLeave}\n fetching={fetching}\n className={styles[\"ChipsSelect__options\"]}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n >\n {showCreatable && (\n <CustomSelectOption\n hovered={focusedOptionIndex === 0}\n onMouseDown={addOptionFromInput}\n onMouseEnter={() => setFocusedOptionIndex(0)}\n >\n {creatableText}\n </CustomSelectOption>\n )}\n {!filteredOptions?.length && !showCreatable && emptyText ? (\n <Footnote className={styles[\"ChipsSelect__empty\"]}>\n {emptyText}\n </Footnote>\n ) : (\n filteredOptions.map((option: Option, index: number) => {\n const label = getOptionLabel!(option);\n const hovered =\n focusedOption &&\n getOptionValue!(option) === getOptionValue!(focusedOption);\n const selected = selectedOptions.find(\n (selectedOption: Option) => {\n return (\n getOptionValue!(selectedOption) === getOptionValue!(option)\n );\n }\n );\n const value = getOptionValue!(option);\n\n return (\n <React.Fragment key={`${typeof value}-${value}`}>\n {renderOption!({\n className: styles[\"ChipsSelect__option\"],\n option,\n hovered: Boolean(hovered),\n children: label,\n selected: !!selected,\n getRootRef: (e) => {\n if (e) {\n return (chipsSelectOptions[index] = e);\n }\n return undefined;\n },\n onMouseDown: (e: React.MouseEvent<HTMLDivElement>) => {\n onChangeStart?.(e, option);\n\n if (!e.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter: () => setFocusedOptionIndex(index),\n })}\n </React.Fragment>\n );\n })\n )}\n </CustomSelectDropdown>\n )}\n </>\n );\n};\n"],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ var _useIsomorphicLayoutEffect = require("../../lib/useIsomorphicLayoutEffect");
|
|
|
12
12
|
var _useExternRef = require("../../hooks/useExternRef");
|
|
13
13
|
var _useEventListener = require("../../hooks/useEventListener");
|
|
14
14
|
var _useTrackerVisibility2 = require("./useTrackerVisibility");
|
|
15
|
+
var _utils = require("../../lib/utils");
|
|
15
16
|
var CustomScrollView = function CustomScrollView(_ref) {
|
|
16
17
|
var className = _ref.className,
|
|
17
18
|
children = _ref.children,
|
|
@@ -145,7 +146,8 @@ var CustomScrollView = function CustomScrollView(_ref) {
|
|
|
145
146
|
className: (0, _classNames.classNamesString)("vkuiCustomScrollView", className)
|
|
146
147
|
}, /*#__PURE__*/React.createElement("div", {
|
|
147
148
|
className: "vkuiCustomScrollView__barY",
|
|
148
|
-
ref: barY
|
|
149
|
+
ref: barY,
|
|
150
|
+
onClick: _utils.stopPropagation
|
|
149
151
|
}, /*#__PURE__*/React.createElement("div", {
|
|
150
152
|
className: (0, _classNames.classNamesString)("vkuiCustomScrollView__trackerY", !trackerVisible && "vkuiCustomScrollView__trackerY--hidden"),
|
|
151
153
|
onMouseEnter: autoHideScrollbar ? onTrackerMouseEnter : undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomScrollView.js","names":["CustomScrollView","className","children","externalBoxRef","boxRef","windowResize","autoHideScrollbar","autoHideScrollbarDelay","useDOM","document","window","ratio","React","useRef","NaN","lastTrackerTop","clientHeight","trackerHeight","scrollHeight","transformProp","startY","trackerTop","useExternRef","barY","trackerY","setTrackerPosition","scrollTop","current","style","setTrackerPositionFromScroll","progress","resize","localClientHeight","localScrollHeight","localRatio","localTrackerHeight","Math","max","display","height","resizeHandler","useEventListener","useIsomorphicLayoutEffect","add","prop","undefined","setScrollPositionFromTracker","onMove","e","preventDefault","diff","clientY","position","min","useTrackerVisibility","trackerVisible","onTargetScroll","onTrackerDragStart","onTrackerDragStop","onTrackerMouseEnter","onTrackerMouseLeave","onUp","unsubscribe","scroll","listeners","subscribe","el","forEach","l","remove","onDragStart","classNamesString"],"sources":["../../../../src/components/CustomScrollView/CustomScrollView.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { DOMProps, useDOM } from \"../../lib/dom\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useEventListener } from \"../../hooks/useEventListener\";\nimport {\n TrackerOptionsProps,\n useTrackerVisibility,\n} from \"./useTrackerVisibility\";\nimport styles from \"./CustomScrollView.module.css\";\n\nexport interface CustomScrollViewProps extends DOMProps, TrackerOptionsProps {\n windowResize?: boolean;\n boxRef?: React.Ref<HTMLDivElement>;\n className?: HTMLDivElement[\"className\"];\n children: React.ReactNode;\n}\n\nexport const CustomScrollView = ({\n className,\n children,\n boxRef: externalBoxRef,\n windowResize,\n autoHideScrollbar = false,\n autoHideScrollbarDelay,\n}: CustomScrollViewProps) => {\n const { document, window } = useDOM();\n\n const ratio = React.useRef(NaN);\n const lastTrackerTop = React.useRef(0);\n const clientHeight = React.useRef(0);\n const trackerHeight = React.useRef(0);\n const scrollHeight = React.useRef(0);\n const transformProp = React.useRef(\"\");\n const startY = React.useRef(0);\n const trackerTop = React.useRef(0);\n\n const boxRef = useExternRef(externalBoxRef);\n\n const barY = React.useRef<HTMLDivElement>(null);\n const trackerY = React.useRef<HTMLDivElement>(null);\n\n const setTrackerPosition = (scrollTop: number) => {\n lastTrackerTop.current = scrollTop;\n if (trackerY.current !== null) {\n (trackerY.current.style as any)[\n transformProp.current\n ] = `translate(0, ${scrollTop}px)`;\n }\n };\n\n const setTrackerPositionFromScroll = (scrollTop: number) => {\n const progress = scrollTop / (scrollHeight.current - clientHeight.current);\n setTrackerPosition(\n (clientHeight.current - trackerHeight.current) * progress\n );\n };\n\n const resize = () => {\n if (!boxRef.current || !barY.current || !trackerY.current) {\n return;\n }\n const localClientHeight = boxRef.current.clientHeight;\n const localScrollHeight = boxRef.current.scrollHeight;\n const localRatio = localClientHeight / localScrollHeight;\n const localTrackerHeight = Math.max(localClientHeight * localRatio, 40);\n\n ratio.current = localRatio;\n clientHeight.current = localClientHeight;\n scrollHeight.current = localScrollHeight;\n trackerHeight.current = localTrackerHeight;\n\n if (localRatio >= 1) {\n barY.current.style.display = \"none\";\n } else {\n barY.current.style.display = \"\";\n trackerY.current.style.height = `${localTrackerHeight}px`;\n setTrackerPositionFromScroll(boxRef.current.scrollTop);\n }\n };\n\n const resizeHandler = useEventListener(\"resize\", resize);\n\n useIsomorphicLayoutEffect(() => {\n if (windowResize && window) {\n resizeHandler.add(window);\n }\n }, [windowResize, window]);\n\n useIsomorphicLayoutEffect(() => {\n let style = trackerY.current?.style;\n let prop = \"\";\n if (style !== undefined) {\n if (\"transform\" in style) {\n prop = \"transform\";\n } else if (\"webkitTransform\" in style) {\n prop = \"webkitTransform\";\n }\n }\n transformProp.current = prop;\n }, []);\n\n useIsomorphicLayoutEffect(resize);\n\n const setScrollPositionFromTracker = (trackerTop: number) => {\n const progress =\n trackerTop / (clientHeight.current - trackerHeight.current);\n if (boxRef.current !== null) {\n boxRef.current.scrollTop =\n (scrollHeight.current - clientHeight.current) * progress;\n }\n };\n\n const onMove = (e: MouseEvent) => {\n e.preventDefault();\n const diff = e.clientY - startY.current;\n const position = Math.min(\n Math.max(trackerTop.current + diff, 0),\n clientHeight.current - trackerHeight.current\n );\n\n setScrollPositionFromTracker(position);\n };\n\n const {\n trackerVisible,\n onTargetScroll,\n onTrackerDragStart,\n onTrackerDragStop,\n onTrackerMouseEnter,\n onTrackerMouseLeave,\n } = useTrackerVisibility(autoHideScrollbar, autoHideScrollbarDelay);\n\n const onUp = (e: MouseEvent) => {\n e.preventDefault();\n\n if (autoHideScrollbar) {\n onTrackerDragStop();\n }\n\n unsubscribe();\n };\n\n const scroll = () => {\n if (ratio.current >= 1 || !boxRef.current) {\n return;\n }\n\n if (autoHideScrollbar) {\n onTargetScroll();\n }\n\n setTrackerPositionFromScroll(boxRef.current.scrollTop);\n };\n\n const listeners = [\n useEventListener(\"mousemove\", onMove),\n useEventListener(\"mouseup\", onUp),\n ];\n\n function subscribe(el: Document | undefined) {\n if (el) {\n listeners.forEach((l) => l.add(el));\n }\n }\n\n function unsubscribe() {\n listeners.forEach((l) => l.remove());\n }\n\n const onDragStart = (e: React.MouseEvent) => {\n e.preventDefault();\n startY.current = e.clientY;\n trackerTop.current = lastTrackerTop.current;\n\n if (autoHideScrollbar) {\n onTrackerDragStart();\n }\n\n subscribe(document);\n };\n\n return (\n <div className={classNamesString(styles[\"CustomScrollView\"], className)}>\n <div className={styles[\"CustomScrollView__barY\"]} ref={barY}>\n <div\n className={classNamesString(\n styles[\"CustomScrollView__trackerY\"],\n !trackerVisible && styles[`CustomScrollView__trackerY--hidden`]\n )}\n onMouseEnter={autoHideScrollbar ? onTrackerMouseEnter : undefined}\n onMouseLeave={autoHideScrollbar ? onTrackerMouseLeave : undefined}\n ref={trackerY}\n onMouseDown={onDragStart}\n />\n </div>\n\n <div\n className={styles[\"CustomScrollView__box\"]}\n tabIndex={-1}\n ref={boxRef}\n onScroll={scroll}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CustomScrollView.js","names":["CustomScrollView","className","children","externalBoxRef","boxRef","windowResize","autoHideScrollbar","autoHideScrollbarDelay","useDOM","document","window","ratio","React","useRef","NaN","lastTrackerTop","clientHeight","trackerHeight","scrollHeight","transformProp","startY","trackerTop","useExternRef","barY","trackerY","setTrackerPosition","scrollTop","current","style","setTrackerPositionFromScroll","progress","resize","localClientHeight","localScrollHeight","localRatio","localTrackerHeight","Math","max","display","height","resizeHandler","useEventListener","useIsomorphicLayoutEffect","add","prop","undefined","setScrollPositionFromTracker","onMove","e","preventDefault","diff","clientY","position","min","useTrackerVisibility","trackerVisible","onTargetScroll","onTrackerDragStart","onTrackerDragStop","onTrackerMouseEnter","onTrackerMouseLeave","onUp","unsubscribe","scroll","listeners","subscribe","el","forEach","l","remove","onDragStart","classNamesString","stopPropagation"],"sources":["../../../../src/components/CustomScrollView/CustomScrollView.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { DOMProps, useDOM } from \"../../lib/dom\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useEventListener } from \"../../hooks/useEventListener\";\nimport {\n TrackerOptionsProps,\n useTrackerVisibility,\n} from \"./useTrackerVisibility\";\nimport { stopPropagation } from \"../../lib/utils\";\nimport styles from \"./CustomScrollView.module.css\";\n\nexport interface CustomScrollViewProps extends DOMProps, TrackerOptionsProps {\n windowResize?: boolean;\n boxRef?: React.Ref<HTMLDivElement>;\n className?: HTMLDivElement[\"className\"];\n children: React.ReactNode;\n}\n\nexport const CustomScrollView = ({\n className,\n children,\n boxRef: externalBoxRef,\n windowResize,\n autoHideScrollbar = false,\n autoHideScrollbarDelay,\n}: CustomScrollViewProps) => {\n const { document, window } = useDOM();\n\n const ratio = React.useRef(NaN);\n const lastTrackerTop = React.useRef(0);\n const clientHeight = React.useRef(0);\n const trackerHeight = React.useRef(0);\n const scrollHeight = React.useRef(0);\n const transformProp = React.useRef(\"\");\n const startY = React.useRef(0);\n const trackerTop = React.useRef(0);\n\n const boxRef = useExternRef(externalBoxRef);\n\n const barY = React.useRef<HTMLDivElement>(null);\n const trackerY = React.useRef<HTMLDivElement>(null);\n\n const setTrackerPosition = (scrollTop: number) => {\n lastTrackerTop.current = scrollTop;\n if (trackerY.current !== null) {\n (trackerY.current.style as any)[\n transformProp.current\n ] = `translate(0, ${scrollTop}px)`;\n }\n };\n\n const setTrackerPositionFromScroll = (scrollTop: number) => {\n const progress = scrollTop / (scrollHeight.current - clientHeight.current);\n setTrackerPosition(\n (clientHeight.current - trackerHeight.current) * progress\n );\n };\n\n const resize = () => {\n if (!boxRef.current || !barY.current || !trackerY.current) {\n return;\n }\n const localClientHeight = boxRef.current.clientHeight;\n const localScrollHeight = boxRef.current.scrollHeight;\n const localRatio = localClientHeight / localScrollHeight;\n const localTrackerHeight = Math.max(localClientHeight * localRatio, 40);\n\n ratio.current = localRatio;\n clientHeight.current = localClientHeight;\n scrollHeight.current = localScrollHeight;\n trackerHeight.current = localTrackerHeight;\n\n if (localRatio >= 1) {\n barY.current.style.display = \"none\";\n } else {\n barY.current.style.display = \"\";\n trackerY.current.style.height = `${localTrackerHeight}px`;\n setTrackerPositionFromScroll(boxRef.current.scrollTop);\n }\n };\n\n const resizeHandler = useEventListener(\"resize\", resize);\n\n useIsomorphicLayoutEffect(() => {\n if (windowResize && window) {\n resizeHandler.add(window);\n }\n }, [windowResize, window]);\n\n useIsomorphicLayoutEffect(() => {\n let style = trackerY.current?.style;\n let prop = \"\";\n if (style !== undefined) {\n if (\"transform\" in style) {\n prop = \"transform\";\n } else if (\"webkitTransform\" in style) {\n prop = \"webkitTransform\";\n }\n }\n transformProp.current = prop;\n }, []);\n\n useIsomorphicLayoutEffect(resize);\n\n const setScrollPositionFromTracker = (trackerTop: number) => {\n const progress =\n trackerTop / (clientHeight.current - trackerHeight.current);\n if (boxRef.current !== null) {\n boxRef.current.scrollTop =\n (scrollHeight.current - clientHeight.current) * progress;\n }\n };\n\n const onMove = (e: MouseEvent) => {\n e.preventDefault();\n const diff = e.clientY - startY.current;\n const position = Math.min(\n Math.max(trackerTop.current + diff, 0),\n clientHeight.current - trackerHeight.current\n );\n\n setScrollPositionFromTracker(position);\n };\n\n const {\n trackerVisible,\n onTargetScroll,\n onTrackerDragStart,\n onTrackerDragStop,\n onTrackerMouseEnter,\n onTrackerMouseLeave,\n } = useTrackerVisibility(autoHideScrollbar, autoHideScrollbarDelay);\n\n const onUp = (e: MouseEvent) => {\n e.preventDefault();\n\n if (autoHideScrollbar) {\n onTrackerDragStop();\n }\n\n unsubscribe();\n };\n\n const scroll = () => {\n if (ratio.current >= 1 || !boxRef.current) {\n return;\n }\n\n if (autoHideScrollbar) {\n onTargetScroll();\n }\n\n setTrackerPositionFromScroll(boxRef.current.scrollTop);\n };\n\n const listeners = [\n useEventListener(\"mousemove\", onMove),\n useEventListener(\"mouseup\", onUp),\n ];\n\n function subscribe(el: Document | undefined) {\n if (el) {\n listeners.forEach((l) => l.add(el));\n }\n }\n\n function unsubscribe() {\n listeners.forEach((l) => l.remove());\n }\n\n const onDragStart = (e: React.MouseEvent) => {\n e.preventDefault();\n startY.current = e.clientY;\n trackerTop.current = lastTrackerTop.current;\n\n if (autoHideScrollbar) {\n onTrackerDragStart();\n }\n\n subscribe(document);\n };\n\n return (\n <div className={classNamesString(styles[\"CustomScrollView\"], className)}>\n <div\n className={styles[\"CustomScrollView__barY\"]}\n ref={barY}\n onClick={stopPropagation}\n >\n <div\n className={classNamesString(\n styles[\"CustomScrollView__trackerY\"],\n !trackerVisible && styles[`CustomScrollView__trackerY--hidden`]\n )}\n onMouseEnter={autoHideScrollbar ? onTrackerMouseEnter : undefined}\n onMouseLeave={autoHideScrollbar ? onTrackerMouseLeave : undefined}\n ref={trackerY}\n onMouseDown={onDragStart}\n />\n </div>\n\n <div\n className={styles[\"CustomScrollView__box\"]}\n tabIndex={-1}\n ref={boxRef}\n onScroll={scroll}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -47,7 +47,8 @@ var CustomSelectOption = function CustomSelectOption(_ref) {
|
|
|
47
47
|
}, styleProp) : styleProp;
|
|
48
48
|
}, [hierarchy, styleProp]);
|
|
49
49
|
if (!!option && process.env.NODE_ENV === "development") {
|
|
50
|
-
|
|
50
|
+
// TODO v6.0.0. Удалить св-во `option`
|
|
51
|
+
warn("Свойство option было добавлено по ошибке и будет удалено в v6.0.0.");
|
|
51
52
|
}
|
|
52
53
|
return /*#__PURE__*/React.createElement(_Paragraph.Paragraph, (0, _extends2.default)({}, restProps, {
|
|
53
54
|
Component: "div",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomSelectOption.js","names":["warn","warnOnce","CustomSelectOption","children","hierarchy","hovered","selected","before","after","option","description","disabled","styleProp","style","className","restProps","title","undefined","useAdaptivity","sizeY","React","useMemo","process","env","NODE_ENV","classNamesString","getSizeYClassName","hasReactNode"],"sources":["../../../../src/components/CustomSelectOption/CustomSelectOption.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Icon16Done } from \"@vkontakte/icons\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { hasReactNode } from \"../../lib/utils\";\nimport { Paragraph } from \"../Typography/Paragraph/Paragraph\";\nimport { Footnote } from \"../Typography/Footnote/Footnote\";\nimport { HasRootRef } from \"../../types\";\nimport { useAdaptivity } from \"../../hooks/useAdaptivity\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport { getSizeYClassName } from \"../../helpers/getSizeYClassName\";\nimport styles from \"./CustomSelectOption.module.css\";\n\nexport interface CustomSelectOptionProps\n extends React.HTMLAttributes<HTMLDivElement>,\n HasRootRef<HTMLDivElement> {\n /**\n * Вставляет основной контент.\n */\n option?: any;\n /**\n * Добавляет описание под основным блоком.\n */\n description?: React.ReactNode;\n /**\n * Вставляет элемент в начало блока перед основным контентом.\n * Например, можно передать компонент `Avatar`, `Icon<Name>` или другие изображения.\n */\n before?: React.ReactNode;\n /**\n * Вставляет элемент в конец блока после основного контента.\n * Например, можно передать компонент `Avatar`, `Icon<Name>` или другие изображения.\n */\n after?: React.ReactNode;\n /**\n * Позволяет создавать вложенность.\n */\n hierarchy?: number;\n /**\n * Включает состояние выбранного элемента списка.\n */\n selected?: boolean;\n /**\n * Включает состояние наведения.\n */\n hovered?: boolean;\n /**\n * Включает состояние фокуса.\n */\n focused?: boolean;\n /**\n * Блокирует весь блок.\n */\n disabled?: boolean;\n}\n\nconst warn = warnOnce(\"CustomSelectOption\");\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelectOption\n */\nexport const CustomSelectOption = ({\n children,\n hierarchy = 0,\n hovered,\n selected,\n before,\n after,\n option,\n description,\n disabled,\n style: styleProp,\n className,\n ...restProps\n}: CustomSelectOptionProps) => {\n const title = typeof children === \"string\" ? children : undefined;\n const { sizeY } = useAdaptivity();\n const style = React.useMemo(\n () =>\n hierarchy > 0\n ? {\n \"--vkui_internal--custom_select_option_hierarchy_level\": hierarchy,\n ...styleProp,\n }\n : styleProp,\n [hierarchy, styleProp]\n );\n\n if (!!option && process.env.NODE_ENV === \"development\") {\n warn(\"Свойство option было добавлено по ошибке и будет удалено в
|
|
1
|
+
{"version":3,"file":"CustomSelectOption.js","names":["warn","warnOnce","CustomSelectOption","children","hierarchy","hovered","selected","before","after","option","description","disabled","styleProp","style","className","restProps","title","undefined","useAdaptivity","sizeY","React","useMemo","process","env","NODE_ENV","classNamesString","getSizeYClassName","hasReactNode"],"sources":["../../../../src/components/CustomSelectOption/CustomSelectOption.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Icon16Done } from \"@vkontakte/icons\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { hasReactNode } from \"../../lib/utils\";\nimport { Paragraph } from \"../Typography/Paragraph/Paragraph\";\nimport { Footnote } from \"../Typography/Footnote/Footnote\";\nimport { HasRootRef } from \"../../types\";\nimport { useAdaptivity } from \"../../hooks/useAdaptivity\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport { getSizeYClassName } from \"../../helpers/getSizeYClassName\";\nimport styles from \"./CustomSelectOption.module.css\";\n\nexport interface CustomSelectOptionProps\n extends React.HTMLAttributes<HTMLDivElement>,\n HasRootRef<HTMLDivElement> {\n /**\n * Вставляет основной контент.\n * @deprecated since v6.0.0\n */\n option?: any;\n /**\n * Добавляет описание под основным блоком.\n */\n description?: React.ReactNode;\n /**\n * Вставляет элемент в начало блока перед основным контентом.\n * Например, можно передать компонент `Avatar`, `Icon<Name>` или другие изображения.\n */\n before?: React.ReactNode;\n /**\n * Вставляет элемент в конец блока после основного контента.\n * Например, можно передать компонент `Avatar`, `Icon<Name>` или другие изображения.\n */\n after?: React.ReactNode;\n /**\n * Позволяет создавать вложенность.\n */\n hierarchy?: number;\n /**\n * Включает состояние выбранного элемента списка.\n */\n selected?: boolean;\n /**\n * Включает состояние наведения.\n */\n hovered?: boolean;\n /**\n * Включает состояние фокуса.\n */\n focused?: boolean;\n /**\n * Блокирует весь блок.\n */\n disabled?: boolean;\n}\n\nconst warn = warnOnce(\"CustomSelectOption\");\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelectOption\n */\nexport const CustomSelectOption = ({\n children,\n hierarchy = 0,\n hovered,\n selected,\n before,\n after,\n option,\n description,\n disabled,\n style: styleProp,\n className,\n ...restProps\n}: CustomSelectOptionProps) => {\n const title = typeof children === \"string\" ? children : undefined;\n const { sizeY } = useAdaptivity();\n const style = React.useMemo(\n () =>\n hierarchy > 0\n ? {\n \"--vkui_internal--custom_select_option_hierarchy_level\": hierarchy,\n ...styleProp,\n }\n : styleProp,\n [hierarchy, styleProp]\n );\n\n if (!!option && process.env.NODE_ENV === \"development\") {\n // TODO v6.0.0. Удалить св-во `option`\n warn(\"Свойство option было добавлено по ошибке и будет удалено в v6.0.0.\");\n }\n\n return (\n <Paragraph\n {...restProps}\n Component=\"div\"\n role=\"option\"\n title={title}\n aria-disabled={disabled}\n aria-selected={selected}\n className={classNamesString(\n styles[\"CustomSelectOption\"],\n getSizeYClassName(styles[\"CustomSelectOption\"], sizeY),\n hovered && !disabled && styles[\"CustomSelectOption--hover\"],\n // Note: пустой класс\n selected && styles[\"CustomSelectOption--selected\"],\n disabled && styles[\"CustomSelectOption--disabled\"],\n hierarchy > 0 && styles[\"CustomSelectOption--hierarchy\"],\n className\n )}\n style={style}\n >\n {hasReactNode(before) && (\n <div className={styles[\"CustomSelectOption__before\"]}>{before}</div>\n )}\n <div className={styles[\"CustomSelectOption__main\"]}>\n <div className={styles[\"CustomSelectOption__children\"]}>{children}</div>\n {hasReactNode(description) && (\n <Footnote className={styles[\"CustomSelectOption__description\"]}>\n {description}\n </Footnote>\n )}\n </div>\n <div className={styles[\"CustomSelectOption__after\"]}>\n {hasReactNode(after) && (\n <div className={styles[\"CustomSelectOption__afterIn\"]}>{after}</div>\n )}\n {selected && (\n <Icon16Done className={styles[\"CustomSelectOption__selectedIcon\"]} />\n )}\n </div>\n </Paragraph>\n );\n};\n"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAoE;AA+CpE,IAAMA,IAAI,GAAG,IAAAC,kBAAQ,EAAC,oBAAoB,CAAC;;AAE3C;AACA;AACA;AACO,IAAMC,kBAAkB,GAAG,SAArBA,kBAAkB,OAaA;EAAA,IAZ7BC,QAAQ,QAARA,QAAQ;IAAA,sBACRC,SAAS;IAATA,SAAS,+BAAG,CAAC;IACbC,OAAO,QAAPA,OAAO;IACPC,QAAQ,QAARA,QAAQ;IACRC,MAAM,QAANA,MAAM;IACNC,KAAK,QAALA,KAAK;IACLC,MAAM,QAANA,MAAM;IACNC,WAAW,QAAXA,WAAW;IACXC,QAAQ,QAARA,QAAQ;IACDC,SAAS,QAAhBC,KAAK;IACLC,SAAS,QAATA,SAAS;IACNC,SAAS;EAEZ,IAAMC,KAAK,GAAG,OAAOb,QAAQ,KAAK,QAAQ,GAAGA,QAAQ,GAAGc,SAAS;EACjE,qBAAkB,IAAAC,6BAAa,GAAE;IAAzBC,KAAK,kBAALA,KAAK;EACb,IAAMN,KAAK,GAAGO,KAAK,CAACC,OAAO,CACzB;IAAA,OACEjB,SAAS,GAAG,CAAC;MAEP,uDAAuD,EAAEA;IAAS,GAC/DQ,SAAS,IAEdA,SAAS;EAAA,GACf,CAACR,SAAS,EAAEQ,SAAS,CAAC,CACvB;EAED,IAAI,CAAC,CAACH,MAAM,IAAIa,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;IACtD;IACAxB,IAAI,CAAC,oEAAoE,CAAC;EAC5E;EAEA,oBACE,oBAAC,oBAAS,6BACJe,SAAS;IACb,SAAS,EAAC,KAAK;IACf,IAAI,EAAC,QAAQ;IACb,KAAK,EAAEC,KAAM;IACb,iBAAeL,QAAS;IACxB,iBAAeL,QAAS;IACxB,SAAS,EAAE,IAAAmB,4BAAgB,4BAEzB,IAAAC,oCAAiB,4BAA+BP,KAAK,CAAC,EACtDd,OAAO,IAAI,CAACM,QAAQ,mCAAuC;IAC3D;IACAL,QAAQ,sCAA0C,EAClDK,QAAQ,sCAA0C,EAClDP,SAAS,GAAG,CAAC,uCAA2C,EACxDU,SAAS,CACT;IACF,KAAK,EAAED;EAAM,IAEZ,IAAAc,mBAAY,EAACpB,MAAM,CAAC,iBACnB;IAAK,SAAS;EAAuC,GAAEA,MAAM,CAC9D,eACD;IAAK,SAAS;EAAqC,gBACjD;IAAK,SAAS;EAAyC,GAAEJ,QAAQ,CAAO,EACvE,IAAAwB,mBAAY,EAACjB,WAAW,CAAC,iBACxB,oBAAC,kBAAQ;IAAC,SAAS;EAA4C,GAC5DA,WAAW,CAEf,CACG,eACN;IAAK,SAAS;EAAsC,GACjD,IAAAiB,mBAAY,EAACnB,KAAK,CAAC,iBAClB;IAAK,SAAS;EAAwC,GAAEA,KAAK,CAC9D,EACAF,QAAQ,iBACP,oBAAC,iBAAU;IAAC,SAAS;EAA6C,EACnE,CACG,CACI;AAEhB,CAAC;AAAC"}
|
|
@@ -19,7 +19,7 @@ var FocusVisible = function FocusVisible(_ref) {
|
|
|
19
19
|
};
|
|
20
20
|
exports.FocusVisible = FocusVisible;
|
|
21
21
|
var styles = {
|
|
22
|
-
"FocusVisible--mode-
|
|
23
|
-
"FocusVisible--mode-
|
|
22
|
+
"FocusVisible--mode-inside": "vkuiFocusVisible--mode-inside",
|
|
23
|
+
"FocusVisible--mode-outside": "vkuiFocusVisible--mode-outside"
|
|
24
24
|
};
|
|
25
25
|
//# sourceMappingURL=FocusVisible.js.map
|
|
@@ -78,11 +78,10 @@ var PanelHeaderButton = function PanelHeaderButton(_ref2) {
|
|
|
78
78
|
className: (0, _classNames.classNamesString)("vkuiPanelHeaderButton", (0, _getPlatformClassName.getPlatformClassName)("vkuiPanelHeaderButton", platform), isPrimitive && "vkuiPanelHeaderButton--primitive", !isPrimitive && !isPrimitiveLabel && "vkuiPanelHeaderButton--notPrimitive", className)
|
|
79
79
|
}), isPrimitive ? /*#__PURE__*/React.createElement(ButtonTypography, {
|
|
80
80
|
primary: primary
|
|
81
|
-
}, children) : children, /*#__PURE__*/React.createElement(
|
|
81
|
+
}, children) : children, isPrimitiveLabel ? /*#__PURE__*/React.createElement(ButtonTypography, {
|
|
82
|
+
primary: primary,
|
|
82
83
|
className: "vkuiPanelHeaderButton__label"
|
|
83
|
-
},
|
|
84
|
-
primary: primary
|
|
85
|
-
}, label) : label));
|
|
84
|
+
}, label) : label);
|
|
86
85
|
};
|
|
87
86
|
exports.PanelHeaderButton = PanelHeaderButton;
|
|
88
87
|
//# sourceMappingURL=PanelHeaderButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanelHeaderButton.js","names":["ButtonTypography","primary","children","platform","usePlatform","Platform","IOS","VKCOM","undefined","warn","warnOnce","PanelHeaderButton","label","className","restProps","isPrimitive","isPrimitiveReactNode","isPrimitiveLabel","hoverMode","activeMode","process","env","NODE_ENV","hasAccessibleName","Boolean","getTitleFromChildren","href","classNamesString","getPlatformClassName"],"sources":["../../../../src/components/PanelHeaderButton/PanelHeaderButton.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { TappableProps, Tappable } from \"../Tappable/Tappable\";\nimport { getPlatformClassName } from \"../../helpers/getPlatformClassName\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport { usePlatform } from \"../../hooks/usePlatform\";\nimport { getTitleFromChildren, isPrimitiveReactNode } from \"../../lib/utils\";\nimport { Platform } from \"../../lib/platform\";\nimport { Text } from \"../Typography/Text/Text\";\nimport { Title } from \"../Typography/Title/Title\";\nimport styles from \"./PanelHeaderButton.module.css\";\n\nexport interface PanelHeaderButtonProps extends Omit<TappableProps, \"label\"> {\n primary?: boolean;\n label?: React.ReactNode;\n}\n\ninterface ButtonTypographyProps extends React.AllHTMLAttributes<HTMLElement> {\n primary?: PanelHeaderButtonProps[\"primary\"];\n}\n\nconst ButtonTypography = ({ primary, children }: ButtonTypographyProps) => {\n const platform = usePlatform();\n\n if (platform === Platform.IOS) {\n return (\n <Title Component=\"span\" level=\"3\" weight={primary ? \"1\" : \"3\"}>\n {children}\n </Title>\n );\n }\n\n return (\n <Text weight={platform === Platform.VKCOM ? undefined : \"2\"}>\n {children}\n </Text>\n );\n};\n\nconst warn = warnOnce(\"PanelHeaderButton\");\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PanelHeaderButton\n */\nexport const PanelHeaderButton = ({\n children,\n primary = false,\n label,\n className,\n ...restProps\n}: PanelHeaderButtonProps) => {\n const isPrimitive = isPrimitiveReactNode(children);\n const isPrimitiveLabel = isPrimitiveReactNode(label);\n const platform = usePlatform();\n\n let hoverMode;\n let activeMode;\n\n switch (platform) {\n case Platform.IOS:\n hoverMode = \"background\";\n activeMode = \"opacity\";\n break;\n case Platform.VKCOM:\n hoverMode = styles[\"PanelHeaderButton--hover\"];\n activeMode = styles[\"PanelHeaderButton--active\"];\n break;\n default:\n hoverMode = \"background\";\n activeMode = \"background\";\n }\n\n if (process.env.NODE_ENV === \"development\") {\n const hasAccessibleName = Boolean(\n getTitleFromChildren(children) ||\n getTitleFromChildren(label) ||\n restProps[\"aria-label\"] ||\n restProps[\"aria-labelledby\"]\n );\n\n if (!hasAccessibleName) {\n warn(\n \"a11y: У кнопки нет названия, которое может прочитать скринридер, и она недоступна для части пользователей. Замените содержимое на текст или добавьте описание действия с помощью пропа aria-label.\",\n \"error\"\n );\n }\n }\n\n return (\n <Tappable\n {...restProps}\n hoverMode={hoverMode}\n Component={restProps.href ? \"a\" : \"button\"}\n activeEffectDelay={200}\n activeMode={activeMode}\n className={classNamesString(\n styles[\"PanelHeaderButton\"],\n getPlatformClassName(styles[\"PanelHeaderButton\"], platform),\n isPrimitive && styles[\"PanelHeaderButton--primitive\"],\n !isPrimitive &&\n !isPrimitiveLabel &&\n styles[\"PanelHeaderButton--notPrimitive\"],\n className\n )}\n >\n {isPrimitive ? (\n <ButtonTypography primary={primary}>{children}</ButtonTypography>\n ) : (\n children\n )}\n <
|
|
1
|
+
{"version":3,"file":"PanelHeaderButton.js","names":["ButtonTypography","primary","children","platform","usePlatform","Platform","IOS","VKCOM","undefined","warn","warnOnce","PanelHeaderButton","label","className","restProps","isPrimitive","isPrimitiveReactNode","isPrimitiveLabel","hoverMode","activeMode","process","env","NODE_ENV","hasAccessibleName","Boolean","getTitleFromChildren","href","classNamesString","getPlatformClassName"],"sources":["../../../../src/components/PanelHeaderButton/PanelHeaderButton.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { TappableProps, Tappable } from \"../Tappable/Tappable\";\nimport { getPlatformClassName } from \"../../helpers/getPlatformClassName\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport { usePlatform } from \"../../hooks/usePlatform\";\nimport { getTitleFromChildren, isPrimitiveReactNode } from \"../../lib/utils\";\nimport { Platform } from \"../../lib/platform\";\nimport { Text } from \"../Typography/Text/Text\";\nimport { Title } from \"../Typography/Title/Title\";\nimport styles from \"./PanelHeaderButton.module.css\";\n\nexport interface PanelHeaderButtonProps extends Omit<TappableProps, \"label\"> {\n primary?: boolean;\n label?: React.ReactNode;\n}\n\ninterface ButtonTypographyProps extends React.AllHTMLAttributes<HTMLElement> {\n primary?: PanelHeaderButtonProps[\"primary\"];\n}\n\nconst ButtonTypography = ({ primary, children }: ButtonTypographyProps) => {\n const platform = usePlatform();\n\n if (platform === Platform.IOS) {\n return (\n <Title Component=\"span\" level=\"3\" weight={primary ? \"1\" : \"3\"}>\n {children}\n </Title>\n );\n }\n\n return (\n <Text weight={platform === Platform.VKCOM ? undefined : \"2\"}>\n {children}\n </Text>\n );\n};\n\nconst warn = warnOnce(\"PanelHeaderButton\");\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PanelHeaderButton\n */\nexport const PanelHeaderButton = ({\n children,\n primary = false,\n label,\n className,\n ...restProps\n}: PanelHeaderButtonProps) => {\n const isPrimitive = isPrimitiveReactNode(children);\n const isPrimitiveLabel = isPrimitiveReactNode(label);\n const platform = usePlatform();\n\n let hoverMode;\n let activeMode;\n\n switch (platform) {\n case Platform.IOS:\n hoverMode = \"background\";\n activeMode = \"opacity\";\n break;\n case Platform.VKCOM:\n hoverMode = styles[\"PanelHeaderButton--hover\"];\n activeMode = styles[\"PanelHeaderButton--active\"];\n break;\n default:\n hoverMode = \"background\";\n activeMode = \"background\";\n }\n\n if (process.env.NODE_ENV === \"development\") {\n const hasAccessibleName = Boolean(\n getTitleFromChildren(children) ||\n getTitleFromChildren(label) ||\n restProps[\"aria-label\"] ||\n restProps[\"aria-labelledby\"]\n );\n\n if (!hasAccessibleName) {\n warn(\n \"a11y: У кнопки нет названия, которое может прочитать скринридер, и она недоступна для части пользователей. Замените содержимое на текст или добавьте описание действия с помощью пропа aria-label.\",\n \"error\"\n );\n }\n }\n\n return (\n <Tappable\n {...restProps}\n hoverMode={hoverMode}\n Component={restProps.href ? \"a\" : \"button\"}\n activeEffectDelay={200}\n activeMode={activeMode}\n className={classNamesString(\n styles[\"PanelHeaderButton\"],\n getPlatformClassName(styles[\"PanelHeaderButton\"], platform),\n isPrimitive && styles[\"PanelHeaderButton--primitive\"],\n !isPrimitive &&\n !isPrimitiveLabel &&\n styles[\"PanelHeaderButton--notPrimitive\"],\n className\n )}\n >\n {isPrimitive ? (\n <ButtonTypography primary={primary}>{children}</ButtonTypography>\n ) : (\n children\n )}\n {isPrimitiveLabel ? (\n <ButtonTypography\n primary={primary}\n className={styles[\"PanelHeaderButton__label\"]}\n >\n {label}\n </ButtonTypography>\n ) : (\n label\n )}\n </Tappable>\n );\n};\n"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAkD;AAYlD,IAAMA,gBAAgB,GAAG,SAAnBA,gBAAgB,OAAqD;EAAA,IAA/CC,OAAO,QAAPA,OAAO;IAAEC,QAAQ,QAARA,QAAQ;EAC3C,IAAMC,QAAQ,GAAG,IAAAC,wBAAW,GAAE;EAE9B,IAAID,QAAQ,KAAKE,kBAAQ,CAACC,GAAG,EAAE;IAC7B,oBACE,oBAAC,YAAK;MAAC,SAAS,EAAC,MAAM;MAAC,KAAK,EAAC,GAAG;MAAC,MAAM,EAAEL,OAAO,GAAG,GAAG,GAAG;IAAI,GAC3DC,QAAQ,CACH;EAEZ;EAEA,oBACE,oBAAC,UAAI;IAAC,MAAM,EAAEC,QAAQ,KAAKE,kBAAQ,CAACE,KAAK,GAAGC,SAAS,GAAG;EAAI,GACzDN,QAAQ,CACJ;AAEX,CAAC;AAED,IAAMO,IAAI,GAAG,IAAAC,kBAAQ,EAAC,mBAAmB,CAAC;;AAE1C;AACA;AACA;AACO,IAAMC,iBAAiB,GAAG,SAApBA,iBAAiB,QAMA;EAAA,IAL5BT,QAAQ,SAARA,QAAQ;IAAA,sBACRD,OAAO;IAAPA,OAAO,8BAAG,KAAK;IACfW,KAAK,SAALA,KAAK;IACLC,SAAS,SAATA,SAAS;IACNC,SAAS;EAEZ,IAAMC,WAAW,GAAG,IAAAC,2BAAoB,EAACd,QAAQ,CAAC;EAClD,IAAMe,gBAAgB,GAAG,IAAAD,2BAAoB,EAACJ,KAAK,CAAC;EACpD,IAAMT,QAAQ,GAAG,IAAAC,wBAAW,GAAE;EAE9B,IAAIc,SAAS;EACb,IAAIC,UAAU;EAEd,QAAQhB,QAAQ;IACd,KAAKE,kBAAQ,CAACC,GAAG;MACfY,SAAS,GAAG,YAAY;MACxBC,UAAU,GAAG,SAAS;MACtB;IACF,KAAKd,kBAAQ,CAACE,KAAK;MACjBW,SAAS,iCAAqC;MAC9CC,UAAU,kCAAsC;MAChD;IACF;MACED,SAAS,GAAG,YAAY;MACxBC,UAAU,GAAG,YAAY;EAAC;EAG9B,IAAIC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;IAC1C,IAAMC,iBAAiB,GAAGC,OAAO,CAC/B,IAAAC,2BAAoB,EAACvB,QAAQ,CAAC,IAC5B,IAAAuB,2BAAoB,EAACb,KAAK,CAAC,IAC3BE,SAAS,CAAC,YAAY,CAAC,IACvBA,SAAS,CAAC,iBAAiB,CAAC,CAC/B;IAED,IAAI,CAACS,iBAAiB,EAAE;MACtBd,IAAI,CACF,oMAAoM,EACpM,OAAO,CACR;IACH;EACF;EAEA,oBACE,oBAAC,kBAAQ,6BACHK,SAAS;IACb,SAAS,EAAEI,SAAU;IACrB,SAAS,EAAEJ,SAAS,CAACY,IAAI,GAAG,GAAG,GAAG,QAAS;IAC3C,iBAAiB,EAAE,GAAI;IACvB,UAAU,EAAEP,UAAW;IACvB,SAAS,EAAE,IAAAQ,4BAAgB,2BAEzB,IAAAC,0CAAoB,2BAA8BzB,QAAQ,CAAC,EAC3DY,WAAW,sCAA0C,EACrD,CAACA,WAAW,IACV,CAACE,gBAAgB,yCACwB,EAC3CJ,SAAS;EACT,IAEDE,WAAW,gBACV,oBAAC,gBAAgB;IAAC,OAAO,EAAEd;EAAQ,GAAEC,QAAQ,CAAoB,GAEjEA,QACD,EACAe,gBAAgB,gBACf,oBAAC,gBAAgB;IACf,OAAO,EAAEhB,OAAQ;IACjB,SAAS;EAAqC,GAE7CW,KAAK,CACW,GAEnBA,KACD,CACQ;AAEf,CAAC;AAAC"}
|
|
@@ -105,11 +105,20 @@ var Popover = function Popover(_ref) {
|
|
|
105
105
|
return;
|
|
106
106
|
}
|
|
107
107
|
targetClickEvent.add(childRef.current);
|
|
108
|
+
}, [childRef, targetClickEvent]);
|
|
109
|
+
React.useEffect(function () {
|
|
110
|
+
if (!childRef.current) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
108
113
|
if (hoverable) {
|
|
109
114
|
targetEnterListener.add(childRef.current);
|
|
110
115
|
targetLeaveListener.add(childRef.current);
|
|
111
116
|
}
|
|
112
|
-
|
|
117
|
+
return function () {
|
|
118
|
+
targetEnterListener.remove();
|
|
119
|
+
targetLeaveListener.remove();
|
|
120
|
+
};
|
|
121
|
+
}, [childRef, hoverable, targetEnterListener, targetLeaveListener]);
|
|
113
122
|
return /*#__PURE__*/React.createElement(React.Fragment, null, child, shown && /*#__PURE__*/React.createElement(_Popper.Popper, (0, _extends2.default)({}, restProps, {
|
|
114
123
|
className: (0, _classNames.classNamesString)("vkuiPopover", className),
|
|
115
124
|
targetRef: childRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Popover.js","names":["Popover","action","shownProp","shown","showDelay","hideDelay","offsetDistance","content","children","styleProp","style","className","getRef","onShownChange","restProps","useDOM","document","hoverable","hovered","React","useRef","useState","computedShown","setComputedShown","dropdownNode","setPopperNode","patchedPopperRef","useExternRef","usePatchChildrenRef","childRef","child","setShown","value","showTimeout","useTimeout","hideTimeout","handleTargetEnter","current","clear","set","handleTargetClick","handleTargetLeave","handleContentKeyDownEscape","handleOutsideClick","e","contains","target","useGlobalEventListener","targetEnterListener","useEventListener","targetClickEvent","targetLeaveListener","useEffect","add","classNamesString","wrapperClassName","undefined"],"sources":["../../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { useDOM } from \"../../lib/dom\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { PopperCommonProps, Popper } from \"../Popper/Popper\";\nimport { FocusTrap } from \"../FocusTrap/FocusTrap\";\nimport { useTimeout } from \"../../hooks/useTimeout\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useEventListener } from \"../../hooks/useEventListener\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { usePatchChildrenRef } from \"../../hooks/usePatchChildrenRef\";\nimport styles from \"./Popover.module.css\";\n\nexport interface PopoverProps\n extends Omit<PopperCommonProps, \"arrow\" | \"arrowClassName\"> {\n /**\n * Механика вызова всплывающего окна.\n *\n * - `\"click\"` – показывается/скрывается только при нажатии.\n * - `\"hover\"` – помимо нажатия, будет показываться/скрывается при наведении/отведении мыши.\n *\n * > ⚠️`\"hover\"` на тач-устройствах будет работать как `\"click\"`, с одним лишь нюансом, что не будет закрываться\n * > при повторном нажатии на целевой элемент. Для закрытия необходимо нажать на область вне целевого элемента\n * > и выпадающего окна.\n */\n action?: \"click\" | \"hover\";\n /**\n * Если передан, то всплывающее окно будет показан/скрыт в зависимости от значения свойства.\n */\n shown?: boolean;\n /**\n * Количество миллисекунд, после которых произойдёт показ всплывающего окна.\n *\n * > Используется только для `action=\"hover\"` при наведении/отведении мыши.\n */\n showDelay?: number;\n /**\n * Количество миллисекунд, после которых произойдёт скрытие всплывающего окна.\n *\n * > Используется только для `action=\"hover\"` при наведении/отведении мыши.\n */\n hideDelay?: number;\n /**\n * Содержимое всплывающего окна.\n */\n content?: React.ReactNode;\n /**\n * Целевой элемент. Всплывающее окно появится возле него.\n *\n * > ⚠️ Если это пользовательский компонент, то он должен предоставлять параметры либо `getRootRef`, либо `ref` для получения ссылки на DOM-узел.\n */\n children?: React.ReactElement;\n /**\n * Вызывается при каждом изменении видимости всплывающего окна.\n */\n onShownChange?(shown: boolean): void;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Popover\n */\nexport const Popover = ({\n action = \"click\",\n shown: shownProp,\n showDelay = 150,\n hideDelay = 150,\n offsetDistance = 8,\n content,\n children,\n style: styleProp,\n className,\n getRef,\n onShownChange,\n ...restProps\n}: PopoverProps) => {\n const { document } = useDOM();\n\n const hoverable = action === \"hover\";\n const hovered = React.useRef(false);\n const [computedShown, setComputedShown] = React.useState(shownProp || false);\n const [dropdownNode, setPopperNode] = React.useState<HTMLElement | null>(\n null\n );\n\n const shown = typeof shownProp === \"boolean\" ? shownProp : computedShown;\n\n const patchedPopperRef = useExternRef<HTMLDivElement>(setPopperNode, getRef);\n\n const [childRef, child] = usePatchChildrenRef(children);\n\n const setShown = (value: boolean) => {\n if (typeof shownProp !== \"boolean\") {\n setComputedShown(value);\n }\n typeof onShownChange === \"function\" && onShownChange(value);\n };\n\n const showTimeout = useTimeout(() => setShown(true), showDelay);\n\n const hideTimeout = useTimeout(() => setShown(false), hideDelay);\n\n const handleTargetEnter = () => {\n hovered.current = true;\n hideTimeout.clear();\n showTimeout.set();\n };\n\n const handleTargetClick = () => {\n if (hovered.current && shown) {\n return;\n }\n setShown(!shown);\n };\n\n const handleTargetLeave = () => {\n hovered.current = false;\n showTimeout.clear();\n hideTimeout.set();\n };\n\n const handleContentKeyDownEscape = () => {\n setShown(false);\n };\n\n const handleOutsideClick = (e: MouseEvent) => {\n if (\n dropdownNode &&\n !childRef.current?.contains(e.target as Node) &&\n !dropdownNode.contains(e.target as Node)\n ) {\n setShown(false);\n }\n };\n\n useGlobalEventListener(document, \"click\", handleOutsideClick);\n const targetEnterListener = useEventListener(\"mouseenter\", handleTargetEnter);\n const targetClickEvent = useEventListener(\"click\", handleTargetClick);\n const targetLeaveListener = useEventListener(\"mouseleave\", handleTargetLeave);\n\n React.useEffect(() => {\n if (!childRef.current) {\n return;\n }\n\n targetClickEvent.add(childRef.current);\n\n if (hoverable) {\n targetEnterListener.add(childRef.current);\n targetLeaveListener.add(childRef.current);\n }\n }, [\n childRef,\n hoverable,\n targetClickEvent,\n targetEnterListener,\n targetLeaveListener,\n ]);\n\n return (\n <React.Fragment>\n {child}\n {shown && (\n <Popper\n {...restProps}\n className={classNamesString(styles[\"Popover\"], className)}\n targetRef={childRef}\n getRef={patchedPopperRef}\n offsetDistance={offsetDistance}\n style={\n // Reason: Typescript ругается на CSS Custom Properties в объекте\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n {\n ...styleProp,\n \"--vkui_internal--popover_safe_zone_padding\": `${offsetDistance}px`,\n } as React.CSSProperties\n }\n renderContent={({ className: wrapperClassName }) => (\n <FocusTrap\n className={wrapperClassName}\n onClose={handleContentKeyDownEscape}\n >\n {content}\n </FocusTrap>\n )}\n onMouseOver={hoverable ? hideTimeout.clear : undefined}\n onMouseOut={hoverable ? handleTargetLeave : undefined}\n />\n )}\n </React.Fragment>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Popover.js","names":["Popover","action","shownProp","shown","showDelay","hideDelay","offsetDistance","content","children","styleProp","style","className","getRef","onShownChange","restProps","useDOM","document","hoverable","hovered","React","useRef","useState","computedShown","setComputedShown","dropdownNode","setPopperNode","patchedPopperRef","useExternRef","usePatchChildrenRef","childRef","child","setShown","value","showTimeout","useTimeout","hideTimeout","handleTargetEnter","current","clear","set","handleTargetClick","handleTargetLeave","handleContentKeyDownEscape","handleOutsideClick","e","contains","target","useGlobalEventListener","targetEnterListener","useEventListener","targetClickEvent","targetLeaveListener","useEffect","add","remove","classNamesString","wrapperClassName","undefined"],"sources":["../../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { useDOM } from \"../../lib/dom\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { PopperCommonProps, Popper } from \"../Popper/Popper\";\nimport { FocusTrap } from \"../FocusTrap/FocusTrap\";\nimport { useTimeout } from \"../../hooks/useTimeout\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useEventListener } from \"../../hooks/useEventListener\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { usePatchChildrenRef } from \"../../hooks/usePatchChildrenRef\";\nimport styles from \"./Popover.module.css\";\n\nexport interface PopoverProps\n extends Omit<PopperCommonProps, \"arrow\" | \"arrowClassName\"> {\n /**\n * Механика вызова всплывающего окна.\n *\n * - `\"click\"` – показывается/скрывается только при нажатии.\n * - `\"hover\"` – помимо нажатия, будет показываться/скрывается при наведении/отведении мыши.\n *\n * > ⚠️`\"hover\"` на тач-устройствах будет работать как `\"click\"`, с одним лишь нюансом, что не будет закрываться\n * > при повторном нажатии на целевой элемент. Для закрытия необходимо нажать на область вне целевого элемента\n * > и выпадающего окна.\n */\n action?: \"click\" | \"hover\";\n /**\n * Если передан, то всплывающее окно будет показан/скрыт в зависимости от значения свойства.\n */\n shown?: boolean;\n /**\n * Количество миллисекунд, после которых произойдёт показ всплывающего окна.\n *\n * > Используется только для `action=\"hover\"` при наведении/отведении мыши.\n */\n showDelay?: number;\n /**\n * Количество миллисекунд, после которых произойдёт скрытие всплывающего окна.\n *\n * > Используется только для `action=\"hover\"` при наведении/отведении мыши.\n */\n hideDelay?: number;\n /**\n * Содержимое всплывающего окна.\n */\n content?: React.ReactNode;\n /**\n * Целевой элемент. Всплывающее окно появится возле него.\n *\n * > ⚠️ Если это пользовательский компонент, то он должен предоставлять параметры либо `getRootRef`, либо `ref` для получения ссылки на DOM-узел.\n */\n children?: React.ReactElement;\n /**\n * Вызывается при каждом изменении видимости всплывающего окна.\n */\n onShownChange?(shown: boolean): void;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Popover\n */\nexport const Popover = ({\n action = \"click\",\n shown: shownProp,\n showDelay = 150,\n hideDelay = 150,\n offsetDistance = 8,\n content,\n children,\n style: styleProp,\n className,\n getRef,\n onShownChange,\n ...restProps\n}: PopoverProps) => {\n const { document } = useDOM();\n\n const hoverable = action === \"hover\";\n const hovered = React.useRef(false);\n const [computedShown, setComputedShown] = React.useState(shownProp || false);\n const [dropdownNode, setPopperNode] = React.useState<HTMLElement | null>(\n null\n );\n\n const shown = typeof shownProp === \"boolean\" ? shownProp : computedShown;\n\n const patchedPopperRef = useExternRef<HTMLDivElement>(setPopperNode, getRef);\n\n const [childRef, child] = usePatchChildrenRef(children);\n\n const setShown = (value: boolean) => {\n if (typeof shownProp !== \"boolean\") {\n setComputedShown(value);\n }\n typeof onShownChange === \"function\" && onShownChange(value);\n };\n\n const showTimeout = useTimeout(() => setShown(true), showDelay);\n\n const hideTimeout = useTimeout(() => setShown(false), hideDelay);\n\n const handleTargetEnter = () => {\n hovered.current = true;\n hideTimeout.clear();\n showTimeout.set();\n };\n\n const handleTargetClick = () => {\n if (hovered.current && shown) {\n return;\n }\n setShown(!shown);\n };\n\n const handleTargetLeave = () => {\n hovered.current = false;\n showTimeout.clear();\n hideTimeout.set();\n };\n\n const handleContentKeyDownEscape = () => {\n setShown(false);\n };\n\n const handleOutsideClick = (e: MouseEvent) => {\n if (\n dropdownNode &&\n !childRef.current?.contains(e.target as Node) &&\n !dropdownNode.contains(e.target as Node)\n ) {\n setShown(false);\n }\n };\n\n useGlobalEventListener(document, \"click\", handleOutsideClick);\n const targetEnterListener = useEventListener(\"mouseenter\", handleTargetEnter);\n const targetClickEvent = useEventListener(\"click\", handleTargetClick);\n const targetLeaveListener = useEventListener(\"mouseleave\", handleTargetLeave);\n\n React.useEffect(() => {\n if (!childRef.current) {\n return;\n }\n\n targetClickEvent.add(childRef.current);\n }, [childRef, targetClickEvent]);\n\n React.useEffect(() => {\n if (!childRef.current) {\n return;\n }\n\n if (hoverable) {\n targetEnterListener.add(childRef.current);\n targetLeaveListener.add(childRef.current);\n }\n\n return () => {\n targetEnterListener.remove();\n targetLeaveListener.remove();\n };\n }, [childRef, hoverable, targetEnterListener, targetLeaveListener]);\n\n return (\n <React.Fragment>\n {child}\n {shown && (\n <Popper\n {...restProps}\n className={classNamesString(styles[\"Popover\"], className)}\n targetRef={childRef}\n getRef={patchedPopperRef}\n offsetDistance={offsetDistance}\n style={\n // Reason: Typescript ругается на CSS Custom Properties в объекте\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n {\n ...styleProp,\n \"--vkui_internal--popover_safe_zone_padding\": `${offsetDistance}px`,\n } as React.CSSProperties\n }\n renderContent={({ className: wrapperClassName }) => (\n <FocusTrap\n className={wrapperClassName}\n onClose={handleContentKeyDownEscape}\n >\n {content}\n </FocusTrap>\n )}\n onMouseOver={hoverable ? hideTimeout.clear : undefined}\n onMouseOut={hoverable ? handleTargetLeave : undefined}\n />\n )}\n </React.Fragment>\n );\n};\n"],"mappings":"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"}
|
|
@@ -8,16 +8,47 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.useSplitCol = exports.SplitColContext = exports.SplitCol = void 0;
|
|
9
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
10
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
11
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
13
|
var React = _interopRequireWildcard(require("react"));
|
|
14
14
|
var _classNames = require("../../lib/classNames");
|
|
15
15
|
var _getSizeXClassName = require("../../helpers/getSizeXClassName");
|
|
16
16
|
var _getViewWidthClassName = require("../../helpers/getViewWidthClassName");
|
|
17
|
-
var
|
|
17
|
+
var _useAdaptivity3 = require("../../hooks/useAdaptivity");
|
|
18
18
|
var _adaptivity = require("../../lib/adaptivity");
|
|
19
|
-
var
|
|
19
|
+
var _useObjectMemo = require("../../hooks/useObjectMemo");
|
|
20
|
+
var _useMediaQueries = require("../../hooks/useMediaQueries");
|
|
20
21
|
var _excluded = ["children", "width", "maxWidth", "minWidth", "spaced", "animate", "fixed", "style", "autoSpaced", "stretchedOnMobile", "className"];
|
|
22
|
+
function useTransitionAnimate(animateProp) {
|
|
23
|
+
var _useAdaptivity = (0, _useAdaptivity3.useAdaptivity)(),
|
|
24
|
+
viewWidth = _useAdaptivity.viewWidth;
|
|
25
|
+
var _React$useState = React.useState(Boolean(animateProp)),
|
|
26
|
+
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
|
27
|
+
animate = _React$useState2[0],
|
|
28
|
+
setAnimate = _React$useState2[1];
|
|
29
|
+
var mediaQueries = (0, _useMediaQueries.useMediaQueries)();
|
|
30
|
+
React.useEffect(function () {
|
|
31
|
+
if (animateProp !== undefined) {
|
|
32
|
+
setAnimate(animateProp);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (viewWidth !== undefined) {
|
|
36
|
+
setAnimate(viewWidth < _adaptivity.ViewWidth.TABLET);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// eslint-disable-next-line no-restricted-properties
|
|
41
|
+
var listener = function listener() {
|
|
42
|
+
return setAnimate(!mediaQueries.smallTabletPlus.matches);
|
|
43
|
+
};
|
|
44
|
+
listener();
|
|
45
|
+
mediaQueries.smallTabletPlus.addEventListener("change", listener);
|
|
46
|
+
return function () {
|
|
47
|
+
mediaQueries.smallTabletPlus.removeEventListener("change", listener);
|
|
48
|
+
};
|
|
49
|
+
}, [animateProp, viewWidth, mediaQueries]);
|
|
50
|
+
return animate;
|
|
51
|
+
}
|
|
21
52
|
var SplitColContext = /*#__PURE__*/React.createContext({
|
|
22
53
|
colRef: null,
|
|
23
54
|
animate: true
|
|
@@ -36,7 +67,7 @@ var SplitCol = function SplitCol(props) {
|
|
|
36
67
|
maxWidth = props.maxWidth,
|
|
37
68
|
minWidth = props.minWidth,
|
|
38
69
|
spaced = props.spaced,
|
|
39
|
-
|
|
70
|
+
animateProp = props.animate,
|
|
40
71
|
fixed = props.fixed,
|
|
41
72
|
style = props.style,
|
|
42
73
|
autoSpaced = props.autoSpaced,
|
|
@@ -44,28 +75,14 @@ var SplitCol = function SplitCol(props) {
|
|
|
44
75
|
className = props.className,
|
|
45
76
|
restProps = (0, _objectWithoutProperties2.default)(props, _excluded);
|
|
46
77
|
var baseRef = React.useRef(null);
|
|
47
|
-
var
|
|
48
|
-
viewWidth =
|
|
49
|
-
sizeX =
|
|
50
|
-
var
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
window = _useDOM.window;
|
|
56
|
-
React.useEffect(function () {
|
|
57
|
-
if (_animate === undefined) {
|
|
58
|
-
setAnimate(viewWidth !== undefined ? viewWidth < _adaptivity.ViewWidth.TABLET : window.innerWidth < _adaptivity.BREAKPOINTS.SMALL_TABLET);
|
|
59
|
-
} else {
|
|
60
|
-
setAnimate(_animate);
|
|
61
|
-
}
|
|
62
|
-
}, [_animate, viewWidth, window]);
|
|
63
|
-
var contextValue = React.useMemo(function () {
|
|
64
|
-
return {
|
|
65
|
-
colRef: baseRef,
|
|
66
|
-
animate: animate
|
|
67
|
-
};
|
|
68
|
-
}, [baseRef, animate]);
|
|
78
|
+
var _useAdaptivity2 = (0, _useAdaptivity3.useAdaptivity)(),
|
|
79
|
+
viewWidth = _useAdaptivity2.viewWidth,
|
|
80
|
+
sizeX = _useAdaptivity2.sizeX;
|
|
81
|
+
var animate = useTransitionAnimate(animateProp);
|
|
82
|
+
var contextValue = (0, _useObjectMemo.useObjectMemo)({
|
|
83
|
+
colRef: baseRef,
|
|
84
|
+
animate: animate
|
|
85
|
+
});
|
|
69
86
|
return /*#__PURE__*/React.createElement("div", (0, _extends2.default)({}, restProps, {
|
|
70
87
|
style: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, style), {}, {
|
|
71
88
|
width: width,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SplitCol.js","names":["
|
|
1
|
+
{"version":3,"file":"SplitCol.js","names":["useTransitionAnimate","animateProp","useAdaptivity","viewWidth","React","useState","Boolean","animate","setAnimate","mediaQueries","useMediaQueries","useEffect","undefined","ViewWidth","TABLET","listener","smallTabletPlus","matches","addEventListener","removeEventListener","SplitColContext","createContext","colRef","useSplitCol","useContext","SplitCol","props","children","width","maxWidth","minWidth","spaced","fixed","style","autoSpaced","stretchedOnMobile","className","restProps","baseRef","useRef","sizeX","contextValue","useObjectMemo","classNamesString","getSizeXClassName","getViewWidthClassName"],"sources":["../../../../src/components/SplitCol/SplitCol.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { getSizeXClassName } from \"../../helpers/getSizeXClassName\";\nimport { getViewWidthClassName } from \"../../helpers/getViewWidthClassName\";\nimport { useAdaptivity } from \"../../hooks/useAdaptivity\";\nimport { ViewWidth } from \"../../lib/adaptivity\";\nimport { useObjectMemo } from \"../../hooks/useObjectMemo\";\nimport { useMediaQueries } from \"../../hooks/useMediaQueries\";\nimport styles from \"./SplitCol.module.css\";\n\nfunction useTransitionAnimate(animateProp?: boolean) {\n const { viewWidth } = useAdaptivity();\n const [animate, setAnimate] = React.useState(Boolean(animateProp));\n const mediaQueries = useMediaQueries();\n\n React.useEffect(() => {\n if (animateProp !== undefined) {\n setAnimate(animateProp);\n return;\n }\n\n if (viewWidth !== undefined) {\n setAnimate(viewWidth < ViewWidth.TABLET);\n return;\n }\n\n // eslint-disable-next-line no-restricted-properties\n const listener = () => setAnimate(!mediaQueries.smallTabletPlus.matches);\n listener();\n\n mediaQueries.smallTabletPlus.addEventListener(\"change\", listener);\n return () => {\n mediaQueries.smallTabletPlus.removeEventListener(\"change\", listener);\n };\n }, [animateProp, viewWidth, mediaQueries]);\n\n return animate;\n}\n\nexport interface SplitColContextProps {\n colRef: React.RefObject<HTMLDivElement> | null;\n animate: boolean;\n}\n\nexport const SplitColContext = React.createContext<SplitColContextProps>({\n colRef: null,\n animate: true,\n});\n\nexport const useSplitCol = () => React.useContext(SplitColContext);\n\nexport interface SplitColProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: number | string;\n maxWidth?: number | string;\n minWidth?: number | string;\n /**\n * Если false, то переходы между Panel происходят без анимации\n */\n animate?: boolean;\n /**\n * Если true, то добавляются боковые отступы фиксированной величины\n */\n spaced?: boolean;\n /**\n * Если true, то добавляются боковые отступы фиксированной величины при ширине больше чем `smallTablet`\n */\n autoSpaced?: boolean;\n fixed?: boolean;\n /**\n * Если true, то ширина контейнера становится 100% при ширине меньше чем `tablet`\n */\n stretchedOnMobile?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/SplitCol\n */\nexport const SplitCol = (props: SplitColProps) => {\n const {\n children,\n width,\n maxWidth,\n minWidth,\n spaced,\n animate: animateProp,\n fixed,\n style,\n autoSpaced,\n stretchedOnMobile,\n className,\n ...restProps\n } = props;\n const baseRef = React.useRef<HTMLDivElement>(null);\n const { viewWidth, sizeX } = useAdaptivity();\n const animate = useTransitionAnimate(animateProp);\n\n const contextValue = useObjectMemo({\n colRef: baseRef,\n animate,\n });\n\n return (\n <div\n {...restProps}\n style={{\n ...style,\n width: width,\n maxWidth: maxWidth,\n minWidth: minWidth,\n }}\n ref={baseRef}\n className={classNamesString(\n styles[\"SplitCol\"],\n getSizeXClassName(styles[\"SplitCol\"], sizeX),\n getViewWidthClassName(styles[\"SplitCol\"], viewWidth),\n spaced && styles[\"SplitCol--spaced\"],\n spaced === undefined && styles[\"SplitCol--spaced-none\"],\n autoSpaced && styles[\"SplitCol--spaced-auto\"],\n fixed && styles[\"SplitCol--fixed\"],\n stretchedOnMobile && styles[\"SplitCol--stretched-on-mobile\"],\n className\n )}\n >\n <SplitColContext.Provider value={contextValue}>\n {fixed ? (\n <div className={styles[\"SplitCol__fixedInner\"]}>{children}</div>\n ) : (\n children\n )}\n </SplitColContext.Provider>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -62,6 +62,10 @@ export interface TooltipProps {
|
|
|
62
62
|
* По умолчанию компонент выберет наилучшее расположение сам. Но его можно задать извне с помощью этого свойства
|
|
63
63
|
*/
|
|
64
64
|
placement?: Placement;
|
|
65
|
+
/**
|
|
66
|
+
* Пользовательские css-классы, будут добавлены на root-элемент
|
|
67
|
+
*/
|
|
68
|
+
className?: string;
|
|
65
69
|
}
|
|
66
70
|
/**
|
|
67
71
|
* @see https://vkcom.github.io/VKUI/#/Tooltip
|