@ably/ui 17.4.2 → 17.4.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 (339) hide show
  1. package/AGENTS.md +573 -0
  2. package/README.md +120 -68
  3. package/core/Accordion/types.js.map +1 -1
  4. package/core/Accordion/utils.js +1 -1
  5. package/core/Accordion/utils.js.map +1 -1
  6. package/core/Accordion.js +1 -1
  7. package/core/Accordion.js.map +1 -1
  8. package/core/Badge.js +1 -1
  9. package/core/Badge.js.map +1 -1
  10. package/core/Code/Code.test.js +2 -0
  11. package/core/Code/Code.test.js.map +1 -0
  12. package/core/Code.js +1 -1
  13. package/core/Code.js.map +1 -1
  14. package/core/CodeSnippet/ApiKeySelector.js +1 -1
  15. package/core/CodeSnippet/ApiKeySelector.js.map +1 -1
  16. package/core/CodeSnippet/CodeSnippet.test.js +2 -0
  17. package/core/CodeSnippet/CodeSnippet.test.js.map +1 -0
  18. package/core/CodeSnippet/CopyButton.js +1 -1
  19. package/core/CodeSnippet/CopyButton.js.map +1 -1
  20. package/core/CodeSnippet/LanguageSelector.js +1 -1
  21. package/core/CodeSnippet/LanguageSelector.js.map +1 -1
  22. package/core/CodeSnippet/PlainCodeView.js +1 -1
  23. package/core/CodeSnippet/PlainCodeView.js.map +1 -1
  24. package/core/CodeSnippet/TooltipButton.js +1 -1
  25. package/core/CodeSnippet/TooltipButton.js.map +1 -1
  26. package/core/CodeSnippet/languages.js +1 -1
  27. package/core/CodeSnippet/languages.js.map +1 -1
  28. package/core/CodeSnippet/languages.test.js +2 -0
  29. package/core/CodeSnippet/languages.test.js.map +1 -0
  30. package/core/CodeSnippet.js +1 -1
  31. package/core/CodeSnippet.js.map +1 -1
  32. package/core/ConnectStateWrapper.js.map +1 -1
  33. package/core/ContentTile.js +2 -0
  34. package/core/ContentTile.js.map +1 -0
  35. package/core/DropdownMenu.js +1 -1
  36. package/core/DropdownMenu.js.map +1 -1
  37. package/core/Expander.js +1 -1
  38. package/core/Expander.js.map +1 -1
  39. package/core/FeaturedLink.js +1 -1
  40. package/core/FeaturedLink.js.map +1 -1
  41. package/core/Flash.js +1 -1
  42. package/core/Flash.js.map +1 -1
  43. package/core/Flyout.js +1 -1
  44. package/core/Flyout.js.map +1 -1
  45. package/core/Footer/data.js +1 -1
  46. package/core/Footer/data.js.map +1 -1
  47. package/core/Footer.js +1 -1
  48. package/core/Footer.js.map +1 -1
  49. package/core/Header/HeaderLinks.js +1 -1
  50. package/core/Header/HeaderLinks.js.map +1 -1
  51. package/core/Header/types.js +2 -0
  52. package/core/Header/types.js.map +1 -0
  53. package/core/Header.js +1 -1
  54. package/core/Header.js.map +1 -1
  55. package/core/Icon/components/icon-display-cloud-servers-mono.js +2 -0
  56. package/core/Icon/components/icon-display-cloud-servers-mono.js.map +1 -0
  57. package/core/Icon/components/icon-display-data-integrity.js +2 -0
  58. package/core/Icon/components/icon-display-data-integrity.js.map +1 -0
  59. package/core/Icon/components/icon-display-database-connector.js +2 -0
  60. package/core/Icon/components/icon-display-database-connector.js.map +1 -0
  61. package/core/Icon/components/icon-display-ephemeral-messages-dark-col.js +2 -0
  62. package/core/Icon/components/icon-display-ephemeral-messages-dark-col.js.map +1 -0
  63. package/core/Icon/components/icon-display-ephemeral-messages.js +2 -0
  64. package/core/Icon/components/icon-display-ephemeral-messages.js.map +1 -0
  65. package/core/Icon/components/icon-display-live-updates.js +2 -0
  66. package/core/Icon/components/icon-display-live-updates.js.map +1 -0
  67. package/core/Icon/components/icon-display-message-annotations-dark-col.js +2 -0
  68. package/core/Icon/components/icon-display-message-annotations-dark-col.js.map +1 -0
  69. package/core/Icon/components/icon-display-message-annotations.js +2 -0
  70. package/core/Icon/components/icon-display-message-annotations.js.map +1 -0
  71. package/core/Icon/components/icon-display-multi-user-spaces.js +2 -0
  72. package/core/Icon/components/icon-display-multi-user-spaces.js.map +1 -0
  73. package/core/Icon/components/icon-display-sdks.js +2 -0
  74. package/core/Icon/components/icon-display-sdks.js.map +1 -0
  75. package/core/Icon/components/icon-display-something-else-mono.js +2 -0
  76. package/core/Icon/components/icon-display-something-else-mono.js.map +1 -0
  77. package/core/Icon/components/icon-display-something-else.js +2 -0
  78. package/core/Icon/components/icon-display-something-else.js.map +1 -0
  79. package/core/Icon/components/icon-display-ui-mono.js +2 -0
  80. package/core/Icon/components/icon-display-ui-mono.js.map +1 -0
  81. package/core/Icon/components/icon-display-ui.js +2 -0
  82. package/core/Icon/components/icon-display-ui.js.map +1 -0
  83. package/core/Icon/components/icon-gui-checklist-checked.js +1 -1
  84. package/core/Icon/components/icon-gui-checklist-checked.js.map +1 -1
  85. package/core/Icon/components/icon-gui-code-doc.js +1 -1
  86. package/core/Icon/components/icon-gui-code-doc.js.map +1 -1
  87. package/core/Icon/components/icon-gui-cursor.js +1 -1
  88. package/core/Icon/components/icon-gui-cursor.js.map +1 -1
  89. package/core/Icon/components/icon-gui-expand.js +1 -1
  90. package/core/Icon/components/icon-gui-expand.js.map +1 -1
  91. package/core/Icon/components/icon-gui-filter-flow-step-0.js +1 -1
  92. package/core/Icon/components/icon-gui-filter-flow-step-0.js.map +1 -1
  93. package/core/Icon/components/icon-gui-flower-growth.js +1 -1
  94. package/core/Icon/components/icon-gui-flower-growth.js.map +1 -1
  95. package/core/Icon/components/icon-gui-glasses.js +1 -1
  96. package/core/Icon/components/icon-gui-glasses.js.map +1 -1
  97. package/core/Icon/components/icon-gui-heartbeat-outline.js +2 -0
  98. package/core/Icon/components/icon-gui-heartbeat-outline.js.map +1 -0
  99. package/core/Icon/components/icon-gui-heartbeat-solid.js +2 -0
  100. package/core/Icon/components/icon-gui-heartbeat-solid.js.map +1 -0
  101. package/core/Icon/components/icon-gui-mouse.js +1 -1
  102. package/core/Icon/components/icon-gui-mouse.js.map +1 -1
  103. package/core/Icon/components/icon-gui-pitfall.js +1 -1
  104. package/core/Icon/components/icon-gui-pitfall.js.map +1 -1
  105. package/core/Icon/components/icon-gui-prod-ai-transport-outline.js +2 -0
  106. package/core/Icon/components/icon-gui-prod-ai-transport-outline.js.map +1 -0
  107. package/core/Icon/components/icon-gui-prod-ai-transport-solid.js +2 -0
  108. package/core/Icon/components/icon-gui-prod-ai-transport-solid.js.map +1 -0
  109. package/core/Icon/components/icon-gui-quote-marks-fill.js +1 -1
  110. package/core/Icon/components/icon-gui-quote-marks-fill.js.map +1 -1
  111. package/core/Icon/components/icon-product-ai-transport-mono.js +2 -0
  112. package/core/Icon/components/icon-product-ai-transport-mono.js.map +1 -0
  113. package/core/Icon/components/icon-product-ai-transport.js +2 -0
  114. package/core/Icon/components/icon-product-ai-transport.js.map +1 -0
  115. package/core/Icon/components/icon-product-chat-mono.js +1 -1
  116. package/core/Icon/components/icon-product-chat-mono.js.map +1 -1
  117. package/core/Icon/components/icon-product-liveobjects-mono.js +1 -1
  118. package/core/Icon/components/icon-product-liveobjects-mono.js.map +1 -1
  119. package/core/Icon/components/icon-product-livesync-mono.js +1 -1
  120. package/core/Icon/components/icon-product-livesync-mono.js.map +1 -1
  121. package/core/Icon/components/icon-product-pubsub-mono.js +1 -1
  122. package/core/Icon/components/icon-product-pubsub-mono.js.map +1 -1
  123. package/core/Icon/components/icon-product-spaces-mono.js +1 -1
  124. package/core/Icon/components/icon-product-spaces-mono.js.map +1 -1
  125. package/core/Icon/components/icon-tech-claude-mono.js +2 -0
  126. package/core/Icon/components/icon-tech-claude-mono.js.map +1 -0
  127. package/core/Icon/components/icon-tech-claude.js +2 -0
  128. package/core/Icon/components/icon-tech-claude.js.map +1 -0
  129. package/core/Icon/components/icon-tech-jetpack.js +2 -0
  130. package/core/Icon/components/icon-tech-jetpack.js.map +1 -0
  131. package/core/Icon/components/icon-tech-terraform-outline.js +2 -0
  132. package/core/Icon/components/icon-tech-terraform-outline.js.map +1 -0
  133. package/core/Icon/components/index.js +1 -1
  134. package/core/Icon/components/index.js.map +1 -1
  135. package/core/Icon/computed-icons/display-icons.js +1 -1
  136. package/core/Icon/computed-icons/display-icons.js.map +1 -1
  137. package/core/Icon/computed-icons/gui-icons.js +1 -1
  138. package/core/Icon/computed-icons/gui-icons.js.map +1 -1
  139. package/core/Icon/computed-icons/product-icons.js +1 -1
  140. package/core/Icon/computed-icons/product-icons.js.map +1 -1
  141. package/core/Icon/computed-icons/tech-icons.js +1 -1
  142. package/core/Icon/computed-icons/tech-icons.js.map +1 -1
  143. package/core/Icon.js +1 -1
  144. package/core/Icon.js.map +1 -1
  145. package/core/LinkButton.js +1 -1
  146. package/core/LinkButton.js.map +1 -1
  147. package/core/Logo.js +1 -1
  148. package/core/Logo.js.map +1 -1
  149. package/core/Meganav/MeganavBlog.js +2 -0
  150. package/core/Meganav/MeganavBlog.js.map +1 -0
  151. package/core/Meganav/MeganavCustomerStories.js +2 -0
  152. package/core/Meganav/MeganavCustomerStories.js.map +1 -0
  153. package/core/Meganav/MeganavMobile.js +1 -1
  154. package/core/Meganav/MeganavMobile.js.map +1 -1
  155. package/core/Meganav/MeganavPanel.js +1 -1
  156. package/core/Meganav/MeganavPanel.js.map +1 -1
  157. package/core/Meganav/MeganavPanelItemLinks.js +2 -0
  158. package/core/Meganav/MeganavPanelItemLinks.js.map +1 -0
  159. package/core/Meganav/MeganavTile.js +2 -0
  160. package/core/Meganav/MeganavTile.js.map +1 -0
  161. package/core/Meganav/PanelTitle.js +2 -0
  162. package/core/Meganav/PanelTitle.js.map +1 -0
  163. package/core/Meganav/data.js +1 -1
  164. package/core/Meganav/data.js.map +1 -1
  165. package/core/Meganav/images/cust-logo-doxy-dark.png +0 -0
  166. package/core/Meganav/images/cust-logo-doxy-light.png +0 -0
  167. package/core/Meganav/utils/getMenuItemsForHeader.js +2 -0
  168. package/core/Meganav/utils/getMenuItemsForHeader.js.map +1 -0
  169. package/core/Meganav.js +1 -1
  170. package/core/Meganav.js.map +1 -1
  171. package/core/Notice/component.css +9 -3
  172. package/core/Notice/component.js +1 -1
  173. package/core/Notice/component.js.map +1 -1
  174. package/core/Notice.js +1 -1
  175. package/core/Notice.js.map +1 -1
  176. package/core/Pricing/PricingCards.js +1 -1
  177. package/core/Pricing/PricingCards.js.map +1 -1
  178. package/core/Pricing/data.js +1 -1
  179. package/core/Pricing/data.js.map +1 -1
  180. package/core/Pricing/types.js.map +1 -1
  181. package/core/ProductTile/ProductDescription.js +1 -1
  182. package/core/ProductTile/ProductDescription.js.map +1 -1
  183. package/core/ProductTile/ProductIcon.js +1 -1
  184. package/core/ProductTile/ProductIcon.js.map +1 -1
  185. package/core/ProductTile/ProductLabel.js +1 -1
  186. package/core/ProductTile/ProductLabel.js.map +1 -1
  187. package/core/ProductTile/data.js +1 -1
  188. package/core/ProductTile/data.js.map +1 -1
  189. package/core/ProductTile.js +1 -1
  190. package/core/ProductTile.js.map +1 -1
  191. package/core/SegmentedControl.js +1 -1
  192. package/core/SegmentedControl.js.map +1 -1
  193. package/core/Slider/component.js +1 -1
  194. package/core/Slider/component.js.map +1 -1
  195. package/core/Slider.js +1 -1
  196. package/core/Slider.js.map +1 -1
  197. package/core/TabMenu.js +1 -1
  198. package/core/TabMenu.js.map +1 -1
  199. package/core/Table/data.js +1 -1
  200. package/core/Table/data.js.map +1 -1
  201. package/core/Toggle.js +1 -1
  202. package/core/Toggle.js.map +1 -1
  203. package/core/Tooltip.js +1 -1
  204. package/core/Tooltip.js.map +1 -1
  205. package/core/fonts/NEXT-Book-Light-Italic.eot +0 -0
  206. package/core/fonts/NEXT-Book-Light-Italic.otf +0 -0
  207. package/core/fonts/NEXT-Book-Light-Italic.woff +0 -0
  208. package/core/fonts/NEXT-Book-Light-Italic.woff2 +0 -0
  209. package/core/fonts/NEXT-Book-Light.eot +0 -0
  210. package/core/fonts/NEXT-Book-Light.otf +0 -0
  211. package/core/fonts/NEXT-Book-Light.woff +0 -0
  212. package/core/fonts/NEXT-Book-Light.woff2 +0 -0
  213. package/core/fonts/NEXT-Book-Medium-Italic.eot +0 -0
  214. package/core/fonts/NEXT-Book-Medium-Italic.otf +0 -0
  215. package/core/fonts/NEXT-Book-Medium-Italic.woff +0 -0
  216. package/core/fonts/NEXT-Book-Medium-Italic.woff2 +0 -0
  217. package/core/fonts/NEXT-Book-Medium.eot +0 -0
  218. package/core/fonts/NEXT-Book-Medium.otf +0 -0
  219. package/core/fonts/NEXT-Book-Medium.woff +0 -0
  220. package/core/fonts/NEXT-Book-Medium.woff2 +0 -0
  221. package/core/hooks/use-content-height.js +2 -0
  222. package/core/hooks/use-content-height.js.map +1 -0
  223. package/core/hooks/use-themed-scrollpoints.js +2 -0
  224. package/core/hooks/use-themed-scrollpoints.js.map +1 -0
  225. package/core/hooks/use-themed-scrollpoints.test.js +2 -0
  226. package/core/hooks/use-themed-scrollpoints.test.js.map +1 -0
  227. package/core/icons/display/icon-display-cloud-servers-mono.svg +3 -0
  228. package/core/icons/display/icon-display-data-integrity.svg +9 -0
  229. package/core/icons/display/icon-display-database-connector.svg +13 -0
  230. package/core/icons/display/icon-display-ephemeral-messages-dark-col.svg +6 -0
  231. package/core/icons/display/icon-display-ephemeral-messages.svg +6 -0
  232. package/core/icons/display/icon-display-live-updates.svg +8 -0
  233. package/core/icons/display/icon-display-message-annotations-dark-col.svg +11 -0
  234. package/core/icons/display/icon-display-message-annotations.svg +11 -0
  235. package/core/icons/display/icon-display-multi-user-spaces.svg +13 -0
  236. package/core/icons/display/icon-display-sdks.svg +11 -0
  237. package/core/icons/display/icon-display-something-else-mono.svg +4 -0
  238. package/core/icons/display/icon-display-something-else.svg +4 -0
  239. package/core/icons/display/icon-display-ui-mono.svg +22 -0
  240. package/core/icons/display/icon-display-ui.svg +22 -0
  241. package/core/icons/gui/icon-gui-checklist-checked.svg +1 -1
  242. package/core/icons/gui/icon-gui-code-doc.svg +1 -1
  243. package/core/icons/gui/icon-gui-cursor.svg +1 -1
  244. package/core/icons/gui/icon-gui-expand.svg +1 -1
  245. package/core/icons/gui/icon-gui-filter-flow-step-0.svg +3 -3
  246. package/core/icons/gui/icon-gui-flower-growth.svg +1 -1
  247. package/core/icons/gui/icon-gui-glasses.svg +1 -1
  248. package/core/icons/gui/icon-gui-heartbeat-outline.svg +4 -0
  249. package/core/icons/gui/icon-gui-heartbeat-solid.svg +4 -0
  250. package/core/icons/gui/icon-gui-mouse.svg +1 -1
  251. package/core/icons/gui/icon-gui-pitfall.svg +1 -1
  252. package/core/icons/gui/icon-gui-prod-ai-transport-outline.svg +5 -0
  253. package/core/icons/gui/icon-gui-prod-ai-transport-solid.svg +5 -0
  254. package/core/icons/gui/icon-gui-quote-marks-fill.svg +2 -2
  255. package/core/icons/product/icon-product-ai-transport-mono.svg +5 -0
  256. package/core/icons/product/icon-product-ai-transport.svg +12 -0
  257. package/core/icons/product/icon-product-chat-mono.svg +1 -1
  258. package/core/icons/product/icon-product-liveobjects-mono.svg +1 -4
  259. package/core/icons/product/icon-product-livesync-mono.svg +4 -4
  260. package/core/icons/product/icon-product-pubsub-mono.svg +1 -1
  261. package/core/icons/product/icon-product-spaces-mono.svg +1 -1
  262. package/core/icons/tech/icon-tech-claude-mono.svg +5 -0
  263. package/core/icons/tech/icon-tech-claude.svg +3 -0
  264. package/core/icons/tech/icon-tech-jetpack.svg +1 -0
  265. package/core/icons/tech/icon-tech-terraform-outline.svg +5 -0
  266. package/core/images/badges/g2-best-meets-requirements-spring-2025.svg +26 -0
  267. package/core/images/badges/g2-best-results-spring-2025.svg +26 -0
  268. package/core/images/badges/g2-best-support-spring-2025.svg +26 -0
  269. package/core/images/badges/g2-easiest-to-use-spring-2025.svg +26 -0
  270. package/core/images/badges/g2-users-most-likely-to-recommend-spring-2025.svg +26 -0
  271. package/core/images/cust-logo-mentimeter-mono-pos.svg +0 -0
  272. package/core/insights/command-queue.js +1 -1
  273. package/core/insights/command-queue.js.map +1 -1
  274. package/core/insights/datalayer.js +1 -1
  275. package/core/insights/datalayer.js.map +1 -1
  276. package/core/insights/index.js +1 -1
  277. package/core/insights/index.js.map +1 -1
  278. package/core/insights/index.test.js +1 -1
  279. package/core/insights/index.test.js.map +1 -1
  280. package/core/insights/mixpanel.js +1 -1
  281. package/core/insights/mixpanel.js.map +1 -1
  282. package/core/insights/mixpanel.test.js +2 -0
  283. package/core/insights/mixpanel.test.js.map +1 -0
  284. package/core/insights/posthog.js +1 -1
  285. package/core/insights/posthog.js.map +1 -1
  286. package/core/insights/posthog.test.js +2 -0
  287. package/core/insights/posthog.test.js.map +1 -0
  288. package/core/insights/service.js +1 -1
  289. package/core/insights/service.js.map +1 -1
  290. package/core/insights/types.js.map +1 -1
  291. package/core/react-renderer.js.map +1 -1
  292. package/core/sprites-display.svg +1 -1
  293. package/core/sprites-gui.svg +1 -1
  294. package/core/sprites-product.svg +1 -1
  295. package/core/sprites-tech.svg +1 -1
  296. package/core/styles/buttons.css +6 -6
  297. package/core/styles/colors/types.js +1 -1
  298. package/core/styles/colors/types.js.map +1 -1
  299. package/core/styles/forms.css +5 -5
  300. package/core/styles/legacy-buttons.css +8 -8
  301. package/core/styles/properties.css +4 -4
  302. package/core/styles/text.css +2 -2
  303. package/core/styles.components.css +4 -4
  304. package/core/utils/syntax-highlighter.css +31 -0
  305. package/core/utils/syntax-highlighter.js +1 -1
  306. package/core/utils/syntax-highlighter.js.map +1 -1
  307. package/core/utils/syntax-highlighter.test.js +2 -0
  308. package/core/utils/syntax-highlighter.test.js.map +1 -0
  309. package/index.d.ts +1201 -118
  310. package/package.json +66 -59
  311. package/tailwind.config.js +2 -2
  312. package/core/CookieMessage/component.css +0 -15
  313. package/core/CookieMessage.js +0 -2
  314. package/core/CookieMessage.js.map +0 -1
  315. package/core/Icon/components/icon-display-asset-tracking-col.js +0 -2
  316. package/core/Icon/components/icon-display-asset-tracking-col.js.map +0 -1
  317. package/core/Icon/components/icon-gui-prod-asset-tracking-outline.js +0 -2
  318. package/core/Icon/components/icon-gui-prod-asset-tracking-outline.js.map +0 -1
  319. package/core/Icon/components/icon-gui-prod-asset-tracking-solid.js +0 -2
  320. package/core/Icon/components/icon-gui-prod-asset-tracking-solid.js.map +0 -1
  321. package/core/Icon/components/icon-product-asset-tracking-mono.js +0 -2
  322. package/core/Icon/components/icon-product-asset-tracking-mono.js.map +0 -1
  323. package/core/Icon/components/icon-product-asset-tracking.js +0 -2
  324. package/core/Icon/components/icon-product-asset-tracking.js.map +0 -1
  325. package/core/Meganav/MeganavProductTile.js +0 -2
  326. package/core/Meganav/MeganavProductTile.js.map +0 -1
  327. package/core/Meganav/images/fan-engagement-nav-image.png +0 -0
  328. package/core/Meganav/images/founders-nav-image.png +0 -0
  329. package/core/icons/display/icon-display-asset-tracking-col.svg +0 -18
  330. package/core/icons/gui/icon-gui-prod-asset-tracking-outline.svg +0 -3
  331. package/core/icons/gui/icon-gui-prod-asset-tracking-solid.svg +0 -3
  332. package/core/icons/product/icon-product-asset-tracking-mono.svg +0 -3
  333. package/core/icons/product/icon-product-asset-tracking.svg +0 -12
  334. package/core/images/g2-best-meets-requirements-2025.svg +0 -10
  335. package/core/images/g2-best-support-2025.svg +0 -10
  336. package/core/images/g2-high-performer-2025.svg +0 -9
  337. package/core/images/g2-users-most-likely-to-recommend-2025.svg +0 -10
  338. package/core/utils/useCopyToClipboard.js +0 -2
  339. package/core/utils/useCopyToClipboard.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/Icon/computed-icons/tech-icons.ts"],"sourcesContent":["// AUTOGENERATED BY generate-icons - DO NOT EDIT\n\nexport const techIcons = [\n \"icon-tech-ably\",\n \"icon-tech-ably-api-streamer\",\n \"icon-tech-ably-firehose\",\n \"icon-tech-ably-native\",\n \"icon-tech-activemq\",\n \"icon-tech-activitypub\",\n \"icon-tech-aerospike\",\n \"icon-tech-akka\",\n \"icon-tech-amazon-ec2\",\n \"icon-tech-amazon-event-bridge\",\n \"icon-tech-amqp091\",\n \"icon-tech-amqp10\",\n \"icon-tech-android-full\",\n \"icon-tech-android-head\",\n \"icon-tech-angular\",\n \"icon-tech-anycable\",\n \"icon-tech-apache-cassandra\",\n \"icon-tech-apache-cordova\",\n \"icon-tech-apache-kafka\",\n \"icon-tech-apache-spark\",\n \"icon-tech-apachepulsar\",\n \"icon-tech-apachestorm\",\n \"icon-tech-apns\",\n \"icon-tech-assemblyai\",\n \"icon-tech-atmosphere\",\n \"icon-tech-aws\",\n \"icon-tech-aws-app-sync\",\n \"icon-tech-aws-aurora\",\n \"icon-tech-aws-gateway-websockets\",\n \"icon-tech-aws-sns\",\n \"icon-tech-aws-sqs\",\n \"icon-tech-awsiot\",\n \"icon-tech-awskinesis\",\n \"icon-tech-awslambda\",\n \"icon-tech-awssqs\",\n \"icon-tech-azure-api\",\n \"icon-tech-azure-archive-api\",\n \"icon-tech-azure-bus\",\n \"icon-tech-azure-cosmos\",\n \"icon-tech-azure-event-hub\",\n \"icon-tech-azure-functions\",\n \"icon-tech-azure-search\",\n \"icon-tech-azure-static-web-app\",\n \"icon-tech-azure-static-web-apps\",\n \"icon-tech-azure-storage\",\n \"icon-tech-azure-web-pubsub\",\n \"icon-tech-azurefunctions\",\n \"icon-tech-azureservicebus\",\n \"icon-tech-azuresignalR\",\n \"icon-tech-bayeux\",\n \"icon-tech-c++\",\n \"icon-tech-centrifugo\",\n \"icon-tech-client-side-frameworks\",\n \"icon-tech-clojure\",\n \"icon-tech-cloudflare-durable-objects\",\n \"icon-tech-cloudflareworkers\",\n \"icon-tech-cocoa\",\n \"icon-tech-confluent\",\n \"icon-tech-cord\",\n \"icon-tech-csharp\",\n \"icon-tech-curl\",\n \"icon-tech-customwebhooks\",\n \"icon-tech-datadog\",\n \"icon-tech-design-patterns\",\n \"icon-tech-devplatforms\",\n \"icon-tech-diffusion-data\",\n \"icon-tech-django\",\n \"icon-tech-engineio\",\n \"icon-tech-event-driven-servers\",\n \"icon-tech-fanout-io\",\n \"icon-tech-fast-api\",\n \"icon-tech-fauna\",\n \"icon-tech-featherjs\",\n \"icon-tech-firebase\",\n \"icon-tech-firebase-cloud-messaging\",\n \"icon-tech-flutter\",\n \"icon-tech-gcloudbigquery\",\n \"icon-tech-gclouddataflow\",\n \"icon-tech-gcloudfunctions\",\n \"icon-tech-gcloudpubsub\",\n \"icon-tech-go\",\n \"icon-tech-grpc\",\n \"icon-tech-hivemq\",\n \"icon-tech-http2\",\n \"icon-tech-http3\",\n \"icon-tech-httprest\",\n \"icon-tech-idempotency\",\n \"icon-tech-ifttt\",\n \"icon-tech-integrations\",\n \"icon-tech-ios\",\n \"icon-tech-ios-generic\",\n \"icon-tech-ipados\",\n \"icon-tech-ipfs\",\n \"icon-tech-ironmq\",\n \"icon-tech-java\",\n \"icon-tech-javascript\",\n \"icon-tech-jms\",\n \"icon-tech-json\",\n \"icon-tech-json-web-tokens\",\n \"icon-tech-kaazing\",\n \"icon-tech-kotlin\",\n \"icon-tech-ksql-db\",\n \"icon-tech-kubernetes\",\n \"icon-tech-laravel-broadcast\",\n \"icon-tech-laravel-echo\",\n \"icon-tech-lightstreamer\",\n \"icon-tech-liveblocks\",\n \"icon-tech-longpolling\",\n \"icon-tech-macos\",\n \"icon-tech-matrix\",\n \"icon-tech-meteor\",\n \"icon-tech-mongo-db\",\n \"icon-tech-mono\",\n \"icon-tech-mqtt\",\n \"icon-tech-mysql\",\n \"icon-tech-native-script\",\n \"icon-tech-net\",\n \"icon-tech-netlify\",\n \"icon-tech-nextjs\",\n \"icon-tech-nkn\",\n \"icon-tech-nodejs\",\n \"icon-tech-objectivec\",\n \"icon-tech-openai\",\n \"icon-tech-parse-server\",\n \"icon-tech-php\",\n \"icon-tech-planetscale\",\n \"icon-tech-postgres\",\n \"icon-tech-prisma\",\n \"icon-tech-programminglanguages\",\n \"icon-tech-protcol-adaptors\",\n \"icon-tech-protocols\",\n \"icon-tech-pub-sub\",\n \"icon-tech-pubnub\",\n \"icon-tech-push-technology\",\n \"icon-tech-pusher\",\n \"icon-tech-python\",\n \"icon-tech-quic\",\n \"icon-tech-rabbitMQ\",\n \"icon-tech-railsactioncable\",\n \"icon-tech-react\",\n \"icon-tech-react-app\",\n \"icon-tech-reactnative\",\n \"icon-tech-redis\",\n \"icon-tech-redpanda\",\n \"icon-tech-replicache\",\n \"icon-tech-rethinkdb\",\n \"icon-tech-rocketmq\",\n \"icon-tech-ruby\",\n \"icon-tech-scala\",\n \"icon-tech-scaledrone\",\n \"icon-tech-serversentevents\",\n \"icon-tech-serversideframeworks\",\n \"icon-tech-signalR\",\n \"icon-tech-snowflake\",\n \"icon-tech-socketio\",\n \"icon-tech-sockjs\",\n \"icon-tech-solace\",\n \"icon-tech-spring\",\n \"icon-tech-stomp\",\n \"icon-tech-streamdata-io\",\n \"icon-tech-streamr\",\n \"icon-tech-swift\",\n \"icon-tech-symfony\",\n \"icon-tech-symfony-mercure\",\n \"icon-tech-tcp-ip\",\n \"icon-tech-tenefit\",\n \"icon-tech-terraform\",\n \"icon-tech-tvos\",\n \"icon-tech-twilio\",\n \"icon-tech-typescript\",\n \"icon-tech-udp-protocol\",\n \"icon-tech-unity\",\n \"icon-tech-vercel\",\n \"icon-tech-vscode\",\n \"icon-tech-vuejs\",\n \"icon-tech-wamp\",\n \"icon-tech-watchos\",\n \"icon-tech-web\",\n \"icon-tech-web-push\",\n \"icon-tech-webhooks\",\n \"icon-tech-webrtc\",\n \"icon-tech-websockets\",\n \"icon-tech-websub\",\n \"icon-tech-xamarin\",\n \"icon-tech-xhr-streaming\",\n \"icon-tech-xmpp\",\n \"icon-tech-zapier\",\n \"icon-tech-zeromq\"\n] as const;"],"names":["techIcons"],"mappings":"AAEA,OAAO,MAAMA,UAAY,CACvB,iBACA,8BACA,0BACA,wBACA,qBACA,wBACA,sBACA,iBACA,uBACA,gCACA,oBACA,mBACA,yBACA,yBACA,oBACA,qBACA,6BACA,2BACA,yBACA,yBACA,yBACA,wBACA,iBACA,uBACA,uBACA,gBACA,yBACA,uBACA,mCACA,oBACA,oBACA,mBACA,uBACA,sBACA,mBACA,sBACA,8BACA,sBACA,yBACA,4BACA,4BACA,yBACA,iCACA,kCACA,0BACA,6BACA,2BACA,4BACA,yBACA,mBACA,gBACA,uBACA,mCACA,oBACA,uCACA,8BACA,kBACA,sBACA,iBACA,mBACA,iBACA,2BACA,oBACA,4BACA,yBACA,2BACA,mBACA,qBACA,iCACA,sBACA,qBACA,kBACA,sBACA,qBACA,qCACA,oBACA,2BACA,2BACA,4BACA,yBACA,eACA,iBACA,mBACA,kBACA,kBACA,qBACA,wBACA,kBACA,yBACA,gBACA,wBACA,mBACA,iBACA,mBACA,iBACA,uBACA,gBACA,iBACA,4BACA,oBACA,mBACA,oBACA,uBACA,8BACA,yBACA,0BACA,uBACA,wBACA,kBACA,mBACA,mBACA,qBACA,iBACA,iBACA,kBACA,0BACA,gBACA,oBACA,mBACA,gBACA,mBACA,uBACA,mBACA,yBACA,gBACA,wBACA,qBACA,mBACA,iCACA,6BACA,sBACA,oBACA,mBACA,4BACA,mBACA,mBACA,iBACA,qBACA,6BACA,kBACA,sBACA,wBACA,kBACA,qBACA,uBACA,sBACA,qBACA,iBACA,kBACA,uBACA,6BACA,iCACA,oBACA,sBACA,qBACA,mBACA,mBACA,mBACA,kBACA,0BACA,oBACA,kBACA,oBACA,4BACA,mBACA,oBACA,sBACA,iBACA,mBACA,uBACA,yBACA,kBACA,mBACA,mBACA,kBACA,iBACA,oBACA,gBACA,qBACA,qBACA,mBACA,uBACA,mBACA,oBACA,0BACA,iBACA,mBACA,mBACD,AAAU"}
