@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.
Files changed (59) hide show
  1. package/lib/ComboBox.d.ts +4 -10
  2. package/lib/ComboBox.js +28 -67
  3. package/lib/ComboBox.js.map +1 -1
  4. package/lib/ComboboxOptions/Options.d.ts +0 -1
  5. package/lib/ComboboxOptions/Options.js +17 -22
  6. package/lib/ComboboxOptions/Options.js.map +1 -1
  7. package/lib/ComboboxOptions/OptionsGroup.d.ts +0 -1
  8. package/lib/ComboboxOptions/OptionsGroup.js +7 -48
  9. package/lib/ComboboxOptions/OptionsGroup.js.map +1 -1
  10. package/lib/ComboboxOptions/index.js +16 -61
  11. package/lib/ComboboxOptions/index.js.map +1 -1
  12. package/lib/helper/calculateListMaxHeight.js +5 -9
  13. package/lib/helper/calculateListMaxHeight.js.map +1 -1
  14. package/lib/helper/scrollOptionToViewport.js +9 -12
  15. package/lib/helper/scrollOptionToViewport.js.map +1 -1
  16. package/lib/helper/useIsDesktopScreenWidth.js +9 -11
  17. package/lib/helper/useIsDesktopScreenWidth.js.map +1 -1
  18. package/lib/index.d.ts +1 -1
  19. package/lib/index.js +1 -1
  20. package/lib/index.js.map +1 -1
  21. package/lib/styles.css +1 -1
  22. package/lib/types.d.ts +5 -39
  23. package/package.json +6 -3
  24. package/lib/helper/index.d.ts +0 -2
  25. package/lib/helper/index.js +0 -3
  26. package/lib/helper/index.js.map +0 -1
  27. package/lib/hooks/index.d.ts +0 -1
  28. package/lib/hooks/index.js +0 -2
  29. package/lib/hooks/index.js.map +0 -1
  30. package/lib/hooks/useIsDesktopScreenWidth.d.ts +0 -1
  31. package/lib/hooks/useIsDesktopScreenWidth.js +0 -36
  32. package/lib/hooks/useIsDesktopScreenWidth.js.map +0 -1
  33. package/lib/partials/ComboBoxGroupedOptions.d.ts +0 -13
  34. package/lib/partials/ComboBoxGroupedOptions.js +0 -10
  35. package/lib/partials/ComboBoxGroupedOptions.js.map +0 -1
  36. package/lib/partials/ComboBoxMenu.d.ts +0 -3
  37. package/lib/partials/ComboBoxMenu.js +0 -22
  38. package/lib/partials/ComboBoxMenu.js.map +0 -1
  39. package/lib/partials/ComboBoxOptions.d.ts +0 -10
  40. package/lib/partials/ComboBoxOptions.js +0 -29
  41. package/lib/partials/ComboBoxOptions.js.map +0 -1
  42. package/lib/partials/ComboBoxOptionsItems.d.ts +0 -24
  43. package/lib/partials/ComboBoxOptionsItems.js +0 -24
  44. package/lib/partials/ComboBoxOptionsItems.js.map +0 -1
  45. package/lib/partials/ComboBoxOptionsWithGrouping.d.ts +0 -26
  46. package/lib/partials/ComboBoxOptionsWithGrouping.js +0 -14
  47. package/lib/partials/ComboBoxOptionsWithGrouping.js.map +0 -1
  48. package/lib/partials/index.d.ts +0 -3
  49. package/lib/partials/index.js +0 -4
  50. package/lib/partials/index.js.map +0 -1
  51. package/lib/utils/calculateListMaxHeight.d.ts +0 -7
  52. package/lib/utils/calculateListMaxHeight.js +0 -14
  53. package/lib/utils/calculateListMaxHeight.js.map +0 -1
  54. package/lib/utils/index.d.ts +0 -2
  55. package/lib/utils/index.js +0 -3
  56. package/lib/utils/index.js.map +0 -1
  57. package/lib/utils/scrollOptionToViewport.d.ts +0 -7
  58. package/lib/utils/scrollOptionToViewport.js +0 -38
  59. package/lib/utils/scrollOptionToViewport.js.map +0 -1
