@fibery/ui-kit 1.36.2 → 1.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/package.json +8 -5
- package/src/action-badge.tsx +5 -4
- package/src/actions-menu/actions-menu-confirmation.tsx +1 -12
- package/src/actions-menu/actions-menu-item.tsx +19 -7
- package/src/actions-menu/actions-menu-props.tsx +4 -0
- package/src/actions-menu/actions-menu-sub-command-menu.tsx +7 -4
- package/src/actions-menu/actions-menu-sub-menu.tsx +9 -3
- package/src/actions-menu/actions-menu.tsx +24 -8
- package/src/actions-panel.tsx +12 -2
- package/src/antd/ant-modal.tsx +17 -2
- package/src/antd/input.tsx +4 -3
- package/src/app-icon-with-fallback.tsx +5 -8
- package/src/app-icon-wrapper.tsx +4 -4
- package/src/appIcons.json +20 -0
- package/src/axis-header.tsx +136 -76
- package/src/badge.tsx +14 -7
- package/src/beta-badge.tsx +12 -8
- package/src/box.tsx +1 -1
- package/src/breadcrumb.tsx +78 -0
- package/src/button/actions-button-compact.tsx +5 -2
- package/src/button/base-button.tsx +7 -4
- package/src/button/button-group.tsx +1 -1
- package/src/button/button.tsx +120 -2
- package/src/button/icon-button.tsx +13 -2
- package/src/button/select-button.tsx +27 -8
- package/src/card-container.tsx +36 -69
- package/src/card-hidden-link.tsx +52 -0
- package/src/collapsible-section.tsx +13 -3
- package/src/color-picker/index.js +65 -60
- package/src/color-picker/swatch.tsx +29 -14
- package/src/command-menu/index.tsx +5 -5
- package/src/context-menu/index.tsx +10 -1
- package/src/count-badge.tsx +57 -0
- package/src/date-picker/date-range-input.tsx +1 -1
- package/src/date-picker/date-range-picker.tsx +6 -3
- package/src/date-picker/fake-date-input.tsx +1 -1
- package/src/date-picker/relative-date-picker.tsx +7 -3
- package/src/date-picker/single-date-input.tsx +1 -1
- package/src/date-picker/single-date-picker.tsx +8 -5
- package/src/date-picker/styles.ts +32 -26
- package/src/date-picker/types.ts +3 -1
- package/src/date-picker/utils.ts +9 -2
- package/src/day-select/day-select.tsx +21 -75
- package/src/day-select/iso-week-day-select.tsx +1 -1
- package/src/day-select/mount-day-select.tsx +2 -2
- package/src/day-select/week-day-select.tsx +1 -5
- package/src/design-system.ts +91 -51
- package/src/dropdown-menu/index.tsx +8 -1
- package/src/emoji-picker/app-icon-picker.tsx +6 -4
- package/src/emoji-picker/emoji-picker-content-with-color.tsx +3 -9
- package/src/emoji-picker/emoji-picker-preview-footer.tsx +1 -1
- package/src/emoji-picker/emoji-picker.tsx +3 -0
- package/src/emoji-picker/emoji.tsx +2 -1
- package/src/emoji-picker/icon-emoji-picker.tsx +83 -68
- package/src/emoji-picker/primitives/footer.tsx +0 -1
- package/src/emoji-picker/primitives/header.tsx +1 -0
- package/src/emoji-picker/primitives/search.tsx +12 -13
- package/src/emoji-picker/primitives/skin-tone.tsx +1 -0
- package/src/emoji-picker/use-responsive-emoji-size.ts +11 -0
- package/src/emoji-picker/utils/emoji-set.ts +2 -1
- package/src/empty-state/empty-state.tsx +6 -0
- package/src/error-alert/error-alert.tsx +19 -7
- package/src/field-app-icon.tsx +29 -0
- package/src/field-container.tsx +4 -2
- package/src/field-icon.tsx +29 -0
- package/src/field-type-icon.tsx +82 -0
- package/src/file-item.tsx +164 -47
- package/src/guide-link.tsx +4 -3
- package/src/hint.tsx +10 -1
- package/src/html-styles.ts +23 -13
- package/src/icons/ast/ActivityFilled.ts +8 -0
- package/src/icons/ast/AiAssistantFilled.ts +8 -0
- package/src/icons/ast/AiFiberyBuild.ts +8 -0
- package/src/icons/ast/Anthropic.ts +1 -1
- package/src/icons/ast/Apple.ts +8 -0
- package/src/icons/ast/ArrowBottom.ts +1 -1
- package/src/icons/ast/ArrowForward.ts +1 -1
- package/src/icons/ast/ArrowLeft.ts +1 -1
- package/src/icons/ast/ArrowRight.ts +1 -1
- package/src/icons/ast/ArrowTop.ts +1 -1
- package/src/icons/ast/CollapseAllHorizontal.ts +8 -0
- package/src/icons/ast/Crosshair.ts +8 -0
- package/src/icons/ast/DateRange.ts +1 -1
- package/src/icons/ast/Document.ts +8 -0
- package/src/icons/ast/EntityCreate.ts +8 -0
- package/src/icons/ast/EntityCreateFilled.ts +8 -0
- package/src/icons/ast/ExpandAll.ts +8 -0
- package/src/icons/ast/ExpandAllHorizontal.ts +8 -0
- package/src/icons/ast/FiberyDesktopApp.ts +8 -0
- package/src/icons/ast/FileDownload.ts +8 -0
- package/src/icons/ast/GlobeUnpublish.ts +8 -0
- package/src/icons/ast/GraduationCapFilled.ts +8 -0
- package/src/icons/ast/Home.ts +1 -1
- package/src/icons/ast/HomeFilled.ts +8 -0
- package/src/icons/ast/ImportFilled.ts +8 -0
- package/src/icons/ast/IntegrationsFilled.ts +8 -0
- package/src/icons/ast/KeyboardHideDown.ts +8 -0
- package/src/icons/ast/LayoutMultiple.ts +8 -0
- package/src/icons/ast/LocationEdit.ts +8 -0
- package/src/icons/ast/MessagePlus.ts +8 -0
- package/src/icons/ast/OpenAi.ts +1 -1
- package/src/icons/ast/RicheditorHistoryRedo.ts +1 -1
- package/src/icons/ast/RicheditorHistoryUndo.ts +1 -1
- package/src/icons/ast/RicheditorMarkHighlight.ts +8 -0
- package/src/icons/ast/RicheditorMarkStrike.ts +1 -1
- package/src/icons/ast/RicheditorMarkUnderline.ts +1 -1
- package/src/icons/ast/SearchFilled.ts +8 -0
- package/src/icons/ast/SettingsFilled.ts +8 -0
- package/src/icons/ast/SlideMenuFilled.ts +8 -0
- package/src/icons/ast/SpaceApp.ts +8 -0
- package/src/icons/ast/SpaceGenerate.ts +8 -0
- package/src/icons/ast/SpaceScratch.ts +8 -0
- package/src/icons/ast/SpaceTemplate.ts +8 -0
- package/src/icons/ast/TableLayout.ts +8 -0
- package/src/icons/ast/TemplatesFilled.ts +8 -0
- package/src/icons/ast/ThumbsDown.ts +8 -0
- package/src/icons/ast/ThumbsUp.ts +8 -0
- package/src/icons/ast/TypeDate.ts +1 -1
- package/src/icons/ast/ViewDashboard.ts +8 -0
- package/src/icons/ast/WarningTriangleFilled.ts +8 -0
- package/src/icons/ast/Windows.ts +8 -0
- package/src/icons/ast/index.tsx +37 -0
- package/src/icons/react/ActivityFilled.tsx +13 -0
- package/src/icons/react/AiAssistantFilled.tsx +13 -0
- package/src/icons/react/AiFiberyBuild.tsx +13 -0
- package/src/icons/react/Apple.tsx +13 -0
- package/src/icons/react/CollapseAllHorizontal.tsx +13 -0
- package/src/icons/react/Crosshair.tsx +13 -0
- package/src/icons/react/Document.tsx +13 -0
- package/src/icons/react/EntityCreate.tsx +13 -0
- package/src/icons/react/EntityCreateFilled.tsx +13 -0
- package/src/icons/react/ExpandAll.tsx +13 -0
- package/src/icons/react/ExpandAllHorizontal.tsx +13 -0
- package/src/icons/react/FiberyDesktopApp.tsx +13 -0
- package/src/icons/react/FileDownload.tsx +13 -0
- package/src/icons/react/GlobeUnpublish.tsx +13 -0
- package/src/icons/react/GraduationCapFilled.tsx +13 -0
- package/src/icons/react/HomeFilled.tsx +13 -0
- package/src/icons/react/ImportFilled.tsx +13 -0
- package/src/icons/react/IntegrationsFilled.tsx +13 -0
- package/src/icons/react/KeyboardHideDown.tsx +13 -0
- package/src/icons/react/LayoutMultiple.tsx +13 -0
- package/src/icons/react/LocationEdit.tsx +13 -0
- package/src/icons/react/MessagePlus.tsx +13 -0
- package/src/icons/react/RicheditorMarkHighlight.tsx +13 -0
- package/src/icons/react/SearchFilled.tsx +13 -0
- package/src/icons/react/SettingsFilled.tsx +13 -0
- package/src/icons/react/SlideMenuFilled.tsx +13 -0
- package/src/icons/react/SpaceApp.tsx +13 -0
- package/src/icons/react/SpaceGenerate.tsx +13 -0
- package/src/icons/react/SpaceScratch.tsx +13 -0
- package/src/icons/react/SpaceTemplate.tsx +13 -0
- package/src/icons/react/TableLayout.tsx +13 -0
- package/src/icons/react/TemplatesFilled.tsx +13 -0
- package/src/icons/react/ThumbsDown.tsx +13 -0
- package/src/icons/react/ThumbsUp.tsx +13 -0
- package/src/icons/react/ViewDashboard.tsx +13 -0
- package/src/icons/react/WarningTriangleFilled.tsx +13 -0
- package/src/icons/react/Windows.tsx +13 -0
- package/src/icons/react/index.tsx +37 -0
- package/src/icons/svg/activity-filled.svg +4 -0
- package/src/icons/svg/ai-assistant-filled.svg +3 -0
- package/src/icons/svg/ai-fibery-build.svg +24 -0
- package/src/icons/svg/anthropic.svg +2 -14
- package/src/icons/svg/apple.svg +4 -0
- package/src/icons/svg/arrow-bottom.svg +1 -1
- package/src/icons/svg/arrow-forward.svg +1 -1
- package/src/icons/svg/arrow-left.svg +1 -1
- package/src/icons/svg/arrow-right.svg +1 -1
- package/src/icons/svg/arrow-top.svg +1 -1
- package/src/icons/svg/collapse-all-horizontal.svg +3 -0
- package/src/icons/svg/crosshair.svg +4 -0
- package/src/icons/svg/date-range.svg +3 -3
- package/src/icons/svg/document.svg +4 -0
- package/src/icons/svg/entity-create-filled.svg +4 -0
- package/src/icons/svg/entity-create.svg +3 -0
- package/src/icons/svg/expand-all-horizontal.svg +3 -0
- package/src/icons/svg/expand-all.svg +3 -0
- package/src/icons/svg/fibery-desktop-app.svg +101 -0
- package/src/icons/svg/file-download.svg +4 -0
- package/src/icons/svg/globe-unpublish.svg +4 -0
- package/src/icons/svg/go-to.svg +1 -3
- package/src/icons/svg/graduation-cap-filled.svg +4 -0
- package/src/icons/svg/home-filled.svg +3 -0
- package/src/icons/svg/home.svg +4 -2
- package/src/icons/svg/import-filled.svg +4 -0
- package/src/icons/svg/integrations-filled.svg +4 -0
- package/src/icons/svg/keyboard-hide-down.svg +1 -0
- package/src/icons/svg/layout-multiple.svg +3 -0
- package/src/icons/svg/location-edit.svg +13 -0
- package/src/icons/svg/message-plus.svg +4 -0
- package/src/icons/svg/open-ai.svg +2 -7
- package/src/icons/svg/open-as-page.svg +2 -3
- package/src/icons/svg/richeditor/history/redo.svg +3 -2
- package/src/icons/svg/richeditor/history/undo.svg +3 -2
- package/src/icons/svg/richeditor/mark/code.svg +4 -5
- package/src/icons/svg/richeditor/mark/em.svg +3 -2
- package/src/icons/svg/richeditor/mark/highlight.svg +3 -0
- package/src/icons/svg/richeditor/mark/strike.svg +3 -2
- package/src/icons/svg/richeditor/mark/strong.svg +3 -2
- package/src/icons/svg/richeditor/mark/underline.svg +4 -2
- package/src/icons/svg/search-filled.svg +3 -0
- package/src/icons/svg/settings-filled.svg +3 -0
- package/src/icons/svg/slide-menu-filled.svg +1 -0
- package/src/icons/svg/space-app.svg +3 -0
- package/src/icons/svg/space-generate.svg +3 -0
- package/src/icons/svg/space-scratch.svg +3 -0
- package/src/icons/svg/space-template.svg +3 -0
- package/src/icons/svg/table-layout.svg +3 -0
- package/src/icons/svg/templates-filled.svg +6 -0
- package/src/icons/svg/thumbs-down.svg +3 -0
- package/src/icons/svg/thumbs-up.svg +3 -0
- package/src/icons/svg/type/date.svg +3 -2
- package/src/icons/svg/view-dashboard.svg +5 -0
- package/src/icons/svg/warning-triangle-filled.svg +3 -0
- package/src/icons/svg/windows.svg +15 -0
- package/src/images-gallery/images-gallery.tsx +254 -0
- package/src/images-gallery/zoom.tsx +112 -0
- package/src/integration-compact-info-button.tsx +3 -1
- package/src/is-in-popup.ts +1 -1
- package/src/layout-styles.ts +43 -0
- package/src/lists/actions-menu-row-surface.tsx +3 -1
- package/src/lists/list-row-surface.tsx +9 -2
- package/src/loaders.tsx +6 -6
- package/src/logo.tsx +16 -9
- package/src/mobile-keyboard-aware-popup.tsx +87 -0
- package/src/mobile-styles.ts +10 -0
- package/src/modal-menu/contexts/modal-menu-context.tsx +22 -0
- package/src/modal-menu/contexts/modal-submenu-context.tsx +16 -0
- package/src/modal-menu/index.tsx +14 -0
- package/src/modal-menu/modal-menu-content.tsx +68 -0
- package/src/modal-menu/modal-menu-group.tsx +10 -0
- package/src/modal-menu/modal-menu-item.tsx +37 -0
- package/src/modal-menu/modal-menu-label.tsx +24 -0
- package/src/modal-menu/modal-menu-root.tsx +57 -0
- package/src/modal-menu/modal-menu-separator.tsx +14 -0
- package/src/modal-menu/modal-menu-trigger.tsx +37 -0
- package/src/modal-menu/modal-submenu-content.tsx +49 -0
- package/src/modal-menu/modal-submenu-trigger.tsx +34 -0
- package/src/modal-menu/modal-submenu.tsx +17 -0
- package/src/new-badge.tsx +4 -7
- package/src/number-input/text-area-auto-sized.tsx +47 -0
- package/src/number-input/text-input-auto-sized.tsx +49 -0
- package/src/online-users.tsx +3 -3
- package/src/palette.ts +50 -50
- package/src/popover/index.tsx +687 -0
- package/src/popover/mobile-popup-context.tsx +29 -0
- package/src/{popup → popover}/modifiers.tsx +0 -7
- package/src/{popup → popover}/popup-modifiers-context.ts +3 -3
- package/src/reactions/reaction-button.tsx +30 -45
- package/src/reactions/reaction-picker.tsx +39 -45
- package/src/rich-text-embed-error.tsx +2 -2
- package/src/select/{custom-select-partials → components}/menu.tsx +13 -7
- package/src/select/{custom-select-partials → components}/no-option-message.tsx +0 -1
- package/src/select/constants.ts +1 -0
- package/src/select/index.tsx +143 -148
- package/src/select/select-in-popover.tsx +119 -138
- package/src/select/styles.ts +60 -24
- package/src/shortcut-badge.tsx +1 -0
- package/src/tab-nav/tab-nav.tsx +47 -28
- package/src/theme-provider.tsx +9 -1
- package/src/toast/primitives.tsx +8 -1
- package/src/toggle-button/round-toggle-button.tsx +23 -0
- package/src/toggle-button/toggle-button-group.tsx +34 -0
- package/src/toggle-button/toggle-button.tsx +164 -0
- package/src/toggle.tsx +3 -3
- package/src/tooltip-if-overflown.tsx +9 -3
- package/src/tooltip.tsx +2 -2
- package/src/unit/index.tsx +9 -1
- package/src/unit/loading-unit-value.tsx +1 -0
- package/src/unit/maybe-unit-value.tsx +3 -3
- package/src/unit/primitive.tsx +58 -42
- package/src/unit/styles.ts +10 -14
- package/src/unit/types.ts +4 -2
- package/src/unit/unit-button-group.tsx +6 -11
- package/src/unit/unit-content.tsx +13 -5
- package/src/unit/unit-with-title.tsx +6 -1
- package/src/unit/unit-with-tooltip.tsx +24 -9
- package/src/use-is-phone.tsx +37 -0
- package/src/use-is-support-hover.ts +1 -1
- package/src/use-on-screen-keyboard-data.tsx +66 -0
- package/src/workflow-progress-icon.tsx +17 -23
- package/src/number-input/text-area-with-autosize.tsx +0 -91
- package/src/number-input/text-inline-input-with-autosize.tsx +0 -60
- package/src/popup/index.tsx +0 -382
- package/src/use-is-phone.ts +0 -5
- /package/src/{popup → popover}/popup-stack-context.tsx +0 -0
- /package/src/{popup → popover}/reference.ts +0 -0
- /package/src/{popup → popover}/styles.ts +0 -0
- /package/src/{popup → popover}/use-click-outside.ts +0 -0
- /package/src/select/{custom-select-partials → components}/clear-indicator.tsx +0 -0
- /package/src/select/{custom-select-partials → components}/drop-down-indicator.tsx +0 -0
- /package/src/select/{custom-select-partials → components}/group-heading.tsx +0 -0
- /package/src/select/{custom-select-partials → components}/menu-list-virtualized.tsx +0 -0
- /package/src/select/{custom-select-partials → components}/option.tsx +0 -0
package/src/select/index.tsx
CHANGED
|
@@ -1,48 +1,51 @@
|
|
|
1
|
+
/* eslint-disable no-use-before-define */
|
|
1
2
|
import {useComposedRefs} from "@fibery/react/src/use-composed-refs";
|
|
2
|
-
import {forwardRef, RefObject, useCallback, useMemo, useRef, useState} from "react";
|
|
3
|
+
import {ForwardedRef, forwardRef, RefObject, useCallback, useMemo, useRef, useState} from "react";
|
|
3
4
|
import BaseSelect, {
|
|
4
5
|
ActionMeta,
|
|
5
|
-
|
|
6
|
+
components as reactSelectComponents,
|
|
6
7
|
createFilter,
|
|
7
8
|
MenuListProps,
|
|
8
9
|
MenuProps,
|
|
10
|
+
ControlProps,
|
|
9
11
|
mergeStyles,
|
|
10
12
|
MultiValue,
|
|
11
13
|
MultiValueProps,
|
|
12
14
|
OnChangeValue,
|
|
13
15
|
OptionProps,
|
|
14
16
|
OptionsOrGroups,
|
|
17
|
+
Props as BaseSelectProps,
|
|
15
18
|
PropsValue,
|
|
16
|
-
components as reactSelectComponents,
|
|
17
19
|
SelectInstance,
|
|
18
20
|
SingleValue,
|
|
19
21
|
SingleValueProps,
|
|
20
22
|
StylesConfig,
|
|
21
23
|
} from "react-select";
|
|
22
24
|
import BaseCreatableSelect, {CreatableProps} from "react-select/creatable";
|
|
23
|
-
import {ClearIndicator, NoClearIndicator} from "./
|
|
24
|
-
import {DropdownIndicator} from "./
|
|
25
|
-
import {GroupHeading} from "./
|
|
26
|
-
import {Menu} from "./
|
|
27
|
-
import {MenuListVirtualized} from "./
|
|
28
|
-
import {NoOptionsMessage} from "./
|
|
29
|
-
import {Option, OptionSlow} from "./
|
|
25
|
+
import {ClearIndicator, NoClearIndicator} from "./components/clear-indicator";
|
|
26
|
+
import {DropdownIndicator} from "./components/drop-down-indicator";
|
|
27
|
+
import {GroupHeading} from "./components/group-heading";
|
|
28
|
+
import {Menu} from "./components/menu";
|
|
29
|
+
import {MenuListVirtualized} from "./components/menu-list-virtualized";
|
|
30
|
+
import {NoOptionsMessage} from "./components/no-option-message";
|
|
31
|
+
import {Option, OptionSlow} from "./components/option";
|
|
30
32
|
import {useSelectControlSettings} from "./select-control-settings-context";
|
|
31
33
|
import {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
makeComponentsStyles,
|
|
35
|
+
makeNonVirtualizedStyles,
|
|
36
|
+
makeSingleLineStyles,
|
|
37
|
+
makeVirtualizedStyles,
|
|
38
|
+
makeZIndexStyles,
|
|
37
39
|
} from "./styles";
|
|
38
40
|
import {countOptions, GroupBase, ReactSelectRefContext} from "./util";
|
|
41
|
+
import _ from "lodash";
|
|
39
42
|
|
|
40
|
-
export {reactSelectComponents as components, MenuListVirtualized};
|
|
41
43
|
export type {
|
|
42
44
|
ActionMeta,
|
|
43
45
|
GroupBase,
|
|
44
46
|
MenuListProps,
|
|
45
47
|
MenuProps,
|
|
48
|
+
ControlProps,
|
|
46
49
|
MultiValue,
|
|
47
50
|
MultiValueProps,
|
|
48
51
|
OnChangeValue,
|
|
@@ -52,89 +55,128 @@ export type {
|
|
|
52
55
|
SingleValue,
|
|
53
56
|
SingleValueProps,
|
|
54
57
|
StylesConfig,
|
|
58
|
+
SelectInstance,
|
|
59
|
+
BaseSelectProps,
|
|
55
60
|
};
|
|
56
61
|
|
|
57
|
-
|
|
62
|
+
export {reactSelectComponents as components, MenuListVirtualized, createFilter};
|
|
63
|
+
|
|
58
64
|
function GroupVirtualized() {
|
|
59
65
|
return null;
|
|
60
66
|
}
|
|
61
|
-
export function combineStyles<
|
|
62
|
-
Option,
|
|
63
|
-
IsMulti extends boolean = boolean,
|
|
64
|
-
Group extends GroupBase<Option> = GroupBase<Option>
|
|
65
|
-
>(stylesConfigs: StylesConfig<Option, IsMulti, Group>[]) {
|
|
66
|
-
return stylesConfigs.reduce(mergeStyles, {});
|
|
67
|
-
}
|
|
68
67
|
|
|
69
|
-
export {
|
|
68
|
+
export function combineStyles<T, U extends boolean, V extends GroupBase<T>>(styles: StylesConfig<T, U, V>[]) {
|
|
69
|
+
return styles.reduce(mergeStyles, {});
|
|
70
|
+
}
|
|
70
71
|
|
|
71
|
-
export type SelectProps<
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
> = Omit<Omit<Omit<BaseSelectProps<Option, IsMulti, Group>, "isMulti">, "backspaceRemovesValue">, "isDisabled"> & {
|
|
72
|
+
export type SelectProps<T = unknown, U extends boolean = boolean, V extends GroupBase<T> = GroupBase<T>> = Omit<
|
|
73
|
+
Omit<Omit<BaseSelectProps<T, U, V>, "isMulti">, "backspaceRemovesValue">,
|
|
74
|
+
"isDisabled"
|
|
75
|
+
> & {
|
|
76
76
|
virtualized?: boolean;
|
|
77
|
-
isCollectionMode?:
|
|
77
|
+
isCollectionMode?: U;
|
|
78
78
|
disabled?: boolean;
|
|
79
79
|
forbidValuesClearInCollnMode?: boolean;
|
|
80
80
|
};
|
|
81
81
|
|
|
82
|
-
export function SingleRowSelect<
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return (
|
|
88
|
-
<Select<Option, IsMulti, Group>
|
|
89
|
-
{...rest}
|
|
90
|
-
styles={combineStyles<Option, IsMulti, Group>([
|
|
91
|
-
singleLineComponentsStyle as unknown as StylesConfig<Option, IsMulti, Group>,
|
|
92
|
-
styles,
|
|
93
|
-
])}
|
|
94
|
-
/>
|
|
95
|
-
);
|
|
82
|
+
export function SingleRowSelect<T = unknown, U extends boolean = boolean, V extends GroupBase<T> = GroupBase<T>>({
|
|
83
|
+
styles = {},
|
|
84
|
+
...rest
|
|
85
|
+
}: SelectProps<T, U, V>) {
|
|
86
|
+
return <Select<T, U, V> {...rest} styles={combineStyles([makeSingleLineStyles(), styles])} />;
|
|
96
87
|
}
|
|
97
88
|
|
|
98
89
|
const FAST_OPTION_USAGE_THRESHOLD = 200;
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
90
|
+
|
|
91
|
+
function useSelectComponents<T, U extends boolean, V extends GroupBase<T>>({
|
|
92
|
+
components,
|
|
93
|
+
optionsCount,
|
|
94
|
+
virtualized,
|
|
95
|
+
isCollectionMode,
|
|
96
|
+
forbidValuesClearInCollnMode,
|
|
97
|
+
}: {
|
|
98
|
+
components: SelectProps<T, U, V>["components"];
|
|
99
|
+
optionsCount: number;
|
|
100
|
+
virtualized: boolean;
|
|
101
|
+
isCollectionMode?: U;
|
|
102
|
+
forbidValuesClearInCollnMode?: boolean;
|
|
103
|
+
}) {
|
|
104
|
+
const shouldUseFastOption = optionsCount > FAST_OPTION_USAGE_THRESHOLD;
|
|
105
|
+
const shouldHideMultiValueRemove = isCollectionMode && forbidValuesClearInCollnMode;
|
|
106
|
+
|
|
107
|
+
return {
|
|
108
|
+
Menu,
|
|
109
|
+
DropdownIndicator,
|
|
110
|
+
ClearIndicator,
|
|
111
|
+
MultiValueRemove: shouldHideMultiValueRemove ? NoClearIndicator : ClearIndicator,
|
|
112
|
+
NoOptionsMessage,
|
|
113
|
+
GroupHeading,
|
|
114
|
+
Option: shouldUseFastOption ? Option : OptionSlow,
|
|
115
|
+
...components,
|
|
116
|
+
Group: virtualized ? GroupVirtualized : components?.Group ? components.Group : reactSelectComponents.Group,
|
|
117
|
+
MenuList: virtualized
|
|
118
|
+
? MenuListVirtualized
|
|
119
|
+
: components?.MenuList
|
|
120
|
+
? components.MenuList
|
|
121
|
+
: reactSelectComponents.MenuList,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function useSelectStyles<T, U extends boolean, V extends GroupBase<T>>({
|
|
126
|
+
virtualized,
|
|
127
|
+
zIndex,
|
|
128
|
+
styles,
|
|
129
|
+
}: {
|
|
130
|
+
virtualized: boolean;
|
|
131
|
+
zIndex?: number;
|
|
132
|
+
styles?: SelectProps<T, U, V>["styles"];
|
|
133
|
+
}) {
|
|
134
|
+
return useMemo(() => {
|
|
135
|
+
return combineStyles<T, U, V>(
|
|
136
|
+
_.compact([
|
|
137
|
+
makeComponentsStyles<T, U, V>(),
|
|
138
|
+
virtualized ? makeVirtualizedStyles<T, U, V>() : makeNonVirtualizedStyles<T, U, V>(),
|
|
139
|
+
zIndex ? makeZIndexStyles<T, U, V>(zIndex) : null,
|
|
140
|
+
styles,
|
|
141
|
+
])
|
|
142
|
+
);
|
|
143
|
+
}, [styles, virtualized, zIndex]);
|
|
144
|
+
}
|
|
145
|
+
|
|
104
146
|
export const Select = forwardRef(function Select<
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
147
|
+
T = unknown,
|
|
148
|
+
U extends boolean = boolean,
|
|
149
|
+
V extends GroupBase<T> = GroupBase<T>
|
|
108
150
|
>(
|
|
109
151
|
{
|
|
110
152
|
components,
|
|
111
153
|
isCollectionMode,
|
|
112
154
|
menuPortalTarget,
|
|
113
155
|
onKeyDown,
|
|
114
|
-
styles
|
|
156
|
+
styles,
|
|
115
157
|
virtualized = true,
|
|
116
158
|
onMenuOpen,
|
|
117
159
|
onMenuClose,
|
|
118
160
|
onChange,
|
|
119
161
|
forbidValuesClearInCollnMode,
|
|
120
162
|
...rest
|
|
121
|
-
}: SelectProps<
|
|
122
|
-
|
|
123
|
-
forwardedRef: any
|
|
163
|
+
}: SelectProps<T, U, V>,
|
|
164
|
+
forwardedRef: ForwardedRef<SelectInstance<T, U, V>>
|
|
124
165
|
) {
|
|
125
166
|
const {getPopupContainerElement, zIndex} = useSelectControlSettings();
|
|
126
167
|
const [menuOpenState, setMenuOpenState] = useState(rest.defaultMenuIsOpen);
|
|
127
|
-
const optionsCount = useMemo(() =>
|
|
128
|
-
|
|
129
|
-
}, [rest.options]);
|
|
168
|
+
const optionsCount = useMemo(() => countOptions(rest.options), [rest.options]);
|
|
169
|
+
|
|
130
170
|
const onMenuOpenWrapped = useCallback(() => {
|
|
131
171
|
setMenuOpenState(true);
|
|
132
172
|
onMenuOpen && onMenuOpen();
|
|
133
173
|
}, [onMenuOpen]);
|
|
174
|
+
|
|
134
175
|
const onMenuCloseWrapped = useCallback(() => {
|
|
135
176
|
setMenuOpenState(false);
|
|
136
177
|
onMenuClose && onMenuClose();
|
|
137
178
|
}, [onMenuClose]);
|
|
179
|
+
|
|
138
180
|
const handleKeyDown: React.KeyboardEventHandler<HTMLInputElement> = useCallback(
|
|
139
181
|
(e) => {
|
|
140
182
|
switch (e.key) {
|
|
@@ -168,21 +210,24 @@ export const Select = forwardRef(function Select<
|
|
|
168
210
|
},
|
|
169
211
|
[onKeyDown, menuOpenState]
|
|
170
212
|
);
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
213
|
+
|
|
214
|
+
const selectRef = useRef<SelectInstance<T, U, V> | null>(null);
|
|
215
|
+
const composedRef = useComposedRefs(forwardedRef, selectRef);
|
|
216
|
+
|
|
217
|
+
const selectComponents = useSelectComponents({
|
|
218
|
+
components,
|
|
219
|
+
optionsCount,
|
|
220
|
+
virtualized,
|
|
221
|
+
isCollectionMode,
|
|
222
|
+
forbidValuesClearInCollnMode,
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
const combinedStyles = useSelectStyles({virtualized, zIndex, styles});
|
|
181
226
|
|
|
182
227
|
return (
|
|
183
|
-
<ReactSelectRefContext.Provider value={
|
|
184
|
-
<BaseSelect<
|
|
185
|
-
ref={
|
|
228
|
+
<ReactSelectRefContext.Provider value={selectRef as RefObject<SelectInstance>}>
|
|
229
|
+
<BaseSelect<T, U, V>
|
|
230
|
+
ref={composedRef}
|
|
186
231
|
// There are places, where it is useful to override menuPortalTarget globally for all selects.
|
|
187
232
|
// When you are already in some popup. e.g. user input in buttons, relation filter popover.
|
|
188
233
|
menuPortalTarget={getPopupContainerElement ? getPopupContainerElement() : menuPortalTarget}
|
|
@@ -191,29 +236,7 @@ export const Select = forwardRef(function Select<
|
|
|
191
236
|
isMulti={isCollectionMode}
|
|
192
237
|
backspaceRemovesValue={isCollectionMode && !forbidValuesClearInCollnMode}
|
|
193
238
|
tabSelectsValue={false}
|
|
194
|
-
components={
|
|
195
|
-
Menu: Menu,
|
|
196
|
-
DropdownIndicator,
|
|
197
|
-
ClearIndicator,
|
|
198
|
-
/*
|
|
199
|
-
Fast Options break option focus on hover behaviour but help with slow React Select performance with large options list.
|
|
200
|
-
This isolates bug for big lists only
|
|
201
|
-
Read Option definition for more info
|
|
202
|
-
bug here: https://the.fibery.io/SoftDev/bug/Select-option-behaviour-is-incorrect-9413
|
|
203
|
-
*/
|
|
204
|
-
MultiValueRemove: isCollectionMode && forbidValuesClearInCollnMode ? NoClearIndicator : ClearIndicator,
|
|
205
|
-
NoOptionsMessage,
|
|
206
|
-
GroupHeading,
|
|
207
|
-
Option: optionsCount > FAST_OPTION_USAGE_THRESHOLD ? Option : OptionSlow,
|
|
208
|
-
...components,
|
|
209
|
-
//Using dummy for virtualized lists. Virtualized lists render Groups differently (look MenuListVirtualized).
|
|
210
|
-
Group: virtualized ? GroupVirtualized : components?.Group ? components.Group : reactSelectComponents.Group,
|
|
211
|
-
MenuList: virtualized
|
|
212
|
-
? MenuListVirtualized
|
|
213
|
-
: components?.MenuList
|
|
214
|
-
? components.MenuList
|
|
215
|
-
: reactSelectComponents.MenuList,
|
|
216
|
-
}}
|
|
239
|
+
components={selectComponents}
|
|
217
240
|
{...rest}
|
|
218
241
|
onKeyDown={handleKeyDown}
|
|
219
242
|
onMenuOpen={onMenuOpenWrapped}
|
|
@@ -223,49 +246,34 @@ export const Select = forwardRef(function Select<
|
|
|
223
246
|
/>
|
|
224
247
|
</ReactSelectRefContext.Provider>
|
|
225
248
|
);
|
|
226
|
-
// eslint-disable-next-line no-use-before-define
|
|
227
249
|
}) as <Option = unknown, IsMulti extends boolean = boolean, Group extends GroupBase<Option> = GroupBase<Option>>(
|
|
228
|
-
// eslint-disable-next-line
|
|
250
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
229
251
|
props: SelectProps<Option, IsMulti, Group> & {ref?: any}
|
|
230
252
|
) => JSX.Element;
|
|
231
253
|
|
|
232
|
-
|
|
233
|
-
Option = unknown,
|
|
234
|
-
IsMulti extends boolean = boolean,
|
|
235
|
-
// eslint-disable-next-line no-use-before-define
|
|
236
|
-
Group extends GroupBase<Option> = GroupBase<Option>
|
|
237
|
-
>(
|
|
238
|
-
// eslint-disable-next-line no-use-before-define
|
|
239
|
-
props: CreatableProps<Option, IsMulti, Group> & SelectProps<Option, IsMulti, Group>
|
|
240
|
-
) => ReturnType<typeof CreatableSelectInner>;
|
|
241
|
-
|
|
242
|
-
export function CreatableSelectInner<
|
|
243
|
-
Option = unknown,
|
|
244
|
-
IsMulti extends boolean = boolean,
|
|
245
|
-
Group extends GroupBase<Option> = GroupBase<Option>
|
|
246
|
-
>(
|
|
254
|
+
function CreatableSelectInner<T = unknown, U extends boolean = boolean, V extends GroupBase<T> = GroupBase<T>>(
|
|
247
255
|
{
|
|
248
256
|
components,
|
|
249
257
|
isCollectionMode,
|
|
250
258
|
menuPortalTarget,
|
|
251
259
|
styles = {},
|
|
252
260
|
virtualized = true,
|
|
261
|
+
forbidValuesClearInCollnMode,
|
|
253
262
|
...rest
|
|
254
|
-
}: CreatableProps<
|
|
255
|
-
|
|
256
|
-
ref: any
|
|
263
|
+
}: CreatableProps<T, U, V> & SelectProps<T, U, V>,
|
|
264
|
+
ref: ForwardedRef<SelectInstance<T, U, V>>
|
|
257
265
|
) {
|
|
258
|
-
const optionsCount = useMemo(() =>
|
|
259
|
-
|
|
260
|
-
|
|
266
|
+
const optionsCount = useMemo(() => countOptions(rest.options), [rest.options]);
|
|
267
|
+
|
|
268
|
+
const selectComponents = useSelectComponents({
|
|
269
|
+
components,
|
|
270
|
+
optionsCount,
|
|
271
|
+
virtualized,
|
|
272
|
+
isCollectionMode,
|
|
273
|
+
forbidValuesClearInCollnMode,
|
|
274
|
+
});
|
|
261
275
|
|
|
262
|
-
const combinedStyles =
|
|
263
|
-
return combineStyles<Option, IsMulti, Group>([
|
|
264
|
-
componentsStyles,
|
|
265
|
-
virtualized ? virtualizedStyles : nonVirtualizedStyles,
|
|
266
|
-
styles,
|
|
267
|
-
] as StylesConfig<Option, IsMulti, Group>[]);
|
|
268
|
-
}, [styles, virtualized]);
|
|
276
|
+
const combinedStyles = useSelectStyles({virtualized, styles});
|
|
269
277
|
|
|
270
278
|
return (
|
|
271
279
|
<BaseCreatableSelect
|
|
@@ -276,30 +284,17 @@ export function CreatableSelectInner<
|
|
|
276
284
|
isMulti={isCollectionMode}
|
|
277
285
|
backspaceRemovesValue={isCollectionMode}
|
|
278
286
|
tabSelectsValue={false}
|
|
279
|
-
components={
|
|
280
|
-
Menu: Menu,
|
|
281
|
-
DropdownIndicator,
|
|
282
|
-
ClearIndicator,
|
|
283
|
-
/*
|
|
284
|
-
Fast Options break option focus on hover behaviour but help with slow React Select performance with large options list.
|
|
285
|
-
This isolates bug for big lists only
|
|
286
|
-
Read Option definition for more info
|
|
287
|
-
bug here: https://the.fibery.io/SoftDev/bug/Select-option-behaviour-is-incorrect-9413
|
|
288
|
-
*/
|
|
289
|
-
MultiValueRemove: ClearIndicator,
|
|
290
|
-
NoOptionsMessage,
|
|
291
|
-
GroupHeading,
|
|
292
|
-
Option: optionsCount > FAST_OPTION_USAGE_THRESHOLD ? Option : OptionSlow,
|
|
293
|
-
...components,
|
|
294
|
-
Group: virtualized ? GroupVirtualized : components?.Group ? components.Group : reactSelectComponents.Group,
|
|
295
|
-
MenuList: virtualized
|
|
296
|
-
? MenuListVirtualized
|
|
297
|
-
: components?.MenuList
|
|
298
|
-
? components.MenuList
|
|
299
|
-
: reactSelectComponents.MenuList,
|
|
300
|
-
}}
|
|
287
|
+
components={selectComponents}
|
|
301
288
|
{...rest}
|
|
302
289
|
isDisabled={rest.disabled}
|
|
303
290
|
/>
|
|
304
291
|
);
|
|
305
292
|
}
|
|
293
|
+
|
|
294
|
+
export const CreatableSelect = forwardRef(CreatableSelectInner) as <
|
|
295
|
+
T = unknown,
|
|
296
|
+
U extends boolean = boolean,
|
|
297
|
+
V extends GroupBase<T> = GroupBase<T>
|
|
298
|
+
>(
|
|
299
|
+
props: CreatableProps<T, U, V> & SelectProps<T, U, V>
|
|
300
|
+
) => ReturnType<typeof CreatableSelectInner>;
|