@canopy-iiif/app 0.13.0 → 0.13.2

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/HelloWorld.jsx", "../src/layout/Card.jsx", "../src/layout/ArticleCard.jsx", "../src/layout/Grid.jsx", "../src/layout/Container.jsx", "../src/layout/Button.jsx", "../src/layout/ButtonWrapper.jsx", "../src/layout/CanopyHeader.jsx", "../src/search/SearchPanel.jsx", "../src/Icons.jsx", "../src/search/SearchPanelForm.jsx", "../src/search/SearchPanelTeaserResults.jsx", "../src/layout/CanopyBrand.jsx", "../src/layout/CanopyModal.jsx", "../src/layout/CanopyFooter.jsx", "../src/layout/TeaserCard.jsx", "../src/iiif/Viewer.jsx", "../src/iiif/Slider.jsx", "../src/iiif/sliderOptions.js", "../src/iiif/Scroll.jsx", "../src/iiif/Image.jsx", "../src/iiif/MdxRelatedItems.jsx", "../src/search/MdxSearchResults.jsx", "../src/search/SearchSummary.jsx", "../src/search/MdxSearchTabs.jsx", "../src/search/SearchResults.jsx", "../src/search/SearchTabs.jsx", "../src/search/SearchFiltersDialog.jsx", "../src/search-form/MdxSearchFormModal.jsx", "../src/docs/MarkdownTable.jsx", "../src/docs/Diagram.jsx", "../src/content/timeline/Timeline.jsx", "../src/content/timeline/date-utils.js", "../src/content/timeline/TimelinePoint.jsx"],
4
- "sourcesContent": ["import React from \"react\";\n\nexport const HelloWorld = () => {\n return <div>Hello, World!</div>;\n};\n", "import React, { useEffect, useRef, useState } from \"react\";\n\n/**\n * Card\n *\n * Renders an anchor wrapping a figure with an image and caption.\n * Minimal styling; consumers can override via className/style.\n *\n * Props:\n * - href: string (required) \u2014 link target\n * - src: string (optional) \u2014 image source\n * - alt: string (optional) \u2014 image alt text (falls back to title)\n * - title: string (optional) \u2014 primary caption text\n * - subtitle: string (optional) \u2014 secondary caption text\n * - className: string (optional)\n * - style: object (optional)\n * - children: ReactNode (optional) \u2014 appended inside figcaption\n */\nexport default function Card({\n href,\n src,\n alt,\n title,\n subtitle,\n // Optional intrinsic dimensions or aspect ratio to compute a responsive height\n imgWidth,\n imgHeight,\n aspectRatio,\n className,\n style,\n children,\n lazy = true,\n ...rest\n}) {\n const containerRef = useRef(null);\n const [inView, setInView] = useState(!lazy);\n const [imageLoaded, setImageLoaded] = useState(!lazy);\n\n /**\n * Use IntersectionObserver to detect when the card enters the viewport.\n * When in view, setInView(true) to trigger image loading.\n * If IntersectionObserver is not supported, default to inView=true.\n */\n useEffect(() => {\n if (!lazy) return;\n if (!containerRef.current) return;\n if (typeof IntersectionObserver !== \"function\") {\n setInView(true);\n return;\n }\n const el = containerRef.current;\n const obs = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n setInView(true);\n try {\n obs.unobserve(el);\n } catch (_) {}\n break;\n }\n }\n },\n { root: null, rootMargin: \"100px\", threshold: 0.1 }\n );\n try {\n obs.observe(el);\n } catch (_) {}\n return () => {\n try {\n obs.disconnect();\n } catch (_) {}\n };\n }, [lazy]);\n\n /**\n * Calculate aspect ratio and padding percent for responsive image container.\n */\n const w = Number(imgWidth);\n const h = Number(imgHeight);\n const ratio =\n Number.isFinite(Number(aspectRatio)) && Number(aspectRatio) > 0\n ? Number(aspectRatio)\n : Number.isFinite(w) && w > 0 && Number.isFinite(h) && h > 0\n ? w / h\n : undefined;\n const paddingPercent = ratio ? 100 / ratio : 100;\n\n /**\n * Caption element (figcaption), rendered if title, subtitle, or children are provided.\n */\n const caption = (\n <figcaption>\n {title && <span>{title}</span>}\n {subtitle && <span>{subtitle}</span>}\n {children}\n </figcaption>\n );\n\n return (\n <a\n href={href}\n className={[\"canopy-card\", className].filter(Boolean).join(\" \")}\n style={style}\n ref={containerRef}\n data-aspect-ratio={ratio}\n data-in-view={inView ? \"true\" : \"false\"}\n data-image-loaded={imageLoaded ? \"true\" : \"false\"}\n {...rest}\n >\n <figure>\n {src ? (\n ratio ? (\n <div\n className=\"canopy-card-media\"\n style={{ \"--canopy-card-padding\": `${paddingPercent}%` }}\n >\n {inView ? (\n <img\n src={src}\n alt={alt || title || \"\"}\n loading=\"lazy\"\n onLoad={() => setImageLoaded(true)}\n onError={() => setImageLoaded(true)}\n />\n ) : null}\n </div>\n ) : (\n <img\n src={src}\n alt={alt || title || \"\"}\n loading=\"lazy\"\n onLoad={() => setImageLoaded(true)}\n onError={() => setImageLoaded(true)}\n className=\"canopy-card-image\"\n />\n )\n ) : null}\n {caption}\n </figure>\n </a>\n );\n}\n", "import React, {useMemo} from \"react\";\n\nconst DUMMY_ORIGIN = 'https://canopy.local';\n\nfunction appendQueryParam(href = '', key, value) {\n try {\n const absolute = /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(href);\n const baseHref = absolute\n ? href\n : `${DUMMY_ORIGIN}${href.startsWith('/') ? '' : '/'}${href}`;\n const url = new URL(baseHref);\n url.searchParams.set(key, value);\n if (absolute) return url.toString();\n return `${url.pathname}${url.search}${url.hash}`;\n } catch (_) {\n if (!href) return href;\n const sep = href.includes('?') ? '&' : '?';\n return `${href}${sep}${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n }\n}\n\nfunction escapeRegExp(str = \"\") {\n return String(str).replace(/[-/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n}\n\nfunction buildSnippet({text = \"\", query = \"\", maxLength = 360}) {\n const clean = String(text || \"\")\n .replace(/\\s+/g, \" \")\n .trim();\n if (!clean) return \"\";\n const safeMax = Math.max(60, Number(maxLength) || 360);\n const term = String(query || \"\").trim();\n if (!term)\n return clean.length > safeMax\n ? clean.slice(0, safeMax).trimEnd() + \"\u2026\"\n : clean;\n const lower = clean.toLowerCase();\n const termLower = term.toLowerCase();\n const idx = lower.indexOf(termLower);\n if (idx === -1)\n return clean.length > safeMax\n ? clean.slice(0, safeMax).trimEnd() + \"\u2026\"\n : clean;\n const padding = Math.max(0, Math.floor((safeMax - term.length) / 2));\n let start = Math.max(0, idx - padding);\n let end = start + safeMax;\n if (end > clean.length) {\n end = clean.length;\n start = Math.max(0, end - safeMax);\n }\n let snippet = clean.slice(start, end).trim();\n if (start > 0) snippet = \"\u2026\" + snippet;\n if (end < clean.length) snippet = snippet + \"\u2026\";\n return snippet;\n}\n\nfunction highlightTextNode(text, query, keyPrefix = \"\") {\n if (!query) return text;\n const term = String(query).trim();\n if (!term) return text;\n const regex = new RegExp(`(${escapeRegExp(term)})`, \"gi\");\n const parts = String(text).split(regex);\n const termLower = term.toLowerCase();\n return parts.map((part, idx) => {\n if (!part) return null;\n if (part.toLowerCase() === termLower) {\n return <mark key={`${keyPrefix}-${idx}`}>{part}</mark>;\n }\n return <React.Fragment key={`${keyPrefix}-${idx}`}>{part}</React.Fragment>;\n });\n}\n\nfunction tokenizeInlineMarkdown(input = \"\") {\n const tokens = [];\n let text = input;\n while (text.length) {\n if (text.startsWith(\"\\n\")) {\n tokens.push({type: \"break\"});\n text = text.slice(1);\n continue;\n }\n if (text.startsWith(\"**\")) {\n const closing = text.indexOf(\"**\", 2);\n if (closing !== -1) {\n const inner = text.slice(2, closing);\n tokens.push({type: \"strong\", children: tokenizeInlineMarkdown(inner)});\n text = text.slice(closing + 2);\n continue;\n }\n }\n if (text.startsWith(\"__\")) {\n const closing = text.indexOf(\"__\", 2);\n if (closing !== -1) {\n const inner = text.slice(2, closing);\n tokens.push({type: \"strong\", children: tokenizeInlineMarkdown(inner)});\n text = text.slice(closing + 2);\n continue;\n }\n }\n if (text.startsWith(\"*\")) {\n if (!text.startsWith(\"**\")) {\n const closing = text.indexOf(\"*\", 1);\n if (closing !== -1) {\n const inner = text.slice(1, closing);\n tokens.push({type: \"em\", children: tokenizeInlineMarkdown(inner)});\n text = text.slice(closing + 1);\n continue;\n }\n }\n }\n if (text.startsWith(\"_\")) {\n if (!text.startsWith(\"__\")) {\n const closing = text.indexOf(\"_\", 1);\n if (closing !== -1) {\n const inner = text.slice(1, closing);\n tokens.push({type: \"em\", children: tokenizeInlineMarkdown(inner)});\n text = text.slice(closing + 1);\n continue;\n }\n }\n }\n if (text.startsWith(\"`\")) {\n const closing = text.indexOf(\"`\", 1);\n if (closing !== -1) {\n const inner = text.slice(1, closing);\n tokens.push({type: \"code\", value: inner});\n text = text.slice(closing + 1);\n continue;\n }\n }\n if (text.startsWith(\"[\")) {\n const endLabel = text.indexOf(\"]\");\n const startHref = endLabel !== -1 ? text.indexOf(\"(\", endLabel) : -1;\n const endHref = startHref !== -1 ? text.indexOf(\")\", startHref) : -1;\n if (endLabel !== -1 && startHref === endLabel + 1 && endHref !== -1) {\n const label = text.slice(1, endLabel);\n const href = text.slice(startHref + 1, endHref);\n tokens.push({\n type: \"link\",\n href,\n children: tokenizeInlineMarkdown(label),\n });\n text = text.slice(endHref + 1);\n continue;\n }\n }\n const specials = [\"**\", \"__\", \"*\", \"_\", \"`\", \"[\", \"\\n\"];\n const nextIndex = specials\n .map((needle) =>\n needle === \"\\n\" ? text.indexOf(\"\\n\") : text.indexOf(needle)\n )\n .filter((idx) => idx > 0)\n .reduce((min, idx) => (min === -1 || idx < min ? idx : min), -1);\n if (nextIndex === -1) {\n tokens.push({type: \"text\", value: text});\n break;\n }\n tokens.push({type: \"text\", value: text.slice(0, nextIndex)});\n text = text.slice(nextIndex);\n }\n return tokens;\n}\n\nfunction renderMarkdownTokens(tokens, query, keyPrefix = \"token\") {\n return tokens.map((token, idx) => {\n const key = `${keyPrefix}-${idx}`;\n switch (token.type) {\n case \"strong\":\n return (\n <strong key={key}>\n {renderMarkdownTokens(token.children || [], query, key)}\n </strong>\n );\n case \"em\":\n return (\n <em key={key}>\n {renderMarkdownTokens(token.children || [], query, key)}\n </em>\n );\n case \"code\":\n return <code key={key}>{token.value}</code>;\n case \"link\":\n return (\n <a key={key} href={token.href} target=\"_blank\" rel=\"noreferrer\">\n {renderMarkdownTokens(token.children || [], query, key)}\n </a>\n );\n case \"break\":\n return <br key={key} />;\n case \"text\":\n default:\n return (\n <React.Fragment key={key}>\n {highlightTextNode(token.value || \"\", query, key)}\n </React.Fragment>\n );\n }\n });\n}\n\nfunction formatDisplayUrl(href = \"\") {\n try {\n const url = new URL(\n href,\n href.startsWith(\"http\") ? undefined : \"http://example.com\"\n );\n if (!href.startsWith(\"http\")) return href;\n const displayPath = url.pathname.replace(/\\/$/, \"\");\n return `${url.host}${displayPath}${url.search}`.replace(/\\/$/, \"\");\n } catch (_) {\n return href;\n }\n}\n\nexport default function ArticleCard({\n href = \"#\",\n title = \"Untitled\",\n annotation = \"\",\n summary = \"\",\n summaryMarkdown = \"\",\n metadata = [],\n query = \"\",\n recordType = \"\",\n}) {\n const snippetSource = summaryMarkdown || annotation || summary;\n const snippet = useMemo(\n () => buildSnippet({text: snippetSource, query}),\n [snippetSource, query]\n );\n const snippetTokens = useMemo(\n () => tokenizeInlineMarkdown(snippet),\n [snippet]\n );\n const metaList = Array.isArray(metadata)\n ? metadata.map((m) => String(m || \"\")).filter(Boolean)\n : [];\n const displayUrl = useMemo(() => formatDisplayUrl(href), [href]);\n const resolvedHref = useMemo(() => {\n if (recordType === 'annotation' && query && href) {\n return appendQueryParam(href, 'q', query);\n }\n return href;\n }, [href, recordType, query]);\n\n return (\n <a href={resolvedHref} className=\"canopy-article-card\">\n <article>\n <h3>{title}</h3>\n {displayUrl ? (\n <span className=\"canopy-article-card__url\">{displayUrl}</span>\n ) : null}\n {snippet ? (\n <p className=\"canopy-article-card__snippet\">\n {renderMarkdownTokens(snippetTokens, query)}\n </p>\n ) : null}\n {metaList.length ? (\n <ul className=\"canopy-article-card__meta\">\n {metaList.slice(0, 3).map((item, idx) => (\n <li key={`${item}-${idx}`}>{item}</li>\n ))}\n </ul>\n ) : null}\n </article>\n </a>\n );\n}\n", "import Masonry from \"react-masonry-css\";\nimport React from \"react\";\n\n// Simple item wrapper to provide consistent spacing between items.\nexport function GridItem({children, className = \"\", style = {}, ...rest}) {\n return (\n <div\n className={`canopy-grid-item ${className}`.trim()}\n style={style}\n {...rest}\n >\n {children}\n </div>\n );\n}\n\n/**\n * Grid (Masonry)\n *\n * Lightweight wrapper around `react-masonry-css` with sensible defaults\n * and inline styles so it works without a global CSS pipeline.\n *\n * Props:\n * - breakpointCols: number | object \u2014 columns per breakpoint (react-masonry-css prop)\n * - gap: CSS length string \u2014 spacing between items/columns (default '1rem')\n * - paddingY: CSS length string \u2014 vertical padding for the grid (default '0')\n * - className, style \u2014 forwarded to container\n * - columnClassName \u2014 forwarded to Masonry (defaults to 'canopy-grid-column')\n * - children \u2014 usually a list of <GridItem> elements\n */\nexport default function Grid({\n breakpointCols,\n gap = \"1.618rem\",\n paddingY = \"0\",\n className = \"\",\n style = {},\n columnClassName = \"canopy-grid-column\",\n children,\n ...rest\n}) {\n const cols = breakpointCols || {\n default: 6,\n 1280: 5,\n 1024: 4,\n 768: 3,\n 640: 2,\n };\n const vars = {\"--grid-gap\": gap, \"--grid-padding-y\": paddingY};\n\n return (\n <div className=\"canopy-grid-wrap\">\n {/* Scoped styles so the component works standalone */}\n <style\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{\n __html: `\n .canopy-grid { display: flex; width: auto; position: relative; padding: var(--grid-padding-y, 0) 0; z-index: 1; }\n .canopy-grid .${columnClassName} { margin-left: var(--grid-gap, 1rem); }\n .canopy-grid .${columnClassName}:first-child { margin-left: 0; }\n .canopy-grid-item { margin-bottom: var(--grid-gap, 1rem); }\n `,\n }}\n />\n <Masonry\n breakpointCols={cols}\n className={`canopy-grid ${className}`.trim()}\n columnClassName={columnClassName}\n style={{...vars, ...style}}\n {...rest}\n >\n {children}\n </Masonry>\n </div>\n );\n}\n", "import React from \"react\";\n\nexport default function Container({\n className = \"\",\n variant = \"content\",\n children,\n ...rest\n}) {\n const variantClass = variant === \"wide\" ? \"max-w-wide\" : \"max-w-content\";\n const classes = [\"mx-auto\", variantClass, \"w-full\", className]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div\n className={classes}\n {...rest}\n style={{...rest.style, padding: \"1.618rem\"}}\n >\n {children}\n </div>\n );\n}\n", "import React from 'react';\n\nconst VARIANTS = new Set(['primary', 'secondary']);\n\nexport default function Button({\n label,\n href = '#',\n target,\n rel,\n variant = 'primary',\n className = '',\n children,\n ...rest\n}) {\n const resolvedVariant = VARIANTS.has(variant) ? variant : 'primary';\n const computedRel =\n target === '_blank' && !rel ? 'noopener noreferrer' : rel;\n const content = children != null ? children : label;\n\n if (!content) return null;\n\n const classes = [\n 'canopy-button',\n `canopy-button--${resolvedVariant}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <a\n href={href}\n className={classes}\n target={target}\n rel={computedRel}\n {...rest}\n >\n {content}\n </a>\n );\n}\n", "import React from 'react';\n\nexport default function ButtonWrapper({\n className = '',\n children,\n text = '',\n variant = 'default',\n ...rest\n}) {\n const variantClass =\n variant && variant !== 'default'\n ? `canopy-button-group--${variant}`\n : '';\n const classes = ['canopy-button-group', variantClass, className]\n .filter(Boolean)\n .join(' ');\n return (\n <div className={classes} {...rest}>\n {text && <span className=\"canopy-button-group__text\">{text}</span>}\n <div className=\"canopy-button-group__actions\">{children}</div>\n </div>\n );\n}\n", "import React from \"react\";\nimport SearchPanel from \"../search/SearchPanel.jsx\";\nimport CanopyBrand from \"./CanopyBrand.jsx\";\nimport CanopyModal from \"./CanopyModal.jsx\";\n\nfunction HeaderScript() {\n const code = `\n(function () {\n if (typeof window === 'undefined') return;\n\n var doc = document;\n var body = doc.body;\n var root = doc.documentElement;\n\n function ready(fn) {\n if (doc.readyState === 'loading') {\n doc.addEventListener('DOMContentLoaded', fn, { once: true });\n } else {\n fn();\n }\n }\n\n ready(function () {\n var header = doc.querySelector('.canopy-header');\n if (!header) return;\n\n var NAV_ATTR = 'data-mobile-nav';\n var SEARCH_ATTR = 'data-mobile-search';\n\n function modalFor(type) {\n return doc.querySelector('[data-canopy-modal=\"' + type + '\"]');\n }\n\n function each(list, fn) {\n if (!list || typeof fn !== 'function') return;\n Array.prototype.forEach.call(list, fn);\n }\n\n function setExpanded(type, expanded) {\n var toggles = header.querySelectorAll('[data-canopy-header-toggle=\"' + type + '\"]');\n each(toggles, function (btn) {\n btn.setAttribute('aria-expanded', expanded ? 'true' : 'false');\n });\n var modal = modalFor(type);\n if (modal) {\n modal.setAttribute('data-open', expanded ? 'true' : 'false');\n modal.setAttribute('aria-hidden', expanded ? 'false' : 'true');\n }\n }\n\n function lockScroll(shouldLock) {\n if (!body) return;\n if (shouldLock) {\n if (!body.dataset.canopyScrollLock) {\n body.dataset.canopyScrollPrevOverflow = body.style.overflow || '';\n if (root && root.dataset) {\n root.dataset.canopyScrollPrevOverflow = root.style.overflow || '';\n }\n }\n body.dataset.canopyScrollLock = '1';\n body.style.overflow = 'hidden';\n if (root) root.style.overflow = 'hidden';\n } else {\n if (body.dataset.canopyScrollLock) {\n delete body.dataset.canopyScrollLock;\n body.style.overflow = body.dataset.canopyScrollPrevOverflow || '';\n delete body.dataset.canopyScrollPrevOverflow;\n }\n if (root && root.dataset) {\n root.style.overflow = root.dataset.canopyScrollPrevOverflow || '';\n delete root.dataset.canopyScrollPrevOverflow;\n }\n }\n }\n\n function stateFor(type) {\n if (type === 'nav') return header.getAttribute(NAV_ATTR);\n if (type === 'search') return header.getAttribute(SEARCH_ATTR);\n return 'closed';\n }\n\n function focusSearchForm() {\n var input = header.querySelector('[data-canopy-search-form-input]');\n if (!input) return;\n var raf = typeof window !== 'undefined' && window.requestAnimationFrame;\n (raf || function (fn) { return setTimeout(fn, 16); })(function () {\n try {\n input.focus({ preventScroll: true });\n } catch (_) {\n try { input.focus(); } catch (_) {}\n }\n });\n }\n\n function focusNavMenu() {\n var modal = modalFor('nav');\n if (!modal) return;\n var target = modal.querySelector('button, a, input, [tabindex]:not([tabindex=\"-1\"])');\n if (!target) return;\n var raf = typeof window !== 'undefined' && window.requestAnimationFrame;\n (raf || function (fn) { return setTimeout(fn, 16); })(function () {\n try {\n target.focus({ preventScroll: true });\n } catch (_) {\n try { target.focus(); } catch (_) {}\n }\n });\n }\n\n function setState(type, next) {\n if (type === 'nav') header.setAttribute(NAV_ATTR, next);\n if (type === 'search') header.setAttribute(SEARCH_ATTR, next);\n setExpanded(type, next === 'open');\n var navOpen = header.getAttribute(NAV_ATTR) === 'open';\n var searchOpen = header.getAttribute(SEARCH_ATTR) === 'open';\n lockScroll(navOpen || searchOpen);\n }\n\n function toggle(type, force) {\n var current = stateFor(type) === 'open';\n var shouldOpen = typeof force === 'boolean' ? force : !current;\n if (shouldOpen && type === 'nav') setState('search', 'closed');\n if (shouldOpen && type === 'search') setState('nav', 'closed');\n setState(type, shouldOpen ? 'open' : 'closed');\n if (type === 'search' && shouldOpen) focusSearchForm();\n if (type === 'nav' && shouldOpen) focusNavMenu();\n }\n\n each(header.querySelectorAll('[data-canopy-header-toggle]'), function (btn) {\n btn.addEventListener('click', function (event) {\n event.preventDefault();\n var type = btn.getAttribute('data-canopy-header-toggle');\n if (!type) return;\n toggle(type);\n });\n });\n\n each(doc.querySelectorAll('[data-canopy-header-close]'), function (btn) {\n btn.addEventListener('click', function () {\n var type = btn.getAttribute('data-canopy-header-close');\n if (!type) return;\n toggle(type, false);\n });\n });\n\n var navModal = modalFor('nav');\n if (navModal) {\n navModal.addEventListener('click', function (event) {\n if (event.target === navModal) {\n toggle('nav', false);\n return;\n }\n var target = event.target && event.target.closest && event.target.closest('a');\n if (!target) return;\n toggle('nav', false);\n });\n }\n\n var searchModal = modalFor('search');\n if (searchModal) {\n searchModal.addEventListener('click', function (event) {\n if (event.target === searchModal) toggle('search', false);\n });\n }\n\n doc.addEventListener('keydown', function (event) {\n if (event.key !== 'Escape') return;\n var navOpen = header.getAttribute(NAV_ATTR) === 'open';\n var searchOpen = header.getAttribute(SEARCH_ATTR) === 'open';\n if (!navOpen && !searchOpen) return;\n event.preventDefault();\n toggle('nav', false);\n toggle('search', false);\n });\n\n var mq = window.matchMedia('(min-width: 48rem)');\n function syncDesktopState() {\n if (mq.matches) {\n setState('nav', 'closed');\n setState('search', 'closed');\n setExpanded('nav', false);\n setExpanded('search', false);\n lockScroll(false);\n }\n }\n\n try {\n mq.addEventListener('change', syncDesktopState);\n } catch (_) {\n mq.addListener(syncDesktopState);\n }\n\n syncDesktopState();\n });\n})();\n `;\n\n return (\n <script\n dangerouslySetInnerHTML={{\n __html: code,\n }}\n />\n );\n}\n\nconst CONTEXT_KEY =\n typeof Symbol === \"function\"\n ? Symbol.for(\"__CANOPY_PAGE_CONTEXT__\")\n : \"__CANOPY_PAGE_CONTEXT__\";\n\nfunction getSharedRoot() {\n if (typeof globalThis !== \"undefined\") return globalThis;\n if (typeof window !== \"undefined\") return window;\n if (typeof global !== \"undefined\") return global;\n return null;\n}\n\nfunction getSafePageContext() {\n const root = getSharedRoot();\n if (root && root[CONTEXT_KEY]) return root[CONTEXT_KEY];\n const ctx = React.createContext({ navigation: null, page: null });\n if (root) root[CONTEXT_KEY] = ctx;\n return ctx;\n}\n\nfunction ensureArray(navLinks) {\n if (!Array.isArray(navLinks)) return [];\n return navLinks.filter(\n (link) => link && typeof link === \"object\" && typeof link.href === \"string\"\n );\n}\n\nfunction SectionNavList({ root }) {\n if (!root || !Array.isArray(root.children) || !root.children.length) return null;\n return (\n <ul className=\"canopy-modal__section-list\" role=\"list\">\n {root.children.map((node) => (\n <SectionNavItem key={node.slug || node.href || node.title} node={node} depth={0} />\n ))}\n </ul>\n );\n}\n\nfunction SectionNavItem({ node, depth }) {\n if (!node) return null;\n const hasChildren = Array.isArray(node.children) && node.children.length > 0;\n const Tag = node.href ? \"a\" : \"span\";\n const classes = [\n \"canopy-modal__section-link\",\n `depth-${Math.min(5, Math.max(0, depth + 1))}`,\n ];\n if (!node.href) classes.push(\"is-label\");\n if (node.isActive) classes.push(\"is-active\");\n\n return (\n <li className=\"canopy-modal__section-item\" data-depth={depth}>\n <Tag\n className={classes.join(\" \")}\n href={node.href || undefined}\n aria-current={node.isActive ? \"page\" : undefined}\n >\n {node.title || node.slug}\n </Tag>\n {hasChildren ? (\n <ul className=\"canopy-modal__section-list canopy-modal__section-list--nested\" role=\"list\">\n {node.children.map((child) => (\n <SectionNavItem key={child.slug || child.href || child.title} node={child} depth={depth + 1} />\n ))}\n </ul>\n ) : null}\n </li>\n );\n}\n\nexport default function CanopyHeader(props = {}) {\n const {\n navigation: navLinksProp,\n searchLabel = \"Search\",\n searchHotkey = \"mod+k\",\n searchPlaceholder = \"Search\u2026\",\n brandHref = \"/\",\n title = \"Canopy IIIF\",\n logo: SiteLogo,\n } = props;\n\n const navLinks = ensureArray(navLinksProp);\n const PageContext = getSafePageContext();\n const context = React.useContext(PageContext);\n const sectionNavigation =\n context && context.navigation && context.navigation.root\n ? context.navigation\n : null;\n const sectionHeading =\n (sectionNavigation && sectionNavigation.title) ||\n (sectionNavigation && sectionNavigation.root\n ? sectionNavigation.root.title\n : \"\");\n const hasSectionNav = !!(\n sectionNavigation &&\n sectionNavigation.root &&\n Array.isArray(sectionNavigation.root.children) &&\n sectionNavigation.root.children.length\n );\n const sectionLabel = sectionHeading\n ? `More in ${sectionHeading}`\n : \"More in this section\";\n const sectionAriaLabel = sectionHeading\n ? `${sectionHeading} section navigation`\n : \"Section navigation\";\n\n return (\n <>\n <header\n className=\"canopy-header\"\n data-mobile-nav=\"closed\"\n data-mobile-search=\"closed\"\n >\n <div className=\"canopy-header__brand\">\n <CanopyBrand\n label={title}\n href={brandHref}\n className=\"canopy-header__brand-link\"\n Logo={SiteLogo}\n />\n </div>\n\n <div className=\"canopy-header__desktop-search\">\n <SearchPanel\n label={searchLabel}\n hotkey={searchHotkey}\n placeholder={searchPlaceholder}\n />\n </div>\n\n <nav\n className=\"canopy-nav-links canopy-header__desktop-nav\"\n aria-label=\"Primary navigation\"\n >\n {navLinks.map((link) => (\n <a key={link.href} href={link.href}>\n {link.label || link.href}\n </a>\n ))}\n </nav>\n\n <div className=\"canopy-header__actions\">\n <button\n type=\"button\"\n className=\"canopy-header__icon-button canopy-header__search-trigger\"\n aria-label=\"Open search\"\n aria-controls=\"canopy-modal-search\"\n aria-expanded=\"false\"\n data-canopy-header-toggle=\"search\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n className=\"canopy-header__search-icon\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m21 21-3.8-3.8M10.5 18a7.5 7.5 0 1 1 0-15 7.5 7.5 0 0 1 0 15Z\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n className=\"canopy-header__icon-button canopy-header__menu\"\n aria-label=\"Open navigation\"\n aria-controls=\"canopy-modal-nav\"\n aria-expanded=\"false\"\n data-canopy-header-toggle=\"nav\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"1.5\"\n stroke=\"currentColor\"\n className=\"canopy-header__menu-icon\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\"\n />\n </svg>\n </button>\n </div>\n </header>\n\n <CanopyModal\n id=\"canopy-modal-nav\"\n variant=\"nav\"\n labelledBy=\"canopy-modal-nav-label\"\n label={title}\n logo={SiteLogo}\n href={brandHref}\n closeLabel=\"Close navigation\"\n closeDataAttr=\"nav\"\n >\n <nav\n className=\"canopy-nav-links canopy-modal__nav\"\n aria-label=\"Primary navigation\"\n >\n {navLinks.map((link) => (\n <a key={link.href} href={link.href}>\n {link.label || link.href}\n </a>\n ))}\n </nav>\n {hasSectionNav ? (\n <nav\n className=\"canopy-modal__section-nav\"\n aria-label={sectionAriaLabel}\n >\n <div className=\"canopy-modal__section-label\">{sectionLabel}</div>\n <SectionNavList root={sectionNavigation.root} />\n </nav>\n ) : null}\n </CanopyModal>\n\n <CanopyModal\n id=\"canopy-modal-search\"\n variant=\"search\"\n labelledBy=\"canopy-modal-search-label\"\n label={title}\n logo={SiteLogo}\n href={brandHref}\n closeLabel=\"Close search\"\n closeDataAttr=\"search\"\n bodyClassName=\"canopy-modal__body--search\"\n >\n <SearchPanel\n label={searchLabel}\n hotkey={searchHotkey}\n placeholder={searchPlaceholder}\n />\n </CanopyModal>\n\n <HeaderScript />\n </>\n );\n}\n", "import React from 'react';\nimport SearchPanelForm, { resolveSearchPath } from './SearchPanelForm.jsx';\nimport SearchPanelTeaserResults from './SearchPanelTeaserResults.jsx';\n\n// High-level SearchPanel composed of a teaser form and teaser results panel.\n// Encodes configuration as JSON for the client runtime.\nexport default function SearchPanel(props = {}) {\n const {\n placeholder = 'Search\u2026',\n hotkey = 'mod+k',\n maxResults = 8,\n groupOrder = ['work', 'docs', 'page'],\n // Kept for backward compat; form always renders submit\n button = true, // eslint-disable-line no-unused-vars\n buttonLabel = 'Search',\n label,\n searchPath = '/search',\n } = props || {};\n\n const text = typeof label === 'string' && label.trim() ? label.trim() : buttonLabel;\n const resolvedSearchPath = resolveSearchPath(searchPath);\n const data = { placeholder, hotkey, maxResults, groupOrder, label: text, searchPath: resolvedSearchPath };\n\n return (\n <div data-canopy-search-form className=\"flex-1 min-w-0\">\n <div className=\"relative w-full\">\n <SearchPanelForm placeholder={placeholder} buttonLabel={buttonLabel} label={label} searchPath={resolvedSearchPath} />\n <SearchPanelTeaserResults />\n </div>\n <script type=\"application/json\" dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }} />\n </div>\n );\n}\n", "import React from \"react\";\n\nexport const MagnifyingGlassIcon = (props) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" {...props}>\n <path d=\"M456.69 421.39L362.6 327.3a173.81 173.81 0 0034.84-104.58C397.44 126.38 319.06 48 222.72 48S48 126.38 48 222.72s78.38 174.72 174.72 174.72A173.81 173.81 0 00327.3 362.6l94.09 94.09a25 25 0 0035.3-35.3zM97.92 222.72a124.8 124.8 0 11124.8 124.8 124.95 124.95 0 01-124.8-124.8z\" />\n </svg>\n);\n", "import {MagnifyingGlassIcon} from \"../Icons\";\nimport React from \"react\";\n\nfunction readBasePath() {\n const normalize = (val) => {\n const raw = typeof val === \"string\" ? val.trim() : \"\";\n if (!raw) return \"\";\n return raw.replace(/\\/+$/, \"\");\n };\n try {\n if (typeof window !== \"undefined\" && window.CANOPY_BASE_PATH != null) {\n const fromWindow = normalize(window.CANOPY_BASE_PATH);\n if (fromWindow) return fromWindow;\n }\n } catch (_) {}\n try {\n if (\n typeof globalThis !== \"undefined\" &&\n globalThis.CANOPY_BASE_PATH != null\n ) {\n const fromGlobal = normalize(globalThis.CANOPY_BASE_PATH);\n if (fromGlobal) return fromGlobal;\n }\n } catch (_) {}\n try {\n if (\n typeof process !== \"undefined\" &&\n process.env &&\n process.env.CANOPY_BASE_PATH\n ) {\n const fromEnv = normalize(process.env.CANOPY_BASE_PATH);\n if (fromEnv) return fromEnv;\n }\n } catch (_) {}\n return \"\";\n}\n\nfunction isAbsoluteUrl(href) {\n try {\n return /^https?:/i.test(String(href || \"\"));\n } catch (_) {\n return false;\n }\n}\n\nexport function resolveSearchPath(pathValue) {\n let raw = typeof pathValue === \"string\" ? pathValue.trim() : \"\";\n if (!raw) raw = \"/search\";\n if (isAbsoluteUrl(raw)) return raw;\n const normalizedPath = raw.startsWith(\"/\") ? raw : `/${raw}`;\n const base = readBasePath();\n if (!base) return normalizedPath;\n const baseWithLead = base.startsWith(\"/\") ? base : `/${base}`;\n const baseTrimmed = baseWithLead.replace(/\\/+$/, \"\");\n if (!baseTrimmed) return normalizedPath;\n if (\n normalizedPath === baseTrimmed ||\n normalizedPath.startsWith(`${baseTrimmed}/`)\n ) {\n return normalizedPath;\n }\n const pathTrimmed = normalizedPath.replace(/^\\/+/, \"\");\n return `${baseTrimmed}/${pathTrimmed}`;\n}\n\nexport default function SearchPanelForm(props = {}) {\n const {\n placeholder = \"Search\u2026\",\n buttonLabel = \"Search\",\n label,\n searchPath = \"/search\",\n inputId: inputIdProp,\n clearLabel = \"Clear search\",\n } = props || {};\n\n const text =\n typeof label === \"string\" && label.trim() ? label.trim() : buttonLabel;\n const action = React.useMemo(\n () => resolveSearchPath(searchPath),\n [searchPath]\n );\n const autoId = typeof React.useId === \"function\" ? React.useId() : undefined;\n const [fallbackId] = React.useState(\n () => `canopy-search-form-${Math.random().toString(36).slice(2, 10)}`\n );\n const inputId = inputIdProp || autoId || fallbackId;\n const inputRef = React.useRef(null);\n const [hasValue, setHasValue] = React.useState(false);\n\n const focusInput = React.useCallback(() => {\n const el = inputRef.current;\n if (!el) return;\n if (document.activeElement === el) return;\n try {\n el.focus({preventScroll: true});\n } catch (_) {\n try {\n el.focus();\n } catch (_) {}\n }\n }, []);\n\n const handlePointerDown = React.useCallback(\n (event) => {\n const target = event.target;\n if (target && typeof target.closest === \"function\") {\n if (target.closest(\"[data-canopy-search-form-trigger]\")) return;\n if (target.closest(\"[data-canopy-search-form-clear]\")) return;\n }\n event.preventDefault();\n focusInput();\n },\n [focusInput]\n );\n\n React.useEffect(() => {\n const el = inputRef.current;\n if (!el) return;\n if (el.value && el.value.trim()) {\n setHasValue(true);\n }\n }, []);\n\n const handleInputChange = React.useCallback((event) => {\n const nextHasValue = Boolean(\n event?.target?.value && event.target.value.trim()\n );\n setHasValue(nextHasValue);\n }, []);\n\n const handleClear = React.useCallback((event) => {}, []);\n\n const handleClearKey = React.useCallback(\n (event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleClear(event);\n }\n },\n [handleClear]\n );\n\n return (\n <form\n action={action}\n method=\"get\"\n role=\"search\"\n autoComplete=\"off\"\n spellCheck=\"false\"\n className=\"canopy-search-form canopy-search-form-shell\"\n onPointerDown={handlePointerDown}\n data-has-value={hasValue ? \"1\" : \"0\"}\n >\n <label htmlFor={inputId} className=\"canopy-search-form__label\">\n <MagnifyingGlassIcon className=\"canopy-search-form__icon\" />\n <input\n id={inputId}\n type=\"search\"\n name=\"q\"\n inputMode=\"search\"\n data-canopy-search-form-input\n placeholder={placeholder}\n className=\"canopy-search-form__input\"\n aria-label=\"Search\"\n ref={inputRef}\n onChange={handleInputChange}\n onInput={handleInputChange}\n />\n </label>\n {hasValue ? (\n <button\n type=\"button\"\n className=\"canopy-search-form__clear\"\n onClick={handleClear}\n onPointerDown={(event) => event.stopPropagation()}\n onKeyDown={handleClearKey}\n aria-label={clearLabel}\n data-canopy-search-form-clear\n >\n \u00D7\n </button>\n ) : null}\n <button\n type=\"submit\"\n data-canopy-search-form-trigger=\"submit\"\n className=\"canopy-search-form__submit\"\n >\n {text}\n </button>\n </form>\n );\n}\n", "import React from \"react\";\n\n// SSR placeholder for teaser results panel; the runtime controls visibility and content.\nexport default function SearchPanelTeaserResults(props = {}) {\n const { style, className } = props || {};\n const classes = [\"canopy-search-teaser\", \"is-empty\", className]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div\n data-canopy-search-form-panel\n hidden\n className={classes || undefined}\n style={style}\n >\n <div id=\"cplist\" className=\"canopy-search-teaser__list\" />\n </div>\n );\n}\n", "import React from 'react';\n\nexport default function CanopyBrand(props = {}) {\n const {\n labelId,\n label = 'Canopy IIIF',\n href = '/',\n className,\n Logo,\n } = props || {};\n const spanProps = labelId ? {id: labelId} : {};\n const classes = ['canopy-logo', className].filter(Boolean).join(' ');\n\n return (\n <a href={href} className={classes}>\n {typeof Logo === 'function' ? <Logo /> : null}\n <span {...spanProps}>{label}</span>\n </a>\n );\n}\n", "import React from 'react';\nimport CanopyBrand from './CanopyBrand.jsx';\n\nexport default function CanopyModal(props = {}) {\n const {\n id,\n variant,\n open = false,\n labelledBy,\n label,\n logo: Logo,\n href = '/',\n closeLabel = 'Close',\n closeDataAttr,\n onClose,\n onBackgroundClick,\n bodyClassName,\n padded = true,\n className,\n children,\n } = props;\n\n const rootClassName = ['canopy-modal', variant ? `canopy-modal--${variant}` : null, className]\n .filter(Boolean)\n .join(' ');\n\n const modalProps = {\n id,\n className: rootClassName,\n role: 'dialog',\n 'aria-modal': 'true',\n 'aria-hidden': open ? 'false' : 'true',\n 'data-open': open ? 'true' : 'false',\n };\n\n if (variant) modalProps['data-canopy-modal'] = variant;\n\n const resolvedLabelId = labelledBy || (label ? `${variant || 'modal'}-label` : undefined);\n if (resolvedLabelId) modalProps['aria-labelledby'] = resolvedLabelId;\n\n if (typeof onBackgroundClick === 'function') {\n modalProps.onClick = (event) => {\n if (event.target === event.currentTarget) onBackgroundClick(event);\n };\n }\n\n const closeButtonProps = {\n type: 'button',\n className: 'canopy-modal__close',\n 'aria-label': closeLabel,\n };\n\n if (typeof closeDataAttr === 'string' && closeDataAttr) {\n closeButtonProps['data-canopy-header-close'] = closeDataAttr;\n }\n\n if (typeof onClose === 'function') {\n closeButtonProps.onClick = onClose;\n }\n\n const bodyClasses = ['canopy-modal__body'];\n if (padded) bodyClasses.push('canopy-modal__body--padded');\n if (bodyClassName) bodyClasses.push(bodyClassName);\n const bodyClassNameValue = bodyClasses.join(' ');\n\n return (\n <div {...modalProps}>\n <div className=\"canopy-modal__panel\">\n <button {...closeButtonProps}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n className=\"canopy-modal__close-icon\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 6l12 12M6 18L18 6\" />\n </svg>\n <span className=\"sr-only\">{closeLabel}</span>\n </button>\n <div className={bodyClassNameValue}>\n {label ? (\n <div className=\"canopy-modal__brand\">\n <CanopyBrand\n labelId={resolvedLabelId}\n label={label}\n href={href}\n Logo={Logo}\n className=\"canopy-modal__brand-link\"\n />\n </div>\n ) : null}\n {children}\n </div>\n </div>\n </div>\n );\n}\n", "import React from 'react';\n\nexport default function CanopyFooter({ className = '', children }) {\n const footerClassName = ['canopy-footer', className].filter(Boolean).join(' ');\n\n return (\n <footer className={footerClassName}>\n <div className=\"canopy-footer__inner\">{children}</div>\n </footer>\n );\n}\n", "import React from \"react\";\n\nexport default function TeaserCard({\n href = \"\",\n title = \"\",\n metadata = [],\n summary = \"\",\n thumbnail = null,\n type = \"work\",\n className = \"\",\n ...rest\n}) {\n const Tag = href ? \"a\" : \"div\";\n const classes = [\n \"canopy-card\",\n \"canopy-card--teaser\",\n \"canopy-search-teaser__item\",\n \"canopy-teaser-card\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n const showThumb = type === \"work\" && thumbnail;\n const metaLine = (\n Array.isArray(metadata) && metadata.length\n ? metadata.filter(Boolean)\n : summary\n ? [summary]\n : []\n )\n .filter(Boolean)\n .slice(0, 2)\n .join(\" \u2022 \");\n\n return (\n <Tag\n className={classes}\n href={href || undefined}\n data-canopy-item={href ? \"\" : undefined}\n {...rest}\n >\n {showThumb ? (\n <div className=\"canopy-search-teaser__thumb\">\n <img\n src={thumbnail}\n alt=\"\"\n loading=\"lazy\"\n className=\"canopy-search-teaser__thumb-img\"\n />\n </div>\n ) : null}\n <div className=\"canopy-search-teaser__text\">\n <span className=\"canopy-search-teaser__title\">\n {title || href || 'Untitled'}\n </span>\n {metaLine ? (\n <span className=\"canopy-search-teaser__meta\">{metaLine}</span>\n ) : null}\n </div>\n </Tag>\n );\n}\n", "import React, { useEffect, useState } from \"react\";\n\n// SSR-safe wrapper around Clover's viewer. Clover touches the DOM at import time,\n// so we dynamically import it only in the browser.\n\n// Default Clover viewer options; can be overridden per-usage via props.options\nconst DEFAULT_VIEWER_OPTIONS = {\n showDownload: false,\n showIIIFBadge: false,\n showTitle: false,\n informationPanel: {\n open: false,\n renderAbout: false,\n renderToggle: false,\n },\n};\n\nfunction isPlainObject(val) {\n return val && typeof val === \"object\" && !Array.isArray(val);\n}\n\nfunction deepMerge(base, override) {\n if (!isPlainObject(base)) return override;\n const out = { ...base };\n if (!isPlainObject(override)) return out;\n for (const key of Object.keys(override)) {\n const a = base[key];\n const b = override[key];\n if (isPlainObject(a) && isPlainObject(b)) out[key] = deepMerge(a, b);\n else out[key] = b;\n }\n return out;\n}\n\nexport const Viewer = (props) => {\n const [CloverViewer, setCloverViewer] = useState(null);\n const mergedOptions = deepMerge(\n DEFAULT_VIEWER_OPTIONS,\n props && props.options\n );\n\n useEffect(() => {\n let mounted = true;\n const canUseDom =\n typeof window !== \"undefined\" && typeof document !== \"undefined\";\n if (canUseDom) {\n import(\"@samvera/clover-iiif/viewer\")\n .then((mod) => {\n if (!mounted) return;\n // Loaded Clover viewer dynamically in the browser\n const Comp = mod && (mod.default || mod.Viewer || mod);\n setCloverViewer(() => Comp);\n })\n .catch(() => {\n // Silently ignore load errors on the server or if Clover is unavailable\n });\n }\n return () => {\n mounted = false;\n };\n }, []);\n\n if (!CloverViewer) {\n // SSR placeholder for client hydration; props provided as JSON\n let json = \"{}\";\n try {\n const p = { ...(props || {}) };\n if (mergedOptions) p.options = mergedOptions;\n json = JSON.stringify(p);\n } catch (_) {\n json = \"{}\";\n }\n return (\n <div data-canopy-viewer=\"1\" className=\"not-prose\">\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{ __html: json }}\n />\n </div>\n );\n }\n return <CloverViewer {...props} options={mergedOptions} />;\n};\n", "import React, {useEffect, useState} from \"react\";\nimport {mergeSliderOptions, normalizeSliderOptions} from \"./sliderOptions.js\";\n\n// SSR-safe wrapper around Clover's slider. Clover touches the DOM at import time,\n// so we dynamically import it only in the browser.\nexport const Slider = (props = {}) => {\n const [CloverSlider, setCloverSlider] = useState(null);\n\n useEffect(() => {\n let mounted = true;\n const canUseDom =\n typeof window !== \"undefined\" && typeof document !== \"undefined\";\n if (canUseDom) {\n import(\"@samvera/clover-iiif/slider\")\n .then((mod) => {\n if (!mounted) return;\n const Comp = mod && (mod.default || mod.Slider || mod);\n setCloverSlider(() => Comp);\n })\n .catch(() => {\n // Silently ignore load errors on the server or if Clover is unavailable\n });\n }\n return () => {\n mounted = false;\n };\n }, []);\n\n const {className, ...rest} = props || {};\n const sliderClassName = [\"canopy-slider\", className]\n .filter(Boolean)\n .join(\" \");\n const mergedOptions = mergeSliderOptions(rest.options);\n const normalizedOptions = normalizeSliderOptions(mergedOptions);\n const resolvedProps = {\n ...rest,\n className: sliderClassName,\n options: normalizedOptions,\n };\n\n if (!CloverSlider) {\n // SSR placeholder for client hydration; props provided as JSON\n let json = \"{}\";\n try {\n json = JSON.stringify(resolvedProps || {});\n } catch (_) {\n json = \"{}\";\n }\n return (\n <div className={sliderClassName} data-canopy-slider=\"1\">\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{__html: json}}\n />\n </div>\n );\n }\n return <CloverSlider {...resolvedProps} />;\n};\n", "const UNIT_TOKEN = \"__canopySliderUnit\";\nconst UNIT_REM = \"rem\";\nconst DEFAULT_FONT_SIZE = 16;\nlet cachedRootFontSize = null;\n\n// Shared defaults applied to every slider instance (manual + generated).\nexport const sliderOptions = {\n breakpoints: {\n 400: {\n slidesPerView: 2,\n spaceBetween: rem(1),\n },\n 640: {\n slidesPerView: 3,\n spaceBetween: rem(1.618),\n },\n 1024: {\n slidesPerView: 4,\n spaceBetween: rem(1.618),\n },\n },\n};\n\nexport function rem(value) {\n const numeric = typeof value === \"number\" ? value : parseFloat(value);\n return {\n [UNIT_TOKEN]: UNIT_REM,\n value: Number.isFinite(numeric) ? numeric : 0,\n };\n}\n\nfunction cloneBreakpoints(source) {\n if (!source || typeof source !== \"object\") return undefined;\n const clone = {};\n Object.entries(source).forEach(([key, entry]) => {\n clone[key] = entry && typeof entry === \"object\" ? {...entry} : {};\n });\n return clone;\n}\n\nfunction cloneOptions(options = {}) {\n const clone = {...options};\n if (options.breakpoints && typeof options.breakpoints === \"object\") {\n clone.breakpoints = cloneBreakpoints(options.breakpoints);\n }\n return clone;\n}\n\nexport function mergeSliderOptions(overrides) {\n const base = cloneOptions(sliderOptions);\n const incoming = cloneOptions(overrides || {});\n const merged = {\n ...base,\n ...incoming,\n };\n if (base.breakpoints || incoming.breakpoints) {\n merged.breakpoints = {\n ...(base.breakpoints || {}),\n ...(incoming.breakpoints || {}),\n };\n }\n return merged;\n}\n\nfunction hasBrowserEnv() {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\";\n}\n\nfunction measureRootFontSize() {\n if (!hasBrowserEnv()) return DEFAULT_FONT_SIZE;\n if (cachedRootFontSize !== null) return cachedRootFontSize;\n let size = DEFAULT_FONT_SIZE;\n try {\n const root = window.document && window.document.documentElement;\n if (root && window.getComputedStyle) {\n const computed = window.getComputedStyle(root).fontSize;\n const parsed = parseFloat(computed);\n if (Number.isFinite(parsed)) size = parsed;\n }\n } catch (_) {\n size = DEFAULT_FONT_SIZE;\n }\n cachedRootFontSize = size;\n return size;\n}\n\nfunction convertSpacing(value) {\n if (!hasBrowserEnv()) return value;\n if (value && typeof value === \"object\" && value[UNIT_TOKEN] === UNIT_REM) {\n const remValue =\n typeof value.value === \"number\" ? value.value : parseFloat(value.value);\n if (!Number.isFinite(remValue)) return value;\n return remValue * measureRootFontSize();\n }\n return value;\n}\n\nfunction normalizeBreakpoints(breakpoints) {\n if (!breakpoints || typeof breakpoints !== \"object\") return breakpoints;\n const normalized = {};\n Object.entries(breakpoints).forEach(([key, entry]) => {\n const clone = entry && typeof entry === \"object\" ? {...entry} : {};\n if (Object.prototype.hasOwnProperty.call(clone, \"spaceBetween\")) {\n clone.spaceBetween = convertSpacing(clone.spaceBetween);\n }\n normalized[key] = clone;\n });\n return normalized;\n}\n\nexport function normalizeSliderOptions(options) {\n const clone = cloneOptions(options || {});\n if (!hasBrowserEnv()) return clone;\n if (Object.prototype.hasOwnProperty.call(clone, \"spaceBetween\")) {\n clone.spaceBetween = convertSpacing(clone.spaceBetween);\n }\n if (clone.breakpoints) {\n clone.breakpoints = normalizeBreakpoints(clone.breakpoints);\n }\n return clone;\n}\n", "import React, { useEffect, useState } from \"react\";\n\n// SSR-safe wrapper around Clover's scroll component. The library touches the DOM\n// during import, so we only load it in the browser and render a placeholder on the\n// server for the hydration runtime to mount.\nexport const Scroll = (props) => {\n const [CloverScroll, setCloverScroll] = useState(null);\n\n useEffect(() => {\n let mounted = true;\n const canUseDom =\n typeof window !== \"undefined\" && typeof document !== \"undefined\";\n if (canUseDom) {\n import(\"@samvera/clover-iiif/scroll\")\n .then((mod) => {\n if (!mounted) return;\n const Comp = mod && (mod.default || mod.Scroll || mod);\n setCloverScroll(() => Comp);\n })\n .catch(() => {\n // Silently ignore load errors during SSR or when Clover is unavailable.\n });\n }\n return () => {\n mounted = false;\n };\n }, []);\n\n if (!CloverScroll) {\n // SSR placeholder for client hydration; props provided as JSON\n let json = \"{}\";\n try {\n json = JSON.stringify(props || {});\n } catch (_) {\n json = \"{}\";\n }\n return (\n <div data-canopy-scroll=\"1\" className=\"not-prose\">\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{ __html: json }}\n />\n </div>\n );\n }\n\n return <CloverScroll {...props} />;\n};\n", "import React, {useEffect, useState} from \"react\";\n\n// SSR-safe wrapper around Clover's image component. The module relies on the DOM\n// during import, so we lazy-load it in the browser and render a placeholder on the\n// server for the hydration runtime.\nexport const Image = (props = {}) => {\n const [CloverImage, setCloverImage] = useState(null);\n const baseClass = \"canopy-iiif-image\";\n const {\n height = `600px`,\n backgroundColor = `var(--color-gray-200)`,\n caption,\n className: userClassName,\n } = props || {};\n const rootClassName = [userClassName, baseClass].filter(Boolean).join(\" \");\n\n useEffect(() => {\n let mounted = true;\n const canUseDom =\n typeof window !== \"undefined\" && typeof document !== \"undefined\";\n if (canUseDom) {\n import(\"@samvera/clover-iiif/image\")\n .then((mod) => {\n if (!mounted) return;\n const Comp = mod && (mod.default || mod.Image || mod);\n setCloverImage(() => Comp);\n })\n .catch(() => {\n // Suppress errors during SSR or when the Clover bundle is unavailable.\n });\n }\n return () => {\n mounted = false;\n };\n }, []);\n\n if (!CloverImage) {\n let json = \"{}\";\n try {\n json = JSON.stringify(props || {});\n } catch (_) {\n json = \"{}\";\n }\n\n return (\n <figure className={rootClassName}>\n <div\n className={`${baseClass}__placeholder`}\n data-canopy-image=\"1\"\n style={{\n \"--canopy-iiif-image-height\": height,\n \"--canopy-iiif-image-bg\": backgroundColor,\n }}\n >\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{__html: json}}\n />\n </div>\n {caption && (\n <figcaption className={`${baseClass}__caption`}>\n {caption}\n </figcaption>\n )}\n </figure>\n );\n }\n\n return <CloverImage {...props} className={rootClassName} />;\n};\n", "import React from \"react\";\n\n// SSR-safe placeholder for RelatedItems. Hydrated by canopy-related-items.js + canopy-slider.js\nexport default function MdxRelatedItems(props) {\n let json = \"{}\";\n try {\n json = JSON.stringify(props || {});\n } catch (_) {\n json = \"{}\";\n }\n return (\n <div data-canopy-related-items=\"1\">\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{__html: json}}\n />\n </div>\n );\n}\n", "import React from 'react';\n\nexport default function MdxSearchResults(props) {\n let json = '{}';\n try { json = JSON.stringify(props || {}); } catch (_) { json = '{}'; }\n return (\n <div data-canopy-search-results=\"1\">\n <script type=\"application/json\" dangerouslySetInnerHTML={{ __html: json }} />\n </div>\n );\n}\n\n", "import React from 'react';\n\nexport default function SearchSummary(props) {\n let json = '{}';\n try { json = JSON.stringify(props || {}); } catch (_) { json = '{}'; }\n return (\n <div data-canopy-search-summary=\"1\">\n <script type=\"application/json\" dangerouslySetInnerHTML={{ __html: json }} />\n </div>\n );\n}\n\n", "import React from 'react';\n\nexport default function MdxSearchTabs(props) {\n let json = '{}';\n try { json = JSON.stringify(props || {}); } catch (_) { json = '{}'; }\n return (\n <div data-canopy-search-tabs=\"1\">\n <script type=\"application/json\" dangerouslySetInnerHTML={{ __html: json }} />\n </div>\n );\n}\n\n", "import Grid, { GridItem } from \"../layout/Grid.jsx\";\nimport ArticleCard from \"../layout/ArticleCard.jsx\";\nimport Card from \"../layout/Card.jsx\";\nimport React from \"react\";\n\nfunction DefaultArticleTemplate({ record, query }) {\n if (!record) return null;\n const metadata = Array.isArray(record.metadata) ? record.metadata : [];\n return (\n <ArticleCard\n href={record.href}\n title={record.title || record.href || 'Untitled'}\n annotation={record.annotation}\n summary={record.summary || record.summaryValue || ''}\n summaryMarkdown={record.summaryMarkdown || record.summary || record.summaryValue || ''}\n metadata={metadata}\n query={query}\n recordType={record.type}\n />\n );\n}\n\nfunction DefaultFigureTemplate({ record, thumbnailAspectRatio }) {\n if (!record) return null;\n const hasDims =\n Number.isFinite(Number(record.thumbnailWidth)) &&\n Number(record.thumbnailWidth) > 0 &&\n Number.isFinite(Number(record.thumbnailHeight)) &&\n Number(record.thumbnailHeight) > 0;\n const aspect = Number.isFinite(Number(thumbnailAspectRatio)) && Number(thumbnailAspectRatio) > 0\n ? Number(thumbnailAspectRatio)\n : hasDims\n ? Number(record.thumbnailWidth) / Number(record.thumbnailHeight)\n : undefined;\n return (\n <Card\n href={record.href}\n title={record.title || record.href}\n src={record.type === 'work' ? record.thumbnail : undefined}\n imgWidth={record.thumbnailWidth}\n imgHeight={record.thumbnailHeight}\n aspectRatio={aspect}\n />\n );\n}\n\nexport default function SearchResults({\n results = [],\n type = \"all\",\n layout = \"grid\",\n query = \"\",\n templates = {},\n variant = \"auto\",\n}) {\n if (!results.length) {\n return (\n <div className=\"text-slate-600\">\n <em>No results</em>\n </div>\n );\n }\n\n const normalizedType = String(type || 'all').toLowerCase();\n const normalizedVariant =\n variant === 'figure' || variant === 'article' ? variant : 'auto';\n const isAnnotationView = normalizedType === \"annotation\";\n const FigureTemplate = templates && templates.figure ? templates.figure : DefaultFigureTemplate;\n const ArticleTemplate = templates && templates.article ? templates.article : DefaultArticleTemplate;\n\n if (isAnnotationView) {\n return (\n <div id=\"search-results\" className=\"space-y-4\">\n {results.map((r, i) => {\n if (!r) return null;\n return (\n <ArticleTemplate\n key={r.id || i}\n record={r}\n query={query}\n layout={layout}\n />\n );\n })}\n </div>\n );\n }\n\n const isWorkRecord = (record) => String(record && record.type).toLowerCase() === 'work';\n\n const shouldRenderAsArticle = (record) => {\n if (normalizedVariant === 'article') return true;\n if (normalizedVariant === 'figure') return false;\n return !isWorkRecord(record) || normalizedType !== 'work';\n };\n\n if (layout === \"list\") {\n return (\n <div id=\"search-results\" className=\"space-y-6\">\n {results.map((r, i) => {\n if (shouldRenderAsArticle(r)) {\n return (\n <div key={i} className={`search-result ${r && r.type}`}>\n <ArticleTemplate record={r} query={query} layout={layout} />\n </div>\n );\n }\n const hasDims =\n Number.isFinite(Number(r.thumbnailWidth)) &&\n Number(r.thumbnailWidth) > 0 &&\n Number.isFinite(Number(r.thumbnailHeight)) &&\n Number(r.thumbnailHeight) > 0;\n const aspect = hasDims\n ? Number(r.thumbnailWidth) / Number(r.thumbnailHeight)\n : undefined;\n return (\n <div\n key={i}\n className={`search-result ${r.type}`}\n data-thumbnail-aspect-ratio={aspect}\n >\n <FigureTemplate\n record={r}\n query={query}\n layout={layout}\n thumbnailAspectRatio={aspect}\n />\n </div>\n );\n })}\n </div>\n );\n }\n\n // Default: grid (masonry)\n return (\n <div id=\"search-results\">\n <Grid>\n {results.map((r, i) => {\n if (shouldRenderAsArticle(r)) {\n return (\n <GridItem key={i} className={`search-result ${r && r.type}`}>\n <ArticleTemplate record={r} query={query} layout={layout} />\n </GridItem>\n );\n }\n const hasDims =\n Number.isFinite(Number(r.thumbnailWidth)) &&\n Number(r.thumbnailWidth) > 0 &&\n Number.isFinite(Number(r.thumbnailHeight)) &&\n Number(r.thumbnailHeight) > 0;\n const aspect = hasDims\n ? Number(r.thumbnailWidth) / Number(r.thumbnailHeight)\n : undefined;\n return (\n <GridItem\n key={i}\n className={`search-result ${r.type}`}\n data-thumbnail-aspect-ratio={aspect}\n >\n <FigureTemplate\n record={r}\n query={query}\n layout={layout}\n thumbnailAspectRatio={aspect}\n />\n </GridItem>\n );\n })}\n </Grid>\n </div>\n );\n}\n", "import React, {useRef, useState, useEffect} from \"react\";\n\nexport default function SearchTabs({\n type = \"all\",\n onTypeChange,\n types = [],\n counts = {},\n onOpenFilters,\n activeFilterCount = 0,\n filtersLabel = \"Filters\",\n filtersOpen = false,\n}) {\n const orderedTypes = Array.isArray(types) ? types : [];\n const toLabel = (t) =>\n t && t.length ? t.charAt(0).toUpperCase() + t.slice(1) : \"\";\n\n const hasFilters = typeof onOpenFilters === \"function\";\n const filterBadge = activeFilterCount > 0 ? ` (${activeFilterCount})` : \"\";\n\n // --- highlight state (ported from RadioGroup idea) ---\n const [itemBoundingBox, setItemBoundingBox] = useState(null);\n const [wrapperBoundingBox, setWrapperBoundingBox] = useState(null);\n const [highlightedTab, setHighlightedTab] = useState(null);\n const [isHoveredFromNull, setIsHoveredFromNull] = useState(true);\n\n const wrapperRef = useRef(null);\n const highlightRef = useRef(null);\n\n const repositionHighlight = (e, tabKey) => {\n if (!tabKey || !wrapperRef.current) return;\n\n // use currentTarget so we get the <button>, not the inner text node\n const item = e.currentTarget;\n setItemBoundingBox(item.getBoundingClientRect());\n setWrapperBoundingBox(wrapperRef.current.getBoundingClientRect());\n setIsHoveredFromNull(!highlightedTab);\n setHighlightedTab(tabKey);\n };\n\n const resetHighlight = () => {\n setHighlightedTab(null);\n };\n\n // Optional: snap highlight to the active tab when `type` changes\n useEffect(() => {\n if (!wrapperRef.current) return;\n const activeButton = wrapperRef.current.querySelector(\n `button[data-tab-value=\"${type}\"]`\n );\n if (!activeButton) return;\n\n const itemBox = activeButton.getBoundingClientRect();\n const wrapperBox = wrapperRef.current.getBoundingClientRect();\n\n setItemBoundingBox(itemBox);\n setWrapperBoundingBox(wrapperBox);\n setIsHoveredFromNull(true);\n setHighlightedTab(type);\n }, [type]);\n\n let highlightStyles = {};\n if (itemBoundingBox && wrapperBoundingBox) {\n highlightStyles = {\n opacity: highlightedTab ? 1 : 0,\n transform: `translateX(${itemBoundingBox.left - wrapperBoundingBox.left}px)`,\n transitionDuration: isHoveredFromNull ? \"0ms\" : \"200ms\",\n width: `${itemBoundingBox.width}px`,\n };\n }\n\n return (\n <div className=\"canopy-search-tabs-wrapper\">\n <div\n role=\"tablist\"\n aria-label=\"Search types\"\n className=\"canopy-search-tabs\"\n ref={wrapperRef}\n onMouseLeave={resetHighlight}\n >\n {/* moving highlight */}\n <div\n ref={highlightRef}\n className=\"canopy-search-tabs__highlight\"\n style={highlightStyles}\n />\n\n {orderedTypes.map((t) => {\n const active = String(type).toLowerCase() === String(t).toLowerCase();\n const cRaw =\n counts && Object.prototype.hasOwnProperty.call(counts, t)\n ? counts[t]\n : undefined;\n const c = Number.isFinite(Number(cRaw)) ? Number(cRaw) : 0;\n return (\n <button\n key={t}\n role=\"tab\"\n aria-selected={active}\n type=\"button\"\n data-tab-value={t}\n onClick={() => onTypeChange && onTypeChange(t)}\n onMouseOver={(e) => repositionHighlight(e, t)}\n className={`canopy-search-tab ${active ? \"is-active\" : \"\"}`}\n >\n {toLabel(t)} ({c})\n </button>\n );\n })}\n </div>\n\n {hasFilters ? (\n <button\n type=\"button\"\n onClick={() => onOpenFilters && onOpenFilters()}\n aria-expanded={filtersOpen ? \"true\" : \"false\"}\n className=\"inline-flex items-center gap-2 rounded-md border border-slate-200 bg-white px-3 py-1.5 text-sm font-medium text-slate-700 shadow-sm transition hover:border-brand-200 hover:bg-brand-50 hover:text-brand-700\"\n >\n <span>\n {filtersLabel}\n {filterBadge}\n </span>\n </button>\n ) : null}\n </div>\n );\n}\n", "import React from \"react\";\nimport CanopyModal from \"../layout/CanopyModal.jsx\";\n\nfunction toArray(input) {\n if (!input) return [];\n if (Array.isArray(input)) return input;\n return [input];\n}\n\nfunction normalizeSelected(selected = {}) {\n const map = new Map();\n if (selected && typeof selected === \"object\") {\n Object.keys(selected).forEach((key) => {\n const vals = new Set(toArray(selected[key]).map((v) => String(v)));\n if (vals.size) map.set(String(key), vals);\n });\n }\n return map;\n}\n\nfunction facetMatches(values = [], query) {\n const q = String(query || \"\")\n .trim()\n .toLowerCase();\n if (!q) return values;\n const starts = [];\n const contains = [];\n values.forEach((entry) => {\n if (!entry || !entry.value) return;\n const value = String(entry.value);\n const slug = String(entry.slug || entry.value || \"\");\n const match = value.toLowerCase();\n if (match.startsWith(q))\n starts.push({value, slug, doc_count: entry.doc_count});\n else if (match.includes(q))\n contains.push({value, slug, doc_count: entry.doc_count});\n });\n return [...starts, ...contains].slice(0, 10);\n}\n\nfunction FacetSection({facet, selected, onToggle}) {\n if (!facet || !facet.label || !Array.isArray(facet.values)) return null;\n const {label, slug, values} = facet;\n const selectedValues = selected.get(String(slug)) || new Set();\n const checkboxId = (valueSlug) => `filter-${slug}-${valueSlug}`;\n const hasSelection = selectedValues.size > 0;\n const [quickQuery, setQuickQuery] = React.useState(\"\");\n const hasQuery = quickQuery.trim().length > 0;\n const filteredValues = React.useMemo(\n () => facetMatches(values, quickQuery),\n [values, quickQuery]\n );\n\n return (\n <details\n className=\"canopy-search-filters__facet\"\n open={hasSelection}\n >\n <summary className=\"canopy-search-filters__facet-summary\">\n <span>{label}</span>\n <span className=\"canopy-search-filters__facet-count\">\n {values.length}\n </span>\n </summary>\n <div className=\"canopy-search-filters__facet-content\">\n <div className=\"canopy-search-filters__quick\">\n <input\n type=\"search\"\n value={quickQuery}\n onChange={(event) => setQuickQuery(event.target.value)}\n placeholder=\"Search values\"\n className=\"canopy-search-filters__quick-input\"\n aria-label={`Filter ${label} values`}\n />\n {quickQuery ? (\n <button\n type=\"button\"\n onClick={() => setQuickQuery(\"\")}\n className=\"canopy-search-filters__quick-clear\"\n >\n Clear\n </button>\n ) : null}\n </div>\n {hasQuery && !filteredValues.length ? (\n <p className=\"canopy-search-filters__facet-notice\">No matches found.</p>\n ) : null}\n <ul className=\"canopy-search-filters__facet-list\">\n {filteredValues.map((entry) => {\n const valueSlug = String(entry.slug || entry.value || \"\");\n const isChecked = selectedValues.has(valueSlug);\n const inputId = checkboxId(valueSlug);\n return (\n <li key={valueSlug} className=\"canopy-search-filters__facet-item\">\n <input\n id={inputId}\n type=\"checkbox\"\n className=\"canopy-search-filters__facet-checkbox\"\n checked={isChecked}\n onChange={(event) => {\n const nextChecked = !!event.target.checked;\n if (onToggle) onToggle(slug, valueSlug, nextChecked);\n }}\n />\n <label\n htmlFor={inputId}\n className=\"canopy-search-filters__facet-label\"\n >\n <span>\n {entry.value}{\" \"}\n {Number.isFinite(entry.doc_count) ? (\n <span className=\"canopy-search-filters__facet-count\">\n ({entry.doc_count})\n </span>\n ) : null}\n </span>\n </label>\n </li>\n );\n })}\n {!filteredValues.length && !hasQuery ? (\n <li className=\"canopy-search-filters__facet-empty\">No values available.</li>\n ) : null}\n </ul>\n </div>\n </details>\n );\n}\n\nexport default function SearchFiltersDialog(props = {}) {\n const {\n open = false,\n onOpenChange,\n facets = [],\n selected = {},\n onToggle,\n onClear,\n title,\n subtitle = \"Refine results by metadata\",\n brandLabel = \"Canopy IIIF\",\n brandHref = \"/\",\n logo: SiteLogo,\n } = props;\n\n const selectedMap = normalizeSelected(selected);\n const activeCount = Array.from(selectedMap.values()).reduce(\n (total, set) => total + set.size,\n 0\n );\n\n React.useEffect(() => {\n if (!open) return undefined;\n if (typeof document === \"undefined\") return undefined;\n const body = document.body;\n const root = document.documentElement;\n const prevBody = body ? body.style.overflow : \"\";\n const prevRoot = root ? root.style.overflow : \"\";\n if (body) body.style.overflow = \"hidden\";\n if (root) root.style.overflow = \"hidden\";\n return () => {\n if (body) body.style.overflow = prevBody;\n if (root) root.style.overflow = prevRoot;\n };\n }, [open]);\n\n if (!open) return null;\n\n const brandId = \"canopy-modal-filters-label\";\n const subtitleText = subtitle != null ? subtitle : title;\n\n return (\n <CanopyModal\n id=\"canopy-modal-filters\"\n variant=\"filters\"\n open\n labelledBy={brandId}\n label={brandLabel}\n logo={SiteLogo}\n href={brandHref}\n closeLabel=\"Close filters\"\n onClose={() => onOpenChange && onOpenChange(false)}\n onBackgroundClick={() => onOpenChange && onOpenChange(false)}\n bodyClassName=\"canopy-modal__body--filters\"\n >\n {subtitleText ? (\n <p className=\"canopy-search-filters__subtitle\">{subtitleText}</p>\n ) : null}\n <div className=\"canopy-search-filters__body\">\n {Array.isArray(facets) && facets.length ? (\n <div className=\"canopy-search-filters__facets\">\n {facets.map((facet) => (\n <FacetSection\n key={facet.slug || facet.label}\n facet={facet}\n selected={selectedMap}\n onToggle={onToggle}\n />\n ))}\n </div>\n ) : (\n <p className=\"canopy-search-filters__empty\">\n No filters are available for this collection.\n </p>\n )}\n </div>\n <footer className=\"canopy-search-filters__footer\">\n <div>\n {activeCount\n ? `${activeCount} filter${activeCount === 1 ? '' : 's'} applied`\n : 'No filters applied'}\n </div>\n <div className=\"canopy-search-filters__footer-actions\">\n <button\n type=\"button\"\n onClick={() => {\n if (onClear) onClear();\n }}\n disabled={!activeCount}\n className=\"canopy-search-filters__button canopy-search-filters__button--secondary\"\n >\n Clear all\n </button>\n <button\n type=\"button\"\n onClick={() => onOpenChange && onOpenChange(false)}\n className=\"canopy-search-filters__button canopy-search-filters__button--primary\"\n >\n Done\n </button>\n </div>\n </footer>\n </CanopyModal>\n );\n}\n", "import React from 'react';\nimport SearchPanelForm, { resolveSearchPath } from '../search/SearchPanelForm.jsx';\nimport SearchPanelTeaserResults from '../search/SearchPanelTeaserResults.jsx';\n\n// SSR-safe placeholder for the search form modal, composed from SearchPanel parts.\n// This ensures a single JSX source of truth for form/panel markup.\nexport default function MdxSearchFormModal(props = {}) {\n const {\n placeholder = 'Search\u2026',\n hotkey = 'mod+k',\n maxResults = 8,\n groupOrder = ['work', 'page'],\n button = true, // kept for backward compat; ignored by teaser form\n buttonLabel = 'Search',\n label,\n searchPath = '/search',\n } = props || {};\n\n const text = typeof label === 'string' && label.trim() ? label.trim() : buttonLabel;\n const resolvedSearchPath = resolveSearchPath(searchPath);\n const data = { placeholder, hotkey, maxResults, groupOrder, label: text, searchPath: resolvedSearchPath };\n return (\n <div data-canopy-search-form className=\"flex-1 min-w-0\">\n <div className=\"relative w-full\">\n <SearchPanelForm placeholder={placeholder} buttonLabel={buttonLabel} label={label} searchPath={resolvedSearchPath} />\n <SearchPanelTeaserResults />\n </div>\n <script type=\"application/json\" dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }} />\n </div>\n );\n}\n", "import React from 'react';\n\nexport default function MarkdownTable({ className = '', ...rest }) {\n const merged = ['markdown-table', className].filter(Boolean).join(' ');\n return (\n <div className=\"markdown-table__frame\">\n <table className={merged} {...rest} />\n </div>\n );\n}\n", "import React from \"react\";\n\nexport function CanopyDiagram() {\n return (\n <div className=\"canopy-diagram\">\n <section className=\"canopy-diagram__section canopy-diagram__section--collections\">\n <h3>IIIF Collection(s)</h3>\n <span className=\"canopy-diagram__section-summary\">\n Source collections contribute 105 total manifests that Canopy\n retrieves as-is via IIIF endpoints.\n </span>\n <div className=\"canopy-diagram__grid\">\n <article>\n <h4>Collection A</h4>\n <ul>\n <li>70 Manifests</li>\n <li>IIIF Images + A/V</li>\n <li>Textual Annotations</li>\n </ul>\n </article>\n <article>\n <h4>Collection B</h4>\n <ul>\n <li>35 Manifests</li>\n <li>IIIF Images + A/V</li>\n <li>Textual Annotations</li>\n </ul>\n </article>\n </div>\n </section>\n\n <div className=\"canopy-diagram__arrow\" aria-hidden=\"true\">\n <span className=\"canopy-diagram__arrow-line\" />\n <span className=\"canopy-diagram__arrow-head\" />\n </div>\n\n <section className=\"canopy-diagram__section canopy-diagram__section--build\">\n <h3>Canopy Build Process</h3>\n <span className=\"canopy-diagram__section-summary\">\n Canopy syncs manifests, page content, and annotations before bundling\n the site.\n </span>\n <div className=\"canopy-diagram__grid\">\n <article>\n <h4>Automated content</h4>\n <ul>\n <li>105 manifests \u2192 105 work pages</li>\n <li>One page per manifest</li>\n <li>Customize page layout</li>\n </ul>\n </article>\n <article>\n <h4>Contextual content</h4>\n <ul>\n <li>Markdown &amp; MDX pages</li>\n <li>Author narratives &amp; tours</li>\n <li>Reference manifests inline</li>\n </ul>\n </article>\n <article>\n <h4>Search index</h4>\n <ul>\n <li>Combines works + pages</li>\n <li>Customize result layout</li>\n <li>Optional annotations</li>\n </ul>\n </article>\n </div>\n </section>\n\n <div className=\"canopy-diagram__arrow\" aria-hidden=\"true\">\n <span className=\"canopy-diagram__arrow-line\" />\n <span className=\"canopy-diagram__arrow-head\" />\n </div>\n\n <section className=\"canopy-diagram__section canopy-diagram__section--output\">\n <h3>Static Digital Project</h3>\n <span className=\"canopy-diagram__section-summary\">\n The output is a lightweight bundle of HTML, CSS, JS, and JSON assets\n that can deploy anywhere.\n </span>\n <div className=\"canopy-diagram__grid\">\n <article>\n <h4>Work pages</h4>\n <ul>\n <li>105 generated HTML pages</li>\n <li>Each links back to source manifests</li>\n <li>Styled with Canopy components</li>\n </ul>\n </article>\n <article>\n <h4>Custom pages</h4>\n <ul>\n <li>Markdown &amp; MDX-authored content</li>\n <li>Reusable layouts for narratives</li>\n <li>Embed IIIF media &amp; interstitials</li>\n </ul>\n </article>\n <article>\n <h4>Search bundle</h4>\n <ul>\n <li>Static FlexSearch index</li>\n <li>Works + pages share records</li>\n <li>Optional annotation dataset</li>\n </ul>\n </article>\n </div>\n </section>\n </div>\n );\n}\n", "import React from \"react\";\nimport {\n createLocale,\n normalizeRange,\n clampProgress,\n formatDateLabel,\n} from \"./date-utils.js\";\nimport TeaserCard from \"../../layout/TeaserCard.jsx\";\n\nconst DAY_MS = 24 * 60 * 60 * 1000;\nconst DEFAULT_TRACK_HEIGHT = 640;\nconst MIN_HEIGHT_PER_POINT = 220;\n\nfunction getThresholdMs(threshold, granularity) {\n const value = Number(threshold);\n if (!Number.isFinite(value) || value <= 0) return 0;\n if (granularity === \"day\") return value * DAY_MS;\n if (granularity === \"month\") return value * 30 * DAY_MS;\n return value * 365 * DAY_MS;\n}\n\nfunction buildGroupedEntries(points, thresholdMs, options) {\n if (!Array.isArray(points) || !points.length) return [];\n if (!thresholdMs) return points.map((point) => ({type: \"point\", point}));\n\n const entries = [];\n let currentGroup = null;\n let groupCounter = 0;\n\n function flush() {\n if (!currentGroup) return;\n if (currentGroup.points.length > 1) {\n const firstPoint = currentGroup.points[0];\n entries.push({\n type: \"group\",\n id: `canopy-timeline-group-${groupCounter}-${currentGroup.start}`,\n points: currentGroup.points,\n progress: firstPoint.progress,\n side: firstPoint.side,\n label: formatGroupLabel(currentGroup.start, currentGroup.end, options),\n count: currentGroup.points.length,\n });\n groupCounter += 1;\n } else {\n entries.push({type: \"point\", point: currentGroup.points[0]});\n }\n currentGroup = null;\n }\n\n points.forEach((point) => {\n const timestamp = point && point.meta ? point.meta.timestamp : null;\n if (!Number.isFinite(timestamp)) {\n flush();\n if (point) entries.push({type: \"point\", point});\n return;\n }\n if (!currentGroup) {\n currentGroup = {\n points: [point],\n start: timestamp,\n end: timestamp,\n last: timestamp,\n };\n return;\n }\n const diff = Math.abs(timestamp - currentGroup.last);\n if (diff <= thresholdMs) {\n currentGroup.points.push(point);\n currentGroup.last = timestamp;\n if (timestamp < currentGroup.start) currentGroup.start = timestamp;\n if (timestamp > currentGroup.end) currentGroup.end = timestamp;\n } else {\n flush();\n currentGroup = {\n points: [point],\n start: timestamp,\n end: timestamp,\n last: timestamp,\n };\n }\n });\n\n flush();\n return entries;\n}\n\nfunction formatGroupLabel(startTs, endTs, options) {\n if (!Number.isFinite(startTs) || !Number.isFinite(endTs)) return \"\";\n const startLabel = formatDateLabel(new Date(startTs), options);\n const endLabel = formatDateLabel(new Date(endTs), options);\n if (!startLabel || !endLabel) return \"\";\n return startLabel === endLabel ? startLabel : `${startLabel} \u2013 ${endLabel}`;\n}\n\nfunction deriveRangeOverrides(points, range) {\n const timestamps = points\n .map((point) => (point && point.meta ? point.meta.timestamp : null))\n .filter((timestamp) => Number.isFinite(timestamp));\n if (!timestamps.length) return range || {};\n const earliest = Math.min(...timestamps);\n const latest = Math.max(...timestamps);\n return {\n ...range,\n start: range && range.start ? range.start : new Date(earliest),\n end: range && range.end ? range.end : new Date(latest),\n };\n}\n\nfunction getActivePointId(points) {\n const highlighted = points.find((point) => point && point.highlight);\n if (highlighted) return highlighted.id;\n return points.length ? points[0].id : null;\n}\n\nfunction formatRangeLabel(rangeInfo) {\n if (!rangeInfo) return \"\";\n const startLabel = formatDateLabel(rangeInfo.startDate, {\n granularity: rangeInfo.granularity,\n locale: rangeInfo.locale,\n });\n const endLabel = formatDateLabel(rangeInfo.endDate, {\n granularity: rangeInfo.granularity,\n locale: rangeInfo.locale,\n });\n if (!startLabel || !endLabel) return \"\";\n if (startLabel === endLabel) return startLabel;\n return `${startLabel} \u2013 ${endLabel}`;\n}\n\nfunction sanitizePoints(points) {\n if (!Array.isArray(points)) return [];\n return points\n .map((point, index) => {\n if (!point) return null;\n const meta = point.meta || {};\n const timestamp = Number(meta.timestamp);\n const manifests = Array.isArray(point.manifests)\n ? point.manifests\n .map((manifest) => (manifest ? {...manifest} : null))\n .filter(Boolean)\n : [];\n const resources = Array.isArray(point.resources)\n ? point.resources.filter(Boolean)\n : [];\n return {\n ...point,\n id: point.id || `timeline-point-${index}`,\n title: point.title || point.label || `Point ${index + 1}`,\n summary: point.summary || point.description || \"\",\n detailsHtml: point.detailsHtml || \"\",\n highlight: !!point.highlight,\n side:\n point.side === \"left\" || point.side === \"right\" ? point.side : null,\n meta: {\n label: meta.label || \"\",\n timestamp: Number.isFinite(timestamp) ? timestamp : null,\n },\n manifests,\n resources,\n };\n })\n .filter(Boolean);\n}\n\nfunction resolveTrackHeight(height, pointCount) {\n const minimumPx = Math.max(\n DEFAULT_TRACK_HEIGHT,\n pointCount * MIN_HEIGHT_PER_POINT\n );\n const fallback = `${minimumPx}px`;\n if (height == null) return fallback;\n if (typeof height === \"number\") {\n const numeric = Number(height);\n if (Number.isFinite(numeric)) {\n return `${Math.max(numeric, pointCount * MIN_HEIGHT_PER_POINT)}px`;\n }\n return fallback;\n }\n if (typeof height === \"string\") {\n const trimmed = height.trim();\n if (!trimmed) return fallback;\n const numeric = Number(trimmed);\n if (Number.isFinite(numeric)) {\n return `${Math.max(numeric, pointCount * MIN_HEIGHT_PER_POINT)}px`;\n }\n return trimmed;\n }\n return fallback;\n}\n\nfunction TimelineConnector({side, isActive, highlight}) {\n const connectorClasses = [\n \"canopy-timeline__connector\",\n side === \"left\"\n ? \"canopy-timeline__connector--left\"\n : \"canopy-timeline__connector--right\",\n ]\n .filter(Boolean)\n .join(\" \");\n const dotClasses = [\n \"canopy-timeline__connector-dot\",\n highlight || isActive ? \"is-active\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <span className={connectorClasses} aria-hidden=\"true\">\n {side === \"left\" ? (\n <>\n <span className=\"canopy-timeline__connector-line\" />\n <span className={dotClasses} />\n </>\n ) : (\n <>\n <span className={dotClasses} />\n <span className=\"canopy-timeline__connector-line\" />\n </>\n )}\n </span>\n );\n}\n\nfunction renderResourceSection(point) {\n if (!point) return null;\n const manifestCards = Array.isArray(point.manifests)\n ? point.manifests.filter(Boolean)\n : [];\n const legacyResources = Array.isArray(point.resources)\n ? point.resources.filter(Boolean)\n : [];\n if (!manifestCards.length && !legacyResources.length) return null;\n return (\n <div className=\"canopy-timeline__resources\">\n <div className=\"canopy-timeline__resources-list\">\n {manifestCards.map((manifest) => (\n <div key={manifest.id || manifest.href}>\n <TeaserCard\n href={manifest.href}\n title={manifest.title || manifest.href}\n summary={manifest.summary}\n metadata={\n Array.isArray(manifest.metadata) && manifest.metadata.length\n ? manifest.metadata\n : manifest.summary\n ? [manifest.summary]\n : []\n }\n thumbnail={manifest.thumbnail}\n type={manifest.type || \"work\"}\n />\n </div>\n ))}\n {legacyResources.map((resource, idx) => (\n <div key={resource.id || resource.href || `legacy-${idx}`}>\n <TeaserCard\n href={resource.href}\n title={resource.label || resource.title || resource.href}\n summary={resource.summary}\n thumbnail={resource.thumbnail}\n type={resource.type || \"resource\"}\n />\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nexport default function Timeline({\n className = \"\",\n title,\n description,\n range: rangeProp,\n locale: localeProp = \"en-US\",\n height = DEFAULT_TRACK_HEIGHT,\n threshold: thresholdProp = null,\n steps = null,\n points: pointsProp,\n __canopyTimeline: payload = null,\n ...rest\n}) {\n const payloadPoints =\n payload && Array.isArray(payload.points) ? payload.points : null;\n const rawPoints = React.useMemo(() => {\n if (Array.isArray(pointsProp) && pointsProp.length) return pointsProp;\n if (payloadPoints && payloadPoints.length) return payloadPoints;\n return [];\n }, [pointsProp, payloadPoints]);\n\n const sanitizedPoints = React.useMemo(\n () => sanitizePoints(rawPoints),\n [rawPoints]\n );\n\n const localeValue = payload && payload.locale ? payload.locale : localeProp;\n const baseLocale = React.useMemo(\n () => createLocale(localeValue),\n [localeValue]\n );\n\n const rangeInput = payload && payload.range ? payload.range : rangeProp || {};\n const rangeOverrides = React.useMemo(\n () => deriveRangeOverrides(sanitizedPoints, rangeInput),\n [sanitizedPoints, rangeInput]\n );\n const effectiveRange = React.useMemo(\n () =>\n normalizeRange({\n ...rangeOverrides,\n locale: baseLocale,\n }),\n [rangeOverrides, baseLocale]\n );\n\n const spanStart = effectiveRange.startDate.getTime();\n const span = effectiveRange.span;\n\n const pointsWithPosition = React.useMemo(() => {\n if (!sanitizedPoints.length) return [];\n return sanitizedPoints.map((point, index) => {\n const timestamp = point.meta.timestamp;\n const fallbackProgress =\n sanitizedPoints.length > 1 ? index / (sanitizedPoints.length - 1) : 0;\n const progress = Number.isFinite(timestamp)\n ? clampProgress((timestamp - spanStart) / span)\n : fallbackProgress;\n const side = point.side || (index % 2 === 0 ? \"left\" : \"right\");\n return {\n ...point,\n progress,\n side,\n };\n });\n }, [sanitizedPoints, spanStart, span]);\n\n const [activeId, setActiveId] = React.useState(() =>\n getActivePointId(pointsWithPosition)\n );\n\n React.useEffect(() => {\n setActiveId(getActivePointId(pointsWithPosition));\n }, [pointsWithPosition]);\n\n const thresholdValue =\n typeof thresholdProp === \"number\"\n ? thresholdProp\n : payload && payload.threshold != null\n ? payload.threshold\n : null;\n const stepsValue =\n typeof steps === \"number\"\n ? Number(steps)\n : payload && typeof payload.steps === \"number\"\n ? Number(payload.steps)\n : null;\n\n const thresholdMs = React.useMemo(\n () => getThresholdMs(thresholdValue, effectiveRange.granularity),\n [thresholdValue, effectiveRange.granularity]\n );\n\n const groupedEntries = React.useMemo(\n () =>\n buildGroupedEntries(pointsWithPosition, thresholdMs, {\n granularity: effectiveRange.granularity,\n locale: baseLocale,\n }),\n [pointsWithPosition, thresholdMs, effectiveRange.granularity, baseLocale]\n );\n\n const [expandedGroupIds, setExpandedGroupIds] = React.useState(\n () => new Set()\n );\n\n React.useEffect(() => {\n setExpandedGroupIds((prev) => {\n if (!prev || prev.size === 0) return prev;\n const validIds = new Set(\n groupedEntries\n .filter((entry) => entry.type === \"group\")\n .map((entry) => entry.id)\n );\n const next = new Set();\n let changed = false;\n prev.forEach((id) => {\n if (validIds.has(id)) next.add(id);\n else changed = true;\n });\n return changed ? next : prev;\n });\n }, [groupedEntries]);\n\n const toggleGroup = React.useCallback((groupId) => {\n setExpandedGroupIds((prev) => {\n const next = new Set(prev || []);\n if (next.has(groupId)) next.delete(groupId);\n else next.add(groupId);\n return next;\n });\n }, []);\n\n const trackHeight = resolveTrackHeight(height, pointsWithPosition.length);\n const containerClasses = [\"canopy-timeline\", className]\n .filter(Boolean)\n .join(\" \");\n const rangeLabel = formatRangeLabel(effectiveRange);\n\n function renderPointEntry(point) {\n if (!point) return null;\n const wrapperClasses = [\n \"canopy-timeline__point-wrapper\",\n point.side === \"left\"\n ? \"canopy-timeline__point-wrapper--left\"\n : \"canopy-timeline__point-wrapper--right\",\n ]\n .filter(Boolean)\n .join(\" \");\n const wrapperStyle = {top: `${point.progress * 100}%`};\n const cardClasses = [\n \"canopy-timeline__point\",\n point.id === activeId ? \"is-active\" : \"\",\n point.highlight ? \"is-highlighted\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n const connector = (\n <TimelineConnector\n side={point.side}\n isActive={point.id === activeId}\n highlight={point.highlight}\n />\n );\n\n const body = (\n <div className=\"canopy-timeline__point-body\">\n <span className=\"canopy-timeline__point-date\">{point.meta.label}</span>\n <span className=\"canopy-timeline__point-title\">{point.title}</span>\n {point.summary ? (\n <span className=\"canopy-timeline__point-summary\">\n {point.summary}\n </span>\n ) : null}\n </div>\n );\n const resourceSection = renderResourceSection(point);\n\n return (\n <div\n key={point.id}\n className={wrapperClasses}\n style={wrapperStyle}\n role=\"listitem\"\n >\n {point.side === \"left\" ? (\n <>\n <div className={cardClasses}>\n {body}\n {resourceSection}\n </div>\n {connector}\n </>\n ) : (\n <>\n {connector}\n <div className={cardClasses}>\n {body}\n {resourceSection}\n </div>\n </>\n )}\n </div>\n );\n }\n\n function renderGroupEntry(entry) {\n const wrapperClasses = [\n \"canopy-timeline__point-wrapper\",\n entry.side === \"left\"\n ? \"canopy-timeline__point-wrapper--left\"\n : \"canopy-timeline__point-wrapper--right\",\n ]\n .filter(Boolean)\n .join(\" \");\n const wrapperStyle = {top: `${entry.progress * 100}%`};\n const isExpanded = expandedGroupIds.has(entry.id);\n const hasActivePoint = entry.points.some((point) => point.id === activeId);\n const connector = (\n <TimelineConnector\n side={entry.side}\n isActive={hasActivePoint}\n highlight={hasActivePoint}\n />\n );\n const groupClasses = [\n \"canopy-timeline__group\",\n isExpanded ? \"is-expanded\" : \"\",\n hasActivePoint ? \"is-active\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n const countLabel = `${entry.count} event${entry.count > 1 ? \"s\" : \"\"}`;\n\n const header = (\n <div className=\"canopy-timeline__group-header\">\n <div className=\"canopy-timeline__group-summary\">\n <span className=\"canopy-timeline__point-date\">{entry.label}</span>\n <span className=\"canopy-timeline__group-count\">{countLabel}</span>\n </div>\n <button\n type=\"button\"\n className=\"canopy-timeline__group-toggle\"\n aria-expanded={isExpanded ? \"true\" : \"false\"}\n onClick={() => toggleGroup(entry.id)}\n >\n {isExpanded ? \"Hide details\" : \"Show details\"}\n </button>\n </div>\n );\n\n const groupPoints = isExpanded ? (\n <div className=\"canopy-timeline__group-points\">\n {entry.points.map((point) => (\n <button\n key={point.id}\n type=\"button\"\n className={[\n \"canopy-timeline__group-point\",\n point.id === activeId ? \"is-active\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n onClick={() => setActiveId(point.id)}\n >\n <span className=\"canopy-timeline__point-date\">\n {point.meta.label}\n </span>\n <span className=\"canopy-timeline__group-point-title\">\n {point.title}\n </span>\n </button>\n ))}\n </div>\n ) : null;\n\n const groupCard = (\n <div className={groupClasses}>\n {header}\n {groupPoints}\n </div>\n );\n\n return (\n <div\n key={entry.id}\n className={wrapperClasses}\n style={wrapperStyle}\n role=\"listitem\"\n >\n {entry.side === \"left\" ? (\n <>\n {groupCard}\n {connector}\n </>\n ) : (\n <>\n {connector}\n {groupCard}\n </>\n )}\n </div>\n );\n }\n\n return (\n <section className={containerClasses} {...rest}>\n {title ? <h2 className=\"canopy-timeline__title\">{title}</h2> : null}\n {description ? (\n <p className=\"canopy-timeline__description\">{description}</p>\n ) : null}\n {rangeLabel ? (\n <p className=\"canopy-timeline__range\" aria-live=\"polite\">\n {rangeLabel}\n </p>\n ) : null}\n <div className=\"canopy-timeline__body\">\n <div\n className=\"canopy-timeline__list\"\n role=\"list\"\n style={{minHeight: trackHeight}}\n >\n <div className=\"canopy-timeline__spine\" aria-hidden=\"true\" />\n {renderSteps(stepsValue, effectiveRange)}\n {groupedEntries.map((entry) => {\n if (entry.type === \"group\") return renderGroupEntry(entry);\n return renderPointEntry(entry.point);\n })}\n </div>\n </div>\n </section>\n );\n}\n\nfunction renderSteps(stepSize, range) {\n if (!Number.isFinite(stepSize) || stepSize <= 0 || !range) return null;\n const startYear = range.startDate.getUTCFullYear();\n const endYear = range.endDate.getUTCFullYear();\n const markers = [];\n if (startYear < endYear) {\n markers.push(\n <span\n key=\"timeline-step-start\"\n className=\"canopy-timeline__step canopy-timeline__step--start\"\n style={{top: \"0%\"}}\n aria-hidden=\"true\"\n >\n <span className=\"canopy-timeline__step-line\" />\n <span className=\"canopy-timeline__step-label\">{startYear}</span>\n </span>\n );\n markers.push(\n <span\n key=\"timeline-step-end\"\n className=\"canopy-timeline__step canopy-timeline__step--end\"\n style={{top: \"100%\"}}\n aria-hidden=\"true\"\n >\n <span className=\"canopy-timeline__step-line\" />\n <span className=\"canopy-timeline__step-label\">{endYear}</span>\n </span>\n );\n }\n const baseYear = Math.ceil(startYear / stepSize) * stepSize;\n for (let year = baseYear; year <= endYear; year += stepSize) {\n const timestamp = Date.UTC(year, 0, 1);\n const progress = (timestamp - range.startDate.getTime()) / range.span;\n if (progress <= 0 || progress >= 1) continue;\n markers.push(\n <span\n key={`timeline-step-${year}`}\n className=\"canopy-timeline__step\"\n style={{top: `calc(${progress * 100}% - 0.5px)`}}\n aria-hidden=\"true\"\n >\n <span className=\"canopy-timeline__step-line\" />\n <span className=\"canopy-timeline__step-label\">{year}</span>\n </span>\n );\n }\n return markers.length ? markers : null;\n}\n", "const FALLBACK_LOCALE = (() => {\n try {\n return new Intl.Locale(\"en-US\");\n } catch (_) {\n return \"en-US\";\n }\n})();\n\nexport function createLocale(localeValue) {\n if (!localeValue) return FALLBACK_LOCALE;\n if (typeof Intl !== \"undefined\" && localeValue instanceof Intl.Locale)\n return localeValue;\n try {\n return new Intl.Locale(localeValue);\n } catch (_) {\n return FALLBACK_LOCALE;\n }\n}\n\nfunction parseMonthIndex(name = \"\", locale = FALLBACK_LOCALE) {\n const localeId =\n typeof locale === \"string\" ? locale : locale && locale.baseName\n ? locale.baseName\n : \"en-US\";\n const normalized = String(name || \"\")\n .trim()\n .toLocaleLowerCase(localeId);\n if (!normalized) return 0;\n const months = [\n \"january\",\n \"february\",\n \"march\",\n \"april\",\n \"may\",\n \"june\",\n \"july\",\n \"august\",\n \"september\",\n \"october\",\n \"november\",\n \"december\",\n ];\n const idx = months.indexOf(normalized);\n return idx === -1 ? 0 : idx;\n}\n\nfunction parseStructuredInput(value) {\n if (!value || typeof value !== \"object\") return null;\n const {year, month, day} = value;\n if (!Number.isFinite(Number(year))) return null;\n const y = Number(year);\n const m = Number.isFinite(Number(month)) ? Number(month) - 1 : 0;\n const d = Number.isFinite(Number(day)) ? Number(day) : 1;\n return new Date(Date.UTC(y, Math.max(0, Math.min(11, m)), Math.max(1, Math.min(31, d))));\n}\n\nexport function createDateFromInput(value, {locale} = {}) {\n const loc = createLocale(locale);\n if (value instanceof Date) return new Date(value.getTime());\n if (Number.isFinite(Number(value))) {\n const year = Number(value);\n return new Date(Date.UTC(year, 0, 1));\n }\n if (value && typeof value === \"object\") {\n const structured = parseStructuredInput(value);\n if (structured) return structured;\n }\n const text = typeof value === \"string\" ? value.trim() : \"\";\n if (!text) return null;\n const isoYear = text.match(/^(\\d{4})$/);\n if (isoYear) {\n return new Date(Date.UTC(Number(isoYear[1]), 0, 1));\n }\n const isoYearMonth = text.match(/^(\\d{4})-(\\d{2})$/);\n if (isoYearMonth) {\n return new Date(\n Date.UTC(Number(isoYearMonth[1]), Number(isoYearMonth[2]) - 1, 1)\n );\n }\n const isoDate = text.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (isoDate) {\n return new Date(\n Date.UTC(\n Number(isoDate[1]),\n Number(isoDate[2]) - 1,\n Number(isoDate[3])\n )\n );\n }\n const monthDayYear = text.match(/^([A-Za-z]+)\\s+(\\d{1,2})(?:,)?\\s*(\\d{4})$/);\n if (monthDayYear) {\n const month = parseMonthIndex(monthDayYear[1], loc);\n const day = Number(monthDayYear[2]);\n const year = Number(monthDayYear[3]);\n return new Date(Date.UTC(year, month, day));\n }\n const monthYear = text.match(/^([A-Za-z]+)\\s+(\\d{4})$/);\n if (monthYear) {\n const month = parseMonthIndex(monthYear[1], loc);\n const year = Number(monthYear[2]);\n return new Date(Date.UTC(year, month, 1));\n }\n const fallback = new Date(text);\n if (!Number.isNaN(fallback.getTime())) return fallback;\n const alt = new Date(Date.parse(text));\n if (!Number.isNaN(alt.getTime())) return alt;\n return null;\n}\n\nexport function formatDateLabel(date, {granularity = \"day\", locale} = {}) {\n if (!(date instanceof Date) || Number.isNaN(date.getTime())) return \"\";\n const loc = createLocale(locale);\n const baseName = typeof loc === \"string\" ? loc : loc.baseName || \"en-US\";\n const options = {year: \"numeric\"};\n if (granularity === \"month\" || granularity === \"day\") {\n options.month = \"long\";\n }\n if (granularity === \"day\") {\n options.day = \"numeric\";\n }\n options.timeZone = \"UTC\";\n try {\n const formatter = new Intl.DateTimeFormat(baseName, options);\n return formatter.format(date);\n } catch (_) {\n return date.toISOString().slice(0, 10);\n }\n}\n\nexport function normalizeRange(range = {}) {\n const {start, end, granularity = \"year\", locale} = range || {};\n const loc = createLocale(locale);\n const startDate = createDateFromInput(start || new Date(), {locale: loc}) ||\n new Date(Date.UTC(0, 0, 1));\n let endDate = createDateFromInput(end, {locale: loc});\n if (!endDate) {\n const copy = new Date(startDate.getTime());\n copy.setUTCFullYear(copy.getUTCFullYear() + 1);\n endDate = copy;\n }\n if (endDate <= startDate) {\n const nextDay = new Date(startDate.getTime());\n nextDay.setUTCDate(nextDay.getUTCDate() + 1);\n endDate = nextDay;\n }\n const span = Math.max(1, endDate - startDate);\n return {\n startDate,\n endDate,\n span,\n granularity: granularity === \"month\" || granularity === \"day\" ? granularity : \"year\",\n locale: loc,\n };\n}\n\nexport function buildPointMetadata({value, granularity, locale}) {\n const date = createDateFromInput(value, {locale});\n return {\n date,\n label: formatDateLabel(date, {granularity, locale}),\n timestamp: date ? date.getTime() : null,\n };\n}\n\nexport function clampProgress(value) {\n if (!Number.isFinite(value)) return 0;\n if (value < 0) return 0;\n if (value > 1) return 1;\n return value;\n}\n", "export default function TimelinePoint() {\n return null;\n}\n\nTimelinePoint.displayName = \"TimelinePoint\";\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import React from \"react\";\n\nexport const HelloWorld = () => {\n return <div>Hello, World!</div>;\n};\n", "import React, { useEffect, useRef, useState } from \"react\";\n\nconst DEFAULT_CARD_ASPECT_RATIO = 4 / 3; // match ReferencedItems proportions\n\n/**\n * Card\n *\n * Renders an anchor wrapping a figure with an image and caption.\n * Minimal styling; consumers can override via className/style.\n *\n * Props:\n * - href: string (required) \u2014 link target\n * - src: string (optional) \u2014 image source\n * - alt: string (optional) \u2014 image alt text (falls back to title)\n * - title: string (optional) \u2014 primary caption text\n * - subtitle: string (optional) \u2014 secondary caption text\n * - className: string (optional)\n * - style: object (optional)\n * - children: ReactNode (optional) \u2014 appended inside figcaption\n */\nexport default function Card({\n href,\n src,\n alt,\n title,\n subtitle,\n // Optional intrinsic dimensions or aspect ratio to compute a responsive height\n imgWidth,\n imgHeight,\n aspectRatio,\n className,\n style,\n children,\n lazy = true,\n ...rest\n}) {\n const containerRef = useRef(null);\n const isBrowser = typeof window !== \"undefined\";\n const supportsIntersectionObserver =\n typeof IntersectionObserver === \"function\";\n const shouldRenderImmediately =\n !lazy || !isBrowser || !supportsIntersectionObserver;\n const [inView, setInView] = useState(shouldRenderImmediately);\n const [imageLoaded, setImageLoaded] = useState(shouldRenderImmediately);\n\n /**\n * Use IntersectionObserver to detect when the card enters the viewport.\n * When in view, setInView(true) to trigger image loading.\n * If IntersectionObserver is not supported, default to inView=true.\n */\n useEffect(() => {\n if (!lazy) return;\n if (!containerRef.current) return;\n if (!supportsIntersectionObserver) {\n setInView(true);\n return;\n }\n const el = containerRef.current;\n const obs = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n setInView(true);\n try {\n obs.unobserve(el);\n } catch (_) {}\n break;\n }\n }\n },\n { root: null, rootMargin: \"100px\", threshold: 0.1 }\n );\n try {\n obs.observe(el);\n } catch (_) {}\n return () => {\n try {\n obs.disconnect();\n } catch (_) {}\n };\n }, [lazy, supportsIntersectionObserver]);\n\n /**\n * Calculate aspect ratio and padding percent for responsive image container.\n */\n const w = Number(imgWidth);\n const h = Number(imgHeight);\n const hasAspectRatio =\n Number.isFinite(Number(aspectRatio)) && Number(aspectRatio) > 0;\n const hasDimensions =\n Number.isFinite(w) && w > 0 && Number.isFinite(h) && h > 0;\n const ratio = hasAspectRatio\n ? Number(aspectRatio)\n : hasDimensions\n ? w / h\n : src\n ? DEFAULT_CARD_ASPECT_RATIO\n : undefined;\n const paddingPercent = ratio ? 100 / ratio : 100;\n\n /**\n * Caption element (figcaption), rendered if title, subtitle, or children are provided.\n */\n const caption = (\n <figcaption>\n {title && <span>{title}</span>}\n {subtitle && <span>{subtitle}</span>}\n {children}\n </figcaption>\n );\n\n return (\n <a\n href={href}\n className={[\"canopy-card\", className].filter(Boolean).join(\" \")}\n style={style}\n ref={containerRef}\n data-aspect-ratio={ratio}\n data-in-view={inView ? \"true\" : \"false\"}\n data-image-loaded={imageLoaded ? \"true\" : \"false\"}\n {...rest}\n >\n <figure>\n {src ? (\n ratio ? (\n <div\n className=\"canopy-card-media\"\n style={{ \"--canopy-card-padding\": `${paddingPercent}%` }}\n >\n {inView ? (\n <img\n src={src}\n alt={alt || title || \"\"}\n loading=\"lazy\"\n onLoad={() => setImageLoaded(true)}\n onError={() => setImageLoaded(true)}\n />\n ) : null}\n </div>\n ) : (\n <img\n src={src}\n alt={alt || title || \"\"}\n loading=\"lazy\"\n onLoad={() => setImageLoaded(true)}\n onError={() => setImageLoaded(true)}\n className=\"canopy-card-image\"\n />\n )\n ) : null}\n {caption}\n </figure>\n </a>\n );\n}\n", "import React, {useMemo} from \"react\";\n\nconst DUMMY_ORIGIN = 'https://canopy.local';\n\nfunction appendQueryParam(href = '', key, value) {\n try {\n const absolute = /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(href);\n const baseHref = absolute\n ? href\n : `${DUMMY_ORIGIN}${href.startsWith('/') ? '' : '/'}${href}`;\n const url = new URL(baseHref);\n url.searchParams.set(key, value);\n if (absolute) return url.toString();\n return `${url.pathname}${url.search}${url.hash}`;\n } catch (_) {\n if (!href) return href;\n const sep = href.includes('?') ? '&' : '?';\n return `${href}${sep}${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n }\n}\n\nfunction escapeRegExp(str = \"\") {\n return String(str).replace(/[-/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n}\n\nfunction buildSnippet({text = \"\", query = \"\", maxLength = 360}) {\n const clean = String(text || \"\")\n .replace(/\\s+/g, \" \")\n .trim();\n if (!clean) return \"\";\n const safeMax = Math.max(60, Number(maxLength) || 360);\n const term = String(query || \"\").trim();\n if (!term)\n return clean.length > safeMax\n ? clean.slice(0, safeMax).trimEnd() + \"\u2026\"\n : clean;\n const lower = clean.toLowerCase();\n const termLower = term.toLowerCase();\n const idx = lower.indexOf(termLower);\n if (idx === -1)\n return clean.length > safeMax\n ? clean.slice(0, safeMax).trimEnd() + \"\u2026\"\n : clean;\n const padding = Math.max(0, Math.floor((safeMax - term.length) / 2));\n let start = Math.max(0, idx - padding);\n let end = start + safeMax;\n if (end > clean.length) {\n end = clean.length;\n start = Math.max(0, end - safeMax);\n }\n let snippet = clean.slice(start, end).trim();\n if (start > 0) snippet = \"\u2026\" + snippet;\n if (end < clean.length) snippet = snippet + \"\u2026\";\n return snippet;\n}\n\nfunction highlightTextNode(text, query, keyPrefix = \"\") {\n if (!query) return text;\n const term = String(query).trim();\n if (!term) return text;\n const regex = new RegExp(`(${escapeRegExp(term)})`, \"gi\");\n const parts = String(text).split(regex);\n const termLower = term.toLowerCase();\n return parts.map((part, idx) => {\n if (!part) return null;\n if (part.toLowerCase() === termLower) {\n return <mark key={`${keyPrefix}-${idx}`}>{part}</mark>;\n }\n return <React.Fragment key={`${keyPrefix}-${idx}`}>{part}</React.Fragment>;\n });\n}\n\nfunction tokenizeInlineMarkdown(input = \"\") {\n const tokens = [];\n let text = input;\n while (text.length) {\n if (text.startsWith(\"\\n\")) {\n tokens.push({type: \"break\"});\n text = text.slice(1);\n continue;\n }\n if (text.startsWith(\"**\")) {\n const closing = text.indexOf(\"**\", 2);\n if (closing !== -1) {\n const inner = text.slice(2, closing);\n tokens.push({type: \"strong\", children: tokenizeInlineMarkdown(inner)});\n text = text.slice(closing + 2);\n continue;\n }\n }\n if (text.startsWith(\"__\")) {\n const closing = text.indexOf(\"__\", 2);\n if (closing !== -1) {\n const inner = text.slice(2, closing);\n tokens.push({type: \"strong\", children: tokenizeInlineMarkdown(inner)});\n text = text.slice(closing + 2);\n continue;\n }\n }\n if (text.startsWith(\"*\")) {\n if (!text.startsWith(\"**\")) {\n const closing = text.indexOf(\"*\", 1);\n if (closing !== -1) {\n const inner = text.slice(1, closing);\n tokens.push({type: \"em\", children: tokenizeInlineMarkdown(inner)});\n text = text.slice(closing + 1);\n continue;\n }\n }\n }\n if (text.startsWith(\"_\")) {\n if (!text.startsWith(\"__\")) {\n const closing = text.indexOf(\"_\", 1);\n if (closing !== -1) {\n const inner = text.slice(1, closing);\n tokens.push({type: \"em\", children: tokenizeInlineMarkdown(inner)});\n text = text.slice(closing + 1);\n continue;\n }\n }\n }\n if (text.startsWith(\"`\")) {\n const closing = text.indexOf(\"`\", 1);\n if (closing !== -1) {\n const inner = text.slice(1, closing);\n tokens.push({type: \"code\", value: inner});\n text = text.slice(closing + 1);\n continue;\n }\n }\n if (text.startsWith(\"[\")) {\n const endLabel = text.indexOf(\"]\");\n const startHref = endLabel !== -1 ? text.indexOf(\"(\", endLabel) : -1;\n const endHref = startHref !== -1 ? text.indexOf(\")\", startHref) : -1;\n if (endLabel !== -1 && startHref === endLabel + 1 && endHref !== -1) {\n const label = text.slice(1, endLabel);\n const href = text.slice(startHref + 1, endHref);\n tokens.push({\n type: \"link\",\n href,\n children: tokenizeInlineMarkdown(label),\n });\n text = text.slice(endHref + 1);\n continue;\n }\n }\n const specials = [\"**\", \"__\", \"*\", \"_\", \"`\", \"[\", \"\\n\"];\n const nextIndex = specials\n .map((needle) =>\n needle === \"\\n\" ? text.indexOf(\"\\n\") : text.indexOf(needle)\n )\n .filter((idx) => idx > 0)\n .reduce((min, idx) => (min === -1 || idx < min ? idx : min), -1);\n if (nextIndex === -1) {\n tokens.push({type: \"text\", value: text});\n break;\n }\n tokens.push({type: \"text\", value: text.slice(0, nextIndex)});\n text = text.slice(nextIndex);\n }\n return tokens;\n}\n\nfunction renderMarkdownTokens(tokens, query, keyPrefix = \"token\") {\n return tokens.map((token, idx) => {\n const key = `${keyPrefix}-${idx}`;\n switch (token.type) {\n case \"strong\":\n return (\n <strong key={key}>\n {renderMarkdownTokens(token.children || [], query, key)}\n </strong>\n );\n case \"em\":\n return (\n <em key={key}>\n {renderMarkdownTokens(token.children || [], query, key)}\n </em>\n );\n case \"code\":\n return <code key={key}>{token.value}</code>;\n case \"link\":\n return (\n <a key={key} href={token.href} target=\"_blank\" rel=\"noreferrer\">\n {renderMarkdownTokens(token.children || [], query, key)}\n </a>\n );\n case \"break\":\n return <br key={key} />;\n case \"text\":\n default:\n return (\n <React.Fragment key={key}>\n {highlightTextNode(token.value || \"\", query, key)}\n </React.Fragment>\n );\n }\n });\n}\n\nfunction formatDisplayUrl(href = \"\") {\n try {\n const url = new URL(\n href,\n href.startsWith(\"http\") ? undefined : \"http://example.com\"\n );\n if (!href.startsWith(\"http\")) return href;\n const displayPath = url.pathname.replace(/\\/$/, \"\");\n return `${url.host}${displayPath}${url.search}`.replace(/\\/$/, \"\");\n } catch (_) {\n return href;\n }\n}\n\nexport default function ArticleCard({\n href = \"#\",\n title = \"Untitled\",\n annotation = \"\",\n summary = \"\",\n summaryMarkdown = \"\",\n metadata = [],\n query = \"\",\n recordType = \"\",\n}) {\n const snippetSource = summaryMarkdown || annotation || summary;\n const snippet = useMemo(\n () => buildSnippet({text: snippetSource, query}),\n [snippetSource, query]\n );\n const snippetTokens = useMemo(\n () => tokenizeInlineMarkdown(snippet),\n [snippet]\n );\n const metaList = Array.isArray(metadata)\n ? metadata.map((m) => String(m || \"\")).filter(Boolean)\n : [];\n const displayUrl = useMemo(() => formatDisplayUrl(href), [href]);\n const resolvedHref = useMemo(() => {\n if (recordType === 'annotation' && query && href) {\n return appendQueryParam(href, 'q', query);\n }\n return href;\n }, [href, recordType, query]);\n\n return (\n <a href={resolvedHref} className=\"canopy-article-card\">\n <article>\n <h3>{title}</h3>\n {displayUrl ? (\n <span className=\"canopy-article-card__url\">{displayUrl}</span>\n ) : null}\n {snippet ? (\n <p className=\"canopy-article-card__snippet\">\n {renderMarkdownTokens(snippetTokens, query)}\n </p>\n ) : null}\n {metaList.length ? (\n <ul className=\"canopy-article-card__meta\">\n {metaList.slice(0, 3).map((item, idx) => (\n <li key={`${item}-${idx}`}>{item}</li>\n ))}\n </ul>\n ) : null}\n </article>\n </a>\n );\n}\n", "import Masonry from \"react-masonry-css\";\nimport React from \"react\";\n\n// Simple item wrapper to provide consistent spacing between items.\nexport function GridItem({children, className = \"\", style = {}, ...rest}) {\n return (\n <div\n className={`canopy-grid-item ${className}`.trim()}\n style={style}\n {...rest}\n >\n {children}\n </div>\n );\n}\n\n/**\n * Grid (Masonry)\n *\n * Lightweight wrapper around `react-masonry-css` with sensible defaults\n * and inline styles so it works without a global CSS pipeline.\n *\n * Props:\n * - breakpointCols: number | object \u2014 columns per breakpoint (react-masonry-css prop)\n * - gap: CSS length string \u2014 spacing between items/columns (default '1rem')\n * - paddingY: CSS length string \u2014 vertical padding for the grid (default '0')\n * - className, style \u2014 forwarded to container\n * - columnClassName \u2014 forwarded to Masonry (defaults to 'canopy-grid-column')\n * - children \u2014 usually a list of <GridItem> elements\n */\nexport default function Grid({\n breakpointCols,\n gap = \"1.618rem\",\n paddingY = \"0\",\n className = \"\",\n style = {},\n columnClassName = \"canopy-grid-column\",\n children,\n ...rest\n}) {\n const cols = breakpointCols || {\n default: 6,\n 1280: 5,\n 1024: 4,\n 768: 3,\n 640: 2,\n };\n const vars = {\"--grid-gap\": gap, \"--grid-padding-y\": paddingY};\n\n return (\n <div className=\"canopy-grid-wrap\">\n {/* Scoped styles so the component works standalone */}\n <style\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{\n __html: `\n .canopy-grid { display: flex; width: auto; position: relative; padding: var(--grid-padding-y, 0) 0; z-index: 1; }\n .canopy-grid .${columnClassName} { margin-left: var(--grid-gap, 1rem); }\n .canopy-grid .${columnClassName}:first-child { margin-left: 0; }\n .canopy-grid-item { margin-bottom: var(--grid-gap, 1rem); }\n `,\n }}\n />\n <Masonry\n breakpointCols={cols}\n className={`canopy-grid ${className}`.trim()}\n columnClassName={columnClassName}\n style={{...vars, ...style}}\n {...rest}\n >\n {children}\n </Masonry>\n </div>\n );\n}\n", "import React from \"react\";\n\nexport default function Container({\n className = \"\",\n variant = \"content\",\n children,\n ...rest\n}) {\n const variantClass = variant === \"wide\" ? \"max-w-wide\" : \"max-w-content\";\n const classes = [\"mx-auto\", variantClass, \"w-full\", className]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div\n className={classes}\n {...rest}\n style={{...rest.style, padding: \"1.618rem\"}}\n >\n {children}\n </div>\n );\n}\n", "import React from 'react';\n\nconst VARIANTS = new Set(['primary', 'secondary']);\n\nexport default function Button({\n label,\n href = '#',\n target,\n rel,\n variant = 'primary',\n className = '',\n children,\n ...rest\n}) {\n const resolvedVariant = VARIANTS.has(variant) ? variant : 'primary';\n const computedRel =\n target === '_blank' && !rel ? 'noopener noreferrer' : rel;\n const content = children != null ? children : label;\n\n if (!content) return null;\n\n const classes = [\n 'canopy-button',\n `canopy-button--${resolvedVariant}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <a\n href={href}\n className={classes}\n target={target}\n rel={computedRel}\n {...rest}\n >\n {content}\n </a>\n );\n}\n", "import React from 'react';\n\nexport default function ButtonWrapper({\n className = '',\n children,\n text = '',\n variant = 'default',\n ...rest\n}) {\n const variantClass =\n variant && variant !== 'default'\n ? `canopy-button-group--${variant}`\n : '';\n const classes = ['canopy-button-group', variantClass, className]\n .filter(Boolean)\n .join(' ');\n return (\n <div className={classes} {...rest}>\n {text && <span className=\"canopy-button-group__text\">{text}</span>}\n <div className=\"canopy-button-group__actions\">{children}</div>\n </div>\n );\n}\n", "import React from \"react\";\nimport SearchPanel from \"../search/SearchPanel.jsx\";\nimport CanopyBrand from \"./CanopyBrand.jsx\";\nimport CanopyModal from \"./CanopyModal.jsx\";\n\nfunction HeaderScript() {\n const code = `\n(function () {\n if (typeof window === 'undefined') return;\n\n var doc = document;\n var body = doc.body;\n var root = doc.documentElement;\n\n function ready(fn) {\n if (doc.readyState === 'loading') {\n doc.addEventListener('DOMContentLoaded', fn, { once: true });\n } else {\n fn();\n }\n }\n\n ready(function () {\n var header = doc.querySelector('.canopy-header');\n if (!header) return;\n\n var NAV_ATTR = 'data-mobile-nav';\n var SEARCH_ATTR = 'data-mobile-search';\n\n function modalFor(type) {\n return doc.querySelector('[data-canopy-modal=\"' + type + '\"]');\n }\n\n function each(list, fn) {\n if (!list || typeof fn !== 'function') return;\n Array.prototype.forEach.call(list, fn);\n }\n\n function setExpanded(type, expanded) {\n var toggles = header.querySelectorAll('[data-canopy-header-toggle=\"' + type + '\"]');\n each(toggles, function (btn) {\n btn.setAttribute('aria-expanded', expanded ? 'true' : 'false');\n });\n var modal = modalFor(type);\n if (modal) {\n modal.setAttribute('data-open', expanded ? 'true' : 'false');\n modal.setAttribute('aria-hidden', expanded ? 'false' : 'true');\n }\n }\n\n function lockScroll(shouldLock) {\n if (!body) return;\n if (shouldLock) {\n if (!body.dataset.canopyScrollLock) {\n body.dataset.canopyScrollPrevOverflow = body.style.overflow || '';\n if (root && root.dataset) {\n root.dataset.canopyScrollPrevOverflow = root.style.overflow || '';\n }\n }\n body.dataset.canopyScrollLock = '1';\n body.style.overflow = 'hidden';\n if (root) root.style.overflow = 'hidden';\n } else {\n if (body.dataset.canopyScrollLock) {\n delete body.dataset.canopyScrollLock;\n body.style.overflow = body.dataset.canopyScrollPrevOverflow || '';\n delete body.dataset.canopyScrollPrevOverflow;\n }\n if (root && root.dataset) {\n root.style.overflow = root.dataset.canopyScrollPrevOverflow || '';\n delete root.dataset.canopyScrollPrevOverflow;\n }\n }\n }\n\n function stateFor(type) {\n if (type === 'nav') return header.getAttribute(NAV_ATTR);\n if (type === 'search') return header.getAttribute(SEARCH_ATTR);\n return 'closed';\n }\n\n function focusSearchForm() {\n var input = header.querySelector('[data-canopy-search-form-input]');\n if (!input) return;\n var raf = typeof window !== 'undefined' && window.requestAnimationFrame;\n (raf || function (fn) { return setTimeout(fn, 16); })(function () {\n try {\n input.focus({ preventScroll: true });\n } catch (_) {\n try { input.focus(); } catch (_) {}\n }\n });\n }\n\n function focusNavMenu() {\n var modal = modalFor('nav');\n if (!modal) return;\n var target = modal.querySelector('button, a, input, [tabindex]:not([tabindex=\"-1\"])');\n if (!target) return;\n var raf = typeof window !== 'undefined' && window.requestAnimationFrame;\n (raf || function (fn) { return setTimeout(fn, 16); })(function () {\n try {\n target.focus({ preventScroll: true });\n } catch (_) {\n try { target.focus(); } catch (_) {}\n }\n });\n }\n\n function setState(type, next) {\n if (type === 'nav') header.setAttribute(NAV_ATTR, next);\n if (type === 'search') header.setAttribute(SEARCH_ATTR, next);\n setExpanded(type, next === 'open');\n var navOpen = header.getAttribute(NAV_ATTR) === 'open';\n var searchOpen = header.getAttribute(SEARCH_ATTR) === 'open';\n lockScroll(navOpen || searchOpen);\n }\n\n function toggle(type, force) {\n var current = stateFor(type) === 'open';\n var shouldOpen = typeof force === 'boolean' ? force : !current;\n if (shouldOpen && type === 'nav') setState('search', 'closed');\n if (shouldOpen && type === 'search') setState('nav', 'closed');\n setState(type, shouldOpen ? 'open' : 'closed');\n if (type === 'search' && shouldOpen) focusSearchForm();\n if (type === 'nav' && shouldOpen) focusNavMenu();\n }\n\n each(header.querySelectorAll('[data-canopy-header-toggle]'), function (btn) {\n btn.addEventListener('click', function (event) {\n event.preventDefault();\n var type = btn.getAttribute('data-canopy-header-toggle');\n if (!type) return;\n toggle(type);\n });\n });\n\n each(doc.querySelectorAll('[data-canopy-header-close]'), function (btn) {\n btn.addEventListener('click', function () {\n var type = btn.getAttribute('data-canopy-header-close');\n if (!type) return;\n toggle(type, false);\n });\n });\n\n var navModal = modalFor('nav');\n if (navModal) {\n navModal.addEventListener('click', function (event) {\n if (event.target === navModal) {\n toggle('nav', false);\n return;\n }\n var target = event.target && event.target.closest && event.target.closest('a');\n if (!target) return;\n toggle('nav', false);\n });\n }\n\n var searchModal = modalFor('search');\n if (searchModal) {\n searchModal.addEventListener('click', function (event) {\n if (event.target === searchModal) toggle('search', false);\n });\n }\n\n doc.addEventListener('keydown', function (event) {\n if (event.key !== 'Escape') return;\n var navOpen = header.getAttribute(NAV_ATTR) === 'open';\n var searchOpen = header.getAttribute(SEARCH_ATTR) === 'open';\n if (!navOpen && !searchOpen) return;\n event.preventDefault();\n toggle('nav', false);\n toggle('search', false);\n });\n\n var mq = window.matchMedia('(min-width: 48rem)');\n function syncDesktopState() {\n if (mq.matches) {\n setState('nav', 'closed');\n setState('search', 'closed');\n setExpanded('nav', false);\n setExpanded('search', false);\n lockScroll(false);\n }\n }\n\n try {\n mq.addEventListener('change', syncDesktopState);\n } catch (_) {\n mq.addListener(syncDesktopState);\n }\n\n syncDesktopState();\n });\n})();\n `;\n\n return (\n <script\n dangerouslySetInnerHTML={{\n __html: code,\n }}\n />\n );\n}\n\nconst CONTEXT_KEY =\n typeof Symbol === \"function\"\n ? Symbol.for(\"__CANOPY_PAGE_CONTEXT__\")\n : \"__CANOPY_PAGE_CONTEXT__\";\n\nfunction getSharedRoot() {\n if (typeof globalThis !== \"undefined\") return globalThis;\n if (typeof window !== \"undefined\") return window;\n if (typeof global !== \"undefined\") return global;\n return null;\n}\n\nfunction getSafePageContext() {\n const root = getSharedRoot();\n if (root && root[CONTEXT_KEY]) return root[CONTEXT_KEY];\n const ctx = React.createContext({ navigation: null, page: null });\n if (root) root[CONTEXT_KEY] = ctx;\n return ctx;\n}\n\nfunction ensureArray(navLinks) {\n if (!Array.isArray(navLinks)) return [];\n return navLinks.filter(\n (link) => link && typeof link === \"object\" && typeof link.href === \"string\"\n );\n}\n\nfunction SectionNavList({ root }) {\n if (!root || !Array.isArray(root.children) || !root.children.length) return null;\n return (\n <ul className=\"canopy-modal__section-list\" role=\"list\">\n {root.children.map((node) => (\n <SectionNavItem key={node.slug || node.href || node.title} node={node} depth={0} />\n ))}\n </ul>\n );\n}\n\nfunction SectionNavItem({ node, depth }) {\n if (!node) return null;\n const hasChildren = Array.isArray(node.children) && node.children.length > 0;\n const Tag = node.href ? \"a\" : \"span\";\n const classes = [\n \"canopy-modal__section-link\",\n `depth-${Math.min(5, Math.max(0, depth + 1))}`,\n ];\n if (!node.href) classes.push(\"is-label\");\n if (node.isActive) classes.push(\"is-active\");\n\n return (\n <li className=\"canopy-modal__section-item\" data-depth={depth}>\n <Tag\n className={classes.join(\" \")}\n href={node.href || undefined}\n aria-current={node.isActive ? \"page\" : undefined}\n >\n {node.title || node.slug}\n </Tag>\n {hasChildren ? (\n <ul className=\"canopy-modal__section-list canopy-modal__section-list--nested\" role=\"list\">\n {node.children.map((child) => (\n <SectionNavItem key={child.slug || child.href || child.title} node={child} depth={depth + 1} />\n ))}\n </ul>\n ) : null}\n </li>\n );\n}\n\nexport default function CanopyHeader(props = {}) {\n const {\n navigation: navLinksProp,\n searchLabel = \"Search\",\n searchHotkey = \"mod+k\",\n searchPlaceholder = \"Search\u2026\",\n brandHref = \"/\",\n title = \"Canopy IIIF\",\n logo: SiteLogo,\n } = props;\n\n const navLinks = ensureArray(navLinksProp);\n const PageContext = getSafePageContext();\n const context = React.useContext(PageContext);\n const sectionNavigation =\n context && context.navigation && context.navigation.root\n ? context.navigation\n : null;\n const sectionHeading =\n (sectionNavigation && sectionNavigation.title) ||\n (sectionNavigation && sectionNavigation.root\n ? sectionNavigation.root.title\n : \"\");\n const hasSectionNav = !!(\n sectionNavigation &&\n sectionNavigation.root &&\n Array.isArray(sectionNavigation.root.children) &&\n sectionNavigation.root.children.length\n );\n const sectionLabel = sectionHeading\n ? `More in ${sectionHeading}`\n : \"More in this section\";\n const sectionAriaLabel = sectionHeading\n ? `${sectionHeading} section navigation`\n : \"Section navigation\";\n\n return (\n <>\n <header\n className=\"canopy-header\"\n data-mobile-nav=\"closed\"\n data-mobile-search=\"closed\"\n >\n <div className=\"canopy-header__brand\">\n <CanopyBrand\n label={title}\n href={brandHref}\n className=\"canopy-header__brand-link\"\n Logo={SiteLogo}\n />\n </div>\n\n <div className=\"canopy-header__desktop-search\">\n <SearchPanel\n label={searchLabel}\n hotkey={searchHotkey}\n placeholder={searchPlaceholder}\n />\n </div>\n\n <nav\n className=\"canopy-nav-links canopy-header__desktop-nav\"\n aria-label=\"Primary navigation\"\n >\n {navLinks.map((link) => (\n <a key={link.href} href={link.href}>\n {link.label || link.href}\n </a>\n ))}\n </nav>\n\n <div className=\"canopy-header__actions\">\n <button\n type=\"button\"\n className=\"canopy-header__icon-button canopy-header__search-trigger\"\n aria-label=\"Open search\"\n aria-controls=\"canopy-modal-search\"\n aria-expanded=\"false\"\n data-canopy-header-toggle=\"search\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n className=\"canopy-header__search-icon\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m21 21-3.8-3.8M10.5 18a7.5 7.5 0 1 1 0-15 7.5 7.5 0 0 1 0 15Z\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n className=\"canopy-header__icon-button canopy-header__menu\"\n aria-label=\"Open navigation\"\n aria-controls=\"canopy-modal-nav\"\n aria-expanded=\"false\"\n data-canopy-header-toggle=\"nav\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"1.5\"\n stroke=\"currentColor\"\n className=\"canopy-header__menu-icon\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\"\n />\n </svg>\n </button>\n </div>\n </header>\n\n <CanopyModal\n id=\"canopy-modal-nav\"\n variant=\"nav\"\n labelledBy=\"canopy-modal-nav-label\"\n label={title}\n logo={SiteLogo}\n href={brandHref}\n closeLabel=\"Close navigation\"\n closeDataAttr=\"nav\"\n >\n <nav\n className=\"canopy-nav-links canopy-modal__nav\"\n aria-label=\"Primary navigation\"\n >\n {navLinks.map((link) => (\n <a key={link.href} href={link.href}>\n {link.label || link.href}\n </a>\n ))}\n </nav>\n {hasSectionNav ? (\n <nav\n className=\"canopy-modal__section-nav\"\n aria-label={sectionAriaLabel}\n >\n <div className=\"canopy-modal__section-label\">{sectionLabel}</div>\n <SectionNavList root={sectionNavigation.root} />\n </nav>\n ) : null}\n </CanopyModal>\n\n <CanopyModal\n id=\"canopy-modal-search\"\n variant=\"search\"\n labelledBy=\"canopy-modal-search-label\"\n label={title}\n logo={SiteLogo}\n href={brandHref}\n closeLabel=\"Close search\"\n closeDataAttr=\"search\"\n bodyClassName=\"canopy-modal__body--search\"\n >\n <SearchPanel\n label={searchLabel}\n hotkey={searchHotkey}\n placeholder={searchPlaceholder}\n />\n </CanopyModal>\n\n <HeaderScript />\n </>\n );\n}\n", "import React from 'react';\nimport SearchPanelForm, { resolveSearchPath } from './SearchPanelForm.jsx';\nimport SearchPanelTeaserResults from './SearchPanelTeaserResults.jsx';\n\n// High-level SearchPanel composed of a teaser form and teaser results panel.\n// Encodes configuration as JSON for the client runtime.\nexport default function SearchPanel(props = {}) {\n const {\n placeholder = 'Search\u2026',\n hotkey = 'mod+k',\n maxResults = 8,\n groupOrder = ['work', 'docs', 'page'],\n // Kept for backward compat; form always renders submit\n button = true, // eslint-disable-line no-unused-vars\n buttonLabel = 'Search',\n label,\n searchPath = '/search',\n } = props || {};\n\n const text = typeof label === 'string' && label.trim() ? label.trim() : buttonLabel;\n const resolvedSearchPath = resolveSearchPath(searchPath);\n const data = { placeholder, hotkey, maxResults, groupOrder, label: text, searchPath: resolvedSearchPath };\n\n return (\n <div data-canopy-search-form className=\"flex-1 min-w-0\">\n <div className=\"relative w-full\">\n <SearchPanelForm placeholder={placeholder} buttonLabel={buttonLabel} label={label} searchPath={resolvedSearchPath} />\n <SearchPanelTeaserResults />\n </div>\n <script type=\"application/json\" dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }} />\n </div>\n );\n}\n", "import React from \"react\";\n\nexport const MagnifyingGlassIcon = (props) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" {...props}>\n <path d=\"M456.69 421.39L362.6 327.3a173.81 173.81 0 0034.84-104.58C397.44 126.38 319.06 48 222.72 48S48 126.38 48 222.72s78.38 174.72 174.72 174.72A173.81 173.81 0 00327.3 362.6l94.09 94.09a25 25 0 0035.3-35.3zM97.92 222.72a124.8 124.8 0 11124.8 124.8 124.95 124.95 0 01-124.8-124.8z\" />\n </svg>\n);\n", "import {MagnifyingGlassIcon} from \"../Icons\";\nimport React from \"react\";\n\nfunction readBasePath() {\n const normalize = (val) => {\n const raw = typeof val === \"string\" ? val.trim() : \"\";\n if (!raw) return \"\";\n return raw.replace(/\\/+$/, \"\");\n };\n try {\n if (typeof window !== \"undefined\" && window.CANOPY_BASE_PATH != null) {\n const fromWindow = normalize(window.CANOPY_BASE_PATH);\n if (fromWindow) return fromWindow;\n }\n } catch (_) {}\n try {\n if (\n typeof globalThis !== \"undefined\" &&\n globalThis.CANOPY_BASE_PATH != null\n ) {\n const fromGlobal = normalize(globalThis.CANOPY_BASE_PATH);\n if (fromGlobal) return fromGlobal;\n }\n } catch (_) {}\n try {\n if (\n typeof process !== \"undefined\" &&\n process.env &&\n process.env.CANOPY_BASE_PATH\n ) {\n const fromEnv = normalize(process.env.CANOPY_BASE_PATH);\n if (fromEnv) return fromEnv;\n }\n } catch (_) {}\n return \"\";\n}\n\nfunction isAbsoluteUrl(href) {\n try {\n return /^https?:/i.test(String(href || \"\"));\n } catch (_) {\n return false;\n }\n}\n\nexport function resolveSearchPath(pathValue) {\n let raw = typeof pathValue === \"string\" ? pathValue.trim() : \"\";\n if (!raw) raw = \"/search\";\n if (isAbsoluteUrl(raw)) return raw;\n const normalizedPath = raw.startsWith(\"/\") ? raw : `/${raw}`;\n const base = readBasePath();\n if (!base) return normalizedPath;\n const baseWithLead = base.startsWith(\"/\") ? base : `/${base}`;\n const baseTrimmed = baseWithLead.replace(/\\/+$/, \"\");\n if (!baseTrimmed) return normalizedPath;\n if (\n normalizedPath === baseTrimmed ||\n normalizedPath.startsWith(`${baseTrimmed}/`)\n ) {\n return normalizedPath;\n }\n const pathTrimmed = normalizedPath.replace(/^\\/+/, \"\");\n return `${baseTrimmed}/${pathTrimmed}`;\n}\n\nexport default function SearchPanelForm(props = {}) {\n const {\n placeholder = \"Search\u2026\",\n buttonLabel = \"Search\",\n label,\n searchPath = \"/search\",\n inputId: inputIdProp,\n clearLabel = \"Clear search\",\n } = props || {};\n\n const text =\n typeof label === \"string\" && label.trim() ? label.trim() : buttonLabel;\n const action = React.useMemo(\n () => resolveSearchPath(searchPath),\n [searchPath]\n );\n const autoId = typeof React.useId === \"function\" ? React.useId() : undefined;\n const [fallbackId] = React.useState(\n () => `canopy-search-form-${Math.random().toString(36).slice(2, 10)}`\n );\n const inputId = inputIdProp || autoId || fallbackId;\n const inputRef = React.useRef(null);\n const [hasValue, setHasValue] = React.useState(false);\n\n const focusInput = React.useCallback(() => {\n const el = inputRef.current;\n if (!el) return;\n if (document.activeElement === el) return;\n try {\n el.focus({preventScroll: true});\n } catch (_) {\n try {\n el.focus();\n } catch (_) {}\n }\n }, []);\n\n const handlePointerDown = React.useCallback(\n (event) => {\n const target = event.target;\n if (target && typeof target.closest === \"function\") {\n if (target.closest(\"[data-canopy-search-form-trigger]\")) return;\n if (target.closest(\"[data-canopy-search-form-clear]\")) return;\n }\n event.preventDefault();\n focusInput();\n },\n [focusInput]\n );\n\n React.useEffect(() => {\n const el = inputRef.current;\n if (!el) return;\n if (el.value && el.value.trim()) {\n setHasValue(true);\n }\n }, []);\n\n const handleInputChange = React.useCallback((event) => {\n const nextHasValue = Boolean(\n event?.target?.value && event.target.value.trim()\n );\n setHasValue(nextHasValue);\n }, []);\n\n const handleClear = React.useCallback((event) => {}, []);\n\n const handleClearKey = React.useCallback(\n (event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleClear(event);\n }\n },\n [handleClear]\n );\n\n return (\n <form\n action={action}\n method=\"get\"\n role=\"search\"\n autoComplete=\"off\"\n spellCheck=\"false\"\n className=\"canopy-search-form canopy-search-form-shell\"\n onPointerDown={handlePointerDown}\n data-has-value={hasValue ? \"1\" : \"0\"}\n >\n <label htmlFor={inputId} className=\"canopy-search-form__label\">\n <MagnifyingGlassIcon className=\"canopy-search-form__icon\" />\n <input\n id={inputId}\n type=\"search\"\n name=\"q\"\n inputMode=\"search\"\n data-canopy-search-form-input\n placeholder={placeholder}\n className=\"canopy-search-form__input\"\n aria-label=\"Search\"\n ref={inputRef}\n onChange={handleInputChange}\n onInput={handleInputChange}\n />\n </label>\n {hasValue ? (\n <button\n type=\"button\"\n className=\"canopy-search-form__clear\"\n onClick={handleClear}\n onPointerDown={(event) => event.stopPropagation()}\n onKeyDown={handleClearKey}\n aria-label={clearLabel}\n data-canopy-search-form-clear\n >\n \u00D7\n </button>\n ) : null}\n <button\n type=\"submit\"\n data-canopy-search-form-trigger=\"submit\"\n className=\"canopy-search-form__submit\"\n >\n {text}\n </button>\n </form>\n );\n}\n", "import React from \"react\";\n\n// SSR placeholder for teaser results panel; the runtime controls visibility and content.\nexport default function SearchPanelTeaserResults(props = {}) {\n const { style, className } = props || {};\n const classes = [\"canopy-search-teaser\", \"is-empty\", className]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div\n data-canopy-search-form-panel\n hidden\n className={classes || undefined}\n style={style}\n >\n <div id=\"cplist\" className=\"canopy-search-teaser__list\" />\n </div>\n );\n}\n", "import React from 'react';\n\nexport default function CanopyBrand(props = {}) {\n const {\n labelId,\n label = 'Canopy IIIF',\n href = '/',\n className,\n Logo,\n } = props || {};\n const spanProps = labelId ? {id: labelId} : {};\n const classes = ['canopy-logo', className].filter(Boolean).join(' ');\n\n return (\n <a href={href} className={classes}>\n {typeof Logo === 'function' ? <Logo /> : null}\n <span {...spanProps}>{label}</span>\n </a>\n );\n}\n", "import React from 'react';\nimport CanopyBrand from './CanopyBrand.jsx';\n\nexport default function CanopyModal(props = {}) {\n const {\n id,\n variant,\n open = false,\n labelledBy,\n label,\n logo: Logo,\n href = '/',\n closeLabel = 'Close',\n closeDataAttr,\n onClose,\n onBackgroundClick,\n bodyClassName,\n padded = true,\n className,\n children,\n } = props;\n\n const rootClassName = ['canopy-modal', variant ? `canopy-modal--${variant}` : null, className]\n .filter(Boolean)\n .join(' ');\n\n const modalProps = {\n id,\n className: rootClassName,\n role: 'dialog',\n 'aria-modal': 'true',\n 'aria-hidden': open ? 'false' : 'true',\n 'data-open': open ? 'true' : 'false',\n };\n\n if (variant) modalProps['data-canopy-modal'] = variant;\n\n const resolvedLabelId = labelledBy || (label ? `${variant || 'modal'}-label` : undefined);\n if (resolvedLabelId) modalProps['aria-labelledby'] = resolvedLabelId;\n\n if (typeof onBackgroundClick === 'function') {\n modalProps.onClick = (event) => {\n if (event.target === event.currentTarget) onBackgroundClick(event);\n };\n }\n\n const closeButtonProps = {\n type: 'button',\n className: 'canopy-modal__close',\n 'aria-label': closeLabel,\n };\n\n if (typeof closeDataAttr === 'string' && closeDataAttr) {\n closeButtonProps['data-canopy-header-close'] = closeDataAttr;\n }\n\n if (typeof onClose === 'function') {\n closeButtonProps.onClick = onClose;\n }\n\n const bodyClasses = ['canopy-modal__body'];\n if (padded) bodyClasses.push('canopy-modal__body--padded');\n if (bodyClassName) bodyClasses.push(bodyClassName);\n const bodyClassNameValue = bodyClasses.join(' ');\n\n return (\n <div {...modalProps}>\n <div className=\"canopy-modal__panel\">\n <button {...closeButtonProps}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n className=\"canopy-modal__close-icon\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 6l12 12M6 18L18 6\" />\n </svg>\n <span className=\"sr-only\">{closeLabel}</span>\n </button>\n <div className={bodyClassNameValue}>\n {label ? (\n <div className=\"canopy-modal__brand\">\n <CanopyBrand\n labelId={resolvedLabelId}\n label={label}\n href={href}\n Logo={Logo}\n className=\"canopy-modal__brand-link\"\n />\n </div>\n ) : null}\n {children}\n </div>\n </div>\n </div>\n );\n}\n", "import React from 'react';\n\nexport default function CanopyFooter({ className = '', children }) {\n const footerClassName = ['canopy-footer', className].filter(Boolean).join(' ');\n\n return (\n <footer className={footerClassName}>\n <div className=\"canopy-footer__inner\">{children}</div>\n </footer>\n );\n}\n", "import React from \"react\";\n\nexport default function TeaserCard({\n href = \"\",\n title = \"\",\n metadata = [],\n summary = \"\",\n thumbnail = null,\n type = \"work\",\n className = \"\",\n ...rest\n}) {\n const Tag = href ? \"a\" : \"div\";\n const classes = [\n \"canopy-card\",\n \"canopy-card--teaser\",\n \"canopy-search-teaser__item\",\n \"canopy-teaser-card\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n const showThumb = type === \"work\" && thumbnail;\n const metaLine = (\n Array.isArray(metadata) && metadata.length\n ? metadata.filter(Boolean)\n : summary\n ? [summary]\n : []\n )\n .filter(Boolean)\n .slice(0, 2)\n .join(\" \u2022 \");\n\n return (\n <Tag\n className={classes}\n href={href || undefined}\n data-canopy-item={href ? \"\" : undefined}\n {...rest}\n >\n {showThumb ? (\n <div className=\"canopy-search-teaser__thumb\">\n <img\n src={thumbnail}\n alt=\"\"\n loading=\"lazy\"\n className=\"canopy-search-teaser__thumb-img\"\n />\n </div>\n ) : null}\n <div className=\"canopy-search-teaser__text\">\n <span className=\"canopy-search-teaser__title\">\n {title || href || 'Untitled'}\n </span>\n {metaLine ? (\n <span className=\"canopy-search-teaser__meta\">{metaLine}</span>\n ) : null}\n </div>\n </Tag>\n );\n}\n", "import React, { useEffect, useState } from \"react\";\n\n// SSR-safe wrapper around Clover's viewer. Clover touches the DOM at import time,\n// so we dynamically import it only in the browser.\n\n// Default Clover viewer options; can be overridden per-usage via props.options\nconst DEFAULT_VIEWER_OPTIONS = {\n showDownload: false,\n showIIIFBadge: false,\n showTitle: false,\n informationPanel: {\n open: false,\n renderAbout: false,\n renderToggle: false,\n },\n};\n\nfunction isPlainObject(val) {\n return val && typeof val === \"object\" && !Array.isArray(val);\n}\n\nfunction deepMerge(base, override) {\n if (!isPlainObject(base)) return override;\n const out = { ...base };\n if (!isPlainObject(override)) return out;\n for (const key of Object.keys(override)) {\n const a = base[key];\n const b = override[key];\n if (isPlainObject(a) && isPlainObject(b)) out[key] = deepMerge(a, b);\n else out[key] = b;\n }\n return out;\n}\n\nexport const Viewer = (props) => {\n const [CloverViewer, setCloverViewer] = useState(null);\n const mergedOptions = deepMerge(\n DEFAULT_VIEWER_OPTIONS,\n props && props.options\n );\n\n useEffect(() => {\n let mounted = true;\n const canUseDom =\n typeof window !== \"undefined\" && typeof document !== \"undefined\";\n if (canUseDom) {\n import(\"@samvera/clover-iiif/viewer\")\n .then((mod) => {\n if (!mounted) return;\n // Loaded Clover viewer dynamically in the browser\n const Comp = mod && (mod.default || mod.Viewer || mod);\n setCloverViewer(() => Comp);\n })\n .catch(() => {\n // Silently ignore load errors on the server or if Clover is unavailable\n });\n }\n return () => {\n mounted = false;\n };\n }, []);\n\n if (!CloverViewer) {\n // SSR placeholder for client hydration; props provided as JSON\n let json = \"{}\";\n try {\n const p = { ...(props || {}) };\n if (mergedOptions) p.options = mergedOptions;\n json = JSON.stringify(p);\n } catch (_) {\n json = \"{}\";\n }\n return (\n <div data-canopy-viewer=\"1\" className=\"not-prose\">\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{ __html: json }}\n />\n </div>\n );\n }\n return <CloverViewer {...props} options={mergedOptions} />;\n};\n", "import React, {useEffect, useState} from \"react\";\nimport {mergeSliderOptions, normalizeSliderOptions} from \"./sliderOptions.js\";\n\n// SSR-safe wrapper around Clover's slider. Clover touches the DOM at import time,\n// so we dynamically import it only in the browser.\nexport const Slider = (props = {}) => {\n const [CloverSlider, setCloverSlider] = useState(null);\n\n useEffect(() => {\n let mounted = true;\n const canUseDom =\n typeof window !== \"undefined\" && typeof document !== \"undefined\";\n if (canUseDom) {\n import(\"@samvera/clover-iiif/slider\")\n .then((mod) => {\n if (!mounted) return;\n const Comp = mod && (mod.default || mod.Slider || mod);\n setCloverSlider(() => Comp);\n })\n .catch(() => {\n // Silently ignore load errors on the server or if Clover is unavailable\n });\n }\n return () => {\n mounted = false;\n };\n }, []);\n\n const {className, ...rest} = props || {};\n const sliderClassName = [\"canopy-slider\", className]\n .filter(Boolean)\n .join(\" \");\n const mergedOptions = mergeSliderOptions(rest.options);\n const normalizedOptions = normalizeSliderOptions(mergedOptions);\n const resolvedProps = {\n ...rest,\n className: sliderClassName,\n options: normalizedOptions,\n };\n\n if (!CloverSlider) {\n // SSR placeholder for client hydration; props provided as JSON\n let json = \"{}\";\n try {\n json = JSON.stringify(resolvedProps || {});\n } catch (_) {\n json = \"{}\";\n }\n return (\n <div className={sliderClassName} data-canopy-slider=\"1\">\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{__html: json}}\n />\n </div>\n );\n }\n return <CloverSlider {...resolvedProps} />;\n};\n", "const UNIT_TOKEN = \"__canopySliderUnit\";\nconst UNIT_REM = \"rem\";\nconst DEFAULT_FONT_SIZE = 16;\nlet cachedRootFontSize = null;\n\n// Shared defaults applied to every slider instance (manual + generated).\nexport const sliderOptions = {\n breakpoints: {\n 400: {\n slidesPerView: 2,\n spaceBetween: rem(1),\n },\n 640: {\n slidesPerView: 3,\n spaceBetween: rem(1.618),\n },\n 1024: {\n slidesPerView: 4,\n spaceBetween: rem(1.618),\n },\n },\n};\n\nexport function rem(value) {\n const numeric = typeof value === \"number\" ? value : parseFloat(value);\n return {\n [UNIT_TOKEN]: UNIT_REM,\n value: Number.isFinite(numeric) ? numeric : 0,\n };\n}\n\nfunction cloneBreakpoints(source) {\n if (!source || typeof source !== \"object\") return undefined;\n const clone = {};\n Object.entries(source).forEach(([key, entry]) => {\n clone[key] = entry && typeof entry === \"object\" ? {...entry} : {};\n });\n return clone;\n}\n\nfunction cloneOptions(options = {}) {\n const clone = {...options};\n if (options.breakpoints && typeof options.breakpoints === \"object\") {\n clone.breakpoints = cloneBreakpoints(options.breakpoints);\n }\n return clone;\n}\n\nexport function mergeSliderOptions(overrides) {\n const base = cloneOptions(sliderOptions);\n const incoming = cloneOptions(overrides || {});\n const merged = {\n ...base,\n ...incoming,\n };\n if (base.breakpoints || incoming.breakpoints) {\n merged.breakpoints = {\n ...(base.breakpoints || {}),\n ...(incoming.breakpoints || {}),\n };\n }\n return merged;\n}\n\nfunction hasBrowserEnv() {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\";\n}\n\nfunction measureRootFontSize() {\n if (!hasBrowserEnv()) return DEFAULT_FONT_SIZE;\n if (cachedRootFontSize !== null) return cachedRootFontSize;\n let size = DEFAULT_FONT_SIZE;\n try {\n const root = window.document && window.document.documentElement;\n if (root && window.getComputedStyle) {\n const computed = window.getComputedStyle(root).fontSize;\n const parsed = parseFloat(computed);\n if (Number.isFinite(parsed)) size = parsed;\n }\n } catch (_) {\n size = DEFAULT_FONT_SIZE;\n }\n cachedRootFontSize = size;\n return size;\n}\n\nfunction convertSpacing(value) {\n if (!hasBrowserEnv()) return value;\n if (value && typeof value === \"object\" && value[UNIT_TOKEN] === UNIT_REM) {\n const remValue =\n typeof value.value === \"number\" ? value.value : parseFloat(value.value);\n if (!Number.isFinite(remValue)) return value;\n return remValue * measureRootFontSize();\n }\n return value;\n}\n\nfunction normalizeBreakpoints(breakpoints) {\n if (!breakpoints || typeof breakpoints !== \"object\") return breakpoints;\n const normalized = {};\n Object.entries(breakpoints).forEach(([key, entry]) => {\n const clone = entry && typeof entry === \"object\" ? {...entry} : {};\n if (Object.prototype.hasOwnProperty.call(clone, \"spaceBetween\")) {\n clone.spaceBetween = convertSpacing(clone.spaceBetween);\n }\n normalized[key] = clone;\n });\n return normalized;\n}\n\nexport function normalizeSliderOptions(options) {\n const clone = cloneOptions(options || {});\n if (!hasBrowserEnv()) return clone;\n if (Object.prototype.hasOwnProperty.call(clone, \"spaceBetween\")) {\n clone.spaceBetween = convertSpacing(clone.spaceBetween);\n }\n if (clone.breakpoints) {\n clone.breakpoints = normalizeBreakpoints(clone.breakpoints);\n }\n return clone;\n}\n", "import React, { useEffect, useState } from \"react\";\n\n// SSR-safe wrapper around Clover's scroll component. The library touches the DOM\n// during import, so we only load it in the browser and render a placeholder on the\n// server for the hydration runtime to mount.\nexport const Scroll = (props) => {\n const [CloverScroll, setCloverScroll] = useState(null);\n\n useEffect(() => {\n let mounted = true;\n const canUseDom =\n typeof window !== \"undefined\" && typeof document !== \"undefined\";\n if (canUseDom) {\n import(\"@samvera/clover-iiif/scroll\")\n .then((mod) => {\n if (!mounted) return;\n const Comp = mod && (mod.default || mod.Scroll || mod);\n setCloverScroll(() => Comp);\n })\n .catch(() => {\n // Silently ignore load errors during SSR or when Clover is unavailable.\n });\n }\n return () => {\n mounted = false;\n };\n }, []);\n\n if (!CloverScroll) {\n // SSR placeholder for client hydration; props provided as JSON\n let json = \"{}\";\n try {\n json = JSON.stringify(props || {});\n } catch (_) {\n json = \"{}\";\n }\n return (\n <div data-canopy-scroll=\"1\" className=\"not-prose\">\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{ __html: json }}\n />\n </div>\n );\n }\n\n return <CloverScroll {...props} />;\n};\n", "import React, {useEffect, useState} from \"react\";\n\n// SSR-safe wrapper around Clover's image component. The module relies on the DOM\n// during import, so we lazy-load it in the browser and render a placeholder on the\n// server for the hydration runtime.\nexport const Image = (props = {}) => {\n const [CloverImage, setCloverImage] = useState(null);\n const baseClass = \"canopy-iiif-image\";\n const {\n height = `600px`,\n backgroundColor = `var(--color-gray-200)`,\n caption,\n className: userClassName,\n } = props || {};\n const rootClassName = [userClassName, baseClass].filter(Boolean).join(\" \");\n\n useEffect(() => {\n let mounted = true;\n const canUseDom =\n typeof window !== \"undefined\" && typeof document !== \"undefined\";\n if (canUseDom) {\n import(\"@samvera/clover-iiif/image\")\n .then((mod) => {\n if (!mounted) return;\n const Comp = mod && (mod.default || mod.Image || mod);\n setCloverImage(() => Comp);\n })\n .catch(() => {\n // Suppress errors during SSR or when the Clover bundle is unavailable.\n });\n }\n return () => {\n mounted = false;\n };\n }, []);\n\n if (!CloverImage) {\n let json = \"{}\";\n try {\n json = JSON.stringify(props || {});\n } catch (_) {\n json = \"{}\";\n }\n\n return (\n <figure className={rootClassName}>\n <div\n className={`${baseClass}__placeholder`}\n data-canopy-image=\"1\"\n style={{\n \"--canopy-iiif-image-height\": height,\n \"--canopy-iiif-image-bg\": backgroundColor,\n }}\n >\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{__html: json}}\n />\n </div>\n {caption && (\n <figcaption className={`${baseClass}__caption`}>\n {caption}\n </figcaption>\n )}\n </figure>\n );\n }\n\n return <CloverImage {...props} className={rootClassName} />;\n};\n", "import React from \"react\";\n\n// SSR-safe placeholder for RelatedItems. Hydrated by canopy-related-items.js + canopy-slider.js\nexport default function MdxRelatedItems(props) {\n let json = \"{}\";\n try {\n json = JSON.stringify(props || {});\n } catch (_) {\n json = \"{}\";\n }\n return (\n <div data-canopy-related-items=\"1\">\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{__html: json}}\n />\n </div>\n );\n}\n", "import React from 'react';\n\nexport default function MdxSearchResults(props) {\n let json = '{}';\n try { json = JSON.stringify(props || {}); } catch (_) { json = '{}'; }\n return (\n <div data-canopy-search-results=\"1\">\n <script type=\"application/json\" dangerouslySetInnerHTML={{ __html: json }} />\n </div>\n );\n}\n\n", "import React from 'react';\n\nexport default function SearchSummary(props) {\n let json = '{}';\n try { json = JSON.stringify(props || {}); } catch (_) { json = '{}'; }\n return (\n <div data-canopy-search-summary=\"1\">\n <script type=\"application/json\" dangerouslySetInnerHTML={{ __html: json }} />\n </div>\n );\n}\n\n", "import React from 'react';\n\nexport default function MdxSearchTabs(props) {\n let json = '{}';\n try { json = JSON.stringify(props || {}); } catch (_) { json = '{}'; }\n return (\n <div data-canopy-search-tabs=\"1\">\n <script type=\"application/json\" dangerouslySetInnerHTML={{ __html: json }} />\n </div>\n );\n}\n\n", "import Grid, { GridItem } from \"../layout/Grid.jsx\";\nimport ArticleCard from \"../layout/ArticleCard.jsx\";\nimport Card from \"../layout/Card.jsx\";\nimport React from \"react\";\n\nfunction DefaultArticleTemplate({ record, query }) {\n if (!record) return null;\n const metadata = Array.isArray(record.metadata) ? record.metadata : [];\n return (\n <ArticleCard\n href={record.href}\n title={record.title || record.href || 'Untitled'}\n annotation={record.annotation}\n summary={record.summary || record.summaryValue || ''}\n summaryMarkdown={record.summaryMarkdown || record.summary || record.summaryValue || ''}\n metadata={metadata}\n query={query}\n recordType={record.type}\n />\n );\n}\n\nfunction DefaultFigureTemplate({ record, thumbnailAspectRatio }) {\n if (!record) return null;\n const hasDims =\n Number.isFinite(Number(record.thumbnailWidth)) &&\n Number(record.thumbnailWidth) > 0 &&\n Number.isFinite(Number(record.thumbnailHeight)) &&\n Number(record.thumbnailHeight) > 0;\n const aspect = Number.isFinite(Number(thumbnailAspectRatio)) && Number(thumbnailAspectRatio) > 0\n ? Number(thumbnailAspectRatio)\n : hasDims\n ? Number(record.thumbnailWidth) / Number(record.thumbnailHeight)\n : undefined;\n return (\n <Card\n href={record.href}\n title={record.title || record.href}\n src={record.type === 'work' ? record.thumbnail : undefined}\n imgWidth={record.thumbnailWidth}\n imgHeight={record.thumbnailHeight}\n aspectRatio={aspect}\n />\n );\n}\n\nexport default function SearchResults({\n results = [],\n type = \"all\",\n layout = \"grid\",\n query = \"\",\n templates = {},\n variant = \"auto\",\n}) {\n if (!results.length) {\n return (\n <div className=\"text-slate-600\">\n <em>No results</em>\n </div>\n );\n }\n\n const normalizedType = String(type || 'all').toLowerCase();\n const normalizedVariant =\n variant === 'figure' || variant === 'article' ? variant : 'auto';\n const isAnnotationView = normalizedType === \"annotation\";\n const FigureTemplate = templates && templates.figure ? templates.figure : DefaultFigureTemplate;\n const ArticleTemplate = templates && templates.article ? templates.article : DefaultArticleTemplate;\n\n if (isAnnotationView) {\n return (\n <div id=\"search-results\" className=\"space-y-4\">\n {results.map((r, i) => {\n if (!r) return null;\n return (\n <ArticleTemplate\n key={r.id || i}\n record={r}\n query={query}\n layout={layout}\n />\n );\n })}\n </div>\n );\n }\n\n const isWorkRecord = (record) => String(record && record.type).toLowerCase() === 'work';\n\n const shouldRenderAsArticle = (record) => {\n if (normalizedVariant === 'article') return true;\n if (normalizedVariant === 'figure') return false;\n return !isWorkRecord(record) || normalizedType !== 'work';\n };\n\n if (layout === \"list\") {\n return (\n <div id=\"search-results\" className=\"space-y-6\">\n {results.map((r, i) => {\n if (shouldRenderAsArticle(r)) {\n return (\n <div key={i} className={`search-result ${r && r.type}`}>\n <ArticleTemplate record={r} query={query} layout={layout} />\n </div>\n );\n }\n const hasDims =\n Number.isFinite(Number(r.thumbnailWidth)) &&\n Number(r.thumbnailWidth) > 0 &&\n Number.isFinite(Number(r.thumbnailHeight)) &&\n Number(r.thumbnailHeight) > 0;\n const aspect = hasDims\n ? Number(r.thumbnailWidth) / Number(r.thumbnailHeight)\n : undefined;\n return (\n <div\n key={i}\n className={`search-result ${r.type}`}\n data-thumbnail-aspect-ratio={aspect}\n >\n <FigureTemplate\n record={r}\n query={query}\n layout={layout}\n thumbnailAspectRatio={aspect}\n />\n </div>\n );\n })}\n </div>\n );\n }\n\n // Default: grid (masonry)\n return (\n <div id=\"search-results\">\n <Grid>\n {results.map((r, i) => {\n if (shouldRenderAsArticle(r)) {\n return (\n <GridItem key={i} className={`search-result ${r && r.type}`}>\n <ArticleTemplate record={r} query={query} layout={layout} />\n </GridItem>\n );\n }\n const hasDims =\n Number.isFinite(Number(r.thumbnailWidth)) &&\n Number(r.thumbnailWidth) > 0 &&\n Number.isFinite(Number(r.thumbnailHeight)) &&\n Number(r.thumbnailHeight) > 0;\n const aspect = hasDims\n ? Number(r.thumbnailWidth) / Number(r.thumbnailHeight)\n : undefined;\n return (\n <GridItem\n key={i}\n className={`search-result ${r.type}`}\n data-thumbnail-aspect-ratio={aspect}\n >\n <FigureTemplate\n record={r}\n query={query}\n layout={layout}\n thumbnailAspectRatio={aspect}\n />\n </GridItem>\n );\n })}\n </Grid>\n </div>\n );\n}\n", "import React, {useRef, useState, useEffect} from \"react\";\n\nexport default function SearchTabs({\n type = \"all\",\n onTypeChange,\n types = [],\n counts = {},\n onOpenFilters,\n activeFilterCount = 0,\n filtersLabel = \"Filters\",\n filtersOpen = false,\n}) {\n const orderedTypes = Array.isArray(types) ? types : [];\n const toLabel = (t) =>\n t && t.length ? t.charAt(0).toUpperCase() + t.slice(1) : \"\";\n\n const hasFilters = typeof onOpenFilters === \"function\";\n const filterBadge = activeFilterCount > 0 ? ` (${activeFilterCount})` : \"\";\n\n // --- highlight state (ported from RadioGroup idea) ---\n const [itemBoundingBox, setItemBoundingBox] = useState(null);\n const [wrapperBoundingBox, setWrapperBoundingBox] = useState(null);\n const [highlightedTab, setHighlightedTab] = useState(null);\n const [isHoveredFromNull, setIsHoveredFromNull] = useState(true);\n\n const wrapperRef = useRef(null);\n const highlightRef = useRef(null);\n\n const repositionHighlight = (e, tabKey) => {\n if (!tabKey || !wrapperRef.current) return;\n\n // use currentTarget so we get the <button>, not the inner text node\n const item = e.currentTarget;\n setItemBoundingBox(item.getBoundingClientRect());\n setWrapperBoundingBox(wrapperRef.current.getBoundingClientRect());\n setIsHoveredFromNull(!highlightedTab);\n setHighlightedTab(tabKey);\n };\n\n const resetHighlight = () => {\n setHighlightedTab(null);\n };\n\n // Optional: snap highlight to the active tab when `type` changes\n useEffect(() => {\n if (!wrapperRef.current) return;\n const activeButton = wrapperRef.current.querySelector(\n `button[data-tab-value=\"${type}\"]`\n );\n if (!activeButton) return;\n\n const itemBox = activeButton.getBoundingClientRect();\n const wrapperBox = wrapperRef.current.getBoundingClientRect();\n\n setItemBoundingBox(itemBox);\n setWrapperBoundingBox(wrapperBox);\n setIsHoveredFromNull(true);\n setHighlightedTab(type);\n }, [type]);\n\n let highlightStyles = {};\n if (itemBoundingBox && wrapperBoundingBox) {\n highlightStyles = {\n opacity: highlightedTab ? 1 : 0,\n transform: `translateX(${itemBoundingBox.left - wrapperBoundingBox.left}px)`,\n transitionDuration: isHoveredFromNull ? \"0ms\" : \"200ms\",\n width: `${itemBoundingBox.width}px`,\n };\n }\n\n return (\n <div className=\"canopy-search-tabs-wrapper\">\n <div\n role=\"tablist\"\n aria-label=\"Search types\"\n className=\"canopy-search-tabs\"\n ref={wrapperRef}\n onMouseLeave={resetHighlight}\n >\n {/* moving highlight */}\n <div\n ref={highlightRef}\n className=\"canopy-search-tabs__highlight\"\n style={highlightStyles}\n />\n\n {orderedTypes.map((t) => {\n const active = String(type).toLowerCase() === String(t).toLowerCase();\n const cRaw =\n counts && Object.prototype.hasOwnProperty.call(counts, t)\n ? counts[t]\n : undefined;\n const c = Number.isFinite(Number(cRaw)) ? Number(cRaw) : 0;\n return (\n <button\n key={t}\n role=\"tab\"\n aria-selected={active}\n type=\"button\"\n data-tab-value={t}\n onClick={() => onTypeChange && onTypeChange(t)}\n onMouseOver={(e) => repositionHighlight(e, t)}\n className={`canopy-search-tab ${active ? \"is-active\" : \"\"}`}\n >\n {toLabel(t)} ({c})\n </button>\n );\n })}\n </div>\n\n {hasFilters ? (\n <button\n type=\"button\"\n onClick={() => onOpenFilters && onOpenFilters()}\n aria-expanded={filtersOpen ? \"true\" : \"false\"}\n className=\"inline-flex items-center gap-2 rounded-md border border-slate-200 bg-white px-3 py-1.5 text-sm font-medium text-slate-700 shadow-sm transition hover:border-brand-200 hover:bg-brand-50 hover:text-brand-700\"\n >\n <span>\n {filtersLabel}\n {filterBadge}\n </span>\n </button>\n ) : null}\n </div>\n );\n}\n", "import React from \"react\";\nimport CanopyModal from \"../layout/CanopyModal.jsx\";\n\nfunction toArray(input) {\n if (!input) return [];\n if (Array.isArray(input)) return input;\n return [input];\n}\n\nfunction normalizeSelected(selected = {}) {\n const map = new Map();\n if (selected && typeof selected === \"object\") {\n Object.keys(selected).forEach((key) => {\n const vals = new Set(toArray(selected[key]).map((v) => String(v)));\n if (vals.size) map.set(String(key), vals);\n });\n }\n return map;\n}\n\nfunction facetMatches(values = [], query) {\n const q = String(query || \"\")\n .trim()\n .toLowerCase();\n if (!q) return values;\n const starts = [];\n const contains = [];\n values.forEach((entry) => {\n if (!entry || !entry.value) return;\n const value = String(entry.value);\n const slug = String(entry.slug || entry.value || \"\");\n const match = value.toLowerCase();\n if (match.startsWith(q))\n starts.push({value, slug, doc_count: entry.doc_count});\n else if (match.includes(q))\n contains.push({value, slug, doc_count: entry.doc_count});\n });\n return [...starts, ...contains].slice(0, 10);\n}\n\nfunction FacetSection({facet, selected, onToggle}) {\n if (!facet || !facet.label || !Array.isArray(facet.values)) return null;\n const {label, slug, values} = facet;\n const selectedValues = selected.get(String(slug)) || new Set();\n const checkboxId = (valueSlug) => `filter-${slug}-${valueSlug}`;\n const hasSelection = selectedValues.size > 0;\n const [quickQuery, setQuickQuery] = React.useState(\"\");\n const hasQuery = quickQuery.trim().length > 0;\n const filteredValues = React.useMemo(\n () => facetMatches(values, quickQuery),\n [values, quickQuery]\n );\n\n return (\n <details\n className=\"canopy-search-filters__facet\"\n open={hasSelection}\n >\n <summary className=\"canopy-search-filters__facet-summary\">\n <span>{label}</span>\n <span className=\"canopy-search-filters__facet-count\">\n {values.length}\n </span>\n </summary>\n <div className=\"canopy-search-filters__facet-content\">\n <div className=\"canopy-search-filters__quick\">\n <input\n type=\"search\"\n value={quickQuery}\n onChange={(event) => setQuickQuery(event.target.value)}\n placeholder=\"Search values\"\n className=\"canopy-search-filters__quick-input\"\n aria-label={`Filter ${label} values`}\n />\n {quickQuery ? (\n <button\n type=\"button\"\n onClick={() => setQuickQuery(\"\")}\n className=\"canopy-search-filters__quick-clear\"\n >\n Clear\n </button>\n ) : null}\n </div>\n {hasQuery && !filteredValues.length ? (\n <p className=\"canopy-search-filters__facet-notice\">No matches found.</p>\n ) : null}\n <ul className=\"canopy-search-filters__facet-list\">\n {filteredValues.map((entry) => {\n const valueSlug = String(entry.slug || entry.value || \"\");\n const isChecked = selectedValues.has(valueSlug);\n const inputId = checkboxId(valueSlug);\n return (\n <li key={valueSlug} className=\"canopy-search-filters__facet-item\">\n <input\n id={inputId}\n type=\"checkbox\"\n className=\"canopy-search-filters__facet-checkbox\"\n checked={isChecked}\n onChange={(event) => {\n const nextChecked = !!event.target.checked;\n if (onToggle) onToggle(slug, valueSlug, nextChecked);\n }}\n />\n <label\n htmlFor={inputId}\n className=\"canopy-search-filters__facet-label\"\n >\n <span>\n {entry.value}{\" \"}\n {Number.isFinite(entry.doc_count) ? (\n <span className=\"canopy-search-filters__facet-count\">\n ({entry.doc_count})\n </span>\n ) : null}\n </span>\n </label>\n </li>\n );\n })}\n {!filteredValues.length && !hasQuery ? (\n <li className=\"canopy-search-filters__facet-empty\">No values available.</li>\n ) : null}\n </ul>\n </div>\n </details>\n );\n}\n\nexport default function SearchFiltersDialog(props = {}) {\n const {\n open = false,\n onOpenChange,\n facets = [],\n selected = {},\n onToggle,\n onClear,\n title,\n subtitle = \"Refine results by metadata\",\n brandLabel = \"Canopy IIIF\",\n brandHref = \"/\",\n logo: SiteLogo,\n } = props;\n\n const selectedMap = normalizeSelected(selected);\n const activeCount = Array.from(selectedMap.values()).reduce(\n (total, set) => total + set.size,\n 0\n );\n\n React.useEffect(() => {\n if (!open) return undefined;\n if (typeof document === \"undefined\") return undefined;\n const body = document.body;\n const root = document.documentElement;\n const prevBody = body ? body.style.overflow : \"\";\n const prevRoot = root ? root.style.overflow : \"\";\n if (body) body.style.overflow = \"hidden\";\n if (root) root.style.overflow = \"hidden\";\n return () => {\n if (body) body.style.overflow = prevBody;\n if (root) root.style.overflow = prevRoot;\n };\n }, [open]);\n\n if (!open) return null;\n\n const brandId = \"canopy-modal-filters-label\";\n const subtitleText = subtitle != null ? subtitle : title;\n\n return (\n <CanopyModal\n id=\"canopy-modal-filters\"\n variant=\"filters\"\n open\n labelledBy={brandId}\n label={brandLabel}\n logo={SiteLogo}\n href={brandHref}\n closeLabel=\"Close filters\"\n onClose={() => onOpenChange && onOpenChange(false)}\n onBackgroundClick={() => onOpenChange && onOpenChange(false)}\n bodyClassName=\"canopy-modal__body--filters\"\n >\n {subtitleText ? (\n <p className=\"canopy-search-filters__subtitle\">{subtitleText}</p>\n ) : null}\n <div className=\"canopy-search-filters__body\">\n {Array.isArray(facets) && facets.length ? (\n <div className=\"canopy-search-filters__facets\">\n {facets.map((facet) => (\n <FacetSection\n key={facet.slug || facet.label}\n facet={facet}\n selected={selectedMap}\n onToggle={onToggle}\n />\n ))}\n </div>\n ) : (\n <p className=\"canopy-search-filters__empty\">\n No filters are available for this collection.\n </p>\n )}\n </div>\n <footer className=\"canopy-search-filters__footer\">\n <div>\n {activeCount\n ? `${activeCount} filter${activeCount === 1 ? '' : 's'} applied`\n : 'No filters applied'}\n </div>\n <div className=\"canopy-search-filters__footer-actions\">\n <button\n type=\"button\"\n onClick={() => {\n if (onClear) onClear();\n }}\n disabled={!activeCount}\n className=\"canopy-search-filters__button canopy-search-filters__button--secondary\"\n >\n Clear all\n </button>\n <button\n type=\"button\"\n onClick={() => onOpenChange && onOpenChange(false)}\n className=\"canopy-search-filters__button canopy-search-filters__button--primary\"\n >\n Done\n </button>\n </div>\n </footer>\n </CanopyModal>\n );\n}\n", "import React from 'react';\nimport SearchPanelForm, { resolveSearchPath } from '../search/SearchPanelForm.jsx';\nimport SearchPanelTeaserResults from '../search/SearchPanelTeaserResults.jsx';\n\n// SSR-safe placeholder for the search form modal, composed from SearchPanel parts.\n// This ensures a single JSX source of truth for form/panel markup.\nexport default function MdxSearchFormModal(props = {}) {\n const {\n placeholder = 'Search\u2026',\n hotkey = 'mod+k',\n maxResults = 8,\n groupOrder = ['work', 'page'],\n button = true, // kept for backward compat; ignored by teaser form\n buttonLabel = 'Search',\n label,\n searchPath = '/search',\n } = props || {};\n\n const text = typeof label === 'string' && label.trim() ? label.trim() : buttonLabel;\n const resolvedSearchPath = resolveSearchPath(searchPath);\n const data = { placeholder, hotkey, maxResults, groupOrder, label: text, searchPath: resolvedSearchPath };\n return (\n <div data-canopy-search-form className=\"flex-1 min-w-0\">\n <div className=\"relative w-full\">\n <SearchPanelForm placeholder={placeholder} buttonLabel={buttonLabel} label={label} searchPath={resolvedSearchPath} />\n <SearchPanelTeaserResults />\n </div>\n <script type=\"application/json\" dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }} />\n </div>\n );\n}\n", "import React from 'react';\n\nexport default function MarkdownTable({ className = '', ...rest }) {\n const merged = ['markdown-table', className].filter(Boolean).join(' ');\n return (\n <div className=\"markdown-table__frame\">\n <table className={merged} {...rest} />\n </div>\n );\n}\n", "import React from \"react\";\n\nexport function CanopyDiagram() {\n return (\n <div className=\"canopy-diagram\">\n <section className=\"canopy-diagram__section canopy-diagram__section--collections\">\n <h3>IIIF Collection(s)</h3>\n <span className=\"canopy-diagram__section-summary\">\n Source collections contribute 105 total manifests that Canopy\n retrieves as-is via IIIF endpoints.\n </span>\n <div className=\"canopy-diagram__grid\">\n <article>\n <h4>Collection A</h4>\n <ul>\n <li>70 Manifests</li>\n <li>IIIF Images + A/V</li>\n <li>Textual Annotations</li>\n </ul>\n </article>\n <article>\n <h4>Collection B</h4>\n <ul>\n <li>35 Manifests</li>\n <li>IIIF Images + A/V</li>\n <li>Textual Annotations</li>\n </ul>\n </article>\n </div>\n </section>\n\n <div className=\"canopy-diagram__arrow\" aria-hidden=\"true\">\n <span className=\"canopy-diagram__arrow-line\" />\n <span className=\"canopy-diagram__arrow-head\" />\n </div>\n\n <section className=\"canopy-diagram__section canopy-diagram__section--build\">\n <h3>Canopy Build Process</h3>\n <span className=\"canopy-diagram__section-summary\">\n Canopy syncs manifests, page content, and annotations before bundling\n the site.\n </span>\n <div className=\"canopy-diagram__grid\">\n <article>\n <h4>Automated content</h4>\n <ul>\n <li>105 manifests \u2192 105 work pages</li>\n <li>One page per manifest</li>\n <li>Customize page layout</li>\n </ul>\n </article>\n <article>\n <h4>Contextual content</h4>\n <ul>\n <li>Markdown &amp; MDX pages</li>\n <li>Author narratives &amp; tours</li>\n <li>Reference manifests inline</li>\n </ul>\n </article>\n <article>\n <h4>Search index</h4>\n <ul>\n <li>Combines works + pages</li>\n <li>Customize result layout</li>\n <li>Optional annotations</li>\n </ul>\n </article>\n </div>\n </section>\n\n <div className=\"canopy-diagram__arrow\" aria-hidden=\"true\">\n <span className=\"canopy-diagram__arrow-line\" />\n <span className=\"canopy-diagram__arrow-head\" />\n </div>\n\n <section className=\"canopy-diagram__section canopy-diagram__section--output\">\n <h3>Static Digital Project</h3>\n <span className=\"canopy-diagram__section-summary\">\n The output is a lightweight bundle of HTML, CSS, JS, and JSON assets\n that can deploy anywhere.\n </span>\n <div className=\"canopy-diagram__grid\">\n <article>\n <h4>Work pages</h4>\n <ul>\n <li>105 generated HTML pages</li>\n <li>Each links back to source manifests</li>\n <li>Styled with Canopy components</li>\n </ul>\n </article>\n <article>\n <h4>Custom pages</h4>\n <ul>\n <li>Markdown &amp; MDX-authored content</li>\n <li>Reusable layouts for narratives</li>\n <li>Embed IIIF media &amp; interstitials</li>\n </ul>\n </article>\n <article>\n <h4>Search bundle</h4>\n <ul>\n <li>Static FlexSearch index</li>\n <li>Works + pages share records</li>\n <li>Optional annotation dataset</li>\n </ul>\n </article>\n </div>\n </section>\n </div>\n );\n}\n", "import React from \"react\";\nimport {\n createLocale,\n normalizeRange,\n clampProgress,\n formatDateLabel,\n} from \"./date-utils.js\";\nimport TeaserCard from \"../../layout/TeaserCard.jsx\";\n\nconst DAY_MS = 24 * 60 * 60 * 1000;\nconst DEFAULT_TRACK_HEIGHT = 640;\nconst MIN_HEIGHT_PER_POINT = 220;\n\nfunction getThresholdMs(threshold, granularity) {\n const value = Number(threshold);\n if (!Number.isFinite(value) || value <= 0) return 0;\n if (granularity === \"day\") return value * DAY_MS;\n if (granularity === \"month\") return value * 30 * DAY_MS;\n return value * 365 * DAY_MS;\n}\n\nfunction buildGroupedEntries(points, thresholdMs, options) {\n if (!Array.isArray(points) || !points.length) return [];\n if (!thresholdMs) return points.map((point) => ({type: \"point\", point}));\n\n const entries = [];\n let currentGroup = null;\n let groupCounter = 0;\n\n function flush() {\n if (!currentGroup) return;\n if (currentGroup.points.length > 1) {\n const firstPoint = currentGroup.points[0];\n entries.push({\n type: \"group\",\n id: `canopy-timeline-group-${groupCounter}-${currentGroup.start}`,\n points: currentGroup.points,\n progress: firstPoint.progress,\n side: firstPoint.side,\n label: formatGroupLabel(currentGroup.start, currentGroup.end, options),\n count: currentGroup.points.length,\n });\n groupCounter += 1;\n } else {\n entries.push({type: \"point\", point: currentGroup.points[0]});\n }\n currentGroup = null;\n }\n\n points.forEach((point) => {\n const timestamp = point && point.meta ? point.meta.timestamp : null;\n if (!Number.isFinite(timestamp)) {\n flush();\n if (point) entries.push({type: \"point\", point});\n return;\n }\n if (!currentGroup) {\n currentGroup = {\n points: [point],\n start: timestamp,\n end: timestamp,\n last: timestamp,\n };\n return;\n }\n const diff = Math.abs(timestamp - currentGroup.last);\n if (diff <= thresholdMs) {\n currentGroup.points.push(point);\n currentGroup.last = timestamp;\n if (timestamp < currentGroup.start) currentGroup.start = timestamp;\n if (timestamp > currentGroup.end) currentGroup.end = timestamp;\n } else {\n flush();\n currentGroup = {\n points: [point],\n start: timestamp,\n end: timestamp,\n last: timestamp,\n };\n }\n });\n\n flush();\n return entries;\n}\n\nfunction formatGroupLabel(startTs, endTs, options) {\n if (!Number.isFinite(startTs) || !Number.isFinite(endTs)) return \"\";\n const startLabel = formatDateLabel(new Date(startTs), options);\n const endLabel = formatDateLabel(new Date(endTs), options);\n if (!startLabel || !endLabel) return \"\";\n return startLabel === endLabel ? startLabel : `${startLabel} \u2013 ${endLabel}`;\n}\n\nfunction deriveRangeOverrides(points, range) {\n const timestamps = points\n .map((point) => (point && point.meta ? point.meta.timestamp : null))\n .filter((timestamp) => Number.isFinite(timestamp));\n if (!timestamps.length) return range || {};\n const earliest = Math.min(...timestamps);\n const latest = Math.max(...timestamps);\n return {\n ...range,\n start: range && range.start ? range.start : new Date(earliest),\n end: range && range.end ? range.end : new Date(latest),\n };\n}\n\nfunction getActivePointId(points) {\n const highlighted = points.find((point) => point && point.highlight);\n if (highlighted) return highlighted.id;\n return points.length ? points[0].id : null;\n}\n\nfunction formatRangeLabel(rangeInfo) {\n if (!rangeInfo) return \"\";\n const startLabel = formatDateLabel(rangeInfo.startDate, {\n granularity: rangeInfo.granularity,\n locale: rangeInfo.locale,\n });\n const endLabel = formatDateLabel(rangeInfo.endDate, {\n granularity: rangeInfo.granularity,\n locale: rangeInfo.locale,\n });\n if (!startLabel || !endLabel) return \"\";\n if (startLabel === endLabel) return startLabel;\n return `${startLabel} \u2013 ${endLabel}`;\n}\n\nfunction sanitizePoints(points) {\n if (!Array.isArray(points)) return [];\n return points\n .map((point, index) => {\n if (!point) return null;\n const meta = point.meta || {};\n const timestamp = Number(meta.timestamp);\n const manifests = Array.isArray(point.manifests)\n ? point.manifests\n .map((manifest) => (manifest ? {...manifest} : null))\n .filter(Boolean)\n : [];\n const resources = Array.isArray(point.resources)\n ? point.resources.filter(Boolean)\n : [];\n return {\n ...point,\n id: point.id || `timeline-point-${index}`,\n title: point.title || point.label || `Point ${index + 1}`,\n summary: point.summary || point.description || \"\",\n detailsHtml: point.detailsHtml || \"\",\n highlight: !!point.highlight,\n side:\n point.side === \"left\" || point.side === \"right\" ? point.side : null,\n meta: {\n label: meta.label || \"\",\n timestamp: Number.isFinite(timestamp) ? timestamp : null,\n },\n manifests,\n resources,\n };\n })\n .filter(Boolean);\n}\n\nfunction resolveTrackHeight(height, pointCount) {\n const minimumPx = Math.max(\n DEFAULT_TRACK_HEIGHT,\n pointCount * MIN_HEIGHT_PER_POINT\n );\n const fallback = `${minimumPx}px`;\n if (height == null) return fallback;\n if (typeof height === \"number\") {\n const numeric = Number(height);\n if (Number.isFinite(numeric)) {\n return `${Math.max(numeric, pointCount * MIN_HEIGHT_PER_POINT)}px`;\n }\n return fallback;\n }\n if (typeof height === \"string\") {\n const trimmed = height.trim();\n if (!trimmed) return fallback;\n const numeric = Number(trimmed);\n if (Number.isFinite(numeric)) {\n return `${Math.max(numeric, pointCount * MIN_HEIGHT_PER_POINT)}px`;\n }\n return trimmed;\n }\n return fallback;\n}\n\nfunction TimelineConnector({side, isActive, highlight}) {\n const connectorClasses = [\n \"canopy-timeline__connector\",\n side === \"left\"\n ? \"canopy-timeline__connector--left\"\n : \"canopy-timeline__connector--right\",\n ]\n .filter(Boolean)\n .join(\" \");\n const dotClasses = [\n \"canopy-timeline__connector-dot\",\n highlight || isActive ? \"is-active\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <span className={connectorClasses} aria-hidden=\"true\">\n {side === \"left\" ? (\n <>\n <span className=\"canopy-timeline__connector-line\" />\n <span className={dotClasses} />\n </>\n ) : (\n <>\n <span className={dotClasses} />\n <span className=\"canopy-timeline__connector-line\" />\n </>\n )}\n </span>\n );\n}\n\nfunction renderResourceSection(point) {\n if (!point) return null;\n const manifestCards = Array.isArray(point.manifests)\n ? point.manifests.filter(Boolean)\n : [];\n const legacyResources = Array.isArray(point.resources)\n ? point.resources.filter(Boolean)\n : [];\n if (!manifestCards.length && !legacyResources.length) return null;\n return (\n <div className=\"canopy-timeline__resources\">\n <div className=\"canopy-timeline__resources-list\">\n {manifestCards.map((manifest) => (\n <div key={manifest.id || manifest.href}>\n <TeaserCard\n href={manifest.href}\n title={manifest.title || manifest.href}\n summary={manifest.summary}\n metadata={\n Array.isArray(manifest.metadata) && manifest.metadata.length\n ? manifest.metadata\n : manifest.summary\n ? [manifest.summary]\n : []\n }\n thumbnail={manifest.thumbnail}\n type={manifest.type || \"work\"}\n />\n </div>\n ))}\n {legacyResources.map((resource, idx) => (\n <div key={resource.id || resource.href || `legacy-${idx}`}>\n <TeaserCard\n href={resource.href}\n title={resource.label || resource.title || resource.href}\n summary={resource.summary}\n thumbnail={resource.thumbnail}\n type={resource.type || \"resource\"}\n />\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nexport default function Timeline({\n className = \"\",\n title,\n description,\n range: rangeProp,\n locale: localeProp = \"en-US\",\n height = DEFAULT_TRACK_HEIGHT,\n threshold: thresholdProp = null,\n steps = null,\n points: pointsProp,\n __canopyTimeline: payload = null,\n ...rest\n}) {\n const payloadPoints =\n payload && Array.isArray(payload.points) ? payload.points : null;\n const rawPoints = React.useMemo(() => {\n if (Array.isArray(pointsProp) && pointsProp.length) return pointsProp;\n if (payloadPoints && payloadPoints.length) return payloadPoints;\n return [];\n }, [pointsProp, payloadPoints]);\n\n const sanitizedPoints = React.useMemo(\n () => sanitizePoints(rawPoints),\n [rawPoints]\n );\n\n const localeValue = payload && payload.locale ? payload.locale : localeProp;\n const baseLocale = React.useMemo(\n () => createLocale(localeValue),\n [localeValue]\n );\n\n const rangeInput = payload && payload.range ? payload.range : rangeProp || {};\n const rangeOverrides = React.useMemo(\n () => deriveRangeOverrides(sanitizedPoints, rangeInput),\n [sanitizedPoints, rangeInput]\n );\n const effectiveRange = React.useMemo(\n () =>\n normalizeRange({\n ...rangeOverrides,\n locale: baseLocale,\n }),\n [rangeOverrides, baseLocale]\n );\n\n const spanStart = effectiveRange.startDate.getTime();\n const span = effectiveRange.span;\n\n const pointsWithPosition = React.useMemo(() => {\n if (!sanitizedPoints.length) return [];\n return sanitizedPoints.map((point, index) => {\n const timestamp = point.meta.timestamp;\n const fallbackProgress =\n sanitizedPoints.length > 1 ? index / (sanitizedPoints.length - 1) : 0;\n const progress = Number.isFinite(timestamp)\n ? clampProgress((timestamp - spanStart) / span)\n : fallbackProgress;\n const side = point.side || (index % 2 === 0 ? \"left\" : \"right\");\n return {\n ...point,\n progress,\n side,\n };\n });\n }, [sanitizedPoints, spanStart, span]);\n\n const [activeId, setActiveId] = React.useState(() =>\n getActivePointId(pointsWithPosition)\n );\n\n React.useEffect(() => {\n setActiveId(getActivePointId(pointsWithPosition));\n }, [pointsWithPosition]);\n\n const thresholdValue =\n typeof thresholdProp === \"number\"\n ? thresholdProp\n : payload && payload.threshold != null\n ? payload.threshold\n : null;\n const stepsValue =\n typeof steps === \"number\"\n ? Number(steps)\n : payload && typeof payload.steps === \"number\"\n ? Number(payload.steps)\n : null;\n\n const thresholdMs = React.useMemo(\n () => getThresholdMs(thresholdValue, effectiveRange.granularity),\n [thresholdValue, effectiveRange.granularity]\n );\n\n const groupedEntries = React.useMemo(\n () =>\n buildGroupedEntries(pointsWithPosition, thresholdMs, {\n granularity: effectiveRange.granularity,\n locale: baseLocale,\n }),\n [pointsWithPosition, thresholdMs, effectiveRange.granularity, baseLocale]\n );\n\n const [expandedGroupIds, setExpandedGroupIds] = React.useState(\n () => new Set()\n );\n\n React.useEffect(() => {\n setExpandedGroupIds((prev) => {\n if (!prev || prev.size === 0) return prev;\n const validIds = new Set(\n groupedEntries\n .filter((entry) => entry.type === \"group\")\n .map((entry) => entry.id)\n );\n const next = new Set();\n let changed = false;\n prev.forEach((id) => {\n if (validIds.has(id)) next.add(id);\n else changed = true;\n });\n return changed ? next : prev;\n });\n }, [groupedEntries]);\n\n const toggleGroup = React.useCallback((groupId) => {\n setExpandedGroupIds((prev) => {\n const next = new Set(prev || []);\n if (next.has(groupId)) next.delete(groupId);\n else next.add(groupId);\n return next;\n });\n }, []);\n\n const trackHeight = resolveTrackHeight(height, pointsWithPosition.length);\n const containerClasses = [\"canopy-timeline\", className]\n .filter(Boolean)\n .join(\" \");\n const rangeLabel = formatRangeLabel(effectiveRange);\n\n function renderPointEntry(point) {\n if (!point) return null;\n const wrapperClasses = [\n \"canopy-timeline__point-wrapper\",\n point.side === \"left\"\n ? \"canopy-timeline__point-wrapper--left\"\n : \"canopy-timeline__point-wrapper--right\",\n ]\n .filter(Boolean)\n .join(\" \");\n const wrapperStyle = {top: `${point.progress * 100}%`};\n const cardClasses = [\n \"canopy-timeline__point\",\n point.id === activeId ? \"is-active\" : \"\",\n point.highlight ? \"is-highlighted\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n const connector = (\n <TimelineConnector\n side={point.side}\n isActive={point.id === activeId}\n highlight={point.highlight}\n />\n );\n\n const body = (\n <div className=\"canopy-timeline__point-body\">\n <span className=\"canopy-timeline__point-date\">{point.meta.label}</span>\n <span className=\"canopy-timeline__point-title\">{point.title}</span>\n {point.summary ? (\n <span className=\"canopy-timeline__point-summary\">\n {point.summary}\n </span>\n ) : null}\n </div>\n );\n const resourceSection = renderResourceSection(point);\n\n return (\n <div\n key={point.id}\n className={wrapperClasses}\n style={wrapperStyle}\n role=\"listitem\"\n >\n {point.side === \"left\" ? (\n <>\n <div className={cardClasses}>\n {body}\n {resourceSection}\n </div>\n {connector}\n </>\n ) : (\n <>\n {connector}\n <div className={cardClasses}>\n {body}\n {resourceSection}\n </div>\n </>\n )}\n </div>\n );\n }\n\n function renderGroupEntry(entry) {\n const wrapperClasses = [\n \"canopy-timeline__point-wrapper\",\n entry.side === \"left\"\n ? \"canopy-timeline__point-wrapper--left\"\n : \"canopy-timeline__point-wrapper--right\",\n ]\n .filter(Boolean)\n .join(\" \");\n const wrapperStyle = {top: `${entry.progress * 100}%`};\n const isExpanded = expandedGroupIds.has(entry.id);\n const hasActivePoint = entry.points.some((point) => point.id === activeId);\n const connector = (\n <TimelineConnector\n side={entry.side}\n isActive={hasActivePoint}\n highlight={hasActivePoint}\n />\n );\n const groupClasses = [\n \"canopy-timeline__group\",\n isExpanded ? \"is-expanded\" : \"\",\n hasActivePoint ? \"is-active\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n const countLabel = `${entry.count} event${entry.count > 1 ? \"s\" : \"\"}`;\n\n const header = (\n <div className=\"canopy-timeline__group-header\">\n <div className=\"canopy-timeline__group-summary\">\n <span className=\"canopy-timeline__point-date\">{entry.label}</span>\n <span className=\"canopy-timeline__group-count\">{countLabel}</span>\n </div>\n <button\n type=\"button\"\n className=\"canopy-timeline__group-toggle\"\n aria-expanded={isExpanded ? \"true\" : \"false\"}\n onClick={() => toggleGroup(entry.id)}\n >\n {isExpanded ? \"Hide details\" : \"Show details\"}\n </button>\n </div>\n );\n\n const groupPoints = isExpanded ? (\n <div className=\"canopy-timeline__group-points\">\n {entry.points.map((point) => (\n <button\n key={point.id}\n type=\"button\"\n className={[\n \"canopy-timeline__group-point\",\n point.id === activeId ? \"is-active\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n onClick={() => setActiveId(point.id)}\n >\n <span className=\"canopy-timeline__point-date\">\n {point.meta.label}\n </span>\n <span className=\"canopy-timeline__group-point-title\">\n {point.title}\n </span>\n </button>\n ))}\n </div>\n ) : null;\n\n const groupCard = (\n <div className={groupClasses}>\n {header}\n {groupPoints}\n </div>\n );\n\n return (\n <div\n key={entry.id}\n className={wrapperClasses}\n style={wrapperStyle}\n role=\"listitem\"\n >\n {entry.side === \"left\" ? (\n <>\n {groupCard}\n {connector}\n </>\n ) : (\n <>\n {connector}\n {groupCard}\n </>\n )}\n </div>\n );\n }\n\n return (\n <section className={containerClasses} {...rest}>\n {title ? <h2 className=\"canopy-timeline__title\">{title}</h2> : null}\n {description ? (\n <p className=\"canopy-timeline__description\">{description}</p>\n ) : null}\n {rangeLabel ? (\n <p className=\"canopy-timeline__range\" aria-live=\"polite\">\n {rangeLabel}\n </p>\n ) : null}\n <div className=\"canopy-timeline__body\">\n <div\n className=\"canopy-timeline__list\"\n role=\"list\"\n style={{minHeight: trackHeight}}\n >\n <div className=\"canopy-timeline__spine\" aria-hidden=\"true\" />\n {renderSteps(stepsValue, effectiveRange)}\n {groupedEntries.map((entry) => {\n if (entry.type === \"group\") return renderGroupEntry(entry);\n return renderPointEntry(entry.point);\n })}\n </div>\n </div>\n </section>\n );\n}\n\nfunction renderSteps(stepSize, range) {\n if (!Number.isFinite(stepSize) || stepSize <= 0 || !range) return null;\n const startYear = range.startDate.getUTCFullYear();\n const endYear = range.endDate.getUTCFullYear();\n const markers = [];\n if (startYear < endYear) {\n markers.push(\n <span\n key=\"timeline-step-start\"\n className=\"canopy-timeline__step canopy-timeline__step--start\"\n style={{top: \"0%\"}}\n aria-hidden=\"true\"\n >\n <span className=\"canopy-timeline__step-line\" />\n <span className=\"canopy-timeline__step-label\">{startYear}</span>\n </span>\n );\n markers.push(\n <span\n key=\"timeline-step-end\"\n className=\"canopy-timeline__step canopy-timeline__step--end\"\n style={{top: \"100%\"}}\n aria-hidden=\"true\"\n >\n <span className=\"canopy-timeline__step-line\" />\n <span className=\"canopy-timeline__step-label\">{endYear}</span>\n </span>\n );\n }\n const baseYear = Math.ceil(startYear / stepSize) * stepSize;\n for (let year = baseYear; year <= endYear; year += stepSize) {\n const timestamp = Date.UTC(year, 0, 1);\n const progress = (timestamp - range.startDate.getTime()) / range.span;\n if (progress <= 0 || progress >= 1) continue;\n markers.push(\n <span\n key={`timeline-step-${year}`}\n className=\"canopy-timeline__step\"\n style={{top: `calc(${progress * 100}% - 0.5px)`}}\n aria-hidden=\"true\"\n >\n <span className=\"canopy-timeline__step-line\" />\n <span className=\"canopy-timeline__step-label\">{year}</span>\n </span>\n );\n }\n return markers.length ? markers : null;\n}\n", "const FALLBACK_LOCALE = (() => {\n try {\n return new Intl.Locale(\"en-US\");\n } catch (_) {\n return \"en-US\";\n }\n})();\n\nexport function createLocale(localeValue) {\n if (!localeValue) return FALLBACK_LOCALE;\n if (typeof Intl !== \"undefined\" && localeValue instanceof Intl.Locale)\n return localeValue;\n try {\n return new Intl.Locale(localeValue);\n } catch (_) {\n return FALLBACK_LOCALE;\n }\n}\n\nfunction parseMonthIndex(name = \"\", locale = FALLBACK_LOCALE) {\n const localeId =\n typeof locale === \"string\" ? locale : locale && locale.baseName\n ? locale.baseName\n : \"en-US\";\n const normalized = String(name || \"\")\n .trim()\n .toLocaleLowerCase(localeId);\n if (!normalized) return 0;\n const months = [\n \"january\",\n \"february\",\n \"march\",\n \"april\",\n \"may\",\n \"june\",\n \"july\",\n \"august\",\n \"september\",\n \"october\",\n \"november\",\n \"december\",\n ];\n const idx = months.indexOf(normalized);\n return idx === -1 ? 0 : idx;\n}\n\nfunction parseStructuredInput(value) {\n if (!value || typeof value !== \"object\") return null;\n const {year, month, day} = value;\n if (!Number.isFinite(Number(year))) return null;\n const y = Number(year);\n const m = Number.isFinite(Number(month)) ? Number(month) - 1 : 0;\n const d = Number.isFinite(Number(day)) ? Number(day) : 1;\n return new Date(Date.UTC(y, Math.max(0, Math.min(11, m)), Math.max(1, Math.min(31, d))));\n}\n\nexport function createDateFromInput(value, {locale} = {}) {\n const loc = createLocale(locale);\n if (value instanceof Date) return new Date(value.getTime());\n if (Number.isFinite(Number(value))) {\n const year = Number(value);\n return new Date(Date.UTC(year, 0, 1));\n }\n if (value && typeof value === \"object\") {\n const structured = parseStructuredInput(value);\n if (structured) return structured;\n }\n const text = typeof value === \"string\" ? value.trim() : \"\";\n if (!text) return null;\n const isoYear = text.match(/^(\\d{4})$/);\n if (isoYear) {\n return new Date(Date.UTC(Number(isoYear[1]), 0, 1));\n }\n const isoYearMonth = text.match(/^(\\d{4})-(\\d{2})$/);\n if (isoYearMonth) {\n return new Date(\n Date.UTC(Number(isoYearMonth[1]), Number(isoYearMonth[2]) - 1, 1)\n );\n }\n const isoDate = text.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (isoDate) {\n return new Date(\n Date.UTC(\n Number(isoDate[1]),\n Number(isoDate[2]) - 1,\n Number(isoDate[3])\n )\n );\n }\n const monthDayYear = text.match(/^([A-Za-z]+)\\s+(\\d{1,2})(?:,)?\\s*(\\d{4})$/);\n if (monthDayYear) {\n const month = parseMonthIndex(monthDayYear[1], loc);\n const day = Number(monthDayYear[2]);\n const year = Number(monthDayYear[3]);\n return new Date(Date.UTC(year, month, day));\n }\n const monthYear = text.match(/^([A-Za-z]+)\\s+(\\d{4})$/);\n if (monthYear) {\n const month = parseMonthIndex(monthYear[1], loc);\n const year = Number(monthYear[2]);\n return new Date(Date.UTC(year, month, 1));\n }\n const fallback = new Date(text);\n if (!Number.isNaN(fallback.getTime())) return fallback;\n const alt = new Date(Date.parse(text));\n if (!Number.isNaN(alt.getTime())) return alt;\n return null;\n}\n\nexport function formatDateLabel(date, {granularity = \"day\", locale} = {}) {\n if (!(date instanceof Date) || Number.isNaN(date.getTime())) return \"\";\n const loc = createLocale(locale);\n const baseName = typeof loc === \"string\" ? loc : loc.baseName || \"en-US\";\n const options = {year: \"numeric\"};\n if (granularity === \"month\" || granularity === \"day\") {\n options.month = \"long\";\n }\n if (granularity === \"day\") {\n options.day = \"numeric\";\n }\n options.timeZone = \"UTC\";\n try {\n const formatter = new Intl.DateTimeFormat(baseName, options);\n return formatter.format(date);\n } catch (_) {\n return date.toISOString().slice(0, 10);\n }\n}\n\nexport function normalizeRange(range = {}) {\n const {start, end, granularity = \"year\", locale} = range || {};\n const loc = createLocale(locale);\n const startDate = createDateFromInput(start || new Date(), {locale: loc}) ||\n new Date(Date.UTC(0, 0, 1));\n let endDate = createDateFromInput(end, {locale: loc});\n if (!endDate) {\n const copy = new Date(startDate.getTime());\n copy.setUTCFullYear(copy.getUTCFullYear() + 1);\n endDate = copy;\n }\n if (endDate <= startDate) {\n const nextDay = new Date(startDate.getTime());\n nextDay.setUTCDate(nextDay.getUTCDate() + 1);\n endDate = nextDay;\n }\n const span = Math.max(1, endDate - startDate);\n return {\n startDate,\n endDate,\n span,\n granularity: granularity === \"month\" || granularity === \"day\" ? granularity : \"year\",\n locale: loc,\n };\n}\n\nexport function buildPointMetadata({value, granularity, locale}) {\n const date = createDateFromInput(value, {locale});\n return {\n date,\n label: formatDateLabel(date, {granularity, locale}),\n timestamp: date ? date.getTime() : null,\n };\n}\n\nexport function clampProgress(value) {\n if (!Number.isFinite(value)) return 0;\n if (value < 0) return 0;\n if (value > 1) return 1;\n return value;\n}\n", "export default function TimelinePoint() {\n return null;\n}\n\nTimelinePoint.displayName = \"TimelinePoint\";\n"],
5
+ "mappings": "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",
6
6
  "names": ["React", "React", "React", "React", "React", "React", "React", "React", "React", "React", "_", "React", "React", "React", "React", "React", "React", "React", "React", "React", "useEffect", "useState", "React", "useEffect", "useState", "useState", "useEffect", "React", "React", "useEffect", "useState", "React", "useEffect", "useState", "React", "React", "React", "React", "React", "React", "useRef", "useState", "useEffect", "React", "React", "React", "React", "React", "React", "React", "React"]
7
7
  }