{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { ComponentType, ReactNode, SVGProps } from 'react';\n\n/**\n * Brand icon shape that mirrors a lucide-react icon component. Consumers\n * pass `Link2` / `Package` / `CreditCard` etc. directly; we render it\n * with the canonical color + stroke.\n */\nexport type BrandIcon = ComponentType<SVGProps<SVGSVGElement> & { strokeWidth?: number }>;\n\nexport interface NavLink {\n  href: string;\n  label: string;\n}\n\nexport interface FooterColumn {\n  title: string;\n  links: NavLink[];\n}\n\nexport interface MarketingNavProps {\n  /**\n   * Rendered brand icon element (e.g. `<Link2 className=\"h-6 w-6 text-primary\" />`).\n   * Pre-rendered as ReactNode because MarketingNav is a Client Component\n   * and Next App Router forbids passing function components across the\n   * Server → Client boundary. The consumer (which is a Server Component\n   * layout) renders the icon itself with the canonical classes.\n   *\n   * Canonical classes: `h-6 w-6 text-primary` for the navbar.\n   */\n  brandIcon: ReactNode;\n  /** Product wordmark (e.g. \"LinkSnap\"). */\n  brandName: string;\n  /** Override the default `/features /pricing /docs` set. */\n  navLinks?: NavLink[];\n  /** Path to the home page; defaults to \"/\". */\n  homeHref?: string;\n  /** Path to the login route; defaults to \"/login\". Pass null to hide. */\n  loginHref?: string | null;\n  /** Path to the CTA; defaults to \"/signup\". */\n  ctaHref?: string;\n  /** CTA label; defaults to \"Get Started\". */\n  ctaLabel?: string;\n  /**\n   * Label on the login link; defaults to \"Log in\".\n   *\n   * Exists so a product with a translated marketing site can render the\n   * whole navbar in one language. Without it the only escape was\n   * `rightSlot`, which means rebuilding the login + CTA pair by hand and\n   * losing the family chrome this component exists to guarantee.\n   */\n  loginLabel?: string;\n  /**\n   * Accessible name for the mobile menu toggle; defaults to\n   * \"Toggle navigation menu\". A screen-reader user on an Indonesian page\n   * should not be read an English control name.\n   */\n  menuLabel?: string;\n  /**\n   * Small controls rendered immediately BEFORE the login link — the\n   * currency picker, and a language one where a product has it.\n   *\n   * Separate from `rightSlot` because the two answer different questions.\n   * `rightSlot` replaces the login + CTA pair, so using it to hang a\n   * currency toggle off the navbar means every product re-implements the\n   * chrome this component exists to keep identical — and then drifts.\n   * This one is additive: the defaults stay exactly where they are.\n   *\n   * On a phone it renders in a thin bar ABOVE the header, mirroring the\n   * footer's preferences row — not inside the menu panel, because a choice\n   * behind a tap is as buried as one behind a Settings page, and not beside\n   * the hamburger, which crowded the header. Desktop keeps it in the nav\n   * cluster; each placement is hidden where the other applies, so the slot\n   * is never visible twice.\n   */\n  localeSlot?: ReactNode;\n  /**\n   * What the phone bar shows instead of `localeSlot`.\n   *\n   * The bar was rendering the navbar's compact control cluster, which reads\n   * as two unexplained widgets floating above the header. bang asked for it\n   * to be the footer's preferences row instead — an uppercase label, the\n   * same 12px muted type, the currency pushed to the far edge.\n   *\n   * Pass the row's CHILDREN, not a wrapper: the bar is the flex container\n   * and supplies the typography, so `ms-auto` on the last child reaches the\n   * real right edge. A wrapper div would collapse to its content width and\n   * strand it mid-row.\n   *\n   * Falls back to `localeSlot`, so a product that has not opted in keeps\n   * exactly the 0.7.0 behaviour.\n   */\n  localeBar?: ReactNode;\n  /**\n   * Replace the right-hand login + CTA pair entirely. Useful for the\n   * portal-style \"Open dashboard\" single button some products use.\n   */\n  rightSlot?: ReactNode;\n}\n\nexport interface MarketingFooterProps {\n  /**\n   * Rendered brand icon element. Canonical classes for the footer:\n   * `h-5 w-5 text-primary`. See MarketingNavProps.brandIcon for the\n   * server/client boundary rationale.\n   */\n  brandIcon: ReactNode;\n  brandName: string;\n  /** One-line tagline shown under the brand block. */\n  brandTagline?: string;\n  /**\n   * Override the default three columns (Product / Company / Legal).\n   * If omitted, the locked defaults from the linksnap anchor are used.\n   */\n  columns?: FooterColumn[];\n  /**\n   * Bottom-row copyright suffix; defaults to \"part of the Forjio family.\"\n   * The \"© YEAR PT Forjio Teknologi Indonesia.\" part is always rendered.\n   */\n  copyrightSuffix?: string;\n  /**\n   * Override the locked PT Forjio address block. Most products should\n   * leave this alone — it's the single legal entity for all of them.\n   */\n  company?: {\n    name: string;\n    address: ReactNode;\n    phoneLabel: string;\n    phoneHref: string;\n    email: string;\n  };\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}