@okta/odyssey-react-mui 1.40.0 → 1.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/dist/cjs/Autocomplete.cjs +10 -10
  2. package/dist/cjs/Autocomplete.cjs.map +1 -1
  3. package/dist/cjs/Breadcrumbs.cjs +1 -0
  4. package/dist/cjs/Breadcrumbs.cjs.map +1 -1
  5. package/dist/cjs/Link.cjs.map +1 -1
  6. package/dist/cjs/OdysseyCacheProvider.cjs.map +1 -1
  7. package/dist/cjs/Select.cjs +1 -1
  8. package/dist/cjs/Select.cjs.map +1 -1
  9. package/dist/cjs/Tag.cjs +9 -2
  10. package/dist/cjs/Tag.cjs.map +1 -1
  11. package/dist/cjs/createContrastColors.cjs +6 -2
  12. package/dist/cjs/createContrastColors.cjs.map +1 -1
  13. package/dist/cjs/getLogicalBoundaries.cjs +33 -0
  14. package/dist/cjs/getLogicalBoundaries.cjs.map +1 -0
  15. package/dist/cjs/labs/PageTemplate/PageTemplate.cjs +15 -4
  16. package/dist/cjs/labs/PageTemplate/PageTemplate.cjs.map +1 -1
  17. package/dist/cjs/properties/ts/odyssey-react-mui.cjs +2 -1
  18. package/dist/cjs/properties/ts/odyssey-react-mui.cjs.map +1 -1
  19. package/dist/cjs/properties/ts/odyssey-react-mui_eu.cjs +137 -0
  20. package/dist/cjs/properties/ts/odyssey-react-mui_eu.cjs.map +1 -0
  21. package/dist/cjs/theme/components.cjs +1 -0
  22. package/dist/cjs/theme/components.cjs.map +1 -1
  23. package/dist/cjs/ui-shell/NarrowUiShellContent.cjs +0 -1
  24. package/dist/cjs/ui-shell/NarrowUiShellContent.cjs.map +1 -1
  25. package/dist/cjs/ui-shell/SideNav/SideNav.cjs +23 -18
  26. package/dist/cjs/ui-shell/SideNav/SideNav.cjs.map +1 -1
  27. package/dist/cjs/ui-shell/SideNav/SideNavItemLinkContent.cjs +4 -3
  28. package/dist/cjs/ui-shell/SideNav/SideNavItemLinkContent.cjs.map +1 -1
  29. package/dist/cjs/ui-shell/SideNav/SideNavToggleButton.cjs +10 -10
  30. package/dist/cjs/ui-shell/SideNav/SideNavToggleButton.cjs.map +1 -1
  31. package/dist/cjs/ui-shell/UiShell.cjs +2 -0
  32. package/dist/cjs/ui-shell/UiShell.cjs.map +1 -1
  33. package/dist/cjs/ui-shell/UiShellProvider.cjs +6 -1
  34. package/dist/cjs/ui-shell/UiShellProvider.cjs.map +1 -1
  35. package/dist/cjs/ui-shell/renderUiShell.cjs +4 -2
  36. package/dist/cjs/ui-shell/renderUiShell.cjs.map +1 -1
  37. package/dist/cjs/ui-shell/useElementAtContainerEdge.cjs +74 -0
  38. package/dist/cjs/ui-shell/useElementAtContainerEdge.cjs.map +1 -0
  39. package/dist/cjs/ui-shell/useScrollState.cjs +4 -2
  40. package/dist/cjs/ui-shell/useScrollState.cjs.map +1 -1
  41. package/dist/cjs/useAutocomplete.cjs +2 -2
  42. package/dist/cjs/useAutocomplete.cjs.map +1 -1
  43. package/dist/cjs/useMountLifecycleEffect.cjs +3 -3
  44. package/dist/cjs/useMountLifecycleEffect.cjs.map +1 -1
  45. package/dist/cjs/web-component/odysseyWebComponentVersion.generated.cjs +1 -1
  46. package/dist/cjs/web-component/odysseyWebComponentVersion.generated.cjs.map +1 -1
  47. package/dist/esm/Autocomplete.js +10 -10
  48. package/dist/esm/Autocomplete.js.map +1 -1
  49. package/dist/esm/Breadcrumbs.js +1 -0
  50. package/dist/esm/Breadcrumbs.js.map +1 -1
  51. package/dist/esm/Link.js.map +1 -1
  52. package/dist/esm/OdysseyCacheProvider.js.map +1 -1
  53. package/dist/esm/Select.js +1 -1
  54. package/dist/esm/Select.js.map +1 -1
  55. package/dist/esm/Tag.js +9 -2
  56. package/dist/esm/Tag.js.map +1 -1
  57. package/dist/esm/createContrastColors.js +6 -2
  58. package/dist/esm/createContrastColors.js.map +1 -1
  59. package/dist/esm/getLogicalBoundaries.js +26 -0
  60. package/dist/esm/getLogicalBoundaries.js.map +1 -0
  61. package/dist/esm/labs/PageTemplate/PageTemplate.js +16 -5
  62. package/dist/esm/labs/PageTemplate/PageTemplate.js.map +1 -1
  63. package/dist/esm/properties/ts/odyssey-react-mui.js +2 -1
  64. package/dist/esm/properties/ts/odyssey-react-mui.js.map +1 -1
  65. package/dist/esm/properties/ts/odyssey-react-mui_eu.js +131 -0
  66. package/dist/esm/properties/ts/odyssey-react-mui_eu.js.map +1 -0
  67. package/dist/esm/theme/components.js +1 -0
  68. package/dist/esm/theme/components.js.map +1 -1
  69. package/dist/esm/ui-shell/NarrowUiShellContent.js +0 -1
  70. package/dist/esm/ui-shell/NarrowUiShellContent.js.map +1 -1
  71. package/dist/esm/ui-shell/SideNav/SideNav.js +23 -18
  72. package/dist/esm/ui-shell/SideNav/SideNav.js.map +1 -1
  73. package/dist/esm/ui-shell/SideNav/SideNavItemLinkContent.js +4 -3
  74. package/dist/esm/ui-shell/SideNav/SideNavItemLinkContent.js.map +1 -1
  75. package/dist/esm/ui-shell/SideNav/SideNavToggleButton.js +10 -10
  76. package/dist/esm/ui-shell/SideNav/SideNavToggleButton.js.map +1 -1
  77. package/dist/esm/ui-shell/UiShell.js +2 -0
  78. package/dist/esm/ui-shell/UiShell.js.map +1 -1
  79. package/dist/esm/ui-shell/UiShellProvider.js +6 -1
  80. package/dist/esm/ui-shell/UiShellProvider.js.map +1 -1
  81. package/dist/esm/ui-shell/renderUiShell.js +4 -2
  82. package/dist/esm/ui-shell/renderUiShell.js.map +1 -1
  83. package/dist/esm/ui-shell/useElementAtContainerEdge.js +68 -0
  84. package/dist/esm/ui-shell/useElementAtContainerEdge.js.map +1 -0
  85. package/dist/esm/ui-shell/useScrollState.js +4 -2
  86. package/dist/esm/ui-shell/useScrollState.js.map +1 -1
  87. package/dist/esm/useAutocomplete.js +2 -2
  88. package/dist/esm/useAutocomplete.js.map +1 -1
  89. package/dist/esm/useMountLifecycleEffect.js +3 -3
  90. package/dist/esm/useMountLifecycleEffect.js.map +1 -1
  91. package/dist/esm/web-component/odysseyWebComponentVersion.generated.js +1 -1
  92. package/dist/esm/web-component/odysseyWebComponentVersion.generated.js.map +1 -1
  93. package/dist/index.cjs +1 -1
  94. package/dist/index.d.ts +1 -1
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +25 -0
  97. package/dist/index.mjs +1 -1
  98. package/dist/index.scss +1 -1
  99. package/dist/tsconfig.production.tsbuildinfo +1 -1
  100. package/dist/tsconfig.tsbuildinfo +1 -0
  101. package/dist/types/Autocomplete.d.ts +1 -1
  102. package/dist/types/Autocomplete.d.ts.map +1 -1
  103. package/dist/types/Breadcrumbs.d.ts.map +1 -1
  104. package/dist/types/CssBaseline.d.ts.map +1 -1
  105. package/dist/types/DataTable/reorderDataRowsLocally.d.ts.map +1 -1
  106. package/dist/types/DataTable/useRowReordering.d.ts.map +1 -1
  107. package/dist/types/DataTable/useScrollIndication.d.ts.map +1 -1
  108. package/dist/types/DatePickers/useOdysseyDateFields.d.ts.map +1 -1
  109. package/dist/types/Link.d.ts +3 -3
  110. package/dist/types/Link.d.ts.map +1 -1
  111. package/dist/types/NativeSelect.d.ts.map +1 -1
  112. package/dist/types/OdysseyCacheProvider.d.ts.map +1 -1
  113. package/dist/types/OdysseyTranslationProvider.d.ts +1 -1
  114. package/dist/types/OdysseyTranslationProvider.d.ts.map +1 -1
  115. package/dist/types/Pagination/usePagination.d.ts.map +1 -1
  116. package/dist/types/Select.d.ts.map +1 -1
  117. package/dist/types/Tag.d.ts.map +1 -1
  118. package/dist/types/addSpecificity.d.ts.map +1 -1
  119. package/dist/types/createContrastColors.d.ts +5 -1
  120. package/dist/types/createContrastColors.d.ts.map +1 -1
  121. package/dist/types/getLogicalBoundaries.d.ts +24 -0
  122. package/dist/types/getLogicalBoundaries.d.ts.map +1 -0
  123. package/dist/types/hexToRgb.d.ts.map +1 -1
  124. package/dist/types/i18n.d.ts +1 -0
  125. package/dist/types/i18n.d.ts.map +1 -1
  126. package/dist/types/inputUtils.d.ts.map +1 -1
  127. package/dist/types/labs/DataView/fetchData.d.ts.map +1 -1
  128. package/dist/types/labs/DataView/tableConstants.d.ts.map +1 -1
  129. package/dist/types/labs/DataView/testSupportData.d.ts.map +1 -1
  130. package/dist/types/labs/DataView/useFilterConversion.d.ts.map +1 -1
  131. package/dist/types/labs/GroupPicker.d.ts.map +1 -1
  132. package/dist/types/labs/OdysseyPickers/ComposablePicker.d.ts.map +1 -1
  133. package/dist/types/labs/OdysseyPickers/Picker.d.ts.map +1 -1
  134. package/dist/types/labs/OdysseyPickers/PickerVirtualizationListBox.d.ts.map +1 -1
  135. package/dist/types/labs/PageTemplate/PageTemplate.d.ts.map +1 -1
  136. package/dist/types/labs/PaginatedTable.d.ts.map +1 -1
  137. package/dist/types/labs/StaticTable.d.ts.map +1 -1
  138. package/dist/types/properties/ts/odyssey-react-mui.d.ts +1 -0
  139. package/dist/types/properties/ts/odyssey-react-mui.d.ts.map +1 -1
  140. package/dist/types/properties/ts/odyssey-react-mui_eu.d.ts +131 -0
  141. package/dist/types/properties/ts/odyssey-react-mui_eu.d.ts.map +1 -0
  142. package/dist/types/remUtils.d.ts.map +1 -1
  143. package/dist/types/shadow-dom/shadow-dom.d.ts.map +1 -1
  144. package/dist/types/test-selectors/getByQuerySelector.d.ts.map +1 -1
  145. package/dist/types/test-selectors/getComputedAccessibleErrorMessageText.d.ts.map +1 -1
  146. package/dist/types/test-selectors/getComputedAccessibleText.d.ts.map +1 -1
  147. package/dist/types/test-selectors/interpolateString.d.ts.map +1 -1
  148. package/dist/types/test-selectors/linkedHtmlSelectors.d.ts.map +1 -1
  149. package/dist/types/test-selectors/queryOdysseySelector.d.ts +40 -36
  150. package/dist/types/test-selectors/queryOdysseySelector.d.ts.map +1 -1
  151. package/dist/types/test-selectors/querySelector.d.ts +6 -2
  152. package/dist/types/test-selectors/querySelector.d.ts.map +1 -1
  153. package/dist/types/test-selectors/sanityChecks.d.ts.map +1 -1
  154. package/dist/types/theme/components.d.ts.map +1 -1
  155. package/dist/types/theme/createOdysseyMuiTheme.d.ts.map +1 -1
  156. package/dist/types/theme/mixins.d.ts.map +1 -1
  157. package/dist/types/theme/palette.d.ts.map +1 -1
  158. package/dist/types/theme/pxToRem.d.ts.map +1 -1
  159. package/dist/types/theme/shape.d.ts.map +1 -1
  160. package/dist/types/theme/spacing.d.ts.map +1 -1
  161. package/dist/types/theme/typography.d.ts.map +1 -1
  162. package/dist/types/theme/useMediaQuery.d.ts.map +1 -1
  163. package/dist/types/ui-shell/AppSwitcher/AppSwitcherApp.d.ts.map +1 -1
  164. package/dist/types/ui-shell/InnerAppContainer.d.ts.map +1 -1
  165. package/dist/types/ui-shell/NarrowUiShellContent.d.ts.map +1 -1
  166. package/dist/types/ui-shell/SideNav/SideNav.d.ts.map +1 -1
  167. package/dist/types/ui-shell/SideNav/SideNavItemContent.d.ts.map +1 -1
  168. package/dist/types/ui-shell/SideNav/SideNavItemLinkContent.d.ts.map +1 -1
  169. package/dist/types/ui-shell/SideNav/SideNavToggleButton.d.ts.map +1 -1
  170. package/dist/types/ui-shell/SideNav/SortableList/SortableItem.d.ts.map +1 -1
  171. package/dist/types/ui-shell/SideNav/useIsSideNavCollapsedSessionStorage.d.ts.map +1 -1
  172. package/dist/types/ui-shell/UiShell.d.ts +1 -1
  173. package/dist/types/ui-shell/UiShell.d.ts.map +1 -1
  174. package/dist/types/ui-shell/UiShellProvider.d.ts +10 -4
  175. package/dist/types/ui-shell/UiShellProvider.d.ts.map +1 -1
  176. package/dist/types/ui-shell/bufferLatest.d.ts.map +1 -1
  177. package/dist/types/ui-shell/createMessageBus.d.ts.map +1 -1
  178. package/dist/types/ui-shell/createStore.d.ts.map +1 -1
  179. package/dist/types/ui-shell/renderUiShell.d.ts +2 -2
  180. package/dist/types/ui-shell/renderUiShell.d.ts.map +1 -1
  181. package/dist/types/ui-shell/useElementAtContainerEdge.d.ts +43 -0
  182. package/dist/types/ui-shell/useElementAtContainerEdge.d.ts.map +1 -0
  183. package/dist/types/ui-shell/useMatchAppElementToUiShellAppArea.d.ts.map +1 -1
  184. package/dist/types/ui-shell/useScrollState.d.ts +6 -2
  185. package/dist/types/ui-shell/useScrollState.d.ts.map +1 -1
  186. package/dist/types/ui-shell/useUiShellBreakpoints.d.ts.map +1 -1
  187. package/dist/types/useAutocomplete.d.ts.map +1 -1
  188. package/dist/types/useContrastMode.d.ts.map +1 -1
  189. package/dist/types/useMountLifecycleEffect.d.ts.map +1 -1
  190. package/dist/types/useNormalizedKey.d.ts.map +1 -1
  191. package/dist/types/useSessionStorageState.d.ts.map +1 -1
  192. package/dist/types/useUniqueAlphabeticalId.d.ts.map +1 -1
  193. package/dist/types/useUniqueId.d.ts.map +1 -1
  194. package/dist/types/web-component/odysseyWebComponentVersion.generated.d.ts +1 -1
  195. package/dist/types/web-component/odysseyWebComponentVersion.generated.d.ts.map +1 -1
  196. package/dist/types/web-component/renderReactInWebComponent.d.ts.map +1 -1
  197. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"Breadcrumbs.js","names":["createContext","memo","useCallback","useContext","useMemo","useState","GroupIcon","HomeIcon","UserIcon","Subordinate","useTranslation","styled","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","BreadcrumbContext","breadcrumbType","BreadcrumbContent","span","Breadcrumb","children","href","iconName","onClick","onClickHandler","event","preventDefault","stopPropagation","breadcrumbContent","color","_MenuItem","ariaCurrent","_ButtonBase","breadcrumbProviderValue","currentPage","listItem","menuItem","defaultTruncationValue","BreadcrumbList","homeHref","maxVisibleItems","maxVisibleItemsProp","testId","translate","t","anchorEl","setAnchorEl","Math","min","max","length","breadcrumbSections","beforeMenu","insideMenu","remainingBreadcrumbs","menuStart","floor","menuLength","slice","onMenuButtonClick","currentTarget","onCloseMenu","_Breadcrumbs","maxItems","map","breadcrumb","index","Provider","value","_Menu","open","Boolean","onClose","anchorOrigin","horizontal","vertical","MenuListProps","sx","minWidth","MemoizedBreadcrumbList","displayName"],"sources":["../../src/Breadcrumbs.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 ButtonBase,\n Menu,\n MenuItem,\n Breadcrumbs as MuiBreadcrumbs,\n} from \"@mui/material\";\nimport {\n MouseEventHandler,\n ReactElement,\n createContext,\n memo,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from \"react\";\nimport { GroupIcon, HomeIcon, UserIcon } from \"./icons.generated/index.js\";\nimport { Subordinate } from \"./Typography.js\";\nimport { useTranslation } from \"react-i18next\";\nimport { HtmlProps } from \"./HtmlProps.js\";\nimport styled from \"@emotion/styled\";\n\nexport type BreadcrumbType = \"listItem\" | \"menuItem\" | \"currentPage\";\n\nexport type BreadcrumbProps = {\n children?: string;\n href?: string;\n iconName?: \"user\" | \"group\";\n onClick?: MouseEventHandler;\n};\n\nexport type BreadcrumbsProps = {\n children: ReactElement<typeof Breadcrumb>[];\n homeHref?: string;\n maxVisibleItems?: number;\n} & Pick<HtmlProps, \"testId\" | \"translate\">;\n\nexport type BreadcrumbContextType = {\n breadcrumbType: BreadcrumbType;\n};\n\nexport const BreadcrumbContext = createContext<BreadcrumbContextType>({\n breadcrumbType: \"listItem\",\n});\n\nconst BreadcrumbContent = styled.span`\n white-space: nowrap;\n overflow: hidden;\n max-width: 10rem;\n text-overflow: ellipsis;\n`;\n\nexport const Breadcrumb = ({\n children,\n href,\n iconName,\n onClick,\n}: BreadcrumbProps) => {\n const { breadcrumbType } = useContext(BreadcrumbContext);\n\n const onClickHandler = useCallback<MouseEventHandler<HTMLAnchorElement>>(\n (event) => {\n if (onClick) {\n event.preventDefault();\n event.stopPropagation();\n onClick(event);\n }\n },\n [onClick],\n );\n\n const breadcrumbContent = (\n <>\n {iconName === \"group\" ? (\n <GroupIcon />\n ) : iconName === \"user\" ? (\n <UserIcon />\n ) : null}\n <BreadcrumbContent>{children}</BreadcrumbContent>\n </>\n );\n\n if (!href) {\n return <Subordinate color=\"textPrimary\">{breadcrumbContent}</Subordinate>;\n }\n\n if (breadcrumbType === \"menuItem\") {\n return (\n <MenuItem onClick={onClickHandler} href={href}>\n {breadcrumbContent}\n </MenuItem>\n );\n }\n\n if (breadcrumbType === \"currentPage\") {\n return (\n <Subordinate ariaCurrent=\"page\" color=\"textPrimary\">\n {breadcrumbContent}\n </Subordinate>\n );\n }\n\n // breadcrumbType === \"listItem\" is the default\n // Provided here without a conditional to get TS to be quiet\n // about potential undefined returns\n return (\n <ButtonBase onClick={onClickHandler} href={href}>\n {breadcrumbContent}\n </ButtonBase>\n );\n};\n\nconst breadcrumbProviderValue: Record<\n BreadcrumbType,\n { breadcrumbType: BreadcrumbType }\n> = {\n currentPage: {\n breadcrumbType: \"currentPage\",\n },\n listItem: {\n breadcrumbType: \"listItem\",\n },\n menuItem: {\n breadcrumbType: \"menuItem\",\n },\n};\n\nconst defaultTruncationValue = 5;\n\nconst BreadcrumbList = ({\n children,\n homeHref,\n maxVisibleItems: maxVisibleItemsProp = defaultTruncationValue,\n testId,\n translate,\n}: BreadcrumbsProps) => {\n const { t } = useTranslation();\n\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n\n const maxVisibleItems = useMemo(\n () => Math.min(Math.max(maxVisibleItemsProp, 0), children.length),\n [maxVisibleItemsProp, children],\n );\n\n const breadcrumbSections = useMemo(() => {\n if (children.length <= maxVisibleItems) {\n return {\n beforeMenu: [],\n insideMenu: [],\n remainingBreadcrumbs: children,\n };\n } else {\n const menuStart = Math.floor(maxVisibleItems / 2);\n const menuLength = children.length - maxVisibleItems;\n\n return {\n beforeMenu: children.slice(0, menuStart),\n insideMenu: children.slice(menuStart, menuStart + menuLength),\n remainingBreadcrumbs: children.slice(menuStart + menuLength),\n };\n }\n }, [children, maxVisibleItems]);\n\n const onMenuButtonClick = useCallback<MouseEventHandler<HTMLButtonElement>>(\n (event) => setAnchorEl(event.currentTarget),\n [],\n );\n const onCloseMenu = useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n return (\n <MuiBreadcrumbs\n maxItems={children.length + 1}\n aria-label={t(\"breadcrumbs.label.text\")}\n data-se={testId}\n translate={translate}\n >\n {homeHref && (\n <ButtonBase href={homeHref} aria-label={t(\"breadcrumbs.home.text\")}>\n <HomeIcon />\n </ButtonBase>\n )}\n\n {breadcrumbSections.beforeMenu.map((breadcrumb, index) => (\n <BreadcrumbContext.Provider\n key={index}\n value={breadcrumbProviderValue.listItem}\n >\n {breadcrumb}\n </BreadcrumbContext.Provider>\n ))}\n\n {breadcrumbSections.insideMenu.length > 0 && (\n <>\n <ButtonBase onClick={onMenuButtonClick}>...</ButtonBase>\n <Menu\n open={Boolean(anchorEl)}\n onClose={onCloseMenu}\n anchorEl={anchorEl}\n anchorOrigin={{ horizontal: \"left\", vertical: \"bottom\" }}\n MenuListProps={{\n sx: {\n minWidth: 180,\n },\n }}\n >\n <BreadcrumbContext.Provider\n value={breadcrumbProviderValue.menuItem}\n >\n {breadcrumbSections.insideMenu}\n </BreadcrumbContext.Provider>\n </Menu>\n </>\n )}\n\n {breadcrumbSections.remainingBreadcrumbs.map((breadcrumb, index) => {\n if (index === breadcrumbSections.remainingBreadcrumbs.length - 1) {\n return (\n <BreadcrumbContext.Provider\n key={index}\n value={breadcrumbProviderValue.currentPage}\n >\n {breadcrumb}\n </BreadcrumbContext.Provider>\n );\n }\n return (\n <BreadcrumbContext.Provider\n key={index}\n value={breadcrumbProviderValue.listItem}\n >\n {breadcrumb}\n </BreadcrumbContext.Provider>\n );\n })}\n </MuiBreadcrumbs>\n );\n};\n\nconst MemoizedBreadcrumbList = memo(BreadcrumbList);\nMemoizedBreadcrumbList.displayName = \"BreadcrumbList\";\n\nexport { MemoizedBreadcrumbList as BreadcrumbList };\n"],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA,SAGEA,aAAa,EACbC,IAAI,EACJC,WAAW,EACXC,UAAU,EACVC,OAAO,EACPC,QAAQ,QACH,OAAO;AACd,SAASC,SAAS,EAAEC,QAAQ,EAAEC,QAAQ,QAAQ,4BAA4B;AAC1E,SAASC,WAAW,QAAQ,iBAAiB;AAC7C,SAASC,cAAc,QAAQ,eAAe;AAE9C,OAAOC,MAAM,MAAM,iBAAiB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAqBrC,OAAO,MAAMC,iBAAiB,GAAGlB,aAAa,CAAwB;EACpEmB,cAAc,EAAE;AAClB,CAAC,CAAC;AAEF,MAAMC,iBAAiB,GAAGT,MAAM,CAACU,IAAI;AACrC;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMC,UAAU,GAAGA,CAAC;EACzBC,QAAQ;EACRC,IAAI;EACJC,QAAQ;EACRC;AACe,CAAC,KAAK;EACrB,MAAM;IAAEP;EAAe,CAAC,GAAGhB,UAAU,CAACe,iBAAiB,CAAC;EAExD,MAAMS,cAAc,GAAGzB,WAAW,CAC/B0B,KAAK,IAAK;IACT,IAAIF,OAAO,EAAE;MACXE,KAAK,CAACC,cAAc,CAAC,CAAC;MACtBD,KAAK,CAACE,eAAe,CAAC,CAAC;MACvBJ,OAAO,CAACE,KAAK,CAAC;IAChB;EACF,CAAC,EACD,CAACF,OAAO,CACV,CAAC;EAED,MAAMK,iBAAiB,GACrBd,KAAA,CAAAF,SAAA;IAAAQ,QAAA,GACGE,QAAQ,KAAK,OAAO,GACnBZ,IAAA,CAACP,SAAS,IAAE,CAAC,GACXmB,QAAQ,KAAK,MAAM,GACrBZ,IAAA,CAACL,QAAQ,IAAE,CAAC,GACV,IAAI,EACRK,IAAA,CAACO,iBAAiB;MAAAG,QAAA,EAAEA;IAAQ,CAAoB,CAAC;EAAA,CACjD,CACH;EAED,IAAI,CAACC,IAAI,EAAE;IACT,OAAOX,IAAA,CAACJ,WAAW;MAACuB,KAAK,EAAC,aAAa;MAAAT,QAAA,EAAEQ;IAAiB,CAAc,CAAC;EAC3E;EAEA,IAAIZ,cAAc,KAAK,UAAU,EAAE;IACjC,OACEN,IAAA,CAAAoB,SAAA;MAAUP,OAAO,EAAEC,cAAe;MAACH,IAAI,EAAEA,IAAK;MAAAD,QAAA,EAC3CQ;IAAiB,CACV,CAAC;EAEf;EAEA,IAAIZ,cAAc,KAAK,aAAa,EAAE;IACpC,OACEN,IAAA,CAACJ,WAAW;MAACyB,WAAW,EAAC,MAAM;MAACF,KAAK,EAAC,aAAa;MAAAT,QAAA,EAChDQ;IAAiB,CACP,CAAC;EAElB;EAKA,OACElB,IAAA,CAAAsB,WAAA;IAAYT,OAAO,EAAEC,cAAe;IAACH,IAAI,EAAEA,IAAK;IAAAD,QAAA,EAC7CQ;EAAiB,CACR,CAAC;AAEjB,CAAC;AAED,MAAMK,uBAGL,GAAG;EACFC,WAAW,EAAE;IACXlB,cAAc,EAAE;EAClB,CAAC;EACDmB,QAAQ,EAAE;IACRnB,cAAc,EAAE;EAClB,CAAC;EACDoB,QAAQ,EAAE;IACRpB,cAAc,EAAE;EAClB;AACF,CAAC;AAED,MAAMqB,sBAAsB,GAAG,CAAC;AAEhC,MAAMC,cAAc,GAAGA,CAAC;EACtBlB,QAAQ;EACRmB,QAAQ;EACRC,eAAe,EAAEC,mBAAmB,GAAGJ,sBAAsB;EAC7DK,MAAM;EACNC;AACgB,CAAC,KAAK;EACtB,MAAM;IAAEC;EAAE,CAAC,GAAGrC,cAAc,CAAC,CAAC;EAE9B,MAAM,CAACsC,QAAQ,EAAEC,WAAW,CAAC,GAAG5C,QAAQ,CAAqB,IAAI,CAAC;EAElE,MAAMsC,eAAe,GAAGvC,OAAO,CAC7B,MAAM8C,IAAI,CAACC,GAAG,CAACD,IAAI,CAACE,GAAG,CAACR,mBAAmB,EAAE,CAAC,CAAC,EAAErB,QAAQ,CAAC8B,MAAM,CAAC,EACjE,CAACT,mBAAmB,EAAErB,QAAQ,CAChC,CAAC;EAED,MAAM+B,kBAAkB,GAAGlD,OAAO,CAAC,MAAM;IACvC,IAAImB,QAAQ,CAAC8B,MAAM,IAAIV,eAAe,EAAE;MACtC,OAAO;QACLY,UAAU,EAAE,EAAE;QACdC,UAAU,EAAE,EAAE;QACdC,oBAAoB,EAAElC;MACxB,CAAC;IACH,CAAC,MAAM;MACL,MAAMmC,SAAS,GAAGR,IAAI,CAACS,KAAK,CAAChB,eAAe,GAAG,CAAC,CAAC;MACjD,MAAMiB,UAAU,GAAGrC,QAAQ,CAAC8B,MAAM,GAAGV,eAAe;MAEpD,OAAO;QACLY,UAAU,EAAEhC,QAAQ,CAACsC,KAAK,CAAC,CAAC,EAAEH,SAAS,CAAC;QACxCF,UAAU,EAAEjC,QAAQ,CAACsC,KAAK,CAACH,SAAS,EAAEA,SAAS,GAAGE,UAAU,CAAC;QAC7DH,oBAAoB,EAAElC,QAAQ,CAACsC,KAAK,CAACH,SAAS,GAAGE,UAAU;MAC7D,CAAC;IACH;EACF,CAAC,EAAE,CAACrC,QAAQ,EAAEoB,eAAe,CAAC,CAAC;EAE/B,MAAMmB,iBAAiB,GAAG5D,WAAW,CAClC0B,KAAK,IAAKqB,WAAW,CAACrB,KAAK,CAACmC,aAAa,CAAC,EAC3C,EACF,CAAC;EACD,MAAMC,WAAW,GAAG9D,WAAW,CAAC,MAAM;IACpC+C,WAAW,CAAC,IAAI,CAAC;EACnB,CAAC,EAAE,EAAE,CAAC;EAEN,OACEhC,KAAA,CAAAgD,YAAA;IACEC,QAAQ,EAAE3C,QAAQ,CAAC8B,MAAM,GAAG,CAAE;IAC9B,cAAYN,CAAC,CAAC,wBAAwB,CAAE;IACxC,WAASF,MAAO;IAChBC,SAAS,EAAEA,SAAU;IAAAvB,QAAA,GAEpBmB,QAAQ,IACP7B,IAAA,CAAAsB,WAAA;MAAYX,IAAI,EAAEkB,QAAS;MAAC,cAAYK,CAAC,CAAC,uBAAuB,CAAE;MAAAxB,QAAA,EACjEV,IAAA,CAACN,QAAQ,IAAE;IAAC,CACF,CACb,EAEA+C,kBAAkB,CAACC,UAAU,CAACY,GAAG,CAAC,CAACC,UAAU,EAAEC,KAAK,KACnDxD,IAAA,CAACK,iBAAiB,CAACoD,QAAQ;MAEzBC,KAAK,EAAEnC,uBAAuB,CAACE,QAAS;MAAAf,QAAA,EAEvC6C;IAAU,GAHNC,KAIqB,CAC7B,CAAC,EAEDf,kBAAkB,CAACE,UAAU,CAACH,MAAM,GAAG,CAAC,IACvCpC,KAAA,CAAAF,SAAA;MAAAQ,QAAA,GACEV,IAAA,CAAAsB,WAAA;QAAYT,OAAO,EAAEoC,iBAAkB;QAAAvC,QAAA,EAAC;MAAG,CAAY,CAAC,EACxDV,IAAA,CAAA2D,KAAA;QACEC,IAAI,EAAEC,OAAO,CAAC1B,QAAQ,CAAE;QACxB2B,OAAO,EAAEX,WAAY;QACrBhB,QAAQ,EAAEA,QAAS;QACnB4B,YAAY,EAAE;UAAEC,UAAU,EAAE,MAAM;UAAEC,QAAQ,EAAE;QAAS,CAAE;QACzDC,aAAa,EAAE;UACbC,EAAE,EAAE;YACFC,QAAQ,EAAE;UACZ;QACF,CAAE;QAAA1D,QAAA,EAEFV,IAAA,CAACK,iBAAiB,CAACoD,QAAQ;UACzBC,KAAK,EAAEnC,uBAAuB,CAACG,QAAS;UAAAhB,QAAA,EAEvC+B,kBAAkB,CAACE;QAAU,CACJ;MAAC,CACzB,CAAC;IAAA,CACP,CACH,EAEAF,kBAAkB,CAACG,oBAAoB,CAACU,GAAG,CAAC,CAACC,UAAU,EAAEC,KAAK,KAAK;MAClE,IAAIA,KAAK,KAAKf,kBAAkB,CAACG,oBAAoB,CAACJ,MAAM,GAAG,CAAC,EAAE;QAChE,OACExC,IAAA,CAACK,iBAAiB,CAACoD,QAAQ;UAEzBC,KAAK,EAAEnC,uBAAuB,CAACC,WAAY;UAAAd,QAAA,EAE1C6C;QAAU,GAHNC,KAIqB,CAAC;MAEjC;MACA,OACExD,IAAA,CAACK,iBAAiB,CAACoD,QAAQ;QAEzBC,KAAK,EAAEnC,uBAAuB,CAACE,QAAS;QAAAf,QAAA,EAEvC6C;MAAU,GAHNC,KAIqB,CAAC;IAEjC,CAAC,CAAC;EAAA,CACY,CAAC;AAErB,CAAC;AAED,MAAMa,sBAAsB,GAAGjF,IAAI,CAACwC,cAAc,CAAC;AACnDyC,sBAAsB,CAACC,WAAW,GAAG,gBAAgB;AAErD,SAASD,sBAAsB,IAAIzC,cAAc","ignoreList":[]}
