@vkontakte/vkui 6.2.0 → 6.2.2
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/Avatar/Avatar.d.ts +1 -4
- package/dist/cjs/components/Avatar/Avatar.d.ts.map +1 -1
- package/dist/cjs/components/Checkbox/Checkbox.d.ts.map +1 -1
- package/dist/cjs/components/Checkbox/Checkbox.js +10 -8
- package/dist/cjs/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/cjs/components/ChipsInputBase/ChipsInputBase.d.ts.map +1 -1
- package/dist/cjs/components/ChipsInputBase/ChipsInputBase.js +3 -5
- package/dist/cjs/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
- package/dist/cjs/components/ChipsInputBase/constants.js +2 -3
- package/dist/cjs/components/ChipsInputBase/constants.js.map +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.js +4 -5
- package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cjs/components/FocusTrap/FocusTrap.d.ts.map +1 -1
- package/dist/cjs/components/FocusTrap/FocusTrap.js +10 -1
- package/dist/cjs/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/cjs/components/GridAvatar/GridAvatar.js +1 -1
- package/dist/cjs/components/GridAvatar/GridAvatar.js.map +1 -1
- package/dist/cjs/components/Image/Image.d.ts +2 -4
- package/dist/cjs/components/Image/Image.d.ts.map +1 -1
- package/dist/cjs/components/ImageBase/ImageBase.d.ts +1 -4
- package/dist/cjs/components/ImageBase/ImageBase.d.ts.map +1 -1
- package/dist/cjs/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.d.ts +4 -38
- package/dist/cjs/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.d.ts.map +1 -1
- package/dist/cjs/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.js +60 -19
- package/dist/cjs/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.js.map +1 -1
- package/dist/cjs/components/ImageBase/ImageBaseOverlay/hooks.d.ts +6 -0
- package/dist/cjs/components/ImageBase/ImageBaseOverlay/hooks.d.ts.map +1 -0
- package/dist/cjs/components/ImageBase/ImageBaseOverlay/hooks.js +37 -0
- package/dist/cjs/components/ImageBase/ImageBaseOverlay/hooks.js.map +1 -0
- package/dist/cjs/components/ImageBase/ImageBaseOverlay/types.d.ts +54 -0
- package/dist/cjs/components/ImageBase/ImageBaseOverlay/types.d.ts.map +1 -0
- package/dist/cjs/components/ImageBase/ImageBaseOverlay/types.js +8 -0
- package/dist/cjs/components/ImageBase/ImageBaseOverlay/types.js.map +1 -0
- package/dist/cjs/components/PanelHeaderContext/PanelHeaderContext.d.ts.map +1 -1
- package/dist/cjs/components/PanelHeaderContext/PanelHeaderContext.js +1 -1
- package/dist/cjs/components/PanelHeaderContext/PanelHeaderContext.js.map +1 -1
- package/dist/cjs/components/Popover/Popover.d.ts +2 -2
- package/dist/cjs/components/Popover/Popover.d.ts.map +1 -1
- package/dist/cjs/components/Popover/Popover.js +4 -2
- package/dist/cjs/components/Popover/Popover.js.map +1 -1
- package/dist/cjs/components/Snackbar/Snackbar.d.ts +6 -0
- package/dist/cjs/components/Snackbar/Snackbar.d.ts.map +1 -1
- package/dist/cjs/components/Snackbar/Snackbar.js +3 -1
- package/dist/cjs/components/Snackbar/Snackbar.js.map +1 -1
- package/dist/cjs/components/Snackbar/types.d.ts +1 -0
- package/dist/cjs/components/Snackbar/types.d.ts.map +1 -1
- package/dist/cjs/components/Snackbar/utils.d.ts +4 -8
- package/dist/cjs/components/Snackbar/utils.d.ts.map +1 -1
- package/dist/cjs/components/Snackbar/utils.js +31 -41
- package/dist/cjs/components/Snackbar/utils.js.map +1 -1
- package/dist/cjs/helpers/array.d.ts +5 -0
- package/dist/cjs/helpers/array.d.ts.map +1 -0
- package/dist/cjs/helpers/array.js +20 -0
- package/dist/cjs/helpers/array.js.map +1 -0
- package/dist/cjs/hooks/useEnsuredControl.js +1 -1
- package/dist/cjs/hooks/useEnsuredControl.js.map +1 -1
- package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
- package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +9 -5
- package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
- package/dist/cjs/lib/tokens/TokensClassProvider.d.ts.map +1 -1
- package/dist/cjs/lib/tokens/TokensClassProvider.js +1 -1
- package/dist/cjs/lib/tokens/TokensClassProvider.js.map +1 -1
- package/dist/components/Avatar/Avatar.d.ts +1 -4
- package/dist/components/Avatar/Avatar.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.js +10 -8
- package/dist/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/ChipsInputBase/ChipsInputBase.d.ts.map +1 -1
- package/dist/components/ChipsInputBase/ChipsInputBase.js +3 -5
- package/dist/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
- package/dist/components/ChipsInputBase/constants.js +2 -3
- package/dist/components/ChipsInputBase/constants.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.js +4 -5
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/FocusTrap/FocusTrap.d.ts.map +1 -1
- package/dist/components/FocusTrap/FocusTrap.js +10 -1
- package/dist/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/components/GridAvatar/GridAvatar.js +1 -1
- package/dist/components/GridAvatar/GridAvatar.js.map +1 -1
- package/dist/components/Image/Image.d.ts +2 -4
- package/dist/components/Image/Image.d.ts.map +1 -1
- package/dist/components/ImageBase/ImageBase.d.ts +1 -4
- package/dist/components/ImageBase/ImageBase.d.ts.map +1 -1
- package/dist/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.d.ts +4 -38
- package/dist/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.d.ts.map +1 -1
- package/dist/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.js +64 -23
- package/dist/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.js.map +1 -1
- package/dist/components/ImageBase/ImageBaseOverlay/hooks.d.ts +6 -0
- package/dist/components/ImageBase/ImageBaseOverlay/hooks.d.ts.map +1 -0
- package/dist/components/ImageBase/ImageBaseOverlay/hooks.js +26 -0
- package/dist/components/ImageBase/ImageBaseOverlay/hooks.js.map +1 -0
- package/dist/components/ImageBase/ImageBaseOverlay/types.d.ts +54 -0
- package/dist/components/ImageBase/ImageBaseOverlay/types.d.ts.map +1 -0
- package/dist/components/ImageBase/ImageBaseOverlay/types.js +3 -0
- package/dist/components/ImageBase/ImageBaseOverlay/types.js.map +1 -0
- package/dist/components/PanelHeaderContext/PanelHeaderContext.d.ts.map +1 -1
- package/dist/components/PanelHeaderContext/PanelHeaderContext.js +1 -1
- package/dist/components/PanelHeaderContext/PanelHeaderContext.js.map +1 -1
- package/dist/components/Popover/Popover.d.ts +2 -2
- package/dist/components/Popover/Popover.d.ts.map +1 -1
- package/dist/components/Popover/Popover.js +4 -2
- package/dist/components/Popover/Popover.js.map +1 -1
- package/dist/components/Snackbar/Snackbar.d.ts +6 -0
- package/dist/components/Snackbar/Snackbar.d.ts.map +1 -1
- package/dist/components/Snackbar/Snackbar.js +3 -1
- package/dist/components/Snackbar/Snackbar.js.map +1 -1
- package/dist/components/Snackbar/types.d.ts +1 -0
- package/dist/components/Snackbar/types.d.ts.map +1 -1
- package/dist/components/Snackbar/types.js.map +1 -1
- package/dist/components/Snackbar/utils.d.ts +4 -8
- package/dist/components/Snackbar/utils.d.ts.map +1 -1
- package/dist/components/Snackbar/utils.js +30 -41
- package/dist/components/Snackbar/utils.js.map +1 -1
- package/dist/components.css +3 -3
- package/dist/components.css.map +1 -1
- package/dist/components.js.tmp +336 -192
- package/dist/cssm/components/Avatar/Avatar.d.ts +1 -4
- package/dist/cssm/components/Avatar/Avatar.d.ts.map +1 -1
- package/dist/cssm/components/Checkbox/Checkbox.d.ts.map +1 -1
- package/dist/cssm/components/Checkbox/Checkbox.js +10 -8
- package/dist/cssm/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/cssm/components/ChipsInputBase/ChipsInputBase.d.ts.map +1 -1
- package/dist/cssm/components/ChipsInputBase/ChipsInputBase.js +3 -5
- package/dist/cssm/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
- package/dist/cssm/components/ChipsInputBase/constants.js +2 -2
- package/dist/cssm/components/ChipsInputBase/constants.js.map +1 -1
- package/dist/cssm/components/CustomScrollView/CustomScrollView.module.css +2 -0
- package/dist/cssm/components/CustomSelect/CustomSelect.js +4 -4
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.module.css +1 -0
- package/dist/cssm/components/FocusTrap/FocusTrap.d.ts.map +1 -1
- package/dist/cssm/components/FocusTrap/FocusTrap.js +10 -1
- package/dist/cssm/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/cssm/components/GridAvatar/GridAvatar.js +1 -1
- package/dist/cssm/components/GridAvatar/GridAvatar.js.map +1 -1
- package/dist/cssm/components/Image/Image.d.ts +2 -4
- package/dist/cssm/components/Image/Image.d.ts.map +1 -1
- package/dist/cssm/components/ImageBase/ImageBase.d.ts +1 -4
- package/dist/cssm/components/ImageBase/ImageBase.d.ts.map +1 -1
- package/dist/cssm/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.d.ts +4 -38
- package/dist/cssm/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.d.ts.map +1 -1
- package/dist/cssm/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.js +54 -18
- package/dist/cssm/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.js.map +1 -1
- package/dist/cssm/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.module.css +10 -0
- package/dist/cssm/components/ImageBase/ImageBaseOverlay/hooks.d.ts +6 -0
- package/dist/cssm/components/ImageBase/ImageBaseOverlay/hooks.d.ts.map +1 -0
- package/dist/cssm/components/ImageBase/ImageBaseOverlay/hooks.js +26 -0
- package/dist/cssm/components/ImageBase/ImageBaseOverlay/hooks.js.map +1 -0
- package/dist/cssm/components/ImageBase/ImageBaseOverlay/types.d.ts +54 -0
- package/dist/cssm/components/ImageBase/ImageBaseOverlay/types.d.ts.map +1 -0
- package/dist/cssm/components/ImageBase/ImageBaseOverlay/types.js +3 -0
- package/dist/cssm/components/ImageBase/ImageBaseOverlay/types.js.map +1 -0
- package/dist/cssm/components/ModalDismissButton/ModalDismissButton.module.css +5 -6
- package/dist/cssm/components/PanelHeaderContext/PanelHeaderContext.d.ts.map +1 -1
- package/dist/cssm/components/PanelHeaderContext/PanelHeaderContext.js +1 -1
- package/dist/cssm/components/PanelHeaderContext/PanelHeaderContext.js.map +1 -1
- package/dist/cssm/components/Popover/Popover.d.ts +2 -2
- package/dist/cssm/components/Popover/Popover.d.ts.map +1 -1
- package/dist/cssm/components/Popover/Popover.js +3 -2
- package/dist/cssm/components/Popover/Popover.js.map +1 -1
- package/dist/cssm/components/Search/Search.module.css +4 -5
- package/dist/cssm/components/Snackbar/Snackbar.d.ts +6 -0
- package/dist/cssm/components/Snackbar/Snackbar.d.ts.map +1 -1
- package/dist/cssm/components/Snackbar/Snackbar.js +3 -1
- package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
- package/dist/cssm/components/Snackbar/Snackbar.module.css +47 -33
- package/dist/cssm/components/Snackbar/types.d.ts +1 -0
- package/dist/cssm/components/Snackbar/types.d.ts.map +1 -1
- package/dist/cssm/components/Snackbar/types.js.map +1 -1
- package/dist/cssm/components/Snackbar/utils.d.ts +4 -8
- package/dist/cssm/components/Snackbar/utils.d.ts.map +1 -1
- package/dist/cssm/components/Snackbar/utils.js +30 -41
- package/dist/cssm/components/Snackbar/utils.js.map +1 -1
- package/dist/cssm/helpers/array.d.ts +5 -0
- package/dist/cssm/helpers/array.d.ts.map +1 -0
- package/dist/cssm/helpers/array.js +10 -0
- package/dist/cssm/helpers/array.js.map +1 -0
- package/dist/cssm/hooks/useEnsuredControl.js +1 -1
- package/dist/cssm/hooks/useEnsuredControl.js.map +1 -1
- package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
- package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +9 -5
- package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
- package/dist/cssm/lib/tokens/TokensClassProvider.d.ts.map +1 -1
- package/dist/cssm/lib/tokens/TokensClassProvider.js +2 -1
- package/dist/cssm/lib/tokens/TokensClassProvider.js.map +1 -1
- package/dist/cssm/lib/tokens/TokensClassProvider.module.css +4 -0
- package/dist/helpers/array.d.ts +5 -0
- package/dist/helpers/array.d.ts.map +1 -0
- package/dist/helpers/array.js +10 -0
- package/dist/helpers/array.js.map +1 -0
- package/dist/hooks/useEnsuredControl.js +1 -1
- package/dist/hooks/useEnsuredControl.js.map +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +9 -5
- package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
- package/dist/lib/tokens/TokensClassProvider.d.ts.map +1 -1
- package/dist/lib/tokens/TokensClassProvider.js +1 -1
- package/dist/lib/tokens/TokensClassProvider.js.map +1 -1
- package/dist/vkui.css +3 -3
- package/dist/vkui.css.map +1 -1
- package/dist/vkui.js.tmp +336 -192
- package/package.json +1 -1
- package/src/components/Checkbox/Checkbox.tsx +11 -8
- package/src/components/ChipsInputBase/ChipsInputBase.tsx +3 -5
- package/src/components/ChipsInputBase/constants.tsx +2 -2
- package/src/components/CustomScrollView/CustomScrollView.module.css +2 -0
- package/src/components/CustomSelect/CustomSelect.tsx +7 -7
- package/src/components/CustomSelectOption/CustomSelectOption.module.css +1 -0
- package/src/components/FocusTrap/FocusTrap.tsx +10 -1
- package/src/components/GridAvatar/GridAvatar.tsx +1 -1
- package/src/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.module.css +10 -0
- package/src/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.tsx +89 -65
- package/src/components/ImageBase/ImageBaseOverlay/hooks.ts +26 -0
- package/src/components/ImageBase/ImageBaseOverlay/types.ts +58 -0
- package/src/components/ModalDismissButton/ModalDismissButton.module.css +5 -6
- package/src/components/PanelHeaderContext/PanelHeaderContext.tsx +2 -0
- package/src/components/Popover/Popover.tsx +3 -0
- package/src/components/Search/Search.module.css +4 -5
- package/src/components/Snackbar/Snackbar.module.css +47 -33
- package/src/components/Snackbar/Snackbar.tsx +9 -0
- package/src/components/Snackbar/types.ts +8 -1
- package/src/components/Snackbar/utils.ts +46 -42
- package/src/helpers/array.ts +9 -0
- package/src/hooks/useEnsuredControl.ts +1 -1
- package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +18 -10
- package/src/lib/tokens/TokensClassProvider.module.css +4 -0
- package/src/lib/tokens/TokensClassProvider.tsx +6 -1
|
@@ -58,10 +58,7 @@ export declare const Avatar: {
|
|
|
58
58
|
({ preset, className, ...restProps }: AvatarBadgeWithPresetProps): import("react/jsx-runtime").JSX.Element;
|
|
59
59
|
displayName: string;
|
|
60
60
|
};
|
|
61
|
-
Overlay:
|
|
62
|
-
({ className, theme: themeProp, visibility: visibilityProp, children, onClick: onClickProp, ...restProps }: ImageBaseOverlayProps): import("react/jsx-runtime").JSX.Element;
|
|
63
|
-
displayName: string;
|
|
64
|
-
};
|
|
61
|
+
Overlay: import("react").FC<ImageBaseOverlayProps>;
|
|
65
62
|
getInitialsFontSize: typeof getInitialsFontSize;
|
|
66
63
|
};
|
|
67
64
|
//# sourceMappingURL=Avatar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../../src/components/Avatar/Avatar.tsx"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACpG,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAGhD,YAAY,EACV,gBAAgB,EAChB,0BAA0B,EAC1B,qBAAqB,IAAI,kBAAkB,GAC5C,CAAC;AAEF,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,QAAA,MAAM,yBAAyB;;;;;;;CAOrB,CAAC;AAEX;;;GAGG;AACH,MAAM,MAAM,6BAA6B,GAAG,MAAM,OAAO,yBAAyB,CAAC;AAEnF,MAAM,MAAM,2BAA2B,GACnC,CAAC,OAAO,yBAAyB,CAAC,CAAC,6BAA6B,CAAC,GACjE,MAAM,CAAC;AAYX,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,YAAY,CAAC;IACnF;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;;;;;OAcG;IACH,aAAa,CAAC,EAAE,6BAA6B,GAAG,2BAA2B,GAAG,QAAQ,CAAC;CACxF;AAED;;GAEG;AACH,eAAO,MAAM,MAAM;2GAQhB,WAAW
|
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../../src/components/Avatar/Avatar.tsx"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACpG,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAGhD,YAAY,EACV,gBAAgB,EAChB,0BAA0B,EAC1B,qBAAqB,IAAI,kBAAkB,GAC5C,CAAC;AAEF,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,QAAA,MAAM,yBAAyB;;;;;;;CAOrB,CAAC;AAEX;;;GAGG;AACH,MAAM,MAAM,6BAA6B,GAAG,MAAM,OAAO,yBAAyB,CAAC;AAEnF,MAAM,MAAM,2BAA2B,GACnC,CAAC,OAAO,yBAAyB,CAAC,CAAC,6BAA6B,CAAC,GACjE,MAAM,CAAC;AAYX,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,YAAY,CAAC;IACnF;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;;;;;OAcG;IACH,aAAa,CAAC,EAAE,6BAA6B,GAAG,2BAA2B,GAAG,QAAQ,CAAC;CACxF;AAED;;GAEG;AACH,eAAO,MAAM,MAAM;2GAQhB,WAAW;;;;;;;;;;;;CAiCb,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../../src/components/Checkbox/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAc/B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../../src/components/Checkbox/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAc/B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAepE,MAAM,WAAW,aACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACjD,UAAU,CAAC,gBAAgB,CAAC,EAC5B,MAAM,CAAC,gBAAgB,CAAC,EACxB,IAAI,CACF,aAAa,EACb,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,kBAAkB,CAC3E;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAID;;GAEG;AACH,eAAO,MAAM,QAAQ,2MAiBlB,aAAa,4CAuIf,CAAC"}
|
|
@@ -13,6 +13,9 @@ import { Footnote } from '../Typography/Footnote/Footnote';
|
|
|
13
13
|
import { Text } from '../Typography/Text/Text';
|
|
14
14
|
import { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';
|
|
15
15
|
import styles from './Checkbox.module.css';
|
|
16
|
+
function setIndeterminate(el, indeterminate) {
|
|
17
|
+
el.indeterminate = indeterminate;
|
|
18
|
+
}
|
|
16
19
|
const sizeYClassNames = {
|
|
17
20
|
none: styles['Checkbox--sizeY-none'],
|
|
18
21
|
['compact']: styles['Checkbox--sizeY-compact']
|
|
@@ -26,9 +29,9 @@ const warn = warnOnce('Checkbox');
|
|
|
26
29
|
const { sizeY = 'none' } = useAdaptivity();
|
|
27
30
|
const { sizeY: adaptiveSizeY } = useAdaptivityConditionalRender();
|
|
28
31
|
React.useEffect(()=>{
|
|
29
|
-
const indeterminateValue = indeterminate
|
|
32
|
+
const indeterminateValue = indeterminate ?? Boolean(defaultIndeterminate);
|
|
30
33
|
if (inputRef.current) {
|
|
31
|
-
inputRef.current
|
|
34
|
+
setIndeterminate(inputRef.current, indeterminateValue);
|
|
32
35
|
}
|
|
33
36
|
}, [
|
|
34
37
|
defaultIndeterminate,
|
|
@@ -36,19 +39,18 @@ const warn = warnOnce('Checkbox');
|
|
|
36
39
|
inputRef
|
|
37
40
|
]);
|
|
38
41
|
const handleChange = React.useCallback((event)=>{
|
|
39
|
-
if (defaultIndeterminate !== undefined && indeterminate === undefined && restProps.checked === undefined
|
|
40
|
-
|
|
42
|
+
if (defaultIndeterminate !== undefined && indeterminate === undefined && restProps.checked === undefined) {
|
|
43
|
+
event.currentTarget.indeterminate = false;
|
|
41
44
|
}
|
|
42
|
-
if (indeterminate !== undefined
|
|
43
|
-
|
|
45
|
+
if (indeterminate !== undefined) {
|
|
46
|
+
event.currentTarget.indeterminate = indeterminate;
|
|
44
47
|
}
|
|
45
48
|
onChange && onChange(event);
|
|
46
49
|
}, [
|
|
47
50
|
defaultIndeterminate,
|
|
48
51
|
indeterminate,
|
|
49
52
|
restProps.checked,
|
|
50
|
-
onChange
|
|
51
|
-
inputRef
|
|
53
|
+
onChange
|
|
52
54
|
]);
|
|
53
55
|
if (process.env.NODE_ENV === 'development') {
|
|
54
56
|
if (defaultIndeterminate && restProps.defaultChecked) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Icon20CheckBoxIndetermanate,\n Icon20CheckBoxOff,\n Icon20CheckBoxOn,\n Icon24CheckBoxOff,\n Icon24CheckBoxOn,\n} from '@vkontakte/icons';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useAdaptivityConditionalRender } from '../../hooks/useAdaptivityConditionalRender';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { HasRef, HasRootRef } from '../../types';\nimport { DEFAULT_ACTIVE_EFFECT_DELAY } from '../Clickable/useState';\nimport { Tappable, type TappableProps } from '../Tappable/Tappable';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { Text } from '../Typography/Text/Text';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './Checkbox.module.css';\n\nconst sizeYClassNames = {\n none: styles['Checkbox--sizeY-none'],\n ['compact']: styles['Checkbox--sizeY-compact'],\n};\n\nexport interface CheckboxProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRootRef<HTMLLabelElement>,\n HasRef<HTMLInputElement>,\n Pick<\n TappableProps,\n 'hoverMode' | 'activeMode' | 'hasHover' | 'hasActive' | 'focusVisibleMode'\n > {\n description?: React.ReactNode;\n indeterminate?: boolean;\n defaultIndeterminate?: boolean;\n titleAfter?: React.ReactNode;\n}\n\nconst warn = warnOnce('Checkbox');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Checkbox\n */\nexport const Checkbox = ({\n children,\n className,\n style,\n getRootRef,\n getRef,\n description,\n indeterminate,\n defaultIndeterminate,\n hoverMode,\n activeMode,\n hasHover,\n hasActive,\n focusVisibleMode,\n onChange,\n titleAfter,\n ...restProps\n}: CheckboxProps) => {\n const inputRef = useExternRef(getRef);\n const platform = usePlatform();\n const { sizeY = 'none' } = useAdaptivity();\n const { sizeY: adaptiveSizeY } = useAdaptivityConditionalRender();\n\n React.useEffect(() => {\n const indeterminateValue = indeterminate === undefined ? defaultIndeterminate : indeterminate;\n\n if (inputRef.current) {\n inputRef.current.indeterminate = Boolean(indeterminateValue);\n }\n }, [defaultIndeterminate, indeterminate, inputRef]);\n\n const handleChange: CheckboxProps['onChange'] = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n if (\n defaultIndeterminate !== undefined &&\n indeterminate === undefined &&\n restProps.checked === undefined &&\n inputRef.current\n ) {\n inputRef.current.indeterminate = false;\n }\n if (indeterminate !== undefined && inputRef.current) {\n inputRef.current.indeterminate = indeterminate;\n }\n onChange && onChange(event);\n },\n [defaultIndeterminate, indeterminate, restProps.checked, onChange, inputRef],\n );\n\n if (process.env.NODE_ENV === 'development') {\n if (defaultIndeterminate && restProps.defaultChecked) {\n warn('defaultIndeterminate и defaultChecked не могут быть true одновременно', 'error');\n }\n\n if (indeterminate && restProps.checked) {\n warn('indeterminate и checked не могут быть true одновременно', 'error');\n }\n\n if (restProps.defaultChecked && restProps.checked) {\n warn('defaultChecked и checked не могут быть true одновременно', 'error');\n }\n }\n\n return (\n <Tappable\n Component=\"label\"\n className={classNames(\n styles['Checkbox'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n !(hasReactNode(children) || hasReactNode(description)) && styles['Checkbox--simple'],\n className,\n )}\n style={style}\n disabled={restProps.disabled}\n activeEffectDelay={platform === 'ios' ? 100 : DEFAULT_ACTIVE_EFFECT_DELAY}\n getRootRef={getRootRef}\n hoverMode={hoverMode}\n activeMode={activeMode}\n hasHover={hasHover}\n hasActive={hasActive}\n focusVisibleMode={focusVisibleMode}\n >\n <VisuallyHidden\n {...restProps}\n Component=\"input\"\n type=\"checkbox\"\n onChange={handleChange}\n className={styles['Checkbox__input']}\n getRootRef={inputRef}\n />\n <div className={classNames(styles['Checkbox__icon'], styles['Checkbox__icon--on'])}>\n {platform === 'vkcom' ? (\n <Icon20CheckBoxOn />\n ) : (\n <React.Fragment>\n {adaptiveSizeY.compact && (\n <Icon20CheckBoxOn className={adaptiveSizeY.compact.className} />\n )}\n {adaptiveSizeY.regular && (\n <Icon24CheckBoxOn className={adaptiveSizeY.regular.className} />\n )}\n </React.Fragment>\n )}\n </div>\n <div className={classNames(styles['Checkbox__icon'], styles['Checkbox__icon--off'])}>\n {platform === 'vkcom' ? (\n <Icon20CheckBoxOff />\n ) : (\n <React.Fragment>\n {adaptiveSizeY.compact && (\n <Icon20CheckBoxOff className={adaptiveSizeY.compact.className} />\n )}\n {adaptiveSizeY.regular && (\n <Icon24CheckBoxOff className={adaptiveSizeY.regular.className} />\n )}\n </React.Fragment>\n )}\n </div>\n <div\n className={classNames(styles['Checkbox__icon'], styles['Checkbox__icon--indeterminate'])}\n >\n {platform === 'vkcom' ? (\n <Icon20CheckBoxIndetermanate width={20} height={20} />\n ) : (\n <React.Fragment>\n {adaptiveSizeY.compact && (\n <Icon20CheckBoxIndetermanate\n className={adaptiveSizeY.compact.className}\n width={20}\n height={20}\n />\n )}\n {adaptiveSizeY.regular && (\n <Icon20CheckBoxIndetermanate\n className={adaptiveSizeY.regular.className}\n width={24}\n height={24}\n />\n )}\n </React.Fragment>\n )}\n </div>\n <div className={styles['Checkbox__content']}>\n <div className={styles['Checkbox__title']}>\n <Text className={styles['Checkbox__titleBefore']}>{children}</Text>\n <div className={styles['Checkbox__titleAfter']}>{titleAfter}</div>\n </div>\n {hasReactNode(description) && (\n <Footnote className={styles['Checkbox__description']}>{description}</Footnote>\n )}\n </div>\n </Tappable>\n );\n};\n"],"names":["React","Icon20CheckBoxIndetermanate","Icon20CheckBoxOff","Icon20CheckBoxOn","Icon24CheckBoxOff","Icon24CheckBoxOn","classNames","hasReactNode","useAdaptivity","useAdaptivityConditionalRender","useExternRef","usePlatform","warnOnce","DEFAULT_ACTIVE_EFFECT_DELAY","Tappable","Footnote","Text","VisuallyHidden","styles","sizeYClassNames","none","warn","Checkbox","children","className","style","getRootRef","getRef","description","indeterminate","defaultIndeterminate","hoverMode","activeMode","hasHover","hasActive","focusVisibleMode","onChange","titleAfter","restProps","inputRef","platform","sizeY","adaptiveSizeY","useEffect","indeterminateValue","undefined","current","Boolean","handleChange","useCallback","event","checked","process","env","NODE_ENV","defaultChecked","Component","disabled","activeEffectDelay","type","div","Fragment","compact","regular","width","height"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Icon20CheckBoxIndetermanate,\n Icon20CheckBoxOff,\n Icon20CheckBoxOn,\n Icon24CheckBoxOff,\n Icon24CheckBoxOn,\n} from '@vkontakte/icons';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useAdaptivityConditionalRender } from '../../hooks/useAdaptivityConditionalRender';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { HasRef, HasRootRef } from '../../types';\nimport { DEFAULT_ACTIVE_EFFECT_DELAY } from '../Clickable/useState';\nimport { Tappable, type TappableProps } from '../Tappable/Tappable';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { Text } from '../Typography/Text/Text';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './Checkbox.module.css';\n\nfunction setIndeterminate(el: HTMLInputElement, indeterminate: boolean) {\n el.indeterminate = indeterminate;\n}\n\nconst sizeYClassNames = {\n none: styles['Checkbox--sizeY-none'],\n ['compact']: styles['Checkbox--sizeY-compact'],\n};\n\nexport interface CheckboxProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRootRef<HTMLLabelElement>,\n HasRef<HTMLInputElement>,\n Pick<\n TappableProps,\n 'hoverMode' | 'activeMode' | 'hasHover' | 'hasActive' | 'focusVisibleMode'\n > {\n description?: React.ReactNode;\n indeterminate?: boolean;\n defaultIndeterminate?: boolean;\n titleAfter?: React.ReactNode;\n}\n\nconst warn = warnOnce('Checkbox');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Checkbox\n */\nexport const Checkbox = ({\n children,\n className,\n style,\n getRootRef,\n getRef,\n description,\n indeterminate,\n defaultIndeterminate,\n hoverMode,\n activeMode,\n hasHover,\n hasActive,\n focusVisibleMode,\n onChange,\n titleAfter,\n ...restProps\n}: CheckboxProps) => {\n const inputRef = useExternRef(getRef);\n const platform = usePlatform();\n const { sizeY = 'none' } = useAdaptivity();\n const { sizeY: adaptiveSizeY } = useAdaptivityConditionalRender();\n\n React.useEffect(() => {\n const indeterminateValue = indeterminate ?? Boolean(defaultIndeterminate);\n\n if (inputRef.current) {\n setIndeterminate(inputRef.current, indeterminateValue);\n }\n }, [defaultIndeterminate, indeterminate, inputRef]);\n\n const handleChange: CheckboxProps['onChange'] = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n if (\n defaultIndeterminate !== undefined &&\n indeterminate === undefined &&\n restProps.checked === undefined\n ) {\n event.currentTarget.indeterminate = false;\n }\n if (indeterminate !== undefined) {\n event.currentTarget.indeterminate = indeterminate;\n }\n onChange && onChange(event);\n },\n [defaultIndeterminate, indeterminate, restProps.checked, onChange],\n );\n\n if (process.env.NODE_ENV === 'development') {\n if (defaultIndeterminate && restProps.defaultChecked) {\n warn('defaultIndeterminate и defaultChecked не могут быть true одновременно', 'error');\n }\n\n if (indeterminate && restProps.checked) {\n warn('indeterminate и checked не могут быть true одновременно', 'error');\n }\n\n if (restProps.defaultChecked && restProps.checked) {\n warn('defaultChecked и checked не могут быть true одновременно', 'error');\n }\n }\n\n return (\n <Tappable\n Component=\"label\"\n className={classNames(\n styles['Checkbox'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n !(hasReactNode(children) || hasReactNode(description)) && styles['Checkbox--simple'],\n className,\n )}\n style={style}\n disabled={restProps.disabled}\n activeEffectDelay={platform === 'ios' ? 100 : DEFAULT_ACTIVE_EFFECT_DELAY}\n getRootRef={getRootRef}\n hoverMode={hoverMode}\n activeMode={activeMode}\n hasHover={hasHover}\n hasActive={hasActive}\n focusVisibleMode={focusVisibleMode}\n >\n <VisuallyHidden\n {...restProps}\n Component=\"input\"\n type=\"checkbox\"\n onChange={handleChange}\n className={styles['Checkbox__input']}\n getRootRef={inputRef}\n />\n <div className={classNames(styles['Checkbox__icon'], styles['Checkbox__icon--on'])}>\n {platform === 'vkcom' ? (\n <Icon20CheckBoxOn />\n ) : (\n <React.Fragment>\n {adaptiveSizeY.compact && (\n <Icon20CheckBoxOn className={adaptiveSizeY.compact.className} />\n )}\n {adaptiveSizeY.regular && (\n <Icon24CheckBoxOn className={adaptiveSizeY.regular.className} />\n )}\n </React.Fragment>\n )}\n </div>\n <div className={classNames(styles['Checkbox__icon'], styles['Checkbox__icon--off'])}>\n {platform === 'vkcom' ? (\n <Icon20CheckBoxOff />\n ) : (\n <React.Fragment>\n {adaptiveSizeY.compact && (\n <Icon20CheckBoxOff className={adaptiveSizeY.compact.className} />\n )}\n {adaptiveSizeY.regular && (\n <Icon24CheckBoxOff className={adaptiveSizeY.regular.className} />\n )}\n </React.Fragment>\n )}\n </div>\n <div\n className={classNames(styles['Checkbox__icon'], styles['Checkbox__icon--indeterminate'])}\n >\n {platform === 'vkcom' ? (\n <Icon20CheckBoxIndetermanate width={20} height={20} />\n ) : (\n <React.Fragment>\n {adaptiveSizeY.compact && (\n <Icon20CheckBoxIndetermanate\n className={adaptiveSizeY.compact.className}\n width={20}\n height={20}\n />\n )}\n {adaptiveSizeY.regular && (\n <Icon20CheckBoxIndetermanate\n className={adaptiveSizeY.regular.className}\n width={24}\n height={24}\n />\n )}\n </React.Fragment>\n )}\n </div>\n <div className={styles['Checkbox__content']}>\n <div className={styles['Checkbox__title']}>\n <Text className={styles['Checkbox__titleBefore']}>{children}</Text>\n <div className={styles['Checkbox__titleAfter']}>{titleAfter}</div>\n </div>\n {hasReactNode(description) && (\n <Footnote className={styles['Checkbox__description']}>{description}</Footnote>\n )}\n </div>\n </Tappable>\n );\n};\n"],"names":["React","Icon20CheckBoxIndetermanate","Icon20CheckBoxOff","Icon20CheckBoxOn","Icon24CheckBoxOff","Icon24CheckBoxOn","classNames","hasReactNode","useAdaptivity","useAdaptivityConditionalRender","useExternRef","usePlatform","warnOnce","DEFAULT_ACTIVE_EFFECT_DELAY","Tappable","Footnote","Text","VisuallyHidden","styles","setIndeterminate","el","indeterminate","sizeYClassNames","none","warn","Checkbox","children","className","style","getRootRef","getRef","description","defaultIndeterminate","hoverMode","activeMode","hasHover","hasActive","focusVisibleMode","onChange","titleAfter","restProps","inputRef","platform","sizeY","adaptiveSizeY","useEffect","indeterminateValue","Boolean","current","handleChange","useCallback","event","undefined","checked","currentTarget","process","env","NODE_ENV","defaultChecked","Component","disabled","activeEffectDelay","type","div","Fragment","compact","regular","width","height"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChipsInputBase.d.ts","sourceRoot":"","sources":["../../../../src/components/ChipsInputBase/ChipsInputBase.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,UAAU,EAAmB,0BAA0B,EAAc,MAAM,SAAS,CAAC;AAQnG,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,UAAU,kQA2BhD,0BAA0B,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"ChipsInputBase.d.ts","sourceRoot":"","sources":["../../../../src/components/ChipsInputBase/ChipsInputBase.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,UAAU,EAAmB,0BAA0B,EAAc,MAAM,SAAS,CAAC;AAQnG,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,UAAU,kQA2BhD,0BAA0B,CAAC,CAAC,CAAC,4CA6M/B,CAAC"}
|
|
@@ -112,9 +112,7 @@ getRef, id: idProp, inputValue = DEFAULT_INPUT_VALUE, placeholder, disabled, rea
|
|
|
112
112
|
if (contains(event.currentTarget, getActiveElementByAnotherElement(event.currentTarget))) {
|
|
113
113
|
return;
|
|
114
114
|
}
|
|
115
|
-
if (
|
|
116
|
-
moveFocusToChipOption(0, 'first', listboxRef.current);
|
|
117
|
-
} else if (inputRef.current) {
|
|
115
|
+
if (inputRef.current) {
|
|
118
116
|
inputRef.current.focus();
|
|
119
117
|
}
|
|
120
118
|
};
|
|
@@ -144,8 +142,8 @@ getRef, id: idProp, inputValue = DEFAULT_INPUT_VALUE, placeholder, disabled, rea
|
|
|
144
142
|
'Component': 'div',
|
|
145
143
|
'value': option.value,
|
|
146
144
|
'label': option.label,
|
|
147
|
-
'disabled': disabled,
|
|
148
|
-
'readOnly': readOnly,
|
|
145
|
+
'disabled': option.disabled || disabled,
|
|
146
|
+
'readOnly': option.readOnly || readOnly,
|
|
149
147
|
'className': styles['ChipsInputBase__chip'],
|
|
150
148
|
'onRemove': handleChipRemove,
|
|
151
149
|
// чтобы можно было легче найти этот чип в DOM
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ChipsInputBase/ChipsInputBase.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { isHTMLElement } from '@vkontakte/vkui-floating-ui/utils/dom';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { getHorizontalFocusGoTo, Keys } from '../../lib/accessibility';\nimport {\n contains as checkTargetIsInputEl,\n contains,\n getActiveElementByAnotherElement,\n} from '../../lib/dom';\nimport { FormField } from '../FormField/FormField';\nimport { Text } from '../Typography/Text/Text';\nimport { DEFAULT_INPUT_VALUE, DEFAULT_VALUE, renderChipDefault } from './constants';\nimport {\n getChipOptionIndexByHTMLElement,\n getChipOptionIndexByValueProp,\n getChipOptionValueByHTMLElement,\n getNextChipOptionIndexByNavigateToProp,\n isInputValueEmpty,\n} from './helpers';\nimport type { ChipOption, ChipOptionValue, ChipsInputBasePrivateProps, NavigateTo } from './types';\nimport styles from './ChipsInputBase.module.css';\n\nconst sizeYClassNames = {\n none: styles['ChipsInputBase--sizeY-none'],\n compact: styles['ChipsInputBase--sizeY-compact'],\n} as const;\n\nexport const ChipsInputBase = <O extends ChipOption>({\n // FormFieldProps\n getRootRef,\n style,\n className,\n before,\n after,\n status,\n mode,\n\n // option\n value = DEFAULT_VALUE,\n onAddChipOption,\n onRemoveChipOption: onRemoveChipOptionProp,\n renderChip = renderChipDefault,\n\n // input\n getRef,\n id: idProp,\n inputValue = DEFAULT_INPUT_VALUE,\n placeholder,\n disabled,\n readOnly,\n addOnBlur,\n onBlur,\n onInputChange,\n ...restProps\n}: ChipsInputBasePrivateProps<O>) => {\n const { sizeY = 'none' } = useAdaptivity();\n const idGenerated = React.useId();\n const inputRef = useExternRef(getRef);\n const listboxRef = React.useRef<HTMLDivElement>(null);\n\n const valueLength = value.length;\n const withPlaceholder = valueLength === 0;\n const [lastFocusedChipOptionIndex, setLastFocusedChipOptionIndex] = React.useState(0);\n\n const resetChipOptionFocusToInputEl = (inputEl: HTMLInputElement) => {\n setLastFocusedChipOptionIndex(0);\n inputEl.focus();\n };\n\n const moveFocusToChipOption = (\n currentIndex: number,\n navigateTo: NavigateTo,\n listboxEl: HTMLElement,\n ) => {\n const index = getNextChipOptionIndexByNavigateToProp(currentIndex, navigateTo, valueLength);\n // eslint-disable-next-line no-restricted-properties\n const foundEl = listboxEl.querySelector<HTMLElement>(`[data-index=\"${index}\"]`);\n\n if (foundEl) {\n setLastFocusedChipOptionIndex(index);\n foundEl.focus();\n }\n };\n\n const removeChipOption = (o: O | ChipOptionValue, index: number) => {\n /* istanbul ignore if: невозможный кейс (в SSR вызова этой функции не будет) */\n if (!inputRef.current || !listboxRef.current) {\n return;\n }\n\n if (valueLength > 1) {\n if (index === valueLength - 1) {\n moveFocusToChipOption(index, 'prev', listboxRef.current);\n } else {\n moveFocusToChipOption(index, 'next', listboxRef.current);\n }\n } else {\n resetChipOptionFocusToInputEl(inputRef.current);\n }\n\n onRemoveChipOptionProp(o);\n };\n\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n const targetEl = event.target;\n /* istanbul ignore if: невозможный кейс (в SSR вызова этой функции не будет) */\n if (event.defaultPrevented || !listboxRef.current || !isHTMLElement(targetEl)) {\n return;\n }\n\n switch (event.key) {\n case Keys.ENTER: {\n if (\n !readOnly &&\n checkTargetIsInputEl(targetEl, inputRef.current) &&\n inputRef.current &&\n !isInputValueEmpty(inputRef.current)\n ) {\n event.preventDefault();\n onAddChipOption(inputRef.current.value);\n }\n break;\n }\n case Keys.DELETE:\n case Keys.BACKSPACE: {\n if (!readOnly && valueLength > 0) {\n if (!checkTargetIsInputEl(targetEl, inputRef.current)) {\n event.preventDefault();\n removeChipOption(\n getChipOptionValueByHTMLElement(targetEl),\n getChipOptionIndexByHTMLElement(targetEl),\n );\n } else if (event.key === Keys.BACKSPACE && isInputValueEmpty(inputRef.current)) {\n event.preventDefault();\n moveFocusToChipOption(\n getChipOptionIndexByHTMLElement(targetEl),\n 'last',\n listboxRef.current,\n );\n }\n }\n break;\n }\n case Keys.ARROW_UP:\n case Keys.ARROW_LEFT:\n case Keys.ARROW_DOWN:\n case Keys.ARROW_RIGHT: {\n if (valueLength !== 0 && !checkTargetIsInputEl(targetEl, inputRef.current)) {\n event.preventDefault();\n moveFocusToChipOption(\n getChipOptionIndexByHTMLElement(targetEl),\n getHorizontalFocusGoTo(event.key),\n listboxRef.current,\n );\n }\n break;\n }\n }\n };\n\n const handleInputBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n if (onBlur) {\n onBlur(event);\n }\n\n if (addOnBlur && !event.defaultPrevented && inputRef.current) {\n onAddChipOption(inputRef.current.value);\n }\n };\n\n const handleChipRemove = (event: React.MouseEvent, v: ChipOptionValue) => {\n event.preventDefault();\n event.stopPropagation();\n removeChipOption(v, getChipOptionIndexByValueProp(v, value));\n };\n\n const handleRootClick = (event: React.MouseEvent<HTMLDivElement>) => {\n if (contains(event.currentTarget, getActiveElementByAnotherElement(event.currentTarget))) {\n return;\n }\n\n if (valueLength > 0 && listboxRef.current) {\n moveFocusToChipOption(0, 'first', listboxRef.current);\n } else if (inputRef.current) {\n inputRef.current.focus();\n }\n };\n\n return (\n <FormField\n Component=\"div\"\n getRootRef={getRootRef}\n style={style}\n disabled={disabled}\n before={before}\n after={after}\n status={status}\n mode={mode}\n className={className}\n onClick={disabled ? undefined : handleRootClick}\n >\n <div\n className={classNames(\n styles['ChipsInputBase'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n withPlaceholder && styles['ChipsInputBase--hasPlaceholder'],\n )}\n // для a11y\n ref={listboxRef}\n role=\"listbox\"\n aria-orientation=\"horizontal\"\n aria-disabled={disabled}\n aria-readonly={readOnly}\n onKeyDown={disabled ? undefined : handleListboxKeyDown}\n >\n {value.map((option, index) => (\n <React.Fragment key={`${typeof option.value}-${option.label}`}>\n {renderChip(\n {\n 'Component': 'div',\n 'value': option.value,\n 'label': option.label,\n 'disabled': disabled,\n 'readOnly': readOnly,\n 'className': styles['ChipsInputBase__chip'],\n 'onRemove': handleChipRemove,\n // чтобы можно было легче найти этот чип в DOM\n 'data-index': index,\n 'data-value': option.value,\n // для a11y\n 'tabIndex': lastFocusedChipOptionIndex === index ? 0 : -1,\n 'role': 'option',\n 'aria-selected': true,\n 'aria-posinset': index + 1,\n 'aria-setsize': valueLength,\n },\n option,\n )}\n </React.Fragment>\n ))}\n <Text\n autoCapitalize=\"none\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n {...restProps}\n Component=\"input\"\n type=\"text\"\n id={idProp || `chips-input-base-generated-id-${idGenerated}`}\n getRootRef={inputRef}\n className={styles['ChipsInputBase__el']}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={withPlaceholder ? placeholder : undefined}\n value={inputValue}\n onChange={onInputChange}\n onBlur={handleInputBlur}\n />\n </div>\n </FormField>\n );\n};\n"],"names":["React","classNames","isHTMLElement","useAdaptivity","useExternRef","getHorizontalFocusGoTo","Keys","contains","checkTargetIsInputEl","getActiveElementByAnotherElement","FormField","Text","DEFAULT_INPUT_VALUE","DEFAULT_VALUE","renderChipDefault","getChipOptionIndexByHTMLElement","getChipOptionIndexByValueProp","getChipOptionValueByHTMLElement","getNextChipOptionIndexByNavigateToProp","isInputValueEmpty","styles","sizeYClassNames","none","compact","ChipsInputBase","getRootRef","style","className","before","after","status","mode","value","onAddChipOption","onRemoveChipOption","onRemoveChipOptionProp","renderChip","getRef","id","idProp","inputValue","placeholder","disabled","readOnly","addOnBlur","onBlur","onInputChange","restProps","sizeY","idGenerated","useId","inputRef","listboxRef","useRef","valueLength","length","withPlaceholder","lastFocusedChipOptionIndex","setLastFocusedChipOptionIndex","useState","resetChipOptionFocusToInputEl","inputEl","focus","moveFocusToChipOption","currentIndex","navigateTo","listboxEl","index","foundEl","querySelector","removeChipOption","o","current","handleListboxKeyDown","event","targetEl","target","defaultPrevented","key","ENTER","preventDefault","DELETE","BACKSPACE","ARROW_UP","ARROW_LEFT","ARROW_DOWN","ARROW_RIGHT","handleInputBlur","handleChipRemove","v","stopPropagation","handleRootClick","currentTarget","Component","onClick","undefined","div","ref","role","aria-orientation","aria-disabled","aria-readonly","onKeyDown","map","option","Fragment","label","autoCapitalize","autoComplete","autoCorrect","spellCheck","type","onChange"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ChipsInputBase/ChipsInputBase.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { isHTMLElement } from '@vkontakte/vkui-floating-ui/utils/dom';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { getHorizontalFocusGoTo, Keys } from '../../lib/accessibility';\nimport {\n contains as checkTargetIsInputEl,\n contains,\n getActiveElementByAnotherElement,\n} from '../../lib/dom';\nimport { FormField } from '../FormField/FormField';\nimport { Text } from '../Typography/Text/Text';\nimport { DEFAULT_INPUT_VALUE, DEFAULT_VALUE, renderChipDefault } from './constants';\nimport {\n getChipOptionIndexByHTMLElement,\n getChipOptionIndexByValueProp,\n getChipOptionValueByHTMLElement,\n getNextChipOptionIndexByNavigateToProp,\n isInputValueEmpty,\n} from './helpers';\nimport type { ChipOption, ChipOptionValue, ChipsInputBasePrivateProps, NavigateTo } from './types';\nimport styles from './ChipsInputBase.module.css';\n\nconst sizeYClassNames = {\n none: styles['ChipsInputBase--sizeY-none'],\n compact: styles['ChipsInputBase--sizeY-compact'],\n} as const;\n\nexport const ChipsInputBase = <O extends ChipOption>({\n // FormFieldProps\n getRootRef,\n style,\n className,\n before,\n after,\n status,\n mode,\n\n // option\n value = DEFAULT_VALUE,\n onAddChipOption,\n onRemoveChipOption: onRemoveChipOptionProp,\n renderChip = renderChipDefault,\n\n // input\n getRef,\n id: idProp,\n inputValue = DEFAULT_INPUT_VALUE,\n placeholder,\n disabled,\n readOnly,\n addOnBlur,\n onBlur,\n onInputChange,\n ...restProps\n}: ChipsInputBasePrivateProps<O>) => {\n const { sizeY = 'none' } = useAdaptivity();\n const idGenerated = React.useId();\n const inputRef = useExternRef(getRef);\n const listboxRef = React.useRef<HTMLDivElement>(null);\n\n const valueLength = value.length;\n const withPlaceholder = valueLength === 0;\n const [lastFocusedChipOptionIndex, setLastFocusedChipOptionIndex] = React.useState(0);\n\n const resetChipOptionFocusToInputEl = (inputEl: HTMLInputElement) => {\n setLastFocusedChipOptionIndex(0);\n inputEl.focus();\n };\n\n const moveFocusToChipOption = (\n currentIndex: number,\n navigateTo: NavigateTo,\n listboxEl: HTMLElement,\n ) => {\n const index = getNextChipOptionIndexByNavigateToProp(currentIndex, navigateTo, valueLength);\n // eslint-disable-next-line no-restricted-properties\n const foundEl = listboxEl.querySelector<HTMLElement>(`[data-index=\"${index}\"]`);\n\n if (foundEl) {\n setLastFocusedChipOptionIndex(index);\n foundEl.focus();\n }\n };\n\n const removeChipOption = (o: O | ChipOptionValue, index: number) => {\n /* istanbul ignore if: невозможный кейс (в SSR вызова этой функции не будет) */\n if (!inputRef.current || !listboxRef.current) {\n return;\n }\n\n if (valueLength > 1) {\n if (index === valueLength - 1) {\n moveFocusToChipOption(index, 'prev', listboxRef.current);\n } else {\n moveFocusToChipOption(index, 'next', listboxRef.current);\n }\n } else {\n resetChipOptionFocusToInputEl(inputRef.current);\n }\n\n onRemoveChipOptionProp(o);\n };\n\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n const targetEl = event.target;\n /* istanbul ignore if: невозможный кейс (в SSR вызова этой функции не будет) */\n if (event.defaultPrevented || !listboxRef.current || !isHTMLElement(targetEl)) {\n return;\n }\n\n switch (event.key) {\n case Keys.ENTER: {\n if (\n !readOnly &&\n checkTargetIsInputEl(targetEl, inputRef.current) &&\n inputRef.current &&\n !isInputValueEmpty(inputRef.current)\n ) {\n event.preventDefault();\n onAddChipOption(inputRef.current.value);\n }\n break;\n }\n case Keys.DELETE:\n case Keys.BACKSPACE: {\n if (!readOnly && valueLength > 0) {\n if (!checkTargetIsInputEl(targetEl, inputRef.current)) {\n event.preventDefault();\n removeChipOption(\n getChipOptionValueByHTMLElement(targetEl),\n getChipOptionIndexByHTMLElement(targetEl),\n );\n } else if (event.key === Keys.BACKSPACE && isInputValueEmpty(inputRef.current)) {\n event.preventDefault();\n moveFocusToChipOption(\n getChipOptionIndexByHTMLElement(targetEl),\n 'last',\n listboxRef.current,\n );\n }\n }\n break;\n }\n case Keys.ARROW_UP:\n case Keys.ARROW_LEFT:\n case Keys.ARROW_DOWN:\n case Keys.ARROW_RIGHT: {\n if (valueLength !== 0 && !checkTargetIsInputEl(targetEl, inputRef.current)) {\n event.preventDefault();\n moveFocusToChipOption(\n getChipOptionIndexByHTMLElement(targetEl),\n getHorizontalFocusGoTo(event.key),\n listboxRef.current,\n );\n }\n break;\n }\n }\n };\n\n const handleInputBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n if (onBlur) {\n onBlur(event);\n }\n\n if (addOnBlur && !event.defaultPrevented && inputRef.current) {\n onAddChipOption(inputRef.current.value);\n }\n };\n\n const handleChipRemove = (event: React.MouseEvent, v: ChipOptionValue) => {\n event.preventDefault();\n event.stopPropagation();\n removeChipOption(v, getChipOptionIndexByValueProp(v, value));\n };\n\n const handleRootClick = (event: React.MouseEvent<HTMLDivElement>) => {\n if (contains(event.currentTarget, getActiveElementByAnotherElement(event.currentTarget))) {\n return;\n }\n\n if (inputRef.current) {\n inputRef.current.focus();\n }\n };\n\n return (\n <FormField\n Component=\"div\"\n getRootRef={getRootRef}\n style={style}\n disabled={disabled}\n before={before}\n after={after}\n status={status}\n mode={mode}\n className={className}\n onClick={disabled ? undefined : handleRootClick}\n >\n <div\n className={classNames(\n styles['ChipsInputBase'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n withPlaceholder && styles['ChipsInputBase--hasPlaceholder'],\n )}\n // для a11y\n ref={listboxRef}\n role=\"listbox\"\n aria-orientation=\"horizontal\"\n aria-disabled={disabled}\n aria-readonly={readOnly}\n onKeyDown={disabled ? undefined : handleListboxKeyDown}\n >\n {value.map((option, index) => (\n <React.Fragment key={`${typeof option.value}-${option.label}`}>\n {renderChip(\n {\n 'Component': 'div',\n 'value': option.value,\n 'label': option.label,\n 'disabled': option.disabled || disabled,\n 'readOnly': option.readOnly || readOnly,\n 'className': styles['ChipsInputBase__chip'],\n 'onRemove': handleChipRemove,\n // чтобы можно было легче найти этот чип в DOM\n 'data-index': index,\n 'data-value': option.value,\n // для a11y\n 'tabIndex': lastFocusedChipOptionIndex === index ? 0 : -1,\n 'role': 'option',\n 'aria-selected': true,\n 'aria-posinset': index + 1,\n 'aria-setsize': valueLength,\n },\n option,\n )}\n </React.Fragment>\n ))}\n <Text\n autoCapitalize=\"none\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n {...restProps}\n Component=\"input\"\n type=\"text\"\n id={idProp || `chips-input-base-generated-id-${idGenerated}`}\n getRootRef={inputRef}\n className={styles['ChipsInputBase__el']}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={withPlaceholder ? placeholder : undefined}\n value={inputValue}\n onChange={onInputChange}\n onBlur={handleInputBlur}\n />\n </div>\n </FormField>\n );\n};\n"],"names":["React","classNames","isHTMLElement","useAdaptivity","useExternRef","getHorizontalFocusGoTo","Keys","contains","checkTargetIsInputEl","getActiveElementByAnotherElement","FormField","Text","DEFAULT_INPUT_VALUE","DEFAULT_VALUE","renderChipDefault","getChipOptionIndexByHTMLElement","getChipOptionIndexByValueProp","getChipOptionValueByHTMLElement","getNextChipOptionIndexByNavigateToProp","isInputValueEmpty","styles","sizeYClassNames","none","compact","ChipsInputBase","getRootRef","style","className","before","after","status","mode","value","onAddChipOption","onRemoveChipOption","onRemoveChipOptionProp","renderChip","getRef","id","idProp","inputValue","placeholder","disabled","readOnly","addOnBlur","onBlur","onInputChange","restProps","sizeY","idGenerated","useId","inputRef","listboxRef","useRef","valueLength","length","withPlaceholder","lastFocusedChipOptionIndex","setLastFocusedChipOptionIndex","useState","resetChipOptionFocusToInputEl","inputEl","focus","moveFocusToChipOption","currentIndex","navigateTo","listboxEl","index","foundEl","querySelector","removeChipOption","o","current","handleListboxKeyDown","event","targetEl","target","defaultPrevented","key","ENTER","preventDefault","DELETE","BACKSPACE","ARROW_UP","ARROW_LEFT","ARROW_DOWN","ARROW_RIGHT","handleInputBlur","handleChipRemove","v","stopPropagation","handleRootClick","currentTarget","Component","onClick","undefined","div","ref","role","aria-orientation","aria-disabled","aria-readonly","onKeyDown","map","option","Fragment","label","autoCapitalize","autoComplete","autoCorrect","spellCheck","type","onChange"],"mappings":"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"}
|
|
@@ -17,9 +17,9 @@ export function getNewOptionDataDefault(value, label) {
|
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
19
|
export function renderChipDefault(props) {
|
|
20
|
-
const {
|
|
20
|
+
const { label, ...rest } = props;
|
|
21
21
|
return /*#__PURE__*/ _jsx(Chip, {
|
|
22
|
-
removable: !disabled,
|
|
22
|
+
removable: !props.disabled,
|
|
23
23
|
...rest,
|
|
24
24
|
children: label
|
|
25
25
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ChipsInputBase/constants.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Chip } from './Chip/Chip';\nimport type { ChipOption, ChipOptionLabel, ChipOptionValue, RenderChipProps } from './types';\n\nexport const DEFAULT_VALUE = [];\n\nexport const DEFAULT_INPUT_VALUE = '';\n\nexport function getOptionValueDefault<O extends ChipOption>(option: O) {\n return option.value;\n}\n\nexport function getOptionLabelDefault<O extends ChipOption>(option: O) {\n return option.label;\n}\n\nexport function getNewOptionDataDefault<O extends ChipOption>(\n value: ChipOptionValue,\n label: ChipOptionLabel,\n): O {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return {\n value,\n label,\n } as O;\n}\n\nexport function renderChipDefault(props: RenderChipProps): React.ReactNode {\n const {
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ChipsInputBase/constants.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Chip } from './Chip/Chip';\nimport type { ChipOption, ChipOptionLabel, ChipOptionValue, RenderChipProps } from './types';\n\nexport const DEFAULT_VALUE = [];\n\nexport const DEFAULT_INPUT_VALUE = '';\n\nexport function getOptionValueDefault<O extends ChipOption>(option: O) {\n return option.value;\n}\n\nexport function getOptionLabelDefault<O extends ChipOption>(option: O) {\n return option.label;\n}\n\nexport function getNewOptionDataDefault<O extends ChipOption>(\n value: ChipOptionValue,\n label: ChipOptionLabel,\n): O {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return {\n value,\n label,\n } as O;\n}\n\nexport function renderChipDefault(props: RenderChipProps): React.ReactNode {\n const { label, ...rest } = props;\n return (\n <Chip removable={!props.disabled} {...rest}>\n {label}\n </Chip>\n );\n}\n"],"names":["React","Chip","DEFAULT_VALUE","DEFAULT_INPUT_VALUE","getOptionValueDefault","option","value","getOptionLabelDefault","label","getNewOptionDataDefault","renderChipDefault","props","rest","removable","disabled"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,IAAI,QAAQ,cAAc;AAGnC,OAAO,MAAMC,gBAAgB,EAAE,CAAC;AAEhC,OAAO,MAAMC,sBAAsB,GAAG;AAEtC,OAAO,SAASC,sBAA4CC,MAAS;IACnE,OAAOA,OAAOC,KAAK;AACrB;AAEA,OAAO,SAASC,sBAA4CF,MAAS;IACnE,OAAOA,OAAOG,KAAK;AACrB;AAEA,OAAO,SAASC,wBACdH,KAAsB,EACtBE,KAAsB;IAEtB,yEAAyE;IACzE,OAAO;QACLF;QACAE;IACF;AACF;AAEA,OAAO,SAASE,kBAAkBC,KAAsB;IACtD,MAAM,EAAEH,KAAK,EAAE,GAAGI,MAAM,GAAGD;IAC3B,qBACE,KAACV;QAAKY,WAAW,CAACF,MAAMG,QAAQ;QAAG,GAAGF,IAAI;kBACvCJ;;AAGP"}
|
|
@@ -120,7 +120,7 @@ const defaultOptions = [];
|
|
|
120
120
|
]);
|
|
121
121
|
const scrollToElement = React.useCallback((index, center = false)=>{
|
|
122
122
|
const dropdown = scrollBoxRef.current;
|
|
123
|
-
const item = dropdown ? dropdown.children[index] : null;
|
|
123
|
+
const item = dropdown && dropdown.firstElementChild ? dropdown.firstElementChild.children[index] : null;
|
|
124
124
|
if (!item || !dropdown) {
|
|
125
125
|
return;
|
|
126
126
|
}
|
|
@@ -401,10 +401,10 @@ const defaultOptions = [];
|
|
|
401
401
|
x: 0,
|
|
402
402
|
y: 0
|
|
403
403
|
});
|
|
404
|
-
const focusOptionOnMouseMove = React.useCallback((e)=>{
|
|
404
|
+
const focusOptionOnMouseMove = React.useCallback((e, index)=>{
|
|
405
405
|
const isMouseChangedPosition = Math.abs(prevMousePositionRef.current.x - e.clientX) >= 1 || Math.abs(prevMousePositionRef.current.y - e.clientY) >= 1;
|
|
406
406
|
if (isMouseChangedPosition) {
|
|
407
|
-
focusOptionByIndex(
|
|
407
|
+
focusOptionByIndex(index, false);
|
|
408
408
|
}
|
|
409
409
|
prevMousePositionRef.current = {
|
|
410
410
|
x: e.clientX,
|
|
@@ -433,7 +433,7 @@ const defaultOptions = [];
|
|
|
433
433
|
// Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,
|
|
434
434
|
// а значит нельзя на них опираться, чтобы запретить обработку такого события.
|
|
435
435
|
// C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.
|
|
436
|
-
onMouseMove: focusOptionOnMouseMove,
|
|
436
|
+
onMouseMove: (e)=>focusOptionOnMouseMove(e, index),
|
|
437
437
|
id: `${popupAriaId}-${option.value}`
|
|
438
438
|
})
|
|
439
439
|
}, `${option.value}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusWithin } from '../../hooks/useFocusWithin';\nimport { useDOM } from '../../lib/dom';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { debounce } from '../../lib/utils';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport { CustomSelectDropdown } from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport {\n CustomSelectClearButton,\n type CustomSelectClearButtonProps,\n} from './CustomSelectClearButton';\nimport { CustomSelectInput } from './CustomSelectInput';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles['CustomSelect--sizeY-none'],\n ['compact']: styles['CustomSelect--sizeY-compact'],\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = <T extends CustomSelectOptionInterface>(options: T[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n value: SelectValue,\n withClear: boolean,\n) {\n if (withClear && value === '') {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = <T extends CustomSelectOptionInterface>(\n options: SelectProps<T>['options'],\n inputValue: string,\n filterFn: SelectProps<T>['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectRenderOption<T extends CustomSelectOptionInterface>\n extends CustomSelectOptionProps {\n option: T;\n}\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n FormFieldProps,\n TrackerOptionsProps {\n /**\n * Если `true`, то при клике на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * Событие изменения текстового поля\n */\n onInputChange?: (e: React.ChangeEvent) => void;\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n /**\n * (e2e) testId кнопки очистки\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n /**\n * (e2e) testId элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n nativeSelectTestId?: string;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n) {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection = 'bottom',\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions as OptionInterfaceT[],\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n icon: iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n noMaxHeight = false,\n ['aria-labelledby']: ariaLabelledBy,\n clearButtonTestId,\n nativeSelectTestId,\n defaultValue,\n required,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n () => props.value ?? defaultValue ?? (allowClearButton ? '' : undefined),\n );\n const [popperPlacement, setPopperPlacement] = React.useState<PlacementWithAuto | undefined>(\n popupDirection,\n );\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? defaultValue, allowClearButton),\n );\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue((nativeSelectValue) => props.value ?? nativeSelectValue);\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === '')\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes('top')\n ? styles['CustomSelect--pop-up']\n : styles['CustomSelect--pop-down'])) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = dropdown ? (dropdown.children[index] as HTMLElement) : null;\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 = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseMove`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n const fullInput = keyboardInput + key;\n\n setKeyboardInput(fullInput);\n },\n [keyboardInput, opened, resetFocusedOption],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n resetFocusedOption();\n onClose?.();\n }, [onClose, resetKeyboardInput, resetFocusedOption]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n\n setNativeSelectValue(item?.value);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value = props.value ?? nativeSelectValue ?? defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value, allowClearButton));\n },\n [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n defaultValue,\n props.value,\n searchable,\n allowClearButton,\n ],\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value,\n allowClearButton,\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n onInputChangeProp && onInputChangeProp(e);\n\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp, allowClearButton],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Backspace':\n case 'Delete': {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n\n break;\n }\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n resetFocusedOption,\n ],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const prevMousePositionRef = React.useRef<{\n x: React.MouseEvent['clientX'];\n y: React.MouseEvent['clientY'];\n }>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const isMouseChangedPosition =\n Math.abs(prevMousePositionRef.current.x - e.clientX) >= 1 ||\n Math.abs(prevMousePositionRef.current.y - e.clientY) >= 1;\n\n if (isMouseChangedPosition) {\n focusOptionByIndex(\n Array.prototype.indexOf.call(e.currentTarget.parentNode?.children, e.currentTarget),\n false,\n );\n }\n\n prevMousePositionRef.current = { x: e.clientX, y: e.clientY };\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: focusOptionOnMouseMove,\n id: `${popupAriaId}-${option.value}`,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n focusOptionOnMouseMove,\n renderOptionProp,\n selectedOptionIndex,\n popupAriaId,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n options.map(renderOption)\n ) : (\n <Footnote className={styles['CustomSelect__empty']}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const selectInputRef = React.useRef<HTMLInputElement | null>(null);\n const focusOnInputTimerRef = React.useRef<ReturnType<typeof setTimeout>>();\n const focusOnInput = React.useCallback(() => {\n clearTimeout(focusOnInputTimerRef.current);\n\n focusOnInputTimerRef.current = setTimeout(() => {\n selectInputRef.current && selectInputRef.current.focus();\n }, 0);\n }, []);\n useIsomorphicLayoutEffect(function clearFocusOnInputTimer() {\n return () => {\n clearTimeout(focusOnInputTimerRef.current);\n };\n }, []);\n\n const controlledValueSet = isControlledOutside && props.value !== '';\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== '';\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles['CustomSelect--clear-icon'] : undefined}\n onClick={function clearSelectState() {\n setNativeSelectValue('');\n setInputValue('');\n focusOnInput();\n }}\n disabled={restProps.disabled}\n data-testid={clearButtonTestId}\n />\n );\n }, [\n clearButtonShown,\n ClearButton,\n iconProp,\n restProps.disabled,\n clearButtonTestId,\n focusOnInput,\n ]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles['CustomSelect__dropdown-icon'] : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n focusOnInput();\n }\n }\n },\n [document, focusOnInput],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantOptionIndex: undefined | number =\n focusedOptionIndex !== -1 ? focusedOptionIndex : undefined;\n const ariaActiveDescendantId =\n ariaActiveDescendantOptionIndex !== undefined\n ? options[ariaActiveDescendantOptionIndex] && options[ariaActiveDescendantOptionIndex].value\n : null;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-owns': popupAriaId,\n 'aria-expanded': opened,\n ['aria-activedescendant']:\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n const focusWithin = useFocusWithin(handleRootRef);\n\n return (\n <div\n className={classNames(\n styles['CustomSelect'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n >\n {focusWithin && selected && !opened && (\n <VisuallyHidden aria-live=\"polite\">{selected.label}</VisuallyHidden>\n )}\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n {...restProps}\n {...selectInputAriaProps}\n getRef={selectInputRef}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n readOnly={!searchable}\n fetching={fetching}\n value={inputValue}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDownSelect}\n onChange={onInputChange}\n onClick={onClick}\n before={before}\n after={afterIcons}\n selectType={selectType}\n >\n {selected?.label}\n </CustomSelectInput>\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles['CustomSelect__control']}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {allowClearButton && <option key=\"\" value=\"\" />}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </div>\n );\n}\n"],"names":["React","classNames","useAdaptivity","useExternRef","useFocusWithin","useDOM","defaultFilterFn","useIsomorphicLayoutEffect","debounce","warnOnce","CustomSelectDropdown","CustomSelectOption","DropdownIcon","Footnote","VisuallyHidden","CustomSelectClearButton","CustomSelectInput","styles","sizeYClassNames","none","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","withClear","Number","filter","inputValue","filterFn","defaultOptions","CustomSelect","opened","setOpened","useState","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChange","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","icon","iconProp","ClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","restProps","process","env","NODE_ENV","sizeY","containerRef","useRef","handleRootRef","scrollBoxRef","selectElRef","focusedOptionIndex","setFocusedOptionIndex","isControlledOutside","setIsControlledOutside","undefined","setInputValue","nativeSelectValue","setNativeSelectValue","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","scrollToElement","useCallback","index","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","scrollTo","isValidIndex","setScrollBoxRef","ref","keyboardInput","setKeyboardInput","resetKeyboardInput","resetFocusedOption","onKeyboardInput","key","fullInput","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","onFocus","onClick","handleKeyUp","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onNativeSelectChange","newSelectedOptionIndex","currentTarget","target","areOptionsShown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","prevMousePositionRef","x","y","focusOptionOnMouseMove","isMouseChangedPosition","Math","abs","clientX","clientY","popupAriaId","useId","hovered","Fragment","label","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","selectInputRef","focusOnInputTimerRef","focusOnInput","clearTimeout","setTimeout","focus","clearFocusOnInputTimer","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","clearSelectState","data-testid","afterIcons","document","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantOptionIndex","ariaActiveDescendantId","selectInputAriaProps","focusWithin","div","aria-live","autoComplete","autoCapitalize","autoCorrect","spellCheck","readOnly","onKeyUp","onKeyDown","after","select","aria-hidden","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby","tabIndex"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusWithin } from '../../hooks/useFocusWithin';\nimport { useDOM } from '../../lib/dom';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { debounce } from '../../lib/utils';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport { CustomSelectDropdown } from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport {\n CustomSelectClearButton,\n type CustomSelectClearButtonProps,\n} from './CustomSelectClearButton';\nimport { CustomSelectInput } from './CustomSelectInput';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles['CustomSelect--sizeY-none'],\n ['compact']: styles['CustomSelect--sizeY-compact'],\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = <T extends CustomSelectOptionInterface>(options: T[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n value: SelectValue,\n withClear: boolean,\n) {\n if (withClear && value === '') {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = <T extends CustomSelectOptionInterface>(\n options: SelectProps<T>['options'],\n inputValue: string,\n filterFn: SelectProps<T>['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectRenderOption<T extends CustomSelectOptionInterface>\n extends CustomSelectOptionProps {\n option: T;\n}\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n FormFieldProps,\n TrackerOptionsProps {\n /**\n * Если `true`, то при клике на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * Событие изменения текстового поля\n */\n onInputChange?: (e: React.ChangeEvent) => void;\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n /**\n * (e2e) testId кнопки очистки\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n /**\n * (e2e) testId элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n nativeSelectTestId?: string;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n) {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection = 'bottom',\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions as OptionInterfaceT[],\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n icon: iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n noMaxHeight = false,\n ['aria-labelledby']: ariaLabelledBy,\n clearButtonTestId,\n nativeSelectTestId,\n defaultValue,\n required,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n () => props.value ?? defaultValue ?? (allowClearButton ? '' : undefined),\n );\n const [popperPlacement, setPopperPlacement] = React.useState<PlacementWithAuto | undefined>(\n popupDirection,\n );\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? defaultValue, allowClearButton),\n );\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue((nativeSelectValue) => props.value ?? nativeSelectValue);\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === '')\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes('top')\n ? styles['CustomSelect--pop-up']\n : styles['CustomSelect--pop-down'])) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item =\n dropdown && dropdown.firstElementChild\n ? (dropdown.firstElementChild.children[index] as HTMLElement)\n : null;\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 = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseMove`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n const fullInput = keyboardInput + key;\n\n setKeyboardInput(fullInput);\n },\n [keyboardInput, opened, resetFocusedOption],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n resetFocusedOption();\n onClose?.();\n }, [onClose, resetKeyboardInput, resetFocusedOption]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n\n setNativeSelectValue(item?.value);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value = props.value ?? nativeSelectValue ?? defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value, allowClearButton));\n },\n [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n defaultValue,\n props.value,\n searchable,\n allowClearButton,\n ],\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value,\n allowClearButton,\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n onInputChangeProp && onInputChangeProp(e);\n\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp, allowClearButton],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Backspace':\n case 'Delete': {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n\n break;\n }\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n resetFocusedOption,\n ],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const prevMousePositionRef = React.useRef<{\n x: React.MouseEvent['clientX'];\n y: React.MouseEvent['clientY'];\n }>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n const isMouseChangedPosition =\n Math.abs(prevMousePositionRef.current.x - e.clientX) >= 1 ||\n Math.abs(prevMousePositionRef.current.y - e.clientY) >= 1;\n\n if (isMouseChangedPosition) {\n focusOptionByIndex(index, false);\n }\n\n prevMousePositionRef.current = { x: e.clientX, y: e.clientY };\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n focusOptionOnMouseMove,\n renderOptionProp,\n selectedOptionIndex,\n popupAriaId,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n options.map(renderOption)\n ) : (\n <Footnote className={styles['CustomSelect__empty']}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const selectInputRef = React.useRef<HTMLInputElement | null>(null);\n const focusOnInputTimerRef = React.useRef<ReturnType<typeof setTimeout>>();\n const focusOnInput = React.useCallback(() => {\n clearTimeout(focusOnInputTimerRef.current);\n\n focusOnInputTimerRef.current = setTimeout(() => {\n selectInputRef.current && selectInputRef.current.focus();\n }, 0);\n }, []);\n useIsomorphicLayoutEffect(function clearFocusOnInputTimer() {\n return () => {\n clearTimeout(focusOnInputTimerRef.current);\n };\n }, []);\n\n const controlledValueSet = isControlledOutside && props.value !== '';\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== '';\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles['CustomSelect--clear-icon'] : undefined}\n onClick={function clearSelectState() {\n setNativeSelectValue('');\n setInputValue('');\n focusOnInput();\n }}\n disabled={restProps.disabled}\n data-testid={clearButtonTestId}\n />\n );\n }, [\n clearButtonShown,\n ClearButton,\n iconProp,\n restProps.disabled,\n clearButtonTestId,\n focusOnInput,\n ]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles['CustomSelect__dropdown-icon'] : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n focusOnInput();\n }\n }\n },\n [document, focusOnInput],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantOptionIndex: undefined | number =\n focusedOptionIndex !== -1 ? focusedOptionIndex : undefined;\n const ariaActiveDescendantId =\n ariaActiveDescendantOptionIndex !== undefined\n ? options[ariaActiveDescendantOptionIndex] && options[ariaActiveDescendantOptionIndex].value\n : null;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-owns': popupAriaId,\n 'aria-expanded': opened,\n ['aria-activedescendant']:\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n const focusWithin = useFocusWithin(handleRootRef);\n\n return (\n <div\n className={classNames(\n styles['CustomSelect'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n >\n {focusWithin && selected && !opened && (\n <VisuallyHidden aria-live=\"polite\">{selected.label}</VisuallyHidden>\n )}\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n {...restProps}\n {...selectInputAriaProps}\n getRef={selectInputRef}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n readOnly={!searchable}\n fetching={fetching}\n value={inputValue}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDownSelect}\n onChange={onInputChange}\n onClick={onClick}\n before={before}\n after={afterIcons}\n selectType={selectType}\n >\n {selected?.label}\n </CustomSelectInput>\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles['CustomSelect__control']}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {allowClearButton && <option key=\"\" value=\"\" />}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </div>\n );\n}\n"],"names":["React","classNames","useAdaptivity","useExternRef","useFocusWithin","useDOM","defaultFilterFn","useIsomorphicLayoutEffect","debounce","warnOnce","CustomSelectDropdown","CustomSelectOption","DropdownIcon","Footnote","VisuallyHidden","CustomSelectClearButton","CustomSelectInput","styles","sizeYClassNames","none","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","withClear","Number","filter","inputValue","filterFn","defaultOptions","CustomSelect","opened","setOpened","useState","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChange","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","icon","iconProp","ClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","restProps","process","env","NODE_ENV","sizeY","containerRef","useRef","handleRootRef","scrollBoxRef","selectElRef","focusedOptionIndex","setFocusedOptionIndex","isControlledOutside","setIsControlledOutside","undefined","setInputValue","nativeSelectValue","setNativeSelectValue","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","scrollToElement","useCallback","index","center","dropdown","firstElementChild","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","scrollTo","isValidIndex","setScrollBoxRef","ref","keyboardInput","setKeyboardInput","resetKeyboardInput","resetFocusedOption","onKeyboardInput","key","fullInput","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","onFocus","onClick","handleKeyUp","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onNativeSelectChange","newSelectedOptionIndex","currentTarget","target","areOptionsShown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","prevMousePositionRef","x","y","focusOptionOnMouseMove","isMouseChangedPosition","Math","abs","clientX","clientY","popupAriaId","useId","hovered","Fragment","label","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","selectInputRef","focusOnInputTimerRef","focusOnInput","clearTimeout","setTimeout","focus","clearFocusOnInputTimer","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","clearSelectState","data-testid","afterIcons","document","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantOptionIndex","ariaActiveDescendantId","selectInputAriaProps","focusWithin","div","aria-live","autoComplete","autoCapitalize","autoCorrect","spellCheck","readOnly","onKeyUp","onKeyDown","after","select","aria-hidden","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby","tabIndex"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FocusTrap.d.ts","sourceRoot":"","sources":["../../../../src/components/FocusTrap/FocusTrap.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"FocusTrap.d.ts","sourceRoot":"","sources":["../../../../src/components/FocusTrap/FocusTrap.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiC,MAAM,OAAO,CAAC;AAYzE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGvD,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CACjE,SAAQ,iBAAiB,CAAC,CAAC,CAAC,EAC1B,UAAU,CAAC,CAAC,CAAC,EACb,YAAY;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,WAAW,+HAW5C,cAAc,CAAC,CAAC,CAAC,4CAyMnB,CAAC"}
|