@mattermost/compass-ui 0.1.0-alpha.4 → 0.1.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/compass-ui-standalone.css +10 -0
- package/dist/compass-ui.css +2 -0
- package/dist/components/action-button/ActionButton.cjs +1 -1
- package/dist/components/action-button/ActionButton.cjs.map +1 -1
- package/dist/components/action-button/ActionButton.d.ts +2 -1
- package/dist/components/action-button/ActionButton.d.ts.map +1 -1
- package/dist/components/action-button/ActionButton.js +22 -12
- package/dist/components/action-button/ActionButton.js.map +1 -1
- package/dist/components/action-button/ActionButton.module.css +1 -1
- package/dist/components/action-button/ActionButton.module.scss.cjs +1 -1
- package/dist/components/action-button/ActionButton.module.scss.js +5 -5
- package/dist/components/attachment-card/AttachmentCard.cjs +1 -1
- package/dist/components/attachment-card/AttachmentCard.cjs.map +1 -1
- package/dist/components/attachment-card/AttachmentCard.d.ts +3 -1
- package/dist/components/attachment-card/AttachmentCard.d.ts.map +1 -1
- package/dist/components/attachment-card/AttachmentCard.js +92 -82
- package/dist/components/attachment-card/AttachmentCard.js.map +1 -1
- package/dist/components/attachment-card/AttachmentCard.module.css +1 -1
- package/dist/components/attachment-card/AttachmentCard.module.scss.cjs +1 -1
- package/dist/components/attachment-card/AttachmentCard.module.scss.js +19 -18
- package/dist/components/attachment-card/AttachmentCard.module.scss.js.map +1 -1
- package/dist/components/button/Button.module.css +1 -1
- package/dist/components/button/Button.module.scss.cjs +1 -1
- package/dist/components/button/Button.module.scss.js +15 -15
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs.map +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts +4 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts.map +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.js +112 -92
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.js.map +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.css +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.cjs +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.js +22 -20
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.js.map +1 -1
- package/dist/components/checkbox/Checkbox.cjs +1 -1
- package/dist/components/checkbox/Checkbox.cjs.map +1 -1
- package/dist/components/checkbox/Checkbox.d.ts +3 -3
- package/dist/components/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/checkbox/Checkbox.js +21 -20
- package/dist/components/checkbox/Checkbox.js.map +1 -1
- package/dist/components/checkbox/Checkbox.module.css +1 -1
- package/dist/components/checkbox/Checkbox.module.scss.cjs +1 -1
- package/dist/components/checkbox/Checkbox.module.scss.js +7 -7
- package/dist/components/chip/Chip.cjs +1 -1
- package/dist/components/chip/Chip.cjs.map +1 -1
- package/dist/components/chip/Chip.d.ts +3 -5
- package/dist/components/chip/Chip.d.ts.map +1 -1
- package/dist/components/chip/Chip.js +90 -48
- package/dist/components/chip/Chip.js.map +1 -1
- package/dist/components/chip/Chip.module.css +1 -1
- package/dist/components/chip/Chip.module.scss.cjs +1 -1
- package/dist/components/chip/Chip.module.scss.js +9 -9
- package/dist/components/chip/ChipGroup.cjs +2 -0
- package/dist/components/chip/ChipGroup.cjs.map +1 -0
- package/dist/components/chip/ChipGroup.d.ts +16 -0
- package/dist/components/chip/ChipGroup.d.ts.map +1 -0
- package/dist/components/chip/ChipGroup.js +112 -0
- package/dist/components/chip/ChipGroup.js.map +1 -0
- package/dist/components/chip/ChipGroup.module.css +1 -0
- package/dist/components/chip/ChipGroup.module.scss.cjs +2 -0
- package/dist/components/chip/ChipGroup.module.scss.cjs.map +1 -0
- package/dist/components/chip/ChipGroup.module.scss.js +7 -0
- package/dist/components/chip/ChipGroup.module.scss.js.map +1 -0
- package/dist/components/chip/index.cjs +1 -1
- package/dist/components/chip/index.d.ts +2 -0
- package/dist/components/chip/index.d.ts.map +1 -1
- package/dist/components/chip/index.js +4 -2
- package/dist/components/chip/index.js.map +1 -1
- package/dist/components/combobox/Combobox.cjs +1 -1
- package/dist/components/combobox/Combobox.cjs.map +1 -1
- package/dist/components/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/combobox/Combobox.js +115 -109
- package/dist/components/combobox/Combobox.js.map +1 -1
- package/dist/components/combobox/Combobox.module.css +1 -1
- package/dist/components/combobox/Combobox.module.scss.cjs +1 -1
- package/dist/components/combobox/Combobox.module.scss.js +27 -29
- package/dist/components/date-range-picker/DateRangePicker.cjs +1 -1
- package/dist/components/date-range-picker/DateRangePicker.cjs.map +1 -1
- package/dist/components/date-range-picker/DateRangePicker.js +154 -154
- package/dist/components/date-range-picker/DateRangePicker.js.map +1 -1
- package/dist/components/date-range-picker/DateRangePicker.module.css +1 -1
- package/dist/components/date-range-picker/DateRangePicker.module.scss.cjs +1 -1
- package/dist/components/date-range-picker/DateRangePicker.module.scss.js +28 -45
- package/dist/components/dropdown/Dropdown.cjs +1 -1
- package/dist/components/dropdown/Dropdown.cjs.map +1 -1
- package/dist/components/dropdown/Dropdown.js +1 -1
- package/dist/components/dropdown/Dropdown.js.map +1 -1
- package/dist/components/dropdown/Dropdown.module.css +1 -1
- package/dist/components/dropdown/Dropdown.module.scss.cjs +1 -1
- package/dist/components/dropdown/Dropdown.module.scss.js +15 -16
- package/dist/components/global-banner/GlobalBanner.module.css +1 -1
- package/dist/components/global-banner/GlobalBanner.module.scss.cjs +1 -1
- package/dist/components/global-banner/GlobalBanner.module.scss.js +10 -10
- package/dist/components/icon-button/IconButton.cjs +1 -1
- package/dist/components/icon-button/IconButton.cjs.map +1 -1
- package/dist/components/icon-button/IconButton.d.ts +1 -1
- package/dist/components/icon-button/IconButton.d.ts.map +1 -1
- package/dist/components/icon-button/IconButton.js +14 -14
- package/dist/components/icon-button/IconButton.js.map +1 -1
- package/dist/components/icon-button/IconButton.module.css +1 -1
- package/dist/components/icon-button/IconButton.module.scss.cjs +1 -1
- package/dist/components/icon-button/IconButton.module.scss.js +15 -15
- package/dist/components/image-preview/ImagePreview.cjs +1 -1
- package/dist/components/image-preview/ImagePreview.cjs.map +1 -1
- package/dist/components/image-preview/ImagePreview.d.ts +2 -1
- package/dist/components/image-preview/ImagePreview.d.ts.map +1 -1
- package/dist/components/image-preview/ImagePreview.js +70 -52
- package/dist/components/image-preview/ImagePreview.js.map +1 -1
- package/dist/components/image-preview/ImagePreview.module.css +1 -1
- package/dist/components/image-preview/ImagePreview.module.scss.cjs +1 -1
- package/dist/components/image-preview/ImagePreview.module.scss.js +15 -15
- package/dist/components/menu-item/MenuItem.cjs +1 -1
- package/dist/components/menu-item/MenuItem.cjs.map +1 -1
- package/dist/components/menu-item/MenuItem.js +11 -11
- package/dist/components/menu-item/MenuItem.js.map +1 -1
- package/dist/components/menu-item/MenuItem.module.css +1 -1
- package/dist/components/menu-item/MenuItem.module.scss.cjs +1 -1
- package/dist/components/menu-item/MenuItem.module.scss.js +16 -16
- package/dist/components/message/Message.module.css +1 -1
- package/dist/components/message/Message.module.scss.cjs +1 -1
- package/dist/components/message/Message.module.scss.js +20 -20
- package/dist/components/message-reactions/MessageReactions.module.css +1 -1
- package/dist/components/message-reactions/MessageReactions.module.scss.cjs +1 -1
- package/dist/components/message-reactions/MessageReactions.module.scss.js +12 -12
- package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.css +1 -1
- package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.cjs +1 -1
- package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.js +5 -5
- package/dist/components/pagination-dots/PaginationDots.module.css +1 -1
- package/dist/components/pagination-dots/PaginationDots.module.scss.cjs +1 -1
- package/dist/components/pagination-dots/PaginationDots.module.scss.js +8 -8
- package/dist/components/radio/Radio.cjs +1 -1
- package/dist/components/radio/Radio.cjs.map +1 -1
- package/dist/components/radio/Radio.d.ts +3 -3
- package/dist/components/radio/Radio.d.ts.map +1 -1
- package/dist/components/radio/Radio.js +11 -11
- package/dist/components/radio/Radio.js.map +1 -1
- package/dist/components/radio/Radio.module.css +1 -1
- package/dist/components/radio/Radio.module.scss.cjs +1 -1
- package/dist/components/radio/Radio.module.scss.js +11 -11
- package/dist/components/search-input/SearchInput.cjs +1 -1
- package/dist/components/search-input/SearchInput.cjs.map +1 -1
- package/dist/components/search-input/SearchInput.d.ts +2 -0
- package/dist/components/search-input/SearchInput.d.ts.map +1 -1
- package/dist/components/search-input/SearchInput.js +78 -64
- package/dist/components/search-input/SearchInput.js.map +1 -1
- package/dist/components/search-input/SearchInput.module.css +1 -1
- package/dist/components/search-input/SearchInput.module.scss.cjs +1 -1
- package/dist/components/search-input/SearchInput.module.scss.js +16 -23
- package/dist/components/search-input/SearchInput.module.scss.js.map +1 -1
- package/dist/components/select/Select.cjs +1 -1
- package/dist/components/select/Select.cjs.map +1 -1
- package/dist/components/select/Select.d.ts.map +1 -1
- package/dist/components/select/Select.js +64 -64
- package/dist/components/select/Select.js.map +1 -1
- package/dist/components/select/Select.module.css +1 -1
- package/dist/components/select/Select.module.scss.cjs +1 -1
- package/dist/components/select/Select.module.scss.js +24 -26
- package/dist/components/switch/Switch.cjs +1 -1
- package/dist/components/switch/Switch.cjs.map +1 -1
- package/dist/components/switch/Switch.d.ts.map +1 -1
- package/dist/components/switch/Switch.js +2 -2
- package/dist/components/switch/Switch.js.map +1 -1
- package/dist/components/switch/Switch.module.css +1 -1
- package/dist/components/switch/Switch.module.scss.cjs +1 -1
- package/dist/components/switch/Switch.module.scss.js +15 -15
- package/dist/components/tabs/Tabs.cjs +1 -1
- package/dist/components/tabs/Tabs.cjs.map +1 -1
- package/dist/components/tabs/Tabs.d.ts +4 -0
- package/dist/components/tabs/Tabs.d.ts.map +1 -1
- package/dist/components/tabs/Tabs.js +47 -31
- package/dist/components/tabs/Tabs.js.map +1 -1
- package/dist/components/tabs/Tabs.module.css +1 -1
- package/dist/components/tabs/Tabs.module.scss.cjs +1 -1
- package/dist/components/tabs/Tabs.module.scss.js +8 -7
- package/dist/components/tabs/Tabs.module.scss.js.map +1 -1
- package/dist/components/tag/Tag.module.css +1 -1
- package/dist/components/tag/Tag.module.scss.cjs +1 -1
- package/dist/components/tag/Tag.module.scss.js +15 -15
- package/dist/components/text-area/TextArea.cjs +1 -1
- package/dist/components/text-area/TextArea.cjs.map +1 -1
- package/dist/components/text-area/TextArea.d.ts.map +1 -1
- package/dist/components/text-area/TextArea.js +57 -56
- package/dist/components/text-area/TextArea.js.map +1 -1
- package/dist/components/text-area/TextArea.module.css +1 -1
- package/dist/components/text-area/TextArea.module.scss.cjs +1 -1
- package/dist/components/text-area/TextArea.module.scss.js +12 -17
- package/dist/components/text-input/TextInput.cjs +1 -1
- package/dist/components/text-input/TextInput.cjs.map +1 -1
- package/dist/components/text-input/TextInput.d.ts.map +1 -1
- package/dist/components/text-input/TextInput.js +59 -58
- package/dist/components/text-input/TextInput.js.map +1 -1
- package/dist/components/text-input/TextInput.module.css +1 -1
- package/dist/components/text-input/TextInput.module.scss.cjs +1 -1
- package/dist/components/text-input/TextInput.module.scss.js +16 -24
- package/dist/components/thread-footer/ThreadFooter.cjs +1 -1
- package/dist/components/thread-footer/ThreadFooter.cjs.map +1 -1
- package/dist/components/thread-footer/ThreadFooter.d.ts +7 -8
- package/dist/components/thread-footer/ThreadFooter.d.ts.map +1 -1
- package/dist/components/thread-footer/ThreadFooter.js +59 -62
- package/dist/components/thread-footer/ThreadFooter.js.map +1 -1
- package/dist/components/thread-footer/ThreadFooter.module.css +1 -1
- package/dist/components/thread-footer/ThreadFooter.module.scss.cjs +1 -1
- package/dist/components/thread-footer/ThreadFooter.module.scss.js +17 -17
- package/dist/components/thread-footer/index.d.ts +7 -1
- package/dist/components/thread-footer/index.d.ts.map +1 -1
- package/dist/components/thread-list-item/ThreadListItem.cjs +1 -1
- package/dist/components/thread-list-item/ThreadListItem.cjs.map +1 -1
- package/dist/components/thread-list-item/ThreadListItem.d.ts +1 -1
- package/dist/components/thread-list-item/ThreadListItem.d.ts.map +1 -1
- package/dist/components/thread-list-item/ThreadListItem.js +102 -87
- package/dist/components/thread-list-item/ThreadListItem.js.map +1 -1
- package/dist/components/thread-list-item/ThreadListItem.module.css +1 -1
- package/dist/components/thread-list-item/ThreadListItem.module.scss.cjs +1 -1
- package/dist/components/thread-list-item/ThreadListItem.module.scss.js +26 -23
- package/dist/components/thread-list-item/ThreadListItem.module.scss.js.map +1 -1
- package/dist/components/toast/Toast.module.css +1 -1
- package/dist/components/toast/Toast.module.scss.cjs +1 -1
- package/dist/components/toast/Toast.module.scss.js +6 -6
- package/dist/components/tour-point/TourPoint.module.css +1 -1
- package/dist/components/tour-point/TourPoint.module.scss.cjs +1 -1
- package/dist/components/tour-point/TourPoint.module.scss.js +28 -28
- package/dist/index.cjs +1 -1
- package/dist/index.css +31 -29
- package/dist/index.js +156 -154
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChipGroup.module.scss.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChipGroup.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./Chip.cjs");exports.Chip=e.default;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./Chip.cjs"),r=require("./ChipGroup.cjs");exports.Chip=e.default;exports.ChipGroup=r.default;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/chip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/chip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const c=require("react/jsx-runtime"),l=require("react"),__Ee=require("@mattermost/compass-icons/components/chevron-down.js"),Ee=__Ee?.default??__Ee,Be=require("../chip/Chip.cjs"),$e=require("../chip/ChipGroup.cjs"),Fe=require("../icon/Icon.cjs"),He=require("../menu-item/MenuItem.cjs"),re=require("../popover-menu/PopoverMenu.cjs"),Te=require("../user-avatar/UserAvatar.cjs"),Ue=require("../../hooks/use-anchored-popup-portal.cjs"),ze=require("../../hooks/use-outside-close.cjs"),Le=require("../../hooks/use-popover-transition.cjs"),Ke=require("../../utils/string.cjs"),r=require("./Combobox.module.scss.cjs"),ae=280,Ge={small:"small",medium:"medium",large:"large"};function Qe(a,d){return d?a.label.toLowerCase().includes(d.toLowerCase()):!0}function Xe(a){return a==null?null:Array.isArray(a)?a[0]??null:a===""?null:a}function We(a){return a==null?[]:Array.isArray(a)?a:a===""?[]:[a]}function Ye(a){if(a.leadingVisual!=null)return a.leadingVisual;if(a.leadingAvatar!=null)return c.jsx(Te.default,{src:a.leadingAvatar.src,alt:a.leadingAvatar.alt,size:"24"})}const Ze=l.forwardRef(function({options:d,multiple:n=!1,value:U,defaultValue:z,onChange:I,inputValue:S,defaultInputValue:oe="",onInputChange:x,label:g,placeholder:ce,leadingIcon:N,size:L="medium",invalid:K=!1,disabled:m=!1,filter:w=!0,emptyMessage:ue="No results",className:ie="",id:de,"aria-label":G,portalContainer:fe=null,zIndex:be},y){const ve=l.useId(),P=de??ve,p=`${P}-listbox`,V=l.useRef(null),Q=l.useRef(null),j=l.useRef(null),xe=l.useCallback(e=>{j.current=e,typeof y=="function"?y(e):y&&(y.current=e)},[y]),R=U!==void 0,[me,he]=l.useState(()=>z!==void 0?z:n?[]:null),X=R?U:me,f=n?null:Xe(X),i=n?We(X):[],b=S!==void 0,[E,B]=l.useState(oe),[u,W]=l.useState(!1),[_e,Y]=l.useState(!1),[v,h]=l.useState(-1),[C,$]=l.useState(null),M=l.useMemo(()=>f==null?void 0:d.find(e=>e.value===f),[d,f]),F=b?S:n?E:C!==null?C:(M==null?void 0:M.label)??E,Z=b?S:n?E:C!==null?C:"",H=l.useCallback(e=>{b||(B(e),n||$(e)),x==null||x(e)},[b,n,x]),A=l.useCallback(e=>{R||he(e),I==null||I(e)},[R,I]),o=l.useMemo(()=>{if(w===!1)return d;const e=typeof w=="function"?w:Qe;return d.filter(t=>e(t,Z))},[d,w,Z]),{mounted:J,visible:ge}=Le.usePopoverTransition(u),{placement:pe,maxHeight:ke,style:ye,portalRef:ee,renderPortal:je}=Ue.useAnchoredPopupPortal(Q,J,{preferredHeight:ae,maxHeightCap:ae,portalContainer:fe,zIndex:be}),k=l.useCallback(()=>{W(!1),h(-1),!n&&!b&&($(null),B(""))},[n,b]),D=l.useCallback(()=>{m||W(!0)},[m]);ze.useOutsideClose(V,u,k,ee),l.useEffect(()=>{u&&h(e=>{if(o.length===0)return-1;if(e>=0&&e<o.length)return e;const t=n?o.findIndex(s=>i.includes(s.value)):o.findIndex(s=>s.value===f);return t>=0?t:0})},[u,o,n,i,f]);const Ae=l.useCallback(e=>n?i.includes(e):f===e,[n,i,f]),te=l.useCallback(e=>{var t;if(!e.disabled){if(n){const s=i.includes(e.value)?i.filter(_=>_!==e.value):[...i,e.value];A(s),H(""),k(),(t=j.current)==null||t.focus();return}A(e.value),b?x==null||x(e.label):(B(""),$(null)),k()}},[n,i,A,H,b,x,k]),se=l.useCallback(e=>{n&&A(i.filter(t=>t!==e))},[n,i,A]),le=l.useCallback(e=>{const t=o.map((s,_)=>({o:s,i:_})).filter(({o:s})=>!s.disabled);if(t.length===0){h(-1);return}h(s=>{const _=t.findIndex(({i:T})=>T===s),O=_<0?e>0?0:t.length-1:(_+e+t.length)%t.length;return t[O].i})},[o]);l.useEffect(()=>{if(!u||v<0)return;const e=o[v];if(!e)return;const t=document.getElementById(`${p}-option-${e.value}`);t==null||t.scrollIntoView({block:"nearest"})},[u,v,o,p]);const De=e=>{const t=e.target.value;H(t),u||D(),h(0)},Ie=()=>{Y(!0),D(),!n&&!b&&M&&requestAnimationFrame(()=>{var e;(e=j.current)==null||e.select()})},we=e=>{var s;const t=e.relatedTarget;t&&((s=V.current)!=null&&s.contains(t))||Y(!1)},Ce=e=>{var t;if(!m)switch(e.key){case"ArrowDown":e.preventDefault(),u?le(1):D();break;case"ArrowUp":e.preventDefault(),u?le(-1):D();break;case"Home":u&&o.length>0&&(e.preventDefault(),h(o.findIndex(s=>!s.disabled)>=0?o.findIndex(s=>!s.disabled):0));break;case"End":if(u&&o.length>0){e.preventDefault();for(let s=o.length-1;s>=0;s--)if(!((t=o[s])!=null&&t.disabled)){h(s);break}}break;case"Enter":u&&v>=0&&o[v]&&(e.preventDefault(),te(o[v]));break;case"Escape":u&&(e.preventDefault(),k());break;case"Backspace":n&&F===""&&i.length>0&&(e.preventDefault(),se(i[i.length-1]));break;case"Tab":k();break}},Me=e=>{var t;m||e.target.closest("[data-chip]")||(e.target!==j.current&&(e.preventDefault(),(t=j.current)==null||t.focus()),u||D())},qe=n?i.length>0:f!=null&&f!=="",Oe=F.length>0,Se=_e||u||qe||Oe,ne=v>=0?o[v]:void 0,Ne=ne!=null?`${p}-option-${ne.value}`:void 0,q=l.useMemo(()=>d.filter(e=>i.includes(e.value)),[d,i]),Pe=r.default[`combobox--size-${Ke.toKebab(L)}`],Ve=n&&q.length>0,Re=[r.default.combobox,Pe,K?r.default["combobox--invalid"]:"",g!=null&&Se?r.default["combobox--label-floated"]:"",N!=null?r.default["combobox--has-leading-icon"]:"",Ve?r.default["combobox--has-chips"]:"",u?r.default["combobox--open"]:"",m?r.default["combobox--disabled"]:"",ie].filter(Boolean).join(" ");return c.jsxs("div",{className:Re,ref:V,children:[c.jsxs("div",{className:r.default.combobox__wrapper,ref:Q,children:[g!=null&&c.jsx("label",{className:r.default.combobox__label,htmlFor:P,children:g}),c.jsxs("div",{className:r.default.combobox__inner,onMouseDown:Me,children:[N!=null&&c.jsx("span",{className:r.default["combobox__leading-icon"],"aria-hidden":!0,children:N}),c.jsxs("div",{className:r.default.combobox__value,children:[n&&q.length>0&&c.jsx($e.default,{"aria-label":typeof g=="string"?`${g} selections`:"Selected",disabled:m,children:q.map(e=>c.jsx(Be.default,{size:Ge[L],leadingAvatar:e.leadingAvatar,leadingIcon:e.leadingAvatar==null?e.leadingVisual:void 0,onRemove:m?void 0:t=>{t.stopPropagation(),se(e.value)},children:e.label},e.value))}),c.jsx("input",{ref:xe,id:P,className:r.default.combobox__control,type:"text",role:"combobox",autoComplete:"off",spellCheck:!1,disabled:m,placeholder:n&&q.length>0?void 0:ce,value:F,"aria-label":G,"aria-invalid":K?!0:void 0,"aria-expanded":u,"aria-controls":p,"aria-autocomplete":"list","aria-activedescendant":Ne,onChange:De,onFocus:Ie,onBlur:we,onKeyDown:Ce})]}),c.jsx("span",{className:r.default["combobox__trailing-icon"],"aria-hidden":!0,children:c.jsx(Fe.default,{size:"12",glyph:c.jsx(Ee,{})})})]})]}),J&&je(c.jsx("div",{ref:ee,className:[r.default.combobox__popup,pe==="above"?r.default["combobox__popup--above"]:"",ge?r.default["combobox__popup--visible"]:""].filter(Boolean).join(" "),style:ye,children:c.jsx(re.default,{className:r.default.combobox__menu,children:c.jsx(re.PopoverMenuScroll,{maxHeight:ke,children:o.length===0?c.jsx("p",{className:r.default.combobox__empty,children:ue}):c.jsx("ul",{id:p,className:r.default.combobox__list,role:"listbox","aria-multiselectable":n||void 0,"aria-label":typeof g=="string"?g:G??"Options",children:o.map((e,t)=>{const s=Ae(e.value),_=t===v,O=Ye(e);return c.jsx("li",{className:r.default.combobox__option,role:"presentation",children:c.jsx(He.default,{id:`${p}-option-${e.value}`,role:"option",label:e.label,secondaryLabel:e.secondaryLabel,leadingElement:O!=null,leadingVisual:O,trailingElement:s,active:_,disabled:e.disabled,"aria-selected":s,onMouseDown:T=>{T.preventDefault()},onMouseEnter:()=>h(t),onClick:()=>te(e)})},e.value)})})})})}))]})});exports.default=Ze;
|
|
2
2
|
//# sourceMappingURL=Combobox.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Combobox.cjs","sources":["../../../src/components/combobox/Combobox.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n} from 'react';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport Chip from '@/components/chip/Chip';\nimport type { ChipSize } from '@/components/chip/Chip';\nimport Icon from '@/components/icon/Icon';\nimport MenuItem from '@/components/menu-item/MenuItem';\nimport PopoverMenu, {\n PopoverMenuScroll,\n} from '@/components/popover-menu/PopoverMenu';\nimport UserAvatar from '@/components/user-avatar/UserAvatar';\nimport { useAnchoredPopupPortal } from '@/hooks/use-anchored-popup-portal';\nimport { useOutsideClose } from '@/hooks/use-outside-close';\nimport { usePopoverTransition } from '@/hooks/use-popover-transition';\nimport { toKebab } from '@/utils/string';\nimport styles from './Combobox.module.scss';\n\nexport type ComboboxSize = 'small' | 'medium' | 'large';\n\nexport type ComboboxOption = {\n value: string;\n label: string;\n disabled?: boolean;\n /** Leading content for the list row (icon or avatar node). */\n leadingVisual?: ReactNode;\n /** Avatar for chips / list when a photo is preferred over `leadingVisual`. */\n leadingAvatar?: { src: string; alt: string };\n secondaryLabel?: string;\n};\n\nexport interface ComboboxProps {\n options: ComboboxOption[];\n /** When true, selected values render as removable chips. Default: false. */\n multiple?: boolean;\n value?: string | string[] | null;\n defaultValue?: string | string[] | null;\n onChange?: (value: string | string[] | null) => void;\n inputValue?: string;\n defaultInputValue?: string;\n onInputChange?: (value: string) => void;\n label?: ReactNode;\n placeholder?: string;\n leadingIcon?: ReactNode;\n size?: ComboboxSize;\n invalid?: boolean;\n disabled?: boolean;\n /**\n * Client-side filter. `true` (default) matches labels case-insensitively.\n * `false` shows all options (caller filters via `inputValue` / `onInputChange`).\n */\n filter?: boolean | ((option: ComboboxOption, query: string) => boolean);\n emptyMessage?: string;\n className?: string;\n id?: string;\n 'aria-label'?: string;\n /** Portal mount node for the menu; defaults to `document.body`. */\n portalContainer?: HTMLElement | null;\n /** Stacking order for the portaled menu. */\n zIndex?: number;\n}\n\nconst POPUP_MAX_HEIGHT = 280;\n\nconst CHIP_SIZE_BY_COMBOBOX: Record<ComboboxSize, ChipSize> = {\n small: 'small',\n medium: 'medium',\n large: 'large',\n};\n\nfunction defaultFilter(option: ComboboxOption, query: string): boolean {\n if (!query) return true;\n return option.label.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction toSingleValue(\n value: string | string[] | null | undefined,\n): string | null {\n if (value == null) return null;\n if (Array.isArray(value)) return value[0] ?? null;\n return value === '' ? null : value;\n}\n\nfunction toMultiValue(\n value: string | string[] | null | undefined,\n): string[] {\n if (value == null) return [];\n if (Array.isArray(value)) return value;\n return value === '' ? [] : [value];\n}\n\nfunction optionLeadingVisual(option: ComboboxOption): ReactNode | undefined {\n if (option.leadingVisual != null) return option.leadingVisual;\n if (option.leadingAvatar != null) {\n return (\n <UserAvatar\n src={option.leadingAvatar.src}\n alt={option.leadingAvatar.alt}\n size=\"24\"\n />\n );\n }\n return undefined;\n}\n\n/**\n * { value: 'town-square', label: 'Town Square' }, { value: 'off-topic', label: 'Off-Topic'\n * }, { value: 'design', label: 'Design' }, { value: 'engineering', label: 'Engineering' }, {\n * value: 'releases', label: 'Releases' }, ];\n */\nconst Combobox = forwardRef<HTMLInputElement, ComboboxProps>(function Combobox(\n {\n options,\n multiple = false,\n value: valueProp,\n defaultValue,\n onChange,\n inputValue: inputValueProp,\n defaultInputValue = '',\n onInputChange,\n label,\n placeholder,\n leadingIcon,\n size = 'medium',\n invalid = false,\n disabled = false,\n filter = true,\n emptyMessage = 'No results',\n className = '',\n id: idProp,\n 'aria-label': ariaLabel,\n portalContainer = null,\n zIndex,\n },\n ref,\n) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const listboxId = `${id}-listbox`;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const anchorRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n const isValueControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState<\n string | string[] | null\n >(() => {\n if (defaultValue !== undefined) return defaultValue;\n return multiple ? [] : null;\n });\n\n const rawValue = isValueControlled ? valueProp! : uncontrolledValue;\n const singleValue = multiple ? null : toSingleValue(rawValue);\n const multiValue = multiple ? toMultiValue(rawValue) : [];\n\n const isInputControlled = inputValueProp !== undefined;\n const [uncontrolledInput, setUncontrolledInput] = useState(defaultInputValue);\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [queryOverride, setQueryOverride] = useState<string | null>(null);\n\n const selectedOption = useMemo(\n () =>\n singleValue == null\n ? undefined\n : options.find((o) => o.value === singleValue),\n [options, singleValue],\n );\n\n // Single-select: show the selected label until the user starts typing a filter.\n // `queryOverride !== null` means the field is in filter-edit mode.\n const displayInput = (() => {\n if (isInputControlled) return inputValueProp!;\n if (multiple) return uncontrolledInput;\n if (queryOverride !== null) return queryOverride;\n return selectedOption?.label ?? uncontrolledInput;\n })();\n\n const filterQuery = (() => {\n if (isInputControlled) return inputValueProp!;\n if (multiple) return uncontrolledInput;\n if (queryOverride !== null) return queryOverride;\n return '';\n })();\n\n const setInputDisplay = useCallback(\n (next: string) => {\n if (!isInputControlled) {\n setUncontrolledInput(next);\n if (!multiple) setQueryOverride(next);\n }\n onInputChange?.(next);\n },\n [isInputControlled, multiple, onInputChange],\n );\n\n const commitValue = useCallback(\n (next: string | string[] | null) => {\n if (!isValueControlled) setUncontrolledValue(next);\n onChange?.(next);\n },\n [isValueControlled, onChange],\n );\n\n const filteredOptions = useMemo(() => {\n if (filter === false) return options;\n const fn = typeof filter === 'function' ? filter : defaultFilter;\n return options.filter((o) => fn(o, filterQuery));\n }, [options, filter, filterQuery]);\n\n const { mounted: popupMounted, visible: popupVisible } =\n usePopoverTransition(isOpen);\n\n const {\n placement,\n maxHeight,\n style: popupStyle,\n portalRef,\n renderPortal,\n } = useAnchoredPopupPortal(anchorRef, popupMounted, {\n preferredHeight: POPUP_MAX_HEIGHT,\n maxHeightCap: POPUP_MAX_HEIGHT,\n portalContainer,\n zIndex,\n });\n\n const close = useCallback(() => {\n setIsOpen(false);\n setActiveIndex(-1);\n if (!multiple && !isInputControlled) {\n setQueryOverride(null);\n setUncontrolledInput('');\n }\n }, [multiple, isInputControlled]);\n\n const open = useCallback(() => {\n if (disabled) return;\n setIsOpen(true);\n }, [disabled]);\n\n useOutsideClose(rootRef, isOpen, close, portalRef);\n\n useEffect(() => {\n if (!isOpen) return;\n setActiveIndex((prev) => {\n if (filteredOptions.length === 0) return -1;\n if (prev >= 0 && prev < filteredOptions.length) return prev;\n const selectedIdx = multiple\n ? filteredOptions.findIndex((o) => multiValue.includes(o.value))\n : filteredOptions.findIndex((o) => o.value === singleValue);\n return selectedIdx >= 0 ? selectedIdx : 0;\n });\n }, [isOpen, filteredOptions, multiple, multiValue, singleValue]);\n\n const isSelected = useCallback(\n (optionValue: string) =>\n multiple\n ? multiValue.includes(optionValue)\n : singleValue === optionValue,\n [multiple, multiValue, singleValue],\n );\n\n const selectOption = useCallback(\n (option: ComboboxOption) => {\n if (option.disabled) return;\n\n if (multiple) {\n const next = multiValue.includes(option.value)\n ? multiValue.filter((v) => v !== option.value)\n : [...multiValue, option.value];\n commitValue(next);\n setInputDisplay('');\n close();\n inputRef.current?.focus();\n return;\n }\n\n commitValue(option.value);\n if (!isInputControlled) {\n setUncontrolledInput('');\n setQueryOverride(null);\n } else {\n onInputChange?.(option.label);\n }\n close();\n },\n [\n multiple,\n multiValue,\n commitValue,\n setInputDisplay,\n isInputControlled,\n onInputChange,\n close,\n ],\n );\n\n const removeValue = useCallback(\n (optionValue: string) => {\n if (!multiple) return;\n commitValue(multiValue.filter((v) => v !== optionValue));\n inputRef.current?.focus();\n },\n [multiple, multiValue, commitValue],\n );\n\n const moveActive = useCallback(\n (delta: number) => {\n const enabled = filteredOptions\n .map((o, i) => ({ o, i }))\n .filter(({ o }) => !o.disabled);\n if (enabled.length === 0) {\n setActiveIndex(-1);\n return;\n }\n setActiveIndex((prev) => {\n const currentPos = enabled.findIndex(({ i }) => i === prev);\n const nextPos =\n currentPos < 0\n ? delta > 0\n ? 0\n : enabled.length - 1\n : (currentPos + delta + enabled.length) % enabled.length;\n return enabled[nextPos].i;\n });\n },\n [filteredOptions],\n );\n\n useEffect(() => {\n if (!isOpen || activeIndex < 0) return;\n const option = filteredOptions[activeIndex];\n if (!option) return;\n const el = document.getElementById(\n `${listboxId}-option-${option.value}`,\n );\n el?.scrollIntoView({ block: 'nearest' });\n }, [isOpen, activeIndex, filteredOptions, listboxId]);\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n const next = e.target.value;\n setInputDisplay(next);\n if (!isOpen) open();\n setActiveIndex(0);\n };\n\n const handleFocus = () => {\n setIsFocused(true);\n open();\n // Select-all so the next keystroke replaces the selected label (filter mode).\n if (!multiple && !isInputControlled && selectedOption) {\n requestAnimationFrame(() => {\n inputRef.current?.select();\n });\n }\n };\n\n const handleBlur = (e: FocusEvent<HTMLInputElement>) => {\n // Delay so option mousedown can run first\n const related = e.relatedTarget as Node | null;\n if (related && rootRef.current?.contains(related)) return;\n setIsFocused(false);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(-1);\n break;\n case 'Home':\n if (isOpen && filteredOptions.length > 0) {\n e.preventDefault();\n setActiveIndex(\n filteredOptions.findIndex((o) => !o.disabled) >= 0\n ? filteredOptions.findIndex((o) => !o.disabled)\n : 0,\n );\n }\n break;\n case 'End':\n if (isOpen && filteredOptions.length > 0) {\n e.preventDefault();\n for (let i = filteredOptions.length - 1; i >= 0; i--) {\n if (!filteredOptions[i]?.disabled) {\n setActiveIndex(i);\n break;\n }\n }\n }\n break;\n case 'Enter':\n if (isOpen && activeIndex >= 0 && filteredOptions[activeIndex]) {\n e.preventDefault();\n selectOption(filteredOptions[activeIndex]);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n close();\n }\n break;\n case 'Backspace':\n if (\n multiple &&\n displayInput === '' &&\n multiValue.length > 0\n ) {\n e.preventDefault();\n removeValue(multiValue[multiValue.length - 1]);\n }\n break;\n case 'Tab':\n close();\n break;\n default:\n break;\n }\n };\n\n const handleWrapperMouseDown = (e: MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n // Don't steal focus from chip remove buttons\n if ((e.target as HTMLElement).closest('button')) return;\n if (e.target !== inputRef.current) {\n e.preventDefault();\n inputRef.current?.focus();\n }\n if (!isOpen) open();\n };\n\n const hasSelection = multiple\n ? multiValue.length > 0\n : singleValue != null && singleValue !== '';\n const hasInputText = displayInput.length > 0;\n const labelFloated = isFocused || isOpen || hasSelection || hasInputText;\n\n const activeOption =\n activeIndex >= 0 ? filteredOptions[activeIndex] : undefined;\n const activeDescendant =\n activeOption != null ? `${listboxId}-option-${activeOption.value}` : undefined;\n\n const selectedOptions = useMemo(\n () => options.filter((o) => multiValue.includes(o.value)),\n [options, multiValue],\n );\n\n const sizeClass = styles[`combobox--size-${toKebab(size)}`];\n const hasChips = multiple && selectedOptions.length > 0;\n const rootClass = [\n styles.combobox,\n sizeClass,\n invalid ? styles['combobox--invalid'] : '',\n label != null && labelFloated ? styles['combobox--label-floated'] : '',\n leadingIcon != null ? styles['combobox--has-leading-icon'] : '',\n hasChips ? styles['combobox--has-chips'] : '',\n isOpen ? styles['combobox--open'] : '',\n disabled ? styles['combobox--disabled'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass} ref={rootRef}>\n <div\n className={styles.combobox__wrapper}\n ref={anchorRef}\n >\n {label != null && (\n <label className={styles.combobox__label} htmlFor={id}>\n {label}\n </label>\n )}\n <div\n className={styles.combobox__inner}\n onMouseDown={handleWrapperMouseDown}\n >\n {leadingIcon != null && (\n <span className={styles.combobox__leadingIcon} aria-hidden>\n {leadingIcon}\n </span>\n )}\n <div className={styles.combobox__value}>\n {multiple &&\n selectedOptions.map((option) => (\n <Chip\n key={option.value}\n size={CHIP_SIZE_BY_COMBOBOX[size]}\n leadingAvatar={option.leadingAvatar}\n leadingIcon={\n option.leadingAvatar == null\n ? option.leadingVisual\n : undefined\n }\n onRemove={\n disabled\n ? undefined\n : (ev) => {\n ev.stopPropagation();\n removeValue(option.value);\n }\n }\n removeLabel={`Remove ${option.label}`}\n >\n {option.label}\n </Chip>\n ))}\n <input\n ref={setInputRef}\n id={id}\n className={styles.combobox__control}\n type=\"text\"\n role=\"combobox\"\n autoComplete=\"off\"\n spellCheck={false}\n disabled={disabled}\n placeholder={\n multiple && selectedOptions.length > 0\n ? undefined\n : placeholder\n }\n value={displayInput}\n aria-label={ariaLabel}\n aria-invalid={invalid ? true : undefined}\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeDescendant}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n />\n </div>\n <span className={styles.combobox__trailingIcon} aria-hidden>\n <Icon size=\"12\" glyph={<ChevronDownIcon />} />\n </span>\n </div>\n </div>\n\n {popupMounted &&\n renderPortal(\n <div\n ref={portalRef}\n className={[\n styles.combobox__popup,\n placement === 'above' ? styles['combobox__popup--above'] : '',\n popupVisible ? styles['combobox__popup--visible'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popupStyle}\n >\n <PopoverMenu className={styles.combobox__menu}>\n <PopoverMenuScroll maxHeight={maxHeight}>\n {filteredOptions.length === 0 ? (\n <p className={styles.combobox__empty}>{emptyMessage}</p>\n ) : (\n <ul\n id={listboxId}\n className={styles.combobox__list}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n aria-label={\n typeof label === 'string'\n ? label\n : (ariaLabel ?? 'Options')\n }\n >\n {filteredOptions.map((option, index) => {\n const selected = isSelected(option.value);\n const active = index === activeIndex;\n const leading = optionLeadingVisual(option);\n return (\n <li\n key={option.value}\n className={styles.combobox__option}\n role=\"presentation\"\n >\n <MenuItem\n id={`${listboxId}-option-${option.value}`}\n role=\"option\"\n label={option.label}\n secondaryLabel={option.secondaryLabel}\n leadingElement={leading != null}\n leadingVisual={leading}\n trailingElement={selected}\n active={active}\n disabled={option.disabled}\n aria-selected={selected}\n onMouseDown={(ev) => {\n // Prevent input blur before click handler\n ev.preventDefault();\n }}\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => selectOption(option)}\n />\n </li>\n );\n })}\n </ul>\n )}\n </PopoverMenuScroll>\n </PopoverMenu>\n </div>,\n )}\n </div>\n );\n});\n\nexport default Combobox;\n"],"names":["POPUP_MAX_HEIGHT","CHIP_SIZE_BY_COMBOBOX","defaultFilter","option","query","toSingleValue","value","toMultiValue","optionLeadingVisual","jsx","UserAvatar","Combobox","forwardRef","options","multiple","valueProp","defaultValue","onChange","inputValueProp","defaultInputValue","onInputChange","label","placeholder","leadingIcon","size","invalid","disabled","filter","emptyMessage","className","idProp","ariaLabel","portalContainer","zIndex","ref","generatedId","useId","id","listboxId","rootRef","useRef","anchorRef","inputRef","setInputRef","useCallback","node","isValueControlled","uncontrolledValue","setUncontrolledValue","useState","rawValue","singleValue","multiValue","isInputControlled","uncontrolledInput","setUncontrolledInput","isOpen","setIsOpen","isFocused","setIsFocused","activeIndex","setActiveIndex","queryOverride","setQueryOverride","selectedOption","useMemo","o","displayInput","filterQuery","setInputDisplay","next","commitValue","filteredOptions","fn","popupMounted","popupVisible","usePopoverTransition","placement","maxHeight","popupStyle","portalRef","renderPortal","useAnchoredPopupPortal","close","open","useOutsideClose","useEffect","prev","selectedIdx","isSelected","optionValue","selectOption","v","_a","removeValue","moveActive","delta","enabled","i","currentPos","nextPos","el","handleInputChange","handleFocus","handleBlur","related","handleKeyDown","handleWrapperMouseDown","hasSelection","hasInputText","labelFloated","activeOption","activeDescendant","selectedOptions","sizeClass","styles","toKebab","hasChips","rootClass","jsxs","Chip","ev","Icon","ChevronDownIcon","PopoverMenu","PopoverMenuScroll","index","selected","active","leading","MenuItem"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Combobox.cjs","sources":["../../../src/components/combobox/Combobox.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n} from 'react';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport Chip from '@/components/chip/Chip';\nimport ChipGroup from '@/components/chip/ChipGroup';\nimport type { ChipSize } from '@/components/chip/Chip';\nimport Icon from '@/components/icon/Icon';\nimport MenuItem from '@/components/menu-item/MenuItem';\nimport PopoverMenu, {\n PopoverMenuScroll,\n} from '@/components/popover-menu/PopoverMenu';\nimport UserAvatar from '@/components/user-avatar/UserAvatar';\nimport { useAnchoredPopupPortal } from '@/hooks/use-anchored-popup-portal';\nimport { useOutsideClose } from '@/hooks/use-outside-close';\nimport { usePopoverTransition } from '@/hooks/use-popover-transition';\nimport { toKebab } from '@/utils/string';\nimport styles from './Combobox.module.scss';\n\nexport type ComboboxSize = 'small' | 'medium' | 'large';\n\nexport type ComboboxOption = {\n value: string;\n label: string;\n disabled?: boolean;\n /** Leading content for the list row (icon or avatar node). */\n leadingVisual?: ReactNode;\n /** Avatar for chips / list when a photo is preferred over `leadingVisual`. */\n leadingAvatar?: { src: string; alt: string };\n secondaryLabel?: string;\n};\n\nexport interface ComboboxProps {\n options: ComboboxOption[];\n /** When true, selected values render as removable chips. Default: false. */\n multiple?: boolean;\n value?: string | string[] | null;\n defaultValue?: string | string[] | null;\n onChange?: (value: string | string[] | null) => void;\n inputValue?: string;\n defaultInputValue?: string;\n onInputChange?: (value: string) => void;\n label?: ReactNode;\n placeholder?: string;\n leadingIcon?: ReactNode;\n size?: ComboboxSize;\n invalid?: boolean;\n disabled?: boolean;\n /**\n * Client-side filter. `true` (default) matches labels case-insensitively.\n * `false` shows all options (caller filters via `inputValue` / `onInputChange`).\n */\n filter?: boolean | ((option: ComboboxOption, query: string) => boolean);\n emptyMessage?: string;\n className?: string;\n id?: string;\n 'aria-label'?: string;\n /** Portal mount node for the menu; defaults to `document.body`. */\n portalContainer?: HTMLElement | null;\n /** Stacking order for the portaled menu. */\n zIndex?: number;\n}\n\nconst POPUP_MAX_HEIGHT = 280;\n\nconst CHIP_SIZE_BY_COMBOBOX: Record<ComboboxSize, ChipSize> = {\n small: 'small',\n medium: 'medium',\n large: 'large',\n};\n\nfunction defaultFilter(option: ComboboxOption, query: string): boolean {\n if (!query) return true;\n return option.label.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction toSingleValue(\n value: string | string[] | null | undefined,\n): string | null {\n if (value == null) return null;\n if (Array.isArray(value)) return value[0] ?? null;\n return value === '' ? null : value;\n}\n\nfunction toMultiValue(\n value: string | string[] | null | undefined,\n): string[] {\n if (value == null) return [];\n if (Array.isArray(value)) return value;\n return value === '' ? [] : [value];\n}\n\nfunction optionLeadingVisual(option: ComboboxOption): ReactNode | undefined {\n if (option.leadingVisual != null) return option.leadingVisual;\n if (option.leadingAvatar != null) {\n return (\n <UserAvatar\n src={option.leadingAvatar.src}\n alt={option.leadingAvatar.alt}\n size=\"24\"\n />\n );\n }\n return undefined;\n}\n\n/**\n * { value: 'town-square', label: 'Town Square' }, { value: 'off-topic', label: 'Off-Topic'\n * }, { value: 'design', label: 'Design' }, { value: 'engineering', label: 'Engineering' }, {\n * value: 'releases', label: 'Releases' }, ];\n */\nconst Combobox = forwardRef<HTMLInputElement, ComboboxProps>(function Combobox(\n {\n options,\n multiple = false,\n value: valueProp,\n defaultValue,\n onChange,\n inputValue: inputValueProp,\n defaultInputValue = '',\n onInputChange,\n label,\n placeholder,\n leadingIcon,\n size = 'medium',\n invalid = false,\n disabled = false,\n filter = true,\n emptyMessage = 'No results',\n className = '',\n id: idProp,\n 'aria-label': ariaLabel,\n portalContainer = null,\n zIndex,\n },\n ref,\n) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const listboxId = `${id}-listbox`;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const anchorRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n const isValueControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState<\n string | string[] | null\n >(() => {\n if (defaultValue !== undefined) return defaultValue;\n return multiple ? [] : null;\n });\n\n const rawValue = isValueControlled ? valueProp! : uncontrolledValue;\n const singleValue = multiple ? null : toSingleValue(rawValue);\n const multiValue = multiple ? toMultiValue(rawValue) : [];\n\n const isInputControlled = inputValueProp !== undefined;\n const [uncontrolledInput, setUncontrolledInput] = useState(defaultInputValue);\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [queryOverride, setQueryOverride] = useState<string | null>(null);\n\n const selectedOption = useMemo(\n () =>\n singleValue == null\n ? undefined\n : options.find((o) => o.value === singleValue),\n [options, singleValue],\n );\n\n // Single-select: show the selected label until the user starts typing a filter.\n // `queryOverride !== null` means the field is in filter-edit mode.\n const displayInput = (() => {\n if (isInputControlled) return inputValueProp!;\n if (multiple) return uncontrolledInput;\n if (queryOverride !== null) return queryOverride;\n return selectedOption?.label ?? uncontrolledInput;\n })();\n\n const filterQuery = (() => {\n if (isInputControlled) return inputValueProp!;\n if (multiple) return uncontrolledInput;\n if (queryOverride !== null) return queryOverride;\n return '';\n })();\n\n const setInputDisplay = useCallback(\n (next: string) => {\n if (!isInputControlled) {\n setUncontrolledInput(next);\n if (!multiple) setQueryOverride(next);\n }\n onInputChange?.(next);\n },\n [isInputControlled, multiple, onInputChange],\n );\n\n const commitValue = useCallback(\n (next: string | string[] | null) => {\n if (!isValueControlled) setUncontrolledValue(next);\n onChange?.(next);\n },\n [isValueControlled, onChange],\n );\n\n const filteredOptions = useMemo(() => {\n if (filter === false) return options;\n const fn = typeof filter === 'function' ? filter : defaultFilter;\n return options.filter((o) => fn(o, filterQuery));\n }, [options, filter, filterQuery]);\n\n const { mounted: popupMounted, visible: popupVisible } =\n usePopoverTransition(isOpen);\n\n const {\n placement,\n maxHeight,\n style: popupStyle,\n portalRef,\n renderPortal,\n } = useAnchoredPopupPortal(anchorRef, popupMounted, {\n preferredHeight: POPUP_MAX_HEIGHT,\n maxHeightCap: POPUP_MAX_HEIGHT,\n portalContainer,\n zIndex,\n });\n\n const close = useCallback(() => {\n setIsOpen(false);\n setActiveIndex(-1);\n if (!multiple && !isInputControlled) {\n setQueryOverride(null);\n setUncontrolledInput('');\n }\n }, [multiple, isInputControlled]);\n\n const open = useCallback(() => {\n if (disabled) return;\n setIsOpen(true);\n }, [disabled]);\n\n useOutsideClose(rootRef, isOpen, close, portalRef);\n\n useEffect(() => {\n if (!isOpen) return;\n setActiveIndex((prev) => {\n if (filteredOptions.length === 0) return -1;\n if (prev >= 0 && prev < filteredOptions.length) return prev;\n const selectedIdx = multiple\n ? filteredOptions.findIndex((o) => multiValue.includes(o.value))\n : filteredOptions.findIndex((o) => o.value === singleValue);\n return selectedIdx >= 0 ? selectedIdx : 0;\n });\n }, [isOpen, filteredOptions, multiple, multiValue, singleValue]);\n\n const isSelected = useCallback(\n (optionValue: string) =>\n multiple\n ? multiValue.includes(optionValue)\n : singleValue === optionValue,\n [multiple, multiValue, singleValue],\n );\n\n const selectOption = useCallback(\n (option: ComboboxOption) => {\n if (option.disabled) return;\n\n if (multiple) {\n const next = multiValue.includes(option.value)\n ? multiValue.filter((v) => v !== option.value)\n : [...multiValue, option.value];\n commitValue(next);\n setInputDisplay('');\n close();\n inputRef.current?.focus();\n return;\n }\n\n commitValue(option.value);\n if (!isInputControlled) {\n setUncontrolledInput('');\n setQueryOverride(null);\n } else {\n onInputChange?.(option.label);\n }\n close();\n },\n [\n multiple,\n multiValue,\n commitValue,\n setInputDisplay,\n isInputControlled,\n onInputChange,\n close,\n ],\n );\n\n const removeValue = useCallback(\n (optionValue: string) => {\n if (!multiple) return;\n commitValue(multiValue.filter((v) => v !== optionValue));\n },\n [multiple, multiValue, commitValue],\n );\n\n const moveActive = useCallback(\n (delta: number) => {\n const enabled = filteredOptions\n .map((o, i) => ({ o, i }))\n .filter(({ o }) => !o.disabled);\n if (enabled.length === 0) {\n setActiveIndex(-1);\n return;\n }\n setActiveIndex((prev) => {\n const currentPos = enabled.findIndex(({ i }) => i === prev);\n const nextPos =\n currentPos < 0\n ? delta > 0\n ? 0\n : enabled.length - 1\n : (currentPos + delta + enabled.length) % enabled.length;\n return enabled[nextPos].i;\n });\n },\n [filteredOptions],\n );\n\n useEffect(() => {\n if (!isOpen || activeIndex < 0) return;\n const option = filteredOptions[activeIndex];\n if (!option) return;\n const el = document.getElementById(\n `${listboxId}-option-${option.value}`,\n );\n el?.scrollIntoView({ block: 'nearest' });\n }, [isOpen, activeIndex, filteredOptions, listboxId]);\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n const next = e.target.value;\n setInputDisplay(next);\n if (!isOpen) open();\n setActiveIndex(0);\n };\n\n const handleFocus = () => {\n setIsFocused(true);\n open();\n // Select-all so the next keystroke replaces the selected label (filter mode).\n if (!multiple && !isInputControlled && selectedOption) {\n requestAnimationFrame(() => {\n inputRef.current?.select();\n });\n }\n };\n\n const handleBlur = (e: FocusEvent<HTMLInputElement>) => {\n // Delay so option mousedown can run first\n const related = e.relatedTarget as Node | null;\n if (related && rootRef.current?.contains(related)) return;\n setIsFocused(false);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(-1);\n break;\n case 'Home':\n if (isOpen && filteredOptions.length > 0) {\n e.preventDefault();\n setActiveIndex(\n filteredOptions.findIndex((o) => !o.disabled) >= 0\n ? filteredOptions.findIndex((o) => !o.disabled)\n : 0,\n );\n }\n break;\n case 'End':\n if (isOpen && filteredOptions.length > 0) {\n e.preventDefault();\n for (let i = filteredOptions.length - 1; i >= 0; i--) {\n if (!filteredOptions[i]?.disabled) {\n setActiveIndex(i);\n break;\n }\n }\n }\n break;\n case 'Enter':\n if (isOpen && activeIndex >= 0 && filteredOptions[activeIndex]) {\n e.preventDefault();\n selectOption(filteredOptions[activeIndex]);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n close();\n }\n break;\n case 'Backspace':\n if (\n multiple &&\n displayInput === '' &&\n multiValue.length > 0\n ) {\n e.preventDefault();\n removeValue(multiValue[multiValue.length - 1]);\n }\n break;\n case 'Tab':\n close();\n break;\n default:\n break;\n }\n };\n\n const handleWrapperMouseDown = (e: MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n // Don't steal focus from chips or their remove buttons\n if ((e.target as HTMLElement).closest('[data-chip]')) return;\n if (e.target !== inputRef.current) {\n e.preventDefault();\n inputRef.current?.focus();\n }\n if (!isOpen) open();\n };\n\n const hasSelection = multiple\n ? multiValue.length > 0\n : singleValue != null && singleValue !== '';\n const hasInputText = displayInput.length > 0;\n const labelFloated = isFocused || isOpen || hasSelection || hasInputText;\n\n const activeOption =\n activeIndex >= 0 ? filteredOptions[activeIndex] : undefined;\n const activeDescendant =\n activeOption != null ? `${listboxId}-option-${activeOption.value}` : undefined;\n\n const selectedOptions = useMemo(\n () => options.filter((o) => multiValue.includes(o.value)),\n [options, multiValue],\n );\n\n const sizeClass = styles[`combobox--size-${toKebab(size)}`];\n const hasChips = multiple && selectedOptions.length > 0;\n const rootClass = [\n styles.combobox,\n sizeClass,\n invalid ? styles['combobox--invalid'] : '',\n label != null && labelFloated ? styles['combobox--label-floated'] : '',\n leadingIcon != null ? styles['combobox--has-leading-icon'] : '',\n hasChips ? styles['combobox--has-chips'] : '',\n isOpen ? styles['combobox--open'] : '',\n disabled ? styles['combobox--disabled'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass} ref={rootRef}>\n <div\n className={styles.combobox__wrapper}\n ref={anchorRef}\n >\n {label != null && (\n <label className={styles.combobox__label} htmlFor={id}>\n {label}\n </label>\n )}\n <div\n className={styles.combobox__inner}\n onMouseDown={handleWrapperMouseDown}\n >\n {leadingIcon != null && (\n <span className={styles['combobox__leading-icon']} aria-hidden>\n {leadingIcon}\n </span>\n )}\n <div className={styles.combobox__value}>\n {multiple && selectedOptions.length > 0 && (\n <ChipGroup\n aria-label={\n typeof label === 'string' ? `${label} selections` : 'Selected'\n }\n disabled={disabled}\n >\n {selectedOptions.map((option) => (\n <Chip\n key={option.value}\n size={CHIP_SIZE_BY_COMBOBOX[size]}\n leadingAvatar={option.leadingAvatar}\n leadingIcon={\n option.leadingAvatar == null\n ? option.leadingVisual\n : undefined\n }\n onRemove={\n disabled\n ? undefined\n : (ev) => {\n ev.stopPropagation();\n removeValue(option.value);\n }\n }\n >\n {option.label}\n </Chip>\n ))}\n </ChipGroup>\n )}\n <input\n ref={setInputRef}\n id={id}\n className={styles.combobox__control}\n type=\"text\"\n role=\"combobox\"\n autoComplete=\"off\"\n spellCheck={false}\n disabled={disabled}\n placeholder={\n multiple && selectedOptions.length > 0\n ? undefined\n : placeholder\n }\n value={displayInput}\n aria-label={ariaLabel}\n aria-invalid={invalid ? true : undefined}\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeDescendant}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n />\n </div>\n <span className={styles['combobox__trailing-icon']} aria-hidden>\n <Icon size=\"12\" glyph={<ChevronDownIcon />} />\n </span>\n </div>\n </div>\n\n {popupMounted &&\n renderPortal(\n <div\n ref={portalRef}\n className={[\n styles.combobox__popup,\n placement === 'above' ? styles['combobox__popup--above'] : '',\n popupVisible ? styles['combobox__popup--visible'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popupStyle}\n >\n <PopoverMenu className={styles.combobox__menu}>\n <PopoverMenuScroll maxHeight={maxHeight}>\n {filteredOptions.length === 0 ? (\n <p className={styles.combobox__empty}>{emptyMessage}</p>\n ) : (\n <ul\n id={listboxId}\n className={styles.combobox__list}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n aria-label={\n typeof label === 'string'\n ? label\n : (ariaLabel ?? 'Options')\n }\n >\n {filteredOptions.map((option, index) => {\n const selected = isSelected(option.value);\n const active = index === activeIndex;\n const leading = optionLeadingVisual(option);\n return (\n <li\n key={option.value}\n className={styles.combobox__option}\n role=\"presentation\"\n >\n <MenuItem\n id={`${listboxId}-option-${option.value}`}\n role=\"option\"\n label={option.label}\n secondaryLabel={option.secondaryLabel}\n leadingElement={leading != null}\n leadingVisual={leading}\n trailingElement={selected}\n active={active}\n disabled={option.disabled}\n aria-selected={selected}\n onMouseDown={(ev) => {\n // Prevent input blur before click handler\n ev.preventDefault();\n }}\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => selectOption(option)}\n />\n </li>\n );\n })}\n </ul>\n )}\n </PopoverMenuScroll>\n </PopoverMenu>\n </div>,\n )}\n </div>\n );\n});\n\nexport default Combobox;\n"],"names":["POPUP_MAX_HEIGHT","CHIP_SIZE_BY_COMBOBOX","defaultFilter","option","query","toSingleValue","value","toMultiValue","optionLeadingVisual","jsx","UserAvatar","Combobox","forwardRef","options","multiple","valueProp","defaultValue","onChange","inputValueProp","defaultInputValue","onInputChange","label","placeholder","leadingIcon","size","invalid","disabled","filter","emptyMessage","className","idProp","ariaLabel","portalContainer","zIndex","ref","generatedId","useId","id","listboxId","rootRef","useRef","anchorRef","inputRef","setInputRef","useCallback","node","isValueControlled","uncontrolledValue","setUncontrolledValue","useState","rawValue","singleValue","multiValue","isInputControlled","uncontrolledInput","setUncontrolledInput","isOpen","setIsOpen","isFocused","setIsFocused","activeIndex","setActiveIndex","queryOverride","setQueryOverride","selectedOption","useMemo","o","displayInput","filterQuery","setInputDisplay","next","commitValue","filteredOptions","fn","popupMounted","popupVisible","usePopoverTransition","placement","maxHeight","popupStyle","portalRef","renderPortal","useAnchoredPopupPortal","close","open","useOutsideClose","useEffect","prev","selectedIdx","isSelected","optionValue","selectOption","v","_a","removeValue","moveActive","delta","enabled","i","currentPos","nextPos","el","handleInputChange","handleFocus","handleBlur","related","handleKeyDown","handleWrapperMouseDown","hasSelection","hasInputText","labelFloated","activeOption","activeDescendant","selectedOptions","sizeClass","styles","toKebab","hasChips","rootClass","jsxs","ChipGroup","Chip","ev","Icon","ChevronDownIcon","PopoverMenu","PopoverMenuScroll","index","selected","active","leading","MenuItem"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Combobox.d.ts","sourceRoot":"","sources":["../../../src/components/combobox/Combobox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,SAAS,EACV,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Combobox.d.ts","sourceRoot":"","sources":["../../../src/components/combobox/Combobox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,SAAS,EACV,MAAM,OAAO,CAAC;AA0Bf,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAExD,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,8EAA8E;IAC9E,aAAa,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,eAAe,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACrC,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA6CD;;;;GAIG;AACH,QAAA,MAAM,QAAQ,4GA6gBZ,CAAC;AAEH,eAAe,QAAQ,CAAC"}
|