@mdxui/named 6.4.0 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/index.d.ts +4 -52
- package/dist/components/index.js +242 -621
- package/dist/components/index.js.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.js +243 -622
- package/dist/index.js.map +1 -1
- package/dist/schemas/index.d.ts +2 -10
- package/dist/schemas/index.js +3 -73
- package/dist/schemas/index.js.map +1 -1
- package/dist/shared/index.d.ts +46 -35
- package/dist/shared/index.js +99 -208
- package/dist/shared/index.js.map +1 -1
- package/dist/styles.css +507 -13
- package/dist/view/index.d.ts +14 -58
- package/dist/view/index.js +906 -668
- package/dist/view/index.js.map +1 -1
- package/package.json +7 -6
- package/dist/problem-B2-XszSB.d.ts +0 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/schemas/index.ts"],"sourcesContent":["/**\n * Pure-Zod schemas for @mdxui/named section components.\n *\n * This subpath has NO React, no @mdxui/primitives, and no next/* imports —\n * consumers (e.g. dot-do/named-agents) can validate prop data at runtime\n * without pulling Radix, React, or the rest of the UI tree into their build.\n *\n * Each `XxxPropsSchema` is annotated as `z.ZodType<XxxProps>` and cast back\n * (annotate-and-cast pattern) so any future drift between the TS interface\n * and the Zod schema is caught at typecheck — without triggering the\n * variance issues that `satisfies` raises on function / ReactNode fields.\n *\n * Authoring reference: `packages/mdxui/src/zod.ts`.\n * Function / ReactNode handling reference: `packages/mdxui/src/ui/shell/shell.ts`.\n */\nimport { z } from 'zod'\nimport type { IconType } from 'react-icons'\n\n// Re-export the existing interfaces type-only — type-only erases at build,\n// so this entry stays runtime-clean (only `zod` survives in the JS output).\nexport type { HeroProps } from '../components/hero/hero'\nexport type { FAQItem, FAQProps } from '../components/faq/faq'\nexport type { FeatureItem, Feature, FeaturesProps } from '../components/features/features'\nexport type { PricingFeature, PricingProps } from '../components/pricing/pricing'\nexport type { PricingTierFeature, PricingTier, PricingTiersProps } from '../components/pricing/pricing-tiers'\nexport type { CTAButton, CTAProps } from '../components/cta/cta'\nexport type { FormField, ContactProps } from '../components/contact/contact'\nexport type { WorkflowItem, ProblemProps } from '../components/problem/problem'\nexport type { IntegrationNode, AnimationConfig, IntegrationProps } from '../components/integration/integration'\nexport type { NavLink, NavigationProps } from '../components/navigation/navigation'\nexport type { SocialLink, QuickLink, FooterProps } from '../components/footer/footer'\n\n// Import types for the annotate-and-cast assertions below.\nimport type { HeroProps } from '../components/hero/hero'\nimport type { FAQItem, FAQProps } from '../components/faq/faq'\nimport type { FeatureItem, Feature, FeaturesProps } from '../components/features/features'\nimport type { PricingFeature, PricingProps } from '../components/pricing/pricing'\nimport type { PricingTierFeature, PricingTier, PricingTiersProps } from '../components/pricing/pricing-tiers'\nimport type { CTAButton, CTAProps } from '../components/cta/cta'\nimport type { FormField, ContactProps } from '../components/contact/contact'\nimport type { WorkflowItem, ProblemProps } from '../components/problem/problem'\nimport type { IntegrationNode, AnimationConfig, IntegrationProps } from '../components/integration/integration'\nimport type { NavLink, NavigationProps } from '../components/navigation/navigation'\nimport type { SocialLink, QuickLink, FooterProps } from '../components/footer/footer'\n\n// =============================================================================\n// Hero\n// =============================================================================\n\nexport const HeroPropsSchema: z.ZodType<HeroProps> = z.object({\n badgeEmoji: z.string().optional(),\n badgeText: z.string().optional(),\n badgeHref: z.string().optional(),\n heading: z.string().optional(),\n description: z.string().optional(),\n ctaText: z.string().optional(),\n ctaHref: z.string().optional(),\n ctaVariant: z.enum(['default', 'secondary', 'outline', 'ghost']).optional(),\n rightImageSrc: z.string().optional(),\n rightImageAlt: z.string().optional(),\n rightImageSizes: z.string().optional(),\n showIconOverlay: z.boolean().optional(),\n marqueeTitle: z.string().optional(),\n marqueeImages: z.array(z.string()).optional(),\n className: z.string().optional(),\n}).describe('Hero section props') as z.ZodType<HeroProps>\n\n// =============================================================================\n// FAQ\n// =============================================================================\n\nexport const FAQItemSchema: z.ZodType<FAQItem> = z.object({\n question: z.string(),\n answer: z.string(),\n}).describe('FAQ item') as z.ZodType<FAQItem>\n\nexport const FAQPropsSchema: z.ZodType<FAQProps> = z.object({\n heading: z.string().optional(),\n faqs: z.array(FAQItemSchema).optional(),\n backgroundColor: z.string().optional(),\n className: z.string().optional(),\n}).describe('FAQ section props') as z.ZodType<FAQProps>\n\n// =============================================================================\n// Features\n// =============================================================================\n\nexport const FeatureItemSchema: z.ZodType<FeatureItem> = z.object({\n text: z.string(),\n}).describe('Feature item (bullet)') as z.ZodType<FeatureItem>\n\nexport const FeatureSchema: z.ZodType<Feature> = z.object({\n title: z.string(),\n description: z.string(),\n items: z.array(FeatureItemSchema),\n code: z.string(),\n badge: z.string(),\n}).describe('Feature card') as z.ZodType<Feature>\n\nexport const FeaturesPropsSchema: z.ZodType<FeaturesProps> = z.object({\n heading: z.string().optional(),\n description: z.string().optional(),\n features: z.array(FeatureSchema).optional(),\n className: z.string().optional(),\n}).describe('Features section props') as z.ZodType<FeaturesProps>\n\n// =============================================================================\n// Pricing (single-tier)\n// =============================================================================\n\nexport const PricingFeatureSchema: z.ZodType<PricingFeature> = z.object({\n text: z.string(),\n}).describe('Pricing feature bullet') as z.ZodType<PricingFeature>\n\nexport const PricingPropsSchema: z.ZodType<PricingProps> = z.object({\n heading: z.string().optional(),\n subheading: z.string().optional(),\n price: z.string().optional(),\n priceUnit: z.string().optional(),\n trialText: z.string().optional(),\n ctaText: z.string().optional(),\n ctaHref: z.string().optional(),\n featuresHeading: z.string().optional(),\n features: z.array(PricingFeatureSchema).optional(),\n backgroundColor: z.string().optional(),\n securityNote: z.string().optional(),\n className: z.string().optional(),\n}).describe('Single-tier pricing section props') as z.ZodType<PricingProps>\n\n// =============================================================================\n// PricingTiers (multi-tier)\n// =============================================================================\n\nexport const PricingTierFeatureSchema: z.ZodType<PricingTierFeature> = z.object({\n text: z.string(),\n}).describe('Pricing tier feature bullet') as z.ZodType<PricingTierFeature>\n\nexport const PricingTierSchema: z.ZodType<PricingTier> = z.object({\n title: z.string(),\n description: z.string(),\n price: z.string(),\n priceUnit: z.string(),\n ctaText: z.string(),\n ctaVariant: z.enum(['primary', 'secondary']).optional(),\n ctaHref: z.string().optional(),\n features: z.array(PricingTierFeatureSchema),\n image: z.string().optional(),\n imageAlt: z.string().optional(),\n featured: z.boolean().optional(),\n}).describe('Pricing tier card') as z.ZodType<PricingTier>\n\nexport const PricingTiersPropsSchema: z.ZodType<PricingTiersProps> = z.object({\n heading: z.string().optional(),\n subheading: z.string().optional(),\n tiers: z.array(PricingTierSchema).optional(),\n backgroundColor: z.string().optional(),\n securityNote: z.string().optional(),\n className: z.string().optional(),\n}).describe('Multi-tier pricing section props') as z.ZodType<PricingTiersProps>\n\n// Backwards-friendly aliases matching the issue's vocabulary.\nexport const Pricing1PropsSchema = PricingPropsSchema\nexport const Pricing2PropsSchema = PricingTiersPropsSchema\n\n// =============================================================================\n// CTA\n// =============================================================================\n\nexport const CTAButtonSchema: z.ZodType<CTAButton> = z.object({\n text: z.string(),\n href: z.string(),\n variant: z.enum(['primary', 'secondary']).optional(),\n showArrow: z.boolean().optional(),\n}).describe('CTA button') as z.ZodType<CTAButton>\n\nexport const CTAPropsSchema: z.ZodType<CTAProps> = z.object({\n heading: z.string().optional(),\n subheading: z.string().optional(),\n buttons: z.array(CTAButtonSchema).optional(),\n backgroundColor: z.enum(['light', 'blue', 'green', 'purple', 'orange']).optional(),\n className: z.string().optional(),\n}).describe('CTA section props') as z.ZodType<CTAProps>\n\n// =============================================================================\n// Contact\n// =============================================================================\n\nexport const FormFieldSchema: z.ZodType<FormField> = z.object({\n id: z.string(),\n label: z.string(),\n type: z.enum(['text', 'email', 'tel', 'textarea']),\n placeholder: z.string().optional(),\n required: z.boolean().optional(),\n}).describe('Contact form field') as z.ZodType<FormField>\n\nexport const ContactPropsSchema: z.ZodType<ContactProps> = z.object({\n heading: z.string().optional(),\n subheading: z.string().optional(),\n fields: z.array(FormFieldSchema).optional(),\n submitButtonText: z.string().optional(),\n successMessage: z.string().optional(),\n errorMessage: z.string().optional(),\n // Non-translating: function fields are accepted but not deeply validated.\n onSubmit: z.function().optional(),\n backgroundColor: z.string().optional(),\n className: z.string().optional(),\n}).describe('Contact section props') as z.ZodType<ContactProps>\n\n// =============================================================================\n// Problem\n// =============================================================================\n\nexport const WorkflowItemSchema: z.ZodType<WorkflowItem> = z.object({\n // Non-translating: react-icons IconType is a function — round-trip via z.custom.\n icon: z.custom<IconType>((v) => typeof v === 'function'),\n label: z.string(),\n}).describe('Workflow chip') as z.ZodType<WorkflowItem>\n\nexport const ProblemPropsSchema: z.ZodType<ProblemProps> = z.object({\n heading: z.string().optional(),\n headingHighlight: z.string().optional(),\n workflows: z.array(WorkflowItemSchema).optional(),\n subheading: z.string().optional(),\n subheadingHighlight: z.string().optional(),\n highlightColor: z.string().optional(),\n marqueeDuration: z.string().optional(),\n marqueeGap: z.string().optional(),\n backgroundColor: z.string().optional(),\n className: z.string().optional(),\n}).describe('Problem section props') as z.ZodType<ProblemProps>\n\n// =============================================================================\n// Integration\n// =============================================================================\n\nexport const IntegrationNodeSchema: z.ZodType<IntegrationNode> = z.object({\n type: z.enum(['image', 'icon', 'component']),\n // Non-translating: string | React.ReactNode — accept anything, runtime user decides.\n content: z.union([z.string(), z.any()]),\n alt: z.string().optional(),\n className: z.string().optional(),\n}).describe('Integration node (left/right of the beam)') as z.ZodType<IntegrationNode>\n\nexport const AnimationConfigSchema: z.ZodType<AnimationConfig> = z.object({\n startYOffset: z.number().optional(),\n endYOffset: z.number().optional(),\n curvature: z.number().optional(),\n duration: z.number().optional(),\n reverse: z.boolean().optional(),\n}).describe('AnimatedBeam configuration') as z.ZodType<AnimationConfig>\n\nexport const IntegrationPropsSchema: z.ZodType<IntegrationProps> = z.object({\n title: z.string().optional(),\n description: z.string().optional(),\n buttonText: z.string().optional(),\n buttonHref: z.string().optional(),\n leftNode: IntegrationNodeSchema,\n rightNode: IntegrationNodeSchema,\n beamAnimations: z.array(AnimationConfigSchema).optional(),\n gridPatternWidth: z.number().optional(),\n gridPatternHeight: z.number().optional(),\n maxWidth: z.enum(['sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl', '6xl', '7xl']).optional(),\n className: z.string().optional(),\n contentOrder: z.enum(['left', 'right']).optional(),\n}).describe('Integration section props') as z.ZodType<IntegrationProps>\n\n// =============================================================================\n// Navigation\n// =============================================================================\n\nexport const NavLinkSchema: z.ZodType<NavLink> = z.object({\n label: z.string(),\n href: z.string(),\n}).describe('Nav link') as z.ZodType<NavLink>\n\nexport const NavigationPropsSchema: z.ZodType<NavigationProps> = z.object({\n // Non-translating: string | React.ReactNode.\n logo: z.union([z.string(), z.any()]).optional(),\n logoHref: z.string().optional(),\n links: z.array(NavLinkSchema).optional(),\n ctaText: z.string().optional(),\n ctaHref: z.string().optional(),\n ctaVariant: z.enum(['default', 'secondary', 'outline', 'ghost', 'link', 'destructive']).optional(),\n className: z.string().optional(),\n maxWidth: z.enum(['sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl', '6xl', '7xl', 'full']).optional(),\n sticky: z.boolean().optional(),\n showScrollEffect: z.boolean().optional(),\n}).describe('Navigation section props') as z.ZodType<NavigationProps>\n\n// =============================================================================\n// Footer\n// =============================================================================\n\nexport const SocialLinkSchema: z.ZodType<SocialLink> = z.object({\n href: z.string(),\n // Non-translating: react-icons IconType is a function — round-trip via z.custom.\n icon: z.custom<IconType>((v) => typeof v === 'function'),\n label: z.string(),\n}).describe('Social link') as z.ZodType<SocialLink>\n\nexport const QuickLinkSchema: z.ZodType<QuickLink> = z.object({\n href: z.string(),\n label: z.string(),\n}).describe('Footer quick link') as z.ZodType<QuickLink>\n\nexport const FooterPropsSchema: z.ZodType<FooterProps> = z.object({\n logo: z.string().optional(),\n description: z.string().optional(),\n socialLinks: z.array(SocialLinkSchema).optional(),\n quickLinks: z.array(QuickLinkSchema).optional(),\n contactTitle: z.string().optional(),\n emailPlaceholder: z.string().optional(),\n // Non-translating: function field.\n onEmailSubmit: z.function().optional(),\n copyrightText: z.string().optional(),\n showThemeToggle: z.boolean().optional(),\n className: z.string().optional(),\n}).describe('Footer section props') as z.ZodType<FooterProps>\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/schemas/index.ts"],"sourcesContent":["/**\n * Pure-Zod schemas for @mdxui/named section components.\n *\n * This subpath has NO React, no @mdxui/primitives, and no next/* imports —\n * consumers (e.g. dot-do/named-agents) can validate prop data at runtime\n * without pulling Radix, React, or the rest of the UI tree into their build.\n *\n * Each `XxxPropsSchema` is annotated as `z.ZodType<XxxProps>` and cast back\n * (annotate-and-cast pattern) so any future drift between the TS interface\n * and the Zod schema is caught at typecheck — without triggering the\n * variance issues that `satisfies` raises on function / ReactNode fields.\n *\n * Authoring reference: `packages/mdxui/src/zod.ts`.\n * Function / ReactNode handling reference: `packages/mdxui/src/ui/shell/shell.ts`.\n */\nimport { z } from 'zod'\nimport type { IconType } from 'react-icons'\n\n// Re-export the existing interfaces type-only — type-only erases at build,\n// so this entry stays runtime-clean (only `zod` survives in the JS output).\nexport type { HeroProps } from '../templates/studio/components/hero/hero'\nexport type { FAQItem, FAQProps } from '../templates/studio/components/faq/faq'\nexport type { FeatureItem, Feature, FeaturesProps } from '../templates/studio/components/features/features'\nexport type { PricingFeature, PricingProps } from '../templates/studio/components/pricing/pricing'\nexport type { PricingTierFeature, PricingTier, PricingTiersProps } from '../templates/studio/components/pricing/pricing-tiers'\nexport type { CTAButton, CTAProps } from '../templates/studio/components/cta/cta'\nexport type { NavLink, NavigationProps } from '../templates/studio/components/navigation/navigation'\nexport type { SocialLink, QuickLink, FooterProps } from '../templates/studio/components/footer/footer'\n\n// Import types for the annotate-and-cast assertions below.\nimport type { HeroProps } from '../templates/studio/components/hero/hero'\nimport type { FAQItem, FAQProps } from '../templates/studio/components/faq/faq'\nimport type { FeatureItem, Feature, FeaturesProps } from '../templates/studio/components/features/features'\nimport type { PricingFeature, PricingProps } from '../templates/studio/components/pricing/pricing'\nimport type { PricingTierFeature, PricingTier, PricingTiersProps } from '../templates/studio/components/pricing/pricing-tiers'\nimport type { CTAButton, CTAProps } from '../templates/studio/components/cta/cta'\nimport type { NavLink, NavigationProps } from '../templates/studio/components/navigation/navigation'\nimport type { SocialLink, QuickLink, FooterProps } from '../templates/studio/components/footer/footer'\n\n// =============================================================================\n// Hero\n// =============================================================================\n\nexport const HeroPropsSchema: z.ZodType<HeroProps> = z.object({\n badgeEmoji: z.string().optional(),\n badgeText: z.string().optional(),\n badgeHref: z.string().optional(),\n heading: z.string().optional(),\n description: z.string().optional(),\n ctaText: z.string().optional(),\n ctaHref: z.string().optional(),\n ctaVariant: z.enum(['default', 'secondary', 'outline', 'ghost']).optional(),\n rightImageSrc: z.string().optional(),\n rightImageAlt: z.string().optional(),\n rightImageSizes: z.string().optional(),\n showIconOverlay: z.boolean().optional(),\n marqueeTitle: z.string().optional(),\n marqueeImages: z.array(z.string()).optional(),\n className: z.string().optional(),\n}).describe('Hero section props') as z.ZodType<HeroProps>\n\n// =============================================================================\n// FAQ\n// =============================================================================\n\nexport const FAQItemSchema: z.ZodType<FAQItem> = z.object({\n question: z.string(),\n answer: z.string(),\n}).describe('FAQ item') as z.ZodType<FAQItem>\n\nexport const FAQPropsSchema: z.ZodType<FAQProps> = z.object({\n heading: z.string().optional(),\n faqs: z.array(FAQItemSchema).optional(),\n backgroundColor: z.string().optional(),\n className: z.string().optional(),\n}).describe('FAQ section props') as z.ZodType<FAQProps>\n\n// =============================================================================\n// Features\n// =============================================================================\n\nexport const FeatureItemSchema: z.ZodType<FeatureItem> = z.object({\n text: z.string(),\n}).describe('Feature item (bullet)') as z.ZodType<FeatureItem>\n\nexport const FeatureSchema: z.ZodType<Feature> = z.object({\n title: z.string(),\n description: z.string(),\n items: z.array(FeatureItemSchema),\n code: z.string(),\n language: z.string().optional(),\n badge: z.string(),\n}).describe('Feature card') as z.ZodType<Feature>\n\nexport const FeaturesPropsSchema: z.ZodType<FeaturesProps> = z.object({\n heading: z.string().optional(),\n description: z.string().optional(),\n features: z.array(FeatureSchema).optional(),\n className: z.string().optional(),\n}).describe('Features section props') as z.ZodType<FeaturesProps>\n\n// =============================================================================\n// Pricing (single-tier)\n// =============================================================================\n\nexport const PricingFeatureSchema: z.ZodType<PricingFeature> = z.object({\n text: z.string(),\n}).describe('Pricing feature bullet') as z.ZodType<PricingFeature>\n\nexport const PricingPropsSchema: z.ZodType<PricingProps> = z.object({\n heading: z.string().optional(),\n subheading: z.string().optional(),\n price: z.string().optional(),\n priceUnit: z.string().optional(),\n trialText: z.string().optional(),\n ctaText: z.string().optional(),\n ctaHref: z.string().optional(),\n featuresHeading: z.string().optional(),\n features: z.array(PricingFeatureSchema).optional(),\n backgroundColor: z.string().optional(),\n securityNote: z.string().optional(),\n className: z.string().optional(),\n}).describe('Single-tier pricing section props') as z.ZodType<PricingProps>\n\n// =============================================================================\n// PricingTiers (multi-tier)\n// =============================================================================\n\nexport const PricingTierFeatureSchema: z.ZodType<PricingTierFeature> = z.object({\n text: z.string(),\n}).describe('Pricing tier feature bullet') as z.ZodType<PricingTierFeature>\n\nexport const PricingTierSchema: z.ZodType<PricingTier> = z.object({\n title: z.string(),\n description: z.string(),\n price: z.string(),\n priceUnit: z.string(),\n ctaText: z.string(),\n ctaVariant: z.enum(['primary', 'secondary']).optional(),\n ctaHref: z.string().optional(),\n features: z.array(PricingTierFeatureSchema),\n image: z.string().optional(),\n imageAlt: z.string().optional(),\n featured: z.boolean().optional(),\n}).describe('Pricing tier card') as z.ZodType<PricingTier>\n\nexport const PricingTiersPropsSchema: z.ZodType<PricingTiersProps> = z.object({\n heading: z.string().optional(),\n subheading: z.string().optional(),\n tiers: z.array(PricingTierSchema).optional(),\n backgroundColor: z.string().optional(),\n securityNote: z.string().optional(),\n className: z.string().optional(),\n}).describe('Multi-tier pricing section props') as z.ZodType<PricingTiersProps>\n\n// Backwards-friendly aliases matching the issue's vocabulary.\nexport const Pricing1PropsSchema = PricingPropsSchema\nexport const Pricing2PropsSchema = PricingTiersPropsSchema\n\n// =============================================================================\n// CTA\n// =============================================================================\n\nexport const CTAButtonSchema: z.ZodType<CTAButton> = z.object({\n text: z.string(),\n href: z.string(),\n variant: z.enum(['primary', 'secondary']).optional(),\n showArrow: z.boolean().optional(),\n}).describe('CTA button') as z.ZodType<CTAButton>\n\nexport const CTAPropsSchema: z.ZodType<CTAProps> = z.object({\n heading: z.string().optional(),\n subheading: z.string().optional(),\n buttons: z.array(CTAButtonSchema).optional(),\n backgroundColor: z.enum(['light', 'blue', 'green', 'purple', 'orange']).optional(),\n className: z.string().optional(),\n}).describe('CTA section props') as z.ZodType<CTAProps>\n\n// =============================================================================\n// Navigation\n// =============================================================================\n\nexport const NavLinkSchema: z.ZodType<NavLink> = z.object({\n label: z.string(),\n href: z.string(),\n}).describe('Nav link') as z.ZodType<NavLink>\n\nexport const NavigationPropsSchema: z.ZodType<NavigationProps> = z.object({\n // Non-translating: string | React.ReactNode.\n logo: z.union([z.string(), z.any()]).optional(),\n logoHref: z.string().optional(),\n links: z.array(NavLinkSchema).optional(),\n ctaText: z.string().optional(),\n ctaHref: z.string().optional(),\n ctaVariant: z.enum(['default', 'secondary', 'outline', 'ghost', 'link', 'accent']).optional(),\n className: z.string().optional(),\n maxWidth: z.enum(['sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl', '6xl', '7xl', 'full']).optional(),\n sticky: z.boolean().optional(),\n showScrollEffect: z.boolean().optional(),\n}).describe('Navigation section props') as z.ZodType<NavigationProps>\n\n// =============================================================================\n// Footer\n// =============================================================================\n\nexport const SocialLinkSchema: z.ZodType<SocialLink> = z.object({\n href: z.string(),\n // Non-translating: react-icons IconType is a function — round-trip via z.custom.\n icon: z.custom<IconType>((v) => typeof v === 'function'),\n label: z.string(),\n}).describe('Social link') as z.ZodType<SocialLink>\n\nexport const QuickLinkSchema: z.ZodType<QuickLink> = z.object({\n href: z.string(),\n label: z.string(),\n}).describe('Footer quick link') as z.ZodType<QuickLink>\n\nexport const FooterPropsSchema: z.ZodType<FooterProps> = z.object({\n logo: z.string().optional(),\n description: z.string().optional(),\n socialLinks: z.array(SocialLinkSchema).optional(),\n quickLinks: z.array(QuickLinkSchema).optional(),\n contactTitle: z.string().optional(),\n emailPlaceholder: z.string().optional(),\n // Non-translating: function field.\n onEmailSubmit: z.function().optional(),\n copyrightText: z.string().optional(),\n showThemeToggle: z.boolean().optional(),\n className: z.string().optional(),\n}).describe('Footer section props') as z.ZodType<FooterProps>\n"],"mappings":"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","names":[]}
|
package/dist/shared/index.d.ts
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
|
+
import * as React$1 from 'react';
|
|
2
|
+
import { ReactNode, ComponentPropsWithoutRef } from 'react';
|
|
1
3
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The named-agents baseline Button (components/ui/button.tsx) — rounded-full
|
|
7
|
+
* pills on the baseline token vocabulary: `btn-gradient-dark` ink-gradient
|
|
8
|
+
* primary, surface-raised secondary, the persona `accent` variant, and the
|
|
9
|
+
* h-12/text-base default size. The sections previously borrowed
|
|
10
|
+
* @mdxui/primitives' Button (flat bg-primary, h-9, theme radius), which is a
|
|
11
|
+
* different design language — buttons must speak the baseline tokens the
|
|
12
|
+
* `[data-dialect="named"]` envelope defines (`--color-btn-primary-*`,
|
|
13
|
+
* `--color-surface-raised`, `--color-hover`, `--color-accent-*`).
|
|
14
|
+
*
|
|
15
|
+
* Ported without cva/Radix Slot to keep the package dependency-free: variants
|
|
16
|
+
* are a plain class map, `asChild` clones the single child element (the named
|
|
17
|
+
* call sites always pass one `<a>`).
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
type ButtonVariant = 'default' | 'secondary' | 'outline' | 'ghost' | 'link' | 'accent';
|
|
21
|
+
type ButtonSize = 'default' | 'sm' | 'lg' | 'icon';
|
|
22
|
+
interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
23
|
+
variant?: ButtonVariant;
|
|
24
|
+
size?: ButtonSize;
|
|
25
|
+
asChild?: boolean;
|
|
26
|
+
}
|
|
27
|
+
declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The named-agents baseline Input (components/ui/input.tsx), verbatim on the
|
|
31
|
+
* baseline token vocabulary. Notably `h-11` and `bg-transparent` — the footer's
|
|
32
|
+
* email capture positions a `py-3` submit button inside the field, which
|
|
33
|
+
* overflows @mdxui/primitives' `h-9 bg-background` Input (the drift that broke
|
|
34
|
+
* the footer input's padding).
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
declare const Input: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & React$1.RefAttributes<HTMLInputElement>>;
|
|
3
38
|
|
|
4
39
|
interface ScrollRevealProps {
|
|
5
40
|
children: ReactNode;
|
|
@@ -13,27 +48,6 @@ interface ScrollRevealProps {
|
|
|
13
48
|
}
|
|
14
49
|
declare function ScrollReveal({ children, className, delay, direction, duration, trigger, once, margin, }: ScrollRevealProps): react_jsx_runtime.JSX.Element;
|
|
15
50
|
|
|
16
|
-
interface AnimatedBeamProps {
|
|
17
|
-
className?: string;
|
|
18
|
-
containerRef: RefObject<HTMLElement | null>;
|
|
19
|
-
fromRef: RefObject<HTMLElement | null>;
|
|
20
|
-
toRef: RefObject<HTMLElement | null>;
|
|
21
|
-
curvature?: number;
|
|
22
|
-
reverse?: boolean;
|
|
23
|
-
pathColor?: string;
|
|
24
|
-
pathWidth?: number;
|
|
25
|
-
pathOpacity?: number;
|
|
26
|
-
gradientStartColor?: string;
|
|
27
|
-
gradientStopColor?: string;
|
|
28
|
-
delay?: number;
|
|
29
|
-
duration?: number;
|
|
30
|
-
startXOffset?: number;
|
|
31
|
-
startYOffset?: number;
|
|
32
|
-
endXOffset?: number;
|
|
33
|
-
endYOffset?: number;
|
|
34
|
-
}
|
|
35
|
-
declare function AnimatedBeam({ className, containerRef, fromRef, toRef, curvature, reverse, duration, delay, pathColor, pathWidth, pathOpacity, gradientStartColor, gradientStopColor, startXOffset, startYOffset, endXOffset, endYOffset, }: AnimatedBeamProps): react_jsx_runtime.JSX.Element;
|
|
36
|
-
|
|
37
51
|
interface MarqueeProps extends ComponentPropsWithoutRef<'div'> {
|
|
38
52
|
/**
|
|
39
53
|
* Optional CSS class name to apply custom styles
|
|
@@ -68,19 +82,16 @@ declare function Marquee({ className, reverse, pauseOnHover, children, vertical,
|
|
|
68
82
|
|
|
69
83
|
interface CodeWindowProps {
|
|
70
84
|
code: string;
|
|
85
|
+
/** Shiki language id. The persona DSL is valid TypeScript — the default. */
|
|
86
|
+
language?: string;
|
|
87
|
+
/** Shiki theme: one name = fixed; a pair = follows the host `.dark` class
|
|
88
|
+
* (requires the envelope's `--shiki-dark` switch CSS). */
|
|
89
|
+
themes?: string | {
|
|
90
|
+
light: string;
|
|
91
|
+
dark: string;
|
|
92
|
+
};
|
|
71
93
|
className?: string;
|
|
72
94
|
}
|
|
73
|
-
declare function CodeWindow({ code, className }: CodeWindowProps): react_jsx_runtime.JSX.Element;
|
|
74
|
-
|
|
75
|
-
interface GridPatternProps extends React.SVGProps<SVGSVGElement> {
|
|
76
|
-
width?: number;
|
|
77
|
-
height?: number;
|
|
78
|
-
x?: number;
|
|
79
|
-
y?: number;
|
|
80
|
-
squares?: Array<[x: number, y: number]>;
|
|
81
|
-
strokeDasharray?: string;
|
|
82
|
-
className?: string;
|
|
83
|
-
}
|
|
84
|
-
declare function GridPattern({ width, height, x, y, strokeDasharray, squares, className, ...props }: GridPatternProps): react_jsx_runtime.JSX.Element;
|
|
95
|
+
declare function CodeWindow({ code, language, themes, className, }: CodeWindowProps): react_jsx_runtime.JSX.Element;
|
|
85
96
|
|
|
86
|
-
export {
|
|
97
|
+
export { Button, type ButtonProps, type ButtonSize, type ButtonVariant, CodeWindow, type CodeWindowProps, Input, Marquee, type MarqueeProps, ScrollReveal, type ScrollRevealProps };
|
package/dist/shared/index.js
CHANGED
|
@@ -1,6 +1,69 @@
|
|
|
1
|
+
// src/templates/studio/ui/button/button.tsx
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
|
|
4
|
+
// src/lib/utils.ts
|
|
5
|
+
import { clsx } from "clsx";
|
|
6
|
+
import { twMerge } from "tailwind-merge";
|
|
7
|
+
function cn(...inputs) {
|
|
8
|
+
return twMerge(clsx(inputs));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// src/templates/studio/ui/button/button.tsx
|
|
12
|
+
import { jsx } from "react/jsx-runtime";
|
|
13
|
+
var baseClasses = "inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--color-ring) disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer";
|
|
14
|
+
var variantClasses = {
|
|
15
|
+
default: "btn-gradient-dark text-(--color-btn-primary-fg) shadow-md hover:shadow-lg rounded-full",
|
|
16
|
+
secondary: "bg-(--color-surface-raised) text-(--color-fg) border border-(--color-border) shadow-sm hover:shadow-md rounded-full",
|
|
17
|
+
outline: "border border-(--color-border) bg-transparent text-(--color-fg) hover:bg-(--color-hover) rounded-full",
|
|
18
|
+
ghost: "text-(--color-fg) hover:bg-(--color-hover) rounded-full",
|
|
19
|
+
link: "text-(--color-fg) underline-offset-4 hover:underline",
|
|
20
|
+
accent: "bg-(--color-accent-strong) text-(--color-accent-fg) shadow-md hover:opacity-90 hover:shadow-lg rounded-full"
|
|
21
|
+
};
|
|
22
|
+
var sizeClasses = {
|
|
23
|
+
default: "h-12 px-6 py-3 text-base",
|
|
24
|
+
sm: "h-10 px-4 py-2 text-sm",
|
|
25
|
+
lg: "h-14 px-8 py-4 text-lg",
|
|
26
|
+
icon: "h-12 w-12"
|
|
27
|
+
};
|
|
28
|
+
var Button = React.forwardRef(
|
|
29
|
+
({ className, variant = "default", size = "default", asChild = false, children, ...props }, ref) => {
|
|
30
|
+
const classes = cn(baseClasses, variantClasses[variant], sizeClasses[size], className);
|
|
31
|
+
if (asChild && React.isValidElement(children)) {
|
|
32
|
+
const child = children;
|
|
33
|
+
return React.cloneElement(child, {
|
|
34
|
+
...props,
|
|
35
|
+
className: cn(classes, child.props.className)
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
return /* @__PURE__ */ jsx("button", { ref, className: classes, ...props, children });
|
|
39
|
+
}
|
|
40
|
+
);
|
|
41
|
+
Button.displayName = "Button";
|
|
42
|
+
|
|
43
|
+
// src/templates/studio/ui/input/input.tsx
|
|
44
|
+
import * as React2 from "react";
|
|
45
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
46
|
+
var Input = React2.forwardRef(
|
|
47
|
+
({ className, type, ...props }, ref) => {
|
|
48
|
+
return /* @__PURE__ */ jsx2(
|
|
49
|
+
"input",
|
|
50
|
+
{
|
|
51
|
+
type,
|
|
52
|
+
className: cn(
|
|
53
|
+
"flex h-11 w-full rounded-md border border-(--color-border) bg-transparent px-3 py-1 text-base transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-(--color-fg) placeholder:text-(--color-fg-muted) focus-visible:outline-none focus-visible:border-(--color-border-strong) focus-visible:ring-1 focus-visible:ring-(--color-ring) disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
54
|
+
className
|
|
55
|
+
),
|
|
56
|
+
ref,
|
|
57
|
+
...props
|
|
58
|
+
}
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
Input.displayName = "Input";
|
|
63
|
+
|
|
1
64
|
// src/shared/scroll-reveal/scroll-reveal.tsx
|
|
2
65
|
import { motion } from "motion/react";
|
|
3
|
-
import { jsx } from "react/jsx-runtime";
|
|
66
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
4
67
|
var directionVariants = {
|
|
5
68
|
up: {
|
|
6
69
|
hidden: { opacity: 0, y: 50 },
|
|
@@ -34,7 +97,7 @@ function ScrollReveal({
|
|
|
34
97
|
margin = "-100px"
|
|
35
98
|
}) {
|
|
36
99
|
if (trigger === "mount") {
|
|
37
|
-
return /* @__PURE__ */
|
|
100
|
+
return /* @__PURE__ */ jsx3(
|
|
38
101
|
motion.div,
|
|
39
102
|
{
|
|
40
103
|
initial: "hidden",
|
|
@@ -46,7 +109,7 @@ function ScrollReveal({
|
|
|
46
109
|
}
|
|
47
110
|
);
|
|
48
111
|
}
|
|
49
|
-
return /* @__PURE__ */
|
|
112
|
+
return /* @__PURE__ */ jsx3(
|
|
50
113
|
motion.div,
|
|
51
114
|
{
|
|
52
115
|
initial: "hidden",
|
|
@@ -60,133 +123,8 @@ function ScrollReveal({
|
|
|
60
123
|
);
|
|
61
124
|
}
|
|
62
125
|
|
|
63
|
-
// src/shared/animated-beam/animated-beam.tsx
|
|
64
|
-
import { useEffect, useId, useState } from "react";
|
|
65
|
-
import { motion as motion2 } from "motion/react";
|
|
66
|
-
|
|
67
|
-
// src/lib/utils.ts
|
|
68
|
-
import { clsx } from "clsx";
|
|
69
|
-
import { twMerge } from "tailwind-merge";
|
|
70
|
-
function cn(...inputs) {
|
|
71
|
-
return twMerge(clsx(inputs));
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// src/shared/animated-beam/animated-beam.tsx
|
|
75
|
-
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
76
|
-
function AnimatedBeam({
|
|
77
|
-
className,
|
|
78
|
-
containerRef,
|
|
79
|
-
fromRef,
|
|
80
|
-
toRef,
|
|
81
|
-
curvature = 0,
|
|
82
|
-
reverse = false,
|
|
83
|
-
duration = Math.random() * 3 + 4,
|
|
84
|
-
delay = 0,
|
|
85
|
-
pathColor = "gray",
|
|
86
|
-
pathWidth = 2,
|
|
87
|
-
pathOpacity = 0.2,
|
|
88
|
-
gradientStartColor = "#ffaa40",
|
|
89
|
-
gradientStopColor = "#9c40ff",
|
|
90
|
-
startXOffset = 0,
|
|
91
|
-
startYOffset = 0,
|
|
92
|
-
endXOffset = 0,
|
|
93
|
-
endYOffset = 0
|
|
94
|
-
}) {
|
|
95
|
-
const id = useId();
|
|
96
|
-
const [pathD, setPathD] = useState("");
|
|
97
|
-
const [svgDimensions, setSvgDimensions] = useState({ width: 0, height: 0 });
|
|
98
|
-
const gradientCoordinates = reverse ? {
|
|
99
|
-
x1: ["90%", "-10%"],
|
|
100
|
-
x2: ["100%", "0%"],
|
|
101
|
-
y1: ["0%", "0%"],
|
|
102
|
-
y2: ["0%", "0%"]
|
|
103
|
-
} : {
|
|
104
|
-
x1: ["10%", "110%"],
|
|
105
|
-
x2: ["0%", "100%"],
|
|
106
|
-
y1: ["0%", "0%"],
|
|
107
|
-
y2: ["0%", "0%"]
|
|
108
|
-
};
|
|
109
|
-
useEffect(() => {
|
|
110
|
-
const updatePath = () => {
|
|
111
|
-
if (containerRef.current && fromRef.current && toRef.current) {
|
|
112
|
-
const containerRect = containerRef.current.getBoundingClientRect();
|
|
113
|
-
const rectA = fromRef.current.getBoundingClientRect();
|
|
114
|
-
const rectB = toRef.current.getBoundingClientRect();
|
|
115
|
-
const svgWidth = containerRect.width;
|
|
116
|
-
const svgHeight = containerRect.height;
|
|
117
|
-
setSvgDimensions({ width: svgWidth, height: svgHeight });
|
|
118
|
-
const startX = rectA.left - containerRect.left + rectA.width / 2 + startXOffset;
|
|
119
|
-
const startY = rectA.top - containerRect.top + rectA.height / 2 + startYOffset;
|
|
120
|
-
const endX = rectB.left - containerRect.left + rectB.width / 2 + endXOffset;
|
|
121
|
-
const endY = rectB.top - containerRect.top + rectB.height / 2 + endYOffset;
|
|
122
|
-
const controlY = startY - curvature;
|
|
123
|
-
const d = `M ${startX},${startY} Q ${(startX + endX) / 2},${controlY} ${endX},${endY}`;
|
|
124
|
-
setPathD(d);
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
const resizeObserver = new ResizeObserver(() => {
|
|
128
|
-
updatePath();
|
|
129
|
-
});
|
|
130
|
-
if (containerRef.current) {
|
|
131
|
-
resizeObserver.observe(containerRef.current);
|
|
132
|
-
}
|
|
133
|
-
updatePath();
|
|
134
|
-
return () => {
|
|
135
|
-
resizeObserver.disconnect();
|
|
136
|
-
};
|
|
137
|
-
}, [containerRef, fromRef, toRef, curvature, startXOffset, startYOffset, endXOffset, endYOffset]);
|
|
138
|
-
return /* @__PURE__ */ jsxs(
|
|
139
|
-
"svg",
|
|
140
|
-
{
|
|
141
|
-
fill: "none",
|
|
142
|
-
width: svgDimensions.width,
|
|
143
|
-
height: svgDimensions.height,
|
|
144
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
145
|
-
className: cn("pointer-events-none absolute top-0 left-0 transform-gpu stroke-2", className),
|
|
146
|
-
viewBox: `0 0 ${svgDimensions.width} ${svgDimensions.height}`,
|
|
147
|
-
children: [
|
|
148
|
-
/* @__PURE__ */ jsx2("path", { d: pathD, stroke: pathColor, strokeWidth: pathWidth, strokeOpacity: pathOpacity, strokeLinecap: "round" }),
|
|
149
|
-
/* @__PURE__ */ jsx2("path", { d: pathD, strokeWidth: pathWidth, stroke: `url(#${id})`, strokeOpacity: "1", strokeLinecap: "round" }),
|
|
150
|
-
/* @__PURE__ */ jsx2("defs", { children: /* @__PURE__ */ jsxs(
|
|
151
|
-
motion2.linearGradient,
|
|
152
|
-
{
|
|
153
|
-
className: "transform-gpu",
|
|
154
|
-
id,
|
|
155
|
-
gradientUnits: "userSpaceOnUse",
|
|
156
|
-
initial: {
|
|
157
|
-
x1: "0%",
|
|
158
|
-
x2: "0%",
|
|
159
|
-
y1: "0%",
|
|
160
|
-
y2: "0%"
|
|
161
|
-
},
|
|
162
|
-
animate: {
|
|
163
|
-
x1: gradientCoordinates.x1,
|
|
164
|
-
x2: gradientCoordinates.x2,
|
|
165
|
-
y1: gradientCoordinates.y1,
|
|
166
|
-
y2: gradientCoordinates.y2
|
|
167
|
-
},
|
|
168
|
-
transition: {
|
|
169
|
-
delay,
|
|
170
|
-
duration,
|
|
171
|
-
ease: [0.16, 1, 0.3, 1],
|
|
172
|
-
repeat: Infinity,
|
|
173
|
-
repeatDelay: 0
|
|
174
|
-
},
|
|
175
|
-
children: [
|
|
176
|
-
/* @__PURE__ */ jsx2("stop", { stopColor: gradientStartColor, stopOpacity: "0" }),
|
|
177
|
-
/* @__PURE__ */ jsx2("stop", { stopColor: gradientStartColor }),
|
|
178
|
-
/* @__PURE__ */ jsx2("stop", { offset: "32.5%", stopColor: gradientStopColor }),
|
|
179
|
-
/* @__PURE__ */ jsx2("stop", { offset: "100%", stopColor: gradientStopColor, stopOpacity: "0" })
|
|
180
|
-
]
|
|
181
|
-
}
|
|
182
|
-
) })
|
|
183
|
-
]
|
|
184
|
-
}
|
|
185
|
-
);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
126
|
// src/shared/marquee/marquee.tsx
|
|
189
|
-
import { jsx as
|
|
127
|
+
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
190
128
|
function Marquee({
|
|
191
129
|
className,
|
|
192
130
|
reverse = false,
|
|
@@ -196,7 +134,7 @@ function Marquee({
|
|
|
196
134
|
repeat = 4,
|
|
197
135
|
...props
|
|
198
136
|
}) {
|
|
199
|
-
return /* @__PURE__ */
|
|
137
|
+
return /* @__PURE__ */ jsx4(
|
|
200
138
|
"div",
|
|
201
139
|
{
|
|
202
140
|
...props,
|
|
@@ -208,7 +146,7 @@ function Marquee({
|
|
|
208
146
|
},
|
|
209
147
|
className
|
|
210
148
|
),
|
|
211
|
-
children: Array(repeat).fill(0).map((_, i) => /* @__PURE__ */
|
|
149
|
+
children: Array(repeat).fill(0).map((_, i) => /* @__PURE__ */ jsx4(
|
|
212
150
|
"div",
|
|
213
151
|
{
|
|
214
152
|
className: cn("flex shrink-0 justify-around [gap:var(--gap)]", {
|
|
@@ -226,87 +164,40 @@ function Marquee({
|
|
|
226
164
|
}
|
|
227
165
|
|
|
228
166
|
// src/shared/code-window/code-window.tsx
|
|
229
|
-
import {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
for (let i = 0; i < lines.length; i++) {
|
|
237
|
-
const line = lines[i];
|
|
238
|
-
const isComment = line.trim().startsWith("//");
|
|
239
|
-
const isEmpty = line.trim() === "";
|
|
240
|
-
const isCode = !isComment && !isEmpty;
|
|
241
|
-
if (isComment && prevWasCode) {
|
|
242
|
-
result.push(/* @__PURE__ */ jsx4("div", { className: "h-5" }, `space-before-${i}`));
|
|
243
|
-
}
|
|
244
|
-
if (prevWasComment && isCode) {
|
|
245
|
-
result.push(/* @__PURE__ */ jsx4("div", { className: "h-5" }, `space-after-${i}`));
|
|
246
|
-
}
|
|
247
|
-
if (isEmpty) {
|
|
248
|
-
result.push(/* @__PURE__ */ jsx4("div", { className: "h-5" }, i));
|
|
249
|
-
prevWasComment = false;
|
|
250
|
-
prevWasCode = false;
|
|
251
|
-
continue;
|
|
252
|
-
}
|
|
253
|
-
if (isComment) {
|
|
254
|
-
result.push(
|
|
255
|
-
/* @__PURE__ */ jsx4("div", { className: "text-[#7d8590]", children: line }, i)
|
|
256
|
-
);
|
|
257
|
-
prevWasComment = true;
|
|
258
|
-
prevWasCode = false;
|
|
259
|
-
continue;
|
|
260
|
-
}
|
|
261
|
-
let highlighted = line;
|
|
262
|
-
highlighted = highlighted.replace(
|
|
263
|
-
/\$\.(\w+)\.(\w+)/g,
|
|
264
|
-
'<span class="text-[#79c0ff]">$</span>.<span class="text-[#d2a8ff]">$1</span>.<span class="text-[#ffa657]">$2</span>'
|
|
265
|
-
);
|
|
266
|
-
highlighted = highlighted.replace(/(\w+):/g, '<span class="text-[#79c0ff]">$1</span>:');
|
|
267
|
-
highlighted = highlighted.replace(/'([^']*)'/g, `<span class="text-[#a5d6ff]">'$1'</span>`);
|
|
268
|
-
highlighted = highlighted.replace(/\b(\d+)\b/g, '<span class="text-[#79c0ff]">$1</span>');
|
|
269
|
-
result.push(/* @__PURE__ */ jsx4("div", { dangerouslySetInnerHTML: { __html: highlighted } }, i));
|
|
270
|
-
prevWasComment = false;
|
|
271
|
-
prevWasCode = true;
|
|
272
|
-
}
|
|
273
|
-
return result;
|
|
274
|
-
};
|
|
275
|
-
return /* @__PURE__ */ jsx4("div", { className: `w-full h-full bg-[#0d1117] rounded-lg overflow-hidden ${className ?? ""}`, children: /* @__PURE__ */ jsx4("div", { className: "flex-1 overflow-auto p-6 lg:p-8", children: /* @__PURE__ */ jsx4("pre", { className: "text-sm lg:text-sm leading-relaxed font-mono text-[#e6edf3]", children: highlightCode(code) }) }) });
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
// src/shared/grid-pattern/grid-pattern.tsx
|
|
279
|
-
import { useId as useId2 } from "react";
|
|
280
|
-
import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
281
|
-
function GridPattern({
|
|
282
|
-
width = 40,
|
|
283
|
-
height = 40,
|
|
284
|
-
x = -1,
|
|
285
|
-
y = -1,
|
|
286
|
-
strokeDasharray = "0",
|
|
287
|
-
squares,
|
|
288
|
-
className,
|
|
289
|
-
...props
|
|
167
|
+
import { useEffect, useState } from "react";
|
|
168
|
+
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
169
|
+
function CodeWindow({
|
|
170
|
+
code,
|
|
171
|
+
language = "typescript",
|
|
172
|
+
themes = "github-dark-default",
|
|
173
|
+
className
|
|
290
174
|
}) {
|
|
291
|
-
const
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
}
|
|
304
|
-
|
|
175
|
+
const [html, setHtml] = useState(null);
|
|
176
|
+
const themesKey = typeof themes === "string" ? themes : `${themes.light}/${themes.dark}`;
|
|
177
|
+
useEffect(() => {
|
|
178
|
+
let alive = true;
|
|
179
|
+
import("shiki").then(
|
|
180
|
+
({ codeToHtml }) => codeToHtml(
|
|
181
|
+
code,
|
|
182
|
+
typeof themes === "string" ? { lang: language, theme: themes } : { lang: language, themes, defaultColor: "light" }
|
|
183
|
+
)
|
|
184
|
+
).then((out) => {
|
|
185
|
+
if (alive) setHtml(out);
|
|
186
|
+
}).catch(() => {
|
|
187
|
+
});
|
|
188
|
+
return () => {
|
|
189
|
+
alive = false;
|
|
190
|
+
};
|
|
191
|
+
}, [code, language, themesKey]);
|
|
192
|
+
return /* @__PURE__ */ jsx5("div", { className: cn("w-full h-full overflow-auto font-mono", className), children: html ? (
|
|
193
|
+
// biome-ignore lint/security/noDangerouslySetInnerHtml: shiki output; input is escaped by shiki
|
|
194
|
+
/* @__PURE__ */ jsx5("div", { dangerouslySetInnerHTML: { __html: html } })
|
|
195
|
+
) : /* @__PURE__ */ jsx5("pre", { className: "m-0 whitespace-pre", children: /* @__PURE__ */ jsx5("code", { children: code }) }) });
|
|
305
196
|
}
|
|
306
197
|
export {
|
|
307
|
-
|
|
198
|
+
Button,
|
|
308
199
|
CodeWindow,
|
|
309
|
-
|
|
200
|
+
Input,
|
|
310
201
|
Marquee,
|
|
311
202
|
ScrollReveal
|
|
312
203
|
};
|
package/dist/shared/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/shared/scroll-reveal/scroll-reveal.tsx","../../src/shared/animated-beam/animated-beam.tsx","../../src/lib/utils.ts","../../src/shared/marquee/marquee.tsx","../../src/shared/code-window/code-window.tsx","../../src/shared/grid-pattern/grid-pattern.tsx"],"sourcesContent":["'use client'\n\nimport { motion, Variants } from 'motion/react'\nimport { ReactNode } from 'react'\n\nexport interface ScrollRevealProps {\n children: ReactNode\n className?: string\n delay?: number\n direction?: 'up' | 'down' | 'left' | 'right' | 'none'\n duration?: number\n trigger?: 'inView' | 'mount'\n once?: boolean\n margin?: string\n}\n\nconst directionVariants: Record<string, Variants> = {\n up: {\n hidden: { opacity: 0, y: 50 },\n visible: { opacity: 1, y: 0 },\n },\n down: {\n hidden: { opacity: 0, y: -50 },\n visible: { opacity: 1, y: 0 },\n },\n left: {\n hidden: { opacity: 0, x: -50 },\n visible: { opacity: 1, x: 0 },\n },\n right: {\n hidden: { opacity: 0, x: 50 },\n visible: { opacity: 1, x: 0 },\n },\n none: {\n hidden: { opacity: 0 },\n visible: { opacity: 1 },\n },\n}\n\nexport function ScrollReveal({\n children,\n className,\n delay = 0,\n direction = 'up',\n duration = 0.5,\n trigger = 'inView',\n once = true,\n margin = '-100px',\n}: ScrollRevealProps) {\n if (trigger === 'mount') {\n return (\n <motion.div\n initial=\"hidden\"\n animate=\"visible\"\n transition={{ duration, delay, ease: 'easeOut' }}\n variants={directionVariants[direction]}\n className={className}\n >\n {children}\n </motion.div>\n )\n }\n\n return (\n <motion.div\n initial=\"hidden\"\n whileInView=\"visible\"\n viewport={{ once, margin }}\n transition={{ duration, delay, ease: 'easeOut' }}\n variants={directionVariants[direction]}\n className={className}\n >\n {children}\n </motion.div>\n )\n}\n","'use client'\n\nimport { RefObject, useEffect, useId, useState } from 'react'\nimport { motion } from 'motion/react'\nimport { cn } from '../../lib/utils'\n\nexport interface AnimatedBeamProps {\n className?: string\n containerRef: RefObject<HTMLElement | null>\n fromRef: RefObject<HTMLElement | null>\n toRef: RefObject<HTMLElement | null>\n curvature?: number\n reverse?: boolean\n pathColor?: string\n pathWidth?: number\n pathOpacity?: number\n gradientStartColor?: string\n gradientStopColor?: string\n delay?: number\n duration?: number\n startXOffset?: number\n startYOffset?: number\n endXOffset?: number\n endYOffset?: number\n}\n\nexport function AnimatedBeam({\n className,\n containerRef,\n fromRef,\n toRef,\n curvature = 0,\n reverse = false,\n duration = Math.random() * 3 + 4,\n delay = 0,\n pathColor = 'gray',\n pathWidth = 2,\n pathOpacity = 0.2,\n gradientStartColor = '#ffaa40',\n gradientStopColor = '#9c40ff',\n startXOffset = 0,\n startYOffset = 0,\n endXOffset = 0,\n endYOffset = 0,\n}: AnimatedBeamProps) {\n const id = useId()\n const [pathD, setPathD] = useState('')\n const [svgDimensions, setSvgDimensions] = useState({ width: 0, height: 0 })\n\n const gradientCoordinates = reverse\n ? {\n x1: ['90%', '-10%'],\n x2: ['100%', '0%'],\n y1: ['0%', '0%'],\n y2: ['0%', '0%'],\n }\n : {\n x1: ['10%', '110%'],\n x2: ['0%', '100%'],\n y1: ['0%', '0%'],\n y2: ['0%', '0%'],\n }\n\n useEffect(() => {\n const updatePath = () => {\n if (containerRef.current && fromRef.current && toRef.current) {\n const containerRect = containerRef.current.getBoundingClientRect()\n const rectA = fromRef.current.getBoundingClientRect()\n const rectB = toRef.current.getBoundingClientRect()\n\n const svgWidth = containerRect.width\n const svgHeight = containerRect.height\n setSvgDimensions({ width: svgWidth, height: svgHeight })\n\n const startX = rectA.left - containerRect.left + rectA.width / 2 + startXOffset\n const startY = rectA.top - containerRect.top + rectA.height / 2 + startYOffset\n const endX = rectB.left - containerRect.left + rectB.width / 2 + endXOffset\n const endY = rectB.top - containerRect.top + rectB.height / 2 + endYOffset\n\n const controlY = startY - curvature\n const d = `M ${startX},${startY} Q ${(startX + endX) / 2},${controlY} ${endX},${endY}`\n setPathD(d)\n }\n }\n\n const resizeObserver = new ResizeObserver(() => {\n updatePath()\n })\n\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current)\n }\n\n updatePath()\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [containerRef, fromRef, toRef, curvature, startXOffset, startYOffset, endXOffset, endYOffset])\n\n return (\n <svg\n fill=\"none\"\n width={svgDimensions.width}\n height={svgDimensions.height}\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn('pointer-events-none absolute top-0 left-0 transform-gpu stroke-2', className)}\n viewBox={`0 0 ${svgDimensions.width} ${svgDimensions.height}`}\n >\n <path d={pathD} stroke={pathColor} strokeWidth={pathWidth} strokeOpacity={pathOpacity} strokeLinecap=\"round\" />\n <path d={pathD} strokeWidth={pathWidth} stroke={`url(#${id})`} strokeOpacity=\"1\" strokeLinecap=\"round\" />\n <defs>\n <motion.linearGradient\n className=\"transform-gpu\"\n id={id}\n gradientUnits={'userSpaceOnUse'}\n initial={{\n x1: '0%',\n x2: '0%',\n y1: '0%',\n y2: '0%',\n }}\n animate={{\n x1: gradientCoordinates.x1,\n x2: gradientCoordinates.x2,\n y1: gradientCoordinates.y1,\n y2: gradientCoordinates.y2,\n }}\n transition={{\n delay,\n duration,\n ease: [0.16, 1, 0.3, 1],\n repeat: Infinity,\n repeatDelay: 0,\n }}\n >\n <stop stopColor={gradientStartColor} stopOpacity=\"0\"></stop>\n <stop stopColor={gradientStartColor}></stop>\n <stop offset=\"32.5%\" stopColor={gradientStopColor}></stop>\n <stop offset=\"100%\" stopColor={gradientStopColor} stopOpacity=\"0\"></stop>\n </motion.linearGradient>\n </defs>\n </svg>\n )\n}\n","import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { ComponentPropsWithoutRef } from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface MarqueeProps extends ComponentPropsWithoutRef<'div'> {\n /**\n * Optional CSS class name to apply custom styles\n */\n className?: string\n /**\n * Whether to reverse the animation direction\n * @default false\n */\n reverse?: boolean\n /**\n * Whether to pause the animation on hover\n * @default false\n */\n pauseOnHover?: boolean\n /**\n * Content to be displayed in the marquee\n */\n children: React.ReactNode\n /**\n * Whether to animate vertically instead of horizontally\n * @default false\n */\n vertical?: boolean\n /**\n * Number of times to repeat the content\n * @default 4\n */\n repeat?: number\n}\n\nexport function Marquee({\n className,\n reverse = false,\n pauseOnHover = false,\n children,\n vertical = false,\n repeat = 4,\n ...props\n}: MarqueeProps) {\n return (\n <div\n {...props}\n className={cn(\n 'group flex [gap:var(--gap)] overflow-hidden p-2 [--duration:40s] [--gap:1rem]',\n {\n 'flex-row': !vertical,\n 'flex-col': vertical,\n },\n className\n )}\n >\n {Array(repeat)\n .fill(0)\n .map((_, i) => (\n <div\n key={i}\n className={cn('flex shrink-0 justify-around [gap:var(--gap)]', {\n 'animate-marquee flex-row': !vertical,\n 'animate-marquee-vertical flex-col': vertical,\n 'group-hover:[animation-play-state:paused]': pauseOnHover,\n '[animation-direction:reverse]': reverse,\n })}\n >\n {children}\n </div>\n ))}\n </div>\n )\n}\n","import React from 'react'\n\nexport interface CodeWindowProps {\n code: string\n className?: string\n}\n\nexport function CodeWindow({ code, className }: CodeWindowProps) {\n const highlightCode = (code: string) => {\n const lines = code.split('\\n')\n const result: React.ReactElement[] = []\n let prevWasComment = false\n let prevWasCode = false\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n const isComment = line.trim().startsWith('//')\n const isEmpty = line.trim() === ''\n const isCode = !isComment && !isEmpty\n\n if (isComment && prevWasCode) {\n result.push(<div key={`space-before-${i}`} className=\"h-5\"></div>)\n }\n\n if (prevWasComment && isCode) {\n result.push(<div key={`space-after-${i}`} className=\"h-5\"></div>)\n }\n\n if (isEmpty) {\n result.push(<div key={i} className=\"h-5\"></div>)\n prevWasComment = false\n prevWasCode = false\n continue\n }\n\n if (isComment) {\n result.push(\n <div key={i} className=\"text-[#7d8590]\">\n {line}\n </div>\n )\n prevWasComment = true\n prevWasCode = false\n continue\n }\n\n let highlighted = line\n\n // Function names and properties with dots\n highlighted = highlighted.replace(\n /\\$\\.(\\w+)\\.(\\w+)/g,\n '<span class=\"text-[#79c0ff]\">$</span>.<span class=\"text-[#d2a8ff]\">$1</span>.<span class=\"text-[#ffa657]\">$2</span>'\n )\n\n // Object properties\n highlighted = highlighted.replace(/(\\w+):/g, '<span class=\"text-[#79c0ff]\">$1</span>:')\n\n // Strings\n highlighted = highlighted.replace(/'([^']*)'/g, \"<span class=\\\"text-[#a5d6ff]\\\">'$1'</span>\")\n\n // Numbers\n highlighted = highlighted.replace(/\\b(\\d+)\\b/g, '<span class=\"text-[#79c0ff]\">$1</span>')\n\n result.push(<div key={i} dangerouslySetInnerHTML={{ __html: highlighted }} />)\n\n prevWasComment = false\n prevWasCode = true\n }\n\n return result\n }\n\n return (\n <div className={`w-full h-full bg-[#0d1117] rounded-lg overflow-hidden ${className ?? ''}`}>\n <div className=\"flex-1 overflow-auto p-6 lg:p-8\">\n <pre className=\"text-sm lg:text-sm leading-relaxed font-mono text-[#e6edf3]\">{highlightCode(code)}</pre>\n </div>\n </div>\n )\n}\n","import { useId } from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface GridPatternProps extends React.SVGProps<SVGSVGElement> {\n width?: number\n height?: number\n x?: number\n y?: number\n squares?: Array<[x: number, y: number]>\n strokeDasharray?: string\n className?: string\n}\n\nexport function GridPattern({\n width = 40,\n height = 40,\n x = -1,\n y = -1,\n strokeDasharray = '0',\n squares,\n className,\n ...props\n}: GridPatternProps) {\n const id = useId()\n\n return (\n <svg\n aria-hidden=\"true\"\n className={cn('pointer-events-none absolute inset-0 h-full w-full fill-muted-foreground/20 stroke-muted-foreground/20', className)}\n {...props}\n >\n <defs>\n <pattern id={id} width={width} height={height} patternUnits=\"userSpaceOnUse\" x={x} y={y}>\n <path d={`M.5 ${height}V.5H${width}`} fill=\"none\" strokeDasharray={strokeDasharray} />\n </pattern>\n </defs>\n <rect width=\"100%\" height=\"100%\" strokeWidth={0} fill={`url(#${id})`} />\n {squares && (\n <svg x={x} y={y} className=\"overflow-visible\">\n {squares.map(([sx, sy]) => (\n <rect strokeWidth=\"0\" key={`${sx}-${sy}`} width={width - 1} height={height - 1} x={sx * width + 1} y={sy * height + 1} />\n ))}\n </svg>\n )}\n </svg>\n )\n}\n"],"mappings":";AAEA,SAAS,cAAwB;AAiD3B;AAnCN,IAAM,oBAA8C;AAAA,EAClD,IAAI;AAAA,IACF,QAAQ,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,IAC5B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,EAC9B;AAAA,EACA,MAAM;AAAA,IACJ,QAAQ,EAAE,SAAS,GAAG,GAAG,IAAI;AAAA,IAC7B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,EAC9B;AAAA,EACA,MAAM;AAAA,IACJ,QAAQ,EAAE,SAAS,GAAG,GAAG,IAAI;AAAA,IAC7B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,EAC9B;AAAA,EACA,OAAO;AAAA,IACL,QAAQ,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,IAC5B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,EAC9B;AAAA,EACA,MAAM;AAAA,IACJ,QAAQ,EAAE,SAAS,EAAE;AAAA,IACrB,SAAS,EAAE,SAAS,EAAE;AAAA,EACxB;AACF;AAEO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AACX,GAAsB;AACpB,MAAI,YAAY,SAAS;AACvB,WACE;AAAA,MAAC,OAAO;AAAA,MAAP;AAAA,QACC,SAAQ;AAAA,QACR,SAAQ;AAAA,QACR,YAAY,EAAE,UAAU,OAAO,MAAM,UAAU;AAAA,QAC/C,UAAU,kBAAkB,SAAS;AAAA,QACrC;AAAA,QAEC;AAAA;AAAA,IACH;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACC,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,UAAU,EAAE,MAAM,OAAO;AAAA,MACzB,YAAY,EAAE,UAAU,OAAO,MAAM,UAAU;AAAA,MAC/C,UAAU,kBAAkB,SAAS;AAAA,MACrC;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;ACzEA,SAAoB,WAAW,OAAO,gBAAgB;AACtD,SAAS,UAAAA,eAAc;;;ACHvB,SAAS,YAA6B;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;;;ADwGM,gBAAAC,MAGE,YAHF;AAnFC,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,WAAW,KAAK,OAAO,IAAI,IAAI;AAAA,EAC/B,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,aAAa;AAAA,EACb,aAAa;AACf,GAAsB;AACpB,QAAM,KAAK,MAAM;AACjB,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE;AACrC,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,EAAE,OAAO,GAAG,QAAQ,EAAE,CAAC;AAE1E,QAAM,sBAAsB,UACxB;AAAA,IACE,IAAI,CAAC,OAAO,MAAM;AAAA,IAClB,IAAI,CAAC,QAAQ,IAAI;AAAA,IACjB,IAAI,CAAC,MAAM,IAAI;AAAA,IACf,IAAI,CAAC,MAAM,IAAI;AAAA,EACjB,IACA;AAAA,IACE,IAAI,CAAC,OAAO,MAAM;AAAA,IAClB,IAAI,CAAC,MAAM,MAAM;AAAA,IACjB,IAAI,CAAC,MAAM,IAAI;AAAA,IACf,IAAI,CAAC,MAAM,IAAI;AAAA,EACjB;AAEJ,YAAU,MAAM;AACd,UAAM,aAAa,MAAM;AACvB,UAAI,aAAa,WAAW,QAAQ,WAAW,MAAM,SAAS;AAC5D,cAAM,gBAAgB,aAAa,QAAQ,sBAAsB;AACjE,cAAM,QAAQ,QAAQ,QAAQ,sBAAsB;AACpD,cAAM,QAAQ,MAAM,QAAQ,sBAAsB;AAElD,cAAM,WAAW,cAAc;AAC/B,cAAM,YAAY,cAAc;AAChC,yBAAiB,EAAE,OAAO,UAAU,QAAQ,UAAU,CAAC;AAEvD,cAAM,SAAS,MAAM,OAAO,cAAc,OAAO,MAAM,QAAQ,IAAI;AACnE,cAAM,SAAS,MAAM,MAAM,cAAc,MAAM,MAAM,SAAS,IAAI;AAClE,cAAM,OAAO,MAAM,OAAO,cAAc,OAAO,MAAM,QAAQ,IAAI;AACjE,cAAM,OAAO,MAAM,MAAM,cAAc,MAAM,MAAM,SAAS,IAAI;AAEhE,cAAM,WAAW,SAAS;AAC1B,cAAM,IAAI,KAAK,MAAM,IAAI,MAAM,OAAO,SAAS,QAAQ,CAAC,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI;AACpF,iBAAS,CAAC;AAAA,MACZ;AAAA,IACF;AAEA,UAAM,iBAAiB,IAAI,eAAe,MAAM;AAC9C,iBAAW;AAAA,IACb,CAAC;AAED,QAAI,aAAa,SAAS;AACxB,qBAAe,QAAQ,aAAa,OAAO;AAAA,IAC7C;AAEA,eAAW;AAEX,WAAO,MAAM;AACX,qBAAe,WAAW;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,cAAc,SAAS,OAAO,WAAW,cAAc,cAAc,YAAY,UAAU,CAAC;AAEhG,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,OAAO,cAAc;AAAA,MACrB,QAAQ,cAAc;AAAA,MACtB,OAAM;AAAA,MACN,WAAW,GAAG,oEAAoE,SAAS;AAAA,MAC3F,SAAS,OAAO,cAAc,KAAK,IAAI,cAAc,MAAM;AAAA,MAE3D;AAAA,wBAAAA,KAAC,UAAK,GAAG,OAAO,QAAQ,WAAW,aAAa,WAAW,eAAe,aAAa,eAAc,SAAQ;AAAA,QAC7G,gBAAAA,KAAC,UAAK,GAAG,OAAO,aAAa,WAAW,QAAQ,QAAQ,EAAE,KAAK,eAAc,KAAI,eAAc,SAAQ;AAAA,QACvG,gBAAAA,KAAC,UACC;AAAA,UAACC,QAAO;AAAA,UAAP;AAAA,YACC,WAAU;AAAA,YACV;AAAA,YACA,eAAe;AAAA,YACf,SAAS;AAAA,cACP,IAAI;AAAA,cACJ,IAAI;AAAA,cACJ,IAAI;AAAA,cACJ,IAAI;AAAA,YACN;AAAA,YACA,SAAS;AAAA,cACP,IAAI,oBAAoB;AAAA,cACxB,IAAI,oBAAoB;AAAA,cACxB,IAAI,oBAAoB;AAAA,cACxB,IAAI,oBAAoB;AAAA,YAC1B;AAAA,YACA,YAAY;AAAA,cACV;AAAA,cACA;AAAA,cACA,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;AAAA,cACtB,QAAQ;AAAA,cACR,aAAa;AAAA,YACf;AAAA,YAEA;AAAA,8BAAAD,KAAC,UAAK,WAAW,oBAAoB,aAAY,KAAI;AAAA,cACrD,gBAAAA,KAAC,UAAK,WAAW,oBAAoB;AAAA,cACrC,gBAAAA,KAAC,UAAK,QAAO,SAAQ,WAAW,mBAAmB;AAAA,cACnD,gBAAAA,KAAC,UAAK,QAAO,QAAO,WAAW,mBAAmB,aAAY,KAAI;AAAA;AAAA;AAAA,QACpE,GACF;AAAA;AAAA;AAAA,EACF;AAEJ;;;AEtFU,gBAAAE,YAAA;AAxBH,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA,UAAU;AAAA,EACV,eAAe;AAAA,EACf;AAAA,EACA,WAAW;AAAA,EACX,SAAS;AAAA,EACT,GAAG;AACL,GAAiB;AACf,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,UACE,YAAY,CAAC;AAAA,UACb,YAAY;AAAA,QACd;AAAA,QACA;AAAA,MACF;AAAA,MAEC,gBAAM,MAAM,EACV,KAAK,CAAC,EACN,IAAI,CAAC,GAAG,MACP,gBAAAA;AAAA,QAAC;AAAA;AAAA,UAEC,WAAW,GAAG,iDAAiD;AAAA,YAC7D,4BAA4B,CAAC;AAAA,YAC7B,qCAAqC;AAAA,YACrC,6CAA6C;AAAA,YAC7C,iCAAiC;AAAA,UACnC,CAAC;AAAA,UAEA;AAAA;AAAA,QARI;AAAA,MASP,CACD;AAAA;AAAA,EACL;AAEJ;;;ACnDoB,gBAAAC,YAAA;AAdb,SAAS,WAAW,EAAE,MAAM,UAAU,GAAoB;AAC/D,QAAM,gBAAgB,CAACC,UAAiB;AACtC,UAAM,QAAQA,MAAK,MAAM,IAAI;AAC7B,UAAM,SAA+B,CAAC;AACtC,QAAI,iBAAiB;AACrB,QAAI,cAAc;AAElB,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,YAAY,KAAK,KAAK,EAAE,WAAW,IAAI;AAC7C,YAAM,UAAU,KAAK,KAAK,MAAM;AAChC,YAAM,SAAS,CAAC,aAAa,CAAC;AAE9B,UAAI,aAAa,aAAa;AAC5B,eAAO,KAAK,gBAAAD,KAAC,SAA8B,WAAU,SAA/B,gBAAgB,CAAC,EAAoB,CAAM;AAAA,MACnE;AAEA,UAAI,kBAAkB,QAAQ;AAC5B,eAAO,KAAK,gBAAAA,KAAC,SAA6B,WAAU,SAA9B,eAAe,CAAC,EAAoB,CAAM;AAAA,MAClE;AAEA,UAAI,SAAS;AACX,eAAO,KAAK,gBAAAA,KAAC,SAAY,WAAU,SAAb,CAAmB,CAAM;AAC/C,yBAAiB;AACjB,sBAAc;AACd;AAAA,MACF;AAEA,UAAI,WAAW;AACb,eAAO;AAAA,UACL,gBAAAA,KAAC,SAAY,WAAU,kBACpB,kBADO,CAEV;AAAA,QACF;AACA,yBAAiB;AACjB,sBAAc;AACd;AAAA,MACF;AAEA,UAAI,cAAc;AAGlB,oBAAc,YAAY;AAAA,QACxB;AAAA,QACA;AAAA,MACF;AAGA,oBAAc,YAAY,QAAQ,WAAW,yCAAyC;AAGtF,oBAAc,YAAY,QAAQ,cAAc,0CAA4C;AAG5F,oBAAc,YAAY,QAAQ,cAAc,wCAAwC;AAExF,aAAO,KAAK,gBAAAA,KAAC,SAAY,yBAAyB,EAAE,QAAQ,YAAY,KAAlD,CAAqD,CAAE;AAE7E,uBAAiB;AACjB,oBAAc;AAAA,IAChB;AAEA,WAAO;AAAA,EACT;AAEA,SACE,gBAAAA,KAAC,SAAI,WAAW,yDAAyD,aAAa,EAAE,IACtF,0BAAAA,KAAC,SAAI,WAAU,mCACb,0BAAAA,KAAC,SAAI,WAAU,+DAA+D,wBAAc,IAAI,GAAE,GACpG,GACF;AAEJ;;;AC/EA,SAAS,SAAAE,cAAa;AA0BlB,SAOM,OAAAC,MAPN,QAAAC,aAAA;AAbG,SAAS,YAAY;AAAA,EAC1B,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAqB;AACnB,QAAM,KAAKC,OAAM;AAEjB,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAW,GAAG,0GAA0G,SAAS;AAAA,MAChI,GAAG;AAAA,MAEJ;AAAA,wBAAAD,KAAC,UACC,0BAAAA,KAAC,aAAQ,IAAQ,OAAc,QAAgB,cAAa,kBAAiB,GAAM,GACjF,0BAAAA,KAAC,UAAK,GAAG,OAAO,MAAM,OAAO,KAAK,IAAI,MAAK,QAAO,iBAAkC,GACtF,GACF;AAAA,QACA,gBAAAA,KAAC,UAAK,OAAM,QAAO,QAAO,QAAO,aAAa,GAAG,MAAM,QAAQ,EAAE,KAAK;AAAA,QACrE,WACC,gBAAAA,KAAC,SAAI,GAAM,GAAM,WAAU,oBACxB,kBAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,MACnB,gBAAAA,KAAC,UAAK,aAAY,KAAwB,OAAO,QAAQ,GAAG,QAAQ,SAAS,GAAG,GAAG,KAAK,QAAQ,GAAG,GAAG,KAAK,SAAS,KAAzF,GAAG,EAAE,IAAI,EAAE,EAAiF,CACxH,GACH;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":["motion","jsx","motion","jsx","jsx","code","useId","jsx","jsxs","useId"]}
|
|
1
|
+
{"version":3,"sources":["../../src/templates/studio/ui/button/button.tsx","../../src/lib/utils.ts","../../src/templates/studio/ui/input/input.tsx","../../src/shared/scroll-reveal/scroll-reveal.tsx","../../src/shared/marquee/marquee.tsx","../../src/shared/code-window/code-window.tsx"],"sourcesContent":["'use client'\n\n/**\n * The named-agents baseline Button (components/ui/button.tsx) — rounded-full\n * pills on the baseline token vocabulary: `btn-gradient-dark` ink-gradient\n * primary, surface-raised secondary, the persona `accent` variant, and the\n * h-12/text-base default size. The sections previously borrowed\n * @mdxui/primitives' Button (flat bg-primary, h-9, theme radius), which is a\n * different design language — buttons must speak the baseline tokens the\n * `[data-dialect=\"named\"]` envelope defines (`--color-btn-primary-*`,\n * `--color-surface-raised`, `--color-hover`, `--color-accent-*`).\n *\n * Ported without cva/Radix Slot to keep the package dependency-free: variants\n * are a plain class map, `asChild` clones the single child element (the named\n * call sites always pass one `<a>`).\n */\n\nimport * as React from 'react'\nimport { cn } from '../../../../lib/utils'\n\nexport type ButtonVariant = 'default' | 'secondary' | 'outline' | 'ghost' | 'link' | 'accent'\nexport type ButtonSize = 'default' | 'sm' | 'lg' | 'icon'\n\nconst baseClasses =\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--color-ring) disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer'\n\nconst variantClasses: Record<ButtonVariant, string> = {\n default: 'btn-gradient-dark text-(--color-btn-primary-fg) shadow-md hover:shadow-lg rounded-full',\n secondary:\n 'bg-(--color-surface-raised) text-(--color-fg) border border-(--color-border) shadow-sm hover:shadow-md rounded-full',\n outline: 'border border-(--color-border) bg-transparent text-(--color-fg) hover:bg-(--color-hover) rounded-full',\n ghost: 'text-(--color-fg) hover:bg-(--color-hover) rounded-full',\n link: 'text-(--color-fg) underline-offset-4 hover:underline',\n accent: 'bg-(--color-accent-strong) text-(--color-accent-fg) shadow-md hover:opacity-90 hover:shadow-lg rounded-full',\n}\n\nconst sizeClasses: Record<ButtonSize, string> = {\n default: 'h-12 px-6 py-3 text-base',\n sm: 'h-10 px-4 py-2 text-sm',\n lg: 'h-14 px-8 py-4 text-lg',\n icon: 'h-12 w-12',\n}\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant\n size?: ButtonSize\n asChild?: boolean\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'default', size = 'default', asChild = false, children, ...props }, ref) => {\n const classes = cn(baseClasses, variantClasses[variant], sizeClasses[size], className)\n\n if (asChild && React.isValidElement(children)) {\n const child = children as React.ReactElement<{ className?: string }>\n return React.cloneElement(child, {\n ...props,\n className: cn(classes, child.props.className),\n })\n }\n\n return (\n <button ref={ref} className={classes} {...props}>\n {children}\n </button>\n )\n },\n)\nButton.displayName = 'Button'\n","import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n/** A src is renderable only when its bytes are guaranteed to resolve — an\n * absolute http(s)/protocol-relative/data URL. App-relative paths\n * (`/images/hero/hero-main.png`) and bare tokens (`\"linear\"`) 404 on the\n * consumer host (the live priya.studio.sb broken hero + marquee), so image\n * slots are skipped and the layout reflows to its no-image variant. */\nexport const isRenderableSrc = (s: string): boolean =>\n /^(https?:)?\\/\\//i.test(s.trim()) || /^data:image\\//i.test(s.trim())\n\n/** Canonical display casing for common brand tokens; otherwise capitalize.\n * Shared across templates — hero marquee chips (studio) and the ruled\n * tool strip (executive) both render bare tool tokens as labels. */\nconst BRAND_LABELS: Record<string, string> = {\n github: 'GitHub',\n gitlab: 'GitLab',\n linkedin: 'LinkedIn',\n youtube: 'YouTube',\n whatsapp: 'WhatsApp',\n hubspot: 'HubSpot',\n quickbooks: 'QuickBooks',\n typescript: 'TypeScript',\n javascript: 'JavaScript',\n postgresql: 'PostgreSQL',\n mongodb: 'MongoDB',\n graphql: 'GraphQL',\n openai: 'OpenAI',\n}\nexport const brandLabel = (s: string): string => {\n const t = s.trim()\n return BRAND_LABELS[t.toLowerCase()] ?? t.charAt(0).toUpperCase() + t.slice(1)\n}\n","'use client'\n\n/**\n * The named-agents baseline Input (components/ui/input.tsx), verbatim on the\n * baseline token vocabulary. Notably `h-11` and `bg-transparent` — the footer's\n * email capture positions a `py-3` submit button inside the field, which\n * overflows @mdxui/primitives' `h-9 bg-background` Input (the drift that broke\n * the footer input's padding).\n */\n\nimport * as React from 'react'\nimport { cn } from '../../../../lib/utils'\n\nexport const Input = React.forwardRef<HTMLInputElement, React.ComponentProps<'input'>>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n 'flex h-11 w-full rounded-md border border-(--color-border) bg-transparent px-3 py-1 text-base transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-(--color-fg) placeholder:text-(--color-fg-muted) focus-visible:outline-none focus-visible:border-(--color-border-strong) focus-visible:ring-1 focus-visible:ring-(--color-ring) disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n className,\n )}\n ref={ref}\n {...props}\n />\n )\n },\n)\nInput.displayName = 'Input'\n","'use client'\n\nimport { motion, Variants } from 'motion/react'\nimport { ReactNode } from 'react'\n\nexport interface ScrollRevealProps {\n children: ReactNode\n className?: string\n delay?: number\n direction?: 'up' | 'down' | 'left' | 'right' | 'none'\n duration?: number\n trigger?: 'inView' | 'mount'\n once?: boolean\n margin?: string\n}\n\nconst directionVariants: Record<string, Variants> = {\n up: {\n hidden: { opacity: 0, y: 50 },\n visible: { opacity: 1, y: 0 },\n },\n down: {\n hidden: { opacity: 0, y: -50 },\n visible: { opacity: 1, y: 0 },\n },\n left: {\n hidden: { opacity: 0, x: -50 },\n visible: { opacity: 1, x: 0 },\n },\n right: {\n hidden: { opacity: 0, x: 50 },\n visible: { opacity: 1, x: 0 },\n },\n none: {\n hidden: { opacity: 0 },\n visible: { opacity: 1 },\n },\n}\n\nexport function ScrollReveal({\n children,\n className,\n delay = 0,\n direction = 'up',\n duration = 0.5,\n trigger = 'inView',\n once = true,\n margin = '-100px',\n}: ScrollRevealProps) {\n if (trigger === 'mount') {\n return (\n <motion.div\n initial=\"hidden\"\n animate=\"visible\"\n transition={{ duration, delay, ease: 'easeOut' }}\n variants={directionVariants[direction]}\n className={className}\n >\n {children}\n </motion.div>\n )\n }\n\n return (\n <motion.div\n initial=\"hidden\"\n whileInView=\"visible\"\n viewport={{ once, margin }}\n transition={{ duration, delay, ease: 'easeOut' }}\n variants={directionVariants[direction]}\n className={className}\n >\n {children}\n </motion.div>\n )\n}\n","import { ComponentPropsWithoutRef } from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface MarqueeProps extends ComponentPropsWithoutRef<'div'> {\n /**\n * Optional CSS class name to apply custom styles\n */\n className?: string\n /**\n * Whether to reverse the animation direction\n * @default false\n */\n reverse?: boolean\n /**\n * Whether to pause the animation on hover\n * @default false\n */\n pauseOnHover?: boolean\n /**\n * Content to be displayed in the marquee\n */\n children: React.ReactNode\n /**\n * Whether to animate vertically instead of horizontally\n * @default false\n */\n vertical?: boolean\n /**\n * Number of times to repeat the content\n * @default 4\n */\n repeat?: number\n}\n\nexport function Marquee({\n className,\n reverse = false,\n pauseOnHover = false,\n children,\n vertical = false,\n repeat = 4,\n ...props\n}: MarqueeProps) {\n return (\n <div\n {...props}\n className={cn(\n 'group flex [gap:var(--gap)] overflow-hidden p-2 [--duration:40s] [--gap:1rem]',\n {\n 'flex-row': !vertical,\n 'flex-col': vertical,\n },\n className\n )}\n >\n {Array(repeat)\n .fill(0)\n .map((_, i) => (\n <div\n key={i}\n className={cn('flex shrink-0 justify-around [gap:var(--gap)]', {\n 'animate-marquee flex-row': !vertical,\n 'animate-marquee-vertical flex-col': vertical,\n 'group-hover:[animation-play-state:paused]': pauseOnHover,\n '[animation-direction:reverse]': reverse,\n })}\n >\n {children}\n </div>\n ))}\n </div>\n )\n}\n","'use client'\n\n/**\n * CodeWindow — shiki-highlighted code block, shared across templates.\n *\n * The named-agent templates render whatever code the cascade generates for\n * ANY persona, so highlighting is a real tokenizer (shiki), not the\n * baseline's regex pass (which was grammar-locked to the `$.Priya.method()`\n * DSL shape). Shiki is dynamically imported so consumers only pay for it\n * when a code window actually mounts; until it resolves (and whenever\n * highlighting fails), the fallback is the plain escaped code — content is\n * never invisible.\n *\n * Theming: this component is visually NEUTRAL — the calling template owns\n * the panel (background, border, padding, type size) via `className`, and\n * the envelopes force `.shiki { background: transparent }` so shiki's theme\n * background never fights the panel. Pass a single theme name for a fixed\n * appearance (studio's always-dark panel) or a `{ light, dark }` pair to\n * follow the host's `.dark` class via the envelope's dual-theme CSS.\n */\n\nimport { useEffect, useState } from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface CodeWindowProps {\n code: string\n /** Shiki language id. The persona DSL is valid TypeScript — the default. */\n language?: string\n /** Shiki theme: one name = fixed; a pair = follows the host `.dark` class\n * (requires the envelope's `--shiki-dark` switch CSS). */\n themes?: string | { light: string; dark: string }\n className?: string\n}\n\nexport function CodeWindow({\n code,\n language = 'typescript',\n themes = 'github-dark-default',\n className,\n}: CodeWindowProps) {\n const [html, setHtml] = useState<string | null>(null)\n const themesKey = typeof themes === 'string' ? themes : `${themes.light}/${themes.dark}`\n\n useEffect(() => {\n let alive = true\n import('shiki')\n .then(({ codeToHtml }) =>\n codeToHtml(\n code,\n typeof themes === 'string'\n ? { lang: language, theme: themes }\n : { lang: language, themes, defaultColor: 'light' },\n ),\n )\n .then((out) => {\n if (alive) setHtml(out)\n })\n .catch(() => {\n // Unknown language / load failure → keep the plain fallback.\n })\n return () => {\n alive = false\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- themesKey covers `themes`\n }, [code, language, themesKey])\n\n return (\n <div className={cn('w-full h-full overflow-auto font-mono', className)}>\n {html ? (\n // biome-ignore lint/security/noDangerouslySetInnerHtml: shiki output; input is escaped by shiki\n <div dangerouslySetInnerHTML={{ __html: html }} />\n ) : (\n <pre className=\"m-0 whitespace-pre\">\n <code>{code}</code>\n </pre>\n )}\n </div>\n )\n}\n"],"mappings":"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","names":["React","jsx","jsx","jsx","jsx"]}
|