1
+ {"version":3,"sources":["../../../../src/core/Icon/computed-icons/tech-icons.ts"],"sourcesContent":["// AUTOGENERATED BY generate-icons - DO NOT EDIT\n\nexport const techIcons = [\n \"icon-tech-ably\",\n \"icon-tech-ably-api-streamer\",\n \"icon-tech-ably-firehose\",\n \"icon-tech-ably-native\",\n \"icon-tech-activemq\",\n \"icon-tech-activitypub\",\n \"icon-tech-aerospike\",\n \"icon-tech-akka\",\n \"icon-tech-amazon-ec2\",\n \"icon-tech-amazon-event-bridge\",\n \"icon-tech-amqp091\",\n \"icon-tech-amqp10\",\n \"icon-tech-android-full\",\n \"icon-tech-android-head\",\n \"icon-tech-angular\",\n \"icon-tech-anycable\",\n \"icon-tech-apache-cassandra\",\n \"icon-tech-apache-cordova\",\n \"icon-tech-apache-kafka\",\n \"icon-tech-apache-spark\",\n \"icon-tech-apachepulsar\",\n \"icon-tech-apachestorm\",\n \"icon-tech-apns\",\n \"icon-tech-assemblyai\",\n \"icon-tech-atmosphere\",\n \"icon-tech-aws\",\n \"icon-tech-aws-app-sync\",\n \"icon-tech-aws-aurora\",\n \"icon-tech-aws-gateway-websockets\",\n \"icon-tech-aws-sns\",\n \"icon-tech-aws-sqs\",\n \"icon-tech-awsiot\",\n \"icon-tech-awskinesis\",\n \"icon-tech-awslambda\",\n \"icon-tech-awssqs\",\n \"icon-tech-azure-api\",\n \"icon-tech-azure-archive-api\",\n \"icon-tech-azure-bus\",\n \"icon-tech-azure-cosmos\",\n \"icon-tech-azure-event-hub\",\n \"icon-tech-azure-functions\",\n \"icon-tech-azure-search\",\n \"icon-tech-azure-static-web-app\",\n \"icon-tech-azure-static-web-apps\",\n \"icon-tech-azure-storage\",\n \"icon-tech-azure-web-pubsub\",\n \"icon-tech-azurefunctions\",\n \"icon-tech-azureservicebus\",\n \"icon-tech-azuresignalR\",\n \"icon-tech-bayeux\",\n \"icon-tech-c++\",\n \"icon-tech-centrifugo\",\n \"icon-tech-claude\",\n \"icon-tech-claude-mono\",\n \"icon-tech-client-side-frameworks\",\n \"icon-tech-clojure\",\n \"icon-tech-cloudflare-durable-objects\",\n \"icon-tech-cloudflareworkers\",\n \"icon-tech-cocoa\",\n \"icon-tech-confluent\",\n \"icon-tech-cord\",\n \"icon-tech-csharp\",\n \"icon-tech-curl\",\n \"icon-tech-customwebhooks\",\n \"icon-tech-datadog\",\n \"icon-tech-design-patterns\",\n \"icon-tech-devplatforms\",\n \"icon-tech-diffusion-data\",\n \"icon-tech-django\",\n \"icon-tech-engineio\",\n \"icon-tech-event-driven-servers\",\n \"icon-tech-fanout-io\",\n \"icon-tech-fast-api\",\n \"icon-tech-fauna\",\n \"icon-tech-featherjs\",\n \"icon-tech-firebase\",\n \"icon-tech-firebase-cloud-messaging\",\n \"icon-tech-flutter\",\n \"icon-tech-gcloudbigquery\",\n \"icon-tech-gclouddataflow\",\n \"icon-tech-gcloudfunctions\",\n \"icon-tech-gcloudpubsub\",\n \"icon-tech-go\",\n \"icon-tech-grpc\",\n \"icon-tech-hivemq\",\n \"icon-tech-http2\",\n \"icon-tech-http3\",\n \"icon-tech-httprest\",\n \"icon-tech-idempotency\",\n \"icon-tech-ifttt\",\n \"icon-tech-integrations\",\n \"icon-tech-ios\",\n \"icon-tech-ios-generic\",\n \"icon-tech-ipados\",\n \"icon-tech-ipfs\",\n \"icon-tech-ironmq\",\n \"icon-tech-java\",\n \"icon-tech-javascript\",\n \"icon-tech-jetpack\",\n \"icon-tech-jms\",\n \"icon-tech-json\",\n \"icon-tech-json-web-tokens\",\n \"icon-tech-kaazing\",\n \"icon-tech-kotlin\",\n \"icon-tech-ksql-db\",\n \"icon-tech-kubernetes\",\n \"icon-tech-laravel-broadcast\",\n \"icon-tech-laravel-echo\",\n \"icon-tech-lightstreamer\",\n \"icon-tech-liveblocks\",\n \"icon-tech-longpolling\",\n \"icon-tech-macos\",\n \"icon-tech-matrix\",\n \"icon-tech-meteor\",\n \"icon-tech-mongo-db\",\n \"icon-tech-mono\",\n \"icon-tech-mqtt\",\n \"icon-tech-mysql\",\n \"icon-tech-native-script\",\n \"icon-tech-net\",\n \"icon-tech-netlify\",\n \"icon-tech-nextjs\",\n \"icon-tech-nkn\",\n \"icon-tech-nodejs\",\n \"icon-tech-objectivec\",\n \"icon-tech-openai\",\n \"icon-tech-parse-server\",\n \"icon-tech-php\",\n \"icon-tech-planetscale\",\n \"icon-tech-postgres\",\n \"icon-tech-prisma\",\n \"icon-tech-programminglanguages\",\n \"icon-tech-protcol-adaptors\",\n \"icon-tech-protocols\",\n \"icon-tech-pub-sub\",\n \"icon-tech-pubnub\",\n \"icon-tech-push-technology\",\n \"icon-tech-pusher\",\n \"icon-tech-python\",\n \"icon-tech-quic\",\n \"icon-tech-rabbitMQ\",\n \"icon-tech-railsactioncable\",\n \"icon-tech-react\",\n \"icon-tech-react-app\",\n \"icon-tech-reactnative\",\n \"icon-tech-redis\",\n \"icon-tech-redpanda\",\n \"icon-tech-replicache\",\n \"icon-tech-rethinkdb\",\n \"icon-tech-rocketmq\",\n \"icon-tech-ruby\",\n \"icon-tech-scala\",\n \"icon-tech-scaledrone\",\n \"icon-tech-serversentevents\",\n \"icon-tech-serversideframeworks\",\n \"icon-tech-signalR\",\n \"icon-tech-snowflake\",\n \"icon-tech-socketio\",\n \"icon-tech-sockjs\",\n \"icon-tech-solace\",\n \"icon-tech-spring\",\n \"icon-tech-stomp\",\n \"icon-tech-streamdata-io\",\n \"icon-tech-streamr\",\n \"icon-tech-swift\",\n \"icon-tech-symfony\",\n \"icon-tech-symfony-mercure\",\n \"icon-tech-tcp-ip\",\n \"icon-tech-tenefit\",\n \"icon-tech-terraform\",\n \"icon-tech-terraform-outline\",\n \"icon-tech-tvos\",\n \"icon-tech-twilio\",\n \"icon-tech-typescript\",\n \"icon-tech-udp-protocol\",\n \"icon-tech-unity\",\n \"icon-tech-vercel\",\n \"icon-tech-vscode\",\n \"icon-tech-vuejs\",\n \"icon-tech-wamp\",\n \"icon-tech-watchos\",\n \"icon-tech-web\",\n \"icon-tech-web-push\",\n \"icon-tech-webhooks\",\n \"icon-tech-webrtc\",\n \"icon-tech-websockets\",\n \"icon-tech-websub\",\n \"icon-tech-xamarin\",\n \"icon-tech-xhr-streaming\",\n \"icon-tech-xmpp\",\n \"icon-tech-zapier\",\n \"icon-tech-zeromq\"\n] as const;"],"names":["techIcons"],"mappings":"AAEA,OAAO,MAAMA,UAAY,CACvB,iBACA,8BACA,0BACA,wBACA,qBACA,wBACA,sBACA,iBACA,uBACA,gCACA,oBACA,mBACA,yBACA,yBACA,oBACA,qBACA,6BACA,2BACA,yBACA,yBACA,yBACA,wBACA,iBACA,uBACA,uBACA,gBACA,yBACA,uBACA,mCACA,oBACA,oBACA,mBACA,uBACA,sBACA,mBACA,sBACA,8BACA,sBACA,yBACA,4BACA,4BACA,yBACA,iCACA,kCACA,0BACA,6BACA,2BACA,4BACA,yBACA,mBACA,gBACA,uBACA,mBACA,wBACA,mCACA,oBACA,uCACA,8BACA,kBACA,sBACA,iBACA,mBACA,iBACA,2BACA,oBACA,4BACA,yBACA,2BACA,mBACA,qBACA,iCACA,sBACA,qBACA,kBACA,sBACA,qBACA,qCACA,oBACA,2BACA,2BACA,4BACA,yBACA,eACA,iBACA,mBACA,kBACA,kBACA,qBACA,wBACA,kBACA,yBACA,gBACA,wBACA,mBACA,iBACA,mBACA,iBACA,uBACA,oBACA,gBACA,iBACA,4BACA,oBACA,mBACA,oBACA,uBACA,8BACA,yBACA,0BACA,uBACA,wBACA,kBACA,mBACA,mBACA,qBACA,iBACA,iBACA,kBACA,0BACA,gBACA,oBACA,mBACA,gBACA,mBACA,uBACA,mBACA,yBACA,gBACA,wBACA,qBACA,mBACA,iCACA,6BACA,sBACA,oBACA,mBACA,4BACA,mBACA,mBACA,iBACA,qBACA,6BACA,kBACA,sBACA,wBACA,kBACA,qBACA,uBACA,sBACA,qBACA,iBACA,kBACA,uBACA,6BACA,iCACA,oBACA,sBACA,qBACA,mBACA,mBACA,mBACA,kBACA,0BACA,oBACA,kBACA,oBACA,4BACA,mBACA,oBACA,sBACA,8BACA,iBACA,mBACA,uBACA,yBACA,kBACA,mBACA,mBACA,kBACA,iBACA,oBACA,gBACA,qBACA,qBACA,mBACA,uBACA,mBACA,oBACA,0BACA,iBACA,mBACA,mBACD,AAAU"}
package/core/Icon.js CHANGED
@@ -1,2 +1,2 @@
1
- import React,{useCallback,useId,useMemo}from"react";import{defaultIconSecondaryColor,getHeroicon,setUniqueIds,toPascalCase}from"./Icon/utils";import*as IconComponents from"./Icon/components";import{convertTailwindClassToVar}from"./styles/colors/utils";import cn from"./utils/cn";const getHeroiconComponent=iconName=>{const match=iconName.match(/^icon-gui-(.+)-(outline|solid|mini|micro)$/);if(!match){return null}const[,heroiconName,variant]=match;const component=getHeroicon(heroiconName,variant);return component};const Icon=({name,size="0.75rem",color,secondaryColor,additionalCSS="",variant,...additionalAttributes})=>{const uniqueId=useId();const[lightSecondaryColor,darkSecondaryColor]=(secondaryColor??"").split(" dark:");const iconName=variant&&!name.endsWith(`-${variant}`)?`${name}-${variant}`:name;const LocalIconComponent=useMemo(()=>{return IconComponents[toPascalCase(iconName)]},[iconName]);const HeroiconComponent=useMemo(()=>{return LocalIconComponent?null:getHeroiconComponent(iconName)},[LocalIconComponent,iconName]);const setUniqueIdsRef=useCallback(el=>{setUniqueIds(el,uniqueId)},[uniqueId]);const iconSvg=useCallback((secondaryColor,isDark,isThemed)=>{if(LocalIconComponent){let secondaryColorValue;if(secondaryColor){secondaryColorValue=convertTailwindClassToVar(secondaryColor)}else if(defaultIconSecondaryColor(name)){secondaryColorValue=convertTailwindClassToVar(defaultIconSecondaryColor(name))}return React.createElement(LocalIconComponent,{className:cn({[`${color}`]:color},{[`${additionalCSS}`]:additionalCSS},{"hidden dark:block":secondaryColor&&!isDark&&isThemed},{"dark:hidden":secondaryColor&&isDark&&isThemed}),style:{width:size,height:size,...secondaryColorValue&&{"--ui-icon-secondary-color":secondaryColorValue}},...additionalAttributes,ref:setUniqueIdsRef})}if(HeroiconComponent){return React.createElement(HeroiconComponent,{className:cn({[`${color}`]:color},{[`${additionalCSS}`]:additionalCSS}),style:{width:size,height:size},...additionalAttributes})}},[LocalIconComponent,HeroiconComponent,iconName,size,color,additionalCSS,lightSecondaryColor,darkSecondaryColor,name]);if(lightSecondaryColor&&darkSecondaryColor){return React.createElement(React.Fragment,null,iconSvg(lightSecondaryColor,false,!!darkSecondaryColor),iconSvg(darkSecondaryColor,true,true))}else if(lightSecondaryColor){return iconSvg(lightSecondaryColor,false,!!darkSecondaryColor)}else{return iconSvg()}};export default Icon;
1
+ import React,{useCallback,useId,useMemo}from"react";import{defaultIconSecondaryColor,getHeroicon,setUniqueIds,toPascalCase}from"./Icon/utils";import*as IconComponents from"./Icon/components";import{convertTailwindClassToVar}from"./styles/colors/utils";import cn from"./utils/cn";const getHeroiconComponent=iconName=>{const match=iconName.match(/^icon-gui-(.+)-(outline|solid|mini|micro)$/);if(!match){return null}const[,heroiconName,variant]=match;const component=getHeroicon(heroiconName,variant);return component};const Icon=({name,size="0.75rem",color,secondaryColor,additionalCSS="",variant,...additionalAttributes})=>{const uniqueId=useId();const[lightSecondaryColor,darkSecondaryColor]=(secondaryColor??"").split(" dark:");const iconName=variant&&!name.endsWith(`-${variant}`)?`${name}-${variant}`:name;const LocalIconComponent=useMemo(()=>{return IconComponents[toPascalCase(iconName)]},[iconName]);const HeroiconComponent=useMemo(()=>{return LocalIconComponent?null:getHeroiconComponent(iconName)},[LocalIconComponent,iconName]);const setUniqueIdsRef=useCallback(el=>{setUniqueIds(el,uniqueId)},[uniqueId]);const iconSvg=useCallback((secondaryColor,isDark,isThemed)=>{if(LocalIconComponent){let secondaryColorValue;if(secondaryColor){secondaryColorValue=convertTailwindClassToVar(secondaryColor)}else if(defaultIconSecondaryColor(name)){secondaryColorValue=convertTailwindClassToVar(defaultIconSecondaryColor(name))}return React.createElement(LocalIconComponent,{className:cn({[`${color}`]:color},{[`${additionalCSS}`]:additionalCSS},{"hidden dark:block":secondaryColor&&!isDark&&isThemed},{"dark:hidden":secondaryColor&&isDark&&isThemed}),style:{width:size,height:size,...secondaryColorValue&&{"--ui-icon-secondary-color":secondaryColorValue}},...additionalAttributes,ref:setUniqueIdsRef})}if(HeroiconComponent){return React.createElement(HeroiconComponent,{className:cn({[`${color}`]:color},{[`${additionalCSS}`]:additionalCSS}),style:{width:size,height:size},...additionalAttributes})}},[LocalIconComponent,HeroiconComponent,name,color,additionalCSS,size,additionalAttributes,setUniqueIdsRef]);if(lightSecondaryColor&&darkSecondaryColor){return React.createElement(React.Fragment,null,iconSvg(lightSecondaryColor,false,!!darkSecondaryColor),iconSvg(darkSecondaryColor,true,true))}else if(lightSecondaryColor){return iconSvg(lightSecondaryColor,false,!!darkSecondaryColor)}else{return iconSvg()}};export default Icon;
2
2
  //# sourceMappingURL=Icon.js.map
