{ "$schema": "https://ui.shadcn.com/schema/registry.json", "name": "snapp", "homepage": "https://github.com/Enterprisecloud-Pty-Ltd/snapp-ui-registry", "items": [ { "name": "snapp-theme", "type": "registry:theme", "title": "Snapp Theme", "description": "Shared Snapp brand colors, typography, responsive breakpoints, and layout sizing tokens.", "dependencies": [ "@fontsource/ibm-plex-sans", "@fontsource/judson" ], "css": { "@import \"./styles/snapp-theme.css\"": {}, "@import \"./styles/snapp-fonts.css\"": {} }, "files": [ { "path": "registry/radix-nova/theme/snapp-theme.css", "type": "registry:file", "target": "src/styles/snapp-theme.css" }, { "path": "registry/radix-nova/theme/snapp-fonts.css", "type": "registry:file", "target": "src/styles/snapp-fonts.css" }, { "path": "registry/radix-nova/tokens/primitives.tokens.json", "type": "registry:file", "target": "src/styles/tokens/snapp-primitives.tokens.json" }, { "path": "registry/radix-nova/tokens/semantic.tokens.json", "type": "registry:file", "target": "src/styles/tokens/snapp-semantic.tokens.json" }, { "path": "registry/radix-nova/tokens/typography.tokens.json", "type": "registry:file", "target": "src/styles/tokens/snapp-typography.tokens.json" } ], "cssVars": { "theme": { "breakpoint-snapp-phone": "26.25rem", "breakpoint-snapp-narrow": "30rem", "breakpoint-snapp-compact": "35rem", "breakpoint-snapp-mobile": "47.5rem", "breakpoint-snapp-desktop": "53.75rem", "breakpoint-snapp-tablet": "56.25rem", "breakpoint-snapp-layout": "62.5rem", "breakpoint-snapp-wide": "68.75rem", "spacing-snapp-card": "7.5625rem", "spacing-snapp-card-width": "15.9375rem", "spacing-snapp-content": "68.25rem", "spacing-snapp-article": "53.75rem", "spacing-snapp-page": "min(68.25rem, calc(100% - 4rem))", "spacing-snapp-page-mobile": "calc(100% - 2rem)", "spacing-snapp-search": "min(41.75rem, calc(100% - 2rem))", "spacing-snapp-hero-title": "min(37.125rem, 100%)", "spacing-snapp-hero-copy": "min(48.375rem, 90%)", "spacing-snapp-card-half": "calc((100% - 1.5rem) / 2)", "spacing-snapp-hero-x": "6.3125rem", "spacing-snapp-overlay-max": "80vh", "spacing-snapp-dialog-max": "calc(100% - 2rem)", "spacing-snapp-form": "min(32.5rem, 100%)", "spacing-snapp-search-results": "calc(100% - 3.25rem)", "spacing-snapp-skeleton-72": "72%", "spacing-snapp-skeleton-68": "68%", "spacing-snapp-skeleton-54": "54%", "spacing-snapp-viewport-min": "20rem", "spacing-snapp-sidebar": "16rem", "text-snapp-tiny": "0.625rem", "text-snapp-micro": "0.6875rem", "text-snapp-caption": "0.8125rem", "text-snapp-body-sm": "0.9375rem", "text-snapp-display-sm": "2.375rem", "text-snapp-display": "2.5rem", "leading-snapp-display-sm": "2.5rem", "leading-snapp-display": "2.75rem", "radius-snapp-control": "0.625rem", "radius-snapp-action-menu": "0.375rem", "radius-snapp-mark": "0.125rem 0.4375rem 0.125rem 0.4375rem", "color-snapp-brand-primary": "var(--snapp-colour-brand-primary)", "color-snapp-brand-accent": "var(--snapp-colour-brand-accent)", "color-snapp-brand-shade": "var(--snapp-colour-brand-shade)", "color-snapp-grey-0": "var(--snapp-colour-grey-0)", "color-snapp-grey-50": "var(--snapp-colour-grey-50)", "color-snapp-grey-100": "var(--snapp-colour-grey-100)", "color-snapp-grey-150": "var(--snapp-colour-grey-150)", "color-snapp-grey-200": "var(--snapp-colour-grey-200)", "color-snapp-grey-300": "var(--snapp-colour-grey-300)", "color-snapp-grey-400": "var(--snapp-colour-grey-400)", "color-snapp-grey-500": "var(--snapp-colour-grey-500)", "color-snapp-grey-600": "var(--snapp-colour-grey-600)", "color-snapp-grey-700": "var(--snapp-colour-grey-700)", "color-snapp-grey-800": "var(--snapp-colour-grey-800)", "color-snapp-grey-900": "var(--snapp-colour-grey-900)", "color-snapp-grey-1000": "var(--snapp-colour-grey-1000)", "color-snapp-secondary-green": "var(--snapp-colour-secondary-green)", "color-snapp-secondary-amber": "var(--snapp-colour-secondary-amber)", "color-snapp-secondary-blue": "var(--snapp-colour-secondary-blue)", "color-snapp-secondary-baby-blue": "var(--snapp-colour-secondary-baby-blue)", "color-snapp-secondary-red": "var(--snapp-colour-secondary-red)", "color-snapp-transparency-grey": "var(--snapp-colour-transparency-grey)", "spacing-snapp-2": "var(--snapp-spacing-2)", "spacing-snapp-4": "var(--snapp-spacing-4)", "spacing-snapp-8": "var(--snapp-spacing-8)", "spacing-snapp-12": "var(--snapp-spacing-12)", "spacing-snapp-16": "var(--snapp-spacing-16)", "spacing-snapp-24": "var(--snapp-spacing-24)", "spacing-snapp-32": "var(--snapp-spacing-32)", "spacing-snapp-40": "var(--snapp-spacing-40)", "spacing-snapp-48": "var(--snapp-spacing-48)", "spacing-snapp-56": "var(--snapp-spacing-56)", "spacing-snapp-64": "var(--snapp-spacing-64)", "spacing-snapp-72": "var(--snapp-spacing-72)", "spacing-snapp-80": "var(--snapp-spacing-80)", "spacing-snapp-88": "var(--snapp-spacing-88)", "spacing-snapp-96": "var(--snapp-spacing-96)", "radius-snapp-xs": "var(--snapp-radius-xs)", "radius-snapp-s": "var(--snapp-radius-s)", "radius-snapp-m": "var(--snapp-radius-m)", "radius-snapp-lg": "var(--snapp-radius-lg)", "radius-snapp-xl": "var(--snapp-radius-xl)", "radius-snapp-2xl": "var(--snapp-radius-2xl)", "radius-snapp-3xl": "var(--snapp-radius-3xl)", "color-snapp-text-primary": "var(--snapp-text-primary)", "color-snapp-text-secondary": "var(--snapp-text-secondary)", "color-snapp-text-brand": "var(--snapp-text-brand)", "color-snapp-text-invert": "var(--snapp-text-invert)", "color-snapp-text-accent": "var(--snapp-text-accent)", "color-snapp-text-soft": "var(--snapp-text-soft)", "color-snapp-text-red": "var(--snapp-text-red)", "color-snapp-text-green": "var(--snapp-text-green)", "color-snapp-text-amber": "var(--snapp-text-amber)", "color-snapp-text-blue": "var(--snapp-text-blue)", "color-snapp-surface-primary": "var(--snapp-surface-primary)", "color-snapp-surface-secondary": "var(--snapp-surface-secondary)", "color-snapp-surface-brand": "var(--snapp-surface-brand)", "color-snapp-surface-invert": "var(--snapp-surface-invert)", "color-snapp-surface-accent": "var(--snapp-surface-accent)", "color-snapp-surface-red": "var(--snapp-surface-red)", "color-snapp-surface-green": "var(--snapp-surface-green)", "color-snapp-surface-amber": "var(--snapp-surface-amber)", "color-snapp-surface-blue": "var(--snapp-surface-blue)", "color-snapp-surface-transparent": "var(--snapp-surface-transparent)", "color-snapp-border-primary": "var(--snapp-border-primary)", "color-snapp-border-invert": "var(--snapp-border-invert)", "color-snapp-border-brand": "var(--snapp-border-brand)", "color-snapp-border-accent": "var(--snapp-border-accent)", "color-snapp-border-subtle": "var(--snapp-border-subtle)", "color-snapp-border-highlight": "var(--snapp-border-highlight)", "color-snapp-icon-red": "var(--snapp-icon-red)", "color-snapp-icon-green": "var(--snapp-icon-green)", "color-snapp-icon-amber": "var(--snapp-icon-amber)", "color-snapp-icon-blue": "var(--snapp-icon-blue)", "color-snapp-icon-brand": "var(--snapp-icon-brand)", "color-snapp-icon-accent": "var(--snapp-icon-accent)", "color-snapp-icon-invert": "var(--snapp-icon-invert)", "color-snapp-icon-primary": "var(--snapp-icon-primary)", "color-snapp-icon-subtle": "var(--snapp-icon-subtle)", "color-snapp-button-primary": "var(--snapp-button-primary)", "color-snapp-button-secondary": "var(--snapp-button-secondary)", "color-snapp-button-brand": "var(--snapp-button-brand)", "color-snapp-button-invert": "var(--snapp-button-invert)", "color-snapp-button-accent": "var(--snapp-button-accent)", "color-snapp-button-outline": "var(--snapp-button-outline)", "spacing-snapp-none": "var(--snapp-spacing-none)", "spacing-snapp-xxxs": "var(--snapp-spacing-xxxs)", "spacing-snapp-xxs": "var(--snapp-spacing-xxs)", "spacing-snapp-xs": "var(--snapp-spacing-xs)", "spacing-snapp-s": "var(--snapp-spacing-s)", "spacing-snapp-m": "var(--snapp-spacing-m)", "spacing-snapp-lg": "var(--snapp-spacing-lg)", "spacing-snapp-xl": "var(--snapp-spacing-xl)", "spacing-snapp-2xl": "var(--snapp-spacing-2xl)", "spacing-snapp-3xl": "var(--snapp-spacing-3xl)", "spacing-snapp-4xl": "var(--snapp-spacing-4xl)", "spacing-snapp-5xl": "var(--snapp-spacing-5xl)", "radius-snapp-minimal": "var(--snapp-radius-minimal)", "radius-snapp-rounded": "var(--snapp-radius-rounded)", "radius-snapp-standard": "var(--snapp-radius-standard)", "radius-snapp-large": "var(--snapp-radius-large)", "radius-snapp-full": "var(--snapp-radius-full)", "font-snapp-title": "var(--snapp-font-family-title)", "font-snapp-body": "var(--snapp-font-family-body)", "font-weight-snapp-regular": "var(--snapp-font-weight-regular)", "font-weight-snapp-bold": "var(--snapp-font-weight-bold)", "text-snapp-xxs": "var(--snapp-font-size-xxs)", "text-snapp-xs": "var(--snapp-font-size-xs)", "text-snapp-sm": "var(--snapp-font-size-sm)", "text-snapp-md": "var(--snapp-font-size-md)", "text-snapp-lg": "var(--snapp-font-size-lg)", "text-snapp-xl": "var(--snapp-font-size-xl)", "text-snapp-2xl": "var(--snapp-font-size-2xl)", "text-snapp-3xl": "var(--snapp-font-size-3xl)", "text-snapp-4xl": "var(--snapp-font-size-4xl)", "text-snapp-5xl": "var(--snapp-font-size-5xl)", "leading-snapp-xxxs": "var(--snapp-font-line-height-xxxs)", "leading-snapp-xxs": "var(--snapp-font-line-height-xxs)", "leading-snapp-xs": "var(--snapp-font-line-height-xs)", "leading-snapp-sm": "var(--snapp-font-line-height-sm)", "leading-snapp-md": "var(--snapp-font-line-height-md)", "leading-snapp-lg": "var(--snapp-font-line-height-lg)", "leading-snapp-xl": "var(--snapp-font-line-height-xl)", "leading-snapp-2xl": "var(--snapp-font-line-height-2xl)", "color-background": "var(--background)", "color-foreground": "var(--foreground)", "color-card": "var(--card)", "color-card-foreground": "var(--card-foreground)", "color-popover": "var(--popover)", "color-popover-foreground": "var(--popover-foreground)", "color-primary": "var(--primary)", "color-primary-foreground": "var(--primary-foreground)", "color-secondary": "var(--secondary)", "color-secondary-foreground": "var(--secondary-foreground)", "color-muted": "var(--muted)", "color-muted-foreground": "var(--muted-foreground)", "color-accent": "var(--accent)", "color-accent-foreground": "var(--accent-foreground)", "color-destructive": "var(--destructive)", "color-border": "var(--border)", "color-input": "var(--input)", "color-ring": "var(--ring)", "color-sidebar": "var(--sidebar)", "color-sidebar-foreground": "var(--sidebar-foreground)", "color-sidebar-primary": "var(--sidebar-primary)", "color-sidebar-primary-foreground": "var(--sidebar-primary-foreground)", "color-sidebar-accent": "var(--sidebar-accent)", "color-sidebar-accent-foreground": "var(--sidebar-accent-foreground)", "color-sidebar-border": "var(--sidebar-border)", "color-sidebar-ring": "var(--sidebar-ring)", "color-snapp-border-card": "var(--snapp-border-card)", "color-snapp-card-border": "var(--snapp-border-card)", "color-snapp-skeleton-icon": "var(--snapp-skeleton-icon)", "color-snapp-skeleton-line": "var(--snapp-skeleton-line)", "color-snapp-skeleton-soft": "var(--snapp-skeleton-soft)", "color-snapp-brand": "var(--snapp-brand)", "color-snapp-accent": "var(--snapp-accent)", "color-snapp-ink": "var(--snapp-ink)", "color-snapp-canvas": "var(--snapp-canvas)", "color-snapp-surface": "var(--snapp-surface)", "color-snapp-danger": "var(--snapp-danger)", "shadow-snapp-card-hover": "var(--snapp-shadow-card-hover)", "shadow-snapp-drag-preview": "var(--snapp-shadow-drag-preview)", "shadow-snapp-flyout": "var(--snapp-shadow-flyout)" }, "light": { "snapp-colour-brand-primary": "#2f455c", "snapp-colour-brand-accent": "#40bfac", "snapp-colour-brand-shade": "#43576c", "snapp-colour-grey-0": "#ffffff", "snapp-colour-grey-50": "#f4f4f4", "snapp-colour-grey-100": "#eaeaeb", "snapp-colour-grey-150": "#dfe0e0", "snapp-colour-grey-200": "#d4d5d5", "snapp-colour-grey-300": "#c0c0c1", "snapp-colour-grey-400": "#aaabab", "snapp-colour-grey-500": "#959697", "snapp-colour-grey-600": "#7f8082", "snapp-colour-grey-700": "#6a6c6d", "snapp-colour-grey-800": "#555658", "snapp-colour-grey-900": "#2a2c2e", "snapp-colour-grey-1000": "#000000", "snapp-colour-secondary-green": "#00a63e", "snapp-colour-secondary-amber": "#ff9e20", "snapp-colour-secondary-blue": "#0078d4", "snapp-colour-secondary-baby-blue": "#e6f2fb", "snapp-colour-secondary-red": "#e94435", "snapp-colour-transparency-grey": "#2a2c2e4d", "snapp-spacing-2": "0.125rem", "snapp-spacing-4": "0.25rem", "snapp-spacing-8": "0.5rem", "snapp-spacing-12": "0.75rem", "snapp-spacing-16": "1rem", "snapp-spacing-24": "1.5rem", "snapp-spacing-32": "2rem", "snapp-spacing-40": "2.5rem", "snapp-spacing-48": "3rem", "snapp-spacing-56": "3.5rem", "snapp-spacing-64": "4rem", "snapp-spacing-72": "4.5rem", "snapp-spacing-80": "5rem", "snapp-spacing-88": "5.5rem", "snapp-spacing-96": "6rem", "snapp-radius-xs": "0.125rem", "snapp-radius-s": "0.25rem", "snapp-radius-m": "0.5rem", "snapp-radius-lg": "1rem", "snapp-radius-xl": "2rem", "snapp-radius-2xl": "4rem", "snapp-radius-3xl": "8rem", "snapp-text-primary": "var(--snapp-colour-grey-900)", "snapp-text-secondary": "var(--snapp-colour-grey-600)", "snapp-text-brand": "var(--snapp-colour-brand-primary)", "snapp-text-invert": "var(--snapp-colour-grey-50)", "snapp-text-accent": "var(--snapp-colour-brand-accent)", "snapp-text-soft": "var(--snapp-colour-grey-400)", "snapp-text-red": "var(--snapp-colour-secondary-red)", "snapp-text-green": "var(--snapp-colour-secondary-green)", "snapp-text-amber": "var(--snapp-colour-secondary-amber)", "snapp-text-blue": "var(--snapp-colour-secondary-blue)", "snapp-surface-primary": "var(--snapp-colour-grey-0)", "snapp-surface-secondary": "var(--snapp-colour-grey-50)", "snapp-surface-brand": "var(--snapp-colour-brand-primary)", "snapp-surface-invert": "var(--snapp-colour-grey-900)", "snapp-surface-accent": "var(--snapp-colour-brand-accent)", "snapp-surface-red": "var(--snapp-colour-secondary-red)", "snapp-surface-green": "var(--snapp-colour-secondary-green)", "snapp-surface-amber": "var(--snapp-colour-secondary-amber)", "snapp-surface-blue": "var(--snapp-colour-secondary-blue)", "snapp-surface-transparent": "var(--snapp-colour-transparency-grey)", "snapp-border-primary": "var(--snapp-colour-grey-150)", "snapp-border-invert": "var(--snapp-colour-grey-50)", "snapp-border-brand": "var(--snapp-colour-brand-primary)", "snapp-border-accent": "var(--snapp-colour-brand-accent)", "snapp-border-subtle": "var(--snapp-colour-brand-shade)", "snapp-border-highlight": "var(--snapp-colour-secondary-blue)", "snapp-icon-red": "var(--snapp-colour-secondary-red)", "snapp-icon-green": "var(--snapp-colour-secondary-green)", "snapp-icon-amber": "var(--snapp-colour-secondary-amber)", "snapp-icon-blue": "var(--snapp-colour-secondary-blue)", "snapp-icon-brand": "var(--snapp-colour-brand-primary)", "snapp-icon-accent": "var(--snapp-colour-brand-accent)", "snapp-icon-invert": "var(--snapp-colour-grey-50)", "snapp-icon-primary": "var(--snapp-colour-grey-600)", "snapp-icon-subtle": "var(--snapp-colour-grey-150)", "snapp-button-primary": "var(--snapp-colour-brand-primary)", "snapp-button-secondary": "var(--snapp-colour-secondary-baby-blue)", "snapp-button-brand": "var(--snapp-colour-brand-primary)", "snapp-button-invert": "var(--snapp-colour-grey-50)", "snapp-button-accent": "var(--snapp-colour-brand-accent)", "snapp-button-outline": "var(--snapp-colour-grey-150)", "snapp-spacing-none": "0", "snapp-spacing-xxxs": "var(--snapp-spacing-2)", "snapp-spacing-xxs": "var(--snapp-spacing-4)", "snapp-spacing-xs": "var(--snapp-spacing-8)", "snapp-spacing-s": "var(--snapp-spacing-12)", "snapp-spacing-m": "var(--snapp-spacing-16)", "snapp-spacing-lg": "var(--snapp-spacing-24)", "snapp-spacing-xl": "var(--snapp-spacing-32)", "snapp-spacing-2xl": "var(--snapp-spacing-40)", "snapp-spacing-3xl": "var(--snapp-spacing-48)", "snapp-spacing-4xl": "var(--snapp-spacing-56)", "snapp-spacing-5xl": "var(--snapp-spacing-64)", "snapp-radius-minimal": "var(--snapp-radius-xs)", "snapp-radius-rounded": "var(--snapp-radius-s)", "snapp-radius-standard": "var(--snapp-radius-m)", "snapp-radius-large": "var(--snapp-radius-lg)", "snapp-radius-full": "var(--snapp-radius-3xl)", "snapp-font-family-title": "\"Judson\", serif", "snapp-font-family-body": "\"IBM Plex Sans\", sans-serif", "snapp-font-weight-regular": "400", "snapp-font-weight-bold": "700", "snapp-font-size-xxs": "0.6875rem", "snapp-font-size-xs": "0.75rem", "snapp-font-size-sm": "0.875rem", "snapp-font-size-md": "1rem", "snapp-font-size-lg": "1.125rem", "snapp-font-size-xl": "1.25rem", "snapp-font-size-2xl": "1.5rem", "snapp-font-size-3xl": "2rem", "snapp-font-size-4xl": "2.5rem", "snapp-font-size-5xl": "3rem", "snapp-font-line-height-xxxs": "0.75rem", "snapp-font-line-height-xxs": "1rem", "snapp-font-line-height-xs": "1.25rem", "snapp-font-line-height-sm": "1.5rem", "snapp-font-line-height-md": "1.75rem", "snapp-font-line-height-lg": "2rem", "snapp-font-line-height-xl": "2.5rem", "snapp-font-line-height-2xl": "3rem", "snapp-border-card": "rgb(42 44 46 / 15%)", "snapp-skeleton-icon": "rgb(64 191 172 / 20%)", "snapp-skeleton-line": "rgb(42 44 46 / 10%)", "snapp-skeleton-soft": "rgb(42 44 46 / 5%)", "snapp-shadow-card-hover": "0 0.25rem 0.46875rem rgb(0 0 0 / 10%)", "snapp-shadow-drag-preview": "0 0.25rem 0.375rem rgb(0 0 0 / 25%)", "snapp-shadow-flyout": "0 0.25rem 0.375rem rgb(0 0 0 / 25%)", "snapp-brand": "var(--snapp-colour-brand-primary)", "snapp-accent": "var(--snapp-colour-brand-accent)", "snapp-ink": "var(--snapp-text-primary)", "snapp-canvas": "#eef1f4", "snapp-surface": "var(--snapp-surface-primary)", "snapp-danger": "var(--snapp-colour-secondary-red)", "snapp-indicator-border": "1.5px", "snapp-hairline": "1px", "snapp-control-inset": "2px", "snapp-tooltip-arrow-offset": "2px", "radius": "var(--snapp-radius-m)", "background": "var(--snapp-surface)", "foreground": "var(--snapp-ink)", "card": "var(--snapp-surface)", "card-foreground": "var(--snapp-ink)", "popover": "var(--snapp-surface)", "popover-foreground": "var(--snapp-ink)", "primary": "var(--snapp-brand)", "primary-foreground": "var(--snapp-text-invert)", "secondary": "var(--snapp-surface-secondary)", "secondary-foreground": "var(--snapp-text-primary)", "muted": "var(--snapp-surface-secondary)", "muted-foreground": "var(--snapp-text-secondary)", "accent": "var(--snapp-surface-secondary)", "accent-foreground": "var(--snapp-text-primary)", "destructive": "var(--snapp-danger)", "border": "var(--snapp-border-primary)", "input": "var(--snapp-border-card)", "ring": "var(--snapp-border-brand)", "sidebar": "var(--snapp-surface-secondary)", "sidebar-foreground": "var(--snapp-text-primary)", "sidebar-primary": "var(--snapp-brand)", "sidebar-primary-foreground": "var(--snapp-text-invert)", "sidebar-accent": "var(--snapp-surface-primary)", "sidebar-accent-foreground": "var(--snapp-text-primary)", "sidebar-border": "var(--snapp-border-primary)", "sidebar-ring": "var(--snapp-border-brand)" }, "dark": { "snapp-brand": "#d8e3ec", "snapp-accent": "#5fd4c2", "snapp-ink": "#f5f7f9", "snapp-canvas": "#18222c", "snapp-surface": "#202d39", "snapp-danger": "#fda29b", "snapp-shadow-drag-preview": "0 0.25rem 0.375rem rgb(0 0 0 / 45%)", "snapp-shadow-flyout": "0 0.25rem 0.375rem rgb(0 0 0 / 45%)", "snapp-indicator-border": "1.5px", "snapp-hairline": "1px", "snapp-control-inset": "2px", "snapp-tooltip-arrow-offset": "2px", "radius": "var(--snapp-radius-m)", "background": "var(--snapp-surface)", "foreground": "var(--snapp-ink)", "card": "var(--snapp-surface)", "card-foreground": "var(--snapp-ink)", "popover": "var(--snapp-surface)", "popover-foreground": "var(--snapp-ink)", "primary": "var(--snapp-brand)", "primary-foreground": "var(--snapp-text-invert)", "secondary": "var(--snapp-surface-secondary)", "secondary-foreground": "var(--snapp-text-primary)", "muted": "var(--snapp-surface-secondary)", "muted-foreground": "var(--snapp-text-secondary)", "accent": "var(--snapp-surface-secondary)", "accent-foreground": "var(--snapp-text-primary)", "destructive": "var(--snapp-danger)", "border": "var(--snapp-border-primary)", "input": "var(--snapp-border-card)", "ring": "var(--snapp-border-brand)", "sidebar": "var(--snapp-surface-secondary)", "sidebar-foreground": "var(--snapp-text-primary)", "sidebar-primary": "var(--snapp-brand)", "sidebar-primary-foreground": "var(--snapp-text-invert)", "sidebar-accent": "var(--snapp-surface-primary)", "sidebar-accent-foreground": "var(--snapp-text-primary)", "sidebar-border": "var(--snapp-border-primary)", "sidebar-ring": "var(--snapp-border-brand)" } } }, { "name": "snapp-utils", "type": "registry:lib", "title": "Snapp Utilities", "description": "Shared class-name utility with Tailwind merge support for Snapp typography tokens.", "dependencies": [ "clsx", "tailwind-merge" ], "files": [ { "path": "registry/radix-nova/lib/utils.ts", "type": "registry:lib", "target": "@lib/utils.ts" } ] }, { "name": "snapp-feature-parameters", "type": "registry:lib", "title": "Snapp Feature Parameters", "description": "Shared, typed parsing for boolean feature parameters such as showNavBar.", "dependencies": [ "zod" ], "files": [ { "path": "registry/radix-nova/lib/feature-parameters.ts", "type": "registry:lib", "target": "@lib/snapp-feature-parameters.ts" } ] }, { "name": "snapp-search-utils", "type": "registry:lib", "title": "Snapp Search Utilities", "description": "Shared normalization, multi-word matching, and collection-scoped filtering helpers for feature-owned search fields.", "files": [ { "path": "registry/radix-nova/lib/search.ts", "type": "registry:lib", "target": "@lib/search.ts" } ] }, { "name": "snapp-portal-container", "type": "registry:lib", "title": "Snapp Portal Container", "description": "Injected portal-container context for host-safe dialogs, menus, popovers, tooltips, and searchable comboboxes; the consuming runtime owns local versus external placement.", "files": [ { "path": "registry/radix-nova/runtime/PortalContainer.ts", "type": "registry:lib", "target": "src/runtime/PortalContainer.ts" } ] }, { "name": "snapp-use-mobile", "type": "registry:hook", "title": "Snapp Use Mobile", "description": "Shared responsive viewport hook required by adaptive primitives.", "files": [ { "path": "registry/radix-nova/hooks/use-mobile.ts", "type": "registry:hook", "target": "@hooks/use-mobile.ts" } ] }, { "name": "snapp-accordion", "type": "registry:ui", "title": "Snapp Accordion", "description": "The shared Snapp accordion UI primitive.", "dependencies": [ "lucide-react", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/accordion.tsx", "type": "registry:ui", "target": "@ui/accordion.tsx" } ] }, { "name": "snapp-alert", "type": "registry:ui", "title": "Snapp Alert", "description": "The shared Snapp alert UI primitive.", "dependencies": [ "class-variance-authority" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/alert.tsx", "type": "registry:ui", "target": "@ui/alert.tsx" } ] }, { "name": "snapp-alert-dialog", "type": "registry:ui", "title": "Snapp Alert Dialog", "description": "The shared Snapp alert-dialog UI primitive.", "dependencies": [ "radix-ui" ], "registryDependencies": [ "@snapp/snapp-button", "@snapp/snapp-portal-container", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/alert-dialog.tsx", "type": "registry:ui", "target": "@ui/alert-dialog.tsx" } ] }, { "name": "snapp-aspect-ratio", "type": "registry:ui", "title": "Snapp Aspect Ratio", "description": "The shared Snapp aspect-ratio UI primitive.", "dependencies": [ "radix-ui" ], "files": [ { "path": "registry/radix-nova/ui/aspect-ratio.tsx", "type": "registry:ui", "target": "@ui/aspect-ratio.tsx" } ] }, { "name": "snapp-attachment", "type": "registry:ui", "title": "Snapp Attachment", "description": "The shared Snapp attachment UI primitive.", "dependencies": [ "class-variance-authority", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-button", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/attachment.tsx", "type": "registry:ui", "target": "@ui/attachment.tsx" } ] }, { "name": "snapp-avatar", "type": "registry:ui", "title": "Snapp Avatar", "description": "The shared Snapp avatar UI primitive.", "dependencies": [ "radix-ui" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/avatar.tsx", "type": "registry:ui", "target": "@ui/avatar.tsx" } ] }, { "name": "snapp-badge", "type": "registry:ui", "title": "Snapp Badge", "description": "The shared Snapp badge UI primitive.", "dependencies": [ "class-variance-authority", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/badge.tsx", "type": "registry:ui", "target": "@ui/badge.tsx" } ] }, { "name": "snapp-breadcrumb", "type": "registry:ui", "title": "Snapp Breadcrumb", "description": "The shared Snapp breadcrumb UI primitive.", "dependencies": [ "lucide-react", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/breadcrumb.tsx", "type": "registry:ui", "target": "@ui/breadcrumb.tsx" } ] }, { "name": "snapp-bubble", "type": "registry:ui", "title": "Snapp Bubble", "description": "The shared Snapp bubble UI primitive.", "dependencies": [ "class-variance-authority", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/bubble.tsx", "type": "registry:ui", "target": "@ui/bubble.tsx" } ] }, { "name": "snapp-button", "type": "registry:ui", "title": "Snapp Button", "description": "The standard Snapp action primitive, including shared modal and horizontal overflow-action treatments.", "dependencies": [ "class-variance-authority", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/button.tsx", "type": "registry:ui", "target": "@ui/button.tsx" } ] }, { "name": "snapp-button-group", "type": "registry:ui", "title": "Snapp Button Group", "description": "The shared Snapp button-group UI primitive.", "dependencies": [ "class-variance-authority", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-separator", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/button-group.tsx", "type": "registry:ui", "target": "@ui/button-group.tsx" } ] }, { "name": "snapp-calendar", "type": "registry:ui", "title": "Snapp Calendar", "description": "The shared Snapp calendar UI primitive.", "dependencies": [ "lucide-react", "react-day-picker" ], "registryDependencies": [ "@snapp/snapp-button", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/calendar.tsx", "type": "registry:ui", "target": "@ui/calendar.tsx" } ] }, { "name": "snapp-card", "type": "registry:ui", "title": "Snapp Card", "description": "The shared Snapp card UI primitive.", "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/card.tsx", "type": "registry:ui", "target": "@ui/card.tsx" } ] }, { "name": "snapp-carousel", "type": "registry:ui", "title": "Snapp Carousel", "description": "The shared Snapp carousel UI primitive.", "dependencies": [ "embla-carousel-react", "lucide-react" ], "registryDependencies": [ "@snapp/snapp-button", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/carousel.tsx", "type": "registry:ui", "target": "@ui/carousel.tsx" } ] }, { "name": "snapp-chart", "type": "registry:ui", "title": "Snapp Chart", "description": "The shared Snapp chart UI primitive.", "dependencies": [ "recharts" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/chart.tsx", "type": "registry:ui", "target": "@ui/chart.tsx" } ] }, { "name": "snapp-checkbox", "type": "registry:ui", "title": "Snapp Checkbox", "description": "The shared Snapp checkbox UI primitive.", "dependencies": [ "lucide-react", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/checkbox.tsx", "type": "registry:ui", "target": "@ui/checkbox.tsx" } ] }, { "name": "snapp-collapsible", "type": "registry:ui", "title": "Snapp Collapsible", "description": "The shared Snapp collapsible UI primitive.", "dependencies": [ "radix-ui" ], "files": [ { "path": "registry/radix-nova/ui/collapsible.tsx", "type": "registry:ui", "target": "@ui/collapsible.tsx" } ] }, { "name": "snapp-combobox", "type": "registry:ui", "title": "Snapp Combobox", "description": "The standard searchable Snapp option picker for single-select and autocomplete controls.", "dependencies": [ "@base-ui/react", "lucide-react" ], "registryDependencies": [ "@snapp/snapp-button", "@snapp/snapp-input-group", "@snapp/snapp-portal-container", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/combobox.tsx", "type": "registry:ui", "target": "@ui/combobox.tsx" } ] }, { "name": "snapp-command", "type": "registry:ui", "title": "Snapp Command", "description": "The shared Snapp command UI primitive.", "dependencies": [ "cmdk", "lucide-react" ], "registryDependencies": [ "@snapp/snapp-dialog", "@snapp/snapp-input-group", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/command.tsx", "type": "registry:ui", "target": "@ui/command.tsx" } ] }, { "name": "snapp-context-menu", "type": "registry:ui", "title": "Snapp Context Menu", "description": "The shared Snapp context-menu UI primitive.", "dependencies": [ "lucide-react", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-portal-container", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/context-menu.tsx", "type": "registry:ui", "target": "@ui/context-menu.tsx" } ] }, { "name": "snapp-dialog", "type": "registry:ui", "title": "Snapp Dialog", "description": "The shared Snapp dialog UI primitive.", "dependencies": [ "lucide-react", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-button", "@snapp/snapp-portal-container", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/dialog.tsx", "type": "registry:ui", "target": "@ui/dialog.tsx" } ] }, { "name": "snapp-direction", "type": "registry:ui", "title": "Snapp Direction", "description": "The shared Snapp direction UI primitive.", "dependencies": [ "radix-ui" ], "files": [ { "path": "registry/radix-nova/ui/direction.tsx", "type": "registry:ui", "target": "@ui/direction.tsx" } ] }, { "name": "snapp-drawer", "type": "registry:ui", "title": "Snapp Drawer", "description": "The shared Snapp drawer UI primitive.", "dependencies": [ "vaul" ], "registryDependencies": [ "@snapp/snapp-portal-container", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/drawer.tsx", "type": "registry:ui", "target": "@ui/drawer.tsx" } ] }, { "name": "snapp-dropdown-menu", "type": "registry:ui", "title": "Snapp Dropdown Menu", "description": "The shared Snapp dropdown-menu UI primitive.", "dependencies": [ "lucide-react", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-portal-container", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/dropdown-menu.tsx", "type": "registry:ui", "target": "@ui/dropdown-menu.tsx" } ] }, { "name": "snapp-empty", "type": "registry:ui", "title": "Snapp Empty", "description": "The shared Snapp empty UI primitive.", "dependencies": [ "class-variance-authority" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/empty.tsx", "type": "registry:ui", "target": "@ui/empty.tsx" } ] }, { "name": "snapp-field", "type": "registry:ui", "title": "Snapp Field", "description": "The shared Snapp field UI primitive.", "dependencies": [ "class-variance-authority" ], "registryDependencies": [ "@snapp/snapp-label", "@snapp/snapp-separator", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/field.tsx", "type": "registry:ui", "target": "@ui/field.tsx" } ] }, { "name": "snapp-hover-card", "type": "registry:ui", "title": "Snapp Hover Card", "description": "The shared Snapp hover-card UI primitive.", "dependencies": [ "radix-ui" ], "registryDependencies": [ "@snapp/snapp-portal-container", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/hover-card.tsx", "type": "registry:ui", "target": "@ui/hover-card.tsx" } ] }, { "name": "snapp-input", "type": "registry:ui", "title": "Snapp Input", "description": "The shared Snapp input UI primitive.", "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/input.tsx", "type": "registry:ui", "target": "@ui/input.tsx" } ] }, { "name": "snapp-input-group", "type": "registry:ui", "title": "Snapp Input Group", "description": "The shared Snapp input-group UI primitive.", "dependencies": [ "class-variance-authority" ], "registryDependencies": [ "@snapp/snapp-button", "@snapp/snapp-input", "@snapp/snapp-textarea", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/input-group.tsx", "type": "registry:ui", "target": "@ui/input-group.tsx" } ] }, { "name": "snapp-input-otp", "type": "registry:ui", "title": "Snapp Input Otp", "description": "The shared Snapp input-otp UI primitive.", "dependencies": [ "input-otp", "lucide-react" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/input-otp.tsx", "type": "registry:ui", "target": "@ui/input-otp.tsx" } ] }, { "name": "snapp-item", "type": "registry:ui", "title": "Snapp Item", "description": "The shared Snapp item UI primitive.", "dependencies": [ "class-variance-authority", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-separator", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/item.tsx", "type": "registry:ui", "target": "@ui/item.tsx" } ] }, { "name": "snapp-kbd", "type": "registry:ui", "title": "Snapp Kbd", "description": "The shared Snapp kbd UI primitive.", "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/kbd.tsx", "type": "registry:ui", "target": "@ui/kbd.tsx" } ] }, { "name": "snapp-label", "type": "registry:ui", "title": "Snapp Label", "description": "The shared Snapp label UI primitive.", "dependencies": [ "radix-ui" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/label.tsx", "type": "registry:ui", "target": "@ui/label.tsx" } ] }, { "name": "snapp-marker", "type": "registry:ui", "title": "Snapp Marker", "description": "The shared Snapp marker UI primitive.", "dependencies": [ "class-variance-authority", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/marker.tsx", "type": "registry:ui", "target": "@ui/marker.tsx" } ] }, { "name": "snapp-menubar", "type": "registry:ui", "title": "Snapp Menubar", "description": "The shared Snapp menubar UI primitive.", "dependencies": [ "lucide-react", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-portal-container", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/menubar.tsx", "type": "registry:ui", "target": "@ui/menubar.tsx" } ] }, { "name": "snapp-message", "type": "registry:ui", "title": "Snapp Message", "description": "The shared Snapp message UI primitive.", "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/message.tsx", "type": "registry:ui", "target": "@ui/message.tsx" } ] }, { "name": "snapp-message-scroller", "type": "registry:ui", "title": "Snapp Message Scroller", "description": "The shared Snapp message-scroller UI primitive.", "dependencies": [ "@shadcn/react", "lucide-react" ], "registryDependencies": [ "@snapp/snapp-button", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/message-scroller.tsx", "type": "registry:ui", "target": "@ui/message-scroller.tsx" } ] }, { "name": "snapp-native-select", "type": "registry:ui", "title": "Snapp Native Select", "description": "The shared Snapp native-select UI primitive.", "dependencies": [ "lucide-react" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/native-select.tsx", "type": "registry:ui", "target": "@ui/native-select.tsx" } ] }, { "name": "snapp-navigation-menu", "type": "registry:ui", "title": "Snapp Navigation Menu", "description": "The shared Snapp navigation-menu UI primitive.", "dependencies": [ "class-variance-authority", "lucide-react", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/navigation-menu.tsx", "type": "registry:ui", "target": "@ui/navigation-menu.tsx" } ] }, { "name": "snapp-pagination", "type": "registry:ui", "title": "Snapp Pagination", "description": "The shared Snapp pagination UI primitive.", "dependencies": [ "lucide-react" ], "registryDependencies": [ "@snapp/snapp-button", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/pagination.tsx", "type": "registry:ui", "target": "@ui/pagination.tsx" } ] }, { "name": "snapp-popover", "type": "registry:ui", "title": "Snapp Popover", "description": "The shared Snapp popover UI primitive.", "dependencies": [ "radix-ui" ], "registryDependencies": [ "@snapp/snapp-portal-container", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/popover.tsx", "type": "registry:ui", "target": "@ui/popover.tsx" } ] }, { "name": "snapp-progress", "type": "registry:ui", "title": "Snapp Progress", "description": "The shared Snapp progress UI primitive.", "dependencies": [ "radix-ui" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/progress.tsx", "type": "registry:ui", "target": "@ui/progress.tsx" } ] }, { "name": "snapp-radio-group", "type": "registry:ui", "title": "Snapp Radio Group", "description": "The shared Snapp radio-group UI primitive.", "dependencies": [ "radix-ui" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/radio-group.tsx", "type": "registry:ui", "target": "@ui/radio-group.tsx" } ] }, { "name": "snapp-resizable", "type": "registry:ui", "title": "Snapp Resizable", "description": "The shared Snapp resizable UI primitive.", "dependencies": [ "react-resizable-panels" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/resizable.tsx", "type": "registry:ui", "target": "@ui/resizable.tsx" } ] }, { "name": "snapp-scroll-area", "type": "registry:ui", "title": "Snapp Scroll Area", "description": "The shared Snapp scroll-area UI primitive.", "dependencies": [ "radix-ui" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/scroll-area.tsx", "type": "registry:ui", "target": "@ui/scroll-area.tsx" } ] }, { "name": "snapp-select", "type": "registry:ui", "title": "Snapp Select", "description": "The non-searchable Snapp option picker for exceptional fixed-choice controls where search is intentionally not required.", "dependencies": [ "lucide-react", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-portal-container", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/select.tsx", "type": "registry:ui", "target": "@ui/select.tsx" } ] }, { "name": "snapp-separator", "type": "registry:ui", "title": "Snapp Separator", "description": "The shared Snapp separator UI primitive.", "dependencies": [ "radix-ui" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/separator.tsx", "type": "registry:ui", "target": "@ui/separator.tsx" } ] }, { "name": "snapp-sheet", "type": "registry:ui", "title": "Snapp Sheet", "description": "The shared Snapp sheet UI primitive.", "dependencies": [ "lucide-react", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-button", "@snapp/snapp-portal-container", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/sheet.tsx", "type": "registry:ui", "target": "@ui/sheet.tsx" } ] }, { "name": "snapp-sidebar", "type": "registry:ui", "title": "Snapp Sidebar", "description": "The shared Snapp sidebar UI primitive.", "dependencies": [ "class-variance-authority", "lucide-react", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-button", "@snapp/snapp-input", "@snapp/snapp-separator", "@snapp/snapp-sheet", "@snapp/snapp-skeleton", "@snapp/snapp-tooltip", "@snapp/snapp-use-mobile", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/sidebar.tsx", "type": "registry:ui", "target": "@ui/sidebar.tsx" } ] }, { "name": "snapp-skeleton", "type": "registry:ui", "title": "Snapp Skeleton", "description": "The required Shadcn loading primitive and accessible loading-group wrapper for layout-shaped Snapp loading states.", "registryDependencies": [ "@snapp/snapp-theme", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/skeleton.tsx", "type": "registry:ui", "target": "@ui/skeleton.tsx" } ] }, { "name": "snapp-slider", "type": "registry:ui", "title": "Snapp Slider", "description": "The shared Snapp slider UI primitive.", "dependencies": [ "radix-ui" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/slider.tsx", "type": "registry:ui", "target": "@ui/slider.tsx" } ] }, { "name": "snapp-sonner", "type": "registry:ui", "title": "Snapp Sonner", "description": "The shared Snapp sonner UI primitive.", "dependencies": [ "lucide-react", "next-themes", "sonner" ], "files": [ { "path": "registry/radix-nova/ui/sonner.tsx", "type": "registry:ui", "target": "@ui/sonner.tsx" } ] }, { "name": "snapp-spinner", "type": "registry:ui", "title": "Snapp Spinner", "description": "The shared Snapp spinner UI primitive.", "dependencies": [ "lucide-react" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/spinner.tsx", "type": "registry:ui", "target": "@ui/spinner.tsx" } ] }, { "name": "snapp-switch", "type": "registry:ui", "title": "Snapp Switch", "description": "The shared Snapp switch UI primitive.", "dependencies": [ "radix-ui" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/switch.tsx", "type": "registry:ui", "target": "@ui/switch.tsx" } ] }, { "name": "snapp-table", "type": "registry:ui", "title": "Snapp Table", "description": "The shared Snapp table UI primitive.", "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/table.tsx", "type": "registry:ui", "target": "@ui/table.tsx" } ] }, { "name": "snapp-tabs", "type": "registry:ui", "title": "Snapp Tabs", "description": "The shared Snapp tabs UI primitive.", "dependencies": [ "class-variance-authority", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/tabs.tsx", "type": "registry:ui", "target": "@ui/tabs.tsx" } ] }, { "name": "snapp-textarea", "type": "registry:ui", "title": "Snapp Textarea", "description": "The shared Snapp textarea UI primitive.", "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/textarea.tsx", "type": "registry:ui", "target": "@ui/textarea.tsx" } ] }, { "name": "snapp-toggle", "type": "registry:ui", "title": "Snapp Toggle", "description": "The shared Snapp toggle UI primitive.", "dependencies": [ "class-variance-authority", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/toggle.tsx", "type": "registry:ui", "target": "@ui/toggle.tsx" } ] }, { "name": "snapp-toggle-group", "type": "registry:ui", "title": "Snapp Toggle Group", "description": "The shared Snapp toggle-group UI primitive.", "dependencies": [ "class-variance-authority", "radix-ui" ], "registryDependencies": [ "@snapp/snapp-toggle", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/toggle-group.tsx", "type": "registry:ui", "target": "@ui/toggle-group.tsx" } ] }, { "name": "snapp-tooltip", "type": "registry:ui", "title": "Snapp Tooltip", "description": "The shared Snapp tooltip UI primitive.", "dependencies": [ "radix-ui" ], "registryDependencies": [ "@snapp/snapp-portal-container", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/ui/tooltip.tsx", "type": "registry:ui", "target": "@ui/tooltip.tsx" } ] }, { "name": "snapp-ui-foundation", "type": "registry:component", "title": "Snapp UI Foundation", "description": "Installs the complete canonical Snapp Shadcn UI primitive set and theme for a clean consumer refresh.", "registryDependencies": [ "@snapp/snapp-theme", "@snapp/snapp-accordion", "@snapp/snapp-alert", "@snapp/snapp-alert-dialog", "@snapp/snapp-aspect-ratio", "@snapp/snapp-attachment", "@snapp/snapp-avatar", "@snapp/snapp-badge", "@snapp/snapp-breadcrumb", "@snapp/snapp-bubble", "@snapp/snapp-button", "@snapp/snapp-button-group", "@snapp/snapp-calendar", "@snapp/snapp-card", "@snapp/snapp-carousel", "@snapp/snapp-chart", "@snapp/snapp-checkbox", "@snapp/snapp-collapsible", "@snapp/snapp-combobox", "@snapp/snapp-command", "@snapp/snapp-context-menu", "@snapp/snapp-dialog", "@snapp/snapp-direction", "@snapp/snapp-drawer", "@snapp/snapp-dropdown-menu", "@snapp/snapp-empty", "@snapp/snapp-field", "@snapp/snapp-hover-card", "@snapp/snapp-input", "@snapp/snapp-input-group", "@snapp/snapp-input-otp", "@snapp/snapp-item", "@snapp/snapp-kbd", "@snapp/snapp-label", "@snapp/snapp-marker", "@snapp/snapp-menubar", "@snapp/snapp-message", "@snapp/snapp-message-scroller", "@snapp/snapp-native-select", "@snapp/snapp-navigation-menu", "@snapp/snapp-pagination", "@snapp/snapp-popover", "@snapp/snapp-progress", "@snapp/snapp-radio-group", "@snapp/snapp-resizable", "@snapp/snapp-scroll-area", "@snapp/snapp-select", "@snapp/snapp-separator", "@snapp/snapp-sheet", "@snapp/snapp-sidebar", "@snapp/snapp-skeleton", "@snapp/snapp-slider", "@snapp/snapp-sonner", "@snapp/snapp-spinner", "@snapp/snapp-switch", "@snapp/snapp-table", "@snapp/snapp-tabs", "@snapp/snapp-textarea", "@snapp/snapp-toggle", "@snapp/snapp-toggle-group", "@snapp/snapp-tooltip", "@snapp/snapp-searchable-combobox" ], "files": [ { "path": "registry/radix-nova/components/foundation/ui-foundation.ts", "type": "registry:component", "target": "@components/snapp/foundation/ui-foundation.ts" } ] }, { "name": "snapp-feature-layout", "type": "registry:component", "title": "Snapp Feature Layout", "description": "Shared feature shell, page body, and bordered surface primitives for embedded Snapps.", "registryDependencies": [ "@snapp/snapp-theme", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/components/layout/feature-layout.tsx", "type": "registry:component", "target": "@components/snapp/layout/feature-layout.tsx" } ] }, { "name": "snapp-system-status-screen", "type": "registry:component", "title": "Snapp System Status Screen", "description": "Figma-aligned shell status screen for operational errors and subscription-required access states.", "registryDependencies": [ "@snapp/snapp-theme", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/components/system/system-status-screen.tsx", "type": "registry:component", "target": "@components/snapp/system/system-status-screen.tsx" } ] }, { "name": "snapp-filter-controls", "type": "registry:component", "title": "Snapp Filter Controls", "description": "Figma-aligned filter menu surface and removable active-filter pills with portal-safe interaction detection.", "dependencies": [ "lucide-react" ], "registryDependencies": [ "@snapp/snapp-theme", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/components/filters/filter-controls.tsx", "type": "registry:component", "target": "@components/snapp/filters/filter-controls.tsx" } ] }, { "name": "snapp-searchable-combobox", "type": "registry:component", "title": "Snapp Searchable Combobox", "description": "Controlled, searchable single-select control with canonical Snapp styling and host-safe overlay behavior.", "registryDependencies": [ "@snapp/snapp-combobox", "@snapp/snapp-theme", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/components/forms/searchable-combobox.tsx", "type": "registry:component", "target": "@components/snapp/forms/searchable-combobox.tsx" } ] }, { "name": "snapp-landing-card", "type": "registry:component", "title": "Snapp Landing Card", "description": "Figma-aligned landing card for catalogue and knowledge-base entry points.", "registryDependencies": [ "@snapp/snapp-theme", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/components/catalogue/landing-card.tsx", "type": "registry:component", "target": "@components/snapp/catalogue/landing-card.tsx" } ] }, { "name": "snapp-landing-skeleton", "type": "registry:component", "title": "Snapp Landing Skeleton", "description": "Accessible loading skeleton for the shared Snapp hero, search, and catalogue-card layout.", "registryDependencies": [ "@snapp/snapp-skeleton", "@snapp/snapp-theme", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/components/catalogue/landing-skeleton.tsx", "type": "registry:component", "target": "@components/snapp/catalogue/landing-skeleton.tsx" } ] }, { "name": "snapp-feature-breadcrumb", "type": "registry:component", "title": "Snapp Feature Breadcrumb", "description": "Figma-aligned pill breadcrumb with clickable ancestors and an accessible current-page state.", "dependencies": [ "lucide-react" ], "registryDependencies": [ "@snapp/snapp-breadcrumb", "@snapp/snapp-theme", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/components/navigation/feature-breadcrumb.tsx", "type": "registry:component", "target": "@components/snapp/navigation/feature-breadcrumb.tsx" } ] }, { "name": "snapp-catalogue-hero", "type": "registry:component", "title": "Snapp Catalogue Hero", "description": "Shared responsive catalogue hero with title, supporting copy, search form, and entry-card region.", "dependencies": [ "lucide-react" ], "registryDependencies": [ "@snapp/snapp-theme", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/components/catalogue/catalogue-hero.tsx", "type": "registry:component", "target": "@components/snapp/catalogue/catalogue-hero.tsx" } ] }, { "name": "snapp-catalogue-result-card", "type": "registry:component", "title": "Snapp Catalogue Result Card", "description": "Shared bordered result card for knowledge articles and Service Catalogue Items.", "dependencies": [ "lucide-react" ], "registryDependencies": [ "@snapp/snapp-theme", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/components/catalogue/catalogue-result-card.tsx", "type": "registry:component", "target": "@components/snapp/catalogue/catalogue-result-card.tsx" } ] }, { "name": "snapp-help-article-accordion", "type": "registry:component", "title": "Snapp Help Article Accordion", "description": "Single-expand help-article accordion that loads fully collapsed unless a default article is explicitly provided.", "registryDependencies": [ "@snapp/snapp-accordion", "@snapp/snapp-theme", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/components/catalogue/help-article-accordion.tsx", "type": "registry:component", "target": "@components/snapp/catalogue/help-article-accordion.tsx" } ] }, { "name": "snapp-catalogue-core", "type": "registry:component", "title": "Snapp Catalogue Core", "description": "Complete shared UI foundation for catalogue and knowledge-base Snapps.", "registryDependencies": [ "@snapp/snapp-catalogue-hero", "@snapp/snapp-catalogue-result-card", "@snapp/snapp-feature-breadcrumb", "@snapp/snapp-feature-layout", "@snapp/snapp-feature-parameters", "@snapp/snapp-filter-controls", "@snapp/snapp-help-article-accordion", "@snapp/snapp-landing-card", "@snapp/snapp-landing-skeleton", "@snapp/snapp-search-utils" ], "files": [ { "path": "registry/radix-nova/components/catalogue/catalogue-core.ts", "type": "registry:component", "target": "@components/snapp/catalogue/catalogue-core.ts" } ] }, { "name": "snapp-drag-feedback", "type": "registry:component", "title": "Snapp Drag Feedback", "description": "Figma-aligned native drag preview, fixed-size insertion indicator, and status drop target for draggable Snapp interfaces.", "registryDependencies": [ "@snapp/snapp-theme", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/components/drag/drag-feedback.tsx", "type": "registry:component", "target": "@components/snapp/drag/drag-feedback.tsx" }, { "path": "registry/radix-nova/components/drag/order.svg", "type": "registry:file", "target": "@components/snapp/drag/order.svg" } ] }, { "name": "snapp-work-item-core", "type": "registry:component", "title": "Snapp Work Item Core", "description": "Shared Work OS work-item types and exact vector icons.", "registryDependencies": [ "@snapp/snapp-theme" ], "files": [ { "path": "registry/radix-nova/components/work-os/work-item.types.ts", "type": "registry:component", "target": "@components/snapp/work-os/work-item.types.ts" }, { "path": "registry/radix-nova/components/work-os/work-item-icons.tsx", "type": "registry:component", "target": "@components/snapp/work-os/work-item-icons.tsx" } ] }, { "name": "snapp-time-badge", "type": "registry:component", "title": "Snapp Time Badge", "description": "Figma-aligned Work OS duration badge with danger state.", "registryDependencies": [ "@snapp/snapp-theme", "@snapp/snapp-utils", "@snapp/snapp-work-item-core" ], "files": [ { "path": "registry/radix-nova/components/work-os/time-badge.tsx", "type": "registry:component", "target": "@components/snapp/work-os/time-badge.tsx" } ] }, { "name": "snapp-progress-meter", "type": "registry:component", "title": "Snapp Progress Meter", "description": "Figma-aligned Work OS capacity progress meter.", "registryDependencies": [ "@snapp/snapp-theme", "@snapp/snapp-utils", "@snapp/snapp-work-item-core" ], "files": [ { "path": "registry/radix-nova/components/work-os/progress-meter.tsx", "type": "registry:component", "target": "@components/snapp/work-os/progress-meter.tsx" } ] }, { "name": "snapp-work-item-card", "type": "registry:component", "title": "Snapp Work Item Card", "description": "Figma-aligned Work OS item card with fixed icon, duration, and capacity geometry.", "registryDependencies": [ "@snapp/snapp-card", "@snapp/snapp-progress-meter", "@snapp/snapp-theme", "@snapp/snapp-time-badge", "@snapp/snapp-utils", "@snapp/snapp-work-item-core" ], "files": [ { "path": "registry/radix-nova/components/work-os/work-item-card.tsx", "type": "registry:component", "target": "@components/snapp/work-os/work-item-card.tsx" } ] } ] }