@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
@@ -1 +1 @@
1
- {"version":3,"file":"TableLayoutContent.js","names":["memo","useCallback","useMemo","useRef","useState","useEffect","styled","MRT_TableContainer","useMaterialReactTable","useTranslation","ArrowDownIcon","ArrowUnsortedIcon","ChevronDownIcon","DragIndicatorIcon","Box","Button","dataTableImmutableSettings","displayColumnDefOptions","ScrollableTableContainer","MenuButton","MoreIcon","RowActions","useOdysseyDesignTokens","useScrollIndication","jsx","_jsx","jsxs","_jsxs","TextWrapper","whiteSpace","textOverflow","overflow","RowActionsContainer","display","TableLayoutContent","columns","data","draggingRow","emptyState","enableVirtualization","getRowId","hasRowReordering","hasRowSelection","isEmpty","isLoading","isNoResults","isRowReorderingDisabled","onReorderRows","pagination","rowReorderingUtilities","rowSelection","setRowSelection","setTableState","tableLayoutOptions","tableState","totalRows","isTableContainerScrolledToStart","setIsTableContainerScrolledToStart","isTableContainerScrolledToEnd","setIsTableContainerScrolledToEnd","tableInnerContainerWidth","setTableInnerContainerWidth","shouldUpdateScroll","tableOuterContainerRef","tableInnerContainerRef","tableContentRef","tableInnerContainer","current","tableOuterContainer","odysseyDesignTokens","t","columnIds","map","column","accessorKey","columnOrder","filter","id","rowDensityClassName","rowDensity","defaultCell","cell","value","getValue","hasTextWrapping","columnDef","enableWrapping","children","draggableTableBodyRowClassName","dragHandleStyles","dragHandleText","handleDragHandleKeyDown","handleDragHandleOnDragCapture","handleDragHandleOnDragEnd","resetDraggingAndHoveredRow","updateRowOrder","renderRowActions","row","currentIndex","index","pageIndex","pageSize","rowActionButtons","rowActionMenuItems","ariaLabel","buttonVariant","endIcon","menuAlignment","size","rowIndex","undefined","innerWidthStyle","width","emptyStateContainer","sx","scrollTo","clientHeight","shouldDisplayRowActions","hasColumnWithGrow","some","grow","dataTable","state","sorting","columnSorting","columnVisibility","icons","ArrowDownwardIcon","DragHandleIcon","SyncAltIcon","ExpandMoreIcon","header","muiTableBodyCellProps","align","className","muiTableHeadCellProps","visibility","variant","isDisabled","muiTableProps","ref","hasColumnResizing","muiTableContainerProps","muiTableBodyProps","tabIndex","enableColumnResizing","defaultColumn","Cell","enableRowActions","enableRowOrdering","Boolean","enableRowDragging","muiDetailPanelProps","paddingBlock","getIsExpanded","Spacing3","muiTableBodyRowProps","table","isDetailPanel","currentRowId","draggingRowId","hoveredRowId","getState","hoveredRow","border","backgroundColor","HueNeutralWhite","muiRowDragHandleProps","onKeyDown","event","onBlur","onDragEnd","onDragCapture","disabled","renderDetailPanel","enableRowVirtualization","currentColumn","find","sortedColumn","getIsResizing","enableSorting","hasSorting","onSortingChange","sortingUpdater","newSortVal","prevState","enableRowSelection","onRowSelectionChange","renderEmptyRowsFallback","localization","collapse","collapseAll","expand","expandAll","isScrollableEnd","isScrollableStart","MemoizedTableLayoutContent","displayName"],"sources":["../../../src/labs/DataView/TableLayoutContent.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n SetStateAction,\n memo,\n useCallback,\n useMemo,\n useRef,\n useState,\n ReactNode,\n Dispatch,\n ReactElement,\n useEffect,\n} from \"react\";\nimport styled, { CSSObject } from \"@emotion/styled\";\nimport {\n MRT_Row,\n MRT_RowData,\n MRT_RowSelectionState,\n MRT_TableContainer,\n MRT_TableInstance,\n MRT_TableOptions,\n useMaterialReactTable,\n} from \"material-react-table\";\nimport { useTranslation } from \"react-i18next\";\n\nimport {\n ArrowDownIcon,\n ArrowUnsortedIcon,\n ChevronDownIcon,\n DragIndicatorIcon,\n} from \"../../icons.generated\";\nimport { Box } from \"../../Box\";\nimport { Button } from \"../../Button\";\nimport { TableLayoutProps, TableState, UniversalProps } from \"./componentTypes\";\nimport { DataTableCell } from \"./dataTypes\";\nimport {\n dataTableImmutableSettings,\n displayColumnDefOptions,\n ScrollableTableContainer,\n} from \"./tableConstants\";\nimport { MenuButton } from \"../../MenuButton\";\nimport { MoreIcon } from \"../../icons.generated\";\nimport { RowActions } from \"./RowActions\";\nimport { useOdysseyDesignTokens } from \"../../OdysseyDesignTokensContext\";\nimport { useScrollIndication } from \"../../DataTable/useScrollIndication\";\n\nconst TextWrapper = styled(\"div\")(() => ({\n whiteSpace: \"nowrap\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n}));\n\nconst RowActionsContainer = styled(\"div\")(() => ({\n display: \"flex\",\n}));\n\nexport type TableLayoutContentProps = {\n columns: TableLayoutProps[\"columns\"];\n data: MRT_RowData[];\n draggingRow?: MRT_Row<MRT_RowData> | null;\n emptyState: ReactNode;\n enableVirtualization?: boolean;\n getRowId: UniversalProps[\"getRowId\"];\n hasRowReordering: UniversalProps[\"hasRowReordering\"];\n hasRowSelection: UniversalProps[\"hasRowSelection\"];\n isEmpty?: boolean;\n isLoading: boolean;\n isNoResults?: boolean;\n isRowReorderingDisabled?: boolean;\n onReorderRows: UniversalProps[\"onReorderRows\"];\n pagination: {\n pageIndex: number;\n pageSize: number;\n };\n rowReorderingUtilities: {\n dragHandleStyles: CSSObject;\n dragHandleText: {\n title: string;\n \"aria-label\": string;\n };\n draggableTableBodyRowClassName: ({\n currentRowId,\n draggingRowId,\n hoveredRowId,\n }: {\n currentRowId: string;\n draggingRowId?: string;\n hoveredRowId?: string;\n }) => string | undefined;\n handleDragHandleKeyDown: ({\n table,\n row,\n event,\n }: {\n table: MRT_TableInstance<MRT_RowData>;\n row: MRT_Row<MRT_RowData>;\n event: React.KeyboardEvent<HTMLButtonElement>;\n }) => void;\n handleDragHandleOnDragCapture: (\n table: MRT_TableInstance<MRT_RowData>,\n ) => void;\n handleDragHandleOnDragEnd: (table: MRT_TableInstance<MRT_RowData>) => void;\n resetDraggingAndHoveredRow: (table: MRT_TableInstance<MRT_RowData>) => void;\n updateRowOrder: ({\n rowId,\n newRowIndex,\n }: {\n rowId: string;\n newRowIndex: number;\n }) => void;\n };\n rowSelection: MRT_RowSelectionState;\n setRowSelection: Dispatch<SetStateAction<MRT_RowSelectionState>>;\n setTableState: Dispatch<SetStateAction<TableState>>;\n tableLayoutOptions: TableLayoutProps;\n tableState: TableState;\n totalRows: UniversalProps[\"totalRows\"];\n};\n\nconst TableLayoutContent = ({\n columns,\n data,\n draggingRow,\n emptyState,\n enableVirtualization,\n getRowId,\n hasRowReordering,\n hasRowSelection,\n isEmpty,\n isLoading,\n isNoResults,\n isRowReorderingDisabled,\n onReorderRows,\n pagination,\n rowReorderingUtilities,\n rowSelection,\n setRowSelection,\n setTableState,\n tableLayoutOptions,\n tableState,\n totalRows,\n}: TableLayoutContentProps) => {\n const [isTableContainerScrolledToStart, setIsTableContainerScrolledToStart] =\n useState(true);\n const [isTableContainerScrolledToEnd, setIsTableContainerScrolledToEnd] =\n useState(true);\n const [tableInnerContainerWidth, setTableInnerContainerWidth] =\n useState<string>(\"100%\");\n const shouldUpdateScroll = useRef<boolean>(false);\n const tableOuterContainerRef = useRef<HTMLDivElement>(null);\n const tableInnerContainerRef = useRef<HTMLDivElement>(null);\n const tableContentRef = useRef<HTMLTableElement>(null);\n\n useScrollIndication({\n setIsTableContainerScrolledToEnd: setIsTableContainerScrolledToEnd,\n setIsTableContainerScrolledToStart: setIsTableContainerScrolledToStart,\n setTableInnerContainerWidth: setTableInnerContainerWidth,\n tableInnerContainer: tableInnerContainerRef.current,\n tableOuterContainer: tableOuterContainerRef.current,\n });\n\n const odysseyDesignTokens = useOdysseyDesignTokens();\n const { t } = useTranslation();\n\n const columnIds = useMemo(() => {\n return columns.map((column) => column.accessorKey) ?? [];\n }, [columns]);\n\n const columnOrder = useMemo(\n () => [\n \"mrt-row-drag\",\n \"mrt-row-select\",\n \"mrt-row-expand\",\n ...(columnIds?.filter((id): id is string => typeof id === \"string\") ||\n []),\n \"mrt-row-actions\",\n ],\n [columnIds],\n );\n\n const rowDensityClassName = useMemo(() => {\n return tableState.rowDensity === \"spacious\"\n ? \"MuiTableBody-spacious\"\n : tableState.rowDensity === \"compact\"\n ? \"MuiTableBody-compact\"\n : \"MuiTableBody-default\";\n }, [tableState]);\n\n const defaultCell = useCallback<\n ({ cell }: { cell: DataTableCell<MRT_RowData> }) => ReactElement | string\n >(({ cell }) => {\n const value = cell.getValue<string>();\n const hasTextWrapping =\n cell.column.columnDef.hasTextWrapping ||\n cell.column.columnDef.enableWrapping;\n return hasTextWrapping ? value : <TextWrapper>{value}</TextWrapper>;\n }, []);\n\n const {\n draggableTableBodyRowClassName,\n dragHandleStyles,\n dragHandleText,\n handleDragHandleKeyDown,\n handleDragHandleOnDragCapture,\n handleDragHandleOnDragEnd,\n resetDraggingAndHoveredRow,\n updateRowOrder,\n } = rowReorderingUtilities;\n\n const renderRowActions = useCallback(\n ({ row }: { row: MRT_Row<MRT_RowData> }) => {\n const currentIndex =\n row.index + (pagination.pageIndex - 1) * pagination.pageSize;\n return (\n <RowActionsContainer>\n {tableLayoutOptions.rowActionButtons?.(row)}\n {(tableLayoutOptions.rowActionMenuItems || hasRowReordering) && (\n <MenuButton\n ariaLabel={t(\"table.moreactions.arialabel\")}\n buttonVariant=\"floating\"\n endIcon={<MoreIcon />}\n menuAlignment=\"right\"\n size=\"small\"\n >\n <RowActions\n isRowReorderingDisabled={isRowReorderingDisabled}\n row={row}\n rowActionMenuItems={tableLayoutOptions.rowActionMenuItems}\n rowIndex={currentIndex}\n totalRows={totalRows}\n updateRowOrder={\n hasRowReordering && onReorderRows ? updateRowOrder : undefined\n }\n />\n </MenuButton>\n )}\n </RowActionsContainer>\n );\n },\n [\n hasRowReordering,\n isRowReorderingDisabled,\n onReorderRows,\n pagination.pageIndex,\n pagination.pageSize,\n t,\n tableLayoutOptions,\n totalRows,\n updateRowOrder,\n ],\n );\n\n const innerWidthStyle = useMemo(\n () => ({ width: tableInnerContainerWidth }),\n [tableInnerContainerWidth],\n );\n\n const emptyStateContainer = useCallback(\n () => <Box sx={innerWidthStyle}>{emptyState}</Box>,\n [innerWidthStyle, emptyState],\n );\n\n // Scroll to the bottom as soon as data loads after clicking the\n // loadMore pagination button\n useEffect(() => {\n if (enableVirtualization) {\n shouldUpdateScroll.current = true;\n }\n }, [enableVirtualization, pagination]);\n\n useEffect(() => {\n if (\n shouldUpdateScroll.current &&\n tableContentRef.current &&\n typeof tableInnerContainerRef.current?.scrollTo !== \"undefined\"\n ) {\n tableInnerContainerRef.current?.scrollTo(\n 0,\n tableContentRef.current.clientHeight,\n );\n shouldUpdateScroll.current = false;\n }\n }, [data]);\n\n const shouldDisplayRowActions = useMemo(\n () =>\n (hasRowReordering === true && onReorderRows) ||\n tableLayoutOptions.rowActionButtons ||\n tableLayoutOptions.rowActionMenuItems\n ? true\n : false,\n [\n hasRowReordering,\n onReorderRows,\n tableLayoutOptions.rowActionButtons,\n tableLayoutOptions.rowActionMenuItems,\n ],\n );\n\n const hasColumnWithGrow = columns.some((column) => column.grow === true);\n\n const dataTable = useMaterialReactTable({\n data: !isEmpty && !isNoResults ? data : [],\n columns,\n getRowId,\n state: {\n sorting: tableState.columnSorting,\n columnVisibility: tableState.columnVisibility,\n isLoading: isLoading,\n rowSelection: rowSelection,\n columnOrder: columnOrder,\n },\n icons: {\n ArrowDownwardIcon: ArrowDownIcon,\n DragHandleIcon: DragIndicatorIcon,\n SyncAltIcon: ArrowUnsortedIcon,\n ExpandMoreIcon: ChevronDownIcon,\n },\n ...dataTableImmutableSettings,\n displayColumnDefOptions: {\n ...(displayColumnDefOptions satisfies Partial<\n MRT_TableOptions<MRT_RowData>[\"displayColumnDefOptions\"]\n >),\n \"mrt-row-actions\": {\n header: \"\",\n grow: !hasColumnWithGrow,\n muiTableBodyCellProps: {\n align: \"right\" as const,\n sx: {\n overflow: \"visible\",\n width: \"unset\",\n },\n className: \"ods-actions-cell\",\n },\n muiTableHeadCellProps: {\n align: \"right\" as const,\n sx: {\n width: \"unset\",\n },\n className: \"ods-actions-cell\",\n children: (\n <Box sx={{ display: \"flex\", visibility: \"hidden\" }}>\n {tableLayoutOptions.rowActionButtons &&\n tableLayoutOptions.rowActionButtons({ id: null })}\n {((hasRowReordering === true && onReorderRows) ||\n tableLayoutOptions.rowActionMenuItems) && (\n <Box>\n <Button\n endIcon={<MoreIcon />}\n size=\"small\"\n variant=\"floating\"\n ariaLabel={t(\"table.moreactions.arialabel\")}\n isDisabled\n />\n </Box>\n )}\n </Box>\n ),\n },\n },\n },\n muiTableProps: {\n ref: tableContentRef,\n className:\n !shouldDisplayRowActions && tableLayoutOptions.hasColumnResizing\n ? hasColumnWithGrow\n ? \"ods-hide-spacer-column\"\n : \"ods-hide-spacer-column ods-column-grow\"\n : \"\",\n },\n muiTableContainerProps: {\n ref: tableInnerContainerRef,\n },\n muiTableBodyProps: () => ({\n className: rowDensityClassName,\n tabIndex: enableVirtualization ? 0 : undefined,\n }),\n enableColumnResizing: tableLayoutOptions.hasColumnResizing,\n defaultColumn: {\n Cell: defaultCell,\n },\n enableRowActions:\n (hasRowReordering === true && onReorderRows) ||\n tableLayoutOptions.rowActionButtons ||\n tableLayoutOptions.rowActionMenuItems\n ? true\n : false,\n renderRowActions: ({ row }) => renderRowActions({ row }),\n enableRowOrdering: hasRowReordering && Boolean(onReorderRows),\n enableRowDragging: hasRowReordering && Boolean(onReorderRows),\n muiDetailPanelProps: ({ row }) => ({\n sx: {\n paddingBlock: row.getIsExpanded()\n ? `${odysseyDesignTokens.Spacing3} !important`\n : undefined,\n },\n }),\n muiTableBodyRowProps: ({ table, row, isDetailPanel }) => ({\n className: draggableTableBodyRowClassName({\n currentRowId: row.id,\n draggingRowId: draggingRow?.id,\n hoveredRowId: table.getState().hoveredRow?.id,\n }),\n sx: isDetailPanel\n ? {\n paddingBlock: \"0 !important\",\n border: 0,\n [\"&:hover\"]: {\n backgroundColor: `${odysseyDesignTokens.HueNeutralWhite} !important`,\n },\n }\n : {},\n }),\n muiRowDragHandleProps: ({ table, row }) => ({\n onKeyDown: (event) => handleDragHandleKeyDown({ table, row, event }),\n onBlur: () => resetDraggingAndHoveredRow(table),\n onDragEnd: () => handleDragHandleOnDragEnd(table),\n onDragCapture: () => handleDragHandleOnDragCapture(table),\n disabled: isRowReorderingDisabled,\n sx: dragHandleStyles,\n ...dragHandleText,\n }),\n renderDetailPanel: tableLayoutOptions.renderDetailPanel,\n enableRowVirtualization: enableVirtualization,\n muiTableHeadCellProps: ({ column: currentColumn }) => ({\n className: tableState.columnSorting.find(\n (sortedColumn) => sortedColumn.id === currentColumn.id,\n )\n ? \"isSorted\"\n : \"isUnsorted\",\n }),\n muiTableBodyCellProps: ({ column }) => ({\n className: column.getIsResizing() ? \"isResizing\" : \"\",\n }),\n enableSorting: tableLayoutOptions.hasSorting === true, // I don't know why this needs to be true, but it still works if undefined otherwise\n onSortingChange: (sortingUpdater) => {\n const newSortVal =\n typeof sortingUpdater === \"function\"\n ? sortingUpdater(tableState.columnSorting)\n : tableState.columnSorting;\n setTableState((prevState) => ({\n ...prevState,\n columnSorting: newSortVal,\n }));\n },\n enableRowSelection: hasRowSelection,\n onRowSelectionChange: setRowSelection,\n renderEmptyRowsFallback: emptyStateContainer,\n localization: {\n collapse: t(\"table.rowexpansion.collapse\"),\n collapseAll: t(\"table.rowexpansion.collapseall\"),\n expand: t(\"table.rowexpansion.expand\"),\n expandAll: t(\"table.rowexpansion.expandall\"),\n },\n });\n\n return (\n <ScrollableTableContainer\n isScrollableEnd={!isTableContainerScrolledToEnd}\n isScrollableStart={!isTableContainerScrolledToStart}\n odysseyDesignTokens={odysseyDesignTokens}\n ref={tableOuterContainerRef}\n >\n <MRT_TableContainer table={dataTable} />\n </ScrollableTableContainer>\n );\n};\n\nconst MemoizedTableLayoutContent = memo(TableLayoutContent);\nMemoizedTableLayoutContent.displayName = \"TableLayoutContent\";\n\nexport { MemoizedTableLayoutContent as TableLayoutContent };\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableLayoutContent.js","names":["memo","useCallback","useMemo","useRef","useState","useEffect","styled","MRT_TableContainer","useMaterialReactTable","useTranslation","ArrowDownIcon","ArrowUnsortedIcon","ChevronDownIcon","DragIndicatorIcon","Box","Button","MenuButton","dataTableImmutableSettings","displayColumnDefOptions","ScrollableTableContainer","MoreIcon","RowActions","useOdysseyDesignTokens","useScrollIndication","jsx","_jsx","jsxs","_jsxs","TextWrapper","whiteSpace","textOverflow","overflow","RowActionsContainer","display","TableLayoutContent","columns","data","draggingRow","emptyState","enableVirtualization","getRowId","hasRowReordering","hasRowSelection","isEmpty","isLoading","isNoResults","isRowReorderingDisabled","onReorderRows","pagination","rowReorderingUtilities","rowSelection","setRowSelection","setTableState","tableLayoutOptions","tableState","totalRows","isTableContainerScrolledToStart","setIsTableContainerScrolledToStart","isTableContainerScrolledToEnd","setIsTableContainerScrolledToEnd","tableInnerContainerWidth","setTableInnerContainerWidth","shouldUpdateScroll","tableOuterContainerRef","tableInnerContainerRef","tableContentRef","tableInnerContainer","current","tableOuterContainer","odysseyDesignTokens","t","columnIds","map","column","accessorKey","columnOrder","filter","id","rowDensityClassName","rowDensity","defaultCell","cell","value","getValue","hasTextWrapping","columnDef","enableWrapping","children","draggableTableBodyRowClassName","dragHandleStyles","dragHandleText","handleDragHandleKeyDown","handleDragHandleOnDragCapture","handleDragHandleOnDragEnd","resetDraggingAndHoveredRow","updateRowOrder","renderRowActions","row","currentIndex","index","pageIndex","pageSize","rowActionButtons","rowActionMenuItems","ariaLabel","buttonVariant","endIcon","menuAlignment","size","rowIndex","undefined","innerWidthStyle","width","emptyStateContainer","sx","scrollTo","clientHeight","shouldDisplayRowActions","hasColumnWithGrow","some","grow","dataTable","state","sorting","columnSorting","columnVisibility","icons","ArrowDownwardIcon","DragHandleIcon","SyncAltIcon","ExpandMoreIcon","header","muiTableBodyCellProps","align","className","muiTableHeadCellProps","visibility","variant","isDisabled","muiTableProps","ref","hasColumnResizing","muiTableContainerProps","muiTableBodyProps","tabIndex","enableColumnResizing","defaultColumn","Cell","enableRowActions","enableRowOrdering","Boolean","enableRowDragging","muiDetailPanelProps","paddingBlock","getIsExpanded","Spacing3","muiTableBodyRowProps","table","isDetailPanel","currentRowId","draggingRowId","hoveredRowId","getState","hoveredRow","border","backgroundColor","HueNeutralWhite","muiRowDragHandleProps","onKeyDown","event","onBlur","onDragEnd","onDragCapture","disabled","renderDetailPanel","enableRowVirtualization","currentColumn","find","sortedColumn","getIsResizing","enableSorting","hasSorting","onSortingChange","sortingUpdater","newSortVal","prevState","enableRowSelection","onRowSelectionChange","renderEmptyRowsFallback","localization","collapse","collapseAll","expand","expandAll","isScrollableEnd","isScrollableStart","MemoizedTableLayoutContent","displayName"],"sources":["../../../src/labs/DataView/TableLayoutContent.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n SetStateAction,\n memo,\n useCallback,\n useMemo,\n useRef,\n useState,\n ReactNode,\n Dispatch,\n ReactElement,\n useEffect,\n} from \"react\";\nimport styled, { CSSObject } from \"@emotion/styled\";\nimport {\n MRT_Row,\n MRT_RowData,\n MRT_RowSelectionState,\n MRT_TableContainer,\n MRT_TableInstance,\n MRT_TableOptions,\n useMaterialReactTable,\n} from \"material-react-table\";\nimport { useTranslation } from \"react-i18next\";\n\nimport {\n ArrowDownIcon,\n ArrowUnsortedIcon,\n ChevronDownIcon,\n DragIndicatorIcon,\n} from \"../../icons.generated\";\nimport { Box } from \"../../Box\";\nimport { Button, MenuButton } from \"../../Buttons\";\nimport { TableLayoutProps, TableState, UniversalProps } from \"./componentTypes\";\nimport { DataTableCell } from \"./dataTypes\";\nimport {\n dataTableImmutableSettings,\n displayColumnDefOptions,\n ScrollableTableContainer,\n} from \"./tableConstants\";\nimport { MoreIcon } from \"../../icons.generated\";\nimport { RowActions } from \"./RowActions\";\nimport { useOdysseyDesignTokens } from \"../../OdysseyDesignTokensContext\";\nimport { useScrollIndication } from \"../../DataTable/useScrollIndication\";\n\nconst TextWrapper = styled(\"div\")(() => ({\n whiteSpace: \"nowrap\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n}));\n\nconst RowActionsContainer = styled(\"div\")(() => ({\n display: \"flex\",\n}));\n\nexport type TableLayoutContentProps = {\n columns: TableLayoutProps[\"columns\"];\n data: MRT_RowData[];\n draggingRow?: MRT_Row<MRT_RowData> | null;\n emptyState: ReactNode;\n enableVirtualization?: boolean;\n getRowId: UniversalProps[\"getRowId\"];\n hasRowReordering: UniversalProps[\"hasRowReordering\"];\n hasRowSelection: UniversalProps[\"hasRowSelection\"];\n isEmpty?: boolean;\n isLoading: boolean;\n isNoResults?: boolean;\n isRowReorderingDisabled?: boolean;\n onReorderRows: UniversalProps[\"onReorderRows\"];\n pagination: {\n pageIndex: number;\n pageSize: number;\n };\n rowReorderingUtilities: {\n dragHandleStyles: CSSObject;\n dragHandleText: {\n title: string;\n \"aria-label\": string;\n };\n draggableTableBodyRowClassName: ({\n currentRowId,\n draggingRowId,\n hoveredRowId,\n }: {\n currentRowId: string;\n draggingRowId?: string;\n hoveredRowId?: string;\n }) => string | undefined;\n handleDragHandleKeyDown: ({\n table,\n row,\n event,\n }: {\n table: MRT_TableInstance<MRT_RowData>;\n row: MRT_Row<MRT_RowData>;\n event: React.KeyboardEvent<HTMLButtonElement>;\n }) => void;\n handleDragHandleOnDragCapture: (\n table: MRT_TableInstance<MRT_RowData>,\n ) => void;\n handleDragHandleOnDragEnd: (table: MRT_TableInstance<MRT_RowData>) => void;\n resetDraggingAndHoveredRow: (table: MRT_TableInstance<MRT_RowData>) => void;\n updateRowOrder: ({\n rowId,\n newRowIndex,\n }: {\n rowId: string;\n newRowIndex: number;\n }) => void;\n };\n rowSelection: MRT_RowSelectionState;\n setRowSelection: Dispatch<SetStateAction<MRT_RowSelectionState>>;\n setTableState: Dispatch<SetStateAction<TableState>>;\n tableLayoutOptions: TableLayoutProps;\n tableState: TableState;\n totalRows: UniversalProps[\"totalRows\"];\n};\n\nconst TableLayoutContent = ({\n columns,\n data,\n draggingRow,\n emptyState,\n enableVirtualization,\n getRowId,\n hasRowReordering,\n hasRowSelection,\n isEmpty,\n isLoading,\n isNoResults,\n isRowReorderingDisabled,\n onReorderRows,\n pagination,\n rowReorderingUtilities,\n rowSelection,\n setRowSelection,\n setTableState,\n tableLayoutOptions,\n tableState,\n totalRows,\n}: TableLayoutContentProps) => {\n const [isTableContainerScrolledToStart, setIsTableContainerScrolledToStart] =\n useState(true);\n const [isTableContainerScrolledToEnd, setIsTableContainerScrolledToEnd] =\n useState(true);\n const [tableInnerContainerWidth, setTableInnerContainerWidth] =\n useState<string>(\"100%\");\n const shouldUpdateScroll = useRef<boolean>(false);\n const tableOuterContainerRef = useRef<HTMLDivElement>(null);\n const tableInnerContainerRef = useRef<HTMLDivElement>(null);\n const tableContentRef = useRef<HTMLTableElement>(null);\n\n useScrollIndication({\n setIsTableContainerScrolledToEnd: setIsTableContainerScrolledToEnd,\n setIsTableContainerScrolledToStart: setIsTableContainerScrolledToStart,\n setTableInnerContainerWidth: setTableInnerContainerWidth,\n tableInnerContainer: tableInnerContainerRef.current,\n tableOuterContainer: tableOuterContainerRef.current,\n });\n\n const odysseyDesignTokens = useOdysseyDesignTokens();\n const { t } = useTranslation();\n\n const columnIds = useMemo(() => {\n return columns.map((column) => column.accessorKey) ?? [];\n }, [columns]);\n\n const columnOrder = useMemo(\n () => [\n \"mrt-row-drag\",\n \"mrt-row-select\",\n \"mrt-row-expand\",\n ...(columnIds?.filter((id): id is string => typeof id === \"string\") ||\n []),\n \"mrt-row-actions\",\n ],\n [columnIds],\n );\n\n const rowDensityClassName = useMemo(() => {\n return tableState.rowDensity === \"spacious\"\n ? \"MuiTableBody-spacious\"\n : tableState.rowDensity === \"compact\"\n ? \"MuiTableBody-compact\"\n : \"MuiTableBody-default\";\n }, [tableState]);\n\n const defaultCell = useCallback<\n ({ cell }: { cell: DataTableCell<MRT_RowData> }) => ReactElement | string\n >(({ cell }) => {\n const value = cell.getValue<string>();\n const hasTextWrapping =\n cell.column.columnDef.hasTextWrapping ||\n cell.column.columnDef.enableWrapping;\n return hasTextWrapping ? value : <TextWrapper>{value}</TextWrapper>;\n }, []);\n\n const {\n draggableTableBodyRowClassName,\n dragHandleStyles,\n dragHandleText,\n handleDragHandleKeyDown,\n handleDragHandleOnDragCapture,\n handleDragHandleOnDragEnd,\n resetDraggingAndHoveredRow,\n updateRowOrder,\n } = rowReorderingUtilities;\n\n const renderRowActions = useCallback(\n ({ row }: { row: MRT_Row<MRT_RowData> }) => {\n const currentIndex =\n row.index + (pagination.pageIndex - 1) * pagination.pageSize;\n return (\n <RowActionsContainer>\n {tableLayoutOptions.rowActionButtons?.(row)}\n {(tableLayoutOptions.rowActionMenuItems || hasRowReordering) && (\n <MenuButton\n ariaLabel={t(\"table.moreactions.arialabel\")}\n buttonVariant=\"floating\"\n endIcon={<MoreIcon />}\n menuAlignment=\"right\"\n size=\"small\"\n >\n <RowActions\n isRowReorderingDisabled={isRowReorderingDisabled}\n row={row}\n rowActionMenuItems={tableLayoutOptions.rowActionMenuItems}\n rowIndex={currentIndex}\n totalRows={totalRows}\n updateRowOrder={\n hasRowReordering && onReorderRows ? updateRowOrder : undefined\n }\n />\n </MenuButton>\n )}\n </RowActionsContainer>\n );\n },\n [\n hasRowReordering,\n isRowReorderingDisabled,\n onReorderRows,\n pagination.pageIndex,\n pagination.pageSize,\n t,\n tableLayoutOptions,\n totalRows,\n updateRowOrder,\n ],\n );\n\n const innerWidthStyle = useMemo(\n () => ({ width: tableInnerContainerWidth }),\n [tableInnerContainerWidth],\n );\n\n const emptyStateContainer = useCallback(\n () => <Box sx={innerWidthStyle}>{emptyState}</Box>,\n [innerWidthStyle, emptyState],\n );\n\n // Scroll to the bottom as soon as data loads after clicking the\n // loadMore pagination button\n useEffect(() => {\n if (enableVirtualization) {\n shouldUpdateScroll.current = true;\n }\n }, [enableVirtualization, pagination]);\n\n useEffect(() => {\n if (\n shouldUpdateScroll.current &&\n tableContentRef.current &&\n typeof tableInnerContainerRef.current?.scrollTo !== \"undefined\"\n ) {\n tableInnerContainerRef.current?.scrollTo(\n 0,\n tableContentRef.current.clientHeight,\n );\n shouldUpdateScroll.current = false;\n }\n }, [data]);\n\n const shouldDisplayRowActions = useMemo(\n () =>\n (hasRowReordering === true && onReorderRows) ||\n tableLayoutOptions.rowActionButtons ||\n tableLayoutOptions.rowActionMenuItems\n ? true\n : false,\n [\n hasRowReordering,\n onReorderRows,\n tableLayoutOptions.rowActionButtons,\n tableLayoutOptions.rowActionMenuItems,\n ],\n );\n\n const hasColumnWithGrow = columns.some((column) => column.grow === true);\n\n const dataTable = useMaterialReactTable({\n data: !isEmpty && !isNoResults ? data : [],\n columns,\n getRowId,\n state: {\n sorting: tableState.columnSorting,\n columnVisibility: tableState.columnVisibility,\n isLoading: isLoading,\n rowSelection: rowSelection,\n columnOrder: columnOrder,\n },\n icons: {\n ArrowDownwardIcon: ArrowDownIcon,\n DragHandleIcon: DragIndicatorIcon,\n SyncAltIcon: ArrowUnsortedIcon,\n ExpandMoreIcon: ChevronDownIcon,\n },\n ...dataTableImmutableSettings,\n displayColumnDefOptions: {\n ...(displayColumnDefOptions satisfies Partial<\n MRT_TableOptions<MRT_RowData>[\"displayColumnDefOptions\"]\n >),\n \"mrt-row-actions\": {\n header: \"\",\n grow: !hasColumnWithGrow,\n muiTableBodyCellProps: {\n align: \"right\" as const,\n sx: {\n overflow: \"visible\",\n width: \"unset\",\n },\n className: \"ods-actions-cell\",\n },\n muiTableHeadCellProps: {\n align: \"right\" as const,\n sx: {\n width: \"unset\",\n },\n className: \"ods-actions-cell\",\n children: (\n <Box sx={{ display: \"flex\", visibility: \"hidden\" }}>\n {tableLayoutOptions.rowActionButtons &&\n tableLayoutOptions.rowActionButtons({ id: null })}\n {((hasRowReordering === true && onReorderRows) ||\n tableLayoutOptions.rowActionMenuItems) && (\n <Box>\n <Button\n endIcon={<MoreIcon />}\n size=\"small\"\n variant=\"floating\"\n ariaLabel={t(\"table.moreactions.arialabel\")}\n isDisabled\n />\n </Box>\n )}\n </Box>\n ),\n },\n },\n },\n muiTableProps: {\n ref: tableContentRef,\n className:\n !shouldDisplayRowActions && tableLayoutOptions.hasColumnResizing\n ? hasColumnWithGrow\n ? \"ods-hide-spacer-column\"\n : \"ods-hide-spacer-column ods-column-grow\"\n : \"\",\n },\n muiTableContainerProps: {\n ref: tableInnerContainerRef,\n },\n muiTableBodyProps: () => ({\n className: rowDensityClassName,\n tabIndex: enableVirtualization ? 0 : undefined,\n }),\n enableColumnResizing: tableLayoutOptions.hasColumnResizing,\n defaultColumn: {\n Cell: defaultCell,\n },\n enableRowActions:\n (hasRowReordering === true && onReorderRows) ||\n tableLayoutOptions.rowActionButtons ||\n tableLayoutOptions.rowActionMenuItems\n ? true\n : false,\n renderRowActions: ({ row }) => renderRowActions({ row }),\n enableRowOrdering: hasRowReordering && Boolean(onReorderRows),\n enableRowDragging: hasRowReordering && Boolean(onReorderRows),\n muiDetailPanelProps: ({ row }) => ({\n sx: {\n paddingBlock: row.getIsExpanded()\n ? `${odysseyDesignTokens.Spacing3} !important`\n : undefined,\n },\n }),\n muiTableBodyRowProps: ({ table, row, isDetailPanel }) => ({\n className: draggableTableBodyRowClassName({\n currentRowId: row.id,\n draggingRowId: draggingRow?.id,\n hoveredRowId: table.getState().hoveredRow?.id,\n }),\n sx: isDetailPanel\n ? {\n paddingBlock: \"0 !important\",\n border: 0,\n [\"&:hover\"]: {\n backgroundColor: `${odysseyDesignTokens.HueNeutralWhite} !important`,\n },\n }\n : {},\n }),\n muiRowDragHandleProps: ({ table, row }) => ({\n onKeyDown: (event) => handleDragHandleKeyDown({ table, row, event }),\n onBlur: () => resetDraggingAndHoveredRow(table),\n onDragEnd: () => handleDragHandleOnDragEnd(table),\n onDragCapture: () => handleDragHandleOnDragCapture(table),\n disabled: isRowReorderingDisabled,\n sx: dragHandleStyles,\n ...dragHandleText,\n }),\n renderDetailPanel: tableLayoutOptions.renderDetailPanel,\n enableRowVirtualization: enableVirtualization,\n muiTableHeadCellProps: ({ column: currentColumn }) => ({\n className: tableState.columnSorting.find(\n (sortedColumn) => sortedColumn.id === currentColumn.id,\n )\n ? \"isSorted\"\n : \"isUnsorted\",\n }),\n muiTableBodyCellProps: ({ column }) => ({\n className: column.getIsResizing() ? \"isResizing\" : \"\",\n }),\n enableSorting: tableLayoutOptions.hasSorting === true, // I don't know why this needs to be true, but it still works if undefined otherwise\n onSortingChange: (sortingUpdater) => {\n const newSortVal =\n typeof sortingUpdater === \"function\"\n ? sortingUpdater(tableState.columnSorting)\n : tableState.columnSorting;\n setTableState((prevState) => ({\n ...prevState,\n columnSorting: newSortVal,\n }));\n },\n enableRowSelection: hasRowSelection,\n onRowSelectionChange: setRowSelection,\n renderEmptyRowsFallback: emptyStateContainer,\n localization: {\n collapse: t(\"table.rowexpansion.collapse\"),\n collapseAll: t(\"table.rowexpansion.collapseall\"),\n expand: t(\"table.rowexpansion.expand\"),\n expandAll: t(\"table.rowexpansion.expandall\"),\n },\n });\n\n return (\n <ScrollableTableContainer\n isScrollableEnd={!isTableContainerScrolledToEnd}\n isScrollableStart={!isTableContainerScrolledToStart}\n odysseyDesignTokens={odysseyDesignTokens}\n ref={tableOuterContainerRef}\n >\n <MRT_TableContainer table={dataTable} />\n </ScrollableTableContainer>\n );\n};\n\nconst MemoizedTableLayoutContent = memo(TableLayoutContent);\nMemoizedTableLayoutContent.displayName = \"TableLayoutContent\";\n\nexport { MemoizedTableLayoutContent as TableLayoutContent };\n"],"mappings":"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"}
@@ -15,8 +15,7 @@ import { memo, useCallback, useMemo } from "react";
15
15
  import { useTranslation } from "react-i18next";
16
16
  import { densityValues } from "./constants.js";
17
17
  import { ListIcon, ShowIcon } from "../../icons.generated/index.js";
18
- import { MenuButton } from "../../MenuButton.js";
19
- import { MenuItem } from "../../MenuItem.js";
18
+ import { MenuButton, MenuItem } from "../../Buttons/index.js";
20
19
  import { jsx as _jsx } from "react/jsx-runtime";
21
20
  import { jsxs as _jsxs } from "react/jsx-runtime";
22
21
  import { Fragment as _Fragment } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"TableSettings.js","names":["memo","useCallback","useMemo","useTranslation","densityValues","ListIcon","ShowIcon","MenuButton","MenuItem","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","TableSettings","setTableState","tableLayoutOptions","tableState","t","hasChangeableDensity","hasColumnVisibility","columns","rowDensity","columnVisibility","changeRowDensity","value","prevState","changeColumnVisibility","columnId","visibleColumns","Set","filter","column","accessorKey","map","memoizedDensityMenu","ariaLabel","endIcon","menuAlignment","shouldCloseOnSelect","children","isSelected","onClick","charAt","toUpperCase","slice","memoizedColumnVisibilityMenu","Boolean","enableHiding","id","_Checkbox","checked","has","header","MemoizedTableSettings","displayName"],"sources":["../../../src/labs/DataView/TableSettings.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { Dispatch, SetStateAction, memo, useCallback, useMemo } from \"react\";\nimport { Checkbox as MuiCheckbox } from \"@mui/material\";\nimport { MRT_DensityState } from \"material-react-table\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { densityValues } from \"./constants\";\nimport { ListIcon, ShowIcon } from \"../../icons.generated\";\nimport { MenuButton } from \"../../MenuButton\";\nimport { MenuItem } from \"../../MenuItem\";\nimport { TableLayoutProps, TableState } from \"./componentTypes\";\n\nexport type TableSettingsProps = {\n setTableState: Dispatch<SetStateAction<TableState>>;\n tableLayoutOptions: TableLayoutProps;\n tableState: TableState;\n};\n\nconst TableSettings = ({\n setTableState,\n tableLayoutOptions,\n tableState,\n}: TableSettingsProps) => {\n const { t } = useTranslation();\n\n const { hasChangeableDensity, hasColumnVisibility, columns } =\n tableLayoutOptions;\n const { rowDensity, columnVisibility } = tableState;\n\n const changeRowDensity = useCallback<(value: MRT_DensityState) => void>(\n (value) => {\n setTableState((prevState) => ({\n ...prevState,\n rowDensity: value,\n }));\n },\n [setTableState],\n );\n\n const changeColumnVisibility = useCallback<(columnId: string) => void>(\n (columnId) => {\n setTableState((prevState) => ({\n ...prevState,\n columnVisibility: {\n ...prevState.columnVisibility,\n [columnId]: prevState.columnVisibility\n ? prevState.columnVisibility[columnId] === false\n : false,\n },\n }));\n },\n [setTableState],\n );\n\n const visibleColumns = useMemo(\n () =>\n new Set(\n columns\n .filter((column) =>\n columnVisibility\n ? columnVisibility[column.accessorKey!] !== false\n : true,\n )\n .map((column) => column.accessorKey!),\n ),\n [columns, columnVisibility],\n );\n\n const memoizedDensityMenu = useMemo(\n () =>\n hasChangeableDensity && (\n <MenuButton\n ariaLabel={t(\"table.density.arialabel\")}\n endIcon={<ListIcon />}\n menuAlignment=\"right\"\n shouldCloseOnSelect={false}\n >\n {densityValues.map((value) => (\n <MenuItem\n key={value}\n isSelected={rowDensity === value}\n onClick={() => changeRowDensity(value)}\n >\n {`${value.charAt(0).toUpperCase()}${value.slice(1)}`}\n </MenuItem>\n ))}\n </MenuButton>\n ),\n [hasChangeableDensity, t, rowDensity, changeRowDensity],\n );\n\n const memoizedColumnVisibilityMenu = useMemo(\n () =>\n hasColumnVisibility && (\n <MenuButton\n ariaLabel={t(\"table.columnvisibility.arialabel\")}\n endIcon={<ShowIcon />}\n menuAlignment=\"right\"\n shouldCloseOnSelect={false}\n >\n {columns\n .filter((column) => Boolean(column.enableHiding !== false))\n .map((column) => (\n <MenuItem\n key={column.accessorKey}\n onClick={() => changeColumnVisibility(column.id!)}\n >\n <MuiCheckbox checked={visibleColumns.has(column.id!)} />\n {column.header}\n </MenuItem>\n ))}\n </MenuButton>\n ),\n [hasColumnVisibility, t, columns, changeColumnVisibility, visibleColumns],\n );\n\n return (\n <>\n {memoizedDensityMenu}\n {memoizedColumnVisibilityMenu}\n </>\n );\n};\n\nconst MemoizedTableSettings = memo(TableSettings);\nMemoizedTableSettings.displayName = \"TableSettings\";\n\nexport { MemoizedTableSettings as TableSettings };\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAmCA,IAAI,EAAEC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AAG5E,SAASC,cAAc,QAAQ,eAAe;AAAC,SAEtCC,aAAa;AAAA,SACbC,QAAQ,EAAEC,QAAQ;AAAA,SAClBC,UAAU;AAAA,SACVC,QAAQ;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAAA,SAAAC,QAAA,IAAAC,SAAA;AASjB,MAAMC,aAAa,GAAGA,CAAC;EACrBC,aAAa;EACbC,kBAAkB;EAClBC;AACkB,CAAC,KAAK;EACxB,MAAM;IAAEC;EAAE,CAAC,GAAGhB,cAAc,CAAC,CAAC;EAE9B,MAAM;IAAEiB,oBAAoB;IAAEC,mBAAmB;IAAEC;EAAQ,CAAC,GAC1DL,kBAAkB;EACpB,MAAM;IAAEM,UAAU;IAAEC;EAAiB,CAAC,GAAGN,UAAU;EAEnD,MAAMO,gBAAgB,GAAGxB,WAAW,CACjCyB,KAAK,IAAK;IACTV,aAAa,CAAEW,SAAS,KAAM;MAC5B,GAAGA,SAAS;MACZJ,UAAU,EAAEG;IACd,CAAC,CAAC,CAAC;EACL,CAAC,EACD,CAACV,aAAa,CAChB,CAAC;EAED,MAAMY,sBAAsB,GAAG3B,WAAW,CACvC4B,QAAQ,IAAK;IACZb,aAAa,CAAEW,SAAS,KAAM;MAC5B,GAAGA,SAAS;MACZH,gBAAgB,EAAE;QAChB,GAAGG,SAAS,CAACH,gBAAgB;QAC7B,CAACK,QAAQ,GAAGF,SAAS,CAACH,gBAAgB,GAClCG,SAAS,CAACH,gBAAgB,CAACK,QAAQ,CAAC,KAAK,KAAK,GAC9C;MACN;IACF,CAAC,CAAC,CAAC;EACL,CAAC,EACD,CAACb,aAAa,CAChB,CAAC;EAED,MAAMc,cAAc,GAAG5B,OAAO,CAC5B,MACE,IAAI6B,GAAG,CACLT,OAAO,CACJU,MAAM,CAAEC,MAAM,IACbT,gBAAgB,GACZA,gBAAgB,CAACS,MAAM,CAACC,WAAW,CAAE,KAAK,KAAK,GAC/C,IACN,CAAC,CACAC,GAAG,CAAEF,MAAM,IAAKA,MAAM,CAACC,WAAY,CACxC,CAAC,EACH,CAACZ,OAAO,EAAEE,gBAAgB,CAC5B,CAAC;EAED,MAAMY,mBAAmB,GAAGlC,OAAO,CACjC,MACEkB,oBAAoB,IAClBV,IAAA,CAACH,UAAU;IACT8B,SAAS,EAAElB,CAAC,CAAC,yBAAyB,CAAE;IACxCmB,OAAO,EAAE5B,IAAA,CAACL,QAAQ,IAAE,CAAE;IACtBkC,aAAa,EAAC,OAAO;IACrBC,mBAAmB,EAAE,KAAM;IAAAC,QAAA,EAE1BrC,aAAa,CAAC+B,GAAG,CAAET,KAAK,IACvBhB,IAAA,CAACF,QAAQ;MAEPkC,UAAU,EAAEnB,UAAU,KAAKG,KAAM;MACjCiB,OAAO,EAAEA,CAAA,KAAMlB,gBAAgB,CAACC,KAAK,CAAE;MAAAe,QAAA,EAErC,GAAEf,KAAK,CAACkB,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAE,GAAEnB,KAAK,CAACoB,KAAK,CAAC,CAAC,CAAE;IAAC,GAJ/CpB,KAKG,CACX;EAAC,CACQ,CACb,EACH,CAACN,oBAAoB,EAAED,CAAC,EAAEI,UAAU,EAAEE,gBAAgB,CACxD,CAAC;EAED,MAAMsB,4BAA4B,GAAG7C,OAAO,CAC1C,MACEmB,mBAAmB,IACjBX,IAAA,CAACH,UAAU;IACT8B,SAAS,EAAElB,CAAC,CAAC,kCAAkC,CAAE;IACjDmB,OAAO,EAAE5B,IAAA,CAACJ,QAAQ,IAAE,CAAE;IACtBiC,aAAa,EAAC,OAAO;IACrBC,mBAAmB,EAAE,KAAM;IAAAC,QAAA,EAE1BnB,OAAO,CACLU,MAAM,CAAEC,MAAM,IAAKe,OAAO,CAACf,MAAM,CAACgB,YAAY,KAAK,KAAK,CAAC,CAAC,CAC1Dd,GAAG,CAAEF,MAAM,IACVrB,KAAA,CAACJ,QAAQ;MAEPmC,OAAO,EAAEA,CAAA,KAAMf,sBAAsB,CAACK,MAAM,CAACiB,EAAG,CAAE;MAAAT,QAAA,GAElD/B,IAAA,CAAAyC,SAAA;QAAaC,OAAO,EAAEtB,cAAc,CAACuB,GAAG,CAACpB,MAAM,CAACiB,EAAG;MAAE,CAAE,CAAC,EACvDjB,MAAM,CAACqB,MAAM;IAAA,GAJTrB,MAAM,CAACC,WAKJ,CACX;EAAC,CACM,CACb,EACH,CAACb,mBAAmB,EAAEF,CAAC,EAAEG,OAAO,EAAEM,sBAAsB,EAAEE,cAAc,CAC1E,CAAC;EAED,OACElB,KAAA,CAAAE,SAAA;IAAA2B,QAAA,GACGL,mBAAmB,EACnBW,4BAA4B;EAAA,CAC7B,CAAC;AAEP,CAAC;AAED,MAAMQ,qBAAqB,GAAGvD,IAAI,CAACe,aAAa,CAAC;AACjDwC,qBAAqB,CAACC,WAAW,GAAG,eAAe;AAEnD,SAASD,qBAAqB,IAAIxC,aAAa"}
1
+ {"version":3,"file":"TableSettings.js","names":["memo","useCallback","useMemo","useTranslation","densityValues","ListIcon","ShowIcon","MenuButton","MenuItem","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","TableSettings","setTableState","tableLayoutOptions","tableState","t","hasChangeableDensity","hasColumnVisibility","columns","rowDensity","columnVisibility","changeRowDensity","value","prevState","changeColumnVisibility","columnId","visibleColumns","Set","filter","column","accessorKey","map","memoizedDensityMenu","ariaLabel","endIcon","menuAlignment","shouldCloseOnSelect","children","isSelected","onClick","charAt","toUpperCase","slice","memoizedColumnVisibilityMenu","Boolean","enableHiding","id","_Checkbox","checked","has","header","MemoizedTableSettings","displayName"],"sources":["../../../src/labs/DataView/TableSettings.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { Dispatch, SetStateAction, memo, useCallback, useMemo } from \"react\";\nimport { Checkbox as MuiCheckbox } from \"@mui/material\";\nimport { MRT_DensityState } from \"material-react-table\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { densityValues } from \"./constants\";\nimport { ListIcon, ShowIcon } from \"../../icons.generated\";\nimport { MenuButton, MenuItem } from \"../../Buttons\";\nimport { TableLayoutProps, TableState } from \"./componentTypes\";\n\nexport type TableSettingsProps = {\n setTableState: Dispatch<SetStateAction<TableState>>;\n tableLayoutOptions: TableLayoutProps;\n tableState: TableState;\n};\n\nconst TableSettings = ({\n setTableState,\n tableLayoutOptions,\n tableState,\n}: TableSettingsProps) => {\n const { t } = useTranslation();\n\n const { hasChangeableDensity, hasColumnVisibility, columns } =\n tableLayoutOptions;\n const { rowDensity, columnVisibility } = tableState;\n\n const changeRowDensity = useCallback<(value: MRT_DensityState) => void>(\n (value) => {\n setTableState((prevState) => ({\n ...prevState,\n rowDensity: value,\n }));\n },\n [setTableState],\n );\n\n const changeColumnVisibility = useCallback<(columnId: string) => void>(\n (columnId) => {\n setTableState((prevState) => ({\n ...prevState,\n columnVisibility: {\n ...prevState.columnVisibility,\n [columnId]: prevState.columnVisibility\n ? prevState.columnVisibility[columnId] === false\n : false,\n },\n }));\n },\n [setTableState],\n );\n\n const visibleColumns = useMemo(\n () =>\n new Set(\n columns\n .filter((column) =>\n columnVisibility\n ? columnVisibility[column.accessorKey!] !== false\n : true,\n )\n .map((column) => column.accessorKey!),\n ),\n [columns, columnVisibility],\n );\n\n const memoizedDensityMenu = useMemo(\n () =>\n hasChangeableDensity && (\n <MenuButton\n ariaLabel={t(\"table.density.arialabel\")}\n endIcon={<ListIcon />}\n menuAlignment=\"right\"\n shouldCloseOnSelect={false}\n >\n {densityValues.map((value) => (\n <MenuItem\n key={value}\n isSelected={rowDensity === value}\n onClick={() => changeRowDensity(value)}\n >\n {`${value.charAt(0).toUpperCase()}${value.slice(1)}`}\n </MenuItem>\n ))}\n </MenuButton>\n ),\n [hasChangeableDensity, t, rowDensity, changeRowDensity],\n );\n\n const memoizedColumnVisibilityMenu = useMemo(\n () =>\n hasColumnVisibility && (\n <MenuButton\n ariaLabel={t(\"table.columnvisibility.arialabel\")}\n endIcon={<ShowIcon />}\n menuAlignment=\"right\"\n shouldCloseOnSelect={false}\n >\n {columns\n .filter((column) => Boolean(column.enableHiding !== false))\n .map((column) => (\n <MenuItem\n key={column.accessorKey}\n onClick={() => changeColumnVisibility(column.id!)}\n >\n <MuiCheckbox checked={visibleColumns.has(column.id!)} />\n {column.header}\n </MenuItem>\n ))}\n </MenuButton>\n ),\n [hasColumnVisibility, t, columns, changeColumnVisibility, visibleColumns],\n );\n\n return (\n <>\n {memoizedDensityMenu}\n {memoizedColumnVisibilityMenu}\n </>\n );\n};\n\nconst MemoizedTableSettings = memo(TableSettings);\nMemoizedTableSettings.displayName = \"TableSettings\";\n\nexport { MemoizedTableSettings as TableSettings };\n"],"mappings":"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"}
@@ -15,7 +15,7 @@ import { useTranslation } from "react-i18next";
15
15
  import { DatePicker as MuiDatePicker, LocalizationProvider } from "@mui/x-date-pickers";
16
16
  import { AdapterLuxon } from "@mui/x-date-pickers/AdapterLuxon";
17
17
  import styled from "@emotion/styled";
18
- import { Button } from "../Button.js";
18
+ import { Button } from "../Buttons/index.js";
19
19
  import { ArrowLeftIcon, ArrowRightIcon, CalendarIcon, ChevronDownIcon } from "../icons.generated/index.js";
20
20
  import { DateField } from "./DateField.js";
21
21
  import { datePickerTheme } from "./datePickerTheme.js";
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.js","names":["memo","useCallback","useEffect","useMemo","useRef","useState","useTranslation","DatePicker","MuiDatePicker","LocalizationProvider","AdapterLuxon","styled","Button","ArrowLeftIcon","ArrowRightIcon","CalendarIcon","ChevronDownIcon","DateField","datePickerTheme","useOdysseyDesignTokens","OdysseyThemeProvider","TimeZonePicker","useOdysseyDateFields","jsx","_jsx","jsxs","_jsxs","DatePickerContainer","div","marginBlockEnd","DatePickerWidthContainer","odysseyDesignTokens","width","maxWidth","TypographyLineLengthMax","TimeZonePickerContainer","shouldForwardProp","prop","marginBlockStart","Spacing3","ActionContainer","display","justifyContent","paddingInline","Spacing4","paddingBlockEnd","ActionBar","actions","onAccept","onCancel","t","length","children","label","onClick","variant","MemoizedActionBar","displayName","formatDayOfWeek","date","toFormat","defaultValue","defaultValueProp","errorMessage","hint","HintLinkComponent","isDateEnabled","isDisabled","isOptional","isReadOnly","isMonthEnabled","isYearEnabled","minDate","minDateProp","maxDate","maxDateProp","onBlur","onCalendarDateChange","onInputChange","onInputChangeProp","timeZone","timeZonePickerLabel","timeZoneOptions","value","valueProp","i18n","inputRef","defaultedLanguageCode","formatDateTimeToUtcIsoDateString","inputValues","internalTimeZone","isValidTimeZone","localeText","setInternalTimeZone","shouldDisableDate","shouldDisableMonth","shouldDisableYear","isOpen","setIsOpen","popperElement","setPopperElement","language","containerRef","current","formatDateTimeToJsDateStringOnCalendarSelection","dateStringFromDateTime","toggleCalendarVisibility","resetIsOpen","renderDateField","endAdornment","ariaLabel","size","startIcon","onChange","timezone","slots","actionBar","field","muiProps","leftArrowIcon","rightArrowIcon","switchViewIcon","slotProps","wrapperVariant","popper","anchorEl","toolbar","toolbarPlaceholder","onTimeZoneChange","themeOverride","dateAdapter","adapterLocale","ref","dayOfWeekFormatter","disabled","fixedWeekNumber","onClose","open","readOnly","MemoizedDatePicker"],"sources":["../../src/labs/DatePicker.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n FocusEventHandler,\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n type DatePickerSlots,\n DatePicker as MuiDatePicker,\n DatePickerProps as MuiDatePickerProps,\n LocalizationProvider,\n PickersActionBarProps,\n DatePickerSlotProps,\n} from \"@mui/x-date-pickers\";\nimport { DateTime } from \"luxon\";\nimport { AdapterLuxon } from \"@mui/x-date-pickers/AdapterLuxon\";\nimport styled from \"@emotion/styled\";\n\nimport { Button } from \"../Button\";\nimport {\n ArrowLeftIcon,\n ArrowRightIcon,\n CalendarIcon,\n ChevronDownIcon,\n} from \"../icons.generated\";\nimport { DateField, DateFieldProps } from \"./DateField\";\nimport { datePickerTheme } from \"./datePickerTheme\";\nimport { FieldComponentProps } from \"../FieldComponentProps\";\nimport {\n useOdysseyDesignTokens,\n DesignTokens,\n} from \"../OdysseyDesignTokensContext\";\nimport { OdysseyThemeProvider } from \"../OdysseyThemeProvider\";\nimport { TimeZonePicker, TimeZonePickerProps } from \"./TimeZonePicker\";\n\nimport {\n useOdysseyDateFields,\n OdysseyDateFieldProps,\n TimeZoneOption,\n} from \"./useOdysseyDateFields\";\n\nconst DatePickerContainer = styled.div({\n \".MuiFormControl-root\": {\n marginBlockEnd: 0,\n },\n});\n\nconst DatePickerWidthContainer = styled.div<{\n odysseyDesignTokens: DesignTokens;\n}>(({ odysseyDesignTokens }) => ({\n \".MuiInput-root\": {\n width: \"100%\",\n maxWidth: odysseyDesignTokens.TypographyLineLengthMax,\n },\n}));\n\nconst TimeZonePickerContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({\n marginBlockStart: odysseyDesignTokens.Spacing3,\n}));\n\nconst ActionContainer = styled.div<{ odysseyDesignTokens: DesignTokens }>(\n ({ odysseyDesignTokens }) => ({\n display: \"flex\",\n justifyContent: \"flex-end\",\n paddingInline: odysseyDesignTokens.Spacing4,\n paddingBlockEnd: odysseyDesignTokens.Spacing4,\n }),\n);\n\nconst ActionBar = ({ actions, onAccept, onCancel }: PickersActionBarProps) => {\n const { t } = useTranslation();\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n // actions will be [] or [\"accept\", \"cancel\"]\n if (actions && actions.length > 0) {\n return (\n <ActionContainer odysseyDesignTokens={odysseyDesignTokens}>\n <Button\n label={t(\"picker.labels.action.cancel\")}\n onClick={onCancel}\n variant=\"floating\"\n />\n <Button\n label={t(\"picker.labels.action.apply\")}\n onClick={onAccept}\n variant=\"primary\"\n />\n </ActionContainer>\n );\n }\n\n return null;\n};\n\nconst MemoizedActionBar = memo(ActionBar);\nMemoizedActionBar.displayName = \"ActionBar\";\n\nconst formatDayOfWeek = (date: DateTime) => date.toFormat(\"EEE\");\n\ntype RenderDateFieldProps = {\n defaultValue: DateFieldProps[\"defaultValue\"];\n value: DateFieldProps[\"value\"];\n} & MuiDatePickerProps<DateTime>;\n\nexport type DatePickerProps = {\n /**\n * The label for the `input` element.\n */\n label: string;\n /**\n * Callback fired when the a date field loses focus\n */\n onBlur?: FocusEventHandler<HTMLInputElement>;\n /**\n * Callback fired when the a date is selected with the calendar.\n */\n onCalendarDateChange?: ({\n value,\n timeZone,\n }: {\n value: string | undefined;\n timeZone: string;\n }) => void;\n /**\n * Callback fired when the date/text input changes.\n */\n onInputChange?: (value: string) => void;\n /**\n * If provided, a `TimeZonePicker` will be rendered below the DatePicker. These options will populate as the Autocomplete options\n */\n timeZoneOptions?: TimeZoneOption[];\n /**\n * label for `TimeZonePicker`\n */\n timeZonePickerLabel?: TimeZonePickerProps[\"label\"];\n} & OdysseyDateFieldProps &\n Pick<\n FieldComponentProps,\n | \"errorMessage\"\n | \"hint\"\n | \"HintLinkComponent\"\n | \"isDisabled\"\n | \"isReadOnly\"\n | \"isOptional\"\n >;\n\nconst DatePicker = ({\n defaultValue: defaultValueProp,\n errorMessage,\n hint,\n HintLinkComponent,\n isDateEnabled = () => true,\n isDisabled,\n isOptional,\n isReadOnly,\n isMonthEnabled = () => true,\n isYearEnabled = () => true,\n label,\n minDate: minDateProp,\n maxDate: maxDateProp,\n onBlur,\n onCalendarDateChange,\n onInputChange: onInputChangeProp,\n timeZone,\n timeZonePickerLabel,\n timeZoneOptions,\n value: valueProp,\n}: DatePickerProps) => {\n const { i18n, t } = useTranslation();\n const inputRef = useRef<HTMLInputElement>(null);\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n const {\n defaultedLanguageCode,\n formatDateTimeToUtcIsoDateString,\n inputValues,\n internalTimeZone,\n isValidTimeZone,\n localeText,\n minDate,\n maxDate,\n setInternalTimeZone,\n shouldDisableDate,\n shouldDisableMonth,\n shouldDisableYear,\n } = useOdysseyDateFields({\n defaultValue: defaultValueProp,\n errorMessage,\n isDateEnabled,\n isMonthEnabled,\n isYearEnabled,\n minDate: minDateProp,\n maxDate: maxDateProp,\n timeZone,\n value: valueProp,\n });\n const [isOpen, setIsOpen] = useState(false);\n const [popperElement, setPopperElement] = useState<HTMLInputElement | null>();\n\n const { language } = i18n;\n const containerRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n setPopperElement(containerRef.current);\n }, []);\n\n const formatDateTimeToJsDateStringOnCalendarSelection = useCallback<\n NonNullable<MuiDatePickerProps<DateTime>[\"onChange\"]>\n >(\n (value) => {\n if (value) {\n const dateStringFromDateTime = formatDateTimeToUtcIsoDateString(value);\n\n if (dateStringFromDateTime) {\n onCalendarDateChange?.({\n value: dateStringFromDateTime,\n timeZone: internalTimeZone,\n });\n }\n }\n },\n [formatDateTimeToUtcIsoDateString, internalTimeZone, onCalendarDateChange],\n );\n\n const onInputChange = useCallback<(value: string) => void>(\n (value) => {\n onInputChangeProp?.(value);\n },\n [onInputChangeProp],\n );\n\n const toggleCalendarVisibility = useCallback(\n () => setIsOpen(!isOpen),\n [isOpen],\n );\n\n const resetIsOpen = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const renderDateField = useCallback(\n ({ defaultValue, inputRef, value }: RenderDateFieldProps) => {\n return (\n <DateField\n defaultValue={defaultValue}\n endAdornment={\n <Button\n ariaLabel={t(\"picker.labels.date.choose\")}\n label=\"\"\n onClick={toggleCalendarVisibility}\n size=\"small\"\n startIcon={<CalendarIcon />}\n variant=\"floating\"\n />\n }\n errorMessage={errorMessage}\n hint={hint}\n HintLinkComponent={HintLinkComponent}\n inputRef={inputRef}\n isDisabled={isDisabled}\n isOptional={isOptional}\n isReadOnly={isReadOnly}\n label={label}\n onBlur={onBlur}\n minDate={minDate}\n maxDate={maxDate}\n onChange={onInputChange}\n timezone={internalTimeZone}\n value={value}\n />\n );\n },\n [\n errorMessage,\n hint,\n HintLinkComponent,\n internalTimeZone,\n isDisabled,\n isOptional,\n isReadOnly,\n label,\n onBlur,\n onInputChange,\n minDate,\n maxDate,\n t,\n toggleCalendarVisibility,\n ],\n );\n\n const slots = useMemo<DatePickerSlots<DateTime>>(\n () => ({\n actionBar: MemoizedActionBar,\n field: (muiProps) => renderDateField(muiProps),\n leftArrowIcon: () => <ArrowLeftIcon />,\n rightArrowIcon: () => <ArrowRightIcon />,\n switchViewIcon: () => <ChevronDownIcon />,\n }),\n [renderDateField],\n );\n\n const slotProps = useMemo<DatePickerSlotProps<DateTime, false>>(\n () => ({\n actionBar: ({ wrapperVariant, onAccept, onCancel }) => ({\n actions:\n // This is the default behavior but felt more clear to pass them in explicitly\n wrapperVariant === \"desktop\" ? [] : [\"accept\", \"cancel\"],\n onAccept,\n onCancel,\n }),\n popper: {\n anchorEl: popperElement,\n },\n\n toolbar: {\n toolbarPlaceholder: \"\",\n },\n }),\n [popperElement],\n );\n\n const onTimeZoneChange = useCallback(\n (timeZone: string | undefined) => {\n if (timeZone && isValidTimeZone(timeZone)) {\n setInternalTimeZone(timeZone);\n }\n },\n [isValidTimeZone, setInternalTimeZone],\n );\n\n return (\n <OdysseyThemeProvider themeOverride={datePickerTheme}>\n <LocalizationProvider\n dateAdapter={AdapterLuxon}\n adapterLocale={defaultedLanguageCode}\n localeText={localeText}\n >\n <DatePickerContainer>\n <DatePickerWidthContainer\n odysseyDesignTokens={odysseyDesignTokens}\n ref={containerRef}\n >\n <MuiDatePicker\n dayOfWeekFormatter={formatDayOfWeek}\n defaultValue={inputValues?.defaultValue}\n disabled={isDisabled}\n fixedWeekNumber={6}\n inputRef={inputRef}\n key={language}\n label={label}\n minDate={minDate}\n maxDate={maxDate}\n onChange={formatDateTimeToJsDateStringOnCalendarSelection}\n onClose={resetIsOpen}\n open={isOpen}\n readOnly={isReadOnly}\n shouldDisableDate={shouldDisableDate}\n shouldDisableMonth={shouldDisableMonth}\n shouldDisableYear={shouldDisableYear}\n slots={slots}\n slotProps={slotProps}\n timezone={internalTimeZone}\n value={inputValues?.value}\n />\n </DatePickerWidthContainer>\n </DatePickerContainer>\n {timeZoneOptions && timeZonePickerLabel && (\n <TimeZonePickerContainer odysseyDesignTokens={odysseyDesignTokens}>\n <TimeZonePicker\n label={timeZonePickerLabel}\n onTimeZoneChange={onTimeZoneChange}\n isReadOnly={isReadOnly}\n timeZoneOptions={timeZoneOptions}\n value={internalTimeZone}\n />\n </TimeZonePickerContainer>\n )}\n </LocalizationProvider>\n </OdysseyThemeProvider>\n );\n};\n\nconst MemoizedDatePicker = memo(DatePicker);\nMemoizedDatePicker.displayName = \"DatePicker\";\n\nexport { MemoizedDatePicker as DatePicker };\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAEEA,IAAI,EACJC,WAAW,EACXC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,SAASC,cAAc,QAAQ,eAAe;AAC9C,SAEEC,UAAU,IAAIC,aAAa,EAE3BC,oBAAoB,QAGf,qBAAqB;AAE5B,SAASC,YAAY,QAAQ,kCAAkC;AAC/D,OAAOC,MAAM,MAAM,iBAAiB;AAAC,SAE5BC,MAAM;AAAA,SAEbC,aAAa,EACbC,cAAc,EACdC,YAAY,EACZC,eAAe;AAAA,SAERC,SAAS;AAAA,SACTC,eAAe;AAAA,SAGtBC,sBAAsB;AAAA,SAGfC,oBAAoB;AAAA,SACpBC,cAAc;AAAA,SAGrBC,oBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAKtB,MAAMC,mBAAmB,GAAGhB,MAAM,CAACiB,GAAG,CAAC;EACrC,sBAAsB,EAAE;IACtBC,cAAc,EAAE;EAClB;AACF,CAAC,CAAC;AAEF,MAAMC,wBAAwB,GAAGnB,MAAM,CAACiB,GAAG,CAExC,CAAC;EAAEG;AAAoB,CAAC,MAAM;EAC/B,gBAAgB,EAAE;IAChBC,KAAK,EAAE,MAAM;IACbC,QAAQ,EAAEF,mBAAmB,CAACG;EAChC;AACF,CAAC,CAAC,CAAC;AAEH,MAAMC,uBAAuB,GAAGxB,MAAM,CAAC,KAAK,EAAE;EAC5CyB,iBAAiB,EAAGC,IAAI,IAAKA,IAAI,KAAK;AACxC,CAAC,CAAC,CAAC,CAAC;EAAEN;AAA2D,CAAC,MAAM;EACtEO,gBAAgB,EAAEP,mBAAmB,CAACQ;AACxC,CAAC,CAAC,CAAC;AAEH,MAAMC,eAAe,GAAG7B,MAAM,CAACiB,GAAG,CAChC,CAAC;EAAEG;AAAoB,CAAC,MAAM;EAC5BU,OAAO,EAAE,MAAM;EACfC,cAAc,EAAE,UAAU;EAC1BC,aAAa,EAAEZ,mBAAmB,CAACa,QAAQ;EAC3CC,eAAe,EAAEd,mBAAmB,CAACa;AACvC,CAAC,CACH,CAAC;AAED,MAAME,SAAS,GAAGA,CAAC;EAAEC,OAAO;EAAEC,QAAQ;EAAEC;AAAgC,CAAC,KAAK;EAC5E,MAAM;IAAEC;EAAE,CAAC,GAAG5C,cAAc,CAAC,CAAC;EAC9B,MAAMyB,mBAAmB,GAAGZ,sBAAsB,CAAC,CAAC;EAGpD,IAAI4B,OAAO,IAAIA,OAAO,CAACI,MAAM,GAAG,CAAC,EAAE;IACjC,OACEzB,KAAA,CAACc,eAAe;MAACT,mBAAmB,EAAEA,mBAAoB;MAAAqB,QAAA,GACxD5B,IAAA,CAACZ,MAAM;QACLyC,KAAK,EAAEH,CAAC,CAAC,6BAA6B,CAAE;QACxCI,OAAO,EAAEL,QAAS;QAClBM,OAAO,EAAC;MAAU,CACnB,CAAC,EACF/B,IAAA,CAACZ,MAAM;QACLyC,KAAK,EAAEH,CAAC,CAAC,4BAA4B,CAAE;QACvCI,OAAO,EAAEN,QAAS;QAClBO,OAAO,EAAC;MAAS,CAClB,CAAC;IAAA,CACa,CAAC;EAEtB;EAEA,OAAO,IAAI;AACb,CAAC;AAED,MAAMC,iBAAiB,GAAGxD,IAAI,CAAC8C,SAAS,CAAC;AACzCU,iBAAiB,CAACC,WAAW,GAAG,WAAW;AAE3C,MAAMC,eAAe,GAAIC,IAAc,IAAKA,IAAI,CAACC,QAAQ,CAAC,KAAK,CAAC;AAiDhE,MAAMrD,UAAU,GAAGA,CAAC;EAClBsD,YAAY,EAAEC,gBAAgB;EAC9BC,YAAY;EACZC,IAAI;EACJC,iBAAiB;EACjBC,aAAa,GAAGA,CAAA,KAAM,IAAI;EAC1BC,UAAU;EACVC,UAAU;EACVC,UAAU;EACVC,cAAc,GAAGA,CAAA,KAAM,IAAI;EAC3BC,aAAa,GAAGA,CAAA,KAAM,IAAI;EAC1BlB,KAAK;EACLmB,OAAO,EAAEC,WAAW;EACpBC,OAAO,EAAEC,WAAW;EACpBC,MAAM;EACNC,oBAAoB;EACpBC,aAAa,EAAEC,iBAAiB;EAChCC,QAAQ;EACRC,mBAAmB;EACnBC,eAAe;EACfC,KAAK,EAAEC;AACQ,CAAC,KAAK;EACrB,MAAM;IAAEC,IAAI;IAAEnC;EAAE,CAAC,GAAG5C,cAAc,CAAC,CAAC;EACpC,MAAMgF,QAAQ,GAAGlF,MAAM,CAAmB,IAAI,CAAC;EAC/C,MAAM2B,mBAAmB,GAAGZ,sBAAsB,CAAC,CAAC;EAEpD,MAAM;IACJoE,qBAAqB;IACrBC,gCAAgC;IAChCC,WAAW;IACXC,gBAAgB;IAChBC,eAAe;IACfC,UAAU;IACVpB,OAAO;IACPE,OAAO;IACPmB,mBAAmB;IACnBC,iBAAiB;IACjBC,kBAAkB;IAClBC;EACF,CAAC,GAAG1E,oBAAoB,CAAC;IACvBuC,YAAY,EAAEC,gBAAgB;IAC9BC,YAAY;IACZG,aAAa;IACbI,cAAc;IACdC,aAAa;IACbC,OAAO,EAAEC,WAAW;IACpBC,OAAO,EAAEC,WAAW;IACpBK,QAAQ;IACRG,KAAK,EAAEC;EACT,CAAC,CAAC;EACF,MAAM,CAACa,MAAM,EAAEC,SAAS,CAAC,GAAG7F,QAAQ,CAAC,KAAK,CAAC;EAC3C,MAAM,CAAC8F,aAAa,EAAEC,gBAAgB,CAAC,GAAG/F,QAAQ,CAA0B,CAAC;EAE7E,MAAM;IAAEgG;EAAS,CAAC,GAAGhB,IAAI;EACzB,MAAMiB,YAAY,GAAGlG,MAAM,CAAmB,IAAI,CAAC;EAEnDF,SAAS,CAAC,MAAM;IACdkG,gBAAgB,CAACE,YAAY,CAACC,OAAO,CAAC;EACxC,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,+CAA+C,GAAGvG,WAAW,CAGhEkF,KAAK,IAAK;IACT,IAAIA,KAAK,EAAE;MACT,MAAMsB,sBAAsB,GAAGjB,gCAAgC,CAACL,KAAK,CAAC;MAEtE,IAAIsB,sBAAsB,EAAE;QAC1B5B,oBAAoB,GAAG;UACrBM,KAAK,EAAEsB,sBAAsB;UAC7BzB,QAAQ,EAAEU;QACZ,CAAC,CAAC;MACJ;IACF;EACF,CAAC,EACD,CAACF,gCAAgC,EAAEE,gBAAgB,EAAEb,oBAAoB,CAC3E,CAAC;EAED,MAAMC,aAAa,GAAG7E,WAAW,CAC9BkF,KAAK,IAAK;IACTJ,iBAAiB,GAAGI,KAAK,CAAC;EAC5B,CAAC,EACD,CAACJ,iBAAiB,CACpB,CAAC;EAED,MAAM2B,wBAAwB,GAAGzG,WAAW,CAC1C,MAAMiG,SAAS,CAAC,CAACD,MAAM,CAAC,EACxB,CAACA,MAAM,CACT,CAAC;EAED,MAAMU,WAAW,GAAG1G,WAAW,CAAC,MAAM;IACpCiG,SAAS,CAAC,KAAK,CAAC;EAClB,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMU,eAAe,GAAG3G,WAAW,CACjC,CAAC;IAAE4D,YAAY;IAAEyB,QAAQ;IAAEH;EAA4B,CAAC,KAAK;IAC3D,OACE3D,IAAA,CAACP,SAAS;MACR4C,YAAY,EAAEA,YAAa;MAC3BgD,YAAY,EACVrF,IAAA,CAACZ,MAAM;QACLkG,SAAS,EAAE5D,CAAC,CAAC,2BAA2B,CAAE;QAC1CG,KAAK,EAAC,EAAE;QACRC,OAAO,EAAEoD,wBAAyB;QAClCK,IAAI,EAAC,OAAO;QACZC,SAAS,EAAExF,IAAA,CAACT,YAAY,IAAE,CAAE;QAC5BwC,OAAO,EAAC;MAAU,CACnB,CACF;MACDQ,YAAY,EAAEA,YAAa;MAC3BC,IAAI,EAAEA,IAAK;MACXC,iBAAiB,EAAEA,iBAAkB;MACrCqB,QAAQ,EAAEA,QAAS;MACnBnB,UAAU,EAAEA,UAAW;MACvBC,UAAU,EAAEA,UAAW;MACvBC,UAAU,EAAEA,UAAW;MACvBhB,KAAK,EAAEA,KAAM;MACbuB,MAAM,EAAEA,MAAO;MACfJ,OAAO,EAAEA,OAAQ;MACjBE,OAAO,EAAEA,OAAQ;MACjBuC,QAAQ,EAAEnC,aAAc;MACxBoC,QAAQ,EAAExB,gBAAiB;MAC3BP,KAAK,EAAEA;IAAM,CACd,CAAC;EAEN,CAAC,EACD,CACEpB,YAAY,EACZC,IAAI,EACJC,iBAAiB,EACjByB,gBAAgB,EAChBvB,UAAU,EACVC,UAAU,EACVC,UAAU,EACVhB,KAAK,EACLuB,MAAM,EACNE,aAAa,EACbN,OAAO,EACPE,OAAO,EACPxB,CAAC,EACDwD,wBAAwB,CAE5B,CAAC;EAED,MAAMS,KAAK,GAAGhH,OAAO,CACnB,OAAO;IACLiH,SAAS,EAAE5D,iBAAiB;IAC5B6D,KAAK,EAAGC,QAAQ,IAAKV,eAAe,CAACU,QAAQ,CAAC;IAC9CC,aAAa,EAAEA,CAAA,KAAM/F,IAAA,CAACX,aAAa,IAAE,CAAC;IACtC2G,cAAc,EAAEA,CAAA,KAAMhG,IAAA,CAACV,cAAc,IAAE,CAAC;IACxC2G,cAAc,EAAEA,CAAA,KAAMjG,IAAA,CAACR,eAAe,IAAE;EAC1C,CAAC,CAAC,EACF,CAAC4F,eAAe,CAClB,CAAC;EAED,MAAMc,SAAS,GAAGvH,OAAO,CACvB,OAAO;IACLiH,SAAS,EAAEA,CAAC;MAAEO,cAAc;MAAE3E,QAAQ;MAAEC;IAAS,CAAC,MAAM;MACtDF,OAAO,EAEL4E,cAAc,KAAK,SAAS,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;MAC1D3E,QAAQ;MACRC;IACF,CAAC,CAAC;IACF2E,MAAM,EAAE;MACNC,QAAQ,EAAE1B;IACZ,CAAC;IAED2B,OAAO,EAAE;MACPC,kBAAkB,EAAE;IACtB;EACF,CAAC,CAAC,EACF,CAAC5B,aAAa,CAChB,CAAC;EAED,MAAM6B,gBAAgB,GAAG/H,WAAW,CACjC+E,QAA4B,IAAK;IAChC,IAAIA,QAAQ,IAAIW,eAAe,CAACX,QAAQ,CAAC,EAAE;MACzCa,mBAAmB,CAACb,QAAQ,CAAC;IAC/B;EACF,CAAC,EACD,CAACW,eAAe,EAAEE,mBAAmB,CACvC,CAAC;EAED,OACErE,IAAA,CAACJ,oBAAoB;IAAC6G,aAAa,EAAE/G,eAAgB;IAAAkC,QAAA,EACnD1B,KAAA,CAACjB,oBAAoB;MACnByH,WAAW,EAAExH,YAAa;MAC1ByH,aAAa,EAAE5C,qBAAsB;MACrCK,UAAU,EAAEA,UAAW;MAAAxC,QAAA,GAEvB5B,IAAA,CAACG,mBAAmB;QAAAyB,QAAA,EAClB5B,IAAA,CAACM,wBAAwB;UACvBC,mBAAmB,EAAEA,mBAAoB;UACzCqG,GAAG,EAAE9B,YAAa;UAAAlD,QAAA,EAElB5B,IAAA,CAAChB,aAAa;YACZ6H,kBAAkB,EAAE3E,eAAgB;YACpCG,YAAY,EAAE4B,WAAW,EAAE5B,YAAa;YACxCyE,QAAQ,EAAEnE,UAAW;YACrBoE,eAAe,EAAE,CAAE;YACnBjD,QAAQ,EAAEA,QAAS;YAEnBjC,KAAK,EAAEA,KAAM;YACbmB,OAAO,EAAEA,OAAQ;YACjBE,OAAO,EAAEA,OAAQ;YACjBuC,QAAQ,EAAET,+CAAgD;YAC1DgC,OAAO,EAAE7B,WAAY;YACrB8B,IAAI,EAAExC,MAAO;YACbyC,QAAQ,EAAErE,UAAW;YACrByB,iBAAiB,EAAEA,iBAAkB;YACrCC,kBAAkB,EAAEA,kBAAmB;YACvCC,iBAAiB,EAAEA,iBAAkB;YACrCmB,KAAK,EAAEA,KAAM;YACbO,SAAS,EAAEA,SAAU;YACrBR,QAAQ,EAAExB,gBAAiB;YAC3BP,KAAK,EAAEM,WAAW,EAAEN;UAAM,GAdrBkB,QAeN;QAAC,CACsB;MAAC,CACR,CAAC,EACrBnB,eAAe,IAAID,mBAAmB,IACrCzD,IAAA,CAACW,uBAAuB;QAACJ,mBAAmB,EAAEA,mBAAoB;QAAAqB,QAAA,EAChE5B,IAAA,CAACH,cAAc;UACbgC,KAAK,EAAE4B,mBAAoB;UAC3B+C,gBAAgB,EAAEA,gBAAiB;UACnC3D,UAAU,EAAEA,UAAW;UACvBa,eAAe,EAAEA,eAAgB;UACjCC,KAAK,EAAEO;QAAiB,CACzB;MAAC,CACqB,CAC1B;IAAA,CACmB;EAAC,CACH,CAAC;AAE3B,CAAC;AAED,MAAMiD,kBAAkB,GAAG3I,IAAI,CAACO,UAAU,CAAC;AAC3CoI,kBAAkB,CAAClF,WAAW,GAAG,YAAY;AAE7C,SAASkF,kBAAkB,IAAIpI,UAAU"}
1
+ {"version":3,"file":"DatePicker.js","names":["memo","useCallback","useEffect","useMemo","useRef","useState","useTranslation","DatePicker","MuiDatePicker","LocalizationProvider","AdapterLuxon","styled","Button","ArrowLeftIcon","ArrowRightIcon","CalendarIcon","ChevronDownIcon","DateField","datePickerTheme","useOdysseyDesignTokens","OdysseyThemeProvider","TimeZonePicker","useOdysseyDateFields","jsx","_jsx","jsxs","_jsxs","DatePickerContainer","div","marginBlockEnd","DatePickerWidthContainer","odysseyDesignTokens","width","maxWidth","TypographyLineLengthMax","TimeZonePickerContainer","shouldForwardProp","prop","marginBlockStart","Spacing3","ActionContainer","display","justifyContent","paddingInline","Spacing4","paddingBlockEnd","ActionBar","actions","onAccept","onCancel","t","length","children","label","onClick","variant","MemoizedActionBar","displayName","formatDayOfWeek","date","toFormat","defaultValue","defaultValueProp","errorMessage","hint","HintLinkComponent","isDateEnabled","isDisabled","isOptional","isReadOnly","isMonthEnabled","isYearEnabled","minDate","minDateProp","maxDate","maxDateProp","onBlur","onCalendarDateChange","onInputChange","onInputChangeProp","timeZone","timeZonePickerLabel","timeZoneOptions","value","valueProp","i18n","inputRef","defaultedLanguageCode","formatDateTimeToUtcIsoDateString","inputValues","internalTimeZone","isValidTimeZone","localeText","setInternalTimeZone","shouldDisableDate","shouldDisableMonth","shouldDisableYear","isOpen","setIsOpen","popperElement","setPopperElement","language","containerRef","current","formatDateTimeToJsDateStringOnCalendarSelection","dateStringFromDateTime","toggleCalendarVisibility","resetIsOpen","renderDateField","endAdornment","ariaLabel","size","startIcon","onChange","timezone","slots","actionBar","field","muiProps","leftArrowIcon","rightArrowIcon","switchViewIcon","slotProps","wrapperVariant","popper","anchorEl","toolbar","toolbarPlaceholder","onTimeZoneChange","themeOverride","dateAdapter","adapterLocale","ref","dayOfWeekFormatter","disabled","fixedWeekNumber","onClose","open","readOnly","MemoizedDatePicker"],"sources":["../../src/labs/DatePicker.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n FocusEventHandler,\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n type DatePickerSlots,\n DatePicker as MuiDatePicker,\n DatePickerProps as MuiDatePickerProps,\n LocalizationProvider,\n PickersActionBarProps,\n DatePickerSlotProps,\n} from \"@mui/x-date-pickers\";\nimport { DateTime } from \"luxon\";\nimport { AdapterLuxon } from \"@mui/x-date-pickers/AdapterLuxon\";\nimport styled from \"@emotion/styled\";\n\nimport { Button } from \"../Buttons\";\nimport {\n ArrowLeftIcon,\n ArrowRightIcon,\n CalendarIcon,\n ChevronDownIcon,\n} from \"../icons.generated\";\nimport { DateField, DateFieldProps } from \"./DateField\";\nimport { datePickerTheme } from \"./datePickerTheme\";\nimport { FieldComponentProps } from \"../FieldComponentProps\";\nimport {\n useOdysseyDesignTokens,\n DesignTokens,\n} from \"../OdysseyDesignTokensContext\";\nimport { OdysseyThemeProvider } from \"../OdysseyThemeProvider\";\nimport { TimeZonePicker, TimeZonePickerProps } from \"./TimeZonePicker\";\n\nimport {\n useOdysseyDateFields,\n OdysseyDateFieldProps,\n TimeZoneOption,\n} from \"./useOdysseyDateFields\";\n\nconst DatePickerContainer = styled.div({\n \".MuiFormControl-root\": {\n marginBlockEnd: 0,\n },\n});\n\nconst DatePickerWidthContainer = styled.div<{\n odysseyDesignTokens: DesignTokens;\n}>(({ odysseyDesignTokens }) => ({\n \".MuiInput-root\": {\n width: \"100%\",\n maxWidth: odysseyDesignTokens.TypographyLineLengthMax,\n },\n}));\n\nconst TimeZonePickerContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({\n marginBlockStart: odysseyDesignTokens.Spacing3,\n}));\n\nconst ActionContainer = styled.div<{ odysseyDesignTokens: DesignTokens }>(\n ({ odysseyDesignTokens }) => ({\n display: \"flex\",\n justifyContent: \"flex-end\",\n paddingInline: odysseyDesignTokens.Spacing4,\n paddingBlockEnd: odysseyDesignTokens.Spacing4,\n }),\n);\n\nconst ActionBar = ({ actions, onAccept, onCancel }: PickersActionBarProps) => {\n const { t } = useTranslation();\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n // actions will be [] or [\"accept\", \"cancel\"]\n if (actions && actions.length > 0) {\n return (\n <ActionContainer odysseyDesignTokens={odysseyDesignTokens}>\n <Button\n label={t(\"picker.labels.action.cancel\")}\n onClick={onCancel}\n variant=\"floating\"\n />\n <Button\n label={t(\"picker.labels.action.apply\")}\n onClick={onAccept}\n variant=\"primary\"\n />\n </ActionContainer>\n );\n }\n\n return null;\n};\n\nconst MemoizedActionBar = memo(ActionBar);\nMemoizedActionBar.displayName = \"ActionBar\";\n\nconst formatDayOfWeek = (date: DateTime) => date.toFormat(\"EEE\");\n\ntype RenderDateFieldProps = {\n defaultValue: DateFieldProps[\"defaultValue\"];\n value: DateFieldProps[\"value\"];\n} & MuiDatePickerProps<DateTime>;\n\nexport type DatePickerProps = {\n /**\n * The label for the `input` element.\n */\n label: string;\n /**\n * Callback fired when the a date field loses focus\n */\n onBlur?: FocusEventHandler<HTMLInputElement>;\n /**\n * Callback fired when the a date is selected with the calendar.\n */\n onCalendarDateChange?: ({\n value,\n timeZone,\n }: {\n value: string | undefined;\n timeZone: string;\n }) => void;\n /**\n * Callback fired when the date/text input changes.\n */\n onInputChange?: (value: string) => void;\n /**\n * If provided, a `TimeZonePicker` will be rendered below the DatePicker. These options will populate as the Autocomplete options\n */\n timeZoneOptions?: TimeZoneOption[];\n /**\n * label for `TimeZonePicker`\n */\n timeZonePickerLabel?: TimeZonePickerProps[\"label\"];\n} & OdysseyDateFieldProps &\n Pick<\n FieldComponentProps,\n | \"errorMessage\"\n | \"hint\"\n | \"HintLinkComponent\"\n | \"isDisabled\"\n | \"isReadOnly\"\n | \"isOptional\"\n >;\n\nconst DatePicker = ({\n defaultValue: defaultValueProp,\n errorMessage,\n hint,\n HintLinkComponent,\n isDateEnabled = () => true,\n isDisabled,\n isOptional,\n isReadOnly,\n isMonthEnabled = () => true,\n isYearEnabled = () => true,\n label,\n minDate: minDateProp,\n maxDate: maxDateProp,\n onBlur,\n onCalendarDateChange,\n onInputChange: onInputChangeProp,\n timeZone,\n timeZonePickerLabel,\n timeZoneOptions,\n value: valueProp,\n}: DatePickerProps) => {\n const { i18n, t } = useTranslation();\n const inputRef = useRef<HTMLInputElement>(null);\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n const {\n defaultedLanguageCode,\n formatDateTimeToUtcIsoDateString,\n inputValues,\n internalTimeZone,\n isValidTimeZone,\n localeText,\n minDate,\n maxDate,\n setInternalTimeZone,\n shouldDisableDate,\n shouldDisableMonth,\n shouldDisableYear,\n } = useOdysseyDateFields({\n defaultValue: defaultValueProp,\n errorMessage,\n isDateEnabled,\n isMonthEnabled,\n isYearEnabled,\n minDate: minDateProp,\n maxDate: maxDateProp,\n timeZone,\n value: valueProp,\n });\n const [isOpen, setIsOpen] = useState(false);\n const [popperElement, setPopperElement] = useState<HTMLInputElement | null>();\n\n const { language } = i18n;\n const containerRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n setPopperElement(containerRef.current);\n }, []);\n\n const formatDateTimeToJsDateStringOnCalendarSelection = useCallback<\n NonNullable<MuiDatePickerProps<DateTime>[\"onChange\"]>\n >(\n (value) => {\n if (value) {\n const dateStringFromDateTime = formatDateTimeToUtcIsoDateString(value);\n\n if (dateStringFromDateTime) {\n onCalendarDateChange?.({\n value: dateStringFromDateTime,\n timeZone: internalTimeZone,\n });\n }\n }\n },\n [formatDateTimeToUtcIsoDateString, internalTimeZone, onCalendarDateChange],\n );\n\n const onInputChange = useCallback<(value: string) => void>(\n (value) => {\n onInputChangeProp?.(value);\n },\n [onInputChangeProp],\n );\n\n const toggleCalendarVisibility = useCallback(\n () => setIsOpen(!isOpen),\n [isOpen],\n );\n\n const resetIsOpen = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const renderDateField = useCallback(\n ({ defaultValue, inputRef, value }: RenderDateFieldProps) => {\n return (\n <DateField\n defaultValue={defaultValue}\n endAdornment={\n <Button\n ariaLabel={t(\"picker.labels.date.choose\")}\n label=\"\"\n onClick={toggleCalendarVisibility}\n size=\"small\"\n startIcon={<CalendarIcon />}\n variant=\"floating\"\n />\n }\n errorMessage={errorMessage}\n hint={hint}\n HintLinkComponent={HintLinkComponent}\n inputRef={inputRef}\n isDisabled={isDisabled}\n isOptional={isOptional}\n isReadOnly={isReadOnly}\n label={label}\n onBlur={onBlur}\n minDate={minDate}\n maxDate={maxDate}\n onChange={onInputChange}\n timezone={internalTimeZone}\n value={value}\n />\n );\n },\n [\n errorMessage,\n hint,\n HintLinkComponent,\n internalTimeZone,\n isDisabled,\n isOptional,\n isReadOnly,\n label,\n onBlur,\n onInputChange,\n minDate,\n maxDate,\n t,\n toggleCalendarVisibility,\n ],\n );\n\n const slots = useMemo<DatePickerSlots<DateTime>>(\n () => ({\n actionBar: MemoizedActionBar,\n field: (muiProps) => renderDateField(muiProps),\n leftArrowIcon: () => <ArrowLeftIcon />,\n rightArrowIcon: () => <ArrowRightIcon />,\n switchViewIcon: () => <ChevronDownIcon />,\n }),\n [renderDateField],\n );\n\n const slotProps = useMemo<DatePickerSlotProps<DateTime, false>>(\n () => ({\n actionBar: ({ wrapperVariant, onAccept, onCancel }) => ({\n actions:\n // This is the default behavior but felt more clear to pass them in explicitly\n wrapperVariant === \"desktop\" ? [] : [\"accept\", \"cancel\"],\n onAccept,\n onCancel,\n }),\n popper: {\n anchorEl: popperElement,\n },\n\n toolbar: {\n toolbarPlaceholder: \"\",\n },\n }),\n [popperElement],\n );\n\n const onTimeZoneChange = useCallback(\n (timeZone: string | undefined) => {\n if (timeZone && isValidTimeZone(timeZone)) {\n setInternalTimeZone(timeZone);\n }\n },\n [isValidTimeZone, setInternalTimeZone],\n );\n\n return (\n <OdysseyThemeProvider themeOverride={datePickerTheme}>\n <LocalizationProvider\n dateAdapter={AdapterLuxon}\n adapterLocale={defaultedLanguageCode}\n localeText={localeText}\n >\n <DatePickerContainer>\n <DatePickerWidthContainer\n odysseyDesignTokens={odysseyDesignTokens}\n ref={containerRef}\n >\n <MuiDatePicker\n dayOfWeekFormatter={formatDayOfWeek}\n defaultValue={inputValues?.defaultValue}\n disabled={isDisabled}\n fixedWeekNumber={6}\n inputRef={inputRef}\n key={language}\n label={label}\n minDate={minDate}\n maxDate={maxDate}\n onChange={formatDateTimeToJsDateStringOnCalendarSelection}\n onClose={resetIsOpen}\n open={isOpen}\n readOnly={isReadOnly}\n shouldDisableDate={shouldDisableDate}\n shouldDisableMonth={shouldDisableMonth}\n shouldDisableYear={shouldDisableYear}\n slots={slots}\n slotProps={slotProps}\n timezone={internalTimeZone}\n value={inputValues?.value}\n />\n </DatePickerWidthContainer>\n </DatePickerContainer>\n {timeZoneOptions && timeZonePickerLabel && (\n <TimeZonePickerContainer odysseyDesignTokens={odysseyDesignTokens}>\n <TimeZonePicker\n label={timeZonePickerLabel}\n onTimeZoneChange={onTimeZoneChange}\n isReadOnly={isReadOnly}\n timeZoneOptions={timeZoneOptions}\n value={internalTimeZone}\n />\n </TimeZonePickerContainer>\n )}\n </LocalizationProvider>\n </OdysseyThemeProvider>\n );\n};\n\nconst MemoizedDatePicker = memo(DatePicker);\nMemoizedDatePicker.displayName = \"DatePicker\";\n\nexport { MemoizedDatePicker as DatePicker };\n"],"mappings":"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"}
@@ -236,6 +236,7 @@ const SideNav = ({
236
236
  t
237
237
  } = useTranslation();
238
238
  const [sideNavItemsList, updateSideNavItemsList] = useState(sideNavItems);
239
+ useEffect(() => updateSideNavItemsList(sideNavItems), [sideNavItems]);
239
240
  useEffect(() => {
240
241
  const updateIsContentScrollable = () => {
241
242
  if (scrollableContentRef.current && scrollableContentRef.current.parentElement) {
@@ -283,18 +284,18 @@ const SideNav = ({
283
284
  }
284
285
  cancelAnimationFrame(resizeObserverDebounceTimer);
285
286
  };
286
- }, [sideNavItems]);
287
+ }, [sideNavItemsList]);
287
288
  const scrollIntoViewRef = useRef(null);
288
289
  const firstSideNavItemIdWithIsSelected = useMemo(() => {
289
- const flattenedItems = sideNavItems.flatMap(sideNavItem => sideNavItem.nestedNavItems ? [sideNavItem, ...sideNavItem.nestedNavItems] : sideNavItem);
290
+ const flattenedItems = sideNavItemsList.flatMap(sideNavItem => sideNavItem.nestedNavItems ? [sideNavItem, ...sideNavItem.nestedNavItems] : sideNavItem);
290
291
  const firstItemWithIsSelected = flattenedItems.find(sideNavItem => sideNavItem.isSelected);
291
292
  return firstItemWithIsSelected?.id;
292
- }, [sideNavItems]);
293
+ }, [sideNavItemsList]);
293
294
  useEffect(() => {
294
295
  if (firstSideNavItemIdWithIsSelected && scrollIntoViewRef.current) {
295
296
  scrollIntoViewRef.current.scrollIntoView();
296
297
  }
297
- }, [firstSideNavItemIdWithIsSelected, scrollIntoViewRef]);
298
+ }, [firstSideNavItemIdWithIsSelected]);
298
299
  const getRefIfThisIsFirstNodeWithIsSelected = useCallback(itemId => itemId === firstSideNavItemIdWithIsSelected ? scrollIntoViewRef : undefined, [firstSideNavItemIdWithIsSelected]);
