{"version":3,"sources":["../src/image/image.tsx"],"names":["React","NextImage"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmEA,SAAS,mBAAA,CACP,UAAA,EACA,WAAA,EACA,aAAA,EACQ;AACR,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AAGnC,EAAA,MAAM,KAAA,GAAQ,eAAe,UAAA,EAAY,KAAA;AACzC,EAAA,MAAM,OAAA,GAAU,iBAAiB,UAAA,EAAY,OAAA;AAE7C,EAAA,IAAI,OAAO,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,KAAA,CAAM,UAAU,CAAA;AAC3C,EAAA,IAAI,UAAA,EAAY,QAAQ,MAAA,CAAO,GAAA,CAAI,KAAK,UAAA,CAAW,MAAA,CAAO,UAAU,CAAA;AACpE,EAAA,IAAI,YAAY,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,WAAW,MAAM,CAAA;AACzD,EAAA,IAAI,SAAS,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,OAAA,CAAQ,UAAU,CAAA;AAC/C,EAAA,IAAI,YAAY,GAAA,EAAK,MAAA,CAAO,GAAA,CAAI,KAAA,EAAO,WAAW,GAAG,CAAA;AACrD,EAAA,IAAI,YAAY,UAAA,EAAY,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,WAAW,UAAU,CAAA;AAClE,EAAA,IAAI,UAAA,EAAY,MAAM,MAAA,CAAO,GAAA,CAAI,QAAQ,UAAA,CAAW,IAAA,CAAK,UAAU,CAAA;AACnE,EAAA,IAAI,UAAA,EAAY,SAAS,MAAA,CAAO,GAAA,CAAI,WAAW,UAAA,CAAW,OAAA,CAAQ,UAAU,CAAA;AAC5E,EAAA,IAAI,UAAA,EAAY,QAAQ,MAAA,CAAO,GAAA,CAAI,UAAU,UAAA,CAAW,MAAA,CAAO,UAAU,CAAA;AACzE,EAAA,IAAI,UAAA,EAAY,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,SAAS,GAAG,CAAA;AAC9C,EAAA,IAAI,UAAA,EAAY,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,SAAS,GAAG,CAAA;AAE9C,EAAA,OAAO,OAAO,QAAA,EAAS;AACzB;AAKA,SAAS,mBAAmB,UAAA,EAAoC;AAC9D,EAAA,OAAO,SAAS,YAAA,CAAa;AAAA,IAC3B,GAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF,EAIW;AAET,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,GAAA,EAAK,wBAAwB,CAAA;AACjD,IAAA,MAAM,iBAAiB,GAAA,CAAI,MAAA;AAG3B,IAAA,MAAM,cAAA,GAAiB,mBAAA,CAAoB,UAAA,EAAY,KAAA,EAAO,OAAO,CAAA;AAErE,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,OAAO,GAAA;AAAA,IACT;AAIA,IAAA,MAAM,UAAU,cAAA,GAAiB,GAAA,GAAM,IAAI,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAEvD,IAAA,OAAO,cAAA,GAAiB,GAAG,GAAG,CAAA,CAAA,EAAI,cAAc,CAAA,CAAA,GAAK,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,cAAc,CAAA,CAAA;AAAA,EACnF,CAAA;AACF;AAgCO,IAAM,KAAA,GAAcA,4BAAyC,CAAC,EAAE,YAAY,MAAA,EAAQ,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAE7G,EAAA,MAAM,WAAA,GAAc,MAAA,IAAU,kBAAA,CAAmB,UAAU,CAAA;AAE3D,EAAA,sCAAQC,0BAAA,EAAA,EAAU,GAAA,EAAU,MAAA,EAAQ,WAAA,EAAc,GAAG,KAAA,EAAO,CAAA;AAC9D,CAAC;AAED,KAAA,CAAM,WAAA,GAAc,OAAA","file":"chunk-4OSXX7AZ.cjs","sourcesContent":["\"use client\";\n\nimport NextImage, { type ImageProps as NextImageProps } from \"next/image\";\nimport * as React from \"react\";\n\nexport interface ImageTransformOptions {\n  /**\n   * Output width in pixels\n   */\n  width?: number;\n  /**\n   * Output height in pixels\n   */\n  height?: number;\n  /**\n   * Output format\n   */\n  format?: \"webp\" | \"avif\" | \"jpeg\" | \"png\" | \"gif\";\n  /**\n   * Quality (1-100)\n   */\n  quality?: number;\n  /**\n   * Fit mode for resizing\n   */\n  fit?: \"cover\" | \"contain\" | \"fill\" | \"inside\" | \"outside\";\n  /**\n   * Background color for transparent images (hex without #)\n   */\n  background?: string;\n  /**\n   * Blur amount (0.3-1000)\n   */\n  blur?: number;\n  /**\n   * Sharpen amount (0-10)\n   */\n  sharpen?: number;\n  /**\n   * Rotation angle (0, 90, 180, 270)\n   */\n  rotate?: 0 | 90 | 180 | 270;\n  /**\n   * Flip horizontally\n   */\n  flipH?: boolean;\n  /**\n   * Flip vertically\n   */\n  flipV?: boolean;\n}\n\nexport interface ImageProps extends Omit<NextImageProps, \"loader\"> {\n  /**\n   * Stack0 CDN transformation options\n   * These are applied via URL query parameters\n   */\n  transforms?: ImageTransformOptions;\n  /**\n   * Custom loader function (overrides default Stack0 loader)\n   */\n  loader?: NextImageProps[\"loader\"];\n}\n\n/**\n * Builds transformation query string for Stack0 CDN\n */\nfunction buildTransformQuery(\n  transforms: ImageTransformOptions | undefined,\n  loaderWidth?: number,\n  loaderQuality?: number,\n): string {\n  const params = new URLSearchParams();\n\n  // Use loader width/quality if provided, otherwise use transforms\n  const width = loaderWidth ?? transforms?.width;\n  const quality = loaderQuality ?? transforms?.quality;\n\n  if (width) params.set(\"w\", width.toString());\n  if (transforms?.height) params.set(\"h\", transforms.height.toString());\n  if (transforms?.format) params.set(\"f\", transforms.format);\n  if (quality) params.set(\"q\", quality.toString());\n  if (transforms?.fit) params.set(\"fit\", transforms.fit);\n  if (transforms?.background) params.set(\"bg\", transforms.background);\n  if (transforms?.blur) params.set(\"blur\", transforms.blur.toString());\n  if (transforms?.sharpen) params.set(\"sharpen\", transforms.sharpen.toString());\n  if (transforms?.rotate) params.set(\"rotate\", transforms.rotate.toString());\n  if (transforms?.flipH) params.set(\"fliph\", \"1\");\n  if (transforms?.flipV) params.set(\"flipv\", \"1\");\n\n  return params.toString();\n}\n\n/**\n * Creates a Stack0 CDN image loader\n */\nfunction createStack0Loader(transforms?: ImageTransformOptions) {\n  return function stack0Loader({\n    src,\n    width,\n    quality,\n  }: {\n    src: string;\n    width: number;\n    quality?: number;\n  }): string {\n    // If src already has query params, parse and merge\n    const url = new URL(src, \"https://cdn.stack0.dev\");\n    const existingParams = url.search;\n\n    // Build transform query\n    const transformQuery = buildTransformQuery(transforms, width, quality);\n\n    if (!transformQuery) {\n      return src;\n    }\n\n    // Merge existing params with transforms\n    const separator = existingParams ? \"&\" : \"?\";\n    const baseSrc = existingParams ? src : src.split(\"?\")[0];\n\n    return existingParams ? `${src}&${transformQuery}` : `${baseSrc}?${transformQuery}`;\n  };\n}\n\n/**\n * Image component optimized for Stack0 CDN\n *\n * Uses a custom loader that bypasses Next.js image optimization\n * in favor of Stack0's CDN-level image processing.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Image\n *   src=\"https://cdn.stack0.dev/your-image.jpg\"\n *   alt=\"Description\"\n *   width={800}\n *   height={600}\n * />\n *\n * // With CDN transforms\n * <Image\n *   src=\"https://cdn.stack0.dev/your-image.jpg\"\n *   alt=\"Description\"\n *   width={800}\n *   height={600}\n *   transforms={{\n *     format: \"webp\",\n *     quality: 85,\n *     fit: \"cover\",\n *   }}\n * />\n * ```\n */\nexport const Image = React.forwardRef<HTMLImageElement, ImageProps>(({ transforms, loader, ...props }, ref) => {\n  // Use custom loader if provided, otherwise use Stack0 loader\n  const imageLoader = loader ?? createStack0Loader(transforms);\n\n  return <NextImage ref={ref} loader={imageLoader} {...props} />;\n});\n\nImage.displayName = \"Image\";\n\nexport { createStack0Loader, buildTransformQuery };\n"]}