UNPKG

@upstart.gg/sdk

Version:

You can test the CLI without recompiling by running:

372 lines (370 loc) • 10.4 kB
import { StringEnum } from "../../utils/string-enum.js"; import { defineBrickManifest } from "../../brick-manifest.js"; import { defineProps } from "../props/helpers.js"; import { urlOrPageId } from "../props/string.js"; import { image } from "../props/image.js"; import { textContent } from "../props/text.js"; import { shadow } from "../props/effects.js"; import { boolean } from "../props/boolean.js"; import { colorPreset } from "../props/color-preset.js"; import { tags } from "../props/tags.js"; import { toLLMSchema } from "../../utils/llm.js"; import { Type } from "@sinclair/typebox"; import { VscLayoutPanelOff } from "react-icons/vsc"; //#region src/shared/bricks/manifests/navbar.manifest.ts const manifest = defineBrickManifest({ type: "navbar", name: "Navbar", category: "layout", description: "A navigation bar with logo and navigation", aiInstructions: "This brick should be used on most sites/pages. It must be placed on its own section.", isGlobalBrick: true, duplicatable: false, resizable: false, movable: false, hideInLibrary: true, staticClasses: "flex-grow", defaultWidth: { mobile: "100%" }, defaultHeight: { mobile: "60px", desktop: "60px" }, icon: VscLayoutPanelOff, iconClassName: "rotate-180", props: defineProps({ colorPreset: Type.Optional(colorPreset({ title: "Color", default: { color: "primary-500" }, examples: [ { color: "primary-500" }, { color: "neutral-900" }, { color: "secondary-200" } ] })), brand: Type.Optional(textContent({ title: "Brand name", default: "Acme Inc.", disableSizing: true, "ai:instructions": "The brand name of the website, for example the company name. Please provide it even if optional.", metadata: { category: "content" }, examples: [ "Acme Inc.", "TechCorp Solutions", "ShopEasy", "Bella Vista" ] })), logo: Type.Optional(image({ title: "Logo", "ui:show-img-search": false, "ui:no-object-options": true, "ui:no-dynamic": true, "ui:placeholder": "https://example.com/logo.png", metadata: { category: "content" }, "ai:hidden": true })), hideBrand: Type.Optional(boolean("Hide brand name", void 0, { "ai:hidden": true, metadata: { filter: (manifestProps, formData) => { return !!formData.logo; } } })), linksTagsFilter: Type.Optional(tags({ title: "Pages tags", description: "Filter pages links in the navbar by tags. Only pages with these tags will be shown.", default: ["navbar"], metadata: { category: "content" }, examples: [ ["navbar", "main"], ["top-menu"], ["important-link", "navbar"] ] })), staticNavItems: Type.Optional(Type.Array(Type.Object({ urlOrPageId: urlOrPageId(), label: Type.Optional(Type.String({ title: "Label" })) }), { title: "Static links", description: "Additional static navigation links to show in the navbar", "ai:instructions": "Don't include pages already included by the tags filter.", default: [], metadata: { category: "content" }, examples: [[{ urlOrPageId: "http://example.com/", label: "Other site" }, { urlOrPageId: "https://docs.example.com/", label: "External docs" }], [{ urlOrPageId: "https://www.amazon.com/our-brand", label: "Buy our brand on Amazon" }]] })), linksPosition: Type.Optional(StringEnum([ "left", "center", "right" ], { enumNames: [ "Left", "Center", "Right" ], title: "Links position", default: "right", "ui:responsive": "desktop" })), shadow: Type.Optional(shadow()) }, { noAlignSelf: true, noGrow: true }) }); const navbarSchemaPropsLLM = toLLMSchema(manifest.props); const examples = [ { description: "Corporate technology company navbar featuring company logo with right-aligned navigation links filtered by navbar and featured tags", type: "navbar", props: { logo: { src: "https://via.placeholder.com/120x40.png?text=TechCorp", alt: "TechCorp Solutions logo" }, linksPosition: "right", linksTagsFilter: ["navbar", "featured"] } }, { description: "Dark-themed professional navbar with centered brand text and navigation, including external site link for service companies", type: "navbar", props: { brand: "TechCorp Solutions", linksPosition: "center", linksTagsFilter: ["navbar", "featured"], staticNavItems: [{ urlOrPageId: "http://example.com/", label: "Other site" }] } }, { description: "E-commerce store navbar with primary blue branding, medium shadow effect, and right-aligned cart/account links for online shopping sites", type: "navbar", props: { brand: "ShopEasy", colorPreset: { color: "primary-500" }, linksPosition: "right", linksTagsFilter: ["main", "shop"], shadow: "shadow-md", staticNavItems: [{ urlOrPageId: "cart", label: "Cart" }, { urlOrPageId: "account", label: "Account" }] } }, { description: "Restaurant navbar with logo and hidden brand text, featuring secondary color scheme and left-aligned navigation with reservation booking and phone contact", type: "navbar", props: { logo: { src: "https://via.placeholder.com/100x50.png?text=Bella+Vista", alt: "Bella Vista Restaurant logo" }, brand: "Bella Vista", hideBrand: true, linksPosition: "left", linksTagsFilter: ["navbar"], colorPreset: { color: "secondary-200" }, staticNavItems: [{ urlOrPageId: "reservations", label: "Reservations" }, { urlOrPageId: "tel:+1234567890", label: "Call Us" }] } }, { description: "Clean minimalist design navbar with neutral light background, centered navigation links, and subtle shadow for creative agencies and design studios", type: "navbar", props: { brand: "Minimal Studio", colorPreset: { color: "neutral-100" }, linksPosition: "center", linksTagsFilter: ["main"], shadow: "shadow-sm" } }, { description: "Creative portfolio navbar with dark neutral background, compact logo, and external social media links to showcase professional work and attract clients", type: "navbar", props: { logo: { src: "https://via.placeholder.com/80x40.png?text=Portfolio", alt: "Creative Portfolio logo" }, brand: "Creative Portfolio", colorPreset: { color: "neutral-900" }, linksPosition: "right", linksTagsFilter: ["portfolio", "main"], staticNavItems: [ { urlOrPageId: "https://dribbble.com/mywork", label: "Dribbble" }, { urlOrPageId: "https://behance.net/mywork", label: "Behance" }, { urlOrPageId: "contact", label: "Hire Me" } ] } }, { description: "Digital marketing agency navbar with horizontal gradient background, large shadow, and external consultation booking integration for lead generation", type: "navbar", props: { brand: "Digital Agency", colorPreset: { color: "primary-600", gradientDirection: "bg-gradient-to-r" }, linksPosition: "right", linksTagsFilter: ["services", "navbar"], shadow: "shadow-lg", staticNavItems: [{ urlOrPageId: "https://calendar.com/book", label: "Book Consultation" }, { urlOrPageId: "case-studies", label: "Case Studies" }] } }, { description: "SaaS application navbar with accent color scheme, company logo, and essential user authentication links for software platforms", type: "navbar", props: { logo: { src: "https://via.placeholder.com/120x35.png?text=CloudApp", alt: "CloudApp SaaS logo" }, brand: "CloudApp", colorPreset: { color: "accent-500" }, linksPosition: "right", linksTagsFilter: ["features", "navbar"], staticNavItems: [ { urlOrPageId: "pricing", label: "Pricing" }, { urlOrPageId: "login", label: "Login" }, { urlOrPageId: "signup", label: "Sign Up" } ] } }, { description: "Nonprofit organization navbar with warm accent color, centered navigation, and donation call-to-action links for charitable foundations", type: "navbar", props: { brand: "Hope Foundation", colorPreset: { color: "accent-400" }, linksPosition: "center", linksTagsFilter: ["about", "programs"], shadow: "shadow-md", staticNavItems: [{ urlOrPageId: "donate", label: "Donate Now" }, { urlOrPageId: "volunteer", label: "Volunteer" }] } }, { description: "Professional law firm navbar with dark authoritative styling, professional logo, and client consultation contact information for legal services", type: "navbar", props: { logo: { src: "https://via.placeholder.com/110x45.png?text=LawFirm", alt: "Professional Law Firm logo" }, brand: "Smith & Associates", colorPreset: { color: "neutral-800" }, linksPosition: "right", linksTagsFilter: ["practice-areas", "navbar"], staticNavItems: [{ urlOrPageId: "consultation", label: "Free Consultation" }, { urlOrPageId: "tel:+1234567890", label: "(123) 456-7890" }] } }, { description: "Event management company navbar with bold primary red gradient background, left-aligned navigation, and ticket purchasing links for entertainment venues", type: "navbar", props: { brand: "Event Masters", colorPreset: { color: "primary-500", gradientDirection: "bg-gradient-to-br" }, linksPosition: "left", linksTagsFilter: ["events", "upcoming"], shadow: "shadow-xl", staticNavItems: [{ urlOrPageId: "tickets", label: "Buy Tickets" }, { urlOrPageId: "venues", label: "Venues" }] } }, { description: "Fitness studio navbar with secondary purple color scheme, visible brand name alongside logo, and centered class booking navigation for health and wellness businesses", type: "navbar", props: { logo: { src: "https://via.placeholder.com/90x50.png?text=FitStudio", alt: "Fitness Studio logo" }, brand: "Peak Fitness", hideBrand: false, colorPreset: { color: "secondary-600" }, linksPosition: "center", linksTagsFilter: ["classes", "membership"], staticNavItems: [ { urlOrPageId: "book-class", label: "Book Class" }, { urlOrPageId: "membership", label: "Join Now" }, { urlOrPageId: "trainers", label: "Personal Training" } ] } } ]; //#endregion export { examples, manifest, navbarSchemaPropsLLM }; //# sourceMappingURL=navbar.manifest.js.map