@devsym/graph-toolkit-react 1.0.0-next.8 → 1.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/AGENTS.md +10 -0
  2. package/CONTRIBUTING.md +64 -0
  3. package/README.md +257 -0
  4. package/dist/components/People/People.d.ts +16 -0
  5. package/dist/components/People/People.d.ts.map +1 -0
  6. package/dist/components/People/People.types.d.ts +103 -0
  7. package/dist/components/People/People.types.d.ts.map +1 -0
  8. package/dist/components/People/index.d.ts +6 -0
  9. package/dist/components/People/index.d.ts.map +1 -0
  10. package/dist/components/PeoplePicker/PeoplePicker.d.ts +24 -0
  11. package/dist/components/PeoplePicker/PeoplePicker.d.ts.map +1 -0
  12. package/dist/components/PeoplePicker/PeoplePicker.types.d.ts +92 -0
  13. package/dist/components/PeoplePicker/PeoplePicker.types.d.ts.map +1 -0
  14. package/dist/components/PeoplePicker/index.d.ts +6 -0
  15. package/dist/components/PeoplePicker/index.d.ts.map +1 -0
  16. package/dist/components/Person/Person.d.ts.map +1 -1
  17. package/dist/components/Person/Person.types.d.ts +48 -0
  18. package/dist/components/Person/Person.types.d.ts.map +1 -1
  19. package/dist/components/Person/index.d.ts +1 -1
  20. package/dist/components/Person/index.d.ts.map +1 -1
  21. package/dist/hooks/usePeopleList.d.ts +74 -0
  22. package/dist/hooks/usePeopleList.d.ts.map +1 -0
  23. package/dist/hooks/usePeopleSearch.d.ts +42 -0
  24. package/dist/hooks/usePeopleSearch.d.ts.map +1 -0
  25. package/dist/hooks/usePersonData.d.ts.map +1 -1
  26. package/dist/index.d.ts +4 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +3 -1
  29. package/dist/index.mjs +1618 -631
  30. package/dist/providers/IPersonDataProvider.d.ts +62 -1
  31. package/dist/providers/IPersonDataProvider.d.ts.map +1 -1
  32. package/dist/providers/MockProvider.d.ts +3 -2
  33. package/dist/providers/MockProvider.d.ts.map +1 -1
  34. package/dist/providers/MsalBrowserProvider.d.ts +12 -0
  35. package/dist/providers/MsalBrowserProvider.d.ts.map +1 -1
  36. package/dist/utils/graph.d.ts +17 -0
  37. package/dist/utils/graph.d.ts.map +1 -1
  38. package/docs/assets/readme/banner.jpg +0 -0
  39. package/docs/assets/readme/banner.png +0 -0
  40. package/docs/assets/readme/provider-flow.svg +76 -0
  41. package/package.json +17 -15
  42. package/readme.md +0 -417
@@ -1,5 +1,6 @@
1
1
  /**
2
- * Person data provider interface for fetching user information, presence, and photos
2
+ * Person data provider interface for fetching user information, presence, and photos,
3
+ * and optionally searching for people.
3
4
  */
4
5
  import { Presence, User } from '@microsoft/microsoft-graph-types';
5
6
  import { IProvider } from './IProvider';
