@okta/odyssey-react-mui 1.27.0 → 1.28.1

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 (221) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/{Button.js → Buttons/BaseButton.js} +11 -10
  3. package/dist/Buttons/BaseButton.js.map +1 -0
  4. package/dist/{MenuButton.js → Buttons/BaseMenuButton.js} +30 -10
  5. package/dist/Buttons/BaseMenuButton.js.map +1 -0
  6. package/dist/Buttons/Button.js +24 -0
  7. package/dist/Buttons/Button.js.map +1 -0
  8. package/dist/Buttons/ButtonContext.js.map +1 -0
  9. package/dist/Buttons/MenuButton.js +25 -0
  10. package/dist/Buttons/MenuButton.js.map +1 -0
  11. package/dist/Buttons/MenuContext.js.map +1 -0
  12. package/dist/Buttons/MenuItem.js.map +1 -0
  13. package/dist/Buttons/index.js +18 -0
  14. package/dist/Buttons/index.js.map +1 -0
  15. package/dist/Card.js +1 -2
  16. package/dist/Card.js.map +1 -1
  17. package/dist/DataTable/DataTable.js +1 -2
  18. package/dist/DataTable/DataTable.js.map +1 -1
  19. package/dist/DataTable/DataTableRowActions.js +1 -2
  20. package/dist/DataTable/DataTableRowActions.js.map +1 -1
  21. package/dist/DataTable/DataTableSettings.js +1 -2
  22. package/dist/DataTable/DataTableSettings.js.map +1 -1
  23. package/dist/Dialog.js +1 -1
  24. package/dist/Dialog.js.map +1 -1
  25. package/dist/Drawer.js +1 -1
  26. package/dist/Drawer.js.map +1 -1
  27. package/dist/FileUploader/FileUploader.js +1 -1
  28. package/dist/FileUploader/FileUploader.js.map +1 -1
  29. package/dist/Form.js.map +1 -1
  30. package/dist/Pagination/Pagination.js +1 -1
  31. package/dist/Pagination/Pagination.js.map +1 -1
  32. package/dist/Toast.js +1 -1
  33. package/dist/Toast.js.map +1 -1
  34. package/dist/index.js +1 -3
  35. package/dist/index.js.map +1 -1
  36. package/dist/index.scss +1 -1
  37. package/dist/labs/AppSwitcher/AppSwitcher.js +76 -0
  38. package/dist/labs/AppSwitcher/AppSwitcher.js.map +1 -0
  39. package/dist/labs/AppSwitcher/AppSwitcherApp.js +112 -0
  40. package/dist/labs/AppSwitcher/AppSwitcherApp.js.map +1 -0
  41. package/dist/labs/{SideNav → AppSwitcher}/OktaAura.js +16 -3
  42. package/dist/labs/AppSwitcher/OktaAura.js.map +1 -0
  43. package/dist/labs/AppSwitcher/index.js +13 -0
  44. package/dist/labs/AppSwitcher/index.js.map +1 -0
  45. package/dist/labs/AppTile.js +102 -65
  46. package/dist/labs/AppTile.js.map +1 -1
  47. package/dist/labs/DataFilters.js +1 -1
  48. package/dist/labs/DataFilters.js.map +1 -1
  49. package/dist/labs/DataTable.js.map +1 -1
  50. package/dist/labs/DataTablePagination.js +1 -1
  51. package/dist/labs/DataTablePagination.js.map +1 -1
  52. package/dist/labs/DataView/BulkActionsMenu.js +1 -2
  53. package/dist/labs/DataView/BulkActionsMenu.js.map +1 -1
  54. package/dist/labs/DataView/DataCard.js +53 -42
  55. package/dist/labs/DataView/DataCard.js.map +1 -1
  56. package/dist/labs/DataView/DataView.js +1 -1
  57. package/dist/labs/DataView/DataView.js.map +1 -1
  58. package/dist/labs/DataView/LayoutSwitcher.js +1 -2
  59. package/dist/labs/DataView/LayoutSwitcher.js.map +1 -1
  60. package/dist/labs/DataView/RowActions.js +1 -1
  61. package/dist/labs/DataView/RowActions.js.map +1 -1
  62. package/dist/labs/DataView/TableLayoutContent.js +1 -2
  63. package/dist/labs/DataView/TableLayoutContent.js.map +1 -1
  64. package/dist/labs/DataView/TableSettings.js +1 -2
  65. package/dist/labs/DataView/TableSettings.js.map +1 -1
  66. package/dist/labs/DatePicker.js +1 -1
  67. package/dist/labs/DatePicker.js.map +1 -1
  68. package/dist/labs/SideNav/SideNav.js +5 -4
  69. package/dist/labs/SideNav/SideNav.js.map +1 -1
  70. package/dist/labs/TopNav/UserProfile.js +16 -3
  71. package/dist/labs/TopNav/UserProfile.js.map +1 -1
  72. package/dist/labs/TopNav/UserProfileMenuButton.js +41 -0
  73. package/dist/labs/TopNav/UserProfileMenuButton.js.map +1 -0
  74. package/dist/labs/TopNav/index.js +1 -0
  75. package/dist/labs/TopNav/index.js.map +1 -1
  76. package/dist/labs/UiShell/UiShell.js +6 -5
  77. package/dist/labs/UiShell/UiShell.js.map +1 -1
  78. package/dist/labs/UiShell/UiShellContent.js +53 -13
  79. package/dist/labs/UiShell/UiShellContent.js.map +1 -1
  80. package/dist/labs/UiShell/renderUiShell.js +4 -0
  81. package/dist/labs/UiShell/renderUiShell.js.map +1 -1
  82. package/dist/labs/index.js +1 -0
  83. package/dist/labs/index.js.map +1 -1
  84. package/dist/src/{Button.d.ts → Buttons/BaseButton.d.ts} +12 -34
  85. package/dist/src/Buttons/BaseButton.d.ts.map +1 -0
  86. package/dist/src/{MenuButton.d.ts → Buttons/BaseMenuButton.d.ts} +37 -14
  87. package/dist/src/Buttons/BaseMenuButton.d.ts.map +1 -0
  88. package/dist/src/Buttons/Button.d.ts +16 -0
  89. package/dist/src/Buttons/Button.d.ts.map +1 -0
  90. package/dist/src/Buttons/ButtonContext.d.ts.map +1 -0
  91. package/dist/src/Buttons/MenuButton.d.ts +17 -0
  92. package/dist/src/Buttons/MenuButton.d.ts.map +1 -0
  93. package/dist/src/Buttons/MenuContext.d.ts.map +1 -0
  94. package/dist/src/{MenuItem.d.ts → Buttons/MenuItem.d.ts} +1 -1
  95. package/dist/src/Buttons/MenuItem.d.ts.map +1 -0
  96. package/dist/src/Buttons/index.d.ts +18 -0
  97. package/dist/src/Buttons/index.d.ts.map +1 -0
  98. package/dist/src/Card.d.ts +1 -2
  99. package/dist/src/Card.d.ts.map +1 -1
  100. package/dist/src/DataTable/DataTable.d.ts +1 -1
  101. package/dist/src/DataTable/DataTable.d.ts.map +1 -1
  102. package/dist/src/DataTable/DataTableRowActions.d.ts +1 -2
  103. package/dist/src/DataTable/DataTableRowActions.d.ts.map +1 -1
  104. package/dist/src/DataTable/DataTableSettings.d.ts.map +1 -1
  105. package/dist/src/Dialog.d.ts +1 -1
  106. package/dist/src/Dialog.d.ts.map +1 -1
  107. package/dist/src/Drawer.d.ts +1 -1
  108. package/dist/src/Drawer.d.ts.map +1 -1
  109. package/dist/src/Form.d.ts +1 -1
  110. package/dist/src/Form.d.ts.map +1 -1
  111. package/dist/src/index.d.ts +1 -3
  112. package/dist/src/index.d.ts.map +1 -1
  113. package/dist/src/labs/AppSwitcher/AppSwitcher.d.ts +20 -0
  114. package/dist/src/labs/AppSwitcher/AppSwitcher.d.ts.map +1 -0
  115. package/dist/src/labs/AppSwitcher/AppSwitcherApp.d.ts +24 -0
  116. package/dist/src/labs/AppSwitcher/AppSwitcherApp.d.ts.map +1 -0
  117. package/dist/src/labs/AppSwitcher/OktaAura.d.ts.map +1 -0
  118. package/dist/src/labs/AppSwitcher/index.d.ts +13 -0
  119. package/dist/src/labs/AppSwitcher/index.d.ts.map +1 -0
  120. package/dist/src/labs/AppTile.d.ts +6 -4
  121. package/dist/src/labs/AppTile.d.ts.map +1 -1
  122. package/dist/src/labs/DataTable.d.ts +1 -1
  123. package/dist/src/labs/DataTable.d.ts.map +1 -1
  124. package/dist/src/labs/DataView/BulkActionsMenu.d.ts.map +1 -1
  125. package/dist/src/labs/DataView/DataCard.d.ts +1 -2
  126. package/dist/src/labs/DataView/DataCard.d.ts.map +1 -1
  127. package/dist/src/labs/DataView/LayoutSwitcher.d.ts.map +1 -1
  128. package/dist/src/labs/DataView/RowActions.d.ts +1 -2
  129. package/dist/src/labs/DataView/RowActions.d.ts.map +1 -1
  130. package/dist/src/labs/DataView/TableLayoutContent.d.ts.map +1 -1
  131. package/dist/src/labs/DataView/TableSettings.d.ts.map +1 -1
  132. package/dist/src/labs/SideNav/SideNav.d.ts.map +1 -1
  133. package/dist/src/labs/TopNav/UserProfile.d.ts +5 -1
  134. package/dist/src/labs/TopNav/UserProfile.d.ts.map +1 -1
  135. package/dist/src/labs/TopNav/UserProfileMenuButton.d.ts +17 -0
  136. package/dist/src/labs/TopNav/UserProfileMenuButton.d.ts.map +1 -0
  137. package/dist/src/labs/TopNav/index.d.ts +1 -0
  138. package/dist/src/labs/TopNav/index.d.ts.map +1 -1
  139. package/dist/src/labs/UiShell/UiShell.d.ts +2 -2
  140. package/dist/src/labs/UiShell/UiShell.d.ts.map +1 -1
  141. package/dist/src/labs/UiShell/UiShellContent.d.ts +19 -2
  142. package/dist/src/labs/UiShell/UiShellContent.d.ts.map +1 -1
  143. package/dist/src/labs/UiShell/renderUiShell.d.ts +2 -2
  144. package/dist/src/labs/UiShell/renderUiShell.d.ts.map +1 -1
  145. package/dist/src/labs/index.d.ts +1 -0
  146. package/dist/src/labs/index.d.ts.map +1 -1
  147. package/dist/src/theme/components.d.ts.map +1 -1
  148. package/dist/src/web-component/renderReactInWebComponent.d.ts +2 -2
  149. package/dist/src/web-component/renderReactInWebComponent.d.ts.map +1 -1
  150. package/dist/theme/components.js +25 -27
  151. package/dist/theme/components.js.map +1 -1
  152. package/dist/tsconfig.production.tsbuildinfo +1 -1
  153. package/dist/web-component/renderReactInWebComponent.js +6 -7
  154. package/dist/web-component/renderReactInWebComponent.js.map +1 -1
  155. package/package.json +3 -3
  156. package/src/{Button.tsx → Buttons/BaseButton.tsx} +48 -68
  157. package/src/{MenuButton.tsx → Buttons/BaseMenuButton.tsx} +94 -32
  158. package/src/Buttons/Button.tsx +30 -0
  159. package/src/Buttons/MenuButton.tsx +35 -0
  160. package/src/{MenuItem.tsx → Buttons/MenuItem.tsx} +1 -1
  161. package/src/Buttons/index.ts +22 -0
  162. package/src/Card.tsx +1 -3
  163. package/src/DataTable/DataTable.tsx +1 -2
  164. package/src/DataTable/DataTableRowActions.tsx +1 -3
  165. package/src/DataTable/DataTableSettings.tsx +1 -2
  166. package/src/Dialog.tsx +1 -1
  167. package/src/Drawer.tsx +1 -1
  168. package/src/FileUploader/FileUploader.tsx +1 -1
  169. package/src/Form.tsx +1 -1
  170. package/src/Pagination/Pagination.test.tsx +58 -36
  171. package/src/Pagination/Pagination.tsx +1 -1
  172. package/src/Toast.tsx +1 -1
  173. package/src/index.ts +1 -3
  174. package/src/labs/AppSwitcher/AppSwitcher.tsx +94 -0
  175. package/src/labs/AppSwitcher/AppSwitcherApp.tsx +146 -0
  176. package/src/labs/{SideNav → AppSwitcher}/OktaAura.tsx +19 -4
  177. package/src/labs/AppSwitcher/index.ts +13 -0
  178. package/src/labs/AppTile.tsx +171 -85
  179. package/src/labs/DataFilters.tsx +1 -1
  180. package/src/labs/DataTable.tsx +1 -1
  181. package/src/labs/DataTablePagination.tsx +1 -1
  182. package/src/labs/DataView/BulkActionsMenu.tsx +1 -2
  183. package/src/labs/DataView/DataCard.tsx +56 -31
  184. package/src/labs/DataView/DataView.tsx +1 -1
  185. package/src/labs/DataView/LayoutSwitcher.tsx +1 -2
  186. package/src/labs/DataView/RowActions.tsx +1 -3
  187. package/src/labs/DataView/TableLayoutContent.tsx +1 -2
  188. package/src/labs/DataView/TableSettings.tsx +1 -2
  189. package/src/labs/DatePicker.tsx +1 -1
  190. package/src/labs/SideNav/SideNav.tsx +10 -4
  191. package/src/labs/TopNav/UserProfile.tsx +26 -2
  192. package/src/labs/TopNav/UserProfileMenuButton.tsx +57 -0
  193. package/src/labs/TopNav/index.ts +1 -0
  194. package/src/labs/UiShell/UiShell.test.tsx +23 -38
  195. package/src/labs/UiShell/UiShell.tsx +14 -6
  196. package/src/labs/UiShell/UiShellContent.tsx +85 -16
  197. package/src/labs/UiShell/renderUiShell.test.tsx +21 -15
  198. package/src/labs/UiShell/renderUiShell.tsx +8 -1
  199. package/src/labs/index.ts +1 -0
  200. package/src/theme/components.tsx +25 -28
  201. package/src/web-component/renderReactInWebComponent.ts +10 -5
  202. package/dist/Button.js.map +0 -1
  203. package/dist/ButtonContext.js.map +0 -1
  204. package/dist/MenuButton.js.map +0 -1
  205. package/dist/MenuContext.js.map +0 -1
  206. package/dist/MenuItem.js.map +0 -1
  207. package/dist/labs/SideNav/OktaAura.js.map +0 -1
  208. package/dist/src/Button.d.ts.map +0 -1
  209. package/dist/src/ButtonContext.d.ts.map +0 -1
  210. package/dist/src/MenuButton.d.ts.map +0 -1
  211. package/dist/src/MenuContext.d.ts.map +0 -1
  212. package/dist/src/MenuItem.d.ts.map +0 -1
  213. package/dist/src/labs/SideNav/OktaAura.d.ts.map +0 -1
  214. /package/dist/{ButtonContext.js → Buttons/ButtonContext.js} +0 -0
  215. /package/dist/{MenuContext.js → Buttons/MenuContext.js} +0 -0
  216. /package/dist/{MenuItem.js → Buttons/MenuItem.js} +0 -0
  217. /package/dist/src/{ButtonContext.d.ts → Buttons/ButtonContext.d.ts} +0 -0
  218. /package/dist/src/{MenuContext.d.ts → Buttons/MenuContext.d.ts} +0 -0
  219. /package/dist/src/labs/{SideNav → AppSwitcher}/OktaAura.d.ts +0 -0
  220. /package/src/{ButtonContext.tsx → Buttons/ButtonContext.tsx} +0 -0
  221. /package/src/{MenuContext.ts → Buttons/MenuContext.ts} +0 -0
