@ably/ui 17.7.1 → 17.7.3

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 (52) hide show
  1. package/core/Accordion.js +1 -1
  2. package/core/Accordion.js.map +1 -1
  3. package/core/Badge.js +1 -1
  4. package/core/Badge.js.map +1 -1
  5. package/core/CodeSnippet/PlainCodeView.js +1 -1
  6. package/core/CodeSnippet/PlainCodeView.js.map +1 -1
  7. package/core/CodeSnippet/TooltipButton.js +1 -1
  8. package/core/CodeSnippet/TooltipButton.js.map +1 -1
  9. package/core/CodeSnippet/languages.js +1 -1
  10. package/core/CodeSnippet/languages.js.map +1 -1
  11. package/core/CodeSnippet.js +1 -1
  12. package/core/CodeSnippet.js.map +1 -1
  13. package/core/ConnectStateWrapper.js.map +1 -1
  14. package/core/CookieMessage.js +1 -1
  15. package/core/CookieMessage.js.map +1 -1
  16. package/core/DropdownMenu.js +1 -1
  17. package/core/DropdownMenu.js.map +1 -1
  18. package/core/Expander.js +1 -1
  19. package/core/Expander.js.map +1 -1
  20. package/core/FeaturedLink.js +1 -1
  21. package/core/FeaturedLink.js.map +1 -1
  22. package/core/Flash.js +1 -1
  23. package/core/Flash.js.map +1 -1
  24. package/core/Header/HeaderLinks.js +1 -1
  25. package/core/Header/HeaderLinks.js.map +1 -1
  26. package/core/Header.js +1 -1
  27. package/core/Header.js.map +1 -1
  28. package/core/Icon/components/icon-display-ui-mono.js +2 -0
  29. package/core/Icon/components/icon-display-ui-mono.js.map +1 -0
  30. package/core/Icon/components/icon-display-ui.js +2 -0
  31. package/core/Icon/components/icon-display-ui.js.map +1 -0
  32. package/core/Icon/components/index.js +1 -1
  33. package/core/Icon/components/index.js.map +1 -1
  34. package/core/Icon/computed-icons/display-icons.js +1 -1
  35. package/core/Icon/computed-icons/display-icons.js.map +1 -1
  36. package/core/Icon.js +1 -1
  37. package/core/Icon.js.map +1 -1
  38. package/core/LinkButton.js +1 -1
  39. package/core/LinkButton.js.map +1 -1
  40. package/core/Pricing/PricingCards.js +1 -1
  41. package/core/Pricing/PricingCards.js.map +1 -1
  42. package/core/ProductTile.js +1 -1
  43. package/core/ProductTile.js.map +1 -1
  44. package/core/Slider.js +1 -1
  45. package/core/Slider.js.map +1 -1
  46. package/core/Table/data.js +1 -1
  47. package/core/Table/data.js.map +1 -1
  48. package/core/icons/display/icon-display-ui-mono.svg +22 -0
  49. package/core/icons/display/icon-display-ui.svg +22 -0
  50. package/core/sprites-display.svg +1 -1
  51. package/index.d.ts +27 -3
  52. package/package.json +11 -8
package/core/Expander.js CHANGED
@@ -1,2 +1,2 @@
1
- import React,{useEffect,useRef,useState}from"react";import{throttle}from"es-toolkit/compat";const Expander=({heightThreshold=200,className,fadeClassName,controlsClassName,controlsOpenedLabel,controlsClosedLabel,children})=>{const innerRef=useRef(null);const[showControls,setShowControls]=useState(false);const[contentHeight,setContentHeight]=useState(heightThreshold);const[height,setHeight]=useState(heightThreshold);const[expanded,setExpanded]=useState(false);useEffect(()=>{if(innerRef.current){setContentHeight(innerRef.current.clientHeight)}if(contentHeight<heightThreshold){setHeight("auto")}else if(expanded){setHeight(contentHeight)}else{setHeight(heightThreshold)}setShowControls(contentHeight>=heightThreshold)},[contentHeight,heightThreshold,expanded]);useEffect(()=>{const onResize=throttle(()=>{if(innerRef.current){setContentHeight(innerRef.current.clientHeight)}},250);window.addEventListener("resize",onResize);return()=>{window.removeEventListener("resize",onResize)}},[]);return React.createElement(React.Fragment,null,React.createElement("div",{style:{height},"data-testid":"expander-container",className:`overflow-hidden transition-all relative ${className??""}`},showControls&&!expanded&&React.createElement("div",{className:`h-16 w-full bg-gradient-to-t from-white to-transparent absolute bottom-0 left-0 right-0 ${fadeClassName??""}`}),React.createElement("div",{ref:innerRef},children)),showControls&&React.createElement("div",{onClick:()=>setExpanded(!expanded),onKeyDown:e=>e.key==="Enter"&&setExpanded(!expanded),tabIndex:0,"data-testid":"expander-controls",className:`${heightThreshold===0&&!expanded?"":"mt-4"} cursor-pointer font-bold text-gui-blue-default-light hover:text-gui-blue-hover-light ${controlsClassName??""}`},expanded?controlsOpenedLabel??"View less -":controlsClosedLabel??"View all +"))};export default Expander;
1
+ import React,{useEffect,useRef,useState}from"react";import{throttle}from"es-toolkit/compat";const Expander=({heightThreshold=200,className,fadeClassName,controlsClassName,controlsOpenedLabel,controlsClosedLabel,children})=>{const innerRef=useRef(null);const[showControls,setShowControls]=useState(false);const[contentHeight,setContentHeight]=useState(heightThreshold);const[height,setHeight]=useState(heightThreshold);const[expanded,setExpanded]=useState(false);useEffect(()=>{if(innerRef.current){setContentHeight(innerRef.current.clientHeight)}if(contentHeight<heightThreshold){setHeight("auto")}else if(expanded){setHeight(contentHeight)}else{setHeight(heightThreshold)}setShowControls(contentHeight>=heightThreshold)},[contentHeight,heightThreshold,expanded]);useEffect(()=>{const onResize=throttle(()=>{if(innerRef.current){setContentHeight(innerRef.current.clientHeight)}},250);window.addEventListener("resize",onResize);return()=>{window.removeEventListener("resize",onResize)}},[]);return React.createElement(React.Fragment,null,React.createElement("div",{style:{height},"data-testid":"expander-container",className:`overflow-hidden transition-all relative ${className??""}`},showControls&&!expanded&&React.createElement("div",{className:`h-16 w-full bg-gradient-to-t from-white to-transparent absolute bottom-0 left-0 right-0 ${fadeClassName??""}`}),React.createElement("div",{ref:innerRef},children)),showControls&&React.createElement("div",{onClick:()=>setExpanded(!expanded),onKeyDown:e=>e.key==="Enter"&&setExpanded(!expanded),tabIndex:0,role:"button","aria-expanded":expanded,"data-testid":"expander-controls",className:`${heightThreshold===0&&!expanded?"":"mt-4"} cursor-pointer font-bold text-gui-blue-default-light hover:text-gui-blue-hover-light ${controlsClassName??""}`},expanded?controlsOpenedLabel??"View less -":controlsClosedLabel??"View all +"))};export default Expander;
2
2
  //# sourceMappingURL=Expander.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/Expander.tsx"],"sourcesContent":["import React, {\n PropsWithChildren,\n ReactNode,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { throttle } from \"es-toolkit/compat\";\n\ntype ExpanderProps = {\n heightThreshold?: number;\n className?: string;\n fadeClassName?: string;\n controlsClassName?: string;\n controlsOpenedLabel?: string | ReactNode;\n controlsClosedLabel?: string | ReactNode;\n};\n\nconst Expander = ({\n heightThreshold = 200,\n className,\n fadeClassName,\n controlsClassName,\n controlsOpenedLabel,\n controlsClosedLabel,\n children,\n}: PropsWithChildren<ExpanderProps>) => {\n const innerRef = useRef<HTMLDivElement>(null);\n const [showControls, setShowControls] = useState(false);\n const [contentHeight, setContentHeight] = useState<number>(heightThreshold);\n const [height, setHeight] = useState<number | \"auto\">(heightThreshold);\n const [expanded, setExpanded] = useState(false);\n\n useEffect(() => {\n if (innerRef.current) {\n setContentHeight(innerRef.current.clientHeight);\n }\n\n if (contentHeight < heightThreshold) {\n setHeight(\"auto\");\n } else if (expanded) {\n setHeight(contentHeight);\n } else {\n setHeight(heightThreshold);\n }\n\n setShowControls(contentHeight >= heightThreshold);\n }, [contentHeight, heightThreshold, expanded]);\n\n useEffect(() => {\n const onResize = throttle(() => {\n if (innerRef.current) {\n setContentHeight(innerRef.current.clientHeight);\n }\n }, 250);\n\n window.addEventListener(\"resize\", onResize);\n return () => {\n window.removeEventListener(\"resize\", onResize);\n };\n }, []);\n\n return (\n <>\n <div\n style={{ height }}\n data-testid=\"expander-container\"\n className={`overflow-hidden transition-all relative ${className ?? \"\"}`}\n >\n {showControls && !expanded && (\n <div\n className={`h-16 w-full bg-gradient-to-t from-white to-transparent absolute bottom-0 left-0 right-0 ${\n fadeClassName ?? \"\"\n }`}\n ></div>\n )}\n <div ref={innerRef}>{children}</div>\n </div>\n {showControls && (\n <div\n onClick={() => setExpanded(!expanded)}\n onKeyDown={(e) => e.key === \"Enter\" && setExpanded(!expanded)}\n tabIndex={0}\n data-testid=\"expander-controls\"\n className={`${heightThreshold === 0 && !expanded ? \"\" : \"mt-4\"} cursor-pointer font-bold text-gui-blue-default-light hover:text-gui-blue-hover-light ${controlsClassName ?? \"\"}`}\n >\n {expanded\n ? (controlsOpenedLabel ?? \"View less -\")\n : (controlsClosedLabel ?? \"View all +\")}\n </div>\n )}\n </>\n );\n};\n\nexport default Expander;\n"],"names":["React","useEffect","useRef","useState","throttle","Expander","heightThreshold","className","fadeClassName","controlsClassName","controlsOpenedLabel","controlsClosedLabel","children","innerRef","showControls","setShowControls","contentHeight","setContentHeight","height","setHeight","expanded","setExpanded","current","clientHeight","onResize","window","addEventListener","removeEventListener","div","style","data-testid","ref","onClick","onKeyDown","e","key","tabIndex"],"mappings":"AAAA,OAAOA,OAGLC,SAAS,CACTC,MAAM,CACNC,QAAQ,KACH,OAAQ,AACf,QAASC,QAAQ,KAAQ,mBAAoB,CAW7C,MAAMC,SAAW,CAAC,CAChBC,gBAAkB,GAAG,CACrBC,SAAS,CACTC,aAAa,CACbC,iBAAiB,CACjBC,mBAAmB,CACnBC,mBAAmB,CACnBC,QAAQ,CACyB,IACjC,MAAMC,SAAWX,OAAuB,MACxC,KAAM,CAACY,aAAcC,gBAAgB,CAAGZ,SAAS,OACjD,KAAM,CAACa,cAAeC,iBAAiB,CAAGd,SAAiBG,iBAC3D,KAAM,CAACY,OAAQC,UAAU,CAAGhB,SAA0BG,iBACtD,KAAM,CAACc,SAAUC,YAAY,CAAGlB,SAAS,OAEzCF,UAAU,KACR,GAAIY,SAASS,OAAO,CAAE,CACpBL,iBAAiBJ,SAASS,OAAO,CAACC,YAAY,CAChD,CAEA,GAAIP,cAAgBV,gBAAiB,CACnCa,UAAU,OACZ,MAAO,GAAIC,SAAU,CACnBD,UAAUH,cACZ,KAAO,CACLG,UAAUb,gBACZ,CAEAS,gBAAgBC,eAAiBV,gBACnC,EAAG,CAACU,cAAeV,gBAAiBc,SAAS,EAE7CnB,UAAU,KACR,MAAMuB,SAAWpB,SAAS,KACxB,GAAIS,SAASS,OAAO,CAAE,CACpBL,iBAAiBJ,SAASS,OAAO,CAACC,YAAY,CAChD,CACF,EAAG,KAEHE,OAAOC,gBAAgB,CAAC,SAAUF,UAClC,MAAO,KACLC,OAAOE,mBAAmB,CAAC,SAAUH,SACvC,CACF,EAAG,EAAE,EAEL,OACE,wCACE,oBAACI,OACCC,MAAO,CAAEX,MAAO,EAChBY,cAAY,qBACZvB,UAAW,CAAC,wCAAwC,EAAEA,WAAa,GAAG,CAAC,EAEtEO,cAAgB,CAACM,UAChB,oBAACQ,OACCrB,UAAW,CAAC,wFAAwF,EAClGC,eAAiB,GAClB,CAAC,GAGN,oBAACoB,OAAIG,IAAKlB,UAAWD,WAEtBE,cACC,oBAACc,OACCI,QAAS,IAAMX,YAAY,CAACD,UAC5Ba,UAAW,AAACC,GAAMA,EAAEC,GAAG,GAAK,SAAWd,YAAY,CAACD,UACpDgB,SAAU,EACVN,cAAY,oBACZvB,UAAW,CAAC,EAAED,kBAAoB,GAAK,CAACc,SAAW,GAAK,OAAO,sFAAsF,EAAEX,mBAAqB,GAAG,CAAC,EAE/KW,SACIV,qBAAuB,cACvBC,qBAAuB,cAKtC,CAEA,gBAAeN,QAAS"}
1
+ {"version":3,"sources":["../../src/core/Expander.tsx"],"sourcesContent":["import React, {\n PropsWithChildren,\n ReactNode,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { throttle } from \"es-toolkit/compat\";\n\ntype ExpanderProps = {\n heightThreshold?: number;\n className?: string;\n fadeClassName?: string;\n controlsClassName?: string;\n controlsOpenedLabel?: string | ReactNode;\n controlsClosedLabel?: string | ReactNode;\n};\n\nconst Expander = ({\n heightThreshold = 200,\n className,\n fadeClassName,\n controlsClassName,\n controlsOpenedLabel,\n controlsClosedLabel,\n children,\n}: PropsWithChildren<ExpanderProps>) => {\n const innerRef = useRef<HTMLDivElement>(null);\n const [showControls, setShowControls] = useState(false);\n const [contentHeight, setContentHeight] = useState<number>(heightThreshold);\n const [height, setHeight] = useState<number | \"auto\">(heightThreshold);\n const [expanded, setExpanded] = useState(false);\n\n useEffect(() => {\n if (innerRef.current) {\n setContentHeight(innerRef.current.clientHeight);\n }\n\n if (contentHeight < heightThreshold) {\n setHeight(\"auto\");\n } else if (expanded) {\n setHeight(contentHeight);\n } else {\n setHeight(heightThreshold);\n }\n\n setShowControls(contentHeight >= heightThreshold);\n }, [contentHeight, heightThreshold, expanded]);\n\n useEffect(() => {\n const onResize = throttle(() => {\n if (innerRef.current) {\n setContentHeight(innerRef.current.clientHeight);\n }\n }, 250);\n\n window.addEventListener(\"resize\", onResize);\n return () => {\n window.removeEventListener(\"resize\", onResize);\n };\n }, []);\n\n return (\n <>\n <div\n style={{ height }}\n data-testid=\"expander-container\"\n className={`overflow-hidden transition-all relative ${className ?? \"\"}`}\n >\n {showControls && !expanded && (\n <div\n className={`h-16 w-full bg-gradient-to-t from-white to-transparent absolute bottom-0 left-0 right-0 ${\n fadeClassName ?? \"\"\n }`}\n ></div>\n )}\n <div ref={innerRef}>{children}</div>\n </div>\n {showControls && (\n <div\n onClick={() => setExpanded(!expanded)}\n onKeyDown={(e) => e.key === \"Enter\" && setExpanded(!expanded)}\n tabIndex={0}\n role=\"button\"\n aria-expanded={expanded}\n data-testid=\"expander-controls\"\n className={`${heightThreshold === 0 && !expanded ? \"\" : \"mt-4\"} cursor-pointer font-bold text-gui-blue-default-light hover:text-gui-blue-hover-light ${controlsClassName ?? \"\"}`}\n >\n {expanded\n ? (controlsOpenedLabel ?? \"View less -\")\n : (controlsClosedLabel ?? \"View all +\")}\n </div>\n )}\n </>\n );\n};\n\nexport default Expander;\n"],"names":["React","useEffect","useRef","useState","throttle","Expander","heightThreshold","className","fadeClassName","controlsClassName","controlsOpenedLabel","controlsClosedLabel","children","innerRef","showControls","setShowControls","contentHeight","setContentHeight","height","setHeight","expanded","setExpanded","current","clientHeight","onResize","window","addEventListener","removeEventListener","div","style","data-testid","ref","onClick","onKeyDown","e","key","tabIndex","role","aria-expanded"],"mappings":"AAAA,OAAOA,OAGLC,SAAS,CACTC,MAAM,CACNC,QAAQ,KACH,OAAQ,AACf,QAASC,QAAQ,KAAQ,mBAAoB,CAW7C,MAAMC,SAAW,CAAC,CAChBC,gBAAkB,GAAG,CACrBC,SAAS,CACTC,aAAa,CACbC,iBAAiB,CACjBC,mBAAmB,CACnBC,mBAAmB,CACnBC,QAAQ,CACyB,IACjC,MAAMC,SAAWX,OAAuB,MACxC,KAAM,CAACY,aAAcC,gBAAgB,CAAGZ,SAAS,OACjD,KAAM,CAACa,cAAeC,iBAAiB,CAAGd,SAAiBG,iBAC3D,KAAM,CAACY,OAAQC,UAAU,CAAGhB,SAA0BG,iBACtD,KAAM,CAACc,SAAUC,YAAY,CAAGlB,SAAS,OAEzCF,UAAU,KACR,GAAIY,SAASS,OAAO,CAAE,CACpBL,iBAAiBJ,SAASS,OAAO,CAACC,YAAY,CAChD,CAEA,GAAIP,cAAgBV,gBAAiB,CACnCa,UAAU,OACZ,MAAO,GAAIC,SAAU,CACnBD,UAAUH,cACZ,KAAO,CACLG,UAAUb,gBACZ,CAEAS,gBAAgBC,eAAiBV,gBACnC,EAAG,CAACU,cAAeV,gBAAiBc,SAAS,EAE7CnB,UAAU,KACR,MAAMuB,SAAWpB,SAAS,KACxB,GAAIS,SAASS,OAAO,CAAE,CACpBL,iBAAiBJ,SAASS,OAAO,CAACC,YAAY,CAChD,CACF,EAAG,KAEHE,OAAOC,gBAAgB,CAAC,SAAUF,UAClC,MAAO,KACLC,OAAOE,mBAAmB,CAAC,SAAUH,SACvC,CACF,EAAG,EAAE,EAEL,OACE,wCACE,oBAACI,OACCC,MAAO,CAAEX,MAAO,EAChBY,cAAY,qBACZvB,UAAW,CAAC,wCAAwC,EAAEA,WAAa,GAAG,CAAC,EAEtEO,cAAgB,CAACM,UAChB,oBAACQ,OACCrB,UAAW,CAAC,wFAAwF,EAClGC,eAAiB,GAClB,CAAC,GAGN,oBAACoB,OAAIG,IAAKlB,UAAWD,WAEtBE,cACC,oBAACc,OACCI,QAAS,IAAMX,YAAY,CAACD,UAC5Ba,UAAW,AAACC,GAAMA,EAAEC,GAAG,GAAK,SAAWd,YAAY,CAACD,UACpDgB,SAAU,EACVC,KAAK,SACLC,gBAAelB,SACfU,cAAY,oBACZvB,UAAW,CAAC,EAAED,kBAAoB,GAAK,CAACc,SAAW,GAAK,OAAO,sFAAsF,EAAEX,mBAAqB,GAAG,CAAC,EAE/KW,SACIV,qBAAuB,cACvBC,qBAAuB,cAKtC,CAEA,gBAAeN,QAAS"}
@@ -1,2 +1,2 @@
1
- import React from"react";import Icon from"./Icon";import cn from"./utils/cn";const buildTargetAndRel=(url,newWindow)=>{const props={};if(newWindow){props.target="_blank";if(url.startsWith("/")&&!url.startsWith("//")){props.rel="noopener"}else{props.rel="noopenner noreferrer"}}return props};const FeaturedLink=({url,textSize="text-p2",iconColor,flush=false,reverse=false,additionalCSS="",newWindow=false,onClick=undefined,children,disabled=false,iconClassName=""})=>{const targetAndRel=buildTargetAndRel(url,newWindow);return React.createElement("a",{...onClick?{}:{href:url},className:cn("font-sans font-bold block group/featured-link",{"text-gui-unavailable pointer-events-none":disabled},{"text-gui-default hover:text-gui-hover focus:text-gui-focus focus:outline-none focus-visible:outline-gui-focus":!disabled},{"py-2":!flush},`ui-${textSize}`,additionalCSS),style:{"--featured-link-icon-size":`var(${textSize.replace("text","--fs")})`},...targetAndRel,onClick:onClick},reverse?React.createElement(React.Fragment,null,React.createElement(Icon,{name:"icon-gui-arrow-long-right-outline",size:`calc(var(--featured-link-icon-size) * 1.25)`,color:iconColor,additionalCSS:cn("align-middle mr-2 relative -top-px -right-1 transition-[right] transform rotate-180",{"group-hover/featured-link:right-0":!disabled},iconClassName)}),children):React.createElement(React.Fragment,null,children,React.createElement(Icon,{name:"icon-gui-arrow-long-right-outline",size:`calc(var(--featured-link-icon-size) * 1.25)`,color:iconColor,additionalCSS:cn("align-middle ml-2 relative -top-px -left-1 transition-[left]",{"group-hover/featured-link:left-0":!disabled},iconClassName)})))};export default FeaturedLink;
1
+ import React from"react";import Icon from"./Icon";import cn from"./utils/cn";const buildTargetAndRel=(url,newWindow)=>{const props={};if(newWindow){props.target="_blank";if(url.startsWith("/")&&!url.startsWith("//")){props.rel="noopener"}else{props.rel="noopenner noreferrer"}}return props};const FeaturedLink=({url,textSize="text-p2",iconColor,flush=false,reverse=false,additionalCSS="",newWindow=false,onClick=undefined,children,disabled=false,iconClassName=""})=>{const targetAndRel=buildTargetAndRel(url,newWindow);return React.createElement("a",{...onClick?{}:{href:url},className:cn("font-sans font-bold block group/featured-link",{"text-gui-unavailable pointer-events-none":disabled},{"text-gui-default hover:text-gui-hover focus:text-gui-focus focus:outline-none focus-visible:outline-gui-focus":!disabled},{"py-2":!flush},`ui-${textSize}`,additionalCSS),style:{"--featured-link-icon-size":`var(${textSize.replace("text","--fs")})`},...targetAndRel,onClick:onClick,onKeyDown:onClick?e=>{if(e.key==="Enter"||e.key===" "){e.preventDefault();onClick()}}:undefined,role:onClick&&!url?"button":undefined},reverse?React.createElement(React.Fragment,null,React.createElement(Icon,{name:"icon-gui-arrow-long-right-outline",size:`calc(var(--featured-link-icon-size) * 1.25)`,color:iconColor,additionalCSS:cn("align-middle mr-2 relative -top-px -right-1 transition-[right] transform rotate-180",{"group-hover/featured-link:right-0":!disabled},iconClassName)}),children):React.createElement(React.Fragment,null,children,React.createElement(Icon,{name:"icon-gui-arrow-long-right-outline",size:`calc(var(--featured-link-icon-size) * 1.25)`,color:iconColor,additionalCSS:cn("align-middle ml-2 relative -top-px -left-1 transition-[left]",{"group-hover/featured-link:left-0":!disabled},iconClassName)})))};export default FeaturedLink;
2
2
  //# sourceMappingURL=FeaturedLink.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/FeaturedLink.tsx"],"sourcesContent":["import React, { CSSProperties, ReactNode } from \"react\";\n\nimport Icon from \"./Icon\";\nimport { ColorClass, ColorThemeSet } from \"./styles/colors/types\";\nimport cn from \"./utils/cn\";\n\ntype FeaturedLinkProps = {\n url: string;\n children: ReactNode;\n textSize?: string;\n iconColor?: ColorClass | ColorThemeSet;\n flush?: boolean;\n reverse?: boolean;\n additionalCSS?: string;\n newWindow?: boolean;\n onClick?: () => void;\n disabled?: boolean;\n /**\n * Optional class name for the icon.\n */\n iconClassName?: string;\n};\n\ntype TargetProps = { target?: string; rel?: string };\n\n// When generating links with target=_blank, we only add `noreferrer` to\n// links that don't start with `/`, so we can continue tracking referrers\n// across our own domains\nconst buildTargetAndRel = (url: string, newWindow: boolean) => {\n const props: TargetProps = {};\n\n if (newWindow) {\n props.target = \"_blank\";\n\n if (url.startsWith(\"/\") && !url.startsWith(\"//\")) {\n props.rel = \"noopener\";\n } else {\n props.rel = \"noopenner noreferrer\";\n }\n }\n\n return props;\n};\n\nconst FeaturedLink = ({\n url,\n textSize = \"text-p2\",\n iconColor,\n flush = false,\n reverse = false,\n additionalCSS = \"\",\n newWindow = false,\n onClick = undefined,\n children,\n disabled = false,\n iconClassName = \"\",\n}: FeaturedLinkProps) => {\n const targetAndRel = buildTargetAndRel(url, newWindow);\n\n return (\n <a\n {...(onClick ? {} : { href: url })}\n className={cn(\n \"font-sans font-bold block group/featured-link\",\n { \"text-gui-unavailable pointer-events-none\": disabled },\n {\n \"text-gui-default hover:text-gui-hover focus:text-gui-focus focus:outline-none focus-visible:outline-gui-focus\":\n !disabled,\n },\n { \"py-2\": !flush },\n `ui-${textSize}`,\n additionalCSS,\n )}\n style={\n {\n \"--featured-link-icon-size\": `var(${textSize.replace(\n \"text\",\n \"--fs\",\n )})`,\n } as CSSProperties\n }\n {...targetAndRel}\n onClick={onClick}\n >\n {reverse ? (\n <>\n <Icon\n name=\"icon-gui-arrow-long-right-outline\"\n size={`calc(var(--featured-link-icon-size) * 1.25)`}\n color={iconColor}\n additionalCSS={cn(\n \"align-middle mr-2 relative -top-px -right-1 transition-[right] transform rotate-180\",\n { \"group-hover/featured-link:right-0\": !disabled },\n iconClassName,\n )}\n />\n {children}\n </>\n ) : (\n <>\n {children}\n <Icon\n name=\"icon-gui-arrow-long-right-outline\"\n size={`calc(var(--featured-link-icon-size) * 1.25)`}\n color={iconColor}\n additionalCSS={cn(\n \"align-middle ml-2 relative -top-px -left-1 transition-[left]\",\n {\n \"group-hover/featured-link:left-0\": !disabled,\n },\n iconClassName,\n )}\n />\n </>\n )}\n </a>\n );\n};\n\nexport default FeaturedLink;\n"],"names":["React","Icon","cn","buildTargetAndRel","url","newWindow","props","target","startsWith","rel","FeaturedLink","textSize","iconColor","flush","reverse","additionalCSS","onClick","undefined","children","disabled","iconClassName","targetAndRel","a","href","className","style","replace","name","size","color"],"mappings":"AAAA,OAAOA,UAAyC,OAAQ,AAExD,QAAOC,SAAU,QAAS,AAE1B,QAAOC,OAAQ,YAAa,CAwB5B,MAAMC,kBAAoB,CAACC,IAAaC,aACtC,MAAMC,MAAqB,CAAC,EAE5B,GAAID,UAAW,CACbC,MAAMC,MAAM,CAAG,SAEf,GAAIH,IAAII,UAAU,CAAC,MAAQ,CAACJ,IAAII,UAAU,CAAC,MAAO,CAChDF,MAAMG,GAAG,CAAG,UACd,KAAO,CACLH,MAAMG,GAAG,CAAG,sBACd,CACF,CAEA,OAAOH,KACT,EAEA,MAAMI,aAAe,CAAC,CACpBN,GAAG,CACHO,SAAW,SAAS,CACpBC,SAAS,CACTC,MAAQ,KAAK,CACbC,QAAU,KAAK,CACfC,cAAgB,EAAE,CAClBV,UAAY,KAAK,CACjBW,QAAUC,SAAS,CACnBC,QAAQ,CACRC,SAAW,KAAK,CAChBC,cAAgB,EAAE,CACA,IAClB,MAAMC,aAAelB,kBAAkBC,IAAKC,WAE5C,OACE,oBAACiB,KACE,GAAIN,QAAU,CAAC,EAAI,CAAEO,KAAMnB,GAAI,CAAC,CACjCoB,UAAWtB,GACT,gDACA,CAAE,2CAA4CiB,QAAS,EACvD,CACE,gHACE,CAACA,QACL,EACA,CAAE,OAAQ,CAACN,KAAM,EACjB,CAAC,GAAG,EAAEF,SAAS,CAAC,CAChBI,eAEFU,MACE,CACE,4BAA6B,CAAC,IAAI,EAAEd,SAASe,OAAO,CAClD,OACA,QACA,CAAC,CAAC,AACN,EAED,GAAGL,YAAY,CAChBL,QAASA,SAERF,QACC,wCACE,oBAACb,MACC0B,KAAK,oCACLC,KAAM,CAAC,2CAA2C,CAAC,CACnDC,MAAOjB,UACPG,cAAeb,GACb,sFACA,CAAE,oCAAqC,CAACiB,QAAS,EACjDC,iBAGHF,UAGH,wCACGA,SACD,oBAACjB,MACC0B,KAAK,oCACLC,KAAM,CAAC,2CAA2C,CAAC,CACnDC,MAAOjB,UACPG,cAAeb,GACb,+DACA,CACE,mCAAoC,CAACiB,QACvC,EACAC,kBAOd,CAEA,gBAAeV,YAAa"}
