@ably/ui 15.6.0 → 16.0.0-dev.75c5e37e

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 (76) hide show
  1. package/core/Flyout.js +1 -1
  2. package/core/Flyout.js.map +1 -1
  3. package/core/Header.js +1 -1
  4. package/core/Header.js.map +1 -1
  5. package/core/LegacyMeganav/MeganavBlogPostsList/component.js +2 -0
  6. package/core/LegacyMeganav/MeganavBlogPostsList/component.js.map +1 -0
  7. package/core/LegacyMeganav/MeganavControl/component.js +2 -0
  8. package/core/LegacyMeganav/MeganavControl/component.js.map +1 -0
  9. package/core/LegacyMeganav/MeganavControlMobileDropdown/component.js +2 -0
  10. package/core/LegacyMeganav/MeganavControlMobileDropdown/component.js.map +1 -0
  11. package/core/LegacyMeganav/MeganavControlMobilePanelClose/component.js +2 -0
  12. package/core/LegacyMeganav/MeganavControlMobilePanelClose/component.js.map +1 -0
  13. package/core/LegacyMeganav/MeganavControlMobilePanelOpen/component.js +2 -0
  14. package/core/LegacyMeganav/MeganavControlMobilePanelOpen/component.js.map +1 -0
  15. package/core/LegacyMeganav/MeganavSearchAutocomplete/component.js +2 -0
  16. package/core/LegacyMeganav/MeganavSearchAutocomplete/component.js.map +1 -0
  17. package/core/LegacyMeganav/MeganavSearchSuggestions/component.js +2 -0
  18. package/core/LegacyMeganav/MeganavSearchSuggestions/component.js.map +1 -0
  19. package/core/LegacyMeganav/component.js +2 -0
  20. package/core/{Meganav → LegacyMeganav}/component.js.map +1 -1
  21. package/core/LegacyMeganav.js +2 -0
  22. package/core/LegacyMeganav.js.map +1 -0
  23. package/core/Meganav/.DS_Store +0 -0
  24. package/core/Meganav/Meganav.js +2 -0
  25. package/core/Meganav/Meganav.js.map +1 -0
  26. package/core/Meganav/MeganavMobile.js +2 -0
  27. package/core/Meganav/MeganavMobile.js.map +1 -0
  28. package/core/Meganav/MeganavPanel.js +2 -0
  29. package/core/Meganav/MeganavPanel.js.map +1 -0
  30. package/core/Meganav/data.js +2 -0
  31. package/core/Meganav/data.js.map +1 -0
  32. package/core/Meganav/images/fan-engagement-nav-image.png +0 -0
  33. package/core/Meganav/images/founders-nav-image.png +0 -0
  34. package/core/MeganavBlogPostsList.js.map +1 -1
  35. package/core/MeganavContentCompany.js.map +1 -1
  36. package/core/MeganavContentDevelopers.js.map +1 -1
  37. package/core/MeganavContentProducts.js.map +1 -1
  38. package/core/MeganavContentUseCases.js.map +1 -1
  39. package/core/MeganavControl.js.map +1 -1
  40. package/core/MeganavControlMobileDropdown.js.map +1 -1
  41. package/core/MeganavItemsDesktop.js +1 -1
  42. package/core/MeganavItemsDesktop.js.map +1 -1
  43. package/core/MeganavItemsMobile.js +1 -1
  44. package/core/MeganavItemsMobile.js.map +1 -1
  45. package/core/MeganavItemsSignedIn.js.map +1 -1
  46. package/core/MeganavSearch.js.map +1 -1
  47. package/core/MeganavSearchPanel.js.map +1 -1
  48. package/core/MeganavSearchSuggestions.js.map +1 -1
  49. package/core/Notice/component.js +1 -1
  50. package/core/Notice/component.js.map +1 -1
  51. package/core/SignOutLink.js.map +1 -1
  52. package/core/images/award/g2-best-meets-requirements-2025.png +0 -0
  53. package/core/images/award/g2-best-support-2025.png +0 -0
  54. package/core/images/award/g2-high-performer-2025.png +0 -0
  55. package/core/images/award/g2-users-most-likely-to-recommend-2025.png +0 -0
  56. package/index.d.ts +193 -109
  57. package/package.json +9 -11
  58. package/core/Meganav/component.js +0 -2
  59. package/core/Meganav.js +0 -2
  60. package/core/Meganav.js.map +0 -1
  61. package/core/MeganavBlogPostsList/component.js +0 -2
  62. package/core/MeganavBlogPostsList/component.js.map +0 -1
  63. package/core/MeganavControl/component.js +0 -2
  64. package/core/MeganavControl/component.js.map +0 -1
  65. package/core/MeganavControlMobileDropdown/component.js +0 -2
  66. package/core/MeganavControlMobileDropdown/component.js.map +0 -1
  67. package/core/MeganavControlMobilePanelClose/component.js +0 -2
  68. package/core/MeganavControlMobilePanelClose/component.js.map +0 -1
  69. package/core/MeganavControlMobilePanelOpen/component.js +0 -2
  70. package/core/MeganavControlMobilePanelOpen/component.js.map +0 -1
  71. package/core/MeganavSearchAutocomplete/component.js +0 -2
  72. package/core/MeganavSearchAutocomplete/component.js.map +0 -1
  73. package/core/MeganavSearchSuggestions/component.js +0 -2
  74. package/core/MeganavSearchSuggestions/component.js.map +0 -1
  75. /package/core/{Meganav → LegacyMeganav}/component.css +0 -0
  76. /package/core/{Meganav → LegacyMeganav}/component.json +0 -0
package/core/Flyout.js CHANGED
@@ -1,2 +1,2 @@
1
- import React,{useState}from"react";import{NavigationMenu,NavigationMenuItem,NavigationMenuList,NavigationMenuTrigger,NavigationMenuContent,NavigationMenuViewport,NavigationMenuLink}from"@radix-ui/react-navigation-menu";import cn from"./utils/cn";import{componentMaxHeight,HEADER_HEIGHT}from"./utils/heights";const DEFAULT_MENU_LINK_STYLING="ui-text-menu3 font-bold text-neutral-1000 dark:neutral-300 hover:bg-neutral-100 dark:hover:bg-neutral-1200 hover:text-neutral-1300 dark:hover:text-neutral-000 px-12 py-8 flex items-center justify-between";const DEFAULT_VIEWPORT_STYLING="relative overflow-hidden w-full h-[var(--radix-navigation-menu-viewport-height)] origin-[top_center] transition-[width,_height] duration-300 data-[state=closed]:animate-scale-out data-[state=open]:animate-scale-in sm:w-[var(--radix-navigation-menu-viewport-width)]";const PANEL_ANIMATION="data-[motion=from-end]:animate-enter-from-right data-[motion=from-start]:animate-enter-from-left data-[motion=to-end]:animate-exit-to-right data-[motion=to-start]:animate-exit-to-left";const FlyOverlay=({className,fadingOut})=>React.createElement("div",{className:cn("absolute left-0 right-0 h-screen w-full opacity-0",{"animate-[fade-in-ten-percent_150ms_ease-in-out_forwards]":!fadingOut,"animate-[fade-out-ten-percent_150ms_ease-in-out_forwards]":fadingOut},className),style:{height:componentMaxHeight(HEADER_HEIGHT)}});const Flyout=({menuItems,className,flyOutClassName,menuLinkClassName,viewPortClassName,hasAnimation})=>{const[isOpen,setIsOpen]=useState(false);const[fadingOut,setFadingOut]=useState(false);const closeMenu=()=>{setFadingOut(true);setTimeout(()=>{setIsOpen(false);setFadingOut(false)},150)};return React.createElement(React.Fragment,null,React.createElement(NavigationMenu,{className:cn(className,"flex w-full"),onValueChange:val=>val?setIsOpen(true):closeMenu(),delayDuration:0},React.createElement(NavigationMenuList,{className:"flex list-none center"},menuItems.map(({label,content,link,panelClassName})=>content?React.createElement(NavigationMenuItem,{key:label},React.createElement(NavigationMenuTrigger,{className:cn("group outline-none focus:outline-none select-none cursor-pointer relative",DEFAULT_MENU_LINK_STYLING,menuLinkClassName)},label),React.createElement(NavigationMenuContent,{className:cn("absolute inset-x-0 top-0 p-24 z-10",hasAnimation&&PANEL_ANIMATION,panelClassName)},content)):React.createElement(NavigationMenuLink,{key:label},React.createElement("a",{href:link,className:cn(DEFAULT_MENU_LINK_STYLING,menuLinkClassName)},label)))),React.createElement("div",{className:cn("absolute left-0 top-full",flyOutClassName)},React.createElement(NavigationMenuViewport,{className:cn(DEFAULT_VIEWPORT_STYLING,viewPortClassName)}))),isOpen?React.createElement(FlyOverlay,{className:"bg-neutral-1300 dark:bg-neutral-000 opacity-10 z-20 h-screen",fadingOut:fadingOut}):null)};export default Flyout;
1
+ import React,{useState}from"react";import{NavigationMenu,NavigationMenuItem,NavigationMenuList,NavigationMenuTrigger,NavigationMenuContent,NavigationMenuViewport,NavigationMenuLink}from"@radix-ui/react-navigation-menu";import cn from"./utils/cn";import{componentMaxHeight,HEADER_HEIGHT}from"./utils/heights";const DEFAULT_MENU_LINK_STYLING="ui-text-menu3 font-bold text-neutral-1000 dark:neutral-300 rounded-md hover:bg-neutral-100 dark:hover:bg-neutral-1200 hover:text-neutral-1300 dark:hover:text-neutral-000 px-12 py-8 flex items-center justify-between";const DEFAULT_VIEWPORT_STYLING="relative overflow-hidden w-full h-[var(--radix-navigation-menu-viewport-height)] origin-[top_center] transition-[width,_height] duration-300 data-[state=closed]:animate-scale-out data-[state=open]:animate-scale-in sm:w-[var(--radix-navigation-menu-viewport-width)]";const PANEL_ANIMATION="data-[motion=from-end]:animate-enter-from-right data-[motion=from-start]:animate-enter-from-left data-[motion=to-end]:animate-exit-to-right data-[motion=to-start]:animate-exit-to-left";const FlyOverlay=({className,fadingOut})=>React.createElement("div",{className:cn("absolute left-0 right-0 h-screen w-full opacity-0",{"animate-[fade-in-ten-percent_150ms_ease-in-out_forwards]":!fadingOut,"animate-[fade-out-ten-percent_150ms_ease-in-out_forwards]":fadingOut},className),style:{height:componentMaxHeight(HEADER_HEIGHT),top:HEADER_HEIGHT}});const Flyout=({menuItems,className,flyOutClassName,menuLinkClassName,viewPortClassName,hasAnimation})=>{const[isOpen,setIsOpen]=useState(false);const[fadingOut,setFadingOut]=useState(false);const closeMenu=()=>{setFadingOut(true);setTimeout(()=>{setIsOpen(false);setFadingOut(false)},150)};return React.createElement(React.Fragment,null,React.createElement(NavigationMenu,{className:cn(className,"flex w-full"),onValueChange:val=>val?setIsOpen(true):closeMenu(),delayDuration:0},React.createElement(NavigationMenuList,{className:"flex list-none center"},menuItems.map(({name,content,link,panelClassName})=>content?React.createElement(NavigationMenuItem,{key:name},React.createElement(NavigationMenuTrigger,{className:cn("group outline-none focus:outline-none select-none cursor-pointer relative",DEFAULT_MENU_LINK_STYLING,menuLinkClassName)},name),React.createElement(NavigationMenuContent,{className:cn("absolute right-0 top-0 p-24 z-10",hasAnimation&&PANEL_ANIMATION,panelClassName)},content)):React.createElement(NavigationMenuLink,{key:name},React.createElement("a",{href:link,className:cn(DEFAULT_MENU_LINK_STYLING,menuLinkClassName)},name)))),React.createElement("div",{className:cn("absolute top-full",flyOutClassName)},React.createElement(NavigationMenuViewport,{className:cn(DEFAULT_VIEWPORT_STYLING,viewPortClassName)}))),isOpen?React.createElement(FlyOverlay,{className:"bg-neutral-1300 dark:bg-neutral-000 opacity-10 z-20 h-screen",fadingOut:fadingOut}):null)};export default Flyout;
2
2
  //# sourceMappingURL=Flyout.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/Flyout.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport {\n NavigationMenu,\n NavigationMenuItem,\n NavigationMenuList,\n NavigationMenuTrigger,\n NavigationMenuContent,\n NavigationMenuViewport,\n NavigationMenuLink,\n} from \"@radix-ui/react-navigation-menu\";\nimport cn from \"./utils/cn\";\nimport { componentMaxHeight, HEADER_HEIGHT } from \"./utils/heights\";\n\n/**\n * Props for the Flyout component.\n */\ntype FlyoutProps = {\n /**\n * Array of menu items to be displayed in the flyout.\n */\n menuItems: {\n /**\n * Label for the menu item.\n */\n label: string;\n /**\n * Optional content to be displayed in the flyout panel.\n */\n content?: React.ReactNode;\n /**\n * Optional link for the menu item.\n */\n link?: string;\n /**\n * Optional styling for the flyout panel.\n */\n panelClassName?: string;\n }[];\n /**\n * Optional class name for the flyout container.\n */\n className?: string;\n /**\n * Optional class name for the flyout element.\n */\n flyOutClassName?: string;\n /**\n * Optional class name for the menu link.\n */\n menuLinkClassName?: string;\n /**\n * Optional class name for the viewport.\n */\n viewPortClassName?: string;\n /**\n * Flag to indicate if animation should be applied.\n */\n hasAnimation: boolean;\n};\n\nconst DEFAULT_MENU_LINK_STYLING =\n \"ui-text-menu3 font-bold text-neutral-1000 dark:neutral-300 hover:bg-neutral-100 dark:hover:bg-neutral-1200 hover:text-neutral-1300 dark:hover:text-neutral-000 px-12 py-8 flex items-center justify-between\";\nconst DEFAULT_VIEWPORT_STYLING =\n \"relative overflow-hidden w-full h-[var(--radix-navigation-menu-viewport-height)] origin-[top_center] transition-[width,_height] duration-300 data-[state=closed]:animate-scale-out data-[state=open]:animate-scale-in sm:w-[var(--radix-navigation-menu-viewport-width)]\";\nconst PANEL_ANIMATION =\n \"data-[motion=from-end]:animate-enter-from-right data-[motion=from-start]:animate-enter-from-left data-[motion=to-end]:animate-exit-to-right data-[motion=to-start]:animate-exit-to-left\";\n\nconst FlyOverlay = ({\n className,\n fadingOut,\n}: {\n className: string;\n fadingOut: boolean;\n}) => (\n <div\n className={cn(\n \"absolute left-0 right-0 h-screen w-full opacity-0\",\n {\n \"animate-[fade-in-ten-percent_150ms_ease-in-out_forwards]\": !fadingOut,\n \"animate-[fade-out-ten-percent_150ms_ease-in-out_forwards]\": fadingOut,\n },\n className,\n )}\n style={{ height: componentMaxHeight(HEADER_HEIGHT) }}\n ></div>\n);\n\nconst Flyout = ({\n menuItems,\n className,\n flyOutClassName,\n menuLinkClassName,\n viewPortClassName,\n hasAnimation,\n}: FlyoutProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const [fadingOut, setFadingOut] = useState(false);\n\n const closeMenu = () => {\n setFadingOut(true);\n\n setTimeout(() => {\n setIsOpen(false);\n setFadingOut(false);\n }, 150);\n };\n\n return (\n <>\n <NavigationMenu\n className={cn(className, \"flex w-full\")}\n onValueChange={(val) => (val ? setIsOpen(true) : closeMenu())}\n delayDuration={0}\n >\n <NavigationMenuList className=\"flex list-none center\">\n {menuItems.map(({ label, content, link, panelClassName }) =>\n content ? (\n <NavigationMenuItem key={label}>\n <NavigationMenuTrigger\n className={cn(\n \"group outline-none focus:outline-none select-none cursor-pointer relative\",\n DEFAULT_MENU_LINK_STYLING,\n menuLinkClassName,\n )}\n >\n {label}\n </NavigationMenuTrigger>\n <NavigationMenuContent\n className={cn(\n \"absolute inset-x-0 top-0 p-24 z-10\",\n hasAnimation && PANEL_ANIMATION,\n panelClassName,\n )}\n >\n {content}\n </NavigationMenuContent>\n </NavigationMenuItem>\n ) : (\n <NavigationMenuLink key={label}>\n <a\n href={link}\n className={cn(DEFAULT_MENU_LINK_STYLING, menuLinkClassName)}\n >\n {label}\n </a>\n </NavigationMenuLink>\n ),\n )}\n </NavigationMenuList>\n\n <div className={cn(\"absolute left-0 top-full\", flyOutClassName)}>\n <NavigationMenuViewport\n className={cn(DEFAULT_VIEWPORT_STYLING, viewPortClassName)}\n />\n </div>\n </NavigationMenu>\n {isOpen ? (\n <FlyOverlay\n className=\"bg-neutral-1300 dark:bg-neutral-000 opacity-10 z-20 h-screen\"\n fadingOut={fadingOut}\n />\n ) : null}\n </>\n );\n};\n\nexport default Flyout;\n"],"names":["React","useState","NavigationMenu","NavigationMenuItem","NavigationMenuList","NavigationMenuTrigger","NavigationMenuContent","NavigationMenuViewport","NavigationMenuLink","cn","componentMaxHeight","HEADER_HEIGHT","DEFAULT_MENU_LINK_STYLING","DEFAULT_VIEWPORT_STYLING","PANEL_ANIMATION","FlyOverlay","className","fadingOut","div","style","height","Flyout","menuItems","flyOutClassName","menuLinkClassName","viewPortClassName","hasAnimation","isOpen","setIsOpen","setFadingOut","closeMenu","setTimeout","onValueChange","val","delayDuration","map","label","content","link","panelClassName","key","a","href"],"mappings":"AAAA,OAAOA,OAASC,QAAQ,KAAQ,OAAQ,AACxC,QACEC,cAAc,CACdC,kBAAkB,CAClBC,kBAAkB,CAClBC,qBAAqB,CACrBC,qBAAqB,CACrBC,sBAAsB,CACtBC,kBAAkB,KACb,iCAAkC,AACzC,QAAOC,OAAQ,YAAa,AAC5B,QAASC,kBAAkB,CAAEC,aAAa,KAAQ,iBAAkB,CAiDpE,MAAMC,0BACJ,8MACF,MAAMC,yBACJ,2QACF,MAAMC,gBACJ,0LAEF,MAAMC,WAAa,CAAC,CAClBC,SAAS,CACTC,SAAS,CAIV,GACC,oBAACC,OACCF,UAAWP,GACT,oDACA,CACE,2DAA4D,CAACQ,UAC7D,4DAA6DA,SAC/D,EACAD,WAEFG,MAAO,CAAEC,OAAQV,mBAAmBC,cAAe,IAIvD,MAAMU,OAAS,CAAC,CACdC,SAAS,CACTN,SAAS,CACTO,eAAe,CACfC,iBAAiB,CACjBC,iBAAiB,CACjBC,YAAY,CACA,IACZ,KAAM,CAACC,OAAQC,UAAU,CAAG3B,SAAS,OACrC,KAAM,CAACgB,UAAWY,aAAa,CAAG5B,SAAS,OAE3C,MAAM6B,UAAY,KAChBD,aAAa,MAEbE,WAAW,KACTH,UAAU,OACVC,aAAa,MACf,EAAG,IACL,EAEA,OACE,wCACE,oBAAC3B,gBACCc,UAAWP,GAAGO,UAAW,eACzBgB,cAAe,AAACC,KAASA,IAAML,UAAU,MAAQE,YACjDI,cAAe,GAEf,oBAAC9B,oBAAmBY,UAAU,yBAC3BM,UAAUa,GAAG,CAAC,CAAC,CAAEC,KAAK,CAAEC,OAAO,CAAEC,IAAI,CAAEC,cAAc,CAAE,GACtDF,QACE,oBAAClC,oBAAmBqC,IAAKJ,OACvB,oBAAC/B,uBACCW,UAAWP,GACT,4EACAG,0BACAY,oBAGDY,OAEH,oBAAC9B,uBACCU,UAAWP,GACT,qCACAiB,cAAgBZ,gBAChByB,iBAGDF,UAIL,oBAAC7B,oBAAmBgC,IAAKJ,OACvB,oBAACK,KACCC,KAAMJ,KACNtB,UAAWP,GAAGG,0BAA2BY,oBAExCY,UAOX,oBAAClB,OAAIF,UAAWP,GAAG,2BAA4Bc,kBAC7C,oBAAChB,wBACCS,UAAWP,GAAGI,yBAA0BY,uBAI7CE,OACC,oBAACZ,YACCC,UAAU,+DACVC,UAAWA,YAEX,KAGV,CAEA,gBAAeI,MAAO"}
