@tap-payments/os-micro-frontend-shared 0.3.228-test.7 → 0.3.229

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/build/_chunks/chunk-6DPXZ3E3.js +2 -0
  2. package/build/_chunks/{chunk-TETJCQSC.js → chunk-FKG3SYY6.js} +1 -1
  3. package/build/_chunks/chunk-TJMTDLBH.js +1 -0
  4. package/build/_chunks/chunk-WE7NB24K.js +1 -0
  5. package/build/components/AppServices/index.js +1 -1
  6. package/build/components/AppServicesBar/index.js +1 -1
  7. package/build/components/BrandLogo/index.js +1 -1
  8. package/build/components/ChipStack/ChipStack.d.ts +67 -0
  9. package/build/components/ChipStack/components/AnimatedStack.d.ts +24 -0
  10. package/build/components/ChipStack/components/ChipStackFaceSlot.d.ts +11 -0
  11. package/build/components/ChipStack/components/OverlapChip.d.ts +9 -0
  12. package/build/components/ChipStack/components/StaticStack.d.ts +12 -0
  13. package/build/components/ChipStack/constants.d.ts +14 -0
  14. package/build/components/ChipStack/hooks/useAnimatedStack.d.ts +28 -0
  15. package/build/components/ChipStack/index.d.ts +10 -0
  16. package/build/components/ChipStack/index.js +1 -0
  17. package/build/components/ChipStack/style.d.ts +31 -0
  18. package/build/components/ChipStack/types.d.ts +127 -0
  19. package/build/components/ChipStack/util.d.ts +74 -0
  20. package/build/components/ColumnViews/index.js +1 -1
  21. package/build/components/DateFilter/index.js +1 -1
  22. package/build/components/ErrorToast/ErrorToast.d.ts +3 -3
  23. package/build/components/ErrorToast/constants.d.ts +6 -0
  24. package/build/components/ErrorToast/index.d.ts +3 -2
  25. package/build/components/ErrorToast/index.js +1 -1
  26. package/build/components/ErrorToast/style.d.ts +2 -5
  27. package/build/components/ErrorToast/type.d.ts +10 -2
  28. package/build/components/FileInputPreview/index.js +1 -1
  29. package/build/components/FilterDropdown/index.js +1 -1
  30. package/build/components/ListColumnFilter/index.js +1 -1
  31. package/build/components/ListHeader/index.js +1 -1
  32. package/build/components/MerchantLogo/index.js +1 -1
  33. package/build/components/PaymentSourceFilter/index.js +1 -1
  34. package/build/components/PhoneFilter/index.js +1 -1
  35. package/build/components/ReferenceTypeFilter/index.js +1 -1
  36. package/build/components/StatusFilter/index.js +1 -1
  37. package/build/components/StatusIcons/index.js +1 -1
  38. package/build/components/TableCells/index.js +1 -1
  39. package/build/components/TableReports/index.js +1 -1
  40. package/build/components/VerificationIcon/index.js +1 -1
  41. package/build/components/ViewColumnRadioFilter/index.js +1 -1
  42. package/build/components/VirtualTables/index.js +1 -1
  43. package/build/components/WindowSideBar/index.js +1 -1
  44. package/build/components/index.d.ts +3 -2
  45. package/build/components/index.js +1 -1
  46. package/build/index.js +1 -1
  47. package/package.json +2 -2
  48. package/build/_chunks/chunk-HKQY74IJ.js +0 -1
  49. package/build/_chunks/chunk-LZDMCI4Q.js +0 -2
  50. package/build/_chunks/chunk-V2Z6RD2T.js +0 -1
  51. package/build/components/AvatarStack/AnimatedStack.d.ts +0 -9
  52. package/build/components/AvatarStack/AvatarStack.d.ts +0 -5
  53. package/build/components/AvatarStack/AvatarStackItem.d.ts +0 -4
  54. package/build/components/AvatarStack/StaticStack.d.ts +0 -4
  55. package/build/components/AvatarStack/constants.d.ts +0 -29
  56. package/build/components/AvatarStack/hooks/useAnimatedStack.d.ts +0 -25
  57. package/build/components/AvatarStack/index.d.ts +0 -4
  58. package/build/components/AvatarStack/index.js +0 -1
  59. package/build/components/AvatarStack/style.d.ts +0 -303
  60. package/build/components/AvatarStack/type.d.ts +0 -122
  61. package/build/components/AvatarStack/utils.d.ts +0 -55