299
300
  const sideNavItemContentProviderValue = useMemo(() => ({
300
301
  isCompact,
@@ -1 +1 @@
1
- {"version":3,"file":"SideNav.js","names":["styled","memo","useMemo","useState","useCallback","useRef","useEffect","useTranslation","NavAccordion","useOdysseyDesignTokens","OdysseyThemeProvider","SideNavHeader","SideNavItemContent","StyledSideNavListItem","SideNavFooterContent","SideNavItemContentContext","SideNavToggleButton","SortableList","arrayMove","jsx","_jsx","jsxs","_jsxs","createElement","_createElement","DEFAULT_SIDE_NAV_WIDTH","SIDENAV_COLLAPSE_ICON_POSITION","StyledCollapsibleContent","shouldForwardProp","prop","odysseyDesignTokens","isSideNavCollapsed","position","display","gridTemplateColumns","height","transition","TransitionDurationMain","transitionTimingFunction","TransitionTimingMain","overflow","opacity","StyledOpacityTransitionContainer","gridTemplateRows","StyledSideNav","backgroundColor","HueNeutralWhite","HueNeutral200","content","right","top","transform","width","Spacing2","zIndex","Spacing3","SideNavHeaderContainer","hasContentScrolled","flexShrink","borderBottom","BorderWidthMain","BorderStyleMain","HueNeutral50","SideNavListContainer","padding","listStyle","listStyleType","SideNavScrollableContainer","flex","overflowY","paddingInline","SectionHeaderContainer","paddingBlock","Spacing1","Spacing4","SectionHeader","fontFamily","TypographyFamilyHeading","fontSize","TypographySizeOverline","fontWeight","TypographyWeightHeadingBold","color","HueNeutral600","textTransform","SideNavFooter","isContentScrollable","transitionProperty","transitionDuration","transitionTiming","boxShadow","SideNavFooterItemsContainer","Spacing5","flexWrap","alignItems","a","TypographyColorHeading","textDecoration","LoadingItemContainer","gap","getHasScrollableContent","scrollableContainer","scrollHeight","clientHeight","LoadingItem","children","_Skeleton","variant","SideNav","appName","footerComponent","footerItems","hasCustomFooter","isCollapsible","isCompact","isLoading","logoProps","onCollapse","onExpand","onSort","sideNavItems","setSideNavCollapsed","setIsContentScrollable","setHasContentScrolled","scrollableContentRef","resizeObserverRef","intersectionObserverRef","t","sideNavItemsList","updateSideNavItemsList","updateIsContentScrollable","current","parentElement","resizeObserverDebounceTimer","ResizeObserver","cancelAnimationFrame","requestAnimationFrame","observe","IntersectionObserver","entries","isIntersecting","slice","sort","b","time","at","root","threshold","ulElement","liElement","Array","from","disconnect","scrollIntoViewRef","firstSideNavItemIdWithIsSelected","flattenedItems","flatMap","sideNavItem","nestedNavItems","firstItemWithIsSelected","find","isSelected","id","scrollIntoView","getRefIfThisIsFirstNodeWithIsSelected","itemId","undefined","sideNavItemContentProviderValue","depth","setSelectedItem","selectedItemId","updatedSideNavItems","map","item","childItem","processedSideNavItems","childNavItems","childProps","isDisabled","navItem","Provider","value","isSortable","scrollRef","onItemSelected","sideNavExpandClickHandler","sideNavExpandKeyHandler","event","key","code","preventDefault","setSortedItems","parentId","activeIndex","overIndex","sortedSideNavItems","ariaControls","onClick","onKeyDown","role","ref","_","index","label","isSectionHeader","startIcon","isDefaultExpanded","isExpanded","disabled","items","onChange","renderItem","sortableItem","Item","MemoizedSideNav","displayName"],"sources":["../../../src/labs/SideNav/SideNav.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport styled, { CSSObject } from \"@emotion/styled\";\nimport {\n memo,\n useMemo,\n useState,\n useCallback,\n useRef,\n useEffect,\n KeyboardEventHandler,\n} from \"react\";\nimport { Skeleton } from \"@mui/material\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { NavAccordion } from \"./NavAccordion\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext\";\nimport { OdysseyThemeProvider } from \"../../OdysseyThemeProvider\";\nimport type { SideNavProps } from \"./types\";\nimport { SideNavHeader } from \"./SideNavHeader\";\nimport {\n SideNavItemContent,\n StyledSideNavListItem,\n} from \"./SideNavItemContent\";\nimport { SideNavFooterContent } from \"./SideNavFooterContent\";\nimport { SideNavItemContentContext } from \"./SideNavItemContentContext\";\nimport { SideNavToggleButton } from \"./SideNavToggleButton\";\nimport { SortableList } from \"./SortableList/SortableList\";\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { arrayMove } from \"@dnd-kit/sortable\";\n\nexport const DEFAULT_SIDE_NAV_WIDTH = \"300px\";\n\n// The side nav collapse icon is placed absolutely from the top (Logo container + nav header height)\n// to align it in the middle of the nav header text\nexport const SIDENAV_COLLAPSE_ICON_POSITION = \"77px\";\n\nconst StyledCollapsibleContent = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"isSideNavCollapsed\",\n})(\n ({\n odysseyDesignTokens,\n isSideNavCollapsed,\n }: {\n odysseyDesignTokens: DesignTokens;\n isSideNavCollapsed: boolean;\n }) => ({\n position: \"relative\",\n display: \"inline-grid\",\n gridTemplateColumns: DEFAULT_SIDE_NAV_WIDTH,\n // gridTemplateRows: \"max-content 1fr max-content\",\n height: \"100%\",\n transition: `grid-template-columns ${odysseyDesignTokens.TransitionDurationMain}, opacity 300ms`,\n transitionTimingFunction: odysseyDesignTokens.TransitionTimingMain,\n overflow: \"hidden\",\n\n ...(isSideNavCollapsed && {\n gridTemplateColumns: 0,\n opacity: 0,\n }),\n }),\n);\n\nconst StyledOpacityTransitionContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"isSideNavCollapsed\",\n})(\n ({\n odysseyDesignTokens,\n isSideNavCollapsed,\n }: {\n odysseyDesignTokens: DesignTokens;\n isSideNavCollapsed: boolean;\n }) => ({\n display: \"inline-grid\",\n gridTemplateRows: \"max-content 1fr max-content\",\n height: \"100%\",\n transition: `opacity 50ms`,\n transitionTimingFunction: odysseyDesignTokens.TransitionTimingMain,\n overflow: \"hidden\",\n\n ...(isSideNavCollapsed && {\n opacity: 0,\n }),\n }),\n);\n\nconst StyledSideNav = styled(\"nav\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"isSideNavCollapsed\",\n})(\n ({\n odysseyDesignTokens,\n isSideNavCollapsed,\n }: {\n odysseyDesignTokens: DesignTokens;\n isSideNavCollapsed: boolean;\n }) => ({\n position: \"relative\",\n display: \"inline-block\",\n height: \"100%\",\n backgroundColor: odysseyDesignTokens.HueNeutralWhite,\n\n \"&::after\": {\n backgroundColor: odysseyDesignTokens.HueNeutral200,\n content: \"''\",\n height: \"100%\",\n opacity: 0,\n position: \"absolute\",\n right: 0,\n top: 0,\n transform: `translateX(0)`,\n transition: `opacity ${odysseyDesignTokens.TransitionDurationMain}, transform ${odysseyDesignTokens.TransitionDurationMain}`,\n width: odysseyDesignTokens.Spacing2,\n zIndex: 2,\n },\n\n \"&:has([data-sidenav-toggle='true']:hover), &:has([data-sidenav-toggle='true']:focus)\":\n {\n ...(isSideNavCollapsed && {\n \"&::after\": {\n opacity: 1,\n transform: `translateX(100%)`,\n },\n\n \"[data-sidenav-toggle='true']\": {\n transform: `translate3d(calc(100% + ${odysseyDesignTokens.Spacing3}), 0, 0)`,\n },\n }),\n },\n\n \"[data-sidenav-toggle='true']\": {\n position: \"absolute\",\n top: SIDENAV_COLLAPSE_ICON_POSITION,\n right: 0,\n transition: `transform ${odysseyDesignTokens.TransitionDurationMain}`,\n transform: `translate3d(100%, 0, 0)`,\n },\n }),\n);\n\nconst SideNavHeaderContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"hasContentScrolled\" && prop !== \"odysseyDesignTokens\",\n})(\n ({\n hasContentScrolled,\n odysseyDesignTokens,\n }: {\n hasContentScrolled: boolean;\n odysseyDesignTokens: DesignTokens;\n }) => ({\n flexShrink: 0,\n // The bottom border should appear only if the scrollable region has been scrolled\n ...(hasContentScrolled &&\n ({\n borderBottom: `${odysseyDesignTokens.BorderWidthMain} ${odysseyDesignTokens.BorderStyleMain} ${odysseyDesignTokens.HueNeutral50}`,\n } satisfies CSSObject)),\n }),\n);\n\nconst SideNavListContainer = styled(\"ul\")(() => ({\n padding: 0,\n listStyle: \"none\",\n listStyleType: \"none\",\n}));\n\nconst SideNavScrollableContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({\n flex: \"1 1 100%\",\n overflowY: \"auto\",\n paddingInline: odysseyDesignTokens.Spacing2,\n}));\n\nconst SectionHeaderContainer = styled(\"li\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({\n paddingBlock: odysseyDesignTokens.Spacing1,\n paddingInline: odysseyDesignTokens.Spacing4,\n}));\n\nconst SectionHeader = styled(\"h3\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({\n fontFamily: odysseyDesignTokens.TypographyFamilyHeading,\n fontSize: odysseyDesignTokens.TypographySizeOverline,\n fontWeight: odysseyDesignTokens.TypographyWeightHeadingBold,\n color: odysseyDesignTokens.HueNeutral600,\n textTransform: \"uppercase\",\n}));\n\nconst SideNavFooter = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"isContentScrollable\" && prop !== \"odysseyDesignTokens\",\n})(\n ({\n isContentScrollable,\n odysseyDesignTokens,\n }: {\n isContentScrollable: boolean;\n odysseyDesignTokens: DesignTokens;\n }) => ({\n flexShrink: 0,\n transitionProperty: \"box-shadow\",\n transitionDuration: odysseyDesignTokens.TransitionDurationMain,\n transitionTiming: odysseyDesignTokens.TransitionTimingMain,\n backgroundColor: odysseyDesignTokens.HueNeutralWhite,\n // The box shadow should appear above the footer only if the scrollable region has overflow\n ...(isContentScrollable && {\n boxShadow: \"0px -8px 8px -8px rgba(39, 39, 39, 0.08)\",\n }),\n }),\n);\n\nconst SideNavFooterItemsContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({\n paddingBlock: odysseyDesignTokens.Spacing4,\n // paddingBlockEnd: odysseyDesignTokens.Spacing4,\n paddingInline: odysseyDesignTokens.Spacing5,\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n fontSize: odysseyDesignTokens.TypographySizeOverline,\n\n a: {\n color: `${odysseyDesignTokens.TypographyColorHeading} !important`,\n\n \"&:hover\": {\n textDecoration: \"none\",\n },\n \"&:visited\": {\n color: odysseyDesignTokens.TypographyColorHeading,\n },\n },\n}));\n\nconst LoadingItemContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({\n alignItems: \"center\",\n display: \"flex\",\n gap: odysseyDesignTokens.Spacing2,\n paddingBlock: odysseyDesignTokens.Spacing2,\n paddingInline: odysseyDesignTokens.Spacing4,\n}));\n\nconst getHasScrollableContent = (scrollableContainer: HTMLElement) =>\n scrollableContainer.scrollHeight > scrollableContainer.clientHeight;\n\nconst LoadingItem = () => {\n const odysseyDesignTokens: DesignTokens = useOdysseyDesignTokens();\n return (\n <LoadingItemContainer odysseyDesignTokens={odysseyDesignTokens}>\n <Skeleton\n variant=\"circular\"\n width={odysseyDesignTokens.Spacing4}\n height={odysseyDesignTokens.Spacing4}\n />\n <Skeleton variant=\"rounded\" width=\"100%\" />\n </LoadingItemContainer>\n );\n};\n\nconst SideNav = ({\n appName,\n footerComponent,\n footerItems,\n hasCustomFooter,\n isCollapsible,\n isCompact,\n isLoading,\n logoProps,\n onCollapse,\n onExpand,\n onSort,\n sideNavItems,\n}: SideNavProps) => {\n const [isSideNavCollapsed, setSideNavCollapsed] = useState(false);\n const [isContentScrollable, setIsContentScrollable] = useState(false);\n const [hasContentScrolled, setHasContentScrolled] = useState(false);\n const scrollableContentRef = useRef<HTMLUListElement>(null);\n const resizeObserverRef = useRef<ResizeObserver | null>(null);\n const intersectionObserverRef = useRef<IntersectionObserver | null>(null);\n const odysseyDesignTokens: DesignTokens = useOdysseyDesignTokens();\n const { t } = useTranslation();\n const [sideNavItemsList, updateSideNavItemsList] = useState(sideNavItems);\n\n useEffect(() => {\n const updateIsContentScrollable = () => {\n if (\n scrollableContentRef.current &&\n scrollableContentRef.current.parentElement\n ) {\n setIsContentScrollable(\n getHasScrollableContent(scrollableContentRef.current.parentElement),\n );\n }\n };\n\n // If the window is resized, we may need to re-determine if the scrollable container has overflow\n // Setup a ResizeObserver to know if the size of the scrollableContent changes\n let resizeObserverDebounceTimer: ReturnType<typeof requestAnimationFrame>;\n if (!resizeObserverRef.current) {\n resizeObserverRef.current = new ResizeObserver(() => {\n cancelAnimationFrame(resizeObserverDebounceTimer);\n resizeObserverDebounceTimer = requestAnimationFrame(\n updateIsContentScrollable,\n );\n });\n }\n\n if (resizeObserverRef.current && scrollableContentRef.current) {\n // Observe the <ul> itself (in case it changes size due to the content expanding)\n resizeObserverRef.current.observe(scrollableContentRef.current);\n if (scrollableContentRef.current.parentElement) {\n // ALSO observe the parent (<SideNavScrollableContainer>) in case the window resizes\n resizeObserverRef.current.observe(\n scrollableContentRef.current.parentElement,\n );\n }\n }\n\n // Determine if the scrollable container has overflow or not on load\n updateIsContentScrollable();\n\n // Finally, we only want to have the border on the bottom of the header iff the user has scrolled\n // the scrollable container\n if (!intersectionObserverRef.current && scrollableContentRef.current) {\n intersectionObserverRef.current = new IntersectionObserver(\n (entries) => {\n // If isIntersecting is true, then we're at the top of the scroll container\n // If isIntersecting is false, some scrolling has occurred.\n // The entries must be sorted by time and we only really need to look at the latest one\n const isIntersecting = entries\n .slice()\n .sort((a, b) => a.time - b.time)\n .at(0)?.isIntersecting;\n setHasContentScrolled(!isIntersecting);\n },\n {\n root: scrollableContentRef.current.parentElement,\n threshold: 1.0,\n },\n );\n }\n\n if (intersectionObserverRef.current && scrollableContentRef.current) {\n const ulElement = scrollableContentRef.current;\n const [liElement] = Array.from(ulElement?.children || []);\n\n if (liElement) {\n intersectionObserverRef.current.observe(liElement);\n }\n }\n\n // Cleanup when unmounted:\n return () => {\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n resizeObserverRef.current = null;\n }\n if (intersectionObserverRef.current) {\n intersectionObserverRef.current.disconnect();\n intersectionObserverRef.current = null;\n }\n cancelAnimationFrame(resizeObserverDebounceTimer); // Ensure timer is cleared on component unmount\n };\n }, [sideNavItems]);\n\n const scrollIntoViewRef = useRef<HTMLLIElement>(null);\n /**\n * Look through the sideNavItems and determine which is the first node\n * with isSelected. This should be the node we set a ref on in order to\n * call scrollIntoView in the effect\n */\n const firstSideNavItemIdWithIsSelected = useMemo(() => {\n const flattenedItems = sideNavItems.flatMap((sideNavItem) =>\n sideNavItem.nestedNavItems\n ? [sideNavItem, ...sideNavItem.nestedNavItems]\n : sideNavItem,\n );\n const firstItemWithIsSelected = flattenedItems.find(\n (sideNavItem) => sideNavItem.isSelected,\n );\n return firstItemWithIsSelected?.id;\n }, [sideNavItems]);\n /**\n * Once we've rendered and if we have an item to scroll to, do the scroll action.\n * This must rely on checking firstSideNavItemIdWithIsSelected or it will not run\n * once the actual ref is populated.\n */\n useEffect(() => {\n if (firstSideNavItemIdWithIsSelected && scrollIntoViewRef.current) {\n scrollIntoViewRef.current.scrollIntoView();\n }\n }, [firstSideNavItemIdWithIsSelected, scrollIntoViewRef]);\n\n /**\n * We only want to put a ref on a node iff it is the first selected node.\n * This function returns the ref only if the ID provided matches the first\n * selected node, otherwise returns undefined (so that the node has no ref)\n */\n const getRefIfThisIsFirstNodeWithIsSelected = useCallback(\n (itemId: string) =>\n itemId === firstSideNavItemIdWithIsSelected\n ? scrollIntoViewRef\n : undefined,\n [firstSideNavItemIdWithIsSelected],\n );\n\n const sideNavItemContentProviderValue = useMemo(\n () => ({ isCompact, depth: 1 }),\n [isCompact],\n );\n\n const setSelectedItem = useCallback(\n (selectedItemId: string) => {\n const updatedSideNavItems = sideNavItemsList.map((item) => {\n if (item.id === selectedItemId) {\n item.isSelected = true;\n } else if (item.isSelected) {\n delete item.isSelected;\n }\n\n return item.nestedNavItems\n ? {\n ...item,\n nestedNavItems: item.nestedNavItems.map((childItem) => {\n if (childItem.id === selectedItemId) {\n childItem.isSelected = true;\n } else if (childItem.isSelected) {\n delete childItem.isSelected;\n }\n return childItem;\n }),\n }\n : item;\n });\n updateSideNavItemsList(updatedSideNavItems);\n },\n [sideNavItemsList],\n );\n\n const processedSideNavItems = useMemo(() => {\n return sideNavItemsList?.map((item) => ({\n ...item,\n childNavItems: item.nestedNavItems?.map((childProps) => {\n return {\n id: childProps.id,\n isSelected: childProps.isSelected,\n isDisabled: childProps.isDisabled,\n navItem: (\n <SideNavItemContentContext.Provider\n value={{\n ...sideNavItemContentProviderValue,\n depth: 2,\n isSortable: item.isSortable,\n }}\n key={childProps.id}\n >\n <SideNavItemContent\n {...childProps}\n scrollRef={getRefIfThisIsFirstNodeWithIsSelected(childProps.id)}\n onItemSelected={setSelectedItem}\n />\n </SideNavItemContentContext.Provider>\n ),\n };\n }),\n }));\n }, [\n getRefIfThisIsFirstNodeWithIsSelected,\n sideNavItemsList,\n sideNavItemContentProviderValue,\n setSelectedItem,\n ]);\n\n const sideNavExpandClickHandler = useCallback(() => {\n isSideNavCollapsed ? onExpand?.() : onCollapse?.();\n setSideNavCollapsed(!isSideNavCollapsed);\n }, [isSideNavCollapsed, setSideNavCollapsed, onExpand, onCollapse]);\n\n const sideNavExpandKeyHandler = useCallback<\n KeyboardEventHandler<HTMLButtonElement>\n >(\n (event) => {\n if (event?.key === \"Enter\" || event?.code === \"Space\") {\n event.preventDefault();\n sideNavExpandClickHandler();\n }\n },\n [sideNavExpandClickHandler],\n );\n\n const setSortedItems = useCallback(\n (parentId: string, activeIndex: number, overIndex: number) => {\n const sortedSideNavItems = sideNavItemsList.map((item) =>\n item.id === parentId && item.nestedNavItems\n ? {\n ...item,\n nestedNavItems: arrayMove(\n item.nestedNavItems,\n activeIndex,\n overIndex,\n ),\n }\n : item,\n );\n updateSideNavItemsList(sortedSideNavItems);\n onSort?.(sortedSideNavItems);\n },\n [onSort, sideNavItemsList],\n );\n\n return (\n <StyledSideNav\n aria-label={t(\"navigation.label\")}\n id=\"side-nav-expandable\"\n isSideNavCollapsed={isSideNavCollapsed}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {isCollapsible && (\n <SideNavToggleButton\n ariaControls=\"side-nav-expandable\"\n isSideNavCollapsed={isSideNavCollapsed}\n onClick={sideNavExpandClickHandler}\n onKeyDown={sideNavExpandKeyHandler}\n />\n )}\n <OdysseyThemeProvider>\n <StyledCollapsibleContent\n data-se=\"collapsible-region\"\n isSideNavCollapsed={isSideNavCollapsed}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <StyledOpacityTransitionContainer\n isSideNavCollapsed={isSideNavCollapsed}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <SideNavHeaderContainer\n odysseyDesignTokens={odysseyDesignTokens}\n hasContentScrolled={hasContentScrolled}\n >\n <SideNavHeader\n appName={appName}\n isLoading={isLoading}\n logoProps={logoProps}\n />\n </SideNavHeaderContainer>\n <SideNavScrollableContainer\n odysseyDesignTokens={odysseyDesignTokens}\n data-se=\"scrollable-region\"\n >\n <SideNavListContainer role=\"none\" ref={scrollableContentRef}>\n {isLoading\n ? [...Array(6)].map((_, index) => <LoadingItem key={index} />)\n : processedSideNavItems?.map((item) => {\n const {\n id,\n label,\n isSectionHeader,\n startIcon,\n childNavItems,\n isSortable,\n isDefaultExpanded,\n isDisabled,\n isExpanded,\n } = item;\n\n if (isSectionHeader) {\n return (\n <SectionHeaderContainer\n id={id}\n key={id}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <SectionHeader\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {label}\n </SectionHeader>\n </SectionHeaderContainer>\n );\n } else if (childNavItems) {\n return (\n <StyledSideNavListItem\n id={id}\n key={id}\n odysseyDesignTokens={odysseyDesignTokens}\n disabled={isDisabled}\n aria-disabled={isDisabled}\n >\n <NavAccordion\n label={label}\n isCompact={isCompact}\n isDefaultExpanded={isDefaultExpanded}\n isExpanded={isExpanded}\n startIcon={startIcon}\n isDisabled={isDisabled}\n >\n <SideNavListContainer role=\"none\">\n {isSortable ? (\n <SortableList\n parentId={item.id}\n items={childNavItems}\n onChange={setSortedItems}\n renderItem={(sortableItem) => (\n <SortableList.Item\n id={sortableItem.id}\n isDisabled={sortableItem.isDisabled}\n isSelected={sortableItem.isSelected}\n >\n {sortableItem.navItem}\n </SortableList.Item>\n )}\n />\n ) : (\n childNavItems.map((item) => item.navItem)\n )}\n </SideNavListContainer>\n </NavAccordion>\n </StyledSideNavListItem>\n );\n } else {\n return (\n <SideNavItemContentContext.Provider\n key={item.id}\n value={sideNavItemContentProviderValue}\n >\n <SideNavItemContent\n {...item}\n key={item.id}\n scrollRef={getRefIfThisIsFirstNodeWithIsSelected(\n item.id,\n )}\n onItemSelected={setSelectedItem}\n />\n </SideNavItemContentContext.Provider>\n );\n }\n })}\n </SideNavListContainer>\n </SideNavScrollableContainer>\n {!isLoading && (footerItems || hasCustomFooter) && (\n <SideNavFooter\n odysseyDesignTokens={odysseyDesignTokens}\n isContentScrollable={isContentScrollable}\n >\n {hasCustomFooter\n ? footerComponent\n : footerItems && (\n <SideNavFooterItemsContainer\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <SideNavFooterContent footerItems={footerItems} />\n </SideNavFooterItemsContainer>\n )}\n </SideNavFooter>\n )}\n </StyledOpacityTransitionContainer>\n </StyledCollapsibleContent>\n </OdysseyThemeProvider>\n </StyledSideNav>\n );\n};\n\nconst MemoizedSideNav = memo(SideNav);\nMemoizedSideNav.displayName = \"SideNav\";\n\nexport { MemoizedSideNav as SideNav };\n"],"mappings":"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"}
1
+ {"version":3,"file":"SideNav.js","names":["styled","memo","useMemo","useState","useCallback","useRef","useEffect","useTranslation","NavAccordion","useOdysseyDesignTokens","OdysseyThemeProvider","SideNavHeader","SideNavItemContent","StyledSideNavListItem","SideNavFooterContent","SideNavItemContentContext","SideNavToggleButton","SortableList","arrayMove","jsx","_jsx","jsxs","_jsxs","createElement","_createElement","DEFAULT_SIDE_NAV_WIDTH","SIDENAV_COLLAPSE_ICON_POSITION","StyledCollapsibleContent","shouldForwardProp","prop","odysseyDesignTokens","isSideNavCollapsed","position","display","gridTemplateColumns","height","transition","TransitionDurationMain","transitionTimingFunction","TransitionTimingMain","overflow","opacity","StyledOpacityTransitionContainer","gridTemplateRows","StyledSideNav","backgroundColor","HueNeutralWhite","HueNeutral200","content","right","top","transform","width","Spacing2","zIndex","Spacing3","SideNavHeaderContainer","hasContentScrolled","flexShrink","borderBottom","BorderWidthMain","BorderStyleMain","HueNeutral50","SideNavListContainer","padding","listStyle","listStyleType","SideNavScrollableContainer","flex","overflowY","paddingInline","SectionHeaderContainer","paddingBlock","Spacing1","Spacing4","SectionHeader","fontFamily","TypographyFamilyHeading","fontSize","TypographySizeOverline","fontWeight","TypographyWeightHeadingBold","color","HueNeutral600","textTransform","SideNavFooter","isContentScrollable","transitionProperty","transitionDuration","transitionTiming","boxShadow","SideNavFooterItemsContainer","Spacing5","flexWrap","alignItems","a","TypographyColorHeading","textDecoration","LoadingItemContainer","gap","getHasScrollableContent","scrollableContainer","scrollHeight","clientHeight","LoadingItem","children","_Skeleton","variant","SideNav","appName","footerComponent","footerItems","hasCustomFooter","isCollapsible","isCompact","isLoading","logoProps","onCollapse","onExpand","onSort","sideNavItems","setSideNavCollapsed","setIsContentScrollable","setHasContentScrolled","scrollableContentRef","resizeObserverRef","intersectionObserverRef","t","sideNavItemsList","updateSideNavItemsList","updateIsContentScrollable","current","parentElement","resizeObserverDebounceTimer","ResizeObserver","cancelAnimationFrame","requestAnimationFrame","observe","IntersectionObserver","entries","isIntersecting","slice","sort","b","time","at","root","threshold","ulElement","liElement","Array","from","disconnect","scrollIntoViewRef","firstSideNavItemIdWithIsSelected","flattenedItems","flatMap","sideNavItem","nestedNavItems","firstItemWithIsSelected","find","isSelected","id","scrollIntoView","getRefIfThisIsFirstNodeWithIsSelected","itemId","undefined","sideNavItemContentProviderValue","depth","setSelectedItem","selectedItemId","updatedSideNavItems","map","item","childItem","processedSideNavItems","childNavItems","childProps","isDisabled","navItem","Provider","value","isSortable","scrollRef","onItemSelected","sideNavExpandClickHandler","sideNavExpandKeyHandler","event","key","code","preventDefault","setSortedItems","parentId","activeIndex","overIndex","sortedSideNavItems","ariaControls","onClick","onKeyDown","role","ref","_","index","label","isSectionHeader","startIcon","isDefaultExpanded","isExpanded","disabled","items","onChange","renderItem","sortableItem","Item","MemoizedSideNav","displayName"],"sources":["../../../src/labs/SideNav/SideNav.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport styled, { CSSObject } from \"@emotion/styled\";\nimport {\n memo,\n useMemo,\n useState,\n useCallback,\n useRef,\n useEffect,\n KeyboardEventHandler,\n} from \"react\";\nimport { Skeleton } from \"@mui/material\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { NavAccordion } from \"./NavAccordion\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext\";\nimport { OdysseyThemeProvider } from \"../../OdysseyThemeProvider\";\nimport type { SideNavProps } from \"./types\";\nimport { SideNavHeader } from \"./SideNavHeader\";\nimport {\n SideNavItemContent,\n StyledSideNavListItem,\n} from \"./SideNavItemContent\";\nimport { SideNavFooterContent } from \"./SideNavFooterContent\";\nimport { SideNavItemContentContext } from \"./SideNavItemContentContext\";\nimport { SideNavToggleButton } from \"./SideNavToggleButton\";\nimport { SortableList } from \"./SortableList/SortableList\";\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { arrayMove } from \"@dnd-kit/sortable\";\n\nexport const DEFAULT_SIDE_NAV_WIDTH = \"300px\";\n\n// The side nav collapse icon is placed absolutely from the top (Logo container + nav header height)\n// to align it in the middle of the nav header text\nexport const SIDENAV_COLLAPSE_ICON_POSITION = \"77px\";\n\nconst StyledCollapsibleContent = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"isSideNavCollapsed\",\n})(\n ({\n odysseyDesignTokens,\n isSideNavCollapsed,\n }: {\n odysseyDesignTokens: DesignTokens;\n isSideNavCollapsed: boolean;\n }) => ({\n position: \"relative\",\n display: \"inline-grid\",\n gridTemplateColumns: DEFAULT_SIDE_NAV_WIDTH,\n // gridTemplateRows: \"max-content 1fr max-content\",\n height: \"100%\",\n transition: `grid-template-columns ${odysseyDesignTokens.TransitionDurationMain}, opacity 300ms`,\n transitionTimingFunction: odysseyDesignTokens.TransitionTimingMain,\n overflow: \"hidden\",\n\n ...(isSideNavCollapsed && {\n gridTemplateColumns: 0,\n opacity: 0,\n }),\n }),\n);\n\nconst StyledOpacityTransitionContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"isSideNavCollapsed\",\n})(\n ({\n odysseyDesignTokens,\n isSideNavCollapsed,\n }: {\n odysseyDesignTokens: DesignTokens;\n isSideNavCollapsed: boolean;\n }) => ({\n display: \"inline-grid\",\n gridTemplateRows: \"max-content 1fr max-content\",\n height: \"100%\",\n transition: `opacity 50ms`,\n transitionTimingFunction: odysseyDesignTokens.TransitionTimingMain,\n overflow: \"hidden\",\n\n ...(isSideNavCollapsed && {\n opacity: 0,\n }),\n }),\n);\n\nconst StyledSideNav = styled(\"nav\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"isSideNavCollapsed\",\n})(\n ({\n odysseyDesignTokens,\n isSideNavCollapsed,\n }: {\n odysseyDesignTokens: DesignTokens;\n isSideNavCollapsed: boolean;\n }) => ({\n position: \"relative\",\n display: \"inline-block\",\n height: \"100%\",\n backgroundColor: odysseyDesignTokens.HueNeutralWhite,\n\n \"&::after\": {\n backgroundColor: odysseyDesignTokens.HueNeutral200,\n content: \"''\",\n height: \"100%\",\n opacity: 0,\n position: \"absolute\",\n right: 0,\n top: 0,\n transform: `translateX(0)`,\n transition: `opacity ${odysseyDesignTokens.TransitionDurationMain}, transform ${odysseyDesignTokens.TransitionDurationMain}`,\n width: odysseyDesignTokens.Spacing2,\n zIndex: 2,\n },\n\n \"&:has([data-sidenav-toggle='true']:hover), &:has([data-sidenav-toggle='true']:focus)\":\n {\n ...(isSideNavCollapsed && {\n \"&::after\": {\n opacity: 1,\n transform: `translateX(100%)`,\n },\n\n \"[data-sidenav-toggle='true']\": {\n transform: `translate3d(calc(100% + ${odysseyDesignTokens.Spacing3}), 0, 0)`,\n },\n }),\n },\n\n \"[data-sidenav-toggle='true']\": {\n position: \"absolute\",\n top: SIDENAV_COLLAPSE_ICON_POSITION,\n right: 0,\n transition: `transform ${odysseyDesignTokens.TransitionDurationMain}`,\n transform: `translate3d(100%, 0, 0)`,\n },\n }),\n);\n\nconst SideNavHeaderContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"hasContentScrolled\" && prop !== \"odysseyDesignTokens\",\n})(\n ({\n hasContentScrolled,\n odysseyDesignTokens,\n }: {\n hasContentScrolled: boolean;\n odysseyDesignTokens: DesignTokens;\n }) => ({\n flexShrink: 0,\n // The bottom border should appear only if the scrollable region has been scrolled\n ...(hasContentScrolled &&\n ({\n borderBottom: `${odysseyDesignTokens.BorderWidthMain} ${odysseyDesignTokens.BorderStyleMain} ${odysseyDesignTokens.HueNeutral50}`,\n } satisfies CSSObject)),\n }),\n);\n\nconst SideNavListContainer = styled(\"ul\")(() => ({\n padding: 0,\n listStyle: \"none\",\n listStyleType: \"none\",\n}));\n\nconst SideNavScrollableContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({\n flex: \"1 1 100%\",\n overflowY: \"auto\",\n paddingInline: odysseyDesignTokens.Spacing2,\n}));\n\nconst SectionHeaderContainer = styled(\"li\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({\n paddingBlock: odysseyDesignTokens.Spacing1,\n paddingInline: odysseyDesignTokens.Spacing4,\n}));\n\nconst SectionHeader = styled(\"h3\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({\n fontFamily: odysseyDesignTokens.TypographyFamilyHeading,\n fontSize: odysseyDesignTokens.TypographySizeOverline,\n fontWeight: odysseyDesignTokens.TypographyWeightHeadingBold,\n color: odysseyDesignTokens.HueNeutral600,\n textTransform: \"uppercase\",\n}));\n\nconst SideNavFooter = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"isContentScrollable\" && prop !== \"odysseyDesignTokens\",\n})(\n ({\n isContentScrollable,\n odysseyDesignTokens,\n }: {\n isContentScrollable: boolean;\n odysseyDesignTokens: DesignTokens;\n }) => ({\n flexShrink: 0,\n transitionProperty: \"box-shadow\",\n transitionDuration: odysseyDesignTokens.TransitionDurationMain,\n transitionTiming: odysseyDesignTokens.TransitionTimingMain,\n backgroundColor: odysseyDesignTokens.HueNeutralWhite,\n // The box shadow should appear above the footer only if the scrollable region has overflow\n ...(isContentScrollable && {\n boxShadow: \"0px -8px 8px -8px rgba(39, 39, 39, 0.08)\",\n }),\n }),\n);\n\nconst SideNavFooterItemsContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({\n paddingBlock: odysseyDesignTokens.Spacing4,\n // paddingBlockEnd: odysseyDesignTokens.Spacing4,\n paddingInline: odysseyDesignTokens.Spacing5,\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n fontSize: odysseyDesignTokens.TypographySizeOverline,\n\n a: {\n color: `${odysseyDesignTokens.TypographyColorHeading} !important`,\n\n \"&:hover\": {\n textDecoration: \"none\",\n },\n \"&:visited\": {\n color: odysseyDesignTokens.TypographyColorHeading,\n },\n },\n}));\n\nconst LoadingItemContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})(({ odysseyDesignTokens }: { odysseyDesignTokens: DesignTokens }) => ({\n alignItems: \"center\",\n display: \"flex\",\n gap: odysseyDesignTokens.Spacing2,\n paddingBlock: odysseyDesignTokens.Spacing2,\n paddingInline: odysseyDesignTokens.Spacing4,\n}));\n\nconst getHasScrollableContent = (scrollableContainer: HTMLElement) =>\n scrollableContainer.scrollHeight > scrollableContainer.clientHeight;\n\nconst LoadingItem = () => {\n const odysseyDesignTokens: DesignTokens = useOdysseyDesignTokens();\n return (\n <LoadingItemContainer odysseyDesignTokens={odysseyDesignTokens}>\n <Skeleton\n variant=\"circular\"\n width={odysseyDesignTokens.Spacing4}\n height={odysseyDesignTokens.Spacing4}\n />\n <Skeleton variant=\"rounded\" width=\"100%\" />\n </LoadingItemContainer>\n );\n};\n\nconst SideNav = ({\n appName,\n footerComponent,\n footerItems,\n hasCustomFooter,\n isCollapsible,\n isCompact,\n isLoading,\n logoProps,\n onCollapse,\n onExpand,\n onSort,\n sideNavItems,\n}: SideNavProps) => {\n const [isSideNavCollapsed, setSideNavCollapsed] = useState(false);\n const [isContentScrollable, setIsContentScrollable] = useState(false);\n const [hasContentScrolled, setHasContentScrolled] = useState(false);\n const scrollableContentRef = useRef<HTMLUListElement>(null);\n const resizeObserverRef = useRef<ResizeObserver | null>(null);\n const intersectionObserverRef = useRef<IntersectionObserver | null>(null);\n const odysseyDesignTokens: DesignTokens = useOdysseyDesignTokens();\n const { t } = useTranslation();\n const [sideNavItemsList, updateSideNavItemsList] = useState(sideNavItems);\n\n // The default value (sideNavItems) passed to useState is ONLY used by the useState hook for\n // the very first value. Subsequent updates to the prop (sideNavItems) need to cause the state\n // to update!\n useEffect(() => updateSideNavItemsList(sideNavItems), [sideNavItems]);\n\n useEffect(() => {\n // This is called directly in this effect AND perhaps as a result of the ResizeObserver\n const updateIsContentScrollable = () => {\n if (\n scrollableContentRef.current &&\n scrollableContentRef.current.parentElement\n ) {\n setIsContentScrollable(\n getHasScrollableContent(scrollableContentRef.current.parentElement),\n );\n }\n };\n\n // If the window is resized, we may need to re-determine if the scrollable container has overflow\n // Setup a ResizeObserver to know if the size of the scrollableContent changes\n let resizeObserverDebounceTimer: ReturnType<typeof requestAnimationFrame>;\n if (!resizeObserverRef.current) {\n resizeObserverRef.current = new ResizeObserver(() => {\n cancelAnimationFrame(resizeObserverDebounceTimer);\n resizeObserverDebounceTimer = requestAnimationFrame(\n updateIsContentScrollable,\n );\n });\n }\n\n if (resizeObserverRef.current && scrollableContentRef.current) {\n // Observe the <ul> itself (in case it changes size due to the content expanding)\n resizeObserverRef.current.observe(scrollableContentRef.current);\n if (scrollableContentRef.current.parentElement) {\n // ALSO observe the parent (<SideNavScrollableContainer>) in case the window resizes\n resizeObserverRef.current.observe(\n scrollableContentRef.current.parentElement,\n );\n }\n }\n\n // Determine if the scrollable container has overflow or not on load\n updateIsContentScrollable();\n\n // Finally, we only want to have the border on the bottom of the header iff the user has scrolled\n // the scrollable container\n if (!intersectionObserverRef.current && scrollableContentRef.current) {\n intersectionObserverRef.current = new IntersectionObserver(\n (entries) => {\n // If isIntersecting is true, then we're at the top of the scroll container\n // If isIntersecting is false, some scrolling has occurred.\n // The entries must be sorted by time and we only really need to look at the latest one\n const isIntersecting = entries\n .slice()\n .sort((a, b) => a.time - b.time)\n .at(0)?.isIntersecting;\n setHasContentScrolled(!isIntersecting);\n },\n {\n root: scrollableContentRef.current.parentElement,\n threshold: 1.0,\n },\n );\n }\n\n if (intersectionObserverRef.current && scrollableContentRef.current) {\n const ulElement = scrollableContentRef.current;\n const [liElement] = Array.from(ulElement?.children || []);\n\n if (liElement) {\n intersectionObserverRef.current.observe(liElement);\n }\n }\n\n // Cleanup when unmounted:\n return () => {\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n resizeObserverRef.current = null;\n }\n if (intersectionObserverRef.current) {\n intersectionObserverRef.current.disconnect();\n intersectionObserverRef.current = null;\n }\n cancelAnimationFrame(resizeObserverDebounceTimer); // Ensure timer is cleared on component unmount\n };\n }, [sideNavItemsList]);\n\n const scrollIntoViewRef = useRef<HTMLLIElement>(null);\n /**\n * Look through the sideNavItems and determine which is the first node\n * with isSelected. This should be the node we set a ref on in order to\n * call scrollIntoView in the effect\n */\n const firstSideNavItemIdWithIsSelected = useMemo(() => {\n const flattenedItems = sideNavItemsList.flatMap((sideNavItem) =>\n sideNavItem.nestedNavItems\n ? [sideNavItem, ...sideNavItem.nestedNavItems]\n : sideNavItem,\n );\n const firstItemWithIsSelected = flattenedItems.find(\n (sideNavItem) => sideNavItem.isSelected,\n );\n return firstItemWithIsSelected?.id;\n }, [sideNavItemsList]);\n /**\n * Once we've rendered and if we have an item to scroll to, do the scroll action.\n * This must rely on checking firstSideNavItemIdWithIsSelected or it will not run\n * once the actual ref is populated.\n */\n useEffect(() => {\n if (firstSideNavItemIdWithIsSelected && scrollIntoViewRef.current) {\n scrollIntoViewRef.current.scrollIntoView();\n }\n }, [firstSideNavItemIdWithIsSelected]);\n\n /**\n * We only want to put a ref on a node iff it is the first selected node.\n * This function returns the ref only if the ID provided matches the first\n * selected node, otherwise returns undefined (so that the node has no ref)\n */\n const getRefIfThisIsFirstNodeWithIsSelected = useCallback(\n (itemId: string) =>\n itemId === firstSideNavItemIdWithIsSelected\n ? scrollIntoViewRef\n : undefined,\n [firstSideNavItemIdWithIsSelected],\n );\n\n const sideNavItemContentProviderValue = useMemo(\n () => ({ isCompact, depth: 1 }),\n [isCompact],\n );\n\n const setSelectedItem = useCallback(\n (selectedItemId: string) => {\n const updatedSideNavItems = sideNavItemsList.map((item) => {\n if (item.id === selectedItemId) {\n item.isSelected = true;\n } else if (item.isSelected) {\n delete item.isSelected;\n }\n\n return item.nestedNavItems\n ? {\n ...item,\n nestedNavItems: item.nestedNavItems.map((childItem) => {\n if (childItem.id === selectedItemId) {\n childItem.isSelected = true;\n } else if (childItem.isSelected) {\n delete childItem.isSelected;\n }\n return childItem;\n }),\n }\n : item;\n });\n updateSideNavItemsList(updatedSideNavItems);\n },\n [sideNavItemsList],\n );\n\n const processedSideNavItems = useMemo(() => {\n return sideNavItemsList?.map((item) => ({\n ...item,\n childNavItems: item.nestedNavItems?.map((childProps) => {\n return {\n id: childProps.id,\n isSelected: childProps.isSelected,\n isDisabled: childProps.isDisabled,\n navItem: (\n <SideNavItemContentContext.Provider\n value={{\n ...sideNavItemContentProviderValue,\n depth: 2,\n isSortable: item.isSortable,\n }}\n key={childProps.id}\n >\n <SideNavItemContent\n {...childProps}\n scrollRef={getRefIfThisIsFirstNodeWithIsSelected(childProps.id)}\n onItemSelected={setSelectedItem}\n />\n </SideNavItemContentContext.Provider>\n ),\n };\n }),\n }));\n }, [\n getRefIfThisIsFirstNodeWithIsSelected,\n sideNavItemsList,\n sideNavItemContentProviderValue,\n setSelectedItem,\n ]);\n\n const sideNavExpandClickHandler = useCallback(() => {\n isSideNavCollapsed ? onExpand?.() : onCollapse?.();\n setSideNavCollapsed(!isSideNavCollapsed);\n }, [isSideNavCollapsed, setSideNavCollapsed, onExpand, onCollapse]);\n\n const sideNavExpandKeyHandler = useCallback<\n KeyboardEventHandler<HTMLButtonElement>\n >(\n (event) => {\n if (event?.key === \"Enter\" || event?.code === \"Space\") {\n event.preventDefault();\n sideNavExpandClickHandler();\n }\n },\n [sideNavExpandClickHandler],\n );\n\n const setSortedItems = useCallback(\n (parentId: string, activeIndex: number, overIndex: number) => {\n const sortedSideNavItems = sideNavItemsList.map((item) =>\n item.id === parentId && item.nestedNavItems\n ? {\n ...item,\n nestedNavItems: arrayMove(\n item.nestedNavItems,\n activeIndex,\n overIndex,\n ),\n }\n : item,\n );\n updateSideNavItemsList(sortedSideNavItems);\n onSort?.(sortedSideNavItems);\n },\n [onSort, sideNavItemsList],\n );\n\n return (\n <StyledSideNav\n aria-label={t(\"navigation.label\")}\n id=\"side-nav-expandable\"\n isSideNavCollapsed={isSideNavCollapsed}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {isCollapsible && (\n <SideNavToggleButton\n ariaControls=\"side-nav-expandable\"\n isSideNavCollapsed={isSideNavCollapsed}\n onClick={sideNavExpandClickHandler}\n onKeyDown={sideNavExpandKeyHandler}\n />\n )}\n <OdysseyThemeProvider>\n <StyledCollapsibleContent\n data-se=\"collapsible-region\"\n isSideNavCollapsed={isSideNavCollapsed}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <StyledOpacityTransitionContainer\n isSideNavCollapsed={isSideNavCollapsed}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <SideNavHeaderContainer\n odysseyDesignTokens={odysseyDesignTokens}\n hasContentScrolled={hasContentScrolled}\n >\n <SideNavHeader\n appName={appName}\n isLoading={isLoading}\n logoProps={logoProps}\n />\n </SideNavHeaderContainer>\n <SideNavScrollableContainer\n odysseyDesignTokens={odysseyDesignTokens}\n data-se=\"scrollable-region\"\n >\n <SideNavListContainer role=\"none\" ref={scrollableContentRef}>\n {isLoading\n ? [...Array(6)].map((_, index) => <LoadingItem key={index} />)\n : processedSideNavItems?.map((item) => {\n const {\n id,\n label,\n isSectionHeader,\n startIcon,\n childNavItems,\n isSortable,\n isDefaultExpanded,\n isDisabled,\n isExpanded,\n } = item;\n\n if (isSectionHeader) {\n return (\n <SectionHeaderContainer\n id={id}\n key={id}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <SectionHeader\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {label}\n </SectionHeader>\n </SectionHeaderContainer>\n );\n } else if (childNavItems) {\n return (\n <StyledSideNavListItem\n id={id}\n key={id}\n odysseyDesignTokens={odysseyDesignTokens}\n disabled={isDisabled}\n aria-disabled={isDisabled}\n >\n <NavAccordion\n label={label}\n isCompact={isCompact}\n isDefaultExpanded={isDefaultExpanded}\n isExpanded={isExpanded}\n startIcon={startIcon}\n isDisabled={isDisabled}\n >\n <SideNavListContainer role=\"none\">\n {isSortable ? (\n <SortableList\n parentId={item.id}\n items={childNavItems}\n onChange={setSortedItems}\n renderItem={(sortableItem) => (\n <SortableList.Item\n id={sortableItem.id}\n isDisabled={sortableItem.isDisabled}\n isSelected={sortableItem.isSelected}\n >\n {sortableItem.navItem}\n </SortableList.Item>\n )}\n />\n ) : (\n childNavItems.map((item) => item.navItem)\n )}\n </SideNavListContainer>\n </NavAccordion>\n </StyledSideNavListItem>\n );\n } else {\n return (\n <SideNavItemContentContext.Provider\n key={item.id}\n value={sideNavItemContentProviderValue}\n >\n <SideNavItemContent\n {...item}\n key={item.id}\n scrollRef={getRefIfThisIsFirstNodeWithIsSelected(\n item.id,\n )}\n onItemSelected={setSelectedItem}\n />\n </SideNavItemContentContext.Provider>\n );\n }\n })}\n </SideNavListContainer>\n </SideNavScrollableContainer>\n {!isLoading && (footerItems || hasCustomFooter) && (\n <SideNavFooter\n odysseyDesignTokens={odysseyDesignTokens}\n isContentScrollable={isContentScrollable}\n >\n {hasCustomFooter\n ? footerComponent\n : footerItems && (\n <SideNavFooterItemsContainer\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <SideNavFooterContent footerItems={footerItems} />\n </SideNavFooterItemsContainer>\n )}\n </SideNavFooter>\n )}\n </StyledOpacityTransitionContainer>\n </StyledCollapsibleContent>\n </OdysseyThemeProvider>\n </StyledSideNav>\n );\n};\n\nconst MemoizedSideNav = memo(SideNav);\nMemoizedSideNav.displayName = \"SideNav\";\n\nexport { MemoizedSideNav as SideNav };\n"],"mappings":"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"}