@@ -21,7 +21,7 @@ import {
21
21
  import styled from "@emotion/styled";
22
22
  import { useTranslation } from "react-i18next";
23
23
 
24
- import { Button } from "../Button";
24
+ import { Button } from "../Buttons";
25
25
  import { UploadIcon } from "../icons.generated";
26
26
  import { Field, RenderFieldComponentProps } from "../Field";
27
27
  import { FieldComponentProps } from "../FieldComponentProps";
package/src/Form.tsx CHANGED
@@ -13,7 +13,7 @@
13
13
  import { FormEventHandler, memo, ReactElement } from "react";
14
14
  import styled from "@emotion/styled";
15
15
 
16
- import { Button } from "./Button";
16
+ import { Button } from "./Buttons";
17
17
  import { Callout } from "./Callout";
18
18
  import { FieldComponentProps } from "./FieldComponentProps";
19
19
  import type { HtmlProps } from "./HtmlProps";
@@ -10,13 +10,15 @@
10
10
  * See the License for the specific language governing permissions and limitations under the License.
11
11
  */
12
12
 
13
- import { fireEvent, render, screen, waitFor } from "@testing-library/react";
13
+ import { render, waitFor, within } from "@testing-library/react";
14
+ import { userEvent } from "@testing-library/user-event";
14
15
  import { Pagination } from "./Pagination";
15
16
 
16
17
  describe("Pagination", () => {
17
18
  it("renders the expected controls in 'paged' variant", () => {
18
19
  const onPaginationChange = jest.fn();
19
- render(
20
+
21
+ const { container } = render(
20
22
  <Pagination
21
23
  currentPageLabel="Page"
22
24
  nextLabel="Next page"
@@ -32,19 +34,24 @@ describe("Pagination", () => {
32
34
  />,
33
35
  );
34
36
 
35
- expect(screen.getByLabelText("Rows per page")).toBeInTheDocument();
36
- expect(screen.getByLabelText("Page")).toBeInTheDocument();
37
- expect(screen.getByLabelText("Previous page")).toBeInTheDocument();
38
- expect(screen.getByLabelText("Next page")).toBeInTheDocument();
37
+ expect(
38
+ within(container).getByLabelText("Rows per page"),
39
+ ).toBeInTheDocument();
40
+ expect(within(container).getByLabelText("Page")).toBeInTheDocument();
41
+ expect(
42
+ within(container).getByLabelText("Previous page"),
43
+ ).toBeInTheDocument();
44
+ expect(within(container).getByLabelText("Next page")).toBeInTheDocument();
39
45
  // Temporarily disabled while we figure out why i18n string interpolation
40
46
  // isn't playing nicely with testing-library. Can confirm this works properly
41
47
  // via VRT results
42
- // expect(screen.getByText("1-10 of 100")).toBeInTheDocument();
48
+ // expect(within(container).getByText("1-10 of 100")).toBeInTheDocument();
43
49
  });
44
50
 
45
51
  it("calls onPaginationChange with correct pageIndex when clicking next", async () => {
46
52
  const onPaginationChange = jest.fn();
47
- render(
53
+
54
+ const { container } = render(
48
55
  <Pagination
49
56
  currentPageLabel="Page"
50
57
  nextLabel="Next page"
@@ -60,7 +67,7 @@ describe("Pagination", () => {
60
67
  />,
61
68
  );
62
69
 
63
- fireEvent.click(screen.getByLabelText("Next page"));
70
+ await userEvent.click(within(container).getByLabelText("Next page"));
64
71
 
65
72
  await waitFor(() => {
66
73
  expect(onPaginationChange).toHaveBeenCalledWith({
@@ -72,7 +79,8 @@ describe("Pagination", () => {
72
79
 
73
80
  it("calls onPaginationChange with correct pageIndex when clicking previous", async () => {
74
81
  const onPaginationChange = jest.fn();
75
- render(
82
+
83
+ const { container } = render(
76
84
  <Pagination
77
85
  currentPageLabel="Page"
78
86
  nextLabel="Next page"
@@ -88,7 +96,7 @@ describe("Pagination", () => {
88
96
  />,
89
97
  );
90
98
 
91
- fireEvent.click(screen.getByLabelText("Previous page"));
99
+ await userEvent.click(within(container).getByLabelText("Previous page"));
92
100
 
93
101
  await waitFor(() => {
94
102
  expect(onPaginationChange).toHaveBeenCalledWith({
@@ -100,7 +108,8 @@ describe("Pagination", () => {
100
108
 
101
109
  it("disables previous button on first page", () => {
102
110
  const onPaginationChange = jest.fn();
103
- render(
111
+
112
+ const { container } = render(
104
113
  <Pagination
105
114
  currentPageLabel="Page"
106
115
  nextLabel="Next page"
@@ -116,12 +125,13 @@ describe("Pagination", () => {
116
125
  />,
117
126
  );
118
127
 
119
- expect(screen.getByLabelText("Previous page")).toBeDisabled();
128
+ expect(within(container).getByLabelText("Previous page")).toBeDisabled();
120
129
  });
121
130
 
122
131
  it("disables next button on last page", () => {
123
132
  const onPaginationChange = jest.fn();
124
- render(
133
+
134
+ const { container } = render(
125
135
  <Pagination
126
136
  currentPageLabel="Page"
127
137
  nextLabel="Next page"
@@ -137,12 +147,13 @@ describe("Pagination", () => {
137
147
  />,
138
148
  );
139
149
 
140
- expect(screen.getByLabelText("Next page")).toBeDisabled();
150
+ expect(within(container).getByLabelText("Next page")).toBeDisabled();
141
151
  });
142
152
 
143
153
  it("updates pageIndex when entering a new page number", async () => {
144
154
  const onPaginationChange = jest.fn();
145
- render(
155
+
156
+ const { container } = render(
146
157
  <Pagination
147
158
  currentPageLabel="Page"
148
159
  nextLabel="Next page"
@@ -158,9 +169,11 @@ describe("Pagination", () => {
158
169
  />,
159
170
  );
160
171
 
161
- const pageInput = screen.getByLabelText("Page");
162
- fireEvent.change(pageInput, { target: { value: "5" } });
163
- fireEvent.blur(pageInput);
172
+ const pageElement = await within(container).findByLabelText("Page");
173
+
174
+ await userEvent.tripleClick(pageElement);
175
+ await userEvent.keyboard("5");
176
+ await userEvent.click(document.body);
164
177
 
165
178
  await waitFor(() => {
166
179
  expect(onPaginationChange).toHaveBeenCalledWith({
@@ -172,7 +185,8 @@ describe("Pagination", () => {
172
185
 
173
186
  it("updates pageSize when entering a new rows per page value", async () => {
174
187
  const onPaginationChange = jest.fn();
175
- render(
188
+
189
+ const { container } = render(
176
190
  <Pagination
177
191
  currentPageLabel="Page"
178
192
  nextLabel="Next page"
@@ -188,9 +202,12 @@ describe("Pagination", () => {
188
202
  />,
189
203
  );
190
204
 
191
- const rowsPerPageInput = screen.getByLabelText("Rows per page");
192
- fireEvent.change(rowsPerPageInput, { target: { value: "20" } });
193
- fireEvent.blur(rowsPerPageInput);
205
+ const rowsPerPageInput =
206
+ await within(container).findByLabelText("Rows per page");
207
+
208
+ await userEvent.tripleClick(rowsPerPageInput);
209
+ await userEvent.keyboard("20");
210
+ await userEvent.click(document.body);
194
211
 
195
212
  await waitFor(() => {
196
213
  expect(onPaginationChange).toHaveBeenCalledWith({
@@ -202,7 +219,8 @@ describe("Pagination", () => {
202
219
 
203
220
  it("renders 'Load more' button in 'loadMore' variant", () => {
204
221
  const onPaginationChange = jest.fn();
205
- render(
222
+
223
+ const { container } = render(
206
224
  <Pagination
207
225
  loadMoreLabel="Load more"
208
226
  onPaginationChange={onPaginationChange}
@@ -213,12 +231,13 @@ describe("Pagination", () => {
213
231
  />,
214
232
  );
215
233
 
216
- expect(screen.getByText("Load more")).toBeInTheDocument();
234
+ expect(within(container).getByText("Load more")).toBeInTheDocument();
217
235
  });
218
236
 
219
237
  it("calls onPaginationChange with increased pageSize when clicking 'Load more'", async () => {
220
238
  const onPaginationChange = jest.fn();
221
- render(
239
+
240
+ const { container } = render(
222
241
  <Pagination
223
242
  loadMoreLabel="Load more"
224
243
  onPaginationChange={onPaginationChange}
@@ -229,7 +248,7 @@ describe("Pagination", () => {
229
248
  />,
230
249
  );
231
250
 
232
- fireEvent.click(screen.getByText("Load more"));
251
+ await userEvent.click(within(container).getByText("Load more"));
233
252
 
234
253
  await waitFor(() => {
235
254
  expect(onPaginationChange).toHaveBeenCalledWith({
@@ -241,7 +260,8 @@ describe("Pagination", () => {
241
260
 
242
261
  it("disables 'Load more' button when isMoreDisabled is true", () => {
243
262
  const onPaginationChange = jest.fn();
244
- render(
263
+
264
+ const { container } = render(
245
265
  <Pagination
246
266
  loadMoreLabel="Load more"
247
267
  onPaginationChange={onPaginationChange}
@@ -253,12 +273,13 @@ describe("Pagination", () => {
253
273
  />,
254
274
  );
255
275
 
256
- expect(screen.getByText("Load more")).toBeDisabled();
276
+ expect(within(container).getByText("Load more")).toBeDisabled();
257
277
  });
258
278
 
259
279
  it("disables 'Next page' button when isMoreDisabled is true", () => {
260
280
  const onPaginationChange = jest.fn();
261
- render(
281
+
282
+ const { container } = render(
262
283
  <Pagination
263
284
  currentPageLabel="Page"
264
285
  nextLabel="Next page"
@@ -275,12 +296,13 @@ describe("Pagination", () => {
275
296
  />,
276
297
  );
277
298
 
278
- expect(screen.getByLabelText("Next page")).toBeDisabled();
299
+ expect(within(container).getByLabelText("Next page")).toBeDisabled();
279
300
  });
280
301
 
281
302
  it("disables all controls when isDisabled is true", () => {
282
303
  const onPaginationChange = jest.fn();
283
- render(
304
+
305
+ const { container } = render(
284
306
  <Pagination
285
307
  currentPageLabel="Page"
286
308
  nextLabel="Next page"
@@ -297,9 +319,9 @@ describe("Pagination", () => {
297
319
  />,
298
320
  );
299
321
 
300
- expect(screen.getByLabelText("Rows per page")).toBeDisabled();
301
- expect(screen.getByLabelText("Page")).toBeDisabled();
302
- expect(screen.getByLabelText("Previous page")).toBeDisabled();
303
- expect(screen.getByLabelText("Next page")).toBeDisabled();
322
+ expect(within(container).getByLabelText("Rows per page")).toBeDisabled();
323
+ expect(within(container).getByLabelText("Page")).toBeDisabled();
324
+ expect(within(container).getByLabelText("Previous page")).toBeDisabled();
325
+ expect(within(container).getByLabelText("Next page")).toBeDisabled();
304
326
  });
305
327
  });
@@ -13,7 +13,7 @@
13
13
  import { InputBase } from "@mui/material";
14
14
  import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
15
15
  import { Paragraph } from "../Typography";
16
- import { Button } from "../Button";
16
+ import { Button } from "../Buttons";
17
17
  import { ArrowLeftIcon, ArrowRightIcon } from "../icons.generated";
18
18
  import styled from "@emotion/styled";
19
19
  import {
package/src/Toast.tsx CHANGED
@@ -14,7 +14,7 @@ import { useEffect, memo, useState, useCallback } from "react";
14
14
  import { useTranslation } from "react-i18next";
15
15
  import { Alert, AlertTitle, Snackbar } from "@mui/material";
16
16
 
17
- import { Button } from "./Button";
17
+ import { Button } from "./Buttons";
18
18
  import { HtmlProps } from "./HtmlProps";
19
19
  import { CloseIcon } from "./icons.generated";
20
20
  import { Link } from "./Link";
package/src/index.ts CHANGED
@@ -64,7 +64,7 @@ export { badgeContentMaxValues } from "./Badge";
64
64
  export * from "./Banner";
65
65
  export * from "./Box";
66
66
  export * from "./Breadcrumbs";
67
- export * from "./Button";
67
+ export * from "./Buttons";
68
68
  export * from "./Callout";
69
69
  export * from "./Card";
70
70
  export * from "./Checkbox";
@@ -87,8 +87,6 @@ export * from "./Form";
87
87
  export * from "./HintLink";
88
88
  export * from "./IconWithTooltip";
89
89
  export * from "./Link";
90
- export * from "./MenuButton";
91
- export * from "./MenuItem";
92
90
  export * from "./NativeSelect";
93
91
  export * from "./NullElement";
94
92
  export * from "./OdysseyCacheProvider";
@@ -0,0 +1,94 @@
1
+ /*!
2
+ * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.
3
+ * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
4
+ *
5
+ * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
6
+ * Unless required by applicable law or agreed to in writing, software
7
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
8
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ *
10
+ * See the License for the specific language governing permissions and limitations under the License.
11
+ */
12
+
13
+ import styled from "@emotion/styled";
14
+ import { memo } from "react";
15
+ import {
16
+ DesignTokens,
17
+ useOdysseyDesignTokens,
18
+ } from "../../OdysseyDesignTokensContext";
19
+ import { OktaAura } from "./OktaAura";
20
+ import {
21
+ AppSwitcherApp,
22
+ AppSwitcherAppIconData,
23
+ AppSwitcherAppSkeleton,
24
+ } from "./AppSwitcherApp";
25
+ import { TOP_NAV_HEIGHT } from "../TopNav";
26
+
27
+ export type AppSwitcherProps = {
28
+ appIcons: AppSwitcherAppIconData[];
29
+ selectedAppName: string;
30
+ isLoading: boolean;
31
+ };
32
+
33
+ const AppSwitcherWrapperComponent = styled("nav", {
34
+ shouldForwardProp: (prop) => prop !== "odysseyDesignTokens",
35
+ })(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({
36
+ position: "relative",
37
+ display: "inline-block",
38
+ height: "100%",
39
+ backgroundColor: odysseyDesignTokens.HueNeutralWhite,
40
+ borderInlineEndStyle: "solid",
41
+ borderInlineEndWidth: odysseyDesignTokens.BorderWidthMain,
42
+ borderInlineEndColor: odysseyDesignTokens.BorderColorDisplay,
43
+ }));
44
+
45
+ const AppSwitcherOktaAuraWrapperComponent = styled("div", {
46
+ shouldForwardProp: (prop) => prop !== "odysseyDesignTokens",
47
+ })(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({
48
+ height: TOP_NAV_HEIGHT,
49
+ padding: odysseyDesignTokens.Spacing4,
50
+ margin: "auto",
51
+ marginBlockEnd: odysseyDesignTokens.Spacing4,
52
+ }));
53
+
54
+ const AppSwitcherAppIconULComponent = styled("ul", {
55
+ shouldForwardProp: (prop) => prop !== "odysseyDesignTokens",
56
+ })(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({
57
+ listStyleType: "none",
58
+ margin: odysseyDesignTokens.Spacing0,
59
+ padding: odysseyDesignTokens.Spacing0,
60
+ }));
61
+
62
+ const AppSwitcher = ({
63
+ appIcons,
64
+ isLoading,
65
+ selectedAppName,
66
+ }: AppSwitcherProps) => {
67
+ const odysseyDesignTokens = useOdysseyDesignTokens();
68
+
69
+ return (
70
+ <AppSwitcherWrapperComponent odysseyDesignTokens={odysseyDesignTokens}>
71
+ <AppSwitcherOktaAuraWrapperComponent
72
+ odysseyDesignTokens={odysseyDesignTokens}
73
+ >
74
+ <OktaAura />
75
+ </AppSwitcherOktaAuraWrapperComponent>
76
+ <AppSwitcherAppIconULComponent odysseyDesignTokens={odysseyDesignTokens}>
77
+ {isLoading
78
+ ? [0, 1, 2].map((key) => <AppSwitcherAppSkeleton key={key} />)
79
+ : appIcons?.map((appIcon) => (
80
+ <AppSwitcherApp
81
+ key={appIcon.appName}
82
+ selectedAppName={selectedAppName}
83
+ {...appIcon}
84
+ />
85
+ ))}
86
+ </AppSwitcherAppIconULComponent>
87
+ </AppSwitcherWrapperComponent>
88
+ );
89
+ };
90
+
91
+ const MemoizedAppSwitcher = memo(AppSwitcher);
92
+ MemoizedAppSwitcher.displayName = "AppSwitcher";
93
+
94
+ export { MemoizedAppSwitcher as AppSwitcher };
@@ -0,0 +1,146 @@
1
+ /*!
2
+ * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.
3
+ * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
4
+ *
5
+ * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
6
+ * Unless required by applicable law or agreed to in writing, software
7
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
8
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ *
10
+ * See the License for the specific language governing permissions and limitations under the License.
11
+ */
12
+
13
+ import styled from "@emotion/styled";
14
+ import { Skeleton } from "@mui/material";
15
+ import { useCallback } from "react";
16
+ import {
17
+ DesignTokens,
18
+ useOdysseyDesignTokens,
19
+ } from "../../OdysseyDesignTokensContext";
20
+ import { Tooltip } from "../../Tooltip";
21
+ import { MuiPropsContext, MuiPropsContextType } from "../../MuiPropsContext";
22
+
23
+ const AppSwitcherAppWrapperComponent = styled("li", {
24
+ shouldForwardProp: (prop) => prop !== "odysseyDesignTokens",
25
+ })(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({
26
+ margin: "auto",
27
+ marginBlockEnd: odysseyDesignTokens.Spacing3,
28
+ textAlign: "center",
29
+ }));
30
+
31
+ const AppSwitcherAppLinkComponent = styled("a", {
32
+ shouldForwardProp: (prop) =>
33
+ !["odysseyDesignTokens", "isSelected"].includes(prop),
34
+ })(
35
+ ({
36
+ odysseyDesignTokens,
37
+ isSelected,
38
+ }: {
39
+ odysseyDesignTokens: DesignTokens;
40
+ isSelected: boolean;
41
+ }) => ({
42
+ display: "inline-block",
43
+ margin: "auto",
44
+ padding: odysseyDesignTokens.Spacing1,
45
+ backgroundColor: isSelected
46
+ ? odysseyDesignTokens.PalettePrimaryLighter
47
+ : "transparent",
48
+ borderRadius: odysseyDesignTokens.BorderRadiusTight,
49
+ transition: `background-color ${odysseyDesignTokens.TransitionDurationMain}`,
50
+
51
+ "&:hover, &:focus": {
52
+ backgroundColor: odysseyDesignTokens.HueNeutral50,
53
+ },
54
+ }),
55
+ );
56
+
57
+ // Similar to AppSwitcherAppLinkComponent
58
+ const AppSwitcherAppSkeletonWrapperComponent = styled("div", {
59
+ shouldForwardProp: (prop) => prop !== "odysseyDesignTokens",
60
+ })(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({
61
+ display: "inline-block",
62
+ margin: "auto",
63
+ padding: odysseyDesignTokens.Spacing1,
64
+ }));
65
+
66
+ const AppSwitcherAppImgComponent = styled("img", {
67
+ shouldForwardProp: (prop) => prop !== "odysseyDesignTokens",
68
+ })(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({
69
+ display: "block",
70
+ width: odysseyDesignTokens.Spacing6,
71
+ height: odysseyDesignTokens.Spacing6,
72
+ }));
73
+
74
+ export interface AppSwitcherAppIconData {
75
+ appIconDefaultUrl: string;
76
+ appIconSelectedUrl: string;
77
+ appName: string;
78
+ label: string;
79
+ linkUrl: string;
80
+ }
81
+
82
+ export type AppSwitcherAppProps = AppSwitcherAppIconData & {
83
+ selectedAppName?: string;
84
+ };
85
+
86
+ export const AppSwitcherApp = ({
87
+ appIconDefaultUrl,
88
+ appIconSelectedUrl,
89
+ appName,
90
+ label,
91
+ linkUrl,
92
+ selectedAppName,
93
+ }: AppSwitcherAppProps) => {
94
+ const odysseyDesignTokens = useOdysseyDesignTokens();
95
+ const isSelected = appName === selectedAppName;
96
+
97
+ const renderAppIconLink = useCallback(
98
+ (muiProps: MuiPropsContextType) => (
99
+ <AppSwitcherAppLinkComponent
100
+ {...muiProps}
101
+ odysseyDesignTokens={odysseyDesignTokens}
102
+ isSelected={isSelected}
103
+ href={linkUrl}
104
+ aria-current={isSelected ? "page" : undefined}
105
+ >
106
+ <AppSwitcherAppImgComponent
107
+ odysseyDesignTokens={odysseyDesignTokens}
108
+ src={isSelected ? appIconSelectedUrl : appIconDefaultUrl}
109
+ role="presentation"
110
+ />
111
+ </AppSwitcherAppLinkComponent>
112
+ ),
113
+ [
114
+ odysseyDesignTokens,
115
+ isSelected,
116
+ linkUrl,
117
+ appIconDefaultUrl,
118
+ appIconSelectedUrl,
119
+ ],
120
+ );
121
+
122
+ return (
123
+ <AppSwitcherAppWrapperComponent odysseyDesignTokens={odysseyDesignTokens}>
124
+ <Tooltip ariaType="label" placement="right" text={label} translate="no">
125
+ <MuiPropsContext.Consumer>{renderAppIconLink}</MuiPropsContext.Consumer>
126
+ </Tooltip>
127
+ </AppSwitcherAppWrapperComponent>
128
+ );
129
+ };
130
+
131
+ export const AppSwitcherAppSkeleton = () => {
132
+ const odysseyDesignTokens = useOdysseyDesignTokens();
133
+ return (
134
+ <AppSwitcherAppWrapperComponent odysseyDesignTokens={odysseyDesignTokens}>
135
+ <AppSwitcherAppSkeletonWrapperComponent
136
+ odysseyDesignTokens={odysseyDesignTokens}
137
+ >
138
+ <Skeleton
139
+ variant="rounded"
140
+ width={odysseyDesignTokens.Spacing6}
141
+ height={odysseyDesignTokens.Spacing6}
142
+ />
143
+ </AppSwitcherAppSkeletonWrapperComponent>
144
+ </AppSwitcherAppWrapperComponent>
145
+ );
146
+ };
@@ -10,14 +10,29 @@
10
10
  * See the License for the specific language governing permissions and limitations under the License.
11
11
  */
12
12
 
13
+ import styled from "@emotion/styled";
13
14
  import { memo } from "react";
15
+ import {
16
+ DesignTokens,
17
+ useOdysseyDesignTokens,
18
+ } from "../../OdysseyDesignTokensContext";
19
+
20
+ const OktaAuraSvgComponent = styled("svg", {
21
+ shouldForwardProp: (prop) => prop !== "odysseyDesignTokens",
22
+ })(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({
23
+ width: odysseyDesignTokens.Spacing6,
24
+ height: odysseyDesignTokens.Spacing6,
25
+ margin: "auto",
26
+ }));
14
27
 
15
28
  const OktaAura = () => {
29
+ const odysseyDesignTokens = useOdysseyDesignTokens();
16
30
  return (
17
- <svg
18
- width="103"
31
+ <OktaAuraSvgComponent
32
+ odysseyDesignTokens={odysseyDesignTokens}
33
+ width="32"
19
34
  height="32"
20
- viewBox="0 0 103 32"
35
+ viewBox="0 0 32 32"
21
36
  fill="none"
22
37
  xmlns="http://www.w3.org/2000/svg"
23
38
  >
@@ -27,7 +42,7 @@ const OktaAura = () => {
27
42
  d="M17.6032 0.226701L16.9464 8.33185L16.9474 8.3328C16.6365 8.29478 16.3219 8.2734 16.0011 8.2734C15.6019 8.2734 15.2088 8.30381 14.8258 8.36227L14.4527 4.43184C14.4413 4.30922 14.5382 4.20181 14.6623 4.20371H15.3338L15.0102 0.227176C14.9992 0.105509 15.0957 0 15.2188 0H17.3946C17.5162 0 17.6127 0.104558 17.6032 0.226701ZM12.112 0.62925C12.0797 0.511384 11.9533 0.445798 11.8383 0.488096L9.79368 1.23283C9.67867 1.27466 9.62401 1.40631 9.67486 1.51752L11.3383 5.14331L10.7067 5.37143C10.5907 5.41326 10.5351 5.54681 10.5888 5.65897L12.2836 9.22487C12.8986 8.88649 13.5639 8.63127 14.2664 8.47063L12.112 0.62925ZM7.09038 2.88628L11.796 9.51669L11.7969 9.51764C11.2005 9.90545 10.6606 10.3736 10.1929 10.9064L7.37839 8.13367C7.28951 8.04717 7.29664 7.90269 7.39122 7.8238L7.90593 7.39321L5.1033 4.55493C5.01775 4.46843 5.02441 4.32585 5.11803 4.24696L6.78431 2.84731C6.87889 2.76841 7.01909 2.78695 7.09038 2.88628ZM3.14283 6.72451C3.04255 6.65512 2.9033 6.68649 2.84152 6.79152L1.75411 8.67642C1.6928 8.78288 1.73558 8.91833 1.84584 8.97061L5.45024 10.6792L5.11328 11.26C5.05102 11.3674 5.09474 11.5047 5.20786 11.556L8.79895 13.1981C9.05892 12.5303 9.40681 11.9077 9.8317 11.3455L3.14283 6.72451ZM0.487535 11.8479C0.508921 11.7271 0.627737 11.6501 0.746553 11.681L8.6117 13.7356C8.40781 14.4 8.29422 15.1029 8.27854 15.831L4.3405 15.515C4.21693 15.505 4.12901 15.391 4.15039 15.2693L4.26826 14.6087L0.297429 14.2365C0.175761 14.2247 0.088788 14.1115 0.110175 13.9908L0.487535 11.8479ZM0.190495 17.1594C0.068827 17.1713 -0.0181464 17.2844 0.00324043 17.4051L0.381551 19.5486C0.402938 19.6693 0.522704 19.7463 0.64057 19.7154L4.49971 18.7069L4.61473 19.3675C4.63611 19.4892 4.75778 19.5661 4.87707 19.5333L8.68346 18.4825C8.45914 17.8229 8.32084 17.1252 8.28376 16.399L0.19097 17.1604L0.190495 17.1594ZM1.44947 22.7918C1.38816 22.6853 1.42998 22.5499 1.54119 22.4971L8.88497 19.0148C9.16443 19.6736 9.53419 20.2847 9.97618 20.8346L6.75769 23.124C6.65741 23.1962 6.51578 23.1648 6.45447 23.0579L6.12036 22.4762L2.83914 24.7441C2.73791 24.8145 2.59961 24.7831 2.53782 24.6771L1.44947 22.7918ZM10.3474 21.2647L4.63516 27.052C4.54962 27.1385 4.55627 27.2811 4.6499 27.36L6.31712 28.7587C6.41075 28.8376 6.5519 28.8191 6.62319 28.7197L8.9306 25.4665L9.44436 25.8995C9.53894 25.9794 9.68199 25.9599 9.75233 25.8586L11.9927 22.6083C11.3849 22.2381 10.8321 21.7847 10.3488 21.2671L10.3474 21.2647ZM9.21908 30.5576C9.10407 30.5158 9.04942 30.3841 9.10027 30.2729L12.4894 22.8816C13.1129 23.2005 13.7854 23.4381 14.4931 23.5783L13.4993 27.3999C13.4679 27.5197 13.3406 27.5872 13.2246 27.5444L12.5939 27.3134L11.5374 31.1602C11.5051 31.2781 11.3787 31.3437 11.2637 31.3014L9.21908 30.5576ZM15.0539 23.6672L14.3971 31.7728C14.3876 31.8945 14.4836 32 14.6057 32H16.7815C16.9046 32 17.0006 31.8945 16.9901 31.7728L16.6665 27.7963H17.338C17.4616 27.7982 17.559 27.6908 17.5476 27.5682L17.1745 23.6377C16.7915 23.6962 16.3989 23.7261 15.9992 23.7261C15.6789 23.7261 15.3642 23.7052 15.0539 23.6672ZM22.9005 1.72521C22.9514 1.614 22.8967 1.48235 22.7817 1.44053L20.7371 0.696737C20.6221 0.654914 20.4957 0.720025 20.4634 0.837891L19.4068 4.68468L18.7762 4.4537C18.6602 4.41093 18.5324 4.47794 18.5015 4.5977L17.5077 8.4193C18.2154 8.5595 18.8874 8.79761 19.5114 9.11604L22.9005 1.72521ZM27.3656 4.94655L21.6534 10.7338L21.6525 10.7319C21.1691 10.2144 20.6169 9.76145 20.0085 9.39074L22.2489 6.14041C22.3193 6.03918 22.4623 6.01969 22.5569 6.09954L23.0707 6.53203L25.3781 3.27885C25.4493 3.17952 25.5905 3.16098 25.6841 3.23987L27.3514 4.63858C27.445 4.71747 27.4512 4.86005 27.3656 4.94655ZM30.4596 9.501C30.5708 9.44825 30.6126 9.3128 30.5513 9.20681L29.463 7.32192C29.4016 7.21546 29.2633 7.18457 29.1616 7.25443L25.8804 9.52239L25.5463 8.94067C25.485 8.83326 25.3438 8.80236 25.2431 8.8746L22.0246 11.164C22.4671 11.7138 22.8364 12.3245 23.1163 12.9837L30.4596 9.501ZM31.6183 12.451L31.9966 14.5944L31.9975 14.5954C32.0189 14.7161 31.9324 14.8292 31.8103 14.8411L23.7165 15.6015C23.6795 14.8753 23.5412 14.1776 23.3173 13.5179L27.1237 12.4671C27.2425 12.4339 27.3642 12.5108 27.386 12.633L27.5011 13.2936L31.3602 12.2851C31.4781 12.2537 31.5978 12.3307 31.6192 12.4519L31.6183 12.451ZM31.2528 20.3171C31.3716 20.3484 31.4904 20.2714 31.5118 20.1502L31.8892 18.0073C31.9106 17.8866 31.8241 17.7734 31.7019 17.7616L27.7311 17.3894L27.849 16.7288C27.8703 16.6071 27.7829 16.4931 27.6589 16.4831L23.7213 16.1671C23.7056 16.8952 23.5906 17.5981 23.3881 18.2625L31.2533 20.3161L31.2528 20.3171ZM29.1578 25.2066C29.0965 25.3121 28.9573 25.343 28.857 25.2736L28.8579 25.2726L22.1681 20.6521C22.593 20.0899 22.9409 19.4673 23.2009 18.7995L26.792 20.4421C26.9051 20.4939 26.9488 20.6312 26.8865 20.7381L26.5491 21.3189L30.154 23.0275C30.2642 23.0802 30.307 23.2157 30.2457 23.3217L29.1578 25.2066ZM20.2034 22.4814L24.909 29.1128C24.9803 29.2121 25.1205 29.2306 25.215 29.1517L26.8813 27.7521C26.9749 27.6732 26.9816 27.5306 26.8961 27.4441L24.0934 24.6063L24.6081 24.1757C24.7027 24.0968 24.7094 23.9524 24.621 23.8659L21.8069 21.0932C21.3393 21.6264 20.7998 22.0936 20.2034 22.4814ZM20.1625 31.5105C20.0475 31.5523 19.9206 31.4872 19.8888 31.3693L17.7344 23.5284C18.4368 23.3678 19.1027 23.1121 19.7177 22.7742L21.412 26.3401C21.4657 26.4522 21.4101 26.5858 21.2941 26.6276L20.6625 26.8557L22.3259 30.4815C22.3768 30.5927 22.3221 30.7244 22.2071 30.7662L20.1625 31.5105Z"
28
43
  fill="black"
29
44
  />
30
- </svg>
45
+ </OktaAuraSvgComponent>
31
46
  );
32
47
  };
33
48
  const MemoizedOktaAura = memo(OktaAura);
@@ -0,0 +1,13 @@
1
+ /*!
2
+ * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.
3
+ * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
4
+ *
5
+ * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
6
+ * Unless required by applicable law or agreed to in writing, software
7
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
8
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ *
10
+ * See the License for the specific language governing permissions and limitations under the License.
11
+ */
12
+
13
+ export * from "./AppSwitcher";