diff --git a/package.json b/package.json index c4df3b5b..6c302d84 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "@heroicons/react": "^2.2.0", "@icons-pack/react-simple-icons": "^13.1.0", "@jsdevtools/rehype-url-inspector": "^2.0.2", + "@next/third-parties": "^15.3.4", "@octokit/core": "^7.0.2", "@shikijs/transformers": "^3.6.0", "@sindresorhus/slugify": "^2.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0d67522a..6dea7224 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,6 +41,9 @@ importers: '@jsdevtools/rehype-url-inspector': specifier: ^2.0.2 version: 2.0.2 + '@next/third-parties': + specifier: ^15.3.4 + version: 15.3.4(next@15.3.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) '@octokit/core': specifier: ^7.0.2 version: 7.0.2 @@ -677,6 +680,12 @@ packages: cpu: [x64] os: [win32] + '@next/third-parties@15.3.4': + resolution: {integrity: sha512-jOvAsd0Yoq/eZ3/M+X/y/539/M6Up2xPE/aOr23CGXKinhfK2kscGP4uhtwlS0FZyHvU7ud9HTTt7G3D5G5BkA==} + peerDependencies: + next: ^13.0.0 || ^14.0.0 || ^15.0.0 + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -4241,6 +4250,9 @@ packages: text-decoder@1.2.3: resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + third-party-capital@1.0.20: + resolution: {integrity: sha512-oB7yIimd8SuGptespDAZnNkzIz+NWaJCu2RMsbs4Wmp9zSDUM8Nhi3s2OOcqYuv3mN4hitXc8DVx+LyUmbUDiA==} + tinyglobby@0.2.14: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} @@ -5145,6 +5157,12 @@ snapshots: '@next/swc-win32-x64-msvc@15.3.3': optional: true + '@next/third-parties@15.3.4(next@15.3.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)': + dependencies: + next: 15.3.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + third-party-capital: 1.0.20 + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -9587,6 +9605,8 @@ snapshots: dependencies: b4a: 1.6.7 + third-party-capital@1.0.20: {} + tinyglobby@0.2.14: dependencies: fdir: 6.4.6(picomatch@4.0.2) diff --git a/src/components/docs-breadcrumbs.jsx b/src/components/docs-breadcrumbs.jsx index d881e4e8..1da32435 100644 --- a/src/components/docs-breadcrumbs.jsx +++ b/src/components/docs-breadcrumbs.jsx @@ -1,6 +1,7 @@ import { ChevronRightIcon } from "@heroicons/react/24/outline"; import { useRouter } from "next/router"; import Link from "@/components/link"; +import { sendSelectItemEvent } from "@/lib/analytics.mjs"; import { normalizeHref } from "@/utils/strings"; export default function DocsBreadcrumbs({ routes }) { @@ -59,6 +60,16 @@ export default function DocsBreadcrumbs({ routes }) { href={breadcrumb.route} noDefaultStyles aria-label={breadcrumb.title} + onClick={() => { + sendSelectItemEvent({ + list: { id: "docs_breadcrumbs", name: "Docs Breadcrumbs" }, + item: { + item_id: breadcrumb.route, + item_name: breadcrumb.title, + item_category: "mdx_doc", + }, + }); + }} > {breadcrumb.title} diff --git a/src/components/docs-nav.jsx b/src/components/docs-nav.jsx index 2338b022..47e0bfd3 100644 --- a/src/components/docs-nav.jsx +++ b/src/components/docs-nav.jsx @@ -1,5 +1,6 @@ import { CloseButton } from "@headlessui/react"; import Link from "@/components/link"; +import { sendSelectItemEvent } from "@/lib/analytics.mjs"; import { normalizeHref, classNames } from "@/utils/strings"; export default function DocsNav({ @@ -42,6 +43,19 @@ function NavItem({ item, level, isMobileMenu, ...props }) { href={normalizeHref(item.route)} noDefaultStyles activeClassName="text-blue-500 active" + onClick={() => { + sendSelectItemEvent({ + list: { + id: isMobileMenu ? "mobile_docs_nav" : "docs_nav", + name: isMobileMenu ? "Mobile Docs Nav" : "Docs Nav", + }, + item: { + item_id: item.route, + item_name: item.title, + item_category: "mdx_doc", + }, + }); + }} {...props} > {item.title} diff --git a/src/components/primary-nav.jsx b/src/components/primary-nav.jsx index 3060dfc4..00e6e5ee 100644 --- a/src/components/primary-nav.jsx +++ b/src/components/primary-nav.jsx @@ -7,6 +7,7 @@ import { import { Bars3Icon, XMarkIcon } from "@heroicons/react/24/outline"; import { forwardRef } from "react"; import Link from "@/components/link"; +import { sendSelectItemEvent } from "@/lib/analytics.mjs"; import { classNames } from "@/utils/strings"; const navItemClass = @@ -20,6 +21,16 @@ const CustomLink = forwardRef((props, reference) => { ); }); +const sendMainNavItemSelectEvent = (item) => { + sendSelectItemEvent({ + list: { + id: "main_nav", + name: "Main Nav", + }, + item, + }); +}; + export default function PrimaryMenu({ isMenuOpen, setIsMenuOpen, className }) { return (