1
+ {"version":3,"sources":["../../src/core/Flyout.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport {\n NavigationMenu,\n NavigationMenuItem,\n NavigationMenuList,\n NavigationMenuTrigger,\n NavigationMenuContent,\n NavigationMenuViewport,\n NavigationMenuLink,\n} from \"@radix-ui/react-navigation-menu\";\nimport cn from \"./utils/cn\";\nimport { componentMaxHeight, HEADER_HEIGHT } from \"./utils/heights\";\n\n/**\n * Props for the Flyout component.\n */\ntype FlyoutProps = {\n /**\n * Array of menu items to be displayed in the flyout.\n */\n menuItems: {\n /**\n * name for the menu item.\n */\n name: string;\n /**\n * Optional content to be displayed in the flyout panel.\n */\n content?: React.ReactNode;\n /**\n * Optional link for the menu item.\n */\n link?: string;\n /**\n * Optional styling for the flyout panel.\n */\n panelClassName?: string;\n }[];\n /**\n * Optional class name for the flyout container.\n */\n className?: string;\n /**\n * Optional class name for the flyout element.\n */\n flyOutClassName?: string;\n /**\n * Optional class name for the menu link.\n */\n menuLinkClassName?: string;\n /**\n * Optional class name for the viewport.\n */\n viewPortClassName?: string;\n /**\n * Flag to indicate if animation should be applied.\n */\n hasAnimation: boolean;\n};\n\nconst DEFAULT_MENU_LINK_STYLING =\n \"ui-text-menu3 font-bold text-neutral-1000 dark:neutral-300 rounded-md hover:bg-neutral-100 dark:hover:bg-neutral-1200 hover:text-neutral-1300 dark:hover:text-neutral-000 px-12 py-8 flex items-center justify-between\";\nconst DEFAULT_VIEWPORT_STYLING =\n \"relative overflow-hidden w-full h-[var(--radix-navigation-menu-viewport-height)] origin-[top_center] transition-[width,_height] duration-300 data-[state=closed]:animate-scale-out data-[state=open]:animate-scale-in sm:w-[var(--radix-navigation-menu-viewport-width)]\";\nconst PANEL_ANIMATION =\n \"data-[motion=from-end]:animate-enter-from-right data-[motion=from-start]:animate-enter-from-left data-[motion=to-end]:animate-exit-to-right data-[motion=to-start]:animate-exit-to-left\";\n\nconst FlyOverlay = ({\n className,\n fadingOut,\n}: {\n className: string;\n fadingOut: boolean;\n}) => (\n <div\n className={cn(\n \"absolute left-0 right-0 h-screen w-full opacity-0\",\n {\n \"animate-[fade-in-ten-percent_150ms_ease-in-out_forwards]\": !fadingOut,\n \"animate-[fade-out-ten-percent_150ms_ease-in-out_forwards]\": fadingOut,\n },\n className,\n )}\n style={{ height: componentMaxHeight(HEADER_HEIGHT), top: HEADER_HEIGHT }}\n ></div>\n);\n\nconst Flyout = ({\n menuItems,\n className,\n flyOutClassName,\n menuLinkClassName,\n viewPortClassName,\n hasAnimation,\n}: FlyoutProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const [fadingOut, setFadingOut] = useState(false);\n\n const closeMenu = () => {\n setFadingOut(true);\n\n setTimeout(() => {\n setIsOpen(false);\n setFadingOut(false);\n }, 150);\n };\n\n return (\n <>\n <NavigationMenu\n className={cn(className, \"flex w-full\")}\n onValueChange={(val) => (val ? setIsOpen(true) : closeMenu())}\n delayDuration={0}\n >\n <NavigationMenuList className=\"flex list-none center\">\n {menuItems.map(({ name, content, link, panelClassName }) =>\n content ? (\n <NavigationMenuItem key={name}>\n <NavigationMenuTrigger\n className={cn(\n \"group outline-none focus:outline-none select-none cursor-pointer relative\",\n DEFAULT_MENU_LINK_STYLING,\n menuLinkClassName,\n )}\n >\n {name}\n </NavigationMenuTrigger>\n <NavigationMenuContent\n className={cn(\n \"absolute right-0 top-0 p-24 z-10\",\n hasAnimation && PANEL_ANIMATION,\n panelClassName,\n )}\n >\n {content}\n </NavigationMenuContent>\n </NavigationMenuItem>\n ) : (\n <NavigationMenuLink key={name}>\n <a\n href={link}\n className={cn(DEFAULT_MENU_LINK_STYLING, menuLinkClassName)}\n >\n {name}\n </a>\n </NavigationMenuLink>\n ),\n )}\n </NavigationMenuList>\n\n <div className={cn(\"absolute top-full\", flyOutClassName)}>\n <NavigationMenuViewport\n className={cn(DEFAULT_VIEWPORT_STYLING, viewPortClassName)}\n />\n </div>\n </NavigationMenu>\n {isOpen ? (\n <FlyOverlay\n className=\"bg-neutral-1300 dark:bg-neutral-000 opacity-10 z-20 h-screen\"\n fadingOut={fadingOut}\n />\n ) : null}\n </>\n );\n};\n\nexport default Flyout;\n"],"names":["React","useState","NavigationMenu","NavigationMenuItem","NavigationMenuList","NavigationMenuTrigger","NavigationMenuContent","NavigationMenuViewport","NavigationMenuLink","cn","componentMaxHeight","HEADER_HEIGHT","DEFAULT_MENU_LINK_STYLING","DEFAULT_VIEWPORT_STYLING","PANEL_ANIMATION","FlyOverlay","className","fadingOut","div","style","height","top","Flyout","menuItems","flyOutClassName","menuLinkClassName","viewPortClassName","hasAnimation","isOpen","setIsOpen","setFadingOut","closeMenu","setTimeout","onValueChange","val","delayDuration","map","name","content","link","panelClassName","key","a","href"],"mappings":"AAAA,OAAOA,OAASC,QAAQ,KAAQ,OAAQ,AACxC,QACEC,cAAc,CACdC,kBAAkB,CAClBC,kBAAkB,CAClBC,qBAAqB,CACrBC,qBAAqB,CACrBC,sBAAsB,CACtBC,kBAAkB,KACb,iCAAkC,AACzC,QAAOC,OAAQ,YAAa,AAC5B,QAASC,kBAAkB,CAAEC,aAAa,KAAQ,iBAAkB,CAiDpE,MAAMC,0BACJ,yNACF,MAAMC,yBACJ,2QACF,MAAMC,gBACJ,0LAEF,MAAMC,WAAa,CAAC,CAClBC,SAAS,CACTC,SAAS,CAIV,GACC,oBAACC,OACCF,UAAWP,GACT,oDACA,CACE,2DAA4D,CAACQ,UAC7D,4DAA6DA,SAC/D,EACAD,WAEFG,MAAO,CAAEC,OAAQV,mBAAmBC,eAAgBU,IAAKV,aAAc,IAI3E,MAAMW,OAAS,CAAC,CACdC,SAAS,CACTP,SAAS,CACTQ,eAAe,CACfC,iBAAiB,CACjBC,iBAAiB,CACjBC,YAAY,CACA,IACZ,KAAM,CAACC,OAAQC,UAAU,CAAG5B,SAAS,OACrC,KAAM,CAACgB,UAAWa,aAAa,CAAG7B,SAAS,OAE3C,MAAM8B,UAAY,KAChBD,aAAa,MAEbE,WAAW,KACTH,UAAU,OACVC,aAAa,MACf,EAAG,IACL,EAEA,OACE,wCACE,oBAAC5B,gBACCc,UAAWP,GAAGO,UAAW,eACzBiB,cAAe,AAACC,KAASA,IAAML,UAAU,MAAQE,YACjDI,cAAe,GAEf,oBAAC/B,oBAAmBY,UAAU,yBAC3BO,UAAUa,GAAG,CAAC,CAAC,CAAEC,IAAI,CAAEC,OAAO,CAAEC,IAAI,CAAEC,cAAc,CAAE,GACrDF,QACE,oBAACnC,oBAAmBsC,IAAKJ,MACvB,oBAAChC,uBACCW,UAAWP,GACT,4EACAG,0BACAa,oBAGDY,MAEH,oBAAC/B,uBACCU,UAAWP,GACT,mCACAkB,cAAgBb,gBAChB0B,iBAGDF,UAIL,oBAAC9B,oBAAmBiC,IAAKJ,MACvB,oBAACK,KACCC,KAAMJ,KACNvB,UAAWP,GAAGG,0BAA2Ba,oBAExCY,SAOX,oBAACnB,OAAIF,UAAWP,GAAG,oBAAqBe,kBACtC,oBAACjB,wBACCS,UAAWP,GAAGI,yBAA0Ba,uBAI7CE,OACC,oBAACb,YACCC,UAAU,+DACVC,UAAWA,YAEX,KAGV,CAEA,gBAAeK,MAAO"}
package/core/Header.js CHANGED
@@ -1,2 +1,2 @@
1
- import React,{useState,useEffect,useRef,useMemo}from"react";import Icon from"./Icon";import cn from"./utils/cn";import Logo from"./Logo";import{componentMaxHeight,HEADER_BOTTOM_MARGIN,HEADER_HEIGHT}from"./utils/heights";import{HeaderLinks}from"./Header/HeaderLinks";import throttle from"lodash.throttle";const FLEXIBLE_DESKTOP_CLASSES="hidden md:flex flex-1 items-center h-full";const MAX_MOBILE_MENU_WIDTH="560px";const Header=({searchBar,searchButton,logoHref,headerLinks,nav,mobileNav,sessionState,themedScrollpoints=[],searchButtonVisibility="all"})=>{const[showMenu,setShowMenu]=useState(false);const[fadingOut,setFadingOut]=useState(false);const[scrollpointClasses,setScrollpointClasses]=useState("");const menuRef=useRef(null);const closeMenu=()=>{setFadingOut(true);setTimeout(()=>{setShowMenu(false);setFadingOut(false)},150)};useEffect(()=>{const handleResize=()=>{if(window.innerWidth>=1040){setShowMenu(false)}};window.addEventListener("resize",handleResize);return()=>window.removeEventListener("resize",handleResize)},[]);useEffect(()=>{if(showMenu){document.body.classList.add("overflow-hidden")}else{document.body.classList.remove("overflow-hidden")}return()=>{document.body.classList.remove("overflow-hidden")}},[showMenu]);useEffect(()=>{const handleScroll=()=>{for(const scrollpoint of themedScrollpoints){const element=document.getElementById(scrollpoint.id);if(element){const rect=element.getBoundingClientRect();if(rect.top<=HEADER_HEIGHT&&rect.bottom>=HEADER_HEIGHT){setScrollpointClasses(scrollpoint.className);return}}}};const throttledHandleScroll=throttle(handleScroll,150);handleScroll();window.addEventListener("scroll",throttledHandleScroll);return()=>window.removeEventListener("scroll",throttledHandleScroll)},[themedScrollpoints]);const wrappedSearchButton=useMemo(()=>searchButton?React.createElement("div",{className:"text-neutral-1300 dark:text-neutral-000 flex items-center p-6"},searchButton):null,[searchButton]);return React.createElement(React.Fragment,null,React.createElement("header",{role:"banner",className:cn("fixed top-0 left-0 w-full z-10 bg-neutral-000 dark:bg-neutral-1300 border-b border-neutral-300 dark:border-neutral-1000 transition-colors px-24 md:px-64",scrollpointClasses),style:{height:HEADER_HEIGHT}},React.createElement("div",{className:"flex items-center h-full"},React.createElement("nav",{className:"flex flex-1 h-full items-center"},["light","dark"].map(theme=>React.createElement(Logo,{key:theme,href:logoHref,theme:theme,additionalLinkAttrs:{className:cn("h-full focus-base rounded mr-32 w-[108px]",{"flex dark:hidden":theme==="light","hidden dark:flex":theme==="dark"})}})),React.createElement("div",{className:FLEXIBLE_DESKTOP_CLASSES},nav)),React.createElement("div",{className:"flex md:hidden flex-1 items-center justify-end gap-24 h-full"},searchButtonVisibility!=="desktop"?wrappedSearchButton:null,React.createElement("button",{className:"cursor-pointer focus-base rounded flex items-center",onClick:()=>setShowMenu(!showMenu),"aria-expanded":showMenu,"aria-controls":"mobile-menu","aria-label":"Toggle menu"},React.createElement(Icon,{name:showMenu?"icon-gui-x-mark-outline":"icon-gui-bars-3-outline",additionalCSS:"text-neutral-1300 dark:text-neutral-000",size:"1.5rem"}))),searchBar?React.createElement("div",{className:cn(FLEXIBLE_DESKTOP_CLASSES,"justify-center")},searchBar):null,React.createElement(HeaderLinks,{className:FLEXIBLE_DESKTOP_CLASSES,headerLinks:headerLinks,sessionState:sessionState,searchButton:wrappedSearchButton,searchButtonVisibility:searchButtonVisibility}))),showMenu?React.createElement(React.Fragment,null,React.createElement("div",{className:cn("fixed inset-0 bg-neutral-1300 dark:bg-neutral-1300",{"animate-[fade-in-ten-percent_150ms_ease-in-out_forwards]":!fadingOut,"animate-[fade-out-ten-percent_150ms_ease-in-out_forwards]":fadingOut}),onClick:closeMenu,onKeyDown:e=>e.key==="Escape"&&closeMenu(),role:"presentation"}),React.createElement("div",{id:"mobile-menu",className:"md:hidden fixed flex flex-col top-[76px] overflow-y-hidden mx-12 right-0 w-[calc(100%-24px)] bg-neutral-000 dark:bg-neutral-1300 rounded-2xl ui-shadow-lg-medium z-20",style:{maxWidth:MAX_MOBILE_MENU_WIDTH,maxHeight:componentMaxHeight(HEADER_HEIGHT,HEADER_BOTTOM_MARGIN)},ref:menuRef,role:"navigation"},mobileNav,React.createElement(HeaderLinks,{headerLinks:headerLinks,sessionState:sessionState}))):null)};export default Header;
1
+ import React,{useState,useEffect,useRef,useMemo}from"react";import Icon from"./Icon";import cn from"./utils/cn";import Logo from"./Logo";import{componentMaxHeight,HEADER_BOTTOM_MARGIN,HEADER_HEIGHT}from"./utils/heights";import{HeaderLinks}from"./Header/HeaderLinks";import throttle from"lodash.throttle";import{COLLAPSE_TRIGGER_DISTANCE}from"./Notice/component";const FLEXIBLE_DESKTOP_CLASSES="hidden md:flex flex-1 items-center h-full";const MAX_MOBILE_MENU_WIDTH="560px";const Header=({headerClassName,searchBar,searchButton,logoHref,headerLinks,nav,mobileNav,sessionState,themedScrollpoints=[],searchButtonVisibility="all"})=>{const[showMenu,setShowMenu]=useState(false);const[fadingOut,setFadingOut]=useState(false);const[scrollpointClasses,setScrollpointClasses]=useState("");const[bannerVisible,setBannerVisible]=useState(true);const menuRef=useRef(null);const closeMenu=()=>{setFadingOut(true);setTimeout(()=>{setShowMenu(false);setFadingOut(false)},150)};useEffect(()=>{const handleResize=()=>{if(window.innerWidth>=1040){setShowMenu(false)}};window.addEventListener("resize",handleResize);return()=>window.removeEventListener("resize",handleResize)},[]);useEffect(()=>{if(showMenu){document.body.classList.add("overflow-hidden")}else{document.body.classList.remove("overflow-hidden")}return()=>{document.body.classList.remove("overflow-hidden")}},[showMenu]);useEffect(()=>{const handleScroll=()=>{for(const scrollpoint of themedScrollpoints){const element=document.getElementById(scrollpoint.id);if(element){const rect=element.getBoundingClientRect();if(rect.top<=HEADER_HEIGHT&&rect.bottom>=HEADER_HEIGHT){setScrollpointClasses(scrollpoint.className);return}}}if(window.scrollY>COLLAPSE_TRIGGER_DISTANCE){setBannerVisible(false)}else{setBannerVisible(true)}};const throttledHandleScroll=throttle(handleScroll,150);handleScroll();window.addEventListener("scroll",throttledHandleScroll);return()=>window.removeEventListener("scroll",throttledHandleScroll)},[themedScrollpoints]);const wrappedSearchButton=useMemo(()=>searchButton?React.createElement("div",{className:"text-neutral-1300 dark:text-neutral-000 flex items-center p-6"},searchButton):null,[searchButton]);return React.createElement(React.Fragment,null,React.createElement("header",{role:"banner",className:cn("fixed left-0 w-full z-10 bg-neutral-000 dark:bg-neutral-1300 border-b border-neutral-300 dark:border-neutral-1000 transition-colors px-24 md:px-64",scrollpointClasses,{"md:top-0 transition-transform duration-300 ease-in-out":!bannerVisible}),style:{height:HEADER_HEIGHT}},React.createElement("div",{className:cn("flex items-center h-full",headerClassName)},React.createElement("nav",{className:"flex flex-1 h-full items-center"},["light","dark"].map(theme=>React.createElement(Logo,{key:theme,href:logoHref,theme:theme,additionalLinkAttrs:{className:cn("h-full focus-base rounded mr-32 w-[108px]",{"flex dark:hidden":theme==="light","hidden dark:flex":theme==="dark"})}})),React.createElement("div",{className:FLEXIBLE_DESKTOP_CLASSES},nav)),React.createElement("div",{className:"flex md:hidden flex-1 items-center justify-end gap-24 h-full"},searchButtonVisibility!=="desktop"?wrappedSearchButton:null,React.createElement("button",{className:"cursor-pointer focus-base rounded flex items-center",onClick:()=>setShowMenu(!showMenu),"aria-expanded":showMenu,"aria-controls":"mobile-menu","aria-label":"Toggle menu"},React.createElement(Icon,{name:showMenu?"icon-gui-x-mark-outline":"icon-gui-bars-3-outline",additionalCSS:"text-neutral-1300 dark:text-neutral-000",size:"1.5rem"}))),searchBar?React.createElement("div",{className:cn(FLEXIBLE_DESKTOP_CLASSES,"justify-center")},searchBar):null,React.createElement(HeaderLinks,{className:FLEXIBLE_DESKTOP_CLASSES,headerLinks:headerLinks,sessionState:sessionState,searchButton:wrappedSearchButton,searchButtonVisibility:searchButtonVisibility}))),showMenu?React.createElement(React.Fragment,null,React.createElement("div",{className:cn("fixed inset-0 bg-neutral-1300 dark:bg-neutral-1300",{"animate-[fade-in-ten-percent_150ms_ease-in-out_forwards]":!fadingOut,"animate-[fade-out-ten-percent_150ms_ease-in-out_forwards]":fadingOut}),onClick:closeMenu,onKeyDown:e=>e.key==="Escape"&&closeMenu(),role:"presentation"}),React.createElement("div",{id:"mobile-menu",className:"md:hidden fixed flex flex-col top-[76px] overflow-y-hidden mx-12 right-0 w-[calc(100%-24px)] bg-neutral-000 dark:bg-neutral-1300 rounded-2xl ui-shadow-lg-medium z-20",style:{maxWidth:MAX_MOBILE_MENU_WIDTH,maxHeight:componentMaxHeight(HEADER_HEIGHT,HEADER_BOTTOM_MARGIN)},ref:menuRef,role:"navigation"},mobileNav,React.createElement(HeaderLinks,{headerLinks:headerLinks,sessionState:sessionState}))):null)};export default Header;
2
2
  //# sourceMappingURL=Header.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/Header.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, ReactNode, useMemo } from \"react\";\nimport Icon from \"./Icon\";\nimport cn from \"./utils/cn\";\nimport Logo from \"./Logo\";\nimport {\n componentMaxHeight,\n HEADER_BOTTOM_MARGIN,\n HEADER_HEIGHT,\n} from \"./utils/heights\";\nimport { HeaderLinks } from \"./Header/HeaderLinks\";\nimport throttle from \"lodash.throttle\";\nimport { Theme } from \"./styles/colors/types\";\n\nexport type ThemedScrollpoint = {\n id: string;\n className: string;\n};\n\n/**\n * Represents the state of the user session in the header.\n */\nexport type HeaderSessionState = {\n /**\n * Indicates if the user is signed in.\n */\n signedIn: boolean;\n\n /**\n * Information required to log out the user.\n */\n logOut: {\n /**\n * Token used for logging out.\n */\n token: string;\n\n /**\n * URL to log out the user.\n */\n href: string;\n };\n\n /**\n * Name of the user's account.\n */\n accountName: string;\n};\n\n/**\n * Props for the Header component.\n */\nexport type HeaderProps = {\n /**\n * Optional search bar element.\n */\n searchBar?: ReactNode;\n\n /**\n * Optional search button element.\n */\n searchButton?: ReactNode;\n\n /**\n * URL for the logo link.\n */\n logoHref?: string;\n\n /**\n * Array of header links.\n */\n headerLinks?: {\n /**\n * URL for the link.\n */\n href: string;\n\n /**\n * Label for the link.\n */\n label: string;\n\n /**\n * Indicates if the link should open in a new tab.\n */\n external?: boolean;\n }[];\n\n /**\n * Optional desktop navigation element.\n */\n nav?: ReactNode;\n\n /**\n * Optional mobile navigation element.\n */\n mobileNav?: ReactNode;\n\n /**\n * State of the user session.\n */\n sessionState?: HeaderSessionState;\n\n /**\n * Array of themed scrollpoints. The header will change its appearance based on the scrollpoint in view.\n */\n themedScrollpoints?: ThemedScrollpoint[];\n\n /**\n * Visibility setting for the search button.\n * - \"all\": Visible on all devices.\n * - \"desktop\": Visible only on desktop devices.\n * - \"mobile\": Visible only on mobile devices.\n */\n searchButtonVisibility?: \"all\" | \"desktop\" | \"mobile\";\n};\n\nconst FLEXIBLE_DESKTOP_CLASSES = \"hidden md:flex flex-1 items-center h-full\";\n\n/**\n * Maximum width before the menu expanded into full width\n */\nconst MAX_MOBILE_MENU_WIDTH = \"560px\";\n\nconst Header: React.FC<HeaderProps> = ({\n searchBar,\n searchButton,\n logoHref,\n headerLinks,\n nav,\n mobileNav,\n sessionState,\n themedScrollpoints = [],\n searchButtonVisibility = \"all\",\n}) => {\n const [showMenu, setShowMenu] = useState(false);\n const [fadingOut, setFadingOut] = useState(false);\n const [scrollpointClasses, setScrollpointClasses] = useState<string>(\"\");\n const menuRef = useRef<HTMLDivElement>(null);\n\n const closeMenu = () => {\n setFadingOut(true);\n\n setTimeout(() => {\n setShowMenu(false);\n setFadingOut(false);\n }, 150);\n };\n\n useEffect(() => {\n const handleResize = () => {\n if (window.innerWidth >= 1040) {\n setShowMenu(false);\n }\n };\n\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n useEffect(() => {\n if (showMenu) {\n document.body.classList.add(\"overflow-hidden\");\n } else {\n document.body.classList.remove(\"overflow-hidden\");\n }\n\n // Cleanup on unmount\n return () => {\n document.body.classList.remove(\"overflow-hidden\");\n };\n }, [showMenu]);\n\n useEffect(() => {\n const handleScroll = () => {\n for (const scrollpoint of themedScrollpoints) {\n const element = document.getElementById(scrollpoint.id);\n if (element) {\n const rect = element.getBoundingClientRect();\n if (rect.top <= HEADER_HEIGHT && rect.bottom >= HEADER_HEIGHT) {\n setScrollpointClasses(scrollpoint.className);\n return;\n }\n }\n }\n };\n\n const throttledHandleScroll = throttle(handleScroll, 150);\n\n handleScroll();\n\n window.addEventListener(\"scroll\", throttledHandleScroll);\n return () => window.removeEventListener(\"scroll\", throttledHandleScroll);\n }, [themedScrollpoints]);\n\n const wrappedSearchButton = useMemo(\n () =>\n searchButton ? (\n <div className=\"text-neutral-1300 dark:text-neutral-000 flex items-center p-6\">\n {searchButton}\n </div>\n ) : null,\n [searchButton],\n );\n\n return (\n <>\n <header\n role=\"banner\"\n className={cn(\n \"fixed top-0 left-0 w-full z-10 bg-neutral-000 dark:bg-neutral-1300 border-b border-neutral-300 dark:border-neutral-1000 transition-colors px-24 md:px-64\",\n scrollpointClasses,\n )}\n style={{ height: HEADER_HEIGHT }}\n >\n <div className=\"flex items-center h-full\">\n <nav className=\"flex flex-1 h-full items-center\">\n {([\"light\", \"dark\"] as Theme[]).map((theme) => (\n <Logo\n key={theme}\n href={logoHref}\n theme={theme}\n additionalLinkAttrs={{\n className: cn(\"h-full focus-base rounded mr-32 w-[108px]\", {\n \"flex dark:hidden\": theme === \"light\",\n \"hidden dark:flex\": theme === \"dark\",\n }),\n }}\n />\n ))}\n <div className={FLEXIBLE_DESKTOP_CLASSES}>{nav}</div>\n </nav>\n <div className=\"flex md:hidden flex-1 items-center justify-end gap-24 h-full\">\n {searchButtonVisibility !== \"desktop\" ? wrappedSearchButton : null}\n <button\n className=\"cursor-pointer focus-base rounded flex items-center\"\n onClick={() => setShowMenu(!showMenu)}\n aria-expanded={showMenu}\n aria-controls=\"mobile-menu\"\n aria-label=\"Toggle menu\"\n >\n <Icon\n name={\n showMenu\n ? \"icon-gui-x-mark-outline\"\n : \"icon-gui-bars-3-outline\"\n }\n additionalCSS=\"text-neutral-1300 dark:text-neutral-000\"\n size=\"1.5rem\"\n />\n </button>\n </div>\n {searchBar ? (\n <div className={cn(FLEXIBLE_DESKTOP_CLASSES, \"justify-center\")}>\n {searchBar}\n </div>\n ) : null}\n <HeaderLinks\n className={FLEXIBLE_DESKTOP_CLASSES}\n headerLinks={headerLinks}\n sessionState={sessionState}\n searchButton={wrappedSearchButton}\n searchButtonVisibility={searchButtonVisibility}\n />\n </div>\n </header>\n {showMenu ? (\n <>\n <div\n className={cn(\n \"fixed inset-0 bg-neutral-1300 dark:bg-neutral-1300\",\n {\n \"animate-[fade-in-ten-percent_150ms_ease-in-out_forwards]\":\n !fadingOut,\n \"animate-[fade-out-ten-percent_150ms_ease-in-out_forwards]\":\n fadingOut,\n },\n )}\n onClick={closeMenu}\n onKeyDown={(e) => e.key === \"Escape\" && closeMenu()}\n role=\"presentation\"\n />\n <div\n id=\"mobile-menu\"\n className=\"md:hidden fixed flex flex-col top-[76px] overflow-y-hidden mx-12 right-0 w-[calc(100%-24px)] bg-neutral-000 dark:bg-neutral-1300 rounded-2xl ui-shadow-lg-medium z-20\"\n style={{\n maxWidth: MAX_MOBILE_MENU_WIDTH,\n maxHeight: componentMaxHeight(\n HEADER_HEIGHT,\n HEADER_BOTTOM_MARGIN,\n ),\n }}\n ref={menuRef}\n role=\"navigation\"\n >\n {mobileNav}\n <HeaderLinks\n headerLinks={headerLinks}\n sessionState={sessionState}\n />\n </div>\n </>\n ) : null}\n </>\n );\n};\n\nexport default Header;\n"],"names":["React","useState","useEffect","useRef","useMemo","Icon","cn","Logo","componentMaxHeight","HEADER_BOTTOM_MARGIN","HEADER_HEIGHT","HeaderLinks","throttle","FLEXIBLE_DESKTOP_CLASSES","MAX_MOBILE_MENU_WIDTH","Header","searchBar","searchButton","logoHref","headerLinks","nav","mobileNav","sessionState","themedScrollpoints","searchButtonVisibility","showMenu","setShowMenu","fadingOut","setFadingOut","scrollpointClasses","setScrollpointClasses","menuRef","closeMenu","setTimeout","handleResize","window","innerWidth","addEventListener","removeEventListener","document","body","classList","add","remove","handleScroll","scrollpoint","element","getElementById","id","rect","getBoundingClientRect","top","bottom","className","throttledHandleScroll","wrappedSearchButton","div","header","role","style","height","map","theme","key","href","additionalLinkAttrs","button","onClick","aria-expanded","aria-controls","aria-label","name","additionalCSS","size","onKeyDown","e","maxWidth","maxHeight","ref"],"mappings":"AAAA,OAAOA,OAASC,QAAQ,CAAEC,SAAS,CAAEC,MAAM,CAAaC,OAAO,KAAQ,OAAQ,AAC/E,QAAOC,SAAU,QAAS,AAC1B,QAAOC,OAAQ,YAAa,AAC5B,QAAOC,SAAU,QAAS,AAC1B,QACEC,kBAAkB,CAClBC,oBAAoB,CACpBC,aAAa,KACR,iBAAkB,AACzB,QAASC,WAAW,KAAQ,sBAAuB,AACnD,QAAOC,aAAc,iBAAkB,CA0GvC,MAAMC,yBAA2B,4CAKjC,MAAMC,sBAAwB,QAE9B,MAAMC,OAAgC,CAAC,CACrCC,SAAS,CACTC,YAAY,CACZC,QAAQ,CACRC,WAAW,CACXC,GAAG,CACHC,SAAS,CACTC,YAAY,CACZC,mBAAqB,EAAE,CACvBC,uBAAyB,KAAK,CAC/B,IACC,KAAM,CAACC,SAAUC,YAAY,CAAGzB,SAAS,OACzC,KAAM,CAAC0B,UAAWC,aAAa,CAAG3B,SAAS,OAC3C,KAAM,CAAC4B,mBAAoBC,sBAAsB,CAAG7B,SAAiB,IACrE,MAAM8B,QAAU5B,OAAuB,MAEvC,MAAM6B,UAAY,KAChBJ,aAAa,MAEbK,WAAW,KACTP,YAAY,OACZE,aAAa,MACf,EAAG,IACL,EAEA1B,UAAU,KACR,MAAMgC,aAAe,KACnB,GAAIC,OAAOC,UAAU,EAAI,KAAM,CAC7BV,YAAY,MACd,CACF,EAEAS,OAAOE,gBAAgB,CAAC,SAAUH,cAClC,MAAO,IAAMC,OAAOG,mBAAmB,CAAC,SAAUJ,aACpD,EAAG,EAAE,EAELhC,UAAU,KACR,GAAIuB,SAAU,CACZc,SAASC,IAAI,CAACC,SAAS,CAACC,GAAG,CAAC,kBAC9B,KAAO,CACLH,SAASC,IAAI,CAACC,SAAS,CAACE,MAAM,CAAC,kBACjC,CAGA,MAAO,KACLJ,SAASC,IAAI,CAACC,SAAS,CAACE,MAAM,CAAC,kBACjC,CACF,EAAG,CAAClB,SAAS,EAEbvB,UAAU,KACR,MAAM0C,aAAe,KACnB,IAAK,MAAMC,eAAetB,mBAAoB,CAC5C,MAAMuB,QAAUP,SAASQ,cAAc,CAACF,YAAYG,EAAE,EACtD,GAAIF,QAAS,CACX,MAAMG,KAAOH,QAAQI,qBAAqB,GAC1C,GAAID,KAAKE,GAAG,EAAIzC,eAAiBuC,KAAKG,MAAM,EAAI1C,cAAe,CAC7DoB,sBAAsBe,YAAYQ,SAAS,EAC3C,MACF,CACF,CACF,CACF,EAEA,MAAMC,sBAAwB1C,SAASgC,aAAc,KAErDA,eAEAT,OAAOE,gBAAgB,CAAC,SAAUiB,uBAClC,MAAO,IAAMnB,OAAOG,mBAAmB,CAAC,SAAUgB,sBACpD,EAAG,CAAC/B,mBAAmB,EAEvB,MAAMgC,oBAAsBnD,QAC1B,IACEa,aACE,oBAACuC,OAAIH,UAAU,iEACZpC,cAED,KACN,CAACA,aAAa,EAGhB,OACE,wCACE,oBAACwC,UACCC,KAAK,SACLL,UAAW/C,GACT,2JACAuB,oBAEF8B,MAAO,CAAEC,OAAQlD,aAAc,GAE/B,oBAAC8C,OAAIH,UAAU,4BACb,oBAACjC,OAAIiC,UAAU,mCACZ,AAAC,CAAC,QAAS,OAAO,CAAaQ,GAAG,CAAC,AAACC,OACnC,oBAACvD,MACCwD,IAAKD,MACLE,KAAM9C,SACN4C,MAAOA,MACPG,oBAAqB,CACnBZ,UAAW/C,GAAG,4CAA6C,CACzD,mBAAoBwD,QAAU,QAC9B,mBAAoBA,QAAU,MAChC,EACF,KAGJ,oBAACN,OAAIH,UAAWxC,0BAA2BO,MAE7C,oBAACoC,OAAIH,UAAU,gEACZ7B,yBAA2B,UAAY+B,oBAAsB,KAC9D,oBAACW,UACCb,UAAU,sDACVc,QAAS,IAAMzC,YAAY,CAACD,UAC5B2C,gBAAe3C,SACf4C,gBAAc,cACdC,aAAW,eAEX,oBAACjE,MACCkE,KACE9C,SACI,0BACA,0BAEN+C,cAAc,0CACdC,KAAK,aAIVzD,UACC,oBAACwC,OAAIH,UAAW/C,GAAGO,yBAA0B,mBAC1CG,WAED,KACJ,oBAACL,aACC0C,UAAWxC,yBACXM,YAAaA,YACbG,aAAcA,aACdL,aAAcsC,oBACd/B,uBAAwBA,2BAI7BC,SACC,wCACE,oBAAC+B,OACCH,UAAW/C,GACT,qDACA,CACE,2DACE,CAACqB,UACH,4DACEA,SACJ,GAEFwC,QAASnC,UACT0C,UAAW,AAACC,GAAMA,EAAEZ,GAAG,GAAK,UAAY/B,YACxC0B,KAAK,iBAEP,oBAACF,OACCR,GAAG,cACHK,UAAU,wKACVM,MAAO,CACLiB,SAAU9D,sBACV+D,UAAWrE,mBACTE,cACAD,qBAEJ,EACAqE,IAAK/C,QACL2B,KAAK,cAEJrC,UACD,oBAACV,aACCQ,YAAaA,YACbG,aAAcA,iBAIlB,KAGV,CAEA,gBAAeP,MAAO"}