@@ -60,4 +61,64 @@ export interface IPersonDataProvider {
60
61
  * @returns True if the provider implements IPersonDataProvider
61
62
  */
62
63
  export declare const isPersonDataProvider: (provider: IProvider | null) => provider is IProvider & IPersonDataProvider;
64
+ /**
65
+ * Result item returned by a people search operation
66
+ */
67
+ export interface PeopleSearchResult {
68
+ /**
69
+ * The unique identifier for the person
70
+ */
71
+ id: string;
72
+ /**
73
+ * The person's first name.
74
+ */
75
+ givenName?: string | null;
76
+ /**
77
+ * The person's last name.
78
+ */
79
+ surname?: string | null;
80
+ /**
81
+ * The person's display name
82
+ */
83
+ displayName?: string | null;
84
+ /**
85
+ * The person's primary mail address
86
+ */
87
+ mail?: string | null;
88
+ /**
89
+ * The person's user principal name
90
+ */
91
+ userPrincipalName?: string | null;
92
+ /**
93
+ * The person's job title
94
+ */
95
+ jobTitle?: string | null;
96
+ /**
97
+ * The department the person belongs to
98
+ */
99
+ department?: string | null;
100
+ /**
101
+ * Optional profile photo URL for the person.
102
+ * When provided, UI components can render the avatar image without fetching it separately.
103
+ */
104
+ photoUrl?: string | null;
105
+ }
106
+ /**
107
+ * Optional interface that providers can implement to support people search
108
+ */
109
+ export interface IPeopleSearchProvider {
110
+ /**
111
+ * Search for people matching the given query string
112
+ * @param query - The search query (display name, email, or UPN fragment). An empty query may return initial suggestions.
113
+ * @param maxResults - Maximum number of results to return (default: 10)
114
+ * @returns Promise resolving to an array of matching people
115
+ */
116
+ searchPeople(query: string, maxResults?: number): Promise<PeopleSearchResult[]>;
117
+ }
118
+ /**
119
+ * Type guard to check if a provider implements the IPeopleSearchProvider interface
120
+ * @param provider - The provider to check
121
+ * @returns True if the provider implements IPeopleSearchProvider
122
+ */
123
+ export declare const isPeopleSearchProvider: (provider: IProvider | null) => provider is IProvider & IPeopleSearchProvider;
63
124
  //# sourceMappingURL=IPersonDataProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IPersonDataProvider.d.ts","sourceRoot":"","sources":["../../src/providers/IPersonDataProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB;;OAEG;IACH,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B;;OAEG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;CACxF;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,UAAU,SAAS,GAAG,IAAI,KACzB,QAAQ,IAAI,SAAS,GAAG,mBAM1B,CAAC"}
1
+ {"version":3,"file":"IPersonDataProvider.d.ts","sourceRoot":"","sources":["../../src/providers/IPersonDataProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB;;OAEG;IACH,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B;;OAEG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;CACxF;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,UAAU,SAAS,GAAG,IAAI,KACzB,QAAQ,IAAI,SAAS,GAAG,mBAM1B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;CACjF;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,UAAU,SAAS,GAAG,IAAI,KACzB,QAAQ,IAAI,SAAS,GAAG,qBAM1B,CAAC"}
@@ -2,8 +2,8 @@
2
2
  * MockProvider - simple in-memory provider for development and tests
3
3
  */
4
4
  import { IProvider, ProviderState } from './IProvider';
5
- import { IPersonDataProvider, ProviderPersonDataRequest, ProviderPersonDataResponse } from './IPersonDataProvider';
6
- export declare class MockProvider implements IProvider, IPersonDataProvider {
5
+ import { IPersonDataProvider, IPeopleSearchProvider, PeopleSearchResult, ProviderPersonDataRequest, ProviderPersonDataResponse } from './IPersonDataProvider';
6
+ export declare class MockProvider implements IProvider, IPersonDataProvider, IPeopleSearchProvider {
7
7
  private state;
8
8
  private listeners;
9
9
  constructor(options?: {
@@ -12,6 +12,7 @@ export declare class MockProvider implements IProvider, IPersonDataProvider {
12
12
  });
13
13
  getAccessToken(): Promise<string>;
14
14
  getPersonData(request: ProviderPersonDataRequest): Promise<ProviderPersonDataResponse>;
15
+ searchPeople(query: string, maxResults?: number): Promise<PeopleSearchResult[]>;
15
16
  login(): Promise<void>;
16
17
  logout(): Promise<void>;
17
18
  getState(): ProviderState;
@@ -1 +1 @@
1
- {"version":3,"file":"MockProvider.d.ts","sourceRoot":"","sources":["../../src/providers/MockProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,0BAA0B,EAC3B,MAAM,uBAAuB,CAAC;AAK/B,qBAAa,YAAa,YAAW,SAAS,EAAE,mBAAmB;IACjE,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,SAAS,CAAuB;gBAC5B,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAMnE,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAQ3B,aAAa,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IA+BtF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B,QAAQ,IAAI,aAAa;IAIzB,cAAc,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIzC,yBAAyB,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIpD,OAAO,CAAC,IAAI;CASb;AAED,eAAO,MAAM,0BAA0B,oBAA+C,CAAC"}
1
+ {"version":3,"file":"MockProvider.d.ts","sourceRoot":"","sources":["../../src/providers/MockProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,EAC3B,MAAM,uBAAuB,CAAC;AAgH/B,qBAAa,YAAa,YAAW,SAAS,EAAE,mBAAmB,EAAE,qBAAqB;IACxF,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,SAAS,CAAuB;gBAC5B,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAMnE,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAQ3B,aAAa,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IA2CtF,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,SAAK,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAe3E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B,QAAQ,IAAI,aAAa;IAIzB,cAAc,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIzC,yBAAyB,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIpD,OAAO,CAAC,IAAI;CASb;AAED,eAAO,MAAM,0BAA0B,oBAA+C,CAAC"}
@@ -3,6 +3,18 @@
3
3
  */
4
4
  import type { IPublicClientApplication } from '@azure/msal-browser';
5
5
  import { IProvider, ProviderState } from './IProvider';
6
+ /**
7
+ * Error indicating that an interactive redirect has been initiated and token acquisition
8
+ * will continue after navigation completes.
9
+ */
10
+ export declare class RedirectInProgressError extends Error {
11
+ /**
12
+ * Creates a new instance of RedirectInProgressError.
13
+ *
14
+ * @param message - A human-readable description of the redirect state.
15
+ */
16
+ constructor(message: string);
17
+ }
6
18
  export declare class MsalBrowserProvider implements IProvider {
7
19
  private readonly msalInstance;
8
20
  private readonly defaultScopes;
@@ -1 +1 @@
1
- {"version":3,"file":"MsalBrowserProvider.d.ts","sourceRoot":"","sources":["../../src/providers/MsalBrowserProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAe,wBAAwB,EAA+B,MAAM,qBAAqB,CAAC;AAC9G,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEvD,qBAAa,mBAAoB,YAAW,SAAS;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2B;IACxD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAW;IACzC,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,SAAS,CAAyB;gBAE9B,YAAY,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,EAAE;IAKrE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAOvB,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IA8BxD,QAAQ,IAAI,aAAa;IAIzB,cAAc,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIzC,yBAAyB,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIpD,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,IAAI;CASb"}
1
+ {"version":3,"file":"MsalBrowserProvider.d.ts","sourceRoot":"","sources":["../../src/providers/MsalBrowserProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAe,wBAAwB,EAAkC,MAAM,qBAAqB,CAAC;AACjH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEvD;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD;;;;OAIG;gBACS,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,mBAAoB,YAAW,SAAS;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2B;IACxD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAW;IACzC,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,SAAS,CAAyB;gBAE9B,YAAY,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,EAAE;IAKrE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAWvB,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IA8BxD,QAAQ,IAAI,aAAa;IAIzB,cAAc,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIzC,yBAAyB,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIpD,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,IAAI;CASb"}
@@ -11,4 +11,21 @@ export declare const createGraphClient: (provider: IProvider) => Client;
11
11
  * Extract initials from a display name
12
12
  */
13
13
  export declare const getInitials: (displayName?: string) => string;
14
+ /**
15
+ * Convert a Microsoft Graph photo response into a data URL string when possible.
16
+ *
17
+ * The Graph SDK may return a string, `Blob`, or `ArrayBuffer` depending on the
18
+ * environment and request adapter. Unsupported response shapes resolve to `null`.
19
+ *
20
+ * @param photoResponse - Raw response returned from the Graph photo endpoint
21
+ * @returns A data URL string or `null` when the response cannot be converted
22
+ */
23
+ export declare const photoResponseToDataUrl: (photoResponse: unknown) => Promise<string | null>;
24
+ /**
25
+ * Encode a dynamic Microsoft Graph path segment for safe interpolation into request URLs.
26
+ *
27
+ * @param value - Raw path segment value such as a user identifier or group ID
28
+ * @returns The trimmed and URL-encoded path segment
29
+ */
30
+ export declare const encodeGraphPathSegment: (value: string) => string;
14
31
  //# sourceMappingURL=graph.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/utils/graph.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,UAAU,SAAS,KAAG,MAWvD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,cAAc,MAAM,KAAG,MASlD,CAAC"}
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/utils/graph.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,UAAU,SAAS,KAAG,MAWvD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,cAAc,MAAM,KAAG,MASlD,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,GAAU,eAAe,OAAO,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CA0B1F,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO,MAAM,KAAG,MAA0C,CAAC"}
Binary file
Binary file
@@ -0,0 +1,76 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1100" height="430" viewBox="0 0 1100 430" role="img" aria-labelledby="title desc">
2
+ <title id="title">Graph Toolkit React provider flow</title>
3
+ <desc id="desc">A diagram showing React components inside GraphProvider using MockProvider, MsalBrowserProvider, TeamsHostedProvider, or a custom provider to access Microsoft Graph.</desc>
4
+ <defs>
5
+ <marker id="arrow" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto" markerUnits="strokeWidth">
6
+ <path d="M 0 0 L 10 5 L 0 10 z" fill="#64748b"/>
7
+ </marker>
8
+ <filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
9
+ <feDropShadow dx="0" dy="8" stdDeviation="12" flood-color="#111827" flood-opacity="0.12"/>
10
+ </filter>
11
+ </defs>
12
+
13
+ <rect width="1100" height="430" fill="#f7f9fb"/>
14
+
15
+ <g transform="translate(58 54)">
16
+ <rect width="238" height="300" rx="8" fill="#ffffff" stroke="#d1d5db" filter="url(#shadow)"/>
17
+ <text x="26" y="42" font-family="Segoe UI, Arial, sans-serif" font-size="18" font-weight="600" fill="#111827">React application</text>
18
+ <text x="26" y="70" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#4b5563">Components render normal React UI</text>
19
+
20
+ <rect x="26" y="104" width="186" height="44" rx="6" fill="#eef6ff" stroke="#b3d6f2"/>
21
+ <text x="48" y="132" font-family="Segoe UI, Arial, sans-serif" font-size="14" font-weight="600" fill="#0f4c81">Person</text>
22
+
23
+ <rect x="26" y="164" width="186" height="44" rx="6" fill="#eefcf7" stroke="#b7ead7"/>
24
+ <text x="48" y="192" font-family="Segoe UI, Arial, sans-serif" font-size="14" font-weight="600" fill="#0f6b50">People</text>
25
+
26
+ <rect x="26" y="224" width="186" height="44" rx="6" fill="#fff7ed" stroke="#fed7aa"/>
27
+ <text x="48" y="252" font-family="Segoe UI, Arial, sans-serif" font-size="14" font-weight="600" fill="#9a3412">PeoplePicker</text>
28
+ </g>
29
+
30
+ <g transform="translate(378 86)">
31
+ <rect width="344" height="236" rx="8" fill="#111827" filter="url(#shadow)"/>
32
+ <text x="28" y="44" font-family="Segoe UI, Arial, sans-serif" font-size="20" font-weight="600" fill="#ffffff">GraphProvider</text>
33
+ <text x="28" y="74" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#d1d5db">One provider instance for token and state</text>
34
+
35
+ <rect x="28" y="104" width="132" height="38" rx="6" fill="#ffffff" fill-opacity="0.08" stroke="#374151"/>
36
+ <text x="48" y="128" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#e5e7eb">MockProvider</text>
37
+
38
+ <rect x="184" y="104" width="132" height="38" rx="6" fill="#ffffff" fill-opacity="0.08" stroke="#374151"/>
39
+ <text x="202" y="128" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#e5e7eb">MSAL browser</text>
40
+
41
+ <rect x="28" y="160" width="132" height="38" rx="6" fill="#ffffff" fill-opacity="0.08" stroke="#374151"/>
42
+ <text x="47" y="184" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#e5e7eb">Teams hosted</text>
43
+
44
+ <rect x="184" y="160" width="132" height="38" rx="6" fill="#ffffff" fill-opacity="0.08" stroke="#374151"/>
45
+ <text x="203" y="184" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#e5e7eb">Custom auth</text>
46
+ </g>
47
+
48
+ <g transform="translate(804 54)">
49
+ <rect width="238" height="300" rx="8" fill="#ffffff" stroke="#d1d5db" filter="url(#shadow)"/>
50
+ <text x="26" y="42" font-family="Segoe UI, Arial, sans-serif" font-size="18" font-weight="600" fill="#111827">Microsoft Graph</text>
51
+ <text x="26" y="70" font-family="Segoe UI, Arial, sans-serif" font-size="13" fill="#4b5563">Scoped user and directory data</text>
52
+
53
+ <circle cx="72" cy="128" r="28" fill="#0f6cbd"/>
54
+ <text x="72" y="138" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif" font-size="22" font-weight="600" fill="#ffffff">U</text>
55
+ <text x="118" y="124" font-family="Segoe UI, Arial, sans-serif" font-size="14" font-weight="600" fill="#111827">Users</text>
56
+ <text x="118" y="146" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#6b7280">profile and photo</text>
57
+
58
+ <circle cx="72" cy="200" r="28" fill="#13a10e"/>
59
+ <text x="72" y="210" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif" font-size="22" font-weight="600" fill="#ffffff">P</text>
60
+ <text x="118" y="196" font-family="Segoe UI, Arial, sans-serif" font-size="14" font-weight="600" fill="#111827">Presence</text>
61
+ <text x="118" y="218" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#6b7280">availability state</text>
62
+
63
+ <circle cx="72" cy="272" r="28" fill="#8764b8"/>
64
+ <text x="72" y="282" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif" font-size="22" font-weight="600" fill="#ffffff">G</text>
65
+ <text x="118" y="268" font-family="Segoe UI, Arial, sans-serif" font-size="14" font-weight="600" fill="#111827">Groups</text>
66
+ <text x="118" y="290" font-family="Segoe UI, Arial, sans-serif" font-size="12" fill="#6b7280">members and lists</text>
67
+ </g>
68
+
69
+ <line x1="318" y1="204" x2="356" y2="204" stroke="#64748b" stroke-width="3" marker-end="url(#arrow)"/>
70
+ <line x1="724" y1="204" x2="780" y2="204" stroke="#64748b" stroke-width="3" marker-end="url(#arrow)"/>
71
+
72
+ <g transform="translate(396 358)">
73
+ <rect width="308" height="42" rx="8" fill="#e8f2ff" stroke="#b3d6f2"/>
74
+ <text x="24" y="27" font-family="Segoe UI, Arial, sans-serif" font-size="14" fill="#0f4c81">Keep auth outside UI components</text>
75
+ </g>
76
+ </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devsym/graph-toolkit-react",
3
- "version": "1.0.0-next.8",
3
+ "version": "1.1.0-beta.0",
4
4
  "description": "React components for Microsoft Graph powered by Fluent UI",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -16,7 +16,8 @@
16
16
  "dist",
17
17
  "README.md",
18
18
  "AGENTS.md",
19
- "MGT_MIGRATION.md",
19
+ "CONTRIBUTING.md",
20
+ "docs/assets/readme",
20
21
  "LICENSE"
21
22
  ],
22
23
  "scripts": {
@@ -51,7 +52,7 @@
51
52
  },
52
53
  "publishConfig": {
53
54
  "access": "public",
54
- "tag": "next"
55
+ "tag": "beta"
55
56
  },
56
57
  "peerDependencies": {
57
58
  "@azure/msal-browser": "^4.0.0 || ^5.0.0",
@@ -69,33 +70,34 @@
69
70
  "@microsoft/microsoft-graph-types": "^2.40.0"
70
71
  },
71
72
  "devDependencies": {
72
- "@changesets/cli": "^2.29.7",
73
73
  "@azure/msal-browser": "^5.2.0",
74
+ "@changesets/cli": "^2.29.7",
74
75
  "@fluentui/react-components": "^9.72.6",
75
- "@storybook/addon-a11y": "^10.0.6",
76
- "@storybook/addon-docs": "^10.0.6",
77
- "@storybook/addon-links": "^10.0.6",
78
- "@storybook/react-vite": "^10.0.6",
76
+ "@storybook/addon-a11y": "^10.3.4",
77
+ "@storybook/addon-docs": "^10.3.4",
78
+ "@storybook/addon-links": "^10.3.4",
79
+ "@storybook/react-vite": "^10.3.4",
80
+ "@testing-library/dom": "^10.4.1",
79
81
  "@testing-library/react": "^16.3.0",
80
82
  "@types/react": "^18.2.0",
81
83
  "@types/react-dom": "^18.2.0",
82
84
  "@typescript-eslint/eslint-plugin": "^8.46.3",
83
85
  "@typescript-eslint/parser": "^8.46.3",
84
- "@vitejs/plugin-react": "^5.1.0",
86
+ "@vitejs/plugin-react": "^6.0.0",
85
87
  "eslint": "^9.39.1",
86
88
  "eslint-config-prettier": "^10.1.8",
87
89
  "eslint-plugin-react": "^7.33.2",
88
90
  "eslint-plugin-react-hooks": "^7.0.1",
89
- "eslint-plugin-storybook": "^10.2.8",
91
+ "eslint-plugin-storybook": "^10.3.4",
90
92
  "globals": "^17.3.0",
91
- "jsdom": "^27.1.0",
93
+ "jsdom": "^29.0.2",
92
94
  "prettier": "^3.2.5",
93
95
  "react": "^18.2.0",
94
96
  "react-dom": "^18.2.0",
95
- "storybook": "^10.0.6",
97
+ "storybook": "^10.3.4",
96
98
  "typescript": "^5.9.3",
97
- "vite": "^7.2.2",
99
+ "vite": "^8.0.5",
98
100
  "vite-plugin-dts": "^4.5.4",
99
- "vitest": "^4.0.18"
101
+ "vitest": "^4.1.2"
100
102
  }
101
- }
103
+ }