package/lib/ComboBox.d.ts CHANGED
@@ -1,11 +1,5 @@
1
- import type { ComboBoxProps } from './types';
1
+ import React from 'react';
2
+ import { ComboBoxProps } from './types';
2
3
  import './styles.css';
3
- /**
4
- * ComboBox component that provides a searchable dropdown with options.
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
- 'use client';
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 { ComboBoxOptions } from './partials';
8
- import { SelectInput, SearchInput } from '@pixum/web-input';
9
- import { useIsDesktopScreenWidth } from './hooks';
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
- // Handle outside clicks for desktop dropdown
57
- useEffect(() => {
58
- if (!isDesktop || !isOpen)
59
- return;
60
- const handleDocumentClick = (event) => {
61
- var _a;
62
- const node = event.target;
63
- const isOutside = !((_a = comboBoxRef.current) === null || _a === void 0 ? void 0 : _a.contains(node));
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 (_jsx(Text, { variant: TextVariant.SUBHEADLINE, className: "combobox--no-results-text", children: noResultsText }));
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 (_jsxs(ThemeProvider, { theme: theme, children: [showSelectField && (_jsx(SelectInput, { className: clsx(isOpen && 'active', className), name: name, label: label, value: value, onClick: handleOnClick, disableTrailingIconButton: true, readOnly: true })), isDesktop && isOpen && (_jsxs("div", { className: "combobox", ref: comboBoxRef, children: [withSearch && (_jsx(SearchInput, { name: name, value: searchQuery, pattern: searchPattern, label: label, onChange: handleChange, onClear: handleClearInput, displayLeadingIcon: isOpen, isCompact: true, inputMode: inputMode, autoFocus: true })), optionsExist ? (_jsx(ComboBoxOptions, { options: options, onClick: handleOptionItemClick, selectedOption: value, leadingType: leadingType })) : (_jsx(NoResultsTextComponent, {})), _jsx("div", {})] })), !isDesktop && isOpen && (_jsxs(BottomSheet, { className: "combobox__bottom-sheet", open: isOpen, onClose: clearAndClose, ref: bottomSheetRef, children: [_jsxs("div", { className: "combobox--header", children: [_jsx(Text, { variant: TextVariant.HEADLINE, className: "combobox--headline", children: headline }), withSearch && (_jsx(SearchInput, { name: name, value: searchQuery, pattern: searchPattern, onChange: handleChange, onClear: handleClearInput, onFocus: removePlaceholder, placeholder: inputPlaceholder, isCompact: true, inputMode: inputMode, displayLeadingIcon: isOpen }))] }), _jsx("div", { className: "combobox__options", children: optionsExist ? (_jsx(ComboBoxOptions, { options: options, onClick: handleOptionItemClick, selectedOption: value, leadingType: leadingType, optionDetails: optionDetails })) : (_jsx(NoResultsTextComponent, {})) })] }))] }));
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
@@ -1 +1 @@
1
- {"version":3,"file":"ComboBox.js","sourceRoot":"","sources":["../src/ComboBox.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAIL,SAAS,EACT,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAA;AACd,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,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,aAAa,EAAE,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,cAAc,CAAA;AAErB;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,EACvB,SAAS,GAAG,EAAE,EACd,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,aAAa,GAAG,EAAE,EAClB,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,GACE;IACd,MAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IAChD,MAAM,cAAc,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IAEnD,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;;;;OAIG;IACH,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;;OAEG;IACH,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,cAAc,CAAC,EAAE,CAAC,CAAA;IACpB,CAAC,CAAA;IAED;;OAEG;IACH,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,6CAA6C;IAC7C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM;YAAE,OAAM;QAEjC,MAAM,mBAAmB,GAAG,CAAC,KAAY,EAAE,EAAE;;YAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAc,CAAA;YACjC,MAAM,SAAS,GAAG,CAAC,CAAA,MAAA,WAAW,CAAC,OAAO,0CAAE,QAAQ,CAAC,IAAI,CAAC,CAAA,CAAA;YAEtD,IAAI,SAAS,EAAE,CAAC;gBACd,aAAa,EAAE,CAAA;gBACf,cAAc,aAAd,cAAc,uBAAd,cAAc,EAAI,CAAA;YACpB,CAAC;QACH,CAAC,CAAA;QAED,wEAAwE;QACxE,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAA;QAC7D,CAAC,EAAE,GAAG,CAAC,CAAA;QAEP,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,SAAS,CAAC,CAAA;YACvB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAA;QAChE,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAA;IAEvC;;;;OAIG;IACH,MAAM,qBAAqB,GAAG,CAAC,WAAmB,EAAE,EAAE;QACpD,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,WAAW,CAAC,CAAA;IAClC,CAAC,CAAA;IAED;;OAEG;IACH,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,OAAO,aAAP,OAAO,uBAAP,OAAO,EAAI,CAAA;IACb,CAAC,CAAA;IAED;;;;OAIG;IACH,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAClC,OAAO,CACL,KAAC,IAAI,IACH,OAAO,EAAE,WAAW,CAAC,WAAW,EAChC,SAAS,EAAC,2BAA2B,YAEpC,aAAa,GACT,CACR,CAAA;IACH,CAAC,CAAA;IAED;;OAEG;IACH,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,cAAc,CAAC,EAAE,CAAC,CAAA;IACpB,CAAC,CAAA;IAED,OAAO,CACL,MAAC,aAAa,IAAC,KAAK,EAAE,KAAK,aACxB,eAAe,IAAI,CAClB,KAAC,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,yBAAyB,QACzB,QAAQ,SACR,CACH,EACA,SAAS,IAAI,MAAM,IAAI,CACtB,eAAK,SAAS,EAAC,UAAU,EAAC,GAAG,EAAE,WAAW,aACvC,UAAU,IAAI,CACb,KAAC,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,kBAAkB,EAAE,MAAM,EAC1B,SAAS,QACT,SAAS,EAAE,SAAS,EACpB,SAAS,SACT,CACH,EACA,YAAY,CAAC,CAAC,CAAC,CACd,KAAC,eAAe,IACd,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,qBAAqB,EAC9B,cAAc,EAAE,KAAK,EACrB,WAAW,EAAE,WAAW,GACxB,CACH,CAAC,CAAC,CAAC,CACF,KAAC,sBAAsB,KAAG,CAC3B,EACD,eAAO,IACH,CACP,EACA,CAAC,SAAS,IAAI,MAAM,IAAI,CACvB,MAAC,WAAW,IACV,SAAS,EAAC,wBAAwB,EAClC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,EACtB,GAAG,EAAE,cAAc,aAEnB,eAAK,SAAS,EAAC,kBAAkB,aAC/B,KAAC,IAAI,IAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAC,oBAAoB,YAChE,QAAQ,GACJ,EACN,UAAU,IAAI,CACb,KAAC,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,IACG,EACN,cAAK,SAAS,EAAC,mBAAmB,YAC/B,YAAY,CAAC,CAAC,CAAC,CACd,KAAC,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,KAAC,sBAAsB,KAAG,CAC3B,GACG,IACM,CACf,IACa,CACjB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"ComboBox.js","sourceRoot":"","sources":["../src/ComboBox.tsx"],"names":[],"mappings":"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"}
@@ -5,7 +5,6 @@ interface OptionsProps {
5
5
  items: ComboBoxOptionProps[];
6
6
  selectedOption?: string;
7
7
  onClick?: (value: string) => void;
8
- onKeyDown: (e: React.KeyboardEvent, value: string) => void;
9
8
  leadingType?: LeadingType;
10
9
  }
11
10
  declare const Options: React.FC<OptionsProps>;
@@ -1,24 +1,19 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- var menu_item_1 = __importDefault(require("@pixum/menu-item"));
7
- var clsx_1 = __importDefault(require("clsx"));
8
- var react_1 = __importDefault(require("react"));
9
- var Options = function (_a) {
10
- var items = _a.items, selectedOption = _a.selectedOption, onClick = _a.onClick, onKeyDown = _a.onKeyDown, leadingType = _a.leadingType;
11
- return (react_1.default.createElement(react_1.default.Fragment, null, items.map(function (item, index) {
12
- var _a;
13
- return (react_1.default.createElement(menu_item_1.default, { key: "combobox-item-".concat(item.text), tabIndex: index, className: (0, clsx_1.default)(selectedOption === item.text && 'selected'), onClick: function () { return onClick === null || onClick === void 0 ? void 0 : onClick(item.text); }, onKeyDown: function (e) { return onKeyDown(e, item.text); }, onMouseEnter: item.onMouseEnter, leadingProps: leadingType
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":";;;;;AAAA,+DAAuE;AACvE,8CAAuB;AACvB,gDAAyB;AAWzB,IAAM,OAAO,GAA2B,UAAC,EAMxC;QALC,KAAK,WAAA,EACL,cAAc,oBAAA,EACd,OAAO,aAAA,EACP,SAAS,eAAA,EACT,WAAW,iBAAA;IACP,OAAA,CACJ,8DACG,KAAK,CAAC,GAAG,CAAC,UAAC,IAAmB,EAAE,KAAa;;QAAK,OAAA,CACjD,8BAAC,mBAAQ,IACP,GAAG,EAAE,wBAAiB,IAAI,CAAC,IAAI,CAAE,EACjC,QAAQ,EAAE,KAAK,EACf,SAAS,EAAE,IAAA,cAAI,EAAC,cAAc,KAAK,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,EAC3D,OAAO,EAAE,cAAM,OAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,IAAI,CAAC,IAAI,CAAC,EAApB,CAAoB,EACnC,SAAS,EAAE,UAAA,CAAC,IAAI,OAAA,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAvB,CAAuB,EACvC,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,YAAY,EACV,WAAW;gBACT,CAAC,CAAC;oBACE,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,WAAW;iBAClB;gBACH,CAAC,CAAC,SAAS,EAEf,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC,IAAI,EACtC,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,YAAY,EAAE;gBACZ,IAAI,EAAE,MAAA,IAAI,CAAC,YAAY,0CAAE,IAAI;aAC9B,GACD,CACH,CAAA;KAAA,CAAC,CACD,CACJ;AA3BK,CA2BL,CAAA;AAED,kBAAe,OAAO,CAAA"}
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
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAA+C;AAC/C,gDAAyB;AACzB,sDAA+B;AAY/B,IAAM,YAAY,GAAgC,UAAC,EAOlD;QANC,KAAK,WAAA,EACL,KAAK,WAAA,EACL,cAAc,oBAAA,EACd,OAAO,aAAA,EACP,SAAS,eAAA,EACT,WAAW,iBAAA;IACP,OAAA,CACJ,uCACE,SAAS,EAAC,yBAAyB,EACnC,GAAG,EAAE,kCAA2B,KAAK,CAAE;QAEvC,8BAAC,cAAI,IAAC,OAAO,EAAE,kBAAW,CAAC,QAAQ,EAAE,SAAS,EAAC,yBAAyB,IACrE,KAAK,CACD;QACP,8BAAC,iBAAO,IACN,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,GACxB,CACE,CACP;AAhBK,CAgBL,CAAA;AAED,kBAAe,YAAY,CAAA"}
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
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
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 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 (react_1.default.createElement(menu_1.default, { className: "combobox__options" },
57
- Array.isArray(options) ? (react_1.default.createElement(Options_1.default, { items: options, selectedOption: selectedOption, onClick: onClick, onKeyDown: handleOnKeyDown, leadingType: leadingType })) : (react_1.default.createElement(react_1.default.Fragment, null, Object.entries(options).map(function (_a) {
58
- var group = _a[0], items = _a[1];
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
- exports.default = ComboBoxOptions;
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAiD;AACjD,qDAA8B;AAC9B,2EAAyE;AAEzE,gEAAyC;AACzC,sDAA+B;AAC/B,8FAAuE;AAEvE,IAAM,eAAe,GAAmC,UAAC,EAMxD;QALC,OAAO,aAAA,EACP,OAAO,aAAA,EACP,cAAc,oBAAA,EACd,WAAW,iBAAA,EACX,aAAa,mBAAA;IAEb,IAAM,SAAS,GAAG,IAAA,iCAAuB,GAAE,CAAA;IAE3C,IAAM,eAAe,GAAG,UAAC,CAAsB,EAAE,KAAa;QAC5D,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;YACtB,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,KAAK,CAAC,CAAA;QAClB,CAAC;IACH,CAAC,CAAA;IAED,IAAA,iBAAS,EAAC;QACR,IAAA,+CAAsB,EAAC,SAAS,CAAC,CAAA;IACnC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAEf,OAAO,CACL,8BAAC,cAAI,IAAC,SAAS,EAAC,mBAAmB;QAChC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CACxB,8BAAC,iBAAO,IACN,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,8DACG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,UAAC,EAAc;gBAAb,KAAK,QAAA,EAAE,KAAK,QAAA;YAAM,OAAA,CAC/C,8BAAC,sBAAY,IACX,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;QATgD,CAShD,CAAC,CACD,CACJ;QACA,aAAa,IAAI,CAChB,uCAAK,SAAS,EAAC,wCAAwC,IACpD,aAAa,CACV,CACP,CACI,CACR,CAAA;AACH,CAAC,CAAA;AAED,kBAAe,eAAe,CAAA"}
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
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.calculateListMaxHeight = void 0;
4
- var calculateListMaxHeight = function () {
5
- var windowHeight = window.innerHeight;
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":";;;AAAO,IAAM,sBAAsB,GAAG;IAClC,IAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAA;IACvC,IAAM,YAAY,GAAG,EAAE,CAAA;IACvB,IAAM,gBAAgB,GAAG,EAAE,CAAA;IAC3B,IAAM,aAAa,GAAG,YAAY,GAAG,YAAY,GAAG,gBAAgB,CAAA;IAErE,OAAO,aAAa,CAAA;AAEvB,CAAC,CAAA;AARY,QAAA,sBAAsB,0BAQlC"}
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
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.scrollOptionToViewport = void 0;
4
- var scrollOptionToViewport = function (isDesktop) {
5
- var comboboxOptions = isDesktop ? document.querySelector('.menu') :
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
- var comboboxOptionsGroup = selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.parentElement;
7
+ let comboboxOptionsGroup = selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.parentElement;
10
8
  if (comboboxOptionsGroup) {
11
- var stickyHeader = comboboxOptionsGroup === null || comboboxOptionsGroup === void 0 ? void 0 : comboboxOptionsGroup.querySelector('.sticky-header');
12
- var stickyHeaderOffset = stickyHeader === null || stickyHeader === void 0 ? void 0 : stickyHeader.offsetTop;
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
- var selectedItemOffset = selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.offsetTop;
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":";;;AAAO,IAAM,sBAAsB,GAAG,UAAC,SAAkB;IACrD,IAAM,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAgB,CAAC,CAAC;QAChF,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAgB,CAAA;IAC/D,IAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAgB,CAAC;IAElF,IAAI,YAAY,IAAI,eAAe,EAAE,CAAC;QAClC,IAAI,oBAAoB,GAAG,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,aAAa,CAAA;QAEtD,IAAI,oBAAoB,EAAE,CAAC;YACvB,IAAM,YAAY,GAAG,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,aAAa,CAAC,gBAAgB,CAAgB,CAAA;YACzF,IAAM,kBAAkB,GAAG,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,SAAS,CAAA;YAElD,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAG,CAAC,CAAA;QAC3D,CAAC;aAAM,CAAC;YACJ,IAAM,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;QAC1D,CAAC;IACL,CAAC;AACL,CAAC,CAAA;AAnBY,QAAA,sBAAsB,0BAmBlC"}
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
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var react_1 = require("react");
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
- var _a = (0, react_1.useState)(window.innerWidth), screenWidth = _a[0], setScreenWidth_1 = _a[1];
8
- (0, react_1.useEffect)(function () {
9
- var handleResize = function () {
10
- setScreenWidth_1(window.innerWidth);
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 function () {
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
- exports.default = useIsDesktopScreenWidth;
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":";;AAAA,+BAA2C;AAE3C,IAAM,uBAAuB,GAAG;IAC9B,IAAM,eAAe,GAAG,OAAO,MAAM,KAAK,WAAW,CAAA;IAErD,IAAI,eAAe,EAAE,CAAC;QACd,IAAA,KAAgC,IAAA,gBAAQ,EAAC,MAAM,CAAC,UAAU,CAAC,EAA1D,WAAW,QAAA,EAAE,gBAAc,QAA+B,CAAA;QAEjE,IAAA,iBAAS,EAAC;YACR,IAAM,YAAY,GAAG;gBACnB,gBAAc,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YACnC,CAAC,CAAA;YAED,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;YAE/C,OAAO;gBACL,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,kBAAe,uBAAuB,CAAA"}
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
@@ -1,3 +1,3 @@
1
- import { ComboBox } from './ComboBox';
1
+ import ComboBox from './ComboBox';
2
2
  export default ComboBox;
3
3
  export * from './types';
package/lib/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { ComboBox } from './ComboBox';
1
+ import ComboBox from './ComboBox';
2
2
  export default ComboBox;
3
3
  export * from './types';
4
4
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,eAAe,QAAQ,CAAA;AACvB,cAAc,SAAS,CAAA"}
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;width:100%}.combobox .combobox--headline[class*=text--]+*{margin-top:var(--spacing)}.combobox .combobox--header,.combobox .combobox__options,.combobox__bottom-sheet .combobox__options{position:relative}.combobox__bottom-sheet .combobox--header{align-items:flex-start;height:auto;margin:var(--spacing-5) auto var(--spacing-2);padding:0 var(--spacing-2);width:100%}.combobox .combobox__options,.combobox__bottom-sheet .combobox__options{display:flex;flex-direction:column;max-height:none;overflow:scroll;width:100%}.combobox .combobox__option-wrapper,.combobox__bottom-sheet .combobox__option-wrapper{touch-action:manipulation;-webkit-tap-highlight-color:transparent;cursor:pointer;-webkit-user-select:none;user-select:none}.combobox .combobox__options .combobox__sticky-header,.combobox__bottom-sheet .combobox__options .combobox__sticky-header{background-color:var(--color-surface);border-bottom:1px solid var(--color-dim);padding:var(--spacing-1_25) var(--spacing-2);position:-webkit-sticky;position:sticky;top:0}.combobox__options .text--caption{color:var(--color-on-secondary)}.combobox .combobox__options .item-header,.combobox__bottom-sheet .combobox__options .item-header{display:flex;justify-content:space-between}.combobox .combobox__options .combobox__option-details,.combobox__bottom-sheet .combobox__options .combobox__option-details{background-color:var(--color-surface);bottom:0;padding-left:var(--spacing);padding-right:var(--spacing);position:-webkit-sticky;position:sticky}.combobox .combobox--no-results-text,.combobox__bottom-sheet .combobox--no-results-text{padding:var(--spacing-2) var(--spacing);text-align:center}@media screen and (min-width:960px){.combobox .combobox__options{border-radius:12px;margin-top:var(--spacing);max-height:330px;overflow:auto;position:absolute}}
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
- * Props for the ComboBoxOptions component
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.21-alpha.96+4413efbe6",
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/web-input": "2.0.0"
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": "4413efbe6c53288349f68811108039eab060dcf2"
24
+ "gitHead": "102c8c508fb1eea64a15d351f374396feffd93cf"
22
25
  }
@@ -1,2 +0,0 @@
1
- export * from './calculateListMaxHeight';
2
- export * from './scrollOptionToViewport';
@@ -1,3 +0,0 @@
1
- export * from './calculateListMaxHeight';
2
- export * from './scrollOptionToViewport';
3
- //# sourceMappingURL=index.js.map
@@ -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"}
@@ -1 +0,0 @@
1
- export * from './useIsDesktopScreenWidth';
@@ -1,2 +0,0 @@
1
- export * from './useIsDesktopScreenWidth';
2
- //# sourceMappingURL=index.js.map
@@ -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,3 +0,0 @@
1
- import React from 'react';
2
- import { ComboBoxOptionsProps } from '../types';
3
- export declare function ComboBoxMenu(props: ComboBoxOptionsProps): React.JSX.Element;
@@ -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"}
@@ -1,3 +0,0 @@
1
- export * from './ComboBoxOptions';
2
- export * from './ComboBoxOptionsWithGrouping';
3
- export * from './ComboBoxOptionsItems';
@@ -1,4 +0,0 @@
1
- export * from './ComboBoxOptions';
2
- export * from './ComboBoxOptionsWithGrouping';
3
- export * from './ComboBoxOptionsItems';
4
- //# sourceMappingURL=index.js.map
@@ -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"}
@@ -1,2 +0,0 @@
1
- export * from './calculateListMaxHeight';
2
- export * from './scrollOptionToViewport';
@@ -1,3 +0,0 @@
1
- export * from './calculateListMaxHeight';
2
- export * from './scrollOptionToViewport';
3
- //# sourceMappingURL=index.js.map
@@ -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"}