@@ -1 +0,0 @@
1
- import {t,p}from'./chunk-TIO3V7XA.js';import {lc}from'./chunk-4XXNGLS6.js';import {forwardRef,memo,useMemo,Fragment,useState,useRef,useCallback,useEffect,useLayoutEffect}from'react';import At from'@mui/material/Box';import {styled}from'@mui/material/styles';import {motion}from'framer-motion';import {jsx,jsxs}from'react/jsx-runtime';var N="os-shared-AvatarStack",l={root:`${N}-root`,track:`${N}-track`,slot:`${N}-slot`,overlapSlot:`${N}-overlapSlot`,overlapItem:`${N}-overlapItem`,overflow:`${N}-overflow`},$="chip-stack-overlap-slot",y=24,W=.22,Ht=["static","fanout-right","fanout-left","fanout-center"],z="static";function tt({items:t,getItemKey:e,renderItem:r}){return t?.length&&e&&r?{items:t,getItemKey:e,renderItem:r}:null}function et(t){return t==="fanout-left"?"left":t==="fanout-center"?"center":"right"}function rt(t,e){return e===void 0||e<1||t.length<e?{visibleItems:t,hiddenItems:[]}:{visibleItems:t.slice(0,e-1),hiddenItems:t.slice(e-1)}}function at(t,e){return rt(t,e).hiddenItems.length>0}function D({source:{items:t,getItemKey:e,renderItem:r},maxItems:a,slotSize:i,renderOverflow:o}){let{visibleItems:n,hiddenItems:c}=rt(t,a),d={slotSize:i},m=n.map((S,p)=>({key:e(S,p),render:()=>r(S,p,d)}));return c.length>0&&m.push({key:`avatar-stack-overflow-${c.length}-${n.length}`,render:()=>o({items:t,overflowItems:c,size:i})}),m}var Kt=3,Q=60;function ot(t){let e=t.size??y,r=a=>Math.round(e*a/y);return {size:e,stackStep:t.stackStep??Math.round(e/2),gap:t.gap??Math.max(1,r(Kt)),minTrackWidth:t.minTrackWidth??Math.max(Q,r(Q))}}function nt(t,e){return t<=0||e==="right"?0:e==="left"?t-1:Math.floor((t-1)/2)}function it(t,e,r){return t<=0?0:(t-1)*e+r}function lt({slotCount:t,anchorIndex:e,slotWidths:r,gap:a,stackStep:i}){if(t===0)return [];let o=new Array(t);o[e]=e*i;for(let n=e-1;n>=0;n-=1)o[n]=o[n+1]-r[n]-a;for(let n=e+1;n<t;n+=1)o[n]=o[n-1]+r[n-1]+a;return o}function st(t,e,r,a){return Array.from({length:t},(i,o)=>t<=1||!e?0:r[o]-o*a)}function ct(t,e,r){if(t.length===0)return 0;let a=Math.min(...t),i=Math.max(...t.map((o,n)=>o+e[n]));return Math.max(r,i-a)}function mt(t,e,r){return Array.from({length:t},(a,i)=>e.current[i]?.offsetWidth??r)}function ut(t,e){return t.length===e.length&&t.every((r,a)=>r===e[a])}var Xt=120;function St(t,e){return Array.from({length:t},()=>e)}function U(t){t.current&&clearTimeout(t.current);}function pt({slotCount:t,anchorIndex:e,size:r,stackStep:a,gap:i,isFanOutEnabled:o,compact:n}){let[c,d]=useState(false),m=useRef(null),S=useCallback(()=>{o&&(U(m),d(true));},[o]),p=useCallback(()=>{o&&(U(m),m.current=setTimeout(()=>d(false),Xt));},[o]);useEffect(()=>()=>U(m),[]),useEffect(()=>{o||d(false);},[o]);let u=useRef([]),s=useRef(null),[A,_]=useState(()=>St(t,r)),f=useCallback(()=>{let v=mt(t,u,r);_(g=>ut(g,v)?g:v);},[t,r]);useLayoutEffect(()=>{_(St(t,r));},[t,r]),useLayoutEffect(()=>{f();},[t,r,f]),useEffect(()=>{let v=()=>{s.current&&cancelAnimationFrame(s.current),s.current=requestAnimationFrame(f);};return v(),window.addEventListener("resize",v),()=>{window.removeEventListener("resize",v),s.current&&cancelAnimationFrame(s.current);}},[f]);let b=o&&c,R=useMemo(()=>Array.from({length:t},(v,g)=>A[g]??r),[t,A,r]),w=useMemo(()=>lt({slotCount:t,anchorIndex:e,slotWidths:R,gap:i,stackStep:a}),[t,e,R,i,a]),M=useMemo(()=>st(t,b,w,a),[t,b,w,a]),k=it(t,a,r),C=useMemo(()=>ct(w,R,k),[w,R,k]),L=b?C:n?r:k,V=useMemo(()=>Array.from({length:t},(v,g)=>!n||c||g===e?1:0),[t,n,c,e]);return {slotRefs:u,handleMouseEnter:S,handleMouseLeave:p,isExpanded:b,collapsedWidth:k,trackWidth:L,translateX:M,slotOpacity:V}}var x=t=>typeof t=="string"&&!t.startsWith("$")&&t!=="sx"&&t!=="theme"&&t!=="ownerState"&&t!=="as";function j(){return `var(--avatar-stack-slot-size, ${y}px)`}function jt(t){return `${Math.max(8,8.5*t/y)}px`}function vt(t){let{base:e,grey:r}=t.v2.palette,a=e.white;return {display:"flex",alignItems:"center",justifyContent:"center",width:j(),height:j(),borderRadius:"50%",border:`1px solid ${r[100]}`,background:a,backgroundColor:a,flexShrink:0,"&.MuiAvatar-colorDefault":{background:a,backgroundColor:a,color:"inherit"}}}var kt=styled(At,{shouldForwardProp:x})(({theme:t,$slotSize:e})=>({"--avatar-stack-slot-size":`${e}px`,display:"flex",alignItems:"center",paddingRight:t.v2.spacing(8),[`& .${l.overlapSlot}`]:{marginRight:`-${t.v2.spacing(8)}`,position:"relative",zIndex:1},[`& .${l.overlapSlot}:hover`]:{zIndex:2}})),ht=styled(t,{shouldForwardProp:x})(({theme:t})=>({...vt(t),overflow:"hidden",lineHeight:0,boxSizing:"border-box",padding:0,fontSize:"inherit","& > *":{width:"100%",height:"100%",minWidth:0,minHeight:0},"& img":{display:"block",width:"100%",height:"100%",objectFit:"contain"}})),yt=styled(t,{shouldForwardProp:x})(({theme:t})=>({...vt(t),fontSize:`max(8px, calc(${j()} * 8.5 / ${y}))`,fontWeight:t.v2.typography.fontWeightMedium,color:"rgba(0, 0, 0, 0.38)","&.MuiAvatar-colorDefault":{background:t.v2.palette.base.white,backgroundColor:t.v2.palette.base.white,color:"rgba(0, 0, 0, 0.38)"}})),gt=styled(At,{shouldForwardProp:x})(({theme:t,$isFullWidth:e})=>({display:"flex",justifyContent:"flex-start",gap:t.v2.spacing(8),overflow:"visible",...e?{width:"100%"}:{}})),bt=styled("div",{shouldForwardProp:x})(({$width:t,$minWidth:e,$height:r,$zIndex:a})=>({position:"relative",overflow:"visible",width:t,minWidth:e,height:r,transition:`width ${W}s ease-out`,...a!==void 0?{zIndex:a}:{}})),Tt=styled(motion.div,{shouldForwardProp:x})(({$index:t,$left:e,$size:r,$isHidden:a})=>({position:"absolute",top:0,left:e,zIndex:t,width:r,height:r,pointerEvents:a?"none":"auto"})),xt=styled(t,{shouldForwardProp:x})(({theme:t,$size:e})=>({width:e,height:e,borderRadius:"50%",border:`1px solid ${t.v2.palette.grey[100]}`,display:"flex",alignItems:"center",justifyContent:"center",fontSize:jt(e),fontWeight:t.v2.typography.fontWeightBold,background:"#F5F5F5",backgroundColor:"#F5F5F5",flexShrink:0,"&.MuiAvatar-colorDefault":{background:"#F5F5F5",backgroundColor:"#F5F5F5",color:"inherit"}}));var Zt=1e3,qt={duration:W,ease:"easeOut"};function wt(t){return t==null?[]:Array.isArray(t)?t:[t]}function Bt({overflowItems:t,size:e}){return jsxs(xt,{className:l.overflow,$size:e,children:["+",t.length]})}function q({source:t,maxItems:e,renderOverflow:r,fanOutDirection:a,compact:i,slotProps:o,rootRef:n,id:c,"data-testid":d,className:m,sx:S}){let{zIndex:p=Zt,size:u,stackStep:s,gap:A,minTrackWidth:_}=o?.layout??{},{size:f,stackStep:b,gap:R,minTrackWidth:w}=useMemo(()=>ot({size:u,stackStep:s,gap:A,minTrackWidth:_}),[u,s,A,_]),M=i||!at(t.items,e),k=useMemo(()=>D({source:t,maxItems:e,slotSize:f,renderOverflow:r??Bt}),[t,e,f,r]),C=nt(k.length,a),{slotRefs:G,handleMouseEnter:L,handleMouseLeave:V,isExpanded:v,collapsedWidth:g,trackWidth:Mt,translateX:Ft,slotOpacity:Y}=pt({slotCount:k.length,anchorIndex:C,size:f,stackStep:b,gap:R,isFanOutEnabled:M,compact:i});if(k.length===0)return null;let{className:Ot,sx:$t,...Wt}=o?.shell??{},{className:Dt,...Ct}=o?.track??{};return jsx(gt,{ref:n,...Wt,className:lc(l.root,m,Ot),sx:[...wt(S),...wt($t)],$isFullWidth:M,children:jsx(bt,{id:c,"data-testid":d,...Ct,className:lc(l.track,Dt),onMouseEnter:L,onMouseLeave:V,$width:Mt,$minWidth:i?f:Math.max(w,g),$height:f,$zIndex:v?p:void 0,children:k.map(({key:Lt,render:Vt},I)=>jsx(Tt,{ref:zt=>{G.current[I]=zt;},className:l.slot,initial:false,animate:{x:Ft[I]??0,opacity:Y[I]??1},transition:qt,$index:I,$left:I*b,$size:f,$isHidden:Y[I]===0,children:Vt()},Lt))})})}var It=lc(l.overlapSlot,$),_t=forwardRef(({title:t,id:e,className:r,...a},i)=>{let o=t!=null&&t!=="",n=jsx(ht,{ref:i,id:e,"data-testid":e??"AvatarStackItem",className:lc(l.overlapItem,!o&&It,r),...a});return o?jsx(p,{title:t,wrapperProps:{className:It},children:n}):n});_t.displayName="AvatarStackItem";var B=memo(_t);function te(t){return jsx(p,{title:`${t} more`,wrapperProps:{className:lc(l.overlapSlot,$)},children:jsx(yt,{className:l.overflow,children:jsxs("span",{children:["+",t]})})})}function J({source:t,maxItems:e,renderOverflow:r,slotProps:a,rootRef:i,id:o,"data-testid":n,className:c,sx:d}){let m=a?.layout?.size??y,{renderItem:S}=t,p=D({source:{...t,renderItem:(u,s,A)=>jsx(B,{children:S(u,s,A)})},maxItems:e,slotSize:m,renderOverflow:u=>r?.(u)??te(u.overflowItems.length)});return jsx(kt,{ref:i,id:o,"data-testid":n,className:lc(l.root,c),sx:d,$slotSize:m,children:p.map(({key:u,render:s})=>jsx(Fragment,{children:s()},u))})}function ne({variant:t=z,items:e,getItemKey:r,renderItem:a,maxItems:i,renderOverflow:o,compact:n=false,id:c,"data-testid":d,slotProps:m,sx:S,className:p},u){let s=useMemo(()=>tt({items:e,getItemKey:r,renderItem:a}),[e,r,a]);if(!s)return null;let A={source:s,maxItems:i,renderOverflow:o,slotProps:m,rootRef:u,id:c,"data-testid":d??c??"AvatarStack",className:p,sx:S};return t==="static"?jsx(J,{...A}):jsx(q,{...A,fanOutDirection:et(t),compact:n})}var Et=forwardRef(ne);Et.displayName="AvatarStack";var ie=memo(Et),le=ie;export{l as a,Ht as b,z as c,B as d,le as e};
@@ -1,9 +0,0 @@
1
- /// <reference types="react" />
2
- import type { AvatarStackAnimatedStackProps } from './type';
3
- /**
4
- * `variant="fanout-*"` — items overlap while idle and fan out around the anchor item on hover.
5
- *
6
- * Restyling: `className` / `sx` / `slotProps.shell` land on the shell; `id`, `data-testid`,
7
- * hover handlers, and `slotProps.track` land on the track.
8
- */
9
- export default function AnimatedStack<T>({ source, maxItems, renderOverflow, fanOutDirection, compact, slotProps, rootRef, id, 'data-testid': dataTestId, className, sx, }: Readonly<AvatarStackAnimatedStackProps<T>>): import("react").JSX.Element | null;
@@ -1,5 +0,0 @@
1
- import type { ReactElement, RefAttributes } from 'react';
2
- import type { AvatarStackProps } from './type';
3
- /** `forwardRef` + `memo` erase generics — re-declare the call signature so `T` is inferred from `items`. */
4
- declare const AvatarStack: <T = unknown>(props: Readonly<AvatarStackProps<T>> & RefAttributes<HTMLDivElement>) => ReactElement | null;
5
- export default AvatarStack;
@@ -1,4 +0,0 @@
1
- /// <reference types="react" />
2
- import type { AvatarStackItemProps } from './type';
3
- declare const _default: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<Omit<AvatarStackItemProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>>;
4
- export default _default;
@@ -1,4 +0,0 @@
1
- /// <reference types="react" />
2
- import type { AvatarStackStaticStackProps } from './type';
3
- /** `variant="static"` — an overlapping row with no animation. */
4
- export default function StaticStack<T>({ source, maxItems, renderOverflow, slotProps, rootRef, id, 'data-testid': dataTestId, className, sx, }: Readonly<AvatarStackStaticStackProps<T>>): import("react").JSX.Element;
@@ -1,29 +0,0 @@
1
- import type { AvatarStackVariant } from './type';
2
- export declare const avatarStackClassNamePrefix: "os-shared-AvatarStack";
3
- export declare const avatarStackClassNames: {
4
- /** Static row, or the fanout shell. Receives consumer `className` / `sx`. */
5
- readonly root: "os-shared-AvatarStack-root";
6
- /** Fanout only — positioned track that owns hover. */
7
- readonly track: "os-shared-AvatarStack-track";
8
- /** Fanout only — one absolutely positioned, animated slot per item. */
9
- readonly slot: "os-shared-AvatarStack-slot";
10
- /** Static only — one overlapping slot per item (the item, or its tooltip wrapper). */
11
- readonly overlapSlot: "os-shared-AvatarStack-overlapSlot";
12
- /** `AvatarStackItem` circle. */
13
- readonly overlapItem: "os-shared-AvatarStack-overlapItem";
14
- /** Default `+N` item (both variants). */
15
- readonly overflow: "os-shared-AvatarStack-overflow";
16
- };
17
- /**
18
- * Pre-`os-shared` ChipStack-era slot class, still set next to `avatarStackClassNames.overlapSlot`.
19
- * MFEs target it (e.g. `& .chip-stack-overlap-slot:last-child`) — do not rename or remove.
20
- */
21
- export declare const avatarStackLegacyOverlapSlotClassName = "chip-stack-overlap-slot";
22
- /** Default item diameter (px). Every other dimension scales from it. */
23
- export declare const AVATAR_STACK_SIZE_PX = 24;
24
- /** Fan-out animation duration (s) — per-slot translate and track width. */
25
- export declare const AVATAR_STACK_ANIMATED_DURATION_S = 0.22;
26
- /** All variant values — useful for building selects/controls. */
27
- export declare const AVATAR_STACK_VARIANTS: readonly ["static", "fanout-right", "fanout-left", "fanout-center"];
28
- /** Variant used when `variant` is omitted. */
29
- export declare const DEFAULT_AVATAR_STACK_VARIANT: AvatarStackVariant;
@@ -1,25 +0,0 @@
1
- import type { MutableRefObject } from 'react';
2
- type UseAnimatedStackArgs = {
3
- slotCount: number;
4
- /** Slot that stays in place while the others fan out around it. */
5
- anchorIndex: number;
6
- size: number;
7
- stackStep: number;
8
- gap: number;
9
- /** Whether hovering expands the row. */
10
- isFanOutEnabled: boolean;
11
- /** Hide non-anchor items while idle. */
12
- compact: boolean;
13
- };
14
- /** Hover state, slot measurement, and fan-out geometry for `AnimatedStack`. */
15
- export declare function useAnimatedStack({ slotCount, anchorIndex, size, stackStep, gap, isFanOutEnabled, compact }: UseAnimatedStackArgs): {
16
- slotRefs: MutableRefObject<(HTMLDivElement | null)[]>;
17
- handleMouseEnter: () => void;
18
- handleMouseLeave: () => void;
19
- isExpanded: boolean;
20
- collapsedWidth: number;
21
- trackWidth: number;
22
- translateX: number[];
23
- slotOpacity: (0 | 1)[];
24
- };
25
- export {};
@@ -1,4 +0,0 @@
1
- export { default } from './AvatarStack';
2
- export { default as AvatarStackItem } from './AvatarStackItem';
3
- export { AVATAR_STACK_VARIANTS, avatarStackClassNames, DEFAULT_AVATAR_STACK_VARIANT } from './constants';
4
- export type { AvatarStackItemRenderContext, AvatarStackOverflowRenderArgs } from './type';
@@ -1 +0,0 @@
1
- export{b as AVATAR_STACK_VARIANTS,d as AvatarStackItem,c as DEFAULT_AVATAR_STACK_VARIANT,a as avatarStackClassNames,e as default}from'../../_chunks/chunk-V2Z6RD2T.js';import'../../_chunks/chunk-TIO3V7XA.js';import'../../_chunks/chunk-4XXNGLS6.js';import'../../_chunks/chunk-V2RLDP5A.js';import'../../_chunks/chunk-ZDBICST5.js';
@@ -1,303 +0,0 @@
1
- /// <reference types="react" />
2
- import type { Theme } from '@mui/material/styles';
3
- /** Static root — an overlapping flex row. */
4
- export declare const AvatarStackRowStyled: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
5
- ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
6
- }, keyof import("@mui/system").BoxOwnProps<Theme>> & import("@mui/system").MUIStyledCommonProps<Theme> & {
7
- $slotSize: number;
8
- }, {}, {}>;
9
- /** `AvatarStackItem` circle — stretches its child to fill the slot. */
10
- export declare const AvatarStackItemStyled: import("@emotion/styled").StyledComponent<Omit<Omit<import("../primitives").AvatarProps, "ref"> & import("react").RefAttributes<HTMLDivElement>, "ref"> & {
11
- ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
12
- } & import("@mui/system").MUIStyledCommonProps<Theme>, {}, {}>;
13
- /** Default static `+N` item. */
14
- export declare const AvatarStackStaticOverflowStyled: import("@emotion/styled").StyledComponent<Omit<Omit<import("../primitives").AvatarProps, "ref"> & import("react").RefAttributes<HTMLDivElement>, "ref"> & {
15
- ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
16
- } & import("@mui/system").MUIStyledCommonProps<Theme>, {}, {}>;
17
- /** Fanout root — flex shell around the track. */
18
- export declare const AvatarStackShellStyled: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
19
- ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
20
- }, keyof import("@mui/system").BoxOwnProps<Theme>> & import("@mui/system").MUIStyledCommonProps<Theme> & {
21
- $isFullWidth: boolean;
22
- }, {}, {}>;
23
- /** Positioned track — width animates between collapsed and fanned. */
24
- export declare const AvatarStackTrackStyled: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<Theme> & {
25
- $width: number;
26
- $minWidth: number;
27
- $height: number;
28
- $zIndex?: number | undefined;
29
- }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
30
- /** One item slot at its collapsed position; framer-motion animates `x` / `opacity` on top. */
31
- export declare const AvatarStackSlotStyled: import("@emotion/styled").StyledComponent<{
32
- color?: string | undefined;
33
- content?: string | undefined;
34
- translate?: "yes" | "no" | undefined;
35
- id?: string | undefined;
36
- defaultChecked?: boolean | undefined;
37
- defaultValue?: string | number | readonly string[] | undefined;
38
- suppressContentEditableWarning?: boolean | undefined;
39
- suppressHydrationWarning?: boolean | undefined;
40
- accessKey?: string | undefined;
41
- autoCapitalize?: (string & {}) | "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined;
42
- autoFocus?: boolean | undefined;
43
- className?: string | undefined;
44
- contentEditable?: (boolean | "false" | "true") | "inherit" | "plaintext-only" | undefined;
45
- contextMenu?: string | undefined;
46
- dir?: string | undefined;
47
- draggable?: (boolean | "false" | "true") | undefined;
48
- enterKeyHint?: "search" | "done" | "enter" | "go" | "next" | "previous" | "send" | undefined;
49
- hidden?: boolean | undefined;
50
- lang?: string | undefined;
51
- nonce?: string | undefined;
52
- slot?: string | undefined;
53
- spellCheck?: (boolean | "false" | "true") | undefined;
54
- tabIndex?: number | undefined;
55
- title?: string | undefined;
56
- radioGroup?: string | undefined;
57
- role?: import("react").AriaRole | undefined;
58
- about?: string | undefined;
59
- datatype?: string | undefined;
60
- inlist?: any;
61
- prefix?: string | undefined;
62
- property?: string | undefined;
63
- rel?: string | undefined;
64
- resource?: string | undefined;
65
- rev?: string | undefined;
66
- typeof?: string | undefined;
67
- vocab?: string | undefined;
68
- autoCorrect?: string | undefined;
69
- autoSave?: string | undefined;
70
- itemProp?: string | undefined;
71
- itemScope?: boolean | undefined;
72
- itemType?: string | undefined;
73
- itemID?: string | undefined;
74
- itemRef?: string | undefined;
75
- results?: number | undefined;
76
- security?: string | undefined;
77
- unselectable?: "off" | "on" | undefined;
78
- inputMode?: "text" | "url" | "email" | "search" | "none" | "tel" | "numeric" | "decimal" | undefined;
79
- is?: string | undefined;
80
- exportparts?: string | undefined;
81
- part?: string | undefined;
82
- "aria-activedescendant"?: string | undefined;
83
- "aria-atomic"?: (boolean | "false" | "true") | undefined;
84
- "aria-autocomplete"?: "list" | "none" | "inline" | "both" | undefined;
85
- "aria-braillelabel"?: string | undefined;
86
- "aria-brailleroledescription"?: string | undefined;
87
- "aria-busy"?: (boolean | "false" | "true") | undefined;
88
- "aria-checked"?: boolean | "false" | "true" | "mixed" | undefined;
89
- "aria-colcount"?: number | undefined;
90
- "aria-colindex"?: number | undefined;
91
- "aria-colindextext"?: string | undefined;
92
- "aria-colspan"?: number | undefined;
93
- "aria-controls"?: string | undefined;
94
- "aria-current"?: boolean | "page" | "false" | "true" | "date" | "time" | "step" | "location" | undefined;
95
- "aria-describedby"?: string | undefined;
96
- "aria-description"?: string | undefined;
97
- "aria-details"?: string | undefined;
98
- "aria-disabled"?: (boolean | "false" | "true") | undefined;
99
- "aria-dropeffect"?: "link" | "copy" | "none" | "move" | "execute" | "popup" | undefined;
100
- "aria-errormessage"?: string | undefined;
101
- "aria-expanded"?: (boolean | "false" | "true") | undefined;
102
- "aria-flowto"?: string | undefined;
103
- "aria-grabbed"?: (boolean | "false" | "true") | undefined;
104
- "aria-haspopup"?: boolean | "grid" | "false" | "true" | "dialog" | "listbox" | "menu" | "tree" | undefined;
105
- "aria-hidden"?: (boolean | "false" | "true") | undefined;
106
- "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined;
107
- "aria-keyshortcuts"?: string | undefined;
108
- "aria-label"?: string | undefined;
109
- "aria-labelledby"?: string | undefined;
110
- "aria-level"?: number | undefined;
111
- "aria-live"?: "off" | "assertive" | "polite" | undefined;
112
- "aria-modal"?: (boolean | "false" | "true") | undefined;
113
- "aria-multiline"?: (boolean | "false" | "true") | undefined;
114
- "aria-multiselectable"?: (boolean | "false" | "true") | undefined;
115
- "aria-orientation"?: "horizontal" | "vertical" | undefined;
116
- "aria-owns"?: string | undefined;
117
- "aria-placeholder"?: string | undefined;
118
- "aria-posinset"?: number | undefined;
119
- "aria-pressed"?: boolean | "false" | "true" | "mixed" | undefined;
120
- "aria-readonly"?: (boolean | "false" | "true") | undefined;
121
- "aria-relevant"?: "all" | "text" | "additions" | "additions removals" | "additions text" | "removals" | "removals additions" | "removals text" | "text additions" | "text removals" | undefined;
122
- "aria-required"?: (boolean | "false" | "true") | undefined;
123
- "aria-roledescription"?: string | undefined;
124
- "aria-rowcount"?: number | undefined;
125
- "aria-rowindex"?: number | undefined;
126
- "aria-rowindextext"?: string | undefined;
127
- "aria-rowspan"?: number | undefined;
128
- "aria-selected"?: (boolean | "false" | "true") | undefined;
129
- "aria-setsize"?: number | undefined;
130
- "aria-sort"?: "ascending" | "descending" | "none" | "other" | undefined;
131
- "aria-valuemax"?: number | undefined;
132
- "aria-valuemin"?: number | undefined;
133
- "aria-valuenow"?: number | undefined;
134
- "aria-valuetext"?: string | undefined;
135
- dangerouslySetInnerHTML?: {
136
- __html: string | TrustedHTML;
137
- } | undefined;
138
- onCopy?: import("react").ClipboardEventHandler<HTMLDivElement> | undefined;
139
- onCopyCapture?: import("react").ClipboardEventHandler<HTMLDivElement> | undefined;
140
- onCut?: import("react").ClipboardEventHandler<HTMLDivElement> | undefined;
141
- onCutCapture?: import("react").ClipboardEventHandler<HTMLDivElement> | undefined;
142
- onPaste?: import("react").ClipboardEventHandler<HTMLDivElement> | undefined;
143
- onPasteCapture?: import("react").ClipboardEventHandler<HTMLDivElement> | undefined;
144
- onCompositionEnd?: import("react").CompositionEventHandler<HTMLDivElement> | undefined;
145
- onCompositionEndCapture?: import("react").CompositionEventHandler<HTMLDivElement> | undefined;
146
- onCompositionStart?: import("react").CompositionEventHandler<HTMLDivElement> | undefined;
147
- onCompositionStartCapture?: import("react").CompositionEventHandler<HTMLDivElement> | undefined;
148
- onCompositionUpdate?: import("react").CompositionEventHandler<HTMLDivElement> | undefined;
149
- onCompositionUpdateCapture?: import("react").CompositionEventHandler<HTMLDivElement> | undefined;
150
- onFocus?: import("react").FocusEventHandler<HTMLDivElement> | undefined;
151
- onFocusCapture?: import("react").FocusEventHandler<HTMLDivElement> | undefined;
152
- onBlur?: import("react").FocusEventHandler<HTMLDivElement> | undefined;
153
- onBlurCapture?: import("react").FocusEventHandler<HTMLDivElement> | undefined;
154
- onChange?: import("react").FormEventHandler<HTMLDivElement> | undefined;
155
- onChangeCapture?: import("react").FormEventHandler<HTMLDivElement> | undefined;
156
- onBeforeInput?: import("react").InputEventHandler<HTMLDivElement> | undefined;
157
- onBeforeInputCapture?: import("react").FormEventHandler<HTMLDivElement> | undefined;
158
- onInput?: import("react").FormEventHandler<HTMLDivElement> | undefined;
159
- onInputCapture?: import("react").FormEventHandler<HTMLDivElement> | undefined;
160
- onReset?: import("react").FormEventHandler<HTMLDivElement> | undefined;
161
- onResetCapture?: import("react").FormEventHandler<HTMLDivElement> | undefined;
162
- onSubmit?: import("react").FormEventHandler<HTMLDivElement> | undefined;
163
- onSubmitCapture?: import("react").FormEventHandler<HTMLDivElement> | undefined;
164
- onInvalid?: import("react").FormEventHandler<HTMLDivElement> | undefined;
165
- onInvalidCapture?: import("react").FormEventHandler<HTMLDivElement> | undefined;
166
- onLoad?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
167
- onLoadCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
168
- onError?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
169
- onErrorCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
170
- onKeyDown?: import("react").KeyboardEventHandler<HTMLDivElement> | undefined;
171
- onKeyDownCapture?: import("react").KeyboardEventHandler<HTMLDivElement> | undefined;
172
- onKeyPress?: import("react").KeyboardEventHandler<HTMLDivElement> | undefined;
173
- onKeyPressCapture?: import("react").KeyboardEventHandler<HTMLDivElement> | undefined;
174
- onKeyUp?: import("react").KeyboardEventHandler<HTMLDivElement> | undefined;
175
- onKeyUpCapture?: import("react").KeyboardEventHandler<HTMLDivElement> | undefined;
176
- onAbort?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
177
- onAbortCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
178
- onCanPlay?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
179
- onCanPlayCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
180
- onCanPlayThrough?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
181
- onCanPlayThroughCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
182
- onDurationChange?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
183
- onDurationChangeCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
184
- onEmptied?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
185
- onEmptiedCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
186
- onEncrypted?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
187
- onEncryptedCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
188
- onEnded?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
189
- onEndedCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
190
- onLoadedData?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
191
- onLoadedDataCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
192
- onLoadedMetadata?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
193
- onLoadedMetadataCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
194
- onLoadStart?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
195
- onLoadStartCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
196
- onPause?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
197
- onPauseCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
198
- onPlay?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
199
- onPlayCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
200
- onPlaying?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
201
- onPlayingCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
202
- onProgress?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
203
- onProgressCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
204
- onRateChange?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
205
- onRateChangeCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
206
- onSeeked?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
207
- onSeekedCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
208
- onSeeking?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
209
- onSeekingCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
210
- onStalled?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
211
- onStalledCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
212
- onSuspend?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
213
- onSuspendCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
214
- onTimeUpdate?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
215
- onTimeUpdateCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
216
- onVolumeChange?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
217
- onVolumeChangeCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
218
- onWaiting?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
219
- onWaitingCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
220
- onAuxClick?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
221
- onAuxClickCapture?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
222
- onClick?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
223
- onClickCapture?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
224
- onContextMenu?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
225
- onContextMenuCapture?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
226
- onDoubleClick?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
227
- onDoubleClickCapture?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
228
- onDragCapture?: import("react").DragEventHandler<HTMLDivElement> | undefined;
229
- onDragEndCapture?: import("react").DragEventHandler<HTMLDivElement> | undefined;
230
- onDragEnter?: import("react").DragEventHandler<HTMLDivElement> | undefined;
231
- onDragEnterCapture?: import("react").DragEventHandler<HTMLDivElement> | undefined;
232
- onDragExit?: import("react").DragEventHandler<HTMLDivElement> | undefined;
233
- onDragExitCapture?: import("react").DragEventHandler<HTMLDivElement> | undefined;
234
- onDragLeave?: import("react").DragEventHandler<HTMLDivElement> | undefined;
235
- onDragLeaveCapture?: import("react").DragEventHandler<HTMLDivElement> | undefined;
236
- onDragOver?: import("react").DragEventHandler<HTMLDivElement> | undefined;
237
- onDragOverCapture?: import("react").DragEventHandler<HTMLDivElement> | undefined;
238
- onDragStartCapture?: import("react").DragEventHandler<HTMLDivElement> | undefined;
239
- onDrop?: import("react").DragEventHandler<HTMLDivElement> | undefined;
240
- onDropCapture?: import("react").DragEventHandler<HTMLDivElement> | undefined;
241
- onMouseDown?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
242
- onMouseDownCapture?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
243
- onMouseEnter?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
244
- onMouseLeave?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
245
- onMouseMove?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
246
- onMouseMoveCapture?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
247
- onMouseOut?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
248
- onMouseOutCapture?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
249
- onMouseOver?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
250
- onMouseOverCapture?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
251
- onMouseUp?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
252
- onMouseUpCapture?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
253
- onSelect?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
254
- onSelectCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
255
- onTouchCancel?: import("react").TouchEventHandler<HTMLDivElement> | undefined;
256
- onTouchCancelCapture?: import("react").TouchEventHandler<HTMLDivElement> | undefined;
257
- onTouchEnd?: import("react").TouchEventHandler<HTMLDivElement> | undefined;
258
- onTouchEndCapture?: import("react").TouchEventHandler<HTMLDivElement> | undefined;
259
- onTouchMove?: import("react").TouchEventHandler<HTMLDivElement> | undefined;
260
- onTouchMoveCapture?: import("react").TouchEventHandler<HTMLDivElement> | undefined;
261
- onTouchStart?: import("react").TouchEventHandler<HTMLDivElement> | undefined;
262
- onTouchStartCapture?: import("react").TouchEventHandler<HTMLDivElement> | undefined;
263
- onPointerDown?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
264
- onPointerDownCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
265
- onPointerMove?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
266
- onPointerMoveCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
267
- onPointerUp?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
268
- onPointerUpCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
269
- onPointerCancel?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
270
- onPointerCancelCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
271
- onPointerEnter?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
272
- onPointerLeave?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
273
- onPointerOver?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
274
- onPointerOverCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
275
- onPointerOut?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
276
- onPointerOutCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
277
- onGotPointerCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
278
- onGotPointerCaptureCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
279
- onLostPointerCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
280
- onLostPointerCaptureCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
281
- onScroll?: import("react").UIEventHandler<HTMLDivElement> | undefined;
282
- onScrollCapture?: import("react").UIEventHandler<HTMLDivElement> | undefined;
283
- onWheel?: import("react").WheelEventHandler<HTMLDivElement> | undefined;
284
- onWheelCapture?: import("react").WheelEventHandler<HTMLDivElement> | undefined;
285
- onAnimationStartCapture?: import("react").AnimationEventHandler<HTMLDivElement> | undefined;
286
- onAnimationEnd?: import("react").AnimationEventHandler<HTMLDivElement> | undefined;
287
- onAnimationEndCapture?: import("react").AnimationEventHandler<HTMLDivElement> | undefined;
288
- onAnimationIteration?: import("react").AnimationEventHandler<HTMLDivElement> | undefined;
289
- onAnimationIterationCapture?: import("react").AnimationEventHandler<HTMLDivElement> | undefined;
290
- onTransitionEnd?: import("react").TransitionEventHandler<HTMLDivElement> | undefined;
291
- onTransitionEndCapture?: import("react").TransitionEventHandler<HTMLDivElement> | undefined;
292
- } & import("framer-motion").MotionProps & import("react").RefAttributes<HTMLDivElement> & import("@mui/system").MUIStyledCommonProps<Theme> & {
293
- $index: number;
294
- $left: number;
295
- $size: number;
296
- $isHidden: boolean;
297
- }, {}, {}>;
298
- /** Default fanout `+N` item. */
299
- export declare const AvatarStackOverflowStyled: import("@emotion/styled").StyledComponent<Omit<Omit<import("../primitives").AvatarProps, "ref"> & import("react").RefAttributes<HTMLDivElement>, "ref"> & {
300
- ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
301
- } & import("@mui/system").MUIStyledCommonProps<Theme> & {
302
- $size: number;
303
- }, {}, {}>;
@@ -1,122 +0,0 @@
1
- import type { BoxProps } from '@mui/material/Box';
2
- import type { HTMLAttributes, ReactNode, Ref } from 'react';
3
- import type { AvatarProps } from '../primitives';
4
- /**
5
- * Controls both the render mode and (for fanout variants) the fan-out direction.
6
- *
7
- * - `"static"` — overlapping row, no hover animation **(default)**
8
- * - `"fanout-right"` — fans right on hover (anchor: leftmost item)
9
- * - `"fanout-left"` — fans left on hover (anchor: rightmost item)
10
- * - `"fanout-center"` — fans both ways on hover (anchor: middle item)
11
- */
12
- export type AvatarStackVariant = 'static' | 'fanout-right' | 'fanout-left' | 'fanout-center';
13
- /** Resolved internally from `variant` — not exposed as a prop. */
14
- export type AvatarStackFanOutDirection = 'right' | 'left' | 'center';
15
- /** Passed to `renderItem` so the callback knows how large to render each item. */
16
- export type AvatarStackItemRenderContext = {
17
- slotSize: number;
18
- };
19
- /**
20
- * Passed to `renderOverflow` when items exceed `maxItems`.
21
- *
22
- * @template T — matches the `items` array type on `AvatarStackProps<T>`.
23
- */
24
- export type AvatarStackOverflowRenderArgs<T = unknown> = {
25
- /** The full `items` array passed to `AvatarStack`. */
26
- items: readonly T[];
27
- /** The hidden items that overflowed past `maxItems`. */
28
- overflowItems: readonly T[];
29
- /** Item diameter in px — size your overflow item to this value. */
30
- size: number;
31
- };
32
- /** Fine-grained style/prop overrides for internal slots. */
33
- export type AvatarStackSlotProps = {
34
- /** Outer flex shell wrapping the item track (`Box`). Fanout variants only. */
35
- shell?: BoxProps;
36
- /** Positioned `<div>` holding all item slots — use for `aria-label` and other HTML attributes. Fanout variants only. */
37
- track?: HTMLAttributes<HTMLDivElement>;
38
- /** Layout dimensions. Only `size` applies to the static variant. */
39
- layout?: {
40
- /** Z-index of the track while hovered. @default 1000 */
41
- zIndex?: number;
42
- /** Item diameter in px. @default 24 */
43
- size?: number;
44
- /** Horizontal distance between stacked items in px. @default size / 2 */
45
- stackStep?: number;
46
- /** Space between items when fully expanded in px. */
47
- gap?: number;
48
- /** Minimum width of the item track container in px. */
49
- minTrackWidth?: number;
50
- };
51
- };
52
- /**
53
- * Props for `AvatarStack`.
54
- *
55
- * `items` is the only source of truth: pass `items` + `getItemKey` + `renderItem`.
56
- */
57
- export type AvatarStackProps<T = unknown> = {
58
- /** Render mode and fan-out direction. @default 'static' */
59
- variant?: AvatarStackVariant;
60
- /** Data array. Requires `getItemKey` and `renderItem`. */
61
- items?: readonly T[];
62
- getItemKey?: (item: T, index: number) => string;
63
- renderItem?: (item: T, index: number, ctx: AvatarStackItemRenderContext) => ReactNode;
64
- /**
65
- * Total slot count **including** the `+N` item. Once the source reaches this
66
- * count, the first `maxItems - 1` items stay visible and the rest collapse into `+N`.
67
- */
68
- maxItems?: number;
69
- /**
70
- * **Fanout variants only.** Show only the anchor item while idle; hovering
71
- * reveals all items with the fan-out animation defined by `variant`.
72
- * @default false
73
- */
74
- compact?: boolean;
75
- /**
76
- * Replace the `+N` overflow slot. Receives the full `items` array and the hidden `overflowItems` slice.
77
- * Static variant: returning `null`/`undefined` falls back to the default `+N` item.
78
- */
79
- renderOverflow?: (args: AvatarStackOverflowRenderArgs<T>) => ReactNode;
80
- /** Set on the same node as `data-testid` (static row / fanout track). Never auto-generated. */
81
- id?: string;
82
- sx?: BoxProps['sx'];
83
- className?: string;
84
- /** Style/prop overrides for internal slots and layout dimensions. */
85
- slotProps?: AvatarStackSlotProps;
86
- /** @default id ?? 'AvatarStack' */
87
- 'data-testid'?: string;
88
- };
89
- /** Single circular item for the static variant, built on the `Avatar` primitive. `title` adds a hover tooltip. */
90
- export type AvatarStackItemProps = Omit<AvatarProps, 'title'> & {
91
- title?: ReactNode;
92
- };
93
- /** One rendered position in the row — a visible item or the `+N` item. */
94
- export type AvatarStackSlotModel = {
95
- key: string;
96
- render: () => ReactNode;
97
- };
98
- /** Resolved data-driven source — the `items` list with its key/render pair. */
99
- export type AvatarStackSource<T> = {
100
- items: readonly T[];
101
- getItemKey: (item: T, index: number) => string;
102
- renderItem: (item: T, index: number, ctx: AvatarStackItemRenderContext) => ReactNode;
103
- };
104
- /** Resolved dimensions for the fanout track. */
105
- export type AvatarStackLayout = {
106
- size: number;
107
- stackStep: number;
108
- gap: number;
109
- minTrackWidth: number;
110
- };
111
- /** Props shared by `StaticStack` and `AnimatedStack`, already resolved by `AvatarStack`. */
112
- type AvatarStackRendererProps<T> = Pick<AvatarStackProps<T>, 'id' | 'data-testid' | 'className' | 'sx' | 'slotProps' | 'maxItems' | 'renderOverflow'> & {
113
- source: AvatarStackSource<T>;
114
- rootRef?: Ref<HTMLDivElement>;
115
- };
116
- export type AvatarStackStaticStackProps<T> = AvatarStackRendererProps<T>;
117
- export type AvatarStackAnimatedStackProps<T> = AvatarStackRendererProps<T> & {
118
- fanOutDirection: AvatarStackFanOutDirection;
119
- /** See `AvatarStackProps.compact`. */
120
- compact: boolean;
121
- };
122
- export {};
@@ -1,55 +0,0 @@
1
- import type { MutableRefObject, ReactNode } from 'react';
2
- import type { AvatarStackFanOutDirection, AvatarStackLayout, AvatarStackOverflowRenderArgs, AvatarStackProps, AvatarStackSlotModel, AvatarStackSource, AvatarStackVariant } from './type';
3
- /**
4
- * Resolves the `items` source. Returns `null` when `items`, `getItemKey`, or
5
- * `renderItem` is missing, or when there is nothing to render.
6
- */
7
- export declare function resolveAvatarStackSource<T>({ items, getItemKey, renderItem, }: Pick<AvatarStackProps<T>, 'items' | 'getItemKey' | 'renderItem'>): AvatarStackSource<T> | null;
8
- export declare function getFanOutDirection(variant: AvatarStackVariant): AvatarStackFanOutDirection;
9
- /**
10
- * Splits `items` into visible and hidden slices.
11
- *
12
- * Overflow triggers when `maxItems >= 1` and `items.length >= maxItems`: the first
13
- * `maxItems - 1` items stay visible so the `+N` item fills the last slot.
14
- */
15
- export declare function splitAvatarStackOverflow<T>(items: readonly T[], maxItems: number | undefined): {
16
- visibleItems: readonly T[];
17
- hiddenItems: readonly T[];
18
- };
19
- /**
20
- * Fanout guard — `true` when the row overflows into a `+N` item, so fan-out is disabled
21
- * (the `+N` item would jump mid-animation). Derived from `splitAvatarStackOverflow` so the
22
- * cap threshold cannot drift from what `buildAvatarStackSlots` renders.
23
- */
24
- export declare function hasAvatarStackOverflow<T>(items: readonly T[], maxItems: number | undefined): boolean;
25
- /** Builds one slot per visible item, plus a trailing `+N` slot when items overflow. */
26
- export declare function buildAvatarStackSlots<T>({ source: { items, getItemKey, renderItem }, maxItems, slotSize, renderOverflow, }: {
27
- source: Pick<AvatarStackSource<T>, 'items' | 'getItemKey' | 'renderItem'>;
28
- maxItems: number | undefined;
29
- slotSize: number;
30
- renderOverflow: (args: AvatarStackOverflowRenderArgs<T>) => ReactNode;
31
- }): AvatarStackSlotModel[];
32
- /** Fills unset layout values, scaling them from `size`. */
33
- export declare function getAvatarStackLayout(overrides: Partial<AvatarStackLayout>): AvatarStackLayout;
34
- /** The slot that stays in place while the others fan out around it. */
35
- export declare function getFanOutAnchorIndex(slotCount: number, direction: AvatarStackFanOutDirection): number;
36
- /** Width of the collapsed (overlapping) row. */
37
- export declare function getCollapsedWidthPx(slotCount: number, stackStep: number, size: number): number;
38
- /**
39
- * Left offset of every slot once fanned out, laid side by side outward from the anchor.
40
- * `slotWidths` must hold one entry per slot.
41
- */
42
- export declare function getFannedLeftPositionsPx({ slotCount, anchorIndex, slotWidths, gap, stackStep, }: {
43
- slotCount: number;
44
- anchorIndex: number;
45
- slotWidths: number[];
46
- gap: number;
47
- stackStep: number;
48
- }): number[];
49
- /** Per-slot `x` translation from its collapsed position (`index * stackStep`) to its fanned position. */
50
- export declare function getFanOutTranslateXPx(slotCount: number, isExpanded: boolean, fannedLeftPositions: number[], stackStep: number): number[];
51
- /** Width of the fanned-out row — never narrower than the collapsed row. */
52
- export declare function getFannedWidthPx(fannedLeftPositions: number[], slotWidths: number[], collapsedWidth: number): number;
53
- /** Reads each slot's rendered width; unmounted slots fall back to `fallbackWidth`. */
54
- export declare function readSlotWidthsPx(slotCount: number, slotRefs: MutableRefObject<Array<HTMLDivElement | null>>, fallbackWidth: number): number[];
55
- export declare function areNumberArraysEqual(a: number[], b: number[]): boolean;