@ably/ui 14.3.4 → 14.4.0-dev.1b6b1db

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.
package/core/.DS_Store ADDED
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/core/Flash.js CHANGED
@@ -1 +1 @@
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(()=>{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","rel"]});const withIcons={notice:"icon-gui-ably-badge",success:"icon-gui-tick",error:"icon-gui-warning",alert:"icon-gui-warning"};const iconColor={notice:"text-cool-black",success:"text-cool-black",error:"text-white",alert:"text-white"};return /*#__PURE__*/React.createElement("div",{className:`ui-flash-message ui-grid-px ${animateEntry?"ui-flash-message-enter":""}`,style:style,ref:ref,"data-id":"ui-flash"},/*#__PURE__*/React.createElement("div",{className:`${FLASH_BG_COLOR[type]} p-32 flex align-center rounded shadow-container-subtle`},withIcons[type]&&/*#__PURE__*/React.createElement(Icon,{name:withIcons[type],color:iconColor[type],size:"1.5rem",additionalCSS:"mr-16 self-baseline"}),/*#__PURE__*/React.createElement("p",{className:`ui-text-p1 mr-16 ${FLASH_TEXT_COLOR[type]}`,dangerouslySetInnerHTML:{__html:safeContent}}),/*#__PURE__*/React.createElement("button",{type:"button",className:"p-0 ml-auto self-start focus:outline-none",onClick:closeFlash},/*#__PURE__*/React.createElement(Icon,{name:"icon-gui-close",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}))]})},[flashes]);return /*#__PURE__*/React.createElement("div",{className:"ui-flash","data-id":FLASH_DATA_ID},flashesWithIds.filter(item=>!item.removed).map(flash=>/*#__PURE__*/React.createElement(Flash,{key:flash.id,...flash,removeFlash:removeFlash})))};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 /*#__PURE__*/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)}}},[])};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(()=>{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","rel"]});const withIcons={notice:"icon-gui-ably-badge",success:"icon-gui-tick",error:"icon-gui-warning",alert:"icon-gui-warning",info:""};const iconColor={notice:"text-cool-black",success:"text-cool-black",error:"text-white",alert:"text-white",info:""};return /*#__PURE__*/React.createElement("div",{className:`ui-flash-message ui-grid-px ${animateEntry?"ui-flash-message-enter":""}`,style:style,ref:ref,"data-id":"ui-flash"},/*#__PURE__*/React.createElement("div",{className:`${FLASH_BG_COLOR[type]} p-32 flex align-center rounded shadow-container-subtle`},withIcons[type]&&/*#__PURE__*/React.createElement(Icon,{name:withIcons[type],color:iconColor[type],size:"1.5rem",additionalCSS:"mr-16 self-baseline"}),/*#__PURE__*/React.createElement("p",{className:`ui-text-p1 mr-16 ${FLASH_TEXT_COLOR[type]}`,dangerouslySetInnerHTML:{__html:safeContent}}),/*#__PURE__*/React.createElement("button",{type:"button",className:"p-0 ml-auto self-start focus:outline-none",onClick:closeFlash},/*#__PURE__*/React.createElement(Icon,{name:"icon-gui-close",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}))]})},[flashes]);return /*#__PURE__*/React.createElement("div",{className:"ui-flash","data-id":FLASH_DATA_ID},flashesWithIds.filter(item=>!item.removed).map(flash=>/*#__PURE__*/React.createElement(Flash,{key:flash.id,...flash,removeFlash:removeFlash})))};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 /*#__PURE__*/React.createElement(WrappedFlashes,null)};export{reducerFlashes,FLASH_DATA_ID,Flashes};export default BackendFlashes;
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1 +1 @@
1
- import throttle from"lodash.throttle";import{queryId,queryIdAll}from"../dom-query";import MeganavControl from"../MeganavControl/component.js";import MeganavControlMobileDropdown from"../MeganavControlMobileDropdown/component.js";import MobilePanelOpenClick from"../MeganavControlMobilePanelOpen/component.js";import MobilePanelCloseClick from"../MeganavControlMobilePanelClose/component.js";import MeganavSearchAutocomplete from"../MeganavSearchAutocomplete/component.js";import MeganavSearchSuggestions from"../MeganavSearchSuggestions/component.js";const windowOnBlur=closeAll=>{window.onblur=()=>closeAll();return{teardown:()=>window.onblur=null}};const documentClick=closeAll=>{const meganav=queryId("meganav");const clickHandler=e=>{if(meganav.contains(e.target))return;closeAll()};document.addEventListener("click",clickHandler);return{teardown:()=>document.removeEventListener("click",clickHandler)}};const documentScroll=themeName=>{if(themeName!=="transparentToWhite")return{teardown:()=>{}};const meganav=queryId("meganav");const navItems=queryIdAll("meganav-link");const controlMobileDropdownMenu=queryId("meganav-control-mobile-dropdown-menu");const controlMobileDropdownClose=queryId("meganav-control-mobile-dropdown-close");const controls=queryIdAll("meganav-control");const signUpBtn=queryId("meganav-sign-up-btn");const invertTextCollection=[...Array.from(controls),...Array.from(navItems),queryId("meganav-logo")];const invertMobleDropdownColor=invert=>{const whiteToBlack=["ui-icon-white","ui-icon-cool-black"];const blackToWhite=[...whiteToBlack].reverse();if(invert){controlMobileDropdownMenu?.classList.replace(...whiteToBlack);controlMobileDropdownClose?.classList.replace(...whiteToBlack)}else{controlMobileDropdownMenu?.classList.replace(...blackToWhite);controlMobileDropdownClose?.classList.replace(...blackToWhite)}};const inverSignupBtnColors=invert=>{if(invert){signUpBtn?.classList.replace("bg-white","bg-cool-black");signUpBtn?.classList.replace("text-cool-black","text-white")}else{signUpBtn?.classList.replace("bg-cool-black","bg-white");signUpBtn?.classList.replace("text-white","text-cool-black")}};const scrollHandler=throttle(()=>{if(window.scrollY>5){meganav.classList.replace("bg-transparent","bg-white");inverSignupBtnColors(true);invertMobleDropdownColor(true);invertTextCollection.forEach(n=>n.classList.replace("text-white","text-cool-black"))}else{meganav.classList.replace("bg-white","bg-transparent");inverSignupBtnColors(false);invertMobleDropdownColor(false);invertTextCollection.forEach(n=>n.classList.replace("text-cool-black","text-white"))}},150);document.addEventListener("scroll",scrollHandler);return{teardown:()=>document.removeEventListener("scroll",scrollHandler)}};export default function Meganav({themeName,addSearchApiKey}={themeName:null}){const controls=MeganavControl();const panelOpenControls=MobilePanelOpenClick();const panelCloseControls=MobilePanelCloseClick();const search=MeganavSearchAutocomplete(addSearchApiKey);const searchSuggestions=MeganavSearchSuggestions();const mobileDropdownControl=MeganavControlMobileDropdown({clearPanels:()=>[...panelOpenControls,...panelCloseControls].forEach(i=>i.clear())});const closeAll=()=>[mobileDropdownControl,searchSuggestions,...panelOpenControls,...panelCloseControls,...controls,...search].forEach(i=>i.clear());const teardowns=[documentScroll(themeName),documentClick(closeAll),windowOnBlur(closeAll),mobileDropdownControl,searchSuggestions,...controls,...panelOpenControls,...panelCloseControls,...search].map(i=>i.teardown);return()=>teardowns.forEach(teardown=>teardown())}
1
+ import throttle from"lodash.throttle";import{queryId,queryIdAll}from"../dom-query";import MeganavControl from"../MeganavControl/component.js";import MeganavControlMobileDropdown from"../MeganavControlMobileDropdown/component.js";import MobilePanelOpenClick from"../MeganavControlMobilePanelOpen/component.js";import MobilePanelCloseClick from"../MeganavControlMobilePanelClose/component.js";import MeganavSearchAutocomplete from"../MeganavSearchAutocomplete/component.js";import MeganavSearchSuggestions from"../MeganavSearchSuggestions/component.js";const windowOnBlur=closeAll=>{window.onblur=()=>closeAll();return{teardown:()=>window.onblur=null}};const documentClick=closeAll=>{const meganav=queryId("meganav");const clickHandler=e=>{if(meganav.contains(e.target))return;closeAll()};document.addEventListener("click",clickHandler);return{teardown:()=>document.removeEventListener("click",clickHandler)}};const documentScroll=themeName=>{if(themeName!=="transparentToWhite")return{teardown:()=>{}};const meganav=queryId("meganav");const navItems=queryIdAll("meganav-link");const controlMobileDropdownMenu=queryId("meganav-control-mobile-dropdown-menu");const controlMobileDropdownClose=queryId("meganav-control-mobile-dropdown-close");const controls=queryIdAll("meganav-control");const signUpBtn=queryId("meganav-sign-up-btn");const invertTextCollection=[...Array.from(controls),...Array.from(navItems),queryId("meganav-logo")];const invertMobleDropdownColor=invert=>{const whiteToBlack=["ui-icon-white","ui-icon-cool-black"];const blackToWhite=[...whiteToBlack].reverse();if(invert){controlMobileDropdownMenu?.classList.replace(...whiteToBlack);controlMobileDropdownClose?.classList.replace(...whiteToBlack)}else{controlMobileDropdownMenu?.classList.replace(...blackToWhite);controlMobileDropdownClose?.classList.replace(...blackToWhite)}};const inverSignupBtnColors=invert=>{if(invert){signUpBtn?.classList.replace("bg-white","bg-cool-black");signUpBtn?.classList.replace("text-cool-black","text-white")}else{signUpBtn?.classList.replace("bg-cool-black","bg-white");signUpBtn?.classList.replace("text-white","text-cool-black")}};const scrollHandler=throttle(()=>{if(window.scrollY>5){meganav.classList.replace("bg-transparent","bg-white");inverSignupBtnColors(true);invertMobleDropdownColor(true);invertTextCollection.forEach(n=>n.classList.replace("text-white","text-cool-black"))}else{meganav.classList.replace("bg-white","bg-transparent");inverSignupBtnColors(false);invertMobleDropdownColor(false);invertTextCollection.forEach(n=>n.classList.replace("text-cool-black","text-white"))}},150);document.addEventListener("scroll",scrollHandler);return{teardown:()=>document.removeEventListener("scroll",scrollHandler)}};export default function Meganav({themeName,addSearchApiKey}){const controls=MeganavControl();const panelOpenControls=MobilePanelOpenClick();const panelCloseControls=MobilePanelCloseClick();const search=MeganavSearchAutocomplete(addSearchApiKey);const searchSuggestions=MeganavSearchSuggestions();const mobileDropdownControl=MeganavControlMobileDropdown({clearPanels:()=>[...panelOpenControls,...panelCloseControls].forEach(i=>i.clear())});const closeAll=()=>[mobileDropdownControl,searchSuggestions,...panelOpenControls,...panelCloseControls,...controls,...search].forEach(i=>i.clear());const teardowns=[documentScroll(themeName??null),documentClick(closeAll),windowOnBlur(closeAll),mobileDropdownControl,searchSuggestions,...controls,...panelOpenControls,...panelCloseControls,...search].map(i=>i.teardown);return()=>teardowns.forEach(teardown=>teardown())}
@@ -1 +1 @@
1
- import React from"react";import MeganavBlogPostsList from"./MeganavBlogPostsList";import ConnectStateWrapper from"./ConnectStateWrapper";import{selectRecentBlogPosts}from"./remote-blogs-posts.js";import Icon from"./Icon";const MeganavContentCompany=({paths,absUrl})=>{const BlogPostsList=ConnectStateWrapper(MeganavBlogPostsList,{recentBlogPosts:selectRecentBlogPosts});return /*#__PURE__*/React.createElement("div",{className:"flex max-w-screen-xl mx-auto"},/*#__PURE__*/React.createElement("div",{className:"ui-meganav-content-spacer"}),/*#__PURE__*/React.createElement("section",{className:"grid grid-cols-12 ui-grid-gap-x w-full"},/*#__PURE__*/React.createElement("div",{className:"col-span-full md:col-span-4 pt-24 md:py-24 lg:py-32 px-24 sm:px-32 md:pl-0 md:pr-24"},/*#__PURE__*/React.createElement("h3",{className:"ui-meganav-overline",id:"meganav-company-panel-list-why-companies"},"Why companies choose Ably"),/*#__PURE__*/React.createElement("ul",{"aria-labelledby":"meganav-company-panel-list-why-companies"},/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/customers"),className:"ui-meganav-media-with-image group"},/*#__PURE__*/React.createElement(Icon,{name:"icon-display-customers-col",size:"2.5rem"}),/*#__PURE__*/React.createElement("div",{className:"flex flex-col justify-center"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Customers"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Ably supports customers across multiple industries.")))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/case-studies"),className:"ui-meganav-media-with-image group"},/*#__PURE__*/React.createElement(Icon,{name:"icon-display-case-studies-col",size:"2.5rem"}),/*#__PURE__*/React.createElement("div",{className:"flex flex-col justify-center"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Case studies"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Discover how customers are benefiting from Ably.")))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/compare"),className:"ui-meganav-media-with-image group"},/*#__PURE__*/React.createElement(Icon,{name:"icon-display-compare-tech-col",size:"2.5rem"}),/*#__PURE__*/React.createElement("div",{className:"flex flex-col justify-center"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Compare our tech"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Choose the right realtime service.")))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/aws"),className:"ui-meganav-media-with-image group"},/*#__PURE__*/React.createElement("img",{src:paths.awsLogo,alt:"AWS logo"}),/*#__PURE__*/React.createElement("div",{className:"flex flex-col justify-center"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Partners"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Ably collaborates and integrates with AWS.")))))),/*#__PURE__*/React.createElement("div",{className:"col-span-full md:col-span-4 pb-8 md:py-24 lg:py-32 px-24 sm:px-32 md:px-0"},/*#__PURE__*/React.createElement("ul",{className:"md:mt-40","aria-labelledby":"meganav-company-panel-list-why-companies"},/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/resources"),className:"ui-meganav-media-with-image group"},/*#__PURE__*/React.createElement(Icon,{name:"icon-display-resources-col",size:"2.5rem"}),/*#__PURE__*/React.createElement("div",{className:"flex flex-col justify-center"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Resources"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Learn more about realtime with our handy resources.")))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/about"),className:"ui-meganav-media-with-image group"},/*#__PURE__*/React.createElement(Icon,{name:"icon-display-about-ably-col",size:"2.5rem"}),/*#__PURE__*/React.createElement("div",{className:"flex flex-col justify-center"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"About Ably"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Find out more about Ably’s mission.")))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/careers"),className:"ui-meganav-media-with-image group"},/*#__PURE__*/React.createElement(Icon,{name:"icon-display-careers-col",size:"2.5rem"}),/*#__PURE__*/React.createElement("div",{className:"flex flex-col justify-center"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Careers"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Discover our open roles and core Ably values.")))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/events"),className:"ui-meganav-media-with-image group"},/*#__PURE__*/React.createElement(Icon,{name:"icon-display-events-col",size:"2.5rem"}),/*#__PURE__*/React.createElement("div",{className:"flex flex-col justify-center"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Events"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Join Ably at upcoming events.")))))),/*#__PURE__*/React.createElement(BlogPostsList,{absUrl:absUrl})),/*#__PURE__*/React.createElement("div",{className:"ui-meganav-content-spacer"}))};export default MeganavContentCompany;
1
+ import React from"react";import MeganavBlogPostsList from"./MeganavBlogPostsList";import ConnectStateWrapper from"./ConnectStateWrapper";import{selectRecentBlogPosts}from"./remote-blogs-posts.js";import Icon from"./Icon";const MeganavContentCompany=({paths,absUrl})=>{const BlogPostsList=ConnectStateWrapper(MeganavBlogPostsList,{recentBlogPosts:selectRecentBlogPosts});return /*#__PURE__*/React.createElement("div",{className:"flex max-w-screen-xl mx-auto"},/*#__PURE__*/React.createElement("div",{className:"ui-meganav-content-spacer"}),/*#__PURE__*/React.createElement("section",{className:"grid grid-cols-12 ui-grid-gap-x w-full"},/*#__PURE__*/React.createElement("div",{className:"col-span-full md:col-span-4 pt-24 md:py-24 lg:py-32 px-24 sm:px-32 md:pl-0 md:pr-24"},/*#__PURE__*/React.createElement("h3",{className:"ui-meganav-overline",id:"meganav-company-panel-list-why-companies"},"Why companies choose Ably"),/*#__PURE__*/React.createElement("ul",{"aria-labelledby":"meganav-company-panel-list-why-companies"},/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/customers"),className:"ui-meganav-media-with-image group"},/*#__PURE__*/React.createElement(Icon,{name:"icon-display-customers-col",size:"2.5rem"}),/*#__PURE__*/React.createElement("div",{className:"flex flex-col justify-center"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Customers"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Ably supports customers across multiple industries.")))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/case-studies"),className:"ui-meganav-media-with-image group"},/*#__PURE__*/React.createElement(Icon,{name:"icon-display-case-studies-col",size:"2.5rem"}),/*#__PURE__*/React.createElement("div",{className:"flex flex-col justify-center"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Case studies"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Discover how customers are benefiting from Ably.")))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/compare"),className:"ui-meganav-media-with-image group"},/*#__PURE__*/React.createElement(Icon,{name:"icon-display-compare-tech-col",size:"2.5rem"}),/*#__PURE__*/React.createElement("div",{className:"flex flex-col justify-center"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Compare our tech"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Choose the right realtime service.")))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/aws"),className:"ui-meganav-media-with-image group"},paths&&/*#__PURE__*/React.createElement("img",{src:paths.awsLogo,alt:"AWS logo"}),/*#__PURE__*/React.createElement("div",{className:"flex flex-col justify-center"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Partners"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Ably collaborates and integrates with AWS.")))))),/*#__PURE__*/React.createElement("div",{className:"col-span-full md:col-span-4 pb-8 md:py-24 lg:py-32 px-24 sm:px-32 md:px-0"},/*#__PURE__*/React.createElement("ul",{className:"md:mt-40","aria-labelledby":"meganav-company-panel-list-why-companies"},/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/resources"),className:"ui-meganav-media-with-image group"},/*#__PURE__*/React.createElement(Icon,{name:"icon-display-resources-col",size:"2.5rem"}),/*#__PURE__*/React.createElement("div",{className:"flex flex-col justify-center"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Resources"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Learn more about realtime with our handy resources.")))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/about"),className:"ui-meganav-media-with-image group"},/*#__PURE__*/React.createElement(Icon,{name:"icon-display-about-ably-col",size:"2.5rem"}),/*#__PURE__*/React.createElement("div",{className:"flex flex-col justify-center"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"About Ably"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Find out more about Ably’s mission.")))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/careers"),className:"ui-meganav-media-with-image group"},/*#__PURE__*/React.createElement(Icon,{name:"icon-display-careers-col",size:"2.5rem"}),/*#__PURE__*/React.createElement("div",{className:"flex flex-col justify-center"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Careers"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Discover our open roles and core Ably values.")))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/events"),className:"ui-meganav-media-with-image group"},/*#__PURE__*/React.createElement(Icon,{name:"icon-display-events-col",size:"2.5rem"}),/*#__PURE__*/React.createElement("div",{className:"flex flex-col justify-center"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Events"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Join Ably at upcoming events.")))))),/*#__PURE__*/React.createElement(BlogPostsList,{absUrl:absUrl})),/*#__PURE__*/React.createElement("div",{className:"ui-meganav-content-spacer"}))};export default MeganavContentCompany;
@@ -1 +1 @@
1
- import React from"react";import FeaturedLink from"./FeaturedLink";const MeganavContentProducts=({paths,absUrl})=>/*#__PURE__*/React.createElement("div",{className:"flex max-w-screen-xl mx-auto"},/*#__PURE__*/React.createElement("div",{className:"ui-meganav-content-spacer bg-extra-light-grey"}),/*#__PURE__*/React.createElement("section",{className:"grid grid-cols-12 ui-grid-gap-x w-full"},/*#__PURE__*/React.createElement("div",{className:"col-span-full md:col-span-4 py-24 lg:py-32 px-24 sm:px-32 md:pl-0 md:pr-24 bg-extra-light-grey"},/*#__PURE__*/React.createElement("div",{className:"flex mb-20"},/*#__PURE__*/React.createElement("img",{src:paths.ablyStack,alt:"Ably homepage"}),/*#__PURE__*/React.createElement("h3",{className:"ui-meganav-overline ml-24"},"The Ably Platform")),/*#__PURE__*/React.createElement("p",{className:"ui-text-p2 font-bold mb-24",style:{maxWidth:"330px"}},"Easily power any realtime experience in your application. No complex infrastructure to manage or provision. Just a simple API that handles everything realtime, and lets you focus on your code."),/*#__PURE__*/React.createElement(FeaturedLink,{url:absUrl("/platform"),textSize:"text-p2"},"Explore how it works")),/*#__PURE__*/React.createElement("div",{className:"col-span-full md:col-span-4 pt-24 pb-8 md:py-24 lg:py-32 px-24 sm:px-32 md:px-0 bg-white"},/*#__PURE__*/React.createElement("h3",{className:"ui-meganav-overline",id:"meganav-products-panel-list-examples"},"Products"),/*#__PURE__*/React.createElement("ul",{className:"mb-16","aria-labelledby":"meganav-products-panel-list-examples"},/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/pubsub"),className:"group ui-meganav-media"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Pub/Sub Channels"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Build infinitely scalable realtime applications."))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/spaces"),className:"group ui-meganav-media"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Spaces (Beta)"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Create multi-user collaborative environments."))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/livesync"),className:"group ui-meganav-media"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"LiveSync (Alpha)"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Seamlessly sync database changes with frontend clients at scale."))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/chat"),className:"group ui-meganav-media"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Chat (Beta)"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Deliver highly reliable chat experiences at scale."))))),/*#__PURE__*/React.createElement("div",{className:"col-span-full md:col-span-4 pt-8 pb-24 md:py-24 lg:py-32 px-24 sm:px-32 md:px-0 bg-white"},/*#__PURE__*/React.createElement("h3",{className:"ui-meganav-overline",id:"meganav-products-panel-list-our-technology"},"Technology"),/*#__PURE__*/React.createElement("ul",{className:"mb-16","aria-labelledby":"meganav-products-panel-list-our-technology"},/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/four-pillars-of-dependability#performance"),className:"ui-meganav-media group"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Predictable performance"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"A low-latency and high-throughput global network."))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/four-pillars-of-dependability#integrity"),className:"ui-meganav-media group"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Guaranteed ordering & delivery"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Data is delivered - in order - even after disconnections."))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/four-pillars-of-dependability#reliability"),className:"ui-meganav-media group"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Fault tolerant infrastructure"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Redundancy is built in at global and regional levels."))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/four-pillars-of-dependability#availability"),className:"ui-meganav-media group"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"High scalability & availability"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Built for scale with legitimate 99.999% uptime SLAs."))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/network"),className:"ui-meganav-media group"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Global edge network"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"An edge network of 15 core routing datacenters and 205+ PoPs.")))),/*#__PURE__*/React.createElement(FeaturedLink,{url:absUrl("/four-pillars-of-dependability"),textSize:"text-p3"},"Explore Four Pillars of Dependability"))),/*#__PURE__*/React.createElement("div",{className:"ui-meganav-content-spacer"}));export default MeganavContentProducts;
1
+ import React from"react";import FeaturedLink from"./FeaturedLink";const MeganavContentProducts=({paths,absUrl})=>/*#__PURE__*/React.createElement("div",{className:"flex max-w-screen-xl mx-auto"},/*#__PURE__*/React.createElement("div",{className:"ui-meganav-content-spacer bg-extra-light-grey"}),/*#__PURE__*/React.createElement("section",{className:"grid grid-cols-12 ui-grid-gap-x w-full"},/*#__PURE__*/React.createElement("div",{className:"col-span-full md:col-span-4 py-24 lg:py-32 px-24 sm:px-32 md:pl-0 md:pr-24 bg-extra-light-grey"},/*#__PURE__*/React.createElement("div",{className:"flex mb-20"},paths&&/*#__PURE__*/React.createElement("img",{src:paths?.ablyStack,alt:"Ably homepage"}),/*#__PURE__*/React.createElement("h3",{className:"ui-meganav-overline ml-24"},"The Ably Platform")),/*#__PURE__*/React.createElement("p",{className:"ui-text-p2 font-bold mb-24",style:{maxWidth:"330px"}},"Easily power any realtime experience in your application. No complex infrastructure to manage or provision. Just a simple API that handles everything realtime, and lets you focus on your code."),/*#__PURE__*/React.createElement(FeaturedLink,{url:absUrl("/platform"),textSize:"text-p2"},"Explore how it works")),/*#__PURE__*/React.createElement("div",{className:"col-span-full md:col-span-4 pt-24 pb-8 md:py-24 lg:py-32 px-24 sm:px-32 md:px-0 bg-white"},/*#__PURE__*/React.createElement("h3",{className:"ui-meganav-overline",id:"meganav-products-panel-list-examples"},"Products"),/*#__PURE__*/React.createElement("ul",{className:"mb-16","aria-labelledby":"meganav-products-panel-list-examples"},/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/pubsub"),className:"group ui-meganav-media"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Pub/Sub Channels"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Build infinitely scalable realtime applications."))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/spaces"),className:"group ui-meganav-media"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Spaces (Beta)"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Create multi-user collaborative environments."))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/livesync"),className:"group ui-meganav-media"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"LiveSync (Alpha)"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Seamlessly sync database changes with frontend clients at scale."))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/chat"),className:"group ui-meganav-media"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Chat (Beta)"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Deliver highly reliable chat experiences at scale."))))),/*#__PURE__*/React.createElement("div",{className:"col-span-full md:col-span-4 pt-8 pb-24 md:py-24 lg:py-32 px-24 sm:px-32 md:px-0 bg-white"},/*#__PURE__*/React.createElement("h3",{className:"ui-meganav-overline",id:"meganav-products-panel-list-our-technology"},"Technology"),/*#__PURE__*/React.createElement("ul",{className:"mb-16","aria-labelledby":"meganav-products-panel-list-our-technology"},/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/four-pillars-of-dependability#performance"),className:"ui-meganav-media group"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Predictable performance"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"A low-latency and high-throughput global network."))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/four-pillars-of-dependability#integrity"),className:"ui-meganav-media group"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Guaranteed ordering & delivery"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Data is delivered - in order - even after disconnections."))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/four-pillars-of-dependability#reliability"),className:"ui-meganav-media group"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Fault tolerant infrastructure"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Redundancy is built in at global and regional levels."))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/four-pillars-of-dependability#availability"),className:"ui-meganav-media group"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"High scalability & availability"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"Built for scale with legitimate 99.999% uptime SLAs."))),/*#__PURE__*/React.createElement("li",null,/*#__PURE__*/React.createElement("a",{href:absUrl("/network"),className:"ui-meganav-media group"},/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-heading"},"Global edge network"),/*#__PURE__*/React.createElement("p",{className:"ui-meganav-media-copy"},"An edge network of 15 core routing datacenters and 205+ PoPs.")))),/*#__PURE__*/React.createElement(FeaturedLink,{url:absUrl("/four-pillars-of-dependability"),textSize:"text-p3"},"Explore Four Pillars of Dependability"))),/*#__PURE__*/React.createElement("div",{className:"ui-meganav-content-spacer"}));export default MeganavContentProducts;
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1 +1 @@
1
- import{queryId}from"./dom-query";function enableBtn(el,text){el.disabled=false;el.innerText=text}function disableBtn(el,text){el.disabled=true;el.innerText=text}const WAIT_BETWEEN_RETRIES_MS=100;let MAX_RETRY_COUNT=30;export default function toggleChatWidget(params={}){const{dataId}=params;const container=queryId(dataId);const chatButton=queryId("open-chat-widget",container);const textEnabled=chatButton.dataset.enabledLabel;const textDisabled=chatButton.dataset.disabledLabel;if(!dataId||!container)return;const trigger=queryId("open-chat-widget",container);let clickHandler;const waitForScript=delay=>{const widget=window?.HubSpotConversations?.widget;const iframe=document.querySelector("#hubspot-messages-iframe-container");clickHandler=e=>{e.preventDefault();widget.open()};if(widget&&iframe){trigger.addEventListener("click",clickHandler);enableBtn(trigger,textEnabled)}else if(--MAX_RETRY_COUNT){setTimeout(()=>waitForScript(WAIT_BETWEEN_RETRIES_MS),delay)}};disableBtn(trigger,textDisabled);waitForScript(0);return()=>{disableBtn(trigger,textDisabled);trigger.removeEventListener("click",clickHandler)}}
1
+ import{queryId}from"./dom-query";function enableBtn(el,text){el.disabled=false;el.innerText=text}function disableBtn(el,text){el.disabled=true;el.innerText=text}const WAIT_BETWEEN_RETRIES_MS=100;let MAX_RETRY_COUNT=30;export default function toggleChatWidget(params){const{dataId}=params??{};const container=queryId(dataId);const chatButton=queryId("open-chat-widget",container);const textEnabled=chatButton.dataset.enabledLabel;const textDisabled=chatButton.dataset.disabledLabel;if(!dataId||!container)return;const trigger=queryId("open-chat-widget",container);let clickHandler;const waitForScript=delay=>{const widget=window?.HubSpotConversations?.widget;const iframe=document.querySelector("#hubspot-messages-iframe-container");clickHandler=e=>{e.preventDefault();widget.open()};if(widget&&iframe){trigger.addEventListener("click",clickHandler);enableBtn(trigger,textEnabled)}else if(--MAX_RETRY_COUNT){setTimeout(()=>waitForScript(WAIT_BETWEEN_RETRIES_MS),delay)}};disableBtn(trigger,textDisabled);waitForScript(0);return()=>{disableBtn(trigger,textDisabled);trigger.removeEventListener("click",clickHandler)}}
Binary file
package/index.d.ts ADDED
@@ -0,0 +1,785 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+
3
+ declare module '@ably/ui/core/Accordion' {
4
+ import { ReactNode } from "react";
5
+ type AccordionData = {
6
+ name: string;
7
+ content: ReactNode;
8
+ };
9
+ export type AccordionProps = {
10
+ data: AccordionData[];
11
+ arrowIcon?: boolean;
12
+ topBorder?: boolean;
13
+ bottomBorder?: boolean;
14
+ id?: string;
15
+ autoClose?: boolean;
16
+ className?: string;
17
+ };
18
+ const Accordion: ({ data, id, topBorder, bottomBorder, arrowIcon, autoClose, className, }: AccordionProps) => import("react/jsx-runtime").JSX.Element;
19
+ export default Accordion;
20
+ //# sourceMappingURL=Accordion.d.ts.map
21
+ }
22
+
23
+ declare module '@ably/ui/core/Code' {
24
+ type CodeProps = {
25
+ language: string;
26
+ snippet: string;
27
+ textSize?: string;
28
+ padding?: string;
29
+ additionalCSS?: string;
30
+ };
31
+ const Code: ({ language, snippet, textSize, padding, additionalCSS, }: CodeProps) => import("react/jsx-runtime").JSX.Element;
32
+ export default Code;
33
+ //# sourceMappingURL=Code.d.ts.map
34
+ }
35
+
36
+ declare module '@ably/ui/core/ConnectStateWrapper' {
37
+ const ConnectStateWrapper: (Component: any, selectors: any) => (props: any) => import("react/jsx-runtime").JSX.Element;
38
+ export default ConnectStateWrapper;
39
+ //# sourceMappingURL=ConnectStateWrapper.d.ts.map
40
+ }
41
+
42
+ declare module '@ably/ui/core/ContactFooter' {
43
+ type ContactFooterProps = {
44
+ urlBase: string;
45
+ };
46
+ const ContactFooter: ({ urlBase }: ContactFooterProps) => import("react/jsx-runtime").JSX.Element;
47
+ export default ContactFooter;
48
+ //# sourceMappingURL=ContactFooter.d.ts.map
49
+ }
50
+
51
+ declare module '@ably/ui/core/CookieMessage' {
52
+ type CookieMessageProps = {
53
+ cookieId: string;
54
+ urlBase: string;
55
+ };
56
+ const CookieMessage: ({ cookieId, urlBase }: CookieMessageProps) => import("react/jsx-runtime").JSX.Element | null;
57
+ export default CookieMessage;
58
+ //# sourceMappingURL=CookieMessage.d.ts.map
59
+ }
60
+
61
+ declare module '@ably/ui/core/CustomerLogos' {
62
+ type CompanyEntity = {
63
+ label: string;
64
+ logo: string;
65
+ };
66
+ type CustomerLogosProps = {
67
+ companies: CompanyEntity[];
68
+ additionalCss?: string;
69
+ };
70
+ const CustomerLogos: ({ companies, additionalCss, }: CustomerLogosProps) => import("react/jsx-runtime").JSX.Element;
71
+ export default CustomerLogos;
72
+ //# sourceMappingURL=CustomerLogos.d.ts.map
73
+ }
74
+
75
+ declare module '@ably/ui/core/DropdownMenu' {
76
+ import { ReactNode } from "react";
77
+ type DropdownMenuProps = {
78
+ children: ReactNode;
79
+ };
80
+ type TriggerProps = {
81
+ children: ReactNode;
82
+ additionalTriggerCSS?: string;
83
+ };
84
+ type ContentProps = {
85
+ children: ReactNode;
86
+ anchorPosition?: string;
87
+ additionalContentCSS?: string;
88
+ };
89
+ type LinkProps = {
90
+ url: string;
91
+ title: string;
92
+ subtitle: string;
93
+ iconName: string;
94
+ children: ReactNode;
95
+ };
96
+ const DropdownMenu: {
97
+ ({ children }: DropdownMenuProps): import("react/jsx-runtime").JSX.Element;
98
+ Trigger: ({ children, additionalTriggerCSS }: TriggerProps) => import("react/jsx-runtime").JSX.Element;
99
+ Content: ({ children, anchorPosition, additionalContentCSS, }: ContentProps) => import("react/jsx-runtime").JSX.Element | null;
100
+ Link: ({ url, title, subtitle, iconName, children }: LinkProps) => import("react/jsx-runtime").JSX.Element;
101
+ };
102
+ export default DropdownMenu;
103
+ //# sourceMappingURL=DropdownMenu.d.ts.map
104
+ }
105
+
106
+ declare module '@ably/ui/core/Expander' {
107
+ import { PropsWithChildren } from "react";
108
+ type ExpanderProps = {
109
+ heightThreshold?: number;
110
+ className?: string;
111
+ fadeClassName?: string;
112
+ controlsClassName?: string;
113
+ controlsOpenedLabel?: string;
114
+ controlsClosedLabel?: string;
115
+ };
116
+ const Expander: ({ heightThreshold, className, fadeClassName, controlsClassName, controlsOpenedLabel, controlsClosedLabel, children, }: PropsWithChildren<ExpanderProps>) => import("react/jsx-runtime").JSX.Element;
117
+ export default Expander;
118
+ //# sourceMappingURL=Expander.d.ts.map
119
+ }
120
+
121
+ declare module '@ably/ui/core/FeaturedLink' {
122
+ import { ReactNode } from "react";
123
+ type FeaturedLinkProps = {
124
+ url: string;
125
+ children: ReactNode;
126
+ textSize?: string;
127
+ iconColor?: string;
128
+ flush?: boolean;
129
+ reverse?: boolean;
130
+ additionalCSS?: string;
131
+ newWindow?: boolean;
132
+ onClick?: () => void;
133
+ };
134
+ const FeaturedLink: ({ url, textSize, iconColor, flush, reverse, additionalCSS, newWindow, onClick, children, }: FeaturedLinkProps) => import("react/jsx-runtime").JSX.Element;
135
+ export default FeaturedLink;
136
+ //# sourceMappingURL=FeaturedLink.d.ts.map
137
+ }
138
+
139
+ declare module '@ably/ui/core/Flash' {
140
+ type FlashPropsType = "error" | "success" | "notice" | "info" | "alert";
141
+ type FlashProps = {
142
+ id: string;
143
+ removed: boolean;
144
+ type: FlashPropsType;
145
+ content: string;
146
+ removeFlash: (id: string) => void;
147
+ };
148
+ type FlashesProps = {
149
+ flashes: {
150
+ items: FlashProps[];
151
+ };
152
+ };
153
+ type BackendFlashesProps = {
154
+ flashes: string[][];
155
+ };
156
+ const FLASH_DATA_ID = "ui-flashes";
157
+ const reducerFlashes: {
158
+ flashes: (state: {
159
+ items: FlashProps[];
160
+ } | undefined, action: {
161
+ type: string;
162
+ payload: FlashProps | FlashProps[];
163
+ }) => {
164
+ items: FlashProps[];
165
+ };
166
+ };
167
+ const Flashes: ({ flashes }: FlashesProps) => import("react/jsx-runtime").JSX.Element;
168
+ const BackendFlashes: ({ flashes }: BackendFlashesProps) => import("react/jsx-runtime").JSX.Element;
169
+ export { reducerFlashes, FLASH_DATA_ID, Flashes };
170
+ export default BackendFlashes;
171
+ //# sourceMappingURL=Flash.d.ts.map
172
+ }
173
+
174
+ declare module '@ably/ui/core/Footer' {
175
+ type FooterProps = {
176
+ paths: {
177
+ ablyStack: string;
178
+ highestPerformer: string;
179
+ highestUserAdoption: string;
180
+ bestSupport: string;
181
+ fastestImplementation: string;
182
+ };
183
+ urlBase: string;
184
+ statusUrl: string;
185
+ };
186
+ const Footer: ({ paths, urlBase, statusUrl }: FooterProps) => import("react/jsx-runtime").JSX.Element;
187
+ export default Footer;
188
+ //# sourceMappingURL=Footer.d.ts.map
189
+ }
190
+
191
+ declare module '@ably/ui/core/Icon' {
192
+ type IconProps = {
193
+ name: string;
194
+ size?: string;
195
+ color?: string;
196
+ additionalCSS?: string;
197
+ };
198
+ const Icon: ({ name, size, color, additionalCSS, ...additionalAttributes }: IconProps) => import("react/jsx-runtime").JSX.Element;
199
+ export default Icon;
200
+ //# sourceMappingURL=Icon.d.ts.map
201
+ }
202
+
203
+ declare module '@ably/ui/core/Loader' {
204
+ type LoaderProps = {
205
+ size?: string;
206
+ ringColor?: string;
207
+ additionalCSS?: string;
208
+ };
209
+ const Loader: ({ ringColor, size, additionalCSS, }: LoaderProps) => import("react/jsx-runtime").JSX.Element;
210
+ export default Loader;
211
+ //# sourceMappingURL=Loader.d.ts.map
212
+ }
213
+
214
+ declare module '@ably/ui/core/Logo' {
215
+ import React from "react";
216
+ type LogoProps = {
217
+ dataId: string;
218
+ logoUrl: string;
219
+ href?: string;
220
+ additionalImgAttrs?: object;
221
+ additionalLinkAttrs?: object;
222
+ };
223
+ const _default: React.MemoExoticComponent<({ dataId, logoUrl, href, additionalImgAttrs, additionalLinkAttrs, }: LogoProps) => import("react/jsx-runtime").JSX.Element>;
224
+ export default _default;
225
+ //# sourceMappingURL=Logo.d.ts.map
226
+ }
227
+
228
+ declare module '@ably/ui/core/Meganav/component' {
229
+ export default function Meganav({ themeName, addSearchApiKey }: {
230
+ themeName: any;
231
+ addSearchApiKey: any;
232
+ }): () => void;
233
+ //# sourceMappingURL=component.d.ts.map
234
+ }
235
+
236
+ declare module '@ably/ui/core/Meganav' {
237
+ import { ReactNode } from "react";
238
+ export type MeganavTheme = {
239
+ backgroundColor?: string;
240
+ textColor?: string;
241
+ buttonBackgroundColor?: string;
242
+ buttonTextColor?: string;
243
+ mobileMenuColor?: string;
244
+ logoTextColor?: string;
245
+ barShadow?: string;
246
+ };
247
+ export type AbsUrl = (path: string) => string;
248
+ export type MeganavPaths = {
249
+ logo: string;
250
+ iconSprites: string;
251
+ ablyStack: string;
252
+ blogThumb1: string;
253
+ blogThumb2: string;
254
+ blogThumb3: string;
255
+ awsLogo?: string;
256
+ };
257
+ export type MeganavPanels = {
258
+ [index: string]: ({ paths, absUrl, statusUrl, }: {
259
+ paths?: MeganavPaths;
260
+ absUrl: (path: string) => string;
261
+ statusUrl: string;
262
+ }) => ReactNode;
263
+ };
264
+ export type MeganavSessionState = {
265
+ signedIn: boolean;
266
+ logOut: {
267
+ token: string;
268
+ href: string;
269
+ text: string;
270
+ };
271
+ accountName: string;
272
+ preferredEmail: string;
273
+ account: {
274
+ links: {
275
+ dashboard: {
276
+ href: string;
277
+ };
278
+ };
279
+ };
280
+ mySettings: {
281
+ text: string;
282
+ href: string;
283
+ };
284
+ myAccessTokens: {
285
+ text: string;
286
+ href: string;
287
+ };
288
+ };
289
+ type MeganavProps = {
290
+ paths?: MeganavPaths;
291
+ themeName: "white" | "black" | "transparentToWhite";
292
+ notice?: {
293
+ props: {
294
+ title: string;
295
+ bodyText: string;
296
+ buttonLink: string;
297
+ buttonLabel: string;
298
+ closeBtn: boolean;
299
+ };
300
+ config: {
301
+ cookieId: string;
302
+ noticeId: string;
303
+ collapse: boolean;
304
+ };
305
+ };
306
+ loginLink?: string;
307
+ urlBase?: string;
308
+ addSearchApiKey: string;
309
+ statusUrl: string;
310
+ };
311
+ const Meganav: ({ paths, themeName, notice, loginLink, urlBase, addSearchApiKey, statusUrl, }: MeganavProps) => import("react/jsx-runtime").JSX.Element;
312
+ export default Meganav;
313
+ //# sourceMappingURL=Meganav.d.ts.map
314
+ }
315
+
316
+ declare module '@ably/ui/core/MeganavBlogPostsList' {
317
+ import { AbsUrl } from "@ably/ui/core/Meganav";
318
+ type MeganavBlogPostsListProps = {
319
+ recentBlogPosts: {
320
+ link: string;
321
+ title: string;
322
+ pubDate: string;
323
+ }[];
324
+ absUrl: AbsUrl;
325
+ };
326
+ const MeganavBlogPostsList: ({ recentBlogPosts, absUrl, }: MeganavBlogPostsListProps) => import("react/jsx-runtime").JSX.Element | null;
327
+ export default MeganavBlogPostsList;
328
+ //# sourceMappingURL=MeganavBlogPostsList.d.ts.map
329
+ }
330
+
331
+ declare module '@ably/ui/core/MeganavContentCompany' {
332
+ import { AbsUrl, MeganavPaths } from "@ably/ui/core/Meganav";
333
+ type MeganavContentCompanyProps = {
334
+ absUrl: AbsUrl;
335
+ paths?: MeganavPaths;
336
+ };
337
+ const MeganavContentCompany: ({ paths, absUrl, }: MeganavContentCompanyProps) => import("react/jsx-runtime").JSX.Element;
338
+ export default MeganavContentCompany;
339
+ //# sourceMappingURL=MeganavContentCompany.d.ts.map
340
+ }
341
+
342
+ declare module '@ably/ui/core/MeganavContentDevelopers' {
343
+ import { AbsUrl } from "@ably/ui/core/Meganav";
344
+ const MeganavContentDevelopers: ({ absUrl, statusUrl, }: {
345
+ absUrl: AbsUrl;
346
+ statusUrl: string;
347
+ }) => import("react/jsx-runtime").JSX.Element;
348
+ export default MeganavContentDevelopers;
349
+ //# sourceMappingURL=MeganavContentDevelopers.d.ts.map
350
+ }
351
+
352
+ declare module '@ably/ui/core/MeganavContentProducts' {
353
+ import { AbsUrl, MeganavPaths } from "@ably/ui/core/Meganav";
354
+ type MeganavContentProductsProps = {
355
+ paths?: MeganavPaths;
356
+ absUrl: AbsUrl;
357
+ };
358
+ const MeganavContentProducts: ({ paths, absUrl, }: MeganavContentProductsProps) => import("react/jsx-runtime").JSX.Element;
359
+ export default MeganavContentProducts;
360
+ //# sourceMappingURL=MeganavContentProducts.d.ts.map
361
+ }
362
+
363
+ declare module '@ably/ui/core/MeganavContentUseCases' {
364
+ import { AbsUrl } from "@ably/ui/core/Meganav";
365
+ const MeganavContentUseCases: ({ absUrl }: {
366
+ absUrl: AbsUrl;
367
+ }) => import("react/jsx-runtime").JSX.Element;
368
+ export default MeganavContentUseCases;
369
+ //# sourceMappingURL=MeganavContentUseCases.d.ts.map
370
+ }
371
+
372
+ declare module '@ably/ui/core/MeganavControl/component' {
373
+ export default MeganavControl;
374
+ function MeganavControl(): {
375
+ teardown: () => void;
376
+ clear: () => void;
377
+ }[];
378
+ //# sourceMappingURL=component.d.ts.map
379
+ }
380
+
381
+ declare module '@ably/ui/core/MeganavControl' {
382
+ import { ReactNode } from "react";
383
+ import { MeganavTheme } from "@ably/ui/core/Meganav";
384
+ type MeganavControlProps = {
385
+ ariaControls: string;
386
+ ariaLabel: string;
387
+ children: ReactNode;
388
+ theme: MeganavTheme;
389
+ additionalCSS?: string;
390
+ };
391
+ const MeganavControl: ({ ariaControls, ariaLabel, children, theme, additionalCSS, }: MeganavControlProps) => import("react/jsx-runtime").JSX.Element;
392
+ export default MeganavControl;
393
+ //# sourceMappingURL=MeganavControl.d.ts.map
394
+ }
395
+
396
+ declare module '@ably/ui/core/MeganavControlMobileDropdown/component' {
397
+ export default MeganavControlMobileDropdown;
398
+ function MeganavControlMobileDropdown({ clearPanels }: {
399
+ clearPanels: any;
400
+ }): {
401
+ teardown: () => void;
402
+ clear: () => void;
403
+ };
404
+ //# sourceMappingURL=component.d.ts.map
405
+ }
406
+
407
+ declare module '@ably/ui/core/MeganavControlMobileDropdown' {
408
+ import { MeganavTheme } from "@ably/ui/core/Meganav";
409
+ const MeganavControlMobileDropdown: ({ theme }: {
410
+ theme: MeganavTheme;
411
+ }) => import("react/jsx-runtime").JSX.Element;
412
+ export default MeganavControlMobileDropdown;
413
+ //# sourceMappingURL=MeganavControlMobileDropdown.d.ts.map
414
+ }
415
+
416
+ declare module '@ably/ui/core/MeganavControlMobilePanelClose/component' {
417
+ function _default(): {
418
+ teardown: () => void;
419
+ clear: () => void;
420
+ }[];
421
+ export default _default;
422
+ //# sourceMappingURL=component.d.ts.map
423
+ }
424
+
425
+ declare module '@ably/ui/core/MeganavControlMobilePanelClose' {
426
+ type MeganavControlMobilePanelCloseProps = {
427
+ ariaControls: string;
428
+ displayHr?: boolean;
429
+ };
430
+ const MeganavControlMobilePanelClose: ({ ariaControls, displayHr, }: MeganavControlMobilePanelCloseProps) => import("react/jsx-runtime").JSX.Element;
431
+ export default MeganavControlMobilePanelClose;
432
+ //# sourceMappingURL=MeganavControlMobilePanelClose.d.ts.map
433
+ }
434
+
435
+ declare module '@ably/ui/core/MeganavControlMobilePanelOpen/component' {
436
+ function _default(): {
437
+ teardown: () => void;
438
+ clear: () => void;
439
+ }[];
440
+ export default _default;
441
+ //# sourceMappingURL=component.d.ts.map
442
+ }
443
+
444
+ declare module '@ably/ui/core/MeganavControlMobilePanelOpen' {
445
+ import { ReactNode } from "react";
446
+ type MeganavControlMobilePanelOpenProps = {
447
+ ariaControls: string;
448
+ children: ReactNode;
449
+ };
450
+ const MeganavControlMobilePanelOpen: ({ ariaControls, children, }: MeganavControlMobilePanelOpenProps) => import("react/jsx-runtime").JSX.Element;
451
+ export default MeganavControlMobilePanelOpen;
452
+ //# sourceMappingURL=MeganavControlMobilePanelOpen.d.ts.map
453
+ }
454
+
455
+ declare module '@ably/ui/core/MeganavItemsDesktop' {
456
+ import React from "react";
457
+ import { AbsUrl, MeganavPanels, MeganavPaths, MeganavTheme } from "@ably/ui/core/Meganav";
458
+ type MeganavDesktopItems = {
459
+ panels: MeganavPanels;
460
+ paths?: MeganavPaths;
461
+ theme: MeganavTheme;
462
+ absUrl: AbsUrl;
463
+ statusUrl: string;
464
+ };
465
+ const MeganavDesktopItems: ({ panels, paths, theme, absUrl, statusUrl, }: MeganavDesktopItems) => import("react/jsx-runtime").JSX.Element;
466
+ const _default: React.MemoExoticComponent<({ panels, paths, theme, absUrl, statusUrl, }: MeganavDesktopItems) => import("react/jsx-runtime").JSX.Element>;
467
+ export default _default;
468
+ //# sourceMappingURL=MeganavItemsDesktop.d.ts.map
469
+ }
470
+
471
+ declare module '@ably/ui/core/MeganavItemsMobile' {
472
+ import React from "react";
473
+ import { AbsUrl, MeganavPanels, MeganavPaths, MeganavSessionState, MeganavTheme } from "@ably/ui/core/Meganav";
474
+ type MeganavItemsMobileProps = {
475
+ panels: MeganavPanels;
476
+ paths?: MeganavPaths;
477
+ sessionState?: MeganavSessionState;
478
+ theme: MeganavTheme;
479
+ loginLink: string;
480
+ absUrl: AbsUrl;
481
+ statusUrl: string;
482
+ };
483
+ const _default: React.MemoExoticComponent<({ panels, paths, sessionState, theme, loginLink, absUrl, statusUrl, }: MeganavItemsMobileProps) => import("react/jsx-runtime").JSX.Element>;
484
+ export default _default;
485
+ //# sourceMappingURL=MeganavItemsMobile.d.ts.map
486
+ }
487
+
488
+ declare module '@ably/ui/core/MeganavItemsSignedIn' {
489
+ import { AbsUrl, MeganavSessionState, MeganavTheme } from "@ably/ui/core/Meganav";
490
+ type MeganavItemsSignedIn = {
491
+ sessionState: MeganavSessionState;
492
+ theme: MeganavTheme;
493
+ absUrl: AbsUrl;
494
+ };
495
+ const MeganavItemsSignedIn: ({ sessionState, absUrl, }: MeganavItemsSignedIn) => import("react/jsx-runtime").JSX.Element;
496
+ export default MeganavItemsSignedIn;
497
+ //# sourceMappingURL=MeganavItemsSignedIn.d.ts.map
498
+ }
499
+
500
+ declare module '@ably/ui/core/MeganavSearch' {
501
+ import { AbsUrl } from "@ably/ui/core/Meganav";
502
+ const MeganavSearch: ({ absUrl }: {
503
+ absUrl: AbsUrl;
504
+ }) => import("react/jsx-runtime").JSX.Element;
505
+ export default MeganavSearch;
506
+ //# sourceMappingURL=MeganavSearch.d.ts.map
507
+ }
508
+
509
+ declare module '@ably/ui/core/MeganavSearchAutocomplete/component' {
510
+ function _default(apiKey: any): {
511
+ teardown: () => void;
512
+ clear: () => void;
513
+ }[];
514
+ export default _default;
515
+ //# sourceMappingURL=component.d.ts.map
516
+ }
517
+
518
+ declare module '@ably/ui/core/MeganavSearchAutocomplete' {
519
+ const MeganavSearchAutocomplete: () => import("react/jsx-runtime").JSX.Element;
520
+ export default MeganavSearchAutocomplete;
521
+ //# sourceMappingURL=MeganavSearchAutocomplete.d.ts.map
522
+ }
523
+
524
+ declare module '@ably/ui/core/MeganavSearchPanel' {
525
+ import { AbsUrl } from "@ably/ui/core/Meganav";
526
+ const MeganavSearchPanel: ({ absUrl }: {
527
+ absUrl: AbsUrl;
528
+ }) => import("react/jsx-runtime").JSX.Element;
529
+ export default MeganavSearchPanel;
530
+ //# sourceMappingURL=MeganavSearchPanel.d.ts.map
531
+ }
532
+
533
+ declare module '@ably/ui/core/MeganavSearchSuggestions/component' {
534
+ export default MeganavSearchSuggestions;
535
+ function MeganavSearchSuggestions(): {
536
+ teardown: () => void;
537
+ clear: () => void;
538
+ };
539
+ //# sourceMappingURL=component.d.ts.map
540
+ }
541
+
542
+ declare module '@ably/ui/core/MeganavSearchSuggestions' {
543
+ import { AbsUrl } from "@ably/ui/core/Meganav";
544
+ type MeganavSearchSuggestionsProps = {
545
+ absUrl: AbsUrl;
546
+ displaySupportLink: boolean;
547
+ };
548
+ const MeganavSearchSuggestions: ({ absUrl, displaySupportLink, }: MeganavSearchSuggestionsProps) => import("react/jsx-runtime").JSX.Element;
549
+ export default MeganavSearchSuggestions;
550
+ //# sourceMappingURL=MeganavSearchSuggestions.d.ts.map
551
+ }
552
+
553
+ declare module '@ably/ui/core/Notice/component' {
554
+ export default Notice;
555
+ function Notice({ bannerContainer, cookieId, noticeId, options }: {
556
+ bannerContainer: any;
557
+ cookieId: any;
558
+ noticeId: any;
559
+ options: any;
560
+ }): () => void;
561
+ //# sourceMappingURL=component.d.ts.map
562
+ }
563
+
564
+ declare module '@ably/ui/core/Notice' {
565
+ type NoticeProps = {
566
+ buttonLink?: string;
567
+ buttonLabel?: string;
568
+ bodyText?: string;
569
+ title?: string;
570
+ closeBtn?: boolean;
571
+ config?: {
572
+ collapse: boolean;
573
+ noticeId: string;
574
+ cookieId: string;
575
+ };
576
+ bgColor?: string;
577
+ textColor?: string;
578
+ bannerContainer?: Element | null;
579
+ cookieId?: string;
580
+ noticeId?: string;
581
+ options?: {
582
+ collapse: boolean;
583
+ };
584
+ };
585
+ const Notice: ({ buttonLink, buttonLabel, bodyText, title, config, closeBtn, bgColor, textColor, }: NoticeProps) => import("react/jsx-runtime").JSX.Element;
586
+ export default Notice;
587
+ //# sourceMappingURL=Notice.d.ts.map
588
+ }
589
+
590
+ declare module '@ably/ui/core/SignOutLink' {
591
+ import { MouseEventHandler, ReactNode } from "react";
592
+ import { AbsUrl } from "@ably/ui/core/Meganav";
593
+ type SignOutLinkProps = {
594
+ token: string;
595
+ href: string;
596
+ text: string;
597
+ children: ({ href, text, onClick, }: {
598
+ href: string;
599
+ text: string;
600
+ onClick: MouseEventHandler<HTMLAnchorElement>;
601
+ }) => ReactNode;
602
+ absUrl: AbsUrl;
603
+ };
604
+ const SignOutLink: ({ token, href, text, children, absUrl, }: SignOutLinkProps) => import("react/jsx-runtime").JSX.Element;
605
+ export default SignOutLink;
606
+ //# sourceMappingURL=SignOutLink.d.ts.map
607
+ }
608
+
609
+ declare module '@ably/ui/core/Slider' {
610
+ import { ReactNode } from "react";
611
+ interface SliderProps {
612
+ children: ReactNode[];
613
+ options?: {
614
+ interval?: number;
615
+ controlPosition?: "inline" | "floating";
616
+ intervalIndicator?: boolean;
617
+ };
618
+ }
619
+ const Slider: ({ children, options }: SliderProps) => import("react/jsx-runtime").JSX.Element;
620
+ export default Slider;
621
+ //# sourceMappingURL=Slider.d.ts.map
622
+ }
623
+
624
+ declare module '@ably/ui/core/Status' {
625
+ const Status: ({ statusUrl, additionalCSS, }: {
626
+ statusUrl: string;
627
+ additionalCSS?: string;
628
+ }) => import("react/jsx-runtime").JSX.Element;
629
+ export default Status;
630
+ //# sourceMappingURL=Status.d.ts.map
631
+ }
632
+
633
+ declare module '@ably/ui/core/Table/Table' {
634
+ import { PropsWithChildren, TableHTMLAttributes } from "react";
635
+ type TableProps = {
636
+ id?: string;
637
+ };
638
+ export const Table: ({ id, children, ...rest }: PropsWithChildren<TableProps & TableHTMLAttributes<HTMLTableElement>>) => import("react/jsx-runtime").JSX.Element;
639
+ export const TableBody: ({ children, ...rest }: PropsWithChildren<TableHTMLAttributes<HTMLTableSectionElement>>) => import("react/jsx-runtime").JSX.Element;
640
+ export const TableHeader: ({ children, ...rest }: PropsWithChildren<TableHTMLAttributes<HTMLTableSectionElement>>) => import("react/jsx-runtime").JSX.Element;
641
+ export const TableRowHeader: ({ children, ...rest }: PropsWithChildren<TableHTMLAttributes<HTMLTableRowElement>>) => import("react/jsx-runtime").JSX.Element;
642
+ export {};
643
+ //# sourceMappingURL=Table.d.ts.map
644
+ }
645
+
646
+ declare module '@ably/ui/core/Table/TableCell' {
647
+ import React, { PropsWithChildren } from "react";
648
+ type TableCellProps = {
649
+ isRowHeader?: boolean;
650
+ } & React.TdHTMLAttributes<HTMLTableCellElement>;
651
+ const LabelCell: ({ children, ...rest }: PropsWithChildren<React.TdHTMLAttributes<HTMLTableCellElement>>) => import("react/jsx-runtime").JSX.Element;
652
+ const TableCell: ({ children, isRowHeader, ...rest }: PropsWithChildren<TableCellProps>) => import("react/jsx-runtime").JSX.Element;
653
+ const HeaderCell: ({ children, ...rest }: PropsWithChildren<React.TdHTMLAttributes<HTMLTableCellElement>>) => import("react/jsx-runtime").JSX.Element;
654
+ const CtaCell: ({ children, ...rest }: PropsWithChildren<React.TdHTMLAttributes<HTMLTableCellElement>>) => import("react/jsx-runtime").JSX.Element;
655
+ export { TableCell, LabelCell, HeaderCell, CtaCell };
656
+ //# sourceMappingURL=TableCell.d.ts.map
657
+ }
658
+
659
+ declare module '@ably/ui/core/Table/TableRow' {
660
+ import React, { PropsWithChildren } from "react";
661
+ const CtaRow: ({ children }: PropsWithChildren) => import("react/jsx-runtime").JSX.Element;
662
+ type RowProps = {
663
+ isHeader?: boolean;
664
+ } & React.HTMLAttributes<HTMLTableRowElement>;
665
+ const TableRow: ({ children, isHeader, ...rest }: PropsWithChildren<RowProps>) => import("react/jsx-runtime").JSX.Element;
666
+ export { TableRow, CtaRow };
667
+ //# sourceMappingURL=TableRow.d.ts.map
668
+ }
669
+
670
+ declare module '@ably/ui/core/Table/data' {
671
+ export const PricingPageTable: () => import("react/jsx-runtime").JSX.Element;
672
+ //# sourceMappingURL=data.d.ts.map
673
+ }
674
+
675
+ declare module '@ably/ui/core/Table' {
676
+ const _default: {
677
+ Root: ({ id, children, ...rest }: import("react").PropsWithChildren<{
678
+ id?: string;
679
+ } & import("react").TableHTMLAttributes<HTMLTableElement>>) => import("react/jsx-runtime").JSX.Element;
680
+ Row: ({ children, isHeader, ...rest }: import("react").PropsWithChildren<{
681
+ isHeader?: boolean;
682
+ } & import("react").HTMLAttributes<HTMLTableRowElement>>) => import("react/jsx-runtime").JSX.Element;
683
+ Cell: ({ children, isRowHeader, ...rest }: import("react").PropsWithChildren<{
684
+ isRowHeader?: boolean;
685
+ } & import("react").TdHTMLAttributes<HTMLTableCellElement>>) => import("react/jsx-runtime").JSX.Element;
686
+ LabelCell: ({ children, ...rest }: import("react").PropsWithChildren<import("react").TdHTMLAttributes<HTMLTableCellElement>>) => import("react/jsx-runtime").JSX.Element;
687
+ HeaderCell: ({ children, ...rest }: import("react").PropsWithChildren<import("react").TdHTMLAttributes<HTMLTableCellElement>>) => import("react/jsx-runtime").JSX.Element;
688
+ CtaCell: ({ children, ...rest }: import("react").PropsWithChildren<import("react").TdHTMLAttributes<HTMLTableCellElement>>) => import("react/jsx-runtime").JSX.Element;
689
+ RowHeader: ({ children, ...rest }: import("react").PropsWithChildren<import("react").TableHTMLAttributes<HTMLTableRowElement>>) => import("react/jsx-runtime").JSX.Element;
690
+ Body: ({ children, ...rest }: import("react").PropsWithChildren<import("react").TableHTMLAttributes<HTMLTableSectionElement>>) => import("react/jsx-runtime").JSX.Element;
691
+ Header: ({ children, ...rest }: import("react").PropsWithChildren<import("react").TableHTMLAttributes<HTMLTableSectionElement>>) => import("react/jsx-runtime").JSX.Element;
692
+ };
693
+ export default _default;
694
+ //# sourceMappingURL=Table.d.ts.map
695
+ }
696
+
697
+ declare module '@ably/ui/core/Tooltip' {
698
+ import { ButtonHTMLAttributes, HTMLAttributes, PropsWithChildren } from "react";
699
+ type TooltipProps = {
700
+ triggerProps?: ButtonHTMLAttributes<HTMLButtonElement>;
701
+ tooltipProps?: HTMLAttributes<HTMLDivElement>;
702
+ } & HTMLAttributes<HTMLDivElement>;
703
+ const Tooltip: ({ children, triggerProps, tooltipProps, ...rest }: PropsWithChildren<TooltipProps>) => import("react/jsx-runtime").JSX.Element;
704
+ export default Tooltip;
705
+ //# sourceMappingURL=Tooltip.d.ts.map
706
+ }
707
+
708
+ declare module '@ably/ui/core/css' {
709
+ export function remsToPixelValue(remString: any): number;
710
+ //# sourceMappingURL=css.d.ts.map
711
+ }
712
+
713
+ declare module '@ably/ui/core/dom-query' {
714
+ export function queryId(val: any, root?: Document): Element | null;
715
+ export function queryIdAll(val: any, root?: Document): NodeListOf<Element>;
716
+ //# sourceMappingURL=dom-query.d.ts.map
717
+ }
718
+
719
+ declare module '@ably/ui/core/hubspot-chat-toggle' {
720
+ export default function toggleChatWidget(params: any): (() => void) | undefined;
721
+ //# sourceMappingURL=hubspot-chat-toggle.d.ts.map
722
+ }
723
+
724
+ declare module '@ably/ui/core/remote-blogs-posts' {
725
+ export function fetchBlogPosts(store: any, blogUrl: any): Promise<void>;
726
+ export namespace reducerBlogPosts {
727
+ function blogPosts(state: {
728
+ recent: null;
729
+ } | undefined, action: any): {
730
+ recent: any;
731
+ };
732
+ }
733
+ export function selectRecentBlogPosts(store: any): any;
734
+ //# sourceMappingURL=remote-blogs-posts.d.ts.map
735
+ }
736
+
737
+ declare module '@ably/ui/core/remote-data-store' {
738
+ export function attachStoreToWindow(store: any): void;
739
+ export function getRemoteDataStore(): any;
740
+ export function connectState(selector: any, setState: any): void;
741
+ export function createRemoteDataStore(reducers: any): any;
742
+ //# sourceMappingURL=remote-data-store.d.ts.map
743
+ }
744
+
745
+ declare module '@ably/ui/core/remote-data-util' {
746
+ export function isJsonResponse(contentType: any): any;
747
+ //# sourceMappingURL=remote-data-util.d.ts.map
748
+ }
749
+
750
+ declare module '@ably/ui/core/remote-session-data' {
751
+ export function fetchSessionData(store: any, sessionUrl: any): Promise<void>;
752
+ export namespace reducerSessionData {
753
+ function session(state: {
754
+ data: null;
755
+ } | undefined, action: any): {
756
+ data: any;
757
+ };
758
+ }
759
+ export function selectSessionData(store: any): any;
760
+ //# sourceMappingURL=remote-session-data.d.ts.map
761
+ }
762
+
763
+ declare module '@ably/ui/core/url-base' {
764
+ export default absUrl;
765
+ function absUrl(path: any, urlBase?: string): string;
766
+ //# sourceMappingURL=url-base.d.ts.map
767
+ }
768
+
769
+ declare module '@ably/ui/core/utils/syntax-highlighter-registry' {
770
+ export default registry;
771
+ const registry: {
772
+ label: string;
773
+ key: string;
774
+ module: any;
775
+ }[];
776
+ //# sourceMappingURL=syntax-highlighter-registry.d.ts.map
777
+ }
778
+
779
+ declare module '@ably/ui/core/utils/syntax-highlighter' {
780
+ export function highlightSnippet(languageKeyword: any, snippet: any): string | undefined;
781
+ export function languageToHighlightKey(lang: any): any;
782
+ export function registerDefaultLanguages(register: any): void;
783
+ //# sourceMappingURL=syntax-highlighter.d.ts.map
784
+ }
785
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ably/ui",
3
- "version": "14.3.4",
3
+ "version": "14.4.0-dev.1b6b1db",
4
4
  "description": "Home of the Ably design system library ([design.ably.com](https://design.ably.com)). It provides a showcase, development/test environment and a publishing pipeline for different distributables.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -11,30 +11,36 @@
