diff --git a/apps/docs/app/ui/layout/header/header.css b/apps/docs/app/ui/layout/header/header.css
index 4f9b27122..57d55f93e 100644
--- a/apps/docs/app/ui/layout/header/header.css
+++ b/apps/docs/app/ui/layout/header/header.css
@@ -21,6 +21,63 @@
--hd-header-shadow-3-top-position: -19.5rem;
}
+.hd-product {
+ display: flex;
+ align-items: center;
+ gap: var(--hd-space-1);
+}
+
+.hd-product__menu {
+ width: 11.5rem;
+ box-sizing: border-box;
+}
+
+.hd-product__menu [role="dialog"] {
+ padding-inline: var(--hd-space-2);
+ padding-block: var(--hd-space-3);
+ border-color: transparent;
+}
+
+.hd-product__menu [role="dialog"]:focus-visible {
+ outline: 0;
+ box-shadow: var(--hd-focus-ring);
+ border-radius: var(--hd-space-05);
+}
+
+.hd-product__items {
+ display: flex;
+ flex-direction: column;
+ gap: 0.5rem;
+ list-style: none;
+ margin-top: var(--hd-space-2);
+}
+
+.hd-product__title {
+ font-size: 0.75rem;
+ text-transform: uppercase;
+ color: var(--hd-color-neutral-text-weakest);
+}
+
+.hd-product__title + .hd-product__link {
+ margin-top: var(--hd-space-1);
+}
+
+.hd-product__link {
+ display: block;
+ padding: var(--hd-space-1) var(--hd-space-1);
+ border-radius: var(--hd-border-radius-sm);
+ background-color: var(--hd-color-neutral-surface);
+}
+
+.hd-product__link:hover {
+ background-color: var(--hd-color-neutral-surface-weak);
+}
+
+.hd-product__link:focus-visible {
+ outline: 0;
+ box-shadow: var(--hd-focus-ring);
+}
+
.hd-header {
display: flex;
align-items: center;
diff --git a/apps/docs/components/icon/assets/product-menu.svg b/apps/docs/components/icon/assets/product-menu.svg
new file mode 100644
index 000000000..e052004e7
--- /dev/null
+++ b/apps/docs/components/icon/assets/product-menu.svg
@@ -0,0 +1,11 @@
+
diff --git a/apps/docs/components/icon/index.tsx b/apps/docs/components/icon/index.tsx
index b1f1e6f0a..5346d15e9 100644
--- a/apps/docs/components/icon/index.tsx
+++ b/apps/docs/components/icon/index.tsx
@@ -20,6 +20,7 @@ import ErrorIcon from "./assets/error.svg";
import InfoIcon from "./assets/info.svg";
import MessageIcon from "./assets/message.svg";
import WarningIcon from "./assets/warning.svg";
+import ProductMenuIcon from "./assets/product-menu.svg";
import Icon, { type IconProps } from "./Icon.tsx";
@@ -46,6 +47,7 @@ export {
InfoIcon,
MessageIcon,
WarningIcon,
+ ProductMenuIcon,
Icon,
IconProps
};
diff --git a/apps/docs/components/popover/popover.css b/apps/docs/components/popover/popover.css
index 9b308b4ec..bdc240dd9 100644
--- a/apps/docs/components/popover/popover.css
+++ b/apps/docs/components/popover/popover.css
@@ -8,3 +8,9 @@
box-shadow: var(--hd-popover-shadow);
outline: none;
}
+
+.hd-popover:focus-visible {
+ outline: 0;
+ box-shadow: var(--hd-focus-ring);
+ border-radius: var(--hd-space-05);
+}
diff --git a/apps/docs/hooks/useIsMobile.ts b/apps/docs/hooks/useIsMobile.ts
index 977e5b076..99a558b85 100644
--- a/apps/docs/hooks/useIsMobile.ts
+++ b/apps/docs/hooks/useIsMobile.ts
@@ -7,7 +7,7 @@ export function useIsMobile(maxWidth: string) {
const maxWidthInPixels = parseFloat(maxWidth) * 16;
const checkIsMobile = () => {
- setIsMobile(window.innerWidth <= maxWidthInPixels);
+ setIsMobile(window.innerWidth < maxWidthInPixels);
};
checkIsMobile();