1
+ {"version":3,"sources":["../../src/core/FeaturedLink.tsx"],"sourcesContent":["import React, { CSSProperties, ReactNode } from \"react\";\n\nimport Icon from \"./Icon\";\nimport { ColorClass, ColorThemeSet } from \"./styles/colors/types\";\nimport cn from \"./utils/cn\";\n\ntype FeaturedLinkProps = {\n url: string;\n children: ReactNode;\n textSize?: string;\n iconColor?: ColorClass | ColorThemeSet;\n flush?: boolean;\n reverse?: boolean;\n additionalCSS?: string;\n newWindow?: boolean;\n onClick?: () => void;\n disabled?: boolean;\n /**\n * Optional class name for the icon.\n */\n iconClassName?: string;\n};\n\ntype TargetProps = { target?: string; rel?: string };\n\n// When generating links with target=_blank, we only add `noreferrer` to\n// links that don't start with `/`, so we can continue tracking referrers\n// across our own domains\nconst buildTargetAndRel = (url: string, newWindow: boolean) => {\n const props: TargetProps = {};\n\n if (newWindow) {\n props.target = \"_blank\";\n\n if (url.startsWith(\"/\") && !url.startsWith(\"//\")) {\n props.rel = \"noopener\";\n } else {\n props.rel = \"noopenner noreferrer\";\n }\n }\n\n return props;\n};\n\nconst FeaturedLink = ({\n url,\n textSize = \"text-p2\",\n iconColor,\n flush = false,\n reverse = false,\n additionalCSS = \"\",\n newWindow = false,\n onClick = undefined,\n children,\n disabled = false,\n iconClassName = \"\",\n}: FeaturedLinkProps) => {\n const targetAndRel = buildTargetAndRel(url, newWindow);\n\n return (\n <a\n {...(onClick ? {} : { href: url })}\n className={cn(\n \"font-sans font-bold block group/featured-link\",\n { \"text-gui-unavailable pointer-events-none\": disabled },\n {\n \"text-gui-default hover:text-gui-hover focus:text-gui-focus focus:outline-none focus-visible:outline-gui-focus\":\n !disabled,\n },\n { \"py-2\": !flush },\n `ui-${textSize}`,\n additionalCSS,\n )}\n style={\n {\n \"--featured-link-icon-size\": `var(${textSize.replace(\n \"text\",\n \"--fs\",\n )})`,\n } as CSSProperties\n }\n {...targetAndRel}\n onClick={onClick}\n onKeyDown={\n onClick\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick();\n }\n }\n : undefined\n }\n role={onClick && !url ? \"button\" : undefined}\n >\n {reverse ? (\n <>\n <Icon\n name=\"icon-gui-arrow-long-right-outline\"\n size={`calc(var(--featured-link-icon-size) * 1.25)`}\n color={iconColor}\n additionalCSS={cn(\n \"align-middle mr-2 relative -top-px -right-1 transition-[right] transform rotate-180\",\n { \"group-hover/featured-link:right-0\": !disabled },\n iconClassName,\n )}\n />\n {children}\n </>\n ) : (\n <>\n {children}\n <Icon\n name=\"icon-gui-arrow-long-right-outline\"\n size={`calc(var(--featured-link-icon-size) * 1.25)`}\n color={iconColor}\n additionalCSS={cn(\n \"align-middle ml-2 relative -top-px -left-1 transition-[left]\",\n {\n \"group-hover/featured-link:left-0\": !disabled,\n },\n iconClassName,\n )}\n />\n </>\n )}\n </a>\n );\n};\n\nexport default FeaturedLink;\n"],"names":["React","Icon","cn","buildTargetAndRel","url","newWindow","props","target","startsWith","rel","FeaturedLink","textSize","iconColor","flush","reverse","additionalCSS","onClick","undefined","children","disabled","iconClassName","targetAndRel","a","href","className","style","replace","onKeyDown","e","key","preventDefault","role","name","size","color"],"mappings":"AAAA,OAAOA,UAAyC,OAAQ,AAExD,QAAOC,SAAU,QAAS,AAE1B,QAAOC,OAAQ,YAAa,CAwB5B,MAAMC,kBAAoB,CAACC,IAAaC,aACtC,MAAMC,MAAqB,CAAC,EAE5B,GAAID,UAAW,CACbC,MAAMC,MAAM,CAAG,SAEf,GAAIH,IAAII,UAAU,CAAC,MAAQ,CAACJ,IAAII,UAAU,CAAC,MAAO,CAChDF,MAAMG,GAAG,CAAG,UACd,KAAO,CACLH,MAAMG,GAAG,CAAG,sBACd,CACF,CAEA,OAAOH,KACT,EAEA,MAAMI,aAAe,CAAC,CACpBN,GAAG,CACHO,SAAW,SAAS,CACpBC,SAAS,CACTC,MAAQ,KAAK,CACbC,QAAU,KAAK,CACfC,cAAgB,EAAE,CAClBV,UAAY,KAAK,CACjBW,QAAUC,SAAS,CACnBC,QAAQ,CACRC,SAAW,KAAK,CAChBC,cAAgB,EAAE,CACA,IAClB,MAAMC,aAAelB,kBAAkBC,IAAKC,WAE5C,OACE,oBAACiB,KACE,GAAIN,QAAU,CAAC,EAAI,CAAEO,KAAMnB,GAAI,CAAC,CACjCoB,UAAWtB,GACT,gDACA,CAAE,2CAA4CiB,QAAS,EACvD,CACE,gHACE,CAACA,QACL,EACA,CAAE,OAAQ,CAACN,KAAM,EACjB,CAAC,GAAG,EAAEF,SAAS,CAAC,CAChBI,eAEFU,MACE,CACE,4BAA6B,CAAC,IAAI,EAAEd,SAASe,OAAO,CAClD,OACA,QACA,CAAC,CAAC,AACN,EAED,GAAGL,YAAY,CAChBL,QAASA,QACTW,UACEX,QACI,AAACY,IACC,GAAIA,EAAEC,GAAG,GAAK,SAAWD,EAAEC,GAAG,GAAK,IAAK,CACtCD,EAAEE,cAAc,GAChBd,SACF,CACF,EACAC,UAENc,KAAMf,SAAW,CAACZ,IAAM,SAAWa,WAElCH,QACC,wCACE,oBAACb,MACC+B,KAAK,oCACLC,KAAM,CAAC,2CAA2C,CAAC,CACnDC,MAAOtB,UACPG,cAAeb,GACb,sFACA,CAAE,oCAAqC,CAACiB,QAAS,EACjDC,iBAGHF,UAGH,wCACGA,SACD,oBAACjB,MACC+B,KAAK,oCACLC,KAAM,CAAC,2CAA2C,CAAC,CACnDC,MAAOtB,UACPG,cAAeb,GACb,+DACA,CACE,mCAAoC,CAACiB,QACvC,EACAC,kBAOd,CAEA,gBAAeV,YAAa"}
package/core/Flash.js CHANGED
@@ -1,2 +1,2 @@
1
- import React,{useEffect,useState,useRef}from"react";import DOMPurify from"dompurify";import{getRemoteDataStore}from"./remote-data-store.js";import ConnectStateWrapper from"./ConnectStateWrapper";import Icon from"./Icon";const REDUCER_KEY="flashes";const FLASH_DATA_ID="ui-flashes";const initialState={items:[]};const reducerFlashes={[REDUCER_KEY]:(state=initialState,action)=>{switch(action.type){case"flash/push":{const flashes=Array.isArray(action.payload)?action.payload:[action.payload];return{items:[...state.items,...flashes]}}default:return state}}};const selectFlashes=store=>store.getState()[REDUCER_KEY];const FLASH_BG_COLOR={error:"bg-gui-error",success:"bg-zingy-green",notice:"bg-electric-cyan",info:"bg-electric-cyan",alert:"bg-active-orange"};const FLASH_TEXT_COLOR={error:"text-white",success:"text-cool-black",notice:"text-cool-black",info:"text-cool-black",alert:"text-white"};const AUTO_HIDE=["success","info","notice"];const AUTO_HIDE_TIME=8e3;const useAutoHide=(type,closeFlash)=>{const timeoutId=useRef(null);useEffect(()=>{if(AUTO_HIDE.includes(type)){timeoutId.current=setTimeout(()=>{closeFlash()},AUTO_HIDE_TIME)}return()=>{if(timeoutId.current){clearTimeout(timeoutId.current)}}},[])};const Flash=({id,type,content,removeFlash})=>{const ref=useRef(null);const[closed,setClosed]=useState(false);const[flashHeight,setFlashHeight]=useState(0);const[triggerEntryAnimation,setTriggerEntryAnimation]=useState(false);const closeFlash=()=>{if(ref.current){setFlashHeight(ref.current.getBoundingClientRect().height)}setClosed(true);setTimeout(()=>{if(id){removeFlash(id)}},100)};useEffect(()=>setTriggerEntryAnimation(true),[]);useAutoHide(type,closeFlash);const animateEntry=triggerEntryAnimation&&!closed;let style;if(flashHeight&&!closed){style={height:`${flashHeight}px`}}else if(closed){style={height:0,marginTop:0,zIndex:-1}}else{style={}}const safeContent=DOMPurify.sanitize(content,{ALLOWED_TAGS:["a"],ALLOWED_ATTR:["href","data-method"],ALLOWED_URI_REGEXP:/^\/[^/]/});const withIcons={notice:"icon-gui-ably-badge",success:"icon-gui-check-outline",error:"icon-gui-exclamation-triangle-outline",alert:"icon-gui-exclamation-triangle-outline",info:""};const iconColor={notice:"text-cool-black",success:"text-cool-black",error:"text-white",alert:"text-white",info:""};return React.createElement("div",{className:`ui-flash-message ui-grid-px ${animateEntry?"ui-flash-message-enter":""}`,style:style,ref:ref,"data-id":"ui-flash","data-testid":"ui-flash"},React.createElement("div",{className:`${FLASH_BG_COLOR[type]} p-8 flex align-center rounded shadow-container-subtle`},withIcons[type]&&iconColor[type]&&React.createElement(Icon,{name:withIcons[type],color:iconColor[type],size:"1.5rem",additionalCSS:"mr-4 self-baseline"}),React.createElement("p",{className:`ui-text-p1 mr-4 ${FLASH_TEXT_COLOR[type]}`,dangerouslySetInnerHTML:{__html:safeContent}}),React.createElement("button",{type:"button",className:"p-0 ml-auto self-start focus:outline-none",onClick:closeFlash},iconColor[type]&&React.createElement(Icon,{name:"icon-gui-x-mark-outline",color:iconColor[type],size:"1.5rem",additionalCSS:"transition-colors"}))))};const Flashes=({flashes})=>{const[flashesWithIds,setFlashesWithIds]=useState([]);const removeFlash=flashId=>setFlashesWithIds(items=>items.filter(item=>item.id!==flashId));useEffect(()=>{setFlashesWithIds(state=>{return[...state,...(flashes?.items??[]).map(flash=>({...flash,id:Math.random().toString(36).slice(2),removed:false,removeFlash}))]})},[flashes]);return React.createElement("div",{className:"ui-flash","data-id":FLASH_DATA_ID},flashesWithIds.filter(item=>!item.removed).map(flash=>React.createElement(Flash,{key:flash.id,...flash})))};const BackendFlashes=({flashes})=>{useEffect(()=>{const transformedFlashes=flashes.map(flash=>{const[type,content]=flash;return{type,content}})||[];if(transformedFlashes.length>0){const store=getRemoteDataStore();store.dispatch({type:"flash/push",payload:transformedFlashes})}},[]);const WrappedFlashes=ConnectStateWrapper(Flashes,{flashes:selectFlashes});return React.createElement(WrappedFlashes,null)};export{reducerFlashes,FLASH_DATA_ID,Flashes};export default BackendFlashes;
1
+ import React,{useEffect,useState,useRef}from"react";import DOMPurify from"dompurify";import{getRemoteDataStore}from"./remote-data-store.js";import ConnectStateWrapper from"./ConnectStateWrapper";import Icon from"./Icon";const REDUCER_KEY="flashes";const FLASH_DATA_ID="ui-flashes";const initialState={items:[]};const reducerFlashes={[REDUCER_KEY]:(state=initialState,action)=>{switch(action.type){case"flash/push":{const flashes=Array.isArray(action.payload)?action.payload:[action.payload];return{items:[...state.items,...flashes]}}default:return state}}};const selectFlashes=store=>store.getState()[REDUCER_KEY];const FLASH_BG_COLOR={error:"bg-gui-error",success:"bg-zingy-green",notice:"bg-electric-cyan",info:"bg-electric-cyan",alert:"bg-active-orange"};const FLASH_TEXT_COLOR={error:"text-white",success:"text-cool-black",notice:"text-cool-black",info:"text-cool-black",alert:"text-white"};const AUTO_HIDE=["success","info","notice"];const AUTO_HIDE_TIME=8e3;const useAutoHide=(type,closeFlash)=>{const timeoutId=useRef(null);useEffect(()=>{if(AUTO_HIDE.includes(type)){timeoutId.current=setTimeout(()=>{closeFlash()},AUTO_HIDE_TIME)}return()=>{if(timeoutId.current){clearTimeout(timeoutId.current)}}},[type,closeFlash])};const Flash=({id,type,content,removeFlash})=>{const ref=useRef(null);const[closed,setClosed]=useState(false);const[flashHeight,setFlashHeight]=useState(0);const[triggerEntryAnimation,setTriggerEntryAnimation]=useState(false);const closeFlash=()=>{if(ref.current){setFlashHeight(ref.current.getBoundingClientRect().height)}setClosed(true);setTimeout(()=>{if(id){removeFlash(id)}},100)};useEffect(()=>setTriggerEntryAnimation(true),[]);useAutoHide(type,closeFlash);const animateEntry=triggerEntryAnimation&&!closed;let style;if(flashHeight&&!closed){style={height:`${flashHeight}px`}}else if(closed){style={height:0,marginTop:0,zIndex:-1}}else{style={}}const safeContent=DOMPurify.sanitize(content,{ALLOWED_TAGS:["a"],ALLOWED_ATTR:["href","data-method"],ALLOWED_URI_REGEXP:/^\/[^/]/});const withIcons={notice:"icon-gui-ably-badge",success:"icon-gui-check-outline",error:"icon-gui-exclamation-triangle-outline",alert:"icon-gui-exclamation-triangle-outline",info:""};const iconColor={notice:"text-cool-black",success:"text-cool-black",error:"text-white",alert:"text-white",info:""};return React.createElement("div",{className:`ui-flash-message ui-grid-px ${animateEntry?"ui-flash-message-enter":""}`,style:style,ref:ref,"data-id":"ui-flash","data-testid":"ui-flash"},React.createElement("div",{className:`${FLASH_BG_COLOR[type]} p-8 flex align-center rounded shadow-container-subtle`},withIcons[type]&&iconColor[type]&&React.createElement(Icon,{name:withIcons[type],color:iconColor[type],size:"1.5rem",additionalCSS:"mr-4 self-baseline"}),React.createElement("p",{className:`ui-text-p1 mr-4 ${FLASH_TEXT_COLOR[type]}`,dangerouslySetInnerHTML:{__html:safeContent}}),React.createElement("button",{type:"button",className:"p-0 ml-auto self-start focus:outline-none",onClick:closeFlash},iconColor[type]&&React.createElement(Icon,{name:"icon-gui-x-mark-outline",color:iconColor[type],size:"1.5rem",additionalCSS:"transition-colors"}))))};const Flashes=({flashes})=>{const[flashesWithIds,setFlashesWithIds]=useState([]);const removeFlash=flashId=>setFlashesWithIds(items=>items.filter(item=>item.id!==flashId));useEffect(()=>{setFlashesWithIds(state=>{return[...state,...(flashes?.items??[]).map(flash=>({...flash,id:Math.random().toString(36).slice(2),removed:false,removeFlash}))]})},[flashes]);return React.createElement("div",{className:"ui-flash","data-id":FLASH_DATA_ID},flashesWithIds.filter(item=>!item.removed).map(flash=>React.createElement(Flash,{key:flash.id,...flash})))};const BackendFlashes=({flashes})=>{useEffect(()=>{const transformedFlashes=flashes.map(flash=>{const[type,content]=flash;return{type,content}})||[];if(transformedFlashes.length>0){const store=getRemoteDataStore();store.dispatch({type:"flash/push",payload:transformedFlashes})}},[flashes]);const WrappedFlashes=ConnectStateWrapper(Flashes,{flashes:selectFlashes});return React.createElement(WrappedFlashes,null)};export{reducerFlashes,FLASH_DATA_ID,Flashes};export default BackendFlashes;
2
2
  //# sourceMappingURL=Flash.js.map