11
11
  "core",
12
12
  "reset",
13
13
  "tailwind.config.js",
14
- "tailwind.extend.js"
14
+ "tailwind.extend.js",
15
+ "index.d.ts"
15
16
  ],
17
+ "types": "index.d.ts",
16
18
  "devDependencies": {
17
19
  "@storybook/addon-a11y": "^8.2.9",
18
20
  "@storybook/addon-essentials": "^8.2.9",
19
21
  "@storybook/addon-interactions": "^8.2.9",
20
22
  "@storybook/addon-links": "^8.2.9",
21
23
  "@storybook/blocks": "^8.2.9",
22
- "@storybook/react-vite": "^8.2.9",
23
24
  "@storybook/react": "^8.2.9",
24
- "@storybook/test-runner": "^0.19.1",
25
+ "@storybook/react-vite": "^8.2.9",
25
26
  "@storybook/test": "^8.2.9",
27
+ "@storybook/test-runner": "^0.19.1",
26
28
  "@swc/cli": "^0.4.0",
27
29
  "@swc/core": "^1.4.11",
30
+ "@types/dompurify": "^3.0.5",
31
+ "@types/js-cookie": "^3.0.6",
32
+ "@types/lodash.throttle": "^4.1.9",
28
33
  "@typescript-eslint/eslint-plugin": "^7.0.0",
29
34
  "@typescript-eslint/parser": "^6.21.0",
30
35
  "@vitejs/plugin-react": "^4.2.1",
31
36
  "autoprefixer": "^10.0.2",
37
+ "eslint": "^8.57.0",
32
38
  "eslint-config-prettier": "^9.1.0",
33
39
  "eslint-plugin-react": "^7.34.3",
34
40
  "eslint-plugin-storybook": "^0.8.0",
35
- "eslint": "^8.57.0",
36
- "msw-storybook-addon": "^2.0.2",
41
+ "http-server": "14.1.1",
37
42
  "msw": "2.3.5",
43
+ "msw-storybook-addon": "^2.0.2",
38
44
  "prettier": "^3.2.5",
39
45
  "storybook": "^8.2.9",
40
46
  "svg-sprite": "^2.0.4",
@@ -44,9 +50,10 @@
44
50
  },
