@pixum/combobox 4.0.21-alpha.96 → 4.0.22
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/lib/ComboBox.d.ts +4 -10
- package/lib/ComboBox.js +28 -67
- package/lib/ComboBox.js.map +1 -1
- package/lib/ComboboxOptions/Options.d.ts +0 -1
- package/lib/ComboboxOptions/Options.js +17 -22
- package/lib/ComboboxOptions/Options.js.map +1 -1
- package/lib/ComboboxOptions/OptionsGroup.d.ts +0 -1
- package/lib/ComboboxOptions/OptionsGroup.js +7 -48
- package/lib/ComboboxOptions/OptionsGroup.js.map +1 -1
- package/lib/ComboboxOptions/index.js +16 -61
- package/lib/ComboboxOptions/index.js.map +1 -1
- package/lib/helper/calculateListMaxHeight.js +5 -9
- package/lib/helper/calculateListMaxHeight.js.map +1 -1
- package/lib/helper/scrollOptionToViewport.js +9 -12
- package/lib/helper/scrollOptionToViewport.js.map +1 -1
- package/lib/helper/useIsDesktopScreenWidth.js +9 -11
- package/lib/helper/useIsDesktopScreenWidth.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/styles.css +1 -1
- package/lib/types.d.ts +5 -39
- package/package.json +6 -3
- package/lib/helper/index.d.ts +0 -2
- package/lib/helper/index.js +0 -3
- package/lib/helper/index.js.map +0 -1
- package/lib/hooks/index.d.ts +0 -1
- package/lib/hooks/index.js +0 -2
- package/lib/hooks/index.js.map +0 -1
- package/lib/hooks/useIsDesktopScreenWidth.d.ts +0 -1
- package/lib/hooks/useIsDesktopScreenWidth.js +0 -36
- package/lib/hooks/useIsDesktopScreenWidth.js.map +0 -1
- package/lib/partials/ComboBoxGroupedOptions.d.ts +0 -13
- package/lib/partials/ComboBoxGroupedOptions.js +0 -10
- package/lib/partials/ComboBoxGroupedOptions.js.map +0 -1
- package/lib/partials/ComboBoxMenu.d.ts +0 -3
- package/lib/partials/ComboBoxMenu.js +0 -22
- package/lib/partials/ComboBoxMenu.js.map +0 -1
- package/lib/partials/ComboBoxOptions.d.ts +0 -10
- package/lib/partials/ComboBoxOptions.js +0 -29
- package/lib/partials/ComboBoxOptions.js.map +0 -1
- package/lib/partials/ComboBoxOptionsItems.d.ts +0 -24
- package/lib/partials/ComboBoxOptionsItems.js +0 -24
- package/lib/partials/ComboBoxOptionsItems.js.map +0 -1
- package/lib/partials/ComboBoxOptionsWithGrouping.d.ts +0 -26
- package/lib/partials/ComboBoxOptionsWithGrouping.js +0 -14
- package/lib/partials/ComboBoxOptionsWithGrouping.js.map +0 -1
- package/lib/partials/index.d.ts +0 -3
- package/lib/partials/index.js +0 -4
- package/lib/partials/index.js.map +0 -1
- package/lib/utils/calculateListMaxHeight.d.ts +0 -7
- package/lib/utils/calculateListMaxHeight.js +0 -14
- package/lib/utils/calculateListMaxHeight.js.map +0 -1
- package/lib/utils/index.d.ts +0 -2
- package/lib/utils/index.js +0 -3
- package/lib/utils/index.js.map +0 -1
- package/lib/utils/scrollOptionToViewport.d.ts +0 -7
- package/lib/utils/scrollOptionToViewport.js +0 -38
- package/lib/utils/scrollOptionToViewport.js.map +0 -1
package/lib/ComboBox.d.ts
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ComboBoxProps } from './types';
|
|
2
3
|
import './styles.css';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* Adapts to mobile (bottom sheet) and desktop (dropdown) viewports.
|
|
6
|
-
* Supports both flat and grouped options, search functionality, and keyboard navigation.
|
|
7
|
-
*
|
|
8
|
-
* @param props - The props for the ComboBox component
|
|
9
|
-
* @returns A responsive combobox component with search and selection capabilities
|
|
10
|
-
*/
|
|
11
|
-
export declare function ComboBox({ className, name, headline, label, searchPattern, isOpen, options, placeholder, value, inputMode, noResultsText, leadingType, optionDetails, withSearch, theme, setIsOpen, onClick, onChange, onOutsideClick, onOptionItemClick, onSheetClose, }: ComboBoxProps): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
declare const ComboBox: React.FC<ComboBoxProps>;
|
|
5
|
+
export default ComboBox;
|
package/lib/ComboBox.js
CHANGED
|
@@ -1,24 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useEffect, useRef, useState, } from 'react';
|
|
1
|
+
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
4
2
|
import BottomSheet from '@pixum/bottom-sheet';
|
|
5
3
|
import Text, { TextVariant } from '@pixum/text';
|
|
6
4
|
import { useEscapeKeyPress } from '@pixum/utils';
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
5
|
+
import ComboBoxOptions from './ComboboxOptions';
|
|
6
|
+
import { SearchInput } from '@pixum/web-input';
|
|
7
|
+
import { SelectInput } from '@pixum/user-input';
|
|
8
|
+
import useIsDesktopScreenWidth from './helper/useIsDesktopScreenWidth';
|
|
10
9
|
import clsx from 'clsx';
|
|
11
10
|
import ThemeProvider, { DEFAULT_THEME } from '@pixum/theme-provider';
|
|
12
11
|
import './styles.css';
|
|
13
|
-
|
|
14
|
-
* ComboBox component that provides a searchable dropdown with options.
|
|
15
|
-
* Adapts to mobile (bottom sheet) and desktop (dropdown) viewports.
|
|
16
|
-
* Supports both flat and grouped options, search functionality, and keyboard navigation.
|
|
17
|
-
*
|
|
18
|
-
* @param props - The props for the ComboBox component
|
|
19
|
-
* @returns A responsive combobox component with search and selection capabilities
|
|
20
|
-
*/
|
|
21
|
-
export function ComboBox({ className = '', name, headline, label, searchPattern = '', isOpen, options, placeholder, value, inputMode, noResultsText, leadingType, optionDetails, withSearch = true, theme = DEFAULT_THEME, setIsOpen, onClick, onChange, onOutsideClick, onOptionItemClick, onSheetClose, }) {
|
|
12
|
+
const ComboBox = ({ className = '', name, headline, label, searchPattern = '', id, isOpen, options, placeholder, value, inputMode, noResultsText, leadingType, optionDetails, withSearch = true, theme = DEFAULT_THEME, setIsOpen, onClick, onChange, onOutsideClick, onOptionItemClick, onSheetClose, }) => {
|
|
22
13
|
const comboBoxRef = useRef(null);
|
|
23
14
|
const bottomSheetRef = useRef(null);
|
|
24
15
|
const [searchQuery, setSearchQuery] = useState('');
|
|
@@ -29,80 +20,50 @@ export function ComboBox({ className = '', name, headline, label, searchPattern
|
|
|
29
20
|
useEffect(() => {
|
|
30
21
|
!isOpen && (onSheetClose === null || onSheetClose === void 0 ? void 0 : onSheetClose());
|
|
31
22
|
}, [isOpen]);
|
|
32
|
-
/**
|
|
33
|
-
* Handles changes to the search input field
|
|
34
|
-
*
|
|
35
|
-
* @param e - The change event from the input
|
|
36
|
-
*/
|
|
37
23
|
const handleChange = (e) => {
|
|
38
24
|
const { value: searchValue } = e.target;
|
|
39
25
|
setSearchQuery(searchValue);
|
|
40
26
|
onChange === null || onChange === void 0 ? void 0 : onChange(searchValue);
|
|
41
27
|
};
|
|
42
|
-
/**
|
|
43
|
-
* Clears the search input field
|
|
44
|
-
*/
|
|
45
28
|
const handleClearInput = () => {
|
|
46
29
|
setSearchQuery('');
|
|
47
30
|
};
|
|
48
|
-
/**
|
|
49
|
-
* Clears the search input and closes the dropdown/bottom sheet
|
|
50
|
-
*/
|
|
51
31
|
const clearAndClose = () => {
|
|
52
32
|
setSearchQuery('');
|
|
53
33
|
setIsOpen(false);
|
|
54
34
|
};
|
|
55
35
|
useEscapeKeyPress(clearAndClose, isOpen);
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
if (isOutside) {
|
|
65
|
-
clearAndClose();
|
|
66
|
-
onOutsideClick === null || onOutsideClick === void 0 ? void 0 : onOutsideClick();
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
// Add listener after a small delay to avoid closing immediately on open
|
|
70
|
-
const timeoutId = setTimeout(() => {
|
|
71
|
-
document.addEventListener('mousedown', handleDocumentClick);
|
|
72
|
-
}, 100);
|
|
73
|
-
return () => {
|
|
74
|
-
clearTimeout(timeoutId);
|
|
75
|
-
document.removeEventListener('mousedown', handleDocumentClick);
|
|
76
|
-
};
|
|
77
|
-
}, [isDesktop, isOpen, onOutsideClick]);
|
|
78
|
-
/**
|
|
79
|
-
* Handles click on an option item
|
|
80
|
-
*
|
|
81
|
-
* @param optionValue - The value of the clicked option
|
|
82
|
-
*/
|
|
36
|
+
const handleClickOutside = useCallback((event) => {
|
|
37
|
+
var _a;
|
|
38
|
+
const node = event === null || event === void 0 ? void 0 : event.target;
|
|
39
|
+
const isOutside = !((_a = comboBoxRef.current) === null || _a === void 0 ? void 0 : _a.contains(node));
|
|
40
|
+
setPlaceholder(placeholder);
|
|
41
|
+
isOutside && isDesktop && clearAndClose();
|
|
42
|
+
isOutside && isDesktop && (onOutsideClick === null || onOutsideClick === void 0 ? void 0 : onOutsideClick());
|
|
43
|
+
}, [comboBoxRef, bottomSheetRef, placeholder]);
|
|
83
44
|
const handleOptionItemClick = (optionValue) => {
|
|
84
45
|
onOptionItemClick === null || onOptionItemClick === void 0 ? void 0 : onOptionItemClick(optionValue);
|
|
85
46
|
};
|
|
86
|
-
/**
|
|
87
|
-
* Handles click on the input field
|
|
88
|
-
*/
|
|
89
47
|
const handleOnClick = () => {
|
|
90
48
|
onClick === null || onClick === void 0 ? void 0 : onClick();
|
|
91
49
|
};
|
|
92
|
-
/**
|
|
93
|
-
* Renders the "no results" message when no options match the search
|
|
94
|
-
*
|
|
95
|
-
* @returns A text component displaying the no results message
|
|
96
|
-
*/
|
|
97
50
|
const NoResultsTextComponent = () => {
|
|
98
|
-
return (
|
|
51
|
+
return (React.createElement(Text, { variant: TextVariant.SUBHEADLINE, className: "combobox--no-results-text" }, noResultsText));
|
|
99
52
|
};
|
|
100
|
-
/**
|
|
101
|
-
* Removes the placeholder text from the input field
|
|
102
|
-
*/
|
|
103
53
|
const removePlaceholder = () => {
|
|
104
54
|
setPlaceholder('');
|
|
105
55
|
};
|
|
106
|
-
return (
|
|
107
|
-
}
|
|
56
|
+
return (React.createElement(ThemeProvider, { theme: theme },
|
|
57
|
+
showSelectField && (React.createElement(SelectInput, { className: clsx(isOpen && 'active', className), name: name, label: label, value: value, onClick: handleOnClick, onOutsideClick: handleClickOutside, isCompact: true, id: id, readOnly: true })),
|
|
58
|
+
isDesktop && isOpen && (React.createElement("div", { className: "combobox", ref: comboBoxRef },
|
|
59
|
+
withSearch && (React.createElement(SearchInput, { name: name, value: searchQuery, pattern: searchPattern, label: label, onChange: handleChange, onClear: handleClearInput, onOutsideClick: handleClickOutside, displayLeadingIcon: isOpen, isCompact: true, inputMode: inputMode, autoFocus: true })),
|
|
60
|
+
optionsExist ? (React.createElement(ComboBoxOptions, { options: options, onClick: handleOptionItemClick, selectedOption: value, leadingType: leadingType, optionDetails: optionDetails })) : (React.createElement(NoResultsTextComponent, null)),
|
|
61
|
+
React.createElement("div", null))),
|
|
62
|
+
!isDesktop && isOpen && (React.createElement(BottomSheet, { open: isOpen, onClose: clearAndClose, ref: bottomSheetRef },
|
|
63
|
+
React.createElement("div", { className: "combobox--header" },
|
|
64
|
+
React.createElement(Text, { variant: TextVariant.HEADLINE, className: "combobox--headline" }, headline),
|
|
65
|
+
withSearch && (React.createElement(SearchInput, { name: name, value: searchQuery, pattern: searchPattern, onChange: handleChange, onClear: handleClearInput, onFocus: removePlaceholder, placeholder: inputPlaceholder, isCompact: true, inputMode: inputMode, displayLeadingIcon: isOpen }))),
|
|
66
|
+
React.createElement("div", { className: "combobox__options scrollable" }, optionsExist ? (React.createElement(ComboBoxOptions, { options: options, onClick: handleOptionItemClick, selectedOption: value, leadingType: leadingType, optionDetails: optionDetails })) : (React.createElement(NoResultsTextComponent, null)))))));
|
|
67
|
+
};
|
|
68
|
+
export default ComboBox;
|
|
108
69
|
//# sourceMappingURL=ComboBox.js.map
|
package/lib/ComboBox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComboBox.js","sourceRoot":"","sources":["../src/ComboBox.tsx"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"ComboBox.js","sourceRoot":"","sources":["../src/ComboBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACvE,OAAO,WAAW,MAAM,qBAAqB,CAAA;AAC7C,OAAO,IAAI,EAAE,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,eAAe,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,uBAAuB,MAAM,kCAAkC,CAAA;AACtE,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,aAAa,EAAE,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,cAAc,CAAA;AAErB,MAAM,QAAQ,GAA4B,CAAC,EACzC,SAAS,GAAG,EAAE,EACd,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,aAAa,GAAG,EAAE,EAClB,EAAE,EACF,MAAM,EACN,OAAO,EACP,WAAW,EACX,KAAK,EACL,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,UAAU,GAAG,IAAI,EACjB,KAAK,GAAG,aAAa,EACrB,SAAS,EACT,OAAO,EACP,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,YAAY,GACb,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IAChD,MAAM,cAAc,GAAG,MAAM,CAAc,IAAI,CAAC,CAAA;IAEhD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAClD,MAAM,CAAC,gBAAgB,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAA;IAEhE,MAAM,SAAS,GAAG,uBAAuB,EAAE,CAAA;IAE3C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IACpD,MAAM,eAAe,GAAG,CAAC,UAAU,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAA;IAE3E,SAAS,CAAC,GAAG,EAAE;QACb,CAAC,MAAM,KAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,EAAI,CAAA,CAAA;IAC7B,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAEZ,MAAM,YAAY,GAAG,CAAC,CAAsC,EAAE,EAAE;QAC9D,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,MAAM,CAAA;QAEvC,cAAc,CAAC,WAAW,CAAC,CAAA;QAC3B,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,WAAW,CAAC,CAAA;IACzB,CAAC,CAAA;IAED,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,cAAc,CAAC,EAAE,CAAC,CAAA;IACpB,CAAC,CAAA;IAED,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,cAAc,CAAC,EAAE,CAAC,CAAA;QAClB,SAAS,CAAC,KAAK,CAAC,CAAA;IAClB,CAAC,CAAA;IAED,iBAAiB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAExC,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,KAAkB,EAAE,EAAE;;QACrB,MAAM,IAAI,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAc,CAAA;QAClC,MAAM,SAAS,GAAG,CAAC,CAAA,MAAA,WAAW,CAAC,OAAO,0CAAE,QAAQ,CAAC,IAAI,CAAC,CAAA,CAAA;QAEtD,cAAc,CAAC,WAAW,CAAC,CAAA;QAC3B,SAAS,IAAI,SAAS,IAAI,aAAa,EAAE,CAAA;QACzC,SAAS,IAAI,SAAS,KAAI,cAAc,aAAd,cAAc,uBAAd,cAAc,EAAI,CAAA,CAAA;IAC9C,CAAC,EACD,CAAC,WAAW,EAAE,cAAc,EAAE,WAAW,CAAC,CAC3C,CAAA;IAED,MAAM,qBAAqB,GAAG,CAAC,WAAmB,EAAE,EAAE;QACpD,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,WAAW,CAAC,CAAA;IAClC,CAAC,CAAA;IAED,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,OAAO,aAAP,OAAO,uBAAP,OAAO,EAAI,CAAA;IACb,CAAC,CAAA;IAED,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAClC,OAAO,CACL,oBAAC,IAAI,IACH,OAAO,EAAE,WAAW,CAAC,WAAW,EAChC,SAAS,EAAC,2BAA2B,IAEpC,aAAa,CACT,CACR,CAAA;IACH,CAAC,CAAA;IAED,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,cAAc,CAAC,EAAE,CAAC,CAAA;IACpB,CAAC,CAAA;IAED,OAAO,CACL,oBAAC,aAAa,IAAC,KAAK,EAAE,KAAK;QACxB,eAAe,IAAI,CAClB,oBAAC,WAAW,IACV,SAAS,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ,EAAE,SAAS,CAAC,EAC9C,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,aAAa,EACtB,cAAc,EAAE,kBAAkB,EAClC,SAAS,QACT,EAAE,EAAE,EAAE,EACN,QAAQ,SACR,CACH;QACA,SAAS,IAAI,MAAM,IAAI,CACtB,6BAAK,SAAS,EAAC,UAAU,EAAC,GAAG,EAAE,WAAW;YACvC,UAAU,IAAI,CACb,oBAAC,WAAW,IACV,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,gBAAgB,EACzB,cAAc,EAAE,kBAAkB,EAClC,kBAAkB,EAAE,MAAM,EAC1B,SAAS,QACT,SAAS,EAAE,SAAS,EACpB,SAAS,SACT,CACH;YACA,YAAY,CAAC,CAAC,CAAC,CACd,oBAAC,eAAe,IACd,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,qBAAqB,EAC9B,cAAc,EAAE,KAAK,EACrB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,GAC5B,CACH,CAAC,CAAC,CAAC,CACF,oBAAC,sBAAsB,OAAG,CAC3B;YACD,gCAAO,CACH,CACP;QACA,CAAC,SAAS,IAAI,MAAM,IAAI,CACvB,oBAAC,WAAW,IAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc;YACpE,6BAAK,SAAS,EAAC,kBAAkB;gBAC/B,oBAAC,IAAI,IAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAC,oBAAoB,IAChE,QAAQ,CACJ;gBACN,UAAU,IAAI,CACb,oBAAC,WAAW,IACV,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,iBAAiB,EAC1B,WAAW,EAAE,gBAAgB,EAC7B,SAAS,QACT,SAAS,EAAE,SAAS,EACpB,kBAAkB,EAAE,MAAM,GAC1B,CACH,CACG;YACN,6BAAK,SAAS,EAAC,8BAA8B,IAC1C,YAAY,CAAC,CAAC,CAAC,CACd,oBAAC,eAAe,IACd,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,qBAAqB,EAC9B,cAAc,EAAE,KAAK,EACrB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,GAC5B,CACH,CAAC,CAAC,CAAC,CACF,oBAAC,sBAAsB,OAAG,CAC3B,CACG,CACM,CACf,CACa,CACjB,CAAA;AACH,CAAC,CAAA;AAED,eAAe,QAAQ,CAAA"}
|
|
@@ -1,24 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
name: item.text,
|
|
16
|
-
type: leadingType,
|
|
17
|
-
}
|
|
18
|
-
: undefined, selected: selectedOption === item.text, text: item.text, subtext: item.subtext, subItemProps: {
|
|
1
|
+
import MenuItem from '@pixum/menu-item';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
const Options = ({ items, selectedOption, onClick, leadingType, }) => (React.createElement(React.Fragment, null, items.map((item) => {
|
|
5
|
+
var _a;
|
|
6
|
+
const itemText = item.text;
|
|
7
|
+
const isSelected = selectedOption === ((item === null || item === void 0 ? void 0 : item.label) || itemText);
|
|
8
|
+
return (React.createElement("div", { key: `combobox-item-wrapper-${itemText}`, className: "combobox__option-wrapper", role: "button", tabIndex: 0, onPointerDown: (e) => e.stopPropagation(), onTouchStart: (e) => e.stopPropagation(), onMouseDown: (e) => e.stopPropagation(), onClickCapture: (e) => {
|
|
9
|
+
e.stopPropagation();
|
|
10
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(itemText);
|
|
11
|
+
} },
|
|
12
|
+
React.createElement(MenuItem, { tabIndex: -1, className: clsx(isSelected && 'selected'), onMouseEnter: item.onMouseEnter, leadingProps: leadingType
|
|
13
|
+
? { name: itemText, type: leadingType }
|
|
14
|
+
: undefined, selected: selectedOption === itemText, text: itemText, subtext: item.subtext, subItemProps: {
|
|
19
15
|
text: (_a = item.subItemProps) === null || _a === void 0 ? void 0 : _a.text,
|
|
20
|
-
} }));
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
exports.default = Options;
|
|
16
|
+
} })));
|
|
17
|
+
})));
|
|
18
|
+
export default Options;
|
|
24
19
|
//# sourceMappingURL=Options.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Options.js","sourceRoot":"","sources":["../../src/ComboboxOptions/Options.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Options.js","sourceRoot":"","sources":["../../src/ComboboxOptions/Options.tsx"],"names":[],"mappings":"AAAA,OAAO,QAAwC,MAAM,kBAAkB,CAAA;AACvE,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,KAAK,MAAM,OAAO,CAAA;AAUzB,MAAM,OAAO,GAA2B,CAAC,EACvC,KAAK,EACL,cAAc,EACd,OAAO,EACP,WAAW,GACZ,EAAE,EAAE,CAAC,CACJ,0CACG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAmB,EAAE,EAAE;;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAA;IAC1B,MAAM,UAAU,GAAG,cAAc,KAAK,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,KAAI,QAAQ,CAAC,CAAA;IAE/D,OAAO,CACL,6BACE,GAAG,EAAE,yBAAyB,QAAQ,EAAE,EACxC,SAAS,EAAC,0BAA0B,EACpC,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EACX,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EACzC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EACxC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EACvC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE;YACpB,CAAC,CAAC,eAAe,EAAE,CAAA;YACnB,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,QAAQ,CAAC,CAAA;QACrB,CAAC;QAED,oBAAC,QAAQ,IACP,QAAQ,EAAE,CAAC,CAAC,EACZ,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,EACzC,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,YAAY,EACV,WAAW;gBACT,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE;gBACvC,CAAC,CAAC,SAAS,EAEf,QAAQ,EAAE,cAAc,KAAK,QAAQ,EACrC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,YAAY,EAAE;gBACZ,IAAI,EAAE,MAAA,IAAI,CAAC,YAAY,0CAAE,IAAI;aAC9B,GACD,CACE,CACP,CAAA;AACH,CAAC,CAAC,CACD,CACJ,CAAA;AAED,eAAe,OAAO,CAAA"}
|
|
@@ -6,7 +6,6 @@ interface OptionsGroupProps {
|
|
|
6
6
|
items: ComboBoxOptionProps[];
|
|
7
7
|
selectedOption?: string;
|
|
8
8
|
onClick?: (value: string) => void;
|
|
9
|
-
onKeyDown: (e: React.KeyboardEvent, value: string) => void;
|
|
10
9
|
leadingType?: LeadingType;
|
|
11
10
|
}
|
|
12
11
|
declare const OptionsGroup: React.FC<OptionsGroupProps>;
|
|
@@ -1,49 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
var text_1 = __importStar(require("@pixum/text"));
|
|
40
|
-
var react_1 = __importDefault(require("react"));
|
|
41
|
-
var Options_1 = __importDefault(require("./Options"));
|
|
42
|
-
var OptionsGroup = function (_a) {
|
|
43
|
-
var group = _a.group, items = _a.items, selectedOption = _a.selectedOption, onClick = _a.onClick, onKeyDown = _a.onKeyDown, leadingType = _a.leadingType;
|
|
44
|
-
return (react_1.default.createElement("div", { className: "combobox__options-group", key: "combobox__options-group-".concat(group) },
|
|
45
|
-
react_1.default.createElement(text_1.default, { variant: text_1.TextVariant.HEADLINE, className: "combobox__sticky-header" }, group),
|
|
46
|
-
react_1.default.createElement(Options_1.default, { items: items, selectedOption: selectedOption, onClick: onClick, onKeyDown: onKeyDown, leadingType: leadingType })));
|
|
47
|
-
};
|
|
48
|
-
exports.default = OptionsGroup;
|
|
1
|
+
import Text, { TextVariant } from '@pixum/text';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import Options from './Options';
|
|
4
|
+
const OptionsGroup = ({ group, items, selectedOption, onClick, leadingType, }) => (React.createElement("div", { className: "combobox__options-group", key: `combobox__options-group-${group}` },
|
|
5
|
+
React.createElement(Text, { variant: TextVariant.HEADLINE, className: "combobox__sticky-header" }, group),
|
|
6
|
+
React.createElement(Options, { items: items, selectedOption: selectedOption, onClick: onClick, leadingType: leadingType })));
|
|
7
|
+
export default OptionsGroup;
|
|
49
8
|
//# sourceMappingURL=OptionsGroup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OptionsGroup.js","sourceRoot":"","sources":["../../src/ComboboxOptions/OptionsGroup.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OptionsGroup.js","sourceRoot":"","sources":["../../src/ComboboxOptions/OptionsGroup.tsx"],"names":[],"mappings":"AACA,OAAO,IAAI,EAAE,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,OAAO,MAAM,WAAW,CAAA;AAW/B,MAAM,YAAY,GAAgC,CAAC,EACjD,KAAK,EACL,KAAK,EACL,cAAc,EACd,OAAO,EACP,WAAW,GACZ,EAAE,EAAE,CAAC,CACJ,6BACE,SAAS,EAAC,yBAAyB,EACnC,GAAG,EAAE,2BAA2B,KAAK,EAAE;IAEvC,oBAAC,IAAI,IAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAC,yBAAyB,IACrE,KAAK,CACD;IACP,oBAAC,OAAO,IACN,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,GACxB,CACE,CACP,CAAA;AAED,eAAe,YAAY,CAAA"}
|
|
@@ -1,64 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
var react_1 = __importStar(require("react"));
|
|
40
|
-
var menu_1 = __importDefault(require("@pixum/menu"));
|
|
41
|
-
var scrollOptionToViewport_1 = require("../helper/scrollOptionToViewport");
|
|
42
|
-
var OptionsGroup_1 = __importDefault(require("./OptionsGroup"));
|
|
43
|
-
var Options_1 = __importDefault(require("./Options"));
|
|
44
|
-
var useIsDesktopScreenWidth_1 = __importDefault(require("../helper/useIsDesktopScreenWidth"));
|
|
45
|
-
var ComboBoxOptions = function (_a) {
|
|
46
|
-
var options = _a.options, onClick = _a.onClick, selectedOption = _a.selectedOption, leadingType = _a.leadingType, optionDetails = _a.optionDetails;
|
|
47
|
-
var isDesktop = (0, useIsDesktopScreenWidth_1.default)();
|
|
48
|
-
var handleOnKeyDown = function (e, value) {
|
|
49
|
-
if (e.key === 'Enter') {
|
|
50
|
-
onClick === null || onClick === void 0 ? void 0 : onClick(value);
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
(0, react_1.useEffect)(function () {
|
|
54
|
-
(0, scrollOptionToViewport_1.scrollOptionToViewport)(isDesktop);
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
|
+
import Menu from '@pixum/menu';
|
|
3
|
+
import { scrollOptionToViewport } from '../helper/scrollOptionToViewport';
|
|
4
|
+
import OptionsGroup from './OptionsGroup';
|
|
5
|
+
import Options from './Options';
|
|
6
|
+
import useIsDesktopScreenWidth from '../helper/useIsDesktopScreenWidth';
|
|
7
|
+
const ComboBoxOptions = ({ options, onClick, selectedOption, leadingType, optionDetails, }) => {
|
|
8
|
+
const isDesktop = useIsDesktopScreenWidth();
|
|
9
|
+
const optionsWithoutGroup = Array.isArray(options);
|
|
10
|
+
const optionsWithGroup = Object.entries(options);
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
scrollOptionToViewport(isDesktop);
|
|
55
13
|
}, [isDesktop]);
|
|
56
|
-
return (
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
return (react_1.default.createElement(OptionsGroup_1.default, { group: group, items: items, selectedOption: selectedOption, onClick: onClick, onKeyDown: handleOnKeyDown, leadingType: leadingType }));
|
|
60
|
-
}))),
|
|
61
|
-
optionDetails && (react_1.default.createElement("div", { className: "combobox__option-details text--caption" }, optionDetails))));
|
|
14
|
+
return (React.createElement(Menu, { className: "combobox__options scrollable", "data-tappable": "true" },
|
|
15
|
+
optionsWithoutGroup ? (React.createElement(Options, { items: options, selectedOption: selectedOption, onClick: onClick, leadingType: leadingType })) : (React.createElement(React.Fragment, null, optionsWithGroup.map(([group, items]) => (React.createElement(OptionsGroup, { group: group, items: items, selectedOption: selectedOption, onClick: onClick, leadingType: leadingType }))))),
|
|
16
|
+
optionDetails && (React.createElement("div", { className: "combobox__option-details text--caption" }, optionDetails))));
|
|
62
17
|
};
|
|
63
|
-
|
|
18
|
+
export default ComboBoxOptions;
|
|
64
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ComboboxOptions/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ComboboxOptions/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACxC,OAAO,IAAI,MAAM,aAAa,CAAA;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAEzE,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,uBAAuB,MAAM,mCAAmC,CAAA;AAEvE,MAAM,eAAe,GAAmC,CAAC,EACvD,OAAO,EACP,OAAO,EACP,cAAc,EACd,WAAW,EACX,aAAa,GACd,EAAE,EAAE;IACH,MAAM,SAAS,GAAG,uBAAuB,EAAE,CAAA;IAC3C,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAClD,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAEhD,SAAS,CAAC,GAAG,EAAE;QACb,sBAAsB,CAAC,SAAS,CAAC,CAAA;IACnC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAEf,OAAO,CACL,oBAAC,IAAI,IACH,SAAS,EAAC,8BAA8B,mBAC1B,MAAM;QAEnB,mBAAmB,CAAC,CAAC,CAAC,CACrB,oBAAC,OAAO,IACN,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,GACxB,CACH,CAAC,CAAC,CAAC,CACF,0CACG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CACxC,oBAAC,YAAY,IACX,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,GACxB,CACH,CAAC,CACD,CACJ;QACA,aAAa,IAAI,CAChB,6BAAK,SAAS,EAAC,wCAAwC,IACpD,aAAa,CACV,CACP,CACI,CACR,CAAA;AACH,CAAC,CAAA;AAED,eAAe,eAAe,CAAA"}
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
var headerHeight = 50;
|
|
7
|
-
var inputFieldHeight = 35;
|
|
8
|
-
var maxListHeight = windowHeight - headerHeight - inputFieldHeight;
|
|
1
|
+
export const calculateListMaxHeight = () => {
|
|
2
|
+
const windowHeight = window.innerHeight;
|
|
3
|
+
const headerHeight = 50;
|
|
4
|
+
const inputFieldHeight = 35;
|
|
5
|
+
const maxListHeight = windowHeight - headerHeight - inputFieldHeight;
|
|
9
6
|
return maxListHeight;
|
|
10
7
|
};
|
|
11
|
-
exports.calculateListMaxHeight = calculateListMaxHeight;
|
|
12
8
|
//# sourceMappingURL=calculateListMaxHeight.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculateListMaxHeight.js","sourceRoot":"","sources":["../../src/helper/calculateListMaxHeight.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"calculateListMaxHeight.js","sourceRoot":"","sources":["../../src/helper/calculateListMaxHeight.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE;IACvC,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAA;IACvC,MAAM,YAAY,GAAG,EAAE,CAAA;IACvB,MAAM,gBAAgB,GAAG,EAAE,CAAA;IAC3B,MAAM,aAAa,GAAG,YAAY,GAAG,YAAY,GAAG,gBAAgB,CAAA;IAErE,OAAO,aAAa,CAAA;AAEvB,CAAC,CAAA"}
|
|
@@ -1,22 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
document.querySelector('.combobox__options');
|
|
7
|
-
var selectedItem = document.querySelector(".menu-item.selected");
|
|
1
|
+
export const scrollOptionToViewport = (isDesktop) => {
|
|
2
|
+
const comboboxOptions = isDesktop
|
|
3
|
+
? document.querySelector('.menu')
|
|
4
|
+
: document.querySelector('.combobox__options');
|
|
5
|
+
const selectedItem = document.querySelector('.menu-item.selected');
|
|
8
6
|
if (selectedItem && comboboxOptions) {
|
|
9
|
-
|
|
7
|
+
let comboboxOptionsGroup = selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.parentElement;
|
|
10
8
|
if (comboboxOptionsGroup) {
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
const stickyHeader = comboboxOptionsGroup === null || comboboxOptionsGroup === void 0 ? void 0 : comboboxOptionsGroup.querySelector('.sticky-header');
|
|
10
|
+
const stickyHeaderOffset = stickyHeader === null || stickyHeader === void 0 ? void 0 : stickyHeader.offsetTop;
|
|
13
11
|
comboboxOptions === null || comboboxOptions === void 0 ? void 0 : comboboxOptions.scrollTo({ top: stickyHeaderOffset });
|
|
14
12
|
}
|
|
15
13
|
else {
|
|
16
|
-
|
|
14
|
+
const selectedItemOffset = selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.offsetTop;
|
|
17
15
|
comboboxOptions === null || comboboxOptions === void 0 ? void 0 : comboboxOptions.scrollTo({ top: selectedItemOffset });
|
|
18
16
|
}
|
|
19
17
|
}
|
|
20
18
|
};
|
|
21
|
-
exports.scrollOptionToViewport = scrollOptionToViewport;
|
|
22
19
|
//# sourceMappingURL=scrollOptionToViewport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollOptionToViewport.js","sourceRoot":"","sources":["../../src/helper/scrollOptionToViewport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scrollOptionToViewport.js","sourceRoot":"","sources":["../../src/helper/scrollOptionToViewport.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,SAAkB,EAAE,EAAE;IAC3D,MAAM,eAAe,GAAG,SAAS;QAC/B,CAAC,CAAE,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAiB;QAClD,CAAC,CAAE,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAiB,CAAA;IACjE,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CACzC,qBAAqB,CACP,CAAA;IAEhB,IAAI,YAAY,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,oBAAoB,GAAG,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,aAAa,CAAA;QAEtD,IAAI,oBAAoB,EAAE,CAAC;YACzB,MAAM,YAAY,GAAG,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,aAAa,CACtD,gBAAgB,CACF,CAAA;YAChB,MAAM,kBAAkB,GAAG,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,SAAS,CAAA;YAElD,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAA;QACxD,CAAC;aAAM,CAAC;YACN,MAAM,kBAAkB,GAAG,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,SAAS,CAAA;YAElD,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAA;QACxD,CAAC;IACH,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var useIsDesktopScreenWidth = function () {
|
|
5
|
-
var hasWindowObject = typeof window !== 'undefined';
|
|
1
|
+
import { useState, useEffect } from 'react';
|
|
2
|
+
const useIsDesktopScreenWidth = () => {
|
|
3
|
+
const hasWindowObject = typeof window !== 'undefined';
|
|
6
4
|
if (hasWindowObject) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
const [screenWidth, setScreenWidth] = useState(window.innerWidth);
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
const handleResize = () => {
|
|
8
|
+
setScreenWidth(window.innerWidth);
|
|
11
9
|
};
|
|
12
10
|
window.addEventListener('resize', handleResize);
|
|
13
|
-
return
|
|
11
|
+
return () => {
|
|
14
12
|
window.removeEventListener('resize', handleResize);
|
|
15
13
|
};
|
|
16
14
|
}, []);
|
|
@@ -18,5 +16,5 @@ var useIsDesktopScreenWidth = function () {
|
|
|
18
16
|
}
|
|
19
17
|
return false;
|
|
20
18
|
};
|
|
21
|
-
|
|
19
|
+
export default useIsDesktopScreenWidth;
|
|
22
20
|
//# sourceMappingURL=useIsDesktopScreenWidth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useIsDesktopScreenWidth.js","sourceRoot":"","sources":["../../src/helper/useIsDesktopScreenWidth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useIsDesktopScreenWidth.js","sourceRoot":"","sources":["../../src/helper/useIsDesktopScreenWidth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAE3C,MAAM,uBAAuB,GAAG,GAAG,EAAE;IACnC,MAAM,eAAe,GAAG,OAAO,MAAM,KAAK,WAAW,CAAA;IAErD,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QAEjE,SAAS,CAAC,GAAG,EAAE;YACb,MAAM,YAAY,GAAG,GAAG,EAAE;gBACxB,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YACnC,CAAC,CAAA;YAED,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;YAE/C,OAAO,GAAG,EAAE;gBACV,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;YACpD,CAAC,CAAA;QACH,CAAC,EAAE,EAAE,CAAC,CAAA;QAEN,OAAO,WAAW,GAAG,GAAG,CAAA;IAC1B,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,eAAe,uBAAuB,CAAA"}
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,eAAe,QAAQ,CAAA;AACvB,cAAc,SAAS,CAAA"}
|
package/lib/styles.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.combobox{position:relative
|
|
1
|
+
.combobox{width:100%;position:relative}.combobox--headline[class*=text--]+*{margin-top:var(--spacing)}.combobox--header,.combobox__options{position:relative}.combobox--header{width:100%;align-items:flex-start;height:auto;padding:0 var(--spacing-2);margin:var(--spacing-5) auto var(--spacing-2)}.combobox__options{width:100%;max-height:none;display:flex;flex-direction:column;overflow:scroll}.combobox__option-wrapper{touch-action:manipulation;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;cursor:pointer}.combobox .input-outer-container .input-inner-container.input-inner-container--compact{height:48px}.combobox .user-input__label-container{align-self:baseline;padding-left:var(--spacing-2)}.combobox .user-input__label-container label.user-input__label{padding:var(--spacing-0_5)}.combobox .search.user-input__compact{margin-bottom:var(--spacing-2)}.combobox__options .combobox__sticky-header{position:-webkit-sticky;position:sticky;top:0;padding:var(--spacing-1_25) var(--spacing-2);background-color:var(--color-surface)}.combobox__options .text--caption{color:var(--color-on-secondary)}.combobox__options .item-header{display:flex;justify-content:space-between}.combobox .combobox__options .combobox__option-details{position:-webkit-sticky;position:sticky;bottom:0;padding-left:var(--spacing);padding-right:var(--spacing);background-color:var(--color-surface)}.combobox .user-input__label.user-input__label--active{color:var(--color-on)}.combobox--no-results-text{text-align:center;padding:var(--spacing-2) var(--spacing)}.combobox .input-outer-container label{padding-top:0;padding-bottom:0;padding-left:0}@media screen and (min-width:960px){.combobox__options{position:absolute;overflow-x:auto;max-height:330px;border-radius:12px;margin-top:var(--spacing)}.combobox .user-input__label-container{padding-left:0}.combobox .search.user-input__compact{margin-bottom:0}}
|
package/lib/types.d.ts
CHANGED
|
@@ -1,70 +1,36 @@
|
|
|
1
1
|
import { LeadingType, MenuItemProps } from '@pixum/menu-item';
|
|
2
2
|
import { ThemeType } from '@pixum/theme-provider';
|
|
3
3
|
import { InputModesType } from '@pixum/web-input';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
*/
|
|
7
|
-
export interface ComboBoxOptionsProps {
|
|
8
|
-
/** Options to display in the combobox, can be grouped or a flat array */
|
|
9
|
-
options: Record<string, ComboBoxOptionItemProps[]> | ComboBoxOptionItemProps[];
|
|
10
|
-
/** Currently selected option value */
|
|
4
|
+
interface ComboBoxOptionsProps {
|
|
5
|
+
options: Record<string, ComboBoxOptionProps[]> | ComboBoxOptionProps[];
|
|
11
6
|
selectedOption?: string;
|
|
12
|
-
/** Callback fired when an option is clicked */
|
|
13
7
|
onClick?: (value: string) => void;
|
|
14
|
-
/** Type of leading element to display (icon, avatar, etc.) */
|
|
15
8
|
leadingType?: LeadingType;
|
|
16
|
-
/** Additional details to display below the options */
|
|
17
9
|
optionDetails?: React.ReactNode;
|
|
18
10
|
}
|
|
19
|
-
|
|
20
|
-
* Props for the ComboBox component
|
|
21
|
-
*/
|
|
22
|
-
export interface ComboBoxProps extends ComboBoxOptionsProps {
|
|
23
|
-
/** Additional CSS class name for the component */
|
|
11
|
+
interface ComboBoxProps extends ComboBoxOptionsProps {
|
|
24
12
|
className?: string;
|
|
25
|
-
/** Name attribute for the input field */
|
|
26
13
|
name?: string;
|
|
27
|
-
/** Headline text displayed in mobile bottom sheet */
|
|
28
14
|
headline?: string;
|
|
29
|
-
/** Helper text displayed below the input */
|
|
30
15
|
helperText?: string;
|
|
31
|
-
/** ID attribute for the input field */
|
|
32
16
|
id?: string;
|
|
33
|
-
/** Label text for the input field */
|
|
34
17
|
label?: string;
|
|
35
|
-
/** Whether the dropdown/bottom sheet is currently open */
|
|
36
18
|
isOpen: boolean;
|
|
37
|
-
/** State setter function to control open/close state */
|
|
38
19
|
setIsOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
|
39
|
-
/** Callback fired when the search input value changes */
|
|
40
20
|
onChange?: (value: string) => void;
|
|
41
|
-
/** Callback fired when an option item is clicked */
|
|
42
21
|
onOptionItemClick?: (value: string) => void;
|
|
43
|
-
/** Callback fired when user clicks outside the component */
|
|
44
22
|
onOutsideClick?: () => void;
|
|
45
|
-
/** Callback fired when the input field is clicked */
|
|
46
23
|
onClick?: () => void;
|
|
47
|
-
/** Callback fired when the bottom sheet is closed */
|
|
48
24
|
onSheetClose?: () => void;
|
|
49
|
-
/** Placeholder text for the input field */
|
|
50
25
|
placeholder?: string;
|
|
51
|
-
/** Search pattern/regex for input validation */
|
|
52
26
|
searchPattern?: string;
|
|
53
|
-
/** Current value of the combobox */
|
|
54
27
|
value?: string;
|
|
55
|
-
/** Text to display when no results are found */
|
|
56
28
|
noResultsText?: string;
|
|
57
|
-
/** Input mode for mobile keyboards (text, numeric, etc.) */
|
|
58
29
|
inputMode?: InputModesType;
|
|
59
|
-
/** Whether to show the search input field */
|
|
60
30
|
withSearch?: boolean;
|
|
61
|
-
/** Theme configuration for the component */
|
|
62
31
|
theme?: ThemeType;
|
|
63
32
|
}
|
|
64
|
-
|
|
65
|
-
* Props for individual ComboBox option items
|
|
66
|
-
*/
|
|
67
|
-
export interface ComboBoxOptionItemProps extends MenuItemProps {
|
|
68
|
-
/** Unique key for the option item */
|
|
33
|
+
interface ComboBoxOptionProps extends MenuItemProps {
|
|
69
34
|
key?: string;
|
|
70
35
|
}
|
|
36
|
+
export { ComboBoxProps, ComboBoxOptionProps, ComboBoxOptionsProps };
|
package/package.json
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pixum/combobox",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.22",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"module": "lib/index.js",
|
|
6
6
|
"license": "UNLICENSED",
|
|
7
7
|
"peerDependencies": {
|
|
8
8
|
"@pixum/bottom-sheet": "3.0.18",
|
|
9
|
+
"@pixum/button": "4.1.20",
|
|
9
10
|
"@pixum/menu": "3.0.14",
|
|
10
11
|
"@pixum/menu-item": "2.0.14",
|
|
12
|
+
"@pixum/svg-icon": "5.8.1",
|
|
11
13
|
"@pixum/text": "2.0.20",
|
|
12
14
|
"@pixum/theme-provider": "4.2.20",
|
|
13
|
-
"@pixum/
|
|
15
|
+
"@pixum/user-input": "3.0.15",
|
|
16
|
+
"@pixum/web-input": "1.0.19"
|
|
14
17
|
},
|
|
15
18
|
"files": [
|
|
16
19
|
"lib"
|
|
@@ -18,5 +21,5 @@
|
|
|
18
21
|
"sideEffects": [
|
|
19
22
|
"*.css"
|
|
20
23
|
],
|
|
21
|
-
"gitHead": "
|
|
24
|
+
"gitHead": "102c8c508fb1eea64a15d351f374396feffd93cf"
|
|
22
25
|
}
|
package/lib/helper/index.d.ts
DELETED
package/lib/helper/index.js
DELETED
package/lib/helper/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helper/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA"}
|
package/lib/hooks/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './useIsDesktopScreenWidth';
|
package/lib/hooks/index.js
DELETED
package/lib/hooks/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function useIsDesktopScreenWidth(): boolean;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { useState, useEffect } from 'react';
|
|
2
|
-
/**
|
|
3
|
-
* Custom hook that detects whether the viewport width is desktop size (>= 960px).
|
|
4
|
-
* Listens to window resize events to update the state dynamically.
|
|
5
|
-
*
|
|
6
|
-
* @returns True if the viewport width is 960px or greater, false otherwise
|
|
7
|
-
*/
|
|
8
|
-
function isBrowser() {
|
|
9
|
-
return typeof window !== 'undefined';
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Checks if the current viewport width is desktop size (>= 960px).
|
|
13
|
-
*
|
|
14
|
-
* @returns True if the viewport is desktop size, false otherwise or in non-browser environments
|
|
15
|
-
*/
|
|
16
|
-
function isInitialScreenDesktop() {
|
|
17
|
-
if (isBrowser()) {
|
|
18
|
-
return window.innerWidth >= 960;
|
|
19
|
-
}
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
export function useIsDesktopScreenWidth() {
|
|
23
|
-
const [isDesktop, setIsDesktop] = useState(isInitialScreenDesktop);
|
|
24
|
-
useEffect(() => {
|
|
25
|
-
const checkScreenSize = () => {
|
|
26
|
-
setIsDesktop(window.innerWidth >= 960);
|
|
27
|
-
};
|
|
28
|
-
checkScreenSize();
|
|
29
|
-
window.addEventListener('resize', checkScreenSize);
|
|
30
|
-
return () => {
|
|
31
|
-
window.removeEventListener('resize', checkScreenSize);
|
|
32
|
-
};
|
|
33
|
-
}, []);
|
|
34
|
-
return isDesktop;
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=useIsDesktopScreenWidth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useIsDesktopScreenWidth.js","sourceRoot":"","sources":["../../src/hooks/useIsDesktopScreenWidth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAE3C;;;;;GAKG;AAEH,SAAS,SAAS;IAChB,OAAO,OAAO,MAAM,KAAK,WAAW,CAAA;AACtC,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB;IAC7B,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,OAAO,MAAM,CAAC,UAAU,IAAI,GAAG,CAAA;IACjC,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAU,sBAAsB,CAAC,CAAA;IAE3E,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,eAAe,GAAG,GAAG,EAAE;YAC3B,YAAY,CAAC,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC,CAAA;QACxC,CAAC,CAAA;QAED,eAAe,EAAE,CAAA;QACjB,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;QAElD,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;QACvD,CAAC,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,SAAS,CAAA;AAClB,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { LeadingType } from '@pixum/menu-item';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { ComboBoxOptionProps } from '../types';
|
|
4
|
-
interface ComboBoxGroupedOptionsProps {
|
|
5
|
-
group: string;
|
|
6
|
-
items: ComboBoxOptionProps[];
|
|
7
|
-
selectedOption?: string;
|
|
8
|
-
onClick?: (value: string) => void;
|
|
9
|
-
onKeyDown: (e: React.KeyboardEvent, value: string) => void;
|
|
10
|
-
leadingType?: LeadingType;
|
|
11
|
-
}
|
|
12
|
-
export declare function ComboBoxGroupedOptions(props: ComboBoxGroupedOptionsProps): React.JSX.Element;
|
|
13
|
-
export {};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import Text, { TextVariant } from '@pixum/text';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { ComboBoxOptions } from './ComboBoxOptions';
|
|
4
|
-
export function ComboBoxGroupedOptions(props) {
|
|
5
|
-
const { group, items, selectedOption, onClick, onKeyDown, leadingType } = props;
|
|
6
|
-
return (React.createElement("div", { className: "combobox__options-group", key: `combobox__options-group-${group}` },
|
|
7
|
-
React.createElement(Text, { variant: TextVariant.HEADLINE, className: "combobox__sticky-header" }, group),
|
|
8
|
-
React.createElement(ComboBoxOptions, { items: items, selectedOption: selectedOption, onClick: onClick, onKeyDown: onKeyDown, leadingType: leadingType })));
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=ComboBoxGroupedOptions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ComboBoxGroupedOptions.js","sourceRoot":"","sources":["../../src/partials/ComboBoxGroupedOptions.tsx"],"names":[],"mappings":"AACA,OAAO,IAAI,EAAE,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAYnD,MAAM,UAAU,sBAAsB,CAAC,KAAkC;IACvE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,GACrE,KAAK,CAAA;IACP,OAAO,CACL,6BACE,SAAS,EAAC,yBAAyB,EACnC,GAAG,EAAE,2BAA2B,KAAK,EAAE;QAEvC,oBAAC,IAAI,IAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAC,yBAAyB,IACrE,KAAK,CACD;QACP,oBAAC,eAAe,IACd,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,GACxB,CACE,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import React, { useEffect } from 'react';
|
|
2
|
-
import Menu from '@pixum/menu';
|
|
3
|
-
import { scrollOptionToViewport } from '../helper';
|
|
4
|
-
import { ComboBoxOptions } from './ComboBoxOptions';
|
|
5
|
-
import { ComboBoxGroupedOptions } from './ComboBoxGroupedOptions';
|
|
6
|
-
import { useIsDesktopScreenWidth } from '../hooks';
|
|
7
|
-
export function ComboBoxMenu(props) {
|
|
8
|
-
const { options, onClick, selectedOption, leadingType, optionDetails } = props;
|
|
9
|
-
const isDesktop = useIsDesktopScreenWidth();
|
|
10
|
-
const handleOnKeyDown = (e, value) => {
|
|
11
|
-
if (e.key === 'Enter') {
|
|
12
|
-
onClick === null || onClick === void 0 ? void 0 : onClick(value);
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
useEffect(() => {
|
|
16
|
-
scrollOptionToViewport(isDesktop);
|
|
17
|
-
}, [isDesktop]);
|
|
18
|
-
return (React.createElement(Menu, { className: "combobox__options" },
|
|
19
|
-
Array.isArray(options) ? (React.createElement(ComboBoxOptions, { items: options, selectedOption: selectedOption, onClick: onClick, onKeyDown: handleOnKeyDown, leadingType: leadingType })) : (React.createElement(React.Fragment, null, Object.entries(options).map(([group, items]) => (React.createElement(ComboBoxGroupedOptions, { group: group, items: items, selectedOption: selectedOption, onClick: onClick, onKeyDown: handleOnKeyDown, leadingType: leadingType }))))),
|
|
20
|
-
optionDetails && (React.createElement("div", { className: "combobox__option-details text--caption" }, optionDetails))));
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=ComboBoxMenu.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ComboBoxMenu.js","sourceRoot":"","sources":["../../src/partials/ComboBoxMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACxC,OAAO,IAAI,MAAM,aAAa,CAAA;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAElD,MAAM,UAAU,YAAY,CAAC,KAA2B;IACtD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,KAAK,CAAA;IAC9E,MAAM,SAAS,GAAG,uBAAuB,EAAE,CAAA;IAE3C,MAAM,eAAe,GAAG,CAAC,CAAsB,EAAE,KAAa,EAAE,EAAE;QAChE,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;YACtB,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,KAAK,CAAC,CAAA;QAClB,CAAC;IACH,CAAC,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,sBAAsB,CAAC,SAAS,CAAC,CAAA;IACnC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAEf,OAAO,CACL,oBAAC,IAAI,IAAC,SAAS,EAAC,mBAAmB;QAChC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CACxB,oBAAC,eAAe,IACd,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,WAAW,GACxB,CACH,CAAC,CAAC,CAAC,CACF,0CACG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAC/C,oBAAC,sBAAsB,IACrB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,WAAW,GACxB,CACH,CAAC,CACD,CACJ;QACA,aAAa,IAAI,CAChB,6BAAK,SAAS,EAAC,wCAAwC,IACpD,aAAa,CACV,CACP,CACI,CACR,CAAA;AACH,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { ComboBoxOptionsProps } from '../types';
|
|
2
|
-
/**
|
|
3
|
-
* ComboBoxOptions component that renders a list of options in a menu.
|
|
4
|
-
* Handles both grouped and ungrouped options and automatically scrolls to the selected option.
|
|
5
|
-
*
|
|
6
|
-
* @param props - The props for the ComboBoxOptions component
|
|
7
|
-
* @returns A menu containing the combobox options
|
|
8
|
-
*/
|
|
9
|
-
export declare function ComboBoxOptions({ options, onClick, selectedOption, leadingType, optionDetails, }: ComboBoxOptionsProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
-
export default ComboBoxOptions;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect } from 'react';
|
|
3
|
-
import Menu from '@pixum/menu';
|
|
4
|
-
import { scrollOptionToViewport } from '../utils';
|
|
5
|
-
import { useIsDesktopScreenWidth } from '../hooks';
|
|
6
|
-
import { ComboxBoxOptionsWithGrouping } from './ComboBoxOptionsWithGrouping';
|
|
7
|
-
import { ComboBoxOptionsItems } from './ComboBoxOptionsItems';
|
|
8
|
-
/**
|
|
9
|
-
* ComboBoxOptions component that renders a list of options in a menu.
|
|
10
|
-
* Handles both grouped and ungrouped options and automatically scrolls to the selected option.
|
|
11
|
-
*
|
|
12
|
-
* @param props - The props for the ComboBoxOptions component
|
|
13
|
-
* @returns A menu containing the combobox options
|
|
14
|
-
*/
|
|
15
|
-
export function ComboBoxOptions({ options, onClick, selectedOption, leadingType, optionDetails, }) {
|
|
16
|
-
const isDesktop = useIsDesktopScreenWidth();
|
|
17
|
-
const optionsWithoutGroup = Array.isArray(options);
|
|
18
|
-
const optionsWithGroup = Object.entries(options);
|
|
19
|
-
useEffect(() => {
|
|
20
|
-
// Wait for next browser frame to ensure DOM is fully rendered
|
|
21
|
-
const frameId = requestAnimationFrame(() => {
|
|
22
|
-
scrollOptionToViewport(isDesktop);
|
|
23
|
-
});
|
|
24
|
-
return () => cancelAnimationFrame(frameId);
|
|
25
|
-
}, [isDesktop, selectedOption]);
|
|
26
|
-
return (_jsxs(Menu, { className: "combobox__options scrollable", "data-tappable": "true", children: [optionsWithoutGroup ? (_jsx(ComboBoxOptionsItems, { items: options, selectedOption: selectedOption, onClick: onClick, leadingType: leadingType })) : (_jsx(_Fragment, { children: optionsWithGroup.map(([group, items]) => (_jsx(ComboxBoxOptionsWithGrouping, { group: group, items: items, selectedOption: selectedOption, onClick: onClick, leadingType: leadingType }, `combobox__options-group-${group}`))) })), optionDetails && (_jsx("div", { className: "combobox__option-details text--caption", children: optionDetails }))] }));
|
|
27
|
-
}
|
|
28
|
-
export default ComboBoxOptions;
|
|
29
|
-
//# sourceMappingURL=ComboBoxOptions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ComboBoxOptions.js","sourceRoot":"","sources":["../../src/partials/ComboBoxOptions.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,IAAI,MAAM,aAAa,CAAA;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAElD,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAA;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,OAAO,EACP,OAAO,EACP,cAAc,EACd,WAAW,EACX,aAAa,GACQ;IACrB,MAAM,SAAS,GAAG,uBAAuB,EAAE,CAAA;IAC3C,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAClD,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAEhD,SAAS,CAAC,GAAG,EAAE;QACb,8DAA8D;QAC9D,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,EAAE;YACzC,sBAAsB,CAAC,SAAS,CAAC,CAAA;QACnC,CAAC,CAAC,CAAA;QAEF,OAAO,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAA;IAC5C,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAA;IAE/B,OAAO,CACL,MAAC,IAAI,IAAC,SAAS,EAAC,8BAA8B,mBAAe,MAAM,aAChE,mBAAmB,CAAC,CAAC,CAAC,CACrB,KAAC,oBAAoB,IACnB,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,GACxB,CACH,CAAC,CAAC,CAAC,CACF,4BACG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CACxC,KAAC,4BAA4B,IAE3B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,IALnB,2BAA2B,KAAK,EAAE,CAMvC,CACH,CAAC,GACD,CACJ,EACA,aAAa,IAAI,CAChB,cAAK,SAAS,EAAC,wCAAwC,YACpD,aAAa,GACV,CACP,IACI,CACR,CAAA;AACH,CAAC;AAED,eAAe,eAAe,CAAA"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { LeadingType } from '@pixum/menu-item';
|
|
2
|
-
import type { ComboBoxOptionItemProps } from '../types';
|
|
3
|
-
/**
|
|
4
|
-
* Props for the ComboBoxOptionsItems component
|
|
5
|
-
*/
|
|
6
|
-
interface ComboBoxOptionsItemsProps {
|
|
7
|
-
/** Array of option items to display */
|
|
8
|
-
items: ComboBoxOptionItemProps[];
|
|
9
|
-
/** Currently selected option value */
|
|
10
|
-
selectedOption?: string;
|
|
11
|
-
/** Callback fired when an option is clicked */
|
|
12
|
-
onClick?: (value: string) => void;
|
|
13
|
-
/** Type of leading element to display (icon, avatar, etc.) */
|
|
14
|
-
leadingType?: LeadingType;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* ComboBoxOptionsItems component that renders individual menu items.
|
|
18
|
-
* Handles click events and displays selected state for each option.
|
|
19
|
-
*
|
|
20
|
-
* @param props - The props for the ComboBoxOptionsItems component
|
|
21
|
-
* @returns A list of clickable menu items
|
|
22
|
-
*/
|
|
23
|
-
export declare function ComboBoxOptionsItems({ items, selectedOption, onClick, leadingType, }: ComboBoxOptionsItemsProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
-
export {};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import MenuItem from '@pixum/menu-item';
|
|
3
|
-
import clsx from 'clsx';
|
|
4
|
-
/**
|
|
5
|
-
* ComboBoxOptionsItems component that renders individual menu items.
|
|
6
|
-
* Handles click events and displays selected state for each option.
|
|
7
|
-
*
|
|
8
|
-
* @param props - The props for the ComboBoxOptionsItems component
|
|
9
|
-
* @returns A list of clickable menu items
|
|
10
|
-
*/
|
|
11
|
-
export function ComboBoxOptionsItems({ items, selectedOption, onClick, leadingType, }) {
|
|
12
|
-
return (_jsx(_Fragment, { children: items.map((item) => {
|
|
13
|
-
var _a;
|
|
14
|
-
const itemText = item.text;
|
|
15
|
-
const isSelected = selectedOption === itemText;
|
|
16
|
-
return (_jsx("div", { className: "combobox__option-wrapper", role: "button", tabIndex: 0, onPointerDown: e => e.stopPropagation(), onTouchStart: e => e.stopPropagation(), onMouseDown: e => e.stopPropagation(), onClickCapture: e => {
|
|
17
|
-
e.stopPropagation();
|
|
18
|
-
onClick === null || onClick === void 0 ? void 0 : onClick(itemText);
|
|
19
|
-
}, children: _jsx(MenuItem, { tabIndex: -1, className: clsx(isSelected && 'selected'), onMouseEnter: item.onMouseEnter, leadingProps: leadingType ? { name: itemText, type: leadingType } : undefined, selected: selectedOption === itemText, text: itemText, subtext: item.subtext, subItemProps: {
|
|
20
|
-
text: (_a = item.subItemProps) === null || _a === void 0 ? void 0 : _a.text,
|
|
21
|
-
} }) }, `combobox-item-wrapper-${itemText}`));
|
|
22
|
-
}) }));
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=ComboBoxOptionsItems.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ComboBoxOptionsItems.js","sourceRoot":"","sources":["../../src/partials/ComboBoxOptionsItems.tsx"],"names":[],"mappings":";AAAA,OAAO,QAA6C,MAAM,kBAAkB,CAAA;AAC5E,OAAO,IAAI,MAAM,MAAM,CAAA;AAiBvB;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,EACnC,KAAK,EACL,cAAc,EACd,OAAO,EACP,WAAW,GACe;IAC1B,OAAO,CACL,4BACG,KAAK,CAAC,GAAG,CAAC,CAAC,IAA6B,EAAE,EAAE;;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAA;YAC1B,MAAM,UAAU,GAAG,cAAc,KAAK,QAAQ,CAAA;YAE9C,OAAO,CACL,cAEE,SAAS,EAAC,0BAA0B,EACpC,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EACX,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EACvC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EACtC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EACrC,cAAc,EAAE,CAAC,CAAC,EAAE;oBAClB,CAAC,CAAC,eAAe,EAAE,CAAA;oBACnB,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,QAAQ,CAAC,CAAA;gBACrB,CAAC,YAED,KAAC,QAAQ,IACP,QAAQ,EAAE,CAAC,CAAC,EACZ,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,EACzC,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,YAAY,EACV,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,EAEjE,QAAQ,EAAE,cAAc,KAAK,QAAQ,EACrC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,YAAY,EAAE;wBACZ,IAAI,EAAE,MAAA,IAAI,CAAC,YAAY,0CAAE,IAAI;qBAC9B,GACD,IAzBG,yBAAyB,QAAQ,EAAE,CA0BpC,CACP,CAAA;QACH,CAAC,CAAC,GACD,CACJ,CAAA;AACH,CAAC"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { LeadingType } from '@pixum/menu-item';
|
|
2
|
-
import type { ComboBoxOptionItemProps } from '../types';
|
|
3
|
-
/**
|
|
4
|
-
* Props for the ComboBoxOptionsWithGrouping component
|
|
5
|
-
*/
|
|
6
|
-
interface ComboBoxOptionsWithGroupingProps {
|
|
7
|
-
/** Group name/header text */
|
|
8
|
-
group: string;
|
|
9
|
-
/** Array of option items in this group */
|
|
10
|
-
items: ComboBoxOptionItemProps[];
|
|
11
|
-
/** Currently selected option value */
|
|
12
|
-
selectedOption?: string;
|
|
13
|
-
/** Callback fired when an option is clicked */
|
|
14
|
-
onClick?: (value: string) => void;
|
|
15
|
-
/** Type of leading element to display (icon, avatar, etc.) */
|
|
16
|
-
leadingType?: LeadingType;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* ComboBoxOptionsWithGrouping component that renders a group of options with a header.
|
|
20
|
-
* Used to display categorized/grouped options in the combobox.
|
|
21
|
-
*
|
|
22
|
-
* @param props - The props for the ComboBoxOptionsWithGrouping component
|
|
23
|
-
* @returns A group container with a sticky header and option items
|
|
24
|
-
*/
|
|
25
|
-
export declare function ComboxBoxOptionsWithGrouping({ group, items, selectedOption, onClick, leadingType, }: ComboBoxOptionsWithGroupingProps): import("react/jsx-runtime").JSX.Element;
|
|
26
|
-
export {};
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import Text, { TextVariant } from '@pixum/text';
|
|
3
|
-
import { ComboBoxOptionsItems } from './ComboBoxOptionsItems';
|
|
4
|
-
/**
|
|
5
|
-
* ComboBoxOptionsWithGrouping component that renders a group of options with a header.
|
|
6
|
-
* Used to display categorized/grouped options in the combobox.
|
|
7
|
-
*
|
|
8
|
-
* @param props - The props for the ComboBoxOptionsWithGrouping component
|
|
9
|
-
* @returns A group container with a sticky header and option items
|
|
10
|
-
*/
|
|
11
|
-
export function ComboxBoxOptionsWithGrouping({ group, items, selectedOption, onClick, leadingType, }) {
|
|
12
|
-
return (_jsxs("div", { className: "combobox__options-group", children: [_jsx(Text, { variant: TextVariant.HEADLINE, className: "combobox__sticky-header", children: group }), _jsx(ComboBoxOptionsItems, { items: items, selectedOption: selectedOption, onClick: onClick, leadingType: leadingType })] }, `combobox__options-group-${group}`));
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=ComboBoxOptionsWithGrouping.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ComboBoxOptionsWithGrouping.js","sourceRoot":"","sources":["../../src/partials/ComboBoxOptionsWithGrouping.tsx"],"names":[],"mappings":";AACA,OAAO,IAAI,EAAE,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAkB7D;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B,CAAC,EAC3C,KAAK,EACL,KAAK,EACL,cAAc,EACd,OAAO,EACP,WAAW,GACsB;IACjC,OAAO,CACL,eACE,SAAS,EAAC,yBAAyB,aAGnC,KAAC,IAAI,IAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAC,yBAAyB,YACrE,KAAK,GACD,EACP,KAAC,oBAAoB,IACnB,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,GACxB,KAVG,2BAA2B,KAAK,EAAE,CAWnC,CACP,CAAA;AACH,CAAC"}
|
package/lib/partials/index.d.ts
DELETED
package/lib/partials/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/partials/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,wBAAwB,CAAA"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Calculates the maximum height for the options list based on viewport height.
|
|
3
|
-
* Subtracts the header and input field heights from the window height.
|
|
4
|
-
*
|
|
5
|
-
* @returns The maximum height in pixels for the options list
|
|
6
|
-
*/
|
|
7
|
-
export declare function calculateListMaxHeight(): number;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Calculates the maximum height for the options list based on viewport height.
|
|
3
|
-
* Subtracts the header and input field heights from the window height.
|
|
4
|
-
*
|
|
5
|
-
* @returns The maximum height in pixels for the options list
|
|
6
|
-
*/
|
|
7
|
-
export function calculateListMaxHeight() {
|
|
8
|
-
const windowHeight = window.innerHeight;
|
|
9
|
-
const headerHeight = 50;
|
|
10
|
-
const inputFieldHeight = 35;
|
|
11
|
-
const maxListHeight = windowHeight - headerHeight - inputFieldHeight;
|
|
12
|
-
return maxListHeight;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=calculateListMaxHeight.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"calculateListMaxHeight.js","sourceRoot":"","sources":["../../src/utils/calculateListMaxHeight.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB;IAClC,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAA;IACvC,MAAM,YAAY,GAAG,EAAE,CAAA;IACvB,MAAM,gBAAgB,GAAG,EAAE,CAAA;IAC3B,MAAM,aAAa,GAAG,YAAY,GAAG,YAAY,GAAG,gBAAgB,CAAA;IAErE,OAAO,aAAa,CAAA;AACvB,CAAC"}
|
package/lib/utils/index.d.ts
DELETED
package/lib/utils/index.js
DELETED
package/lib/utils/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Scrolls the selected option into view within the options container.
|
|
3
|
-
* Handles both desktop dropdown and mobile bottom sheet layouts.
|
|
4
|
-
*
|
|
5
|
-
* @param isDesktop - Whether the viewport is desktop size
|
|
6
|
-
*/
|
|
7
|
-
export declare function scrollOptionToViewport(isDesktop: boolean): void;
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Scrolls the selected option into view within the options container.
|
|
3
|
-
* Handles both desktop dropdown and mobile bottom sheet layouts.
|
|
4
|
-
*
|
|
5
|
-
* @param isDesktop - Whether the viewport is desktop size
|
|
6
|
-
*/
|
|
7
|
-
export function scrollOptionToViewport(isDesktop) {
|
|
8
|
-
const comboboxOptions = isDesktop
|
|
9
|
-
? document.querySelector('.combobox .menu')
|
|
10
|
-
: document.querySelector('.combobox__options .menu');
|
|
11
|
-
const selectedItem = document.querySelector('.menu-item.selected');
|
|
12
|
-
if (!selectedItem || !comboboxOptions) {
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
// Find the options group that contains the selected item
|
|
16
|
-
const comboboxOptionsGroup = selectedItem.closest('.combobox__options-group');
|
|
17
|
-
if (comboboxOptionsGroup) {
|
|
18
|
-
// For grouped options, scroll to the group header
|
|
19
|
-
const stickyHeader = comboboxOptionsGroup.querySelector('.combobox__sticky-header');
|
|
20
|
-
if (stickyHeader) {
|
|
21
|
-
const headerTop = stickyHeader.offsetTop;
|
|
22
|
-
comboboxOptions.scrollTo({ top: headerTop, behavior: 'smooth' });
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
// For ungrouped options, scroll to the selected item
|
|
27
|
-
const selectedItemTop = selectedItem.offsetTop;
|
|
28
|
-
const selectedItemHeight = selectedItem.offsetHeight;
|
|
29
|
-
const containerHeight = comboboxOptions.clientHeight;
|
|
30
|
-
// Center the item in the viewport
|
|
31
|
-
const scrollTop = selectedItemTop - containerHeight / 2 + selectedItemHeight / 2;
|
|
32
|
-
comboboxOptions.scrollTo({
|
|
33
|
-
top: Math.max(0, scrollTop),
|
|
34
|
-
behavior: 'smooth',
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=scrollOptionToViewport.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scrollOptionToViewport.js","sourceRoot":"","sources":["../../src/utils/scrollOptionToViewport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAkB;IACvD,MAAM,eAAe,GAAG,SAAS;QAC/B,CAAC,CAAE,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAiB;QAC5D,CAAC,CAAE,QAAQ,CAAC,aAAa,CAAC,0BAA0B,CAAiB,CAAA;IACvE,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CACzC,qBAAqB,CACP,CAAA;IAEhB,IAAI,CAAC,YAAY,IAAI,CAAC,eAAe,EAAE,CAAC;QACtC,OAAM;IACR,CAAC;IAED,yDAAyD;IACzD,MAAM,oBAAoB,GAAG,YAAY,CAAC,OAAO,CAC/C,0BAA0B,CACZ,CAAA;IAEhB,IAAI,oBAAoB,EAAE,CAAC;QACzB,kDAAkD;QAClD,MAAM,YAAY,GAAG,oBAAoB,CAAC,aAAa,CACrD,0BAA0B,CACZ,CAAA;QAEhB,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAA;YACxC,eAAe,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;QAClE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,qDAAqD;QACrD,MAAM,eAAe,GAAG,YAAY,CAAC,SAAS,CAAA;QAC9C,MAAM,kBAAkB,GAAG,YAAY,CAAC,YAAY,CAAA;QACpD,MAAM,eAAe,GAAG,eAAe,CAAC,YAAY,CAAA;QAEpD,kCAAkC;QAClC,MAAM,SAAS,GACb,eAAe,GAAG,eAAe,GAAG,CAAC,GAAG,kBAAkB,GAAG,CAAC,CAAA;QAChE,eAAe,CAAC,QAAQ,CAAC;YACvB,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;YAC3B,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAA;IACJ,CAAC;AACH,CAAC"}
|