@simple-photo-gallery/common 1.0.5 → 2.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client/blurhash.ts","../src/client/hero-fallback.ts","../src/client/photoswipe/video-plugin.ts","../src/client/photoswipe/lightbox.ts","../src/client/photoswipe/deep-linking.ts","../src/client/css-utils.ts"],"names":[],"mappings":"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","file":"client.js","sourcesContent":["import { decode } from 'blurhash';\n\n/**\n * Decode a single blurhash and draw it to a canvas element.\n *\n * @param canvas - The canvas element with a data-blur-hash attribute\n * @param width - The width to decode at (default: 32)\n * @param height - The height to decode at (default: 32)\n */\nexport function decodeBlurhashToCanvas(canvas: HTMLCanvasElement, width: number = 32, height: number = 32): void {\n const blurHashValue = canvas.dataset.blurHash;\n if (!blurHashValue) return;\n\n const pixels = decode(blurHashValue, width, height);\n const ctx = canvas.getContext('2d');\n if (pixels && ctx) {\n const imageData = new ImageData(new Uint8ClampedArray(pixels), width, height);\n ctx.putImageData(imageData, 0, 0);\n }\n}\n\n/**\n * Decode and render all blurhash canvases on the page.\n * Finds all canvas elements with data-blur-hash attribute and draws the decoded image.\n *\n * @param selector - CSS selector for canvas elements (default: 'canvas[data-blur-hash]')\n * @param width - The width to decode at (default: 32)\n * @param height - The height to decode at (default: 32)\n */\nexport function decodeAllBlurhashes(\n selector: string = 'canvas[data-blur-hash]',\n width: number = 32,\n height: number = 32,\n): void {\n const canvases = document.querySelectorAll<HTMLCanvasElement>(selector);\n for (const canvas of canvases) {\n decodeBlurhashToCanvas(canvas, width, height);\n }\n}\n","/** Options for the hero image fallback behavior */\nexport interface HeroImageFallbackOptions {\n /** CSS selector for the picture element (default: '#hero-bg-picture') */\n pictureSelector?: string;\n /** CSS selector for the img element within picture (default: 'img.hero__bg-img') */\n imgSelector?: string;\n /** CSS selector for the blurhash canvas element (default: 'canvas[data-blur-hash]') */\n canvasSelector?: string;\n}\n\n/**\n * Initialize hero image fallback behavior.\n * Handles:\n * - Hiding blurhash canvas when image loads successfully\n * - Removing source elements and retrying with fallback src on error\n * - Keeping blurhash visible if final fallback also fails\n *\n * @param options - Configuration options for selectors\n *\n * @example\n * ```typescript\n * import { initHeroImageFallback } from '@simple-photo-gallery/common/client';\n *\n * // Use default selectors\n * initHeroImageFallback();\n *\n * // Or with custom selectors\n * initHeroImageFallback({\n * pictureSelector: '#my-hero-picture',\n * imgSelector: 'img.my-hero-img',\n * canvasSelector: 'canvas.my-blurhash',\n * });\n * ```\n */\nexport function initHeroImageFallback(options: HeroImageFallbackOptions = {}): void {\n const {\n pictureSelector = '#hero-bg-picture',\n imgSelector = 'img.hero__bg-img',\n canvasSelector = 'canvas[data-blur-hash]',\n } = options;\n\n const picture = document.querySelector<HTMLPictureElement>(pictureSelector);\n const img = picture?.querySelector<HTMLImageElement>(imgSelector);\n const canvas = document.querySelector<HTMLCanvasElement>(canvasSelector);\n\n if (!img) return;\n\n const fallbackSrc = img.getAttribute('src') || '';\n let didFallback = false;\n\n const hideBlurhash = () => {\n if (canvas) {\n canvas.style.display = 'none';\n }\n };\n\n const doFallback = () => {\n if (didFallback) return;\n didFallback = true;\n\n if (picture) {\n // Remove all <source> elements so the browser does not retry them\n for (const sourceEl of picture.querySelectorAll('source')) {\n sourceEl.remove();\n }\n }\n\n // Force reload using the <img> src as the final fallback\n const current = img.getAttribute('src') || '';\n img.setAttribute('src', '');\n img.setAttribute('src', fallbackSrc || current);\n\n // If fallback also fails, keep blurhash visible\n img.addEventListener(\n 'error',\n () => {\n // Final fallback failed, blurhash stays visible\n },\n { once: true },\n );\n\n // If fallback succeeds, hide blurhash\n img.addEventListener('load', hideBlurhash, { once: true });\n };\n\n // Check if image already loaded or failed before script runs\n if (img.complete) {\n if (img.naturalWidth === 0) {\n doFallback();\n } else {\n hideBlurhash();\n }\n } else {\n img.addEventListener('load', hideBlurhash, { once: true });\n }\n\n img.addEventListener('error', doFallback, { once: true });\n}\n","import type { Content, EventData, Slide, VideoPluginOptions } from './types';\nimport type PhotoSwipe from 'photoswipe';\nimport type PhotoSwipeLightbox from 'photoswipe/lightbox';\n\nconst defaultOptions: VideoPluginOptions = {\n videoAttributes: { controls: '', playsinline: '', preload: 'auto' },\n autoplay: true,\n preventDragOffset: 40,\n};\n\n/**\n * Check if slide has video content\n */\nfunction isVideoContent(content: Content | Slide): boolean {\n return content && 'data' in content && content.data && content.data.type === 'video';\n}\n\nclass VideoContentSetup {\n private options: VideoPluginOptions;\n\n constructor(lightbox: PhotoSwipeLightbox, options: VideoPluginOptions) {\n this.options = options;\n\n this.initLightboxEvents(lightbox);\n lightbox.on('init', () => {\n if (lightbox.pswp) {\n this.initPswpEvents(lightbox.pswp);\n }\n });\n }\n\n private initLightboxEvents(lightbox: PhotoSwipeLightbox): void {\n lightbox.on('contentLoad', (data: unknown) => this.onContentLoad(data as EventData));\n lightbox.on('contentDestroy', (data: unknown) => this.onContentDestroy(data as { content: Content }));\n lightbox.on('contentActivate', (data: unknown) => this.onContentActivate(data as { content: Content }));\n lightbox.on('contentDeactivate', (data: unknown) => this.onContentDeactivate(data as { content: Content }));\n lightbox.on('contentAppend', (data: unknown) => this.onContentAppend(data as EventData));\n lightbox.on('contentResize', (data: unknown) => this.onContentResize(data as EventData));\n\n lightbox.addFilter('isKeepingPlaceholder', (value: unknown, ...args: unknown[]) =>\n this.isKeepingPlaceholder(value as boolean, args[0] as Content),\n );\n lightbox.addFilter('isContentZoomable', (value: unknown, ...args: unknown[]) =>\n this.isContentZoomable(value as boolean, args[0] as Content),\n );\n lightbox.addFilter('useContentPlaceholder', (value: unknown, ...args: unknown[]) =>\n this.useContentPlaceholder(value as boolean, args[0] as Content),\n );\n\n lightbox.addFilter('domItemData', (value: unknown, ...args: unknown[]) => {\n const itemData = value as Record<string, unknown>;\n const linkEl = args[1] as HTMLAnchorElement;\n\n if (itemData.type === 'video' && linkEl) {\n if (linkEl.dataset.pswpVideoSources) {\n itemData.videoSources = JSON.parse(linkEl.dataset.pswpVideoSources);\n } else if (linkEl.dataset.pswpVideoSrc) {\n itemData.videoSrc = linkEl.dataset.pswpVideoSrc;\n } else {\n itemData.videoSrc = linkEl.href;\n }\n }\n return itemData;\n });\n }\n\n private initPswpEvents(pswp: PhotoSwipe): void {\n // Prevent dragging when pointer is in bottom part of the video\n pswp.on('pointerDown', (data: unknown) => {\n const e = data as EventData;\n const slide = pswp.currSlide as Slide | undefined;\n if (slide && isVideoContent(slide) && this.options.preventDragOffset) {\n const origEvent = e.originalEvent;\n if (origEvent && origEvent.type === 'pointerdown') {\n const videoHeight = Math.ceil(slide.height * slide.currZoomLevel);\n const verticalEnding = videoHeight + slide.bounds.center.y;\n const pointerYPos = origEvent.pageY - pswp.offset.y;\n if (pointerYPos > verticalEnding - this.options.preventDragOffset! && pointerYPos < verticalEnding) {\n e.preventDefault?.();\n }\n }\n }\n });\n\n // do not append video on nearby slides\n pswp.on('appendHeavy', (data: unknown) => {\n const e = data as EventData;\n if (e.slide && isVideoContent(e.slide) && !e.slide.isActive) {\n e.preventDefault?.();\n }\n });\n\n pswp.on('close', () => {\n const slide = pswp.currSlide as Slide | undefined;\n if (slide && isVideoContent(slide.content)) {\n // Switch from zoom to fade closing transition,\n // as zoom transition is choppy for videos\n if (!pswp.options.showHideAnimationType || pswp.options.showHideAnimationType === 'zoom') {\n pswp.options.showHideAnimationType = 'fade';\n }\n\n // pause video when closing\n this.pauseVideo(slide.content);\n }\n });\n }\n\n private onContentDestroy({ content }: { content: Content }): void {\n if (isVideoContent(content) && content._videoPosterImg) {\n const handleLoad = () => {\n if (content._videoPosterImg) {\n content._videoPosterImg.removeEventListener('error', handleError);\n }\n };\n const handleError = () => {\n // Error handler\n };\n\n content._videoPosterImg.addEventListener('load', handleLoad);\n content._videoPosterImg.addEventListener('error', handleError);\n content._videoPosterImg = undefined;\n }\n }\n\n private onContentResize(e: EventData): void {\n if (e.content && isVideoContent(e.content)) {\n e.preventDefault?.();\n\n const width = e.width!;\n const height = e.height!;\n const content = e.content;\n\n if (content.element) {\n content.element.style.width = width + 'px';\n content.element.style.height = height + 'px';\n }\n\n if (content.slide && content.slide.placeholder) {\n // override placeholder size, so it more accurately matches the video\n const placeholderElStyle = content.slide.placeholder.element.style;\n placeholderElStyle.transform = 'none';\n placeholderElStyle.width = width + 'px';\n placeholderElStyle.height = height + 'px';\n }\n }\n }\n\n private isKeepingPlaceholder(isZoomable: boolean, content: Content): boolean {\n if (isVideoContent(content)) {\n return false;\n }\n return isZoomable;\n }\n\n private isContentZoomable(isZoomable: boolean, content: Content): boolean {\n if (isVideoContent(content)) {\n return false;\n }\n return isZoomable;\n }\n\n private onContentActivate({ content }: { content: Content }): void {\n if (isVideoContent(content) && this.options.autoplay) {\n this.playVideo(content);\n }\n }\n\n private onContentDeactivate({ content }: { content: Content }): void {\n if (isVideoContent(content)) {\n this.pauseVideo(content);\n }\n }\n\n private onContentAppend(e: EventData): void {\n if (e.content && isVideoContent(e.content)) {\n e.preventDefault?.();\n e.content.isAttached = true;\n e.content.appendImage?.();\n }\n }\n\n private onContentLoad(e: EventData): void {\n const content = e.content!;\n\n if (!isVideoContent(content)) {\n return;\n }\n\n // stop default content load\n e.preventDefault?.();\n\n if (content.element) {\n return;\n }\n\n content.state = 'loading';\n content.type = 'video';\n\n content.element = document.createElement('video');\n\n if (this.options.videoAttributes) {\n for (const key in this.options.videoAttributes) {\n content.element.setAttribute(key, this.options.videoAttributes[key] || '');\n }\n }\n\n content.element.setAttribute('poster', content.data.msrc || '');\n\n this.preloadVideoPoster(content, content.data.msrc);\n\n content.element.style.position = 'absolute';\n content.element.style.left = '0';\n content.element.style.top = '0';\n\n if (content.data.videoSources) {\n for (const source of content.data.videoSources) {\n const sourceEl = document.createElement('source');\n sourceEl.src = source.src;\n sourceEl.type = source.type;\n content.element.append(sourceEl);\n }\n } else if (content.data.videoSrc) {\n content.element.src = content.data.videoSrc;\n }\n }\n\n private preloadVideoPoster(content: Content, src?: string): void {\n if (!content._videoPosterImg && src) {\n content._videoPosterImg = new Image();\n content._videoPosterImg.src = src;\n if (content._videoPosterImg.complete) {\n content.onLoaded?.();\n } else {\n content._videoPosterImg.addEventListener('load', () => {\n content.onLoaded?.();\n });\n content._videoPosterImg.addEventListener('error', () => {\n content.onLoaded?.();\n });\n }\n }\n }\n\n private playVideo(content: Content): void {\n if (content.element) {\n (content.element as HTMLVideoElement).play();\n }\n }\n\n private pauseVideo(content: Content): void {\n if (content.element) {\n (content.element as HTMLVideoElement).pause();\n }\n }\n\n private useContentPlaceholder(usePlaceholder: boolean, content: Content): boolean {\n if (isVideoContent(content)) {\n return true;\n }\n return usePlaceholder;\n }\n}\n\n/**\n * PhotoSwipe plugin that adds video support to the lightbox.\n * Videos are automatically detected by the `data-pswp-type=\"video\"` attribute\n * on gallery links.\n *\n * @example\n * ```typescript\n * import PhotoSwipe from 'photoswipe';\n * import PhotoSwipeLightbox from 'photoswipe/lightbox';\n * import { PhotoSwipeVideoPlugin } from '@simple-photo-gallery/common/client';\n *\n * const lightbox = new PhotoSwipeLightbox({\n * gallery: '.gallery',\n * children: 'a',\n * pswpModule: PhotoSwipe,\n * });\n *\n * new PhotoSwipeVideoPlugin(lightbox);\n * lightbox.init();\n * ```\n */\nexport class PhotoSwipeVideoPlugin {\n constructor(lightbox: PhotoSwipeLightbox, options: VideoPluginOptions = {}) {\n new VideoContentSetup(lightbox, {\n ...defaultOptions,\n ...options,\n });\n }\n}\n","import { PhotoSwipeVideoPlugin } from './video-plugin';\n\nimport type { VideoPluginOptions } from './types';\nimport type PhotoSwipe from 'photoswipe';\nimport type PhotoSwipeLightbox from 'photoswipe/lightbox';\n\n/** Options for creating a gallery lightbox */\nexport interface GalleryLightboxOptions {\n /** CSS selector for gallery container (default: '.gallery-grid') */\n gallerySelector?: string;\n /** CSS selector for gallery items within container (default: 'a') */\n childrenSelector?: string;\n /** Animation duration when opening in ms (default: 300) */\n showAnimationDuration?: number;\n /** Animation duration when closing in ms (default: 300) */\n hideAnimationDuration?: number;\n /** Enable mouse wheel zoom (default: true) */\n wheelToZoom?: boolean;\n /** Loop back to first image after last (default: false) */\n loop?: boolean;\n /** Background opacity 0-1 (default: 1) */\n bgOpacity?: number;\n /** Options for the video plugin */\n videoPluginOptions?: VideoPluginOptions;\n /** Enable slide-in animations when changing slides (default: true) */\n slideAnimations?: boolean;\n /** Enable custom caption UI from data-pswp-caption attribute (default: true) */\n enableCaptions?: boolean;\n}\n\n/**\n * Create a PhotoSwipe lightbox with sensible defaults and video support.\n * Returns the lightbox instance for further customization before calling init().\n *\n * IMPORTANT: You must import the PhotoSwipe CSS files for the lightbox to work properly:\n * - `import 'photoswipe/style.css'` - Base PhotoSwipe styles\n * - `import '@simple-photo-gallery/common/styles/photoswipe'` - SPG enhancement styles\n *\n * @example\n * ```typescript\n * import { createGalleryLightbox } from '@simple-photo-gallery/common/client';\n * import 'photoswipe/style.css';\n * import '@simple-photo-gallery/common/styles/photoswipe';\n *\n * // Basic usage\n * const lightbox = await createGalleryLightbox();\n * lightbox.init();\n *\n * // With custom options\n * const lightbox = await createGalleryLightbox({\n * gallerySelector: '.my-gallery',\n * loop: true,\n * });\n *\n * // Add custom event handlers before init\n * lightbox.on('change', () => console.log('slide changed'));\n * lightbox.init();\n * ```\n */\nexport async function createGalleryLightbox(options: GalleryLightboxOptions = {}): Promise<PhotoSwipeLightbox> {\n const photoswipeModule = await import('photoswipe');\n const PhotoSwipe = photoswipeModule.default;\n const lightboxModule = await import('photoswipe/lightbox');\n const PhotoSwipeLightboxModule = lightboxModule.default;\n\n const lightbox = new PhotoSwipeLightboxModule({\n gallery: options.gallerySelector ?? '.gallery-grid',\n children: options.childrenSelector ?? 'a',\n pswpModule: PhotoSwipe,\n showAnimationDuration: options.showAnimationDuration ?? 300,\n hideAnimationDuration: options.hideAnimationDuration ?? 300,\n wheelToZoom: options.wheelToZoom ?? true,\n loop: options.loop ?? false,\n bgOpacity: options.bgOpacity ?? 1,\n });\n\n new PhotoSwipeVideoPlugin(lightbox, options.videoPluginOptions);\n\n // Slide animations (enabled by default)\n if (options.slideAnimations !== false) {\n lightbox.on('contentDeactivate', ({ content }: { content: { element?: HTMLElement } }) => {\n content.element?.classList.remove('pswp__img--in-viewport');\n });\n lightbox.on('contentActivate', ({ content }: { content: { element?: HTMLElement } }) => {\n content.element?.classList.add('pswp__img--in-viewport');\n });\n }\n\n // Custom caption UI (enabled by default)\n if (options.enableCaptions !== false) {\n lightbox.on('uiRegister', () => {\n (lightbox.pswp as PhotoSwipe | undefined)?.ui?.registerElement({\n name: 'custom-caption',\n isButton: false,\n className: 'pswp__caption',\n appendTo: 'wrapper',\n onInit: (el: HTMLElement) => {\n (lightbox.pswp as PhotoSwipe | undefined)?.on('change', () => {\n const currSlideElement = (lightbox.pswp as PhotoSwipe | undefined)?.currSlide?.data.element as\n | HTMLElement\n | undefined;\n if (currSlideElement) {\n const caption = (currSlideElement as HTMLElement).dataset.pswpCaption;\n el.innerHTML = caption || currSlideElement.querySelector('img')?.alt || '';\n }\n });\n },\n });\n });\n }\n\n return lightbox;\n}\n","import type PhotoSwipeLightbox from 'photoswipe/lightbox';\n\n/** Options for URL deep-linking functionality */\nexport interface DeepLinkingOptions {\n /** CSS selector for galleries (default: '.gallery-grid') */\n gallerySelector?: string;\n /** CSS selector for gallery items (default: 'a') */\n itemSelector?: string;\n /** URL parameter name for image ID (default: 'image') */\n parameterName?: string;\n /** Delay in ms before opening image on page load (default: 100) */\n openDelay?: number;\n}\n\n/**\n * Updates browser URL with current image ID.\n * Uses History API to replace state without page reload.\n */\nexport function updateGalleryURL(imageId: string | null, paramName: string = 'image'): void {\n const url = new URL(globalThis.location.href);\n if (imageId) {\n url.searchParams.set(paramName, imageId);\n } else {\n url.searchParams.delete(paramName);\n }\n globalThis.history.replaceState({}, '', url.toString());\n}\n\n/**\n * Extracts image ID from URL parameters.\n */\nexport function getImageIdFromURL(paramName: string = 'image'): string | null {\n const params = new URLSearchParams(globalThis.location.search);\n return params.get(paramName);\n}\n\n/**\n * Opens a specific image by ID within a gallery.\n * Searches through all gallery items and opens matching image in lightbox.\n *\n * @returns true if image was found and opened, false otherwise\n */\nexport function openImageById(lightbox: PhotoSwipeLightbox, imageId: string, options: DeepLinkingOptions = {}): boolean {\n const gallerySelector = options.gallerySelector ?? '.gallery-grid';\n const itemSelector = options.itemSelector ?? 'a';\n\n const galleries = document.querySelectorAll(gallerySelector);\n const allItems: HTMLElement[] = [];\n\n for (const gallery of galleries) {\n const items = gallery.querySelectorAll<HTMLElement>(itemSelector);\n allItems.push(...items);\n }\n\n for (const [i, item] of allItems.entries()) {\n const itemId = item.dataset.imageId || '';\n if (itemId === imageId) {\n lightbox.loadAndOpen(i);\n return true;\n }\n }\n return false;\n}\n\n/**\n * Sets up automatic URL updates when lightbox changes.\n * Call after creating lightbox but before init().\n *\n * @example\n * ```typescript\n * const lightbox = await createGalleryLightbox();\n * setupDeepLinking(lightbox);\n * lightbox.init();\n * restoreFromURL(lightbox);\n * ```\n */\nexport function setupDeepLinking(lightbox: PhotoSwipeLightbox, options: DeepLinkingOptions = {}): void {\n const paramName = options.parameterName ?? 'image';\n\n // Update URL when slide changes\n lightbox.on('change', () => {\n if (lightbox.pswp) {\n const currSlideElement = lightbox.pswp.currSlide?.data.element as HTMLElement | undefined;\n const imageId = currSlideElement?.dataset?.imageId ?? null;\n updateGalleryURL(imageId, paramName);\n }\n });\n\n // Clear URL parameter when lightbox closes\n lightbox.on('close', () => {\n updateGalleryURL(null, paramName);\n });\n}\n\n/**\n * Restores gallery state from URL on page load.\n * Automatically opens image if specified in URL parameters.\n * Call after lightbox.init().\n *\n * @example\n * ```typescript\n * const lightbox = await createGalleryLightbox();\n * setupDeepLinking(lightbox);\n * lightbox.init();\n * restoreFromURL(lightbox);\n * ```\n */\nexport function restoreFromURL(lightbox: PhotoSwipeLightbox, options: DeepLinkingOptions = {}): void {\n const paramName = options.parameterName ?? 'image';\n const openDelay = options.openDelay ?? 100;\n const imageIdFromURL = getImageIdFromURL(paramName);\n\n if (imageIdFromURL) {\n const open = () => {\n setTimeout(() => openImageById(lightbox, imageIdFromURL, options), openDelay);\n };\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', open);\n } else {\n open();\n }\n }\n}\n","/**\n * CSS utility functions for client-side theming and color manipulation.\n * These utilities are browser-only and require DOM access.\n */\n\n/**\n * Normalizes hex color values to 6-digit format (e.g., #abc -> #aabbcc).\n * Returns null if the hex value is invalid.\n *\n * @param hex - The hex color value to normalize (with or without #)\n * @returns The normalized 6-digit hex color with # prefix, or null if invalid\n */\nexport function normalizeHex(hex: string): string | null {\n hex = hex.replace('#', '');\n if (hex.length === 3) hex = [...hex].map((c) => c + c).join('');\n return hex.length === 6 && /^[0-9A-Fa-f]{6}$/.test(hex) ? `#${hex}` : null;\n}\n\n/**\n * Parses and validates a color value.\n * Supports CSS color names, hex values, rgb/rgba, and 'transparent'.\n * Returns null if the color is invalid.\n *\n * @param colorParam - The color string to parse\n * @returns The validated color string, or null if invalid\n */\nexport function parseColor(colorParam: string | null): string | null {\n if (!colorParam) return null;\n const normalized = colorParam.toLowerCase().trim();\n if (normalized === 'transparent') return 'transparent';\n\n const testEl = document.createElement('div');\n testEl.style.color = normalized;\n if (testEl.style.color) return normalized;\n\n return normalizeHex(colorParam);\n}\n\n/**\n * Sets or removes a CSS custom property (variable) on an element.\n * Removes the property if value is null.\n *\n * @param element - The HTML element to modify\n * @param name - The CSS variable name (e.g., '--my-color')\n * @param value - The value to set, or null to remove\n */\nexport function setCSSVar(element: HTMLElement, name: string, value: string | null): void {\n if (value) {\n element.style.setProperty(name, value);\n } else {\n element.style.removeProperty(name);\n }\n}\n\n/**\n * Derives a color with adjusted opacity from an existing color.\n * Converts rgb to rgba if needed, or adjusts existing rgba opacity.\n *\n * @param color - The source color (rgb, rgba, or other CSS color)\n * @param opacity - The target opacity (0-1)\n * @returns The color with adjusted opacity, or original if not rgb/rgba\n */\nexport function deriveOpacityColor(color: string, opacity: number): string {\n if (color.startsWith('rgba')) {\n return color.replace(/,\\s*[\\d.]+\\)$/, `, ${opacity})`);\n }\n if (color.startsWith('rgb')) {\n return color.replace('rgb', 'rgba').replace(')', `, ${opacity})`);\n }\n return color;\n}\n"]}
package/dist/gallery.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  var zod = require('zod');
4
4
 
5
- // src/gallery.ts
5
+ // src/gallery/schemas.ts
6
6
  var ThumbnailSchema = zod.z.object({
7
7
  baseUrl: zod.z.string().optional(),
8
8
  path: zod.z.string(),
@@ -45,6 +45,30 @@ var SubGallerySchema = zod.z.object({
45
45
  headerImage: zod.z.string(),
46
46
  path: zod.z.string()
47
47
  });
48
+ var PortraitSizesSchema = zod.z.object({
49
+ 360: zod.z.string().optional(),
50
+ 480: zod.z.string().optional(),
51
+ 720: zod.z.string().optional(),
52
+ 1080: zod.z.string().optional()
53
+ });
54
+ var LandscapeSizesSchema = zod.z.object({
55
+ 640: zod.z.string().optional(),
56
+ 960: zod.z.string().optional(),
57
+ 1280: zod.z.string().optional(),
58
+ 1920: zod.z.string().optional(),
59
+ 2560: zod.z.string().optional(),
60
+ 3840: zod.z.string().optional()
61
+ });
62
+ var HeaderImageVariantsSchema = zod.z.object({
63
+ portrait: zod.z.object({
64
+ avif: PortraitSizesSchema.optional(),
65
+ jpg: PortraitSizesSchema.optional()
66
+ }).optional(),
67
+ landscape: zod.z.object({
68
+ avif: LandscapeSizesSchema.optional(),
69
+ jpg: LandscapeSizesSchema.optional()
70
+ }).optional()
71
+ });
48
72
  var GalleryMetadataSchema = zod.z.object({
49
73
  image: zod.z.string().optional(),
50
74
  imageWidth: zod.z.number().optional(),
@@ -67,7 +91,12 @@ var GalleryDataSchema = zod.z.object({
67
91
  url: zod.z.string().optional(),
68
92
  headerImage: zod.z.string(),
69
93
  headerImageBlurHash: zod.z.string().optional(),
70
- thumbnailSize: zod.z.number().optional(),
94
+ headerImageVariants: HeaderImageVariantsSchema.optional(),
95
+ theme: zod.z.string().optional(),
96
+ thumbnails: zod.z.object({
97
+ size: zod.z.number().optional(),
98
+ edge: zod.z.enum(["auto", "width", "height"]).optional()
99
+ }).optional(),
71
100
  metadata: GalleryMetadataSchema,
72
101
  mediaBaseUrl: zod.z.string().optional(),
73
102
  thumbsBaseUrl: zod.z.string().optional(),
@@ -94,6 +123,7 @@ exports.GalleryDataSchema = GalleryDataSchema;
94
123
  exports.GalleryMetadataSchema = GalleryMetadataSchema;
95
124
  exports.GallerySectionDeprecatedSchema = GallerySectionDeprecatedSchema;
96
125
  exports.GallerySectionSchema = GallerySectionSchema;
126
+ exports.HeaderImageVariantsSchema = HeaderImageVariantsSchema;
97
127
  exports.MediaFileDeprecatedSchema = MediaFileDeprecatedSchema;
98
128
  exports.MediaFileSchema = MediaFileSchema;
99
129
  exports.SubGallerySchema = SubGallerySchema;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/gallery.ts"],"names":["z"],"mappings":"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","file":"gallery.cjs","sourcesContent":["import { z } from 'zod';\n\n/** Zod schema for thumbnail metadata including path and dimensions */\nexport const ThumbnailSchema = z.object({\n baseUrl: z.string().optional(),\n path: z.string(),\n pathRetina: z.string(),\n width: z.number(),\n height: z.number(),\n blurHash: z.string().optional(),\n});\n\n/** Zod schema for media file metadata including type, dimensions, and thumbnail info */\nexport const MediaFileSchema = z.object({\n type: z.enum(['image', 'video']),\n filename: z.string(),\n url: z.string().optional(),\n alt: z.string().optional(),\n width: z.number(),\n height: z.number(),\n thumbnail: ThumbnailSchema.optional(),\n lastMediaTimestamp: z.string().optional(),\n});\n\n/** Zod schema for media file with path (deprecated) */\nexport const MediaFileDeprecatedSchema = z.object({\n type: z.enum(['image', 'video']),\n path: z.string(),\n alt: z.string().optional(),\n width: z.number(),\n height: z.number(),\n thumbnail: ThumbnailSchema.optional(),\n lastMediaTimestamp: z.string().optional(),\n});\n\n/** Zod schema for a gallery section containing title, description, and media files */\nexport const GallerySectionSchema = z.object({\n title: z.string().optional(),\n description: z.string().optional(),\n images: z.array(MediaFileSchema),\n});\n\n/** Zod schema for a gallery section containing title, description, and media files (deprecated) */\nexport const GallerySectionDeprecatedSchema = z.object({\n title: z.string().optional(),\n description: z.string().optional(),\n images: z.array(MediaFileDeprecatedSchema),\n});\n\n/** Zod schema for sub-gallery metadata including title, header image, and path */\nexport const SubGallerySchema = z.object({\n title: z.string(),\n headerImage: z.string(),\n path: z.string(),\n});\n\n/** Zod schema for complete gallery data including metadata, sections, and sub-galleries */\nexport const GalleryMetadataSchema = z.object({\n image: z.string().optional(),\n imageWidth: z.number().optional(),\n imageHeight: z.number().optional(),\n ogUrl: z.string().optional(),\n ogType: z.string().optional(),\n ogSiteName: z.string().optional(),\n twitterSite: z.string().optional(),\n twitterCreator: z.string().optional(),\n author: z.string().optional(),\n keywords: z.string().optional(),\n canonicalUrl: z.string().optional(),\n language: z.string().optional(),\n robots: z.string().optional(),\n});\n\n/** Zod schema for complete gallery data including metadata, sections, and sub-galleries */\nexport const GalleryDataSchema = z.object({\n title: z.string(),\n description: z.string(),\n mediaBasePath: z.string().optional(),\n url: z.string().optional(),\n headerImage: z.string(),\n headerImageBlurHash: z.string().optional(),\n thumbnailSize: z.number().optional(),\n metadata: GalleryMetadataSchema,\n mediaBaseUrl: z.string().optional(),\n thumbsBaseUrl: z.string().optional(),\n analyticsScript: z.string().optional(),\n ctaBanner: z.boolean().optional(),\n sections: z.array(GallerySectionSchema),\n subGalleries: z.object({ title: z.string(), galleries: z.array(SubGallerySchema) }),\n});\n\n/** Zod schema for complete gallery data without mediaBasePath (deprecated) */\nexport const GalleryDataDeprecatedSchema = z.object({\n title: z.string(),\n description: z.string(),\n url: z.string().optional(),\n headerImage: z.string(),\n thumbnailSize: z.number().optional(),\n metadata: GalleryMetadataSchema,\n mediaBaseUrl: z.string().optional(),\n analyticsScript: z.string().optional(),\n sections: z.array(GallerySectionDeprecatedSchema),\n subGalleries: z.object({ title: z.string(), galleries: z.array(SubGallerySchema) }),\n});\n\n/** TypeScript type for thumbnail metadata */\nexport type Thumbnail = z.infer<typeof ThumbnailSchema>;\n\n/** TypeScript type for media file metadata */\nexport type MediaFile = z.infer<typeof MediaFileSchema>;\n\n/** TypeScript type for gallery section data */\nexport type GallerySection = z.infer<typeof GallerySectionSchema>;\n\n/** TypeScript type for sub-gallery metadata */\nexport type SubGallery = z.infer<typeof SubGallerySchema>;\n\n/** TypeScript type for gallery metadata */\nexport type GalleryMetadata = z.infer<typeof GalleryMetadataSchema>;\n\n/** TypeScript type for complete gallery data structure */\nexport type GalleryData = z.infer<typeof GalleryDataSchema>;\n\n/** Deprecated types */\nexport type MediaFileWithPath = z.infer<typeof MediaFileDeprecatedSchema>;\nexport type GallerySectionDeprecated = z.infer<typeof GallerySectionDeprecatedSchema>;\nexport type GalleryDataDeprecated = z.infer<typeof GalleryDataDeprecatedSchema>;\n"]}
1
+ {"version":3,"sources":["../src/gallery/schemas.ts"],"names":["z"],"mappings":"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","file":"gallery.cjs","sourcesContent":["import { z } from 'zod';\n\n/** Zod schema for thumbnail metadata including path and dimensions */\nexport const ThumbnailSchema = z.object({\n baseUrl: z.string().optional(),\n path: z.string(),\n pathRetina: z.string(),\n width: z.number(),\n height: z.number(),\n blurHash: z.string().optional(),\n});\n\n/** Zod schema for media file metadata including type, dimensions, and thumbnail info */\nexport const MediaFileSchema = z.object({\n type: z.enum(['image', 'video']),\n filename: z.string(),\n url: z.string().optional(),\n alt: z.string().optional(),\n width: z.number(),\n height: z.number(),\n thumbnail: ThumbnailSchema.optional(),\n lastMediaTimestamp: z.string().optional(),\n});\n\n/**\n * Zod schema for media file with path.\n * @deprecated Use MediaFileSchema instead which uses 'filename' instead of 'path'.\n */\nexport const MediaFileDeprecatedSchema = z.object({\n type: z.enum(['image', 'video']),\n path: z.string(),\n alt: z.string().optional(),\n width: z.number(),\n height: z.number(),\n thumbnail: ThumbnailSchema.optional(),\n lastMediaTimestamp: z.string().optional(),\n});\n\n/** Zod schema for a gallery section containing title, description, and media files */\nexport const GallerySectionSchema = z.object({\n title: z.string().optional(),\n description: z.string().optional(),\n images: z.array(MediaFileSchema),\n});\n\n/**\n * Zod schema for a gallery section containing title, description, and media files.\n * @deprecated Use GallerySectionSchema instead which uses MediaFileSchema.\n */\nexport const GallerySectionDeprecatedSchema = z.object({\n title: z.string().optional(),\n description: z.string().optional(),\n images: z.array(MediaFileDeprecatedSchema),\n});\n\n/** Zod schema for sub-gallery metadata including title, header image, and path */\nexport const SubGallerySchema = z.object({\n title: z.string(),\n headerImage: z.string(),\n path: z.string(),\n});\n\n/** Zod schema for portrait image size variants */\nconst PortraitSizesSchema = z.object({\n 360: z.string().optional(),\n 480: z.string().optional(),\n 720: z.string().optional(),\n 1080: z.string().optional(),\n});\n\n/** Zod schema for landscape image size variants */\nconst LandscapeSizesSchema = z.object({\n 640: z.string().optional(),\n 960: z.string().optional(),\n 1280: z.string().optional(),\n 1920: z.string().optional(),\n 2560: z.string().optional(),\n 3840: z.string().optional(),\n});\n\n/** Zod schema for header image variants allowing explicit specification of responsive hero images */\nexport const HeaderImageVariantsSchema = z.object({\n portrait: z\n .object({\n avif: PortraitSizesSchema.optional(),\n jpg: PortraitSizesSchema.optional(),\n })\n .optional(),\n landscape: z\n .object({\n avif: LandscapeSizesSchema.optional(),\n jpg: LandscapeSizesSchema.optional(),\n })\n .optional(),\n});\n\n/** Zod schema for complete gallery data including metadata, sections, and sub-galleries */\nexport const GalleryMetadataSchema = z.object({\n image: z.string().optional(),\n imageWidth: z.number().optional(),\n imageHeight: z.number().optional(),\n ogUrl: z.string().optional(),\n ogType: z.string().optional(),\n ogSiteName: z.string().optional(),\n twitterSite: z.string().optional(),\n twitterCreator: z.string().optional(),\n author: z.string().optional(),\n keywords: z.string().optional(),\n canonicalUrl: z.string().optional(),\n language: z.string().optional(),\n robots: z.string().optional(),\n});\n\n/** Zod schema for complete gallery data including metadata, sections, and sub-galleries */\nexport const GalleryDataSchema = z.object({\n title: z.string(),\n description: z.string(),\n mediaBasePath: z.string().optional(),\n url: z.string().optional(),\n headerImage: z.string(),\n headerImageBlurHash: z.string().optional(),\n headerImageVariants: HeaderImageVariantsSchema.optional(),\n theme: z.string().optional(),\n thumbnails: z\n .object({\n size: z.number().optional(),\n edge: z.enum(['auto', 'width', 'height']).optional(),\n })\n .optional(),\n metadata: GalleryMetadataSchema,\n mediaBaseUrl: z.string().optional(),\n thumbsBaseUrl: z.string().optional(),\n analyticsScript: z.string().optional(),\n ctaBanner: z.boolean().optional(),\n sections: z.array(GallerySectionSchema),\n subGalleries: z.object({ title: z.string(), galleries: z.array(SubGallerySchema) }),\n});\n\n/**\n * Zod schema for complete gallery data without mediaBasePath.\n * @deprecated Use GalleryDataSchema instead which includes mediaBasePath and headerImageVariants.\n */\nexport const GalleryDataDeprecatedSchema = z.object({\n title: z.string(),\n description: z.string(),\n url: z.string().optional(),\n headerImage: z.string(),\n thumbnailSize: z.number().optional(),\n metadata: GalleryMetadataSchema,\n mediaBaseUrl: z.string().optional(),\n analyticsScript: z.string().optional(),\n sections: z.array(GallerySectionDeprecatedSchema),\n subGalleries: z.object({ title: z.string(), galleries: z.array(SubGallerySchema) }),\n});\n"]}
@@ -30,7 +30,10 @@ declare const MediaFileSchema: z.ZodObject<{
30
30
  }, z.core.$strip>>;
31
31
  lastMediaTimestamp: z.ZodOptional<z.ZodString>;
32
32
  }, z.core.$strip>;
33
- /** Zod schema for media file with path (deprecated) */
33
+ /**
34
+ * Zod schema for media file with path.
35
+ * @deprecated Use MediaFileSchema instead which uses 'filename' instead of 'path'.
36
+ */
34
37
  declare const MediaFileDeprecatedSchema: z.ZodObject<{
35
38
  type: z.ZodEnum<{
36
39
  image: "image";
@@ -75,7 +78,10 @@ declare const GallerySectionSchema: z.ZodObject<{
75
78
  lastMediaTimestamp: z.ZodOptional<z.ZodString>;
76
79
  }, z.core.$strip>>;
77
80
  }, z.core.$strip>;
78
- /** Zod schema for a gallery section containing title, description, and media files (deprecated) */
81
+ /**
82
+ * Zod schema for a gallery section containing title, description, and media files.
83
+ * @deprecated Use GallerySectionSchema instead which uses MediaFileSchema.
84
+ */
79
85
  declare const GallerySectionDeprecatedSchema: z.ZodObject<{
80
86
  title: z.ZodOptional<z.ZodString>;
81
87
  description: z.ZodOptional<z.ZodString>;
@@ -105,6 +111,41 @@ declare const SubGallerySchema: z.ZodObject<{
105
111
  headerImage: z.ZodString;
106
112
  path: z.ZodString;
107
113
  }, z.core.$strip>;
114
+ /** Zod schema for header image variants allowing explicit specification of responsive hero images */
115
+ declare const HeaderImageVariantsSchema: z.ZodObject<{
116
+ portrait: z.ZodOptional<z.ZodObject<{
117
+ avif: z.ZodOptional<z.ZodObject<{
118
+ 360: z.ZodOptional<z.ZodString>;
119
+ 480: z.ZodOptional<z.ZodString>;
120
+ 720: z.ZodOptional<z.ZodString>;
121
+ 1080: z.ZodOptional<z.ZodString>;
122
+ }, z.core.$strip>>;
123
+ jpg: z.ZodOptional<z.ZodObject<{
124
+ 360: z.ZodOptional<z.ZodString>;
125
+ 480: z.ZodOptional<z.ZodString>;
126
+ 720: z.ZodOptional<z.ZodString>;
127
+ 1080: z.ZodOptional<z.ZodString>;
128
+ }, z.core.$strip>>;
129
+ }, z.core.$strip>>;
130
+ landscape: z.ZodOptional<z.ZodObject<{
131
+ avif: z.ZodOptional<z.ZodObject<{
132
+ 640: z.ZodOptional<z.ZodString>;
133
+ 960: z.ZodOptional<z.ZodString>;
134
+ 1280: z.ZodOptional<z.ZodString>;
135
+ 1920: z.ZodOptional<z.ZodString>;
136
+ 2560: z.ZodOptional<z.ZodString>;
137
+ 3840: z.ZodOptional<z.ZodString>;
138
+ }, z.core.$strip>>;
139
+ jpg: z.ZodOptional<z.ZodObject<{
140
+ 640: z.ZodOptional<z.ZodString>;
141
+ 960: z.ZodOptional<z.ZodString>;
142
+ 1280: z.ZodOptional<z.ZodString>;
143
+ 1920: z.ZodOptional<z.ZodString>;
144
+ 2560: z.ZodOptional<z.ZodString>;
145
+ 3840: z.ZodOptional<z.ZodString>;
146
+ }, z.core.$strip>>;
147
+ }, z.core.$strip>>;
148
+ }, z.core.$strip>;
108
149
  /** Zod schema for complete gallery data including metadata, sections, and sub-galleries */
109
150
  declare const GalleryMetadataSchema: z.ZodObject<{
110
151
  image: z.ZodOptional<z.ZodString>;
@@ -129,7 +170,49 @@ declare const GalleryDataSchema: z.ZodObject<{
129
170
  url: z.ZodOptional<z.ZodString>;
130
171
  headerImage: z.ZodString;
131
172
  headerImageBlurHash: z.ZodOptional<z.ZodString>;
132
- thumbnailSize: z.ZodOptional<z.ZodNumber>;
173
+ headerImageVariants: z.ZodOptional<z.ZodObject<{
174
+ portrait: z.ZodOptional<z.ZodObject<{
175
+ avif: z.ZodOptional<z.ZodObject<{
176
+ 360: z.ZodOptional<z.ZodString>;
177
+ 480: z.ZodOptional<z.ZodString>;
178
+ 720: z.ZodOptional<z.ZodString>;
179
+ 1080: z.ZodOptional<z.ZodString>;
180
+ }, z.core.$strip>>;
181
+ jpg: z.ZodOptional<z.ZodObject<{
182
+ 360: z.ZodOptional<z.ZodString>;
183
+ 480: z.ZodOptional<z.ZodString>;
184
+ 720: z.ZodOptional<z.ZodString>;
185
+ 1080: z.ZodOptional<z.ZodString>;
186
+ }, z.core.$strip>>;
187
+ }, z.core.$strip>>;
188
+ landscape: z.ZodOptional<z.ZodObject<{
189
+ avif: z.ZodOptional<z.ZodObject<{
190
+ 640: z.ZodOptional<z.ZodString>;
191
+ 960: z.ZodOptional<z.ZodString>;
192
+ 1280: z.ZodOptional<z.ZodString>;
193
+ 1920: z.ZodOptional<z.ZodString>;
194
+ 2560: z.ZodOptional<z.ZodString>;
195
+ 3840: z.ZodOptional<z.ZodString>;
196
+ }, z.core.$strip>>;
197
+ jpg: z.ZodOptional<z.ZodObject<{
198
+ 640: z.ZodOptional<z.ZodString>;
199
+ 960: z.ZodOptional<z.ZodString>;
200
+ 1280: z.ZodOptional<z.ZodString>;
201
+ 1920: z.ZodOptional<z.ZodString>;
202
+ 2560: z.ZodOptional<z.ZodString>;
203
+ 3840: z.ZodOptional<z.ZodString>;
204
+ }, z.core.$strip>>;
205
+ }, z.core.$strip>>;
206
+ }, z.core.$strip>>;
207
+ theme: z.ZodOptional<z.ZodString>;
208
+ thumbnails: z.ZodOptional<z.ZodObject<{
209
+ size: z.ZodOptional<z.ZodNumber>;
210
+ edge: z.ZodOptional<z.ZodEnum<{
211
+ width: "width";
212
+ height: "height";
213
+ auto: "auto";
214
+ }>>;
215
+ }, z.core.$strip>>;
133
216
  metadata: z.ZodObject<{
134
217
  image: z.ZodOptional<z.ZodString>;
135
218
  imageWidth: z.ZodOptional<z.ZodNumber>;
@@ -182,7 +265,10 @@ declare const GalleryDataSchema: z.ZodObject<{
182
265
  }, z.core.$strip>>;
183
266
  }, z.core.$strip>;
184
267
  }, z.core.$strip>;
185
- /** Zod schema for complete gallery data without mediaBasePath (deprecated) */
268
+ /**
269
+ * Zod schema for complete gallery data without mediaBasePath.
270
+ * @deprecated Use GalleryDataSchema instead which includes mediaBasePath and headerImageVariants.
271
+ */
186
272
  declare const GalleryDataDeprecatedSchema: z.ZodObject<{
187
273
  title: z.ZodString;
188
274
  description: z.ZodString;
@@ -238,6 +324,7 @@ declare const GalleryDataDeprecatedSchema: z.ZodObject<{
238
324
  }, z.core.$strip>>;
239
325
  }, z.core.$strip>;
240
326
  }, z.core.$strip>;
327
+
241
328
  /** TypeScript type for thumbnail metadata */
242
329
  type Thumbnail = z.infer<typeof ThumbnailSchema>;
243
330
  /** TypeScript type for media file metadata */
@@ -246,13 +333,26 @@ type MediaFile = z.infer<typeof MediaFileSchema>;
246
333
  type GallerySection = z.infer<typeof GallerySectionSchema>;
247
334
  /** TypeScript type for sub-gallery metadata */
248
335
  type SubGallery = z.infer<typeof SubGallerySchema>;
336
+ /** TypeScript type for header image variants */
337
+ type HeaderImageVariants = z.infer<typeof HeaderImageVariantsSchema>;
249
338
  /** TypeScript type for gallery metadata */
250
339
  type GalleryMetadata = z.infer<typeof GalleryMetadataSchema>;
251
340
  /** TypeScript type for complete gallery data structure */
252
341
  type GalleryData = z.infer<typeof GalleryDataSchema>;
253
- /** Deprecated types */
342
+ /**
343
+ * TypeScript type for media file with path.
344
+ * @deprecated Use MediaFile instead which uses 'filename' instead of 'path'.
345
+ */
254
346
  type MediaFileWithPath = z.infer<typeof MediaFileDeprecatedSchema>;
347
+ /**
348
+ * TypeScript type for gallery section with deprecated media file format.
349
+ * @deprecated Use GallerySection instead which uses MediaFile.
350
+ */
255
351
  type GallerySectionDeprecated = z.infer<typeof GallerySectionDeprecatedSchema>;
352
+ /**
353
+ * TypeScript type for complete gallery data without mediaBasePath.
354
+ * @deprecated Use GalleryData instead which includes mediaBasePath and headerImageVariants.
355
+ */
256
356
  type GalleryDataDeprecated = z.infer<typeof GalleryDataDeprecatedSchema>;
257
357
 
258
- export { type GalleryData, type GalleryDataDeprecated, GalleryDataDeprecatedSchema, GalleryDataSchema, type GalleryMetadata, GalleryMetadataSchema, type GallerySection, type GallerySectionDeprecated, GallerySectionDeprecatedSchema, GallerySectionSchema, type MediaFile, MediaFileDeprecatedSchema, MediaFileSchema, type MediaFileWithPath, type SubGallery, SubGallerySchema, type Thumbnail, ThumbnailSchema };
358
+ export { type GalleryData, type GalleryDataDeprecated, GalleryDataDeprecatedSchema, GalleryDataSchema, type GalleryMetadata, GalleryMetadataSchema, type GallerySection, type GallerySectionDeprecated, GallerySectionDeprecatedSchema, GallerySectionSchema, type HeaderImageVariants, HeaderImageVariantsSchema, type MediaFile, MediaFileDeprecatedSchema, MediaFileSchema, type MediaFileWithPath, type SubGallery, SubGallerySchema, type Thumbnail, ThumbnailSchema };
package/dist/gallery.d.ts CHANGED
@@ -30,7 +30,10 @@ declare const MediaFileSchema: z.ZodObject<{
30
30
  }, z.core.$strip>>;
31
31
  lastMediaTimestamp: z.ZodOptional<z.ZodString>;
32
32
  }, z.core.$strip>;
33
- /** Zod schema for media file with path (deprecated) */
33
+ /**
34
+ * Zod schema for media file with path.
35
+ * @deprecated Use MediaFileSchema instead which uses 'filename' instead of 'path'.
36
+ */
34
37
  declare const MediaFileDeprecatedSchema: z.ZodObject<{
35
38
  type: z.ZodEnum<{
36
39
  image: "image";
@@ -75,7 +78,10 @@ declare const GallerySectionSchema: z.ZodObject<{
75
78
  lastMediaTimestamp: z.ZodOptional<z.ZodString>;
76
79
  }, z.core.$strip>>;
77
80
  }, z.core.$strip>;
78
- /** Zod schema for a gallery section containing title, description, and media files (deprecated) */
81
+ /**
82
+ * Zod schema for a gallery section containing title, description, and media files.
83
+ * @deprecated Use GallerySectionSchema instead which uses MediaFileSchema.
84
+ */
79
85
  declare const GallerySectionDeprecatedSchema: z.ZodObject<{
80
86
  title: z.ZodOptional<z.ZodString>;
81
87
  description: z.ZodOptional<z.ZodString>;
@@ -105,6 +111,41 @@ declare const SubGallerySchema: z.ZodObject<{
105
111
  headerImage: z.ZodString;
106
112
  path: z.ZodString;
107
113
  }, z.core.$strip>;
114
+ /** Zod schema for header image variants allowing explicit specification of responsive hero images */
115
+ declare const HeaderImageVariantsSchema: z.ZodObject<{
116
+ portrait: z.ZodOptional<z.ZodObject<{
117
+ avif: z.ZodOptional<z.ZodObject<{
118
+ 360: z.ZodOptional<z.ZodString>;
119
+ 480: z.ZodOptional<z.ZodString>;
120
+ 720: z.ZodOptional<z.ZodString>;
121
+ 1080: z.ZodOptional<z.ZodString>;
122
+ }, z.core.$strip>>;
123
+ jpg: z.ZodOptional<z.ZodObject<{
124
+ 360: z.ZodOptional<z.ZodString>;
125
+ 480: z.ZodOptional<z.ZodString>;
126
+ 720: z.ZodOptional<z.ZodString>;
127
+ 1080: z.ZodOptional<z.ZodString>;
128
+ }, z.core.$strip>>;
129
+ }, z.core.$strip>>;
130
+ landscape: z.ZodOptional<z.ZodObject<{
131
+ avif: z.ZodOptional<z.ZodObject<{
132
+ 640: z.ZodOptional<z.ZodString>;
133
+ 960: z.ZodOptional<z.ZodString>;
134
+ 1280: z.ZodOptional<z.ZodString>;
135
+ 1920: z.ZodOptional<z.ZodString>;
136
+ 2560: z.ZodOptional<z.ZodString>;
137
+ 3840: z.ZodOptional<z.ZodString>;
138
+ }, z.core.$strip>>;
139
+ jpg: z.ZodOptional<z.ZodObject<{
140
+ 640: z.ZodOptional<z.ZodString>;
141
+ 960: z.ZodOptional<z.ZodString>;
142
+ 1280: z.ZodOptional<z.ZodString>;
143
+ 1920: z.ZodOptional<z.ZodString>;
144
+ 2560: z.ZodOptional<z.ZodString>;
145
+ 3840: z.ZodOptional<z.ZodString>;
146
+ }, z.core.$strip>>;
147
+ }, z.core.$strip>>;
148
+ }, z.core.$strip>;
108
149
  /** Zod schema for complete gallery data including metadata, sections, and sub-galleries */
109
150
  declare const GalleryMetadataSchema: z.ZodObject<{
110
151
  image: z.ZodOptional<z.ZodString>;
@@ -129,7 +170,49 @@ declare const GalleryDataSchema: z.ZodObject<{
129
170
  url: z.ZodOptional<z.ZodString>;
130
171
  headerImage: z.ZodString;
131
172
  headerImageBlurHash: z.ZodOptional<z.ZodString>;
132
- thumbnailSize: z.ZodOptional<z.ZodNumber>;
173
+ headerImageVariants: z.ZodOptional<z.ZodObject<{
174
+ portrait: z.ZodOptional<z.ZodObject<{
175
+ avif: z.ZodOptional<z.ZodObject<{
176
+ 360: z.ZodOptional<z.ZodString>;
177
+ 480: z.ZodOptional<z.ZodString>;
178
+ 720: z.ZodOptional<z.ZodString>;
179
+ 1080: z.ZodOptional<z.ZodString>;
180
+ }, z.core.$strip>>;
181
+ jpg: z.ZodOptional<z.ZodObject<{
182
+ 360: z.ZodOptional<z.ZodString>;
183
+ 480: z.ZodOptional<z.ZodString>;
184
+ 720: z.ZodOptional<z.ZodString>;
185
+ 1080: z.ZodOptional<z.ZodString>;
186
+ }, z.core.$strip>>;
187
+ }, z.core.$strip>>;
188
+ landscape: z.ZodOptional<z.ZodObject<{
189
+ avif: z.ZodOptional<z.ZodObject<{
190
+ 640: z.ZodOptional<z.ZodString>;
191
+ 960: z.ZodOptional<z.ZodString>;
192
+ 1280: z.ZodOptional<z.ZodString>;
193
+ 1920: z.ZodOptional<z.ZodString>;
194
+ 2560: z.ZodOptional<z.ZodString>;
195
+ 3840: z.ZodOptional<z.ZodString>;
196
+ }, z.core.$strip>>;
197
+ jpg: z.ZodOptional<z.ZodObject<{
198
+ 640: z.ZodOptional<z.ZodString>;
199
+ 960: z.ZodOptional<z.ZodString>;
200
+ 1280: z.ZodOptional<z.ZodString>;
201
+ 1920: z.ZodOptional<z.ZodString>;
202
+ 2560: z.ZodOptional<z.ZodString>;
203
+ 3840: z.ZodOptional<z.ZodString>;
204
+ }, z.core.$strip>>;
205
+ }, z.core.$strip>>;
206
+ }, z.core.$strip>>;
207
+ theme: z.ZodOptional<z.ZodString>;
208
+ thumbnails: z.ZodOptional<z.ZodObject<{
209
+ size: z.ZodOptional<z.ZodNumber>;
210
+ edge: z.ZodOptional<z.ZodEnum<{
211
+ width: "width";
212
+ height: "height";
213
+ auto: "auto";
214
+ }>>;
215
+ }, z.core.$strip>>;
133
216
  metadata: z.ZodObject<{
134
217
  image: z.ZodOptional<z.ZodString>;
135
218
  imageWidth: z.ZodOptional<z.ZodNumber>;
@@ -182,7 +265,10 @@ declare const GalleryDataSchema: z.ZodObject<{
182
265
  }, z.core.$strip>>;
183
266
  }, z.core.$strip>;
184
267
  }, z.core.$strip>;
185
- /** Zod schema for complete gallery data without mediaBasePath (deprecated) */
268
+ /**
269
+ * Zod schema for complete gallery data without mediaBasePath.
270
+ * @deprecated Use GalleryDataSchema instead which includes mediaBasePath and headerImageVariants.
271
+ */
186
272
  declare const GalleryDataDeprecatedSchema: z.ZodObject<{
187
273
  title: z.ZodString;
188
274
  description: z.ZodString;
@@ -238,6 +324,7 @@ declare const GalleryDataDeprecatedSchema: z.ZodObject<{
238
324
  }, z.core.$strip>>;
239
325
  }, z.core.$strip>;
240
326
  }, z.core.$strip>;
327
+
241
328
  /** TypeScript type for thumbnail metadata */
242
329
  type Thumbnail = z.infer<typeof ThumbnailSchema>;
243
330
  /** TypeScript type for media file metadata */
@@ -246,13 +333,26 @@ type MediaFile = z.infer<typeof MediaFileSchema>;
246
333
  type GallerySection = z.infer<typeof GallerySectionSchema>;
247
334
  /** TypeScript type for sub-gallery metadata */
248
335
  type SubGallery = z.infer<typeof SubGallerySchema>;
336
+ /** TypeScript type for header image variants */
337
+ type HeaderImageVariants = z.infer<typeof HeaderImageVariantsSchema>;
249
338
  /** TypeScript type for gallery metadata */
250
339
  type GalleryMetadata = z.infer<typeof GalleryMetadataSchema>;
251
340
  /** TypeScript type for complete gallery data structure */
252
341
  type GalleryData = z.infer<typeof GalleryDataSchema>;
253
- /** Deprecated types */
342
+ /**
343
+ * TypeScript type for media file with path.
344
+ * @deprecated Use MediaFile instead which uses 'filename' instead of 'path'.
345
+ */
254
346
  type MediaFileWithPath = z.infer<typeof MediaFileDeprecatedSchema>;
347
+ /**
348
+ * TypeScript type for gallery section with deprecated media file format.
349
+ * @deprecated Use GallerySection instead which uses MediaFile.
350
+ */
255
351
  type GallerySectionDeprecated = z.infer<typeof GallerySectionDeprecatedSchema>;
352
+ /**
353
+ * TypeScript type for complete gallery data without mediaBasePath.
354
+ * @deprecated Use GalleryData instead which includes mediaBasePath and headerImageVariants.
355
+ */
256
356
  type GalleryDataDeprecated = z.infer<typeof GalleryDataDeprecatedSchema>;
257
357
 
258
- export { type GalleryData, type GalleryDataDeprecated, GalleryDataDeprecatedSchema, GalleryDataSchema, type GalleryMetadata, GalleryMetadataSchema, type GallerySection, type GallerySectionDeprecated, GallerySectionDeprecatedSchema, GallerySectionSchema, type MediaFile, MediaFileDeprecatedSchema, MediaFileSchema, type MediaFileWithPath, type SubGallery, SubGallerySchema, type Thumbnail, ThumbnailSchema };
358
+ export { type GalleryData, type GalleryDataDeprecated, GalleryDataDeprecatedSchema, GalleryDataSchema, type GalleryMetadata, GalleryMetadataSchema, type GallerySection, type GallerySectionDeprecated, GallerySectionDeprecatedSchema, GallerySectionSchema, type HeaderImageVariants, HeaderImageVariantsSchema, type MediaFile, MediaFileDeprecatedSchema, MediaFileSchema, type MediaFileWithPath, type SubGallery, SubGallerySchema, type Thumbnail, ThumbnailSchema };
package/dist/gallery.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
2
 
3
- // src/gallery.ts
3
+ // src/gallery/schemas.ts
4
4
  var ThumbnailSchema = z.object({
5
5
  baseUrl: z.string().optional(),
6
6
  path: z.string(),
@@ -43,6 +43,30 @@ var SubGallerySchema = z.object({
43
43
  headerImage: z.string(),
44
44
  path: z.string()
45
45
  });
46
+ var PortraitSizesSchema = z.object({
47
+ 360: z.string().optional(),
48
+ 480: z.string().optional(),
49
+ 720: z.string().optional(),
50
+ 1080: z.string().optional()
51
+ });
52
+ var LandscapeSizesSchema = z.object({
53
+ 640: z.string().optional(),
54
+ 960: z.string().optional(),
55
+ 1280: z.string().optional(),
56
+ 1920: z.string().optional(),
57
+ 2560: z.string().optional(),
58
+ 3840: z.string().optional()
59
+ });
60
+ var HeaderImageVariantsSchema = z.object({
61
+ portrait: z.object({
62
+ avif: PortraitSizesSchema.optional(),
63
+ jpg: PortraitSizesSchema.optional()
64
+ }).optional(),
65
+ landscape: z.object({
66
+ avif: LandscapeSizesSchema.optional(),
67
+ jpg: LandscapeSizesSchema.optional()
68
+ }).optional()
69
+ });
46
70
  var GalleryMetadataSchema = z.object({
47
71
  image: z.string().optional(),
48
72
  imageWidth: z.number().optional(),
@@ -65,7 +89,12 @@ var GalleryDataSchema = z.object({
65
89
  url: z.string().optional(),
66
90
  headerImage: z.string(),
67
91
  headerImageBlurHash: z.string().optional(),
68
- thumbnailSize: z.number().optional(),
92
+ headerImageVariants: HeaderImageVariantsSchema.optional(),
93
+ theme: z.string().optional(),
94
+ thumbnails: z.object({
95
+ size: z.number().optional(),
96
+ edge: z.enum(["auto", "width", "height"]).optional()
97
+ }).optional(),
69
98
  metadata: GalleryMetadataSchema,
70
99
  mediaBaseUrl: z.string().optional(),
71
100
  thumbsBaseUrl: z.string().optional(),
@@ -87,6 +116,6 @@ var GalleryDataDeprecatedSchema = z.object({
87
116
  subGalleries: z.object({ title: z.string(), galleries: z.array(SubGallerySchema) })
88
117
  });
89
118
 
90
- export { GalleryDataDeprecatedSchema, GalleryDataSchema, GalleryMetadataSchema, GallerySectionDeprecatedSchema, GallerySectionSchema, MediaFileDeprecatedSchema, MediaFileSchema, SubGallerySchema, ThumbnailSchema };
119
+ export { GalleryDataDeprecatedSchema, GalleryDataSchema, GalleryMetadataSchema, GallerySectionDeprecatedSchema, GallerySectionSchema, HeaderImageVariantsSchema, MediaFileDeprecatedSchema, MediaFileSchema, SubGallerySchema, ThumbnailSchema };
91
120
  //# sourceMappingURL=gallery.js.map
92
121
  //# sourceMappingURL=gallery.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/gallery.ts"],"names":[],"mappings":"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","file":"gallery.js","sourcesContent":["import { z } from 'zod';\n\n/** Zod schema for thumbnail metadata including path and dimensions */\nexport const ThumbnailSchema = z.object({\n baseUrl: z.string().optional(),\n path: z.string(),\n pathRetina: z.string(),\n width: z.number(),\n height: z.number(),\n blurHash: z.string().optional(),\n});\n\n/** Zod schema for media file metadata including type, dimensions, and thumbnail info */\nexport const MediaFileSchema = z.object({\n type: z.enum(['image', 'video']),\n filename: z.string(),\n url: z.string().optional(),\n alt: z.string().optional(),\n width: z.number(),\n height: z.number(),\n thumbnail: ThumbnailSchema.optional(),\n lastMediaTimestamp: z.string().optional(),\n});\n\n/** Zod schema for media file with path (deprecated) */\nexport const MediaFileDeprecatedSchema = z.object({\n type: z.enum(['image', 'video']),\n path: z.string(),\n alt: z.string().optional(),\n width: z.number(),\n height: z.number(),\n thumbnail: ThumbnailSchema.optional(),\n lastMediaTimestamp: z.string().optional(),\n});\n\n/** Zod schema for a gallery section containing title, description, and media files */\nexport const GallerySectionSchema = z.object({\n title: z.string().optional(),\n description: z.string().optional(),\n images: z.array(MediaFileSchema),\n});\n\n/** Zod schema for a gallery section containing title, description, and media files (deprecated) */\nexport const GallerySectionDeprecatedSchema = z.object({\n title: z.string().optional(),\n description: z.string().optional(),\n images: z.array(MediaFileDeprecatedSchema),\n});\n\n/** Zod schema for sub-gallery metadata including title, header image, and path */\nexport const SubGallerySchema = z.object({\n title: z.string(),\n headerImage: z.string(),\n path: z.string(),\n});\n\n/** Zod schema for complete gallery data including metadata, sections, and sub-galleries */\nexport const GalleryMetadataSchema = z.object({\n image: z.string().optional(),\n imageWidth: z.number().optional(),\n imageHeight: z.number().optional(),\n ogUrl: z.string().optional(),\n ogType: z.string().optional(),\n ogSiteName: z.string().optional(),\n twitterSite: z.string().optional(),\n twitterCreator: z.string().optional(),\n author: z.string().optional(),\n keywords: z.string().optional(),\n canonicalUrl: z.string().optional(),\n language: z.string().optional(),\n robots: z.string().optional(),\n});\n\n/** Zod schema for complete gallery data including metadata, sections, and sub-galleries */\nexport const GalleryDataSchema = z.object({\n title: z.string(),\n description: z.string(),\n mediaBasePath: z.string().optional(),\n url: z.string().optional(),\n headerImage: z.string(),\n headerImageBlurHash: z.string().optional(),\n thumbnailSize: z.number().optional(),\n metadata: GalleryMetadataSchema,\n mediaBaseUrl: z.string().optional(),\n thumbsBaseUrl: z.string().optional(),\n analyticsScript: z.string().optional(),\n ctaBanner: z.boolean().optional(),\n sections: z.array(GallerySectionSchema),\n subGalleries: z.object({ title: z.string(), galleries: z.array(SubGallerySchema) }),\n});\n\n/** Zod schema for complete gallery data without mediaBasePath (deprecated) */\nexport const GalleryDataDeprecatedSchema = z.object({\n title: z.string(),\n description: z.string(),\n url: z.string().optional(),\n headerImage: z.string(),\n thumbnailSize: z.number().optional(),\n metadata: GalleryMetadataSchema,\n mediaBaseUrl: z.string().optional(),\n analyticsScript: z.string().optional(),\n sections: z.array(GallerySectionDeprecatedSchema),\n subGalleries: z.object({ title: z.string(), galleries: z.array(SubGallerySchema) }),\n});\n\n/** TypeScript type for thumbnail metadata */\nexport type Thumbnail = z.infer<typeof ThumbnailSchema>;\n\n/** TypeScript type for media file metadata */\nexport type MediaFile = z.infer<typeof MediaFileSchema>;\n\n/** TypeScript type for gallery section data */\nexport type GallerySection = z.infer<typeof GallerySectionSchema>;\n\n/** TypeScript type for sub-gallery metadata */\nexport type SubGallery = z.infer<typeof SubGallerySchema>;\n\n/** TypeScript type for gallery metadata */\nexport type GalleryMetadata = z.infer<typeof GalleryMetadataSchema>;\n\n/** TypeScript type for complete gallery data structure */\nexport type GalleryData = z.infer<typeof GalleryDataSchema>;\n\n/** Deprecated types */\nexport type MediaFileWithPath = z.infer<typeof MediaFileDeprecatedSchema>;\nexport type GallerySectionDeprecated = z.infer<typeof GallerySectionDeprecatedSchema>;\nexport type GalleryDataDeprecated = z.infer<typeof GalleryDataDeprecatedSchema>;\n"]}
1
+ {"version":3,"sources":["../src/gallery/schemas.ts"],"names":[],"mappings":"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","file":"gallery.js","sourcesContent":["import { z } from 'zod';\n\n/** Zod schema for thumbnail metadata including path and dimensions */\nexport const ThumbnailSchema = z.object({\n baseUrl: z.string().optional(),\n path: z.string(),\n pathRetina: z.string(),\n width: z.number(),\n height: z.number(),\n blurHash: z.string().optional(),\n});\n\n/** Zod schema for media file metadata including type, dimensions, and thumbnail info */\nexport const MediaFileSchema = z.object({\n type: z.enum(['image', 'video']),\n filename: z.string(),\n url: z.string().optional(),\n alt: z.string().optional(),\n width: z.number(),\n height: z.number(),\n thumbnail: ThumbnailSchema.optional(),\n lastMediaTimestamp: z.string().optional(),\n});\n\n/**\n * Zod schema for media file with path.\n * @deprecated Use MediaFileSchema instead which uses 'filename' instead of 'path'.\n */\nexport const MediaFileDeprecatedSchema = z.object({\n type: z.enum(['image', 'video']),\n path: z.string(),\n alt: z.string().optional(),\n width: z.number(),\n height: z.number(),\n thumbnail: ThumbnailSchema.optional(),\n lastMediaTimestamp: z.string().optional(),\n});\n\n/** Zod schema for a gallery section containing title, description, and media files */\nexport const GallerySectionSchema = z.object({\n title: z.string().optional(),\n description: z.string().optional(),\n images: z.array(MediaFileSchema),\n});\n\n/**\n * Zod schema for a gallery section containing title, description, and media files.\n * @deprecated Use GallerySectionSchema instead which uses MediaFileSchema.\n */\nexport const GallerySectionDeprecatedSchema = z.object({\n title: z.string().optional(),\n description: z.string().optional(),\n images: z.array(MediaFileDeprecatedSchema),\n});\n\n/** Zod schema for sub-gallery metadata including title, header image, and path */\nexport const SubGallerySchema = z.object({\n title: z.string(),\n headerImage: z.string(),\n path: z.string(),\n});\n\n/** Zod schema for portrait image size variants */\nconst PortraitSizesSchema = z.object({\n 360: z.string().optional(),\n 480: z.string().optional(),\n 720: z.string().optional(),\n 1080: z.string().optional(),\n});\n\n/** Zod schema for landscape image size variants */\nconst LandscapeSizesSchema = z.object({\n 640: z.string().optional(),\n 960: z.string().optional(),\n 1280: z.string().optional(),\n 1920: z.string().optional(),\n 2560: z.string().optional(),\n 3840: z.string().optional(),\n});\n\n/** Zod schema for header image variants allowing explicit specification of responsive hero images */\nexport const HeaderImageVariantsSchema = z.object({\n portrait: z\n .object({\n avif: PortraitSizesSchema.optional(),\n jpg: PortraitSizesSchema.optional(),\n })\n .optional(),\n landscape: z\n .object({\n avif: LandscapeSizesSchema.optional(),\n jpg: LandscapeSizesSchema.optional(),\n })\n .optional(),\n});\n\n/** Zod schema for complete gallery data including metadata, sections, and sub-galleries */\nexport const GalleryMetadataSchema = z.object({\n image: z.string().optional(),\n imageWidth: z.number().optional(),\n imageHeight: z.number().optional(),\n ogUrl: z.string().optional(),\n ogType: z.string().optional(),\n ogSiteName: z.string().optional(),\n twitterSite: z.string().optional(),\n twitterCreator: z.string().optional(),\n author: z.string().optional(),\n keywords: z.string().optional(),\n canonicalUrl: z.string().optional(),\n language: z.string().optional(),\n robots: z.string().optional(),\n});\n\n/** Zod schema for complete gallery data including metadata, sections, and sub-galleries */\nexport const GalleryDataSchema = z.object({\n title: z.string(),\n description: z.string(),\n mediaBasePath: z.string().optional(),\n url: z.string().optional(),\n headerImage: z.string(),\n headerImageBlurHash: z.string().optional(),\n headerImageVariants: HeaderImageVariantsSchema.optional(),\n theme: z.string().optional(),\n thumbnails: z\n .object({\n size: z.number().optional(),\n edge: z.enum(['auto', 'width', 'height']).optional(),\n })\n .optional(),\n metadata: GalleryMetadataSchema,\n mediaBaseUrl: z.string().optional(),\n thumbsBaseUrl: z.string().optional(),\n analyticsScript: z.string().optional(),\n ctaBanner: z.boolean().optional(),\n sections: z.array(GallerySectionSchema),\n subGalleries: z.object({ title: z.string(), galleries: z.array(SubGallerySchema) }),\n});\n\n/**\n * Zod schema for complete gallery data without mediaBasePath.\n * @deprecated Use GalleryDataSchema instead which includes mediaBasePath and headerImageVariants.\n */\nexport const GalleryDataDeprecatedSchema = z.object({\n title: z.string(),\n description: z.string(),\n url: z.string().optional(),\n headerImage: z.string(),\n thumbnailSize: z.number().optional(),\n metadata: GalleryMetadataSchema,\n mediaBaseUrl: z.string().optional(),\n analyticsScript: z.string().optional(),\n sections: z.array(GallerySectionDeprecatedSchema),\n subGalleries: z.object({ title: z.string(), galleries: z.array(SubGallerySchema) }),\n});\n"]}