45
51
  "scripts": {
46
52
  "build:prebuild": "rm -rf core reset",
47
- "build:swc": "swc src/core src/reset -d dist --quiet --copy-files --include-dotfiles --strip-leading-paths --config-file .swc --ignore **/*.stories.tsx,**/*.snap" ,
53
+ "build:swc": "swc src/core src/reset -d dist --copy-files --include-dotfiles --strip-leading-paths --config-file .swc --ignore **/*.stories.tsx,**/*.snap",
54
+ "build:tsc": "tsc && node tsc.js && rm -r types",
48
55
  "build:cleanup": "mv dist/* . && rm -r dist",
49
- "build": "yarn build:prebuild && yarn build:swc && node sprites.js && yarn build:cleanup",
56
+ "build": "yarn build:prebuild && yarn build:swc && node sprites.js && yarn build:tsc && yarn build:cleanup",
50
57
  "watch": "yarn build:swc -w",
51
58
  "format:check": "prettier -c *.{js,ts} src/**/*.{js,ts,tsx}",
52
59
  "format:write": "prettier -w *.{js,ts} src/**/*.{js,ts,tsx}",
@@ -57,9 +64,8 @@
57
64
  "start": "vite --port 5000",
58
65
  "storybook": "yarn build && storybook dev -p 6006",
59
66
  "build-storybook": "yarn build && storybook build --quiet -o preview",
60
- "test": "npx concurrently -k -s first -n \"SB,TEST\" -c \"magenta,blue\" \"yarn build-storybook && npx http-server preview --port 6007 --silent\" \"wait-on tcp:6007 && yarn test-storybook --url http://127.0.0.1:6007\"",
61
- "test:update-snapshots": "npx concurrently -k -s first -n \"SB,TEST\" -c \"magenta,blue\" \"yarn build-storybook && npx http-server preview --port 6007 --silent\" \"wait-on tcp:6007 && yarn test-storybook -u --url http://127.0.0.1:6007\""
62
-
67
+ "test": "npx concurrently -k -s first -n \"SB,TEST\" -c \"magenta,blue\" \"yarn build-storybook && yarn http-server preview --port 6007 --silent\" \"wait-on tcp:6007 && yarn test-storybook --url http://127.0.0.1:6007\"",
68
+ "test:update-snapshots": "npx concurrently -k -s first -n \"SB,TEST\" -c \"magenta,blue\" \"yarn build-storybook && yarn http-server preview --port 6007 --silent\" \"wait-on tcp:6007 && yarn test-storybook -u --url http://127.0.0.1:6007\""
63
69
  },
64
70
  "dependencies": {
65
71
  "addsearch-js-client": "^0.8.11",
@@ -69,8 +75,8 @@
69
75
  "highlightjs-curl": "^1.3.0",
70
76
  "js-cookie": "^3.0.5",
71
77
  "lodash.throttle": "^4.1.1",
72
- "react-dom": "^18.2.0",
73
78
  "react": "^18.2.0",
79
+ "react-dom": "^18.2.0",
74
80
  "redux": "^4.0.5",
75
81
  "scroll-lock": "^2.1.4"
76
82
  },