futsuno-ui 0.1.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/README.md +199 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +1386 -0
- package/dist/index.js.map +1 -0
- package/dist/lp/index.d.ts +375 -0
- package/dist/lp/index.js +1136 -0
- package/dist/lp/index.js.map +1 -0
- package/dist/styles.css +131 -0
- package/dist/theme/index.d.ts +3 -0
- package/dist/theme/index.js +6 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/tokens/index.d.ts +432 -0
- package/dist/tokens/index.js +252 -0
- package/dist/tokens/index.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tokens/colors.ts","../src/tokens/typography.ts","../src/tokens/spacing.ts","../src/tokens/index.ts","../src/utils/cn.ts","../src/lp/atoms/Button/Button.tsx","../src/lp/atoms/Button/AnchorButton.tsx","../src/lp/atoms/Image/Image.tsx","../src/lp/atoms/Image/ProductImage.tsx","../src/lp/atoms/Icon/Icon.tsx","../src/lp/atoms/Text/Text.tsx","../src/lp/molecules/UserVoice/UserVoice.tsx","../src/lp/molecules/FaqParts/FaqParts.tsx","../src/lp/organisms/KeyVisual/KeyVisual.tsx","../src/lp/organisms/Section/Section.tsx","../src/lp/organisms/Spec/Spec.tsx","../src/lp/organisms/Cta/Cta.tsx","../src/lp/organisms/Faq/Faq.tsx","../src/lp/organisms/Blank/Blank.tsx","../src/lp/templates/LpTemplate/LpTemplate.tsx","../src/lp/templates/ProductLpTemplate/ProductLpTemplate.tsx","../src/theme/index.ts"],"names":["React","variantStyles","jsxs","jsx","sizeStyles","backgroundStyles","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Futsuno Design System - Color Tokens\n * Extracted from Figma Design System\n */\n\nexport const colors = {\n /** Primary black color - #040404 */\n black: '#040404',\n\n /** Primary white color - #FFFFFF */\n white: '#FFFFFF',\n\n /** Gray scale colors */\n gray: {\n /** Dark gray - #464646 - Used for buttons, secondary text */\n 900: '#464646',\n /** Medium gray - #BDC1C2 - Used for borders */\n 400: '#BDC1C2',\n /** Light gray - #E5E6E6 - Used for backgrounds */\n 200: '#E5E6E6',\n /** Lightest gray - #E5E6E6 */\n 100: '#E5E6E6',\n },\n\n /** Background colors */\n background: {\n /** Section background gray - #F2F3F1 */\n gray: '#F2F3F1',\n },\n\n /** Accent colors */\n accent: {\n /** Gold accent - #978E5F - Used for badges, premium elements */\n gold: '#978E5F',\n /** Blue accent - #457D99 */\n blue: '#457D99',\n /** Red accent - #CC5E58 - Used for CTAs, emphasis */\n red: '#CC5E58',\n },\n\n /** Button colors - semantic aliases */\n button: {\n black: '#464646',\n red: '#CC5E58',\n gold: '#978E5F',\n white: '#FFFFFF',\n },\n\n /** Text colors - semantic aliases */\n text: {\n primary: '#040404',\n secondary: '#464646',\n inverse: '#FFFFFF',\n accent: '#CC5E58',\n },\n} as const;\n\n/** Type for color tokens */\nexport type Colors = typeof colors;\n\n/** Flat color palette for CSS variables */\nexport const colorPalette = {\n '--color-black': colors.black,\n '--color-white': colors.white,\n '--color-gray-900': colors.gray[900],\n '--color-gray-400': colors.gray[400],\n '--color-gray-200': colors.gray[200],\n '--color-gray-100': colors.gray[100],\n '--color-background-gray': colors.background.gray,\n '--color-accent-gold': colors.accent.gold,\n '--color-accent-blue': colors.accent.blue,\n '--color-accent-red': colors.accent.red,\n} as const;\n\n","/**\n * Futsuno Design System - Typography Tokens\n * Extracted from Figma Design System\n */\n\n/** Font families */\nexport const fontFamily = {\n /** Primary font - Noto Sans JP */\n primary: '\"Noto Sans JP\", sans-serif',\n /** Secondary font for prices - A-OTF Shuei NGo Kin StdN */\n price: '\"A-OTF Shuei NGo Kin StdN\", \"Noto Sans JP\", sans-serif',\n} as const;\n\n/** Font weights */\nexport const fontWeight = {\n regular: 400,\n medium: 500,\n bold: 700,\n} as const;\n\n/** Typography scale */\nexport const typography = {\n /** Heading 1 - 24px */\n h1: {\n fontSize: '24px',\n lineHeight: 1.55,\n letterSpacing: '0.16em',\n fontWeight: fontWeight.medium,\n fontFamily: fontFamily.primary,\n },\n\n /** Heading 2 - 22px */\n h2: {\n fontSize: '22px',\n lineHeight: 1.55,\n letterSpacing: '0.16em',\n fontWeight: fontWeight.medium,\n fontFamily: fontFamily.primary,\n },\n\n /** Heading 3 - 20px */\n h3: {\n fontSize: '20px',\n lineHeight: 1.35,\n letterSpacing: '0.16em',\n fontWeight: fontWeight.medium,\n fontFamily: fontFamily.primary,\n },\n\n /** Heading 4 - 18px */\n h4: {\n fontSize: '18px',\n lineHeight: 1.45,\n letterSpacing: '0.16em',\n fontWeight: fontWeight.medium,\n fontFamily: fontFamily.primary,\n },\n\n /** Body large - 16px */\n bodyLg: {\n fontSize: '16px',\n lineHeight: 1.95,\n letterSpacing: '0.08em',\n fontWeight: fontWeight.medium,\n fontFamily: fontFamily.primary,\n },\n\n /** Body medium - 15px */\n bodyMd: {\n fontSize: '15px',\n lineHeight: 1.85,\n letterSpacing: '0.08em',\n fontWeight: fontWeight.medium,\n fontFamily: fontFamily.primary,\n },\n\n /** Body small - 13px */\n bodySm: {\n fontSize: '13px',\n lineHeight: 1.85,\n letterSpacing: '0.08em',\n fontWeight: fontWeight.medium,\n fontFamily: fontFamily.primary,\n },\n\n /** Caption large - 12px */\n captionLg: {\n fontSize: '12px',\n lineHeight: 1.45,\n letterSpacing: '0.08em',\n fontWeight: fontWeight.medium,\n fontFamily: fontFamily.primary,\n },\n\n /** Caption medium - 11px */\n captionMd: {\n fontSize: '11px',\n lineHeight: 1.45,\n letterSpacing: '0.08em',\n fontWeight: fontWeight.medium,\n fontFamily: fontFamily.primary,\n },\n\n /** Caption small - 10px */\n captionSm: {\n fontSize: '10px',\n lineHeight: 1.45,\n letterSpacing: '0.08em',\n fontWeight: fontWeight.medium,\n fontFamily: fontFamily.primary,\n },\n\n /** Caption extra small - 8px */\n captionXs: {\n fontSize: '8px',\n lineHeight: 1.45,\n letterSpacing: '0.08em',\n fontWeight: fontWeight.medium,\n fontFamily: fontFamily.primary,\n },\n\n /** Button text - 20px bold */\n buttonLg: {\n fontSize: '20px',\n lineHeight: 1.45,\n letterSpacing: '0.05em',\n fontWeight: fontWeight.bold,\n fontFamily: fontFamily.primary,\n },\n\n /** Button text - 18px bold */\n buttonMd: {\n fontSize: '18px',\n lineHeight: 1.45,\n letterSpacing: '0.05em',\n fontWeight: fontWeight.bold,\n fontFamily: fontFamily.primary,\n },\n\n /** Price text - 25px */\n priceLg: {\n fontSize: '25px',\n lineHeight: 1.45,\n letterSpacing: '0.05em',\n fontWeight: fontWeight.bold,\n fontFamily: fontFamily.price,\n },\n\n /** Price text - 14px */\n priceSm: {\n fontSize: '14px',\n lineHeight: 1.45,\n letterSpacing: '0.05em',\n fontWeight: fontWeight.bold,\n fontFamily: fontFamily.price,\n },\n} as const;\n\n/** Type for typography tokens */\nexport type Typography = typeof typography;\nexport type TypographyKey = keyof Typography;\n\n","/**\n * Futsuno Design System - Spacing Tokens\n * Extracted from Figma Design System\n */\n\n/** Spacing scale in pixels */\nexport const spacing = {\n /** 4px */\n '4': '4px',\n /** 8px */\n '8': '8px',\n /** 12px */\n '12': '12px',\n /** 16px */\n '16': '16px',\n /** 24px */\n '24': '24px',\n /** 32px */\n '32': '32px',\n /** 40px */\n '40': '40px',\n /** 48px */\n '48': '48px',\n} as const;\n\n/** Spacing as numbers (for calculations) */\nexport const spacingValues = {\n '4': 4,\n '8': 8,\n '12': 12,\n '16': 16,\n '24': 24,\n '32': 32,\n '40': 40,\n '48': 48,\n} as const;\n\n/** Border radius tokens */\nexport const borderRadius = {\n /** Button border radius - 3px */\n button: '3px',\n /** Small radius - 2px */\n sm: '2px',\n /** Badge radius - 55px (circular) */\n badge: '55px',\n /** Full circle */\n full: '9999px',\n} as const;\n\n/** Box shadow tokens */\nexport const boxShadow = {\n /** Button shadow */\n button: '0px 4px 16px 0px rgba(4, 4, 4, 0.4)',\n /** None */\n none: 'none',\n} as const;\n\n/** Type for spacing tokens */\nexport type Spacing = typeof spacing;\nexport type SpacingKey = keyof Spacing;\n\n","/**\n * Futsuno Design System - Design Tokens\n * All design tokens extracted from Figma\n */\n\nexport { colors, colorPalette, type Colors } from './colors';\nexport {\n typography,\n fontFamily,\n fontWeight,\n type Typography,\n type TypographyKey,\n} from './typography';\nexport {\n spacing,\n spacingValues,\n borderRadius,\n boxShadow,\n type Spacing,\n type SpacingKey,\n} from './spacing';\n\n// Re-import for combined tokens object\nimport { colors } from './colors';\nimport { typography } from './typography';\nimport { spacing, borderRadius, boxShadow } from './spacing';\n\n/** Combined tokens object for convenience */\nexport const tokens = {\n colors,\n typography,\n spacing,\n borderRadius,\n boxShadow,\n} as const;\n\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Utility function to merge Tailwind CSS classes\n * Combines clsx and tailwind-merge for optimal class handling\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n","import React from 'react';\nimport { cn } from '../../../utils/cn';\n\nexport type ButtonVariant = 'black' | 'red' | 'gold' | 'white';\nexport type ButtonSize = 'lg' | 'md';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Button color variant */\n variant?: ButtonVariant;\n /** Button size */\n size?: ButtonSize;\n /** Whether to show arrow icon */\n showArrow?: boolean;\n /** Full width button */\n fullWidth?: boolean;\n /** Children elements */\n children: React.ReactNode;\n}\n\nconst variantStyles: Record<ButtonVariant, string> = {\n black: 'bg-[#464646] text-white border-transparent',\n red: 'bg-[#CC5E58] text-white border-transparent',\n gold: 'bg-[#978E5F] text-white border-transparent',\n white: 'bg-white text-[#464646] border-[#BDC1C2]',\n};\n\nconst sizeStyles: Record<ButtonSize, string> = {\n lg: 'px-[24px] py-[24px] text-[20px]',\n md: 'px-[24px] py-[16px] text-[18px]',\n};\n\n/**\n * Button component for LP pages\n * Supports black, red, gold, and white variants\n */\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n variant = 'black',\n size = 'lg',\n showArrow = true,\n fullWidth = false,\n className,\n children,\n ...props\n },\n ref\n ) => {\n return (\n <button\n ref={ref}\n className={cn(\n // Base styles\n 'relative inline-flex items-center justify-center',\n 'font-bold font-[\"Noto_Sans_JP\",sans-serif]',\n 'rounded-[3px] border border-solid',\n 'shadow-[0px_4px_16px_0px_rgba(4,4,4,0.4)]',\n 'tracking-[0.05em] leading-[1.45]',\n 'transition-opacity hover:opacity-90',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n // Variant styles\n variantStyles[variant],\n // Size styles\n sizeStyles[size],\n // Full width\n fullWidth && 'w-full',\n className\n )}\n {...props}\n >\n <span className=\"flex-1 text-center\">{children}</span>\n {showArrow && (\n <span className=\"absolute right-[24px] top-1/2 -translate-y-1/2\">\n <ArrowIcon variant={variant} />\n </span>\n )}\n </button>\n );\n }\n);\n\nButton.displayName = 'Button';\n\n/** Arrow icon for button */\nfunction ArrowIcon({ variant }: { variant: ButtonVariant }) {\n const color = variant === 'white' ? '#464646' : '#FFFFFF';\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"-rotate-90\"\n >\n <path\n d=\"M12 6L12 17\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M7 13L12 18L17 13\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport default Button;\n\n","import React from 'react';\nimport { cn } from '../../../utils/cn';\n\nexport type AnchorButtonVariant = 'outline' | 'filled';\n\nexport interface AnchorButtonProps\n extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n /** Button style variant */\n variant?: AnchorButtonVariant;\n /** Whether text wraps to multiple lines */\n multiline?: boolean;\n /** Children elements */\n children: React.ReactNode;\n}\n\nconst variantStyles: Record<AnchorButtonVariant, string> = {\n outline: 'bg-white text-[#040404] border-[#464646]',\n filled: 'bg-[#464646] text-white border-[#464646]',\n};\n\n/**\n * Anchor Button component for page navigation within LP\n * Used for linking to different sections\n */\nexport const AnchorButton = React.forwardRef<\n HTMLAnchorElement,\n AnchorButtonProps\n>(({ variant = 'outline', multiline = false, className, children, ...props }, ref) => {\n return (\n <a\n ref={ref}\n className={cn(\n // Base styles\n 'inline-flex items-center justify-between gap-[16px]',\n 'font-[\"Noto_Sans_JP\",sans-serif] font-bold',\n 'text-[15px] leading-[1.8] tracking-[0.08em]',\n 'px-[16px] py-[16px] md:px-[24px]',\n 'rounded-[3px] border border-solid',\n 'transition-opacity hover:opacity-80',\n 'cursor-pointer no-underline',\n // Variant styles\n variantStyles[variant],\n // Width handling\n !multiline && 'whitespace-nowrap',\n className\n )}\n {...props}\n >\n <span className=\"flex-1\">{children}</span>\n <ChevronDownIcon variant={variant} />\n </a>\n );\n});\n\nAnchorButton.displayName = 'AnchorButton';\n\n/** Chevron down icon for anchor button */\nfunction ChevronDownIcon({ variant }: { variant: AnchorButtonVariant }) {\n const color = variant === 'outline' ? '#040404' : '#FFFFFF';\n return (\n <svg\n width=\"12\"\n height=\"6\"\n viewBox=\"0 0 12 6\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"shrink-0\"\n >\n <path\n d=\"M1 1L6 5L11 1\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport default AnchorButton;\n\n","import React from 'react';\nimport { cn } from '../../../utils/cn';\n\nexport type ImageAspectRatio = '1:1' | '4:3' | '16:9' | 'auto';\n\nexport interface ImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n /** Image aspect ratio */\n aspectRatio?: ImageAspectRatio;\n /** Object fit style */\n objectFit?: 'cover' | 'contain' | 'fill';\n /** Placeholder background color when loading */\n placeholderColor?: string;\n}\n\nconst aspectRatioStyles: Record<ImageAspectRatio, string> = {\n '1:1': 'aspect-square',\n '4:3': 'aspect-[4/3]',\n '16:9': 'aspect-video',\n auto: '',\n};\n\n/**\n * Image component for LP pages\n * Supports various aspect ratios\n */\nexport const Image = React.forwardRef<HTMLImageElement, ImageProps>(\n (\n {\n aspectRatio = 'auto',\n objectFit = 'cover',\n placeholderColor = '#D9D9D9',\n className,\n style,\n alt = '',\n ...props\n },\n ref\n ) => {\n return (\n <div\n className={cn(\n 'relative overflow-hidden',\n aspectRatioStyles[aspectRatio],\n className\n )}\n style={{ backgroundColor: placeholderColor, ...style }}\n >\n <img\n ref={ref}\n alt={alt}\n className={cn(\n 'w-full h-full',\n objectFit === 'cover' && 'object-cover',\n objectFit === 'contain' && 'object-contain',\n objectFit === 'fill' && 'object-fill'\n )}\n {...props}\n />\n </div>\n );\n }\n);\n\nImage.displayName = 'Image';\n\nexport default Image;\n\n","import React from 'react';\nimport { cn } from '../../../utils/cn';\n\nexport interface ProductImageProps\n extends React.ImgHTMLAttributes<HTMLImageElement> {\n /** Product name for alt text */\n productName?: string;\n /** Image size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Whether image is circular (for feature icons) */\n circular?: boolean;\n}\n\nconst sizeStyles: Record<string, string> = {\n sm: 'w-[90px] h-[90px]',\n md: 'w-[100px] h-[100px]',\n lg: 'w-[130px] h-[130px]',\n};\n\n/**\n * Product Image component for LP pages\n * Used for product photos and feature icons\n */\nexport const ProductImage = React.forwardRef<HTMLImageElement, ProductImageProps>(\n (\n {\n productName = 'Product',\n size = 'md',\n circular = false,\n className,\n src,\n ...props\n },\n ref\n ) => {\n const hasImage = Boolean(src);\n\n return (\n <div\n className={cn(\n 'relative overflow-hidden flex-shrink-0',\n sizeStyles[size],\n circular ? 'rounded-full' : 'rounded-[2px]',\n !hasImage && 'bg-[#D4D4D4]',\n className\n )}\n >\n {hasImage && (\n <img\n ref={ref}\n src={src}\n alt={productName}\n className=\"w-full h-full object-cover\"\n {...props}\n />\n )}\n </div>\n );\n }\n);\n\nProductImage.displayName = 'ProductImage';\n\nexport default ProductImage;\n\n","import React from 'react';\nimport { cn } from '../../../utils/cn';\n\nexport type IconName =\n | 'arrow-right'\n | 'arrow-down'\n | 'chevron-down'\n | 'chevron-up'\n | 'check'\n | 'plus'\n | 'minus';\n\nexport interface IconProps extends React.SVGAttributes<SVGElement> {\n /** Icon name */\n name: IconName;\n /** Icon size in pixels */\n size?: number;\n /** Icon color */\n color?: string;\n}\n\nconst iconPaths: Record<IconName, React.ReactNode> = {\n 'arrow-right': (\n <>\n <path d=\"M6 12H17\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <path\n d=\"M13 7L18 12L13 17\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </>\n ),\n 'arrow-down': (\n <>\n <path d=\"M12 6V17\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <path\n d=\"M7 13L12 18L17 13\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </>\n ),\n 'chevron-down': (\n <path\n d=\"M6 9L12 15L18 9\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n ),\n 'chevron-up': (\n <path\n d=\"M6 15L12 9L18 15\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n ),\n check: (\n <path\n d=\"M5 12L10 17L19 7\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n ),\n plus: (\n <>\n <path d=\"M12 5V19\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <path d=\"M5 12H19\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </>\n ),\n minus: <path d=\"M5 12H19\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />,\n};\n\n/**\n * Icon component for LP pages\n * Provides common icons used in LP designs\n */\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ name, size = 24, color = 'currentColor', className, ...props }, ref) => {\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={color}\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn('inline-block', className)}\n {...props}\n >\n {iconPaths[name]}\n </svg>\n );\n }\n);\n\nIcon.displayName = 'Icon';\n\nexport default Icon;\n\n","import React from 'react';\nimport { cn } from '../../../utils/cn';\n\nexport type TextVariant =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'body-lg'\n | 'body-md'\n | 'body-sm'\n | 'caption-lg'\n | 'caption-md'\n | 'caption-sm'\n | 'caption-xs';\n\nexport type TextColor =\n | 'primary'\n | 'secondary'\n | 'inverse'\n | 'accent'\n | 'gold'\n | 'inherit';\n\nexport type TextAlign = 'left' | 'center' | 'right' | 'justify';\n\nexport interface TextProps extends React.HTMLAttributes<HTMLElement> {\n /** Typography variant */\n variant?: TextVariant;\n /** Text color */\n color?: TextColor;\n /** Text alignment */\n align?: TextAlign;\n /** HTML tag to render */\n as?: keyof JSX.IntrinsicElements;\n /** Font weight override */\n weight?: 'regular' | 'medium' | 'bold';\n /** Children elements */\n children: React.ReactNode;\n}\n\nconst variantStyles: Record<TextVariant, string> = {\n h1: 'text-[24px] leading-[1.55] tracking-[0.16em] font-medium',\n h2: 'text-[22px] leading-[1.55] tracking-[0.16em] font-medium',\n h3: 'text-[20px] leading-[1.35] tracking-[0.16em] font-medium',\n h4: 'text-[18px] leading-[1.45] tracking-[0.16em] font-medium',\n 'body-lg': 'text-[16px] leading-[1.95] tracking-[0.08em] font-medium',\n 'body-md': 'text-[15px] leading-[1.85] tracking-[0.08em] font-medium',\n 'body-sm': 'text-[13px] leading-[1.85] tracking-[0.08em] font-medium',\n 'caption-lg': 'text-[12px] leading-[1.45] tracking-[0.08em] font-medium',\n 'caption-md': 'text-[11px] leading-[1.45] tracking-[0.08em] font-medium',\n 'caption-sm': 'text-[10px] leading-[1.45] tracking-[0.08em] font-medium',\n 'caption-xs': 'text-[8px] leading-[1.45] tracking-[0.08em] font-medium',\n};\n\nconst colorStyles: Record<TextColor, string> = {\n primary: 'text-[#040404]',\n secondary: 'text-[#464646]',\n inverse: 'text-white',\n accent: 'text-[#CC5E58]',\n gold: 'text-[#978E5F]',\n inherit: 'text-inherit',\n};\n\nconst alignStyles: Record<TextAlign, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n justify: 'text-justify',\n};\n\nconst weightStyles: Record<string, string> = {\n regular: 'font-normal',\n medium: 'font-medium',\n bold: 'font-bold',\n};\n\nconst defaultTags: Record<TextVariant, keyof JSX.IntrinsicElements> = {\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n h4: 'h4',\n 'body-lg': 'p',\n 'body-md': 'p',\n 'body-sm': 'p',\n 'caption-lg': 'span',\n 'caption-md': 'span',\n 'caption-sm': 'span',\n 'caption-xs': 'span',\n};\n\n/**\n * Text component for LP pages\n * Provides consistent typography across the design system\n */\nexport const Text = React.forwardRef<HTMLElement, TextProps>(\n (\n {\n variant = 'body-md',\n color = 'primary',\n align = 'left',\n as,\n weight,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const Component = as || defaultTags[variant];\n\n return React.createElement(\n Component,\n {\n ref,\n className: cn(\n 'font-[\"Noto_Sans_JP\",sans-serif]',\n variantStyles[variant],\n colorStyles[color],\n alignStyles[align],\n weight && weightStyles[weight],\n className\n ),\n ...props,\n },\n children\n );\n }\n);\n\nText.displayName = 'Text';\n\nexport default Text;\n\n","import React from 'react';\nimport { cn } from '../../../utils/cn';\n\nexport interface UserVoiceProps extends React.HTMLAttributes<HTMLDivElement> {\n /** User avatar image URL */\n avatarSrc?: string;\n /** User name or identifier */\n userName?: string;\n /** User attribute (e.g., age, occupation) */\n userAttribute?: string;\n /** Review/testimonial content */\n content: string;\n /** Star rating (1-5) */\n rating?: number;\n}\n\n/**\n * UserVoice component for LP pages\n * Displays user reviews and testimonials\n */\nexport const UserVoice = React.forwardRef<HTMLDivElement, UserVoiceProps>(\n (\n {\n avatarSrc,\n userName = 'お客様',\n userAttribute,\n content,\n rating = 5,\n className,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex flex-col gap-[16px] p-[24px]',\n 'bg-white rounded-[2px]',\n 'font-[\"Noto_Sans_JP\",sans-serif]',\n className\n )}\n {...props}\n >\n {/* User info */}\n <div className=\"flex items-center gap-[12px]\">\n {/* Avatar */}\n <div\n className={cn(\n 'w-[48px] h-[48px] rounded-full flex-shrink-0 overflow-hidden',\n !avatarSrc && 'bg-[#D4D4D4]'\n )}\n >\n {avatarSrc && (\n <img\n src={avatarSrc}\n alt={userName}\n className=\"w-full h-full object-cover\"\n />\n )}\n </div>\n\n {/* Name and attribute */}\n <div className=\"flex flex-col gap-[4px]\">\n <span className=\"text-[14px] font-medium text-[#040404] leading-[1.45] tracking-[0.08em]\">\n {userName}\n </span>\n {userAttribute && (\n <span className=\"text-[12px] font-medium text-[#464646] leading-[1.45] tracking-[0.08em]\">\n {userAttribute}\n </span>\n )}\n </div>\n </div>\n\n {/* Rating stars */}\n {rating > 0 && (\n <div className=\"flex gap-[4px]\">\n {Array.from({ length: 5 }).map((_, i) => (\n <StarIcon key={i} filled={i < rating} />\n ))}\n </div>\n )}\n\n {/* Content */}\n <p className=\"text-[13px] font-medium text-[#040404] leading-[1.85] tracking-[0.08em]\">\n {content}\n </p>\n </div>\n );\n }\n);\n\nUserVoice.displayName = 'UserVoice';\n\n/** Star icon for rating */\nfunction StarIcon({ filled }: { filled: boolean }) {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill={filled ? '#978E5F' : 'none'}\n stroke={filled ? '#978E5F' : '#BDC1C2'}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8 1L10.163 5.279L15 5.94L11.5 9.318L12.326 14L8 11.779L3.674 14L4.5 9.318L1 5.94L5.837 5.279L8 1Z\"\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport default UserVoice;\n\n","import React, { useState } from 'react';\nimport { cn } from '../../../utils/cn';\n\nexport interface FaqPartsProps extends React.HTMLAttributes<HTMLDivElement> {\n /** FAQ question */\n question: string;\n /** FAQ answer */\n answer: string;\n /** Whether the FAQ item is initially open */\n defaultOpen?: boolean;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n}\n\n/**\n * FaqParts component for LP pages\n * Accordion-style FAQ item with question and answer\n */\nexport const FaqParts = React.forwardRef<HTMLDivElement, FaqPartsProps>(\n (\n {\n question,\n answer,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n className,\n ...props\n },\n ref\n ) => {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isOpen = controlledOpen !== undefined ? controlledOpen : internalOpen;\n\n const handleToggle = () => {\n const newOpen = !isOpen;\n setInternalOpen(newOpen);\n onOpenChange?.(newOpen);\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n 'border-b border-[#E5E6E6]',\n 'font-[\"Noto_Sans_JP\",sans-serif]',\n className\n )}\n {...props}\n >\n {/* Question */}\n <button\n type=\"button\"\n onClick={handleToggle}\n className={cn(\n 'w-full flex items-center justify-between gap-[16px]',\n 'py-[16px] px-[8px]',\n 'text-left cursor-pointer',\n 'transition-colors hover:bg-[#F2F3F1]'\n )}\n aria-expanded={isOpen}\n >\n <div className=\"flex items-start gap-[12px]\">\n <span className=\"text-[15px] font-bold text-[#978E5F] leading-[1.45] tracking-[0.08em]\">\n Q\n </span>\n <span className=\"text-[15px] font-medium text-[#040404] leading-[1.8] tracking-[0.08em]\">\n {question}\n </span>\n </div>\n <ChevronIcon isOpen={isOpen} />\n </button>\n\n {/* Answer */}\n <div\n className={cn(\n 'grid transition-[grid-template-rows] duration-300 ease-in-out',\n isOpen ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\n )}\n >\n <div className=\"overflow-hidden\">\n <div className=\"flex items-start gap-[12px] py-[16px] px-[8px]\">\n <span className=\"text-[15px] font-bold text-[#CC5E58] leading-[1.45] tracking-[0.08em]\">\n A\n </span>\n <p className=\"text-[13px] font-medium text-[#464646] leading-[1.85] tracking-[0.08em]\">\n {answer}\n </p>\n </div>\n </div>\n </div>\n </div>\n );\n }\n);\n\nFaqParts.displayName = 'FaqParts';\n\n/** Chevron icon for toggle */\nfunction ChevronIcon({ isOpen }: { isOpen: boolean }) {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"#464646\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\n 'flex-shrink-0 transition-transform duration-300',\n isOpen && 'rotate-180'\n )}\n >\n <path\n d=\"M6 9L12 15L18 9\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport default FaqParts;\n\n","import React from 'react';\nimport { cn } from '../../../utils/cn';\n\nexport interface Badge {\n /** Badge title (top line) */\n title: string;\n /** Badge main text (can be multi-line) */\n text: string;\n /** Badge footnote reference (e.g., \"※1\") */\n footnote?: string;\n}\n\nexport interface KeyVisualProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Background image URL */\n backgroundImage?: string;\n /** Main copy lines (displayed with white background) */\n copyLines?: string[];\n /** Achievement badges (up to 3) */\n badges?: Badge[];\n /** Footnotes for badges */\n footnotes?: string[];\n /** Whether to show video instead of image */\n isVideo?: boolean;\n /** Video source URL (if isVideo is true) */\n videoSrc?: string;\n}\n\n/**\n * KeyVisual (MV) component for LP pages\n * Main hero section with background image, copy, and achievement badges\n */\nexport const KeyVisual = React.forwardRef<HTMLDivElement, KeyVisualProps>(\n (\n {\n backgroundImage,\n copyLines = [],\n badges = [],\n footnotes = [],\n isVideo = false,\n videoSrc,\n className,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'relative w-full min-h-[548px] overflow-hidden',\n 'flex flex-col',\n 'font-[\"Noto_Sans_JP\",sans-serif]',\n className\n )}\n {...props}\n >\n {/* Background */}\n <div className=\"absolute inset-0\">\n {isVideo && videoSrc ? (\n <video\n src={videoSrc}\n autoPlay\n loop\n muted\n playsInline\n className=\"w-full h-full object-cover\"\n />\n ) : backgroundImage ? (\n <img\n src={backgroundImage}\n alt=\"Key Visual\"\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <div className=\"w-full h-full bg-[#D9D9D9]\" />\n )}\n </div>\n\n {/* Content */}\n <div className=\"relative flex-1 flex flex-col justify-between px-[20px] pt-[40px] pb-[20px]\">\n {/* Main copy */}\n {copyLines.length > 0 && (\n <div className=\"flex flex-col gap-[8px] items-start\">\n {copyLines.map((line, index) => (\n <div\n key={index}\n className=\"bg-white px-[8px] pt-[4px] pb-[8px]\"\n >\n <span className=\"text-[24px] font-medium text-[#040404] leading-[1.55] tracking-[0.16em]\">\n {line}\n </span>\n </div>\n ))}\n </div>\n )}\n\n {/* Bottom section with badges and footnotes */}\n <div className=\"flex flex-col gap-[10px]\">\n {/* Badges */}\n {badges.length > 0 && (\n <div className=\"flex items-center justify-between\">\n {badges.map((badge, index) => (\n <BadgeItem key={index} badge={badge} />\n ))}\n </div>\n )}\n\n {/* Footnotes */}\n {footnotes.length > 0 && (\n <div className=\"text-[10px] font-normal text-[#464646] leading-[1.5]\">\n {footnotes.map((footnote, index) => (\n <p key={index} className=\"m-0\">\n {footnote}\n </p>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n }\n);\n\nKeyVisual.displayName = 'KeyVisual';\n\n/** Badge item component */\nfunction BadgeItem({ badge }: { badge: Badge }) {\n return (\n <div className=\"relative flex flex-col gap-[10px] items-start w-[106px]\">\n <div\n className={cn(\n 'size-[106px] rounded-full',\n 'bg-white border border-[#978E5F]',\n 'flex flex-col items-center justify-center',\n 'relative'\n )}\n >\n {/* Decorative inner circle */}\n <div className=\"absolute inset-[2px] rounded-full border border-dashed border-[#978E5F] opacity-50\" />\n\n {/* Badge content */}\n <span className=\"text-[12px] font-bold text-[#978E5F] leading-[1.45] tracking-[0.05em] text-center\">\n {badge.title}\n </span>\n <div className=\"text-[15px] font-bold text-[#978E5F] leading-[1.45] tracking-[0.05em] text-center whitespace-pre-line\">\n {badge.text}\n </div>\n </div>\n\n {/* Footnote reference */}\n {badge.footnote && (\n <span className=\"absolute -right-[0.5px] top-0 text-[7.7px] font-normal text-[#464646] leading-none tracking-[0.05em]\">\n {badge.footnote}\n </span>\n )}\n </div>\n );\n}\n\nexport default KeyVisual;\n\n","import React from 'react';\nimport { cn } from '../../../utils/cn';\n\nexport type SectionBackground = 'white' | 'gray' | 'gold' | 'custom';\n\nexport interface SectionProps extends React.HTMLAttributes<HTMLElement> {\n /** Section title */\n title?: string;\n /** Section subtitle */\n subtitle?: string;\n /** Background style */\n background?: SectionBackground;\n /** Custom background color (when background is 'custom') */\n customBgColor?: string;\n /** Padding size */\n padding?: 'sm' | 'md' | 'lg';\n /** Whether content should be centered */\n centered?: boolean;\n /** Maximum content width */\n maxWidth?: 'sm' | 'md' | 'lg' | 'full';\n /** Children elements */\n children: React.ReactNode;\n}\n\nconst backgroundStyles: Record<SectionBackground, string> = {\n white: 'bg-white',\n gray: 'bg-[#F2F3F1]',\n gold: 'bg-[#978E5F]',\n custom: '',\n};\n\nconst paddingStyles: Record<string, string> = {\n sm: 'py-[24px] px-[20px]',\n md: 'py-[48px] px-[20px]',\n lg: 'py-[64px] px-[20px]',\n};\n\nconst maxWidthStyles: Record<string, string> = {\n sm: 'max-w-[335px]',\n md: 'max-w-[375px]',\n lg: 'max-w-[500px]',\n full: 'max-w-full',\n};\n\n/**\n * Section component for LP pages\n * Generic container for organizing content sections\n */\nexport const Section = React.forwardRef<HTMLElement, SectionProps>(\n (\n {\n title,\n subtitle,\n background = 'white',\n customBgColor,\n padding = 'md',\n centered = true,\n maxWidth = 'md',\n className,\n style,\n children,\n ...props\n },\n ref\n ) => {\n return (\n <section\n ref={ref}\n className={cn(\n 'w-full',\n 'font-[\"Noto_Sans_JP\",sans-serif]',\n backgroundStyles[background],\n paddingStyles[padding],\n className\n )}\n style={{\n backgroundColor:\n background === 'custom' ? customBgColor : undefined,\n ...style,\n }}\n {...props}\n >\n <div\n className={cn(\n 'w-full mx-auto',\n maxWidthStyles[maxWidth],\n centered && 'flex flex-col items-center'\n )}\n >\n {/* Section header */}\n {(title || subtitle) && (\n <div\n className={cn(\n 'flex flex-col gap-[8px] mb-[24px]',\n centered && 'items-center text-center'\n )}\n >\n {title && (\n <h2\n className={cn(\n 'text-[22px] font-medium leading-[1.55] tracking-[0.16em]',\n background === 'gold' ? 'text-white' : 'text-[#040404]'\n )}\n >\n {title}\n </h2>\n )}\n {subtitle && (\n <p\n className={cn(\n 'text-[13px] font-medium leading-[1.85] tracking-[0.08em]',\n background === 'gold' ? 'text-white' : 'text-[#464646]'\n )}\n >\n {subtitle}\n </p>\n )}\n </div>\n )}\n\n {/* Section content */}\n <div className={cn('w-full', centered && 'flex flex-col items-center')}>\n {children}\n </div>\n </div>\n </section>\n );\n }\n);\n\nSection.displayName = 'Section';\n\nexport default Section;\n\n","import React from 'react';\nimport { cn } from '../../../utils/cn';\n\nexport interface SpecItem {\n /** Spec label */\n label: string;\n /** Spec value */\n value: string;\n}\n\nexport interface SpecProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Product name */\n productName?: string;\n /** Product image URL */\n productImage?: string;\n /** Spec items list */\n items?: SpecItem[];\n /** Ingredients or additional info */\n ingredients?: string;\n /** Notes or warnings */\n notes?: string[];\n}\n\n/**\n * Spec component for LP pages\n * Displays product specifications in a table format\n */\nexport const Spec = React.forwardRef<HTMLDivElement, SpecProps>(\n (\n {\n productName,\n productImage,\n items = [],\n ingredients,\n notes = [],\n className,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'w-full bg-white rounded-[2px] overflow-hidden',\n 'font-[\"Noto_Sans_JP\",sans-serif]',\n className\n )}\n {...props}\n >\n {/* Product image */}\n {productImage && (\n <div className=\"w-full aspect-[4/3] bg-[#D9D9D9]\">\n <img\n src={productImage}\n alt={productName || 'Product'}\n className=\"w-full h-full object-cover\"\n />\n </div>\n )}\n\n {/* Content */}\n <div className=\"p-[24px] flex flex-col gap-[16px]\">\n {/* Product name */}\n {productName && (\n <h3 className=\"text-[18px] font-medium text-[#040404] leading-[1.45] tracking-[0.16em] text-center\">\n {productName}\n </h3>\n )}\n\n {/* Spec table */}\n {items.length > 0 && (\n <table className=\"w-full border-collapse\">\n <tbody>\n {items.map((item, index) => (\n <tr key={index} className=\"border-b border-[#E5E6E6]\">\n <th className=\"py-[12px] px-[8px] text-left text-[13px] font-medium text-[#464646] leading-[1.85] tracking-[0.08em] w-[100px]\">\n {item.label}\n </th>\n <td className=\"py-[12px] px-[8px] text-[13px] font-medium text-[#040404] leading-[1.85] tracking-[0.08em]\">\n {item.value}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n )}\n\n {/* Ingredients */}\n {ingredients && (\n <div className=\"pt-[16px] border-t border-[#E5E6E6]\">\n <p className=\"text-[12px] font-medium text-[#464646] leading-[1.5] tracking-[0.08em]\">\n <span className=\"font-bold\">原材料:</span>\n {ingredients}\n </p>\n </div>\n )}\n\n {/* Notes */}\n {notes.length > 0 && (\n <div className=\"flex flex-col gap-[4px]\">\n {notes.map((note, index) => (\n <p\n key={index}\n className=\"text-[10px] font-medium text-[#464646] leading-[1.5] tracking-[0.08em]\"\n >\n {note}\n </p>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nSpec.displayName = 'Spec';\n\nexport default Spec;\n\n","import React from 'react';\nimport { cn } from '../../../utils/cn';\nimport { Button, type ButtonVariant } from '../../atoms/Button';\n\nexport interface ProductOption {\n /** Option label (e.g., \"2本セット\") */\n label: string;\n /** Discount text (e.g., \"10%OFF\") */\n discount?: string;\n /** Price per unit */\n pricePerUnit?: string;\n /** Total price */\n totalPrice?: string;\n /** Quantity info (e.g., \"150ml×2\") */\n quantity?: string;\n /** Product image URL */\n image?: string;\n}\n\nexport interface CtaProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Background color variant */\n background?: 'gold' | 'gray';\n /** Main product image URL */\n productImage?: string;\n /** Product name */\n productName?: string;\n /** Product price */\n productPrice?: string;\n /** Product quantity info */\n productQuantity?: string;\n /** Feature badges (circular images with text) */\n features?: Array<{\n image?: string;\n text: string;\n }>;\n /** Promotion label (e.g., \"本ページ限定!\") */\n promotionLabel?: string;\n /** Promotion title lines */\n promotionTitle?: string[];\n /** Product options for bulk purchase */\n productOptions?: ProductOption[];\n /** Note text */\n note?: string;\n /** CTA message */\n ctaMessage?: string;\n /** Button text */\n buttonText?: string;\n /** Button variant */\n buttonVariant?: ButtonVariant;\n /** Button click handler */\n onButtonClick?: () => void;\n /** Footer link text */\n footerLinkText?: string;\n /** Footer link URL */\n footerLinkHref?: string;\n}\n\nconst backgroundStyles = {\n gold: 'bg-[#978E5F]',\n gray: 'bg-[#F2F3F1]',\n};\n\n/**\n * CTA component for LP pages\n * Purchase call-to-action section with product details and options\n */\nexport const Cta = React.forwardRef<HTMLDivElement, CtaProps>(\n (\n {\n background = 'gold',\n productImage,\n productName,\n productPrice,\n productQuantity,\n features = [],\n promotionLabel,\n promotionTitle = [],\n productOptions = [],\n note,\n ctaMessage,\n buttonText = '購入する',\n buttonVariant = 'red',\n onButtonClick,\n footerLinkText,\n footerLinkHref,\n className,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'w-full py-[48px] px-[20px]',\n 'font-[\"Noto_Sans_JP\",sans-serif]',\n backgroundStyles[background],\n className\n )}\n {...props}\n >\n <div className=\"w-full max-w-[375px] mx-auto\">\n {/* Main card */}\n <div className=\"bg-white rounded-[2px] overflow-hidden\">\n {/* Product image */}\n {productImage && (\n <div className=\"w-full aspect-[4/3] bg-[#D9D9D9]\">\n <img\n src={productImage}\n alt={productName || 'Product'}\n className=\"w-full h-full object-cover\"\n />\n </div>\n )}\n\n {/* Features */}\n {features.length > 0 && (\n <div className=\"flex justify-center gap-[8px] py-[24px] px-[16px]\">\n {features.map((feature, index) => (\n <div\n key={index}\n className=\"flex flex-col items-center gap-[8px] w-[101px]\"\n >\n <div\n className={cn(\n 'size-[90px] rounded-full',\n !feature.image && 'bg-[#D4D4D4]'\n )}\n >\n {feature.image && (\n <img\n src={feature.image}\n alt=\"\"\n className=\"w-full h-full object-cover rounded-full\"\n />\n )}\n </div>\n <span className=\"text-[13px] font-medium text-[#040404] leading-[1.2] tracking-[0.08em] text-center\">\n {feature.text}\n </span>\n </div>\n ))}\n </div>\n )}\n\n {/* Product info */}\n <div className=\"px-[16px] pb-[24px]\">\n {/* Product details */}\n <div className=\"flex gap-[24px] items-center mb-[24px]\">\n {productImage && (\n <div className=\"w-[130px] aspect-square bg-[#D9D9D9] flex-shrink-0\">\n <img\n src={productImage}\n alt={productName || ''}\n className=\"w-full h-full object-cover\"\n />\n </div>\n )}\n <div className=\"flex flex-col gap-[8px]\">\n {productName && (\n <span className=\"text-[16px] font-bold text-[#040404] leading-[1.5] tracking-[0.05em]\">\n {productName}\n </span>\n )}\n {productPrice && (\n <span className=\"text-[25px] font-bold text-[#040404] leading-[1.45] tracking-[0.05em]\">\n {productPrice}\n <span className=\"text-[12px]\">[税込]</span>\n </span>\n )}\n {productQuantity && (\n <span className=\"text-[13px] font-bold text-[#040404] leading-[1.8] tracking-[0.05em]\">\n {productQuantity}\n </span>\n )}\n </div>\n </div>\n\n {/* Promotion box */}\n {(promotionLabel || promotionTitle.length > 0) && (\n <div className=\"bg-[#F2F3F1] rounded-[2px] p-[16px] mb-[24px]\">\n {/* Promotion header */}\n <div className=\"flex flex-col items-center gap-[8px] mb-[16px]\">\n {promotionLabel && (\n <span className=\"bg-[#CC5E58] text-white text-[13px] font-bold px-[8px] py-[4px] leading-[1.55] tracking-[0.05em]\">\n {promotionLabel}\n </span>\n )}\n {promotionTitle.map((line, index) => (\n <span\n key={index}\n className={cn(\n 'font-bold leading-[1.55] text-center',\n index === 0\n ? 'text-[18px] text-[#040404] tracking-[0.05em]'\n : 'text-[22px] text-[#CC5E58] tracking-[0.05em]'\n )}\n >\n {line}\n </span>\n ))}\n </div>\n\n {/* Product options */}\n {productOptions.length > 0 && (\n <div className=\"flex flex-col gap-[16px]\">\n {productOptions.map((option, index) => (\n <div key={index} className=\"flex gap-[16px] items-center\">\n <div\n className={cn(\n 'w-[100px] aspect-square flex-shrink-0',\n !option.image && 'bg-[#D9D9D9]'\n )}\n >\n {option.image && (\n <img\n src={option.image}\n alt=\"\"\n className=\"w-full h-full object-cover\"\n />\n )}\n </div>\n <div className=\"flex flex-col gap-[4px]\">\n <div className=\"flex gap-[5px] items-start\">\n <span className=\"text-[14px] font-bold text-[#040404] leading-[1.45] tracking-[0.05em]\">\n {option.label}\n </span>\n {option.discount && (\n <span className=\"text-[14px] font-bold text-[#CC5E58] leading-[1.45] tracking-[0.05em]\">\n {option.discount}\n </span>\n )}\n </div>\n {option.pricePerUnit && (\n <span className=\"text-[25px] font-bold text-[#040404] leading-[1.45] tracking-[0.05em]\">\n {option.pricePerUnit}\n <span className=\"text-[12px]\">/本[税込]</span>\n </span>\n )}\n <div className=\"flex gap-[4px] text-[12px] font-bold text-[#040404] tracking-[0.05em]\">\n {option.quantity && <span>{option.quantity}</span>}\n {option.totalPrice && (\n <span>\n {option.totalPrice}\n <span className=\"text-[9px]\">[税込]</span>\n </span>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Note */}\n {note && (\n <p className=\"text-[12px] font-medium text-[#464646] leading-[1.5] tracking-[0.08em] text-center mb-[16px]\">\n {note}\n </p>\n )}\n </div>\n\n {/* CTA section */}\n <div className=\"px-[16px] pb-[24px] flex flex-col items-center gap-[16px]\">\n {ctaMessage && (\n <p className=\"text-[15px] font-bold text-[#CC5E58] leading-[1.8] tracking-[0.08em] text-center\">\n {ctaMessage}\n </p>\n )}\n\n <Button\n variant={buttonVariant}\n size=\"md\"\n fullWidth\n onClick={onButtonClick}\n className=\"max-w-[310px]\"\n >\n {buttonText}\n </Button>\n\n {footerLinkText && (\n <a\n href={footerLinkHref || '#'}\n className=\"text-[12px] font-medium text-[#040404] leading-[1.5] tracking-[0.05em] underline\"\n >\n {footerLinkText}\n </a>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n }\n);\n\nCta.displayName = 'Cta';\n\nexport default Cta;\n\n","import React from 'react';\nimport { cn } from '../../../utils/cn';\nimport { FaqParts } from '../../molecules/FaqParts';\n\nexport interface FaqItem {\n /** Question */\n question: string;\n /** Answer */\n answer: string;\n /** Whether initially open */\n defaultOpen?: boolean;\n}\n\nexport interface FaqProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Section title */\n title?: string;\n /** FAQ items */\n items?: FaqItem[];\n /** Background variant */\n background?: 'white' | 'gray';\n}\n\nconst backgroundStyles = {\n white: 'bg-white',\n gray: 'bg-[#F2F3F1]',\n};\n\n/**\n * FAQ component for LP pages\n * Accordion-style FAQ section\n */\nexport const Faq = React.forwardRef<HTMLDivElement, FaqProps>(\n (\n {\n title = 'よくあるご質問',\n items = [],\n background = 'white',\n className,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'w-full py-[48px] px-[20px]',\n 'font-[\"Noto_Sans_JP\",sans-serif]',\n backgroundStyles[background],\n className\n )}\n {...props}\n >\n <div className=\"w-full max-w-[375px] mx-auto\">\n {/* Section title */}\n {title && (\n <h2 className=\"text-[22px] font-medium text-[#040404] leading-[1.55] tracking-[0.16em] text-center mb-[24px]\">\n {title}\n </h2>\n )}\n\n {/* FAQ items */}\n <div className=\"border-t border-[#E5E6E6]\">\n {items.map((item, index) => (\n <FaqParts\n key={index}\n question={item.question}\n answer={item.answer}\n defaultOpen={item.defaultOpen}\n />\n ))}\n </div>\n </div>\n </div>\n );\n }\n);\n\nFaq.displayName = 'Faq';\n\nexport default Faq;\n\n","import React from 'react';\nimport { cn } from '../../../utils/cn';\n\nexport type BlankSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type BlankBackground = 'transparent' | 'white' | 'gray';\n\nexport interface BlankProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Blank space size */\n size?: BlankSize;\n /** Custom height in pixels */\n height?: number;\n /** Background color */\n background?: BlankBackground;\n}\n\nconst sizeStyles: Record<BlankSize, string> = {\n xs: 'h-[16px]',\n sm: 'h-[24px]',\n md: 'h-[48px]',\n lg: 'h-[64px]',\n xl: 'h-[96px]',\n};\n\nconst backgroundStyles: Record<BlankBackground, string> = {\n transparent: 'bg-transparent',\n white: 'bg-white',\n gray: 'bg-[#F2F3F1]',\n};\n\n/**\n * Blank component for LP pages\n * Creates vertical spacing between sections\n */\nexport const Blank = React.forwardRef<HTMLDivElement, BlankProps>(\n (\n { size = 'md', height, background = 'transparent', className, style, ...props },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'w-full',\n !height && sizeStyles[size],\n backgroundStyles[background],\n className\n )}\n style={{\n height: height ? `${height}px` : undefined,\n ...style,\n }}\n {...props}\n />\n );\n }\n);\n\nBlank.displayName = 'Blank';\n\nexport default Blank;\n\n","import React from 'react';\nimport { cn } from '../../../utils/cn';\n\nexport interface LpSection {\n /** Unique section ID */\n id: string;\n /** Section component to render */\n component: React.ReactNode;\n}\n\nexport interface LpTemplateProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Array of sections to render */\n sections?: LpSection[];\n /** Maximum width of the LP container */\n maxWidth?: number;\n /** Whether to center the LP */\n centered?: boolean;\n /** Children elements (alternative to sections) */\n children?: React.ReactNode;\n}\n\n/**\n * LpTemplate component\n * Base template for LP pages with mobile-first responsive design\n * Standard LP width: 375px (mobile-first)\n */\nexport const LpTemplate = React.forwardRef<HTMLDivElement, LpTemplateProps>(\n (\n {\n sections = [],\n maxWidth = 375,\n centered = true,\n className,\n style,\n children,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'min-h-screen bg-white',\n 'font-[\"Noto_Sans_JP\",sans-serif]',\n className\n )}\n {...props}\n >\n <div\n className={cn(\n 'w-full',\n centered && 'mx-auto'\n )}\n style={{\n maxWidth: `${maxWidth}px`,\n ...style,\n }}\n >\n {/* Render sections if provided */}\n {sections.length > 0 ? (\n sections.map((section) => (\n <div key={section.id} data-section-id={section.id}>\n {section.component}\n </div>\n ))\n ) : (\n children\n )}\n </div>\n </div>\n );\n }\n);\n\nLpTemplate.displayName = 'LpTemplate';\n\nexport default LpTemplate;\n\n","import React from 'react';\nimport { LpTemplate } from '../LpTemplate';\nimport { KeyVisual, type Badge } from '../../organisms/KeyVisual';\nimport { Cta, type ProductOption } from '../../organisms/Cta';\nimport { Faq, type FaqItem } from '../../organisms/Faq';\nimport { Blank } from '../../organisms/Blank';\n\nexport interface ProductLpTemplateProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Key Visual props */\n keyVisual?: {\n backgroundImage?: string;\n copyLines?: string[];\n badges?: Badge[];\n footnotes?: string[];\n };\n /** Content sections (rendered between KeyVisual and CTA) */\n contentSections?: React.ReactNode;\n /** CTA props */\n cta?: {\n background?: 'gold' | 'gray';\n productImage?: string;\n productName?: string;\n productPrice?: string;\n productQuantity?: string;\n promotionLabel?: string;\n promotionTitle?: string[];\n productOptions?: ProductOption[];\n note?: string;\n ctaMessage?: string;\n buttonText?: string;\n onButtonClick?: () => void;\n footerLinkText?: string;\n footerLinkHref?: string;\n };\n /** FAQ items */\n faqItems?: FaqItem[];\n /** Footer content */\n footer?: React.ReactNode;\n}\n\n/**\n * ProductLpTemplate component\n * Pre-configured template for product landing pages\n * Includes: KeyVisual -> Content Sections -> CTA -> FAQ -> Footer\n */\nexport const ProductLpTemplate = React.forwardRef<HTMLDivElement, ProductLpTemplateProps>(\n (\n {\n keyVisual,\n contentSections,\n cta,\n faqItems = [],\n footer,\n className,\n ...props\n },\n ref\n ) => {\n return (\n <LpTemplate ref={ref} className={className} {...props}>\n {/* Key Visual */}\n {keyVisual && (\n <KeyVisual\n backgroundImage={keyVisual.backgroundImage}\n copyLines={keyVisual.copyLines}\n badges={keyVisual.badges}\n footnotes={keyVisual.footnotes}\n />\n )}\n\n {/* Content Sections */}\n {contentSections}\n\n {/* CTA */}\n {cta && (\n <>\n <Blank size=\"md\" />\n <Cta\n background={cta.background}\n productImage={cta.productImage}\n productName={cta.productName}\n productPrice={cta.productPrice}\n productQuantity={cta.productQuantity}\n promotionLabel={cta.promotionLabel}\n promotionTitle={cta.promotionTitle}\n productOptions={cta.productOptions}\n note={cta.note}\n ctaMessage={cta.ctaMessage}\n buttonText={cta.buttonText}\n onButtonClick={cta.onButtonClick}\n footerLinkText={cta.footerLinkText}\n footerLinkHref={cta.footerLinkHref}\n />\n </>\n )}\n\n {/* FAQ */}\n {faqItems.length > 0 && (\n <>\n <Blank size=\"md\" />\n <Faq items={faqItems} />\n </>\n )}\n\n {/* Footer */}\n {footer && (\n <>\n <Blank size=\"md\" />\n {footer}\n </>\n )}\n </LpTemplate>\n );\n }\n);\n\nProductLpTemplate.displayName = 'ProductLpTemplate';\n\nexport default ProductLpTemplate;\n\n","// Theme components for ecforce theme management\n// This module will contain EC site theme components\n\n// Placeholder exports - to be implemented in Phase 4\nexport const themeVersion = '0.1.0';\n\n"]}
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
type ButtonVariant = 'black' | 'red' | 'gold' | 'white';
|
|
4
|
+
type ButtonSize = 'lg' | 'md';
|
|
5
|
+
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
6
|
+
/** Button color variant */
|
|
7
|
+
variant?: ButtonVariant;
|
|
8
|
+
/** Button size */
|
|
9
|
+
size?: ButtonSize;
|
|
10
|
+
/** Whether to show arrow icon */
|
|
11
|
+
showArrow?: boolean;
|
|
12
|
+
/** Full width button */
|
|
13
|
+
fullWidth?: boolean;
|
|
14
|
+
/** Children elements */
|
|
15
|
+
children: React.ReactNode;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Button component for LP pages
|
|
19
|
+
* Supports black, red, gold, and white variants
|
|
20
|
+
*/
|
|
21
|
+
declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
22
|
+
|
|
23
|
+
type AnchorButtonVariant = 'outline' | 'filled';
|
|
24
|
+
interface AnchorButtonProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
|
|
25
|
+
/** Button style variant */
|
|
26
|
+
variant?: AnchorButtonVariant;
|
|
27
|
+
/** Whether text wraps to multiple lines */
|
|
28
|
+
multiline?: boolean;
|
|
29
|
+
/** Children elements */
|
|
30
|
+
children: React.ReactNode;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Anchor Button component for page navigation within LP
|
|
34
|
+
* Used for linking to different sections
|
|
35
|
+
*/
|
|
36
|
+
declare const AnchorButton: React.ForwardRefExoticComponent<AnchorButtonProps & React.RefAttributes<HTMLAnchorElement>>;
|
|
37
|
+
|
|
38
|
+
type ImageAspectRatio = '1:1' | '4:3' | '16:9' | 'auto';
|
|
39
|
+
interface ImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {
|
|
40
|
+
/** Image aspect ratio */
|
|
41
|
+
aspectRatio?: ImageAspectRatio;
|
|
42
|
+
/** Object fit style */
|
|
43
|
+
objectFit?: 'cover' | 'contain' | 'fill';
|
|
44
|
+
/** Placeholder background color when loading */
|
|
45
|
+
placeholderColor?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Image component for LP pages
|
|
49
|
+
* Supports various aspect ratios
|
|
50
|
+
*/
|
|
51
|
+
declare const Image: React.ForwardRefExoticComponent<ImageProps & React.RefAttributes<HTMLImageElement>>;
|
|
52
|
+
|
|
53
|
+
interface ProductImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {
|
|
54
|
+
/** Product name for alt text */
|
|
55
|
+
productName?: string;
|
|
56
|
+
/** Image size variant */
|
|
57
|
+
size?: 'sm' | 'md' | 'lg';
|
|
58
|
+
/** Whether image is circular (for feature icons) */
|
|
59
|
+
circular?: boolean;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Product Image component for LP pages
|
|
63
|
+
* Used for product photos and feature icons
|
|
64
|
+
*/
|
|
65
|
+
declare const ProductImage: React.ForwardRefExoticComponent<ProductImageProps & React.RefAttributes<HTMLImageElement>>;
|
|
66
|
+
|
|
67
|
+
type IconName = 'arrow-right' | 'arrow-down' | 'chevron-down' | 'chevron-up' | 'check' | 'plus' | 'minus';
|
|
68
|
+
interface IconProps extends React.SVGAttributes<SVGElement> {
|
|
69
|
+
/** Icon name */
|
|
70
|
+
name: IconName;
|
|
71
|
+
/** Icon size in pixels */
|
|
72
|
+
size?: number;
|
|
73
|
+
/** Icon color */
|
|
74
|
+
color?: string;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Icon component for LP pages
|
|
78
|
+
* Provides common icons used in LP designs
|
|
79
|
+
*/
|
|
80
|
+
declare const Icon: React.ForwardRefExoticComponent<IconProps & React.RefAttributes<SVGSVGElement>>;
|
|
81
|
+
|
|
82
|
+
type TextVariant = 'h1' | 'h2' | 'h3' | 'h4' | 'body-lg' | 'body-md' | 'body-sm' | 'caption-lg' | 'caption-md' | 'caption-sm' | 'caption-xs';
|
|
83
|
+
type TextColor = 'primary' | 'secondary' | 'inverse' | 'accent' | 'gold' | 'inherit';
|
|
84
|
+
type TextAlign = 'left' | 'center' | 'right' | 'justify';
|
|
85
|
+
interface TextProps extends React.HTMLAttributes<HTMLElement> {
|
|
86
|
+
/** Typography variant */
|
|
87
|
+
variant?: TextVariant;
|
|
88
|
+
/** Text color */
|
|
89
|
+
color?: TextColor;
|
|
90
|
+
/** Text alignment */
|
|
91
|
+
align?: TextAlign;
|
|
92
|
+
/** HTML tag to render */
|
|
93
|
+
as?: keyof JSX.IntrinsicElements;
|
|
94
|
+
/** Font weight override */
|
|
95
|
+
weight?: 'regular' | 'medium' | 'bold';
|
|
96
|
+
/** Children elements */
|
|
97
|
+
children: React.ReactNode;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Text component for LP pages
|
|
101
|
+
* Provides consistent typography across the design system
|
|
102
|
+
*/
|
|
103
|
+
declare const Text: React.ForwardRefExoticComponent<TextProps & React.RefAttributes<HTMLElement>>;
|
|
104
|
+
|
|
105
|
+
interface UserVoiceProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
106
|
+
/** User avatar image URL */
|
|
107
|
+
avatarSrc?: string;
|
|
108
|
+
/** User name or identifier */
|
|
109
|
+
userName?: string;
|
|
110
|
+
/** User attribute (e.g., age, occupation) */
|
|
111
|
+
userAttribute?: string;
|
|
112
|
+
/** Review/testimonial content */
|
|
113
|
+
content: string;
|
|
114
|
+
/** Star rating (1-5) */
|
|
115
|
+
rating?: number;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* UserVoice component for LP pages
|
|
119
|
+
* Displays user reviews and testimonials
|
|
120
|
+
*/
|
|
121
|
+
declare const UserVoice: React.ForwardRefExoticComponent<UserVoiceProps & React.RefAttributes<HTMLDivElement>>;
|
|
122
|
+
|
|
123
|
+
interface FaqPartsProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
124
|
+
/** FAQ question */
|
|
125
|
+
question: string;
|
|
126
|
+
/** FAQ answer */
|
|
127
|
+
answer: string;
|
|
128
|
+
/** Whether the FAQ item is initially open */
|
|
129
|
+
defaultOpen?: boolean;
|
|
130
|
+
/** Controlled open state */
|
|
131
|
+
open?: boolean;
|
|
132
|
+
/** Callback when open state changes */
|
|
133
|
+
onOpenChange?: (open: boolean) => void;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* FaqParts component for LP pages
|
|
137
|
+
* Accordion-style FAQ item with question and answer
|
|
138
|
+
*/
|
|
139
|
+
declare const FaqParts: React.ForwardRefExoticComponent<FaqPartsProps & React.RefAttributes<HTMLDivElement>>;
|
|
140
|
+
|
|
141
|
+
interface Badge {
|
|
142
|
+
/** Badge title (top line) */
|
|
143
|
+
title: string;
|
|
144
|
+
/** Badge main text (can be multi-line) */
|
|
145
|
+
text: string;
|
|
146
|
+
/** Badge footnote reference (e.g., "※1") */
|
|
147
|
+
footnote?: string;
|
|
148
|
+
}
|
|
149
|
+
interface KeyVisualProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
150
|
+
/** Background image URL */
|
|
151
|
+
backgroundImage?: string;
|
|
152
|
+
/** Main copy lines (displayed with white background) */
|
|
153
|
+
copyLines?: string[];
|
|
154
|
+
/** Achievement badges (up to 3) */
|
|
155
|
+
badges?: Badge[];
|
|
156
|
+
/** Footnotes for badges */
|
|
157
|
+
footnotes?: string[];
|
|
158
|
+
/** Whether to show video instead of image */
|
|
159
|
+
isVideo?: boolean;
|
|
160
|
+
/** Video source URL (if isVideo is true) */
|
|
161
|
+
videoSrc?: string;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* KeyVisual (MV) component for LP pages
|
|
165
|
+
* Main hero section with background image, copy, and achievement badges
|
|
166
|
+
*/
|
|
167
|
+
declare const KeyVisual: React.ForwardRefExoticComponent<KeyVisualProps & React.RefAttributes<HTMLDivElement>>;
|
|
168
|
+
|
|
169
|
+
type SectionBackground = 'white' | 'gray' | 'gold' | 'custom';
|
|
170
|
+
interface SectionProps extends React.HTMLAttributes<HTMLElement> {
|
|
171
|
+
/** Section title */
|
|
172
|
+
title?: string;
|
|
173
|
+
/** Section subtitle */
|
|
174
|
+
subtitle?: string;
|
|
175
|
+
/** Background style */
|
|
176
|
+
background?: SectionBackground;
|
|
177
|
+
/** Custom background color (when background is 'custom') */
|
|
178
|
+
customBgColor?: string;
|
|
179
|
+
/** Padding size */
|
|
180
|
+
padding?: 'sm' | 'md' | 'lg';
|
|
181
|
+
/** Whether content should be centered */
|
|
182
|
+
centered?: boolean;
|
|
183
|
+
/** Maximum content width */
|
|
184
|
+
maxWidth?: 'sm' | 'md' | 'lg' | 'full';
|
|
185
|
+
/** Children elements */
|
|
186
|
+
children: React.ReactNode;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Section component for LP pages
|
|
190
|
+
* Generic container for organizing content sections
|
|
191
|
+
*/
|
|
192
|
+
declare const Section: React.ForwardRefExoticComponent<SectionProps & React.RefAttributes<HTMLElement>>;
|
|
193
|
+
|
|
194
|
+
interface SpecItem {
|
|
195
|
+
/** Spec label */
|
|
196
|
+
label: string;
|
|
197
|
+
/** Spec value */
|
|
198
|
+
value: string;
|
|
199
|
+
}
|
|
200
|
+
interface SpecProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
201
|
+
/** Product name */
|
|
202
|
+
productName?: string;
|
|
203
|
+
/** Product image URL */
|
|
204
|
+
productImage?: string;
|
|
205
|
+
/** Spec items list */
|
|
206
|
+
items?: SpecItem[];
|
|
207
|
+
/** Ingredients or additional info */
|
|
208
|
+
ingredients?: string;
|
|
209
|
+
/** Notes or warnings */
|
|
210
|
+
notes?: string[];
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Spec component for LP pages
|
|
214
|
+
* Displays product specifications in a table format
|
|
215
|
+
*/
|
|
216
|
+
declare const Spec: React.ForwardRefExoticComponent<SpecProps & React.RefAttributes<HTMLDivElement>>;
|
|
217
|
+
|
|
218
|
+
interface ProductOption {
|
|
219
|
+
/** Option label (e.g., "2本セット") */
|
|
220
|
+
label: string;
|
|
221
|
+
/** Discount text (e.g., "10%OFF") */
|
|
222
|
+
discount?: string;
|
|
223
|
+
/** Price per unit */
|
|
224
|
+
pricePerUnit?: string;
|
|
225
|
+
/** Total price */
|
|
226
|
+
totalPrice?: string;
|
|
227
|
+
/** Quantity info (e.g., "150ml×2") */
|
|
228
|
+
quantity?: string;
|
|
229
|
+
/** Product image URL */
|
|
230
|
+
image?: string;
|
|
231
|
+
}
|
|
232
|
+
interface CtaProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
233
|
+
/** Background color variant */
|
|
234
|
+
background?: 'gold' | 'gray';
|
|
235
|
+
/** Main product image URL */
|
|
236
|
+
productImage?: string;
|
|
237
|
+
/** Product name */
|
|
238
|
+
productName?: string;
|
|
239
|
+
/** Product price */
|
|
240
|
+
productPrice?: string;
|
|
241
|
+
/** Product quantity info */
|
|
242
|
+
productQuantity?: string;
|
|
243
|
+
/** Feature badges (circular images with text) */
|
|
244
|
+
features?: Array<{
|
|
245
|
+
image?: string;
|
|
246
|
+
text: string;
|
|
247
|
+
}>;
|
|
248
|
+
/** Promotion label (e.g., "本ページ限定!") */
|
|
249
|
+
promotionLabel?: string;
|
|
250
|
+
/** Promotion title lines */
|
|
251
|
+
promotionTitle?: string[];
|
|
252
|
+
/** Product options for bulk purchase */
|
|
253
|
+
productOptions?: ProductOption[];
|
|
254
|
+
/** Note text */
|
|
255
|
+
note?: string;
|
|
256
|
+
/** CTA message */
|
|
257
|
+
ctaMessage?: string;
|
|
258
|
+
/** Button text */
|
|
259
|
+
buttonText?: string;
|
|
260
|
+
/** Button variant */
|
|
261
|
+
buttonVariant?: ButtonVariant;
|
|
262
|
+
/** Button click handler */
|
|
263
|
+
onButtonClick?: () => void;
|
|
264
|
+
/** Footer link text */
|
|
265
|
+
footerLinkText?: string;
|
|
266
|
+
/** Footer link URL */
|
|
267
|
+
footerLinkHref?: string;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* CTA component for LP pages
|
|
271
|
+
* Purchase call-to-action section with product details and options
|
|
272
|
+
*/
|
|
273
|
+
declare const Cta: React.ForwardRefExoticComponent<CtaProps & React.RefAttributes<HTMLDivElement>>;
|
|
274
|
+
|
|
275
|
+
interface FaqItem {
|
|
276
|
+
/** Question */
|
|
277
|
+
question: string;
|
|
278
|
+
/** Answer */
|
|
279
|
+
answer: string;
|
|
280
|
+
/** Whether initially open */
|
|
281
|
+
defaultOpen?: boolean;
|
|
282
|
+
}
|
|
283
|
+
interface FaqProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
284
|
+
/** Section title */
|
|
285
|
+
title?: string;
|
|
286
|
+
/** FAQ items */
|
|
287
|
+
items?: FaqItem[];
|
|
288
|
+
/** Background variant */
|
|
289
|
+
background?: 'white' | 'gray';
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* FAQ component for LP pages
|
|
293
|
+
* Accordion-style FAQ section
|
|
294
|
+
*/
|
|
295
|
+
declare const Faq: React.ForwardRefExoticComponent<FaqProps & React.RefAttributes<HTMLDivElement>>;
|
|
296
|
+
|
|
297
|
+
type BlankSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
298
|
+
type BlankBackground = 'transparent' | 'white' | 'gray';
|
|
299
|
+
interface BlankProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
300
|
+
/** Blank space size */
|
|
301
|
+
size?: BlankSize;
|
|
302
|
+
/** Custom height in pixels */
|
|
303
|
+
height?: number;
|
|
304
|
+
/** Background color */
|
|
305
|
+
background?: BlankBackground;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Blank component for LP pages
|
|
309
|
+
* Creates vertical spacing between sections
|
|
310
|
+
*/
|
|
311
|
+
declare const Blank: React.ForwardRefExoticComponent<BlankProps & React.RefAttributes<HTMLDivElement>>;
|
|
312
|
+
|
|
313
|
+
interface LpSection {
|
|
314
|
+
/** Unique section ID */
|
|
315
|
+
id: string;
|
|
316
|
+
/** Section component to render */
|
|
317
|
+
component: React.ReactNode;
|
|
318
|
+
}
|
|
319
|
+
interface LpTemplateProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
320
|
+
/** Array of sections to render */
|
|
321
|
+
sections?: LpSection[];
|
|
322
|
+
/** Maximum width of the LP container */
|
|
323
|
+
maxWidth?: number;
|
|
324
|
+
/** Whether to center the LP */
|
|
325
|
+
centered?: boolean;
|
|
326
|
+
/** Children elements (alternative to sections) */
|
|
327
|
+
children?: React.ReactNode;
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* LpTemplate component
|
|
331
|
+
* Base template for LP pages with mobile-first responsive design
|
|
332
|
+
* Standard LP width: 375px (mobile-first)
|
|
333
|
+
*/
|
|
334
|
+
declare const LpTemplate: React.ForwardRefExoticComponent<LpTemplateProps & React.RefAttributes<HTMLDivElement>>;
|
|
335
|
+
|
|
336
|
+
interface ProductLpTemplateProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
337
|
+
/** Key Visual props */
|
|
338
|
+
keyVisual?: {
|
|
339
|
+
backgroundImage?: string;
|
|
340
|
+
copyLines?: string[];
|
|
341
|
+
badges?: Badge[];
|
|
342
|
+
footnotes?: string[];
|
|
343
|
+
};
|
|
344
|
+
/** Content sections (rendered between KeyVisual and CTA) */
|
|
345
|
+
contentSections?: React.ReactNode;
|
|
346
|
+
/** CTA props */
|
|
347
|
+
cta?: {
|
|
348
|
+
background?: 'gold' | 'gray';
|
|
349
|
+
productImage?: string;
|
|
350
|
+
productName?: string;
|
|
351
|
+
productPrice?: string;
|
|
352
|
+
productQuantity?: string;
|
|
353
|
+
promotionLabel?: string;
|
|
354
|
+
promotionTitle?: string[];
|
|
355
|
+
productOptions?: ProductOption[];
|
|
356
|
+
note?: string;
|
|
357
|
+
ctaMessage?: string;
|
|
358
|
+
buttonText?: string;
|
|
359
|
+
onButtonClick?: () => void;
|
|
360
|
+
footerLinkText?: string;
|
|
361
|
+
footerLinkHref?: string;
|
|
362
|
+
};
|
|
363
|
+
/** FAQ items */
|
|
364
|
+
faqItems?: FaqItem[];
|
|
365
|
+
/** Footer content */
|
|
366
|
+
footer?: React.ReactNode;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* ProductLpTemplate component
|
|
370
|
+
* Pre-configured template for product landing pages
|
|
371
|
+
* Includes: KeyVisual -> Content Sections -> CTA -> FAQ -> Footer
|
|
372
|
+
*/
|
|
373
|
+
declare const ProductLpTemplate: React.ForwardRefExoticComponent<ProductLpTemplateProps & React.RefAttributes<HTMLDivElement>>;
|
|
374
|
+
|
|
375
|
+
export { AnchorButton, type AnchorButtonProps, type Badge, Blank, type BlankBackground, type BlankProps, type BlankSize, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Cta, type CtaProps, Faq, type FaqItem, FaqParts, type FaqPartsProps, type FaqProps, Icon, type IconName, type IconProps, Image, type ImageAspectRatio, type ImageProps, KeyVisual, type KeyVisualProps, type LpSection, LpTemplate, type LpTemplateProps, ProductImage, type ProductImageProps, ProductLpTemplate, type ProductLpTemplateProps, type ProductOption, Section, type SectionBackground, type SectionProps, Spec, type SpecItem, type SpecProps, Text, type TextAlign, type TextColor, type TextProps, type TextVariant, UserVoice, type UserVoiceProps };
|