@ds-mo/ui 2.1.1 → 2.2.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/README.md +1 -1
- package/dist/.build-stamp +1 -1
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-bar-nav.js.map +1 -1
- package/dist/components/ds-breadcrumb.js +1 -1
- package/dist/components/ds-button-group.js +1 -1
- package/dist/components/ds-button-group.js.map +1 -1
- package/dist/components/ds-button-unfilled-icon.d.ts +11 -0
- package/dist/components/ds-button-unfilled-icon.js +2 -0
- package/dist/components/ds-button.js +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-field.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-nav.js.map +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-panel-tools.js.map +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-tab-group-nav.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-tab-group.js.map +1 -1
- package/dist/components/ds-toggle.js +1 -1
- package/dist/components/{p-CsO880L-.js → p-CD3yg7ue.js} +2 -2
- package/dist/components/p-CSc44rQs.js +2 -0
- package/dist/components/p-CSc44rQs.js.map +1 -0
- package/dist/components/p-CZpCmCiq.js +2 -0
- package/dist/components/p-CZpCmCiq.js.map +1 -0
- package/dist/components/p-YzIqPOqL.js +2 -0
- package/dist/components/p-YzIqPOqL.js.map +1 -0
- package/dist/types/components/BarNav/BarNav.d.ts +8 -7
- package/dist/types/components/BarNav/bar-nav-tabs-menu-utils.d.ts +3 -0
- package/dist/types/components/BarNav/bar-nav-types.d.ts +0 -11
- package/dist/types/components/BarNav/index.d.ts +1 -1
- package/dist/types/components/ButtonUnfilledIcon/ButtonUnfilledIcon.d.ts +33 -0
- package/dist/types/components/ButtonUnfilledIcon/index.d.ts +2 -0
- package/dist/types/components/Menu/Menu.d.ts +3 -0
- package/dist/types/components.d.ts +154 -98
- package/package.json +1 -1
- package/src/angular/index.ts +1 -1
- package/src/angular/proxies.ts +34 -32
- package/src/react/components.ts +1 -1
- package/src/react/ds-button-unfilled-icon.ts +33 -0
- package/src/wc/components/BarNav/BarNav.tsx +126 -133
- package/src/wc/components/BarNav/bar-nav-tabs-menu-utils.ts +55 -0
- package/src/wc/components/BarNav/bar-nav-types.ts +0 -12
- package/src/wc/components/BarNav/index.ts +1 -1
- package/src/wc/components/ButtonUnfilledIcon/ButtonUnfilledIcon.tsx +113 -0
- package/src/wc/components/ButtonUnfilledIcon/index.ts +1 -0
- package/src/wc/components/Menu/Menu.tsx +18 -7
- package/src/wc/components/PanelNav/PanelNav.tsx +12 -9
- package/src/wc/components/PanelTools/PanelTools.tsx +4 -2
- package/src/wc/components/TabGroup/TabGroup.tsx +1 -0
- package/src/wc/components/TabGroupNav/TabGroupNav.tsx +1 -0
- package/src/wc/components.d.ts +154 -98
- package/src/wc/utils/focus-ring.css +33 -0
- package/dist/components/ds-bar-nav-action.d.ts +0 -11
- package/dist/components/ds-bar-nav-action.js +0 -2
- package/dist/components/p-CCZFMcLe.js +0 -2
- package/dist/components/p-CCZFMcLe.js.map +0 -1
- package/dist/components/p-CuuuDjJJ.js +0 -2
- package/dist/components/p-CuuuDjJJ.js.map +0 -1
- package/dist/components/p-DlsexsFg.js +0 -2
- package/dist/components/p-DlsexsFg.js.map +0 -1
- package/dist/types/components/BarNavAction/BarNavAction.d.ts +0 -21
- package/dist/types/components/BarNavAction/index.d.ts +0 -2
- package/src/react/ds-bar-nav-action.ts +0 -27
- package/src/wc/components/BarNavAction/BarNavAction.tsx +0 -78
- package/src/wc/components/BarNavAction/index.ts +0 -1
- /package/dist/components/{ds-bar-nav-action.js.map → ds-button-unfilled-icon.js.map} +0 -0
- /package/dist/components/{p-CsO880L-.js.map → p-CD3yg7ue.js.map} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{p as e,H as s,c as i,h as t,a as n,t as o}from"./index.js";import{T as r}from"./p-BRju0sEC.js";import{r as a}from"./p-CYJ-de0u.js";import{r as d}from"./p-C1cBr-Ri.js";function u(e){const{anchorRect:s,popupWidth:i,popupHeight:t,side:n,align:o,sideOffsetPx:r,alignOffsetPx:a,viewportPadPx:d,viewportWidth:u,viewportHeight:c}=e;let h=0;let l=0;switch(n){case"top":l=s.top-t-r;h=o==="start"?s.left+a:o==="end"?s.right-i+a:s.left+s.width/2-i/2+a;break;case"bottom":l=s.bottom+r;h=o==="start"?s.left+a:o==="end"?s.right-i+a:s.left+s.width/2-i/2+a;break;case"left":h=s.left-i-r;l=o==="start"?s.top+a:o==="end"?s.bottom-t+a:s.top+s.height/2-t/2+a;break;case"right":h=s.right+r;l=o==="start"?s.top+a:o==="end"?s.bottom-t+a:s.top+s.height/2-t/2+a;break}return{x:Math.min(Math.max(h,d),u-i-d),y:Math.min(Math.max(l,d),c-t-d)}}const c=()=>`.sc-ds-menu-h{--ds-focus-ring-width:var(--dimension-stroke-width-025, 2px);--ds-focus-ring-offset:var(--dimension-space-025, 2px);--ds-focus-ring-color:var(--color-interaction-focus)}.ds-focus-ring.sc-ds-menu:focus-visible{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring.ds-focus-ring--visible.sc-ds-menu{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring-inset.sc-ds-menu:focus-visible{outline:none}.ds-focus-ring-inset.sc-ds-menu:focus-visible::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-menu{outline:none}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-menu::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}.menu-popup.sc-ds-menu{box-sizing:border-box;display:flex;flex-direction:column;min-width:var(--dimension-menu-width-xs);max-width:var(--dimension-panel-width-lg);overflow:hidden;background-color:var(--color-background-primary);border-radius:var(--dimension-radius-075);box-shadow:var(--effect-shadow-elevated-floating);animation:menuFadeIn var(--effect-motion-short-2) forwards;backface-visibility:hidden;will-change:transform}.menu-popup.sc-ds-menu::after{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;box-shadow:var(--effect-highlight-elevated-floating)}.menu-popup--closing.sc-ds-menu{animation:menuFadeOut var(--effect-motion-short-3) forwards}@keyframes menuFadeIn{from{opacity:0;transform:inherit scale(0.97)}to{opacity:1}}@keyframes menuFadeOut{from{opacity:1}to{opacity:0}}.menu-section.sc-ds-menu{display:flex;flex-direction:column;gap:var(--dimension-space-050);padding:var(--dimension-space-050)}.menu-section--divided.sc-ds-menu{border-bottom:var(--dimension-stroke-width-015) solid var(--color-border-tertiary)}.section-header.sc-ds-menu{display:flex;align-items:center;height:var(--dimension-size-400);padding:var(--dimension-space-050) var(--dimension-space-075);-webkit-user-select:none;user-select:none}.section-label.sc-ds-menu{color:var(--color-foreground-secondary)}.menu-item.sc-ds-menu{display:flex;align-items:center;gap:var(--dimension-space-050);position:relative;width:100%;min-height:var(--dimension-size-400);padding:var(--dimension-space-075);box-sizing:border-box;border:none;border-radius:var(--dimension-radius-025);background:transparent;cursor:pointer;-webkit-user-select:none;user-select:none;text-align:left;color:inherit;--_hover-bg:var(--color-interaction-hover);--_pressed-bg:var(--color-interaction-pressed);--_selected-bg:var(--color-interaction-active)}.menu-item.sc-ds-menu:has(.menu-item__subtext){align-items:flex-start}.menu-item.sc-ds-menu::after{content:'';position:absolute;inset:0;border-radius:inherit;background:transparent;pointer-events:none;transition:none}.menu-item--selected.sc-ds-menu::after{background:var(--_selected-bg);transition:none}.menu-item.sc-ds-menu:hover:not(:disabled):not(.menu-item--selected)::after{background:var(--_hover-bg);transition:none}.menu-item.sc-ds-menu:active:not(:disabled)::after{background:var(--_pressed-bg);transition:none}.menu-item--inactive.sc-ds-menu{opacity:0.5;cursor:not-allowed;pointer-events:none}.menu-item--destructive.sc-ds-menu .menu-item__label.sc-ds-menu{color:var(--color-foreground-bold-negative) !important}.menu-item__content.sc-ds-menu{position:relative;z-index:1;display:flex;flex:1;flex-direction:column;gap:var(--dimension-space-025);min-width:0}.menu-item__label.sc-ds-menu{color:var(--color-foreground-secondary)}.menu-item.sc-ds-menu:has(.menu-item__subtext) .menu-item__label.sc-ds-menu,.menu-item--selected.sc-ds-menu .menu-item__label.sc-ds-menu{color:var(--color-foreground-primary)}.menu-item__subtext.sc-ds-menu{color:var(--color-foreground-secondary);line-height:1.4}.menu-item__toggle.sc-ds-menu{position:relative;z-index:1;flex-shrink:0;width:calc(var(--dimension-size-400) + var(--dimension-size-050));height:var(--dimension-size-250);border-radius:var(--dimension-radius-125);background-color:var(--color-background-translucent);transition:background-color var(--effect-motion-short-2)}.menu-item__toggle--on.sc-ds-menu{background-color:var(--color-background-medium-brand)}.menu-item__toggle-thumb.sc-ds-menu{position:absolute;top:var(--dimension-space-025);left:var(--dimension-space-025);width:var(--dimension-size-200);height:var(--dimension-size-200);border-radius:50%;background-color:var(--color-foreground-on-bold-background-primary);transition:transform var(--effect-motion-short-2)}.menu-item__toggle--on.sc-ds-menu .menu-item__toggle-thumb.sc-ds-menu{transform:translateX(var(--dimension-offset-200, 16px))}`;const h=8;const l=e(class e extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.dsClose=i(this,"dsClose");this.dsSelect=i(this,"dsSelect");this.open=false;this.items=[];this.sections=[];this.side="bottom";this.align="start";this.sideOffset=r.space050;this.alignOffset=0;this.initialFocusVisible=false;this.shouldRender=false;this.closing=false;this.pos={x:0,y:0};this.focusedIndex=0;this.positionReady=false;this.focusRingVisible=false;this.clickOutsideHandler=null;this.scrollResizeHandler=null;this.closeTimer=null;this.itemEls=[];this.positionRetryRaf=null;this.listenersReady=false}componentDidLoad(){if(this.open)this.onOpenChange(true)}disconnectedCallback(){this.cancelPositionRetry();this.teardownListeners()}onOpenChange(e){if(e){this.teardownListeners();this.shouldRender=true;this.closing=false;this.positionReady=false;this.listenersReady=false;this.focusRingVisible=this.initialFocusVisible;this.listenersReady=true;this.setupListeners();this.schedulePositionUpdate((()=>{this.focusInitialItem()}))}else if(this.shouldRender){this.cancelPositionRetry();this.closing=true;this.teardownListeners();this.listenersReady=false;this.closeTimer=setTimeout((()=>{this.shouldRender=false;this.closing=false;this.closeTimer=null}),this.closeAnimationMs)}}onAnchorChange(){if(this.open)this.schedulePositionUpdate()}onPositionPropsChange(){if(this.open)this.schedulePositionUpdate()}get viewportPadPx(){return a(r.space050,r.space050)}get sideOffsetPx(){return a(this.sideOffset,r.space050)}get alignOffsetPx(){return a(this.alignOffset,0)}get popupFallbackWidthPx(){return a(r.menuWidthXs,r.menuWidthXs)}get popupFallbackHeightPx(){return a(r.menuFallbackHeight,r.menuFallbackHeight)}get closeAnimationMs(){return d(r.motionShort3,r.animationDurationShort3)}get resolvedAnchor(){if(this.anchor)return this.anchor;if(this.anchorId)return document.getElementById(this.anchorId);return null}get activeSections(){if(this.sections.length>0)return this.sections;if(this.items.length>0)return[{items:this.items}];return[]}get flatItems(){return this.activeSections.flatMap((e=>e.items))}cancelPositionRetry(){if(this.positionRetryRaf!==null){cancelAnimationFrame(this.positionRetryRaf);this.positionRetryRaf=null}}schedulePositionUpdate(e){if(!this.open)return;this.cancelPositionRetry();this.positionReady=false;let s=h;const i=()=>{this.positionRetryRaf=null;if(!this.open)return;if(this.calculatePosition()){this.positionReady=true;e?.();return}if(s>0){s-=1;this.positionRetryRaf=requestAnimationFrame(i)}};this.positionRetryRaf=requestAnimationFrame(i)}calculatePosition(){const e=this.resolvedAnchor;if(!e)return false;const s=this.el.querySelector(".menu-popup");if(!s)return false;this.pos=u({anchorRect:e.getBoundingClientRect(),popupWidth:s.offsetWidth||this.popupFallbackWidthPx,popupHeight:s.offsetHeight||this.popupFallbackHeightPx,side:this.side,align:this.align,sideOffsetPx:this.sideOffsetPx,alignOffsetPx:this.alignOffsetPx,viewportPadPx:this.viewportPadPx,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight});return true}focusInitialItem(){const e=this.flatItems;const s=e.findIndex((e=>e.isSelected&&!e.isInactive));const i=e.findIndex((e=>!e.isInactive));this.focusedIndex=s>=0?s:i>=0?i:0;requestAnimationFrame((()=>{const e=this.el.querySelectorAll(".menu-item");e[this.focusedIndex]?.focus()}))}setupListeners(){this.clickOutsideHandler=e=>{const s=e.target;const i=this.el.querySelector(".menu-popup");const t=this.resolvedAnchor;if(i?.contains(s)||t?.contains(s))return;this.close()};this.scrollResizeHandler=()=>{if(this.shouldRender&&!this.closing)this.calculatePosition()};document.addEventListener("mousedown",this.clickOutsideHandler,true);window.addEventListener("scroll",this.scrollResizeHandler,true);window.addEventListener("resize",this.scrollResizeHandler)}teardownListeners(){if(this.clickOutsideHandler){document.removeEventListener("mousedown",this.clickOutsideHandler,true);this.clickOutsideHandler=null}if(this.scrollResizeHandler){window.removeEventListener("scroll",this.scrollResizeHandler,true);window.removeEventListener("resize",this.scrollResizeHandler);this.scrollResizeHandler=null}if(this.closeTimer){clearTimeout(this.closeTimer);this.closeTimer=null}}close(){this.resolvedAnchor?.focus();this.dsClose.emit();this.open=false;this.onOpenChange(false)}handleKeyDown(e){if(!this.shouldRender||this.closing)return;const s=this.flatItems;const i=s.map(((e,s)=>({it:e,i:s}))).filter((({it:e})=>!e.isInactive)).map((({i:e})=>e));if(!i.length)return;const t=i.indexOf(this.focusedIndex);const n=t<0?0:t;switch(e.key){case"ArrowDown":e.preventDefault();e.stopPropagation();this.focusRingVisible=true;this.focusedIndex=i[(n+1)%i.length];this.focusItem(this.focusedIndex);break;case"ArrowUp":e.preventDefault();e.stopPropagation();this.focusRingVisible=true;this.focusedIndex=i[(n-1+i.length)%i.length];this.focusItem(this.focusedIndex);break;case"Home":e.preventDefault();e.stopPropagation();this.focusRingVisible=true;this.focusedIndex=i[0];this.focusItem(this.focusedIndex);break;case"End":e.preventDefault();e.stopPropagation();this.focusRingVisible=true;this.focusedIndex=i[i.length-1];this.focusItem(this.focusedIndex);break;case"Escape":e.preventDefault();this.close();break;case"Tab":e.preventDefault();this.close();break}}focusItem(e){const s=this.el.querySelectorAll(".menu-item");s[e]?.focus()}handleItemClick(e){if(e.isInactive)return;this.dsSelect.emit(e);this.close()}render(){if(!this.shouldRender)return t(n,{style:{display:"contents"}});const e=this.activeSections;let s=0;const i={position:"fixed",left:"0",top:"0",transform:`translate(${Math.round(this.pos.x)}px, ${Math.round(this.pos.y)}px)`,zIndex:"9998",visibility:this.positionReady?"visible":"hidden"};if(this.menuWidth)i["width"]=this.menuWidth;if(this.minWidth)i["min-width"]=this.minWidth;return t(n,{style:{display:"contents"}},t("div",{class:{"menu-popup":true,"menu-popup--closing":this.closing},style:i,role:"menu","aria-label":"Menu","aria-orientation":"vertical"},e.map(((i,n)=>t("div",{key:n,class:{"menu-section":true,"menu-section--divided":n<e.length-1},role:i.header?"group":undefined,"aria-label":i.header},i.header&&t("div",{class:"section-header","aria-hidden":"true"},t("span",{class:"text-body-small-emphasis section-label"},i.header)),i.items.map((e=>{const i=s++;const n=this.focusedIndex===i;return t("button",{key:i,type:"button",class:{"menu-item":true,"ds-focus-ring-inset":true,"ds-focus-ring--visible":n&&this.focusRingVisible,"menu-item--selected":!!e.isSelected,"menu-item--inactive":!!e.isInactive,"menu-item--destructive":!!e.isDestructive,"menu-item--focused":n},role:"menuitem","aria-current":e.isSelected?"true":undefined,disabled:e.isInactive,tabIndex:n?0:-1,onMouseDown:()=>{this.focusRingVisible=false},onClick:()=>this.handleItemClick(e),onFocus:()=>{this.focusedIndex=i}},t("div",{class:"menu-item__content"},t("span",{class:e.isSelected?"text-body-medium-emphasis menu-item__label":"text-body-medium menu-item__label"},e.label),e.subtext&&t("span",{class:"text-body-small menu-item__subtext"},e.subtext)),e.showToggle&&t("div",{class:{"menu-item__toggle":true,"menu-item__toggle--on":!!e.toggleValue},"aria-hidden":"true"},t("div",{class:"menu-item__toggle-thumb"})))})))))))}get el(){return this}static get watchers(){return{open:[{onOpenChange:0}],anchor:[{onAnchorChange:0}],anchorId:[{onAnchorChange:0}],side:[{onPositionPropsChange:0}],align:[{onPositionPropsChange:0}],sideOffset:[{onPositionPropsChange:0}],alignOffset:[{onPositionPropsChange:0}]}}static get style(){return c()}},[2,"ds-menu",{open:[1028],items:[16],sections:[16],side:[1],align:[1],sideOffset:[8,"side-offset"],alignOffset:[8,"align-offset"],menuWidth:[1,"menu-width"],minWidth:[1,"min-width"],anchor:[16],anchorId:[1,"anchor-id"],initialFocusVisible:[4,"initial-focus-visible"],shouldRender:[32],closing:[32],pos:[32],focusedIndex:[32],positionReady:[32],focusRingVisible:[32]},[[0,"keydown","handleKeyDown"]],{open:[{onOpenChange:0}],anchor:[{onAnchorChange:0}],anchorId:[{onAnchorChange:0}],side:[{onPositionPropsChange:0}],align:[{onPositionPropsChange:0}],sideOffset:[{onPositionPropsChange:0}],alignOffset:[{onPositionPropsChange:0}]}]);function m(){if(typeof customElements==="undefined"){return}const e=["ds-menu"];e.forEach((e=>{switch(e){case"ds-menu":if(!customElements.get(o(e))){customElements.define(o(e),l)}break}}))}m();export{l as M,m as d};
|
|
2
|
+
//# sourceMappingURL=p-YzIqPOqL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["computeMenuPosition","input","anchorRect","a","popupWidth","pw","popupHeight","ph","side","align","sideOffsetPx","alignOffsetPx","viewportPadPx","vpPad","viewportWidth","viewportHeight","x","y","top","left","right","width","bottom","height","Math","min","max","menuCss","POSITION_RETRY_BUDGET","Menu","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","open","items","sections","sideOffset","TOKEN_DEFAULTS","space050","alignOffset","initialFocusVisible","shouldRender","closing","pos","focusedIndex","positionReady","focusRingVisible","clickOutsideHandler","scrollResizeHandler","closeTimer","itemEls","positionRetryRaf","listenersReady","componentDidLoad","onOpenChange","disconnectedCallback","cancelPositionRetry","teardownListeners","isOpen","setupListeners","schedulePositionUpdate","focusInitialItem","setTimeout","closeAnimationMs","onAnchorChange","onPositionPropsChange","resolveCssLengthPx","popupFallbackWidthPx","menuWidthXs","popupFallbackHeightPx","menuFallbackHeight","resolveCssTimeMs","motionShort3","animationDurationShort3","resolvedAnchor","anchor","anchorId","document","getElementById","activeSections","length","flatItems","flatMap","s","cancelAnimationFrame","onReady","remaining","attempt","calculatePosition","requestAnimationFrame","anchorEl","popup","el","querySelector","getBoundingClientRect","offsetWidth","offsetHeight","window","innerWidth","innerHeight","flat","selectedIdx","findIndex","it","isSelected","isInactive","firstEnabledIdx","btns","querySelectorAll","focus","e","t","target","contains","close","addEventListener","removeEventListener","clearTimeout","dsClose","emit","handleKeyDown","enabled","map","i","filter","cur","indexOf","safe","key","preventDefault","stopPropagation","focusItem","idx","handleItemClick","item","dsSelect","render","h","Host","style","display","flatIdx","popupStyle","position","transform","round","zIndex","visibility","menuWidth","minWidth","class","role","section","si","header","undefined","isFocused","type","isDestructive","disabled","tabIndex","onMouseDown","onClick","onFocus","label","subtext","showToggle","toggleValue"],"sources":["src/wc/components/Menu/menu-position.ts","src/wc/components/Menu/Menu.css?tag=ds-menu&encapsulation=scoped","src/wc/components/Menu/Menu.tsx"],"sourcesContent":["export type MenuSide = 'top' | 'right' | 'bottom' | 'left';\nexport type MenuAlign = 'start' | 'center' | 'end';\n\nexport interface MenuPositionInput {\n anchorRect: Pick<DOMRectReadOnly, 'top' | 'left' | 'right' | 'bottom' | 'width' | 'height'>;\n popupWidth: number;\n popupHeight: number;\n side: MenuSide;\n align: MenuAlign;\n sideOffsetPx: number;\n alignOffsetPx: number;\n viewportPadPx: number;\n viewportWidth: number;\n viewportHeight: number;\n}\n\n/** Pure layout math for ds-menu — anchor rect + placement props → viewport-fixed x/y. */\nexport function computeMenuPosition(input: MenuPositionInput): { x: number; y: number } {\n const {\n anchorRect: a,\n popupWidth: pw,\n popupHeight: ph,\n side,\n align,\n sideOffsetPx,\n alignOffsetPx,\n viewportPadPx: vpPad,\n viewportWidth,\n viewportHeight,\n } = input;\n\n let x = 0;\n let y = 0;\n\n switch (side) {\n case 'top':\n y = a.top - ph - sideOffsetPx;\n x =\n align === 'start'\n ? a.left + alignOffsetPx\n : align === 'end'\n ? a.right - pw + alignOffsetPx\n : a.left + a.width / 2 - pw / 2 + alignOffsetPx;\n break;\n case 'bottom':\n y = a.bottom + sideOffsetPx;\n x =\n align === 'start'\n ? a.left + alignOffsetPx\n : align === 'end'\n ? a.right - pw + alignOffsetPx\n : a.left + a.width / 2 - pw / 2 + alignOffsetPx;\n break;\n case 'left':\n x = a.left - pw - sideOffsetPx;\n y =\n align === 'start'\n ? a.top + alignOffsetPx\n : align === 'end'\n ? a.bottom - ph + alignOffsetPx\n : a.top + a.height / 2 - ph / 2 + alignOffsetPx;\n break;\n case 'right':\n x = a.right + sideOffsetPx;\n y =\n align === 'start'\n ? a.top + alignOffsetPx\n : align === 'end'\n ? a.bottom - ph + alignOffsetPx\n : a.top + a.height / 2 - ph / 2 + alignOffsetPx;\n break;\n }\n\n return {\n x: Math.min(Math.max(x, vpPad), viewportWidth - pw - vpPad),\n y: Math.min(Math.max(y, vpPad), viewportHeight - ph - vpPad),\n };\n}\n","@import '../../utils/focus-ring.css';\n\n/* ── Popup shell ─────────────────────────────────────────────────────────── */\n\n.menu-popup {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n min-width: var(--dimension-menu-width-xs);\n max-width: var(--dimension-panel-width-lg);\n overflow: hidden;\n background-color: var(--color-background-primary);\n border-radius: var(--dimension-radius-075);\n /* Split elevation: shadow on shell, inset highlight on ::after (combined token clips with overflow:hidden). */\n box-shadow: var(--effect-shadow-elevated-floating);\n animation: menuFadeIn var(--effect-motion-short-2) forwards;\n backface-visibility: hidden;\n will-change: transform;\n}\n\n.menu-popup::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: inherit;\n pointer-events: none;\n box-shadow: var(--effect-highlight-elevated-floating);\n}\n\n.menu-popup--closing {\n animation: menuFadeOut var(--effect-motion-short-3) forwards;\n}\n\n@keyframes menuFadeIn {\n from { opacity: 0; transform: inherit scale(0.97); }\n to { opacity: 1; }\n}\n\n@keyframes menuFadeOut {\n from { opacity: 1; }\n to { opacity: 0; }\n}\n\n/* ── Sections ────────────────────────────────────────────────────────────── */\n\n.menu-section {\n display: flex;\n flex-direction: column;\n gap: var(--dimension-space-050);\n padding: var(--dimension-space-050);\n}\n\n.menu-section--divided {\n border-bottom: var(--dimension-stroke-width-015) solid var(--color-border-tertiary);\n}\n\n.section-header {\n display: flex;\n align-items: center;\n height: var(--dimension-size-400);\n padding: var(--dimension-space-050) var(--dimension-space-075);\n -webkit-user-select: none;\n user-select: none;\n}\n\n.section-label {\n color: var(--color-foreground-secondary);\n}\n\n/* ── Items ───────────────────────────────────────────────────────────────── */\n\n.menu-item {\n display: flex;\n align-items: center;\n gap: var(--dimension-space-050);\n position: relative;\n width: 100%;\n min-height: var(--dimension-size-400);\n padding: var(--dimension-space-075);\n box-sizing: border-box;\n border: none;\n border-radius: var(--dimension-radius-025);\n background: transparent;\n cursor: pointer;\n -webkit-user-select: none;\n user-select: none;\n text-align: left;\n color: inherit;\n --_hover-bg: var(--color-interaction-hover);\n --_pressed-bg: var(--color-interaction-pressed);\n --_selected-bg: var(--color-interaction-active);\n}\n\n.menu-item:has(.menu-item__subtext) {\n align-items: flex-start;\n}\n\n/* Interaction layer — same ::after pattern as tabs / BarNav trigger */\n.menu-item::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: inherit;\n background: transparent;\n pointer-events: none;\n transition: none;\n}\n\n.menu-item--selected::after {\n background: var(--_selected-bg);\n transition: none;\n}\n\n.menu-item:hover:not(:disabled):not(.menu-item--selected)::after {\n background: var(--_hover-bg);\n transition: none;\n}\n\n.menu-item:active:not(:disabled)::after {\n background: var(--_pressed-bg);\n transition: none;\n}\n\n.menu-item--inactive {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.menu-item--destructive .menu-item__label {\n color: var(--color-foreground-bold-negative) !important;\n}\n\n.menu-item__content {\n position: relative;\n z-index: 1;\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--dimension-space-025);\n min-width: 0;\n}\n\n.menu-item__label {\n color: var(--color-foreground-secondary);\n}\n\n.menu-item:has(.menu-item__subtext) .menu-item__label,\n.menu-item--selected .menu-item__label {\n color: var(--color-foreground-primary);\n}\n\n.menu-item__subtext {\n color: var(--color-foreground-secondary);\n line-height: 1.4;\n}\n\n/* ── Toggle suffix ───────────────────────────────────────────────────────── */\n\n.menu-item__toggle {\n position: relative;\n z-index: 1;\n flex-shrink: 0;\n width: calc(var(--dimension-size-400) + var(--dimension-size-050));\n height: var(--dimension-size-250);\n border-radius: var(--dimension-radius-125);\n background-color: var(--color-background-translucent);\n transition: background-color var(--effect-motion-short-2);\n}\n\n.menu-item__toggle--on {\n background-color: var(--color-background-medium-brand);\n}\n\n.menu-item__toggle-thumb {\n position: absolute;\n top: var(--dimension-space-025);\n left: var(--dimension-space-025);\n width: var(--dimension-size-200);\n height: var(--dimension-size-200);\n border-radius: 50%;\n background-color: var(--color-foreground-on-bold-background-primary);\n transition: transform var(--effect-motion-short-2);\n}\n\n.menu-item__toggle--on .menu-item__toggle-thumb {\n transform: translateX(var(--dimension-offset-200, 16px));\n}\n","import { Component, Prop, State, Event, EventEmitter, Element, Watch, Listen, h, Host } from '@stencil/core';\nimport { resolveCssLengthPx, resolveCssTimeMs, TOKEN_DEFAULTS } from '../../utils';\nimport { computeMenuPosition, type MenuAlign, type MenuSide } from './menu-position';\nimport type { MenuItemData, MenuSection } from './menu-types';\n\n/** rAF retries while the popup mounts or the anchor resolves. */\nconst POSITION_RETRY_BUDGET = 8;\n\n@Component({\n tag: 'ds-menu',\n styleUrl: 'Menu.css',\n scoped: true,\n})\nexport class Menu {\n @Element() el!: HTMLElement;\n\n @Prop({ mutable: true }) open: boolean = false;\n @Prop() items: MenuItemData[] = [];\n @Prop() sections: MenuSection[] = [];\n @Prop() side: MenuSide = 'bottom';\n @Prop() align: MenuAlign = 'start';\n /** Gap between anchor and menu — number (px) or TokoMo length (`var(--dimension-space-050)`, etc.). */\n @Prop() sideOffset: number | string = TOKEN_DEFAULTS.space050;\n /** Cross-axis offset — number (px) or TokoMo length. */\n @Prop() alignOffset: number | string = 0;\n @Prop() menuWidth: string | undefined;\n @Prop() minWidth: string | undefined;\n /** External trigger element to position against. Set via JS: menuEl.anchor = buttonEl */\n @Prop() anchor: HTMLElement | undefined;\n /** ID of the external trigger element for positioning */\n @Prop() anchorId: string | undefined;\n /** Show a visible ring on the initially focused menu item. Use only when the opener was keyboard-driven. */\n @Prop() initialFocusVisible: boolean = false;\n\n @State() private shouldRender: boolean = false;\n @State() private closing: boolean = false;\n @State() private pos: { x: number; y: number } = { x: 0, y: 0 };\n @State() private focusedIndex: number = 0;\n @State() private positionReady: boolean = false;\n @State() private focusRingVisible: boolean = false;\n\n @Event() dsClose!: EventEmitter<void>;\n @Event() dsSelect!: EventEmitter<MenuItemData>;\n\n private clickOutsideHandler: ((e: MouseEvent) => void) | null = null;\n private scrollResizeHandler: (() => void) | null = null;\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n private itemEls: HTMLElement[] = [];\n private positionRetryRaf: number | null = null;\n private listenersReady = false;\n\n componentDidLoad() {\n if (this.open) this.onOpenChange(true);\n }\n\n disconnectedCallback() {\n this.cancelPositionRetry();\n this.teardownListeners();\n }\n\n @Watch('open')\n onOpenChange(isOpen: boolean) {\n if (isOpen) {\n this.teardownListeners();\n this.shouldRender = true;\n this.closing = false;\n this.positionReady = false;\n this.listenersReady = false;\n this.focusRingVisible = this.initialFocusVisible;\n this.listenersReady = true;\n this.setupListeners();\n this.schedulePositionUpdate(() => {\n this.focusInitialItem();\n });\n } else if (this.shouldRender) {\n this.cancelPositionRetry();\n this.closing = true;\n this.teardownListeners();\n this.listenersReady = false;\n this.closeTimer = setTimeout(() => {\n this.shouldRender = false;\n this.closing = false;\n this.closeTimer = null;\n }, this.closeAnimationMs);\n }\n }\n\n @Watch('anchor')\n @Watch('anchorId')\n onAnchorChange() {\n if (this.open) this.schedulePositionUpdate();\n }\n\n @Watch('side')\n @Watch('align')\n @Watch('sideOffset')\n @Watch('alignOffset')\n onPositionPropsChange() {\n if (this.open) this.schedulePositionUpdate();\n }\n\n private get viewportPadPx(): number {\n return resolveCssLengthPx(TOKEN_DEFAULTS.space050, TOKEN_DEFAULTS.space050);\n }\n\n private get sideOffsetPx(): number {\n return resolveCssLengthPx(this.sideOffset, TOKEN_DEFAULTS.space050);\n }\n\n private get alignOffsetPx(): number {\n return resolveCssLengthPx(this.alignOffset, 0);\n }\n\n private get popupFallbackWidthPx(): number {\n return resolveCssLengthPx(TOKEN_DEFAULTS.menuWidthXs, TOKEN_DEFAULTS.menuWidthXs);\n }\n\n private get popupFallbackHeightPx(): number {\n return resolveCssLengthPx(TOKEN_DEFAULTS.menuFallbackHeight, TOKEN_DEFAULTS.menuFallbackHeight);\n }\n\n private get closeAnimationMs(): number {\n return resolveCssTimeMs(TOKEN_DEFAULTS.motionShort3, TOKEN_DEFAULTS.animationDurationShort3);\n }\n\n private get resolvedAnchor(): HTMLElement | null {\n if (this.anchor) return this.anchor;\n if (this.anchorId) return document.getElementById(this.anchorId);\n return null;\n }\n\n private get activeSections(): MenuSection[] {\n if (this.sections.length > 0) return this.sections;\n if (this.items.length > 0) return [{ items: this.items }];\n return [];\n }\n\n private get flatItems(): MenuItemData[] {\n return this.activeSections.flatMap(s => s.items);\n }\n\n private cancelPositionRetry() {\n if (this.positionRetryRaf !== null) {\n cancelAnimationFrame(this.positionRetryRaf);\n this.positionRetryRaf = null;\n }\n }\n\n /** Retry until anchor + popup exist — do not reveal at 0,0 on a failed first pass. */\n private schedulePositionUpdate(onReady?: () => void) {\n if (!this.open) return;\n\n this.cancelPositionRetry();\n this.positionReady = false;\n\n let remaining = POSITION_RETRY_BUDGET;\n\n const attempt = () => {\n this.positionRetryRaf = null;\n if (!this.open) return;\n\n if (this.calculatePosition()) {\n this.positionReady = true;\n onReady?.();\n return;\n }\n\n if (remaining > 0) {\n remaining -= 1;\n this.positionRetryRaf = requestAnimationFrame(attempt);\n }\n };\n\n this.positionRetryRaf = requestAnimationFrame(attempt);\n }\n\n /** @returns `true` when anchor and popup were found and `pos` was updated. */\n private calculatePosition(): boolean {\n const anchorEl = this.resolvedAnchor;\n if (!anchorEl) return false;\n const popup = this.el.querySelector('.menu-popup') as HTMLElement | null;\n if (!popup) return false;\n\n this.pos = computeMenuPosition({\n anchorRect: anchorEl.getBoundingClientRect(),\n popupWidth: popup.offsetWidth || this.popupFallbackWidthPx,\n popupHeight: popup.offsetHeight || this.popupFallbackHeightPx,\n side: this.side,\n align: this.align,\n sideOffsetPx: this.sideOffsetPx,\n alignOffsetPx: this.alignOffsetPx,\n viewportPadPx: this.viewportPadPx,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n });\n return true;\n }\n\n /** Focus the selected item when present, otherwise the first enabled item. */\n private focusInitialItem() {\n const flat = this.flatItems;\n const selectedIdx = flat.findIndex(it => it.isSelected && !it.isInactive);\n const firstEnabledIdx = flat.findIndex(it => !it.isInactive);\n this.focusedIndex = selectedIdx >= 0\n ? selectedIdx\n : (firstEnabledIdx >= 0 ? firstEnabledIdx : 0);\n\n requestAnimationFrame(() => {\n const btns = this.el.querySelectorAll<HTMLElement>('.menu-item');\n btns[this.focusedIndex]?.focus();\n });\n }\n\n private setupListeners() {\n this.clickOutsideHandler = (e: MouseEvent) => {\n const t = e.target as Node;\n const popup = this.el.querySelector('.menu-popup');\n const anchorEl = this.resolvedAnchor;\n if (popup?.contains(t) || anchorEl?.contains(t)) return;\n this.close();\n };\n\n this.scrollResizeHandler = () => {\n if (this.shouldRender && !this.closing) this.calculatePosition();\n };\n\n document.addEventListener('mousedown', this.clickOutsideHandler, true);\n window.addEventListener('scroll', this.scrollResizeHandler, true);\n window.addEventListener('resize', this.scrollResizeHandler);\n }\n\n private teardownListeners() {\n if (this.clickOutsideHandler) {\n document.removeEventListener('mousedown', this.clickOutsideHandler, true);\n this.clickOutsideHandler = null;\n }\n if (this.scrollResizeHandler) {\n window.removeEventListener('scroll', this.scrollResizeHandler, true);\n window.removeEventListener('resize', this.scrollResizeHandler);\n this.scrollResizeHandler = null;\n }\n if (this.closeTimer) {\n clearTimeout(this.closeTimer);\n this.closeTimer = null;\n }\n }\n\n private close() {\n this.resolvedAnchor?.focus();\n this.dsClose.emit();\n this.open = false;\n this.onOpenChange(false);\n }\n\n @Listen('keydown')\n handleKeyDown(e: KeyboardEvent) {\n if (!this.shouldRender || this.closing) return;\n const flat = this.flatItems;\n const enabled = flat.map((it, i) => ({ it, i })).filter(({ it }) => !it.isInactive).map(({ i }) => i);\n if (!enabled.length) return;\n\n const cur = enabled.indexOf(this.focusedIndex);\n const safe = cur < 0 ? 0 : cur;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault(); e.stopPropagation();\n this.focusRingVisible = true;\n this.focusedIndex = enabled[(safe + 1) % enabled.length];\n this.focusItem(this.focusedIndex);\n break;\n case 'ArrowUp':\n e.preventDefault(); e.stopPropagation();\n this.focusRingVisible = true;\n this.focusedIndex = enabled[(safe - 1 + enabled.length) % enabled.length];\n this.focusItem(this.focusedIndex);\n break;\n case 'Home':\n e.preventDefault(); e.stopPropagation();\n this.focusRingVisible = true;\n this.focusedIndex = enabled[0];\n this.focusItem(this.focusedIndex);\n break;\n case 'End':\n e.preventDefault(); e.stopPropagation();\n this.focusRingVisible = true;\n this.focusedIndex = enabled[enabled.length - 1];\n this.focusItem(this.focusedIndex);\n break;\n case 'Escape':\n e.preventDefault();\n this.close();\n break;\n case 'Tab':\n e.preventDefault();\n this.close();\n break;\n }\n }\n\n private focusItem(idx: number) {\n const btns = this.el.querySelectorAll<HTMLElement>('.menu-item');\n btns[idx]?.focus();\n }\n\n private handleItemClick(item: MenuItemData) {\n if (item.isInactive) return;\n this.dsSelect.emit(item);\n this.close();\n }\n\n render() {\n if (!this.shouldRender) return <Host style={{ display: 'contents' }} />;\n\n const sections = this.activeSections;\n let flatIdx = 0;\n\n const popupStyle: Record<string, string> = {\n position: 'fixed',\n left: '0',\n top: '0',\n transform: `translate(${Math.round(this.pos.x)}px, ${Math.round(this.pos.y)}px)`,\n zIndex: '9998',\n visibility: this.positionReady ? 'visible' : 'hidden',\n };\n\n if (this.menuWidth) popupStyle['width'] = this.menuWidth;\n if (this.minWidth) popupStyle['min-width'] = this.minWidth;\n\n return (\n <Host style={{ display: 'contents' }}>\n <div\n class={{ 'menu-popup': true, 'menu-popup--closing': this.closing }}\n style={popupStyle}\n role=\"menu\"\n aria-label=\"Menu\"\n aria-orientation=\"vertical\"\n >\n {sections.map((section, si) => (\n <div\n key={si}\n class={{ 'menu-section': true, 'menu-section--divided': si < sections.length - 1 }}\n role={section.header ? 'group' : undefined}\n aria-label={section.header}\n >\n {section.header && (\n <div class=\"section-header\" aria-hidden=\"true\">\n <span class=\"text-body-small-emphasis section-label\">{section.header}</span>\n </div>\n )}\n {section.items.map(item => {\n const idx = flatIdx++;\n const isFocused = this.focusedIndex === idx;\n return (\n <button\n key={idx}\n type=\"button\"\n class={{\n 'menu-item': true,\n 'ds-focus-ring-inset': true,\n 'ds-focus-ring--visible': isFocused && this.focusRingVisible,\n 'menu-item--selected': !!item.isSelected,\n 'menu-item--inactive': !!item.isInactive,\n 'menu-item--destructive': !!item.isDestructive,\n 'menu-item--focused': isFocused,\n }}\n role=\"menuitem\"\n aria-current={item.isSelected ? 'true' : undefined}\n disabled={item.isInactive}\n tabIndex={isFocused ? 0 : -1}\n onMouseDown={() => { this.focusRingVisible = false; }}\n onClick={() => this.handleItemClick(item)}\n onFocus={() => { this.focusedIndex = idx; }}\n >\n <div class=\"menu-item__content\">\n <span class={item.isSelected ? 'text-body-medium-emphasis menu-item__label' : 'text-body-medium menu-item__label'}>\n {item.label}\n </span>\n {item.subtext && (\n <span class=\"text-body-small menu-item__subtext\">{item.subtext}</span>\n )}\n </div>\n {item.showToggle && (\n <div class={{ 'menu-item__toggle': true, 'menu-item__toggle--on': !!item.toggleValue }} aria-hidden=\"true\">\n <div class=\"menu-item__toggle-thumb\" />\n </div>\n )}\n </button>\n );\n })}\n </div>\n ))}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -32,15 +32,15 @@ export declare class BarNav {
|
|
|
32
32
|
private menuOpen;
|
|
33
33
|
/** When false, defer showing expanded tabs or the collapsed trigger until intrinsic width is measured (avoids a one-frame flash of the full tab row on narrow viewports). */
|
|
34
34
|
private tabLayoutCommitted;
|
|
35
|
-
private
|
|
35
|
+
private visibleTabs;
|
|
36
|
+
private overflowTabs;
|
|
37
|
+
private menuInitialFocusVisible;
|
|
36
38
|
private static readonly HOST_PROP_SYNC_BUDGET;
|
|
37
39
|
private static readonly INTRINSIC_WIDTH_RETRY_MAX;
|
|
38
40
|
private static readonly TAB_LAYOUT_COMMIT_MAX_FRAMES;
|
|
39
41
|
private static readonly OVERFLOW_HYSTERESIS_PX;
|
|
40
42
|
private headerEl;
|
|
41
43
|
private triggerEl;
|
|
42
|
-
private triggerLabelTextEl;
|
|
43
|
-
private triggerLabelObserver;
|
|
44
44
|
private menuEl;
|
|
45
45
|
private visibleTabGroupEl;
|
|
46
46
|
private probeTabGroupEl;
|
|
@@ -56,8 +56,7 @@ export declare class BarNav {
|
|
|
56
56
|
/** Section waiting for URL + tabs to catch up after a cross-area navigation. */
|
|
57
57
|
private pendingSection;
|
|
58
58
|
private get effectiveValue();
|
|
59
|
-
private get
|
|
60
|
-
private get activeTabHasDot();
|
|
59
|
+
private get hasOverflowTabs();
|
|
61
60
|
private digestTabsConfig;
|
|
62
61
|
private resetTabOverflowLayout;
|
|
63
62
|
onHostPropsChange(): void;
|
|
@@ -79,11 +78,13 @@ export declare class BarNav {
|
|
|
79
78
|
private scheduleDeferredHostPropSync;
|
|
80
79
|
private setupOverflowObserver;
|
|
81
80
|
private scheduleOverflowCheck;
|
|
82
|
-
private syncTriggerLabelObserver;
|
|
83
|
-
private updateTriggerLabelTruncation;
|
|
84
81
|
/** Width available for the tab row or collapsed trigger. */
|
|
85
82
|
private getLeftZoneAvailableWidth;
|
|
86
83
|
private getTabsIntrinsicWidth;
|
|
84
|
+
private getHeaderGap;
|
|
85
|
+
private getOverflowTriggerReserveWidth;
|
|
86
|
+
private getProbeTabMetrics;
|
|
87
|
+
private setOverflowTabLayout;
|
|
87
88
|
private scheduleIntrinsicWidthRetry;
|
|
88
89
|
private forceTabLayoutCommit;
|
|
89
90
|
private updateTabsCollapsed;
|
|
@@ -2,8 +2,11 @@ import type { MenuSection } from '../Menu/menu-types';
|
|
|
2
2
|
import { type TabItem, type TabItemTab } from '../TabGroup/tab-item-utils';
|
|
3
3
|
/** Map BarNav tabs to menu sections, preserving `{ type: 'divider' }` as section breaks. */
|
|
4
4
|
export declare function tabsToMenuSections(tabs: TabItem[], selectedId: string): MenuSection[];
|
|
5
|
+
export declare function tabsToOverflowMenuSections(tabs: TabItem[], selectedId: string): MenuSection[];
|
|
5
6
|
export declare function getActiveTab(tabs: TabItem[], selectedId: string): TabItemTab | undefined;
|
|
6
7
|
export declare function getActiveTabLabel(tabs: TabItem[], selectedId: string): string;
|
|
7
8
|
/** True when tablist content exceeds the available width (with optional hysteresis). */
|
|
8
9
|
export declare function tabsOverflowContainer(tabListScrollWidth: number, containerClientWidth: number, collapsed: boolean, hysteresis?: number): boolean;
|
|
10
|
+
export declare function visibleTabCountForWidth(itemWidths: number[], availableWidth: number, overflowTriggerWidth: number, itemGap: number, listExtraWidth: number): number;
|
|
11
|
+
export declare function trimTrailingDividers(tabs: TabItem[]): TabItem[];
|
|
9
12
|
//# sourceMappingURL=bar-nav-tabs-menu-utils.d.ts.map
|
|
@@ -1,14 +1,3 @@
|
|
|
1
1
|
import type { TabItem } from '../TabGroup/tab-item-utils';
|
|
2
2
|
export type BarNavTab = TabItem;
|
|
3
|
-
export interface BarNavActionItem {
|
|
4
|
-
id: string;
|
|
5
|
-
/** Icon name for <ds-icon>. */
|
|
6
|
-
icon: string;
|
|
7
|
-
/** Whether this action button is currently pressed/active. */
|
|
8
|
-
selected?: boolean;
|
|
9
|
-
/** Show a notification dot. */
|
|
10
|
-
dot?: boolean;
|
|
11
|
-
inactive?: boolean;
|
|
12
|
-
ariaLabel?: string;
|
|
13
|
-
}
|
|
14
3
|
//# sourceMappingURL=bar-nav-types.d.ts.map
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { EventEmitter } from '../../stencil-public-runtime';
|
|
2
|
+
export type ButtonUnfilledIconBackground = 'faint' | 'medium' | 'bold' | 'strong' | 'always-dark' | 'navigation';
|
|
3
|
+
export declare class ButtonUnfilledIcon {
|
|
4
|
+
el: HTMLElement;
|
|
5
|
+
/** Icon name passed to <ds-icon>. */
|
|
6
|
+
icon: string;
|
|
7
|
+
/** Active/selected visual state. */
|
|
8
|
+
isActive: boolean;
|
|
9
|
+
/** When active, render the active interaction fill. Shell chrome can disable this while keeping active icon colour. */
|
|
10
|
+
activeFill: boolean;
|
|
11
|
+
/** Show a 1px tertiary border without changing the interaction model. */
|
|
12
|
+
hasBorder: boolean;
|
|
13
|
+
/** Show a notification dot at the top-right of the icon zone. */
|
|
14
|
+
dot: boolean;
|
|
15
|
+
/** Disables interaction. */
|
|
16
|
+
inactive: boolean;
|
|
17
|
+
/** Native button type. */
|
|
18
|
+
type: 'button' | 'submit' | 'reset';
|
|
19
|
+
/** Parent surface context — adjusts hover/press/focus colours for coloured backgrounds. */
|
|
20
|
+
background: ButtonUnfilledIconBackground | undefined;
|
|
21
|
+
ariaLabel: string;
|
|
22
|
+
controls: string | undefined;
|
|
23
|
+
expanded: boolean | undefined;
|
|
24
|
+
haspopup: string | undefined;
|
|
25
|
+
pressed: boolean | undefined;
|
|
26
|
+
dsClick: EventEmitter<MouseEvent>;
|
|
27
|
+
dsChange: EventEmitter<boolean>;
|
|
28
|
+
private buttonEl;
|
|
29
|
+
setFocus(): Promise<void>;
|
|
30
|
+
private handleClick;
|
|
31
|
+
render(): any;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=ButtonUnfilledIcon.d.ts.map
|
|
@@ -18,11 +18,14 @@ export declare class Menu {
|
|
|
18
18
|
anchor: HTMLElement | undefined;
|
|
19
19
|
/** ID of the external trigger element for positioning */
|
|
20
20
|
anchorId: string | undefined;
|
|
21
|
+
/** Show a visible ring on the initially focused menu item. Use only when the opener was keyboard-driven. */
|
|
22
|
+
initialFocusVisible: boolean;
|
|
21
23
|
private shouldRender;
|
|
22
24
|
private closing;
|
|
23
25
|
private pos;
|
|
24
26
|
private focusedIndex;
|
|
25
27
|
private positionReady;
|
|
28
|
+
private focusRingVisible;
|
|
26
29
|
dsClose: EventEmitter<void>;
|
|
27
30
|
dsSelect: EventEmitter<MenuItemData>;
|
|
28
31
|
private clickOutsideHandler;
|
|
@@ -10,10 +10,10 @@ import { NavChromeStyle } from "./nav/nav-chrome";
|
|
|
10
10
|
import { BadgeSurface, BadgeVariant } from "./components/Badge/Badge";
|
|
11
11
|
import { BannerContrast, BannerIntent } from "./components/Banner/Banner";
|
|
12
12
|
import { BarNavTab } from "./components/BarNav/bar-nav-types";
|
|
13
|
-
import { BarNavActionBackground } from "./components/BarNavAction/BarNavAction";
|
|
14
13
|
import { BreadcrumbItem } from "./components/Breadcrumb/Breadcrumb";
|
|
15
14
|
import { ButtonBackground, ButtonContrast, ButtonElevation, ButtonIntent, ButtonSize, ButtonVariant } from "./components/Button/Button";
|
|
16
15
|
import { ButtonGroupElevation, ButtonGroupItem, ButtonGroupSize } from "./components/ButtonGroup/ButtonGroup";
|
|
16
|
+
import { ButtonUnfilledIconBackground } from "./components/ButtonUnfilledIcon/ButtonUnfilledIcon";
|
|
17
17
|
import { CardElevation, CardRadius } from "./components/Card/Card";
|
|
18
18
|
import { ChipBackground, ChipContrast, ChipElevation, ChipIntent, ChipSize } from "./components/Chip/Chip";
|
|
19
19
|
import { DividerInset, DividerLength, DividerOrientation, DividerSurface } from "./components/Divider/Divider";
|
|
@@ -48,10 +48,10 @@ export { NavChromeStyle } from "./nav/nav-chrome";
|
|
|
48
48
|
export { BadgeSurface, BadgeVariant } from "./components/Badge/Badge";
|
|
49
49
|
export { BannerContrast, BannerIntent } from "./components/Banner/Banner";
|
|
50
50
|
export { BarNavTab } from "./components/BarNav/bar-nav-types";
|
|
51
|
-
export { BarNavActionBackground } from "./components/BarNavAction/BarNavAction";
|
|
52
51
|
export { BreadcrumbItem } from "./components/Breadcrumb/Breadcrumb";
|
|
53
52
|
export { ButtonBackground, ButtonContrast, ButtonElevation, ButtonIntent, ButtonSize, ButtonVariant } from "./components/Button/Button";
|
|
54
53
|
export { ButtonGroupElevation, ButtonGroupItem, ButtonGroupSize } from "./components/ButtonGroup/ButtonGroup";
|
|
54
|
+
export { ButtonUnfilledIconBackground } from "./components/ButtonUnfilledIcon/ButtonUnfilledIcon";
|
|
55
55
|
export { CardElevation, CardRadius } from "./components/Card/Card";
|
|
56
56
|
export { ChipBackground, ChipContrast, ChipElevation, ChipIntent, ChipSize } from "./components/Chip/Chip";
|
|
57
57
|
export { DividerInset, DividerLength, DividerOrientation, DividerSurface } from "./components/Divider/Divider";
|
|
@@ -227,36 +227,6 @@ export namespace Components {
|
|
|
227
227
|
*/
|
|
228
228
|
"value": string;
|
|
229
229
|
}
|
|
230
|
-
interface DsBarNavAction {
|
|
231
|
-
/**
|
|
232
|
-
* @default 'action'
|
|
233
|
-
*/
|
|
234
|
-
"ariaLabel": string;
|
|
235
|
-
/**
|
|
236
|
-
* Parent surface context — adjusts hover/press colours for coloured backgrounds.
|
|
237
|
-
*/
|
|
238
|
-
"background": BarNavActionBackground | undefined;
|
|
239
|
-
/**
|
|
240
|
-
* Show a notification dot (brand colour) at the top-right of the icon.
|
|
241
|
-
* @default false
|
|
242
|
-
*/
|
|
243
|
-
"dot": boolean;
|
|
244
|
-
/**
|
|
245
|
-
* Icon name passed to <ds-icon>.
|
|
246
|
-
* @default ''
|
|
247
|
-
*/
|
|
248
|
-
"icon": string;
|
|
249
|
-
/**
|
|
250
|
-
* Disables interaction.
|
|
251
|
-
* @default false
|
|
252
|
-
*/
|
|
253
|
-
"inactive": boolean;
|
|
254
|
-
/**
|
|
255
|
-
* Controlled toggle/selected state.
|
|
256
|
-
* @default false
|
|
257
|
-
*/
|
|
258
|
-
"selected": boolean;
|
|
259
|
-
}
|
|
260
230
|
interface DsBreadcrumb {
|
|
261
231
|
/**
|
|
262
232
|
* @default []
|
|
@@ -341,6 +311,56 @@ export namespace Components {
|
|
|
341
311
|
*/
|
|
342
312
|
"size": ButtonGroupSize;
|
|
343
313
|
}
|
|
314
|
+
interface DsButtonUnfilledIcon {
|
|
315
|
+
/**
|
|
316
|
+
* When active, render the active interaction fill. Shell chrome can disable this while keeping active icon colour.
|
|
317
|
+
* @default true
|
|
318
|
+
*/
|
|
319
|
+
"activeFill": boolean;
|
|
320
|
+
/**
|
|
321
|
+
* @default 'action'
|
|
322
|
+
*/
|
|
323
|
+
"ariaLabel": string;
|
|
324
|
+
/**
|
|
325
|
+
* Parent surface context — adjusts hover/press/focus colours for coloured backgrounds.
|
|
326
|
+
*/
|
|
327
|
+
"background": ButtonUnfilledIconBackground | undefined;
|
|
328
|
+
"controls": string | undefined;
|
|
329
|
+
/**
|
|
330
|
+
* Show a notification dot at the top-right of the icon zone.
|
|
331
|
+
* @default false
|
|
332
|
+
*/
|
|
333
|
+
"dot": boolean;
|
|
334
|
+
"expanded": boolean | undefined;
|
|
335
|
+
/**
|
|
336
|
+
* Show a 1px tertiary border without changing the interaction model.
|
|
337
|
+
* @default false
|
|
338
|
+
*/
|
|
339
|
+
"hasBorder": boolean;
|
|
340
|
+
"haspopup": string | undefined;
|
|
341
|
+
/**
|
|
342
|
+
* Icon name passed to <ds-icon>.
|
|
343
|
+
* @default ''
|
|
344
|
+
*/
|
|
345
|
+
"icon": string;
|
|
346
|
+
/**
|
|
347
|
+
* Disables interaction.
|
|
348
|
+
* @default false
|
|
349
|
+
*/
|
|
350
|
+
"inactive": boolean;
|
|
351
|
+
/**
|
|
352
|
+
* Active/selected visual state.
|
|
353
|
+
* @default false
|
|
354
|
+
*/
|
|
355
|
+
"isActive": boolean;
|
|
356
|
+
"pressed": boolean | undefined;
|
|
357
|
+
"setFocus": () => Promise<void>;
|
|
358
|
+
/**
|
|
359
|
+
* Native button type.
|
|
360
|
+
* @default 'button'
|
|
361
|
+
*/
|
|
362
|
+
"type": 'button' | 'submit' | 'reset';
|
|
363
|
+
}
|
|
344
364
|
interface DsCard {
|
|
345
365
|
/**
|
|
346
366
|
* @default 'elevated'
|
|
@@ -568,6 +588,11 @@ export namespace Components {
|
|
|
568
588
|
* ID of the external trigger element for positioning
|
|
569
589
|
*/
|
|
570
590
|
"anchorId": string | undefined;
|
|
591
|
+
/**
|
|
592
|
+
* Show a visible ring on the initially focused menu item. Use only when the opener was keyboard-driven.
|
|
593
|
+
* @default false
|
|
594
|
+
*/
|
|
595
|
+
"initialFocusVisible": boolean;
|
|
571
596
|
/**
|
|
572
597
|
* @default []
|
|
573
598
|
*/
|
|
@@ -1097,10 +1122,6 @@ export interface DsBarNavCustomEvent<T> extends CustomEvent<T> {
|
|
|
1097
1122
|
detail: T;
|
|
1098
1123
|
target: HTMLDsBarNavElement;
|
|
1099
1124
|
}
|
|
1100
|
-
export interface DsBarNavActionCustomEvent<T> extends CustomEvent<T> {
|
|
1101
|
-
detail: T;
|
|
1102
|
-
target: HTMLDsBarNavActionElement;
|
|
1103
|
-
}
|
|
1104
1125
|
export interface DsBreadcrumbCustomEvent<T> extends CustomEvent<T> {
|
|
1105
1126
|
detail: T;
|
|
1106
1127
|
target: HTMLDsBreadcrumbElement;
|
|
@@ -1113,6 +1134,10 @@ export interface DsButtonGroupCustomEvent<T> extends CustomEvent<T> {
|
|
|
1113
1134
|
detail: T;
|
|
1114
1135
|
target: HTMLDsButtonGroupElement;
|
|
1115
1136
|
}
|
|
1137
|
+
export interface DsButtonUnfilledIconCustomEvent<T> extends CustomEvent<T> {
|
|
1138
|
+
detail: T;
|
|
1139
|
+
target: HTMLDsButtonUnfilledIconElement;
|
|
1140
|
+
}
|
|
1116
1141
|
export interface DsCheckboxCustomEvent<T> extends CustomEvent<T> {
|
|
1117
1142
|
detail: T;
|
|
1118
1143
|
target: HTMLDsCheckboxElement;
|
|
@@ -1245,23 +1270,6 @@ declare global {
|
|
|
1245
1270
|
prototype: HTMLDsBarNavElement;
|
|
1246
1271
|
new (): HTMLDsBarNavElement;
|
|
1247
1272
|
};
|
|
1248
|
-
interface HTMLDsBarNavActionElementEventMap {
|
|
1249
|
-
"dsChange": boolean;
|
|
1250
|
-
}
|
|
1251
|
-
interface HTMLDsBarNavActionElement extends Components.DsBarNavAction, HTMLStencilElement {
|
|
1252
|
-
addEventListener<K extends keyof HTMLDsBarNavActionElementEventMap>(type: K, listener: (this: HTMLDsBarNavActionElement, ev: DsBarNavActionCustomEvent<HTMLDsBarNavActionElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
|
|
1253
|
-
addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
1254
|
-
addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
1255
|
-
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
|
|
1256
|
-
removeEventListener<K extends keyof HTMLDsBarNavActionElementEventMap>(type: K, listener: (this: HTMLDsBarNavActionElement, ev: DsBarNavActionCustomEvent<HTMLDsBarNavActionElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
|
|
1257
|
-
removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
1258
|
-
removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
1259
|
-
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
|
|
1260
|
-
}
|
|
1261
|
-
var HTMLDsBarNavActionElement: {
|
|
1262
|
-
prototype: HTMLDsBarNavActionElement;
|
|
1263
|
-
new (): HTMLDsBarNavActionElement;
|
|
1264
|
-
};
|
|
1265
1273
|
interface HTMLDsBreadcrumbElementEventMap {
|
|
1266
1274
|
"dsNavigate": { item: BreadcrumbItem; index: number };
|
|
1267
1275
|
}
|
|
@@ -1315,6 +1323,24 @@ declare global {
|
|
|
1315
1323
|
prototype: HTMLDsButtonGroupElement;
|
|
1316
1324
|
new (): HTMLDsButtonGroupElement;
|
|
1317
1325
|
};
|
|
1326
|
+
interface HTMLDsButtonUnfilledIconElementEventMap {
|
|
1327
|
+
"dsClick": MouseEvent;
|
|
1328
|
+
"dsChange": boolean;
|
|
1329
|
+
}
|
|
1330
|
+
interface HTMLDsButtonUnfilledIconElement extends Components.DsButtonUnfilledIcon, HTMLStencilElement {
|
|
1331
|
+
addEventListener<K extends keyof HTMLDsButtonUnfilledIconElementEventMap>(type: K, listener: (this: HTMLDsButtonUnfilledIconElement, ev: DsButtonUnfilledIconCustomEvent<HTMLDsButtonUnfilledIconElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
|
|
1332
|
+
addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
1333
|
+
addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
1334
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
|
|
1335
|
+
removeEventListener<K extends keyof HTMLDsButtonUnfilledIconElementEventMap>(type: K, listener: (this: HTMLDsButtonUnfilledIconElement, ev: DsButtonUnfilledIconCustomEvent<HTMLDsButtonUnfilledIconElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
|
|
1336
|
+
removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
1337
|
+
removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
1338
|
+
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
|
|
1339
|
+
}
|
|
1340
|
+
var HTMLDsButtonUnfilledIconElement: {
|
|
1341
|
+
prototype: HTMLDsButtonUnfilledIconElement;
|
|
1342
|
+
new (): HTMLDsButtonUnfilledIconElement;
|
|
1343
|
+
};
|
|
1318
1344
|
interface HTMLDsCardElement extends Components.DsCard, HTMLStencilElement {
|
|
1319
1345
|
}
|
|
1320
1346
|
var HTMLDsCardElement: {
|
|
@@ -1716,10 +1742,10 @@ declare global {
|
|
|
1716
1742
|
"ds-badge": HTMLDsBadgeElement;
|
|
1717
1743
|
"ds-banner": HTMLDsBannerElement;
|
|
1718
1744
|
"ds-bar-nav": HTMLDsBarNavElement;
|
|
1719
|
-
"ds-bar-nav-action": HTMLDsBarNavActionElement;
|
|
1720
1745
|
"ds-breadcrumb": HTMLDsBreadcrumbElement;
|
|
1721
1746
|
"ds-button": HTMLDsButtonElement;
|
|
1722
1747
|
"ds-button-group": HTMLDsButtonGroupElement;
|
|
1748
|
+
"ds-button-unfilled-icon": HTMLDsButtonUnfilledIconElement;
|
|
1723
1749
|
"ds-card": HTMLDsCardElement;
|
|
1724
1750
|
"ds-checkbox": HTMLDsCheckboxElement;
|
|
1725
1751
|
"ds-chip": HTMLDsChipElement;
|
|
@@ -1908,40 +1934,6 @@ declare namespace LocalJSX {
|
|
|
1908
1934
|
*/
|
|
1909
1935
|
"value"?: string;
|
|
1910
1936
|
}
|
|
1911
|
-
interface DsBarNavAction {
|
|
1912
|
-
/**
|
|
1913
|
-
* @default 'action'
|
|
1914
|
-
*/
|
|
1915
|
-
"ariaLabel"?: string;
|
|
1916
|
-
/**
|
|
1917
|
-
* Parent surface context — adjusts hover/press colours for coloured backgrounds.
|
|
1918
|
-
*/
|
|
1919
|
-
"background"?: BarNavActionBackground | undefined;
|
|
1920
|
-
/**
|
|
1921
|
-
* Show a notification dot (brand colour) at the top-right of the icon.
|
|
1922
|
-
* @default false
|
|
1923
|
-
*/
|
|
1924
|
-
"dot"?: boolean;
|
|
1925
|
-
/**
|
|
1926
|
-
* Icon name passed to <ds-icon>.
|
|
1927
|
-
* @default ''
|
|
1928
|
-
*/
|
|
1929
|
-
"icon"?: string;
|
|
1930
|
-
/**
|
|
1931
|
-
* Disables interaction.
|
|
1932
|
-
* @default false
|
|
1933
|
-
*/
|
|
1934
|
-
"inactive"?: boolean;
|
|
1935
|
-
/**
|
|
1936
|
-
* Emits the new selected value (!selected) on click.
|
|
1937
|
-
*/
|
|
1938
|
-
"onDsChange"?: (event: DsBarNavActionCustomEvent<boolean>) => void;
|
|
1939
|
-
/**
|
|
1940
|
-
* Controlled toggle/selected state.
|
|
1941
|
-
* @default false
|
|
1942
|
-
*/
|
|
1943
|
-
"selected"?: boolean;
|
|
1944
|
-
}
|
|
1945
1937
|
interface DsBreadcrumb {
|
|
1946
1938
|
/**
|
|
1947
1939
|
* @default []
|
|
@@ -2034,6 +2026,57 @@ declare namespace LocalJSX {
|
|
|
2034
2026
|
*/
|
|
2035
2027
|
"size"?: ButtonGroupSize;
|
|
2036
2028
|
}
|
|
2029
|
+
interface DsButtonUnfilledIcon {
|
|
2030
|
+
/**
|
|
2031
|
+
* When active, render the active interaction fill. Shell chrome can disable this while keeping active icon colour.
|
|
2032
|
+
* @default true
|
|
2033
|
+
*/
|
|
2034
|
+
"activeFill"?: boolean;
|
|
2035
|
+
/**
|
|
2036
|
+
* @default 'action'
|
|
2037
|
+
*/
|
|
2038
|
+
"ariaLabel"?: string;
|
|
2039
|
+
/**
|
|
2040
|
+
* Parent surface context — adjusts hover/press/focus colours for coloured backgrounds.
|
|
2041
|
+
*/
|
|
2042
|
+
"background"?: ButtonUnfilledIconBackground | undefined;
|
|
2043
|
+
"controls"?: string | undefined;
|
|
2044
|
+
/**
|
|
2045
|
+
* Show a notification dot at the top-right of the icon zone.
|
|
2046
|
+
* @default false
|
|
2047
|
+
*/
|
|
2048
|
+
"dot"?: boolean;
|
|
2049
|
+
"expanded"?: boolean | undefined;
|
|
2050
|
+
/**
|
|
2051
|
+
* Show a 1px tertiary border without changing the interaction model.
|
|
2052
|
+
* @default false
|
|
2053
|
+
*/
|
|
2054
|
+
"hasBorder"?: boolean;
|
|
2055
|
+
"haspopup"?: string | undefined;
|
|
2056
|
+
/**
|
|
2057
|
+
* Icon name passed to <ds-icon>.
|
|
2058
|
+
* @default ''
|
|
2059
|
+
*/
|
|
2060
|
+
"icon"?: string;
|
|
2061
|
+
/**
|
|
2062
|
+
* Disables interaction.
|
|
2063
|
+
* @default false
|
|
2064
|
+
*/
|
|
2065
|
+
"inactive"?: boolean;
|
|
2066
|
+
/**
|
|
2067
|
+
* Active/selected visual state.
|
|
2068
|
+
* @default false
|
|
2069
|
+
*/
|
|
2070
|
+
"isActive"?: boolean;
|
|
2071
|
+
"onDsChange"?: (event: DsButtonUnfilledIconCustomEvent<boolean>) => void;
|
|
2072
|
+
"onDsClick"?: (event: DsButtonUnfilledIconCustomEvent<MouseEvent>) => void;
|
|
2073
|
+
"pressed"?: boolean | undefined;
|
|
2074
|
+
/**
|
|
2075
|
+
* Native button type.
|
|
2076
|
+
* @default 'button'
|
|
2077
|
+
*/
|
|
2078
|
+
"type"?: 'button' | 'submit' | 'reset';
|
|
2079
|
+
}
|
|
2037
2080
|
interface DsCard {
|
|
2038
2081
|
/**
|
|
2039
2082
|
* @default 'elevated'
|
|
@@ -2275,6 +2318,11 @@ declare namespace LocalJSX {
|
|
|
2275
2318
|
* ID of the external trigger element for positioning
|
|
2276
2319
|
*/
|
|
2277
2320
|
"anchorId"?: string | undefined;
|
|
2321
|
+
/**
|
|
2322
|
+
* Show a visible ring on the initially focused menu item. Use only when the opener was keyboard-driven.
|
|
2323
|
+
* @default false
|
|
2324
|
+
*/
|
|
2325
|
+
"initialFocusVisible"?: boolean;
|
|
2278
2326
|
/**
|
|
2279
2327
|
* @default []
|
|
2280
2328
|
*/
|
|
@@ -2886,14 +2934,6 @@ declare namespace LocalJSX {
|
|
|
2886
2934
|
"basePath": string;
|
|
2887
2935
|
"currentUrl": string;
|
|
2888
2936
|
}
|
|
2889
|
-
interface DsBarNavActionAttributes {
|
|
2890
|
-
"icon": string;
|
|
2891
|
-
"selected": boolean;
|
|
2892
|
-
"dot": boolean;
|
|
2893
|
-
"inactive": boolean;
|
|
2894
|
-
"ariaLabel": string;
|
|
2895
|
-
"background": BarNavActionBackground | undefined;
|
|
2896
|
-
}
|
|
2897
2937
|
interface DsBreadcrumbAttributes {
|
|
2898
2938
|
"separator": string;
|
|
2899
2939
|
}
|
|
@@ -2923,6 +2963,21 @@ declare namespace LocalJSX {
|
|
|
2923
2963
|
"size": ButtonGroupSize;
|
|
2924
2964
|
"rounded": boolean;
|
|
2925
2965
|
}
|
|
2966
|
+
interface DsButtonUnfilledIconAttributes {
|
|
2967
|
+
"icon": string;
|
|
2968
|
+
"isActive": boolean;
|
|
2969
|
+
"activeFill": boolean;
|
|
2970
|
+
"hasBorder": boolean;
|
|
2971
|
+
"dot": boolean;
|
|
2972
|
+
"inactive": boolean;
|
|
2973
|
+
"type": 'button' | 'submit' | 'reset';
|
|
2974
|
+
"background": ButtonUnfilledIconBackground | undefined;
|
|
2975
|
+
"ariaLabel": string;
|
|
2976
|
+
"controls": string | undefined;
|
|
2977
|
+
"expanded": boolean | undefined;
|
|
2978
|
+
"haspopup": string | undefined;
|
|
2979
|
+
"pressed": boolean | undefined;
|
|
2980
|
+
}
|
|
2926
2981
|
interface DsCardAttributes {
|
|
2927
2982
|
"elevation": CardElevation;
|
|
2928
2983
|
"radius": CardRadius;
|
|
@@ -3006,6 +3061,7 @@ declare namespace LocalJSX {
|
|
|
3006
3061
|
"menuWidth": string | undefined;
|
|
3007
3062
|
"minWidth": string | undefined;
|
|
3008
3063
|
"anchorId": string | undefined;
|
|
3064
|
+
"initialFocusVisible": boolean;
|
|
3009
3065
|
}
|
|
3010
3066
|
interface DsModalAttributes {
|
|
3011
3067
|
"open": boolean;
|
|
@@ -3168,10 +3224,10 @@ declare namespace LocalJSX {
|
|
|
3168
3224
|
"ds-badge": Omit<DsBadge, keyof DsBadgeAttributes> & { [K in keyof DsBadge & keyof DsBadgeAttributes]?: DsBadge[K] } & { [K in keyof DsBadge & keyof DsBadgeAttributes as `attr:${K}`]?: DsBadgeAttributes[K] } & { [K in keyof DsBadge & keyof DsBadgeAttributes as `prop:${K}`]?: DsBadge[K] };
|
|
3169
3225
|
"ds-banner": Omit<DsBanner, keyof DsBannerAttributes> & { [K in keyof DsBanner & keyof DsBannerAttributes]?: DsBanner[K] } & { [K in keyof DsBanner & keyof DsBannerAttributes as `attr:${K}`]?: DsBannerAttributes[K] } & { [K in keyof DsBanner & keyof DsBannerAttributes as `prop:${K}`]?: DsBanner[K] };
|
|
3170
3226
|
"ds-bar-nav": Omit<DsBarNav, keyof DsBarNavAttributes> & { [K in keyof DsBarNav & keyof DsBarNavAttributes]?: DsBarNav[K] } & { [K in keyof DsBarNav & keyof DsBarNavAttributes as `attr:${K}`]?: DsBarNavAttributes[K] } & { [K in keyof DsBarNav & keyof DsBarNavAttributes as `prop:${K}`]?: DsBarNav[K] };
|
|
3171
|
-
"ds-bar-nav-action": Omit<DsBarNavAction, keyof DsBarNavActionAttributes> & { [K in keyof DsBarNavAction & keyof DsBarNavActionAttributes]?: DsBarNavAction[K] } & { [K in keyof DsBarNavAction & keyof DsBarNavActionAttributes as `attr:${K}`]?: DsBarNavActionAttributes[K] } & { [K in keyof DsBarNavAction & keyof DsBarNavActionAttributes as `prop:${K}`]?: DsBarNavAction[K] };
|
|
3172
3227
|
"ds-breadcrumb": Omit<DsBreadcrumb, keyof DsBreadcrumbAttributes> & { [K in keyof DsBreadcrumb & keyof DsBreadcrumbAttributes]?: DsBreadcrumb[K] } & { [K in keyof DsBreadcrumb & keyof DsBreadcrumbAttributes as `attr:${K}`]?: DsBreadcrumbAttributes[K] } & { [K in keyof DsBreadcrumb & keyof DsBreadcrumbAttributes as `prop:${K}`]?: DsBreadcrumb[K] };
|
|
3173
3228
|
"ds-button": Omit<DsButton, keyof DsButtonAttributes> & { [K in keyof DsButton & keyof DsButtonAttributes]?: DsButton[K] } & { [K in keyof DsButton & keyof DsButtonAttributes as `attr:${K}`]?: DsButtonAttributes[K] } & { [K in keyof DsButton & keyof DsButtonAttributes as `prop:${K}`]?: DsButton[K] };
|
|
3174
3229
|
"ds-button-group": Omit<DsButtonGroup, keyof DsButtonGroupAttributes> & { [K in keyof DsButtonGroup & keyof DsButtonGroupAttributes]?: DsButtonGroup[K] } & { [K in keyof DsButtonGroup & keyof DsButtonGroupAttributes as `attr:${K}`]?: DsButtonGroupAttributes[K] } & { [K in keyof DsButtonGroup & keyof DsButtonGroupAttributes as `prop:${K}`]?: DsButtonGroup[K] };
|
|
3230
|
+
"ds-button-unfilled-icon": Omit<DsButtonUnfilledIcon, keyof DsButtonUnfilledIconAttributes> & { [K in keyof DsButtonUnfilledIcon & keyof DsButtonUnfilledIconAttributes]?: DsButtonUnfilledIcon[K] } & { [K in keyof DsButtonUnfilledIcon & keyof DsButtonUnfilledIconAttributes as `attr:${K}`]?: DsButtonUnfilledIconAttributes[K] } & { [K in keyof DsButtonUnfilledIcon & keyof DsButtonUnfilledIconAttributes as `prop:${K}`]?: DsButtonUnfilledIcon[K] };
|
|
3175
3231
|
"ds-card": Omit<DsCard, keyof DsCardAttributes> & { [K in keyof DsCard & keyof DsCardAttributes]?: DsCard[K] } & { [K in keyof DsCard & keyof DsCardAttributes as `attr:${K}`]?: DsCardAttributes[K] } & { [K in keyof DsCard & keyof DsCardAttributes as `prop:${K}`]?: DsCard[K] };
|
|
3176
3232
|
"ds-checkbox": Omit<DsCheckbox, keyof DsCheckboxAttributes> & { [K in keyof DsCheckbox & keyof DsCheckboxAttributes]?: DsCheckbox[K] } & { [K in keyof DsCheckbox & keyof DsCheckboxAttributes as `attr:${K}`]?: DsCheckboxAttributes[K] } & { [K in keyof DsCheckbox & keyof DsCheckboxAttributes as `prop:${K}`]?: DsCheckbox[K] } & OneOf<"label", DsCheckbox["label"], DsCheckboxAttributes["label"]>;
|
|
3177
3233
|
"ds-chip": Omit<DsChip, keyof DsChipAttributes> & { [K in keyof DsChip & keyof DsChipAttributes]?: DsChip[K] } & { [K in keyof DsChip & keyof DsChipAttributes as `attr:${K}`]?: DsChipAttributes[K] } & { [K in keyof DsChip & keyof DsChipAttributes as `prop:${K}`]?: DsChip[K] } & OneOf<"label", DsChip["label"], DsChipAttributes["label"]>;
|
|
@@ -3215,10 +3271,10 @@ declare module "@stencil/core" {
|
|
|
3215
3271
|
"ds-badge": LocalJSX.IntrinsicElements["ds-badge"] & JSXBase.HTMLAttributes<HTMLDsBadgeElement>;
|
|
3216
3272
|
"ds-banner": LocalJSX.IntrinsicElements["ds-banner"] & JSXBase.HTMLAttributes<HTMLDsBannerElement>;
|
|
3217
3273
|
"ds-bar-nav": LocalJSX.IntrinsicElements["ds-bar-nav"] & JSXBase.HTMLAttributes<HTMLDsBarNavElement>;
|
|
3218
|
-
"ds-bar-nav-action": LocalJSX.IntrinsicElements["ds-bar-nav-action"] & JSXBase.HTMLAttributes<HTMLDsBarNavActionElement>;
|
|
3219
3274
|
"ds-breadcrumb": LocalJSX.IntrinsicElements["ds-breadcrumb"] & JSXBase.HTMLAttributes<HTMLDsBreadcrumbElement>;
|
|
3220
3275
|
"ds-button": LocalJSX.IntrinsicElements["ds-button"] & JSXBase.HTMLAttributes<HTMLDsButtonElement>;
|
|
3221
3276
|
"ds-button-group": LocalJSX.IntrinsicElements["ds-button-group"] & JSXBase.HTMLAttributes<HTMLDsButtonGroupElement>;
|
|
3277
|
+
"ds-button-unfilled-icon": LocalJSX.IntrinsicElements["ds-button-unfilled-icon"] & JSXBase.HTMLAttributes<HTMLDsButtonUnfilledIconElement>;
|
|
3222
3278
|
"ds-card": LocalJSX.IntrinsicElements["ds-card"] & JSXBase.HTMLAttributes<HTMLDsCardElement>;
|
|
3223
3279
|
"ds-checkbox": LocalJSX.IntrinsicElements["ds-checkbox"] & JSXBase.HTMLAttributes<HTMLDsCheckboxElement>;
|
|
3224
3280
|
"ds-chip": LocalJSX.IntrinsicElements["ds-chip"] & JSXBase.HTMLAttributes<HTMLDsChipElement>;
|