package/core/Flash.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/Flash.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef } from \"react\";\nimport DOMPurify from \"dompurify\";\nimport { getRemoteDataStore } from \"./remote-data-store.js\";\nimport ConnectStateWrapper from \"./ConnectStateWrapper\";\nimport Icon from \"./Icon\";\nimport { ColorClass } from \"./styles/colors/types\";\nimport { IconName } from \"./Icon/types\";\n\ntype FlashPropsType = \"error\" | \"success\" | \"notice\" | \"info\" | \"alert\";\n\ntype FlashProps = {\n id: string;\n removed: boolean;\n type: FlashPropsType;\n content: string;\n removeFlash: (id: string) => void;\n};\n\ntype FlashesProps = {\n flashes: { items: Pick<FlashProps, \"type\" | \"content\">[] };\n};\n\ntype BackendFlashesProps = {\n flashes: string[][];\n};\n\nconst REDUCER_KEY = \"flashes\";\nconst FLASH_DATA_ID = \"ui-flashes\";\n\nconst initialState = { items: [] };\n\nconst reducerFlashes = {\n [REDUCER_KEY]: (\n state: {\n items: FlashProps[];\n } = initialState,\n action: { type: string; payload: FlashProps | FlashProps[] },\n ) => {\n switch (action.type) {\n case \"flash/push\": {\n const flashes = Array.isArray(action.payload)\n ? action.payload\n : [action.payload];\n return { items: [...state.items, ...flashes] };\n }\n default:\n return state;\n }\n },\n};\n\n// Not cool but redux isn't a long term plan here\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst selectFlashes = (store: any): { items: FlashProps[] } =>\n store.getState()[REDUCER_KEY];\n\nconst FLASH_BG_COLOR = {\n error: \"bg-gui-error\",\n success: \"bg-zingy-green\",\n notice: \"bg-electric-cyan\",\n info: \"bg-electric-cyan\",\n alert: \"bg-active-orange\",\n};\n\nconst FLASH_TEXT_COLOR = {\n error: \"text-white\",\n success: \"text-cool-black\",\n notice: \"text-cool-black\",\n info: \"text-cool-black\",\n alert: \"text-white\",\n};\n\nconst AUTO_HIDE = [\"success\", \"info\", \"notice\"];\nconst AUTO_HIDE_TIME = 8000;\n\nconst useAutoHide = (type: string, closeFlash: () => void) => {\n const timeoutId = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (AUTO_HIDE.includes(type)) {\n timeoutId.current = setTimeout(() => {\n closeFlash();\n }, AUTO_HIDE_TIME);\n }\n\n return () => {\n if (timeoutId.current) {\n clearTimeout(timeoutId.current);\n }\n };\n }, []);\n};\n\nconst Flash = ({ id, type, content, removeFlash }: FlashProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const [closed, setClosed] = useState(false);\n const [flashHeight, setFlashHeight] = useState(0);\n const [triggerEntryAnimation, setTriggerEntryAnimation] = useState(false);\n\n const closeFlash = () => {\n if (ref.current) {\n setFlashHeight(ref.current.getBoundingClientRect().height);\n }\n\n setClosed(true);\n\n setTimeout(() => {\n if (id) {\n removeFlash(id);\n }\n }, 100);\n };\n\n useEffect(() => setTriggerEntryAnimation(true), []);\n useAutoHide(type, closeFlash);\n\n const animateEntry = triggerEntryAnimation && !closed;\n\n let style;\n\n if (flashHeight && !closed) {\n style = { height: `${flashHeight}px` };\n } else if (closed) {\n style = { height: 0, marginTop: 0, zIndex: -1 };\n } else {\n style = {};\n }\n\n const safeContent = DOMPurify.sanitize(content, {\n ALLOWED_TAGS: [\"a\"],\n ALLOWED_ATTR: [\"href\", \"data-method\"],\n ALLOWED_URI_REGEXP: /^\\/[^/]/,\n });\n\n const withIcons: Record<FlashPropsType, IconName | \"\"> = {\n notice: \"icon-gui-ably-badge\",\n success: \"icon-gui-check-outline\",\n error: \"icon-gui-exclamation-triangle-outline\",\n alert: \"icon-gui-exclamation-triangle-outline\",\n info: \"\",\n };\n\n const iconColor: Record<FlashPropsType, ColorClass | \"\"> = {\n notice: \"text-cool-black\",\n success: \"text-cool-black\",\n error: \"text-white\",\n alert: \"text-white\",\n info: \"\",\n };\n\n return (\n <div\n className={`ui-flash-message ui-grid-px ${\n animateEntry ? \"ui-flash-message-enter\" : \"\"\n }`}\n style={style}\n ref={ref}\n data-id=\"ui-flash\"\n data-testid=\"ui-flash\"\n >\n <div\n className={`${FLASH_BG_COLOR[type]} p-8 flex align-center rounded shadow-container-subtle`}\n >\n {withIcons[type] && iconColor[type] && (\n <Icon\n name={withIcons[type]}\n color={iconColor[type]}\n size=\"1.5rem\"\n additionalCSS=\"mr-4 self-baseline\"\n />\n )}\n <p\n className={`ui-text-p1 mr-4 ${FLASH_TEXT_COLOR[type]}`}\n dangerouslySetInnerHTML={{ __html: safeContent }}\n />\n <button\n type=\"button\"\n className=\"p-0 ml-auto self-start focus:outline-none\"\n onClick={closeFlash}\n >\n {iconColor[type] && (\n <Icon\n name=\"icon-gui-x-mark-outline\"\n color={iconColor[type]}\n size=\"1.5rem\"\n additionalCSS=\"transition-colors\"\n />\n )}\n </button>\n </div>\n </div>\n );\n};\n\nconst Flashes = ({ flashes }: FlashesProps) => {\n const [flashesWithIds, setFlashesWithIds] = useState<FlashProps[]>([]);\n\n const removeFlash = (flashId: string) =>\n setFlashesWithIds((items) => items.filter((item) => item.id !== flashId));\n\n useEffect(() => {\n setFlashesWithIds((state) => {\n return [\n ...state,\n ...(flashes?.items ?? []).map((flash) => ({\n ...flash,\n id: Math.random().toString(36).slice(2),\n removed: false,\n removeFlash,\n })),\n ];\n });\n }, [flashes]);\n\n return (\n <div className=\"ui-flash\" data-id={FLASH_DATA_ID}>\n {flashesWithIds\n .filter((item) => !item.removed)\n .map((flash) => (\n <Flash key={flash.id} {...flash} />\n ))}\n </div>\n );\n};\n\nconst BackendFlashes = ({ flashes }: BackendFlashesProps) => {\n useEffect(() => {\n const transformedFlashes =\n flashes.map((flash) => {\n const [type, content] = flash;\n return { type, content };\n }) || [];\n\n if (transformedFlashes.length > 0) {\n const store = getRemoteDataStore();\n\n store.dispatch({\n type: \"flash/push\",\n payload: transformedFlashes,\n });\n }\n }, []);\n\n const WrappedFlashes = ConnectStateWrapper(Flashes, {\n flashes: selectFlashes,\n });\n\n return <WrappedFlashes />;\n};\n\nexport { reducerFlashes, FLASH_DATA_ID, Flashes };\nexport default BackendFlashes;\n"],"names":["React","useEffect","useState","useRef","DOMPurify","getRemoteDataStore","ConnectStateWrapper","Icon","REDUCER_KEY","FLASH_DATA_ID","initialState","items","reducerFlashes","state","action","type","flashes","Array","isArray","payload","selectFlashes","store","getState","FLASH_BG_COLOR","error","success","notice","info","alert","FLASH_TEXT_COLOR","AUTO_HIDE","AUTO_HIDE_TIME","useAutoHide","closeFlash","timeoutId","includes","current","setTimeout","clearTimeout","Flash","id","content","removeFlash","ref","closed","setClosed","flashHeight","setFlashHeight","triggerEntryAnimation","setTriggerEntryAnimation","getBoundingClientRect","height","animateEntry","style","marginTop","zIndex","safeContent","sanitize","ALLOWED_TAGS","ALLOWED_ATTR","ALLOWED_URI_REGEXP","withIcons","iconColor","div","className","data-id","data-testid","name","color","size","additionalCSS","p","dangerouslySetInnerHTML","__html","button","onClick","Flashes","flashesWithIds","setFlashesWithIds","flashId","filter","item","map","flash","Math","random","toString","slice","removed","key","BackendFlashes","transformedFlashes","length","dispatch","WrappedFlashes"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/core/Flash.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef } from \"react\";\nimport DOMPurify from \"dompurify\";\nimport { getRemoteDataStore } from \"./remote-data-store.js\";\nimport ConnectStateWrapper from \"./ConnectStateWrapper\";\nimport Icon from \"./Icon\";\nimport { ColorClass } from \"./styles/colors/types\";\nimport { IconName } from \"./Icon/types\";\n\ntype FlashPropsType = \"error\" | \"success\" | \"notice\" | \"info\" | \"alert\";\n\ntype FlashProps = {\n id: string;\n removed: boolean;\n type: FlashPropsType;\n content: string;\n removeFlash: (id: string) => void;\n};\n\ntype FlashesProps = {\n flashes: { items: Pick<FlashProps, \"type\" | \"content\">[] };\n};\n\ntype BackendFlashesProps = {\n flashes: string[][];\n};\n\nconst REDUCER_KEY = \"flashes\";\nconst FLASH_DATA_ID = \"ui-flashes\";\n\nconst initialState = { items: [] };\n\nconst reducerFlashes = {\n [REDUCER_KEY]: (\n state: {\n items: FlashProps[];\n } = initialState,\n action: { type: string; payload: FlashProps | FlashProps[] },\n ) => {\n switch (action.type) {\n case \"flash/push\": {\n const flashes = Array.isArray(action.payload)\n ? action.payload\n : [action.payload];\n return { items: [...state.items, ...flashes] };\n }\n default:\n return state;\n }\n },\n};\n\n// Not cool but redux isn't a long term plan here\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst selectFlashes = (store: any): { items: FlashProps[] } =>\n store.getState()[REDUCER_KEY];\n\nconst FLASH_BG_COLOR = {\n error: \"bg-gui-error\",\n success: \"bg-zingy-green\",\n notice: \"bg-electric-cyan\",\n info: \"bg-electric-cyan\",\n alert: \"bg-active-orange\",\n};\n\nconst FLASH_TEXT_COLOR = {\n error: \"text-white\",\n success: \"text-cool-black\",\n notice: \"text-cool-black\",\n info: \"text-cool-black\",\n alert: \"text-white\",\n};\n\nconst AUTO_HIDE = [\"success\", \"info\", \"notice\"];\nconst AUTO_HIDE_TIME = 8000;\n\nconst useAutoHide = (type: string, closeFlash: () => void) => {\n const timeoutId = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (AUTO_HIDE.includes(type)) {\n timeoutId.current = setTimeout(() => {\n closeFlash();\n }, AUTO_HIDE_TIME);\n }\n\n return () => {\n if (timeoutId.current) {\n clearTimeout(timeoutId.current);\n }\n };\n }, [type, closeFlash]);\n};\n\nconst Flash = ({ id, type, content, removeFlash }: FlashProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const [closed, setClosed] = useState(false);\n const [flashHeight, setFlashHeight] = useState(0);\n const [triggerEntryAnimation, setTriggerEntryAnimation] = useState(false);\n\n const closeFlash = () => {\n if (ref.current) {\n setFlashHeight(ref.current.getBoundingClientRect().height);\n }\n\n setClosed(true);\n\n setTimeout(() => {\n if (id) {\n removeFlash(id);\n }\n }, 100);\n };\n\n useEffect(() => setTriggerEntryAnimation(true), []);\n useAutoHide(type, closeFlash);\n\n const animateEntry = triggerEntryAnimation && !closed;\n\n let style;\n\n if (flashHeight && !closed) {\n style = { height: `${flashHeight}px` };\n } else if (closed) {\n style = { height: 0, marginTop: 0, zIndex: -1 };\n } else {\n style = {};\n }\n\n const safeContent = DOMPurify.sanitize(content, {\n ALLOWED_TAGS: [\"a\"],\n ALLOWED_ATTR: [\"href\", \"data-method\"],\n ALLOWED_URI_REGEXP: /^\\/[^/]/,\n });\n\n const withIcons: Record<FlashPropsType, IconName | \"\"> = {\n notice: \"icon-gui-ably-badge\",\n success: \"icon-gui-check-outline\",\n error: \"icon-gui-exclamation-triangle-outline\",\n alert: \"icon-gui-exclamation-triangle-outline\",\n info: \"\",\n };\n\n const iconColor: Record<FlashPropsType, ColorClass | \"\"> = {\n notice: \"text-cool-black\",\n success: \"text-cool-black\",\n error: \"text-white\",\n alert: \"text-white\",\n info: \"\",\n };\n\n return (\n <div\n className={`ui-flash-message ui-grid-px ${\n animateEntry ? \"ui-flash-message-enter\" : \"\"\n }`}\n style={style}\n ref={ref}\n data-id=\"ui-flash\"\n data-testid=\"ui-flash\"\n >\n <div\n className={`${FLASH_BG_COLOR[type]} p-8 flex align-center rounded shadow-container-subtle`}\n >\n {withIcons[type] && iconColor[type] && (\n <Icon\n name={withIcons[type]}\n color={iconColor[type]}\n size=\"1.5rem\"\n additionalCSS=\"mr-4 self-baseline\"\n />\n )}\n <p\n className={`ui-text-p1 mr-4 ${FLASH_TEXT_COLOR[type]}`}\n dangerouslySetInnerHTML={{ __html: safeContent }}\n />\n <button\n type=\"button\"\n className=\"p-0 ml-auto self-start focus:outline-none\"\n onClick={closeFlash}\n >\n {iconColor[type] && (\n <Icon\n name=\"icon-gui-x-mark-outline\"\n color={iconColor[type]}\n size=\"1.5rem\"\n additionalCSS=\"transition-colors\"\n />\n )}\n </button>\n </div>\n </div>\n );\n};\n\nconst Flashes = ({ flashes }: FlashesProps) => {\n const [flashesWithIds, setFlashesWithIds] = useState<FlashProps[]>([]);\n\n const removeFlash = (flashId: string) =>\n setFlashesWithIds((items) => items.filter((item) => item.id !== flashId));\n\n useEffect(() => {\n setFlashesWithIds((state) => {\n return [\n ...state,\n ...(flashes?.items ?? []).map((flash) => ({\n ...flash,\n id: Math.random().toString(36).slice(2),\n removed: false,\n removeFlash,\n })),\n ];\n });\n }, [flashes]);\n\n return (\n <div className=\"ui-flash\" data-id={FLASH_DATA_ID}>\n {flashesWithIds\n .filter((item) => !item.removed)\n .map((flash) => (\n <Flash key={flash.id} {...flash} />\n ))}\n </div>\n );\n};\n\nconst BackendFlashes = ({ flashes }: BackendFlashesProps) => {\n useEffect(() => {\n const transformedFlashes =\n flashes.map((flash) => {\n const [type, content] = flash;\n return { type, content };\n }) || [];\n\n if (transformedFlashes.length > 0) {\n const store = getRemoteDataStore();\n\n store.dispatch({\n type: \"flash/push\",\n payload: transformedFlashes,\n });\n }\n }, [flashes]);\n\n const WrappedFlashes = ConnectStateWrapper(Flashes, {\n flashes: selectFlashes,\n });\n\n return <WrappedFlashes />;\n};\n\nexport { reducerFlashes, FLASH_DATA_ID, Flashes };\nexport default BackendFlashes;\n"],"names":["React","useEffect","useState","useRef","DOMPurify","getRemoteDataStore","ConnectStateWrapper","Icon","REDUCER_KEY","FLASH_DATA_ID","initialState","items","reducerFlashes","state","action","type","flashes","Array","isArray","payload","selectFlashes","store","getState","FLASH_BG_COLOR","error","success","notice","info","alert","FLASH_TEXT_COLOR","AUTO_HIDE","AUTO_HIDE_TIME","useAutoHide","closeFlash","timeoutId","includes","current","setTimeout","clearTimeout","Flash","id","content","removeFlash","ref","closed","setClosed","flashHeight","setFlashHeight","triggerEntryAnimation","setTriggerEntryAnimation","getBoundingClientRect","height","animateEntry","style","marginTop","zIndex","safeContent","sanitize","ALLOWED_TAGS","ALLOWED_ATTR","ALLOWED_URI_REGEXP","withIcons","iconColor","div","className","data-id","data-testid","name","color","size","additionalCSS","p","dangerouslySetInnerHTML","__html","button","onClick","Flashes","flashesWithIds","setFlashesWithIds","flashId","filter","item","map","flash","Math","random","toString","slice","removed","key","BackendFlashes","transformedFlashes","length","dispatch","WrappedFlashes"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import React,{useRef}from"react";import Icon from"../Icon";import LinkButton from"../LinkButton";import cn from"../utils/cn";import DropdownMenu from"../DropdownMenu";const testSessionState={signedIn:false,logOut:{token:"0000",href:"accounts/sign_out"},accountName:"Ably"};export const HeaderLinks=({sessionState=testSessionState,headerLinks,searchButtonVisibility,searchButton,className})=>{const{signedIn,logOut}=sessionState;const formRef=useRef(null);const headerLinkClasses="ui-text-label2 md:ui-text-label3 !font-bold py-4 text-neutral-1300 dark:text-neutral-000 md:text-neutral-1000 dark:md:text-neutral-300 hover:text-neutral-1300 dark:hover:text-neutral-000 active:text-neutral-1300 dark:active:text-neutral-000 transition-colors";const dropdownMenuLinkClasses="block p-2 ui-text-label3 font-semibold text-neutral-1000 dark:text-neutral-300 hover:bg-neutral-100 dark:hover:bg-neutral-1200 active:bg-neutral-200 dark:active:bg-neutral-1100 rounded-lg";const onClickLogout=e=>{e.preventDefault();formRef.current?.submit()};const DashboardLink=({className})=>React.createElement("a",{href:"/dashboard",className:className},"Dashboard");const LogoutForm=React.createElement("form",{ref:formRef,method:"post",action:logOut.href,className:"hidden"},React.createElement("input",{name:"_method",value:"delete",type:"hidden"}),React.createElement("input",{name:"authenticity_token",value:logOut.token,type:"hidden"}));return React.createElement("nav",{className:cn("flex md:flex-1 md:items-center md:justify-end flex-col md:flex-row border-t-[1px] border-neutral-300 md:border-t-0 md:gap-4 pt-3 pb-4 md:py-0",className)},signedIn&&React.createElement(React.Fragment,null,LogoutForm,React.createElement("div",{className:"block md:hidden"},React.createElement("div",{className:"flex flex-col border-b-[1px] border-neutral-300 px-4 pb-3 mb-3"},React.createElement("span",{className:"py-3 ui-text-sub-header text-[18px] text-neutral-700 dark:text-neutral-600 font-bold"},sessionState.accountName),React.createElement(DashboardLink,{className:headerLinkClasses})))),headerLinks?.map(({href,label,external})=>React.createElement("a",{key:href,className:cn(headerLinkClasses,"flex items-center gap-1.5 px-4 md:px-0 leading-none"),href:href,target:external?"_blank":undefined,rel:external?"noreferrer noopener":undefined},label,external&&React.createElement(Icon,{name:"icon-gui-arrow-top-right-on-square-mini",size:"20px"}))),searchButtonVisibility!=="mobile"?searchButton:null,signedIn?React.createElement(React.Fragment,null,React.createElement("div",{className:"hidden md:block relative"},React.createElement(DropdownMenu,null,React.createElement(DropdownMenu.Trigger,{description:`Account menu for ${sessionState.accountName}`},React.createElement("span",{className:"block text-ellipsis overflow-hidden whitespace-nowrap w-full max-w-[9.375rem] leading-normal"},sessionState.accountName)),React.createElement(DropdownMenu.Content,{anchorPosition:"right",contentClassNames:"w-60 mt-3"},React.createElement("div",{className:"p-2"},React.createElement(DashboardLink,{className:dropdownMenuLinkClasses}),React.createElement("a",{onClick:onClickLogout,href:"#",className:dropdownMenuLinkClasses},"Logout"))))),React.createElement("div",{className:"block md:hidden px-4 pt-4 pb-0"},React.createElement(LinkButton,{onClick:onClickLogout,variant:"secondary",className:"w-full md:ui-button-secondary-xs","aria-label":"Logout",rightIcon:"icon-gui-arrow-right-end-on-rectangle-outline"},"Logout"))):React.createElement("div",{className:"flex gap-3 pt-3 md:py-0 px-4 md:px-0"},React.createElement(LinkButton,{href:"/login",variant:"secondary",className:"flex-1 md:flex-none md:ui-button-secondary-xs hover:text-neutral-1300 dark:hover:text-neutral-000"},"Login"),React.createElement(LinkButton,{href:"/sign-up",variant:"primary",className:"flex-1 md:flex-none md:ui-button-primary-xs hover:text-neutral-000 dark:hover:text-neutral-1300"},"Start free")))};
1
+ import React,{useRef}from"react";import Icon from"../Icon";import LinkButton from"../LinkButton";import cn from"../utils/cn";import DropdownMenu from"../DropdownMenu";const testSessionState={signedIn:false,logOut:{token:"0000",href:"accounts/sign_out"},accountName:"Ably"};export const HeaderLinks=({sessionState=testSessionState,headerLinks,searchButtonVisibility,searchButton,className})=>{const{signedIn,logOut}=sessionState;const formRef=useRef(null);const headerLinkClasses="ui-text-label2 md:ui-text-label3 !font-bold py-4 text-neutral-1300 dark:text-neutral-000 md:text-neutral-1000 dark:md:text-neutral-300 hover:text-neutral-1300 dark:hover:text-neutral-000 active:text-neutral-1300 dark:active:text-neutral-000 transition-colors";const dropdownMenuLinkClasses="block p-2 ui-text-label3 font-semibold text-neutral-1000 dark:text-neutral-300 hover:bg-neutral-100 dark:hover:bg-neutral-1200 active:bg-neutral-200 dark:active:bg-neutral-1100 rounded-lg";const onClickLogout=e=>{e.preventDefault();formRef.current?.submit()};const DashboardLink=({className})=>React.createElement("a",{href:"/dashboard",className:className},"Dashboard");const LogoutForm=React.createElement("form",{ref:formRef,method:"post",action:logOut.href,className:"hidden"},React.createElement("input",{name:"_method",value:"delete",type:"hidden"}),React.createElement("input",{name:"authenticity_token",value:logOut.token,type:"hidden"}));return React.createElement("nav",{className:cn("flex md:flex-1 md:items-center md:justify-end flex-col md:flex-row border-t-[1px] border-neutral-300 md:border-t-0 md:gap-4 pt-3 pb-4 md:py-0",className)},signedIn&&React.createElement(React.Fragment,null,LogoutForm,React.createElement("div",{className:"block md:hidden"},React.createElement("div",{className:"flex flex-col border-b-[1px] border-neutral-300 px-4 pb-3 mb-3"},React.createElement("span",{className:"py-3 ui-text-sub-header text-[18px] text-neutral-700 dark:text-neutral-600 font-bold"},sessionState.accountName),React.createElement(DashboardLink,{className:headerLinkClasses})))),headerLinks?.map(({href,label,external})=>React.createElement("a",{key:href,className:cn(headerLinkClasses,"flex items-center gap-1.5 px-4 md:px-0 leading-none"),href:href,target:external?"_blank":undefined,rel:external?"noreferrer noopener":undefined},label,external&&React.createElement(Icon,{name:"icon-gui-arrow-top-right-on-square-mini",size:"20px"}))),searchButtonVisibility!=="mobile"?searchButton:null,signedIn?React.createElement(React.Fragment,null,React.createElement("div",{className:"hidden md:block relative"},React.createElement(DropdownMenu,null,React.createElement(DropdownMenu.Trigger,{description:`Account menu for ${sessionState.accountName}`},React.createElement("span",{className:"block text-ellipsis overflow-hidden whitespace-nowrap w-full max-w-[9.375rem] leading-normal"},sessionState.accountName)),React.createElement(DropdownMenu.Content,{anchorPosition:"right",contentClassNames:"w-60 mt-3"},React.createElement("div",{className:"p-2"},React.createElement(DashboardLink,{className:dropdownMenuLinkClasses}),React.createElement("button",{onClick:onClickLogout,className:dropdownMenuLinkClasses},"Logout"))))),React.createElement("div",{className:"block md:hidden px-4 pt-4 pb-0"},React.createElement(LinkButton,{onClick:onClickLogout,variant:"secondary",className:"w-full md:ui-button-secondary-xs","aria-label":"Logout",rightIcon:"icon-gui-arrow-right-end-on-rectangle-outline"},"Logout"))):React.createElement("div",{className:"flex gap-3 pt-3 md:py-0 px-4 md:px-0"},React.createElement(LinkButton,{href:"/login",variant:"secondary",className:"flex-1 md:flex-none md:ui-button-secondary-xs hover:text-neutral-1300 dark:hover:text-neutral-000"},"Login"),React.createElement(LinkButton,{href:"/sign-up",variant:"primary",className:"flex-1 md:flex-none md:ui-button-primary-xs hover:text-neutral-000 dark:hover:text-neutral-1300"},"Start free")))};
2
2
  //# sourceMappingURL=HeaderLinks.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/Header/HeaderLinks.tsx"],"sourcesContent":["import React, { MouseEvent, useRef } from \"react\";\nimport { HeaderProps } from \"../Header\";\nimport Icon from \"../Icon\";\nimport LinkButton from \"../LinkButton\";\nimport cn from \"../utils/cn\";\nimport DropdownMenu from \"../DropdownMenu\";\n\nconst testSessionState = {\n signedIn: false,\n logOut: {\n token: \"0000\",\n href: \"accounts/sign_out\",\n },\n accountName: \"Ably\",\n};\n\nexport const HeaderLinks: React.FC<\n Pick<\n HeaderProps,\n | \"sessionState\"\n | \"headerLinks\"\n | \"searchButtonVisibility\"\n | \"searchButton\"\n | \"className\"\n >\n> = ({\n sessionState = testSessionState,\n headerLinks,\n searchButtonVisibility,\n searchButton,\n className,\n}) => {\n const { signedIn, logOut } = sessionState;\n const formRef = useRef<HTMLFormElement>(null);\n\n const headerLinkClasses =\n \"ui-text-label2 md:ui-text-label3 !font-bold py-4 text-neutral-1300 dark:text-neutral-000 md:text-neutral-1000 dark:md:text-neutral-300 hover:text-neutral-1300 dark:hover:text-neutral-000 active:text-neutral-1300 dark:active:text-neutral-000 transition-colors\";\n\n const dropdownMenuLinkClasses =\n \"block p-2 ui-text-label3 font-semibold text-neutral-1000 dark:text-neutral-300 hover:bg-neutral-100 dark:hover:bg-neutral-1200 active:bg-neutral-200 dark:active:bg-neutral-1100 rounded-lg\";\n\n const onClickLogout = (e: MouseEvent) => {\n e.preventDefault();\n formRef.current?.submit();\n };\n\n const DashboardLink = ({ className }: { className: string }) => (\n <a href=\"/dashboard\" className={className}>\n Dashboard\n </a>\n );\n\n const LogoutForm = (\n <form ref={formRef} method=\"post\" action={logOut.href} className=\"hidden\">\n <input name=\"_method\" value=\"delete\" type=\"hidden\" />\n <input name=\"authenticity_token\" value={logOut.token} type=\"hidden\" />\n </form>\n );\n\n return (\n <nav\n className={cn(\n \"flex md:flex-1 md:items-center md:justify-end flex-col md:flex-row border-t-[1px] border-neutral-300 md:border-t-0 md:gap-4 pt-3 pb-4 md:py-0\",\n className,\n )}\n >\n {signedIn && (\n <>\n {LogoutForm}\n <div className=\"block md:hidden\">\n <div className=\"flex flex-col border-b-[1px] border-neutral-300 px-4 pb-3 mb-3\">\n <span className=\"py-3 ui-text-sub-header text-[18px] text-neutral-700 dark:text-neutral-600 font-bold\">\n {sessionState.accountName}\n </span>\n {<DashboardLink className={headerLinkClasses} />}\n </div>\n </div>\n </>\n )}\n\n {headerLinks?.map(({ href, label, external }) => (\n <a\n key={href}\n className={cn(\n headerLinkClasses,\n \"flex items-center gap-1.5 px-4 md:px-0 leading-none\",\n )}\n href={href}\n target={external ? \"_blank\" : undefined}\n rel={external ? \"noreferrer noopener\" : undefined}\n >\n {label}\n {external && (\n <Icon name=\"icon-gui-arrow-top-right-on-square-mini\" size=\"20px\" />\n )}\n </a>\n ))}\n\n {searchButtonVisibility !== \"mobile\" ? searchButton : null}\n {signedIn ? (\n <>\n <div className=\"hidden md:block relative\">\n <DropdownMenu>\n <DropdownMenu.Trigger\n description={`Account menu for ${sessionState.accountName}`}\n >\n <span className=\"block text-ellipsis overflow-hidden whitespace-nowrap w-full max-w-[9.375rem] leading-normal\">\n {sessionState.accountName}\n </span>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content\n anchorPosition=\"right\"\n contentClassNames=\"w-60 mt-3\"\n >\n <div className=\"p-2\">\n {<DashboardLink className={dropdownMenuLinkClasses} />}\n <a\n onClick={onClickLogout}\n href=\"#\"\n className={dropdownMenuLinkClasses}\n >\n Logout\n </a>\n </div>\n </DropdownMenu.Content>\n </DropdownMenu>\n </div>\n <div className=\"block md:hidden px-4 pt-4 pb-0\">\n <LinkButton\n onClick={onClickLogout}\n variant=\"secondary\"\n className=\"w-full md:ui-button-secondary-xs\"\n aria-label=\"Logout\"\n rightIcon=\"icon-gui-arrow-right-end-on-rectangle-outline\"\n >\n Logout\n </LinkButton>\n </div>\n </>\n ) : (\n <div className=\"flex gap-3 pt-3 md:py-0 px-4 md:px-0\">\n <LinkButton\n href=\"/login\"\n variant=\"secondary\"\n className=\"flex-1 md:flex-none md:ui-button-secondary-xs hover:text-neutral-1300 dark:hover:text-neutral-000\"\n >\n Login\n </LinkButton>\n <LinkButton\n href=\"/sign-up\"\n variant=\"primary\"\n className=\"flex-1 md:flex-none md:ui-button-primary-xs hover:text-neutral-000 dark:hover:text-neutral-1300\"\n >\n Start free\n </LinkButton>\n </div>\n )}\n </nav>\n );\n};\n"],"names":["React","useRef","Icon","LinkButton","cn","DropdownMenu","testSessionState","signedIn","logOut","token","href","accountName","HeaderLinks","sessionState","headerLinks","searchButtonVisibility","searchButton","className","formRef","headerLinkClasses","dropdownMenuLinkClasses","onClickLogout","e","preventDefault","current","submit","DashboardLink","a","LogoutForm","form","ref","method","action","input","name","value","type","nav","div","span","map","label","external","key","target","undefined","rel","size","Trigger","description","Content","anchorPosition","contentClassNames","onClick","variant","aria-label","rightIcon"],"mappings":"AAAA,OAAOA,OAAqBC,MAAM,KAAQ,OAAQ,AAElD,QAAOC,SAAU,SAAU,AAC3B,QAAOC,eAAgB,eAAgB,AACvC,QAAOC,OAAQ,aAAc,AAC7B,QAAOC,iBAAkB,iBAAkB,CAE3C,MAAMC,iBAAmB,CACvBC,SAAU,MACVC,OAAQ,CACNC,MAAO,OACPC,KAAM,mBACR,EACAC,YAAa,MACf,CAEA,QAAO,MAAMC,YAST,CAAC,CACHC,aAAeP,gBAAgB,CAC/BQ,WAAW,CACXC,sBAAsB,CACtBC,YAAY,CACZC,SAAS,CACV,IACC,KAAM,CAAEV,QAAQ,CAAEC,MAAM,CAAE,CAAGK,aAC7B,MAAMK,QAAUjB,OAAwB,MAExC,MAAMkB,kBACJ,qQAEF,MAAMC,wBACJ,8LAEF,MAAMC,cAAgB,AAACC,IACrBA,EAAEC,cAAc,EAChBL,CAAAA,QAAQM,OAAO,EAAEC,QACnB,EAEA,MAAMC,cAAgB,CAAC,CAAET,SAAS,CAAyB,GACzD,oBAACU,KAAEjB,KAAK,aAAaO,UAAWA,WAAW,aAK7C,MAAMW,WACJ,oBAACC,QAAKC,IAAKZ,QAASa,OAAO,OAAOC,OAAQxB,OAAOE,IAAI,CAAEO,UAAU,UAC/D,oBAACgB,SAAMC,KAAK,UAAUC,MAAM,SAASC,KAAK,WAC1C,oBAACH,SAAMC,KAAK,qBAAqBC,MAAO3B,OAAOC,KAAK,CAAE2B,KAAK,YAI/D,OACE,oBAACC,OACCpB,UAAWb,GACT,gJACAa,YAGDV,UACC,wCACGqB,WACD,oBAACU,OAAIrB,UAAU,mBACb,oBAACqB,OAAIrB,UAAU,kEACb,oBAACsB,QAAKtB,UAAU,wFACbJ,aAAaF,WAAW,EAE1B,oBAACe,eAAcT,UAAWE,uBAMlCL,aAAa0B,IAAI,CAAC,CAAE9B,IAAI,CAAE+B,KAAK,CAAEC,QAAQ,CAAE,GAC1C,oBAACf,KACCgB,IAAKjC,KACLO,UAAWb,GACTe,kBACA,uDAEFT,KAAMA,KACNkC,OAAQF,SAAW,SAAWG,UAC9BC,IAAKJ,SAAW,sBAAwBG,WAEvCJ,MACAC,UACC,oBAACxC,MAAKgC,KAAK,0CAA0Ca,KAAK,WAK/DhC,yBAA2B,SAAWC,aAAe,KACrDT,SACC,wCACE,oBAAC+B,OAAIrB,UAAU,4BACb,oBAACZ,kBACC,oBAACA,aAAa2C,OAAO,EACnBC,YAAa,CAAC,iBAAiB,EAAEpC,aAAaF,WAAW,CAAC,CAAC,EAE3D,oBAAC4B,QAAKtB,UAAU,gGACbJ,aAAaF,WAAW,GAG7B,oBAACN,aAAa6C,OAAO,EACnBC,eAAe,QACfC,kBAAkB,aAElB,oBAACd,OAAIrB,UAAU,OACZ,oBAACS,eAAcT,UAAWG,0BAC3B,oBAACO,KACC0B,QAAShC,cACTX,KAAK,IACLO,UAAWG,yBACZ,cAOT,oBAACkB,OAAIrB,UAAU,kCACb,oBAACd,YACCkD,QAAShC,cACTiC,QAAQ,YACRrC,UAAU,mCACVsC,aAAW,SACXC,UAAU,iDACX,YAML,oBAAClB,OAAIrB,UAAU,wCACb,oBAACd,YACCO,KAAK,SACL4C,QAAQ,YACRrC,UAAU,qGACX,SAGD,oBAACd,YACCO,KAAK,WACL4C,QAAQ,UACRrC,UAAU,mGACX,eAOX,CAAE"}
1
+ {"version":3,"sources":["../../../src/core/Header/HeaderLinks.tsx"],"sourcesContent":["import React, { MouseEvent, useRef } from \"react\";\nimport { HeaderProps } from \"../Header\";\nimport Icon from \"../Icon\";\nimport LinkButton from \"../LinkButton\";\nimport cn from \"../utils/cn\";\nimport DropdownMenu from \"../DropdownMenu\";\n\nconst testSessionState = {\n signedIn: false,\n logOut: {\n token: \"0000\",\n href: \"accounts/sign_out\",\n },\n accountName: \"Ably\",\n};\n\nexport const HeaderLinks: React.FC<\n Pick<\n HeaderProps,\n | \"sessionState\"\n | \"headerLinks\"\n | \"searchButtonVisibility\"\n | \"searchButton\"\n | \"className\"\n >\n> = ({\n sessionState = testSessionState,\n headerLinks,\n searchButtonVisibility,\n searchButton,\n className,\n}) => {\n const { signedIn, logOut } = sessionState;\n const formRef = useRef<HTMLFormElement>(null);\n\n const headerLinkClasses =\n \"ui-text-label2 md:ui-text-label3 !font-bold py-4 text-neutral-1300 dark:text-neutral-000 md:text-neutral-1000 dark:md:text-neutral-300 hover:text-neutral-1300 dark:hover:text-neutral-000 active:text-neutral-1300 dark:active:text-neutral-000 transition-colors\";\n\n const dropdownMenuLinkClasses =\n \"block p-2 ui-text-label3 font-semibold text-neutral-1000 dark:text-neutral-300 hover:bg-neutral-100 dark:hover:bg-neutral-1200 active:bg-neutral-200 dark:active:bg-neutral-1100 rounded-lg\";\n\n const onClickLogout = (e: MouseEvent) => {\n e.preventDefault();\n formRef.current?.submit();\n };\n\n const DashboardLink = ({ className }: { className: string }) => (\n <a href=\"/dashboard\" className={className}>\n Dashboard\n </a>\n );\n\n const LogoutForm = (\n <form ref={formRef} method=\"post\" action={logOut.href} className=\"hidden\">\n <input name=\"_method\" value=\"delete\" type=\"hidden\" />\n <input name=\"authenticity_token\" value={logOut.token} type=\"hidden\" />\n </form>\n );\n\n return (\n <nav\n className={cn(\n \"flex md:flex-1 md:items-center md:justify-end flex-col md:flex-row border-t-[1px] border-neutral-300 md:border-t-0 md:gap-4 pt-3 pb-4 md:py-0\",\n className,\n )}\n >\n {signedIn && (\n <>\n {LogoutForm}\n <div className=\"block md:hidden\">\n <div className=\"flex flex-col border-b-[1px] border-neutral-300 px-4 pb-3 mb-3\">\n <span className=\"py-3 ui-text-sub-header text-[18px] text-neutral-700 dark:text-neutral-600 font-bold\">\n {sessionState.accountName}\n </span>\n {<DashboardLink className={headerLinkClasses} />}\n </div>\n </div>\n </>\n )}\n\n {headerLinks?.map(({ href, label, external }) => (\n <a\n key={href}\n className={cn(\n headerLinkClasses,\n \"flex items-center gap-1.5 px-4 md:px-0 leading-none\",\n )}\n href={href}\n target={external ? \"_blank\" : undefined}\n rel={external ? \"noreferrer noopener\" : undefined}\n >\n {label}\n {external && (\n <Icon name=\"icon-gui-arrow-top-right-on-square-mini\" size=\"20px\" />\n )}\n </a>\n ))}\n\n {searchButtonVisibility !== \"mobile\" ? searchButton : null}\n {signedIn ? (\n <>\n <div className=\"hidden md:block relative\">\n <DropdownMenu>\n <DropdownMenu.Trigger\n description={`Account menu for ${sessionState.accountName}`}\n >\n <span className=\"block text-ellipsis overflow-hidden whitespace-nowrap w-full max-w-[9.375rem] leading-normal\">\n {sessionState.accountName}\n </span>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content\n anchorPosition=\"right\"\n contentClassNames=\"w-60 mt-3\"\n >\n <div className=\"p-2\">\n {<DashboardLink className={dropdownMenuLinkClasses} />}\n <button\n onClick={onClickLogout}\n className={dropdownMenuLinkClasses}\n >\n Logout\n </button>\n </div>\n </DropdownMenu.Content>\n </DropdownMenu>\n </div>\n <div className=\"block md:hidden px-4 pt-4 pb-0\">\n <LinkButton\n onClick={onClickLogout}\n variant=\"secondary\"\n className=\"w-full md:ui-button-secondary-xs\"\n aria-label=\"Logout\"\n rightIcon=\"icon-gui-arrow-right-end-on-rectangle-outline\"\n >\n Logout\n </LinkButton>\n </div>\n </>\n ) : (\n <div className=\"flex gap-3 pt-3 md:py-0 px-4 md:px-0\">\n <LinkButton\n href=\"/login\"\n variant=\"secondary\"\n className=\"flex-1 md:flex-none md:ui-button-secondary-xs hover:text-neutral-1300 dark:hover:text-neutral-000\"\n >\n Login\n </LinkButton>\n <LinkButton\n href=\"/sign-up\"\n variant=\"primary\"\n className=\"flex-1 md:flex-none md:ui-button-primary-xs hover:text-neutral-000 dark:hover:text-neutral-1300\"\n >\n Start free\n </LinkButton>\n </div>\n )}\n </nav>\n );\n};\n"],"names":["React","useRef","Icon","LinkButton","cn","DropdownMenu","testSessionState","signedIn","logOut","token","href","accountName","HeaderLinks","sessionState","headerLinks","searchButtonVisibility","searchButton","className","formRef","headerLinkClasses","dropdownMenuLinkClasses","onClickLogout","e","preventDefault","current","submit","DashboardLink","a","LogoutForm","form","ref","method","action","input","name","value","type","nav","div","span","map","label","external","key","target","undefined","rel","size","Trigger","description","Content","anchorPosition","contentClassNames","button","onClick","variant","aria-label","rightIcon"],"mappings":"AAAA,OAAOA,OAAqBC,MAAM,KAAQ,OAAQ,AAElD,QAAOC,SAAU,SAAU,AAC3B,QAAOC,eAAgB,eAAgB,AACvC,QAAOC,OAAQ,aAAc,AAC7B,QAAOC,iBAAkB,iBAAkB,CAE3C,MAAMC,iBAAmB,CACvBC,SAAU,MACVC,OAAQ,CACNC,MAAO,OACPC,KAAM,mBACR,EACAC,YAAa,MACf,CAEA,QAAO,MAAMC,YAST,CAAC,CACHC,aAAeP,gBAAgB,CAC/BQ,WAAW,CACXC,sBAAsB,CACtBC,YAAY,CACZC,SAAS,CACV,IACC,KAAM,CAAEV,QAAQ,CAAEC,MAAM,CAAE,CAAGK,aAC7B,MAAMK,QAAUjB,OAAwB,MAExC,MAAMkB,kBACJ,qQAEF,MAAMC,wBACJ,8LAEF,MAAMC,cAAgB,AAACC,IACrBA,EAAEC,cAAc,EAChBL,CAAAA,QAAQM,OAAO,EAAEC,QACnB,EAEA,MAAMC,cAAgB,CAAC,CAAET,SAAS,CAAyB,GACzD,oBAACU,KAAEjB,KAAK,aAAaO,UAAWA,WAAW,aAK7C,MAAMW,WACJ,oBAACC,QAAKC,IAAKZ,QAASa,OAAO,OAAOC,OAAQxB,OAAOE,IAAI,CAAEO,UAAU,UAC/D,oBAACgB,SAAMC,KAAK,UAAUC,MAAM,SAASC,KAAK,WAC1C,oBAACH,SAAMC,KAAK,qBAAqBC,MAAO3B,OAAOC,KAAK,CAAE2B,KAAK,YAI/D,OACE,oBAACC,OACCpB,UAAWb,GACT,gJACAa,YAGDV,UACC,wCACGqB,WACD,oBAACU,OAAIrB,UAAU,mBACb,oBAACqB,OAAIrB,UAAU,kEACb,oBAACsB,QAAKtB,UAAU,wFACbJ,aAAaF,WAAW,EAE1B,oBAACe,eAAcT,UAAWE,uBAMlCL,aAAa0B,IAAI,CAAC,CAAE9B,IAAI,CAAE+B,KAAK,CAAEC,QAAQ,CAAE,GAC1C,oBAACf,KACCgB,IAAKjC,KACLO,UAAWb,GACTe,kBACA,uDAEFT,KAAMA,KACNkC,OAAQF,SAAW,SAAWG,UAC9BC,IAAKJ,SAAW,sBAAwBG,WAEvCJ,MACAC,UACC,oBAACxC,MAAKgC,KAAK,0CAA0Ca,KAAK,WAK/DhC,yBAA2B,SAAWC,aAAe,KACrDT,SACC,wCACE,oBAAC+B,OAAIrB,UAAU,4BACb,oBAACZ,kBACC,oBAACA,aAAa2C,OAAO,EACnBC,YAAa,CAAC,iBAAiB,EAAEpC,aAAaF,WAAW,CAAC,CAAC,EAE3D,oBAAC4B,QAAKtB,UAAU,gGACbJ,aAAaF,WAAW,GAG7B,oBAACN,aAAa6C,OAAO,EACnBC,eAAe,QACfC,kBAAkB,aAElB,oBAACd,OAAIrB,UAAU,OACZ,oBAACS,eAAcT,UAAWG,0BAC3B,oBAACiC,UACCC,QAASjC,cACTJ,UAAWG,yBACZ,cAOT,oBAACkB,OAAIrB,UAAU,kCACb,oBAACd,YACCmD,QAASjC,cACTkC,QAAQ,YACRtC,UAAU,mCACVuC,aAAW,SACXC,UAAU,iDACX,YAML,oBAACnB,OAAIrB,UAAU,wCACb,oBAACd,YACCO,KAAK,SACL6C,QAAQ,YACRtC,UAAU,qGACX,SAGD,oBAACd,YACCO,KAAK,WACL6C,QAAQ,UACRtC,UAAU,mGACX,eAOX,CAAE"}
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"es-toolkit/compat";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=({className,isNoticeVisible=false,searchBar,searchButton,logoHref,headerLinks,headerLinksClassName,headerCenterClassName,nav,mobileNav,sessionState,themedScrollpoints=[],searchButtonVisibility="all",location,logoBadge})=>{const[showMenu,setShowMenu]=useState(false);const[fadingOut,setFadingOut]=useState(false);const[bannerVisible,setBannerVisible]=useState(isNoticeVisible);const menuRef=useRef(null);const[scrollpointClasses,setScrollpointClasses]=useState(themedScrollpoints.length>0?themedScrollpoints[0].className:"");const closeMenu=()=>{setFadingOut(true);setTimeout(()=>{setShowMenu(false);setFadingOut(false)},150)};useEffect(()=>{const handleScroll=()=>{setBannerVisible(window.scrollY<=COLLAPSE_TRIGGER_DISTANCE&&isNoticeVisible);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]);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(()=>{if(location&&showMenu){closeMenu()}},[location]);const wrappedSearchButton=useMemo(()=>searchButton?React.createElement("div",{className:"text-neutral-1300 dark:text-neutral-000 flex items-center"},searchButton):null,[searchButton]);return React.createElement(React.Fragment,null,React.createElement("header",{role:"banner",className:cn("fixed left-0 top-0 w-full z-50 bg-neutral-000 dark:bg-neutral-1300 border-b border-neutral-300 dark:border-neutral-1000 transition-colors px-6 lg:px-16",scrollpointClasses,{"md:top-auto":bannerVisible}),style:{height:HEADER_HEIGHT}},React.createElement("div",{className:cn("flex items-center h-full",className)},React.createElement("nav",{className:"flex flex-1 h-full items-center"},["light","dark"].map(theme=>React.createElement(Logo,{key:theme,href:logoHref,theme:theme,badge:logoBadge,additionalLinkAttrs:{className:cn("h-full focus-base rounded mr-4 lg:mr-8",{"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-6 h-full"},searchButtonVisibility!=="desktop"?wrappedSearchButton:null,React.createElement("button",{className:"cursor-pointer focus-base rounded flex items-center p-0",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",headerCenterClassName)},searchBar):null,React.createElement(HeaderLinks,{className:cn(FLEXIBLE_DESKTOP_CLASSES,headerLinksClassName),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 z-40",{"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-[4.75rem] overflow-y-hidden mx-3 right-0 w-[calc(100%-24px)] bg-neutral-000 dark:bg-neutral-1300 rounded-2xl ui-shadow-lg-medium z-50",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"es-toolkit/compat";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=({className,isNoticeVisible=false,searchBar,searchButton,logoHref,headerLinks,headerLinksClassName,headerCenterClassName,nav,mobileNav,sessionState,themedScrollpoints=[],searchButtonVisibility="all",location,logoBadge})=>{const[showMenu,setShowMenu]=useState(false);const[fadingOut,setFadingOut]=useState(false);const[bannerVisible,setBannerVisible]=useState(isNoticeVisible);const menuRef=useRef(null);const[scrollpointClasses,setScrollpointClasses]=useState(themedScrollpoints.length>0?themedScrollpoints[0].className:"");const closeMenu=()=>{setFadingOut(true);setTimeout(()=>{setShowMenu(false);setFadingOut(false)},150)};useEffect(()=>{const handleScroll=()=>{setBannerVisible(window.scrollY<=COLLAPSE_TRIGGER_DISTANCE&&isNoticeVisible);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,isNoticeVisible]);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(()=>{if(location&&showMenu){closeMenu()}},[location,showMenu]);const wrappedSearchButton=useMemo(()=>searchButton?React.createElement("div",{className:"text-neutral-1300 dark:text-neutral-000 flex items-center"},searchButton):null,[searchButton]);return React.createElement(React.Fragment,null,React.createElement("header",{role:"banner",className:cn("fixed left-0 top-0 w-full z-50 bg-neutral-000 dark:bg-neutral-1300 border-b border-neutral-300 dark:border-neutral-1000 transition-colors px-6 lg:px-16",scrollpointClasses,{"md:top-auto":bannerVisible}),style:{height:HEADER_HEIGHT}},React.createElement("div",{className:cn("flex items-center h-full",className)},React.createElement("nav",{className:"flex flex-1 h-full items-center"},["light","dark"].map(theme=>React.createElement(Logo,{key:theme,href:logoHref,theme:theme,badge:logoBadge,additionalLinkAttrs:{className:cn("h-full focus-base rounded mr-4 lg:mr-8",{"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-6 h-full"},searchButtonVisibility!=="desktop"?wrappedSearchButton:null,React.createElement("button",{className:"cursor-pointer focus-base rounded flex items-center p-0",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",headerCenterClassName)},searchBar):null,React.createElement(HeaderLinks,{className:cn(FLEXIBLE_DESKTOP_CLASSES,headerLinksClassName),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 z-40",{"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-[4.75rem] overflow-y-hidden mx-3 right-0 w-[calc(100%-24px)] bg-neutral-000 dark:bg-neutral-1300 rounded-2xl ui-shadow-lg-medium z-50",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 \"es-toolkit/compat\";\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 /**\n * Optional classnames to add to the header\n */\n className?: string;\n /**\n * Indicates if the notice banner is visible.\n */\n isNoticeVisible?: boolean;\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 classname for styling the header links container.\n */\n headerLinksClassName?: string;\n\n /**\n * Optional classname for styling the header center container.\n */\n headerCenterClassName?: string;\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 /**\n * Optional location object to detect location changes.\n */\n location?: Location;\n\n /**\n * Optional badge text to display on the logo.\n */\n logoBadge?: string;\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 className,\n isNoticeVisible = false,\n searchBar,\n searchButton,\n logoHref,\n headerLinks,\n headerLinksClassName,\n headerCenterClassName,\n nav,\n mobileNav,\n sessionState,\n themedScrollpoints = [],\n searchButtonVisibility = \"all\",\n location,\n logoBadge,\n}) => {\n const [showMenu, setShowMenu] = useState(false);\n const [fadingOut, setFadingOut] = useState(false);\n const [bannerVisible, setBannerVisible] = useState(isNoticeVisible);\n const menuRef = useRef<HTMLDivElement>(null);\n const [scrollpointClasses, setScrollpointClasses] = useState<string>(\n themedScrollpoints.length > 0 ? themedScrollpoints[0].className : \"\",\n );\n\n const closeMenu = () => {\n setFadingOut(true);\n\n setTimeout(() => {\n setShowMenu(false);\n setFadingOut(false);\n }, 150);\n };\n\n useEffect(() => {\n const handleScroll = () => {\n setBannerVisible(\n window.scrollY <= COLLAPSE_TRIGGER_DISTANCE && isNoticeVisible,\n );\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 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 // Close menu when location changes\n useEffect(() => {\n if (location && showMenu) {\n closeMenu();\n }\n }, [location]);\n\n const wrappedSearchButton = useMemo(\n () =>\n searchButton ? (\n <div className=\"text-neutral-1300 dark:text-neutral-000 flex items-center\">\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 top-0 w-full z-50 bg-neutral-000 dark:bg-neutral-1300 border-b border-neutral-300 dark:border-neutral-1000 transition-colors px-6 lg:px-16\",\n scrollpointClasses,\n {\n \"md:top-auto\": bannerVisible,\n },\n )}\n style={{ height: HEADER_HEIGHT }}\n >\n <div className={cn(\"flex items-center h-full\", className)}>\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 badge={logoBadge}\n additionalLinkAttrs={{\n className: cn(\"h-full focus-base rounded mr-4 lg:mr-8\", {\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-6 h-full\">\n {searchButtonVisibility !== \"desktop\" ? wrappedSearchButton : null}\n <button\n className=\"cursor-pointer focus-base rounded flex items-center p-0\"\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\n className={cn(\n FLEXIBLE_DESKTOP_CLASSES,\n \"justify-center\",\n headerCenterClassName,\n )}\n >\n {searchBar}\n </div>\n ) : null}\n <HeaderLinks\n className={cn(FLEXIBLE_DESKTOP_CLASSES, headerLinksClassName)}\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 z-40\",\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-[4.75rem] overflow-y-hidden mx-3 right-0 w-[calc(100%-24px)] bg-neutral-000 dark:bg-neutral-1300 rounded-2xl ui-shadow-lg-medium z-50\"\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","className","isNoticeVisible","searchBar","searchButton","logoHref","headerLinks","headerLinksClassName","headerCenterClassName","nav","mobileNav","sessionState","themedScrollpoints","searchButtonVisibility","location","logoBadge","showMenu","setShowMenu","fadingOut","setFadingOut","bannerVisible","setBannerVisible","menuRef","scrollpointClasses","setScrollpointClasses","length","closeMenu","setTimeout","handleScroll","window","scrollY","scrollpoint","element","document","getElementById","id","rect","getBoundingClientRect","top","bottom","throttledHandleScroll","addEventListener","removeEventListener","handleResize","innerWidth","body","classList","add","remove","wrappedSearchButton","div","header","role","style","height","map","theme","key","href","badge","additionalLinkAttrs","button","onClick","aria-expanded","aria-controls","aria-label","name","additionalCSS","size","onKeyDown","e","maxWidth","maxHeight","ref"],"mappings":"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"}
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 \"es-toolkit/compat\";\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 /**\n * Optional classnames to add to the header\n */\n className?: string;\n /**\n * Indicates if the notice banner is visible.\n */\n isNoticeVisible?: boolean;\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 classname for styling the header links container.\n */\n headerLinksClassName?: string;\n\n /**\n * Optional classname for styling the header center container.\n */\n headerCenterClassName?: string;\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 /**\n * Optional location object to detect location changes.\n */\n location?: Location;\n\n /**\n * Optional badge text to display on the logo.\n */\n logoBadge?: string;\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 className,\n isNoticeVisible = false,\n searchBar,\n searchButton,\n logoHref,\n headerLinks,\n headerLinksClassName,\n headerCenterClassName,\n nav,\n mobileNav,\n sessionState,\n themedScrollpoints = [],\n searchButtonVisibility = \"all\",\n location,\n logoBadge,\n}) => {\n const [showMenu, setShowMenu] = useState(false);\n const [fadingOut, setFadingOut] = useState(false);\n const [bannerVisible, setBannerVisible] = useState(isNoticeVisible);\n const menuRef = useRef<HTMLDivElement>(null);\n const [scrollpointClasses, setScrollpointClasses] = useState<string>(\n themedScrollpoints.length > 0 ? themedScrollpoints[0].className : \"\",\n );\n\n const closeMenu = () => {\n setFadingOut(true);\n\n setTimeout(() => {\n setShowMenu(false);\n setFadingOut(false);\n }, 150);\n };\n\n useEffect(() => {\n const handleScroll = () => {\n setBannerVisible(\n window.scrollY <= COLLAPSE_TRIGGER_DISTANCE && isNoticeVisible,\n );\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, isNoticeVisible]);\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 // Close menu when location changes\n useEffect(() => {\n if (location && showMenu) {\n closeMenu();\n }\n }, [location, showMenu]);\n\n const wrappedSearchButton = useMemo(\n () =>\n searchButton ? (\n <div className=\"text-neutral-1300 dark:text-neutral-000 flex items-center\">\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 top-0 w-full z-50 bg-neutral-000 dark:bg-neutral-1300 border-b border-neutral-300 dark:border-neutral-1000 transition-colors px-6 lg:px-16\",\n scrollpointClasses,\n {\n \"md:top-auto\": bannerVisible,\n },\n )}\n style={{ height: HEADER_HEIGHT }}\n >\n <div className={cn(\"flex items-center h-full\", className)}>\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 badge={logoBadge}\n additionalLinkAttrs={{\n className: cn(\"h-full focus-base rounded mr-4 lg:mr-8\", {\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-6 h-full\">\n {searchButtonVisibility !== \"desktop\" ? wrappedSearchButton : null}\n <button\n className=\"cursor-pointer focus-base rounded flex items-center p-0\"\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\n className={cn(\n FLEXIBLE_DESKTOP_CLASSES,\n \"justify-center\",\n headerCenterClassName,\n )}\n >\n {searchBar}\n </div>\n ) : null}\n <HeaderLinks\n className={cn(FLEXIBLE_DESKTOP_CLASSES, headerLinksClassName)}\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 z-40\",\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-[4.75rem] overflow-y-hidden mx-3 right-0 w-[calc(100%-24px)] bg-neutral-000 dark:bg-neutral-1300 rounded-2xl ui-shadow-lg-medium z-50\"\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","className","isNoticeVisible","searchBar","searchButton","logoHref","headerLinks","headerLinksClassName","headerCenterClassName","nav","mobileNav","sessionState","themedScrollpoints","searchButtonVisibility","location","logoBadge","showMenu","setShowMenu","fadingOut","setFadingOut","bannerVisible","setBannerVisible","menuRef","scrollpointClasses","setScrollpointClasses","length","closeMenu","setTimeout","handleScroll","window","scrollY","scrollpoint","element","document","getElementById","id","rect","getBoundingClientRect","top","bottom","throttledHandleScroll","addEventListener","removeEventListener","handleResize","innerWidth","body","classList","add","remove","wrappedSearchButton","div","header","role","style","height","map","theme","key","href","badge","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*as React from"react";import{forwardRef}from"react";const IconDisplayUiMono=({title,titleId,...props},ref)=>React.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:48,height:48,fill:"none",viewBox:"0 0 48 48",ref:ref,"aria-labelledby":titleId,...props},title?React.createElement("title",{id:titleId},title):null,React.createElement("path",{stroke:"currentColor",strokeWidth:1.5,d:"M4 6.75h40A3.25 3.25 0 0 1 47.25 10v28A3.25 3.25 0 0 1 44 41.25H4A3.25 3.25 0 0 1 .75 38V10A3.25 3.25 0 0 1 4 6.75ZM.5 13.5h47"}),React.createElement("path",{fill:"currentColor",d:"M4.25 11.25a1 1 0 1 0 0-2 1 1 0 0 0 0 2M7.25 11.25a1 1 0 1 0 0-2 1 1 0 0 0 0 2M10.25 11.25a1 1 0 1 0 0-2 1 1 0 0 0 0 2"}),React.createElement("path",{stroke:"currentColor",strokeDasharray:"3 4",strokeLinecap:"round",strokeWidth:1.5,d:"M31.004 21q0-3 3-3h4q3 0 3 3v12q0 3-3 3h-4q-3 0-3-3zM6 21q0-3 3-3h15q3 0 3 3v1q0 3-3 3H9q-3 0-3-3zM6 32q0-3 3-3h15q3 0 3 3v1q0 3-3 3H9q-3 0-3-3z"}));const ForwardRef=forwardRef(IconDisplayUiMono);export default ForwardRef;
2
+ //# sourceMappingURL=icon-display-ui-mono.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/core/Icon/components/icon-display-ui-mono.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { SVGProps } from \"react\";\nimport { Ref, forwardRef } from \"react\";\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\nconst IconDisplayUiMono = ({\n title,\n titleId,\n ...props\n}: SVGProps<SVGSVGElement> & SVGRProps, ref: Ref<SVGSVGElement>) => <svg xmlns=\"http://www.w3.org/2000/svg\" width={48} height={48} fill=\"none\" viewBox=\"0 0 48 48\" ref={ref} aria-labelledby={titleId} {...props}>{title ? <title id={titleId}>{title}</title> : null}<path stroke=\"currentColor\" strokeWidth={1.5} d=\"M4 6.75h40A3.25 3.25 0 0 1 47.25 10v28A3.25 3.25 0 0 1 44 41.25H4A3.25 3.25 0 0 1 .75 38V10A3.25 3.25 0 0 1 4 6.75ZM.5 13.5h47\" /><path fill=\"currentColor\" d=\"M4.25 11.25a1 1 0 1 0 0-2 1 1 0 0 0 0 2M7.25 11.25a1 1 0 1 0 0-2 1 1 0 0 0 0 2M10.25 11.25a1 1 0 1 0 0-2 1 1 0 0 0 0 2\" /><path stroke=\"currentColor\" strokeDasharray=\"3 4\" strokeLinecap=\"round\" strokeWidth={1.5} d=\"M31.004 21q0-3 3-3h4q3 0 3 3v12q0 3-3 3h-4q-3 0-3-3zM6 21q0-3 3-3h15q3 0 3 3v1q0 3-3 3H9q-3 0-3-3zM6 32q0-3 3-3h15q3 0 3 3v1q0 3-3 3H9q-3 0-3-3z\" /></svg>;\nconst ForwardRef = forwardRef(IconDisplayUiMono);\nexport default ForwardRef;"],"names":["React","forwardRef","IconDisplayUiMono","title","titleId","props","ref","svg","xmlns","width","height","fill","viewBox","aria-labelledby","id","path","stroke","strokeWidth","d","strokeDasharray","strokeLinecap","ForwardRef"],"mappings":"AAAA,UAAYA,UAAW,OAAQ,AAE/B,QAAcC,UAAU,KAAQ,OAAQ,CAKxC,MAAMC,kBAAoB,CAAC,CACzBC,KAAK,CACLC,OAAO,CACP,GAAGC,MACiC,CAAEC,MAA4B,oBAACC,OAAIC,MAAM,6BAA6BC,MAAO,GAAIC,OAAQ,GAAIC,KAAK,OAAOC,QAAQ,YAAYN,IAAKA,IAAKO,kBAAiBT,QAAU,GAAGC,KAAK,EAAGF,MAAQ,oBAACA,SAAMW,GAAIV,SAAUD,OAAiB,KAAK,oBAACY,QAAKC,OAAO,eAAeC,YAAa,IAAKC,EAAE,mIAAmI,oBAACH,QAAKJ,KAAK,eAAeO,EAAE,2HAA2H,oBAACH,QAAKC,OAAO,eAAeG,gBAAgB,MAAMC,cAAc,QAAQH,YAAa,IAAKC,EAAE,sJAC5qB,MAAMG,WAAapB,WAAWC,kBAC9B,gBAAemB,UAAW"}
@@ -0,0 +1,2 @@
1
+ import*as React from"react";import{forwardRef}from"react";const IconDisplayUi=({title,titleId,...props},ref)=>React.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:48,height:48,fill:"none",viewBox:"0 0 48 48",ref:ref,"aria-labelledby":titleId,...props},title?React.createElement("title",{id:titleId},title):null,React.createElement("path",{stroke:"currentColor",strokeWidth:1.5,d:"M4 6.75h40A3.25 3.25 0 0 1 47.25 10v28A3.25 3.25 0 0 1 44 41.25H4A3.25 3.25 0 0 1 .75 38V10A3.25 3.25 0 0 1 4 6.75ZM.5 13.5h47"}),React.createElement("path",{fill:"currentColor",d:"M4.25 11.25a1 1 0 1 0 0-2 1 1 0 0 0 0 2M7.25 11.25a1 1 0 1 0 0-2 1 1 0 0 0 0 2M10.25 11.25a1 1 0 1 0 0-2 1 1 0 0 0 0 2"}),React.createElement("path",{fill:"#FF5416",fillRule:"evenodd",d:"M31.223 18.22c.69-.69 1.665-.97 2.78-.97h4c1.116 0 2.09.28 2.78.97.691.69.97 1.664.97 2.78v12c0 1.116-.279 2.09-.97 2.78-.69.69-1.664.97-2.78.97h-4c-1.115 0-2.09-.28-2.78-.97s-.97-1.664-.97-2.78V21c0-1.116.28-2.09.97-2.78",clipRule:"evenodd"}),React.createElement("path",{stroke:"currentColor",strokeDasharray:"3 4",strokeLinecap:"round",strokeWidth:1.5,d:"M6 21q0-3 3-3h15q3 0 3 3v1q0 3-3 3H9q-3 0-3-3zM6 32q0-3 3-3h15q3 0 3 3v1q0 3-3 3H9q-3 0-3-3z"}));const ForwardRef=forwardRef(IconDisplayUi);export default ForwardRef;
2
+ //# sourceMappingURL=icon-display-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/core/Icon/components/icon-display-ui.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { SVGProps } from \"react\";\nimport { Ref, forwardRef } from \"react\";\ninterface SVGRProps {\n title?: string;\n titleId?: string;\n}\nconst IconDisplayUi = ({\n title,\n titleId,\n ...props\n}: SVGProps<SVGSVGElement> & SVGRProps, ref: Ref<SVGSVGElement>) => <svg xmlns=\"http://www.w3.org/2000/svg\" width={48} height={48} fill=\"none\" viewBox=\"0 0 48 48\" ref={ref} aria-labelledby={titleId} {...props}>{title ? <title id={titleId}>{title}</title> : null}<path stroke=\"currentColor\" strokeWidth={1.5} d=\"M4 6.75h40A3.25 3.25 0 0 1 47.25 10v28A3.25 3.25 0 0 1 44 41.25H4A3.25 3.25 0 0 1 .75 38V10A3.25 3.25 0 0 1 4 6.75ZM.5 13.5h47\" /><path fill=\"currentColor\" d=\"M4.25 11.25a1 1 0 1 0 0-2 1 1 0 0 0 0 2M7.25 11.25a1 1 0 1 0 0-2 1 1 0 0 0 0 2M10.25 11.25a1 1 0 1 0 0-2 1 1 0 0 0 0 2\" /><path fill=\"#FF5416\" fillRule=\"evenodd\" d=\"M31.223 18.22c.69-.69 1.665-.97 2.78-.97h4c1.116 0 2.09.28 2.78.97.691.69.97 1.664.97 2.78v12c0 1.116-.279 2.09-.97 2.78-.69.69-1.664.97-2.78.97h-4c-1.115 0-2.09-.28-2.78-.97s-.97-1.664-.97-2.78V21c0-1.116.28-2.09.97-2.78\" clipRule=\"evenodd\" /><path stroke=\"currentColor\" strokeDasharray=\"3 4\" strokeLinecap=\"round\" strokeWidth={1.5} d=\"M6 21q0-3 3-3h15q3 0 3 3v1q0 3-3 3H9q-3 0-3-3zM6 32q0-3 3-3h15q3 0 3 3v1q0 3-3 3H9q-3 0-3-3z\" /></svg>;\nconst ForwardRef = forwardRef(IconDisplayUi);\nexport default ForwardRef;"],"names":["React","forwardRef","IconDisplayUi","title","titleId","props","ref","svg","xmlns","width","height","fill","viewBox","aria-labelledby","id","path","stroke","strokeWidth","d","fillRule","clipRule","strokeDasharray","strokeLinecap","ForwardRef"],"mappings":"AAAA,UAAYA,UAAW,OAAQ,AAE/B,QAAcC,UAAU,KAAQ,OAAQ,CAKxC,MAAMC,cAAgB,CAAC,CACrBC,KAAK,CACLC,OAAO,CACP,GAAGC,MACiC,CAAEC,MAA4B,oBAACC,OAAIC,MAAM,6BAA6BC,MAAO,GAAIC,OAAQ,GAAIC,KAAK,OAAOC,QAAQ,YAAYN,IAAKA,IAAKO,kBAAiBT,QAAU,GAAGC,KAAK,EAAGF,MAAQ,oBAACA,SAAMW,GAAIV,SAAUD,OAAiB,KAAK,oBAACY,QAAKC,OAAO,eAAeC,YAAa,IAAKC,EAAE,mIAAmI,oBAACH,QAAKJ,KAAK,eAAeO,EAAE,2HAA2H,oBAACH,QAAKJ,KAAK,UAAUQ,SAAS,UAAUD,EAAE,gOAAgOE,SAAS,YAAY,oBAACL,QAAKC,OAAO,eAAeK,gBAAgB,MAAMC,cAAc,QAAQL,YAAa,IAAKC,EAAE,kGAC38B,MAAMK,WAAatB,WAAWC,cAC9B,gBAAeqB,UAAW"}
@@ -1,2 +1,2 @@
1
- import IconDisplay48hrs from"./icon-display-48hrs";import IconDisplayAblyChannels from"./icon-display-ably-channels";import IconDisplayAboutAblyCol from"./icon-display-about-ably-col";import IconDisplayApiKeys from"./icon-display-api-keys";import IconDisplayApi from"./icon-display-api";import IconDisplayArchitecturalGuidance from"./icon-display-architectural-guidance";import IconDisplayAssetTrackingCol from"./icon-display-asset-tracking-col";import IconDisplayAuthentication from"./icon-display-authentication";import IconDisplayAvatarStack from"./icon-display-avatar-stack";import IconDisplayBrowser from"./icon-display-browser";import IconDisplayCalendar from"./icon-display-calendar";import IconDisplayCallMobile from"./icon-display-call-mobile";import IconDisplayCareersCol from"./icon-display-careers-col";import IconDisplayCaseStudiesCol from"./icon-display-case-studies-col";import IconDisplayChatCol from"./icon-display-chat-col";import IconDisplayChatMono from"./icon-display-chat-mono";import IconDisplayChatStackCol from"./icon-display-chat-stack-col";import IconDisplayChatStack from"./icon-display-chat-stack";import IconDisplayCloudServers from"./icon-display-cloud-servers";import IconDisplayCompareTechCol from"./icon-display-compare-tech-col";import IconDisplayConnectionStateRecovery from"./icon-display-connection-state-recovery";import IconDisplayConsumerGroups from"./icon-display-consumer-groups";import IconDisplayCustomCname from"./icon-display-custom-cname";import IconDisplayCustom from"./icon-display-custom";import IconDisplayCustomersCol from"./icon-display-customers-col";import IconDisplayDataBroadcastCol from"./icon-display-data-broadcast-col";import IconDisplayDataBroadcastMono from"./icon-display-data-broadcast-mono";import IconDisplayDataSynchronizationCol from"./icon-display-data-synchronization-col";import IconDisplayDedicatedCluster from"./icon-display-dedicated-cluster";import IconDisplayDeltas from"./icon-display-deltas";import IconDisplayDocsCol from"./icon-display-docs-col";import IconDisplayDocumentation from"./icon-display-documentation";import IconDisplayDynamicChannelGroups from"./icon-display-dynamic-channel-groups";import IconDisplayEdgeNetwork from"./icon-display-edge-network";import IconDisplayElasticity from"./icon-display-elasticity";import IconDisplayEqualisersMono from"./icon-display-equalisers-mono";import IconDisplayEventsCol from"./icon-display-events-col";import IconDisplayExactlyOnceDelivery from"./icon-display-exactly-once-delivery";import IconDisplayExamplesCol from"./icon-display-examples-col";import IconDisplayFanOut from"./icon-display-fan-out";import IconDisplayFirehose from"./icon-display-firehose";import IconDisplayGdpr from"./icon-display-gdpr";import IconDisplayGeneralComms from"./icon-display-general-comms";import IconDisplayGranularPermissions from"./icon-display-granular-permissions";import IconDisplayHipaaMono from"./icon-display-hipaa-mono";import IconDisplayHipaa from"./icon-display-hipaa";import IconDisplayHistory from"./icon-display-history";import IconDisplayIntegrationsCol from"./icon-display-integrations-col";import IconDisplayIntegrations from"./icon-display-integrations";import IconDisplayItSupportAccess from"./icon-display-it-support-access";import IconDisplayItSupportHelpdesk from"./icon-display-it-support-helpdesk";import IconDisplayKafkaAtTheEdgeCol from"./icon-display-kafka-at-the-edge-col";import IconDisplayLaptop from"./icon-display-laptop";import IconDisplayLastSeen from"./icon-display-last-seen";import IconDisplayLightbulbCol from"./icon-display-lightbulb-col";import IconDisplayLiveChat from"./icon-display-live-chat";import IconDisplayLiveUpdatesResultsMetricsCol from"./icon-display-live-updates-results-metrics-col";import IconDisplayMapPin from"./icon-display-map-pin";import IconDisplayMessageBatching from"./icon-display-message-batching";import IconDisplayMessagePersistence from"./icon-display-message-persistence";import IconDisplayMessageQueues from"./icon-display-message-queues";import IconDisplayMessage from"./icon-display-message";import IconDisplayMultiUserSpacesCol from"./icon-display-multi-user-spaces-col";import IconDisplayObserveAnalytics from"./icon-display-observe-analytics";import IconDisplayPadlockClosed from"./icon-display-padlock-closed";import IconDisplayPlatform from"./icon-display-platform";import IconDisplayPlay from"./icon-display-play";import IconDisplayPremiumSupport from"./icon-display-premium-support";import IconDisplayPrivacyShieldFramework from"./icon-display-privacy-shield-framework";import IconDisplayPrivateLink from"./icon-display-private-link";import IconDisplayPushNotificationsCol from"./icon-display-push-notifications-col";import IconDisplayPushNotificationsMono from"./icon-display-push-notifications-mono";import IconDisplayPushNotifications from"./icon-display-push-notifications";import IconDisplayQuickstartGuidesCol from"./icon-display-quickstart-guides-col";import IconDisplayReactions from"./icon-display-reactions";import IconDisplayReadReceipts from"./icon-display-read-receipts";import IconDisplayResourcesCol from"./icon-display-resources-col";import IconDisplayRewind from"./icon-display-rewind";import IconDisplaySdksCol from"./icon-display-sdks-col";import IconDisplaySendReceivedMessages from"./icon-display-send-received-messages";import IconDisplayServers from"./icon-display-servers";import IconDisplayShoppingCart from"./icon-display-shopping-cart";import IconDisplaySla from"./icon-display-sla";import IconDisplaySoc2Type2Mono from"./icon-display-soc2-type2-mono";import IconDisplaySoc2Type2 from"./icon-display-soc2-type2";import IconDisplaySomethingElseMono from"./icon-display-something-else-mono";import IconDisplaySomethingElse from"./icon-display-something-else";import IconDisplaySubscriptionFilters from"./icon-display-subscription-filters";import IconDisplaySupportChatMono from"./icon-display-support-chat-mono";import IconDisplaySystemMetadata from"./icon-display-system-metadata";import IconDisplayTechAccountComms from"./icon-display-tech-account-comms";import IconDisplayTutorialsDemosCol from"./icon-display-tutorials-demos-col";import IconDisplayVirtualEventsCol from"./icon-display-virtual-events-col";import IconDisplayVirtualEvents from"./icon-display-virtual-events";export{IconDisplay48hrs,IconDisplayAblyChannels,IconDisplayAboutAblyCol,IconDisplayApiKeys,IconDisplayApi,IconDisplayArchitecturalGuidance,IconDisplayAssetTrackingCol,IconDisplayAuthentication,IconDisplayAvatarStack,IconDisplayBrowser,IconDisplayCalendar,IconDisplayCallMobile,IconDisplayCareersCol,IconDisplayCaseStudiesCol,IconDisplayChatCol,IconDisplayChatMono,IconDisplayChatStackCol,IconDisplayChatStack,IconDisplayCloudServers,IconDisplayCompareTechCol,IconDisplayConnectionStateRecovery,IconDisplayConsumerGroups,IconDisplayCustomCname,IconDisplayCustom,IconDisplayCustomersCol,IconDisplayDataBroadcastCol,IconDisplayDataBroadcastMono,IconDisplayDataSynchronizationCol,IconDisplayDedicatedCluster,IconDisplayDeltas,IconDisplayDocsCol,IconDisplayDocumentation,IconDisplayDynamicChannelGroups,IconDisplayEdgeNetwork,IconDisplayElasticity,IconDisplayEqualisersMono,IconDisplayEventsCol,IconDisplayExactlyOnceDelivery,IconDisplayExamplesCol,IconDisplayFanOut,IconDisplayFirehose,IconDisplayGdpr,IconDisplayGeneralComms,IconDisplayGranularPermissions,IconDisplayHipaaMono,IconDisplayHipaa,IconDisplayHistory,IconDisplayIntegrationsCol,IconDisplayIntegrations,IconDisplayItSupportAccess,IconDisplayItSupportHelpdesk,IconDisplayKafkaAtTheEdgeCol,IconDisplayLaptop,IconDisplayLastSeen,IconDisplayLightbulbCol,IconDisplayLiveChat,IconDisplayLiveUpdatesResultsMetricsCol,IconDisplayMapPin,IconDisplayMessageBatching,IconDisplayMessagePersistence,IconDisplayMessageQueues,IconDisplayMessage,IconDisplayMultiUserSpacesCol,IconDisplayObserveAnalytics,IconDisplayPadlockClosed,IconDisplayPlatform,IconDisplayPlay,IconDisplayPremiumSupport,IconDisplayPrivacyShieldFramework,IconDisplayPrivateLink,IconDisplayPushNotificationsCol,IconDisplayPushNotificationsMono,IconDisplayPushNotifications,IconDisplayQuickstartGuidesCol,IconDisplayReactions,IconDisplayReadReceipts,IconDisplayResourcesCol,IconDisplayRewind,IconDisplaySdksCol,IconDisplaySendReceivedMessages,IconDisplayServers,IconDisplayShoppingCart,IconDisplaySla,IconDisplaySoc2Type2Mono,IconDisplaySoc2Type2,IconDisplaySomethingElseMono,IconDisplaySomethingElse,IconDisplaySubscriptionFilters,IconDisplaySupportChatMono,IconDisplaySystemMetadata,IconDisplayTechAccountComms,IconDisplayTutorialsDemosCol,IconDisplayVirtualEventsCol,IconDisplayVirtualEvents};import IconGuiAblyBadge from"./icon-gui-ably-badge";import IconGuiCheckCircledFill from"./icon-gui-check-circled-fill";import IconGuiCheckLotusCircled from"./icon-gui-check-lotus-circled";import IconGuiChecklistChecked from"./icon-gui-checklist-checked";import IconGuiCodeDoc from"./icon-gui-code-doc";import IconGuiCursor from"./icon-gui-cursor";import IconGuiExpand from"./icon-gui-expand";import IconGuiFilterFlowStep0 from"./icon-gui-filter-flow-step-0";import IconGuiFilterFlowStep1 from"./icon-gui-filter-flow-step-1";import IconGuiFilterFlowStep2 from"./icon-gui-filter-flow-step-2";import IconGuiFilterFlowStep3 from"./icon-gui-filter-flow-step-3";import IconGuiFlowerGrowth from"./icon-gui-flower-growth";import IconGuiFurtherReading from"./icon-gui-further-reading";import IconGuiGlasses from"./icon-gui-glasses";import IconGuiHistory from"./icon-gui-history";import IconGuiLiveChat from"./icon-gui-live-chat";import IconGuiMouse from"./icon-gui-mouse";import IconGuiPartial from"./icon-gui-partial";import IconGuiPitfall from"./icon-gui-pitfall";import IconGuiProdAssetTrackingOutline from"./icon-gui-prod-asset-tracking-outline";import IconGuiProdAssetTrackingSolid from"./icon-gui-prod-asset-tracking-solid";import IconGuiProdChatOutline from"./icon-gui-prod-chat-outline";import IconGuiProdChatSolid from"./icon-gui-prod-chat-solid";import IconGuiProdLiveobjectsOutline from"./icon-gui-prod-liveobjects-outline";import IconGuiProdLiveobjectsSolid from"./icon-gui-prod-liveobjects-solid";import IconGuiProdLivesyncOutline from"./icon-gui-prod-livesync-outline";import IconGuiProdLivesyncSolid from"./icon-gui-prod-livesync-solid";import IconGuiProdPubsubOutline from"./icon-gui-prod-pubsub-outline";import IconGuiProdPubsubSolid from"./icon-gui-prod-pubsub-solid";import IconGuiProdSpacesOutline from"./icon-gui-prod-spaces-outline";import IconGuiProdSpacesSolid from"./icon-gui-prod-spaces-solid";import IconGuiQuoteMarksFill from"./icon-gui-quote-marks-fill";import IconGuiRefresh from"./icon-gui-refresh";import IconGuiResources from"./icon-gui-resources";import IconGuiSpinnerDark from"./icon-gui-spinner-dark";import IconGuiSpinnerLight from"./icon-gui-spinner-light";export{IconGuiAblyBadge,IconGuiCheckCircledFill,IconGuiCheckLotusCircled,IconGuiChecklistChecked,IconGuiCodeDoc,IconGuiCursor,IconGuiExpand,IconGuiFilterFlowStep0,IconGuiFilterFlowStep1,IconGuiFilterFlowStep2,IconGuiFilterFlowStep3,IconGuiFlowerGrowth,IconGuiFurtherReading,IconGuiGlasses,IconGuiHistory,IconGuiLiveChat,IconGuiMouse,IconGuiPartial,IconGuiPitfall,IconGuiProdAssetTrackingOutline,IconGuiProdAssetTrackingSolid,IconGuiProdChatOutline,IconGuiProdChatSolid,IconGuiProdLiveobjectsOutline,IconGuiProdLiveobjectsSolid,IconGuiProdLivesyncOutline,IconGuiProdLivesyncSolid,IconGuiProdPubsubOutline,IconGuiProdPubsubSolid,IconGuiProdSpacesOutline,IconGuiProdSpacesSolid,IconGuiQuoteMarksFill,IconGuiRefresh,IconGuiResources,IconGuiSpinnerDark,IconGuiSpinnerLight};import IconProductAssetTrackingMono from"./icon-product-asset-tracking-mono";import IconProductAssetTracking from"./icon-product-asset-tracking";import IconProductChatMono from"./icon-product-chat-mono";import IconProductChat from"./icon-product-chat";import IconProductLiveobjectsDark from"./icon-product-liveobjects-dark";import IconProductLiveobjectsMono from"./icon-product-liveobjects-mono";import IconProductLiveobjects from"./icon-product-liveobjects";import IconProductLivesyncMono from"./icon-product-livesync-mono";import IconProductLivesync from"./icon-product-livesync";import IconProductPlatformMono from"./icon-product-platform-mono";import IconProductPlatform from"./icon-product-platform";import IconProductPubsubMono from"./icon-product-pubsub-mono";import IconProductPubsub from"./icon-product-pubsub";import IconProductSpacesMono from"./icon-product-spaces-mono";import IconProductSpaces from"./icon-product-spaces";export{IconProductAssetTrackingMono,IconProductAssetTracking,IconProductChatMono,IconProductChat,IconProductLiveobjectsDark,IconProductLiveobjectsMono,IconProductLiveobjects,IconProductLivesyncMono,IconProductLivesync,IconProductPlatformMono,IconProductPlatform,IconProductPubsubMono,IconProductPubsub,IconProductSpacesMono,IconProductSpaces};import IconSocialDiscordMono from"./icon-social-discord-mono";import IconSocialDiscord from"./icon-social-discord";import IconSocialFacebookMono from"./icon-social-facebook-mono";import IconSocialFacebook from"./icon-social-facebook";import IconSocialGithubMono from"./icon-social-github-mono";import IconSocialGithub from"./icon-social-github";import IconSocialGlassdoorMono from"./icon-social-glassdoor-mono";import IconSocialGlassdoor from"./icon-social-glassdoor";import IconSocialGoogleMono from"./icon-social-google-mono";import IconSocialGoogle from"./icon-social-google";import IconSocialLinkedinMono from"./icon-social-linkedin-mono";import IconSocialLinkedin from"./icon-social-linkedin";import IconSocialSlackMono from"./icon-social-slack-mono";import IconSocialSlack from"./icon-social-slack";import IconSocialStackoverflowMono from"./icon-social-stackoverflow-mono";import IconSocialStackoverflow from"./icon-social-stackoverflow";import IconSocialTwitterMono from"./icon-social-twitter-mono";import IconSocialTwitter from"./icon-social-twitter";import IconSocialXMono from"./icon-social-x-mono";import IconSocialX from"./icon-social-x";import IconSocialYoutubeMono from"./icon-social-youtube-mono";import IconSocialYoutube from"./icon-social-youtube";export{IconSocialDiscordMono,IconSocialDiscord,IconSocialFacebookMono,IconSocialFacebook,IconSocialGithubMono,IconSocialGithub,IconSocialGlassdoorMono,IconSocialGlassdoor,IconSocialGoogleMono,IconSocialGoogle,IconSocialLinkedinMono,IconSocialLinkedin,IconSocialSlackMono,IconSocialSlack,IconSocialStackoverflowMono,IconSocialStackoverflow,IconSocialTwitterMono,IconSocialTwitter,IconSocialXMono,IconSocialX,IconSocialYoutubeMono,IconSocialYoutube};import IconTechAblyApiStreamer from"./icon-tech-ably-api-streamer";import IconTechAblyFirehose from"./icon-tech-ably-firehose";import IconTechAblyNative from"./icon-tech-ably-native";import IconTechAbly from"./icon-tech-ably";import IconTechActivemq from"./icon-tech-activemq";import IconTechActivitypub from"./icon-tech-activitypub";import IconTechAerospike from"./icon-tech-aerospike";import IconTechAkka from"./icon-tech-akka";import IconTechAmazonEc2 from"./icon-tech-amazon-ec2";import IconTechAmazonEventBridge from"./icon-tech-amazon-event-bridge";import IconTechAmqp091 from"./icon-tech-amqp091";import IconTechAmqp10 from"./icon-tech-amqp10";import IconTechAndroidFull from"./icon-tech-android-full";import IconTechAndroidHead from"./icon-tech-android-head";import IconTechAngular from"./icon-tech-angular";import IconTechAnycable from"./icon-tech-anycable";import IconTechApacheCassandra from"./icon-tech-apache-cassandra";import IconTechApacheCordova from"./icon-tech-apache-cordova";import IconTechApacheKafka from"./icon-tech-apache-kafka";import IconTechApacheSpark from"./icon-tech-apache-spark";import IconTechApachepulsar from"./icon-tech-apachepulsar";import IconTechApachestorm from"./icon-tech-apachestorm";import IconTechApns from"./icon-tech-apns";import IconTechAssemblyai from"./icon-tech-assemblyai";import IconTechAtmosphere from"./icon-tech-atmosphere";import IconTechAwsAppSync from"./icon-tech-aws-app-sync";import IconTechAwsAurora from"./icon-tech-aws-aurora";import IconTechAwsGatewayWebsockets from"./icon-tech-aws-gateway-websockets";import IconTechAwsSns from"./icon-tech-aws-sns";import IconTechAwsSqs from"./icon-tech-aws-sqs";import IconTechAws from"./icon-tech-aws";import IconTechAwsiot from"./icon-tech-awsiot";import IconTechAwskinesis from"./icon-tech-awskinesis";import IconTechAwslambda from"./icon-tech-awslambda";import IconTechAwssqs from"./icon-tech-awssqs";import IconTechAzureApi from"./icon-tech-azure-api";import IconTechAzureArchiveApi from"./icon-tech-azure-archive-api";import IconTechAzureBus from"./icon-tech-azure-bus";import IconTechAzureCosmos from"./icon-tech-azure-cosmos";import IconTechAzureEventHub from"./icon-tech-azure-event-hub";import IconTechAzureFunctions from"./icon-tech-azure-functions";import IconTechAzureSearch from"./icon-tech-azure-search";import IconTechAzureStaticWebApp from"./icon-tech-azure-static-web-app";import IconTechAzureStaticWebApps from"./icon-tech-azure-static-web-apps";import IconTechAzureStorage from"./icon-tech-azure-storage";import IconTechAzureWebPubsub from"./icon-tech-azure-web-pubsub";import IconTechAzurefunctions from"./icon-tech-azurefunctions";import IconTechAzureservicebus from"./icon-tech-azureservicebus";import IconTechAzuresignalR from"./icon-tech-azuresignalR";import IconTechBayeux from"./icon-tech-bayeux";import IconTechC from"./icon-tech-c";import IconTechCentrifugo from"./icon-tech-centrifugo";import IconTechClaudeMono from"./icon-tech-claude-mono";import IconTechClaude from"./icon-tech-claude";import IconTechClientSideFrameworks from"./icon-tech-client-side-frameworks";import IconTechClojure from"./icon-tech-clojure";import IconTechCloudflareDurableObjects from"./icon-tech-cloudflare-durable-objects";import IconTechCloudflareworkers from"./icon-tech-cloudflareworkers";import IconTechCocoa from"./icon-tech-cocoa";import IconTechConfluent from"./icon-tech-confluent";import IconTechCord from"./icon-tech-cord";import IconTechCsharp from"./icon-tech-csharp";import IconTechCurl from"./icon-tech-curl";import IconTechCustomwebhooks from"./icon-tech-customwebhooks";import IconTechDatadog from"./icon-tech-datadog";import IconTechDesignPatterns from"./icon-tech-design-patterns";import IconTechDevplatforms from"./icon-tech-devplatforms";import IconTechDiffusionData from"./icon-tech-diffusion-data";import IconTechDjango from"./icon-tech-django";import IconTechEngineio from"./icon-tech-engineio";import IconTechEventDrivenServers from"./icon-tech-event-driven-servers";import IconTechFanoutIo from"./icon-tech-fanout-io";import IconTechFastApi from"./icon-tech-fast-api";import IconTechFauna from"./icon-tech-fauna";import IconTechFeatherjs from"./icon-tech-featherjs";import IconTechFirebaseCloudMessaging from"./icon-tech-firebase-cloud-messaging";import IconTechFirebase from"./icon-tech-firebase";import IconTechFlutter from"./icon-tech-flutter";import IconTechGcloudbigquery from"./icon-tech-gcloudbigquery";import IconTechGclouddataflow from"./icon-tech-gclouddataflow";import IconTechGcloudfunctions from"./icon-tech-gcloudfunctions";import IconTechGcloudpubsub from"./icon-tech-gcloudpubsub";import IconTechGo from"./icon-tech-go";import IconTechGrpc from"./icon-tech-grpc";import IconTechHivemq from"./icon-tech-hivemq";import IconTechHttp2 from"./icon-tech-http2";import IconTechHttp3 from"./icon-tech-http3";import IconTechHttprest from"./icon-tech-httprest";import IconTechIdempotency from"./icon-tech-idempotency";import IconTechIfttt from"./icon-tech-ifttt";import IconTechIntegrations from"./icon-tech-integrations";import IconTechIosGeneric from"./icon-tech-ios-generic";import IconTechIos from"./icon-tech-ios";import IconTechIpados from"./icon-tech-ipados";import IconTechIpfs from"./icon-tech-ipfs";import IconTechIronmq from"./icon-tech-ironmq";import IconTechJava from"./icon-tech-java";import IconTechJavascript from"./icon-tech-javascript";import IconTechJms from"./icon-tech-jms";import IconTechJsonWebTokens from"./icon-tech-json-web-tokens";import IconTechJson from"./icon-tech-json";import IconTechKaazing from"./icon-tech-kaazing";import IconTechKotlin from"./icon-tech-kotlin";import IconTechKsqlDb from"./icon-tech-ksql-db";import IconTechKubernetes from"./icon-tech-kubernetes";import IconTechLaravelBroadcast from"./icon-tech-laravel-broadcast";import IconTechLaravelEcho from"./icon-tech-laravel-echo";import IconTechLightstreamer from"./icon-tech-lightstreamer";import IconTechLiveblocks from"./icon-tech-liveblocks";import IconTechLongpolling from"./icon-tech-longpolling";import IconTechMacos from"./icon-tech-macos";import IconTechMatrix from"./icon-tech-matrix";import IconTechMeteor from"./icon-tech-meteor";import IconTechMongoDb from"./icon-tech-mongo-db";import IconTechMono from"./icon-tech-mono";import IconTechMqtt from"./icon-tech-mqtt";import IconTechMysql from"./icon-tech-mysql";import IconTechNativeScript from"./icon-tech-native-script";import IconTechNet from"./icon-tech-net";import IconTechNetlify from"./icon-tech-netlify";import IconTechNextjs from"./icon-tech-nextjs";import IconTechNkn from"./icon-tech-nkn";import IconTechNodejs from"./icon-tech-nodejs";import IconTechObjectivec from"./icon-tech-objectivec";import IconTechOpenai from"./icon-tech-openai";import IconTechParseServer from"./icon-tech-parse-server";import IconTechPhp from"./icon-tech-php";import IconTechPlanetscale from"./icon-tech-planetscale";import IconTechPostgres from"./icon-tech-postgres";import IconTechPrisma from"./icon-tech-prisma";import IconTechProgramminglanguages from"./icon-tech-programminglanguages";import IconTechProtcolAdaptors from"./icon-tech-protcol-adaptors";import IconTechProtocols from"./icon-tech-protocols";import IconTechPubSub from"./icon-tech-pub-sub";import IconTechPubnub from"./icon-tech-pubnub";import IconTechPushTechnology from"./icon-tech-push-technology";import IconTechPusher from"./icon-tech-pusher";import IconTechPython from"./icon-tech-python";import IconTechQuic from"./icon-tech-quic";import IconTechRabbitMQ from"./icon-tech-rabbitMQ";import IconTechRailsactioncable from"./icon-tech-railsactioncable";import IconTechReactApp from"./icon-tech-react-app";import IconTechReact from"./icon-tech-react";import IconTechReactnative from"./icon-tech-reactnative";import IconTechRedis from"./icon-tech-redis";import IconTechRedpanda from"./icon-tech-redpanda";import IconTechReplicache from"./icon-tech-replicache";import IconTechRethinkdb from"./icon-tech-rethinkdb";import IconTechRocketmq from"./icon-tech-rocketmq";import IconTechRuby from"./icon-tech-ruby";import IconTechScala from"./icon-tech-scala";import IconTechScaledrone from"./icon-tech-scaledrone";import IconTechServersentevents from"./icon-tech-serversentevents";import IconTechServersideframeworks from"./icon-tech-serversideframeworks";import IconTechSignalR from"./icon-tech-signalR";import IconTechSnowflake from"./icon-tech-snowflake";import IconTechSocketio from"./icon-tech-socketio";import IconTechSockjs from"./icon-tech-sockjs";import IconTechSolace from"./icon-tech-solace";import IconTechSpring from"./icon-tech-spring";import IconTechStomp from"./icon-tech-stomp";import IconTechStreamdataIo from"./icon-tech-streamdata-io";import IconTechStreamr from"./icon-tech-streamr";import IconTechSwift from"./icon-tech-swift";import IconTechSymfonyMercure from"./icon-tech-symfony-mercure";import IconTechSymfony from"./icon-tech-symfony";import IconTechTcpIp from"./icon-tech-tcp-ip";import IconTechTenefit from"./icon-tech-tenefit";import IconTechTerraform from"./icon-tech-terraform";import IconTechTvos from"./icon-tech-tvos";import IconTechTwilio from"./icon-tech-twilio";import IconTechTypescript from"./icon-tech-typescript";import IconTechUdpProtocol from"./icon-tech-udp-protocol";import IconTechUnity from"./icon-tech-unity";import IconTechVercel from"./icon-tech-vercel";import IconTechVscode from"./icon-tech-vscode";import IconTechVuejs from"./icon-tech-vuejs";import IconTechWamp from"./icon-tech-wamp";import IconTechWatchos from"./icon-tech-watchos";import IconTechWebPush from"./icon-tech-web-push";import IconTechWeb from"./icon-tech-web";import IconTechWebhooks from"./icon-tech-webhooks";import IconTechWebrtc from"./icon-tech-webrtc";import IconTechWebsockets from"./icon-tech-websockets";import IconTechWebsub from"./icon-tech-websub";import IconTechXamarin from"./icon-tech-xamarin";import IconTechXhrStreaming from"./icon-tech-xhr-streaming";import IconTechXmpp from"./icon-tech-xmpp";import IconTechZapier from"./icon-tech-zapier";import IconTechZeromq from"./icon-tech-zeromq";export{IconTechAblyApiStreamer,IconTechAblyFirehose,IconTechAblyNative,IconTechAbly,IconTechActivemq,IconTechActivitypub,IconTechAerospike,IconTechAkka,IconTechAmazonEc2,IconTechAmazonEventBridge,IconTechAmqp091,IconTechAmqp10,IconTechAndroidFull,IconTechAndroidHead,IconTechAngular,IconTechAnycable,IconTechApacheCassandra,IconTechApacheCordova,IconTechApacheKafka,IconTechApacheSpark,IconTechApachepulsar,IconTechApachestorm,IconTechApns,IconTechAssemblyai,IconTechAtmosphere,IconTechAwsAppSync,IconTechAwsAurora,IconTechAwsGatewayWebsockets,IconTechAwsSns,IconTechAwsSqs,IconTechAws,IconTechAwsiot,IconTechAwskinesis,IconTechAwslambda,IconTechAwssqs,IconTechAzureApi,IconTechAzureArchiveApi,IconTechAzureBus,IconTechAzureCosmos,IconTechAzureEventHub,IconTechAzureFunctions,IconTechAzureSearch,IconTechAzureStaticWebApp,IconTechAzureStaticWebApps,IconTechAzureStorage,IconTechAzureWebPubsub,IconTechAzurefunctions,IconTechAzureservicebus,IconTechAzuresignalR,IconTechBayeux,IconTechC,IconTechCentrifugo,IconTechClaudeMono,IconTechClaude,IconTechClientSideFrameworks,IconTechClojure,IconTechCloudflareDurableObjects,IconTechCloudflareworkers,IconTechCocoa,IconTechConfluent,IconTechCord,IconTechCsharp,IconTechCurl,IconTechCustomwebhooks,IconTechDatadog,IconTechDesignPatterns,IconTechDevplatforms,IconTechDiffusionData,IconTechDjango,IconTechEngineio,IconTechEventDrivenServers,IconTechFanoutIo,IconTechFastApi,IconTechFauna,IconTechFeatherjs,IconTechFirebaseCloudMessaging,IconTechFirebase,IconTechFlutter,IconTechGcloudbigquery,IconTechGclouddataflow,IconTechGcloudfunctions,IconTechGcloudpubsub,IconTechGo,IconTechGrpc,IconTechHivemq,IconTechHttp2,IconTechHttp3,IconTechHttprest,IconTechIdempotency,IconTechIfttt,IconTechIntegrations,IconTechIosGeneric,IconTechIos,IconTechIpados,IconTechIpfs,IconTechIronmq,IconTechJava,IconTechJavascript,IconTechJms,IconTechJsonWebTokens,IconTechJson,IconTechKaazing,IconTechKotlin,IconTechKsqlDb,IconTechKubernetes,IconTechLaravelBroadcast,IconTechLaravelEcho,IconTechLightstreamer,IconTechLiveblocks,IconTechLongpolling,IconTechMacos,IconTechMatrix,IconTechMeteor,IconTechMongoDb,IconTechMono,IconTechMqtt,IconTechMysql,IconTechNativeScript,IconTechNet,IconTechNetlify,IconTechNextjs,IconTechNkn,IconTechNodejs,IconTechObjectivec,IconTechOpenai,IconTechParseServer,IconTechPhp,IconTechPlanetscale,IconTechPostgres,IconTechPrisma,IconTechProgramminglanguages,IconTechProtcolAdaptors,IconTechProtocols,IconTechPubSub,IconTechPubnub,IconTechPushTechnology,IconTechPusher,IconTechPython,IconTechQuic,IconTechRabbitMQ,IconTechRailsactioncable,IconTechReactApp,IconTechReact,IconTechReactnative,IconTechRedis,IconTechRedpanda,IconTechReplicache,IconTechRethinkdb,IconTechRocketmq,IconTechRuby,IconTechScala,IconTechScaledrone,IconTechServersentevents,IconTechServersideframeworks,IconTechSignalR,IconTechSnowflake,IconTechSocketio,IconTechSockjs,IconTechSolace,IconTechSpring,IconTechStomp,IconTechStreamdataIo,IconTechStreamr,IconTechSwift,IconTechSymfonyMercure,IconTechSymfony,IconTechTcpIp,IconTechTenefit,IconTechTerraform,IconTechTvos,IconTechTwilio,IconTechTypescript,IconTechUdpProtocol,IconTechUnity,IconTechVercel,IconTechVscode,IconTechVuejs,IconTechWamp,IconTechWatchos,IconTechWebPush,IconTechWeb,IconTechWebhooks,IconTechWebrtc,IconTechWebsockets,IconTechWebsub,IconTechXamarin,IconTechXhrStreaming,IconTechXmpp,IconTechZapier,IconTechZeromq};
1
+ import IconDisplay48hrs from"./icon-display-48hrs";import IconDisplayAblyChannels from"./icon-display-ably-channels";import IconDisplayAboutAblyCol from"./icon-display-about-ably-col";import IconDisplayApiKeys from"./icon-display-api-keys";import IconDisplayApi from"./icon-display-api";import IconDisplayArchitecturalGuidance from"./icon-display-architectural-guidance";import IconDisplayAssetTrackingCol from"./icon-display-asset-tracking-col";import IconDisplayAuthentication from"./icon-display-authentication";import IconDisplayAvatarStack from"./icon-display-avatar-stack";import IconDisplayBrowser from"./icon-display-browser";import IconDisplayCalendar from"./icon-display-calendar";import IconDisplayCallMobile from"./icon-display-call-mobile";import IconDisplayCareersCol from"./icon-display-careers-col";import IconDisplayCaseStudiesCol from"./icon-display-case-studies-col";import IconDisplayChatCol from"./icon-display-chat-col";import IconDisplayChatMono from"./icon-display-chat-mono";import IconDisplayChatStackCol from"./icon-display-chat-stack-col";import IconDisplayChatStack from"./icon-display-chat-stack";import IconDisplayCloudServers from"./icon-display-cloud-servers";import IconDisplayCompareTechCol from"./icon-display-compare-tech-col";import IconDisplayConnectionStateRecovery from"./icon-display-connection-state-recovery";import IconDisplayConsumerGroups from"./icon-display-consumer-groups";import IconDisplayCustomCname from"./icon-display-custom-cname";import IconDisplayCustom from"./icon-display-custom";import IconDisplayCustomersCol from"./icon-display-customers-col";import IconDisplayDataBroadcastCol from"./icon-display-data-broadcast-col";import IconDisplayDataBroadcastMono from"./icon-display-data-broadcast-mono";import IconDisplayDataSynchronizationCol from"./icon-display-data-synchronization-col";import IconDisplayDedicatedCluster from"./icon-display-dedicated-cluster";import IconDisplayDeltas from"./icon-display-deltas";import IconDisplayDocsCol from"./icon-display-docs-col";import IconDisplayDocumentation from"./icon-display-documentation";import IconDisplayDynamicChannelGroups from"./icon-display-dynamic-channel-groups";import IconDisplayEdgeNetwork from"./icon-display-edge-network";import IconDisplayElasticity from"./icon-display-elasticity";import IconDisplayEqualisersMono from"./icon-display-equalisers-mono";import IconDisplayEventsCol from"./icon-display-events-col";import IconDisplayExactlyOnceDelivery from"./icon-display-exactly-once-delivery";import IconDisplayExamplesCol from"./icon-display-examples-col";import IconDisplayFanOut from"./icon-display-fan-out";import IconDisplayFirehose from"./icon-display-firehose";import IconDisplayGdpr from"./icon-display-gdpr";import IconDisplayGeneralComms from"./icon-display-general-comms";import IconDisplayGranularPermissions from"./icon-display-granular-permissions";import IconDisplayHipaaMono from"./icon-display-hipaa-mono";import IconDisplayHipaa from"./icon-display-hipaa";import IconDisplayHistory from"./icon-display-history";import IconDisplayIntegrationsCol from"./icon-display-integrations-col";import IconDisplayIntegrations from"./icon-display-integrations";import IconDisplayItSupportAccess from"./icon-display-it-support-access";import IconDisplayItSupportHelpdesk from"./icon-display-it-support-helpdesk";import IconDisplayKafkaAtTheEdgeCol from"./icon-display-kafka-at-the-edge-col";import IconDisplayLaptop from"./icon-display-laptop";import IconDisplayLastSeen from"./icon-display-last-seen";import IconDisplayLightbulbCol from"./icon-display-lightbulb-col";import IconDisplayLiveChat from"./icon-display-live-chat";import IconDisplayLiveUpdatesResultsMetricsCol from"./icon-display-live-updates-results-metrics-col";import IconDisplayMapPin from"./icon-display-map-pin";import IconDisplayMessageBatching from"./icon-display-message-batching";import IconDisplayMessagePersistence from"./icon-display-message-persistence";import IconDisplayMessageQueues from"./icon-display-message-queues";import IconDisplayMessage from"./icon-display-message";import IconDisplayMultiUserSpacesCol from"./icon-display-multi-user-spaces-col";import IconDisplayObserveAnalytics from"./icon-display-observe-analytics";import IconDisplayPadlockClosed from"./icon-display-padlock-closed";import IconDisplayPlatform from"./icon-display-platform";import IconDisplayPlay from"./icon-display-play";import IconDisplayPremiumSupport from"./icon-display-premium-support";import IconDisplayPrivacyShieldFramework from"./icon-display-privacy-shield-framework";import IconDisplayPrivateLink from"./icon-display-private-link";import IconDisplayPushNotificationsCol from"./icon-display-push-notifications-col";import IconDisplayPushNotificationsMono from"./icon-display-push-notifications-mono";import IconDisplayPushNotifications from"./icon-display-push-notifications";import IconDisplayQuickstartGuidesCol from"./icon-display-quickstart-guides-col";import IconDisplayReactions from"./icon-display-reactions";import IconDisplayReadReceipts from"./icon-display-read-receipts";import IconDisplayResourcesCol from"./icon-display-resources-col";import IconDisplayRewind from"./icon-display-rewind";import IconDisplaySdksCol from"./icon-display-sdks-col";import IconDisplaySendReceivedMessages from"./icon-display-send-received-messages";import IconDisplayServers from"./icon-display-servers";import IconDisplayShoppingCart from"./icon-display-shopping-cart";import IconDisplaySla from"./icon-display-sla";import IconDisplaySoc2Type2Mono from"./icon-display-soc2-type2-mono";import IconDisplaySoc2Type2 from"./icon-display-soc2-type2";import IconDisplaySomethingElseMono from"./icon-display-something-else-mono";import IconDisplaySomethingElse from"./icon-display-something-else";import IconDisplaySubscriptionFilters from"./icon-display-subscription-filters";import IconDisplaySupportChatMono from"./icon-display-support-chat-mono";import IconDisplaySystemMetadata from"./icon-display-system-metadata";import IconDisplayTechAccountComms from"./icon-display-tech-account-comms";import IconDisplayTutorialsDemosCol from"./icon-display-tutorials-demos-col";import IconDisplayUiMono from"./icon-display-ui-mono";import IconDisplayUi from"./icon-display-ui";import IconDisplayVirtualEventsCol from"./icon-display-virtual-events-col";import IconDisplayVirtualEvents from"./icon-display-virtual-events";export{IconDisplay48hrs,IconDisplayAblyChannels,IconDisplayAboutAblyCol,IconDisplayApiKeys,IconDisplayApi,IconDisplayArchitecturalGuidance,IconDisplayAssetTrackingCol,IconDisplayAuthentication,IconDisplayAvatarStack,IconDisplayBrowser,IconDisplayCalendar,IconDisplayCallMobile,IconDisplayCareersCol,IconDisplayCaseStudiesCol,IconDisplayChatCol,IconDisplayChatMono,IconDisplayChatStackCol,IconDisplayChatStack,IconDisplayCloudServers,IconDisplayCompareTechCol,IconDisplayConnectionStateRecovery,IconDisplayConsumerGroups,IconDisplayCustomCname,IconDisplayCustom,IconDisplayCustomersCol,IconDisplayDataBroadcastCol,IconDisplayDataBroadcastMono,IconDisplayDataSynchronizationCol,IconDisplayDedicatedCluster,IconDisplayDeltas,IconDisplayDocsCol,IconDisplayDocumentation,IconDisplayDynamicChannelGroups,IconDisplayEdgeNetwork,IconDisplayElasticity,IconDisplayEqualisersMono,IconDisplayEventsCol,IconDisplayExactlyOnceDelivery,IconDisplayExamplesCol,IconDisplayFanOut,IconDisplayFirehose,IconDisplayGdpr,IconDisplayGeneralComms,IconDisplayGranularPermissions,IconDisplayHipaaMono,IconDisplayHipaa,IconDisplayHistory,IconDisplayIntegrationsCol,IconDisplayIntegrations,IconDisplayItSupportAccess,IconDisplayItSupportHelpdesk,IconDisplayKafkaAtTheEdgeCol,IconDisplayLaptop,IconDisplayLastSeen,IconDisplayLightbulbCol,IconDisplayLiveChat,IconDisplayLiveUpdatesResultsMetricsCol,IconDisplayMapPin,IconDisplayMessageBatching,IconDisplayMessagePersistence,IconDisplayMessageQueues,IconDisplayMessage,IconDisplayMultiUserSpacesCol,IconDisplayObserveAnalytics,IconDisplayPadlockClosed,IconDisplayPlatform,IconDisplayPlay,IconDisplayPremiumSupport,IconDisplayPrivacyShieldFramework,IconDisplayPrivateLink,IconDisplayPushNotificationsCol,IconDisplayPushNotificationsMono,IconDisplayPushNotifications,IconDisplayQuickstartGuidesCol,IconDisplayReactions,IconDisplayReadReceipts,IconDisplayResourcesCol,IconDisplayRewind,IconDisplaySdksCol,IconDisplaySendReceivedMessages,IconDisplayServers,IconDisplayShoppingCart,IconDisplaySla,IconDisplaySoc2Type2Mono,IconDisplaySoc2Type2,IconDisplaySomethingElseMono,IconDisplaySomethingElse,IconDisplaySubscriptionFilters,IconDisplaySupportChatMono,IconDisplaySystemMetadata,IconDisplayTechAccountComms,IconDisplayTutorialsDemosCol,IconDisplayUiMono,IconDisplayUi,IconDisplayVirtualEventsCol,IconDisplayVirtualEvents};import IconGuiAblyBadge from"./icon-gui-ably-badge";import IconGuiCheckCircledFill from"./icon-gui-check-circled-fill";import IconGuiCheckLotusCircled from"./icon-gui-check-lotus-circled";import IconGuiChecklistChecked from"./icon-gui-checklist-checked";import IconGuiCodeDoc from"./icon-gui-code-doc";import IconGuiCursor from"./icon-gui-cursor";import IconGuiExpand from"./icon-gui-expand";import IconGuiFilterFlowStep0 from"./icon-gui-filter-flow-step-0";import IconGuiFilterFlowStep1 from"./icon-gui-filter-flow-step-1";import IconGuiFilterFlowStep2 from"./icon-gui-filter-flow-step-2";import IconGuiFilterFlowStep3 from"./icon-gui-filter-flow-step-3";import IconGuiFlowerGrowth from"./icon-gui-flower-growth";import IconGuiFurtherReading from"./icon-gui-further-reading";import IconGuiGlasses from"./icon-gui-glasses";import IconGuiHistory from"./icon-gui-history";import IconGuiLiveChat from"./icon-gui-live-chat";import IconGuiMouse from"./icon-gui-mouse";import IconGuiPartial from"./icon-gui-partial";import IconGuiPitfall from"./icon-gui-pitfall";import IconGuiProdAssetTrackingOutline from"./icon-gui-prod-asset-tracking-outline";import IconGuiProdAssetTrackingSolid from"./icon-gui-prod-asset-tracking-solid";import IconGuiProdChatOutline from"./icon-gui-prod-chat-outline";import IconGuiProdChatSolid from"./icon-gui-prod-chat-solid";import IconGuiProdLiveobjectsOutline from"./icon-gui-prod-liveobjects-outline";import IconGuiProdLiveobjectsSolid from"./icon-gui-prod-liveobjects-solid";import IconGuiProdLivesyncOutline from"./icon-gui-prod-livesync-outline";import IconGuiProdLivesyncSolid from"./icon-gui-prod-livesync-solid";import IconGuiProdPubsubOutline from"./icon-gui-prod-pubsub-outline";import IconGuiProdPubsubSolid from"./icon-gui-prod-pubsub-solid";import IconGuiProdSpacesOutline from"./icon-gui-prod-spaces-outline";import IconGuiProdSpacesSolid from"./icon-gui-prod-spaces-solid";import IconGuiQuoteMarksFill from"./icon-gui-quote-marks-fill";import IconGuiRefresh from"./icon-gui-refresh";import IconGuiResources from"./icon-gui-resources";import IconGuiSpinnerDark from"./icon-gui-spinner-dark";import IconGuiSpinnerLight from"./icon-gui-spinner-light";export{IconGuiAblyBadge,IconGuiCheckCircledFill,IconGuiCheckLotusCircled,IconGuiChecklistChecked,IconGuiCodeDoc,IconGuiCursor,IconGuiExpand,IconGuiFilterFlowStep0,IconGuiFilterFlowStep1,IconGuiFilterFlowStep2,IconGuiFilterFlowStep3,IconGuiFlowerGrowth,IconGuiFurtherReading,IconGuiGlasses,IconGuiHistory,IconGuiLiveChat,IconGuiMouse,IconGuiPartial,IconGuiPitfall,IconGuiProdAssetTrackingOutline,IconGuiProdAssetTrackingSolid,IconGuiProdChatOutline,IconGuiProdChatSolid,IconGuiProdLiveobjectsOutline,IconGuiProdLiveobjectsSolid,IconGuiProdLivesyncOutline,IconGuiProdLivesyncSolid,IconGuiProdPubsubOutline,IconGuiProdPubsubSolid,IconGuiProdSpacesOutline,IconGuiProdSpacesSolid,IconGuiQuoteMarksFill,IconGuiRefresh,IconGuiResources,IconGuiSpinnerDark,IconGuiSpinnerLight};import IconProductAssetTrackingMono from"./icon-product-asset-tracking-mono";import IconProductAssetTracking from"./icon-product-asset-tracking";import IconProductChatMono from"./icon-product-chat-mono";import IconProductChat from"./icon-product-chat";import IconProductLiveobjectsDark from"./icon-product-liveobjects-dark";import IconProductLiveobjectsMono from"./icon-product-liveobjects-mono";import IconProductLiveobjects from"./icon-product-liveobjects";import IconProductLivesyncMono from"./icon-product-livesync-mono";import IconProductLivesync from"./icon-product-livesync";import IconProductPlatformMono from"./icon-product-platform-mono";import IconProductPlatform from"./icon-product-platform";import IconProductPubsubMono from"./icon-product-pubsub-mono";import IconProductPubsub from"./icon-product-pubsub";import IconProductSpacesMono from"./icon-product-spaces-mono";import IconProductSpaces from"./icon-product-spaces";export{IconProductAssetTrackingMono,IconProductAssetTracking,IconProductChatMono,IconProductChat,IconProductLiveobjectsDark,IconProductLiveobjectsMono,IconProductLiveobjects,IconProductLivesyncMono,IconProductLivesync,IconProductPlatformMono,IconProductPlatform,IconProductPubsubMono,IconProductPubsub,IconProductSpacesMono,IconProductSpaces};import IconSocialDiscordMono from"./icon-social-discord-mono";import IconSocialDiscord from"./icon-social-discord";import IconSocialFacebookMono from"./icon-social-facebook-mono";import IconSocialFacebook from"./icon-social-facebook";import IconSocialGithubMono from"./icon-social-github-mono";import IconSocialGithub from"./icon-social-github";import IconSocialGlassdoorMono from"./icon-social-glassdoor-mono";import IconSocialGlassdoor from"./icon-social-glassdoor";import IconSocialGoogleMono from"./icon-social-google-mono";import IconSocialGoogle from"./icon-social-google";import IconSocialLinkedinMono from"./icon-social-linkedin-mono";import IconSocialLinkedin from"./icon-social-linkedin";import IconSocialSlackMono from"./icon-social-slack-mono";import IconSocialSlack from"./icon-social-slack";import IconSocialStackoverflowMono from"./icon-social-stackoverflow-mono";import IconSocialStackoverflow from"./icon-social-stackoverflow";import IconSocialTwitterMono from"./icon-social-twitter-mono";import IconSocialTwitter from"./icon-social-twitter";import IconSocialXMono from"./icon-social-x-mono";import IconSocialX from"./icon-social-x";import IconSocialYoutubeMono from"./icon-social-youtube-mono";import IconSocialYoutube from"./icon-social-youtube";export{IconSocialDiscordMono,IconSocialDiscord,IconSocialFacebookMono,IconSocialFacebook,IconSocialGithubMono,IconSocialGithub,IconSocialGlassdoorMono,IconSocialGlassdoor,IconSocialGoogleMono,IconSocialGoogle,IconSocialLinkedinMono,IconSocialLinkedin,IconSocialSlackMono,IconSocialSlack,IconSocialStackoverflowMono,IconSocialStackoverflow,IconSocialTwitterMono,IconSocialTwitter,IconSocialXMono,IconSocialX,IconSocialYoutubeMono,IconSocialYoutube};import IconTechAblyApiStreamer from"./icon-tech-ably-api-streamer";import IconTechAblyFirehose from"./icon-tech-ably-firehose";import IconTechAblyNative from"./icon-tech-ably-native";import IconTechAbly from"./icon-tech-ably";import IconTechActivemq from"./icon-tech-activemq";import IconTechActivitypub from"./icon-tech-activitypub";import IconTechAerospike from"./icon-tech-aerospike";import IconTechAkka from"./icon-tech-akka";import IconTechAmazonEc2 from"./icon-tech-amazon-ec2";import IconTechAmazonEventBridge from"./icon-tech-amazon-event-bridge";import IconTechAmqp091 from"./icon-tech-amqp091";import IconTechAmqp10 from"./icon-tech-amqp10";import IconTechAndroidFull from"./icon-tech-android-full";import IconTechAndroidHead from"./icon-tech-android-head";import IconTechAngular from"./icon-tech-angular";import IconTechAnycable from"./icon-tech-anycable";import IconTechApacheCassandra from"./icon-tech-apache-cassandra";import IconTechApacheCordova from"./icon-tech-apache-cordova";import IconTechApacheKafka from"./icon-tech-apache-kafka";import IconTechApacheSpark from"./icon-tech-apache-spark";import IconTechApachepulsar from"./icon-tech-apachepulsar";import IconTechApachestorm from"./icon-tech-apachestorm";import IconTechApns from"./icon-tech-apns";import IconTechAssemblyai from"./icon-tech-assemblyai";import IconTechAtmosphere from"./icon-tech-atmosphere";import IconTechAwsAppSync from"./icon-tech-aws-app-sync";import IconTechAwsAurora from"./icon-tech-aws-aurora";import IconTechAwsGatewayWebsockets from"./icon-tech-aws-gateway-websockets";import IconTechAwsSns from"./icon-tech-aws-sns";import IconTechAwsSqs from"./icon-tech-aws-sqs";import IconTechAws from"./icon-tech-aws";import IconTechAwsiot from"./icon-tech-awsiot";import IconTechAwskinesis from"./icon-tech-awskinesis";import IconTechAwslambda from"./icon-tech-awslambda";import IconTechAwssqs from"./icon-tech-awssqs";import IconTechAzureApi from"./icon-tech-azure-api";import IconTechAzureArchiveApi from"./icon-tech-azure-archive-api";import IconTechAzureBus from"./icon-tech-azure-bus";import IconTechAzureCosmos from"./icon-tech-azure-cosmos";import IconTechAzureEventHub from"./icon-tech-azure-event-hub";import IconTechAzureFunctions from"./icon-tech-azure-functions";import IconTechAzureSearch from"./icon-tech-azure-search";import IconTechAzureStaticWebApp from"./icon-tech-azure-static-web-app";import IconTechAzureStaticWebApps from"./icon-tech-azure-static-web-apps";import IconTechAzureStorage from"./icon-tech-azure-storage";import IconTechAzureWebPubsub from"./icon-tech-azure-web-pubsub";import IconTechAzurefunctions from"./icon-tech-azurefunctions";import IconTechAzureservicebus from"./icon-tech-azureservicebus";import IconTechAzuresignalR from"./icon-tech-azuresignalR";import IconTechBayeux from"./icon-tech-bayeux";import IconTechC from"./icon-tech-c";import IconTechCentrifugo from"./icon-tech-centrifugo";import IconTechClaudeMono from"./icon-tech-claude-mono";import IconTechClaude from"./icon-tech-claude";import IconTechClientSideFrameworks from"./icon-tech-client-side-frameworks";import IconTechClojure from"./icon-tech-clojure";import IconTechCloudflareDurableObjects from"./icon-tech-cloudflare-durable-objects";import IconTechCloudflareworkers from"./icon-tech-cloudflareworkers";import IconTechCocoa from"./icon-tech-cocoa";import IconTechConfluent from"./icon-tech-confluent";import IconTechCord from"./icon-tech-cord";import IconTechCsharp from"./icon-tech-csharp";import IconTechCurl from"./icon-tech-curl";import IconTechCustomwebhooks from"./icon-tech-customwebhooks";import IconTechDatadog from"./icon-tech-datadog";import IconTechDesignPatterns from"./icon-tech-design-patterns";import IconTechDevplatforms from"./icon-tech-devplatforms";import IconTechDiffusionData from"./icon-tech-diffusion-data";import IconTechDjango from"./icon-tech-django";import IconTechEngineio from"./icon-tech-engineio";import IconTechEventDrivenServers from"./icon-tech-event-driven-servers";import IconTechFanoutIo from"./icon-tech-fanout-io";import IconTechFastApi from"./icon-tech-fast-api";import IconTechFauna from"./icon-tech-fauna";import IconTechFeatherjs from"./icon-tech-featherjs";import IconTechFirebaseCloudMessaging from"./icon-tech-firebase-cloud-messaging";import IconTechFirebase from"./icon-tech-firebase";import IconTechFlutter from"./icon-tech-flutter";import IconTechGcloudbigquery from"./icon-tech-gcloudbigquery";import IconTechGclouddataflow from"./icon-tech-gclouddataflow";import IconTechGcloudfunctions from"./icon-tech-gcloudfunctions";import IconTechGcloudpubsub from"./icon-tech-gcloudpubsub";import IconTechGo from"./icon-tech-go";import IconTechGrpc from"./icon-tech-grpc";import IconTechHivemq from"./icon-tech-hivemq";import IconTechHttp2 from"./icon-tech-http2";import IconTechHttp3 from"./icon-tech-http3";import IconTechHttprest from"./icon-tech-httprest";import IconTechIdempotency from"./icon-tech-idempotency";import IconTechIfttt from"./icon-tech-ifttt";import IconTechIntegrations from"./icon-tech-integrations";import IconTechIosGeneric from"./icon-tech-ios-generic";import IconTechIos from"./icon-tech-ios";import IconTechIpados from"./icon-tech-ipados";import IconTechIpfs from"./icon-tech-ipfs";import IconTechIronmq from"./icon-tech-ironmq";import IconTechJava from"./icon-tech-java";import IconTechJavascript from"./icon-tech-javascript";import IconTechJms from"./icon-tech-jms";import IconTechJsonWebTokens from"./icon-tech-json-web-tokens";import IconTechJson from"./icon-tech-json";import IconTechKaazing from"./icon-tech-kaazing";import IconTechKotlin from"./icon-tech-kotlin";import IconTechKsqlDb from"./icon-tech-ksql-db";import IconTechKubernetes from"./icon-tech-kubernetes";import IconTechLaravelBroadcast from"./icon-tech-laravel-broadcast";import IconTechLaravelEcho from"./icon-tech-laravel-echo";import IconTechLightstreamer from"./icon-tech-lightstreamer";import IconTechLiveblocks from"./icon-tech-liveblocks";import IconTechLongpolling from"./icon-tech-longpolling";import IconTechMacos from"./icon-tech-macos";import IconTechMatrix from"./icon-tech-matrix";import IconTechMeteor from"./icon-tech-meteor";import IconTechMongoDb from"./icon-tech-mongo-db";import IconTechMono from"./icon-tech-mono";import IconTechMqtt from"./icon-tech-mqtt";import IconTechMysql from"./icon-tech-mysql";import IconTechNativeScript from"./icon-tech-native-script";import IconTechNet from"./icon-tech-net";import IconTechNetlify from"./icon-tech-netlify";import IconTechNextjs from"./icon-tech-nextjs";import IconTechNkn from"./icon-tech-nkn";import IconTechNodejs from"./icon-tech-nodejs";import IconTechObjectivec from"./icon-tech-objectivec";import IconTechOpenai from"./icon-tech-openai";import IconTechParseServer from"./icon-tech-parse-server";import IconTechPhp from"./icon-tech-php";import IconTechPlanetscale from"./icon-tech-planetscale";import IconTechPostgres from"./icon-tech-postgres";import IconTechPrisma from"./icon-tech-prisma";import IconTechProgramminglanguages from"./icon-tech-programminglanguages";import IconTechProtcolAdaptors from"./icon-tech-protcol-adaptors";import IconTechProtocols from"./icon-tech-protocols";import IconTechPubSub from"./icon-tech-pub-sub";import IconTechPubnub from"./icon-tech-pubnub";import IconTechPushTechnology from"./icon-tech-push-technology";import IconTechPusher from"./icon-tech-pusher";import IconTechPython from"./icon-tech-python";import IconTechQuic from"./icon-tech-quic";import IconTechRabbitMQ from"./icon-tech-rabbitMQ";import IconTechRailsactioncable from"./icon-tech-railsactioncable";import IconTechReactApp from"./icon-tech-react-app";import IconTechReact from"./icon-tech-react";import IconTechReactnative from"./icon-tech-reactnative";import IconTechRedis from"./icon-tech-redis";import IconTechRedpanda from"./icon-tech-redpanda";import IconTechReplicache from"./icon-tech-replicache";import IconTechRethinkdb from"./icon-tech-rethinkdb";import IconTechRocketmq from"./icon-tech-rocketmq";import IconTechRuby from"./icon-tech-ruby";import IconTechScala from"./icon-tech-scala";import IconTechScaledrone from"./icon-tech-scaledrone";import IconTechServersentevents from"./icon-tech-serversentevents";import IconTechServersideframeworks from"./icon-tech-serversideframeworks";import IconTechSignalR from"./icon-tech-signalR";import IconTechSnowflake from"./icon-tech-snowflake";import IconTechSocketio from"./icon-tech-socketio";import IconTechSockjs from"./icon-tech-sockjs";import IconTechSolace from"./icon-tech-solace";import IconTechSpring from"./icon-tech-spring";import IconTechStomp from"./icon-tech-stomp";import IconTechStreamdataIo from"./icon-tech-streamdata-io";import IconTechStreamr from"./icon-tech-streamr";import IconTechSwift from"./icon-tech-swift";import IconTechSymfonyMercure from"./icon-tech-symfony-mercure";import IconTechSymfony from"./icon-tech-symfony";import IconTechTcpIp from"./icon-tech-tcp-ip";import IconTechTenefit from"./icon-tech-tenefit";import IconTechTerraform from"./icon-tech-terraform";import IconTechTvos from"./icon-tech-tvos";import IconTechTwilio from"./icon-tech-twilio";import IconTechTypescript from"./icon-tech-typescript";import IconTechUdpProtocol from"./icon-tech-udp-protocol";import IconTechUnity from"./icon-tech-unity";import IconTechVercel from"./icon-tech-vercel";import IconTechVscode from"./icon-tech-vscode";import IconTechVuejs from"./icon-tech-vuejs";import IconTechWamp from"./icon-tech-wamp";import IconTechWatchos from"./icon-tech-watchos";import IconTechWebPush from"./icon-tech-web-push";import IconTechWeb from"./icon-tech-web";import IconTechWebhooks from"./icon-tech-webhooks";import IconTechWebrtc from"./icon-tech-webrtc";import IconTechWebsockets from"./icon-tech-websockets";import IconTechWebsub from"./icon-tech-websub";import IconTechXamarin from"./icon-tech-xamarin";import IconTechXhrStreaming from"./icon-tech-xhr-streaming";import IconTechXmpp from"./icon-tech-xmpp";import IconTechZapier from"./icon-tech-zapier";import IconTechZeromq from"./icon-tech-zeromq";export{IconTechAblyApiStreamer,IconTechAblyFirehose,IconTechAblyNative,IconTechAbly,IconTechActivemq,IconTechActivitypub,IconTechAerospike,IconTechAkka,IconTechAmazonEc2,IconTechAmazonEventBridge,IconTechAmqp091,IconTechAmqp10,IconTechAndroidFull,IconTechAndroidHead,IconTechAngular,IconTechAnycable,IconTechApacheCassandra,IconTechApacheCordova,IconTechApacheKafka,IconTechApacheSpark,IconTechApachepulsar,IconTechApachestorm,IconTechApns,IconTechAssemblyai,IconTechAtmosphere,IconTechAwsAppSync,IconTechAwsAurora,IconTechAwsGatewayWebsockets,IconTechAwsSns,IconTechAwsSqs,IconTechAws,IconTechAwsiot,IconTechAwskinesis,IconTechAwslambda,IconTechAwssqs,IconTechAzureApi,IconTechAzureArchiveApi,IconTechAzureBus,IconTechAzureCosmos,IconTechAzureEventHub,IconTechAzureFunctions,IconTechAzureSearch,IconTechAzureStaticWebApp,IconTechAzureStaticWebApps,IconTechAzureStorage,IconTechAzureWebPubsub,IconTechAzurefunctions,IconTechAzureservicebus,IconTechAzuresignalR,IconTechBayeux,IconTechC,IconTechCentrifugo,IconTechClaudeMono,IconTechClaude,IconTechClientSideFrameworks,IconTechClojure,IconTechCloudflareDurableObjects,IconTechCloudflareworkers,IconTechCocoa,IconTechConfluent,IconTechCord,IconTechCsharp,IconTechCurl,IconTechCustomwebhooks,IconTechDatadog,IconTechDesignPatterns,IconTechDevplatforms,IconTechDiffusionData,IconTechDjango,IconTechEngineio,IconTechEventDrivenServers,IconTechFanoutIo,IconTechFastApi,IconTechFauna,IconTechFeatherjs,IconTechFirebaseCloudMessaging,IconTechFirebase,IconTechFlutter,IconTechGcloudbigquery,IconTechGclouddataflow,IconTechGcloudfunctions,IconTechGcloudpubsub,IconTechGo,IconTechGrpc,IconTechHivemq,IconTechHttp2,IconTechHttp3,IconTechHttprest,IconTechIdempotency,IconTechIfttt,IconTechIntegrations,IconTechIosGeneric,IconTechIos,IconTechIpados,IconTechIpfs,IconTechIronmq,IconTechJava,IconTechJavascript,IconTechJms,IconTechJsonWebTokens,IconTechJson,IconTechKaazing,IconTechKotlin,IconTechKsqlDb,IconTechKubernetes,IconTechLaravelBroadcast,IconTechLaravelEcho,IconTechLightstreamer,IconTechLiveblocks,IconTechLongpolling,IconTechMacos,IconTechMatrix,IconTechMeteor,IconTechMongoDb,IconTechMono,IconTechMqtt,IconTechMysql,IconTechNativeScript,IconTechNet,IconTechNetlify,IconTechNextjs,IconTechNkn,IconTechNodejs,IconTechObjectivec,IconTechOpenai,IconTechParseServer,IconTechPhp,IconTechPlanetscale,IconTechPostgres,IconTechPrisma,IconTechProgramminglanguages,IconTechProtcolAdaptors,IconTechProtocols,IconTechPubSub,IconTechPubnub,IconTechPushTechnology,IconTechPusher,IconTechPython,IconTechQuic,IconTechRabbitMQ,IconTechRailsactioncable,IconTechReactApp,IconTechReact,IconTechReactnative,IconTechRedis,IconTechRedpanda,IconTechReplicache,IconTechRethinkdb,IconTechRocketmq,IconTechRuby,IconTechScala,IconTechScaledrone,IconTechServersentevents,IconTechServersideframeworks,IconTechSignalR,IconTechSnowflake,IconTechSocketio,IconTechSockjs,IconTechSolace,IconTechSpring,IconTechStomp,IconTechStreamdataIo,IconTechStreamr,IconTechSwift,IconTechSymfonyMercure,IconTechSymfony,IconTechTcpIp,IconTechTenefit,IconTechTerraform,IconTechTvos,IconTechTwilio,IconTechTypescript,IconTechUdpProtocol,IconTechUnity,IconTechVercel,IconTechVscode,IconTechVuejs,IconTechWamp,IconTechWatchos,IconTechWebPush,IconTechWeb,IconTechWebhooks,IconTechWebrtc,IconTechWebsockets,IconTechWebsub,IconTechXamarin,IconTechXhrStreaming,IconTechXmpp,IconTechZapier,IconTechZeromq};
2
2
  //# sourceMappingURL=index.js.map