@devsym/graph-toolkit-react 1.0.0-next.8 → 1.0.0-next.9
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/AGENTS.md +2 -0
- package/dist/components/PeoplePicker/PeoplePicker.d.ts +24 -0
- package/dist/components/PeoplePicker/PeoplePicker.d.ts.map +1 -0
- package/dist/components/PeoplePicker/PeoplePicker.types.d.ts +57 -0
- package/dist/components/PeoplePicker/PeoplePicker.types.d.ts.map +1 -0
- package/dist/components/PeoplePicker/index.d.ts +6 -0
- package/dist/components/PeoplePicker/index.d.ts.map +1 -0
- package/dist/hooks/usePeopleSearch.d.ts +37 -0
- package/dist/hooks/usePeopleSearch.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.mjs +979 -222
- package/dist/providers/IPersonDataProvider.d.ts +49 -1
- package/dist/providers/IPersonDataProvider.d.ts.map +1 -1
- package/dist/providers/MockProvider.d.ts +3 -2
- package/dist/providers/MockProvider.d.ts.map +1 -1
- package/dist/providers/MsalBrowserProvider.d.ts +12 -0
- package/dist/providers/MsalBrowserProvider.d.ts.map +1 -1
- package/package.json +3 -2
- package/readme.md +10 -12
package/AGENTS.md
CHANGED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PeoplePicker component - Select one or more people using Microsoft Graph search
|
|
3
|
+
*/
|
|
4
|
+
import React from 'react';
|
|
5
|
+
import { PeoplePickerProps } from './PeoplePicker.types';
|
|
6
|
+
/**
|
|
7
|
+
* PeoplePicker — a tag-picker backed by Microsoft Graph people search.
|
|
8
|
+
*
|
|
9
|
+
* In controlled mode supply `selectedPeople` + `onSelectionChange`.
|
|
10
|
+
* In uncontrolled mode supply `defaultSelectedPeople` or leave both props unset.
|
|
11
|
+
*
|
|
12
|
+
* The component automatically uses {@link MockProvider} mock data when no real
|
|
13
|
+
* Graph provider is available, making it easy to prototype UIs without auth.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* <PeoplePicker
|
|
18
|
+
* placeholder="Search for people..."
|
|
19
|
+
* onSelectionChange={(people) => console.log(people)}
|
|
20
|
+
* />
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare const PeoplePicker: React.FC<PeoplePickerProps>;
|
|
24
|
+
//# sourceMappingURL=PeoplePicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PeoplePicker.d.ts","sourceRoot":"","sources":["../../../src/components/PeoplePicker/PeoplePicker.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAyC,MAAM,OAAO,CAAC;AAiB9D,OAAO,EAAsB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAoB7E;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAqJpD,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PeoplePicker component types
|
|
3
|
+
*/
|
|
4
|
+
import type { TagPickerProps } from '@fluentui/react-components';
|
|
5
|
+
import type { PeopleSearchResult } from '../../providers/IPersonDataProvider';
|
|
6
|
+
/**
|
|
7
|
+
* A person entry used in the PeoplePicker component.
|
|
8
|
+
*
|
|
9
|
+
* This is an alias for {@link PeopleSearchResult} — both types share the same shape
|
|
10
|
+
* so they can be used interchangeably.
|
|
11
|
+
*/
|
|
12
|
+
export type PeoplePickerPerson = PeopleSearchResult;
|
|
13
|
+
/**
|
|
14
|
+
* Props for the {@link PeoplePicker} component.
|
|
15
|
+
*/
|
|
16
|
+
export interface PeoplePickerProps extends Pick<TagPickerProps, 'appearance' | 'size' | 'disabled'> {
|
|
17
|
+
/**
|
|
18
|
+
* Currently selected people (controlled mode).
|
|
19
|
+
* When provided, the component operates in controlled mode and does not manage its own selection state.
|
|
20
|
+
*/
|
|
21
|
+
selectedPeople?: PeoplePickerPerson[];
|
|
22
|
+
/**
|
|
23
|
+
* Initial selected people (uncontrolled mode).
|
|
24
|
+
* Ignored when {@link selectedPeople} is provided.
|
|
25
|
+
*/
|
|
26
|
+
defaultSelectedPeople?: PeoplePickerPerson[];
|
|
27
|
+
/**
|
|
28
|
+
* Called when the selection changes.
|
|
29
|
+
* @param people - The new array of selected people
|
|
30
|
+
*/
|
|
31
|
+
onSelectionChange?: (people: PeoplePickerPerson[]) => void;
|
|
32
|
+
/**
|
|
33
|
+
* Placeholder text shown in the search input when nothing is typed
|
|
34
|
+
*/
|
|
35
|
+
placeholder?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Maximum number of people that can be selected.
|
|
38
|
+
* When reached the search input is hidden.
|
|
39
|
+
*/
|
|
40
|
+
maxPeople?: number;
|
|
41
|
+
/**
|
|
42
|
+
* Minimum number of characters required before a search is triggered (default: 1)
|
|
43
|
+
*/
|
|
44
|
+
searchMinChars?: number;
|
|
45
|
+
/**
|
|
46
|
+
* Maximum number of search results to show in the dropdown (default: 10)
|
|
47
|
+
*/
|
|
48
|
+
maxSearchResults?: number;
|
|
49
|
+
/**
|
|
50
|
+
* User IDs to exclude from search results.
|
|
51
|
+
* When provided, these IDs will be filtered out of the dropdown suggestions.
|
|
52
|
+
* The search will fetch extra results to compensate so that the dropdown still
|
|
53
|
+
* shows up to {@link maxSearchResults} items after exclusion.
|
|
54
|
+
*/
|
|
55
|
+
excludeUserIds?: string[];
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=PeoplePicker.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PeoplePicker.types.d.ts","sourceRoot":"","sources":["../../../src/components/PeoplePicker/PeoplePicker.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAE9E;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,iBACf,SAAQ,IAAI,CAAC,cAAc,EAAE,YAAY,GAAG,MAAM,GAAG,UAAU,CAAC;IAChE;;;OAGG;IACH,cAAc,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAEtC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAE7C;;;OAGG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,IAAI,CAAC;IAE3D;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/PeoplePicker/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook to search for people using Microsoft Graph or a mock provider
|
|
3
|
+
*/
|
|
4
|
+
import { PeopleSearchResult } from '../providers/IPersonDataProvider';
|
|
5
|
+
export interface UsePeopleSearchOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Minimum number of characters required before searching (default: 1)
|
|
8
|
+
*/
|
|
9
|
+
minChars?: number;
|
|
10
|
+
/**
|
|
11
|
+
* Maximum number of results to return (default: 10)
|
|
12
|
+
*/
|
|
13
|
+
maxResults?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface UsePeopleSearchResult {
|
|
16
|
+
/**
|
|
17
|
+
* The list of matching people
|
|
18
|
+
*/
|
|
19
|
+
results: PeopleSearchResult[];
|
|
20
|
+
/**
|
|
21
|
+
* Whether a search is in progress
|
|
22
|
+
*/
|
|
23
|
+
loading: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Hook to search for people by name, email, or UPN.
|
|
27
|
+
*
|
|
28
|
+
* When used with a {@link MockProvider} the search is performed locally against mock data.
|
|
29
|
+
* With a real provider the hook queries the Microsoft Graph `/users` endpoint using
|
|
30
|
+
* `$search` with `ConsistencyLevel: eventual`.
|
|
31
|
+
*
|
|
32
|
+
* @param query - The search query string
|
|
33
|
+
* @param options - Optional configuration
|
|
34
|
+
* @returns An object with the search results and a loading flag
|
|
35
|
+
*/
|
|
36
|
+
export declare const usePeopleSearch: (query: string, options?: UsePeopleSearchOptions) => UsePeopleSearchResult;
|
|
37
|
+
//# sourceMappingURL=usePeopleSearch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePeopleSearch.d.ts","sourceRoot":"","sources":["../../src/hooks/usePeopleSearch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAA0B,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAE9F,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAKD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,GAC1B,OAAO,MAAM,EACb,UAAU,sBAAsB,KAC/B,qBAkEF,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* React components for Microsoft Graph powered by Fluent UI
|
|
5
5
|
*/
|
|
6
6
|
export * from './components/Person';
|
|
7
|
+
export * from './components/PeoplePicker';
|
|
7
8
|
export * from './providers/IProvider';
|
|
8
9
|
export * from './providers/IPersonDataProvider';
|
|
9
10
|
export * from './providers/ProviderContext';
|
|
@@ -12,4 +13,5 @@ export * from './providers/MsalBrowserProvider';
|
|
|
12
13
|
export * from './providers/TeamsHostedProvider';
|
|
13
14
|
export * from './hooks/useGraphClient';
|
|
14
15
|
export * from './hooks/usePersonData';
|
|
16
|
+
export * from './hooks/usePeopleSearch';
|
|
15
17
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAGhD,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1 +1,3 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const F=require("react/jsx-runtime"),X=require("@fluentui/react-components"),S=require("react"),je=require("@microsoft/microsoft-graph-client"),He="graph-toolkit-person-cache",G="personData",Ie=1,he=3600*1e3,ye=3600*1e3,De=300*1e3,V={enabled:!0,userTtlMs:he,photoTtlMs:ye,presenceTtlMs:De},q=()=>typeof window<"u"&&typeof window.indexedDB<"u",N=t=>new Promise((e,n)=>{t.onsuccess=()=>e(t.result),t.onerror=()=>n(t.error)}),Z=()=>new Promise((t,e)=>{if(!q()){e(new Error("IndexedDB unavailable"));return}const n=window.indexedDB.open(He,Ie);n.onupgradeneeded=()=>{const s=n.result;s.objectStoreNames.contains(G)||s.createObjectStore(G)},n.onsuccess=()=>t(n.result),n.onerror=()=>e(n.error)}),Je=t=>`person:${t.trim().toLowerCase()}`,v=(t,e)=>t?Date.now()-t<e:!1,Oe=async t=>{if(!q())return null;let e=null;try{e=await Z();const s=e.transaction(G,"readonly").objectStore(G);return await N(s.get(t))??null}catch{return null}finally{e?.close()}},xe=async(t,e)=>{if(!q())return;let n=null;try{n=await Z();const r=n.transaction(G,"readwrite").objectStore(G);await N(r.put(e,t))}catch{return}finally{n?.close()}},U=S.createContext({provider:null,state:"Loading",personCacheOptions:V}),Ge=({provider:t,children:e,personCacheOptions:n})=>{const s=S.useCallback(()=>t?.getState?.()??"Loading",[t]),r=S.useCallback(u=>(t.onStateChanged?.(u),()=>{const J=t;typeof J.removeStateChangedHandler=="function"&&J.removeStateChangedHandler(u)}),[t]),c=S.useSyncExternalStore(r,s,s),l=S.useMemo(()=>({...V,...n??{}}),[n]),i=S.useMemo(()=>({provider:t,state:c,personCacheOptions:l}),[t,c,l]);return F.jsx(U.Provider,{value:i,children:e})},m=()=>{const{provider:t}=S.useContext(U);return t},Y=()=>{const{state:t}=S.useContext(U);return t},_=()=>{const{personCacheOptions:t}=S.useContext(U);return t},fe=t=>je.Client.init({authProvider:async e=>{try{const n=await t.getAccessToken();e(null,n)}catch(n){e(n,null)}}}),Ce=t=>{const e=t.trim().split(" ");return e.length===1?e[0].substring(0,2).toUpperCase():(e[0][0]+e[e.length-1][0]).toUpperCase()},$=()=>{const t=m(),e=Y();return S.useMemo(()=>!t||e!=="SignedIn"?null:fe(t),[t,e])},ee=t=>typeof t=="object"&&t!==null&&typeof t.getPersonData=="function",b=["id","displayName","jobTitle","mail","department","officeLocation","userPrincipalName"],Te=async t=>{if(!t)return null;if(typeof t=="string")return t;const e=t instanceof Blob?t:t instanceof ArrayBuffer?new Blob([t]):null;return e?new Promise((n,s)=>{const r=new FileReader;r.onloadend=()=>n(typeof r.result=="string"?r.result:null),r.onerror=()=>s(r.error),r.readAsDataURL(e)}):null},te=t=>{const e=$(),n=m(),s=Y(),r=_(),{userId:c,userPrincipalName:l,fetchPresence:i=!1,fetchPhoto:u=!0,selectFields:J}=t,y=[...new Set([...b,...(J??[]).map(A=>A.trim()).filter(A=>A.length>0&&/^[a-zA-Z0-9_./]+$/.test(A))])].join(","),[K,d]=S.useState({user:null,presence:null,photoUrl:null,loading:!0,error:null});return S.useEffect(()=>{let A=!1;const E=y.split(",").filter(B=>!b.includes(B));return(async()=>{const B=c||l;if(ee(n)){try{const a=await n.getPersonData({identifier:B,fetchPresence:i,fetchPhoto:u,selectFields:E.length>0?E:void 0});A||d({user:a.user,presence:a.presence,photoUrl:a.photoUrl,loading:!1,error:null})}catch(a){A||d({user:null,presence:null,photoUrl:null,loading:!1,error:a})}return}if(s!=="SignedIn"){A||d({user:null,presence:null,photoUrl:null,loading:!1,error:s==="SignedOut"?null:new Error("Provider not signed in")});return}if(!e){A||d(a=>({...a,loading:!0}));return}if(!B){A||d({user:null,presence:null,photoUrl:null,loading:!1,error:null});return}const O=Je(B),o=r.enabled?await Oe(O):null,x=!!(o?.user&&v(o.userCachedAt,r.userTtlMs)),f=!!(o?.presenceCachedAt&&v(o.presenceCachedAt,r.presenceTtlMs)),C=!!(o?.photoCachedAt&&v(o.photoCachedAt,r.photoTtlMs));if(x&&(!i||f)&&(!u||C)){A||d({user:o?.user??null,presence:i?o?.presence??null:null,photoUrl:u?o?.photoUrl??null:null,loading:!1,error:null});return}try{d(I=>({...I,loading:!0,error:null}));const a=B.toLowerCase()==="me",D=Date.now();let T=!1,p=!1,j=!1,w=x?o?.user??null:null;if(w||(w=await e.api(a?"/me":`/users/${B}`).select(y).get(),T=!0),A)return;let H=null,g=null;if(i){if(f)H=o?.presence??null;else if(w?.id){try{H=await e.api(a?"/me/presence":`/users/${w.id}/presence`).get()}catch(I){console.warn("Failed to fetch presence:",I)}p=!0}}if(u){if(C)g=o?.photoUrl??null;else if(w?.id){try{const I=await e.api(a?"/me/photo/$value":`/users/${w.id}/photo/$value`).get();g=await Te(I)}catch(I){console.warn("Failed to fetch photo:",I)}j=!0}}const P={...o??{}};T&&w&&(P.user=w,P.userCachedAt=D),i&&(p||f)&&(P.presence=p?H:o?.presence,P.presenceCachedAt=p?D:o?.presenceCachedAt),u&&(j||C)&&(P.photoUrl=j?g:o?.photoUrl,P.photoCachedAt=j?D:o?.photoCachedAt),r.enabled&&(T||p||j)&&P.user&&await xe(O,P),A||d({user:w,presence:H,photoUrl:g,loading:!1,error:null})}catch(a){A||d({user:null,presence:null,photoUrl:null,loading:!1,error:a})}})(),()=>{A=!0}},[e,n,s,c,l,i,u,r,y]),K},Qe=t=>{switch(t?.toLowerCase()){case"available":case"availableidle":return"available";case"away":case"berightback":return"away";case"busy":case"busyidle":case"donotdisturb":return"busy";default:return"offline"}},Ee={avatar:[void 0,void 0,void 0,void 0],oneline:["displayName",void 0,void 0,void 0],twolines:["displayName","jobTitle",void 0,void 0],threelines:["displayName","jobTitle","department",void 0],fourlines:["displayName","jobTitle","department","officeLocation,mail"]},ne=new Set(["presenceActivity","presenceAvailability"]),Me=new Set(["email",...ne]),L=t=>t?.split(",").map(e=>e.trim()).filter(Boolean)??[],h=t=>{if(t!=null){if(typeof t=="string")return t||void 0;if(typeof t=="number"||typeof t=="boolean")return String(t);if(Array.isArray(t)){const e=t.map(n=>h(n)).filter(n=>!!n);return e.length>0?e.join(", "):void 0}}},Re=t=>h(t.mail)??h(t.email)??h(t.userPrincipalName),M=(t,e)=>{const n=L(e);for(const s of n)switch(s){case"mail":case"email":{const r=Re(t);if(r)return r;break}default:{const r=h(t[s]);if(r)return r}}},Ue=(t,e,n)=>({line:t,person:e,text:n}),Q=(t,e,n,s)=>s?s(Ue(t,e,n)):n,R=(t,e,n)=>n??Ee[t][e-1],Ke=t=>[...new Set(t.flatMap(e=>L(e)))].filter(e=>!Me.has(e)),ve=({userId:t,userPrincipalName:e,email:n,personDetails:s,view:r="oneline",showPresence:c=!1,line1Property:l,line2Property:i,line3Property:u,line4Property:J,renderLine1:y,renderLine2:K,renderLine3:d,renderLine4:A,fetchImage:E=!0,...k})=>{const B=r==="avatar"?void 0:R(r,1,l),O=r==="avatar"?void 0:R(r,2,i),o=r==="threelines"||r==="fourlines"?R(r,3,u):void 0,x=r==="fourlines"?R(r,4,J):void 0,f=[B,O,o,x].some(we=>L(we).some(pe=>ne.has(pe))),{user:C,presence:a,photoUrl:D,loading:T}=te({userId:s?void 0:t||e||n,fetchPresence:c||f,fetchPhoto:E,selectFields:Ke([B,O,o,x])}),p=s||C;if(T)return F.jsx(X.Persona,{...k,name:k.name??"Loading..."});if(!p)return null;const j=p.displayName||"Unknown User",w=Ce(j),H=p,g={...H,email:n??h(H.email),presenceActivity:a?.activity??h(H.presenceActivity),presenceAvailability:a?.availability??h(H.presenceAvailability)},P=M(g,B),I=M(g,O),se=M(g,o),ce=M(g,x),oe=B&&P!==j||y?Q(1,g,P,y):k.primaryText,ae=Q(2,g,I,K),Ae=Q(3,g,se,d),ie=Q(4,g,ce,A),le=c&&a?{status:Qe(a.availability)}:void 0,ge=k.presence??le,ue=k.avatar??{image:D?{src:D}:void 0,initials:D?void 0:w},ke=k.name??j,Be=k.primaryText??oe,Pe=k.secondaryText??ae,Se=k.tertiaryText??Ae,de=k.quaternaryText??ie;return F.jsx(X.Persona,{...k,name:ke,primaryText:Be,avatar:ue,presence:ge,secondaryText:Pe,tertiaryText:Se,quaternaryText:de})},Fe="data:image/jpeg;base64,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";class re{state="SignedOut";listeners=[];constructor(e){e?.autoSignIn&&(this.state="SignedIn")}getAccessToken(){return this.state!=="SignedIn"?Promise.reject(new Error("Not signed in")):Promise.resolve("mock-token")}async getPersonData(e){const n="Adele Vance",s=e.identifier&&e.identifier!=="me"?e.identifier:"adelev@contoso.com",r={id:"00000000-0000-0000-0000-000000000000",displayName:n,userPrincipalName:s,jobTitle:"Product Manager",department:"Marketing",officeLocation:"19/3106",mail:"adelev@contoso.com"},c={availability:"Available",activity:"Available",id:r.id,odataType:"#microsoft.graph.presence"};return{user:r,presence:e.fetchPresence?c:null,photoUrl:e.fetchPhoto?Fe:null}}async login(){this.state="SignedIn",this.emit()}async logout(){this.state="SignedOut",this.emit()}getState(){return this.state}onStateChanged(e){this.listeners.push(e)}removeStateChangedHandler(e){this.listeners=this.listeners.filter(n=>n!==e)}emit(){for(const e of this.listeners)try{e()}catch{}}}const qe=()=>new re({autoSignIn:!0});function me(t){return`See https://aka.ms/msal.js.errors#${t} for details`}class W extends Error{constructor(e,n,s){const r=n||(e?me(e):""),c=r?`${e}: ${r}`:e;super(c),Object.setPrototypeOf(this,W.prototype),this.errorCode=e||"",this.errorMessage=r||"",this.subError=s||"",this.name="AuthError"}setCorrelationId(e){this.correlationId=e}}class z extends W{constructor(e,n,s,r,c,l,i,u){super(e,n,s),Object.setPrototypeOf(this,z.prototype),this.timestamp=r||"",this.traceId=c||"",this.correlationId=l||"",this.claims=i||"",this.name="InteractionRequiredAuthError",this.errorNo=u}}class Ye{msalInstance;defaultScopes;account=null;state="Loading";listeners=[];constructor(e,n){this.msalInstance=e,this.defaultScopes=n}async initialize(){await this.msalInstance.initialize(),await this.msalInstance.handleRedirectPromise();const e=this.msalInstance.getActiveAccount(),n=this.msalInstance.getAllAccounts();this.account=e??n[0]??null,this.account?(this.msalInstance.setActiveAccount(this.account),this.setState("SignedIn")):this.setState("SignedOut")}async login(){const e={scopes:this.defaultScopes},n=await this.msalInstance.loginPopup(e);this.account=n.account,this.account&&this.msalInstance.setActiveAccount(this.account),this.setState("SignedIn")}async logout(){const e=this.msalInstance.getActiveAccount()??this.account??void 0;await this.msalInstance.logoutPopup({account:e}),this.account=null,this.setState("SignedOut")}async getAccessToken(e){const n=e&&e.length>0?e:this.defaultScopes,s=this.msalInstance.getActiveAccount()??this.account;if(!s)throw new Error("No active account. User must sign in first.");const r={scopes:n,account:s};try{return(await this.msalInstance.acquireTokenSilent(r)).accessToken}catch(c){if(c instanceof z){const l={scopes:n,account:s};return(await this.msalInstance.acquireTokenPopup(l)).accessToken}throw c}}getState(){return this.state}onStateChanged(e){this.listeners.push(e)}removeStateChangedHandler(e){this.listeners=this.listeners.filter(n=>n!==e)}setState(e){this.state=e,this.emit()}emit(){for(const e of this.listeners)try{e()}catch{}}}const Le=6e4;function We(t){const e=t.fetchFn??fetch;return async({ssoToken:n,scopes:s})=>{const r=await e(t.endpoint,{method:"POST",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json"},body:JSON.stringify({scopes:s})}),c=await r.json().catch(()=>({error:r.statusText||"Token exchange failed"}));if(!r.ok){const l=c?.error||c?.message||r.statusText;throw new Error(`Backend token exchange failed: ${l}`)}if(!c?.accessToken)throw new Error("Backend token exchange response did not include accessToken.");return{accessToken:c.accessToken,expiresAt:c.expiresAt}}}class ze{defaultScopes;getTeamsSsoTokenFn;exchangeForGraphTokenFn;refreshSkewMs;state="SignedOut";listeners=[];tokenCache=new Map;constructor(e){if(!e.defaultScopes||e.defaultScopes.length===0)throw new Error("TeamsHostedProvider requires at least one default scope.");this.defaultScopes=[...new Set(e.defaultScopes)],this.getTeamsSsoTokenFn=e.getTeamsSsoToken,this.exchangeForGraphTokenFn=e.exchangeForGraphToken,this.refreshSkewMs=e.refreshSkewMs??Le}async login(){try{await this.getAccessToken(),this.setState("SignedIn")}catch(e){throw this.clearCache(),this.setState("SignedOut"),e}}async logout(){this.clearCache(),this.setState("SignedOut")}async getAccessToken(e){const n=this.normalizeScopes(e),s=this.buildScopeKey(n),r=this.tokenCache.get(s);if(r&&this.isTokenValid(r))return r.accessToken;const c=await this.getTeamsSsoTokenFn(n);if(!c)throw new Error("Teams SSO token acquisition returned empty token.");const l=await this.exchangeForGraphTokenFn({ssoToken:c,scopes:n}),i=this.normalizeExchangedToken(l);return this.tokenCache.set(s,i),this.setState("SignedIn"),i.accessToken}getState(){return this.state}onStateChanged(e){this.listeners.push(e)}removeStateChangedHandler(e){this.listeners=this.listeners.filter(n=>n!==e)}normalizeScopes(e){const n=e&&e.length>0?e:this.defaultScopes,s=[...new Set(n.filter(Boolean))];if(s.length===0)throw new Error("At least one scope is required to request a Graph token.");return s}buildScopeKey(e){return[...e].sort().join(" ")}isTokenValid(e){return e.expiresAtMs?Date.now()+this.refreshSkewMs<e.expiresAtMs:!0}normalizeExchangedToken(e){if(typeof e=="string"){if(!e)throw new Error("Graph token exchange returned empty access token.");return{accessToken:e}}if(!e.accessToken)throw new Error("Graph token exchange returned empty access token.");return{accessToken:e.accessToken,expiresAtMs:this.toEpochMs(e.expiresAt)}}toEpochMs(e){if(e)return e instanceof Date?e.getTime():e}clearCache(){this.tokenCache.clear()}setState(e){this.state!==e&&(this.state=e,this.emit())}emit(){for(const e of this.listeners)try{e()}catch{}}}exports.GraphProvider=Ge;exports.MockProvider=re;exports.MsalBrowserProvider=Ye;exports.Person=ve;exports.TeamsHostedProvider=ze;exports.createBackendTokenExchange=We;exports.createMockSignedInProvider=qe;exports.isPersonDataProvider=ee;exports.useGraphClient=$;exports.usePersonCacheOptions=_;exports.usePersonData=te;exports.useProvider=m;exports.useProviderState=Y;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("react/jsx-runtime"),j=require("@fluentui/react-components"),p=require("react"),st=require("@microsoft/microsoft-graph-client");function rt(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const n in t)if(n!=="default"){const s=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,s.get?s:{enumerable:!0,get:()=>t[n]})}}return e.default=t,Object.freeze(e)}const x=rt(p),ot="graph-toolkit-person-cache",U="personData",ct=1,it=3600*1e3,at=3600*1e3,lt=300*1e3,ye={enabled:!0,userTtlMs:it,photoTtlMs:at,presenceTtlMs:lt},re=()=>typeof window<"u"&&typeof window.indexedDB<"u",Be=t=>new Promise((e,n)=>{t.onsuccess=()=>e(t.result),t.onerror=()=>n(t.error)}),me=()=>new Promise((t,e)=>{if(!re()){e(new Error("IndexedDB unavailable"));return}const n=window.indexedDB.open(ot,ct);n.onupgradeneeded=()=>{const s=n.result;s.objectStoreNames.contains(U)||s.createObjectStore(U)},n.onsuccess=()=>t(n.result),n.onerror=()=>e(n.error)}),ut=t=>`person:${t.trim().toLowerCase()}`,Z=(t,e)=>t?Date.now()-t<e:!1,At=async t=>{if(!re())return null;let e=null;try{e=await me();const s=e.transaction(U,"readonly").objectStore(U);return await Be(s.get(t))??null}catch{return null}finally{e?.close()}},dt=async(t,e)=>{if(!re())return;let n=null;try{n=await me();const r=n.transaction(U,"readwrite").objectStore(U);await Be(r.put(e,t))}catch{return}finally{n?.close()}},z=p.createContext({provider:null,state:"Loading",personCacheOptions:ye}),gt=({provider:t,children:e,personCacheOptions:n})=>{const s=p.useCallback(()=>t?.getState?.()??"Loading",[t]),r=p.useCallback(a=>(t.onStateChanged?.(a),()=>{const h=t;typeof h.removeStateChangedHandler=="function"&&h.removeStateChangedHandler(a)}),[t]),o=p.useSyncExternalStore(r,s,s),c=p.useMemo(()=>({...ye,...n??{}}),[n]),i=p.useMemo(()=>({provider:t,state:o,personCacheOptions:c}),[t,o,c]);return I.jsx(z.Provider,{value:i,children:e})},X=()=>{const{provider:t}=p.useContext(z);return t},V=()=>{const{state:t}=p.useContext(z);return t},Ie=()=>{const{personCacheOptions:t}=p.useContext(z);return t},ft=t=>st.Client.init({authProvider:async e=>{try{const n=await t.getAccessToken();e(null,n)}catch(n){e(n,null)}}}),se=t=>{if(!t)return"";const e=t.trim().split(" ");return e.length===1?e[0].substring(0,2).toUpperCase():(e[0][0]+e[e.length-1][0]).toUpperCase()},oe=()=>{const t=X(),e=V();return p.useMemo(()=>!t||e!=="SignedIn"?null:ft(t),[t,e])},je=t=>typeof t=="object"&&t!==null&&typeof t.getPersonData=="function",Ce=t=>typeof t=="object"&&t!==null&&typeof t.searchPeople=="function",Ae=["id","displayName","jobTitle","mail","department","officeLocation","userPrincipalName"],ht=async t=>{if(!t)return null;if(typeof t=="string")return t;const e=t instanceof Blob?t:t instanceof ArrayBuffer?new Blob([t]):null;return e?new Promise((n,s)=>{const r=new FileReader;r.onloadend=()=>n(typeof r.result=="string"?r.result:null),r.onerror=()=>s(r.error),r.readAsDataURL(e)}):null},xe=t=>{const e=oe(),n=X(),s=V(),r=Ie(),{userId:o,userPrincipalName:c,fetchPresence:i=!1,fetchPhoto:a=!0,selectFields:h}=t,u=[...new Set([...Ae,...(h??[]).map(l=>l.trim()).filter(l=>l.length>0&&/^[a-zA-Z0-9_./]+$/.test(l))])].join(","),[d,g]=p.useState({user:null,presence:null,photoUrl:null,loading:!0,error:null});return p.useEffect(()=>{let l=!1;const S=u.split(",").filter(y=>!Ae.includes(y));return(async()=>{const y=o||c;if(je(n)){try{const P=await n.getPersonData({identifier:y,fetchPresence:i,fetchPhoto:a,selectFields:S.length>0?S:void 0});l||g({user:P.user,presence:P.presence,photoUrl:P.photoUrl,loading:!1,error:null})}catch(P){l||g({user:null,presence:null,photoUrl:null,loading:!1,error:P})}return}if(s!=="SignedIn"){l||g({user:null,presence:null,photoUrl:null,loading:!1,error:s==="SignedOut"?null:new Error("Provider not signed in")});return}if(!e){l||g(P=>({...P,loading:!0}));return}if(!y){l||g({user:null,presence:null,photoUrl:null,loading:!1,error:null});return}const J=ut(y),k=r.enabled?await At(J):null,O=!!(k?.user&&Z(k.userCachedAt,r.userTtlMs)),v=!!(k?.presenceCachedAt&&Z(k.presenceCachedAt,r.presenceTtlMs)),T=!!(k?.photoCachedAt&&Z(k.photoCachedAt,r.photoTtlMs));if(O&&(!i||v)&&(!a||T)){l||g({user:k?.user??null,presence:i?k?.presence??null:null,photoUrl:a?k?.photoUrl??null:null,loading:!1,error:null});return}try{g(R=>({...R,loading:!0,error:null}));const P=y.toLowerCase()==="me",E=Date.now();let M=!1,H=!1,C=!1,f=O?k?.user??null:null;if(f||(f=await e.api(P?"/me":`/users/${y}`).select(u).get(),M=!0),l)return;let B=null,m=null;if(i){if(v)B=k?.presence??null;else if(f?.id){try{B=await e.api(P?"/me/presence":`/users/${f.id}/presence`).get()}catch(R){console.warn("Failed to fetch presence:",R)}H=!0}}if(a){if(T)m=k?.photoUrl??null;else if(f?.id){try{const R=await e.api(P?"/me/photo/$value":`/users/${f.id}/photo/$value`).get();m=await ht(R)}catch(R){console.warn("Failed to fetch photo:",R)}C=!0}}const w={...k??{}};M&&f&&(w.user=f,w.userCachedAt=E),i&&(H||v)&&(w.presence=H?B:k?.presence,w.presenceCachedAt=H?E:k?.presenceCachedAt),a&&(C||T)&&(w.photoUrl=C?m:k?.photoUrl,w.photoCachedAt=C?E:k?.photoCachedAt),r.enabled&&(M||H||C)&&w.user&&await dt(J,w),l||g({user:f,presence:B,photoUrl:m,loading:!1,error:null})}catch(P){l||g({user:null,presence:null,photoUrl:null,loading:!1,error:P})}})(),()=>{l=!0}},[e,n,s,o,c,i,a,r,u]),d},St=t=>{switch(t?.toLowerCase()){case"available":case"availableidle":return"available";case"away":case"berightback":return"away";case"busy":case"busyidle":case"donotdisturb":return"busy";default:return"offline"}},pt={avatar:[void 0,void 0,void 0,void 0],oneline:["displayName",void 0,void 0,void 0],twolines:["displayName","jobTitle",void 0,void 0],threelines:["displayName","jobTitle","department",void 0],fourlines:["displayName","jobTitle","department","officeLocation,mail"]},Oe=new Set(["presenceActivity","presenceAvailability"]),kt=new Set(["email",...Oe]),ce=t=>t?.split(",").map(e=>e.trim()).filter(Boolean)??[],G=t=>{if(t!=null){if(typeof t=="string")return t||void 0;if(typeof t=="number"||typeof t=="boolean")return String(t);if(Array.isArray(t)){const e=t.map(n=>G(n)).filter(n=>!!n);return e.length>0?e.join(", "):void 0}}},Pt=t=>G(t.mail)??G(t.email)??G(t.userPrincipalName),L=(t,e)=>{const n=ce(e);for(const s of n)switch(s){case"mail":case"email":{const r=Pt(t);if(r)return r;break}default:{const r=G(t[s]);if(r)return r}}},wt=(t,e,n)=>({line:t,person:e,text:n}),N=(t,e,n,s)=>s?s(wt(t,e,n)):n,q=(t,e,n)=>n??pt[t][e-1],yt=t=>[...new Set(t.flatMap(e=>ce(e)))].filter(e=>!kt.has(e)),Bt=({userId:t,userPrincipalName:e,email:n,personDetails:s,view:r="oneline",showPresence:o=!1,line1Property:c,line2Property:i,line3Property:a,line4Property:h,renderLine1:u,renderLine2:d,renderLine3:g,renderLine4:l,fetchImage:S=!0,...A})=>{const y=r==="avatar"?void 0:q(r,1,c),J=r==="avatar"?void 0:q(r,2,i),k=r==="threelines"||r==="fourlines"?q(r,3,a):void 0,O=r==="fourlines"?q(r,4,h):void 0,v=[y,J,k,O].some(tt=>ce(tt).some(nt=>Oe.has(nt))),{user:T,presence:P,photoUrl:E,loading:M}=xe({userId:s?void 0:t||e||n,fetchPresence:o||v,fetchPhoto:S,selectFields:yt([y,J,k,O])}),H=s||T;if(M)return I.jsx(j.Persona,{...A,name:A.name??"Loading..."});if(!H)return null;const C=H.displayName||"Unknown User",f=se(C),B=H,m={...B,email:n??G(B.email),presenceActivity:P?.activity??G(B.presenceActivity),presenceAvailability:P?.availability??G(B.presenceAvailability)},w=L(m,y),R=L(m,J),be=L(m,k),Fe=L(m,O),Ke=y&&w!==C||u?N(1,m,w,u):A.primaryText,Le=N(2,m,R,d),qe=N(3,m,be,g),We=N(4,m,Fe,l),Ye=o&&P?{status:St(P.availability)}:void 0,ze=A.presence??Ye,Xe=A.avatar??{image:E?{src:E}:void 0,initials:E?void 0:f},Ve=A.name??C,Ze=A.primaryText??Ke,_e=A.secondaryText??Le,$e=A.tertiaryText??qe,et=A.quaternaryText??We;return I.jsx(j.Persona,{...A,name:Ve,primaryText:Ze,avatar:Xe,presence:ze,secondaryText:_e,tertiaryText:$e,quaternaryText:et})},_=typeof window>"u"?global:window,$="@griffel/";function He(t,e){return _[Symbol.for($+t)]||(_[Symbol.for($+t)]=e),_[Symbol.for($+t)]}const ie=He("DEBUG_RESET_CLASSES",{}),K=He("DEFINITION_LOOKUP_TABLE",{}),b="data-make-styles-bucket",mt="data-priority",It="r",F=7,D="___",De="_",Ee=process.env.NODE_ENV==="production"?D.length+F:D.length+F+De.length+F,jt=0,de=1;function ee(t){for(var e=0,n,s=0,r=t.length;r>=4;++s,r-=4)n=t.charCodeAt(s)&255|(t.charCodeAt(++s)&255)<<8|(t.charCodeAt(++s)&255)<<16|(t.charCodeAt(++s)&255)<<24,n=(n&65535)*1540483477+((n>>>16)*59797<<16),n^=n>>>24,e=(n&65535)*1540483477+((n>>>16)*59797<<16)^(e&65535)*1540483477+((e>>>16)*59797<<16);switch(r){case 3:e^=(t.charCodeAt(s+2)&255)<<16;case 2:e^=(t.charCodeAt(s+1)&255)<<8;case 1:e^=t.charCodeAt(s)&255,e=(e&65535)*1540483477+((e>>>16)*59797<<16)}return e^=e>>>13,e=(e&65535)*1540483477+((e>>>16)*59797<<16),((e^e>>>15)>>>0).toString(36)}function te(t){const e=t.length;if(e===F)return t;for(let n=e;n<F;n++)t+="0";return t}function Re(t,e,n=[]){return process.env.NODE_ENV==="production"?D+te(ee(t+e)):D+te(ee(t+e))+De+te(ee(n.join("")))}function Je(t,e){let n="",s="";for(const r in t){const o=t[r];if(o===0){s+=r+" ";continue}const c=Array.isArray(o),i=e==="rtl"?(c?o[1]:o)+" ":(c?o[0]:o)+" ";n+=i,s+=i}return[n.slice(0,-1),s.slice(0,-1)]}function ge(t,e){const n={};for(const s in t){const[r,o]=Je(t[s],e);if(o===""){n[s]="";continue}const c=Re(o,e),i=c+(r===""?"":" "+r);K[c]=[t[s],e],n[s]=i}return n}const W={};function Te(){let t=null,e="",n="";const s=new Array(arguments.length);let r="";for(let g=0;g<arguments.length;g++){const l=arguments[g];if(typeof l=="string"&&l!==""){const S=l.indexOf(D);if(S===-1)process.env.NODE_ENV!=="production"&&l.split(" ").forEach(A=>{A.startsWith(It)&&ie[A]&&(r?console.error(`mergeClasses(): a passed string contains multiple classes produced by makeResetStyles (${l} & ${e}, this will lead to non-deterministic behavior. Learn more:https://griffel.js.org/react/api/make-reset-styles#limitations
|
|
2
|
+
Source string: ${l}`):r=A)}),e+=l+" ";else{const A=l.substr(S,Ee);S>0&&(e+=l.slice(0,S)),n+=A,s[g]=A}process.env.NODE_ENV!=="production"&&l.indexOf(D,S+1)!==-1&&console.error(`mergeClasses(): a passed string contains multiple identifiers of atomic classes (classes that start with "${D}"), it's possible that passed classes were concatenated in a wrong way. Source string: ${l}`)}}if(n==="")return e.slice(0,-1);const o=W[n];if(o!==void 0)return e+o;const c=[];for(let g=0;g<arguments.length;g++){const l=s[g];if(l){const S=K[l];S?(c.push(S[jt]),process.env.NODE_ENV!=="production"&&t!==null&&t!==S[de]&&console.error(`mergeClasses(): a passed string contains an identifier (${l}) that has different direction (dir="${S[1]?"rtl":"ltr"}") setting than other classes. This is not supported. Source string: ${arguments[g]}`),t=S[de]):process.env.NODE_ENV!=="production"&&console.error(`mergeClasses(): a passed string contains an identifier (${l}) that does not match any entry in cache. Source string: ${arguments[g]}`)}}const i=Object.assign.apply(Object,[{}].concat(c)),[a,h]=Je(i,t),u=Re(h,t,s),d=u+" "+a;return W[n]=d,K[u]=[i,t],e+d}const fe={},he=new Set,Q={getChildrenSequences:t=>{const e=Object.keys(W).find(n=>W[n].startsWith(t));return e?e.split(D).filter(n=>n.length).map(n=>D+n):[]},addCSSRule:t=>{he.add(t)},addSequenceDetails:(t,e)=>{Object.entries(t).forEach(([n,s])=>{fe[s.substring(0,Ee)]={slotName:n,sourceURL:e}})},getCSSRules:()=>Array.from(he),getSequenceDetails:t=>fe[t]};function Se(t,e){return Array.isArray(t)?e==="rtl"?t[1]:t[0]:t||""}function Ct(t,e,n,s){const r=t[0],o=t[1];return Object.entries(r).map(([c,i])=>{const a=Se(i,o);let h;if(n&&e){const u=n.find(({className:d})=>d===a);!u&&e[0][c]?h=Se(e[0][c],e[1]):u&&e[0][c]?h=(s?s.filter(({debugClassNames:g})=>g.filter(({className:l})=>l===a).length>0).length>0:!1)?u.className:u.overriddenBy:(!u&&!e[0][c]||u&&!e[0][c])&&(h=void 0)}return{className:a,overriddenBy:h}})}function Ge(t,e){const n=K[t];if(n===void 0)return;const s=e?K[e.sequenceHash]:void 0,r=Ct(n,s,e?.debugClassNames,e?.children),o={sequenceHash:t,direction:n[1],children:[],debugClassNames:r};return Q.getChildrenSequences(o.sequenceHash).reverse().forEach(i=>{const a=Ge(i,o);a&&o.children.push(a)}),o.children.length||(o.rules={},o.debugClassNames.forEach(({className:i})=>{const a=Q.getSequenceDetails(t);a&&(o.slot=a.slotName,o.sourceURL=a.sourceURL);const h=Q.getCSSRules().find(u=>u.includes(i));o.rules[i]=h})),o}function xt(t){if(ie[t]===void 0)return;const s={sequenceHash:t,direction:"ltr",children:[],debugClassNames:[{className:t}]};s.rules={},s.slot="makeResetStyles()";const[{className:r}]=s.debugClassNames,o=Q.getCSSRules().filter(c=>c.includes(`.${r}`));return s.rules[r]=o.join(""),s}function Ot(t,e){const n=t?Ge(t):void 0,s=e?xt(e):void 0;return!n&&!s?void 0:n?s?{sequenceHash:n.sequenceHash+s.sequenceHash,direction:n.direction,children:[n,s],debugClassNames:[...n.debugClassNames,...s.debugClassNames]}:n:s}function Ht(t){const e=t.defaultView;if(!e||e.__GRIFFEL_DEVTOOLS__)return;const n={getInfo:s=>{let r,o;for(const c of s.classList)c.startsWith(D)&&(r=c),ie[c]&&(o=c);return Ot(r,o)}};Object.defineProperty(e,"__GRIFFEL_DEVTOOLS__",{configurable:!1,enumerable:!1,get(){return n}})}const Y=(()=>{var t;try{return!!(typeof window<"u"&&(!((t=window.sessionStorage)===null||t===void 0)&&t.getItem("__GRIFFEL_DEVTOOLS__")))}catch{return!1}})();function Dt(t){if(!Array.isArray(t))return[t];if(process.env.NODE_ENV!=="production"&&t.length>2)throw new Error("CSS Bucket contains an entry with greater than 2 items, please report this to https://github.com/microsoft/griffel/issues");return t}function Et(t,e,n,s){const r=[];if(s[b]=e,s[mt]=String(n),t)for(const c in s)t.setAttribute(c,s[c]);function o(c){return t?.sheet?t.sheet.insertRule(c,t.sheet.cssRules.length):r.push(c)}return{elementAttributes:s,insertRule:o,element:t,bucketName:e,cssRules(){return t?.sheet?Array.from(t.sheet.cssRules).map(c=>c.cssText):r}}}const Rt=["r","d","l","v","w","f","i","h","a","s","k","t","m","c"],pe=Rt.reduce((t,e,n)=>(t[e]=n,t),{});function Jt(t,e,n){return(t==="m"?t+e:t)+n}function Tt(t,e,n,s,r={}){var o,c;const i=t==="m",a=(o=r.m)!==null&&o!==void 0?o:"0",h=(c=r.p)!==null&&c!==void 0?c:0,u=Jt(t,a,h);if(!s.stylesheets[u]){const d=e&&e.createElement("style"),g=Et(d,t,h,Object.assign({},s.styleElementAttributes,i&&{media:a}));s.stylesheets[u]=g,e?.head&&d&&e.head.insertBefore(d,vt(e,n,t,s,r))}return s.stylesheets[u]}function Gt(t,e,n){var s,r;const o=e+((s=n.m)!==null&&s!==void 0?s:""),c=t.getAttribute(b)+((r=t.media)!==null&&r!==void 0?r:"");return o===c}function vt(t,e,n,s,r={}){var o,c;const i=pe[n],a=(o=r.m)!==null&&o!==void 0?o:"",h=(c=r.p)!==null&&c!==void 0?c:0;let u=A=>i-pe[A.getAttribute(b)],d=t.head.querySelectorAll(`[${b}]`);if(n==="m"){const A=t.head.querySelectorAll(`[${b}="${n}"]`);A.length&&(d=A,u=y=>s.compareMediaQueries(a,y.media))}const g=A=>Gt(A,n,r)?h-Number(A.getAttribute("data-priority")):u(A),l=d.length;let S=l-1;for(;S>=0;){const A=d.item(S);if(g(A)>0)return A.nextSibling;S--}return l>0?d.item(0):e?e.nextSibling:null}const Mt=["-moz-placeholder","-moz-focus-inner","-moz-focusring","-ms-input-placeholder","-moz-read-write","-moz-read-only"].join("|"),Qt=new RegExp(`:(${Mt})`);function ke(t,e){try{t.insertRule(e)}catch(n){process.env.NODE_ENV!=="production"&&!Qt.test(e)&&console.error(`There was a problem inserting the following rule: "${e}"`,n)}}let Ut=0;const Nt=(t,e)=>t<e?-1:t>e?1:0;function bt(t=typeof document>"u"?void 0:document,e={}){const{classNameHashSalt:n,unstable_filterCSSRule:s,insertionPoint:r,styleElementAttributes:o,compareMediaQueries:c=Nt}=e,i={classNameHashSalt:n,insertionCache:{},stylesheets:{},styleElementAttributes:Object.freeze(o),compareMediaQueries:c,id:`d${Ut++}`,insertCSSRules(a){for(const h in a){const u=a[h];for(let d=0,g=u.length;d<g;d++){const[l,S]=Dt(u[d]),A=Tt(h,t,r||null,i,S);i.insertionCache[l]||(i.insertionCache[l]=h,process.env.NODE_ENV!=="production"&&Y&&Q.addCSSRule(l),s?s(l)&&ke(A,l):ke(A,l))}}}};return t&&process.env.NODE_ENV!=="production"&&Y&&Ht(t),i}const ae="<unknown>";function Ft(t){return Wt(t)||Xt(t)||Zt(t)}const Kt=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\/|[a-z]:\\|\\\\).*?)?\)?\s*$/i,Lt=/^\s*at ()((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\/|[a-z]:\\|\\\\).*?)\s*$/i,qt=/\((\S*)\)/;function Wt(t){const e=Kt.exec(t)||Lt.exec(t);if(!e)return null;let n=e[2];const s=n&&n.indexOf("native")===0,r=n&&n.indexOf("eval")===0,o=qt.exec(n);return r&&o!=null&&(n=o[1]),{loc:s?null:e[2],name:e[1]||ae}}const Yt=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)\s*$/i,zt=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i;function Xt(t){const e=Yt.exec(t);if(!e)return null;let n=e[3];const s=n&&n.indexOf(" > eval")>-1,r=zt.exec(n);return s&&r!=null&&(n=r[1]),{loc:e[3],name:e[1]||ae}}const Vt=/^\s*(?:([^@]*)(?:\((.*?)\))?@)?(\S.*?)\s*$/i;function Zt(t){const e=Vt.exec(t);return e?{loc:e[3],name:e[1]||ae}:null}function _t(){const t=String(new Error().stack).split(`
|
|
3
|
+
`),e=$t(t);if(e===void 0)return;const n=Ft(e);return n?.loc}function $t(t){for(let e=t.length-1;e>=0;--e)if(t[e].includes("at getSourceURLfromError"))return t[e+3]}const en=()=>{const t={};return function(n,s){t[n.id]===void 0&&(n.insertCSSRules(s),t[n.id]=!0)}};function tn(t,e,n=en){const s=n();let r=null,o=null,c;process.env.NODE_ENV!=="production"&&Y&&(c=_t());function i(a){const{dir:h,renderer:u}=a,d=h==="ltr";d?r===null&&(r=ge(t,h)):o===null&&(o=ge(t,h)),s(u,e);const g=d?r:o;return process.env.NODE_ENV!=="production"&&Y&&Q.addSequenceDetails(g,c),g}return i}function nn(){return typeof window<"u"&&!!(window.document&&window.document.createElement)}const Pe=x.useInsertionEffect?x.useInsertionEffect:void 0,sn=()=>{const t={};return function(n,s){if(Pe&&nn()){Pe(()=>{n.insertCSSRules(s)},[n,s]);return}t[n.id]===void 0&&(n.insertCSSRules(s),t[n.id]=!0)}},rn=x.createContext(bt());function on(){return x.useContext(rn)}const cn=x.createContext("ltr");function an(){return x.useContext(cn)}function ve(t,e){const n=tn(t,e,sn);return function(){const r=an(),o=on();return n({dir:r,renderer:o})}}const Me=x.createContext(void 0),ln={};Me.Provider;const un=()=>{const t=x.useContext(Me);return t??ln},An=ve({root:{mc9l5x:"f1w7gpdv",Bg96gwp:"fez10in"},rtl:{Bz10aip:"f13rod7r"}},{d:[".f1w7gpdv{display:inline;}",".fez10in{line-height:0;}",".f13rod7r{transform:scaleX(-1);}"]}),dn=(t,e)=>{const{filled:n,title:s,primaryFill:r="currentColor",...o}=t,c={...o,fill:r},i=An(),a=un();return c.className=Te(i.root,e?.flipInRtl&&a?.textDirection==="rtl"&&i.rtl,c.className),s&&(c["aria-label"]=s),!c["aria-label"]&&!c["aria-labelledby"]?c["aria-hidden"]=!0:c.role="img",c},gn=ve({root:{B8gzw0y:"f1dd5bof"}},{m:[["@media (forced-colors: active){.f1dd5bof{forced-color-adjust:auto;}}",{m:"(forced-colors: active)"}]]}),fn="fui-Icon",hn=(t,e,n,s)=>{const o=x.forwardRef((c,i)=>{const a=gn(),h=dn(c,{flipInRtl:s?.flipInRtl}),u={...h,className:Te(fn,h.className,a.root),ref:i,width:e,height:e,viewBox:"0 0 20 20",xmlns:"http://www.w3.org/2000/svg"};return typeof n=="string"?x.createElement("svg",{...u,dangerouslySetInnerHTML:{__html:n}}):x.createElement("svg",u,...n.map(d=>x.createElement("path",{d,fill:u.fill})))});return o.displayName=t,o},Sn=hn("SearchRegular","1em",["M13.73 14.44a6.5 6.5 0 1 1 .7-.7l3.42 3.4a.5.5 0 0 1-.63.77l-.07-.06-3.42-3.41Zm-.71-.71A5.54 5.54 0 0 0 15 9.5a5.5 5.5 0 1 0-1.98 4.23Z"]),pn="id,displayName,mail,userPrincipalName,jobTitle,department",Qe=(t,e)=>{const n=oe(),s=X(),r=V(),o=e?.minChars??1,c=e?.maxResults??10,[i,a]=p.useState([]),[h,u]=p.useState(!1);return p.useEffect(()=>{if(!t||t.length<o){a([]),u(!1);return}let d=!1;const g=async()=>{u(!0);const S=t.replace(/"/g,"");try{if(Ce(s)){const A=await s.searchPeople(t,c);d||a(A)}else if(r==="SignedIn"&&n){const A=await n.api("/users").header("ConsistencyLevel","eventual").search(`"displayName:${S}" OR "mail:${S}" OR "userPrincipalName:${S}"`).select(pn).top(c).get();d||a(A.value??[])}else d||a([])}catch{d||a([])}finally{d||u(!1)}},l=setTimeout(()=>{g()},300);return()=>{d=!0,clearTimeout(l)}},[t,n,s,r,o,c]),{results:i,loading:h}},we="__no_results__",kn=50,ne=t=>t.displayName||t.mail||t.userPrincipalName||t.id,Pn=t=>t.mail??t.userPrincipalName??void 0,wn=({selectedPeople:t,defaultSelectedPeople:e,onSelectionChange:n,placeholder:s="Search for people...",maxPeople:r,searchMinChars:o=1,maxSearchResults:c=10,excludeUserIds:i=[],appearance:a,size:h,disabled:u})=>{const d=t!==void 0,[g,l]=p.useState(e??[]),S=d?t:g,[A,y]=p.useState(""),J=p.useMemo(()=>Array.from(new Set(i)),[i]),k=Math.min(c+J.length,kn),{results:O,loading:v}=Qe(A,{minChars:o,maxResults:k}),T=p.useMemo(()=>{const f=new Map;for(const B of S)f.set(B.id,B);for(const B of O)f.set(B.id,B);return f},[S,O]),P=p.useMemo(()=>S.map(f=>f.id),[S]),E=p.useCallback((f,B)=>{const m=B.selectedOptions.filter(w=>w!==we).map(w=>T.get(w)).filter(w=>w!==void 0);d||l(m),n?.(m),y("")},[d,n,T]),M=p.useCallback(f=>{y(f.target.value)},[]),H=r!==void 0&&S.length>=r,C=p.useMemo(()=>O.filter(f=>!P.includes(f.id)&&!i.includes(f.id)).slice(0,c),[O,P,i,c]);return I.jsxs(j.TagPicker,{onOptionSelect:E,selectedOptions:P,appearance:a,size:h,disabled:u,children:[I.jsxs(j.TagPickerControl,{expandIcon:I.jsx(Sn,{}),children:[I.jsx(j.TagPickerGroup,{children:S.map(f=>I.jsxs(j.InteractionTag,{value:f.id,shape:"rounded",children:[I.jsx(j.InteractionTagPrimary,{hasSecondaryAction:!0,media:I.jsx(j.Avatar,{name:f.displayName??void 0,initials:se(f.displayName??void 0),size:16}),children:ne(f)}),I.jsx(j.InteractionTagSecondary,{"aria-label":`Remove ${ne(f)}`})]},f.id))}),!H&&I.jsx(j.TagPickerInput,{value:A,onChange:M,placeholder:S.length===0?s:void 0,disabled:u})]}),I.jsxs(j.TagPickerList,{children:[A.length>=o&&!v&&C.length===0&&I.jsx(j.TagPickerOption,{value:we,text:"No people found",style:{pointerEvents:"none",color:"var(--colorNeutralForegroundDisabled)"},children:"No people found"}),C.map(f=>I.jsx(j.TagPickerOption,{value:f.id,media:I.jsx(j.Avatar,{name:f.displayName??void 0,initials:se(f.displayName??void 0),size:32}),secondaryContent:Pn(f),children:ne(f)},f.id))]})]})},yn="data:image/jpeg;base64,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",Bn=[{id:"00000000-0000-0000-0000-000000000001",displayName:"Adele Vance",mail:"adelev@contoso.com",userPrincipalName:"adelev@contoso.com",jobTitle:"Product Manager",department:"Marketing"},{id:"00000000-0000-0000-0000-000000000002",displayName:"Alex Wilber",mail:"alexw@contoso.com",userPrincipalName:"alexw@contoso.com",jobTitle:"Marketing Assistant",department:"Marketing"},{id:"00000000-0000-0000-0000-000000000003",displayName:"Diego Siciliani",mail:"diegosi@contoso.com",userPrincipalName:"diegosi@contoso.com",jobTitle:"HR Manager",department:"Human Resources"},{id:"00000000-0000-0000-0000-000000000004",displayName:"Grady Archie",mail:"gradya@contoso.com",userPrincipalName:"gradya@contoso.com",jobTitle:"Accountant",department:"Finance"},{id:"00000000-0000-0000-0000-000000000005",displayName:"Henrietta Mueller",mail:"henriettam@contoso.com",userPrincipalName:"henriettam@contoso.com",jobTitle:"Graphic Designer",department:"Creative"},{id:"00000000-0000-0000-0000-000000000006",displayName:"Isaiah Langer",mail:"isaiahl@contoso.com",userPrincipalName:"isaiahl@contoso.com",jobTitle:"Sales Rep",department:"Sales"},{id:"00000000-0000-0000-0000-000000000007",displayName:"Johanna Lorenz",mail:"johannal@contoso.com",userPrincipalName:"johannal@contoso.com",jobTitle:"Research Lead",department:"R&D"},{id:"00000000-0000-0000-0000-000000000008",displayName:"Joni Sherman",mail:"jonis@contoso.com",userPrincipalName:"jonis@contoso.com",jobTitle:"Paralegal",department:"Legal"},{id:"00000000-0000-0000-0000-000000000009",displayName:"Lee Gu",mail:"leeg@contoso.com",userPrincipalName:"leeg@contoso.com",jobTitle:"Director",department:"Engineering"},{id:"00000000-0000-0000-0000-000000000010",displayName:"Megan Bowen",mail:"meganb@contoso.com",userPrincipalName:"meganb@contoso.com",jobTitle:"Marketing Manager",department:"Marketing"}];class Ue{state="SignedOut";listeners=[];constructor(e){e?.autoSignIn&&(this.state="SignedIn")}getAccessToken(){return this.state!=="SignedIn"?Promise.reject(new Error("Not signed in")):Promise.resolve("mock-token")}async getPersonData(e){const n="Adele Vance",s=e.identifier&&e.identifier!=="me"?e.identifier:"adelev@contoso.com",r={id:"00000000-0000-0000-0000-000000000000",displayName:n,userPrincipalName:s,jobTitle:"Product Manager",department:"Marketing",officeLocation:"19/3106",mail:"adelev@contoso.com"},o={availability:"Available",activity:"Available",id:r.id,odataType:"#microsoft.graph.presence"};return{user:r,presence:e.fetchPresence?o:null,photoUrl:e.fetchPhoto?yn:null}}async searchPeople(e,n=10){const s=e.trim();if(!s)return[];const r=s.toLowerCase();return Bn.filter(o=>o.displayName?.toLowerCase().includes(r)||o.mail?.toLowerCase().includes(r)||o.userPrincipalName?.toLowerCase().includes(r)).slice(0,n)}async login(){this.state="SignedIn",this.emit()}async logout(){this.state="SignedOut",this.emit()}getState(){return this.state}onStateChanged(e){this.listeners.push(e)}removeStateChangedHandler(e){this.listeners=this.listeners.filter(n=>n!==e)}emit(){for(const e of this.listeners)try{e()}catch{}}}const mn=()=>new Ue({autoSignIn:!0});function In(t){return`See https://aka.ms/msal.js.errors#${t} for details`}class le extends Error{constructor(e,n,s){const r=n||(e?In(e):""),o=r?`${e}: ${r}`:e;super(o),Object.setPrototypeOf(this,le.prototype),this.errorCode=e||"",this.errorMessage=r||"",this.subError=s||"",this.name="AuthError"}setCorrelationId(e){this.correlationId=e}}class ue extends le{constructor(e,n,s,r,o,c,i,a){super(e,n,s),Object.setPrototypeOf(this,ue.prototype),this.timestamp=r||"",this.traceId=o||"",this.correlationId=c||"",this.claims=i||"",this.name="InteractionRequiredAuthError",this.errorNo=a}}class Ne extends Error{constructor(e){super(e),this.name="RedirectInProgressError"}}class jn{msalInstance;defaultScopes;account=null;state="Loading";listeners=[];constructor(e,n){this.msalInstance=e,this.defaultScopes=n}async initialize(){await this.msalInstance.initialize();const e=await this.msalInstance.handleRedirectPromise();if(e?.account){this.account=e.account,this.msalInstance.setActiveAccount(this.account),this.setState("SignedIn");return}const n=this.msalInstance.getActiveAccount(),s=this.msalInstance.getAllAccounts();this.account=n??s[0]??null,this.account?(this.msalInstance.setActiveAccount(this.account),this.setState("SignedIn")):this.setState("SignedOut")}async login(){const e={scopes:this.defaultScopes};await this.msalInstance.loginRedirect(e)}async logout(){const e=this.msalInstance.getActiveAccount()??this.account??void 0;this.account=null,this.msalInstance.setActiveAccount(null),this.setState("SignedOut"),await this.msalInstance.logoutRedirect({account:e})}async getAccessToken(e){const n=e&&e.length>0?e:this.defaultScopes,s=this.msalInstance.getActiveAccount()??this.account;if(!s)throw new Error("No active account. User must sign in first.");const r={scopes:n,account:s};try{return(await this.msalInstance.acquireTokenSilent(r)).accessToken}catch(o){if(o instanceof ue){const c={scopes:n,account:s};throw await this.msalInstance.acquireTokenRedirect(c),new Ne("Redirecting for interactive token acquisition.")}throw o}}getState(){return this.state}onStateChanged(e){this.listeners.push(e)}removeStateChangedHandler(e){this.listeners=this.listeners.filter(n=>n!==e)}setState(e){this.state=e,this.emit()}emit(){for(const e of this.listeners)try{e()}catch{}}}const Cn=6e4;function xn(t){const e=t.fetchFn??fetch;return async({ssoToken:n,scopes:s})=>{const r=await e(t.endpoint,{method:"POST",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json"},body:JSON.stringify({scopes:s})}),o=await r.json().catch(()=>({error:r.statusText||"Token exchange failed"}));if(!r.ok){const c=o?.error||o?.message||r.statusText;throw new Error(`Backend token exchange failed: ${c}`)}if(!o?.accessToken)throw new Error("Backend token exchange response did not include accessToken.");return{accessToken:o.accessToken,expiresAt:o.expiresAt}}}class On{defaultScopes;getTeamsSsoTokenFn;exchangeForGraphTokenFn;refreshSkewMs;state="SignedOut";listeners=[];tokenCache=new Map;constructor(e){if(!e.defaultScopes||e.defaultScopes.length===0)throw new Error("TeamsHostedProvider requires at least one default scope.");this.defaultScopes=[...new Set(e.defaultScopes)],this.getTeamsSsoTokenFn=e.getTeamsSsoToken,this.exchangeForGraphTokenFn=e.exchangeForGraphToken,this.refreshSkewMs=e.refreshSkewMs??Cn}async login(){try{await this.getAccessToken(),this.setState("SignedIn")}catch(e){throw this.clearCache(),this.setState("SignedOut"),e}}async logout(){this.clearCache(),this.setState("SignedOut")}async getAccessToken(e){const n=this.normalizeScopes(e),s=this.buildScopeKey(n),r=this.tokenCache.get(s);if(r&&this.isTokenValid(r))return r.accessToken;const o=await this.getTeamsSsoTokenFn(n);if(!o)throw new Error("Teams SSO token acquisition returned empty token.");const c=await this.exchangeForGraphTokenFn({ssoToken:o,scopes:n}),i=this.normalizeExchangedToken(c);return this.tokenCache.set(s,i),this.setState("SignedIn"),i.accessToken}getState(){return this.state}onStateChanged(e){this.listeners.push(e)}removeStateChangedHandler(e){this.listeners=this.listeners.filter(n=>n!==e)}normalizeScopes(e){const n=e&&e.length>0?e:this.defaultScopes,s=[...new Set(n.filter(Boolean))];if(s.length===0)throw new Error("At least one scope is required to request a Graph token.");return s}buildScopeKey(e){return[...e].sort().join(" ")}isTokenValid(e){return e.expiresAtMs?Date.now()+this.refreshSkewMs<e.expiresAtMs:!0}normalizeExchangedToken(e){if(typeof e=="string"){if(!e)throw new Error("Graph token exchange returned empty access token.");return{accessToken:e}}if(!e.accessToken)throw new Error("Graph token exchange returned empty access token.");return{accessToken:e.accessToken,expiresAtMs:this.toEpochMs(e.expiresAt)}}toEpochMs(e){if(e)return e instanceof Date?e.getTime():e}clearCache(){this.tokenCache.clear()}setState(e){this.state!==e&&(this.state=e,this.emit())}emit(){for(const e of this.listeners)try{e()}catch{}}}exports.GraphProvider=gt;exports.MockProvider=Ue;exports.MsalBrowserProvider=jn;exports.PeoplePicker=wn;exports.Person=Bt;exports.RedirectInProgressError=Ne;exports.TeamsHostedProvider=On;exports.createBackendTokenExchange=xn;exports.createMockSignedInProvider=mn;exports.isPeopleSearchProvider=Ce;exports.isPersonDataProvider=je;exports.useGraphClient=oe;exports.usePeopleSearch=Qe;exports.usePersonCacheOptions=Ie;exports.usePersonData=xe;exports.useProvider=X;exports.useProviderState=V;
|