package/core/Icon.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/Icon.tsx"],"sourcesContent":["import React, { CSSProperties, useCallback, useId, useMemo } from \"react\";\n\nimport {\n defaultIconSecondaryColor,\n getHeroicon,\n setUniqueIds,\n toPascalCase,\n} from \"./Icon/utils\";\nimport * as IconComponents from \"./Icon/components\";\nimport { IconName, IconSize } from \"./Icon/types\";\nimport { ColorClass, ColorThemeSet } from \"./styles/colors/types\";\nimport { convertTailwindClassToVar } from \"./styles/colors/utils\";\nimport cn from \"./utils/cn\";\n\nexport type IconProps = {\n name: IconName;\n size?: IconSize;\n color?: ColorClass | ColorThemeSet;\n secondaryColor?: ColorClass | ColorThemeSet;\n additionalCSS?: string;\n variant?: \"outline\" | \"solid\" | \"micro\" | \"mini\";\n};\n\n// Helper function to get a heroicon component from the static map\nconst getHeroiconComponent = (\n iconName: string,\n): React.ComponentType<React.SVGProps<SVGSVGElement>> | null => {\n // Parse the icon name to extract heroicon name and variant\n // Expected format: icon-gui-{heroicon-name}-{variant}\n const match = iconName.match(/^icon-gui-(.+)-(outline|solid|mini|micro)$/);\n if (!match) {\n return null;\n }\n\n const [, heroiconName, variant] = match;\n const component = getHeroicon(heroiconName, variant);\n return component;\n};\n\nconst Icon = ({\n name,\n size = \"0.75rem\",\n color,\n secondaryColor,\n additionalCSS = \"\",\n variant,\n ...additionalAttributes\n}: IconProps) => {\n const uniqueId = useId();\n\n const [lightSecondaryColor, darkSecondaryColor] = (\n secondaryColor ?? \"\"\n ).split(\" dark:\") as [ColorClass, ColorClass | undefined];\n\n const iconName =\n variant && !name.endsWith(`-${variant}`) ? `${name}-${variant}` : name;\n\n // Get the local icon component (memoized)\n const LocalIconComponent = useMemo(():\n | React.ComponentType<React.SVGProps<SVGSVGElement>>\n | undefined => {\n return IconComponents[\n toPascalCase(iconName) as keyof typeof IconComponents\n ];\n }, [iconName]);\n\n // Get the heroicon component only if no local component is found (memoized)\n const HeroiconComponent = useMemo(() => {\n return LocalIconComponent ? null : getHeroiconComponent(iconName);\n }, [LocalIconComponent, iconName]);\n\n const setUniqueIdsRef = useCallback(\n (el: SVGSVGElement | null) => {\n setUniqueIds(el, uniqueId);\n },\n [uniqueId],\n );\n\n const iconSvg = useCallback(\n (secondaryColor?: ColorClass, isDark?: boolean, isThemed?: boolean) => {\n if (LocalIconComponent) {\n let secondaryColorValue;\n if (secondaryColor) {\n secondaryColorValue = convertTailwindClassToVar(secondaryColor);\n } else if (defaultIconSecondaryColor(name)) {\n secondaryColorValue = convertTailwindClassToVar(\n defaultIconSecondaryColor(name),\n );\n }\n\n return (\n <LocalIconComponent\n className={cn(\n { [`${color}`]: color },\n { [`${additionalCSS}`]: additionalCSS },\n {\n \"hidden dark:block\": secondaryColor && !isDark && isThemed,\n },\n {\n \"dark:hidden\": secondaryColor && isDark && isThemed,\n },\n )}\n style={\n {\n width: size,\n height: size,\n ...(secondaryColorValue && {\n \"--ui-icon-secondary-color\": secondaryColorValue,\n }),\n } as CSSProperties\n }\n {...additionalAttributes}\n ref={setUniqueIdsRef}\n />\n );\n }\n\n if (HeroiconComponent) {\n return (\n <HeroiconComponent\n className={cn(\n { [`${color}`]: color },\n { [`${additionalCSS}`]: additionalCSS },\n )}\n style={{\n width: size,\n height: size,\n }}\n {...additionalAttributes}\n />\n );\n }\n },\n [\n LocalIconComponent,\n HeroiconComponent,\n iconName,\n size,\n color,\n additionalCSS,\n lightSecondaryColor,\n darkSecondaryColor,\n name,\n ],\n );\n\n if (lightSecondaryColor && darkSecondaryColor) {\n return (\n <>\n {iconSvg(lightSecondaryColor, false, !!darkSecondaryColor)}\n {iconSvg(darkSecondaryColor, true, true)}\n </>\n );\n } else if (lightSecondaryColor) {\n return iconSvg(lightSecondaryColor, false, !!darkSecondaryColor);\n } else {\n return iconSvg();\n }\n};\n\nexport default Icon;\n"],"names":["React","useCallback","useId","useMemo","defaultIconSecondaryColor","getHeroicon","setUniqueIds","toPascalCase","IconComponents","convertTailwindClassToVar","cn","getHeroiconComponent","iconName","match","heroiconName","variant","component","Icon","name","size","color","secondaryColor","additionalCSS","additionalAttributes","uniqueId","lightSecondaryColor","darkSecondaryColor","split","endsWith","LocalIconComponent","HeroiconComponent","setUniqueIdsRef","el","iconSvg","isDark","isThemed","secondaryColorValue","className","style","width","height","ref"],"mappings":"AAAA,OAAOA,OAAwBC,WAAW,CAAEC,KAAK,CAAEC,OAAO,KAAQ,OAAQ,AAE1E,QACEC,yBAAyB,CACzBC,WAAW,CACXC,YAAY,CACZC,YAAY,KACP,cAAe,AACtB,WAAYC,mBAAoB,mBAAoB,AAGpD,QAASC,yBAAyB,KAAQ,uBAAwB,AAClE,QAAOC,OAAQ,YAAa,CAY5B,MAAMC,qBAAuB,AAC3BC,WAIA,MAAMC,MAAQD,SAASC,KAAK,CAAC,8CAC7B,GAAI,CAACA,MAAO,CACV,OAAO,IACT,CAEA,KAAM,EAAGC,aAAcC,QAAQ,CAAGF,MAClC,MAAMG,UAAYX,YAAYS,aAAcC,SAC5C,OAAOC,SACT,EAEA,MAAMC,KAAO,CAAC,CACZC,IAAI,CACJC,KAAO,SAAS,CAChBC,KAAK,CACLC,cAAc,CACdC,cAAgB,EAAE,CAClBP,OAAO,CACP,GAAGQ,qBACO,IACV,MAAMC,SAAWtB,QAEjB,KAAM,CAACuB,oBAAqBC,mBAAmB,CAAG,AAChDL,CAAAA,gBAAkB,EAAC,EACnBM,KAAK,CAAC,UAER,MAAMf,SACJG,SAAW,CAACG,KAAKU,QAAQ,CAAC,CAAC,CAAC,EAAEb,QAAQ,CAAC,EAAI,CAAC,EAAEG,KAAK,CAAC,EAAEH,QAAQ,CAAC,CAAGG,KAGpE,MAAMW,mBAAqB1B,QAAQ,KAGjC,OAAOK,cAAc,CACnBD,aAAaK,UACd,AACH,EAAG,CAACA,SAAS,EAGb,MAAMkB,kBAAoB3B,QAAQ,KAChC,OAAO0B,mBAAqB,KAAOlB,qBAAqBC,SAC1D,EAAG,CAACiB,mBAAoBjB,SAAS,EAEjC,MAAMmB,gBAAkB9B,YACtB,AAAC+B,KACC1B,aAAa0B,GAAIR,SACnB,EACA,CAACA,SAAS,EAGZ,MAAMS,QAAUhC,YACd,CAACoB,eAA6Ba,OAAkBC,YAC9C,GAAIN,mBAAoB,CACtB,IAAIO,oBACJ,GAAIf,eAAgB,CAClBe,oBAAsB3B,0BAA0BY,eAClD,MAAO,GAAIjB,0BAA0Bc,MAAO,CAC1CkB,oBAAsB3B,0BACpBL,0BAA0Bc,MAE9B,CAEA,OACE,oBAACW,oBACCQ,UAAW3B,GACT,CAAE,CAAC,CAAC,EAAEU,MAAM,CAAC,CAAC,CAAEA,KAAM,EACtB,CAAE,CAAC,CAAC,EAAEE,cAAc,CAAC,CAAC,CAAEA,aAAc,EACtC,CACE,oBAAqBD,gBAAkB,CAACa,QAAUC,QACpD,EACA,CACE,cAAed,gBAAkBa,QAAUC,QAC7C,GAEFG,MACE,CACEC,MAAOpB,KACPqB,OAAQrB,KACR,GAAIiB,qBAAuB,CACzB,4BAA6BA,mBAC/B,CAAC,AACH,EAED,GAAGb,oBAAoB,CACxBkB,IAAKV,iBAGX,CAEA,GAAID,kBAAmB,CACrB,OACE,oBAACA,mBACCO,UAAW3B,GACT,CAAE,CAAC,CAAC,EAAEU,MAAM,CAAC,CAAC,CAAEA,KAAM,EACtB,CAAE,CAAC,CAAC,EAAEE,cAAc,CAAC,CAAC,CAAEA,aAAc,GAExCgB,MAAO,CACLC,MAAOpB,KACPqB,OAAQrB,IACV,EACC,GAAGI,oBAAoB,EAG9B,CACF,EACA,CACEM,mBACAC,kBACAlB,SACAO,KACAC,MACAE,cACAG,oBACAC,mBACAR,KACD,EAGH,GAAIO,qBAAuBC,mBAAoB,CAC7C,OACE,wCACGO,QAAQR,oBAAqB,MAAO,CAAC,CAACC,oBACtCO,QAAQP,mBAAoB,KAAM,MAGzC,MAAO,GAAID,oBAAqB,CAC9B,OAAOQ,QAAQR,oBAAqB,MAAO,CAAC,CAACC,mBAC/C,KAAO,CACL,OAAOO,SACT,CACF,CAEA,gBAAehB,IAAK"}
1
+ {"version":3,"sources":["../../src/core/Icon.tsx"],"sourcesContent":["import React, { CSSProperties, useCallback, useId, useMemo } from \"react\";\n\nimport {\n defaultIconSecondaryColor,\n getHeroicon,\n setUniqueIds,\n toPascalCase,\n} from \"./Icon/utils\";\nimport * as IconComponents from \"./Icon/components\";\nimport { IconName, IconSize } from \"./Icon/types\";\nimport { ColorClass, ColorThemeSet } from \"./styles/colors/types\";\nimport { convertTailwindClassToVar } from \"./styles/colors/utils\";\nimport cn from \"./utils/cn\";\n\nexport type IconProps = {\n name: IconName;\n size?: IconSize;\n color?: ColorClass | ColorThemeSet;\n secondaryColor?: ColorClass | ColorThemeSet;\n additionalCSS?: string;\n variant?: \"outline\" | \"solid\" | \"micro\" | \"mini\";\n};\n\n// Helper function to get a heroicon component from the static map\nconst getHeroiconComponent = (\n iconName: string,\n): React.ComponentType<React.SVGProps<SVGSVGElement>> | null => {\n // Parse the icon name to extract heroicon name and variant\n // Expected format: icon-gui-{heroicon-name}-{variant}\n const match = iconName.match(/^icon-gui-(.+)-(outline|solid|mini|micro)$/);\n if (!match) {\n return null;\n }\n\n const [, heroiconName, variant] = match;\n const component = getHeroicon(heroiconName, variant);\n return component;\n};\n\nconst Icon = ({\n name,\n size = \"0.75rem\",\n color,\n secondaryColor,\n additionalCSS = \"\",\n variant,\n ...additionalAttributes\n}: IconProps) => {\n const uniqueId = useId();\n\n const [lightSecondaryColor, darkSecondaryColor] = (\n secondaryColor ?? \"\"\n ).split(\" dark:\") as [ColorClass, ColorClass | undefined];\n\n const iconName =\n variant && !name.endsWith(`-${variant}`) ? `${name}-${variant}` : name;\n\n // Get the local icon component (memoized)\n const LocalIconComponent = useMemo(():\n | React.ComponentType<React.SVGProps<SVGSVGElement>>\n | undefined => {\n return IconComponents[\n toPascalCase(iconName) as keyof typeof IconComponents\n ];\n }, [iconName]);\n\n // Get the heroicon component only if no local component is found (memoized)\n const HeroiconComponent = useMemo(() => {\n return LocalIconComponent ? null : getHeroiconComponent(iconName);\n }, [LocalIconComponent, iconName]);\n\n const setUniqueIdsRef = useCallback(\n (el: SVGSVGElement | null) => {\n setUniqueIds(el, uniqueId);\n },\n [uniqueId],\n );\n\n const iconSvg = useCallback(\n (secondaryColor?: ColorClass, isDark?: boolean, isThemed?: boolean) => {\n if (LocalIconComponent) {\n let secondaryColorValue;\n if (secondaryColor) {\n secondaryColorValue = convertTailwindClassToVar(secondaryColor);\n } else if (defaultIconSecondaryColor(name)) {\n secondaryColorValue = convertTailwindClassToVar(\n defaultIconSecondaryColor(name),\n );\n }\n\n return (\n <LocalIconComponent\n className={cn(\n { [`${color}`]: color },\n { [`${additionalCSS}`]: additionalCSS },\n {\n \"hidden dark:block\": secondaryColor && !isDark && isThemed,\n },\n {\n \"dark:hidden\": secondaryColor && isDark && isThemed,\n },\n )}\n style={\n {\n width: size,\n height: size,\n ...(secondaryColorValue && {\n \"--ui-icon-secondary-color\": secondaryColorValue,\n }),\n } as CSSProperties\n }\n {...additionalAttributes}\n ref={setUniqueIdsRef}\n />\n );\n }\n\n if (HeroiconComponent) {\n return (\n <HeroiconComponent\n className={cn(\n { [`${color}`]: color },\n { [`${additionalCSS}`]: additionalCSS },\n )}\n style={{\n width: size,\n height: size,\n }}\n {...additionalAttributes}\n />\n );\n }\n },\n [\n LocalIconComponent,\n HeroiconComponent,\n name,\n color,\n additionalCSS,\n size,\n additionalAttributes,\n setUniqueIdsRef,\n ],\n );\n\n if (lightSecondaryColor && darkSecondaryColor) {\n return (\n <>\n {iconSvg(lightSecondaryColor, false, !!darkSecondaryColor)}\n {iconSvg(darkSecondaryColor, true, true)}\n </>\n );\n } else if (lightSecondaryColor) {\n return iconSvg(lightSecondaryColor, false, !!darkSecondaryColor);\n } else {\n return iconSvg();\n }\n};\n\nexport default Icon;\n"],"names":["React","useCallback","useId","useMemo","defaultIconSecondaryColor","getHeroicon","setUniqueIds","toPascalCase","IconComponents","convertTailwindClassToVar","cn","getHeroiconComponent","iconName","match","heroiconName","variant","component","Icon","name","size","color","secondaryColor","additionalCSS","additionalAttributes","uniqueId","lightSecondaryColor","darkSecondaryColor","split","endsWith","LocalIconComponent","HeroiconComponent","setUniqueIdsRef","el","iconSvg","isDark","isThemed","secondaryColorValue","className","style","width","height","ref"],"mappings":"AAAA,OAAOA,OAAwBC,WAAW,CAAEC,KAAK,CAAEC,OAAO,KAAQ,OAAQ,AAE1E,QACEC,yBAAyB,CACzBC,WAAW,CACXC,YAAY,CACZC,YAAY,KACP,cAAe,AACtB,WAAYC,mBAAoB,mBAAoB,AAGpD,QAASC,yBAAyB,KAAQ,uBAAwB,AAClE,QAAOC,OAAQ,YAAa,CAY5B,MAAMC,qBAAuB,AAC3BC,WAIA,MAAMC,MAAQD,SAASC,KAAK,CAAC,8CAC7B,GAAI,CAACA,MAAO,CACV,OAAO,IACT,CAEA,KAAM,EAAGC,aAAcC,QAAQ,CAAGF,MAClC,MAAMG,UAAYX,YAAYS,aAAcC,SAC5C,OAAOC,SACT,EAEA,MAAMC,KAAO,CAAC,CACZC,IAAI,CACJC,KAAO,SAAS,CAChBC,KAAK,CACLC,cAAc,CACdC,cAAgB,EAAE,CAClBP,OAAO,CACP,GAAGQ,qBACO,IACV,MAAMC,SAAWtB,QAEjB,KAAM,CAACuB,oBAAqBC,mBAAmB,CAAG,AAChDL,CAAAA,gBAAkB,EAAC,EACnBM,KAAK,CAAC,UAER,MAAMf,SACJG,SAAW,CAACG,KAAKU,QAAQ,CAAC,CAAC,CAAC,EAAEb,QAAQ,CAAC,EAAI,CAAC,EAAEG,KAAK,CAAC,EAAEH,QAAQ,CAAC,CAAGG,KAGpE,MAAMW,mBAAqB1B,QAAQ,KAGjC,OAAOK,cAAc,CACnBD,aAAaK,UACd,AACH,EAAG,CAACA,SAAS,EAGb,MAAMkB,kBAAoB3B,QAAQ,KAChC,OAAO0B,mBAAqB,KAAOlB,qBAAqBC,SAC1D,EAAG,CAACiB,mBAAoBjB,SAAS,EAEjC,MAAMmB,gBAAkB9B,YACtB,AAAC+B,KACC1B,aAAa0B,GAAIR,SACnB,EACA,CAACA,SAAS,EAGZ,MAAMS,QAAUhC,YACd,CAACoB,eAA6Ba,OAAkBC,YAC9C,GAAIN,mBAAoB,CACtB,IAAIO,oBACJ,GAAIf,eAAgB,CAClBe,oBAAsB3B,0BAA0BY,eAClD,MAAO,GAAIjB,0BAA0Bc,MAAO,CAC1CkB,oBAAsB3B,0BACpBL,0BAA0Bc,MAE9B,CAEA,OACE,oBAACW,oBACCQ,UAAW3B,GACT,CAAE,CAAC,CAAC,EAAEU,MAAM,CAAC,CAAC,CAAEA,KAAM,EACtB,CAAE,CAAC,CAAC,EAAEE,cAAc,CAAC,CAAC,CAAEA,aAAc,EACtC,CACE,oBAAqBD,gBAAkB,CAACa,QAAUC,QACpD,EACA,CACE,cAAed,gBAAkBa,QAAUC,QAC7C,GAEFG,MACE,CACEC,MAAOpB,KACPqB,OAAQrB,KACR,GAAIiB,qBAAuB,CACzB,4BAA6BA,mBAC/B,CAAC,AACH,EAED,GAAGb,oBAAoB,CACxBkB,IAAKV,iBAGX,CAEA,GAAID,kBAAmB,CACrB,OACE,oBAACA,mBACCO,UAAW3B,GACT,CAAE,CAAC,CAAC,EAAEU,MAAM,CAAC,CAAC,CAAEA,KAAM,EACtB,CAAE,CAAC,CAAC,EAAEE,cAAc,CAAC,CAAC,CAAEA,aAAc,GAExCgB,MAAO,CACLC,MAAOpB,KACPqB,OAAQrB,IACV,EACC,GAAGI,oBAAoB,EAG9B,CACF,EACA,CACEM,mBACAC,kBACAZ,KACAE,MACAE,cACAH,KACAI,qBACAQ,gBACD,EAGH,GAAIN,qBAAuBC,mBAAoB,CAC7C,OACE,wCACGO,QAAQR,oBAAqB,MAAO,CAAC,CAACC,oBACtCO,QAAQP,mBAAoB,KAAM,MAGzC,MAAO,GAAID,oBAAqB,CAC9B,OAAOQ,QAAQR,oBAAqB,MAAO,CAAC,CAACC,mBAC/C,KAAO,CACL,OAAOO,SACT,CACF,CAEA,gBAAehB,IAAK"}
@@ -1,2 +1,2 @@
1
- import React from"react";import{commonButtonInterior,commonButtonProps}from"./Button";import cn from"./utils/cn";const LinkButton=({variant="primary",size,leftIcon,rightIcon,children,className,disabled,onClick,iconColor,...rest})=>{const handleClick=e=>{if(disabled){e.preventDefault();return}onClick?.(e)};return React.createElement("a",{...commonButtonProps({variant,size,leftIcon,rightIcon,className:cn(className,{"ui-button-disabled dark:ui-button-disabled-dark":disabled})}),role:"button","aria-disabled":disabled,onClick:handleClick,...rest},commonButtonInterior({leftIcon,rightIcon,iconColor,children}))};export default LinkButton;
1
+ import React from"react";import{commonButtonInterior,commonButtonProps}from"./Button";import cn from"./utils/cn";const LinkButton=({variant="primary",size,leftIcon,rightIcon,children,className,disabled,onClick,iconColor,...rest})=>{const handleClick=e=>{if(disabled){e.preventDefault();return}onClick?.(e)};const handleKeyDown=e=>{if(e.repeat)return;if(e.key===" "||e.key==="Spacebar"){e.preventDefault();return}if(e.key==="Enter"){e.preventDefault();if(!disabled)e.currentTarget.click()}};const handleKeyUp=e=>{if(e.key===" "||e.key==="Spacebar"){e.preventDefault();if(!disabled)e.currentTarget.click()}};return React.createElement("a",{...commonButtonProps({variant,size,leftIcon,rightIcon,className:cn(className,{"ui-button-disabled dark:ui-button-disabled-dark":disabled})}),role:"button","aria-disabled":disabled,onClick:handleClick,onKeyDown:handleKeyDown,onKeyUp:handleKeyUp,tabIndex:0,...rest},commonButtonInterior({leftIcon,rightIcon,iconColor,children}))};export default LinkButton;
2
2
  //# sourceMappingURL=LinkButton.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/LinkButton.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n ButtonPropsBase,\n commonButtonInterior,\n commonButtonProps,\n} from \"./Button\";\nimport cn from \"./utils/cn\";\nimport { ColorClass, ColorThemeSet } from \"./styles/colors/types\";\n\nexport type LinkButtonProps = ButtonPropsBase & {\n disabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;\n iconColor?: ColorClass | ColorThemeSet;\n} & React.AnchorHTMLAttributes<HTMLAnchorElement>;\n\nconst LinkButton: React.FC<LinkButtonProps> = ({\n variant = \"primary\",\n size,\n leftIcon,\n rightIcon,\n children,\n className,\n disabled,\n onClick,\n iconColor,\n ...rest\n}) => {\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n };\n\n return (\n <a\n {...commonButtonProps({\n variant,\n size,\n leftIcon,\n rightIcon,\n className: cn(className, {\n \"ui-button-disabled dark:ui-button-disabled-dark\": disabled,\n }),\n })}\n role=\"button\"\n aria-disabled={disabled}\n onClick={handleClick}\n {...(rest as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {commonButtonInterior({ leftIcon, rightIcon, iconColor, children })}\n </a>\n );\n};\n\nexport default LinkButton;\n"],"names":["React","commonButtonInterior","commonButtonProps","cn","LinkButton","variant","size","leftIcon","rightIcon","children","className","disabled","onClick","iconColor","rest","handleClick","e","preventDefault","a","role","aria-disabled"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAEEC,oBAAoB,CACpBC,iBAAiB,KACZ,UAAW,AAClB,QAAOC,OAAQ,YAAa,CAS5B,MAAMC,WAAwC,CAAC,CAC7CC,QAAU,SAAS,CACnBC,IAAI,CACJC,QAAQ,CACRC,SAAS,CACTC,QAAQ,CACRC,SAAS,CACTC,QAAQ,CACRC,OAAO,CACPC,SAAS,CACT,GAAGC,KACJ,IACC,MAAMC,YAAc,AAACC,IACnB,GAAIL,SAAU,CACZK,EAAEC,cAAc,GAChB,MACF,CACAL,UAAUI,EACZ,EAEA,OACE,oBAACE,KACE,GAAGhB,kBAAkB,CACpBG,QACAC,KACAC,SACAC,UACAE,UAAWP,GAAGO,UAAW,CACvB,kDAAmDC,QACrD,EACF,EAAE,CACFQ,KAAK,SACLC,gBAAeT,SACfC,QAASG,YACR,GAAID,IAAI,EAERb,qBAAqB,CAAEM,SAAUC,UAAWK,UAAWJ,QAAS,GAGvE,CAEA,gBAAeL,UAAW"}
