@canopy-iiif/app 0.10.21 → 0.10.23

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/iiif/Viewer.jsx", "../src/iiif/Slider.jsx", "../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"],
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\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 ? clean.slice(0, safeMax).trimEnd() + \"\u2026\" : 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 ? clean.slice(0, safeMax).trimEnd() + \"\u2026\" : 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 (\n <mark key={`${keyPrefix}-${idx}`}>\n {part}\n </mark>\n );\n }\n return (\n <React.Fragment key={`${keyPrefix}-${idx}`}>\n {part}\n </React.Fragment>\n );\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) => (needle === \"\\n\" ? text.indexOf(\"\\n\") : text.indexOf(needle)))\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}>{renderMarkdownTokens(token.children || [], query, key)}</strong>\n );\n case \"em\":\n return (\n <em key={key}>{renderMarkdownTokens(token.children || [], query, key)}</em>\n );\n case \"code\":\n return (\n <code key={key}>{token.value}</code>\n );\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(href, href.startsWith(\"http\") ? undefined : \"http://example.com\");\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}) {\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\n return (\n <a href={href} className=\"canopy-article-card\">\n <article>\n {displayUrl ? (\n <p className=\"canopy-article-card__url\">{displayUrl}</p>\n ) : null}\n <h3>{title}</h3>\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\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\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\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 </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\", className]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div\n data-canopy-search-form-panel\n className={classes || undefined}\n style={style}\n >\n <div id=\"cplist\" />\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, { 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\";\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 console.log(mod);\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 if (!CloverSlider) {\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-slider=\"1\" className=\"not-prose\">\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{ __html: json }}\n />\n </div>\n );\n }\n return <CloverSlider {...props} />;\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\" className=\"not-prose\">\n <script type=\"application/json\" dangerouslySetInnerHTML={{ __html: json }} />\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 />\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 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 const hasFilters = typeof onOpenFilters === \"function\";\n const filterBadge = activeFilterCount > 0 ? ` (${activeFilterCount})` : \"\";\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 >\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 onClick={() => onTypeChange && onTypeChange(t)}\n >\n {toLabel(t)} ({c})\n </button>\n );\n })}\n </div>\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"],
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\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\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\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\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 </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, { 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\";\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 console.log(mod);\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 if (!CloverSlider) {\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-slider=\"1\" className=\"not-prose\">\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{ __html: json }}\n />\n </div>\n );\n }\n return <CloverSlider {...props} />;\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\" className=\"not-prose\">\n <script type=\"application/json\" dangerouslySetInnerHTML={{ __html: json }} />\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 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 const hasFilters = typeof onOpenFilters === \"function\";\n const filterBadge = activeFilterCount > 0 ? ` (${activeFilterCount})` : \"\";\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 >\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 onClick={() => onTypeChange && onTypeChange(t)}\n >\n {toLabel(t)} ({c})\n </button>\n );\n })}\n </div>\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"],
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", "useEffect", "useState", "React", "useEffect", "useState", "React", "useEffect", "useState", "React", "useEffect", "useState", "React", "React", "React", "React", "React", "React", "React", "React", "React", "React", "React"]
7
7
  }
@@ -1263,15 +1263,16 @@ function SearchPanelForm(props = {}) {
1263
1263
  import React15 from "react";
1264
1264
  function SearchPanelTeaserResults(props = {}) {
1265
1265
  const { style, className } = props || {};
1266
- const classes = ["canopy-search-teaser", className].filter(Boolean).join(" ");
1266
+ const classes = ["canopy-search-teaser", "is-empty", className].filter(Boolean).join(" ");
1267
1267
  return /* @__PURE__ */ React15.createElement(
1268
1268
  "div",
1269
1269
  {
1270
1270
  "data-canopy-search-form-panel": true,
1271
+ hidden: true,
1271
1272
  className: classes || void 0,
1272
1273
  style
1273
1274
  },
1274
- /* @__PURE__ */ React15.createElement("div", { id: "cplist" })
1275
+ /* @__PURE__ */ React15.createElement("div", { id: "cplist", className: "canopy-search-teaser__list" })
1275
1276
  );
1276
1277
  }
1277
1278
 
@@ -1956,10 +1957,10 @@ function References({
1956
1957
  const contextReferences = !id && contextPage && Array.isArray(contextPage.referencedBy) ? contextPage.referencedBy : null;
1957
1958
  const references = resolveReferences(manifestId, contextReferences);
1958
1959
  if (!manifestId) return null;
1960
+ const entries = references && references.length ? references : null;
1961
+ if (!entries || !entries.length) return null;
1959
1962
  const containerClass = ["references", className].filter(Boolean).join(" ");
1960
- const list = references.length ? references : null;
1961
- const entries = list && list.length ? list : null;
1962
- return /* @__PURE__ */ React24.createElement("dl", { className: containerClass, ...rest }, /* @__PURE__ */ React24.createElement("div", { className: "references__group" }, /* @__PURE__ */ React24.createElement("dt", null, title), entries ? entries.map((entry) => /* @__PURE__ */ React24.createElement("dd", { key: entry.href, className: "references__item" }, /* @__PURE__ */ React24.createElement("a", { href: entry.href }, entry.title || entry.href))) : emptyLabel ? /* @__PURE__ */ React24.createElement("dd", { className: "references__empty" }, typeof emptyLabel === "function" ? emptyLabel() : emptyLabel) : null));
1963
+ return /* @__PURE__ */ React24.createElement("dl", { className: containerClass, ...rest }, /* @__PURE__ */ React24.createElement("div", { className: "references__group" }, /* @__PURE__ */ React24.createElement("dt", null, title), entries.map((entry) => /* @__PURE__ */ React24.createElement("dd", { key: entry.href, className: "references__item" }, /* @__PURE__ */ React24.createElement("a", { href: entry.href }, entry.title || entry.href)))));
1963
1964
  }
1964
1965
 
1965
1966
  // ui/src/search/MdxSearchResults.jsx