1
+ {"version":3,"file":"Breadcrumbs.js","names":["createContext","memo","useCallback","useContext","useMemo","useState","GroupIcon","HomeIcon","UserIcon","Subordinate","useTranslation","styled","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","BreadcrumbContext","breadcrumbType","BreadcrumbContent","span","Breadcrumb","children","href","iconName","onClick","onClickHandler","event","preventDefault","stopPropagation","breadcrumbContent","color","_MenuItem","component","ariaCurrent","_ButtonBase","breadcrumbProviderValue","currentPage","listItem","menuItem","defaultTruncationValue","BreadcrumbList","homeHref","maxVisibleItems","maxVisibleItemsProp","testId","translate","t","anchorEl","setAnchorEl","Math","min","max","length","breadcrumbSections","beforeMenu","insideMenu","remainingBreadcrumbs","menuStart","floor","menuLength","slice","onMenuButtonClick","currentTarget","onCloseMenu","_Breadcrumbs","maxItems","map","breadcrumb","index","Provider","value","_Menu","open","Boolean","onClose","anchorOrigin","horizontal","vertical","MenuListProps","sx","minWidth","MemoizedBreadcrumbList","displayName"],"sources":["../../src/Breadcrumbs.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 ButtonBase,\n Menu,\n MenuItem,\n Breadcrumbs as MuiBreadcrumbs,\n} from \"@mui/material\";\nimport {\n MouseEventHandler,\n ReactElement,\n createContext,\n memo,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from \"react\";\nimport { GroupIcon, HomeIcon, UserIcon } from \"./icons.generated/index.js\";\nimport { Subordinate } from \"./Typography.js\";\nimport { useTranslation } from \"react-i18next\";\nimport { HtmlProps } from \"./HtmlProps.js\";\nimport styled from \"@emotion/styled\";\n\nexport type BreadcrumbType = \"listItem\" | \"menuItem\" | \"currentPage\";\n\nexport type BreadcrumbProps = {\n children?: string;\n href?: string;\n iconName?: \"user\" | \"group\";\n onClick?: MouseEventHandler;\n};\n\nexport type BreadcrumbsProps = {\n children: ReactElement<typeof Breadcrumb>[];\n homeHref?: string;\n maxVisibleItems?: number;\n} & Pick<HtmlProps, \"testId\" | \"translate\">;\n\nexport type BreadcrumbContextType = {\n breadcrumbType: BreadcrumbType;\n};\n\nexport const BreadcrumbContext = createContext<BreadcrumbContextType>({\n breadcrumbType: \"listItem\",\n});\n\nconst BreadcrumbContent = styled.span`\n white-space: nowrap;\n overflow: hidden;\n max-width: 10rem;\n text-overflow: ellipsis;\n`;\n\nexport const Breadcrumb = ({\n children,\n href,\n iconName,\n onClick,\n}: BreadcrumbProps) => {\n const { breadcrumbType } = useContext(BreadcrumbContext);\n\n const onClickHandler = useCallback<MouseEventHandler<HTMLAnchorElement>>(\n (event) => {\n if (onClick) {\n event.preventDefault();\n event.stopPropagation();\n onClick(event);\n }\n },\n [onClick],\n );\n\n const breadcrumbContent = (\n <>\n {iconName === \"group\" ? (\n <GroupIcon />\n ) : iconName === \"user\" ? (\n <UserIcon />\n ) : null}\n <BreadcrumbContent>{children}</BreadcrumbContent>\n </>\n );\n\n if (!href) {\n return <Subordinate color=\"textPrimary\">{breadcrumbContent}</Subordinate>;\n }\n\n if (breadcrumbType === \"menuItem\") {\n return (\n <MenuItem onClick={onClickHandler} href={href} component=\"a\">\n {breadcrumbContent}\n </MenuItem>\n );\n }\n\n if (breadcrumbType === \"currentPage\") {\n return (\n <Subordinate ariaCurrent=\"page\" color=\"textPrimary\">\n {breadcrumbContent}\n </Subordinate>\n );\n }\n\n // breadcrumbType === \"listItem\" is the default\n // Provided here without a conditional to get TS to be quiet\n // about potential undefined returns\n return (\n <ButtonBase onClick={onClickHandler} href={href}>\n {breadcrumbContent}\n </ButtonBase>\n );\n};\n\nconst breadcrumbProviderValue: Record<\n BreadcrumbType,\n { breadcrumbType: BreadcrumbType }\n> = {\n currentPage: {\n breadcrumbType: \"currentPage\",\n },\n listItem: {\n breadcrumbType: \"listItem\",\n },\n menuItem: {\n breadcrumbType: \"menuItem\",\n },\n};\n\nconst defaultTruncationValue = 5;\n\nconst BreadcrumbList = ({\n children,\n homeHref,\n maxVisibleItems: maxVisibleItemsProp = defaultTruncationValue,\n testId,\n translate,\n}: BreadcrumbsProps) => {\n const { t } = useTranslation();\n\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n\n const maxVisibleItems = useMemo(\n () => Math.min(Math.max(maxVisibleItemsProp, 0), children.length),\n [maxVisibleItemsProp, children],\n );\n\n const breadcrumbSections = useMemo(() => {\n if (children.length <= maxVisibleItems) {\n return {\n beforeMenu: [],\n insideMenu: [],\n remainingBreadcrumbs: children,\n };\n } else {\n const menuStart = Math.floor(maxVisibleItems / 2);\n const menuLength = children.length - maxVisibleItems;\n\n return {\n beforeMenu: children.slice(0, menuStart),\n insideMenu: children.slice(menuStart, menuStart + menuLength),\n remainingBreadcrumbs: children.slice(menuStart + menuLength),\n };\n }\n }, [children, maxVisibleItems]);\n\n const onMenuButtonClick = useCallback<MouseEventHandler<HTMLButtonElement>>(\n (event) => setAnchorEl(event.currentTarget),\n [],\n );\n const onCloseMenu = useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n return (\n <MuiBreadcrumbs\n maxItems={children.length + 1}\n aria-label={t(\"breadcrumbs.label.text\")}\n data-se={testId}\n translate={translate}\n >\n {homeHref && (\n <ButtonBase href={homeHref} aria-label={t(\"breadcrumbs.home.text\")}>\n <HomeIcon />\n </ButtonBase>\n )}\n\n {breadcrumbSections.beforeMenu.map((breadcrumb, index) => (\n <BreadcrumbContext.Provider\n key={index}\n value={breadcrumbProviderValue.listItem}\n >\n {breadcrumb}\n </BreadcrumbContext.Provider>\n ))}\n\n {breadcrumbSections.insideMenu.length > 0 && (\n <>\n <ButtonBase onClick={onMenuButtonClick}>...</ButtonBase>\n <Menu\n open={Boolean(anchorEl)}\n onClose={onCloseMenu}\n anchorEl={anchorEl}\n anchorOrigin={{ horizontal: \"left\", vertical: \"bottom\" }}\n MenuListProps={{\n sx: {\n minWidth: 180,\n },\n }}\n >\n <BreadcrumbContext.Provider\n value={breadcrumbProviderValue.menuItem}\n >\n {breadcrumbSections.insideMenu}\n </BreadcrumbContext.Provider>\n </Menu>\n </>\n )}\n\n {breadcrumbSections.remainingBreadcrumbs.map((breadcrumb, index) => {\n if (index === breadcrumbSections.remainingBreadcrumbs.length - 1) {\n return (\n <BreadcrumbContext.Provider\n key={index}\n value={breadcrumbProviderValue.currentPage}\n >\n {breadcrumb}\n </BreadcrumbContext.Provider>\n );\n }\n return (\n <BreadcrumbContext.Provider\n key={index}\n value={breadcrumbProviderValue.listItem}\n >\n {breadcrumb}\n </BreadcrumbContext.Provider>\n );\n })}\n </MuiBreadcrumbs>\n );\n};\n\nconst MemoizedBreadcrumbList = memo(BreadcrumbList);\nMemoizedBreadcrumbList.displayName = \"BreadcrumbList\";\n\nexport { MemoizedBreadcrumbList as BreadcrumbList };\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Link.js","names":["memo","useImperativeHandle","useRef","ExternalLinkIcon","jsx","_jsx","jsxs","_jsxs","linkVariantValues","Link","ariaLabel","children","href","icon","linkRef","rel","target","testId","translate","variant","onClick","localLinkRef","focus","current","_Link","ref","className","role","MemoizedLink","displayName"],"sources":["../../src/Link.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 { memo, ReactElement, useImperativeHandle, useRef } from \"react\";\nimport { ExternalLinkIcon } from \"./icons.generated/index.js\";\nimport type { HtmlProps } from \"./HtmlProps.js\";\nimport { FocusHandle } from \"./inputUtils.js\";\n\nimport { Link as MuiLink, LinkProps as MuiLinkProps } from \"@mui/material\";\n\nexport const linkVariantValues = [\"default\", \"monochrome\"] as const;\n\nexport type LinkProps = {\n /**\n * The content within the Link\n */\n children: React.ReactNode;\n /**\n * The Link destination\n */\n href: string;\n /**\n * An optional Icon component at the start of the Link\n */\n icon?: ReactElement;\n /**\n * The ref forwarded to the TextField\n */\n linkRef?: React.RefObject<FocusHandle>;\n /**\n * The click event handler for the Link\n */\n onClick?: MuiLinkProps[\"onClick\"];\n /**\n * The rel attribute defines the relationship between a linked resource and the current document\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel\n */\n rel?: string;\n /**\n * The HTML `target` attribute for the Link\n */\n target?:\n | \"_self\"\n | \"_blank\"\n | \"_parent\"\n | \"_top\"\n | (string & NonNullable<unknown>);\n /**\n * The visual presentation of the Link (default or monochrome)\n */\n variant?: (typeof linkVariantValues)[number];\n} & Pick<HtmlProps, \"ariaLabel\" | \"testId\" | \"translate\">;\n\nconst Link = ({\n ariaLabel,\n children,\n href,\n icon,\n linkRef,\n rel,\n target,\n testId,\n translate,\n variant,\n onClick,\n}: LinkProps) => {\n const localLinkRef = useRef<HTMLAnchorElement>(null);\n useImperativeHandle(linkRef, () => {\n return {\n focus: () => {\n localLinkRef.current?.focus();\n },\n };\n }, []);\n\n return (\n <MuiLink\n aria-label={ariaLabel}\n data-se={testId}\n href={href}\n ref={localLinkRef}\n rel={rel}\n target={target}\n translate={translate}\n variant={variant}\n onClick={onClick}\n >\n {icon && <span className=\"Link-icon\">{icon}</span>}\n\n {children}\n\n {target === \"_blank\" && (\n <span className=\"Link-indicator\" role=\"presentation\">\n <ExternalLinkIcon />\n </span>\n )}\n </MuiLink>\n );\n};\n\nconst MemoizedLink = memo(Link);\n\nMemoizedLink.displayName = \"Link\";\n\nexport { MemoizedLink as Link };\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,IAAI,EAAgBC,mBAAmB,EAAEC,MAAM,QAAQ,OAAO;AACvE,SAASC,gBAAgB,QAAQ,4BAA4B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAM9D,OAAO,MAAMC,iBAAiB,GAAG,CAAC,SAAS,EAAE,YAAY,CAAU;AA4CnE,MAAMC,IAAI,GAAGA,CAAC;EACZC,SAAS;EACTC,QAAQ;EACRC,IAAI;EACJC,IAAI;EACJC,OAAO;EACPC,GAAG;EACHC,MAAM;EACNC,MAAM;EACNC,SAAS;EACTC,OAAO;EACPC;AACS,CAAC,KAAK;EACf,MAAMC,YAAY,GAAGnB,MAAM,CAAoB,IAAI,CAAC;EACpDD,mBAAmB,CAACa,OAAO,EAAE,MAAM;IACjC,OAAO;MACLQ,KAAK,EAAEA,CAAA,KAAM;QACXD,YAAY,CAACE,OAAO,EAAED,KAAK,CAAC,CAAC;MAC/B;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OACEf,KAAA,CAAAiB,KAAA;IACE,cAAYd,SAAU;IACtB,WAASO,MAAO;IAChBL,IAAI,EAAEA,IAAK;IACXa,GAAG,EAAEJ,YAAa;IAClBN,GAAG,EAAEA,GAAI;IACTC,MAAM,EAAEA,MAAO;IACfE,SAAS,EAAEA,SAAU;IACrBC,OAAO,EAAEA,OAAQ;IACjBC,OAAO,EAAEA,OAAQ;IAAAT,QAAA,GAEhBE,IAAI,IAAIR,IAAA;MAAMqB,SAAS,EAAC,WAAW;MAAAf,QAAA,EAAEE;IAAI,CAAO,CAAC,EAEjDF,QAAQ,EAERK,MAAM,KAAK,QAAQ,IAClBX,IAAA;MAAMqB,SAAS,EAAC,gBAAgB;MAACC,IAAI,EAAC,cAAc;MAAAhB,QAAA,EAClDN,IAAA,CAACF,gBAAgB,IAAE;IAAC,CAChB,CACP;EAAA,CACM,CAAC;AAEd,CAAC;AAED,MAAMyB,YAAY,GAAG5B,IAAI,CAACS,IAAI,CAAC;AAE/BmB,YAAY,CAACC,WAAW,GAAG,MAAM;AAEjC,SAASD,YAAY,IAAInB,IAAI","ignoreList":[]}
1
+ {"version":3,"file":"Link.js","names":["memo","useImperativeHandle","useRef","ExternalLinkIcon","jsx","_jsx","jsxs","_jsxs","linkVariantValues","Link","ariaLabel","children","href","icon","linkRef","rel","target","testId","translate","variant","onClick","localLinkRef","focus","current","_Link","ref","className","role","MemoizedLink","displayName"],"sources":["../../src/Link.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 {\n memo,\n ReactElement,\n ReactNode,\n RefObject,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport { ExternalLinkIcon } from \"./icons.generated/index.js\";\nimport type { HtmlProps } from \"./HtmlProps.js\";\nimport { FocusHandle } from \"./inputUtils.js\";\n\nimport { Link as MuiLink, LinkProps as MuiLinkProps } from \"@mui/material\";\n\nexport const linkVariantValues = [\"default\", \"monochrome\"] as const;\n\nexport type LinkProps = {\n /**\n * The content within the Link\n */\n children: ReactNode;\n /**\n * The Link destination\n */\n href: string;\n /**\n * An optional Icon component at the start of the Link\n */\n icon?: ReactElement;\n /**\n * The ref forwarded to the TextField\n */\n linkRef?: RefObject<FocusHandle>;\n /**\n * The click event handler for the Link\n */\n onClick?: MuiLinkProps[\"onClick\"];\n /**\n * The rel attribute defines the relationship between a linked resource and the current document\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel\n */\n rel?: string;\n /**\n * The HTML `target` attribute for the Link\n */\n target?:\n | \"_self\"\n | \"_blank\"\n | \"_parent\"\n | \"_top\"\n | (string & NonNullable<unknown>);\n /**\n * The visual presentation of the Link (default or monochrome)\n */\n variant?: (typeof linkVariantValues)[number];\n} & Pick<HtmlProps, \"ariaLabel\" | \"testId\" | \"translate\">;\n\nconst Link = ({\n ariaLabel,\n children,\n href,\n icon,\n linkRef,\n rel,\n target,\n testId,\n translate,\n variant,\n onClick,\n}: LinkProps) => {\n const localLinkRef = useRef<HTMLAnchorElement>(null);\n useImperativeHandle(linkRef, () => {\n return {\n focus: () => {\n localLinkRef.current?.focus();\n },\n };\n }, []);\n\n return (\n <MuiLink\n aria-label={ariaLabel}\n data-se={testId}\n href={href}\n ref={localLinkRef}\n rel={rel}\n target={target}\n translate={translate}\n variant={variant}\n onClick={onClick}\n >\n {icon && <span className=\"Link-icon\">{icon}</span>}\n\n {children}\n\n {target === \"_blank\" && (\n <span className=\"Link-indicator\" role=\"presentation\">\n <ExternalLinkIcon />\n </span>\n )}\n </MuiLink>\n );\n};\n\nconst MemoizedLink = memo(Link);\n\nMemoizedLink.displayName = \"Link\";\n\nexport { MemoizedLink as Link };\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SACEA,IAAI,EAIJC,mBAAmB,EACnBC,MAAM,QACD,OAAO;AACd,SAASC,gBAAgB,QAAQ,4BAA4B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAM9D,OAAO,MAAMC,iBAAiB,GAAG,CAAC,SAAS,EAAE,YAAY,CAAU;AA4CnE,MAAMC,IAAI,GAAGA,CAAC;EACZC,SAAS;EACTC,QAAQ;EACRC,IAAI;EACJC,IAAI;EACJC,OAAO;EACPC,GAAG;EACHC,MAAM;EACNC,MAAM;EACNC,SAAS;EACTC,OAAO;EACPC;AACS,CAAC,KAAK;EACf,MAAMC,YAAY,GAAGnB,MAAM,CAAoB,IAAI,CAAC;EACpDD,mBAAmB,CAACa,OAAO,EAAE,MAAM;IACjC,OAAO;MACLQ,KAAK,EAAEA,CAAA,KAAM;QACXD,YAAY,CAACE,OAAO,EAAED,KAAK,CAAC,CAAC;MAC/B;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OACEf,KAAA,CAAAiB,KAAA;IACE,cAAYd,SAAU;IACtB,WAASO,MAAO;IAChBL,IAAI,EAAEA,IAAK;IACXa,GAAG,EAAEJ,YAAa;IAClBN,GAAG,EAAEA,GAAI;IACTC,MAAM,EAAEA,MAAO;IACfE,SAAS,EAAEA,SAAU;IACrBC,OAAO,EAAEA,OAAQ;IACjBC,OAAO,EAAEA,OAAQ;IAAAT,QAAA,GAEhBE,IAAI,IAAIR,IAAA;MAAMqB,SAAS,EAAC,WAAW;MAAAf,QAAA,EAAEE;IAAI,CAAO,CAAC,EAEjDF,QAAQ,EAERK,MAAM,KAAK,QAAQ,IAClBX,IAAA;MAAMqB,SAAS,EAAC,gBAAgB;MAACC,IAAI,EAAC,cAAc;MAAAhB,QAAA,EAClDN,IAAA,CAACF,gBAAgB,IAAE;IAAC,CAChB,CACP;EAAA,CACM,CAAC;AAEd,CAAC;AAED,MAAMyB,YAAY,GAAG5B,IAAI,CAACS,IAAI,CAAC;AAE/BmB,YAAY,CAACC,WAAW,GAAG,MAAM;AAEjC,SAASD,YAAY,IAAInB,IAAI","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"OdysseyCacheProvider.js","names":["createCache","memo","useMemo","useUniqueAlphabeticalId","CacheProvider","jsx","_jsx","OdysseyCacheProvider","children","emotionRoot","emotionRootElement","hasShadowDom","hasShadowDomProp","nonce","shadowDomElement","stylisPlugins","uniqueAlphabeticalId","emotionCache","container","key","globalThis","cspNonce","prepend","speedy","value","MemoizedOdysseyCacheProvider","displayName"],"sources":["../../src/OdysseyCacheProvider.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\ndeclare global {\n // eslint-disable-next-line no-var\n var cspNonce: string; // Adding types to `globalThis` requires we use `var`.\n}\n\nimport createCache, { StylisPlugin } from \"@emotion/cache\";\nimport { memo, useMemo, ReactNode } from \"react\";\nimport { useUniqueAlphabeticalId } from \"./useUniqueAlphabeticalId.js\";\nimport { CacheProvider } from \"@emotion/react\";\n\nexport type OdysseyCacheProviderProps = {\n children: ReactNode;\n /**\n * Emotion caches styles into the style element.\n * When enabling this prop, Emotion caches the styles at this element, rather than in <head>.\n * @deprecated Use `EmotionRootElement` instead. This was incorrectly configured as an `HTMLStyleElement`, but then we're rendering `<style>` inside `<style>`. We need this to be a `<div>` instead.\n */\n emotionRoot?: HTMLStyleElement;\n /**\n * Emotion adds `<style>` elements into this DOM node. Normally, Emotion puts these in `document.head`.\n * This is useful if you want to render into a Shadow DOM or iframe.\n */\n emotionRootElement?: HTMLElement;\n hasShadowDom?: boolean;\n nonce?: string;\n /**\n * Emotion renders into this HTML element.\n * When enabling this prop, Emotion renders at the top of this component rather than the bottom like it does in the HTML `<head>`.\n * @deprecated Will be removed in a future Odyssey version. Use `hasShadowDomElement` instead.\n */\n shadowDomElement?: HTMLDivElement | HTMLElement;\n stylisPlugins?: StylisPlugin[];\n};\n\nconst OdysseyCacheProvider = ({\n children,\n emotionRoot,\n emotionRootElement,\n hasShadowDom: hasShadowDomProp,\n nonce,\n shadowDomElement,\n stylisPlugins,\n}: OdysseyCacheProviderProps) => {\n const uniqueAlphabeticalId = useUniqueAlphabeticalId();\n\n const hasShadowDom = hasShadowDomProp || shadowDomElement;\n\n const emotionCache = useMemo(() => {\n return createCache({\n ...((emotionRootElement || emotionRoot) && {\n container: emotionRootElement || emotionRoot,\n }),\n key: uniqueAlphabeticalId,\n nonce: nonce ?? globalThis.cspNonce,\n prepend: true,\n speedy: hasShadowDom ? false : true, // <-- Needs to be set to false when shadow-dom is used! https://github.com/emotion-js/emotion/issues/2053#issuecomment-713429122\n ...(stylisPlugins && { stylisPlugins }),\n });\n }, [\n emotionRoot,\n emotionRootElement,\n hasShadowDom,\n nonce,\n stylisPlugins,\n uniqueAlphabeticalId,\n ]);\n\n return <CacheProvider value={emotionCache}>{children}</CacheProvider>;\n};\n\nconst MemoizedOdysseyCacheProvider = memo(OdysseyCacheProvider);\nMemoizedOdysseyCacheProvider.displayName = \"OdysseyCacheProvider\";\n\nexport { MemoizedOdysseyCacheProvider as OdysseyCacheProvider };\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA,OAAOA,WAAW,MAAwB,gBAAgB;AAC1D,SAASC,IAAI,EAAEC,OAAO,QAAmB,OAAO;AAChD,SAASC,uBAAuB,QAAQ,8BAA8B;AACtE,SAASC,aAAa,QAAQ,gBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AA0B/C,MAAMC,oBAAoB,GAAGA,CAAC;EAC5BC,QAAQ;EACRC,WAAW;EACXC,kBAAkB;EAClBC,YAAY,EAAEC,gBAAgB;EAC9BC,KAAK;EACLC,gBAAgB;EAChBC;AACyB,CAAC,KAAK;EAC/B,MAAMC,oBAAoB,GAAGb,uBAAuB,CAAC,CAAC;EAEtD,MAAMQ,YAAY,GAAGC,gBAAgB,IAAIE,gBAAgB;EAEzD,MAAMG,YAAY,GAAGf,OAAO,CAAC,MAAM;IACjC,OAAOF,WAAW,CAAC;MACjB,IAAI,CAACU,kBAAkB,IAAID,WAAW,KAAK;QACzCS,SAAS,EAAER,kBAAkB,IAAID;MACnC,CAAC,CAAC;MACFU,GAAG,EAAEH,oBAAoB;MACzBH,KAAK,EAAEA,KAAK,IAAIO,UAAU,CAACC,QAAQ;MACnCC,OAAO,EAAE,IAAI;MACbC,MAAM,EAAEZ,YAAY,GAAG,KAAK,GAAG,IAAI;MACnC,IAAII,aAAa,IAAI;QAAEA;MAAc,CAAC;IACxC,CAAC,CAAC;EACJ,CAAC,EAAE,CACDN,WAAW,EACXC,kBAAkB,EAClBC,YAAY,EACZE,KAAK,EACLE,aAAa,EACbC,oBAAoB,CACrB,CAAC;EAEF,OAAOV,IAAA,CAACF,aAAa;IAACoB,KAAK,EAAEP,YAAa;IAAAT,QAAA,EAAEA;EAAQ,CAAgB,CAAC;AACvE,CAAC;AAED,MAAMiB,4BAA4B,GAAGxB,IAAI,CAACM,oBAAoB,CAAC;AAC/DkB,4BAA4B,CAACC,WAAW,GAAG,sBAAsB;AAEjE,SAASD,4BAA4B,IAAIlB,oBAAoB","ignoreList":[]}
1
+ {"version":3,"file":"OdysseyCacheProvider.js","names":["createCache","memo","useMemo","useUniqueAlphabeticalId","CacheProvider","jsx","_jsx","OdysseyCacheProvider","children","emotionRoot","emotionRootElement","hasShadowDom","hasShadowDomProp","nonce","shadowDomElement","stylisPlugins","uniqueAlphabeticalId","emotionCache","container","key","globalThis","cspNonce","prepend","speedy","value","MemoizedOdysseyCacheProvider","displayName"],"sources":["../../src/OdysseyCacheProvider.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\ndeclare global {\n var cspNonce: string; // Adding types to `globalThis` requires we use `var`.\n}\n\nimport createCache, { StylisPlugin } from \"@emotion/cache\";\nimport { memo, useMemo, ReactNode } from \"react\";\nimport { useUniqueAlphabeticalId } from \"./useUniqueAlphabeticalId.js\";\nimport { CacheProvider } from \"@emotion/react\";\n\nexport type OdysseyCacheProviderProps = {\n children: ReactNode;\n /**\n * Emotion caches styles into the style element.\n * When enabling this prop, Emotion caches the styles at this element, rather than in <head>.\n * @deprecated Use `EmotionRootElement` instead. This was incorrectly configured as an `HTMLStyleElement`, but then we're rendering `<style>` inside `<style>`. We need this to be a `<div>` instead.\n */\n emotionRoot?: HTMLStyleElement;\n /**\n * Emotion adds `<style>` elements into this DOM node. Normally, Emotion puts these in `document.head`.\n * This is useful if you want to render into a Shadow DOM or iframe.\n */\n emotionRootElement?: HTMLElement;\n hasShadowDom?: boolean;\n nonce?: string;\n /**\n * Emotion renders into this HTML element.\n * When enabling this prop, Emotion renders at the top of this component rather than the bottom like it does in the HTML `<head>`.\n * @deprecated Will be removed in a future Odyssey version. Use `hasShadowDomElement` instead.\n */\n shadowDomElement?: HTMLDivElement | HTMLElement;\n stylisPlugins?: StylisPlugin[];\n};\n\nconst OdysseyCacheProvider = ({\n children,\n emotionRoot,\n emotionRootElement,\n hasShadowDom: hasShadowDomProp,\n nonce,\n shadowDomElement,\n stylisPlugins,\n}: OdysseyCacheProviderProps) => {\n const uniqueAlphabeticalId = useUniqueAlphabeticalId();\n\n const hasShadowDom = hasShadowDomProp || shadowDomElement;\n\n const emotionCache = useMemo(() => {\n return createCache({\n ...((emotionRootElement || emotionRoot) && {\n container: emotionRootElement || emotionRoot,\n }),\n key: uniqueAlphabeticalId,\n nonce: nonce ?? globalThis.cspNonce,\n prepend: true,\n speedy: hasShadowDom ? false : true, // <-- Needs to be set to false when shadow-dom is used! https://github.com/emotion-js/emotion/issues/2053#issuecomment-713429122\n ...(stylisPlugins && { stylisPlugins }),\n });\n }, [\n emotionRoot,\n emotionRootElement,\n hasShadowDom,\n nonce,\n stylisPlugins,\n uniqueAlphabeticalId,\n ]);\n\n return <CacheProvider value={emotionCache}>{children}</CacheProvider>;\n};\n\nconst MemoizedOdysseyCacheProvider = memo(OdysseyCacheProvider);\nMemoizedOdysseyCacheProvider.displayName = \"OdysseyCacheProvider\";\n\nexport { MemoizedOdysseyCacheProvider as OdysseyCacheProvider };\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA,OAAOA,WAAW,MAAwB,gBAAgB;AAC1D,SAASC,IAAI,EAAEC,OAAO,QAAmB,OAAO;AAChD,SAASC,uBAAuB,QAAQ,8BAA8B;AACtE,SAASC,aAAa,QAAQ,gBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AA0B/C,MAAMC,oBAAoB,GAAGA,CAAC;EAC5BC,QAAQ;EACRC,WAAW;EACXC,kBAAkB;EAClBC,YAAY,EAAEC,gBAAgB;EAC9BC,KAAK;EACLC,gBAAgB;EAChBC;AACyB,CAAC,KAAK;EAC/B,MAAMC,oBAAoB,GAAGb,uBAAuB,CAAC,CAAC;EAEtD,MAAMQ,YAAY,GAAGC,gBAAgB,IAAIE,gBAAgB;EAEzD,MAAMG,YAAY,GAAGf,OAAO,CAAC,MAAM;IACjC,OAAOF,WAAW,CAAC;MACjB,IAAI,CAACU,kBAAkB,IAAID,WAAW,KAAK;QACzCS,SAAS,EAAER,kBAAkB,IAAID;MACnC,CAAC,CAAC;MACFU,GAAG,EAAEH,oBAAoB;MACzBH,KAAK,EAAEA,KAAK,IAAIO,UAAU,CAACC,QAAQ;MACnCC,OAAO,EAAE,IAAI;MACbC,MAAM,EAAEZ,YAAY,GAAG,KAAK,GAAG,IAAI;MACnC,IAAII,aAAa,IAAI;QAAEA;MAAc,CAAC;IACxC,CAAC,CAAC;EACJ,CAAC,EAAE,CACDN,WAAW,EACXC,kBAAkB,EAClBC,YAAY,EACZE,KAAK,EACLE,aAAa,EACbC,oBAAoB,CACrB,CAAC;EAEF,OAAOV,IAAA,CAACF,aAAa;IAACoB,KAAK,EAAEP,YAAa;IAAAT,QAAA,EAAEA;EAAQ,CAAgB,CAAC;AACvE,CAAC;AAED,MAAMiB,4BAA4B,GAAGxB,IAAI,CAACM,oBAAoB,CAAC;AAC/DkB,4BAA4B,CAACC,WAAW,GAAG,sBAAsB;AAEjE,SAASD,4BAA4B,IAAIlB,oBAAoB","ignoreList":[]}
@@ -224,7 +224,7 @@ const Select = ({
224
224
  isReadOnly
225
225
  }) => {
226
226
  const stopPropagation = event => event.stopPropagation();
227
- const hasNonInteractiveIcon = !isInteractive && controlledStateRef.current === CONTROLLED && hasMultipleChoices;
227
+ const hasNonInteractiveIcon = !isInteractive && !isReadOnly && controlledStateRef.current === CONTROLLED && hasMultipleChoices;
228
228
  return Array.isArray(internalSelectedValues) && _jsx(ChipsInnerContainer, {
229
229
  isInteractive: isInteractive,
230
230
  isReadOnly: isReadOnly,
@@ -1 +1 @@
1
- {"version":3,"file":"Select.js","names":["memo","useCallback","useEffect","useMemo","useRef","useState","useImperativeHandle","styled","Field","CheckIcon","CloseCircleFilledIcon","ComponentControlledState","useInputValues","getControlState","useOdysseyDesignTokens","normalizedKey","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","SelectTestSelector","accessibleText","errorMessage","hint","label","children","list","listItem","elementSelector","method","options","role","isControlledElement","SelectContainer","div","ChipsPositioningContainer","shouldForwardProp","prop","odysseyDesignTokens","Spacing0","Spacing5","Spacing1","BorderWidthMain","NonInteractiveIcon","Spacing2","ChipsInnerContainer","_Box","isInteractive","isReadOnly","Spacing6","CONTROLLED","Select","ariaDescribedBy","defaultValue","errorMessageList","hasMultipleChoices","hasMultipleChoicesProp","HintLinkComponent","id","idOverride","inputRef","isDisabled","isFullWidth","isMultiSelect","isOptional","name","nameOverride","onBlur","onChange","onChangeProp","onFocus","testId","translate","value","selectRef","undefined","controlledStateRef","controlledValue","uncontrolledValue","internalSelectedValues","setInternalSelectedValues","current","localInputRef","focus","inputValues","controlState","event","child","preventDefault","target","split","normalizedOptions","normalizedOptionsMap","map","option","text","type","lang","language","Map","removeSelectedValue","selectedValue","Array","isArray","newValue","filter","internalSelectedValue","syntheticEvent","Chips","stopPropagation","hasNonInteractiveIcon","item","length","_Chip","get","tabIndex","onDelete","deleteIcon","sx","pointerEvents","onMouseDown","renderedOptions","index","_ListSubheader","isSelected","includes","_MenuItem","selected","_Checkbox","checked","_ListItemSecondaryAction","toString","renderValue","renderFieldComponent","errorMessageElementId","labelElementId","_Select","displayEmpty","inputProps","readOnly","el","labelId","MenuProps","maxHeight","multiple","fieldType","hasVisibleLabel","MemoizedSelect","displayName"],"sources":["../../src/Select.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 {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useImperativeHandle,\n} from \"react\";\nimport styled from \"@emotion/styled\";\nimport {\n Box as MuiBox,\n Checkbox as MuiCheckbox,\n Chip as MuiChip,\n ListItemSecondaryAction,\n ListSubheader,\n MenuItem as MuiMenuItem,\n Select as MuiSelect,\n SelectProps as MuiSelectProps,\n SelectChangeEvent,\n} from \"@mui/material\";\n\nimport { Field } from \"./Field.js\";\nimport {\n FieldComponentProps,\n FieldComponentRenderProps,\n} from \"./FieldComponentProps.js\";\nimport { CheckIcon, CloseCircleFilledIcon } from \"./icons.generated/index.js\";\nimport type { HtmlProps } from \"./HtmlProps.js\";\nimport {\n ComponentControlledState,\n FocusHandle,\n useInputValues,\n getControlState,\n} from \"./inputUtils.js\";\nimport {\n useOdysseyDesignTokens,\n DesignTokens,\n} from \"./OdysseyDesignTokensContext.js\";\nimport { TestSelector } from \"./test-selectors/index.js\";\nimport { normalizedKey } from \"./useNormalizedKey.js\";\n\nexport const SelectTestSelector = {\n accessibleText: {\n errorMessage: \"errorMessage\",\n hint: \"description\",\n label: \"label\",\n },\n children: {\n list: {\n accessibleText: {\n label: \"label\",\n },\n children: {\n listItem: {\n accessibleText: {\n label: \"label\",\n },\n elementSelector: {\n method: \"ByRole\",\n options: {\n label: \"name\",\n },\n role: \"option\",\n },\n },\n },\n isControlledElement: true,\n },\n },\n elementSelector: {\n method: \"ByRole\",\n options: {\n label: \"name\",\n },\n role: \"combobox\",\n },\n} as const satisfies TestSelector;\n\nexport type SelectOption = {\n text: string;\n type?: \"heading\" | \"option\";\n value?: string;\n language?: string;\n};\n\nconst SelectContainer = styled.div`\n position: relative;\n width: 100%;\n display: flex;\n`;\n\nconst ChipsPositioningContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>`\n display: flex;\n align-items: center;\n position: absolute;\n top: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing0};\n right: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing5};\n bottom: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing0};\n left: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing1};\n margin-inline-start: ${({ odysseyDesignTokens }) =>\n odysseyDesignTokens.BorderWidthMain};\n opacity: 1;\n pointer-events: none;\n`;\n\nconst NonInteractiveIcon = styled(CloseCircleFilledIcon, {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>`\n font-size: 1em;\n margin-inline-start: ${({ odysseyDesignTokens }) =>\n odysseyDesignTokens.Spacing2};\n margin-inline-end: -${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing1};\n margin-block-end: -1px;\n`;\n\nconst ChipsInnerContainer = styled(MuiBox, {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" &&\n prop !== \"isInteractive\" &&\n prop !== \"isReadOnly\",\n})<{\n isInteractive?: boolean;\n isReadOnly?: boolean;\n odysseyDesignTokens: DesignTokens;\n}>`\n display: flex;\n flex-wrap: wrap;\n gap: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing1};\n pointer-events: none;\n opacity: ${({ isInteractive, isReadOnly }) =>\n isInteractive || isReadOnly ? 1 : 0};\n min-height: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing6};\n`;\n\nexport type SelectValueType<HasMultipleChoices> =\n HasMultipleChoices extends true ? string[] : string;\n\nexport type SelectProps<\n Value extends SelectValueType<HasMultipleChoices>,\n HasMultipleChoices extends boolean,\n> = {\n /**\n * The default value. Use when the component is not controlled.\n */\n defaultValue?: MuiSelectProps<Value>[\"defaultValue\"];\n /**\n * If `true`, the Select allows multiple selections\n */\n hasMultipleChoices?: HasMultipleChoices;\n /**\n * The ref forwarded to the Select\n */\n inputRef?: React.RefObject<FocusHandle>;\n /**\n * @deprecated Use `hasMultipleChoices` instead.\n */\n /** **Deprecated:** use `hasMultipleChoices` */\n isMultiSelect?: HasMultipleChoices;\n /**\n * The label text for the Select\n */\n label: string;\n /**\n * Callback fired when the Select loses focus\n */\n onBlur?: MuiSelectProps<Value>[\"onBlur\"];\n /**\n * Callback fired when the value of the Select changes\n */\n onChange?: MuiSelectProps<Value>[\"onChange\"];\n /**\n * Callback fired when the Select gains focus\n */\n onFocus?: MuiSelectProps<Value>[\"onFocus\"];\n /**\n * The options for the Select\n */\n options: (string | SelectOption)[];\n /**\n * The value or values selected in the Select\n */\n value?: Value;\n} & Pick<\n FieldComponentProps,\n | \"errorMessage\"\n | \"errorMessageList\"\n | \"hint\"\n | \"HintLinkComponent\"\n | \"id\"\n | \"isDisabled\"\n | \"isFullWidth\"\n | \"isOptional\"\n | \"isReadOnly\"\n | \"name\"\n> &\n Pick<HtmlProps, \"ariaDescribedBy\" | \"testId\" | \"translate\">;\n\ntype SelectRenderProps = Partial<\n Pick<FieldComponentRenderProps, \"ariaDescribedBy\" | \"errorMessageElementId\">\n> &\n Pick<FieldComponentRenderProps, \"id\" | \"labelElementId\">;\n\n/**\n * Options in Odyssey <Select> are passed as an array, which can contain any combination\n * of the following:\n * - string — A simple string. The string will be both the text and the value of the resulting option.\n * <option value=\"string\">string</option>\n *\n * - { text: string } — Same as above, but the string is contained within an object.\n * <option value=\"text\">text</option>\n *\n * - { text: string, value: string } — The option text will be text, and the option value will be value.\n * <option value=\"value\">text</option>\n *\n * - { text: string, type: \"heading\" } — Used to display a group heading with the text\n */\n\nconst { CONTROLLED } = ComponentControlledState;\nconst Select = <\n Value extends SelectValueType<HasMultipleChoices>,\n HasMultipleChoices extends boolean,\n>({\n ariaDescribedBy,\n defaultValue,\n errorMessage,\n errorMessageList,\n hasMultipleChoices: hasMultipleChoicesProp,\n hint,\n HintLinkComponent,\n id: idOverride,\n inputRef,\n isDisabled = false,\n isFullWidth = false,\n isMultiSelect,\n isOptional = false,\n isReadOnly = false,\n label,\n name: nameOverride,\n onBlur,\n onChange: onChangeProp,\n onFocus,\n options,\n testId,\n translate,\n value,\n}: SelectProps<Value, HasMultipleChoices>) => {\n const selectRef = useRef<HTMLInputElement | HTMLTextAreaElement | null>(null);\n\n const hasMultipleChoices = useMemo(\n () =>\n hasMultipleChoicesProp === undefined\n ? isMultiSelect\n : hasMultipleChoicesProp,\n [hasMultipleChoicesProp, isMultiSelect],\n );\n\n const controlledStateRef = useRef(\n getControlState({\n controlledValue: value,\n uncontrolledValue: defaultValue,\n }),\n );\n const [internalSelectedValues, setInternalSelectedValues] = useState(\n controlledStateRef.current === CONTROLLED ? value : defaultValue,\n );\n\n const localInputRef = useRef<HTMLSelectElement>(null);\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n useImperativeHandle(inputRef, () => {\n return {\n focus: () => {\n localInputRef.current?.focus();\n },\n };\n }, []);\n\n useEffect(() => {\n if (controlledStateRef.current === CONTROLLED) {\n setInternalSelectedValues(value);\n }\n }, [value]);\n\n const inputValues = useInputValues({\n defaultValue,\n value,\n controlState: controlledStateRef.current,\n });\n\n const onChange = useCallback<NonNullable<MuiSelectProps<Value>[\"onChange\"]>>(\n (event, child) => {\n if (isReadOnly) {\n event.preventDefault();\n } else {\n const {\n target: { value },\n } = event;\n if (controlledStateRef.current !== CONTROLLED) {\n setInternalSelectedValues(\n (typeof value === \"string\" && hasMultipleChoices\n ? value.split(\",\")\n : value) as Value,\n );\n }\n onChangeProp?.(event, child);\n }\n },\n [hasMultipleChoices, onChangeProp, isReadOnly],\n );\n // Normalize the options array to accommodate the various\n // data types that might be passed\n const [normalizedOptions, normalizedOptionsMap] = useMemo(() => {\n const normalizedOptions = options.map((option) => {\n if (typeof option === \"object\") {\n /**\n * If the value of `option?.value is an empty string, we need to make sure that we\n * set an empty string to `value` in the normalized option so that the select component\n * can potentially set it as the selected one in the text input\n */\n const value =\n option?.value === \"\" ? option.value : option.value || option.text;\n return {\n text: option.text,\n value,\n type: option.type === \"heading\" ? \"heading\" : \"option\",\n lang: option.language,\n };\n }\n\n return { text: option, value: option, type: \"option\" };\n });\n\n const normalizedOptionsMap = new Map(\n normalizedOptions.map((option) => [option.value, option]),\n );\n return [normalizedOptions, normalizedOptionsMap];\n }, [options]);\n\n const removeSelectedValue = useCallback(\n (selectedValue: string) => {\n if (Array.isArray(internalSelectedValues)) {\n const newValue = internalSelectedValues.filter(\n (internalSelectedValue) => internalSelectedValue !== selectedValue,\n );\n\n const syntheticEvent = {\n target: { value: newValue },\n } as SelectChangeEvent<Value>;\n\n onChange(syntheticEvent, null);\n }\n },\n [internalSelectedValues, onChange],\n );\n\n const Chips = useCallback(\n ({\n isInteractive,\n isReadOnly,\n }: {\n isInteractive: boolean;\n isReadOnly?: boolean;\n }) => {\n const stopPropagation = (event: React.MouseEvent<SVGSVGElement>) =>\n event.stopPropagation();\n\n const hasNonInteractiveIcon =\n !isInteractive &&\n controlledStateRef.current === CONTROLLED &&\n hasMultipleChoices;\n return (\n Array.isArray(internalSelectedValues) && (\n <ChipsInnerContainer\n isInteractive={isInteractive}\n isReadOnly={isReadOnly}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {internalSelectedValues.map(\n (item) =>\n item?.length > 0 && (\n <MuiChip\n key={item}\n label={\n <>\n {normalizedOptionsMap.get(item)?.text}\n {hasNonInteractiveIcon && (\n <NonInteractiveIcon\n odysseyDesignTokens={odysseyDesignTokens}\n />\n )}\n </>\n }\n tabIndex={-1}\n onDelete={\n isInteractive && controlledStateRef.current === CONTROLLED\n ? () => removeSelectedValue(item)\n : undefined\n }\n deleteIcon={\n <CloseCircleFilledIcon\n sx={{ pointerEvents: \"auto\" }}\n // We need to stop event propagation on mouse down to prevent the deletion\n // from being blocked by the Select list opening, and also ensure that\n // the pointerEvent is registered even when the parent's are not\n onMouseDown={stopPropagation}\n />\n }\n />\n ),\n )}\n </ChipsInnerContainer>\n )\n );\n },\n [\n controlledStateRef,\n hasMultipleChoices,\n internalSelectedValues,\n odysseyDesignTokens,\n removeSelectedValue,\n normalizedOptionsMap,\n ],\n );\n\n // Convert the options into the ReactNode children\n // that will populate the <Select>\n const renderedOptions = useMemo(\n () =>\n normalizedOptions.map((option, index) => {\n if (option.type === \"heading\") {\n return (\n <ListSubheader key={option.text}> {option.text} </ListSubheader>\n );\n }\n\n const isSelected = hasMultipleChoices\n ? internalSelectedValues?.includes(option.value)\n : internalSelectedValues === option.value;\n\n return (\n <MuiMenuItem\n data-empty={!option.text}\n key={normalizedKey(option.text, index.toString())}\n value={option.value}\n selected={isSelected}\n lang={option.lang}\n >\n {hasMultipleChoices && <MuiCheckbox checked={isSelected} />}\n {option.text}\n {!hasMultipleChoices && internalSelectedValues === option.value && (\n <ListItemSecondaryAction>\n <CheckIcon />\n </ListItemSecondaryAction>\n )}\n </MuiMenuItem>\n );\n }),\n [hasMultipleChoices, normalizedOptions, internalSelectedValues],\n );\n\n const renderValue = useCallback(\n (value: Value) => Array.isArray(value) && <Chips isInteractive={false} />,\n [Chips],\n );\n\n const renderFieldComponent = useCallback(\n ({\n ariaDescribedBy,\n errorMessageElementId,\n id,\n labelElementId,\n }: SelectRenderProps) => (\n <SelectContainer>\n <MuiSelect\n {...inputValues}\n aria-describedby={ariaDescribedBy}\n aria-errormessage={errorMessageElementId}\n displayEmpty\n id={id}\n inputProps={{\n \"data-se\": testId,\n \"aria-disabled\": isDisabled || isReadOnly,\n readOnly: isReadOnly,\n }}\n inputRef={(el: HTMLInputElement | HTMLTextAreaElement | null) => {\n if (localInputRef.current !== el) {\n (localInputRef as React.MutableRefObject<typeof el>).current = el;\n }\n selectRef.current = el;\n }}\n labelId={labelElementId}\n MenuProps={{\n sx: {\n \".MuiPaper-root\": {\n maxHeight: \"50vh\",\n },\n },\n }}\n multiple={hasMultipleChoices}\n name={nameOverride ?? id}\n onBlur={onBlur}\n onChange={onChange}\n onFocus={onFocus}\n renderValue={hasMultipleChoices ? renderValue : undefined}\n translate={translate}\n >\n {renderedOptions}\n </MuiSelect>\n {hasMultipleChoices && (\n <>\n <ChipsPositioningContainer\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <Chips isInteractive={!isReadOnly} isReadOnly={isReadOnly} />\n </ChipsPositioningContainer>\n </>\n )}\n </SelectContainer>\n ),\n [\n Chips,\n inputValues,\n hasMultipleChoices,\n isDisabled,\n isReadOnly,\n nameOverride,\n odysseyDesignTokens,\n onBlur,\n onChange,\n onFocus,\n renderedOptions,\n renderValue,\n testId,\n translate,\n ],\n );\n\n return (\n <Field\n ariaDescribedBy={ariaDescribedBy}\n errorMessage={errorMessage}\n errorMessageList={errorMessageList}\n fieldType=\"single\"\n hasVisibleLabel\n hint={hint}\n HintLinkComponent={HintLinkComponent}\n id={idOverride}\n isDisabled={isDisabled}\n isFullWidth={isFullWidth}\n isOptional={isOptional}\n label={label}\n renderFieldComponent={renderFieldComponent}\n />\n );\n};\n\nconst MemoizedSelect = memo(Select);\nMemoizedSelect.displayName = \"Select\";\n\nexport { MemoizedSelect as Select };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Select.js","names":["memo","useCallback","useEffect","useMemo","useRef","useState","useImperativeHandle","styled","Field","CheckIcon","CloseCircleFilledIcon","ComponentControlledState","useInputValues","getControlState","useOdysseyDesignTokens","normalizedKey","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","SelectTestSelector","accessibleText","errorMessage","hint","label","children","list","listItem","elementSelector","method","options","role","isControlledElement","SelectContainer","div","ChipsPositioningContainer","shouldForwardProp","prop","odysseyDesignTokens","Spacing0","Spacing5","Spacing1","BorderWidthMain","NonInteractiveIcon","Spacing2","ChipsInnerContainer","_Box","isInteractive","isReadOnly","Spacing6","CONTROLLED","Select","ariaDescribedBy","defaultValue","errorMessageList","hasMultipleChoices","hasMultipleChoicesProp","HintLinkComponent","id","idOverride","inputRef","isDisabled","isFullWidth","isMultiSelect","isOptional","name","nameOverride","onBlur","onChange","onChangeProp","onFocus","testId","translate","value","selectRef","undefined","controlledStateRef","controlledValue","uncontrolledValue","internalSelectedValues","setInternalSelectedValues","current","localInputRef","focus","inputValues","controlState","event","child","preventDefault","target","split","normalizedOptions","normalizedOptionsMap","map","option","text","type","lang","language","Map","removeSelectedValue","selectedValue","Array","isArray","newValue","filter","internalSelectedValue","syntheticEvent","Chips","stopPropagation","hasNonInteractiveIcon","item","length","_Chip","get","tabIndex","onDelete","deleteIcon","sx","pointerEvents","onMouseDown","renderedOptions","index","_ListSubheader","isSelected","includes","_MenuItem","selected","_Checkbox","checked","_ListItemSecondaryAction","toString","renderValue","renderFieldComponent","errorMessageElementId","labelElementId","_Select","displayEmpty","inputProps","readOnly","el","labelId","MenuProps","maxHeight","multiple","fieldType","hasVisibleLabel","MemoizedSelect","displayName"],"sources":["../../src/Select.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 {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useImperativeHandle,\n} from \"react\";\nimport styled from \"@emotion/styled\";\nimport {\n Box as MuiBox,\n Checkbox as MuiCheckbox,\n Chip as MuiChip,\n ListItemSecondaryAction,\n ListSubheader,\n MenuItem as MuiMenuItem,\n Select as MuiSelect,\n SelectProps as MuiSelectProps,\n SelectChangeEvent,\n} from \"@mui/material\";\n\nimport { Field } from \"./Field.js\";\nimport {\n FieldComponentProps,\n FieldComponentRenderProps,\n} from \"./FieldComponentProps.js\";\nimport { CheckIcon, CloseCircleFilledIcon } from \"./icons.generated/index.js\";\nimport type { HtmlProps } from \"./HtmlProps.js\";\nimport {\n ComponentControlledState,\n FocusHandle,\n useInputValues,\n getControlState,\n} from \"./inputUtils.js\";\nimport {\n useOdysseyDesignTokens,\n DesignTokens,\n} from \"./OdysseyDesignTokensContext.js\";\nimport { TestSelector } from \"./test-selectors/index.js\";\nimport { normalizedKey } from \"./useNormalizedKey.js\";\n\nexport const SelectTestSelector = {\n accessibleText: {\n errorMessage: \"errorMessage\",\n hint: \"description\",\n label: \"label\",\n },\n children: {\n list: {\n accessibleText: {\n label: \"label\",\n },\n children: {\n listItem: {\n accessibleText: {\n label: \"label\",\n },\n elementSelector: {\n method: \"ByRole\",\n options: {\n label: \"name\",\n },\n role: \"option\",\n },\n },\n },\n isControlledElement: true,\n },\n },\n elementSelector: {\n method: \"ByRole\",\n options: {\n label: \"name\",\n },\n role: \"combobox\",\n },\n} as const satisfies TestSelector;\n\nexport type SelectOption = {\n text: string;\n type?: \"heading\" | \"option\";\n value?: string;\n language?: string;\n};\n\nconst SelectContainer = styled.div`\n position: relative;\n width: 100%;\n display: flex;\n`;\n\nconst ChipsPositioningContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>`\n display: flex;\n align-items: center;\n position: absolute;\n top: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing0};\n right: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing5};\n bottom: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing0};\n left: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing1};\n margin-inline-start: ${({ odysseyDesignTokens }) =>\n odysseyDesignTokens.BorderWidthMain};\n opacity: 1;\n pointer-events: none;\n`;\n\nconst NonInteractiveIcon = styled(CloseCircleFilledIcon, {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>`\n font-size: 1em;\n margin-inline-start: ${({ odysseyDesignTokens }) =>\n odysseyDesignTokens.Spacing2};\n margin-inline-end: -${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing1};\n margin-block-end: -1px;\n`;\n\nconst ChipsInnerContainer = styled(MuiBox, {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" &&\n prop !== \"isInteractive\" &&\n prop !== \"isReadOnly\",\n})<{\n isInteractive?: boolean;\n isReadOnly?: boolean;\n odysseyDesignTokens: DesignTokens;\n}>`\n display: flex;\n flex-wrap: wrap;\n gap: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing1};\n pointer-events: none;\n opacity: ${({ isInteractive, isReadOnly }) =>\n isInteractive || isReadOnly ? 1 : 0};\n min-height: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing6};\n`;\n\nexport type SelectValueType<HasMultipleChoices> =\n HasMultipleChoices extends true ? string[] : string;\n\nexport type SelectProps<\n Value extends SelectValueType<HasMultipleChoices>,\n HasMultipleChoices extends boolean,\n> = {\n /**\n * The default value. Use when the component is not controlled.\n */\n defaultValue?: MuiSelectProps<Value>[\"defaultValue\"];\n /**\n * If `true`, the Select allows multiple selections\n */\n hasMultipleChoices?: HasMultipleChoices;\n /**\n * The ref forwarded to the Select\n */\n inputRef?: React.RefObject<FocusHandle>;\n /**\n * @deprecated Use `hasMultipleChoices` instead.\n */\n /** **Deprecated:** use `hasMultipleChoices` */\n isMultiSelect?: HasMultipleChoices;\n /**\n * The label text for the Select\n */\n label: string;\n /**\n * Callback fired when the Select loses focus\n */\n onBlur?: MuiSelectProps<Value>[\"onBlur\"];\n /**\n * Callback fired when the value of the Select changes\n */\n onChange?: MuiSelectProps<Value>[\"onChange\"];\n /**\n * Callback fired when the Select gains focus\n */\n onFocus?: MuiSelectProps<Value>[\"onFocus\"];\n /**\n * The options for the Select\n */\n options: (string | SelectOption)[];\n /**\n * The value or values selected in the Select\n */\n value?: Value;\n} & Pick<\n FieldComponentProps,\n | \"errorMessage\"\n | \"errorMessageList\"\n | \"hint\"\n | \"HintLinkComponent\"\n | \"id\"\n | \"isDisabled\"\n | \"isFullWidth\"\n | \"isOptional\"\n | \"isReadOnly\"\n | \"name\"\n> &\n Pick<HtmlProps, \"ariaDescribedBy\" | \"testId\" | \"translate\">;\n\ntype SelectRenderProps = Partial<\n Pick<FieldComponentRenderProps, \"ariaDescribedBy\" | \"errorMessageElementId\">\n> &\n Pick<FieldComponentRenderProps, \"id\" | \"labelElementId\">;\n\n/**\n * Options in Odyssey <Select> are passed as an array, which can contain any combination\n * of the following:\n * - string — A simple string. The string will be both the text and the value of the resulting option.\n * <option value=\"string\">string</option>\n *\n * - { text: string } — Same as above, but the string is contained within an object.\n * <option value=\"text\">text</option>\n *\n * - { text: string, value: string } — The option text will be text, and the option value will be value.\n * <option value=\"value\">text</option>\n *\n * - { text: string, type: \"heading\" } — Used to display a group heading with the text\n */\n\nconst { CONTROLLED } = ComponentControlledState;\nconst Select = <\n Value extends SelectValueType<HasMultipleChoices>,\n HasMultipleChoices extends boolean,\n>({\n ariaDescribedBy,\n defaultValue,\n errorMessage,\n errorMessageList,\n hasMultipleChoices: hasMultipleChoicesProp,\n hint,\n HintLinkComponent,\n id: idOverride,\n inputRef,\n isDisabled = false,\n isFullWidth = false,\n isMultiSelect,\n isOptional = false,\n isReadOnly = false,\n label,\n name: nameOverride,\n onBlur,\n onChange: onChangeProp,\n onFocus,\n options,\n testId,\n translate,\n value,\n}: SelectProps<Value, HasMultipleChoices>) => {\n const selectRef = useRef<HTMLInputElement | HTMLTextAreaElement | null>(null);\n\n const hasMultipleChoices = useMemo(\n () =>\n hasMultipleChoicesProp === undefined\n ? isMultiSelect\n : hasMultipleChoicesProp,\n [hasMultipleChoicesProp, isMultiSelect],\n );\n\n const controlledStateRef = useRef(\n getControlState({\n controlledValue: value,\n uncontrolledValue: defaultValue,\n }),\n );\n const [internalSelectedValues, setInternalSelectedValues] = useState(\n controlledStateRef.current === CONTROLLED ? value : defaultValue,\n );\n\n const localInputRef = useRef<HTMLSelectElement>(null);\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n useImperativeHandle(inputRef, () => {\n return {\n focus: () => {\n localInputRef.current?.focus();\n },\n };\n }, []);\n\n useEffect(() => {\n if (controlledStateRef.current === CONTROLLED) {\n setInternalSelectedValues(value);\n }\n }, [value]);\n\n const inputValues = useInputValues({\n defaultValue,\n value,\n controlState: controlledStateRef.current,\n });\n\n const onChange = useCallback<NonNullable<MuiSelectProps<Value>[\"onChange\"]>>(\n (event, child) => {\n if (isReadOnly) {\n event.preventDefault();\n } else {\n const {\n target: { value },\n } = event;\n if (controlledStateRef.current !== CONTROLLED) {\n setInternalSelectedValues(\n (typeof value === \"string\" && hasMultipleChoices\n ? value.split(\",\")\n : value) as Value,\n );\n }\n onChangeProp?.(event, child);\n }\n },\n [hasMultipleChoices, onChangeProp, isReadOnly],\n );\n // Normalize the options array to accommodate the various\n // data types that might be passed\n const [normalizedOptions, normalizedOptionsMap] = useMemo(() => {\n const normalizedOptions = options.map((option) => {\n if (typeof option === \"object\") {\n /**\n * If the value of `option?.value is an empty string, we need to make sure that we\n * set an empty string to `value` in the normalized option so that the select component\n * can potentially set it as the selected one in the text input\n */\n const value =\n option?.value === \"\" ? option.value : option.value || option.text;\n return {\n text: option.text,\n value,\n type: option.type === \"heading\" ? \"heading\" : \"option\",\n lang: option.language,\n };\n }\n\n return { text: option, value: option, type: \"option\" };\n });\n\n const normalizedOptionsMap = new Map(\n normalizedOptions.map((option) => [option.value, option]),\n );\n return [normalizedOptions, normalizedOptionsMap];\n }, [options]);\n\n const removeSelectedValue = useCallback(\n (selectedValue: string) => {\n if (Array.isArray(internalSelectedValues)) {\n const newValue = internalSelectedValues.filter(\n (internalSelectedValue) => internalSelectedValue !== selectedValue,\n );\n\n const syntheticEvent = {\n target: { value: newValue },\n } as SelectChangeEvent<Value>;\n\n onChange(syntheticEvent, null);\n }\n },\n [internalSelectedValues, onChange],\n );\n\n const Chips = useCallback(\n ({\n isInteractive,\n isReadOnly,\n }: {\n isInteractive: boolean;\n isReadOnly?: boolean;\n }) => {\n const stopPropagation = (event: React.MouseEvent<SVGSVGElement>) =>\n event.stopPropagation();\n\n const hasNonInteractiveIcon =\n !isInteractive &&\n !isReadOnly &&\n controlledStateRef.current === CONTROLLED &&\n hasMultipleChoices;\n\n return (\n Array.isArray(internalSelectedValues) && (\n <ChipsInnerContainer\n isInteractive={isInteractive}\n isReadOnly={isReadOnly}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {internalSelectedValues.map(\n (item) =>\n item?.length > 0 && (\n <MuiChip\n key={item}\n label={\n <>\n {normalizedOptionsMap.get(item)?.text}\n {hasNonInteractiveIcon && (\n <NonInteractiveIcon\n odysseyDesignTokens={odysseyDesignTokens}\n />\n )}\n </>\n }\n tabIndex={-1}\n onDelete={\n isInteractive && controlledStateRef.current === CONTROLLED\n ? () => removeSelectedValue(item)\n : undefined\n }\n deleteIcon={\n <CloseCircleFilledIcon\n sx={{ pointerEvents: \"auto\" }}\n // We need to stop event propagation on mouse down to prevent the deletion\n // from being blocked by the Select list opening, and also ensure that\n // the pointerEvent is registered even when the parent's are not\n onMouseDown={stopPropagation}\n />\n }\n />\n ),\n )}\n </ChipsInnerContainer>\n )\n );\n },\n [\n controlledStateRef,\n hasMultipleChoices,\n internalSelectedValues,\n odysseyDesignTokens,\n removeSelectedValue,\n normalizedOptionsMap,\n ],\n );\n\n // Convert the options into the ReactNode children\n // that will populate the <Select>\n const renderedOptions = useMemo(\n () =>\n normalizedOptions.map((option, index) => {\n if (option.type === \"heading\") {\n return (\n <ListSubheader key={option.text}> {option.text} </ListSubheader>\n );\n }\n\n const isSelected = hasMultipleChoices\n ? internalSelectedValues?.includes(option.value)\n : internalSelectedValues === option.value;\n\n return (\n <MuiMenuItem\n data-empty={!option.text}\n key={normalizedKey(option.text, index.toString())}\n value={option.value}\n selected={isSelected}\n lang={option.lang}\n >\n {hasMultipleChoices && <MuiCheckbox checked={isSelected} />}\n {option.text}\n {!hasMultipleChoices && internalSelectedValues === option.value && (\n <ListItemSecondaryAction>\n <CheckIcon />\n </ListItemSecondaryAction>\n )}\n </MuiMenuItem>\n );\n }),\n [hasMultipleChoices, normalizedOptions, internalSelectedValues],\n );\n\n const renderValue = useCallback(\n (value: Value) => Array.isArray(value) && <Chips isInteractive={false} />,\n [Chips],\n );\n\n const renderFieldComponent = useCallback(\n ({\n ariaDescribedBy,\n errorMessageElementId,\n id,\n labelElementId,\n }: SelectRenderProps) => (\n <SelectContainer>\n <MuiSelect\n {...inputValues}\n aria-describedby={ariaDescribedBy}\n aria-errormessage={errorMessageElementId}\n displayEmpty\n id={id}\n inputProps={{\n \"data-se\": testId,\n \"aria-disabled\": isDisabled || isReadOnly,\n readOnly: isReadOnly,\n }}\n inputRef={(el: HTMLInputElement | HTMLTextAreaElement | null) => {\n if (localInputRef.current !== el) {\n (localInputRef as React.MutableRefObject<typeof el>).current = el;\n }\n selectRef.current = el;\n }}\n labelId={labelElementId}\n MenuProps={{\n sx: {\n \".MuiPaper-root\": {\n maxHeight: \"50vh\",\n },\n },\n }}\n multiple={hasMultipleChoices}\n name={nameOverride ?? id}\n onBlur={onBlur}\n onChange={onChange}\n onFocus={onFocus}\n renderValue={hasMultipleChoices ? renderValue : undefined}\n translate={translate}\n >\n {renderedOptions}\n </MuiSelect>\n {hasMultipleChoices && (\n <>\n <ChipsPositioningContainer\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <Chips isInteractive={!isReadOnly} isReadOnly={isReadOnly} />\n </ChipsPositioningContainer>\n </>\n )}\n </SelectContainer>\n ),\n [\n Chips,\n inputValues,\n hasMultipleChoices,\n isDisabled,\n isReadOnly,\n nameOverride,\n odysseyDesignTokens,\n onBlur,\n onChange,\n onFocus,\n renderedOptions,\n renderValue,\n testId,\n translate,\n ],\n );\n\n return (\n <Field\n ariaDescribedBy={ariaDescribedBy}\n errorMessage={errorMessage}\n errorMessageList={errorMessageList}\n fieldType=\"single\"\n hasVisibleLabel\n hint={hint}\n HintLinkComponent={HintLinkComponent}\n id={idOverride}\n isDisabled={isDisabled}\n isFullWidth={isFullWidth}\n isOptional={isOptional}\n label={label}\n renderFieldComponent={renderFieldComponent}\n />\n );\n};\n\nconst MemoizedSelect = memo(Select);\nMemoizedSelect.displayName = \"Select\";\n\nexport { MemoizedSelect as Select };\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SACEA,IAAI,EACJC,WAAW,EACXC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,EACRC,mBAAmB,QACd,OAAO;AACd,OAAOC,MAAM,MAAM,iBAAiB;AAapC,SAASC,KAAK,QAAQ,YAAY;AAKlC,SAASC,SAAS,EAAEC,qBAAqB,QAAQ,4BAA4B;AAE7E,SACEC,wBAAwB,EAExBC,cAAc,EACdC,eAAe,QACV,iBAAiB;AACxB,SACEC,sBAAsB,QAEjB,iCAAiC;AAExC,SAASC,aAAa,QAAQ,uBAAuB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAEtD,OAAO,MAAMC,kBAAkB,GAAG;EAChCC,cAAc,EAAE;IACdC,YAAY,EAAE,cAAc;IAC5BC,IAAI,EAAE,aAAa;IACnBC,KAAK,EAAE;EACT,CAAC;EACDC,QAAQ,EAAE;IACRC,IAAI,EAAE;MACJL,cAAc,EAAE;QACdG,KAAK,EAAE;MACT,CAAC;MACDC,QAAQ,EAAE;QACRE,QAAQ,EAAE;UACRN,cAAc,EAAE;YACdG,KAAK,EAAE;UACT,CAAC;UACDI,eAAe,EAAE;YACfC,MAAM,EAAE,QAAQ;YAChBC,OAAO,EAAE;cACPN,KAAK,EAAE;YACT,CAAC;YACDO,IAAI,EAAE;UACR;QACF;MACF,CAAC;MACDC,mBAAmB,EAAE;IACvB;EACF,CAAC;EACDJ,eAAe,EAAE;IACfC,MAAM,EAAE,QAAQ;IAChBC,OAAO,EAAE;MACPN,KAAK,EAAE;IACT,CAAC;IACDO,IAAI,EAAE;EACR;AACF,CAAiC;AASjC,MAAME,eAAe,GAAG5B,MAAM,CAAC6B,GAAG;AAClC;AACA;AACA;AACA,CAAC;AAED,MAAMC,yBAAyB,GAAG9B,MAAM,CAAC,KAAK,EAAE;EAC9C+B,iBAAiB,EAAGC,IAAI,IAAKA,IAAI,KAAK;AACxC,CAAC,CAEC;AACF;AACA;AACA;AACA,SAAS,CAAC;EAAEC;AAAoB,CAAC,KAAKA,mBAAmB,CAACC,QAAQ;AAClE,WAAW,CAAC;EAAED;AAAoB,CAAC,KAAKA,mBAAmB,CAACE,QAAQ;AACpE,YAAY,CAAC;EAAEF;AAAoB,CAAC,KAAKA,mBAAmB,CAACC,QAAQ;AACrE,UAAU,CAAC;EAAED;AAAoB,CAAC,KAAKA,mBAAmB,CAACG,QAAQ;AACnE,yBAAyB,CAAC;EAAEH;AAAoB,CAAC,KAC7CA,mBAAmB,CAACI,eAAe;AACvC;AACA;AACA,CAAC;AAED,MAAMC,kBAAkB,GAAGtC,MAAM,CAACG,qBAAqB,EAAE;EACvD4B,iBAAiB,EAAGC,IAAI,IAAKA,IAAI,KAAK;AACxC,CAAC,CAEC;AACF;AACA,yBAAyB,CAAC;EAAEC;AAAoB,CAAC,KAC7CA,mBAAmB,CAACM,QAAQ;AAChC,wBAAwB,CAAC;EAAEN;AAAoB,CAAC,KAAKA,mBAAmB,CAACG,QAAQ;AACjF;AACA,CAAC;AAED,MAAMI,mBAAmB,GAAGxC,MAAM,CAAAyC,IAAA,EAAS;EACzCV,iBAAiB,EAAGC,IAAI,IACtBA,IAAI,KAAK,qBAAqB,IAC9BA,IAAI,KAAK,eAAe,IACxBA,IAAI,KAAK;AACb,CAAC,CAIC;AACF;AACA;AACA,SAAS,CAAC;EAAEC;AAAoB,CAAC,KAAKA,mBAAmB,CAACG,QAAQ;AAClE;AACA,aAAa,CAAC;EAAEM,aAAa;EAAEC;AAAW,CAAC,KACvCD,aAAa,IAAIC,UAAU,GAAG,CAAC,GAAG,CAAC;AACvC,gBAAgB,CAAC;EAAEV;AAAoB,CAAC,KAAKA,mBAAmB,CAACW,QAAQ;AACzE,CAAC;AAqFD,MAAM;EAAEC;AAAW,CAAC,GAAGzC,wBAAwB;AAC/C,MAAM0C,MAAM,GAAGA,CAGb;EACAC,eAAe;EACfC,YAAY;EACZ/B,YAAY;EACZgC,gBAAgB;EAChBC,kBAAkB,EAAEC,sBAAsB;EAC1CjC,IAAI;EACJkC,iBAAiB;EACjBC,EAAE,EAAEC,UAAU;EACdC,QAAQ;EACRC,UAAU,GAAG,KAAK;EAClBC,WAAW,GAAG,KAAK;EACnBC,aAAa;EACbC,UAAU,GAAG,KAAK;EAClBhB,UAAU,GAAG,KAAK;EAClBxB,KAAK;EACLyC,IAAI,EAAEC,YAAY;EAClBC,MAAM;EACNC,QAAQ,EAAEC,YAAY;EACtBC,OAAO;EACPxC,OAAO;EACPyC,MAAM;EACNC,SAAS;EACTC;AACsC,CAAC,KAAK;EAC5C,MAAMC,SAAS,GAAGxE,MAAM,CAAgD,IAAI,CAAC;EAE7E,MAAMqD,kBAAkB,GAAGtD,OAAO,CAChC,MACEuD,sBAAsB,KAAKmB,SAAS,GAChCZ,aAAa,GACbP,sBAAsB,EAC5B,CAACA,sBAAsB,EAAEO,aAAa,CACxC,CAAC;EAED,MAAMa,kBAAkB,GAAG1E,MAAM,CAC/BS,eAAe,CAAC;IACdkE,eAAe,EAAEJ,KAAK;IACtBK,iBAAiB,EAAEzB;EACrB,CAAC,CACH,CAAC;EACD,MAAM,CAAC0B,sBAAsB,EAAEC,yBAAyB,CAAC,GAAG7E,QAAQ,CAClEyE,kBAAkB,CAACK,OAAO,KAAK/B,UAAU,GAAGuB,KAAK,GAAGpB,YACtD,CAAC;EAED,MAAM6B,aAAa,GAAGhF,MAAM,CAAoB,IAAI,CAAC;EACrD,MAAMoC,mBAAmB,GAAG1B,sBAAsB,CAAC,CAAC;EAEpDR,mBAAmB,CAACwD,QAAQ,EAAE,MAAM;IAClC,OAAO;MACLuB,KAAK,EAAEA,CAAA,KAAM;QACXD,aAAa,CAACD,OAAO,EAAEE,KAAK,CAAC,CAAC;MAChC;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAENnF,SAAS,CAAC,MAAM;IACd,IAAI4E,kBAAkB,CAACK,OAAO,KAAK/B,UAAU,EAAE;MAC7C8B,yBAAyB,CAACP,KAAK,CAAC;IAClC;EACF,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEX,MAAMW,WAAW,GAAG1E,cAAc,CAAC;IACjC2C,YAAY;IACZoB,KAAK;IACLY,YAAY,EAAET,kBAAkB,CAACK;EACnC,CAAC,CAAC;EAEF,MAAMb,QAAQ,GAAGrE,WAAW,CAC1B,CAACuF,KAAK,EAAEC,KAAK,KAAK;IAChB,IAAIvC,UAAU,EAAE;MACdsC,KAAK,CAACE,cAAc,CAAC,CAAC;IACxB,CAAC,MAAM;MACL,MAAM;QACJC,MAAM,EAAE;UAAEhB;QAAM;MAClB,CAAC,GAAGa,KAAK;MACT,IAAIV,kBAAkB,CAACK,OAAO,KAAK/B,UAAU,EAAE;QAC7C8B,yBAAyB,CACtB,OAAOP,KAAK,KAAK,QAAQ,IAAIlB,kBAAkB,GAC5CkB,KAAK,CAACiB,KAAK,CAAC,GAAG,CAAC,GAChBjB,KACN,CAAC;MACH;MACAJ,YAAY,GAAGiB,KAAK,EAAEC,KAAK,CAAC;IAC9B;EACF,CAAC,EACD,CAAChC,kBAAkB,EAAEc,YAAY,EAAErB,UAAU,CAC/C,CAAC;EAGD,MAAM,CAAC2C,iBAAiB,EAAEC,oBAAoB,CAAC,GAAG3F,OAAO,CAAC,MAAM;IAC9D,MAAM0F,iBAAiB,GAAG7D,OAAO,CAAC+D,GAAG,CAAEC,MAAM,IAAK;MAChD,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;QAM9B,MAAMrB,KAAK,GACTqB,MAAM,EAAErB,KAAK,KAAK,EAAE,GAAGqB,MAAM,CAACrB,KAAK,GAAGqB,MAAM,CAACrB,KAAK,IAAIqB,MAAM,CAACC,IAAI;QACnE,OAAO;UACLA,IAAI,EAAED,MAAM,CAACC,IAAI;UACjBtB,KAAK;UACLuB,IAAI,EAAEF,MAAM,CAACE,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,QAAQ;UACtDC,IAAI,EAAEH,MAAM,CAACI;QACf,CAAC;MACH;MAEA,OAAO;QAAEH,IAAI,EAAED,MAAM;QAAErB,KAAK,EAAEqB,MAAM;QAAEE,IAAI,EAAE;MAAS,CAAC;IACxD,CAAC,CAAC;IAEF,MAAMJ,oBAAoB,GAAG,IAAIO,GAAG,CAClCR,iBAAiB,CAACE,GAAG,CAAEC,MAAM,IAAK,CAACA,MAAM,CAACrB,KAAK,EAAEqB,MAAM,CAAC,CAC1D,CAAC;IACD,OAAO,CAACH,iBAAiB,EAAEC,oBAAoB,CAAC;EAClD,CAAC,EAAE,CAAC9D,OAAO,CAAC,CAAC;EAEb,MAAMsE,mBAAmB,GAAGrG,WAAW,CACpCsG,aAAqB,IAAK;IACzB,IAAIC,KAAK,CAACC,OAAO,CAACxB,sBAAsB,CAAC,EAAE;MACzC,MAAMyB,QAAQ,GAAGzB,sBAAsB,CAAC0B,MAAM,CAC3CC,qBAAqB,IAAKA,qBAAqB,KAAKL,aACvD,CAAC;MAED,MAAMM,cAAc,GAAG;QACrBlB,MAAM,EAAE;UAAEhB,KAAK,EAAE+B;QAAS;MAC5B,CAA6B;MAE7BpC,QAAQ,CAACuC,cAAc,EAAE,IAAI,CAAC;IAChC;EACF,CAAC,EACD,CAAC5B,sBAAsB,EAAEX,QAAQ,CACnC,CAAC;EAED,MAAMwC,KAAK,GAAG7G,WAAW,CACvB,CAAC;IACCgD,aAAa;IACbC;EAIF,CAAC,KAAK;IACJ,MAAM6D,eAAe,GAAIvB,KAAsC,IAC7DA,KAAK,CAACuB,eAAe,CAAC,CAAC;IAEzB,MAAMC,qBAAqB,GACzB,CAAC/D,aAAa,IACd,CAACC,UAAU,IACX4B,kBAAkB,CAACK,OAAO,KAAK/B,UAAU,IACzCK,kBAAkB;IAEpB,OACE+C,KAAK,CAACC,OAAO,CAACxB,sBAAsB,CAAC,IACnChE,IAAA,CAAC8B,mBAAmB;MAClBE,aAAa,EAAEA,aAAc;MAC7BC,UAAU,EAAEA,UAAW;MACvBV,mBAAmB,EAAEA,mBAAoB;MAAAb,QAAA,EAExCsD,sBAAsB,CAACc,GAAG,CACxBkB,IAAI,IACHA,IAAI,EAAEC,MAAM,GAAG,CAAC,IACdjG,IAAA,CAAAkG,KAAA;QAEEzF,KAAK,EACHL,KAAA,CAAAF,SAAA;UAAAQ,QAAA,GACGmE,oBAAoB,CAACsB,GAAG,CAACH,IAAI,CAAC,EAAEhB,IAAI,EACpCe,qBAAqB,IACpB/F,IAAA,CAAC4B,kBAAkB;YACjBL,mBAAmB,EAAEA;UAAoB,CAC1C,CACF;QAAA,CACD,CACH;QACD6E,QAAQ,EAAE,CAAC,CAAE;QACbC,QAAQ,EACNrE,aAAa,IAAI6B,kBAAkB,CAACK,OAAO,KAAK/B,UAAU,GACtD,MAAMkD,mBAAmB,CAACW,IAAI,CAAC,GAC/BpC,SACL;QACD0C,UAAU,EACRtG,IAAA,CAACP,qBAAqB;UACpB8G,EAAE,EAAE;YAAEC,aAAa,EAAE;UAAO,CAAE;UAI9BC,WAAW,EAAEX;QAAgB,CAC9B;MACF,GAzBIE,IA0BN,CAEP;IAAC,CACkB,CACtB;EAEL,CAAC,EACD,CACEnC,kBAAkB,EAClBrB,kBAAkB,EAClBwB,sBAAsB,EACtBzC,mBAAmB,EACnB8D,mBAAmB,EACnBR,oBAAoB,CAExB,CAAC;EAID,MAAM6B,eAAe,GAAGxH,OAAO,CAC7B,MACE0F,iBAAiB,CAACE,GAAG,CAAC,CAACC,MAAM,EAAE4B,KAAK,KAAK;IACvC,IAAI5B,MAAM,CAACE,IAAI,KAAK,SAAS,EAAE;MAC7B,OACE7E,KAAA,CAAAwG,cAAA;QAAAlG,QAAA,GAAiC,GAAC,EAACqE,MAAM,CAACC,IAAI,EAAC,GAAC;MAAA,GAA5BD,MAAM,CAACC,IAAoC,CAAC;IAEpE;IAEA,MAAM6B,UAAU,GAAGrE,kBAAkB,GACjCwB,sBAAsB,EAAE8C,QAAQ,CAAC/B,MAAM,CAACrB,KAAK,CAAC,GAC9CM,sBAAsB,KAAKe,MAAM,CAACrB,KAAK;IAE3C,OACEtD,KAAA,CAAA2G,SAAA;MACE,cAAY,CAAChC,MAAM,CAACC,IAAK;MAEzBtB,KAAK,EAAEqB,MAAM,CAACrB,KAAM;MACpBsD,QAAQ,EAAEH,UAAW;MACrB3B,IAAI,EAAEH,MAAM,CAACG,IAAK;MAAAxE,QAAA,GAEjB8B,kBAAkB,IAAIxC,IAAA,CAAAiH,SAAA;QAAaC,OAAO,EAAEL;MAAW,CAAE,CAAC,EAC1D9B,MAAM,CAACC,IAAI,EACX,CAACxC,kBAAkB,IAAIwB,sBAAsB,KAAKe,MAAM,CAACrB,KAAK,IAC7D1D,IAAA,CAAAmH,wBAAA;QAAAzG,QAAA,EACEV,IAAA,CAACR,SAAS,IAAE;MAAC,CACU,CAC1B;IAAA,GAXIM,aAAa,CAACiF,MAAM,CAACC,IAAI,EAAE2B,KAAK,CAACS,QAAQ,CAAC,CAAC,CAYrC,CAAC;EAElB,CAAC,CAAC,EACJ,CAAC5E,kBAAkB,EAAEoC,iBAAiB,EAAEZ,sBAAsB,CAChE,CAAC;EAED,MAAMqD,WAAW,GAAGrI,WAAW,CAC5B0E,KAAY,IAAK6B,KAAK,CAACC,OAAO,CAAC9B,KAAK,CAAC,IAAI1D,IAAA,CAAC6F,KAAK;IAAC7D,aAAa,EAAE;EAAM,CAAE,CAAC,EACzE,CAAC6D,KAAK,CACR,CAAC;EAED,MAAMyB,oBAAoB,GAAGtI,WAAW,CACtC,CAAC;IACCqD,eAAe;IACfkF,qBAAqB;IACrB5E,EAAE;IACF6E;EACiB,CAAC,KAClBpH,KAAA,CAACc,eAAe;IAAAR,QAAA,GACdV,IAAA,CAAAyH,OAAA;MAAA,GACMpD,WAAW;MACf,oBAAkBhC,eAAgB;MAClC,qBAAmBkF,qBAAsB;MACzCG,YAAY;MACZ/E,EAAE,EAAEA,EAAG;MACPgF,UAAU,EAAE;QACV,SAAS,EAAEnE,MAAM;QACjB,eAAe,EAAEV,UAAU,IAAIb,UAAU;QACzC2F,QAAQ,EAAE3F;MACZ,CAAE;MACFY,QAAQ,EAAGgF,EAAiD,IAAK;QAC/D,IAAI1D,aAAa,CAACD,OAAO,KAAK2D,EAAE,EAAE;UAC/B1D,aAAa,CAAuCD,OAAO,GAAG2D,EAAE;QACnE;QACAlE,SAAS,CAACO,OAAO,GAAG2D,EAAE;MACxB,CAAE;MACFC,OAAO,EAAEN,cAAe;MACxBO,SAAS,EAAE;QACTxB,EAAE,EAAE;UACF,gBAAgB,EAAE;YAChByB,SAAS,EAAE;UACb;QACF;MACF,CAAE;MACFC,QAAQ,EAAEzF,kBAAmB;MAC7BU,IAAI,EAAEC,YAAY,IAAIR,EAAG;MACzBS,MAAM,EAAEA,MAAO;MACfC,QAAQ,EAAEA,QAAS;MACnBE,OAAO,EAAEA,OAAQ;MACjB8D,WAAW,EAAE7E,kBAAkB,GAAG6E,WAAW,GAAGzD,SAAU;MAC1DH,SAAS,EAAEA,SAAU;MAAA/C,QAAA,EAEpBgG;IAAe,CACP,CAAC,EACXlE,kBAAkB,IACjBxC,IAAA,CAAAE,SAAA;MAAAQ,QAAA,EACEV,IAAA,CAACoB,yBAAyB;QACxBG,mBAAmB,EAAEA,mBAAoB;QAAAb,QAAA,EAEzCV,IAAA,CAAC6F,KAAK;UAAC7D,aAAa,EAAE,CAACC,UAAW;UAACA,UAAU,EAAEA;QAAW,CAAE;MAAC,CACpC;IAAC,CAC5B,CACH;EAAA,CACc,CAClB,EACD,CACE4D,KAAK,EACLxB,WAAW,EACX7B,kBAAkB,EAClBM,UAAU,EACVb,UAAU,EACVkB,YAAY,EACZ5B,mBAAmB,EACnB6B,MAAM,EACNC,QAAQ,EACRE,OAAO,EACPmD,eAAe,EACfW,WAAW,EACX7D,MAAM,EACNC,SAAS,CAEb,CAAC;EAED,OACEzD,IAAA,CAACT,KAAK;IACJ8C,eAAe,EAAEA,eAAgB;IACjC9B,YAAY,EAAEA,YAAa;IAC3BgC,gBAAgB,EAAEA,gBAAiB;IACnC2F,SAAS,EAAC,QAAQ;IAClBC,eAAe;IACf3H,IAAI,EAAEA,IAAK;IACXkC,iBAAiB,EAAEA,iBAAkB;IACrCC,EAAE,EAAEC,UAAW;IACfE,UAAU,EAAEA,UAAW;IACvBC,WAAW,EAAEA,WAAY;IACzBE,UAAU,EAAEA,UAAW;IACvBxC,KAAK,EAAEA,KAAM;IACb6G,oBAAoB,EAAEA;EAAqB,CAC5C,CAAC;AAEN,CAAC;AAED,MAAMc,cAAc,GAAGrJ,IAAI,CAACqD,MAAM,CAAC;AACnCgG,cAAc,CAACC,WAAW,GAAG,QAAQ;AAErC,SAASD,cAAc,IAAIhG,MAAM","ignoreList":[]}
package/dist/esm/Tag.js CHANGED
@@ -17,6 +17,7 @@ import { MuiPropsContext } from "./MuiPropsContext.js";
17
17
  import { useOdysseyDesignTokens } from "./OdysseyDesignTokensContext.js";
18
18
  import { TagListContext } from "./TagListContext.js";
19
19
  import { useContrastModeContext } from "./useContrastMode.js";
20
+ import { useTranslation } from "react-i18next";
20
21
  import { jsx as _jsx } from "react/jsx-runtime";
21
22
  export const tagSizeValues = ["medium", "small"];
22
23
  export const tagColorVariants = ["accentFour", "accentOne", "accentThree", "accentTwo", "default", "info"];
@@ -204,6 +205,9 @@ const Tag = ({
204
205
  testId,
205
206
  translate
206
207
  }) => {
208
+ const {
209
+ t
210
+ } = useTranslation();
207
211
  const odysseyDesignTokens = useOdysseyDesignTokens();
208
212
  const {
209
213
  chipElementType
@@ -219,7 +223,10 @@ const Tag = ({
219
223
  colorVariant: colorVariant,
220
224
  contrastMode: contrastMode,
221
225
  "data-se": testId,
222
- deleteIcon: _jsx(CloseCircleFilledIcon, {}),
226
+ deleteIcon: _jsx(CloseCircleFilledIcon, {
227
+ role: "button",
228
+ titleAccess: t("tag.remove")
229
+ }),
223
230
  disabled: isDisabled,
224
231
  icon: icon,
225
232
  label: label,
@@ -228,7 +235,7 @@ const Tag = ({
228
235
  onDelete: onRemove,
229
236
  size: size,
230
237
  translate: translate
231
- }), [chipElementType, colorVariant, contrastMode, icon, isDisabled, label, odysseyDesignTokens, onClick, onRemove, size, testId, translate]);
238
+ }), [t, chipElementType, colorVariant, contrastMode, icon, isDisabled, label, odysseyDesignTokens, onClick, onRemove, size, testId, translate]);
232
239
  return _jsx(MuiPropsContext.Consumer, {
233
240
  children: renderTag
234
241
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Tag.js","names":["memo","useCallback","useContext","styled","CloseCircleFilledIcon","MuiPropsContext","useOdysseyDesignTokens","TagListContext","useContrastModeContext","jsx","_jsx","tagSizeValues","tagColorVariants","getChipColors","colorVariant","contrastMode","odysseyDesignTokens","colors","default","background","HueNeutral200","text","HueNeutral700","textDisabled","HueNeutral400","HueNeutral100","HueNeutral300","hover","active","border","deleteIcon","HueNeutral500","deleteIconHover","icon","iconDisabled","info","HueBlue200","HueBlue700","HueBlue400","HueBlue100","HueBlue300","HueBlue500","accentOne","HueAccentOne200","HueAccentOne700","HueAccentOne400","HueAccentOne100","HueAccentOne300","HueAccentOne500","accentTwo","HueAccentTwo200","HueAccentTwo800","HueAccentTwo400","HueAccentTwo100","HueAccentTwo700","HueAccentTwo300","HueAccentTwo500","accentThree","HueAccentThree200","HueAccentThree700","HueAccentThree400","HueAccentThree100","HueAccentThree300","HueAccentThree500","accentFour","HueAccentFour200","HueAccentFour700","HueAccentFour400","HueAccentFour100","HueAccentFour300","HueAccentFour500","StyledTag","_Chip","shouldForwardProp","prop","includes","clickable","size","backgroundColor","color","borderColor","paddingBlock","Spacing1","Tag","isDisabled","label","onClick","onRemove","testId","translate","chipElementType","renderTag","muiProps","as","Boolean","disabled","onDelete","Consumer","children","MemoizedTag","displayName"],"sources":["../../src/Tag.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 { Chip as MuiChip, ChipProps as MuiChipProps } from \"@mui/material\";\nimport { memo, ReactElement, useCallback, useContext } from \"react\";\nimport styled from \"@emotion/styled\";\n\nimport { CloseCircleFilledIcon } from \"./icons.generated/index.js\";\nimport { HtmlProps } from \"./HtmlProps.js\";\nimport { MuiPropsContext, MuiPropsContextType } from \"./MuiPropsContext.js\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"./OdysseyDesignTokensContext.js\";\nimport { TagListContext } from \"./TagListContext.js\";\nimport { ContrastMode, useContrastModeContext } from \"./useContrastMode.js\";\n\nexport const tagSizeValues = [\"medium\", \"small\"] as const;\n\nexport const tagColorVariants = [\n \"accentFour\",\n \"accentOne\",\n \"accentThree\",\n \"accentTwo\",\n \"default\",\n \"info\",\n] as const;\n\ntype TagColorVariant = (typeof tagColorVariants)[number];\ntype TagSize = (typeof tagSizeValues)[number];\n\nexport type TagProps = {\n icon?: ReactElement;\n isDisabled?: boolean;\n /**\n * The label text for the Tag\n */\n label: string;\n /**\n * Callback fired when the Tag is clicked\n */\n onClick?: MuiChipProps[\"onClick\"];\n /**\n * Callback fired when the remove button of the Tag is clicked\n */\n onRemove?: MuiChipProps[\"onDelete\"];\n /**\n * Color variant of the Tag, affecting its appearance\n */\n colorVariant?: TagColorVariant;\n /*\n * Size variant of the Tag\n */\n size?: TagSize;\n} & Pick<HtmlProps, \"testId\" | \"translate\">;\n\nconst getChipColors = ({\n colorVariant,\n contrastMode,\n odysseyDesignTokens,\n}: {\n colorVariant: TagColorVariant;\n contrastMode: ContrastMode;\n odysseyDesignTokens: DesignTokens;\n}) => {\n const colors = {\n default: {\n ...(contrastMode === \"highContrast\" && {\n background: odysseyDesignTokens.HueNeutral200,\n text: odysseyDesignTokens.HueNeutral700,\n textDisabled: odysseyDesignTokens.HueNeutral400,\n }),\n ...(contrastMode === \"lowContrast\" && {\n background: odysseyDesignTokens.HueNeutral100,\n text: odysseyDesignTokens.HueNeutral700,\n textDisabled: odysseyDesignTokens.HueNeutral300,\n }),\n hover: odysseyDesignTokens.HueNeutral200,\n active: odysseyDesignTokens.HueNeutral300,\n border: odysseyDesignTokens.HueNeutral200,\n deleteIcon: odysseyDesignTokens.HueNeutral500,\n deleteIconHover: odysseyDesignTokens.HueNeutral700,\n icon: odysseyDesignTokens.HueNeutral700,\n iconDisabled: odysseyDesignTokens.HueNeutral300,\n },\n info: {\n ...(contrastMode === \"highContrast\" && {\n background: odysseyDesignTokens.HueBlue200,\n text: odysseyDesignTokens.HueBlue700,\n textDisabled: odysseyDesignTokens.HueBlue400,\n }),\n ...(contrastMode === \"lowContrast\" && {\n background: odysseyDesignTokens.HueBlue100,\n text: odysseyDesignTokens.HueBlue700,\n textDisabled: odysseyDesignTokens.HueBlue300,\n }),\n hover: odysseyDesignTokens.HueBlue200,\n active: odysseyDesignTokens.HueBlue300,\n border: odysseyDesignTokens.HueBlue200,\n deleteIcon: odysseyDesignTokens.HueBlue500,\n deleteIconHover: odysseyDesignTokens.HueBlue700,\n icon: odysseyDesignTokens.HueBlue700,\n iconDisabled: odysseyDesignTokens.HueBlue300,\n },\n accentOne: {\n ...(contrastMode === \"highContrast\" && {\n background: odysseyDesignTokens.HueAccentOne200,\n text: odysseyDesignTokens.HueAccentOne700,\n textDisabled: odysseyDesignTokens.HueAccentOne400,\n }),\n ...(contrastMode === \"lowContrast\" && {\n background: odysseyDesignTokens.HueAccentOne100,\n text: odysseyDesignTokens.HueAccentOne700,\n textDisabled: odysseyDesignTokens.HueAccentOne300,\n }),\n hover: odysseyDesignTokens.HueAccentOne200,\n active: odysseyDesignTokens.HueAccentOne300,\n border: odysseyDesignTokens.HueAccentOne200,\n deleteIcon: odysseyDesignTokens.HueAccentOne500,\n deleteIconHover: odysseyDesignTokens.HueAccentOne700,\n icon: odysseyDesignTokens.HueAccentOne700,\n iconDisabled: odysseyDesignTokens.HueAccentOne300,\n },\n accentTwo: {\n ...(contrastMode === \"highContrast\" && {\n background: odysseyDesignTokens.HueAccentTwo200,\n text: odysseyDesignTokens.HueAccentTwo800,\n textDisabled: odysseyDesignTokens.HueAccentTwo400,\n }),\n ...(contrastMode === \"lowContrast\" && {\n background: odysseyDesignTokens.HueAccentTwo100,\n text: odysseyDesignTokens.HueAccentTwo700,\n textDisabled: odysseyDesignTokens.HueAccentTwo300,\n }),\n hover: odysseyDesignTokens.HueAccentTwo200,\n active: odysseyDesignTokens.HueAccentTwo300,\n border: odysseyDesignTokens.HueAccentTwo200,\n deleteIcon: odysseyDesignTokens.HueAccentTwo500,\n deleteIconHover: odysseyDesignTokens.HueAccentTwo700,\n icon: odysseyDesignTokens.HueAccentTwo700,\n iconDisabled: odysseyDesignTokens.HueAccentTwo300,\n },\n accentThree: {\n ...(contrastMode === \"highContrast\" && {\n background: odysseyDesignTokens.HueAccentThree200,\n text: odysseyDesignTokens.HueAccentThree700,\n textDisabled: odysseyDesignTokens.HueAccentThree400,\n }),\n ...(contrastMode === \"lowContrast\" && {\n background: odysseyDesignTokens.HueAccentThree100,\n text: odysseyDesignTokens.HueAccentThree700,\n textDisabled: odysseyDesignTokens.HueAccentThree300,\n }),\n hover: odysseyDesignTokens.HueAccentThree200,\n active: odysseyDesignTokens.HueAccentThree300,\n border: odysseyDesignTokens.HueAccentThree200,\n deleteIcon: odysseyDesignTokens.HueAccentThree500,\n deleteIconHover: odysseyDesignTokens.HueAccentThree700,\n icon: odysseyDesignTokens.HueAccentThree700,\n iconDisabled: odysseyDesignTokens.HueAccentThree300,\n },\n accentFour: {\n ...(contrastMode === \"highContrast\" && {\n background: odysseyDesignTokens.HueAccentFour200,\n text: odysseyDesignTokens.HueAccentFour700,\n textDisabled: odysseyDesignTokens.HueAccentFour400,\n }),\n ...(contrastMode === \"lowContrast\" && {\n background: odysseyDesignTokens.HueAccentFour100,\n text: odysseyDesignTokens.HueAccentFour700,\n textDisabled: odysseyDesignTokens.HueAccentFour300,\n }),\n hover: odysseyDesignTokens.HueAccentFour200,\n active: odysseyDesignTokens.HueAccentFour300,\n border: odysseyDesignTokens.HueAccentFour200,\n deleteIcon: odysseyDesignTokens.HueAccentFour500,\n deleteIconHover: odysseyDesignTokens.HueAccentFour700,\n icon: odysseyDesignTokens.HueAccentFour700,\n iconDisabled: odysseyDesignTokens.HueAccentFour300,\n },\n };\n\n return colors[colorVariant] || colors.default;\n};\n\nconst StyledTag = styled(MuiChip, {\n shouldForwardProp: (prop) =>\n ![\"colorVariant\", \"contrastMode\", \"odysseyDesignTokens\", \"size\"].includes(\n prop,\n ),\n})<{\n as?: React.ElementType; // Allow the 'as' prop to be forwarded\n clickable?: boolean;\n colorVariant: TagColorVariant;\n contrastMode: ContrastMode;\n odysseyDesignTokens: DesignTokens;\n size?: TagSize;\n}>(({ colorVariant, contrastMode, odysseyDesignTokens, clickable, size }) => {\n const colors = getChipColors({\n colorVariant,\n odysseyDesignTokens,\n contrastMode,\n });\n\n return {\n backgroundColor: colors.background,\n color: colors.text,\n\n ...(clickable === true && {\n borderColor: colors.border,\n }),\n\n ...(clickable === false && {\n borderColor: \"transparent\",\n }),\n\n ...(size === \"small\" && {\n paddingBlock: `calc(${odysseyDesignTokens.Spacing1})`,\n }),\n\n \"&.MuiChip-clickable:hover\": {\n backgroundColor: colors.hover,\n },\n\n \"&.MuiChip-clickable:active\": {\n backgroundColor: colors.active,\n },\n\n \"&.Mui-disabled\": {\n color: colors.textDisabled,\n borderColor: colors.border,\n \"& .MuiChip-icon, & .MuiChip-deleteIcon\": {\n color: colors.iconDisabled,\n },\n },\n\n \"& .MuiChip-icon\": {\n color: colors.icon,\n },\n\n \"& .MuiChip-deleteIcon\": {\n color: colors.deleteIcon,\n \"&:hover\": {\n color: colors.deleteIconHover,\n },\n },\n };\n});\n\nconst Tag = ({\n colorVariant = \"default\",\n icon,\n isDisabled,\n label,\n onClick,\n onRemove,\n size = \"medium\",\n testId,\n translate,\n}: TagProps) => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n const { chipElementType } = useContext(TagListContext);\n const { contrastMode } = useContrastModeContext();\n\n const renderTag = useCallback(\n (muiProps: MuiPropsContextType) => (\n <StyledTag\n {...muiProps}\n aria-disabled={isDisabled}\n as={chipElementType}\n clickable={Boolean(onClick)}\n colorVariant={colorVariant}\n contrastMode={contrastMode}\n data-se={testId}\n deleteIcon={<CloseCircleFilledIcon />}\n disabled={isDisabled}\n icon={icon}\n label={label}\n odysseyDesignTokens={odysseyDesignTokens}\n onClick={onClick}\n onDelete={onRemove}\n size={size}\n translate={translate}\n />\n ),\n [\n chipElementType,\n colorVariant,\n contrastMode,\n icon,\n isDisabled,\n label,\n odysseyDesignTokens,\n onClick,\n onRemove,\n size,\n testId,\n translate,\n ],\n );\n\n return <MuiPropsContext.Consumer>{renderTag}</MuiPropsContext.Consumer>;\n};\n\nconst MemoizedTag = memo(Tag);\nMemoizedTag.displayName = \"Tag\";\n\nexport { MemoizedTag as Tag };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Tag.js","names":["memo","useCallback","useContext","styled","CloseCircleFilledIcon","MuiPropsContext","useOdysseyDesignTokens","TagListContext","useContrastModeContext","useTranslation","jsx","_jsx","tagSizeValues","tagColorVariants","getChipColors","colorVariant","contrastMode","odysseyDesignTokens","colors","default","background","HueNeutral200","text","HueNeutral700","textDisabled","HueNeutral400","HueNeutral100","HueNeutral300","hover","active","border","deleteIcon","HueNeutral500","deleteIconHover","icon","iconDisabled","info","HueBlue200","HueBlue700","HueBlue400","HueBlue100","HueBlue300","HueBlue500","accentOne","HueAccentOne200","HueAccentOne700","HueAccentOne400","HueAccentOne100","HueAccentOne300","HueAccentOne500","accentTwo","HueAccentTwo200","HueAccentTwo800","HueAccentTwo400","HueAccentTwo100","HueAccentTwo700","HueAccentTwo300","HueAccentTwo500","accentThree","HueAccentThree200","HueAccentThree700","HueAccentThree400","HueAccentThree100","HueAccentThree300","HueAccentThree500","accentFour","HueAccentFour200","HueAccentFour700","HueAccentFour400","HueAccentFour100","HueAccentFour300","HueAccentFour500","StyledTag","_Chip","shouldForwardProp","prop","includes","clickable","size","backgroundColor","color","borderColor","paddingBlock","Spacing1","Tag","isDisabled","label","onClick","onRemove","testId","translate","t","chipElementType","renderTag","muiProps","as","Boolean","role","titleAccess","disabled","onDelete","Consumer","children","MemoizedTag","displayName"],"sources":["../../src/Tag.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 { Chip as MuiChip, ChipProps as MuiChipProps } from \"@mui/material\";\nimport { memo, ReactElement, useCallback, useContext } from \"react\";\nimport styled from \"@emotion/styled\";\n\nimport { CloseCircleFilledIcon } from \"./icons.generated/index.js\";\nimport { HtmlProps } from \"./HtmlProps.js\";\nimport { MuiPropsContext, MuiPropsContextType } from \"./MuiPropsContext.js\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"./OdysseyDesignTokensContext.js\";\nimport { TagListContext } from \"./TagListContext.js\";\nimport { ContrastMode, useContrastModeContext } from \"./useContrastMode.js\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const tagSizeValues = [\"medium\", \"small\"] as const;\n\nexport const tagColorVariants = [\n \"accentFour\",\n \"accentOne\",\n \"accentThree\",\n \"accentTwo\",\n \"default\",\n \"info\",\n] as const;\n\ntype TagColorVariant = (typeof tagColorVariants)[number];\ntype TagSize = (typeof tagSizeValues)[number];\n\nexport type TagProps = {\n icon?: ReactElement;\n isDisabled?: boolean;\n /**\n * The label text for the Tag\n */\n label: string;\n /**\n * Callback fired when the Tag is clicked\n */\n onClick?: MuiChipProps[\"onClick\"];\n /**\n * Callback fired when the remove button of the Tag is clicked\n */\n onRemove?: MuiChipProps[\"onDelete\"];\n /**\n * Color variant of the Tag, affecting its appearance\n */\n colorVariant?: TagColorVariant;\n /*\n * Size variant of the Tag\n */\n size?: TagSize;\n} & Pick<HtmlProps, \"testId\" | \"translate\">;\n\nconst getChipColors = ({\n colorVariant,\n contrastMode,\n odysseyDesignTokens,\n}: {\n colorVariant: TagColorVariant;\n contrastMode: ContrastMode;\n odysseyDesignTokens: DesignTokens;\n}) => {\n const colors = {\n default: {\n ...(contrastMode === \"highContrast\" && {\n background: odysseyDesignTokens.HueNeutral200,\n text: odysseyDesignTokens.HueNeutral700,\n textDisabled: odysseyDesignTokens.HueNeutral400,\n }),\n ...(contrastMode === \"lowContrast\" && {\n background: odysseyDesignTokens.HueNeutral100,\n text: odysseyDesignTokens.HueNeutral700,\n textDisabled: odysseyDesignTokens.HueNeutral300,\n }),\n hover: odysseyDesignTokens.HueNeutral200,\n active: odysseyDesignTokens.HueNeutral300,\n border: odysseyDesignTokens.HueNeutral200,\n deleteIcon: odysseyDesignTokens.HueNeutral500,\n deleteIconHover: odysseyDesignTokens.HueNeutral700,\n icon: odysseyDesignTokens.HueNeutral700,\n iconDisabled: odysseyDesignTokens.HueNeutral300,\n },\n info: {\n ...(contrastMode === \"highContrast\" && {\n background: odysseyDesignTokens.HueBlue200,\n text: odysseyDesignTokens.HueBlue700,\n textDisabled: odysseyDesignTokens.HueBlue400,\n }),\n ...(contrastMode === \"lowContrast\" && {\n background: odysseyDesignTokens.HueBlue100,\n text: odysseyDesignTokens.HueBlue700,\n textDisabled: odysseyDesignTokens.HueBlue300,\n }),\n hover: odysseyDesignTokens.HueBlue200,\n active: odysseyDesignTokens.HueBlue300,\n border: odysseyDesignTokens.HueBlue200,\n deleteIcon: odysseyDesignTokens.HueBlue500,\n deleteIconHover: odysseyDesignTokens.HueBlue700,\n icon: odysseyDesignTokens.HueBlue700,\n iconDisabled: odysseyDesignTokens.HueBlue300,\n },\n accentOne: {\n ...(contrastMode === \"highContrast\" && {\n background: odysseyDesignTokens.HueAccentOne200,\n text: odysseyDesignTokens.HueAccentOne700,\n textDisabled: odysseyDesignTokens.HueAccentOne400,\n }),\n ...(contrastMode === \"lowContrast\" && {\n background: odysseyDesignTokens.HueAccentOne100,\n text: odysseyDesignTokens.HueAccentOne700,\n textDisabled: odysseyDesignTokens.HueAccentOne300,\n }),\n hover: odysseyDesignTokens.HueAccentOne200,\n active: odysseyDesignTokens.HueAccentOne300,\n border: odysseyDesignTokens.HueAccentOne200,\n deleteIcon: odysseyDesignTokens.HueAccentOne500,\n deleteIconHover: odysseyDesignTokens.HueAccentOne700,\n icon: odysseyDesignTokens.HueAccentOne700,\n iconDisabled: odysseyDesignTokens.HueAccentOne300,\n },\n accentTwo: {\n ...(contrastMode === \"highContrast\" && {\n background: odysseyDesignTokens.HueAccentTwo200,\n text: odysseyDesignTokens.HueAccentTwo800,\n textDisabled: odysseyDesignTokens.HueAccentTwo400,\n }),\n ...(contrastMode === \"lowContrast\" && {\n background: odysseyDesignTokens.HueAccentTwo100,\n text: odysseyDesignTokens.HueAccentTwo700,\n textDisabled: odysseyDesignTokens.HueAccentTwo300,\n }),\n hover: odysseyDesignTokens.HueAccentTwo200,\n active: odysseyDesignTokens.HueAccentTwo300,\n border: odysseyDesignTokens.HueAccentTwo200,\n deleteIcon: odysseyDesignTokens.HueAccentTwo500,\n deleteIconHover: odysseyDesignTokens.HueAccentTwo700,\n icon: odysseyDesignTokens.HueAccentTwo700,\n iconDisabled: odysseyDesignTokens.HueAccentTwo300,\n },\n accentThree: {\n ...(contrastMode === \"highContrast\" && {\n background: odysseyDesignTokens.HueAccentThree200,\n text: odysseyDesignTokens.HueAccentThree700,\n textDisabled: odysseyDesignTokens.HueAccentThree400,\n }),\n ...(contrastMode === \"lowContrast\" && {\n background: odysseyDesignTokens.HueAccentThree100,\n text: odysseyDesignTokens.HueAccentThree700,\n textDisabled: odysseyDesignTokens.HueAccentThree300,\n }),\n hover: odysseyDesignTokens.HueAccentThree200,\n active: odysseyDesignTokens.HueAccentThree300,\n border: odysseyDesignTokens.HueAccentThree200,\n deleteIcon: odysseyDesignTokens.HueAccentThree500,\n deleteIconHover: odysseyDesignTokens.HueAccentThree700,\n icon: odysseyDesignTokens.HueAccentThree700,\n iconDisabled: odysseyDesignTokens.HueAccentThree300,\n },\n accentFour: {\n ...(contrastMode === \"highContrast\" && {\n background: odysseyDesignTokens.HueAccentFour200,\n text: odysseyDesignTokens.HueAccentFour700,\n textDisabled: odysseyDesignTokens.HueAccentFour400,\n }),\n ...(contrastMode === \"lowContrast\" && {\n background: odysseyDesignTokens.HueAccentFour100,\n text: odysseyDesignTokens.HueAccentFour700,\n textDisabled: odysseyDesignTokens.HueAccentFour300,\n }),\n hover: odysseyDesignTokens.HueAccentFour200,\n active: odysseyDesignTokens.HueAccentFour300,\n border: odysseyDesignTokens.HueAccentFour200,\n deleteIcon: odysseyDesignTokens.HueAccentFour500,\n deleteIconHover: odysseyDesignTokens.HueAccentFour700,\n icon: odysseyDesignTokens.HueAccentFour700,\n iconDisabled: odysseyDesignTokens.HueAccentFour300,\n },\n };\n\n return colors[colorVariant] || colors.default;\n};\n\nconst StyledTag = styled(MuiChip, {\n shouldForwardProp: (prop) =>\n ![\"colorVariant\", \"contrastMode\", \"odysseyDesignTokens\", \"size\"].includes(\n prop,\n ),\n})<{\n as?: React.ElementType; // Allow the 'as' prop to be forwarded\n clickable?: boolean;\n colorVariant: TagColorVariant;\n contrastMode: ContrastMode;\n odysseyDesignTokens: DesignTokens;\n size?: TagSize;\n}>(({ colorVariant, contrastMode, odysseyDesignTokens, clickable, size }) => {\n const colors = getChipColors({\n colorVariant,\n odysseyDesignTokens,\n contrastMode,\n });\n\n return {\n backgroundColor: colors.background,\n color: colors.text,\n\n ...(clickable === true && {\n borderColor: colors.border,\n }),\n\n ...(clickable === false && {\n borderColor: \"transparent\",\n }),\n\n ...(size === \"small\" && {\n paddingBlock: `calc(${odysseyDesignTokens.Spacing1})`,\n }),\n\n \"&.MuiChip-clickable:hover\": {\n backgroundColor: colors.hover,\n },\n\n \"&.MuiChip-clickable:active\": {\n backgroundColor: colors.active,\n },\n\n \"&.Mui-disabled\": {\n color: colors.textDisabled,\n borderColor: colors.border,\n \"& .MuiChip-icon, & .MuiChip-deleteIcon\": {\n color: colors.iconDisabled,\n },\n },\n\n \"& .MuiChip-icon\": {\n color: colors.icon,\n },\n\n \"& .MuiChip-deleteIcon\": {\n color: colors.deleteIcon,\n \"&:hover\": {\n color: colors.deleteIconHover,\n },\n },\n };\n});\n\nconst Tag = ({\n colorVariant = \"default\",\n icon,\n isDisabled,\n label,\n onClick,\n onRemove,\n size = \"medium\",\n testId,\n translate,\n}: TagProps) => {\n const { t } = useTranslation();\n const odysseyDesignTokens = useOdysseyDesignTokens();\n const { chipElementType } = useContext(TagListContext);\n const { contrastMode } = useContrastModeContext();\n\n const renderTag = useCallback(\n (muiProps: MuiPropsContextType) => (\n <StyledTag\n {...muiProps}\n aria-disabled={isDisabled}\n as={chipElementType}\n clickable={Boolean(onClick)}\n colorVariant={colorVariant}\n contrastMode={contrastMode}\n data-se={testId}\n deleteIcon={\n <CloseCircleFilledIcon role=\"button\" titleAccess={t(\"tag.remove\")} />\n }\n disabled={isDisabled}\n icon={icon}\n label={label}\n odysseyDesignTokens={odysseyDesignTokens}\n onClick={onClick}\n onDelete={onRemove}\n size={size}\n translate={translate}\n />\n ),\n [\n t,\n chipElementType,\n colorVariant,\n contrastMode,\n icon,\n isDisabled,\n label,\n odysseyDesignTokens,\n onClick,\n onRemove,\n size,\n testId,\n translate,\n ],\n );\n\n return <MuiPropsContext.Consumer>{renderTag}</MuiPropsContext.Consumer>;\n};\n\nconst MemoizedTag = memo(Tag);\nMemoizedTag.displayName = \"Tag\";\n\nexport { MemoizedTag as Tag };\n"],"mappings":"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","ignoreList":[]}
@@ -16,7 +16,11 @@ const LUMINANCE_EDGE_MIN = 108;
16
16
  const LUMINANCE_EDGE_MAX = 142;
17
17
  const BLACK_FONT_COLOR = "#000000";
18
18
  const WHITE_FONT_COLOR = "#FFFFFF";
19
- export const generateContrastColors = (backgroundColor, odysseyDesignTokens) => {
19
+ export const generateContrastColors = ({
20
+ backgroundColor,
21
+ backgroundContrastColor,
22
+ odysseyDesignTokens
23
+ }) => {
20
24
  const rgbFromHex = isValidHexString(backgroundColor) ? hexToRgb(backgroundColor) : hexToRgb(odysseyDesignTokens.HueNeutralWhite);
21
25
  const {
22
26
  red,
@@ -26,7 +30,7 @@ export const generateContrastColors = (backgroundColor, odysseyDesignTokens) =>
26
30
  const luminance = 0.2126 * red + 0.7152 * green + 0.0722 * blue;
27
31
  const luminanceValueInEdgeRange = luminance > LUMINANCE_EDGE_MIN && luminance < LUMINANCE_EDGE_MAX;
28
32
  const isLight = luminance > LUMINANCE_THRESHOLD;
29
- const fontColor = luminanceValueInEdgeRange ? BLACK_FONT_COLOR : isLight ? odysseyDesignTokens.TypographyColorBody : WHITE_FONT_COLOR;
33
+ const fontColor = backgroundContrastColor || (luminanceValueInEdgeRange ? BLACK_FONT_COLOR : isLight ? odysseyDesignTokens.TypographyColorBody : WHITE_FONT_COLOR);
30
34
  const calculatedFontColorInRgb = hexToRgb(fontColor);
31
35
  const lightFontColorInRgb = hexToRgb(WHITE_FONT_COLOR);
32
36
  const darkFontColorInRgb = hexToRgb(luminanceValueInEdgeRange ? BLACK_FONT_COLOR : odysseyDesignTokens.TypographyColorBody);
@@ -1 +1 @@
1
- {"version":3,"file":"createContrastColors.js","names":["hexToRgb","isValidHexString","rgbComponentsToString","LUMINANCE_THRESHOLD","LUMINANCE_EDGE_MIN","LUMINANCE_EDGE_MAX","BLACK_FONT_COLOR","WHITE_FONT_COLOR","generateContrastColors","backgroundColor","odysseyDesignTokens","rgbFromHex","HueNeutralWhite","red","green","blue","luminance","luminanceValueInEdgeRange","isLight","fontColor","TypographyColorBody","calculatedFontColorInRgb","lightFontColorInRgb","darkFontColorInRgb","calculatedFontRgbComponentsString","lightFontRgbComponentsString","darkFontRgbComponentsString","getHighlightColor","focusRingColor","itemDisabledFontColor","itemHoverBackgroundColor","itemSelectedBackgroundColor"],"sources":["../../src/createContrastColors.ts"],"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 {\n hexToRgb,\n isValidHexString,\n rgbComponentsToString,\n} from \"./hexToRgb.js\";\nimport { DesignTokens } from \"./OdysseyDesignTokensContext.js\";\n\nexport type ContrastColors = {\n focusRingColor: string | undefined;\n fontColor: string | undefined;\n itemDisabledFontColor: string | undefined;\n itemHoverBackgroundColor: string | undefined;\n itemSelectedBackgroundColor: string | undefined;\n};\n\n// 128 is a magic number. This feels like roughly where we should switch from dark to light.\nconst LUMINANCE_THRESHOLD = 128;\nconst LUMINANCE_EDGE_MIN = 108;\nconst LUMINANCE_EDGE_MAX = 142;\n\nconst BLACK_FONT_COLOR = \"#000000\";\nconst WHITE_FONT_COLOR = \"#FFFFFF\";\n\nexport const generateContrastColors = (\n backgroundColor: string,\n odysseyDesignTokens: DesignTokens,\n) => {\n // Convert hex to RGB\n const rgbFromHex = isValidHexString(backgroundColor)\n ? hexToRgb(backgroundColor)\n : hexToRgb(odysseyDesignTokens.HueNeutralWhite);\n\n const { red, green, blue } = rgbFromHex;\n\n // Calculate relative luminance\n // @see https://contrastchecker.online/color-relative-luminance-calculator#:~:text=For%20the%20sRGB%20colorspace%2C%20the,%2B0.055)%2F1.055)%20%5E%202.4\n // returns a number between 0(black) and 255(white)\n const luminance = 0.2126 * red + 0.7152 * green + 0.0722 * blue;\n\n // Luminance values between LUMINANCE_EDGE_MIN-LUMINANCE_EDGE_MAX can cause contrast ration issues\n // Using #000000 helps in these cases\n const luminanceValueInEdgeRange =\n luminance > LUMINANCE_EDGE_MIN && luminance < LUMINANCE_EDGE_MAX;\n\n // Determine if the color is light or dark.\n const isLight = luminance > LUMINANCE_THRESHOLD;\n\n const fontColor = luminanceValueInEdgeRange\n ? BLACK_FONT_COLOR\n : isLight\n ? odysseyDesignTokens.TypographyColorBody\n : WHITE_FONT_COLOR;\n\n const calculatedFontColorInRgb = hexToRgb(fontColor);\n const lightFontColorInRgb = hexToRgb(WHITE_FONT_COLOR);\n const darkFontColorInRgb = hexToRgb(\n luminanceValueInEdgeRange\n ? BLACK_FONT_COLOR\n : odysseyDesignTokens.TypographyColorBody,\n );\n\n const calculatedFontRgbComponentsString = rgbComponentsToString({\n red: calculatedFontColorInRgb?.red,\n green: calculatedFontColorInRgb?.green,\n blue: calculatedFontColorInRgb?.blue,\n });\n\n const lightFontRgbComponentsString = rgbComponentsToString({\n red: lightFontColorInRgb?.red,\n green: lightFontColorInRgb?.green,\n blue: lightFontColorInRgb?.blue,\n });\n\n const darkFontRgbComponentsString = rgbComponentsToString({\n red: darkFontColorInRgb?.red,\n green: darkFontColorInRgb?.green,\n blue: darkFontColorInRgb?.blue,\n });\n\n const getHighlightColor: (\n luminanceValueInEdgeRange: boolean,\n isLight: boolean,\n ) => string = (luminanceValueInEdgeRange, isLight) => {\n if (luminanceValueInEdgeRange) {\n return isLight\n ? darkFontRgbComponentsString\n : lightFontRgbComponentsString;\n }\n\n return calculatedFontRgbComponentsString;\n };\n\n return {\n fontColor,\n focusRingColor: `rgba(${calculatedFontRgbComponentsString}, .8)`,\n itemDisabledFontColor: `rgba(${calculatedFontRgbComponentsString}, .4)`,\n itemHoverBackgroundColor: `rgba(${getHighlightColor(luminanceValueInEdgeRange, isLight)}, .1)`,\n itemSelectedBackgroundColor: `rgba(${getHighlightColor(luminanceValueInEdgeRange, isLight)}, .15)`,\n };\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SACEA,QAAQ,EACRC,gBAAgB,EAChBC,qBAAqB,QAChB,eAAe;AAYtB,MAAMC,mBAAmB,GAAG,GAAG;AAC/B,MAAMC,kBAAkB,GAAG,GAAG;AAC9B,MAAMC,kBAAkB,GAAG,GAAG;AAE9B,MAAMC,gBAAgB,GAAG,SAAS;AAClC,MAAMC,gBAAgB,GAAG,SAAS;AAElC,OAAO,MAAMC,sBAAsB,GAAGA,CACpCC,eAAuB,EACvBC,mBAAiC,KAC9B;EAEH,MAAMC,UAAU,GAAGV,gBAAgB,CAACQ,eAAe,CAAC,GAChDT,QAAQ,CAACS,eAAe,CAAC,GACzBT,QAAQ,CAACU,mBAAmB,CAACE,eAAe,CAAC;EAEjD,MAAM;IAAEC,GAAG;IAAEC,KAAK;IAAEC;EAAK,CAAC,GAAGJ,UAAU;EAKvC,MAAMK,SAAS,GAAG,MAAM,GAAGH,GAAG,GAAG,MAAM,GAAGC,KAAK,GAAG,MAAM,GAAGC,IAAI;EAI/D,MAAME,yBAAyB,GAC7BD,SAAS,GAAGZ,kBAAkB,IAAIY,SAAS,GAAGX,kBAAkB;EAGlE,MAAMa,OAAO,GAAGF,SAAS,GAAGb,mBAAmB;EAE/C,MAAMgB,SAAS,GAAGF,yBAAyB,GACvCX,gBAAgB,GAChBY,OAAO,GACLR,mBAAmB,CAACU,mBAAmB,GACvCb,gBAAgB;EAEtB,MAAMc,wBAAwB,GAAGrB,QAAQ,CAACmB,SAAS,CAAC;EACpD,MAAMG,mBAAmB,GAAGtB,QAAQ,CAACO,gBAAgB,CAAC;EACtD,MAAMgB,kBAAkB,GAAGvB,QAAQ,CACjCiB,yBAAyB,GACrBX,gBAAgB,GAChBI,mBAAmB,CAACU,mBAC1B,CAAC;EAED,MAAMI,iCAAiC,GAAGtB,qBAAqB,CAAC;IAC9DW,GAAG,EAAEQ,wBAAwB,EAAER,GAAG;IAClCC,KAAK,EAAEO,wBAAwB,EAAEP,KAAK;IACtCC,IAAI,EAAEM,wBAAwB,EAAEN;EAClC,CAAC,CAAC;EAEF,MAAMU,4BAA4B,GAAGvB,qBAAqB,CAAC;IACzDW,GAAG,EAAES,mBAAmB,EAAET,GAAG;IAC7BC,KAAK,EAAEQ,mBAAmB,EAAER,KAAK;IACjCC,IAAI,EAAEO,mBAAmB,EAAEP;EAC7B,CAAC,CAAC;EAEF,MAAMW,2BAA2B,GAAGxB,qBAAqB,CAAC;IACxDW,GAAG,EAAEU,kBAAkB,EAAEV,GAAG;IAC5BC,KAAK,EAAES,kBAAkB,EAAET,KAAK;IAChCC,IAAI,EAAEQ,kBAAkB,EAAER;EAC5B,CAAC,CAAC;EAEF,MAAMY,iBAGK,GAAGA,CAACV,yBAAyB,EAAEC,OAAO,KAAK;IACpD,IAAID,yBAAyB,EAAE;MAC7B,OAAOC,OAAO,GACVQ,2BAA2B,GAC3BD,4BAA4B;IAClC;IAEA,OAAOD,iCAAiC;EAC1C,CAAC;EAED,OAAO;IACLL,SAAS;IACTS,cAAc,EAAE,QAAQJ,iCAAiC,OAAO;IAChEK,qBAAqB,EAAE,QAAQL,iCAAiC,OAAO;IACvEM,wBAAwB,EAAE,QAAQH,iBAAiB,CAACV,yBAAyB,EAAEC,OAAO,CAAC,OAAO;IAC9Fa,2BAA2B,EAAE,QAAQJ,iBAAiB,CAACV,yBAAyB,EAAEC,OAAO,CAAC;EAC5F,CAAC;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"createContrastColors.js","names":["hexToRgb","isValidHexString","rgbComponentsToString","LUMINANCE_THRESHOLD","LUMINANCE_EDGE_MIN","LUMINANCE_EDGE_MAX","BLACK_FONT_COLOR","WHITE_FONT_COLOR","generateContrastColors","backgroundColor","backgroundContrastColor","odysseyDesignTokens","rgbFromHex","HueNeutralWhite","red","green","blue","luminance","luminanceValueInEdgeRange","isLight","fontColor","TypographyColorBody","calculatedFontColorInRgb","lightFontColorInRgb","darkFontColorInRgb","calculatedFontRgbComponentsString","lightFontRgbComponentsString","darkFontRgbComponentsString","getHighlightColor","focusRingColor","itemDisabledFontColor","itemHoverBackgroundColor","itemSelectedBackgroundColor"],"sources":["../../src/createContrastColors.ts"],"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 {\n hexToRgb,\n isValidHexString,\n rgbComponentsToString,\n} from \"./hexToRgb.js\";\nimport { DesignTokens } from \"./OdysseyDesignTokensContext.js\";\n\nexport type ContrastColors = {\n focusRingColor: string | undefined;\n fontColor: string | undefined;\n itemDisabledFontColor: string | undefined;\n itemHoverBackgroundColor: string | undefined;\n itemSelectedBackgroundColor: string | undefined;\n};\n\n// 128 is a magic number. This feels like roughly where we should switch from dark to light.\nconst LUMINANCE_THRESHOLD = 128;\nconst LUMINANCE_EDGE_MIN = 108;\nconst LUMINANCE_EDGE_MAX = 142;\n\nconst BLACK_FONT_COLOR = \"#000000\";\nconst WHITE_FONT_COLOR = \"#FFFFFF\";\n\nexport const generateContrastColors = ({\n backgroundColor,\n backgroundContrastColor,\n odysseyDesignTokens,\n}: {\n backgroundColor: string;\n backgroundContrastColor?: string;\n odysseyDesignTokens: DesignTokens;\n}) => {\n // Convert hex to RGB\n const rgbFromHex = isValidHexString(backgroundColor)\n ? hexToRgb(backgroundColor)\n : hexToRgb(odysseyDesignTokens.HueNeutralWhite);\n\n const { red, green, blue } = rgbFromHex;\n\n // Calculate relative luminance\n // @see https://contrastchecker.online/color-relative-luminance-calculator#:~:text=For%20the%20sRGB%20colorspace%2C%20the,%2B0.055)%2F1.055)%20%5E%202.4\n // returns a number between 0(black) and 255(white)\n const luminance = 0.2126 * red + 0.7152 * green + 0.0722 * blue;\n\n // Luminance values between LUMINANCE_EDGE_MIN-LUMINANCE_EDGE_MAX can cause contrast ration issues\n // Using #000000 helps in these cases\n const luminanceValueInEdgeRange =\n luminance > LUMINANCE_EDGE_MIN && luminance < LUMINANCE_EDGE_MAX;\n\n // Determine if the color is light or dark.\n const isLight = luminance > LUMINANCE_THRESHOLD;\n\n const fontColor =\n backgroundContrastColor ||\n (luminanceValueInEdgeRange\n ? BLACK_FONT_COLOR\n : isLight\n ? odysseyDesignTokens.TypographyColorBody\n : WHITE_FONT_COLOR);\n\n const calculatedFontColorInRgb = hexToRgb(fontColor);\n const lightFontColorInRgb = hexToRgb(WHITE_FONT_COLOR);\n const darkFontColorInRgb = hexToRgb(\n luminanceValueInEdgeRange\n ? BLACK_FONT_COLOR\n : odysseyDesignTokens.TypographyColorBody,\n );\n\n const calculatedFontRgbComponentsString = rgbComponentsToString({\n red: calculatedFontColorInRgb?.red,\n green: calculatedFontColorInRgb?.green,\n blue: calculatedFontColorInRgb?.blue,\n });\n\n const lightFontRgbComponentsString = rgbComponentsToString({\n red: lightFontColorInRgb?.red,\n green: lightFontColorInRgb?.green,\n blue: lightFontColorInRgb?.blue,\n });\n\n const darkFontRgbComponentsString = rgbComponentsToString({\n red: darkFontColorInRgb?.red,\n green: darkFontColorInRgb?.green,\n blue: darkFontColorInRgb?.blue,\n });\n\n const getHighlightColor: (\n luminanceValueInEdgeRange: boolean,\n isLight: boolean,\n ) => string = (luminanceValueInEdgeRange, isLight) => {\n if (luminanceValueInEdgeRange) {\n return isLight\n ? darkFontRgbComponentsString\n : lightFontRgbComponentsString;\n }\n\n return calculatedFontRgbComponentsString;\n };\n\n return {\n fontColor,\n focusRingColor: `rgba(${calculatedFontRgbComponentsString}, .8)`,\n itemDisabledFontColor: `rgba(${calculatedFontRgbComponentsString}, .4)`,\n itemHoverBackgroundColor: `rgba(${getHighlightColor(luminanceValueInEdgeRange, isLight)}, .1)`,\n itemSelectedBackgroundColor: `rgba(${getHighlightColor(luminanceValueInEdgeRange, isLight)}, .15)`,\n };\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SACEA,QAAQ,EACRC,gBAAgB,EAChBC,qBAAqB,QAChB,eAAe;AAYtB,MAAMC,mBAAmB,GAAG,GAAG;AAC/B,MAAMC,kBAAkB,GAAG,GAAG;AAC9B,MAAMC,kBAAkB,GAAG,GAAG;AAE9B,MAAMC,gBAAgB,GAAG,SAAS;AAClC,MAAMC,gBAAgB,GAAG,SAAS;AAElC,OAAO,MAAMC,sBAAsB,GAAGA,CAAC;EACrCC,eAAe;EACfC,uBAAuB;EACvBC;AAKF,CAAC,KAAK;EAEJ,MAAMC,UAAU,GAAGX,gBAAgB,CAACQ,eAAe,CAAC,GAChDT,QAAQ,CAACS,eAAe,CAAC,GACzBT,QAAQ,CAACW,mBAAmB,CAACE,eAAe,CAAC;EAEjD,MAAM;IAAEC,GAAG;IAAEC,KAAK;IAAEC;EAAK,CAAC,GAAGJ,UAAU;EAKvC,MAAMK,SAAS,GAAG,MAAM,GAAGH,GAAG,GAAG,MAAM,GAAGC,KAAK,GAAG,MAAM,GAAGC,IAAI;EAI/D,MAAME,yBAAyB,GAC7BD,SAAS,GAAGb,kBAAkB,IAAIa,SAAS,GAAGZ,kBAAkB;EAGlE,MAAMc,OAAO,GAAGF,SAAS,GAAGd,mBAAmB;EAE/C,MAAMiB,SAAS,GACbV,uBAAuB,KACtBQ,yBAAyB,GACtBZ,gBAAgB,GAChBa,OAAO,GACLR,mBAAmB,CAACU,mBAAmB,GACvCd,gBAAgB,CAAC;EAEzB,MAAMe,wBAAwB,GAAGtB,QAAQ,CAACoB,SAAS,CAAC;EACpD,MAAMG,mBAAmB,GAAGvB,QAAQ,CAACO,gBAAgB,CAAC;EACtD,MAAMiB,kBAAkB,GAAGxB,QAAQ,CACjCkB,yBAAyB,GACrBZ,gBAAgB,GAChBK,mBAAmB,CAACU,mBAC1B,CAAC;EAED,MAAMI,iCAAiC,GAAGvB,qBAAqB,CAAC;IAC9DY,GAAG,EAAEQ,wBAAwB,EAAER,GAAG;IAClCC,KAAK,EAAEO,wBAAwB,EAAEP,KAAK;IACtCC,IAAI,EAAEM,wBAAwB,EAAEN;EAClC,CAAC,CAAC;EAEF,MAAMU,4BAA4B,GAAGxB,qBAAqB,CAAC;IACzDY,GAAG,EAAES,mBAAmB,EAAET,GAAG;IAC7BC,KAAK,EAAEQ,mBAAmB,EAAER,KAAK;IACjCC,IAAI,EAAEO,mBAAmB,EAAEP;EAC7B,CAAC,CAAC;EAEF,MAAMW,2BAA2B,GAAGzB,qBAAqB,CAAC;IACxDY,GAAG,EAAEU,kBAAkB,EAAEV,GAAG;IAC5BC,KAAK,EAAES,kBAAkB,EAAET,KAAK;IAChCC,IAAI,EAAEQ,kBAAkB,EAAER;EAC5B,CAAC,CAAC;EAEF,MAAMY,iBAGK,GAAGA,CAACV,yBAAyB,EAAEC,OAAO,KAAK;IACpD,IAAID,yBAAyB,EAAE;MAC7B,OAAOC,OAAO,GACVQ,2BAA2B,GAC3BD,4BAA4B;IAClC;IAEA,OAAOD,iCAAiC;EAC1C,CAAC;EAED,OAAO;IACLL,SAAS;IACTS,cAAc,EAAE,QAAQJ,iCAAiC,OAAO;IAChEK,qBAAqB,EAAE,QAAQL,iCAAiC,OAAO;IACvEM,wBAAwB,EAAE,QAAQH,iBAAiB,CAACV,yBAAyB,EAAEC,OAAO,CAAC,OAAO;IAC9Fa,2BAA2B,EAAE,QAAQJ,iBAAiB,CAACV,yBAAyB,EAAEC,OAAO,CAAC;EAC5F,CAAC;AACH,CAAC","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ /*!
2
+ * Copyright (c) 2025-present, Okta, Inc. and/or its affiliates. All rights reserved.
3
+ * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
4
+ *
5
+ * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
6
+ * Unless required by applicable law or agreed to in writing, software
7
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
8
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ *
10
+ * See the License for the specific language governing permissions and limitations under the License.
11
+ */export const getLogicalBoundaries = element => {
12
+ const isRTL = document.documentElement.getAttribute("dir") === "rtl";
13
+ const {
14
+ top,
15
+ bottom,
16
+ left,
17
+ right
18
+ } = element.getBoundingClientRect();
19
+ return {
20
+ top,
21
+ bottom,
22
+ left: isRTL ? right : left,
23
+ right: isRTL ? left : right
24
+ };
25
+ };
26
+ //# sourceMappingURL=getLogicalBoundaries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getLogicalBoundaries.js","names":["getLogicalBoundaries","element","isRTL","document","documentElement","getAttribute","top","bottom","left","right","getBoundingClientRect"],"sources":["../../src/getLogicalBoundaries.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2025-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\n/**\n * Retrieves the logical boundaries (top, bottom, left, right) of a given HTML element.\n *\n * The function considers the document's text direction (`dir` attribute) to determine\n * whether the left and right boundaries should be swapped.\n */\nexport const getLogicalBoundaries = (element: HTMLElement) => {\n const isRTL = document.documentElement.getAttribute(\"dir\") === \"rtl\";\n\n const { top, bottom, left, right } = element.getBoundingClientRect();\n\n return {\n top,\n bottom,\n // left and right are swapped for RTL\n left: isRTL ? right : left,\n right: isRTL ? left : right,\n };\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAQA,OAAO,MAAMA,oBAAoB,GAAIC,OAAoB,IAAK;EAC5D,MAAMC,KAAK,GAAGC,QAAQ,CAACC,eAAe,CAACC,YAAY,CAAC,KAAK,CAAC,KAAK,KAAK;EAEpE,MAAM;IAAEC,GAAG;IAAEC,MAAM;IAAEC,IAAI;IAAEC;EAAM,CAAC,GAAGR,OAAO,CAACS,qBAAqB,CAAC,CAAC;EAEpE,OAAO;IACLJ,GAAG;IACHC,MAAM;IAENC,IAAI,EAAEN,KAAK,GAAGO,KAAK,GAAGD,IAAI;IAC1BC,KAAK,EAAEP,KAAK,GAAGM,IAAI,GAAGC;EACxB,CAAC;AACH,CAAC","ignoreList":[]}
@@ -11,12 +11,13 @@
11
11
  */
12
12
 
13
13
  import styled from "@emotion/styled";
14
- import { memo } from "react";
14
+ import { memo, useCallback, useRef } from "react";
15
15
  import { DocumentationIcon } from "../../icons.generated/index.js";
16
16
  import { DocumentationLink } from "./DocumentationLink.js";
17
17
  import { useOdysseyDesignTokens } from "../../OdysseyDesignTokensContext.js";
18
18
  import { Heading4, Paragraph } from "../../Typography.js";
19
19
  import { useHasUiShell } from "../../ui-shell/useHasUiShell.js";
20
+ import { useMountLifecycleEffect } from "../../useMountLifecycleEffect.js";
20
21
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
21
22
  const TemplateContainer = styled("div", {
22
23
  shouldForwardProp: prop => prop !== "odysseyDesignTokens" && prop !== "hasUiShell" && prop !== "isFullWidth"
@@ -71,11 +72,12 @@ const TemplateHeaderButtons = styled("div", {
71
72
  gap: odysseyDesignTokens.Spacing2
72
73
  }));
73
74
  const TemplateContent = styled("div", {
74
- shouldForwardProp: prop => !["odysseyDesignTokens", "isDrawerOpen", "drawerVariant"].includes(prop)
75
+ shouldForwardProp: prop => !["drawerVariant", "isDrawerOpen", "isFirstRender", "odysseyDesignTokens"].includes(prop)
75
76
  })(({
76
- odysseyDesignTokens,
77
+ drawerVariant,
77
78
  isDrawerOpen,
78
- drawerVariant
79
+ isFirstRender,
80
+ odysseyDesignTokens
79
81
  }) => ({
80
82
  "@keyframes animate-drawer-open": {
81
83
  "0%": {
@@ -98,7 +100,7 @@ const TemplateContent = styled("div", {
98
100
  gap: drawerVariant === "persistent" && !isDrawerOpen ? 0 : odysseyDesignTokens.Spacing4,
99
101
  marginBlock: odysseyDesignTokens.Spacing4,
100
102
  gridTemplateColumns: drawerVariant === "persistent" ? isDrawerOpen ? "minmax(0, 1fr) 360px" : "minmax(0, 1fr) 0" : "minmax(0, 1fr)",
101
- animation: drawerVariant === "persistent" && isDrawerOpen ? "animate-drawer-open 225ms cubic-bezier(0, 0, 0.2, 1)" : "animate-drawer-close 225ms cubic-bezier(0, 0, 0.2, 1)"
103
+ animation: drawerVariant === "persistent" && (!isFirstRender || isDrawerOpen) ? `animate-drawer-${isDrawerOpen ? "open" : "close"} 225ms cubic-bezier(0, 0, 0.2, 1)` : undefined
102
104
  }));
103
105
  const PageTemplate = ({
104
106
  children,
@@ -118,6 +120,14 @@ const PageTemplate = ({
118
120
  variant: drawerVariant
119
121
  } = drawer?.props ?? {};
120
122
  const hasUiShell = useHasUiShell();
123
+ const firstRenderRef = useRef(true);
124
+ const isFirstRender = firstRenderRef.current;
125
+ const onMount = useCallback(() => {
126
+ firstRenderRef.current = false;
127
+ }, []);
128
+ useMountLifecycleEffect({
129
+ onMount
130
+ });
121
131
  return _jsxs(TemplateContainer, {
122
132
  hasUiShell: hasUiShell,
123
133
  isFullWidth: isFullWidth,
@@ -147,6 +157,7 @@ const PageTemplate = ({
147
157
  odysseyDesignTokens: odysseyDesignTokens,
148
158
  isDrawerOpen: isDrawerOpen,
149
159
  drawerVariant: drawerVariant,
160
+ isFirstRender: isFirstRender,
150
161
  children: [children, drawer]
151
162
  })]
152
163
  });