{"version":3,"file":"Breadcrumbs.cjs","names":["_styled","_interopRequireDefault","require","_react","_i18n","_index","_Typography","_jsxRuntime","e","__esModule","default","BreadcrumbContext","exports","createContext","breadcrumbType","BreadcrumbContent","styled","span","Breadcrumb","children","href","iconName","onClick","useContext","onClickHandler","useCallback","event","preventDefault","stopPropagation","breadcrumbContent","jsxs","Fragment","jsx","GroupIcon","UserIcon","Subordinate","color","_MenuItem2","component","ariaCurrent","_ButtonBase2","breadcrumbProviderValue","currentPage","listItem","menuItem","defaultTruncationValue","BreadcrumbList","homeHref","maxVisibleItems","maxVisibleItemsProp","testId","translate","t","useTranslation","anchorEl","setAnchorEl","useState","useMemo","Math","min","max","length","breadcrumbSections","beforeMenu","insideMenu","remainingBreadcrumbs","menuStart","floor","menuLength","slice","onMenuButtonClick","currentTarget","onCloseMenu","_Breadcrumbs2","maxItems","separator","HomeIcon","map","breadcrumb","index","Provider","value","_Menu2","anchorOrigin","horizontal","vertical","MenuListProps","sx","minWidth","onClose","open","Boolean","MemoizedBreadcrumbList","memo","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 styled from \"@emotion/styled\";\nimport {\n  ButtonBase,\n  Menu,\n  MenuItem,\n  Breadcrumbs as MuiBreadcrumbs,\n} from \"@mui/material\";\nimport {\n  createContext,\n  memo,\n  MouseEventHandler,\n  ReactElement,\n  useCallback,\n  useContext,\n  useMemo,\n  useState,\n} from \"react\";\n\nimport { HtmlProps } from \"./HtmlProps.js\";\nimport { useTranslation } from \"./i18n.generated/i18n.js\";\nimport { GroupIcon, HomeIcon, UserIcon } from \"./icons.generated/index.js\";\nimport { Subordinate } from \"./Typography.js\";\n\nexport type BreadcrumbType = \"listItem\" | \"menuItem\" | \"currentPage\";\n\nexport type BreadcrumbProps = {\n  /** The visible label text for the breadcrumb item. */\n  children?: string;\n  /**\n   * The URL the breadcrumb navigates to. When omitted, the item renders as plain text (e.g., the current page).\n   */\n  href?: string;\n  /** An optional icon displayed before the label text. */\n  iconName?: \"user\" | \"group\";\n  /**\n   * Click handler invoked when the breadcrumb is activated. Prevents default navigation when provided.\n   */\n  onClick?: MouseEventHandler;\n};\n\nexport type BreadcrumbsProps = {\n  /** The ordered list of `Breadcrumb` elements representing the navigation path. */\n  children: ReactElement<typeof Breadcrumb>[];\n  /** When provided, prepends a home icon link pointing to this URL as the first breadcrumb. */\n  homeHref?: string;\n  /**\n   * Maximum number of breadcrumb items to show before collapsing the middle items into an overflow menu.\n   * @default 5\n   */\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\n/**\n * A single item in a Breadcrumbs trail. Renders as a link, a menu item, or plain text depending on its position and context.\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 component=\"a\" href={href} onClick={onClickHandler}>\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 about potential undefined returns\n  return (\n    <ButtonBase href={href} onClick={onClickHandler}>\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\n/**\n * A navigational breadcrumb trail that displays the user's location within a hierarchy. Automatically collapses middle items into an overflow menu when the number of items exceeds `maxVisibleItems`.\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      aria-label={t(\"breadcrumbs.label.text\")}\n      data-se={testId}\n      maxItems={children.length + 1}\n      separator={<span translate=\"no\">/</span>}\n      translate={translate}\n    >\n      {homeHref && (\n        <ButtonBase aria-label={t(\"breadcrumbs.home.text\")} href={homeHref}>\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            anchorEl={anchorEl}\n            anchorOrigin={{ horizontal: \"left\", vertical: \"bottom\" }}\n            MenuListProps={{\n              sx: {\n                minWidth: 180,\n              },\n            }}\n            onClose={onCloseMenu}\n            open={Boolean(anchorEl)}\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":";;;;;;;;;;AAYA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAOA,IAAAC,MAAA,GAAAD,OAAA;AAYA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AAA8C,IAAAK,WAAA,GAAAL,OAAA;AAAA,SAAAD,uBAAAO,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAjC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA0DO,MAAMG,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAAG,IAAAE,oBAAa,EAAwB;EACpEC,cAAc,EAAE;AAClB,CAAC,CAAC;AAEF,MAAMC,iBAAiB,GAAGC,eAAM,CAACC,IAAI;AACrC;AACA;AACA;AACA;AACA,CAAC;AAKM,MAAMC,UAAU,GAAGA,CAAC;EACzBC,QAAQ;EACRC,IAAI;EACJC,QAAQ;EACRC;AACe,CAAC,KAAK;EACrB,MAAM;IAAER;EAAe,CAAC,GAAG,IAAAS,iBAAU,EAACZ,iBAAiB,CAAC;EAExD,MAAMa,cAAc,GAAG,IAAAC,kBAAW,EAC/BC,KAAK,IAAK;IACT,IAAIJ,OAAO,EAAE;MACXI,KAAK,CAACC,cAAc,CAAC,CAAC;MACtBD,KAAK,CAACE,eAAe,CAAC,CAAC;MACvBN,OAAO,CAACI,KAAK,CAAC;IAChB;EACF,CAAC,EACD,CAACJ,OAAO,CACV,CAAC;EAED,MAAMO,iBAAiB,GACrB,IAAAtB,WAAA,CAAAuB,IAAA,EAAAvB,WAAA,CAAAwB,QAAA;IAAAZ,QAAA,GACGE,QAAQ,KAAK,OAAO,GACnB,IAAAd,WAAA,CAAAyB,GAAA,EAAC3B,MAAA,CAAA4B,SAAS,IAAE,CAAC,GACXZ,QAAQ,KAAK,MAAM,GACrB,IAAAd,WAAA,CAAAyB,GAAA,EAAC3B,MAAA,CAAA6B,QAAQ,IAAE,CAAC,GACV,IAAI,EACR,IAAA3B,WAAA,CAAAyB,GAAA,EAACjB,iBAAiB;MAAAI,QAAA,EAAEA;IAAQ,CAAoB,CAAC;EAAA,CACjD,CACH;EAED,IAAI,CAACC,IAAI,EAAE;IACT,OAAO,IAAAb,WAAA,CAAAyB,GAAA,EAAC1B,WAAA,CAAA6B,WAAW;MAACC,KAAK,EAAC,aAAa;MAAAjB,QAAA,EAAEU;IAAiB,CAAc,CAAC;EAC3E;EAEA,IAAIf,cAAc,KAAK,UAAU,EAAE;IACjC,OACE,IAAAP,WAAA,CAAAyB,GAAA,EAAAK,UAAA,CAAA3B,OAAA;MAAU4B,SAAS,EAAC,GAAG;MAAClB,IAAI,EAAEA,IAAK;MAACE,OAAO,EAAEE,cAAe;MAAAL,QAAA,EACzDU;IAAiB,CACV,CAAC;EAEf;EAEA,IAAIf,cAAc,KAAK,aAAa,EAAE;IACpC,OACE,IAAAP,WAAA,CAAAyB,GAAA,EAAC1B,WAAA,CAAA6B,WAAW;MAACI,WAAW,EAAC,MAAM;MAACH,KAAK,EAAC,aAAa;MAAAjB,QAAA,EAChDU;IAAiB,CACP,CAAC;EAElB;EAIA,OACE,IAAAtB,WAAA,CAAAyB,GAAA,EAAAQ,YAAA,CAAA9B,OAAA;IAAYU,IAAI,EAAEA,IAAK;IAACE,OAAO,EAAEE,cAAe;IAAAL,QAAA,EAC7CU;EAAiB,CACR,CAAC;AAEjB,CAAC;AAACjB,OAAA,CAAAM,UAAA,GAAAA,UAAA;AAEF,MAAMuB,uBAGL,GAAG;EACFC,WAAW,EAAE;IACX5B,cAAc,EAAE;EAClB,CAAC;EACD6B,QAAQ,EAAE;IACR7B,cAAc,EAAE;EAClB,CAAC;EACD8B,QAAQ,EAAE;IACR9B,cAAc,EAAE;EAClB;AACF,CAAC;AAED,MAAM+B,sBAAsB,GAAG,CAAC;AAKhC,MAAMC,cAAc,GAAGA,CAAC;EACtB3B,QAAQ;EACR4B,QAAQ;EACRC,eAAe,EAAEC,mBAAmB,GAAGJ,sBAAsB;EAC7DK,MAAM;EACNC;AACgB,CAAC,KAAK;EACtB,MAAM;IAAEC;EAAE,CAAC,GAAG,IAAAC,oBAAc,EAAC,CAAC;EAE9B,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAG,IAAAC,eAAQ,EAAqB,IAAI,CAAC;EAElE,MAAMR,eAAe,GAAG,IAAAS,cAAO,EAC7B,MAAMC,IAAI,CAACC,GAAG,CAACD,IAAI,CAACE,GAAG,CAACX,mBAAmB,EAAE,CAAC,CAAC,EAAE9B,QAAQ,CAAC0C,MAAM,CAAC,EACjE,CAACZ,mBAAmB,EAAE9B,QAAQ,CAChC,CAAC;EAED,MAAM2C,kBAAkB,GAAG,IAAAL,cAAO,EAAC,MAAM;IACvC,IAAItC,QAAQ,CAAC0C,MAAM,IAAIb,eAAe,EAAE;MACtC,OAAO;QACLe,UAAU,EAAE,EAAE;QACdC,UAAU,EAAE,EAAE;QACdC,oBAAoB,EAAE9C;MACxB,CAAC;IACH,CAAC,MAAM;MACL,MAAM+C,SAAS,GAAGR,IAAI,CAACS,KAAK,CAACnB,eAAe,GAAG,CAAC,CAAC;MACjD,MAAMoB,UAAU,GAAGjD,QAAQ,CAAC0C,MAAM,GAAGb,eAAe;MAEpD,OAAO;QACLe,UAAU,EAAE5C,QAAQ,CAACkD,KAAK,CAAC,CAAC,EAAEH,SAAS,CAAC;QACxCF,UAAU,EAAE7C,QAAQ,CAACkD,KAAK,CAACH,SAAS,EAAEA,SAAS,GAAGE,UAAU,CAAC;QAC7DH,oBAAoB,EAAE9C,QAAQ,CAACkD,KAAK,CAACH,SAAS,GAAGE,UAAU;MAC7D,CAAC;IACH;EACF,CAAC,EAAE,CAACjD,QAAQ,EAAE6B,eAAe,CAAC,CAAC;EAE/B,MAAMsB,iBAAiB,GAAG,IAAA7C,kBAAW,EAClCC,KAAK,IAAK6B,WAAW,CAAC7B,KAAK,CAAC6C,aAAa,CAAC,EAC3C,EACF,CAAC;EACD,MAAMC,WAAW,GAAG,IAAA/C,kBAAW,EAAC,MAAM;IACpC8B,WAAW,CAAC,IAAI,CAAC;EACnB,CAAC,EAAE,EAAE,CAAC;EAEN,OACE,IAAAhD,WAAA,CAAAuB,IAAA,EAAA2C,aAAA,CAAA/D,OAAA;IACE,cAAY0C,CAAC,CAAC,wBAAwB,CAAE;IACxC,WAASF,MAAO;IAChBwB,QAAQ,EAAEvD,QAAQ,CAAC0C,MAAM,GAAG,CAAE;IAC9Bc,SAAS,EAAE,IAAApE,WAAA,CAAAyB,GAAA;MAAMmB,SAAS,EAAC,IAAI;MAAAhC,QAAA,EAAC;IAAC,CAAM,CAAE;IACzCgC,SAAS,EAAEA,SAAU;IAAAhC,QAAA,GAEpB4B,QAAQ,IACP,IAAAxC,WAAA,CAAAyB,GAAA,EAAAQ,YAAA,CAAA9B,OAAA;MAAY,cAAY0C,CAAC,CAAC,uBAAuB,CAAE;MAAChC,IAAI,EAAE2B,QAAS;MAAA5B,QAAA,EACjE,IAAAZ,WAAA,CAAAyB,GAAA,EAAC3B,MAAA,CAAAuE,QAAQ,IAAE;IAAC,CACF,CACb,EAEAd,kBAAkB,CAACC,UAAU,CAACc,GAAG,CAAC,CAACC,UAAU,EAAEC,KAAK,KACnD,IAAAxE,WAAA,CAAAyB,GAAA,EAACrB,iBAAiB,CAACqE,QAAQ;MAEzBC,KAAK,EAAExC,uBAAuB,CAACE,QAAS;MAAAxB,QAAA,EAEvC2D;IAAU,GAHNC,KAIqB,CAC7B,CAAC,EAEDjB,kBAAkB,CAACE,UAAU,CAACH,MAAM,GAAG,CAAC,IACvC,IAAAtD,WAAA,CAAAuB,IAAA,EAAAvB,WAAA,CAAAwB,QAAA;MAAAZ,QAAA,GACE,IAAAZ,WAAA,CAAAyB,GAAA,EAAAQ,YAAA,CAAA9B,OAAA;QAAYY,OAAO,EAAEgD,iBAAkB;QAAAnD,QAAA,EAAC;MAAG,CAAY,CAAC,EACxD,IAAAZ,WAAA,CAAAyB,GAAA,EAAAkD,MAAA,CAAAxE,OAAA;QACE4C,QAAQ,EAAEA,QAAS;QACnB6B,YAAY,EAAE;UAAEC,UAAU,EAAE,MAAM;UAAEC,QAAQ,EAAE;QAAS,CAAE;QACzDC,aAAa,EAAE;UACbC,EAAE,EAAE;YACFC,QAAQ,EAAE;UACZ;QACF,CAAE;QACFC,OAAO,EAAEjB,WAAY;QACrBkB,IAAI,EAAEC,OAAO,CAACrC,QAAQ,CAAE;QAAAnC,QAAA,EAExB,IAAAZ,WAAA,CAAAyB,GAAA,EAACrB,iBAAiB,CAACqE,QAAQ;UACzBC,KAAK,EAAExC,uBAAuB,CAACG,QAAS;UAAAzB,QAAA,EAEvC2C,kBAAkB,CAACE;QAAU,CACJ;MAAC,CACzB,CAAC;IAAA,CACP,CACH,EAEAF,kBAAkB,CAACG,oBAAoB,CAACY,GAAG,CAAC,CAACC,UAAU,EAAEC,KAAK,KAAK;MAClE,IAAIA,KAAK,KAAKjB,kBAAkB,CAACG,oBAAoB,CAACJ,MAAM,GAAG,CAAC,EAAE;QAChE,OACE,IAAAtD,WAAA,CAAAyB,GAAA,EAACrB,iBAAiB,CAACqE,QAAQ;UAEzBC,KAAK,EAAExC,uBAAuB,CAACC,WAAY;UAAAvB,QAAA,EAE1C2D;QAAU,GAHNC,KAIqB,CAAC;MAEjC;MACA,OACE,IAAAxE,WAAA,CAAAyB,GAAA,EAACrB,iBAAiB,CAACqE,QAAQ;QAEzBC,KAAK,EAAExC,uBAAuB,CAACE,QAAS;QAAAxB,QAAA,EAEvC2D;MAAU,GAHNC,KAIqB,CAAC;IAEjC,CAAC,CAAC;EAAA,CACY,CAAC;AAErB,CAAC;AAED,MAAMa,sBAAsB,GAAAhF,OAAA,CAAAkC,cAAA,GAAG,IAAA+C,WAAI,EAAC/C,cAAc,CAAC;AACnD8C,sBAAsB,CAACE,WAAW,gDAAmB","ignoreList":[]}