@pixum/combobox 5.3.2-alpha.64 → 5.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/ComboboxOptions/Options.d.ts +11 -0
- package/lib/ComboboxOptions/Options.js +19 -0
- package/lib/ComboboxOptions/Options.js.map +1 -0
- package/lib/ComboboxOptions/OptionsGroup.d.ts +12 -0
- package/lib/ComboboxOptions/OptionsGroup.js +8 -0
- package/lib/ComboboxOptions/OptionsGroup.js.map +1 -0
- package/lib/ComboboxOptions/index.d.ts +4 -0
- package/lib/ComboboxOptions/index.js +19 -0
- package/lib/ComboboxOptions/index.js.map +1 -0
- package/lib/helper/calculateListMaxHeight.d.ts +1 -0
- package/lib/helper/calculateListMaxHeight.js +8 -0
- package/lib/helper/calculateListMaxHeight.js.map +1 -0
- package/lib/helper/scrollOptionToViewport.d.ts +1 -0
- package/lib/helper/scrollOptionToViewport.js +19 -0
- package/lib/helper/scrollOptionToViewport.js.map +1 -0
- package/lib/helper/useIsDesktopScreenWidth.d.ts +2 -0
- package/lib/helper/useIsDesktopScreenWidth.js +20 -0
- package/lib/helper/useIsDesktopScreenWidth.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { LeadingType } from '@pixum/menu-item';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { ComboBoxOptionProps } from '../types';
|
|
4
|
+
interface OptionsProps {
|
|
5
|
+
items: ComboBoxOptionProps[];
|
|
6
|
+
selectedOption?: string;
|
|
7
|
+
onClick?: (value: string) => void;
|
|
8
|
+
leadingType?: LeadingType;
|
|
9
|
+
}
|
|
10
|
+
declare const Options: React.FC<OptionsProps>;
|
|
11
|
+
export default Options;
|
|
@@ -0,0 +1,19 @@
|
|
|
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: {
|
|
15
|
+
text: (_a = item.subItemProps) === null || _a === void 0 ? void 0 : _a.text,
|
|
16
|
+
} })));
|
|
17
|
+
})));
|
|
18
|
+
export default Options;
|
|
19
|
+
//# sourceMappingURL=Options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { LeadingType } from '@pixum/menu-item';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { ComboBoxOptionProps } from '../types';
|
|
4
|
+
interface OptionsGroupProps {
|
|
5
|
+
group: string;
|
|
6
|
+
items: ComboBoxOptionProps[];
|
|
7
|
+
selectedOption?: string;
|
|
8
|
+
onClick?: (value: string) => void;
|
|
9
|
+
leadingType?: LeadingType;
|
|
10
|
+
}
|
|
11
|
+
declare const OptionsGroup: React.FC<OptionsGroupProps>;
|
|
12
|
+
export default OptionsGroup;
|
|
@@ -0,0 +1,8 @@
|
|
|
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;
|
|
8
|
+
//# sourceMappingURL=OptionsGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
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);
|
|
13
|
+
}, [isDesktop]);
|
|
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))));
|
|
17
|
+
};
|
|
18
|
+
export default ComboBoxOptions;
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const calculateListMaxHeight: () => number;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const calculateListMaxHeight = () => {
|
|
2
|
+
const windowHeight = window.innerHeight;
|
|
3
|
+
const headerHeight = 50;
|
|
4
|
+
const inputFieldHeight = 35;
|
|
5
|
+
const maxListHeight = windowHeight - headerHeight - inputFieldHeight;
|
|
6
|
+
return maxListHeight;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=calculateListMaxHeight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const scrollOptionToViewport: (isDesktop: boolean) => void;
|
|
@@ -0,0 +1,19 @@
|
|
|
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');
|
|
6
|
+
if (selectedItem && comboboxOptions) {
|
|
7
|
+
let comboboxOptionsGroup = selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.parentElement;
|
|
8
|
+
if (comboboxOptionsGroup) {
|
|
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;
|
|
11
|
+
comboboxOptions === null || comboboxOptions === void 0 ? void 0 : comboboxOptions.scrollTo({ top: stickyHeaderOffset });
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
const selectedItemOffset = selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.offsetTop;
|
|
15
|
+
comboboxOptions === null || comboboxOptions === void 0 ? void 0 : comboboxOptions.scrollTo({ top: selectedItemOffset });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=scrollOptionToViewport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useState, useEffect } from 'react';
|
|
2
|
+
const useIsDesktopScreenWidth = () => {
|
|
3
|
+
const hasWindowObject = typeof window !== 'undefined';
|
|
4
|
+
if (hasWindowObject) {
|
|
5
|
+
const [screenWidth, setScreenWidth] = useState(window.innerWidth);
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
const handleResize = () => {
|
|
8
|
+
setScreenWidth(window.innerWidth);
|
|
9
|
+
};
|
|
10
|
+
window.addEventListener('resize', handleResize);
|
|
11
|
+
return () => {
|
|
12
|
+
window.removeEventListener('resize', handleResize);
|
|
13
|
+
};
|
|
14
|
+
}, []);
|
|
15
|
+
return screenWidth > 960;
|
|
16
|
+
}
|
|
17
|
+
return false;
|
|
18
|
+
};
|
|
19
|
+
export default useIsDesktopScreenWidth;
|
|
20
|
+
//# sourceMappingURL=useIsDesktopScreenWidth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pixum/combobox",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.5.0",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"module": "lib/index.js",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -18,5 +18,5 @@
|
|
|
18
18
|
"sideEffects": [
|
|
19
19
|
"*.css"
|
|
20
20
|
],
|
|
21
|
-
"gitHead": "
|
|
21
|
+
"gitHead": "cebf8c3a2c8b34afce0736d8a4c1df38a7bb6ef7"
|
|
22
22
|
}
|