social-masonry 1.0.0 → 1.0.1
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 +97 -308
- package/dist/index.d.ts +62 -437
- package/dist/index.esm.js +93 -1354
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +101 -1366
- package/dist/index.js.map +1 -1
- package/dist/react/index.d.ts +35 -141
- package/dist/react/index.esm.js +280 -651
- package/dist/react/index.esm.js.map +1 -1
- package/dist/react/index.js +278 -649
- package/dist/react/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../src/utils.ts","../../src/layout-engine.ts","../../src/virtualization-engine.ts","../../src/react/SocialMasonry.tsx"],"sourcesContent":["/**\n * Social Masonry - Utility Functions\n */\n\nimport type { ColumnConfig, SocialPost } from './types';\n\n/**\n * Debounce function execution\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function debounce<T extends (...args: any[]) => any>(\n fn: T,\n delay: number\n): (...args: Parameters<T>) => void {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n return function (this: unknown, ...args: Parameters<T>) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n fn.apply(this, args);\n timeoutId = null;\n }, delay);\n };\n}\n\n/**\n * Throttle function execution\n */\nexport function throttle<T extends (...args: unknown[]) => unknown>(\n fn: T,\n limit: number\n): (...args: Parameters<T>) => void {\n let inThrottle = false;\n let lastArgs: Parameters<T> | null = null;\n \n return function (this: unknown, ...args: Parameters<T>) {\n if (!inThrottle) {\n fn.apply(this, args);\n inThrottle = true;\n setTimeout(() => {\n inThrottle = false;\n if (lastArgs) {\n fn.apply(this, lastArgs);\n lastArgs = null;\n }\n }, limit);\n } else {\n lastArgs = args;\n }\n };\n}\n\n/**\n * Get number of columns based on viewport width\n */\nexport function getColumnCount(\n columns: number | ColumnConfig[],\n containerWidth: number\n): number {\n if (typeof columns === 'number') {\n return columns;\n }\n \n // Sort by minWidth descending\n const sorted = [...columns].sort((a, b) => b.minWidth - a.minWidth);\n \n for (const config of sorted) {\n if (containerWidth >= config.minWidth) {\n return config.columns;\n }\n }\n \n // Return smallest breakpoint's columns or default to 1\n return sorted[sorted.length - 1]?.columns ?? 1;\n}\n\n/**\n * Default responsive column configuration\n */\nexport const defaultColumnConfig: ColumnConfig[] = [\n { columns: 4, minWidth: 1200 },\n { columns: 3, minWidth: 900 },\n { columns: 2, minWidth: 600 },\n { columns: 1, minWidth: 0 },\n];\n\n/**\n * Format number with abbreviations (1K, 1M, etc.)\n */\nexport function formatNumber(num: number): string {\n if (num >= 1_000_000) {\n return `${(num / 1_000_000).toFixed(1).replace(/\\.0$/, '')}M`;\n }\n if (num >= 1_000) {\n return `${(num / 1_000).toFixed(1).replace(/\\.0$/, '')}K`;\n }\n return num.toString();\n}\n\n/**\n * Format relative time\n */\nexport function formatRelativeTime(date: Date): string {\n const now = new Date();\n const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);\n \n if (diffInSeconds < 60) {\n return 'now';\n }\n \n const diffInMinutes = Math.floor(diffInSeconds / 60);\n if (diffInMinutes < 60) {\n return `${diffInMinutes}m`;\n }\n \n const diffInHours = Math.floor(diffInMinutes / 60);\n if (diffInHours < 24) {\n return `${diffInHours}h`;\n }\n \n const diffInDays = Math.floor(diffInHours / 24);\n if (diffInDays < 7) {\n return `${diffInDays}d`;\n }\n \n const diffInWeeks = Math.floor(diffInDays / 7);\n if (diffInWeeks < 4) {\n return `${diffInWeeks}w`;\n }\n \n // Format as date for older posts\n return date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n });\n}\n\n/**\n * Parse CSS value to pixels\n */\nexport function parseCSSValue(value: number | string, containerWidth?: number): number {\n if (typeof value === 'number') {\n return value;\n }\n \n const numMatch = value.match(/^([\\d.]+)(px|rem|em|%|vw)?$/);\n if (!numMatch) {\n return 0;\n }\n \n const num = parseFloat(numMatch[1]);\n const unit = numMatch[2] || 'px';\n \n switch (unit) {\n case 'px':\n return num;\n case 'rem':\n return num * 16; // Assume 16px base\n case 'em':\n return num * 16;\n case '%':\n return containerWidth ? (num / 100) * containerWidth : 0;\n case 'vw':\n return (num / 100) * window.innerWidth;\n default:\n return num;\n }\n}\n\n/**\n * Generate unique ID\n */\nexport function generateId(): string {\n return `sm-${Math.random().toString(36).substring(2, 9)}`;\n}\n\n/**\n * Check if element is in viewport\n */\nexport function isInViewport(\n element: { top: number; bottom: number },\n scrollTop: number,\n viewportHeight: number,\n overscan: number = 0\n): boolean {\n const expandedTop = scrollTop - overscan;\n const expandedBottom = scrollTop + viewportHeight + overscan;\n \n return element.bottom >= expandedTop && element.top <= expandedBottom;\n}\n\n/**\n * Get scroll position\n */\nexport function getScrollPosition(scrollContainer: HTMLElement | Window | null): {\n scrollTop: number;\n viewportHeight: number;\n} {\n if (!scrollContainer || scrollContainer === window) {\n return {\n scrollTop: window.scrollY || document.documentElement.scrollTop,\n viewportHeight: window.innerHeight,\n };\n }\n \n return {\n scrollTop: (scrollContainer as HTMLElement).scrollTop,\n viewportHeight: (scrollContainer as HTMLElement).clientHeight,\n };\n}\n\n/**\n * Type guard for Twitter posts\n */\nexport function isTwitterPost(post: SocialPost): post is import('./types').TwitterPost {\n return post.platform === 'twitter';\n}\n\n/**\n * Type guard for Instagram posts\n */\nexport function isInstagramPost(post: SocialPost): post is import('./types').InstagramPost {\n return post.platform === 'instagram';\n}\n\n/**\n * Clamp number between min and max\n */\nexport function clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max);\n}\n\n/**\n * Merge objects deeply\n */\nexport function deepMerge<T extends Record<string, unknown>>(\n target: T,\n ...sources: Partial<T>[]\n): T {\n const result = { ...target };\n \n for (const source of sources) {\n if (!source) continue;\n \n for (const key of Object.keys(source)) {\n const targetValue = result[key as keyof T];\n const sourceValue = source[key as keyof T];\n \n if (\n sourceValue !== undefined &&\n typeof sourceValue === 'object' &&\n sourceValue !== null &&\n !Array.isArray(sourceValue) &&\n typeof targetValue === 'object' &&\n targetValue !== null &&\n !Array.isArray(targetValue)\n ) {\n (result as Record<string, unknown>)[key] = deepMerge(\n targetValue as Record<string, unknown>,\n sourceValue as Record<string, unknown>\n );\n } else if (sourceValue !== undefined) {\n (result as Record<string, unknown>)[key] = sourceValue;\n }\n }\n }\n \n return result;\n}\n\n/**\n * Create CSS custom properties from config\n */\nexport function createCSSVariables(prefix: string, config: Record<string, unknown>): string {\n const vars: string[] = [];\n \n function processValue(key: string, value: unknown): void {\n if (value === undefined || value === null) return;\n \n if (typeof value === 'object' && !Array.isArray(value)) {\n for (const [subKey, subValue] of Object.entries(value as Record<string, unknown>)) {\n processValue(`${key}-${subKey}`, subValue);\n }\n } else {\n const cssValue = typeof value === 'number' ? `${value}px` : String(value);\n vars.push(`--${prefix}-${key}: ${cssValue};`);\n }\n }\n \n for (const [key, value] of Object.entries(config)) {\n processValue(key, value);\n }\n \n return vars.join('\\n');\n}\n\n/**\n * Request animation frame with fallback\n */\nexport const raf =\n typeof requestAnimationFrame !== 'undefined'\n ? requestAnimationFrame\n : (callback: FrameRequestCallback) => setTimeout(callback, 16);\n\n/**\n * Cancel animation frame with fallback\n */\nexport const cancelRaf =\n typeof cancelAnimationFrame !== 'undefined'\n ? cancelAnimationFrame\n : (id: number) => clearTimeout(id);\n\n/**\n * Check if we're in a browser environment\n */\nexport const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Check if ResizeObserver is supported\n */\nexport const supportsResizeObserver = isBrowser && typeof ResizeObserver !== 'undefined';\n\n/**\n * Check if IntersectionObserver is supported\n */\nexport const supportsIntersectionObserver =\n isBrowser && typeof IntersectionObserver !== 'undefined';\n","/**\n * Social Masonry - Layout Engine\n * Calculates positions for masonry grid items\n */\n\nimport type {\n ItemPosition,\n LayoutState,\n MasonryConfig,\n SocialPost,\n} from './types';\nimport {\n defaultColumnConfig,\n getColumnCount,\n parseCSSValue,\n} from './utils';\n\nexport interface LayoutEngineOptions extends MasonryConfig {\n containerWidth: number;\n itemHeights: Map<string, number>;\n}\n\nexport class LayoutEngine {\n private options: Required<LayoutEngineOptions>;\n private state: LayoutState;\n\n constructor(options: LayoutEngineOptions) {\n this.options = {\n gap: 16,\n columns: defaultColumnConfig,\n defaultColumns: 3,\n padding: 0,\n animationDuration: 300,\n animate: true,\n easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n ...options,\n };\n\n this.state = {\n positions: new Map(),\n columnHeights: [],\n containerHeight: 0,\n columnWidth: 0,\n };\n }\n\n /**\n * Calculate layout for all posts\n */\n calculate(posts: SocialPost[]): LayoutState {\n const { containerWidth, itemHeights } = this.options;\n const gap = parseCSSValue(this.options.gap);\n const padding = parseCSSValue(this.options.padding);\n \n // Calculate column count and width\n const columnCount = getColumnCount(this.options.columns, containerWidth);\n const availableWidth = containerWidth - padding * 2;\n const totalGapWidth = gap * (columnCount - 1);\n const columnWidth = (availableWidth - totalGapWidth) / columnCount;\n\n // Initialize column heights\n const columnHeights = new Array(columnCount).fill(0);\n const positions = new Map<string, ItemPosition>();\n\n // Place each item in the shortest column\n for (const post of posts) {\n const itemHeight = itemHeights.get(post.id) ?? this.estimateHeight(post, columnWidth);\n \n // Find shortest column\n const shortestColumn = columnHeights.indexOf(Math.min(...columnHeights));\n \n // Calculate position\n const x = padding + shortestColumn * (columnWidth + gap);\n const y = columnHeights[shortestColumn];\n \n positions.set(post.id, {\n id: post.id,\n x,\n y,\n width: columnWidth,\n height: itemHeight,\n column: shortestColumn,\n });\n\n // Update column height\n columnHeights[shortestColumn] = y + itemHeight + gap;\n }\n\n // Remove last gap from column heights\n const containerHeight = Math.max(...columnHeights.map(h => h - gap), 0);\n\n this.state = {\n positions,\n columnHeights,\n containerHeight,\n columnWidth,\n };\n\n return this.state;\n }\n\n /**\n * Estimate item height based on content\n */\n private estimateHeight(post: SocialPost, columnWidth: number): number {\n let height = 0;\n\n // Header (avatar, name, etc.)\n height += 56;\n\n // Text content\n if (post.platform === 'twitter') {\n const textLength = post.content.text.length;\n const avgCharsPerLine = Math.floor(columnWidth / 8); // ~8px per char\n const lines = Math.ceil(textLength / avgCharsPerLine);\n height += lines * 24; // ~24px per line\n } else if (post.content.caption) {\n const captionLength = post.content.caption.length;\n const avgCharsPerLine = Math.floor(columnWidth / 8);\n const lines = Math.min(Math.ceil(captionLength / avgCharsPerLine), 4); // Max 4 lines\n height += lines * 20;\n }\n\n // Media\n if (post.platform === 'twitter' && post.media?.length) {\n const media = post.media[0];\n const aspectRatio = media.aspectRatio ?? 16 / 9;\n height += columnWidth / aspectRatio;\n } else if (post.platform === 'instagram') {\n const aspectRatio = post.media.aspectRatio ?? 1;\n height += columnWidth / aspectRatio;\n }\n\n // Footer (metrics, timestamp)\n height += 44;\n\n // Padding\n height += 24;\n\n return Math.round(height);\n }\n\n /**\n * Update single item height and recalculate affected items\n */\n updateItemHeight(id: string, height: number): void {\n this.options.itemHeights.set(id, height);\n }\n\n /**\n * Get current layout state\n */\n getState(): LayoutState {\n return this.state;\n }\n\n /**\n * Get position for specific item\n */\n getPosition(id: string): ItemPosition | undefined {\n return this.state.positions.get(id);\n }\n\n /**\n * Update container width\n */\n setContainerWidth(width: number): void {\n this.options.containerWidth = width;\n }\n\n /**\n * Get current column count\n */\n getColumnCount(): number {\n return getColumnCount(this.options.columns, this.options.containerWidth);\n }\n\n /**\n * Get CSS variables for animations\n */\n getCSSVariables(): Record<string, string> {\n return {\n '--sm-animation-duration': `${this.options.animationDuration}ms`,\n '--sm-easing': this.options.easing,\n '--sm-gap': typeof this.options.gap === 'number' \n ? `${this.options.gap}px` \n : this.options.gap,\n '--sm-column-width': `${this.state.columnWidth}px`,\n '--sm-container-height': `${this.state.containerHeight}px`,\n };\n }\n}\n\n/**\n * Create a new layout engine instance\n */\nexport function createLayoutEngine(options: LayoutEngineOptions): LayoutEngine {\n return new LayoutEngine(options);\n}\n","/**\n * Social Masonry - Virtualization Engine\n * Handles virtual scrolling for large lists\n */\n\nimport type {\n ItemPosition,\n SocialPost,\n VirtualItem,\n VirtualizationConfig,\n} from './types';\nimport {\n getScrollPosition,\n isInViewport,\n throttle,\n raf,\n cancelRaf,\n} from './utils';\n\nexport interface VirtualizationEngineOptions extends VirtualizationConfig {\n posts: SocialPost[];\n positions: Map<string, ItemPosition>;\n onVisibleItemsChange?: (items: VirtualItem[]) => void;\n}\n\nexport class VirtualizationEngine {\n private options: Required<VirtualizationConfig>;\n private posts: SocialPost[];\n private positions: Map<string, ItemPosition>;\n private visibleItems: VirtualItem[] = [];\n private scrollHandler: () => void;\n private rafId: number | null = null;\n private lastScrollTop = 0;\n private isScrolling = false;\n private scrollEndTimeout: ReturnType<typeof setTimeout> | null = null;\n private onVisibleItemsChange?: (items: VirtualItem[]) => void;\n\n constructor(options: VirtualizationEngineOptions) {\n this.options = {\n enabled: true,\n overscan: 3,\n estimatedItemHeight: 400,\n scrollContainer: null,\n ...options,\n };\n \n this.posts = options.posts;\n this.positions = options.positions;\n this.onVisibleItemsChange = options.onVisibleItemsChange;\n\n this.scrollHandler = throttle(this.handleScroll.bind(this), 16);\n }\n\n /**\n * Initialize scroll listener\n */\n init(): void {\n if (!this.options.enabled) return;\n\n const container = this.options.scrollContainer ?? window;\n container.addEventListener('scroll', this.scrollHandler, { passive: true });\n \n // Initial calculation\n this.calculateVisibleItems();\n }\n\n /**\n * Destroy and cleanup\n */\n destroy(): void {\n const container = this.options.scrollContainer ?? window;\n container.removeEventListener('scroll', this.scrollHandler);\n \n if (this.rafId !== null) {\n cancelRaf(this.rafId);\n }\n \n if (this.scrollEndTimeout) {\n clearTimeout(this.scrollEndTimeout);\n }\n }\n\n /**\n * Handle scroll event\n */\n private handleScroll(): void {\n if (this.rafId !== null) return;\n\n this.isScrolling = true;\n \n // Clear existing scroll end timeout\n if (this.scrollEndTimeout) {\n clearTimeout(this.scrollEndTimeout);\n }\n \n // Set scroll end detection\n this.scrollEndTimeout = setTimeout(() => {\n this.isScrolling = false;\n }, 150);\n\n this.rafId = raf(() => {\n this.rafId = null;\n this.calculateVisibleItems();\n });\n }\n\n /**\n * Calculate which items are visible\n */\n calculateVisibleItems(): VirtualItem[] {\n const { scrollTop, viewportHeight } = getScrollPosition(this.options.scrollContainer);\n const overscanPx = this.options.overscan * this.options.estimatedItemHeight;\n \n this.lastScrollTop = scrollTop;\n \n const newVisibleItems: VirtualItem[] = [];\n\n for (let i = 0; i < this.posts.length; i++) {\n const post = this.posts[i];\n const position = this.positions.get(post.id);\n \n if (!position) continue;\n\n const isVisible = isInViewport(\n {\n top: position.y,\n bottom: position.y + position.height,\n },\n scrollTop,\n viewportHeight,\n overscanPx\n );\n\n if (isVisible) {\n newVisibleItems.push({\n index: i,\n post,\n position,\n isVisible: true,\n });\n }\n }\n\n // Check if visible items changed\n const hasChanged = this.hasVisibleItemsChanged(newVisibleItems);\n \n if (hasChanged) {\n this.visibleItems = newVisibleItems;\n this.onVisibleItemsChange?.(newVisibleItems);\n }\n\n return this.visibleItems;\n }\n\n /**\n * Check if visible items have changed\n */\n private hasVisibleItemsChanged(newItems: VirtualItem[]): boolean {\n if (newItems.length !== this.visibleItems.length) {\n return true;\n }\n\n for (let i = 0; i < newItems.length; i++) {\n if (newItems[i].post.id !== this.visibleItems[i].post.id) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Update posts and positions\n */\n update(posts: SocialPost[], positions: Map<string, ItemPosition>): void {\n this.posts = posts;\n this.positions = positions;\n this.calculateVisibleItems();\n }\n\n /**\n * Get visible items\n */\n getVisibleItems(): VirtualItem[] {\n return this.visibleItems;\n }\n\n /**\n * Get all items (for non-virtualized mode)\n */\n getAllItems(): VirtualItem[] {\n return this.posts.map((post, index) => ({\n index,\n post,\n position: this.positions.get(post.id)!,\n isVisible: true,\n }));\n }\n\n /**\n * Check if scrolling\n */\n getIsScrolling(): boolean {\n return this.isScrolling;\n }\n\n /**\n * Get scroll direction\n */\n getScrollDirection(): 'up' | 'down' | 'none' {\n const { scrollTop } = getScrollPosition(this.options.scrollContainer);\n \n if (scrollTop > this.lastScrollTop) {\n return 'down';\n } else if (scrollTop < this.lastScrollTop) {\n return 'up';\n }\n \n return 'none';\n }\n\n /**\n * Check if near bottom (for infinite scroll)\n */\n isNearBottom(threshold: number = 500): boolean {\n const { scrollTop, viewportHeight } = getScrollPosition(this.options.scrollContainer);\n \n // Get container height from positions\n let maxBottom = 0;\n for (const position of this.positions.values()) {\n maxBottom = Math.max(maxBottom, position.y + position.height);\n }\n \n return scrollTop + viewportHeight >= maxBottom - threshold;\n }\n\n /**\n * Scroll to item\n */\n scrollToItem(id: string, behavior: ScrollBehavior = 'smooth'): void {\n const position = this.positions.get(id);\n if (!position) return;\n\n const container = this.options.scrollContainer ?? window;\n \n if (container === window) {\n window.scrollTo({\n top: position.y,\n behavior,\n });\n } else {\n (container as HTMLElement).scrollTo({\n top: position.y,\n behavior,\n });\n }\n }\n\n /**\n * Get render range for optimization\n */\n getRenderRange(): { start: number; end: number } {\n if (this.visibleItems.length === 0) {\n return { start: 0, end: 0 };\n }\n\n const indices = this.visibleItems.map(item => item.index);\n return {\n start: Math.min(...indices),\n end: Math.max(...indices) + 1,\n };\n }\n}\n\n/**\n * Create a new virtualization engine instance\n */\nexport function createVirtualizationEngine(\n options: VirtualizationEngineOptions\n): VirtualizationEngine {\n return new VirtualizationEngine(options);\n}\n","/**\n * Social Masonry - React Component\n * Beautiful masonry layout for X (Twitter) and Instagram embeds\n */\n\nimport React, {\n useEffect,\n useRef,\n useState,\n useCallback,\n useMemo,\n forwardRef,\n useImperativeHandle,\n} from 'react';\nimport type {\n SocialMasonryProps,\n SocialPost,\n ItemPosition,\n CardConfig,\n VirtualItem,\n} from '../types';\nimport { LayoutEngine } from '../layout-engine';\nimport { VirtualizationEngine } from '../virtualization-engine';\nimport {\n defaultColumnConfig,\n formatNumber,\n formatRelativeTime,\n isTwitterPost,\n isInstagramPost,\n debounce,\n} from '../utils';\n\n// ============================================\n// Icons\n// ============================================\n\nconst TwitterIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg viewBox=\"0 0 24 24\" className={className}>\n <path fill=\"currentColor\" d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\"/>\n </svg>\n);\n\nconst InstagramIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg viewBox=\"0 0 24 24\" className={className}>\n <path fill=\"currentColor\" d=\"M12 2c2.717 0 3.056.01 4.122.06 1.065.05 1.79.217 2.428.465.66.254 1.216.598 1.772 1.153a4.908 4.908 0 0 1 1.153 1.772c.247.637.415 1.363.465 2.428.047 1.066.06 1.405.06 4.122 0 2.717-.01 3.056-.06 4.122-.05 1.065-.218 1.79-.465 2.428a4.883 4.883 0 0 1-1.153 1.772 4.915 4.915 0 0 1-1.772 1.153c-.637.247-1.363.415-2.428.465-1.066.047-1.405.06-4.122.06-2.717 0-3.056-.01-4.122-.06-1.065-.05-1.79-.218-2.428-.465a4.89 4.89 0 0 1-1.772-1.153 4.904 4.904 0 0 1-1.153-1.772c-.248-.637-.415-1.363-.465-2.428C2.013 15.056 2 14.717 2 12c0-2.717.01-3.056.06-4.122.05-1.066.217-1.79.465-2.428a4.88 4.88 0 0 1 1.153-1.772A4.897 4.897 0 0 1 5.45 2.525c.638-.248 1.362-.415 2.428-.465C8.944 2.013 9.283 2 12 2zm0 1.802c-2.67 0-2.986.01-4.04.058-.976.045-1.505.207-1.858.344-.466.182-.8.398-1.15.748-.35.35-.566.684-.748 1.15-.137.353-.3.882-.344 1.857-.048 1.055-.058 1.37-.058 4.041 0 2.67.01 2.986.058 4.04.045.976.207 1.505.344 1.858.182.466.399.8.748 1.15.35.35.684.566 1.15.748.353.137.882.3 1.857.344 1.054.048 1.37.058 4.041.058 2.67 0 2.987-.01 4.04-.058.976-.045 1.505-.207 1.858-.344.466-.182.8-.398 1.15-.748.35-.35.566-.684.748-1.15.137-.353.3-.882.344-1.857.048-1.055.058-1.37.058-4.041 0-2.67-.01-2.986-.058-4.04-.045-.976-.207-1.505-.344-1.858a3.097 3.097 0 0 0-.748-1.15 3.098 3.098 0 0 0-1.15-.748c-.353-.137-.882-.3-1.857-.344-1.055-.048-1.37-.058-4.041-.058zm0 3.063a5.135 5.135 0 1 1 0 10.27 5.135 5.135 0 0 1 0-10.27zm0 8.468a3.333 3.333 0 1 0 0-6.666 3.333 3.333 0 0 0 0 6.666zm6.538-8.671a1.2 1.2 0 1 1-2.4 0 1.2 1.2 0 0 1 2.4 0z\"/>\n </svg>\n);\n\nconst VerifiedIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg viewBox=\"0 0 24 24\" className={className}>\n <path fill=\"currentColor\" d=\"M22.25 12c0-1.43-.88-2.67-2.19-3.34.46-1.39.2-2.9-.81-3.91s-2.52-1.27-3.91-.81c-.66-1.31-1.91-2.19-3.34-2.19s-2.67.88-3.34 2.19c-1.39-.46-2.9-.2-3.91.81s-1.27 2.52-.81 3.91C2.63 9.33 1.75 10.57 1.75 12s.88 2.67 2.19 3.34c-.46 1.39-.2 2.9.81 3.91s2.52 1.27 3.91.81c.66 1.31 1.91 2.19 3.34 2.19s2.67-.88 3.34-2.19c1.39.46 2.9.2 3.91-.81s1.27-2.52.81-3.91c1.31-.67 2.19-1.91 2.19-3.34zm-11.71 4.2L6.8 12.46l1.41-1.42 2.26 2.26 4.8-5.23 1.47 1.36-6.2 6.77z\"/>\n </svg>\n);\n\nconst PlayIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg viewBox=\"0 0 24 24\" className={className}>\n <path fill=\"currentColor\" d=\"M8 5v14l11-7z\"/>\n </svg>\n);\n\n// ============================================\n// Card Component\n// ============================================\n\ninterface CardProps extends CardConfig {\n post: SocialPost;\n position: ItemPosition;\n onPostClick?: (post: SocialPost, event: React.MouseEvent) => void;\n onAuthorClick?: (post: SocialPost, event: React.MouseEvent) => void;\n onMediaClick?: (post: SocialPost, mediaIndex: number, event: React.MouseEvent) => void;\n onHeightChange?: (id: string, height: number) => void;\n}\n\nconst Card: React.FC<CardProps> = ({\n post,\n position,\n variant = 'default',\n theme = 'auto',\n borderRadius = 12,\n showPlatformIcon = true,\n showAuthor = true,\n showMetrics = true,\n showTimestamp = true,\n formatDate = formatRelativeTime,\n formatNumber: formatNum = formatNumber,\n className = '',\n hoverEffect = true,\n imageLoading = 'lazy',\n fallbackImage = '',\n onPostClick,\n onAuthorClick,\n onMediaClick,\n onHeightChange,\n}) => {\n const cardRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (cardRef.current && onHeightChange) {\n const height = cardRef.current.offsetHeight;\n if (height !== position.height) {\n onHeightChange(post.id, height);\n }\n }\n }, [post.id, position.height, onHeightChange]);\n\n const handlePostClick = useCallback((e: React.MouseEvent) => {\n const target = e.target as HTMLElement;\n if (target.tagName === 'A' || target.closest('a')) return;\n onPostClick?.(post, e);\n }, [post, onPostClick]);\n\n const handleAuthorClick = useCallback((e: React.MouseEvent) => {\n e.stopPropagation();\n onAuthorClick?.(post, e);\n }, [post, onAuthorClick]);\n\n const handleMediaClick = useCallback((index: number) => (e: React.MouseEvent) => {\n e.stopPropagation();\n onMediaClick?.(post, index, e);\n }, [post, onMediaClick]);\n\n const classes = [\n 'sm-card',\n `sm-card--${post.platform}`,\n `sm-card--${variant}`,\n `sm-card--${theme}`,\n hoverEffect && 'sm-card--hover',\n className,\n ].filter(Boolean).join(' ');\n\n const style: React.CSSProperties = {\n position: 'absolute',\n left: position.x,\n top: position.y,\n width: position.width,\n borderRadius: typeof borderRadius === 'number' ? borderRadius : borderRadius,\n cursor: onPostClick ? 'pointer' : undefined,\n };\n\n const date = post.createdAt instanceof Date ? post.createdAt : new Date(post.createdAt);\n\n return (\n <div\n ref={cardRef}\n className={classes}\n style={style}\n onClick={handlePostClick}\n data-post-id={post.id}\n data-platform={post.platform}\n >\n {/* Platform Icon */}\n {showPlatformIcon && (\n <div className=\"sm-card__platform-icon\">\n {post.platform === 'twitter' ? (\n <TwitterIcon className=\"sm-platform-icon sm-platform-icon--twitter\" />\n ) : (\n <InstagramIcon className=\"sm-platform-icon sm-platform-icon--instagram\" />\n )}\n </div>\n )}\n\n {/* Header */}\n {showAuthor && (\n <div \n className=\"sm-card__header\"\n onClick={onAuthorClick ? handleAuthorClick : undefined}\n style={{ cursor: onAuthorClick ? 'pointer' : undefined }}\n >\n <img\n src={post.author.avatarUrl || fallbackImage}\n alt={post.author.displayName || post.author.username}\n className=\"sm-card__avatar\"\n loading={imageLoading}\n onError={(e) => {\n if (fallbackImage) {\n (e.target as HTMLImageElement).src = fallbackImage;\n }\n }}\n />\n <div className=\"sm-card__author\">\n <span className=\"sm-card__author-name\">\n {post.author.displayName || post.author.username}\n {post.author.verified && <VerifiedIcon className=\"sm-card__verified\" />}\n </span>\n <span className=\"sm-card__author-handle\">@{post.author.username}</span>\n </div>\n </div>\n )}\n\n {/* Content */}\n <div className=\"sm-card__content\">\n {isTwitterPost(post) && (\n <p className=\"sm-card__text\">{post.content.text}</p>\n )}\n {isInstagramPost(post) && post.content.caption && (\n <p className=\"sm-card__caption\">\n {post.content.caption.length > 150 \n ? `${post.content.caption.substring(0, 150)}...` \n : post.content.caption}\n </p>\n )}\n </div>\n\n {/* Media */}\n {isTwitterPost(post) && post.media && post.media.length > 0 && (\n <div className={`sm-card__media ${post.media.length > 1 ? `sm-card__media-grid sm-card__media-grid--${Math.min(post.media.length, 4)}` : ''}`}>\n {post.media.slice(0, 4).map((media, index) => (\n <div\n key={index}\n className={`sm-card__media-item ${media.type !== 'image' ? 'sm-card__media-item--video' : ''}`}\n onClick={onMediaClick ? handleMediaClick(index) : undefined}\n style={{ cursor: onMediaClick ? 'pointer' : undefined }}\n >\n <img\n src={media.thumbnailUrl || media.url}\n alt=\"Post media\"\n loading={imageLoading}\n onError={(e) => {\n if (fallbackImage) {\n (e.target as HTMLImageElement).src = fallbackImage;\n }\n }}\n />\n {(media.type === 'video' || media.type === 'gif') && (\n <div className=\"sm-card__play-button\">\n <PlayIcon />\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n\n {isInstagramPost(post) && (\n <div \n className=\"sm-card__media\"\n style={{ aspectRatio: post.media.aspectRatio || 1 }}\n >\n <img\n src={post.media.thumbnailUrl || post.media.url}\n alt=\"Post media\"\n loading={imageLoading}\n onError={(e) => {\n if (fallbackImage) {\n (e.target as HTMLImageElement).src = fallbackImage;\n }\n }}\n />\n {post.media.type === 'video' && (\n <div className=\"sm-card__play-button\">\n <PlayIcon />\n </div>\n )}\n {post.media.type === 'carousel' && (\n <div className=\"sm-card__carousel-indicator\">\n <svg viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M6 13c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm12 0c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm-6 0c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1z\"/>\n </svg>\n </div>\n )}\n </div>\n )}\n\n {/* Footer */}\n {(showMetrics || showTimestamp) && (\n <div className=\"sm-card__footer\">\n {showMetrics && post.metrics && (\n <div className=\"sm-card__metrics\">\n {isTwitterPost(post) && (\n <>\n {post.metrics.replies !== undefined && (\n <span className=\"sm-card__metric\">\n <svg viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z\"/></svg>\n {formatNum(post.metrics.replies)}\n </span>\n )}\n {post.metrics.retweets !== undefined && (\n <span className=\"sm-card__metric\">\n <svg viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M4.5 3.88l4.432 4.14-1.364 1.46L5.5 7.55V16c0 1.1.896 2 2 2H13v2H7.5c-2.209 0-4-1.79-4-4V7.55L1.432 9.48.068 8.02 4.5 3.88zM16.5 6H11V4h5.5c2.209 0 4 1.79 4 4v8.45l2.068-1.93 1.364 1.46-4.432 4.14-4.432-4.14 1.364-1.46 2.068 1.93V8c0-1.1-.896-2-2-2z\"/></svg>\n {formatNum(post.metrics.retweets)}\n </span>\n )}\n {post.metrics.likes !== undefined && (\n <span className=\"sm-card__metric\">\n <svg viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M16.697 5.5c-1.222-.06-2.679.51-3.89 2.16l-.805 1.09-.806-1.09C9.984 6.01 8.526 5.44 7.304 5.5c-1.243.07-2.349.78-2.91 1.91-.552 1.12-.633 2.78.479 4.82 1.074 1.97 3.257 4.27 7.129 6.61 3.87-2.34 6.052-4.64 7.126-6.61 1.111-2.04 1.03-3.7.477-4.82-.561-1.13-1.666-1.84-2.908-1.91zm4.187 7.69c-1.351 2.48-4.001 5.12-8.379 7.67l-.503.3-.504-.3c-4.379-2.55-7.029-5.19-8.382-7.67-1.36-2.5-1.41-4.86-.514-6.67.887-1.79 2.647-2.91 4.601-3.01 1.651-.09 3.368.56 4.798 2.01 1.429-1.45 3.146-2.1 4.796-2.01 1.954.1 3.714 1.22 4.601 3.01.896 1.81.846 4.17-.514 6.67z\"/></svg>\n {formatNum(post.metrics.likes)}\n </span>\n )}\n </>\n )}\n {isInstagramPost(post) && (\n <>\n {post.metrics.likes !== undefined && (\n <span className=\"sm-card__metric\">\n <svg viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M16.792 3.904A4.989 4.989 0 0 1 21.5 9.122c0 3.072-2.652 4.959-5.197 7.222-2.512 2.243-3.865 3.469-4.303 3.752-.477-.309-2.143-1.823-4.303-3.752C5.141 14.072 2.5 12.167 2.5 9.122a4.989 4.989 0 0 1 4.708-5.218 4.21 4.21 0 0 1 3.675 1.941c.84 1.175.98 1.763 1.12 1.763s.278-.588 1.11-1.766a4.17 4.17 0 0 1 3.679-1.938m0-2a6.04 6.04 0 0 0-4.797 2.127 6.052 6.052 0 0 0-4.787-2.127A6.985 6.985 0 0 0 .5 9.122c0 3.61 2.55 5.827 5.015 7.97.283.246.569.494.853.747l1.027.918a44.998 44.998 0 0 0 3.518 3.018 2 2 0 0 0 2.174 0 45.263 45.263 0 0 0 3.626-3.115l.922-.824c.293-.26.59-.519.885-.774 2.334-2.025 4.98-4.32 4.98-7.94a6.985 6.985 0 0 0-6.708-7.218z\"/></svg>\n {formatNum(post.metrics.likes)}\n </span>\n )}\n {post.metrics.comments !== undefined && (\n <span className=\"sm-card__metric\">\n <svg viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M20.656 17.008a9.993 9.993 0 1 0-3.59 3.615L22 22l-1.344-4.992zM10 12a1 1 0 1 1 1 1 1 1 0 0 1-1-1zm-4 0a1 1 0 1 1 1 1 1 1 0 0 1-1-1zm8 0a1 1 0 1 1 1 1 1 1 0 0 1-1-1z\"/></svg>\n {formatNum(post.metrics.comments)}\n </span>\n )}\n </>\n )}\n </div>\n )}\n {showTimestamp && (\n <time className=\"sm-card__timestamp\" dateTime={date.toISOString()}>\n {formatDate(date)}\n </time>\n )}\n </div>\n )}\n </div>\n );\n};\n\n// ============================================\n// Main Component\n// ============================================\n\nexport interface SocialMasonryRef {\n addPosts: (posts: SocialPost[]) => void;\n setPosts: (posts: SocialPost[]) => void;\n removePost: (id: string) => void;\n refresh: () => void;\n scrollToPost: (id: string, behavior?: ScrollBehavior) => void;\n}\n\nexport const SocialMasonry = forwardRef<SocialMasonryRef, SocialMasonryProps>(\n (props, ref) => {\n const {\n posts: initialPosts = [],\n gap = 16,\n columns = defaultColumnConfig,\n padding = 0,\n animationDuration = 300,\n animate = true,\n easing = 'cubic-bezier(0.4, 0, 0.2, 1)',\n virtualization,\n loadMoreThreshold: _loadMoreThreshold = 500,\n onLoadMore: _onLoadMore,\n onLayoutComplete,\n className,\n style,\n ...cardProps\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const [posts, setPosts] = useState<SocialPost[]>(initialPosts);\n const [positions, setPositions] = useState<Map<string, ItemPosition>>(new Map());\n const [containerHeight, setContainerHeight] = useState(0);\n const [itemHeights] = useState(() => new Map<string, number>());\n const [visibleItems, setVisibleItems] = useState<VirtualItem[]>([]);\n\n const layoutEngine = useMemo(() => {\n return new LayoutEngine({\n gap,\n columns,\n padding,\n animationDuration,\n animate,\n easing,\n containerWidth: containerRef.current?.clientWidth || 800,\n itemHeights,\n });\n }, [gap, columns, padding, animationDuration, animate, easing]);\n\n const virtualizationEngine = useMemo(() => {\n if (!virtualization?.enabled) return null;\n return new VirtualizationEngine({\n ...virtualization,\n posts,\n positions,\n onVisibleItemsChange: setVisibleItems,\n });\n }, [virtualization?.enabled]);\n\n // Calculate layout\n const calculateLayout = useCallback(() => {\n if (!containerRef.current) return;\n \n layoutEngine.setContainerWidth(containerRef.current.clientWidth);\n const state = layoutEngine.calculate(posts);\n \n setPositions(state.positions);\n setContainerHeight(state.containerHeight);\n \n if (virtualizationEngine) {\n virtualizationEngine.update(posts, state.positions);\n setVisibleItems(virtualizationEngine.calculateVisibleItems());\n }\n \n onLayoutComplete?.(Array.from(state.positions.values()));\n }, [posts, layoutEngine, virtualizationEngine, onLayoutComplete]);\n\n // Handle resize\n useEffect(() => {\n const handleResize = debounce(() => {\n calculateLayout();\n }, 150);\n\n const resizeObserver = new ResizeObserver(handleResize);\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current);\n }\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [calculateLayout]);\n\n // Initial layout\n useEffect(() => {\n calculateLayout();\n }, [posts, calculateLayout]);\n\n // Initialize virtualization\n useEffect(() => {\n if (virtualizationEngine) {\n virtualizationEngine.init();\n return () => virtualizationEngine.destroy();\n }\n return undefined;\n }, [virtualizationEngine]);\n\n // Handle height change\n const handleHeightChange = useCallback((id: string, height: number) => {\n itemHeights.set(id, height);\n calculateLayout();\n }, [itemHeights, calculateLayout]);\n\n // Expose methods via ref\n useImperativeHandle(ref, () => ({\n addPosts: (newPosts: SocialPost[]) => {\n setPosts(prev => [...prev, ...newPosts]);\n },\n setPosts: (newPosts: SocialPost[]) => {\n itemHeights.clear();\n setPosts(newPosts);\n },\n removePost: (id: string) => {\n itemHeights.delete(id);\n setPosts(prev => prev.filter(p => p.id !== id));\n },\n refresh: () => {\n itemHeights.clear();\n calculateLayout();\n },\n scrollToPost: (id: string, behavior: ScrollBehavior = 'smooth') => {\n const position = positions.get(id);\n if (position) {\n window.scrollTo({ top: position.y, behavior });\n }\n },\n }), [positions, calculateLayout, itemHeights]);\n\n // Determine which posts to render\n const postsToRender = virtualizationEngine\n ? visibleItems.map(item => item.post)\n : posts;\n\n return (\n <div\n ref={containerRef}\n className={`sm-container ${className || ''}`}\n style={{\n position: 'relative',\n width: '100%',\n height: containerHeight,\n ...style,\n }}\n >\n {postsToRender.map(post => {\n const position = positions.get(post.id);\n if (!position) return null;\n\n // Extract event handlers and adapt types\n const { onPostClick, onAuthorClick, onMediaClick, ...restCardProps } = cardProps;\n\n return (\n <Card\n key={post.id}\n post={post}\n position={position}\n onHeightChange={handleHeightChange}\n onPostClick={onPostClick ? (p, e) => onPostClick(p, e.nativeEvent) : undefined}\n onAuthorClick={onAuthorClick ? (p, e) => onAuthorClick(p, e.nativeEvent) : undefined}\n onMediaClick={onMediaClick ? (p, i, e) => onMediaClick(p, i, e.nativeEvent) : undefined}\n {...restCardProps}\n />\n );\n })}\n \n {posts.length === 0 && (\n <div className=\"sm-empty\">\n No posts to display\n </div>\n )}\n </div>\n );\n }\n);\n\nSocialMasonry.displayName = 'SocialMasonry';\n\nexport default SocialMasonry;\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":";;;AAAA;;AAEG;AAIH;;AAEG;AACH;AACM,SAAU,QAAQ,CACtB,EAAK,EACL,KAAa,EAAA;IAEb,IAAI,SAAS,GAAyC,IAAI;IAE1D,OAAO,UAAyB,GAAG,IAAmB,EAAA;QACpD,IAAI,SAAS,EAAE;YACb,YAAY,CAAC,SAAS,CAAC;QACzB;AACA,QAAA,SAAS,GAAG,UAAU,CAAC,MAAK;AAC1B,YAAA,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;YACpB,SAAS,GAAG,IAAI;QAClB,CAAC,EAAE,KAAK,CAAC;AACX,IAAA,CAAC;AACH;AAEA;;AAEG;AACG,SAAU,QAAQ,CACtB,EAAK,EACL,KAAa,EAAA;IAEb,IAAI,UAAU,GAAG,KAAK;IACtB,IAAI,QAAQ,GAAyB,IAAI;IAEzC,OAAO,UAAyB,GAAG,IAAmB,EAAA;QACpD,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;YACpB,UAAU,GAAG,IAAI;YACjB,UAAU,CAAC,MAAK;gBACd,UAAU,GAAG,KAAK;gBAClB,IAAI,QAAQ,EAAE;AACZ,oBAAA,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC;oBACxB,QAAQ,GAAG,IAAI;gBACjB;YACF,CAAC,EAAE,KAAK,CAAC;QACX;aAAO;YACL,QAAQ,GAAG,IAAI;QACjB;AACF,IAAA,CAAC;AACH;AAEA;;AAEG;AACG,SAAU,cAAc,CAC5B,OAAgC,EAChC,cAAsB,EAAA;AAEtB,IAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC/B,QAAA,OAAO,OAAO;IAChB;;IAGA,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;AAEnE,IAAA,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE;AAC3B,QAAA,IAAI,cAAc,IAAI,MAAM,CAAC,QAAQ,EAAE;YACrC,OAAO,MAAM,CAAC,OAAO;QACvB;IACF;;AAGA,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC;AAChD;AAEA;;AAEG;AACI,MAAM,mBAAmB,GAAmB;AACjD,IAAA,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE;AAC7B,IAAA,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE;AAC7B,IAAA,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE;CAC5B;AAED;;AAEG;AACG,SAAU,YAAY,CAAC,GAAW,EAAA;AACtC,IAAA,IAAI,GAAG,IAAI,OAAS,EAAE;AACpB,QAAA,OAAO,GAAG,CAAC,GAAG,GAAG,OAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG;IAC/D;AACA,IAAA,IAAI,GAAG,IAAI,IAAK,EAAE;AAChB,QAAA,OAAO,GAAG,CAAC,GAAG,GAAG,IAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG;IAC3D;AACA,IAAA,OAAO,GAAG,CAAC,QAAQ,EAAE;AACvB;AAEA;;AAEG;AACG,SAAU,kBAAkB,CAAC,IAAU,EAAA;AAC3C,IAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;IACtB,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC;AAEzE,IAAA,IAAI,aAAa,GAAG,EAAE,EAAE;AACtB,QAAA,OAAO,KAAK;IACd;IAEA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC;AACpD,IAAA,IAAI,aAAa,GAAG,EAAE,EAAE;QACtB,OAAO,CAAA,EAAG,aAAa,CAAA,CAAA,CAAG;IAC5B;IAEA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC;AAClD,IAAA,IAAI,WAAW,GAAG,EAAE,EAAE;QACpB,OAAO,CAAA,EAAG,WAAW,CAAA,CAAA,CAAG;IAC1B;IAEA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;AAC/C,IAAA,IAAI,UAAU,GAAG,CAAC,EAAE;QAClB,OAAO,CAAA,EAAG,UAAU,CAAA,CAAA,CAAG;IACzB;IAEA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;AAC9C,IAAA,IAAI,WAAW,GAAG,CAAC,EAAE;QACnB,OAAO,CAAA,EAAG,WAAW,CAAA,CAAA,CAAG;IAC1B;;AAGA,IAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;AACtC,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,GAAG,EAAE,SAAS;AACf,KAAA,CAAC;AACJ;AAEA;;AAEG;AACG,SAAU,aAAa,CAAC,KAAsB,EAAE,cAAuB,EAAA;AAC3E,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,KAAK;IACd;IAEA,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC;IAC3D,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,OAAO,CAAC;IACV;IAEA,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI;IAEhC,QAAQ,IAAI;AACV,QAAA,KAAK,IAAI;AACP,YAAA,OAAO,GAAG;AACZ,QAAA,KAAK,KAAK;AACR,YAAA,OAAO,GAAG,GAAG,EAAE,CAAC;AAClB,QAAA,KAAK,IAAI;YACP,OAAO,GAAG,GAAG,EAAE;AACjB,QAAA,KAAK,GAAG;AACN,YAAA,OAAuD,CAAC;AAC1D,QAAA,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC,UAAU;AACxC,QAAA;AACE,YAAA,OAAO,GAAG;;AAEhB;AASA;;AAEG;AACG,SAAU,YAAY,CAC1B,OAAwC,EACxC,SAAiB,EACjB,cAAsB,EACtB,QAAA,GAAmB,CAAC,EAAA;AAEpB,IAAA,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ;AACxC,IAAA,MAAM,cAAc,GAAG,SAAS,GAAG,cAAc,GAAG,QAAQ;IAE5D,OAAO,OAAO,CAAC,MAAM,IAAI,WAAW,IAAI,OAAO,CAAC,GAAG,IAAI,cAAc;AACvE;AAEA;;AAEG;AACG,SAAU,iBAAiB,CAAC,eAA4C,EAAA;AAI5E,IAAA,IAAI,CAAC,eAAe,IAAI,eAAe,KAAK,MAAM,EAAE;QAClD,OAAO;YACL,SAAS,EAAE,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS;YAC/D,cAAc,EAAE,MAAM,CAAC,WAAW;SACnC;IACH;IAEA,OAAO;QACL,SAAS,EAAG,eAA+B,CAAC,SAAS;QACrD,cAAc,EAAG,eAA+B,CAAC,YAAY;KAC9D;AACH;AAEA;;AAEG;AACG,SAAU,aAAa,CAAC,IAAgB,EAAA;AAC5C,IAAA,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS;AACpC;AAEA;;AAEG;AACG,SAAU,eAAe,CAAC,IAAgB,EAAA;AAC9C,IAAA,OAAO,IAAI,CAAC,QAAQ,KAAK,WAAW;AACtC;AAyEA;;AAEG;AACI,MAAM,GAAG,GACd,OAAO,qBAAqB,KAAK;AAC/B,MAAE;AACF,MAAE,CAAC,QAA8B,KAAK,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC;AAElE;;AAEG;AACI,MAAM,SAAS,GACpB,OAAO,oBAAoB,KAAK;AAC9B,MAAE;MACA,CAAC,EAAU,KAAK,YAAY,CAAC,EAAE,CAAC;;ACxTtC;;;AAGG;MAmBU,YAAY,CAAA;AAIvB,IAAA,WAAA,CAAY,OAA4B,EAAA;QACtC,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,OAAO,EAAE,mBAAmB;AAC5B,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,iBAAiB,EAAE,GAAG;AACtB,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,MAAM,EAAE,8BAA8B;AACtC,YAAA,GAAG,OAAO;SACX;QAED,IAAI,CAAC,KAAK,GAAG;YACX,SAAS,EAAE,IAAI,GAAG,EAAE;AACpB,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,eAAe,EAAE,CAAC;AAClB,YAAA,WAAW,EAAE,CAAC;SACf;IACH;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,KAAmB,EAAA;QAC3B,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO;QACpD,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QAC3C,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;;AAGnD,QAAA,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC;AACxE,QAAA,MAAM,cAAc,GAAG,cAAc,GAAG,OAAO,GAAG,CAAC;QACnD,MAAM,aAAa,GAAG,GAAG,IAAI,WAAW,GAAG,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,CAAC,cAAc,GAAG,aAAa,IAAI,WAAW;;AAGlE,QAAA,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACpD,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwB;;AAGjD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC;;AAGrF,YAAA,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;;YAGxE,MAAM,CAAC,GAAG,OAAO,GAAG,cAAc,IAAI,WAAW,GAAG,GAAG,CAAC;AACxD,YAAA,MAAM,CAAC,GAAG,aAAa,CAAC,cAAc,CAAC;AAEvC,YAAA,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;gBACrB,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,CAAC;gBACD,CAAC;AACD,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,MAAM,EAAE,UAAU;AAClB,gBAAA,MAAM,EAAE,cAAc;AACvB,aAAA,CAAC;;YAGF,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,UAAU,GAAG,GAAG;QACtD;;QAGA,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;QAEvE,IAAI,CAAC,KAAK,GAAG;YACX,SAAS;YACT,aAAa;YACb,eAAe;YACf,WAAW;SACZ;QAED,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA;;AAEG;IACK,cAAc,CAAC,IAAgB,EAAE,WAAmB,EAAA;QAC1D,IAAI,MAAM,GAAG,CAAC;;QAGd,MAAM,IAAI,EAAE;;AAGZ,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM;AAC3C,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;YACpD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC;AACrD,YAAA,MAAM,IAAI,KAAK,GAAG,EAAE,CAAC;QACvB;AAAO,aAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM;YACjD,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;AACnD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;AACtE,YAAA,MAAM,IAAI,KAAK,GAAG,EAAE;QACtB;;AAGA,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3B,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,EAAE,GAAG,CAAC;AAC/C,YAAA,MAAM,IAAI,WAAW,GAAG,WAAW;QACrC;AAAO,aAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE;YACxC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC;AAC/C,YAAA,MAAM,IAAI,WAAW,GAAG,WAAW;QACrC;;QAGA,MAAM,IAAI,EAAE;;QAGZ,MAAM,IAAI,EAAE;AAEZ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B;AAEA;;AAEG;IACH,gBAAgB,CAAC,EAAU,EAAE,MAAc,EAAA;QACzC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC;IAC1C;AAEA;;AAEG;IACH,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,EAAU,EAAA;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IACrC;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,KAAK;IACrC;AAEA;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;IAC1E;AAEA;;AAEG;IACH,eAAe,GAAA;QACb,OAAO;AACL,YAAA,yBAAyB,EAAE,CAAA,EAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAA,EAAA,CAAI;AAChE,YAAA,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAClC,UAAU,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK;AACtC,kBAAE,CAAA,EAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAA,EAAA;AACrB,kBAAE,IAAI,CAAC,OAAO,CAAC,GAAG;AACpB,YAAA,mBAAmB,EAAE,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAA,EAAA,CAAI;AAClD,YAAA,uBAAuB,EAAE,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAA,EAAA,CAAI;SAC3D;IACH;AACD;;AC/LD;;;AAGG;MAsBU,oBAAoB,CAAA;AAY/B,IAAA,WAAA,CAAY,OAAoC,EAAA;QARxC,IAAA,CAAA,YAAY,GAAkB,EAAE;QAEhC,IAAA,CAAA,KAAK,GAAkB,IAAI;QAC3B,IAAA,CAAA,aAAa,GAAG,CAAC;QACjB,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,gBAAgB,GAAyC,IAAI;QAInE,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,mBAAmB,EAAE,GAAG;AACxB,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,GAAG,OAAO;SACX;AAED,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS;AAClC,QAAA,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB;AAExD,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACjE;AAEA;;AAEG;IACH,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE;QAE3B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,MAAM;AACxD,QAAA,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;QAG3E,IAAI,CAAC,qBAAqB,EAAE;IAC9B;AAEA;;AAEG;IACH,OAAO,GAAA;QACL,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,MAAM;QACxD,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC;AAE3D,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;AACvB,YAAA,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QACvB;AAEA,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACrC;IACF;AAEA;;AAEG;IACK,YAAY,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE;AAEzB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;AAGvB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACrC;;AAGA,QAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QAC1B,CAAC,EAAE,GAAG,CAAC;AAEP,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,MAAK;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;YACjB,IAAI,CAAC,qBAAqB,EAAE;AAC9B,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACH,qBAAqB,GAAA;AACnB,QAAA,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;AACrF,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB;AAE3E,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;QAE9B,MAAM,eAAe,GAAkB,EAAE;AAEzC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAE5C,YAAA,IAAI,CAAC,QAAQ;gBAAE;YAEf,MAAM,SAAS,GAAG,YAAY,CAC5B;gBACE,GAAG,EAAE,QAAQ,CAAC,CAAC;AACf,gBAAA,MAAM,EAAE,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM;AACrC,aAAA,EACD,SAAS,EACT,cAAc,EACd,UAAU,CACX;YAED,IAAI,SAAS,EAAE;gBACb,eAAe,CAAC,IAAI,CAAC;AACnB,oBAAA,KAAK,EAAE,CAAC;oBACR,IAAI;oBACJ,QAAQ;AACR,oBAAA,SAAS,EAAE,IAAI;AAChB,iBAAA,CAAC;YACJ;QACF;;QAGA,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC;QAE/D,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,GAAG,eAAe;AACnC,YAAA,IAAI,CAAC,oBAAoB,GAAG,eAAe,CAAC;QAC9C;QAEA,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA;;AAEG;AACK,IAAA,sBAAsB,CAAC,QAAuB,EAAA;QACpD,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAChD,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE;AACxD,gBAAA,OAAO,IAAI;YACb;QACF;AAEA,QAAA,OAAO,KAAK;IACd;AAEA;;AAEG;IACH,MAAM,CAAC,KAAmB,EAAE,SAAoC,EAAA;AAC9D,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC1B,IAAI,CAAC,qBAAqB,EAAE;IAC9B;AAEA;;AAEG;IACH,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM;YACtC,KAAK;YACL,IAAI;YACJ,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAE;AACtC,YAAA,SAAS,EAAE,IAAI;AAChB,SAAA,CAAC,CAAC;IACL;AAEA;;AAEG;IACH,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;IACzB;AAEA;;AAEG;IACH,kBAAkB,GAAA;AAChB,QAAA,MAAM,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;AAErE,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AAClC,YAAA,OAAO,MAAM;QACf;AAAO,aAAA,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AACzC,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;IACH,YAAY,CAAC,YAAoB,GAAG,EAAA;AAClC,QAAA,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;;QAGrF,IAAI,SAAS,GAAG,CAAC;QACjB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE;AAC9C,YAAA,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC/D;AAEA,QAAA,OAAO,SAAS,GAAG,cAAc,IAAI,SAAS,GAAG,SAAS;IAC5D;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,EAAU,EAAE,QAAA,GAA2B,QAAQ,EAAA;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,QAAQ;YAAE;QAEf,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,MAAM;AAExD,QAAA,IAAI,SAAS,KAAK,MAAM,EAAE;YACxB,MAAM,CAAC,QAAQ,CAAC;gBACd,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACf,QAAQ;AACT,aAAA,CAAC;QACJ;aAAO;YACJ,SAAyB,CAAC,QAAQ,CAAC;gBAClC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACf,QAAQ;AACT,aAAA,CAAC;QACJ;IACF;AAEA;;AAEG;IACH,cAAc,GAAA;QACZ,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;YAClC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;QAC7B;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC;QACzD,OAAO;AACL,YAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;YAC3B,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;SAC9B;IACH;AACD;;AChPD;AACA;AACA;AAEA,MAAM,WAAW,GAAqC,CAAC,EAAE,SAAS,EAAE,MAClEA,GAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,SAAS,EAAE,SAAS,EAAA,QAAA,EAC3CA,GAAA,CAAA,MAAA,EAAA,EAAM,IAAI,EAAC,cAAc,EAAC,CAAC,EAAC,6JAA6J,EAAA,CAAE,EAAA,CACvL,CACP;AAED,MAAM,aAAa,GAAqC,CAAC,EAAE,SAAS,EAAE,MACpEA,GAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,SAAS,EAAE,SAAS,EAAA,QAAA,EAC3CA,GAAA,CAAA,MAAA,EAAA,EAAM,IAAI,EAAC,cAAc,EAAC,CAAC,EAAC,sgDAAsgD,EAAA,CAAE,EAAA,CAChiD,CACP;AAED,MAAM,YAAY,GAAqC,CAAC,EAAE,SAAS,EAAE,MACnEA,GAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,SAAS,EAAE,SAAS,EAAA,QAAA,EAC3CA,GAAA,CAAA,MAAA,EAAA,EAAM,IAAI,EAAC,cAAc,EAAC,CAAC,EAAC,scAAsc,EAAA,CAAE,EAAA,CAChe,CACP;AAED,MAAM,QAAQ,GAAqC,CAAC,EAAE,SAAS,EAAE,MAC/DA,GAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,SAAS,EAAE,SAAS,EAAA,QAAA,EAC3CA,GAAA,CAAA,MAAA,EAAA,EAAM,IAAI,EAAC,cAAc,EAAC,CAAC,EAAC,eAAe,EAAA,CAAE,EAAA,CACzC,CACP;AAeD,MAAM,IAAI,GAAwB,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,OAAO,GAAG,SAAS,EACnB,KAAK,GAAG,MAAM,EACd,YAAY,GAAG,EAAE,EACjB,gBAAgB,GAAG,IAAI,EACvB,UAAU,GAAG,IAAI,EACjB,WAAW,GAAG,IAAI,EAClB,aAAa,GAAG,IAAI,EACpB,UAAU,GAAG,kBAAkB,EAC/B,YAAY,EAAE,SAAS,GAAG,YAAY,EACtC,SAAS,GAAG,EAAE,EACd,WAAW,GAAG,IAAI,EAClB,YAAY,GAAG,MAAM,EACrB,aAAa,GAAG,EAAE,EAClB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,cAAc,GACf,KAAI;AACH,IAAA,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC;IAE5C,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,OAAO,CAAC,OAAO,IAAI,cAAc,EAAE;AACrC,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY;AAC3C,YAAA,IAAI,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE;AAC9B,gBAAA,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC;YACjC;QACF;AACF,IAAA,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAE9C,IAAA,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,CAAmB,KAAI;AAC1D,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAqB;QACtC,IAAI,MAAM,CAAC,OAAO,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE;AACnD,QAAA,WAAW,GAAG,IAAI,EAAE,CAAC,CAAC;AACxB,IAAA,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAEvB,IAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,CAAmB,KAAI;QAC5D,CAAC,CAAC,eAAe,EAAE;AACnB,QAAA,aAAa,GAAG,IAAI,EAAE,CAAC,CAAC;AAC1B,IAAA,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AAEzB,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,CAAC,KAAa,KAAK,CAAC,CAAmB,KAAI;QAC9E,CAAC,CAAC,eAAe,EAAE;QACnB,YAAY,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAChC,IAAA,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AAExB,IAAA,MAAM,OAAO,GAAG;QACd,SAAS;QACT,CAAA,SAAA,EAAY,IAAI,CAAC,QAAQ,CAAA,CAAE;AAC3B,QAAA,CAAA,SAAA,EAAY,OAAO,CAAA,CAAE;AACrB,QAAA,CAAA,SAAA,EAAY,KAAK,CAAA,CAAE;AACnB,QAAA,WAAW,IAAI,gBAAgB;QAC/B,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAE3B,IAAA,MAAM,KAAK,GAAwB;AACjC,QAAA,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChB,GAAG,EAAE,QAAQ,CAAC,CAAC;QACf,KAAK,EAAE,QAAQ,CAAC,KAAK;AACrB,QAAA,YAAY,EAAE,OAAO,YAAY,KAAK,QAAQ,GAAG,YAAY,GAAG,YAAY;QAC5E,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS;KAC5C;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,YAAY,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AAEvF,IAAA,QACEC,IAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,OAAO,EACZ,SAAS,EAAE,OAAO,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,eAAe,EAAA,cAAA,EACV,IAAI,CAAC,EAAE,EAAA,eAAA,EACN,IAAI,CAAC,QAAQ,EAAA,QAAA,EAAA,CAG3B,gBAAgB,KACfD,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,wBAAwB,EAAA,QAAA,EACpC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAC1BA,GAAA,CAAC,WAAW,EAAA,EAAC,SAAS,EAAC,4CAA4C,GAAG,KAEtEA,GAAA,CAAC,aAAa,EAAA,EAAC,SAAS,EAAC,8CAA8C,EAAA,CAAG,CAC3E,EAAA,CACG,CACP,EAGA,UAAU,KACTC,IAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,iBAAiB,EAC3B,OAAO,EAAE,aAAa,GAAG,iBAAiB,GAAG,SAAS,EACtD,KAAK,EAAE,EAAE,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,SAAS,EAAE,EAAA,QAAA,EAAA,CAExDD,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,aAAa,EAC3C,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EACpD,SAAS,EAAC,iBAAiB,EAC3B,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,CAAC,CAAC,KAAI;4BACb,IAAI,aAAa,EAAE;AAChB,gCAAA,CAAC,CAAC,MAA2B,CAAC,GAAG,GAAG,aAAa;4BACpD;wBACF,CAAC,EAAA,CACD,EACFC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAA,CAC9BA,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,sBAAsB,aACnC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAID,IAAC,YAAY,EAAA,EAAC,SAAS,EAAC,mBAAmB,EAAA,CAAG,IAClE,EACPC,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,wBAAwB,EAAA,QAAA,EAAA,CAAA,GAAA,EAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAA,EAAA,CAAQ,CAAA,EAAA,CACnE,IACF,CACP,EAGDA,cAAK,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAAA,CAC9B,aAAa,CAAC,IAAI,CAAC,KAClBD,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,eAAe,EAAA,QAAA,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAA,CAAK,CACrD,EACA,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAC5CA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG;AAC7B,8BAAE,CAAA,EAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,GAAA;AAC3C,8BAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAA,CACtB,CACL,CAAA,EAAA,CACG,EAGL,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,KACzDA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAA,eAAA,EAAkB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAA,yCAAA,EAA4C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAA,QAAA,EAC1I,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,MACvCC,IAAA,CAAA,KAAA,EAAA,EAEE,SAAS,EAAE,CAAA,oBAAA,EAAuB,KAAK,CAAC,IAAI,KAAK,OAAO,GAAG,4BAA4B,GAAG,EAAE,EAAE,EAC9F,OAAO,EAAE,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,SAAS,EAC3D,KAAK,EAAE,EAAE,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,EAAE,EAAA,QAAA,EAAA,CAEvDD,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,GAAG,EACpC,GAAG,EAAC,YAAY,EAChB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,CAAC,CAAC,KAAI;gCACb,IAAI,aAAa,EAAE;AAChB,oCAAA,CAAC,CAAC,MAA2B,CAAC,GAAG,GAAG,aAAa;gCACpD;AACF,4BAAA,CAAC,GACD,EACD,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,MAC9CA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sBAAsB,EAAA,QAAA,EACnCA,GAAA,CAAC,QAAQ,EAAA,EAAA,CAAG,EAAA,CACR,CACP,CAAA,EAAA,EAnBI,KAAK,CAoBN,CACP,CAAC,GACE,CACP,EAEA,eAAe,CAAC,IAAI,CAAC,KACpBC,cACE,SAAS,EAAC,gBAAgB,EAC1B,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,EAAE,EAAA,QAAA,EAAA,CAEnDD,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAC9C,GAAG,EAAC,YAAY,EAChB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,CAAC,CAAC,KAAI;4BACb,IAAI,aAAa,EAAE;AAChB,gCAAA,CAAC,CAAC,MAA2B,CAAC,GAAG,GAAG,aAAa;4BACpD;AACF,wBAAA,CAAC,GACD,EACD,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,KAC1BA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sBAAsB,YACnCA,GAAA,CAAC,QAAQ,EAAA,EAAA,CAAG,EAAA,CACR,CACP,EACA,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,KAC7BA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAC1CA,aAAK,OAAO,EAAC,WAAW,EAAA,QAAA,EACtBA,cAAM,IAAI,EAAC,cAAc,EAAC,CAAC,EAAC,iKAAiK,EAAA,CAAE,EAAA,CAC3L,GACF,CACP,CAAA,EAAA,CACG,CACP,EAGA,CAAC,WAAW,IAAI,aAAa,MAC5BC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iBAAiB,aAC7B,WAAW,IAAI,IAAI,CAAC,OAAO,KAC1BA,cAAK,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAAA,CAC9B,aAAa,CAAC,IAAI,CAAC,KAClBA,IAAA,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAA,CACG,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,KACjCD,eAAM,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAA,CAC/BD,GAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAA,QAAA,EAACA,GAAA,CAAA,MAAA,EAAA,EAAM,IAAI,EAAC,cAAc,EAAC,CAAC,EAAC,4TAA4T,GAAE,EAAA,CAAM,EACxX,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAC3B,CACR,EACA,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,KAClCC,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,iBAAiB,aAC/BD,GAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,YAACA,GAAA,CAAA,MAAA,EAAA,EAAM,IAAI,EAAC,cAAc,EAAC,CAAC,EAAC,2PAA2P,EAAA,CAAE,GAAM,EACvT,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA,EAAA,CAC5B,CACR,EACA,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,KAC/BC,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,iBAAiB,aAC/BD,GAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,YAACA,GAAA,CAAA,MAAA,EAAA,EAAM,IAAI,EAAC,cAAc,EAAC,CAAC,EAAC,6iBAA6iB,EAAA,CAAE,GAAM,EACzmB,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA,EAAA,CACzB,CACR,CAAA,EAAA,CACA,CACJ,EACA,eAAe,CAAC,IAAI,CAAC,KACpBC,4BACG,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,KAC/BA,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAA,CAC/BD,GAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAA,QAAA,EAACA,GAAA,CAAA,MAAA,EAAA,EAAM,IAAI,EAAC,cAAc,EAAC,CAAC,EAAC,0oBAA0oB,EAAA,CAAE,EAAA,CAAM,EACtsB,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA,EAAA,CACzB,CACR,EACA,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,KAClCC,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAA,CAC/BD,GAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAA,QAAA,EAACA,GAAA,CAAA,MAAA,EAAA,EAAM,IAAI,EAAC,cAAc,EAAC,CAAC,EAAC,uKAAuK,GAAE,EAAA,CAAM,EACnO,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA,EAAA,CAC5B,CACR,CAAA,EAAA,CACA,CACJ,IACG,CACP,EACA,aAAa,KACZA,cAAM,SAAS,EAAC,oBAAoB,EAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,EAAA,QAAA,EAC9D,UAAU,CAAC,IAAI,CAAC,EAAA,CACZ,CACR,IACG,CACP,CAAA,EAAA,CACG;AAEV,CAAC;AAcM,MAAM,aAAa,GAAG,UAAU,CACrC,CAAC,KAAK,EAAE,GAAG,KAAI;IACb,MAAM,EACJ,KAAK,EAAE,YAAY,GAAG,EAAE,EACxB,GAAG,GAAG,EAAE,EACR,OAAO,GAAG,mBAAmB,EAC7B,OAAO,GAAG,CAAC,EACX,iBAAiB,GAAG,GAAG,EACvB,OAAO,GAAG,IAAI,EACd,MAAM,GAAG,8BAA8B,EACvC,cAAc,EACd,iBAAiB,EAAE,kBAAkB,GAAG,GAAG,EAC3C,UAAU,EAAE,WAAW,EACvB,gBAAgB,EAChB,SAAS,EACT,KAAK,EACL,GAAG,SAAS,EACb,GAAG,KAAK;AAET,IAAA,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC;IACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,YAAY,CAAC;AAC9D,IAAA,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAA4B,IAAI,GAAG,EAAE,CAAC;IAChF,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AACzD,IAAA,MAAM,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAkB,CAAC;IAC/D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAgB,EAAE,CAAC;AAEnE,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,MAAK;QAChC,OAAO,IAAI,YAAY,CAAC;YACtB,GAAG;YACH,OAAO;YACP,OAAO;YACP,iBAAiB;YACjB,OAAO;YACP,MAAM;AACN,YAAA,cAAc,EAAE,YAAY,CAAC,OAAO,EAAE,WAAW,IAAI,GAAG;YACxD,WAAW;AACZ,SAAA,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAE/D,IAAA,MAAM,oBAAoB,GAAG,OAAO,CAAC,MAAK;QACxC,IAAI,CAAC,cAAc,EAAE,OAAO;AAAE,YAAA,OAAO,IAAI;QACzC,OAAO,IAAI,oBAAoB,CAAC;AAC9B,YAAA,GAAG,cAAc;YACjB,KAAK;YACL,SAAS;AACT,YAAA,oBAAoB,EAAE,eAAe;AACtC,SAAA,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;;AAG7B,IAAA,MAAM,eAAe,GAAG,WAAW,CAAC,MAAK;QACvC,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE;QAE3B,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;QAChE,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC;AAE3C,QAAA,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;AAC7B,QAAA,kBAAkB,CAAC,KAAK,CAAC,eAAe,CAAC;QAEzC,IAAI,oBAAoB,EAAE;YACxB,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;AACnD,YAAA,eAAe,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,CAAC;QAC/D;AAEA,QAAA,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;;IAGjE,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAK;AACjC,YAAA,eAAe,EAAE;QACnB,CAAC,EAAE,GAAG,CAAC;AAEP,QAAA,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC;AACvD,QAAA,IAAI,YAAY,CAAC,OAAO,EAAE;AACxB,YAAA,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;QAC9C;AAEA,QAAA,OAAO,MAAK;YACV,cAAc,CAAC,UAAU,EAAE;AAC7B,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;;IAGrB,SAAS,CAAC,MAAK;AACb,QAAA,eAAe,EAAE;AACnB,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;;IAG5B,SAAS,CAAC,MAAK;QACb,IAAI,oBAAoB,EAAE;YACxB,oBAAoB,CAAC,IAAI,EAAE;AAC3B,YAAA,OAAO,MAAM,oBAAoB,CAAC,OAAO,EAAE;QAC7C;AACA,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC;;IAG1B,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,MAAc,KAAI;AACpE,QAAA,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC;AAC3B,QAAA,eAAe,EAAE;AACnB,IAAA,CAAC,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;;AAGlC,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;AAC9B,QAAA,QAAQ,EAAE,CAAC,QAAsB,KAAI;AACnC,YAAA,QAAQ,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC;QAC1C,CAAC;AACD,QAAA,QAAQ,EAAE,CAAC,QAAsB,KAAI;YACnC,WAAW,CAAC,KAAK,EAAE;YACnB,QAAQ,CAAC,QAAQ,CAAC;QACpB,CAAC;AACD,QAAA,UAAU,EAAE,CAAC,EAAU,KAAI;AACzB,YAAA,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,EAAE,MAAK;YACZ,WAAW,CAAC,KAAK,EAAE;AACnB,YAAA,eAAe,EAAE;QACnB,CAAC;AACD,QAAA,YAAY,EAAE,CAAC,EAAU,EAAE,QAAA,GAA2B,QAAQ,KAAI;YAChE,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,IAAI,QAAQ,EAAE;AACZ,gBAAA,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;YAChD;QACF,CAAC;KACF,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;;IAG9C,MAAM,aAAa,GAAG;AACpB,UAAE,YAAY,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI;UAClC,KAAK;AAET,IAAA,QACEC,IAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,CAAA,aAAA,EAAgB,SAAS,IAAI,EAAE,CAAA,CAAE,EAC5C,KAAK,EAAE;AACL,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,eAAe;AACvB,YAAA,GAAG,KAAK;AACT,SAAA,EAAA,QAAA,EAAA,CAEA,aAAa,CAAC,GAAG,CAAC,IAAI,IAAG;gBACxB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACvC,gBAAA,IAAI,CAAC,QAAQ;AAAE,oBAAA,OAAO,IAAI;;AAG1B,gBAAA,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,GAAG,SAAS;gBAEhF,QACED,IAAC,IAAI,EAAA,EAEH,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,kBAAkB,EAClC,WAAW,EAAE,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,SAAS,EAC9E,aAAa,EAAE,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,SAAS,EACpF,YAAY,EAAE,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,SAAS,EAAA,GACnF,aAAa,EAAA,EAPZ,IAAI,CAAC,EAAE,CAQZ;AAEN,YAAA,CAAC,CAAC,EAED,KAAK,CAAC,MAAM,KAAK,CAAC,KACjBA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,UAAU,oCAEnB,CACP,CAAA,EAAA,CACG;AAEV,CAAC;AAGH,aAAa,CAAC,WAAW,GAAG,eAAe;;;;"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../src/utils.ts","../../src/react/SocialMasonry.tsx"],"sourcesContent":["/**\n * Social Masonry - Utility Functions\n */\n\nimport type { ColumnConfig, SocialPost, SocialPlatform } from './types';\n\n// ============================================\n// URL Parsing Utilities\n// ============================================\n\n/**\n * Extract tweet ID from Twitter/X URL\n */\nexport function extractTweetId(url: string): string | null {\n if (!url) return null;\n const match = url.match(/(?:twitter\\.com|x\\.com)\\/\\w+\\/status\\/(\\d+)/);\n return match ? match[1] : null;\n}\n\n/**\n * Extract post ID from Instagram URL\n */\nexport function extractInstagramId(url: string): string | null {\n if (!url) return null;\n const match = url.match(/instagram\\.com\\/(?:p|reel)\\/([A-Za-z0-9_-]+)/);\n return match ? match[1] : null;\n}\n\n/**\n * Detect platform from URL\n */\nexport function detectPlatform(url: string): SocialPlatform | null {\n if (/(?:twitter\\.com|x\\.com)\\/\\w+\\/status\\/\\d+/.test(url)) {\n return 'twitter';\n }\n if (/instagram\\.com\\/(?:p|reel)\\/[A-Za-z0-9_-]+/.test(url)) {\n return 'instagram';\n }\n return null;\n}\n\n/**\n * Generate embed URL for Twitter\n */\nexport function getTwitterEmbedUrl(\n tweetId: string,\n options: { theme?: 'light' | 'dark'; hideCard?: boolean; hideThread?: boolean } = {}\n): string {\n const params = new URLSearchParams();\n params.set('id', tweetId);\n if (options.theme) params.set('theme', options.theme);\n if (options.hideCard) params.set('cards', 'hidden');\n if (options.hideThread) params.set('conversation', 'none');\n return `https://platform.twitter.com/embed/Tweet.html?${params.toString()}`;\n}\n\n/**\n * Generate embed URL for Instagram\n */\nexport function getInstagramEmbedUrl(postId: string): string {\n return `https://www.instagram.com/p/${postId}/embed/`;\n}\n\n/**\n * Generate unique ID from post URL\n */\nexport function generatePostId(post: SocialPost): string {\n if (post.id) return post.id;\n\n if (post.platform === 'twitter') {\n const tweetId = extractTweetId(post.url);\n return tweetId ? `tw-${tweetId}` : `tw-${hashString(post.url)}`;\n }\n\n if (post.platform === 'instagram') {\n const igId = extractInstagramId(post.url);\n return igId ? `ig-${igId}` : `ig-${hashString(post.url)}`;\n }\n\n return `post-${hashString(post.url)}`;\n}\n\n/**\n * Simple string hash function\n */\nfunction hashString(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash;\n }\n return Math.abs(hash).toString(36);\n}\n\n// ============================================\n// Layout Utilities\n// ============================================\n\n/**\n * Debounce function execution\n */\nexport function debounce<T extends (...args: unknown[]) => unknown>(\n fn: T,\n delay: number\n): (...args: Parameters<T>) => void {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n return function (this: unknown, ...args: Parameters<T>) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n fn.apply(this, args);\n timeoutId = null;\n }, delay);\n };\n}\n\n/**\n * Get number of columns based on viewport width\n */\nexport function getColumnCount(\n columns: number | ColumnConfig[],\n containerWidth: number\n): number {\n if (typeof columns === 'number') {\n return columns;\n }\n\n // Sort by minWidth descending\n const sorted = [...columns].sort((a, b) => b.minWidth - a.minWidth);\n\n for (const config of sorted) {\n if (containerWidth >= config.minWidth) {\n return config.columns;\n }\n }\n\n // Return smallest breakpoint's columns or default to 1\n return sorted[sorted.length - 1]?.columns ?? 1;\n}\n\n/**\n * Default responsive column configuration\n */\nexport const defaultColumnConfig: ColumnConfig[] = [\n { columns: 4, minWidth: 1200 },\n { columns: 3, minWidth: 900 },\n { columns: 2, minWidth: 600 },\n { columns: 1, minWidth: 0 },\n];\n\n/**\n * Default embed heights\n */\nexport const DEFAULT_TWITTER_HEIGHT = 500;\nexport const DEFAULT_INSTAGRAM_HEIGHT = 600;\n\n// ============================================\n// Environment Checks\n// ============================================\n\n/**\n * Check if we're in a browser environment\n */\nexport const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Check if ResizeObserver is supported\n */\nexport const supportsResizeObserver = isBrowser && typeof ResizeObserver !== 'undefined';\n","/**\n * Social Masonry - React Component\n * Masonry layout for X (Twitter) and Instagram embeds using official widgets\n */\n\nimport React, {\n useEffect,\n useRef,\n useState,\n useCallback,\n forwardRef,\n useImperativeHandle,\n} from 'react';\nimport type {\n SocialMasonryProps,\n SocialPost,\n} from '../types';\nimport {\n defaultColumnConfig,\n generatePostId,\n getColumnCount,\n} from '../utils';\n\n// ============================================\n// Script Loading\n// ============================================\n\nlet twitterScriptLoaded = false;\nlet instagramScriptLoaded = false;\n\nconst loadTwitterScript = (): Promise<void> => {\n if (twitterScriptLoaded) return Promise.resolve();\n if (typeof window === 'undefined') return Promise.resolve();\n\n return new Promise((resolve) => {\n if ((window as Window & { twttr?: unknown }).twttr) {\n twitterScriptLoaded = true;\n resolve();\n return;\n }\n\n const script = document.createElement('script');\n script.src = 'https://platform.twitter.com/widgets.js';\n script.async = true;\n script.onload = () => {\n twitterScriptLoaded = true;\n resolve();\n };\n document.head.appendChild(script);\n });\n};\n\nconst loadInstagramScript = (): Promise<void> => {\n if (instagramScriptLoaded) return Promise.resolve();\n if (typeof window === 'undefined') return Promise.resolve();\n\n return new Promise((resolve) => {\n if ((window as Window & { instgrm?: unknown }).instgrm) {\n instagramScriptLoaded = true;\n resolve();\n return;\n }\n\n const script = document.createElement('script');\n script.src = 'https://www.instagram.com/embed.js';\n script.async = true;\n script.onload = () => {\n instagramScriptLoaded = true;\n resolve();\n };\n document.head.appendChild(script);\n });\n};\n\n// ============================================\n// Twitter Embed Component\n// ============================================\n\ninterface TwitterEmbedProps {\n url: string;\n theme?: 'light' | 'dark';\n onLoad?: () => void;\n onError?: (error: Error) => void;\n}\n\nconst TwitterEmbed: React.FC<TwitterEmbedProps> = ({\n url,\n theme = 'light',\n onLoad,\n onError,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const embedRef = useRef<HTMLDivElement>(null);\n const [loading, setLoading] = useState(true);\n const mountedRef = useRef(true);\n\n useEffect(() => {\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n };\n }, []);\n\n useEffect(() => {\n const embedContainer = embedRef.current;\n if (!embedContainer) return;\n\n // Create a fresh container for the widget\n const widgetContainer = document.createElement('div');\n embedContainer.appendChild(widgetContainer);\n setLoading(true);\n\n loadTwitterScript().then(() => {\n if (!mountedRef.current) return;\n\n const twttr = (window as Window & { twttr?: { widgets: { createTweet: (id: string, el: HTMLElement, options: Record<string, unknown>) => Promise<HTMLElement | undefined> } } }).twttr;\n if (!twttr) {\n onError?.(new Error('Twitter widgets not loaded'));\n setLoading(false);\n return;\n }\n\n // Extract tweet ID from URL\n const match = url.match(/(?:twitter\\.com|x\\.com)\\/\\w+\\/status\\/(\\d+)/);\n if (!match) {\n onError?.(new Error('Invalid Twitter URL'));\n setLoading(false);\n return;\n }\n\n twttr.widgets.createTweet(match[1], widgetContainer, {\n theme,\n conversation: 'none',\n dnt: true,\n }).then((el) => {\n if (!mountedRef.current) return;\n setLoading(false);\n if (el) {\n onLoad?.();\n } else {\n onError?.(new Error('Tweet not found or unavailable'));\n }\n }).catch((err: Error) => {\n if (!mountedRef.current) return;\n setLoading(false);\n onError?.(err);\n });\n });\n\n return () => {\n // Safely remove the widget container\n if (embedContainer && widgetContainer.parentNode === embedContainer) {\n embedContainer.removeChild(widgetContainer);\n }\n };\n }, [url, theme, onLoad, onError]);\n\n return (\n <div ref={containerRef} className=\"sm-twitter-embed\">\n {loading && (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: 200,\n backgroundColor: theme === 'dark' ? '#15202b' : '#f5f5f5',\n borderRadius: 12,\n }}>\n <div style={{ color: theme === 'dark' ? '#8899a6' : '#666' }}>\n Loading...\n </div>\n </div>\n )}\n <div ref={embedRef} />\n </div>\n );\n};\n\n// ============================================\n// Instagram Embed Component\n// ============================================\n\ninterface InstagramEmbedProps {\n url: string;\n onLoad?: () => void;\n onError?: (error: Error) => void;\n}\n\nconst InstagramEmbed: React.FC<InstagramEmbedProps> = ({\n url,\n onLoad,\n onError,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const embedRef = useRef<HTMLDivElement>(null);\n const [loading, setLoading] = useState(true);\n const mountedRef = useRef(true);\n\n useEffect(() => {\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n };\n }, []);\n\n useEffect(() => {\n const embedContainer = embedRef.current;\n if (!embedContainer) return;\n\n // Extract post ID from URL\n const match = url.match(/instagram\\.com\\/(?:p|reel)\\/([A-Za-z0-9_-]+)/);\n if (!match) {\n onError?.(new Error('Invalid Instagram URL'));\n setLoading(false);\n return;\n }\n\n // Create a fresh container for the widget\n const widgetContainer = document.createElement('div');\n widgetContainer.innerHTML = `\n <blockquote\n class=\"instagram-media\"\n data-instgrm-captioned\n data-instgrm-permalink=\"https://www.instagram.com/p/${match[1]}/\"\n data-instgrm-version=\"14\"\n style=\"\n background:#FFF;\n border:0;\n border-radius:12px;\n box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15);\n margin: 0;\n max-width:100%;\n min-width:100%;\n padding:0;\n width:100%;\n \"\n >\n </blockquote>\n `;\n embedContainer.appendChild(widgetContainer);\n\n loadInstagramScript().then(() => {\n if (!mountedRef.current) return;\n const instgrm = (window as Window & { instgrm?: { Embeds: { process: () => void } } }).instgrm;\n if (instgrm) {\n instgrm.Embeds.process();\n setLoading(false);\n onLoad?.();\n }\n });\n\n return () => {\n // Safely remove the widget container\n if (embedContainer && widgetContainer.parentNode === embedContainer) {\n embedContainer.removeChild(widgetContainer);\n }\n };\n }, [url, onLoad, onError]);\n\n return (\n <div ref={containerRef} className=\"sm-instagram-embed\">\n {loading && (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: 400,\n backgroundColor: '#fafafa',\n borderRadius: 12,\n }}>\n <div style={{ color: '#666' }}>\n Loading...\n </div>\n </div>\n )}\n <div ref={embedRef} />\n </div>\n );\n};\n\n// ============================================\n// Main Component\n// ============================================\n\nexport interface SocialMasonryRef {\n addPosts: (posts: SocialPost[]) => void;\n setPosts: (posts: SocialPost[]) => void;\n removePost: (id: string) => void;\n refresh: () => void;\n}\n\nexport const SocialMasonry = forwardRef<SocialMasonryRef, SocialMasonryProps>(\n (props, ref) => {\n const {\n posts: initialPosts = [],\n gap = 16,\n columns = defaultColumnConfig,\n theme = 'light',\n onEmbedLoad,\n onEmbedError,\n className,\n style,\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const [posts, setPosts] = useState<SocialPost[]>(initialPosts);\n const [columnCount, setColumnCount] = useState(3);\n\n // Update posts when initialPosts changes\n useEffect(() => {\n setPosts(initialPosts);\n }, [initialPosts]);\n\n // Calculate column count based on container width\n useEffect(() => {\n const updateColumnCount = () => {\n if (!containerRef.current) return;\n const width = containerRef.current.clientWidth;\n const count = getColumnCount(columns, width);\n setColumnCount(count);\n };\n\n updateColumnCount();\n\n const resizeObserver = new ResizeObserver(updateColumnCount);\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current);\n }\n\n return () => resizeObserver.disconnect();\n }, [columns]);\n\n // Expose methods via ref\n useImperativeHandle(ref, () => ({\n addPosts: (newPosts: SocialPost[]) => {\n setPosts(prev => [...prev, ...newPosts]);\n },\n setPosts: (newPosts: SocialPost[]) => {\n setPosts(newPosts);\n },\n removePost: (id: string) => {\n setPosts(prev => prev.filter(p => generatePostId(p) !== id));\n },\n refresh: () => {\n // Re-process embeds\n const instgrm = (window as Window & { instgrm?: { Embeds: { process: () => void } } }).instgrm;\n if (instgrm) {\n instgrm.Embeds.process();\n }\n },\n }), []);\n\n // Distribute posts into columns (CSS-based masonry simulation)\n const distributeToColumns = useCallback(() => {\n const cols: SocialPost[][] = Array.from({ length: columnCount }, () => []);\n posts.forEach((post, index) => {\n cols[index % columnCount].push(post);\n });\n return cols;\n }, [posts, columnCount]);\n\n const postColumns = distributeToColumns();\n\n return (\n <div\n ref={containerRef}\n className={`sm-container ${className || ''}`}\n style={{\n display: 'flex',\n gap,\n width: '100%',\n ...style,\n }}\n >\n {postColumns.map((columnPosts, colIndex) => (\n <div\n key={colIndex}\n className=\"sm-column\"\n style={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap,\n minWidth: 0,\n }}\n >\n {columnPosts.map(post => {\n const postId = generatePostId(post);\n\n if (post.platform === 'twitter') {\n return (\n <div key={postId} className=\"sm-embed sm-embed--twitter\">\n <TwitterEmbed\n url={post.url}\n theme={theme}\n onLoad={() => onEmbedLoad?.(post)}\n onError={(error) => onEmbedError?.(post, error)}\n />\n </div>\n );\n }\n\n if (post.platform === 'instagram') {\n return (\n <div key={postId} className=\"sm-embed sm-embed--instagram\">\n <InstagramEmbed\n url={post.url}\n onLoad={() => onEmbedLoad?.(post)}\n onError={(error) => onEmbedError?.(post, error)}\n />\n </div>\n );\n }\n\n return null;\n })}\n </div>\n ))}\n\n {posts.length === 0 && (\n <div\n className=\"sm-empty\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 40,\n color: '#666',\n fontSize: 14,\n width: '100%',\n }}\n >\n No posts to display\n </div>\n )}\n </div>\n );\n }\n);\n\nSocialMasonry.displayName = 'SocialMasonry';\n\nexport default SocialMasonry;\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|