1
+ {"version":3,"sources":["../../src/core/LinkButton.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n ButtonPropsBase,\n commonButtonInterior,\n commonButtonProps,\n} from \"./Button\";\nimport cn from \"./utils/cn\";\nimport { ColorClass, ColorThemeSet } from \"./styles/colors/types\";\n\nexport type LinkButtonProps = ButtonPropsBase & {\n disabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;\n iconColor?: ColorClass | ColorThemeSet;\n} & React.AnchorHTMLAttributes<HTMLAnchorElement>;\n\nconst LinkButton: React.FC<LinkButtonProps> = ({\n variant = \"primary\",\n size,\n leftIcon,\n rightIcon,\n children,\n className,\n disabled,\n onClick,\n iconColor,\n ...rest\n}) => {\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLAnchorElement>) => {\n if (e.repeat) return;\n // Space: prevent page scroll on keydown; activate on keyup.\n if (e.key === \" \" || e.key === \"Spacebar\") {\n e.preventDefault();\n return;\n }\n // Enter activates on keydown.\n if (e.key === \"Enter\") {\n e.preventDefault();\n if (!disabled) e.currentTarget.click();\n }\n };\n\n const handleKeyUp = (e: React.KeyboardEvent<HTMLAnchorElement>) => {\n if (e.key === \" \" || e.key === \"Spacebar\") {\n e.preventDefault();\n if (!disabled) e.currentTarget.click();\n }\n };\n\n return (\n <a\n {...commonButtonProps({\n variant,\n size,\n leftIcon,\n rightIcon,\n className: cn(className, {\n \"ui-button-disabled dark:ui-button-disabled-dark\": disabled,\n }),\n })}\n role=\"button\"\n aria-disabled={disabled}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n tabIndex={0}\n {...(rest as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {commonButtonInterior({ leftIcon, rightIcon, iconColor, children })}\n </a>\n );\n};\n\nexport default LinkButton;\n"],"names":["React","commonButtonInterior","commonButtonProps","cn","LinkButton","variant","size","leftIcon","rightIcon","children","className","disabled","onClick","iconColor","rest","handleClick","e","preventDefault","handleKeyDown","repeat","key","currentTarget","click","handleKeyUp","a","role","aria-disabled","onKeyDown","onKeyUp","tabIndex"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAEEC,oBAAoB,CACpBC,iBAAiB,KACZ,UAAW,AAClB,QAAOC,OAAQ,YAAa,CAS5B,MAAMC,WAAwC,CAAC,CAC7CC,QAAU,SAAS,CACnBC,IAAI,CACJC,QAAQ,CACRC,SAAS,CACTC,QAAQ,CACRC,SAAS,CACTC,QAAQ,CACRC,OAAO,CACPC,SAAS,CACT,GAAGC,KACJ,IACC,MAAMC,YAAc,AAACC,IACnB,GAAIL,SAAU,CACZK,EAAEC,cAAc,GAChB,MACF,CACAL,UAAUI,EACZ,EAEA,MAAME,cAAgB,AAACF,IACrB,GAAIA,EAAEG,MAAM,CAAE,OAEd,GAAIH,EAAEI,GAAG,GAAK,KAAOJ,EAAEI,GAAG,GAAK,WAAY,CACzCJ,EAAEC,cAAc,GAChB,MACF,CAEA,GAAID,EAAEI,GAAG,GAAK,QAAS,CACrBJ,EAAEC,cAAc,GAChB,GAAI,CAACN,SAAUK,EAAEK,aAAa,CAACC,KAAK,EACtC,CACF,EAEA,MAAMC,YAAc,AAACP,IACnB,GAAIA,EAAEI,GAAG,GAAK,KAAOJ,EAAEI,GAAG,GAAK,WAAY,CACzCJ,EAAEC,cAAc,GAChB,GAAI,CAACN,SAAUK,EAAEK,aAAa,CAACC,KAAK,EACtC,CACF,EAEA,OACE,oBAACE,KACE,GAAGtB,kBAAkB,CACpBG,QACAC,KACAC,SACAC,UACAE,UAAWP,GAAGO,UAAW,CACvB,kDAAmDC,QACrD,EACF,EAAE,CACFc,KAAK,SACLC,gBAAef,SACfC,QAASG,YACTY,UAAWT,cACXU,QAASL,YACTM,SAAU,EACT,GAAIf,IAAI,EAERb,qBAAqB,CAAEM,SAAUC,UAAWK,UAAWJ,QAAS,GAGvE,CAEA,gBAAeL,UAAW"}
package/core/Logo.js CHANGED
@@ -1,2 +1,2 @@
1
- import React from"react";import LogoAssetMonoStacked from"./images/logo/ably-logo-mono-stacked.svg";import LogoAssetMonoWhiteStacked from"./images/logo/ably-logo-mono-white-stacked.svg";import LogoAssetMonoWhite from"./images/logo/ably-logo-mono-white.svg";import LogoAssetMono from"./images/logo/ably-logo-mono.svg";import LogoAssetStacked from"./images/logo/ably-logo-stacked.svg";import LogoAssetWhiteStacked from"./images/logo/ably-logo-white-stacked.svg";import LogoAssetWhite from"./images/logo/ably-logo-white.svg";import LogoAsset from"./images/logo/ably-logo.svg";const Logo=({dataId,href="/",additionalImgAttrs,additionalLinkAttrs,theme="light",variant="default",orientation="default",logoUrl,logoAlt="Ably logo"})=>{const getLogoSrc=React.useCallback(()=>{if(logoUrl)return logoUrl;if(theme==="dark"){if(variant==="mono"){return orientation==="stacked"?LogoAssetMonoWhiteStacked:LogoAssetMonoWhite}else{return orientation==="stacked"?LogoAssetWhiteStacked:LogoAssetWhite}}else{if(variant==="mono"){return orientation==="stacked"?LogoAssetMonoStacked:LogoAssetMono}else{return orientation==="stacked"?LogoAssetStacked:LogoAsset}}},[logoUrl,theme,variant,orientation]);const logoSrc=getLogoSrc();return React.createElement("a",{href:href,"data-id":dataId,className:"block",...additionalLinkAttrs},React.createElement("img",{src:logoSrc,width:"108px",alt:logoAlt,...additionalImgAttrs}))};export default React.memo(Logo);
1
+ import React from"react";import Badge from"./Badge";import cn from"./utils/cn";import LogoAssetMonoStacked from"./images/logo/ably-logo-mono-stacked.svg";import LogoAssetMonoWhiteStacked from"./images/logo/ably-logo-mono-white-stacked.svg";import LogoAssetMonoWhite from"./images/logo/ably-logo-mono-white.svg";import LogoAssetMono from"./images/logo/ably-logo-mono.svg";import LogoAssetStacked from"./images/logo/ably-logo-stacked.svg";import LogoAssetWhiteStacked from"./images/logo/ably-logo-white-stacked.svg";import LogoAssetWhite from"./images/logo/ably-logo-white.svg";import LogoAsset from"./images/logo/ably-logo.svg";const Logo=({dataId,href="/",additionalImgAttrs,additionalLinkAttrs,theme="light",variant="default",orientation="default",logoUrl,logoAlt="Ably logo",badge})=>{const getLogoSrc=React.useCallback(()=>{if(logoUrl)return logoUrl;if(theme==="dark"){if(variant==="mono"){return orientation==="stacked"?LogoAssetMonoWhiteStacked:LogoAssetMonoWhite}else{return orientation==="stacked"?LogoAssetWhiteStacked:LogoAssetWhite}}else{if(variant==="mono"){return orientation==="stacked"?LogoAssetMonoStacked:LogoAssetMono}else{return orientation==="stacked"?LogoAssetStacked:LogoAsset}}},[logoUrl,theme,variant,orientation]);const logoSrc=getLogoSrc();return React.createElement("a",{href:href,"data-id":dataId,...additionalLinkAttrs,className:cn("flex items-center gap-2 justify-center",additionalLinkAttrs?.className)},React.createElement("img",{src:logoSrc,width:"96px",alt:logoAlt,...additionalImgAttrs}),badge&&React.createElement(Badge,{className:"uppercase h-[25px] px-1.5 py-[3px] bg-transparent mt-[2px] dark:bg-transparent rounded-[4px] border border-neutral-400 dark:border-neutral-900 text-sm font-semibold text-neutral-800 dark:text-neutral-500",childClassName:"tracking-[0.01em]"},badge))};export default React.memo(Logo);
2
2
  //# sourceMappingURL=Logo.js.map
package/core/Logo.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/Logo.tsx"],"sourcesContent":["import React from \"react\";\nimport LogoAssetMonoStacked from \"./images/logo/ably-logo-mono-stacked.svg\";\nimport LogoAssetMonoWhiteStacked from \"./images/logo/ably-logo-mono-white-stacked.svg\";\nimport LogoAssetMonoWhite from \"./images/logo/ably-logo-mono-white.svg\";\nimport LogoAssetMono from \"./images/logo/ably-logo-mono.svg\";\nimport LogoAssetStacked from \"./images/logo/ably-logo-stacked.svg\";\nimport LogoAssetWhiteStacked from \"./images/logo/ably-logo-white-stacked.svg\";\nimport LogoAssetWhite from \"./images/logo/ably-logo-white.svg\";\nimport LogoAsset from \"./images/logo/ably-logo.svg\";\n\ntype LogoProps = {\n dataId?: string;\n logoUrl?: string;\n logoAlt?: string;\n href?: string;\n additionalImgAttrs?: object;\n additionalLinkAttrs?: object;\n theme?: \"light\" | \"dark\";\n variant?: \"default\" | \"mono\";\n orientation?: \"default\" | \"stacked\";\n};\n\nconst Logo = ({\n dataId,\n href = \"/\",\n additionalImgAttrs,\n additionalLinkAttrs,\n theme = \"light\",\n variant = \"default\",\n orientation = \"default\",\n logoUrl,\n logoAlt = \"Ably logo\",\n}: LogoProps) => {\n const getLogoSrc = React.useCallback(() => {\n if (logoUrl) return logoUrl;\n\n if (theme === \"dark\") {\n if (variant === \"mono\") {\n return orientation === \"stacked\"\n ? LogoAssetMonoWhiteStacked\n : LogoAssetMonoWhite;\n } else {\n return orientation === \"stacked\"\n ? LogoAssetWhiteStacked\n : LogoAssetWhite;\n }\n } else {\n if (variant === \"mono\") {\n return orientation === \"stacked\" ? LogoAssetMonoStacked : LogoAssetMono;\n } else {\n return orientation === \"stacked\" ? LogoAssetStacked : LogoAsset;\n }\n }\n }, [logoUrl, theme, variant, orientation]);\n\n const logoSrc = getLogoSrc();\n\n return (\n <a href={href} data-id={dataId} className=\"block\" {...additionalLinkAttrs}>\n <img src={logoSrc} width=\"108px\" alt={logoAlt} {...additionalImgAttrs} />\n </a>\n );\n};\n\nexport default React.memo(Logo);\n"],"names":["React","LogoAssetMonoStacked","LogoAssetMonoWhiteStacked","LogoAssetMonoWhite","LogoAssetMono","LogoAssetStacked","LogoAssetWhiteStacked","LogoAssetWhite","LogoAsset","Logo","dataId","href","additionalImgAttrs","additionalLinkAttrs","theme","variant","orientation","logoUrl","logoAlt","getLogoSrc","useCallback","logoSrc","a","data-id","className","img","src","width","alt","memo"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,yBAA0B,0CAA2C,AAC5E,QAAOC,8BAA+B,gDAAiD,AACvF,QAAOC,uBAAwB,wCAAyC,AACxE,QAAOC,kBAAmB,kCAAmC,AAC7D,QAAOC,qBAAsB,qCAAsC,AACnE,QAAOC,0BAA2B,2CAA4C,AAC9E,QAAOC,mBAAoB,mCAAoC,AAC/D,QAAOC,cAAe,6BAA8B,CAcpD,MAAMC,KAAO,CAAC,CACZC,MAAM,CACNC,KAAO,GAAG,CACVC,kBAAkB,CAClBC,mBAAmB,CACnBC,MAAQ,OAAO,CACfC,QAAU,SAAS,CACnBC,YAAc,SAAS,CACvBC,OAAO,CACPC,QAAU,WAAW,CACX,IACV,MAAMC,WAAanB,MAAMoB,WAAW,CAAC,KACnC,GAAIH,QAAS,OAAOA,QAEpB,GAAIH,QAAU,OAAQ,CACpB,GAAIC,UAAY,OAAQ,CACtB,OAAOC,cAAgB,UACnBd,0BACAC,kBACN,KAAO,CACL,OAAOa,cAAgB,UACnBV,sBACAC,cACN,CACF,KAAO,CACL,GAAIQ,UAAY,OAAQ,CACtB,OAAOC,cAAgB,UAAYf,qBAAuBG,aAC5D,KAAO,CACL,OAAOY,cAAgB,UAAYX,iBAAmBG,SACxD,CACF,CACF,EAAG,CAACS,QAASH,MAAOC,QAASC,YAAY,EAEzC,MAAMK,QAAUF,aAEhB,OACE,oBAACG,KAAEX,KAAMA,KAAMY,UAASb,OAAQc,UAAU,QAAS,GAAGX,mBAAmB,EACvE,oBAACY,OAAIC,IAAKL,QAASM,MAAM,QAAQC,IAAKV,QAAU,GAAGN,kBAAkB,GAG3E,CAEA,gBAAeZ,MAAM6B,IAAI,CAACpB,KAAM"}
1
+ {"version":3,"sources":["../../src/core/Logo.tsx"],"sourcesContent":["import React, { AnchorHTMLAttributes, ImgHTMLAttributes } from \"react\";\nimport Badge from \"./Badge\";\nimport cn from \"./utils/cn\";\nimport LogoAssetMonoStacked from \"./images/logo/ably-logo-mono-stacked.svg\";\nimport LogoAssetMonoWhiteStacked from \"./images/logo/ably-logo-mono-white-stacked.svg\";\nimport LogoAssetMonoWhite from \"./images/logo/ably-logo-mono-white.svg\";\nimport LogoAssetMono from \"./images/logo/ably-logo-mono.svg\";\nimport LogoAssetStacked from \"./images/logo/ably-logo-stacked.svg\";\nimport LogoAssetWhiteStacked from \"./images/logo/ably-logo-white-stacked.svg\";\nimport LogoAssetWhite from \"./images/logo/ably-logo-white.svg\";\nimport LogoAsset from \"./images/logo/ably-logo.svg\";\n\ntype LogoProps = {\n dataId?: string;\n logoUrl?: string;\n logoAlt?: string;\n href?: string;\n additionalImgAttrs?: ImgHTMLAttributes<HTMLImageElement>;\n additionalLinkAttrs?: AnchorHTMLAttributes<HTMLAnchorElement>;\n theme?: \"light\" | \"dark\";\n variant?: \"default\" | \"mono\";\n orientation?: \"default\" | \"stacked\";\n badge?: string;\n};\n\nconst Logo = ({\n dataId,\n href = \"/\",\n additionalImgAttrs,\n additionalLinkAttrs,\n theme = \"light\",\n variant = \"default\",\n orientation = \"default\",\n logoUrl,\n logoAlt = \"Ably logo\",\n badge,\n}: LogoProps) => {\n const getLogoSrc = React.useCallback(() => {\n if (logoUrl) return logoUrl;\n\n if (theme === \"dark\") {\n if (variant === \"mono\") {\n return orientation === \"stacked\"\n ? LogoAssetMonoWhiteStacked\n : LogoAssetMonoWhite;\n } else {\n return orientation === \"stacked\"\n ? LogoAssetWhiteStacked\n : LogoAssetWhite;\n }\n } else {\n if (variant === \"mono\") {\n return orientation === \"stacked\" ? LogoAssetMonoStacked : LogoAssetMono;\n } else {\n return orientation === \"stacked\" ? LogoAssetStacked : LogoAsset;\n }\n }\n }, [logoUrl, theme, variant, orientation]);\n\n const logoSrc = getLogoSrc();\n\n return (\n <a\n href={href}\n data-id={dataId}\n {...additionalLinkAttrs}\n className={cn(\n \"flex items-center gap-2 justify-center\",\n additionalLinkAttrs?.className,\n )}\n >\n <img src={logoSrc} width=\"96px\" alt={logoAlt} {...additionalImgAttrs} />\n {badge && (\n <Badge\n className=\"uppercase h-[25px] px-1.5 py-[3px] bg-transparent mt-[2px] dark:bg-transparent rounded-[4px] border border-neutral-400 dark:border-neutral-900 text-sm font-semibold text-neutral-800 dark:text-neutral-500\"\n childClassName=\"tracking-[0.01em]\"\n >\n {badge}\n </Badge>\n )}\n </a>\n );\n};\n\nexport default React.memo(Logo);\n"],"names":["React","Badge","cn","LogoAssetMonoStacked","LogoAssetMonoWhiteStacked","LogoAssetMonoWhite","LogoAssetMono","LogoAssetStacked","LogoAssetWhiteStacked","LogoAssetWhite","LogoAsset","Logo","dataId","href","additionalImgAttrs","additionalLinkAttrs","theme","variant","orientation","logoUrl","logoAlt","badge","getLogoSrc","useCallback","logoSrc","a","data-id","className","img","src","width","alt","childClassName","memo"],"mappings":"AAAA,OAAOA,UAAwD,OAAQ,AACvE,QAAOC,UAAW,SAAU,AAC5B,QAAOC,OAAQ,YAAa,AAC5B,QAAOC,yBAA0B,0CAA2C,AAC5E,QAAOC,8BAA+B,gDAAiD,AACvF,QAAOC,uBAAwB,wCAAyC,AACxE,QAAOC,kBAAmB,kCAAmC,AAC7D,QAAOC,qBAAsB,qCAAsC,AACnE,QAAOC,0BAA2B,2CAA4C,AAC9E,QAAOC,mBAAoB,mCAAoC,AAC/D,QAAOC,cAAe,6BAA8B,CAepD,MAAMC,KAAO,CAAC,CACZC,MAAM,CACNC,KAAO,GAAG,CACVC,kBAAkB,CAClBC,mBAAmB,CACnBC,MAAQ,OAAO,CACfC,QAAU,SAAS,CACnBC,YAAc,SAAS,CACvBC,OAAO,CACPC,QAAU,WAAW,CACrBC,KAAK,CACK,IACV,MAAMC,WAAatB,MAAMuB,WAAW,CAAC,KACnC,GAAIJ,QAAS,OAAOA,QAEpB,GAAIH,QAAU,OAAQ,CACpB,GAAIC,UAAY,OAAQ,CACtB,OAAOC,cAAgB,UACnBd,0BACAC,kBACN,KAAO,CACL,OAAOa,cAAgB,UACnBV,sBACAC,cACN,CACF,KAAO,CACL,GAAIQ,UAAY,OAAQ,CACtB,OAAOC,cAAgB,UAAYf,qBAAuBG,aAC5D,KAAO,CACL,OAAOY,cAAgB,UAAYX,iBAAmBG,SACxD,CACF,CACF,EAAG,CAACS,QAASH,MAAOC,QAASC,YAAY,EAEzC,MAAMM,QAAUF,aAEhB,OACE,oBAACG,KACCZ,KAAMA,KACNa,UAASd,OACR,GAAGG,mBAAmB,CACvBY,UAAWzB,GACT,yCACAa,qBAAqBY,YAGvB,oBAACC,OAAIC,IAAKL,QAASM,MAAM,OAAOC,IAAKX,QAAU,GAAGN,kBAAkB,GACnEO,OACC,oBAACpB,OACC0B,UAAU,8MACVK,eAAe,qBAEdX,OAKX,CAEA,gBAAerB,MAAMiC,IAAI,CAACtB,KAAM"}
@@ -0,0 +1,2 @@
1
+ import React from"react";import{PanelTitle}from"./PanelTitle";import Badge from"../Badge";import MeganavPanelItemLinks from"./MeganavPanelItemLinks";const getCategoryColor=category=>{const upperCategory=category.toUpperCase();if(["NEW RELEASE","ABLY ENGINEERING","ABLY NEWS","NEW FEATURE","REALTIME EXPERIENCES"].includes(upperCategory))return"orange";if(["CHAT","SPACES"].includes(upperCategory))return"blue";if(["LIVEOBJECTS","LIVESYNC"].includes(upperCategory))return"green";if(upperCategory==="PUBSUB")return"pink";if(upperCategory==="AI TRANSPORT")return"violet";return"neutral"};const MeganavBlog=({title,link,icon,posts})=>{return React.createElement(React.Fragment,null,React.createElement("div",{className:"mt-3 hidden md:block"},React.createElement(PanelTitle,{title:title,link:link}),posts.map(post=>React.createElement("a",{href:post.link,className:"flex flex-col gap-1 p-3 transition-colors group/blog-post rounded-lg hover:bg-neutral-100 dark:hover:bg-neutral-1200 active:bg-neutral-200 dark:active:bg-neutral-1100 focus-base",key:post.link},React.createElement("span",{className:"flex flex-wrap gap-2"},post.categories.map(category=>React.createElement(Badge,{color:getCategoryColor(category),key:category,size:"xs",className:"group-hover/blog-post:bg-neutral-000 dark:group-hover/blog-post:bg-neutral-1300"},category.toUpperCase()))),React.createElement("span",{className:"ui-text-label3 font-semibold text-neutral-1000 dark:text-neutral-300 group-hover/blog-post:text-neutral-1300 dark:group-hover/blog-post:text-neutral-000"},post.title),React.createElement("span",{className:"text-[11px] font-medium leading-[1.4] text-neutral-700 dark:text-neutral-600"},post.pubDate)))),React.createElement("div",{className:"block md:hidden"},React.createElement(MeganavPanelItemLinks,{listItems:[{label:title,link:link,icon:icon}]})))};export default MeganavBlog;
2
+ //# sourceMappingURL=MeganavBlog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/Meganav/MeganavBlog.tsx"],"sourcesContent":["import React from \"react\";\nimport { PanelTitle } from \"./PanelTitle\";\nimport Badge from \"../Badge\";\n\nimport { ColorClassColorGroups } from \"../styles/colors/types\";\nimport MeganavPanelItemLinks from \"./MeganavPanelItemLinks\";\nimport { IconName } from \"../Icon/types\";\n\nexport type BlogPost = {\n title: string;\n link: string;\n categories: string[];\n pubDate: string;\n};\n\nexport type MeganavBlogProps = {\n title: string;\n link: string;\n icon?: IconName;\n posts: BlogPost[];\n};\n\nconst getCategoryColor = (category: string): ColorClassColorGroups => {\n const upperCategory = category.toUpperCase();\n if (\n [\n \"NEW RELEASE\",\n \"ABLY ENGINEERING\",\n \"ABLY NEWS\",\n \"NEW FEATURE\",\n \"REALTIME EXPERIENCES\",\n ].includes(upperCategory)\n )\n return \"orange\";\n if ([\"CHAT\", \"SPACES\"].includes(upperCategory)) return \"blue\";\n if ([\"LIVEOBJECTS\", \"LIVESYNC\"].includes(upperCategory)) return \"green\";\n if (upperCategory === \"PUBSUB\") return \"pink\";\n if (upperCategory === \"AI TRANSPORT\") return \"violet\";\n return \"neutral\";\n};\n\nconst MeganavBlog = ({ title, link, icon, posts }: MeganavBlogProps) => {\n return (\n <>\n <div className=\"mt-3 hidden md:block\">\n <PanelTitle title={title} link={link} />\n {posts.map((post) => (\n <a\n href={post.link}\n className=\"flex flex-col gap-1 p-3 \n transition-colors group/blog-post rounded-lg\n hover:bg-neutral-100 dark:hover:bg-neutral-1200 \n active:bg-neutral-200 dark:active:bg-neutral-1100 focus-base\"\n key={post.link}\n >\n <span className=\"flex flex-wrap gap-2\">\n {post.categories.map((category: string) => (\n <Badge\n color={getCategoryColor(category)}\n key={category}\n size=\"xs\"\n className=\"group-hover/blog-post:bg-neutral-000 dark:group-hover/blog-post:bg-neutral-1300\"\n >\n {category.toUpperCase()}\n </Badge>\n ))}\n </span>\n <span\n className=\"ui-text-label3 font-semibold text-neutral-1000 dark:text-neutral-300\n group-hover/blog-post:text-neutral-1300 dark:group-hover/blog-post:text-neutral-000\"\n >\n {post.title}\n </span>\n\n <span className=\"text-[11px] font-medium leading-[1.4] text-neutral-700 dark:text-neutral-600\">\n {post.pubDate}\n </span>\n </a>\n ))}\n </div>\n <div className=\"block md:hidden\">\n <MeganavPanelItemLinks\n listItems={[\n {\n label: title,\n link: link,\n icon: icon,\n },\n ]}\n />\n </div>\n </>\n );\n};\n\nexport default MeganavBlog;\n"],"names":["React","PanelTitle","Badge","MeganavPanelItemLinks","getCategoryColor","category","upperCategory","toUpperCase","includes","MeganavBlog","title","link","icon","posts","div","className","map","post","a","href","key","span","categories","color","size","pubDate","listItems","label"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAASC,UAAU,KAAQ,cAAe,AAC1C,QAAOC,UAAW,UAAW,AAG7B,QAAOC,0BAA2B,yBAA0B,CAiB5D,MAAMC,iBAAmB,AAACC,WACxB,MAAMC,cAAgBD,SAASE,WAAW,GAC1C,GACE,CACE,cACA,mBACA,YACA,cACA,uBACD,CAACC,QAAQ,CAACF,eAEX,MAAO,SACT,GAAI,CAAC,OAAQ,SAAS,CAACE,QAAQ,CAACF,eAAgB,MAAO,OACvD,GAAI,CAAC,cAAe,WAAW,CAACE,QAAQ,CAACF,eAAgB,MAAO,QAChE,GAAIA,gBAAkB,SAAU,MAAO,OACvC,GAAIA,gBAAkB,eAAgB,MAAO,SAC7C,MAAO,SACT,EAEA,MAAMG,YAAc,CAAC,CAAEC,KAAK,CAAEC,IAAI,CAAEC,IAAI,CAAEC,KAAK,CAAoB,IACjE,OACE,wCACE,oBAACC,OAAIC,UAAU,wBACb,oBAACd,YAAWS,MAAOA,MAAOC,KAAMA,OAC/BE,MAAMG,GAAG,CAAC,AAACC,MACV,oBAACC,KACCC,KAAMF,KAAKN,IAAI,CACfI,UAAU,uLAIVK,IAAKH,KAAKN,IAAI,EAEd,oBAACU,QAAKN,UAAU,wBACbE,KAAKK,UAAU,CAACN,GAAG,CAAC,AAACX,UACpB,oBAACH,OACCqB,MAAOnB,iBAAiBC,UACxBe,IAAKf,SACLmB,KAAK,KACLT,UAAU,mFAETV,SAASE,WAAW,MAI3B,oBAACc,QACCN,UAAU,4JAGTE,KAAKP,KAAK,EAGb,oBAACW,QAAKN,UAAU,gFACbE,KAAKQ,OAAO,KAKrB,oBAACX,OAAIC,UAAU,mBACb,oBAACZ,uBACCuB,UAAW,CACT,CACEC,MAAOjB,MACPC,KAAMA,KACNC,KAAMA,IACR,EACD,IAKX,CAEA,gBAAeH,WAAY"}
@@ -0,0 +1,2 @@
1
+ import React from"react";import{PanelTitle}from"./PanelTitle";import MeganavPanelItemLinks from"./MeganavPanelItemLinks";const MeganavCustomerStories=({customerStoriesHighlight,title,link,icon})=>{const{companyName,companyDesc,companyLink,companyLogo,companyLogoDark}=customerStoriesHighlight;return React.createElement(React.Fragment,null,React.createElement("div",{className:"mt-3 hidden md:block"},React.createElement(PanelTitle,{title:title,link:link}),React.createElement("a",{href:companyLink,className:"flex flex-col gap-y-2.5 p-3 pointer-events-auto rounded-lg transition-colors group/customer-story-highlight hover:bg-neutral-100 dark:hover:bg-neutral-1200 focus-base active:bg-neutral-200 dark:active:bg-neutral-1100"},React.createElement("figure",{className:"rounded bg-neutral-100 dark:bg-neutral-1200 group-hover/customer-story-highlight:bg-neutral-000 dark:group-hover/customer-story-highlight:bg-neutral-1300 flex justify-center items-center gap-4 h-[120px]"},React.createElement("img",{src:companyLogo,alt:companyName,className:"max-h-[90px] max-w-[180px] dark:hidden"}),companyLogoDark&&React.createElement("img",{src:companyLogoDark,alt:companyName,className:"max-h-[90px] max-w-[180px] hidden dark:block"})),React.createElement("span",{className:"flex flex-col gap-2"},React.createElement("span",{className:"ui-text-p4 text-neutral-1000 dark:text-neutral-300"},React.createElement("strong",{className:"font-semibold text-neutral-1300 dark:text-neutral-000"},companyName)," ",companyDesc)))),React.createElement("div",{className:"block md:hidden"},React.createElement(MeganavPanelItemLinks,{listItems:[{label:title,link:link,icon:icon}]})))};export default MeganavCustomerStories;
2
+ //# sourceMappingURL=MeganavCustomerStories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/Meganav/MeganavCustomerStories.tsx"],"sourcesContent":["import React from \"react\";\nimport { PanelTitle } from \"./PanelTitle\";\nimport MeganavPanelItemLinks from \"./MeganavPanelItemLinks\";\nimport { IconName } from \"../Icon/types\";\n\nexport type CustomerStoryHighlight = {\n companyName: string;\n companyDesc: string;\n companyLink: string;\n companyLogo: string;\n companyLogoDark?: string;\n};\n\nconst MeganavCustomerStories = ({\n customerStoriesHighlight,\n title,\n link,\n icon,\n}: {\n customerStoriesHighlight: CustomerStoryHighlight;\n title: string;\n link: string;\n icon?: IconName;\n}) => {\n const {\n companyName,\n companyDesc,\n companyLink,\n companyLogo,\n companyLogoDark,\n } = customerStoriesHighlight;\n return (\n <>\n <div className=\"mt-3 hidden md:block\">\n <PanelTitle title={title} link={link} />\n <a\n href={companyLink}\n className=\"flex flex-col gap-y-2.5 p-3 pointer-events-auto rounded-lg\n transition-colors group/customer-story-highlight \n hover:bg-neutral-100 dark:hover:bg-neutral-1200 focus-base\n active:bg-neutral-200 dark:active:bg-neutral-1100\"\n >\n <figure\n className=\"rounded bg-neutral-100 dark:bg-neutral-1200 \n group-hover/customer-story-highlight:bg-neutral-000 \n dark:group-hover/customer-story-highlight:bg-neutral-1300\n flex justify-center items-center gap-4 h-[120px]\"\n >\n <img\n src={companyLogo}\n alt={companyName}\n className=\"max-h-[90px] max-w-[180px] dark:hidden\"\n />\n {companyLogoDark && (\n <img\n src={companyLogoDark}\n alt={companyName}\n className=\"max-h-[90px] max-w-[180px] hidden dark:block\"\n />\n )}\n </figure>\n <span className=\"flex flex-col gap-2\">\n <span className=\"ui-text-p4 text-neutral-1000 dark:text-neutral-300\">\n <strong className=\"font-semibold text-neutral-1300 dark:text-neutral-000\">\n {companyName}\n </strong>{\" \"}\n {companyDesc}\n </span>\n </span>\n </a>\n </div>\n <div className=\"block md:hidden\">\n <MeganavPanelItemLinks\n listItems={[\n {\n label: title,\n link: link,\n icon: icon,\n },\n ]}\n />\n </div>\n </>\n );\n};\n\nexport default MeganavCustomerStories;\n"],"names":["React","PanelTitle","MeganavPanelItemLinks","MeganavCustomerStories","customerStoriesHighlight","title","link","icon","companyName","companyDesc","companyLink","companyLogo","companyLogoDark","div","className","a","href","figure","img","src","alt","span","strong","listItems","label"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAASC,UAAU,KAAQ,cAAe,AAC1C,QAAOC,0BAA2B,yBAA0B,CAW5D,MAAMC,uBAAyB,CAAC,CAC9BC,wBAAwB,CACxBC,KAAK,CACLC,IAAI,CACJC,IAAI,CAML,IACC,KAAM,CACJC,WAAW,CACXC,WAAW,CACXC,WAAW,CACXC,WAAW,CACXC,eAAe,CAChB,CAAGR,yBACJ,OACE,wCACE,oBAACS,OAAIC,UAAU,wBACb,oBAACb,YAAWI,MAAOA,MAAOC,KAAMA,OAChC,oBAACS,KACCC,KAAMN,YACNI,UAAU,6NAKV,oBAACG,UACCH,UAAU,gNAKV,oBAACI,OACCC,IAAKR,YACLS,IAAKZ,YACLM,UAAU,2CAEXF,iBACC,oBAACM,OACCC,IAAKP,gBACLQ,IAAKZ,YACLM,UAAU,kDAIhB,oBAACO,QAAKP,UAAU,uBACd,oBAACO,QAAKP,UAAU,sDACd,oBAACQ,UAAOR,UAAU,yDACfN,aACO,IACTC,gBAKT,oBAACI,OAAIC,UAAU,mBACb,oBAACZ,uBACCqB,UAAW,CACT,CACEC,MAAOnB,MACPC,KAAMA,KACNC,KAAMA,IACR,EACD,IAKX,CAEA,gBAAeJ,sBAAuB"}
@@ -1,2 +1,2 @@
1
- import React from"react";import Accordion from"../Accordion";import{menuItemLinks}from"./data";import cn from"../utils/cn";export const MeganavMobile=({navItems})=>{const menuItemClassname="text-[18px] py-3 font-bold text-neutral-1000 dark:text-neutral-000";return React.createElement("div",{className:"overflow-y-auto"},React.createElement(Accordion,{theme:"transparent",className:"px-4 pt-4",data:navItems,icons:{closed:{name:"icon-gui-chevron-down-outline"},open:{name:"icon-gui-chevron-up-outline"}},options:{autoClose:true,hideBorders:true,headerCSS:`px-0 ${menuItemClassname}`,contentCSS:"px-0",selectedHeaderCSS:"text-neutral-1300 dark:text-neutral-000",rowIconSize:"24px"}}),menuItemLinks&&React.createElement("div",{className:"mb-3"},menuItemLinks.map(link=>React.createElement("a",{href:link.link,key:link.name,className:cn("px-4 w-full block ui-text-p1",menuItemClassname)},link.name))))};
1
+ import React from"react";import Accordion from"../Accordion";import{menuItemLinks}from"./data";import cn from"../utils/cn";export const MeganavMobile=({navItems})=>{const menuItemClassname="text-[18px] py-3 font-bold text-neutral-1000 dark:text-neutral-000 hover:text-neutral-1000 dark:hover:text-neutral-000 active:text-neutral-1000 dark:active:text-neutral-000";return React.createElement("div",{className:"overflow-y-auto"},React.createElement(Accordion,{theme:"transparent",className:"px-4 pt-4",data:navItems,icons:{closed:{name:"icon-gui-chevron-down-outline"},open:{name:"icon-gui-chevron-up-outline"}},options:{autoClose:true,hideBorders:true,headerCSS:`px-0 ${menuItemClassname}`,contentCSS:"px-0",selectedHeaderCSS:"text-neutral-1300 dark:text-neutral-000",rowIconSize:"24px"}}),menuItemLinks&&React.createElement("div",{className:"mb-3"},menuItemLinks.map(link=>React.createElement("a",{href:link.link,key:link.name,className:cn("px-4 w-full block ui-text-p1",menuItemClassname)},link.name))))};
2
2
  //# sourceMappingURL=MeganavMobile.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/Meganav/MeganavMobile.tsx"],"sourcesContent":["import React from \"react\";\nimport Accordion from \"../Accordion\";\nimport { AccordionData } from \"../Accordion/types\";\nimport { menuItemLinks } from \"./data\";\nimport cn from \"../utils/cn\";\n\nexport const MeganavMobile = ({ navItems }: { navItems: AccordionData[] }) => {\n const menuItemClassname =\n \"text-[18px] py-3 font-bold text-neutral-1000 dark:text-neutral-000\";\n return (\n <div className=\"overflow-y-auto\">\n <Accordion\n theme=\"transparent\"\n className=\"px-4 pt-4\"\n data={navItems}\n icons={{\n closed: { name: \"icon-gui-chevron-down-outline\" },\n open: { name: \"icon-gui-chevron-up-outline\" },\n }}\n options={{\n autoClose: true,\n hideBorders: true,\n headerCSS: `px-0 ${menuItemClassname}`,\n contentCSS: \"px-0\",\n selectedHeaderCSS: \"text-neutral-1300 dark:text-neutral-000\",\n rowIconSize: \"24px\",\n }}\n />\n {menuItemLinks && (\n <div className=\"mb-3\">\n {menuItemLinks.map((link) => (\n <a\n href={link.link}\n key={link.name}\n className={cn(\"px-4 w-full block ui-text-p1\", menuItemClassname)}\n >\n {link.name}\n </a>\n ))}\n </div>\n )}\n </div>\n );\n};\n"],"names":["React","Accordion","menuItemLinks","cn","MeganavMobile","navItems","menuItemClassname","div","className","theme","data","icons","closed","name","open","options","autoClose","hideBorders","headerCSS","contentCSS","selectedHeaderCSS","rowIconSize","map","link","a","href","key"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,cAAe,cAAe,AAErC,QAASC,aAAa,KAAQ,QAAS,AACvC,QAAOC,OAAQ,aAAc,AAE7B,QAAO,MAAMC,cAAgB,CAAC,CAAEC,QAAQ,CAAiC,IACvE,MAAMC,kBACJ,qEACF,OACE,oBAACC,OAAIC,UAAU,mBACb,oBAACP,WACCQ,MAAM,cACND,UAAU,YACVE,KAAML,SACNM,MAAO,CACLC,OAAQ,CAAEC,KAAM,+BAAgC,EAChDC,KAAM,CAAED,KAAM,6BAA8B,CAC9C,EACAE,QAAS,CACPC,UAAW,KACXC,YAAa,KACbC,UAAW,CAAC,KAAK,EAAEZ,kBAAkB,CAAC,CACtCa,WAAY,OACZC,kBAAmB,0CACnBC,YAAa,MACf,IAEDnB,eACC,oBAACK,OAAIC,UAAU,QACZN,cAAcoB,GAAG,CAAC,AAACC,MAClB,oBAACC,KACCC,KAAMF,KAAKA,IAAI,CACfG,IAAKH,KAAKV,IAAI,CACdL,UAAWL,GAAG,+BAAgCG,oBAE7CiB,KAAKV,IAAI,IAOxB,CAAE"}
1
+ {"version":3,"sources":["../../../src/core/Meganav/MeganavMobile.tsx"],"sourcesContent":["import React from \"react\";\nimport Accordion from \"../Accordion\";\nimport { AccordionData } from \"../Accordion/types\";\nimport { menuItemLinks } from \"./data\";\nimport cn from \"../utils/cn\";\n\nexport const MeganavMobile = ({ navItems }: { navItems: AccordionData[] }) => {\n const menuItemClassname =\n \"text-[18px] py-3 font-bold text-neutral-1000 dark:text-neutral-000 hover:text-neutral-1000 dark:hover:text-neutral-000 active:text-neutral-1000 dark:active:text-neutral-000\";\n return (\n <div className=\"overflow-y-auto\">\n <Accordion\n theme=\"transparent\"\n className=\"px-4 pt-4\"\n data={navItems}\n icons={{\n closed: { name: \"icon-gui-chevron-down-outline\" },\n open: { name: \"icon-gui-chevron-up-outline\" },\n }}\n options={{\n autoClose: true,\n hideBorders: true,\n headerCSS: `px-0 ${menuItemClassname}`,\n contentCSS: \"px-0\",\n selectedHeaderCSS: \"text-neutral-1300 dark:text-neutral-000\",\n rowIconSize: \"24px\",\n }}\n />\n {menuItemLinks && (\n <div className=\"mb-3\">\n {menuItemLinks.map((link) => (\n <a\n href={link.link}\n key={link.name}\n className={cn(\"px-4 w-full block ui-text-p1\", menuItemClassname)}\n >\n {link.name}\n </a>\n ))}\n </div>\n )}\n </div>\n );\n};\n"],"names":["React","Accordion","menuItemLinks","cn","MeganavMobile","navItems","menuItemClassname","div","className","theme","data","icons","closed","name","open","options","autoClose","hideBorders","headerCSS","contentCSS","selectedHeaderCSS","rowIconSize","map","link","a","href","key"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,cAAe,cAAe,AAErC,QAASC,aAAa,KAAQ,QAAS,AACvC,QAAOC,OAAQ,aAAc,AAE7B,QAAO,MAAMC,cAAgB,CAAC,CAAEC,QAAQ,CAAiC,IACvE,MAAMC,kBACJ,+KACF,OACE,oBAACC,OAAIC,UAAU,mBACb,oBAACP,WACCQ,MAAM,cACND,UAAU,YACVE,KAAML,SACNM,MAAO,CACLC,OAAQ,CAAEC,KAAM,+BAAgC,EAChDC,KAAM,CAAED,KAAM,6BAA8B,CAC9C,EACAE,QAAS,CACPC,UAAW,KACXC,YAAa,KACbC,UAAW,CAAC,KAAK,EAAEZ,kBAAkB,CAAC,CACtCa,WAAY,OACZC,kBAAmB,0CACnBC,YAAa,MACf,IAEDnB,eACC,oBAACK,OAAIC,UAAU,QACZN,cAAcoB,GAAG,CAAC,AAACC,MAClB,oBAACC,KACCC,KAAMF,KAAKA,IAAI,CACfG,IAAKH,KAAKV,IAAI,CACdL,UAAWL,GAAG,+BAAgCG,oBAE7CiB,KAAKV,IAAI,IAOxB,CAAE"}
@@ -1,2 +1,2 @@
1
- import React from"react";import cn from"../utils/cn";import Icon from"../Icon";import{productsForNav}from"./data";import{productNames}from"../ProductTile/data";import MeganavProductTile from"./MeganavProductTile";export const MeganavPanel=({displayProductTile,panelLeft,panelLeftClassName,panelRightHeading,panelRightItems,panelRightBottom})=>{return React.createElement("div",{className:"flex flex-col md:flex-row gap-x-6 bg-neutral-000 dark:bg-neutral-1300"},React.createElement("div",{className:cn("flex-[7] flex-shrink-0 group",{"grid-cols-1 xs:grid-cols-2":displayProductTile},panelLeftClassName)},displayProductTile?productNames.map(product=>React.createElement(MeganavProductTile,{name:product,key:product,productLink:productsForNav[product].link??"#",animateIcons:true})):panelLeft&&React.createElement("a",{className:"grid grid-cols-1 xs:grid-cols-2 pointer-events-auto",href:panelLeft.url},React.createElement("span",{className:"block w-full p-6"},React.createElement("h4",{className:"ui-text-h4 text-neutral-1300 dark:text-neutral-000"},panelLeft.heading),React.createElement("span",{className:"block ui-text-p3 text-neutral-800 dark:text-neutral-500 mt-2"},panelLeft.content),React.createElement("span",{className:"py-2 font-sans font-bold block group/featured-link text-neutral-1300 dark:text-neutral-000 mt-4 ui-text-p3 hover:text-neutral-1300 dark:hover:text-neutral-000"},panelLeft.labelLink,React.createElement(Icon,{name:"icon-gui-arrow-long-right-outline",size:"18px",color:"text-orange-600",additionalCSS:cn("align-middle ml-2 relative -top-px -left-1 transition-[left]","group-hover/featured-link:left-0 group-hover/meganav-panel:left-0")}))),React.createElement("span",{className:"flex justify-end"},React.createElement("img",{src:panelLeft.image,alt:panelLeft.heading,className:"w-full z-10 rounded-lg"})))),React.createElement("div",{className:"flex-[3] flex-shrink-0 flex flex-col justify-between"},React.createElement("ul",null,panelRightHeading&&React.createElement("p",{className:"ui-text-overline2 text-neutral-700 dark:text-neutral-600 my-3"},panelRightHeading),panelRightItems.map(item=>React.createElement("li",{className:cn("list-none py-2.5 md:py-2 my-0 flex gap-x-2.5 group hover:cursor-pointer",item.isMobile?"md:hidden":"md:flex"),key:item.label},React.createElement(Icon,{name:item.icon,size:"1.25rem",additionalCSS:"text-neutral-1000 dark:text-neutral-300"}),React.createElement("a",{className:"pointer-events-auto ui-text-label2 md:ui-text-label3 font-semibold text-neutral-1000 dark:text-neutral-300 group-hover:text-neutral-1300 dark:group-hover:text-neutral-000",href:item.link},item.label)))),panelRightBottom&&React.createElement("div",{className:"items-end mt-4 md:mt-0"},panelRightBottom)))};
1
+ import React from"react";import{productsForNav}from"./data";import{productNames}from"../ProductTile/data";import MeganavPanelItemLinks from"./MeganavPanelItemLinks";import MeganavTile from"./MeganavTile";import cn from"../utils/cn";const basePanelClassName="bg-neutral-000 dark:bg-neutral-1300 m-0 md:m-6";const gridPanelClassName=cn(basePanelClassName,"grid grid-cols-1 md:grid-cols-3 gap-x-4");export const MeganavPanel=({displayProductTile,panelLeft,panelMiddleItems,panelRightItems,panelRightBottom,panelRightBottomClassName})=>{const renderProductsGrid=()=>React.createElement("div",{className:"grid grid-cols-1 sm:grid-cols-2 col-span-1 sm:col-span-2"},productNames.map(product=>React.createElement(MeganavTile,{key:product,productName:product,link:productsForNav[product].link??"#",animateIcons:true})));return React.createElement("div",{className:cn(gridPanelClassName,"items-start")},displayProductTile?renderProductsGrid():React.createElement(React.Fragment,null,panelLeft,panelMiddleItems),React.createElement("div",{className:"flex flex-col justify-between gap-y-6 mt-3 self-stretch"},panelRightItems?.map(rightItem=>React.createElement(MeganavPanelItemLinks,{key:rightItem.link?.label||rightItem.label,label:rightItem.label,listItems:rightItem.listItems,link:rightItem.link,displayTitleInMobile:rightItem.displayTitleInMobile??true})),panelRightBottom&&React.createElement("div",{className:cn("items-end mt-4 md:mt-0",panelRightBottomClassName)},panelRightBottom)))};export const MeganavPanelFullwidth=({panelItems})=>React.createElement(React.Fragment,null,React.createElement("div",{className:cn(gridPanelClassName,"hidden md:grid")},panelItems.map(item=>React.createElement(MeganavTile,{key:item.label,navLabel:item.label,navIcon:item.icon,navDescription:item.description,link:item.link,showAblyText:false}))),React.createElement("div",{className:cn(basePanelClassName,"block md:hidden")},React.createElement(MeganavPanelItemLinks,{listItems:panelItems})));
2
2
  //# sourceMappingURL=MeganavPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/Meganav/MeganavPanel.tsx"],"sourcesContent":["import React from \"react\";\nimport cn from \"../utils/cn\";\nimport Icon from \"../Icon\";\nimport { FlyoutPanelHighlight, FlyoutPanelList, productsForNav } from \"./data\";\nimport { ProductName, productNames } from \"../ProductTile/data\";\nimport MeganavProductTile from \"./MeganavProductTile\";\n\nexport const MeganavPanel = ({\n displayProductTile,\n panelLeft,\n panelLeftClassName,\n panelRightHeading,\n panelRightItems,\n panelRightBottom,\n}: {\n displayProductTile?: boolean;\n panelLeft?: FlyoutPanelHighlight;\n panelLeftClassName?: string;\n panelRightHeading?: string;\n panelRightItems: FlyoutPanelList[];\n panelRightBottom?: React.ReactNode;\n}) => {\n return (\n <div className=\"flex flex-col md:flex-row gap-x-6 bg-neutral-000 dark:bg-neutral-1300\">\n <div\n className={cn(\n \"flex-[7] flex-shrink-0 group\",\n { \"grid-cols-1 xs:grid-cols-2\": displayProductTile },\n panelLeftClassName,\n )}\n >\n {displayProductTile\n ? productNames.map((product) => (\n <MeganavProductTile\n name={product as ProductName}\n key={product}\n productLink={productsForNav[product].link ?? \"#\"}\n animateIcons={true}\n />\n ))\n : panelLeft && (\n <a\n className=\"grid grid-cols-1 xs:grid-cols-2 pointer-events-auto\"\n href={panelLeft.url}\n >\n <span className=\"block w-full p-6\">\n <h4 className=\"ui-text-h4 text-neutral-1300 dark:text-neutral-000\">\n {panelLeft.heading}\n </h4>\n <span className=\"block ui-text-p3 text-neutral-800 dark:text-neutral-500 mt-2\">\n {panelLeft.content}\n </span>\n <span className=\"py-2 font-sans font-bold block group/featured-link text-neutral-1300 dark:text-neutral-000 mt-4 ui-text-p3 hover:text-neutral-1300 dark:hover:text-neutral-000\">\n {panelLeft.labelLink}\n <Icon\n name=\"icon-gui-arrow-long-right-outline\"\n size=\"18px\"\n color=\"text-orange-600\"\n additionalCSS={cn(\n \"align-middle ml-2 relative -top-px -left-1 transition-[left]\",\n \"group-hover/featured-link:left-0 group-hover/meganav-panel:left-0\",\n )}\n />\n </span>\n </span>\n <span className=\"flex justify-end\">\n <img\n src={panelLeft.image}\n alt={panelLeft.heading}\n className=\"w-full z-10 rounded-lg\"\n />\n </span>\n </a>\n )}\n </div>\n <div className=\"flex-[3] flex-shrink-0 flex flex-col justify-between\">\n <ul>\n {panelRightHeading && (\n <p className=\"ui-text-overline2 text-neutral-700 dark:text-neutral-600 my-3\">\n {panelRightHeading}\n </p>\n )}\n\n {panelRightItems.map((item) => (\n <li\n className={cn(\n \"list-none py-2.5 md:py-2 my-0 flex gap-x-2.5 group hover:cursor-pointer\",\n item.isMobile ? \"md:hidden\" : \"md:flex\",\n )}\n key={item.label}\n >\n <Icon\n name={item.icon}\n size=\"1.25rem\"\n additionalCSS=\"text-neutral-1000 dark:text-neutral-300\"\n />\n <a\n className=\"pointer-events-auto ui-text-label2 md:ui-text-label3 font-semibold text-neutral-1000 dark:text-neutral-300 group-hover:text-neutral-1300 dark:group-hover:text-neutral-000\"\n href={item.link}\n >\n {item.label}\n </a>\n </li>\n ))}\n </ul>\n {panelRightBottom && (\n <div className=\"items-end mt-4 md:mt-0\">{panelRightBottom}</div>\n )}\n </div>\n </div>\n );\n};\n"],"names":["React","cn","Icon","productsForNav","productNames","MeganavProductTile","MeganavPanel","displayProductTile","panelLeft","panelLeftClassName","panelRightHeading","panelRightItems","panelRightBottom","div","className","map","product","name","key","productLink","link","animateIcons","a","href","url","span","h4","heading","content","labelLink","size","color","additionalCSS","img","src","image","alt","ul","p","item","li","isMobile","label","icon"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,OAAQ,aAAc,AAC7B,QAAOC,SAAU,SAAU,AAC3B,QAAgDC,cAAc,KAAQ,QAAS,AAC/E,QAAsBC,YAAY,KAAQ,qBAAsB,AAChE,QAAOC,uBAAwB,sBAAuB,AAEtD,QAAO,MAAMC,aAAe,CAAC,CAC3BC,kBAAkB,CAClBC,SAAS,CACTC,kBAAkB,CAClBC,iBAAiB,CACjBC,eAAe,CACfC,gBAAgB,CAQjB,IACC,OACE,oBAACC,OAAIC,UAAU,yEACb,oBAACD,OACCC,UAAWb,GACT,+BACA,CAAE,6BAA8BM,kBAAmB,EACnDE,qBAGDF,mBACGH,aAAaW,GAAG,CAAC,AAACC,SAChB,oBAACX,oBACCY,KAAMD,QACNE,IAAKF,QACLG,YAAahB,cAAc,CAACa,QAAQ,CAACI,IAAI,EAAI,IAC7CC,aAAc,QAGlBb,WACE,oBAACc,KACCR,UAAU,sDACVS,KAAMf,UAAUgB,GAAG,EAEnB,oBAACC,QAAKX,UAAU,oBACd,oBAACY,MAAGZ,UAAU,sDACXN,UAAUmB,OAAO,EAEpB,oBAACF,QAAKX,UAAU,gEACbN,UAAUoB,OAAO,EAEpB,oBAACH,QAAKX,UAAU,kKACbN,UAAUqB,SAAS,CACpB,oBAAC3B,MACCe,KAAK,oCACLa,KAAK,OACLC,MAAM,kBACNC,cAAe/B,GACb,+DACA,yEAKR,oBAACwB,QAAKX,UAAU,oBACd,oBAACmB,OACCC,IAAK1B,UAAU2B,KAAK,CACpBC,IAAK5B,UAAUmB,OAAO,CACtBb,UAAU,8BAMxB,oBAACD,OAAIC,UAAU,wDACb,oBAACuB,UACE3B,mBACC,oBAAC4B,KAAExB,UAAU,iEACVJ,mBAIJC,gBAAgBI,GAAG,CAAC,AAACwB,MACpB,oBAACC,MACC1B,UAAWb,GACT,2EACAsC,KAAKE,QAAQ,CAAG,YAAc,WAEhCvB,IAAKqB,KAAKG,KAAK,EAEf,oBAACxC,MACCe,KAAMsB,KAAKI,IAAI,CACfb,KAAK,UACLE,cAAc,4CAEhB,oBAACV,KACCR,UAAU,6KACVS,KAAMgB,KAAKnB,IAAI,EAEdmB,KAAKG,KAAK,KAKlB9B,kBACC,oBAACC,OAAIC,UAAU,0BAA0BF,mBAKnD,CAAE"}
1
+ {"version":3,"sources":["../../../src/core/Meganav/MeganavPanel.tsx"],"sourcesContent":["import React from \"react\";\nimport { FlyoutPanelList, productsForNav } from \"./data\";\nimport { ProductName, productNames } from \"../ProductTile/data\";\nimport MeganavPanelItemLinks, {\n MeganavPanelItemLink,\n} from \"./MeganavPanelItemLinks\";\nimport MeganavTile from \"./MeganavTile\";\nimport cn from \"../utils/cn\";\n\ntype MeganavPanelProps = {\n displayProductTile?: boolean;\n panelLeft?: React.ReactNode;\n panelMiddleItems?: React.ReactNode;\n panelRightItems?: MeganavPanelItemLink[];\n panelRightBottom?: React.ReactNode;\n panelRightBottomClassName?: string;\n};\n\nconst basePanelClassName = \"bg-neutral-000 dark:bg-neutral-1300 m-0 md:m-6\";\n\nconst gridPanelClassName = cn(\n basePanelClassName,\n \"grid grid-cols-1 md:grid-cols-3 gap-x-4\",\n);\n\nexport const MeganavPanel = ({\n displayProductTile,\n panelLeft,\n panelMiddleItems,\n panelRightItems,\n panelRightBottom,\n panelRightBottomClassName,\n}: MeganavPanelProps) => {\n const renderProductsGrid = () => (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 col-span-1 sm:col-span-2\">\n {productNames.map((product) => (\n <MeganavTile\n key={product}\n productName={product as ProductName}\n link={productsForNav[product].link ?? \"#\"}\n animateIcons\n />\n ))}\n </div>\n );\n\n return (\n <div className={cn(gridPanelClassName, \"items-start\")}>\n {displayProductTile ? (\n renderProductsGrid()\n ) : (\n <>\n {panelLeft}\n {panelMiddleItems}\n </>\n )}\n\n <div className=\"flex flex-col justify-between gap-y-6 mt-3 self-stretch\">\n {panelRightItems?.map((rightItem) => (\n <MeganavPanelItemLinks\n key={rightItem.link?.label || rightItem.label}\n label={rightItem.label}\n listItems={rightItem.listItems}\n link={rightItem.link}\n displayTitleInMobile={rightItem.displayTitleInMobile ?? true}\n />\n ))}\n {panelRightBottom && (\n <div\n className={cn(\"items-end mt-4 md:mt-0\", panelRightBottomClassName)}\n >\n {panelRightBottom}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport const MeganavPanelFullwidth = ({\n panelItems,\n}: {\n panelItems: FlyoutPanelList[];\n}) => (\n <>\n <div className={cn(gridPanelClassName, \"hidden md:grid\")}>\n {panelItems.map((item) => (\n <MeganavTile\n key={item.label}\n navLabel={item.label}\n navIcon={item.icon}\n navDescription={item.description}\n link={item.link}\n showAblyText={false}\n />\n ))}\n </div>\n <div className={cn(basePanelClassName, \"block md:hidden\")}>\n <MeganavPanelItemLinks listItems={panelItems} />\n </div>\n </>\n);\n"],"names":["React","productsForNav","productNames","MeganavPanelItemLinks","MeganavTile","cn","basePanelClassName","gridPanelClassName","MeganavPanel","displayProductTile","panelLeft","panelMiddleItems","panelRightItems","panelRightBottom","panelRightBottomClassName","renderProductsGrid","div","className","map","product","key","productName","link","animateIcons","rightItem","label","listItems","displayTitleInMobile","MeganavPanelFullwidth","panelItems","item","navLabel","navIcon","icon","navDescription","description","showAblyText"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAA0BC,cAAc,KAAQ,QAAS,AACzD,QAAsBC,YAAY,KAAQ,qBAAsB,AAChE,QAAOC,0BAEA,yBAA0B,AACjC,QAAOC,gBAAiB,eAAgB,AACxC,QAAOC,OAAQ,aAAc,CAW7B,MAAMC,mBAAqB,iDAE3B,MAAMC,mBAAqBF,GACzBC,mBACA,0CAGF,QAAO,MAAME,aAAe,CAAC,CAC3BC,kBAAkB,CAClBC,SAAS,CACTC,gBAAgB,CAChBC,eAAe,CACfC,gBAAgB,CAChBC,yBAAyB,CACP,IAClB,MAAMC,mBAAqB,IACzB,oBAACC,OAAIC,UAAU,4DACZf,aAAagB,GAAG,CAAC,AAACC,SACjB,oBAACf,aACCgB,IAAKD,QACLE,YAAaF,QACbG,KAAMrB,cAAc,CAACkB,QAAQ,CAACG,IAAI,EAAI,IACtCC,aAAAA,SAMR,OACE,oBAACP,OAAIC,UAAWZ,GAAGE,mBAAoB,gBACpCE,mBACCM,qBAEA,wCACGL,UACAC,kBAIL,oBAACK,OAAIC,UAAU,2DACZL,iBAAiBM,IAAI,AAACM,WACrB,oBAACrB,uBACCiB,IAAKI,UAAUF,IAAI,EAAEG,OAASD,UAAUC,KAAK,CAC7CA,MAAOD,UAAUC,KAAK,CACtBC,UAAWF,UAAUE,SAAS,CAC9BJ,KAAME,UAAUF,IAAI,CACpBK,qBAAsBH,UAAUG,oBAAoB,EAAI,QAG3Dd,kBACC,oBAACG,OACCC,UAAWZ,GAAG,yBAA0BS,4BAEvCD,mBAMb,CAAE,AAEF,QAAO,MAAMe,sBAAwB,CAAC,CACpCC,UAAU,CAGX,GACC,wCACE,oBAACb,OAAIC,UAAWZ,GAAGE,mBAAoB,mBACpCsB,WAAWX,GAAG,CAAC,AAACY,MACf,oBAAC1B,aACCgB,IAAKU,KAAKL,KAAK,CACfM,SAAUD,KAAKL,KAAK,CACpBO,QAASF,KAAKG,IAAI,CAClBC,eAAgBJ,KAAKK,WAAW,CAChCb,KAAMQ,KAAKR,IAAI,CACfc,aAAc,UAIpB,oBAACpB,OAAIC,UAAWZ,GAAGC,mBAAoB,oBACrC,oBAACH,uBAAsBuB,UAAWG,cAGtC"}
@@ -0,0 +1,2 @@
1
+ import React from"react";import Icon from"../Icon";import cn from"../utils/cn";import Badge from"../Badge";import{PanelTitle}from"./PanelTitle";const MeganavPanelItemLinks=({label,listItems,link,displayTitleInMobile=true})=>{return React.createElement("ul",{className:cn(!displayTitleInMobile&&"-mt-3 md:mt-0")},(link?.label||label)&&React.createElement(PanelTitle,{title:link?.label||label||"",link:link?.link??"",displayTitleInMobile:displayTitleInMobile}),listItems&&listItems.map(listItem=>React.createElement("li",{className:cn("list-none py-2.5 md:py-2 px-3 my-0 flex gap-x-2.5 rounded-lg group hover:cursor-pointer","hover:bg-neutral-100 dark:hover:bg-neutral-1200 active:bg-neutral-200 dark:active:bg-neutral-1100",listItem.isMobile?"md:hidden":"md:flex"),key:listItem.label},listItem.icon&&React.createElement(Icon,{name:listItem.icon,size:"1.25rem",additionalCSS:"text-neutral-1000 dark:text-neutral-300"}),React.createElement("a",{className:"pointer-events-auto font-sans text-label2 md:text-label3 font-semibold text-neutral-1000 dark:text-neutral-300 group-hover:text-neutral-1300 dark:group-hover:text-neutral-000 focus-base",href:listItem.link},listItem.label),listItem.badge&&React.createElement(Badge,{size:"xs"},listItem.badge))))};export default MeganavPanelItemLinks;
2
+ //# sourceMappingURL=MeganavPanelItemLinks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/Meganav/MeganavPanelItemLinks.tsx"],"sourcesContent":["import React from \"react\";\nimport Icon from \"../Icon\";\nimport cn from \"../utils/cn\";\nimport Badge from \"../Badge\";\nimport { PanelTitle } from \"./PanelTitle\";\nimport { IconName } from \"../Icon/types\";\nimport { FlyoutPanelList } from \"./data\";\n\nexport type MeganavPanelItemLink = {\n label?: string;\n listItems: FlyoutPanelList[];\n icon?: IconName;\n link?: {\n label: string;\n link: string;\n };\n displayTitleInMobile?: boolean;\n};\n\nconst MeganavPanelItemLinks = ({\n label,\n listItems,\n link,\n displayTitleInMobile = true,\n}: MeganavPanelItemLink) => {\n return (\n <ul className={cn(!displayTitleInMobile && \"-mt-3 md:mt-0\")}>\n {(link?.label || label) && (\n <PanelTitle\n title={link?.label || label || \"\"}\n link={link?.link ?? \"\"}\n displayTitleInMobile={displayTitleInMobile}\n />\n )}\n\n {listItems &&\n listItems.map((listItem) => (\n <li\n className={cn(\n \"list-none py-2.5 md:py-2 px-3 my-0 flex gap-x-2.5 rounded-lg group hover:cursor-pointer\",\n \"hover:bg-neutral-100 dark:hover:bg-neutral-1200 active:bg-neutral-200 dark:active:bg-neutral-1100\",\n listItem.isMobile ? \"md:hidden\" : \"md:flex\",\n )}\n key={listItem.label}\n >\n {listItem.icon && (\n <Icon\n name={listItem.icon}\n size=\"1.25rem\"\n additionalCSS=\"text-neutral-1000 dark:text-neutral-300\"\n />\n )}\n <a\n className=\"pointer-events-auto font-sans text-label2 md:text-label3 font-semibold text-neutral-1000 dark:text-neutral-300 \n group-hover:text-neutral-1300 dark:group-hover:text-neutral-000 focus-base\"\n href={listItem.link}\n >\n {listItem.label}\n </a>\n {listItem.badge && <Badge size=\"xs\">{listItem.badge}</Badge>}\n </li>\n ))}\n </ul>\n );\n};\n\nexport default MeganavPanelItemLinks;\n"],"names":["React","Icon","cn","Badge","PanelTitle","MeganavPanelItemLinks","label","listItems","link","displayTitleInMobile","ul","className","title","map","listItem","li","isMobile","key","icon","name","size","additionalCSS","a","href","badge"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,SAAU,SAAU,AAC3B,QAAOC,OAAQ,aAAc,AAC7B,QAAOC,UAAW,UAAW,AAC7B,QAASC,UAAU,KAAQ,cAAe,CAe1C,MAAMC,sBAAwB,CAAC,CAC7BC,KAAK,CACLC,SAAS,CACTC,IAAI,CACJC,qBAAuB,IAAI,CACN,IACrB,OACE,oBAACC,MAAGC,UAAWT,GAAG,CAACO,sBAAwB,kBACxC,AAACD,CAAAA,MAAMF,OAASA,KAAI,GACnB,oBAACF,YACCQ,MAAOJ,MAAMF,OAASA,OAAS,GAC/BE,KAAMA,MAAMA,MAAQ,GACpBC,qBAAsBA,uBAIzBF,WACCA,UAAUM,GAAG,CAAC,AAACC,UACb,oBAACC,MACCJ,UAAWT,GACT,0FACA,oGACAY,SAASE,QAAQ,CAAG,YAAc,WAEpCC,IAAKH,SAASR,KAAK,EAElBQ,SAASI,IAAI,EACZ,oBAACjB,MACCkB,KAAML,SAASI,IAAI,CACnBE,KAAK,UACLC,cAAc,4CAGlB,oBAACC,KACCX,UAAU,6LAEVY,KAAMT,SAASN,IAAI,EAElBM,SAASR,KAAK,EAEhBQ,SAASU,KAAK,EAAI,oBAACrB,OAAMiB,KAAK,MAAMN,SAASU,KAAK,IAK/D,CAEA,gBAAenB,qBAAsB"}
@@ -0,0 +1,2 @@
1
+ import React from"react";import cn from"../utils/cn";import{products}from"../ProductTile/data";import ProductIcon from"../ProductTile/ProductIcon";import ProductLabel from"../ProductTile/ProductLabel";import ProductDescription from"../ProductTile/ProductDescription";const CONTAINER_GAP_RATIO=3;const MeganavTile=({productName,navLabel,navIcon,navDescription,link,animateIcons=false,showAblyText=true})=>{const productData=productName?products[productName]:null;const icon=productData?.icon??navIcon;const hoverIcon=productData?.hoverIcon;const label=productData?.label??navLabel??"";const description=productData?.description??navDescription??"";const unavailable=productData?.unavailable??false;const numericalSize=40;return React.createElement("a",{href:link,className:cn("transition-colors group/product-tile","flex flex-col p-3 rounded-lg gap-2 pointer-events-auto focus-base","bg-neutral-000 dark:bg-neutral-1300","hover:bg-neutral-100 dark:hover:bg-neutral-1200","active:bg-neutral-200 dark:active:bg-neutral-1100"),"aria-hidden":unavailable},React.createElement("span",{className:"items-center flex",style:{gap:numericalSize/CONTAINER_GAP_RATIO}},React.createElement(ProductIcon,{size:numericalSize,name:icon,hoverName:animateIcons?hoverIcon:undefined,unavailable:!!unavailable,selected:false}),React.createElement(ProductLabel,{label:label,unavailable:!!unavailable,numericalSize:numericalSize,showLabel:true,showAblyText:showAblyText,selected:false})),React.createElement(ProductDescription,{description:description,unavailable:!!unavailable,showDescription:true,selected:false}))};export default MeganavTile;
2
+ //# sourceMappingURL=MeganavTile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/Meganav/MeganavTile.tsx"],"sourcesContent":["import React from \"react\";\nimport cn from \"../utils/cn\";\nimport { products, ProductName } from \"../ProductTile/data\";\nimport ProductIcon from \"../ProductTile/ProductIcon\";\nimport ProductLabel from \"../ProductTile/ProductLabel\";\nimport ProductDescription from \"../ProductTile/ProductDescription\";\nimport { IconName } from \"../Icon/types\";\n\nconst CONTAINER_GAP_RATIO = 3;\n\nexport type MeganavTileProps = {\n link: string;\n productName?: ProductName;\n navLabel?: string;\n navIcon?: IconName;\n navDescription?: string;\n animateIcons?: boolean;\n showAblyText?: boolean;\n};\n\nconst MeganavTile = ({\n productName,\n navLabel,\n navIcon,\n navDescription,\n link,\n animateIcons = false,\n showAblyText = true,\n}: MeganavTileProps) => {\n const productData = productName ? products[productName] : null;\n\n const icon = productData?.icon ?? navIcon;\n const hoverIcon = productData?.hoverIcon;\n const label = productData?.label ?? navLabel ?? \"\";\n const description = productData?.description ?? navDescription ?? \"\";\n const unavailable = productData?.unavailable ?? false;\n\n const numericalSize = 40;\n\n return (\n <a\n href={link}\n className={cn(\n \"transition-colors group/product-tile\",\n \"flex flex-col p-3 rounded-lg gap-2 pointer-events-auto focus-base\",\n \"bg-neutral-000 dark:bg-neutral-1300\",\n \"hover:bg-neutral-100 dark:hover:bg-neutral-1200\",\n \"active:bg-neutral-200 dark:active:bg-neutral-1100\",\n )}\n aria-hidden={unavailable}\n >\n <span\n className=\"items-center flex\"\n style={{\n gap: numericalSize / CONTAINER_GAP_RATIO,\n }}\n >\n <ProductIcon\n size={numericalSize}\n name={icon}\n hoverName={animateIcons ? hoverIcon : undefined}\n unavailable={!!unavailable}\n selected={false}\n />\n <ProductLabel\n label={label}\n unavailable={!!unavailable}\n numericalSize={numericalSize}\n showLabel={true}\n showAblyText={showAblyText}\n selected={false}\n />\n </span>\n <ProductDescription\n description={description}\n unavailable={!!unavailable}\n showDescription={true}\n selected={false}\n />\n </a>\n );\n};\n\nexport default MeganavTile;\n"],"names":["React","cn","products","ProductIcon","ProductLabel","ProductDescription","CONTAINER_GAP_RATIO","MeganavTile","productName","navLabel","navIcon","navDescription","link","animateIcons","showAblyText","productData","icon","hoverIcon","label","description","unavailable","numericalSize","a","href","className","aria-hidden","span","style","gap","size","name","hoverName","undefined","selected","showLabel","showDescription"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,OAAQ,aAAc,AAC7B,QAASC,QAAQ,KAAqB,qBAAsB,AAC5D,QAAOC,gBAAiB,4BAA6B,AACrD,QAAOC,iBAAkB,6BAA8B,AACvD,QAAOC,uBAAwB,mCAAoC,CAGnE,MAAMC,oBAAsB,EAY5B,MAAMC,YAAc,CAAC,CACnBC,WAAW,CACXC,QAAQ,CACRC,OAAO,CACPC,cAAc,CACdC,IAAI,CACJC,aAAe,KAAK,CACpBC,aAAe,IAAI,CACF,IACjB,MAAMC,YAAcP,YAAcN,QAAQ,CAACM,YAAY,CAAG,KAE1D,MAAMQ,KAAOD,aAAaC,MAAQN,QAClC,MAAMO,UAAYF,aAAaE,UAC/B,MAAMC,MAAQH,aAAaG,OAAST,UAAY,GAChD,MAAMU,YAAcJ,aAAaI,aAAeR,gBAAkB,GAClE,MAAMS,YAAcL,aAAaK,aAAe,MAEhD,MAAMC,cAAgB,GAEtB,OACE,oBAACC,KACCC,KAAMX,KACNY,UAAWvB,GACT,uCACA,oEACA,sCACA,kDACA,qDAEFwB,cAAaL,aAEb,oBAACM,QACCF,UAAU,oBACVG,MAAO,CACLC,IAAKP,cAAgBf,mBACvB,GAEA,oBAACH,aACC0B,KAAMR,cACNS,KAAMd,KACNe,UAAWlB,aAAeI,UAAYe,UACtCZ,YAAa,CAAC,CAACA,YACfa,SAAU,QAEZ,oBAAC7B,cACCc,MAAOA,MACPE,YAAa,CAAC,CAACA,YACfC,cAAeA,cACfa,UAAW,KACXpB,aAAcA,aACdmB,SAAU,SAGd,oBAAC5B,oBACCc,YAAaA,YACbC,YAAa,CAAC,CAACA,YACfe,gBAAiB,KACjBF,SAAU,QAIlB,CAEA,gBAAe1B,WAAY"}
@@ -0,0 +1,2 @@
1
+ import React from"react";import FeaturedLink from"../FeaturedLink";import cn from"../utils/cn";export const PanelTitle=({title,link,displayTitleInMobile=true})=>{return React.createElement("div",{className:cn("mb-3 px-3",displayTitleInMobile?"block":"hidden md:block")},link?React.createElement(FeaturedLink,{url:link,textSize:"text-overline2",additionalCSS:"ui-text-overline2 mb-0 py-0 font-medium font-mono text-neutral-700 dark:text-neutral-600 hover:text-neutral-1300 dark:hover:text-neutral-000 active:text-neutral-1100 dark:active:text-neutral-200 focus-base"},title):React.createElement("p",{className:"ui-text-overline2 text-neutral-700 dark:text-neutral-600 font-medium font-mono"},title))};
2
+ //# sourceMappingURL=PanelTitle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/Meganav/PanelTitle.tsx"],"sourcesContent":["import React from \"react\";\nimport FeaturedLink from \"../FeaturedLink\";\nimport cn from \"../utils/cn\";\n\nexport const PanelTitle = ({\n title,\n link,\n displayTitleInMobile = true,\n}: {\n title: string;\n link?: string;\n displayTitleInMobile?: boolean;\n}) => {\n return (\n <div\n className={cn(\n \"mb-3 px-3\",\n displayTitleInMobile ? \"block\" : \"hidden md:block\",\n )}\n >\n {link ? (\n <FeaturedLink\n url={link}\n textSize=\"text-overline2\"\n additionalCSS=\"ui-text-overline2 mb-0 py-0 font-medium font-mono\n text-neutral-700 dark:text-neutral-600 hover:text-neutral-1300 dark:hover:text-neutral-000\n active:text-neutral-1100 dark:active:text-neutral-200 focus-base\"\n >\n {title}\n </FeaturedLink>\n ) : (\n <p className=\"ui-text-overline2 text-neutral-700 dark:text-neutral-600 font-medium font-mono\">\n {title}\n </p>\n )}\n </div>\n );\n};\n"],"names":["React","FeaturedLink","cn","PanelTitle","title","link","displayTitleInMobile","div","className","url","textSize","additionalCSS","p"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,iBAAkB,iBAAkB,AAC3C,QAAOC,OAAQ,aAAc,AAE7B,QAAO,MAAMC,WAAa,CAAC,CACzBC,KAAK,CACLC,IAAI,CACJC,qBAAuB,IAAI,CAK5B,IACC,OACE,oBAACC,OACCC,UAAWN,GACT,YACAI,qBAAuB,QAAU,oBAGlCD,KACC,oBAACJ,cACCQ,IAAKJ,KACLK,SAAS,iBACTC,cAAc,iNAIbP,OAGH,oBAACQ,KAAEJ,UAAU,kFACVJ,OAKX,CAAE"}
@@ -1,2 +1,2 @@
1
- import React from"react";import{MeganavPanel}from"./MeganavPanel";import Status,{StatusUrl}from"../Status";import FanEngagementNavImage from"./images/fan-engagement-nav-image.png";import CompanyNavImage from"./images/founders-nav-image.png";import BestRequirementsWinter2025 from"../images/g2-best-meets-requirements-2025.svg";import BestSupportWinter2025 from"../images/g2-best-support-2025.svg";import HighPerformerWinter2025 from"../images/g2-high-performer-2025.svg";import UsersMostLikelyToRecommend from"../images/g2-users-most-likely-to-recommend-2025.svg";import{products}from"../ProductTile/data";const panelClassName="w-full sm:w-[50.9375rem]";const panelLeftFeatureClassName="bg-neutral-100 dark:bg-neutral-1200 hidden md:grid border border-neutral-300 dark:border-neutral-1000 hover:border-neutral-400 dark:hover:border-neutral-800 rounded-lg cursor-pointer group/meganav-panel";const productsMenu=[{label:"Infrastructure",icon:"icon-gui-globe-alt-outline",link:"/four-pillars-of-dependability"},{label:"Integrations",icon:"icon-gui-puzzle-piece-outline",link:"/integrations"},{label:"SDKs",icon:"icon-gui-cube-transparent-outline",link:"/docs/sdks"},{label:"Security & Compliance",icon:"icon-gui-shield-check-outline",link:"/security-and-compliance"}];const solutionsHighlight={heading:"Fan Engagement",content:"Capture the attention of millions of fans during live events.",labelLink:"Learn more",url:"/fan-engagement",image:FanEngagementNavImage};const solutionsMenu=[{label:"Fan Engagement",icon:"icon-gui-hand-thumb-up-outline",link:"/fan-engagement",isMobile:true},{label:"CXTech",icon:"icon-gui-building-office-outline",link:"/cx-tech"},{label:"FinTech",icon:"icon-gui-currency-dollar-outline",link:"/fin-tech"},{label:"HealthTech",icon:"icon-gui-heart-outline",link:"/health-tech"},{label:"EdTech",icon:"icon-gui-academic-cap-outline",link:"/ed-tech"}];const companyHighlight={heading:"Leading the realtime revolution",content:"Hear from our founders about Ably’s ambitious plans to become the world’s definitive realtime platform.",labelLink:"About Ably",url:"/about",image:CompanyNavImage};const companyMenu=[{label:"About Ably",icon:"icon-gui-ably-badge",link:"/about",isMobile:true},{label:"Customer stories",icon:"icon-gui-star-outline",link:"/case-studies"},{label:"Careers",icon:"icon-gui-briefcase-outline",link:"/careers"},{label:"Blog",icon:"icon-gui-light-bulb-outline",link:"/blog"}];export const ablyAwards=[{image:BestRequirementsWinter2025,desc:"G2 Best Requirements Winter 2025"},{image:BestSupportWinter2025,desc:"G2 Best Support Winter 2025"},{image:HighPerformerWinter2025,desc:"G2 High Performer Winter 2025"},{image:UsersMostLikelyToRecommend,desc:"G2 Users Most Likely to Recommend Winter 2025"}];export const menuItemLinks=[{name:"Pricing",link:"/pricing",isHiddenMobile:true},{name:"Docs",link:"/docs",isHiddenMobile:true}];export const menuItemsForHeader=[{name:"Products",content:React.createElement(MeganavPanel,{displayProductTile:true,panelLeftClassName:"grid",panelRightItems:productsMenu,panelRightHeading:"platform",panelRightBottom:React.createElement(Status,{statusUrl:StatusUrl,showDescription:true})}),panelClassName},{name:"Solutions",content:React.createElement(MeganavPanel,{panelLeft:solutionsHighlight,panelLeftClassName:panelLeftFeatureClassName,panelRightItems:solutionsMenu}),panelClassName},{name:"Company",content:React.createElement(MeganavPanel,{panelLeft:companyHighlight,panelLeftClassName:panelLeftFeatureClassName,panelRightItems:companyMenu,panelRightBottom:React.createElement("div",{className:"flex-1 gap-x-2 hidden md:flex"},ablyAwards.slice(0,3).map(award=>React.createElement("img",{key:award.desc,src:award.image,alt:award.desc,width:"57",height:"64"})))}),panelClassName},...menuItemLinks];export const productsForNav={...products,pubsub:{...products.pubsub,link:"/pubsub"},liveSync:{...products.liveSync,link:"/livesync"},chat:{...products.chat,link:"/chat"},spaces:{...products.spaces,link:"/spaces"},assetTracking:{...products.assetTracking,link:"/solutions/asset-tracking"},liveObjects:{...products.liveObjects,link:"/liveobjects"}};
1
+ import React from"react";import G2BestMeetsRequirementsSpring2025 from"../images/badges/g2-best-meets-requirements-spring-2025.svg";import G2BestResultsSpring2025 from"../images/badges/g2-best-results-spring-2025.svg";import G2BestSupportSpring2025 from"../images/badges/g2-best-support-spring-2025.svg";import{products}from"../ProductTile/data";import DoxyMeLogo from"../Meganav/images/cust-logo-doxy-light.png";import DoxyMeLogoDark from"../Meganav/images/cust-logo-doxy-dark.png";export const productsMenu=[{label:"Architecture",icon:"icon-gui-squares-2-x-2-outline",link:"/platform"},{label:"Integrations",icon:"icon-gui-puzzle-piece-outline",link:"/docs/platform/integrations"},{label:"SDKs",icon:"icon-gui-cube-transparent-outline",link:"/docs/sdks"},{label:"Security & Compliance",icon:"icon-gui-shield-check-outline",link:"/security-and-compliance"}];export const compareMenu=[{label:"Ably vs Pusher",link:"/compare/ably-vs-pusher"},{label:"Ably vs PubNub",link:"/compare/ably-vs-pubnub"},{label:"Ably vs Socket.io",link:"/compare/ably-vs-socketio"}];export const solutionsMenu=[{label:"Fan Engagement",icon:"icon-gui-hand-thumb-up-outline",link:"/fan-engagement",description:"Enhance every moment with live, interactive fan experiences."},{label:"FinTech",icon:"icon-gui-currency-dollar-outline",link:"/fin-tech",description:"Speed, reliability, and confidence in every user interaction."},{label:"EdTech",icon:"icon-gui-academic-cap-outline",link:"/ed-tech",description:"Power collaborative, interactive learning environments."},{label:"CXTech",icon:"icon-gui-face-smile-outline",link:"/cx-tech",description:"Deliver fast support, strong relationships, and high retention."},{label:"HealthTech",icon:"icon-gui-heartbeat-outline",link:"/health-tech",description:"Reliable tools with full data privacy and compliance."}];export const customerStoriesHighlight={companyLogo:DoxyMeLogo,companyLogoDark:DoxyMeLogoDark,companyLink:"/case-studies/doxyme",companyName:"Doxy.me",companyDesc:"built their realtime stack in under six months, cutting costs by 65%, eliminating errors, and transforming a once-feared system into a core strength."};export const companyMenu=[{label:"Our story",icon:"icon-gui-ably-badge",link:"/about"},{label:"Careers",icon:"icon-gui-briefcase-outline",link:"/careers",badge:"WE'RE HIRING"}];export const ablyAwards=[{image:G2BestSupportSpring2025,desc:"G2 Best Support Spring 2025"},{image:G2BestMeetsRequirementsSpring2025,desc:"G2 Best Meets Requirements Spring 2025"},{image:G2BestResultsSpring2025,desc:"G2 Best Results Spring 2025"}];export const menuItemLinks=[{name:"Pricing",link:"/pricing",isHiddenMobile:true},{name:"Docs",link:"/docs",isHiddenMobile:true}];export const defaultBlogPosts=[{title:"Ably AI Transport: keep your agents connected and stateful across devices",link:"/blog/ably-ai-transport",categories:["New Release","AI Transport","New Feature","RealTime Experiences","Engineering","Ably News"],pubDate:"Dec 9, 2025"},{title:"Live chat at unlimited scale: What it takes to support stadium-sized audiences",link:"/blog/live-chat-at-unlimited-scale",categories:["Chat"],pubDate:"Nov 18, 2025"}];export const productsForNav={...products,pubsub:{...products.pubsub,link:"/pubsub"},liveSync:{...products.liveSync,link:"/livesync"},chat:{...products.chat,link:"/chat"},spaces:{...products.spaces,link:"/spaces"},aiTransport:{...products.aiTransport,link:"/ai-transport"},liveObjects:{...products.liveObjects,link:"/liveobjects"}};
2
2
  //# sourceMappingURL=data.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/Meganav/data.tsx"],"sourcesContent":["import React from \"react\";\nimport { IconName } from \"../Icon/types\";\nimport { MeganavPanel } from \"./MeganavPanel\";\nimport Status, { StatusUrl } from \"../Status\";\nimport FanEngagementNavImage from \"./images/fan-engagement-nav-image.png\";\nimport CompanyNavImage from \"./images/founders-nav-image.png\";\nimport BestRequirementsWinter2025 from \"../images/g2-best-meets-requirements-2025.svg\";\nimport BestSupportWinter2025 from \"../images/g2-best-support-2025.svg\";\nimport HighPerformerWinter2025 from \"../images/g2-high-performer-2025.svg\";\nimport UsersMostLikelyToRecommend from \"../images/g2-users-most-likely-to-recommend-2025.svg\";\nimport { products } from \"../ProductTile/data\";\n\nexport type FlyoutPanelList = {\n label: string;\n icon: IconName;\n link: string;\n isMobile?: boolean;\n};\n\nexport type FlyoutPanelHighlight = {\n heading: string;\n content: string;\n labelLink: string;\n url: string;\n image: string;\n};\n\nexport type MenuItem = {\n name: string;\n link?: string;\n isHiddenMobile?: boolean;\n content?: React.ReactNode;\n panelClassName?: string;\n};\n\nconst panelClassName = \"w-full sm:w-[50.9375rem]\";\n\nconst panelLeftFeatureClassName =\n \"bg-neutral-100 dark:bg-neutral-1200 hidden md:grid border border-neutral-300 dark:border-neutral-1000 hover:border-neutral-400 dark:hover:border-neutral-800 rounded-lg cursor-pointer group/meganav-panel\";\n\nconst productsMenu: FlyoutPanelList[] = [\n {\n label: \"Infrastructure\",\n icon: \"icon-gui-globe-alt-outline\",\n link: \"/four-pillars-of-dependability\",\n },\n {\n label: \"Integrations\",\n icon: \"icon-gui-puzzle-piece-outline\",\n link: \"/integrations\",\n },\n {\n label: \"SDKs\",\n icon: \"icon-gui-cube-transparent-outline\",\n link: \"/docs/sdks\",\n },\n {\n label: \"Security & Compliance\",\n icon: \"icon-gui-shield-check-outline\",\n link: \"/security-and-compliance\",\n },\n];\n\nconst solutionsHighlight: FlyoutPanelHighlight = {\n heading: \"Fan Engagement\",\n content: \"Capture the attention of millions of fans during live events.\",\n labelLink: \"Learn more\",\n url: \"/fan-engagement\",\n image: FanEngagementNavImage,\n};\n\nconst solutionsMenu: FlyoutPanelList[] = [\n {\n label: \"Fan Engagement\",\n icon: \"icon-gui-hand-thumb-up-outline\",\n link: \"/fan-engagement\",\n isMobile: true,\n },\n {\n label: \"CXTech\",\n icon: \"icon-gui-building-office-outline\",\n link: \"/cx-tech\",\n },\n {\n label: \"FinTech\",\n icon: \"icon-gui-currency-dollar-outline\",\n link: \"/fin-tech\",\n },\n {\n label: \"HealthTech\",\n icon: \"icon-gui-heart-outline\",\n link: \"/health-tech\",\n },\n {\n label: \"EdTech\",\n icon: \"icon-gui-academic-cap-outline\",\n link: \"/ed-tech\",\n },\n];\n\nconst companyHighlight: FlyoutPanelHighlight = {\n heading: \"Leading the realtime revolution\",\n content:\n \"Hear from our founders about Ably’s ambitious plans to become the world’s definitive realtime platform.\",\n labelLink: \"About Ably\",\n url: \"/about\",\n image: CompanyNavImage,\n};\n\nconst companyMenu: FlyoutPanelList[] = [\n {\n label: \"About Ably\",\n icon: \"icon-gui-ably-badge\",\n link: \"/about\",\n isMobile: true,\n },\n {\n label: \"Customer stories\",\n icon: \"icon-gui-star-outline\",\n link: \"/case-studies\",\n },\n {\n label: \"Careers\",\n icon: \"icon-gui-briefcase-outline\",\n link: \"/careers\",\n },\n {\n label: \"Blog\",\n icon: \"icon-gui-light-bulb-outline\",\n link: \"/blog\",\n },\n];\n\nexport const ablyAwards = [\n {\n image: BestRequirementsWinter2025,\n desc: \"G2 Best Requirements Winter 2025\",\n },\n {\n image: BestSupportWinter2025,\n desc: \"G2 Best Support Winter 2025\",\n },\n {\n image: HighPerformerWinter2025,\n desc: \"G2 High Performer Winter 2025\",\n },\n {\n image: UsersMostLikelyToRecommend,\n desc: \"G2 Users Most Likely to Recommend Winter 2025\",\n },\n];\n\nexport const menuItemLinks = [\n { name: \"Pricing\", link: \"/pricing\", isHiddenMobile: true },\n { name: \"Docs\", link: \"/docs\", isHiddenMobile: true },\n];\n\nexport const menuItemsForHeader: MenuItem[] = [\n {\n name: \"Products\",\n content: (\n <MeganavPanel\n displayProductTile={true}\n panelLeftClassName=\"grid\"\n panelRightItems={productsMenu}\n panelRightHeading=\"platform\"\n panelRightBottom={<Status statusUrl={StatusUrl} showDescription />}\n />\n ),\n panelClassName,\n },\n {\n name: \"Solutions\",\n content: (\n <MeganavPanel\n panelLeft={solutionsHighlight}\n panelLeftClassName={panelLeftFeatureClassName}\n panelRightItems={solutionsMenu}\n />\n ),\n panelClassName,\n },\n {\n name: \"Company\",\n content: (\n <MeganavPanel\n panelLeft={companyHighlight}\n panelLeftClassName={panelLeftFeatureClassName}\n panelRightItems={companyMenu}\n panelRightBottom={\n <div className=\"flex-1 gap-x-2 hidden md:flex\">\n {ablyAwards.slice(0, 3).map((award) => (\n <img\n key={award.desc}\n src={award.image}\n alt={award.desc}\n width=\"57\"\n height=\"64\"\n />\n ))}\n </div>\n }\n />\n ),\n panelClassName,\n },\n ...menuItemLinks,\n];\n\n// Since the product-tile data is used in other projects, we update it here\n// for the meganav.\nexport const productsForNav = {\n ...products,\n pubsub: { ...products.pubsub, link: \"/pubsub\" },\n liveSync: { ...products.liveSync, link: \"/livesync\" },\n chat: { ...products.chat, link: \"/chat\" },\n spaces: { ...products.spaces, link: \"/spaces\" },\n assetTracking: {\n ...products.assetTracking,\n link: \"/solutions/asset-tracking\",\n },\n liveObjects: { ...products.liveObjects, link: \"/liveobjects\" },\n};\n"],"names":["React","MeganavPanel","Status","StatusUrl","FanEngagementNavImage","CompanyNavImage","BestRequirementsWinter2025","BestSupportWinter2025","HighPerformerWinter2025","UsersMostLikelyToRecommend","products","panelClassName","panelLeftFeatureClassName","productsMenu","label","icon","link","solutionsHighlight","heading","content","labelLink","url","image","solutionsMenu","isMobile","companyHighlight","companyMenu","ablyAwards","desc","menuItemLinks","name","isHiddenMobile","menuItemsForHeader","displayProductTile","panelLeftClassName","panelRightItems","panelRightHeading","panelRightBottom","statusUrl","showDescription","panelLeft","div","className","slice","map","award","img","key","src","alt","width","height","productsForNav","pubsub","liveSync","chat","spaces","assetTracking","liveObjects"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAE1B,QAASC,YAAY,KAAQ,gBAAiB,AAC9C,QAAOC,QAAUC,SAAS,KAAQ,WAAY,AAC9C,QAAOC,0BAA2B,uCAAwC,AAC1E,QAAOC,oBAAqB,iCAAkC,AAC9D,QAAOC,+BAAgC,+CAAgD,AACvF,QAAOC,0BAA2B,oCAAqC,AACvE,QAAOC,4BAA6B,sCAAuC,AAC3E,QAAOC,+BAAgC,sDAAuD,AAC9F,QAASC,QAAQ,KAAQ,qBAAsB,CAyB/C,MAAMC,eAAiB,2BAEvB,MAAMC,0BACJ,6MAEF,MAAMC,aAAkC,CACtC,CACEC,MAAO,iBACPC,KAAM,6BACNC,KAAM,gCACR,EACA,CACEF,MAAO,eACPC,KAAM,gCACNC,KAAM,eACR,EACA,CACEF,MAAO,OACPC,KAAM,oCACNC,KAAM,YACR,EACA,CACEF,MAAO,wBACPC,KAAM,gCACNC,KAAM,0BACR,EACD,CAED,MAAMC,mBAA2C,CAC/CC,QAAS,iBACTC,QAAS,gEACTC,UAAW,aACXC,IAAK,kBACLC,MAAOlB,qBACT,EAEA,MAAMmB,cAAmC,CACvC,CACET,MAAO,iBACPC,KAAM,iCACNC,KAAM,kBACNQ,SAAU,IACZ,EACA,CACEV,MAAO,SACPC,KAAM,mCACNC,KAAM,UACR,EACA,CACEF,MAAO,UACPC,KAAM,mCACNC,KAAM,WACR,EACA,CACEF,MAAO,aACPC,KAAM,yBACNC,KAAM,cACR,EACA,CACEF,MAAO,SACPC,KAAM,gCACNC,KAAM,UACR,EACD,CAED,MAAMS,iBAAyC,CAC7CP,QAAS,kCACTC,QACE,0GACFC,UAAW,aACXC,IAAK,SACLC,MAAOjB,eACT,EAEA,MAAMqB,YAAiC,CACrC,CACEZ,MAAO,aACPC,KAAM,sBACNC,KAAM,SACNQ,SAAU,IACZ,EACA,CACEV,MAAO,mBACPC,KAAM,wBACNC,KAAM,eACR,EACA,CACEF,MAAO,UACPC,KAAM,6BACNC,KAAM,UACR,EACA,CACEF,MAAO,OACPC,KAAM,8BACNC,KAAM,OACR,EACD,AAED,QAAO,MAAMW,WAAa,CACxB,CACEL,MAAOhB,2BACPsB,KAAM,kCACR,EACA,CACEN,MAAOf,sBACPqB,KAAM,6BACR,EACA,CACEN,MAAOd,wBACPoB,KAAM,+BACR,EACA,CACEN,MAAOb,2BACPmB,KAAM,+CACR,EACD,AAAC,AAEF,QAAO,MAAMC,cAAgB,CAC3B,CAAEC,KAAM,UAAWd,KAAM,WAAYe,eAAgB,IAAK,EAC1D,CAAED,KAAM,OAAQd,KAAM,QAASe,eAAgB,IAAK,EACrD,AAAC,AAEF,QAAO,MAAMC,mBAAiC,CAC5C,CACEF,KAAM,WACNX,QACE,oBAAClB,cACCgC,mBAAoB,KACpBC,mBAAmB,OACnBC,gBAAiBtB,aACjBuB,kBAAkB,WAClBC,iBAAkB,oBAACnC,QAAOoC,UAAWnC,UAAWoC,gBAAAA,SAGpD5B,cACF,EACA,CACEmB,KAAM,YACNX,QACE,oBAAClB,cACCuC,UAAWvB,mBACXiB,mBAAoBtB,0BACpBuB,gBAAiBZ,gBAGrBZ,cACF,EACA,CACEmB,KAAM,UACNX,QACE,oBAAClB,cACCuC,UAAWf,iBACXS,mBAAoBtB,0BACpBuB,gBAAiBT,YACjBW,iBACE,oBAACI,OAAIC,UAAU,iCACZf,WAAWgB,KAAK,CAAC,EAAG,GAAGC,GAAG,CAAC,AAACC,OAC3B,oBAACC,OACCC,IAAKF,MAAMjB,IAAI,CACfoB,IAAKH,MAAMvB,KAAK,CAChB2B,IAAKJ,MAAMjB,IAAI,CACfsB,MAAM,KACNC,OAAO,WAOnBxC,cACF,KACGkB,cACJ,AAAC,AAIF,QAAO,MAAMuB,eAAiB,CAC5B,GAAG1C,QAAQ,CACX2C,OAAQ,CAAE,GAAG3C,SAAS2C,MAAM,CAAErC,KAAM,SAAU,EAC9CsC,SAAU,CAAE,GAAG5C,SAAS4C,QAAQ,CAAEtC,KAAM,WAAY,EACpDuC,KAAM,CAAE,GAAG7C,SAAS6C,IAAI,CAAEvC,KAAM,OAAQ,EACxCwC,OAAQ,CAAE,GAAG9C,SAAS8C,MAAM,CAAExC,KAAM,SAAU,EAC9CyC,cAAe,CACb,GAAG/C,SAAS+C,aAAa,CACzBzC,KAAM,2BACR,EACA0C,YAAa,CAAE,GAAGhD,SAASgD,WAAW,CAAE1C,KAAM,cAAe,CAC/D,CAAE"}
1
+ {"version":3,"sources":["../../../src/core/Meganav/data.tsx"],"sourcesContent":["import React from \"react\";\nimport { IconName } from \"../Icon/types\";\nimport { CustomerStoryHighlight } from \"./MeganavCustomerStories\";\nimport { BlogPost } from \"./MeganavBlog\";\nimport G2BestMeetsRequirementsSpring2025 from \"../images/badges/g2-best-meets-requirements-spring-2025.svg\";\nimport G2BestResultsSpring2025 from \"../images/badges/g2-best-results-spring-2025.svg\";\nimport G2BestSupportSpring2025 from \"../images/badges/g2-best-support-spring-2025.svg\";\nimport { products } from \"../ProductTile/data\";\nimport DoxyMeLogo from \"../Meganav/images/cust-logo-doxy-light.png\";\nimport DoxyMeLogoDark from \"../Meganav/images/cust-logo-doxy-dark.png\";\n\nexport type FlyoutPanelList = {\n label: string;\n icon?: IconName;\n link: string;\n isMobile?: boolean;\n description?: string;\n badge?: string;\n};\n\nexport type MenuItem = {\n name: string;\n link?: string;\n isHiddenMobile?: boolean;\n content?: React.ReactNode;\n panelClassName?: string;\n};\n\nexport const productsMenu: FlyoutPanelList[] = [\n {\n label: \"Architecture\",\n icon: \"icon-gui-squares-2-x-2-outline\",\n link: \"/platform\",\n },\n {\n label: \"Integrations\",\n icon: \"icon-gui-puzzle-piece-outline\",\n link: \"/docs/platform/integrations\",\n },\n {\n label: \"SDKs\",\n icon: \"icon-gui-cube-transparent-outline\",\n link: \"/docs/sdks\",\n },\n {\n label: \"Security & Compliance\",\n icon: \"icon-gui-shield-check-outline\",\n link: \"/security-and-compliance\",\n },\n];\n\nexport const compareMenu: FlyoutPanelList[] = [\n {\n label: \"Ably vs Pusher\",\n link: \"/compare/ably-vs-pusher\",\n },\n {\n label: \"Ably vs PubNub\",\n link: \"/compare/ably-vs-pubnub\",\n },\n {\n label: \"Ably vs Socket.io\",\n link: \"/compare/ably-vs-socketio\",\n },\n];\n\nexport const solutionsMenu: FlyoutPanelList[] = [\n {\n label: \"Fan Engagement\",\n icon: \"icon-gui-hand-thumb-up-outline\",\n link: \"/fan-engagement\",\n description: \"Enhance every moment with live, interactive fan experiences.\",\n },\n {\n label: \"FinTech\",\n icon: \"icon-gui-currency-dollar-outline\",\n link: \"/fin-tech\",\n description:\n \"Speed, reliability, and confidence in every user interaction.\",\n },\n {\n label: \"EdTech\",\n icon: \"icon-gui-academic-cap-outline\",\n link: \"/ed-tech\",\n description: \"Power collaborative, interactive learning environments.\",\n },\n {\n label: \"CXTech\",\n icon: \"icon-gui-face-smile-outline\",\n link: \"/cx-tech\",\n description:\n \"Deliver fast support, strong relationships, and high retention.\",\n },\n\n {\n label: \"HealthTech\",\n icon: \"icon-gui-heartbeat-outline\",\n link: \"/health-tech\",\n description: \"Reliable tools with full data privacy and compliance.\",\n },\n];\n\nexport const customerStoriesHighlight: CustomerStoryHighlight = {\n companyLogo: DoxyMeLogo,\n companyLogoDark: DoxyMeLogoDark,\n companyLink: \"/case-studies/doxyme\",\n companyName: \"Doxy.me\",\n companyDesc:\n \"built their realtime stack in under six months, cutting costs by 65%, eliminating errors, and transforming a once-feared system into a core strength.\",\n};\n\nexport const companyMenu: FlyoutPanelList[] = [\n {\n label: \"Our story\",\n icon: \"icon-gui-ably-badge\",\n link: \"/about\",\n },\n {\n label: \"Careers\",\n icon: \"icon-gui-briefcase-outline\",\n link: \"/careers\",\n badge: \"WE'RE HIRING\",\n },\n];\n\nexport const ablyAwards = [\n {\n image: G2BestSupportSpring2025,\n desc: \"G2 Best Support Spring 2025\",\n },\n {\n image: G2BestMeetsRequirementsSpring2025,\n desc: \"G2 Best Meets Requirements Spring 2025\",\n },\n {\n image: G2BestResultsSpring2025,\n desc: \"G2 Best Results Spring 2025\",\n },\n];\n\nexport const menuItemLinks = [\n { name: \"Pricing\", link: \"/pricing\", isHiddenMobile: true },\n { name: \"Docs\", link: \"/docs\", isHiddenMobile: true },\n];\n\nexport const defaultBlogPosts: BlogPost[] = [\n {\n title:\n \"Ably AI Transport: keep your agents connected and stateful across devices\",\n link: \"/blog/ably-ai-transport\",\n categories: [\n \"New Release\",\n \"AI Transport\",\n \"New Feature\",\n \"RealTime Experiences\",\n \"Engineering\",\n \"Ably News\",\n ],\n pubDate: \"Dec 9, 2025\",\n },\n {\n title:\n \"Live chat at unlimited scale: What it takes to support stadium-sized audiences\",\n link: \"/blog/live-chat-at-unlimited-scale\",\n categories: [\"Chat\"],\n pubDate: \"Nov 18, 2025\",\n },\n];\n\nexport const productsForNav = {\n ...products,\n pubsub: { ...products.pubsub, link: \"/pubsub\" },\n liveSync: { ...products.liveSync, link: \"/livesync\" },\n chat: { ...products.chat, link: \"/chat\" },\n spaces: { ...products.spaces, link: \"/spaces\" },\n aiTransport: {\n ...products.aiTransport,\n link: \"/ai-transport\",\n },\n liveObjects: { ...products.liveObjects, link: \"/liveobjects\" },\n};\n"],"names":["React","G2BestMeetsRequirementsSpring2025","G2BestResultsSpring2025","G2BestSupportSpring2025","products","DoxyMeLogo","DoxyMeLogoDark","productsMenu","label","icon","link","compareMenu","solutionsMenu","description","customerStoriesHighlight","companyLogo","companyLogoDark","companyLink","companyName","companyDesc","companyMenu","badge","ablyAwards","image","desc","menuItemLinks","name","isHiddenMobile","defaultBlogPosts","title","categories","pubDate","productsForNav","pubsub","liveSync","chat","spaces","aiTransport","liveObjects"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAI1B,QAAOC,sCAAuC,6DAA8D,AAC5G,QAAOC,4BAA6B,kDAAmD,AACvF,QAAOC,4BAA6B,kDAAmD,AACvF,QAASC,QAAQ,KAAQ,qBAAsB,AAC/C,QAAOC,eAAgB,4CAA6C,AACpE,QAAOC,mBAAoB,2CAA4C,AAmBvE,QAAO,MAAMC,aAAkC,CAC7C,CACEC,MAAO,eACPC,KAAM,iCACNC,KAAM,WACR,EACA,CACEF,MAAO,eACPC,KAAM,gCACNC,KAAM,6BACR,EACA,CACEF,MAAO,OACPC,KAAM,oCACNC,KAAM,YACR,EACA,CACEF,MAAO,wBACPC,KAAM,gCACNC,KAAM,0BACR,EACD,AAAC,AAEF,QAAO,MAAMC,YAAiC,CAC5C,CACEH,MAAO,iBACPE,KAAM,yBACR,EACA,CACEF,MAAO,iBACPE,KAAM,yBACR,EACA,CACEF,MAAO,oBACPE,KAAM,2BACR,EACD,AAAC,AAEF,QAAO,MAAME,cAAmC,CAC9C,CACEJ,MAAO,iBACPC,KAAM,iCACNC,KAAM,kBACNG,YAAa,8DACf,EACA,CACEL,MAAO,UACPC,KAAM,mCACNC,KAAM,YACNG,YACE,+DACJ,EACA,CACEL,MAAO,SACPC,KAAM,gCACNC,KAAM,WACNG,YAAa,yDACf,EACA,CACEL,MAAO,SACPC,KAAM,8BACNC,KAAM,WACNG,YACE,iEACJ,EAEA,CACEL,MAAO,aACPC,KAAM,6BACNC,KAAM,eACNG,YAAa,uDACf,EACD,AAAC,AAEF,QAAO,MAAMC,yBAAmD,CAC9DC,YAAaV,WACbW,gBAAiBV,eACjBW,YAAa,uBACbC,YAAa,UACbC,YACE,uJACJ,CAAE,AAEF,QAAO,MAAMC,YAAiC,CAC5C,CACEZ,MAAO,YACPC,KAAM,sBACNC,KAAM,QACR,EACA,CACEF,MAAO,UACPC,KAAM,6BACNC,KAAM,WACNW,MAAO,cACT,EACD,AAAC,AAEF,QAAO,MAAMC,WAAa,CACxB,CACEC,MAAOpB,wBACPqB,KAAM,6BACR,EACA,CACED,MAAOtB,kCACPuB,KAAM,wCACR,EACA,CACED,MAAOrB,wBACPsB,KAAM,6BACR,EACD,AAAC,AAEF,QAAO,MAAMC,cAAgB,CAC3B,CAAEC,KAAM,UAAWhB,KAAM,WAAYiB,eAAgB,IAAK,EAC1D,CAAED,KAAM,OAAQhB,KAAM,QAASiB,eAAgB,IAAK,EACrD,AAAC,AAEF,QAAO,MAAMC,iBAA+B,CAC1C,CACEC,MACE,4EACFnB,KAAM,0BACNoB,WAAY,CACV,cACA,eACA,cACA,uBACA,cACA,YACD,CACDC,QAAS,aACX,EACA,CACEF,MACE,iFACFnB,KAAM,qCACNoB,WAAY,CAAC,OAAO,CACpBC,QAAS,cACX,EACD,AAAC,AAEF,QAAO,MAAMC,eAAiB,CAC5B,GAAG5B,QAAQ,CACX6B,OAAQ,CAAE,GAAG7B,SAAS6B,MAAM,CAAEvB,KAAM,SAAU,EAC9CwB,SAAU,CAAE,GAAG9B,SAAS8B,QAAQ,CAAExB,KAAM,WAAY,EACpDyB,KAAM,CAAE,GAAG/B,SAAS+B,IAAI,CAAEzB,KAAM,OAAQ,EACxC0B,OAAQ,CAAE,GAAGhC,SAASgC,MAAM,CAAE1B,KAAM,SAAU,EAC9C2B,YAAa,CACX,GAAGjC,SAASiC,WAAW,CACvB3B,KAAM,eACR,EACA4B,YAAa,CAAE,GAAGlC,SAASkC,WAAW,CAAE5B,KAAM,cAAe,CAC/D,CAAE"}
@@ -0,0 +1,2 @@
1
+ import React from"react";import Status,{StatusUrl}from"../../Status";import MeganavBlog from"../MeganavBlog";import MeganavCustomerStories from"../MeganavCustomerStories";import{MeganavPanel,MeganavPanelFullwidth}from"../MeganavPanel";import{ablyAwards,companyMenu,compareMenu,customerStoriesHighlight,productsMenu,solutionsMenu,menuItemLinks,defaultBlogPosts}from"../data";export const getMenuItemsForHeader=blogPosts=>{const panelClassName="w-full sm:w-[50.9375rem]";const recentBlogPosts=blogPosts?.length>0?blogPosts.slice(0,2):defaultBlogPosts;return[{name:"Products",content:React.createElement(MeganavPanel,{displayProductTile:true,panelRightItems:[{label:"Platform",listItems:productsMenu},{link:{label:"Compare our tech",link:"/compare"},listItems:compareMenu}],panelRightBottom:React.createElement(Status,{statusUrl:StatusUrl,additionalCSS:"px-3 py-2 hover:bg-neutral-100 dark:hover:bg-neutral-1200 active:bg-neutral-200 dark:active:bg-neutral-1100 rounded-lg",showDescription:true})}),panelClassName},{name:"Solutions",content:React.createElement(MeganavPanelFullwidth,{panelItems:solutionsMenu}),panelClassName},{name:"Company",content:React.createElement(MeganavPanel,{panelLeft:React.createElement(MeganavCustomerStories,{title:"Customer stories",link:"/case-studies",icon:"icon-gui-rocket-launch-outline",customerStoriesHighlight:customerStoriesHighlight}),panelMiddleItems:React.createElement(MeganavBlog,{title:"Blog",link:"/blog",posts:recentBlogPosts,icon:"icon-gui-light-bulb-outline"}),panelRightItems:[{label:"Ably",listItems:companyMenu,displayTitleInMobile:false}],panelRightBottom:React.createElement("div",{className:"flex-1 gap-x-2 hidden md:flex p-3"},ablyAwards.slice(0,3).map(award=>React.createElement("img",{key:award.desc,src:award.image,alt:award.desc,width:"57",height:"64",loading:"lazy"}))),panelRightBottomClassName:"hidden md:flex"}),panelClassName},...menuItemLinks]};
2
+ //# sourceMappingURL=getMenuItemsForHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/core/Meganav/utils/getMenuItemsForHeader.tsx"],"sourcesContent":["import React from \"react\";\nimport Status, { StatusUrl } from \"../../Status\";\nimport MeganavBlog, { BlogPost } from \"../MeganavBlog\";\nimport MeganavCustomerStories from \"../MeganavCustomerStories\";\nimport { MeganavPanel, MeganavPanelFullwidth } from \"../MeganavPanel\";\nimport {\n ablyAwards,\n companyMenu,\n compareMenu,\n customerStoriesHighlight,\n MenuItem,\n productsMenu,\n solutionsMenu,\n menuItemLinks,\n defaultBlogPosts,\n} from \"../data\";\n\nexport const getMenuItemsForHeader = (blogPosts: BlogPost[]): MenuItem[] => {\n const panelClassName = \"w-full sm:w-[50.9375rem]\";\n const recentBlogPosts =\n blogPosts?.length > 0 ? blogPosts.slice(0, 2) : defaultBlogPosts;\n\n return [\n {\n name: \"Products\",\n content: (\n <MeganavPanel\n displayProductTile={true}\n panelRightItems={[\n { label: \"Platform\", listItems: productsMenu },\n {\n link: { label: \"Compare our tech\", link: \"/compare\" },\n listItems: compareMenu,\n },\n ]}\n panelRightBottom={\n <Status\n statusUrl={StatusUrl}\n additionalCSS=\"px-3 py-2 hover:bg-neutral-100 dark:hover:bg-neutral-1200 active:bg-neutral-200 dark:active:bg-neutral-1100 rounded-lg\"\n showDescription\n />\n }\n />\n ),\n panelClassName,\n },\n {\n name: \"Solutions\",\n content: <MeganavPanelFullwidth panelItems={solutionsMenu} />,\n panelClassName,\n },\n {\n name: \"Company\",\n content: (\n <MeganavPanel\n panelLeft={\n <MeganavCustomerStories\n title=\"Customer stories\"\n link=\"/case-studies\"\n icon=\"icon-gui-rocket-launch-outline\"\n customerStoriesHighlight={customerStoriesHighlight}\n />\n }\n panelMiddleItems={\n <MeganavBlog\n title=\"Blog\"\n link=\"/blog\"\n posts={recentBlogPosts}\n icon=\"icon-gui-light-bulb-outline\"\n />\n }\n panelRightItems={[\n {\n label: \"Ably\",\n listItems: companyMenu,\n displayTitleInMobile: false,\n },\n ]}\n panelRightBottom={\n <div className=\"flex-1 gap-x-2 hidden md:flex p-3\">\n {ablyAwards.slice(0, 3).map((award) => (\n <img\n key={award.desc}\n src={award.image}\n alt={award.desc}\n width=\"57\"\n height=\"64\"\n loading=\"lazy\"\n />\n ))}\n </div>\n }\n panelRightBottomClassName=\"hidden md:flex\"\n />\n ),\n panelClassName,\n },\n ...menuItemLinks,\n ];\n};\n"],"names":["React","Status","StatusUrl","MeganavBlog","MeganavCustomerStories","MeganavPanel","MeganavPanelFullwidth","ablyAwards","companyMenu","compareMenu","customerStoriesHighlight","productsMenu","solutionsMenu","menuItemLinks","defaultBlogPosts","getMenuItemsForHeader","blogPosts","panelClassName","recentBlogPosts","length","slice","name","content","displayProductTile","panelRightItems","label","listItems","link","panelRightBottom","statusUrl","additionalCSS","showDescription","panelItems","panelLeft","title","icon","panelMiddleItems","posts","displayTitleInMobile","div","className","map","award","img","key","desc","src","image","alt","width","height","loading","panelRightBottomClassName"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,QAAUC,SAAS,KAAQ,cAAe,AACjD,QAAOC,gBAA+B,gBAAiB,AACvD,QAAOC,2BAA4B,2BAA4B,AAC/D,QAASC,YAAY,CAAEC,qBAAqB,KAAQ,iBAAkB,AACtE,QACEC,UAAU,CACVC,WAAW,CACXC,WAAW,CACXC,wBAAwB,CAExBC,YAAY,CACZC,aAAa,CACbC,aAAa,CACbC,gBAAgB,KACX,SAAU,AAEjB,QAAO,MAAMC,sBAAwB,AAACC,YACpC,MAAMC,eAAiB,2BACvB,MAAMC,gBACJF,WAAWG,OAAS,EAAIH,UAAUI,KAAK,CAAC,EAAG,GAAKN,iBAElD,MAAO,CACL,CACEO,KAAM,WACNC,QACE,oBAACjB,cACCkB,mBAAoB,KACpBC,gBAAiB,CACf,CAAEC,MAAO,WAAYC,UAAWf,YAAa,EAC7C,CACEgB,KAAM,CAAEF,MAAO,mBAAoBE,KAAM,UAAW,EACpDD,UAAWjB,WACb,EACD,CACDmB,iBACE,oBAAC3B,QACC4B,UAAW3B,UACX4B,cAAc,yHACdC,gBAAAA,SAKRd,cACF,EACA,CACEI,KAAM,YACNC,QAAS,oBAAChB,uBAAsB0B,WAAYpB,gBAC5CK,cACF,EACA,CACEI,KAAM,UACNC,QACE,oBAACjB,cACC4B,UACE,oBAAC7B,wBACC8B,MAAM,mBACNP,KAAK,gBACLQ,KAAK,iCACLzB,yBAA0BA,2BAG9B0B,iBACE,oBAACjC,aACC+B,MAAM,OACNP,KAAK,QACLU,MAAOnB,gBACPiB,KAAK,gCAGTX,gBAAiB,CACf,CACEC,MAAO,OACPC,UAAWlB,YACX8B,qBAAsB,KACxB,EACD,CACDV,iBACE,oBAACW,OAAIC,UAAU,qCACZjC,WAAWa,KAAK,CAAC,EAAG,GAAGqB,GAAG,CAAC,AAACC,OAC3B,oBAACC,OACCC,IAAKF,MAAMG,IAAI,CACfC,IAAKJ,MAAMK,KAAK,CAChBC,IAAKN,MAAMG,IAAI,CACfI,MAAM,KACNC,OAAO,KACPC,QAAQ,WAKhBC,0BAA0B,mBAG9BnC,cACF,KACGJ,cACJ,AACH,CAAE"}
package/core/Meganav.js CHANGED
@@ -1,2 +1,2 @@
1
- import React,{useEffect,useMemo}from"react";import Header from"./Header";import Flyout from"./Flyout";import{menuItemsForHeader}from"./Meganav/data";import{MeganavMobile}from"./Meganav/MeganavMobile";import Notice from"./Notice";import{HEADER_HEIGHT}from"./utils/heights";const Meganav=({sessionState,notice,theme,themedScrollpoints})=>{const[noticeHeight,setNoticeHeight]=React.useState(0);const mobileNavItems=useMemo(()=>menuItemsForHeader.filter(item=>!item.isHiddenMobile).map(({name,link,content})=>({name,link,content})),[]);const defaultThemedScrollpoints=[{id:"meganav",className:"ui-theme-light !bg-transparent !border-none"},{id:"meganav-theme-dark",className:"ui-theme-dark !bg-transparent !border-none"},{id:"main",className:"ui-theme-light bg-neutral-000 dark:bg-neutral-1300 border-b"},{id:"main-theme-dark",className:"ui-theme-dark bg-neutral-000 dark:bg-neutral-1300 border-b"}];useEffect(()=>{const observeNoticeResize=()=>{const noticeElement=document.querySelector('[data-id="ui-notice"]');if(noticeElement){setNoticeHeight(noticeElement.getBoundingClientRect().height)}};observeNoticeResize();window.addEventListener("resize",observeNoticeResize);return()=>window.removeEventListener("resize",observeNoticeResize)},[]);return React.createElement(React.Fragment,null,React.createElement("div",{className:"absolute inset-0 w-full z-50",id:theme==="dark"?"meganav-theme-dark":"meganav","data-testid":"meganav",style:{height:HEADER_HEIGHT+noticeHeight}},notice&&React.createElement(Notice,{...notice.props,config:notice.config}),React.createElement(Header,{className:"max-w-screen-xl mx-auto px-0 sm:px-8 md:px-10 lg:px-16",isNoticeVisible:!!notice,nav:React.createElement(Flyout,{menuItems:menuItemsForHeader,className:"justify-left z-40",flyOutClassName:"flex justify-left",viewPortClassName:"ui-shadow-lg-medium border border-neutral-200 dark:border-neutral-1100 rounded-2xl -mt-1 bg-neutral-000 dark:bg-neutral-1300"}),mobileNav:React.createElement(MeganavMobile,{navItems:mobileNavItems}),headerLinks:[{href:"/contact",label:"Contact us"}],headerLinksClassName:"md:gap-x-6 ",sessionState:sessionState,themedScrollpoints:themedScrollpoints??defaultThemedScrollpoints})))};export default Meganav;
1
+ import React,{useEffect,useMemo}from"react";import Header from"./Header";import Flyout from"./Flyout";import{MeganavMobile}from"./Meganav/MeganavMobile";import Notice from"./Notice";import{HEADER_HEIGHT}from"./utils/heights";import{getMenuItemsForHeader}from"./Meganav/utils/getMenuItemsForHeader";const Meganav=({sessionState,notice,theme,themedScrollpoints,onNoticeClose,blogPosts})=>{const[noticeHeight,setNoticeHeight]=React.useState(0);const finalNoticeHeight=notice?noticeHeight:0;const headerMenuItems=useMemo(()=>getMenuItemsForHeader(blogPosts),[blogPosts]);const mobileNavItems=useMemo(()=>headerMenuItems.filter(item=>!item.isHiddenMobile).map(({name,link,content})=>({name,link,content})),[headerMenuItems]);const defaultThemedScrollpoints=[{id:"meganav",className:"ui-theme-light !bg-transparent !border-none"},{id:"meganav-theme-dark",className:"ui-theme-dark !bg-transparent !border-none"},{id:"main",className:"ui-theme-light bg-neutral-000 dark:bg-neutral-1300 border-b"},{id:"main-theme-dark",className:"ui-theme-dark bg-neutral-000 dark:bg-neutral-1300 border-b"}];useEffect(()=>{if(!notice){if(noticeHeight!==0){setNoticeHeight(0)}return}const noticeElement=document.querySelector('[data-id="ui-notice"]');if(!noticeElement)return;const updateNoticeHeight=()=>{setNoticeHeight(noticeElement.getBoundingClientRect().height)};const observer=new ResizeObserver(updateNoticeHeight);observer.observe(noticeElement);const timeoutId=setTimeout(updateNoticeHeight,0);window.addEventListener("resize",updateNoticeHeight);return()=>{clearTimeout(timeoutId);observer.disconnect();window.removeEventListener("resize",updateNoticeHeight)}},[notice]);return React.createElement(React.Fragment,null,React.createElement("div",{className:"absolute top-0 left-0 right-0 w-full z-50",id:theme==="dark"?"meganav-theme-dark":"meganav","data-testid":"meganav",style:{height:HEADER_HEIGHT+finalNoticeHeight}},notice&&React.createElement(Notice,{...notice.props,config:notice.config,onClose:onNoticeClose}),React.createElement(Header,{className:"max-w-screen-xl mx-auto",isNoticeBannerEnabled:!!notice,noticeHeight:finalNoticeHeight,nav:React.createElement(Flyout,{menuItems:headerMenuItems,className:"justify-left z-40",flyOutClassName:"flex justify-left",viewPortClassName:"ui-shadow-lg-medium border border-neutral-200 dark:border-neutral-1100 rounded-2xl -mt-1 bg-neutral-000 dark:bg-neutral-1300"}),mobileNav:React.createElement(MeganavMobile,{navItems:mobileNavItems}),headerLinks:[{href:"/contact",label:"Contact us"}],headerLinksClassName:"md:gap-x-6 ",sessionState:sessionState,themedScrollpoints:themedScrollpoints??defaultThemedScrollpoints})))};export default Meganav;
2
2
  //# sourceMappingURL=Meganav.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/Meganav.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from \"react\";\nimport Header, { HeaderSessionState, ThemedScrollpoint } from \"./Header\";\nimport Flyout from \"./Flyout\";\nimport { menuItemsForHeader } from \"./Meganav/data\";\nimport { MeganavMobile } from \"./Meganav/MeganavMobile\";\nimport Notice from \"./Notice\";\nimport { HEADER_HEIGHT } from \"./utils/heights\";\n\nexport type MeganavNoticeBannerProps = {\n props: {\n title: string;\n bodyText: string;\n buttonLink: string;\n buttonLabel: string;\n closeBtn: boolean;\n };\n config: {\n cookieId: string;\n noticeId: string | number;\n options: {\n collapse: boolean;\n };\n };\n};\n\nexport type MeganavProps = {\n sessionState: HeaderSessionState;\n notice?: MeganavNoticeBannerProps;\n theme?: string;\n themedScrollpoints?: ThemedScrollpoint[];\n};\n\nconst Meganav = ({\n sessionState,\n notice,\n theme,\n themedScrollpoints,\n}: MeganavProps) => {\n const [noticeHeight, setNoticeHeight] = React.useState(0);\n const mobileNavItems = useMemo(\n () =>\n menuItemsForHeader\n .filter((item) => !item.isHiddenMobile)\n .map(({ name, link, content }) => ({ name, link, content })),\n [],\n );\n\n const defaultThemedScrollpoints = [\n {\n id: \"meganav\",\n className: \"ui-theme-light !bg-transparent !border-none\",\n },\n {\n id: \"meganav-theme-dark\",\n className: \"ui-theme-dark !bg-transparent !border-none\",\n },\n {\n id: \"main\",\n className: \"ui-theme-light bg-neutral-000 dark:bg-neutral-1300 border-b\",\n },\n {\n id: \"main-theme-dark\",\n className: \"ui-theme-dark bg-neutral-000 dark:bg-neutral-1300 border-b\",\n },\n ];\n\n useEffect(() => {\n const observeNoticeResize = () => {\n const noticeElement = document.querySelector('[data-id=\"ui-notice\"]');\n if (noticeElement) {\n setNoticeHeight(noticeElement.getBoundingClientRect().height);\n }\n };\n observeNoticeResize();\n window.addEventListener(\"resize\", observeNoticeResize);\n return () => window.removeEventListener(\"resize\", observeNoticeResize);\n }, []);\n\n return (\n <>\n <div\n className=\"absolute inset-0 w-full z-50\"\n id={theme === \"dark\" ? \"meganav-theme-dark\" : \"meganav\"}\n data-testid=\"meganav\"\n style={{ height: HEADER_HEIGHT + noticeHeight }}\n >\n {notice && <Notice {...notice.props} config={notice.config} />}\n <Header\n className=\"max-w-screen-xl mx-auto px-0 sm:px-8 md:px-10 lg:px-16\"\n isNoticeVisible={!!notice}\n nav={\n <Flyout\n menuItems={menuItemsForHeader}\n className=\"justify-left z-40\"\n flyOutClassName=\"flex justify-left\"\n viewPortClassName=\"ui-shadow-lg-medium border border-neutral-200 dark:border-neutral-1100 rounded-2xl -mt-1 bg-neutral-000 dark:bg-neutral-1300\"\n />\n }\n mobileNav={<MeganavMobile navItems={mobileNavItems} />}\n headerLinks={[{ href: \"/contact\", label: \"Contact us\" }]}\n headerLinksClassName=\"md:gap-x-6 \"\n sessionState={sessionState}\n themedScrollpoints={themedScrollpoints ?? defaultThemedScrollpoints}\n />\n </div>\n </>\n );\n};\n\nexport default Meganav;\n"],"names":["React","useEffect","useMemo","Header","Flyout","menuItemsForHeader","MeganavMobile","Notice","HEADER_HEIGHT","Meganav","sessionState","notice","theme","themedScrollpoints","noticeHeight","setNoticeHeight","useState","mobileNavItems","filter","item","isHiddenMobile","map","name","link","content","defaultThemedScrollpoints","id","className","observeNoticeResize","noticeElement","document","querySelector","getBoundingClientRect","height","window","addEventListener","removeEventListener","div","data-testid","style","props","config","isNoticeVisible","nav","menuItems","flyOutClassName","viewPortClassName","mobileNav","navItems","headerLinks","href","label","headerLinksClassName"],"mappings":"AAAA,OAAOA,OAASC,SAAS,CAAEC,OAAO,KAAQ,OAAQ,AAClD,QAAOC,WAAuD,UAAW,AACzE,QAAOC,WAAY,UAAW,AAC9B,QAASC,kBAAkB,KAAQ,gBAAiB,AACpD,QAASC,aAAa,KAAQ,yBAA0B,AACxD,QAAOC,WAAY,UAAW,AAC9B,QAASC,aAAa,KAAQ,iBAAkB,CA0BhD,MAAMC,QAAU,CAAC,CACfC,YAAY,CACZC,MAAM,CACNC,KAAK,CACLC,kBAAkB,CACL,IACb,KAAM,CAACC,aAAcC,gBAAgB,CAAGf,MAAMgB,QAAQ,CAAC,GACvD,MAAMC,eAAiBf,QACrB,IACEG,mBACGa,MAAM,CAAC,AAACC,MAAS,CAACA,KAAKC,cAAc,EACrCC,GAAG,CAAC,CAAC,CAAEC,IAAI,CAAEC,IAAI,CAAEC,OAAO,CAAE,GAAM,CAAA,CAAEF,KAAMC,KAAMC,OAAQ,CAAA,GAC7D,EAAE,EAGJ,MAAMC,0BAA4B,CAChC,CACEC,GAAI,UACJC,UAAW,6CACb,EACA,CACED,GAAI,qBACJC,UAAW,4CACb,EACA,CACED,GAAI,OACJC,UAAW,6DACb,EACA,CACED,GAAI,kBACJC,UAAW,4DACb,EACD,CAED1B,UAAU,KACR,MAAM2B,oBAAsB,KAC1B,MAAMC,cAAgBC,SAASC,aAAa,CAAC,yBAC7C,GAAIF,cAAe,CACjBd,gBAAgBc,cAAcG,qBAAqB,GAAGC,MAAM,CAC9D,CACF,EACAL,sBACAM,OAAOC,gBAAgB,CAAC,SAAUP,qBAClC,MAAO,IAAMM,OAAOE,mBAAmB,CAAC,SAAUR,oBACpD,EAAG,EAAE,EAEL,OACE,wCACE,oBAACS,OACCV,UAAU,+BACVD,GAAId,QAAU,OAAS,qBAAuB,UAC9C0B,cAAY,UACZC,MAAO,CAAEN,OAAQzB,cAAgBM,YAAa,GAE7CH,QAAU,oBAACJ,QAAQ,GAAGI,OAAO6B,KAAK,CAAEC,OAAQ9B,OAAO8B,MAAM,GAC1D,oBAACtC,QACCwB,UAAU,yDACVe,gBAAiB,CAAC,CAAC/B,OACnBgC,IACE,oBAACvC,QACCwC,UAAWvC,mBACXsB,UAAU,oBACVkB,gBAAgB,oBAChBC,kBAAkB,iIAGtBC,UAAW,oBAACzC,eAAc0C,SAAU/B,iBACpCgC,YAAa,CAAC,CAAEC,KAAM,WAAYC,MAAO,YAAa,EAAE,CACxDC,qBAAqB,cACrB1C,aAAcA,aACdG,mBAAoBA,oBAAsBY,6BAKpD,CAEA,gBAAehB,OAAQ"}
1
+ {"version":3,"sources":["../../src/core/Meganav.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from \"react\";\nimport Header, { HeaderSessionState, ThemedScrollpoint } from \"./Header\";\nimport Flyout from \"./Flyout\";\nimport { MeganavMobile } from \"./Meganav/MeganavMobile\";\nimport Notice from \"./Notice\";\nimport { HEADER_HEIGHT } from \"./utils/heights\";\nimport { BlogPost } from \"./Meganav/MeganavBlog\";\nimport { getMenuItemsForHeader } from \"./Meganav/utils/getMenuItemsForHeader\";\n\nexport type MeganavNoticeBannerProps = {\n props: {\n title: string;\n bodyText: string;\n buttonLink: string;\n buttonLabel: string;\n closeBtn: boolean;\n };\n config: {\n cookieId: string;\n noticeId: string | number;\n options: {\n collapse: boolean;\n };\n };\n};\n\nexport type MeganavProps = {\n sessionState: HeaderSessionState;\n blogPosts: BlogPost[];\n notice?: MeganavNoticeBannerProps;\n theme?: string;\n themedScrollpoints?: ThemedScrollpoint[];\n onNoticeClose?: () => void;\n};\n\nconst Meganav = ({\n sessionState,\n notice,\n theme,\n themedScrollpoints,\n onNoticeClose,\n blogPosts,\n}: MeganavProps) => {\n const [noticeHeight, setNoticeHeight] = React.useState(0);\n\n const finalNoticeHeight = notice ? noticeHeight : 0;\n\n const headerMenuItems = useMemo(\n () => getMenuItemsForHeader(blogPosts),\n [blogPosts],\n );\n\n const mobileNavItems = useMemo(\n () =>\n headerMenuItems\n .filter((item) => !item.isHiddenMobile)\n .map(({ name, link, content }) => ({ name, link, content })),\n [headerMenuItems],\n );\n\n const defaultThemedScrollpoints = [\n {\n id: \"meganav\",\n className: \"ui-theme-light !bg-transparent !border-none\",\n },\n {\n id: \"meganav-theme-dark\",\n className: \"ui-theme-dark !bg-transparent !border-none\",\n },\n {\n id: \"main\",\n className: \"ui-theme-light bg-neutral-000 dark:bg-neutral-1300 border-b\",\n },\n {\n id: \"main-theme-dark\",\n className: \"ui-theme-dark bg-neutral-000 dark:bg-neutral-1300 border-b\",\n },\n ];\n\n useEffect(() => {\n if (!notice) {\n if (noticeHeight !== 0) {\n setNoticeHeight(0);\n }\n return;\n }\n\n const noticeElement = document.querySelector('[data-id=\"ui-notice\"]');\n if (!noticeElement) return;\n\n const updateNoticeHeight = () => {\n setNoticeHeight(noticeElement.getBoundingClientRect().height);\n };\n\n const observer = new ResizeObserver(updateNoticeHeight);\n observer.observe(noticeElement);\n\n const timeoutId = setTimeout(updateNoticeHeight, 0);\n window.addEventListener(\"resize\", updateNoticeHeight);\n\n return () => {\n clearTimeout(timeoutId);\n observer.disconnect();\n window.removeEventListener(\"resize\", updateNoticeHeight);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [notice]);\n\n return (\n <>\n <div\n className=\"absolute top-0 left-0 right-0 w-full z-50\"\n id={theme === \"dark\" ? \"meganav-theme-dark\" : \"meganav\"}\n data-testid=\"meganav\"\n style={{ height: HEADER_HEIGHT + finalNoticeHeight }}\n >\n {notice && (\n <Notice\n {...notice.props}\n config={notice.config}\n onClose={onNoticeClose}\n />\n )}\n <Header\n className=\"max-w-screen-xl mx-auto\"\n isNoticeBannerEnabled={!!notice}\n noticeHeight={finalNoticeHeight}\n nav={\n <Flyout\n menuItems={headerMenuItems}\n className=\"justify-left z-40\"\n flyOutClassName=\"flex justify-left\"\n viewPortClassName=\"ui-shadow-lg-medium border border-neutral-200 dark:border-neutral-1100 rounded-2xl -mt-1 bg-neutral-000 dark:bg-neutral-1300\"\n />\n }\n mobileNav={<MeganavMobile navItems={mobileNavItems} />}\n headerLinks={[{ href: \"/contact\", label: \"Contact us\" }]}\n headerLinksClassName=\"md:gap-x-6 \"\n sessionState={sessionState}\n themedScrollpoints={themedScrollpoints ?? defaultThemedScrollpoints}\n />\n </div>\n </>\n );\n};\n\nexport default Meganav;\n"],"names":["React","useEffect","useMemo","Header","Flyout","MeganavMobile","Notice","HEADER_HEIGHT","getMenuItemsForHeader","Meganav","sessionState","notice","theme","themedScrollpoints","onNoticeClose","blogPosts","noticeHeight","setNoticeHeight","useState","finalNoticeHeight","headerMenuItems","mobileNavItems","filter","item","isHiddenMobile","map","name","link","content","defaultThemedScrollpoints","id","className","noticeElement","document","querySelector","updateNoticeHeight","getBoundingClientRect","height","observer","ResizeObserver","observe","timeoutId","setTimeout","window","addEventListener","clearTimeout","disconnect","removeEventListener","div","data-testid","style","props","config","onClose","isNoticeBannerEnabled","nav","menuItems","flyOutClassName","viewPortClassName","mobileNav","navItems","headerLinks","href","label","headerLinksClassName"],"mappings":"AAAA,OAAOA,OAASC,SAAS,CAAEC,OAAO,KAAQ,OAAQ,AAClD,QAAOC,WAAuD,UAAW,AACzE,QAAOC,WAAY,UAAW,AAC9B,QAASC,aAAa,KAAQ,yBAA0B,AACxD,QAAOC,WAAY,UAAW,AAC9B,QAASC,aAAa,KAAQ,iBAAkB,AAEhD,QAASC,qBAAqB,KAAQ,uCAAwC,CA4B9E,MAAMC,QAAU,CAAC,CACfC,YAAY,CACZC,MAAM,CACNC,KAAK,CACLC,kBAAkB,CAClBC,aAAa,CACbC,SAAS,CACI,IACb,KAAM,CAACC,aAAcC,gBAAgB,CAAGjB,MAAMkB,QAAQ,CAAC,GAEvD,MAAMC,kBAAoBR,OAASK,aAAe,EAElD,MAAMI,gBAAkBlB,QACtB,IAAMM,sBAAsBO,WAC5B,CAACA,UAAU,EAGb,MAAMM,eAAiBnB,QACrB,IACEkB,gBACGE,MAAM,CAAC,AAACC,MAAS,CAACA,KAAKC,cAAc,EACrCC,GAAG,CAAC,CAAC,CAAEC,IAAI,CAAEC,IAAI,CAAEC,OAAO,CAAE,GAAM,CAAA,CAAEF,KAAMC,KAAMC,OAAQ,CAAA,GAC7D,CAACR,gBAAgB,EAGnB,MAAMS,0BAA4B,CAChC,CACEC,GAAI,UACJC,UAAW,6CACb,EACA,CACED,GAAI,qBACJC,UAAW,4CACb,EACA,CACED,GAAI,OACJC,UAAW,6DACb,EACA,CACED,GAAI,kBACJC,UAAW,4DACb,EACD,CAED9B,UAAU,KACR,GAAI,CAACU,OAAQ,CACX,GAAIK,eAAiB,EAAG,CACtBC,gBAAgB,EAClB,CACA,MACF,CAEA,MAAMe,cAAgBC,SAASC,aAAa,CAAC,yBAC7C,GAAI,CAACF,cAAe,OAEpB,MAAMG,mBAAqB,KACzBlB,gBAAgBe,cAAcI,qBAAqB,GAAGC,MAAM,CAC9D,EAEA,MAAMC,SAAW,IAAIC,eAAeJ,oBACpCG,SAASE,OAAO,CAACR,eAEjB,MAAMS,UAAYC,WAAWP,mBAAoB,GACjDQ,OAAOC,gBAAgB,CAAC,SAAUT,oBAElC,MAAO,KACLU,aAAaJ,WACbH,SAASQ,UAAU,GACnBH,OAAOI,mBAAmB,CAAC,SAAUZ,mBACvC,CAEF,EAAG,CAACxB,OAAO,EAEX,OACE,wCACE,oBAACqC,OACCjB,UAAU,4CACVD,GAAIlB,QAAU,OAAS,qBAAuB,UAC9CqC,cAAY,UACZC,MAAO,CAAEb,OAAQ9B,cAAgBY,iBAAkB,GAElDR,QACC,oBAACL,QACE,GAAGK,OAAOwC,KAAK,CAChBC,OAAQzC,OAAOyC,MAAM,CACrBC,QAASvC,gBAGb,oBAACX,QACC4B,UAAU,0BACVuB,sBAAuB,CAAC,CAAC3C,OACzBK,aAAcG,kBACdoC,IACE,oBAACnD,QACCoD,UAAWpC,gBACXW,UAAU,oBACV0B,gBAAgB,oBAChBC,kBAAkB,iIAGtBC,UAAW,oBAACtD,eAAcuD,SAAUvC,iBACpCwC,YAAa,CAAC,CAAEC,KAAM,WAAYC,MAAO,YAAa,EAAE,CACxDC,qBAAqB,cACrBtD,aAAcA,aACdG,mBAAoBA,oBAAsBgB,6BAKpD,CAEA,gBAAepB,OAAQ"}