diff --git a/src/app/[name]/(Main)/components/CategoryScroll.tsx b/src/app/[name]/(Main)/components/CategoryScroll.tsx
index c6465ee..8e8f91f 100644
--- a/src/app/[name]/(Main)/components/CategoryScroll.tsx
+++ b/src/app/[name]/(Main)/components/CategoryScroll.tsx
@@ -6,7 +6,7 @@ import CategorySmallItemRenderer from "@/components/listview/CategorySmallItemRe
import HorizontalScrollView from "@/components/listview/HorizontalScrollView";
import clsx from "clsx";
import { usePathname } from "next/navigation";
-import { GLASS_SURFACE_SELECTED } from "@/lib/styles/glassSurface";
+import { GLASS_SURFACE_DISABLED, GLASS_SURFACE_SELECTED } from "@/lib/styles/glassSurface";
/** TODO: remove when backend sends avatarRenderMode */
const COLORED_SVG_RESTAURANT_SLUGS = new Set(["havasone"]);
@@ -20,14 +20,14 @@ const SVG_MASK_STYLE = {
WebkitMaskPosition: "center",
} as const;
-function CategoryImage({ src, size, alt, tintWithPrimary = true }: { src: string; size: number; alt: string; tintWithPrimary?: boolean }) {
+function CategoryImage({ src, size, alt, tintWithPrimary = true, disabled = false }: { src: string; size: number; alt: string; tintWithPrimary?: boolean; disabled?: boolean }) {
const isSvg = src.endsWith(".svg");
const shouldUseSvgMask = isSvg && tintWithPrimary;
if (shouldUseSvgMask) {
return (
{
event.currentTarget.src = "/assets/images/food-image.png";
}}
@@ -109,11 +109,21 @@ const CategoryScroll = ({ categories, selectedCategory, onSelect, variant = "lar
*/}
{categories.map((item) => {
const isSelected = item.id === selectedCategory;
+ const isDisabled = !item.isActive;
return (
-
-
- {item.title}
+
+
+ {item.title}
);
})}
diff --git a/src/lib/styles/glassSurface.ts b/src/lib/styles/glassSurface.ts
index 4e61ad1..3d7207c 100644
--- a/src/lib/styles/glassSurface.ts
+++ b/src/lib/styles/glassSurface.ts
@@ -3,6 +3,7 @@ import clsx, { type ClassValue } from "clsx";
export const GLASS_SURFACE = "glass-surface";
export const GLASS_SURFACE_FLAT = "glass-surface--flat";
export const GLASS_SURFACE_SELECTED = "glass-surface--selected";
+export const GLASS_SURFACE_DISABLED = "glass-surface--disabled";
export const GLASS_SURFACE_NAV = "glass-surface-nav";
export function glassSurfaceNav(...extra: ClassValue[]) {
diff --git a/src/styles/glass.css b/src/styles/glass.css
index 2b09e3b..4925549 100644
--- a/src/styles/glass.css
+++ b/src/styles/glass.css
@@ -32,6 +32,58 @@ html[data-theme="dark"] .glass-surface--selected {
background-color: color-mix(in oklch, var(--container) 85%, transparent) !important;
}
+/* Figma disabled category: white 40%, 2px inner gradient border, blur 12 */
+.glass-surface--disabled {
+ position: relative;
+ background-color: rgba(255, 255, 255, 0.4) !important;
+ border: none;
+ box-shadow: none;
+ -webkit-backdrop-filter: blur(12px);
+ backdrop-filter: blur(12px);
+}
+
+.glass-surface--disabled::before {
+ content: "";
+ position: absolute;
+ inset: 0;
+ border-radius: inherit;
+ padding: 2px;
+ background: linear-gradient(
+ 180deg,
+ rgba(255, 255, 255, 1) 0%,
+ rgba(255, 253, 253, 0) 50%,
+ rgba(255, 255, 255, 1) 100%
+ );
+ -webkit-mask:
+ linear-gradient(#fff 0 0) content-box,
+ linear-gradient(#fff 0 0);
+ mask:
+ linear-gradient(#fff 0 0) content-box,
+ linear-gradient(#fff 0 0);
+ -webkit-mask-composite: xor;
+ mask-composite: exclude;
+ pointer-events: none;
+}
+
+html[data-pattern-bg="true"] .glass-surface--disabled,
+html[data-image-bg="true"] .glass-surface--disabled {
+ -webkit-backdrop-filter: blur(8px);
+ backdrop-filter: blur(8px);
+}
+
+html[data-theme="dark"] .glass-surface--disabled {
+ background-color: color-mix(in oklch, var(--container) 40%, transparent) !important;
+}
+
+html[data-theme="dark"] .glass-surface--disabled::before {
+ background: linear-gradient(
+ 180deg,
+ rgba(255, 255, 255, 0.35) 0%,
+ rgba(255, 255, 255, 0) 50%,
+ rgba(255, 255, 255, 0.35) 100%
+ );
+}
+
.glass-surface-nav {
background-color: rgba(255, 255, 255, 0.32);
border: 1px solid rgba(255, 255, 255, 0.8);