1
+ {"version":3,"sources":["../../src/core/Header.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, ReactNode, useMemo } from \"react\";\nimport Icon from \"./Icon\";\nimport cn from \"./utils/cn\";\nimport Logo from \"./Logo\";\nimport {\n componentMaxHeight,\n HEADER_BOTTOM_MARGIN,\n HEADER_HEIGHT,\n} from \"./utils/heights\";\nimport { HeaderLinks } from \"./Header/HeaderLinks\";\nimport throttle from \"lodash.throttle\";\nimport { Theme } from \"./styles/colors/types\";\nimport { COLLAPSE_TRIGGER_DISTANCE } from \"./Notice/component\";\n\nexport type ThemedScrollpoint = {\n id: string;\n className: string;\n};\n\n/**\n * Represents the state of the user session in the header.\n */\nexport type HeaderSessionState = {\n /**\n * Indicates if the user is signed in.\n */\n signedIn: boolean;\n\n /**\n * Information required to log out the user.\n */\n logOut: {\n /**\n * Token used for logging out.\n */\n token: string;\n\n /**\n * URL to log out the user.\n */\n href: string;\n };\n\n /**\n * Name of the user's account.\n */\n accountName: string;\n};\n\n/**\n * Props for the Header component.\n */\nexport type HeaderProps = {\n headerClassName?: string;\n /**\n * Optional search bar element.\n */\n searchBar?: ReactNode;\n\n /**\n * Optional search button element.\n */\n searchButton?: ReactNode;\n\n /**\n * URL for the logo link.\n */\n logoHref?: string;\n\n /**\n * Array of header links.\n */\n headerLinks?: {\n /**\n * URL for the link.\n */\n href: string;\n\n /**\n * Label for the link.\n */\n label: string;\n\n /**\n * Indicates if the link should open in a new tab.\n */\n external?: boolean;\n }[];\n\n /**\n * Optional desktop navigation element.\n */\n nav?: ReactNode;\n\n /**\n * Optional mobile navigation element.\n */\n mobileNav?: ReactNode;\n\n /**\n * State of the user session.\n */\n sessionState?: HeaderSessionState;\n\n /**\n * Array of themed scrollpoints. The header will change its appearance based on the scrollpoint in view.\n */\n themedScrollpoints?: ThemedScrollpoint[];\n\n /**\n * Visibility setting for the search button.\n * - \"all\": Visible on all devices.\n * - \"desktop\": Visible only on desktop devices.\n * - \"mobile\": Visible only on mobile devices.\n */\n searchButtonVisibility?: \"all\" | \"desktop\" | \"mobile\";\n};\n\nconst FLEXIBLE_DESKTOP_CLASSES = \"hidden md:flex flex-1 items-center h-full\";\n\n/**\n * Maximum width before the menu expanded into full width\n */\nconst MAX_MOBILE_MENU_WIDTH = \"560px\";\n\nconst Header: React.FC<HeaderProps> = ({\n headerClassName,\n searchBar,\n searchButton,\n logoHref,\n headerLinks,\n nav,\n mobileNav,\n sessionState,\n themedScrollpoints = [],\n searchButtonVisibility = \"all\",\n}) => {\n const [showMenu, setShowMenu] = useState(false);\n const [fadingOut, setFadingOut] = useState(false);\n const [scrollpointClasses, setScrollpointClasses] = useState<string>(\"\");\n const [bannerVisible, setBannerVisible] = useState(true);\n const menuRef = useRef<HTMLDivElement>(null);\n\n const closeMenu = () => {\n setFadingOut(true);\n\n setTimeout(() => {\n setShowMenu(false);\n setFadingOut(false);\n }, 150);\n };\n\n useEffect(() => {\n const handleResize = () => {\n if (window.innerWidth >= 1040) {\n setShowMenu(false);\n }\n };\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n useEffect(() => {\n if (showMenu) {\n document.body.classList.add(\"overflow-hidden\");\n } else {\n document.body.classList.remove(\"overflow-hidden\");\n }\n\n // Cleanup on unmount\n return () => {\n document.body.classList.remove(\"overflow-hidden\");\n };\n }, [showMenu]);\n\n useEffect(() => {\n const handleScroll = () => {\n for (const scrollpoint of themedScrollpoints) {\n const element = document.getElementById(scrollpoint.id);\n if (element) {\n const rect = element.getBoundingClientRect();\n if (rect.top <= HEADER_HEIGHT && rect.bottom >= HEADER_HEIGHT) {\n setScrollpointClasses(scrollpoint.className);\n return;\n }\n }\n }\n if (window.scrollY > COLLAPSE_TRIGGER_DISTANCE) {\n setBannerVisible(false);\n } else {\n setBannerVisible(true);\n }\n };\n\n const throttledHandleScroll = throttle(handleScroll, 150);\n\n handleScroll();\n\n window.addEventListener(\"scroll\", throttledHandleScroll);\n return () => window.removeEventListener(\"scroll\", throttledHandleScroll);\n }, [themedScrollpoints]);\n\n const wrappedSearchButton = useMemo(\n () =>\n searchButton ? (\n <div className=\"text-neutral-1300 dark:text-neutral-000 flex items-center p-6\">\n {searchButton}\n </div>\n ) : null,\n [searchButton],\n );\n\n return (\n <>\n <header\n role=\"banner\"\n className={cn(\n \"fixed left-0 w-full z-10 bg-neutral-000 dark:bg-neutral-1300 border-b border-neutral-300 dark:border-neutral-1000 transition-colors px-24 md:px-64\",\n scrollpointClasses,\n {\n \"md:top-0 transition-transform duration-300 ease-in-out\":\n !bannerVisible,\n },\n )}\n style={{ height: HEADER_HEIGHT }}\n >\n <div className={cn(\"flex items-center h-full\", headerClassName)}>\n <nav className=\"flex flex-1 h-full items-center\">\n {([\"light\", \"dark\"] as Theme[]).map((theme) => (\n <Logo\n key={theme}\n href={logoHref}\n theme={theme}\n additionalLinkAttrs={{\n className: cn(\"h-full focus-base rounded mr-32 w-[108px]\", {\n \"flex dark:hidden\": theme === \"light\",\n \"hidden dark:flex\": theme === \"dark\",\n }),\n }}\n />\n ))}\n <div className={FLEXIBLE_DESKTOP_CLASSES}>{nav}</div>\n </nav>\n <div className=\"flex md:hidden flex-1 items-center justify-end gap-24 h-full\">\n {searchButtonVisibility !== \"desktop\" ? wrappedSearchButton : null}\n <button\n className=\"cursor-pointer focus-base rounded flex items-center\"\n onClick={() => setShowMenu(!showMenu)}\n aria-expanded={showMenu}\n aria-controls=\"mobile-menu\"\n aria-label=\"Toggle menu\"\n >\n <Icon\n name={\n showMenu\n ? \"icon-gui-x-mark-outline\"\n : \"icon-gui-bars-3-outline\"\n }\n additionalCSS=\"text-neutral-1300 dark:text-neutral-000\"\n size=\"1.5rem\"\n />\n </button>\n </div>\n {searchBar ? (\n <div className={cn(FLEXIBLE_DESKTOP_CLASSES, \"justify-center\")}>\n {searchBar}\n </div>\n ) : null}\n <HeaderLinks\n className={FLEXIBLE_DESKTOP_CLASSES}\n headerLinks={headerLinks}\n sessionState={sessionState}\n searchButton={wrappedSearchButton}\n searchButtonVisibility={searchButtonVisibility}\n />\n </div>\n </header>\n {showMenu ? (\n <>\n <div\n className={cn(\n \"fixed inset-0 bg-neutral-1300 dark:bg-neutral-1300\",\n {\n \"animate-[fade-in-ten-percent_150ms_ease-in-out_forwards]\":\n !fadingOut,\n \"animate-[fade-out-ten-percent_150ms_ease-in-out_forwards]\":\n fadingOut,\n },\n )}\n onClick={closeMenu}\n onKeyDown={(e) => e.key === \"Escape\" && closeMenu()}\n role=\"presentation\"\n />\n <div\n id=\"mobile-menu\"\n className=\"md:hidden fixed flex flex-col top-[76px] overflow-y-hidden mx-12 right-0 w-[calc(100%-24px)] bg-neutral-000 dark:bg-neutral-1300 rounded-2xl ui-shadow-lg-medium z-20\"\n style={{\n maxWidth: MAX_MOBILE_MENU_WIDTH,\n maxHeight: componentMaxHeight(\n HEADER_HEIGHT,\n HEADER_BOTTOM_MARGIN,\n ),\n }}\n ref={menuRef}\n role=\"navigation\"\n >\n {mobileNav}\n <HeaderLinks\n headerLinks={headerLinks}\n sessionState={sessionState}\n />\n </div>\n </>\n ) : null}\n </>\n );\n};\n\nexport default Header;\n"],"names":["React","useState","useEffect","useRef","useMemo","Icon","cn","Logo","componentMaxHeight","HEADER_BOTTOM_MARGIN","HEADER_HEIGHT","HeaderLinks","throttle","COLLAPSE_TRIGGER_DISTANCE","FLEXIBLE_DESKTOP_CLASSES","MAX_MOBILE_MENU_WIDTH","Header","headerClassName","searchBar","searchButton","logoHref","headerLinks","nav","mobileNav","sessionState","themedScrollpoints","searchButtonVisibility","showMenu","setShowMenu","fadingOut","setFadingOut","scrollpointClasses","setScrollpointClasses","bannerVisible","setBannerVisible","menuRef","closeMenu","setTimeout","handleResize","window","innerWidth","addEventListener","removeEventListener","document","body","classList","add","remove","handleScroll","scrollpoint","element","getElementById","id","rect","getBoundingClientRect","top","bottom","className","scrollY","throttledHandleScroll","wrappedSearchButton","div","header","role","style","height","map","theme","key","href","additionalLinkAttrs","button","onClick","aria-expanded","aria-controls","aria-label","name","additionalCSS","size","onKeyDown","e","maxWidth","maxHeight","ref"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{queryIdAll}from"../../dom-query";import{selectRecentBlogPosts}from"../../remote-blogs-posts";import{connectState}from"../../remote-data-store";const template=({link,title,pubDate})=>{const[li,a,heading,copy]=["li","a","p","p"].map(el=>document.createElement(el));a.href=link;a.classList.add("ui-meganav-media","group");heading.textContent=title;heading.classList.add("ui-meganav-media-heading");copy.textContent=pubDate;copy.classList.add("ui-meganav-media-copy");a.appendChild(heading);a.appendChild(copy);li.appendChild(a);return li};export default(()=>{connectState(selectRecentBlogPosts,recentBlogPosts=>{if(Array.isArray(recentBlogPosts)&&recentBlogPosts.length>0){const sections=queryIdAll("meganav-company-panel-blog-section");const containers=queryIdAll("meganav-company-panel-recent-blog-posts");Array.from(containers).forEach(container=>{const fragment=document.createDocumentFragment();recentBlogPosts.forEach(post=>fragment.appendChild(template(post)));container.appendChild(fragment)});Array.from(sections).forEach(section=>section.classList.remove("hidden"))}})});
2
+ //# sourceMappingURL=component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/core/LegacyMeganav/MeganavBlogPostsList/component.js"],"sourcesContent":["import { queryIdAll } from \"../../dom-query\";\nimport { selectRecentBlogPosts } from \"../../remote-blogs-posts\";\nimport { connectState } from \"../../remote-data-store\";\n\nconst template = ({ link, title, pubDate }) => {\n const [li, a, heading, copy] = [\"li\", \"a\", \"p\", \"p\"].map((el) =>\n document.createElement(el),\n );\n\n a.href = link;\n a.classList.add(\"ui-meganav-media\", \"group\");\n\n heading.textContent = title;\n heading.classList.add(\"ui-meganav-media-heading\");\n\n copy.textContent = pubDate;\n copy.classList.add(\"ui-meganav-media-copy\");\n\n a.appendChild(heading);\n a.appendChild(copy);\n li.appendChild(a);\n\n return li;\n};\n\nexport default () => {\n connectState(selectRecentBlogPosts, (recentBlogPosts) => {\n if (Array.isArray(recentBlogPosts) && recentBlogPosts.length > 0) {\n const sections = queryIdAll(\"meganav-company-panel-blog-section\");\n const containers = queryIdAll(\"meganav-company-panel-recent-blog-posts\");\n\n Array.from(containers).forEach((container) => {\n const fragment = document.createDocumentFragment();\n recentBlogPosts.forEach((post) => fragment.appendChild(template(post)));\n container.appendChild(fragment);\n });\n\n Array.from(sections).forEach((section) =>\n section.classList.remove(\"hidden\"),\n );\n }\n });\n};\n"],"names":["queryIdAll","selectRecentBlogPosts","connectState","template","link","title","pubDate","li","a","heading","copy","map","el","document","createElement","href","classList","add","textContent","appendChild","recentBlogPosts","Array","isArray","length","sections","containers","from","forEach","container","fragment","createDocumentFragment","post","section","remove"],"mappings":"AAAA,OAASA,UAAU,KAAQ,iBAAkB,AAC7C,QAASC,qBAAqB,KAAQ,0BAA2B,AACjE,QAASC,YAAY,KAAQ,yBAA0B,CAEvD,MAAMC,SAAW,CAAC,CAAEC,IAAI,CAAEC,KAAK,CAAEC,OAAO,CAAE,IACxC,KAAM,CAACC,GAAIC,EAAGC,QAASC,KAAK,CAAG,CAAC,KAAM,IAAK,IAAK,IAAI,CAACC,GAAG,CAAC,AAACC,IACxDC,SAASC,aAAa,CAACF,IAGzBJ,CAAAA,EAAEO,IAAI,CAAGX,KACTI,EAAEQ,SAAS,CAACC,GAAG,CAAC,mBAAoB,QAEpCR,CAAAA,QAAQS,WAAW,CAAGb,MACtBI,QAAQO,SAAS,CAACC,GAAG,CAAC,2BAEtBP,CAAAA,KAAKQ,WAAW,CAAGZ,QACnBI,KAAKM,SAAS,CAACC,GAAG,CAAC,yBAEnBT,EAAEW,WAAW,CAACV,SACdD,EAAEW,WAAW,CAACT,MACdH,GAAGY,WAAW,CAACX,GAEf,OAAOD,EACT,CAEA,eAAe,CAAA,KACbL,aAAaD,sBAAuB,AAACmB,kBACnC,GAAIC,MAAMC,OAAO,CAACF,kBAAoBA,gBAAgBG,MAAM,CAAG,EAAG,CAChE,MAAMC,SAAWxB,WAAW,sCAC5B,MAAMyB,WAAazB,WAAW,2CAE9BqB,MAAMK,IAAI,CAACD,YAAYE,OAAO,CAAC,AAACC,YAC9B,MAAMC,SAAWhB,SAASiB,sBAAsB,GAChDV,gBAAgBO,OAAO,CAAC,AAACI,MAASF,SAASV,WAAW,CAAChB,SAAS4B,QAChEH,UAAUT,WAAW,CAACU,SACxB,GAEAR,MAAMK,IAAI,CAACF,UAAUG,OAAO,CAAC,AAACK,SAC5BA,QAAQhB,SAAS,CAACiB,MAAM,CAAC,UAE7B,CACF,EACF,CAAA,CAAE"}
@@ -0,0 +1,2 @@
1
+ import{queryId,queryIdAll}from"../../dom-query";const MeganavControl=()=>{const controls=Array.from(queryIdAll("meganav-control"));const panels=Array.from(queryIdAll("meganav-panel"));const mdBreakpoint=getComputedStyle(document.documentElement).getPropertyValue("--bp-md");const hoverEnabled=()=>window.matchMedia(`(hover: hover) and (pointer: fine) and (min-width: ${mdBreakpoint})`).matches;const isSearchControl=node=>node.dataset.control==="search";const isSearchPanelOpen=()=>{const searchPanel=document.querySelector('[data-id="meganav-panel"]#panel-search');if(!searchPanel)return;return!searchPanel.classList.contains("invisible")};const controlsHaveFocus=()=>controls.some(control=>control===document.activeElement);const hover=(control,panel,open)=>{if(hoverEnabled()&&!controlsHaveFocus()&&!isSearchPanelOpen()){const classes=["invisible","visible"];panel.classList.replace(...open?classes:classes.reverse());control.setAttribute("aria-expanded",open);control.dataset.hover=open}};const mouseenterHandler=(control,panel)=>()=>hover(control,panel,true);const mouseleaveHandler=(control,panel)=>()=>hover(control,panel,false);const clickHandler=(control,panel)=>()=>{controls.forEach(node=>node!==control&&node.setAttribute("aria-expanded",false));panels.forEach(node=>node!==panel&&node.classList.replace("visible","invisible"));const ariaExpanded=control.getAttribute("aria-expanded");const openedByHover=control.dataset.hover==="true";if(ariaExpanded==="true"&&!openedByHover){control.setAttribute("aria-expanded",false);panel.classList.replace("visible","invisible")}else{control.setAttribute("aria-expanded",true);panel.classList.replace("invisible","visible")}if(openedByHover){control.dataset.hover=false}if(isSearchControl(control)){const searchInput=queryId("meganav-search-input",panel);if(!searchInput)return;searchInput.focus()}else{control.focus()}};return controls.map(control=>{const item=control.parentNode;const panel=document.querySelector(`#${control.getAttribute("aria-controls")}`);const click=clickHandler(control,panel);control.addEventListener("click",click);let mouseenter,mouseleave;if(!isSearchControl(control)){mouseenter=mouseenterHandler(control,panel);mouseleave=mouseleaveHandler(control,panel);item.addEventListener("mouseenter",mouseenter);item.addEventListener("mouseleave",mouseleave)}return[{teardown:()=>{if(mouseenter&&mouseleave){item.removeEventListener("mouseenter",mouseenter);item.removeEventListener("mouseleave",mouseleave)}control.removeEventListener("click",click)},clear:()=>{control.setAttribute("aria-expanded",false);panel.classList.replace("visible","invisible")}}]}).flat()};export default MeganavControl;
2
+ //# sourceMappingURL=component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/core/LegacyMeganav/MeganavControl/component.js"],"sourcesContent":["import { queryId, queryIdAll } from \"../../dom-query\";\n\nconst MeganavControl = () => {\n const controls = Array.from(queryIdAll(\"meganav-control\"));\n const panels = Array.from(queryIdAll(\"meganav-panel\"));\n const mdBreakpoint = getComputedStyle(\n document.documentElement,\n ).getPropertyValue(\"--bp-md\");\n\n const hoverEnabled = () =>\n window.matchMedia(\n `(hover: hover) and (pointer: fine) and (min-width: ${mdBreakpoint})`,\n ).matches;\n\n const isSearchControl = (node) => node.dataset.control === \"search\";\n\n const isSearchPanelOpen = () => {\n const searchPanel = document.querySelector(\n '[data-id=\"meganav-panel\"]#panel-search',\n );\n if (!searchPanel) return;\n return !searchPanel.classList.contains(\"invisible\");\n };\n\n const controlsHaveFocus = () =>\n controls.some((control) => control === document.activeElement);\n\n const hover = (control, panel, open) => {\n if (hoverEnabled() && !controlsHaveFocus() && !isSearchPanelOpen()) {\n const classes = [\"invisible\", \"visible\"];\n panel.classList.replace(...(open ? classes : classes.reverse()));\n control.setAttribute(\"aria-expanded\", open);\n control.dataset.hover = open;\n }\n };\n\n const mouseenterHandler = (control, panel) => () =>\n hover(control, panel, true);\n\n const mouseleaveHandler = (control, panel) => () =>\n hover(control, panel, false);\n\n const clickHandler = (control, panel) => () => {\n controls.forEach(\n (node) => node !== control && node.setAttribute(\"aria-expanded\", false),\n );\n\n panels.forEach(\n (node) =>\n node !== panel && node.classList.replace(\"visible\", \"invisible\"),\n );\n\n const ariaExpanded = control.getAttribute(\"aria-expanded\");\n\n // Prevent closing of the panel if it was already opened by hovering\n const openedByHover = control.dataset.hover === \"true\";\n\n if (ariaExpanded === \"true\" && !openedByHover) {\n control.setAttribute(\"aria-expanded\", false);\n panel.classList.replace(\"visible\", \"invisible\");\n } else {\n control.setAttribute(\"aria-expanded\", true);\n panel.classList.replace(\"invisible\", \"visible\");\n }\n\n if (openedByHover) {\n control.dataset.hover = false;\n }\n\n if (isSearchControl(control)) {\n const searchInput = queryId(\"meganav-search-input\", panel);\n if (!searchInput) return;\n searchInput.focus();\n } else {\n control.focus();\n }\n };\n\n return controls\n .map((control) => {\n const item = control.parentNode;\n const panel = document.querySelector(\n `#${control.getAttribute(\"aria-controls\")}`,\n );\n const click = clickHandler(control, panel);\n control.addEventListener(\"click\", click);\n let mouseenter, mouseleave;\n\n if (!isSearchControl(control)) {\n mouseenter = mouseenterHandler(control, panel);\n mouseleave = mouseleaveHandler(control, panel);\n\n item.addEventListener(\"mouseenter\", mouseenter);\n item.addEventListener(\"mouseleave\", mouseleave);\n }\n\n return [\n {\n teardown: () => {\n if (mouseenter && mouseleave) {\n item.removeEventListener(\"mouseenter\", mouseenter);\n item.removeEventListener(\"mouseleave\", mouseleave);\n }\n\n control.removeEventListener(\"click\", click);\n },\n clear: () => {\n control.setAttribute(\"aria-expanded\", false);\n panel.classList.replace(\"visible\", \"invisible\");\n },\n },\n ];\n })\n .flat();\n};\n\nexport default MeganavControl;\n"],"names":["queryId","queryIdAll","MeganavControl","controls","Array","from","panels","mdBreakpoint","getComputedStyle","document","documentElement","getPropertyValue","hoverEnabled","window","matchMedia","matches","isSearchControl","node","dataset","control","isSearchPanelOpen","searchPanel","querySelector","classList","contains","controlsHaveFocus","some","activeElement","hover","panel","open","classes","replace","reverse","setAttribute","mouseenterHandler","mouseleaveHandler","clickHandler","forEach","ariaExpanded","getAttribute","openedByHover","searchInput","focus","map","item","parentNode","click","addEventListener","mouseenter","mouseleave","teardown","removeEventListener","clear","flat"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import scrollLock from"scroll-lock";import{queryId}from"../../dom-query";const MeganavControlMobileDropdown=({clearPanels})=>{const control=queryId("meganav-control-mobile-dropdown");const dropdown=queryId("meganav-mobile-dropdown");const menuIcon=queryId("meganav-control-mobile-dropdown-menu");const closeIcon=queryId("meganav-control-mobile-dropdown-close");const clickHandler=()=>{const ariaExpanded=control.getAttribute("aria-expanded");if(ariaExpanded==="false"){dropdown.classList.replace("invisible","visible");control.setAttribute("aria-expanded",true);scrollLock.disablePageScroll()}else{dropdown.classList.replace("visible","invisible");control.setAttribute("aria-expanded",false);scrollLock.enablePageScroll();clearPanels()}menuIcon.classList.toggle("hidden");closeIcon.classList.toggle("hidden")};control.addEventListener("click",clickHandler);return{teardown:()=>{control.removeEventListener("click",clickHandler);scrollLock.enablePageScroll()},clear:()=>{dropdown.classList.replace("visible","invisible");control.setAttribute("aria-expanded",false);menuIcon.classList.remove("hidden");closeIcon.classList.add("hidden");scrollLock.enablePageScroll()}}};export default MeganavControlMobileDropdown;
2
+ //# sourceMappingURL=component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/core/LegacyMeganav/MeganavControlMobileDropdown/component.js"],"sourcesContent":["import scrollLock from \"scroll-lock\";\n\nimport { queryId } from \"../../dom-query\";\n\nconst MeganavControlMobileDropdown = ({ clearPanels }) => {\n const control = queryId(\"meganav-control-mobile-dropdown\");\n const dropdown = queryId(\"meganav-mobile-dropdown\");\n const menuIcon = queryId(\"meganav-control-mobile-dropdown-menu\");\n const closeIcon = queryId(\"meganav-control-mobile-dropdown-close\");\n\n const clickHandler = () => {\n const ariaExpanded = control.getAttribute(\"aria-expanded\");\n\n if (ariaExpanded === \"false\") {\n dropdown.classList.replace(\"invisible\", \"visible\");\n control.setAttribute(\"aria-expanded\", true);\n scrollLock.disablePageScroll();\n } else {\n dropdown.classList.replace(\"visible\", \"invisible\");\n control.setAttribute(\"aria-expanded\", false);\n scrollLock.enablePageScroll();\n clearPanels();\n }\n\n menuIcon.classList.toggle(\"hidden\");\n closeIcon.classList.toggle(\"hidden\");\n };\n\n control.addEventListener(\"click\", clickHandler);\n\n return {\n teardown: () => {\n control.removeEventListener(\"click\", clickHandler);\n scrollLock.enablePageScroll();\n },\n clear: () => {\n dropdown.classList.replace(\"visible\", \"invisible\");\n control.setAttribute(\"aria-expanded\", false);\n menuIcon.classList.remove(\"hidden\");\n closeIcon.classList.add(\"hidden\");\n scrollLock.enablePageScroll();\n },\n };\n};\n\nexport default MeganavControlMobileDropdown;\n"],"names":["scrollLock","queryId","MeganavControlMobileDropdown","clearPanels","control","dropdown","menuIcon","closeIcon","clickHandler","ariaExpanded","getAttribute","classList","replace","setAttribute","disablePageScroll","enablePageScroll","toggle","addEventListener","teardown","removeEventListener","clear","remove","add"],"mappings":"AAAA,OAAOA,eAAgB,aAAc,AAErC,QAASC,OAAO,KAAQ,iBAAkB,CAE1C,MAAMC,6BAA+B,CAAC,CAAEC,WAAW,CAAE,IACnD,MAAMC,QAAUH,QAAQ,mCACxB,MAAMI,SAAWJ,QAAQ,2BACzB,MAAMK,SAAWL,QAAQ,wCACzB,MAAMM,UAAYN,QAAQ,yCAE1B,MAAMO,aAAe,KACnB,MAAMC,aAAeL,QAAQM,YAAY,CAAC,iBAE1C,GAAID,eAAiB,QAAS,CAC5BJ,SAASM,SAAS,CAACC,OAAO,CAAC,YAAa,WACxCR,QAAQS,YAAY,CAAC,gBAAiB,MACtCb,WAAWc,iBAAiB,EAC9B,KAAO,CACLT,SAASM,SAAS,CAACC,OAAO,CAAC,UAAW,aACtCR,QAAQS,YAAY,CAAC,gBAAiB,OACtCb,WAAWe,gBAAgB,GAC3BZ,aACF,CAEAG,SAASK,SAAS,CAACK,MAAM,CAAC,UAC1BT,UAAUI,SAAS,CAACK,MAAM,CAAC,SAC7B,EAEAZ,QAAQa,gBAAgB,CAAC,QAAST,cAElC,MAAO,CACLU,SAAU,KACRd,QAAQe,mBAAmB,CAAC,QAASX,cACrCR,WAAWe,gBAAgB,EAC7B,EACAK,MAAO,KACLf,SAASM,SAAS,CAACC,OAAO,CAAC,UAAW,aACtCR,QAAQS,YAAY,CAAC,gBAAiB,OACtCP,SAASK,SAAS,CAACU,MAAM,CAAC,UAC1Bd,UAAUI,SAAS,CAACW,GAAG,CAAC,UACxBtB,WAAWe,gBAAgB,EAC7B,CACF,CACF,CAEA,gBAAeb,4BAA6B"}
@@ -0,0 +1,2 @@
1
+ import{queryIdAll}from"../../dom-query";export default(()=>{const closeControls=Array.from(queryIdAll("meganav-control-mobile-panel-close"));const openControls=Array.from(queryIdAll("meganav-control-mobile-panel-open"));const clickHandler=(btn,openBtn,panel)=>()=>{btn.setAttribute("aria-expanded",false);openBtn.setAttribute("aria-expanded",false);panel.classList.replace("block","hidden");panel.style.height=null};return closeControls.map(btn=>{const openBtn=openControls.find(open=>open.getAttribute("aria-controls")===btn.getAttribute("aria-controls"));const panel=document.querySelector(`#${btn.getAttribute("aria-controls")}`);const handler=clickHandler(btn,openBtn,panel);btn.addEventListener("click",handler);return{teardown:()=>btn.removeEventListener("click",handler),clear:()=>btn.setAttribute("aria-expanded",false)}})});
2
+ //# sourceMappingURL=component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/core/LegacyMeganav/MeganavControlMobilePanelClose/component.js"],"sourcesContent":["import { queryIdAll } from \"../../dom-query\";\n\nexport default () => {\n const closeControls = Array.from(\n queryIdAll(\"meganav-control-mobile-panel-close\"),\n );\n const openControls = Array.from(\n queryIdAll(\"meganav-control-mobile-panel-open\"),\n );\n\n const clickHandler = (btn, openBtn, panel) => () => {\n btn.setAttribute(\"aria-expanded\", false);\n openBtn.setAttribute(\"aria-expanded\", false);\n panel.classList.replace(\"block\", \"hidden\");\n panel.style.height = null;\n };\n\n return closeControls.map((btn) => {\n const openBtn = openControls.find(\n (open) =>\n open.getAttribute(\"aria-controls\") ===\n btn.getAttribute(\"aria-controls\"),\n );\n const panel = document.querySelector(\n `#${btn.getAttribute(\"aria-controls\")}`,\n );\n const handler = clickHandler(btn, openBtn, panel);\n\n btn.addEventListener(\"click\", handler);\n\n return {\n teardown: () => btn.removeEventListener(\"click\", handler),\n clear: () => btn.setAttribute(\"aria-expanded\", false),\n };\n });\n};\n"],"names":["queryIdAll","closeControls","Array","from","openControls","clickHandler","btn","openBtn","panel","setAttribute","classList","replace","style","height","map","find","open","getAttribute","document","querySelector","handler","addEventListener","teardown","removeEventListener","clear"],"mappings":"AAAA,OAASA,UAAU,KAAQ,iBAAkB,AAE7C,eAAe,CAAA,KACb,MAAMC,cAAgBC,MAAMC,IAAI,CAC9BH,WAAW,uCAEb,MAAMI,aAAeF,MAAMC,IAAI,CAC7BH,WAAW,sCAGb,MAAMK,aAAe,CAACC,IAAKC,QAASC,QAAU,KAC5CF,IAAIG,YAAY,CAAC,gBAAiB,OAClCF,QAAQE,YAAY,CAAC,gBAAiB,OACtCD,MAAME,SAAS,CAACC,OAAO,CAAC,QAAS,SACjCH,CAAAA,MAAMI,KAAK,CAACC,MAAM,CAAG,IACvB,EAEA,OAAOZ,cAAca,GAAG,CAAC,AAACR,MACxB,MAAMC,QAAUH,aAAaW,IAAI,CAC/B,AAACC,MACCA,KAAKC,YAAY,CAAC,mBAClBX,IAAIW,YAAY,CAAC,kBAErB,MAAMT,MAAQU,SAASC,aAAa,CAClC,CAAC,CAAC,EAAEb,IAAIW,YAAY,CAAC,iBAAiB,CAAC,EAEzC,MAAMG,QAAUf,aAAaC,IAAKC,QAASC,OAE3CF,IAAIe,gBAAgB,CAAC,QAASD,SAE9B,MAAO,CACLE,SAAU,IAAMhB,IAAIiB,mBAAmB,CAAC,QAASH,SACjDI,MAAO,IAAMlB,IAAIG,YAAY,CAAC,gBAAiB,MACjD,CACF,EACF,CAAA,CAAE"}
@@ -0,0 +1,2 @@
1
+ import{queryId,queryIdAll}from"../../dom-query";import{remsToPixelValue}from"../../css";export default(()=>{const closeControls=Array.from(queryIdAll("meganav-control-mobile-panel-close"));const openControls=Array.from(queryIdAll("meganav-control-mobile-panel-open"));const dropdown=queryId("meganav-mobile-dropdown");const meganavHeight=remsToPixelValue(getComputedStyle(document.documentElement).getPropertyValue("--ui-meganav-height"));const clickHandler=(btn,closeBtn,panel)=>()=>{btn.setAttribute("aria-expanded",true);closeBtn.setAttribute("aria-expanded",true);panel.classList.replace("hidden","block");panel.style.height=`${window.innerHeight-meganavHeight>panel.offsetHeight?panel.offsetHeight:window.innerHeight-meganavHeight}px`};return openControls.map(btn=>{const closeBtn=closeControls.find(node=>node.getAttribute("aria-controls")===btn.getAttribute("aria-controls"));const panel=document.querySelector(`#${btn.getAttribute("aria-controls")}`);const handler=clickHandler(btn,closeBtn,panel);btn.addEventListener("click",handler);return{teardown:()=>btn.removeEventListener("click",handler),clear:()=>{panel.classList.replace("block","hidden");dropdown.classList.remove("ui-meganav-mobile-dropdown-expand");btn.setAttribute("aria-expanded",false);panel.style.height=null}}})});
2
+ //# sourceMappingURL=component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/core/LegacyMeganav/MeganavControlMobilePanelOpen/component.js"],"sourcesContent":["import { queryId, queryIdAll } from \"../../dom-query\";\nimport { remsToPixelValue } from \"../../css\";\n\nexport default () => {\n const closeControls = Array.from(\n queryIdAll(\"meganav-control-mobile-panel-close\"),\n );\n const openControls = Array.from(\n queryIdAll(\"meganav-control-mobile-panel-open\"),\n );\n const dropdown = queryId(\"meganav-mobile-dropdown\");\n\n // Height is defined in rem's so to get the pixel value we need to find the fontSize on root\n const meganavHeight = remsToPixelValue(\n getComputedStyle(document.documentElement).getPropertyValue(\n \"--ui-meganav-height\",\n ),\n );\n\n const clickHandler = (btn, closeBtn, panel) => () => {\n btn.setAttribute(\"aria-expanded\", true);\n closeBtn.setAttribute(\"aria-expanded\", true);\n panel.classList.replace(\"hidden\", \"block\");\n\n // On devices where we don't have enough space for the panel, set it's height to\n // the height of the viewport (minus the meganav height) - this will trigger a scroll.\n // Otherwise just set it to the panel height. This handles the case where the ratio of vertical\n // space to horizontal is especially high (think tablets, but not only).\n panel.style.height = `${\n window.innerHeight - meganavHeight > panel.offsetHeight\n ? panel.offsetHeight\n : window.innerHeight - meganavHeight\n }px`;\n };\n\n return openControls.map((btn) => {\n const closeBtn = closeControls.find(\n (node) =>\n node.getAttribute(\"aria-controls\") ===\n btn.getAttribute(\"aria-controls\"),\n );\n const panel = document.querySelector(\n `#${btn.getAttribute(\"aria-controls\")}`,\n );\n const handler = clickHandler(btn, closeBtn, panel);\n\n btn.addEventListener(\"click\", handler);\n\n return {\n teardown: () => btn.removeEventListener(\"click\", handler),\n clear: () => {\n panel.classList.replace(\"block\", \"hidden\");\n dropdown.classList.remove(\"ui-meganav-mobile-dropdown-expand\");\n btn.setAttribute(\"aria-expanded\", false);\n panel.style.height = null;\n },\n };\n });\n};\n"],"names":["queryId","queryIdAll","remsToPixelValue","closeControls","Array","from","openControls","dropdown","meganavHeight","getComputedStyle","document","documentElement","getPropertyValue","clickHandler","btn","closeBtn","panel","setAttribute","classList","replace","style","height","window","innerHeight","offsetHeight","map","find","node","getAttribute","querySelector","handler","addEventListener","teardown","removeEventListener","clear","remove"],"mappings":"AAAA,OAASA,OAAO,CAAEC,UAAU,KAAQ,iBAAkB,AACtD,QAASC,gBAAgB,KAAQ,WAAY,AAE7C,eAAe,CAAA,KACb,MAAMC,cAAgBC,MAAMC,IAAI,CAC9BJ,WAAW,uCAEb,MAAMK,aAAeF,MAAMC,IAAI,CAC7BJ,WAAW,sCAEb,MAAMM,SAAWP,QAAQ,2BAGzB,MAAMQ,cAAgBN,iBACpBO,iBAAiBC,SAASC,eAAe,EAAEC,gBAAgB,CACzD,wBAIJ,MAAMC,aAAe,CAACC,IAAKC,SAAUC,QAAU,KAC7CF,IAAIG,YAAY,CAAC,gBAAiB,MAClCF,SAASE,YAAY,CAAC,gBAAiB,MACvCD,MAAME,SAAS,CAACC,OAAO,CAAC,SAAU,QAMlCH,CAAAA,MAAMI,KAAK,CAACC,MAAM,CAAG,CAAC,EACpBC,OAAOC,WAAW,CAAGf,cAAgBQ,MAAMQ,YAAY,CACnDR,MAAMQ,YAAY,CAClBF,OAAOC,WAAW,CAAGf,cAC1B,EAAE,CAAC,AACN,EAEA,OAAOF,aAAamB,GAAG,CAAC,AAACX,MACvB,MAAMC,SAAWZ,cAAcuB,IAAI,CACjC,AAACC,MACCA,KAAKC,YAAY,CAAC,mBAClBd,IAAIc,YAAY,CAAC,kBAErB,MAAMZ,MAAQN,SAASmB,aAAa,CAClC,CAAC,CAAC,EAAEf,IAAIc,YAAY,CAAC,iBAAiB,CAAC,EAEzC,MAAME,QAAUjB,aAAaC,IAAKC,SAAUC,OAE5CF,IAAIiB,gBAAgB,CAAC,QAASD,SAE9B,MAAO,CACLE,SAAU,IAAMlB,IAAImB,mBAAmB,CAAC,QAASH,SACjDI,MAAO,KACLlB,MAAME,SAAS,CAACC,OAAO,CAAC,QAAS,UACjCZ,SAASW,SAAS,CAACiB,MAAM,CAAC,qCAC1BrB,IAAIG,YAAY,CAAC,gBAAiB,MAClCD,CAAAA,MAAMI,KAAK,CAACC,MAAM,CAAG,IACvB,CACF,CACF,EACF,CAAA,CAAE"}
@@ -0,0 +1,2 @@
1
+ import{queryId}from"../../dom-query";import AddSearchClient from"addsearch-js-client";const init=({input,container,listContainer,clear,client})=>{client.setAnalyticsTag("Meganav autocomplete");client.setThrottleTime(400);const clearResults=()=>{container.classList.add("hidden");listContainer.innerHTML=""};const toggleClearBtn=query=>{if((query||"").length>0&&clear){clear.classList.remove("invisible")}else if(clear){clear.classList.add("invisible")}};const markQueryInSuggestion=(suggestionValue,query)=>{return suggestionValue.replace(query.toLowerCase(),`<span class="font-light">${query}</span>`)};const navigateToUrl=q=>window.location=`/search?q=${q}`;const focusNext=index=>{const nextSuggestion=listContainer.querySelector(`[data-suggestion-index="${index+1}"]`);if(!nextSuggestion)return;nextSuggestion.focus()};const focusPrevious=index=>{const previousIndex=index-1;const previousSuggestion=listContainer.querySelector(`[data-suggestion-index="${previousIndex}"]`);if(!previousSuggestion)return;previousSuggestion.focus()};const renderResults=query=>(results={})=>{toggleClearBtn(query);if(!Array.isArray(results.suggestions)){clearResults();return}if(results.suggestions.length===0){clearResults();return}const items=results.suggestions.map((suggestion,index)=>{const li=document.createElement("li");const button=document.createElement("button");button.type="button";button.classList.add("ui-text-menu2","font-medium","p-8","w-full","text-left","rounded","hover:text-gui-hover","focus:outline-gui-focus","hover:bg-light-grey");button.innerHTML=markQueryInSuggestion(suggestion.value,query);button.dataset.suggestionIndex=index;button.addEventListener("click",()=>{navigateToUrl(suggestion.value)});button.addEventListener("keydown",e=>{const key=e.key;if(key==="ArrowDown"){focusNext(index)}else if(key==="ArrowUp"&&index-1<0){input.focus()}else if(key==="ArrowUp"&&index-1>=0){focusPrevious(index)}else if(key==="Enter"||key==="Space"){navigateToUrl(suggestion.value)}});li.appendChild(button);return li});listContainer.innerHTML="";items.forEach(item=>listContainer.appendChild(item));container.classList.remove("hidden")};const keyupHandler=e=>{const query=e.target.value;const key=e.key;if(key==="ArrowDown"){focusNext(0);return}if(!query){clearResults()}else{client.suggestions(query,renderResults(query))}};let clearHandler;if(clear){clearHandler=()=>{input.value="";clear.classList.add("invisible");clearResults()};clear.addEventListener("click",clearHandler)}input.addEventListener("keyup",keyupHandler);return{teardown:()=>{input.removeEventListener("keyup",keyupHandler);if(clear)clear.removeEventListener("click",clearHandler)},clear:()=>{input.value="";clearResults()}}};export default(apiKey=>{if(!apiKey){console.log(`No AddSearch API key provided, skipping search suggestions.`);return[]}const client=new AddSearchClient(apiKey);return[queryId("meganav-search-input"),queryId("meganav-mobile-search-input")].filter(i=>i).map(input=>{const parent=input.parentNode;const container=queryId("meganav-search-autocomplete-container",parent);const listContainer=queryId("meganav-search-autocomplete-list",parent);const clear=queryId("meganav-search-input-clear",parent);return init({input,container,listContainer,client,clear})})});
2
+ //# sourceMappingURL=component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/core/LegacyMeganav/MeganavSearchAutocomplete/component.js"],"sourcesContent":["import { queryId } from \"../../dom-query\";\nimport AddSearchClient from \"addsearch-js-client\";\n\nconst init = ({ input, container, listContainer, clear, client }) => {\n client.setAnalyticsTag(\"Meganav autocomplete\");\n client.setThrottleTime(400);\n\n const clearResults = () => {\n container.classList.add(\"hidden\");\n listContainer.innerHTML = \"\";\n };\n\n const toggleClearBtn = (query) => {\n if ((query || \"\").length > 0 && clear) {\n clear.classList.remove(\"invisible\");\n } else if (clear) {\n clear.classList.add(\"invisible\");\n }\n };\n\n const markQueryInSuggestion = (suggestionValue, query) => {\n return suggestionValue.replace(\n query.toLowerCase(),\n `<span class=\"font-light\">${query}</span>`,\n );\n };\n\n const navigateToUrl = (q) => (window.location = `/search?q=${q}`);\n\n const focusNext = (index) => {\n const nextSuggestion = listContainer.querySelector(\n `[data-suggestion-index=\"${index + 1}\"]`,\n );\n if (!nextSuggestion) return;\n nextSuggestion.focus();\n };\n\n const focusPrevious = (index) => {\n const previousIndex = index - 1;\n\n const previousSuggestion = listContainer.querySelector(\n `[data-suggestion-index=\"${previousIndex}\"]`,\n );\n if (!previousSuggestion) return;\n previousSuggestion.focus();\n };\n\n const renderResults =\n (query) =>\n (results = {}) => {\n toggleClearBtn(query);\n\n // Prevent invalid access error when key is invalid\n if (!Array.isArray(results.suggestions)) {\n clearResults();\n return;\n }\n\n // Prevent key error from invalid key\n if (results.suggestions.length === 0) {\n clearResults();\n return;\n }\n\n const items = results.suggestions.map((suggestion, index) => {\n const li = document.createElement(\"li\");\n const button = document.createElement(\"button\");\n button.type = \"button\";\n\n button.classList.add(\n \"ui-text-menu2\",\n \"font-medium\",\n \"p-8\",\n \"w-full\",\n \"text-left\",\n \"rounded\",\n \"hover:text-gui-hover\",\n \"focus:outline-gui-focus\",\n \"hover:bg-light-grey\",\n );\n\n button.innerHTML = markQueryInSuggestion(suggestion.value, query);\n\n button.dataset.suggestionIndex = index;\n\n button.addEventListener(\"click\", () => {\n navigateToUrl(suggestion.value);\n });\n\n button.addEventListener(\"keydown\", (e) => {\n const key = e.key;\n\n if (key === \"ArrowDown\") {\n focusNext(index);\n } else if (key === \"ArrowUp\" && index - 1 < 0) {\n input.focus();\n } else if (key === \"ArrowUp\" && index - 1 >= 0) {\n focusPrevious(index);\n } else if (key === \"Enter\" || key === \"Space\") {\n navigateToUrl(suggestion.value);\n }\n });\n\n li.appendChild(button);\n return li;\n });\n\n listContainer.innerHTML = \"\";\n items.forEach((item) => listContainer.appendChild(item));\n container.classList.remove(\"hidden\");\n };\n\n const keyupHandler = (e) => {\n const query = e.target.value;\n const key = e.key;\n\n if (key === \"ArrowDown\") {\n focusNext(0);\n return;\n }\n\n if (!query) {\n clearResults();\n } else {\n client.suggestions(query, renderResults(query));\n }\n };\n\n let clearHandler;\n if (clear) {\n clearHandler = () => {\n input.value = \"\";\n clear.classList.add(\"invisible\");\n clearResults();\n };\n clear.addEventListener(\"click\", clearHandler);\n }\n\n input.addEventListener(\"keyup\", keyupHandler);\n\n return {\n teardown: () => {\n input.removeEventListener(\"keyup\", keyupHandler);\n if (clear) clear.removeEventListener(\"click\", clearHandler);\n },\n clear: () => {\n input.value = \"\";\n clearResults();\n },\n };\n};\n\nexport default (apiKey) => {\n if (!apiKey) {\n console.log(`No AddSearch API key provided, skipping search suggestions.`);\n return [];\n }\n\n const client = new AddSearchClient(apiKey);\n\n return [\n queryId(\"meganav-search-input\"),\n queryId(\"meganav-mobile-search-input\"),\n ]\n .filter((i) => i)\n .map((input) => {\n const parent = input.parentNode;\n const container = queryId(\n \"meganav-search-autocomplete-container\",\n parent,\n );\n const listContainer = queryId(\"meganav-search-autocomplete-list\", parent);\n const clear = queryId(\"meganav-search-input-clear\", parent);\n\n return init({ input, container, listContainer, client, clear });\n });\n};\n"],"names":["queryId","AddSearchClient","init","input","container","listContainer","clear","client","setAnalyticsTag","setThrottleTime","clearResults","classList","add","innerHTML","toggleClearBtn","query","length","remove","markQueryInSuggestion","suggestionValue","replace","toLowerCase","navigateToUrl","q","window","location","focusNext","index","nextSuggestion","querySelector","focus","focusPrevious","previousIndex","previousSuggestion","renderResults","results","Array","isArray","suggestions","items","map","suggestion","li","document","createElement","button","type","value","dataset","suggestionIndex","addEventListener","e","key","appendChild","forEach","item","keyupHandler","target","clearHandler","teardown","removeEventListener","apiKey","console","log","filter","i","parent","parentNode"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{queryId}from"../../dom-query";const DRAG_BUFFER=5;const getTranslateX=node=>new DOMMatrix(window.getComputedStyle(node).transform).e;const updateTranslateX=(node,value)=>node.style.transform=`translateX(${value}px)`;const dragLeftBoundary=(translateX,threshold)=>translateX>=threshold;const dragRightBoundary=(translateX,itemsWidth,windowWidth,threshold)=>Math.abs(translateX-windowWidth+threshold)>itemsWidth;const getDistance=(e,touchStartX)=>e.changedTouches[0]?.clientX-touchStartX;const withinBuffer=distance=>Math.abs(distance)<DRAG_BUFFER;const getItemsTotalWidth=nodes=>nodes.map(item=>item.getBoundingClientRect().width).reduce((acc,val)=>acc+val,0);const MeganavSearchSuggestions=()=>{const suggestionsToggle=queryId("meganav-mobile-search-input");const suggestions=queryId("meganav-mobile-search-suggestions");const list=suggestions.querySelector("ul");const listItems=Array.from(list.querySelectorAll("li"));const dragLeft=(distance,threshold)=>{const currentTranslateX=getTranslateX(list);const translateX=Math.round(currentTranslateX+distance);if(dragLeftBoundary(translateX,threshold))return;updateTranslateX(list,translateX)};const dragLeftEnd=(distance,threshold)=>{const currentTranslateX=getTranslateX(list);let translateX=Math.round(currentTranslateX+distance);if(dragLeftBoundary(translateX,threshold)){translateX=0}updateTranslateX(list,translateX)};const dragRight=(distance,threshold)=>{const listWidth=list.getBoundingClientRect().width;const currentTranslateX=getTranslateX(list);const translateX=Math.round(currentTranslateX+distance);const itemsTotalWidth=getItemsTotalWidth(listItems);if(dragRightBoundary(translateX,itemsTotalWidth,listWidth,threshold)){return}updateTranslateX(list,translateX)};const dragRightEnd=(distance,threshold)=>{const listWidth=list.getBoundingClientRect().width;const currentTranslateX=getTranslateX(list);const itemsTotalWidth=getItemsTotalWidth(listItems);let translateX=Math.round(currentTranslateX+distance);if(dragRightBoundary(translateX,itemsTotalWidth,listWidth,threshold)){translateX=-(itemsTotalWidth-listWidth+threshold)}updateTranslateX(list,translateX)};let touchStartX;const touchstartHandler=e=>{touchStartX=e.touches[0]?.clientX};const touchmoveHandler=e=>{const distance=getDistance(e,touchStartX);if(withinBuffer(distance))return;distance>0?dragLeft(distance,24):dragRight(distance,96)};const touchendHandler=e=>{const distance=getDistance(e,touchStartX);if(withinBuffer(distance))return;distance>0?dragLeftEnd(distance,24):dragRightEnd(distance,48)};const focusSuggestionsHandler=()=>{suggestions.classList.add("max-h-96")};const blurSuggestionsHandler=e=>{if(e.relatedTarget===suggestions.querySelectorAll("a")[0]){return}suggestions.classList.remove("max-h-96")};const wheelHandler=e=>{const distance=e.deltaY*4;if(withinBuffer(distance))return;distance>0?dragLeftEnd(distance,24):dragRightEnd(distance,48)};suggestionsToggle?.addEventListener("focus",focusSuggestionsHandler);suggestionsToggle?.addEventListener("blur",blurSuggestionsHandler);suggestions.addEventListener("touchstart",touchstartHandler);suggestions.addEventListener("touchmove",touchmoveHandler);suggestions.addEventListener("touchend",touchendHandler);suggestions.addEventListener("wheel",wheelHandler);return{teardown:()=>{suggestionsToggle?.removeEventListener("focus",focusSuggestionsHandler);suggestionsToggle?.removeEventListener("blur",blurSuggestionsHandler);suggestions.removeEventListener("touchstart",touchstartHandler);suggestions.removeEventListener("touchmove",touchmoveHandler);suggestions.removeEventListener("touchend",touchendHandler)},clear:()=>{suggestions.classList.remove("max-h-96");list.style.transform=`translateX(0px)`}}};export default MeganavSearchSuggestions;
2
+ //# sourceMappingURL=component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/core/LegacyMeganav/MeganavSearchSuggestions/component.js"],"sourcesContent":["import { queryId } from \"../../dom-query\";\n\nconst DRAG_BUFFER = 5;\n\nconst getTranslateX = (node) =>\n new DOMMatrix(window.getComputedStyle(node).transform).e;\n\nconst updateTranslateX = (node, value) =>\n (node.style.transform = `translateX(${value}px)`);\n\nconst dragLeftBoundary = (translateX, threshold) => translateX >= threshold;\n\nconst dragRightBoundary = (translateX, itemsWidth, windowWidth, threshold) =>\n Math.abs(translateX - windowWidth + threshold) > itemsWidth;\n\nconst getDistance = (e, touchStartX) =>\n e.changedTouches[0]?.clientX - touchStartX;\n\nconst withinBuffer = (distance) => Math.abs(distance) < DRAG_BUFFER;\n\nconst getItemsTotalWidth = (nodes) =>\n nodes\n .map((item) => item.getBoundingClientRect().width)\n .reduce((acc, val) => acc + val, 0);\n\nconst MeganavSearchSuggestions = () => {\n const suggestionsToggle = queryId(\"meganav-mobile-search-input\");\n const suggestions = queryId(\"meganav-mobile-search-suggestions\");\n const list = suggestions.querySelector(\"ul\");\n const listItems = Array.from(list.querySelectorAll(\"li\"));\n\n const dragLeft = (distance, threshold) => {\n const currentTranslateX = getTranslateX(list);\n const translateX = Math.round(currentTranslateX + distance);\n if (dragLeftBoundary(translateX, threshold)) return;\n updateTranslateX(list, translateX);\n };\n\n const dragLeftEnd = (distance, threshold) => {\n const currentTranslateX = getTranslateX(list);\n let translateX = Math.round(currentTranslateX + distance);\n\n if (dragLeftBoundary(translateX, threshold)) {\n translateX = 0;\n }\n\n updateTranslateX(list, translateX);\n };\n\n const dragRight = (distance, threshold) => {\n const listWidth = list.getBoundingClientRect().width;\n const currentTranslateX = getTranslateX(list);\n const translateX = Math.round(currentTranslateX + distance);\n const itemsTotalWidth = getItemsTotalWidth(listItems);\n\n if (dragRightBoundary(translateX, itemsTotalWidth, listWidth, threshold)) {\n return;\n }\n\n updateTranslateX(list, translateX);\n };\n\n const dragRightEnd = (distance, threshold) => {\n const listWidth = list.getBoundingClientRect().width;\n const currentTranslateX = getTranslateX(list);\n const itemsTotalWidth = getItemsTotalWidth(listItems);\n let translateX = Math.round(currentTranslateX + distance);\n\n if (dragRightBoundary(translateX, itemsTotalWidth, listWidth, threshold)) {\n translateX = -(itemsTotalWidth - listWidth + threshold);\n }\n\n updateTranslateX(list, translateX);\n };\n\n let touchStartX;\n\n const touchstartHandler = (e) => {\n touchStartX = e.touches[0]?.clientX;\n };\n\n const touchmoveHandler = (e) => {\n const distance = getDistance(e, touchStartX);\n if (withinBuffer(distance)) return;\n distance > 0 ? dragLeft(distance, 24) : dragRight(distance, 96);\n };\n\n const touchendHandler = (e) => {\n const distance = getDistance(e, touchStartX);\n if (withinBuffer(distance)) return;\n distance > 0 ? dragLeftEnd(distance, 24) : dragRightEnd(distance, 48);\n };\n\n const focusSuggestionsHandler = () => {\n suggestions.classList.add(\"max-h-96\");\n };\n\n const blurSuggestionsHandler = (e) => {\n if (e.relatedTarget === suggestions.querySelectorAll(\"a\")[0]) {\n return;\n }\n suggestions.classList.remove(\"max-h-96\");\n };\n\n const wheelHandler = (e) => {\n const distance = e.deltaY * 4;\n if (withinBuffer(distance)) return;\n distance > 0 ? dragLeftEnd(distance, 24) : dragRightEnd(distance, 48);\n };\n\n suggestionsToggle?.addEventListener(\"focus\", focusSuggestionsHandler);\n suggestionsToggle?.addEventListener(\"blur\", blurSuggestionsHandler);\n suggestions.addEventListener(\"touchstart\", touchstartHandler);\n suggestions.addEventListener(\"touchmove\", touchmoveHandler);\n suggestions.addEventListener(\"touchend\", touchendHandler);\n suggestions.addEventListener(\"wheel\", wheelHandler);\n\n return {\n teardown: () => {\n suggestionsToggle?.removeEventListener(\"focus\", focusSuggestionsHandler);\n suggestionsToggle?.removeEventListener(\"blur\", blurSuggestionsHandler);\n suggestions.removeEventListener(\"touchstart\", touchstartHandler);\n suggestions.removeEventListener(\"touchmove\", touchmoveHandler);\n suggestions.removeEventListener(\"touchend\", touchendHandler);\n },\n clear: () => {\n suggestions.classList.remove(\"max-h-96\");\n list.style.transform = `translateX(0px)`;\n },\n };\n};\n\nexport default MeganavSearchSuggestions;\n"],"names":["queryId","DRAG_BUFFER","getTranslateX","node","DOMMatrix","window","getComputedStyle","transform","e","updateTranslateX","value","style","dragLeftBoundary","translateX","threshold","dragRightBoundary","itemsWidth","windowWidth","Math","abs","getDistance","touchStartX","changedTouches","clientX","withinBuffer","distance","getItemsTotalWidth","nodes","map","item","getBoundingClientRect","width","reduce","acc","val","MeganavSearchSuggestions","suggestionsToggle","suggestions","list","querySelector","listItems","Array","from","querySelectorAll","dragLeft","currentTranslateX","round","dragLeftEnd","dragRight","listWidth","itemsTotalWidth","dragRightEnd","touchstartHandler","touches","touchmoveHandler","touchendHandler","focusSuggestionsHandler","classList","add","blurSuggestionsHandler","relatedTarget","remove","wheelHandler","deltaY","addEventListener","teardown","removeEventListener","clear"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import throttle from"lodash.throttle";import{queryId,queryIdAll}from"../dom-query";import MeganavControl from"./MeganavControl/component.js";import MeganavControlMobileDropdown from"./MeganavControlMobileDropdown/component.js";import MobilePanelOpenClick from"./MeganavControlMobilePanelOpen/component.js";import MobilePanelCloseClick from"./MeganavControlMobilePanelClose/component.js";import MeganavSearchAutocomplete from"./MeganavSearchAutocomplete/component.js";import MeganavSearchSuggestions from"./MeganavSearchSuggestions/component.js";const windowOnBlur=closeAll=>{window.onblur=()=>closeAll();return{teardown:()=>window.onblur=null}};const documentClick=closeAll=>{const meganav=queryId("meganav");const clickHandler=e=>{if(meganav.contains(e.target))return;closeAll()};document.addEventListener("click",clickHandler);return{teardown:()=>document.removeEventListener("click",clickHandler)}};const documentScroll=themeName=>{if(themeName!=="transparentToWhite")return{teardown:()=>{}};const meganav=queryId("meganav");const navItems=queryIdAll("meganav-link");const controlMobileDropdownMenu=queryId("meganav-control-mobile-dropdown-menu");const controlMobileDropdownClose=queryId("meganav-control-mobile-dropdown-close");const controls=queryIdAll("meganav-control");const signUpBtn=queryId("meganav-sign-up-btn");const invertTextCollection=[...Array.from(controls),...Array.from(navItems),queryId("meganav-logo")];const invertMobleDropdownColor=invert=>{const whiteToBlack=["ui-icon-white","ui-icon-cool-black"];const blackToWhite=[...whiteToBlack].reverse();if(invert){controlMobileDropdownMenu?.classList.replace(...whiteToBlack);controlMobileDropdownClose?.classList.replace(...whiteToBlack)}else{controlMobileDropdownMenu?.classList.replace(...blackToWhite);controlMobileDropdownClose?.classList.replace(...blackToWhite)}};const inverSignupBtnColors=invert=>{if(invert){signUpBtn?.classList.replace("bg-white","bg-cool-black");signUpBtn?.classList.replace("text-cool-black","text-white")}else{signUpBtn?.classList.replace("bg-cool-black","bg-white");signUpBtn?.classList.replace("text-white","text-cool-black")}};const scrollHandler=throttle(()=>{if(window.scrollY>5){meganav.classList.replace("bg-transparent","bg-white");inverSignupBtnColors(true);invertMobleDropdownColor(true);invertTextCollection.forEach(n=>n.classList.replace("text-white","text-cool-black"))}else{meganav.classList.replace("bg-white","bg-transparent");inverSignupBtnColors(false);invertMobleDropdownColor(false);invertTextCollection.forEach(n=>n.classList.replace("text-cool-black","text-white"))}},150);document.addEventListener("scroll",scrollHandler);return{teardown:()=>document.removeEventListener("scroll",scrollHandler)}};export default function Meganav({themeName,addSearchApiKey}){const controls=MeganavControl();const panelOpenControls=MobilePanelOpenClick();const panelCloseControls=MobilePanelCloseClick();const search=MeganavSearchAutocomplete(addSearchApiKey);const searchSuggestions=MeganavSearchSuggestions();const mobileDropdownControl=MeganavControlMobileDropdown({clearPanels:()=>[...panelOpenControls,...panelCloseControls].forEach(i=>i.clear())});const closeAll=()=>[mobileDropdownControl,searchSuggestions,...panelOpenControls,...panelCloseControls,...controls,...search].forEach(i=>i.clear());const teardowns=[documentScroll(themeName??null),documentClick(closeAll),windowOnBlur(closeAll),mobileDropdownControl,searchSuggestions,...controls,...panelOpenControls,...panelCloseControls,...search].map(i=>i.teardown);return()=>teardowns.forEach(teardown=>teardown())}
2
+ //# sourceMappingURL=component.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/Meganav/component.js"],"sourcesContent":["import throttle from \"lodash.throttle\";\n\n// Glossary:\n// item - is the element which contains both the control and the panel - these are adjacent\n// control - interactive element that controls showing and hiding of dropdown or panel\n// panel - container for meganav content\n// dropdown - container for top level items on mobile\n// clear - return to initial state\n// teardown - remove all event listeners (for example when removing nodes)\n\nimport { queryId, queryIdAll } from \"../dom-query\";\n\nimport MeganavControl from \"../MeganavControl/component.js\";\nimport MeganavControlMobileDropdown from \"../MeganavControlMobileDropdown/component.js\";\nimport MobilePanelOpenClick from \"../MeganavControlMobilePanelOpen/component.js\";\nimport MobilePanelCloseClick from \"../MeganavControlMobilePanelClose/component.js\";\nimport MeganavSearchAutocomplete from \"../MeganavSearchAutocomplete/component.js\";\nimport MeganavSearchSuggestions from \"../MeganavSearchSuggestions/component.js\";\n\n// Close menu when user clicks outside of viewport\nconst windowOnBlur = (closeAll) => {\n window.onblur = () => closeAll();\n return { teardown: () => (window.onblur = null) };\n};\n\n// Close menu when click/tap outside of nav\nconst documentClick = (closeAll) => {\n const meganav = queryId(\"meganav\");\n\n const clickHandler = (e) => {\n if (meganav.contains(e.target)) return;\n closeAll();\n };\n\n document.addEventListener(\"click\", clickHandler);\n\n return {\n teardown: () => document.removeEventListener(\"click\", clickHandler),\n };\n};\n\n// Invert from transparent to white\nconst documentScroll = (themeName) => {\n if (themeName !== \"transparentToWhite\") return { teardown: () => {} };\n\n const meganav = queryId(\"meganav\");\n const navItems = queryIdAll(\"meganav-link\");\n const controlMobileDropdownMenu = queryId(\n \"meganav-control-mobile-dropdown-menu\",\n );\n const controlMobileDropdownClose = queryId(\n \"meganav-control-mobile-dropdown-close\",\n );\n const controls = queryIdAll(\"meganav-control\");\n const signUpBtn = queryId(\"meganav-sign-up-btn\");\n\n const invertTextCollection = [\n ...Array.from(controls),\n ...Array.from(navItems),\n queryId(\"meganav-logo\"),\n ];\n\n const invertMobleDropdownColor = (invert) => {\n const whiteToBlack = [\"ui-icon-white\", \"ui-icon-cool-black\"];\n const blackToWhite = [...whiteToBlack].reverse();\n\n if (invert) {\n controlMobileDropdownMenu?.classList.replace(...whiteToBlack);\n controlMobileDropdownClose?.classList.replace(...whiteToBlack);\n } else {\n controlMobileDropdownMenu?.classList.replace(...blackToWhite);\n controlMobileDropdownClose?.classList.replace(...blackToWhite);\n }\n };\n\n const inverSignupBtnColors = (invert) => {\n if (invert) {\n signUpBtn?.classList.replace(\"bg-white\", \"bg-cool-black\");\n signUpBtn?.classList.replace(\"text-cool-black\", \"text-white\");\n } else {\n signUpBtn?.classList.replace(\"bg-cool-black\", \"bg-white\");\n signUpBtn?.classList.replace(\"text-white\", \"text-cool-black\");\n }\n };\n\n const scrollHandler = throttle(() => {\n if (window.scrollY > 5) {\n meganav.classList.replace(\"bg-transparent\", \"bg-white\");\n inverSignupBtnColors(true);\n invertMobleDropdownColor(true);\n\n invertTextCollection.forEach((n) =>\n n.classList.replace(\"text-white\", \"text-cool-black\"),\n );\n } else {\n meganav.classList.replace(\"bg-white\", \"bg-transparent\");\n inverSignupBtnColors(false);\n invertMobleDropdownColor(false);\n\n invertTextCollection.forEach((n) =>\n n.classList.replace(\"text-cool-black\", \"text-white\"),\n );\n }\n }, 150);\n\n document.addEventListener(\"scroll\", scrollHandler);\n\n return {\n teardown: () => document.removeEventListener(\"scroll\", scrollHandler),\n };\n};\n\nexport default function Meganav({ themeName, addSearchApiKey }) {\n const controls = MeganavControl();\n const panelOpenControls = MobilePanelOpenClick();\n const panelCloseControls = MobilePanelCloseClick();\n const search = MeganavSearchAutocomplete(addSearchApiKey);\n const searchSuggestions = MeganavSearchSuggestions();\n\n const mobileDropdownControl = MeganavControlMobileDropdown({\n clearPanels: () =>\n [...panelOpenControls, ...panelCloseControls].forEach((i) => i.clear()),\n });\n\n const closeAll = () =>\n [\n mobileDropdownControl,\n searchSuggestions,\n ...panelOpenControls,\n ...panelCloseControls,\n ...controls,\n ...search,\n ].forEach((i) => i.clear());\n\n const teardowns = [\n documentScroll(themeName ?? null),\n documentClick(closeAll),\n windowOnBlur(closeAll),\n mobileDropdownControl,\n searchSuggestions,\n ...controls,\n ...panelOpenControls,\n ...panelCloseControls,\n ...search,\n ].map((i) => i.teardown);\n\n return () => teardowns.forEach((teardown) => teardown());\n}\n"],"names":["throttle","queryId","queryIdAll","MeganavControl","MeganavControlMobileDropdown","MobilePanelOpenClick","MobilePanelCloseClick","MeganavSearchAutocomplete","MeganavSearchSuggestions","windowOnBlur","closeAll","window","onblur","teardown","documentClick","meganav","clickHandler","e","contains","target","document","addEventListener","removeEventListener","documentScroll","themeName","navItems","controlMobileDropdownMenu","controlMobileDropdownClose","controls","signUpBtn","invertTextCollection","Array","from","invertMobleDropdownColor","invert","whiteToBlack","blackToWhite","reverse","classList","replace","inverSignupBtnColors","scrollHandler","scrollY","forEach","n","Meganav","addSearchApiKey","panelOpenControls","panelCloseControls","search","searchSuggestions","mobileDropdownControl","clearPanels","i","clear","teardowns","map"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/core/LegacyMeganav/component.js"],"sourcesContent":["import throttle from \"lodash.throttle\";\n\n// Glossary:\n// item - is the element which contains both the control and the panel - these are adjacent\n// control - interactive element that controls showing and hiding of dropdown or panel\n// panel - container for meganav content\n// dropdown - container for top level items on mobile\n// clear - return to initial state\n// teardown - remove all event listeners (for example when removing nodes)\n\nimport { queryId, queryIdAll } from \"../dom-query\";\n\nimport MeganavControl from \"./MeganavControl/component.js\";\nimport MeganavControlMobileDropdown from \"./MeganavControlMobileDropdown/component.js\";\nimport MobilePanelOpenClick from \"./MeganavControlMobilePanelOpen/component.js\";\nimport MobilePanelCloseClick from \"./MeganavControlMobilePanelClose/component.js\";\nimport MeganavSearchAutocomplete from \"./MeganavSearchAutocomplete/component.js\";\nimport MeganavSearchSuggestions from \"./MeganavSearchSuggestions/component.js\";\n\n// Close menu when user clicks outside of viewport\nconst windowOnBlur = (closeAll) => {\n window.onblur = () => closeAll();\n return { teardown: () => (window.onblur = null) };\n};\n\n// Close menu when click/tap outside of nav\nconst documentClick = (closeAll) => {\n const meganav = queryId(\"meganav\");\n\n const clickHandler = (e) => {\n if (meganav.contains(e.target)) return;\n closeAll();\n };\n\n document.addEventListener(\"click\", clickHandler);\n\n return {\n teardown: () => document.removeEventListener(\"click\", clickHandler),\n };\n};\n\n// Invert from transparent to white\nconst documentScroll = (themeName) => {\n if (themeName !== \"transparentToWhite\") return { teardown: () => {} };\n\n const meganav = queryId(\"meganav\");\n const navItems = queryIdAll(\"meganav-link\");\n const controlMobileDropdownMenu = queryId(\n \"meganav-control-mobile-dropdown-menu\",\n );\n const controlMobileDropdownClose = queryId(\n \"meganav-control-mobile-dropdown-close\",\n );\n const controls = queryIdAll(\"meganav-control\");\n const signUpBtn = queryId(\"meganav-sign-up-btn\");\n\n const invertTextCollection = [\n ...Array.from(controls),\n ...Array.from(navItems),\n queryId(\"meganav-logo\"),\n ];\n\n const invertMobleDropdownColor = (invert) => {\n const whiteToBlack = [\"ui-icon-white\", \"ui-icon-cool-black\"];\n const blackToWhite = [...whiteToBlack].reverse();\n\n if (invert) {\n controlMobileDropdownMenu?.classList.replace(...whiteToBlack);\n controlMobileDropdownClose?.classList.replace(...whiteToBlack);\n } else {\n controlMobileDropdownMenu?.classList.replace(...blackToWhite);\n controlMobileDropdownClose?.classList.replace(...blackToWhite);\n }\n };\n\n const inverSignupBtnColors = (invert) => {\n if (invert) {\n signUpBtn?.classList.replace(\"bg-white\", \"bg-cool-black\");\n signUpBtn?.classList.replace(\"text-cool-black\", \"text-white\");\n } else {\n signUpBtn?.classList.replace(\"bg-cool-black\", \"bg-white\");\n signUpBtn?.classList.replace(\"text-white\", \"text-cool-black\");\n }\n };\n\n const scrollHandler = throttle(() => {\n if (window.scrollY > 5) {\n meganav.classList.replace(\"bg-transparent\", \"bg-white\");\n inverSignupBtnColors(true);\n invertMobleDropdownColor(true);\n\n invertTextCollection.forEach((n) =>\n n.classList.replace(\"text-white\", \"text-cool-black\"),\n );\n } else {\n meganav.classList.replace(\"bg-white\", \"bg-transparent\");\n inverSignupBtnColors(false);\n invertMobleDropdownColor(false);\n\n invertTextCollection.forEach((n) =>\n n.classList.replace(\"text-cool-black\", \"text-white\"),\n );\n }\n }, 150);\n\n document.addEventListener(\"scroll\", scrollHandler);\n\n return {\n teardown: () => document.removeEventListener(\"scroll\", scrollHandler),\n };\n};\n\nexport default function Meganav({ themeName, addSearchApiKey }) {\n const controls = MeganavControl();\n const panelOpenControls = MobilePanelOpenClick();\n const panelCloseControls = MobilePanelCloseClick();\n const search = MeganavSearchAutocomplete(addSearchApiKey);\n const searchSuggestions = MeganavSearchSuggestions();\n\n const mobileDropdownControl = MeganavControlMobileDropdown({\n clearPanels: () =>\n [...panelOpenControls, ...panelCloseControls].forEach((i) => i.clear()),\n });\n\n const closeAll = () =>\n [\n mobileDropdownControl,\n searchSuggestions,\n ...panelOpenControls,\n ...panelCloseControls,\n ...controls,\n ...search,\n ].forEach((i) => i.clear());\n\n const teardowns = [\n documentScroll(themeName ?? null),\n documentClick(closeAll),\n windowOnBlur(closeAll),\n mobileDropdownControl,\n searchSuggestions,\n ...controls,\n ...panelOpenControls,\n ...panelCloseControls,\n ...search,\n ].map((i) => i.teardown);\n\n return () => teardowns.forEach((teardown) => teardown());\n}\n"],"names":["throttle","queryId","queryIdAll","MeganavControl","MeganavControlMobileDropdown","MobilePanelOpenClick","MobilePanelCloseClick","MeganavSearchAutocomplete","MeganavSearchSuggestions","windowOnBlur","closeAll","window","onblur","teardown","documentClick","meganav","clickHandler","e","contains","target","document","addEventListener","removeEventListener","documentScroll","themeName","navItems","controlMobileDropdownMenu","controlMobileDropdownClose","controls","signUpBtn","invertTextCollection","Array","from","invertMobleDropdownColor","invert","whiteToBlack","blackToWhite","reverse","classList","replace","inverSignupBtnColors","scrollHandler","scrollY","forEach","n","Meganav","addSearchApiKey","panelOpenControls","panelCloseControls","search","searchSuggestions","mobileDropdownControl","clearPanels","i","clear","teardowns","map"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import React,{useEffect,useState}from"react";import{connectState}from"./remote-data-store.js";import{selectSessionData}from"./remote-session-data.js";import Logo from"./Logo";import MeganavData from"./LegacyMeganav/component.json";import MeganavScripts from"./LegacyMeganav/component.js";import MeganavItemsDesktop from"./MeganavItemsDesktop";import MeganavItemsSignedIn from"./MeganavItemsSignedIn";import MeganavItemsMobile from"./MeganavItemsMobile";import Notice from"./Notice";import _absUrl from"./url-base.js";import MeganavContentProducts from"./MeganavContentProducts";import MeganavContentUseCases from"./MeganavContentUseCases";import MeganavContentCompany from"./MeganavContentCompany";import MeganavContentDevelopers from"./MeganavContentDevelopers";import MeganavSearch from"./MeganavSearch";const SignIn=({sessionState,theme,loginLink,absUrl,searchDataId})=>{return sessionState.signedIn?React.createElement(MeganavItemsSignedIn,{absUrl:absUrl,sessionState:sessionState,theme:theme,searchDataId:searchDataId}):React.createElement("ul",{className:"hidden md:flex items-center"},React.createElement("li",{className:"ui-meganav-item"},React.createElement("a",{href:absUrl("/contact"),className:`ui-meganav-link ${theme.textColor}`,"data-id":"meganav-link"},"Contact us")),React.createElement("li",{className:"ui-meganav-item"},React.createElement("a",{href:absUrl(loginLink),className:`ui-meganav-link mr-0 ${theme.textColor}`,"data-id":"meganav-link"},"Login")),React.createElement("li",{className:"ui-meganav-item"},React.createElement(MeganavSearch,{absUrl:absUrl,dataId:searchDataId})),React.createElement("li",{className:"ui-meganav-item"},React.createElement("a",{href:absUrl("/sign-up"),"data-id":"meganav-sign-up-btn",className:`ui-btn p-btn-small ${theme.buttonBackgroundColor} ${theme.buttonTextColor}`},"Sign up free")))};const SignInPlaceholder=()=>React.createElement("div",null);const panels={MeganavContentProducts,MeganavContentUseCases,MeganavContentCompany,MeganavContentDevelopers};const Meganav=({paths,themeName="white",notice,loginLink="/login",urlBase,addSearchApiKey,statusUrl,searchDataId})=>{const[sessionState,setSessionState]=useState();useEffect(()=>{connectState(selectSessionData,setSessionState)},[]);useEffect(()=>{const teardown=MeganavScripts({themeName,addSearchApiKey});return()=>teardown()},[sessionState]);const theme=MeganavData.themes[themeName];const absUrl=path=>_absUrl(path,urlBase);return React.createElement("nav",{className:`ui-meganav-wrapper ${theme.backgroundColor} ${theme.barShadow}`,"data-id":"meganav","aria-label":"Main"},notice&&React.createElement(Notice,{...notice.props,config:notice.config}),React.createElement("div",{className:"ui-meganav ui-grid-px"},React.createElement("div",{className:"mr-24"},React.createElement(Logo,{dataId:"meganav-logo",href:urlBase,logoUrl:paths?.logo})),React.createElement(MeganavItemsDesktop,{panels:panels,paths:paths,theme:theme,absUrl:absUrl,statusUrl:statusUrl}),sessionState?React.createElement(SignIn,{sessionState:sessionState,theme:theme,loginLink:loginLink,absUrl:absUrl,searchDataId:searchDataId}):React.createElement(SignInPlaceholder,null),React.createElement(MeganavItemsMobile,{panels:panels,sessionState:sessionState,paths:paths,theme:theme,loginLink:loginLink,absUrl:absUrl,statusUrl:statusUrl,searchDataId:searchDataId})))};export default Meganav;
2
+ //# sourceMappingURL=LegacyMeganav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/LegacyMeganav.tsx"],"sourcesContent":["import React, { ReactNode, useEffect, useState } from \"react\";\n\nimport { connectState } from \"./remote-data-store.js\";\nimport { selectSessionData } from \"./remote-session-data.js\";\n\nimport Logo from \"./Logo\";\nimport MeganavData from \"./LegacyMeganav/component.json\";\nimport MeganavScripts from \"./LegacyMeganav/component.js\";\nimport MeganavItemsDesktop from \"./MeganavItemsDesktop\";\nimport MeganavItemsSignedIn from \"./MeganavItemsSignedIn\";\nimport MeganavItemsMobile from \"./MeganavItemsMobile\";\nimport Notice from \"./Notice\";\nimport _absUrl from \"./url-base.js\";\nimport MeganavContentProducts from \"./MeganavContentProducts\";\nimport MeganavContentUseCases from \"./MeganavContentUseCases\";\nimport MeganavContentCompany from \"./MeganavContentCompany\";\nimport MeganavContentDevelopers from \"./MeganavContentDevelopers\";\nimport MeganavSearch from \"./MeganavSearch\";\nimport { ColorClass } from \"./styles/colors/types\";\n\nexport type MeganavTheme = {\n backgroundColor?: ColorClass;\n textColor?: ColorClass;\n buttonBackgroundColor?: ColorClass;\n buttonTextColor?: ColorClass;\n mobileMenuColor: ColorClass;\n logoTextColor?: ColorClass;\n barShadow?: string;\n};\n\nexport type AbsUrl = (path: string) => string;\n\nexport type MeganavPaths = {\n logo?: string;\n iconSprites: string;\n ablyStack: string;\n blogThumb1: string;\n blogThumb2: string;\n blogThumb3: string;\n awsLogo?: string;\n};\n\nexport type MeganavPanels = {\n [index: string]: ({\n paths,\n absUrl,\n statusUrl,\n }: {\n paths?: MeganavPaths;\n absUrl: (path: string) => string;\n statusUrl: string;\n }) => ReactNode;\n};\n\nexport type MeganavSessionState = {\n signedIn: boolean;\n logOut: {\n token: string;\n href: string;\n text: string;\n };\n accountName: string;\n preferredEmail: string;\n account: {\n links: {\n dashboard: {\n href: string;\n };\n };\n };\n mySettings: {\n text: string;\n href: string;\n };\n myAccessTokens: {\n text: string;\n href: string;\n };\n};\n\ntype SignInProps = {\n sessionState: MeganavSessionState;\n theme: MeganavTheme;\n loginLink: string;\n absUrl: AbsUrl;\n searchDataId?: string;\n};\n\n// This type is based on the API response from the notice API and the data\n// passed into the Meganav component, which then turns it into something\n// the Notice component can use. The type is exported for the benefit of\n// Voltaire\nexport type MeganavNoticeProps = {\n props: {\n title: string;\n bodyText: string;\n buttonLink: string;\n buttonLabel: string;\n closeBtn: boolean;\n };\n config: {\n cookieId: string;\n noticeId: string | number;\n options: {\n collapse: boolean;\n };\n };\n};\n\ntype MeganavProps = {\n paths?: MeganavPaths;\n themeName: \"white\" | \"black\" | \"transparentToWhite\";\n notice?: MeganavNoticeProps;\n loginLink?: string;\n urlBase?: string;\n addSearchApiKey: string;\n statusUrl: string;\n searchDataId?: string;\n};\n\nconst SignIn = ({\n sessionState,\n theme,\n loginLink,\n absUrl,\n searchDataId,\n}: SignInProps) => {\n return sessionState.signedIn ? (\n <MeganavItemsSignedIn\n absUrl={absUrl}\n sessionState={sessionState}\n theme={theme}\n searchDataId={searchDataId}\n />\n ) : (\n <ul className=\"hidden md:flex items-center\">\n <li className=\"ui-meganav-item\">\n <a\n href={absUrl(\"/contact\")}\n className={`ui-meganav-link ${theme.textColor}`}\n data-id=\"meganav-link\"\n >\n Contact us\n </a>\n </li>\n <li className=\"ui-meganav-item\">\n <a\n href={absUrl(loginLink)}\n className={`ui-meganav-link mr-0 ${theme.textColor}`}\n data-id=\"meganav-link\"\n >\n Login\n </a>\n </li>\n <li className=\"ui-meganav-item\">\n <MeganavSearch absUrl={absUrl} dataId={searchDataId} />\n </li>\n <li className=\"ui-meganav-item\">\n <a\n href={absUrl(\"/sign-up\")}\n data-id=\"meganav-sign-up-btn\"\n className={`ui-btn p-btn-small ${theme.buttonBackgroundColor} ${theme.buttonTextColor}`}\n >\n Sign up free\n </a>\n </li>\n </ul>\n );\n};\n\nconst SignInPlaceholder = () => <div />;\n\nconst panels = {\n MeganavContentProducts,\n MeganavContentUseCases,\n MeganavContentCompany,\n MeganavContentDevelopers,\n};\n\nconst Meganav = ({\n paths,\n themeName = \"white\",\n notice,\n loginLink = \"/login\",\n urlBase,\n addSearchApiKey,\n statusUrl,\n searchDataId,\n}: MeganavProps) => {\n const [sessionState, setSessionState] = useState<MeganavSessionState>();\n\n useEffect(() => {\n // Note if state is never updated, sessionState stays null and never removes the placeholder.\n // This makes SSR consistent (ie. we always show the placeholder)\n connectState(selectSessionData, setSessionState);\n }, []);\n\n useEffect(() => {\n const teardown = MeganavScripts({ themeName, addSearchApiKey });\n return () => teardown();\n }, [sessionState]);\n\n const theme = MeganavData.themes[themeName] as MeganavTheme;\n const absUrl = (path: string) => _absUrl(path, urlBase);\n\n return (\n <nav\n className={`ui-meganav-wrapper ${theme.backgroundColor} ${theme.barShadow}`}\n data-id=\"meganav\"\n aria-label=\"Main\"\n >\n {notice && <Notice {...notice.props} config={notice.config} />}\n <div className=\"ui-meganav ui-grid-px\">\n <div className=\"mr-24\">\n <Logo dataId=\"meganav-logo\" href={urlBase} logoUrl={paths?.logo} />\n </div>\n\n <MeganavItemsDesktop\n panels={panels}\n paths={paths}\n theme={theme}\n absUrl={absUrl}\n statusUrl={statusUrl}\n />\n\n {/* Because we load the session state through fetch, we display a placeholder until fetch returns */}\n {sessionState ? (\n <SignIn\n sessionState={sessionState}\n theme={theme}\n loginLink={loginLink}\n absUrl={absUrl}\n searchDataId={searchDataId}\n />\n ) : (\n <SignInPlaceholder />\n )}\n\n <MeganavItemsMobile\n panels={panels}\n sessionState={sessionState}\n paths={paths}\n theme={theme}\n loginLink={loginLink}\n absUrl={absUrl}\n statusUrl={statusUrl}\n searchDataId={searchDataId}\n />\n </div>\n </nav>\n );\n};\n\nexport default Meganav;\n"],"names":["React","useEffect","useState","connectState","selectSessionData","Logo","MeganavData","MeganavScripts","MeganavItemsDesktop","MeganavItemsSignedIn","MeganavItemsMobile","Notice","_absUrl","MeganavContentProducts","MeganavContentUseCases","MeganavContentCompany","MeganavContentDevelopers","MeganavSearch","SignIn","sessionState","theme","loginLink","absUrl","searchDataId","signedIn","ul","className","li","a","href","textColor","data-id","dataId","buttonBackgroundColor","buttonTextColor","SignInPlaceholder","div","panels","Meganav","paths","themeName","notice","urlBase","addSearchApiKey","statusUrl","setSessionState","teardown","themes","path","nav","backgroundColor","barShadow","aria-label","props","config","logoUrl","logo"],"mappings":"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"}
Binary file
@@ -0,0 +1,2 @@
1
+ import React from"react";import Header from"../Header";import Icon from"../Icon";import Flyout from"../Flyout";import{menuItemsForHeader}from"./data";import{MeganavMobile}from"./MeganavMobile";import Notice from"../Notice";const Meganav=({sessionState,searchDataId,notice})=>{const mobileNavItems=menuItemsForHeader.filter(item=>!item.isHiddenMobile).map(({name,link,content})=>({name,link,content}));return React.createElement("div",{className:"absolute inset-0 w-full z-50 "},notice&&React.createElement(Notice,{...notice.props,config:notice.config}),React.createElement(Header,{headerClassName:"max-w-screen-xl mx-auto ui-grid-px",nav:React.createElement(Flyout,{menuItems:menuItemsForHeader,className:"justify-left z-40",flyOutClassName:"flex justify-left",viewPortClassName:"ui-shadow-lg-medium border border-neutral-000 dark:border-neutral-1300 rounded-2xl mt-8 bg-neutral-000 dark:bg-neutral-1300",hasAnimation:true}),mobileNav:React.createElement(MeganavMobile,{mobileNavItems:mobileNavItems}),searchButton:React.createElement("button",{type:"button","data-control":"search","data-id":searchDataId,className:"cursor-pointer h-24 w-24 group focus:outline-none","aria-expanded":"false","aria-controls":"panel-search","aria-label":"Ask AI"},React.createElement(Icon,{name:"icon-gui-magnifying-glass-outline",color:"text-neutral-1300",size:"24px"})),headerLinks:[{href:"/contact",label:"Help"}],sessionState:sessionState}))};export default Meganav;
2
+ //# sourceMappingURL=Meganav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/Meganav/Meganav.tsx"],"sourcesContent":["import React from \"react\";\nimport Header, { HeaderSessionState } from \"../Header\";\nimport Icon from \"../Icon\";\nimport Flyout from \"../Flyout\";\nimport { menuItemsForHeader } from \"./data\";\nimport { MeganavMobile } from \"./MeganavMobile\";\nimport Notice from \"../Notice\";\n\nexport type MeganavNoticeBannerProps = {\n props: {\n title: string;\n bodyText: string;\n buttonLink: string;\n buttonLabel: string;\n closeBtn: boolean;\n };\n config: {\n cookieId: string;\n noticeId: string | number;\n options: {\n collapse: boolean;\n };\n };\n};\n\nexport type MeganavProps = {\n sessionState: HeaderSessionState;\n searchDataId: string;\n notice?: MeganavNoticeBannerProps;\n};\n\nconst Meganav = ({ sessionState, searchDataId, notice }: MeganavProps) => {\n const mobileNavItems = menuItemsForHeader\n .filter((item) => !item.isHiddenMobile)\n .map(({ name, link, content }) => ({ name, link, content }));\n\n return (\n <div className=\"absolute inset-0 w-full z-50 \">\n {notice && <Notice {...notice.props} config={notice.config} />}\n <Header\n headerClassName=\"max-w-screen-xl mx-auto ui-grid-px\"\n nav={\n <Flyout\n menuItems={menuItemsForHeader}\n className=\"justify-left z-40\"\n flyOutClassName=\"flex justify-left\"\n viewPortClassName=\"ui-shadow-lg-medium border border-neutral-000 dark:border-neutral-1300 rounded-2xl mt-8 bg-neutral-000 dark:bg-neutral-1300\"\n hasAnimation={true}\n />\n }\n mobileNav={<MeganavMobile mobileNavItems={mobileNavItems} />}\n searchButton={\n <button\n type=\"button\"\n data-control=\"search\"\n data-id={searchDataId}\n className=\"cursor-pointer h-24 w-24 group focus:outline-none\"\n aria-expanded=\"false\"\n aria-controls=\"panel-search\"\n aria-label=\"Ask AI\"\n >\n <Icon\n name=\"icon-gui-magnifying-glass-outline\"\n color=\"text-neutral-1300\"\n size=\"24px\"\n />\n </button>\n }\n headerLinks={[{ href: \"/contact\", label: \"Help\" }]}\n sessionState={sessionState}\n />\n </div>\n );\n};\n\nexport default Meganav;\n"],"names":["React","Header","Icon","Flyout","menuItemsForHeader","MeganavMobile","Notice","Meganav","sessionState","searchDataId","notice","mobileNavItems","filter","item","isHiddenMobile","map","name","link","content","div","className","props","config","headerClassName","nav","menuItems","flyOutClassName","viewPortClassName","hasAnimation","mobileNav","searchButton","button","type","data-control","data-id","aria-expanded","aria-controls","aria-label","color","size","headerLinks","href","label"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,WAAoC,WAAY,AACvD,QAAOC,SAAU,SAAU,AAC3B,QAAOC,WAAY,WAAY,AAC/B,QAASC,kBAAkB,KAAQ,QAAS,AAC5C,QAASC,aAAa,KAAQ,iBAAkB,AAChD,QAAOC,WAAY,WAAY,CAyB/B,MAAMC,QAAU,CAAC,CAAEC,YAAY,CAAEC,YAAY,CAAEC,MAAM,CAAgB,IACnE,MAAMC,eAAiBP,mBACpBQ,MAAM,CAAC,AAACC,MAAS,CAACA,KAAKC,cAAc,EACrCC,GAAG,CAAC,CAAC,CAAEC,IAAI,CAAEC,IAAI,CAAEC,OAAO,CAAE,GAAM,CAAA,CAAEF,KAAMC,KAAMC,OAAQ,CAAA,GAE3D,OACE,oBAACC,OAAIC,UAAU,iCACZV,QAAU,oBAACJ,QAAQ,GAAGI,OAAOW,KAAK,CAAEC,OAAQZ,OAAOY,MAAM,GAC1D,oBAACrB,QACCsB,gBAAgB,qCAChBC,IACE,oBAACrB,QACCsB,UAAWrB,mBACXgB,UAAU,oBACVM,gBAAgB,oBAChBC,kBAAkB,8HAClBC,aAAc,OAGlBC,UAAW,oBAACxB,eAAcM,eAAgBA,iBAC1CmB,aACE,oBAACC,UACCC,KAAK,SACLC,eAAa,SACbC,UAASzB,aACTW,UAAU,oDACVe,gBAAc,QACdC,gBAAc,eACdC,aAAW,UAEX,oBAACnC,MACCc,KAAK,oCACLsB,MAAM,oBACNC,KAAK,UAIXC,YAAa,CAAC,CAAEC,KAAM,WAAYC,MAAO,MAAO,EAAE,CAClDlC,aAAcA,eAItB,CAEA,gBAAeD,OAAQ"}
@@ -0,0 +1,2 @@
1
+ import React from"react";import Accordion from"../Accordion";import{menuItemLinks}from"./data";import cn from"../utils/cn";export const MeganavMobile=({mobileNavItems})=>{const menuItemClassname="text-[18px] py-12 font-bold text-neutral-1000 dark:text-neutral-000";return React.createElement(React.Fragment,null,React.createElement(Accordion,{theme:"transparent",className:"overflow-y-auto px-16 pt-16",data:mobileNavItems,icons:{closed:{name:"icon-gui-chevron-down-solid"},open:{name:"icon-gui-chevron-up-solid"}},options:{autoClose:true,hideBorders:true,headerCSS:`px-0 ${menuItemClassname}`,contentCSS:"px-0",selectedHeaderCSS:"text-neutral-1300 dark:text-neutral-000",rowIconSize:"24px"}}),menuItemLinks&&React.createElement("div",{className:"mb-12"},menuItemLinks.map(link=>React.createElement("a",{href:link.link,key:link.name,className:cn("px-16 w-full block ui-text-p1",menuItemClassname)},link.name))))};
2
+ //# sourceMappingURL=MeganavMobile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/Meganav/MeganavMobile.tsx"],"sourcesContent":["import React from \"react\";\nimport Accordion from \"../Accordion\";\nimport { AccordionData } from \"../Accordion/types\";\nimport { menuItemLinks } from \"./data\";\nimport cn from \"../utils/cn\";\n\nexport const MeganavMobile = ({\n mobileNavItems,\n}: {\n mobileNavItems: AccordionData[];\n}) => {\n const menuItemClassname =\n \"text-[18px] py-12 font-bold text-neutral-1000 dark:text-neutral-000\";\n return (\n <>\n <Accordion\n theme=\"transparent\"\n className=\"overflow-y-auto px-16 pt-16\"\n data={mobileNavItems}\n icons={{\n closed: { name: \"icon-gui-chevron-down-solid\" },\n open: { name: \"icon-gui-chevron-up-solid\" },\n }}\n options={{\n autoClose: true,\n hideBorders: true,\n headerCSS: `px-0 ${menuItemClassname}`,\n contentCSS: \"px-0\",\n selectedHeaderCSS: \"text-neutral-1300 dark:text-neutral-000\",\n rowIconSize: \"24px\",\n }}\n />\n {menuItemLinks && (\n <div className=\"mb-12\">\n {menuItemLinks.map((link) => (\n <a\n href={link.link}\n key={link.name}\n className={cn(\"px-16 w-full block ui-text-p1\", menuItemClassname)}\n >\n {link.name}\n </a>\n ))}\n </div>\n )}\n </>\n );\n};\n"],"names":["React","Accordion","menuItemLinks","cn","MeganavMobile","mobileNavItems","menuItemClassname","theme","className","data","icons","closed","name","open","options","autoClose","hideBorders","headerCSS","contentCSS","selectedHeaderCSS","rowIconSize","div","map","link","a","href","key"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,cAAe,cAAe,AAErC,QAASC,aAAa,KAAQ,QAAS,AACvC,QAAOC,OAAQ,aAAc,AAE7B,QAAO,MAAMC,cAAgB,CAAC,CAC5BC,cAAc,CAGf,IACC,MAAMC,kBACJ,sEACF,OACE,wCACE,oBAACL,WACCM,MAAM,cACNC,UAAU,8BACVC,KAAMJ,eACNK,MAAO,CACLC,OAAQ,CAAEC,KAAM,6BAA8B,EAC9CC,KAAM,CAAED,KAAM,2BAA4B,CAC5C,EACAE,QAAS,CACPC,UAAW,KACXC,YAAa,KACbC,UAAW,CAAC,KAAK,EAAEX,kBAAkB,CAAC,CACtCY,WAAY,OACZC,kBAAmB,0CACnBC,YAAa,MACf,IAEDlB,eACC,oBAACmB,OAAIb,UAAU,SACZN,cAAcoB,GAAG,CAAC,AAACC,MAClB,oBAACC,KACCC,KAAMF,KAAKA,IAAI,CACfG,IAAKH,KAAKX,IAAI,CACdJ,UAAWL,GAAG,gCAAiCG,oBAE9CiB,KAAKX,IAAI,IAOxB,CAAE"}
@@ -0,0 +1,2 @@
1
+ import React from"react";import cn from"../utils/cn";import Icon from"../Icon";import FeaturedLink from"../FeaturedLink";import{products}from"../ProductTile/data";import ProductTile from"../ProductTile";export const MeganavPanel=({displayProductTile,panelLeft,panelLeftClassName,panelRightHeading,panelRightItems,panelRightBottom})=>{return React.createElement("div",{className:"flex flex-col md:flex-row gap-x-24 bg-neutral-000 dark:bg-neutral-1300"},React.createElement("div",{className:cn("flex-[7] flex-shrink-0 grid-cols-1 xs:grid-cols-2",panelLeftClassName)},displayProductTile?Object.keys(products).map(product=>React.createElement(ProductTile,{name:product,key:product,selected:false,onClick:()=>window.location.href=products[product]?.link,animateIcons:true})):panelLeft&&React.createElement(React.Fragment,null,React.createElement("div",{className:"w-full p-24"},React.createElement("h4",{className:"ui-text-h4 text-neutral-1300 dark:text-neutral-000"},panelLeft.heading),React.createElement("p",{className:"ui-text-p3 text-neutral-800 dark:text-neutral-500 mt-8"},panelLeft.content),React.createElement(FeaturedLink,{url:panelLeft.url,additionalCSS:"text-neutral-1300 dark:text-neutral-000 mt-16 ui-text-p3",iconColor:"text-orange-600"},panelLeft.labelLink)),React.createElement("div",{className:"flex justify-end"},React.createElement("img",{src:panelLeft.image,alt:panelLeft.heading,className:"w-full z-10 rounded-lg"})))),React.createElement("div",{className:"mt-12 md:mt-0 flex-[3] flex-shrink-0 flex flex-col justify-between"},React.createElement("ul",null,panelRightHeading&&React.createElement("p",{className:"ui-text-overline2 text-neutral-700 dark:text-neutral-600 my-12"},"platform"),panelRightItems.map(item=>React.createElement("li",{className:cn("list-none py-12 my-0 flex gap-x-[10px] group hover:cursor-pointer",item.isMobile?"md:hidden":"md:flex"),key:item.label},React.createElement(Icon,{name:item.icon,size:"1.25rem",additionalCSS:"text-neutral-1000 dark:text-neutral-300"}),React.createElement("a",{className:"ui-text-menu2 md:ui-text-menu3 font-semibold text-neutral-1000 dark:text-neutral-300 group-hover:text-neutral-1300 dark:group-hover:text-neutral-000",href:item.link},item.label)))),panelRightBottom&&React.createElement("div",{className:"items-end mt-16 md:mt-0"},panelRightBottom)))};
2
+ //# sourceMappingURL=MeganavPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/Meganav/MeganavPanel.tsx"],"sourcesContent":["import React from \"react\";\nimport cn from \"../utils/cn\";\nimport Icon from \"../Icon\";\nimport { FlyoutPanelHighlight, FlyoutPanelList } from \"./data\";\nimport FeaturedLink from \"../FeaturedLink\";\nimport { ProductName, products } from \"../ProductTile/data\";\nimport ProductTile from \"../ProductTile\";\n\nexport const MeganavPanel = ({\n displayProductTile,\n panelLeft,\n panelLeftClassName,\n panelRightHeading,\n panelRightItems,\n panelRightBottom,\n}: {\n displayProductTile?: boolean;\n panelLeft?: FlyoutPanelHighlight;\n panelLeftClassName?: string;\n panelRightHeading?: string;\n panelRightItems: FlyoutPanelList[];\n panelRightBottom?: React.ReactNode;\n}) => {\n return (\n <div className=\"flex flex-col md:flex-row gap-x-24 bg-neutral-000 dark:bg-neutral-1300\">\n <div\n className={cn(\n \"flex-[7] flex-shrink-0 grid-cols-1 xs:grid-cols-2\",\n panelLeftClassName,\n )}\n >\n {displayProductTile\n ? Object.keys(products).map((product) => (\n <ProductTile\n name={product as ProductName}\n key={product}\n selected={false}\n onClick={() =>\n (window.location.href = products[product as ProductName]\n ?.link as string)\n }\n animateIcons={true}\n />\n ))\n : panelLeft && (\n <>\n <div className=\"w-full p-24\">\n <h4 className=\"ui-text-h4 text-neutral-1300 dark:text-neutral-000\">\n {panelLeft.heading}\n </h4>\n <p className=\"ui-text-p3 text-neutral-800 dark:text-neutral-500 mt-8\">\n {panelLeft.content}\n </p>\n <FeaturedLink\n url={panelLeft.url}\n additionalCSS=\"text-neutral-1300 dark:text-neutral-000 mt-16 ui-text-p3\"\n iconColor=\"text-orange-600\"\n >\n {panelLeft.labelLink}\n </FeaturedLink>\n </div>\n <div className=\"flex justify-end\">\n <img\n src={panelLeft.image}\n alt={panelLeft.heading}\n className=\"w-full z-10 rounded-lg\"\n />\n </div>\n </>\n )}\n </div>\n <div className=\"mt-12 md:mt-0 flex-[3] flex-shrink-0 flex flex-col justify-between\">\n <ul>\n {panelRightHeading && (\n <p className=\"ui-text-overline2 text-neutral-700 dark:text-neutral-600 my-12\">\n platform\n </p>\n )}\n\n {panelRightItems.map((item) => (\n <li\n className={cn(\n \"list-none py-12 my-0 flex gap-x-[10px] group hover:cursor-pointer\",\n item.isMobile ? \"md:hidden\" : \"md:flex\",\n )}\n key={item.label}\n >\n <Icon\n name={item.icon}\n size=\"1.25rem\"\n additionalCSS=\"text-neutral-1000 dark:text-neutral-300\"\n />\n <a\n className=\"ui-text-menu2 md:ui-text-menu3 font-semibold text-neutral-1000 dark:text-neutral-300 group-hover:text-neutral-1300 dark:group-hover:text-neutral-000\"\n href={item.link}\n >\n {item.label}\n </a>\n </li>\n ))}\n </ul>\n {panelRightBottom && (\n <div className=\"items-end mt-16 md:mt-0\">{panelRightBottom}</div>\n )}\n </div>\n </div>\n );\n};\n"],"names":["React","cn","Icon","FeaturedLink","products","ProductTile","MeganavPanel","displayProductTile","panelLeft","panelLeftClassName","panelRightHeading","panelRightItems","panelRightBottom","div","className","Object","keys","map","product","name","key","selected","onClick","window","location","href","link","animateIcons","h4","heading","p","content","url","additionalCSS","iconColor","labelLink","img","src","image","alt","ul","item","li","isMobile","label","icon","size","a"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,OAAQ,aAAc,AAC7B,QAAOC,SAAU,SAAU,AAE3B,QAAOC,iBAAkB,iBAAkB,AAC3C,QAAsBC,QAAQ,KAAQ,qBAAsB,AAC5D,QAAOC,gBAAiB,gBAAiB,AAEzC,QAAO,MAAMC,aAAe,CAAC,CAC3BC,kBAAkB,CAClBC,SAAS,CACTC,kBAAkB,CAClBC,iBAAiB,CACjBC,eAAe,CACfC,gBAAgB,CAQjB,IACC,OACE,oBAACC,OAAIC,UAAU,0EACb,oBAACD,OACCC,UAAWb,GACT,oDACAQ,qBAGDF,mBACGQ,OAAOC,IAAI,CAACZ,UAAUa,GAAG,CAAC,AAACC,SACzB,oBAACb,aACCc,KAAMD,QACNE,IAAKF,QACLG,SAAU,MACVC,QAAS,IACNC,OAAOC,QAAQ,CAACC,IAAI,CAAGrB,QAAQ,CAACc,QAAuB,EACpDQ,KAENC,aAAc,QAGlBnB,WACE,wCACE,oBAACK,OAAIC,UAAU,eACb,oBAACc,MAAGd,UAAU,sDACXN,UAAUqB,OAAO,EAEpB,oBAACC,KAAEhB,UAAU,0DACVN,UAAUuB,OAAO,EAEpB,oBAAC5B,cACC6B,IAAKxB,UAAUwB,GAAG,CAClBC,cAAc,2DACdC,UAAU,mBAET1B,UAAU2B,SAAS,GAGxB,oBAACtB,OAAIC,UAAU,oBACb,oBAACsB,OACCC,IAAK7B,UAAU8B,KAAK,CACpBC,IAAK/B,UAAUqB,OAAO,CACtBf,UAAU,8BAMxB,oBAACD,OAAIC,UAAU,sEACb,oBAAC0B,UACE9B,mBACC,oBAACoB,KAAEhB,UAAU,kEAAiE,YAK/EH,gBAAgBM,GAAG,CAAC,AAACwB,MACpB,oBAACC,MACC5B,UAAWb,GACT,oEACAwC,KAAKE,QAAQ,CAAG,YAAc,WAEhCvB,IAAKqB,KAAKG,KAAK,EAEf,oBAAC1C,MACCiB,KAAMsB,KAAKI,IAAI,CACfC,KAAK,UACLb,cAAc,4CAEhB,oBAACc,KACCjC,UAAU,uJACVW,KAAMgB,KAAKf,IAAI,EAEde,KAAKG,KAAK,KAKlBhC,kBACC,oBAACC,OAAIC,UAAU,2BAA2BF,mBAKpD,CAAE"}
@@ -0,0 +1,2 @@
1
+ import React from"react";import{MeganavPanel}from"./MeganavPanel";import Status,{StatusUrl}from"../Status";import FanEngagementNavImage from"./images/fan-engagement-nav-image.png";import CompanyNavImage from"./images/founders-nav-image.png";import BestRequirementsWinter2025 from"../images/award/g2-best-meets-requirements-2025.png";import BestSupportWinter2025 from"../images/award/g2-best-support-2025.png";import HighPerformerWinter2025 from"../images/award/g2-high-performer-2025.png";const panelClassName="w-full sm:w-[815px]";const productsMenu=[{label:"Infrastructure",icon:"icon-gui-globe-alt-outline",link:"/infrastructure"},{label:"Integrations",icon:"icon-gui-puzzle-piece-outline",link:"/integrations"},{label:"SDKs",icon:"icon-gui-cube-transparent-outline",link:"/docs/sdks"},{label:"Security & Compliance",icon:"icon-gui-shield-check-outline",link:"/security-and-compliance"}];const solutionsHighlight={heading:"Fan Engagement",content:"Capture the attention of millions of fans during live events.",labelLink:"Learn more",url:"/fan-engagement",image:FanEngagementNavImage};const solutionsMenu=[{label:"Fan Engagement",icon:"icon-gui-hand-thumb-up-outline",link:"/fan-engagement",isMobile:true},{label:"Biztech",icon:"icon-gui-building-office-outline",link:"/solutions/ecommerce-and-retail"},{label:"Fintech",icon:"icon-gui-currency-dollar-outline",link:"/solutions/fintech"},{label:"Healthcare",icon:"icon-gui-heart-outline",link:"/solutions/healthcare"},{label:"EdTech",icon:"icon-gui-academic-cap-outline",link:"/solutions/edtech"}];const companyHighlight={heading:"Leading the realtime revolution",content:"Hear from our founders about Ably’s ambitious plans to become the world’s definitive realtime platform.",labelLink:"About Ably",url:"/about",image:CompanyNavImage};const companyMenu=[{label:"About Ably",icon:"icon-gui-ably-badge",link:"/about",isMobile:true},{label:"Customer stories",icon:"icon-gui-star-outline",link:"/"},{label:"Careers",icon:"icon-gui-briefcase-outline",link:"/case-studies"},{label:"Blog",icon:"icon-gui-light-bulb-outline",link:"/blog"},{label:"Contact us",icon:"icon-gui-chat-bubble-bottom-center-text-outline",link:"/contact"}];const ablyAwards=[{image:BestRequirementsWinter2025,desc:"G2 Best Requirements Winter 2025"},{image:BestSupportWinter2025,desc:"G2 Best Support Winter 2025"},{image:HighPerformerWinter2025,desc:"G2 High Performer Winter 2025"}];export const menuItemLinks=[{name:"Pricing",link:"/pricing",isHiddenMobile:true},{name:"Docs",link:"/docs",isHiddenMobile:true}];export const menuItemsForHeader=[{name:"Home",link:"/",isHiddenMobile:true},{name:"Products",content:React.createElement(MeganavPanel,{displayProductTile:true,panelLeftClassName:"grid",panelRightItems:productsMenu,panelRightHeading:"platform",panelRightBottom:React.createElement(Status,{statusUrl:StatusUrl,showDescription:true})}),panelClassName},{name:"Solutions",content:React.createElement(MeganavPanel,{panelLeft:solutionsHighlight,panelLeftClassName:"bg-neutral-100 dark:bg-neutral-1200 hidden md:grid rounded-lg border-neutral-300 dark:border-neutral-1000",panelRightItems:solutionsMenu}),panelClassName},{name:"Company",content:React.createElement(MeganavPanel,{panelLeft:companyHighlight,panelLeftClassName:"bg-neutral-100 dark:bg-neutral-1200 hidden md:grid rounded-lg border-neutral-300 dark:border-neutral-1000",panelRightItems:companyMenu,panelRightBottom:React.createElement("div",{className:"flex-1 gap-x-8 hidden md:flex"},ablyAwards.map(award=>React.createElement("img",{key:award.desc,src:award.image,alt:award.desc,width:"57",height:"64"})))}),panelClassName},...menuItemLinks];
2
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/Meganav/data.tsx"],"sourcesContent":["import React from \"react\";\nimport { IconName } from \"../Icon/types\";\nimport { MeganavPanel } from \"./MeganavPanel\";\nimport Status, { StatusUrl } from \"../Status\";\nimport FanEngagementNavImage from \"./images/fan-engagement-nav-image.png\";\nimport CompanyNavImage from \"./images/founders-nav-image.png\";\nimport BestRequirementsWinter2025 from \"../images/award/g2-best-meets-requirements-2025.png\";\nimport BestSupportWinter2025 from \"../images/award/g2-best-support-2025.png\";\nimport HighPerformerWinter2025 from \"../images/award/g2-high-performer-2025.png\";\n\nexport type FlyoutPanelList = {\n label: string;\n icon: IconName;\n link: string;\n isMobile?: boolean;\n};\n\nexport type FlyoutPanelHighlight = {\n heading: string;\n content: string;\n labelLink: string;\n url: string;\n image: string;\n};\n\nexport type MenuItem = {\n name: string;\n link?: string;\n isHiddenMobile?: boolean;\n content?: React.ReactNode;\n panelClassName?: string;\n};\n\nconst panelClassName = \"w-full sm:w-[815px]\";\n\nconst productsMenu: FlyoutPanelList[] = [\n {\n label: \"Infrastructure\",\n icon: \"icon-gui-globe-alt-outline\",\n link: \"/infrastructure\",\n },\n {\n label: \"Integrations\",\n icon: \"icon-gui-puzzle-piece-outline\",\n link: \"/integrations\",\n },\n {\n label: \"SDKs\",\n icon: \"icon-gui-cube-transparent-outline\",\n link: \"/docs/sdks\",\n },\n {\n label: \"Security & Compliance\",\n icon: \"icon-gui-shield-check-outline\",\n link: \"/security-and-compliance\",\n },\n];\n\nconst solutionsHighlight: FlyoutPanelHighlight = {\n heading: \"Fan Engagement\",\n content: \"Capture the attention of millions of fans during live events.\",\n labelLink: \"Learn more\",\n url: \"/fan-engagement\",\n image: FanEngagementNavImage,\n};\n\nconst solutionsMenu: FlyoutPanelList[] = [\n {\n label: \"Fan Engagement\",\n icon: \"icon-gui-hand-thumb-up-outline\",\n link: \"/fan-engagement\",\n isMobile: true,\n },\n {\n label: \"Biztech\",\n icon: \"icon-gui-building-office-outline\",\n link: \"/solutions/ecommerce-and-retail\",\n },\n {\n label: \"Fintech\",\n icon: \"icon-gui-currency-dollar-outline\",\n link: \"/solutions/fintech\",\n },\n {\n label: \"Healthcare\",\n icon: \"icon-gui-heart-outline\",\n link: \"/solutions/healthcare\",\n },\n {\n label: \"EdTech\",\n icon: \"icon-gui-academic-cap-outline\",\n link: \"/solutions/edtech\",\n },\n];\n\nconst companyHighlight: FlyoutPanelHighlight = {\n heading: \"Leading the realtime revolution\",\n content:\n \"Hear from our founders about Ably’s ambitious plans to become the world’s definitive realtime platform.\",\n labelLink: \"About Ably\",\n url: \"/about\",\n image: CompanyNavImage,\n};\n\nconst companyMenu: FlyoutPanelList[] = [\n {\n label: \"About Ably\",\n icon: \"icon-gui-ably-badge\",\n link: \"/about\",\n isMobile: true,\n },\n {\n label: \"Customer stories\",\n icon: \"icon-gui-star-outline\",\n link: \"/\",\n },\n {\n label: \"Careers\",\n icon: \"icon-gui-briefcase-outline\",\n link: \"/case-studies\",\n },\n {\n label: \"Blog\",\n icon: \"icon-gui-light-bulb-outline\",\n link: \"/blog\",\n },\n {\n label: \"Contact us\",\n icon: \"icon-gui-chat-bubble-bottom-center-text-outline\",\n link: \"/contact\",\n },\n];\n\nconst ablyAwards = [\n {\n image: BestRequirementsWinter2025,\n desc: \"G2 Best Requirements Winter 2025\",\n },\n {\n image: BestSupportWinter2025,\n desc: \"G2 Best Support Winter 2025\",\n },\n {\n image: HighPerformerWinter2025,\n desc: \"G2 High Performer Winter 2025\",\n },\n];\n\nexport const menuItemLinks = [\n { name: \"Pricing\", link: \"/pricing\", isHiddenMobile: true },\n { name: \"Docs\", link: \"/docs\", isHiddenMobile: true },\n];\n\nexport const menuItemsForHeader: MenuItem[] = [\n { name: \"Home\", link: \"/\", isHiddenMobile: true },\n {\n name: \"Products\",\n content: (\n <MeganavPanel\n displayProductTile={true}\n panelLeftClassName=\"grid\"\n panelRightItems={productsMenu}\n panelRightHeading=\"platform\"\n panelRightBottom={<Status statusUrl={StatusUrl} showDescription />}\n />\n ),\n panelClassName,\n },\n {\n name: \"Solutions\",\n content: (\n <MeganavPanel\n panelLeft={solutionsHighlight}\n panelLeftClassName=\"bg-neutral-100 dark:bg-neutral-1200 hidden md:grid rounded-lg border-neutral-300 dark:border-neutral-1000\"\n panelRightItems={solutionsMenu}\n />\n ),\n panelClassName,\n },\n {\n name: \"Company\",\n content: (\n <MeganavPanel\n panelLeft={companyHighlight}\n panelLeftClassName=\"bg-neutral-100 dark:bg-neutral-1200 hidden md:grid rounded-lg border-neutral-300 dark:border-neutral-1000\"\n panelRightItems={companyMenu}\n panelRightBottom={\n <div className=\"flex-1 gap-x-8 hidden md:flex\">\n {ablyAwards.map((award) => (\n <img\n key={award.desc}\n src={award.image}\n alt={award.desc}\n width=\"57\"\n height=\"64\"\n />\n ))}\n </div>\n }\n />\n ),\n panelClassName,\n },\n ...menuItemLinks,\n];\n"],"names":["React","MeganavPanel","Status","StatusUrl","FanEngagementNavImage","CompanyNavImage","BestRequirementsWinter2025","BestSupportWinter2025","HighPerformerWinter2025","panelClassName","productsMenu","label","icon","link","solutionsHighlight","heading","content","labelLink","url","image","solutionsMenu","isMobile","companyHighlight","companyMenu","ablyAwards","desc","menuItemLinks","name","isHiddenMobile","menuItemsForHeader","displayProductTile","panelLeftClassName","panelRightItems","panelRightHeading","panelRightBottom","statusUrl","showDescription","panelLeft","div","className","map","award","img","key","src","alt","width","height"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAE1B,QAASC,YAAY,KAAQ,gBAAiB,AAC9C,QAAOC,QAAUC,SAAS,KAAQ,WAAY,AAC9C,QAAOC,0BAA2B,uCAAwC,AAC1E,QAAOC,oBAAqB,iCAAkC,AAC9D,QAAOC,+BAAgC,qDAAsD,AAC7F,QAAOC,0BAA2B,0CAA2C,AAC7E,QAAOC,4BAA6B,4CAA6C,CAyBjF,MAAMC,eAAiB,sBAEvB,MAAMC,aAAkC,CACtC,CACEC,MAAO,iBACPC,KAAM,6BACNC,KAAM,iBACR,EACA,CACEF,MAAO,eACPC,KAAM,gCACNC,KAAM,eACR,EACA,CACEF,MAAO,OACPC,KAAM,oCACNC,KAAM,YACR,EACA,CACEF,MAAO,wBACPC,KAAM,gCACNC,KAAM,0BACR,EACD,CAED,MAAMC,mBAA2C,CAC/CC,QAAS,iBACTC,QAAS,gEACTC,UAAW,aACXC,IAAK,kBACLC,MAAOf,qBACT,EAEA,MAAMgB,cAAmC,CACvC,CACET,MAAO,iBACPC,KAAM,iCACNC,KAAM,kBACNQ,SAAU,IACZ,EACA,CACEV,MAAO,UACPC,KAAM,mCACNC,KAAM,iCACR,EACA,CACEF,MAAO,UACPC,KAAM,mCACNC,KAAM,oBACR,EACA,CACEF,MAAO,aACPC,KAAM,yBACNC,KAAM,uBACR,EACA,CACEF,MAAO,SACPC,KAAM,gCACNC,KAAM,mBACR,EACD,CAED,MAAMS,iBAAyC,CAC7CP,QAAS,kCACTC,QACE,0GACFC,UAAW,aACXC,IAAK,SACLC,MAAOd,eACT,EAEA,MAAMkB,YAAiC,CACrC,CACEZ,MAAO,aACPC,KAAM,sBACNC,KAAM,SACNQ,SAAU,IACZ,EACA,CACEV,MAAO,mBACPC,KAAM,wBACNC,KAAM,GACR,EACA,CACEF,MAAO,UACPC,KAAM,6BACNC,KAAM,eACR,EACA,CACEF,MAAO,OACPC,KAAM,8BACNC,KAAM,OACR,EACA,CACEF,MAAO,aACPC,KAAM,kDACNC,KAAM,UACR,EACD,CAED,MAAMW,WAAa,CACjB,CACEL,MAAOb,2BACPmB,KAAM,kCACR,EACA,CACEN,MAAOZ,sBACPkB,KAAM,6BACR,EACA,CACEN,MAAOX,wBACPiB,KAAM,+BACR,EACD,AAED,QAAO,MAAMC,cAAgB,CAC3B,CAAEC,KAAM,UAAWd,KAAM,WAAYe,eAAgB,IAAK,EAC1D,CAAED,KAAM,OAAQd,KAAM,QAASe,eAAgB,IAAK,EACrD,AAAC,AAEF,QAAO,MAAMC,mBAAiC,CAC5C,CAAEF,KAAM,OAAQd,KAAM,IAAKe,eAAgB,IAAK,EAChD,CACED,KAAM,WACNX,QACE,oBAACf,cACC6B,mBAAoB,KACpBC,mBAAmB,OACnBC,gBAAiBtB,aACjBuB,kBAAkB,WAClBC,iBAAkB,oBAAChC,QAAOiC,UAAWhC,UAAWiC,gBAAAA,SAGpD3B,cACF,EACA,CACEkB,KAAM,YACNX,QACE,oBAACf,cACCoC,UAAWvB,mBACXiB,mBAAmB,4GACnBC,gBAAiBZ,gBAGrBX,cACF,EACA,CACEkB,KAAM,UACNX,QACE,oBAACf,cACCoC,UAAWf,iBACXS,mBAAmB,4GACnBC,gBAAiBT,YACjBW,iBACE,oBAACI,OAAIC,UAAU,iCACZf,WAAWgB,GAAG,CAAC,AAACC,OACf,oBAACC,OACCC,IAAKF,MAAMhB,IAAI,CACfmB,IAAKH,MAAMtB,KAAK,CAChB0B,IAAKJ,MAAMhB,IAAI,CACfqB,MAAM,KACNC,OAAO,WAOnBtC,cACF,KACGiB,cACJ,AAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/MeganavBlogPostsList.tsx"],"sourcesContent":["import React from \"react\";\n\nimport FeaturedLink from \"./FeaturedLink\";\nimport { AbsUrl } from \"./Meganav\";\n\ntype MeganavBlogPostsListProps = {\n recentBlogPosts: {\n link: string;\n title: string;\n pubDate: string;\n }[];\n absUrl: AbsUrl;\n};\n\nconst MeganavBlogPostsList = ({\n recentBlogPosts,\n absUrl,\n}: MeganavBlogPostsListProps) =>\n recentBlogPosts ? (\n <div className=\"col-span-full md:col-span-4 pt-8 pb-24 md:py-24 lg:py-32 px-24 sm:px-32 md:px-0\">\n <h3 className=\"ui-meganav-overline\" id=\"meganav-company-panel-list-blog\">\n Blog\n </h3>\n <ul className=\"mb-8\" aria-labelledby=\"meganav-company-panel-list-blog\">\n {recentBlogPosts.map((post) => (\n <li key={post.link}>\n <a href={post.link} className=\"ui-meganav-media group\">\n <p className=\"ui-meganav-media-heading\">{post.title}</p>\n <p className=\"ui-meganav-media-copy\">{post.pubDate}</p>\n </a>\n </li>\n ))}\n </ul>\n\n <FeaturedLink url={absUrl(\"/blog\")} textSize=\"text-p3\">\n More from our Blog\n </FeaturedLink>\n </div>\n ) : null;\n\nexport default MeganavBlogPostsList;\n"],"names":["React","FeaturedLink","MeganavBlogPostsList","recentBlogPosts","absUrl","div","className","h3","id","ul","aria-labelledby","map","post","li","key","link","a","href","p","title","pubDate","url","textSize"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAE1B,QAAOC,iBAAkB,gBAAiB,CAY1C,MAAMC,qBAAuB,CAAC,CAC5BC,eAAe,CACfC,MAAM,CACoB,GAC1BD,gBACE,oBAACE,OAAIC,UAAU,mFACb,oBAACC,MAAGD,UAAU,sBAAsBE,GAAG,mCAAkC,QAGzE,oBAACC,MAAGH,UAAU,OAAOI,kBAAgB,mCAClCP,gBAAgBQ,GAAG,CAAC,AAACC,MACpB,oBAACC,MAAGC,IAAKF,KAAKG,IAAI,EAChB,oBAACC,KAAEC,KAAML,KAAKG,IAAI,CAAET,UAAU,0BAC5B,oBAACY,KAAEZ,UAAU,4BAA4BM,KAAKO,KAAK,EACnD,oBAACD,KAAEZ,UAAU,yBAAyBM,KAAKQ,OAAO,MAM1D,oBAACnB,cAAaoB,IAAKjB,OAAO,SAAUkB,SAAS,WAAU,uBAIvD,IAEN,gBAAepB,oBAAqB"}
1
+ {"version":3,"sources":["../../src/core/MeganavBlogPostsList.tsx"],"sourcesContent":["import React from \"react\";\n\nimport FeaturedLink from \"./FeaturedLink\";\nimport { AbsUrl } from \"./LegacyMeganav\";\n\ntype MeganavBlogPostsListProps = {\n recentBlogPosts: {\n link: string;\n title: string;\n pubDate: string;\n }[];\n absUrl: AbsUrl;\n};\n\nconst MeganavBlogPostsList = ({\n recentBlogPosts,\n absUrl,\n}: MeganavBlogPostsListProps) =>\n recentBlogPosts ? (\n <div className=\"col-span-full md:col-span-4 pt-8 pb-24 md:py-24 lg:py-32 px-24 sm:px-32 md:px-0\">\n <h3 className=\"ui-meganav-overline\" id=\"meganav-company-panel-list-blog\">\n Blog\n </h3>\n <ul className=\"mb-8\" aria-labelledby=\"meganav-company-panel-list-blog\">\n {recentBlogPosts.map((post) => (\n <li key={post.link}>\n <a href={post.link} className=\"ui-meganav-media group\">\n <p className=\"ui-meganav-media-heading\">{post.title}</p>\n <p className=\"ui-meganav-media-copy\">{post.pubDate}</p>\n </a>\n </li>\n ))}\n </ul>\n\n <FeaturedLink url={absUrl(\"/blog\")} textSize=\"text-p3\">\n More from our Blog\n </FeaturedLink>\n </div>\n ) : null;\n\nexport default MeganavBlogPostsList;\n"],"names":["React","FeaturedLink","MeganavBlogPostsList","recentBlogPosts","absUrl","div","className","h3","id","ul","aria-labelledby","map","post","li","key","link","a","href","p","title","pubDate","url","textSize"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAE1B,QAAOC,iBAAkB,gBAAiB,CAY1C,MAAMC,qBAAuB,CAAC,CAC5BC,eAAe,CACfC,MAAM,CACoB,GAC1BD,gBACE,oBAACE,OAAIC,UAAU,mFACb,oBAACC,MAAGD,UAAU,sBAAsBE,GAAG,mCAAkC,QAGzE,oBAACC,MAAGH,UAAU,OAAOI,kBAAgB,mCAClCP,gBAAgBQ,GAAG,CAAC,AAACC,MACpB,oBAACC,MAAGC,IAAKF,KAAKG,IAAI,EAChB,oBAACC,KAAEC,KAAML,KAAKG,IAAI,CAAET,UAAU,0BAC5B,oBAACY,KAAEZ,UAAU,4BAA4BM,KAAKO,KAAK,EACnD,oBAACD,KAAEZ,UAAU,yBAAyBM,KAAKQ,OAAO,MAM1D,oBAACnB,cAAaoB,IAAKjB,OAAO,SAAUkB,SAAS,WAAU,uBAIvD,IAEN,gBAAepB,oBAAqB"}